LyoKICogTkVULkVYRSAtIFdpbmUtY29tcGF0aWJsZSBuZXQgcHJvZ3JhbQogKiBEYW5pc2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDggSmVucyBBbGJyZXRzZW4gPGplbnNAYWxicmV0c2VuLmRrPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRQp7CiAgICBTVFJJTkdfVVNBR0UsICJT5WRhbiBicnVnZXMgcHJvZ3JhbW1ldDpcblxuTkVUIFsgSEVMUCB8IFNUQVJUIHwgU1RPUCB8IFVTRSBdXG4iCiAgICBTVFJJTkdfU1RBUlRfVVNBR0UsICJBbmdpdiBuYXZuZXQgcOUgc2VydmljZW4gc29tIHNrYWwgc3RhcnRlcy5cbiIKICAgIFNUUklOR19TVE9QX1VTQUdFLCAiQW5naXYgbmF2bmV0IHDlIHNlcnZpY2VuIHNvbSBza2FsIHN0b3BwZXMuXG4iCiAgICBTVFJJTkdfU1RPUF9ERVAsICJTdG9wcGVyIGFmaOZuZ2lnIHRqZW5lc3RlOiAlc1xuIgogICAgU1RSSU5HX0NBTlRfU1RPUCwgIkt1bm5lIGlra2Ugc3RvcHBlIHRqZW5lc3RlbiCrJXO7XG4iCiAgICBTVFJJTkdfTk9fU0NNLCAiS3VubmUgaWtrZSBrb250YWt0ZSB0amVuZXN0ZWJlaGFuZGxlcmVuLlxuIgogICAgU1RSSU5HX05PX1NWQ0hBTkRMRSwgIkt1bm5lIGlra2Uga29udGFrdGUgdGplbmVzdGVuLlxuIgogICAgU1RSSU5HX1NUQVJUX1NWQywgIlRqZW5lc3RlbiCrJXO7IHN0YXJ0ZXIuXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX1NVQ0NFU1MsICJUamVuZXN0ZW4gqyVzuyBzdGFydGVkZSB2ZWxseWtrZXQuXG4iCiAgICBTVFJJTkdfU1RBUlRfU1ZDX0ZBSUwsICJUamVuZXN0ZW4gqyVzuyBrdW5uZSBpa2tlIHN0YXJ0ZS5cbiIKICAgIFNUUklOR19TVE9QX1NWQywgIlRqZW5lc3RlbiCrJXO7IHN0b3BwZXIuXG4iCiAgICBTVFJJTkdfU1RPUF9TVkNfU1VDQ0VTUywgIlRqZW5lc3RlbiCrJXO7IHN0b3BwZWRlIHZlbGx5a2tldC5cbiIKICAgIFNUUklOR19TVE9QX1NWQ19GQUlMLCAiS3VubmUgaWtrZSBzdG9wcGUgdGplbmVzdGVuIKslc7suXG4iCiAgICBTVFJJTkdfSEVMUF9VU0FHRSwgIlPlZGFuIGZvciBkdSBoauZscDpcblxuTkVUIEhFTFAga29tbWFuZG9cbiAgICAtZWxsZXItXG5ORVQga29tbWFuZG8gL0hFTFBcblxuICAgVGlsZ+ZuZ2VsaWdlIGtvbW1hbmRvZXI6XG4gICBORVQgSEVMUCAgICBORVQgU1RBUlQgICAgTkVUIFNUT1AgICAgTkVUIFVTRVxuIgogICAgU1RSSU5HX05PX0VOVFJJRVMsICJEZXQgZXIgaW5nZW4gaW5kc2tyaXZuaW5nIGkgbGlzdGVuLlxuIgogICAgU1RSSU5HX1VTRV9IRUFERVIsICJcblN0YXR1cyAgICBMb2thbCAgIFJlbW90ZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICBTVFJJTkdfVVNFX0VOVFJZLCAiJXMgICAgICAlUyAgICAgICVTICAgICAgxWJuZSByZXNvdXJzZXI6ICVsdVxuIgp9Cg==