VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgd2lkZ2V0IHNvdXJjZWNvZGUgYW5kIGJ1aWxkIGZpbGVzLgoKQ3JlYXRlIGEgd2lkZ2V0Cj09PT09PT09PT09PT09PQoKVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gY3JlYXRlIHdpZGdldHMsIHRoZSBmaXJzdCBpcyB0byBkbyBpdCBhbGwgYnkKaGFuZC4gVGhlIHNlY29uZCBpcyB0byB1c2UgYSBzZWVkIHdpZGdldCB0byBwcm92aWRlIHRoZSBiYXNpYwpzdHJ1Y3R1cmUgb2YgeW91ciB3aWRnZXQgYW5kIHRoZW4gZWRpdCB0aGF0LiBUaGUgdGhpcmQgaXMgdG8gdXNlIG91dAp0ZW1wbGF0aW5nIHN5c3RlbSB0aGF0IGlzIGRlc2lnbmVkIHRvIGFsbG93IHlvdSB0byBidWlsZCB3aWRnZXRzCndpdGhvdXQga25vd2luZyBtdWNoIG9mIGhvdyB3aWRnZXRzIGFyZSBzdHJ1Y3R1cmVkLgoKVGhlIGVhc2llc3QgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCwgaWYgeW91IGtub3cgSFRNTCBhbmQgSmF2YXNjcmlwdCwgaXMKcHJvYmFibHkgdG8gdXNlIHRoZSBzZWVkIHdpZGdldHMuIFRoZSB0ZW1wbGF0ZXMgc3lzdGVtIGFsbG93cyBtdWNoCm1vcmUgcmV1c2UgYmV0d2VlbiB3aWRnZXRzIGJ1dCBicmluZ3Mgd2l0aCBpdCBhIG5ldyBzZXQgb2YgcnVsZXMgYW5kCmNvbmZpZ3VyYXRpb25zIHRvIGxlYXJuLgoKVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdXNpbmcgc2VlZHMgdG8gYnVpbGQgd2lkZ2V0cy4gVG8gdXNlIHRoZQp0ZW1wbGF0ZXMgc2VlIFdPT0tJRV9IT01FL3dpZGdldHMvdGVtcGxhdGUvcmVhZG1lLnR4dAoKVXNpbmcgU2VlZHMgdG8gQ3JlYXRlIFdpZGdldHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRvIGNyZWF0ZSBhIHdpZGdldDoKCmFudCBzZWVkLXdpZGdldAoKVGhpcyBpcyBhbiBpbnRlcmFjdGl2ZSB0YXJnZXQgdGhhdCB3aWxsIGFzayB5b3UgYSBudW1iZXIgb2YgcXVlc3Rpb25zIAphYm91dCB0aGUgd2lkZ2V0IHlvdSB3aXNoIHRvIGNyZWF0ZS4gVGhlIGZpcnN0IHF1ZXN0aW9uIGFza3MgZm9yIGEgCnNob3J0IG5hbWUgZm9yIHlvdXIgd2lkZ2V0LiBUaGlzIHNob3J0IG5hbWUgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgCndpZGdldCBkaXJlY3RvcnkgYW5kIG90aGVyIGtleSB3aWRnZXQuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IApXSURHRVRfU0hPUlROQU1FIHdpbGwgcmVmZXIgdG8geW91ciByZXNwb25zZSB0byB0aGlzIHF1ZXN0aW9uLgoKT25jZSB0aGUgdGFyZ2V0IGhhcyBjb21wbGV0ZWQgeW91ciB3aWRnZXQgc2tlbGV0b24gd2lsbCBiZSBhdmFpbGFibGUgaW4KYSBkaXJlY3RvcnkgY2FsbGVkIFdJREdFVF9TSE9SVE5BTUUuCgpUaGUgZGVmYXVsdCB3aWRnZXQgd2lsbCBwcm92aWRlIGEgdmVyeSBiYXNpYyB3aWRnZXQgd2l0aCBkZWZhdWx0IHN0eWxlCnJlc291cmNlIGFuZCBqYXZhc2NyaXB0IGZpbGVzLgoKQnVpbGQgYSBXaWRnZXQKPT09PT09PT09PT09PT0KCmNkICRXT09LSUVfSE9NRQphbnQgYnVpbGQtd2lkZ2V0CgpZb3Ugd2lsbCBiZSBhc2tlZCBmb3IgdGhlIG5hbWUgb2YgdGhlIHdpZGdldCB5b3Ugd2lzaCB0byBidWlsZC4gdGhpcyBuYW1lIHNob3VsZCBiZSB0aGUKbmFtZSBvZiB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIHdpZGdldC4KCllvdXIgd2lkZ2V0IHBhY2thZ2Ugd2lsbCBiZSBjcmVhdGVkIGluIHRoZSB3aWRnZXRzL2J1aWxkIGRpcmVjdG9yeS4KCkRlcGxveSBhIHdpZGdldAo9PT09PT09PT09PT09PT0KClRvIGRlcGxveSBhIHdpZGdldCB0byBhIHJ1bm5pbmcgd2lkZ2V0IHNlcnZlciB1c2U6CgpjZCCjV09PS0lFX0hPTUUKYW50IGRlcGxveS13aWRnZXQKCllvdSB3aWxsIGJlIGFza2VkIGZvciB0aGUgbmFtZSBvZiB0aGUgd2lkZ2V0IHlvdSB3aXNoIHRvIGJ1aWxkLiB0aGlzIG5hbWUgc2hvdWxkIGJlIHRoZQpuYW1lIG9mIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgd2lkZ2V0LgogClN1cHBseWluZyB0aGUgd2lkZ2V0IG5hbWUKPT09PT09PT09PT09PT09PT09PT09PT09PQoKSXQgY2FuIGJlY29tZSB0aXJlc29tZSBoYXZpbmcgdG8gZW50ZXIgdGhlIHdpZGdldCBuYW1lIHJlcGVhdGVkbHkgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBjeWNsZS4gCkZvciB0aGlzIHJlYXNvbiB5b3UgY2FuIHN1cHBseSBpdCBpbiB0aGUgY29tbWFuZCwgZm9yIGV4YW1wbGU7CgphbnQgZGVwbG95LXdpZGdldCAtRHdpZGdldC5zaG9ydG5hbWU9Rm9vV2lkZ2V0Cg==