LyoKICogU3RhcnQgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0RVVENILCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnQgZWVuIHByb2dyYW1tYSwgb2Ygb3BlbiBlZW4gZG9jdW1lbnQgbWV0IGhldCBwcm9ncmFtbWEgZGF0IG5vcm1hYWwgdm9vciBiZXN0YW5kZW4gbWV0IGRpZSBleHRlbnNpZSBnZWJydWlrdCB3b3JkdC4gXG5cCkdlYnJ1aWs6IFxuXApzdGFydCBbb3B0aW9uc10gcHJvZ3JhbW1hX25hYW0gWy4uLl0gXG5cCnN0YXJ0IFtvcHRpb25zXSBkb2N1bWVudF9uYWFtIFxuXAogXG5cCk9wdGlvbnM6IFxuXAovTVtpbmltaXplZF0gU3RhcnQgaGV0IHByb2dyYW1tYSBnZW1pbmltYWxpc2VlcmQuIFxuXAovTUFYW2ltaXplZF0gU3RhcnQgaGV0IHByb2dyYW1tYSBnZW1heGltYWxpc2VlcmQuIFxuXAovUltlc3RvcmVkXSAgU3RhcnQgaGV0IHByb2dyYW1tYSBub3JtYWFsIChub2NoIGdlbWluaW1hbGlzZWVyZCBub2NoIGdlbWF4aW1hbGlzZWVyZCkuIFxuXAovV1thaXRdICAgICAgV2FjaHQgdG90ZGF0IGhldCBnZXN0YXJ0ZSBwcm9ncmFtbWEgaXMgYmXraW5kaWdkLCBlaW5kaWcgZGFuIG1ldCBkZSBleGl0IGNvZGUgdmFuIGRhdCBwcm9ncmFtbWEuIFxuXAovTCAgICAgICAgICAgTGFhdCBkZSBnZWJydWlrZXJzbGljZW50aWUgemllbi4gXG5cCiBcblwKc3RhcnQuZXhlIHZlcnNpb24gMC4yIENvcHlyaWdodCAoQykgMjAwMywgRGFuIEtlZ2VsIFxuXApTdGFydCB3b3JkdCB1IEFCU09MVVVUIFpPTkRFUiBHQVJBTlRJRSBhYW5nZWJvZGVuOyBkcmFhaSBkaXQgcHJvZ3JhbW1hIG1ldCBkZSAvTCBvcHRpZSB2b29yIGRldGFpbHMuIFxuXApEaXQgaXMgdnJpamUgc29mdHdhcmUsIGVuIHUgd29yZHQgdWl0Z2Vub2RpZ2Qgb20gaGV0IHZlcmRlciB0ZSB2ZXJzcHJlaWRlbiBcblwKb25kZXIgYmVwYWFsZGUgdm9vcndhYXJkZW47IGRyYWFpICdzdGFydCAvTCcgdm9vciBkZXRhaWxzLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc2lvbiAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBcblwKIFxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIFxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIFxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIFxuXAogXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFxuXApGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gXG5cCiBcblwKU2VlIHRoZSBDT1BZSU5HLkxJQiBmaWxlIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJQcm9ncmFtbWEga2FuIG5pZXQgd29yZGVuIGdlc3RhcnQsIG9mIGVyIGlzIGdlZW4gcHJvZ3JhbW1hIHZlcmJvbmRlbiBtZXQgaGV0IG9wZ2VnZXZlbiBiZXN0YW5kLlxuU2hlbGxFeGVjdXRlRXggaXMgbWlzbHVrdCIKfQo=