IwojIENvbmZpZyBmaWxlIGZvciBrdGVzdC5wbAojCiMgTm90ZSwgYWxsIHBhdGhzIG11c3QgYmUgYWJzb2x1dGUKIwoKIyBPcHRpb25zIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIGFyZSBjb25zaWRlcmVkIHRvIGJlCiMgZGVmYXVsdCBvcHRpb25zLiBUaGVzZSBvcHRpb25zIGNhbiBiZSBvdmVycmlkZW4gYnkgdGVzdCBzcGVjaWZpYwojIG9wdGlvbnMsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgojCiMgIExPR19GSUxFCiMgIENMRUFSX0xPRwojICBQT1dFUk9GRl9PTl9TVUNDRVNTCiMgIFJFQk9PVF9PTl9TVUNDRVNTCiMKIyBUZXN0IHNwZWNpZmljIG9wdGlvbnMgYXJlIHNldCBhZnRlciB0aGUgbGFiZWw6CiMKIyBURVNUX1NUQVJUCiMKIyBUaGUgb3B0aW9ucyBhZnRlciBhIFRFU1RfU1RBUlQgbGFiZWwgYXJlIHNwZWNpZmljIHRvIHRoYXQgdGVzdC4KIyBFYWNoIFRFU1RfU1RBUlQgbGFiZWwgd2lsbCBzZXQgdXAgYSBuZXcgdGVzdC4gSWYgeW91IHdhbnQgdG8KIyBwZXJmb3JtIGEgdGVzdCBtb3JlIHRoYW4gb25jZSwgeW91IGNhbiBhZGQgdGhlIElURVJBVEUgbGFiZWwKIyB0byBpdCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHlvdSB3YW50IHRoYXQgdGVzdAojIHRvIGl0ZXJhdGUuIElmIHRoZSBJVEVSQVRFIGlzIGxlZnQgb2ZmLCB0aGUgdGVzdCB3aWxsIG9ubHkKIyBiZSBwZXJmb3JtZWQgb25jZS4KIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgWW91IGNhbiBza2lwIGEgdGVzdCBieSBhZGRpbmcgU0tJUCAoYmVmb3JlIG9yIGFmdGVyIHRoZSBJVEVSQVRFCiMgYW5kIG51bWJlcikKIwojIFRFU1RfU1RBUlQgU0tJUAojCiMgVEVTVF9TVEFSVCBTS0lQIElURVJBVEUgMTAKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMCBTS0lQCiMKIyBUaGUgU0tJUCBsYWJlbCBjYXVzZXMgdGhlIG9wdGlvbnMgYW5kIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBpZ25vcmVkLgojIFRoaXMgaXMgdXNlZnVsIHRvIHNldCB1cCBzZXZlcmFsIGRpZmZlcmVudCB0ZXN0cyBpbiBvbmUgY29uZmlnIGZpbGUsIGFuZAojIG9ubHkgZW5hYmxpbmcgdGhlIG9uZXMgeW91IHdhbnQgdG8gdXNlIGZvciBhIGN1cnJlbnQgdGVzdCBydW4uCiMKIyBZb3UgY2FuIGFkZCBkZWZhdWx0IG9wdGlvbnMgYW55d2hlcmUgaW4gdGhlIGZpbGUgYXMgd2VsbAojIHdpdGggdGhlIERFRkFVTFRTIHRhZy4gVGhpcyBhbGxvd3MgeW91IHRvIGhhdmUgZGVmYXVsdCBvcHRpb25zCiMgYWZ0ZXIgdGhlIHRlc3Qgb3B0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IG9wdGlvbnMgYXQgdGhlIHRvcAojIG9mIHRoZSBmaWxlLiBZb3UgY2FuIGV2ZW4gcGxhY2UgdGhlIERFRkFVTFRTIHRhZyBiZXR3ZWVuCiMgdGVzdCBjYXNlcyAoYnV0IG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgc2luZ2xlIHRlc3QgY2FzZSkKIwojIFRFU1RfU1RBUlQKIyBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctdGVzdDEKIwojIERFRkFVTFRTCiMgTUlOX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQKIwojIFRFU1RfU1RBUlQgSVRFUkFURSAxMAojCiMgVGhlIGFib3ZlIHdpbGwgcnVuIHRoZSBmaXJzdCB0ZXN0IHdpdGggTUlOX0NPTkZJRyBzZXQgdG8KIyAvaG9tZS90ZXN0L2NvbmZpZy10ZXN0LTEuIFRoZW4gMTAgdGVzdHMgd2lsbCBiZSBleGVjdXRlZAojIHdpdGggTUlOX0NPTkZJRyB3aXRoIC9ob21lL3Rlc3QvY29uZmlnLWRlZmF1bHQuCiMKIyBZb3UgY2FuIGFsc28gZGlzYWJsZSBkZWZhdWx0cyB3aXRoIHRoZSBTS0lQIG9wdGlvbgojCiMgREVGQVVMVFMgU0tJUAojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy11c2Utc29tZXRpbWVzCiMKIyBERUZBVUxUUwojIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1tb3N0LXRpbWVzCiMKIyBUaGUgYWJvdmUgd2lsbCBpZ25vcmUgdGhlIGZpcnN0IE1JTl9DT05GSUcuIElmIHlvdSB3YW50IHRvCiMgdXNlIHRoZSBmaXJzdCBNSU5fQ09ORklHLCByZW1vdmUgdGhlIFNLSVAgZnJvbSB0aGUgZmlyc3QKIyBERUZBVUxUUyB0YWcgYW5kIGFkZCBpdCB0byB0aGUgc2Vjb25kLiBCZSBjYXJlZnVsLCBvcHRpb25zCiMgbWF5IG9ubHkgYmUgZGVjbGFyZWQgb25jZSBwZXIgdGVzdCBvciBkZWZhdWx0LiBJZiB5b3UgaGF2ZQojIHRoZSBzYW1lIG9wdGlvbiBuYW1lIHVuZGVyIHRoZSBzYW1lIHRlc3Qgb3IgYXMgZGVmYXVsdAojIGt0ZXN0IHdpbGwgZmFpbCB0byBleGVjdXRlLCBhbmQgbm8gdGVzdHMgd2lsbCBydW4uCiMKCiMjIyMgQ29uZmlnIHZhcmlhYmxlcyAjIyMjCiMKIyBUaGlzIGNvbmZpZyBmaWxlIGNhbiBhbHNvIGNvbnRhaW4gImNvbmZpZyB2YXJpYWJsZXMiLgojIFRoZXNlIGFyZSBhc3NpZ25lZCB3aXRoICI6PSIgaW5zdGVhZCBvZiB0aGUga3Rlc3Qgb3B0aW9uCiMgYXNzaWdtZW50ICI9Ii4KIwojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4ga3Rlc3Qgb3B0aW9ucyBhbmQgY29uZmlnIHZhcmlhYmxlcwojIGlzIHRoYXQgY29uZmlnIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcywKIyB3aGVyZSBlYWNoIGluc3RhbmNlIHdpbGwgb3ZlcnJpZGUgdGhlIHByZXZpb3VzIGluc3RhbmNlLgojIEFuZCB0aGF0IHRoZXkgb25seSBsaXZlIGF0IHRpbWUgb2YgcHJvY2Vzc2luZyB0aGlzIGNvbmZpZy4KIwojIFRoZSBhZHZhbnRhZ2UgdG8gY29uZmlnIHZhcmlhYmxlcyBhcmUgdGhhdCB0aGV5IGNhbiBiZSB1c2VkCiMgYnkgYW55IG9wdGlvbiBvciBhbnkgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhpbmcKIyB0aGF0IHlvdSBtYXkgdXNlIG92ZXIgYW5kIG92ZXIgYWdhaW4gaW4gdGhlIG9wdGlvbnMuCiMKIyBGb3IgZXhhbXBsZToKIwojIFVTRVIgICAgICA6PSByb290CiMgVEFSR0VUICAgIDo9IG15Ym94CiMgVEVTVF9DQVNFIDo9IHNzaCAke1VTRVJ9QCR7VEFSR0VUfSAvcGF0aC90by9teS90ZXN0CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0NBU0UgOj0gc3NoICR7VVNFUn1AJHtUQVJHRVR9IC9wYXRoL3RvL215L3Rlc3QyCiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzEKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX1NUQVJUCiMgTUlOX0NPTkZJRyA9IGNvbmZpZzIKIyBURVNUID0gJHtURVNUX0NBU0V9CiMKIyBURVNUX0RJUiA6PSAvaG9tZS9tZS90ZXN0CiMKIyBCVUlMRF9ESVIgPSAke1RFU1RfRElSfS9saW51eC5naXQKIyBPVVRQVVRfRElSID0gJHtURVNUX0RJUn0vdGVzdAojCiMgTm90ZSwgdGhlIGNvbmZpZyB2YXJpYWJsZXMgYXJlIGV2YWx1YXRlZCBpbW1lZGlhdGVseSwgdGh1cwojIHVwZGF0aW5nIFRBUkdFVCBhZnRlciBURVNUX0NBU0UgaGFzIGJlZW4gYXNzaWduZWQgZG9lcyBub3RoaW5nCiMgdG8gVEVTVF9DQVNFLgojCiMgQXMgc2hvd24gaW4gdGhlIGV4YW1wbGUsIHRvIGV2YWx1YXRlIGEgY29uZmlnIHZhcmlhYmxlLCB5b3UKIyB1c2UgdGhlICR7WH0gY29udmVudGlvbi4gU2ltcGxlICRYIHdpbGwgbm90IHdvcmsuCiMKIyBJZiB0aGUgY29uZmlnIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LCB0aGUgJHtYfSB3aWxsIG5vdAojIGJlIGV2YWx1YXRlZC4gVGh1czoKIwojIE1BS0VfQ01EID0gUEFUSD0vbXlwYXRoOiR7UEFUSH0gbWFrZQojCiMgSWYgUEFUSCBpcyBub3QgYSBjb25maWcgdmFyaWFibGUsIHRoZW4gdGhlICR7UEFUSH0gaW4KIyB0aGUgTUFLRV9DTUQgb3B0aW9uIHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBzaGVsbCB3aGVuCiMgdGhlIE1BS0VfQ01EIG9wdGlvbiBpcyBwYXNzZWQgaW50byBzaGVsbCBwcm9jZXNzaW5nLgoKIyMjIyBVc2luZyBvcHRpb25zIGluIG90aGVyIG9wdGlvbnMgIyMjIwojCiMgT3B0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcgZmlsZSBtYXkgYWxzbyBiZSB1c2VkCiMgYnkgb3RoZXIgb3B0aW9ucy4gQWxsIG9wdGlvbnMgYXJlIGV2YXVsYXRlZCBhdCB0aW1lIG9mCiMgdXNlIChleGNlcHQgdGhhdCBjb25maWcgdmFyaWFibGVzIGFyZSBldmFsdWF0ZWQgYXQgY29uZmlnCiMgcHJvY2Vzc2luZyB0aW1lKS4KIwojIElmIGFuIGt0ZXN0IG9wdGlvbiBpcyB1c2VkIHdpdGhpbiBhbm90aGVyIG9wdGlvbiwgaW5zdGVhZCBvZgojIHR5cGluZyBpdCBhZ2FpbiBpbiB0aGF0IG9wdGlvbiB5b3UgY2FuIHNpbXBseSB1c2UgdGhlIG9wdGlvbgojIGp1c3QgbGlrZSB5b3UgY2FuIGNvbmZpZyB2YXJpYWJsZXMuCiMKIyBNQUNISU5FID0gbXlib3gKIwojIFRFU1QgPSBzc2ggcm9vdEAke01BQ0hJTkV9IC9wYXRoL3RvL3Rlc3QKIwojIFRoZSBvcHRpb24gd2lsbCBiZSB1c2VkIHBlciB0ZXN0IGNhc2UuIFRodXM6CiMKIyBURVNUX1RZUEUgPSB0ZXN0CiMgVEVTVCA9IHNzaCByb290QHtNQUNISU5FfQojCiMgVEVTVF9TVEFSVAojIE1BQ0hJTkUgPSBib3gxCiMKIyBURVNUX1NUQVJUCiMgTUFDSElORSA9IGJveDIKIwojIEZvciBib3RoIHRlc3QgY2FzZXMsIE1BQ0hJTkUgd2lsbCBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUKIyBvZiB0aGUgdGVzdCBjYXNlLiBUaGUgZmlyc3QgdGVzdCB3aWxsIHJ1biBzc2ggcm9vdEBib3gxCiMgYW5kIHRoZSBzZWNvbmQgd2lsbCBydW4gc3NoIHJvb3RAYm94Mi4KCiMjIyMgTWFuZGF0b3J5IERlZmF1bHQgT3B0aW9ucyAjIyMjCgojIFRoZXNlIG9wdGlvbnMgbXVzdCBiZSBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLCBhbHRob3VnaCBtb3N0CiMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGVzdCBvcHRpb25zLgoKIyBUaGUgbWFjaGluZSBob3N0bmFtZSB0aGF0IHlvdSB3aWxsIHRlc3QKI01BQ0hJTkUgPSB0YXJnZXQKCiMgVGhlIGJveCBpcyBleHBlY3RlZCB0byBoYXZlIHNzaCBvbiBub3JtYWwgYm9vdHVwLCBwcm92aWRlIHRoZSB1c2VyCiMgIChtb3N0IGxpa2VseSByb290LCBzaW5jZSB5b3UgbmVlZCBwcml2aWxlZ2VkIG9wZXJhdGlvbnMpCiNTU0hfVVNFUiA9IHJvb3QKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBMaW51eCBzb3VyY2UgY29kZQojQlVJTERfRElSID0gL2hvbWUvdGVzdC9saW51eC5naXQKCiMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBvYmplY3RzIHdpbGwgYmUgYnVpbHQKIyAoY2FuIG5vdCBiZSBzYW1lIGFzIEJVSUxEX0RJUikKI09VVFBVVF9ESVIgPSAvaG9tZS90ZXN0L2J1aWxkL3RhcmdldAoKIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGZpbGUgdG8gY29weSB0byB0aGUgdGFyZ2V0CiMgKHJlbGF0aXZlIHRvIE9VVFBVVF9ESVIpCiNCVUlMRF9UQVJHRVQgPSBhcmNoL3g4Ni9ib290L2J6SW1hZ2UKCiMgVGhlIHBsYWNlIHRvIHB1dCB5b3VyIGltYWdlIG9uIHRoZSB0ZXN0IG1hY2hpbmUKI1RBUkdFVF9JTUFHRSA9IC9ib290L3ZtbGludXotdGVzdAoKIyBBIHNjcmlwdCBvciBjb21tYW5kIHRvIHJlYm9vdCB0aGUgYm94CiMKIyBIZXJlIGlzIGEgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaCBleGFtcGxlCiNQT1dFUl9DWUNMRSA9IHdnZXQgLS1uby1wcm94eSAtTyAvZGV2L251bGwgLXEgIC0tYXV0aC1uby1jaGFsbGVuZ2UgJ2h0dHA6Ly9hZG1pbjphZG1pbkBwb3dlci9vdXRsZXQ/NT1DQ0wnCiMKIyBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gcmVib290IGEgdmlydHVhbCBib3ggb24gdGhlIGN1cnJlbnQgaG9zdAojIHdpdGggdGhlIG5hbWUgIkd1ZXN0Ii4KI1BPV0VSX0NZQ0xFID0gdmlyc2ggZGVzdHJveSBHdWVzdDsgc2xlZXAgNTsgdmlyc2ggc3RhcnQgR3Vlc3QKCiMgVGhlIHNjcmlwdCBvciBjb21tYW5kIHRoYXQgcmVhZHMgdGhlIGNvbnNvbGUKIwojICBJZiB5b3UgdXNlIHR0eXdhdGNoIHNlcnZlciwgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyB3b3VsZCB3b3JrLgojQ09OU09MRSA9IG5jIC1kIGxvY2FsaG9zdCAzMDAxCiMKIyBGb3IgYSB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBndWVzdCBuYW1lICJHdWVzdCIuCiNDT05TT0xFID0gIHZpcnNoIGNvbnNvbGUgR3Vlc3QKCiMgUmVxdWlyZWQgdmVyc2lvbiBlbmRpbmcgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdGVzdAojIGZyb20gb3RoZXIgbGludXggYnVpbGRzIG9uIHRoZSBzeXN0ZW0uCiNMT0NBTFZFUlNJT04gPSAtdGVzdAoKIyBUaGUgZ3J1YiB0aXRsZSBuYW1lIGZvciB0aGUgdGVzdCBrZXJuZWwgdG8gYm9vdAojIChPbmx5IG1hbmRhdG9yeSBpZiBSRUJPT1RfVFlQRSA9IGdydWIpCiMKIyBOb3RlLCBrdGVzdC5wbCB3aWxsIG5vdCB1cGRhdGUgdGhlIGdydWIgbWVudS5sc3QsIHlvdSBuZWVkIHRvCiMgbWFudWFsbHkgYWRkIGFuIG9wdGlvbiBmb3IgdGhlIHRlc3QuIGt0ZXN0LnBsIHdpbGwgc2VhcmNoCiMgdGhlIGdydWIgbWVudS5sc3QgZm9yIHRoaXMgb3B0aW9uIHRvIGZpbmQgd2hhdCBrZXJuZWwgdG8KIyByZWJvb3QgaW50by4KIwojIEZvciBleGFtcGxlLCBpZiBpbiB0aGUgL2Jvb3QvZ3J1Yi9tZW51LmxzdCB0aGUgdGVzdCBrZXJuZWwgdGl0bGUgaGFzOgojIHRpdGxlIFRlc3QgS2VybmVsCiMga2VybmVsIHZtbGludXotdGVzdAojR1JVQl9NRU5VID0gVGVzdCBLZXJuZWwKCiMgQSBzY3JpcHQgdG8gcmVib290IHRoZSB0YXJnZXQgaW50byB0aGUgdGVzdCBrZXJuZWwKIyAoT25seSBtYW5kYXRvcnkgaWYgUkVCT09UX1RZUEUgPSBzY3JpcHQpCiNSRUJPT1RfU0NSSVBUID0KCiMjIyMgT3B0aW9uYWwgQ29uZmlnIE9wdGlvbnMgKGFsbCBoYXZlIGRlZmF1bHRzKSAjIyMjCgojIFN0YXJ0IGEgdGVzdCBzZXR1cC4gSWYgeW91IGxlYXZlIHRoaXMgb2ZmLCBhbGwgb3B0aW9ucwojIHdpbGwgYmUgZGVmYXVsdCBhbmQgdGhlIHRlc3Qgd2lsbCBydW4gb25jZS4KIyBUaGlzIGlzIGEgbGFiZWwgYW5kIG5vdCByZWFsbHkgYW4gb3B0aW9uIChpdCB0YWtlcyBubyB2YWx1ZSkuCiMgWW91IGNhbiBhcHBlbmQgSVRFUkFURSBhbmQgYSBudW1iZXIgYWZ0ZXIgaXQgdG8gaXRlcmF0ZSB0aGUKIyB0ZXN0IGEgbnVtYmVyIG9mIHRpbWVzLCBvciBTS0lQIHRvIGlnbm9yZSB0aGlzIHRlc3QuCiMKI1RFU1RfU1RBUlQKI1RFU1RfU1RBUlQgSVRFUkFURSA1CiNURVNUX1NUQVJUIFNLSVAKCiMgSGF2ZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXMgZGVmYXVsdCBhZ2Fpbi4gVXNlZCBhZnRlciB0ZXN0cwojIGhhdmUgYWxyZWFkeSBiZWVuIGRlZmluZWQgYnkgVEVTVF9TVEFSVC4gT3B0aW9uYWxseSwgeW91IGNhbgojIGp1c3QgZGVmaW5lIGFsbCBkZWZhdWx0IG9wdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCBURVNUX1NUQVJUCiMgYW5kIHlvdSBkbyBub3QgbmVlZCB0aGlzIG9wdGlvbi4KIwojIFRoaXMgaXMgYSBsYWJlbCBhbmQgbm90IHJlYWxseSBhbiBvcHRpb24gKGl0IHRha2VzIG5vIHZhbHVlKS4KIyBZb3UgY2FuIGFwcGVuZCBTS0lQIHRvIHRoaXMgbGFiZWwgYW5kIHRoZSBvcHRpb25zIHdpdGhpbiB0aGlzCiMgc2VjdGlvbiB3aWxsIGJlIGlnbm9yZWQuCiMKIyBERUZBVUxUUwojIERFRkFVTFRTIFNLSVAKCiMgVGhlIGRlZmF1bHQgdGVzdCB0eXBlIChkZWZhdWx0IHRlc3QpCiMgVGhlIHRlc3QgdHlwZXMgbWF5IGJlOgojICAgYnVpbGQgLSBvbmx5IGJ1aWxkIHRoZSBrZXJuZWwsIGRvIG5vdGhpbmcgZWxzZQojICAgYm9vdCAtIGJ1aWxkIGFuZCBib290IHRoZSBrZXJuZWwKIyAgIHRlc3QgLSBidWlsZCwgYm9vdCBhbmQgaWYgVEVTVCBpcyBzZXQsIHJ1biB0aGUgdGVzdCBzY3JpcHQKIyAgICAgICAgICAoSWYgVEVTVCBpcyBub3Qgc2V0LCBpdCBkZWZhdWx0cyBiYWNrIHRvIGJvb3QpCiMgICBiaXNlY3QgLSBQZXJmb3JtIGEgYmlzZWN0IG9uIHRoZSBrZXJuZWwgKHNlZSBCSVNFQ1RfVFlQRSBiZWxvdykKIyAgIHBhdGNoY2hlY2sgLSBEbyBhIHRlc3Qgb24gYSBzZXJpZXMgb2YgY29tbWl0cyBpbiBnaXQgKHNlZSBQQVRDSENIRUNLIGJlbG93KQojVEVTVF9UWVBFID0gdGVzdAoKIyBUZXN0IHRvIHJ1biBpZiB0aGVyZSBpcyBhIHN1Y2Nlc3NmdWwgYm9vdCBhbmQgVEVTVF9UWVBFIGlzIHRlc3QuCiMgTXVzdCBleGl0IHdpdGggMCBvbiBzdWNjZXNzIGFuZCBub24gemVybyBvbiBlcnJvcgojIGRlZmF1bHQgKHVuZGVmaW5lZCkKI1RFU1QgPSBzc2ggdXNlckBtYWNoaW5lIC9yb290L3J1bl90ZXN0CgojIFRoZSBidWlsZCB0eXBlIGlzIGFueSBtYWtlIGNvbmZpZyB0eXBlIG9yIHNwZWNpYWwgY29tbWFuZAojICAoZGVmYXVsdCByYW5kY29uZmlnKQojICAgbm9idWlsZCAtIHNraXAgdGhlIGNsZWFuIGFuZCBidWlsZCBzdGVwCiMgICB1c2Vjb25maWc6L3BhdGgvdG8vY29uZmlnIC0gdXNlIHRoZSBnaXZlbiBjb25maWcgYW5kIHJ1bgojICAgICAgICAgICAgICBvbGRjb25maWcgb24gaXQuCiMgVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBURVNUX1RZUEUgaXMgcGF0Y2hjaGVjayBvciBiaXNlY3QKI0JVSUxEX1RZUEUgPSByYW5kY29uZmlnCgojIFRoZSBtYWtlIGNvbW1hbmQgKGRlZmF1bHQgbWFrZSkKIyBJZiB5b3UgYXJlIGJ1aWxkaW5nIGEgMzJiaXQgeDg2IG9uIGEgNjQgYml0IGhvc3QKI01BS0VfQ01EID0gQ0M9aTM4Ni1nY2MgQVM9aTM4Ni1hcyBtYWtlIEFSQ0g9aTM4NgoKIyBBbnkgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1ha2Ugb2YgdGhlIGtlcm5lbCAobm90IGZvciBvdGhlciBtYWtlcywgbGlrZSBjb25maWdzKQojIChkZWZhdWx0ICIiKQojQlVJTERfT1BUSU9OUyA9IC1qMjAKCiMgSWYgeW91IG5lZWQgYW4gaW5pdHJkLCB5b3UgY2FuIGFkZCBhIHNjcmlwdCBvciBjb2RlIGhlcmUgdG8gaW5zdGFsbAojIGl0LiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgS0VSTkVMX1ZFUlNJT04gd2lsbCBiZSBzZXQgdG8gdGhlCiMga2VybmVsIHZlcnNpb24gdGhhdCBpcyB1c2VkLiBSZW1lbWJlciB0byBhZGQgdGhlIGluaXRyZCBsaW5lCiMgdG8geW91ciBncnViIG1lbnUubHN0IGZpbGUuCiMKIyBIZXJlJ3MgYSBjb3VwbGUgb2YgZXhhbXBsZXMgdG8gdXNlOgojUE9TVF9JTlNUQUxMID0gc3NoIHVzZXJAdGFyZ2V0IC9zYmluL21raW5pdHJkIC0tYWxsb3ctbWlzc2luZyAtZiAvYm9vdC9pbml0cmFtZnMtdGVzdC5pbWcgJEtFUk5FTF9WRVJTSU9OCiMKIyBvciBvbiBzb21lIHN5c3RlbXM6CiNQT1NUX0lOU1RBTEwgPSBzc2ggdXNlckB0YXJnZXQgL3NiaW4vZHJhY3V0IC1mIC9ib290L2luaXRyYW1mcy10ZXN0LmltZyAkS0VSTkVMX1ZFUlNJT04KCiMgSWYgdGhlcmUgaXMgYSBzY3JpcHQgdGhhdCB5b3UgcmVxdWlyZSB0byBydW4gYmVmb3JlIHRoZSBidWlsZCBpcyBkb25lCiMgeW91IGNhbiBzcGVjaWZ5IGl0IHdpdGggUFJFX0JVSUxELgojCiMgT25lIGV4YW1wbGUgbWF5IGJlIGlmIHlvdSBtdXN0IGFkZCBhIHRlbXBvcmFyeSBwYXRjaCB0byB0aGUgYnVpbGQgdG8KIyBmaXggYSB1bnJlbGF0ZWQgYnVnIHRvIHBlcmZvcm0gYSBwYXRjaGNoZWNrIHRlc3QuIFRoaXMgd2lsbCBhcHBseSB0aGUKIyBwYXRjaCBiZWZvcmUgZWFjaCBidWlsZCB0aGF0IGlzIG1hZGUuIFVzZSB0aGUgUE9TVF9CVUlMRCB0byBkbyBhIGdpdCByZXNldCAtLWhhcmQKIyB0byByZW1vdmUgdGhlIHBhdGNoLgojCiMgKGRlZmF1bHQgdW5kZWYpCiNQUkVfQlVJTEQgPSBjZCAke0JVSUxEX0RJUn0gJiYgcGF0Y2ggLXAxIDwgL3RtcC90ZW1wLnBhdGNoCgojIFRvIHNwZWNpZnkgaWYgdGhlIHRlc3Qgc2hvdWxkIGZhaWwgaWYgdGhlIFBSRV9CVUlMRCBmYWlscywKIyBQUkVfQlVJTERfRElFIG5lZWRzIHRvIGJlIHNldCB0byAxLiBPdGhlcndpc2UgdGhlIFBSRV9CVUlMRAojIHJlc3VsdCBpcyBpZ25vcmVkLgojIChkZWZhdWx0IDApCiMgUFJFX0JVSUxEX0RJRSA9IDEKCiMgSWYgdGhlcmUgaXMgYSBzY3JpcHQgdGhhdCBzaG91bGQgcnVuIGFmdGVyIHRoZSBidWlsZCBpcyBkb25lCiMgeW91IGNhbiBzcGVjaWZ5IGl0IHdpdGggUE9TVF9CVUlMRC4KIwojIEFzIHRoZSBleGFtcGxlIGluIFBSRV9CVUlMRCwgUE9TVF9CVUlMRCBjYW4gYmUgdXNlZCB0byByZXNldCBtb2RpZmljYXRpb25zCiMgbWFkZSBieSB0aGUgUFJFX0JVSUxELgojCiMgKGRlZmF1bHQgdW5kZWYpCiNQT1NUX0JVSUxEID0gY2QgJHtCVUlMRF9ESVJ9ICYmIGdpdCByZXNldCAtLWhhcmQKCiMgVG8gc3BlY2lmeSBpZiB0aGUgdGVzdCBzaG91bGQgZmFpbCBpZiB0aGUgUE9TVF9CVUlMRCBmYWlscywKIyBQT1NUX0JVSUxEX0RJRSBuZWVkcyB0byBiZSBzZXQgdG8gMS4gT3RoZXJ3aXNlIHRoZSBQT1NUX0JVSUxECiMgcmVzdWx0IGlzIGlnbm9yZWQuCiMgKGRlZmF1bHQgMCkKI1BPU1RfQlVJTERfRElFID0gMQoKIyBXYXkgdG8gcmVib290IHRoZSBib3ggdG8gdGhlIHRlc3Qga2VybmVsLgojIE9ubHkgdmFsaWQgb3B0aW9ucyBzbyBmYXIgYXJlICJncnViIiBhbmQgInNjcmlwdCIKIyAoZGVmYXVsdCBncnViKQojIElmIHlvdSBzcGVjaWZ5IGdydWIsIGl0IHdpbGwgYXNzdW1lIGdydWIgdmVyc2lvbiAxCiMgYW5kIHdpbGwgc2VhcmNoIGluIC9ib290L2dydWIvbWVudS5sc3QgZm9yIHRoZSB0aXRsZSAkR1JVQl9NRU5VCiMgYW5kIHNlbGVjdCB0aGF0IHRhcmdldCB0byByZWJvb3QgdG8gdGhlIGtlcm5lbC4gSWYgdGhpcyBpcyBub3QKIyB5b3VyIHNldHVwLCB0aGVuIHNwZWNpZnkgInNjcmlwdCIgYW5kIGhhdmUgYSBjb21tYW5kIG9yIHNjcmlwdAojIHNwZWNpZmllZCBpbiBSRUJPT1RfU0NSSVBUIHRvIGJvb3QgdG8gdGhlIHRhcmdldC4KIwojIFRoZSBlbnRyeSBpbiAvYm9vdC9ncnViL21lbnUubHN0IG11c3QgYmUgZW50ZXJlZCBpbiBtYW51YWxseS4KIyBUaGUgdGVzdCB3aWxsIG5vdCBtb2RpZnkgdGhhdCBmaWxlLgojUkVCT09UX1RZUEUgPSBncnViCgojIFRoZSBtaW4gY29uZmlnIHRoYXQgaXMgbmVlZGVkIHRvIGJ1aWxkIGZvciB0aGUgbWFjaGluZQojIEEgbmljZSB3YXkgdG8gY3JlYXRlIHRoaXMgaXMgd2l0aCB0aGUgZm9sbG93aW5nOgojCiMgICAkIHNzaCB0YXJnZXQKIyAgICQgbHNtb2QgPiBteW1vZHMKIyAgICQgc2NwIG15bW9kcyBob3N0Oi90bXAKIyAgICQgZXhpdAojICAgJCBjZCBsaW51eC5naXQKIyAgICQgcm0gLmNvbmZpZwojICAgJCBtYWtlIExTTU9EPW15bW9kcyBsb2NhbHllc2NvbmZpZwojICAgJCBncmVwICdeQ09ORklHJyAuY29uZmlnID4gL2hvbWUvdGVzdC9jb25maWctbWluCiMKIyBJZiB5b3Ugd2FudCBldmVuIGxlc3MgY29uZmlnczoKIwojICAgbG9nIGluIGRpcmVjdGx5IHRvIHRhcmdldCAoZG8gbm90IHNzaCkKIwojICAgJCBzdQojICAgIyBsc21vZCB8IGN1dCAtZCcgJyAtZjEgfCB4YXJncyBybW1vZAojCiMgICByZXBlYXQgdGhlIGFib3ZlIHNldmVyYWwgdGltZXMKIwojICAgIyBsc21vZCA+IG15bW9kcwojICAgIyByZWJvb3QKIwojIE1heSBuZWVkIHRvIHJlYm9vdCB0byBnZXQgeW91ciBuZXR3b3JrIGJhY2sgdG8gY29weSB0aGUgbXltb2RzCiMgdG8gdGhlIGhvc3QsIGFuZCB0aGVuIHJlbW92ZSB0aGUgcHJldmlvdXMgLmNvbmZpZyBhbmQgcnVuIHRoZQojIGxvY2FseWVzY29uZmlnIGFnYWluLiBUaGUgQ09ORklHX01JTiBnZW5lcmF0ZWQgbGlrZSB0aGlzIHdpbGwKIyBub3QgZ3VhcmFudGVlIG5ldHdvcmsgYWN0aXZpdHkgdG8gdGhlIGJveCBzbyB0aGUgVEVTVF9UWVBFIG9mCiMgdGVzdCBtYXkgZmFpbC4KIwojIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gc2V0OgojICAgQ09ORklHX0NNRExJTkU9Ijx5b3VyIG9wdGlvbnMgaGVyZT4iCiMgIHJhbmRjb25maWcgbWF5IHNldCB0aGUgYWJvdmUgYW5kIG92ZXJyaWRlIHlvdXIgcmVhbCBjb21tYW5kCiMgIGxpbmUgb3B0aW9ucy4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctbWluCgojIFNvbWV0aW1lcyB0aGVyZSdzIG9wdGlvbnMgdGhhdCBqdXN0IGJyZWFrIHRoZSBib290IGFuZAojIHlvdSBkbyBub3QgY2FyZSBhYm91dC4gSGVyZSBhcmUgYSBmZXc6CiMgICAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIyAgU3RhZ2luZyBkcml2ZXJzIGFyZSBob3JyaWJsZSwgYW5kIGNhbiBicmVhayB0aGUgYnVpbGQuCiMgICAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIyAgU0NTSV9ERUJVRyBtYXkgY2hhbmdlIHlvdXIgcm9vdCBwYXJ0aXRpb24KIyAgICMgQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAojICBLR0RCIG1heSBjYXVzZSBvb3BzIHdhaXRpbmcgZm9yIGEgY29ubmVjdGlvbiB0aGF0J3Mgbm90IHRoZXJlLgojIFRoaXMgb3B0aW9uIHBvaW50cyB0byB0aGUgZmlsZSBjb250YWluaW5nIGNvbmZpZyBvcHRpb25zIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQKIyB0byB0aGUgTUlOX0NPTkZJRyAob3IgYmUgdGhlIE1JTl9DT05GSUcgaWYgaXQgaXMgbm90IHNldCkKIwojIE5vdGUsIGNvbmZpZyBvcHRpb25zIGluIE1JTl9DT05GSUcgd2lsbCBvdmVycmlkZSB0aGVzZSBvcHRpb25zLgojCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojQUREX0NPTkZJRyA9IC9ob21lL3Rlc3QvY29uZmlnLWJyb2tlbgoKIyBUaGUgbG9jYXRpb24gb24gdGhlIGhvc3Qgd2hlcmUgdG8gd3JpdGUgdGVtcCBmaWxlcwojIChkZWZhdWx0IC90bXAva3Rlc3QvJHtNQUNISU5FfSkKI1RNUF9ESVIgPSAvdG1wL2t0ZXN0LyR7TUFDSElORX0KCiMgT3B0aW9uYWwgbG9nIGZpbGUgdG8gd3JpdGUgdGhlIHN0YXR1cyAocmVjb21tZW5kZWQpCiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgdW5kZWZpbmVkKQojTE9HX0ZJTEUgPSAvaG9tZS90ZXN0L2xvZ2ZpbGVzL3RhcmdldC5sb2cKCiMgUmVtb3ZlIG9sZCBsb2dmaWxlIGlmIGl0IGV4aXN0cyBiZWZvcmUgc3RhcnRpbmcgYWxsIHRlc3RzLgojICBOb3RlLCB0aGlzIGlzIGEgREVGQVVMVCBzZWN0aW9uIG9ubHkgb3B0aW9uLgojIChkZWZhdWx0IDApCiNDTEVBUl9MT0cgPSAwCgojIExpbmUgdG8gZGVmaW5lIGEgc3VjY2Vzc2Z1bCBib290IHVwIGluIGNvbnNvbGUgb3V0cHV0LgojIFRoaXMgaXMgd2hhdCB0aGUgbGluZSBjb250YWlucywgbm90IHRoZSBlbnRpcmUgbGluZS4gSWYgeW91IG5lZWQKIyB0aGUgZW50aXJlIGxpbmUgdG8gbWF0Y2gsIHRoZW4gdXNlIHJlZ3VyYWwgZXhwcmVzc2lvbiBzeW50YXggbGlrZToKIyAgKGRvIG5vdCBhZGQgYW55IHF1b3RlcyBhcm91bmQgaXQpCiMKIyAgU1VDQ0VTU19MSU5FID0gXk15Qm94IExvZ2luOiQKIwojIChkZWZhdWx0ICJsb2dpbjoiKQojU1VDQ0VTU19MSU5FID0gbG9naW46CgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgc3VjY2VzcyBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCAxMCkKI1NUT1BfQUZURVJfU1VDQ0VTUyA9IDEwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgYWZ0ZXIgZmFpbHVyZSBpcyByZWNvbW1lbmRlZC4KIyAoaW4gc2Vjb25kcykKIyAoZGVmYXVsdCA2MCkKI1NUT1BfQUZURVJfRkFJTFVSRSA9IDYwCgojIEluIGNhc2UgdGhlIGNvbnNvbGUgY29uc3RhbnRseSBmaWxscyB0aGUgc2NyZWVuLCBoYXZpbmcKIyBhIHNwZWNpZmllZCB0aW1lIHRvIHN0b3AgdGhlIHRlc3QgaWYgaXQgbmV2ZXIgc3VjY2VlZHMgbm9yIGZhaWxzCiMgaXMgcmVjb21tZW5kZWQuCiMgTm90ZTogdGhpcyBpcyBpZ25vcmVkIGlmIGEgc3VjY2VzcyBvciBmYWlsdXJlIGlzIGRldGVjdGVkLgojIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwMCwgLTEgaXMgdG8gbmV2ZXIgc3RvcCkKI1NUT1BfVEVTVF9BRlRFUiA9IDYwMAoKIyBTdG9wIHRlc3RpbmcgaWYgYSBidWlsZCBmYWlscy4gSWYgc2V0LCB0aGUgc2NyaXB0IHdpbGwgZW5kIGlmCiMgYSBmYWlsdXJlIGlzIGRldGVjdGVkLCBvdGhlcndpc2UgaXQgd2lsbCBzYXZlIG9mZiB0aGUgLmNvbmZpZywKIyBkbWVzZyBhbmQgYm9vdGxvZyBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKIyBNQUNISU5FLVRFU1RfVFlQRV9CVUlMRF9UWVBFLWZhaWwteXl5eW1tZGRoaG1tc3MKIyBpZiB0aGUgU1RPUkVfRkFJTFVSRVMgZGlyZWN0b3J5IGlzIHNldC4KIyAoZGVmYXVsdCAxKQojIE5vdGUsIGV2ZW4gaWYgdGhpcyBpcyBzZXQgdG8gemVybywgdGhlcmUgYXJlIHNvbWUgZXJyb3JzIHRoYXQgc3RpbGwKIyBzdG9wIHRoZSB0ZXN0cy4KI0RJRV9PTl9GQUlMVVJFID0gMQoKIyBEaXJlY3RvcnkgdG8gc3RvcmUgZmFpbHVyZSBkaXJlY3RvcmllcyBvbiBmYWlsdXJlLiBJZiB0aGlzIGlzIG5vdAojIHNldCwgRElFX09OX0ZBSUxVUkU9MCB3aWxsIG5vdCBzYXZlIG9mZiB0aGUgLmNvbmZpZywgZG1lc2cgYW5kCiMgYm9vdGxvZy4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBESUVfT05fRkFJTFVSRSBpcyBub3Qgc2V0LgojIChkZWZhdWx0IHVuZGVmaW5lZCkKI1NUT1JFX0ZBSUxVUkVTID0gL2hvbWUvdGVzdC9mYWlsdXJlcwoKIyBCdWlsZCB3aXRob3V0IGRvaW5nIGEgbWFrZSBtcnByb3Blciwgb3IgcmVtb3ZpbmcgLmNvbmZpZwojIChkZWZhdWx0IDApCiNCVUlMRF9OT0NMRUFOID0gMAoKIyBBcyB0aGUgdGVzdCByZWFkcyB0aGUgY29uc29sZSwgYWZ0ZXIgaXQgaGl0cyB0aGUgU1VDQ0VTU19MSU5FCiMgdGhlIHRpbWUgaXQgd2FpdHMgZm9yIHRoZSBtb25pdG9yIHRvIHNldHRsZSBkb3duIGJldHdlZW4gcmVhZHMKIyBjYW4gdXN1YWxseSBiZSBsb3dlcmVkLgojIChpbiBzZWNvbmRzKSAoZGVmYXVsdCAxKQojQk9PVEVEX1RJTUVPVVQgPSAxCgojIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgd2hlbiB3ZSBjb25zaWRlciB0aGUgYm94IGh1bmcgYWZ0ZXIKIyB0aGUgY29uc29sZSBzdG9wIHByb2R1Y2luZyBvdXRwdXQuIEJlIHN1cmUgdG8gbGVhdmUgZW5vdWdoCiMgdGltZSBoZXJlIHRvIGdldCBwYXNzIGEgcmVib290LiBTb21lIG1hY2hpbmVzIG1heSBub3QgcHJvZHVjZQojIGFueSBjb25zb2xlIG91dHB1dCBmb3IgYSBsb25nIHRpbWUgZHVyaW5nIGEgcmVib290LiBZb3UgZG8KIyBub3Qgd2FudCB0aGUgdGVzdCB0byBmYWlsIGp1c3QgYmVjYXVzZSB0aGUgc3lzdGVtIHdhcyBpbgojIHRoZSBwcm9jZXNzIG9mIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuCiMgKGRlZmF1bHQgMTIwKQojVElNRU9VVCA9IDEyMAoKIyBJbiBiZXR3ZWVuIHRlc3RzLCBhIHJlYm9vdCBvZiB0aGUgYm94IG1heSBvY2N1ciwgYW5kIHRoaXMKIyBpcyB0aGUgdGltZSB0byB3YWl0IGZvciB0aGUgY29uc29sZSBhZnRlciBpdCBzdG9wcyBwcm9kdWNpbmcKIyBvdXRwdXQuIFNvbWUgbWFjaGluZXMgbWF5IG5vdCBwcm9kdWNlIGEgbGFyZ2UgbGFnIG9uIHJlYm9vdAojIHNvIHRoaXMgc2hvdWxkIGFjY29tbW9kYXRlIGl0LgojIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgVElNRU9VVCwgaXMgdGhhdCBUSU1FT1VUIGhhcHBlbnMKIyB3aGVuIHJlYm9vdGluZyB0byB0aGUgdGVzdCBrZXJuZWwuIFRoaXMgc2xlZXAgdGltZSBoYXBwZW5zCiMgYWZ0ZXIgYSB0ZXN0IGhhcyBjb21wbGV0ZWQgYW5kIHdlIGFyZSBhYm91dCB0byBzdGFydCBydW5uaW5nCiMgYW5vdGhlciB0ZXN0LiBJZiBhIHJlYm9vdCB0byB0aGUgcmVsaWFibGUga2VybmVsIGhhcHBlbnMsCiMgd2Ugd2FpdCBTTEVFUF9USU1FIGZvciB0aGUgY29uc29sZSB0byBzdG9wIHByb2R1Y2luZyBvdXRwdXQKIyBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgdGVzdC4KIyAoZGVmYXVsdCA2MCkKI1NMRUVQX1RJTUUgPSA2MAoKIyBUaGUgdGltZSBpbiBiZXR3ZWVuIGJpc2VjdHMgdG8gc2xlZXAgKGluIHNlY29uZHMpCiMgKGRlZmF1bHQgNjApCiNCSVNFQ1RfU0xFRVBfVElNRSA9IDYwCgojIFRoZSB0aW1lIGluIGJldHdlZW4gcGF0Y2ggY2hlY2tzIHRvIHNsZWVwIChpbiBzZWNvbmRzKQojIChkZWZhdWx0IDYwKQojUEFUQ0hDSEVDS19TTEVFUF9USU1FID0gNjAKCiMgUmVib290IHRoZSB0YXJnZXQgYm94IG9uIGVycm9yIChkZWZhdWx0IDApCiNSRUJPT1RfT05fRVJST1IgPSAwCgojIFBvd2VyIG9mZiB0aGUgdGFyZ2V0IG9uIGVycm9yIChpZ25vcmVkIGlmIFJFQk9PVF9PTl9FUlJPUiBpcyBzZXQpCiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgMCkKI1BPV0VST0ZGX09OX0VSUk9SID0gMAoKIyBQb3dlciBvZmYgdGhlIHRhcmdldCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CiMgIE5vdGUsIHRoaXMgaXMgYSBERUZBVUxUIHNlY3Rpb24gb25seSBvcHRpb24uCiMgKGRlZmF1bHQgMCkKI1BPV0VST0ZGX09OX1NVQ0NFU1MgPSAwCgojIFJlYm9vdCB0aGUgdGFyZ2V0IGFmdGVyIGFsbCB0ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKGRlZmF1bHQgMSkKIyAoaWdub3JlZCBpZiBQT1dFUk9GRl9PTl9TVUNDRVNTIGlzIHNldCkKI1JFQk9PVF9PTl9TVUNDRVNTID0gMQoKIyBJbiBjYXNlIHRoZXJlIGFyZSBpc3NlcyB3aXRoIHJlYm9vdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKIyB0byBhbHdheXMgcG93ZXJjeWNsZSBhZnRlciB0aGlzIGFtb3VudCBvZiB0aW1lIGFmdGVyIGNhbGxpbmcKIyByZWJvb3QuCiMgTm90ZSwgUE9XRVJDWUNMRV9BRlRFUl9SRUJPT1QgPSAwIGRvZXMgTk9UIGRpc2FibGUgaXQuIEl0IGp1c3QKIyBtYWtlcyBpdCBwb3dlcmN5Y2xlIGltbWVkaWF0ZWx5IGFmdGVyIHJlYm9vdGluZy4gRG8gbm90IGRlZmluZQojIGl0IGlmIHlvdSBkbyBub3Qgd2FudCBpdC4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNQT1dFUkNZQ0xFX0FGVEVSX1JFQk9PVCA9IDUKCiMgSW4gY2FzZSB0aGVyZSdzIGlzc2VzIHdpdGggaGFsdGluZywgeW91IGNhbiBzcGVjaWZ5IHRoaXMKIyB0byBhbHdheXMgcG93ZXJvZmYgYWZ0ZXIgdGhpcyBhbW91bnQgb2YgdGltZSBhZnRlciBjYWxsaW5nCiMgaGFsdC4KIyBOb3RlLCBQT1dFUk9GRl9BRlRFUl9IQUxUID0gMCBkb2VzIE5PVCBkaXNhYmxlIGl0LiBJdCBqdXN0CiMgbWFrZXMgaXQgcG93ZXJvZmYgaW1tZWRpYXRlbHkgYWZ0ZXIgaGFsdGluZy4gRG8gbm90IGRlZmluZQojIGl0IGlmIHlvdSBkbyBub3Qgd2FudCBpdC4KIyAoZGVmYXVsdCB1bmRlZmluZWQpCiNQT1dFUk9GRl9BRlRFUl9IQUxUID0gMjAKCiMgQSBzY3JpcHQgb3IgY29tbWFuZCB0byBwb3dlciBvZmYgdGhlIGJveCAoZGVmYXVsdCB1bmRlZmluZWQpCiMgTmVlZGVkIGZvciBQT1dFUk9GRl9PTl9FUlJPUiBhbmQgU1VDQ0VTUwojCiMgRXhhbXBsZSBmb3IgZGlnaXRhbCBsb2dnZXJzIHBvd2VyIHN3aXRjaDoKI1BPV0VSX09GRiA9IHdnZXQgLS1uby1wcm94eSAtTyAvZGV2L251bGwgLXEgIC0tYXV0aC1uby1jaGFsbGVuZ2UgJ2h0dHA6Ly9hZG1pbjphZG1pbkBwb3dlci9vdXRsZXQ/NT1PRkYnCiMKIyBFeGFtcGxlIGZvciBhIHZpcnR1YWwgZ3Vlc3QgY2FsbCAiR3Vlc3QiLgojUE9XRVJfT0ZGID0gdmlyc2ggZGVzdHJveSBHdWVzdAoKIyBUaGUgd2F5IHRvIGV4ZWN1dGUgYSBjb21tYW5kIG9uIHRoZSB0YXJnZXQKIyAoZGVmYXVsdCBzc2ggJFNTSF9VU0VSQCRNQUNISU5FICRTU0hfQ09NTUFORCI7KQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIsIE1BQ0hJTkUgYW5kIFNTSF9DT01NQU5EIGFyZSBkZWZpbmVkCiNTU0hfRVhFQyA9IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgJFNTSF9DT01NQU5EIjsKCiMgVGhlIHdheSB0byBjb3B5IGEgZmlsZSB0byB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc2NwICRTUkNfRklMRSAkU1NIX1VTRVJAJE1BQ0hJTkU6JERTVF9GSUxFKQojIFRoZSB2YXJpYWJsZXMgU1NIX1VTRVIsIE1BQ0hJTkUsIFNSQ19GSUxFIGFuZCBEU1RfRklMRSBhcmUgZGVmaW5lZC4KI1NDUF9UT19UQVJHRVQgPSBzY3AgJFNSQ19GSUxFICRTU0hfVVNFUkAkTUFDSElORTokRFNUX0ZJTEUKCiMgVGhlIG5pY2Ugd2F5IHRvIHJlYm9vdCB0aGUgdGFyZ2V0CiMgKGRlZmF1bHQgc3NoICRTU0hfVVNFUkAkTUFDSElORSByZWJvb3QpCiMgVGhlIHZhcmlhYmxlcyBTU0hfVVNFUiBhbmQgTUFDSElORSBhcmUgZGVmaW5lZC4KI1JFQk9PVCA9IHNzaCAkU1NIX1VTRVJAJE1BQ0hJTkUgcmVib290CgojIFRoZSB3YXkgdHJpcGxlIGZhdWx0cyBhcmUgZGV0ZWN0ZWQgaXMgYnkgdGVzdGluZyB0aGUga2VybmVsCiMgYmFubmVyLiBJZiB0aGUga2VybmVsIGJhbm5lciBmb3IgdGhlIGtlcm5lbCB3ZSBhcmUgdGVzdGluZyBpcwojIGZvdW5kLCBhbmQgdGhlbiBsYXRlciBhIGtlcm5lbCBiYW5uZXIgZm9yIGFub3RoZXIga2VybmVsIHZlcnNpb24KIyBpcyBmb3VuZCwgaXQgaXMgY29uc2lkZXJlZCB0aGF0IHdlIGVuY291bnRlcmVkIGEgdHJpcGxlIGZhdWx0LAojIGFuZCB0aGVyZSBpcyBubyBwYW5pYyBvciBjYWxsYmFjaywgYnV0IHNpbXBseSBhIHJlYm9vdC4KIyBUbyBkaXNhYmxlIHRoaXMgKGJlY2F1c2UgaXQgZGlkIGEgZmFsc2UgcG9zaXRpdmUpIHNldCB0aGUgZm9sbG93aW5nCiMgdG8gMC4KIyAoZGVmYXVsdCAxKQojREVURUNUX1RSSVBMRV9GQVVMVCA9IDAKCiMjIyMgUGVyIHRlc3QgcnVuIG9wdGlvbnMgIyMjIwojIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgb25seSBhbGxvd2VkIGluIFRFU1RfU1RBUlQgc2VjdGlvbnMuCiMgVGhleSBhcmUgaWdub3JlZCBpbiB0aGUgREVGQVVMVFMgc2VjdGlvbnMuCiMKIyBBbGwgb2YgdGhlc2UgYXJlIG9wdGlvbmFsIGFuZCB1bmRlZmluZWQgYnkgZGVmYXVsdCwgYWx0aG91Z2gKIyAgc29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgVEVTVF9UWVBFIG9mIHBhdGNoY2hlY2sKIyAgYW5kIGJpc2VjdC4KIwojCiMgQ0hFQ0tPVVQgPSBicmFuY2gKIwojICBJZiB0aGUgQlVJTERfRElSIGlzIGEgZ2l0IHJlcG9zaXRvcnksIHRoZW4geW91IGNhbiBzZXQgdGhpcyBvcHRpb24KIyAgdG8gY2hlY2tvdXQgdGhlIGdpdmVuIGJyYW5jaCBiZWZvcmUgcnVubmluZyB0aGUgVEVTVC4gSWYgeW91CiMgIHNwZWNpZnkgdGhpcyBmb3IgdGhlIGZpcnN0IHJ1biwgdGhhdCBicmFuY2ggd2lsbCBiZSB1c2VkIGZvcgojICBhbGwgcHJlY2VkaW5nIHRlc3RzIHVudGlsIGEgbmV3IENIRUNLT1VUIGlzIHNldC4KIwojCiMgVEVTVF9OQU1FID0gbmFtZQojCiMgIElmIHlvdSB3YW50IHRoZSB0ZXN0IHRvIGhhdmUgYSBuYW1lIHRoYXQgaXMgZGlzcGxheWVkIGluCiMgIHRoZSB0ZXN0IHJlc3VsdCBiYW5uZXIgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCwgdGhlbiB1c2UgdGhpcwojICBvcHRpb24uIFRoaXMgaXMgdXNlZnVsIHRvIHNlYXJjaCBmb3IgdGhlIFJFU1VMVCBrZXl3b3JkIGFuZAojICBub3QgaGF2ZSB0byB0cmFuc2xhdGUgYSB0ZXN0IG51bWJlciB0byBhIHRlc3QgaW4gdGhlIGNvbmZpZy4KIwojIEZvciBURVNUX1RZUEUgPSBwYXRjaGNoZWNrCiMKIyAgVGhpcyBleHBlY3RzIHRoZSBCVUlMRF9ESVIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSwgYW5kCiMgIHdpbGwgY2hlY2tvdXQgdGhlIFBBVENIQ0hFQ0tfU1RBUlQgY29tbWl0LgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgVGhlIE1JTl9DT05GSUcgd2lsbCBiZSB1c2VkIGZvciBhbGwgYnVpbGRzIG9mIHRoZSBwYXRjaGNoZWNrLiBUaGUgYnVpbGQgdHlwZQojICB1c2VkIGZvciBwYXRjaGNoZWNrIGlzIG9sZGNvbmZpZy4KIwojICBQQVRDSENIRUNLX1NUQVJUIGlzIHJlcXVpcmVkIGFuZCBpcyB0aGUgZmlyc3QgcGF0Y2ggdG8KIyAgIHRlc3QgKHRoZSBTSEExIG9mIHRoZSBjb21taXQpLiBZb3UgbWF5IGFsc28gc3BlY2lmeSBhbnl0aGluZwojICAgdGhhdCBnaXQgY2hlY2tvdXQgYWxsb3dzIChicmFuY2ggbmFtZSwgdGFnZSwgSEVBRH4zKS4KIwojICBQQVRDSENIRUNLX0VORCBpcyB0aGUgbGFzdCBwYXRjaCB0byBjaGVjayAoZGVmYXVsdCBIRUFEKQojCiMgIFBBVENIQ0hFQ0tfVFlQRSBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBydW46CiMgICAgICBidWlsZCwgYm9vdCwgdGVzdC4KIwojICAgTm90ZSwgdGhlIGJ1aWxkIHRlc3Qgd2lsbCBsb29rIGZvciB3YXJuaW5ncywgaWYgYSB3YXJuaW5nIG9jY3VycmVkCiMgICAgIGluIGEgZmlsZSB0aGF0IGEgY29tbWl0IHRvdWNoZXMsIHRoZSBidWlsZCB3aWxsIGZhaWwsIHVubGVzcwojICAgICBJR05PUkVfV0FSTklOR1MgaXMgc2V0IGZvciB0aGUgZ2l2ZW4gY29tbWl0J3Mgc2hhMQojCiMgICBJR05PUkVfV0FSTklOR1MgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgZmFpbHVyZSBvZiBwYXRjaGNoZWNrCiMgICAgIG9uIGEgcGFydGljdWxlciBjb21taXQgKFNIQTEpLiBZb3UgY2FuIGFkZCBtb3JlIHRoYW4gb25lIGNvbW1pdAojICAgICBieSBhZGRpbmcgYSBsaXN0IG9mIFNIQTFzIHRoYXQgYXJlIHNwYWNlIGRlbGltaXRlZC4KIwojICAgSWYgQlVJTERfTk9DTEVBTiBpcyBzZXQsIHRoZW4gbWFrZSBtcnByb3BlciB3aWxsIG5vdCBiZSBydW4gb24KIyAgIGFueSBvZiB0aGUgYnVpbGRzLCBqdXN0IGxpa2UgYWxsIG90aGVyIFRFU1RfVFlQRSB0ZXN0cy4gQnV0CiMgICB3aGF0IG1ha2VzIHBhdGNoY2hlY2sgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyIHRlc3RzLCBpcyBpZgojICAgQlVJTERfTk9DTEVBTiBpcyBub3Qgc2V0LCBvbmx5IHRoZSBmaXJzdCBhbmQgbGFzdCBwYXRjaCBydW4KIyAgIG1ha2UgbXJwcm9wZXIuIFRoaXMgaGVscHMgc3BlZWQgdXAgdGhlIHRlc3QuCiMKIyBFeGFtcGxlOgojICAgVEVTVF9TVEFSVAojICAgVEVTVF9UWVBFID0gcGF0Y2hjaGVjawojICAgQ0hFQ0tPVVQgPSBteWJyYW5jaAojICAgUEFUQ0hDSEVDS19UWVBFID0gYm9vdAojICAgUEFUQ0hDSEVDS19TVEFSVCA9IDc0N2U5NGFlM2QxYjRjOWJmNTM4MGU1NjlmNjE0ZWI5MDQwYjc5ZTcKIyAgIFBBVENIQ0hFQ0tfRU5EID0gSEVBRH4yCiMgICBJR05PUkVfV0FSTklOR1MgPSA0MmY5YzZiNjliNTQ5NDZmZmMwNTE1ZjU3ZDAxZGM3ZjVjMGU0NzEyIDBjMTdjYTJjNzE4N2Y0MzFkOGZmYzc5ZTgxYWRkYzczMGYzM2QxMjgKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gYmlzZWN0CiMKIyAgWW91IGNhbiBzcGVjaWZ5IGEgZ2l0IGJpc2VjdCBpZiB0aGUgQlVJTERfRElSIGlzIGEgZ2l0IHJlcG9zaXRvcnkuCiMgIFRoZSBNSU5fQ09ORklHIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGJ1aWxkcyBvZiB0aGUgYmlzZWN0LiBUaGUgYnVpbGQgdHlwZQojICB1c2VkIGZvciBiaXNlY3RpbmcgaXMgb2xkY29uZmlnLgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgQklTRUNUX1RZUEUgaXMgdGhlIHR5cGUgb2YgdGVzdCB0byBwZXJmb3JtOgojCWJ1aWxkCS0gYmFkIGZhaWxzIHRvIGJ1aWxkCiMJYm9vdAktIGJhZCBidWlsZHMgYnV0IGZhaWxzIHRvIGJvb3QKIwl0ZXN0CS0gYmFkIGJvb3RzIGJ1dCBmYWlscyBhIHRlc3QKIwojIEJJU0VDVF9HT09EIGlzIHRoZSBjb21taXQgKFNIQTEpIHRvIGxhYmVsIGFzIGdvb2QgKGFjY2VwdHMgYWxsIGdpdCBnb29kIGNvbW1pdCB0eXBlcykKIyBCSVNFQ1RfQkFEIGlzIHRoZSBjb21taXQgdG8gbGFiZWwgYXMgYmFkIChhY2NlcHRzIGFsbCBnaXQgYmFkIGNvbW1pdCB0eXBlcykKIwojIFRoZSBhYm92ZSB0aHJlZSBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgYSBiaXNlY3Qgb3BlcmF0aW9uLgojCiMgQklTRUNUX1JFUExBWSA9IC9wYXRoL3RvL3JlcGxheS9maWxlIChvcHRpb25hbCwgZGVmYXVsdCB1bmRlZmluZWQpCiMKIyAgIElmIGFuIG9wZXJhdGlvbiBmYWlsZWQgaW4gdGhlIGJpc2VjdCB0aGF0IHdhcyBub3QgZXhwZWN0ZWQgdG8KIyAgIGZhaWwuIFRoZW4gdGhlIHRlc3QgZW5kcy4gVGhlIHN0YXRlIG9mIHRoZSBCVUlMRF9ESVIgd2lsbCBiZQojICAgbGVmdCBvZmYgYXQgd2hlcmUgdGhlIGZhaWx1cmUgb2NjdXJyZWQuIFlvdSBjYW4gZXhhbWluZSB0aGUKIyAgIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUsIGFuZCBwZXJoYXBzIGV2ZW4gZmluZCBhIGdpdCBjb21taXQKIyAgIHRoYXQgd291bGQgd29yayB0byBjb250aW51ZSB3aXRoLiBZb3UgY2FuIHJ1bjoKIwojICAgZ2l0IGJpc2VjdCBsb2cgPiAvcGF0aC90by9yZXBsYXkvZmlsZQojCiMgICBUaGUgYWRkaW5nOgojCiMgICAgQklTRUNUX1JFUExBWT0gL3BhdGgvdG8vcmVwbGF5L2ZpbGUKIwojICAgQW5kIHJ1bm5pbmcgdGhlIHRlc3QgYWdhaW4uIFRoZSB0ZXN0IHdpbGwgcGVyZm9ybSB0aGUgaW5pdGlhbAojICAgIGdpdCBiaXNlY3Qgc3RhcnQsIGdpdCBiaXNlY3QgZ29vZCwgYW5kIGdpdCBiaXNlY3QgYmFkLCBhbmQKIyAgICB0aGVuIGl0IHdpbGwgcnVuIGdpdCBiaXNlY3QgcmVwbGF5IG9uIHRoaXMgZmlsZSwgYmVmb3JlCiMgICAgY29udGludWluZyB3aXRoIHRoZSBiaXNlY3QuCiMKIyBCSVNFQ1RfU1RBUlQgPSBjb21taXQgKG9wdGlvbmFsLCBkZWZhdWx0IHVuZGVmaW5lZCkKIwojICAgQXMgd2l0aCBCSVNFQ1RfUkVQTEFZLCBpZiB0aGUgdGVzdCBmYWlsZWQgb24gYSBjb21taXQgdGhhdAojICAganVzdCBoYXBwZW4gdG8gaGF2ZSBhIGJhZCBjb21taXQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmlzZWN0LAojICAgYW5kIHlvdSBuZWVkIHRvIHNraXAgaXQuIElmIEJJU0VDVF9TVEFSVCBpcyBkZWZpbmVkLCBpdAojICAgd2lsbCBjaGVja291dCB0aGF0IGNvbW1pdCBhZnRlciBkb2luZyB0aGUgaW5pdGlhbCBnaXQgYmlzZWN0IHN0YXJ0LAojICAgZ2l0IGJpc2VjdCBnb29kLCBnaXQgYmlzZWN0IGJhZCwgYW5kIHJ1bm5pbmcgdGhlIGdpdCBiaXNlY3QgcmVwbGF5CiMgICBpZiB0aGUgQklTRUNUX1JFUExBWSBpcyBzZXQuCiMKIyBCSVNFQ1RfU0tJUCA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIElmIEJJU0VDVF9UWVBFIGlzIHNldCB0byB0ZXN0IGJ1dCB0aGUgYnVpbGQgZmFpbHMsIGt0ZXN0IHdpbGwKIyAgIHNpbXBseSBmYWlsIHRoZSB0ZXN0IGFuZCBlbmQgdGhlaXIuIFlvdSBjb3VsZCB1c2UgQklTRUNUX1JFUExBWQojICAgYW5kIEJJU0VDVF9TVEFSVCB0byByZXN1bWUgYWZ0ZXIgeW91IGZvdW5kIGEgbmV3IHN0YXJ0aW5nIHBvaW50LAojICAgb3IgeW91IGNvdWxkIHNldCBCSVNFQ1RfU0tJUCB0byAxLiBJZiBCSVNFQ1RfU0tJUCBpcyBzZXQgdG8gMSwKIyAgIHdoZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIEJJU0VDVF9UWVBFIGZhaWxzLCBrdGVzdC5wbCB3aWxsCiMgICBydW4gImdpdCBiaXNlY3Qgc2tpcCIgYW5kIHRyeSBhZ2Fpbi4KIwojIEJJU0VDVF9GSUxFUyA9IDxwYXRoPiAob3B0aW9uYWwsIGRlZmF1bHQgdW5kZWZpbmVkKQojCiMgICBUbyBqdXN0IHJ1biB0aGUgZ2l0IGJpc2VjdCBvbiBhIHNwZWNpZmljIHBhdGgsIHNldCBCSVNFQ1RfRklMRVMuCiMgICBGb3IgZXhhbXBsZToKIwojICAgICBCSVNFQ1RfRklMRVMgPSBhcmNoL3g4NiBrZXJuZWwvdGltZQojCiMgICBXaWxsIHJ1biB0aGUgYmlzZWN0IHdpdGggImdpdCBiaXNlY3Qgc3RhcnQgLS0gYXJjaC94ODYga2VybmVsL3RpbWUiCiMKIyBCSVNFQ1RfUkVWRVJTRSA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEluIHRob3NlIHN0cmFuZ2UgaW5zdGFuY2VzIHdoZXJlIGl0IHdhcyBicm9rZW4gZm9yZXZlcgojICAgYW5kIHlvdSBhcmUgdHJ5aW5nIHRvIGZpbmQgd2hlcmUgaXQgc3RhcnRlZCB0byB3b3JrIQojICAgU2V0IEJJU0VDVF9HT09EIHRvIHRoZSBjb21taXQgdGhhdCB3YXMgbGFzdCBrbm93biB0byBmYWlsCiMgICBTZXQgQklTRUNUX0JBRCB0byB0aGUgY29tbWl0IHRoYXQgaXMga25vd24gdG8gc3RhcnQgd29ya2luZy4KIyAgIFdpdGggQklTRUNUX1JFVkVSU0UgPSAxLCBUaGUgdGVzdCB3aWxsIGNvbnNpZGVyIGZhaWx1cmVzIGFzCiMgICBnb29kLCBhbmQgc3VjY2VzcyBhcyBiYWQuCiMKIyBCSVNFQ1RfTUFOVUFMID0gMSAob3B0aW9uYWwsIGRlZmF1bHQgMCkKIwojICAgSW4gY2FzZSB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoIGF1dG9tYXRpbmcgdGhlIGJpc2VjdCBmb3IKIyAgIHdoYXRldmVyIHJlYXNvbi4gKENhbid0IHJlYm9vdCwgd2FudCB0byBpbnNwZWN0IGVhY2ggaXRlcmF0aW9uKQojICAgRG9pbmcgYSBCSVNFQ1RfTUFOVUFMIHdpbGwgaGF2ZSB0aGUgdGVzdCB3YWl0IGZvciB5b3UgdG8KIyAgIHRlbGwgaXQgaWYgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBhZnRlciBlYWNoIGl0ZXJhdGlvbi4KIyAgIFRoaXMgaXMgYmFzaWNhbGwgdGhlIHNhbWUgYXMgcnVubmluZyBnaXQgYmlzZWN0IHlvdXJzZWxmCiMgICBidXQga3Rlc3Qgd2lsbCByZWJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBrZXJuZWwgZm9yIHlvdS4KIwojIEJJU0VDVF9DSEVDSyA9IDEgKG9wdGlvbmFsLCBkZWZhdWx0IDApCiMKIyAgIEp1c3QgdG8gYmUgc3VyZSB0aGUgZ29vZCBpcyBnb29kIGFuZCBiYWQgaXMgYmFkLCBzZXR0aW5nCiMgICBCSVNFQ1RfQ0hFQ0sgdG8gMSB3aWxsIHN0YXJ0IHRoZSBiaXNlY3QgYnkgZmlyc3QgY2hlY2tpbmcKIyAgIG91dCBCSVNFQ1RfQkFEIGFuZCBtYWtlcyBzdXJlIGl0IGZhaWxzLCB0aGVuIGl0IHdpbGwgY2hlY2sKIyAgIG91dCBCSVNFQ1RfR09PRCBhbmQgbWFrZXMgc3VyZSBpdCBzdWNjZWVkcyBiZWZvcmUgc3RhcnRpbmcKIyAgIHRoZSBiaXNlY3QgKGl0IHdvcmtzIGZvciBCSVNFQ1RfUkVWRVJTRSB0b28pLgojCiMgICBZb3UgY2FuIGxpbWl0IHRoZSB0ZXN0IHRvIGp1c3QgY2hlY2sgQklTRUNUX0dPT0Qgb3IKIyAgIEJJU0VDVF9CQUQgd2l0aCBCSVNFQ1RfQ0hFQ0sgPSBnb29kIG9yCiMgICBCSVNFQ1RfQ0hFQ0sgPSBiYWQsIHJlc3BlY3RpdmVseS4KIwojIEV4YW1wbGU6CiMgICBURVNUX1NUQVJUCiMgICBURVNUX1RZUEUgPSBiaXNlY3QKIyAgIEJJU0VDVF9HT09EID0gdjIuNi4zNgojICAgQklTRUNUX0JBRCA9IGI1MTUzMTYzZWQ1ODBlMDBjNjdiZGZlY2IwMmIyZTM4NDM4MTdiM2UKIyAgIEJJU0VDVF9UWVBFID0gYnVpbGQKIyAgIE1JTl9DT05GSUcgPSAvaG9tZS90ZXN0L2NvbmZpZy1iaXNlY3QKIwojCiMKIyBGb3IgVEVTVF9UWVBFID0gY29uZmlnX2Jpc2VjdAojCiMgIEluIHRob3NlIGNhc2VzIHRoYXQgeW91IGhhdmUgdHdvIGRpZmZlcmVudCBjb25maWdzLiBPbmUgb2YgdGhlbQojICB3b3JrLCB0aGUgb3RoZXIgZG9lcyBub3QsIGFuZCB5b3UgZG8gbm90IGtub3cgd2hhdCBjb25maWcgY2F1c2VzCiMgIHRoZSBwcm9ibGVtLgojICBUaGUgVEVTVF9UWVBFIGNvbmZpZ19iaXNlY3Qgd2lsbCBiaXNlY3QgdGhlIGJhZCBjb25maWcgbG9va2luZyBmb3IKIyAgd2hhdCBjb25maWcgY2F1c2VzIHRoZSBmYWlsdXJlLgojCiMgIFRoZSB3YXkgaXQgd29ya3MgaXMgdGhpczoKIwojICAgRmlyc3QgaXQgZmluZHMgYSBjb25maWcgdG8gd29yayB3aXRoLiBTaW5jZSBhIGRpZmZlcmVudCB2ZXJzaW9uLCBvcgojICAgTUlOX0NPTkZJRyBtYXkgY2F1c2UgZGlmZmVyZW50IGRlcGVuZGVjaWVzLCBpdCBtdXN0IHJ1biB0aHJvdWdoIHRoaXMKIyAgIHByZXBhcmF0aW9uLgojCiMgICBPdmVyd3JpdGVzIGFueSBjb25maWcgc2V0IGluIHRoZSBiYWQgY29uZmlnIHdpdGggYSBjb25maWcgc2V0IGluCiMgICBlaXRoZXIgdGhlIE1JTl9DT05GSUcgb3IgQUREX0NPTkZJRy4gVGh1cywgbWFrZSBzdXJlIHRoZXNlIGNvbmZpZ3MKIyAgIGFyZSBtaW5pbWFsIGFuZCBkbyBub3QgZGlzYWJsZSBjb25maWdzIHlvdSB3YW50IHRvIHRlc3Q6CiMgICAoaWUuICAjIENPTkZJR19GT08gaXMgbm90IHNldCkuCiMKIyAgIEFuIG9sZGNvbmZpZyBpcyBydW4gb24gdGhlIGJhZCBjb25maWcgYW5kIGFueSBuZXcgY29uZmlnIHRoYXQKIyAgIGFwcGVhcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29uZmlncyB0byB0ZXN0LgojCiMgICBGaW5hbGx5LCBpdCBnZW5lcmF0ZXMgYSBjb25maWcgd2l0aCB0aGUgYWJvdmUgcmVzdWx0IGFuZCBydW5zIGl0CiMgICBhZ2FpbiB0aHJvdWdoIG1ha2Ugb2xkY29uZmlnIHRvIHByb2R1Y2UgYSBjb25maWcgdGhhdCBzaG91bGQgYmUKIyAgIHNhdGlzZmllZCBieSBrY29uZmlnLgojCiMgICBUaGVuIGl0IHN0YXJ0cyB0aGUgYmlzZWN0LgojCiMgICBUaGUgY29uZmlncyB0byB0ZXN0IGFyZSBjdXQgaW4gaGFsZi4gSWYgYWxsIHRoZSBjb25maWdzIGluIHRoaXMKIyAgIGhhbGYgZGVwZW5kIG9uIGEgY29uZmlnIGluIHRoZSBvdGhlciBoYWxmLCB0aGVuIHRoZSBvdGhlciBoYWxmCiMgICBpcyB0ZXN0ZWQgaW5zdGVhZC4gSWYgbm8gY29uZmlncyBhcmUgZW5hYmxlZCBieSBlaXRoZXIgaGFsZiwgdGhlbgojICAgdGhpcyBtZWFucyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgZXhpc3RzIGFuZCB0aGUgdGVzdCBmYWlscy4KIwojICAgQSBjb25maWcgaXMgY3JlYXRlZCB3aXRoIHRoZSB0ZXN0IGhhbGYsIGFuZCB0aGUgYmlzZWN0IHRlc3QgaXMgcnVuLgojCiMgICBJZiB0aGUgYmlzZWN0IHN1Y2NlZWRzLCB0aGVuIGFsbCBjb25maWdzIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnCiMgICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWdzIHRvIHRlc3QgYW5kIGFkZGVkIHRvIHRoZSBjb25maWdzIHRoYXQKIyAgIHdpbGwgYmUgZW5hYmxlZCBmb3IgYWxsIGJ1aWxkcyAodGhleSB3aWxsIGJlIGVuYWJsZWQsIGJ1dCBub3QgYmUgcGFydAojICAgb2YgdGhlIGNvbmZpZ3MgdG8gZXhhbWluZSkuCiMKIyAgIElmIHRoZSBiaXNlY3QgZmFpbHMsIHRoZW4gYWxsIHRlc3QgY29uZmlncyB0aGF0IHdlcmUgbm90IGVuYWJsZWQgYnkKIyAgIHRoZSBjb25maWcgZmlsZSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0ZXN0LiBUaGVzZSBjb25maWdzIHdpbGwgbm90CiMgICBiZSBlbmFibGVkIGluIGZ1dHVyZSB0ZXN0cy4gU2luY2UgY3VycmVudCBjb25maWcgZmFpbGVkLCB3ZSBjb25zaWRlcgojICAgdGhpcyB0byBiZSBhIHN1YnNldCBvZiB0aGUgY29uZmlnIHRoYXQgd2Ugc3RhcnRlZCB3aXRoLgojCiMgICBXaGVuIHdlIGFyZSBkb3duIHRvIG9uZSBjb25maWcsIGl0IGlzIGNvbnNpZGVyZWQgdGhlIGJhZCBjb25maWcuCiMKIyAgIE5vdGUsIHRoZSBjb25maWcgY2hvc2VuIG1heSBub3QgYmUgdGhlIHRydWUgYmFkIGNvbmZpZy4gRHVlIHRvCiMgICBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdGlvbnMgb2YgdGhlIGtidWlsZCBzeXN0ZW0sIG11bGl0cGxlCiMgICBjb25maWdzIG1heSBiZSBuZWVkZWQgdG8gY2F1c2UgYSBmYWlsdXJlLiBJZiB5b3UgZGlzYWJsZSB0aGUKIyAgIGNvbmZpZyB0aGF0IHdhcyBmb3VuZCBhbmQgcmVzdGFydCB0aGUgdGVzdCwgaWYgdGhlIHRlc3QgZmFpbHMKIyAgIGFnYWluLCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXJ1biB0aGUgY29uZmlnX2Jpc2VjdCB3aXRoIGEgbmV3CiMgICBiYWQgY29uZmlnIHdpdGhvdXQgdGhlIGZvdW5kIGNvbmZpZyBlbmFibGVkLgojCiMgIFRoZSBvcHRpb24gQlVJTERfVFlQRSB3aWxsIGJlIGlnbm9yZWQuCiMKIyAgQ09ORklHX0JJU0VDVF9UWVBFIGlzIHRoZSB0eXBlIG9mIHRlc3QgdG8gcGVyZm9ybToKIwlidWlsZAktIGJhZCBmYWlscyB0byBidWlsZAojCWJvb3QJLSBiYWQgYnVpbGRzIGJ1dCBmYWlscyB0byBib290CiMJdGVzdAktIGJhZCBib290cyBidXQgZmFpbHMgYSB0ZXN0CiMKIyAgQ09ORklHX0JJU0VDVCBpcyB0aGUgY29uZmlnIHRoYXQgZmFpbGVkIHRvIGJvb3QKIwojICBJZiBCSVNFQ1RfTUFOVUFMIGlzIHNldCwgaXQgd2lsbCBwYXVzZSBiZXR3ZWVuIGl0ZXJhdGlvbnMuCiMgIFRoaXMgaXMgdXNlZnVsIHRvIHVzZSBqdXN0IGt0ZXN0LnBsIGp1c3QgZm9yIHRoZSBjb25maWcgYmlzZWN0LgojICBJZiB5b3Ugc2V0IGl0IHRvIGJ1aWxkLCBpdCB3aWxsIHJ1biB0aGUgYmlzZWN0IGFuZCB5b3UgY2FuCiMgIGNvbnRyb2wgd2hhdCBoYXBwZW5zIGluIGJldHdlZW4gaXRlcmF0aW9ucy4gSXQgd2lsbCBhc2sgeW91IGlmCiMgIHRoZSB0ZXN0IHN1Y2NlZWRlZCBvciBub3QgYW5kIGNvbnRpbnVlIHRoZSBjb25maWcgYmlzZWN0LgojCiMgQ09ORklHX0JJU0VDVF9HT09EIChvcHRpb25hbCkKIyAgSWYgeW91IGhhdmUgYSBnb29kIGNvbmZpZyB0byBzdGFydCB3aXRoLCB0aGVuIHlvdQojICBjYW4gc3BlY2lmeSBpdCB3aXRoIENPTkZJR19CSVNFQ1RfR09PRC4gT3RoZXJ3aXNlCiMgIHRoZSBNSU5fQ09ORklHIGlzIHRoZSBiYXNlLgojCiMgRXhhbXBsZToKIyAgIFRFU1RfU1RBUlQKIyAgIFRFU1RfVFlQRSA9IGNvbmZpZ19iaXNlY3QKIyAgIENPTkZJR19CSVNFQ1RfVFlQRSA9IGJ1aWxkCiMgICBDT05GSUdfQklTRUNUID0gL2hvbWUvdGVzdC+ib25maWctYmFkCiMgICBNSU5fQ09ORklHID0gL2hvbWUvdGVzdC9jb25maWctbWluCiMgICBCSVNFQ1RfTUFOVUFMID0gMQojCiMKIwojIEZvciBURVNUX1RZUEUgPSBtYWtlX21pbl9jb25maWcKIwojICBBZnRlciBkb2luZyBhIG1ha2UgbG9jYWx5ZXNjb25maWcsIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbWF5CiMgIG5vdCBiZSB0aGUgbW9zdCB1c2VmdWwgbWluaW11bSBjb25maWd1cmF0aW9uLiBIYXZpbmcgYSB0cnVlIG1pbmltdW0KIyAgY29uZmlnIHRoYXQgeW91IGNhbiB1c2UgYWdhaW5zdCBvdGhlciBjb25maWdzIGlzIHZlcnkgdXNlZnVsIGlmCiMgIHNvbWVvbmUgZWxzZSBoYXMgYSBjb25maWcgdGhhdCBicmVha3Mgb24geW91ciBjb2RlLiBCeSBvbmx5IGZvcmNpbmcKIyAgdGhvc2UgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgdHJ1bHkgcmVxdWlyZWQgdG8gYm9vdCB5b3VyIG1hY2hpbmUKIyAgd2lsbCBnaXZlIHlvdSBsZXNzIG9mIGEgY2hhbmNlIHRoYXQgb25lIG9mIHlvdXIgc2V0IGNvbmZpZ3VyYXRpb25zCiMgIHdpbGwgbWFrZSB0aGUgYnVnIGdvIGF3YXkuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIGJldHRlciBjaGFuY2UgdG8KIyAgYmUgYWJsZSB0byByZXByb2R1Y2UgdGhlIHJlcG9ydGVkIGJ1ZyBtYXRjaGluZyB0aGUgYnJva2VuIGNvbmZpZy4KIwojICBOb3RlLCB0aGlzIGRvZXMgdGFrZSBzb21lIHRpbWUsIGFuZCBtYXkgcmVxdWlyZSB5b3UgdG8gcnVuIHRoZQojICB0ZXN0IG92ZXIgbmlnaHQsIG9yIHBlcmhhcHMgb3ZlciB0aGUgd2Vla2VuZC4gQnV0IGl0IGFsc28gYWxsb3dzCiMgIHlvdSB0byBpbnRlcnJ1cHQgaXQsIGFuZCBnaXZlcyB5b3UgdGhlIGN1cnJlbnQgbWluaW11bSBjb25maWcKIyAgdGhhdCB3YXMgZm91bmQgdGlsbCB0aGF0IHRpbWUuCiMKIyAgTm90ZSwgdGhpcyB0ZXN0IGF1dG9tYXRpY2FsbHkgYXNzdW1lcyBhIEJVSUxEX1RZUEUgb2Ygb2xkY29uZmlnCiMgIGFuZCBpdHMgdGVzdCB0eXBlIGFjdHMgbGlrZSBib290LgojICBUT0RPOiBhZGQgYSB0ZXN0IHZlcnNpb24gdGhhdCBtYWtlcyB0aGUgY29uZmlnIGRvIG1vcmUgdGhhbiBqdXN0CiMgICBib290LCBsaWtlIGhhdmluZyBuZXR3b3JrIGFjY2Vzcy4KIwojICBUbyBzYXZlIHRpbWUsIHRoZSB0ZXN0IGRvZXMgbm90IGp1c3QgZ3JhYiBhbnkgb3B0aW9uIGFuZCB0ZXN0CiMgIGl0LiBUaGUgS2NvbmZpZyBmaWxlcyBhcmUgZXhhbWluZWQgdG8gZGV0ZXJtaW5lIHRoZSBkZXBlbmRlbmNpZXMKIyAgb2YgdGhlIGNvbmZpZ3MuIElmIGEgY29uZmlnIGlzIGNob3NlbiB0aGF0IGRlcGVuZHMgb24gYW5vdGhlcgojICBjb25maWcsIHRoYXQgY29uZmlnIHdpbGwgYmUgY2hlY2tlZCBmaXJzdC4gQnkgY2hlY2tpbmcgdGhlCiMgIHBhcmVudHMgZmlyc3QsIHdlIGNhbiBlbGltaW5hdGUgd2hvbGUgZ3JvdXBzIG9mIGNvbmZpZ3MgdGhhdAojICBtYXkgaGF2ZSBiZWVuIGVuYWJsZWQuCiMKIyAgRm9yIGV4YW1wbGUsIGlmIGEgVVNCIGRldmljZSBjb25maWcgaXMgY2hvc2VuIGFuZCBkZXBlbmRzIG9uIENPTkZJR19VU0IsCiMgIHRoZSBDT05GSUdfVVNCIHdpbGwgYmUgdGVzdGVkIGJlZm9yZSB0aGUgZGV2aWNlLiBJZiBDT05GSUdfVVNCIGlzCiMgIGZvdW5kIG5vdCB0byBiZSBuZWVkZWQsIGl0LCBhcyB3ZWxsIGFzIGFsbCBjb25maWdzIHRoYXQgZGVwZW5kIG9uCiMgIGl0LCB3aWxsIGJlIGRpc2FibGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIGN1cnJlbnQgbWluX2NvbmZpZy4KIwojICBPVVRQVVRfTUlOX0NPTkZJRyBpcyB0aGUgcGF0aCBhbmQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3aWxsCiMgICBiZSBjcmVhdGVkIGZyb20gdGhlIE1JTl9DT05GSUcuIElmIHlvdSBpbnRlcnJ1cHQgdGhlIHRlc3QsIHNldAojICAgdGhpcyBmaWxlIGFzIHlvdXIgbmV3IG1pbiBjb25maWcsIGFuZCB1c2UgaXQgdG8gY29udGludWUgdGhlIHRlc3QuCiMgICBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdCBvbiBzdGFydCBvZiB0ZXN0LgojICAgVGhpcyBmaWxlIGlzIG5vdCBjcmVhdGVkIHVudGlsIGEgY29uZmlnIGlzIGZvdW5kIHRoYXQgY2FuIGJlIHJlbW92ZWQuCiMgICBJZiB0aGlzIGZpbGUgZXhpc3RzLCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCBpZiB5b3Ugd2FudCB0byB1c2UgaXQKIyAgIGFzIHRoZSBtaW5fY29uZmlnIChvdmVycmlkaW5nIE1JTl9DT05GSUcpIGlmIFNUQVJUX01JTl9DT05GSUcKIyAgIGlzIG5vdCBkZWZpbmVkLgojICAgKHJlcXVpcmVkIGZpZWxkKQojCiMgIFNUQVJUX01JTl9DT05GSUcgaXMgdGhlIGNvbmZpZyB0byB1c2UgdG8gc3RhcnQgdGhlIHRlc3Qgd2l0aC4KIyAgIHlvdSBjYW4gc2V0IHRoaXMgYXMgdGhlIHNhbWUgT1VUUFVUX01JTl9DT05GSUcsIGJ1dCBpZiB5b3UgZG8KIyAgIHRoZSBPVVRQVVRfTUlOX0NPTkZJRyBmaWxlIG11c3QgZXhpc3QuCiMgICAoZGVmYXVsdCBNSU5fQ09ORklHKQojCiMgIElHTk9SRV9DT05GSUcgaXMgdXNlZCB0byBzcGVjaWZ5IGEgY29uZmlnIGZpbGUgdGhhdCBoYXMgY29uZmlncyB0aGF0CiMgICB5b3UgYWxyZWFkeSBrbm93IG11c3QgYmUgc2V0LiBDb25maWdzIGFyZSB3cml0dGVuIGhlcmUgdGhhdCBoYXZlCiMgICBiZWVuIHRlc3RlZCBhbmQgcHJvdmVkIHRvIGJlIHJlcXVpcmVkLiBJdCBpcyBiZXN0IHRvIGRlZmluZSB0aGlzCiMgICBmaWxlIGlmIHlvdSBpbnRlbmQgb24gaW50ZXJydXB0aW5nIHRoZSB0ZXN0IGFuZCBydW5uaW5nIGl0IHdoZXJlCiMgICBpdCBsZWZ0IG9mZi4gTmV3IGNvbmZpZ3MgdGhhdCBpdCBmaW5kcyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhpcyBmaWxlCiMgICBhbmQgd2lsbCBub3QgYmUgdGVzdGVkIGFnYWluIGluIGxhdGVyIHJ1bnMuCiMgICAob3B0aW9uYWwpCiMKIyBFeGFtcGxlOgojCiMgIFRFU1RfVFlQRSA9IG1ha2VfbWluX2NvbmZpZwojICBPVVRQVVRfTUlOX0NPTkZJRyA9IC9wYXRoL3RvL2NvbmZpZy1uZXctbWluCiMgIFNUQVJUX01JTl9DT05GSUcgPSAvcGF0aC90by9jb25maWctbWluCiMgIElHTk9SRV9DT05GSUcgPSAvcGF0aC90by9jb25maWctdGVzdGVkCiMK