LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaWZuZGVmIF9fTVNSTEUzMl9QUklWQVRFX0gKI2RlZmluZSBfX01TUkxFMzJfUFJJVkFURV9ICgojaWZuZGVmIFJDX0lOVk9LRUQKI2luY2x1ZGUgPHN0ZGFyZy5oPgojZW5kaWYKCiNpbmNsdWRlICJ3aW5kZWYuaCIKI2luY2x1ZGUgIndpbmJhc2UuaCIKI2luY2x1ZGUgIm1tc3lzdGVtLmgiCiNpbmNsdWRlICJ3aW5nZGkuaCIKI2luY2x1ZGUgIndpbnVzZXIuaCIKI2luY2x1ZGUgInZmdy5oIgoKI2RlZmluZSBJRFNfTkFNRSAgICAgICAgMTAwCiNkZWZpbmUgSURTX0RFU0NSSVBUSU9OIDEwMQojZGVmaW5lIElEU19BQk9VVCAgICAgICAxMDIKCiNkZWZpbmUgTVNSTEUzMl9ERUZBVUxUUVVBTElUWSAoNzUgKiBJQ1FVQUxJVFlfSElHSCkgLyAxMDAKCiNkZWZpbmUgRk9VUkNDX1JMRSAgIG1taW9GT1VSQ0MoJ1InLCdMJywnRScsJyAnKQojZGVmaW5lIEZPVVJDQ19STEU0ICBtbWlvRk9VUkNDKCdSJywnTCcsJ0UnLCc0JykKI2RlZmluZSBGT1VSQ0NfUkxFOCAgbW1pb0ZPVVJDQygnUicsJ0wnLCdFJywnOCcpCiNkZWZpbmUgRk9VUkNDX01STEUgIG1taW9GT1VSQ0MoJ00nLCdSJywnTCcsJ0UnKQoKI2RlZmluZSBXSURUSEJZVEVTKGkpICAgICAoKFdPUkQpKChpKzMxdSkmKH4zMXUpKS84dSkgLyogVUxPTkcgYWxpZ25lZCAhICovCiNkZWZpbmUgRElCV0lEVEhCWVRFUyhiaSkgV0lEVEhCWVRFUygoV09SRCkoYmkpLmJpV2lkdGggKiAoV09SRCkoYmkpLmJpQml0Q291bnQpCgp0eXBlZGVmIHN0cnVjdCBfQ29kZWNJbmZvIHsKICBGT1VSQ0MgIGZjY0hhbmRsZXI7CiAgRFdPUkQgICBkd1F1YWxpdHk7CgogIEJPT0wgICAgYkNvbXByZXNzOwogIExPTkcgICAgblByZXZGcmFtZTsKICBMUFdPUkQgIHBQcmV2RnJhbWU7CiAgTFBXT1JEICBwQ3VyRnJhbWU7CgogIEJPT0wgICAgYkRlY29tcHJlc3M7CiAgTFBCWVRFICBwYWxldHRlX21hcDsKfSBDb2RlY0luZm87Cgp0eXBlZGVmIGNvbnN0IEJJVE1BUElORk9IRUFERVIgKiBMUENCSVRNQVBJTkZPSEVBREVSOwoKI2VuZGlmCg==