LyoKICogTm9yd2VnaWFuIEJva23lbCByZXNvdXJjZXMgZm9yIFR3YWluCiAqCiAqIENvcHlyaWdodCAyMDA2IEFsZXhhbmRlciBOLiBT+HJuZXMgPGFsZXhAdGhlaGFuZG9mYWdvbnkuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKCklERF9DQU1FUkFVSSBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDM3MiwgMjczClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19TRVRGT1JFR1JPVU5EIHwgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgCiAgICBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJGaWxlciBw5SBrYW1lcmEiCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCglDT05UUk9MICAgICAgICAgIkxpc3QxIixJRENfTElTVDEsIlN5c0xpc3RWaWV3MzIiLCBMVlNfSUNPTiB8IFdTX0JPUkRFUiB8CldTX1RBQlNUT1AsNyw3LDM1OCwyMjkKICAgIERFRlBVU0hCVVRUT04gICAiSW1wb3J0ZXIgdmFsZ3RlIixJRENfSU1QT1JULDE1MiwyNTIsNzIsMTQKICAgIFBVU0hCVVRUT04gICAgICAiUHJldmlldyIsSURDX0ZFVENILDcsMjUyLDY0LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkltcG9ydGVyIGFsbGUiLElEQ19JTVBPUlRBTEwsODAsMjUyLDY0LDE0CiAgICBDT05UUk9MICAgICAgICAgIlNraXAgVGhpcyBEaWFsb2ciLElEQ19TS0lQLCJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDIzMCwyNTIsNzYsMTQKICAgIFBVU0hCVVRUT04gICAgICAiQXZzbHV0dCIsSURDX0VYSVQsMzE1LDI1Miw1MCwxNApFTkQKCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxODYsIDQ2ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRSB8IERTX0NFTlRFUiB8IERTX1NFVEZPUkVHUk9VTkQKQ0FQVElPTiAiT3Zlcmb4cmVyIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAiT3Zlcmb4cmVyLi4uIHZlbnQgbGl0dCIsSURDX1NUQVRJQyw1LDE5LDE3Niw4LCBTU19DRU5URVIKRU5ECgpJRERfQ09OTkVDVElORyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI4MCwgMTE2ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VfCBXU19WSVNJQkxFIHwgRFNfQ0VOVEVSCkNBUFRJT04gIktvYmxlciB0aWwga2FtZXJhIgpGT05UIDgsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgQ09OVFJPTCAgICAgICAgICIiLElEQ19CSVRNQVAsIlN0YXRpYyIsU1NfQklUTUFQfFNTX0NFTlRFUklNQUdFLDQsNCwxMTAsMTEwCiAgICBMVEVYVCAgICAgICAgICAgIktvYmxlciB0aWwga2FtZXJhLi4uIHZlbnQgbGl0dCIsSURDX1NUQVRJQywxMjgsNTgsCiAgICAgICAgICAgICAgICAgICAgMTE2LDgKRU5ECg==