LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKiAKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgojaWZuZGVmIF9CSU9TX0hfCiNkZWZpbmUgX0JJT1NfSF8KCiNkZWZpbmUgT0ZGU19FUyAgICAgIDAgICAgIC8qIDE2Yml0ICovCiNkZWZpbmUgT0ZGU19HUyAgICAgIDIgICAgIC8qIDE2Yml0ICovCiNkZWZpbmUgT0ZGU19EUyAgICAgIDQgICAgIC8qIDE2Yml0ICovCiNkZWZpbmUgT0ZGU19FREkgICAgIDYgICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19ESSAgICAgIDYgICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVESSAqLyAgIAojZGVmaW5lIE9GRlNfRVNJICAgICAxMCAgICAvKiAzMmJpdCAqLwojZGVmaW5lIE9GRlNfU0kgICAgICAxMCAgICAvKiBsb3cgMTYgYml0cyBvZiBFU0kgKi8gICAKI2RlZmluZSBPRkZTX0VCUCAgICAgMTQgICAgLyogMzJiaXQgKi8KI2RlZmluZSBPRkZTX0JQICAgICAgMTQgICAgLyogbG93IDE2IGJpdHMgb2YgRUJQICovCiNkZWZpbmUgT0ZGU19FU1AgICAgIDE4ICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19TUCAgICAgIDE4ICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVTUCAqLwojZGVmaW5lIE9GRlNfRUJYICAgICAyMiAgICAvKiAzMmJpdCAqLwojZGVmaW5lIE9GRlNfQlggICAgICAyMiAgICAvKiBsb3cgMTYgYml0cyBvZiBFQlggKi8KI2RlZmluZSBPRkZTX0JMICAgICAgMjIgICAgLyogbG93ICA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX0JIICAgICAgMjMgICAgLyogaGlnaCA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX0VEWCAgICAgMjYgICAgLyogMzJiaXQgKi8KI2RlZmluZSBPRkZTX0RYICAgICAgMjYgICAgLyogbG93IDE2IGJpdHMgb2YgRUJYICovCiNkZWZpbmUgT0ZGU19ETCAgICAgIDI2ICAgIC8qIGxvdyAgOCBiaXRzIG9mIEJYICovCiNkZWZpbmUgT0ZGU19ESCAgICAgIDI3ICAgIC8qIGhpZ2ggOCBiaXRzIG9mIEJYICovCiNkZWZpbmUgT0ZGU19FQ1ggICAgIDMwICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19DWCAgICAgIDMwICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVCWCAqLwojZGVmaW5lIE9GRlNfQ0wgICAgICAzMCAgICAvKiBsb3cgIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfQ0ggICAgICAzMSAgICAvKiBoaWdoIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfRUFYICAgICAzNCAgICAvKiAzMmJpdCAqLwojZGVmaW5lIE9GRlNfQVggICAgICAzNCAgICAvKiBsb3cgMTYgYml0cyBvZiBFQlggKi8KI2RlZmluZSBPRkZTX0FMICAgICAgMzQgICAgLyogbG93ICA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX0FIICAgICAgMzUgICAgLyogaGlnaCA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX1ZFQ1RPUiAgMzggICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0lQICAgICAgNDAgICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0NTICAgICAgNDIgICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0ZMQUdTICAgNDQgICAgLyogMTZiaXQgKi8gICAKCiNkZWZpbmUgU0VHTUVOVCAgICAgIDB4NDAKI2RlZmluZSBTVEFDSwkgICAgIDB4ODAwICAJCQkvKiBzdGFjayBhdCAweDQwOjB4ODAwIC0+IDB4ODAwICovCgovKiBzYXZlIGdlbmVyYWwgcmVnaXN0ZXJzICovCi8qIHNhdmUgc29tZSBzZWdtZW50cyAgICAgKi8KLyogc2F2ZSBjYWxsZXJzIHN0YWNrIHNlZ21lbnQgLi4gKi8KLyogLi4uIGluIGdzICovCgkvKiBzZXR1cCBteSBzZWdtZW50cyAqLyAKCS8qIHNldHVwIEJJT1Mgc3RhY2twb2ludGVyICovIAoJCiNkZWZpbmUgTUFLRV9CSU9TX1NUQUNLIFwKCXB1c2hhbAkJOyBcCglwdXNodwklZHMJOyBcCglwdXNodwklZ3MJOyBcCglwdXNodwklZXMJOyBcCglwdXNodwklc3MJOyBcCglwb3B3CSVncwk7IFwKCW1vdncJJFNFR01FTlQsJWF4IDsgXAoJbW92dwklYXgsJWRzCTsgXAoJbW92dwklYXgsJWVzCTsgXAoJbW92dwklYXgsJXNzCTsgXAoJbW92dwklc3AsJWJwCTsgXAoJbW92dwkkU1RBQ0ssJXNwCgojZGVmaW5lIFJFU1RPUkVfQ0FMTEVSU19TVEFDSyBcCglwdXNodwklZ3MgICAgIDsJCQkvKiByZXN0b3JlIGNhbGxlcnMgc3RhY2sgc2VnbWVudCAqLyBcCglwb3B3CSVzcyAgICAgOyBcCgltb3Z3CSVicCwlc3AJOwkJCS8qIHJlc3RvcmUgc3RhY2twb2ludGVyICovIFwKCQlcCglwb3B3CSVlcwk7CQkJLyogcmVzdG9yZSBzZWdtZW50IHNlbGVjdG9ycyAqLyBcCglwb3B3CSVncyAgICAgOyBcCglwb3B3CSVkcyAgICAgOyBcCgkJXAoJcG9wYWwJCQkJCS8qIHJlc3RvcmUgR1AgcmVnaXN0ZXJzICovIAoKI2VuZGlmCg==