LyoKICogSGVscCBWaWV3ZXIKICogCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICoKICogUnVtYW50c2NoIExhZGluIChWYWxsYWRlcikgYnkgbWJhdXJAZzI2LmV0aHouY2gKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogVGhpcyBmaWxlIGlzIG5vdCB5ZXQgY29tcGxldGUgISEgKi8KCiNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBSbAojZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgQwoKLyogTWVudSAqLwoKI2RlZmluZSBNRU5VX0ZJTEUgICAgICAgICAgICAgICAgICAgICImRGF0b3RlY2EiCiNkZWZpbmUgTUVOVV9GSUxFX09QRU4gICAgICAgICAgICAgICAiJlJpdmlyIgojZGVmaW5lIE1FTlVfRklMRV9QUklOVCAgICAgICAgICAgICAgIiZTdGFtcGFyIHRlbWEiCiNkZWZpbmUgTUVOVV9GSUxFX1BSSU5URVJfU0VUVVAgICAgICAiJkluc3RhbGxheml1biBkYWwgc3RhbXBhZGVyLi4uIgojZGVmaW5lIE1FTlVfRklMRV9FWElUICAgICAgICAgICAgICAgIiZGaW5pciIKCiNkZWZpbmUgTUVOVV9FRElUICAgICAgICAgICAgICAgICAgICAiJkxhdnVyYXIiCiNkZWZpbmUgTUVOVV9FRElUX0NPUFlfRElBTE9HICAgICAgICAiJkNhcGNoYXIiCiNkZWZpbmUgTUVOVV9FRElUX0FOTk9UQVRFICAgICAgICAgICAiJkFubm90YXppdW4uLi4iCgojZGVmaW5lIE1FTlVfQk9PS01BUksgICAgICAgICAgICAgICAgIiZNYXJjYSIKI2RlZmluZSBNRU5VX0JPT0tNQVJLX0RFRklORSAgICAgICAgICImRGVmaW5pci4uLiIKCiNkZWZpbmUgTUVOVV9IRUxQICAgICAgICAgICAgICAgICAgICAiJkFn/GQiCiNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiJkRvdXZyYXIgbCdhZ/xkIgojZGVmaW5lIE1FTlVfSEVMUF9PTl9UT1AgICAgICAgICAgICAgIkFk/G5hIGRhJnZhbnQiCiNkZWZpbmUgTUVOVV9IRUxQX0lORk8gICAgICAgICAgICAgICAiSSZuZnVvcm1heml1bnMiCiNkZWZpbmUgTUVOVV9IRUxQX0FCT1VUX1dJTkUgICAgICAgICAiRGF2YXJ0ICZXSU5FIgoKLyogU3RyaW5ncyAqLwoKI2RlZmluZSBTVFJJTkdfV0lORV9IRUxQICAgICAgICAgICAgICJXSU5FIGFn/GQiCiNkZWZpbmUgU1RSSU5HX0VSUk9SICAgICAgICAgICAgICAgICAiU0JBR0wiCiNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAiQVRURU5aSVVOIgojZGVmaW5lIFNUUklOR19JTkZPICAgICAgICAgICAgICAgICAgIklORlVPUk1BWklVTiIKI2RlZmluZSBTVFJJTkdfTk9UX0lNUExFTUVOVEVEICAgICAgICJOYSBpbXBsZW1lbnRhIgojZGVmaW5lIFNUUklOR19ITFBGSUxFX0VSUk9SX3MgICAgICAgIlNiYWdsIGN1biBsZWdlciBsYSBkYXRvdGVjYSBkJ2Fn/GQgYCVzJyIKI2RlZmluZSBTVFJJTkdfQ09OVEVOVFMgICAgICAgICAgICAgICImQ3VudGdu/CIKI2RlZmluZSBTVFJJTkdfU0VBUkNIICAgICAgICAgICAgICAgICImVHNjaGVyY2hhciIKI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImSW5hdm8iCiNkZWZpbmUgU1RSSU5HX0hJU1RPUlkgICAgICAgICAgICAgICAiJkZpbiBxdWEiCiNkZWZpbmUgU1RSSU5HX0FMTF9GSUxFUyAgICAgICAgICAgICAiVHVvdCBsYXMgZGF0b3RlY2FzICgqLiopIgojZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIkRhdG90ZWNhcyBkJ2Fn/GQgKCouaGxwKSIKCiNpbmNsdWRlICJYeC5yYyIK