LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCgpJRERfU0FWRU9QVElPTlMgRElBTE9HIEZJWEVEIElNUFVSRSAgNDMsIDM3LCAyMjYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJLb21wcmltaWVydW5nc29wdGlvbmVuIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIiZX5GhsZW4gU2llIGRpZSBFaW5nYW5nc2RhdGVuIGF1czoiLC0xLDIsNSwxNTQsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfU1RSRUFNLDIsMTgsMTU0LDYxLENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZPcHRpb25lbi4uLiIsSURDX09QVElPTlMsMTcwLDE3LDUwLDE0CiAgICBBVVRPQ0hFQ0tCT1ggICAgIiZJbnRlcmxlYXZlIGFsbGUiLElEQ19JTlRFUkxFQVZFLDMsNDIsNzUsMTEsV1NfVEFCU1RPUAogICAgRURJVFRFWFQgICAgICAgIElEQ19JTlRFUkxFQVZFRVZFUlksODEsNDEsMzIsMTIsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiRWluemVsYmlsZGVyIiwtMSwxMTksNDMsMzYsOQogICAgTFRFWFQgICAgICAgICAgICJBa3R1ZWxsZXMgRm9ybWF0OiIsLTEsMyw1Niw3Myw5CiAgICBMVEVYVCAgICAgICAgICAgIlRoaXMgc3BhY2UgZm9yIHJlbnQiLElEQ19GT1JNQVRURVhULDc1LDU2LDkwLDI2CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE3MCw0Miw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICJBYmJyZWNoZW4iLElEQ0FOQ0VMLDE3MCw2MSw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICBJRFNfV0FWRVNUUkVBTUZPUk1BVAkiV2F2ZWZvcm06ICVzIgogIElEU19XQVZFRklMRVRZUEUJIldhdmVmb3JtIgogIElEU19BTExNVUxUSU1FRElBCSJBbGxlIE11bHRpbWVkaWEtRGF0ZWllbiIKICBJRFNfQUxMRklMRVMJCSJBbGxlIERhdGVpZW4gKCouKilAKi4qIgogIElEU19WSURFTwkJIlZpZGVvIgogIElEU19BVURJTwkJIkF1ZGlvIgogIElEU19BVklTVFJFQU1GT1JNQVQJIiVzICVzICMlZCIKICBJRFNfQVZJRklMRVRZUEUJIldpbmUgQVZJLVN0YW5kYXJkLURhdGVpYmVoYW5kbHVuZ3Nyb3V0aW5lIgogIElEU19VTkNPTVBSRVNTRUQgICAgICAiVW5rb21wcmltaWVydCIKfQo=