LyoKICogVW5pbnN0YWxsZXIgKEZyZW5jaCBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDA1LTIwMDYgSm9uYXRoYW4gRXJuc3QKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKSUREX1VOSU5TVEFMTEVSIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMzMwLCAxNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkTpc2luc3RhbGxldXIgZCdhcHBsaWNhdGlvbnMgZGUgV2luZSIKRk9OVCAxMCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIlZldWlsbGV6IHPpbGVjdGlvbm5lciBsJ2FwcGxpY2F0aW9uIOAgZOlzaW5zdGFsbGVyoDoiLElEQ19QTEVBU0VTRUxFQ1QsMTAsMTAsMjUwLDE0CiAgICBFRElUVEVYVCAgICAgICAgSURDX0ZJTFRFUiwxMCwyNSwyNTAsMTQsRVNfQVVUT0hTQ1JPTEwKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVCwxMCw0MywyNTAsMTA2LExCU19OT0lOVEVHUkFMSEVJR0hUIHwgCiAgICAgICAgICAgICAgICAgICAgTEJTX0VYVEVOREVEU0VMIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiJlN1cHByaW1lciIsSURDX1VOSU5TVEFMTCwyNzAsNDgsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAiwCAmcHJvcG9zIixJRENfQUJPVVQsMjcwLDY1LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZRdWl0dGVyIixJRENfRVhJVCwyNzAsODEsNTAsMTQKRU5ECgoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgewogICAgIElEU19BUFBOQU1FLCAiROlzaW5zdGFsbGV1ciBkJ2FwcGxpY2F0aW9ucyBkZSBXaW5lIgogICAgIElEU19BQk9VVCwgIkTpc2luc3RhbGxldXIgZCdhcHBsaWNhdGlvbnMgZGUgV2luZSAoQykgMjAwNSBwYXIgQW5kcmVhcyBNb2hyLCBIYW5udSBWYWx0b25lbiBldCBKb25hdGhhbiBFcm5zdC4iCiAgICAgSURTX0FCT1VUVElUTEUsICLAIHByb3BvcyBkdSBk6XNpbnN0YWxsZXVyIgogICAgIElEU19SRUdJU1RSWUtFWU5PVEFWQUlMQUJMRSwgIkNs6SBkZSBkc2luc3RhbGxhdGlvbiBub24gZGlzcG9uaWJsZSBkYW5zIGxhIGJhc2UgZGUgcmVnaXN0cmUgKGFjdHVlbGxlbWVudCkuIElsIG4neSBhIHJpZW4gIGZhaXJlICEiCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIkVycmV1ciBsb3JzIGRlIGwnZXhjdXRpb24gZGUgbGEgY29tbWFuZGUgZGUgZOlzaW5zdGFsbGF0aW9uIKsgJXMguy4gTCdleOljdXRhYmxlIG5lIHBldXQgcGV1dCDqdHJlIHBhcyDqdHJlIHRyb3V26S5cclxuU291aGFpdGV6LXZvdXMgc3VwcHJpbW1lciBsJ2VudHLpZSBkZSBsYSBiYXNlIGRlIHJlZ2lzdHJlID8iCn0K