LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX0RFRkFVTFQKewogUE9QVVAgIiZBcmNoaXZvIiB7CiAgTUVOVUlURU0gIkEmYnJpci4uLiIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJbXByaW1pciIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICImQ29uZmlndXJhY2nzbiBJbXByZXNvcmEuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTYWxpciIsIE1OSURfRklMRV9FWElUCiB9CiBQT1BVUCAiJkVkaXRhciIgewogICBNRU5VSVRFTSAiJkNvcGlhci4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFub3Rhci4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZNYXJjYWRvciIgewogICBNRU5VSVRFTSAiJkRlZmluaXIuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJkF5dWRhIiB7CiAgIE1FTlVJVEVNICImQXl1ZGEgc29icmUgbGEgYXl1ZGEiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICImVG91am91cnMgdmlzaWJsZSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm8uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIiZBY2VyY2EgZGUgV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1NQQU5JU0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIkF5dWRhIGRlIFdJTkUiClNUSURfV0hFUlJPUiwgCQkiRVJST1IiClNUSURfV0FSTklORywgIAkJIkNVSURBRE8iClNUSURfSU5GTywgIAkJIkluZm9ybWFjafNuIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJB+m4gbm8gaW1wbGVtZW50YWRvIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJFcnJvciBhbCBsZWVyIGVsIGFyY2hpdm8gZGUgYXl1ZGEgYCVzJyIKU1RJRF9DT05URU5UUywgCQkiJkluZGljZSIKU1RJRF9TRUFSQ0gsIAkJIiZCdXNjYXIiClNUSURfQkFDSywgCQkiJkFudGVyaW9yIgpTVElEX0hJU1RPUlksIAkJIiZIaXN0b3JpYSIKU1RJRF9UT1BJQ1MsCQkiJlRvcGljcyIKU1RJRF9BTExfRklMRVMsIAkiVG9kb3MgbG9zIGFyY2hpdm9zICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIkFyY2hpdm9zIGRlIGF5dWRhICgqLmhscCkiCn0K