LyoKICogTVBSIGRsbCByZXNvdXJjZXMgZm9yIERhbmlzaAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDggSmVucyBBbGJyZXRzZW4gPGplbnNAYWxicmV0c2VuLmRrPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibXBycmVzLmgiCgpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfRU5USVJFTkVUV09SSyAiSGVsZSBuZXR25nJrZXQiCn0KCklERF9QUk9YWURMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI1MCwgMTU0ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNrcml2IG5ldHbmcmtza29kZW9yZCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBMVEVYVCAiU2tyaXYgZGl0IGJydWdlcm5hdm4gb2cga29kZW9yZDoiLCBJRENfRVhQTEFJTiwgNDAsIDYsIDE1MCwgMTUKIExURVhUICJQcm94eSIsIC0xLCA0MCwgMjYsIDUwLCAxMAovKiBMVEVYVCAiUmVhbG0iLCAtMSwgNDAsIDQ2LCA1MCwgMTAgKi8KIExURVhUICJCcnVnZXJuYXZuIiwgLTEsIDQwLCA2NiwgNTAsIDEwCiBMVEVYVCAiS29kZW9yZCIsIC0xLCA0MCwgODYsIDUwLCAxMAogTFRFWFQgIiIsIElEQ19QUk9YWSwgODAsIDI2LCAxNTAsIDE0LCAwCiBMVEVYVCAiIiwgSURDX1JFQUxNLCA4MCwgNDYsIDE1MCwgMTQsIDAKIEVESVRURVhUIElEQ19VU0VSTkFNRSwgODAsIDY2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKIEVESVRURVhUIElEQ19QQVNTV09SRCwgODAsIDg2LCAxNTAsIDE0LCBFU19BVVRPSFNDUk9MTCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19QQVNTV09SRAogQ0hFQ0tCT1ggIkdlbSBkZXR0ZSBrbyZkZW9yZCAodXNpa2tlcnQpIiwgSURDX1NBVkVQQVNTV09SRCwKICAgICAgICAgICA4MCwgMTA2LCAxNTAsIDEyLCBCU19BVVRPQ0hFQ0tCT1ggfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIk9LIiwgSURPSywgOTgsIDEyNiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AgfCBCU19ERUZQVVNIQlVUVE9OCiBQVVNIQlVUVE9OICJBbm51bGxlciIsIElEQ0FOQ0VMLCAxNTgsIDEyNiwgNTYsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQo=