LyoKICogQ29weXJpZ2h0IDIwMDQgTWFyY2VsbyBEdWFydGUKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX0RFRkFVTFQKClVJSU5TRVJUT0JKRUNUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjk0LCAxNTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSW5zZXJpciBvYmpldG8iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExJU1RCT1ggICAgICAgICBJRENfT0JKVFlQRUxJU1QsODIsMTksMTMxLDY2LExCU19TT1JUIHwKICAgICAgICAgICAgICAgICAgICBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1ZJU0lCTEUgfCBXU19WU0NST0xMIHwKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBMVEVYVCAgICAgICAgICAgIlRpcG8gZGUgb2JqZXRvOiIsSURDX09CSlRZUEVMQkwsODIsNyw1Myw4LFdTX1ZJU0lCTEUKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMjIxLDcsNjYsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDIyMSwyNCw2NiwxNAogICAgR1JPVVBCT1ggICAgICAgICJSZXN1bHRhZG8iLElEQ19SRVNVTFQsNywxMDMsMjA4LDQxCiAgICBDT05UUk9MICAgICAgICAgIkNyaWFyIG5vdm8iLElEQ19DUkVBVEVORVcsIkJ1dHRvbiIsQlNfQVVUT1JBRElPQlVUVE9OIHwgCiAgICAgICAgICAgICAgICAgICAgV1NfR1JPVVAsNywyMCw2MiwxMAogICAgQ09OVFJPTCAgICAgICAgICJDcmlhciBjb250cm9sZSIsSURDX0NSRUFURUNPTlRST0wsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OIHwgTk9UIFdTX1ZJU0lCTEUsNyw1NCw2MiwxMAogICAgQ09OVFJPTCAgICAgICAgICJDcmlhciBkbyBhcnF1aXZvIixJRENfQ1JFQVRFRlJPTUZJTEUsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT1JBRElPQlVUVE9OLDcsMzcsNjcsMTAKICAgIExURVhUICAgICAgICAgICAiIixJRENfUkVTVUxUREVTQyw0OSwxMTIsMTU5LDIzCiAgICBQVVNIQlVUVE9OICAgICAgIiZBZGljaW9uYXIgQ29udHJvbGUuLi4iLElEQ19BRERDT05UUk9MLDgxLDg4LDYzLDE0LE5PVCBXU19WSVNJQkxFCiAgICBDT05UUk9MICAgICAgICAgIk1vc3RyYXIgY29tbyDtY29uZSIsSURDX0FTSUNPTiwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCAKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QIHwgTk9UIFdTX1ZJU0lCTEUsMjIzLDU4LDY0LDEwCiAgICBQVVNIQlVUVE9OICAgICAgIlByb2N1cmFyLi4uIixJRENfQlJPV1NFLDgzLDUzLDUwLDE0LE5PVCBXU19WSVNJQkxFCiAgICBMVEVYVCAgICAgICAgICAgIkFycXVpdm86IixJRENfRklMRUxCTCw4MywyNywyMCw4LCBOT1QgV1NfVklTSUJMRQogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxFLDgzLDM3LDEzMiwxMyxFU19BVVRPSFNDUk9MTCB8IE5PVCBXU19WSVNJQkxFCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19SRVNVTFRPQkpERVNDCSJJbnNlcmlyIHVtIG5vdm8gb2JqZXRvICVzIG5vIGRvY3VtZW50byIKICBJRFNfUkVTVUxURklMRU9CSkRFU0MJIkluc2VyaXIgbyBjb250ZfpkbyBkbyBhcnF1aXZvIGNvbW8gdW0gb2JqZXRvIG5vIGRvY3VtZW50byBkZSBtb2RvIHF1ZSBwb3NzYSBhdGl24S1sbyB1c2FuZG8gbyBwcm9ncmFtYSBxdWUgbyBjcmlvdS4iCiAgSURTX0JST1dTRSAgICAgICAgICAgICJQcm9jdXJhciIKICBJRFNfTk9UT0xFTU9EICAgICAgICAgIk8gYXJxdWl2byBu428gcGFyZWNlIHNlciB1bSBt82R1bG8gT0xFIHbhbGlkby4gSW1wb3Nz7XZlbCByZWdpc3RyYXIgbyBjb250cm9sZSBPTEUuIgogIElEU19OT1RPTEVNT0RDQVBUSU9OICAiQWRpY2lvbmFyIENvbnRyb2xlIgp9Cg==