LyoKICogQ29weXJpZ2h0IDE5OTUgSm9uIFRvbWJzCiAqIENvcHlyaWdodCAyMDA0IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX1NQQU5JU0gsIFNVQkxBTkdfTkVVVFJBTAoKTVNHQk9YIERJQUxPRyAxMDAsIDgwLCAyMTYsIDE2OApTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQkVHSU4KICAgICAgICBJQ09OICIiLCBNU0dCT1hfSURJQ09OLCA4LCAyMCwgMTYsIDE2LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUKICAgICAgICBMVEVYVCAiIiwgTVNHQk9YX0lEVEVYVCwgMzIsIDQsIDE3NiwgNDgsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQIHwgU1NfTk9QUkVGSVgKICAgICAgICBQVVNIQlVUVE9OICImQWNlcHRhciIsIElET0ssIDE2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJkNhbmNlbGFyIiwgSURDQU5DRUwsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiQSZib3J0YXIiLCBJREFCT1JULCAxMTIsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImUmVpbnRlbnRhciIsIElEUkVUUlksIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZJZ25vcmFyIiwgSURJR05PUkUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZT7SIsIElEWUVTLCAyNTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImTm8iLCBJRE5PLCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImVHJ5IEFnYWluIiwgSURUUllBR0FJTiwgMzUyLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJkNvbnRpbnVlIiwgSURDT05USU5VRSwgNDAwLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiSGVscCIsIElESEVMUCwgNDQ4LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAoKTURJX01PUkVXSU5ET1dTIERJQUxPRyAyMCwgMjAsIDIzMiwgMTIyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNlbGVjY2lvbmFyIHZlbnRhbmEiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExJU1RCT1ggICAgICAgICBNRElfSURDX0xJU1RCT1gsIDUsIDcsIDIyMiwgOTAsIFdTX1ZTQ1JPTEwgfCBXU19IU0NST0xMIC8qIGRlZmluZWQgaW4gbWRpLmggKi8KICAgIERFRlBVU0hCVVRUT04gICAiQWNlcHRhciIsIElET0ssIDc1LCAxMDAsIDM1LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAxMjAsIDEwMCwgMzUsIDE0CkVORAo=