LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTcgSGVucmlrIE9sc2VuCiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiBDb3B5cmlnaHQgMjAwOCBKZW5zIEFsYnJldHNlbjxqZW5zQGFsYnJldHNlbi5kaz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKLyogTWVudSAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkZpbGVyIiB7CiAgTUVOVUlURU0gIsUmYmVuLi4uIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlVkc2tyaXYgZW1uZSIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICImSW5kc3RpbCBwcmludGVyIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWZzbHV0IiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICImUmVkaWdlciIgewogICBNRU5VSVRFTSAiSyZvcGllci4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFubeZyay4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIkJvZyZt5nJrZSIgewogICBNRU5VSVRFTSAiJkRlZmluZXIuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJkhq5mxwIiB7CiAgIE1FTlVJVEVNICImQnJ1ZyBhZiBIauZscCIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIkFsdGlkICb4dmVyc3QiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZJbmZvcm1hdGlvbi4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiT20gJldJTkUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKSUREX0lOREVYIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyMDAsIDE5MCBMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIkluZGV4Igp7CiAgICBMSVNUQk9YIElEQ19JTkRFWExJU1QsIDEwLCAxMCwgMTgwLCAxNTAsIExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogICAgUFVTSEJVVFRPTiAiJk9LIiwgSURPSywgNDAsIDE3MCwgNTAsIDEyCiAgICBQVVNIQlVUVE9OICImQW5udWxsZXIiLCBJRENBTkNFTCwgMTIwLCAxNzAsIDUwLCAxMgp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfREFOSVNILCBTVUJMQU5HX0RFRkFVTFQKewpTVElEX1dJTkVfSEVMUCwgCSJXSU5FIEhq5mxwIgpTVElEX1dIRVJST1IsIAkJIkZFSkwiClNUSURfV0FSTklORywgIAkJIkFEVkFSU0VMIgpTVElEX0lORk8sICAJCSJJbmZvcm1hdGlvbiIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkiSWtrZSBpbXBsZW1lbnRlcmV0IgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJGZWpsIHZlZCBpbmRs5nNuaW5nIGFmIGZpbGVuIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIiZJbmRob2xkIgpTVElEX1NFQVJDSCwgCQkiJlP4ZyIKU1RJRF9CQUNLLCAJCSImVGlsYmFnZSIKU1RJRF9ISVNUT1JZLCAJCSImT3ZlcnNpZ3QiClNUSURfVE9QSUNTLCAJCSImRW1uZXIiClNUSURfQUxMX0ZJTEVTLCAJIkFsbGUgZmlsZXIgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiSGrmbHBlIGZpbGVyICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcwkiS2FuIGlra2UgZmluZGUgJyVzJy4gVmlsIGR1IHNlbHYgZmluZGUgZmlsZW4/IgpTVElEX05PX1JJQ0hFRElUCSJLYW4gaWtrZSBmaW5kZSBlbiAncmljaGVkaXQnIGltcGxlbWVudGVyaW5nLi4uIEFmYnJ5ZGVyIgp9Cg==