LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogc21jOTAwMC5oCiAqCiAqIENvcHlyaWdodCAoQykgMTk5OCBieSBEYW5pZWwgRW5nc3Ry9m0KICogQ29weXJpZ2h0IChDKSAxOTk2IGJ5IEVyaWsgU3RhaGxtYW4KICoKICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogKiBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICoKICogVGhpcyBmaWxlIGNvbnRhaW5zIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZCBhY2Nlc3MgbWFjcm9zIGZvcgogKiB0aGUgU01DOTF4eHggY2hpcHNldC4KICoKICogSW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZmlsZSB3YXMgb2J0YWluZWQgZnJvbSB0aGUgU01DOTFDOTQKICogbWFudWFsIGZyb20gU01DLiAgVG8gZ2V0IGEgY29weSwgaWYgeW91IHJlYWxseSB3YW50IG9uZSwgeW91IGNhbiBmaW5kCiAqIGluZm9ybWF0aW9uIHVuZGVyIHd3dy5zbXNjLmNvbSBpbiB0aGUgY29tcG9uZW50cyBkaXZpc2lvbi4KICogKCB0aGlzIHRoYW5rcyB0byBhZHZpY2UgZnJvbSBEb25hbGQgQmVja2VyICkuCiAqCiAqIEF1dGhvcnMKICogICAgICBEYW5pZWwgRW5nc3Ry9m0gICAgICAgICAgICAgICAgICAgICAgICAgPGRhbmllbC5lbmdzdHJvbUByaWtzbmV0dC5ubz4KICoJRXJpayBTdGFobG1hbgkJCQk8ZXJpa0B2dC5lZHU+CiAqCiAqIEhpc3RvcnkKICogOTYtMDEtMDYJCSBFcmlrIFN0YWhsbWFuICAgbW92ZWQgZGVmaW5pdGlvbnMgaGVyZSBmcm9tIG1haW4gLmMKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlCiAqIDk2LTAxLTE5CQkgRXJpayBTdGFobG1hbgkgcG9saXNoZWQgdGhpcyB1cCBzb21lLCBhbmQgYWRkZWQKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcKICogOTgtMDktMjUgICAgICAgICAgICAgIERhbmllbCBFbmdzdHL2bSBhZGp1c3RlZCBmb3IgRXRoZXJib290CiAqIDk4LTA5LTI3ICAgICAgICAgICAgICBEYW5pZWwgRW5nc3Ry9m0gbW92ZWQgc29tZSBzdGF0aWMgc3RyaW5ncyBiYWNrIHRvIHRoZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gLmMgZmlsZQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiNpZm5kZWYJX1NNQzkwMDBfSF8KIyBkZWZpbmUgX1NNQzkwMDBfSF8KCi8qIEkgd2FudCBzb21lIHNpbXBsZSB0eXBlcyAqLwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQlieXRlOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQkJd29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludAkJZHdvcmQ7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKgogKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBTTUMgcmVnaXN0ZXJzIGlzIHByb2JhYmx5IGluIG9yZGVyIGhlcmUsCiAqIGFsdGhvdWdoIGZvciBkZXRhaWxzLCB0aGUgU01DIGRhdGFzaGVldCBpcyBpbnZhbHVhYmxlLgogKgogKiBCYXNpY2FsbHksIHRoZSBjaGlwIGhhcyA0IGJhbmtzIG9mIHJlZ2lzdGVycyAoIDAgdG8gMyApLCB3aGljaAogKiBhcmUgYWNjZXNzZWQgYnkgd3JpdGluZyBhIG51bWJlciBpbnRvIHRoZSBCQU5LX1NFTEVDVCByZWdpc3RlcgogKiAoIEkgYWxzbyB1c2UgYSBTTUNfU0VMRUNUX0JBTksgbWFjcm8gZm9yIHRoaXMgKS4KICoKICogVGhlIGJhbmtzIGFyZSBjb25maWd1cmVkIHNvIHRoYXQgZm9yIG1vc3QgcHVycG9zZXMsIGJhbmsgMiBpcyBhbGwKICogdGhhdCBpcyBuZWVkZWQgZm9yIHNpbXBsZSBydW4gdGltZSB0YXNrcy4KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKgogKiBCYW5rIFNlbGVjdCBSZWdpc3RlcjoKICoKICoJCXl5eXkgeXl5eSAwMDAwIDAweHgKICoJCXh4CQk9IGJhbmsgbnVtYmVyCiAqCQl5eXl5IHl5eXkJPSAweDMzLCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuCiAqLwojZGVmaW5lCUJBTktfU0VMRUNUCQkxNAoKLyogQkFOSyAwICAqLwoKI2RlZmluZQlUQ1IJCTAJLyogdHJhbnNtaXQgY29udHJvbCByZWdpc3RlciAqLwojZGVmaW5lIFRDUl9FTkFCTEUJMHgwMDAxCS8qIGlmIHRoaXMgaXMgMSwgd2UgY2FuIHRyYW5zbWl0ICovCiNkZWZpbmUgVENSX0ZEVVBMWAkweDA4MDAJLyogcmVjZWl2ZSBwYWNrZXRzIHNlbnQgb3V0ICovCiNkZWZpbmUgVENSX1NUUF9TUUVUCTB4MTAwMAkvKiBzdG9wIHRyYW5zbWl0dGluZyBpZiBTaWduYWwgcXVhbGl0eSBlcnJvciAqLwojZGVmaW5lCVRDUl9NT05fQ05TCTB4MDQwMAkvKiBtb25pdG9ycyB0aGUgY2FycmllciBzdGF0dXMgKi8KI2RlZmluZQlUQ1JfUEFEX0VOQUJMRQkweDAwODAJLyogcGFkcyBzaG9ydCBwYWNrZXRzIHRvIDY0IGJ5dGVzICovCgojZGVmaW5lCVRDUl9DTEVBUgkwCS8qIGRvIE5PVEhJTkcgKi8KLyogdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgdGhlIFRDUiByZWdpc3RlciA6ICovCiNkZWZpbmUJVENSX05PUk1BTAkoVENSX0VOQUJMRSB8IFRDUl9QQURfRU5BQkxFKQoKCiNkZWZpbmUgRVBIX1NUQVRVUwkyCiNkZWZpbmUgRVNfTElOS19PSwkweDQwMDAJLyogaXMgdGhlIGxpbmsgaW50ZWdyaXR5IG9rID8gKi8KCiNkZWZpbmUJUkNSCQk0CiNkZWZpbmUgUkNSX1NPRlRSRVNFVAkweDgwMDAJLyogcmVzZXRzIHRoZSBjaGlwICovCiNkZWZpbmUJUkNSX1NUUklQX0NSQwkweDIwMAkvKiBzdHJpcHMgQ1JDICovCiNkZWZpbmUgUkNSX0VOQUJMRQkweDEwMAkvKiBJRkYgdGhpcyBpcyBzZXQsIHdlIGNhbiByZWNlaXZlIHBhY2tldHMgKi8KI2RlZmluZSBSQ1JfQUxNVUwJMHg0CS8qIHJlY2VpdmUgYWxsIG11bHRpY2FzdCBwYWNrZXRzICovCiNkZWZpbmUJUkNSX1BST01JU0MJMHgyCS8qIGVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCgovKiB0aGUgbm9ybWFsIHNldHRpbmdzIGZvciB0aGUgUkNSIHJlZ2lzdGVyIDogKi8KI2RlZmluZQlSQ1JfTk9STUFMCShSQ1JfU1RSSVBfQ1JDIHwgUkNSX0VOQUJMRSkKI2RlZmluZSBSQ1JfQ0xFQVIJMHgwCQkvKiBzZXQgaXQgdG8gYSBiYXNlIHN0YXRlICovCgojZGVmaW5lCUNPVU5URVIJCTYKI2RlZmluZQlNSVIJCTgKI2RlZmluZQlNQ1IJCTEwCi8qIDEyIGlzIHJlc2VydmVkICovCgovKiBCQU5LIDEgKi8KI2RlZmluZSBDT05GSUcJCQkwCiNkZWZpbmUgQ0ZHX0FVSV9TRUxFQ1QJCTB4MTAwCiNkZWZpbmUJQkFTRQkJCTIKI2RlZmluZQlBRERSMAkJCTQKI2RlZmluZQlBRERSMQkJCTYKI2RlZmluZQlBRERSMgkJCTgKI2RlZmluZQlHRU5FUkFMCQkJMTAKI2RlZmluZQlDT05UUk9MCQkJMTIKI2RlZmluZQlDVExfUE9XRVJET1dOCQkweDIwMDAKI2RlZmluZQlDVExfTEVfRU5BQkxFCQkweDgwCiNkZWZpbmUJQ1RMX0NSX0VOQUJMRQkJMHg0MAojZGVmaW5lCUNUTF9URV9FTkFCTEUJCTB4MDAyMAojZGVmaW5lIENUTF9BVVRPX1JFTEVBU0UJMHgwODAwCiNkZWZpbmUJQ1RMX0VQUk9NX0FDQ0VTUwkweDAwMDMgLyogaGlnaCBpZiBFcHJvbSBpcyBiZWluZyByZWFkICovCgovKiBCQU5LIDIgKi8KI2RlZmluZSBNTVVfQ01ECQkwCiNkZWZpbmUgTUNfQlVTWQkJMQkvKiBvbmx5IHJlYWRhYmxlIGJpdCBpbiB0aGUgcmVnaXN0ZXIgKi8KI2RlZmluZSBNQ19OT1AJCTAKI2RlZmluZQlNQ19BTExPQwkweDIwCS8qIG9yIHdpdGggbnVtYmVyIG9mIDI1NiBieXRlIHBhY2tldHMgKi8KI2RlZmluZQlNQ19SRVNFVAkweDQwCiNkZWZpbmUJTUNfUkVNT1ZFCTB4NjAJLyogcmVtb3ZlIHRoZSBjdXJyZW50IHJ4IHBhY2tldCAqLwojZGVmaW5lIE1DX1JFTEVBU0UJMHg4MAkvKiByZW1vdmUgYW5kIHJlbGVhc2UgdGhlIGN1cnJlbnQgcnggcGFja2V0ICovCiNkZWZpbmUgTUNfRlJFRVBLVAkweEEwCS8qIFJlbGVhc2UgcGFja2V0IGluIFBOUiByZWdpc3RlciAqLwojZGVmaW5lIE1DX0VOUVVFVUUJMHhDMAkvKiBFbnF1ZXVlIHRoZSBwYWNrZXQgZm9yIHRyYW5zbWl0ICovCgojZGVmaW5lCVBOUl9BUlIJCTIKI2RlZmluZSBGSUZPX1BPUlRTCTQKCiNkZWZpbmUgRlBfUlhFTVBUWQkweDgwMDAKI2RlZmluZSBGUF9UWEVNUFRZCTB4ODAKCiNkZWZpbmUJUE9JTlRFUgkJNgojZGVmaW5lIFBUUl9SRUFECTB4MjAwMAojZGVmaW5lCVBUUl9SQ1YJCTB4ODAwMAojZGVmaW5lCVBUUl9BVVRPSU5DCTB4NDAwMAojZGVmaW5lIFBUUl9BVVRPX0lOQwkweDAwNDAKCiNkZWZpbmUJREFUQV8xCQk4CiNkZWZpbmUJREFUQV8yCQkxMAojZGVmaW5lCUlOVEVSUlVQVAkxMgoKI2RlZmluZSBJTlRfTUFTSwkxMwojZGVmaW5lIElNX1JDVl9JTlQJMHgxCiNkZWZpbmUJSU1fVFhfSU5UCTB4MgojZGVmaW5lCUlNX1RYX0VNUFRZX0lOVAkweDQKI2RlZmluZQlJTV9BTExPQ19JTlQJMHg4CiNkZWZpbmUJSU1fUlhfT1ZSTl9JTlQJMHgxMAojZGVmaW5lCUlNX0VQSF9JTlQJMHgyMAojZGVmaW5lCUlNX0VSQ1ZfSU5UCTB4NDAgLyogbm90IG9uIFNNQzkxOTIgKi8KCi8qIEJBTksgMyAqLwojZGVmaW5lCU1VTFRJQ0FTVDEJMAojZGVmaW5lCU1VTFRJQ0FTVDIJMgojZGVmaW5lCU1VTFRJQ0FTVDMJNAojZGVmaW5lCU1VTFRJQ0FTVDQJNgojZGVmaW5lCU1HTVQJCTgKI2RlZmluZQlSRVZJU0lPTgkxMCAvKiAoIGhpOiBjaGlwIGlkICAgbG93OiByZXYgIyApICovCgoKLyogdGhpcyBpcyBOT1Qgb24gU01DOTE5MiAqLwojZGVmaW5lCUVSQ1YJCTEyCgovKiBOb3RlIHRoYXQgOTE5NCBhbmQgOTE5NiBoYXZlIHRoZSBzbWFtZSBjaGlwIGlkLAogKiB0aGUgOTE5NiB3aWxsIGhhdmUgcmV2aXNpb25zIHN0YXJ0aW5nIGF0IDYgKi8KI2RlZmluZSBDSElQXzkxOTAJMwojZGVmaW5lIENISVBfOTE5NAk0CiNkZWZpbmUgQ0hJUF85MTk1CTUKI2RlZmluZSBDSElQXzkxOTYJNAojZGVmaW5lIENISVBfOTExMDAJNwojZGVmaW5lIENISVBfOTExMDBGRAk4CgojZGVmaW5lIFJFVl85MTk2CTYKCi8qCiAqIFRyYW5zbWl0IHN0YXR1cyBiaXRzCiAqLwojZGVmaW5lIFRTX1NVQ0NFU1MJMHgwMDAxCiNkZWZpbmUgVFNfTE9TVENBUgkweDA0MDAKI2RlZmluZSBUU19MQVRDT0wJMHgwMjAwCiNkZWZpbmUgVFNfMTZDT0wJMHgwMDEwCgovKgogKiBSZWNlaXZlIHN0YXR1cyBiaXRzCiAqLwojZGVmaW5lIFJTX0FMR05FUlIJMHg4MDAwCiNkZWZpbmUgUlNfQkFEQ1JDCTB4MjAwMAojZGVmaW5lIFJTX09EREZSQU1FCTB4MTAwMAojZGVmaW5lIFJTX1RPT0xPTkcJMHgwODAwCiNkZWZpbmUgUlNfVE9PU0hPUlQJMHgwNDAwCiNkZWZpbmUgUlNfTVVMVElDQVNUCTB4MDAwMQojZGVmaW5lIFJTX0VSUk9SUwkoUlNfQUxHTkVSUiB8IFJTX0JBRENSQyB8IFJTX1RPT0xPTkcgfCBSU19UT09TSE9SVCkKCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogIEkgZGVmaW5lIHNvbWUgbWFjcm9zIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHNvbWV3aGF0IGNvbW1vbgogKiBvciBzbGlnaHRseSBjb21wbGljYXRlZCwgcmVwZWF0ZWQgdGFza3MuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBzZWxlY3QgYSByZWdpc3RlciBiYW5rLCAwIHRvIDMgICovCgojZGVmaW5lIFNNQ19TRUxFQ1RfQkFOSyh4LCB5KSB7IF9vdXR3KCB5LCB4ICsgQkFOS19TRUxFQ1QgKTsgfQoKLyogZGVmaW5lIGEgc21hbGwgZGVsYXkgZm9yIHRoZSByZXNldCAqLwojZGVmaW5lIFNNQ19ERUxBWSh4KSB7IGludyggeCArIFJDUiApO1wKCQkJaW53KCB4ICsgUkNSICk7XAoJCQlpbncoIHggKyBSQ1IgKTsgfQoKCiNlbmRpZgkvKiBfU01DXzkwMDBfSF8gKi8KCg==