ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAyYzhjMzM2Li4zMmQ2YzYyIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMTUgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMC4wOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCisgIC0gYWRkIFNQSSBzdXBwb3J0IGZvciB0aGUgTVBDNXh4CisKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6CisgIGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgQ09ORklHX1NFUklBTF9UQUcgYW5kIENPTkZJR19SRVZJU0lPTl9UQUcKKyAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OworICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCisKICogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKICAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6CiAgIC0gVFggYW5kIFJYIGRlc2tyaXB0b3JzIG11c3QgYmUgcXVhZC13b3JkIGFsaWduZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYmI2MmIwZS4uMzZjYzA4OSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE5OCw2ICsxOTgsOSBAQAogY21pX21wYzV4eF9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjNXh4IGNtaQogCitQQVRJX2NvbmZpZzp1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzV4eCBwYXRpIG1wbAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBNUEM1eHh4IFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYyBiL2JvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwppbmRleCA5Yzk4YzkzLi41MTE3Mzk0IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKKysrIGIvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCkBAIC00Miw2ICs0Miw5IEBACiAjaW5jbHVkZSAiLi4vbWlwNDA1L21pcDQwNS5oIgogI2luY2x1ZGUgPDQwNWdwX3BjaS5oPgogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUEFUSSkKKyNkZWZpbmUgRklSTV9TVEFSVCAweEZGRjAwMDAwCisjZW5kaWYKIAogZXh0ZXJuIGludCBndW56aXAodm9pZCAqLCBpbnQsIHVjaGFyICosIGludCAqKTsKIGV4dGVybiBpbnQgbWVtX3Rlc3QodWxvbmcgc3RhcnQsIHVsb25nIHJhbXNpemUsIGludCBxdWlldCk7CkBAIC02MCwxNCArNjMsMTcgQEAKIAl1bG9uZyBzdGFydDsKIAlmbGFzaF9pbmZvX3QgKmluZm87CiAJaW50IGksIHJjOwotI2lmIGRlZmluZWQoQ09ORklHX1BJUDQwNSkgfHwgZGVmaW5lZChDT05GSUdfTUlQNDA1KQorI2lmIGRlZmluZWQoQ09ORklHX1BBVEkpCisJaW50IHN0YXJ0X3NlY3Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QSVA0MDUpIHx8IGRlZmluZWQoQ09ORklHX01JUDQwNSkgfHwgZGVmaW5lZChDT05GSUdfUEFUSSkKIAljaGFyICpjb3B5c3RyID0gKGNoYXIgKilzcmM7CiAJdWxvbmcgKm1hZ2ljID0gKHVsb25nICopc3JjOwogI2VuZGlmCiAKIAlpbmZvID0gJmZsYXNoX2luZm9bMF07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QSVA0MDUpIHx8IGRlZmluZWQoQ09ORklHX01JUDQwNSkKKyNpZiBkZWZpbmVkKENPTkZJR19QSVA0MDUpIHx8IGRlZmluZWQoQ09ORklHX01JUDQwNSkgfHwgZGVmaW5lZChDT05GSUdfUEFUSSkKIAlpZiAobnRvaGwobWFnaWNbMF0pICE9IElIX01BR0lDKSB7CiAJCXB1dHMoIkJhZCBNYWdpYyBudW1iZXJcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC05MCw2ICs5Niw3IEBACiAJCXByaW50ZigiV3JvbmcgRmlybXdhcmUgSW1hZ2U6ICVzXG4iLCAmY29weXN0cltpXSk7CiAJCXJldHVybiAtMTsKIAl9CisjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpCiAJc3RhcnQgPSAwIC0gc2l6ZTsKIAlmb3IgKGkgPSBpbmZvLT5zZWN0b3JfY291bnQtMTsgaSA+IDA7IGktLSkgewogCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsgLyogdW5wcm90ZWN0IHRoaXMgc2VjdG9yICovCkBAIC0xMDYsNiArMTEzLDM2IEBACiAJCXJldHVybiAoMSk7CiAJfQogCisjZWxzZSAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkgKi8KKwlzdGFydCA9IEZJUk1fU1RBUlQ7CisJc3RhcnRfc2VjdCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCQlpZiAoc3RhcnQgPCBpbmZvLT5zdGFydFtpXSkgeworCQkJc3RhcnRfc2VjdCA9IGkgLSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpbmZvLT5wcm90ZWN0W2kgLSAxXSA9IDA7CS8qIHVucHJvdGVjdCB0aGlzIHNlY3RvciAqLworCWZvciAoOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkJaWYgKChzdGFydCArIHNpemUpIDwgaW5mby0+c3RhcnRbaV0pCisJCQlicmVhazsKKwkJaW5mby0+cHJvdGVjdFtpXSA9IDA7CS8qIHVucHJvdGVjdCB0aGlzIHNlY3RvciAqLworCX0KKworCWktLTsKKwkvKiBzZXQtdXAgZmxhc2ggbG9jYXRpb24gKi8KKwkvKiBub3cgZXJhc2UgZmxhc2ggKi8KKwlwcmludGYgKCJFcmFzaW5nIGF0ICVseCB0byAlbHggKHNlY3RvciAlZCB0byAlZCkgKCVseCB0byAlbHgpXG4iLAorCQlzdGFydCwgc3RhcnQgKyBzaXplLCBzdGFydF9zZWN0LCBpLAorCQlpbmZvLT5zdGFydFtzdGFydF9zZWN0XSwgaW5mby0+c3RhcnRbaV0pOworCWlmICgocmMgPSBmbGFzaF9lcmFzZSAoaW5mbywgc3RhcnRfc2VjdCwgaSkpICE9IDApIHsKKwkJcHV0cyAoIkVSUk9SICIpOworCQlmbGFzaF9wZXJyb3IgKHJjKTsKKwkJcmV0dXJuICgxKTsKKwl9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUEFUSSkgKi8KKwogI2VsaWYgZGVmaW5lZChDT05GSUdfVkNNQTkpCiAJc3RhcnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CkBAIC0yMjcsNyArMjY0LDcgQEAKIAlyZXR1cm4ocmMpOwogfQogCi0KKyNpZiAhZGVmaW5lZChDT05GSUdfUEFUSSkKIHZvaWQgZ2V0X2JhY2t1cF92YWx1ZXMoYmFja3VwX3QgKmJ1ZikKIHsKIAlpMmNfcmVhZChDRkdfREVGX0VFUFJPTV9BRERSLCBJMkNfQkFDS1VQX0FERFIsMiwodm9pZCAqKWJ1ZixzaXplb2YoYmFja3VwX3QpKTsKQEAgLTQxNywxNCArNDU0LDE3IEBACiAJfQogfQogCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKENPTkZJR19QQVRJKSAqLwogCiBpbnQgZG9fbXBsY29tbW9uKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogIAl1bG9uZyBzaXplLHNyYyxsZF9hZGRyOwogCWludCByZXN1bHQ7CisjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpCiAJYmFja3VwX3QgYmFjazsKIAlzcmMgPSBNVUxUSV9QVVJQT1NFX1NPQ0tFVF9BRERSOwogCXNpemUgPSBJTUFHRV9TSVpFOworI2VuZGlmCiAKIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICJmbGFzaCIpID09IDApCiAJewpAQCAtNDYwLDExICs1MDAsMTMgQEAKIAkJCXJlc3VsdD1tcGxfcHJnX2ltYWdlKCh1Y2hhciAqKWxkX2FkZHIpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQorI2lmICFkZWZpbmVkKENPTkZJR19QQVRJKQogCQlpZiAoc3RyY21wKGFyZ3ZbMl0sICJtcHMiKSA9PSAwKSB7CiAJCQlwdXRzKCJcbnVwZGF0aW5nIGJvb3Rsb2FkZXIgaW1hZ2UgZnJvbSBNUFNcbiIpOwogCQkJcmVzdWx0PW1wbF9wcmcoKHVjaGFyICopc3JjLHNpemUpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQorI2VuZGlmIC8qICNpZiAhZGVmaW5lZChDT05GSUdfUEFUSSkJKi8KIAl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAibWVtIikgPT0gMCkKIAl7CkBAIC00OTAsNiArNTMyLDcgQEAKIAkJfXdoaWxlKHJlc3VsdCk7CiAJCXJldHVybiAwOwogCX0KKyNpZiAhZGVmaW5lZChDT05GSUdfUEFUSSkKIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICJjbGVhcmVudnZhbHVlcyIpID09IDApCiAJewogIAkJaWYgKHN0cmNtcChhcmd2WzJdLCAieWVzIikgPT0gMCkKQEAgLTUxMiw2ICs1NTUsNyBAQAogCQlzZXRfYmFja3VwX3ZhbHVlcygxKTsKIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAJcHJpbnRmKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jIGIvYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCmluZGV4IDVmNTAyMDAuLmZkNDMwMDggMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9jb21tb24vZmxhc2guYworKysgYi9ib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKQEAgLTM2LDYgKzM2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZiAhZGVmaW5lZChDT05GSUdfUEFUSSkKICNpbmNsdWRlIDxwcGM0eHguaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSAiY29tbW9uX3V0aWwuaCIKQEAgLTQ2LDYgKzQ4LDkgQEAKICNpbmNsdWRlICIuLi9waXA0MDUvcGlwNDA1LmgiCiAjZW5kaWYKICNpbmNsdWRlIDw0MDVncF9wY2kuaD4KKyNlbHNlIC8qIGRlZmluZWQoQ09ORklHX1BBVEkpICovCisjaW5jbHVkZSA8bXBjNXh4Lmg+CisjZW5kaWYKIAogZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NiwyMiArNjEsMTUgQEAKIAogdm9pZCB1bmxvY2tfaW50ZWxfc2VjdG9ycyhmbGFzaF9pbmZvX3QgKmluZm8sdWxvbmcgYWRkcix1bG9uZyBjbnQpOwogCi0KLSNpZmRlZiBDT05GSUdfUElQNDA1CiAjZGVmaW5lIEFERFIwICAgICAgICAgICAweDU1NTUKICNkZWZpbmUgQUREUjEgICAgICAgICAgIDB4MmFhYQogI2RlZmluZSBGTEFTSF9XT1JEX1NJWkUgdW5zaWduZWQgc2hvcnQKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01JUDQwNQotI2RlZmluZSBBRERSMCAgICAgICAgICAgMHg1NTU1Ci0jZGVmaW5lIEFERFIxICAgICAgICAgICAweDJhYWEKLSNkZWZpbmUgRkxBU0hfV09SRF9TSVpFIHVuc2lnbmVkIHNob3J0Ci0jZW5kaWYKIAogI2RlZmluZSBGQUxTRSAgICAgICAgICAgMAogI2RlZmluZSBUUlVFICAgICAgICAgICAgMQogCisjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNvbWUgQ1Mgc3dpdGNoaW5nIHJvdXRpbmVzOgogICoKQEAgLTE1MSwxMSArMTQ5LDE2IEBACiAJfQogfQogCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKENPTkZJR19QQVRJKSAqLwogCiB1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaXplX2IwLCBzaXplX2IxLGZsYXNoY3IsIHNpemVfcmVnOwotCWludCBtb2RlLCBpOworCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMDsKKwlpbnQgaTsKKworI2lmICFkZWZpbmVkKENPTkZJR19QQVRJKQorCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMSxmbGFzaGNyLHNpemVfcmVnOworCWludCBtb2RlOwogCWV4dGVybiBjaGFyIHZlcnNpb25fc3RyaW5nOwogCWNoYXIgKnA9JnZlcnNpb25fc3RyaW5nOwogCkBAIC0xNjksNiArMTcyLDcgQEAKIAllbHNlCiAJCXByaW50ZigiKCVzIEJvb3QpICIsKG1vZGUgJiBCT09UX01QUykgPwogCQkJIk1QUyIgOiAiRmxhc2giKTsKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpICovCiAJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwogCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewogCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKQEAgLTE5MCw2ICsxOTQsNyBAQAogCQkJQ0ZHX01PTklUT1JfQkFTRSttb25pdG9yX2ZsYXNoX2xlbi0xLAogCQkJJmZsYXNoX2luZm9bMF0pOwogI2VuZGlmCisjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpCiAJLyogcHJvdGVjdCByZXNldCB2ZWN0b3IgKi8KIAlmbGFzaF9pbmZvWzBdLnByb3RlY3RbZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQtMV0gPSAxOwogCXNpemVfYjEgPSAwIDsKQEAgLTIzMyw3ICsyMzgsNyBAQAogCQltdGRjcihlYmNjZmdkLCBmbGFzaGNyKTsKIAl9CiAjaWYgMAotCS8qIGVuYWJsZSB0aGlzIGlmIHlvdSB3YW50IHRvIHRlc3QgaWYKKwkvKiBlbmFibGUgdGhpcyAoUElQNDA1L01JUDQwNSBvbmx5KSBpZiB5b3Ugd2FudCB0byB0ZXN0IGlmCiAJICAgdGhlIHJlbG9jYXRpb24gaGFzIGJlIGRvbmUgb2suCiAJICAgVGhpcyB3aWxsIGRpc2FibGUgYm90aCBDaGlwc2VsZWN0cyAqLwogCW10ZGNyIChlYmNjZmdhLCBwYjBjcik7CkBAIC0yNTAsNiArMjU1LDE1IEBACiAJCX0KIAkJcCsrOwogCX0KKyNlbHNlIC8qICNpZiAhZGVmaW5lZChDT05GSUdfUEFUSSkgKi8KKyNpZmRlZglDRkdfRU5WX0lTX0lOX0ZMQVNICisJLyogRU5WIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJICAgICAgQ0ZHX0VOVl9BRERSLAorCQkgICAgICBDRkdfRU5WX0FERFIrQ0ZHX0VOVl9TRUNUX1NJWkUtMSwKKwkJICAgICAgJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKENPTkZJR19QQVRJKSAqLwogCXJldHVybiAoc2l6ZV9iMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL01ha2VmaWxlIGIvYm9hcmQvbXBsL3BhdGkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5Y2UxMgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wbC9wYXRpL01ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAxCVdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUKKyMKKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSAgcGF0aS5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9tZW10c3QubyBjbWRfcGF0aS5vIC4uL2NvbW1vbi9jb21tb25fdXRpbC5vCisjIyMjIGNtZF9wYXRpLm8KK1NPQkpTCTo9CisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL2NtZF9wYXRpLmMgYi9ib2FyZC9tcGwvcGF0aS9jbWRfcGF0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYWIyODYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGwvcGF0aS9jbWRfcGF0aS5jCkBAIC0wLDAgKzEsNDUxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBEZW5pcyBQZXRlciwgTVBMIEFHIFN3aXR6ZXJsYW5kLCBkLnBldGVyQG1wbC5jaAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIEFkYXB0ZWQgZm9yIFBBVEkKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2RlZmluZSBQTFg5MDU2X0xPQworI2luY2x1ZGUgInBseDkwNTYuaCIKKyNpbmNsdWRlICJwYXRpLmgiCisjaW5jbHVkZSAicGNpX2VlcHJvbS5oIgorCitleHRlcm4gdm9pZCBzaG93X3BsZF9yZWdzKHZvaWQpOworZXh0ZXJuIGludCBkb19tcGxjb21tb24oY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCitleHRlcm4gdm9pZCB1c2VyX2xlZDAoaW50IGxlZF9vbik7CitleHRlcm4gdm9pZCB1c2VyX2xlZDEoaW50IGxlZF9vbik7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBkZWZpbmVkKENGR19QQ0lfQ09OX0RFVklDRSkKK2V4dGVybiB2b2lkIHBjaV9jb25fZGlzYyh2b2lkKTsKK2V4dGVybiB2b2lkIHBjaV9jb25fY29ubmVjdCh2b2lkKTsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFZXByb20gU3VwcG9ydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Vuc2lnbmVkIGxvbmcgZ2V0MzIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgKnA9KHVuc2lnbmVkIGxvbmcgKilhZGRyOworCXJldHVybiAqcDsKK30KKwordm9pZCBzZXQzMih1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgKnA9KHVuc2lnbmVkIGxvbmcgKilhZGRyOworCSpwPWRhdGE7Cit9CisKKyNkZWZpbmUgUENJQ0ZHX0dFVF9SRUcoeCkJKGdldDMyKCh4KSArIFBDSV9DT05GSUdfQkFTRSkpCisjZGVmaW5lIFBDSUNGR19TRVRfUkVHKHgseSkJKHNldDMyKCh4KSArIFBDSV9DT05GSUdfQkFTRSwoeSkpKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlbG9hZF9wY2lfZWVwcm9tCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCByZWxvYWRfcGNpX2VlcHJvbSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCS8qIFNldCBCaXQgMjkgYW5kIGNsZWFyIGl0IGFnYWluICovCisJcmVnPVBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCk7CisJdWRlbGF5KDEpOworCS8qIHNldCBpdCovCisJcmVnfD0oMTw8MjkpOworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcpOworCS8qIEVFQ0xLIEAgMzNNSHogPSAxMjVrSHoKKwkgKiAtPiBleHRyYSBsb25nIGxvYWQgPSAzMiAqIDE2Yml0ID0gNTEyQml0IEAgMTI1a0h6ID0gNC4xbXNlYworCSAqIHVzZSAyMG1zZWMKKwkgKi8KKwl1ZGVsYXkoMjAwMDApOyAvKiB3YWl0IDIwbXMgKi8KKwlyZWcgJj0gfigxPDwyOSk7IC8qIHNldCBpdCBsb3cgKi8KKwlQQ0lDRkdfU0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQscmVnKTsKKwl1ZGVsYXkoMSk7IC8qIHdhaXQgc29tZSB0aW1lICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNsb2NrX3BjaV9lZXByb20KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGNsb2NrX3BjaV9lZXByb20odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwkvKiBjbG9jayBpcyBsb3csIGRhdGEgaXMgdmFsaWQgKi8KKwlyZWc9UENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFUKTsKKwl1ZGVsYXkoMSk7CisJLyogc2V0IGNsY2sgaGlnaCAqLworCXJlZ3w9KDE8PDI0KTsKKwlQQ0lDRkdfU0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQscmVnKTsKKwl1ZGVsYXkoMSk7IC8qIHdhaXQgc29tZSB0aW1lICovCisJcmVnICY9IH4oMTw8MjQpOyAvKiBzZXQgY2xvY2sgbG93ICovCisJUENJQ0ZHX1NFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFULHJlZyk7CisJdWRlbGF5KDEpOyAvKiB3YWl0IHNvbWUgdGltZSAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzZW5kX3BjaV9lZXByb21fY21kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2VuZF9wY2lfZWVwcm9tX2NtZCh1bnNpZ25lZCBsb25nIGNtZCwgdW5zaWduZWQgY2hhciBsZW4pCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisJaW50IGk7CisJcmVnPVBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCk7CisJLyogQ2xlYXIgYWxsIEVFUFJPTSBiaXRzICovCisJcmVnICY9IH4oMHhGIDw8IDI0KTsKKwkvKiBUb2dnbGUgRUVQUk9NJ3MgQ2hpcCBzZWxlY3QgdG8gZ2V0IGl0IG91dCBvZiBTaGlmdCBSZWdpc3RlciBNb2RlICovCisJUENJQ0ZHX1NFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFULHJlZyk7CisJdWRlbGF5KDEpOyAvKiB3YWl0IHNvbWUgdGltZSAqLworCS8qIEVuYWJsZSBFRVBST00gQ2hpcCBTZWxlY3QgKi8KKwlyZWcgfD0gKDEgPDwgMjUpOworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcpOworCS8qIFNlbmQgRUVQUk9NIGNvbW1hbmQgLSBvbmUgYml0IGF0IGEgdGltZSAqLworCWZvciAoaSA9IChpbnQpKGxlbi0xKTsgaSA+PSAwOyBpLS0pIHsKKwkJLyogQ2hlY2sgaWYgY3VycmVudCBiaXQgaXMgMCBvciAxICovCisJCWlmIChjbWQgJiAoMSA8PCBpKSkKKwkJCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCwocmVnIHwgKDE8PDI2KSkpOworCQllbHNlCisJCQlQQ0lDRkdfU0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQscmVnKTsKKwkJY2xvY2tfcGNpX2VlcHJvbSgpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogd3JpdGVfcGNpX2VlcHJvbV9vZmZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgd3JpdGVfcGNpX2VlcHJvbV9vZmZzKHVuc2lnbmVkIHNob3J0IG9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisJaW50IGJpdHBvcywgY21kc2hmdCwgY21kbGVuLCB0aW1lb3V0OworCS8qIHdlJ3JlIHVzaW5nIHRoZSBFZXByb20gOTNDUzY2ICovCisJY21kc2hmdCAgPSAyOworCWNtZGxlbiA9IEVFNjZfQ01EX0xFTjsKKwkvKiBTZW5kIFdyaXRlX0VuYWJsZSBjb21tYW5kIHRvIEVFUFJPTSAqLworCXNlbmRfcGNpX2VlcHJvbV9jbWQoKEVFX1dSRU4gPDwgY21kc2hmdCksY21kbGVuKTsKKwkvKiBTZW5kIEVFUFJPTSBXcml0ZSBjb21tYW5kIGFuZCBvZmZzZXQgdG8gRUVQUk9NICovCisJc2VuZF9wY2lfZWVwcm9tX2NtZCgoRUVfV1JJVEUgPDwgY21kc2hmdCkgfCAob2Zmc2V0IC8gMiksY21kbGVuKTsKKwlyZWc9UENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFUKTsKKwkvKiBDbGVhciBhbGwgRUVQUk9NIGJpdHMgKi8KKwlyZWcgJj0gfigweEYgPDwgMjQpOworCS8qIE1ha2Ugc3VyZSBFRURPIElucHV0IGlzIGRpc2FibGVkIGZvciBzb21lIFBMWCBjaGlwcyAqLworCXJlZyAmPSB+KDEgPDwgMzEpOworCS8qIEVuYWJsZSBFRVBST00gQ2hpcCBTZWxlY3QgKi8KKwlyZWcgfD0gKDEgPDwgMjUpOworCS8qIFdyaXRlIDE2LWJpdCB2YWx1ZSB0byBFRVBST00gLSBvbmUgYml0IGF0IGEgdGltZSAqLworCWZvciAoYml0cG9zID0gMTU7IGJpdHBvcyA+PSAwOyBiaXRwb3MtLSkgeworCQkvKiBHZXQgYml0IHZhbHVlIGFuZCBzaGlmdCBpbnRvIHJlc3VsdCAqLworCQlpZiAodmFsdWUgJiAoMSA8PCBiaXRwb3MpKQorCQkJUENJQ0ZHX1NFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFULChyZWcgfCAoMTw8MjYpKSk7CisJCWVsc2UKKwkJCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcgKTsKKwkJY2xvY2tfcGNpX2VlcHJvbSgpOworCX0gLyogZm9yICovCisJLyogRGVzZWxlY3QgQ2hpcCAqLworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcgJiB+KDEgPDwgMjUpKTsKKwkvKiBSZS1zZWxlY3QgQ2hpcCAqLworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcgfCAoMSA8PCAyNSkpOworCS8qIEEgc21hbGwgZGVsYXkgaXMgbmVlZGVkIHRvIGxldCBFRVBST00gY29tcGxldGUgKi8KKwl0aW1lb3V0ID0gMDsKKwlkbyB7CisJCXVkZWxheSgxMCk7CisJCXJlZz1QQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQpOworCQl0aW1lb3V0Kys7CisJfSB3aGlsZSAoKChyZWcgJiAoMSA8PCAyNykpID09IDApICYmIHRpbWVvdXQgPCAyMDAwMCk7CisJLyogU2VuZCBXcml0ZV9EaXNhYmxlIGNvbW1hbmQgdG8gRUVQUk9NICovCisJc2VuZF9wY2lfZWVwcm9tX2NtZCgoRUVfV0RTIDw8IGNtZHNoZnQpLGNtZGxlbik7CisJLyogQ2xlYXIgQ2hpcCBTZWxlY3QgYW5kIGFsbCBvdGhlciBFRVBST00gYml0cyAqLworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcgJiB+KDB4RiA8PCAyNCkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlYWRfcGNpX2VlcHJvbV9vZmZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcmVhZF9wY2lfZWVwcm9tX29mZnModW5zaWduZWQgc2hvcnQgb2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCAqcHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCWludCBiaXRwb3MsIGNtZHNoZnQsIGNtZGxlbjsKKwkvKiB3ZSdyZSB1c2luZyB0aGUgRWVwcm9tIDkzQ1M2NiAqLworCWNtZHNoZnQgID0gMjsKKwljbWRsZW4gPSBFRTY2X0NNRF9MRU47CisJLyogU2VuZCBFRVBST00gcmVhZCBjb21tYW5kIGFuZCBvZmZzZXQgdG8gRUVQUk9NICovCisJc2VuZF9wY2lfZWVwcm9tX2NtZCgoRUVfUkVBRCA8PCBjbWRzaGZ0KSB8IChvZmZzZXQgLyAyKSxjbWRsZW4pOworCS8qIFNldCBFRVBST00gd3JpdGUgb3V0cHV0IGJpdCAqLworCXJlZz1QQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQpOworCS8qIFNldCBFRURPIElucHV0IGVuYWJsZSAqLworCXJlZyB8PSAoMSA8PCAzMSk7CisJUENJQ0ZHX1NFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFULHJlZyB8ICgxIDw8IDI2KSk7CisJLyogR2V0IDE2LWJpdCB2YWx1ZSBmcm9tIEVFUFJPTSAtIG9uZSBiaXQgYXQgYSB0aW1lICovCisJZm9yIChiaXRwb3MgPSAwOyBiaXRwb3MgPCAxNjsgYml0cG9zKyspIHsKKwkJY2xvY2tfcGNpX2VlcHJvbSgpOworCQl1ZGVsYXkoMTApOworCQlyZWc9UENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9FRVBST01fQ1RSTF9TVEFUKTsKKwkJLyogR2V0IGJpdCB2YWx1ZSBhbmQgc2hpZnQgaW50byByZXN1bHQgKi8KKwkJaWYgKHJlZyAmICgxIDw8IDI3KSkKKwkJCSpwdmFsdWUgPSAodW5zaWduZWQgc2hvcnQpKCgqcHZhbHVlIDw8IDEpIHwgMSk7CisJCWVsc2UKKwkJCSpwdmFsdWUgPSAodW5zaWduZWQgc2hvcnQpKCpwdmFsdWUgPDwgMSk7CisJfQorCS8qIENsZWFyIEVFRE8gSW5wdXQgZW5hYmxlICovCisJcmVnICY9IH4oMSA8PCAzMSk7CisJLyogQ2xlYXIgQ2hpcCBTZWxlY3QgYW5kIGFsbCBvdGhlciBFRVBST00gYml0cyAqLworCVBDSUNGR19TRVRfUkVHKFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCxyZWcgJiB+KDB4RiA8PCAyNCkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVFUFJPTSByZWFkL3dyaXRlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjdW5kZWYgRUVQUk9NX0RCRworc3RhdGljIGludCBwYXRpX3BjaV9lZXByb21fZXJhc2Uodm9pZCkKK3sKKwlpbnQgaTsKKwlwcmludGYoIkVyYXNpbmcgRUVQUk9NICIpOworCWZvciggaT0wOyBpIDwgUEFUSV9FRVBST01fTEFTVF9PRkZTRVQ7IGkrPTIpIHsKKwkJd3JpdGVfcGNpX2VlcHJvbV9vZmZzKGksMHhmZmZmKTsKKwkJaWYoKGklMHgxMCkpCisJCQlwcmludGYoIi4iKTsKKwl9CisJcHJpbnRmKCJcbkRvbmVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdGlfcGNpX2VlcHJvbV9wcmcodm9pZCkKK3sKKwlpbnQgaTsKKwlpPTA7CisJcHJpbnRmKCJQcm9ncmFtbWluZyBFRVBST00gIik7CisJd2hpbGUocGF0aV9lZXByb21baV0ub2Zmc2V0PDB4ZmZmZikgeworCQl3cml0ZV9wY2lfZWVwcm9tX29mZnMocGF0aV9lZXByb21baV0ub2Zmc2V0LHBhdGlfZWVwcm9tW2ldLnZhbHVlKTsKKwkJI2lmZGVmIEVFUFJPTV9EQkcKKwkJcHJpbnRmKCIweCUwNFg6IDB4JTA0WFxuIixwYXRpX2VlcHJvbVtpXS5vZmZzZXQsIHBhdGlfZWVwcm9tW2ldLnZhbHVlKTsKKwkJI2Vsc2UKKwkJaWYoKGklMHgxMCkpCisJCQlwcmludGYoIi4iKTsKKwkJI2VuZGlmCisJCWkrKzsKKwl9CisJcHJpbnRmKCJcbkRvbmVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdGlfcGNpX2VlcHJvbV93cml0ZSh1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgc2hvcnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCAqYnVmZmVyID0odW5zaWduZWQgc2hvcnQgKilhZGRyOworCWlmKChvZmZzZXQgKyBzaXplKSA+IFBBVElfRUVQUk9NX0xBU1RfT0ZGU0VUKSB7CisJCXNpemUgPSBQQVRJX0VFUFJPTV9MQVNUX09GRlNFVCAtIG9mZnNldDsKKwl9CisJcHJpbnRmKCJXcml0ZSBUbyBFRVBST00gZnJvbSAweCVsWCB0byAweCVYIDB4JVggd29yZHNcbiIsIGFkZHIsIG9mZnNldCwgc2l6ZS8yKTsKKwlmb3IoIGkgPSBvZmZzZXQ7IGk8IChvZmZzZXQgKyBzaXplKTsgaSs9MikgeworCQl2YWx1ZSA9ICpidWZmZXIrKzsKKwkJd3JpdGVfcGNpX2VlcHJvbV9vZmZzKGksdmFsdWUpOworCQkjaWZkZWYgRUVQUk9NX0RCRworCQlwcmludGYoIjB4JTA0WDogMHglMDRYXG4iLGksIHZhbHVlKTsKKwkJI2Vsc2UKKwkJaWYoKGklMHgxMCkpCisJCQlwcmludGYoIi4iKTsKKwkJI2VuZGlmCisJfQorCXByaW50ZigiXG5Eb25lXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRpX3BjaV9lZXByb21fcmVhZCh1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgc2hvcnQgc2l6ZSkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCAqYnVmZmVyID0odW5zaWduZWQgc2hvcnQgKilhZGRyOworCWlmKChvZmZzZXQgKyBzaXplKSA+IFBBVElfRUVQUk9NX0xBU1RfT0ZGU0VUKSB7CisJCXNpemUgPSBQQVRJX0VFUFJPTV9MQVNUX09GRlNFVCAtIG9mZnNldDsKKwl9CisJcHJpbnRmKCJSZWFkIGZyb20gRUVQUk9NIGZyb20gMHglWCB0byAweCVsWCAweCVYIHdvcmRzXG4iLCBvZmZzZXQsIGFkZHIsIHNpemUvMik7CisJZm9yKCBpID0gb2Zmc2V0OyBpPCAob2Zmc2V0ICsgc2l6ZSk7IGkrPTIpIHsKKwkJcmVhZF9wY2lfZWVwcm9tX29mZnMoaSwmdmFsdWUpOworCQkqYnVmZmVyKys9dmFsdWU7CisJCSNpZmRlZiBFRVBST01fREJHCisJCXByaW50ZigiMHglMDRYOiAweCUwNFhcbiIsaSwgdmFsdWUpOworCQkjZWxzZQorCQlpZigoaSUweDEwKSkKKwkJCXByaW50ZigiLiIpOworCQkjZW5kaWYKKwl9CisJcHJpbnRmKCJcbkRvbmVcbiIpOworCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJIEJyaWRnZSBSZWdpc3RlcnMgRHVtcAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfcGNpX3JlZ3Modm9pZCkKK3sKKwlwcmludGYoIiBQQ0k5MDU2X1NQQUNFMF9SQU5HRSAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9TUEFDRTBfUkFOR0UpKTsKKwlwcmludGYoIiBQQ0k5MDU2X1NQQUNFMF9SRU1BUCAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9TUEFDRTBfUkVNQVApKTsKKwlwcmludGYoIiBQQ0k5MDU2X0xPQ0FMX0RNQV9BUkJJVCAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9MT0NBTF9ETUFfQVJCSVQpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0VORElBTl9ERVNDICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9FTkRJQU5fREVTQykpOworCXByaW50ZigiIFBDSTkwNTZfRVhQX1JPTV9SQU5HRSAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0VYUF9ST01fUkFOR0UpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0VYUF9ST01fUkVNQVAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9FWFBfUk9NX1JFTUFQKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9TUEFDRTBfUk9NX0RFU0MgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfU1BBQ0UwX1JPTV9ERVNDKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9ETV9SQU5HRSAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRE1fUkFOR0UpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0RNX01FTV9CQVNFICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9ETV9NRU1fQkFTRSkpOworCXByaW50ZigiIFBDSTkwNTZfRE1fSU9fQkFTRSAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0RNX0lPX0JBU0UpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0RNX1BDSV9NRU1fUkVNQVAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9ETV9QQ0lfTUVNX1JFTUFQKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9ETV9QQ0lfSU9fQ09ORklHICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRE1fUENJX0lPX0NPTkZJRykpOworCXByaW50ZigiIFBDSTkwNTZfU1BBQ0UxX1JBTkdFICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1NQQUNFMV9SQU5HRSkpOworCXByaW50ZigiIFBDSTkwNTZfU1BBQ0UxX1JFTUFQICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1NQQUNFMV9SRU1BUCkpOworCXByaW50ZigiIFBDSTkwNTZfU1BBQ0UxX0RFU0MgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1NQQUNFMV9ERVNDKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9ETV9EQUMgICAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRE1fREFDKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9NQUlMQk9YMCAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfTUFJTEJPWDApKTsKKwlwcmludGYoIiBQQ0k5MDU2X01BSUxCT1gxICAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9NQUlMQk9YMSkpOworCXByaW50ZigiIFBDSTkwNTZfTUFJTEJPWDIgICAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X01BSUxCT1gyKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9NQUlMQk9YMyAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfTUFJTEJPWDMpKTsKKwlwcmludGYoIiBQQ0k5MDU2X01BSUxCT1g0ICAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9NQUlMQk9YNCkpOworCXByaW50ZigiIFBDSTkwNTZfTUFJTEJPWDUgICAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X01BSUxCT1g1KSk7CisJcHJpbnRmKCIgUENJOTA1Nl9NQUlMQk9YNiAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfTUFJTEJPWDYpKTsKKwlwcmludGYoIiBQQ0k5MDU2X01BSUxCT1g3ICAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9NQUlMQk9YNykpOworCXByaW50ZigiIFBDSTkwNTZfUENJX1RPX0xPQ19EQkVMTCAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1BDSV9UT19MT0NfREJFTEwpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0xPQ19UT19QQ0lfREJFTEwgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9MT0NfVE9fUENJX0RCRUxMKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9JTlRfQ1RSTF9TVEFUICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfSU5UX0NUUkxfU1RBVCkpOworCXByaW50ZigiIFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVCAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0VFUFJPTV9DVFJMX1NUQVQpKTsKKwlwcmludGYoIiBQQ0k5MDU2X1BFUk1fVkVORE9SX0lEICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9QRVJNX1ZFTkRPUl9JRCkpOworCXByaW50ZigiIFBDSTkwNTZfUkVWSVNJT05fSUQgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1JFVklTSU9OX0lEKSk7CisJcHJpbnRmKCIgXG4iKTsKKwlwcmludGYoIiBQQ0k5MDU2X1ZFTkRPUl9JRCAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9WRU5ET1JfSUQpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0NPTU1BTkQgICAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9DT01NQU5EKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9SRVZJU0lPTiAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfUkVWSVNJT04pKTsKKwlwcmludGYoIiBQQ0k5MDU2X0NBQ0hFX1NJWkUgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9DQUNIRV9TSVpFKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9SVFJfQkFTRSAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfUlRSX0JBU0UpKTsKKwlwcmludGYoIiBQQ0k5MDU2X1JUUl9JT19CQVNFICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9SVFJfSU9fQkFTRSkpOworCXByaW50ZigiIFBDSTkwNTZfTE9DQUxfQkFTRTAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0xPQ0FMX0JBU0UwKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9MT0NBTF9CQVNFMSAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfTE9DQUxfQkFTRTEpKTsKKwlwcmludGYoIiBQQ0k5MDU2X1VOVVNFRF9CQVNFMSAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9VTlVTRURfQkFTRTEpKTsKKwlwcmludGYoIiBQQ0k5MDU2X1VOVVNFRF9CQVNFMiAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9VTlVTRURfQkFTRTIpKTsKKwlwcmludGYoIiBQQ0k5MDU2X0NJU19QVFIgICAgICAgICAgJTA4bFhcbiIsUENJQ0ZHX0dFVF9SRUcoUENJOTA1Nl9DSVNfUFRSKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9TVUJfSUQgICAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfU1VCX0lEKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9FWFBfUk9NX0JBU0UgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfRVhQX1JPTV9CQVNFKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9DQVBfUFRSICAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfQ0FQX1BUUikpOworCXByaW50ZigiIFBDSTkwNTZfSU5UX0xJTkUgICAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X0lOVF9MSU5FKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9QTV9DQVBfSUQgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfUE1fQ0FQX0lEKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9QTV9DU1IgICAgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfUE1fQ1NSKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9IU19DQVBfSUQgICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfSFNfQ0FQX0lEKSk7CisJcHJpbnRmKCIgUENJOTA1Nl9WUERfQ0FQX0lEICAgICAgICUwOGxYXG4iLFBDSUNGR19HRVRfUkVHKFBDSTkwNTZfVlBEX0NBUF9JRCkpOworCXByaW50ZigiIFBDSTkwNTZfVlBEX0RBVEEgICAgICAgICAlMDhsWFxuIixQQ0lDRkdfR0VUX1JFRyhQQ0k5MDU2X1ZQRF9EQVRBKSk7Cit9CisKKworaW50IGRvX3BhdGkoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKHN0cmNtcChhcmd2WzFdLCAiaW5mbyIpID09IDApCisJeworCQlzaG93X3BsZF9yZWdzKCk7CisJIAlyZXR1cm4gMDsKKwl9CisJaWYgKHN0cmNtcChhcmd2WzFdLCAicGNpIikgPT0gMCkKKwl7CisJCWRpc3BsYXlfcGNpX3JlZ3MoKTsKKwkgCXJldHVybiAwOworCX0KKwlpZiAoc3RyY21wKGFyZ3ZbMV0sICJsZWQiKSA9PSAwKQorCXsKKwkJaW50IGxlZF9ucixsZWRfb247CisJCWxlZF9uciA9IChpbnQpc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTApOworCQlsZWRfb24gPSAoaW50KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDEwKTsKKwkJaWYoIWxlZF9ucikKKwkJCXVzZXJfbGVkMChsZWRfb24pOworCQllbHNlCisJCQl1c2VyX2xlZDEobGVkX29uKTsKKwkJcmV0dXJuIDA7CisgICAJfQorI2lmIGRlZmluZWQoQ0ZHX1BDSV9DT05fREVWSUNFKQorCWlmIChzdHJjbXAoYXJndlsxXSwgImNvbiIpID09IDApIHsKKwkJcGNpX2Nvbl9jb25uZWN0KCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RyY21wKGFyZ3ZbMV0sICJkaXNjIikgPT0gMCkgeworCQlwY2lfY29uX2Rpc2MoKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisJaWYgKHN0cmNtcChhcmd2WzFdLCAiZWVwcm9tIikgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCWludCBzaXplLCBvZmZzZXQ7CisJCW9mZnNldCA9IDA7CisJCXNpemUgPSBQQVRJX0VFUFJPTV9MQVNUX09GRlNFVDsKKwkJaWYoYXJnYz4yKSB7CisJCQlpZihhcmdjPjMpIHsKKwkJCQlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlszXSwgTlVMTCwgMTYpOworCQkJCWlmKGFyZ2M+NCkKKwkJCQkJb2Zmc2V0ID0gKGludCkgc2ltcGxlX3N0cnRvdWwoYXJndls0XSwgTlVMTCwgMTYpOworCQkJCWlmKGFyZ2M+NSkKKwkJCQkJc2l6ZSA9IChpbnQpIHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbNV0sIE5VTEwsIDE2KTsKKwkJCQlpZiAoc3RyY21wKGFyZ3ZbMl0sICJyZWFkIikgPT0gMCkgeworCQkJCQlyZXR1cm4gKHBhdGlfcGNpX2VlcHJvbV9yZWFkKG9mZnNldCwgYWRkciwgc2l6ZSkpOworCQkJCX0KKwkJCQlpZiAoc3RyY21wKGFyZ3ZbMl0sICJ3cml0ZSIpID09IDApIHsKKwkJCQkJcmV0dXJuIChwYXRpX3BjaV9lZXByb21fd3JpdGUob2Zmc2V0LCBhZGRyLCBzaXplKSk7CisJCQkJfQorCQkJfQorCQkJaWYgKHN0cmNtcChhcmd2WzJdLCAicHJnIikgPT0gMCkgeworCQkJCXJldHVybiAocGF0aV9wY2lfZWVwcm9tX3ByZygpKTsKKwkJCX0KKwkJCWlmIChzdHJjbXAoYXJndlsyXSwgImVyYSIpID09IDApIHsKKwkJCQlyZXR1cm4gKHBhdGlfcGNpX2VlcHJvbV9lcmFzZSgpKTsKKwkJCX0KKwkJCWlmIChzdHJjbXAoYXJndlsyXSwgInJlbG9hZCIpID09IDApIHsKKwkJCQlyZWxvYWRfcGNpX2VlcHJvbSgpOworCQkJCXJldHVybiAwOworCQkJfQorCisKKwkJfQorCX0KKworCXJldHVybiAoZG9fbXBsY29tbW9uKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KSk7Cit9CisKK1VfQk9PVF9DTUQoCisJcGF0aSwJOCwJMSwJZG9fcGF0aSwKKwkicGF0aSAgICAtIFBBVEkgc3BlY2lmaWMgQ21kc1xuIiwKKwkiaW5mbyAtIGRpc3BsYXlzIGJvYXJkIGluZm9ybWF0aW9uXG4iCisJInBhdGkgcGNpICAtIGRpc3BsYXlzIFBDSSByZWdpc3RlcnNcbiIKKwkicGF0aSBsZWQgPG5yPiA8b24+IFxuIgorCSIgICAgICAgICAgLSBzd2l0Y2ggTEVEIDxucj4gPG9uPlxuIgorCSJwYXRpIGZsYXNoIG1lbSBbU3JjQWRkcl1cbiIKKwkiICAgICAgICAgIC0gdXBkYXRlcyBVLUJvb3Qgd2l0aCBpbWFnZSBpbiBtZW1vcnlcbiIKKwkicGF0aSBlZXByb20gPGNtZD4gLSBQQ0kgRUVQUk9NIHN1Yi1zeXN0ZW1cbiIKKwkiICAgIHJlYWQgPGFkZHI+IDxvZmZzZXQ+IDxzaXplPlxuIgorCSIgICAgICAgICAgLSByZWFkIFBDSSBFRVBST00gdG8gPGFkZHI+IGZyb20gPG9mZnNldD4gPHNpemU+IHdvcmRzXG4iCisJIiAgICB3cml0ZSA8YWRkcj4gPG9mZnNldD4gPHNpemU+XG4iCisJIiAgICAgICAgICAtIHdyaXRlIFBDSSBFRVBST00gZnJvbSA8YWRkcj4gdG8gPG9mZnNldD4gPHNpemU+IHdvcmRzXG4iCisJIiAgICBwcmcgICAtIHByb2dyYW1tIFBDSSBFRVBST00gd2l0aCBkZWZhdWx0IHZhbHVlc1xuIgorCSIgICAgZXJhICAgLSBlcmFzZSBQQ0kgRUVQUk9NICh3cml0ZSBhbGwgd29yZCB0byAweGZmZmYpXG4iCisJIiAgICByZWxvYWQtIFJlbG9hZCBQQ0kgQnJpZGdlIHdpdGggRUVQUk9NIFZhbHVlc1xuIgorCSIgICAgTk9URTogPGFkZHI+IG11c3Qgc3RhcnQgb24gd29yZCBib3VuZGFyeVxuIgorCSIgICAgICAgICAgPG9mZnNldD4gYW5kIDxzaXplPiBtdXN0IGJlIGV2ZW4gYnl0ZSB2YWx1ZXNcbiIKKyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL2NvbmZpZy5tayBiL2JvYXJkL21wbC9wYXRpL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGEwOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAzCisjIE1hcnRpbiBXaW5pc3RvZXJmZXIsIG1hcnRpbndpbmlzdG9lcmZlckBnbXguY2guCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMKKyMgRVBRIEJvYXJkIENvbmZpZ3VyYXRpb24KKyMKKworIyBCb290IGZyb20gZmxhc2ggYXQgbG9jYXRpb24gMHgwMDAwMDAwMAorVEVYVF9CQVNFID0gMHhGRkYwMDAwMAorCitQTEFURk9STV9DUFBGTEFHUyArPSAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkgLUkkKFRPUERJUikKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL3BhdGkuYyBiL2JvYXJkL21wbC9wYXRpL3BhdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU1YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvcGF0aS5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBNYXJ0aW4gV2luaXN0b2VyZmVyLCBtYXJ0aW53aW5pc3RvZXJmZXJAZ214LmNoLgorICogQXRhcHRlZCBmb3IgUEFUSQorICogRGVuaXMgUGV0ZXIsIGQucGV0ZXJAbXBsLmNoCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJpdHMgZm9yIHRoZSBTRFJBTSBjb250cm9sbGVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENBTDoJQ0FTIExhdGVuY3kuIElmIGNsZWFyZWQgdG8gMCAoZGVmYXVsdCkgdGhlIFNEUkFNIGNvbnRyb2xsZXIgYXNzZXJ0cyBUQSMgb24KKyAqCXRoZSAybmQgQ2xvY2sgYWZ0ZXIgQUNUSVZFIGNvbW1hbmQgKENBUyBMYXRlbmN5ID0gMikuIElmIHNldCB0byAxIHRoZSBTRFJBTQorICoJY29udHJvbGxlciBhc3NlcnRzIFRBIyBvbiB0aGUgM3JkIENsb2NrIGFmdGVyIEFDVElWRSBjb21tYW5kIChDQVMgTGF0ZW5jeSA9IDMpLgorICogUkNEOglSQ0QgQUNUSVZFIHRvIFJFQUQgb3IgV1JJVEUgRGVsYXkgKFJhcyB0byBDYXMgRGVsYXkpLiBJZiBjbGVhcmVkIDAgKGRlZmF1bHQpCisgKgl0UkNEIG9mIHRoZSBTRFJBTSBtdXN0IGVxdWFsIG9yIGxlc3MgMjVucy4gSWYgc2V0IHRvIDEgdFJDRCBtdXN0IGJlIGVxdWFsIG9yIGxlc3MgNTBucy4KKyAqIFdSRUM6V3JpdGUgUmVjb3ZlcnkuIElmIGNsZWFyZWQgMCAoZGVmYXVsdCkgdFdSIG9mIHRoZSBTRFJBTSBtdXN0IGVxdWFsIG9yIGxlc3MgMjVucy4KKyAqCUlmIHNldCB0byAxIHRXUiBtdXN0IGJlIGVxdWFsIG9yIGxlc3MgNTBucy4KKyAqIFJQOglQcmVjaGFyZ2UgQ29tbWFuZCBUaW1lLiBJZiBjbGVhcmVkIDAgKGRlZmF1bHQpIHRSUCBvZiB0aGUgU0RSQU0gbXVzdCBlcXVhbCBvciBsZXNzCisgKgkyNW5zLiBJZiBzZXQgdG8gMSB0UlAgbXVzdCBiZSBlcXVhbCBvciBsZXNzIDUwbnMuCisgKiBSQzoJQXV0byBSZWZyZXNoIHRvIEFjdGl2ZSBUaW1lLiBJZiBjbGVhcmVkIDAgKGRlZmF1bHQpIHRSQyBvZiB0aGUgU0RSQU0gbXVzdCBlcXVhbAorICoJb3IgbGVzcyA3NW5zLiBJZiBzZXQgdG8gMSB0UkMgbXVzdCBiZSBlcXVhbCBvciBsZXNzIDEwMG5zLgorICogTE1SOglCaXQgdG8gc2V0IHRoZSBNb2RlIFJlZ2lzdGVyIG9mIHRoZSBTRFJBTS4gSWYgc2V0LCB0aGUgbmV4dCBhY2Nlc3MgdG8gdGhlIFNEUkFNCisgKglpcyB0aGUgTG9hZCBNb2RlIFJlZ2lzdGVyIENvbW1hbmQuCisgKiBJSVA6CUluaXQgaW4gcHJvZ3Jlc3MuIFNldCB0byAxIGZvciBzdGFydGluZyB0aGUgaW5pdCBzZXF1ZW5jZQorICoJKFByZWNoYXJnZSBBbGwpLiBBcyBsb25nIHRoaXMgYml0IGlzIHNldCwgdGhlIFByZWNoYXJnZSBBbGwgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MuCisgKglBZnRlciBjb21tYW5kIGhhcyBjb21wbGV0ZWQsIHdhaXQgYXQgbGVhc3QgZm9yIDggcmVmcmVzaCAoMjAwdXNlYykgYmVmb3JlIHByb2NlZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzV4eC5oPgorI2luY2x1ZGUgPGRldmljZXMuaD4KKyNpbmNsdWRlIDxwY2lfaWRzLmg+CisjZGVmaW5lIFBMWDkwNTZfTE9DCisjaW5jbHVkZSAicGx4OTA1Ni5oIgorI2luY2x1ZGUgInBhdGkuaCIKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorLyogTGVhZGluZyB1bmRlcnNjb3JlIG9uIHN5bWJvbHMgKi8KKyMgIGRlZmluZSBTWU1fQ0hBUiAiXyIKKyNlbHNlIC8qIE5vIGxlYWRpbmcgY2hhcmFjdGVyIG9uIHN5bWJvbHMgKi8KKyMgIGRlZmluZSBTWU1fQ0hBUgorI2VuZGlmCisKKyN1bmRlZiBTRFJBTV9ERUJVRworLyoKKyAqIE1hY3JvcyB0byBnZW5lcmF0ZSBnbG9iYWwgYWJzb2x1dGVzLgorICovCisjZGVmaW5lIEdFTl9TWU1OQU1FKHN0cikgU1lNX0NIQVIgI3N0cgorI2RlZmluZSBHRU5fVkFMVUUoc3RyKSAjc3RyCisjZGVmaW5lIEdFTl9BQlMobmFtZSwgdmFsdWUpIFwKKwkJYXNtICgiLmdsb2JsICIgR0VOX1NZTU5BTUUobmFtZSkpOyBcCisJCWFzbSAoR0VOX1NZTU5BTUUobmFtZSkgIiA9ICIgR0VOX1ZBTFVFKHZhbHVlKSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFYXJseSBkZWJ1ZyByb3V0aW5lcworICovCit2b2lkIHdyaXRlX2hleCAodW5zaWduZWQgY2hhciBpKQoreworCWNoYXIgY2M7CisKKwljYyA9IGkgPj4gNDsKKwljYyAmPSAweGY7CisJaWYgKGNjID4gOSkKKwkJc2VyaWFsX3B1dGMgKGNjICsgNTUpOworCWVsc2UKKwkJc2VyaWFsX3B1dGMgKGNjICsgNDgpOworCWNjID0gaSAmIDB4ZjsKKwlpZiAoY2MgPiA5KQorCQlzZXJpYWxfcHV0YyAoY2MgKyA1NSk7CisJZWxzZQorCQlzZXJpYWxfcHV0YyAoY2MgKyA0OCk7Cit9CisKKyNpZiBkZWZpbmVkKFNEUkFNX0RFQlVHKQorCit2b2lkIHdyaXRlXzRoZXggKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXdyaXRlX2hleCAoKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gMjQpKTsKKwl3cml0ZV9oZXggKCh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDE2KSk7CisJd3JpdGVfaGV4ICgodW5zaWduZWQgY2hhcikgKHZhbCA+PiA4KSk7CisJd3JpdGVfaGV4ICgodW5zaWduZWQgY2hhcikgdmFsKTsKK30KKworI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgaW4zMih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyAqcD0odW5zaWduZWQgbG9uZyAqKWFkZHI7CisJcmV0dXJuICpwOworfQorCit2b2lkIG91dDMyKHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyAqcD0odW5zaWduZWQgbG9uZyAqKWFkZHI7CisJKnA9ZGF0YTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGJvYXJkdHlwZTsgLyogQm9hcmQgcmV2aXNpb24gYW5kIFBvcHVsYXRpb24gT3B0aW9ucyAqLworCXVuc2lnbmVkIGNoYXIgY2FsOwkJLyogY2FzIExhdGVuY3kgIDA6Q0FMPTIgMTpDQUw9MyAqLworCXVuc2lnbmVkIGNoYXIgcmNkOwkJLyogcmFzIHRvIGNhcyBkZWxheSAgMDo8MjVucyAxOjw1MG5zKi8KKwl1bnNpZ25lZCBjaGFyIHdyZWM7CQkvKiB3cml0ZSByZWNvdmVyeSAwOjwyNW5zIDE6PDUwbnMgKi8KKwl1bnNpZ25lZCBjaGFyIHByOwkJLyogUHJlY2hhcmdlIENvbW1hbmQgVGltZSAwOjwyNW5zIDE6PDUwbnMgKi8KKwl1bnNpZ25lZCBjaGFyIHJjOwkJLyogQXV0byBSZWZyZXNoIHRvIEFjdGl2ZSBUaW1lIDA6PDc1bnMgMTo8MTAwbnMgKi8KKwl1bnNpZ25lZCBjaGFyIHN6OwkJLyogbG9nIGJpbmFyeSA9PiBTaXplID0gKDRNQnl0ZTw8c3opIDUgPSAxMjgsIDQgPSA2NCwgMyA9IDMyLCAyID0gMTYsIDE9OCAqLworfSBzZHJhbV90OworCitjb25zdCBzZHJhbV90IHNkcmFtX3RhYmxlW10gPSB7CisJeyAweDAwMDAsCS8qIFBBVEkgUmV2IEEsIDE2TUJ5dGUgLTEgQm9hcmQgKi8KKwkJMSwJLyogQ2FzZSBMYXRlbnR5ID0gMyAqLworCQkwLAkvKiByYXMgdG8gY2FzIGRlbGF5ICAwICgyMG5zKSAqLworCQkwLAkvKiB3cml0ZSByZWNvdmVyeSAwOjwyNW5zIDE6PDUwbnMqLworCQkwLAkvKiBQcmVjaGFyZ2UgQ29tbWFuZCBUaW1lIDAgKDIwbnMpICovCisJCTAsCS8qIEF1dG8gUmVmcmVzaCB0byBBY3RpdmUgVGltZSAwICg2OCkgKi8KKwkJMgkvKiBsb2cgYmluYXJ5ID0+IFNpemUgMiA9IDE2TUJ5dGUsIDE9OCAqLworCX0sCisJeyAweGZmZmYsIC8qIHRlcm1pbmF0b3IgKi8KKwkgIDB4ZmYsCisJICAweGZmLAorCSAgMHhmZiwKKwkgIDB4ZmYsCisJICAweGZmLAorCSAgMHhmZiB9Cit9OworCisKK2V4dGVybiBpbnQgbWVtX3Rlc3QgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFtc2l6ZSwgaW50IHF1aWV0KTsKK2V4dGVybiB2b2lkIG1lbV90ZXN0X3JlbG9jKHZvaWQpOworCisvKgorICogR2V0IFJBTSBzaXplLgorICovCitsb25nIGludCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJvYXJkX3JldjsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwl1bnNpZ25lZCBsb25nIGxtcjsKKwlpbnQgaSx0aW1lb3V0OworCisjaWYgZGVmaW5lZChTRFJBTV9ERUJVRykKKwlyZWc9aW4zMihQTERfQ09ORklHX0JBU0UrUExEX1BBUlRfSUQpOworCXB1dHMoIlxuXG5TWVNURU0gcGFydCAweCIpOyB3cml0ZV80aGV4KFNZU0NOVFJfUEFSVChyZWcpKTsKKwlwdXRzKCIgVmVycyAweCIpOyB3cml0ZV80aGV4KFNZU0NOVFJfSUQocmVnKSk7CisJcHV0cygiXG5TRFJBTSAgcGFydCAgMHgiKTsgd3JpdGVfNGhleChTRFJBTV9QQVJUKHJlZykpOworCXB1dHMoIiBWZXJzIDB4Iik7IHdyaXRlXzRoZXgoU0RSQU1fSUQocmVnKSk7CisJcmVnPWluMzIoUExEX0NPTkZJR19CQVNFK1BMRF9CT0FSRF9USU1JTkcpOworCXB1dHMoIlxuQm9hcmQgcmV2LiAgIDB4Iik7IHdyaXRlXzRoZXgoU1lTQ05UUl9CUkVWKHJlZykpOworICAgcHV0YygnXG4nKTsKKyNlbmRpZgorCXJlZz1pbjMyKFBMRF9DT05GSUdfQkFTRStQTERfQk9BUkRfVElNSU5HKTsKKwlib2FyZF9yZXY9KHVuc2lnbmVkIGNoYXIpKFNZU0NOVFJfQlJFVihyZWcpKTsKKwlpPTA7CisJd2hpbGUoMSkgeworCQlpZihzZHJhbV90YWJsZVtpXS5ib2FyZHR5cGU9PTB4ZmZmZikgeworCQkJcHV0cygiRVJST1IsIGZvdW5kIG5vIHRhYmxlIGZvciBCb2FyZCAweCIpOworCQkJd3JpdGVfaGV4KGJvYXJkX3Jldik7CisJCQl3aGlsZSgxKTsKKwkJfQorCQlpZihzZHJhbV90YWJsZVtpXS5ib2FyZHR5cGU9PSh1bnNpZ25lZCBjaGFyKWJvYXJkX3JldikKKwkJCWJyZWFrOworCQlpKys7CisJfQorCS8qIFNldCBDQUwsIFJDRCwgV1JFUSwgUFIgYW5kIFJDIEJpdHMgKi8KKyNpZiBkZWZpbmVkKFNEUkFNX0RFQlVHKQorCXB1dHMoIlNldCBDQUwsIFJDRCwgV1JFUSwgUFIgYW5kIFJDIEJpdHNcbiIpOworI2VuZGlmCisJLyogbWFzayBiaXRzICovCisJcmVnICY9IH4oU0VUX1JFR19CSVQoMSxTRFJBTV9DQUwpIHwgU0VUX1JFR19CSVQoMSxTRFJBTV9SQ0QpIHwgU0VUX1JFR19CSVQoMSxTRFJBTV9XUkVRKSB8CisJCQkJU0VUX1JFR19CSVQoMSxTRFJBTV9QUikgIHwgIFNFVF9SRUdfQklUKDEsU0RSQU1fUkMpIHwgU0VUX1JFR19CSVQoMSxTRFJBTV9MTVIpICB8CisJCQkJU0VUX1JFR19CSVQoMSxTRFJBTV9JSVApIHwgU0VUX1JFR19CSVQoMSxTRFJBTV9SRVMwKSk7CisJLyogc2V0IGJpdHMgKi8KKwlyZWcgfD0gKFNFVF9SRUdfQklUKHNkcmFtX3RhYmxlW2ldLmNhbCxTRFJBTV9DQUwpIHwKKwkJCSAgU0VUX1JFR19CSVQoc2RyYW1fdGFibGVbaV0ucmNkLFNEUkFNX1JDRCkgfAorCQkJICBTRVRfUkVHX0JJVChzZHJhbV90YWJsZVtpXS53cmVjLFNEUkFNX1dSRVEpIHwKKwkJCSAgU0VUX1JFR19CSVQoc2RyYW1fdGFibGVbaV0ucHIsU0RSQU1fUFIpIHwKKwkJCSAgU0VUX1JFR19CSVQoc2RyYW1fdGFibGVbaV0ucmMsU0RSQU1fUkMpKTsKKworCW91dDMyKFBMRF9DT05GSUdfQkFTRStQTERfQk9BUkRfVElNSU5HLHJlZyk7CisJLyogc3RlcCAyIHNldCBJSVAgKi8KKyNpZiBkZWZpbmVkKFNEUkFNX0RFQlVHKQorCXB1dHMoInN0ZXAgMiBzZXQgSUlQXG4iKTsKKyNlbmRpZgorCS8qIHN0ZXAgMiBzZXQgSUlQICovCisJcmVnIHw9IFNFVF9SRUdfQklUKDEsU0RSQU1fSUlQKTsKKwl0aW1lb3V0PTA7CisJd2hpbGUgKHRpbWVvdXQhPTB4ZmZmZikgeworCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCQlyZWc9aW4zMihQTERfQ09ORklHX0JBU0UrUExEX0JPQVJEX1RJTUlORyk7CisJCWlmKChyZWcgJiBTRVRfUkVHX0JJVCgxLFNEUkFNX0lJUCkpPT0wKQorCQkJYnJlYWs7CisJCXRpbWVvdXQrKzsKKwkJdWRlbGF5KDEpOworCX0KKwkvKiB3YWl0IGZvciBhdCBsZWFzdCA4IHJlZnJlc2ggKi8KKwl1ZGVsYXkoMTAwMCk7CisJLyogc2V0IExNUiAqLworCXJlZyB8PSBTRVRfUkVHX0JJVCgxLFNEUkFNX0xNUik7CisJb3V0MzIoUExEX0NPTkZJR19CQVNFK1BMRF9CT0FSRF9USU1JTkcscmVnKTsKKwlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCWxtcj0weDAwMDAwMDAyOyAvKiBzZXF1ZW50aWFsIGJ1cnN0IDQgZGF0YSAqLworCWlmKHNkcmFtX3RhYmxlW2ldLmNhbD09MSkKKwkJbG1yfD0weDAwMDAwMDMwOyAvKiBjYWwgPSAzICovCisJZWxzZQorCQlsbXJ8PTAwMDAwMDAwMjA7IC8qIGNhbCA9IDIgKi8KKwkvKiByZXN0IHN0YW5kYXJkIG9wZXJhdGlvbiBwcm9ncmFtbWVkIHdyaXRlIGJ1cnN0IGxlbmd0aCAqLworCS8qIHdlIGhhdmUgYSB4MzIgYml0IGJ1cyB0byB0aGUgU0RSQU0sIHNvIHNoaWZ0IHRoZSBhZGRyIHdpdGggMiAqLworCWxtcjw8PTI7CisJaW4zMihDRkdfU0RSQU1fQkFTRSArIGxtcik7CisJLyogb2ssIHdlJ3JlIGRvbmUsIHJldHVybiBTRFJBTSBzaXplICovCisJcmV0dXJuICgoMHg0MDAwMDAgPDwgc2RyYW1fdGFibGVbaV0uc3opKTsJCS8qIGxvZzIgdmFsdWUgb2YgNE1CeXRlICAqLworfQorCisKK3ZvaWQgc2V0X2ZsYXNoX3ZwcChpbnQgZXh0X3ZwcCwgaW50IGV4dF93cCwgaW50IGludF92cHApCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisJcmVnPWluMzIoUExEX0NPTkZfUkVHMitQTERfQ09ORklHX0JBU0UpOworCXJlZyAmPSB+KFNFVF9SRUdfQklUKDEsU1lTQ05UUl9DUFVfVlBQKSB8CisJCQkgICBTRVRfUkVHX0JJVCgxLFNZU0NOVFJfRkxfVlBQKSB8CisJCQkJU0VUX1JFR19CSVQoMSxTWVNDTlRSX0ZMX1dQKSk7CisKKwlyZWcgfD0gKFNFVF9SRUdfQklUKGludF92cHAsU1lTQ05UUl9DUFVfVlBQKSB8CisJCQkgICBTRVRfUkVHX0JJVChleHRfdnBwLFNZU0NOVFJfRkxfVlBQKSB8CisJCQkJU0VUX1JFR19CSVQoZXh0X3dwLFNZU0NOVFJfRkxfV1ApKTsKKwlvdXQzMihQTERfQ09ORl9SRUcyK1BMRF9DT05GSUdfQkFTRSxyZWcpOworCXVkZWxheSgxMDApOworfQorCisKK3ZvaWQgc2hvd19wbGRfcmVncyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmVnLHJlZzE7CisJcmVnPWluMzIoUExEX0NPTkZJR19CQVNFK1BMRF9QQVJUX0lEKTsKKwlwcmludGYoIlxuU1lTVEVNIHBhcnQgJWxkLCBWZXJzICVsZFxuIixTWVNDTlRSX1BBUlQocmVnKSxTWVNDTlRSX0lEKHJlZykpOworCXByaW50ZigiU0RSQU0gIHBhcnQgJWxkLCBWZXJzICVsZFxuIixTRFJBTV9QQVJUKHJlZyksU0RSQU1fSUQocmVnKSk7CisJcmVnPWluMzIoUExEX0NPTkZJR19CQVNFK1BMRF9CT0FSRF9USU1JTkcpOworCXByaW50ZigiQm9hcmQgcmV2LiAgJWNcbiIsKGNoYXIpIChTWVNDTlRSX0JSRVYocmVnKSsnQScpKTsKKwlwcmludGYoIldhaXRzdGF0ZXMgICVsZFxuIixHRVRfU1lTQ05UUl9GTFdBSVQocmVnKSk7CisJcHJpbnRmKCJTRFJBTTogICAgICBDQUw9JWxkIFJDRD0lbGQgV1JFUT0lbGQgUFI9JWxkXG4gICAgICAgICAgICBSQz0lbGQgIExNUj0lbGQgSUlQPSVsZFxuIiwKKwkJR0VUX1JFR19CSVQocmVnLFNEUkFNX0NBTCksR0VUX1JFR19CSVQocmVnLFNEUkFNX1JDRCksCisJCUdFVF9SRUdfQklUKHJlZyxTRFJBTV9XUkVRKSxHRVRfUkVHX0JJVChyZWcsU0RSQU1fUFIpLAorCQlHRVRfUkVHX0JJVChyZWcsU0RSQU1fUkMpLEdFVF9SRUdfQklUKHJlZyxTRFJBTV9MTVIpLAorCQlHRVRfUkVHX0JJVChyZWcsU0RSQU1fSUlQKSk7CisJcmVnPWluMzIoUExEX0NPTkZJR19CQVNFK1BMRF9DT05GX1JFRzEpOworCXJlZzE9aW4zMihQTERfQ09ORklHX0JBU0UrUExEX0NPTkZfUkVHMik7CisJcHJpbnRmKCJIVyBDb25maWc6ICBGTEFHPSVsZCBJUD0lbGQgIGluZGV4PSVsZCBQUlBNPSVsZFxuICAgICAgICAgICAgSUNXPSVsZCAgSVNCPSVsZCBCRElTPSVsZCAgUENJTT0lbGRcbiIsCisJCUdFVF9SRUdfQklUKHJlZyxTWVNDTlRSX0ZMQUcpLEdFVF9SRUdfQklUKHJlZyxTWVNDTlRSX0lQKSwKKwkJR0VUX1NZU0NOVFJfQk9PVElORChyZWcpLEdFVF9SRUdfQklUKHJlZyxTWVNDTlRSX1BSTSksCisJCUdFVF9SRUdfQklUKHJlZyxTWVNDTlRSX0lDVyksR0VUX1NZU0NOVFJfSVNCKHJlZyksCisJCUdFVF9SRUdfQklUKHJlZzEsU1lTQ05UUl9CRElTKSxHRVRfUkVHX0JJVChyZWcxLFNZU0NOVFJfUENJTSkpOworCXByaW50ZigiU3dpdGNoZXM6ICAgTVVYPSVsZCBQQ0lfRElTPSVsZCBCb290X0VOPSVsZCAgQ29uZmlnPSVsZFxuIixHRVRfU0RSQU1fTVVYKHJlZyksCisJCUdFVF9SRUdfQklUKHJlZyxTRFJBTV9QRElTKSxHRVRfUkVHX0JJVChyZWcxLFNZU0NOVFJfQk9PVEVOKSwKKwkJR0VUX1NZU0NOVFJfQ0ZHKHJlZzEpKTsKKwlwcmludGYoIk1pc2M6ICAgICAgIFJJUD0lbGQgQ1BVX1ZQUD0lbGQgRkxTSF9WUFA9JWxkIEZMU0hfV1A9JWxkXG5cbiIsCisJCUdFVF9SRUdfQklUKHJlZyxTRFJBTV9SSVApLEdFVF9SRUdfQklUKHJlZzEsU1lTQ05UUl9DUFVfVlBQKSwKKwkJR0VUX1JFR19CSVQocmVnMSxTWVNDTlRSX0ZMX1ZQUCksR0VUX1JFR19CSVQocmVnMSxTWVNDTlRSX0ZMX1dQKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNldHRpbmcgSU9zCisgKiAtLS0tLS0tLS0tLQorICogR1BJTzYgaXMgVXNlciBMRUQxCisgKiBHUElPNyBpcyBJbnRlcnJ1cHQgUExYIChPdXRwdXQpCisgKiBHUElPNSBpcyBVc2VyIExFRDAKKyAqIEdQSU8yIGlzIFBMWCBVU0VSaSAoT3V0cHV0KQorICogR1BJTzEgaXMgUExYIEludGVycnVwdCAoSW5wdXQpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyB2b2lkIGluaXRfaW9zKHZvaWQpCisgeworCXZvbGF0aWxlIGltbWFwX3QgKiBpbW1yID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgc3lzY29uZjV4eF90ICpzeXNjb25mID0gJmltbXItPmltX3NpdV9jb25mOworCXVuc2lnbmVkIGxvbmcgcmVnOworCXJlZz1zeXNjb25mLT5zY19zZ3Bpb2NyOyAvKiBEYXRhIGRpcmVjdGlvbiByZWdpc3RlciAqLworCXJlZyAmPSB+MHg2NzAwMDAwMDsKKwlyZWcgfD0gMHgyNzAwMDAwMDsgLyogc2V0IG91dHB1cHRzICovCisJc3lzY29uZi0+c2Nfc2dwaW9jcj1yZWc7IC8qIERhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyICovCisJcmVnPXN5c2NvbmYtPnNjX3NncGlvZHQyOyAvKiBEYXRhIHJlZ2lzdGVyICovCisJLyogc2V0IG91dHB1dCB0byAwICovCisJcmVnICY9IH4weDI3MDAwMDAwOworCS8qIHNldCBJUlEgYW5kIFVTRVJpIHRvIDEgKi8KKwlyZWcgfD0gMHgyODAwMDAwMDsKKwlzeXNjb25mLT5zY19zZ3Bpb2R0Mj1yZWc7IC8qIERhdGEgcmVnaXN0ZXIgKi8KK30KKwordm9pZCB1c2VyX2xlZDAoaW50IGxlZF9vbikKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICogaW1tciA9IChpbW1hcF90ICopIENGR19JTU1SOworCXZvbGF0aWxlIHN5c2NvbmY1eHhfdCAqc3lzY29uZiA9ICZpbW1yLT5pbV9zaXVfY29uZjsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwlyZWc9c3lzY29uZi0+c2Nfc2dwaW9kdDI7IC8qIERhdGEgcmVnaXN0ZXIgKi8KKwlpZihsZWRfb24pCS8qIHNldCBvdXRwdXQgdG8gMSAqLworCQlyZWcgfD0gMHgwNDAwMDAwMDsKKwllbHNlCisJCXJlZyAmPSB+MHgwNDAwMDAwMDsKKwlzeXNjb25mLT5zY19zZ3Bpb2R0Mj1yZWc7IC8qIERhdGEgcmVnaXN0ZXIgKi8KK30KKwordm9pZCB1c2VyX2xlZDEoaW50IGxlZF9vbikKK3sKKwl2b2xhdGlsZSBpbW1hcF90ICogaW1tciA9IChpbW1hcF90ICopIENGR19JTU1SOworCXZvbGF0aWxlIHN5c2NvbmY1eHhfdCAqc3lzY29uZiA9ICZpbW1yLT5pbV9zaXVfY29uZjsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwlyZWc9c3lzY29uZi0+c2Nfc2dwaW9kdDI7IC8qIERhdGEgcmVnaXN0ZXIgKi8KKwlpZihsZWRfb24pCS8qIHNldCBvdXRwdXQgdG8gMSAqLworCQlyZWcgfD0gMHgwMjAwMDAwMDsKKwllbHNlCisJCXJlZyAmPSB+MHgwMjAwMDAwMDsKKwlzeXNjb25mLT5zY19zZ3Bpb2R0Mj1yZWc7IC8qIERhdGEgcmVnaXN0ZXIgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGFzdCBTdGFnZSBJbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBsYXN0X3N0YWdlX2luaXQgKHZvaWQpCit7CisJbWVtX3Rlc3RfcmVsb2MoKTsKKwlpbml0X2lvcygpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2hlY2sgdGhlIGJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCT0FSRF9OQU1FCSJQQVRJIgorCitpbnQgY2hlY2tib2FyZCAodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNbNTBdOworCXVuc2lnbmVkIGxvbmcgcmVnOworCWNoYXIgcmV2OworCWludCBpOworCisJcHV0cyAoIlxuQm9hcmQ6ICIpOworCXJlZz1pbjMyKFBMRF9DT05GSUdfQkFTRStQTERfQk9BUkRfVElNSU5HKTsKKwlyZXY9KGNoYXIpKFNZU0NOVFJfQlJFVihyZWcpKydBJyk7CisJaSA9IGdldGVudl9yICgic2VyaWFsIyIsIHMsIDMyKTsKKwlpZiAoKGkgPT0gLTEpKSB7CisJCXB1dHMgKCIjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyAiIEJPQVJEX05BTUUpOworCQlwcmludGYoIiBSZXYuICVjXG4iLHJldik7CisJfQorCWVsc2UgeworCQlzW3NpemVvZihCT0FSRF9OQU1FKS0xXSA9IDA7CisJCXByaW50ZiAoIiVzLTEgUmV2ICVjIFNOOiAlc1xuIiwgcyxyZXYsCisJCQkJJnNbc2l6ZW9mKEJPQVJEX05BTUUpXSk7CisJfQorCXNldF9mbGFzaF92cHAoMSwwLDApOyAvKiBzZXQgRmxhc2ggVlBQICovCisJcmV0dXJuIDA7Cit9CisKKworI2lmZGVmIENGR19QQ0lfQ09OX0RFVklDRQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUENJIENvbW11bmljYXRpb24KKyAqCisgKiBBbGl2ZSAoUGluZ2luZyk6CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKiBQQ0kgSG9zdCBzZW5kcyBtZXNzYWdlIEFMSVZFLCBMb2NhbCBhY2tub3dsZWRnZXMgd2l0aCBBTElWRQorICoKKyAqIFBDSV9DT04gY29uc29sZSBvdmVyIFBDSToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExvY2FsIHNpZGU6CisgKiAgICAgLSB1c2VzIFBDSTkwNTZfTE9DX1RPX1BDSV9EQkVMTCByZWdpc3RlciB0byBzaWduYWwgdGhhdAorICogICAgICAgZGF0YSBpcyBhdmFpYmxlIChQQ0lNU0dfQ09OTikKKyAqICAgICAtIHVzZXMgUENJOTA1Nl9NQUlMQk9YMSB0byBzZW5kIGRhdGEKKyAqICAgICAtIHVzZXMgUENJOTA1Nl9NQUlMQk9YMCB0byByZWNlaXZlIGRhdGEKKyAqIFBDSSBzaWRlOgorICogICAgIC0gdXNlcyBQQ0k5MDU2X1BDSV9UT19MT0NfREJFTEwgcmVnaXN0ZXIgdG8gc2lnbmFsIHRoYXQKKyAqICAgICAgIGRhdGEgaXMgYXZhaWJsZSAoUENJTVNHX0NPTk4pCisgKiAgICAgLSB1c2VzIFBDSTkwNTZfTUFJTEJPWDAgdG8gc2VuZCBkYXRhCisgKiAgICAgLSB1c2VzIFBDSTkwNTZfTUFJTEJPWDEgdG8gcmVjZWl2ZSBkYXRhCisgKgorICogSG93IGl0IHdvcmtzOgorICogICAgIFNlbmQ6CisgKiAgICAgLSBjaGVjayBpZiBQQ0lDT05fVFJBTlNNSVRfUkVHIGlzIGVtcHR5CisgKiAgICAgLSB3cml0ZSBkYXRhIG9yJ2VkIHdpdGggMHg4MDAwMDAwMCBpbnRvIHRoZSBQQ0lDT05fVFJBTlNNSVRfUkVHCisgKiAgICAgLSB3cml0ZSBQQ0lNU0dfQ09OTiBpbnRvIHRoZSBQQ0lDT05fREJFTExfUkVHIHRvIHNpZ25hbCBhIGRhdGEKKyAqICAgICAgIGlzIHdhaXRpbmcKKyAqICAgICBSZWNlaXZlOgorICogICAgIC0gZ2V0IGFuIGludGVycnVwdCB2aWEgdGhlIFBDSUNPTl9BQ0tfUkVHIHJlZ2lzdGVyIG1lc3NhZ2UKKyAqICAgICAgIFBDSU1TR19DT05OCisgKiAgICAgLSB3cml0ZSB0aGUgZGF0YSBmcm9tIHRoZSBQQ0lDT05fUkVDRUlWRV9SRUcgaW50byB0aGUgcmVjZWl2ZQorICogICAgICAgYnVmZmVyIGFuZCBpZiB0aGUgcmVjZWl2ZSBidWZmZXIgaXMgbm90IGZ1bGwsIGNsZWFyIHRoZQorICogICAgICAgUENJQ09OX1JFQ0VJVkVfUkVHICh0aGlzIGFsbG93cyB0aGUgY291bnRlcnBhcnQgdG8gd3JpdGUgbW9yZSBkYXRhKQorICogICAgIC0gQ2xlYXIgdGhlIGludGVycnVwdCBieSB3cml0aW5nIDB4RkZGRkZGRkYgdG8gdGhlIFBDSUNPTl9BQ0tfUkVHCisgKgorICogICAgIFRoZSBQQ0lDT05fUkVDRUlWRV9SRUcgbXVzdCBiZSBjbGVhcmVkIGJ5IHRoZSByb3V0aW5lIHdoaWNoIHJlYWRzCisgKiAgICAgdGhlIHJlY2VpdmUgYnVmZmVyIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwgYW55IG1vcmUKKyAqCisgKi8KKworI3VuZGVmIFBDSV9DT05fREVCVUcKKworI2lmZGVmCVBDSV9DT05fREVCVUcKKyNkZWZpbmUJUENJX0NPTl9QUklOVEYoZm10LGFyZ3MuLi4pCXNlcmlhbF9wcmludGYgKGZtdCAsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUENJX0NPTl9QUklOVEYoZm10LGFyZ3MuLi4pCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3ZSB3b3JrIG9ubHkgd2l0aCBhIHJlY2VpdmUgYnVmZmVyIG9uIGVpdGVyIHNpZGUuCisgKiBUcmFuc21pdCBidWZmZXIgaXMgZnJlZSwgaWYgbWFpbGJveCBpcyBjbGVhcmVkLgorICogVHJhbnNtaXQgY2hhcmFjdGVyIGlzIG9yJ2VkIHdpdGggMHg4MDAwMDAwMAorICogUEFUSSByZWNlaXZlIHJlZ2lzdGVyIE1BSUxCT1gwCisgKiBQQVRJIHRyYW5zbWl0IHJlZ2lzdGVyIE1BSUxCT1gxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQ0lDT05fUkVDRUlWRV9SRUcJUENJOTA1Nl9NQUlMQk9YMAorI2RlZmluZSBQQ0lDT05fVFJBTlNNSVRfUkVHCVBDSTkwNTZfTUFJTEJPWDEKKyNkZWZpbmUgUENJQ09OX0RCRUxMX1JFRwlQQ0k5MDU2X0xPQ19UT19QQ0lfREJFTEwKKyNkZWZpbmUgUENJQ09OX0FDS19SRUcJCVBDSTkwNTZfUENJX1RPX0xPQ19EQkVMTAorCisKKyNkZWZpbmUgUENJTVNHX0FMSVZFCQkweDEKKyNkZWZpbmUgUENJTVNHX0NPTk4JCTB4MgorI2RlZmluZSBQQ0lNU0dfRElTQwkJMHgzCisjZGVmaW5lIFBDSU1TR19DT05fREFUQQkweDUKKworCisjZGVmaW5lIFBDSUNPTl9HRVRfUkVHKHgpCShpbjMyKHggKyBQQ0lfQ09ORklHX0JBU0UpKQorI2RlZmluZSBQQ0lDT05fU0VUX1JFRyh4LHkpCShvdXQzMih4ICsgUENJX0NPTkZJR19CQVNFLHkpKQorI2RlZmluZSBQQ0lDT05fVFhfRkxBRwkJMHg4MDAwMDAwMAorCisKKyNkZWZpbmUgUkVDX0JVRkZFUl9TSVpFCTB4MTAwCitpbnQgcmVjYnVmW1JFQ19CVUZGRVJfU0laRV07CitzdGF0aWMgaW50IHJfcHRyID0gMDsKK2ludCB3X3B0cjsKK2RldmljZV90IHBjaV9jb25fZGV2OworaW50IGNvbm49MDsKK2ludCBidWZmX2Z1bGw9MDsKKwordm9pZCBwY2lfY29uX3B1dF9pdChjb25zdCBjaGFyIGMpCit7CisJLyogVGVzdCBmb3IgY29tcGxldGl0aW9uICovCisJdW5zaWduZWQgbG9uZyByZWc7CisJZG8geworCQlyZWc9UENJQ09OX0dFVF9SRUcoUENJQ09OX1RSQU5TTUlUX1JFRyk7CisJfXdoaWxlKHJlZyk7CisJcmVnPVBDSUNPTl9UWF9GTEFHICsgYzsKKwlQQ0lDT05fU0VUX1JFRyhQQ0lDT05fVFJBTlNNSVRfUkVHLHJlZyk7CisJUENJQ09OX1NFVF9SRUcoUENJQ09OX0RCRUxMX1JFRyxQQ0lNU0dfQ09OX0RBVEEpOworfQorCit2b2lkIHBjaV9jb25fcHV0Yyhjb25zdCBjaGFyIGMpCit7CisJcGNpX2Nvbl9wdXRfaXQoYyk7CisJaWYoYyA9PSAnXG4nKQorCQlwY2lfY29uX3B1dF9pdCgnXHInKTsKK30KKworCitpbnQgcGNpX2Nvbl9nZXRjKHZvaWQpCit7CisJaW50IHJlczsKKwlpbnQgZGlmZjsKKwl3aGlsZShyX3B0cj09KHZvbGF0aWxlIGludCl3X3B0cik7CisJcmVzPXJlY2J1ZltyX3B0cisrXTsKKwlpZihyX3B0cj09UkVDX0JVRkZFUl9TSVpFKQorCQlyX3B0cj0wOworCWlmKHdfcHRyPHJfcHRyKQorCQlkaWZmPXJfcHRyK1JFQ19CVUZGRVJfU0laRS13X3B0cjsKKwllbHNlCisJCWRpZmY9cl9wdHItd19wdHI7CisJaWYoKGRpZmY8KFJFQ19CVUZGRVJfU0laRS00KSkgJiYgYnVmZl9mdWxsKSB7CisgICAJCS8qIGNsZWFyIE1haWwgYm94ICovCisJCQlidWZmX2Z1bGw9MDsKKwkJCVBDSUNPTl9TRVRfUkVHKFBDSUNPTl9SRUNFSVZFX1JFRywwTCk7CisJfQorCXJldHVybiByZXM7Cit9CisKK2ludCBwY2lfY29uX3RzdGModm9pZCkKK3sKKwlpZihyX3B0cj09KHZvbGF0aWxlIGludCl3X3B0cikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgcGNpX2Nvbl9wdXRzIChjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlwY2lfY29uX3B1dGMoKnMpOworCQkrK3M7CisJfQorfQorCit2b2lkIHBjaV9jb25faW5pdCAodm9pZCkKK3sKKwl3X3B0ciA9IDA7CisJcl9wdHIgPSAwOworCVBDSUNPTl9TRVRfUkVHKFBDSUNPTl9SRUNFSVZFX1JFRywwTCk7CisJY29ubj0xOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSVJRIHJvdXRpbmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgcGNpX2RvcmJlbGxfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZWcsZGF0YTsKKwlpbnQgZGlmZjsKKwlyZWc9UENJQ09OX0dFVF9SRUcoUENJOTA1Nl9JTlRfQ1RSTF9TVEFUKTsKKwlQQ0lfQ09OX1BSSU5URigiIFBDSTkwNTZfSU5UX0NUUkxfU1RBVCA9ICUwOGxYXG4iLHJlZyk7CisJaWYocmVnICYgKDE8PDIwKSApIHsKKwkJLyogcmVhZCBkb29yYmVsbCAqLworCQlyZWc9UENJQ09OX0dFVF9SRUcoUENJQ09OX0FDS19SRUcpOworCQlzd2l0Y2gocmVnKSB7CisJCQljYXNlIFBDSU1TR19BTElWRToKKwkJCQlQQ0lfQ09OX1BSSU5URigiIEFsaXZlXG4iKTsKKwkJCQlQQ0lDT05fU0VUX1JFRyhQQ0lDT05fREJFTExfUkVHLFBDSU1TR19BTElWRSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSU1TR19DT05OOgorCQkJCVBDSV9DT05fUFJJTlRGKCIgQ29ubiAlZCIsY29ubik7CisJCQkJd19wdHIgPSAwOworCQkJCXJfcHRyID0gMDsKKwkJCQlidWZmX2Z1bGw9MDsKKwkJCQlQQ0lDT05fU0VUX1JFRyhQQ0lDT05fUkVDRUlWRV9SRUcsMEwpOworCQkJCWNvbm49MTsKKwkJCQlQQ0lfQ09OX1BSSU5URigiIC4uLiAlZFxuIixjb25uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUENJTVNHX0NPTl9EQVRBOgorCQkJCWRhdGE9UENJQ09OX0dFVF9SRUcoUENJQ09OX1JFQ0VJVkVfUkVHKTsKKwkJCQlyZWNidWZbd19wdHIrK109KGludCkoZGF0YSYweGZmKTsKKwkJCQlQQ0lfQ09OX1BSSU5URigiIERhdGEgQ29uc29sZSAlbFgsICVYICVkICVkICVYXG4iLGRhdGEsKChpbnQpKGRhdGEmMHhGRikpLAorCQkJCQlyX3B0cix3X3B0cixyZWNidWZbd19wdHItMV0pOworCQkJCWlmKHdfcHRyPT1SRUNfQlVGRkVSX1NJWkUpCisJCQkJCXdfcHRyPTA7CisJCQkJaWYod19wdHI8cl9wdHIpCisJCQkJCWRpZmY9cl9wdHIrUkVDX0JVRkZFUl9TSVpFLXdfcHRyOworCQkJCWVsc2UKKwkJCQkJZGlmZj1yX3B0ci13X3B0cjsKKwkJCQlpZihkaWZmPihSRUNfQlVGRkVSX1NJWkUtNCkpCisJCQkJCWJ1ZmZfZnVsbD0xOworCQkJCWVsc2UKKwkJCQkJLyogY2xlYXIgTWFpbCBib3ggKi8KKwkJCQkJUENJQ09OX1NFVF9SRUcoUENJQ09OX1JFQ0VJVkVfUkVHLDBMKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc2VyaWFsX3ByaW50ZigiIFBDSTkwNTZfUENJX1RPX0xPQ19EQkVMTCA9ICUwOGxYXG4iLHJlZyk7CisJCX0KKwkJLyogY2xlYXIgSVJRICovCisJCVBDSUNPTl9TRVRfUkVHKFBDSUNPTl9BQ0tfUkVHLH4wTCk7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHBjaV9jb25fY29ubmVjdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCWNvbm49MDsKKwlyZWc9UENJQ09OX0dFVF9SRUcoUENJOTA1Nl9JTlRfQ1RSTF9TVEFUKTsKKwkvKiBkZWZhdWx0IDB4MGYwMTAxODAgKi8KKwlyZWcgJj0gMHhmZjAwMDAwMDsKKwlyZWcgfD0gMHgwMDAzMDAwMDsgLyogZW5hYmxlIGxvY2FsIGRvcmJlbGwgKi8KKwlyZWcgfD0gMHgwMDAwMDMwMDsgLyogZW5hYmxlIFBDSSBkb3JiZWxsICovCisJUENJQ09OX1NFVF9SRUcoUENJOTA1Nl9JTlRfQ1RSTF9TVEFUICwgcmVnKTsKKwlpcnFfaW5zdGFsbF9oYW5kbGVyICgweDIsIChpbnRlcnJ1cHRfaGFuZGxlcl90ICopIHBjaV9kb3JiZWxsX2lycSxOVUxMKTsKKwltZW1zZXQgKCZwY2lfY29uX2RldiwgMCwgc2l6ZW9mIChwY2lfY29uX2RldikpOworCXN0cmNweSAocGNpX2Nvbl9kZXYubmFtZSwgInBjaV9jb24iKTsKKwlwY2lfY29uX2Rldi5mbGFncyA9IERFVl9GTEFHU19PVVRQVVQgfCBERVZfRkxBR1NfSU5QVVQgfCBERVZfRkxBR1NfU1lTVEVNOworCXBjaV9jb25fZGV2LnB1dGMgPSBwY2lfY29uX3B1dGM7CisJcGNpX2Nvbl9kZXYucHV0cyA9IHBjaV9jb25fcHV0czsKKwlwY2lfY29uX2Rldi5nZXRjID0gcGNpX2Nvbl9nZXRjOworCXBjaV9jb25fZGV2LnRzdGMgPSBwY2lfY29uX3RzdGM7CisJZGV2aWNlX3JlZ2lzdGVyICgmcGNpX2Nvbl9kZXYpOworCXByaW50ZigiUEFUSSByZWFkeSBmb3IgUENJIGNvbm5lY3Rpb24sIHR5cGUgY3RybC1jIGZvciBleGl0XG4iKTsKKwlkbyB7CisJCXVkZWxheSgxMCk7CisJCWlmKCh2b2xhdGlsZSBpbnQpY29ubikKKwkJCWJyZWFrOworCQlpZihjdHJsYygpKSB7CisJCQlpcnFfZnJlZV9oYW5kbGVyKDB4Mik7CisJCQlyZXR1cm47CisJCX0KKwl9d2hpbGUoMSk7CisJY29uc29sZV9hc3NpZ24oc3RkaW4sInBjaV9jb24iKTsKKwljb25zb2xlX2Fzc2lnbihzdGRlcnIsInBjaV9jb24iKTsKKwljb25zb2xlX2Fzc2lnbihzdGRvdXQsInBjaV9jb24iKTsKK30KKwordm9pZCBwY2lfY29uX2Rpc2Modm9pZCkKK3sKKwljb25zb2xlX2Fzc2lnbihzdGRpbiwic2VyaWFsIik7CisJY29uc29sZV9hc3NpZ24oc3RkZXJyLCJzZXJpYWwiKTsKKwljb25zb2xlX2Fzc2lnbihzdGRvdXQsInNlcmlhbCIpOworCVBDSUNPTl9TRVRfUkVHKFBDSUNPTl9EQkVMTF9SRUcsUENJTVNHX0RJU0MpOworCS8qIHJlY29ubmVjdGlvbiAqLworCWlycV9mcmVlX2hhbmRsZXIoMHgwMik7CisJcGNpX2Nvbl9jb25uZWN0KCk7Cit9CisjZW5kaWYgLyogI2lmZGVmIENGR19QQ0lfQ09OX0RFVklDRSAqLworCisvKgorICogQWJzb2x1dGUgZW52aXJvbm1lbnQgYWRkcmVzcyBmb3IgbGlua2VyIGZpbGUuCisgKi8KK0dFTl9BQlMoZW52X3N0YXJ0LCBDRkdfRU5WX09GRlNFVCArIENGR19GTEFTSF9CQVNFKTsKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL3BhdGkuaCBiL2JvYXJkL21wbC9wYXRpL3BhdGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNzcyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvcGF0aS5oCkBAIC0wLDAgKzEsNDQwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBEZW5pcyBQZXRlciwgZC5wZXRlckBtcGwuY2gKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNQUNST1MgYW5kIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBQQVRJIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19QQVRJX0hfCisjZGVmaW5lIF9fUEFUSV9IXwkxCisKKyNkZWZpbmUgUExEX1BBUlRfSUQJCTB4MAorI2RlZmluZSBQTERfQk9BUkRfVElNSU5HCTB4NAorI2RlZmluZSBQTERfQ09ORl9SRUcxCQkweDgKKyNkZWZpbmUgUExEX0NPTkZfUkVHMgkJMHhDCisjZGVmaW5lIFBMRF9DT05GX1JFUwkJMHgxMAorCisjZGVmaW5lIFNFVF9SRUdfQklUKHkseCkgKHk8PCgzMS14KSkKKyNkZWZpbmUgR0VUX1JFR19CSVQoeSx4KSAoKHk+PigzMS14KSkgJiAweDFMKQorCisvKiBTRFJBTSBDb250cm9sbGVyIFBMRF9QQVJUX0lEICovCisvKiA5ICAxMCAxMSAxMiAxMyAxNCAxOSAzMSAqLworI2RlZmluZSBTRFJBTV9QQVJUMwk5CisjZGVmaW5lIFNEUkFNX1BBUlQyCTEwCisjZGVmaW5lIFNEUkFNX1BBUlQxCTExCisjZGVmaW5lIFNEUkFNX1BBUlQwCTEyCisjZGVmaW5lIFNEUkFNX0lEMwkxMworI2RlZmluZSBTRFJBTV9JRDIJMTQKKyNkZWZpbmUgU0RSQU1fSUQxCTE5CisjZGVmaW5lIFNEUkFNX0lEMAkzMQorCisjZGVmaW5lIFNEUkFNX1BBUlQoeCkJKAlcCisJKEdFVF9SRUdfQklUKHgsU0RSQU1fUEFSVDMpPDwzKSB8XAorCShHRVRfUkVHX0JJVCh4LFNEUkFNX1BBUlQyKTw8MikgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9QQVJUMSk8PDEpIHxcCisJKEdFVF9SRUdfQklUKHgsU0RSQU1fUEFSVDApKSkKKworI2RlZmluZSBTRFJBTV9JRCh4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9JRDMpPDwzKSB8XAorCShHRVRfUkVHX0JJVCh4LFNEUkFNX0lEMik8PDIpIHxcCisJKEdFVF9SRUdfQklUKHgsU0RSQU1fSUQxKTw8MSkgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9JRDApKSkKKworLyogU3lzdGVtIENvbnRyb2xsZXIgKi8KKy8qIDAgIDEgMyA0IDUgMTYgMjAgMjggMjkgMzAgKi8KKyNkZWZpbmUgU1lTQ05UUl9QQVJUNAkwCisjZGVmaW5lIFNZU0NOVFJfUEFSVDMJMQorI2RlZmluZSBTWVNDTlRSX1BBUlQyCTMKKyNkZWZpbmUgU1lTQ05UUl9QQVJUMQk0CisjZGVmaW5lIFNZU0NOVFJfUEFSVDAJNQorI2RlZmluZSBTWVNDTlRSX0lENAkxNgorI2RlZmluZSBTWVNDTlRSX0lEMwkyMAorI2RlZmluZSBTWVNDTlRSX0lEMgkyOAorI2RlZmluZSBTWVNDTlRSX0lEMQkyOQorI2RlZmluZSBTWVNDTlRSX0lEMAkzMAorCisjZGVmaW5lIFNZU0NOVFJfUEFSVCh4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX1BBUlQ0KTw8NCkgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX1BBUlQzKTw8MykgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX1BBUlQyKTw8MikgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX1BBUlQxKTw8MSkgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX1BBUlQwKSkpCisKKyNkZWZpbmUgU1lTQ05UUl9JRCh4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0lENCk8PDQpIHxcCisJKEdFVF9SRUdfQklUKHgsU1lTQ05UUl9JRDMpPDwzKSB8XAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfSUQyKTw8MikgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0lEMSk8PDEpIHxcCisJKEdFVF9SRUdfQklUKHgsU1lTQ05UUl9JRDApKSkKKworLyogU0RSQU0gQ29udHJvbGxlciBQTERfQk9BUkRfVElNSU5HICovCisvKiA5ICAxMCAxMSAxMiAxMyAxNCAxOSAzMSAqLworI2RlZmluZSBTRFJBTV9DQUwJOQorI2RlZmluZSBTRFJBTV9SQ0QJMTAKKyNkZWZpbmUgU0RSQU1fV1JFUQkxMQorI2RlZmluZSBTRFJBTV9QUiAJMTIKKyNkZWZpbmUgU0RSQU1fUkMJMTMKKyNkZWZpbmUgU0RSQU1fTE1SCTE0CisjZGVmaW5lIFNEUkFNX0lJUAkxOQorI2RlZmluZSBTRFJBTV9SRVMwCTMxCisvKiBTeXN0ZW0gQ29udHJvbGxlciAqLworLyogMCAgMSAzIDQgNSAxNiAyMCAyOCAyOSAzMCAqLworI2RlZmluZSBTWVNDTlRSX0JSRVYwCTAKKyNkZWZpbmUgU1lTQ05UUl9CUkVWMQkxCisjZGVmaW5lIFNZU0NOVFJfQlJFVjIJMworI2RlZmluZSBTWVNDTlRSX0JSRVYzCTQKKyNkZWZpbmUgU1lTQ05UUl9SRVMwCTUKKyNkZWZpbmUgU1lTQ05UUl9SRVMxCTE2CisjZGVmaW5lIFNZU0NOVFJfUkVTMgkyMAorI2RlZmluZSBTWVNDTlRSX0ZMV0FJVDIJMjgKKyNkZWZpbmUgU1lTQ05UUl9GTFdBSVQxCTI5CisjZGVmaW5lIFNZU0NOVFJfRkxXQUlUMAkzMAorCisjZGVmaW5lIFNZU0NOVFJfQlJFVih4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0JSRVYzKTw8MykgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0JSRVYyKTw8MikgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0JSRVYxKTw8MSkgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0JSRVYwKSkpCisKKyNkZWZpbmUgR0VUX1NZU0NOVFJfRkxXQUlUKHgpCSgJXAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfRkxXQUlUMik8PDIpIHxcCisJKEdFVF9SRUdfQklUKHgsU1lTQ05UUl9GTFdBSVQxKTw8MSkgfFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0ZMV0FJVDApKSkKKworI2RlZmluZSBTRVRfU1lTQ05UUl9GTFdBSVQoeCkJKAlcCisJKFNFVF9SRUdfQklUKCgoeCAmIDB4MDQpIT0wKSxTWVNDTlRSX0ZMV0FJVDIpKSB8XAorCShTRVRfUkVHX0JJVCgoKHggJiAweDAyKSE9MCl4LFNZU0NOVFJfRkxXQUlUMSkpIHxcCisJKFNFVF9SRUdfQklUKCgoeCAmIDB4MDEpIT0wKXgsU1lTQ05UUl9GTFdBSVQwKSkpCisKKy8qIFNEUkFNIENvbnRyb2xsZXIgUkVHIDIqLworLyogOSAgMTAgMTEgMTIgMTMgMTQgMTkgMzEgKi8KKyNkZWZpbmUgU0RSQU1fTVVYMAk5CisjZGVmaW5lIFNEUkFNX01VWDEJMTAKKyNkZWZpbmUgU0RSQU1fUERJUwkxMQorI2RlZmluZSBTRFJBTV9SRVMxIAkxMgorI2RlZmluZSBTRFJBTV9SRVMyCTEzCisjZGVmaW5lIFNEUkFNX1JFUzMJMTQKKyNkZWZpbmUgU0RSQU1fUkVTNAkxOQorI2RlZmluZSBTRFJBTV9SSVAJMzEKKworI2RlZmluZSBHRVRfU0RSQU1fTVVYKHgpCSgJXAorCShHRVRfUkVHX0JJVCh4LFNEUkFNX01VWDEpPDwxKXwgXAorCShHRVRfUkVHX0JJVCh4LFNEUkFNX01VWDApKSkKKworCisvKiBTeXN0ZW0gQ29udHJvbGxlciAqLworLyogMCAgMSAzIDQgNSAxNiAyMCAyOCAyOSAzMCAqLworI2RlZmluZSBTWVNDTlRSX0ZMQUcJMAorI2RlZmluZSBTWVNDTlRSX0lQCTEKKyNkZWZpbmUgU1lTQ05UUl9CSU5EMgkzCisjZGVmaW5lIFNZU0NOVFJfQklORDEJNAorI2RlZmluZSBTWVNDTlRSX0JJTkQwCTUKKyNkZWZpbmUgU1lTQ05UUl9QUk0JMTYKKyNkZWZpbmUgU1lTQ05UUl9JQ1cJMjAKKyNkZWZpbmUgU1lTQ05UUl9JU0IyCTI4CisjZGVmaW5lIFNZU0NOVFJfSVNCMQkyOQorI2RlZmluZSBTWVNDTlRSX0lTQjAJMzAKKworI2RlZmluZSBHRVRfU1lTQ05UUl9CT09USU5EKHgpCSgJXAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfQklORDIpPDwyKSB8XAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfQklORDEpPDwxKSB8XAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfQklORDApKSkKKworI2RlZmluZSBTRVRfU1lTQ05UUl9CT09USU5EKHgpCSgJXAorCShTRVRfUkVHX0JJVCgoKHggJiAweDA0KSE9MCksU1lTQ05UUl9CSU5EMikpIHxcCisJKFNFVF9SRUdfQklUKCgoeCAmIDB4MDIpIT0wKXgsU1lTQ05UUl9CSU5EMSkpfCBcCisJKFNFVF9SRUdfQklUKCgoeCAmIDB4MDEpIT0wKXgsU1lTQ05UUl9CSU5EMCkpKQorCisjZGVmaW5lIEdFVF9TWVNDTlRSX0lTQih4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0lTQjIpPDwyKXwgXAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfSVNCMSk8PDEpfCBcCisJKEdFVF9SRUdfQklUKHgsU1lTQ05UUl9JU0IwKSkpCisKKyNkZWZpbmUgU0VUX1NZU0NOVFJfSVNCKHgpCSgJXAorCShTRVRfUkVHX0JJVCgoKHggJiAweDA0KSE9MCksU1lTQ05UUl9JU0IyKSl8IFwKKwkoU0VUX1JFR19CSVQoKCh4ICYgMHgwMikhPTApeCxTWVNDTlRSX0lTQikpfCBcCisJKFNFVF9SRUdfQklUKCgoeCAmIDB4MDEpIT0wKXgsU1lTQ05UUl9JU0IwKSkpCisKKy8qIFNEUkFNIENvbnRyb2xsZXIgUkVHIDMqLworLyogOSAgMTAgMTEgMTIgMTMgMTQgMTkgMzEgKi8KKyNkZWZpbmUgU0RSQU1fUkVTNQk5CisjZGVmaW5lIFNEUkFNX0NGRzEJMTAKKyNkZWZpbmUgU0RSQU1fQ0ZHMgkxMQorI2RlZmluZSBTRFJBTV9DRkczIAkxMgorI2RlZmluZSBTRFJBTV9SRVM2CTEzCisjZGVmaW5lIFNEUkFNX0NGRzUJMTQKKyNkZWZpbmUgU0RSQU1fQ0ZHNgkxOQorI2RlZmluZSBTRFJBTV9SRVM3CTMxCisKKyNkZWZpbmUgR0VUX1NEUkFNX0NGRyh4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9DRkc2KTw8NCkgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9DRkc1KTw8MykgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9DRkczKTw8MikgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9DRkcyKTw8MSkgfFwKKwkoR0VUX1JFR19CSVQoeCxTRFJBTV9DRkcxKSkpCisKKy8qIFN5c3RlbSBDb250cm9sbGVyICovCisvKiAwICAxIDMgNCA1IDE2IDIwIDI4IDI5IDMwICovCisjZGVmaW5lIFNZU0NOVFJfQkRJUwkwCisjZGVmaW5lIFNZU0NOVFJfUENJTQkxCisjZGVmaW5lIFNZU0NOVFJfQ0ZHMAkzCisjZGVmaW5lIFNZU0NOVFJfQ0ZHMQk0CisjZGVmaW5lIFNZU0NOVFJfQ0ZHMgk1CisjZGVmaW5lIFNZU0NOVFJfQ0ZHMwkxNgorI2RlZmluZSBTWVNDTlRSX0JPT1RFTgkyMAorI2RlZmluZSBTWVNDTlRSX0NQVV9WUFAJMjgKKyNkZWZpbmUgU1lTQ05UUl9GTF9WUFAJMjkKKyNkZWZpbmUgU1lTQ05UUl9GTF9XUAkzMAorCisjZGVmaW5lIEdFVF9TWVNDTlRSX0NGRyh4KQkoCVwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0NGRzMpPDwzKXwgXAorCShHRVRfUkVHX0JJVCh4LFNZU0NOVFJfQ0ZHMik8PDIpfCBcCisJKEdFVF9SRUdfQklUKHgsU1lTQ05UUl9DRkcxKTw8MSl8IFwKKwkoR0VUX1JFR19CSVQoeCxTWVNDTlRSX0NGRzApKSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNSVNDIERlZmluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NUEwgCTB4MThFNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BBVEkJMHgwMERBCisKKyNpZiBkZWZpbmVkKENPTkZJR19NSVA0MDUpCisjZGVmaW5lIFBBVElfRklSTVdBUkVfU1RBUlRfT0ZGU0VUCTB4MDAzMDAwMDAKKyNkZWZpbmUgUEFUSV9JU09fU1RSSU5HICAiTUVWLTEwMDg0LTAwMSIKKyNlbmRpZgorCisjZGVmaW5lIFBBVElfRU5ESUFOX01PREUJMHgzRQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEFUSSBNYXBwaW5nOgorICogLS0tLS0tLS0tLS0tLQorICogUENJIE1hcDoKKyAqIC0tLS0tLS0KKyAqIEFsbCBhZGRyZXNlcyBhcmUgbWFwcGVkIGludG8gdGhlIG1lbW9yeSBhcmVhCisgKiAoSU8gQXJlYSBvbiBzb21lIGFyZWFzIG1heSBhbHNvIGJlIHBvc3NpYmxlKQorICogLSBwY2lfY2ZnX21lbV9iYXNlOiBmaXhlZCBhZGRyZXNzIHRvIHRoZSBQTFggY29uZmlnIGFyZWEgc2l6ZSA1MTJCeXRlcworICogLSBwY2lfc3BhY2UwX2FkZHI6ICBjb25maWd1cmFibGUKKyAqIC0gcGNpX3NwYWNlMV9hZGRyCSAgY29uZmlndXJhYmxlCisgKgorICogTG9jYWwgTWFwOgorICogLS0tLS0tLS0tLQorICogTG9jYWwgYWRkcmVzc2VzIChSZW1hcCkKKyAqIC0gU0RSQU0gICAgICAweDA2MDAwMDAwIFNpemUgMTZNQnl0ZSBtYXNrIDB4ZmYwMDAwMDAKKyAqIC0gRVBMRCBDRkcgICAweDA3MDAwMDAwIFNpemUgNTEyQnl0ZXMKKyAqIC0gRkxBU0ggICAgICAweDAzMDAwMDAwIFNpemUgdXAgdG8gOE1CeXRlCisgKiAtIENQVSAgICAgICAgMHgwMTAwMDAwMCBTaXplIDRNQnl0ZSAob25seSBhY2Nlc3NhYmxlIGlmIHNwZWNpYWwgY29uZmlndXJlZCkKKyAqCisgKiBJbXBsZW1lbnRpb246CisgKiAtLS0tLS0tLS0tLS0tCisgKiBUbyBwcmV2ZW50IHVzaW5nIGxhcmdlIHJlc291cmNlcyByZXNlcnZhdGlvbiBvbiB0aGUgaG9zdCBmb2xsb3dpbmcKKyAqIFBDSSBtYXBwaW5nIGlzIGNob29zZWQ6CisgKiAtIHBjaV9jZmdfbWVtX2Jhc2U6IGZpeGVkIGFkZHJlc3MgdG8gdGhlIFBMWCBjb25maWcgYXJlYSBzaXplIDUxMkJ5dGVzCisgKiAtIHBjaV9zcGFjZTBfYWRkcjogIGNvbmZpZ3VyZWQgdG8gdGhlIEVQTEQgQ29uZmlnIEFyZWEgc2l6ZSAyNTZCeXRlcworICogLSBwY2lfc3BhY2UxX2FkZHI6ICBjb25maWd1cmVkIHRvIHRoZSBTRFJBTSBBcmVhIHNpemUgMU1CeXRlcywgdGhpcworICogICAgICAgICAgICAgICAgICAgICBzcGFjZSBpcyB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIFNEUkFNLCBGbGFzaCBhbmQgQ1BVCisgKgorICovCisKKy8qIEF0dHJpYnV0ZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQQVRJX0JVU19TSVpFXzgJCTAKKyNkZWZpbmUgUEFUSV9CVVNfU0laRV8xNgkxCisjZGVmaW5lIFBBVElfQlVTX1NJWkVfMzIJMworCisjZGVmaW5lIFBBVElfU1BBQ0UwX01BU0sJKDB4RkVGRkZFMDApICAvKiBNYXNrIEF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgUEFUSV9TUEFDRTFfTUFTSwkoMHgwMDAwMDAwMCkgIC8qIE1hc2sgQXR0cmlidXRlcyAqLworCisjZGVmaW5lIFBBVElfRVhUUkFfTE9OR19FRVBST00JMQorCisjZGVmaW5lIFNQQUNFMF9UQV9FTkFCTEUgKDE8PDYpCisjZGVmaW5lIFNQQUNFMV9UQV9FTkFCTEUgKDE8PDYpCisKKy8qIENvbmZpZyBBcmVhICovCisjZGVmaW5lIFBBVElfTE9DX0NGR19BRERSCQkweDA3MDAwMDAwCQkvKiBMb2NhbCBBZGRyZXNzICovCisjZGVmaW5lIFBBVElfTE9DX0NGR19NQVNLCQkweEZGRkZGRjAwICAJCS8qIDI1NiBCeXRlcyAqLworLyogQXR0cmlidXRlcyAqLworI2RlZmluZSBQQVRJX0xPQ19DRkdfQlVTX1NJWkUJCVBBVElfQlVTX1NJWkVfMzIgIAkvKiAzMiBCaXQgKi8KKyNkZWZpbmUgUEFUSV9MT0NfQ0ZHX0JVUlNUCQkwICAJCQkvKiBObyBCdXJzdCAqLworI2RlZmluZSBQQVRJX0xPQ19DRkdfTk9fUFJFRkVUQ0gJMSAgCQkJLyogTm8gUHJlZmV0Y2ggKi8KKyNkZWZpbmUgUEFUSV9MT0NfQ0ZHX1RBX0VOQUJMRQkJMSAJCQkvKiBFbmFibGUgVEEgKi8KKworI2RlZmluZSBQQVRJX0xPQ19DRkdfU1BBQ0UwX0FUVFIgICggXAorCQlQQVRJX0xPQ19DRkdfQlVTX1NJWkUgfCBcCisJCShQQVRJX0xPQ19DRkdfVEFfRU5BQkxFIDw8IDYpIHwgXAorCQkoUEFUSV9MT0NfQ0ZHX05PX1BSRUZFVENIIDw8IDgpIHwgXAorCQkoUEFUSV9MT0NfQ0ZHX0JVUlNUIDw8IDI0KSB8IFwKKwkJKFBBVElfRVhUUkFfTE9OR19FRVBST00gPDwgMjUpKQorCisvKiBzaG91bGQgbmV2ZXIgYmUgdXNlZCAqLworI2RlZmluZSBQQVRJX0xPQ19DRkdfU1BBQ0UxX0FUVFIgICggXAorCQlQQVRJX0xPQ19DRkdfQlVTX1NJWkUgfCBcCisJCShQQVRJX0xPQ19DRkdfVEFfRU5BQkxFIDw8IDYpIHwgXAorCQkoUEFUSV9MT0NfQ0ZHX05PX1BSRUZFVENIIDw8IDkpIHwgXAorCQkoUEFUSV9MT0NfQ0ZHX0JVUlNUIDw8IDgpKQorCisKKy8qIFNEUkFNIEFyZWEgKi8KKyNkZWZpbmUgUEFUSV9MT0NfU0RSQU1fQUREUgkJMHgwNjAwMDAwMAkJLyogTG9jYWwgQWRkcmVzcyAqLworI2RlZmluZSBQQVRJX0xPQ19TRFJBTV9NQVNLCQkweEZGRjAwMDAwCQkvKiAxTUJ5dGUgKi8KKy8qIEF0dHJpYnV0ZXMgKi8KKyNkZWZpbmUgUEFUSV9MT0NfU0RSQU1fQlVTX1NJWkUJCVBBVElfQlVTX1NJWkVfMzIgIAkvKiAzMiBCaXQgKi8KKyNkZWZpbmUgUEFUSV9MT0NfU0RSQU1fQlVSU1QJCTAgIAkJCS8qIE5vIEJ1cnN0ICovCisjZGVmaW5lIFBBVElfTE9DX1NEUkFNX05PX1BSRUZFVENICTAgIAkJCS8qIFByZWZldGNoICovCisjZGVmaW5lIFBBVElfTE9DX1NEUkFNX1RBX0VOQUJMRQkxICAJCQkvKiBFbmFibGUgVEEgKi8KKworLyogc2hvdWxkIG5ldmVyIGJlIHVzZWQgKi8KKyNkZWZpbmUgUEFUSV9MT0NfU0RSQU1fU1BBQ0UwX0FUVFIgICggXAorCQlQQVRJX0xPQ19TRFJBTV9CVVNfU0laRSB8IFwKKwkJKFBBVElfTE9DX1NEUkFNX1RBX0VOQUJMRSA8PCA2KSB8IFwKKwkJKFBBVElfTE9DX1NEUkFNX05PX1BSRUZFVENIIDw8IDgpIHwgXAorCQkoUEFUSV9MT0NfU0RSQU1fQlVSU1QgPDwgMjQpIHwgXAorCQkoUEFUSV9FWFRSQV9MT05HX0VFUFJPTSA8PCAyNSkpCisKKyNkZWZpbmUgUEFUSV9MT0NfU0RSQU1fU1BBQ0UxX0FUVFIgICggXAorCQlQQVRJX0xPQ19TRFJBTV9CVVNfU0laRSB8IFwKKwkJKFBBVElfTE9DX1NEUkFNX1RBX0VOQUJMRSA8PCA2KSB8IFwKKwkJKFBBVElfTE9DX1NEUkFNX05PX1BSRUZFVENIIDw8IDkpIHwgXAorCQkoUEFUSV9MT0NfU0RSQU1fQlVSU1QgPDwgOCkpCisKKworLyogRmxhc2ggQXJlYSAqLworI2RlZmluZSBQQVRJX0xPQ19GTEFTSF9BRERSCQkweDAzMDAwMDAwCQkvKiBMb2NhbCBBZGRyZXNzICovCisjZGVmaW5lIFBBVElfTE9DX0ZMQVNIX01BU0sJCTB4RkZGMDAwMDAJCS8qIDFNQnl0ZSAqLworLyogQXR0cmlidXRlcyAqLworI2RlZmluZSBQQVRJX0xPQ19GTEFTSF9CVVNfU0laRQkJUEFUSV9CVVNfU0laRV8xNiAgCS8qIDE2IEJpdCAqLworI2RlZmluZSBQQVRJX0xPQ19GTEFTSF9CVVJTVAkJMCAgCQkJLyogTm8gQnVyc3QgKi8KKyNkZWZpbmUgUEFUSV9MT0NfRkxBU0hfTk9fUFJFRkVUQ0gJMSAgCQkJLyogTm8gUHJlZmV0Y2ggKi8KKyNkZWZpbmUgUEFUSV9MT0NfRkxBU0hfVEFfRU5BQkxFCTEgIAkJCS8qIEVuYWJsZSBUQSAqLworCisvKiBzaG91bGQgbmV2ZXIgYmUgdXNlZCAqLworI2RlZmluZSBQQVRJX0xPQ19GTEFTSF9TUEFDRTBfQVRUUiAgKCBcCisJCVBBVElfTE9DX0ZMQVNIX0JVU19TSVpFIHwgXAorCQkoUEFUSV9MT0NfRkxBU0hfVEFfRU5BQkxFIDw8IDYpIHwgXAorCQkoUEFUSV9MT0NfRkxBU0hfTk9fUFJFRkVUQ0ggPDwgOCkgfCBcCisJCShQQVRJX0xPQ19GTEFTSF9CVVJTVCA8PCAyNCkgfCBcCisJCShQQVRJX0VYVFJBX0xPTkdfRUVQUk9NIDw8IDI1KSkKKworI2RlZmluZSBQQVRJX0xPQ19GTEFTSF9TUEFDRTFfQVRUUiAgKCBcCisJCVBBVElfTE9DX0ZMQVNIX0JVU19TSVpFIHwgXAorCQkoUEFUSV9MT0NfRkxBU0hfVEFfRU5BQkxFIDw8IDYpIHwgXAorCQkoUEFUSV9MT0NfRkxBU0hfTk9fUFJFRkVUQ0ggPDwgOSkgfCBcCisJCShQQVRJX0xPQ19GTEFTSF9CVVJTVCA8PCA4KSkKKworCisvKiBDUFUgQXJlYSAqLworI2RlZmluZSBQQVRJX0xPQ19DUFVfQUREUgkJMHgwMTAwMDAwMAkJLyogTG9jYWwgQWRkcmVzcyAqLworI2RlZmluZSBQQVRJX0xPQ19DUFVfTUFTSwkJMHhGRkYwMDAwMAkJLyogMU1ieXRlICovCisvKiBBdHRyaWJ1dGVzICovCisjZGVmaW5lIFBBVElfTE9DX0NQVV9CVVNfU0laRQkJUEFUSV9CVVNfU0laRV8zMiAgCS8qIDMyIEJpdCAqLworI2RlZmluZSBQQVRJX0xPQ19DUFVfQlVSU1QJCTAJCQkvKiBObyBCdXJzdCAqLworI2RlZmluZSBQQVRJX0xPQ19DUFVfTk9fUFJFRkVUQ0gJMQkJCS8qIE5vIFByZWZldGNoICovCisjZGVmaW5lIFBBVElfTE9DX0NQVV9UQV9FTkFCTEUJCTEJCQkvKiBFbmFibGUgVEEgKi8KKworLyogc2hvdWxkIG5ldmVyIGJlIHVzZWQgKi8KKyNkZWZpbmUgUEFUSV9MT0NfQ1BVX1NQQUNFMF9BVFRSICAoIFwKKwkJUEFUSV9MT0NfQ1BVX0JVU19TSVpFIHwgXAorCQkoUEFUSV9MT0NfQ1BVX1RBX0VOQUJMRSA8PCA2KSB8IFwKKwkJKFBBVElfTE9DX0NQVV9OT19QUkVGRVRDSCA8PCA4KSB8IFwKKwkJKFBBVElfTE9DX0NQVV9CVVJTVCA8PCAyNCkgfCBcCisJCShQQVRJX0VYVFJBX0NQVV9FRVBST00gPDwgMjUpKQorCisjZGVmaW5lIFBBVElfTE9DX0NQVV9TUEFDRTFfQVRUUiAgKCBcCisJCVBBVElfTE9DX0NQVV9CVVNfU0laRSB8IFwKKwkJKFBBVElfTE9DX0NQVV9UQV9FTkFCTEUgPDwgNikgfCBcCisJCShQQVRJX0xPQ19DUFVfTk9fUFJFRkVUQ0ggPDwgOSkgfCBcCisJCShQQVRJX0xPQ19DUFVfQlVSU1QgPDwgOCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhcmR3YXJlIENvbmZpZyB3b3JkIGRlZmluaXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEJPT1RfRVhUX0ZMQVNICQkweDAwMDAwMDAwCisjZGVmaW5lIEJPT1RfSU5UX0ZMQVNICQkweDAwMDAwMDA0CisjZGVmaW5lIEJPT1RfRlJPTV9QQ0kJCTB4MDAwMDAwMDYKKyNkZWZpbmUgQk9PVF9GUk9NX1NEUkFNCQkweDAwMDAwMDA1CisKKyNkZWZpbmUgRU5BQkxFX0lOVF9BUkIJCTB4MDAwMDAwMDgKKworI2RlZmluZSBJTklUSUFMX0lSUV9QUkVGCTB4MDAwMDAwMTAKKworI2RlZmluZSBJTklUSUFMX01FTV8wTQkJMHgwMDAwMDAwMAorI2RlZmluZSBJTklUSUFMX01FTV80TQkJMHgwMDAwMDA4MAorI2RlZmluZSBJTklUSUFMX01FTV84TQkJMHgwMDAwMDA0MAorI2RlZmluZSBJTklUSUFMX01FTV8xMk0JCTB4MDAwMDAwQzAKKyNkZWZpbmUgSU5JVElBTF9NRU1fMTZNCQkweDAwMDAwMDIwCisjZGVmaW5lIElOSVRJQUxfTUVNXzIwTQkJMHgwMDAwMDBBMAorI2RlZmluZSBJTklUSUFMX01FTV8yNE0JCTB4MDAwMDAwNjAKKyNkZWZpbmUgSU5JVElBTF9NRU1fMjhNCQkweDAwMDAwMEUwCisvKiBDT05GICovCisjZGVmaW5lIElOVEVSTkFMX0hXQ09ORgkJMHgwMDAwMDEwMAorLyogUFJQTSAqLworI2RlZmluZSBMT0NBTF9DUFVfU0xBVkUJCTB4MDAwMDAyMDAKKy8qIEJESVMgKi8KKyNkZWZpbmUgRElTQUJMRV9NRU1fQ05UUgkweDAwMDAwNDAwCisvKiBQQ0lNICovCisjZGVmaW5lIFBDSV9NQVNURVJfT05MWQkJMHgwMDAwMDgwMAorCisKKyNkZWZpbmUgUEFUSV9IV19TVEFSVAkJKChCT09UX0VYVF9GTEFTSCB8IElOSVRJQUxfTUVNXzI4TSB8IElOSVRJQUxfSVJRX1BSRUYpKQorI2RlZmluZSBQQVRJX0hXX1BDSV9PTkxZIAkoKEJPT1RfRVhUX0ZMQVNIIHwgSU5JVElBTF9NRU1fMjhNIHwgSU5JVElBTF9JUlFfUFJFRiB8IFBDSV9NQVNURVJfT05MWSkpCisjZGVmaW5lIFBBVElfSFdfQ1BVX0FDQwkJKChCT09UX0VYVF9GTEFTSCB8IElOSVRJQUxfTUVNXzEyTSB8IElOSVRJQUxfSVJRX1BSRUYgfCBQQ0lfTUFTVEVSX09OTFkpKQorI2RlZmluZSBQQVRJX0hXX0NQVV9TTEFWRSAJKChCT09UX0VYVF9GTEFTSCB8IElOSVRJQUxfTUVNXzEyTSB8IElOSVRJQUxfSVJRX1BSRUYgfCBQQ0lfTUFTVEVSX09OTFkgfCBMT0NBTF9DUFVfU0xBVkUpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEaXJlY3QgTWFzdGVyIENvbmZpZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1BDSV9BRERSCQkweDAxMDAwMDAwCisjZGVmaW5lIFBBVElfQlVTX01BU1RFUiAxCisKKworI2RlZmluZSBQQVRJX0RNQVNURVJfTUFTSyAJCTB4RkZGMDAwMDAgIC8qIDFNQnl0ZSAqLworI2RlZmluZSBQQVRJX0RNQVNURVJfQUREUiAJCTB4MDEwMDAwMDAgIC8qIExvY2FsIEFkZHJlc3MgKi8KKworI2RlZmluZSBQQVRJX0RNQVNURVJfTUVNT1JZX0VOIAkJMHgwMDAwMDAwMSAvKiAweDAwMDAwMDAxICovCisjZGVmaW5lIFBBVElfRE1BU1RFUl9SRUFEX0FIRUFEIAkweDAwMDAwMDA0IC8qIDB4MDAwMDAwMDQgKi8KKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1JFQURfTk9UX0FIRUFEIAkweDAwMDAwMDAwIC8qIDB4MDAwMDAwMDQgKi8KKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1BSRV9TSVpFX0NOVFJMXzAJMHgwMDAwMDAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfUFJFX1NJWkVfQ05UUkxfNAkweDAwMDAwMDA4CisjZGVmaW5lIFBBVElfRE1BU1RFUl9QUkVfU0laRV9DTlRSTF84CTB4MDAwMDEwMDAKKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1BSRV9TSVpFX0NOVFJMXzE2CTB4MDAwMDEwMDgKKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1JFTF9QQ0kJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEFUSV9ETUFTVEVSX05PVF9SRUxfUENJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUEFUSV9ETUFTVEVSX1dSX0lOVkFMCQkweDAwMDAwMjAwCisjZGVmaW5lIFBBVElfRE1BU1RFUl9OT1RfV1JfSU5WQUwJMHgwMDAwMDAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfUFJFX0xJTUlUCQkweDAwMDAwODAwCisjZGVmaW5lIFBBVElfRE1BU1RFUl9QUkVfQ09OVAkJMHgwMDAwMDAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfREVMQVlfV1JfMAkJMHgwMDAwMDAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfREVMQVlfV1JfNAkJMHgwMDAwNDAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfREVMQVlfV1JfOAkJMHgwMDAwODAwMAorI2RlZmluZSBQQVRJX0RNQVNURVJfREVMQVlfV1JfMTYJMHgwMDAwQzAwMAorCisjZGVmaW5lIFBBVElfRE1BU1RFUl9QQ0lfQUREUl9NQVNLCTB4RkZGRjAwMDAKKworI2RlZmluZSBQQVRJX0RNQVNURVJfQVRUUglcCisJUEFUSV9ETUFTVEVSX01FTU9SWV9FTiB8IFwKKwlQQVRJX0RNQVNURVJfUkVBRF9BSEVBRCB8IFwKKwlQQVRJX0RNQVNURVJfUFJFX1NJWkVfQ05UUkxfNCB8IFwKKwlQQVRJX0RNQVNURVJfUkVMX1BDSSB8IFwKKwlQQVRJX0RNQVNURVJfTk9UX1dSX0lOVkFMIHwgXAorCVBBVElfRE1BU1RFUl9QUkVfTElNSVQgfCBcCisJUEFUSV9ETUFTVEVSX0RFTEFZX1dSXzAKKworCisjZW5kaWYgLyogI2lmbmRlZiBfX1BBVElfSF8gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL3BjaV9lZXByb20uaCBiL2JvYXJkL21wbC9wYXRpL3BjaV9lZXByb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjU4ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvcGNpX2VlcHJvbS5oCkBAIC0wLDAgKzEsOTEgQEAKKworI2lmbmRlZiBfX1BDSV9FRVBST01fSF8KKyNkZWZpbmUgX19QQ0lfRUVQUk9NX0hfCTEKKworI2luY2x1ZGUgInBhdGkuaCIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVlcHJvbSBTdXBwb3J0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBEZWZpbml0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRUU0Nl9DTURfTEVOICAgIDkgICAgICAgLyogQml0cyBpbiBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgRUU1Nl9DTURfTEVOICAgIDExICAgICAgLyogQml0cyBpbiBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgRUU2Nl9DTURfTEVOICAgIDExICAgICAgLyogQml0cyBpbiBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgRUVfUkVBRCAgICAgICAgIDB4MDE4MCAgLyogMDEgMTAwMCAwMDAwIHJlYWQgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgRUVfV1JJVEUgICAgICAgIDB4MDE0MCAgLyogMDEgMDEwMCAwMDAwIHdyaXRlIGluc3RydWN0aW9uICovCisjZGVmaW5lIEVFX1dSRU4gICAgICAgICAweDAxMzAgIC8qIDAxIDAwMTEgMDAwMCB3cml0ZSBlbmFibGUgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgRUVfV1JBTEwgICAgICAgIDB4MDExMCAgLyogMDEgMDAwMSAwMDAwIHdyaXRlIGFsbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRUVfUFJSRUFEICAgICAgIDB4MDE4MCAgLyogMDEgMTAwMCAwMDAwIHJlYWQgYWRkcmVzcyBzdG9yZWQgaW4gUHJvdGVjdCBSZWdpc3RlciAqLworI2RlZmluZSBFRV9QUldSSVRFICAgICAgMHgwMTQwICAvKiAwMSAwMTAwIDAwMDAgd3JpdGUgdGhlIGFkZHJlc3MgaW50byBQUiAqLworI2RlZmluZSBFRV9XRFMgICAgICAgICAgMHgwMTAwICAvKiAwMSAwMDAwIDAwMDAgd3JpdGUgZGlzYWJsZSBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBFRV9QUkVOICAgICAgICAgMHgwMTMwICAvKiAwMSAwMDExIDAwMDAgcHJvdGVjdCBlbmFibGUgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgRUVfUFJDTEVBUiAgICAgIDB4MDFGRiAgLyogMDEgMTExMSAxMTExIGNsZWFyIHByb3RlY3QgcmVnaXN0ZXIgaW5zdHIgKi8KKyNkZWZpbmUgRUVfUFJEUyAgICAgICAgIDB4MDEwMCAgLyogMDEgMDAwMCAwMDAwIE9ORSBUSU1FIE9OTFksIHBlcm1lbmFudCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFRVBST00KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExPV19XT1JEKHgpCSgoKHgpICYgMHhGRkZGKSkKKyNkZWZpbmUgSElHSF9XT1JEKHgpCSgoKHgpID4+IDE2KSAmIDB4RkZGRikKKwordHlwZWRlZiBzdHJ1Y3QgcGNpX2VlcHJvbV90IHsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQ7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7Cit9IHBjaV9lZXByb207CisKK3N0YXRpYyBwY2lfZWVwcm9tIHBhdGlfZWVwcm9tW10gPSB7CisJeyAweDAwLFBDSV9ERVZJQ0VfSURfUEFUSSB9LCAJLyogUENJIERldmljZSBJRCBQQ0lJRFJbMzE6MTZdICovCisJeyAweDAyLFBDSV9WRU5ET1JfSURfTVBMIH0sIAkvKiBQQ0kgVmVuZG9yIElEIFBDSUlEUlsxNTowXSAqLworCXsgMHgwNCxQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BPV0VSUEMgfSwgCS8qIFBDSSBDbGFzcyBDb2RlIFBDSUNDUlsyMzo4XSAqLworCXsgMHgwNiwweDAwQkEgfSwgCS8qIFBDSSBDbGFzcyBDb2RlIC8gUENJIFJldmlzaW9uIElEIFBDSUNDUls3OjBdIC8gUENJUkVWWzc6MF0gKi8KKwl7IDB4MDgsMHgwMDA3IH0sIAkvKiBQQ0kgTWF4aW11bSBMYXRlbmN5IC8gUENJIE1pbmltdW0gR3JhbnQgUENJTUxSWzc6MF0gLyBQQ0lNR1JbNzowXSAqLworCXsgMHgwQSwweDAxMDAgfSwgCS8qIFBDSSBJbnRlcnJ1cHQgUGluIC8gUENJIEludGVycnVwdCBMaW5lIFBDSUlQUls3OjBdIC8gUENJSUxSWzc6MF0gKi8KKwl7IDB4MEMsMHgwMDAwIH0sIAkvKiBNU1cgb2YgTWFpbGJveCAwIChVc2VyIERlZmluZWQpIFBDSTkwNTZfTUFJTEJPWDBbMzE6MTZdICovCisJeyAweDBFLDB4MDAwMCB9LCAJLyogTFNXIG9mIE1haWxib3ggMCAoVXNlciBEZWZpbmVkKSBQQ0k5MDU2X01BSUxCT1gwWzE1OjBdICovCisJeyAweDEwLDB4MDAwMCB9LCAJLyogTVNXIG9mIE1haWxib3ggMSAoVXNlciBEZWZpbmVkKSBQQ0k5MDU2X01BSUxCT1gxWzMxOjE2XSAqLworCXsgMHgxMiwweDAwMDAgfSwgCS8qIExTVyBvZiBNYWlsYm94IDEgKFVzZXIgRGVmaW5lZCkgUENJOTA1Nl9NQUlMQk9YMVsxNTowXSAqLworCXsgMHgxNCxISUdIX1dPUkQoUEFUSV9MT0NfQ0ZHX01BU0spIH0sIAkvKiBNU1cgb2YgRGlyZWN0IFNsYXZlIExvY2FsIEFkZHJlc3MgU3BhY2UgMCBSYW5nZSBMQVMwUlJbMzE6MTZdICovCisJeyAweDE2LExPV19XT1JEKFBBVElfTE9DX0NGR19NQVNLKSB9LCAJLyogTFNXIG9mIERpcmVjdCBTbGF2ZSBMb2NhbCBBZGRyZXNzIFNwYWNlIDAgUmFuZ2UgTEFTMFJSWzE1OjBdICovCisJeyAweDE4LEhJR0hfV09SRChQQVRJX0xPQ19DRkdfQUREUikgfSwgCS8qIE1TVyBvZiBEaXJlY3QgU2xhdmUgTG9jYWwgQWRkcmVzcyBTcGFjZSAwIExvY2FsIEJhc2UgQWRkcmVzcyAoUmVtYXApIExBUzBCQVszMToxNl0gKENGRykgKi8KKwl7IDB4MUEsTE9XX1dPUkQoUEFUSV9MT0NfQ0ZHX0FERFIpfDEgfSwgCS8qIExTVyBvZiBEaXJlY3QgU2xhdmUgTG9jYWwgQWRkcmVzcyBTcGFjZSAwIExvY2FsIEJhc2UgQWRkcmVzcyAoUmVtYXApIExBUzBCQVsxNToyLCAwXSwgUmVzZXJ2ZWQgWzFdICovCisJeyAweDFDLDB4MDAwMCB9LCAJLyogTVNXIG9mIE1vZGUvRE1BIEFyYml0cmF0aW9uIE1BUkJSWzMxLCAyOToxNl0gb3IgRE1BQVJCWzMxLCAyOToxNl0sIFJlc2VydmVkIFszMF0gKi8KKwl7IDB4MUUsMHgwMDAwIH0sIAkvKiBMU1cgb2YgTW9kZS9ETUEgQXJiaXRyYXRpb24gTUFSQlJbMTU6MF0gb3IgRE1BQVJCWzE1OjBdICovCisJeyAweDIwLDB4MDAzMCB9LCAJLyogTG9jYWwgTWlzY2VsbGFuZW91cyBDb250cm9sIDIgLyBTZXJpYWwgRUVQUk9NIFdQIEFkZHIgQm91bmRhcnkgTE1JU0MyWzU6MF0sIFJlc1s3OjZdIC8gUFJPVF9BUkVBWzY6MF0sIFJlc1s3XSAqLworCXsgMHgyMiwweDA1MTAgfSwgCS8qIExvY2FsIE1pc2NlbGxhbmVvdXMgQ29udHJvbCAxIC8gTG9jYWwgQnVzIEJpZy9MaXR0bGUgRW5kaWFuIERlc2NyaXB0b3IgTE1JU0MxWzc6MF0gLyBCSUdFTkRbNzowXSAqLworCXsgMHgyNCwweDAwMDAgfSwgCS8qIE1TVyBvZiBEaXJlY3QgU2xhdmUgRXhwYW5zaW9uIFJPTSBSYW5nZSBFUk9NUlJbMzE6MTZdICovCisJeyAweDI2LDB4MDAwMCB9LCAJLyogTFNXIG9mIERpcmVjdCBTbGF2ZSBFeHBhbnNpb24gUk9NIFJhbmdlIEVST01SUlsxNToxMSwgMF0sIFJlc2VydmVkIFsxMDoxXSAgKi8KKwl7IDB4MjgsMHgwMDAwIH0sIAkvKiBNU1cgb2YgRGlyZWN0IFNsYXZlIEV4cGFuc2lvbiBST00gTG9jYWwgQmFzZSBBZGRyZXNzIChSZW1hcCkgYW5kIEJSRVFvIENvbnRyb2wgRVJPTUJBWzMxOjE2XSAqLworCXsgMHgyQSwweDAwMDAgfSwgCS8qIExTVyBvZiBEaXJlY3QgU2xhdmUgRXhwYW5zaW9uIFJPTSBMb2NhbCBCYXNlIEFkZHJlc3MgKFJlbWFwKSBhbmQgQlJFUW8gQ29udHJvbCBFUk9NQkFbMTU6MTEsIDU6MF0sIFJlc2VydmVkIFsxMDo2XSAqLworCXsgMHgyQywoMHg0MjQzIHwgSElHSF9XT1JEKChQQVRJX0xPQ19DRkdfU1BBQ0UwX0FUVFIpKSkgfSwgCS8qIE1TVyBvZiBMb2NhbCBBZGRyZXNzIFNwYWNlIDAvRXhwYW5zaW9uIFJPTSBCdXMgUmVnaW9uIERlc2NyaXB0b3IgTEJSRDBbMzE6MTZdICovCisJeyAweDJFLExPV19XT1JEKFBBVElfTE9DX0NGR19TUEFDRTBfQVRUUikgfSwgCS8qIExTVyBvZiBMb2NhbCBBZGRyZXNzIFNwYWNlIDAvRXhwYW5zaW9uIFJPTSBCdXMgUmVnaW9uIERlc2NyaXB0b3IgTEJSRDBbMTU6MF0gKi8KKwl7IDB4MzAsSElHSF9XT1JEKFBBVElfRE1BU1RFUl9NQVNLKSB9LCAJLyogTVNXIG9mIExvY2FsIFJhbmdlIGZvciBEaXJlY3QgTWFzdGVyLXRvLVBDSSBETVJSWzMxOjE2XSAqLworCXsgMHgzMixMT1dfV09SRChQQVRJX0RNQVNURVJfTUFTSykgfSwgCS8qIExTVyBvZiBMb2NhbCBSYW5nZSBmb3IgRGlyZWN0IE1hc3Rlci10by1QQ0kgKFJlc2VydmVkKSBETVJSWzE1OjBdICovCisJeyAweDM0LEhJR0hfV09SRChQQVRJX0RNQVNURVJfQUREUikgfSwgCS8qIE1TVyBvZiBMb2NhbCBCYXNlIEFkZHJlc3MgZm9yIERpcmVjdCBNYXN0ZXItdG8tUENJIE1lbW9yeSBETUxCQU1bMzE6MTZdICovCisJeyAweDM2LExPV19XT1JEKFBBVElfRE1BU1RFUl9BRERSKSB9LCAJLyogTFNXIG9mIExvY2FsIEJhc2UgQWRkcmVzcyBmb3IgRGlyZWN0IE1hc3Rlci10by1QQ0kgTWVtb3J5IChSZXNlcnZlZCkgRE1MQkFNWzE1OjBdICovCisJeyAweDM4LDB4MDAwMCB9LCAJLyogTVNXIG9mIExvY2FsIEJ1cyBBZGRyZXNzIGZvciBEaXJlY3QgTWFzdGVyLXRvLVBDSSBJL08gQ29uZmlndXJhdGlvbiBETUxCQUlbMzE6MTZdICovCisJeyAweDNBLDB4MDAwMCB9LCAJLyogTFNXIG9mIExvY2FsIEJ1cyBBZGRyZXNzIGZvciBEaXJlY3QgTWFzdGVyLXRvLVBDSSBJL08gQ29uZmlndXJhdGlvbiAoUmVzZXJ2ZWQpIERNTEJBSVsxNTowXSAqLworCXsgMHgzQywweDAwMDAgfSwgCS8qIE1TVyBvZiBQQ0kgQmFzZSBBZGRyZXNzIChSZW1hcCkgZm9yIERpcmVjdCBNYXN0ZXItdG8tUENJIE1lbW9yeSBETVBCQU1bMzE6MTZdICovCisJeyAweDNFLDB4MDAwMCB9LCAJLyogTFNXIG9mIFBDSSBCYXNlIEFkZHJlc3MgKFJlbWFwKSBmb3IgRGlyZWN0IE1hc3Rlci10by1QQ0kgTWVtb3J5IERNUEJBTVsxNTowXSAqLworCXsgMHg0MCwweDAwMDAgfSwgCS8qIE1TVyBvZiBQQ0kgQ29uZmlndXJhdGlvbiBBZGRyZXNzIGZvciBEaXJlY3QgTWFzdGVyLXRvLVBDSSBJL08gQ29uZmlndXJhdGlvbiBETUNGR0FbMzEsIDIzOjE2XSBSZXNlcnZlZCBbMzA6MjRdKi8KKwl7IDB4NDIsMHgwMDAwIH0sIAkvKiBMU1cgb2YgUENJIENvbmZpZ3VyYXRpb24gQWRkcmVzcyBmb3IgRGlyZWN0IE1hc3Rlci10by1QQ0kgSS9PIENvbmZpZ3VyYXRpb24gRE1DRkdBWzE1OjBdICovCisJeyAweDQ0LDB4MDAwMCB9LCAJLyogUENJIFN1YnN5c3RlbSBJRCBQQ0lTSURbMTU6MF0gKi8KKwl7IDB4NDYsMHgwMDAwIH0sIAkvKiBQQ0kgU3Vic3lzdGVtIFZlbmRvciBJRCBQQ0lTVklEWzE1OjBdICovCisJeyAweDQ4LEhJR0hfV09SRChQQVRJX0xPQ19TRFJBTV9NQVNLKSB9LCAJLyogTVNXIG9mIERpcmVjdCBTbGF2ZSBMb2NhbCBBZGRyZXNzIFNwYWNlIDEgUmFuZ2UgKDEgTUIpIExBUzFSUlszMToxNl0gKi8KKwl7IDB4NEEsTE9XX1dPUkQoUEFUSV9MT0NfU0RSQU1fTUFTSykgfSwgCS8qIExTVyBvZiBEaXJlY3QgU2xhdmUgTG9jYWwgQWRkcmVzcyBTcGFjZSAxIFJhbmdlICgxIE1CKSBMQVMxUlJbMTU6MF0gKi8KKwl7IDB4NEMsSElHSF9XT1JEKFBBVElfTE9DX1NEUkFNX0FERFIpIH0sIAkvKiBNU1cgb2YgRGlyZWN0IFNsYXZlIExvY2FsIEFkZHJlc3MgU3BhY2UgMSBMb2NhbCBCYXNlIEFkZHJlc3MgKFJlbWFwKSBMQVMxQkFbMzE6MTZdIChTRFJBTSkgKi8KKwl7IDB4NEUsTE9XX1dPUkQoUEFUSV9MT0NfU0RSQU1fQUREUikgfCAweDEgfSwgCS8qIExTVyBvZiBEaXJlY3QgU2xhdmUgTG9jYWwgQWRkcmVzcyBTcGFjZSAxIExvY2FsIEJhc2UgQWRkcmVzcyAoUmVtYXApIExBUzFCQVsxNToyLCAwXSwgUmVzZXJ2ZWQgWzFdICovCisJeyAweDUwLEhJR0hfV09SRChQQVRJX0xPQ19TRFJBTV9TUEFDRTFfQVRUUikgfSwgCS8qIE1TVyBvZiBMb2NhbCBBZGRyZXNzIFNwYWNlIDEgQnVzIFJlZ2lvbiBEZXNjcmlwdG9yIExCUkQxWzMxOjE2XSAqLworCXsgMHg1MixMT1dfV09SRChQQVRJX0xPQ19TRFJBTV9TUEFDRTFfQVRUUikgfSwgCS8qIExTVyBvZiBMb2NhbCBBZGRyZXNzIFNwYWNlIDEgQnVzIFJlZ2lvbiBEZXNjcmlwdG9yIChSZXNlcnZlZCkgTEJSRDFbMTU6MF0gKi8KKwl7IDB4NTQsMHgwMDAwIH0sIAkvKiBIb3QgU3dhcCBDb250cm9sL1N0YXR1cyAoUmVzZXJ2ZWQpIFJlc2VydmVkICovCisJeyAweDU2LDB4MDAwMCB9LCAJLyogSG90IFN3YXAgTmV4dCBDYXBhYmlsaXR5IFBvaW50ZXIgLyBIb3QgU3dhcCBDb250cm9sIEhTX05FWFRbNzowXSAvIEhTX0NOVExbNzowXSAqLworCXsgMHg1OCwweDAwMDAgfSwgCS8qIFJlc2VydmVkIFJlc2VydmVkICovCisJeyAweDVBLDB4MDAwMCB9LCAJLyogUENJIEFyYml0ZXIgQ29udHJvbCBQQ0lBUkJbMzowXSwgUmVzZXJ2ZWQgWzE1OjRdICovCisJeyAweDVDLDB4MDAwMCB9LCAJLyogUG93ZXIgTWFuYWdlbWVudCBDYXBhYmlsaXRpZXMgUE1DWzE1OjksIDI6MF0gKi8KKwl7IDB4NUUsMHgwMDAwIH0sIAkvKiBQb3dlciBNYW5hZ2VtZW50IE5leHQgQ2FwYWJpbGl0eSBQb2ludGVyIChSZXNlcnZlZCkgLyBQb3dlciBNYW5hZ2VtZW50IENhcGFiaWxpdHkgSUQgKFJlc2VydmVkKSBSZXNlcnZlZCovCisJeyAweDYwLDB4MDAwMCB9LCAJLyogUG93ZXIgTWFuYWdlbWVudCBEYXRhIC8gUE1DU1IgQnJpZGdlIFN1cHBvcnQgRXh0ZW5zaW9uIChSZXNlcnZlZCkgUE1EQVRBWzc6MF0gLyBSZXNlcnZlZCAqLworCXsgMHg2MiwweDAwMDAgfSwgCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgUE1DU1JbMTQ6OF0gKi8KKwl7IDB4RkZGRiwweEZGRkZ9IAkvKiB0ZXJtaW5hcm9yICovCit9OworI2RlZmluZSBQQVRJX0VFUFJPTV9MQVNUX09GRlNFVAkweDY0CisjZW5kaWYgLyogI2lmbmRlZiBfX1BDSV9FRVBST01fSF8gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9wYXRpL3BseDkwNTYuaCBiL2JvYXJkL21wbC9wYXRpL3BseDkwNTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNhNzkzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvcGx4OTA1Ni5oCkBAIC0wLDAgKzEsMTE0IEBACisvKg0KKyAqIChDKSBDb3B5cmlnaHQgMjAwMw0KKyAqIERlbmlzIFBldGVyLCBkLnBldGVyQG1wbC5jaA0KKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzDQorICogcHJvamVjdC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mDQorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sDQorICogTUEgMDIxMTEtMTMwNyBVU0ENCisgKi8NCisvKiBQTFg5MDk2IHJlZ2lzdGVyIGRlZmluaXRpb25zDQorKi8NCisjaWZuZGVmIF9fUExYOTA1Nl9IXw0KKyNkZWZpbmUgX19QTFg5MDU2X0hfCTENCisNCisjaW5jbHVkZSA8cGNpLmg+DQorDQorI2lmZGVmIFBMWDkwNTZfTE9DDQorI2RlZmluZSBMT0NBTF9PRkZTRVQJCQkJCTB4MDgwDQorLyogUENJIENvbmZpZyByZWdzICovDQorI2Vsc2UNCisjZGVmaW5lIExPQ0FMX09GRlNFVAkJCQkJMHgwMDANCisjZW5kaWYNCisNCisjZGVmaW5lIFBDSTkwNTZfVkVORE9SX0lEICAgICAgICAgICAgUENJX1ZFTkRPUl9JRA0KKy8vI2RlZmluZSBQQ0k5NjU2X0RFVklDRV9JRCAgICAgICAgICAgIFBDSV9ERVZJQ0VfSUQNCisjZGVmaW5lIFBDSTkwNTZfQ09NTUFORCAgICAgICAgICAgICAgUENJX0NPTU1BTkQNCisvLyNkZWZpbmUgUENJOTY1Nl9TVEFUVVMgICAgICAgICAgICAgICBQQ0lfU1RBVFVTDQorI2RlZmluZSBQQ0k5MDU2X1JFVklTSU9OICAgICAgICAgICAgIFBDSV9SRVZJU0lPTl9JRA0KKw0KKyNkZWZpbmUgUENJOTA1Nl9DQUNIRV9TSVpFICAgICAgICAgICBQQ0lfQ0FDSEVfTElORV9TSVpFDQorI2RlZmluZSBQQ0k5MDU2X1JUUl9CQVNFICAgICAgICAgICAgIFBDSV9CQVNFX0FERFJFU1NfMA0KKyNkZWZpbmUgUENJOTA1Nl9SVFJfSU9fQkFTRSAgICAgICAgICBQQ0lfQkFTRV9BRERSRVNTXzENCisjZGVmaW5lIFBDSTkwNTZfTE9DQUxfQkFTRTAgICAgICAgICAgUENJX0JBU0VfQUREUkVTU18yDQorI2RlZmluZSBQQ0k5MDU2X0xPQ0FMX0JBU0UxICAgICAgICAgIFBDSV9CQVNFX0FERFJFU1NfMw0KKyNkZWZpbmUgUENJOTA1Nl9VTlVTRURfQkFTRTEgICAgICAgICBQQ0lfQkFTRV9BRERSRVNTXzQNCisjZGVmaW5lIFBDSTkwNTZfVU5VU0VEX0JBU0UyICAgICAgICAgUENJX0JBU0VfQUREUkVTU181DQorI2RlZmluZSBQQ0k5MDU2X0NJU19QVFIgICAgICAgICAgICAgIFBDSV9DQVJEQlVTX0NJUw0KKyNkZWZpbmUgUENJOTA1Nl9TVUJfSUQgICAgICAgICAgICAgICBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRA0KKyNkZWZpbmUgUENJOTA1Nl9FWFBfUk9NX0JBU0UgICAgICAgICBQQ0lfUk9NX0FERFJFU1MNCisjZGVmaW5lIFBDSTkwNTZfQ0FQX1BUUiAgICAgICAgICAgICAgUENJX0NBUEFCSUxJVFlfTElTVA0KKyNkZWZpbmUgUENJOTA1Nl9JTlRfTElORSAgICAgICAgICAgICBQQ0lfSU5URVJSVVBUX0xJTkUNCisNCisjaWYgZGVmaW5lZChQTFg5MDU2X0xPQykNCisgICAgI2RlZmluZSBQQ0k5MDU2X1BNX0NBUF9JRCAgICAgICAgICAgIDB4MTgwDQorICAgICNkZWZpbmUgUENJOTA1Nl9QTV9DU1IgICAgICAgICAgICAgICAweDE4NA0KKyAgICAjZGVmaW5lIFBDSTkwNTZfSFNfQ0FQX0lEICAgICAgICAgICAgMHgxODgNCisgICAgI2RlZmluZSBQQ0k5MDU2X1ZQRF9DQVBfSUQgICAgICAgICAgIDB4MThDDQorICAgICNkZWZpbmUgUENJOTA1Nl9WUERfREFUQSAgICAgICAgICAgICAweDE5MA0KKyNlbmRpZg0KKw0KKw0KKw0KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFg5MDU2CQkweDkwNTYNCisNCisvKiBMb2NhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyBBY2Nlc3NpYmxlIHZpYSB0aGUgUENJIEJhc2UgYWRkcmVzcyArIFZhcmlhYmxlICovDQorI2RlZmluZSBQQ0k5MDU2X1NQQUNFMF9SQU5HRSAgICAgICAgICgweDAwMCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfU1BBQ0UwX1JFTUFQICAgICAgICAgKDB4MDA0ICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9MT0NBTF9ETUFfQVJCSVQgICAgICAoMHgwMDggKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X0VORElBTl9ERVNDICAgICAgICAgICgweDAwYyArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfRVhQX1JPTV9SQU5HRSAgICAgICAgKDB4MDEwICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9FWFBfUk9NX1JFTUFQICAgICAgICAoMHgwMTQgKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X1NQQUNFMF9ST01fREVTQyAgICAgICgweDAxOCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfRE1fUkFOR0UgICAgICAgICAgICAgKDB4MDFjICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9ETV9NRU1fQkFTRSAgICAgICAgICAoMHgwMjAgKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X0RNX0lPX0JBU0UgICAgICAgICAgICgweDAyNCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfRE1fUENJX01FTV9SRU1BUCAgICAgKDB4MDI4ICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9ETV9QQ0lfSU9fQ09ORklHICAgICAoMHgwMmMgKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X1NQQUNFMV9SQU5HRSAgICAgICAgICgweDBmMCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfU1BBQ0UxX1JFTUFQICAgICAgICAgKDB4MGY0ICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9TUEFDRTFfREVTQyAgICAgICAgICAoMHgwZjggKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X0RNX0RBQyAgICAgICAgICAgICAgICgweDBmYyArIExPQ0FMX09GRlNFVCkNCisNCisjaWZkZWYgUExYOTA1Nl9MT0MNCisjZGVmaW5lIFBDSTkwNTZfQVJCSVRFUl9DVFJMICAgICAgICAgMHgxQTANCisjZGVmaW5lIFBDSTkwNTZfQUJPUlRfQUREUkVTUyAgICAgICAgMHgxQTQNCisjZW5kaWYNCisNCisvKiBSdW50aW1lIHJlZ2lzdGVycyAgUENJIEFkZHJlc3MgKyBMT0NBTF9PRkZTRVQgKi8NCisjaWZkZWYgUExYOTA1Nl9MT0MNCisjZGVmaW5lIFBDSTkwNTZfTUFJTEJPWDAJCQkJMHgwQzANCisjZGVmaW5lIFBDSTkwNTZfTUFJTEJPWDEJCQkJMHgwQzQNCisjZWxzZQ0KKyNkZWZpbmUgUENJOTA1Nl9NQUlMQk9YMAkJCQkweDA3OA0KKyNkZWZpbmUgUENJOTA1Nl9NQUlMQk9YMQkJCQkweDA3Yw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgUENJOTA1Nl9NQUlMQk9YMgkJCQkoMHgwNDggKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X01BSUxCT1gzCQkJCSgweDA0YyArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfTUFJTEJPWDQJCQkJKDB4MDUwICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9NQUlMQk9YNQkJCQkoMHgwNTQgKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X01BSUxCT1g2CQkJCSgweDA1OCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfTUFJTEJPWDcJCQkJKDB4MDVjICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9QQ0lfVE9fTE9DX0RCRUxMCQkoMHgwNjAgKyBMT0NBTF9PRkZTRVQpDQorI2RlZmluZSBQQ0k5MDU2X0xPQ19UT19QQ0lfREJFTEwJCSgweDA2NCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfSU5UX0NUUkxfU1RBVAkJCSgweDA2OCArIExPQ0FMX09GRlNFVCkNCisjZGVmaW5lIFBDSTkwNTZfRUVQUk9NX0NUUkxfU1RBVAkJKDB4MDZjICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9QRVJNX1ZFTkRPUl9JRAkJKDB4MDcwICsgTE9DQUxfT0ZGU0VUKQ0KKyNkZWZpbmUgUENJOTA1Nl9SRVZJU0lPTl9JRAkJCSgweDA3NCArIExPQ0FMX09GRlNFVCkNCisNCisNCisjZW5kaWYgLyogI2lmbmRlZiBfX1BMWDkwNTZfSF8gKi8NCisNCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvcGF0aS91LWJvb3QubGRzIGIvYm9hcmQvbXBsL3BhdGkvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTg4ODAxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBsL3BhdGkvdS1ib290LmxkcwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMQlXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlCisgKiAoQykgQ29weXJpZ2h0IDIwMDMJTWFydGluIFdpbmlzdG9lcmZlciwgbWFydGlud2luaXN0b2VyZmVyQGdteC5jaAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisgICBfX0RZTkFNSUMgPSAwOyAgICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L21wYzV4eC9zdGFydC5vCSgudGV4dCkKKworICAgICooLnRleHQpCisgICAgKiguZml4dXApCisgICAgKiguZ290MSkKKyAgfQorICBfZXRleHQgPSAuOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgIDoKKyAgeworICAgICooLnJvZGF0YSkKKyAgICAqKC5yb2RhdGExKQorICAgICooLnJvZGF0YS5zdHIxLjQpCisgIH0KKyAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9CisgIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KKworICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KKyAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7CisgIF9lcm90ZXh0ID0gLjsKKyAgUFJPVklERSAoZXJvdGV4dCA9IC4pOworICAucmVsb2MgICA6CisgIHsKKyAgICAqKC5nb3QpCisgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAqKC5nb3QyKQorICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICooLmZpeHVwKQorICB9CisgIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKKyAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKKworICAuZGF0YSAgICA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGExKQorICAgICooLnNkYXRhKQorICAgICooLnNkYXRhMikKKyAgICAqKC5keW5hbWljKQorICAgIENPTlNUUlVDVE9SUworICB9CisgIF9lZGF0YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorCisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7CisvKiAgIC4gPSBlbnZfc3RhcnQ7CisJLnBwY2Vudgk6CisJeworCQljb21tb24vZW52aXJvbm1lbnQubyAoLnBwY2VudikKKwl9CisqLworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9NYWtlZmlsZSBiL2NwdS9tcGM1eHgvTWFrZWZpbGUKaW5kZXggZWUyMGRkYS4uYjc4N2I2MSAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjNXh4L01ha2VmaWxlCkBAIC0zNSw3ICszNSw3IEBACiBMSUIJPSBsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0LlMKLU9CSlMJPSBzZXJpYWwubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyB0cmFwcy5vIHNwZWVkLm8KK09CSlMJPSBzZXJpYWwubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyB0cmFwcy5vIHNwZWVkLm8gc3BpLm8KIAogYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L2NwdS5jIGIvY3B1L21wYzV4eC9jcHUuYwppbmRleCBjYzY5NTExLi4wYzIyYTMxIDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L2NwdS5jCisrKyBiL2NwdS9tcGM1eHgvY3B1LmMKQEAgLTEyMiwxMiArMTIyLDMwIEBACiAJcmV0dXJuIChvc2NjbGsgLyAxNik7CiB9CiAKK3ZvaWQgZGNhY2hlX2VuYWJsZSAodm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK3ZvaWQgZGNhY2hlX2Rpc2FibGUgKHZvaWQpCit7CisJcmV0dXJuOworfQorCitpbnQgZGNhY2hlX3N0YXR1cyAodm9pZCkKK3sKKwlyZXR1cm4gMDsJLyogYWx3YXlzIG9mZiAqLworfQogCiAvKgogICogUmVzZXQgYm9hcmQKICAqLwogaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisjaWYgZGVmaW5lZChDT05GSUdfUEFUSSkKKwl2b2xhdGlsZSB1bG9uZyAqYWRkciA9ICh1bG9uZyAqKSBDRkdfUkVTRVRfQUREUkVTUzsKKwkqYWRkciA9IDE7CisjZWxzZQogCXVsb25nIGFkZHI7CiAKIAkvKiBJbnRlcnJ1cHRzIG9mZiwgZW5hYmxlIHJlc2V0ICovCkBAIC0xNTAsNSArMTY4LDYgQEAKIAlhZGRyID0gQ0ZHX01PTklUT1JfQkFTRSAtIHNpemVvZiAodWxvbmcpOwogI2VuZGlmCiAJKCh2b2lkICgqKSAodm9pZCkpIGFkZHIpICgpOworI2VuZGlmICAvKiAjaWYgZGVmaW5lZChDT05GSUdfUEFUSSkgKi8KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvY3B1X2luaXQuYyBiL2NwdS9tcGM1eHgvY3B1X2luaXQuYwppbmRleCBlMTlkMGY0Li5mNGNkMjRiIDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzV4eC9jcHVfaW5pdC5jCkBAIC02NCw2ICs2NCw4IEBACiAJaW1tci0+aW1fc2l0ay5zaXRrX3Bpc2NyayA9IEtBUFdSX0tFWTsKIAlpbW1yLT5pbV9zaXQuc2l0X3Bpc2NyID0gQ0ZHX1BJU0NSOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1BBVEkpCisJLyogUEFUSSBzZXN0IFBMTCBpbiBzdGFydC5TICovCiAJLyogUExMIChDUFUgY2xvY2spIHNldHRpbmdzICovCiAJaW1tci0+aW1fY2xrcnN0ay5jYXJrX3BscHJjcmsgPSBLQVBXUl9LRVk7CiAKQEAgLTgxLDYgKzgzLDggQEAKICNlbmRpZgogCWltbXItPmltX2Nsa3JzdC5jYXJfcGxwcmNyID0gcmVnOwogCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1BBVEkpICovCisKIAkvKiBTeXN0ZW0gaW50ZWdyYXRpb24gdGltZXJzLiBDRkdfTUFTSyBoYXMgRUJERiBjb25maWd1cmF0aW9uICovCiAJaW1tci0+aW1fY2xrcnN0ay5jYXJrX3NjY3JrID0gS0FQV1JfS0VZOwogCXJlZyA9IGltbXItPmltX2Nsa3JzdC5jYXJfc2NjcjsKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvaW50ZXJydXB0cy5jIGIvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKaW5kZXggMzY3OGI1Yi4uN2Y2ZTEzNiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKQEAgLTI4LDEyICsyOCwyMCBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bXBjNXh4Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfUEFUSSkKKy8qIFBBVEkgdXNlcyBJUlFzIGZvciBQQ0kgZG9vcmJlbGwgKi8KKyN1bmRlZiBOUl9JUlFTCisjZGVmaW5lIE5SX0lSUVMgMTYKKyNlbmRpZgorCiBzdHJ1Y3QgaW50ZXJydXB0X2FjdGlvbiB7CiAJaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlcjsKIAl2b2lkICphcmc7CisJaW50IGNvdW50OwogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRlcnJ1cHRfYWN0aW9uIGlycV92ZWNzW05SX0lSUVNdOwpAQCAtNDUsMTIgKzUzLDE4IEBACiBpbnQgaW50ZXJydXB0X2luaXRfY3B1ICh1bG9uZyAqZGVjcmVtZW50ZXJfY291bnQpCiB7CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopIENGR19JTU1SOworCWludCB2ZWM7CiAKIAkvKiBEZWNyZW1lbnRlciB1c2VkIGhlcmUgZm9yIHN0YXR1cyBsZWQgKi8KIAkqZGVjcmVtZW50ZXJfY291bnQgPSBnZXRfdGJjbGsgKCkgLyBDRkdfSFo7CiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJaW1tci0+aW1fc2l1X2NvbmYuc2Nfc2ltYXNrID0gMDsKKwlmb3IgKHZlYz0wOyB2ZWM8TlJfSVJRUzsgdmVjKyspIHsKKwkJaXJxX3ZlY3NbdmVjXS5oYW5kbGVyID0gTlVMTDsKKwkJaXJxX3ZlY3NbdmVjXS5hcmcgPSBOVUxMOworCQlpcnFfdmVjc1t2ZWNdLmNvdW50ID0gMDsKKwl9CiAKIAlyZXR1cm4gKDApOwogfQpAQCAtMTYzLDMgKzE3NywzMSBAQAogCiAJcmV0dXJuOwogfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSVJRKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBpcnFpbmZvIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgSVJRcworICoKKyAqLworaW50IGRvX2lycWluZm8oY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHZlYzsKKworCXByaW50ZiAoIlxuSW50ZXJydXB0LUluZm9ybWF0aW9uOlxuIik7CisJcHJpbnRmICgiTnIgIFJvdXRpbmUgICBBcmcgICAgICAgQ291bnRcbiIpOworCisJZm9yICh2ZWM9MDsgdmVjPE5SX0lSUVM7IHZlYysrKSB7CisJCWlmIChpcnFfdmVjc1t2ZWNdLmhhbmRsZXIgIT0gTlVMTCkgeworCQkJcHJpbnRmICgiJTAyZCAgJTA4bHggICUwOGx4ICAlZFxuIiwKKwkJCQl2ZWMsCisJCQkJKHVsb25nKWlycV92ZWNzW3ZlY10uaGFuZGxlciwKKwkJCQkodWxvbmcpaXJxX3ZlY3NbdmVjXS5hcmcsCisJCQkJaXJxX3ZlY3NbdmVjXS5jb3VudCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworI2VuZGlmICAvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lSUSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9zcGkuYyBiL2NwdS9tcGM1eHgvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3ZDBjOQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM1eHgvc3BpLmMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgTmF2aW4gQm9wcHVyaSAvIFByYXNoYW50IFBhdGVsCisgKgk8bmJvcHB1cmlAdHJpbmV0Y29tbXVuaWNhdGlvbi5jb20+LAorICoJPHBtcGF0ZWxAdHJpbmV0Y29tbXVuaWNhdGlvbi5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEgR2VyZCBNZW5uY2hlbiA8R2VyZC5NZW5uY2hlbkBpY24uc2llbWVucy5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMSBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8d2RAZGVueC5kZT4uCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIE1QQzV4eCBDUE0gU1BJIGludGVyZmFjZS4KKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIHByb2JhYmx5IG5vdCBwb3J0YWJsZSBhbmQvb3Igc3BlY2lmaWMgdG8KKyAqIHRoZSBib2FyZCB3aGljaCBJIHVzZWQgZm9yIHRoZSB0ZXN0cy4gUGxlYXNlIHNlbmQgZml4ZXMvY29tcGxhaW50cworICogdG8gd2RAZGVueC5kZQorICoKKyAqIFBvcnRlZCB0byBNUEM1eHgKKyAqIENvcHlyaWdodCAoYykgMjAwMyBEZW5pcyBQZXRlciwgTVBMIEFHIFN3aXR6ZXJsYW5kLCBkLnBldHJAbXBsLmNoLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtcGM1eHguaD4KKyNpbmNsdWRlIDxhc20vNXh4X2ltbWFwLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxwb3N0Lmg+CisjaW5jbHVkZSA8bmV0Lmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUEkpCisKKyN1bmRlZglERUJVRworCisjZGVmaW5lIFNQSV9FRVBST01fV1JFTgkJMHgwNgorI2RlZmluZSBTUElfRUVQUk9NX1JEU1IJCTB4MDUKKyNkZWZpbmUgU1BJX0VFUFJPTV9SRUFECQkweDAzCisjZGVmaW5lIFNQSV9FRVBST01fV1JJVEUJMHgwMgorCisKKyNpZmRlZglERUJVRworCisjZGVmaW5lCURQUklOVChhKQlwcmludGYgYTsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIHBlZWsgaW50byB0eCBhbmQgcnggYnVmZmVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGV4X2RpZ2l0ID0gIjAxMjM0NTY3ODlBQkNERUYiOworCitzdGF0aWMgY2hhciBxdWlja2hleCAoaW50IGkpCit7CisJcmV0dXJuIGhleF9kaWdpdFtpXTsKK30KKworc3RhdGljIHZvaWQgbWVtZHVtcCAodm9pZCAqcHYsIGludCBudW0pCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqcGMgPSAodW5zaWduZWQgY2hhciAqKSBwdjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJcHJpbnRmICgiJWMlYyAiLCBxdWlja2hleCAocGNbaV0gPj4gNCksIHF1aWNraGV4IChwY1tpXSAmIDB4MGYpKTsKKwlwcmludGYgKCJcdCIpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJcHJpbnRmICgiJWMiLCBpc3ByaW50IChwY1tpXSkgPyBwY1tpXSA6ICcuJyk7CisJcHJpbnRmICgiXG4iKTsKK30KKyNlbHNlCS8qICFERUJVRyAqLworCisjZGVmaW5lCURQUklOVChhKQorCisjZW5kaWYJLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb24gcHJvdG90eXBlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordm9pZCBzcGlfaW5pdCAodm9pZCk7CisKK3NzaXplX3Qgc3BpX3JlYWQgKHVjaGFyICosIGludCwgdWNoYXIgKiwgaW50KTsKK3NzaXplX3Qgc3BpX3dyaXRlICh1Y2hhciAqLCBpbnQsIHVjaGFyICosIGludCk7Citzc2l6ZV90IHNwaV94ZmVyIChzaXplX3QpOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZ1bmN0aW9uOiAgICBzcGlfaW5pdF9mCisgKgorICogIERlc2NyaXB0aW9uOiBJbml0IFNQSS1Db250cm9sbGVyIChST00gcGFydCkKKyAqCisgKiAgcmV0dXJuOiAgICAgIC0tLQorICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKK3ZvaWQgc3BpX2luaXRfZiAodm9pZCkKK3sKKwlpbnQgaTsKKworCXZvbGF0aWxlIGltbWFwX3QgKmltbXI7CisJdm9sYXRpbGUgcXNtY201eHhfdCAqcXNtY207CisKKwlpbW1yID0gKGltbWFwX3QgKikgIENGR19JTU1SOworCXFzbWNtID0gKHFzbWNtNXh4X3QgKikmaW1tci0+aW1fcXNtY207CisKKwlxc21jbS0+cXNtY21fcXNtY3IgPSAwOyAvKiBhbGwgYWNjZXNzZXMgZW5hYmxlZCAqLworCXFzbWNtLT5xc21jbV9xc3BpX2lsID0gMDsgLyogbG93ZXN0IElSUSAqLworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBHUElPIG9yIHBlci4gRnVuY3Rpb24KKwkgKiBQUVNQQVJbMDBdID0gMCByZXNlcnZlZAorCSAqIFBRU1BBUlswMV0gPSAxIFsweDQwMDBdIC0+IFBFUkk6IChTUElDUzMpCisJICogUFFTUEFSWzAyXSA9IDAgWzB4MDAwMF0gLT4gR1BJTworCSAqIFBRU1BBUlswM10gPSAwIFsweDAwMDBdIC0+IEdQSU8KKwkgKiBQUVNQQVJbMDRdID0gMSBbMHgwODAwXSAtPiBQRVJJOiAoU1BJQ1MwKQorCSAqIFBRU1BBUlswNV0gPSAwIHJlc2V2ZWQKKwkgKiBQUVNQQVJbMDZdID0gMSBbMHgwMjAwXSAtPiBQRVJJOiAoU1BJTU9TSSkKKwkgKiBQUVNQQVJbMDddID0gMSBbMHgwMTAwXSAtPiBQRVJJOiAoU1BJTUlTTykKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCXFzbWNtLT5xc21jbV9wcXNwYXIgPSAgMHgzIHwgKENGR19TUElfQ1NfVVNFRCA8PCAzKTsKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIEREUlFTWzAwXSA9IDAgcmVzZXJ2ZWQKKwkgKiBERFJRU1swMV0gPSAxIFsweDAwNDBdIC0+IFNQSUNTMyBPdXRwdXQKKwkgKiBERFJRU1swMl0gPSAwIFsweDAwMDBdIC0+IEdQSU8gT3V0cHV0CisJICogRERSUVNbMDNdID0gMCBbMHgwMDAwXSAtPiBHUElPIE91dHB1dAorCSAqIEREUlFTWzA0XSA9IDEgWzB4MDAwOF0gLT4gU1BJQ1MwIE91dHB1dAorCSAqIEREUlFTWzA1XSA9IDEgWzB4MDAwNF0gLT4gU1BJQ0xLIE91dHB1dAorCSAqIEREUlFTWzA2XSA9IDEgWzB4MDAwMl0gLT4gU1BJTU9TSSBPdXRwdXQKKwkgKiBERFJRU1swN10gPSAwIFsweDAwMDFdIC0+IFNQSU1JU08gSW5wdXQKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCXFzbWNtLT5xc21jbV9kZHJxcyA9IDB4N0U7CisJIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQmFzZSBzdGF0ZSBmb3IgdXNlZCBTUEkgQ1MgcGlucywgaWYgYmFzZSA9IDAgYWN0aXZlIG11c3QgYmUgMQorCSAqIFBPUlRRU1swMF0gPSAwIHJlc2VydmVkCisJICogUE9SVFFTWzAxXSA9IDAgcmVzZXJ2ZWQKKwkgKiBQT1JUUVNbMDJdID0gMCByZXNlcnZlZAorCSAqIFBPUlRRU1swM10gPSAwIHJlc2VydmVkCisJICogUE9SVFFTWzA0XSA9IDAgWzB4MDAwMF0gUnhEMgorCSAqIFBPUlRRU1swNV0gPSAxIFsweDA0MDBdIFR4RDIKKwkgKiBQT1JUUVNbMDZdID0gMCBbMHgwMDAwXSBSeEQxCisJICogUE9SVFFTWzA3XSA9IDEgWzB4MDEwMF0gVHhEMQorCSAqIFBPUlRRU1swOF0gPSAwIHJlc2VydmVkCisJICogUE9SVFFTWzA5XSA9IDAgWzB4MDAwMF0gLT4gU1BJQ1MzIEJhc2UgT3V0cHV0CisJICogUE9SVFFTWzEwXSA9IDAgWzB4MDAwMF0gLT4gU1BJQ1MyIEJhc2UgT3V0cHV0CisJICogUE9SVFFTWzExXSA9IDAgWzB4MDAwMF0gLT4gU1BJQ1MxIEJhc2UgT3V0cHV0CisJICogUE9SVFFTWzEyXSA9IDAgWzB4MDAwMF0gLT4gU1BJQ1MwIEJhc2UgT3V0cHV0CisJICogUE9SVFFTWzEzXSA9IDAgWzB4MDAwNF0gLT4gU1BJQ0xLIE91dHB1dAorCSAqIFBPUlRRU1sxNF0gPSAwIFsweDAwMDJdIC0+IFNQSU1PU0kgT3V0cHV0CisJICogUE9SVFFTWzE1XSA9IDAgWzB4MDAwMV0gLT4gU1BJTUlTTyBJbnB1dAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJcXNtY20tPnFzbWNtX3BvcnRxcyB8PSAoQ0ZHX1NQSV9DU19CQVNFIDw8IDMpOworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQ29udHJvbGwgUmVnaXN0ZXIgMAorCSAqIFNQQ1IwWzAwXSA9IDEgKDB4ODAwMCkgTWFzdGVyCisJICogU1BDUjBbMDFdID0gMCAoMHgwMDAwKSBXaXJlZC1PcgorCSAqIFNQQ1IwWzIuLjVdID0gKDB4MjAwMCkgQml0cyBwZXIgdHJhbnNmZXIgKGRlZmF1bHQgOCkKKwkgKiBTUENSMFswNl0gPSAwICgweDAwMDApIE5vcm1hbCBwb2xhcml0eQorCSAqIFNQQ1IwWzA3XSA9IDAgKDB4MDAwMCkgTm9ybWFsIENsb2NrIFBoYXNlCisJICogU1BDUjBbMDguLjE1XSA9IDE0IDEuNE1IegorCSAqLworCXFzbWNtLT5xc21jbV9zcGNyMD0weEEwMEU7CisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDb250cm9sbCBSZWdpc3RlciAxCisJICogU1BDUjFbMDBdID0gMCAoMHgwMDAwKSBRU1BJIGVuYWJsZWQKKwkgKiBTUENSMVsxLi43XSA9ICAoMHg3RjAwKSBEZWxheSBiZWZvcmUgVHJhbnNmZXIKKwkgKiBTUENSMVs4Li4xNV0gPSAoMHgwMDAwKSBEZWxheSBBZnRlciB0cmFuc2ZlciAoMjA0Ljh1c2VjQDQwTUh6KQorCSAqLworCXFzbWNtLT5xc21jbV9zcGNyMT0weDdGMDA7CisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDb250cm9sbCBSZWdpc3RlciAyCisJICogU1BDUjJbMDBdID0gMCAoMHgwMDAwKSBTUEkgSVJRcyBEaXNhYmVsZAorCSAqIFNQQ1IyWzAxXSA9IDAgKDB4MDAwMCkgTm8gV3JhcCBhcm91bmQKKwkgKiBTUENSMlswMl0gPSAwICgweDAwMDApIFdyYXAgdG8gMAorCSAqIFNQQ1IyWzMuLjddID0gKDB4MDAwMCkgRW5kIFF1ZXVlIHBvaW50ZXIgPSAwCisJICogU1BDUjJbOC4uMTBdID0gMCAoMHgwMDAwKSByZXNlcnZlZAorCSAqIFNQQ1IyWzExLi4xNV0gPSAwICgweDAwMDApIE5ld1F1ZXVlIEFkZHJlc3MgPSAwCisJICovCisJcXNtY20tPnFzbWNtX3NwY3IyPTB4MDAwMDsKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIENvbnRyb2xsIFJlZ2lzdGVyIDMKKwkgKiBTUENSM1swMC4uMDRdID0gMCAoMHgwMDAwKSByZXNlcnZlZAorCSAqIFNQQ1IzWzA1XSA9IDAgKDB4MDAwMCkgRmVlZGJhY2sgZGlzYWJsZWQKKwkgKiBTUENSM1swNl0gPSAwICgweDAwMDApIElSUSBvbiBIQUxUQSAmIE1PREYgZGlzYWJsZWQKKwkgKiBTUENSM1swN10gPSAwICgweDAwMDApIE5vdCBoYWx0ZWQKKwkgKi8KKwlxc21jbS0+cXNtY21fc3BjcjM9MHgwMDsKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFNQU1IgKENvbnRyb2xsIFJlZ2lzdGVyIDMpIFJlYWQgb25seS8gcmVzZXQgRmxhZ3MgMDgsMDksMTAKKwkgKiBTUENSM1swOF0gPSAxICgweDgwKSBRU1BJIGZpbmlzaGVkCisJICogU1BDUjNbMDldID0gMSAoMHg0MCkgTW9kZSBGYXVsdCBGbGFnCisJICogU1BDUjNbMTBdID0gMSAoMHgyMCkgSEFMVEEKKwkgKiBTUENSM1sxMS4uMTVdID0gMCAoMHgwMDAwKSBMYXN0IGV4ZWN1dGVkIGNvbW1hbmQKKwkgKi8KKwlxc21jbS0+cXNtY21fc3Bzcj0weEUwOworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFNldHVwIFJBTQorCSAqLworCWZvcihpPTA7aTwzMjtpKyspIHsKKwkgCSBxc21jbS0+cXNtY21fcmVjcmFtW2ldPTB4MDAwMDsKKwkgCSBxc21jbS0+cXNtY21fdHJhbnJhbVtpXT0weDAwMDA7CisJIAkgcXNtY20tPnFzbWNtX2NvbWRyYW1baV09MHgwMDsKKwl9CisJcmV0dXJuOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBGdW5jdGlvbjogICAgc3BpX2luaXRfcgorICogIER1bW15LCBhbGwgaW5pdGlhbGl6YXRpb25zIGhhdmUgYmVlbiBkb25lIGluIHNwaV9pbml0X3IKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit2b2lkIHNwaV9pbml0X3IgKHZvaWQpCit7CisJcmV0dXJuOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRnVuY3Rpb246ICAgIHNwaV93cml0ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3NzaXplX3Qgc2hvcnRfc3BpX3dyaXRlICh1Y2hhciAqYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJaW50IGksZGxlbjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1yOworCXZvbGF0aWxlIHFzbWNtNXh4X3QgKnFzbWNtOworCisJaW1tciA9IChpbW1hcF90ICopICBDRkdfSU1NUjsKKwlxc21jbSA9IChxc21jbTV4eF90ICopJmltbXItPmltX3FzbWNtOworCWZvcihpPTA7aTwzMjtpKyspIHsKKwkgCSBxc21jbS0+cXNtY21fcmVjcmFtW2ldPTB4MDAwMDsKKwkgCSBxc21jbS0+cXNtY21fdHJhbnJhbVtpXT0weDAwMDA7CisJIAkgcXNtY20tPnFzbWNtX2NvbWRyYW1baV09MHgwMDsKKwl9CisJcXNtY20tPnFzbWNtX3RyYW5yYW1bMF0gPSAgU1BJX0VFUFJPTV9XUkVOOyAvKiB3cml0ZSBlbmFibGUgKi8KKwlzcGlfeGZlcigxKTsKKwlpPTA7CisJcXNtY20tPnFzbWNtX3RyYW5yYW1baSsrXSA9ICBTUElfRUVQUk9NX1dSSVRFOyAvKiBXUklURSBtZW1vcnkgYXJyYXkgKi8KKwlxc21jbS0+cXNtY21fdHJhbnJhbVtpKytdID0gIGFkZHJbMF07CisJcXNtY20tPnFzbWNtX3RyYW5yYW1baSsrXSA9ICBhZGRyWzFdOworCisJZm9yKGRsZW49MDtkbGVuPGxlbjtkbGVuKyspIHsKKwkJcXNtY20tPnFzbWNtX3RyYW5yYW1baStkbGVuXSA9IGJ1ZmZlcltkbGVuXTsgLyogV1JJVEUgbWVtb3J5IGFycmF5ICovCisJfQorCS8qIHRyYW5zbWl0IGl0ICovCisJc3BpX3hmZXIoaStkbGVuKTsKKwkvKiBpZ25vcmUgcmVjZWl2ZWQgZGF0YQkqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJcXNtY20tPnFzbWNtX3RyYW5yYW1bMF0gPSAgU1BJX0VFUFJPTV9SRFNSOyAvKiByZWFkIHN0YXR1cyAqLworCQlxc21jbS0+cXNtY21fdHJhbnJhbVsxXSA9IDA7CisJCXNwaV94ZmVyKDIpOworCQlpZiAoIShxc21jbS0+cXNtY21fcmVjcmFtWzFdICYgMSkpIHsKKwkJCWJyZWFrOworCQl9CisJCXVkZWxheSgxMDAwKTsKKwl9CisJaWYgKGkgPj0gMTAwMCkgeworCQlwcmludGYgKCIqKiogc3BpX3dyaXRlOiBUaW1lIG91dCB3aGlsZSB3cml0aW5nIVxuIik7CisJfQorCXJldHVybiBsZW47Cit9CisKKyNkZWZpbmUgVFJBTlNGRVJfTEVOIDE2CisKK3NzaXplX3Qgc3BpX3dyaXRlICh1Y2hhciAqYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJaW50IGluZGV4LGksbmV3bGVuOworCXVjaGFyIG5ld2FkZHJbMl07CisJaW50IGN1cnJhZGRyOworCisJY3VycmFkZHI9KGFkZHJbYWxlbi0yXTw8OCkrYWRkclthbGVuLTFdOworCWk9bGVuOworCWluZGV4PTA7CisJZG8geworCQluZXdhZGRyWzFdPShjdXJyYWRkciAmIDB4ZmYpOworCQluZXdhZGRyWzBdPSgoY3VycmFkZHI+PjgpICYgMHhmZik7CisJCWlmKGk+VFJBTlNGRVJfTEVOKSB7CisJCQluZXdsZW49VFJBTlNGRVJfTEVOOworCQkJaS09VFJBTlNGRVJfTEVOOworCQl9CisJCWVsc2UgeworCQkJbmV3bGVuPWk7CisJCQlpPTA7CisJCX0KKwkJc2hvcnRfc3BpX3dyaXRlIChuZXdhZGRyLCAyLCAmYnVmZmVyW2luZGV4XSwgbmV3bGVuKTsKKwkJaW5kZXgrPW5ld2xlbjsKKwkJY3VycmFkZHIrPW5ld2xlbjsKKwl9d2hpbGUoaSk7CisJcmV0dXJuIChsZW4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZ1bmN0aW9uOiAgICBzcGlfcmVhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3NzaXplX3Qgc2hvcnRfc3BpX3JlYWQgKHVjaGFyICphZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1yOworCXZvbGF0aWxlIHFzbWNtNXh4X3QgKnFzbWNtOworCisJaW1tciA9IChpbW1hcF90ICopICBDRkdfSU1NUjsKKwlxc21jbSA9IChxc21jbTV4eF90ICopJmltbXItPmltX3FzbWNtOworCisJZm9yKGk9MDtpPDMyO2krKykgeworCSAJIHFzbWNtLT5xc21jbV9yZWNyYW1baV09MHgwMDAwOworCSAJIHFzbWNtLT5xc21jbV90cmFucmFtW2ldPTB4MDAwMDsKKwkgCSBxc21jbS0+cXNtY21fY29tZHJhbVtpXT0weDAwOworCX0KKwlpPTA7CisJcXNtY20tPnFzbWNtX3RyYW5yYW1baSsrXSA9IChTUElfRUVQUk9NX1JFQUQpOyAvKiBSRUFEIG1lbW9yeSBhcnJheSAqLworCXFzbWNtLT5xc21jbV90cmFucmFtW2krK10gPSBhZGRyWzBdICYgMHhmZjsKKwlxc21jbS0+cXNtY21fdHJhbnJhbVtpKytdID0gYWRkclsxXSAmIDB4ZmY7CisJc3BpX3hmZXIoMyArIGxlbik7CisJZm9yKGk9MDtpPGxlbjtpKyspIHsKKwkJKmJ1ZmZlcisrPShjaGFyKXFzbWNtLT5xc21jbV9yZWNyYW1baSszXTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3NpemVfdCBzcGlfcmVhZCAodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQoreworCWludCBpbmRleCxpLG5ld2xlbjsKKwl1Y2hhciBuZXdhZGRyWzJdOworCWludCBjdXJyYWRkcjsKKworCWN1cnJhZGRyPShhZGRyW2FsZW4tMl08PDgpK2FkZHJbYWxlbi0xXTsKKwlpPWxlbjsKKwlpbmRleD0wOworCWRvIHsKKwkJbmV3YWRkclsxXT0oY3VycmFkZHIgJiAweGZmKTsKKwkJbmV3YWRkclswXT0oKGN1cnJhZGRyPj44KSAmIDB4ZmYpOworCQlpZihpPlRSQU5TRkVSX0xFTikgeworCQkJbmV3bGVuPVRSQU5TRkVSX0xFTjsKKwkJCWktPVRSQU5TRkVSX0xFTjsKKwkJfQorCQllbHNlIHsKKwkJCW5ld2xlbj1pOworCQkJaT0wOworCQl9CisJCXNob3J0X3NwaV9yZWFkIChuZXdhZGRyLCAyLCAmYnVmZmVyW2luZGV4XSwgbmV3bGVuKTsKKwkJaW5kZXgrPW5ld2xlbjsKKwkJY3VycmFkZHIrPW5ld2xlbjsKKwl9d2hpbGUoaSk7CisJcmV0dXJuIChsZW4pOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBGdW5jdGlvbjogICAgc3BpX3hmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzc2l6ZV90IHNwaV94ZmVyIChzaXplX3QgY291bnQpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tcjsKKwl2b2xhdGlsZSBxc21jbTV4eF90ICpxc21jbTsKKwlpbnQgaTsKKwlpbnQgdG07CisJdXNob3J0IHN0YXR1czsKKwlpbW1yID0gKGltbWFwX3QgKikgIENGR19JTU1SOworCXFzbWNtID0gKHFzbWNtNXh4X3QgKikmaW1tci0+aW1fcXNtY207CisJRFBSSU5UICgoIioqKiBzcGlfeGZlciBlbnRlcmVkIGNvdW50ICVkKioqXG4iLGNvdW50KSk7CisKKwkvKiBTZXQgQ1MgZm9yIGRldmljZSAqLworCWZvcihpPTA7aTwoY291bnQtMSk7aSsrKQorCQlxc21jbS0+cXNtY21fY29tZHJhbVtpXSA9IDB4ODAgfCBDRkdfU1BJX0NTX0FDVDsgIC8qIENTMyBpcyBjb25uZWN0ZWQgdG8gdGhlIFNQSSBFRVBST00gKi8KKworCXFzbWNtLT5xc21jbV9jb21kcmFtW2ldID0gQ0ZHX1NQSV9DU19BQ1Q7IC8qIENTMyBpcyBjb25uZWN0ZWQgdG8gdGhlIFNQSSBFRVBST00gKi8KKwlxc21jbS0+cXNtY21fc3BjcjI9KChjb3VudC0xKSYweDFGKTw8ODsKKworCURQUklOVCAoKCIqKiogc3BpX3hmZXI6IEJ5dGVzIHRvIGJlIHhmZXJyZWQ6ICVkICoqKlxuIiwgY291bnQpKTsKKworCXFzbWNtLT5xc21jbV9zcHNyPTB4RTA7IC8qIGNsZWFyIGFsbCBmbGFncyAqLworCisJLyogc3RhcnQgc3BpIHRyYW5zZmVyICovCisJRFBSSU5UICgoIioqKiBzcGlfeGZlcjogUGVyZm9ybWluZyB0cmFuc2ZlciAuLi5cbiIpKTsKKwlxc21jbS0+cXNtY21fc3BjcjEgfD0gMHg4MDAwOwkJLyogU3RhcnQgdHJhbnNtaXQgKi8KKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogV2FpdCBmb3IgU1BJIHRyYW5zbWl0IHRvIGdldCBvdXQKKwkgKiBvciB0aW1lIG91dCAoMSBzZWNvbmQgPSAxMDAwIG1zKQorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJZm9yICh0bT0wOyB0bTwxMDAwOyArK3RtKSB7CisJCXN0YXR1cz1xc21jbS0+cXNtY21fc3BjcjE7CisJCWlmKChzdGF0dXMgJiAweDgwMDApPT0wKQorCQkJYnJlYWs7CisJCXVkZWxheSAoMTAwMCk7CisJfQorCWlmICh0bSA+PSAxMDAwKSB7CisJCXByaW50ZiAoIioqKiBzcGlfeGZlcjogVGltZSBvdXQgd2hpbGUgeGZlcnJpbmcgdG8vZnJvbSBTUEkhXG4iKTsKKwl9CisjaWZkZWYJREVCVUcKKwlwcmludGYgKCJcbnNwaV94ZmVyOiB0eGJ1ZiBhZnRlciB4ZmVyXG4iKTsKKwltZW1kdW1wICgodm9pZCAqKSBxc21jbS0+cXNtY21fdHJhbnJhbSwgMzIpOwkvKiBkdW1wIG9mIHR4YnVmIGJlZm9yZSB0cmFuc21pdCAqLworCXByaW50ZiAoInNwaV94ZmVyOiByeGJ1ZiBhZnRlciB4ZmVyXG4iKTsKKwltZW1kdW1wICgodm9pZCAqKSBxc21jbS0+cXNtY21fcmVjcmFtLCAzMik7CS8qIGR1bXAgb2YgcnhidWYgYWZ0ZXIgdHJhbnNtaXQgKi8KKwlwcmludGYgKCJcbnNwaV94ZmVyOiBjb21tYnVmIGFmdGVyIHhmZXJcbiIpOworCW1lbWR1bXAgKCh2b2lkICopIHFzbWNtLT5xc21jbV9jb21kcmFtLCAzMik7CS8qIGR1bXAgb2YgdHhidWYgYmVmb3JlIHRyYW5zbWl0ICovCisJcHJpbnRmICgiXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIGNvdW50OworfQorCisjZW5kaWYJLyogQ09ORklHX1NQSSAgKi8KKworCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L3N0YXJ0LlMgYi9jcHUvbXBjNXh4L3N0YXJ0LlMKaW5kZXggNTQ4ZWM5OS4uYjU2YmUyZiAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9zdGFydC5TCisrKyBiL2NwdS9tcGM1eHgvc3RhcnQuUwpAQCAtMTE3LDYgKzExNywyOSBAQAogCW10c3ByCUNPVU5UQSwgcjAKIAltdHNwcglDT1VOVEIsIHIwCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QQVRJKQorCS8qIHRoZSBleHRlcm5hbCBmbGFzaCBhY2Nlc3Mgb24gUEFUSSBmYWlscyBpZiBwcm9ncmFtbWluZyB0aGUgUExMIHRvIDQwTUh6LgorCSAqIENvcHkgdGhlIFBMTCBwcm9ncmFtbWluZyBjb2RlIHRvIHRoZSBpbnRlcm5hbCBSQU0gYW5kIGV4ZWN1dGUgaXQKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWxpcwlyMywgQ0ZHX01PTklUT1JfQkFTRUBoCisJb3JpCXIzLCByMywgQ0ZHX01PTklUT1JfQkFTRUBsCisJYWRkaQlyMywgcjMsIHBsbF9wcm9nX2NvZGVfc3RhcnQgLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAorCisJbGlzCXI0LCBDRkdfSU5JVF9SQU1fQUREUkBoCisJb3JpCXI0LCByNCwgQ0ZHX0lOSVRfUkFNX0FERFJAbAorCW10bHIJcjQKKwlhZGRpcwlyNSwwLDB4MAorCW9yaQlyNSxyNSwoKHBsbF9wcm9nX2NvZGVfZW5kIC0gcGxsX3Byb2dfY29kZV9zdGFydCkgPj4yKQorCW10Y3RyCXI1CisJYWRkaQlyMywgcjMsIC00CisJYWRkaQlyNCwgcjQsIC00CiswOgorCWx3enUJcjAsNChyMykKKwlzdHd1CXIwLDQocjQpCisJYmRuegkwYiAgICAgICAgICAgICAgICAvKiBjb3B5IGxvb3AgKi8KKwlibHJsCisjZW5kaWYKKwogCS8qCiAJICogQ2FsY3VsYXRlIGFic29sdXRlIGFkZHJlc3MgaW4gRkxBU0ggYW5kIGp1bXAgdGhlcmUKIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTUzLDMgKzU3NiwzMCBAQAogCWlzeW5jCiAKIAlibHIKKworCisjaWYgZGVmaW5lZChDT05GSUdfUEFUSSkKKy8qIFByb2dyYW0gdGhlIFBMTCAqLworcGxsX3Byb2dfY29kZV9zdGFydDoKKwlsaXMJcjQsIChDRkdfSU1NUiArIDB4MDAyZmMzODQpQGgKKwlvcmkJcjQsIHI0LCAoQ0ZHX0lNTVIgKyAweDAwMmZjMzg0KUBsCisJbGlzCXIzLCAoMHg1NWNjYWEzMylAaAorCW9yaQlyMywgcjMsICgweDU1Y2NhYTMzKUBsCisJc3R3CXIzLCAwKHI0KQorCWxpcwlyNCwgKENGR19JTU1SICsgMHgwMDJmYzI4NClAaAorCW9yaQlyNCwgcjQsIChDRkdfSU1NUiArIDB4MDAyZmMyODQpQGwKKwlsaXMJcjMsIENGR19QTFBSQ1JAaAorCW9yaQlyMywgcjMsIENGR19QTFBSQ1JAbAorCXN0dwlyMywgMChyNCkKKwlhZGRpcwlyMywwLDB4MAorCW9yaQlyMyxyMywweEEwMDAKKwltdGN0cglyMworLi5zcGlubHA6CisgIGJkbnogICAgLi5zcGlubHAgICAgICAgICAgICAgICAgLyogc3BpbiBsb29wICovCisJYmxyCitwbGxfcHJvZ19jb2RlX2VuZDoKKwlub3AKKwlibHIKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRsODEzOS5jIGIvZHJpdmVycy9ydGw4MTM5LmMKaW5kZXggNWIxNGU3MS4uYjllNGE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGw4MTM5LmMKKysrIGIvZHJpdmVycy9ydGw4MTM5LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgd2hpY2ggcmVzZXJ2ZXMgdGhlIHJhbmdlcyAweDAwMDAwLTB4MTAwMDAgYW5kIDB4OTgwMDAtMHhBMDAwMC4gIE15CiAgICAgIGludGVycHJldGF0aW9uIG9mIHRoaXMgInJlc2VydmVkIiBpcyB0aGF0IEV0aGVyYm9vdCBtYXkgZG8gd2hhdGV2ZXIgaXQKICAgICAgbGlrZXMsIGFzIGxvbmcgYXMgaXRzIGVudmlyb25tZW50IGlzIGtlcHQgaW50YWN0IChsaWtlIHRoZSBCSU9TCi0gICAgIHZhcmlhYmxlcykuICBIb3BlZnVsbHkgZml4ZWQgcnRsX3BvbGwoKSBvbmNlIGFuZCBmb3IgYWxsLiAgVGhlIHN5bXB0b21zCisgICAgIHZhcmlhYmxlcykuICBIb3BlZnVsbHkgZml4ZWQgcnRsX3BvbGwoKSBvbmNlIGFuZCBmb3IgYWxsLglUaGUgc3ltcHRvbXMKICAgICAgd2VyZSB0aGF0IGlmIEV0aGVyYm9vdCB3YXMgbGVmdCBhdCB0aGUgYm9vdCBtZW51IGZvciBzZXZlcmFsIG1pbnV0ZXMsIHRoZQogICAgICBmaXJzdCBldGhfcG9sbCBmYWlsZWQuICBTZWVtcyBsaWtlIEkgYW0gdGhlIG9ubHkgcGVyc29uIHdobyBkb2VzIHRoaXMuCiAgICAgIEZpcnN0IG9mIGFsbCBJIGZpeGVkIHRoZSBkZWJ1Z2dpbmcgY29kZSBhbmQgdGhlbiBzZXQgb3V0IGZvciBhIGxvbmcgYnVnCkBAIC01MywxOCArNTMsMTggQEAKICAgICAgZHJpdmVyIGFuZCBldmVuIHRoZSBGcmVlQlNEIGRyaXZlciAod2hhdCBhIHBpZWNlIG9mIGNyYXAhKSAtIGFuZAogICAgICBldmVudHVhbGx5IHNwb3R0ZWQgdGhlIG5hc3R5IHRoaW5nOiB0aGUgdHJhbnNtaXQgcm91dGluZSB3YXMgYWNrbm93bGVkZ2luZwogICAgICBlYWNoIGFuZCBldmVyeSBpbnRlcnJ1cHQgcGVuZGluZywgaW5jbHVkaW5nIHRoZSBSeE92ZXJydW4gYW5kIFJ4RklGSU92ZXIKLSAgICAgaW50ZXJydXB0cy4gIFRoaXMgY29uZnVzZWQgdGhlIFJUTDgxMzkgdGhvcm91Z2hseS4gIEl0IGRlc3Ryb3llZCB0aGUKKyAgICAgaW50ZXJydXB0cy4gIFRoaXMgY29uZnVzZWQgdGhlIFJUTDgxMzkgdGhvcm91Z2hseS4JIEl0IGRlc3Ryb3llZCB0aGUKICAgICAgUnggcmluZyBjb250ZW50cyBieSBkdW1waW5nIHRoZSAySyBGSUZPIGNvbnRlbnRzIHJpZ2h0IHdoZXJlIHdlIHdhbnRlZCB0bwogICAgICBnZXQgdGhlIG5leHQgcGFja2V0LiAgT2ggd2VsbCwgd2hhdCBmdW4uCiAKLSAgMTggSmFuIDIwMDAgICBtZGNAdGhpbmd1aW4ub3JnIChNYXJ0eSBDb25ub3IpCisgIDE4IEphbiAyMDAwCW1kY0B0aGluZ3Vpbi5vcmcgKE1hcnR5IENvbm5vcikKICAgICAgRHJhc3RpY2FsbHkgc2ltcGxpZmllZCBlcnJvciBoYW5kbGluZy4gIEJhc2ljYWxseSwgaWYgYW55IGVycm9yCiAgICAgIGluIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24gb2NjdXJzLCB0aGUgY2FyZCBpcyByZXNldC4KICAgICAgQWxzbywgcG9pbnRlZCBhbGwgdHJhbnNtaXQgZGVzY3JpcHRvcnMgdG8gdGhlIHNhbWUgYnVmZmVyIHRvCi0gICAgIHNhdmUgYnVmZmVyIHNwYWNlLiAgVGhpcyBzaG91bGQgZGVjcmVhc2UgZHJpdmVyIHNpemUgYW5kIGF2b2lkCisgICAgIHNhdmUgYnVmZmVyIHNwYWNlLgkgVGhpcyBzaG91bGQgZGVjcmVhc2UgZHJpdmVyIHNpemUgYW5kIGF2b2lkCiAgICAgIGNvcnJ1cHRpb24gYmVjYXVzZSBvZiBleGNlZWRpbmcgMzJLIGR1cmluZyBydW50aW1lLgogCi0gIDI4IEp1bCAxOTk5ICAgKE1hdHRoaWFzIE1laXhuZXIgLSBtZWl4bmVyQHJiZy5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZSkKKyAgMjggSnVsIDE5OTkJKE1hdHRoaWFzIE1laXhuZXIgLSBtZWl4bmVyQHJiZy5pbmZvcm1hdGlrLnR1LWRhcm1zdGFkdC5kZSkKICAgICAgcnRsX3BvbGwgd2FzIHF1aXRlIGJyb2tlbjogaXQgdXNlZCB0aGUgUnhPSyBpbnRlcnJ1cHQgZmxhZyBpbnN0ZWFkCiAgICAgIG9mIHRoZSBSeEJ1ZmZlckVtcHR5IGZsYWcgd2hpY2ggb2Z0ZW4gcmVzdWx0ZWQgaW4gdmVyeSBiYWQKICAgICAgdHJhbnNtaXNzaW9uIHBlcmZvcm1hY2UgLSBiZWxvdyAxa0J5dGVzL3MuCkBAIC03NywxMCArNzcsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHBjaS5oPgogCi0jaWZkZWYgX19NSVBTX18KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pcHNfaW9fcG9ydF9iYXNlID0gMDsKLSNlbmRpZgotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKSAmJiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpICYmIFwKIAlkZWZpbmVkKENPTkZJR19SVEw4MTM5KQogCkBAIC05NSwxMSArOTEsMTEgQEAKIAogLyogUENJIFR1bmluZyBQYXJhbWV0ZXJzCiAgICBUaHJlc2hvbGQgaXMgYnl0ZXMgdHJhbnNmZXJyZWQgdG8gY2hpcCBiZWZvcmUgdHJhbnNtaXNzaW9uIHN0YXJ0cy4gKi8KLSNkZWZpbmUgVFhfRklGT19USFJFU0ggMjU2ICAgICAgLyogSW4gYnl0ZXMsIHJvdW5kZWQgZG93biB0byAzMiBieXRlIHVuaXRzLiAqLwotI2RlZmluZSBSWF9GSUZPX1RIUkVTSCAgNCAgICAgICAvKiBSeCBidWZmZXIgbGV2ZWwgYmVmb3JlIGZpcnN0IFBDSSB4ZmVyLiAgKi8KLSNkZWZpbmUgUlhfRE1BX0JVUlNUICAgIDQgICAgICAgLyogTWF4aW11bSBQQ0kgYnVyc3QsICc0JyBpcyAyNTYgYnl0ZXMgKi8KLSNkZWZpbmUgVFhfRE1BX0JVUlNUICAgIDQgICAgICAgLyogQ2FsY3VsYXRlIGFzIDE2PDx2YWwuICovCi0jZGVmaW5lIE5VTV9UWF9ERVNDICAgICA0ICAgICAgIC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgVFhfRklGT19USFJFU0ggMjU2CS8qIEluIGJ5dGVzLCByb3VuZGVkIGRvd24gdG8gMzIgYnl0ZSB1bml0cy4gKi8KKyNkZWZpbmUgUlhfRklGT19USFJFU0gJNAkvKiBSeCBidWZmZXIgbGV2ZWwgYmVmb3JlIGZpcnN0IFBDSSB4ZmVyLiAgKi8KKyNkZWZpbmUgUlhfRE1BX0JVUlNUCTQJLyogTWF4aW11bSBQQ0kgYnVyc3QsICc0JyBpcyAyNTYgYnl0ZXMgKi8KKyNkZWZpbmUgVFhfRE1BX0JVUlNUCTQJLyogQ2FsY3VsYXRlIGFzIDE2PDx2YWwuICovCisjZGVmaW5lIE5VTV9UWF9ERVNDCTQJLyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBUWF9CVUZfU0laRQlFVEhfRlJBTUVfTEVOCS8qIEZDUyBpcyBhZGRlZCBieSB0aGUgY2hpcCAqLwogI2RlZmluZSBSWF9CVUZfTEVOX0lEWCAwCS8qIDAsIDEsIDIgaXMgYWxsb3dlZCAtIDgsMTYsMzJLIHJ4IGJ1ZmZlciAqLwogI2RlZmluZSBSWF9CVUZfTEVOICg4MTkyIDw8IFJYX0JVRl9MRU5fSURYKQpAQCAtMTA4LDggKzEwNCw4IEBACiAjdW5kZWYgREVCVUdfUlgKIAogI2RlZmluZSBjdXJydGlja3MoKQlnZXRfdGltZXIoMCkKLSNkZWZpbmUgYnVzX3RvX3BoeXMoYSkgIHBjaV9tZW1fdG9fcGh5cygocGNpX2Rldl90KWRldi0+cHJpdiwgYSkKLSNkZWZpbmUgcGh5c190b19idXMoYSkgIHBjaV9waHlzX3RvX21lbSgocGNpX2Rldl90KWRldi0+cHJpdiwgYSkKKyNkZWZpbmUgYnVzX3RvX3BoeXMoYSkJcGNpX21lbV90b19waHlzKChwY2lfZGV2X3QpZGV2LT5wcml2LCBhKQorI2RlZmluZSBwaHlzX3RvX2J1cyhhKQlwY2lfcGh5c190b19tZW0oKHBjaV9kZXZfdClkZXYtPnByaXYsIGEpCiAKIC8qIFN5bWJvbGljIG9mZnNldHMgdG8gcmVnaXN0ZXJzLiAqLwogZW51bSBSVEw4MTM5X3JlZ2lzdGVycyB7CkBAIC0yNzYsMTIgKzI3MiwxMiBAQAogLyogU2VyaWFsIEVFUFJPTSBzZWN0aW9uLiAqLwogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KLSNkZWZpbmUgRUVfU0hJRlRfQ0xLICAgIDB4MDQgICAgLyogRUVQUk9NIHNoaWZ0IGNsb2NrLiAqLwotI2RlZmluZSBFRV9DUwkJMHgwOCAgICAvKiBFRVBST00gY2hpcCBzZWxlY3QuICovCi0jZGVmaW5lIEVFX0RBVEFfV1JJVEUgICAweDAyICAgIC8qIEVFUFJPTSBjaGlwIGRhdGEgaW4uICovCi0jZGVmaW5lIEVFX1dSSVRFXzAgICAgICAweDAwCi0jZGVmaW5lIEVFX1dSSVRFXzEgICAgICAweDAyCi0jZGVmaW5lIEVFX0RBVEFfUkVBRCAgICAweDAxICAgIC8qIEVFUFJPTSBjaGlwIGRhdGEgb3V0LiAqLworI2RlZmluZSBFRV9TSElGVF9DTEsJMHgwNAkvKiBFRVBST00gc2hpZnQgY2xvY2suICovCisjZGVmaW5lIEVFX0NTCQkweDA4CS8qIEVFUFJPTSBjaGlwIHNlbGVjdC4gKi8KKyNkZWZpbmUgRUVfREFUQV9XUklURQkweDAyCS8qIEVFUFJPTSBjaGlwIGRhdGEgaW4uICovCisjZGVmaW5lIEVFX1dSSVRFXzAJMHgwMAorI2RlZmluZSBFRV9XUklURV8xCTB4MDIKKyNkZWZpbmUgRUVfREFUQV9SRUFECTB4MDEJLyogRUVQUk9NIGNoaXAgZGF0YSBvdXQuICovCiAjZGVmaW5lIEVFX0VOQgkJKDB4ODAgfCBFRV9DUykKIAogLyoKQEAgLTI4OSwxMiArMjg1LDEyIEBACiAJTm8gZXh0cmEgZGVsYXkgaXMgbmVlZGVkIHdpdGggMzNNaHogUENJLCBidXQgNjZNaHogbWF5IGNoYW5nZSB0aGlzLgogKi8KIAotI2RlZmluZSBlZXByb21fZGVsYXkoKSAgaW5sKGVlX2FkZHIpCisjZGVmaW5lIGVlcHJvbV9kZWxheSgpCWlubChlZV9hZGRyKQogCiAvKiBUaGUgRUVQUk9NIGNvbW1hbmRzIGluY2x1ZGUgdGhlIGFsd2F5LXNldCBsZWFkaW5nIGJpdC4gKi8KLSNkZWZpbmUgRUVfV1JJVEVfQ01EICAgICg1KQotI2RlZmluZSBFRV9SRUFEX0NNRCAgICAgKDYpCi0jZGVmaW5lIEVFX0VSQVNFX0NNRCAgICAoNykKKyNkZWZpbmUgRUVfV1JJVEVfQ01ECSg1KQorI2RlZmluZSBFRV9SRUFEX0NNRAkoNikKKyNkZWZpbmUgRUVfRVJBU0VfQ01ECSg3KQogCiBzdGF0aWMgaW50IHJlYWRfZWVwcm9tKGludCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKQogewpAQCAtMzkwLDcgKzM4Niw3IEBACiAKIAkvKiBJZiB3ZSBhZGQgbXVsdGljYXN0IHN1cHBvcnQsIHRoZSBNQVIwIHJlZ2lzdGVyIHdvdWxkIGhhdmUgdG8gYmUKIAkgKiBpbml0aWFsaXplZCB0byAweGZmZmZmZmZmZmZmZmZmZmYgKHR3byAzMiBiaXQgYWNjZXNzZXMpLiAgRXRoZXJib290Ci0JICogb25seSBuZWVkcyBicm9hZGNhc3QgKGZvciBBUlAvUkFSUC9CT09UUC9ESENQKSBhbmQgdW5pY2FzdC4gICovCisJICogb25seSBuZWVkcyBicm9hZGNhc3QgKGZvciBBUlAvUkFSUC9CT09UUC9ESENQKSBhbmQgdW5pY2FzdC4JKi8KIAogCW91dGIoQ21kUnhFbmIgfCBDbWRUeEVuYiwgaW9hZGRyICsgQ2hpcENtZCk7CiAKQEAgLTQzNiw3ICs0MzIsNyBAQAogCQlzdGF0dXMgPSBpbncoaW9hZGRyICsgSW50clN0YXR1cyk7CiAJCS8qIE9ubHkgYWNrbmxvd2xlZGdlIGludGVycnVwdCBzb3VyY2VzIHdlIGNhbiBwcm9wZXJseSBoYW5kbGUKIAkJICogaGVyZSAtIHRoZSBSeE92ZXJmbG93L1J4RklGT092ZXIgTVVTVCBiZSBoYW5kbGVkIGluIHRoZQotCQkgKiBydGxfcG9sbCgpIGZ1bmN0aW9uLiAgKi8KKwkJICogcnRsX3BvbGwoKSBmdW5jdGlvbi4JICovCiAJCW91dHcoc3RhdHVzICYgKFR4T0sgfCBUeEVyciB8IFBDSUVyciksIGlvYWRkciArIEludHJTdGF0dXMpOwogCQlpZiAoKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIgfCBQQ0lFcnIpKSAhPSAwKSBicmVhazsKIAl9IHdoaWxlIChjdXJydGlja3MoKSA8IHRvKTsKQEAgLTQ5MCw3ICs0ODYsNyBAQAogCWlmICgocnhfc3RhdHVzICYgKFJ4QmFkU3ltYm9sfFJ4UnVudHxSeFRvb0xvbmd8UnhDUkNFcnJ8UnhCYWRBbGlnbikpIHx8CiAJICAgIChyeF9zaXplIDwgRVRIX1pMRU4pIHx8IChyeF9zaXplID4gRVRIX0ZSQU1FX0xFTiArIDQpKSB7CiAJCXByaW50ZigicnggZXJyb3IgJWhYXG4iLCByeF9zdGF0dXMpOwotCQlydGxfcmVzZXQoZGV2KTsJLyogdGhpcyBjbGVhcnMgYWxsIGludGVycnVwdHMgc3RpbGwgcGVuZGluZyAqLworCQlydGxfcmVzZXQoZGV2KTsgLyogdGhpcyBjbGVhcnMgYWxsIGludGVycnVwdHMgc3RpbGwgcGVuZGluZyAqLwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUyNyw2ICs1MjMsOCBAQAogewogCWludCBpOwogCisJaW9hZGRyID0gZGV2LT5pb2Jhc2U7CisKIAkvKiByZXNldCB0aGUgY2hpcCAqLwogCW91dGIoQ21kUmVzZXQsIGlvYWRkciArIENoaXBDbWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdS1ib290LWFybS5oIGIvaW5jbHVkZS9hc20tYXJtL3UtYm9vdC1hcm0uaAppbmRleCA0YzkyYjFmLi5kNWRiZDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdS1ib290LWFybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91LWJvb3QtYXJtLmgKQEAgLTQzLDYgKzQzLDggQEAKIC8qIGJvYXJkLy4uLi8uLi4gKi8KIGludAlib2FyZF9pbml0KHZvaWQpOwogaW50CWRyYW1faW5pdCAodm9pZCk7Cit2b2lkCXNldHVwX3NlcmlhbF90YWcgKHN0cnVjdCB0YWcgKipwYXJhbXMpOwordm9pZAlzZXR1cF9yZXZpc2lvbl90YWcgKHN0cnVjdCB0YWcgKipwYXJhbXMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEhlcmUgaXMgYSBsaXN0IG9mIHNvbWUgcHJvdG90eXBlcyB3aGljaCBhcmUgaW5jb21wYXRpYmxlIHRvCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCA3M2E1YTJlLi42YjkyNTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTE4NSw2ICsxODUsNyBAQAogdm9pZCAgICBzZXRlbnYgICAgICAgKGNoYXIgKiwgY2hhciAqKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDICovCiAjaWZkZWYgQ09ORklHX0FSTQorIyBpbmNsdWRlIDxhc20vc2V0dXAuaD4KICMgaW5jbHVkZSA8YXNtL3UtYm9vdC1hcm0uaD4JLyogQVJNIHZlcnNpb24gdG8gYmUgZml4ZWQhICovCiAjZW5kaWYgLyogQ09ORklHX0FSTSAqLwogI2lmZGVmIENPTkZJR19JMzg2CQkvKiB4ODYgdmVyc2lvbiB0byBiZSBmaXhlZCEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QQVRJLmggYi9pbmNsdWRlL2NvbmZpZ3MvUEFUSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzc4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUEFUSS5oCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBEZW5pcyBQZXRlciBkLnBldGVyQG1wbC5jaAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sCisgKi8KKworLyoKKyAqIEZpbGU6CQlQQVRJLmgKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworCisjZGVmaW5lIENPTkZJR19NUEM1NTUJCTEJCS8qIFRoaXMgaXMgYW4gTVBDNTU1IENQVQkJKi8KKyNkZWZpbmUgQ09ORklHX1BBVEkJCTEJCS8qIC4uLk9uIGEgUEFUSSBib2FyZCAJKi8KKy8qIFNlcmlhbCBDb25zb2xlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUJQ09ORklHXzV4eF9DT05TX1NDSTEKKyN1bmRlZglDT05GSUdfNXh4X0NPTlNfU0NJMgorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMAorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9MT0FEQiB8IENGR19DTURfUkVHSU5GTyB8IAkJXAorCQkJCSBDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9MT0FEUyB8IENGR19DTURfRU5WIHwgIENGR19DTURfUkVHSU5GTwl8IAkJXAorCQkJCSBDRkdfQ01EX0JESSB8IENGR19DTURfQ09OU09MRSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9CU1AgfAlcCisJCQkJIENGR19DTURfSU1JIHwgQ0ZHX0NNRF9FRVBST00gIHwgQ0ZHX0NNRF9JUlEgfCBDRkdfQ01EX01JU0MgXAorKQorCisvKiBUaGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNpZiAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEJCS8qIGF1dG9ib290IGRpc2FibGVkCQkJKi8KKyNlbHNlCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzCQkqLworI2VuZGlmCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiIiAJLyogYXV0b2Jvb3QgY29tbWFuZAkJCSovCisKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkiIgkJLyogKi8KKworI2RlZmluZSBDT05GSUdfV0FUQ0hET0cJCQkJLyogdHVybiBvbiBwbGF0Zm9ybSBzcGVjaWZpYyB3YXRjaGRvZyAJKi8KKworLyojZGVmaW5lIENPTkZJR19TVEFUVVNfTEVECTEJCSovLyogRW5hYmxlIHN0YXR1cyBsZWQgKi8KKworI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCQkvKiBFY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfQ09OU09MRV9JU19JTl9FTlYJLyogc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSBpbiBldmlyb25tZW50ICovCisjZGVmaW5lIENPTkZJR19QUkVCT09UCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZQlDRkdfUFJPTVBUCQkicGF0aT0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZQlDRkdfQ0JTSVpFCQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2Vsc2UKKyNkZWZpbmUJQ0ZHX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDRkdfTUFYQVJHUwkJMTYJICAgICAgIC8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENGR19CQVJHU0laRQkJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwMDAxMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCQkqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MDBBMDAwMDAJLyogMTAgTUIgaW4gU1JBTQkJCSovCisKKyNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJCSovCisKKyNkZWZpbmUJQ0ZHX0haCQkJMTAwMAkJLyogRGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcwkqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMTI1MDAwMCB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMYXN0IFN0YWdlIEluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ09ORklHX0xBU1RfU1RBR0VfSU5JVAorCisvKgorICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKKyAqLworCisvKgorICogSW50ZXJuYWwgTWVtb3J5IE1hcHBlZCAoVGhpcyBpcyBub3QgdGhlIElNTVIgY29udGVudCkKKyAqLworI2RlZmluZSBDRkdfSU1NUgkJMHgwMUMwMDAwMAkJCQkvKiBQaHlzaWNhbCBzdGFydCBhZHJlc3Mgb2YgaW50ZXJuYWwgbWVtb3J5IG1hcCAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJKENGR19JTU1SICsgMHgwMDNmOTgwMCkgICAgICAJCS8qIFBoeXNpY2FsIHN0YXJ0IGFkcmVzcyBvZiBpbnRlcm5hbCBNUEM1NTUgd3JpdGFibGUgUkFNICovCisjZGVmaW5lCUNGR19JTklUX1JBTV9FTkQJKENGR19JTU1SICsgMHgwMDNmZmZmZikgICAgICAgCQkvKiBQaHlzaWNhbCBlbmQgYWRyZXNzIG9mIGludGVybmFsIE1QQzU1NSB1c2VkIFJBTSBhcmVhCSovCisjZGVmaW5lCUNGR19HQkxfREFUQV9TSVpFCTEyOAkJCQkJLyogU2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBnbG9iYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCSgoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19JTklUX1JBTV9BRERSKSAtIENGR19HQkxfREFUQV9TSVpFKSAvKiBPZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHJhbSAqLworI2RlZmluZQlDRkdfSU5JVF9TUF9BRERSCShDRkdfSU1NUiArIDB4MDNmYTAwMCkJCQkvKiBQaHlzaWNhbCBzdGFydCBhZHJlc3Mgb2YgaW5pdGFsIHN0YWNrICovCisvKgorICogU3RhcnQgYWRkcmVzc2VzIGZvciB0aGUgZmluYWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24KKyAqIFBsZWFzZSBub3RlIHRoYXQgQ0ZHX1NEUkFNX0JBU0UgX211c3RfIHN0YXJ0IGF0IDAKKyAqLworI2RlZmluZQlDRkdfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAkvKiBNb25pdG9yIHdvbid0IGNoYW5nZSBtZW1vcnkgbWFwIAkJCSovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweGZmQzAwMDAwCS8qIEV4dGVybmFsIGZsYXNoICovCisjZGVmaW5lIFBDSV9CQVNFCQkweDAzMDAwMDAwCS8qIFBDSSBCYXNlIChDUzIpICovCisjZGVmaW5lIFBDSV9DT05GSUdfQkFTRQkJMHgwNDAwMDAwMAkvKiBQQ0kgJiBQTEQgIChDUzMpICovCisjZGVmaW5lIFBMRF9DT05GSUdfQkFTRQkJMHgwNDAwMTAwMAkvKiBQTEQgIChDUzMpICovCisKKyNkZWZpbmUJQ0ZHX01PTklUT1JfQkFTRQkweEZGRjAwMDAwCisvKiBDRkdfRkxBU0hfQkFTRQkqLyAvKiBURVhUX0JBU0UgaXMgZGVmaW5lZCBpbiB0aGUgYm9hcmQgY29uZmlnLm1rIGZpbGUuIAkqLworCQkJCQkJLyogVGhpcyBhZHJlc3MgaXMgZ2l2ZW4gdG8gdGhlIGxpbmtlciB3aXRoIC1UdGV4dCB0byAJKi8KKwkJCQkJCS8qIGxvY2F0ZSB0aGUgdGV4dCBzZWN0aW9uIGF0IHRoaXMgYWRyZXNzLiAJCSovCisjZGVmaW5lCUNGR19NT05JVE9SX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAxOTIga0IgZm9yIE1vbml0b3IJCQkJKi8KKyNkZWZpbmUJQ0ZHX01BTExPQ19MRU4JCSgxMjggPDwgMTApCS8qIFJlc2VydmUgMTI4IGtCIGZvciBtYWxsb2MoKQkJCQkqLworCisKKworI2RlZmluZSBDRkdfUkVTRVRfQUREUkVTUwkoUExEX0NPTkZJR19CQVNFICsgMHgxMCkJIC8qIEFkcmVzcyB3aGljaCBjYXVzZXMgcmVzZXQgKi8KKworLyoKKyAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKKyAqIGhhdmUgdG8gYmUgaW4gdGhlIGZpcnN0IDggTUIgb2YgbWVtb3J5LCBzaW5jZSB0aGlzIGlzCisgKiB0aGUgbWF4aW11bSBtYXBwZWQgYnkgdGhlIExpbnV4IGtlcm5lbCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgKi8KKyNkZWZpbmUJQ0ZHX0JPT1RNQVBTWgkJKDggPDwgMjApCS8qIEluaXRpYWwgTWVtb3J5IG1hcCBmb3IgTGludXgJCSovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkxBU0ggb3JnYW5pemF0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMQkJLyogTWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CQkvKiBNYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgCSovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTE4MDAwMAkJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKSAJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNjAwCQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpIAkqLworCisKKyNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9FRVBST00KKyNpZmRlZglDRkdfRU5WX0lTX0lOX0VFUFJPTQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMAorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTIwNDgKKyNlbmRpZgorCisjdW5kZWYgIENGR19FTlZfSVNfSU5fRkxBU0gKKyNpZmRlZglDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lCUNGR19FTlZfU0laRQkJMHgwMDAwMjAwMAkJLyogU2V0IHdob2xlIHNlY3RvciBhcyBlbnYgCQkqLworI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJKCgwIC0gQ0ZHX0ZMQVNIX0JBU0UpIC0gQ0ZHX0VOVl9TSVpFKSAJCS8qIEVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGlzIGFkcmVzcyAJKi8KKyNlbmRpZgorCisKKyNkZWZpbmUgQ09ORklHX1NQSQkJMQorI2RlZmluZSBDRkdfU1BJX0NTX1VTRUQJMHgwOSAvKiBDUzAgYW5kIENTMyBhcmUgdXNlZCAqLworI2RlZmluZSBDRkdfU1BJX0NTX0JBU0UJMHgwOCAvKiBDUzMgaXMgYWN0aXZlIGxvdyAqLworI2RlZmluZSBDRkdfU1BJX0NTX0FDVAkweDAwIC8qIENTMyBpcyBhY3RpdmUgbG93ICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wKKyAqIFNZUENSIGNhbiBvbmx5IGJlIHdyaXR0ZW4gb25jZSBhZnRlciByZXNldCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNXIFdhdGNoZG9nIGZyZWV6ZQorICovCisjdW5kZWYgQ09ORklHX1dBVENIRE9HCisjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCisjZGVmaW5lIENGR19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKKwkJCSBTWVBDUl9TV0UgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCisjZWxzZQorI2RlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgfCBTWVBDUl9CTUUgfCBTWVBDUl9TV0YgfCBcCisJCQkgU1lQQ1JfU1dQKQorI2VuZGlmCS8qIENPTkZJR19XQVRDSERPRyAqLworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDbGVhciBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzLCBJbnRlcnJ1cHQgVGltZXIgZnJlZXppbmcgZW5hYmxlZAorICovCisjZGVmaW5lIENGR19QSVNDUgkoUElTQ1JfUFMgfCBQSVNDUl9QSVRGKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTZXQgY2xvY2sgb3V0cHV0LCB0aW1lYmFzZSBhbmQgUlRDIHNvdXJjZSBhbmQgZGl2aWRlciwKKyAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNvbWUgb3RoZXIgaW50ZXJuYWwgY2xvY2tzCisgKi8KKyNkZWZpbmUgU0NDUl9NQVNLCVNDQ1JfRUJERjAwCisjZGVmaW5lIENGR19TQ0NSCShTQ0NSX1RCUyAgICAgfCBTQ0NSX1JURElWICAgIHwgU0NDUl9SVFNFTCAgICB8IFwKKwkJCSBTQ0NSX0NPTTAxICAgfCBTQ0NSX0RGTkwwMDAgfCBTQ0NSX0RGTkgwMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNJVU1DUiAtIFNJVSBNb2R1bGUgQ29uZmlndXJhdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSBzaG93IGN5Y2xlCisgKi8KKyNkZWZpbmUgQ0ZHX1NJVU1DUgkoU0lVTUNSX0RCR0MwMCB8IFNJVU1DUl9FQVJCIHwgU0lVTUNSX0dQQzAxIHwgU0lVTUNSX01MUkMxMSkgLyogRGlzYWJsZSBkYXRhIHNob3cgY3ljbGUgCSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2V0IGFsbCBiaXRzIHRvIDQwIE1oegorICoKKyAqLworI2RlZmluZSBDRkdfT1NDX0NMSyAgIAkoKHVpbnQpNDAwMDAwMCkgCS8qIE9zY2lsbGF0b3IgY2xvY2sgaXMgNE1IeiAJKi8KKworCisjZGVmaW5lIENGR19QTFBSQ1IJKFBMUFJDUl9NRl85IHwgUExQUkNSX0RJVkZfMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVU1DUiAtIFVJTUIgTW9kdWxlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKyNkZWZpbmUgQ0ZHX1VNQ1IJKFVNQ1JfRlNQRUVEKSAJCS8qIElNQiBjbG9jayBzYW1lIGFzIFUtYnVzIAkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJQ1RSTCAtIEktQnVzIFN1cHBvcnQgQ29udHJvbCBSZWdpc3RlcgorICovCisjZGVmaW5lIENGR19JQ1RSTAkoSUNUUkxfSVNDVF9TRVJfNykgCS8qIFRha2Ugb3V0IG9mIHNlcmlhbGl6ZWQgbW9kZSAJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVVNJVSAtIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVyCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JCShDRkdfRkxBU0hfQkFTRSB8IEJSX1YgfCBCUl9CSSB8IEJSX1BTXzE2IHwgQlJfU0VUQSkKKyNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JCSgweGZmYzAwMDAwKSAvKiBTQ1kgaXMgbm90IHVzZWQgaWYgZXh0ZXJuYWwgVEEgaXMgc2V0ICovCisvKiBTRFJBTSAqLworI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkJKENGR19TRFJBTV9CQVNFIHwgQlJfViB8IEJSX0JJIHwgQlJfUFNfMzIgfCBCUl9TRVRBKQorI2RlZmluZSBDRkdfT1IxX1BSRUxJTQkJKE9SX0FERFJfTUtfRkYpIC8qIFNDWSBpcyBub3QgdXNlZCBpZiBleHRlcm5hbCBUQSBpcyBzZXQgKi8KKy8qIFBDSSAqLworI2RlZmluZSBDRkdfQlIyX1BSRUxJTQkJKFBDSV9CQVNFIHwgQlJfViB8IEJSX1BTXzMyIHwgQlJfU0VUQSkKKyNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JCShPUl9BRERSX01LX0ZGKQorLyogY29uZmlnIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgQ0ZHX0JSM19QUkVMSU0JCShQQ0lfQ09ORklHX0JBU0UgfCBCUl9WIHwgQlJfQkkgfCBCUl9QU18zMiB8IEJSX1NFVEEpCisjZGVmaW5lIENGR19PUjNfUFJFTElNCQkoMHhmZmZmMDAwMCkKKworI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JQ0ZHX0ZMQVNIX0JBU0UJLyogV2UgZG9uJ3QgcmVhbGlnbiB0aGUgZmxhc2gJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogREVSIC0gVGltZXIgRGVjcmVtZW50ZXIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEluaXRpYWxpc2UgdG8gemVybworICovCisjZGVmaW5lIENGR19ERVIJCQkweDAwMDAwMDAwCisKKworLyoKKyAqIEludGVybmFsIERlZmluaXRpb25zCisgKgorICogQm9vdCBGbGFncworICovCisjZGVmaW5lCUJPT1RGTEFHX0NPTEQJMHgwMQkJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNICSovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCisKKworI2RlZmluZSBWRVJTSU9OX1RBRyAicmVsZWFzZWQiCisjZGVmaW5lIENPTkZJR19JU09fU1RSSU5HICJNRVYtMTAwODQtMDAxIgorCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcgIlxuKGMpIDIwMDMgYnkgTVBMIEFHIFN3aXR6ZXJsYW5kLCAiIENPTkZJR19JU09fU1RSSU5HICIgIiBWRVJTSU9OX1RBRworCisjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM1eHguaCBiL2luY2x1ZGUvbXBjNXh4LmgKaW5kZXggMzQ1ZmNhOC4uNzUwOGY2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tcGM1eHguaAorKysgYi9pbmNsdWRlL21wYzV4eC5oCkBAIC03NSw2ICs3NSwxMCBAQAogI2RlZmluZSBTSVVNQ1JfREJQQzAxCTB4MDAwODAwMDAJLyogLSAiIC0JCQkJKi8KICNkZWZpbmUgU0lVTUNSX0RCUEMxMAkweDAwMTAwMDAwCS8qIC0gIiAtCQkJCSovCiAjZGVmaW5lIFNJVU1DUl9EQlBDMTEJMHgwMDE4MDAwMAkvKiAtICIgLQkJCQkqLworI2RlZmluZSBTSVVNQ1JfR1BDMDAJMHgwMDAwMDAwMAkvKiBHZW5lcmFsIFBpbnMgQ29uZmlnIAkJCSovCisjZGVmaW5lIFNJVU1DUl9HUEMwMQkweDAwMDIwMDAwCS8qIEdlbmVyYWwgUGlucyBDb25maWcgCQkJKi8KKyNkZWZpbmUgU0lVTUNSX0dQQzEwCTB4MDAwNDAwMDAJLyogR2VuZXJhbCBQaW5zIENvbmZpZyAJCQkqLworI2RlZmluZSBTSVVNQ1JfR1BDMTEJMHgwMDA2MDAwMAkvKiBHZW5lcmFsIFBpbnMgQ29uZmlnIAkJCSovCiAjZGVmaW5lIFNJVU1DUl9ETEsJMHgwMDAxMDAwMAkvKiBEZWJ1ZyBSZWdpc3RlciBMb2NrCQkJKi8KICNkZWZpbmUgU0lVTUNSX1NDMDAJMHgwMDAwMDAwMAkvKiBNdWx0aSBDaGlwIDMyIGJpdAkJCSovCiAjZGVmaW5lIFNJVU1DUl9TQzAxCTB4MDAwMDQwMDAJLyogTXVpbHQgQ2hpcCAxNiBiaXQJCQkqLwpAQCAtOTgsNiArMTAyLDcgQEAKICAqIFBJU0NSIC0gUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgogICovCiAjZGVmaW5lIFBJU0NSX1BJVEYJKCh1c2hvcnQpMHgwMDAyKQkvKiBQSVQgc3RvcHMgd2hlbiBGUkVFWkUJKi8KKyNkZWZpbmUgUElTQ1JfUFMJMHgwMDgwCQkJLyogUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cwkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIKQEAgLTEwNiwxMSArMTExLDEyIEBACiAjZGVmaW5lIFBMUFJDUl9ESVZGX01TSwkweDAwMDAwMDFmCS8qIERJVkYgbWFzawkJCQkqLwogI2RlZmluZSBQTFBSQ1JfQ1NSQ19NU0sgMHgwMDAwMDQwMAkvKiBDU1JDIG1hc2sJCQkJKi8KICNkZWZpbmUgUExQUkNSX01GX1NISUZUIDB4MDAwMDAwMTQJLyogTXVsdGlwbGljYXRpb24gZmFjdG9yIHNoaWZ0IHZhbHVlCSovCi0jZGVmaW5lIFBMUFJDUl9ESVZGXzAgICAweDAwOTAwMDAwCS8qIERpdmlzaW9uIGZhY3RvciAwCQkJKi8KLSNkZWZpbmUgUExQUkNSX01GXzkgICAgIDB4MDAwMDAwMDAJLyogTXVsaXRpcGxpYWN0aW9uIGZhY3RvciA5CQkqLworI2RlZmluZSBQTFBSQ1JfRElWRl8wICAgMHgwMDAwMDAwMAkvKiBEaXZpc2lvbiBmYWN0b3IgMAkJCSovCisjZGVmaW5lIFBMUFJDUl9NRl85ICAgICAweDAwOTAwMDAwCS8qIE11bGl0aXBsaWFjdGlvbiBmYWN0b3IgOQkJKi8KICNkZWZpbmUgUExQUkNSX1RFWFBTCTB4MDAwMDQwMDAJLyogVEVYUCBTdGF0dXMJCQkJKi8KICNkZWZpbmUgUExQUkNSX1RNSVNUCTB4MDAwMDEwMDAJLyogVGltZXJzIEludGVycnVwdCBTdGF0dXMJCSovCiAjZGVmaW5lIFBMUFJDUl9DU1IJMHgwMDAwMDA4MAkvKiBDaGVza1N0b3AgUmVzZXQgdmFsdWUJCSovCisjZGVmaW5lIFBMUFJDUl9TUExTUwkweDAwMDA4MDAwCS8qIFNQTEwgTG9jayBTdGF0dXMgU3RpY2t5IGJpdAkJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgpAQCAtMTI0LDYgKzEzMCw3IEBACiAjZGVmaW5lIFNDQ1JfVEJTCTB4MDIwMDAwMDAJLyogVGltZSBCYXNlIFNvdXJjZQkJCSovCiAjZGVmaW5lIFNDQ1JfUlRESVYJMHgwMTAwMDAwMAkvKiBSVEMgQ2xvY2sgRGl2aWRlIAkJCSovCiAjZGVmaW5lIFNDQ1JfQ09NMDAJMHgwMDAwMDAwMAkvKiBmdWxsIHN0cmVuZ3RoIENMS09VVCBvdXRwdXQgYnVmZmVyCSovCisjZGVmaW5lIFNDQ1JfQ09NMDEJMHgyMDAwMDAwMAkvKiBoYWxmIHN0cmVuZ3RoIENMS09VVCBvdXRwdXQgYnVmZmVyCSovCiAjZGVmaW5lIFNDQ1JfREZOTDAwMAkweDAwMDAwMDAwCS8qIERpdmlzaW9uIGJ5IDIgKGRlZmF1bHQgPSBtaW5pbXVtKQkqLwogI2RlZmluZSBTQ0NSX0RGTkgwMDAJMHgwMDAwMDAwMAkvKiBEaXZpc2lvbiBieSAxIChkZWZhdWx0ID0gbWluaW11bSkJKi8KIApAQCAtMTM2LDYgKzE0Myw3IEBACiAjZGVmaW5lIEJSX1BTXzE2CTB4MDAwMDA4MDAJLyogMTYgYml0IHBvcnQgc2l6ZSAJCQkqLwogI2RlZmluZSBCUl9QU18zMgkweDAwMDAwMDAwCS8qIDMyIGJpdCBwb3J0IHNpemUgCQkJKi8KICNkZWZpbmUgQlJfTEJESVIJMHgwMDAwMDAwOAkvKiBMYXRlIGJ1cnN0IGRhdGEgaW4gcHJvZ2VzcwkJKi8KKyNkZWZpbmUgQlJfU0VUQQkJMHgwMDAwMDAwNAkvKiBFeHRlcm5hbCBEYXRhIEFja25vd2xlZGdlCQkqLwogI2RlZmluZSBPUl9TQ1lfMwkweDAwMDAwMDMwCS8qIDMgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLwogI2RlZmluZSBPUl9TQ1lfMQkweDAwMDAwMDAwCS8qIDEgY2xvY2sgY3ljbGUgd2FpdCBzdGF0ZQkJKi8KICNkZWZpbmUgT1JfU0NZXzgJMHgwMDAwMDA4MAkvKiA4IGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KQEAgLTE0Myw3ICsxNTEsNyBAQAogI2RlZmluZSBPUl9CU0NZCQkweDAwMDAwMDYwCS8qIEJ1cnN0IGJlYXRzIGxlbmd0aCBpbiBjbG9ja3MJCSovCiAjZGVmaW5lIE9SX0FDU18xMAkweDAwMDAwNjAwCS8qIEFkcmVzcyB0byBjaGlwLXNlbGVjdCBzZXR1cAkJKi8KICNkZWZpbmUgT1JfQ1NOVAkJMHgwMDAwMDgwMAkvKiBDaGlwLXNlbGVjdCBuZWdvdGF0aW9uIHRpbWUJCSovCi0jZGVmaW5lIE9SX0VUSFIJCTB4MDAwMDAwMDAJLyogRXh0ZW5kZWQgaG9sZCB0aW1lIG9uIHJlYWQJCSovCisjZGVmaW5lIE9SX0VUSFIJCTB4MDAwMDAxMDAJLyogRXh0ZW5kZWQgaG9sZCB0aW1lIG9uIHJlYWQJCSovCiAjZGVmaW5lIE9SX0FERFJfTUtfRkYJMHhGRjAwMDAwMAogI2RlZmluZSBPUl9BRERSX01LX0ZGRkYJMHhGRkZGMDAwMAogCmRpZmYgLS1naXQgYS9saWJfYXJtL2FybWxpbnV4LmMgYi9saWJfYXJtL2FybWxpbnV4LmMKaW5kZXggMTk2ODBiNS4uZTk2ZWE4MSAxMDA2NDQKLS0tIGEvbGliX2FybS9hcm1saW51eC5jCisrKyBiL2xpYl9hcm0vYXJtbGludXguYwpAQCAtMzAsMTYgKzMwLDE0IEBACiAjaW5jbHVkZSA8ZGF0YWZsYXNoLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2RlZmluZSB0YWdfc2l6ZSh0eXBlKSAgKChzaXplb2Yoc3RydWN0IHRhZ19oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCB0eXBlKSkgPj4gMikKLSNkZWZpbmUgdGFnX25leHQodCkgICAgICgoc3RydWN0IHRhZyAqKSgodTMyICopKHQpICsgKHQpLT5oZHIuc2l6ZSkpCi0KIC8qY21kX2Jvb3QuYyovCiBleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CiAKICNpZiBkZWZpbmVkIChDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MpIHx8IFwKICAgICBkZWZpbmVkIChDT05GSUdfQ01ETElORV9UQUcpIHx8IFwKICAgICBkZWZpbmVkIChDT05GSUdfSU5JVFJEX1RBRykgfHwgXAorICAgIGRlZmluZWQgKENPTkZJR19TRVJJQUxfVEFHKSB8fCBcCisgICAgZGVmaW5lZCAoQ09ORklHX1JFVklTSU9OX1RBRykgfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19WRkQpCiBzdGF0aWMgdm9pZCBzZXR1cF9zdGFydF90YWcgKGJkX3QgKmJkKTsKIApAQCAtMjIxLDggKzIxOSwxNiBAQAogI2lmIGRlZmluZWQgKENPTkZJR19TRVRVUF9NRU1PUllfVEFHUykgfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19DTURMSU5FX1RBRykgfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19JTklUUkRfVEFHKSB8fCBcCisgICAgZGVmaW5lZCAoQ09ORklHX1NFUklBTF9UQUcpIHx8IFwKKyAgICBkZWZpbmVkIChDT05GSUdfUkVWSVNJT05fVEFHKSB8fCBcCiAgICAgZGVmaW5lZCAoQ09ORklHX1ZGRCkKIAlzZXR1cF9zdGFydF90YWcgKGJkKTsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1RBRworCXNldHVwX3NlcmlhbF90YWcgKCZwYXJhbXMpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1JFVklTSU9OX1RBRworCXNldHVwX3JldmlzaW9uX3RhZyAoJnBhcmFtcyk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKIAlzZXR1cF9tZW1vcnlfdGFncyAoYmQpOwogI2VuZGlmCkBAIC0yNTEsNiArMjU3LDggQEAKICNpZiBkZWZpbmVkIChDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MpIHx8IFwKICAgICBkZWZpbmVkIChDT05GSUdfQ01ETElORV9UQUcpIHx8IFwKICAgICBkZWZpbmVkIChDT05GSUdfSU5JVFJEX1RBRykgfHwgXAorICAgIGRlZmluZWQgKENPTkZJR19TRVJJQUxfVEFHKSB8fCBcCisgICAgZGVmaW5lZCAoQ09ORklHX1JFVklTSU9OX1RBRykgfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19WRkQpCiBzdGF0aWMgdm9pZCBzZXR1cF9zdGFydF90YWcgKGJkX3QgKmJkKQogewpAQCAtMzA4LDEwICszMTYsNiBAQAogfQogCiAKLSNpZm5kZWYgQVRBR19JTklUUkQyCi0jZGVmaW5lIEFUQUdfSU5JVFJEMiAgICAweDU0NDIwMDA1Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19JTklUUkRfVEFHCiBzdGF0aWMgdm9pZCBzZXR1cF9pbml0cmRfdGFnIChiZF90ICpiZCwgdWxvbmcgaW5pdHJkX3N0YXJ0LCB1bG9uZyBpbml0cmRfZW5kKQogewo=