ZGlmZiAtLWdpdCBhL2F2MS9lbmNvZGVyL2VuY29kZXIuaCBiL2F2MS9lbmNvZGVyL2VuY29kZXIuaAppbmRleCBlODhiMGUwLi41YjhkMjVhIDEwMDY0NAotLS0gYS9hdjEvZW5jb2Rlci9lbmNvZGVyLmgKKysrIGIvYXYxL2VuY29kZXIvZW5jb2Rlci5oCkBAIC0zNzksNyArMzc5LDEyIEBACiAgIGJvb2wgZW5hYmxlX2ludHJhYmM7CiB9IEtleUZyYW1lQ2ZnOwogCisvKiFcZW5kY29uZCAqLworLyohCisgKiBcYnJpZWYgRW5jb2RlciByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKi8KIHR5cGVkZWYgc3RydWN0IHsKKyAgLyohXGNvbmQgKi8KICAgLy8gQlVGRkVSSU5HIFBBUkFNRVRFUlMKICAgLy8gSW5kaWNhdGVzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdpbGwgYmUgYnVmZmVyZWQgYnkgdGhlIGRlY29kaW5nCiAgIC8vIGFwcGxpY2F0aW9uIHByaW9yIHRvIGJlZ2lubmluZyBwbGF5YmFjaywgYW5kIGlzIGV4cHJlc3NlZCBpbiB1bml0cyBvZgpAQCAtNDIxLDggKzQyNiwxMCBAQAogICAvLyBJbmRpY2F0ZXMgaWYgdGhlIGVuY29kaW5nIG1vZGUgaXMgdmJyLCBjYnIsIGNvbnN0cmFpbmVkIHF1YWxpdHkgb3IgY29uc3RhbnQKICAgLy8gcXVhbGl0eS4KICAgZW51bSBhb21fcmNfbW9kZSBtb2RlOworICAvKiFcZW5kY29uZCAqLwogfSBSYXRlQ29udHJvbENmZzsKIAorLyohXGNvbmQgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgLy8gSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZnJhbWVzIGxhZyBiZWZvcmUgZW5jb2RpbmcgaXMgc3RhcnRlZC4KICAgaW50IGxhZ19pbl9mcmFtZXM7CkBAIC01OTAsNyArNTk3LDEyIEBACiAgIGJvb2wgdXNpbmdfcW07CiB9IFF1YW50aXphdGlvbkNmZzsKIAorLyohXGVuZGNvbmQgKi8KKy8qIQorICogXGJyaWVmIE1haW4gZW5jb2RlciBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlLgorICovCiB0eXBlZGVmIHN0cnVjdCBBVjFFbmNvZGVyQ29uZmlnIHsKKyAgLyohXGNvbmQgKi8KICAgQklUU1RSRUFNX1BST0ZJTEUgcHJvZmlsZTsKICAgYW9tX2JpdF9kZXB0aF90IGJpdF9kZXB0aDsgICAgIC8vIENvZGVjIGJpdC1kZXB0aC4KICAgdW5zaWduZWQgaW50IGlucHV0X2JpdF9kZXB0aDsgIC8vIElucHV0IGJpdCBkZXB0aC4KQEAgLTYxMyw4ICs2MjUsMTIgQEAKICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAvLyBEQVRBUkFURSBDT05UUk9MIE9QVElPTlMKIAotICAvLyBDb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gcmF0ZSBjb250cm9sLgorICAvKiFcZW5kY29uZCAqLworICAvKiEKKyAgICogUmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24KKyAgICovCiAgIFJhdGVDb250cm9sQ2ZnIHJjX2NmZzsKKyAgLyohXGNvbmQgKi8KIAogICAvLyBGcmFtZSBkcm9wIHRocmVzaG9sZC4KICAgaW50IGRyb3BfZnJhbWVzX3dhdGVyX21hcms7CkBAIC03NDEsMTIgKzc1NywxNCBAQAogICAvLyBjb25mb3JtcyB0by4KICAgdW5zaWduZWQgaW50IHRpZXJfbWFzazsKICAgY29uc3QgY2ZnX29wdGlvbnNfdCAqZW5jb2Rlcl9jZmc7CisKKyAgLyohXGVuZGNvbmQgKi8KIH0gQVYxRW5jb2RlckNvbmZpZzsKIAorLyohXGNvbmQgKi8KIHN0YXRpYyBJTkxJTkUgaW50IGlzX2xvc3NsZXNzX3JlcXVlc3RlZChjb25zdCBSYXRlQ29udHJvbENmZyAqY29uc3QgcmNfY2ZnKSB7CiAgIHJldHVybiByY19jZmctPmJlc3RfYWxsb3dlZF9xID09IDAgJiYgcmNfY2ZnLT53b3JzdF9hbGxvd2VkX3EgPT0gMDsKIH0KLQogLyohXGVuZGNvbmQgKi8KIAogLyohCkBAIC0xOTc3LDYgKzE5OTUsNyBAQAogICAgKiBzcGVlZCBpcyBwYXNzZWQgYXMgYSBwZXItZnJhbWUgcGFyYW1ldGVyIGludG8gdGhlIGVuY29kZXIuCiAgICAqLwogICBpbnQgc3BlZWQ7CisKICAgLyohCiAgICAqIHNmIGNvbnRhaW5zIGZpbmUtZ3JhaW5lZCBjb25maWcgc2V0IGludGVybmFsbHkgYmFzZWQgb24gc3BlZWQuCiAgICAqLwpkaWZmIC0tZ2l0IGEvYXYxL2VuY29kZXIvZmlyc3RwYXNzLmggYi9hdjEvZW5jb2Rlci9maXJzdHBhc3MuaAppbmRleCA2Zjg1ZDQ4Li42MjJhMWUyIDEwMDY0NAotLS0gYS9hdjEvZW5jb2Rlci9maXJzdHBhc3MuaAorKysgYi9hdjEvZW5jb2Rlci9maXJzdHBhc3MuaApAQCAtMTk2LDcgKzE5NiwxMyBAQAogICBGSVJTVFBBU1NfU1RBVFMgKnRvdGFsX2xlZnRfc3RhdHM7CiB9IFNUQVRTX0JVRkZFUl9DVFg7CiAKKy8qIVxlbmRjb25kICovCisKKy8qIQorICogXGJyaWVmIFR3byBwYXNzIHN0YXR1cyBhbmQgY29udHJvbCBkYXRhLgorICovCiB0eXBlZGVmIHN0cnVjdCB7CisgIC8qIVxjb25kICovCiAgIHVuc2lnbmVkIGludCBzZWN0aW9uX2ludHJhX3JhdGluZzsKICAgLy8gQ2lyY3VsYXIgcXVldWUgb2YgZmlyc3QgcGFzcyBzdGF0cyBzdG9yZWQgZm9yIG1vc3QgcmVjZW50IGZyYW1lcy4KICAgLy8gY3BpLT5vdXRwdXRfcGt0X2xpc3RbaV0uZGF0YS50d29wYXNzX3N0YXRzLmJ1ZiBwb2ludHMgdG8gYWN0dWFsIGRhdGEgc3RvcmVkCkBAIC0yMzYsOCArMjQyLDExIEBACiAgIGludCBleHRlbmRfbWlucTsKICAgaW50IGV4dGVuZF9tYXhxOwogICBpbnQgZXh0ZW5kX21pbnFfZmFzdDsKKyAgLyohXGVuZGNvbmQgKi8KIH0gVFdPX1BBU1M7CiAKKy8qIVxjb25kICovCisKIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHNldmVyYWwga2V5IHBhcmFtZXRlcnMgdG8gYmUgYWNjdW11bGF0ZWQgZm9yIHRoaXMKIC8vIGZyYW1lLgogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXYxL2VuY29kZXIvcmF0ZWN0cmwuaCBiL2F2MS9lbmNvZGVyL3JhdGVjdHJsLmgKaW5kZXggZjMyMTAxZC4uMGMxYTRjNyAxMDA2NDQKLS0tIGEvYXYxL2VuY29kZXIvcmF0ZWN0cmwuaAorKysgYi9hdjEvZW5jb2Rlci9yYXRlY3RybC5oCkBAIC0zMjcsMTAgKzMyNywzMyBAQAogdm9pZCBhdjFfcmNfc2V0X2ZyYW1lX3RhcmdldChzdHJ1Y3QgQVYxX0NPTVAgKmNwaSwgaW50IHRhcmdldCwgaW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0KTsKIAorLyohXGVuZGNvbmQgKi8KKy8qIVxicmllZiBDYWxjdWxhdGVzIGhvdyBtYW55IGJpdHMgdG8gdXNlIGZvciBhIFAgZnJhbWUgaW4gb25lIHBhc3MgdmJyCisgKgorICogXGluZ3JvdXAgcmF0ZV9jb250cm9sCisgKiBcY2FsbGdyYXBoCisgKiBcY2FsbGVyZ3JhcGgKKyAqCisgKiBccGFyYW1baW5dICAgICAgIGNwaSAgICAgICAgICAgICAgICAgVG9wIGxldmVsIGVuY29kZXIgc3RydWN0dXJlCisgKiBccGFyYW1baW5dICAgICAgIGZyYW1lX3VwZGF0ZV90eXBlICAgVHlwZSBvZiBmcmFtZQorICoKKyAqIFxyZXR1cm4JUmV0dXJucyB0aGUgdGFyZ2V0IG51bWJlciBvZiBiaXRzIGZvciB0aGlzIGZyYW1lLgorICovCiBpbnQgYXYxX2NhbGNfcGZyYW1lX3RhcmdldF9zaXplX29uZV9wYXNzX3ZicigKICAgICBjb25zdCBzdHJ1Y3QgQVYxX0NPTVAgKmNvbnN0IGNwaSwgRlJBTUVfVVBEQVRFX1RZUEUgZnJhbWVfdXBkYXRlX3R5cGUpOwogCisvKiFcYnJpZWYgQ2FsY3VsYXRlcyBob3cgbWFueSBiaXRzIHRvIHVzZSBmb3IgYW4gaSBmcmFtZSBpbiBvbmUgcGFzcyB2YnIKKyAqCisgKiBcaW5ncm91cCByYXRlX2NvbnRyb2wKKyAqIFxjYWxsZ3JhcGgKKyAqIFxjYWxsZXJncmFwaAorICoKKyAqIFxwYXJhbVtpbl0gICAgICAgY3BpICBUb3AgbGV2ZWwgZW5jb2RlciBzdHJ1Y3R1cmUKKyAqCisgKiBccmV0dXJuCVJldHVybnMgdGhlIHRhcmdldCBudW1iZXIgb2YgYml0cyBmb3IgdGhpcyBmcmFtZS4KKyAqLwogaW50IGF2MV9jYWxjX2lmcmFtZV90YXJnZXRfc2l6ZV9vbmVfcGFzc192YnIoY29uc3Qgc3RydWN0IEFWMV9DT01QICpjb25zdCBjcGkpOworLyohXGNvbmQgKi8KIAogaW50IGF2MV9jYWxjX3BmcmFtZV90YXJnZXRfc2l6ZV9vbmVfcGFzc19jYnIoCiAgICAgY29uc3Qgc3RydWN0IEFWMV9DT01QICpjcGksIEZSQU1FX1VQREFURV9UWVBFIGZyYW1lX3VwZGF0ZV90eXBlKTsKZGlmZiAtLWdpdCBhL2F2MS9lbmNvZGVyL3NwZWVkX2ZlYXR1cmVzLmggYi9hdjEvZW5jb2Rlci9zcGVlZF9mZWF0dXJlcy5oCmluZGV4IDViZWY0ZjYuLjQxZDEzMzkgMTAwNjQ0Ci0tLSBhL2F2MS9lbmNvZGVyL3NwZWVkX2ZlYXR1cmVzLmgKKysrIGIvYXYxL2VuY29kZXIvc3BlZWRfZmVhdHVyZXMuaApAQCAtMTAxMSw3ICsxMDExLDEzIEBACiAgIGludCB1c2VfdGVtcG9yYWxfbm9pc2VfZXN0aW1hdGU7CiB9IFJFQUxfVElNRV9TUEVFRF9GRUFUVVJFUzsKIAorLyohXGVuZGNvbmQgKi8KKworLyohCisgKiBcYnJpZWYgVG9wIGxldmVsIHNwZWVkIHZzIHF1YWxpdHkgdHJhZGUgb2ZmIGRhdGEgc3RydXR1cmUuCisgKi8KIHR5cGVkZWYgc3RydWN0IFNQRUVEX0ZFQVRVUkVTIHsKKyAgLyohXGNvbmQgKi8KICAgLyoKICAgICogU2VxdWVuY2UvZnJhbWUgbGV2ZWwgc3BlZWQgZmVhdHVyZXM6CiAgICAqLwpAQCAtMTA3Niw3ICsxMDgyLDkgQEAKICAgICogUmVhbC10aW1lIG1vZGUgc3BlZWQgZmVhdHVyZXM6CiAgICAqLwogICBSRUFMX1RJTUVfU1BFRURfRkVBVFVSRVMgcnRfc2Y7CisgIC8qIVxlbmRjb25kICovCiB9IFNQRUVEX0ZFQVRVUkVTOworLyohXGNvbmQgKi8KIAogc3RydWN0IEFWMV9DT01QOwogCmRpZmYgLS1naXQgYS9kb2MvZGV2X2d1aWRlL2F2MV9lbmNvZGVyLmRveCBiL2RvYy9kZXZfZ3VpZGUvYXYxX2VuY29kZXIuZG94CmluZGV4IDlmZDQ4ZWQuLjMyYjI3ZGIgMTAwNjQ0Ci0tLSBhL2RvYy9kZXZfZ3VpZGUvYXYxX2VuY29kZXIuZG94CisrKyBiL2RvYy9kZXZfZ3VpZGUvYXYxX2VuY29kZXIuZG94CkBAIC0xMDAsMTEgKzEwMCwyOCBAQAogXHNlY3Rpb24gYXJjaGl0ZWN0dXJlX2VuY19kYXRhX3N0cnVjdHVyZXMgTWFpbiBFbmNvZGVyIERhdGEgU3RydWN0dXJlcwogCiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgbWFpbiBoaWdoIGxldmVsIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBsaWJhb20gQVYxCi1lbmNvZGVyOgorZW5jb2RlciBhbmQgcmVmZXJlbmNlZCBlbHNld2hlcmUgaW4gdGhpcyBvdmVydmlldyBkb2N1bWVudDoKKworVGhlIGZvbGxvd2luZyBhcmUgdGhlIG1haW4gbGliYW9tIGVuY29kZXIgZGF0YSBzdHJ1Y3R1cmVzIHJlZmVyZW5jZWQKK2luIHRoaXMgb3ZlcnZpZXcgZG9jdW1lbnQ6CiAKICAtIFxyZWYgQVYxX0NPTVAKLSAtIEFkZCBkZXRhaWxzLCByZWZlcmVuY2VzIG9yIGxpbmtzIGhlcmU6IFRPRE8gPyB1cnZhbmdACisgICAtIFxyZWYgQVYxX0NPTVAucmMgKChUT0RPIFJFRikgUkFURV9DT05UUk9MKQorICAgLSBccmVmIEFWMV9DT01QLm94Y2YgKFxyZWYgQVYxRW5jb2RlckNvbmZpZykKKyAgIC0gXHJlZiBBVjFfQ09NUC50d29wYXNzIChccmVmIFRXT19QQVNTKQorICAgLSBccmVmIEFWMV9DT01QLmdmX2dyb3VwICgoVE9ETyBSRUYpIEdGX0dST1VQKQorICAgLSBccmVmIEFWMV9DT01QLnNwZWVkCisgICAtIFxyZWYgQVYxX0NPTVAuc2YgKFxyZWYgU1BFRURfRkVBVFVSRVMpCiAKKyAtIEFWMUVuY29kZXJDb25maWcgKEVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzKQorICAgLSBBVjFFbmNvZGVyQ29uZmlnLnJjX2NmZyAoUmF0ZUNvbnRyb2xDZmcpCisKKyAtIChUT0RPIFJFRikgUkFURV9DT05UUk9MIChSYXRlIGNvbnRyb2wgc3RhdHVzKQorIC0gXHJlZiBSYXRlQ29udHJvbENmZyAoUmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24pCisgLSBccmVmIFRXT19QQVNTIChUd28gcGFzcyBzdGF0dXMgYW5kIGNvbnRyb2wgZGF0YSkKKyAtIChUT0RPIFJFRikgR0ZfR1JPVVAgKERhdGEgcmVsYXRpbmcgdG8gdGhlIGN1cnJlbnQgR0YvQVJGIGdyb3VwKQorIC0gXHJlZiBGSVJTVFBBU1NfU1RBVFMgKERlZmluZXMgZW50cmllcyBpbiB0aGUgZmlyc3QgcGFzcyBzdGF0cyBidWZmZXIpCisgLSBccmVmIFNQRUVEX0ZFQVRVUkVTIChFbmNvZGUgc3BlZWQgLyBxdWFsaXR5IHRyYWRlb2ZmIHBhcmFtZXRlcnMpCiAKIFxzZWN0aW9uIGFyY2hpdGVjdHVyZV9lbmNfdXNlX2Nhc2VzIEVuY29kZXIgVXNlIENhc2VzCiAKQEAgLTExNCw3ICsxMzEsNyBAQAogVGhlIHByaW5jaXBsZSB1c2UgY2FzZXMgZm9yIHdoaWNoIGl0IGlzIG9wdGltaXNlZCBhcmUgYXMgZm9sbG93czoKIAogIC0gPGI+VmlkZW8gb24gRGVtYW5kIC8gU3RyZWFtaW5nPC9iPgotIC0gPGI+TG93IERlbGF5IG9yICBMaXZlIFN0cmVhbWluZzwvYj4KKyAtIDxiPkxvdyBEZWxheSBvciBMaXZlIFN0cmVhbWluZzwvYj4KICAtIDxiPlZpZGVvIENvbmZlcmVuY2luZyAvIFJlYWwgVGltZSBDb2RpbmcgKFJUQyk8L2I+CiAgLSA8Yj5GaXhlZCBRdWFsaXR5IC8gVGVzdGluZzwvYj4KIApAQCAtMTI3LDcgKzE0NCw4IEBACiAgLSA8Yj5FZGl0aW5nPC9iPgogIC0gPGI+QnJvYWRjYXN0IHZpZGVvPC9iPgogCi1TcGVjaWZpYyB1c2UgY2FzZXMgbWF5IGhhdmUgcGFydGljdWxhciByZXF1aXJlbWVudHMgb3IgY29uc3RyYWludHMuIEZvciBleGFtcGxlOgorU3BlY2lmaWMgdXNlIGNhc2VzIG1heSBoYXZlIHBhcnRpY3VsYXIgcmVxdWlyZW1lbnRzIG9yIGNvbnN0cmFpbnRzLiBGb3IKK2V4YW1wbGU6CiAKIDxiPlZpZGVvIENvbmZlcmVuY2luZzo8L2I+ICBJbiBhIHZpZGVvIGNvbmZlcmVuY2Ugd2UgbmVlZCB0byBlbmNvZGUgdGhlIHZpZGVvCiBpbiByZWFsIHRpbWUgYW5kIHRvIGF2b2lkIGFueSBjb2RpbmcgdG9vbHMgdGhhdCBjb3VsZCBpbmNyZWFzZSBsYXRlbmN5LCBzdWNoCkBAIC0xOTIsMTMgKzIxMCwxODYgQEAKIAogXHNlY3Rpb24gYXJjaGl0ZWN0dXJlX2VuY19yYXRlX2N0cmwgUmF0ZSBDb250cm9sCiAKLSBBZGQgZGV0YWlscyBoZXJlLgorRGlmZmVyZW50IHVzZSBjYXNlcyBtYXkgaGF2ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIGluIHRlcm1zIG9mIGRhdGEgcmF0ZQorY29udHJvbC4KKworVGhlIGJyb2FkIHJhdGUgY29udHJvbCBzdHJhdGVneSBpcyBzZWxlY3RlZCB1c2luZyB0aGUgPGI+LS1lbmQtdXNhZ2U8L2I+CitwYXJhbWV0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSwgd2hpY2ggbWFwcyBvbnRvIHRoZSBmaWVsZAorXHJlZiBhb21fY29kZWNfZW5jX2NmZ190LnJjX2VuZF91c2FnZSBpbiBccmVmIGFvbV9lbmNvZGVyLmguCisKK1RoZSBmb3VyIHN1cHBvcnRlZCBvcHRpb25zIGFyZTotCisKKy0gPGI+VkJSPC9iPiAoVmFyaWFibGUgQml0cmF0ZSkKKy0gPGI+Q0JSPC9iPiAoQ29uc3RhbnQgQml0cmF0ZSkKKy0gPGI+Q1E8L2I+IChDb25zdHJhaW5lZCBRdWFsaXR5IG1vZGUgOyBBIGNvbnN0cmFpbmVkIHZhcmlhbnQgb2YgVkJSKQorLSA8Yj5GaXhlZCBRPC9iPiAoQ29uc3RhbnQgcXVhbGl0eSBvZiCRUZIgbW9kZSkKKworVGhlIHZhbHVlIG9mIFxyZWYgYW9tX2NvZGVjX2VuY19jZmdfdC5yY19lbmRfdXNhZ2UgaXMgaW4gdHVybiBjb3BpZWQgb3ZlcgoraW50byB0aGUgZW5jb2RlciByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBkYXRhIHN0cnVjdHVyZSBhcworKFRPRE8gUkVGKSBSYXRlQ29udHJvbENmZy5yY19tb2RlIChzZWUgXHJlZiBlbmNvZGVyLmgpLgorCitJbiByZWdhcmRzIHRvIHRoZSBtb3N0IGltcG9ydGFudCB1c2UgY2FzZXMgYWJvdmUsIFZpZGVvIG9uIGRlbWFuZCB1c2VzIGVpdGhlcgorVkJSIG9yIENRIG1vZGUuIENCUiBpcyB0aGUgcHJlZmVycmVkIHJhdGUgY29udHJvbCBtb2RlbCBmb3IgUlRDIGFuZCBMaXZlCitzdHJlYW1pbmcgYW5kIEZpeGVkIFEgaXMgb25seSB1c2VkIGluIHRlc3RpbmcuCisKK1RoZSBiZWhhdmlvdXIgb2YgZWFjaCBvZiB0aGVzZSBtb2RlcyBpcyByZWd1bGF0ZWQgYnkgYSBzZXJpZXMgb2Ygc2Vjb25kYXJ5Citjb21tYW5kIGxpbmUgcmF0ZSBjb250cm9sIG9wdGlvbnMgYnV0IGFsc28gZGVwZW5kcyBzb21ld2hhdCBvbiB0aGUgc2VsZWN0ZWQKK3VzZSBjYXNlLCB3aGV0aGVyIDItcGFzcyBjb2RpbmcgaXMgZW5hYmxlZCBhbmQgdGhlIHNlbGVjdGVkIGVuY29kZSBzcGVlZCB2cworcXVhbGl0eSB0cmFkZSBvZmZzIChccmVmIEFWMV9DT01QLnNwZWVkIGFuZCBccmVmIEFWMV9DT01QLnNmKS4KKworVGhlIGxpc3QgYmVsb3cgZ2l2ZXMgdGhlIG5hbWVzIG9mIHRoZSBtYWluIHJhdGUgY29udHJvbCBjb21tYW5kIGxpbmUKK29wdGlvbnMgdG9nZXRoZXIgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIGluIHRoZSByYXRlCitjb250cm9sIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUuCisKKy0gPGI+LS10YXJnZXQtYml0cmF0ZTwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy50YXJnZXRfYmFuZHdpZHRoKQorLSA8Yj4tLW1pbi1xPC9iPiAoKFRPRE8gUkVGKVJhdGVDb250cm9sQ2ZnLmJlc3RfYWxsb3dlZF9xKQorLSA8Yj4tLW1heC1xPC9iPiAoKFRPRE8gUkVGKVJhdGVDb250cm9sQ2ZnLndvcnN0X2FsbG93ZWRfcSkKKy0gPGI+LS1jcS1sZXZlbDwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy5jcV9sZXZlbCkKKy0gPGI+LS11bmRlcnNob290LXBjdDwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy51bmRlcl9zaG9vdF9wY3QpCistIDxiPi0tb3ZlcnNob290LXBjdDwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy5vdmVyX3Nob290X3BjdCkKKworVGhlIGZvbGxvd2luZyBjb250cm9sIGFzcGVjdHMgb2YgMiBwYXNzIHZiciBlbmNvZGluZworCistIDxiPi0tYmlhcy1wY3Q8L2I+IChSYXRlQ29udHJvbENmZzo6dHdvX3Bhc3NfdmJyYmlhcykKKy0gPGI+LS1taW5zZWN0aW9uLXBjdDwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy50d29fcGFzc192YnJtaW5fc2VjdGlvbikKKy0gPGI+LS1tYXhzZWN0aW9uLXBjdDwvYj4gKChUT0RPIFJFRilSYXRlQ29udHJvbENmZy50d29fcGFzc192YnJtYXhfc2VjdGlvbikKKworVGhlIGZvbGxvd2luZyByZWxhdGUgdG8gYnVmZmVyIGFuZCBkZWxheSBtYW5hZ2VtZW50IGluIG9uZSBwYXNzIGxvdyBkZWxheSBhbmQKK3JlYWwgdGltZSBjb2RpbmcKKworLSA8Yj4tLWJ1Zi1zejwvYj4gKChUT0RPIFJFRikgUmF0ZUNvbnRyb2xDZmc6Om1heGltdW1fYnVmZmVyX3NpemVfbXMpCistIDxiPi0tYnVmLWluaXRpYWwtc3o8L2I+ICgoVE9ETyBSRUYpUmF0ZUNvbnRyb2xDZmcuc3RhcnRpbmdfYnVmZmVyX2xldmVsX21zKQorLSA8Yj4tLWJ1Zi1vcHRpbWFsLXN6PC9iPiAoKFRPRE8gUkVGKVJhdGVDb250cm9sQ2ZnLm9wdGltYWxfYnVmZmVyX2xldmVsX21zKQorCitUaGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUgY2FuIGJlIGZvdW5kIGluOgorCistIFxyZWYgQVYxX0NPTVAub3hjZgorICAtIFxyZWYgQVYxRW5jb2RlckNvbmZpZy5yY19jZmcKIAogXHN1YnNlY3Rpb24gYXJjaGl0ZWN0dXJlX2VuY192YnIgVmFyaWFibGUgQml0cmF0ZSAoVkJSKSBFbmNvZGluZwogCi0gQWRkIGRldGFpbHMgaGVyZS4KK0ZvciBzdHJlYW1lZCBWT0QgY29udGVudCB0aGUgbW9zdCBjb21tb24gcmF0ZSBjb250cm9sIHN0cmF0ZWd5IGlzIFZhcmlhYmxlCitCaXRyYXRlIChWQlIpIGVuY29kaW5nLiBUaGUgQ1EgbW9kZSBtZW50aW9uZWQgYWJvdmUgaXMgYSB2YXJpYW50IG9mIHRoaXMKK3doZXJlIGFkZGl0aW9uYWwgcXVhbnRpemVyIGFuZCBxdWFsaXR5IGNvbnN0cmFpbnRzIGFyZSBhcHBsaWVkLiAgVkJSCitlbmNvZGluZyBtYXkgaW4gdGhlb3J5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBlaXRoZXIgMS1wYXNzIG9yIDItcGFzcworZW5jb2RpbmcuCiAKLVxzdWJzZWN0aW9uIGFyY2hpdGVjdHVyZV9lbmNfMXBhc3NfbGFnZ2VkIDEgUGFzcyBMYWdnZWQgVkJSIEVuY29kaW5nCitWQlIgZW5jb2RpbmcgdmFyaWVzIHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiB0byBlYWNoIGZyYW1lIG9yIGdyb3VwIG9mIGZyYW1lcworYWNjb3JkaW5nIHRvIHRoZSBkaWZmaWN1bHR5IG9mIHRoYXQgZnJhbWUgb3IgZ3JvdXAgb2YgZnJhbWVzLCBzdWNoIHRoYXQgZWFzaWVyCitmcmFtZXMgYXJlIGFsbG9jYXRlZCBmZXdlciBiaXRzIGFuZCBoYXJkZXIgZnJhbWVzIGFyZSBhbGxvY2F0ZWQgbW9yZSBiaXRzLiBUaGUKK2ludGVudCBoZXJlIGlzIHRvIGV2ZW4gb3V0IHRoZSBxdWFsaXR5IGJldHdlZW4gZnJhbWVzLiBUaGlzIGNvbnRyYXN0cyB3aXRoCitDb25zdGFudCBCaXRyYXRlIChDQlIpIGVuY29kaW5nIHdoZXJlIGVhY2ggZnJhbWUgaXMgYWxsb2NhdGVkIHRoZSBzYW1lIG51bWJlcgorb2YgYml0cy4KKworV2hpbHN0IGZvciBhbnkgZ2l2ZW4gZnJhbWUgb3IgZ3JvdXAgb2YgZnJhbWVzIHRoZSBkYXRhIHJhdGUgbWF5IHZhcnksIHRoZSBWQlIKK2FsZ29yaXRobSBhdHRlbXB0cyB0byBkZWxpdmVyIGEgZ2l2ZW4gYXZlcmFnZSBiaXRyYXRlIG92ZXIgYSB3aWRlciB0aW1lCitpbnRlcnZhbC4gSW4gc3RhbmRhcmQgVkJSIGVuY29kaW5nLCB0aGUgdGltZSBpbnRlcnZhbCBvdmVyIHdoaWNoIHRoZSBkYXRhIHJhdGUKK2lzIGF2ZXJhZ2VkIGlzIHVzdWFsbHkgdGhlIGR1cmF0aW9uIG9mIHRoZSB2aWRlbyBjbGlwLiAgQW4gYWx0ZXJuYXRpdmUKK2FwcHJvYWNoIGlzIHRvIHRhcmdldCBhbiBhdmVyYWdlIFZCUiBiaXRyYXRlIG92ZXIgdGhlIGVudGlyZSB2aWRlbyBjb3JwdXMgZm9yCithIHBhcnRpY3VsYXIgdmlkZW8gZm9ybWF0IChjb3JwdXMgVkJSKS4KKworXHN1YnN1YnNlY3Rpb24gYXJjaGl0ZWN0dXJlX2VuY18xcGFzc192YnIgMSBQYXNzIFZCUiBFbmNvZGluZworCitUaGUgY29tbWFuZCBsaW5lIGZvciBsaWJhb20gZG9lcyBhbGxvdyAxIFBhc3MgVkJSLCBidXQgdGhpcyBoYXMgbm90IGJlZW4KK3Byb3Blcmx5IG9wdGltaXNlZCBhbmQgYmVoYXZlcyBtdWNoIGxpa2UgMSBwYXNzIENCUiBpbiBtb3N0IHJlZ2FyZHMgd2l0aCBiaXRzCithbGxvY2F0ZWQgdG8gZnJhbWVzIGJ5IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRlZmluZWQgaW4gcmF0ZWN0cmwuYworCistIFxyZWYgYXYxX2NhbGNfaWZyYW1lX3RhcmdldF9zaXplX29uZV9wYXNzX3ZicigpCistIFxyZWYgYXYxX2NhbGNfcGZyYW1lX3RhcmdldF9zaXplX29uZV9wYXNzX3ZicigpCisKK1xzdWJzdWJzZWN0aW9uIGFyY2hpdGVjdHVyZV9lbmNfMnBhc3NfdmJyIDIgUGFzcyBWQlIgRW5jb2RpbmcKKworVGhlIG1haW4gZm9jdXMgaGVyZSB3aWxsIGJlIG9uIDItcGFzcyBWQlIgZW5jb2RpbmcgKGFuZCB0aGUgcmVsYXRlZCBDUSBtb2RlKQorYXMgdGhlc2UgYXJlIHRoZSBtb2RlcyBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yIFZPRCBjb250ZW50LgorCisyLXBhc3MgZW5jb2RpbmcgaXMgc2VsZWN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBieSBzZXR0aW5nIC0tcGFzc2VzPTIKKyhvciAtcCAyKS4KKworR2VuZXJhbGx5IHNwZWFraW5nLCBpbiAyLXBhc3MgZW5jb2RpbmcsIGFuIGVuY29kZXIgd2lsbCBmaXJzdCBlbmNvZGUgYSB2aWRlbwordXNpbmcgYSBkZWZhdWx0IHNldCBvZiBwYXJhbWV0ZXJzIGFuZCBhc3N1bXB0aW9ucy4gRGVwZW5kaW5nIG9uIHRoZSBvdXRjb21lCitvZiB0aGF0IGZpcnN0IGVuY29kZSwgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb25zIGFuZCBwYXJhbWV0ZXJzIHdpbGwgYmUgYWRqdXN0ZWQKK3RvIG9wdGltaXplIHRoZSBvdXRwdXQgZHVyaW5nIHRoZSBzZWNvbmQgcGFzcy4gIEluIGVzc2VuY2UgdGhlIGZpcnN0IHBhc3MgaXMgYQorZmFjdCBmaW5kaW5nIG1pc3Npb24gdG8gZXN0YWJsaXNoIHRoZSBjb21wbGV4aXR5IGFuZCB2YXJpYWJpbGl0eSBvZiB0aGUgdmlkZW8sCitpbiBvcmRlciB0byBhbGxvdyBhIGJldHRlciBhbGxvY2F0aW9uIG9mIGJpdHMgaW4gdGhlIHNlY29uZCBwYXNzLgorCitUaGUgbGliYW9tIDItcGFzcyBhbGdvcml0aG0gaXMgdW51c3VhbCBpbiB0aGF0IHRoZSBmaXJzdCBwYXNzIGlzIG5vdCBhIGZ1bGwKK2VuY29kZSBvZiB0aGUgdmlkZW8uIFJhdGhlciBpdCB1c2VzIGEgbGltaXRlZCBzZXQgb2YgcHJlZGljdGlvbiBhbmQgdHJhbnNmb3JtCitvcHRpb25zIGFuZCBhIGZpeGVkIHF1YW50aXplciwgIHRvIGdlbmVyYXRlIHN0YXRpc3RpY3MgYWJvdXQgZWFjaCBmcmFtZS4gTm8KK291dHB1dCBiaXRzdHJlYW0gaXMgY3JlYXRlZCBhbmQgdGhlIHBlciBmcmFtZSBmaXJzdCBwYXNzIHN0YXRpc3RpY3MgYXJlIHN0b3JlZAorZW50aXJlbHkgaW4gdm9sYXRpbGUgbWVtb3J5LiBUaGlzIGhhcyBzb21lIGRpc2FkdmFudGFnZXMgd2hlbiBjb21wYXJlZCB0byBhCitmdWxsIGZpcnN0IHBhc3MgZW5jb2RlLCBidXQgYXZvaWRzIHRoZSBuZWVkIGZvciBmaWxlIEkvTyBhbmQgaW1wcm92ZXMgc3BlZWQuCisKK0luIHdoYXQgZm9sbG93cyBJIHdpbGwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBrZXkgZGF0YSBzdHJ1Y3R1cmVzLgorKHNlZSBhbHNvIFxyZWYgYXJjaGl0ZWN0dXJlX2VuY19kYXRhX3N0cnVjdHVyZXMpCisKKy0gXHJlZiBBVjFfQ09NUCBjcGkgKHRoZSBtYWluIGNvbXByZXNzb3IgaW5zdGFuY2UgZGF0YSBzdHJ1Y3R1cmUpCisgICAtIFxyZWYgQVYxX0NPTVAub3hjZiAoXHJlZiBBVjFFbmNvZGVyQ29uZmlnKQorICAgLSBccmVmIEFWMV9DT01QLnJjICgoVE9ETyBSRUYpIFJBVEVfQ09OVFJPTCkKKyAgIC0gXHJlZiBBVjFfQ09NUC50d29wYXNzIChccmVmIFRXT19QQVNTKQorCistIFxyZWYgQVYxRW5jb2RlckNvbmZpZyAgKEVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzKQorICAgLSAoVE9ETyBSRUYpIEFWMUVuY29kZXJDb25maWcucGFzcworCistIChUT0RPIFJFRikgUkFURV9DT05UUk9MIChSYXRlIGNvbnRyb2wgc3RhdHVzKQorLSBccmVmIFRXT19QQVNTIChUd28gcGFzcyBzdGF0dXMgYW5kIGNvbnRyb2wgZGF0YSkKKworLSBccmVmIEZJUlNUUEFTU19TVEFUUyAqZnJhbWVfc3RhdHNfYnVmICh1c2VkIHRvIHN0b3JlIHBlciBmcmFtZSBmaXJzdAorICBwYXNzIHN0YXRzKQorCisKK0ZvciB0d28gcGFzcyBlbmNvZGluZywgdGhlIGZ1bmN0aW9uIFxyZWYgYXYxX2VuY29kZSgpIGluIGVuY29kZXIuYyB3aWxsIGZpcnN0CitiZSBjYWxsZWQgZm9yIGVhY2ggZnJhbWUgaW4gdGhlIHZpZGVvIHdpdGggdGhlIHZhbHVlIChUT0RPIFJFRikKK2NwaS0+b3hjZi5wYXNzPTEuIFRoaXMgd2lsbCByZXN1bHQgaW4gY2FsbHMgdG8gXHJlZiBhdjFfZmlyc3RfcGFzcygpIGluCitmaXJzcGFzcy5jCisKK1N0YXRpc3RpY3MgYWJvdXQgZWFjaCBmcmFtZSBhcmUgc3RvcmVkIGluIChUT0RPIFJFRikgZnJhbWVfc3RhdHNfYnVmLgorCitBZnRlciBjb21wbGV0aW9uIG9mIHRoZSBmaXJzdCBwYXNzLCBccmVmIGF2MV9lbmNvZGUoKSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBmb3IKK2VhY2ggZnJhbWUgd2l0aCAoVE9ETyBSRUYpIGNwaS0+b3hjZi5wYXNzPTIuICBUaGUgZnJhbWVzIGFyZSB0aGVuIGVuY29kZWQgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MgYnkgY2FsbHMgdG8KK1xyZWYgZW5jb2RlX2ZyYW1lX3RvX2RhdGFfcmF0ZSgpIGluIGVuY29kZXIuYy4KKworXHJlZiBlbmNvZGVfZnJhbWVfdG9fZGF0YV9yYXRlKCkgaW4gdHVybiBjYWxscyAoVE9ETyBSRUYpCithdjFfZ2V0X3NlY29uZF9wYXNzX3BhcmFtcygpIHdoaWNoIGlzIGRlZmluZWQgaW4gcGFzczJfc3RyYXRlZ3kuYworCitJbiBzdW1tYXJ5IHRoZSBzZWNvbmQgcGFzcyBjb2RlIDotCisKKy0gU2VhcmNoZXMgZm9yIHNjZW5lIGN1dHMgKGlmIGF1dG8ga2V5IGZyYW1lIGRldGVjdGlvbiBpcyBlbmFibGVkKS4KKy0gRGVmaW5lcyB0aGUgbGVuZ3RoIG9mIGFuZCBoaWVyYXJjaGljYWwgc3RydWN0dXJlIHRvIGJlIHVzZWQgaW4gZWFjaAorICBBUkYvR0YgZ3JvdXAuCistIEFsbG9jYXRlcyBiaXRzIGJhc2VkIG9uIHRoZSByZWxhdGl2ZSBjb21wbGV4aXR5IG9mIGVhY2ggZnJhbWUsIHRoZSBxdWFsaXR5CisgIG9mIGZyYW1lIHRvIGZyYW1lIHByZWRpY3Rpb24gYW5kIHRoZSB0eXBlIG9mIGZyYW1lIChlLmcuIGtleSBmcmFtZSwgQVJGCisgIGZyYW1lLCBnb2xkZW4gZnJhbWUgb3Igbm9ybWFsIGxlYWYgZnJhbWUpLgorLSBTdWdnZXN0cyBhIG1heGltdW0gUSAocXVhbnRpemVyIHZhbHVlKSBmb3IgZWFjaCBBUkYvR0YgZ3JvdXAsIGJhc2VkIG9uCisgIGVzdGltYXRlZCBjb21wbGV4aXR5IGFuZCByZWNlbnQgcmF0ZSBjb250cm9sIGNvbXBsaWFuY2UKKyAgKFRPRE8gUkVGKSAocmMtPmFjdGl2ZV93b3JzdF9xdWFsaXR5KQorLSBUcmFja3MgYWRoZXJlbmNlIHRvIHRoZSBvdmVyYWxsIHJhdGUgY29udHJvbCBvYmplY3RpdmVzIGFuZCBhZGp1c3RzCisgIGhldXJpc3RpY3MuCisKK1RoZSBtYWluIHR3byBwYXNzIDIgZnVuY3Rpb25zIGluIHJlZ2FyZCB0byB0aGUgYWJvdmUgKGFsc28gaW4gcGFzczJfc3RyYXRlZ3kuYykKK2luY2x1ZGU6LQorCistIChUT0RPIFJFRikgZmluZF9uZXh0X2tleV9mcmFtZSgpCistIChUT0RPIFJFRikgZGVmaW5lX2dmX2dyb3VwKCkKKy0gKFRPRE8gUkVGKSBjYWxjdWxhdGVfdG90YWxfZ2ZfZ3JvdXBfYml0cygpCistIChUT0RPIFJFRikgZ2V0X3R3b3Bhc3Nfd29yc3RfcXVhbGl0eSgpCistIChUT0RPIFJFRikgYXYxX2dvcF9zZXR1cF9zdHJ1Y3R1cmUoKQorLSAoVE9ETyBSRUYpIGF2MV9nb3BfYml0X2FsbG9jYXRpb24oKQorLSAoVE9ETyBSRUYpIGF2MV90d29wYXNzX3Bvc3RlbmNvZGVfdXBkYXRlKCkKKworRm9yIGVhY2ggZnJhbWUsIHRoZSB0d28gcGFzcyBhbGdvcml0aG0gZGVmaW5lcyBhIHRhcmdldCBudW1iZXIgb2YgYml0cworKFRPRE8gUkVGKSByYy0+YmFzZV9mcmFtZV90YXJnZXQsICB3aGljaCBpcyB0aGVuIGFkanVzdGVkIGlmIG5lY2Vzc2FyeSB0bworcmVmbGVjdCBhbnkgdW5kZXJzaG9vdCBvciBvdmVyc2hvb3Qgb24gcHJldmlvdXMgZnJhbWVzIHRvIGdpdmUKKyhUT0RPIFJFRikgcmMtPnRoaXNfZnJhbWVfdGFyZ2V0LgorCitBcyB3ZWxsIGFzIChUT0RPIFJFRikgcmMtPmFjdGl2ZV93b3JzdF9xdWFsaXR5LCB0aGUgdHdvIHBhc3MgY29kZSBhbHNvCittYWludGFpbnMgYSByZWNvcmQgb2YgdGhlIGFjdHVhbCBRIHZhbHVlIHVzZWQgdG8gZW5jb2RlIHByZXZpb3VzIGZyYW1lcworYXQgZWFjaCBsZXZlbCBpbiB0aGUgY3VycmVudCBweXJhbWlkIGhpZXJhcmNoeQorKChUT0RPIFJFRilyYy0+YWN0aXZlX2Jlc3RfcXVhbGl0eVtsZXZlbF0pLiBUaGUgZnVuY3Rpb24KK1xyZWYgcmNfcGlja19xX2FuZF9ib3VuZHMoKSwgZGVmaW5lZCBpbiByYXRlX2N0cmwuYywgdXNlcyB0aGVzZSB2YWx1ZXMKK3RvIHNldCBhIHBlcm1pdHRlZCBRIHJhbmdlIGZvciBlYWNoIGZyYW1lLgorCitcc3Vic3Vic2VjdGlvbiBhcmNoaXRlY3R1cmVfZW5jXzFwYXNzX2xhZ2dlZCAxIFBhc3MgTGFnZ2VkIFZCUiBFbmNvZGluZwogCiAgQWRkIGRldGFpbHMgaGVyZS4KIAo=