CkFjY29yZGluZyB0byB0aGVpciBuYW1lLCBNUEwncyAqdHJhbnNmb3JtYXRpb24qLCBvciAqc2VxdWVuY2UtYnVpbGRpbmcKYWxnb3JpdGhtcyogcHJvdmlkZSB0aGUgdG9vbHMgZm9yIGJ1aWxkaW5nIG5ldyBzZXF1ZW5jZXMgZnJvbSB0aGUgZXhpc3RpbmcKb25lcyBieSBwZXJmb3JtaW5nIHNvbWUga2luZCBvZiB0cmFuc2Zvcm1hdGlvbi4gQSB0eXBpY2FsIHRyYW5zZm9ybWF0aW9uIAphbG9ncml0aG0gdGFrZXMgb25lIG9yIG1vcmUgaW5wdXQgc2VxdWVuY2VzIGFuZCBhIHRyYW5zZm9ybWF0aW9uIAptZXRhZnVuY3Rpb24vcHJlZGljYXRlLCBhbmQgcmV0dXJucyBhIG5ldyBzZXF1ZW5jZSBidWlsdCBhY2NvcmRpbmcgdG8gdGhlIAphbGdvcml0aG0ncyBzZW1hbnRpY3MgdGhyb3VnaCB0aGUgbWVhbnMgb2YgaXRzIHxJbnNlcnRlcnwgYXJndW1lbnQsIHdoaWNoIApwbGF5cyBhIHJvbGUgc2ltaWxhciB0byB0aGUgcm9sZSBvZiBydW4tdGltZSB8T3V0cHV0IEl0ZXJhdG9yfC4gCgouLiBTYXkgc29tZXRoaW5nIGFib3V0IG9wdGlvbmFsaXR5IG9mIEluc2VydGVycy90aGVpciBkZWZhdWx0IGJlaGF2aW9yCgpFdmVyeSB0cmFuc2Zvcm1hdGlvbiBhbGdvcml0aG0gaXMgYSB8UmV2ZXJzaWJsZSBBbGdvcml0aG18LCBwcm92aWRpbmcgCmFuIGFjY29yZGluZ2x5IG5hbWVkIGBgcmV2ZXJzZV9gYCBjb3VudGVycGFydCBjYXJyeWluZyB0aGUgdHJhbnNmb3JtYXRpb24gCmluIHRoZSByZXZlcnNlIG9yZGVyLiBUaHVzLCBhbGwgc2VxdWVuY2UtYnVpbGRpbmcgYWxnb3JpdGhtcyBjb21lIGluIHBhaXJzLApmb3IgaW5zdGFuY2UgYGByZXBsYWNlYGAgLyBgYHJldmVyc2VfcmVwbGFjZWBgLiBJbiBwcmVzZW5jZSBvZiB2YXJpYWJpbGl0eSBvZgp0aGUgb3V0cHV0IHNlcXVlbmNlJ3MgcHJvcGVydGllcyBzdWNoIGFzIGZyb250IG9yIGJhY2t3YXJkIGV4dGVuc2liaWxpdHksIAp0aGUgZXhpc3RlbmNlIG9mIHRoZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobXMgYWxsb3dzIGZvciB0aGUgbW9zdCBlZmZpY2llbnQgCndheSB0byBwZXJmb3JtIHRoZSByZXF1aXJlZCB0cmFuc2Zvcm1hdGlvbi4KCi4uIHxUcmFuc2Zvcm1hdGlvbiBBbGdvcml0aG1zfCByZXBsYWNlOjogYFRyYW5zZm9ybWF0aW9uIEFsZ29yaXRobXNgXwoKLi4gfHRyYW5zZm9ybWF0aW9uIGFsZ29yaXRobXwgcmVwbGFjZTo6IGB0cmFuc2Zvcm1hdGlvbiBhbGdvcml0aG1gXwouLiBfdHJhbnNmb3JtYXRpb24gYWxnb3JpdGhtOiBgVHJhbnNmb3JtYXRpb24gQWxnb3JpdGhtc2BfCi4uIHx0cmFuc2Zvcm1hdGlvbiBhbGdvcml0aG1zfCByZXBsYWNlOjogYHRyYW5zZm9ybWF0aW9uIGFsZ29yaXRobXNgXwoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK