VGVzdCBzdWl0ZSBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL3Nocy5odG1sCgoJCQkJU2FtcGxlIFZlY3RvcnMgZm9yIFNIQS0xIFRlc3RpbmcKCglUaGlzIGZpbGUgZGVzY3JpYmVzIHRlc3RzIGFuZCB2ZWN0b3JzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBvZiAKYW4gU0hBLTEgaW1wbGVtZW50YXRpb24uICBIb3dldmVyLCB1c2Ugb2YgdGhlc2UgdmVjdG9ycyBkb2VzIG5vdCB0YWtlIHRoZSBwbGFjZSBvZiB2YWxpZGF0aW9uIApvYnRhaW5lZCB0aHJvdWdoIHRoZSBDcnlwdG9ncmFwaGljIE1vZHVsZSBWYWxpZGF0aW9uIFByb2dyYW0uCgoJVGhlcmUgYXJlIHRocmVlIGFyZWFzIG9mIHRoZSBTZWN1cmUgSGFzaCBTdGFuZGFyZCBmb3Igd2hpY2ggdGVzdCB2ZWN0b3JzIGFyZSBzdXBwbGllZDoKc2hvcnQgbWVzc2FnZXMgb2YgdmFyeWluZyBsZW5ndGgsIHNlbGVjdGVkIGxvbmcgbWVzc2FnZXMsIGFuZCBwc2V1ZG9yYW5kb21seSBnZW5lcmF0ZWQgbWVzc2FnZXMuClNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciBhbiBpbXBsZW1lbnRhdGlvbiB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBoYXNoaW5nIG9mIGJ5dGUtb3JpZW50ZWQKbWVzc2FnZXMgKGFuZCBub3QgbWVzc2FnZXMgb2YgYSBub24tYnl0ZSBsZW5ndGgpLCB0aGUgU0hTIHRlc3RzIGVhY2ggY29tZSBpbiB0d28gZmxhdm9ycy4gIEZvcgpib3RoIGJ5dGUgb3JpZW50ZWQgYW5kIGJpdCBvcmllbnRlZCBtZXNzYWdlcywgdGhlIG1lc3NhZ2UgbGVuZ3RocyBhcmUgZ2l2ZW4gaW4gYml0cy4KClR5cGUgSSBUZXN0OiBNZXNzYWdlcyBvZiBWYXJ5aW5nIExlbmd0aAoKCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTSFMgbXVzdCBiZSBhYmxlIHRvIGNvcnJlY3RseSBnZW5lcmF0ZSBtZXNzYWdlIGRpZ2VzdHMgZm9yCm1lc3NhZ2VzIG9mIGFyYml0cmFyeSBsZW5ndGguICBUaGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHRlc3RlZCBieSBzdXBwbHlpbmcgdGhlIGltcGxlbWVudGF0aW9uCndpdGggMTAyNSBwc2V1ZG9yYW5kb21seSBnZW5lcmF0ZWQgbWVzc2FnZXMgd2l0aCBsZW5ndGhzIGZyb20gMCB0byAxMDI0IGJpdHMgKGZvciBhbiBpbXBsZW1lbnRhdGlvbgp0aGF0IG9ubHkgaGFzaGVzIGJ5dGUtb3JpZW50ZWQgZGF0YSBjb3JyZWN0bHksIDEyOSBtZXNzYWdlcyBvZiBsZW5ndGggMCwgOCwgMTYsIDI0LC4uLiwxMDI0IGJpdHMKd2lsbCBiZSBzdXBwbGllZCkuCgpUeXBlIElJIFRlc3Q6IFNlbGVjdGVkIExvbmcgTWVzc2FnZXMKCglBZGRpdGlvbmFsIHRlc3Rpbmcgb2YgYW4gaW1wbGVtZW50YXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSB0ZXN0aW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCmNhbiBjb3JyZWN0bHkgZ2VuZXJhdGUgZGlnZXN0cyBmb3IgbG9uZ2VyIG1lc3NhZ2VzLiAgQSBsaXN0IG9mIDEwMCBtZXNzYWdlcywgZWFjaCBvZiBsZW5ndGggPiAxMDI0LAppcyBzdXBwbGllZC4gIFRoZXNlIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgaGFzaGluZyBvZiBsb25nZXIgbWVzc2FnZSBsZW5ndGhzLiAgRm9yIGJpdCBvcmllbnRlZAp0ZXN0aW5nIHRoZSBtZXNzYWdlcyBhcmUgZnJvbSAxMDI1IHRvIDEwMzQyNSBiaXRzIGxvbmcgKGxlbmd0aD0xMDI1K2kqMTAyNCwgd2hlcmUgMDw9aTwxMDApLiAgRm9yCmJ5dGUgb3JpZW50ZWQgdGVzdGluZyB0aGUgbWVzc2FnZXMgYXJlIGZyb20gMTAzMiB0byAxMDM0MzIgKGxlbmd0aD0xMDMyK2kqMTAyNCwgd2hlcmUgMDw9aTwxMDApLgoKVHlwZSBJSUkgVGVzdDogUHNldWRvcmFuZG9tbHkgR2VuZXJhdGVkIE1lc3NhZ2VzCgoJVGhpcyB0ZXN0IGRldGVybWluZXMgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gY2FuIGNvbXB1dGUgbWVzc2FnZSBkaWdlc3RzIGZvciBtZXNzYWdlcwp0aGF0IGFyZSBnZW5lcmF0ZWQgdXNpbmcgYSBnaXZlbiBzZWVkLiAgQSBzZXF1ZW5jZSBvZiAxMDAgbWVzc2FnZSBkaWdlc3RzIGlzIGdlbmVyYXRlZCB1c2luZyB0aGlzCnNlZWQuICBUaGUgZGlnZXN0cyBhcmUgZ2VuZXJhdGVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBzZXVkb2NvZGU6Cgpwcm9jZWR1cmUgTW9udGVDYXJsbyhzdHJpbmcgU0VFRCkKewoJaW50ZWdlciBpLCBqLCBhOwoJc3RyaW5nCU07CgoJTSA6PSBTRUVEOwoJZm9yIGogPSAwIHRvIDk5IGRvIHsKCQlmb3IgaSA9IDEgdG8gNTAwMDAgZG8gewoJCQlmb3IgYSA9IDEgdG8gKGovNCo4ICsgMjQpIGRvIE0gOj0gTSB8fCCSMJI7CS8qkTAnIGlzIHRoZSBiaW5hcnkgemVybyBiaXQuICovCgkJCU0gOj0gTSB8fCBpOyAJLyogSGVyZSwgdGhlIHZhbHVlIGZvciCRaZIgaXMgZXhwcmVzc2VkIGFzIGEgMzItYml0IHdvcmQKCQkJCQkgICBhbmQgY29uY2F0ZW5hdGVkIHdpdGggkU2SLiBUaGUgZmlyc3QgYml0CgkJCQkJICAgY29uY2F0ZW5hdGVkIHdpdGggkU2SIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZgoJCQkJCSAgIHRoaXMgMzItYml0IHdvcmQuICovCgkJCU0gOj0gU0hBKE0pOwoJCQl9CgkJcHJpbnQoTSk7CgkJfQoJfQoKTk9URTogSW4gdGhlIGFib3ZlIHByb2NlZHVyZSwgfHwgZGVub3RlcyBjb25jYXRlbmF0aW9uLiBBbHNvLCBNIHx8IGkgZGVub3RlcyBhcHBlbmRpbmcgdGhlIDMyLWJpdAp3b3JkIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgkWmSLCBhcyBkZWZpbmVkIGluIHNlY3Rpb24gMiBvZiB0aGUgU0hTLiAgV2l0aGluIHRoZSBwcm9jZWR1cmUsIE0gaXMgYSBzdHJpbmcKb2YgdmFyaWFibGUgbGVuZ3RoLiBUaGUgaW5pdGlhbCBsZW5ndGggb2YgNDE2IGJpdHMgZW5zdXJlcyB0aGF0IHRoZSBsZW5ndGggb2YgTSBuZXZlciBleGNlZWRzIDUxMiBiaXRzCmR1cmluZyBleGVjdXRpb24gb2YgdGhlIGFib3ZlIHByb2NlZHVyZSwgYW5kIGl0IGVuc3VyZXMgdGhhdCBtZXNzYWdlcyB3aWxsIGJlIG9mIGEgYnl0ZSBsZW5ndGguICBFYWNoCmVsZW1lbnQgcHJpbnRlZCBzaG91bGQgYmUgMTYwIGJpdHMgaW4gbGVuZ3RoLgoKCkZpbGUgZm9ybWF0czoKClRoZXJlIGFyZSB0d28gZmlsZXMgaW5jbHVkZWQgZm9yIGVhY2ggdGVzdCB0eXBlIChiaXQtb3JpZW50ZWQgYW5kIGJ5dGUtb3JpZW50ZWQpLiAgT25lIGZpbGUgY29udGFpbnMKdGhlIG1lc3NhZ2VzIGFuZCB0aGUgb3RoZXIgZmlsZSBjb250YWlucyB0aGUgaGFzaGVzLgoKVGhlIG1lc3NhZ2UgZmlsZXMgcHJvdmlkZWQgdXNlICJjb21wYWN0IHN0cmluZ3MiIHRvIHN0b3JlIHRoZSBtZXNzYWdlIHZhbHVlcy4gIENvbXBhY3Qgc3RyaW5ncyBhcmUgCnVzZWQgdG8gcmVwcmVzZW50ZWQgdGhlIG1lc3NhZ2VzIGluIGEgY29tcGFjdCBmb3JtLiAgQSBjb21wYWN0IHN0cmluZyBoYXMgdGhlIGZvcm0KCXogfHwgYiB8fCBuKDEpIHx8IG4oMikgfHwgLi4uIHx8IG4oeikKd2hlcmUgej49MCB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBuLCBiIGlzIGVpdGhlciAwIG9yIDEsIGFuZCBlYWNoIG4oaSkgaXMgYSBkZWNpbWFsIGludGVnZXIKcmVwcmVzZW50aW5nIGEgcG9zaXRpdmUgbnVtYmVyLiAgVGhlIGxlbmd0aCBvZiB0aGUgY29tcGFjdCBzdHJpbmcgaXMgZ2l2ZW4gYnkgdGhlIHN1bW1hdGlvbiBvZiB0aGUgbihpKS4KClRoZSBjb21wYWN0IHN0cmluZyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpdCBzdHJpbmcgY29uc2lzdGluZyBvZiBiIHJlcGVhdGVkIG4oMSkgdGltZXMsCmZvbGxvd2VkIGJ5IDEtYiByZXBlYXRlZCBuKDIpIHRpbWVzLCBmb2xsb3dlZCBieSBiIHJlcGVhdGVkIG4oMykgdGltZXMsIGFuZCBzbyBvbi4KCkV4YW1wbGU6CglNID0gNSAxIDcgMTMgNSAxIDIKCXdoZXJlIHogPSA1IGFuZCBiID0gMS4gIFRoZW4gdGhlIGNvbXBhY3Qgc3RyaW5nIE0gcmVwcmVzZW50cyB0aGUgYml0IHN0cmluZwoJMTExMTExMTAwMDAwMDAwMDAwMDAxMTExMTAxMQoJd2hlcmUgMSBpcyByZXBlYXRlZCA3IHRpbWVzLCAwIGlzIHJlcGVhdGVkIDEzIHRpbWVzLCAxIGlzIHJlcGVhdGVkIDUgdGltZXMsCgkwIGlzIHJlcGVhdGVkIDEgdGltZSwgYW5kIDEgaXMgcmVwZWF0ZWQgMiB0aW1lcy4KCg==