New GNU ELPA package: denote-org - Denote extensions for Org mode
Sacha Chua <[email protected]> Mon, 17 Mar 2025 10:03:06 -0400
| Newsgroups | gmane.emacs.announce |
|---|---|
| Message-ID | <[email protected]> |
ICAgIFN1bW1hcnk6IERlbm90ZSBleHRlbnNpb25zIGZvciBPcmcgbW9kZQ0KICAgUmVxdWlyZXM6 IGVtYWNzLTI4LjEsIGRlbm90ZS0zLjEuMA0KICAgIFdlYnNpdGU6IGh0dHBzOi8vZ2l0aHViLmNv bS9wcm90ZXNpbGFvcy9kZW5vdGUtb3JnDQogTWFpbnRhaW5lcjogUHJvdGVzaWxhb3MgU3RhdnJv dSA8aW5mb0Bwcm90ZXNpbGFvcy5jb20+DQogICAgIEF1dGhvcjogUHJvdGVzaWxhb3MgU3RhdnJv dSA8aW5mb0Bwcm90ZXNpbGFvcy5jb20+DQoNCiAgICAgICAgICAg4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 4pSB4pSB4pSB4pSB4pSB4pSBDQogICAgICAgICAgICAgREVOT1RFLU9SRzogRVhURU5TSU9OUyBU TyBCRVRURVIgSU5URUdSQVRFIE9SRw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lU SCBERU5PVEUNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBQcm90ZXNpbGFvcyBTdGF2cm91 DQogICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9AcHJvdGVzaWxhb3MuY29tDQogICAgICAg ICAgIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKU geKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgQ0KDQoNClRoaXMgbWFudWFs LCB3cml0dGVuIGJ5IFByb3Rlc2lsYW9zIFN0YXZyb3UsIGRlc2NyaWJlcyB0aGUgY3VzdG9taXph dGlvbg0Kb3B0aW9ucyBmb3IgdGhlIEVtYWNzIHBhY2thZ2UgY2FsbGVkIGBkZW5vdGUnIChvciBg ZGVub3RlLmVsJyksIGFuZA0KcHJvdmlkZXMgZXZlcnkgb3RoZXIgcGllY2Ugb2YgaW5mb3JtYXRp b24gcGVydGluZW50IHRvIGl0Lg0KDQpUaGUgZG9jdW1lbnRhdGlvbiBmdXJuaXNoZWQgaGVyZWlu IGNvcnJlc3BvbmRzIHRvIHN0YWJsZSB2ZXJzaW9uIDAuMC4wLA0KcmVsZWFzZWQgb24gTi9BLiAg QW55IHJlZmVyZW5jZSB0byBhIG5ld2VyIGZlYXR1cmUgd2hpY2ggZG9lcyBub3QgeWV0DQpmb3Jt IHBhcnQgb2YgdGhlIGxhdGVzdCB0YWdnZWQgY29tbWl0LCBpcyBleHBsaWNpdGx5IG1hcmtlZCBh cyBzdWNoLg0KDQpDdXJyZW50IGRldmVsb3BtZW50IHRhcmdldCBpcyAwLjEuMC1kZXYuDQoNCuKB gyBQYWNrYWdlIG5hbWUgKEdOVSBFTFBBKTogYGRlbm90ZS1vcmcnICjimqDvuI8gTm90IGF2YWls YWJsZSB5ZXQpDQrigYMgT2ZmaWNpYWwgbWFudWFsOiA8aHR0cHM6Ly9wcm90ZXNpbGFvcy5jb20v ZW1hY3MvZGVub3RlLW9yZz4NCuKBgyBHaXQgcmVwb3NpdG9yeTogPGh0dHBzOi8vZ2l0aHViLmNv bS9wcm90ZXNpbGFvcy9kZW5vdGUtb3JnPg0K4oGDIEJhY2tyb255bTogRGVub3Rl4oCmIE9yZGlu YXJpbHkgUmVzdHJpY3RzIEd5cmF0aW9ucy4NCg0KSWYgeW91IGFyZSB2aWV3aW5nIHRoZSBSRUFE TUUub3JnIHZlcnNpb24gb2YgdGhpcyBmaWxlLCBwbGVhc2Ugbm90ZSB0aGF0DQp0aGUgR05VIEVM UEEgbWFjaGluZXJ5IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGFuIEluZm8gbWFudWFsIG91dCBv ZiBpdC4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQoxLiBDT1BZSU5HDQoyLiBPdmVydmlldw0KMy4gVXNl IE9yZyBkeW5hbWljIGJsb2Nrcw0KLi4gMS4gT3JnIGR5bmFtaWMgYmxvY2tzIHRvIGluc2VydCBs aW5rcw0KLi4gMi4gVGhlIE9yZyBkeW5hbWljIGJsb2NrIHRvIGluc2VydCBtaXNzaW5nIGxpbmtz IG9ubHkNCi4uIDMuIFRoZSBPcmcgZHluYW1pYyBibG9jayB0byBpbnNlcnQgYmFja2xpbmtzDQou LiA0LiBPcmcgZHluYW1pYyBibG9jayB0byBpbnNlcnQgZmlsZSBjb250ZW50cw0KLi4gNS4gT3Jn IGR5bmFtaWMgYmxvY2sgdG8gaW5zZXJ0IE9yZyBmaWxlcyBhcyBoZWFkaW5ncw0KNC4gQ3JlYXRl IGEgbm90ZSBmcm9tIHRoZSBjdXJyZW50IE9yZyBzdWJ0cmVlDQo1LiBJbnNlcnQgbGluayB0byBh biBPcmcgZmlsZSB3aXRoIGEgZnVydGhlciBwb2ludGVyIHRvIGEgaGVhZGluZw0KLi4gMS4gQmFj a2xpbmtzIGZvciBPcmcgaGVhZGluZ3MNCjYuIENvbnZlcnQgYGRlbm90ZTonIGxpbmtzIHRvIGBm aWxlOicgbGlua3MgaW4gT3JnIGFuZCB2aWNlIHZlcnNhDQo3LiBJbnN0YWxsYXRpb24NCi4uIDEu IEdOVSBFTFBBIHBhY2thZ2UNCi4uIDIuIE1hbnVhbCBpbnN0YWxsYXRpb24NCjguIFNhbXBsZSBj b25maWd1cmF0aW9uDQo5LiBBY2tub3dsZWRnZW1lbnRzDQoxMC4gR05VIEZyZWUgRG9jdW1lbnRh dGlvbiBMaWNlbnNlDQoxMS4gSW5kaWNlcw0KLi4gMS4gRnVuY3Rpb24gaW5kZXgNCi4uIDIuIFZh cmlhYmxlIGluZGV4DQouLiAzLiBDb25jZXB0IGluZGV4DQoNCg0KMSBDT1BZSU5HDQrilZDilZDi lZDilZDilZDilZDilZDilZDilZANCg0KICBDb3B5cmlnaHQgKEMpIDIwMjItMjAyNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCg0KICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQg dG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5DQogICAgICAgIHRoaXMgZG9jdW1lbnQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZQ0KICAgICAgICBEb2N1bWVudGF0aW9uIExp Y2Vuc2UsIFZlcnNpb24gMS4zIG9yIGFueSBsYXRlciB2ZXJzaW9uDQogICAgICAgIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIG5vDQogICAgICAgIEludmFy aWFudCBTZWN0aW9ucywgd2l0aCB0aGUgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcg4oCcQQ0KICAg ICAgICBHTlUgTWFudWFsLOKAnSBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcyBpbiAo YSkNCiAgICAgICAgYmVsb3cuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4g dGhlIHNlY3Rpb24NCiAgICAgICAgZW50aXRsZWQg4oCcR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBM aWNlbnNlLuKAnQ0KDQogICAgICAgIChhKSBUaGUgRlNG4oCZcyBCYWNrLUNvdmVyIFRleHQgaXM6 IOKAnFlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvDQogICAgICAgIGNvcHkgYW5kIG1vZGlmeSB0aGlz IEdOVSBtYW51YWwu4oCdDQoNCg0KMiBPdmVydmlldw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQDQoNCiAgVGhlIGBkZW5vdGUtb3JnJyBwYWNrYWdlIGNvbnRhaW5zIGV4dHJhIGZlYXR1 cmVzIHRoYXQgYmV0dGVyIGludGVncmF0ZQ0KICBEZW5vdGUgd2l0aCBPcmcgbW9kZS4gVGhlc2Ug dXNlZCB0byBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgbWFpbg0KICBgZGVub3RlJyBwYWNr YWdlIGluIGEgZmlsZSBjYWxsZWQgYGRlbm90ZS1vcmctZXh0cmFzLmVsJywgYnV0IG5vdyBsaXZl DQogIGluIHRoaXMgc3RhbmRhbG9uZSBwYWNrYWdlIHRvIG1haW4gdGhpbmdzIGVhc2llciB0byBt YWludGFpbiBhbmQNCiAgdW5kZXJzdGFuZC4NCg0KICBXaXRoIGBkZW5vdGUtb3JnJywgdXNlcnMg aGF2ZSBPcmctc3BlY2lmaWMgZXh0ZW5zaW9ucyBzdWNoIGFzIGR5bmFtaWMNCiAgYmxvY2tzLCBs aW5rcyB0byBoZWFkaW5ncywgYW5kIHNwbGl0dGluZyBhbiBPcmcgc3VidHJlZSBpbnRvIGl0cyBv d24NCiAgc3RhbmRhbG9uZSBmaWxlLiBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGNvdmVyIHRoZSB0 ZWNobmljYWxpdGllcy4NCg0KDQozIFVzZSBPcmcgZHluYW1pYyBibG9ja3MNCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkA0KDQogIERlbm90ZSBjYW4gb3B0aW9uYWxseSBpbnRlZ3JhdGUgd2l0aCBPcmcgbW9kZeKA mXMg4oCcZHluYW1pYyBibG9ja3PigJ0NCiAgZmFjaWxpdHkuIFRoaXMgbWVhbnMgdGhhdCBpdCBj YW4gdXNlIHNwZWNpYWwgYmxvY2tzIHRoYXQgYXJlIGV2YWx1YXRlZA0KICB3aXRoIGBDLWMgQy14 IEMtdScgKGBvcmctZGJsb2NrLXVwZGF0ZScpIHRvIGdlbmVyYXRlIHRoZWlyIGNvbnRlbnRzLg0K ICBUaGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zIGRlc2NyaWJlIHRoZSB0eXBlcyBvZiBPcmcgZHlu YW1pYyBibG9ja3MNCiAgcHJvdmlkZWQgYnkgRGVub3RlLg0KDQogIOKAoiBbT3JnIGR5bmFtaWMg YmxvY2tzIHRvIGluc2VydCBsaW5rcyBvciBiYWNrbGlua3NdDQogIOKAoiBbT3JnIGR5bmFtaWMg YmxvY2sgdG8gaW5zZXJ0IGZpbGUgY29udGVudHNdDQoNCiAgQSBkeW5hbWljIGJsb2NrIGdldHMg aXRzIGNvbnRlbnRzIGJ5IGV2YWx1YXRpbmcgYSBmdW5jdGlvbiB0aGF0DQogIGNvcnJlc3BvbmRz IHRvIHRoZSB0eXBlIG9mIGJsb2NrLiBUaGUgYmxvY2sgdHlwZSBhbmQgaXRzIHBhcmFtZXRlcnMN CiAgYXJlIHN0YXRlZCBpbiB0aGUgb3BlbmluZyBgIytCRUdJTicgbGluZS4gVHlwaW5nIGBDLWMg Qy14IEMtdScNCiAgKGBvcmctZGJsb2NrLXVwZGF0ZScpIHdpdGggcG9pbnQgb24gdGhhdCBsaW5l IHJ1bnMgKG9yIHJlLXJ1bnMpIHRoZQ0KICBhc3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGggdGhlIGdp dmVuIHBhcmFtZXRlcnMgYW5kIHBvcHVsYXRlcyB0aGUNCiAgYmxvY2vigJlzIGNvbnRlbnRzIGFj Y29yZGluZ2x5Lg0KDQogIER5bmFtaWMgYmxvY2tzIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZv ciBtZXRhbm90ZSBlbnRyaWVzIHRoYXQNCiAgcmVmbGVjdCBvbiB0aGUgc3RhdHVzIG9mIGVhcmxp ZXIgbm90ZXMgKHJlYWQgdGhlIERlbm90ZSBtYW51YWzigJlzDQogIHNlY3Rpb24gYWJvdXQgd3Jp dGluZyBtZXRhbm90ZXMpLg0KDQogIFRoZSBPcmcgbWFudWFsIGRlc2NyaWJlcyB0aGUgdGVjaG5p Y2FsaXRpZXMgb2YgRHluYW1pYyBCbG9ja3MuDQogIEV2YWx1YXRlOg0KDQogIOKUjOKUgOKUgOKU gOKUgA0KICDilIIgKGluZm8gIihvcmcpIER5bmFtaWMgQmxvY2tzIikNCiAg4pSU4pSA4pSA4pSA 4pSADQoNCg0KW09yZyBkeW5hbWljIGJsb2NrcyB0byBpbnNlcnQgbGlua3Mgb3IgYmFja2xpbmtz XSBTZWUgc2VjdGlvbiAzLjENCg0KW09yZyBkeW5hbWljIGJsb2NrIHRvIGluc2VydCBmaWxlIGNv bnRlbnRzXSBTZWUgc2VjdGlvbiAzLjQNCg0KMy4xIE9yZyBkeW5hbWljIGJsb2NrcyB0byBpbnNl cnQgbGlua3MNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgA0KDQogIFRoZSBgZGVub3RlLWxpbmtzJyBibG9jayBjYW4gYmUgaW5zZXJ0ZWQg YXQgcG9pbnQgd2l0aCB0aGUgY29tbWFuZA0KICBgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWxp bmtzJyBvciBieSBtYW51YWxseSBpbmNsdWRpbmcgdGhlDQogIGZvbGxvd2luZyBpbiBhbiBPcmcg ZmlsZToNCg0KICDilIzilIDilIDilIDilIANCiAg4pSCICMrQkVHSU46IGRlbm90ZS1saW5rcyA6 cmVnZXhwICJZT1VSIFJFR0VYUCBIRVJFIiA6bm90LXJlZ2V4cCA6ZXhjbHVkZWQtZGlycy1yZWdl eHAgbmlsIDpzb3J0LWJ5LWNvbXBvbmVudCBuaWwgOnJldmVyc2Utc29ydCBuaWwgOmlkLW9ubHkg bmlsIDppbmNsdWRlLWRhdGUgbmlsDQogIOKUgiANCiAg4pSCICMrRU5EOg0KICDilJTilIDilIDi lIDilIANCg0KDQogIEFsbCB0aGUgcGFyYW1ldGVycyBleGNlcHQgZm9yIGA6cmVnZXhwJyBhcmUg b3B0aW9uYWwuDQoNCiAgVGhlIGBkZW5vdGUtbGlua3MnIGJsb2NrIGlzIGFsc28gcmVnaXN0ZXJl ZCBhcyBhbiBvcHRpb24gZm9yIHRoZQ0KICBjb21tYW5kIGBvcmctZHluYW1pYy1ibG9jay1pbnNl cnQtZGJsb2NrJy4NCg0KICBUeXBlIGBDLWMgQy14IEMtdScgKGBvcmctZGJsb2NrLXVwZGF0ZScp IHdpdGggcG9pbnQgb24gdGhlIGAjK0JFR0lOJw0KICBsaW5lIHRvIHVwZGF0ZSB0aGUgYmxvY2su DQoNCiAg4oCiIFRoZSBgOnJlZ2V4cCcgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeS4gSXRzIHZhbHVl IGlzIGEgc3RyaW5nIGFuZCBpdHMNCiAgICBiZWhhdmlvdXIgaXMgdGhlIHNhbWUgYXMgdGhhdCBv ZiB0aGUgc3RhbmRhcmQgYGRlbm90ZS1hZGQtbGlua3MnDQogICAgY29tbWFuZCAocGFydCBvZiB0 aGUgbWFpbiBgZGVub3RlJyBwYWNrYWdlKS4gQ29uY3JldGVseSwgaXQgcHJvZHVjZXMNCiAgICBh IHR5cG9ncmFwaGljIGxpc3Qgb2YgbGlua3MgdG8gZmlsZXMgbWF0Y2hpbmcgdGhlIGdpdmluZyBy ZWd1bGFyDQogICAgZXhwcmVzc2lvbi4gVGhlIHZhbHVlIG9mIHRoZSBgOnJlZ2V4cCcgcGFyYW1l dGVyIG1heSBhbHNvIGJlIG9mIHRoZQ0KICAgIGZvcm0gcmVhZCBieSB0aGUgYHJ4JyBtYWNybyAo TGlzcCBub3RhdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nKSwgYXMNCiAgICBleHBsYWluZWQgaW4g dGhlIEVtYWNzIExpc3AgUmVmZXJlbmNlIE1hbnVhbCAoZXZhbHVhdGUgdGhpcyBjb2RlIHRvDQog ICAgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbjogYChpbmZvICIoZWxpc3ApIFJ4IE5vdGF0aW9uIikn KS4gTm90ZSB0aGF0DQogICAgeW91IGRvIG5vdCBuZWVkIHRvIHdyaXRlIGFuIGFjdHVhbCByZWd1 bGFyIGV4cHJlc3Npb24gdG8gZ2V0DQogICAgbWVhbmluZ2Z1bCByZXN1bHRzOiBldmVuIHNvbWV0 aGluZyBsaWtlIGBfam91cm5hbCcgd2lsbCB3b3JrIHRvDQogICAgaW5jbHVkZSBhbGwgZmlsZXMg dGhhdCBoYXZlIGEgYGpvdXJuYWwnIGtleXdvcmQuDQoNCiAg4oCiIFRoZSBgOm5vdC1yZWdleHAn IHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSXQgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24NCiAgICB0 aGF0IGFwcGxpZXMgYWZ0ZXIgYDpyZWdleHAnIHRvIGZpbHRlciBvdXQgdGhlIG1hdGNoaW5nIGZp bGVzLiBbDQogICAgUGFydCBvZiAwLjEuMC1kZXYuIF0NCg0KICDigKIgVGhlIGA6ZXhjbHVkZWQt ZGlycy1yZWdleHAnIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSB3b3JkIG9yDQogICAgcmVn dWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhZ2FpbnN0IGRpcmVjdG9yeSBmaWxlcyBuYW1l cw0KICAgIHRvLWJlLWV4Y2x1ZGVkIGZyb20gdGhlIHJlc3VsdHMuIFRoaXMgaGFzIHRoZSBzYW1l IG1lYW5pbmcgYXMNCiAgICBzZXR0aW5nIHRoZSBgZGVub3RlLWV4Y2x1ZGVkLWRpcmVjdG9yaWVz LXJlZ2V4cCcgdXNlciBvcHRpb24gKHdoaWNoDQogICAgaXMgcGFydCBvZiB0aGUgbWFpbiBgZGVu b3RlJyBwYWNrYWdlKS4gVGhlIHVzZXIgb3B0aW9uIGhhcyBhIGdsb2JhbA0KICAgIGVmZmVjdCwg d2hpY2ggaXMgb3ZlcnJpZGRlbiBsb2NhbGx5IGluIHRoZSBkeW5hbWljIGJsb2NrLiBXaGVuIHRo ZQ0KICAgIHZhbHVlIG9mIGA6ZXhjbHVkZWQtZGlycy1yZWdleHAnIGlzIG5pbCAodGhlIGRlZmF1 bHQpLCB0aGUgdmFsdWUgb2YNCiAgICBgZGVub3RlLWV4Y2x1ZGVkLWRpcmVjdG9yaWVzLXJlZ2V4 cCcgaXMgdXNlZCAod2hpY2ggaXMgYWxzbyBuaWwgYnkNCiAgICBkZWZhdWx0LCBtZWFuaW5nIHRo YXQgYWxsIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCkuIFdoZW4gdGhlIHZhbHVlDQogICAgb2Yg YGV4Y2x1ZGVkLWRpcnMtcmVnZXhwJyBpcyBgdCcgb3Igc29tZSBvdGhlciBzeW1ib2wsIHRoZW4g dGhlDQogICAgYGRlbm90ZS1leGNsdWRlZC1kaXJlY3Rvcmllcy1yZWdleHAnIGlzIGlnbm9yZWQg YWx0b2dldGhlci4gVGhpcyBpcw0KICAgIHVzZWZ1bCBpbiB0aGUgc2NlbmFyaW8gd2hlcmUgdGhl IHVzZXIgb3B0aW9uIGlzIHNldCB0byBleGNsdWRlIHNvbWUNCiAgICBkaXJlY3RvcmllcyBidXQg dGhlIGR5bmFtaWMgYmxvY2tzIHdhbnRzIHRvIGxpZnQgdGhhdCByZXN0cmljdGlvbi4NCg0KICDi gKIgVGhlIGA6c29ydC1ieS1jb21wb25lbnQnIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSXQgc29y dHMgdGhlIGZpbGVzDQogICAgYnkgdGhlIGdpdmVuIERlbm90ZSBmaWxlIG5hbWUgY29tcG9uZW50 LiBUaGUgdmFsdWUgaXQgYWNjZXB0cyBpcyBhbg0KICAgIHVucXVvdGVkIHN5bWJvbCBhbW9uZyBg dGl0bGUnLCBga2V5d29yZHMnLCBgc2lnbmF0dXJlJywNCiAgICBgaWRlbnRpZmllcicuICBXaGVu IHVzaW5nIHRoZSBjb21tYW5kDQogICAgYGRlbm90ZS1vcmctZGJsb2NrLWluc2VydC1maWxlcycs IHRoaXMgcGFyYW1ldGVyIGlzIGF1dG9tYXRpY2FsbHkNCiAgICBpbnNlcnRlZCB0b2dldGhlciB3 aXRoIHRoZSAoYDpyZWdleHAnIHBhcmFtZXRlcikgYW5kIHRoZSB1c2VyIGlzDQogICAgcHJvbXB0 ZWQgZm9yIGEgZmlsZSBuYW1lIGNvbXBvbmVudC4NCg0KICDigKIgVGhlIGA6cmV2ZXJzZS1zb3J0 JyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIEl0IHJldmVyc2VzIHRoZSBvcmRlciBpbg0KICAgIHdo aWNoIGZpbGVzIGFwcGVhciBpbi4gVGhpcyBpcyBtZWFuaW5nZnVsIGV2ZW4gd2l0aG91dCB0aGUg cHJlc2VuY2UNCiAgICBvZiB0aGUgcGFyYW1ldGVyIGA6c29ydC1ieS1jb21wb25lbnQnLCB0aG91 Z2ggaXQgYWxzbyBjb21iaW5lcyB3aXRoDQogICAgaXQuDQoNCiAg4oCiIFRoZSBgOmlkLW9ubHkn IHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSXQgYWNjZXB0cyBhIGB0JyB2YWx1ZSwgaW4NCiAgICB3 aGljaCBjYXNlIGxpbmtzIGFyZSBpbnNlcnRlZCB3aXRob3V0IGEgZGVzY3JpcHRpb24gdGV4dCBi dXQgb25seQ0KICAgIHdpdGggdGhlIGlkZW50aWZpZXIgb2YgdGhlIGdpdmVuIGZpbGUuIFRoaXMg aGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMNCiAgICB3aXRoIHRoZSBgZGVub3RlLWxpbmsnIGNvbW1h bmQgYW5kIHJlbGF0ZWQgZmFjaWxpdGllcyAocmVhZCB0aGUNCiAgICBEZW5vdGUgbWFudWFs4oCZ cyBzZWN0aW9uIGFib3V0IGxpbmtpbmcgdG8gb3RoZXIgZmlsZXMgaW4gdGhlDQogICAgYGRlbm90 ZS1kaXJlY3RvcnknKS4NCg0KICDigKIgVGhlIGA6aW5jbHVkZS1kYXRlJyBwYXJhbWV0ZXIgY29u dHJvbHMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBkYXRlDQogICAgb2YgdGhlIGZpbGUgbmFtZSBh ZnRlciB0aGUgdGl0bGUuIFRoaXMgaXMgZG9uZSB3aGVuIGl0cyB2YWx1ZSBpcw0KICAgIGB0Jy4g QnkgZGVmYXVsdCAoYSBuaWwgdmFsdWUpLCBubyBkYXRlIGlzIHNob3duLg0KDQogIOKAoiBBbiBv cHRpb25hbCBgOmJsb2NrLW5hbWUnIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYSBz dHJpbmcNCiAgICB2YWx1ZSB0byBhZGQgYSBgIytuYW1lJyB0byB0aGUgcmVzdWx0cy4gVGhpcyBp cyB1c2VmdWwgZm9yIGZ1cnRoZXINCiAgICBwcm9jZXNzaW5nIHVzaW5nIE9yZyBmYWNpbGl0aWVz IChhIGZlYXR1cmUgdGhhdCBpcyBvdXRzaWRlIERlbm90ZeKAmXMNCiAgICBwdXJ2aWV3KS4NCg0K ICBJbiBzb21lIHdvcmtmbG93cywgdXNlcnMgbWF5IHdhbnQgdG8gaGF2ZSBhIHNlcGFyYXRlIGJs b2NrIHRvIHNlZSB3aGF0DQogIG90aGVyIGxpbmtzIHRoZXkgYXJlIG1pc3Npbmcgc2luY2UgdGhl eSBsYXN0IHVwZGF0ZWQgdGhlIGR5bmFtaWMNCiAgYmxvY2suIFdlIGNvdmVyIHRoYXQgY2FzZSBh cyB3ZWxsIChbVGhlIE9yZyBkeW5hbWljIGJsb2NrIHRvIGluc2VydA0KICBtaXNzaW5nIGxpbmtz IG9ubHldKS4NCg0KDQpbVGhlIE9yZyBkeW5hbWljIGJsb2NrIHRvIGluc2VydCBtaXNzaW5nIGxp bmtzIG9ubHldIFNlZSBzZWN0aW9uIDMuMg0KDQoNCjMuMiBUaGUgT3JnIGR5bmFtaWMgYmxvY2sg dG8gaW5zZXJ0IG1pc3NpbmcgbGlua3Mgb25seQ0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVGhlIGBkZW5vdGUtbWlzc2luZy1saW5rcycgYmxv Y2sgaXMgYXZhaWxhYmxlIHdpdGggdGhlIGNvbW1hbmQNCiAgYGRlbm90ZS1vcmctZGJsb2NrLWlu c2VydC1taXNzaW5nLWxpbmtzJy4gSXQgaXMgbGlrZSB0aGUNCiAgYWZvcmVtZW50aW9uZWQgYGRl bm90ZS1saW5rcycgYmxvY2ssIGV4Y2VwdCBpdCBvbmx5IGxpc3RzIGxpbmtzIHRvDQogIGZpbGVz IHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50IGJ1ZmZlciAoW09yZyBkeW5hbWlj IGJsb2Nrcw0KICB0byBpbnNlcnQgbGlua3NdKS4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBvdGhlcndp c2UgdGhlIHNhbWUgYW5kIGFyZSBhbGwNCiAgb3B0aW9uYWwgZXhjZXB0IGZvciBgOnJlZ2V4cCc6 DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAjK0JFR0lOOiBkZW5vdGUtbWlzc2luZy1saW5r cyA6cmVnZXhwICJZT1VSIFJFR0VYUCBIRVJFIiA6ZXhjbHVkZWQtZGlycy1yZWdleHAgbmlsIDpz b3J0LWJ5LWNvbXBvbmVudCBuaWwgOnJldmVyc2Utc29ydCBuaWwgOmlkLW9ubHkgbmlsIDppbmNs dWRlLWRhdGUgbmlsDQogIOKUgiANCiAg4pSCICMrRU5EOg0KICDilJTilIDilIDilIDilIANCg0K DQogIFRoZSBgZGVub3RlLW1pc3NpbmctbGlua3MnIGJsb2NrIGlzIGFsc28gcmVnaXN0ZXJlZCBh cyBhbiBvcHRpb24gZm9yDQogIHRoZSBjb21tYW5kIGBvcmctZHluYW1pYy1ibG9jay1pbnNlcnQt ZGJsb2NrJy4NCg0KICBSZW1lbWJlciB0byB0eXBlIGBDLWMgQy14IEMtdScgKGBvcmctZGJsb2Nr LXVwZGF0ZScpIHdpdGggcG9pbnQgb24gdGhlDQogIGAjK0JFR0lOJyBsaW5lIHRvIHVwZGF0ZSB0 aGUgYmxvY2suDQoNCg0KW09yZyBkeW5hbWljIGJsb2NrcyB0byBpbnNlcnQgbGlua3NdIFNlZSBz ZWN0aW9uIDMuMQ0KDQoNCjMuMyBUaGUgT3JnIGR5bmFtaWMgYmxvY2sgdG8gaW5zZXJ0IGJhY2ts aW5rcw0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgQXBhcnQgZnJvbSBsaW5rcyB0byBmaWxl cyBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgd2UgY2FuIGFsc28NCiAgcHJvZHVjZSBh IGxpc3Qgb2YgYmFja2xpbmtzIHRvIHRoZSBjdXJyZW50IGZpbGUuIFRoZSBkeW5hbWljIGJsb2Nr IGNhbg0KICBiZSBpbnNlcnRlZCBhdCBwb2ludCB3aXRoIHRoZSBjb21tYW5kDQogIGBkZW5vdGUt b3JnLWRibG9jay1pbnNlcnQtYmFja2xpbmtzJyBvciBieSBtYW51YWxseSB3cml0aW5nIHRoaXMg aW4gYW4NCiAgT3JnIGZpbGU6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAjK0JFR0lOOiBk ZW5vdGUtYmFja2xpbmtzIDpleGNsdWRlZC1kaXJzLXJlZ2V4cCBuaWwgOnNvcnQtYnktY29tcG9u ZW50IG5pbCA6cmV2ZXJzZS1zb3J0IG5pbCA6aWQtb25seSBuaWwgOnRoaXMtaGVhZGluZy1vbmx5 IG5pbCA6aW5jbHVkZS1kYXRlIG5pbA0KICDilIIgDQogIOKUgiAjK0VORDoNCiAg4pSU4pSA4pSA 4pSA4pSADQoNCg0KICBUaGUgYGRlbm90ZS1iYWNrbGlua3MnIGJsb2NrIGlzIGFsc28gcmVnaXN0 ZXJlZCBhcyBhbiBvcHRpb24gZm9yIHRoZQ0KICBjb21tYW5kIGBvcmctZHluYW1pYy1ibG9jay1p bnNlcnQtZGJsb2NrJy4NCg0KICBSZW1lbWJlciB0byB0eXBlIGBDLWMgQy14IEMtdScgKGBvcmct ZGJsb2NrLXVwZGF0ZScpIHdpdGggcG9pbnQgb24gdGhlDQogIGAjK0JFR0lOJyBsaW5lIHRvIHVw ZGF0ZSB0aGUgYmxvY2suDQoNCiAgVGhlIHBhcmFtZXRlcnMgcmVjb2duaXNlZCBieSB0aGlzIGR5 bmFtaWMgYmxvY2sgYXJlIGFsbW9zdCB0aGUgc2FtZSBhcw0KICB0aGF0IGZvciBpbnNlcnRpbmcg bGlua3MgKFtPcmcgZHluYW1pYyBibG9ja3MgdG8gaW5zZXJ0IGxpbmtzXSkuIFRoZXkNCiAgYXJl IGFsbCBvcHRpb25hbCBpbiB0aGlzIGNhc2UgYW5kIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBleHBl Y3RpbmcgYQ0KICByZWd1bGFyIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGZpbGVzIHRvIGxpbmsg dG8uDQoNCiAgQWRkaXRpb25hbGx5LCB0aGUgYGRlbm90ZS1iYWNrbGlua3MnIGJsb2NrIGFsc28g cmVjb2duaXNlcyB0aGUNCiAgYDp0aGlzLWhlYWRpbmctb25seScgcGFyYW1ldGVyLiBJdCBkZXRl cm1pbmVzIGlmIHRoZSBiYWNrbGlua3MgYXJlDQogIGFib3V0IHRoZSBmaWxlIG9yIHRoZSBoZWFk aW5nIHVuZGVyIHdoaWNoIHRoZSBkeW5hbWljIGJsb2NrIGlzDQogIGluc2VydGVkIChbQmFja2xp bmtzIGZvciBPcmcgaGVhZGluZ3NdKS4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcw0KICBvbWl0dGVk IG9yIG5pbCAodGhlIGRlZmF1bHQpLCB0aGVuIHRoZSBiYWNrbGlua3MgYXJlIGFib3V0IHRoZSB3 aG9sZQ0KICBmaWxlLCBidXQgaWYgdGhpcyBwYXJhbWV0ZXIgaGFzIGEgYHQnIHZhbHVlIHRoZW4g dGhlIGJhY2tsaW5rcyBhcmUNCiAgc3BlY2lmaWNhbGx5IGZvciB0aGUgaGVhZGluZyAoW0luc2Vy dCBsaW5rIHRvIGFuIE9yZyBmaWxlIHdpdGggYQ0KICBmdXJ0aGVyIHBvaW50ZXIgdG8gYSBoZWFk aW5nXSkuDQoNCg0KW09yZyBkeW5hbWljIGJsb2NrcyB0byBpbnNlcnQgbGlua3NdIFNlZSBzZWN0 aW9uIDMuMQ0KDQpbQmFja2xpbmtzIGZvciBPcmcgaGVhZGluZ3NdIFNlZSBzZWN0aW9uIDUuMQ0K DQpbSW5zZXJ0IGxpbmsgdG8gYW4gT3JnIGZpbGUgd2l0aCBhIGZ1cnRoZXIgcG9pbnRlciB0byBh IGhlYWRpbmddIFNlZQ0Kc2VjdGlvbiA1DQoNCg0KMy40IE9yZyBkeW5hbWljIGJsb2NrIHRvIGlu c2VydCBmaWxlIGNvbnRlbnRzDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBEZW5vdGUgY2Fu IG9wdGlvbmFsbHkgdXNlIE9yZ+KAmXMgZHluYW1pYyBibG9ja3MgZmFjaWxpdHkgdG8gcHJvZHVj ZSBhDQogIHNlY3Rpb24gdGhhdCBsaXN0cyBlbnRpcmUgZmlsZSBjb250ZW50cyAoW1VzZSBPcmcg ZHluYW1pYyBibG9ja3NdKS4NCiAgVGhpcyB3b3JrcyBieSBpbnN0cnVjdGluZyBPcmcgdG8gbWF0 Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gb2YgRGVub3RlDQogIGZpbGVzLCB0aGUgc2FtZSB3YXkg d2UgZG8gd2l0aCBEZW5vdGUgbGlua3MgKHJlYWQgdGhlIERlbm90ZSBtYW51YWzigJlzDQogIHNl Y3Rpb24gYWJvdXQgaW5zZXJ0aW5nIGxpbmtzIHRoYXQgbWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Np b24pLg0KDQogIFRoaXMgaXMgdXNlZnVsIHRvLCBmb3IgZXhhbXBsZSwgY29tcGlsZSBhIGR5bmFt aWNhbGx5IGNvbmNhdGVuYXRlZA0KICBsaXN0IG9mIHNjYXR0ZXJlZCB0aG91Z2h0cyBvbiBhIGdp dmVuIHRvcGljLCBsaWtlIGBeMjAyMy4qX2VtYWNzJyBmb3INCiAgYSBsb25nIGVudHJ5IHRoYXQg aW5jb3Jwb3JhdGVzIGFsbCB0aGUgbm90ZXMgd3JpdHRlbiBpbiAyMDIzIHdpdGggdGhlDQogIGtl eXdvcmQgYGVtYWNzJy4NCg0KICBUbyBwcm9kdWNlIHN1Y2ggYSBibG9jaywgY2FsbCB0aGUgY29t bWFuZA0KICBgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWZpbGVzJyBvciBtYW51YWxseSB3cml0 ZSB0aGUgZm9sbG93aW5nIGJsb2NrDQogIGluIGFuIE9yZyBmaWxlIGFuZCB0aGVuIHR5cGUgYEMt YyBDLXggQy11JyAoYG9yZy1kYmxvY2stdXBkYXRlJykgb24NCiAgdGhlIGAjK0JFR0lOJyBsaW5l IHRvIHJ1biBpdCAoZG8gaXQgYWdhaW4gdG8gcmVjYWxjdWxhdGUgdGhlIGJsb2NrKToNCg0KICDi lIzilIDilIDilIDilIANCiAg4pSCICMrQkVHSU46IGRlbm90ZS1maWxlcyA6cmVnZXhwICJZT1VS IFJFR0VYUCBIRVJFIiA6bm90LXJlZ2V4cCBuaWwgOnNvcnQtYnktY29tcG9uZW50IG5pbCA6cmV2 ZXJzZS1zb3J0IG5pbCA6bm8tZnJvbnQtbWF0dGVyIG5pbCA6ZmlsZS1zZXBhcmF0b3IgbmlsIDph ZGQtbGlua3MgbmlsDQogIOKUgiANCiAg4pSCICMrRU5EOg0KICDilJTilIDilIDilIDilIANCg0K DQogIEFsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBleGNlcHQgZm9yIGA6cmVnZXhwJy4NCg0K ICBUaGUgYGRlbm90ZS1maWxlcycgYmxvY2sgaXMgYWxzbyByZWdpc3RlcmVkIGFzIGFuIG9wdGlv biBmb3IgdGhlDQogIGNvbW1hbmQgYG9yZy1keW5hbWljLWJsb2NrLWluc2VydC1kYmxvY2snLg0K DQogIFJlbWVtYmVyIHRvIHR5cGUgYEMtYyBDLXggQy11JyAoYG9yZy1kYmxvY2stdXBkYXRlJykg d2l0aCBwb2ludCBvbiB0aGUNCiAgYCMrQkVHSU4nIGxpbmUgdG8gdXBkYXRlIHRoZSBibG9jay4N Cg0KICBUbyBmdWxseSBjb250cm9sIHRoZSBvdXRwdXQsIGluY2x1ZGUgdGhlc2UgYWRkaXRpb25h bCBvcHRpb25hbA0KICBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgZGVzY3JpYmVkIGZ1cnRoZXIgYmVs b3c6DQoNCiAg4oCiIFRoZSBgOnJlZ2V4cCcgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeS4gSXRzIHZh bHVlIGlzIGEgc3RyaW5nLA0KICAgIHJlcHJlc2VudGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0 byBtYXRjaCBEZW5vdGUgZmlsZSBuYW1lcy4gSXRzDQogICAgdmFsdWUgbWF5IGFsc28gYmUgYW4g YHJ4JyBleHByZXNzaW9uIGluc3RlYWQgb2YgYSBzdHJpbmcsIGFzIG5vdGVkDQogICAgaW4gdGhl IHByZXZpb3VzIHNlY3Rpb24gKFtPcmcgZHluYW1pYyBibG9ja3MgdG8gaW5zZXJ0IGxpbmtzIG9y DQogICAgYmFja2xpbmtzXSkuICBOb3RlIHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIHdyaXRlIGFu IGFjdHVhbCByZWd1bGFyDQogICAgZXhwcmVzc2lvbiB0byBnZXQgbWVhbmluZ2Z1bCByZXN1bHRz OiBldmVuIHNvbWV0aGluZyBsaWtlIGBfam91cm5hbCcNCiAgICB3aWxsIHdvcmsgdG8gaW5jbHVk ZSBhbGwgZmlsZXMgdGhhdCBoYXZlIGEgYGpvdXJuYWwnIGtleXdvcmQuDQoNCiAg4oCiIFRoZSBg Om5vdC1yZWdleHAnIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSXQgaXMgYSByZWd1bGFyIGV4cHJl c3Npb24NCiAgICB0aGF0IGFwcGxpZXMgYWZ0ZXIgYDpyZWdleHAnIHRvIGZpbHRlciBvdXQgdGhl IG1hdGNoaW5nIGZpbGVzLiBbDQogICAgUGFydCBvZiAwLjEuMC1kZXYuIF0NCg0KICDigKIgVGhl IGA6ZXhjbHVkZWQtZGlycy1yZWdleHAnIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSB3b3Jk IG9yDQogICAgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhZ2FpbnN0IGRpcmVjdG9y eSBmaWxlcyBuYW1lcw0KICAgIHRvLWJlLWV4Y2x1ZGVkIGZyb20gdGhlIHJlc3VsdHMuIFRoaXMg aGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMNCiAgICBzZXR0aW5nIHRoZSBgZGVub3RlLWV4Y2x1ZGVk LWRpcmVjdG9yaWVzLXJlZ2V4cCcgdXNlciBvcHRpb24gKHdoaWNoDQogICAgaXMgcGFydCBvZiB0 aGUgbWFpbiBgZGVub3RlJyBwYWNrYWdlKS4gVGhlIHVzZXIgb3B0aW9uIGhhcyBhIGdsb2JhbA0K ICAgIGVmZmVjdCwgd2hpY2ggaXMgb3ZlcnJpZGRlbiBsb2NhbGx5IGluIHRoZSBkeW5hbWljIGJs b2NrLiBXaGVuIHRoZQ0KICAgIHZhbHVlIG9mIGA6ZXhjbHVkZWQtZGlycy1yZWdleHAnIGlzIG5p bCAodGhlIGRlZmF1bHQpLCB0aGUgdmFsdWUgb2YNCiAgICBgZGVub3RlLWV4Y2x1ZGVkLWRpcmVj dG9yaWVzLXJlZ2V4cCcgaXMgdXNlZCAod2hpY2ggaXMgYWxzbyBuaWwgYnkNCiAgICBkZWZhdWx0 LCBtZWFuaW5nIHRoYXQgYWxsIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCkuIFdoZW4gdGhlIHZh bHVlDQogICAgb2YgYGV4Y2x1ZGVkLWRpcnMtcmVnZXhwJyBpcyBgdCcgb3Igc29tZSBvdGhlciBz eW1ib2wsIHRoZW4gdGhlDQogICAgYGRlbm90ZS1leGNsdWRlZC1kaXJlY3Rvcmllcy1yZWdleHAn IGlzIGlnbm9yZWQgYWx0b2dldGhlci4gVGhpcyBpcw0KICAgIHVzZWZ1bCBpbiB0aGUgc2NlbmFy aW8gd2hlcmUgdGhlIHVzZXIgb3B0aW9uIGlzIHNldCB0byBleGNsdWRlIHNvbWUNCiAgICBkaXJl Y3RvcmllcyBidXQgdGhlIGR5bmFtaWMgYmxvY2tzIHdhbnRzIHRvIGxpZnQgdGhhdCByZXN0cmlj dGlvbi4NCg0KICDigKIgVGhlIGA6c29ydC1ieS1jb21wb25lbnQnIHBhcmFtZXRlciBpcyBvcHRp b25hbC4gSXQgc29ydHMgdGhlIGZpbGVzDQogICAgYnkgdGhlIGdpdmVuIERlbm90ZSBmaWxlIG5h bWUgY29tcG9uZW50LiBUaGUgdmFsdWUgaXQgYWNjZXB0cyBpcyBhbg0KICAgIHVucXVvdGVkIHN5 bWJvbCBhbW9uZyBgdGl0bGUnLCBga2V5d29yZHMnLCBgc2lnbmF0dXJlJywNCiAgICBgaWRlbnRp ZmllcicuICBXaGVuIHVzaW5nIHRoZSBjb21tYW5kDQogICAgYGRlbm90ZS1vcmctZGJsb2NrLWlu c2VydC1maWxlcycsIHRoaXMgcGFyYW1ldGVyIGlzIGF1dG9tYXRpY2FsbHkNCiAgICBpbnNlcnRl ZCB0b2dldGhlciB3aXRoIHRoZSAoYDpyZWdleHAnIHBhcmFtZXRlcikgYW5kIHRoZSB1c2VyIGlz DQogICAgcHJvbXB0ZWQgZm9yIGEgZmlsZSBuYW1lIGNvbXBvbmVudC4NCg0KICDigKIgVGhlIGA6 cmV2ZXJzZS1zb3J0JyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIEl0IHJldmVyc2VzIHRoZSBvcmRl ciBpbg0KICAgIHdoaWNoIGZpbGVzIGFwcGVhciBpbi4gVGhpcyBpcyBtZWFuaW5nZnVsIGV2ZW4g d2l0aG91dCB0aGUgcHJlc2VuY2UNCiAgICBvZiB0aGUgcGFyYW1ldGVyIGA6c29ydC1ieS1jb21w b25lbnQnLCB0aG91Z2ggaXQgYWxzbyBjb21iaW5lcyB3aXRoDQogICAgaXQuDQoNCiAg4oCiIFRo ZSBgOmZpbGUtc2VwYXJhdG9yJyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIGl0IGlzIG9taXR0 ZWQsIHRoZW4NCiAgICBEZW5vdGUgd2lsbCB1c2Ugbm8gc2VwYXJhdG9yIGJldHdlZW4gdGhlIGZp bGVzIGl0IGluc2VydHMuIElmIHRoZQ0KICAgIHZhbHVlIGlzIGB0JyB0aGUgYGRlbm90ZS1vcmct ZGJsb2NrLWZpbGUtY29udGVudHMtc2VwYXJhdG9yJyBpcw0KICAgIGFwcGxpZWQgYXQgdGhlIGVu ZCBvZiBlYWNoIGZpbGU6IGl0IGludHJvZHVjZXMgc29tZSBlbXB0eSBsaW5lcyBhbmQNCiAgICBh IGhvcml6b250YWwgcnVsZSBiZXR3ZWVuIHRoZW0gdG8gdmlzdWFsbHkgZGlzdGluZ3Vpc2ggaW5k aXZpZHVhbA0KICAgIGZpbGVzLiBJZiB0aGUgYDpmaWxlLXNlcGFyYXRvcicgdmFsdWUgaXMgYSBz dHJpbmcsIGl0IGlzIHVzZWQgYXMgdGhlDQogICAgZmlsZSBzZXBhcmF0b3IgKGUuZy4gdXNlIGAi XG4iJyB0byBpbnNlcnQganVzdCBvbmUgZW1wdHkgbmV3IGxpbmUpLg0KDQogIOKAoiBUaGUgYDpu by1mcm9udC1tYXR0ZXInIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gV2hlbiBzZXQgdG8gYSBgdCcN CiAgICB2YWx1ZSwgRGVub3RlIHRyaWVzIHRvIHJlbW92ZSBmcm9udCBtYXR0ZXIgZnJvbSB0aGUg ZmlsZXMgaXQgaXMNCiAgICBpbnNlcnRpbmcgaW4gdGhlIGR5bmFtaWMgYmxvY2suIFRoZSB0ZWNo bmlxdWUgdXNlZCB0byBwZXJmb3JtIHRoaXMNCiAgICBvcGVyYXRpb24gaXMgYnkgcmVtb3Zpbmcg YWxsIGxpbmVzIGZyb20gdGhlIHRvcCBvZiB0aGUgZmlsZSB1bnRpbA0KICAgIHRoZSBmaXJzdCBl bXB0eSBsaW5lLiBUaGlzIHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgZnJvbnQgbWF0dGVyIHRoYXQN CiAgICBEZW5vdGUgYWRkcywgYnV0IGlzIG5vdCAxMDAlIHJlbGlhYmxlIHdpdGggYWxsIHNvcnRz IG9mIHVzZXItbGV2ZWwNCiAgICBtb2RpZmljYXRpb25zIGFuZCBlZGl0cyB0byB0aGUgZmlsZS4g V2hlbiB0aGUgYDpuby1mcm9udC1tYXR0ZXInIGlzDQogICAgc2V0IHRvIGEgbmF0dXJhbCBudW1i ZXIsIERlbm90ZSB3aWxsIG9taXQgdGhhdCBtYW55IGxpbmVzIGZyb20gdGhlDQogICAgdG9wIG9m IHRoZSBmaWxlLg0KDQogIOKAoiBUaGUgYDphZGQtbGlua3MnIHBhcmFtZXRlciBpcyBvcHRpb25h bC4gV2hlbiBpdCBpcyBzZXQgdG8gYSBgdCcNCiAgICB2YWx1ZSwgYWxsIGZpbGVzIGFyZSBpbnNl cnRlZCBhcyBhIHR5cG9ncmFwaGljIGxpc3QgYW5kIGFyZSBpbmRlbnRlZA0KICAgIGFjY29yZGlu Z2x5LiBUaGUgZmlyc3QgbGluZSBpbiBlYWNoIGxpc3QgaXRlbSBpcyBhIGxpbmsgdG8gdGhlIGZp bGUNCiAgICB3aG9zZSBjb250ZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGZvbGxvd2luZyBsaW5l cy4gV2hlbiB0aGUgdmFsdWUNCiAgICBpcyBgaWQtb25seScsIHRoZW4gbGlua3MgYXJlIGluc2Vy dGVkIHdpdGhvdXQgYSBkZXNjcmlwdGlvbiB0ZXh0IGJ1dA0KICAgIG9ubHkgd2l0aCB0aGUgaWRl bnRpZmllciBvZiB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBoYXMgdGhlIHNhbWUNCiAgICBtZWFuaW5n IGFzIHdpdGggdGhlIGBkZW5vdGUtbGluaycgY29tbWFuZCBhbmQgcmVsYXRlZCBmYWNpbGl0aWVz DQogICAgKHRob3NlIGFyZSBleHBsYWluZWQgYXQgbGVuZ3RoIGluIHRoZSBEZW5vdGUgbWFudWFs KS4gUmVtZW1iZXIgdGhhdA0KICAgIE9yZyBjYW4gZm9sZCB0aGUgaXRlbXMgaW4gYSB0eXBvZ3Jh cGhpYyBsaXN0IHRoZSBzYW1lIHdheSBpdCBkb2VzDQogICAgd2l0aCBoZWFkaW5ncy4gU28gZXZl biBsb25nIGZpbGVzIGNhbiBiZSBwcmVzZW50ZWQgaW4gdGhpcyBmb3JtYXQNCiAgICB3aXRob3V0 IG11Y2ggdHJvdWJsZS4NCg0KICDigKIgQW4gb3B0aW9uYWwgYDpibG9jay1uYW1lJyBwYXJhbWV0 ZXIgY2FuIGJlIHNwZWNpZmllZCB3aXRoIGEgc3RyaW5nDQogICAgdmFsdWUgdG8gYWRkIGEgYCMr bmFtZScgdG8gdGhlIHJlc3VsdHMuIFRoaXMgaXMgdXNlZnVsIGZvciBmdXJ0aGVyDQogICAgcHJv Y2Vzc2luZyB1c2luZyBPcmcgZmFjaWxpdGllcyAoYSBmZWF0dXJlIHRoYXQgaXMgb3V0c2lkZSBE ZW5vdGXigJlzDQogICAgcHVydmlldykuDQoNCg0KW1VzZSBPcmcgZHluYW1pYyBibG9ja3NdIFNl ZSBzZWN0aW9uIDMNCg0KW09yZyBkeW5hbWljIGJsb2NrcyB0byBpbnNlcnQgbGlua3Mgb3IgYmFj a2xpbmtzXSBTZWUgc2VjdGlvbiAzLjENCg0KDQozLjUgT3JnIGR5bmFtaWMgYmxvY2sgdG8gaW5z ZXJ0IE9yZyBmaWxlcyBhcyBoZWFkaW5ncw0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSADQoNCiAgWyBJTVBPUlRBTlQgTk9URTogVGhpcyBkeW5hbWljIGJsb2Nr IG9ubHkgd29ya3Mgd2l0aCBPcmcgZmlsZXMsDQogICAgYmVjYXVzZSBpdCBoYXMgdG8gYXNzdW1l IHRoZSBPcmcgbm90YXRpb24gaW4gb3JkZXIgdG8gaW5zZXJ0IGVhY2gNCiAgICBmaWxl4oCZcyBj b250ZW50cyBhcyBpdHMgb3duIGhlYWRpbmcuIF0NCg0KICBBcyBhIHZhcmlhdGlvbiBvZiB0aGUg cHJldmlvdXNseSBjb3ZlcmVkIGJsb2NrIHRoYXQgaW5zZXJ0cyBmaWxlDQogIGNvbnRlbnRzLCB3 ZSBoYXZlIHRoZSBgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWZpbGVzLWFzLWhlYWRpbmdzJw0K ICBjb21tYW5kIChbT3JnIGR5bmFtaWMgYmxvY2sgdG8gaW5zZXJ0IGZpbGUgY29udGVudHNdKS4g SXQgVHVybiB0aGUNCiAgYCMrdGl0bGUnIG9mIGVhY2ggZmlsZSBpbnRvIGEgdG9wLWxldmVsIGhl YWRpbmcuIFRoZW4gaXQgaW5jcmVtZW50cw0KICBhbGwgb3JpZ2luYWwgaGVhZGluZ3MgaW4gdGhl IGZpbGUgYnkgb25lLCBzbyB0aGF0IHRoZXkgYmVjb21lDQogIHN1YmhlYWRpbmdzIG9mIHdoYXQg b25jZSB3YXMgdGhlIGAjK3RpdGxlJy4gU2ltaWxhcmx5LCB0aGUNCiAgYCMrZmlsZXRhZ3MnIG9m IGVhY2ggZmlsZSBhcyB0YWdzIGZvciB0aGUgdG9wLWxldmVsIGhlYWRpbmcgKHdoYXQgd2FzDQog IHRoZSBgIyt0aXRsZScpLg0KDQogIEJlY2F1c2Ugb2YgaG93IGl0IGlzIG1lYW50IHRvIHdvcmss IHRoaXMgZHluYW1pYyBibG9jayBvbmx5IHdvcmtzIHdpdGgNCiAgT3JnIGZpbGVzLg0KDQogIElu IGl0cyBzaW1wbGVzdCBmb3JtLCB0aGlzIGR5bmFtaWMgYmxvY2sgbG9va3MgbGlrZSB0aGlzLCB3 aXRoDQogIGA6cmVnZXhwJyBhcyB0aGUgb25seSBtYW5kYXRvcnkgcGFyYW1ldGVyOg0KDQogIOKU jOKUgOKUgOKUgOKUgA0KICDilIIgIytCRUdJTjogZGVub3RlLWZpbGVzLWFzLWhlYWRpbmdzIDpy ZWdleHAgIllPVVIgUkVHRVhQIEhFUkUiDQogIOKUgiANCiAg4pSCICMrRU5EOg0KICDilJTilIDi lIDilIDilIANCg0KDQogIFRob3VnaCB3aGVuIHlvdSB1c2UgdGhlIGNvbW1hbmQNCiAgYGRlbm90 ZS1vcmctZGJsb2NrLWluc2VydC1maWxlcy1hcy1oZWFkaW5ncycgeW91IGdldCBhbGwgdGhlDQog IHBhcmFtZXRlcnMgaW5jbHVkZWQ6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAjK0JFR0lO OiBkZW5vdGUtZmlsZXMtYXMtaGVhZGluZ3MgOnJlZ2V4cCAiWU9VUiBSRUdFWFAgSEVSRSIgOm5v dC1yZWdleHAgbmlsIDpleGNsdWRlZC1kaXJzLXJlZ2V4cCBuaWwgOnNvcnQtYnktY29tcG9uZW50 IHRpdGxlIDpyZXZlcnNlLXNvcnQgbmlsIDphZGQtbGlua3MgdA0KICDilIIgDQogIOKUgiAjK0VO RDoNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0KICDigKIgVGhlIGA6cmVnZXhwJyBwYXJhbWV0ZXIg aXMgbWFuZGF0b3J5LiBJdHMgdmFsdWUgaXMgYSBzdHJpbmcsDQogICAgcmVwcmVzZW50aW5nIGEg cmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIERlbm90ZSBmaWxlIG5hbWVzLiBJdHMNCiAgICB2 YWx1ZSBtYXkgYWxzbyBiZSBhbiBgcngnIGV4cHJlc3Npb24gaW5zdGVhZCBvZiBhIHN0cmluZywg YXMgbm90ZWQNCiAgICBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiAoW09yZyBkeW5hbWljIGJsb2Nr cyB0byBpbnNlcnQgbGlua3Mgb3INCiAgICBiYWNrbGlua3NdKS4gIE5vdGUgdGhhdCB5b3UgZG8g bm90IG5lZWQgdG8gd3JpdGUgYW4gYWN0dWFsIHJlZ3VsYXINCiAgICBleHByZXNzaW9uIHRvIGdl dCBtZWFuaW5nZnVsIHJlc3VsdHM6IGV2ZW4gc29tZXRoaW5nIGxpa2UgYF9qb3VybmFsJw0KICAg IHdpbGwgd29yayB0byBpbmNsdWRlIGFsbCBmaWxlcyB0aGF0IGhhdmUgYSBgam91cm5hbCcga2V5 d29yZC4NCg0KICDigKIgVGhlIGA6bm90LXJlZ2V4cCcgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJ dCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbg0KICAgIHRoYXQgYXBwbGllcyBhZnRlciBgOnJlZ2V4 cCcgdG8gZmlsdGVyIG91dCB0aGUgbWF0Y2hpbmcgZmlsZXMuIFsNCiAgICBQYXJ0IG9mIDAuMS4w LWRldi4gXQ0KDQogIOKAoiBUaGUgYDpleGNsdWRlZC1kaXJzLXJlZ2V4cCcgaXMgYSBzdHJpbmcg dGhhdCBjb250YWlucyBhIHdvcmQgb3INCiAgICByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRj aGVzIGFnYWluc3QgZGlyZWN0b3J5IGZpbGVzIG5hbWVzDQogICAgdG8tYmUtZXhjbHVkZWQgZnJv bSB0aGUgcmVzdWx0cy4gVGhpcyBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcw0KICAgIHNldHRpbmcg dGhlIGBkZW5vdGUtZXhjbHVkZWQtZGlyZWN0b3JpZXMtcmVnZXhwJyB1c2VyIG9wdGlvbiAod2hp Y2gNCiAgICBpcyBwYXJ0IG9mIHRoZSBtYWluIGBkZW5vdGUnIHBhY2thZ2UpKS4gVGhlIHVzZXIg b3B0aW9uIGhhcyBhIGdsb2JhbA0KICAgIGVmZmVjdCwgd2hpY2ggaXMgb3ZlcnJpZGRlbiBsb2Nh bGx5IGluIHRoZSBkeW5hbWljIGJsb2NrLiBXaGVuIHRoZQ0KICAgIHZhbHVlIG9mIGA6ZXhjbHVk ZWQtZGlycy1yZWdleHAnIGlzIG5pbCAodGhlIGRlZmF1bHQpLCB0aGUgdmFsdWUgb2YNCiAgICBg ZGVub3RlLWV4Y2x1ZGVkLWRpcmVjdG9yaWVzLXJlZ2V4cCcgaXMgdXNlZCAod2hpY2ggaXMgYWxz byBuaWwgYnkNCiAgICBkZWZhdWx0LCBtZWFuaW5nIHRoYXQgYWxsIGRpcmVjdG9yaWVzIGFyZSBp bmNsdWRlZCkuIFdoZW4gdGhlIHZhbHVlDQogICAgb2YgYGV4Y2x1ZGVkLWRpcnMtcmVnZXhwJyBp cyBgdCcgb3Igc29tZSBvdGhlciBzeW1ib2wsIHRoZW4gdGhlDQogICAgYGRlbm90ZS1leGNsdWRl ZC1kaXJlY3Rvcmllcy1yZWdleHAnIGlzIGlnbm9yZWQgYWx0b2dldGhlci4gVGhpcyBpcw0KICAg IHVzZWZ1bCBpbiB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIHVzZXIgb3B0aW9uIGlzIHNldCB0byBl eGNsdWRlIHNvbWUNCiAgICBkaXJlY3RvcmllcyBidXQgdGhlIGR5bmFtaWMgYmxvY2tzIHdhbnRz IHRvIGxpZnQgdGhhdCByZXN0cmljdGlvbi4NCg0KICDigKIgVGhlIGA6c29ydC1ieS1jb21wb25l bnQnIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSXQgc29ydHMgdGhlIGZpbGVzDQogICAgYnkgdGhl IGdpdmVuIERlbm90ZSBmaWxlIG5hbWUgY29tcG9uZW50LiBUaGUgdmFsdWUgaXQgYWNjZXB0cyBp cyBhbg0KICAgIHVucXVvdGVkIHN5bWJvbCBhbW9uZyBgdGl0bGUnLCBga2V5d29yZHMnLCBgc2ln bmF0dXJlJywNCiAgICBgaWRlbnRpZmllcicuICBXaGVuIHVzaW5nIHRoZSBjb21tYW5kDQogICAg YGRlbm90ZS1vcmctZGJsb2NrLWluc2VydC1maWxlcycsIHRoaXMgcGFyYW1ldGVyIGlzIGF1dG9t YXRpY2FsbHkNCiAgICBpbnNlcnRlZCB0b2dldGhlciB3aXRoIHRoZSAoYDpyZWdleHAnIHBhcmFt ZXRlcikgYW5kIHRoZSB1c2VyIGlzDQogICAgcHJvbXB0ZWQgZm9yIGEgZmlsZSBuYW1lIGNvbXBv bmVudC4NCg0KICDigKIgVGhlIGA6cmV2ZXJzZS1zb3J0JyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwu IEl0IHJldmVyc2VzIHRoZSBvcmRlciBpbg0KICAgIHdoaWNoIGZpbGVzIGFwcGVhciBpbi4gVGhp cyBpcyBtZWFuaW5nZnVsIGV2ZW4gd2l0aG91dCB0aGUgcHJlc2VuY2UNCiAgICBvZiB0aGUgcGFy YW1ldGVyIGA6c29ydC1ieS1jb21wb25lbnQnLCB0aG91Z2ggaXQgYWxzbyBjb21iaW5lcyB3aXRo DQogICAgaXQuDQoNCiAg4oCiIFRoZSBgOmFkZC1saW5rcycgcGFyYW1ldGVyIGlzIG9wdGlvbmFs LiBXaGVuIGl0IGlzIHNldCB0byBhIGB0Jw0KICAgIHZhbHVlLCBhbGwgdGhlIHRvcC1sZXZlbCBo ZWFkaW5ncyAodGhvc2UgdGhhdCB3ZXJlIHRoZSBgIyt0aXRsZScgb2YNCiAgICBlYWNoIGZpbGUp IGFyZSBnZW5lcmF0ZWQgYXMgbGlua3MsIHBvaW50aW5nIHRvIHRoZSBvcmlnaW5hbCBmaWxlLg0K ICAgIFRoaXMgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgd2l0aCB0aGUgYGRlbm90ZS1saW5rJyBj b21tYW5kIGFuZA0KICAgIHJlbGF0ZWQgZmFjaWxpdGllcyAodGhvc2UgYXJlIGV4cGxhaW5lZCBh dCBsZW5ndGggaW4gdGhlIERlbm90ZQ0KICAgIG1hbnVhbCkuDQoNCiAg4oCiIEFuIG9wdGlvbmFs IGA6YmxvY2stbmFtZScgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCBhIHN0cmluZw0K ICAgIHZhbHVlIHRvIGFkZCBhIGAjK25hbWUnIHRvIHRoZSByZXN1bHRzLiBUaGlzIGlzIHVzZWZ1 bCBmb3IgZnVydGhlcg0KICAgIHByb2Nlc3NpbmcgdXNpbmcgT3JnIGZhY2lsaXRpZXMgKGEgZmVh dHVyZSB0aGF0IGlzIG91dHNpZGUgRGVub3Rl4oCZcw0KICAgIHB1cnZpZXcpLg0KDQoNCltPcmcg ZHluYW1pYyBibG9jayB0byBpbnNlcnQgZmlsZSBjb250ZW50c10gU2VlIHNlY3Rpb24gMy40DQoN CltPcmcgZHluYW1pYyBibG9ja3MgdG8gaW5zZXJ0IGxpbmtzIG9yIGJhY2tsaW5rc10gU2VlIHNl Y3Rpb24gMy4xDQoNCg0KNCBDcmVhdGUgYSBub3RlIGZyb20gdGhlIGN1cnJlbnQgT3JnIHN1YnRy ZWUNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEluIE9yZyBwYXJsYW5jZSwgYW4gZW50cnkgd2l0 aCBhbGwgaXRzIHN1YmhlYWRpbmdzIGFuZCBvdGhlciBjb250ZW50cw0KICBpcyBhIOKAnHN1YnRy ZWXigJ0uIERlbm90ZSBjYW4gb3BlcmF0ZSBvbiB0aGUgc3VidHJlZSB0byBleHRyYWN0IGl0IGZy b20NCiAgdGhlIGN1cnJlbnQgZmlsZSBhbmQgY3JlYXRlIGEgbmV3IGZpbGUgb3V0IG9mIGl0LiBP bmUgc3VjaCB3b3JrZmxvdyBpcw0KICB0byBjb2xsZWN0IHRob3VnaHRzIGluIGEgc2luZ2xlIGRv Y3VtZW50IGFuZCBwcm9kdWNlIGxvbmdlciBzdGFuZGFsb25lDQogIG5vdGVzIG91dCBvZiB0aGVt IHVwb24gcmV2aWV3Lg0KDQogIFRoZSBjb21tYW5kIGBkZW5vdGUtb3JnLWV4dHJhY3Qtb3JnLXN1 YnRyZWUnIGlzIHVzZWQgZm9yIHRoaXMNCiAgcHVycG9zZS4gSXQgY3JlYXRlcyBhIG5ldyBEZW5v dGUgbm90ZSB1c2luZyB0aGUgY3VycmVudCBPcmcgc3VidHJlZS4NCiAgSW4gZG9pbmcgc28sIGl0 IHJlbW92ZXMgdGhlIHN1YnRyZWUgZnJvbSBpdHMgY3VycmVudCBmaWxlIGFuZCBtb3Zlcw0KICBp dHMgY29udGVudHMgaW50byBhIG5ldyBmaWxlLiBUaGlzIGNvbW1hbmQgaXMgcGFydCBvZiB0aGUg b3B0aW9uYWwNCiAgYGRlbm90ZS1vcmcuZWwnIGV4dGVuc2lvbiwgd2hpY2ggaXMgcGFydCBvZiB0 aGUgYGRlbm90ZScgcGFja2FnZS4gSXQNCiAgaXMgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYXMgc29v biBhcyBvbmUgb2YgaXRzIGNvbW1hbmRzIGlzIGludm9rZWQuDQoNCiAgVGhlIHRleHQgb2YgdGhl IHN1YnRyZWXigJlzIGhlYWRpbmcgYmVjb21lcyB0aGUgYCMrdGl0bGUnIG9mIHRoZSBuZXcNCiAg bm90ZS4gRXZlcnl0aGluZyBlbHNlIGlzIGluc2VydGVkIGFzLWlzLg0KDQogIElmIHRoZSBoZWFk aW5nIGhhcyBhbnkgdGFncywgdGhleSBhcmUgdXNlZCBhcyB0aGUga2V5d29yZHMgb2YgdGhlIG5l dw0KICBub3RlLiBJZiB0aGUgT3JnIGZpbGUgaGFzIGFueSBgIytmaWxldGFncycgdGhleSBhcmUg dGFrZW4gYXMgd2VsbA0KICAoT3Jn4oCZcyBgIytmaWxldGFncycgYXJlIGluaGVyaXRlZCBieSB0 aGUgaGVhZGluZ3MpLiBJZiBub25lIG9mIHRoZXNlDQogIGFyZSB0cnVlIGFuZCB0aGUgdXNlciBv cHRpb24gYGRlbm90ZS1wcm9tcHRzJyBpbmNsdWRlcyBhbiBlbnRyeSBmb3INCiAga2V5d29yZHMs IHRoZW4gYGRlbm90ZS1vcmctZXh0cmFjdC1vcmctc3VidHJlZScgcHJvbXB0cyBmb3INCiAga2V5 d29yZHMuIEVsc2UgdGhlIG5ldyBub3RlIGhhcyBubyBrZXl3b3Jkcy4NCg0KICBJZiB0aGUgaGVh ZGluZyBoYXMgYSBgUFJPUEVSVElFUycgZHJhd2VyLCBpdCBpcyByZXRhaW5lZCBmb3IgZnVydGhl cg0KICByZXZpZXcuDQoNCiAgSWYgdGhlIGhlYWRpbmfigJlzIGBQUk9QRVJUSUVTJyBkcmF3ZXIg aW5jbHVkZXMgYSBgREFURScgb3IgYENSRUFURUQnDQogIHByb3BlcnR5LCBvciB0aGVyZSBleGlz dHMgYSBgQ0xPU0VEJyBzdGF0ZW1lbnQgd2l0aCBhIHRpbWVzdGFtcCB2YWx1ZSwNCiAgdXNlIHRo YXQgdG8gZGVyaXZlIHRoZSBkYXRlIChvciBkYXRlIGFuZCB0aW1lKSBvZiB0aGUgbmV3IG5vdGUg KGlmDQogIHRoZXJlIGlzIG9ubHkgYSBkYXRlLCB0aGUgdGltZSBpcyB0YWtlbiBhcyAwMDowMCku IElmIG1vcmUgdGhhbiBvbmUgb2YNCiAgdGhlc2UgaXMgcHJlc2VudCwgdGhlIG9yZGVyIG9mIHBy ZWZlcmVuY2UgaXMgYERBVEUnLCB0aGVuIGBDUkVBVEVEJywNCiAgdGhlbiBgQ0xPU0VEJy4gSWYg bm9uZSBvZiB0aGVzZSBpcyBwcmVzZW50LCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuDQogIElm IHRoZSBgZGVub3RlLXByb21wdHMnIGluY2x1ZGVzIGFuIGVudHJ5IGZvciBhIGRhdGUsIHRoZW4g dGhlIGNvbW1hbmQNCiAgcHJvbXB0cyBmb3IgYSBkYXRlIGF0IHRoaXMgc3RhZ2UgKGFsc28gc2Vl DQogIGBkZW5vdGUtZGF0ZS1wcm9tcHQtdXNlLW9yZy1yZWFkLWRhdGUnKS4NCg0KICBGb3IgdGhl IHJlc3QsIGl0IGNvbnN1bHRzIHRoZSB2YWx1ZSBvZiB0aGUgdXNlciBvcHRpb24NCiAgYGRlbm90 ZS1wcm9tcHRzJyBpbiB0aGUgZm9sbG93aW5nIHNjZW5hcmlhOg0KDQogIOKAoiBUbyBvcHRpb25h bGx5IHByb21wdCBmb3IgYSBzdWJkaXJlY3RvcnksIG90aGVyd2lzZSBpdCBwcm9kdWNlcyB0aGUN CiAgICBuZXcgbm90ZSBpbiB0aGUgYGRlbm90ZS1kaXJlY3RvcnknLg0KICDigKIgVG8gb3B0aW9u YWxseSBwcm9tcHQgZm9yIGEgZmlsZSBzaWduYXR1cmUsIG90aGVyd2lzZSB0byBub3QgdXNlIGFu eS4NCg0KICBUaGUgbmV3IG5vdGUgaXMgYW4gT3JnIGZpbGUgcmVnYXJkbGVzcyBvZiB0aGUgdXNl ciBvcHRpb24NCiAgYGRlbm90ZS1maWxlLXR5cGUnLg0KDQoNCjUgSW5zZXJ0IGxpbmsgdG8gYW4g T3JnIGZpbGUgd2l0aCBhIGZ1cnRoZXIgcG9pbnRlciB0byBhIGhlYWRpbmcNCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQogIEFzIHBhcnQgb2YgdGhlIG9wdGlvbmFsIGBkZW5vdGUtb3JnLmVsJyBl eHRlbnNpb24sIHRoZSBjb21tYW5kDQogIGBkZW5vdGUtb3JnLWxpbmstdG8taGVhZGluZycgcHJv bXB0cyBmb3IgYSBsaW5rIHRvIGFuIE9yZyBmaWxlIGFuZA0KICB0aGVuIGFza3MgZm9yIGEgaGVh ZGluZyB0aGVyZWluLCB1c2luZyBtaW5pYnVmZmVyIGNvbXBsZXRpb24uIE9uY2UgdGhlDQogIHVz ZXIgcHJvdmlkZXMgaW5wdXQgYXQgdGhlIHR3byBwcm9tcHRzLCB0aGUgY29tbWFuZCBpbnNlcnRz IGEgbGluayBhdA0KICBwb2ludCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBwYXR0ZXJuOg0KICBg W1tkZW5vdGU6SURFTlRJRklFUjo6I09SRy1IRUFESU5HLUNVU1RPTS1JRF1dW0Rlc2NyaXB0aW9u OjpIZWFkaW5nDQogIHRleHRdXScuDQoNCiAgQmVjYXVzZSBvbmx5IE9yZyBmaWxlcyBjYW4gaGF2 ZSBsaW5rcyB0byBpbmRpdmlkdWFsIGhlYWRpbmdzLCB0aGUNCiAgY29tbWFuZCBgZGVub3RlLW9y Zy1saW5rLXRvLWhlYWRpbmcnIHByb21wdHMgb25seSBmb3IgT3JnIGZpbGVzDQogIChpLmUuIGZp bGVzIHdoaWNoIGluY2x1ZGUgdGhlIGAub3JnJyBleHRlbnNpb24pLiBSZW1lbWJlciB0aGF0IERl bm90ZQ0KICB3b3JrcyB3aXRoIG1hbnkgZmlsZSB0eXBlcyAocmVhZCB0aGUgRGVub3RlIG1hbnVh bOKAmXMgc2VjdGlvbiBhYm91dCB0aGUNCiAgZmlsZS1uYW1pbmcgc2NoZW1lKS4NCg0KICBUaGlz IGZlYXR1cmUgaXMgc2ltaWxhciB0byB0aGUgY29uY2VwdCBvZiB0aGUgdXNlciBvcHRpb24NCiAg YGRlbm90ZS1vcmctc3RvcmUtbGluay10by1oZWFkaW5nJyAod2hpY2ggaXMgcGFydCBvZiB0aGUg bWFpbiBgZGVub3RlJw0KICBwYWNrYWdlKS4gSXQgaXMsIGhvd2V2ZXIsIGludGVyYWN0aXZlIGFu ZCBkaWZmZXJzIGluIHRoZQ0KICBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgYWN0aW9uLiBXaXRoIHRo YXQgdXNlciBvcHRpb24sIHRoZSBjb21tYW5kDQogIGBvcmctc3RvcmUtbGluaycgd2lsbCBnZW5l cmF0ZSBhIGBDVVNUT01fSUQnIGZvciB0aGUgY3VycmVudCBoZWFkaW5nDQogIChvciBjYXB0dXJl IHRoZSB2YWx1ZSBvZiBvbmUgYXMtaXMpLCBnaXZpbmcgdGhlIHVzZXIgdGhlIG9wdGlvbiB0bw0K ICB0aGVuIGNhbGwgYG9yZy1pbnNlcnQtbGluaycgd2hlcmV2ZXIgdGhleSBzZWUgZml0LiBCeSBj b250cmFzdCwgdGhlDQogIGNvbW1hbmQgYGRlbm90ZS1vcmctbGluay10by1oZWFkaW5nJyBwcm9t cHRzIGZvciBhIGZpbGUsIHRoZW4gYQ0KICBoZWFkaW5nLCBhbmQgaW5zZXJ0cyB0aGUgbGluayBh dCBwb2ludC4NCg0KICBKdXN0IGFzIHdpdGggZmlsZXMsIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cg YmFja2xpbmtzIGZvciB0aGUgZ2l2ZW4NCiAgaGVhZGluZyAoW0JhY2tsaW5rcyBmb3IgT3JnIGhl YWRpbmdzXSkuDQoNCg0KW0JhY2tsaW5rcyBmb3IgT3JnIGhlYWRpbmdzXSBTZWUgc2VjdGlvbiA1 LjENCg0KNS4xIEJhY2tsaW5rcyBmb3IgT3JnIGhlYWRpbmdzDQrilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBUaGUgb3B0aW9uYWwgYGRlbm90ZS1vcmcuZWwnIGNhbiBnZW5l cmF0ZSBEZW5vdGUgbGlua3MgdG8gaW5kaXZpZHVhbA0KICBoZWFkaW5ncyAoW0luc2VydCBsaW5r IHRvIGFuIE9yZyBmaWxlIHdpdGggYSBmdXJ0aGVyIHBvaW50ZXIgdG8gYQ0KICBoZWFkaW5nXSku ICBJdCBpcyB0aGVuIHBvc3NpYmxlIHRvIHByb2R1Y2UgYSBjb3JyZXNwb25kaW5nIGJhY2tsaW5r cw0KICBidWZmZXIgd2l0aCB0aGUgY29tbWFuZCBgZGVub3RlLW9yZy1iYWNrbGlua3MtZm9yLWhl YWRpbmcnLiBUaGUNCiAgcmVzdWx0aW5nIGJ1ZmZlciBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyB0 aGUgc3RhbmRhcmQgYmFja2xpbmtzIGJ1ZmZlcg0KICB3ZSBwcm92aWRlIChyZWFkIHRoZSBEZW5v dGUgbWFudWFs4oCZcyBzZWN0aW9uIGFib3V0IHRoZSBiYWNrbGlua3MNCiAgYnVmZmVyKS4gIEFu IE9yZyBkeW5hbWljIGJsb2NrIHdpdGggYmFja2xpbmtzIHRvIHRoZSBjdXJyZW50IGhlYWRpbmcN CiAgaXMgYWxzbyBhbiBvcHRpb24gKFtPcmcgZHluYW1pYyBibG9ja3MgdG8gaW5zZXJ0IGxpbmtz IG9yIGJhY2tsaW5rc10pLg0KDQoNCltJbnNlcnQgbGluayB0byBhbiBPcmcgZmlsZSB3aXRoIGEg ZnVydGhlciBwb2ludGVyIHRvIGEgaGVhZGluZ10gU2VlDQpzZWN0aW9uIDUNCg0KW09yZyBkeW5h bWljIGJsb2NrcyB0byBpbnNlcnQgbGlua3Mgb3IgYmFja2xpbmtzXSBTZWUgc2VjdGlvbiAzLjEN Cg0KDQo2IENvbnZlcnQgYGRlbm90ZTonIGxpbmtzIHRvIGBmaWxlOicgbGlua3MgaW4gT3JnIGFu ZCB2aWNlIHZlcnNhDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBTb21ldGltZXMgdGhlIHVz ZXIgbmVlZHMgdG8gdHJhbnNsYXRlIGFsbCBgZGVub3RlOicgbGluayB0eXBlcyB0bw0KICB0aGVp ciBgZmlsZTonIGVxdWl2YWxlbnQuIFRoaXMgbWF5IGJlIGJlY2F1c2Ugc29tZSBvdGhlciB0b29s IGRvZXMgbm90DQogIHJlY29nbmlzZSBgZGVub3RlOicgbGlua3MgKG9yIG90aGVyIGN1c3RvbSBs aW5rcyB0eXBlc+KAlHdoaWNoIGFyZSBhDQogIHN0YW5kYXJkIGZlYXR1cmUgb2YgT3JnLCBieSB0 aGUgd2F5KS4gVGhlIHVzZXIgdGh1cyBuZWVkcyB0byAoaSkNCiAgZWl0aGVyIG1ha2UgYSBjb3B5 IG9mIHRoZWlyIERlbm90ZSBub3RlIG9yIGVkaXQgdGhlIGV4aXN0aW5nIG9uZSwgYW5kDQogIChp aSkgY29udmVydCBhbGwgbGlua3MgdG8gdGhlIGdlbmVyaWMgYGZpbGU6JyBsaW5rIHR5cGUgdGhh dA0KICBleHRlcm5hbC9vdGhlciBwcm9ncmFtcyB1bmRlcnN0YW5kLg0KDQogIFRoZSBvcHRpb25h bCBleHRlbnNpb24gYGRlbm90ZS1vcmcuZWwnIGNvbnRhaW5zIHR3byBjb21tYW5kcyB0aGF0IGFy ZQ0KICByZWxldmFudCBmb3IgdGhpcyB1c2UtY2FzZToNCg0KICBDb252ZXJ0IGBkZW5vdGU6JyBs aW5rcyB0byBgZmlsZTonIGxpbmtzDQogICAgICAgIFRoZSBjb21tYW5kIGBkZW5vdGUtb3JnLWNv bnZlcnQtbGlua3MtdG8tZmlsZS10eXBlJyBnb2VzIHRocm91Z2gNCiAgICAgICAgdGhlIGJ1ZmZl ciB0byBmaW5kIGFsbCBgZGVub3RlOicgbGlua3MuIEl0IGdldHMgdGhlIGlkZW50aWZpZXINCiAg ICAgICAgb2YgdGhlIGxpbmsgYW5kIHJlc29sdmVzIGl0IHRvIHRoZSBhY3R1YWwgZmlsZSBzeXN0 ZW0gcGF0aC4gSXQNCiAgICAgICAgdGhlbiByZXBsYWNlcyB0aGUgbWF0Y2ggc28gdGhhdCB0aGUg bGluayBpcyB3cml0dGVuIHdpdGggdGhlDQogICAgICAgIGBmaWxlOicgdHlwZSBhbmQgdGhlbiB0 aGUgZmlsZSBzeXN0ZW0gcGF0aC4gVGhlIG9wdGlvbmFsIHNlYXJjaA0KICAgICAgICB0ZXJtcyBh bmQvb3IgbGluayBkZXNjcmlwdGlvbiBhcmUgcHJlc2VydmVkIChbSW5zZXJ0IGxpbmsgdG8gYW4N CiAgICAgICAgT3JnIGZpbGUgd2l0aCBhIGZ1cnRoZXIgcG9pbnRlciB0byBhIGhlYWRpbmddKS4N Cg0KICBDb252ZXJ0IGBmaWxlOicgbGlua3MgdG8gYGRlbm90ZTonIGxpbmtzDQogICAgICAgIFRo ZSBjb21tYW5kIGBkZW5vdGUtb3JnLWNvbnZlcnQtbGlua3MtdG8tZGVub3RlLXR5cGUnIGJlaGF2 ZXMNCiAgICAgICAgbGlrZSB0aGUgb25lIGFib3ZlLiBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IGl0 IGZpbmRzIHRoZSBmaWxlDQogICAgICAgIHN5c3RlbSBwYXRoIGFuZCBjb252ZXJ0cyBpdCBpbnRv IGl0cyBpZGVudGlmaWVyLg0KDQoNCltJbnNlcnQgbGluayB0byBhbiBPcmcgZmlsZSB3aXRoIGEg ZnVydGhlciBwb2ludGVyIHRvIGEgaGVhZGluZ10gU2VlDQpzZWN0aW9uIDUNCg0KDQo3IEluc3Rh bGxhdGlvbg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCg0K DQoNCjcuMSBHTlUgRUxQQSBwYWNrYWdlDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBUaGUgcGFja2FnZSBpcyBhdmFpbGFi bGUgYXMgYGRlbm90ZS1vcmcnLiAgU2ltcGx5IGRvOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDi lIIgTS14IHBhY2thZ2UtcmVmcmVzaC1jb250ZW50cw0KICDilIIgTS14IHBhY2thZ2UtaW5zdGFs bA0KICDilJTilIDilIDilIDilIANCg0KDQogIEFuZCBzZWFyY2ggZm9yIGl0Lg0KDQogIEdOVSBF TFBBIHByb3ZpZGVzIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2UuICBUaG9zZSB3aG8gcHJlZmVy IHRvDQogIGZvbGxvdyB0aGUgZGV2ZWxvcG1lbnQgcHJvY2VzcyBpbiBvcmRlciB0byByZXBvcnQg YnVncyBvciBzdWdnZXN0DQogIGNoYW5nZXMsIGNhbiB1c2UgdGhlIHZlcnNpb24gb2YgdGhlIHBh Y2thZ2UgZnJvbSB0aGUgR05VLWRldmVsIEVMUEENCiAgYXJjaGl2ZS4gIFJlYWQ6DQogIDxodHRw czovL3Byb3Rlc2lsYW9zLmNvbS9jb2RlbG9nLzIwMjItMDUtMTMtZW1hY3MtZWxwYS1kZXZlbC8+ Lg0KDQoNCjcuMiBNYW51YWwgaW5zdGFsbGF0aW9uDQrilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBBc3N1bWlu ZyB5b3VyIEVtYWNzIGZpbGVzIGFyZSBmb3VuZCBpbiBgfi8uZW1hY3MuZC8nLCBleGVjdXRlIHRo ZQ0KICBmb2xsb3dpbmcgY29tbWFuZHMgaW4gYSBzaGVsbCBwcm9tcHQ6DQoNCiAg4pSM4pSA4pSA 4pSA4pSADQogIOKUgiBjZCB+Ly5lbWFjcy5kDQogIOKUgiANCiAg4pSCICMgQ3JlYXRlIGEgZGly ZWN0b3J5IGZvciBtYW51YWxseS1pbnN0YWxsZWQgcGFja2FnZXMNCiAg4pSCIG1rZGlyIG1hbnVh bC1wYWNrYWdlcw0KICDilIIgDQogIOKUgiAjIEdvIHRvIHRoZSBuZXcgZGlyZWN0b3J5DQogIOKU giBjZCBtYW51YWwtcGFja2FnZXMNCiAg4pSCIA0KICDilIIgIyBDbG9uZSB0aGlzIHJlcG8sIG5h bWluZyBpdCAiZGVub3RlLW9yZyINCiAg4pSCIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20v cHJvdGVzaWxhb3MvZGVub3RlLW9yZyBkZW5vdGUtb3JnDQogIOKUlOKUgOKUgOKUgOKUgA0KDQog IEZpbmFsbHksIGluIHlvdXIgYGluaXQuZWwnIChvciBlcXVpdmFsZW50KSBldmFsdWF0ZSB0aGlz Og0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgOzsgTWFrZSBFbGlzcCBmaWxlcyBpbiB0aGF0 IGRpcmVjdG9yeSBhdmFpbGFibGUgdG8gdGhlIHVzZXIuDQogIOKUgiAoYWRkLXRvLWxpc3QgJ2xv YWQtcGF0aCAifi8uZW1hY3MuZC9tYW51YWwtcGFja2FnZXMvZGVub3RlLW9yZyIpDQogIOKUlOKU gOKUgOKUgOKUgA0KDQogIEV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gc2V0IHVwIHRoZSBwYWNr YWdlLg0KDQoNCjggU2FtcGxlIGNvbmZpZ3VyYXRpb24NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIOKUjOKUgOKU gOKUgOKUgA0KICDilIIgKHVzZS1wYWNrYWdlIGRlbm90ZS1vcmcNCiAg4pSCICAgOmVuc3VyZSB0 DQogIOKUgiAgIDpjb21tYW5kDQogIOKUgiAgIDs7IEkgbGlzdCB0aGUgY29tbWFuZHMgaGVyZSBz byB0aGF0IHlvdSBjYW4gZGlzY292ZXIgdGhlbSBtb3JlDQogIOKUgiAgIDs7IGVhc2lseS4gIFlv dSBtaWdodCB3YW50IHRvIGJpbmQgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9uZXMgdG8NCiAg 4pSCICAgOzsgdGhlIGBvcmctbW9kZS1tYXAnLg0KICDilIIgICAoIGRlbm90ZS1vcmctbGluay10 by1oZWFkaW5nDQogIOKUgiAgICAgZGVub3RlLW9yZy1iYWNrbGlua3MtZm9yLWhlYWRpbmcNCiAg 4pSCIA0KICDilIIgICAgIGRlbm90ZS1vcmctZXh0cmFjdC1vcmctc3VidHJlZQ0KICDilIIgDQog IOKUgiAgICAgZGVub3RlLW9yZy1jb252ZXJ0LWxpbmtzLXRvLWZpbGUtdHlwZQ0KICDilIIgICAg IGRlbm90ZS1vcmctY29udmVydC1saW5rcy10by1kZW5vdGUtdHlwZQ0KICDilIIgDQogIOKUgiAg ICAgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWZpbGVzDQogIOKUgiAgICAgZGVub3RlLW9yZy1k YmxvY2staW5zZXJ0LWxpbmtzDQogIOKUgiAgICAgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWJh Y2tsaW5rcw0KICDilIIgICAgIGRlbm90ZS1vcmctZGJsb2NrLWluc2VydC1taXNzaW5nLWxpbmtz DQogIOKUgiAgICAgZGVub3RlLW9yZy1kYmxvY2staW5zZXJ0LWZpbGVzLWFzLWhlYWRpbmdzKSkN CiAg4pSU4pSA4pSA4pSA4pSADQoNCg0KOSBBY2tub3dsZWRnZW1lbnRzDQrilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBEZW5vdGUgT3Jn IGlzIG1lYW50IHRvIGJlIGEgY29sbGVjdGl2ZSBlZmZvcnQuICBFdmVyeSBiaXQgb2YgaGVscA0K ICBtYXR0ZXJzLg0KDQogIEF1dGhvci9tYWludGFpbmVyDQogICAgICAgIFByb3Rlc2lsYW9zIFN0 YXZyb3UuDQoNCg0KMTAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlDQrilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KDQoxMSBJbmRpY2VzDQrilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZANCg0KMTEuMSBGdW5jdGlvbiBpbmRleA0K4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCg0KMTEu MiBWYXJpYWJsZSBpbmRleA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSADQoNCg0KMTEuMyBDb25jZXB0IGluZGV4DQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg==