LyoKICogSGVscCBWaWV3ZXIgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImQmVzdGFuZCIgewogIE1FTlVJVEVNICImT3BlbmVuIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQWYmZHJ1a2tlbiIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICImUHJpbnRlcmluc3RlbGxpbmdlbi4uLiIsIE1OSURfRklMRV9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWZzbHVpdGVuIiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImQmV3ZXJrZW4iIHsKICAgTUVOVUlURU0gIiZLb3Bp63Jlbi4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFubm90ZXJlbi4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZGYXZvcmlldGVuIiB7CiAgIE1FTlVJVEVNICImQWFubWFrZW4uLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJkhlbHAiIHsKICAgTUVOVUlURU0gIkh1bHAgJmJpaiBoZWxwIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiQWx0aWpkICZ6aWNodGJhYXIiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZJbmZvLi4uIiwgTU5JRF9IRUxQX0FCT1VUCiNpZmRlZiBXSU5FTElCCiAgIE1FTlVJVEVNICImT3ZlciBXSU5FIiwgTU5JRF9IRUxQX1dJTkUKI2VuZGlmCiB9Cn0KCi8qIFN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAkiV0lORSBIZWxwIgpTVElEX1dIRVJST1IsIAkJIkZPVVQiClNUSURfV0FSTklORywgIAkJIldBQVJTQ0hVV0lORyIKU1RJRF9JTkZPLCAgCQkiSW5mb3JtYXRpZSIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkiTmlldCBnZe9tcGxlbWVudGVlcmQiClNUSURfSExQRklMRV9FUlJPUl9zLCAJIkZvdXQgYmlqIGhldCBsZXplbiB2YW4gaGV0IGhlbHBiZXN0YW5kIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIiZJbmhvdWQiClNUSURfU0VBUkNILCAJCSImWm9la2VuIgpTVElEX0JBQ0ssIAkJIiZUZXJ1ZyIKU1RJRF9ISVNUT1JZLCAJCSImR2VzY2hpZWRlbmlzIgpTVElEX1RPUElDUywJCSImT25kZXJ3ZXJwZW4iClNUSURfQUxMX0ZJTEVTLCAJIkFsbGUgYmVzdGFuZGVuICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIkhlbHBiZXN0YW5kZW4gKCouaGxwKSIKfQo=