ZGlmZiAtLWdpdCBhL2NwdS9pMzg2L01ha2VmaWxlIGIvY3B1L2kzODYvTWFrZWZpbGUKaW5kZXggNzA2N2EwNi4uYzQ0NDEyYSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvTWFrZWZpbGUKKysrIGIvY3B1L2kzODYvTWFrZWZpbGUKQEAgLTI1LDEwICsyNSwxMCBAQAogCiBMSUIJPSBsaWIkKENQVSkuYQogCi1TVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8gCi1DT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyB0aW1lci5vIHNjNTIwLm8gCitTVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8KK0NPQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vIHRpbWVyLm8gc2M1MjAubwogQU9CSlMJPSBzYzUyMF9hc20ubwotCQorCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChDT0JKUykgJChBT0JKUykKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2NvbmZpZy5tayBiL2NwdS9pMzg2L2NvbmZpZy5tawppbmRleCBjN2NmMTUxLi4xNmExNjBkIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jb25maWcubWsKKysrIGIvY3B1L2kzODYvY29uZmlnLm1rCkBAIC0yMSw2ICsyMSw2IEBACiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCiAKLVBMQVRGT1JNX1JFTEZMQUdTICs9IAorUExBVEZPUk1fUkVMRkxBR1MgKz0KIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWkzODYgLVdlcnJvcgpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvY3B1LmMgYi9jcHUvaTM4Ni9jcHUuYwppbmRleCAzYzY3YzEyLi5mMjRlNGJhIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jcHUuYworKysgYi9jcHUvaTM4Ni9jcHUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CkBAIC00MCwxMSArNDAsMTEgQEAKIHsKIAkvKiBpbml0aWFsaXplIEZQVSwgcmVzZXQgRU0sIHNldCBNUCBhbmQgTkUgKi8KIAlhc20gKCJmbmluaXRcbiIgXAotICAgICAgICAgICAgICJtb3ZsICVjcjAsICVlYXhcbiIgXAotICAgICAgICAgICAgICJhbmRsICR+MHg0LCAlZWF4XG4iIFwKLSAgICAgICAgICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCi0gICAgICAgICAgICAgIm1vdmwgJWVheCwgJWNyMFxuIiApOwotCQorCSAgICAgIm1vdmwgJWNyMCwgJWVheFxuIiBcCisJICAgICAiYW5kbCAkfjB4NCwgJWVheFxuIiBcCisJICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCisJICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjYsNCArNjYsMyBAQAogCWFzbSgid2JpbnZkXG4iKTsKIAlyZXR1cm47CiB9Ci0KZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2ludGVycnVwdHMuYyBiL2NwdS9pMzg2L2ludGVycnVwdHMuYwppbmRleCA2MTRkNDA4Li44NDgyNWFlIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2kzODYvaW50ZXJydXB0cy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL2libXBjLmg+CiAKIAotCiBzdHJ1Y3QgaWR0X2VudHJ5IHsKIAl1MTYJYmFzZV9sb3c7CiAJdTE2CXNlbGVjdG9yOwpAQCAtNDQsNyArNDMsNyBAQAogCiAjZGVmaW5lIE1BWF9JUlEgMTYKIAotdHlwZWRlZiBzdHJ1Y3QgaXJxX2hhbmRsZXIgeyAKK3R5cGVkZWYgc3RydWN0IGlycV9oYW5kbGVyIHsKIAlzdHJ1Y3QgaXJxX2hhbmRsZXIgKm5leHQ7CiAJaW50ZXJydXB0X2hhbmRsZXJfdCogaXNyX2Z1bmM7CiAJdm9pZCAqaXNyX2RhdGE7CkBAIC02MCwyNyArNTksMjYgQEAKIHN0YXRpYyBpcnFfZGVzY190IGlycV90YWJsZVtNQVhfSVJRXTsKIAogCi0KIGFzbSgiLmdsb2JsIHN5c2NhbGxfZW50cnlcbiIgXAotICAgICAgICAic3lzY2FsbF9lbnRyeTpcbiIgXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIGFuZCBzZWdtZW50IHRoYXQgdGhlIElOVCBpbnN0cnVjdGlvbiBwdXNoZWQgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIG9uIHRvIHRoZSBzdGFjayAqLyBcCi0gICAgICAgICJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKLSAgICAgICAgIm1vdmwgICBzeXNjYWxsX3RibCwgJWVheFxuIiAvKiBsb2FkIHN0YXJ0IG9mIHN5c2NhbGwgdGFibGUgKi8gXAotICAgICAgICAiY21wbCAgICQoMTEtMSksICVlY3hcbiIgIC8qIEZpeE1lOiBmaW5kIGEgd2F5IHRvIHVzZSBOUl9TWVNDQUxMUyBtYWNybyBoZXJlICovIFwKLSAgICAgICAgImphICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJtb3ZsICAgKCVlYXgsICVlY3gsIDQpLCAlZWF4XG4iIC8qIGxvYWQgdGhlIGhhbmRsZXIgb2YgdGhlIHN5c2NhbGwqLyBcCi0gICAgICAgICJ0ZXN0ICAgJWVheCwgJWVheFxuIiAvKiB0ZXN0IGZvciBudWxsICovIFwKLSAgICAgICAgImplICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJzdGkgICAgXG4iIFwKLSAgICAgICAgImptcCAgICAqJWVheFxuIiBcCisJInN5c2NhbGxfZW50cnk6XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAorCSJwb3BsICAgJWVieFxuIiAgICAgICAgLyogYW5kIHNlZ21lbnQgdGhhdCB0aGUgSU5UIGluc3RydWN0aW9uIHB1c2hlZCAqLyBcCisJInBvcGwgICAlZWJ4XG4iICAgICAgICAvKiBvbiB0byB0aGUgc3RhY2sgKi8gXAorCSJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKKwkibW92bCAgIHN5c2NhbGxfdGJsLCAlZWF4XG4iIC8qIGxvYWQgc3RhcnQgb2Ygc3lzY2FsbCB0YWJsZSAqLyBcCisJImNtcGwgICAkKDExLTEpLCAlZWN4XG4iICAvKiBGaXhNZTogZmluZCBhIHdheSB0byB1c2UgTlJfU1lTQ0FMTFMgbWFjcm8gaGVyZSAqLyBcCisJImphICAgICBiYWRfc3lzY2FsbFxuIiBcCisJIm1vdmwgICAoJWVheCwgJWVjeCwgNCksICVlYXhcbiIgLyogbG9hZCB0aGUgaGFuZGxlciBvZiB0aGUgc3lzY2FsbCovIFwKKwkidGVzdCAgICVlYXgsICVlYXhcbiIgLyogdGVzdCBmb3IgbnVsbCAqLyBcCisJImplICAgICBiYWRfc3lzY2FsbFxuIiBcCisJInBvcGwgICAlZWN4XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgXAorCSJzdGkgICAgXG4iIFwKKwkiam1wICAgIColZWF4XG4iIFwKICJiYWRfc3lzY2FsbDogbW92bCAkMHhmZmZmZmZmZiwgJWVheFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJyZXQiKTsKKwkicG9wbCAgICVlY3hcbiIgXAorCSJwb3BsICAgJWVieFxuIiBcCisJInJldCIpOwogCiB2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3lzY2FsbF9lbnRyeSh2b2lkKTsKIApAQCAtMTA0LDcgKzEwMiw3IEBACiAJCSAgICAicHVzaGEgXG4iIFwKIAkJICAgICJwdXNobCAkIiN4IlxuIiBcCiAJCSAgICAicHVzaGwgJGlycV9yZXR1cm5cbiIgXAotICAgICAgICAgICAgICAgICAgICAiam1wICAgZG9faXJxXG4iKTsgXAorCQkgICAgImptcCAgIGRvX2lycVxuIik7IFwKIAl2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaXJxXyMjeCh2b2lkKQogCiAjZGVmaW5lIERFQ0xBUkVfRVhDRVBUSU9OKHgsIGYpIFwKQEAgLTE3MywyMCArMTcxLDIwIEBACiBERUNMQVJFX0lOVEVSUlVQVCgxMyk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNCk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNSk7Ci0gIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOyAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOwogYXNtICgiZGVmYXVsdF9pc3I6IGlyZXRcbiIpOwogCi12b2lkIGRpc2FibGVfaXJxKGludCBpcnEpIAordm9pZCBkaXNhYmxlX2lycShpbnQgaXJxKQogewogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQogCWlycV90YWJsZVtpcnFdLnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCisKIH0KIAotdm9pZCBlbmFibGVfaXJxKGludCBpcnEpIAordm9pZCBlbmFibGVfaXJxKGludCBpcnEpCiB7CiAJaWYgKGlycSA+PSBNQVhfSVJRKSB7CiAJCXJldHVybjsKQEAgLTE5OCw3ICsxOTYsNyBAQAogc3RhdGljIHZvaWQgdW5tYXNrX2lycShpbnQgaXJxKQogewogCWludCBpbXJfcG9ydDsKLQkKKwogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQpAQCAtMjA3LDcgKzIwNSw3IEBACiAJfSBlbHNlIHsKIAkJaW1yX3BvcnQgPSBNQVNURVJfUElDICsgSU1SOwogCX0KLQkKKwogCW91dGIoaW5iKGltcl9wb3J0KSZ+KDE8PChpcnEmNykpLCBpbXJfcG9ydCk7CiB9CiAKQEAgLTIxNiw3ICsyMTQsNyBAQAogc3RhdGljIHZvaWQgbWFza19pcnEoaW50IGlycSkKIHsKIAlpbnQgaW1yX3BvcnQ7Ci0JCisKIAlpZiAoaXJxID49IE1BWF9JUlEpIHsKIAkJcmV0dXJuOwogCX0KQEAgLTIyNSw4ICsyMjMsOCBAQAogCX0gZWxzZSB7CiAJCWltcl9wb3J0ID0gTUFTVEVSX1BJQyArIElNUjsKIAl9Ci0JCi0Jb3V0YihpbmIoaW1yX3BvcnQpfCgxPDwoaXJxJjcpKSwgaW1yX3BvcnQpOyAKKworCW91dGIoaW5iKGltcl9wb3J0KXwoMTw8KGlycSY3KSksIGltcl9wb3J0KTsKIH0KIAogCkBAIC0yMzgsMTEwICsyMzYsMTEwIEBACiAJaWYgKGlycSA+IDcpIHsKIAkJb3V0YihPQ1cyX1NFT0l8KGlycSY3KSwgU0xBVkVfUElDICsgT0NXMik7CiAJCWlycSA9IFNFT0lfSVIyOyAgICAgICAgICAgICAgIC8qIGFsc28gZG8gSVIyIG9uIG1hc3RlciAqLwotCX0gCisJfQogCW91dGIoT0NXMl9TRU9JfGlycSwgTUFTVEVSX1BJQyArIE9DVzIpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZG9faXJxKGludCBpcnEpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvX2lycShpbnQgaXJxKQogewotCQorCiAJbWFza19pcnEoaXJxKTsKLQkKKwogCWlmIChpcnFfdGFibGVbaXJxXS5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKIAkJdW5tYXNrX2lycShpcnEpOwogCQlzcGVjaWZpY19lb2koaXJxKTsKIAkJcmV0dXJuOwogCX0KLQkKLQkKKworCiAJaWYgKE5VTEwgIT0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcikgewogCQlpcnFfaGFuZGxlcl90ICpoYW5kbGVyOwotCQlmb3IgKGhhbmRsZXIgPSBpcnFfdGFibGVbaXJxXS5oYW5kbGVyOyAKKwkJZm9yIChoYW5kbGVyID0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcjsKIAkJICAgICBOVUxMIT0gaGFuZGxlcjsgaGFuZGxlciA9IGhhbmRsZXItPm5leHQpIHsKIAkJCWhhbmRsZXItPmlzcl9mdW5jKGhhbmRsZXItPmlzcl9kYXRhKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICgoaXJxICYgNykgIT0gNykgewkJCQkKKwkJaWYgKChpcnEgJiA3KSAhPSA3KSB7CiAJCQlwcmludGYoIlNwdXJpb3VzIGlycSAlZFxuIiwgaXJxKTsKIAkJfQotCX0JCQorCX0KIAl1bm1hc2tfaXJxKGlycSk7Ci0Jc3BlY2lmaWNfZW9pKGlycSk7CQorCXNwZWNpZmljX2VvaShpcnEpOwogfQogCiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSB1bmtub3duX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgdW5rbm93bl9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJVbmtub3duIEV4Y2VwdGlvbiAlZCBhdCAlMDR4OiUwOHhcbiIsIGNhdXNlLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEaXZpZGUgRXJyb3IgKERpdmlzaW9uIGJ5IHplcm8pIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiAJd2hpbGUoMSk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkZWJ1Z19leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlYnVnX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIkRlYnVnIEludGVycnVwdCAoU2luZ2xlIHN0ZXApIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBubWlfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIG5taV9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIk5NSSBJbnRlcnJ1cHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF9pbnN0cnVjdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBpbnZhbGlkX2luc3RydWN0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBJbnN0cnVjdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQotCQkJCQotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvdWJsZV9mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkb3VibGVfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEb3VibGUgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGludmFsaWRfdHNzX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF90c3NfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBUU1MgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc2VnX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHNlZ19mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIlNlZ21lbnRhdGlvbiBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3RhY2tfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHN0YWNrX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiU3RhY2sgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdwZl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZ3BmX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiR2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiUGFnZSBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZnBfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBmcF9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJGbG9hdGluZyBwb2ludCBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGFsaWdubWVudF9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgYWxpZ25tZW50X2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiQWxpZ25tZW50IGNoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9Ci0gICAgICAgCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgbWFjaGluZV9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBtYWNoaW5lX2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiTWFjaGluZSBjaGVjayBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KQEAgLTM1MCwzMSArMzQ4LDMxIEBACiB2b2lkIGlycV9pbnN0YWxsX2hhbmRsZXIoaW50IGlubywgaW50ZXJydXB0X2hhbmRsZXJfdCAqZnVuYywgdm9pZCAqcGRhdGEpCiB7CiAJaW50IHN0YXR1czsKLQkKKwogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQkKKwogCWlmIChOVUxMICE9IGlycV90YWJsZVtpbm9dLmhhbmRsZXIpIHsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXN0YXR1cyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXIgPSBtYWxsb2Moc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CiAJCXJldHVybjsKIAl9Ci0JCisKIAltZW1zZXQoaXJxX3RhYmxlW2lub10uaGFuZGxlciwgMCwgc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKLQkKKwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXItPmlzcl9mdW5jID0gZnVuYzsKIAlpcnFfdGFibGVbaW5vXS5oYW5kbGVyLT5pc3JfZGF0YSA9IHBkYXRhOwogCWlmIChzdGF0dXMpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCisKIAl1bm1hc2tfaXJxKGlubyk7Ci0JCisKIAlyZXR1cm47CiB9CiAKQEAgLTM4NCw3ICszODIsNyBAQAogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQorCiAJc3RhdHVzID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAJbWFza19pcnEoaW5vKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CkBAIC00MDYsMzMgKzQwNCwzMyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfdmVjdG9yKGludCBpbnRudW0sIHZvaWQgKnJvdXRpbmUpCiB7Ci0JaWR0W2ludG51bV0uYmFzZV9oaWdoID0gKHUxNikoKHUzMikocm91dGluZSk+PjE2KTsJCi0JaWR0W2ludG51bV0uYmFzZV9sb3cgPSAodTE2KSgodTMyKShyb3V0aW5lKSYweGZmZmYpOwkKKwlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lKT4+MTYpOworCWlkdFtpbnRudW1dLmJhc2VfbG93ID0gKHUxNikoKHUzMikocm91dGluZSkmMHhmZmZmKTsKIH0KIAogCiBpbnQgaW50ZXJydXB0X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQkKKwogCS8qIEp1c3QgaW4gY2FzZS4uLiAqLwogCWRpc2FibGVfaW50ZXJydXB0cygpOwotCQkKKwogCS8qIEluaXRpYWxpemUgdGhlIElEVCBhbmQgc3R1ZmYgKi8KLQkKLQkKKworCiAJbWVtc2V0KGlycV90YWJsZSwgMCwgc2l6ZW9mKGlycV90YWJsZSkpOwogCiAJLyogU2V0dXAgdGhlIElEVCAqLwotCWZvciAoaT0wO2k8MjU2O2krKykgewkJCisJZm9yIChpPTA7aTwyNTY7aSsrKSB7CiAJCWlkdFtpXS5hY2Nlc3MgPSAweDhlOwotCQlpZHRbaV0ucmVzID0gMDsJCi0JCWlkdFtpXS5zZWxlY3RvciA9IDB4MTA7CQorCQlpZHRbaV0ucmVzID0gMDsKKwkJaWR0W2ldLnNlbGVjdG9yID0gMHgxMDsKIAkJc2V0X3ZlY3RvcihpLCBkZWZhdWx0X2lzcik7Ci0JfQkKLQkKKwl9CisKIAlhc20gKCJjcyBsaWR0IGlkdF9wdHJcbiIpOwotCQorCiAJLyogU2V0dXAgZXhjZXB0aW9ucyAqLwogCXNldF92ZWN0b3IoMHgwMCwgZXhwXzApOwogCXNldF92ZWN0b3IoMHgwMSwgZXhwXzEpOwpAQCAtNDg3LDM5ICs0ODUsMzkgQEAKIAkvKiB2ZWN0b3JzIDB4MzAtMHgzZiBhcmUgcmVzZXJ2ZWQgZm9yIGlycSAxNi0zMSAqLwogCXNldF92ZWN0b3IoMHg0MCwgc3lzY2FsbF9lbnRyeSk7CiAKLQkKKwogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlvdXRiKDB4ZmYsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIE1hc3RlciBQSUMgKi8KLQlvdXRiKElDVzFfU0VMfElDVzFfRUlDVzQsIE1BU1RFUl9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBNQVNURVJfUElDICsgSUNXMSk7CiAJb3V0YigweDIwLCBNQVNURVJfUElDICsgSUNXMik7ICAgICAgICAgIC8qIFBsYWNlIG1hc3RlciBQSUMgaW50ZXJydXB0cyBhdCBJTlQyMCAqLwotCW91dGIoSVIyLCBNQVNURVJfUElDICsgSUNXMyk7CQkvKiBJQ1czLCBPbmUgc2xldmMgUElDIGlzIHByZXNlbnQgKi8JCisJb3V0YihJUjIsIE1BU1RFUl9QSUMgKyBJQ1czKTsJCS8qIElDVzMsIE9uZSBzbGV2YyBQSUMgaXMgcHJlc2VudCAqLwogCW91dGIoSUNXNF9QTSwgTUFTVEVSX1BJQyArIElDVzQpOwotCQorCiAJZm9yIChpPTA7aTw4O2krKykgewogCQlvdXRiKE9DVzJfU0VPSXxpLCBNQVNURVJfUElDICsgT0NXMik7CiAJfQotCQorCiAJLyogU2xhdmUgUElDICovCi0Jb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsKIAlvdXRiKDB4MjgsIFNMQVZFX1BJQyArIElDVzIpOwkgICAgICAgIC8qIFBsYWNlIHNsYXZlIFBJQyBpbnRlcnJ1cHRzIGF0IElOVDI4ICovCiAJb3V0YigweDAyLCBTTEFWRV9QSUMgKyBJQ1czKTsJCS8qIFNsYXZlIElEICovCi0Jb3V0YihJQ1c0X1BNLCBTTEFWRV9QSUMgKyBJQ1c0KTsgICAgICAgIAotCQorCW91dGIoSUNXNF9QTSwgU0xBVkVfUElDICsgSUNXNCk7CisKIAlmb3IgKGk9MDtpPDg7aSsrKSB7CiAJCW91dGIoT0NXMl9TRU9JfGksIFNMQVZFX1BJQyArIE9DVzIpOwogCX0KLQkKLQkKKworCiAJLyogZW5hYmxlIGNhc2NhZGUgaW50ZXJyZXJ1cHQgKi8KIAlvdXRiKDB4ZmIsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIEl0IGlzIG5vdyBzYWZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JZW5hYmxlX2ludGVycnVwdHMoKTsgCi0JCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01MzEsOSArNTI5LDkgQEAKIGludCBkaXNhYmxlX2ludGVycnVwdHModm9pZCkKIHsKIAlsb25nIGZsYWdzOwotCQorCiAJYXNtIHZvbGF0aWxlICgicHVzaGZsIDsgcG9wbCAlMCA7IGNsaVxuIiA6ICI9ZyIgKGZsYWdzKSA6ICk7Ci0JCisKIAlyZXR1cm4gKGZsYWdzJjB4MjAwKTsgLyogSUUgZmxhZ3MgaXMgYml0IDkgKi8KIH0KIApAQCAtNTQxLDkgKzUzOSw5IEBACiAjaWZkZWYgQ0ZHX1JFU0VUX0dFTkVSSUMKIAogdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdlbmVyYXRlX2dwZih2b2lkKTsKLWFzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIiAKLSAgICAiZ2VuZXJhdGVfZ3BmOlxuIiAKLSAgICAibGptcCAgICQweDcwLCAkMHg0NzExNDcxMVxuIik7IC8qIHNlZ21lbnQgMHg3MCBpcyBhbiBhcmJpdHJhcnkgc2VnbWVudCB3aGljaCBkb2VzIG5vdCAKK2FzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIgorICAgICJnZW5lcmF0ZV9ncGY6XG4iCisgICAgImxqbXAgICAkMHg3MCwgJDB4NDcxMTQ3MTFcbiIpOyAvKiBzZWdtZW50IDB4NzAgaXMgYW4gYXJiaXRyYXJ5IHNlZ21lbnQgd2hpY2ggZG9lcyBub3QKIAkJCQkgICAgKiBleGlzdCAqLwogdm9pZCByZXNldF9jcHUodWxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3Jlc2V0LlMgYi9jcHUvaTM4Ni9yZXNldC5TCmluZGV4IDU3ZTMyYTguLjA3YTczODQgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3Jlc2V0LlMKKysrIGIvY3B1L2kzODYvcmVzZXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUgCisgKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyCU9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAgKgpAQCAtMjgsMTEgKzI4LDEwIEBACiAKIC5zZWN0aW9uIC5yZXNldCwgImF4IgogLmNvZGUxNgotcmVzZXRfdmVjdG9yOiAKLSAgICAgICAgY2xpCi0gICAgICAgIGNsZAotICAgICAgICBqbXAgc3RhcnQxNiAKK3Jlc2V0X3ZlY3RvcjoKKwljbGkKKwljbGQKKwlqbXAgc3RhcnQxNgogCiAJLm9yZyAweGYKIAlub3AKLQkKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3NjNTIwLmMgYi9jcHUvaTM4Ni9zYzUyMC5jCmluZGV4IDUwMDA4OWEuLjY4OWU3NzUgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwLmMKKysrIGIvY3B1L2kzODYvc2M1MjAuYwpAQCAtMzYsMjYgKzM2LDI2IEBACiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgogCi0vKiAKLSAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMCAKLSAqIAorLyoKKyAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMAorICoKICAqIHZvaWQgd3JpdGVfbW1jcl9ieXRlKHUxNiBtbWNyLCB1OCBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX3dvcmQodTE2IG1tY3IsIHUxNiBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX2xvbmcodTE2IG1tY3IsIHUzMiBkYXRhKQotICogCisgKgogICogdTggICByZWFkX21tY3JfYnl0ZSh1MTYgbW1jcikKICAqIHUxNiAgcmVhZF9tbWNyX3dvcmQodTE2IG1tY3IpCiAgKiB1MzIgIHJlYWRfbW1jcl9sb25nKHUxNiBtbWNyKQotICogCisgKgogICogdm9pZCBpbml0X3NjNTIwKHZvaWQpCiAgKiB1bnNpZ25lZCBsb25nIGluaXRfc2M1MjBfZHJhbSh2b2lkKQogICogdm9pZCBwY2lfc2M1MjBfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi0gKiAKKyAqCiAgKiB2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCiAgKiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKICAqIHZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCiAgKiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCi0gKiAKKyAqCiAgKi8KIAogc3RhdGljIHUzMiBtbWNyX2Jhc2U9IDB4ZmZmZWYwMDA7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIHZvaWQgd3JpdGVfbW1jcl93b3JkKHUxNiBtbWNyLCB1MTYgZGF0YSkKIHsKLQl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwkKKwl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwogfQogCiB2b2lkIHdyaXRlX21tY3JfbG9uZyh1MTYgbW1jciwgdTMyIGRhdGEpCkBAIC04Miw3ICs4Miw3IEBACiAKIHUxNiByZWFkX21tY3Jfd29yZCh1MTYgbW1jcikKIHsKLQlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwkKKwlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwogfQogCiB1MzIgcmVhZF9tbWNyX2xvbmcodTE2IG1tY3IpCkBAIC05NCwxOSArOTQsMTkgQEAKIHZvaWQgaW5pdF9zYzUyMCh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCQorCiAJLyogU2V0IHRoZSBVQVJUeENUTCByZWdpc3RlciBhdCBpdCdzIHNsb3dlciwKLQkgKiBiYXVkIGNsb2NrIGdpdmluZyB1cyBhIDEuODQzMiBNSHogcmVmZXJlbmNlIAorCSAqIGJhdWQgY2xvY2sgZ2l2aW5nIHVzIGEgMS44NDMyIE1IeiByZWZlcmVuY2UKIAkgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfVUFSVDFDVEwsIDcpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMkNUTCwgNyk7Ci0JCisKIAkvKiBmaXJzdCBzZXQgdGhlIHRpbWVyIHBpbiBtYXBwaW5nICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0NMS1NFTCwgMHg3Mik7CS8qIG5vIGNsb2NrIGZyZXF1ZW5jeSBzZWxlY3RlZCwgdXNlIDEuMTg5Mk1IeiAqLwotCQorCiAJLyogZW5hYmxlIFBDSSBidXMgYXJiaXRyZXIgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1lTQVJCQ1RMLDB4MDIpOyAgLyogZW5hYmxlIGNvbmN1cnJlbnQgbW9kZSAqLwotCQorCiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1NZU0FSQk1FTkIsMHgxZik7IC8qIGVuYWJsZSBleHRlcm5hbCBncmFudHMgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSEJDVEwsMHgwNCk7ICAgICAgLyogZW5hYmxlIHBvc3RlZC13cml0ZXMgKi8KIApAQCAtMTIwLDEwICsxMjAsMTAgQEAKIAkJcHJpbnRmKCIjIyBDUFUgU3BlZWQgc2V0IHRvIDEwME1IelxuIik7CiAJCWdkLT5jcHVfY2xrID0gMTAwMDAwMDAwOwogCX0KLQkKKwogCiAJLyogd2FpdCBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgKi8KLSAgICAgICAgYXNtKCJtb3ZsCSQweDIwMDAsJSVlY3hcbiIKKwlhc20oIm1vdmwJJDB4MjAwMCwlJWVjeFxuIgogCSAgICAid2FpdF9sb29wOglwdXNobCAlJWVjeFxuIgogCSAgICAicG9wbAklJWVjeFxuIgogCSAgICAibG9vcCB3YWl0X2xvb3BcbiI6IDogOiAiZWN4Iik7CkBAIC0xNDEsMTkgKzE0MSwxOSBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCWJkX3QgKmJkID0gZ2QtPmJkOwotCQorCiAJdTMyIGRyYW1fcHJlc2VudD0wOwogCXUzMiBkcmFtX2N0cmw7CiAKIAlpbnQgdmFsOwotCQotCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsJCi0JaW50IHJlZnJlc2hfcmF0ZSAgICAgICAgPSBDRkdfU0RSQU1fUkVGUkVTSF9SQVRFOwkKKworCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsKKwlpbnQgcmVmcmVzaF9yYXRlICAgICAgICA9IENGR19TRFJBTV9SRUZSRVNIX1JBVEU7CiAJaW50IHJhc19jYXNfZGVsYXkgICAgICAgPSBDRkdfU0RSQU1fUkFTX0NBU19ERUxBWTsKLQkKKwogCS8qIHNldCBTRFJBTSBzcGVlZCBoZXJlICovCi0JCi0JcmVmcmVzaF9yYXRlLz03ODsJCisKKwlyZWZyZXNoX3JhdGUvPTc4OwogCWlmIChyZWZyZXNoX3JhdGU8PTEpIHsKIAkJdmFsID0gMDsgIC8qIDcuOHVzICovCiAJfSBlbHNlIGlmIChyZWZyZXNoX3JhdGU9PTIpIHsKQEAgLTE2NCwyMiArMTY0LDIyIEBACiAJCXZhbCA9IDM7ICAvKiA2Mi40dXMgKi8KIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCwgKHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCkgJiAweGNmKSB8ICh2YWw8PDQpKTsKLQkKKwogCXZhbCA9IHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMKTsKIAl2YWwgJj0gMHhmMDsKLQkKLQlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewkJCisKKwlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewogCQl2YWwgfD0gMHgwNDsgICAvKiAzVCAqLwotCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09NCkgewkJCisJfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PT00KSB7CiAJCXZhbCB8PSAweDA4OyAgIC8qIDRUICovCi0JfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PjQpIHsJCQorCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT40KSB7CiAJCXZhbCB8PSAweDBjOwotCX0gCi0JCisJfQorCiAJaWYgKHJhc19jYXNfZGVsYXkgPiAzKSB7Ci0JCXZhbCB8PSAyOyAKKwkJdmFsIHw9IDI7CiAJfSBlbHNlIHsKLQkJdmFsIHw9IDE7IAorCQl2YWwgfD0gMTsKIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMLCB2YWwpOwogCkBAIC0xODcsMzcgKzE4NywzNyBAQAogCS8qIFdlIHJlYWQtYmFjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZHJhbQogCSAqIGNvbnRyb2xsZXIgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSB3cm90ZSAqLwogCWRyYW1fY3RybCA9IHJlYWRfbW1jcl9sb25nKFNDNTIwX0RSQ0JFTkRBRFIpOwotCQorCiAKIAliZC0+YmlfZHJhbVswXS5zdGFydCA9IDA7CiAJaWYgKGRyYW1fY3RybCAmIDB4ODApIHsKIAkJLyogYmFuayAwIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMV0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZikgPDwgMjI7Ci0JCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsgCisJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsKIAogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsxXS5zdGFydCA9IGJkLT5iaV9kcmFtWzBdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDApIHsKIAkJLyogYmFuayAxIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMl0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZjAwKSA8PCAxNDsKLQkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzFdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsyXS5zdGFydCA9IGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDAwMCkgewogCQkvKiBiYW5rIDIgZW5hYmxlZCAqLwogCQlkcmFtX3ByZXNlbnQgPSBiZC0+YmlfZHJhbVszXS5zdGFydCA9IChkcmFtX2N0cmwgJiAweDdmMDAwMCkgPDwgNjsKLQkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzJdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVszXS5zdGFydCA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwotCX0gCi0JCisJfQorCiAJaWYgKGRyYW1fY3RybCAmIDB4ODAwMDAwMDApIHsKIAkJLyogYmFuayAzIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ICA9IChkcmFtX2N0cmwgJiAweDdmMDAwMDAwKSA+PiAyOwpAQCAtMjI2LDEyICsyMjYsMTIgQEAKIAkJYmQtPmJpX2RyYW1bM10uc2l6ZSA9IDA7CiAJfQogCisKLQkKLSNpZiAwCQorI2lmIDAKIAlwcmludGYoIkNvbmZpZ3VyZWQgJWQgYnl0ZXMgb2YgZHJhbVxuIiwgZHJhbV9wcmVzZW50KTsKLSNlbmRpZgkKKyNlbmRpZgogCWdkLT5yYW1fc2l6ZSA9IGRyYW1fcHJlc2VudDsKLQkKKwogCXJldHVybiBkcmFtX3ByZXNlbnQ7CiB9CiAKQEAgLTI2NSwxOSArMjY1LDE5IEBACiAKIAogLyogVGhlIGludGVycnVwdCB1c2VkIGZvciBQQ0kgSU5UQS1JTlREICAqLwotaW50IHNjNTIwX3BjaV9pbnRzWzE1XSA9IHsgCitpbnQgc2M1MjBfcGNpX2ludHNbMTVdID0gewogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKIH07CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb24gdG8gY29uZmlndXJlIGEgcGNpIGludGVycnVwdCAqLwotaW50IHBjaV9zYzUyMF9zZXRfaXJxKGludCBwY2lfcGluLCBpbnQgaXJxKSAKK2ludCBwY2lfc2M1MjBfc2V0X2lycShpbnQgcGNpX3BpbiwgaW50IGlycSkKIHsKIAlpbnQgaTsKLQkKKwogIyBpZiAwCiAJcHJpbnRmKCJzZXRfaXJxKCk6IG1hcCBJTlQlYyB0byBJUlElZFxuIiwgcGNpX3BpbiArICdBJywgaXJxKTsKLSNlbmRpZgkKKyNlbmRpZgogCWlmIChpcnEgPCAwIHx8IGlycSA+IDE1KSB7CiAJCXJldHVybiAtMTsgLyogaWxsZWdhbCBpcnEgKi8KIAl9CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJcmV0dXJuIC0xOyAvKiBpbGxlZ2FsIHBjaSBpbnQgcGluICovCiAJfQogCi0JLyogZmlyc3QgZGlzYWJsZSBhbnkgbm9uLXBjaSBpbnRlcnJ1cHQgc291cmNlIHRoYXQgdXNlIAorCS8qIGZpcnN0IGRpc2FibGUgYW55IG5vbi1wY2kgaW50ZXJydXB0IHNvdXJjZSB0aGF0IHVzZQogCSAqIHRoaXMgbGV2ZWwgKi8KIAlmb3IgKGk9U0M1MjBfR1BUTVIwTUFQO2k8PVNDNTIwX0dQMTBJTUFQO2krKykgewogCQlpZiAoaT49U0M1MjBfUENJSU5UQU1BUCYmaTw9U0M1MjBfUENJSU5URE1BUCkgewpAQCAtMjk2LDMxICsyOTYsMzEgQEAKIAkJCXdyaXRlX21tY3JfYnl0ZShpLCBTQzUyMF9JUlFfRElTQUJMRUQpOwogCQl9CiAJfQotCQorCiAJLyogU2V0IHRoZSB0cmlnZ2VyIHRvIGxldmVsICovCi0Jd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywgCisJd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywKIAkJCXJlYWRfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZykgfCBzYzUyMF9pcnFbaXJxXS5sZXZlbF9iaXQpOwotCQotCQorCisKIAlpZiAocGNpX3BpbiA8IDQpIHsKIAkJLyogUENJIElOVEEtSU5URCAqLwogCQkvKiByb3V0ZSB0aGUgaW50ZXJydXB0ICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QQ0lJTlRBTUFQICsgcGNpX3Bpbiwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKLQkJCisKKwogCX0gZWxzZSB7CiAJCS8qIEdQSVJRMC1HUElSUTEwIHVzZWQgZm9yIGFkZGl0aW9uYWwgUENJIElOVFMgKi8KIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMElNQVAgKyBwY2lfcGluIC0gNCwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKKwogCQkvKiBhbHNvIHNldCB0aGUgcG9sYXJpdHkgaW4gdGhpcyBjYXNlICovCi0JCXdyaXRlX21tY3Jfd29yZChTQzUyMF9JTlRQSU5QT0wsIAorCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSU5UUElOUE9MLAogCQkJCXJlYWRfbW1jcl93b3JkKFNDNTIwX0lOVFBJTlBPTCkgfCAoMSA8PCAocGNpX3Bpbi00KSkpOwotCQkKKwogCX0KLQkKLQkvKiByZWdpc3RlciB0aGUgcGluICovCQkKKworCS8qIHJlZ2lzdGVyIHRoZSBwaW4gKi8KIAlzYzUyMF9wY2lfaW50c1twY2lfcGluXSA9IGlycTsKLQkKKwogCiAJcmV0dXJuIDA7IC8qIE9LICovCiB9CkBAIC0zMzEsMzUgKzMzMSwzNSBAQAogCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOwogCiAJLyogU3lzdGVtIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKIAkJICAgICAgIFNDNTIwX1BDSV9NRU1PUllfQlVTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9QSFlTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX01FTU9SWSk7CiAKIAkvKiBQQ0kgbWVtb3J5IHNwYWNlICovCi0JcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDEsIAorCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAxLAogCQkgICAgICAgU0M1MjBfUENJX01FTV9CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1BIWVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1NJWkUsCiAJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CiAKIAkvKiBJU0EvUENJIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAyLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMiwKIAkJICAgICAgIFNDNTIwX0lTQV9NRU1fQlVTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9QSFlTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0pOwogCiAJLyogUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAzLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CiAKIAkvKiBJU0EvUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyA0LCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgNCwKIAkJICAgICAgIFNDNTIwX0lTQV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9JU0FfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX0lTQV9JT19TSVpFLApAQCAtMzc0LDE1ICszNzQsMTQgQEAKIAlwY2lfcmVnaXN0ZXJfaG9zZShob3NlKTsKIAogCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwotCQorCiAJLyogZW5hYmxlIHRhcmdldCBtZW1vcnkgYWNjZXNlcyBvbiBob3N0IGJyaWdlICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCiAJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOwogCiB9CiAKIAotCiAjZW5kaWYKIAogI2lmZGVmIENGR19USU1FUl9TQzUyMApAQCAtMzkyLDcgKzM5MSw3IEBACiB7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENOVCwgMCk7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENUTCwgMHg2MDAxKTsKLQkKKwogfQogCiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKQEAgLTQxNCwxOSArNDEzLDE5IEBACiB7CiAJaW50IG09MDsKIAlsb25nIHU7Ci0JCisKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JTExJKTsKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JQ1JPKTsKLQkgICAgIAorCiAjaWYgMAogCS8qIGRvIG5vdCBlbmFibGUgdGhpcyBsaW5lLCB1ZGVsYXkgaXMgdXNlZCBpbiB0aGUgc2VyaWFsIGRyaXZlciAtPiByZWN1cnNpb24gKi8KIAlwcmludGYoInVkZWxheTogJWxkIG0udSAlZC4lZCAgdG0udHUgJWQuJWRcbiIsIHVzZWMsIG0sIHUsIHRtLCB0dSk7Ci0jZW5kaWYJCisjZW5kaWYKIAl3aGlsZSAoMSkgewotCQkKKwogCQltICs9IHJlYWRfbW1jcl93b3JkKFNDNTIwX1NXVE1STUlMTEkpOwogCQl1ID0gcmVhZF9tbWNyX3dvcmQoU0M1MjBfU1dUTVJNSUNSTykgKyAobSAqIDEwMDApOwotCQkKKwogCQlpZiAodXNlYyA8PSB1KSB7CiAJCQlicmVhazsKIAkJfQpAQCAtNDQwLDEzICs0MzksMTMgQEAKIAl1OCB0ZW1wPTA7CiAKIAlpZiAoZnJlcSA+PSA4MTkyKSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gNDA5NikgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzg7ICAgICAgICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF84OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyMDQ4KSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfMTY7ICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF8xNjsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gMTAyNCkgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzMyOyAgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfMzI7CiAJfSBlbHNlIGlmIChmcmVxID49IDUxMikgewogCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzY0OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyNTYpIHsKQEAgLTQ1Niw0NyArNDU1LDQ3IEBACiAJfSBlbHNlIHsKIAkJdGVtcCB8PSBDVExfQ0xLX1NFTF81MTI7CiAJfQotCQorCiAJaWYgKCFsc2JfZmlyc3QpIHsKIAkJdGVtcCB8PSBNU0JGX0VOQjsKIAl9Ci0JCQorCiAJaWYgKGludl9jbG9jaykgewogCQl0ZW1wIHw9IENMS19JTlZfRU5COwogCX0KLQkKKwogCWlmIChpbnZfcGhhc2UpIHsKIAkJdGVtcCB8PSBQSFNfSU5WX0VOQjsKIAl9Ci0JCQorCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNUTCwgdGVtcCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotdTggc3NpX3R4cnhfYnl0ZSh1OCBkYXRhKSAKK3U4IHNzaV90eHJ4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7CiAJd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9TU0lDTUQsIFNTSUNNRF9DTURfU0VMX1hNSVRSQ1YpOwogCXdoaWxlICgocmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJU1RBKSkgJiBTU0lTVEFfQlNZKTsKLQlyZXR1cm4gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJUkNWKTsJCi19ICAgICAgCisJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Cit9CiAKIAotdm9pZCBzc2lfdHhfYnl0ZSh1OCBkYXRhKSAKK3ZvaWQgc3NpX3R4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7Ci0Jd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOyAKKwl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfWE1JVCk7CiB9CiAKLXU4IHNzaV9yeF9ieXRlKHZvaWQpIAordTggc3NpX3J4X2J5dGUodm9pZCkKIHsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfUkNWKTsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Ci19IAorfQogCiAjZW5kaWYgLyogQ09ORklHX1NDNTIwICovCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zYzUyMF9hc20uUyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCmluZGV4IDdhOTU3YzcuLjgwNDY0ZmEgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwX2FzbS5TCisrKyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCkBAIC0yMiwyMSArMjIsMjEgQEAKICAqLwogCiAvKiBUaGlzIGZpbGUgaXMgbGFyZ2VseSBiYXNlZCBvbiBjb2RlIG9idG5lZCBmcm9tIEFNRC4gQU1EJ3Mgb3JpZ2luYWwKLSAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdyAKKyAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdwogICovCiAKIC8qCiAgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUaGlzIHNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgIChBTUQpICB3aGljaCAKLSAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIAotICogIHNvZnR3YXJlIHByb3ZpZGVkIHRoaXMgQ09QWVJJR0hUIE5PVElDRSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsIAotICogIG90aGVyIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQgYnkgQU1ELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSAKLSAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRiAKKyAqCisgKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyB0aGUgcHJvcGVydHkgb2YgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICAoQU1EKSAgd2hpY2gKKyAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiAgc29mdHdhcmUgcHJvdmlkZWQgdGhpcyBDT1BZUklHSFQgTk9USUNFIGlzIG5vdCByZW1vdmVkIG9yIGFsdGVyZWQuICBBbGwKKyAqICBvdGhlciByaWdodHMgYXJlIHJlc2VydmVkIGJ5IEFNRC4KKyAqCisgKiAgVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkKKyAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRgogICogIFRISVJELVBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSwgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqICBJTiBOTyBFVkVOVCBTSEFMTCBBTUQgT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKICAqICAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgQlVTSU5FU1MKQEAgLTQ1LDE5ICs0NSwxOSBAQAogICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKICAqICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgQ09OU0VRVUVOVElBTCBPUiBJTkNJREVOVEFMIERBTUFHRVMsIFRIRSBBQk9WRQogICogIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCi0gKiAKKyAqCiAgKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAgKiAgdGhlIE1hdGVyaWFscyBub3IgYW55IHJlc3BvbnNpYmlsaXR5IHRvIHN1cHBvcnQgb3IgdXBkYXRlIHRoZSBNYXRlcmlhbHMuCiAgKiAgQU1EIHJldGFpbnMgdGhlIHJpZ2h0IHRvIG1ha2UgY2hhbmdlcyB0byBpdHMgdGVzdCBzcGVjaWZpY2F0aW9ucyBhdCBhbnkKICAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KLSAqIAotICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zIAotICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsIAotICogIGNvbXBhbnksICB0ZWxlcGhvbmUgbnVtYmVyLCAgQU1EIHByb2R1Y3QgcmVxdWlyaW5nIHN1cHBvcnQgYW5kIHF1ZXN0aW9uIG9yIAotICogIHByb2JsZW0gZW5jb3VudGVyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICBXb3JsZHdpZGUgc3VwcG9ydCBhbmQgY29udGFjdCAgICAgICAgICAgCi0gKiAgRW1iZWRkZWQgUHJvY2Vzc29yIERpdmlzaW9uICAgICAgICAgICAgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGF0OiAgICAgICAgICAgICAgIAorICoKKyAqICBTbyB0aGF0IGFsbCBtYXkgYmVuZWZpdCBmcm9tIHlvdXIgZXhwZXJpZW5jZSwgcGxlYXNlIHJlcG9ydCAgYW55ICBwcm9ibGVtcworICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsCisgKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IKKyAqICBwcm9ibGVtIGVuY291bnRlcmVkLgorICoKKyAqICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgV29ybGR3aWRlIHN1cHBvcnQgYW5kIGNvbnRhY3QKKyAqICBFbWJlZGRlZCBQcm9jZXNzb3IgRGl2aXNpb24gICAgICAgICAgICBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYXQ6CiAgKiAgU3lzdGVtcyBFbmdpbmVlcmluZyAgICAgICAgICAgICAgICAgICAgICAgZXBkLnN1cHBvcnRAYW1kLmNvbQogICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAgKiAgQXVzdGluLCBUWCA3ODc0MSAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFtZC5jb20vaHRtbC9zdXBwb3J0L3RlY2hzdXAuaHRtbApAQCAtNjYsNyArNjYsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4gCisgKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtMTQwLDM2OCArMTQwLDM2OCBAQAogICAqIGluaXRpYWxpemUgZHJhbSBjb250cm9sbGVyIHJlZ2lzdGVycwogICAqLwogLmdsb2JsIG1lbV9pbml0Ci1tZW1faW5pdDogCi0gICAgICAgIHhvcncgICAgJWF4LCVheAotICAgICAgICBtb3ZsICAgICREQkNUTCwgJWVkaSAgICAgICAgICAgICAKK21lbV9pbml0OgorCXhvcncgICAgJWF4LCVheAorCW1vdmwgICAgJERCQ1RMLCAlZWRpCiAJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KIAotICAgICAgICBtb3ZsICAgICRFQ0NDVEwsICVlZGkgICAgICAgICAgICAKKwltb3ZsICAgICRFQ0NDVEwsICVlZGkKIAltb3ZiICAgICAlYWwsICglZWRpKSAgICAgICAgICAgICAvKiBkaXNhYmxlIEVDQyAqLwogCi0gICAgICAgIG1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgICAKLSAgICAgICAgbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLworCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpCisJbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAKICAvKgogICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMwogICAqLwotICAgICAgICBtb3ZsICAgICQweGZmMDAwMDAwLCVlYXggICAgICAgICAvKiBlbmFibGUgbGFzdCBiYW5rIGFuZCBzZXR1cCAqLwotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmwgICAgJDB4ZmYwMDAwMDAsJWVheCAgICAgICAgIC8qIGVuYWJsZSBsYXN0IGJhbmsgYW5kIHNldHVwICovCisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAltb3ZsICAgICAlZWF4LCAoJWVkaSkKIAotICAgICAgICBtb3ZsICAgICREUkNDRkcsICVlZGkgICAgICAgICAgICAvKiBzZXR1cCAqLwotICAgICAgICBtb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCisJbW92bCAgICAkRFJDQ0ZHLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgKi8KKwltb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCiAJbW92dyAgICAlYXgsICglZWRpKQogCiAgLyoKICAgKiBpc3N1ZSBhIE5PUCB0byBhbGwgRFJBTXMKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovIAorCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovCiAJbW92YiAgICAgJWFsLCAoJWVkaSkKLSAgICAgICAgbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyoganVzdCBhIGR1bW15IGFkZHJlc3MgdG8gd3JpdGUgZm9yICovIAorCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGp1c3QgYSBkdW1teSBhZGRyZXNzIHRvIHdyaXRlIGZvciAqLwogCW1vdncgICAgICVheCwgKCVlc2kpCiAgLyoKICAgKiBkZWxheSBmb3IgMTAwIHVzZWM/IDIwMD8KICAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgogICAqLwotICAgICAgICBtb3Z3ICAgICQxMDAsJWN4Ci1zaXpkZWxheTogCi0gICAgICAgIGxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLworCW1vdncgICAgJDEwMCwlY3gKK3NpemRlbGF5OgorCWxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLwogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogIC8qCiAgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQogICAqLwotICAgICAgICBtb3ZiICAgICQweDIsJWFsICAgICAgICAgICAgICAgICAvKiBBbGwgYmFua3MgcHJlY2hhcmdlICovCisJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MgCisgICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MKICAgKi8KLSAgICAgICAgbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLworCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQotICAgICAgICBtb3Z3ICAgICQyLCVjeAotcmVmcmVzaDE6IAorCW1vdncgICAgJDIsJWN4CityZWZyZXNoMToKIAltb3Z3ICAgICAlYXgsICglZXNpKQotICAgICAgICBsb29wICAgIHJlZnJlc2gxCisJbG9vcCAgICByZWZyZXNoMQogCiAgLyoKICAgKiBpc3N1ZSBMT0FEIE1PREUgUkVHSVNURVIgY29tbWFuZAogICAqLwotICAgICAgICBtb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCisJbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcyAKLSAgKi8gCi0gICAgICAgIG1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KKyAgKiBpc3N1ZSA4IG1vcmUgYXV0byByZWZyZXNoZXMgdG8gYWxsIGJhbmtzCisgICovCisJbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCi0gICAgICAgIG1vdncgICAgJDgsJWN4Ci1yZWZyZXNoMjogCisJbW92dyAgICAkOCwlY3gKK3JlZnJlc2gyOgogCW1vdncgICAgICVheCwgKCVlc2kpCi0gICAgICAgIGxvb3AgICAgcmVmcmVzaDIKKwlsb29wICAgIHJlZnJlc2gyCiAKICAvKgotICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlIAorICAqIHNldCBjb250cm9sIHJlZ2lzdGVyIHRvIE5PUk1BTCBtb2RlCiAgICovCi0gICAgICAgIG1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCisJbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQogCiAgLyoKICAgKiBzaXplIGRyYW0gc3RhcnRpbmcgd2l0aCBleHRlcm5hbCBiYW5rIDMgbW92aW5nIHRvIGV4dGVybmFsIGJhbmsgMAogICAqLwotICAgICAgICBtb3ZsICAgICQweDMsJWVjeCAgICAgICAgICAgICAgICAvKiBzdGFydCB3aXRoIGV4dGVybmFsIGJhbmsgMyAqLworCW1vdmwgICAgJDB4MywlZWN4ICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHdpdGggZXh0ZXJuYWwgYmFuayAzICovCiAKLW5leHRiYW5rOiAKK25leHRiYW5rOgogCiAgLyoKICAgKiB3cml0ZSBjb2wgMTEgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLwotICAgICAgICBtb3ZsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtYXggc3VwcG9ydGVkIGNvbHVtbnMoMTEpICovCisJbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLworCW1vdmwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgY29sdW1ucygxMSkgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtYXggY29sIHBhdHRlcm4gYXQgbWF4IGNvbCBhZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgogICAqIHdyaXRlIGNvbCAxMCB3cmFwIGFkcgogICAqLwogCi0gICAgICAgIG1vdmwgICAgJENPTDEwX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIGNvbCB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KKwltb3ZsICAgICRDT0wxMF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMCBjb2wgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkQ09MMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgY29sIHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMCBjb2wgcGF0dGVybiBAIDEwIGNvbCB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgY29sIDkgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMDlfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gOSBjb2wgd3JhcCBhZGRyZXNzICovCi0gICAgICAgIG1vdmwgICAgJENPTDA5X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDkgY29sIHdyYXAgKi8KKwltb3ZsICAgICRDT0wwOV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byA5IGNvbCB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRDT0wwOV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciA5IGNvbCB3cmFwICovCiAJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgOSBjb2wgcGF0dGVybiBAIDkgY29sIHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSBjb2wgOCB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRDT0wwOF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtaW4oOCkgY29sIHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCisJbW92bCAgICAkQ09MMDhfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWluKDgpIGNvbCB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtaW4gKDgpIGNvbCB3cmFwICovCiAJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWluIGNvbCBwYXR0ZXJuIEAgbWluIGNvbCBhZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgogICAqIHdyaXRlIHJvdyAxNCB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCi0gICAgICAgIG1vdmwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgcm93cygxNCkgKi8KKwltb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggcm93ICgxNCkgd3JhcCBhZGRyICovCisJbW92bCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCByb3dzKDE0KSAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCByb3cgcGF0dGVybiBhdCBtYXggcm93IGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEzIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEzX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEzIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTNfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTMgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxM19BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMyByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTNfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTMgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMyByb3cgcGF0dGVybiBAIDEzIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEyIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEyX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEyIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTJfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTIgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxMl9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMiByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTJfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTIgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMiByb3cgcGF0dGVybiBAIDEyIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDExIHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzExX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDExIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KKwltb3ZsICAgICRST1cxMV9BRFIsICVlZGkgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byAxMSByb3cgd3JhcCBhZGRyZXNzICovCisJbW92bCAgICAkUk9XMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTEgcm93IHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZWRpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMSByb3cgcGF0dGVybiBAIDExIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlZGkpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDEwIHdyYXAgYWRyIC0tLSB0aGlzIHdyaXRlIGlzIHJlYWxseSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIGJhbmtzCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTBfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgMTAgcm93IHdyYXAgKEFBKSAqLworCW1vdmwgICAgJFJPVzEwX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCByb3cgd3JhcCAoQUEpICovCiAJbW92bCAgICAlZWF4LCAoJWVkaSkgICAgICAgICAgICAgLyogd3JpdGUgMTAgcm93IHBhdHRlcm4gQCAxMCByb3cgd3JhcCBhZHIgKi8KIAltb3ZsICAgICglZWRpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgotICAqIHJlYWQgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogYmFua3MsIAorICAqIHJlYWQgZGF0YSBAIHJvdyAxMiB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogYmFua3MsCiAgICogYW5kIHJlYWQgZGF0YSBAIHJvdyAxNCB3cmFwIGFkciB0byBkZXRlcm1pbmUgICogcm93cy4KICAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIGlzIG5vdCBBQSwgMTEgb3IgMTIgd2UgaGF2ZSBiYWQgUkFNLgotICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0IAorICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MsIE5PVCA0CiAgICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IDExIG9yIDEyLCB3ZSBoYXZlIDQgYmFua3MsCiAgICovCi0gICAgICAgIHhvcncgICAgJWRpLCVkaSAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIGZvciAyIGJhbmtzIGluIERJICovCi0JbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogcmVhZCBmcm9tIDEyIHJvdyB3cmFwIHRvIGNoZWNrIGJhbmtzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoZXNpIGlzIHNldHVwIGZyb20gdGhlIHdyaXRlIHRvIHJvdyAxMiB3cmFwKSAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgQUEgcGF0dGVybiAgKGVheCBob2xkcyB0aGUgYWEgcGF0dGVybikgKi8KLSAgICAgICAganogICAgICBvbmx5MiAgICAgICAgICAgICAgICAgICAgLyogaWYgcGF0dGVybiA9PSBBQSwgd2Ugb25seSBoYXZlIDIgYmFua3MgKi8KKwl4b3J3ICAgICVkaSwlZGkgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgMiBiYW5rcyBpbiBESSAqLworCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIHJlYWQgZnJvbSAxMiByb3cgd3JhcCB0byBjaGVjayBiYW5rcworCQkJCQkgICogKGVzaSBpcyBzZXR1cCBmcm9tIHRoZSB3cml0ZSB0byByb3cgMTIgd3JhcCkgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgQUEgcGF0dGVybiAgKGVheCBob2xkcyB0aGUgYWEgcGF0dGVybikgKi8KKwlqeiAgICAgIG9ubHkyICAgICAgICAgICAgICAgICAgICAvKiBpZiBwYXR0ZXJuID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcyAqLwogCiAJLyogNCBiYW5rcyAqLwotCQotICAgICAgICBtb3Z3ICAgICQ4LCVkaSAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgNCBiYW5rcyBpbiBESSAoQk5LX0NOVCBiaXQpICovCi0gICAgICAgIGNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCi0gICAgICAgIGp6ICAgICAgb25seTIKLSAgICAgICAgY21wbCAgICAkUk9XMTJfREFUQSwgJWVieCAgICAgICAgLyogYW5kIDEyICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLwotCQorCisJbW92dyAgICAkOCwlZGkgICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDQgYmFua3MgaW4gREkgKEJOS19DTlQgYml0KSAqLworCWNtcGwgICAgJFJPVzExX0RBVEEsICVlYnggICAgICAgIC8qIG9ubHkgb3RoZXIgbGVnaXRpbWF0ZSB2YWx1ZXMgYXJlIDExICovCisJanogICAgICBvbmx5MgorCWNtcGwgICAgJFJPVzEyX0RBVEEsICVlYnggICAgICAgIC8qIGFuZCAxMiAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIGl0cyBiYWQgaWYgbm90IDExIG9yIDEyISAqLworCiAJLyogZmFsbCB0aHJvdWdoICovCi1vbmx5MjogCitvbmx5MjoKICAvKgogICAqIHZhbGlkYXRlIHJvdyBtYXNrCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIGJhY2sgdG8gbWF4IHJvdyB3cmFwIGFkZHIgKi8KKwltb3ZsICAgICRST1cxNF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyBiYWNrIHRvIG1heCByb3cgd3JhcCBhZGRyICovCiAJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCBhY3R1YWwgbnVtYmVyIG9mIHJvd3MgQCByb3cxNCBhZHIgKi8KIAotICAgICAgICBjbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLwotICAgICAgICBqYiAgICAgIGJhZF9yYW0KKwljbXBsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiByb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMTEgcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQogCi0gICAgICAgIGNtcGwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTQgcGF0dGVybiAqLwotICAgICAgICBqYSAgICAgIGJhZF9yYW0KKwljbXBsICAgICRST1cxNF9EQVRBLCAlZWF4ICAgICAgICAvKiBhbmQgcm93IG11c3QgYmUgbGVzcyB0aGFuIDE0IHBhdHRlcm4gKi8KKwlqYSAgICAgIGJhZF9yYW0KIAotICAgICAgICBjbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgc2FtZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0KLSAgICAgICAgbW92bCAgICAlZWF4LCVlYngKLSAgICAgICAgc2hybCAgICAkMTYsJWVieAotICAgICAgICBjbXB3ICAgICVieCwlYXgKLSAgICAgICAgam56ICAgICBiYWRfcmFtCisJY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIHNhbWUgKi8KKwlqbnogICAgIGJhZF9yYW0KKwltb3ZsICAgICVlYXgsJWVieAorCXNocmwgICAgJDE2LCVlYngKKwljbXB3ICAgICVieCwlYXgKKwlqbnogICAgIGJhZF9yYW0KICAvKgogICAqIHJlYWQgY29sIDExIHdyYXAgYWRyIGZvciByZWFsIGNvbHVtbiBkYXRhIHZhbHVlCiAgICovCi0gICAgICAgIG1vdmwgICAgJENPTDExX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCBjb2wgKDExKSB3cmFwIGFkZHIgKi8KKwltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCiAJbW92bCAgICAoJWVzaSksICVlYXggICAgICAgICAgICAgLyogcmVhZCByZWFsIGNvbCBudW1iZXIgYXQgbWF4IGNvbCBhZHIgKi8KICAvKgogICAqIHZhbGlkYXRlIGNvbHVtbiBkYXRhCiAgICovCi0gICAgICAgIGNtcGwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIGNvbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiA4IHBhdHRlcm4gKi8KLSAgICAgICAgamIgICAgICBiYWRfcmFtCisJY21wbCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogY29sIG11c3QgYmUgZ3JlYXRlciB0aGFuIDggcGF0dGVybiAqLworCWpiICAgICAgYmFkX3JhbQogCi0gICAgICAgIGNtcGwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTEgcGF0dGVybiAqLwotICAgICAgICBqYSAgICAgIGJhZF9yYW0KKwljbXBsICAgICRDT0wxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBhbmQgcm93IG11c3QgYmUgbGVzcyB0aGFuIDExIHBhdHRlcm4gKi8KKwlqYSAgICAgIGJhZF9yYW0KIAotICAgICAgICBzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLwotICAgICAgICBqYyAgICAgIGJhZF9yYW0KLSAgICAgICAgY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIGVxdWFsICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbQotICAgICAgICBtb3ZsICAgICVlYXgsJWVkeAotICAgICAgICBzaHJsICAgICQxNiwlZWR4Ci0gICAgICAgIGNtcHcgICAgJWR4LCVheAotICAgICAgICBqbnogICAgIGJhZF9yYW0KKwlzdWJsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBub3JtYWxpemUgY29sdW1uIGRhdGEgdG8gemVybyAqLworCWpjICAgICAgYmFkX3JhbQorCWNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBlcXVhbCAqLworCWpueiAgICAgYmFkX3JhbQorCW1vdmwgICAgJWVheCwlZWR4CisJc2hybCAgICAkMTYsJWVkeAorCWNtcHcgICAgJWR4LCVheAorCWpueiAgICAgYmFkX3JhbQogIC8qCiAgICogbWVyZ2UgYmFuayBhbmQgY29sIGRhdGEgdG9nZXRoZXIKICAgKi8KLSAgICAgICAgYWRkdyAgICAlZGksJWR4ICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugb2YgYmFuayBhbmQgY29sIGluZm8gaW4gZGwgKi8KKwlhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLwogIC8qCiAgICogZml4IGVuZGluZyBhZGRyIG1hc2sgYmFzZWQgdXBvbiBjb2wgaW5mbwogICAqLwotICAgICAgICBtb3ZiICAgICQzLCVhbAotICAgICAgICBzdWJiICAgICVkaCwlYWwgICAgICAgICAgICAgICAgICAvKiBkaCBjb250YWlucyB0aGUgb3ZlcmZsb3cgZnJvbSB0aGUgYmFuay9jb2wgbWVyZ2UgICovCi0gICAgICAgIG1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCi0gICAgICAgIHhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4ID0gYXggPSAzIG9yIDIgZGVwZW5kaW5nIG9uIDIgb3IgNCBiYW5rIGRldmljZSAqLwotICAgICAgICBzaHJiICAgICVjbCwlZGgJICAgICAgICAgICAgICAgICAvKiAgKi8KLSAgICAgICAgaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggaXMgYmFuayBudW1iZXIgYWdhaW4gKi8KKwltb3ZiICAgICQzLCVhbAorCXN1YmIgICAgJWRoLCVhbCAgICAgICAgICAgICAgICAgIC8qIGRoIGNvbnRhaW5zIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBiYW5rL2NvbCBtZXJnZSAgKi8KKwltb3ZiICAgICVibCwlZGggICAgICAgICAgICAgICAgICAvKiBibCBjb250YWlucyB0aGUgcm93IG1hc2sgKGFhLCAwNywgMGYsIDFmIG9yIDNmKSAqLworCXhjaGd3ICAgJWN4LCVheCAgICAgICAgICAgICAgICAgIC8qIGN4ID0gYXggPSAzIG9yIDIgZGVwZW5kaW5nIG9uIDIgb3IgNCBiYW5rIGRldmljZSAqLworCXNocmIgICAgJWNsLCVkaAkgICAgICAgICAgICAgICAgIC8qICAqLworCWluY2IgICAgJWRoICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGluZyBhZGRyIGlzIDEgZ3JlYXRlciB0aGFuIHJlYWwgZW5kICovCisJeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggaXMgYmFuayBudW1iZXIgYWdhaW4gKi8KICAvKgogICAqIGlzc3VlIGFsbCBiYW5rcyBwcmVjaGFyZ2UKICAgKi8KLWJhZF9yZWludDogCi0gICAgICAgIG1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCi0gICAgICAgIG1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KK2JhZF9yZWludDoKKwltb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLworCW1vdmIgICAgJDB4MiwlYWwgICAgICAgICAgICAgICAgIC8qIEFsbCBiYW5rcyBwcmVjaGFyZ2UgKi8KIAltb3ZiICAgICAlYWwsICglZXNpKQotICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KKwltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KIAltb3Z3ICAgICAlYXgsICglZXNpKQogCiAgLyoKICAgKiB1cGRhdGUgRU5ESU5HIEFERFJFU1MgUkVHSVNURVIKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwotICAgICAgICBtb3ZsICAgICVlY3gsJWVieAorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKwltb3ZsICAgICVlY3gsJWVieAogCWFkZGwJJWVieCwgJWVkaQogCW1vdmIgICAgJWRoLCAoJWVkaSkKICAvKgogICAqIHVwZGF0ZSBDT05GSUcgUkVHSVNURVIKICAgKi8KLSAgICAgICAgeG9yYiAgICAlZGgsJWRoCi0gICAgICAgIG1vdncgICAgJDB4MDBmLCVieAotICAgICAgICBtb3Z3ICAgICVjeCwlYXgKLSAgICAgICAgc2hsdyAgICAkMiwlYXgKLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4Ci0gICAgICAgIHNobHcgICAgJWNsLCVkeAotICAgICAgICBzaGx3ICAgICVjbCwlYngKLSAgICAgICAgbm90dyAgICAlYngKLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4Ci0gICAgICAgIG1vdmwgICAgJERSQ0NGRywgJWVkaQorCXhvcmIgICAgJWRoLCVkaAorCW1vdncgICAgJDB4MDBmLCVieAorCW1vdncgICAgJWN4LCVheAorCXNobHcgICAgJDIsJWF4CisJeGNoZ3cgICAlY3gsJWF4CisJc2hsdyAgICAlY2wsJWR4CisJc2hsdyAgICAlY2wsJWJ4CisJbm90dyAgICAlYngKKwl4Y2hndyAgICVjeCwlYXgKKwltb3ZsICAgICREUkNDRkcsICVlZGkKIAltb3YgICAgICglZWRpKSwgJWF4Ci0gICAgICAgIGFuZHcgICAgJWJ4LCVheAotICAgICAgICBvcncgICAgICVkeCwlYXgKKwlhbmR3ICAgICVieCwlYXgKKwlvcncgICAgICVkeCwlYXgKIAltb3Z3ICAgICVheCwgKCVlZGkpCi0gICAgICAgIGpjeHogICAgY2xlYW51cAorCWpjeHogICAgY2xlYW51cAogCi0gICAgICAgIGRlY3cgICAgJWN4Ci0gICAgICAgIG1vdmwgICAgJWVjeCwlZWJ4Ci0gICAgICAgIG1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLSAgICAgICAgbW92YiAgICAkMHhmZiwlYWwKKwlkZWN3ICAgICVjeAorCW1vdmwgICAgJWVjeCwlZWJ4CisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmIgICAgJDB4ZmYsJWFsCiAJYWRkbAklZWJ4LCAlZWRpCiAJbW92YiAgICAlYWwsICglZWRpKQogIC8qCi0gICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUgCisgICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KKwltb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLworCW1vdmIgICAgJDB4MCwlYWwgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBtb2RlIHZhbHVlICovCiAJbW92YiAgICAlYWwsICglZXNpKQotICAgICAgICBtb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KKwltb3ZsICAgICRDQUNIRUxJTkVTWiwgJWVzaSAgICAgICAvKiBhZGRyZXNzIHRvIGluaXQgcmVhZCBidWZmZXIgKi8KIAltb3Z3ICAgICVheCwgKCVlc2kpCi0gICAgICAgIGptcCAgICAgbmV4dGJhbmsKKwlqbXAgICAgIG5leHRiYW5rCiAKLWNsZWFudXA6IAotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwotICAgICAgICBtb3Z3ICAgICQ0LCVjeAotICAgICAgICB4b3J3ICAgICVheCwlYXgKLWNsZWFudXBscDogCitjbGVhbnVwOgorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCisJbW92dyAgICAkNCwlY3gKKwl4b3J3ICAgICVheCwlYXgKK2NsZWFudXBscDoKIAltb3ZiICAgKCVlZGkpLCAlYWwKLSAgICAgICAgb3JiICAgICAlYWwsJWFsCi0gICAgICAgIGp6ICAgICAgZW1wdHliYW5rCisJb3JiICAgICAlYWwsJWFsCisJanogICAgICBlbXB0eWJhbmsKIAotICAgICAgICBhZGRiICAgICVhaCwlYWwKLSAgICAgICAgam5zICAgICBub3R0b29tdWNoCisJYWRkYiAgICAlYWgsJWFsCisJam5zICAgICBub3R0b29tdWNoCiAKLSAgICAgICAgbW92YiAgICAkMHg3ZiwlYWwKLW5vdHRvb211Y2g6IAotICAgICAgICBtb3ZiICAgICVhbCwlYWgKLSAgICAgICAgb3JiICAgICAkMHg4MCwlYWwKKwltb3ZiICAgICQweDdmLCVhbAorbm90dG9vbXVjaDoKKwltb3ZiICAgICVhbCwlYWgKKwlvcmIgICAgICQweDgwLCVhbAogCW1vdmIgICAgJWFsLCAoJWVkaSkKLWVtcHR5YmFuazogCi0gICAgICAgIGluY2wgICAgJWVkaQotICAgICAgICBsb29wICAgIGNsZWFudXBscAorZW1wdHliYW5rOgorCWluY2wgICAgJWVkaQorCWxvb3AgICAgY2xlYW51cGxwCiAKICNpZiBkZWZpbmVkKENGR19TRFJBTV9DQVNfTEFURU5DWV8yVCkgfHwgZGVmaW5lZChDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QpCiAJLyogc2V0IHRoZSBDQVMgbGF0ZW5jeSBub3cgc2luY2UgaXQgaXMgaGFyZCB0byBkbwogCSAqIHdoZW4gd2UgcnVuIGZyb20gdGhlIFJBTSAqLwogCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgIC8qIERSQU0gdGltaW5nIHJlZ2lzdGVyICovCi0JbW92YiAgICAoJWVkaSksICVhbAkKKwltb3ZiICAgICglZWRpKSwgJWFsCiAjaWZkZWYgQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUCiAJYW5kYiAgICAkMHhlZiwgJWFsCiAjZW5kaWYKICNpZmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfM1QKIAlvcmIgICAgICQweDEwLCAlYWwKLSNlbmRpZgkgCisjZW5kaWYKIAltb3ZiICAgICVhbCwgKCVlZGkpCiAjZW5kaWYKLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCi0gICAgICAgIG1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KKwltb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwltb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCiAJbW92YiAgICAgJWFsLCAoJWVkaSkKIAltb3Z3ICAgICAlYXgsICglZXNpKQogCiAKLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogRFJBTSBDb250cm9sIHJlZ2lzdGVyICovCi0gICAgICAgIG1vdmIgICAgJDB4MTgsJWFsICAgICAgICAgICAgICAgIC8qICBFbmFibGUgcmVmcmVzaCBhbmQgTk9STUFMIG1vZGUgKi8KKwltb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwltb3ZiICAgICQweDE4LCVhbCAgICAgICAgICAgICAgICAvKiAgRW5hYmxlIHJlZnJlc2ggYW5kIE5PUk1BTCBtb2RlICovCiAJbW92YiAgICAlYWwsICglZWRpKQogCi0gICAgICAgIGptcCAgICAgZHJhbV9kb25lCisJam1wICAgICBkcmFtX2RvbmUKIAotYmFkX3JhbTogCi0gICAgICAgIHhvcmwgICAgJWVkeCwlZWR4Ci0gICAgICAgIHhvcmwgICAgJWVkaSwlZWRpCi0gICAgICAgIGptcCAgICAgYmFkX3JlaW50CitiYWRfcmFtOgorCXhvcmwgICAgJWVkeCwlZWR4CisJeG9ybCAgICAlZWRpLCVlZGkKKwlqbXAgICAgIGJhZF9yZWludAogCi1kcmFtX2RvbmU6IAotCQorZHJhbV9kb25lOgorCiAJLyogcmVhZGJhY2sgRFJDQkVOREFEUiBhbmQgcmV0dXJuIHRoZSBudW1iZXIKLQkgKiBvZiBhdmFpbGFibGUgcmFtIGJ5dGVzIGluICVlYXggKi8gCisJICogb2YgYXZhaWxhYmxlIHJhbSBieXRlcyBpbiAlZWF4ICovCiAKLSAgICAgICAgbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAgKi8KLQkKKwltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLworCiAJbW92bAkoJWVkaSksICVlYXgKIAltb3ZsCSVlYXgsICVlY3gKIAlhbmRsCSQweDgwMDAwMDAwLCAlZWN4CiAJanoJYmFuazIKIAlhbmRsCSQweDdmMDAwMDAwLCAlZWF4Ci0Jc2hybAkkMiwgJWVheCAKKwlzaHJsCSQyLCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGJhbmsyOiAJbW92bAkoJWVkaSksICVlYXgKQEAgLTUwOSw3ICs1MDksNyBAQAogCWFuZGwJJDB4MDA4MDAwMDAsICVlY3gKIAlqegliYW5rMQogCWFuZGwJJDB4MDA3ZjAwMDAsICVlYXgKLQlzaGxsCSQ2LCAlZWF4IAorCXNobGwJJDYsICVlYXgKIAltb3ZsCSVlYXgsICVlYngKIAogYmFuazE6IAltb3ZsCSglZWRpKSwgJWVheApAQCAtNTE3LDcgKzUxNyw3IEBACiAJYW5kbAkkMHgwMDAwODAwMCwgJWVjeAogCWp6CWJhbmswCiAJYW5kbAkkMHgwMDAwN2YwMCwgJWVheAotCXNobGwJJDE0LCAlZWF4IAorCXNobGwJJDE0LCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGJhbmswOiAJbW92bAkoJWVkaSksICVlYXgKQEAgLTUyNSw3ICs1MjUsNyBAQAogCWFuZGwJJDB4MDAwMDAwODAsICVlY3gKIAlqeglkb25lCiAJYW5kbAkkMHgwMDAwMDA3ZiwgJWVheAotCXNobGwJJDIyLCAlZWF4IAorCXNobGwJJDIyLCAlZWF4CiAJbW92bAklZWF4LCAlZWJ4CiAKIGRvbmU6CW1vdmwJJWVieCwgJWVheApkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc2VyaWFsLmMgYi9jcHUvaTM4Ni9zZXJpYWwuYwppbmRleCAyMmMzYzJhLi5mNThiNDdjIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9zZXJpYWwuYworKysgYi9jcHUvaTM4Ni9zZXJpYWwuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQotICogCisgKgogICogKEMpIENvcHlyaWdodCAyMDAwCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKQEAgLTgxLDcgKzgxLDYgQEAKICNkZWZpbmUgYXN5bmNMU1JSeEZpZm9FcnJvcjEgICAgICAgICAgMHg4MAogCiAKLQogI2lmIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgfCBGaWZvCkBAIC0xMDAsNyArOTksNyBAQAogCiBzdGF0aWMgaW50IHNlcmlhbF9kaXYoaW50IGJhdWRyYXRlKQogewotCQorCiAJc3dpdGNoIChiYXVkcmF0ZSkgewogCWNhc2UgMTIwMDoKIAkJcmV0dXJuIDk2OwpAQCAtMTEzLDkgKzExMiw5IEBACiAJY2FzZSA1NzYwMDoKIAkJcmV0dXJuIDI7CiAJY2FzZSAxMTUyMDA6Ci0JCXJldHVybiAxOwkJCisJCXJldHVybiAxOwogCX0KLQkKKwogCXJldHVybiAxMjsKIH0KIApAQCAtMTMyLDcgKzEzMSw3IEBACiAJdm9sYXRpbGUgY2hhciB2YWw7CiAKIAlpbnQgYmRpdiA9IHNlcmlhbF9kaXYoZ2QtPmJhdWRyYXRlKTsKLSAgICAKKwogCiAJb3V0YigweDgwLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBzZXQgRExBQiBiaXQgKi8KIAlvdXRiKGJkaXYsIFVBUlQwX0JBU0UgKyBVQVJUX0RMTCk7CS8qIHNldCBiYXVkcmF0ZSBkaXZpc29yICovCkBAIC0xNTQsNyArMTUzLDcgQEAKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogCXVuc2lnbmVkIHNob3J0IGJkaXY7Ci0JCisKIAliZGl2ID0gc2VyaWFsX2RpdihnZC0+YmF1ZHJhdGUpOwogCiAJb3V0YigweDgwLCBVQVJUMF9CQVNFICsgVUFSVF9MQ1IpOwkvKiBzZXQgRExBQiBiaXQgKi8KQEAgLTE5OSw3ICsxOTgsNyBAQAogCQlyZXR1cm4gc2VyaWFsX2J1ZmZlcmVkX2dldGMoKTsKIAl9CiAjZW5kaWYKLQkKKwogCXdoaWxlICgxKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfSFdfV0FUQ0hET0cpCiAJCVdBVENIRE9HX1JFU0VUKCk7CS8qIFJlc2V0IEhXIFdhdGNoZG9nLCBpZiBuZWVkZWQgKi8KQEAgLTI2MiwyOCArMjYxLDI4IEBACiAJfSBlbHNlIHsKIAkJc3BhY2UgPSBidWZfaW5mby5yeF9nZXQgLSByeF9wdXQ7CiAJfQotCQorCiAJd2hpbGUgKGluYihVQVJUMF9CQVNFICsgVUFSVF9MU1IpICYgMSkgewogCQljID0gaW5iKFVBUlQwX0JBU0UpOwogCQlpZiAoc3BhY2UpIHsKIAkJCWJ1Zl9pbmZvLnJ4X2J1ZmZlcltyeF9wdXQrK10gPSBjOwogCQkJc3BhY2UtLTsKLQkJCQorCiAJCQlpZiAocnhfcHV0ID09IGJ1Zl9pbmZvLnJ4X2dldCkgewogCQkJCWJ1Zl9pbmZvLnJ4X2dldCsrOwogCQkJCWlmIChyeF9wdXQgPT0gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPKSB7CiAJCQkJCWJ1Zl9pbmZvLnJ4X2dldCA9IDA7CiAJCQkJfQogCQkJfQotCQkJCisKIAkJCWlmIChyeF9wdXQgPT0gQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPKSB7CiAJCQkJcnhfcHV0ID0gMDsKIAkJCQlpZiAoMCA9PSBidWZfaW5mby5yeF9nZXQpIHsKIAkJCQkJYnVmX2luZm8ucnhfZ2V0ID0gMTsKIAkJCQl9Ci0JCQkKKwogCQkJfQotCQkJCisKIAkJfQogCQlpZiAoc3BhY2UgPCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gLyA0KSB7CiAJCQkvKiBTdG9wIGZsb3cgYnkgc2V0dGluZyBSVFMgaW5hY3RpdmUgKi8KQEAgLTMwOSwyMCArMzA4LDIwIEBACiAJCWJ1Zl9pbmZvLmN0cyA9IDA7CiAJfQogCi0JaXJxX2luc3RhbGxfaGFuZGxlciAoIFZFQ05VTV9VMCAvKlVBUlQwICovLyppbnQgdmVjICovICwKKwlpcnFfaW5zdGFsbF9oYW5kbGVyICggVkVDTlVNX1UwIC8qVUFSVDAgKi8gLyppbnQgdmVjICovICwKIAkJCSAgICAgIHNlcmlhbF9pc3IgLyppbnRlcnJ1cHRfaGFuZGxlcl90ICpoYW5kbGVyICovICwKIAkJCSAgICAgICh2b2lkICopICZidWZfaW5mbyAvKnZvaWQgKmFyZyAqLyApOwogCiAJLyogRW5hYmxlICJSWCBEYXRhIEF2YWlsYWJsZSIgSW50ZXJydXB0IG9uIFVBUlQgKi8KIAkvKiBvdXRiKGluYihVQVJUMF9CQVNFICsgVUFSVF9JRVIpIHwweDAxLCBVQVJUMF9CQVNFICsgVUFSVF9JRVIpOyAqLwogCW91dGIoMHgwMSwgVUFSVDBfQkFTRSArIFVBUlRfSUVSKTsKLQkKKwogCS8qIFNldCBEVFIgYW5kIFJUUyBhY3RpdmUsIGVuYWJsZSBpbnRlcnJ1cHRzICAqLwogCW91dGIoaW5iIChVQVJUMF9CQVNFICsgVUFSVF9NQ1IpIHwgMHgwYiwgVUFSVDBfQkFTRSArIFVBUlRfTUNSKTsKLQkKKwogCS8qIFNldHVwIFVBUlQgRklGTzogUlggdHJpZ2dlciBsZXZlbDogMSBieXRlLCBFbmFibGUgRklGTyAqLwogCW91dGIoIC8qKDEgPDwgNikgfCovICAxLCBVQVJUMF9CQVNFICsgVUFSVF9GQ1IpOwotCQorCiAJc2VyaWFsX2J1ZmZlcl9hY3RpdmUgPSAxOwogfQogCkBAIC0zNDgsNyArMzQ3LDcgQEAKIAkJCWJ1Zl9pbmZvLmN0cyA9IDE7CiAJCX0KIAl9Ci0JCQorCiAjZW5kaWYKIAlzZXJpYWxfcHV0YyAoYyk7CiB9CkBAIC01MDgsNCArNTA3LDMgQEAKIH0KICNlbmRpZgkvKiAoQ09ORklHX0tHREJfU0VSX0lOREVYICYgMikgKi8KICNlbmRpZgkvKiBDRkdfQ01EX0tHREIgKi8KLQpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc3RhcnQuUyBiL2NwdS9pMzg2L3N0YXJ0LlMKaW5kZXggMDI1NTU1Yy4uYWZjYmIyNCAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc3RhcnQuUworKysgYi9jcHUvaTM4Ni9zdGFydC5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZSAKKyAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZQogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIJT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICAqCkBAIC0yNiw3MSArMjYsNzEgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKLQkKKwogLnNlY3Rpb24gLnRleHQKIC5jb2RlMzIKIC5nbG9ibCBfc3RhcnQKLS50eXBlIF9zdGFydCwgQGZ1bmN0aW9uCQorLnR5cGUgX3N0YXJ0LCBAZnVuY3Rpb24KIC5nbG9ibCBfaTM4NmJvb3Rfc3RhcnQKIF9pMzg2Ym9vdF9zdGFydDoKLV9zdGFydDoJCQotICAgICAgICBtb3ZsICAgICQweDE4LCVlYXggICAgICAgICAJLyogTG9hZCBvdXIgc2VnZW1lbnQgcmVnaXN0ZXMsIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCi0gICAgICAgIG1vdncgICAgJWF4LCVmcworX3N0YXJ0OgorCW1vdmwgICAgJDB4MTgsJWVheCAgICAgICAgIAkvKiBMb2FkIG91ciBzZWdlbWVudCByZWdpc3RlcywgdGhlCisJCQkJCSAqIGdkdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYnkgc3RhcnQxNi5TICovCisJbW92dyAgICAlYXgsJWZzCiAJbW92dwklYXgsJWRzCi0gICAgICAgIG1vdncgICAgJWF4LCVncwotICAgICAgICBtb3Z3ICAgICVheCwlZXMKLSAgICAgICAgbW92dyAgICAlYXgsJXNzCi0JCisJbW92dyAgICAlYXgsJWdzCisJbW92dyAgICAlYXgsJWVzCisJbW92dyAgICAlYXgsJXNzCisKIAkvKiBXZSBjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgYm9hcmQgc3VwcG9ydCBwYWNrYWdlCiAJICogc2luY2Ugd2UgaGF2ZSBubyBzdGFjayB5ZXQgd2UnbGwgaGF2ZSB0byB1c2UgJWVicAogCSAqIHRvIHN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyAqLwotCQorCiAJLyogRWFybHkgcGxhdGZvcm0gaW5pdCAoc2V0dXAgZ3BpbywgZXRjICkgKi8KIAltb3YgICAgICRlYXJseV9ib2FyZF9pbml0X3JldCwgJWVicAogCWptcAllYXJseV9ib2FyZF9pbml0CiBlYXJseV9ib2FyZF9pbml0X3JldDoKLQkKKwogCS8qIFRoZSBfX3BvcnQ4MCBlbnRyeS1wb2ludCBzaG91bGQgYmUgdXNhYmUgYnkgbm93ICovCiAJLyogc28gd2UgdHJ5IHRvIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwMSwgJWF4ICAgIAorCW1vdncJJDB4MDEsICVheAogCW1vdmwJJC5wcm9ncmVzczAsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczA6ICAJCisucHJvZ3Jlc3MwOgogCiAJLyogc2l6ZSBtZW1vcnkgKi8KIAltb3YJJG1lbV9pbml0X3JldCwgJWVicAotCWptcCAgICAgbWVtX2luaXQJCQorCWptcCAgICAgbWVtX2luaXQKIG1lbV9pbml0X3JldDoKLQkKLQkvKiBjaGVjayBhbW1vdW50IG9mIGNvbmZpZ3VyZWQgbWVtb3J5IAotCSAqICh3ZSBuZWVkIGF0bGVhc3QgYnNzIHN0YXJ0K2JzcyBzaXplK3N0YWNrIHNpemUpICovCQkKKworCS8qIGNoZWNrIGFtbW91bnQgb2YgY29uZmlndXJlZCBtZW1vcnkKKwkgKiAod2UgbmVlZCBhdGxlYXN0IGJzcyBzdGFydCtic3Mgc2l6ZStzdGFjayBzaXplKSAqLwogCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlY3ggICAgICAgIC8qIEJTUyBzdGFydCAqLwotCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCQorCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCiAJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlY3gKLQljbXBsCSVlY3gsICVlYXggCisJY21wbAklZWN4LCAlZWF4CiAJamFlCW1lbV9vawotCQorCiAJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCi0JbW92dwkkMHg4MSwgJWF4ICAgIAorCW1vdncJJDB4ODEsICVheAogCW1vdmwJJC5wcm9ncmVzczBhLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MwYTogIAkKKy5wcm9ncmVzczBhOgogCWptcCAJZGllCi1tZW1fb2s6CQorbWVtX29rOgogCiAJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDAyLCAlYXggICAgCisJbW92dwkkMHgwMiwgJWF4CiAJbW92bAkkLnByb2dyZXNzMSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMTogIAkKKy5wcm9ncmVzczE6CiAKIAkvKiBjcmVhdGUgYSBzdGFjayBhZnRlciB0aGUgYnNzICovCi0gICAgICAgIG1vdmwgICAgJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXgKKwltb3ZsICAgICRfaTM4NmJvb3RfYnNzX3N0YXJ0LCAlZWF4CiAJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWF4CiAJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlYXgKLSAgICAgICAgbW92bCAgICAlZWF4LCAlZXNwCi0JCisJbW92bCAgICAlZWF4LCAlZXNwCisKIAlwdXNobAkkMAogCXBvcGwJJWVheAogCWNtcGwJJDAsICVlYXgKQEAgLTEwMiw4MyArMTAyLDgzIEBACiAKIG5vX3N0YWNrOgogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODIsICVheCAgICAKKwltb3Z3CSQweDgyLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MxYSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMWE6ICAJCisucHJvZ3Jlc3MxYToKIAlqbXAgZGllCi0JCi0JCi1zdGFja19vazoJCisKKworc3RhY2tfb2s6CiAJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDAzLCAlYXggICAgCisJbW92dwkkMHgwMywgJWF4CiAJbW92bAkkLnByb2dyZXNzMiwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMjogIAkKKy5wcm9ncmVzczI6CiAKIAkvKiBjb3B5IGRhdGEgc2VjdGlvbiB0byByYW0sIHNpemUgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCAqLwogCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX2Rlc3QsICVlZGkJICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0gCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LCAlZXNpCSAgLyogc291cmNlIGFkZHJlc3MgKi8KKwltb3ZsCSRfaTM4NmJvb3Rfcm9tZGF0YV9zdGFydCwgJWVzaQkgIC8qIHNvdXJjZSBhZGRyZXNzICovCiAJbW92bAkkX2kzODZib290X3JvbWRhdGFfc2l6ZSwgJWVjeCAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KIAltb3ZsCSVlY3gsICVlYXgKIAlhbmRsCSQzLCAlZWF4CiAJam56CWRhdGFfZmFpbAotCQorCiAJc2hybAkkMiwgJWVjeAkgICAgICAgICAgICAgICAgICAvKiBjb3B5IDQgYnl0ZSBlYWNoIHRpbWUgKi8KLQljbGQJIAorCWNsZAogCWNtcGwJJDAsICVlY3gKLQlqZQlkYXRhX29rCQotZGF0YV9zZWdtZW50OgkKLQltb3ZzbAkJCisJamUJZGF0YV9vaworZGF0YV9zZWdtZW50OgorCW1vdnNsCiAJbG9vcAlkYXRhX3NlZ21lbnQKIAlqbXAJZGF0YV9vawogZGF0YV9mYWlsOgogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODMsICVheCAgICAKKwltb3Z3CSQweDgzLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MyYSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMmE6ICAJCisucHJvZ3Jlc3MyYToKIAlqbXAgCWRpZQogCi1kYXRhX29rOgkKK2RhdGFfb2s6CiAKIAkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwotCW1vdncJJDB4MDQsICVheCAgICAKKwltb3Z3CSQweDA0LCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MzLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MzOiAgCQorLnByb2dyZXNzMzoKIAogCS8qIGNsZWFyIGJzcyBzZWN0aW9uIGluIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICAqLwogCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXggICAgICAgIC8qIEJTUyBzdGFydCAqLwotCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCQorCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCiAJbW92bAklZWN4LCAlZWF4CiAJYW5kbAkkMywgJWVheAogCWpueglic3NfZmFpbAogCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY2xlYXIgNCBieXRlIGVhY2ggdGltZSAqLwotCWNsZAkJICAgICAgCisJY2xkCiAJY21wbAkkMCwgJWVjeAotCWplCWJzc19vawkKLWJzczoJCisJamUJYnNzX29rCitic3M6CiAJbW92bAkkMCwgKCVlZGkpCi0JYWRkCSQ0LCAlZWRpCQkJCisJYWRkCSQ0LCAlZWRpCiAJbG9vcAlic3MKIAlqbXAgCWJzc19vawogCiBic3NfZmFpbDoKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDg0LCAlYXggICAgCisJbW92dwkkMHg4NCwgJWF4CiAJbW92bAkkLnByb2dyZXNzM2EsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczNhOiAgCQorLnByb2dyZXNzM2E6CiAJam1wIAlkaWUKIAotYnNzX29rOgkKK2Jzc19vazoKIAotCXdiaW52ZAkgCisJd2JpbnZkCiAKIAogCS8qIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwNSwgJWF4ICAgIAorCW1vdncJJDB4MDUsICVheAogCW1vdmwJJC5wcm9ncmVzczQsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKIC5wcm9ncmVzczQ6CkBAIC0xODYsMTMgKzE4NiwxMSBAQAogCWNhbGwJc3RhcnRfaTM4NmJvb3QgIC8qIEVudGVyLCBVLWJvb3QhICovCiAKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDg1LCAlYXggICAgCisJbW92dwkkMHg4NSwgJWF4CiAJbW92bAkkLnByb2dyZXNzNGEsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKIC5wcm9ncmVzczRhOgogCiBkaWU6CWhsdAogCWptcAlkaWUKLQlobHQgICAgICAgICAgICAgICAgICAgICAKLQotCisJaGx0CmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zdGFydDE2LlMgYi9jcHUvaTM4Ni9zdGFydDE2LlMKaW5kZXggYTM0NjQyZi4uMjM5ZjJmZiAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc3RhcnQxNi5TCisrKyBiL2NwdS9pMzg2L3N0YXJ0MTYuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUgCisgKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIE9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAgKgpAQCAtMzAsMzcgKzMwLDM3IEBACiAuc2VjdGlvbiAuc3RhcnQxNiwgImF4IgogLmNvZGUxNgogLmdsb2JsIHN0YXJ0MTYKLXN0YXJ0MTY6IAorc3RhcnQxNjoKIAkvKiBGaXJzdCB3ZSBsZXQgdGhlIEJTUCBkbyBzb21lIGVhcmx5IGluaXRpYWxpemF0aW9uCiAJICogdGhpcyBjb2RlIGhhdmUgdG8gbWFwIHRoZSBmbGFzaCB0byBpdHMgZmluYWwgcG9zaXRpb24KIAkgKi8KIAltb3YJJGJvYXJkX2luaXQxNl9yZXQsICVicAogCWptcAlib2FyZF9pbml0MTYKLWJvYXJkX2luaXQxNl9yZXQ6CQotCQorYm9hcmRfaW5pdDE2X3JldDoKKwogCS8qIFR1cm4gb2YgY2FjaGUgKHRoaXMgbWlnaHQgcmVxdWlyZSBhIDQ4Ni1jbGFzcyBDUFUpICovCi0gICAgICAgIG1vdmwgICAgJWNyMCwgJWVheAotICAgICAgICBvcmwgICAgICQweDYwMDAwMDAwLCVlYXgKLSAgICAgICAgbW92bCAgICAlZWF4LCAlY3IwCi0gICAgICAgIHdiaW52ZCAgCQkgICAgIAotCQorCW1vdmwgICAgJWNyMCwgJWVheAorCW9ybCAgICAgJDB4NjAwMDAwMDAsJWVheAorCW1vdmwgICAgJWVheCwgJWNyMAorCXdiaW52ZAorCiAJLyogbG9hZCB0aGUgZGVzY3JpcHRvciB0YWJsZXMgKi8KIG8zMiBjcwlsaWR0CWlkdF9wdHIKLW8zMiBjcwlsZ2R0ICAgIGdkdF9wdHIJCSAKK28zMiBjcwlsZ2R0ICAgIGdkdF9wdHIKIAogCiAJLyogTm93LCB3ZSBlbnRlciBwcm90ZWN0ZWQgbW9kZSAqLwotICAgICAgICBtb3ZsICAgICVjcjAsICVlYXggICAgICAgICAgICAgICAKLSAgICAgICAgb3JsICAgICAkMSwlZWF4ICAgICAgICAgICAgICAgICAgCi0gICAgICAgIG1vdmwgICAgJWVheCwgJWNyMCAgICAgICAgICAgIAotCQorCW1vdmwgICAgJWNyMCwgJWVheAorCW9ybCAgICAgJDEsJWVheAorCW1vdmwgICAgJWVheCwgJWNyMAorCiAJLyogRmx1c2ggdGhlIHByZWZldGNoIHF1ZXVlICovCi0gICAgICAgIGptcCAgICAgZmYgICAgICAgIAorCWptcCAgICAgZmYKIGZmOgogCiAJLyogRmluYWxseSBqdW1wIHRvIHRoZSAzMmJpdCBpbml0aWFsaXphdGlvbiBjb2RlICovCi0JbW92dwkkY29kZTMyc3RhcnQsICVheCAKLSAgICAgICAgbW92dyAgICAlYXgsJWJwCisJbW92dwkkY29kZTMyc3RhcnQsICVheAorCW1vdncgICAgJWF4LCVicAogbzMyIGNzCWxqbXAJKiglYnApCiAKIAkvKiA0OC1iaXQgZmFyIHBvaW50ZXIgKi8KQEAgLTcxLDE3ICs3MSwxNyBAQAogaWR0X3B0cjoKIAkud29yZAkwCQkJCS8qIGxpbWl0ICovCiAJLmxvbmcJMAkJICAgICAgIAkJLyogYmFzZSAqLwotCQorCiBnZHRfcHRyOgogCS53b3JkCTB4MzAJCQkgICAgICAgIC8qIGxpbWl0ICg0OCBieXRlcyA9IDYgR0RUIGVudHJpZXMpICovCiAJLmxvbmcJQk9PVF9TRUcgKyBnZHQJICAgICAgICAJLyogYmFzZSAqLwogCi0JLyogVGhlIEdEVCB0YWJsZSAuLi4gCisJLyogVGhlIEdEVCB0YWJsZSAuLi4KIAkgKgotCSAqICAgICAgIFNlbGVjdG9yCVR5cGUgCisJICogICAgICAgU2VsZWN0b3IJVHlwZQogCSAqIAkgMHgwMAkJTlVMTAogCSAqIAkgMHgwOAkJVW51c2VkCi0JICoJIDB4MTAJCTMyYml0IGNvZGUgCisJICoJIDB4MTAJCTMyYml0IGNvZGUKIAkgKgkgMHgxOAkJMzJiaXQgZGF0YS9zdGFjawogCSAqCSAweDIwCQkxNmJpdCBjb2RlCiAJICoJIDB4MjgJIAkxNmJpdCBkYXRhL3N0YWNrCkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCS53b3JkCTB4MAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5MzAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwogCS53b3JkCTB4MDBDRgkJCQkvKiBncmFudWxhcml0eSA9IDQwOTYsIDM4NiAoKzV0aCBuaWJibGUgb2YgbGltaXQpICovCi0JCQkJCQkKKwogCS53b3JkCTB4RkZGRgkJCQkvKiA2NGtiICovCiAJLndvcmQJMAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5YjAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwogCS53b3JkCTB4MDAxMAkJCQkvKiBncmFudWxhcml0eSA9IDEgICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KLQkKKwogCS53b3JkCTB4RkZGRgkJCQkvKiA2NGtiICovCiAJLndvcmQJMAkJCQkvKiBiYXNlIGFkZHJlc3MgPSAwICovCiAJLndvcmQJMHg5MzAwCQkJCS8qIGRhdGEgcmVhZC93cml0ZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvdGltZXIuYyBiL2NwdS9pMzg2L3RpbWVyLmMKaW5kZXggYTIzY2Q2ZS4uNDg2ZDkyNyAxMDA2NDQKLS0tIGEvY3B1L2kzODYvdGltZXIuYworKysgYi9jcHUvaTM4Ni90aW1lci5jCkBAIC00NiwyOCArNDYsMjggQEAKIGludCB0aW1lcl9pbml0KHZvaWQpCiB7CiAJc3lzdGVtX3RpY2tzID0gMDsKLQkKKwogCWlycV9pbnN0YWxsX2hhbmRsZXIoMCwgdGltZXJfaXNyLCBOVUxMKTsKLQkKLQkvKiBpbml0aWFsaXplIHRpbWVyIDAgYW5kIDIgCi0JICogCisKKwkvKiBpbml0aWFsaXplIHRpbWVyIDAgYW5kIDIKKwkgKgogCSAqIFRpbWVyIDAgaXMgdXNlZCB0byBpbmNyZW1lbnQgc3lzdGVtX3RpY2sgMTAwMCB0aW1lcy9zZWMKIAkgKiBUaW1lciAxIHdhcyB1c2VkIGZvciBEUkFNIHJlZnJlc2ggaW4gZWFybHkgUEMncwogCSAqIFRpbWVyIDIgaXMgdXNlZCB0byBkcml2ZSB0aGUgc3BlYWtlcgogCSAqICh0byBzdGFzcnQgYSBiZWVwOiB3cml0ZSAzIHRvIHBvcnQgMHg2MSwKIAkgKiB0byBzdG9wIGl0IGFnYWluOiB3cml0ZSAwKQogCSAqLwotCQkKLSAgICAgICAgb3V0YihQSVRfQ01EX0NUUjB8UElUX0NNRF9CT1RIfFBJVF9DTURfTU9ERTIsIFBJVF9CQVNFICsgUElUX0NPTU1BTkQpOworCisJb3V0YihQSVRfQ01EX0NUUjB8UElUX0NNRF9CT1RIfFBJVF9DTURfTU9ERTIsIFBJVF9CQVNFICsgUElUX0NPTU1BTkQpOwogCW91dGIoVElNRVIwX1ZBTFVFJjB4ZmYsIFBJVF9CQVNFICsgUElUX1QwKTsKIAlvdXRiKFRJTUVSMF9WQUxVRT4+OCwgUElUX0JBU0UgKyBQSVRfVDApOwogCi0gICAgICAgIG91dGIoUElUX0NNRF9DVFIyfFBJVF9DTURfQk9USHxQSVRfQ01EX01PREUzLCBQSVRfQkFTRSArIFBJVF9DT01NQU5EKTsKKwlvdXRiKFBJVF9DTURfQ1RSMnxQSVRfQ01EX0JPVEh8UElUX0NNRF9NT0RFMywgUElUX0JBU0UgKyBQSVRfQ09NTUFORCk7CiAJb3V0YihUSU1FUjJfVkFMVUUmMHhmZiwgUElUX0JBU0UgKyBQSVRfVDIpOwogCW91dGIoVElNRVIyX1ZBTFVFPj44LCBQSVRfQkFTRSArIFBJVF9UMik7CiAKIAl0aW1lcl9pbml0X2RvbmUgPSAxOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3LDcgKzg3LDcgQEAKIAlyZXR1cm4gKHN5c3RlbV90aWNrcyAtIGJhc2UpOwogfQogCi12b2lkIHNldF90aW1lciAodWxvbmcgdCkJCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKIHsKIAlzeXN0ZW1fdGlja3MgPSB0OwogfQpAQCAtMTAyLDIwICsxMDIsMjAgQEAKIAogLyogdGhpcyBpcyBub3QgdmVyeSBleGFjdCAqLwogdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKLXsJCit7CiAJaW50IGNvdW50ZXI7CiAJaW50IHdyYXBzOwotCQorCiAJaWYgKCF0aW1lcl9pbml0X2RvbmUpIHsKIAkJcmV0dXJuOwogCX0KIAljb3VudGVyID0gcmVhZF9waXQoKTsKIAl3cmFwcyA9IHVzZWMvMTAwMDsKIAl1c2VjID0gdXNlYyUxMDAwOwotCQorCiAJdXNlYyo9MTE5NDsKIAl1c2VjLz0xMDAwOwotCXVzZWMrPWNvdW50ZXI7IAorCXVzZWMrPWNvdW50ZXI7CiAJaWYgKHVzZWMgPiAxMTk0KSB7CiAJCXVzZWMtPTExOTQ7CiAJCXdyYXBzKys7CkBAIC0xMjMsMjYgKzEyMywyNiBAQAogCiAJd2hpbGUgKDEpIHsKIAkJaW50IG5ld19jb3VudCA9IHJlYWRfcGl0KCk7Ci0JCQorCiAJCWlmICgoKG5ld19jb3VudCA8IHVzZWMpICYmICF3cmFwcykgfHwgd3JhcHMgPCAwKSB7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlpZiAobmV3X2NvdW50ID4gY291bnRlcikgewogCQkJd3JhcHMtLTsKIAkJfQogCQljb3VudGVyID0gbmV3X2NvdW50OwogCX0KLQkKKwogfQogCiAjaWYgMAogLyogdGhpcyBpcyBhIHZlcnNpb24gd2l0aCBkZWJ1ZyBvdXRwdXQgKi8KIHZvaWQgX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQotewkKK3sKIAlpbnQgY291bnRlcjsKIAlpbnQgd3JhcHM7Ci0JCisKIAlpbnQgdXNlYzEsIHVzZWMyLCB1c2VjMzsKIAlpbnQgd3JhcHMxLCB3cmFwczIsIHdyYXBzMywgd3JhcHM0OwogCWludCBjdHIxLCBjdHIyLCBjdHIzLCBuY3QxLCBuY3QyOwpAQCAtMTU1LDEzICsxNTUsMTMgQEAKIAljdHIxID0gY291bnRlcjsKIAl3cmFwcyA9IHVzZWMvMTAwMDsKIAl1c2VjID0gdXNlYyUxMDAwOwotCQorCiAJdXNlYzIgPSB1c2VjOwogCXdyYXBzMSA9IHdyYXBzOwotCQorCiAJdXNlYyo9MTE5NDsKIAl1c2VjLz0xMDAwOwotCXVzZWMrPWNvdW50ZXI7IAorCXVzZWMrPWNvdW50ZXI7CiAJaWYgKHVzZWMgPiAxMTk0KSB7CiAJCXVzZWMtPTExOTQ7CiAJCXdyYXBzKys7CkBAIC0xNjksNyArMTY5LDcgQEAKIAogCXVzZWMzID0gdXNlYzsKIAl3cmFwczIgPSB3cmFwczsKLQkKKwogCWN0cjIgPSB3cmFwczMgPSBuY3QxID0gNDcxMTsKIAljdHIzID0gd3JhcHM0ID0gbmN0MiA9IDQ3MTE7CiAJaT0wOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCWlmICgobmV3X2NvdW50IDwgdXNlYyAmJiAhd3JhcHMpIHx8IHdyYXBzIDwgMCkgewogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJaWYgKG5ld19jb3VudCA+IGNvdW50ZXIpIHsKIAkJCXdyYXBzLS07CiAJCX0KQEAgLTE5MiwxMCArMTkyLDEwIEBACiAJCQl3cmFwczQgPSB3cmFwczsKIAkJCW5jdDIgPSBuZXdfY291bnQ7CiAJCX0KLQkJCisKIAkJY291bnRlciA9IG5ld19jb3VudDsKIAl9Ci0JCisKIAlwcmludGYoInVkZWxheSglZClcbiIsIHVzZWMxKTsKIAlwcmludGYoImNvdW50ZXIgJWRcbiIsIGN0cjEpOwogCXByaW50ZigiMTogd3JhcHMgJWQsIHVzZWMgJWRcbiIsIHdyYXBzMSwgdXNlYzIpOwo=