REDROOM
PHP 8.2.31
Path:
Logout
Edit File
Size: 164.91 KB
Close
//usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo
Text
Base64
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dGlvbiBvbmx5KQoADQptYWxsb2M6ICVzOiVkOiBhc3NlcnRpb24gYm90Y2hlZA0KACAgKHdkOiAlcykAIChjb3JlIGR1bXBlZCkAIGxpbmUgACQlczogY2Fubm90IGFzc2lnbiBpbiB0aGlzIHdheQAlYyVjOiBpbnZhbGlkIG9wdGlvbgAlZDogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6ICVzACVzIGNhbiBiZSBpbnZva2VkIHZpYSAAJXMgaGFzIG51bGwgZXhwb3J0c3RyACVzIGlzICVzCgAlcyBpcyBhIGZ1bmN0aW9uCgAlcyBpcyBhIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGEgc2hlbGwga2V5d29yZAoAJXMgaXMgYSBzcGVjaWFsIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGFsaWFzZWQgdG8gYCVzJwoAJXMgaXMgaGFzaGVkICglcykKACVzIGlzIG5vdCBib3VuZCB0byBhbnkga2V5cy4KACVzIG91dCBvZiByYW5nZQAlcyVzJXM6ICVzIChlcnJvciB0b2tlbiBpcyAiJXMiKQAlczogJXMAJXM6ICVzIG91dCBvZiByYW5nZQAlczogJXM6IGJhZCBpbnRlcnByZXRlcgAlczogJXM6IGNhbm5vdCBvcGVuIGFzIEZJTEUAJXM6ICVzOiBjb21wYXRpYmlsaXR5IHZhbHVlIG91dCBvZiByYW5nZQAlczogJXM6IGludmFsaWQgdmFsdWUgZm9yIHRyYWNlIGZpbGUgZGVzY3JpcHRvcgAlczogJXM6IG11c3QgdXNlIHN1YnNjcmlwdCB3aGVuIGFzc2lnbmluZyBhc3NvY2lhdGl2ZSBhcnJheQAlczogJXM6JWQ6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMAJXM6ICVzOiVkOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogSXMgYSBkaXJlY3RvcnkAJXM6IGFtYmlndW91cyBqb2Igc3BlYwAlczogYW1iaWd1b3VzIHJlZGlyZWN0ACVzOiBhcmd1bWVudHMgbXVzdCBiZSBwcm9jZXNzIG9yIGpvYiBJRHMAJXM6IGFzc2lnbmluZyBpbnRlZ2VyIHRvIG5hbWUgcmVmZXJlbmNlACVzOiBiYWQgbmV0d29yayBwYXRoIHNwZWNpZmljYXRpb24AJXM6IGJhZCBzdWJzdGl0dXRpb24AJXM6IGJpbmFyeSBvcGVyYXRvciBleHBlY3RlZAAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcwAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyAoJWx1IGJ5dGVzIGFsbG9jYXRlZCkAJXM6IGNhbm5vdCBhc3NpZ24gZmQgdG8gdmFyaWFibGUAJXM6IGNhbm5vdCBhc3NpZ24gbGlzdCB0byBhcnJheSBtZW1iZXIAJXM6IGNhbm5vdCBhc3NpZ24gdG8gbm9uLW51bWVyaWMgaW5kZXgAJXM6IGNhbm5vdCBjb252ZXJ0IGFzc29jaWF0aXZlIHRvIGluZGV4ZWQgYXJyYXkAJXM6IGNhbm5vdCBjb252ZXJ0IGluZGV4ZWQgdG8gYXNzb2NpYXRpdmUgYXJyYXkAJXM6IGNhbm5vdCBjcmVhdGU6ICVzACVzOiBjYW5ub3QgZGVsZXRlOiAlcwAlczogY2Fubm90IGRlc3Ryb3kgYXJyYXkgdmFyaWFibGVzIGluIHRoaXMgd2F5ACVzOiBjYW5ub3QgZXhlY3V0ZSBiaW5hcnkgZmlsZQAlczogY2Fubm90IGV4ZWN1dGUgYmluYXJ5IGZpbGU6ICVzACVzOiBjYW5ub3QgZXhlY3V0ZTogJXMAJXM6IGNhbm5vdCBleHBvcnQAJXM6IGNhbm5vdCBnZXQgbGltaXQ6ICVzACVzOiBjYW5ub3QgbW9kaWZ5IGxpbWl0OiAlcwAlczogY2Fubm90IG9wZW4gdGVtcCBmaWxlOiAlcwAlczogY2Fubm90IG9wZW46ICVzACVzOiBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUAJXM6IGNhbm5vdCByZWFkOiAlcwAlczogY2Fubm90IHVuc2V0ACVzOiBjYW5ub3QgdW5zZXQ6IHJlYWRvbmx5ICVzACVzOiBjaXJjdWxhciBuYW1lIHJlZmVyZW5jZQAlczogY29tbWFuZCBub3QgZm91bmQAJXM6IGVycm9yIHJldHJpZXZpbmcgY3VycmVudCBkaXJlY3Rvcnk6ICVzOiAlcwoAJXM6IGV4cHJlc3Npb24gZXJyb3IKACVzOiBmaWxlIGlzIHRvbyBsYXJnZQAlczogZmlsZSBub3QgZm91bmQAJXM6IGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBub3QgYCInACVzOiBoYXNoIHRhYmxlIGVtcHR5CgAlczogaGlzdG9yeSBleHBhbnNpb24gZmFpbGVkACVzOiBob3N0IHVua25vd24AJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjCgAlczogaW5saWIgZmFpbGVkACVzOiBpbnRlZ2VyIGV4cHJlc3Npb24gZXhwZWN0ZWQAJXM6IGludmFsaWQgYWN0aW9uIG5hbWUAJXM6IGludmFsaWQgYXJndW1lbnQAJXM6IGludmFsaWQgYXJyYXkgb3JpZ2luACVzOiBpbnZhbGlkIGFzc29jaWF0aXZlIGFycmF5IGtleQAlczogaW52YWxpZCBjYWxsYmFjayBxdWFudHVtACVzOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIGluZGlyZWN0IGV4cGFuc2lvbgAlczogaW52YWxpZCBsaW1pdCBhcmd1bWVudAAlczogaW52YWxpZCBsaW5lIGNvdW50ACVzOiBpbnZhbGlkIG9wdGlvbgAlczogaW52YWxpZCBvcHRpb24gbmFtZQAlczogaW52YWxpZCBzZXJ2aWNlACVzOiBpbnZhbGlkIHNoZWxsIG9wdGlvbiBuYW1lACVzOiBpbnZhbGlkIHNpZ25hbCBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIHRpbWVvdXQgc3BlY2lmaWNhdGlvbgAlczogaW52YWxpZCB0aW1lc3RhbXAAJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZQAlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQAlczogaXMgYSBkaXJlY3RvcnkAJXM6IGpvYiAlZCBhbHJlYWR5IGluIGJhY2tncm91bmQAJXM6IGpvYiBoYXMgdGVybWluYXRlZAAlczogbGluZSAlZDogACVzOiBtYXhpbXVtIGZ1bmN0aW9uIG5lc3RpbmcgbGV2ZWwgZXhjZWVkZWQgKCVkKQAlczogbWF4aW11bSBzb3VyY2UgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpACVzOiBtaXNzaW5nIGNvbG9uIHNlcGFyYXRvcgAlczogbmFtZXJlZiB2YXJpYWJsZSBzZWxmIHJlZmVyZW5jZXMgbm90IGFsbG93ZWQAJXM6IG5vIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbgAlczogbm8gam9iIGNvbnRyb2wAJXM6IG5vIHN1Y2ggam9iACVzOiBub3QgYSBmdW5jdGlvbgAlczogbm90IGEgcmVndWxhciBmaWxlACVzOiBub3QgYSBzaGVsbCBidWlsdGluACVzOiBub3QgYW4gYXJyYXkgdmFyaWFibGUAJXM6IG5vdCBhbiBpbmRleGVkIGFycmF5ACVzOiBub3QgZHluYW1pY2FsbHkgbG9hZGVkACVzOiBub3QgZm91bmQAJXM6IG51bWVyaWMgYXJndW1lbnQgcmVxdWlyZWQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudAAlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjCgAlczogcGFyYW1ldGVyIG51bGwgb3Igbm90IHNldAAlczogcXVvdGVkIGNvbXBvdW5kIGFycmF5IGFzc2lnbm1lbnQgZGVwcmVjYXRlZAAlczogcmVhZG9ubHkgZnVuY3Rpb24AJXM6IHJlYWRvbmx5IHZhcmlhYmxlACVzOiByZWZlcmVuY2UgdmFyaWFibGUgY2Fubm90IGJlIGFuIGFycmF5ACVzOiByZW1vdmluZyBuYW1lcmVmIGF0dHJpYnV0ZQAlczogcmVzdHJpY3RlZAAlczogcmVzdHJpY3RlZDogY2Fubm90IHJlZGlyZWN0IG91dHB1dAAlczogcmVzdHJpY3RlZDogY2Fubm90IHNwZWNpZnkgYC8nIGluIGNvbW1hbmQgbmFtZXMAJXM6IHN1YnN0cmluZyBleHByZXNzaW9uIDwgMAAlczogdW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAJXM6IHVuYm91bmQgdmFyaWFibGUAJXM6IHVzYWdlOiAAJXM6IHZhcmlhYmxlIG1heSBub3QgYmUgYXNzaWduZWQgdmFsdWUAKCggZXhwcmVzc2lvbiApKQAoY29yZSBkdW1wZWQpIAAod2Qgbm93OiAlcykKAC4gZmlsZW5hbWUgW2FyZ3VtZW50c10AL2Rldi8odGNwfHVkcCkvaG9zdC9wb3J0IG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBuZXR3b3JraW5nAC90bXAgbXVzdCBiZSBhIHZhbGlkIGRpcmVjdG9yeSBuYW1lADxubyBjdXJyZW50IGRpcmVjdG9yeT4AQUJPUlQgaW5zdHJ1Y3Rpb24AQWJvcnRpbmcuLi4AQWRkIGRpcmVjdG9yaWVzIHRvIHN0YWNrLgogICAgCiAgICBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAkJZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCQlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgYXJndW1lbnQgaXMgc3VwcGxpZWQgb3IgdGhlIGRpcmVjdG9yeQogICAgY2hhbmdlIGZhaWxzLgBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoCiAgICAJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgZGlyCUFkZHMgRElSIHRvIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYXQgdGhlIHRvcCwgbWFraW5nIGl0IHRoZQogICAgCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AQWxhcm0gKHByb2ZpbGUpAEFsYXJtICh2aXJ0dWFsKQBBbGFybSBjbG9jawBBcml0aG1ldGljIGZvciBsb29wLgogICAgCiAgICBFcXVpdmFsZW50IHRvCiAgICAJKCggRVhQMSApKQogICAgCXdoaWxlICgoIEVYUDIgKSk7IGRvCiAgICAJCUNPTU1BTkRTCiAgICAJCSgoIEVYUDMgKSkKICAgIAlkb25lCiAgICBFWFAxLCBFWFAyLCBhbmQgRVhQMyBhcmUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4gIElmIGFueSBleHByZXNzaW9uIGlzCiAgICBvbWl0dGVkLCBpdCBiZWhhdmVzIGFzIGlmIGl0IGV2YWx1YXRlcyB0byAxLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBCUFQgdHJhY2UvdHJhcABCYWQgc3lzdGVtIGNhbGwAQm9ndXMgc2lnbmFsAEJyb2tlbiBwaXBlAEJ1cyBlcnJvcgBDUFUgbGltaXQAQ2hhbmdlIHRoZSBzaGVsbCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBESVIuICBUaGUgZGVmYXVsdCBESVIgaXMgdGhlIHZhbHVlIG9mIHRoZQogICAgSE9NRSBzaGVsbCB2YXJpYWJsZS4KICAgIAogICAgVGhlIHZhcmlhYmxlIENEUEFUSCBkZWZpbmVzIHRoZSBzZWFyY2ggcGF0aCBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCiAgICBESVIuICBBbHRlcm5hdGl2ZSBkaXJlY3RvcnkgbmFtZXMgaW4gQ0RQQVRIIGFyZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikuCiAgICBBIG51bGwgZGlyZWN0b3J5IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSWYgRElSIGJlZ2lucwogICAgd2l0aCBhIHNsYXNoICgvKSwgdGhlbiBDRFBBVEggaXMgbm90IHVzZWQuCiAgICAKICAgIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kLCBhbmQgdGhlIHNoZWxsIG9wdGlvbiBgY2RhYmxlX3ZhcnMnIGlzIHNldCwKICAgIHRoZSB3b3JkIGlzIGFzc3VtZWQgdG8gYmUgIGEgdmFyaWFibGUgbmFtZS4gIElmIHRoYXQgdmFyaWFibGUgaGFzIGEgdmFsdWUsCiAgICBpdHMgdmFsdWUgaXMgdXNlZCBmb3IgRElSLgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlmb3JjZSBzeW1ib2xpYyBsaW5rcyB0byBiZSBmb2xsb3dlZDogcmVzb2x2ZSBzeW1ib2xpYwogICAgCQlsaW5rcyBpbiBESVIgYWZ0ZXIgcHJvY2Vzc2luZyBpbnN0YW5jZXMgb2YgYC4uJwogICAgICAtUAl1c2UgdGhlIHBoeXNpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aG91dCBmb2xsb3dpbmcKICAgIAkJc3ltYm9saWMgbGlua3M6IHJlc29sdmUgc3ltYm9saWMgbGlua3MgaW4gRElSIGJlZm9yZQogICAgCQlwcm9jZXNzaW5nIGluc3RhbmNlcyBvZiBgLi4nCiAgICAgIC1lCWlmIHRoZSAtUCBvcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBzdWNjZXNzZnVsbHksIGV4aXQgd2l0aAogICAgCQlhIG5vbi16ZXJvIHN0YXR1cwogICAgICAtQAlvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgcHJlc2VudCBhIGZpbGUgd2l0aCBleHRlbmRlZAogICAgCQlhdHRyaWJ1dGVzIGFzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgYXR0cmlidXRlcwogICAgCiAgICBUaGUgZGVmYXVsdCBpcyB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MsIGFzIGlmIGAtTCcgd2VyZSBzcGVjaWZpZWQuCiAgICBgLi4nIGlzIHByb2Nlc3NlZCBieSByZW1vdmluZyB0aGUgaW1tZWRpYXRlbHkgcHJldmlvdXMgcGF0aG5hbWUgY29tcG9uZW50CiAgICBiYWNrIHRvIGEgc2xhc2ggb3IgdGhlIGJlZ2lubmluZyBvZiBESVIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIGlmIHRoZSBkaXJlY3RvcnkgaXMgY2hhbmdlZCwgYW5kIGlmICRQV0QgaXMgc2V0IHN1Y2Nlc3NmdWxseSB3aGVuCiAgICAtUCBpcyB1c2VkOyBub24temVybyBvdGhlcndpc2UuAENoaWxkIGRlYXRoIG9yIHN0b3AAQ29tbW9uIHNoZWxsIHZhcmlhYmxlIG5hbWVzIGFuZCB1c2FnZS4KICAgIAogICAgQkFTSF9WRVJTSU9OCVZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoaXMgQmFzaC4KICAgIENEUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAogICAgCQlmb3IgZGlyZWN0b3JpZXMgZ2l2ZW4gYXMgYXJndW1lbnRzIHRvIGBjZCcuCiAgICBHTE9CSUdOT1JFCUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgZGVzY3JpYmluZyBmaWxlbmFtZXMgdG8KICAgIAkJYmUgaWdub3JlZCBieSBwYXRobmFtZSBleHBhbnNpb24uCiAgICBISVNURklMRQlUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB5b3VyIGNvbW1hbmQgaGlzdG9yeSBpcyBzdG9yZWQuCiAgICBISVNURklMRVNJWkUJVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoaXMgZmlsZSBjYW4gY29udGFpbi4KICAgIEhJU1RTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGxpbmVzIHRoYXQgYSBydW5uaW5nCiAgICAJCXNoZWxsIGNhbiBhY2Nlc3MuCiAgICBIT01FCVRoZSBjb21wbGV0ZSBwYXRobmFtZSB0byB5b3VyIGxvZ2luIGRpcmVjdG9yeS4KICAgIEhPU1ROQU1FCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGhvc3QuCiAgICBIT1NUVFlQRQlUaGUgdHlwZSBvZiBDUFUgdGhpcyB2ZXJzaW9uIG9mIEJhc2ggaXMgcnVubmluZyB1bmRlci4KICAgIElHTk9SRUVPRglDb250cm9scyB0aGUgYWN0aW9uIG9mIHRoZSBzaGVsbCBvbiByZWNlaXB0IG9mIGFuIEVPRgogICAgCQljaGFyYWN0ZXIgYXMgdGhlIHNvbGUgaW5wdXQuICBJZiBzZXQsIHRoZW4gdGhlIHZhbHVlCiAgICAJCW9mIGl0IGlzIHRoZSBudW1iZXIgb2YgRU9GIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgc2VlbgogICAgCQlpbiBhIHJvdyBvbiBhbiBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgc2hlbGwgd2lsbCBleGl0CiAgICAJCShkZWZhdWx0IDEwKS4gIFdoZW4gdW5zZXQsIEVPRiBzaWduaWZpZXMgdGhlIGVuZCBvZiBpbnB1dC4KICAgIE1BQ0hUWVBFCUEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3lzdGVtIEJhc2ggaXMgcnVubmluZyBvbi4KICAgIE1BSUxDSEVDSwlIb3cgb2Z0ZW4sIGluIHNlY29uZHMsIEJhc2ggY2hlY2tzIGZvciBuZXcgbWFpbC4KICAgIE1BSUxQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZW5hbWVzIHdoaWNoIEJhc2ggY2hlY2tzCiAgICAJCWZvciBuZXcgbWFpbC4KICAgIE9TVFlQRQlUaGUgdmVyc2lvbiBvZiBVbml4IHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHdoZW4KICAgIAkJbG9va2luZyBmb3IgY29tbWFuZHMuCiAgICBQUk9NUFRfQ09NTUFORAlBIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBwcmludGluZyBvZiBlYWNoCiAgICAJCXByaW1hcnkgcHJvbXB0LgogICAgUFMxCQlUaGUgcHJpbWFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFMyCQlUaGUgc2Vjb25kYXJ5IHByb21wdCBzdHJpbmcuCiAgICBQV0QJCVRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgIFNIRUxMT1BUUwlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGVuYWJsZWQgc2hlbGwgb3B0aW9ucy4KICAgIFRFUk0JVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVybWluYWwgdHlwZS4KICAgIFRJTUVGT1JNQVQJVGhlIG91dHB1dCBmb3JtYXQgZm9yIHRpbWluZyBzdGF0aXN0aWNzIGRpc3BsYXllZCBieSB0aGUKICAgIAkJYHRpbWUnIHJlc2VydmVkIHdvcmQuCiAgICBhdXRvX3Jlc3VtZQlOb24tbnVsbCBtZWFucyBhIGNvbW1hbmQgd29yZCBhcHBlYXJpbmcgb24gYSBsaW5lIGJ5CiAgICAJCWl0c2VsZiBpcyBmaXJzdCBsb29rZWQgZm9yIGluIHRoZSBsaXN0IG9mIGN1cnJlbnRseQogICAgCQlzdG9wcGVkIGpvYnMuICBJZiBmb3VuZCB0aGVyZSwgdGhhdCBqb2IgaXMgZm9yZWdyb3VuZGVkLgogICAgCQlBIHZhbHVlIG9mIGBleGFjdCcgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJZXhhY3RseSBtYXRjaCBhIGNvbW1hbmQgaW4gdGhlIGxpc3Qgb2Ygc3RvcHBlZCBqb2JzLiAgQQogICAgCQl2YWx1ZSBvZiBgc3Vic3RyaW5nJyBtZWFucyB0aGF0IHRoZSBjb21tYW5kIHdvcmQgbXVzdAogICAgCQltYXRjaCBhIHN1YnN0cmluZyBvZiB0aGUgam9iLiAgQW55IG90aGVyIHZhbHVlIG1lYW5zIHRoYXQKICAgIAkJdGhlIGNvbW1hbmQgbXVzdCBiZSBhIHByZWZpeCBvZiBhIHN0b3BwZWQgam9iLgogICAgaGlzdGNoYXJzCUNoYXJhY3RlcnMgY29udHJvbGxpbmcgaGlzdG9yeSBleHBhbnNpb24gYW5kIHF1aWNrCiAgICAJCXN1YnN0aXR1dGlvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdGhlIGhpc3RvcnkKICAgIAkJc3Vic3RpdHV0aW9uIGNoYXJhY3RlciwgdXN1YWxseSBgIScuICBUaGUgc2Vjb25kIGlzCiAgICAJCXRoZSBgcXVpY2sgc3Vic3RpdHV0aW9uJyBjaGFyYWN0ZXIsIHVzdWFsbHkgYF4nLiAgVGhlCiAgICAJCXRoaXJkIGlzIHRoZSBgaGlzdG9yeSBjb21tZW50JyBjaGFyYWN0ZXIsIHVzdWFsbHkgYCMnLgogICAgSElTVElHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHVzZWQgdG8gZGVjaWRlIHdoaWNoCiAgICAJCWNvbW1hbmRzIHNob3VsZCBiZSBzYXZlZCBvbiB0aGUgaGlzdG9yeSBsaXN0LgoAQ29udGludWUAQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgBDcmVhdGUgYSBjb3Byb2Nlc3MgbmFtZWQgTkFNRS4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5EIGFzeW5jaHJvbm91c2x5LCB3aXRoIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkCiAgICBpbnB1dCBvZiB0aGUgY29tbWFuZCBjb25uZWN0ZWQgdmlhIGEgcGlwZSB0byBmaWxlIGRlc2NyaXB0b3JzIGFzc2lnbmVkCiAgICB0byBpbmRpY2VzIDAgYW5kIDEgb2YgYW4gYXJyYXkgdmFyaWFibGUgTkFNRSBpbiB0aGUgZXhlY3V0aW5nIHNoZWxsLgogICAgVGhlIGRlZmF1bHQgTkFNRSBpcyAiQ09QUk9DIi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBUaGUgY29wcm9jIGNvbW1hbmQgcmV0dXJucyBhbiBleGl0IHN0YXR1cyBvZiAwLgBEZWZpbmUgbG9jYWwgdmFyaWFibGVzLgogICAgCiAgICBDcmVhdGUgYSBsb2NhbCB2YXJpYWJsZSBjYWxsZWQgTkFNRSwgYW5kIGdpdmUgaXQgVkFMVUUuICBPUFRJT04gY2FuCiAgICBiZSBhbnkgb3B0aW9uIGFjY2VwdGVkIGJ5IGBkZWNsYXJlJy4KICAgIAogICAgTG9jYWwgdmFyaWFibGVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGEgZnVuY3Rpb247IHRoZXkgYXJlIHZpc2libGUKICAgIG9ubHkgdG8gdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQgYW5kIGl0cyBjaGlsZHJlbi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkLCBhIHZhcmlhYmxlCiAgICBhc3NpZ25tZW50IGVycm9yIG9jY3Vycywgb3IgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbi4ARGVmaW5lIG9yIGRpc3BsYXkgYWxpYXNlcy4KICAgIAogICAgV2l0aG91dCBhcmd1bWVudHMsIGBhbGlhcycgcHJpbnRzIHRoZSBsaXN0IG9mIGFsaWFzZXMgaW4gdGhlIHJldXNhYmxlCiAgICBmb3JtIGBhbGlhcyBOQU1FPVZBTFVFJyBvbiBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE90aGVyd2lzZSwgYW4gYWxpYXMgaXMgZGVmaW5lZCBmb3IgZWFjaCBOQU1FIHdob3NlIFZBTFVFIGlzIGdpdmVuLgogICAgQSB0cmFpbGluZyBzcGFjZSBpbiBWQUxVRSBjYXVzZXMgdGhlIG5leHQgd29yZCB0byBiZSBjaGVja2VkIGZvcgogICAgYWxpYXMgc3Vic3RpdHV0aW9uIHdoZW4gdGhlIGFsaWFzIGlzIGV4cGFuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlwcmludCBhbGwgZGVmaW5lZCBhbGlhc2VzIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYWxpYXMgcmV0dXJucyB0cnVlIHVubGVzcyBhIE5BTUUgaXMgc3VwcGxpZWQgZm9yIHdoaWNoIG5vIGFsaWFzIGhhcyBiZWVuCiAgICBkZWZpbmVkLgBEZWZpbmUgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENyZWF0ZSBhIHNoZWxsIGZ1bmN0aW9uIG5hbWVkIE5BTUUuICBXaGVuIGludm9rZWQgYXMgYSBzaW1wbGUgY29tbWFuZCwKICAgIE5BTUUgcnVucyBDT01NQU5EcyBpbiB0aGUgY2FsbGluZyBzaGVsbCdzIGNvbnRleHQuICBXaGVuIE5BTUUgaXMgaW52b2tlZCwKICAgIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgJDEuLi4kbiwgYW5kIHRoZSBmdW5jdGlvbidzCiAgICBuYW1lIGlzIGluICRGVU5DTkFNRS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgcmVhZG9ubHkuAERpc3BsYXkgZGlyZWN0b3J5IHN0YWNrLgogICAgCiAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUgYHB1c2hkJyBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIGBwb3BkJyBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJCXRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKICAgICAgLXAJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZQogICAgICAtdglwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lIHByZWZpeGVkCiAgICAJCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJCXNob3duIGJ5IGRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aAogICAgCQl6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0aW4gY29tbWFuZHMuCiAgICAKICAgIERpc3BsYXlzIGJyaWVmIHN1bW1hcmllcyBvZiBidWlsdGluIGNvbW1hbmRzLiAgSWYgUEFUVEVSTiBpcwogICAgc3BlY2lmaWVkLCBnaXZlcyBkZXRhaWxlZCBoZWxwIG9uIGFsbCBjb21tYW5kcyBtYXRjaGluZyBQQVRURVJOLAogICAgb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIGhlbHAgdG9waWNzIGlzIHByaW50ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1kCW91dHB1dCBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0b3BpYwogICAgICAtbQlkaXNwbGF5IHVzYWdlIGluIHBzZXVkby1tYW5wYWdlIGZvcm1hdAogICAgICAtcwlvdXRwdXQgb25seSBhIHNob3J0IHVzYWdlIHN5bm9wc2lzIGZvciBlYWNoIHRvcGljIG1hdGNoaW5nCiAgICAJCVBBVFRFUk4KICAgIAogICAgQXJndW1lbnRzOgogICAgICBQQVRURVJOCVBhdHRlcm4gc3BlY2lmaXlpbmcgYSBoZWxwIHRvcGljCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBQQVRURVJOIGlzIG5vdCBmb3VuZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4ARGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kIHR5cGUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIGluZGljYXRlIGhvdyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBpZiB1c2VkIGFzIGEKICAgIGNvbW1hbmQgbmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJZGlzcGxheSBhbGwgbG9jYXRpb25zIGNvbnRhaW5pbmcgYW4gZXhlY3V0YWJsZSBuYW1lZCBOQU1FOwogICAgCQlpbmNsdWRlcyBhbGlhc2VzLCBidWlsdGlucywgYW5kIGZ1bmN0aW9ucywgaWYgYW5kIG9ubHkgaWYKICAgIAkJdGhlIGAtcCcgb3B0aW9uIGlzIG5vdCBhbHNvIHVzZWQKICAgICAgLWYJc3VwcHJlc3Mgc2hlbGwgZnVuY3Rpb24gbG9va3VwCiAgICAgIC1QCWZvcmNlIGEgUEFUSCBzZWFyY2ggZm9yIGVhY2ggTkFNRSwgZXZlbiBpZiBpdCBpcyBhbiBhbGlhcywKICAgIAkJYnVpbHRpbiwgb3IgZnVuY3Rpb24sIGFuZCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGZpbGUKICAgIAkJdGhhdCB3b3VsZCBiZSBleGVjdXRlZAogICAgICAtcAlyZXR1cm5zIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQsCiAgICAJCW9yIG5vdGhpbmcgaWYgYHR5cGUgLXQgTkFNRScgd291bGQgbm90IHJldHVybiBgZmlsZScKICAgICAgLXQJb3V0cHV0IGEgc2luZ2xlIHdvcmQgd2hpY2ggaXMgb25lIG9mIGBhbGlhcycsIGBrZXl3b3JkJywKICAgIAkJYGZ1bmN0aW9uJywgYGJ1aWx0aW4nLCBgZmlsZScgb3IgYCcsIGlmIE5BTUUgaXMgYW4gYWxpYXMsCiAgICAJCXNoZWxsIHJlc2VydmVkIHdvcmQsIHNoZWxsIGZ1bmN0aW9uLCBzaGVsbCBidWlsdGluLCBkaXNrIGZpbGUsCiAgICAJCW9yIG5vdCBmb3VuZCwgcmVzcGVjdGl2ZWx5CiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQlDb21tYW5kIG5hbWUgdG8gYmUgaW50ZXJwcmV0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFsbCBvZiB0aGUgTkFNRXMgYXJlIGZvdW5kOyBmYWlscyBpZiBhbnkgYXJlIG5vdCBmb3VuZC4ARGlzcGxheSBvciBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgZmMgaXMgdXNlZCB0byBsaXN0IG9yIGVkaXQgYW5kIHJlLWV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgaGlzdG9yeSBsaXN0LgogICAgRklSU1QgYW5kIExBU1QgY2FuIGJlIG51bWJlcnMgc3BlY2lmeWluZyB0aGUgcmFuZ2UsIG9yIEZJUlNUIGNhbiBiZSBhCiAgICBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGJlZ2lubmluZyB3aXRoIHRoYXQKICAgIHN0cmluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWUgRU5BTUUJc2VsZWN0IHdoaWNoIGVkaXRvciB0byB1c2UuICBEZWZhdWx0IGlzIEZDRURJVCwgdGhlbiBFRElUT1IsCiAgICAJCXRoZW4gdmkKICAgICAgLWwgCWxpc3QgbGluZXMgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgIC1uCW9taXQgbGluZSBudW1iZXJzIHdoZW4gbGlzdGluZwogICAgICAtcglyZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgKG5ld2VzdCBsaXN0ZWQgZmlyc3QpCiAgICAKICAgIFdpdGggdGhlIGBmYyAtcyBbcGF0PXJlcCAuLi5dIFtjb21tYW5kXScgZm9ybWF0LCBDT01NQU5EIGlzCiAgICByZS1leGVjdXRlZCBhZnRlciB0aGUgc3Vic3RpdHV0aW9uIE9MRD1ORVcgaXMgcGVyZm9ybWVkLgogICAgCiAgICBBIHVzZWZ1bCBhbGlhcyB0byB1c2Ugd2l0aCB0aGlzIGlzIHI9J2ZjIC1zJywgc28gdGhhdCB0eXBpbmcgYHIgY2MnCiAgICBydW5zIHRoZSBsYXN0IGNvbW1hbmQgYmVnaW5uaW5nIHdpdGggYGNjJyBhbmQgdHlwaW5nIGByJyByZS1leGVjdXRlcwogICAgdGhlIGxhc3QgY29tbWFuZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3Mgb3Igc3RhdHVzIG9mIGV4ZWN1dGVkIGNvbW1hbmQ7IG5vbi16ZXJvIGlmIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBtYW5pcHVsYXRlIHRoZSBoaXN0b3J5IGxpc3QuCiAgICAKICAgIERpc3BsYXkgdGhlIGhpc3RvcnkgbGlzdCB3aXRoIGxpbmUgbnVtYmVycywgcHJlZml4aW5nIGVhY2ggbW9kaWZpZWQKICAgIGVudHJ5IHdpdGggYSBgKicuICBBbiBhcmd1bWVudCBvZiBOIGxpc3RzIG9ubHkgdGhlIGxhc3QgTiBlbnRyaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgaGlzdG9yeSBsaXN0IGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZW50cmllcwogICAgICAtZCBvZmZzZXQJZGVsZXRlIHRoZSBoaXN0b3J5IGVudHJ5IGF0IHBvc2l0aW9uIE9GRlNFVC4KICAgIAogICAgICAtYQlhcHBlbmQgaGlzdG9yeSBsaW5lcyBmcm9tIHRoaXMgc2Vzc2lvbiB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAgIC1uCXJlYWQgYWxsIGhpc3RvcnkgbGluZXMgbm90IGFscmVhZHkgcmVhZCBmcm9tIHRoZSBoaXN0b3J5IGZpbGUKICAgIAkJYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBoaXN0b3J5IGxpc3QKICAgICAgLXIJcmVhZCB0aGUgaGlzdG9yeSBmaWxlIGFuZCBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIHRoZSBoaXN0b3J5CiAgICAJCWxpc3QKICAgICAgLXcJd3JpdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAKICAgICAgLXAJcGVyZm9ybSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBlYWNoIEFSRyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0CiAgICAJCXdpdGhvdXQgc3RvcmluZyBpdCBpbiB0aGUgaGlzdG9yeSBsaXN0CiAgICAgIC1zCWFwcGVuZCB0aGUgQVJHcyB0byB0aGUgaGlzdG9yeSBsaXN0IGFzIGEgc2luZ2xlIGVudHJ5CiAgICAKICAgIElmIEZJTEVOQU1FIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBoaXN0b3J5IGZpbGUuICBPdGhlcndpc2UsCiAgICBpZiBISVNURklMRSBoYXMgYSB2YWx1ZSwgdGhhdCBpcyB1c2VkLCBlbHNlIH4vLmJhc2hfaGlzdG9yeS4KICAgIAogICAgSWYgdGhlIEhJU1RUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHNldCBhbmQgbm90IG51bGwsIGl0cyB2YWx1ZSBpcyB1c2VkCiAgICBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpIHRvIHByaW50IHRoZSB0aW1lIHN0YW1wIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBkaXNwbGF5ZWQgaGlzdG9yeSBlbnRyeS4gIE5vIHRpbWUgc3RhbXBzIGFyZSBwcmludGVkIG90aGVyd2lzZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBzZXQgZmlsZSBtb2RlIG1hc2suCiAgICAKICAgIFNldHMgdGhlIHVzZXIgZmlsZS1jcmVhdGlvbiBtYXNrIHRvIE1PREUuICBJZiBNT0RFIGlzIG9taXR0ZWQsIHByaW50cwogICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2suCiAgICAKICAgIElmIE1PREUgYmVnaW5zIHdpdGggYSBkaWdpdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyOwogICAgb3RoZXJ3aXNlIGl0IGlzIGEgc3ltYm9saWMgbW9kZSBzdHJpbmcgbGlrZSB0aGF0IGFjY2VwdGVkIGJ5IGNobW9kKDEpLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlpZiBNT0RFIGlzIG9taXR0ZWQsIG91dHB1dCBpbiBhIGZvcm0gdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1TCW1ha2VzIHRoZSBvdXRwdXQgc3ltYm9saWM7IG90aGVyd2lzZSBhbiBvY3RhbCBudW1iZXIgaXMgb3V0cHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBNT0RFIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgcG9zc2libGUgY29tcGxldGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zLgogICAgCiAgICBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2hlbGwgZnVuY3Rpb24gZ2VuZXJhdGluZyBwb3NzaWJsZQogICAgY29tcGxldGlvbnMuICBJZiB0aGUgb3B0aW9uYWwgV09SRCBhcmd1bWVudCBpcyBzdXBwbGllZCwgbWF0Y2hlcyBhZ2FpbnN0CiAgICBXT1JEIGFyZSBnZW5lcmF0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgcHJvY2VzcyB0aW1lcy4KICAgIAogICAgUHJpbnRzIHRoZSBhY2N1bXVsYXRlZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgZm9yIHRoZSBzaGVsbCBhbmQgYWxsIG9mIGl0cwogICAgY2hpbGQgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4ARGlzcGxheSBzdGF0dXMgb2Ygam9icy4KICAgIAogICAgTGlzdHMgdGhlIGFjdGl2ZSBqb2JzLiAgSk9CU1BFQyByZXN0cmljdHMgb3V0cHV0IHRvIHRoYXQgam9iLgogICAgV2l0aG91dCBvcHRpb25zLCB0aGUgc3RhdHVzIG9mIGFsbCBhY3RpdmUgam9icyBpcyBkaXNwbGF5ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCWxpc3RzIHByb2Nlc3MgSURzIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5mb3JtYXRpb24KICAgICAgLW4JbGlzdHMgb25seSBwcm9jZXNzZXMgdGhhdCBoYXZlIGNoYW5nZWQgc3RhdHVzIHNpbmNlIHRoZSBsYXN0CiAgICAJCW5vdGlmaWNhdGlvbgogICAgICAtcAlsaXN0cyBwcm9jZXNzIElEcyBvbmx5CiAgICAgIC1yCXJlc3RyaWN0IG91dHB1dCB0byBydW5uaW5nIGpvYnMKICAgICAgLXMJcmVzdHJpY3Qgb3V0cHV0IHRvIHN0b3BwZWQgam9icwogICAgCiAgICBJZiAteCBpcyBzdXBwbGllZCwgQ09NTUFORCBpcyBydW4gYWZ0ZXIgYWxsIGpvYiBzcGVjaWZpY2F0aW9ucyB0aGF0CiAgICBhcHBlYXIgaW4gQVJHUyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUgcHJvY2VzcyBJRCBvZiB0aGF0IGpvYidzCiAgICBwcm9jZXNzIGdyb3VwIGxlYWRlci4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4KICAgIElmIC14IGlzIHVzZWQsIHJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQuAERpc3BsYXkgdGhlIGxpc3Qgb2YgY3VycmVudGx5IHJlbWVtYmVyZWQgZGlyZWN0b3JpZXMuICBEaXJlY3RvcmllcwogICAgZmluZCB0aGVpciB3YXkgb250byB0aGUgbGlzdCB3aXRoIHRoZSBgcHVzaGQnIGNvbW1hbmQ7IHlvdSBjYW4gZ2V0CiAgICBiYWNrIHVwIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUgYHBvcGQnIGNvbW1hbmQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1jCWNsZWFyIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYnkgZGVsZXRpbmcgYWxsIG9mIHRoZSBlbGVtZW50cwogICAgICAtbAlkbyBub3QgcHJpbnQgdGlsZGUtcHJlZml4ZWQgdmVyc2lvbnMgb2YgZGlyZWN0b3JpZXMgcmVsYXRpdmUKICAgIAl0byB5b3VyIGhvbWUgZGlyZWN0b3J5CiAgICAgIC1wCXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUKICAgICAgLXYJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZSBwcmVmaXhlZAogICAgCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieQogICAgCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgogICAgCiAgICAgIC1OCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgBEb25lAERvbmUoJWQpAEVNVCBpbnN0cnVjdGlvbgBFbmFibGUgYW5kIGRpc2FibGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGJ1aWx0aW4gc2hlbGwgY29tbWFuZHMuICBEaXNhYmxpbmcgYWxsb3dzIHlvdSB0bwogICAgZXhlY3V0ZSBhIGRpc2sgY29tbWFuZCB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHNoZWxsIGJ1aWx0aW4KICAgIHdpdGhvdXQgdXNpbmcgYSBmdWxsIHBhdGhuYW1lLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlwcmludCBhIGxpc3Qgb2YgYnVpbHRpbnMgc2hvd2luZyB3aGV0aGVyIG9yIG5vdCBlYWNoIGlzIGVuYWJsZWQKICAgICAgLW4JZGlzYWJsZSBlYWNoIE5BTUUgb3IgZGlzcGxheSBhIGxpc3Qgb2YgZGlzYWJsZWQgYnVpbHRpbnMKICAgICAgLXAJcHJpbnQgdGhlIGxpc3Qgb2YgYnVpbHRpbnMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgICAgLXMJcHJpbnQgb25seSB0aGUgbmFtZXMgb2YgUG9zaXggYHNwZWNpYWwnIGJ1aWx0aW5zCiAgICAKICAgIE9wdGlvbnMgY29udHJvbGxpbmcgZHluYW1pYyBsb2FkaW5nOgogICAgICAtZglMb2FkIGJ1aWx0aW4gTkFNRSBmcm9tIHNoYXJlZCBvYmplY3QgRklMRU5BTUUKICAgICAgLWQJUmVtb3ZlIGEgYnVpbHRpbiBsb2FkZWQgd2l0aCAtZgogICAgCiAgICBXaXRob3V0IG9wdGlvbnMsIGVhY2ggTkFNRSBpcyBlbmFibGVkLgogICAgCiAgICBUbyB1c2UgdGhlIGB0ZXN0JyBmb3VuZCBpbiAkUEFUSCBpbnN0ZWFkIG9mIHRoZSBzaGVsbCBidWlsdGluCiAgICB2ZXJzaW9uLCB0eXBlIGBlbmFibGUgLW4gdGVzdCcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOQU1FIGlzIG5vdCBhIHNoZWxsIGJ1aWx0aW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSBFWFBSRVNTSU9OIGlzIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBhcml0aG1ldGljCiAgICBldmFsdWF0aW9uLiAgRXF1aXZhbGVudCB0byAibGV0IEVYUFJFU1NJT04iLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMSBpZiBFWFBSRVNTSU9OIGV2YWx1YXRlcyB0byAwOyByZXR1cm5zIDAgb3RoZXJ3aXNlLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb25zLgogICAgCiAgICBFdmFsdWF0ZSBlYWNoIEFSRyBhcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24uICBFdmFsdWF0aW9uIGlzIGRvbmUgaW4KICAgIGZpeGVkLXdpZHRoIGludGVnZXJzIHdpdGggbm8gY2hlY2sgZm9yIG92ZXJmbG93LCB0aG91Z2ggZGl2aXNpb24gYnkgMAogICAgaXMgdHJhcHBlZCBhbmQgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFRoZSBmb2xsb3dpbmcgbGlzdCBvZiBvcGVyYXRvcnMgaXMKICAgIGdyb3VwZWQgaW50byBsZXZlbHMgb2YgZXF1YWwtcHJlY2VkZW5jZSBvcGVyYXRvcnMuICBUaGUgbGV2ZWxzIGFyZSBsaXN0ZWQKICAgIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgcHJlY2VkZW5jZS4KICAgIAogICAgCWlkKyssIGlkLS0JdmFyaWFibGUgcG9zdC1pbmNyZW1lbnQsIHBvc3QtZGVjcmVtZW50CiAgICAJKytpZCwgLS1pZAl2YXJpYWJsZSBwcmUtaW5jcmVtZW50LCBwcmUtZGVjcmVtZW50CiAgICAJLSwgKwkJdW5hcnkgbWludXMsIHBsdXMKICAgIAkhLCB+CQlsb2dpY2FsIGFuZCBiaXR3aXNlIG5lZ2F0aW9uCiAgICAJKioJCWV4cG9uZW50aWF0aW9uCiAgICAJKiwgLywgJQkJbXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCByZW1haW5kZXIKICAgIAkrLCAtCQlhZGRpdGlvbiwgc3VidHJhY3Rpb24KICAgIAk8PCwgPj4JCWxlZnQgYW5kIHJpZ2h0IGJpdHdpc2Ugc2hpZnRzCiAgICAJPD0sID49LCA8LCA+CWNvbXBhcmlzb24KICAgIAk9PSwgIT0JCWVxdWFsaXR5LCBpbmVxdWFsaXR5CiAgICAJJgkJYml0d2lzZSBBTkQKICAgIAleCQliaXR3aXNlIFhPUgogICAgCXwJCWJpdHdpc2UgT1IKICAgIAkmJgkJbG9naWNhbCBBTkQKICAgIAl8fAkJbG9naWNhbCBPUgogICAgCWV4cHIgPyBleHByIDogZXhwcgogICAgCQkJY29uZGl0aW9uYWwgb3BlcmF0b3IKICAgIAk9LCAqPSwgLz0sICU9LAogICAgCSs9LCAtPSwgPDw9LCA+Pj0sCiAgICAJJj0sIF49LCB8PQlhc3NpZ25tZW50CiAgICAKICAgIFNoZWxsIHZhcmlhYmxlcyBhcmUgYWxsb3dlZCBhcyBvcGVyYW5kcy4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZQogICAgaXMgcmVwbGFjZWQgYnkgaXRzIHZhbHVlIChjb2VyY2VkIHRvIGEgZml4ZWQtd2lkdGggaW50ZWdlcikgd2l0aGluCiAgICBhbiBleHByZXNzaW9uLiAgVGhlIHZhcmlhYmxlIG5lZWQgbm90IGhhdmUgaXRzIGludGVnZXIgYXR0cmlidXRlCiAgICB0dXJuZWQgb24gdG8gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLgogICAgCiAgICBPcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlLiAgU3ViLWV4cHJlc3Npb25zIGluCiAgICBwYXJlbnRoZXNlcyBhcmUgZXZhbHVhdGVkIGZpcnN0IGFuZCBtYXkgb3ZlcnJpZGUgdGhlIHByZWNlZGVuY2UKICAgIHJ1bGVzIGFib3ZlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIElmIHRoZSBsYXN0IEFSRyBldmFsdWF0ZXMgdG8gMCwgbGV0IHJldHVybnMgMTsgbGV0IHJldHVybnMgMCBvdGhlcndpc2UuAEV2YWx1YXRlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgICAKICAgIEV4aXRzIHdpdGggYSBzdGF0dXMgb2YgMCAodHJ1ZSkgb3IgMSAoZmFsc2UpIGRlcGVuZGluZyBvbgogICAgdGhlIGV2YWx1YXRpb24gb2YgRVhQUi4gIEV4cHJlc3Npb25zIG1heSBiZSB1bmFyeSBvciBiaW5hcnkuICBVbmFyeQogICAgZXhwcmVzc2lvbnMgYXJlIG9mdGVuIHVzZWQgdG8gZXhhbWluZSB0aGUgc3RhdHVzIG9mIGEgZmlsZS4gIFRoZXJlCiAgICBhcmUgc3RyaW5nIG9wZXJhdG9ycyBhbmQgbnVtZXJpYyBjb21wYXJpc29uIG9wZXJhdG9ycyBhcyB3ZWxsLgogICAgCiAgICBUaGUgYmVoYXZpb3Igb2YgdGVzdCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiAgUmVhZCB0aGUKICAgIGJhc2ggbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBGaWxlIG9wZXJhdG9yczoKICAgIAogICAgICAtYSBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzLgogICAgICAtYiBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYmxvY2sgc3BlY2lhbC4KICAgICAgLWMgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGNoYXJhY3RlciBzcGVjaWFsLgogICAgICAtZCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBkaXJlY3RvcnkuCiAgICAgIC1lIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMuCiAgICAgIC1mIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlLgogICAgICAtZyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgc2V0LWdyb3VwLWlkLgogICAgICAtaCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtTCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtayBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaGFzIGl0cyBgc3RpY2t5JyBiaXQgc2V0LgogICAgICAtcCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBuYW1lZCBwaXBlLgogICAgICAtciBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgcmVhZGFibGUgYnkgeW91LgogICAgICAtcyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuCiAgICAgIC1TIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHNvY2tldC4KICAgICAgLXQgRkQgICAgICAgICAgVHJ1ZSBpZiBGRCBpcyBvcGVuZWQgb24gYSB0ZXJtaW5hbC4KICAgICAgLXUgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBzZXQtdXNlci1pZC4KICAgICAgLXcgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyB3cml0YWJsZSBieSB5b3UuCiAgICAgIC14IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZSBieSB5b3UuCiAgICAgIC1PIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZWZmZWN0aXZlbHkgb3duZWQgYnkgeW91LgogICAgICAtRyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHlvdXIgZ3JvdXAuCiAgICAgIC1OIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgaXQgd2FzIGxhc3QgcmVhZC4KICAgIAogICAgICBGSUxFMSAtbnQgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgbmV3ZXIgdGhhbiBmaWxlMiAoYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIGRhdGUpLgogICAgCiAgICAgIEZJTEUxIC1vdCBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBvbGRlciB0aGFuIGZpbGUyLgogICAgCiAgICAgIEZJTEUxIC1lZiBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBhIGhhcmQgbGluayB0byBmaWxlMi4KICAgIAogICAgU3RyaW5nIG9wZXJhdG9yczoKICAgIAogICAgICAteiBTVFJJTkcgICAgICBUcnVlIGlmIHN0cmluZyBpcyBlbXB0eS4KICAgIAogICAgICAtbiBTVFJJTkcKICAgICAgICAgU1RSSU5HICAgICAgVHJ1ZSBpZiBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAgCiAgICAgIFNUUklORzEgPSBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIHN0cmluZ3MgYXJlIGVxdWFsLgogICAgICBTVFJJTkcxICE9IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3RyaW5ncyBhcmUgbm90IGVxdWFsLgogICAgICBTVFJJTkcxIDwgU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIFNUUklORzEgc29ydHMgYmVmb3JlIFNUUklORzIgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgICAgIFNUUklORzEgPiBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgU1RSSU5HMSBzb3J0cyBhZnRlciBTVFJJTkcyIGxleGljb2dyYXBoaWNhbGx5LgogICAgCiAgICBPdGhlciBvcGVyYXRvcnM6CiAgICAKICAgICAgLW8gT1BUSU9OICAgICAgVHJ1ZSBpZiB0aGUgc2hlbGwgb3B0aW9uIE9QVElPTiBpcyBlbmFibGVkLgogICAgICAtdiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0LgogICAgICAtUiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0IGFuZCBpcyBhIG5hbWUKICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLgogICAgICAhIEVYUFIgICAgICAgICBUcnVlIGlmIGV4cHIgaXMgZmFsc2UuCiAgICAgIEVYUFIxIC1hIEVYUFIyIFRydWUgaWYgYm90aCBleHByMSBBTkQgZXhwcjIgYXJlIHRydWUuCiAgICAgIEVYUFIxIC1vIEVYUFIyIFRydWUgaWYgZWl0aGVyIGV4cHIxIE9SIGV4cHIyIGlzIHRydWUuCiAgICAKICAgICAgYXJnMSBPUCBhcmcyICAgQXJpdGhtZXRpYyB0ZXN0cy4gIE9QIGlzIG9uZSBvZiAtZXEsIC1uZSwKICAgICAgICAgICAgICAgICAgICAgLWx0LCAtbGUsIC1ndCwgb3IgLWdlLgogICAgCiAgICBBcml0aG1ldGljIGJpbmFyeSBvcGVyYXRvcnMgcmV0dXJuIHRydWUgaWYgQVJHMSBpcyBlcXVhbCwgbm90LWVxdWFsLAogICAgbGVzcy10aGFuLCBsZXNzLXRoYW4tb3ItZXF1YWwsIGdyZWF0ZXItdGhhbiwgb3IgZ3JlYXRlci10aGFuLW9yLWVxdWFsCiAgICB0aGFuIEFSRzIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIEVYUFIgZXZhbHVhdGVzIHRvIHRydWU7IGZhaWxzIGlmIEVYUFIgZXZhbHVhdGVzIHRvCiAgICBmYWxzZSBvciBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIGdpdmVuLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlICJ0ZXN0IiBidWlsdGluLCBidXQgdGhlIGxhc3QgYXJndW1lbnQgbXVzdAogICAgYmUgYSBsaXRlcmFsIGBdJywgdG8gbWF0Y2ggdGhlIG9wZW5pbmcgYFsnLgBFeGVjdXRlIGEgc2ltcGxlIGNvbW1hbmQgb3IgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kcy4KICAgIAogICAgUnVucyBDT01NQU5EIHdpdGggQVJHUyBzdXBwcmVzc2luZyAgc2hlbGwgZnVuY3Rpb24gbG9va3VwLCBvciBkaXNwbGF5CiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIENPTU1BTkRzLiAgQ2FuIGJlIHVzZWQgdG8gaW52b2tlIGNvbW1hbmRzCiAgICBvbiBkaXNrIHdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcCAgICB1c2UgYSBkZWZhdWx0IHZhbHVlIGZvciBQQVRIIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBvZgogICAgICAgICAgICB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzCiAgICAgIC12ICAgIHByaW50IGEgZGVzY3JpcHRpb24gb2YgQ09NTUFORCBzaW1pbGFyIHRvIHRoZSBgdHlwZScgYnVpbHRpbgogICAgICAtViAgICBwcmludCBhIG1vcmUgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiBlYWNoIENPTU1BTkQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQsIG9yIGZhaWx1cmUgaWYgQ09NTUFORCBpcyBub3QgZm91bmQuAEV4ZWN1dGUgYXJndW1lbnRzIGFzIGEgc2hlbGwgY29tbWFuZC4KICAgIAogICAgQ29tYmluZSBBUkdzIGludG8gYSBzaW5nbGUgc3RyaW5nLCB1c2UgdGhlIHJlc3VsdCBhcyBpbnB1dCB0byB0aGUgc2hlbGwsCiAgICBhbmQgZXhlY3V0ZSB0aGUgcmVzdWx0aW5nIGNvbW1hbmRzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgZXhpdCBzdGF0dXMgb2YgY29tbWFuZCBvciBzdWNjZXNzIGlmIGNvbW1hbmQgaXMgbnVsbC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBkb2VzIG5vdCBzdWNjZWVkLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIGB1bnRpbCcgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIHdoaWNoIGlzIG5vdCB6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGFzIGxvbmcgYXMgYSB0ZXN0IHN1Y2NlZWRzLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIGB3aGlsZScgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIG9mIHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYmFzZWQgb24gY29uZGl0aW9uYWwuCiAgICAKICAgIFRoZSBgaWYgQ09NTUFORFMnIGxpc3QgaXMgZXhlY3V0ZWQuICBJZiBpdHMgZXhpdCBzdGF0dXMgaXMgemVybywgdGhlbiB0aGUKICAgIGB0aGVuIENPTU1BTkRTJyBsaXN0IGlzIGV4ZWN1dGVkLiAgT3RoZXJ3aXNlLCBlYWNoIGBlbGlmIENPTU1BTkRTJyBsaXN0IGlzCiAgICBleGVjdXRlZCBpbiB0dXJuLCBhbmQgaWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nCiAgICBgdGhlbiBDT01NQU5EUycgbGlzdCBpcyBleGVjdXRlZCBhbmQgdGhlIGlmIGNvbW1hbmQgY29tcGxldGVzLiAgT3RoZXJ3aXNlLAogICAgdGhlIGBlbHNlIENPTU1BTkRTJyBsaXN0IGlzIGV4ZWN1dGVkLCBpZiBwcmVzZW50LiAgVGhlIGV4aXQgc3RhdHVzIG9mIHRoZQogICAgZW50aXJlIGNvbnN0cnVjdCBpcyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZCwgb3IgemVybwogICAgaWYgbm8gY29uZGl0aW9uIHRlc3RlZCB0cnVlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGJhc2VkIG9uIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAKICAgIFNlbGVjdGl2ZWx5IGV4ZWN1dGUgQ09NTUFORFMgYmFzZWQgdXBvbiBXT1JEIG1hdGNoaW5nIFBBVFRFUk4uICBUaGUKICAgIGB8JyBpcyB1c2VkIHRvIHNlcGFyYXRlIG11bHRpcGxlIHBhdHRlcm5zLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhIGxpc3QuCiAgICAKICAgIFRoZSBgZm9yJyBsb29wIGV4ZWN1dGVzIGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgZm9yIGVhY2ggbWVtYmVyIGluIGEKICAgIGxpc3Qgb2YgaXRlbXMuICBJZiBgaW4gV09SRFMgLi4uOycgaXMgbm90IHByZXNlbnQsIHRoZW4gYGluICIkQCInIGlzCiAgICBhc3N1bWVkLiAgRm9yIGVhY2ggZWxlbWVudCBpbiBXT1JEUywgTkFNRSBpcyBzZXQgdG8gdGhhdCBlbGVtZW50LCBhbmQKICAgIHRoZSBDT01NQU5EUyBhcmUgZXhlY3V0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuCiAgICAKICAgIFJlYWQgYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBGSUxFTkFNRSBpbiB0aGUgY3VycmVudCBzaGVsbC4gIFRoZQogICAgZW50cmllcyBpbiAkUEFUSCBhcmUgdXNlZCB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFTkFNRS4KICAgIElmIGFueSBBUkdVTUVOVFMgYXJlIHN1cHBsaWVkLCB0aGV5IGJlY29tZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICB3aGVuIEZJTEVOQU1FIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkIGluIEZJTEVOQU1FOyBmYWlscyBpZgogICAgRklMRU5BTUUgY2Fubm90IGJlIHJlYWQuAEV4ZWN1dGUgY29uZGl0aW9uYWwgY29tbWFuZC4KICAgIAogICAgUmV0dXJucyBhIHN0YXR1cyBvZiAwIG9yIDEgZGVwZW5kaW5nIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25kaXRpb25hbAogICAgZXhwcmVzc2lvbiBFWFBSRVNTSU9OLiAgRXhwcmVzc2lvbnMgYXJlIGNvbXBvc2VkIG9mIHRoZSBzYW1lIHByaW1hcmllcyB1c2VkCiAgICBieSB0aGUgYHRlc3QnIGJ1aWx0aW4sIGFuZCBtYXkgYmUgY29tYmluZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRvcnM6CiAgICAKICAgICAgKCBFWFBSRVNTSU9OICkJUmV0dXJucyB0aGUgdmFsdWUgb2YgRVhQUkVTU0lPTgogICAgICAhIEVYUFJFU1NJT04JCVRydWUgaWYgRVhQUkVTU0lPTiBpcyBmYWxzZTsgZWxzZSBmYWxzZQogICAgICBFWFBSMSAmJiBFWFBSMglUcnVlIGlmIGJvdGggRVhQUjEgYW5kIEVYUFIyIGFyZSB0cnVlOyBlbHNlIGZhbHNlCiAgICAgIEVYUFIxIHx8IEVYUFIyCVRydWUgaWYgZWl0aGVyIEVYUFIxIG9yIEVYUFIyIGlzIHRydWU7IGVsc2UgZmFsc2UKICAgIAogICAgV2hlbiB0aGUgYD09JyBhbmQgYCE9JyBvcGVyYXRvcnMgYXJlIHVzZWQsIHRoZSBzdHJpbmcgdG8gdGhlIHJpZ2h0IG9mCiAgICB0aGUgb3BlcmF0b3IgaXMgdXNlZCBhcyBhIHBhdHRlcm4gYW5kIHBhdHRlcm4gbWF0Y2hpbmcgaXMgcGVyZm9ybWVkLgogICAgV2hlbiB0aGUgYD1+JyBvcGVyYXRvciBpcyB1c2VkLCB0aGUgc3RyaW5nIHRvIHRoZSByaWdodCBvZiB0aGUgb3BlcmF0b3IKICAgIGlzIG1hdGNoZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSAmJiBhbmQgfHwgb3BlcmF0b3JzIGRvIG5vdCBldmFsdWF0ZSBFWFBSMiBpZiBFWFBSMSBpcyBzdWZmaWNpZW50IHRvCiAgICBkZXRlcm1pbmUgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICAwIG9yIDEgZGVwZW5kaW5nIG9uIHZhbHVlIG9mIEVYUFJFU1NJT04uAEV4ZWN1dGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEV4ZWN1dGUgU0hFTEwtQlVJTFRJTiB3aXRoIGFyZ3VtZW50cyBBUkdzIHdpdGhvdXQgcGVyZm9ybWluZyBjb21tYW5kCiAgICBsb29rdXAuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIHJlaW1wbGVtZW50IGEgc2hlbGwgYnVpbHRpbgogICAgYXMgYSBzaGVsbCBmdW5jdGlvbiwgYnV0IG5lZWQgdG8gZXhlY3V0ZSB0aGUgYnVpbHRpbiB3aXRoaW4gdGhlIGZ1bmN0aW9uLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIFNIRUxMLUJVSUxUSU4sIG9yIGZhbHNlIGlmIFNIRUxMLUJVSUxUSU4gaXMKICAgIG5vdCBhIHNoZWxsIGJ1aWx0aW4uLgBFeGl0ICVkAEV4aXQgYSBsb2dpbiBzaGVsbC4KICAgIAogICAgRXhpdHMgYSBsb2dpbiBzaGVsbCB3aXRoIGV4aXQgc3RhdHVzIE4uICBSZXR1cm5zIGFuIGVycm9yIGlmIG5vdCBleGVjdXRlZAogICAgaW4gYSBsb2dpbiBzaGVsbC4ARXhpdCBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgRXhpdCBhIEZPUiwgV0hJTEUgb3IgVU5USUwgbG9vcC4gIElmIE4gaXMgc3BlY2lmaWVkLCBicmVhayBOIGVuY2xvc2luZwogICAgbG9vcHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIGV4aXQgc3RhdHVzIGlzIDAgdW5sZXNzIE4gaXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLgBFeGl0IHRoZSBzaGVsbC4KICAgIAogICAgRXhpdHMgdGhlIHNoZWxsIHdpdGggYSBzdGF0dXMgb2YgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIGV4aXQgc3RhdHVzCiAgICBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEZpbGUgbGltaXQARmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uAEZvcm1hdHMgYW5kIHByaW50cyBBUkdVTUVOVFMgdW5kZXIgY29udHJvbCBvZiB0aGUgRk9STUFULgogICAgCiAgICBPcHRpb25zOgogICAgICAtdiB2YXIJYXNzaWduIHRoZSBvdXRwdXQgdG8gc2hlbGwgdmFyaWFibGUgVkFSIHJhdGhlciB0aGFuCiAgICAJCWRpc3BsYXkgaXQgb24gdGhlIHN0YW5kYXJkIG91dHB1dAogICAgCiAgICBGT1JNQVQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRocmVlIHR5cGVzIG9mIG9iamVjdHM6IHBsYWluCiAgICBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgc2ltcGx5IGNvcGllZCB0byBzdGFuZGFyZCBvdXRwdXQ7IGNoYXJhY3RlciBlc2NhcGUKICAgIHNlcXVlbmNlcywgd2hpY2ggYXJlIGNvbnZlcnRlZCBhbmQgY29waWVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQ7IGFuZAogICAgZm9ybWF0IHNwZWNpZmljYXRpb25zLCBlYWNoIG9mIHdoaWNoIGNhdXNlcyBwcmludGluZyBvZiB0aGUgbmV4dCBzdWNjZXNzaXZlCiAgICBhcmd1bWVudC4KICAgIAogICAgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBkZXNjcmliZWQgaW4gcHJpbnRmKDEpLAogICAgcHJpbnRmIGludGVycHJldHM6CiAgICAKICAgICAgJWIJZXhwYW5kIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CiAgICAgICVxCXF1b3RlIHRoZSBhcmd1bWVudCBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgc2hlbGwgaW5wdXQKICAgICAgJShmbXQpVAlvdXRwdXQgdGhlIGRhdGUtdGltZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gdXNpbmcgRk1UIGFzIGEgZm9ybWF0CiAgICAJICAgICAgICBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpCiAgICAKICAgIFRoZSBmb3JtYXQgaXMgcmUtdXNlZCBhcyBuZWNlc3NhcnkgdG8gY29uc3VtZSBhbGwgb2YgdGhlIGFyZ3VtZW50cy4gIElmCiAgICB0aGVyZSBhcmUgZmV3ZXIgYXJndW1lbnRzIHRoYW4gdGhlIGZvcm1hdCByZXF1aXJlcywgIGV4dHJhIGZvcm1hdAogICAgc3BlY2lmaWNhdGlvbnMgYmVoYXZlIGFzIGlmIGEgemVybyB2YWx1ZSBvciBudWxsIHN0cmluZywgYXMgYXBwcm9wcmlhdGUsCiAgICBoYWQgYmVlbiBzdXBwbGllZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGEgd3JpdGUgb3IgYXNzaWdubWVudAogICAgZXJyb3Igb2NjdXJzLgBHTlUgYmFzaCwgdmVyc2lvbiAlcyAoJXMpCgBHTlUgYmFzaCwgdmVyc2lvbiAlcy0oJXMpCgBHTlUgbG9uZyBvcHRpb25zOgoAR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4KAEdyb3VwIGNvbW1hbmRzIGFzIGEgdW5pdC4KICAgIAogICAgUnVuIGEgc2V0IG9mIGNvbW1hbmRzIGluIGEgZ3JvdXAuICBUaGlzIGlzIG9uZSB3YXkgdG8gcmVkaXJlY3QgYW4KICAgIGVudGlyZSBzZXQgb2YgY29tbWFuZHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEhGVCBpbnB1dCBkYXRhIHBlbmRpbmcASEZUIG1vbml0b3IgbW9kZSBncmFudGVkAEhGVCBtb25pdG9yIG1vZGUgcmV0cmFjdGVkAEhGVCBzb3VuZCBzZXF1ZW5jZSBoYXMgY29tcGxldGVkAEhPTUUgbm90IHNldABIYW5ndXAASSBoYXZlIG5vIG5hbWUhAEkvTyByZWFkeQBJTkZPUk06IABJbGxlZ2FsIGluc3RydWN0aW9uAEluZm9ybWF0aW9uIHJlcXVlc3QASW50ZXJydXB0AEtpbGxlZABMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgoATWFyayBzaGVsbCB2YXJpYWJsZXMgYXMgdW5jaGFuZ2VhYmxlLgogICAgCiAgICBNYXJrIGVhY2ggTkFNRSBhcyByZWFkLW9ubHk7IHRoZSB2YWx1ZXMgb2YgdGhlc2UgTkFNRXMgbWF5IG5vdCBiZQogICAgY2hhbmdlZCBieSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQuICBJZiBWQUxVRSBpcyBzdXBwbGllZCwgYXNzaWduIFZBTFVFCiAgICBiZWZvcmUgbWFya2luZyBhcyByZWFkLW9ubHkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlZmVyIHRvIGluZGV4ZWQgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1BCXJlZmVyIHRvIGFzc29jaWF0aXZlIGFycmF5IHZhcmlhYmxlcwogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlYWRvbmx5IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMsCiAgICAJCWRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgLWYgb3B0aW9uIGlzIGdpdmVuCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIGAtLScgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4ATW9kaWZ5IG9yIGRpc3BsYXkgY29tcGxldGlvbiBvcHRpb25zLgogICAgCiAgICBNb2RpZnkgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8gTkFNRXMgYXJlIHN1cHBsaWVkLAogICAgdGhlIGNvbXBsZXRpb24gY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLiAgSWYgbm8gT1BUSU9OcyBhcmUgZ2l2ZW4sIHByaW50CiAgICB0aGUgY29tcGxldGlvbiBvcHRpb25zIGZvciBlYWNoIE5BTUUgb3IgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgCS1vIG9wdGlvbglTZXQgY29tcGxldGlvbiBvcHRpb24gT1BUSU9OIGZvciBlYWNoIE5BTUUKICAgIAktRAkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSAiZGVmYXVsdCIgY29tbWFuZCBjb21wbGV0aW9uCiAgICAJLUUJCUNoYW5nZSBvcHRpb25zIGZvciB0aGUgImVtcHR5IiBjb21tYW5kIGNvbXBsZXRpb24KICAgIAogICAgVXNpbmcgYCtvJyBpbnN0ZWFkIG9mIGAtbycgdHVybnMgb2ZmIHRoZSBzcGVjaWZpZWQgb3B0aW9uLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAKICAgIEVhY2ggTkFNRSByZWZlcnMgdG8gYSBjb21tYW5kIGZvciB3aGljaCBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBtdXN0CiAgICBoYXZlIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSBgY29tcGxldGUnIGJ1aWx0aW4uICBJZiBubyBOQU1FcwogICAgYXJlIHN1cHBsaWVkLCBjb21wb3B0IG11c3QgYmUgY2FsbGVkIGJ5IGEgZnVuY3Rpb24gY3VycmVudGx5IGdlbmVyYXRpbmcKICAgIGNvbXBsZXRpb25zLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoYXQgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCiAgICBnZW5lcmF0b3IgYXJlIG1vZGlmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgTkFNRSBkb2VzIG5vdAogICAgaGF2ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBkZWZpbmVkLgBNb2RpZnkgc2hlbGwgcmVzb3VyY2UgbGltaXRzLgogICAgCiAgICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIGFuZCBwcm9jZXNzZXMKICAgIGl0IGNyZWF0ZXMsIG9uIHN5c3RlbXMgdGhhdCBhbGxvdyBzdWNoIGNvbnRyb2wuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1TCXVzZSB0aGUgYHNvZnQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1ICXVzZSB0aGUgYGhhcmQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1hCWFsbCBjdXJyZW50IGxpbWl0cyBhcmUgcmVwb3J0ZWQKICAgICAgLWIJdGhlIHNvY2tldCBidWZmZXIgc2l6ZQogICAgICAtYwl0aGUgbWF4aW11bSBzaXplIG9mIGNvcmUgZmlsZXMgY3JlYXRlZAogICAgICAtZAl0aGUgbWF4aW11bSBzaXplIG9mIGEgcHJvY2VzcydzIGRhdGEgc2VnbWVudAogICAgICAtZQl0aGUgbWF4aW11bSBzY2hlZHVsaW5nIHByaW9yaXR5IChgbmljZScpCiAgICAgIC1mCXRoZSBtYXhpbXVtIHNpemUgb2YgZmlsZXMgd3JpdHRlbiBieSB0aGUgc2hlbGwgYW5kIGl0cyBjaGlsZHJlbgogICAgICAtaQl0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzCiAgICAgIC1rCXRoZSBtYXhpbXVtIG51bWJlciBvZiBrcXVldWVzIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm9jZXNzCiAgICAgIC1sCXRoZSBtYXhpbXVtIHNpemUgYSBwcm9jZXNzIG1heSBsb2NrIGludG8gbWVtb3J5CiAgICAgIC1tCXRoZSBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplCiAgICAgIC1uCXRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICAgICAgLXAJdGhlIHBpcGUgYnVmZmVyIHNpemUKICAgICAgLXEJdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzCiAgICAgIC1yCXRoZSBtYXhpbXVtIHJlYWwtdGltZSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgICAgIC1zCXRoZSBtYXhpbXVtIHN0YWNrIHNpemUKICAgICAgLXQJdGhlIG1heGltdW0gYW1vdW50IG9mIGNwdSB0aW1lIGluIHNlY29uZHMKICAgICAgLXUJdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXIgcHJvY2Vzc2VzCiAgICAgIC12CXRoZSBzaXplIG9mIHZpcnR1YWwgbWVtb3J5CiAgICAgIC14CXRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGxvY2tzCiAgICAgIC1QCXRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG90ZXJtaW5hbHMKICAgICAgLVQJdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKICAgIAogICAgTm90IGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KICAgIAogICAgSWYgTElNSVQgaXMgZ2l2ZW4sIGl0IGlzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZTsgdGhlCiAgICBzcGVjaWFsIExJTUlUIHZhbHVlcyBgc29mdCcsIGBoYXJkJywgYW5kIGB1bmxpbWl0ZWQnIHN0YW5kIGZvciB0aGUKICAgIGN1cnJlbnQgc29mdCBsaW1pdCwgdGhlIGN1cnJlbnQgaGFyZCBsaW1pdCwgYW5kIG5vIGxpbWl0LCByZXNwZWN0aXZlbHkuCiAgICBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgcHJpbnRlZC4gIElmCiAgICBubyBvcHRpb24gaXMgZ2l2ZW4sIHRoZW4gLWYgaXMgYXNzdW1lZC4KICAgIAogICAgVmFsdWVzIGFyZSBpbiAxMDI0LWJ5dGUgaW5jcmVtZW50cywgZXhjZXB0IGZvciAtdCwgd2hpY2ggaXMgaW4gc2Vjb25kcywKICAgIC1wLCB3aGljaCBpcyBpbiBpbmNyZW1lbnRzIG9mIDUxMiBieXRlcywgYW5kIC11LCB3aGljaCBpcyBhbiB1bnNjYWxlZAogICAgbnVtYmVyIG9mIHByb2Nlc3Nlcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGFuIGVycm9yIG9jY3Vycy4ATW92ZSBqb2IgdG8gdGhlIGZvcmVncm91bmQuCiAgICAKICAgIFBsYWNlIHRoZSBqb2IgaWRlbnRpZmllZCBieSBKT0JfU1BFQyBpbiB0aGUgZm9yZWdyb3VuZCwgbWFraW5nIGl0IHRoZQogICAgY3VycmVudCBqb2IuICBJZiBKT0JfU1BFQyBpcyBub3QgcHJlc2VudCwgdGhlIHNoZWxsJ3Mgbm90aW9uIG9mIHRoZQogICAgY3VycmVudCBqb2IgaXMgdXNlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBTdGF0dXMgb2YgY29tbWFuZCBwbGFjZWQgaW4gZm9yZWdyb3VuZCwgb3IgZmFpbHVyZSBpZiBhbiBlcnJvciBvY2N1cnMuAE1vdmUgam9icyB0byB0aGUgYmFja2dyb3VuZC4KICAgIAogICAgUGxhY2UgdGhlIGpvYnMgaWRlbnRpZmllZCBieSBlYWNoIEpPQl9TUEVDIGluIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGV5CiAgICBoYWQgYmVlbiBzdGFydGVkIHdpdGggYCYnLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbgogICAgb2YgdGhlIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAE51bGwgY29tbWFuZC4KICAgIAogICAgTm8gZWZmZWN0OyB0aGUgY29tbWFuZCBkb2VzIG5vdGhpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBPTERQV0Qgbm90IHNldABQYXJzZSBvcHRpb24gYXJndW1lbnRzLgogICAgCiAgICBHZXRvcHRzIGlzIHVzZWQgYnkgc2hlbGwgcHJvY2VkdXJlcyB0byBwYXJzZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKICAgIGFzIG9wdGlvbnMuCiAgICAKICAgIE9QVFNUUklORyBjb250YWlucyB0aGUgb3B0aW9uIGxldHRlcnMgdG8gYmUgcmVjb2duaXplZDsgaWYgYSBsZXR0ZXIKICAgIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24sIHRoZSBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBhcmd1bWVudCwKICAgIHdoaWNoIHNob3VsZCBiZSBzZXBhcmF0ZWQgZnJvbSBpdCBieSB3aGl0ZSBzcGFjZS4KICAgIAogICAgRWFjaCB0aW1lIGl0IGlzIGludm9rZWQsIGdldG9wdHMgd2lsbCBwbGFjZSB0aGUgbmV4dCBvcHRpb24gaW4gdGhlCiAgICBzaGVsbCB2YXJpYWJsZSAkbmFtZSwgaW5pdGlhbGl6aW5nIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhpc3QsIGFuZAogICAgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGFyZ3VtZW50IHRvIGJlIHByb2Nlc3NlZCBpbnRvIHRoZSBzaGVsbAogICAgdmFyaWFibGUgT1BUSU5ELiAgT1BUSU5EIGlzIGluaXRpYWxpemVkIHRvIDEgZWFjaCB0aW1lIHRoZSBzaGVsbCBvcgogICAgYSBzaGVsbCBzY3JpcHQgaXMgaW52b2tlZC4gIFdoZW4gYW4gb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAogICAgZ2V0b3B0cyBwbGFjZXMgdGhhdCBhcmd1bWVudCBpbnRvIHRoZSBzaGVsbCB2YXJpYWJsZSBPUFRBUkcuCiAgICAKICAgIGdldG9wdHMgcmVwb3J0cyBlcnJvcnMgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgb2YgT1BUU1RSSU5HIGlzIGEgY29sb24sIGdldG9wdHMgdXNlcyBzaWxlbnQgZXJyb3IgcmVwb3J0aW5nLiAgSW4KICAgIHRoaXMgbW9kZSwgbm8gZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50ZWQuICBJZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZm91bmQgaW50byBPUFRBUkcuICBJZiBhCiAgICByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGdldG9wdHMgcGxhY2VzIGEgJzonIGludG8gTkFNRSBhbmQKICAgIHNldHMgT1BUQVJHIHRvIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvdW5kLiAgSWYgZ2V0b3B0cyBpcyBub3QgaW4KICAgIHNpbGVudCBtb2RlLCBhbmQgYW4gaW52YWxpZCBvcHRpb24gaXMgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgJz8nIGludG8KICAgIE5BTUUgYW5kIHVuc2V0cyBPUFRBUkcuICBJZiBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBmb3VuZCwgYSAnPycKICAgIGlzIHBsYWNlZCBpbiBOQU1FLCBPUFRBUkcgaXMgdW5zZXQsIGFuZCBhIGRpYWdub3N0aWMgbWVzc2FnZSBpcwogICAgcHJpbnRlZC4KICAgIAogICAgSWYgdGhlIHNoZWxsIHZhcmlhYmxlIE9QVEVSUiBoYXMgdGhlIHZhbHVlIDAsIGdldG9wdHMgZGlzYWJsZXMgdGhlCiAgICBwcmludGluZyBvZiBlcnJvciBtZXNzYWdlcywgZXZlbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCiAgICBPUFRTVFJJTkcgaXMgbm90IGEgY29sb24uICBPUFRFUlIgaGFzIHRoZSB2YWx1ZSAxIGJ5IGRlZmF1bHQuCiAgICAKICAgIEdldG9wdHMgbm9ybWFsbHkgcGFyc2VzIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgKCQwIC0gJDkpLCBidXQgaWYKICAgIG1vcmUgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhleSBhcmUgcGFyc2VkIGluc3RlYWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFuIG9wdGlvbiBpcyBmb3VuZDsgZmFpbHMgaWYgdGhlIGVuZCBvZiBvcHRpb25zIGlzCiAgICBlbmNvdW50ZXJlZCBvciBhbiBlcnJvciBvY2N1cnMuAFByaW50IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlwcmludCB0aGUgdmFsdWUgb2YgJFBXRCBpZiBpdCBuYW1lcyB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeQogICAgICAtUAlwcmludCB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBzeW1ib2xpYyBsaW5rcwogICAgCiAgICBCeSBkZWZhdWx0LCBgcHdkJyBiZWhhdmVzIGFzIGlmIGAtTCcgd2VyZSBzcGVjaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgIGNhbm5vdCBiZSByZWFkLgBRdWl0AFJlYWQgYSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KICAgIAogICAgUmVhZHMgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb3IgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQKICAgIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgbGluZSBpcyBzcGxpdCBpbnRvIGZpZWxkcyBhcyB3aXRoIHdvcmQKICAgIHNwbGl0dGluZywgYW5kIHRoZSBmaXJzdCB3b3JkIGlzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBOQU1FLCB0aGUgc2Vjb25kCiAgICB3b3JkIHRvIHRoZSBzZWNvbmQgTkFNRSwgYW5kIHNvIG9uLCB3aXRoIGFueSBsZWZ0b3ZlciB3b3JkcyBhc3NpZ25lZCB0bwogICAgdGhlIGxhc3QgTkFNRS4gIE9ubHkgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gJElGUyBhcmUgcmVjb2duaXplZCBhcyB3b3JkCiAgICBkZWxpbWl0ZXJzLgogICAgCiAgICBJZiBubyBOQU1FcyBhcmUgc3VwcGxpZWQsIHRoZSBsaW5lIHJlYWQgaXMgc3RvcmVkIGluIHRoZSBSRVBMWSB2YXJpYWJsZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgYXJyYXkJYXNzaWduIHRoZSB3b3JkcyByZWFkIHRvIHNlcXVlbnRpYWwgaW5kaWNlcyBvZiB0aGUgYXJyYXkKICAgIAkJdmFyaWFibGUgQVJSQVksIHN0YXJ0aW5nIGF0IHplcm8KICAgICAgLWQgZGVsaW0JY29udGludWUgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBERUxJTSBpcyByZWFkLCByYXRoZXIKICAgIAkJdGhhbiBuZXdsaW5lCiAgICAgIC1lCXVzZSBSZWFkbGluZSB0byBvYnRhaW4gdGhlIGxpbmUgaW4gYW4gaW50ZXJhY3RpdmUgc2hlbGwKICAgICAgLWkgdGV4dAl1c2UgVEVYVCBhcyB0aGUgaW5pdGlhbCB0ZXh0IGZvciBSZWFkbGluZQogICAgICAtbiBuY2hhcnMJcmV0dXJuIGFmdGVyIHJlYWRpbmcgTkNIQVJTIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gd2FpdGluZwogICAgCQlmb3IgYSBuZXdsaW5lLCBidXQgaG9ub3IgYSBkZWxpbWl0ZXIgaWYgZmV3ZXIgdGhhbgogICAgCQlOQ0hBUlMgY2hhcmFjdGVycyBhcmUgcmVhZCBiZWZvcmUgdGhlIGRlbGltaXRlcgogICAgICAtTiBuY2hhcnMJcmV0dXJuIG9ubHkgYWZ0ZXIgcmVhZGluZyBleGFjdGx5IE5DSEFSUyBjaGFyYWN0ZXJzLCB1bmxlc3MKICAgIAkJRU9GIGlzIGVuY291bnRlcmVkIG9yIHJlYWQgdGltZXMgb3V0LCBpZ25vcmluZyBhbnkKICAgIAkJZGVsaW1pdGVyCiAgICAgIC1wIHByb21wdAlvdXRwdXQgdGhlIHN0cmluZyBQUk9NUFQgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUgYmVmb3JlCiAgICAJCWF0dGVtcHRpbmcgdG8gcmVhZAogICAgICAtcglkbyBub3QgYWxsb3cgYmFja3NsYXNoZXMgdG8gZXNjYXBlIGFueSBjaGFyYWN0ZXJzCiAgICAgIC1zCWRvIG5vdCBlY2hvIGlucHV0IGNvbWluZyBmcm9tIGEgdGVybWluYWwKICAgICAgLXQgdGltZW91dAl0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgaWYgYSBjb21wbGV0ZSBsaW5lIG9mCiAgICAJCWlucHV0IGlzIG5vdCByZWFkIHdpdGhpbiBUSU1FT1VUIHNlY29uZHMuICBUaGUgdmFsdWUgb2YgdGhlCiAgICAJCVRNT1VUIHZhcmlhYmxlIGlzIHRoZSBkZWZhdWx0IHRpbWVvdXQuICBUSU1FT1VUIG1heSBiZSBhCiAgICAJCWZyYWN0aW9uYWwgbnVtYmVyLiAgSWYgVElNRU9VVCBpcyAwLCByZWFkIHJldHVybnMKICAgIAkJaW1tZWRpYXRlbHksIHdpdGhvdXQgdHJ5aW5nIHRvIHJlYWQgYW55IGRhdGEsIHJldHVybmluZwogICAgCQlzdWNjZXNzIG9ubHkgaWYgaW5wdXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBzcGVjaWZpZWQKICAgIAkJZmlsZSBkZXNjcmlwdG9yLiAgVGhlIGV4aXQgc3RhdHVzIGlzIGdyZWF0ZXIgdGhhbiAxMjgKICAgIAkJaWYgdGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQKICAgICAgLXUgZmQJcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB1bmxlc3MgZW5kLW9mLWZpbGUgaXMgZW5jb3VudGVyZWQsIHJlYWQgdGltZXMgb3V0CiAgICAoaW4gd2hpY2ggY2FzZSBpdCdzIGdyZWF0ZXIgdGhhbiAxMjgpLCBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgZXJyb3Igb2NjdXJzLAogICAgb3IgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50IHRvIC11LgBSZWFkIGxpbmVzIGZyb20gYSBmaWxlIGludG8gYW4gYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIEEgc3lub255bSBmb3IgYG1hcGZpbGUnLgBSZWFkIGxpbmVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGludG8gYW4gaW5kZXhlZCBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIHRoZSBpbmRleGVkIGFycmF5IHZhcmlhYmxlIEFSUkFZLCBvcgogICAgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSB2YXJpYWJsZSBNQVBGSUxFCiAgICBpcyB0aGUgZGVmYXVsdCBBUlJBWS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQgZGVsaW0JVXNlIERFTElNIHRvIHRlcm1pbmF0ZSBsaW5lcywgaW5zdGVhZCBvZiBuZXdsaW5lCiAgICAgIC1uIGNvdW50CUNvcHkgYXQgbW9zdCBDT1VOVCBsaW5lcy4gIElmIENPVU5UIGlzIDAsIGFsbCBsaW5lcyBhcmUgY29waWVkCiAgICAgIC1PIG9yaWdpbglCZWdpbiBhc3NpZ25pbmcgdG8gQVJSQVkgYXQgaW5kZXggT1JJR0lOLiAgVGhlIGRlZmF1bHQgaW5kZXggaXMgMAogICAgICAtcyBjb3VudAlEaXNjYXJkIHRoZSBmaXJzdCBDT1VOVCBsaW5lcyByZWFkCiAgICAgIC10CVJlbW92ZSBhIHRyYWlsaW5nIERFTElNIGZyb20gZWFjaCBsaW5lIHJlYWQgKGRlZmF1bHQgbmV3bGluZSkKICAgICAgLXUgZmQJUmVhZCBsaW5lcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgICAtQyBjYWxsYmFjawlFdmFsdWF0ZSBDQUxMQkFDSyBlYWNoIHRpbWUgUVVBTlRVTSBsaW5lcyBhcmUgcmVhZAogICAgICAtYyBxdWFudHVtCVNwZWNpZnkgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkIGJldHdlZW4gZWFjaCBjYWxsIHRvCiAgICAJCQlDQUxMQkFDSwogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIEFSUkFZCUFycmF5IHZhcmlhYmxlIG5hbWUgdG8gdXNlIGZvciBmaWxlIGRhdGEKICAgIAogICAgSWYgLUMgaXMgc3VwcGxpZWQgd2l0aG91dCAtYywgdGhlIGRlZmF1bHQgcXVhbnR1bSBpcyA1MDAwLiAgV2hlbgogICAgQ0FMTEJBQ0sgaXMgZXZhbHVhdGVkLCBpdCBpcyBzdXBwbGllZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJyYXkKICAgIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgYW5kIHRoZSBsaW5lIHRvIGJlIGFzc2lnbmVkIHRvIHRoYXQgZWxlbWVudAogICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICAKICAgIElmIG5vdCBzdXBwbGllZCB3aXRoIGFuIGV4cGxpY2l0IG9yaWdpbiwgbWFwZmlsZSB3aWxsIGNsZWFyIEFSUkFZIGJlZm9yZQogICAgYXNzaWduaW5nIHRvIGl0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgQVJSQVkgaXMgcmVhZG9ubHkgb3IKICAgIG5vdCBhbiBpbmRleGVkIGFycmF5LgBSZWNvcmQgbG9jawBSZW1lbWJlciBvciBkaXNwbGF5IHByb2dyYW0gbG9jYXRpb25zLgogICAgCiAgICBEZXRlcm1pbmUgYW5kIHJlbWVtYmVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGVhY2ggY29tbWFuZCBOQU1FLiAgSWYKICAgIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGluZm9ybWF0aW9uIGFib3V0IHJlbWVtYmVyZWQgY29tbWFuZHMgaXMgZGlzcGxheWVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZAlmb3JnZXQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FCiAgICAgIC1sCWRpc3BsYXkgaW4gYSBmb3JtYXQgdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1wIHBhdGhuYW1lCXVzZSBQQVRITkFNRSBhcyB0aGUgZnVsbCBwYXRobmFtZSBvZiBOQU1FCiAgICAgIC1yCWZvcmdldCBhbGwgcmVtZW1iZXJlZCBsb2NhdGlvbnMKICAgICAgLXQJcHJpbnQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FLCBwcmVjZWRpbmcKICAgIAkJZWFjaCBsb2NhdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIE5BTUUgaWYgbXVsdGlwbGUKICAgIAkJTkFNRXMgYXJlIGdpdmVuCiAgICBBcmd1bWVudHM6CiAgICAgIE5BTUUJRWFjaCBOQU1FIGlzIHNlYXJjaGVkIGZvciBpbiAkUEFUSCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QKICAgIAkJb2YgcmVtZW1iZXJlZCBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSBzdGFjay4KICAgIAogICAgUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGggemVyby4gIEZvciBleGFtcGxlOiBgcG9wZCArMCcKICAgIAkJcmVtb3ZlcyB0aGUgZmlyc3QgZGlyZWN0b3J5LCBgcG9wZCArMScgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAkJc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTogYHBvcGQgLTAnCiAgICAJCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCBgcG9wZCAtMScgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIGBkaXJzJyBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AUmVtb3ZlIGVhY2ggTkFNRSBmcm9tIHRoZSBsaXN0IG9mIGRlZmluZWQgYWxpYXNlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcmVtb3ZlIGFsbCBhbGlhcyBkZWZpbml0aW9ucwogICAgCiAgICBSZXR1cm4gc3VjY2VzcyB1bmxlc3MgYSBOQU1FIGlzIG5vdCBhbiBleGlzdGluZyBhbGlhcy4AUmVtb3ZlIGpvYnMgZnJvbSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZW1vdmVzIGVhY2ggSk9CU1BFQyBhcmd1bWVudCBmcm9tIHRoZSB0YWJsZSBvZiBhY3RpdmUgam9icy4gIFdpdGhvdXQKICAgIGFueSBKT0JTUEVDcywgdGhlIHNoZWxsIHVzZXMgaXRzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBqb2IuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlbW92ZSBhbGwgam9icyBpZiBKT0JTUEVDIGlzIG5vdCBzdXBwbGllZAogICAgICAtaAltYXJrIGVhY2ggSk9CU1BFQyBzbyB0aGF0IFNJR0hVUCBpcyBub3Qgc2VudCB0byB0aGUgam9iIGlmIHRoZQogICAgCQlzaGVsbCByZWNlaXZlcyBhIFNJR0hVUAogICAgICAtcglyZW1vdmUgb25seSBydW5uaW5nIGpvYnMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIG9yIEpPQlNQRUMgaXMgZ2l2ZW4uAFJlbW92ZXMgZW50cmllcyBmcm9tIHRoZSBkaXJlY3Rvcnkgc3RhY2suICBXaXRoIG5vIGFyZ3VtZW50cywgcmVtb3ZlcwogICAgdGhlIHRvcCBkaXJlY3RvcnkgZnJvbSB0aGUgc3RhY2ssIGFuZCBjaGFuZ2VzIHRvIHRoZSBuZXcgdG9wIGRpcmVjdG9yeS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JU3VwcHJlc3NlcyB0aGUgbm9ybWFsIGNoYW5nZSBvZiBkaXJlY3Rvcnkgd2hlbiByZW1vdmluZwogICAgCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IGBwb3BkICswJwogICAgCXJlbW92ZXMgdGhlIGZpcnN0IGRpcmVjdG9yeSwgYHBvcGQgKzEnIHRoZSBzZWNvbmQuCiAgICAKICAgICAgLU4JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTogYHBvcGQgLTAnCiAgICAJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIGBwb3BkIC0xJyB0aGUgbmV4dCB0byBsYXN0LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AUmVwbGFjZSB0aGUgc2hlbGwgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5ELCByZXBsYWNpbmcgdGhpcyBzaGVsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KICAgIEFSR1VNRU5UUyBiZWNvbWUgdGhlIGFyZ3VtZW50cyB0byBDT01NQU5ELiAgSWYgQ09NTUFORCBpcyBub3Qgc3BlY2lmaWVkLAogICAgYW55IHJlZGlyZWN0aW9ucyB0YWtlIGVmZmVjdCBpbiB0aGUgY3VycmVudCBzaGVsbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgbmFtZQlwYXNzIE5BTUUgYXMgdGhlIHplcm90aCBhcmd1bWVudCB0byBDT01NQU5ECiAgICAgIC1jCWV4ZWN1dGUgQ09NTUFORCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50CiAgICAgIC1sCXBsYWNlIGEgZGFzaCBpbiB0aGUgemVyb3RoIGFyZ3VtZW50IHRvIENPTU1BTkQKICAgIAogICAgSWYgdGhlIGNvbW1hbmQgY2Fubm90IGJlIGV4ZWN1dGVkLCBhIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbCBleGl0cywgdW5sZXNzCiAgICB0aGUgc2hlbGwgb3B0aW9uIGBleGVjZmFpbCcgaXMgc2V0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgQ09NTUFORCBpcyBub3QgZm91bmQgb3IgYSByZWRpcmVjdGlvbiBlcnJvciBvY2N1cnMuAFJlcG9ydCB0aW1lIGNvbnN1bWVkIGJ5IHBpcGVsaW5lJ3MgZXhlY3V0aW9uLgogICAgCiAgICBFeGVjdXRlIFBJUEVMSU5FIGFuZCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIHJlYWwgdGltZSwgdXNlciBDUFUgdGltZSwKICAgIGFuZCBzeXN0ZW0gQ1BVIHRpbWUgc3BlbnQgZXhlY3V0aW5nIFBJUEVMSU5FIHdoZW4gaXQgdGVybWluYXRlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgdGhlIHRpbWluZyBzdW1tYXJ5IGluIHRoZSBwb3J0YWJsZSBQb3NpeCBmb3JtYXQKICAgIAogICAgVGhlIHZhbHVlIG9mIHRoZSBUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG91dHB1dCBmb3JtYXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBzdGF0dXMgaXMgdGhlIHJldHVybiBzdGF0dXMgb2YgUElQRUxJTkUuAFJlc3VtZSBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgUmVzdW1lcyB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIGVuY2xvc2luZyBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuCiAgICBJZiBOIGlzIHNwZWNpZmllZCwgcmVzdW1lcyB0aGUgTnRoIGVuY2xvc2luZyBsb29wLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4AUmVzdW1lIGpvYiBpbiBmb3JlZ3JvdW5kLgogICAgCiAgICBFcXVpdmFsZW50IHRvIHRoZSBKT0JfU1BFQyBhcmd1bWVudCB0byB0aGUgYGZnJyBjb21tYW5kLiAgUmVzdW1lIGEKICAgIHN0b3BwZWQgb3IgYmFja2dyb3VuZCBqb2IuICBKT0JfU1BFQyBjYW4gc3BlY2lmeSBlaXRoZXIgYSBqb2IgbmFtZQogICAgb3IgYSBqb2IgbnVtYmVyLiAgRm9sbG93aW5nIEpPQl9TUEVDIHdpdGggYSBgJicgcGxhY2VzIHRoZSBqb2IgaW4KICAgIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGUgam9iIHNwZWNpZmljYXRpb24gaGFkIGJlZW4gc3VwcGxpZWQgYXMgYW4KICAgIGFyZ3VtZW50IHRvIGBiZycuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bWVkIGpvYi4AUmV0dXJuIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBSZXR1cm4gYW4gdW5zdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgZmFpbHMuAFJldHVybiBmcm9tIGEgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENhdXNlcyBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0IHRvIGV4aXQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgICBzcGVjaWZpZWQgYnkgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIHJldHVybiBzdGF0dXMgaXMgdGhhdCBvZiB0aGUKICAgIGxhc3QgY29tbWFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIG9yIHNjcmlwdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIE4sIG9yIGZhaWx1cmUgaWYgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbiBvciBzY3JpcHQuAFJldHVybiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyAiJGxpbmUgJGZpbGVuYW1lIi4gIFdpdGggRVhQUiwgcmV0dXJucwogICAgIiRsaW5lICRzdWJyb3V0aW5lICRmaWxlbmFtZSI7IHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8KICAgIHByb3ZpZGUgYSBzdGFjayB0cmFjZS4KICAgIAogICAgVGhlIHZhbHVlIG9mIEVYUFIgaW5kaWNhdGVzIGhvdyBtYW55IGNhbGwgZnJhbWVzIHRvIGdvIGJhY2sgYmVmb3JlIHRoZQogICAgY3VycmVudCBvbmU7IHRoZSB0b3AgZnJhbWUgaXMgZnJhbWUgMC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDAgdW5sZXNzIHRoZSBzaGVsbCBpcyBub3QgZXhlY3V0aW5nIGEgc2hlbGwgZnVuY3Rpb24gb3IgRVhQUgogICAgaXMgaW52YWxpZC4AUmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyAAUnVubmluZwBTZWdtZW50YXRpb24gZmF1bHQAU2VsZWN0IHdvcmRzIGZyb20gYSBsaXN0IGFuZCBleGVjdXRlIGNvbW1hbmRzLgogICAgCiAgICBUaGUgV09SRFMgYXJlIGV4cGFuZGVkLCBnZW5lcmF0aW5nIGEgbGlzdCBvZiB3b3Jkcy4gIFRoZQogICAgc2V0IG9mIGV4cGFuZGVkIHdvcmRzIGlzIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yLCBlYWNoCiAgICBwcmVjZWRlZCBieSBhIG51bWJlci4gIElmIGBpbiBXT1JEUycgaXMgbm90IHByZXNlbnQsIGBpbiAiJEAiJwogICAgaXMgYXNzdW1lZC4gIFRoZSBQUzMgcHJvbXB0IGlzIHRoZW4gZGlzcGxheWVkIGFuZCBhIGxpbmUgcmVhZAogICAgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBJZiB0aGUgbGluZSBjb25zaXN0cyBvZiB0aGUgbnVtYmVyCiAgICBjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgZGlzcGxheWVkIHdvcmRzLCB0aGVuIE5BTUUgaXMgc2V0CiAgICB0byB0aGF0IHdvcmQuICBJZiB0aGUgbGluZSBpcyBlbXB0eSwgV09SRFMgYW5kIHRoZSBwcm9tcHQgYXJlCiAgICByZWRpc3BsYXllZC4gIElmIEVPRiBpcyByZWFkLCB0aGUgY29tbWFuZCBjb21wbGV0ZXMuICBBbnkgb3RoZXIKICAgIHZhbHVlIHJlYWQgY2F1c2VzIE5BTUUgdG8gYmUgc2V0IHRvIG51bGwuICBUaGUgbGluZSByZWFkIGlzIHNhdmVkCiAgICBpbiB0aGUgdmFyaWFibGUgUkVQTFkuICBDT01NQU5EUyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCBzZWxlY3Rpb24KICAgIHVudGlsIGEgYnJlYWsgY29tbWFuZCBpcyBleGVjdXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4AU2VuZCBhIHNpZ25hbCB0byBhIGpvYi4KICAgIAogICAgU2VuZCB0aGUgcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgUElEIG9yIEpPQlNQRUMgdGhlIHNpZ25hbCBuYW1lZCBieQogICAgU0lHU1BFQyBvciBTSUdOVU0uICBJZiBuZWl0aGVyIFNJR1NQRUMgbm9yIFNJR05VTSBpcyBwcmVzZW50LCB0aGVuCiAgICBTSUdURVJNIGlzIGFzc3VtZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1zIHNpZwlTSUcgaXMgYSBzaWduYWwgbmFtZQogICAgICAtbiBzaWcJU0lHIGlzIGEgc2lnbmFsIG51bWJlcgogICAgICAtbAlsaXN0IHRoZSBzaWduYWwgbmFtZXM7IGlmIGFyZ3VtZW50cyBmb2xsb3cgYC1sJyB0aGV5IGFyZQogICAgCQlhc3N1bWVkIHRvIGJlIHNpZ25hbCBudW1iZXJzIGZvciB3aGljaCBuYW1lcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIC1MCXN5bm9ueW0gZm9yIC1sCiAgICAKICAgIEtpbGwgaXMgYSBzaGVsbCBidWlsdGluIGZvciB0d28gcmVhc29uczogaXQgYWxsb3dzIGpvYiBJRHMgdG8gYmUgdXNlZAogICAgaW5zdGVhZCBvZiBwcm9jZXNzIElEcywgYW5kIGFsbG93cyBwcm9jZXNzZXMgdG8gYmUga2lsbGVkIGlmIHRoZSBsaW1pdAogICAgb24gcHJvY2Vzc2VzIHRoYXQgeW91IGNhbiBjcmVhdGUgaXMgcmVhY2hlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4AU2V0IFJlYWRsaW5lIGtleSBiaW5kaW5ncyBhbmQgdmFyaWFibGVzLgogICAgCiAgICBCaW5kIGEga2V5IHNlcXVlbmNlIHRvIGEgUmVhZGxpbmUgZnVuY3Rpb24gb3IgYSBtYWNybywgb3Igc2V0IGEKICAgIFJlYWRsaW5lIHZhcmlhYmxlLiAgVGhlIG5vbi1vcHRpb24gYXJndW1lbnQgc3ludGF4IGlzIGVxdWl2YWxlbnQgdG8KICAgIHRoYXQgZm91bmQgaW4gfi8uaW5wdXRyYywgYnV0IG11c3QgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50OgogICAgZS5nLiwgYmluZCAnIlxDLXhcQy1yIjogcmUtcmVhZC1pbml0LWZpbGUnLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbSAga2V5bWFwICAgICAgICAgVXNlIEtFWU1BUCBhcyB0aGUga2V5bWFwIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4gIEFjY2VwdGFibGUga2V5bWFwIG5hbWVzIGFyZSBlbWFjcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWNzLXN0YW5kYXJkLCBlbWFjcy1tZXRhLCBlbWFjcy1jdGx4LCB2aSwgdmktbW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpLWNvbW1hbmQsIGFuZCB2aS1pbnNlcnQuCiAgICAgIC1sICAgICAgICAgICAgICAgICBMaXN0IG5hbWVzIG9mIGZ1bmN0aW9ucy4KICAgICAgLVAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb24gbmFtZXMgYW5kIGJpbmRpbmdzLgogICAgICAtcCAgICAgICAgICAgICAgICAgTGlzdCBmdW5jdGlvbnMgYW5kIGJpbmRpbmdzIGluIGEgZm9ybSB0aGF0IGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkIGFzIGlucHV0LgogICAgICAtUyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgIC1zICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgdGhhdCBpbnZva2UgbWFjcm9zIGFuZCB0aGVpciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1WICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMKICAgICAgLXYgICAgICAgICAgICAgICAgIExpc3QgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBpbiBhIGZvcm0gdGhhdCBjYW4KICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLXEgIGZ1bmN0aW9uLW5hbWUgIFF1ZXJ5IGFib3V0IHdoaWNoIGtleXMgaW52b2tlIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXUgIGZ1bmN0aW9uLW5hbWUgIFVuYmluZCBhbGwga2V5cyB3aGljaCBhcmUgYm91bmQgdG8gdGhlIG5hbWVkIGZ1bmN0aW9uLgogICAgICAtciAga2V5c2VxICAgICAgICAgUmVtb3ZlIHRoZSBiaW5kaW5nIGZvciBLRVlTRVEuCiAgICAgIC1mICBmaWxlbmFtZSAgICAgICBSZWFkIGtleSBiaW5kaW5ncyBmcm9tIEZJTEVOQU1FLgogICAgICAteCAga2V5c2VxOnNoZWxsLWNvbW1hbmQJQ2F1c2UgU0hFTEwtQ09NTUFORCB0byBiZSBleGVjdXRlZCB3aGVuCiAgICAJCQkJS0VZU0VRIGlzIGVudGVyZWQuCiAgICAgIC1YICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgYm91bmQgd2l0aCAteCBhbmQgYXNzb2NpYXRlZCBjb21tYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBiaW5kIHJldHVybnMgMCB1bmxlc3MgYW4gdW5yZWNvZ25pemVkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuAFNldCBhbmQgdW5zZXQgc2hlbGwgb3B0aW9ucy4KICAgIAogICAgQ2hhbmdlIHRoZSBzZXR0aW5nIG9mIGVhY2ggc2hlbGwgb3B0aW9uIE9QVE5BTUUuICBXaXRob3V0IGFueSBvcHRpb24KICAgIGFyZ3VtZW50cywgbGlzdCBhbGwgc2hlbGwgb3B0aW9ucyB3aXRoIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgZWFjaAogICAgaXMgc2V0LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbwlyZXN0cmljdCBPUFROQU1FcyB0byB0aG9zZSBkZWZpbmVkIGZvciB1c2Ugd2l0aCBgc2V0IC1vJwogICAgICAtcAlwcmludCBlYWNoIHNoZWxsIG9wdGlvbiB3aXRoIGFuIGluZGljYXRpb24gb2YgaXRzIHN0YXR1cwogICAgICAtcQlzdXBwcmVzcyBvdXRwdXQKICAgICAgLXMJZW5hYmxlIChzZXQpIGVhY2ggT1BUTkFNRQogICAgICAtdQlkaXNhYmxlICh1bnNldCkgZWFjaCBPUFROQU1FCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIE9QVE5BTUUgaXMgZW5hYmxlZDsgZmFpbHMgaWYgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIGdpdmVuIG9yIE9QVE5BTUUgaXMgZGlzYWJsZWQuAFNldCBleHBvcnQgYXR0cmlidXRlIGZvciBzaGVsbCB2YXJpYWJsZXMuCiAgICAKICAgIE1hcmtzIGVhY2ggTkFNRSBmb3IgYXV0b21hdGljIGV4cG9ydCB0byB0aGUgZW52aXJvbm1lbnQgb2Ygc3Vic2VxdWVudGx5CiAgICBleGVjdXRlZCBjb21tYW5kcy4gIElmIFZBTFVFIGlzIHN1cHBsaWVkLCBhc3NpZ24gVkFMVUUgYmVmb3JlIGV4cG9ydGluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJcmVmZXIgdG8gc2hlbGwgZnVuY3Rpb25zCiAgICAgIC1uCXJlbW92ZSB0aGUgZXhwb3J0IHByb3BlcnR5IGZyb20gZWFjaCBOQU1FCiAgICAgIC1wCWRpc3BsYXkgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwogICAgCiAgICBBbiBhcmd1bWVudCBvZiBgLS0nIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAFNldCBvciB1bnNldCB2YWx1ZXMgb2Ygc2hlbGwgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBDaGFuZ2UgdGhlIHZhbHVlIG9mIHNoZWxsIGF0dHJpYnV0ZXMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgb3IKICAgIGRpc3BsYXkgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2hlbGwgdmFyaWFibGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSAgTWFyayB2YXJpYWJsZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGNyZWF0ZWQgZm9yIGV4cG9ydC4KICAgICAgLWIgIE5vdGlmeSBvZiBqb2IgdGVybWluYXRpb24gaW1tZWRpYXRlbHkuCiAgICAgIC1lICBFeGl0IGltbWVkaWF0ZWx5IGlmIGEgY29tbWFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogICAgICAtZiAgRGlzYWJsZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiAoZ2xvYmJpbmcpLgogICAgICAtaCAgUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIGNvbW1hbmRzIGFzIHRoZXkgYXJlIGxvb2tlZCB1cC4KICAgICAgLWsgIEFsbCBhc3NpZ25tZW50IGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYQogICAgICAgICAgY29tbWFuZCwgbm90IGp1c3QgdGhvc2UgdGhhdCBwcmVjZWRlIHRoZSBjb21tYW5kIG5hbWUuCiAgICAgIC1tICBKb2IgY29udHJvbCBpcyBlbmFibGVkLgogICAgICAtbiAgUmVhZCBjb21tYW5kcyBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KICAgICAgLW8gb3B0aW9uLW5hbWUKICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBvcHRpb24tbmFtZToKICAgICAgICAgICAgICBhbGxleHBvcnQgICAgc2FtZSBhcyAtYQogICAgICAgICAgICAgIGJyYWNlZXhwYW5kICBzYW1lIGFzIC1CCiAgICAgICAgICAgICAgZW1hY3MgICAgICAgIHVzZSBhbiBlbWFjcy1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgZXJyZXhpdCAgICAgIHNhbWUgYXMgLWUKICAgICAgICAgICAgICBlcnJ0cmFjZSAgICAgc2FtZSBhcyAtRQogICAgICAgICAgICAgIGZ1bmN0cmFjZSAgICBzYW1lIGFzIC1UCiAgICAgICAgICAgICAgaGFzaGFsbCAgICAgIHNhbWUgYXMgLWgKICAgICAgICAgICAgICBoaXN0ZXhwYW5kICAgc2FtZSBhcyAtSAogICAgICAgICAgICAgIGhpc3RvcnkgICAgICBlbmFibGUgY29tbWFuZCBoaXN0b3J5CiAgICAgICAgICAgICAgaWdub3JlZW9mICAgIHRoZSBzaGVsbCB3aWxsIG5vdCBleGl0IHVwb24gcmVhZGluZyBFT0YKICAgICAgICAgICAgICBpbnRlcmFjdGl2ZS1jb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBjb21tZW50cyB0byBhcHBlYXIgaW4gaW50ZXJhY3RpdmUgY29tbWFuZHMKICAgICAgICAgICAgICBrZXl3b3JkICAgICAgc2FtZSBhcyAtawogICAgICAgICAgICAgIG1vbml0b3IgICAgICBzYW1lIGFzIC1tCiAgICAgICAgICAgICAgbm9jbG9iYmVyICAgIHNhbWUgYXMgLUMKICAgICAgICAgICAgICBub2V4ZWMgICAgICAgc2FtZSBhcyAtbgogICAgICAgICAgICAgIG5vZ2xvYiAgICAgICBzYW1lIGFzIC1mCiAgICAgICAgICAgICAgbm9sb2cgICAgICAgIGN1cnJlbnRseSBhY2NlcHRlZCBidXQgaWdub3JlZAogICAgICAgICAgICAgIG5vdGlmeSAgICAgICBzYW1lIGFzIC1iCiAgICAgICAgICAgICAgbm91bnNldCAgICAgIHNhbWUgYXMgLXUKICAgICAgICAgICAgICBvbmVjbWQgICAgICAgc2FtZSBhcyAtdAogICAgICAgICAgICAgIHBoeXNpY2FsICAgICBzYW1lIGFzIC1QCiAgICAgICAgICAgICAgcGlwZWZhaWwgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBwaXBlbGluZSBpcyB0aGUgc3RhdHVzIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGNvbW1hbmQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6ZXJvIGlmIG5vIGNvbW1hbmQgZXhpdGVkIHdpdGggYSBub24temVybyBzdGF0dXMKICAgICAgICAgICAgICBwb3NpeCAgICAgICAgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBiYXNoIHdoZXJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gdGhlIFBvc2l4IHN0YW5kYXJkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgIHByaXZpbGVnZWQgICBzYW1lIGFzIC1wCiAgICAgICAgICAgICAgdmVyYm9zZSAgICAgIHNhbWUgYXMgLXYKICAgICAgICAgICAgICB2aSAgICAgICAgICAgdXNlIGEgdmktc3R5bGUgbGluZSBlZGl0aW5nIGludGVyZmFjZQogICAgICAgICAgICAgIHh0cmFjZSAgICAgICBzYW1lIGFzIC14CiAgICAgIC1wICBUdXJuZWQgb24gd2hlbmV2ZXIgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcyBkbyBub3QgbWF0Y2guCiAgICAgICAgICBEaXNhYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSAkRU5WIGZpbGUgYW5kIGltcG9ydGluZyBvZiBzaGVsbAogICAgICAgICAgZnVuY3Rpb25zLiAgVHVybmluZyB0aGlzIG9wdGlvbiBvZmYgY2F1c2VzIHRoZSBlZmZlY3RpdmUgdWlkIGFuZAogICAgICAgICAgZ2lkIHRvIGJlIHNldCB0byB0aGUgcmVhbCB1aWQgYW5kIGdpZC4KICAgICAgLXQgIEV4aXQgYWZ0ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nIG9uZSBjb21tYW5kLgogICAgICAtdSAgVHJlYXQgdW5zZXQgdmFyaWFibGVzIGFzIGFuIGVycm9yIHdoZW4gc3Vic3RpdHV0aW5nLgogICAgICAtdiAgUHJpbnQgc2hlbGwgaW5wdXQgbGluZXMgYXMgdGhleSBhcmUgcmVhZC4KICAgICAgLXggIFByaW50IGNvbW1hbmRzIGFuZCB0aGVpciBhcmd1bWVudHMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAgICAgIC1CICB0aGUgc2hlbGwgd2lsbCBwZXJmb3JtIGJyYWNlIGV4cGFuc2lvbgogICAgICAtQyAgSWYgc2V0LCBkaXNhbGxvdyBleGlzdGluZyByZWd1bGFyIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICBieSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuCiAgICAgIC1FICBJZiBzZXQsIHRoZSBFUlIgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtSCAgRW5hYmxlICEgc3R5bGUgaGlzdG9yeSBzdWJzdGl0dXRpb24uICBUaGlzIGZsYWcgaXMgb24KICAgICAgICAgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgc2hlbGwgaXMgaW50ZXJhY3RpdmUuCiAgICAgIC1QICBJZiBzZXQsIGRvIG5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzCiAgICAgICAgICBzdWNoIGFzIGNkIHdoaWNoIGNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIC1UICBJZiBzZXQsIHRoZSBERUJVRyBhbmQgUkVUVVJOIHRyYXBzIGFyZSBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtLSAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGFyZ3VtZW50cywgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICAgICAgYXJlIHVuc2V0LgogICAgICAtICAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBUaGUgLXggYW5kIC12IG9wdGlvbnMgYXJlIHR1cm5lZCBvZmYuCiAgICAKICAgIFVzaW5nICsgcmF0aGVyIHRoYW4gLSBjYXVzZXMgdGhlc2UgZmxhZ3MgdG8gYmUgdHVybmVkIG9mZi4gIFRoZQogICAgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCB1cG9uIGludm9jYXRpb24gb2YgdGhlIHNoZWxsLiAgVGhlIGN1cnJlbnQKICAgIHNldCBvZiBmbGFncyBtYXkgYmUgZm91bmQgaW4gJC0uICBUaGUgcmVtYWluaW5nIG4gQVJHcyBhcmUgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycyBhbmQgYXJlIGFzc2lnbmVkLCBpbiBvcmRlciwgdG8gJDEsICQyLCAuLiAkbi4gIElmIG5vCiAgICBBUkdzIGFyZSBnaXZlbiwgYWxsIHNoZWxsIHZhcmlhYmxlcyBhcmUgcHJpbnRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBBIHN5bm9ueW0gZm9yIGBkZWNsYXJlJy4gIFNlZSBgaGVscCBkZWNsYXJlJy4AU2V0IHZhcmlhYmxlIHZhbHVlcyBhbmQgYXR0cmlidXRlcy4KICAgIAogICAgRGVjbGFyZSB2YXJpYWJsZXMgYW5kIGdpdmUgdGhlbSBhdHRyaWJ1dGVzLiAgSWYgbm8gTkFNRXMgYXJlIGdpdmVuLAogICAgZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXJlc3RyaWN0IGFjdGlvbiBvciBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIGFuZCBkZWZpbml0aW9ucwogICAgICAtRglyZXN0cmljdCBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIG9ubHkgKHBsdXMgbGluZSBudW1iZXIgYW5kCiAgICAJCXNvdXJjZSBmaWxlIHdoZW4gZGVidWdnaW5nKQogICAgICAtZwljcmVhdGUgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIHVzZWQgaW4gYSBzaGVsbCBmdW5jdGlvbjsgb3RoZXJ3aXNlCiAgICAJCWlnbm9yZWQKICAgICAgLXAJZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWUgb2YgZWFjaCBOQU1FCiAgICAKICAgIE9wdGlvbnMgd2hpY2ggc2V0IGF0dHJpYnV0ZXM6CiAgICAgIC1hCXRvIG1ha2UgTkFNRXMgaW5kZXhlZCBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLUEJdG8gbWFrZSBOQU1FcyBhc3NvY2lhdGl2ZSBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLWkJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgaW50ZWdlcicgYXR0cmlidXRlCiAgICAgIC1sCXRvIGNvbnZlcnQgTkFNRXMgdG8gbG93ZXIgY2FzZSBvbiBhc3NpZ25tZW50CiAgICAgIC1uCW1ha2UgTkFNRSBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgaXRzIHZhbHVlCiAgICAgIC1yCXRvIG1ha2UgTkFNRXMgcmVhZG9ubHkKICAgICAgLXQJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgdHJhY2UnIGF0dHJpYnV0ZQogICAgICAtdQl0byBjb252ZXJ0IE5BTUVzIHRvIHVwcGVyIGNhc2Ugb24gYXNzaWdubWVudAogICAgICAteAl0byBtYWtlIE5BTUVzIGV4cG9ydAogICAgCiAgICBVc2luZyBgKycgaW5zdGVhZCBvZiBgLScgdHVybnMgb2ZmIHRoZSBnaXZlbiBhdHRyaWJ1dGUuCiAgICAKICAgIFZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlZ2VyIGF0dHJpYnV0ZSBoYXZlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAoc2VlCiAgICB0aGUgYGxldCcgY29tbWFuZCkgcGVyZm9ybWVkIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUuCiAgICAKICAgIFdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uLCBgZGVjbGFyZScgbWFrZXMgTkFNRXMgbG9jYWwsIGFzIHdpdGggdGhlIGBsb2NhbCcKICAgIGNvbW1hbmQuICBUaGUgYC1nJyBvcHRpb24gc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYSB2YXJpYWJsZQogICAgYXNzaWdubWVudCBlcnJvciBvY2N1cnMuAFNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYABTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgAFNoZWxsIG9wdGlvbnM6CgBTaGlmdCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAKICAgIFJlbmFtZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzICROKzEsJE4rMiAuLi4gdG8gJDEsJDIgLi4uICBJZiBOIGlzCiAgICBub3QgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE4gaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuICQjLgBTaWduYWwgJWQAU3BlY2lmeSBob3cgYXJndW1lbnRzIGFyZSB0byBiZSBjb21wbGV0ZWQgYnkgUmVhZGxpbmUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIHNwZWNpZnkgaG93IGFyZ3VtZW50cyBhcmUgdG8gYmUgY29tcGxldGVkLiAgSWYgbm8gb3B0aW9ucwogICAgYXJlIHN1cHBsaWVkLCBleGlzdGluZyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zIGFyZSBwcmludGVkIGluIGEgd2F5IHRoYXQKICAgIGFsbG93cyB0aGVtIHRvIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgZXhpc3RpbmcgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucyBpbiBhIHJldXNhYmxlIGZvcm1hdAogICAgICAtcglyZW1vdmUgYSBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24gZm9yIGVhY2ggTkFNRSwgb3IsIGlmIG5vCiAgICAJCU5BTUVzIGFyZSBzdXBwbGllZCwgYWxsIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbnMKICAgICAgLUQJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIGFzIHRoZSBkZWZhdWx0IGZvciBjb21tYW5kcwogICAgCQl3aXRob3V0IGFueSBzcGVjaWZpYyBjb21wbGV0aW9uIGRlZmluZWQKICAgICAgLUUJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIHRvICJlbXB0eSIgY29tbWFuZHMgLS0KICAgIAkJY29tcGxldGlvbiBhdHRlbXB0ZWQgb24gYSBibGFuayBsaW5lCiAgICAKICAgIFdoZW4gY29tcGxldGlvbiBpcyBhdHRlbXB0ZWQsIHRoZSBhY3Rpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGUKICAgIHVwcGVyY2FzZS1sZXR0ZXIgb3B0aW9ucyBhcmUgbGlzdGVkIGFib3ZlLiAgVGhlIC1EIG9wdGlvbiB0YWtlcwogICAgcHJlY2VkZW5jZSBvdmVyIC1FLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBTdG9wcGVkAFN0b3BwZWQgKHNpZ25hbCkAU3RvcHBlZCAodHR5IGlucHV0KQBTdG9wcGVkICh0dHkgb3V0cHV0KQBTdG9wcGVkKCVzKQBTdXNwZW5kIHNoZWxsIGV4ZWN1dGlvbi4KICAgIAogICAgU3VzcGVuZCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc2hlbGwgdW50aWwgaXQgcmVjZWl2ZXMgYSBTSUdDT05UIHNpZ25hbC4KICAgIFVubGVzcyBmb3JjZWQsIGxvZ2luIHNoZWxscyBjYW5ub3QgYmUgc3VzcGVuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglmb3JjZSB0aGUgc3VzcGVuZCwgZXZlbiBpZiB0aGUgc2hlbGwgaXMgYSBsb2dpbiBzaGVsbAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3Mgam9iIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBUSU1FRk9STUFUOiBgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAVGVybWluYXRlZABUaGUgbWFpbCBpbiAlcyBoYXMgYmVlbiByZWFkCgBUaGVyZSBhcmUgcnVubmluZyBqb2JzLgoAVGhlcmUgYXJlIHN0b3BwZWQgam9icy4KAFRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIGBoZWxwJyB0byBzZWUgdGhpcyBsaXN0LgpUeXBlIGBoZWxwIG5hbWUnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGZ1bmN0aW9uIGBuYW1lJy4KVXNlIGBpbmZvIGJhc2gnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIHNoZWxsIGluIGdlbmVyYWwuClVzZSBgbWFuIC1rJyBvciBgaW5mbycgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgBUcmFwIHNpZ25hbHMgYW5kIG90aGVyIGV2ZW50cy4KICAgIAogICAgRGVmaW5lcyBhbmQgYWN0aXZhdGVzIGhhbmRsZXJzIHRvIGJlIHJ1biB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyBzaWduYWxzCiAgICBvciBvdGhlciBjb25kaXRpb25zLgogICAgCiAgICBBUkcgaXMgYSBjb21tYW5kIHRvIGJlIHJlYWQgYW5kIGV4ZWN1dGVkIHdoZW4gdGhlIHNoZWxsIHJlY2VpdmVzIHRoZQogICAgc2lnbmFsKHMpIFNJR05BTF9TUEVDLiAgSWYgQVJHIGlzIGFic2VudCAoYW5kIGEgc2luZ2xlIFNJR05BTF9TUEVDCiAgICBpcyBzdXBwbGllZCkgb3IgYC0nLCBlYWNoIHNwZWNpZmllZCBzaWduYWwgaXMgcmVzZXQgdG8gaXRzIG9yaWdpbmFsCiAgICB2YWx1ZS4gIElmIEFSRyBpcyB0aGUgbnVsbCBzdHJpbmcgZWFjaCBTSUdOQUxfU1BFQyBpcyBpZ25vcmVkIGJ5IHRoZQogICAgc2hlbGwgYW5kIGJ5IHRoZSBjb21tYW5kcyBpdCBpbnZva2VzLgogICAgCiAgICBJZiBhIFNJR05BTF9TUEVDIGlzIEVYSVQgKDApIEFSRyBpcyBleGVjdXRlZCBvbiBleGl0IGZyb20gdGhlIHNoZWxsLiAgSWYKICAgIGEgU0lHTkFMX1NQRUMgaXMgREVCVUcsIEFSRyBpcyBleGVjdXRlZCBiZWZvcmUgZXZlcnkgc2ltcGxlIGNvbW1hbmQuICBJZgogICAgYSBTSUdOQUxfU1BFQyBpcyBSRVRVUk4sIEFSRyBpcyBleGVjdXRlZCBlYWNoIHRpbWUgYSBzaGVsbCBmdW5jdGlvbiBvciBhCiAgICBzY3JpcHQgcnVuIGJ5IHRoZSAuIG9yIHNvdXJjZSBidWlsdGlucyBmaW5pc2hlcyBleGVjdXRpbmcuICBBIFNJR05BTF9TUEVDCiAgICBvZiBFUlIgbWVhbnMgdG8gZXhlY3V0ZSBBUkcgZWFjaCB0aW1lIGEgY29tbWFuZCdzIGZhaWx1cmUgd291bGQgY2F1c2UgdGhlCiAgICBzaGVsbCB0byBleGl0IHdoZW4gdGhlIC1lIG9wdGlvbiBpcyBlbmFibGVkLgogICAgCiAgICBJZiBubyBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCB0cmFwIHByaW50cyB0aGUgbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkCiAgICB3aXRoIGVhY2ggc2lnbmFsLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbAlwcmludCBhIGxpc3Qgb2Ygc2lnbmFsIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG51bWJlcnMKICAgICAgLXAJZGlzcGxheSB0aGUgdHJhcCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBTSUdOQUxfU1BFQwogICAgCiAgICBFYWNoIFNJR05BTF9TUEVDIGlzIGVpdGhlciBhIHNpZ25hbCBuYW1lIGluIDxzaWduYWwuaD4gb3IgYSBzaWduYWwgbnVtYmVyLgogICAgU2lnbmFsIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGFuZCB0aGUgU0lHIHByZWZpeCBpcyBvcHRpb25hbC4gIEEKICAgIHNpZ25hbCBtYXkgYmUgc2VudCB0byB0aGUgc2hlbGwgd2l0aCAia2lsbCAtc2lnbmFsICQkIi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgU0lHU1BFQyBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBUeXBlIGAlcyAtYyAiaGVscCBzZXQiJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaGVsbCBvcHRpb25zLgoAVHlwZSBgJXMgLWMgaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgYnVpbHRpbiBjb21tYW5kcy4KAFVua25vd24gU2lnbmFsICMAVW5rbm93biBTaWduYWwgIyVkAFVua25vd24gZXJyb3IAVW5rbm93biBzdGF0dXMAVW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHNoZWxsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgb3IgZnVuY3Rpb24uCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIGZ1bmN0aW9uCiAgICAgIC12CXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIHZhcmlhYmxlCiAgICAgIC1uCXRyZWF0IGVhY2ggTkFNRSBhcyBhIG5hbWUgcmVmZXJlbmNlIGFuZCB1bnNldCB0aGUgdmFyaWFibGUgaXRzZWxmCiAgICAJCXJhdGhlciB0aGFuIHRoZSB2YXJpYWJsZSBpdCByZWZlcmVuY2VzCiAgICAKICAgIFdpdGhvdXQgb3B0aW9ucywgdW5zZXQgZmlyc3QgdHJpZXMgdG8gdW5zZXQgYSB2YXJpYWJsZSwgYW5kIGlmIHRoYXQgZmFpbHMsCiAgICB0cmllcyB0byB1bnNldCBhIGZ1bmN0aW9uLgogICAgCiAgICBTb21lIHZhcmlhYmxlcyBjYW5ub3QgYmUgdW5zZXQ7IGFsc28gc2VlIGByZWFkb25seScuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhIE5BTUUgaXMgcmVhZC1vbmx5LgBVcmdlbnQgSU8gY29uZGl0aW9uAFVzYWdlOgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSAuLi4KCSVzIFtHTlUgbG9uZyBvcHRpb25dIFtvcHRpb25dIHNjcmlwdC1maWxlIC4uLgoAVXNlICIlcyIgdG8gbGVhdmUgdGhlIHNoZWxsLgoAVXNlIHRoZSBgYmFzaGJ1ZycgY29tbWFuZCB0byByZXBvcnQgYnVncy4KAFVzZXIgc2lnbmFsIDEAVXNlciBzaWduYWwgMgBXYWl0IGZvciBqb2IgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIGlkZW50aWZpZWQgYnkgYW4gSUQsIHdoaWNoIG1heSBiZSBhIHByb2Nlc3MgSUQgb3IgYQogICAgam9iIHNwZWNpZmljYXRpb24sIGFuZCByZXBvcnRzIGl0cyB0ZXJtaW5hdGlvbiBzdGF0dXMuICBJZiBJRCBpcyBub3QKICAgIGdpdmVuLCB3YWl0cyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgdGhlIHJldHVybgogICAgc3RhdHVzIGlzIHplcm8uICBJZiBJRCBpcyBhIGEgam9iIHNwZWNpZmljYXRpb24sIHdhaXRzIGZvciBhbGwgcHJvY2Vzc2VzCiAgICBpbiB0aGF0IGpvYidzIHBpcGVsaW5lLgogICAgCiAgICBJZiB0aGUgLW4gb3B0aW9uIGlzIHN1cHBsaWVkLCB3YWl0cyBmb3IgdGhlIG5leHQgam9iIHRvIHRlcm1pbmF0ZSBhbmQKICAgIHJldHVybnMgaXRzIGV4aXQgc3RhdHVzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBJRDsgZmFpbHMgaWYgSUQgaXMgaW52YWxpZCBvciBhbiBpbnZhbGlkCiAgICBvcHRpb24gaXMgZ2l2ZW4uAFdhaXQgZm9yIHByb2Nlc3MgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIHNwZWNpZmllZCBieSBhIFBJRCBhbmQgcmVwb3J0cyBpdHMgdGVybWluYXRpb24gc3RhdHVzLgogICAgSWYgUElEIGlzIG5vdCBnaXZlbiwgd2FpdHMgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNoaWxkIHByb2Nlc3NlcywKICAgIGFuZCB0aGUgcmV0dXJuIHN0YXR1cyBpcyB6ZXJvLiAgUElEIG11c3QgYmUgYSBwcm9jZXNzIElELgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBQSUQ7IGZhaWxzIGlmIFBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQKICAgIG9wdGlvbiBpcyBnaXZlbi4AV2luZG93IGNoYW5nZWQAV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhIHdyaXRlIGVycm9yIG9jY3Vycy4AV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3MsIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUsIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAgIC1lCWVuYWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGJhY2tzbGFzaCBlc2NhcGVzCiAgICAgIC1FCWV4cGxpY2l0bHkgc3VwcHJlc3MgaW50ZXJwcmV0YXRpb24gb2YgYmFja3NsYXNoIGVzY2FwZXMKICAgIAogICAgYGVjaG8nIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXEUJZXNjYXBlIGNoYXJhY3RlcgogICAgICBcZglmb3JtIGZlZWQKICAgICAgXG4JbmV3IGxpbmUKICAgICAgXHIJY2FycmlhZ2UgcmV0dXJuCiAgICAgIFx0CWhvcml6b250YWwgdGFiCiAgICAgIFx2CXZlcnRpY2FsIHRhYgogICAgICBcXAliYWNrc2xhc2gKICAgICAgXDBubm4JdGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSBjb2RlIGlzIE5OTiAob2N0YWwpLiAgTk5OIGNhbiBiZQogICAgCQkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJCWNhbiBiZSBvbmUgb3IgdHdvIGhleCBkaWdpdHMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBZb3UgaGF2ZSBtYWlsIGluICRfAFlvdSBoYXZlIG5ldyBtYWlsIGluICRfAFsgYXJnLi4uIF0AW1sgZXhwcmVzc2lvbiBdXQBgJWMnOiBiYWQgY29tbWFuZABgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAYCVjJzogaW52YWxpZCBzeW1ib2xpYyBtb2RlIGNoYXJhY3RlcgBgJWMnOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgb3BlcmF0b3IAYCVjJzogaW52YWxpZCB0aW1lIGZvcm1hdCBzcGVjaWZpY2F0aW9uAGAlcyc6IGNhbm5vdCB1bmJpbmQAYCVzJzogaW52YWxpZCBhbGlhcyBuYW1lAGAlcyc6IGludmFsaWQga2V5bWFwIG5hbWUAYCVzJzogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQBgJXMnOiBpcyBhIHNwZWNpYWwgYnVpbHRpbgBgJXMnOiBtaXNzaW5nIGZvcm1hdCBjaGFyYWN0ZXIAYCVzJzogbm90IGEgcGlkIG9yIHZhbGlkIGpvYiBzcGVjAGAlcyc6IG5vdCBhIHZhbGlkIGlkZW50aWZpZXIAYCVzJzogdW5rbm93biBmdW5jdGlvbiBuYW1lAGApJyBleHBlY3RlZABgKScgZXhwZWN0ZWQsIGZvdW5kICVzAGA6JyBleHBlY3RlZCBmb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgBhZGRfcHJvY2VzczogcGlkICU1bGQgKCVzKSBtYXJrZWQgYXMgc3RpbGwgYWxpdmUAYWRkX3Byb2Nlc3M6IHByb2Nlc3MgJTVsZCAoJXMpIGluIHRoZV9waXBlbGluZQBhbGlhcyBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uIF0AYWxsX2xvY2FsX3ZhcmlhYmxlczogbm8gZnVuY3Rpb24gY29udGV4dCBhdCBjdXJyZW50IHNjb3BlAGFyZ3VtZW50AGFyZ3VtZW50IGV4cGVjdGVkAGFycmF5IHZhcmlhYmxlIHN1cHBvcnQgcmVxdWlyZWQAYXR0ZW1wdGVkIGFzc2lnbm1lbnQgdG8gbm9uLXZhcmlhYmxlAGJhZCBhcnJheSBzdWJzY3JpcHQAYmFkIGNvbW1hbmQgdHlwZQBiYWQgY29ubmVjdG9yAGJhZCBqdW1wAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgImAiIGluICVzAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgYCVzJyBpbiAlcwBiYXNoIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoPgoAYmFzaF9leGVjdXRlX3VuaXhfY29tbWFuZDogY2Fubm90IGZpbmQga2V5bWFwIGZvciBjb21tYW5kAGJnIFtqb2Jfc3BlYyAuLi5dAGJpbmQgWy1scHN2UFNWWF0gWy1tIGtleW1hcF0gWy1mIGZpbGVuYW1lXSBbLXEgbmFtZV0gWy11IG5hbWVdIFstciBrZXlzZXFdIFsteCBrZXlzZXE6c2hlbGwtY29tbWFuZF0gW2tleXNlcTpyZWFkbGluZS1mdW5jdGlvbiBvciByZWFkbGluZS1jb21tYW5kXQBicmFjZSBleHBhbnNpb246IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzAGJyYWNlIGV4cGFuc2lvbjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJWQgZWxlbWVudHMAYnJhY2UgZXhwYW5zaW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgJXMnAGJyZWFrIFtuXQBidWc6IGJhZCBleHBhc3NpZ24gdG9rZW4AYnVpbHRpbiBbc2hlbGwtYnVpbHRpbiBbYXJnIC4uLl1dAGNhbGxlciBbZXhwcl0AY2FuIG9ubHkgYHJldHVybicgZnJvbSBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0AGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBmdW5jdGlvbgBjYW5ub3QgYWxsb2NhdGUgbmV3IGZpbGUgZGVzY3JpcHRvciBmb3IgYmFzaCBpbnB1dCBmcm9tIGZkICVkAGNhbm5vdCBjcmVhdGUgdGVtcCBmaWxlIGZvciBoZXJlLWRvY3VtZW50OiAlcwBjYW5ub3QgZHVwbGljYXRlIGZkICVkIHRvIGZkICVkAGNhbm5vdCBkdXBsaWNhdGUgbmFtZWQgcGlwZSAlcyBhcyBmZCAlZABjYW5ub3QgZmluZCAlcyBpbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgY2hpbGQgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIGNvbW1hbmQgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBvcGVuIG5hbWVkIHBpcGUgJXMgZm9yIHJlYWRpbmcAY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3Igd3JpdGluZwBjYW5ub3Qgb3BlbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgcmVkaXJlY3Qgc3RhbmRhcmQgaW5wdXQgZnJvbSAvZGV2L251bGw6ICVzAGNhbm5vdCByZXNldCBub2RlbGF5IG1vZGUgZm9yIGZkICVkAGNhbm5vdCBzZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMgc2ltdWx0YW5lb3VzbHkAY2Fubm90IHNldCBnaWQgdG8gJWQ6IGVmZmVjdGl2ZSBnaWQgJWQAY2Fubm90IHNldCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwICglZCkAY2Fubm90IHNldCB1aWQgdG8gJWQ6IGVmZmVjdGl2ZSB1aWQgJWQAY2Fubm90IHNpbXVsdGFuZW91c2x5IHVuc2V0IGEgZnVuY3Rpb24gYW5kIGEgdmFyaWFibGUAY2Fubm90IHN0YXJ0IGRlYnVnZ2VyOyBkZWJ1Z2dpbmcgbW9kZSBkaXNhYmxlZABjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2UgYC1mJyB0byBtYWtlIGZ1bmN0aW9ucwBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgb2YgLWFucncAY2FzZSBXT1JEIGluIFtQQVRURVJOIFt8IFBBVFRFUk5dLi4uKSBDT01NQU5EUyA7O10uLi4gZXNhYwBjZCBbLUx8Wy1QIFstZV1dIFstQF1dIFtkaXJdAGNoaWxkIHNldHBnaWQgKCVsZCB0byAlbGQpAGNvbW1hbmQgWy1wVnZdIGNvbW1hbmQgW2FyZyAuLi5dAGNvbW1hbmQgc3Vic3RpdHV0aW9uOiBpZ25vcmVkIG51bGwgYnl0ZSBpbiBpbnB1dABjb21tYW5kX3N1YnN0aXR1dGU6IGNhbm5vdCBkdXBsaWNhdGUgcGlwZSBhcyBmZCAxAGNvbXBnZW4gWy1hYmNkZWZnamtzdXZdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbd29yZF0AY29tcGxldGUgWy1hYmNkZWZnamtzdXZdIFstcHJdIFstREVdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbbmFtZSAuLi5dAGNvbXBsZXRpb246IGZ1bmN0aW9uIGAlcycgbm90IGZvdW5kAGNvbXBvcHQgWy1vfCtvIG9wdGlvbl0gWy1ERV0gW25hbWUgLi4uXQBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAY29udGludWUgW25dAGNvcHJvYyBbTkFNRV0gY29tbWFuZCBbcmVkaXJlY3Rpb25zXQBjb3VsZCBub3QgZmluZCAvdG1wLCBwbGVhc2UgY3JlYXRlIQBjcHJpbnRmOiBgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAY3VycmVudABkZWNsYXJlIFstYUFmRmdpbG5ydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uIHwgcGlkIC4uLl0AZGl2aXNpb24gYnkgMABkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQBlY2hvIFstbl0gW2FyZyAuLi5dAGVjaG8gWy1uZUVdIFthcmcgLi4uXQBlbXB0eSBhcnJheSB2YXJpYWJsZSBuYW1lAGVuYWJsZSBbLWFdIFstZG5wc10gWy1mIGZpbGVuYW1lXSBbbmFtZSAuLi5dAGVycm9yIGdldHRpbmcgdGVybWluYWwgYXR0cmlidXRlczogJXMAZXJyb3IgaW1wb3J0aW5nIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGAlcycAZXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBldmFsIFthcmcgLi4uXQBldmFsOiBtYXhpbXVtIGV2YWwgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpAGV4ZWMgWy1jbF0gWy1hIG5hbWVdIFtjb21tYW5kIFthcmd1bWVudHMgLi4uXV0gW3JlZGlyZWN0aW9uIC4uLl0AZXhlY3V0ZV9jb3Byb2M6IGNvcHJvYyBbJWQ6JXNdIHN0aWxsIGV4aXN0cwBleGl0IFtuXQBleHBlY3RlZCBgKScAZXhwb25lbnQgbGVzcyB0aGFuIDAAZXhwb3J0IFstZm5dIFtuYW1lWz12YWx1ZV0gLi4uXSBvciBleHBvcnQgLXAAZXhwcmVzc2lvbiBleHBlY3RlZABleHByZXNzaW9uIHJlY3Vyc2lvbiBsZXZlbCBleGNlZWRlZABmYyBbLWUgZW5hbWVdIFstbG5yXSBbZmlyc3RdIFtsYXN0XSBvciBmYyAtcyBbcGF0PXJlcF0gW2NvbW1hbmRdAGZnIFtqb2Jfc3BlY10AZmlsZSBkZXNjcmlwdG9yIG91dCBvZiByYW5nZQBmaWxlbmFtZSBhcmd1bWVudCByZXF1aXJlZABmb3IgKCggZXhwMTsgZXhwMjsgZXhwMyApKTsgZG8gQ09NTUFORFM7IGRvbmUAZm9yIE5BTUUgW2luIFdPUkRTIC4uLiBdIDsgZG8gQ09NTUFORFM7IGRvbmUAZm9ya2VkIHBpZCAlZCBhcHBlYXJzIGluIHJ1bm5pbmcgam9iICVkAGZvcm1hdCBwYXJzaW5nIHByb2JsZW06ICVzAGZyZWU6IGNhbGxlZCB3aXRoIGFscmVhZHkgZnJlZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAZnJlZTogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAGZ1bmN0aW9uIG5hbWUgeyBDT01NQU5EUyA7IH0gb3IgbmFtZSAoKSB7IENPTU1BTkRTIDsgfQBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHNoZWxsIHdpbGwgZm9yY2UgZXZhbHVhdGlvbiBhcyBhbiBhcml0aG1ldGljIHN1YnN0aXR1dGlvbgBnZXRjd2Q6IGNhbm5vdCBhY2Nlc3MgcGFyZW50IGRpcmVjdG9yaWVzAGdldG9wdHMgb3B0c3RyaW5nIG5hbWUgW2FyZ10AaGFzaCBbLWxyXSBbLXAgcGF0aG5hbWVdIFstZHRdIFtuYW1lIC4uLl0AaGFzaGluZyBkaXNhYmxlZABoZWxwIFstZG1zXSBbcGF0dGVybiAuLi5dAGhlbHAgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24AaGVyZS1kb2N1bWVudCBhdCBsaW5lICVkIGRlbGltaXRlZCBieSBlbmQtb2YtZmlsZSAod2FudGVkIGAlcycpAGhpc3RvcnkgWy1jXSBbLWQgb2Zmc2V0XSBbbl0gb3IgaGlzdG9yeSAtYW5ydyBbZmlsZW5hbWVdIG9yIGhpc3RvcnkgLXBzIGFyZyBbYXJnLi4uXQBoaXN0b3J5IHBvc2l0aW9uAGhpc3Rvcnkgc3BlY2lmaWNhdGlvbgBoaXRzCWNvbW1hbmQKAGlkZW50aWZpZXIgZXhwZWN0ZWQgYWZ0ZXIgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50AGlmIENPTU1BTkRTOyB0aGVuIENPTU1BTkRTOyBbIGVsaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IF0uLi4gWyBlbHNlIENPTU1BTkRTOyBdIGZpAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGdldHBncnAgZmFpbGVkAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGxpbmUgZGlzY2lwbGluZQBpbml0aWFsaXplX2pvYl9jb250cm9sOiBzZXRwZ2lkAGludmFsaWQgYXJpdGhtZXRpYyBiYXNlAGludmFsaWQgYmFzZQBpbnZhbGlkIGNoYXJhY3RlciAlZCBpbiBleHBvcnRzdHIgZm9yICVzAGludmFsaWQgaGV4IG51bWJlcgBpbnZhbGlkIG51bWJlcgBpbnZhbGlkIG9jdGFsIG51bWJlcgBpbnZhbGlkIHNpZ25hbCBudW1iZXIAam9iICVkIHN0YXJ0ZWQgd2l0aG91dCBqb2IgY29udHJvbABqb2Jfc3BlYyBbJl0Aam9icyBbLWxucHJzXSBbam9ic3BlYyAuLi5dIG9yIGpvYnMgLXggY29tbWFuZCBbYXJnc10Aa2lsbCBbLXMgc2lnc3BlYyB8IC1uIHNpZ251bSB8IC1zaWdzcGVjXSBwaWQgfCBqb2JzcGVjIC4uLiBvciBraWxsIC1sIFtzaWdzcGVjXQBsYXN0IGNvbW1hbmQ6ICVzCgBsZXQgYXJnIFthcmcgLi4uXQBsaW1pdABsaW5lICVkOiAAbGluZSBlZGl0aW5nIG5vdCBlbmFibGVkAGxvYWQgZnVuY3Rpb24gZm9yICVzIHJldHVybnMgZmFpbHVyZSAoJWQpOiBub3QgbG9hZGVkAGxvY2FsIFtvcHRpb25dIG5hbWVbPXZhbHVlXSAuLi4AbG9nb3V0CgBsb2dvdXQgW25dAGxvb3AgY291bnQAbWFrZV9oZXJlX2RvY3VtZW50OiBiYWQgaW5zdHJ1Y3Rpb24gdHlwZSAlZABtYWtlX2xvY2FsX3ZhcmlhYmxlOiBubyBmdW5jdGlvbiBjb250ZXh0IGF0IGN1cnJlbnQgc2NvcGUAbWFrZV9yZWRpcmVjdGlvbjogcmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb24gYCVkJyBvdXQgb2YgcmFuZ2UAbWFsbG9jOiBibG9jayBvbiBmcmVlIGxpc3QgY2xvYmJlcmVkAG1hbGxvYzogZmFpbGVkIGFzc2VydGlvbjogJXMKAG1hcGZpbGUgWy1kIGRlbGltXSBbLW4gY291bnRdIFstTyBvcmlnaW5dIFstcyBjb3VudF0gWy10XSBbLXUgZmRdIFstQyBjYWxsYmFja10gWy1jIHF1YW50dW1dIFthcnJheV0AbWF4aW11bSBoZXJlLWRvY3VtZW50IGNvdW50IGV4Y2VlZGVkAG1pZ3JhdGUgcHJvY2VzcyB0byBhbm90aGVyIENQVQBtaXNzaW5nIGApJwBtaXNzaW5nIGBdJwBtaXNzaW5nIGhleCBkaWdpdCBmb3IgXHgAbWlzc2luZyB1bmljb2RlIGRpZ2l0IGZvciBcJWMAbmV0d29yayBvcGVyYXRpb25zIG5vdCBzdXBwb3J0ZWQAbm8gYD0nIGluIGV4cG9ydHN0ciBmb3IgJXMAbm8gY2xvc2luZyBgJWMnIGluICVzAG5vIGNvbW1hbmQgZm91bmQAbm8gaGVscCB0b3BpY3MgbWF0Y2ggYCVzJy4gIFRyeSBgaGVscCBoZWxwJyBvciBgbWFuIC1rICVzJyBvciBgaW5mbyAlcycuAG5vIGpvYiBjb250cm9sAG5vIGpvYiBjb250cm9sIGluIHRoaXMgc2hlbGwAbm8gbWF0Y2g6ICVzAG5vIG90aGVyIGRpcmVjdG9yeQBubyBvdGhlciBvcHRpb25zIGFsbG93ZWQgd2l0aCBgLXgnAG5vdCBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbXBsZXRpb24gZnVuY3Rpb24Abm90IGxvZ2luIHNoZWxsOiB1c2UgYGV4aXQnAG51bGwgZGlyZWN0b3J5AG9jdGFsIG51bWJlcgBvbmx5IG1lYW5pbmdmdWwgaW4gYSBgZm9yJywgYHdoaWxlJywgb3IgYHVudGlsJyBsb29wAHBpcGUgZXJyb3IAcG9wX3Njb3BlOiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSB0ZW1wb3JhcnkgZW52aXJvbm1lbnQgc2NvcGUAcG9wX3Zhcl9jb250ZXh0OiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSBmdW5jdGlvbiBjb250ZXh0AHBvcF92YXJfY29udGV4dDogbm8gZ2xvYmFsX3ZhcmlhYmxlcyBjb250ZXh0AHBvcGQgWy1uXSBbK04gfCAtTl0AcG93ZXIgZmFpbHVyZSBpbW1pbmVudABwcmludF9jb21tYW5kOiBiYWQgY29ubmVjdG9yIGAlZCcAcHJpbnRmIFstdiB2YXJdIGZvcm1hdCBbYXJndW1lbnRzXQBwcm9nY29tcF9pbnNlcnQ6ICVzOiBOVUxMIENPTVBTUEVDAHByb2dyYW1tYWJsZV9jb21wbGV0aW9uOiAlczogcG9zc2libGUgcmV0cnkgbG9vcABwcm9ncmFtbWluZyBlcnJvcgBwdXNoZCBbLW5dIFsrTiB8IC1OIHwgZGlyXQBwd2QgWy1MUF0AcmVhZCBbLWVyc10gWy1hIGFycmF5XSBbLWQgZGVsaW1dIFstaSB0ZXh0XSBbLW4gbmNoYXJzXSBbLU4gbmNoYXJzXSBbLXAgcHJvbXB0XSBbLXQgdGltZW91dF0gWy11IGZkXSBbbmFtZSAuLi5dAHJlYWQgZXJyb3I6ICVkOiAlcwByZWFkYXJyYXkgWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAHJlYWRvbmx5IFstYUFmXSBbbmFtZVs9dmFsdWVdIC4uLl0gb3IgcmVhZG9ubHkgLXAAcmVhbGxvYzogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAcmVhbGxvYzogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAcmVhbGxvYzogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAHJlY3Vyc2lvbiBzdGFjayB1bmRlcmZsb3cAcmVkaXJlY3Rpb24gZXJyb3I6IGNhbm5vdCBkdXBsaWNhdGUgZmQAcmVnaXN0ZXJfYWxsb2M6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgYWxsb2NhdGVkPwoAcmVnaXN0ZXJfYWxsb2M6IGFsbG9jIHRhYmxlIGlzIGZ1bGwgd2l0aCBGSU5EX0FMTE9DPwoAcmVnaXN0ZXJfZnJlZTogJXAgYWxyZWFkeSBpbiB0YWJsZSBhcyBmcmVlPwoAcmVzdHJpY3RlZAByZXR1cm4gW25dAHJ1bl9wZW5kaW5nX3RyYXBzOiBiYWQgdmFsdWUgaW4gdHJhcF9saXN0WyVkXTogJXAAcnVuX3BlbmRpbmdfdHJhcHM6IHNpZ25hbCBoYW5kbGVyIGlzIFNJR19ERkwsIHJlc2VuZGluZyAlZCAoJXMpIHRvIG15c2VsZgBzYXZlX2Jhc2hfaW5wdXQ6IGJ1ZmZlciBhbHJlYWR5IGV4aXN0cyBmb3IgbmV3IGZkICVkAHNlbGVjdCBOQU1FIFtpbiBXT1JEUyAuLi4gO10gZG8gQ09NTUFORFM7IGRvbmUAc2V0IFstYWJlZmhrbW5wdHV2eEJDSFBdIFstbyBvcHRpb24tbmFtZV0gWy0tXSBbYXJnIC4uLl0Ac2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6ICVzOiBjYW5ub3QgY2hhbmdlIGxvY2FsZSAoJXMpOiAlcwBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2hlbGwgbGV2ZWwgKCVkKSB0b28gaGlnaCwgcmVzZXR0aW5nIHRvIDEAc2hlbGxfZ2V0Yzogc2hlbGxfaW5wdXRfbGluZV9zaXplICglenUpIGV4Y2VlZHMgU0laRV9NQVggKCVsdSk6IGxpbmUgdHJ1bmNhdGVkAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3IgaW4gZXhwcmVzc2lvbgBzeW50YXggZXJyb3IgbmVhciBgJXMnAHN5bnRheCBlcnJvciBuZWFyIHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3I6IGAoKCVzKSknAHN5bnRheCBlcnJvcjogYDsnIHVuZXhwZWN0ZWQAc3ludGF4IGVycm9yOiBhcml0aG1ldGljIGV4cHJlc3Npb24gcmVxdWlyZWQAc3ludGF4IGVycm9yOiBpbnZhbGlkIGFyaXRobWV0aWMgb3BlcmF0b3IAc3ludGF4IGVycm9yOiBvcGVyYW5kIGV4cGVjdGVkAHN5bnRheCBlcnJvcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBzeXN0ZW0gY3Jhc2ggaW1taW5lbnQAdGVzdCBbZXhwcl0AdGltZSBbLXBdIHBpcGVsaW5lAHRvbyBtYW55IGFyZ3VtZW50cwB0cmFwIFstbHBdIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dAHRyYXBfaGFuZGxlcjogYmFkIHNpZ25hbCAlZAB0eXBlIFstYWZwdFBdIG5hbWUgW25hbWUgLi4uXQB0eXBlc2V0IFstYUFmRmdpbG5ydHV4XSBbLXBdIG5hbWVbPXZhbHVlXSAuLi4AdWxpbWl0IFstU0hhYmNkZWZpa2xtbnBxcnN0dXZ4UFRdIFtsaW1pdF0AdW1hc2sgWy1wXSBbLVNdIFttb2RlXQB1bmFsaWFzIFstYV0gbmFtZSBbbmFtZSAuLi5dAHVuZXhwZWN0ZWQgRU9GIHdoaWxlIGxvb2tpbmcgZm9yIGBdXScAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcgYCVjJwB1bmV4cGVjdGVkIEVPRiB3aGlsZSBsb29raW5nIGZvciBtYXRjaGluZyBgKScAdW5leHBlY3RlZCBhcmd1bWVudCBgJXMnIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IGAlcycgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCB1bmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIHRva2VuICVkIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJWMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBleHBlY3RlZCBgKScAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFstbl0gW25hbWUgLi4uXQB1bnRpbCBDT01NQU5EUzsgZG8gQ09NTUFORFM7IGRvbmUAdmFsdWUgdG9vIGdyZWF0IGZvciBiYXNlAHZhcmlhYmxlcyAtIE5hbWVzIGFuZCBtZWFuaW5ncyBvZiBzb21lIHNoZWxsIHZhcmlhYmxlcwB3YWl0IFstbl0gW2lkIC4uLl0Ad2FpdCBbcGlkIC4uLl0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQBQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBiYXNoIDQuNC1yZWxlYXNlClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDktMTAgMTI6NDItMDQwMApQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA5LTEwIDEyOjQyLTA0MDAKTGFzdC1UcmFuc2xhdG9yOiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZApMYW5ndWFnZS1UZWFtOiBub25lCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0ClBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpOwoAB3RpbWVkIG91dCB3YWl0aW5nIGZvciBpbnB1dDogYXV0by1sb2dvdXQKAAktJXMgb3IgLW8gb3B0aW9uCgAJLWlscnNEIG9yIC1jIGNvbW1hbmQgb3IgLU8gc2hvcHRfb3B0aW9uCQkoaW52b2NhdGlvbiBvbmx5KQoADQptYWxsb2M6ICVzOiVkOiBhc3NlcnRpb24gYm90Y2hlZA0KACAgKHdkOiAlcykAIChjb3JlIGR1bXBlZCkAIGxpbmUgACQlczogY2Fubm90IGFzc2lnbiBpbiB0aGlzIHdheQAlYyVjOiBpbnZhbGlkIG9wdGlvbgAlZDogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6ICVzACVzIGNhbiBiZSBpbnZva2VkIHZpYSAAJXMgaGFzIG51bGwgZXhwb3J0c3RyACVzIGlzICVzCgAlcyBpcyBhIGZ1bmN0aW9uCgAlcyBpcyBhIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGEgc2hlbGwga2V5d29yZAoAJXMgaXMgYSBzcGVjaWFsIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGFsaWFzZWQgdG8g4oCYG1sxbSVzG1swbeKAmQoAJXMgaXMgaGFzaGVkICglcykKACVzIGlzIG5vdCBib3VuZCB0byBhbnkga2V5cy4KACVzIG91dCBvZiByYW5nZQAlcyVzJXM6ICVzIChlcnJvciB0b2tlbiBpcyDigJwbWzFtJXMbWzBt4oCdKQAlczogJXMAJXM6ICVzIG91dCBvZiByYW5nZQAlczogJXM6IGJhZCBpbnRlcnByZXRlcgAlczogJXM6IGNhbm5vdCBvcGVuIGFzIEZJTEUAJXM6ICVzOiBjb21wYXRpYmlsaXR5IHZhbHVlIG91dCBvZiByYW5nZQAlczogJXM6IGludmFsaWQgdmFsdWUgZm9yIHRyYWNlIGZpbGUgZGVzY3JpcHRvcgAlczogJXM6IG11c3QgdXNlIHN1YnNjcmlwdCB3aGVuIGFzc2lnbmluZyBhc3NvY2lhdGl2ZSBhcnJheQAlczogJXM6JWQ6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMAJXM6ICVzOiVkOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogSXMgYSBkaXJlY3RvcnkAJXM6IGFtYmlndW91cyBqb2Igc3BlYwAlczogYW1iaWd1b3VzIHJlZGlyZWN0ACVzOiBhcmd1bWVudHMgbXVzdCBiZSBwcm9jZXNzIG9yIGpvYiBJRHMAJXM6IGFzc2lnbmluZyBpbnRlZ2VyIHRvIG5hbWUgcmVmZXJlbmNlACVzOiBiYWQgbmV0d29yayBwYXRoIHNwZWNpZmljYXRpb24AJXM6IGJhZCBzdWJzdGl0dXRpb24AJXM6IGJpbmFyeSBvcGVyYXRvciBleHBlY3RlZAAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcwAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyAoJWx1IGJ5dGVzIGFsbG9jYXRlZCkAJXM6IGNhbm5vdCBhc3NpZ24gZmQgdG8gdmFyaWFibGUAJXM6IGNhbm5vdCBhc3NpZ24gbGlzdCB0byBhcnJheSBtZW1iZXIAJXM6IGNhbm5vdCBhc3NpZ24gdG8gbm9uLW51bWVyaWMgaW5kZXgAJXM6IGNhbm5vdCBjb252ZXJ0IGFzc29jaWF0aXZlIHRvIGluZGV4ZWQgYXJyYXkAJXM6IGNhbm5vdCBjb252ZXJ0IGluZGV4ZWQgdG8gYXNzb2NpYXRpdmUgYXJyYXkAJXM6IGNhbm5vdCBjcmVhdGU6ICVzACVzOiBjYW5ub3QgZGVsZXRlOiAlcwAlczogY2Fubm90IGRlc3Ryb3kgYXJyYXkgdmFyaWFibGVzIGluIHRoaXMgd2F5ACVzOiBjYW5ub3QgZXhlY3V0ZSBiaW5hcnkgZmlsZQAlczogY2Fubm90IGV4ZWN1dGUgYmluYXJ5IGZpbGU6ICVzACVzOiBjYW5ub3QgZXhlY3V0ZTogJXMAJXM6IGNhbm5vdCBleHBvcnQAJXM6IGNhbm5vdCBnZXQgbGltaXQ6ICVzACVzOiBjYW5ub3QgbW9kaWZ5IGxpbWl0OiAlcwAlczogY2Fubm90IG9wZW4gdGVtcCBmaWxlOiAlcwAlczogY2Fubm90IG9wZW46ICVzACVzOiBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUAJXM6IGNhbm5vdCByZWFkOiAlcwAlczogY2Fubm90IHVuc2V0ACVzOiBjYW5ub3QgdW5zZXQ6IHJlYWRvbmx5ICVzACVzOiBjaXJjdWxhciBuYW1lIHJlZmVyZW5jZQAlczogY29tbWFuZCBub3QgZm91bmQAJXM6IGVycm9yIHJldHJpZXZpbmcgY3VycmVudCBkaXJlY3Rvcnk6ICVzOiAlcwoAJXM6IGV4cHJlc3Npb24gZXJyb3IKACVzOiBmaWxlIGlzIHRvbyBsYXJnZQAlczogZmlsZSBub3QgZm91bmQAJXM6IGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBub3Qg4oCYG1sxbSIbWzBt4oCZACVzOiBoYXNoIHRhYmxlIGVtcHR5CgAlczogaGlzdG9yeSBleHBhbnNpb24gZmFpbGVkACVzOiBob3N0IHVua25vd24AJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjCgAlczogaW5saWIgZmFpbGVkACVzOiBpbnRlZ2VyIGV4cHJlc3Npb24gZXhwZWN0ZWQAJXM6IGludmFsaWQgYWN0aW9uIG5hbWUAJXM6IGludmFsaWQgYXJndW1lbnQAJXM6IGludmFsaWQgYXJyYXkgb3JpZ2luACVzOiBpbnZhbGlkIGFzc29jaWF0aXZlIGFycmF5IGtleQAlczogaW52YWxpZCBjYWxsYmFjayBxdWFudHVtACVzOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIGluZGlyZWN0IGV4cGFuc2lvbgAlczogaW52YWxpZCBsaW1pdCBhcmd1bWVudAAlczogaW52YWxpZCBsaW5lIGNvdW50ACVzOiBpbnZhbGlkIG9wdGlvbgAlczogaW52YWxpZCBvcHRpb24gbmFtZQAlczogaW52YWxpZCBzZXJ2aWNlACVzOiBpbnZhbGlkIHNoZWxsIG9wdGlvbiBuYW1lACVzOiBpbnZhbGlkIHNpZ25hbCBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIHRpbWVvdXQgc3BlY2lmaWNhdGlvbgAlczogaW52YWxpZCB0aW1lc3RhbXAAJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZQAlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQAlczogaXMgYSBkaXJlY3RvcnkAJXM6IGpvYiAlZCBhbHJlYWR5IGluIGJhY2tncm91bmQAJXM6IGpvYiBoYXMgdGVybWluYXRlZAAlczogbGluZSAlZDogACVzOiBtYXhpbXVtIGZ1bmN0aW9uIG5lc3RpbmcgbGV2ZWwgZXhjZWVkZWQgKCVkKQAlczogbWF4aW11bSBzb3VyY2UgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpACVzOiBtaXNzaW5nIGNvbG9uIHNlcGFyYXRvcgAlczogbmFtZXJlZiB2YXJpYWJsZSBzZWxmIHJlZmVyZW5jZXMgbm90IGFsbG93ZWQAJXM6IG5vIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbgAlczogbm8gam9iIGNvbnRyb2wAJXM6IG5vIHN1Y2ggam9iACVzOiBub3QgYSBmdW5jdGlvbgAlczogbm90IGEgcmVndWxhciBmaWxlACVzOiBub3QgYSBzaGVsbCBidWlsdGluACVzOiBub3QgYW4gYXJyYXkgdmFyaWFibGUAJXM6IG5vdCBhbiBpbmRleGVkIGFycmF5ACVzOiBub3QgZHluYW1pY2FsbHkgbG9hZGVkACVzOiBub3QgZm91bmQAJXM6IG51bWVyaWMgYXJndW1lbnQgcmVxdWlyZWQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudAAlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjCgAlczogcGFyYW1ldGVyIG51bGwgb3Igbm90IHNldAAlczogcXVvdGVkIGNvbXBvdW5kIGFycmF5IGFzc2lnbm1lbnQgZGVwcmVjYXRlZAAlczogcmVhZG9ubHkgZnVuY3Rpb24AJXM6IHJlYWRvbmx5IHZhcmlhYmxlACVzOiByZWZlcmVuY2UgdmFyaWFibGUgY2Fubm90IGJlIGFuIGFycmF5ACVzOiByZW1vdmluZyBuYW1lcmVmIGF0dHJpYnV0ZQAlczogcmVzdHJpY3RlZAAlczogcmVzdHJpY3RlZDogY2Fubm90IHJlZGlyZWN0IG91dHB1dAAlczogcmVzdHJpY3RlZDogY2Fubm90IHNwZWNpZnkg4oCYG1sxbS8bWzBt4oCZIGluIGNvbW1hbmQgbmFtZXMAJXM6IHN1YnN0cmluZyBleHByZXNzaW9uIDwgMAAlczogdW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAJXM6IHVuYm91bmQgdmFyaWFibGUAJXM6IHVzYWdlOiAAJXM6IHZhcmlhYmxlIG1heSBub3QgYmUgYXNzaWduZWQgdmFsdWUAKCggZXhwcmVzc2lvbiApKQAoY29yZSBkdW1wZWQpIAAod2Qgbm93OiAlcykKAC4gZmlsZW5hbWUgW2FyZ3VtZW50c10AL2Rldi8odGNwfHVkcCkvaG9zdC9wb3J0IG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBuZXR3b3JraW5nAC90bXAgbXVzdCBiZSBhIHZhbGlkIGRpcmVjdG9yeSBuYW1lADxubyBjdXJyZW50IGRpcmVjdG9yeT4AQUJPUlQgaW5zdHJ1Y3Rpb24AQWJvcnRpbmcuLi4AQWRkIGRpcmVjdG9yaWVzIHRvIHN0YWNrLgogICAgCiAgICBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAkJZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieSDigJgbWzFtZGlycxtbMG3igJksIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCQlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSDigJgbWzFtZGlycxtbMG3igJksIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUg4oCYG1sxbWRpcnMbWzBt4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgYXJndW1lbnQgaXMgc3VwcGxpZWQgb3IgdGhlIGRpcmVjdG9yeQogICAgY2hhbmdlIGZhaWxzLgBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkg4oCYG1sxbWRpcnMbWzBt4oCZLCBzdGFydGluZyB3aXRoCiAgICAJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5IOKAmBtbMW1kaXJzG1swbeKAmSwgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgZGlyCUFkZHMgRElSIHRvIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYXQgdGhlIHRvcCwgbWFraW5nIGl0IHRoZQogICAgCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUg4oCYG1sxbWRpcnMbWzBt4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AQWxhcm0gKHByb2ZpbGUpAEFsYXJtICh2aXJ0dWFsKQBBbGFybSBjbG9jawBBcml0aG1ldGljIGZvciBsb29wLgogICAgCiAgICBFcXVpdmFsZW50IHRvCiAgICAJKCggRVhQMSApKQogICAgCXdoaWxlICgoIEVYUDIgKSk7IGRvCiAgICAJCUNPTU1BTkRTCiAgICAJCSgoIEVYUDMgKSkKICAgIAlkb25lCiAgICBFWFAxLCBFWFAyLCBhbmQgRVhQMyBhcmUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4gIElmIGFueSBleHByZXNzaW9uIGlzCiAgICBvbWl0dGVkLCBpdCBiZWhhdmVzIGFzIGlmIGl0IGV2YWx1YXRlcyB0byAxLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBCUFQgdHJhY2UvdHJhcABCYWQgc3lzdGVtIGNhbGwAQm9ndXMgc2lnbmFsAEJyb2tlbiBwaXBlAEJ1cyBlcnJvcgBDUFUgbGltaXQAQ2hhbmdlIHRoZSBzaGVsbCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBESVIuICBUaGUgZGVmYXVsdCBESVIgaXMgdGhlIHZhbHVlIG9mIHRoZQogICAgSE9NRSBzaGVsbCB2YXJpYWJsZS4KICAgIAogICAgVGhlIHZhcmlhYmxlIENEUEFUSCBkZWZpbmVzIHRoZSBzZWFyY2ggcGF0aCBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCiAgICBESVIuICBBbHRlcm5hdGl2ZSBkaXJlY3RvcnkgbmFtZXMgaW4gQ0RQQVRIIGFyZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikuCiAgICBBIG51bGwgZGlyZWN0b3J5IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSWYgRElSIGJlZ2lucwogICAgd2l0aCBhIHNsYXNoICgvKSwgdGhlbiBDRFBBVEggaXMgbm90IHVzZWQuCiAgICAKICAgIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kLCBhbmQgdGhlIHNoZWxsIG9wdGlvbiDigJgbWzFtY2RhYmxlX3ZhcnMbWzBt4oCZIGlzIHNldCwKICAgIHRoZSB3b3JkIGlzIGFzc3VtZWQgdG8gYmUgIGEgdmFyaWFibGUgbmFtZS4gIElmIHRoYXQgdmFyaWFibGUgaGFzIGEgdmFsdWUsCiAgICBpdHMgdmFsdWUgaXMgdXNlZCBmb3IgRElSLgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlmb3JjZSBzeW1ib2xpYyBsaW5rcyB0byBiZSBmb2xsb3dlZDogcmVzb2x2ZSBzeW1ib2xpYwogICAgCQlsaW5rcyBpbiBESVIgYWZ0ZXIgcHJvY2Vzc2luZyBpbnN0YW5jZXMgb2Yg4oCYG1sxbS4uG1swbeKAmQogICAgICAtUAl1c2UgdGhlIHBoeXNpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aG91dCBmb2xsb3dpbmcKICAgIAkJc3ltYm9saWMgbGlua3M6IHJlc29sdmUgc3ltYm9saWMgbGlua3MgaW4gRElSIGJlZm9yZQogICAgCQlwcm9jZXNzaW5nIGluc3RhbmNlcyBvZiDigJgbWzFtLi4bWzBt4oCZCiAgICAgIC1lCWlmIHRoZSAtUCBvcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBzdWNjZXNzZnVsbHksIGV4aXQgd2l0aAogICAgCQlhIG5vbi16ZXJvIHN0YXR1cwogICAgICAtQAlvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgcHJlc2VudCBhIGZpbGUgd2l0aCBleHRlbmRlZAogICAgCQlhdHRyaWJ1dGVzIGFzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgYXR0cmlidXRlcwogICAgCiAgICBUaGUgZGVmYXVsdCBpcyB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MsIGFzIGlmIOKAmBtbMW0tTBtbMG3igJkgd2VyZSBzcGVjaWZpZWQuCiAgICDigJgbWzFtLi4bWzBt4oCZIGlzIHByb2Nlc3NlZCBieSByZW1vdmluZyB0aGUgaW1tZWRpYXRlbHkgcHJldmlvdXMgcGF0aG5hbWUgY29tcG9uZW50CiAgICBiYWNrIHRvIGEgc2xhc2ggb3IgdGhlIGJlZ2lubmluZyBvZiBESVIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIGlmIHRoZSBkaXJlY3RvcnkgaXMgY2hhbmdlZCwgYW5kIGlmICRQV0QgaXMgc2V0IHN1Y2Nlc3NmdWxseSB3aGVuCiAgICAtUCBpcyB1c2VkOyBub24temVybyBvdGhlcndpc2UuAENoaWxkIGRlYXRoIG9yIHN0b3AAQ29tbW9uIHNoZWxsIHZhcmlhYmxlIG5hbWVzIGFuZCB1c2FnZS4KICAgIAogICAgQkFTSF9WRVJTSU9OCVZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoaXMgQmFzaC4KICAgIENEUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAogICAgCQlmb3IgZGlyZWN0b3JpZXMgZ2l2ZW4gYXMgYXJndW1lbnRzIHRvIOKAmBtbMW1jZBtbMG3igJkuCiAgICBHTE9CSUdOT1JFCUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgZGVzY3JpYmluZyBmaWxlbmFtZXMgdG8KICAgIAkJYmUgaWdub3JlZCBieSBwYXRobmFtZSBleHBhbnNpb24uCiAgICBISVNURklMRQlUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB5b3VyIGNvbW1hbmQgaGlzdG9yeSBpcyBzdG9yZWQuCiAgICBISVNURklMRVNJWkUJVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoaXMgZmlsZSBjYW4gY29udGFpbi4KICAgIEhJU1RTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGxpbmVzIHRoYXQgYSBydW5uaW5nCiAgICAJCXNoZWxsIGNhbiBhY2Nlc3MuCiAgICBIT01FCVRoZSBjb21wbGV0ZSBwYXRobmFtZSB0byB5b3VyIGxvZ2luIGRpcmVjdG9yeS4KICAgIEhPU1ROQU1FCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGhvc3QuCiAgICBIT1NUVFlQRQlUaGUgdHlwZSBvZiBDUFUgdGhpcyB2ZXJzaW9uIG9mIEJhc2ggaXMgcnVubmluZyB1bmRlci4KICAgIElHTk9SRUVPRglDb250cm9scyB0aGUgYWN0aW9uIG9mIHRoZSBzaGVsbCBvbiByZWNlaXB0IG9mIGFuIEVPRgogICAgCQljaGFyYWN0ZXIgYXMgdGhlIHNvbGUgaW5wdXQuICBJZiBzZXQsIHRoZW4gdGhlIHZhbHVlCiAgICAJCW9mIGl0IGlzIHRoZSBudW1iZXIgb2YgRU9GIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgc2VlbgogICAgCQlpbiBhIHJvdyBvbiBhbiBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgc2hlbGwgd2lsbCBleGl0CiAgICAJCShkZWZhdWx0IDEwKS4gIFdoZW4gdW5zZXQsIEVPRiBzaWduaWZpZXMgdGhlIGVuZCBvZiBpbnB1dC4KICAgIE1BQ0hUWVBFCUEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3lzdGVtIEJhc2ggaXMgcnVubmluZyBvbi4KICAgIE1BSUxDSEVDSwlIb3cgb2Z0ZW4sIGluIHNlY29uZHMsIEJhc2ggY2hlY2tzIGZvciBuZXcgbWFpbC4KICAgIE1BSUxQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZW5hbWVzIHdoaWNoIEJhc2ggY2hlY2tzCiAgICAJCWZvciBuZXcgbWFpbC4KICAgIE9TVFlQRQlUaGUgdmVyc2lvbiBvZiBVbml4IHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHdoZW4KICAgIAkJbG9va2luZyBmb3IgY29tbWFuZHMuCiAgICBQUk9NUFRfQ09NTUFORAlBIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBwcmludGluZyBvZiBlYWNoCiAgICAJCXByaW1hcnkgcHJvbXB0LgogICAgUFMxCQlUaGUgcHJpbWFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFMyCQlUaGUgc2Vjb25kYXJ5IHByb21wdCBzdHJpbmcuCiAgICBQV0QJCVRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgIFNIRUxMT1BUUwlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGVuYWJsZWQgc2hlbGwgb3B0aW9ucy4KICAgIFRFUk0JVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVybWluYWwgdHlwZS4KICAgIFRJTUVGT1JNQVQJVGhlIG91dHB1dCBmb3JtYXQgZm9yIHRpbWluZyBzdGF0aXN0aWNzIGRpc3BsYXllZCBieSB0aGUKICAgIAkJ4oCYG1sxbXRpbWUbWzBt4oCZIHJlc2VydmVkIHdvcmQuCiAgICBhdXRvX3Jlc3VtZQlOb24tbnVsbCBtZWFucyBhIGNvbW1hbmQgd29yZCBhcHBlYXJpbmcgb24gYSBsaW5lIGJ5CiAgICAJCWl0c2VsZiBpcyBmaXJzdCBsb29rZWQgZm9yIGluIHRoZSBsaXN0IG9mIGN1cnJlbnRseQogICAgCQlzdG9wcGVkIGpvYnMuICBJZiBmb3VuZCB0aGVyZSwgdGhhdCBqb2IgaXMgZm9yZWdyb3VuZGVkLgogICAgCQlBIHZhbHVlIG9mIOKAmBtbMW1leGFjdBtbMG3igJkgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJZXhhY3RseSBtYXRjaCBhIGNvbW1hbmQgaW4gdGhlIGxpc3Qgb2Ygc3RvcHBlZCBqb2JzLiAgQQogICAgCQl2YWx1ZSBvZiDigJgbWzFtc3Vic3RyaW5nG1swbeKAmSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIHdvcmQgbXVzdAogICAgCQltYXRjaCBhIHN1YnN0cmluZyBvZiB0aGUgam9iLiAgQW55IG90aGVyIHZhbHVlIG1lYW5zIHRoYXQKICAgIAkJdGhlIGNvbW1hbmQgbXVzdCBiZSBhIHByZWZpeCBvZiBhIHN0b3BwZWQgam9iLgogICAgaGlzdGNoYXJzCUNoYXJhY3RlcnMgY29udHJvbGxpbmcgaGlzdG9yeSBleHBhbnNpb24gYW5kIHF1aWNrCiAgICAJCXN1YnN0aXR1dGlvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdGhlIGhpc3RvcnkKICAgIAkJc3Vic3RpdHV0aW9uIGNoYXJhY3RlciwgdXN1YWxseSDigJgbWzFtIRtbMG3igJkuICBUaGUgc2Vjb25kIGlzCiAgICAJCXRoZSDigJgbWzFtcXVpY2sgc3Vic3RpdHV0aW9uG1swbeKAmSBjaGFyYWN0ZXIsIHVzdWFsbHkg4oCYG1sxbV4bWzBt4oCZLiAgVGhlCiAgICAJCXRoaXJkIGlzIHRoZSDigJgbWzFtaGlzdG9yeSBjb21tZW50G1swbeKAmSBjaGFyYWN0ZXIsIHVzdWFsbHkg4oCYG1sxbSMbWzBt4oCZLgogICAgSElTVElHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHVzZWQgdG8gZGVjaWRlIHdoaWNoCiAgICAJCWNvbW1hbmRzIHNob3VsZCBiZSBzYXZlZCBvbiB0aGUgaGlzdG9yeSBsaXN0LgoAQ29udGludWUAQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgBDcmVhdGUgYSBjb3Byb2Nlc3MgbmFtZWQgTkFNRS4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5EIGFzeW5jaHJvbm91c2x5LCB3aXRoIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkCiAgICBpbnB1dCBvZiB0aGUgY29tbWFuZCBjb25uZWN0ZWQgdmlhIGEgcGlwZSB0byBmaWxlIGRlc2NyaXB0b3JzIGFzc2lnbmVkCiAgICB0byBpbmRpY2VzIDAgYW5kIDEgb2YgYW4gYXJyYXkgdmFyaWFibGUgTkFNRSBpbiB0aGUgZXhlY3V0aW5nIHNoZWxsLgogICAgVGhlIGRlZmF1bHQgTkFNRSBpcyDigJwbWzFtQ09QUk9DG1swbeKAnS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBUaGUgY29wcm9jIGNvbW1hbmQgcmV0dXJucyBhbiBleGl0IHN0YXR1cyBvZiAwLgBEZWZpbmUgbG9jYWwgdmFyaWFibGVzLgogICAgCiAgICBDcmVhdGUgYSBsb2NhbCB2YXJpYWJsZSBjYWxsZWQgTkFNRSwgYW5kIGdpdmUgaXQgVkFMVUUuICBPUFRJT04gY2FuCiAgICBiZSBhbnkgb3B0aW9uIGFjY2VwdGVkIGJ5IOKAmBtbMW1kZWNsYXJlG1swbeKAmS4KICAgIAogICAgTG9jYWwgdmFyaWFibGVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGEgZnVuY3Rpb247IHRoZXkgYXJlIHZpc2libGUKICAgIG9ubHkgdG8gdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQgYW5kIGl0cyBjaGlsZHJlbi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkLCBhIHZhcmlhYmxlCiAgICBhc3NpZ25tZW50IGVycm9yIG9jY3Vycywgb3IgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbi4ARGVmaW5lIG9yIGRpc3BsYXkgYWxpYXNlcy4KICAgIAogICAgV2l0aG91dCBhcmd1bWVudHMsIOKAmBtbMW1hbGlhcxtbMG3igJkgcHJpbnRzIHRoZSBsaXN0IG9mIGFsaWFzZXMgaW4gdGhlIHJldXNhYmxlCiAgICBmb3JtIOKAmBtbMW1hbGlhcyBOQU1FPVZBTFVFG1swbeKAmSBvbiBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE90aGVyd2lzZSwgYW4gYWxpYXMgaXMgZGVmaW5lZCBmb3IgZWFjaCBOQU1FIHdob3NlIFZBTFVFIGlzIGdpdmVuLgogICAgQSB0cmFpbGluZyBzcGFjZSBpbiBWQUxVRSBjYXVzZXMgdGhlIG5leHQgd29yZCB0byBiZSBjaGVja2VkIGZvcgogICAgYWxpYXMgc3Vic3RpdHV0aW9uIHdoZW4gdGhlIGFsaWFzIGlzIGV4cGFuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlwcmludCBhbGwgZGVmaW5lZCBhbGlhc2VzIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYWxpYXMgcmV0dXJucyB0cnVlIHVubGVzcyBhIE5BTUUgaXMgc3VwcGxpZWQgZm9yIHdoaWNoIG5vIGFsaWFzIGhhcyBiZWVuCiAgICBkZWZpbmVkLgBEZWZpbmUgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENyZWF0ZSBhIHNoZWxsIGZ1bmN0aW9uIG5hbWVkIE5BTUUuICBXaGVuIGludm9rZWQgYXMgYSBzaW1wbGUgY29tbWFuZCwKICAgIE5BTUUgcnVucyBDT01NQU5EcyBpbiB0aGUgY2FsbGluZyBzaGVsbCdzIGNvbnRleHQuICBXaGVuIE5BTUUgaXMgaW52b2tlZCwKICAgIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgJDEuLi4kbiwgYW5kIHRoZSBmdW5jdGlvbidzCiAgICBuYW1lIGlzIGluICRGVU5DTkFNRS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgcmVhZG9ubHkuAERpc3BsYXkgZGlyZWN0b3J5IHN0YWNrLgogICAgCiAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUg4oCYG1sxbXB1c2hkG1swbeKAmSBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIOKAmBtbMW1wb3BkG1swbeKAmSBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJCXRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKICAgICAgLXAJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZQogICAgICAtdglwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lIHByZWZpeGVkCiAgICAJCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJCXNob3duIGJ5IGRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aAogICAgCQl6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0aW4gY29tbWFuZHMuCiAgICAKICAgIERpc3BsYXlzIGJyaWVmIHN1bW1hcmllcyBvZiBidWlsdGluIGNvbW1hbmRzLiAgSWYgUEFUVEVSTiBpcwogICAgc3BlY2lmaWVkLCBnaXZlcyBkZXRhaWxlZCBoZWxwIG9uIGFsbCBjb21tYW5kcyBtYXRjaGluZyBQQVRURVJOLAogICAgb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIGhlbHAgdG9waWNzIGlzIHByaW50ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1kCW91dHB1dCBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0b3BpYwogICAgICAtbQlkaXNwbGF5IHVzYWdlIGluIHBzZXVkby1tYW5wYWdlIGZvcm1hdAogICAgICAtcwlvdXRwdXQgb25seSBhIHNob3J0IHVzYWdlIHN5bm9wc2lzIGZvciBlYWNoIHRvcGljIG1hdGNoaW5nCiAgICAJCVBBVFRFUk4KICAgIAogICAgQXJndW1lbnRzOgogICAgICBQQVRURVJOCVBhdHRlcm4gc3BlY2lmaXlpbmcgYSBoZWxwIHRvcGljCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBQQVRURVJOIGlzIG5vdCBmb3VuZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4ARGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kIHR5cGUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIGluZGljYXRlIGhvdyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBpZiB1c2VkIGFzIGEKICAgIGNvbW1hbmQgbmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJZGlzcGxheSBhbGwgbG9jYXRpb25zIGNvbnRhaW5pbmcgYW4gZXhlY3V0YWJsZSBuYW1lZCBOQU1FOwogICAgCQlpbmNsdWRlcyBhbGlhc2VzLCBidWlsdGlucywgYW5kIGZ1bmN0aW9ucywgaWYgYW5kIG9ubHkgaWYKICAgIAkJdGhlIOKAmBtbMW0tcBtbMG3igJkgb3B0aW9uIGlzIG5vdCBhbHNvIHVzZWQKICAgICAgLWYJc3VwcHJlc3Mgc2hlbGwgZnVuY3Rpb24gbG9va3VwCiAgICAgIC1QCWZvcmNlIGEgUEFUSCBzZWFyY2ggZm9yIGVhY2ggTkFNRSwgZXZlbiBpZiBpdCBpcyBhbiBhbGlhcywKICAgIAkJYnVpbHRpbiwgb3IgZnVuY3Rpb24sIGFuZCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGZpbGUKICAgIAkJdGhhdCB3b3VsZCBiZSBleGVjdXRlZAogICAgICAtcAlyZXR1cm5zIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQsCiAgICAJCW9yIG5vdGhpbmcgaWYg4oCYG1sxbXR5cGUgLXQgTkFNRRtbMG3igJkgd291bGQgbm90IHJldHVybiDigJgbWzFtZmlsZRtbMG3igJkKICAgICAgLXQJb3V0cHV0IGEgc2luZ2xlIHdvcmQgd2hpY2ggaXMgb25lIG9mIOKAmBtbMW1hbGlhcxtbMG3igJksIOKAmBtbMW1rZXl3b3JkG1swbeKAmSwKICAgIAkJ4oCYG1sxbWZ1bmN0aW9uG1swbeKAmSwg4oCYG1sxbWJ1aWx0aW4bWzBt4oCZLCDigJgbWzFtZmlsZRtbMG3igJkgb3Ig4oCYG1sxbRtbMG3igJksIGlmIE5BTUUgaXMgYW4gYWxpYXMsCiAgICAJCXNoZWxsIHJlc2VydmVkIHdvcmQsIHNoZWxsIGZ1bmN0aW9uLCBzaGVsbCBidWlsdGluLCBkaXNrIGZpbGUsCiAgICAJCW9yIG5vdCBmb3VuZCwgcmVzcGVjdGl2ZWx5CiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQlDb21tYW5kIG5hbWUgdG8gYmUgaW50ZXJwcmV0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFsbCBvZiB0aGUgTkFNRXMgYXJlIGZvdW5kOyBmYWlscyBpZiBhbnkgYXJlIG5vdCBmb3VuZC4ARGlzcGxheSBvciBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgZmMgaXMgdXNlZCB0byBsaXN0IG9yIGVkaXQgYW5kIHJlLWV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgaGlzdG9yeSBsaXN0LgogICAgRklSU1QgYW5kIExBU1QgY2FuIGJlIG51bWJlcnMgc3BlY2lmeWluZyB0aGUgcmFuZ2UsIG9yIEZJUlNUIGNhbiBiZSBhCiAgICBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGJlZ2lubmluZyB3aXRoIHRoYXQKICAgIHN0cmluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWUgRU5BTUUJc2VsZWN0IHdoaWNoIGVkaXRvciB0byB1c2UuICBEZWZhdWx0IGlzIEZDRURJVCwgdGhlbiBFRElUT1IsCiAgICAJCXRoZW4gdmkKICAgICAgLWwgCWxpc3QgbGluZXMgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgIC1uCW9taXQgbGluZSBudW1iZXJzIHdoZW4gbGlzdGluZwogICAgICAtcglyZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgKG5ld2VzdCBsaXN0ZWQgZmlyc3QpCiAgICAKICAgIFdpdGggdGhlIOKAmBtbMW1mYyAtcyBbcGF0PXJlcCAuLi5dIFtjb21tYW5kXRtbMG3igJkgZm9ybWF0LCBDT01NQU5EIGlzCiAgICByZS1leGVjdXRlZCBhZnRlciB0aGUgc3Vic3RpdHV0aW9uIE9MRD1ORVcgaXMgcGVyZm9ybWVkLgogICAgCiAgICBBIHVzZWZ1bCBhbGlhcyB0byB1c2Ugd2l0aCB0aGlzIGlzIHI9J2ZjIC1zJywgc28gdGhhdCB0eXBpbmcg4oCYG1sxbXIgY2MbWzBt4oCZCiAgICBydW5zIHRoZSBsYXN0IGNvbW1hbmQgYmVnaW5uaW5nIHdpdGgg4oCYG1sxbWNjG1swbeKAmSBhbmQgdHlwaW5nIOKAmBtbMW1yG1swbeKAmSByZS1leGVjdXRlcwogICAgdGhlIGxhc3QgY29tbWFuZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3Mgb3Igc3RhdHVzIG9mIGV4ZWN1dGVkIGNvbW1hbmQ7IG5vbi16ZXJvIGlmIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBtYW5pcHVsYXRlIHRoZSBoaXN0b3J5IGxpc3QuCiAgICAKICAgIERpc3BsYXkgdGhlIGhpc3RvcnkgbGlzdCB3aXRoIGxpbmUgbnVtYmVycywgcHJlZml4aW5nIGVhY2ggbW9kaWZpZWQKICAgIGVudHJ5IHdpdGggYSDigJgbWzFtKhtbMG3igJkuICBBbiBhcmd1bWVudCBvZiBOIGxpc3RzIG9ubHkgdGhlIGxhc3QgTiBlbnRyaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgaGlzdG9yeSBsaXN0IGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZW50cmllcwogICAgICAtZCBvZmZzZXQJZGVsZXRlIHRoZSBoaXN0b3J5IGVudHJ5IGF0IHBvc2l0aW9uIE9GRlNFVC4KICAgIAogICAgICAtYQlhcHBlbmQgaGlzdG9yeSBsaW5lcyBmcm9tIHRoaXMgc2Vzc2lvbiB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAgIC1uCXJlYWQgYWxsIGhpc3RvcnkgbGluZXMgbm90IGFscmVhZHkgcmVhZCBmcm9tIHRoZSBoaXN0b3J5IGZpbGUKICAgIAkJYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBoaXN0b3J5IGxpc3QKICAgICAgLXIJcmVhZCB0aGUgaGlzdG9yeSBmaWxlIGFuZCBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIHRoZSBoaXN0b3J5CiAgICAJCWxpc3QKICAgICAgLXcJd3JpdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAKICAgICAgLXAJcGVyZm9ybSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBlYWNoIEFSRyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0CiAgICAJCXdpdGhvdXQgc3RvcmluZyBpdCBpbiB0aGUgaGlzdG9yeSBsaXN0CiAgICAgIC1zCWFwcGVuZCB0aGUgQVJHcyB0byB0aGUgaGlzdG9yeSBsaXN0IGFzIGEgc2luZ2xlIGVudHJ5CiAgICAKICAgIElmIEZJTEVOQU1FIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBoaXN0b3J5IGZpbGUuICBPdGhlcndpc2UsCiAgICBpZiBISVNURklMRSBoYXMgYSB2YWx1ZSwgdGhhdCBpcyB1c2VkLCBlbHNlIH4vLmJhc2hfaGlzdG9yeS4KICAgIAogICAgSWYgdGhlIEhJU1RUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHNldCBhbmQgbm90IG51bGwsIGl0cyB2YWx1ZSBpcyB1c2VkCiAgICBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpIHRvIHByaW50IHRoZSB0aW1lIHN0YW1wIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBkaXNwbGF5ZWQgaGlzdG9yeSBlbnRyeS4gIE5vIHRpbWUgc3RhbXBzIGFyZSBwcmludGVkIG90aGVyd2lzZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBzZXQgZmlsZSBtb2RlIG1hc2suCiAgICAKICAgIFNldHMgdGhlIHVzZXIgZmlsZS1jcmVhdGlvbiBtYXNrIHRvIE1PREUuICBJZiBNT0RFIGlzIG9taXR0ZWQsIHByaW50cwogICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2suCiAgICAKICAgIElmIE1PREUgYmVnaW5zIHdpdGggYSBkaWdpdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyOwogICAgb3RoZXJ3aXNlIGl0IGlzIGEgc3ltYm9saWMgbW9kZSBzdHJpbmcgbGlrZSB0aGF0IGFjY2VwdGVkIGJ5IGNobW9kKDEpLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlpZiBNT0RFIGlzIG9taXR0ZWQsIG91dHB1dCBpbiBhIGZvcm0gdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1TCW1ha2VzIHRoZSBvdXRwdXQgc3ltYm9saWM7IG90aGVyd2lzZSBhbiBvY3RhbCBudW1iZXIgaXMgb3V0cHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBNT0RFIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgcG9zc2libGUgY29tcGxldGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zLgogICAgCiAgICBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2hlbGwgZnVuY3Rpb24gZ2VuZXJhdGluZyBwb3NzaWJsZQogICAgY29tcGxldGlvbnMuICBJZiB0aGUgb3B0aW9uYWwgV09SRCBhcmd1bWVudCBpcyBzdXBwbGllZCwgbWF0Y2hlcyBhZ2FpbnN0CiAgICBXT1JEIGFyZSBnZW5lcmF0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgcHJvY2VzcyB0aW1lcy4KICAgIAogICAgUHJpbnRzIHRoZSBhY2N1bXVsYXRlZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgZm9yIHRoZSBzaGVsbCBhbmQgYWxsIG9mIGl0cwogICAgY2hpbGQgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4ARGlzcGxheSBzdGF0dXMgb2Ygam9icy4KICAgIAogICAgTGlzdHMgdGhlIGFjdGl2ZSBqb2JzLiAgSk9CU1BFQyByZXN0cmljdHMgb3V0cHV0IHRvIHRoYXQgam9iLgogICAgV2l0aG91dCBvcHRpb25zLCB0aGUgc3RhdHVzIG9mIGFsbCBhY3RpdmUgam9icyBpcyBkaXNwbGF5ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCWxpc3RzIHByb2Nlc3MgSURzIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5mb3JtYXRpb24KICAgICAgLW4JbGlzdHMgb25seSBwcm9jZXNzZXMgdGhhdCBoYXZlIGNoYW5nZWQgc3RhdHVzIHNpbmNlIHRoZSBsYXN0CiAgICAJCW5vdGlmaWNhdGlvbgogICAgICAtcAlsaXN0cyBwcm9jZXNzIElEcyBvbmx5CiAgICAgIC1yCXJlc3RyaWN0IG91dHB1dCB0byBydW5uaW5nIGpvYnMKICAgICAgLXMJcmVzdHJpY3Qgb3V0cHV0IHRvIHN0b3BwZWQgam9icwogICAgCiAgICBJZiAteCBpcyBzdXBwbGllZCwgQ09NTUFORCBpcyBydW4gYWZ0ZXIgYWxsIGpvYiBzcGVjaWZpY2F0aW9ucyB0aGF0CiAgICBhcHBlYXIgaW4gQVJHUyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUgcHJvY2VzcyBJRCBvZiB0aGF0IGpvYidzCiAgICBwcm9jZXNzIGdyb3VwIGxlYWRlci4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4KICAgIElmIC14IGlzIHVzZWQsIHJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQuAERpc3BsYXkgdGhlIGxpc3Qgb2YgY3VycmVudGx5IHJlbWVtYmVyZWQgZGlyZWN0b3JpZXMuICBEaXJlY3RvcmllcwogICAgZmluZCB0aGVpciB3YXkgb250byB0aGUgbGlzdCB3aXRoIHRoZSDigJgbWzFtcHVzaGQbWzBt4oCZIGNvbW1hbmQ7IHlvdSBjYW4gZ2V0CiAgICBiYWNrIHVwIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUg4oCYG1sxbXBvcGQbWzBt4oCZIGNvbW1hbmQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1jCWNsZWFyIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYnkgZGVsZXRpbmcgYWxsIG9mIHRoZSBlbGVtZW50cwogICAgICAtbAlkbyBub3QgcHJpbnQgdGlsZGUtcHJlZml4ZWQgdmVyc2lvbnMgb2YgZGlyZWN0b3JpZXMgcmVsYXRpdmUKICAgIAl0byB5b3VyIGhvbWUgZGlyZWN0b3J5CiAgICAgIC1wCXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUKICAgICAgLXYJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZSBwcmVmaXhlZAogICAgCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieQogICAgCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgogICAgCiAgICAgIC1OCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgBEb25lAERvbmUoJWQpAEVNVCBpbnN0cnVjdGlvbgBFbmFibGUgYW5kIGRpc2FibGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGJ1aWx0aW4gc2hlbGwgY29tbWFuZHMuICBEaXNhYmxpbmcgYWxsb3dzIHlvdSB0bwogICAgZXhlY3V0ZSBhIGRpc2sgY29tbWFuZCB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHNoZWxsIGJ1aWx0aW4KICAgIHdpdGhvdXQgdXNpbmcgYSBmdWxsIHBhdGhuYW1lLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlwcmludCBhIGxpc3Qgb2YgYnVpbHRpbnMgc2hvd2luZyB3aGV0aGVyIG9yIG5vdCBlYWNoIGlzIGVuYWJsZWQKICAgICAgLW4JZGlzYWJsZSBlYWNoIE5BTUUgb3IgZGlzcGxheSBhIGxpc3Qgb2YgZGlzYWJsZWQgYnVpbHRpbnMKICAgICAgLXAJcHJpbnQgdGhlIGxpc3Qgb2YgYnVpbHRpbnMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgICAgLXMJcHJpbnQgb25seSB0aGUgbmFtZXMgb2YgUG9zaXgg4oCYG1sxbXNwZWNpYWwbWzBt4oCZIGJ1aWx0aW5zCiAgICAKICAgIE9wdGlvbnMgY29udHJvbGxpbmcgZHluYW1pYyBsb2FkaW5nOgogICAgICAtZglMb2FkIGJ1aWx0aW4gTkFNRSBmcm9tIHNoYXJlZCBvYmplY3QgRklMRU5BTUUKICAgICAgLWQJUmVtb3ZlIGEgYnVpbHRpbiBsb2FkZWQgd2l0aCAtZgogICAgCiAgICBXaXRob3V0IG9wdGlvbnMsIGVhY2ggTkFNRSBpcyBlbmFibGVkLgogICAgCiAgICBUbyB1c2UgdGhlIOKAmBtbMW10ZXN0G1swbeKAmSBmb3VuZCBpbiAkUEFUSCBpbnN0ZWFkIG9mIHRoZSBzaGVsbCBidWlsdGluCiAgICB2ZXJzaW9uLCB0eXBlIOKAmBtbMW1lbmFibGUgLW4gdGVzdBtbMG3igJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOQU1FIGlzIG5vdCBhIHNoZWxsIGJ1aWx0aW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSBFWFBSRVNTSU9OIGlzIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBhcml0aG1ldGljCiAgICBldmFsdWF0aW9uLiAgRXF1aXZhbGVudCB0byDigJwbWzFtbGV0IEVYUFJFU1NJT04bWzBt4oCdLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMSBpZiBFWFBSRVNTSU9OIGV2YWx1YXRlcyB0byAwOyByZXR1cm5zIDAgb3RoZXJ3aXNlLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb25zLgogICAgCiAgICBFdmFsdWF0ZSBlYWNoIEFSRyBhcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24uICBFdmFsdWF0aW9uIGlzIGRvbmUgaW4KICAgIGZpeGVkLXdpZHRoIGludGVnZXJzIHdpdGggbm8gY2hlY2sgZm9yIG92ZXJmbG93LCB0aG91Z2ggZGl2aXNpb24gYnkgMAogICAgaXMgdHJhcHBlZCBhbmQgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFRoZSBmb2xsb3dpbmcgbGlzdCBvZiBvcGVyYXRvcnMgaXMKICAgIGdyb3VwZWQgaW50byBsZXZlbHMgb2YgZXF1YWwtcHJlY2VkZW5jZSBvcGVyYXRvcnMuICBUaGUgbGV2ZWxzIGFyZSBsaXN0ZWQKICAgIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgcHJlY2VkZW5jZS4KICAgIAogICAgCWlkKyssIGlkLS0JdmFyaWFibGUgcG9zdC1pbmNyZW1lbnQsIHBvc3QtZGVjcmVtZW50CiAgICAJKytpZCwgLS1pZAl2YXJpYWJsZSBwcmUtaW5jcmVtZW50LCBwcmUtZGVjcmVtZW50CiAgICAJLSwgKwkJdW5hcnkgbWludXMsIHBsdXMKICAgIAkhLCB+CQlsb2dpY2FsIGFuZCBiaXR3aXNlIG5lZ2F0aW9uCiAgICAJKioJCWV4cG9uZW50aWF0aW9uCiAgICAJKiwgLywgJQkJbXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCByZW1haW5kZXIKICAgIAkrLCAtCQlhZGRpdGlvbiwgc3VidHJhY3Rpb24KICAgIAk8PCwgPj4JCWxlZnQgYW5kIHJpZ2h0IGJpdHdpc2Ugc2hpZnRzCiAgICAJPD0sID49LCA8LCA+CWNvbXBhcmlzb24KICAgIAk9PSwgIT0JCWVxdWFsaXR5LCBpbmVxdWFsaXR5CiAgICAJJgkJYml0d2lzZSBBTkQKICAgIAleCQliaXR3aXNlIFhPUgogICAgCXwJCWJpdHdpc2UgT1IKICAgIAkmJgkJbG9naWNhbCBBTkQKICAgIAl8fAkJbG9naWNhbCBPUgogICAgCWV4cHIgPyBleHByIDogZXhwcgogICAgCQkJY29uZGl0aW9uYWwgb3BlcmF0b3IKICAgIAk9LCAqPSwgLz0sICU9LAogICAgCSs9LCAtPSwgPDw9LCA+Pj0sCiAgICAJJj0sIF49LCB8PQlhc3NpZ25tZW50CiAgICAKICAgIFNoZWxsIHZhcmlhYmxlcyBhcmUgYWxsb3dlZCBhcyBvcGVyYW5kcy4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZQogICAgaXMgcmVwbGFjZWQgYnkgaXRzIHZhbHVlIChjb2VyY2VkIHRvIGEgZml4ZWQtd2lkdGggaW50ZWdlcikgd2l0aGluCiAgICBhbiBleHByZXNzaW9uLiAgVGhlIHZhcmlhYmxlIG5lZWQgbm90IGhhdmUgaXRzIGludGVnZXIgYXR0cmlidXRlCiAgICB0dXJuZWQgb24gdG8gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLgogICAgCiAgICBPcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlLiAgU3ViLWV4cHJlc3Npb25zIGluCiAgICBwYXJlbnRoZXNlcyBhcmUgZXZhbHVhdGVkIGZpcnN0IGFuZCBtYXkgb3ZlcnJpZGUgdGhlIHByZWNlZGVuY2UKICAgIHJ1bGVzIGFib3ZlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIElmIHRoZSBsYXN0IEFSRyBldmFsdWF0ZXMgdG8gMCwgbGV0IHJldHVybnMgMTsgbGV0IHJldHVybnMgMCBvdGhlcndpc2UuAEV2YWx1YXRlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgICAKICAgIEV4aXRzIHdpdGggYSBzdGF0dXMgb2YgMCAodHJ1ZSkgb3IgMSAoZmFsc2UpIGRlcGVuZGluZyBvbgogICAgdGhlIGV2YWx1YXRpb24gb2YgRVhQUi4gIEV4cHJlc3Npb25zIG1heSBiZSB1bmFyeSBvciBiaW5hcnkuICBVbmFyeQogICAgZXhwcmVzc2lvbnMgYXJlIG9mdGVuIHVzZWQgdG8gZXhhbWluZSB0aGUgc3RhdHVzIG9mIGEgZmlsZS4gIFRoZXJlCiAgICBhcmUgc3RyaW5nIG9wZXJhdG9ycyBhbmQgbnVtZXJpYyBjb21wYXJpc29uIG9wZXJhdG9ycyBhcyB3ZWxsLgogICAgCiAgICBUaGUgYmVoYXZpb3Igb2YgdGVzdCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiAgUmVhZCB0aGUKICAgIGJhc2ggbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBGaWxlIG9wZXJhdG9yczoKICAgIAogICAgICAtYSBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzLgogICAgICAtYiBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYmxvY2sgc3BlY2lhbC4KICAgICAgLWMgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGNoYXJhY3RlciBzcGVjaWFsLgogICAgICAtZCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBkaXJlY3RvcnkuCiAgICAgIC1lIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMuCiAgICAgIC1mIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlLgogICAgICAtZyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgc2V0LWdyb3VwLWlkLgogICAgICAtaCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtTCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtayBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaGFzIGl0cyDigJgbWzFtc3RpY2t5G1swbeKAmSBiaXQgc2V0LgogICAgICAtcCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBuYW1lZCBwaXBlLgogICAgICAtciBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgcmVhZGFibGUgYnkgeW91LgogICAgICAtcyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuCiAgICAgIC1TIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHNvY2tldC4KICAgICAgLXQgRkQgICAgICAgICAgVHJ1ZSBpZiBGRCBpcyBvcGVuZWQgb24gYSB0ZXJtaW5hbC4KICAgICAgLXUgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBzZXQtdXNlci1pZC4KICAgICAgLXcgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyB3cml0YWJsZSBieSB5b3UuCiAgICAgIC14IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZSBieSB5b3UuCiAgICAgIC1PIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZWZmZWN0aXZlbHkgb3duZWQgYnkgeW91LgogICAgICAtRyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHlvdXIgZ3JvdXAuCiAgICAgIC1OIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgaXQgd2FzIGxhc3QgcmVhZC4KICAgIAogICAgICBGSUxFMSAtbnQgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgbmV3ZXIgdGhhbiBmaWxlMiAoYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIGRhdGUpLgogICAgCiAgICAgIEZJTEUxIC1vdCBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBvbGRlciB0aGFuIGZpbGUyLgogICAgCiAgICAgIEZJTEUxIC1lZiBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBhIGhhcmQgbGluayB0byBmaWxlMi4KICAgIAogICAgU3RyaW5nIG9wZXJhdG9yczoKICAgIAogICAgICAteiBTVFJJTkcgICAgICBUcnVlIGlmIHN0cmluZyBpcyBlbXB0eS4KICAgIAogICAgICAtbiBTVFJJTkcKICAgICAgICAgU1RSSU5HICAgICAgVHJ1ZSBpZiBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAgCiAgICAgIFNUUklORzEgPSBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIHN0cmluZ3MgYXJlIGVxdWFsLgogICAgICBTVFJJTkcxICE9IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3RyaW5ncyBhcmUgbm90IGVxdWFsLgogICAgICBTVFJJTkcxIDwgU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIFNUUklORzEgc29ydHMgYmVmb3JlIFNUUklORzIgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgICAgIFNUUklORzEgPiBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgU1RSSU5HMSBzb3J0cyBhZnRlciBTVFJJTkcyIGxleGljb2dyYXBoaWNhbGx5LgogICAgCiAgICBPdGhlciBvcGVyYXRvcnM6CiAgICAKICAgICAgLW8gT1BUSU9OICAgICAgVHJ1ZSBpZiB0aGUgc2hlbGwgb3B0aW9uIE9QVElPTiBpcyBlbmFibGVkLgogICAgICAtdiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0LgogICAgICAtUiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0IGFuZCBpcyBhIG5hbWUKICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLgogICAgICAhIEVYUFIgICAgICAgICBUcnVlIGlmIGV4cHIgaXMgZmFsc2UuCiAgICAgIEVYUFIxIC1hIEVYUFIyIFRydWUgaWYgYm90aCBleHByMSBBTkQgZXhwcjIgYXJlIHRydWUuCiAgICAgIEVYUFIxIC1vIEVYUFIyIFRydWUgaWYgZWl0aGVyIGV4cHIxIE9SIGV4cHIyIGlzIHRydWUuCiAgICAKICAgICAgYXJnMSBPUCBhcmcyICAgQXJpdGhtZXRpYyB0ZXN0cy4gIE9QIGlzIG9uZSBvZiAtZXEsIC1uZSwKICAgICAgICAgICAgICAgICAgICAgLWx0LCAtbGUsIC1ndCwgb3IgLWdlLgogICAgCiAgICBBcml0aG1ldGljIGJpbmFyeSBvcGVyYXRvcnMgcmV0dXJuIHRydWUgaWYgQVJHMSBpcyBlcXVhbCwgbm90LWVxdWFsLAogICAgbGVzcy10aGFuLCBsZXNzLXRoYW4tb3ItZXF1YWwsIGdyZWF0ZXItdGhhbiwgb3IgZ3JlYXRlci10aGFuLW9yLWVxdWFsCiAgICB0aGFuIEFSRzIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIEVYUFIgZXZhbHVhdGVzIHRvIHRydWU7IGZhaWxzIGlmIEVYUFIgZXZhbHVhdGVzIHRvCiAgICBmYWxzZSBvciBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIGdpdmVuLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlIOKAnBtbMW10ZXN0G1swbeKAnSBidWlsdGluLCBidXQgdGhlIGxhc3QgYXJndW1lbnQgbXVzdAogICAgYmUgYSBsaXRlcmFsIOKAmBtbMW1dG1swbeKAmSwgdG8gbWF0Y2ggdGhlIG9wZW5pbmcg4oCYG1sxbVsbWzBt4oCZLgBFeGVjdXRlIGEgc2ltcGxlIGNvbW1hbmQgb3IgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kcy4KICAgIAogICAgUnVucyBDT01NQU5EIHdpdGggQVJHUyBzdXBwcmVzc2luZyAgc2hlbGwgZnVuY3Rpb24gbG9va3VwLCBvciBkaXNwbGF5CiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIENPTU1BTkRzLiAgQ2FuIGJlIHVzZWQgdG8gaW52b2tlIGNvbW1hbmRzCiAgICBvbiBkaXNrIHdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcCAgICB1c2UgYSBkZWZhdWx0IHZhbHVlIGZvciBQQVRIIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBvZgogICAgICAgICAgICB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzCiAgICAgIC12ICAgIHByaW50IGEgZGVzY3JpcHRpb24gb2YgQ09NTUFORCBzaW1pbGFyIHRvIHRoZSDigJgbWzFtdHlwZRtbMG3igJkgYnVpbHRpbgogICAgICAtViAgICBwcmludCBhIG1vcmUgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiBlYWNoIENPTU1BTkQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQsIG9yIGZhaWx1cmUgaWYgQ09NTUFORCBpcyBub3QgZm91bmQuAEV4ZWN1dGUgYXJndW1lbnRzIGFzIGEgc2hlbGwgY29tbWFuZC4KICAgIAogICAgQ29tYmluZSBBUkdzIGludG8gYSBzaW5nbGUgc3RyaW5nLCB1c2UgdGhlIHJlc3VsdCBhcyBpbnB1dCB0byB0aGUgc2hlbGwsCiAgICBhbmQgZXhlY3V0ZSB0aGUgcmVzdWx0aW5nIGNvbW1hbmRzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgZXhpdCBzdGF0dXMgb2YgY29tbWFuZCBvciBzdWNjZXNzIGlmIGNvbW1hbmQgaXMgbnVsbC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBkb2VzIG5vdCBzdWNjZWVkLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIOKAmBtbMW11bnRpbBtbMG3igJkgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIHdoaWNoIGlzIG5vdCB6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGFzIGxvbmcgYXMgYSB0ZXN0IHN1Y2NlZWRzLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIOKAmBtbMW13aGlsZRtbMG3igJkgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIG9mIHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYmFzZWQgb24gY29uZGl0aW9uYWwuCiAgICAKICAgIFRoZSDigJgbWzFtaWYgQ09NTUFORFMbWzBt4oCZIGxpc3QgaXMgZXhlY3V0ZWQuICBJZiBpdHMgZXhpdCBzdGF0dXMgaXMgemVybywgdGhlbiB0aGUKICAgIOKAmBtbMW10aGVuIENPTU1BTkRTG1swbeKAmSBsaXN0IGlzIGV4ZWN1dGVkLiAgT3RoZXJ3aXNlLCBlYWNoIOKAmBtbMW1lbGlmIENPTU1BTkRTG1swbeKAmSBsaXN0IGlzCiAgICBleGVjdXRlZCBpbiB0dXJuLCBhbmQgaWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nCiAgICDigJgbWzFtdGhlbiBDT01NQU5EUxtbMG3igJkgbGlzdCBpcyBleGVjdXRlZCBhbmQgdGhlIGlmIGNvbW1hbmQgY29tcGxldGVzLiAgT3RoZXJ3aXNlLAogICAgdGhlIOKAmBtbMW1lbHNlIENPTU1BTkRTG1swbeKAmSBsaXN0IGlzIGV4ZWN1dGVkLCBpZiBwcmVzZW50LiAgVGhlIGV4aXQgc3RhdHVzIG9mIHRoZQogICAgZW50aXJlIGNvbnN0cnVjdCBpcyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZCwgb3IgemVybwogICAgaWYgbm8gY29uZGl0aW9uIHRlc3RlZCB0cnVlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGJhc2VkIG9uIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAKICAgIFNlbGVjdGl2ZWx5IGV4ZWN1dGUgQ09NTUFORFMgYmFzZWQgdXBvbiBXT1JEIG1hdGNoaW5nIFBBVFRFUk4uICBUaGUKICAgIOKAmBtbMW18G1swbeKAmSBpcyB1c2VkIHRvIHNlcGFyYXRlIG11bHRpcGxlIHBhdHRlcm5zLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhIGxpc3QuCiAgICAKICAgIFRoZSDigJgbWzFtZm9yG1swbeKAmSBsb29wIGV4ZWN1dGVzIGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgZm9yIGVhY2ggbWVtYmVyIGluIGEKICAgIGxpc3Qgb2YgaXRlbXMuICBJZiDigJgbWzFtaW4gV09SRFMgLi4uOxtbMG3igJkgaXMgbm90IHByZXNlbnQsIHRoZW4g4oCYG1sxbWluIOKAnBtbMW0kQBtbMG3igJ0bWzBt4oCZIGlzCiAgICBhc3N1bWVkLiAgRm9yIGVhY2ggZWxlbWVudCBpbiBXT1JEUywgTkFNRSBpcyBzZXQgdG8gdGhhdCBlbGVtZW50LCBhbmQKICAgIHRoZSBDT01NQU5EUyBhcmUgZXhlY3V0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuCiAgICAKICAgIFJlYWQgYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBGSUxFTkFNRSBpbiB0aGUgY3VycmVudCBzaGVsbC4gIFRoZQogICAgZW50cmllcyBpbiAkUEFUSCBhcmUgdXNlZCB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFTkFNRS4KICAgIElmIGFueSBBUkdVTUVOVFMgYXJlIHN1cHBsaWVkLCB0aGV5IGJlY29tZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICB3aGVuIEZJTEVOQU1FIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkIGluIEZJTEVOQU1FOyBmYWlscyBpZgogICAgRklMRU5BTUUgY2Fubm90IGJlIHJlYWQuAEV4ZWN1dGUgY29uZGl0aW9uYWwgY29tbWFuZC4KICAgIAogICAgUmV0dXJucyBhIHN0YXR1cyBvZiAwIG9yIDEgZGVwZW5kaW5nIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25kaXRpb25hbAogICAgZXhwcmVzc2lvbiBFWFBSRVNTSU9OLiAgRXhwcmVzc2lvbnMgYXJlIGNvbXBvc2VkIG9mIHRoZSBzYW1lIHByaW1hcmllcyB1c2VkCiAgICBieSB0aGUg4oCYG1sxbXRlc3QbWzBt4oCZIGJ1aWx0aW4sIGFuZCBtYXkgYmUgY29tYmluZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRvcnM6CiAgICAKICAgICAgKCBFWFBSRVNTSU9OICkJUmV0dXJucyB0aGUgdmFsdWUgb2YgRVhQUkVTU0lPTgogICAgICAhIEVYUFJFU1NJT04JCVRydWUgaWYgRVhQUkVTU0lPTiBpcyBmYWxzZTsgZWxzZSBmYWxzZQogICAgICBFWFBSMSAmJiBFWFBSMglUcnVlIGlmIGJvdGggRVhQUjEgYW5kIEVYUFIyIGFyZSB0cnVlOyBlbHNlIGZhbHNlCiAgICAgIEVYUFIxIHx8IEVYUFIyCVRydWUgaWYgZWl0aGVyIEVYUFIxIG9yIEVYUFIyIGlzIHRydWU7IGVsc2UgZmFsc2UKICAgIAogICAgV2hlbiB0aGUg4oCYG1sxbT09G1swbeKAmSBhbmQg4oCYG1sxbSE9G1swbeKAmSBvcGVyYXRvcnMgYXJlIHVzZWQsIHRoZSBzdHJpbmcgdG8gdGhlIHJpZ2h0IG9mCiAgICB0aGUgb3BlcmF0b3IgaXMgdXNlZCBhcyBhIHBhdHRlcm4gYW5kIHBhdHRlcm4gbWF0Y2hpbmcgaXMgcGVyZm9ybWVkLgogICAgV2hlbiB0aGUg4oCYG1sxbT1+G1swbeKAmSBvcGVyYXRvciBpcyB1c2VkLCB0aGUgc3RyaW5nIHRvIHRoZSByaWdodCBvZiB0aGUgb3BlcmF0b3IKICAgIGlzIG1hdGNoZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSAmJiBhbmQgfHwgb3BlcmF0b3JzIGRvIG5vdCBldmFsdWF0ZSBFWFBSMiBpZiBFWFBSMSBpcyBzdWZmaWNpZW50IHRvCiAgICBkZXRlcm1pbmUgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICAwIG9yIDEgZGVwZW5kaW5nIG9uIHZhbHVlIG9mIEVYUFJFU1NJT04uAEV4ZWN1dGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEV4ZWN1dGUgU0hFTEwtQlVJTFRJTiB3aXRoIGFyZ3VtZW50cyBBUkdzIHdpdGhvdXQgcGVyZm9ybWluZyBjb21tYW5kCiAgICBsb29rdXAuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIHJlaW1wbGVtZW50IGEgc2hlbGwgYnVpbHRpbgogICAgYXMgYSBzaGVsbCBmdW5jdGlvbiwgYnV0IG5lZWQgdG8gZXhlY3V0ZSB0aGUgYnVpbHRpbiB3aXRoaW4gdGhlIGZ1bmN0aW9uLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIFNIRUxMLUJVSUxUSU4sIG9yIGZhbHNlIGlmIFNIRUxMLUJVSUxUSU4gaXMKICAgIG5vdCBhIHNoZWxsIGJ1aWx0aW4uLgBFeGl0ICVkAEV4aXQgYSBsb2dpbiBzaGVsbC4KICAgIAogICAgRXhpdHMgYSBsb2dpbiBzaGVsbCB3aXRoIGV4aXQgc3RhdHVzIE4uICBSZXR1cm5zIGFuIGVycm9yIGlmIG5vdCBleGVjdXRlZAogICAgaW4gYSBsb2dpbiBzaGVsbC4ARXhpdCBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgRXhpdCBhIEZPUiwgV0hJTEUgb3IgVU5USUwgbG9vcC4gIElmIE4gaXMgc3BlY2lmaWVkLCBicmVhayBOIGVuY2xvc2luZwogICAgbG9vcHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIGV4aXQgc3RhdHVzIGlzIDAgdW5sZXNzIE4gaXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLgBFeGl0IHRoZSBzaGVsbC4KICAgIAogICAgRXhpdHMgdGhlIHNoZWxsIHdpdGggYSBzdGF0dXMgb2YgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIGV4aXQgc3RhdHVzCiAgICBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEZpbGUgbGltaXQARmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uAEZvcm1hdHMgYW5kIHByaW50cyBBUkdVTUVOVFMgdW5kZXIgY29udHJvbCBvZiB0aGUgRk9STUFULgogICAgCiAgICBPcHRpb25zOgogICAgICAtdiB2YXIJYXNzaWduIHRoZSBvdXRwdXQgdG8gc2hlbGwgdmFyaWFibGUgVkFSIHJhdGhlciB0aGFuCiAgICAJCWRpc3BsYXkgaXQgb24gdGhlIHN0YW5kYXJkIG91dHB1dAogICAgCiAgICBGT1JNQVQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRocmVlIHR5cGVzIG9mIG9iamVjdHM6IHBsYWluCiAgICBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgc2ltcGx5IGNvcGllZCB0byBzdGFuZGFyZCBvdXRwdXQ7IGNoYXJhY3RlciBlc2NhcGUKICAgIHNlcXVlbmNlcywgd2hpY2ggYXJlIGNvbnZlcnRlZCBhbmQgY29waWVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQ7IGFuZAogICAgZm9ybWF0IHNwZWNpZmljYXRpb25zLCBlYWNoIG9mIHdoaWNoIGNhdXNlcyBwcmludGluZyBvZiB0aGUgbmV4dCBzdWNjZXNzaXZlCiAgICBhcmd1bWVudC4KICAgIAogICAgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBkZXNjcmliZWQgaW4gcHJpbnRmKDEpLAogICAgcHJpbnRmIGludGVycHJldHM6CiAgICAKICAgICAgJWIJZXhwYW5kIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CiAgICAgICVxCXF1b3RlIHRoZSBhcmd1bWVudCBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgc2hlbGwgaW5wdXQKICAgICAgJShmbXQpVAlvdXRwdXQgdGhlIGRhdGUtdGltZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gdXNpbmcgRk1UIGFzIGEgZm9ybWF0CiAgICAJICAgICAgICBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpCiAgICAKICAgIFRoZSBmb3JtYXQgaXMgcmUtdXNlZCBhcyBuZWNlc3NhcnkgdG8gY29uc3VtZSBhbGwgb2YgdGhlIGFyZ3VtZW50cy4gIElmCiAgICB0aGVyZSBhcmUgZmV3ZXIgYXJndW1lbnRzIHRoYW4gdGhlIGZvcm1hdCByZXF1aXJlcywgIGV4dHJhIGZvcm1hdAogICAgc3BlY2lmaWNhdGlvbnMgYmVoYXZlIGFzIGlmIGEgemVybyB2YWx1ZSBvciBudWxsIHN0cmluZywgYXMgYXBwcm9wcmlhdGUsCiAgICBoYWQgYmVlbiBzdXBwbGllZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGEgd3JpdGUgb3IgYXNzaWdubWVudAogICAgZXJyb3Igb2NjdXJzLgBHTlUgYmFzaCwgdmVyc2lvbiAlcyAoJXMpCgBHTlUgYmFzaCwgdmVyc2lvbiAlcy0oJXMpCgBHTlUgbG9uZyBvcHRpb25zOgoAR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4KAEdyb3VwIGNvbW1hbmRzIGFzIGEgdW5pdC4KICAgIAogICAgUnVuIGEgc2V0IG9mIGNvbW1hbmRzIGluIGEgZ3JvdXAuICBUaGlzIGlzIG9uZSB3YXkgdG8gcmVkaXJlY3QgYW4KICAgIGVudGlyZSBzZXQgb2YgY29tbWFuZHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEhGVCBpbnB1dCBkYXRhIHBlbmRpbmcASEZUIG1vbml0b3IgbW9kZSBncmFudGVkAEhGVCBtb25pdG9yIG1vZGUgcmV0cmFjdGVkAEhGVCBzb3VuZCBzZXF1ZW5jZSBoYXMgY29tcGxldGVkAEhPTUUgbm90IHNldABIYW5ndXAASSBoYXZlIG5vIG5hbWUhAEkvTyByZWFkeQBJTkZPUk06IABJbGxlZ2FsIGluc3RydWN0aW9uAEluZm9ybWF0aW9uIHJlcXVlc3QASW50ZXJydXB0AEtpbGxlZABMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgoATWFyayBzaGVsbCB2YXJpYWJsZXMgYXMgdW5jaGFuZ2VhYmxlLgogICAgCiAgICBNYXJrIGVhY2ggTkFNRSBhcyByZWFkLW9ubHk7IHRoZSB2YWx1ZXMgb2YgdGhlc2UgTkFNRXMgbWF5IG5vdCBiZQogICAgY2hhbmdlZCBieSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQuICBJZiBWQUxVRSBpcyBzdXBwbGllZCwgYXNzaWduIFZBTFVFCiAgICBiZWZvcmUgbWFya2luZyBhcyByZWFkLW9ubHkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlZmVyIHRvIGluZGV4ZWQgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1BCXJlZmVyIHRvIGFzc29jaWF0aXZlIGFycmF5IHZhcmlhYmxlcwogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlYWRvbmx5IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMsCiAgICAJCWRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgLWYgb3B0aW9uIGlzIGdpdmVuCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIOKAmBtbMW0tLRtbMG3igJkgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4ATW9kaWZ5IG9yIGRpc3BsYXkgY29tcGxldGlvbiBvcHRpb25zLgogICAgCiAgICBNb2RpZnkgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8gTkFNRXMgYXJlIHN1cHBsaWVkLAogICAgdGhlIGNvbXBsZXRpb24gY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLiAgSWYgbm8gT1BUSU9OcyBhcmUgZ2l2ZW4sIHByaW50CiAgICB0aGUgY29tcGxldGlvbiBvcHRpb25zIGZvciBlYWNoIE5BTUUgb3IgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgCS1vIG9wdGlvbglTZXQgY29tcGxldGlvbiBvcHRpb24gT1BUSU9OIGZvciBlYWNoIE5BTUUKICAgIAktRAkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSDigJwbWzFtZGVmYXVsdBtbMG3igJ0gY29tbWFuZCBjb21wbGV0aW9uCiAgICAJLUUJCUNoYW5nZSBvcHRpb25zIGZvciB0aGUg4oCcG1sxbWVtcHR5G1swbeKAnSBjb21tYW5kIGNvbXBsZXRpb24KICAgIAogICAgVXNpbmcg4oCYG1sxbStvG1swbeKAmSBpbnN0ZWFkIG9mIOKAmBtbMW0tbxtbMG3igJkgdHVybnMgb2ZmIHRoZSBzcGVjaWZpZWQgb3B0aW9uLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAKICAgIEVhY2ggTkFNRSByZWZlcnMgdG8gYSBjb21tYW5kIGZvciB3aGljaCBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBtdXN0CiAgICBoYXZlIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSDigJgbWzFtY29tcGxldGUbWzBt4oCZIGJ1aWx0aW4uICBJZiBubyBOQU1FcwogICAgYXJlIHN1cHBsaWVkLCBjb21wb3B0IG11c3QgYmUgY2FsbGVkIGJ5IGEgZnVuY3Rpb24gY3VycmVudGx5IGdlbmVyYXRpbmcKICAgIGNvbXBsZXRpb25zLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoYXQgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCiAgICBnZW5lcmF0b3IgYXJlIG1vZGlmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgTkFNRSBkb2VzIG5vdAogICAgaGF2ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBkZWZpbmVkLgBNb2RpZnkgc2hlbGwgcmVzb3VyY2UgbGltaXRzLgogICAgCiAgICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIGFuZCBwcm9jZXNzZXMKICAgIGl0IGNyZWF0ZXMsIG9uIHN5c3RlbXMgdGhhdCBhbGxvdyBzdWNoIGNvbnRyb2wuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1TCXVzZSB0aGUg4oCYG1sxbXNvZnQbWzBt4oCZIHJlc291cmNlIGxpbWl0CiAgICAgIC1ICXVzZSB0aGUg4oCYG1sxbWhhcmQbWzBt4oCZIHJlc291cmNlIGxpbWl0CiAgICAgIC1hCWFsbCBjdXJyZW50IGxpbWl0cyBhcmUgcmVwb3J0ZWQKICAgICAgLWIJdGhlIHNvY2tldCBidWZmZXIgc2l6ZQogICAgICAtYwl0aGUgbWF4aW11bSBzaXplIG9mIGNvcmUgZmlsZXMgY3JlYXRlZAogICAgICAtZAl0aGUgbWF4aW11bSBzaXplIG9mIGEgcHJvY2VzcydzIGRhdGEgc2VnbWVudAogICAgICAtZQl0aGUgbWF4aW11bSBzY2hlZHVsaW5nIHByaW9yaXR5ICjigJgbWzFtbmljZRtbMG3igJkpCiAgICAgIC1mCXRoZSBtYXhpbXVtIHNpemUgb2YgZmlsZXMgd3JpdHRlbiBieSB0aGUgc2hlbGwgYW5kIGl0cyBjaGlsZHJlbgogICAgICAtaQl0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzCiAgICAgIC1rCXRoZSBtYXhpbXVtIG51bWJlciBvZiBrcXVldWVzIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm9jZXNzCiAgICAgIC1sCXRoZSBtYXhpbXVtIHNpemUgYSBwcm9jZXNzIG1heSBsb2NrIGludG8gbWVtb3J5CiAgICAgIC1tCXRoZSBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplCiAgICAgIC1uCXRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICAgICAgLXAJdGhlIHBpcGUgYnVmZmVyIHNpemUKICAgICAgLXEJdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzCiAgICAgIC1yCXRoZSBtYXhpbXVtIHJlYWwtdGltZSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgICAgIC1zCXRoZSBtYXhpbXVtIHN0YWNrIHNpemUKICAgICAgLXQJdGhlIG1heGltdW0gYW1vdW50IG9mIGNwdSB0aW1lIGluIHNlY29uZHMKICAgICAgLXUJdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXIgcHJvY2Vzc2VzCiAgICAgIC12CXRoZSBzaXplIG9mIHZpcnR1YWwgbWVtb3J5CiAgICAgIC14CXRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGxvY2tzCiAgICAgIC1QCXRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG90ZXJtaW5hbHMKICAgICAgLVQJdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKICAgIAogICAgTm90IGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KICAgIAogICAgSWYgTElNSVQgaXMgZ2l2ZW4sIGl0IGlzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZTsgdGhlCiAgICBzcGVjaWFsIExJTUlUIHZhbHVlcyDigJgbWzFtc29mdBtbMG3igJksIOKAmBtbMW1oYXJkG1swbeKAmSwgYW5kIOKAmBtbMW11bmxpbWl0ZWQbWzBt4oCZIHN0YW5kIGZvciB0aGUKICAgIGN1cnJlbnQgc29mdCBsaW1pdCwgdGhlIGN1cnJlbnQgaGFyZCBsaW1pdCwgYW5kIG5vIGxpbWl0LCByZXNwZWN0aXZlbHkuCiAgICBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgcHJpbnRlZC4gIElmCiAgICBubyBvcHRpb24gaXMgZ2l2ZW4sIHRoZW4gLWYgaXMgYXNzdW1lZC4KICAgIAogICAgVmFsdWVzIGFyZSBpbiAxMDI0LWJ5dGUgaW5jcmVtZW50cywgZXhjZXB0IGZvciAtdCwgd2hpY2ggaXMgaW4gc2Vjb25kcywKICAgIC1wLCB3aGljaCBpcyBpbiBpbmNyZW1lbnRzIG9mIDUxMiBieXRlcywgYW5kIC11LCB3aGljaCBpcyBhbiB1bnNjYWxlZAogICAgbnVtYmVyIG9mIHByb2Nlc3Nlcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGFuIGVycm9yIG9jY3Vycy4ATW92ZSBqb2IgdG8gdGhlIGZvcmVncm91bmQuCiAgICAKICAgIFBsYWNlIHRoZSBqb2IgaWRlbnRpZmllZCBieSBKT0JfU1BFQyBpbiB0aGUgZm9yZWdyb3VuZCwgbWFraW5nIGl0IHRoZQogICAgY3VycmVudCBqb2IuICBJZiBKT0JfU1BFQyBpcyBub3QgcHJlc2VudCwgdGhlIHNoZWxsJ3Mgbm90aW9uIG9mIHRoZQogICAgY3VycmVudCBqb2IgaXMgdXNlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBTdGF0dXMgb2YgY29tbWFuZCBwbGFjZWQgaW4gZm9yZWdyb3VuZCwgb3IgZmFpbHVyZSBpZiBhbiBlcnJvciBvY2N1cnMuAE1vdmUgam9icyB0byB0aGUgYmFja2dyb3VuZC4KICAgIAogICAgUGxhY2UgdGhlIGpvYnMgaWRlbnRpZmllZCBieSBlYWNoIEpPQl9TUEVDIGluIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGV5CiAgICBoYWQgYmVlbiBzdGFydGVkIHdpdGgg4oCYG1sxbSYbWzBt4oCZLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbgogICAgb2YgdGhlIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAE51bGwgY29tbWFuZC4KICAgIAogICAgTm8gZWZmZWN0OyB0aGUgY29tbWFuZCBkb2VzIG5vdGhpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBPTERQV0Qgbm90IHNldABQYXJzZSBvcHRpb24gYXJndW1lbnRzLgogICAgCiAgICBHZXRvcHRzIGlzIHVzZWQgYnkgc2hlbGwgcHJvY2VkdXJlcyB0byBwYXJzZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKICAgIGFzIG9wdGlvbnMuCiAgICAKICAgIE9QVFNUUklORyBjb250YWlucyB0aGUgb3B0aW9uIGxldHRlcnMgdG8gYmUgcmVjb2duaXplZDsgaWYgYSBsZXR0ZXIKICAgIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24sIHRoZSBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBhcmd1bWVudCwKICAgIHdoaWNoIHNob3VsZCBiZSBzZXBhcmF0ZWQgZnJvbSBpdCBieSB3aGl0ZSBzcGFjZS4KICAgIAogICAgRWFjaCB0aW1lIGl0IGlzIGludm9rZWQsIGdldG9wdHMgd2lsbCBwbGFjZSB0aGUgbmV4dCBvcHRpb24gaW4gdGhlCiAgICBzaGVsbCB2YXJpYWJsZSAkbmFtZSwgaW5pdGlhbGl6aW5nIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhpc3QsIGFuZAogICAgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGFyZ3VtZW50IHRvIGJlIHByb2Nlc3NlZCBpbnRvIHRoZSBzaGVsbAogICAgdmFyaWFibGUgT1BUSU5ELiAgT1BUSU5EIGlzIGluaXRpYWxpemVkIHRvIDEgZWFjaCB0aW1lIHRoZSBzaGVsbCBvcgogICAgYSBzaGVsbCBzY3JpcHQgaXMgaW52b2tlZC4gIFdoZW4gYW4gb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAogICAgZ2V0b3B0cyBwbGFjZXMgdGhhdCBhcmd1bWVudCBpbnRvIHRoZSBzaGVsbCB2YXJpYWJsZSBPUFRBUkcuCiAgICAKICAgIGdldG9wdHMgcmVwb3J0cyBlcnJvcnMgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgb2YgT1BUU1RSSU5HIGlzIGEgY29sb24sIGdldG9wdHMgdXNlcyBzaWxlbnQgZXJyb3IgcmVwb3J0aW5nLiAgSW4KICAgIHRoaXMgbW9kZSwgbm8gZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50ZWQuICBJZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZm91bmQgaW50byBPUFRBUkcuICBJZiBhCiAgICByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGdldG9wdHMgcGxhY2VzIGEg4oCYG1sxbTobWzBt4oCZIGludG8gTkFNRSBhbmQKICAgIHNldHMgT1BUQVJHIHRvIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvdW5kLiAgSWYgZ2V0b3B0cyBpcyBub3QgaW4KICAgIHNpbGVudCBtb2RlLCBhbmQgYW4gaW52YWxpZCBvcHRpb24gaXMgc2VlbiwgZ2V0b3B0cyBwbGFjZXMg4oCYG1sxbT8bWzBt4oCZIGludG8KICAgIE5BTUUgYW5kIHVuc2V0cyBPUFRBUkcuICBJZiBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBmb3VuZCwgYSDigJgbWzFtPxtbMG3igJkKICAgIGlzIHBsYWNlZCBpbiBOQU1FLCBPUFRBUkcgaXMgdW5zZXQsIGFuZCBhIGRpYWdub3N0aWMgbWVzc2FnZSBpcwogICAgcHJpbnRlZC4KICAgIAogICAgSWYgdGhlIHNoZWxsIHZhcmlhYmxlIE9QVEVSUiBoYXMgdGhlIHZhbHVlIDAsIGdldG9wdHMgZGlzYWJsZXMgdGhlCiAgICBwcmludGluZyBvZiBlcnJvciBtZXNzYWdlcywgZXZlbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCiAgICBPUFRTVFJJTkcgaXMgbm90IGEgY29sb24uICBPUFRFUlIgaGFzIHRoZSB2YWx1ZSAxIGJ5IGRlZmF1bHQuCiAgICAKICAgIEdldG9wdHMgbm9ybWFsbHkgcGFyc2VzIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgKCQwIC0gJDkpLCBidXQgaWYKICAgIG1vcmUgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhleSBhcmUgcGFyc2VkIGluc3RlYWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFuIG9wdGlvbiBpcyBmb3VuZDsgZmFpbHMgaWYgdGhlIGVuZCBvZiBvcHRpb25zIGlzCiAgICBlbmNvdW50ZXJlZCBvciBhbiBlcnJvciBvY2N1cnMuAFByaW50IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlwcmludCB0aGUgdmFsdWUgb2YgJFBXRCBpZiBpdCBuYW1lcyB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeQogICAgICAtUAlwcmludCB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBzeW1ib2xpYyBsaW5rcwogICAgCiAgICBCeSBkZWZhdWx0LCDigJgbWzFtcHdkG1swbeKAmSBiZWhhdmVzIGFzIGlmIOKAmBtbMW0tTBtbMG3igJkgd2VyZSBzcGVjaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgIGNhbm5vdCBiZSByZWFkLgBRdWl0AFJlYWQgYSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KICAgIAogICAgUmVhZHMgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb3IgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQKICAgIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgbGluZSBpcyBzcGxpdCBpbnRvIGZpZWxkcyBhcyB3aXRoIHdvcmQKICAgIHNwbGl0dGluZywgYW5kIHRoZSBmaXJzdCB3b3JkIGlzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBOQU1FLCB0aGUgc2Vjb25kCiAgICB3b3JkIHRvIHRoZSBzZWNvbmQgTkFNRSwgYW5kIHNvIG9uLCB3aXRoIGFueSBsZWZ0b3ZlciB3b3JkcyBhc3NpZ25lZCB0bwogICAgdGhlIGxhc3QgTkFNRS4gIE9ubHkgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gJElGUyBhcmUgcmVjb2duaXplZCBhcyB3b3JkCiAgICBkZWxpbWl0ZXJzLgogICAgCiAgICBJZiBubyBOQU1FcyBhcmUgc3VwcGxpZWQsIHRoZSBsaW5lIHJlYWQgaXMgc3RvcmVkIGluIHRoZSBSRVBMWSB2YXJpYWJsZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgYXJyYXkJYXNzaWduIHRoZSB3b3JkcyByZWFkIHRvIHNlcXVlbnRpYWwgaW5kaWNlcyBvZiB0aGUgYXJyYXkKICAgIAkJdmFyaWFibGUgQVJSQVksIHN0YXJ0aW5nIGF0IHplcm8KICAgICAgLWQgZGVsaW0JY29udGludWUgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBERUxJTSBpcyByZWFkLCByYXRoZXIKICAgIAkJdGhhbiBuZXdsaW5lCiAgICAgIC1lCXVzZSBSZWFkbGluZSB0byBvYnRhaW4gdGhlIGxpbmUgaW4gYW4gaW50ZXJhY3RpdmUgc2hlbGwKICAgICAgLWkgdGV4dAl1c2UgVEVYVCBhcyB0aGUgaW5pdGlhbCB0ZXh0IGZvciBSZWFkbGluZQogICAgICAtbiBuY2hhcnMJcmV0dXJuIGFmdGVyIHJlYWRpbmcgTkNIQVJTIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gd2FpdGluZwogICAgCQlmb3IgYSBuZXdsaW5lLCBidXQgaG9ub3IgYSBkZWxpbWl0ZXIgaWYgZmV3ZXIgdGhhbgogICAgCQlOQ0hBUlMgY2hhcmFjdGVycyBhcmUgcmVhZCBiZWZvcmUgdGhlIGRlbGltaXRlcgogICAgICAtTiBuY2hhcnMJcmV0dXJuIG9ubHkgYWZ0ZXIgcmVhZGluZyBleGFjdGx5IE5DSEFSUyBjaGFyYWN0ZXJzLCB1bmxlc3MKICAgIAkJRU9GIGlzIGVuY291bnRlcmVkIG9yIHJlYWQgdGltZXMgb3V0LCBpZ25vcmluZyBhbnkKICAgIAkJZGVsaW1pdGVyCiAgICAgIC1wIHByb21wdAlvdXRwdXQgdGhlIHN0cmluZyBQUk9NUFQgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUgYmVmb3JlCiAgICAJCWF0dGVtcHRpbmcgdG8gcmVhZAogICAgICAtcglkbyBub3QgYWxsb3cgYmFja3NsYXNoZXMgdG8gZXNjYXBlIGFueSBjaGFyYWN0ZXJzCiAgICAgIC1zCWRvIG5vdCBlY2hvIGlucHV0IGNvbWluZyBmcm9tIGEgdGVybWluYWwKICAgICAgLXQgdGltZW91dAl0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgaWYgYSBjb21wbGV0ZSBsaW5lIG9mCiAgICAJCWlucHV0IGlzIG5vdCByZWFkIHdpdGhpbiBUSU1FT1VUIHNlY29uZHMuICBUaGUgdmFsdWUgb2YgdGhlCiAgICAJCVRNT1VUIHZhcmlhYmxlIGlzIHRoZSBkZWZhdWx0IHRpbWVvdXQuICBUSU1FT1VUIG1heSBiZSBhCiAgICAJCWZyYWN0aW9uYWwgbnVtYmVyLiAgSWYgVElNRU9VVCBpcyAwLCByZWFkIHJldHVybnMKICAgIAkJaW1tZWRpYXRlbHksIHdpdGhvdXQgdHJ5aW5nIHRvIHJlYWQgYW55IGRhdGEsIHJldHVybmluZwogICAgCQlzdWNjZXNzIG9ubHkgaWYgaW5wdXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBzcGVjaWZpZWQKICAgIAkJZmlsZSBkZXNjcmlwdG9yLiAgVGhlIGV4aXQgc3RhdHVzIGlzIGdyZWF0ZXIgdGhhbiAxMjgKICAgIAkJaWYgdGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQKICAgICAgLXUgZmQJcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB1bmxlc3MgZW5kLW9mLWZpbGUgaXMgZW5jb3VudGVyZWQsIHJlYWQgdGltZXMgb3V0CiAgICAoaW4gd2hpY2ggY2FzZSBpdCdzIGdyZWF0ZXIgdGhhbiAxMjgpLCBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgZXJyb3Igb2NjdXJzLAogICAgb3IgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50IHRvIC11LgBSZWFkIGxpbmVzIGZyb20gYSBmaWxlIGludG8gYW4gYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIEEgc3lub255bSBmb3Ig4oCYG1sxbW1hcGZpbGUbWzBt4oCZLgBSZWFkIGxpbmVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGludG8gYW4gaW5kZXhlZCBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIHRoZSBpbmRleGVkIGFycmF5IHZhcmlhYmxlIEFSUkFZLCBvcgogICAgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSB2YXJpYWJsZSBNQVBGSUxFCiAgICBpcyB0aGUgZGVmYXVsdCBBUlJBWS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQgZGVsaW0JVXNlIERFTElNIHRvIHRlcm1pbmF0ZSBsaW5lcywgaW5zdGVhZCBvZiBuZXdsaW5lCiAgICAgIC1uIGNvdW50CUNvcHkgYXQgbW9zdCBDT1VOVCBsaW5lcy4gIElmIENPVU5UIGlzIDAsIGFsbCBsaW5lcyBhcmUgY29waWVkCiAgICAgIC1PIG9yaWdpbglCZWdpbiBhc3NpZ25pbmcgdG8gQVJSQVkgYXQgaW5kZXggT1JJR0lOLiAgVGhlIGRlZmF1bHQgaW5kZXggaXMgMAogICAgICAtcyBjb3VudAlEaXNjYXJkIHRoZSBmaXJzdCBDT1VOVCBsaW5lcyByZWFkCiAgICAgIC10CVJlbW92ZSBhIHRyYWlsaW5nIERFTElNIGZyb20gZWFjaCBsaW5lIHJlYWQgKGRlZmF1bHQgbmV3bGluZSkKICAgICAgLXUgZmQJUmVhZCBsaW5lcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgICAtQyBjYWxsYmFjawlFdmFsdWF0ZSBDQUxMQkFDSyBlYWNoIHRpbWUgUVVBTlRVTSBsaW5lcyBhcmUgcmVhZAogICAgICAtYyBxdWFudHVtCVNwZWNpZnkgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkIGJldHdlZW4gZWFjaCBjYWxsIHRvCiAgICAJCQlDQUxMQkFDSwogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIEFSUkFZCUFycmF5IHZhcmlhYmxlIG5hbWUgdG8gdXNlIGZvciBmaWxlIGRhdGEKICAgIAogICAgSWYgLUMgaXMgc3VwcGxpZWQgd2l0aG91dCAtYywgdGhlIGRlZmF1bHQgcXVhbnR1bSBpcyA1MDAwLiAgV2hlbgogICAgQ0FMTEJBQ0sgaXMgZXZhbHVhdGVkLCBpdCBpcyBzdXBwbGllZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJyYXkKICAgIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgYW5kIHRoZSBsaW5lIHRvIGJlIGFzc2lnbmVkIHRvIHRoYXQgZWxlbWVudAogICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICAKICAgIElmIG5vdCBzdXBwbGllZCB3aXRoIGFuIGV4cGxpY2l0IG9yaWdpbiwgbWFwZmlsZSB3aWxsIGNsZWFyIEFSUkFZIGJlZm9yZQogICAgYXNzaWduaW5nIHRvIGl0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgQVJSQVkgaXMgcmVhZG9ubHkgb3IKICAgIG5vdCBhbiBpbmRleGVkIGFycmF5LgBSZWNvcmQgbG9jawBSZW1lbWJlciBvciBkaXNwbGF5IHByb2dyYW0gbG9jYXRpb25zLgogICAgCiAgICBEZXRlcm1pbmUgYW5kIHJlbWVtYmVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGVhY2ggY29tbWFuZCBOQU1FLiAgSWYKICAgIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGluZm9ybWF0aW9uIGFib3V0IHJlbWVtYmVyZWQgY29tbWFuZHMgaXMgZGlzcGxheWVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZAlmb3JnZXQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FCiAgICAgIC1sCWRpc3BsYXkgaW4gYSBmb3JtYXQgdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1wIHBhdGhuYW1lCXVzZSBQQVRITkFNRSBhcyB0aGUgZnVsbCBwYXRobmFtZSBvZiBOQU1FCiAgICAgIC1yCWZvcmdldCBhbGwgcmVtZW1iZXJlZCBsb2NhdGlvbnMKICAgICAgLXQJcHJpbnQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FLCBwcmVjZWRpbmcKICAgIAkJZWFjaCBsb2NhdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIE5BTUUgaWYgbXVsdGlwbGUKICAgIAkJTkFNRXMgYXJlIGdpdmVuCiAgICBBcmd1bWVudHM6CiAgICAgIE5BTUUJRWFjaCBOQU1FIGlzIHNlYXJjaGVkIGZvciBpbiAkUEFUSCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QKICAgIAkJb2YgcmVtZW1iZXJlZCBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSBzdGFjay4KICAgIAogICAgUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSDigJgbWzFtZGlycxtbMG3igJksIHN0YXJ0aW5nIHdpdGggemVyby4gIEZvciBleGFtcGxlOiDigJgbWzFtcG9wZCArMBtbMG3igJkKICAgIAkJcmVtb3ZlcyB0aGUgZmlyc3QgZGlyZWN0b3J5LCDigJgbWzFtcG9wZCArMRtbMG3igJkgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAkJc2hvd24gYnkg4oCYG1sxbWRpcnMbWzBt4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYG1sxbXBvcGQgLTAbWzBt4oCZCiAgICAJCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCDigJgbWzFtcG9wZCAtMRtbMG3igJkgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIOKAmBtbMW1kaXJzG1swbeKAmSBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AUmVtb3ZlIGVhY2ggTkFNRSBmcm9tIHRoZSBsaXN0IG9mIGRlZmluZWQgYWxpYXNlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcmVtb3ZlIGFsbCBhbGlhcyBkZWZpbml0aW9ucwogICAgCiAgICBSZXR1cm4gc3VjY2VzcyB1bmxlc3MgYSBOQU1FIGlzIG5vdCBhbiBleGlzdGluZyBhbGlhcy4AUmVtb3ZlIGpvYnMgZnJvbSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZW1vdmVzIGVhY2ggSk9CU1BFQyBhcmd1bWVudCBmcm9tIHRoZSB0YWJsZSBvZiBhY3RpdmUgam9icy4gIFdpdGhvdXQKICAgIGFueSBKT0JTUEVDcywgdGhlIHNoZWxsIHVzZXMgaXRzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBqb2IuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlbW92ZSBhbGwgam9icyBpZiBKT0JTUEVDIGlzIG5vdCBzdXBwbGllZAogICAgICAtaAltYXJrIGVhY2ggSk9CU1BFQyBzbyB0aGF0IFNJR0hVUCBpcyBub3Qgc2VudCB0byB0aGUgam9iIGlmIHRoZQogICAgCQlzaGVsbCByZWNlaXZlcyBhIFNJR0hVUAogICAgICAtcglyZW1vdmUgb25seSBydW5uaW5nIGpvYnMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIG9yIEpPQlNQRUMgaXMgZ2l2ZW4uAFJlbW92ZXMgZW50cmllcyBmcm9tIHRoZSBkaXJlY3Rvcnkgc3RhY2suICBXaXRoIG5vIGFyZ3VtZW50cywgcmVtb3ZlcwogICAgdGhlIHRvcCBkaXJlY3RvcnkgZnJvbSB0aGUgc3RhY2ssIGFuZCBjaGFuZ2VzIHRvIHRoZSBuZXcgdG9wIGRpcmVjdG9yeS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JU3VwcHJlc3NlcyB0aGUgbm9ybWFsIGNoYW5nZSBvZiBkaXJlY3Rvcnkgd2hlbiByZW1vdmluZwogICAgCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IOKAmBtbMW1kaXJzG1swbeKAmSwgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IOKAmBtbMW1wb3BkICswG1swbeKAmQogICAgCXJlbW92ZXMgdGhlIGZpcnN0IGRpcmVjdG9yeSwg4oCYG1sxbXBvcGQgKzEbWzBt4oCZIHRoZSBzZWNvbmQuCiAgICAKICAgICAgLU4JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkg4oCYG1sxbWRpcnMbWzBt4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYG1sxbXBvcGQgLTAbWzBt4oCZCiAgICAJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIOKAmBtbMW1wb3BkIC0xG1swbeKAmSB0aGUgbmV4dCB0byBsYXN0LgogICAgCiAgICBUaGUg4oCYG1sxbWRpcnMbWzBt4oCZIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AUmVwbGFjZSB0aGUgc2hlbGwgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5ELCByZXBsYWNpbmcgdGhpcyBzaGVsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KICAgIEFSR1VNRU5UUyBiZWNvbWUgdGhlIGFyZ3VtZW50cyB0byBDT01NQU5ELiAgSWYgQ09NTUFORCBpcyBub3Qgc3BlY2lmaWVkLAogICAgYW55IHJlZGlyZWN0aW9ucyB0YWtlIGVmZmVjdCBpbiB0aGUgY3VycmVudCBzaGVsbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgbmFtZQlwYXNzIE5BTUUgYXMgdGhlIHplcm90aCBhcmd1bWVudCB0byBDT01NQU5ECiAgICAgIC1jCWV4ZWN1dGUgQ09NTUFORCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50CiAgICAgIC1sCXBsYWNlIGEgZGFzaCBpbiB0aGUgemVyb3RoIGFyZ3VtZW50IHRvIENPTU1BTkQKICAgIAogICAgSWYgdGhlIGNvbW1hbmQgY2Fubm90IGJlIGV4ZWN1dGVkLCBhIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbCBleGl0cywgdW5sZXNzCiAgICB0aGUgc2hlbGwgb3B0aW9uIOKAmBtbMW1leGVjZmFpbBtbMG3igJkgaXMgc2V0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgQ09NTUFORCBpcyBub3QgZm91bmQgb3IgYSByZWRpcmVjdGlvbiBlcnJvciBvY2N1cnMuAFJlcG9ydCB0aW1lIGNvbnN1bWVkIGJ5IHBpcGVsaW5lJ3MgZXhlY3V0aW9uLgogICAgCiAgICBFeGVjdXRlIFBJUEVMSU5FIGFuZCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIHJlYWwgdGltZSwgdXNlciBDUFUgdGltZSwKICAgIGFuZCBzeXN0ZW0gQ1BVIHRpbWUgc3BlbnQgZXhlY3V0aW5nIFBJUEVMSU5FIHdoZW4gaXQgdGVybWluYXRlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgdGhlIHRpbWluZyBzdW1tYXJ5IGluIHRoZSBwb3J0YWJsZSBQb3NpeCBmb3JtYXQKICAgIAogICAgVGhlIHZhbHVlIG9mIHRoZSBUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG91dHB1dCBmb3JtYXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBzdGF0dXMgaXMgdGhlIHJldHVybiBzdGF0dXMgb2YgUElQRUxJTkUuAFJlc3VtZSBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgUmVzdW1lcyB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIGVuY2xvc2luZyBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuCiAgICBJZiBOIGlzIHNwZWNpZmllZCwgcmVzdW1lcyB0aGUgTnRoIGVuY2xvc2luZyBsb29wLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4AUmVzdW1lIGpvYiBpbiBmb3JlZ3JvdW5kLgogICAgCiAgICBFcXVpdmFsZW50IHRvIHRoZSBKT0JfU1BFQyBhcmd1bWVudCB0byB0aGUg4oCYG1sxbWZnG1swbeKAmSBjb21tYW5kLiAgUmVzdW1lIGEKICAgIHN0b3BwZWQgb3IgYmFja2dyb3VuZCBqb2IuICBKT0JfU1BFQyBjYW4gc3BlY2lmeSBlaXRoZXIgYSBqb2IgbmFtZQogICAgb3IgYSBqb2IgbnVtYmVyLiAgRm9sbG93aW5nIEpPQl9TUEVDIHdpdGggYSDigJgbWzFtJhtbMG3igJkgcGxhY2VzIHRoZSBqb2IgaW4KICAgIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGUgam9iIHNwZWNpZmljYXRpb24gaGFkIGJlZW4gc3VwcGxpZWQgYXMgYW4KICAgIGFyZ3VtZW50IHRvIOKAmBtbMW1iZxtbMG3igJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bWVkIGpvYi4AUmV0dXJuIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBSZXR1cm4gYW4gdW5zdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgZmFpbHMuAFJldHVybiBmcm9tIGEgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENhdXNlcyBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0IHRvIGV4aXQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgICBzcGVjaWZpZWQgYnkgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIHJldHVybiBzdGF0dXMgaXMgdGhhdCBvZiB0aGUKICAgIGxhc3QgY29tbWFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIG9yIHNjcmlwdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIE4sIG9yIGZhaWx1cmUgaWYgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbiBvciBzY3JpcHQuAFJldHVybiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyDigJwbWzFtJGxpbmUgJGZpbGVuYW1lG1swbeKAnS4gIFdpdGggRVhQUiwgcmV0dXJucwogICAg4oCcG1sxbSRsaW5lICRzdWJyb3V0aW5lICRmaWxlbmFtZRtbMG3igJ07IHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8KICAgIHByb3ZpZGUgYSBzdGFjayB0cmFjZS4KICAgIAogICAgVGhlIHZhbHVlIG9mIEVYUFIgaW5kaWNhdGVzIGhvdyBtYW55IGNhbGwgZnJhbWVzIHRvIGdvIGJhY2sgYmVmb3JlIHRoZQogICAgY3VycmVudCBvbmU7IHRoZSB0b3AgZnJhbWUgaXMgZnJhbWUgMC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDAgdW5sZXNzIHRoZSBzaGVsbCBpcyBub3QgZXhlY3V0aW5nIGEgc2hlbGwgZnVuY3Rpb24gb3IgRVhQUgogICAgaXMgaW52YWxpZC4AUmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyAAUnVubmluZwBTZWdtZW50YXRpb24gZmF1bHQAU2VsZWN0IHdvcmRzIGZyb20gYSBsaXN0IGFuZCBleGVjdXRlIGNvbW1hbmRzLgogICAgCiAgICBUaGUgV09SRFMgYXJlIGV4cGFuZGVkLCBnZW5lcmF0aW5nIGEgbGlzdCBvZiB3b3Jkcy4gIFRoZQogICAgc2V0IG9mIGV4cGFuZGVkIHdvcmRzIGlzIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yLCBlYWNoCiAgICBwcmVjZWRlZCBieSBhIG51bWJlci4gIElmIOKAmBtbMW1pbiBXT1JEUxtbMG3igJkgaXMgbm90IHByZXNlbnQsIOKAmBtbMW1pbiDigJwbWzFtJEAbWzBt4oCdG1swbeKAmQogICAgaXMgYXNzdW1lZC4gIFRoZSBQUzMgcHJvbXB0IGlzIHRoZW4gZGlzcGxheWVkIGFuZCBhIGxpbmUgcmVhZAogICAgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBJZiB0aGUgbGluZSBjb25zaXN0cyBvZiB0aGUgbnVtYmVyCiAgICBjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgZGlzcGxheWVkIHdvcmRzLCB0aGVuIE5BTUUgaXMgc2V0CiAgICB0byB0aGF0IHdvcmQuICBJZiB0aGUgbGluZSBpcyBlbXB0eSwgV09SRFMgYW5kIHRoZSBwcm9tcHQgYXJlCiAgICByZWRpc3BsYXllZC4gIElmIEVPRiBpcyByZWFkLCB0aGUgY29tbWFuZCBjb21wbGV0ZXMuICBBbnkgb3RoZXIKICAgIHZhbHVlIHJlYWQgY2F1c2VzIE5BTUUgdG8gYmUgc2V0IHRvIG51bGwuICBUaGUgbGluZSByZWFkIGlzIHNhdmVkCiAgICBpbiB0aGUgdmFyaWFibGUgUkVQTFkuICBDT01NQU5EUyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCBzZWxlY3Rpb24KICAgIHVudGlsIGEgYnJlYWsgY29tbWFuZCBpcyBleGVjdXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4AU2VuZCBhIHNpZ25hbCB0byBhIGpvYi4KICAgIAogICAgU2VuZCB0aGUgcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgUElEIG9yIEpPQlNQRUMgdGhlIHNpZ25hbCBuYW1lZCBieQogICAgU0lHU1BFQyBvciBTSUdOVU0uICBJZiBuZWl0aGVyIFNJR1NQRUMgbm9yIFNJR05VTSBpcyBwcmVzZW50LCB0aGVuCiAgICBTSUdURVJNIGlzIGFzc3VtZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1zIHNpZwlTSUcgaXMgYSBzaWduYWwgbmFtZQogICAgICAtbiBzaWcJU0lHIGlzIGEgc2lnbmFsIG51bWJlcgogICAgICAtbAlsaXN0IHRoZSBzaWduYWwgbmFtZXM7IGlmIGFyZ3VtZW50cyBmb2xsb3cg4oCYG1sxbS1sG1swbeKAmSB0aGV5IGFyZQogICAgCQlhc3N1bWVkIHRvIGJlIHNpZ25hbCBudW1iZXJzIGZvciB3aGljaCBuYW1lcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIC1MCXN5bm9ueW0gZm9yIC1sCiAgICAKICAgIEtpbGwgaXMgYSBzaGVsbCBidWlsdGluIGZvciB0d28gcmVhc29uczogaXQgYWxsb3dzIGpvYiBJRHMgdG8gYmUgdXNlZAogICAgaW5zdGVhZCBvZiBwcm9jZXNzIElEcywgYW5kIGFsbG93cyBwcm9jZXNzZXMgdG8gYmUga2lsbGVkIGlmIHRoZSBsaW1pdAogICAgb24gcHJvY2Vzc2VzIHRoYXQgeW91IGNhbiBjcmVhdGUgaXMgcmVhY2hlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4AU2V0IFJlYWRsaW5lIGtleSBiaW5kaW5ncyBhbmQgdmFyaWFibGVzLgogICAgCiAgICBCaW5kIGEga2V5IHNlcXVlbmNlIHRvIGEgUmVhZGxpbmUgZnVuY3Rpb24gb3IgYSBtYWNybywgb3Igc2V0IGEKICAgIFJlYWRsaW5lIHZhcmlhYmxlLiAgVGhlIG5vbi1vcHRpb24gYXJndW1lbnQgc3ludGF4IGlzIGVxdWl2YWxlbnQgdG8KICAgIHRoYXQgZm91bmQgaW4gfi8uaW5wdXRyYywgYnV0IG11c3QgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50OgogICAgZS5nLiwgYmluZCAn4oCcG1sxbVxDLXhcQy1yG1swbeKAnTogcmUtcmVhZC1pbml0LWZpbGUnLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbSAga2V5bWFwICAgICAgICAgVXNlIEtFWU1BUCBhcyB0aGUga2V5bWFwIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4gIEFjY2VwdGFibGUga2V5bWFwIG5hbWVzIGFyZSBlbWFjcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWNzLXN0YW5kYXJkLCBlbWFjcy1tZXRhLCBlbWFjcy1jdGx4LCB2aSwgdmktbW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpLWNvbW1hbmQsIGFuZCB2aS1pbnNlcnQuCiAgICAgIC1sICAgICAgICAgICAgICAgICBMaXN0IG5hbWVzIG9mIGZ1bmN0aW9ucy4KICAgICAgLVAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb24gbmFtZXMgYW5kIGJpbmRpbmdzLgogICAgICAtcCAgICAgICAgICAgICAgICAgTGlzdCBmdW5jdGlvbnMgYW5kIGJpbmRpbmdzIGluIGEgZm9ybSB0aGF0IGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkIGFzIGlucHV0LgogICAgICAtUyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgIC1zICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgdGhhdCBpbnZva2UgbWFjcm9zIGFuZCB0aGVpciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1WICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMKICAgICAgLXYgICAgICAgICAgICAgICAgIExpc3QgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBpbiBhIGZvcm0gdGhhdCBjYW4KICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLXEgIGZ1bmN0aW9uLW5hbWUgIFF1ZXJ5IGFib3V0IHdoaWNoIGtleXMgaW52b2tlIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXUgIGZ1bmN0aW9uLW5hbWUgIFVuYmluZCBhbGwga2V5cyB3aGljaCBhcmUgYm91bmQgdG8gdGhlIG5hbWVkIGZ1bmN0aW9uLgogICAgICAtciAga2V5c2VxICAgICAgICAgUmVtb3ZlIHRoZSBiaW5kaW5nIGZvciBLRVlTRVEuCiAgICAgIC1mICBmaWxlbmFtZSAgICAgICBSZWFkIGtleSBiaW5kaW5ncyBmcm9tIEZJTEVOQU1FLgogICAgICAteCAga2V5c2VxOnNoZWxsLWNvbW1hbmQJQ2F1c2UgU0hFTEwtQ09NTUFORCB0byBiZSBleGVjdXRlZCB3aGVuCiAgICAJCQkJS0VZU0VRIGlzIGVudGVyZWQuCiAgICAgIC1YICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgYm91bmQgd2l0aCAteCBhbmQgYXNzb2NpYXRlZCBjb21tYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBiaW5kIHJldHVybnMgMCB1bmxlc3MgYW4gdW5yZWNvZ25pemVkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuAFNldCBhbmQgdW5zZXQgc2hlbGwgb3B0aW9ucy4KICAgIAogICAgQ2hhbmdlIHRoZSBzZXR0aW5nIG9mIGVhY2ggc2hlbGwgb3B0aW9uIE9QVE5BTUUuICBXaXRob3V0IGFueSBvcHRpb24KICAgIGFyZ3VtZW50cywgbGlzdCBhbGwgc2hlbGwgb3B0aW9ucyB3aXRoIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgZWFjaAogICAgaXMgc2V0LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbwlyZXN0cmljdCBPUFROQU1FcyB0byB0aG9zZSBkZWZpbmVkIGZvciB1c2Ugd2l0aCDigJgbWzFtc2V0IC1vG1swbeKAmQogICAgICAtcAlwcmludCBlYWNoIHNoZWxsIG9wdGlvbiB3aXRoIGFuIGluZGljYXRpb24gb2YgaXRzIHN0YXR1cwogICAgICAtcQlzdXBwcmVzcyBvdXRwdXQKICAgICAgLXMJZW5hYmxlIChzZXQpIGVhY2ggT1BUTkFNRQogICAgICAtdQlkaXNhYmxlICh1bnNldCkgZWFjaCBPUFROQU1FCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIE9QVE5BTUUgaXMgZW5hYmxlZDsgZmFpbHMgaWYgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIGdpdmVuIG9yIE9QVE5BTUUgaXMgZGlzYWJsZWQuAFNldCBleHBvcnQgYXR0cmlidXRlIGZvciBzaGVsbCB2YXJpYWJsZXMuCiAgICAKICAgIE1hcmtzIGVhY2ggTkFNRSBmb3IgYXV0b21hdGljIGV4cG9ydCB0byB0aGUgZW52aXJvbm1lbnQgb2Ygc3Vic2VxdWVudGx5CiAgICBleGVjdXRlZCBjb21tYW5kcy4gIElmIFZBTFVFIGlzIHN1cHBsaWVkLCBhc3NpZ24gVkFMVUUgYmVmb3JlIGV4cG9ydGluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJcmVmZXIgdG8gc2hlbGwgZnVuY3Rpb25zCiAgICAgIC1uCXJlbW92ZSB0aGUgZXhwb3J0IHByb3BlcnR5IGZyb20gZWFjaCBOQU1FCiAgICAgIC1wCWRpc3BsYXkgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwogICAgCiAgICBBbiBhcmd1bWVudCBvZiDigJgbWzFtLS0bWzBt4oCZIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAFNldCBvciB1bnNldCB2YWx1ZXMgb2Ygc2hlbGwgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBDaGFuZ2UgdGhlIHZhbHVlIG9mIHNoZWxsIGF0dHJpYnV0ZXMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgb3IKICAgIGRpc3BsYXkgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2hlbGwgdmFyaWFibGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSAgTWFyayB2YXJpYWJsZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGNyZWF0ZWQgZm9yIGV4cG9ydC4KICAgICAgLWIgIE5vdGlmeSBvZiBqb2IgdGVybWluYXRpb24gaW1tZWRpYXRlbHkuCiAgICAgIC1lICBFeGl0IGltbWVkaWF0ZWx5IGlmIGEgY29tbWFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogICAgICAtZiAgRGlzYWJsZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiAoZ2xvYmJpbmcpLgogICAgICAtaCAgUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIGNvbW1hbmRzIGFzIHRoZXkgYXJlIGxvb2tlZCB1cC4KICAgICAgLWsgIEFsbCBhc3NpZ25tZW50IGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYQogICAgICAgICAgY29tbWFuZCwgbm90IGp1c3QgdGhvc2UgdGhhdCBwcmVjZWRlIHRoZSBjb21tYW5kIG5hbWUuCiAgICAgIC1tICBKb2IgY29udHJvbCBpcyBlbmFibGVkLgogICAgICAtbiAgUmVhZCBjb21tYW5kcyBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KICAgICAgLW8gb3B0aW9uLW5hbWUKICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBvcHRpb24tbmFtZToKICAgICAgICAgICAgICBhbGxleHBvcnQgICAgc2FtZSBhcyAtYQogICAgICAgICAgICAgIGJyYWNlZXhwYW5kICBzYW1lIGFzIC1CCiAgICAgICAgICAgICAgZW1hY3MgICAgICAgIHVzZSBhbiBlbWFjcy1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgZXJyZXhpdCAgICAgIHNhbWUgYXMgLWUKICAgICAgICAgICAgICBlcnJ0cmFjZSAgICAgc2FtZSBhcyAtRQogICAgICAgICAgICAgIGZ1bmN0cmFjZSAgICBzYW1lIGFzIC1UCiAgICAgICAgICAgICAgaGFzaGFsbCAgICAgIHNhbWUgYXMgLWgKICAgICAgICAgICAgICBoaXN0ZXhwYW5kICAgc2FtZSBhcyAtSAogICAgICAgICAgICAgIGhpc3RvcnkgICAgICBlbmFibGUgY29tbWFuZCBoaXN0b3J5CiAgICAgICAgICAgICAgaWdub3JlZW9mICAgIHRoZSBzaGVsbCB3aWxsIG5vdCBleGl0IHVwb24gcmVhZGluZyBFT0YKICAgICAgICAgICAgICBpbnRlcmFjdGl2ZS1jb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBjb21tZW50cyB0byBhcHBlYXIgaW4gaW50ZXJhY3RpdmUgY29tbWFuZHMKICAgICAgICAgICAgICBrZXl3b3JkICAgICAgc2FtZSBhcyAtawogICAgICAgICAgICAgIG1vbml0b3IgICAgICBzYW1lIGFzIC1tCiAgICAgICAgICAgICAgbm9jbG9iYmVyICAgIHNhbWUgYXMgLUMKICAgICAgICAgICAgICBub2V4ZWMgICAgICAgc2FtZSBhcyAtbgogICAgICAgICAgICAgIG5vZ2xvYiAgICAgICBzYW1lIGFzIC1mCiAgICAgICAgICAgICAgbm9sb2cgICAgICAgIGN1cnJlbnRseSBhY2NlcHRlZCBidXQgaWdub3JlZAogICAgICAgICAgICAgIG5vdGlmeSAgICAgICBzYW1lIGFzIC1iCiAgICAgICAgICAgICAgbm91bnNldCAgICAgIHNhbWUgYXMgLXUKICAgICAgICAgICAgICBvbmVjbWQgICAgICAgc2FtZSBhcyAtdAogICAgICAgICAgICAgIHBoeXNpY2FsICAgICBzYW1lIGFzIC1QCiAgICAgICAgICAgICAgcGlwZWZhaWwgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBwaXBlbGluZSBpcyB0aGUgc3RhdHVzIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGNvbW1hbmQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6ZXJvIGlmIG5vIGNvbW1hbmQgZXhpdGVkIHdpdGggYSBub24temVybyBzdGF0dXMKICAgICAgICAgICAgICBwb3NpeCAgICAgICAgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBiYXNoIHdoZXJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gdGhlIFBvc2l4IHN0YW5kYXJkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgIHByaXZpbGVnZWQgICBzYW1lIGFzIC1wCiAgICAgICAgICAgICAgdmVyYm9zZSAgICAgIHNhbWUgYXMgLXYKICAgICAgICAgICAgICB2aSAgICAgICAgICAgdXNlIGEgdmktc3R5bGUgbGluZSBlZGl0aW5nIGludGVyZmFjZQogICAgICAgICAgICAgIHh0cmFjZSAgICAgICBzYW1lIGFzIC14CiAgICAgIC1wICBUdXJuZWQgb24gd2hlbmV2ZXIgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcyBkbyBub3QgbWF0Y2guCiAgICAgICAgICBEaXNhYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSAkRU5WIGZpbGUgYW5kIGltcG9ydGluZyBvZiBzaGVsbAogICAgICAgICAgZnVuY3Rpb25zLiAgVHVybmluZyB0aGlzIG9wdGlvbiBvZmYgY2F1c2VzIHRoZSBlZmZlY3RpdmUgdWlkIGFuZAogICAgICAgICAgZ2lkIHRvIGJlIHNldCB0byB0aGUgcmVhbCB1aWQgYW5kIGdpZC4KICAgICAgLXQgIEV4aXQgYWZ0ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nIG9uZSBjb21tYW5kLgogICAgICAtdSAgVHJlYXQgdW5zZXQgdmFyaWFibGVzIGFzIGFuIGVycm9yIHdoZW4gc3Vic3RpdHV0aW5nLgogICAgICAtdiAgUHJpbnQgc2hlbGwgaW5wdXQgbGluZXMgYXMgdGhleSBhcmUgcmVhZC4KICAgICAgLXggIFByaW50IGNvbW1hbmRzIGFuZCB0aGVpciBhcmd1bWVudHMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAgICAgIC1CICB0aGUgc2hlbGwgd2lsbCBwZXJmb3JtIGJyYWNlIGV4cGFuc2lvbgogICAgICAtQyAgSWYgc2V0LCBkaXNhbGxvdyBleGlzdGluZyByZWd1bGFyIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICBieSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuCiAgICAgIC1FICBJZiBzZXQsIHRoZSBFUlIgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtSCAgRW5hYmxlICEgc3R5bGUgaGlzdG9yeSBzdWJzdGl0dXRpb24uICBUaGlzIGZsYWcgaXMgb24KICAgICAgICAgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgc2hlbGwgaXMgaW50ZXJhY3RpdmUuCiAgICAgIC1QICBJZiBzZXQsIGRvIG5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzCiAgICAgICAgICBzdWNoIGFzIGNkIHdoaWNoIGNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIC1UICBJZiBzZXQsIHRoZSBERUJVRyBhbmQgUkVUVVJOIHRyYXBzIGFyZSBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtLSAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGFyZ3VtZW50cywgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICAgICAgYXJlIHVuc2V0LgogICAgICAtICAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBUaGUgLXggYW5kIC12IG9wdGlvbnMgYXJlIHR1cm5lZCBvZmYuCiAgICAKICAgIFVzaW5nICsgcmF0aGVyIHRoYW4gLSBjYXVzZXMgdGhlc2UgZmxhZ3MgdG8gYmUgdHVybmVkIG9mZi4gIFRoZQogICAgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCB1cG9uIGludm9jYXRpb24gb2YgdGhlIHNoZWxsLiAgVGhlIGN1cnJlbnQKICAgIHNldCBvZiBmbGFncyBtYXkgYmUgZm91bmQgaW4gJC0uICBUaGUgcmVtYWluaW5nIG4gQVJHcyBhcmUgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycyBhbmQgYXJlIGFzc2lnbmVkLCBpbiBvcmRlciwgdG8gJDEsICQyLCAuLiAkbi4gIElmIG5vCiAgICBBUkdzIGFyZSBnaXZlbiwgYWxsIHNoZWxsIHZhcmlhYmxlcyBhcmUgcHJpbnRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBBIHN5bm9ueW0gZm9yIOKAmBtbMW1kZWNsYXJlG1swbeKAmS4gIFNlZSDigJgbWzFtaGVscCBkZWNsYXJlG1swbeKAmS4AU2V0IHZhcmlhYmxlIHZhbHVlcyBhbmQgYXR0cmlidXRlcy4KICAgIAogICAgRGVjbGFyZSB2YXJpYWJsZXMgYW5kIGdpdmUgdGhlbSBhdHRyaWJ1dGVzLiAgSWYgbm8gTkFNRXMgYXJlIGdpdmVuLAogICAgZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXJlc3RyaWN0IGFjdGlvbiBvciBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIGFuZCBkZWZpbml0aW9ucwogICAgICAtRglyZXN0cmljdCBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIG9ubHkgKHBsdXMgbGluZSBudW1iZXIgYW5kCiAgICAJCXNvdXJjZSBmaWxlIHdoZW4gZGVidWdnaW5nKQogICAgICAtZwljcmVhdGUgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIHVzZWQgaW4gYSBzaGVsbCBmdW5jdGlvbjsgb3RoZXJ3aXNlCiAgICAJCWlnbm9yZWQKICAgICAgLXAJZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWUgb2YgZWFjaCBOQU1FCiAgICAKICAgIE9wdGlvbnMgd2hpY2ggc2V0IGF0dHJpYnV0ZXM6CiAgICAgIC1hCXRvIG1ha2UgTkFNRXMgaW5kZXhlZCBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLUEJdG8gbWFrZSBOQU1FcyBhc3NvY2lhdGl2ZSBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLWkJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSDigJgbWzFtaW50ZWdlchtbMG3igJkgYXR0cmlidXRlCiAgICAgIC1sCXRvIGNvbnZlcnQgTkFNRXMgdG8gbG93ZXIgY2FzZSBvbiBhc3NpZ25tZW50CiAgICAgIC1uCW1ha2UgTkFNRSBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgaXRzIHZhbHVlCiAgICAgIC1yCXRvIG1ha2UgTkFNRXMgcmVhZG9ubHkKICAgICAgLXQJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSDigJgbWzFtdHJhY2UbWzBt4oCZIGF0dHJpYnV0ZQogICAgICAtdQl0byBjb252ZXJ0IE5BTUVzIHRvIHVwcGVyIGNhc2Ugb24gYXNzaWdubWVudAogICAgICAteAl0byBtYWtlIE5BTUVzIGV4cG9ydAogICAgCiAgICBVc2luZyDigJgbWzFtKxtbMG3igJkgaW5zdGVhZCBvZiDigJgbWzFtLRtbMG3igJkgdHVybnMgb2ZmIHRoZSBnaXZlbiBhdHRyaWJ1dGUuCiAgICAKICAgIFZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlZ2VyIGF0dHJpYnV0ZSBoYXZlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAoc2VlCiAgICB0aGUg4oCYG1sxbWxldBtbMG3igJkgY29tbWFuZCkgcGVyZm9ybWVkIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUuCiAgICAKICAgIFdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uLCDigJgbWzFtZGVjbGFyZRtbMG3igJkgbWFrZXMgTkFNRXMgbG9jYWwsIGFzIHdpdGggdGhlIOKAmBtbMW1sb2NhbBtbMG3igJkKICAgIGNvbW1hbmQuICBUaGUg4oCYG1sxbS1nG1swbeKAmSBvcHRpb24gc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYSB2YXJpYWJsZQogICAgYXNzaWdubWVudCBlcnJvciBvY2N1cnMuAFNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYABTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgAFNoZWxsIG9wdGlvbnM6CgBTaGlmdCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAKICAgIFJlbmFtZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzICROKzEsJE4rMiAuLi4gdG8gJDEsJDIgLi4uICBJZiBOIGlzCiAgICBub3QgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE4gaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuICQjLgBTaWduYWwgJWQAU3BlY2lmeSBob3cgYXJndW1lbnRzIGFyZSB0byBiZSBjb21wbGV0ZWQgYnkgUmVhZGxpbmUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIHNwZWNpZnkgaG93IGFyZ3VtZW50cyBhcmUgdG8gYmUgY29tcGxldGVkLiAgSWYgbm8gb3B0aW9ucwogICAgYXJlIHN1cHBsaWVkLCBleGlzdGluZyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zIGFyZSBwcmludGVkIGluIGEgd2F5IHRoYXQKICAgIGFsbG93cyB0aGVtIHRvIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgZXhpc3RpbmcgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucyBpbiBhIHJldXNhYmxlIGZvcm1hdAogICAgICAtcglyZW1vdmUgYSBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24gZm9yIGVhY2ggTkFNRSwgb3IsIGlmIG5vCiAgICAJCU5BTUVzIGFyZSBzdXBwbGllZCwgYWxsIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbnMKICAgICAgLUQJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIGFzIHRoZSBkZWZhdWx0IGZvciBjb21tYW5kcwogICAgCQl3aXRob3V0IGFueSBzcGVjaWZpYyBjb21wbGV0aW9uIGRlZmluZWQKICAgICAgLUUJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIHRvIOKAnBtbMW1lbXB0eRtbMG3igJ0gY29tbWFuZHMgLS0KICAgIAkJY29tcGxldGlvbiBhdHRlbXB0ZWQgb24gYSBibGFuayBsaW5lCiAgICAKICAgIFdoZW4gY29tcGxldGlvbiBpcyBhdHRlbXB0ZWQsIHRoZSBhY3Rpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGUKICAgIHVwcGVyY2FzZS1sZXR0ZXIgb3B0aW9ucyBhcmUgbGlzdGVkIGFib3ZlLiAgVGhlIC1EIG9wdGlvbiB0YWtlcwogICAgcHJlY2VkZW5jZSBvdmVyIC1FLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBTdG9wcGVkAFN0b3BwZWQgKHNpZ25hbCkAU3RvcHBlZCAodHR5IGlucHV0KQBTdG9wcGVkICh0dHkgb3V0cHV0KQBTdG9wcGVkKCVzKQBTdXNwZW5kIHNoZWxsIGV4ZWN1dGlvbi4KICAgIAogICAgU3VzcGVuZCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc2hlbGwgdW50aWwgaXQgcmVjZWl2ZXMgYSBTSUdDT05UIHNpZ25hbC4KICAgIFVubGVzcyBmb3JjZWQsIGxvZ2luIHNoZWxscyBjYW5ub3QgYmUgc3VzcGVuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglmb3JjZSB0aGUgc3VzcGVuZCwgZXZlbiBpZiB0aGUgc2hlbGwgaXMgYSBsb2dpbiBzaGVsbAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3Mgam9iIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBUSU1FRk9STUFUOiDigJgbWzFtJWMbWzBt4oCZOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAVGVybWluYXRlZABUaGUgbWFpbCBpbiAlcyBoYXMgYmVlbiByZWFkCgBUaGVyZSBhcmUgcnVubmluZyBqb2JzLgoAVGhlcmUgYXJlIHN0b3BwZWQgam9icy4KAFRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIOKAmBtbMW1oZWxwG1swbeKAmSB0byBzZWUgdGhpcyBsaXN0LgpUeXBlIOKAmBtbMW1oZWxwIG5hbWUbWzBt4oCZIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGZ1bmN0aW9uIOKAmBtbMW1uYW1lG1swbeKAmS4KVXNlIOKAmBtbMW1pbmZvIGJhc2gbWzBt4oCZIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIHNoZWxsIGluIGdlbmVyYWwuClVzZSDigJgbWzFtbWFuIC1rG1swbeKAmSBvciDigJgbWzFtaW5mbxtbMG3igJkgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgBUcmFwIHNpZ25hbHMgYW5kIG90aGVyIGV2ZW50cy4KICAgIAogICAgRGVmaW5lcyBhbmQgYWN0aXZhdGVzIGhhbmRsZXJzIHRvIGJlIHJ1biB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyBzaWduYWxzCiAgICBvciBvdGhlciBjb25kaXRpb25zLgogICAgCiAgICBBUkcgaXMgYSBjb21tYW5kIHRvIGJlIHJlYWQgYW5kIGV4ZWN1dGVkIHdoZW4gdGhlIHNoZWxsIHJlY2VpdmVzIHRoZQogICAgc2lnbmFsKHMpIFNJR05BTF9TUEVDLiAgSWYgQVJHIGlzIGFic2VudCAoYW5kIGEgc2luZ2xlIFNJR05BTF9TUEVDCiAgICBpcyBzdXBwbGllZCkgb3Ig4oCYG1sxbS0bWzBt4oCZLCBlYWNoIHNwZWNpZmllZCBzaWduYWwgaXMgcmVzZXQgdG8gaXRzIG9yaWdpbmFsCiAgICB2YWx1ZS4gIElmIEFSRyBpcyB0aGUgbnVsbCBzdHJpbmcgZWFjaCBTSUdOQUxfU1BFQyBpcyBpZ25vcmVkIGJ5IHRoZQogICAgc2hlbGwgYW5kIGJ5IHRoZSBjb21tYW5kcyBpdCBpbnZva2VzLgogICAgCiAgICBJZiBhIFNJR05BTF9TUEVDIGlzIEVYSVQgKDApIEFSRyBpcyBleGVjdXRlZCBvbiBleGl0IGZyb20gdGhlIHNoZWxsLiAgSWYKICAgIGEgU0lHTkFMX1NQRUMgaXMgREVCVUcsIEFSRyBpcyBleGVjdXRlZCBiZWZvcmUgZXZlcnkgc2ltcGxlIGNvbW1hbmQuICBJZgogICAgYSBTSUdOQUxfU1BFQyBpcyBSRVRVUk4sIEFSRyBpcyBleGVjdXRlZCBlYWNoIHRpbWUgYSBzaGVsbCBmdW5jdGlvbiBvciBhCiAgICBzY3JpcHQgcnVuIGJ5IHRoZSAuIG9yIHNvdXJjZSBidWlsdGlucyBmaW5pc2hlcyBleGVjdXRpbmcuICBBIFNJR05BTF9TUEVDCiAgICBvZiBFUlIgbWVhbnMgdG8gZXhlY3V0ZSBBUkcgZWFjaCB0aW1lIGEgY29tbWFuZCdzIGZhaWx1cmUgd291bGQgY2F1c2UgdGhlCiAgICBzaGVsbCB0byBleGl0IHdoZW4gdGhlIC1lIG9wdGlvbiBpcyBlbmFibGVkLgogICAgCiAgICBJZiBubyBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCB0cmFwIHByaW50cyB0aGUgbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkCiAgICB3aXRoIGVhY2ggc2lnbmFsLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbAlwcmludCBhIGxpc3Qgb2Ygc2lnbmFsIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG51bWJlcnMKICAgICAgLXAJZGlzcGxheSB0aGUgdHJhcCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBTSUdOQUxfU1BFQwogICAgCiAgICBFYWNoIFNJR05BTF9TUEVDIGlzIGVpdGhlciBhIHNpZ25hbCBuYW1lIGluIDxzaWduYWwuaD4gb3IgYSBzaWduYWwgbnVtYmVyLgogICAgU2lnbmFsIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGFuZCB0aGUgU0lHIHByZWZpeCBpcyBvcHRpb25hbC4gIEEKICAgIHNpZ25hbCBtYXkgYmUgc2VudCB0byB0aGUgc2hlbGwgd2l0aCDigJwbWzFta2lsbCAtc2lnbmFsICQkG1swbeKAnS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgU0lHU1BFQyBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBUeXBlIOKAmBtbMW0lcyAtYyDigJwbWzFtaGVscCBzZXQbWzBt4oCdG1swbeKAmSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaGVsbCBvcHRpb25zLgoAVHlwZSDigJgbWzFtJXMgLWMgaGVscBtbMG3igJkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgYnVpbHRpbiBjb21tYW5kcy4KAFVua25vd24gU2lnbmFsICMAVW5rbm93biBTaWduYWwgIyVkAFVua25vd24gZXJyb3IAVW5rbm93biBzdGF0dXMAVW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHNoZWxsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgb3IgZnVuY3Rpb24uCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIGZ1bmN0aW9uCiAgICAgIC12CXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIHZhcmlhYmxlCiAgICAgIC1uCXRyZWF0IGVhY2ggTkFNRSBhcyBhIG5hbWUgcmVmZXJlbmNlIGFuZCB1bnNldCB0aGUgdmFyaWFibGUgaXRzZWxmCiAgICAJCXJhdGhlciB0aGFuIHRoZSB2YXJpYWJsZSBpdCByZWZlcmVuY2VzCiAgICAKICAgIFdpdGhvdXQgb3B0aW9ucywgdW5zZXQgZmlyc3QgdHJpZXMgdG8gdW5zZXQgYSB2YXJpYWJsZSwgYW5kIGlmIHRoYXQgZmFpbHMsCiAgICB0cmllcyB0byB1bnNldCBhIGZ1bmN0aW9uLgogICAgCiAgICBTb21lIHZhcmlhYmxlcyBjYW5ub3QgYmUgdW5zZXQ7IGFsc28gc2VlIOKAmBtbMW1yZWFkb25seRtbMG3igJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhIE5BTUUgaXMgcmVhZC1vbmx5LgBVcmdlbnQgSU8gY29uZGl0aW9uAFVzYWdlOgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSAuLi4KCSVzIFtHTlUgbG9uZyBvcHRpb25dIFtvcHRpb25dIHNjcmlwdC1maWxlIC4uLgoAVXNlIOKAnBtbMW0lcxtbMG3igJ0gdG8gbGVhdmUgdGhlIHNoZWxsLgoAVXNlIHRoZSDigJgbWzFtYmFzaGJ1ZxtbMG3igJkgY29tbWFuZCB0byByZXBvcnQgYnVncy4KAFVzZXIgc2lnbmFsIDEAVXNlciBzaWduYWwgMgBXYWl0IGZvciBqb2IgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIGlkZW50aWZpZWQgYnkgYW4gSUQsIHdoaWNoIG1heSBiZSBhIHByb2Nlc3MgSUQgb3IgYQogICAgam9iIHNwZWNpZmljYXRpb24sIGFuZCByZXBvcnRzIGl0cyB0ZXJtaW5hdGlvbiBzdGF0dXMuICBJZiBJRCBpcyBub3QKICAgIGdpdmVuLCB3YWl0cyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgdGhlIHJldHVybgogICAgc3RhdHVzIGlzIHplcm8uICBJZiBJRCBpcyBhIGEgam9iIHNwZWNpZmljYXRpb24sIHdhaXRzIGZvciBhbGwgcHJvY2Vzc2VzCiAgICBpbiB0aGF0IGpvYidzIHBpcGVsaW5lLgogICAgCiAgICBJZiB0aGUgLW4gb3B0aW9uIGlzIHN1cHBsaWVkLCB3YWl0cyBmb3IgdGhlIG5leHQgam9iIHRvIHRlcm1pbmF0ZSBhbmQKICAgIHJldHVybnMgaXRzIGV4aXQgc3RhdHVzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBJRDsgZmFpbHMgaWYgSUQgaXMgaW52YWxpZCBvciBhbiBpbnZhbGlkCiAgICBvcHRpb24gaXMgZ2l2ZW4uAFdhaXQgZm9yIHByb2Nlc3MgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIHNwZWNpZmllZCBieSBhIFBJRCBhbmQgcmVwb3J0cyBpdHMgdGVybWluYXRpb24gc3RhdHVzLgogICAgSWYgUElEIGlzIG5vdCBnaXZlbiwgd2FpdHMgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNoaWxkIHByb2Nlc3NlcywKICAgIGFuZCB0aGUgcmV0dXJuIHN0YXR1cyBpcyB6ZXJvLiAgUElEIG11c3QgYmUgYSBwcm9jZXNzIElELgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBQSUQ7IGZhaWxzIGlmIFBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQKICAgIG9wdGlvbiBpcyBnaXZlbi4AV2luZG93IGNoYW5nZWQAV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhIHdyaXRlIGVycm9yIG9jY3Vycy4AV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3MsIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUsIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAgIC1lCWVuYWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGJhY2tzbGFzaCBlc2NhcGVzCiAgICAgIC1FCWV4cGxpY2l0bHkgc3VwcHJlc3MgaW50ZXJwcmV0YXRpb24gb2YgYmFja3NsYXNoIGVzY2FwZXMKICAgIAogICAg4oCYG1sxbWVjaG8bWzBt4oCZIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXEUJZXNjYXBlIGNoYXJhY3RlcgogICAgICBcZglmb3JtIGZlZWQKICAgICAgXG4JbmV3IGxpbmUKICAgICAgXHIJY2FycmlhZ2UgcmV0dXJuCiAgICAgIFx0CWhvcml6b250YWwgdGFiCiAgICAgIFx2CXZlcnRpY2FsIHRhYgogICAgICBcXAliYWNrc2xhc2gKICAgICAgXDBubm4JdGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSBjb2RlIGlzIE5OTiAob2N0YWwpLiAgTk5OIGNhbiBiZQogICAgCQkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJCWNhbiBiZSBvbmUgb3IgdHdvIGhleCBkaWdpdHMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBZb3UgaGF2ZSBtYWlsIGluICRfAFlvdSBoYXZlIG5ldyBtYWlsIGluICRfAFsgYXJnLi4uIF0AW1sgZXhwcmVzc2lvbiBdXQDigJgbWzFtJWMbWzBt4oCZOiBiYWQgY29tbWFuZADigJgbWzFtJWMbWzBt4oCZOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIA4oCYG1sxbSVjG1swbeKAmTogaW52YWxpZCBzeW1ib2xpYyBtb2RlIGNoYXJhY3RlcgDigJgbWzFtJWMbWzBt4oCZOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgb3BlcmF0b3IA4oCYG1sxbSVjG1swbeKAmTogaW52YWxpZCB0aW1lIGZvcm1hdCBzcGVjaWZpY2F0aW9uAOKAmBtbMW0lcxtbMG3igJk6IGNhbm5vdCB1bmJpbmQA4oCYG1sxbSVzG1swbeKAmTogaW52YWxpZCBhbGlhcyBuYW1lAOKAmBtbMW0lcxtbMG3igJk6IGludmFsaWQga2V5bWFwIG5hbWUA4oCYG1sxbSVzG1swbeKAmTogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQDigJgbWzFtJXMbWzBt4oCZOiBpcyBhIHNwZWNpYWwgYnVpbHRpbgDigJgbWzFtJXMbWzBt4oCZOiBtaXNzaW5nIGZvcm1hdCBjaGFyYWN0ZXIA4oCYG1sxbSVzG1swbeKAmTogbm90IGEgcGlkIG9yIHZhbGlkIGpvYiBzcGVjAOKAmBtbMW0lcxtbMG3igJk6IG5vdCBhIHZhbGlkIGlkZW50aWZpZXIA4oCYG1sxbSVzG1swbeKAmTogdW5rbm93biBmdW5jdGlvbiBuYW1lAOKAmBtbMW0pG1swbeKAmSBleHBlY3RlZADigJgbWzFtKRtbMG3igJkgZXhwZWN0ZWQsIGZvdW5kICVzAOKAmBtbMW06G1swbeKAmSBleHBlY3RlZCBmb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgBhZGRfcHJvY2VzczogcGlkICU1bGQgKCVzKSBtYXJrZWQgYXMgc3RpbGwgYWxpdmUAYWRkX3Byb2Nlc3M6IHByb2Nlc3MgJTVsZCAoJXMpIGluIHRoZV9waXBlbGluZQBhbGlhcyBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uIF0AYWxsX2xvY2FsX3ZhcmlhYmxlczogbm8gZnVuY3Rpb24gY29udGV4dCBhdCBjdXJyZW50IHNjb3BlAGFyZ3VtZW50AGFyZ3VtZW50IGV4cGVjdGVkAGFycmF5IHZhcmlhYmxlIHN1cHBvcnQgcmVxdWlyZWQAYXR0ZW1wdGVkIGFzc2lnbm1lbnQgdG8gbm9uLXZhcmlhYmxlAGJhZCBhcnJheSBzdWJzY3JpcHQAYmFkIGNvbW1hbmQgdHlwZQBiYWQgY29ubmVjdG9yAGJhZCBqdW1wAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3Npbmcg4oCcG1sxbWAbWzBt4oCdIGluICVzAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3Npbmcg4oCYG1sxbSVzG1swbeKAmSBpbiAlcwBiYXNoIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoPgoAYmFzaF9leGVjdXRlX3VuaXhfY29tbWFuZDogY2Fubm90IGZpbmQga2V5bWFwIGZvciBjb21tYW5kAGJnIFtqb2Jfc3BlYyAuLi5dAGJpbmQgWy1scHN2UFNWWF0gWy1tIGtleW1hcF0gWy1mIGZpbGVuYW1lXSBbLXEgbmFtZV0gWy11IG5hbWVdIFstciBrZXlzZXFdIFsteCBrZXlzZXE6c2hlbGwtY29tbWFuZF0gW2tleXNlcTpyZWFkbGluZS1mdW5jdGlvbiBvciByZWFkbGluZS1jb21tYW5kXQBicmFjZSBleHBhbnNpb246IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzAGJyYWNlIGV4cGFuc2lvbjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJWQgZWxlbWVudHMAYnJhY2UgZXhwYW5zaW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciDigJgbWzFtJXMbWzBt4oCZAGJyZWFrIFtuXQBidWc6IGJhZCBleHBhc3NpZ24gdG9rZW4AYnVpbHRpbiBbc2hlbGwtYnVpbHRpbiBbYXJnIC4uLl1dAGNhbGxlciBbZXhwcl0AY2FuIG9ubHkg4oCYG1sxbXJldHVybhtbMG3igJkgZnJvbSBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0AGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBmdW5jdGlvbgBjYW5ub3QgYWxsb2NhdGUgbmV3IGZpbGUgZGVzY3JpcHRvciBmb3IgYmFzaCBpbnB1dCBmcm9tIGZkICVkAGNhbm5vdCBjcmVhdGUgdGVtcCBmaWxlIGZvciBoZXJlLWRvY3VtZW50OiAlcwBjYW5ub3QgZHVwbGljYXRlIGZkICVkIHRvIGZkICVkAGNhbm5vdCBkdXBsaWNhdGUgbmFtZWQgcGlwZSAlcyBhcyBmZCAlZABjYW5ub3QgZmluZCAlcyBpbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgY2hpbGQgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIGNvbW1hbmQgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBvcGVuIG5hbWVkIHBpcGUgJXMgZm9yIHJlYWRpbmcAY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3Igd3JpdGluZwBjYW5ub3Qgb3BlbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgcmVkaXJlY3Qgc3RhbmRhcmQgaW5wdXQgZnJvbSAvZGV2L251bGw6ICVzAGNhbm5vdCByZXNldCBub2RlbGF5IG1vZGUgZm9yIGZkICVkAGNhbm5vdCBzZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMgc2ltdWx0YW5lb3VzbHkAY2Fubm90IHNldCBnaWQgdG8gJWQ6IGVmZmVjdGl2ZSBnaWQgJWQAY2Fubm90IHNldCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwICglZCkAY2Fubm90IHNldCB1aWQgdG8gJWQ6IGVmZmVjdGl2ZSB1aWQgJWQAY2Fubm90IHNpbXVsdGFuZW91c2x5IHVuc2V0IGEgZnVuY3Rpb24gYW5kIGEgdmFyaWFibGUAY2Fubm90IHN0YXJ0IGRlYnVnZ2VyOyBkZWJ1Z2dpbmcgbW9kZSBkaXNhYmxlZABjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2Ug4oCYG1sxbS1mG1swbeKAmSB0byBtYWtlIGZ1bmN0aW9ucwBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgb2YgLWFucncAY2FzZSBXT1JEIGluIFtQQVRURVJOIFt8IFBBVFRFUk5dLi4uKSBDT01NQU5EUyA7O10uLi4gZXNhYwBjZCBbLUx8Wy1QIFstZV1dIFstQF1dIFtkaXJdAGNoaWxkIHNldHBnaWQgKCVsZCB0byAlbGQpAGNvbW1hbmQgWy1wVnZdIGNvbW1hbmQgW2FyZyAuLi5dAGNvbW1hbmQgc3Vic3RpdHV0aW9uOiBpZ25vcmVkIG51bGwgYnl0ZSBpbiBpbnB1dABjb21tYW5kX3N1YnN0aXR1dGU6IGNhbm5vdCBkdXBsaWNhdGUgcGlwZSBhcyBmZCAxAGNvbXBnZW4gWy1hYmNkZWZnamtzdXZdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbd29yZF0AY29tcGxldGUgWy1hYmNkZWZnamtzdXZdIFstcHJdIFstREVdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbbmFtZSAuLi5dAGNvbXBsZXRpb246IGZ1bmN0aW9uIOKAmBtbMW0lcxtbMG3igJkgbm90IGZvdW5kAGNvbXBvcHQgWy1vfCtvIG9wdGlvbl0gWy1ERV0gW25hbWUgLi4uXQBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAY29udGludWUgW25dAGNvcHJvYyBbTkFNRV0gY29tbWFuZCBbcmVkaXJlY3Rpb25zXQBjb3VsZCBub3QgZmluZCAvdG1wLCBwbGVhc2UgY3JlYXRlIQBjcHJpbnRmOiDigJgbWzFtJWMbWzBt4oCZOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAY3VycmVudABkZWNsYXJlIFstYUFmRmdpbG5ydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uIHwgcGlkIC4uLl0AZGl2aXNpb24gYnkgMABkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQBlY2hvIFstbl0gW2FyZyAuLi5dAGVjaG8gWy1uZUVdIFthcmcgLi4uXQBlbXB0eSBhcnJheSB2YXJpYWJsZSBuYW1lAGVuYWJsZSBbLWFdIFstZG5wc10gWy1mIGZpbGVuYW1lXSBbbmFtZSAuLi5dAGVycm9yIGdldHRpbmcgdGVybWluYWwgYXR0cmlidXRlczogJXMAZXJyb3IgaW1wb3J0aW5nIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIOKAmBtbMW0lcxtbMG3igJkAZXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBldmFsIFthcmcgLi4uXQBldmFsOiBtYXhpbXVtIGV2YWwgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpAGV4ZWMgWy1jbF0gWy1hIG5hbWVdIFtjb21tYW5kIFthcmd1bWVudHMgLi4uXV0gW3JlZGlyZWN0aW9uIC4uLl0AZXhlY3V0ZV9jb3Byb2M6IGNvcHJvYyBbJWQ6JXNdIHN0aWxsIGV4aXN0cwBleGl0IFtuXQBleHBlY3RlZCDigJgbWzFtKRtbMG3igJkAZXhwb25lbnQgbGVzcyB0aGFuIDAAZXhwb3J0IFstZm5dIFtuYW1lWz12YWx1ZV0gLi4uXSBvciBleHBvcnQgLXAAZXhwcmVzc2lvbiBleHBlY3RlZABleHByZXNzaW9uIHJlY3Vyc2lvbiBsZXZlbCBleGNlZWRlZABmYyBbLWUgZW5hbWVdIFstbG5yXSBbZmlyc3RdIFtsYXN0XSBvciBmYyAtcyBbcGF0PXJlcF0gW2NvbW1hbmRdAGZnIFtqb2Jfc3BlY10AZmlsZSBkZXNjcmlwdG9yIG91dCBvZiByYW5nZQBmaWxlbmFtZSBhcmd1bWVudCByZXF1aXJlZABmb3IgKCggZXhwMTsgZXhwMjsgZXhwMyApKTsgZG8gQ09NTUFORFM7IGRvbmUAZm9yIE5BTUUgW2luIFdPUkRTIC4uLiBdIDsgZG8gQ09NTUFORFM7IGRvbmUAZm9ya2VkIHBpZCAlZCBhcHBlYXJzIGluIHJ1bm5pbmcgam9iICVkAGZvcm1hdCBwYXJzaW5nIHByb2JsZW06ICVzAGZyZWU6IGNhbGxlZCB3aXRoIGFscmVhZHkgZnJlZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAZnJlZTogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAGZ1bmN0aW9uIG5hbWUgeyBDT01NQU5EUyA7IH0gb3IgbmFtZSAoKSB7IENPTU1BTkRTIDsgfQBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHNoZWxsIHdpbGwgZm9yY2UgZXZhbHVhdGlvbiBhcyBhbiBhcml0aG1ldGljIHN1YnN0aXR1dGlvbgBnZXRjd2Q6IGNhbm5vdCBhY2Nlc3MgcGFyZW50IGRpcmVjdG9yaWVzAGdldG9wdHMgb3B0c3RyaW5nIG5hbWUgW2FyZ10AaGFzaCBbLWxyXSBbLXAgcGF0aG5hbWVdIFstZHRdIFtuYW1lIC4uLl0AaGFzaGluZyBkaXNhYmxlZABoZWxwIFstZG1zXSBbcGF0dGVybiAuLi5dAGhlbHAgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24AaGVyZS1kb2N1bWVudCBhdCBsaW5lICVkIGRlbGltaXRlZCBieSBlbmQtb2YtZmlsZSAod2FudGVkIOKAmBtbMW0lcxtbMG3igJkpAGhpc3RvcnkgWy1jXSBbLWQgb2Zmc2V0XSBbbl0gb3IgaGlzdG9yeSAtYW5ydyBbZmlsZW5hbWVdIG9yIGhpc3RvcnkgLXBzIGFyZyBbYXJnLi4uXQBoaXN0b3J5IHBvc2l0aW9uAGhpc3Rvcnkgc3BlY2lmaWNhdGlvbgBoaXRzCWNvbW1hbmQKAGlkZW50aWZpZXIgZXhwZWN0ZWQgYWZ0ZXIgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50AGlmIENPTU1BTkRTOyB0aGVuIENPTU1BTkRTOyBbIGVsaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IF0uLi4gWyBlbHNlIENPTU1BTkRTOyBdIGZpAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGdldHBncnAgZmFpbGVkAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGxpbmUgZGlzY2lwbGluZQBpbml0aWFsaXplX2pvYl9jb250cm9sOiBzZXRwZ2lkAGludmFsaWQgYXJpdGhtZXRpYyBiYXNlAGludmFsaWQgYmFzZQBpbnZhbGlkIGNoYXJhY3RlciAlZCBpbiBleHBvcnRzdHIgZm9yICVzAGludmFsaWQgaGV4IG51bWJlcgBpbnZhbGlkIG51bWJlcgBpbnZhbGlkIG9jdGFsIG51bWJlcgBpbnZhbGlkIHNpZ25hbCBudW1iZXIAam9iICVkIHN0YXJ0ZWQgd2l0aG91dCBqb2IgY29udHJvbABqb2Jfc3BlYyBbJl0Aam9icyBbLWxucHJzXSBbam9ic3BlYyAuLi5dIG9yIGpvYnMgLXggY29tbWFuZCBbYXJnc10Aa2lsbCBbLXMgc2lnc3BlYyB8IC1uIHNpZ251bSB8IC1zaWdzcGVjXSBwaWQgfCBqb2JzcGVjIC4uLiBvciBraWxsIC1sIFtzaWdzcGVjXQBsYXN0IGNvbW1hbmQ6ICVzCgBsZXQgYXJnIFthcmcgLi4uXQBsaW1pdABsaW5lICVkOiAAbGluZSBlZGl0aW5nIG5vdCBlbmFibGVkAGxvYWQgZnVuY3Rpb24gZm9yICVzIHJldHVybnMgZmFpbHVyZSAoJWQpOiBub3QgbG9hZGVkAGxvY2FsIFtvcHRpb25dIG5hbWVbPXZhbHVlXSAuLi4AbG9nb3V0CgBsb2dvdXQgW25dAGxvb3AgY291bnQAbWFrZV9oZXJlX2RvY3VtZW50OiBiYWQgaW5zdHJ1Y3Rpb24gdHlwZSAlZABtYWtlX2xvY2FsX3ZhcmlhYmxlOiBubyBmdW5jdGlvbiBjb250ZXh0IGF0IGN1cnJlbnQgc2NvcGUAbWFrZV9yZWRpcmVjdGlvbjogcmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb24g4oCYG1sxbSVkG1swbeKAmSBvdXQgb2YgcmFuZ2UAbWFsbG9jOiBibG9jayBvbiBmcmVlIGxpc3QgY2xvYmJlcmVkAG1hbGxvYzogZmFpbGVkIGFzc2VydGlvbjogJXMKAG1hcGZpbGUgWy1kIGRlbGltXSBbLW4gY291bnRdIFstTyBvcmlnaW5dIFstcyBjb3VudF0gWy10XSBbLXUgZmRdIFstQyBjYWxsYmFja10gWy1jIHF1YW50dW1dIFthcnJheV0AbWF4aW11bSBoZXJlLWRvY3VtZW50IGNvdW50IGV4Y2VlZGVkAG1pZ3JhdGUgcHJvY2VzcyB0byBhbm90aGVyIENQVQBtaXNzaW5nIOKAmBtbMW0pG1swbeKAmQBtaXNzaW5nIOKAmBtbMW1dG1swbeKAmQBtaXNzaW5nIGhleCBkaWdpdCBmb3IgXHgAbWlzc2luZyB1bmljb2RlIGRpZ2l0IGZvciBcJWMAbmV0d29yayBvcGVyYXRpb25zIG5vdCBzdXBwb3J0ZWQAbm8g4oCYG1sxbT0bWzBt4oCZIGluIGV4cG9ydHN0ciBmb3IgJXMAbm8gY2xvc2luZyDigJgbWzFtJWMbWzBt4oCZIGluICVzAG5vIGNvbW1hbmQgZm91bmQAbm8gaGVscCB0b3BpY3MgbWF0Y2gg4oCYG1sxbSVzG1swbeKAmS4gIFRyeSDigJgbWzFtaGVscCBoZWxwG1swbeKAmSBvciDigJgbWzFtbWFuIC1rICVzG1swbeKAmSBvciDigJgbWzFtaW5mbyAlcxtbMG3igJkuAG5vIGpvYiBjb250cm9sAG5vIGpvYiBjb250cm9sIGluIHRoaXMgc2hlbGwAbm8gbWF0Y2g6ICVzAG5vIG90aGVyIGRpcmVjdG9yeQBubyBvdGhlciBvcHRpb25zIGFsbG93ZWQgd2l0aCDigJgbWzFtLXgbWzBt4oCZAG5vdCBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbXBsZXRpb24gZnVuY3Rpb24Abm90IGxvZ2luIHNoZWxsOiB1c2Ug4oCYG1sxbWV4aXQbWzBt4oCZAG51bGwgZGlyZWN0b3J5AG9jdGFsIG51bWJlcgBvbmx5IG1lYW5pbmdmdWwgaW4gYSDigJgbWzFtZm9yG1swbeKAmSwg4oCYG1sxbXdoaWxlG1swbeKAmSwgb3Ig4oCYG1sxbXVudGlsG1swbeKAmSBsb29wAHBpcGUgZXJyb3IAcG9wX3Njb3BlOiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSB0ZW1wb3JhcnkgZW52aXJvbm1lbnQgc2NvcGUAcG9wX3Zhcl9jb250ZXh0OiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSBmdW5jdGlvbiBjb250ZXh0AHBvcF92YXJfY29udGV4dDogbm8gZ2xvYmFsX3ZhcmlhYmxlcyBjb250ZXh0AHBvcGQgWy1uXSBbK04gfCAtTl0AcG93ZXIgZmFpbHVyZSBpbW1pbmVudABwcmludF9jb21tYW5kOiBiYWQgY29ubmVjdG9yIOKAmBtbMW0lZBtbMG3igJkAcHJpbnRmIFstdiB2YXJdIGZvcm1hdCBbYXJndW1lbnRzXQBwcm9nY29tcF9pbnNlcnQ6ICVzOiBOVUxMIENPTVBTUEVDAHByb2dyYW1tYWJsZV9jb21wbGV0aW9uOiAlczogcG9zc2libGUgcmV0cnkgbG9vcABwcm9ncmFtbWluZyBlcnJvcgBwdXNoZCBbLW5dIFsrTiB8IC1OIHwgZGlyXQBwd2QgWy1MUF0AcmVhZCBbLWVyc10gWy1hIGFycmF5XSBbLWQgZGVsaW1dIFstaSB0ZXh0XSBbLW4gbmNoYXJzXSBbLU4gbmNoYXJzXSBbLXAgcHJvbXB0XSBbLXQgdGltZW91dF0gWy11IGZkXSBbbmFtZSAuLi5dAHJlYWQgZXJyb3I6ICVkOiAlcwByZWFkYXJyYXkgWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAHJlYWRvbmx5IFstYUFmXSBbbmFtZVs9dmFsdWVdIC4uLl0gb3IgcmVhZG9ubHkgLXAAcmVhbGxvYzogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAcmVhbGxvYzogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAcmVhbGxvYzogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAHJlY3Vyc2lvbiBzdGFjayB1bmRlcmZsb3cAcmVkaXJlY3Rpb24gZXJyb3I6IGNhbm5vdCBkdXBsaWNhdGUgZmQAcmVnaXN0ZXJfYWxsb2M6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgYWxsb2NhdGVkPwoAcmVnaXN0ZXJfYWxsb2M6IGFsbG9jIHRhYmxlIGlzIGZ1bGwgd2l0aCBGSU5EX0FMTE9DPwoAcmVnaXN0ZXJfZnJlZTogJXAgYWxyZWFkeSBpbiB0YWJsZSBhcyBmcmVlPwoAcmVzdHJpY3RlZAByZXR1cm4gW25dAHJ1bl9wZW5kaW5nX3RyYXBzOiBiYWQgdmFsdWUgaW4gdHJhcF9saXN0WyVkXTogJXAAcnVuX3BlbmRpbmdfdHJhcHM6IHNpZ25hbCBoYW5kbGVyIGlzIFNJR19ERkwsIHJlc2VuZGluZyAlZCAoJXMpIHRvIG15c2VsZgBzYXZlX2Jhc2hfaW5wdXQ6IGJ1ZmZlciBhbHJlYWR5IGV4aXN0cyBmb3IgbmV3IGZkICVkAHNlbGVjdCBOQU1FIFtpbiBXT1JEUyAuLi4gO10gZG8gQ09NTUFORFM7IGRvbmUAc2V0IFstYWJlZmhrbW5wdHV2eEJDSFBdIFstbyBvcHRpb24tbmFtZV0gWy0tXSBbYXJnIC4uLl0Ac2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6ICVzOiBjYW5ub3QgY2hhbmdlIGxvY2FsZSAoJXMpOiAlcwBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2hlbGwgbGV2ZWwgKCVkKSB0b28gaGlnaCwgcmVzZXR0aW5nIHRvIDEAc2hlbGxfZ2V0Yzogc2hlbGxfaW5wdXRfbGluZV9zaXplICglenUpIGV4Y2VlZHMgU0laRV9NQVggKCVsdSk6IGxpbmUgdHJ1bmNhdGVkAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4g4oCYG1sxbSVzG1swbeKAmQBzeW50YXggZXJyb3IgaW4gZXhwcmVzc2lvbgBzeW50YXggZXJyb3IgbmVhciDigJgbWzFtJXMbWzBt4oCZAHN5bnRheCBlcnJvciBuZWFyIHVuZXhwZWN0ZWQgdG9rZW4g4oCYG1sxbSVzG1swbeKAmQBzeW50YXggZXJyb3I6IOKAmBtbMW0oKCVzKSkbWzBt4oCZAHN5bnRheCBlcnJvcjog4oCYG1sxbTsbWzBt4oCZIHVuZXhwZWN0ZWQAc3ludGF4IGVycm9yOiBhcml0aG1ldGljIGV4cHJlc3Npb24gcmVxdWlyZWQAc3ludGF4IGVycm9yOiBpbnZhbGlkIGFyaXRobWV0aWMgb3BlcmF0b3IAc3ludGF4IGVycm9yOiBvcGVyYW5kIGV4cGVjdGVkAHN5bnRheCBlcnJvcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBzeXN0ZW0gY3Jhc2ggaW1taW5lbnQAdGVzdCBbZXhwcl0AdGltZSBbLXBdIHBpcGVsaW5lAHRvbyBtYW55IGFyZ3VtZW50cwB0cmFwIFstbHBdIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dAHRyYXBfaGFuZGxlcjogYmFkIHNpZ25hbCAlZAB0eXBlIFstYWZwdFBdIG5hbWUgW25hbWUgLi4uXQB0eXBlc2V0IFstYUFmRmdpbG5ydHV4XSBbLXBdIG5hbWVbPXZhbHVlXSAuLi4AdWxpbWl0IFstU0hhYmNkZWZpa2xtbnBxcnN0dXZ4UFRdIFtsaW1pdF0AdW1hc2sgWy1wXSBbLVNdIFttb2RlXQB1bmFsaWFzIFstYV0gbmFtZSBbbmFtZSAuLi5dAHVuZXhwZWN0ZWQgRU9GIHdoaWxlIGxvb2tpbmcgZm9yIOKAmBtbMW1dXRtbMG3igJkAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcg4oCYG1sxbSVjG1swbeKAmQB1bmV4cGVjdGVkIEVPRiB3aGlsZSBsb29raW5nIGZvciBtYXRjaGluZyDigJgbWzFtKRtbMG3igJkAdW5leHBlY3RlZCBhcmd1bWVudCDigJgbWzFtJXMbWzBt4oCZIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IOKAmBtbMW0lcxtbMG3igJkgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCB1bmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIHRva2VuICVkIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiDigJgbWzFtJWMbWzBt4oCZIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiDigJgbWzFtJXMbWzBt4oCZIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiDigJgbWzFtJXMbWzBt4oCZLCBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAdW5leHBlY3RlZCB0b2tlbiDigJgbWzFtJXMbWzBt4oCZLCBleHBlY3RlZCDigJgbWzFtKRtbMG3igJkAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFstbl0gW25hbWUgLi4uXQB1bnRpbCBDT01NQU5EUzsgZG8gQ09NTUFORFM7IGRvbmUAdmFsdWUgdG9vIGdyZWF0IGZvciBiYXNlAHZhcmlhYmxlcyAtIE5hbWVzIGFuZCBtZWFuaW5ncyBvZiBzb21lIHNoZWxsIHZhcmlhYmxlcwB3YWl0IFstbl0gW2lkIC4uLl0Ad2FpdCBbcGlkIC4uLl0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQA=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 8
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
acl.mo
8.30 KB
lrw-r--r--
2018-06-19 03:10:14
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
bash.mo
164.91 KB
lrw-r--r--
2016-09-10 16:43:10
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
elfutils.mo
154.05 KB
lrw-r--r--
2023-11-03 17:23:31
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
flex.mo
20.59 KB
lrw-r--r--
2019-10-12 12:33:17
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
gettext-runtime.mo
9.19 KB
lrw-r--r--
2016-06-11 13:08:06
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
gettext-tools.mo
114.03 KB
lrw-r--r--
2016-06-11 13:08:14
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
gnupg2.mo
216.39 KB
lrw-r--r--
2020-03-20 14:40:35
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
libidn.mo
8.29 KB
lrw-r--r--
2019-10-13 16:55:34
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).