RXh0ZXJuYWxTcGVlY2gKYnkgU3TpcGhhbmUgRG95b24gPHMuZG95b25AdmlkZW90cm9uLmNhPgpWZXJzaW9uIDAuNyBiZXRhLCBTZXB0ZW1iZXIgMjAwMQoKVGhpcyBzcGVlY2ggZHJpdmVyIGludGVyZmFjZXMgd2l0aCBhbiBleHRlcm5hbCBwcm9ncmFtIHRoYXQgd2lsbCBoYW5kbGUKc3BlZWNoIHN5bnRoZXNpcy4gVGhlIHByb3RvY29sIGZvciB0YWxraW5nIHRvIHRoZSBleHRlcm5hbCBwcm9ncmFtIGlzCnF1aXRlIGFyYml0cmFyeTogdGhlcmUgaXMgbm90aGluZyBzdGFuZGFyZCBhYm91dCBpdC4KCkFzIG9wcG9zZWQgdG8gdGhlIEdlbmVyaWNTYXkgZHJpdmVyLCB0aGlzIGRyaXZlciBpcyBpbnRlbmRlZCBmb3IgbW9yZQpzb3BoaXN0aWNhdGVkIGZlYXR1cmVzOgoKLSBDb21tdW5pY2F0aW9uIHdpdGggdGhlIGV4dGVybmFsIHByb2dyYW0gaXMgYmktZGlyZWN0aW9uYWwsIGFuZCBCUkxUVFkKY29uc3RhbnRseSBsaXN0ZW5zIGZvciBwcm9ncmVzcyB1cGRhdGVzIGZyb20gdGhlIGV4dGVybmFsIHByb2dyYW0uIEJSTFRUWQpjYW4gdGh1cyBwZXJmb3JtIHNwZWVjaCB0cmFja2luZzogdGhlIGJyYWlsbGUgZGlzcGxheSBjYW4gbW92ZSBhcyB0aGUKd29yZHMgYXJlIHNwb2tlbi4gQlJMVFRZIGlzIHRoZW4gYWxzbyBhYmxlIHRvIGRldGVybWluZSB3aGVuIHRoZSB0ZXh0IGlzCmZpbmlzaGVkIHNwZWFraW5nLiBGaW5hbGx5LCBpZiBzcGVlY2ggaXMgc3RvcHBlZCBieSB0aGUgdXNlciwgQlJMVFRZIGtub3dzCmF0IHdoYXQgcG9zaXRpb24gaXQgc3RvcHBlZCwgc28gdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSB0byBzZWFyY2ggZm9yCnRoZSBzdG9wcGluZyBwb2ludCB3aGVuIGhlL3NoZSB3YW50cyB0byByZXN1bWUgc3BlZWNoIHN5bnRoZXNpcy4KCi0gVmlkZW8gYXR0cmlidXRlcyBvZiB0aGUgY2hhcmFjdGVycyBhcmUgcGFzc2VkIHdpdGggdGhlIHRleHQsIHNvIHRoYXQgdGhlCmV4dGVybmFsIHByb2dyYW0gY2FuIGludGVycHJldCB0aGVtIGFuZCBhZGQgYXBwcm9wcmlhdGUgdm9jYWwgbWFya2luZ3MuIAoKQ3VycmVudGx5LCBvbmx5IG9uZSBleHRlcm5hbCBwcm9ncmFtIGV4aXN0cyB0aGF0IGNhbiB0YWxrIHRoaXMgcHJvdG9jb2wuIEl0CnVzZXMgSUJNJ3MgVmlhdm9pY2UgVFRTIEFLQSBWaWF2b2ljZSBPdXRsb3VkIHNvZnR3YXJlIHNwZWVjaCBzeW50aGVzaXMKbGlicmFyeS4KCk5CIElCTSBvZmZlcnMgdGhlIFZpYXZvaWNlIFRUUyBwcm9kdWN0IGF0IG5vIGNvc3QgZm9yCnBlcnNvbmFsIC8gcHNldWRvLWV2YWx1YXRpb24gdXNlLiBVbmZvcnR1bmF0ZWx5IHRoZWlyIHNvZnR3YXJlIGlzIG5vdApmcmVlIGluIHRoZSBHTlUgc2Vuc2Ugbm9yIG9wZW5zb3VyY2UsIGFuZCBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgZm9yCmNvbW1lcmNpYWwgdXNlLiBJdCBpcyBob3dldmVyIG11Y2ggbW9yZSB1c2FibGUgYW5kIG9mIGZhciBzdXBlcmlvciBxdWFsaXR5CnRoYW4gcnN5bnRoLCBmZXN0aXZhbCwgYW5kIHRoZSBUVFMgc2NyaXB0cyBJIGhhdmUgc2VlbiBmb3IgTUJST0xBLiAKCk15IGV4dGVybmFsIHNwZWVjaCBwcm9ncmFtIGRvZXMgc29tZSBzcGVlY2ggcHJlcHJvY2Vzc2luZyBhbmQgdGhlbiB1c2VzCnRoZSBWaWF2b2ljZSBsaWJyYXJ5LiBJdCBpcyBzdGlsbCBxdWl0ZSBhbHBoYS4gWW91IGNhbiBmaW5kIGl0IGF0OgpodHRwOi8vcGFnZXMuaW5maW5pdC5uZXQvc2RveW9uL3ZpYS5odG1sCkl0IHdpbGwgYmUga2VwdCBzZXBhcmF0ZSBmcm9tIEJSTFRUWSAoaW4gcGFydCBiZWNhdXNlIG9mIHRoZSBub24tZnJlZQpuYXR1cmUgb2YgVmlhdm9pY2UgVFRTKS4KClRoZSBwYXRoIHRvIHRoZSBleHRlcm5hbCBwcm9ncmFtLCBhbmQgdGhlIHVpZCBhbmQgZ2lkIHVuZGVyIHdoaWNoIGl0IGlzCmV4ZWN1dGVkLCBjYW4gYmUgZWl0aGVyOgotaGFyZC1jb2RlZCBpbiBzcGVlY2guaAotc3BlY2lmaWVkIGluIHRoZSBCUkxUVFkgY29uZmlndXJhdGlvbiBmaWxlIHRocm91Z2gKICAgdGhlIHNwZWVjaC1wYXJhbWV0ZXIga2V5d29yZC4KLVNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lIHVzaW5nIHRoZSAtUyBvcHRpb24uCgpJbiB0aGUgbGFzdCB0d28gY2FzZXMsIHRoZSBmb3JtYXQgaXM6CiAgIHByb2dyYW09PGV4dFByb2dQYXRoPlssdWlkPTxudW1lcmljYWxfdWlkPl1bLGdpZD08bnVtZXJpY2FsX2dpZD5dCndpdGhvdXQgc3BhY2UuCkFzIGluOgpzcGVlY2gtcGFyYW1ldGVyIHByb2dyYW09L2hvbWUvc3RlcGgvdmlhLTAuMy92aWFfd3JhcHBlcix1aWQ9NTAxLGdpZD01MDEKCkF2b2lkIGV4ZWN1dGluZyB0aGUgZXh0ZXJuYWwgcHJvZ3JhbSBhcyByb290IGlmIGF0IGFsbCBwb3NzaWJsZS4gVGhlCmFjY291bnQgeW91IGNob29zZSBtYXkgcmVxdWlyZSBzb21lIHJpZ2h0cyBzdWNoIGFzIGFjY2VzcyB0byB0aGUKc291bmRjYXJkIGRldmljZS4K