LyoKICogQ29weXJpZ2h0IDIwMDUgTWlsa28gS3JhY2hvdW5vdgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfQlVMR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCnsKICAgIElEU19IVE1MRElTQUJMRUQgICAgIkhUTUwg6Ofu4fDg5//i4O3l8u4g5SDo5+rr/vfl7e4uIgogICAgSURTX0hUTUxET0NVTUVOVCAgICAiSFRNTCDk7urz7OXt8iIKICAgIElEU19ET1dOTE9BRElORyAgICAgIsjn8uXj6//t5S4uLiIKICAgIElEU19JTlNUQUxMSU5HICAgICAgIsjt8fLg6+jw4O3lLi4uIgp9CgpJRF9EV0xfRElBTE9HIERJQUxPRyAgMCwgMCwgMjYwLCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV2luZSBHZWNrbyBJbnN0YWxsZXIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgTFRFWFQgIldpbmUgY291bGQgbm90IGZpbmQgYSBHZWNrbyBwYWNrYWdlIHdoaWNoIGlzIG5lZWRlZCBmb3IgYXBwbGljYXRpb25zIGVtYmVkZGluZyBIVE1MICIgXAogICAgICAgICAgInRvIHdvcmsgY29ycmVjdGx5LiBXaW5lIGNhbiBhdXRvbWF0aWNhbGx5IGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0IGZvciB5b3UuXG5cbiIgXAogICAgICAgICAgIk5vdGU6IGl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIGRpc3RybyBwYWNrYWdlcyBpbnN0ZWFkLiBTZWUgaHR0cDovL3dpa2kud2luZWhxLm9yZy9HZWNrbyBmb3IgZGV0YWlscy4iLAogICAgICAgICAgSURfRFdMX1NUQVRVUywgMTAsIDEwLCAyNDAsIDUwLCBTU19MRUZUCiAgICBDT05UUk9MICLN4O/w5eT66iIsIElEX0RXTF9QUk9HUkVTUywgUFJPR1JFU1NfQ0xBU1NBLCBXU19CT1JERVJ8UEJTX1NNT09USCwgMTAsIDQwLCAyNDAsIDEyCiAgICBERUZQVVNIQlVUVE9OICLI7fHy4Ovo8ODpIiwgSURfRFdMX0lOU1RBTEwsIDIwMCwgNzAsIDUwLCAxNSwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICLO8urg5yIsIElEQ0FOQ0VMLCAxNDAsIDcwLCA1MCwgMTUsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAp9Cg==