REDROOM
PHP 8.2.31
Path:
Logout
Edit File
Size: 163.33 KB
Close
/usr/share/locale/en@quot/LC_MESSAGES/bash.mo
Text
Base64
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dGlvbiBvbmx5KQoADQptYWxsb2M6ICVzOiVkOiBhc3NlcnRpb24gYm90Y2hlZA0KACAgKHdkOiAlcykAIChjb3JlIGR1bXBlZCkAIGxpbmUgACQlczogY2Fubm90IGFzc2lnbiBpbiB0aGlzIHdheQAlYyVjOiBpbnZhbGlkIG9wdGlvbgAlZDogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6ICVzACVzIGNhbiBiZSBpbnZva2VkIHZpYSAAJXMgaGFzIG51bGwgZXhwb3J0c3RyACVzIGlzICVzCgAlcyBpcyBhIGZ1bmN0aW9uCgAlcyBpcyBhIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGEgc2hlbGwga2V5d29yZAoAJXMgaXMgYSBzcGVjaWFsIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGFsaWFzZWQgdG8gYCVzJwoAJXMgaXMgaGFzaGVkICglcykKACVzIGlzIG5vdCBib3VuZCB0byBhbnkga2V5cy4KACVzIG91dCBvZiByYW5nZQAlcyVzJXM6ICVzIChlcnJvciB0b2tlbiBpcyAiJXMiKQAlczogJXMAJXM6ICVzIG91dCBvZiByYW5nZQAlczogJXM6IGJhZCBpbnRlcnByZXRlcgAlczogJXM6IGNhbm5vdCBvcGVuIGFzIEZJTEUAJXM6ICVzOiBjb21wYXRpYmlsaXR5IHZhbHVlIG91dCBvZiByYW5nZQAlczogJXM6IGludmFsaWQgdmFsdWUgZm9yIHRyYWNlIGZpbGUgZGVzY3JpcHRvcgAlczogJXM6IG11c3QgdXNlIHN1YnNjcmlwdCB3aGVuIGFzc2lnbmluZyBhc3NvY2lhdGl2ZSBhcnJheQAlczogJXM6JWQ6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMAJXM6ICVzOiVkOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogSXMgYSBkaXJlY3RvcnkAJXM6IGFtYmlndW91cyBqb2Igc3BlYwAlczogYW1iaWd1b3VzIHJlZGlyZWN0ACVzOiBhcmd1bWVudHMgbXVzdCBiZSBwcm9jZXNzIG9yIGpvYiBJRHMAJXM6IGFzc2lnbmluZyBpbnRlZ2VyIHRvIG5hbWUgcmVmZXJlbmNlACVzOiBiYWQgbmV0d29yayBwYXRoIHNwZWNpZmljYXRpb24AJXM6IGJhZCBzdWJzdGl0dXRpb24AJXM6IGJpbmFyeSBvcGVyYXRvciBleHBlY3RlZAAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcwAlczogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyAoJWx1IGJ5dGVzIGFsbG9jYXRlZCkAJXM6IGNhbm5vdCBhc3NpZ24gZmQgdG8gdmFyaWFibGUAJXM6IGNhbm5vdCBhc3NpZ24gbGlzdCB0byBhcnJheSBtZW1iZXIAJXM6IGNhbm5vdCBhc3NpZ24gdG8gbm9uLW51bWVyaWMgaW5kZXgAJXM6IGNhbm5vdCBjb252ZXJ0IGFzc29jaWF0aXZlIHRvIGluZGV4ZWQgYXJyYXkAJXM6IGNhbm5vdCBjb252ZXJ0IGluZGV4ZWQgdG8gYXNzb2NpYXRpdmUgYXJyYXkAJXM6IGNhbm5vdCBjcmVhdGU6ICVzACVzOiBjYW5ub3QgZGVsZXRlOiAlcwAlczogY2Fubm90IGRlc3Ryb3kgYXJyYXkgdmFyaWFibGVzIGluIHRoaXMgd2F5ACVzOiBjYW5ub3QgZXhlY3V0ZSBiaW5hcnkgZmlsZQAlczogY2Fubm90IGV4ZWN1dGUgYmluYXJ5IGZpbGU6ICVzACVzOiBjYW5ub3QgZXhlY3V0ZTogJXMAJXM6IGNhbm5vdCBleHBvcnQAJXM6IGNhbm5vdCBnZXQgbGltaXQ6ICVzACVzOiBjYW5ub3QgbW9kaWZ5IGxpbWl0OiAlcwAlczogY2Fubm90IG9wZW4gdGVtcCBmaWxlOiAlcwAlczogY2Fubm90IG9wZW46ICVzACVzOiBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUAJXM6IGNhbm5vdCByZWFkOiAlcwAlczogY2Fubm90IHVuc2V0ACVzOiBjYW5ub3QgdW5zZXQ6IHJlYWRvbmx5ICVzACVzOiBjaXJjdWxhciBuYW1lIHJlZmVyZW5jZQAlczogY29tbWFuZCBub3QgZm91bmQAJXM6IGVycm9yIHJldHJpZXZpbmcgY3VycmVudCBkaXJlY3Rvcnk6ICVzOiAlcwoAJXM6IGV4cHJlc3Npb24gZXJyb3IKACVzOiBmaWxlIGlzIHRvbyBsYXJnZQAlczogZmlsZSBub3QgZm91bmQAJXM6IGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBub3QgYCInACVzOiBoYXNoIHRhYmxlIGVtcHR5CgAlczogaGlzdG9yeSBleHBhbnNpb24gZmFpbGVkACVzOiBob3N0IHVua25vd24AJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjCgAlczogaW5saWIgZmFpbGVkACVzOiBpbnRlZ2VyIGV4cHJlc3Npb24gZXhwZWN0ZWQAJXM6IGludmFsaWQgYWN0aW9uIG5hbWUAJXM6IGludmFsaWQgYXJndW1lbnQAJXM6IGludmFsaWQgYXJyYXkgb3JpZ2luACVzOiBpbnZhbGlkIGFzc29jaWF0aXZlIGFycmF5IGtleQAlczogaW52YWxpZCBjYWxsYmFjayBxdWFudHVtACVzOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIGluZGlyZWN0IGV4cGFuc2lvbgAlczogaW52YWxpZCBsaW1pdCBhcmd1bWVudAAlczogaW52YWxpZCBsaW5lIGNvdW50ACVzOiBpbnZhbGlkIG9wdGlvbgAlczogaW52YWxpZCBvcHRpb24gbmFtZQAlczogaW52YWxpZCBzZXJ2aWNlACVzOiBpbnZhbGlkIHNoZWxsIG9wdGlvbiBuYW1lACVzOiBpbnZhbGlkIHNpZ25hbCBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIHRpbWVvdXQgc3BlY2lmaWNhdGlvbgAlczogaW52YWxpZCB0aW1lc3RhbXAAJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZQAlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQAlczogaXMgYSBkaXJlY3RvcnkAJXM6IGpvYiAlZCBhbHJlYWR5IGluIGJhY2tncm91bmQAJXM6IGpvYiBoYXMgdGVybWluYXRlZAAlczogbGluZSAlZDogACVzOiBtYXhpbXVtIGZ1bmN0aW9uIG5lc3RpbmcgbGV2ZWwgZXhjZWVkZWQgKCVkKQAlczogbWF4aW11bSBzb3VyY2UgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpACVzOiBtaXNzaW5nIGNvbG9uIHNlcGFyYXRvcgAlczogbmFtZXJlZiB2YXJpYWJsZSBzZWxmIHJlZmVyZW5jZXMgbm90IGFsbG93ZWQAJXM6IG5vIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbgAlczogbm8gam9iIGNvbnRyb2wAJXM6IG5vIHN1Y2ggam9iACVzOiBub3QgYSBmdW5jdGlvbgAlczogbm90IGEgcmVndWxhciBmaWxlACVzOiBub3QgYSBzaGVsbCBidWlsdGluACVzOiBub3QgYW4gYXJyYXkgdmFyaWFibGUAJXM6IG5vdCBhbiBpbmRleGVkIGFycmF5ACVzOiBub3QgZHluYW1pY2FsbHkgbG9hZGVkACVzOiBub3QgZm91bmQAJXM6IG51bWVyaWMgYXJndW1lbnQgcmVxdWlyZWQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudAAlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjCgAlczogcGFyYW1ldGVyIG51bGwgb3Igbm90IHNldAAlczogcXVvdGVkIGNvbXBvdW5kIGFycmF5IGFzc2lnbm1lbnQgZGVwcmVjYXRlZAAlczogcmVhZG9ubHkgZnVuY3Rpb24AJXM6IHJlYWRvbmx5IHZhcmlhYmxlACVzOiByZWZlcmVuY2UgdmFyaWFibGUgY2Fubm90IGJlIGFuIGFycmF5ACVzOiByZW1vdmluZyBuYW1lcmVmIGF0dHJpYnV0ZQAlczogcmVzdHJpY3RlZAAlczogcmVzdHJpY3RlZDogY2Fubm90IHJlZGlyZWN0IG91dHB1dAAlczogcmVzdHJpY3RlZDogY2Fubm90IHNwZWNpZnkgYC8nIGluIGNvbW1hbmQgbmFtZXMAJXM6IHN1YnN0cmluZyBleHByZXNzaW9uIDwgMAAlczogdW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAJXM6IHVuYm91bmQgdmFyaWFibGUAJXM6IHVzYWdlOiAAJXM6IHZhcmlhYmxlIG1heSBub3QgYmUgYXNzaWduZWQgdmFsdWUAKCggZXhwcmVzc2lvbiApKQAoY29yZSBkdW1wZWQpIAAod2Qgbm93OiAlcykKAC4gZmlsZW5hbWUgW2FyZ3VtZW50c10AL2Rldi8odGNwfHVkcCkvaG9zdC9wb3J0IG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBuZXR3b3JraW5nAC90bXAgbXVzdCBiZSBhIHZhbGlkIGRpcmVjdG9yeSBuYW1lADxubyBjdXJyZW50IGRpcmVjdG9yeT4AQUJPUlQgaW5zdHJ1Y3Rpb24AQWJvcnRpbmcuLi4AQWRkIGRpcmVjdG9yaWVzIHRvIHN0YWNrLgogICAgCiAgICBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAkJZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCQlmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdCBzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgYXJndW1lbnQgaXMgc3VwcGxpZWQgb3IgdGhlIGRpcmVjdG9yeQogICAgY2hhbmdlIGZhaWxzLgBBZGRzIGEgZGlyZWN0b3J5IHRvIHRoZSB0b3Agb2YgdGhlIGRpcmVjdG9yeSBzdGFjaywgb3Igcm90YXRlcwogICAgdGhlIHN0YWNrLCBtYWtpbmcgdGhlIG5ldyB0b3Agb2YgdGhlIHN0YWNrIHRoZSBjdXJyZW50IHdvcmtpbmcKICAgIGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBleGNoYW5nZXMgdGhlIHRvcCB0d28gZGlyZWN0b3JpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gYWRkaW5nCiAgICAJZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoCiAgICAJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICAtTglSb3RhdGVzIHRoZSBzdGFjayBzbyB0aGF0IHRoZSBOdGggZGlyZWN0b3J5IChjb3VudGluZwogICAgCWZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgZGlyCUFkZHMgRElSIHRvIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYXQgdGhlIHRvcCwgbWFraW5nIGl0IHRoZQogICAgCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AQWxhcm0gKHByb2ZpbGUpAEFsYXJtICh2aXJ0dWFsKQBBbGFybSBjbG9jawBBcml0aG1ldGljIGZvciBsb29wLgogICAgCiAgICBFcXVpdmFsZW50IHRvCiAgICAJKCggRVhQMSApKQogICAgCXdoaWxlICgoIEVYUDIgKSk7IGRvCiAgICAJCUNPTU1BTkRTCiAgICAJCSgoIEVYUDMgKSkKICAgIAlkb25lCiAgICBFWFAxLCBFWFAyLCBhbmQgRVhQMyBhcmUgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4gIElmIGFueSBleHByZXNzaW9uIGlzCiAgICBvbWl0dGVkLCBpdCBiZWhhdmVzIGFzIGlmIGl0IGV2YWx1YXRlcyB0byAxLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBCUFQgdHJhY2UvdHJhcABCYWQgc3lzdGVtIGNhbGwAQm9ndXMgc2lnbmFsAEJyb2tlbiBwaXBlAEJ1cyBlcnJvcgBDUFUgbGltaXQAQ2hhbmdlIHRoZSBzaGVsbCB3b3JraW5nIGRpcmVjdG9yeS4KICAgIAogICAgQ2hhbmdlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBESVIuICBUaGUgZGVmYXVsdCBESVIgaXMgdGhlIHZhbHVlIG9mIHRoZQogICAgSE9NRSBzaGVsbCB2YXJpYWJsZS4KICAgIAogICAgVGhlIHZhcmlhYmxlIENEUEFUSCBkZWZpbmVzIHRoZSBzZWFyY2ggcGF0aCBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCiAgICBESVIuICBBbHRlcm5hdGl2ZSBkaXJlY3RvcnkgbmFtZXMgaW4gQ0RQQVRIIGFyZSBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikuCiAgICBBIG51bGwgZGlyZWN0b3J5IG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSWYgRElSIGJlZ2lucwogICAgd2l0aCBhIHNsYXNoICgvKSwgdGhlbiBDRFBBVEggaXMgbm90IHVzZWQuCiAgICAKICAgIElmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kLCBhbmQgdGhlIHNoZWxsIG9wdGlvbiBgY2RhYmxlX3ZhcnMnIGlzIHNldCwKICAgIHRoZSB3b3JkIGlzIGFzc3VtZWQgdG8gYmUgIGEgdmFyaWFibGUgbmFtZS4gIElmIHRoYXQgdmFyaWFibGUgaGFzIGEgdmFsdWUsCiAgICBpdHMgdmFsdWUgaXMgdXNlZCBmb3IgRElSLgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlmb3JjZSBzeW1ib2xpYyBsaW5rcyB0byBiZSBmb2xsb3dlZDogcmVzb2x2ZSBzeW1ib2xpYwogICAgCQlsaW5rcyBpbiBESVIgYWZ0ZXIgcHJvY2Vzc2luZyBpbnN0YW5jZXMgb2YgYC4uJwogICAgICAtUAl1c2UgdGhlIHBoeXNpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aG91dCBmb2xsb3dpbmcKICAgIAkJc3ltYm9saWMgbGlua3M6IHJlc29sdmUgc3ltYm9saWMgbGlua3MgaW4gRElSIGJlZm9yZQogICAgCQlwcm9jZXNzaW5nIGluc3RhbmNlcyBvZiBgLi4nCiAgICAgIC1lCWlmIHRoZSAtUCBvcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBzdWNjZXNzZnVsbHksIGV4aXQgd2l0aAogICAgCQlhIG5vbi16ZXJvIHN0YXR1cwogICAgICAtQAlvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgcHJlc2VudCBhIGZpbGUgd2l0aCBleHRlbmRlZAogICAgCQlhdHRyaWJ1dGVzIGFzIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgYXR0cmlidXRlcwogICAgCiAgICBUaGUgZGVmYXVsdCBpcyB0byBmb2xsb3cgc3ltYm9saWMgbGlua3MsIGFzIGlmIGAtTCcgd2VyZSBzcGVjaWZpZWQuCiAgICBgLi4nIGlzIHByb2Nlc3NlZCBieSByZW1vdmluZyB0aGUgaW1tZWRpYXRlbHkgcHJldmlvdXMgcGF0aG5hbWUgY29tcG9uZW50CiAgICBiYWNrIHRvIGEgc2xhc2ggb3IgdGhlIGJlZ2lubmluZyBvZiBESVIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIGlmIHRoZSBkaXJlY3RvcnkgaXMgY2hhbmdlZCwgYW5kIGlmICRQV0QgaXMgc2V0IHN1Y2Nlc3NmdWxseSB3aGVuCiAgICAtUCBpcyB1c2VkOyBub24temVybyBvdGhlcndpc2UuAENoaWxkIGRlYXRoIG9yIHN0b3AAQ29tbW9uIHNoZWxsIHZhcmlhYmxlIG5hbWVzIGFuZCB1c2FnZS4KICAgIAogICAgQkFTSF9WRVJTSU9OCVZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoaXMgQmFzaC4KICAgIENEUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAogICAgCQlmb3IgZGlyZWN0b3JpZXMgZ2l2ZW4gYXMgYXJndW1lbnRzIHRvIGBjZCcuCiAgICBHTE9CSUdOT1JFCUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgZGVzY3JpYmluZyBmaWxlbmFtZXMgdG8KICAgIAkJYmUgaWdub3JlZCBieSBwYXRobmFtZSBleHBhbnNpb24uCiAgICBISVNURklMRQlUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB5b3VyIGNvbW1hbmQgaGlzdG9yeSBpcyBzdG9yZWQuCiAgICBISVNURklMRVNJWkUJVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoaXMgZmlsZSBjYW4gY29udGFpbi4KICAgIEhJU1RTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGxpbmVzIHRoYXQgYSBydW5uaW5nCiAgICAJCXNoZWxsIGNhbiBhY2Nlc3MuCiAgICBIT01FCVRoZSBjb21wbGV0ZSBwYXRobmFtZSB0byB5b3VyIGxvZ2luIGRpcmVjdG9yeS4KICAgIEhPU1ROQU1FCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGhvc3QuCiAgICBIT1NUVFlQRQlUaGUgdHlwZSBvZiBDUFUgdGhpcyB2ZXJzaW9uIG9mIEJhc2ggaXMgcnVubmluZyB1bmRlci4KICAgIElHTk9SRUVPRglDb250cm9scyB0aGUgYWN0aW9uIG9mIHRoZSBzaGVsbCBvbiByZWNlaXB0IG9mIGFuIEVPRgogICAgCQljaGFyYWN0ZXIgYXMgdGhlIHNvbGUgaW5wdXQuICBJZiBzZXQsIHRoZW4gdGhlIHZhbHVlCiAgICAJCW9mIGl0IGlzIHRoZSBudW1iZXIgb2YgRU9GIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgc2VlbgogICAgCQlpbiBhIHJvdyBvbiBhbiBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgc2hlbGwgd2lsbCBleGl0CiAgICAJCShkZWZhdWx0IDEwKS4gIFdoZW4gdW5zZXQsIEVPRiBzaWduaWZpZXMgdGhlIGVuZCBvZiBpbnB1dC4KICAgIE1BQ0hUWVBFCUEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc3lzdGVtIEJhc2ggaXMgcnVubmluZyBvbi4KICAgIE1BSUxDSEVDSwlIb3cgb2Z0ZW4sIGluIHNlY29uZHMsIEJhc2ggY2hlY2tzIGZvciBuZXcgbWFpbC4KICAgIE1BSUxQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZW5hbWVzIHdoaWNoIEJhc2ggY2hlY2tzCiAgICAJCWZvciBuZXcgbWFpbC4KICAgIE9TVFlQRQlUaGUgdmVyc2lvbiBvZiBVbml4IHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBQQVRICUEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHdoZW4KICAgIAkJbG9va2luZyBmb3IgY29tbWFuZHMuCiAgICBQUk9NUFRfQ09NTUFORAlBIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBwcmludGluZyBvZiBlYWNoCiAgICAJCXByaW1hcnkgcHJvbXB0LgogICAgUFMxCQlUaGUgcHJpbWFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFMyCQlUaGUgc2Vjb25kYXJ5IHByb21wdCBzdHJpbmcuCiAgICBQV0QJCVRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgIFNIRUxMT1BUUwlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGVuYWJsZWQgc2hlbGwgb3B0aW9ucy4KICAgIFRFUk0JVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVybWluYWwgdHlwZS4KICAgIFRJTUVGT1JNQVQJVGhlIG91dHB1dCBmb3JtYXQgZm9yIHRpbWluZyBzdGF0aXN0aWNzIGRpc3BsYXllZCBieSB0aGUKICAgIAkJYHRpbWUnIHJlc2VydmVkIHdvcmQuCiAgICBhdXRvX3Jlc3VtZQlOb24tbnVsbCBtZWFucyBhIGNvbW1hbmQgd29yZCBhcHBlYXJpbmcgb24gYSBsaW5lIGJ5CiAgICAJCWl0c2VsZiBpcyBmaXJzdCBsb29rZWQgZm9yIGluIHRoZSBsaXN0IG9mIGN1cnJlbnRseQogICAgCQlzdG9wcGVkIGpvYnMuICBJZiBmb3VuZCB0aGVyZSwgdGhhdCBqb2IgaXMgZm9yZWdyb3VuZGVkLgogICAgCQlBIHZhbHVlIG9mIGBleGFjdCcgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJZXhhY3RseSBtYXRjaCBhIGNvbW1hbmQgaW4gdGhlIGxpc3Qgb2Ygc3RvcHBlZCBqb2JzLiAgQQogICAgCQl2YWx1ZSBvZiBgc3Vic3RyaW5nJyBtZWFucyB0aGF0IHRoZSBjb21tYW5kIHdvcmQgbXVzdAogICAgCQltYXRjaCBhIHN1YnN0cmluZyBvZiB0aGUgam9iLiAgQW55IG90aGVyIHZhbHVlIG1lYW5zIHRoYXQKICAgIAkJdGhlIGNvbW1hbmQgbXVzdCBiZSBhIHByZWZpeCBvZiBhIHN0b3BwZWQgam9iLgogICAgaGlzdGNoYXJzCUNoYXJhY3RlcnMgY29udHJvbGxpbmcgaGlzdG9yeSBleHBhbnNpb24gYW5kIHF1aWNrCiAgICAJCXN1YnN0aXR1dGlvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgdGhlIGhpc3RvcnkKICAgIAkJc3Vic3RpdHV0aW9uIGNoYXJhY3RlciwgdXN1YWxseSBgIScuICBUaGUgc2Vjb25kIGlzCiAgICAJCXRoZSBgcXVpY2sgc3Vic3RpdHV0aW9uJyBjaGFyYWN0ZXIsIHVzdWFsbHkgYF4nLiAgVGhlCiAgICAJCXRoaXJkIGlzIHRoZSBgaGlzdG9yeSBjb21tZW50JyBjaGFyYWN0ZXIsIHVzdWFsbHkgYCMnLgogICAgSElTVElHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHVzZWQgdG8gZGVjaWRlIHdoaWNoCiAgICAJCWNvbW1hbmRzIHNob3VsZCBiZSBzYXZlZCBvbiB0aGUgaGlzdG9yeSBsaXN0LgoAQ29udGludWUAQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgBDcmVhdGUgYSBjb3Byb2Nlc3MgbmFtZWQgTkFNRS4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5EIGFzeW5jaHJvbm91c2x5LCB3aXRoIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkCiAgICBpbnB1dCBvZiB0aGUgY29tbWFuZCBjb25uZWN0ZWQgdmlhIGEgcGlwZSB0byBmaWxlIGRlc2NyaXB0b3JzIGFzc2lnbmVkCiAgICB0byBpbmRpY2VzIDAgYW5kIDEgb2YgYW4gYXJyYXkgdmFyaWFibGUgTkFNRSBpbiB0aGUgZXhlY3V0aW5nIHNoZWxsLgogICAgVGhlIGRlZmF1bHQgTkFNRSBpcyAiQ09QUk9DIi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBUaGUgY29wcm9jIGNvbW1hbmQgcmV0dXJucyBhbiBleGl0IHN0YXR1cyBvZiAwLgBEZWZpbmUgbG9jYWwgdmFyaWFibGVzLgogICAgCiAgICBDcmVhdGUgYSBsb2NhbCB2YXJpYWJsZSBjYWxsZWQgTkFNRSwgYW5kIGdpdmUgaXQgVkFMVUUuICBPUFRJT04gY2FuCiAgICBiZSBhbnkgb3B0aW9uIGFjY2VwdGVkIGJ5IGBkZWNsYXJlJy4KICAgIAogICAgTG9jYWwgdmFyaWFibGVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGEgZnVuY3Rpb247IHRoZXkgYXJlIHZpc2libGUKICAgIG9ubHkgdG8gdGhlIGZ1bmN0aW9uIHdoZXJlIHRoZXkgYXJlIGRlZmluZWQgYW5kIGl0cyBjaGlsZHJlbi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkLCBhIHZhcmlhYmxlCiAgICBhc3NpZ25tZW50IGVycm9yIG9jY3Vycywgb3IgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbi4ARGVmaW5lIG9yIGRpc3BsYXkgYWxpYXNlcy4KICAgIAogICAgV2l0aG91dCBhcmd1bWVudHMsIGBhbGlhcycgcHJpbnRzIHRoZSBsaXN0IG9mIGFsaWFzZXMgaW4gdGhlIHJldXNhYmxlCiAgICBmb3JtIGBhbGlhcyBOQU1FPVZBTFVFJyBvbiBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE90aGVyd2lzZSwgYW4gYWxpYXMgaXMgZGVmaW5lZCBmb3IgZWFjaCBOQU1FIHdob3NlIFZBTFVFIGlzIGdpdmVuLgogICAgQSB0cmFpbGluZyBzcGFjZSBpbiBWQUxVRSBjYXVzZXMgdGhlIG5leHQgd29yZCB0byBiZSBjaGVja2VkIGZvcgogICAgYWxpYXMgc3Vic3RpdHV0aW9uIHdoZW4gdGhlIGFsaWFzIGlzIGV4cGFuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlwcmludCBhbGwgZGVmaW5lZCBhbGlhc2VzIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYWxpYXMgcmV0dXJucyB0cnVlIHVubGVzcyBhIE5BTUUgaXMgc3VwcGxpZWQgZm9yIHdoaWNoIG5vIGFsaWFzIGhhcyBiZWVuCiAgICBkZWZpbmVkLgBEZWZpbmUgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENyZWF0ZSBhIHNoZWxsIGZ1bmN0aW9uIG5hbWVkIE5BTUUuICBXaGVuIGludm9rZWQgYXMgYSBzaW1wbGUgY29tbWFuZCwKICAgIE5BTUUgcnVucyBDT01NQU5EcyBpbiB0aGUgY2FsbGluZyBzaGVsbCdzIGNvbnRleHQuICBXaGVuIE5BTUUgaXMgaW52b2tlZCwKICAgIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gYXMgJDEuLi4kbiwgYW5kIHRoZSBmdW5jdGlvbidzCiAgICBuYW1lIGlzIGluICRGVU5DTkFNRS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgcmVhZG9ubHkuAERpc3BsYXkgZGlyZWN0b3J5IHN0YWNrLgogICAgCiAgICBEaXNwbGF5IHRoZSBsaXN0IG9mIGN1cnJlbnRseSByZW1lbWJlcmVkIGRpcmVjdG9yaWVzLiAgRGlyZWN0b3JpZXMKICAgIGZpbmQgdGhlaXIgd2F5IG9udG8gdGhlIGxpc3Qgd2l0aCB0aGUgYHB1c2hkJyBjb21tYW5kOyB5b3UgY2FuIGdldAogICAgYmFjayB1cCB0aHJvdWdoIHRoZSBsaXN0IHdpdGggdGhlIGBwb3BkJyBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJCXRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKICAgICAgLXAJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZQogICAgICAtdglwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lIHByZWZpeGVkCiAgICAJCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJCXNob3duIGJ5IGRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aAogICAgCQl6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0aW4gY29tbWFuZHMuCiAgICAKICAgIERpc3BsYXlzIGJyaWVmIHN1bW1hcmllcyBvZiBidWlsdGluIGNvbW1hbmRzLiAgSWYgUEFUVEVSTiBpcwogICAgc3BlY2lmaWVkLCBnaXZlcyBkZXRhaWxlZCBoZWxwIG9uIGFsbCBjb21tYW5kcyBtYXRjaGluZyBQQVRURVJOLAogICAgb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIGhlbHAgdG9waWNzIGlzIHByaW50ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1kCW91dHB1dCBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0b3BpYwogICAgICAtbQlkaXNwbGF5IHVzYWdlIGluIHBzZXVkby1tYW5wYWdlIGZvcm1hdAogICAgICAtcwlvdXRwdXQgb25seSBhIHNob3J0IHVzYWdlIHN5bm9wc2lzIGZvciBlYWNoIHRvcGljIG1hdGNoaW5nCiAgICAJCVBBVFRFUk4KICAgIAogICAgQXJndW1lbnRzOgogICAgICBQQVRURVJOCVBhdHRlcm4gc3BlY2lmaXlpbmcgYSBoZWxwIHRvcGljCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBQQVRURVJOIGlzIG5vdCBmb3VuZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4ARGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kIHR5cGUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIGluZGljYXRlIGhvdyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBpZiB1c2VkIGFzIGEKICAgIGNvbW1hbmQgbmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJZGlzcGxheSBhbGwgbG9jYXRpb25zIGNvbnRhaW5pbmcgYW4gZXhlY3V0YWJsZSBuYW1lZCBOQU1FOwogICAgCQlpbmNsdWRlcyBhbGlhc2VzLCBidWlsdGlucywgYW5kIGZ1bmN0aW9ucywgaWYgYW5kIG9ubHkgaWYKICAgIAkJdGhlIGAtcCcgb3B0aW9uIGlzIG5vdCBhbHNvIHVzZWQKICAgICAgLWYJc3VwcHJlc3Mgc2hlbGwgZnVuY3Rpb24gbG9va3VwCiAgICAgIC1QCWZvcmNlIGEgUEFUSCBzZWFyY2ggZm9yIGVhY2ggTkFNRSwgZXZlbiBpZiBpdCBpcyBhbiBhbGlhcywKICAgIAkJYnVpbHRpbiwgb3IgZnVuY3Rpb24sIGFuZCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBkaXNrIGZpbGUKICAgIAkJdGhhdCB3b3VsZCBiZSBleGVjdXRlZAogICAgICAtcAlyZXR1cm5zIGVpdGhlciB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQsCiAgICAJCW9yIG5vdGhpbmcgaWYgYHR5cGUgLXQgTkFNRScgd291bGQgbm90IHJldHVybiBgZmlsZScKICAgICAgLXQJb3V0cHV0IGEgc2luZ2xlIHdvcmQgd2hpY2ggaXMgb25lIG9mIGBhbGlhcycsIGBrZXl3b3JkJywKICAgIAkJYGZ1bmN0aW9uJywgYGJ1aWx0aW4nLCBgZmlsZScgb3IgYCcsIGlmIE5BTUUgaXMgYW4gYWxpYXMsCiAgICAJCXNoZWxsIHJlc2VydmVkIHdvcmQsIHNoZWxsIGZ1bmN0aW9uLCBzaGVsbCBidWlsdGluLCBkaXNrIGZpbGUsCiAgICAJCW9yIG5vdCBmb3VuZCwgcmVzcGVjdGl2ZWx5CiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQlDb21tYW5kIG5hbWUgdG8gYmUgaW50ZXJwcmV0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFsbCBvZiB0aGUgTkFNRXMgYXJlIGZvdW5kOyBmYWlscyBpZiBhbnkgYXJlIG5vdCBmb3VuZC4ARGlzcGxheSBvciBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgZmMgaXMgdXNlZCB0byBsaXN0IG9yIGVkaXQgYW5kIHJlLWV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgaGlzdG9yeSBsaXN0LgogICAgRklSU1QgYW5kIExBU1QgY2FuIGJlIG51bWJlcnMgc3BlY2lmeWluZyB0aGUgcmFuZ2UsIG9yIEZJUlNUIGNhbiBiZSBhCiAgICBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGJlZ2lubmluZyB3aXRoIHRoYXQKICAgIHN0cmluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWUgRU5BTUUJc2VsZWN0IHdoaWNoIGVkaXRvciB0byB1c2UuICBEZWZhdWx0IGlzIEZDRURJVCwgdGhlbiBFRElUT1IsCiAgICAJCXRoZW4gdmkKICAgICAgLWwgCWxpc3QgbGluZXMgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgIC1uCW9taXQgbGluZSBudW1iZXJzIHdoZW4gbGlzdGluZwogICAgICAtcglyZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgKG5ld2VzdCBsaXN0ZWQgZmlyc3QpCiAgICAKICAgIFdpdGggdGhlIGBmYyAtcyBbcGF0PXJlcCAuLi5dIFtjb21tYW5kXScgZm9ybWF0LCBDT01NQU5EIGlzCiAgICByZS1leGVjdXRlZCBhZnRlciB0aGUgc3Vic3RpdHV0aW9uIE9MRD1ORVcgaXMgcGVyZm9ybWVkLgogICAgCiAgICBBIHVzZWZ1bCBhbGlhcyB0byB1c2Ugd2l0aCB0aGlzIGlzIHI9J2ZjIC1zJywgc28gdGhhdCB0eXBpbmcgYHIgY2MnCiAgICBydW5zIHRoZSBsYXN0IGNvbW1hbmQgYmVnaW5uaW5nIHdpdGggYGNjJyBhbmQgdHlwaW5nIGByJyByZS1leGVjdXRlcwogICAgdGhlIGxhc3QgY29tbWFuZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3Mgb3Igc3RhdHVzIG9mIGV4ZWN1dGVkIGNvbW1hbmQ7IG5vbi16ZXJvIGlmIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBtYW5pcHVsYXRlIHRoZSBoaXN0b3J5IGxpc3QuCiAgICAKICAgIERpc3BsYXkgdGhlIGhpc3RvcnkgbGlzdCB3aXRoIGxpbmUgbnVtYmVycywgcHJlZml4aW5nIGVhY2ggbW9kaWZpZWQKICAgIGVudHJ5IHdpdGggYSBgKicuICBBbiBhcmd1bWVudCBvZiBOIGxpc3RzIG9ubHkgdGhlIGxhc3QgTiBlbnRyaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgaGlzdG9yeSBsaXN0IGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZW50cmllcwogICAgICAtZCBvZmZzZXQJZGVsZXRlIHRoZSBoaXN0b3J5IGVudHJ5IGF0IHBvc2l0aW9uIE9GRlNFVC4KICAgIAogICAgICAtYQlhcHBlbmQgaGlzdG9yeSBsaW5lcyBmcm9tIHRoaXMgc2Vzc2lvbiB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAgIC1uCXJlYWQgYWxsIGhpc3RvcnkgbGluZXMgbm90IGFscmVhZHkgcmVhZCBmcm9tIHRoZSBoaXN0b3J5IGZpbGUKICAgIAkJYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBoaXN0b3J5IGxpc3QKICAgICAgLXIJcmVhZCB0aGUgaGlzdG9yeSBmaWxlIGFuZCBhcHBlbmQgdGhlIGNvbnRlbnRzIHRvIHRoZSBoaXN0b3J5CiAgICAJCWxpc3QKICAgICAgLXcJd3JpdGUgdGhlIGN1cnJlbnQgaGlzdG9yeSB0byB0aGUgaGlzdG9yeSBmaWxlCiAgICAKICAgICAgLXAJcGVyZm9ybSBoaXN0b3J5IGV4cGFuc2lvbiBvbiBlYWNoIEFSRyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0CiAgICAJCXdpdGhvdXQgc3RvcmluZyBpdCBpbiB0aGUgaGlzdG9yeSBsaXN0CiAgICAgIC1zCWFwcGVuZCB0aGUgQVJHcyB0byB0aGUgaGlzdG9yeSBsaXN0IGFzIGEgc2luZ2xlIGVudHJ5CiAgICAKICAgIElmIEZJTEVOQU1FIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBoaXN0b3J5IGZpbGUuICBPdGhlcndpc2UsCiAgICBpZiBISVNURklMRSBoYXMgYSB2YWx1ZSwgdGhhdCBpcyB1c2VkLCBlbHNlIH4vLmJhc2hfaGlzdG9yeS4KICAgIAogICAgSWYgdGhlIEhJU1RUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHNldCBhbmQgbm90IG51bGwsIGl0cyB2YWx1ZSBpcyB1c2VkCiAgICBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpIHRvIHByaW50IHRoZSB0aW1lIHN0YW1wIGFzc29jaWF0ZWQKICAgIHdpdGggZWFjaCBkaXNwbGF5ZWQgaGlzdG9yeSBlbnRyeS4gIE5vIHRpbWUgc3RhbXBzIGFyZSBwcmludGVkIG90aGVyd2lzZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBvciBzZXQgZmlsZSBtb2RlIG1hc2suCiAgICAKICAgIFNldHMgdGhlIHVzZXIgZmlsZS1jcmVhdGlvbiBtYXNrIHRvIE1PREUuICBJZiBNT0RFIGlzIG9taXR0ZWQsIHByaW50cwogICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2suCiAgICAKICAgIElmIE1PREUgYmVnaW5zIHdpdGggYSBkaWdpdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gb2N0YWwgbnVtYmVyOwogICAgb3RoZXJ3aXNlIGl0IGlzIGEgc3ltYm9saWMgbW9kZSBzdHJpbmcgbGlrZSB0aGF0IGFjY2VwdGVkIGJ5IGNobW9kKDEpLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcAlpZiBNT0RFIGlzIG9taXR0ZWQsIG91dHB1dCBpbiBhIGZvcm0gdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1TCW1ha2VzIHRoZSBvdXRwdXQgc3ltYm9saWM7IG90aGVyd2lzZSBhbiBvY3RhbCBudW1iZXIgaXMgb3V0cHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBNT0RFIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAERpc3BsYXkgcG9zc2libGUgY29tcGxldGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zLgogICAgCiAgICBJbnRlbmRlZCB0byBiZSB1c2VkIGZyb20gd2l0aGluIGEgc2hlbGwgZnVuY3Rpb24gZ2VuZXJhdGluZyBwb3NzaWJsZQogICAgY29tcGxldGlvbnMuICBJZiB0aGUgb3B0aW9uYWwgV09SRCBhcmd1bWVudCBpcyBzdXBwbGllZCwgbWF0Y2hlcyBhZ2FpbnN0CiAgICBXT1JEIGFyZSBnZW5lcmF0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgcHJvY2VzcyB0aW1lcy4KICAgIAogICAgUHJpbnRzIHRoZSBhY2N1bXVsYXRlZCB1c2VyIGFuZCBzeXN0ZW0gdGltZXMgZm9yIHRoZSBzaGVsbCBhbmQgYWxsIG9mIGl0cwogICAgY2hpbGQgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIEFsd2F5cyBzdWNjZWVkcy4ARGlzcGxheSBzdGF0dXMgb2Ygam9icy4KICAgIAogICAgTGlzdHMgdGhlIGFjdGl2ZSBqb2JzLiAgSk9CU1BFQyByZXN0cmljdHMgb3V0cHV0IHRvIHRoYXQgam9iLgogICAgV2l0aG91dCBvcHRpb25zLCB0aGUgc3RhdHVzIG9mIGFsbCBhY3RpdmUgam9icyBpcyBkaXNwbGF5ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1sCWxpc3RzIHByb2Nlc3MgSURzIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaW5mb3JtYXRpb24KICAgICAgLW4JbGlzdHMgb25seSBwcm9jZXNzZXMgdGhhdCBoYXZlIGNoYW5nZWQgc3RhdHVzIHNpbmNlIHRoZSBsYXN0CiAgICAJCW5vdGlmaWNhdGlvbgogICAgICAtcAlsaXN0cyBwcm9jZXNzIElEcyBvbmx5CiAgICAgIC1yCXJlc3RyaWN0IG91dHB1dCB0byBydW5uaW5nIGpvYnMKICAgICAgLXMJcmVzdHJpY3Qgb3V0cHV0IHRvIHN0b3BwZWQgam9icwogICAgCiAgICBJZiAteCBpcyBzdXBwbGllZCwgQ09NTUFORCBpcyBydW4gYWZ0ZXIgYWxsIGpvYiBzcGVjaWZpY2F0aW9ucyB0aGF0CiAgICBhcHBlYXIgaW4gQVJHUyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUgcHJvY2VzcyBJRCBvZiB0aGF0IGpvYidzCiAgICBwcm9jZXNzIGdyb3VwIGxlYWRlci4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4KICAgIElmIC14IGlzIHVzZWQsIHJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQuAERpc3BsYXkgdGhlIGxpc3Qgb2YgY3VycmVudGx5IHJlbWVtYmVyZWQgZGlyZWN0b3JpZXMuICBEaXJlY3RvcmllcwogICAgZmluZCB0aGVpciB3YXkgb250byB0aGUgbGlzdCB3aXRoIHRoZSBgcHVzaGQnIGNvbW1hbmQ7IHlvdSBjYW4gZ2V0CiAgICBiYWNrIHVwIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUgYHBvcGQnIGNvbW1hbmQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1jCWNsZWFyIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYnkgZGVsZXRpbmcgYWxsIG9mIHRoZSBlbGVtZW50cwogICAgICAtbAlkbyBub3QgcHJpbnQgdGlsZGUtcHJlZml4ZWQgdmVyc2lvbnMgb2YgZGlyZWN0b3JpZXMgcmVsYXRpdmUKICAgIAl0byB5b3VyIGhvbWUgZGlyZWN0b3J5CiAgICAgIC1wCXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUKICAgICAgLXYJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZSBwcmVmaXhlZAogICAgCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdCBzaG93biBieQogICAgCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgogICAgCiAgICAgIC1OCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKCWRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCB6ZXJvLgBEb25lAERvbmUoJWQpAEVNVCBpbnN0cnVjdGlvbgBFbmFibGUgYW5kIGRpc2FibGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEVuYWJsZXMgYW5kIGRpc2FibGVzIGJ1aWx0aW4gc2hlbGwgY29tbWFuZHMuICBEaXNhYmxpbmcgYWxsb3dzIHlvdSB0bwogICAgZXhlY3V0ZSBhIGRpc2sgY29tbWFuZCB3aGljaCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHNoZWxsIGJ1aWx0aW4KICAgIHdpdGhvdXQgdXNpbmcgYSBmdWxsIHBhdGhuYW1lLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlwcmludCBhIGxpc3Qgb2YgYnVpbHRpbnMgc2hvd2luZyB3aGV0aGVyIG9yIG5vdCBlYWNoIGlzIGVuYWJsZWQKICAgICAgLW4JZGlzYWJsZSBlYWNoIE5BTUUgb3IgZGlzcGxheSBhIGxpc3Qgb2YgZGlzYWJsZWQgYnVpbHRpbnMKICAgICAgLXAJcHJpbnQgdGhlIGxpc3Qgb2YgYnVpbHRpbnMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgICAgLXMJcHJpbnQgb25seSB0aGUgbmFtZXMgb2YgUG9zaXggYHNwZWNpYWwnIGJ1aWx0aW5zCiAgICAKICAgIE9wdGlvbnMgY29udHJvbGxpbmcgZHluYW1pYyBsb2FkaW5nOgogICAgICAtZglMb2FkIGJ1aWx0aW4gTkFNRSBmcm9tIHNoYXJlZCBvYmplY3QgRklMRU5BTUUKICAgICAgLWQJUmVtb3ZlIGEgYnVpbHRpbiBsb2FkZWQgd2l0aCAtZgogICAgCiAgICBXaXRob3V0IG9wdGlvbnMsIGVhY2ggTkFNRSBpcyBlbmFibGVkLgogICAgCiAgICBUbyB1c2UgdGhlIGB0ZXN0JyBmb3VuZCBpbiAkUEFUSCBpbnN0ZWFkIG9mIHRoZSBzaGVsbCBidWlsdGluCiAgICB2ZXJzaW9uLCB0eXBlIGBlbmFibGUgLW4gdGVzdCcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOQU1FIGlzIG5vdCBhIHNoZWxsIGJ1aWx0aW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSBFWFBSRVNTSU9OIGlzIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciBhcml0aG1ldGljCiAgICBldmFsdWF0aW9uLiAgRXF1aXZhbGVudCB0byAibGV0IEVYUFJFU1NJT04iLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMSBpZiBFWFBSRVNTSU9OIGV2YWx1YXRlcyB0byAwOyByZXR1cm5zIDAgb3RoZXJ3aXNlLgBFdmFsdWF0ZSBhcml0aG1ldGljIGV4cHJlc3Npb25zLgogICAgCiAgICBFdmFsdWF0ZSBlYWNoIEFSRyBhcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24uICBFdmFsdWF0aW9uIGlzIGRvbmUgaW4KICAgIGZpeGVkLXdpZHRoIGludGVnZXJzIHdpdGggbm8gY2hlY2sgZm9yIG92ZXJmbG93LCB0aG91Z2ggZGl2aXNpb24gYnkgMAogICAgaXMgdHJhcHBlZCBhbmQgZmxhZ2dlZCBhcyBhbiBlcnJvci4gIFRoZSBmb2xsb3dpbmcgbGlzdCBvZiBvcGVyYXRvcnMgaXMKICAgIGdyb3VwZWQgaW50byBsZXZlbHMgb2YgZXF1YWwtcHJlY2VkZW5jZSBvcGVyYXRvcnMuICBUaGUgbGV2ZWxzIGFyZSBsaXN0ZWQKICAgIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcgcHJlY2VkZW5jZS4KICAgIAogICAgCWlkKyssIGlkLS0JdmFyaWFibGUgcG9zdC1pbmNyZW1lbnQsIHBvc3QtZGVjcmVtZW50CiAgICAJKytpZCwgLS1pZAl2YXJpYWJsZSBwcmUtaW5jcmVtZW50LCBwcmUtZGVjcmVtZW50CiAgICAJLSwgKwkJdW5hcnkgbWludXMsIHBsdXMKICAgIAkhLCB+CQlsb2dpY2FsIGFuZCBiaXR3aXNlIG5lZ2F0aW9uCiAgICAJKioJCWV4cG9uZW50aWF0aW9uCiAgICAJKiwgLywgJQkJbXVsdGlwbGljYXRpb24sIGRpdmlzaW9uLCByZW1haW5kZXIKICAgIAkrLCAtCQlhZGRpdGlvbiwgc3VidHJhY3Rpb24KICAgIAk8PCwgPj4JCWxlZnQgYW5kIHJpZ2h0IGJpdHdpc2Ugc2hpZnRzCiAgICAJPD0sID49LCA8LCA+CWNvbXBhcmlzb24KICAgIAk9PSwgIT0JCWVxdWFsaXR5LCBpbmVxdWFsaXR5CiAgICAJJgkJYml0d2lzZSBBTkQKICAgIAleCQliaXR3aXNlIFhPUgogICAgCXwJCWJpdHdpc2UgT1IKICAgIAkmJgkJbG9naWNhbCBBTkQKICAgIAl8fAkJbG9naWNhbCBPUgogICAgCWV4cHIgPyBleHByIDogZXhwcgogICAgCQkJY29uZGl0aW9uYWwgb3BlcmF0b3IKICAgIAk9LCAqPSwgLz0sICU9LAogICAgCSs9LCAtPSwgPDw9LCA+Pj0sCiAgICAJJj0sIF49LCB8PQlhc3NpZ25tZW50CiAgICAKICAgIFNoZWxsIHZhcmlhYmxlcyBhcmUgYWxsb3dlZCBhcyBvcGVyYW5kcy4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZQogICAgaXMgcmVwbGFjZWQgYnkgaXRzIHZhbHVlIChjb2VyY2VkIHRvIGEgZml4ZWQtd2lkdGggaW50ZWdlcikgd2l0aGluCiAgICBhbiBleHByZXNzaW9uLiAgVGhlIHZhcmlhYmxlIG5lZWQgbm90IGhhdmUgaXRzIGludGVnZXIgYXR0cmlidXRlCiAgICB0dXJuZWQgb24gdG8gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLgogICAgCiAgICBPcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlLiAgU3ViLWV4cHJlc3Npb25zIGluCiAgICBwYXJlbnRoZXNlcyBhcmUgZXZhbHVhdGVkIGZpcnN0IGFuZCBtYXkgb3ZlcnJpZGUgdGhlIHByZWNlZGVuY2UKICAgIHJ1bGVzIGFib3ZlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIElmIHRoZSBsYXN0IEFSRyBldmFsdWF0ZXMgdG8gMCwgbGV0IHJldHVybnMgMTsgbGV0IHJldHVybnMgMCBvdGhlcndpc2UuAEV2YWx1YXRlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgICAKICAgIEV4aXRzIHdpdGggYSBzdGF0dXMgb2YgMCAodHJ1ZSkgb3IgMSAoZmFsc2UpIGRlcGVuZGluZyBvbgogICAgdGhlIGV2YWx1YXRpb24gb2YgRVhQUi4gIEV4cHJlc3Npb25zIG1heSBiZSB1bmFyeSBvciBiaW5hcnkuICBVbmFyeQogICAgZXhwcmVzc2lvbnMgYXJlIG9mdGVuIHVzZWQgdG8gZXhhbWluZSB0aGUgc3RhdHVzIG9mIGEgZmlsZS4gIFRoZXJlCiAgICBhcmUgc3RyaW5nIG9wZXJhdG9ycyBhbmQgbnVtZXJpYyBjb21wYXJpc29uIG9wZXJhdG9ycyBhcyB3ZWxsLgogICAgCiAgICBUaGUgYmVoYXZpb3Igb2YgdGVzdCBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiAgUmVhZCB0aGUKICAgIGJhc2ggbWFudWFsIHBhZ2UgZm9yIHRoZSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBGaWxlIG9wZXJhdG9yczoKICAgIAogICAgICAtYSBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzLgogICAgICAtYiBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYmxvY2sgc3BlY2lhbC4KICAgICAgLWMgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGlzIGNoYXJhY3RlciBzcGVjaWFsLgogICAgICAtZCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBkaXJlY3RvcnkuCiAgICAgIC1lIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMuCiAgICAgIC1mIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlLgogICAgICAtZyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgc2V0LWdyb3VwLWlkLgogICAgICAtaCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtTCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogICAgICAtayBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaGFzIGl0cyBgc3RpY2t5JyBiaXQgc2V0LgogICAgICAtcCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBuYW1lZCBwaXBlLgogICAgICAtciBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgcmVhZGFibGUgYnkgeW91LgogICAgICAtcyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuCiAgICAgIC1TIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHNvY2tldC4KICAgICAgLXQgRkQgICAgICAgICAgVHJ1ZSBpZiBGRCBpcyBvcGVuZWQgb24gYSB0ZXJtaW5hbC4KICAgICAgLXUgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBzZXQtdXNlci1pZC4KICAgICAgLXcgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyB3cml0YWJsZSBieSB5b3UuCiAgICAgIC14IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZSBieSB5b3UuCiAgICAgIC1PIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZWZmZWN0aXZlbHkgb3duZWQgYnkgeW91LgogICAgICAtRyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHlvdXIgZ3JvdXAuCiAgICAgIC1OIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgaXQgd2FzIGxhc3QgcmVhZC4KICAgIAogICAgICBGSUxFMSAtbnQgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgbmV3ZXIgdGhhbiBmaWxlMiAoYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIGRhdGUpLgogICAgCiAgICAgIEZJTEUxIC1vdCBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBvbGRlciB0aGFuIGZpbGUyLgogICAgCiAgICAgIEZJTEUxIC1lZiBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBhIGhhcmQgbGluayB0byBmaWxlMi4KICAgIAogICAgU3RyaW5nIG9wZXJhdG9yczoKICAgIAogICAgICAteiBTVFJJTkcgICAgICBUcnVlIGlmIHN0cmluZyBpcyBlbXB0eS4KICAgIAogICAgICAtbiBTVFJJTkcKICAgICAgICAgU1RSSU5HICAgICAgVHJ1ZSBpZiBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAgCiAgICAgIFNUUklORzEgPSBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIHN0cmluZ3MgYXJlIGVxdWFsLgogICAgICBTVFJJTkcxICE9IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3RyaW5ncyBhcmUgbm90IGVxdWFsLgogICAgICBTVFJJTkcxIDwgU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIFNUUklORzEgc29ydHMgYmVmb3JlIFNUUklORzIgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgICAgIFNUUklORzEgPiBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgU1RSSU5HMSBzb3J0cyBhZnRlciBTVFJJTkcyIGxleGljb2dyYXBoaWNhbGx5LgogICAgCiAgICBPdGhlciBvcGVyYXRvcnM6CiAgICAKICAgICAgLW8gT1BUSU9OICAgICAgVHJ1ZSBpZiB0aGUgc2hlbGwgb3B0aW9uIE9QVElPTiBpcyBlbmFibGVkLgogICAgICAtdiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0LgogICAgICAtUiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0IGFuZCBpcyBhIG5hbWUKICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLgogICAgICAhIEVYUFIgICAgICAgICBUcnVlIGlmIGV4cHIgaXMgZmFsc2UuCiAgICAgIEVYUFIxIC1hIEVYUFIyIFRydWUgaWYgYm90aCBleHByMSBBTkQgZXhwcjIgYXJlIHRydWUuCiAgICAgIEVYUFIxIC1vIEVYUFIyIFRydWUgaWYgZWl0aGVyIGV4cHIxIE9SIGV4cHIyIGlzIHRydWUuCiAgICAKICAgICAgYXJnMSBPUCBhcmcyICAgQXJpdGhtZXRpYyB0ZXN0cy4gIE9QIGlzIG9uZSBvZiAtZXEsIC1uZSwKICAgICAgICAgICAgICAgICAgICAgLWx0LCAtbGUsIC1ndCwgb3IgLWdlLgogICAgCiAgICBBcml0aG1ldGljIGJpbmFyeSBvcGVyYXRvcnMgcmV0dXJuIHRydWUgaWYgQVJHMSBpcyBlcXVhbCwgbm90LWVxdWFsLAogICAgbGVzcy10aGFuLCBsZXNzLXRoYW4tb3ItZXF1YWwsIGdyZWF0ZXItdGhhbiwgb3IgZ3JlYXRlci10aGFuLW9yLWVxdWFsCiAgICB0aGFuIEFSRzIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIEVYUFIgZXZhbHVhdGVzIHRvIHRydWU7IGZhaWxzIGlmIEVYUFIgZXZhbHVhdGVzIHRvCiAgICBmYWxzZSBvciBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIGdpdmVuLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlICJ0ZXN0IiBidWlsdGluLCBidXQgdGhlIGxhc3QgYXJndW1lbnQgbXVzdAogICAgYmUgYSBsaXRlcmFsIGBdJywgdG8gbWF0Y2ggdGhlIG9wZW5pbmcgYFsnLgBFeGVjdXRlIGEgc2ltcGxlIGNvbW1hbmQgb3IgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kcy4KICAgIAogICAgUnVucyBDT01NQU5EIHdpdGggQVJHUyBzdXBwcmVzc2luZyAgc2hlbGwgZnVuY3Rpb24gbG9va3VwLCBvciBkaXNwbGF5CiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIENPTU1BTkRzLiAgQ2FuIGJlIHVzZWQgdG8gaW52b2tlIGNvbW1hbmRzCiAgICBvbiBkaXNrIHdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcCAgICB1c2UgYSBkZWZhdWx0IHZhbHVlIGZvciBQQVRIIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBvZgogICAgICAgICAgICB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzCiAgICAgIC12ICAgIHByaW50IGEgZGVzY3JpcHRpb24gb2YgQ09NTUFORCBzaW1pbGFyIHRvIHRoZSBgdHlwZScgYnVpbHRpbgogICAgICAtViAgICBwcmludCBhIG1vcmUgdmVyYm9zZSBkZXNjcmlwdGlvbiBvZiBlYWNoIENPTU1BTkQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIENPTU1BTkQsIG9yIGZhaWx1cmUgaWYgQ09NTUFORCBpcyBub3QgZm91bmQuAEV4ZWN1dGUgYXJndW1lbnRzIGFzIGEgc2hlbGwgY29tbWFuZC4KICAgIAogICAgQ29tYmluZSBBUkdzIGludG8gYSBzaW5nbGUgc3RyaW5nLCB1c2UgdGhlIHJlc3VsdCBhcyBpbnB1dCB0byB0aGUgc2hlbGwsCiAgICBhbmQgZXhlY3V0ZSB0aGUgcmVzdWx0aW5nIGNvbW1hbmRzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgZXhpdCBzdGF0dXMgb2YgY29tbWFuZCBvciBzdWNjZXNzIGlmIGNvbW1hbmQgaXMgbnVsbC4ARXhlY3V0ZSBjb21tYW5kcyBhcyBsb25nIGFzIGEgdGVzdCBkb2VzIG5vdCBzdWNjZWVkLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIGB1bnRpbCcgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIHdoaWNoIGlzIG5vdCB6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGFzIGxvbmcgYXMgYSB0ZXN0IHN1Y2NlZWRzLgogICAgCiAgICBFeHBhbmQgYW5kIGV4ZWN1dGUgQ09NTUFORFMgYXMgbG9uZyBhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUKICAgIGB3aGlsZScgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIG9mIHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYmFzZWQgb24gY29uZGl0aW9uYWwuCiAgICAKICAgIFRoZSBgaWYgQ09NTUFORFMnIGxpc3QgaXMgZXhlY3V0ZWQuICBJZiBpdHMgZXhpdCBzdGF0dXMgaXMgemVybywgdGhlbiB0aGUKICAgIGB0aGVuIENPTU1BTkRTJyBsaXN0IGlzIGV4ZWN1dGVkLiAgT3RoZXJ3aXNlLCBlYWNoIGBlbGlmIENPTU1BTkRTJyBsaXN0IGlzCiAgICBleGVjdXRlZCBpbiB0dXJuLCBhbmQgaWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nCiAgICBgdGhlbiBDT01NQU5EUycgbGlzdCBpcyBleGVjdXRlZCBhbmQgdGhlIGlmIGNvbW1hbmQgY29tcGxldGVzLiAgT3RoZXJ3aXNlLAogICAgdGhlIGBlbHNlIENPTU1BTkRTJyBsaXN0IGlzIGV4ZWN1dGVkLCBpZiBwcmVzZW50LiAgVGhlIGV4aXQgc3RhdHVzIG9mIHRoZQogICAgZW50aXJlIGNvbnN0cnVjdCBpcyB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZCwgb3IgemVybwogICAgaWYgbm8gY29uZGl0aW9uIHRlc3RlZCB0cnVlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGJhc2VkIG9uIHBhdHRlcm4gbWF0Y2hpbmcuCiAgICAKICAgIFNlbGVjdGl2ZWx5IGV4ZWN1dGUgQ09NTUFORFMgYmFzZWQgdXBvbiBXT1JEIG1hdGNoaW5nIFBBVFRFUk4uICBUaGUKICAgIGB8JyBpcyB1c2VkIHRvIHNlcGFyYXRlIG11bHRpcGxlIHBhdHRlcm5zLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhIGxpc3QuCiAgICAKICAgIFRoZSBgZm9yJyBsb29wIGV4ZWN1dGVzIGEgc2VxdWVuY2Ugb2YgY29tbWFuZHMgZm9yIGVhY2ggbWVtYmVyIGluIGEKICAgIGxpc3Qgb2YgaXRlbXMuICBJZiBgaW4gV09SRFMgLi4uOycgaXMgbm90IHByZXNlbnQsIHRoZW4gYGluICIkQCInIGlzCiAgICBhc3N1bWVkLiAgRm9yIGVhY2ggZWxlbWVudCBpbiBXT1JEUywgTkFNRSBpcyBzZXQgdG8gdGhhdCBlbGVtZW50LCBhbmQKICAgIHRoZSBDT01NQU5EUyBhcmUgZXhlY3V0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuCiAgICAKICAgIFJlYWQgYW5kIGV4ZWN1dGUgY29tbWFuZHMgZnJvbSBGSUxFTkFNRSBpbiB0aGUgY3VycmVudCBzaGVsbC4gIFRoZQogICAgZW50cmllcyBpbiAkUEFUSCBhcmUgdXNlZCB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFTkFNRS4KICAgIElmIGFueSBBUkdVTUVOVFMgYXJlIHN1cHBsaWVkLCB0aGV5IGJlY29tZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICB3aGVuIEZJTEVOQU1FIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkIGluIEZJTEVOQU1FOyBmYWlscyBpZgogICAgRklMRU5BTUUgY2Fubm90IGJlIHJlYWQuAEV4ZWN1dGUgY29uZGl0aW9uYWwgY29tbWFuZC4KICAgIAogICAgUmV0dXJucyBhIHN0YXR1cyBvZiAwIG9yIDEgZGVwZW5kaW5nIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb25kaXRpb25hbAogICAgZXhwcmVzc2lvbiBFWFBSRVNTSU9OLiAgRXhwcmVzc2lvbnMgYXJlIGNvbXBvc2VkIG9mIHRoZSBzYW1lIHByaW1hcmllcyB1c2VkCiAgICBieSB0aGUgYHRlc3QnIGJ1aWx0aW4sIGFuZCBtYXkgYmUgY29tYmluZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRvcnM6CiAgICAKICAgICAgKCBFWFBSRVNTSU9OICkJUmV0dXJucyB0aGUgdmFsdWUgb2YgRVhQUkVTU0lPTgogICAgICAhIEVYUFJFU1NJT04JCVRydWUgaWYgRVhQUkVTU0lPTiBpcyBmYWxzZTsgZWxzZSBmYWxzZQogICAgICBFWFBSMSAmJiBFWFBSMglUcnVlIGlmIGJvdGggRVhQUjEgYW5kIEVYUFIyIGFyZSB0cnVlOyBlbHNlIGZhbHNlCiAgICAgIEVYUFIxIHx8IEVYUFIyCVRydWUgaWYgZWl0aGVyIEVYUFIxIG9yIEVYUFIyIGlzIHRydWU7IGVsc2UgZmFsc2UKICAgIAogICAgV2hlbiB0aGUgYD09JyBhbmQgYCE9JyBvcGVyYXRvcnMgYXJlIHVzZWQsIHRoZSBzdHJpbmcgdG8gdGhlIHJpZ2h0IG9mCiAgICB0aGUgb3BlcmF0b3IgaXMgdXNlZCBhcyBhIHBhdHRlcm4gYW5kIHBhdHRlcm4gbWF0Y2hpbmcgaXMgcGVyZm9ybWVkLgogICAgV2hlbiB0aGUgYD1+JyBvcGVyYXRvciBpcyB1c2VkLCB0aGUgc3RyaW5nIHRvIHRoZSByaWdodCBvZiB0aGUgb3BlcmF0b3IKICAgIGlzIG1hdGNoZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAKICAgIFRoZSAmJiBhbmQgfHwgb3BlcmF0b3JzIGRvIG5vdCBldmFsdWF0ZSBFWFBSMiBpZiBFWFBSMSBpcyBzdWZmaWNpZW50IHRvCiAgICBkZXRlcm1pbmUgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICAwIG9yIDEgZGVwZW5kaW5nIG9uIHZhbHVlIG9mIEVYUFJFU1NJT04uAEV4ZWN1dGUgc2hlbGwgYnVpbHRpbnMuCiAgICAKICAgIEV4ZWN1dGUgU0hFTEwtQlVJTFRJTiB3aXRoIGFyZ3VtZW50cyBBUkdzIHdpdGhvdXQgcGVyZm9ybWluZyBjb21tYW5kCiAgICBsb29rdXAuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIHJlaW1wbGVtZW50IGEgc2hlbGwgYnVpbHRpbgogICAgYXMgYSBzaGVsbCBmdW5jdGlvbiwgYnV0IG5lZWQgdG8gZXhlY3V0ZSB0aGUgYnVpbHRpbiB3aXRoaW4gdGhlIGZ1bmN0aW9uLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIGV4aXQgc3RhdHVzIG9mIFNIRUxMLUJVSUxUSU4sIG9yIGZhbHNlIGlmIFNIRUxMLUJVSUxUSU4gaXMKICAgIG5vdCBhIHNoZWxsIGJ1aWx0aW4uLgBFeGl0ICVkAEV4aXQgYSBsb2dpbiBzaGVsbC4KICAgIAogICAgRXhpdHMgYSBsb2dpbiBzaGVsbCB3aXRoIGV4aXQgc3RhdHVzIE4uICBSZXR1cm5zIGFuIGVycm9yIGlmIG5vdCBleGVjdXRlZAogICAgaW4gYSBsb2dpbiBzaGVsbC4ARXhpdCBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgRXhpdCBhIEZPUiwgV0hJTEUgb3IgVU5USUwgbG9vcC4gIElmIE4gaXMgc3BlY2lmaWVkLCBicmVhayBOIGVuY2xvc2luZwogICAgbG9vcHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIGV4aXQgc3RhdHVzIGlzIDAgdW5sZXNzIE4gaXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLgBFeGl0IHRoZSBzaGVsbC4KICAgIAogICAgRXhpdHMgdGhlIHNoZWxsIHdpdGggYSBzdGF0dXMgb2YgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIGV4aXQgc3RhdHVzCiAgICBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEZpbGUgbGltaXQARmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uAEZvcm1hdHMgYW5kIHByaW50cyBBUkdVTUVOVFMgdW5kZXIgY29udHJvbCBvZiB0aGUgRk9STUFULgogICAgCiAgICBPcHRpb25zOgogICAgICAtdiB2YXIJYXNzaWduIHRoZSBvdXRwdXQgdG8gc2hlbGwgdmFyaWFibGUgVkFSIHJhdGhlciB0aGFuCiAgICAJCWRpc3BsYXkgaXQgb24gdGhlIHN0YW5kYXJkIG91dHB1dAogICAgCiAgICBGT1JNQVQgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHRocmVlIHR5cGVzIG9mIG9iamVjdHM6IHBsYWluCiAgICBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgc2ltcGx5IGNvcGllZCB0byBzdGFuZGFyZCBvdXRwdXQ7IGNoYXJhY3RlciBlc2NhcGUKICAgIHNlcXVlbmNlcywgd2hpY2ggYXJlIGNvbnZlcnRlZCBhbmQgY29waWVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQ7IGFuZAogICAgZm9ybWF0IHNwZWNpZmljYXRpb25zLCBlYWNoIG9mIHdoaWNoIGNhdXNlcyBwcmludGluZyBvZiB0aGUgbmV4dCBzdWNjZXNzaXZlCiAgICBhcmd1bWVudC4KICAgIAogICAgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBkZXNjcmliZWQgaW4gcHJpbnRmKDEpLAogICAgcHJpbnRmIGludGVycHJldHM6CiAgICAKICAgICAgJWIJZXhwYW5kIGJhY2tzbGFzaCBlc2NhcGUgc2VxdWVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CiAgICAgICVxCXF1b3RlIHRoZSBhcmd1bWVudCBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgc2hlbGwgaW5wdXQKICAgICAgJShmbXQpVAlvdXRwdXQgdGhlIGRhdGUtdGltZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gdXNpbmcgRk1UIGFzIGEgZm9ybWF0CiAgICAJICAgICAgICBzdHJpbmcgZm9yIHN0cmZ0aW1lKDMpCiAgICAKICAgIFRoZSBmb3JtYXQgaXMgcmUtdXNlZCBhcyBuZWNlc3NhcnkgdG8gY29uc3VtZSBhbGwgb2YgdGhlIGFyZ3VtZW50cy4gIElmCiAgICB0aGVyZSBhcmUgZmV3ZXIgYXJndW1lbnRzIHRoYW4gdGhlIGZvcm1hdCByZXF1aXJlcywgIGV4dHJhIGZvcm1hdAogICAgc3BlY2lmaWNhdGlvbnMgYmVoYXZlIGFzIGlmIGEgemVybyB2YWx1ZSBvciBudWxsIHN0cmluZywgYXMgYXBwcm9wcmlhdGUsCiAgICBoYWQgYmVlbiBzdXBwbGllZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGEgd3JpdGUgb3IgYXNzaWdubWVudAogICAgZXJyb3Igb2NjdXJzLgBHTlUgYmFzaCwgdmVyc2lvbiAlcyAoJXMpCgBHTlUgYmFzaCwgdmVyc2lvbiAlcy0oJXMpCgBHTlUgbG9uZyBvcHRpb25zOgoAR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4KAEdyb3VwIGNvbW1hbmRzIGFzIGEgdW5pdC4KICAgIAogICAgUnVuIGEgc2V0IG9mIGNvbW1hbmRzIGluIGEgZ3JvdXAuICBUaGlzIGlzIG9uZSB3YXkgdG8gcmVkaXJlY3QgYW4KICAgIGVudGlyZSBzZXQgb2YgY29tbWFuZHMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEhGVCBpbnB1dCBkYXRhIHBlbmRpbmcASEZUIG1vbml0b3IgbW9kZSBncmFudGVkAEhGVCBtb25pdG9yIG1vZGUgcmV0cmFjdGVkAEhGVCBzb3VuZCBzZXF1ZW5jZSBoYXMgY29tcGxldGVkAEhPTUUgbm90IHNldABIYW5ndXAASSBoYXZlIG5vIG5hbWUhAEkvTyByZWFkeQBJTkZPUk06IABJbGxlZ2FsIGluc3RydWN0aW9uAEluZm9ybWF0aW9uIHJlcXVlc3QASW50ZXJydXB0AEtpbGxlZABMaWNlbnNlIEdQTHYzKzogR05VIEdQTCB2ZXJzaW9uIDMgb3IgbGF0ZXIgPGh0dHA6Ly9nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sPgoATWFyayBzaGVsbCB2YXJpYWJsZXMgYXMgdW5jaGFuZ2VhYmxlLgogICAgCiAgICBNYXJrIGVhY2ggTkFNRSBhcyByZWFkLW9ubHk7IHRoZSB2YWx1ZXMgb2YgdGhlc2UgTkFNRXMgbWF5IG5vdCBiZQogICAgY2hhbmdlZCBieSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQuICBJZiBWQUxVRSBpcyBzdXBwbGllZCwgYXNzaWduIFZBTFVFCiAgICBiZWZvcmUgbWFya2luZyBhcyByZWFkLW9ubHkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlZmVyIHRvIGluZGV4ZWQgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1BCXJlZmVyIHRvIGFzc29jaWF0aXZlIGFycmF5IHZhcmlhYmxlcwogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlYWRvbmx5IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMsCiAgICAJCWRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgLWYgb3B0aW9uIGlzIGdpdmVuCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIGAtLScgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4ATW9kaWZ5IG9yIGRpc3BsYXkgY29tcGxldGlvbiBvcHRpb25zLgogICAgCiAgICBNb2RpZnkgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8gTkFNRXMgYXJlIHN1cHBsaWVkLAogICAgdGhlIGNvbXBsZXRpb24gY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLiAgSWYgbm8gT1BUSU9OcyBhcmUgZ2l2ZW4sIHByaW50CiAgICB0aGUgY29tcGxldGlvbiBvcHRpb25zIGZvciBlYWNoIE5BTUUgb3IgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgCS1vIG9wdGlvbglTZXQgY29tcGxldGlvbiBvcHRpb24gT1BUSU9OIGZvciBlYWNoIE5BTUUKICAgIAktRAkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSAiZGVmYXVsdCIgY29tbWFuZCBjb21wbGV0aW9uCiAgICAJLUUJCUNoYW5nZSBvcHRpb25zIGZvciB0aGUgImVtcHR5IiBjb21tYW5kIGNvbXBsZXRpb24KICAgIAogICAgVXNpbmcgYCtvJyBpbnN0ZWFkIG9mIGAtbycgdHVybnMgb2ZmIHRoZSBzcGVjaWZpZWQgb3B0aW9uLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAKICAgIEVhY2ggTkFNRSByZWZlcnMgdG8gYSBjb21tYW5kIGZvciB3aGljaCBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBtdXN0CiAgICBoYXZlIHByZXZpb3VzbHkgYmVlbiBkZWZpbmVkIHVzaW5nIHRoZSBgY29tcGxldGUnIGJ1aWx0aW4uICBJZiBubyBOQU1FcwogICAgYXJlIHN1cHBsaWVkLCBjb21wb3B0IG11c3QgYmUgY2FsbGVkIGJ5IGEgZnVuY3Rpb24gY3VycmVudGx5IGdlbmVyYXRpbmcKICAgIGNvbXBsZXRpb25zLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoYXQgY3VycmVudGx5LWV4ZWN1dGluZyBjb21wbGV0aW9uCiAgICBnZW5lcmF0b3IgYXJlIG1vZGlmaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgTkFNRSBkb2VzIG5vdAogICAgaGF2ZSBhIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbiBkZWZpbmVkLgBNb2RpZnkgc2hlbGwgcmVzb3VyY2UgbGltaXRzLgogICAgCiAgICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgdG8gdGhlIHNoZWxsIGFuZCBwcm9jZXNzZXMKICAgIGl0IGNyZWF0ZXMsIG9uIHN5c3RlbXMgdGhhdCBhbGxvdyBzdWNoIGNvbnRyb2wuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1TCXVzZSB0aGUgYHNvZnQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1ICXVzZSB0aGUgYGhhcmQnIHJlc291cmNlIGxpbWl0CiAgICAgIC1hCWFsbCBjdXJyZW50IGxpbWl0cyBhcmUgcmVwb3J0ZWQKICAgICAgLWIJdGhlIHNvY2tldCBidWZmZXIgc2l6ZQogICAgICAtYwl0aGUgbWF4aW11bSBzaXplIG9mIGNvcmUgZmlsZXMgY3JlYXRlZAogICAgICAtZAl0aGUgbWF4aW11bSBzaXplIG9mIGEgcHJvY2VzcydzIGRhdGEgc2VnbWVudAogICAgICAtZQl0aGUgbWF4aW11bSBzY2hlZHVsaW5nIHByaW9yaXR5IChgbmljZScpCiAgICAgIC1mCXRoZSBtYXhpbXVtIHNpemUgb2YgZmlsZXMgd3JpdHRlbiBieSB0aGUgc2hlbGwgYW5kIGl0cyBjaGlsZHJlbgogICAgICAtaQl0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBzaWduYWxzCiAgICAgIC1rCXRoZSBtYXhpbXVtIG51bWJlciBvZiBrcXVldWVzIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm9jZXNzCiAgICAgIC1sCXRoZSBtYXhpbXVtIHNpemUgYSBwcm9jZXNzIG1heSBsb2NrIGludG8gbWVtb3J5CiAgICAgIC1tCXRoZSBtYXhpbXVtIHJlc2lkZW50IHNldCBzaXplCiAgICAgIC1uCXRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICAgICAgLXAJdGhlIHBpcGUgYnVmZmVyIHNpemUKICAgICAgLXEJdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIFBPU0lYIG1lc3NhZ2UgcXVldWVzCiAgICAgIC1yCXRoZSBtYXhpbXVtIHJlYWwtdGltZSBzY2hlZHVsaW5nIHByaW9yaXR5CiAgICAgIC1zCXRoZSBtYXhpbXVtIHN0YWNrIHNpemUKICAgICAgLXQJdGhlIG1heGltdW0gYW1vdW50IG9mIGNwdSB0aW1lIGluIHNlY29uZHMKICAgICAgLXUJdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXIgcHJvY2Vzc2VzCiAgICAgIC12CXRoZSBzaXplIG9mIHZpcnR1YWwgbWVtb3J5CiAgICAgIC14CXRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlIGxvY2tzCiAgICAgIC1QCXRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG90ZXJtaW5hbHMKICAgICAgLVQJdGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMKICAgIAogICAgTm90IGFsbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KICAgIAogICAgSWYgTElNSVQgaXMgZ2l2ZW4sIGl0IGlzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZTsgdGhlCiAgICBzcGVjaWFsIExJTUlUIHZhbHVlcyBgc29mdCcsIGBoYXJkJywgYW5kIGB1bmxpbWl0ZWQnIHN0YW5kIGZvciB0aGUKICAgIGN1cnJlbnQgc29mdCBsaW1pdCwgdGhlIGN1cnJlbnQgaGFyZCBsaW1pdCwgYW5kIG5vIGxpbWl0LCByZXNwZWN0aXZlbHkuCiAgICBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgcHJpbnRlZC4gIElmCiAgICBubyBvcHRpb24gaXMgZ2l2ZW4sIHRoZW4gLWYgaXMgYXNzdW1lZC4KICAgIAogICAgVmFsdWVzIGFyZSBpbiAxMDI0LWJ5dGUgaW5jcmVtZW50cywgZXhjZXB0IGZvciAtdCwgd2hpY2ggaXMgaW4gc2Vjb25kcywKICAgIC1wLCB3aGljaCBpcyBpbiBpbmNyZW1lbnRzIG9mIDUxMiBieXRlcywgYW5kIC11LCB3aGljaCBpcyBhbiB1bnNjYWxlZAogICAgbnVtYmVyIG9mIHByb2Nlc3Nlcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGFuIGVycm9yIG9jY3Vycy4ATW92ZSBqb2IgdG8gdGhlIGZvcmVncm91bmQuCiAgICAKICAgIFBsYWNlIHRoZSBqb2IgaWRlbnRpZmllZCBieSBKT0JfU1BFQyBpbiB0aGUgZm9yZWdyb3VuZCwgbWFraW5nIGl0IHRoZQogICAgY3VycmVudCBqb2IuICBJZiBKT0JfU1BFQyBpcyBub3QgcHJlc2VudCwgdGhlIHNoZWxsJ3Mgbm90aW9uIG9mIHRoZQogICAgY3VycmVudCBqb2IgaXMgdXNlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBTdGF0dXMgb2YgY29tbWFuZCBwbGFjZWQgaW4gZm9yZWdyb3VuZCwgb3IgZmFpbHVyZSBpZiBhbiBlcnJvciBvY2N1cnMuAE1vdmUgam9icyB0byB0aGUgYmFja2dyb3VuZC4KICAgIAogICAgUGxhY2UgdGhlIGpvYnMgaWRlbnRpZmllZCBieSBlYWNoIEpPQl9TUEVDIGluIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGV5CiAgICBoYWQgYmVlbiBzdGFydGVkIHdpdGggYCYnLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbgogICAgb2YgdGhlIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAE51bGwgY29tbWFuZC4KICAgIAogICAgTm8gZWZmZWN0OyB0aGUgY29tbWFuZCBkb2VzIG5vdGhpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBPTERQV0Qgbm90IHNldABQYXJzZSBvcHRpb24gYXJndW1lbnRzLgogICAgCiAgICBHZXRvcHRzIGlzIHVzZWQgYnkgc2hlbGwgcHJvY2VkdXJlcyB0byBwYXJzZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKICAgIGFzIG9wdGlvbnMuCiAgICAKICAgIE9QVFNUUklORyBjb250YWlucyB0aGUgb3B0aW9uIGxldHRlcnMgdG8gYmUgcmVjb2duaXplZDsgaWYgYSBsZXR0ZXIKICAgIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24sIHRoZSBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBhcmd1bWVudCwKICAgIHdoaWNoIHNob3VsZCBiZSBzZXBhcmF0ZWQgZnJvbSBpdCBieSB3aGl0ZSBzcGFjZS4KICAgIAogICAgRWFjaCB0aW1lIGl0IGlzIGludm9rZWQsIGdldG9wdHMgd2lsbCBwbGFjZSB0aGUgbmV4dCBvcHRpb24gaW4gdGhlCiAgICBzaGVsbCB2YXJpYWJsZSAkbmFtZSwgaW5pdGlhbGl6aW5nIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhpc3QsIGFuZAogICAgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGFyZ3VtZW50IHRvIGJlIHByb2Nlc3NlZCBpbnRvIHRoZSBzaGVsbAogICAgdmFyaWFibGUgT1BUSU5ELiAgT1BUSU5EIGlzIGluaXRpYWxpemVkIHRvIDEgZWFjaCB0aW1lIHRoZSBzaGVsbCBvcgogICAgYSBzaGVsbCBzY3JpcHQgaXMgaW52b2tlZC4gIFdoZW4gYW4gb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAogICAgZ2V0b3B0cyBwbGFjZXMgdGhhdCBhcmd1bWVudCBpbnRvIHRoZSBzaGVsbCB2YXJpYWJsZSBPUFRBUkcuCiAgICAKICAgIGdldG9wdHMgcmVwb3J0cyBlcnJvcnMgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgb2YgT1BUU1RSSU5HIGlzIGEgY29sb24sIGdldG9wdHMgdXNlcyBzaWxlbnQgZXJyb3IgcmVwb3J0aW5nLiAgSW4KICAgIHRoaXMgbW9kZSwgbm8gZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50ZWQuICBJZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZm91bmQgaW50byBPUFRBUkcuICBJZiBhCiAgICByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGdldG9wdHMgcGxhY2VzIGEgJzonIGludG8gTkFNRSBhbmQKICAgIHNldHMgT1BUQVJHIHRvIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvdW5kLiAgSWYgZ2V0b3B0cyBpcyBub3QgaW4KICAgIHNpbGVudCBtb2RlLCBhbmQgYW4gaW52YWxpZCBvcHRpb24gaXMgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgJz8nIGludG8KICAgIE5BTUUgYW5kIHVuc2V0cyBPUFRBUkcuICBJZiBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBmb3VuZCwgYSAnPycKICAgIGlzIHBsYWNlZCBpbiBOQU1FLCBPUFRBUkcgaXMgdW5zZXQsIGFuZCBhIGRpYWdub3N0aWMgbWVzc2FnZSBpcwogICAgcHJpbnRlZC4KICAgIAogICAgSWYgdGhlIHNoZWxsIHZhcmlhYmxlIE9QVEVSUiBoYXMgdGhlIHZhbHVlIDAsIGdldG9wdHMgZGlzYWJsZXMgdGhlCiAgICBwcmludGluZyBvZiBlcnJvciBtZXNzYWdlcywgZXZlbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCiAgICBPUFRTVFJJTkcgaXMgbm90IGEgY29sb24uICBPUFRFUlIgaGFzIHRoZSB2YWx1ZSAxIGJ5IGRlZmF1bHQuCiAgICAKICAgIEdldG9wdHMgbm9ybWFsbHkgcGFyc2VzIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgKCQwIC0gJDkpLCBidXQgaWYKICAgIG1vcmUgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhleSBhcmUgcGFyc2VkIGluc3RlYWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFuIG9wdGlvbiBpcyBmb3VuZDsgZmFpbHMgaWYgdGhlIGVuZCBvZiBvcHRpb25zIGlzCiAgICBlbmNvdW50ZXJlZCBvciBhbiBlcnJvciBvY2N1cnMuAFByaW50IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlwcmludCB0aGUgdmFsdWUgb2YgJFBXRCBpZiBpdCBuYW1lcyB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeQogICAgICAtUAlwcmludCB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBzeW1ib2xpYyBsaW5rcwogICAgCiAgICBCeSBkZWZhdWx0LCBgcHdkJyBiZWhhdmVzIGFzIGlmIGAtTCcgd2VyZSBzcGVjaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgIGNhbm5vdCBiZSByZWFkLgBRdWl0AFJlYWQgYSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBzcGxpdCBpdCBpbnRvIGZpZWxkcy4KICAgIAogICAgUmVhZHMgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb3IgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQKICAgIGlmIHRoZSAtdSBvcHRpb24gaXMgc3VwcGxpZWQuICBUaGUgbGluZSBpcyBzcGxpdCBpbnRvIGZpZWxkcyBhcyB3aXRoIHdvcmQKICAgIHNwbGl0dGluZywgYW5kIHRoZSBmaXJzdCB3b3JkIGlzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBOQU1FLCB0aGUgc2Vjb25kCiAgICB3b3JkIHRvIHRoZSBzZWNvbmQgTkFNRSwgYW5kIHNvIG9uLCB3aXRoIGFueSBsZWZ0b3ZlciB3b3JkcyBhc3NpZ25lZCB0bwogICAgdGhlIGxhc3QgTkFNRS4gIE9ubHkgdGhlIGNoYXJhY3RlcnMgZm91bmQgaW4gJElGUyBhcmUgcmVjb2duaXplZCBhcyB3b3JkCiAgICBkZWxpbWl0ZXJzLgogICAgCiAgICBJZiBubyBOQU1FcyBhcmUgc3VwcGxpZWQsIHRoZSBsaW5lIHJlYWQgaXMgc3RvcmVkIGluIHRoZSBSRVBMWSB2YXJpYWJsZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgYXJyYXkJYXNzaWduIHRoZSB3b3JkcyByZWFkIHRvIHNlcXVlbnRpYWwgaW5kaWNlcyBvZiB0aGUgYXJyYXkKICAgIAkJdmFyaWFibGUgQVJSQVksIHN0YXJ0aW5nIGF0IHplcm8KICAgICAgLWQgZGVsaW0JY29udGludWUgdW50aWwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBERUxJTSBpcyByZWFkLCByYXRoZXIKICAgIAkJdGhhbiBuZXdsaW5lCiAgICAgIC1lCXVzZSBSZWFkbGluZSB0byBvYnRhaW4gdGhlIGxpbmUgaW4gYW4gaW50ZXJhY3RpdmUgc2hlbGwKICAgICAgLWkgdGV4dAl1c2UgVEVYVCBhcyB0aGUgaW5pdGlhbCB0ZXh0IGZvciBSZWFkbGluZQogICAgICAtbiBuY2hhcnMJcmV0dXJuIGFmdGVyIHJlYWRpbmcgTkNIQVJTIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gd2FpdGluZwogICAgCQlmb3IgYSBuZXdsaW5lLCBidXQgaG9ub3IgYSBkZWxpbWl0ZXIgaWYgZmV3ZXIgdGhhbgogICAgCQlOQ0hBUlMgY2hhcmFjdGVycyBhcmUgcmVhZCBiZWZvcmUgdGhlIGRlbGltaXRlcgogICAgICAtTiBuY2hhcnMJcmV0dXJuIG9ubHkgYWZ0ZXIgcmVhZGluZyBleGFjdGx5IE5DSEFSUyBjaGFyYWN0ZXJzLCB1bmxlc3MKICAgIAkJRU9GIGlzIGVuY291bnRlcmVkIG9yIHJlYWQgdGltZXMgb3V0LCBpZ25vcmluZyBhbnkKICAgIAkJZGVsaW1pdGVyCiAgICAgIC1wIHByb21wdAlvdXRwdXQgdGhlIHN0cmluZyBQUk9NUFQgd2l0aG91dCBhIHRyYWlsaW5nIG5ld2xpbmUgYmVmb3JlCiAgICAJCWF0dGVtcHRpbmcgdG8gcmVhZAogICAgICAtcglkbyBub3QgYWxsb3cgYmFja3NsYXNoZXMgdG8gZXNjYXBlIGFueSBjaGFyYWN0ZXJzCiAgICAgIC1zCWRvIG5vdCBlY2hvIGlucHV0IGNvbWluZyBmcm9tIGEgdGVybWluYWwKICAgICAgLXQgdGltZW91dAl0aW1lIG91dCBhbmQgcmV0dXJuIGZhaWx1cmUgaWYgYSBjb21wbGV0ZSBsaW5lIG9mCiAgICAJCWlucHV0IGlzIG5vdCByZWFkIHdpdGhpbiBUSU1FT1VUIHNlY29uZHMuICBUaGUgdmFsdWUgb2YgdGhlCiAgICAJCVRNT1VUIHZhcmlhYmxlIGlzIHRoZSBkZWZhdWx0IHRpbWVvdXQuICBUSU1FT1VUIG1heSBiZSBhCiAgICAJCWZyYWN0aW9uYWwgbnVtYmVyLiAgSWYgVElNRU9VVCBpcyAwLCByZWFkIHJldHVybnMKICAgIAkJaW1tZWRpYXRlbHksIHdpdGhvdXQgdHJ5aW5nIHRvIHJlYWQgYW55IGRhdGEsIHJldHVybmluZwogICAgCQlzdWNjZXNzIG9ubHkgaWYgaW5wdXQgaXMgYXZhaWxhYmxlIG9uIHRoZSBzcGVjaWZpZWQKICAgIAkJZmlsZSBkZXNjcmlwdG9yLiAgVGhlIGV4aXQgc3RhdHVzIGlzIGdyZWF0ZXIgdGhhbiAxMjgKICAgIAkJaWYgdGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQKICAgICAgLXUgZmQJcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSByZXR1cm4gY29kZSBpcyB6ZXJvLCB1bmxlc3MgZW5kLW9mLWZpbGUgaXMgZW5jb3VudGVyZWQsIHJlYWQgdGltZXMgb3V0CiAgICAoaW4gd2hpY2ggY2FzZSBpdCdzIGdyZWF0ZXIgdGhhbiAxMjgpLCBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgZXJyb3Igb2NjdXJzLAogICAgb3IgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgaXMgc3VwcGxpZWQgYXMgdGhlIGFyZ3VtZW50IHRvIC11LgBSZWFkIGxpbmVzIGZyb20gYSBmaWxlIGludG8gYW4gYXJyYXkgdmFyaWFibGUuCiAgICAKICAgIEEgc3lub255bSBmb3IgYG1hcGZpbGUnLgBSZWFkIGxpbmVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGludG8gYW4gaW5kZXhlZCBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIHRoZSBpbmRleGVkIGFycmF5IHZhcmlhYmxlIEFSUkFZLCBvcgogICAgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSB2YXJpYWJsZSBNQVBGSUxFCiAgICBpcyB0aGUgZGVmYXVsdCBBUlJBWS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQgZGVsaW0JVXNlIERFTElNIHRvIHRlcm1pbmF0ZSBsaW5lcywgaW5zdGVhZCBvZiBuZXdsaW5lCiAgICAgIC1uIGNvdW50CUNvcHkgYXQgbW9zdCBDT1VOVCBsaW5lcy4gIElmIENPVU5UIGlzIDAsIGFsbCBsaW5lcyBhcmUgY29waWVkCiAgICAgIC1PIG9yaWdpbglCZWdpbiBhc3NpZ25pbmcgdG8gQVJSQVkgYXQgaW5kZXggT1JJR0lOLiAgVGhlIGRlZmF1bHQgaW5kZXggaXMgMAogICAgICAtcyBjb3VudAlEaXNjYXJkIHRoZSBmaXJzdCBDT1VOVCBsaW5lcyByZWFkCiAgICAgIC10CVJlbW92ZSBhIHRyYWlsaW5nIERFTElNIGZyb20gZWFjaCBsaW5lIHJlYWQgKGRlZmF1bHQgbmV3bGluZSkKICAgICAgLXUgZmQJUmVhZCBsaW5lcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgICAtQyBjYWxsYmFjawlFdmFsdWF0ZSBDQUxMQkFDSyBlYWNoIHRpbWUgUVVBTlRVTSBsaW5lcyBhcmUgcmVhZAogICAgICAtYyBxdWFudHVtCVNwZWNpZnkgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkIGJldHdlZW4gZWFjaCBjYWxsIHRvCiAgICAJCQlDQUxMQkFDSwogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIEFSUkFZCUFycmF5IHZhcmlhYmxlIG5hbWUgdG8gdXNlIGZvciBmaWxlIGRhdGEKICAgIAogICAgSWYgLUMgaXMgc3VwcGxpZWQgd2l0aG91dCAtYywgdGhlIGRlZmF1bHQgcXVhbnR1bSBpcyA1MDAwLiAgV2hlbgogICAgQ0FMTEJBQ0sgaXMgZXZhbHVhdGVkLCBpdCBpcyBzdXBwbGllZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJyYXkKICAgIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgYW5kIHRoZSBsaW5lIHRvIGJlIGFzc2lnbmVkIHRvIHRoYXQgZWxlbWVudAogICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICAKICAgIElmIG5vdCBzdXBwbGllZCB3aXRoIGFuIGV4cGxpY2l0IG9yaWdpbiwgbWFwZmlsZSB3aWxsIGNsZWFyIEFSUkFZIGJlZm9yZQogICAgYXNzaWduaW5nIHRvIGl0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgQVJSQVkgaXMgcmVhZG9ubHkgb3IKICAgIG5vdCBhbiBpbmRleGVkIGFycmF5LgBSZWNvcmQgbG9jawBSZW1lbWJlciBvciBkaXNwbGF5IHByb2dyYW0gbG9jYXRpb25zLgogICAgCiAgICBEZXRlcm1pbmUgYW5kIHJlbWVtYmVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGVhY2ggY29tbWFuZCBOQU1FLiAgSWYKICAgIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGluZm9ybWF0aW9uIGFib3V0IHJlbWVtYmVyZWQgY29tbWFuZHMgaXMgZGlzcGxheWVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZAlmb3JnZXQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FCiAgICAgIC1sCWRpc3BsYXkgaW4gYSBmb3JtYXQgdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1wIHBhdGhuYW1lCXVzZSBQQVRITkFNRSBhcyB0aGUgZnVsbCBwYXRobmFtZSBvZiBOQU1FCiAgICAgIC1yCWZvcmdldCBhbGwgcmVtZW1iZXJlZCBsb2NhdGlvbnMKICAgICAgLXQJcHJpbnQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FLCBwcmVjZWRpbmcKICAgIAkJZWFjaCBsb2NhdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIE5BTUUgaWYgbXVsdGlwbGUKICAgIAkJTkFNRXMgYXJlIGdpdmVuCiAgICBBcmd1bWVudHM6CiAgICAgIE5BTUUJRWFjaCBOQU1FIGlzIHNlYXJjaGVkIGZvciBpbiAkUEFUSCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QKICAgIAkJb2YgcmVtZW1iZXJlZCBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSBzdGFjay4KICAgIAogICAgUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBgZGlycycsIHN0YXJ0aW5nIHdpdGggemVyby4gIEZvciBleGFtcGxlOiBgcG9wZCArMCcKICAgIAkJcmVtb3ZlcyB0aGUgZmlyc3QgZGlyZWN0b3J5LCBgcG9wZCArMScgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAkJc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTogYHBvcGQgLTAnCiAgICAJCXJlbW92ZXMgdGhlIGxhc3QgZGlyZWN0b3J5LCBgcG9wZCAtMScgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIGBkaXJzJyBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AUmVtb3ZlIGVhY2ggTkFNRSBmcm9tIHRoZSBsaXN0IG9mIGRlZmluZWQgYWxpYXNlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcmVtb3ZlIGFsbCBhbGlhcyBkZWZpbml0aW9ucwogICAgCiAgICBSZXR1cm4gc3VjY2VzcyB1bmxlc3MgYSBOQU1FIGlzIG5vdCBhbiBleGlzdGluZyBhbGlhcy4AUmVtb3ZlIGpvYnMgZnJvbSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZW1vdmVzIGVhY2ggSk9CU1BFQyBhcmd1bWVudCBmcm9tIHRoZSB0YWJsZSBvZiBhY3RpdmUgam9icy4gIFdpdGhvdXQKICAgIGFueSBKT0JTUEVDcywgdGhlIHNoZWxsIHVzZXMgaXRzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBqb2IuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlbW92ZSBhbGwgam9icyBpZiBKT0JTUEVDIGlzIG5vdCBzdXBwbGllZAogICAgICAtaAltYXJrIGVhY2ggSk9CU1BFQyBzbyB0aGF0IFNJR0hVUCBpcyBub3Qgc2VudCB0byB0aGUgam9iIGlmIHRoZQogICAgCQlzaGVsbCByZWNlaXZlcyBhIFNJR0hVUAogICAgICAtcglyZW1vdmUgb25seSBydW5uaW5nIGpvYnMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIG9yIEpPQlNQRUMgaXMgZ2l2ZW4uAFJlbW92ZXMgZW50cmllcyBmcm9tIHRoZSBkaXJlY3Rvcnkgc3RhY2suICBXaXRoIG5vIGFyZ3VtZW50cywgcmVtb3ZlcwogICAgdGhlIHRvcCBkaXJlY3RvcnkgZnJvbSB0aGUgc3RhY2ssIGFuZCBjaGFuZ2VzIHRvIHRoZSBuZXcgdG9wIGRpcmVjdG9yeS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JU3VwcHJlc3NlcyB0aGUgbm9ybWFsIGNoYW5nZSBvZiBkaXJlY3Rvcnkgd2hlbiByZW1vdmluZwogICAgCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IGBkaXJzJywgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IGBwb3BkICswJwogICAgCXJlbW92ZXMgdGhlIGZpcnN0IGRpcmVjdG9yeSwgYHBvcGQgKzEnIHRoZSBzZWNvbmQuCiAgICAKICAgICAgLU4JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJc2hvd24gYnkgYGRpcnMnLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTogYHBvcGQgLTAnCiAgICAJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIGBwb3BkIC0xJyB0aGUgbmV4dCB0byBsYXN0LgogICAgCiAgICBUaGUgYGRpcnMnIGJ1aWx0aW4gZGlzcGxheXMgdGhlIGRpcmVjdG9yeSBzdGFjay4AUmVwbGFjZSB0aGUgc2hlbGwgd2l0aCB0aGUgZ2l2ZW4gY29tbWFuZC4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5ELCByZXBsYWNpbmcgdGhpcyBzaGVsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KICAgIEFSR1VNRU5UUyBiZWNvbWUgdGhlIGFyZ3VtZW50cyB0byBDT01NQU5ELiAgSWYgQ09NTUFORCBpcyBub3Qgc3BlY2lmaWVkLAogICAgYW55IHJlZGlyZWN0aW9ucyB0YWtlIGVmZmVjdCBpbiB0aGUgY3VycmVudCBzaGVsbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEgbmFtZQlwYXNzIE5BTUUgYXMgdGhlIHplcm90aCBhcmd1bWVudCB0byBDT01NQU5ECiAgICAgIC1jCWV4ZWN1dGUgQ09NTUFORCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50CiAgICAgIC1sCXBsYWNlIGEgZGFzaCBpbiB0aGUgemVyb3RoIGFyZ3VtZW50IHRvIENPTU1BTkQKICAgIAogICAgSWYgdGhlIGNvbW1hbmQgY2Fubm90IGJlIGV4ZWN1dGVkLCBhIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbCBleGl0cywgdW5sZXNzCiAgICB0aGUgc2hlbGwgb3B0aW9uIGBleGVjZmFpbCcgaXMgc2V0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgQ09NTUFORCBpcyBub3QgZm91bmQgb3IgYSByZWRpcmVjdGlvbiBlcnJvciBvY2N1cnMuAFJlcG9ydCB0aW1lIGNvbnN1bWVkIGJ5IHBpcGVsaW5lJ3MgZXhlY3V0aW9uLgogICAgCiAgICBFeGVjdXRlIFBJUEVMSU5FIGFuZCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIHJlYWwgdGltZSwgdXNlciBDUFUgdGltZSwKICAgIGFuZCBzeXN0ZW0gQ1BVIHRpbWUgc3BlbnQgZXhlY3V0aW5nIFBJUEVMSU5FIHdoZW4gaXQgdGVybWluYXRlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgdGhlIHRpbWluZyBzdW1tYXJ5IGluIHRoZSBwb3J0YWJsZSBQb3NpeCBmb3JtYXQKICAgIAogICAgVGhlIHZhbHVlIG9mIHRoZSBUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG91dHB1dCBmb3JtYXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBzdGF0dXMgaXMgdGhlIHJldHVybiBzdGF0dXMgb2YgUElQRUxJTkUuAFJlc3VtZSBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgUmVzdW1lcyB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIGVuY2xvc2luZyBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuCiAgICBJZiBOIGlzIHNwZWNpZmllZCwgcmVzdW1lcyB0aGUgTnRoIGVuY2xvc2luZyBsb29wLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4AUmVzdW1lIGpvYiBpbiBmb3JlZ3JvdW5kLgogICAgCiAgICBFcXVpdmFsZW50IHRvIHRoZSBKT0JfU1BFQyBhcmd1bWVudCB0byB0aGUgYGZnJyBjb21tYW5kLiAgUmVzdW1lIGEKICAgIHN0b3BwZWQgb3IgYmFja2dyb3VuZCBqb2IuICBKT0JfU1BFQyBjYW4gc3BlY2lmeSBlaXRoZXIgYSBqb2IgbmFtZQogICAgb3IgYSBqb2IgbnVtYmVyLiAgRm9sbG93aW5nIEpPQl9TUEVDIHdpdGggYSBgJicgcGxhY2VzIHRoZSBqb2IgaW4KICAgIHRoZSBiYWNrZ3JvdW5kLCBhcyBpZiB0aGUgam9iIHNwZWNpZmljYXRpb24gaGFkIGJlZW4gc3VwcGxpZWQgYXMgYW4KICAgIGFyZ3VtZW50IHRvIGBiZycuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bWVkIGpvYi4AUmV0dXJuIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBSZXR1cm4gYW4gdW5zdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgZmFpbHMuAFJldHVybiBmcm9tIGEgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENhdXNlcyBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0IHRvIGV4aXQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgICBzcGVjaWZpZWQgYnkgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIHJldHVybiBzdGF0dXMgaXMgdGhhdCBvZiB0aGUKICAgIGxhc3QgY29tbWFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIG9yIHNjcmlwdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIE4sIG9yIGZhaWx1cmUgaWYgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbiBvciBzY3JpcHQuAFJldHVybiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyAiJGxpbmUgJGZpbGVuYW1lIi4gIFdpdGggRVhQUiwgcmV0dXJucwogICAgIiRsaW5lICRzdWJyb3V0aW5lICRmaWxlbmFtZSI7IHRoaXMgZXh0cmEgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8KICAgIHByb3ZpZGUgYSBzdGFjayB0cmFjZS4KICAgIAogICAgVGhlIHZhbHVlIG9mIEVYUFIgaW5kaWNhdGVzIGhvdyBtYW55IGNhbGwgZnJhbWVzIHRvIGdvIGJhY2sgYmVmb3JlIHRoZQogICAgY3VycmVudCBvbmU7IHRoZSB0b3AgZnJhbWUgaXMgZnJhbWUgMC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDAgdW5sZXNzIHRoZSBzaGVsbCBpcyBub3QgZXhlY3V0aW5nIGEgc2hlbGwgZnVuY3Rpb24gb3IgRVhQUgogICAgaXMgaW52YWxpZC4AUmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyAAUnVubmluZwBTZWdtZW50YXRpb24gZmF1bHQAU2VsZWN0IHdvcmRzIGZyb20gYSBsaXN0IGFuZCBleGVjdXRlIGNvbW1hbmRzLgogICAgCiAgICBUaGUgV09SRFMgYXJlIGV4cGFuZGVkLCBnZW5lcmF0aW5nIGEgbGlzdCBvZiB3b3Jkcy4gIFRoZQogICAgc2V0IG9mIGV4cGFuZGVkIHdvcmRzIGlzIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yLCBlYWNoCiAgICBwcmVjZWRlZCBieSBhIG51bWJlci4gIElmIGBpbiBXT1JEUycgaXMgbm90IHByZXNlbnQsIGBpbiAiJEAiJwogICAgaXMgYXNzdW1lZC4gIFRoZSBQUzMgcHJvbXB0IGlzIHRoZW4gZGlzcGxheWVkIGFuZCBhIGxpbmUgcmVhZAogICAgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBJZiB0aGUgbGluZSBjb25zaXN0cyBvZiB0aGUgbnVtYmVyCiAgICBjb3JyZXNwb25kaW5nIHRvIG9uZSBvZiB0aGUgZGlzcGxheWVkIHdvcmRzLCB0aGVuIE5BTUUgaXMgc2V0CiAgICB0byB0aGF0IHdvcmQuICBJZiB0aGUgbGluZSBpcyBlbXB0eSwgV09SRFMgYW5kIHRoZSBwcm9tcHQgYXJlCiAgICByZWRpc3BsYXllZC4gIElmIEVPRiBpcyByZWFkLCB0aGUgY29tbWFuZCBjb21wbGV0ZXMuICBBbnkgb3RoZXIKICAgIHZhbHVlIHJlYWQgY2F1c2VzIE5BTUUgdG8gYmUgc2V0IHRvIG51bGwuICBUaGUgbGluZSByZWFkIGlzIHNhdmVkCiAgICBpbiB0aGUgdmFyaWFibGUgUkVQTFkuICBDT01NQU5EUyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCBzZWxlY3Rpb24KICAgIHVudGlsIGEgYnJlYWsgY29tbWFuZCBpcyBleGVjdXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4AU2VuZCBhIHNpZ25hbCB0byBhIGpvYi4KICAgIAogICAgU2VuZCB0aGUgcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgUElEIG9yIEpPQlNQRUMgdGhlIHNpZ25hbCBuYW1lZCBieQogICAgU0lHU1BFQyBvciBTSUdOVU0uICBJZiBuZWl0aGVyIFNJR1NQRUMgbm9yIFNJR05VTSBpcyBwcmVzZW50LCB0aGVuCiAgICBTSUdURVJNIGlzIGFzc3VtZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1zIHNpZwlTSUcgaXMgYSBzaWduYWwgbmFtZQogICAgICAtbiBzaWcJU0lHIGlzIGEgc2lnbmFsIG51bWJlcgogICAgICAtbAlsaXN0IHRoZSBzaWduYWwgbmFtZXM7IGlmIGFyZ3VtZW50cyBmb2xsb3cgYC1sJyB0aGV5IGFyZQogICAgCQlhc3N1bWVkIHRvIGJlIHNpZ25hbCBudW1iZXJzIGZvciB3aGljaCBuYW1lcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIC1MCXN5bm9ueW0gZm9yIC1sCiAgICAKICAgIEtpbGwgaXMgYSBzaGVsbCBidWlsdGluIGZvciB0d28gcmVhc29uczogaXQgYWxsb3dzIGpvYiBJRHMgdG8gYmUgdXNlZAogICAgaW5zdGVhZCBvZiBwcm9jZXNzIElEcywgYW5kIGFsbG93cyBwcm9jZXNzZXMgdG8gYmUga2lsbGVkIGlmIHRoZSBsaW1pdAogICAgb24gcHJvY2Vzc2VzIHRoYXQgeW91IGNhbiBjcmVhdGUgaXMgcmVhY2hlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4AU2V0IFJlYWRsaW5lIGtleSBiaW5kaW5ncyBhbmQgdmFyaWFibGVzLgogICAgCiAgICBCaW5kIGEga2V5IHNlcXVlbmNlIHRvIGEgUmVhZGxpbmUgZnVuY3Rpb24gb3IgYSBtYWNybywgb3Igc2V0IGEKICAgIFJlYWRsaW5lIHZhcmlhYmxlLiAgVGhlIG5vbi1vcHRpb24gYXJndW1lbnQgc3ludGF4IGlzIGVxdWl2YWxlbnQgdG8KICAgIHRoYXQgZm91bmQgaW4gfi8uaW5wdXRyYywgYnV0IG11c3QgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50OgogICAgZS5nLiwgYmluZCAnIlxDLXhcQy1yIjogcmUtcmVhZC1pbml0LWZpbGUnLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbSAga2V5bWFwICAgICAgICAgVXNlIEtFWU1BUCBhcyB0aGUga2V5bWFwIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4gIEFjY2VwdGFibGUga2V5bWFwIG5hbWVzIGFyZSBlbWFjcywKICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWNzLXN0YW5kYXJkLCBlbWFjcy1tZXRhLCBlbWFjcy1jdGx4LCB2aSwgdmktbW92ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHZpLWNvbW1hbmQsIGFuZCB2aS1pbnNlcnQuCiAgICAgIC1sICAgICAgICAgICAgICAgICBMaXN0IG5hbWVzIG9mIGZ1bmN0aW9ucy4KICAgICAgLVAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb24gbmFtZXMgYW5kIGJpbmRpbmdzLgogICAgICAtcCAgICAgICAgICAgICAgICAgTGlzdCBmdW5jdGlvbnMgYW5kIGJpbmRpbmdzIGluIGEgZm9ybSB0aGF0IGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VkIGFzIGlucHV0LgogICAgICAtUyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgIC1zICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgdGhhdCBpbnZva2UgbWFjcm9zIGFuZCB0aGVpciB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1WICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMKICAgICAgLXYgICAgICAgICAgICAgICAgIExpc3QgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBpbiBhIGZvcm0gdGhhdCBjYW4KICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLXEgIGZ1bmN0aW9uLW5hbWUgIFF1ZXJ5IGFib3V0IHdoaWNoIGtleXMgaW52b2tlIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXUgIGZ1bmN0aW9uLW5hbWUgIFVuYmluZCBhbGwga2V5cyB3aGljaCBhcmUgYm91bmQgdG8gdGhlIG5hbWVkIGZ1bmN0aW9uLgogICAgICAtciAga2V5c2VxICAgICAgICAgUmVtb3ZlIHRoZSBiaW5kaW5nIGZvciBLRVlTRVEuCiAgICAgIC1mICBmaWxlbmFtZSAgICAgICBSZWFkIGtleSBiaW5kaW5ncyBmcm9tIEZJTEVOQU1FLgogICAgICAteCAga2V5c2VxOnNoZWxsLWNvbW1hbmQJQ2F1c2UgU0hFTEwtQ09NTUFORCB0byBiZSBleGVjdXRlZCB3aGVuCiAgICAJCQkJS0VZU0VRIGlzIGVudGVyZWQuCiAgICAgIC1YICAgICAgICAgICAgICAgICBMaXN0IGtleSBzZXF1ZW5jZXMgYm91bmQgd2l0aCAteCBhbmQgYXNzb2NpYXRlZCBjb21tYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBiaW5kIHJldHVybnMgMCB1bmxlc3MgYW4gdW5yZWNvZ25pemVkIG9wdGlvbiBpcyBnaXZlbiBvciBhbiBlcnJvciBvY2N1cnMuAFNldCBhbmQgdW5zZXQgc2hlbGwgb3B0aW9ucy4KICAgIAogICAgQ2hhbmdlIHRoZSBzZXR0aW5nIG9mIGVhY2ggc2hlbGwgb3B0aW9uIE9QVE5BTUUuICBXaXRob3V0IGFueSBvcHRpb24KICAgIGFyZ3VtZW50cywgbGlzdCBhbGwgc2hlbGwgb3B0aW9ucyB3aXRoIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBvciBub3QgZWFjaAogICAgaXMgc2V0LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbwlyZXN0cmljdCBPUFROQU1FcyB0byB0aG9zZSBkZWZpbmVkIGZvciB1c2Ugd2l0aCBgc2V0IC1vJwogICAgICAtcAlwcmludCBlYWNoIHNoZWxsIG9wdGlvbiB3aXRoIGFuIGluZGljYXRpb24gb2YgaXRzIHN0YXR1cwogICAgICAtcQlzdXBwcmVzcyBvdXRwdXQKICAgICAgLXMJZW5hYmxlIChzZXQpIGVhY2ggT1BUTkFNRQogICAgICAtdQlkaXNhYmxlICh1bnNldCkgZWFjaCBPUFROQU1FCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIE9QVE5BTUUgaXMgZW5hYmxlZDsgZmFpbHMgaWYgYW4gaW52YWxpZCBvcHRpb24gaXMKICAgIGdpdmVuIG9yIE9QVE5BTUUgaXMgZGlzYWJsZWQuAFNldCBleHBvcnQgYXR0cmlidXRlIGZvciBzaGVsbCB2YXJpYWJsZXMuCiAgICAKICAgIE1hcmtzIGVhY2ggTkFNRSBmb3IgYXV0b21hdGljIGV4cG9ydCB0byB0aGUgZW52aXJvbm1lbnQgb2Ygc3Vic2VxdWVudGx5CiAgICBleGVjdXRlZCBjb21tYW5kcy4gIElmIFZBTFVFIGlzIHN1cHBsaWVkLCBhc3NpZ24gVkFMVUUgYmVmb3JlIGV4cG9ydGluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJcmVmZXIgdG8gc2hlbGwgZnVuY3Rpb25zCiAgICAgIC1uCXJlbW92ZSB0aGUgZXhwb3J0IHByb3BlcnR5IGZyb20gZWFjaCBOQU1FCiAgICAgIC1wCWRpc3BsYXkgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucwogICAgCiAgICBBbiBhcmd1bWVudCBvZiBgLS0nIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAFNldCBvciB1bnNldCB2YWx1ZXMgb2Ygc2hlbGwgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBDaGFuZ2UgdGhlIHZhbHVlIG9mIHNoZWxsIGF0dHJpYnV0ZXMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgb3IKICAgIGRpc3BsYXkgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2hlbGwgdmFyaWFibGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSAgTWFyayB2YXJpYWJsZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGNyZWF0ZWQgZm9yIGV4cG9ydC4KICAgICAgLWIgIE5vdGlmeSBvZiBqb2IgdGVybWluYXRpb24gaW1tZWRpYXRlbHkuCiAgICAgIC1lICBFeGl0IGltbWVkaWF0ZWx5IGlmIGEgY29tbWFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogICAgICAtZiAgRGlzYWJsZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiAoZ2xvYmJpbmcpLgogICAgICAtaCAgUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIGNvbW1hbmRzIGFzIHRoZXkgYXJlIGxvb2tlZCB1cC4KICAgICAgLWsgIEFsbCBhc3NpZ25tZW50IGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYQogICAgICAgICAgY29tbWFuZCwgbm90IGp1c3QgdGhvc2UgdGhhdCBwcmVjZWRlIHRoZSBjb21tYW5kIG5hbWUuCiAgICAgIC1tICBKb2IgY29udHJvbCBpcyBlbmFibGVkLgogICAgICAtbiAgUmVhZCBjb21tYW5kcyBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KICAgICAgLW8gb3B0aW9uLW5hbWUKICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBvcHRpb24tbmFtZToKICAgICAgICAgICAgICBhbGxleHBvcnQgICAgc2FtZSBhcyAtYQogICAgICAgICAgICAgIGJyYWNlZXhwYW5kICBzYW1lIGFzIC1CCiAgICAgICAgICAgICAgZW1hY3MgICAgICAgIHVzZSBhbiBlbWFjcy1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgZXJyZXhpdCAgICAgIHNhbWUgYXMgLWUKICAgICAgICAgICAgICBlcnJ0cmFjZSAgICAgc2FtZSBhcyAtRQogICAgICAgICAgICAgIGZ1bmN0cmFjZSAgICBzYW1lIGFzIC1UCiAgICAgICAgICAgICAgaGFzaGFsbCAgICAgIHNhbWUgYXMgLWgKICAgICAgICAgICAgICBoaXN0ZXhwYW5kICAgc2FtZSBhcyAtSAogICAgICAgICAgICAgIGhpc3RvcnkgICAgICBlbmFibGUgY29tbWFuZCBoaXN0b3J5CiAgICAgICAgICAgICAgaWdub3JlZW9mICAgIHRoZSBzaGVsbCB3aWxsIG5vdCBleGl0IHVwb24gcmVhZGluZyBFT0YKICAgICAgICAgICAgICBpbnRlcmFjdGl2ZS1jb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBjb21tZW50cyB0byBhcHBlYXIgaW4gaW50ZXJhY3RpdmUgY29tbWFuZHMKICAgICAgICAgICAgICBrZXl3b3JkICAgICAgc2FtZSBhcyAtawogICAgICAgICAgICAgIG1vbml0b3IgICAgICBzYW1lIGFzIC1tCiAgICAgICAgICAgICAgbm9jbG9iYmVyICAgIHNhbWUgYXMgLUMKICAgICAgICAgICAgICBub2V4ZWMgICAgICAgc2FtZSBhcyAtbgogICAgICAgICAgICAgIG5vZ2xvYiAgICAgICBzYW1lIGFzIC1mCiAgICAgICAgICAgICAgbm9sb2cgICAgICAgIGN1cnJlbnRseSBhY2NlcHRlZCBidXQgaWdub3JlZAogICAgICAgICAgICAgIG5vdGlmeSAgICAgICBzYW1lIGFzIC1iCiAgICAgICAgICAgICAgbm91bnNldCAgICAgIHNhbWUgYXMgLXUKICAgICAgICAgICAgICBvbmVjbWQgICAgICAgc2FtZSBhcyAtdAogICAgICAgICAgICAgIHBoeXNpY2FsICAgICBzYW1lIGFzIC1QCiAgICAgICAgICAgICAgcGlwZWZhaWwgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBwaXBlbGluZSBpcyB0aGUgc3RhdHVzIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGNvbW1hbmQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6ZXJvIGlmIG5vIGNvbW1hbmQgZXhpdGVkIHdpdGggYSBub24temVybyBzdGF0dXMKICAgICAgICAgICAgICBwb3NpeCAgICAgICAgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBiYXNoIHdoZXJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gdGhlIFBvc2l4IHN0YW5kYXJkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgIHByaXZpbGVnZWQgICBzYW1lIGFzIC1wCiAgICAgICAgICAgICAgdmVyYm9zZSAgICAgIHNhbWUgYXMgLXYKICAgICAgICAgICAgICB2aSAgICAgICAgICAgdXNlIGEgdmktc3R5bGUgbGluZSBlZGl0aW5nIGludGVyZmFjZQogICAgICAgICAgICAgIHh0cmFjZSAgICAgICBzYW1lIGFzIC14CiAgICAgIC1wICBUdXJuZWQgb24gd2hlbmV2ZXIgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcyBkbyBub3QgbWF0Y2guCiAgICAgICAgICBEaXNhYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSAkRU5WIGZpbGUgYW5kIGltcG9ydGluZyBvZiBzaGVsbAogICAgICAgICAgZnVuY3Rpb25zLiAgVHVybmluZyB0aGlzIG9wdGlvbiBvZmYgY2F1c2VzIHRoZSBlZmZlY3RpdmUgdWlkIGFuZAogICAgICAgICAgZ2lkIHRvIGJlIHNldCB0byB0aGUgcmVhbCB1aWQgYW5kIGdpZC4KICAgICAgLXQgIEV4aXQgYWZ0ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nIG9uZSBjb21tYW5kLgogICAgICAtdSAgVHJlYXQgdW5zZXQgdmFyaWFibGVzIGFzIGFuIGVycm9yIHdoZW4gc3Vic3RpdHV0aW5nLgogICAgICAtdiAgUHJpbnQgc2hlbGwgaW5wdXQgbGluZXMgYXMgdGhleSBhcmUgcmVhZC4KICAgICAgLXggIFByaW50IGNvbW1hbmRzIGFuZCB0aGVpciBhcmd1bWVudHMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAgICAgIC1CICB0aGUgc2hlbGwgd2lsbCBwZXJmb3JtIGJyYWNlIGV4cGFuc2lvbgogICAgICAtQyAgSWYgc2V0LCBkaXNhbGxvdyBleGlzdGluZyByZWd1bGFyIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICBieSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuCiAgICAgIC1FICBJZiBzZXQsIHRoZSBFUlIgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtSCAgRW5hYmxlICEgc3R5bGUgaGlzdG9yeSBzdWJzdGl0dXRpb24uICBUaGlzIGZsYWcgaXMgb24KICAgICAgICAgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgc2hlbGwgaXMgaW50ZXJhY3RpdmUuCiAgICAgIC1QICBJZiBzZXQsIGRvIG5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzCiAgICAgICAgICBzdWNoIGFzIGNkIHdoaWNoIGNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIC1UICBJZiBzZXQsIHRoZSBERUJVRyBhbmQgUkVUVVJOIHRyYXBzIGFyZSBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtLSAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGFyZ3VtZW50cywgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICAgICAgYXJlIHVuc2V0LgogICAgICAtICAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBUaGUgLXggYW5kIC12IG9wdGlvbnMgYXJlIHR1cm5lZCBvZmYuCiAgICAKICAgIFVzaW5nICsgcmF0aGVyIHRoYW4gLSBjYXVzZXMgdGhlc2UgZmxhZ3MgdG8gYmUgdHVybmVkIG9mZi4gIFRoZQogICAgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCB1cG9uIGludm9jYXRpb24gb2YgdGhlIHNoZWxsLiAgVGhlIGN1cnJlbnQKICAgIHNldCBvZiBmbGFncyBtYXkgYmUgZm91bmQgaW4gJC0uICBUaGUgcmVtYWluaW5nIG4gQVJHcyBhcmUgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycyBhbmQgYXJlIGFzc2lnbmVkLCBpbiBvcmRlciwgdG8gJDEsICQyLCAuLiAkbi4gIElmIG5vCiAgICBBUkdzIGFyZSBnaXZlbiwgYWxsIHNoZWxsIHZhcmlhYmxlcyBhcmUgcHJpbnRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBBIHN5bm9ueW0gZm9yIGBkZWNsYXJlJy4gIFNlZSBgaGVscCBkZWNsYXJlJy4AU2V0IHZhcmlhYmxlIHZhbHVlcyBhbmQgYXR0cmlidXRlcy4KICAgIAogICAgRGVjbGFyZSB2YXJpYWJsZXMgYW5kIGdpdmUgdGhlbSBhdHRyaWJ1dGVzLiAgSWYgbm8gTkFNRXMgYXJlIGdpdmVuLAogICAgZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWVzIG9mIGFsbCB2YXJpYWJsZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXJlc3RyaWN0IGFjdGlvbiBvciBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIGFuZCBkZWZpbml0aW9ucwogICAgICAtRglyZXN0cmljdCBkaXNwbGF5IHRvIGZ1bmN0aW9uIG5hbWVzIG9ubHkgKHBsdXMgbGluZSBudW1iZXIgYW5kCiAgICAJCXNvdXJjZSBmaWxlIHdoZW4gZGVidWdnaW5nKQogICAgICAtZwljcmVhdGUgZ2xvYmFsIHZhcmlhYmxlcyB3aGVuIHVzZWQgaW4gYSBzaGVsbCBmdW5jdGlvbjsgb3RoZXJ3aXNlCiAgICAJCWlnbm9yZWQKICAgICAgLXAJZGlzcGxheSB0aGUgYXR0cmlidXRlcyBhbmQgdmFsdWUgb2YgZWFjaCBOQU1FCiAgICAKICAgIE9wdGlvbnMgd2hpY2ggc2V0IGF0dHJpYnV0ZXM6CiAgICAgIC1hCXRvIG1ha2UgTkFNRXMgaW5kZXhlZCBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLUEJdG8gbWFrZSBOQU1FcyBhc3NvY2lhdGl2ZSBhcnJheXMgKGlmIHN1cHBvcnRlZCkKICAgICAgLWkJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgaW50ZWdlcicgYXR0cmlidXRlCiAgICAgIC1sCXRvIGNvbnZlcnQgTkFNRXMgdG8gbG93ZXIgY2FzZSBvbiBhc3NpZ25tZW50CiAgICAgIC1uCW1ha2UgTkFNRSBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgaXRzIHZhbHVlCiAgICAgIC1yCXRvIG1ha2UgTkFNRXMgcmVhZG9ubHkKICAgICAgLXQJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSBgdHJhY2UnIGF0dHJpYnV0ZQogICAgICAtdQl0byBjb252ZXJ0IE5BTUVzIHRvIHVwcGVyIGNhc2Ugb24gYXNzaWdubWVudAogICAgICAteAl0byBtYWtlIE5BTUVzIGV4cG9ydAogICAgCiAgICBVc2luZyBgKycgaW5zdGVhZCBvZiBgLScgdHVybnMgb2ZmIHRoZSBnaXZlbiBhdHRyaWJ1dGUuCiAgICAKICAgIFZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlZ2VyIGF0dHJpYnV0ZSBoYXZlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAoc2VlCiAgICB0aGUgYGxldCcgY29tbWFuZCkgcGVyZm9ybWVkIHdoZW4gdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUuCiAgICAKICAgIFdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uLCBgZGVjbGFyZScgbWFrZXMgTkFNRXMgbG9jYWwsIGFzIHdpdGggdGhlIGBsb2NhbCcKICAgIGNvbW1hbmQuICBUaGUgYC1nJyBvcHRpb24gc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYSB2YXJpYWJsZQogICAgYXNzaWdubWVudCBlcnJvciBvY2N1cnMuAFNoZWxsIGNvbW1hbmRzIG1hdGNoaW5nIGtleXdvcmQgYABTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkcyBgAFNoZWxsIG9wdGlvbnM6CgBTaGlmdCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAKICAgIFJlbmFtZSB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzICROKzEsJE4rMiAuLi4gdG8gJDEsJDIgLi4uICBJZiBOIGlzCiAgICBub3QgZ2l2ZW4sIGl0IGlzIGFzc3VtZWQgdG8gYmUgMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE4gaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFuICQjLgBTaWduYWwgJWQAU3BlY2lmeSBob3cgYXJndW1lbnRzIGFyZSB0byBiZSBjb21wbGV0ZWQgYnkgUmVhZGxpbmUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIHNwZWNpZnkgaG93IGFyZ3VtZW50cyBhcmUgdG8gYmUgY29tcGxldGVkLiAgSWYgbm8gb3B0aW9ucwogICAgYXJlIHN1cHBsaWVkLCBleGlzdGluZyBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zIGFyZSBwcmludGVkIGluIGEgd2F5IHRoYXQKICAgIGFsbG93cyB0aGVtIHRvIGJlIHJldXNlZCBhcyBpbnB1dC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgZXhpc3RpbmcgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucyBpbiBhIHJldXNhYmxlIGZvcm1hdAogICAgICAtcglyZW1vdmUgYSBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24gZm9yIGVhY2ggTkFNRSwgb3IsIGlmIG5vCiAgICAJCU5BTUVzIGFyZSBzdXBwbGllZCwgYWxsIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbnMKICAgICAgLUQJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIGFzIHRoZSBkZWZhdWx0IGZvciBjb21tYW5kcwogICAgCQl3aXRob3V0IGFueSBzcGVjaWZpYyBjb21wbGV0aW9uIGRlZmluZWQKICAgICAgLUUJYXBwbHkgdGhlIGNvbXBsZXRpb25zIGFuZCBhY3Rpb25zIHRvICJlbXB0eSIgY29tbWFuZHMgLS0KICAgIAkJY29tcGxldGlvbiBhdHRlbXB0ZWQgb24gYSBibGFuayBsaW5lCiAgICAKICAgIFdoZW4gY29tcGxldGlvbiBpcyBhdHRlbXB0ZWQsIHRoZSBhY3Rpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGUKICAgIHVwcGVyY2FzZS1sZXR0ZXIgb3B0aW9ucyBhcmUgbGlzdGVkIGFib3ZlLiAgVGhlIC1EIG9wdGlvbiB0YWtlcwogICAgcHJlY2VkZW5jZSBvdmVyIC1FLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBTdG9wcGVkAFN0b3BwZWQgKHNpZ25hbCkAU3RvcHBlZCAodHR5IGlucHV0KQBTdG9wcGVkICh0dHkgb3V0cHV0KQBTdG9wcGVkKCVzKQBTdXNwZW5kIHNoZWxsIGV4ZWN1dGlvbi4KICAgIAogICAgU3VzcGVuZCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc2hlbGwgdW50aWwgaXQgcmVjZWl2ZXMgYSBTSUdDT05UIHNpZ25hbC4KICAgIFVubGVzcyBmb3JjZWQsIGxvZ2luIHNoZWxscyBjYW5ub3QgYmUgc3VzcGVuZGVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglmb3JjZSB0aGUgc3VzcGVuZCwgZXZlbiBpZiB0aGUgc2hlbGwgaXMgYSBsb2dpbiBzaGVsbAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3Mgam9iIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBUSU1FRk9STUFUOiBgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAVGVybWluYXRlZABUaGUgbWFpbCBpbiAlcyBoYXMgYmVlbiByZWFkCgBUaGVyZSBhcmUgcnVubmluZyBqb2JzLgoAVGhlcmUgYXJlIHN0b3BwZWQgam9icy4KAFRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIGBoZWxwJyB0byBzZWUgdGhpcyBsaXN0LgpUeXBlIGBoZWxwIG5hbWUnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIGZ1bmN0aW9uIGBuYW1lJy4KVXNlIGBpbmZvIGJhc2gnIHRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgdGhlIHNoZWxsIGluIGdlbmVyYWwuClVzZSBgbWFuIC1rJyBvciBgaW5mbycgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgBUcmFwIHNpZ25hbHMgYW5kIG90aGVyIGV2ZW50cy4KICAgIAogICAgRGVmaW5lcyBhbmQgYWN0aXZhdGVzIGhhbmRsZXJzIHRvIGJlIHJ1biB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyBzaWduYWxzCiAgICBvciBvdGhlciBjb25kaXRpb25zLgogICAgCiAgICBBUkcgaXMgYSBjb21tYW5kIHRvIGJlIHJlYWQgYW5kIGV4ZWN1dGVkIHdoZW4gdGhlIHNoZWxsIHJlY2VpdmVzIHRoZQogICAgc2lnbmFsKHMpIFNJR05BTF9TUEVDLiAgSWYgQVJHIGlzIGFic2VudCAoYW5kIGEgc2luZ2xlIFNJR05BTF9TUEVDCiAgICBpcyBzdXBwbGllZCkgb3IgYC0nLCBlYWNoIHNwZWNpZmllZCBzaWduYWwgaXMgcmVzZXQgdG8gaXRzIG9yaWdpbmFsCiAgICB2YWx1ZS4gIElmIEFSRyBpcyB0aGUgbnVsbCBzdHJpbmcgZWFjaCBTSUdOQUxfU1BFQyBpcyBpZ25vcmVkIGJ5IHRoZQogICAgc2hlbGwgYW5kIGJ5IHRoZSBjb21tYW5kcyBpdCBpbnZva2VzLgogICAgCiAgICBJZiBhIFNJR05BTF9TUEVDIGlzIEVYSVQgKDApIEFSRyBpcyBleGVjdXRlZCBvbiBleGl0IGZyb20gdGhlIHNoZWxsLiAgSWYKICAgIGEgU0lHTkFMX1NQRUMgaXMgREVCVUcsIEFSRyBpcyBleGVjdXRlZCBiZWZvcmUgZXZlcnkgc2ltcGxlIGNvbW1hbmQuICBJZgogICAgYSBTSUdOQUxfU1BFQyBpcyBSRVRVUk4sIEFSRyBpcyBleGVjdXRlZCBlYWNoIHRpbWUgYSBzaGVsbCBmdW5jdGlvbiBvciBhCiAgICBzY3JpcHQgcnVuIGJ5IHRoZSAuIG9yIHNvdXJjZSBidWlsdGlucyBmaW5pc2hlcyBleGVjdXRpbmcuICBBIFNJR05BTF9TUEVDCiAgICBvZiBFUlIgbWVhbnMgdG8gZXhlY3V0ZSBBUkcgZWFjaCB0aW1lIGEgY29tbWFuZCdzIGZhaWx1cmUgd291bGQgY2F1c2UgdGhlCiAgICBzaGVsbCB0byBleGl0IHdoZW4gdGhlIC1lIG9wdGlvbiBpcyBlbmFibGVkLgogICAgCiAgICBJZiBubyBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCB0cmFwIHByaW50cyB0aGUgbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkCiAgICB3aXRoIGVhY2ggc2lnbmFsLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbAlwcmludCBhIGxpc3Qgb2Ygc2lnbmFsIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG51bWJlcnMKICAgICAgLXAJZGlzcGxheSB0aGUgdHJhcCBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBTSUdOQUxfU1BFQwogICAgCiAgICBFYWNoIFNJR05BTF9TUEVDIGlzIGVpdGhlciBhIHNpZ25hbCBuYW1lIGluIDxzaWduYWwuaD4gb3IgYSBzaWduYWwgbnVtYmVyLgogICAgU2lnbmFsIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGFuZCB0aGUgU0lHIHByZWZpeCBpcyBvcHRpb25hbC4gIEEKICAgIHNpZ25hbCBtYXkgYmUgc2VudCB0byB0aGUgc2hlbGwgd2l0aCAia2lsbCAtc2lnbmFsICQkIi4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgU0lHU1BFQyBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBUeXBlIGAlcyAtYyAiaGVscCBzZXQiJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaGVsbCBvcHRpb25zLgoAVHlwZSBgJXMgLWMgaGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgYnVpbHRpbiBjb21tYW5kcy4KAFVua25vd24gU2lnbmFsICMAVW5rbm93biBTaWduYWwgIyVkAFVua25vd24gZXJyb3IAVW5rbm93biBzdGF0dXMAVW5zZXQgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzIG9mIHNoZWxsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgb3IgZnVuY3Rpb24uCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIGZ1bmN0aW9uCiAgICAgIC12CXRyZWF0IGVhY2ggTkFNRSBhcyBhIHNoZWxsIHZhcmlhYmxlCiAgICAgIC1uCXRyZWF0IGVhY2ggTkFNRSBhcyBhIG5hbWUgcmVmZXJlbmNlIGFuZCB1bnNldCB0aGUgdmFyaWFibGUgaXRzZWxmCiAgICAJCXJhdGhlciB0aGFuIHRoZSB2YXJpYWJsZSBpdCByZWZlcmVuY2VzCiAgICAKICAgIFdpdGhvdXQgb3B0aW9ucywgdW5zZXQgZmlyc3QgdHJpZXMgdG8gdW5zZXQgYSB2YXJpYWJsZSwgYW5kIGlmIHRoYXQgZmFpbHMsCiAgICB0cmllcyB0byB1bnNldCBhIGZ1bmN0aW9uLgogICAgCiAgICBTb21lIHZhcmlhYmxlcyBjYW5ub3QgYmUgdW5zZXQ7IGFsc28gc2VlIGByZWFkb25seScuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhIE5BTUUgaXMgcmVhZC1vbmx5LgBVcmdlbnQgSU8gY29uZGl0aW9uAFVzYWdlOgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSAuLi4KCSVzIFtHTlUgbG9uZyBvcHRpb25dIFtvcHRpb25dIHNjcmlwdC1maWxlIC4uLgoAVXNlICIlcyIgdG8gbGVhdmUgdGhlIHNoZWxsLgoAVXNlIHRoZSBgYmFzaGJ1ZycgY29tbWFuZCB0byByZXBvcnQgYnVncy4KAFVzZXIgc2lnbmFsIDEAVXNlciBzaWduYWwgMgBXYWl0IGZvciBqb2IgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIGlkZW50aWZpZWQgYnkgYW4gSUQsIHdoaWNoIG1heSBiZSBhIHByb2Nlc3MgSUQgb3IgYQogICAgam9iIHNwZWNpZmljYXRpb24sIGFuZCByZXBvcnRzIGl0cyB0ZXJtaW5hdGlvbiBzdGF0dXMuICBJZiBJRCBpcyBub3QKICAgIGdpdmVuLCB3YWl0cyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2hpbGQgcHJvY2Vzc2VzLCBhbmQgdGhlIHJldHVybgogICAgc3RhdHVzIGlzIHplcm8uICBJZiBJRCBpcyBhIGEgam9iIHNwZWNpZmljYXRpb24sIHdhaXRzIGZvciBhbGwgcHJvY2Vzc2VzCiAgICBpbiB0aGF0IGpvYidzIHBpcGVsaW5lLgogICAgCiAgICBJZiB0aGUgLW4gb3B0aW9uIGlzIHN1cHBsaWVkLCB3YWl0cyBmb3IgdGhlIG5leHQgam9iIHRvIHRlcm1pbmF0ZSBhbmQKICAgIHJldHVybnMgaXRzIGV4aXQgc3RhdHVzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBJRDsgZmFpbHMgaWYgSUQgaXMgaW52YWxpZCBvciBhbiBpbnZhbGlkCiAgICBvcHRpb24gaXMgZ2l2ZW4uAFdhaXQgZm9yIHByb2Nlc3MgY29tcGxldGlvbiBhbmQgcmV0dXJuIGV4aXQgc3RhdHVzLgogICAgCiAgICBXYWl0cyBmb3IgZWFjaCBwcm9jZXNzIHNwZWNpZmllZCBieSBhIFBJRCBhbmQgcmVwb3J0cyBpdHMgdGVybWluYXRpb24gc3RhdHVzLgogICAgSWYgUElEIGlzIG5vdCBnaXZlbiwgd2FpdHMgZm9yIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNoaWxkIHByb2Nlc3NlcywKICAgIGFuZCB0aGUgcmV0dXJuIHN0YXR1cyBpcyB6ZXJvLiAgUElEIG11c3QgYmUgYSBwcm9jZXNzIElELgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBQSUQ7IGZhaWxzIGlmIFBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQKICAgIG9wdGlvbiBpcyBnaXZlbi4AV2luZG93IGNoYW5nZWQAV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBmb2xsb3dlZCBieSBhIG5ld2xpbmUuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhIHdyaXRlIGVycm9yIG9jY3Vycy4AV3JpdGUgYXJndW1lbnRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIERpc3BsYXkgdGhlIEFSR3MsIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUsIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCWRvIG5vdCBhcHBlbmQgYSBuZXdsaW5lCiAgICAgIC1lCWVuYWJsZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGJhY2tzbGFzaCBlc2NhcGVzCiAgICAgIC1FCWV4cGxpY2l0bHkgc3VwcHJlc3MgaW50ZXJwcmV0YXRpb24gb2YgYmFja3NsYXNoIGVzY2FwZXMKICAgIAogICAgYGVjaG8nIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXEUJZXNjYXBlIGNoYXJhY3RlcgogICAgICBcZglmb3JtIGZlZWQKICAgICAgXG4JbmV3IGxpbmUKICAgICAgXHIJY2FycmlhZ2UgcmV0dXJuCiAgICAgIFx0CWhvcml6b250YWwgdGFiCiAgICAgIFx2CXZlcnRpY2FsIHRhYgogICAgICBcXAliYWNrc2xhc2gKICAgICAgXDBubm4JdGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSBjb2RlIGlzIE5OTiAob2N0YWwpLiAgTk5OIGNhbiBiZQogICAgCQkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJCWNhbiBiZSBvbmUgb3IgdHdvIGhleCBkaWdpdHMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBZb3UgaGF2ZSBtYWlsIGluICRfAFlvdSBoYXZlIG5ldyBtYWlsIGluICRfAFsgYXJnLi4uIF0AW1sgZXhwcmVzc2lvbiBdXQBgJWMnOiBiYWQgY29tbWFuZABgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAYCVjJzogaW52YWxpZCBzeW1ib2xpYyBtb2RlIGNoYXJhY3RlcgBgJWMnOiBpbnZhbGlkIHN5bWJvbGljIG1vZGUgb3BlcmF0b3IAYCVjJzogaW52YWxpZCB0aW1lIGZvcm1hdCBzcGVjaWZpY2F0aW9uAGAlcyc6IGNhbm5vdCB1bmJpbmQAYCVzJzogaW52YWxpZCBhbGlhcyBuYW1lAGAlcyc6IGludmFsaWQga2V5bWFwIG5hbWUAYCVzJzogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQBgJXMnOiBpcyBhIHNwZWNpYWwgYnVpbHRpbgBgJXMnOiBtaXNzaW5nIGZvcm1hdCBjaGFyYWN0ZXIAYCVzJzogbm90IGEgcGlkIG9yIHZhbGlkIGpvYiBzcGVjAGAlcyc6IG5vdCBhIHZhbGlkIGlkZW50aWZpZXIAYCVzJzogdW5rbm93biBmdW5jdGlvbiBuYW1lAGApJyBleHBlY3RlZABgKScgZXhwZWN0ZWQsIGZvdW5kICVzAGA6JyBleHBlY3RlZCBmb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgBhZGRfcHJvY2VzczogcGlkICU1bGQgKCVzKSBtYXJrZWQgYXMgc3RpbGwgYWxpdmUAYWRkX3Byb2Nlc3M6IHByb2Nlc3MgJTVsZCAoJXMpIGluIHRoZV9waXBlbGluZQBhbGlhcyBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uIF0AYWxsX2xvY2FsX3ZhcmlhYmxlczogbm8gZnVuY3Rpb24gY29udGV4dCBhdCBjdXJyZW50IHNjb3BlAGFyZ3VtZW50AGFyZ3VtZW50IGV4cGVjdGVkAGFycmF5IHZhcmlhYmxlIHN1cHBvcnQgcmVxdWlyZWQAYXR0ZW1wdGVkIGFzc2lnbm1lbnQgdG8gbm9uLXZhcmlhYmxlAGJhZCBhcnJheSBzdWJzY3JpcHQAYmFkIGNvbW1hbmQgdHlwZQBiYWQgY29ubmVjdG9yAGJhZCBqdW1wAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgImAiIGluICVzAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3NpbmcgYCVzJyBpbiAlcwBiYXNoIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoPgoAYmFzaF9leGVjdXRlX3VuaXhfY29tbWFuZDogY2Fubm90IGZpbmQga2V5bWFwIGZvciBjb21tYW5kAGJnIFtqb2Jfc3BlYyAuLi5dAGJpbmQgWy1scHN2UFNWWF0gWy1tIGtleW1hcF0gWy1mIGZpbGVuYW1lXSBbLXEgbmFtZV0gWy11IG5hbWVdIFstciBrZXlzZXFdIFsteCBrZXlzZXE6c2hlbGwtY29tbWFuZF0gW2tleXNlcTpyZWFkbGluZS1mdW5jdGlvbiBvciByZWFkbGluZS1jb21tYW5kXQBicmFjZSBleHBhbnNpb246IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzAGJyYWNlIGV4cGFuc2lvbjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJWQgZWxlbWVudHMAYnJhY2UgZXhwYW5zaW9uOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBgJXMnAGJyZWFrIFtuXQBidWc6IGJhZCBleHBhc3NpZ24gdG9rZW4AYnVpbHRpbiBbc2hlbGwtYnVpbHRpbiBbYXJnIC4uLl1dAGNhbGxlciBbZXhwcl0AY2FuIG9ubHkgYHJldHVybicgZnJvbSBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0AGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBmdW5jdGlvbgBjYW5ub3QgYWxsb2NhdGUgbmV3IGZpbGUgZGVzY3JpcHRvciBmb3IgYmFzaCBpbnB1dCBmcm9tIGZkICVkAGNhbm5vdCBjcmVhdGUgdGVtcCBmaWxlIGZvciBoZXJlLWRvY3VtZW50OiAlcwBjYW5ub3QgZHVwbGljYXRlIGZkICVkIHRvIGZkICVkAGNhbm5vdCBkdXBsaWNhdGUgbmFtZWQgcGlwZSAlcyBhcyBmZCAlZABjYW5ub3QgZmluZCAlcyBpbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgY2hpbGQgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIGNvbW1hbmQgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBvcGVuIG5hbWVkIHBpcGUgJXMgZm9yIHJlYWRpbmcAY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3Igd3JpdGluZwBjYW5ub3Qgb3BlbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgcmVkaXJlY3Qgc3RhbmRhcmQgaW5wdXQgZnJvbSAvZGV2L251bGw6ICVzAGNhbm5vdCByZXNldCBub2RlbGF5IG1vZGUgZm9yIGZkICVkAGNhbm5vdCBzZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMgc2ltdWx0YW5lb3VzbHkAY2Fubm90IHNldCBnaWQgdG8gJWQ6IGVmZmVjdGl2ZSBnaWQgJWQAY2Fubm90IHNldCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwICglZCkAY2Fubm90IHNldCB1aWQgdG8gJWQ6IGVmZmVjdGl2ZSB1aWQgJWQAY2Fubm90IHNpbXVsdGFuZW91c2x5IHVuc2V0IGEgZnVuY3Rpb24gYW5kIGEgdmFyaWFibGUAY2Fubm90IHN0YXJ0IGRlYnVnZ2VyOyBkZWJ1Z2dpbmcgbW9kZSBkaXNhYmxlZABjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2UgYC1mJyB0byBtYWtlIGZ1bmN0aW9ucwBjYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgb2YgLWFucncAY2FzZSBXT1JEIGluIFtQQVRURVJOIFt8IFBBVFRFUk5dLi4uKSBDT01NQU5EUyA7O10uLi4gZXNhYwBjZCBbLUx8Wy1QIFstZV1dIFstQF1dIFtkaXJdAGNoaWxkIHNldHBnaWQgKCVsZCB0byAlbGQpAGNvbW1hbmQgWy1wVnZdIGNvbW1hbmQgW2FyZyAuLi5dAGNvbW1hbmQgc3Vic3RpdHV0aW9uOiBpZ25vcmVkIG51bGwgYnl0ZSBpbiBpbnB1dABjb21tYW5kX3N1YnN0aXR1dGU6IGNhbm5vdCBkdXBsaWNhdGUgcGlwZSBhcyBmZCAxAGNvbXBnZW4gWy1hYmNkZWZnamtzdXZdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbd29yZF0AY29tcGxldGUgWy1hYmNkZWZnamtzdXZdIFstcHJdIFstREVdIFstbyBvcHRpb25dIFstQSBhY3Rpb25dIFstRyBnbG9icGF0XSBbLVcgd29yZGxpc3RdICBbLUYgZnVuY3Rpb25dIFstQyBjb21tYW5kXSBbLVggZmlsdGVycGF0XSBbLVAgcHJlZml4XSBbLVMgc3VmZml4XSBbbmFtZSAuLi5dAGNvbXBsZXRpb246IGZ1bmN0aW9uIGAlcycgbm90IGZvdW5kAGNvbXBvcHQgWy1vfCtvIG9wdGlvbl0gWy1ERV0gW25hbWUgLi4uXQBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAY29udGludWUgW25dAGNvcHJvYyBbTkFNRV0gY29tbWFuZCBbcmVkaXJlY3Rpb25zXQBjb3VsZCBub3QgZmluZCAvdG1wLCBwbGVhc2UgY3JlYXRlIQBjcHJpbnRmOiBgJWMnOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAY3VycmVudABkZWNsYXJlIFstYUFmRmdpbG5ydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uIHwgcGlkIC4uLl0AZGl2aXNpb24gYnkgMABkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQBlY2hvIFstbl0gW2FyZyAuLi5dAGVjaG8gWy1uZUVdIFthcmcgLi4uXQBlbXB0eSBhcnJheSB2YXJpYWJsZSBuYW1lAGVuYWJsZSBbLWFdIFstZG5wc10gWy1mIGZpbGVuYW1lXSBbbmFtZSAuLi5dAGVycm9yIGdldHRpbmcgdGVybWluYWwgYXR0cmlidXRlczogJXMAZXJyb3IgaW1wb3J0aW5nIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGAlcycAZXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBhdHRyaWJ1dGVzOiAlcwBldmFsIFthcmcgLi4uXQBldmFsOiBtYXhpbXVtIGV2YWwgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpAGV4ZWMgWy1jbF0gWy1hIG5hbWVdIFtjb21tYW5kIFthcmd1bWVudHMgLi4uXV0gW3JlZGlyZWN0aW9uIC4uLl0AZXhlY3V0ZV9jb3Byb2M6IGNvcHJvYyBbJWQ6JXNdIHN0aWxsIGV4aXN0cwBleGl0IFtuXQBleHBlY3RlZCBgKScAZXhwb25lbnQgbGVzcyB0aGFuIDAAZXhwb3J0IFstZm5dIFtuYW1lWz12YWx1ZV0gLi4uXSBvciBleHBvcnQgLXAAZXhwcmVzc2lvbiBleHBlY3RlZABleHByZXNzaW9uIHJlY3Vyc2lvbiBsZXZlbCBleGNlZWRlZABmYyBbLWUgZW5hbWVdIFstbG5yXSBbZmlyc3RdIFtsYXN0XSBvciBmYyAtcyBbcGF0PXJlcF0gW2NvbW1hbmRdAGZnIFtqb2Jfc3BlY10AZmlsZSBkZXNjcmlwdG9yIG91dCBvZiByYW5nZQBmaWxlbmFtZSBhcmd1bWVudCByZXF1aXJlZABmb3IgKCggZXhwMTsgZXhwMjsgZXhwMyApKTsgZG8gQ09NTUFORFM7IGRvbmUAZm9yIE5BTUUgW2luIFdPUkRTIC4uLiBdIDsgZG8gQ09NTUFORFM7IGRvbmUAZm9ya2VkIHBpZCAlZCBhcHBlYXJzIGluIHJ1bm5pbmcgam9iICVkAGZvcm1hdCBwYXJzaW5nIHByb2JsZW06ICVzAGZyZWU6IGNhbGxlZCB3aXRoIGFscmVhZHkgZnJlZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAZnJlZTogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAZnJlZTogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAGZ1bmN0aW9uIG5hbWUgeyBDT01NQU5EUyA7IH0gb3IgbmFtZSAoKSB7IENPTU1BTkRTIDsgfQBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHNoZWxsIHdpbGwgZm9yY2UgZXZhbHVhdGlvbiBhcyBhbiBhcml0aG1ldGljIHN1YnN0aXR1dGlvbgBnZXRjd2Q6IGNhbm5vdCBhY2Nlc3MgcGFyZW50IGRpcmVjdG9yaWVzAGdldG9wdHMgb3B0c3RyaW5nIG5hbWUgW2FyZ10AaGFzaCBbLWxyXSBbLXAgcGF0aG5hbWVdIFstZHRdIFtuYW1lIC4uLl0AaGFzaGluZyBkaXNhYmxlZABoZWxwIFstZG1zXSBbcGF0dGVybiAuLi5dAGhlbHAgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24AaGVyZS1kb2N1bWVudCBhdCBsaW5lICVkIGRlbGltaXRlZCBieSBlbmQtb2YtZmlsZSAod2FudGVkIGAlcycpAGhpc3RvcnkgWy1jXSBbLWQgb2Zmc2V0XSBbbl0gb3IgaGlzdG9yeSAtYW5ydyBbZmlsZW5hbWVdIG9yIGhpc3RvcnkgLXBzIGFyZyBbYXJnLi4uXQBoaXN0b3J5IHBvc2l0aW9uAGhpc3Rvcnkgc3BlY2lmaWNhdGlvbgBoaXRzCWNvbW1hbmQKAGlkZW50aWZpZXIgZXhwZWN0ZWQgYWZ0ZXIgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50AGlmIENPTU1BTkRTOyB0aGVuIENPTU1BTkRTOyBbIGVsaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IF0uLi4gWyBlbHNlIENPTU1BTkRTOyBdIGZpAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGdldHBncnAgZmFpbGVkAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGxpbmUgZGlzY2lwbGluZQBpbml0aWFsaXplX2pvYl9jb250cm9sOiBzZXRwZ2lkAGludmFsaWQgYXJpdGhtZXRpYyBiYXNlAGludmFsaWQgYmFzZQBpbnZhbGlkIGNoYXJhY3RlciAlZCBpbiBleHBvcnRzdHIgZm9yICVzAGludmFsaWQgaGV4IG51bWJlcgBpbnZhbGlkIG51bWJlcgBpbnZhbGlkIG9jdGFsIG51bWJlcgBpbnZhbGlkIHNpZ25hbCBudW1iZXIAam9iICVkIHN0YXJ0ZWQgd2l0aG91dCBqb2IgY29udHJvbABqb2Jfc3BlYyBbJl0Aam9icyBbLWxucHJzXSBbam9ic3BlYyAuLi5dIG9yIGpvYnMgLXggY29tbWFuZCBbYXJnc10Aa2lsbCBbLXMgc2lnc3BlYyB8IC1uIHNpZ251bSB8IC1zaWdzcGVjXSBwaWQgfCBqb2JzcGVjIC4uLiBvciBraWxsIC1sIFtzaWdzcGVjXQBsYXN0IGNvbW1hbmQ6ICVzCgBsZXQgYXJnIFthcmcgLi4uXQBsaW1pdABsaW5lICVkOiAAbGluZSBlZGl0aW5nIG5vdCBlbmFibGVkAGxvYWQgZnVuY3Rpb24gZm9yICVzIHJldHVybnMgZmFpbHVyZSAoJWQpOiBub3QgbG9hZGVkAGxvY2FsIFtvcHRpb25dIG5hbWVbPXZhbHVlXSAuLi4AbG9nb3V0CgBsb2dvdXQgW25dAGxvb3AgY291bnQAbWFrZV9oZXJlX2RvY3VtZW50OiBiYWQgaW5zdHJ1Y3Rpb24gdHlwZSAlZABtYWtlX2xvY2FsX3ZhcmlhYmxlOiBubyBmdW5jdGlvbiBjb250ZXh0IGF0IGN1cnJlbnQgc2NvcGUAbWFrZV9yZWRpcmVjdGlvbjogcmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb24gYCVkJyBvdXQgb2YgcmFuZ2UAbWFsbG9jOiBibG9jayBvbiBmcmVlIGxpc3QgY2xvYmJlcmVkAG1hbGxvYzogZmFpbGVkIGFzc2VydGlvbjogJXMKAG1hcGZpbGUgWy1kIGRlbGltXSBbLW4gY291bnRdIFstTyBvcmlnaW5dIFstcyBjb3VudF0gWy10XSBbLXUgZmRdIFstQyBjYWxsYmFja10gWy1jIHF1YW50dW1dIFthcnJheV0AbWF4aW11bSBoZXJlLWRvY3VtZW50IGNvdW50IGV4Y2VlZGVkAG1pZ3JhdGUgcHJvY2VzcyB0byBhbm90aGVyIENQVQBtaXNzaW5nIGApJwBtaXNzaW5nIGBdJwBtaXNzaW5nIGhleCBkaWdpdCBmb3IgXHgAbWlzc2luZyB1bmljb2RlIGRpZ2l0IGZvciBcJWMAbmV0d29yayBvcGVyYXRpb25zIG5vdCBzdXBwb3J0ZWQAbm8gYD0nIGluIGV4cG9ydHN0ciBmb3IgJXMAbm8gY2xvc2luZyBgJWMnIGluICVzAG5vIGNvbW1hbmQgZm91bmQAbm8gaGVscCB0b3BpY3MgbWF0Y2ggYCVzJy4gIFRyeSBgaGVscCBoZWxwJyBvciBgbWFuIC1rICVzJyBvciBgaW5mbyAlcycuAG5vIGpvYiBjb250cm9sAG5vIGpvYiBjb250cm9sIGluIHRoaXMgc2hlbGwAbm8gbWF0Y2g6ICVzAG5vIG90aGVyIGRpcmVjdG9yeQBubyBvdGhlciBvcHRpb25zIGFsbG93ZWQgd2l0aCBgLXgnAG5vdCBjdXJyZW50bHkgZXhlY3V0aW5nIGNvbXBsZXRpb24gZnVuY3Rpb24Abm90IGxvZ2luIHNoZWxsOiB1c2UgYGV4aXQnAG51bGwgZGlyZWN0b3J5AG9jdGFsIG51bWJlcgBvbmx5IG1lYW5pbmdmdWwgaW4gYSBgZm9yJywgYHdoaWxlJywgb3IgYHVudGlsJyBsb29wAHBpcGUgZXJyb3IAcG9wX3Njb3BlOiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSB0ZW1wb3JhcnkgZW52aXJvbm1lbnQgc2NvcGUAcG9wX3Zhcl9jb250ZXh0OiBoZWFkIG9mIHNoZWxsX3ZhcmlhYmxlcyBub3QgYSBmdW5jdGlvbiBjb250ZXh0AHBvcF92YXJfY29udGV4dDogbm8gZ2xvYmFsX3ZhcmlhYmxlcyBjb250ZXh0AHBvcGQgWy1uXSBbK04gfCAtTl0AcG93ZXIgZmFpbHVyZSBpbW1pbmVudABwcmludF9jb21tYW5kOiBiYWQgY29ubmVjdG9yIGAlZCcAcHJpbnRmIFstdiB2YXJdIGZvcm1hdCBbYXJndW1lbnRzXQBwcm9nY29tcF9pbnNlcnQ6ICVzOiBOVUxMIENPTVBTUEVDAHByb2dyYW1tYWJsZV9jb21wbGV0aW9uOiAlczogcG9zc2libGUgcmV0cnkgbG9vcABwcm9ncmFtbWluZyBlcnJvcgBwdXNoZCBbLW5dIFsrTiB8IC1OIHwgZGlyXQBwd2QgWy1MUF0AcmVhZCBbLWVyc10gWy1hIGFycmF5XSBbLWQgZGVsaW1dIFstaSB0ZXh0XSBbLW4gbmNoYXJzXSBbLU4gbmNoYXJzXSBbLXAgcHJvbXB0XSBbLXQgdGltZW91dF0gWy11IGZkXSBbbmFtZSAuLi5dAHJlYWQgZXJyb3I6ICVkOiAlcwByZWFkYXJyYXkgWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAHJlYWRvbmx5IFstYUFmXSBbbmFtZVs9dmFsdWVdIC4uLl0gb3IgcmVhZG9ubHkgLXAAcmVhbGxvYzogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAcmVhbGxvYzogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAcmVhbGxvYzogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAHJlY3Vyc2lvbiBzdGFjayB1bmRlcmZsb3cAcmVkaXJlY3Rpb24gZXJyb3I6IGNhbm5vdCBkdXBsaWNhdGUgZmQAcmVnaXN0ZXJfYWxsb2M6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgYWxsb2NhdGVkPwoAcmVnaXN0ZXJfYWxsb2M6IGFsbG9jIHRhYmxlIGlzIGZ1bGwgd2l0aCBGSU5EX0FMTE9DPwoAcmVnaXN0ZXJfZnJlZTogJXAgYWxyZWFkeSBpbiB0YWJsZSBhcyBmcmVlPwoAcmVzdHJpY3RlZAByZXR1cm4gW25dAHJ1bl9wZW5kaW5nX3RyYXBzOiBiYWQgdmFsdWUgaW4gdHJhcF9saXN0WyVkXTogJXAAcnVuX3BlbmRpbmdfdHJhcHM6IHNpZ25hbCBoYW5kbGVyIGlzIFNJR19ERkwsIHJlc2VuZGluZyAlZCAoJXMpIHRvIG15c2VsZgBzYXZlX2Jhc2hfaW5wdXQ6IGJ1ZmZlciBhbHJlYWR5IGV4aXN0cyBmb3IgbmV3IGZkICVkAHNlbGVjdCBOQU1FIFtpbiBXT1JEUyAuLi4gO10gZG8gQ09NTUFORFM7IGRvbmUAc2V0IFstYWJlZmhrbW5wdHV2eEJDSFBdIFstbyBvcHRpb24tbmFtZV0gWy0tXSBbYXJnIC4uLl0Ac2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6ICVzOiBjYW5ub3QgY2hhbmdlIGxvY2FsZSAoJXMpOiAlcwBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2hlbGwgbGV2ZWwgKCVkKSB0b28gaGlnaCwgcmVzZXR0aW5nIHRvIDEAc2hlbGxfZ2V0Yzogc2hlbGxfaW5wdXRfbGluZV9zaXplICglenUpIGV4Y2VlZHMgU0laRV9NQVggKCVsdSk6IGxpbmUgdHJ1bmNhdGVkAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3IgaW4gZXhwcmVzc2lvbgBzeW50YXggZXJyb3IgbmVhciBgJXMnAHN5bnRheCBlcnJvciBuZWFyIHVuZXhwZWN0ZWQgdG9rZW4gYCVzJwBzeW50YXggZXJyb3I6IGAoKCVzKSknAHN5bnRheCBlcnJvcjogYDsnIHVuZXhwZWN0ZWQAc3ludGF4IGVycm9yOiBhcml0aG1ldGljIGV4cHJlc3Npb24gcmVxdWlyZWQAc3ludGF4IGVycm9yOiBpbnZhbGlkIGFyaXRobWV0aWMgb3BlcmF0b3IAc3ludGF4IGVycm9yOiBvcGVyYW5kIGV4cGVjdGVkAHN5bnRheCBlcnJvcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZQBzeXN0ZW0gY3Jhc2ggaW1taW5lbnQAdGVzdCBbZXhwcl0AdGltZSBbLXBdIHBpcGVsaW5lAHRvbyBtYW55IGFyZ3VtZW50cwB0cmFwIFstbHBdIFtbYXJnXSBzaWduYWxfc3BlYyAuLi5dAHRyYXBfaGFuZGxlcjogYmFkIHNpZ25hbCAlZAB0eXBlIFstYWZwdFBdIG5hbWUgW25hbWUgLi4uXQB0eXBlc2V0IFstYUFmRmdpbG5ydHV4XSBbLXBdIG5hbWVbPXZhbHVlXSAuLi4AdWxpbWl0IFstU0hhYmNkZWZpa2xtbnBxcnN0dXZ4UFRdIFtsaW1pdF0AdW1hc2sgWy1wXSBbLVNdIFttb2RlXQB1bmFsaWFzIFstYV0gbmFtZSBbbmFtZSAuLi5dAHVuZXhwZWN0ZWQgRU9GIHdoaWxlIGxvb2tpbmcgZm9yIGBdXScAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcgYCVjJwB1bmV4cGVjdGVkIEVPRiB3aGlsZSBsb29raW5nIGZvciBtYXRjaGluZyBgKScAdW5leHBlY3RlZCBhcmd1bWVudCBgJXMnIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IGAlcycgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCBhcmd1bWVudCB0byBjb25kaXRpb25hbCB1bmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIHRva2VuICVkIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJWMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBjb25kaXRpb25hbCBiaW5hcnkgb3BlcmF0b3IgZXhwZWN0ZWQAdW5leHBlY3RlZCB0b2tlbiBgJXMnLCBleHBlY3RlZCBgKScAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFstbl0gW25hbWUgLi4uXQB1bnRpbCBDT01NQU5EUzsgZG8gQ09NTUFORFM7IGRvbmUAdmFsdWUgdG9vIGdyZWF0IGZvciBiYXNlAHZhcmlhYmxlcyAtIE5hbWVzIGFuZCBtZWFuaW5ncyBvZiBzb21lIHNoZWxsIHZhcmlhYmxlcwB3YWl0IFstbl0gW2lkIC4uLl0Ad2FpdCBbcGlkIC4uLl0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQBQcm9qZWN0LUlkLVZlcnNpb246IEdOVSBiYXNoIDQuNC1yZWxlYXNlClJlcG9ydC1Nc2dpZC1CdWdzLVRvOiAKUE9ULUNyZWF0aW9uLURhdGU6IDIwMTYtMDktMTAgMTI6NDItMDQwMApQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTA5LTEwIDEyOjQyLTA0MDAKTGFzdC1UcmFuc2xhdG9yOiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZApMYW5ndWFnZS1UZWFtOiBub25lCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0ClBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpOwoAB3RpbWVkIG91dCB3YWl0aW5nIGZvciBpbnB1dDogYXV0by1sb2dvdXQKAAktJXMgb3IgLW8gb3B0aW9uCgAJLWlscnNEIG9yIC1jIGNvbW1hbmQgb3IgLU8gc2hvcHRfb3B0aW9uCQkoaW52b2NhdGlvbiBvbmx5KQoADQptYWxsb2M6ICVzOiVkOiBhc3NlcnRpb24gYm90Y2hlZA0KACAgKHdkOiAlcykAIChjb3JlIGR1bXBlZCkAIGxpbmUgACQlczogY2Fubm90IGFzc2lnbiBpbiB0aGlzIHdheQAlYyVjOiBpbnZhbGlkIG9wdGlvbgAlZDogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6ICVzACVzIGNhbiBiZSBpbnZva2VkIHZpYSAAJXMgaGFzIG51bGwgZXhwb3J0c3RyACVzIGlzICVzCgAlcyBpcyBhIGZ1bmN0aW9uCgAlcyBpcyBhIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGEgc2hlbGwga2V5d29yZAoAJXMgaXMgYSBzcGVjaWFsIHNoZWxsIGJ1aWx0aW4KACVzIGlzIGFsaWFzZWQgdG8g4oCYJXPigJkKACVzIGlzIGhhc2hlZCAoJXMpCgAlcyBpcyBub3QgYm91bmQgdG8gYW55IGtleXMuCgAlcyBvdXQgb2YgcmFuZ2UAJXMlcyVzOiAlcyAoZXJyb3IgdG9rZW4gaXMg4oCcJXPigJ0pACVzOiAlcwAlczogJXMgb3V0IG9mIHJhbmdlACVzOiAlczogYmFkIGludGVycHJldGVyACVzOiAlczogY2Fubm90IG9wZW4gYXMgRklMRQAlczogJXM6IGNvbXBhdGliaWxpdHkgdmFsdWUgb3V0IG9mIHJhbmdlACVzOiAlczogaW52YWxpZCB2YWx1ZSBmb3IgdHJhY2UgZmlsZSBkZXNjcmlwdG9yACVzOiAlczogbXVzdCB1c2Ugc3Vic2NyaXB0IHdoZW4gYXNzaWduaW5nIGFzc29jaWF0aXZlIGFycmF5ACVzOiAlczolZDogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcwAlczogJXM6JWQ6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMgKCVsdSBieXRlcyBhbGxvY2F0ZWQpACVzOiBJcyBhIGRpcmVjdG9yeQAlczogYW1iaWd1b3VzIGpvYiBzcGVjACVzOiBhbWJpZ3VvdXMgcmVkaXJlY3QAJXM6IGFyZ3VtZW50cyBtdXN0IGJlIHByb2Nlc3Mgb3Igam9iIElEcwAlczogYXNzaWduaW5nIGludGVnZXIgdG8gbmFtZSByZWZlcmVuY2UAJXM6IGJhZCBuZXR3b3JrIHBhdGggc3BlY2lmaWNhdGlvbgAlczogYmFkIHN1YnN0aXR1dGlvbgAlczogYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzACVzOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzICglbHUgYnl0ZXMgYWxsb2NhdGVkKQAlczogY2Fubm90IGFzc2lnbiBmZCB0byB2YXJpYWJsZQAlczogY2Fubm90IGFzc2lnbiBsaXN0IHRvIGFycmF5IG1lbWJlcgAlczogY2Fubm90IGFzc2lnbiB0byBub24tbnVtZXJpYyBpbmRleAAlczogY2Fubm90IGNvbnZlcnQgYXNzb2NpYXRpdmUgdG8gaW5kZXhlZCBhcnJheQAlczogY2Fubm90IGNvbnZlcnQgaW5kZXhlZCB0byBhc3NvY2lhdGl2ZSBhcnJheQAlczogY2Fubm90IGNyZWF0ZTogJXMAJXM6IGNhbm5vdCBkZWxldGU6ICVzACVzOiBjYW5ub3QgZGVzdHJveSBhcnJheSB2YXJpYWJsZXMgaW4gdGhpcyB3YXkAJXM6IGNhbm5vdCBleGVjdXRlIGJpbmFyeSBmaWxlACVzOiBjYW5ub3QgZXhlY3V0ZSBiaW5hcnkgZmlsZTogJXMAJXM6IGNhbm5vdCBleGVjdXRlOiAlcwAlczogY2Fubm90IGV4cG9ydAAlczogY2Fubm90IGdldCBsaW1pdDogJXMAJXM6IGNhbm5vdCBtb2RpZnkgbGltaXQ6ICVzACVzOiBjYW5ub3Qgb3BlbiB0ZW1wIGZpbGU6ICVzACVzOiBjYW5ub3Qgb3BlbjogJXMAJXM6IGNhbm5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZQAlczogY2Fubm90IHJlYWQ6ICVzACVzOiBjYW5ub3QgdW5zZXQAJXM6IGNhbm5vdCB1bnNldDogcmVhZG9ubHkgJXMAJXM6IGNpcmN1bGFyIG5hbWUgcmVmZXJlbmNlACVzOiBjb21tYW5kIG5vdCBmb3VuZAAlczogZXJyb3IgcmV0cmlldmluZyBjdXJyZW50IGRpcmVjdG9yeTogJXM6ICVzCgAlczogZXhwcmVzc2lvbiBlcnJvcgoAJXM6IGZpbGUgaXMgdG9vIGxhcmdlACVzOiBmaWxlIG5vdCBmb3VuZAAlczogZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCDigJgi4oCZACVzOiBoYXNoIHRhYmxlIGVtcHR5CgAlczogaGlzdG9yeSBleHBhbnNpb24gZmFpbGVkACVzOiBob3N0IHVua25vd24AJXM6IGlsbGVnYWwgb3B0aW9uIC0tICVjCgAlczogaW5saWIgZmFpbGVkACVzOiBpbnRlZ2VyIGV4cHJlc3Npb24gZXhwZWN0ZWQAJXM6IGludmFsaWQgYWN0aW9uIG5hbWUAJXM6IGludmFsaWQgYXJndW1lbnQAJXM6IGludmFsaWQgYXJyYXkgb3JpZ2luACVzOiBpbnZhbGlkIGFzc29jaWF0aXZlIGFycmF5IGtleQAlczogaW52YWxpZCBjYWxsYmFjayBxdWFudHVtACVzOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIGluZGlyZWN0IGV4cGFuc2lvbgAlczogaW52YWxpZCBsaW1pdCBhcmd1bWVudAAlczogaW52YWxpZCBsaW5lIGNvdW50ACVzOiBpbnZhbGlkIG9wdGlvbgAlczogaW52YWxpZCBvcHRpb24gbmFtZQAlczogaW52YWxpZCBzZXJ2aWNlACVzOiBpbnZhbGlkIHNoZWxsIG9wdGlvbiBuYW1lACVzOiBpbnZhbGlkIHNpZ25hbCBzcGVjaWZpY2F0aW9uACVzOiBpbnZhbGlkIHRpbWVvdXQgc3BlY2lmaWNhdGlvbgAlczogaW52YWxpZCB0aW1lc3RhbXAAJXM6IGludmFsaWQgdmFyaWFibGUgbmFtZQAlczogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQAlczogaXMgYSBkaXJlY3RvcnkAJXM6IGpvYiAlZCBhbHJlYWR5IGluIGJhY2tncm91bmQAJXM6IGpvYiBoYXMgdGVybWluYXRlZAAlczogbGluZSAlZDogACVzOiBtYXhpbXVtIGZ1bmN0aW9uIG5lc3RpbmcgbGV2ZWwgZXhjZWVkZWQgKCVkKQAlczogbWF4aW11bSBzb3VyY2UgbmVzdGluZyBsZXZlbCBleGNlZWRlZCAoJWQpACVzOiBtaXNzaW5nIGNvbG9uIHNlcGFyYXRvcgAlczogbmFtZXJlZiB2YXJpYWJsZSBzZWxmIHJlZmVyZW5jZXMgbm90IGFsbG93ZWQAJXM6IG5vIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbgAlczogbm8gam9iIGNvbnRyb2wAJXM6IG5vIHN1Y2ggam9iACVzOiBub3QgYSBmdW5jdGlvbgAlczogbm90IGEgcmVndWxhciBmaWxlACVzOiBub3QgYSBzaGVsbCBidWlsdGluACVzOiBub3QgYW4gYXJyYXkgdmFyaWFibGUAJXM6IG5vdCBhbiBpbmRleGVkIGFycmF5ACVzOiBub3QgZHluYW1pY2FsbHkgbG9hZGVkACVzOiBub3QgZm91bmQAJXM6IG51bWVyaWMgYXJndW1lbnQgcmVxdWlyZWQAJXM6IG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudAAlczogb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjCgAlczogcGFyYW1ldGVyIG51bGwgb3Igbm90IHNldAAlczogcXVvdGVkIGNvbXBvdW5kIGFycmF5IGFzc2lnbm1lbnQgZGVwcmVjYXRlZAAlczogcmVhZG9ubHkgZnVuY3Rpb24AJXM6IHJlYWRvbmx5IHZhcmlhYmxlACVzOiByZWZlcmVuY2UgdmFyaWFibGUgY2Fubm90IGJlIGFuIGFycmF5ACVzOiByZW1vdmluZyBuYW1lcmVmIGF0dHJpYnV0ZQAlczogcmVzdHJpY3RlZAAlczogcmVzdHJpY3RlZDogY2Fubm90IHJlZGlyZWN0IG91dHB1dAAlczogcmVzdHJpY3RlZDogY2Fubm90IHNwZWNpZnkg4oCYL+KAmSBpbiBjb21tYW5kIG5hbWVzACVzOiBzdWJzdHJpbmcgZXhwcmVzc2lvbiA8IDAAJXM6IHVuYXJ5IG9wZXJhdG9yIGV4cGVjdGVkACVzOiB1bmJvdW5kIHZhcmlhYmxlACVzOiB1c2FnZTogACVzOiB2YXJpYWJsZSBtYXkgbm90IGJlIGFzc2lnbmVkIHZhbHVlACgoIGV4cHJlc3Npb24gKSkAKGNvcmUgZHVtcGVkKSAAKHdkIG5vdzogJXMpCgAuIGZpbGVuYW1lIFthcmd1bWVudHNdAC9kZXYvKHRjcHx1ZHApL2hvc3QvcG9ydCBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgbmV0d29ya2luZwAvdG1wIG11c3QgYmUgYSB2YWxpZCBkaXJlY3RvcnkgbmFtZQA8bm8gY3VycmVudCBkaXJlY3Rvcnk+AEFCT1JUIGluc3RydWN0aW9uAEFib3J0aW5nLi4uAEFkZCBkaXJlY3RvcmllcyB0byBzdGFjay4KICAgIAogICAgQWRkcyBhIGRpcmVjdG9yeSB0byB0aGUgdG9wIG9mIHRoZSBkaXJlY3Rvcnkgc3RhY2ssIG9yIHJvdGF0ZXMKICAgIHRoZSBzdGFjaywgbWFraW5nIHRoZSBuZXcgdG9wIG9mIHRoZSBzdGFjayB0aGUgY3VycmVudCB3b3JraW5nCiAgICBkaXJlY3RvcnkuICBXaXRoIG5vIGFyZ3VtZW50cywgZXhjaGFuZ2VzIHRoZSB0b3AgdHdvIGRpcmVjdG9yaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIGFkZGluZwogICAgCQlkaXJlY3RvcmllcyB0byB0aGUgc3RhY2ssIHNvIG9ubHkgdGhlIHN0YWNrIGlzIG1hbmlwdWxhdGVkLgogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCVJvdGF0ZXMgdGhlIHN0YWNrIHNvIHRoYXQgdGhlIE50aCBkaXJlY3RvcnkgKGNvdW50aW5nCiAgICAJCWZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aAogICAgCQl6ZXJvKSBpcyBhdCB0aGUgdG9wLgogICAgCiAgICAgIC1OCVJvdGF0ZXMgdGhlIHN0YWNrIHNvIHRoYXQgdGhlIE50aCBkaXJlY3RvcnkgKGNvdW50aW5nCiAgICAJCWZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5IOKAmGRpcnPigJksIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVybykgaXMgYXQgdGhlIHRvcC4KICAgIAogICAgICBkaXIJQWRkcyBESVIgdG8gdGhlIGRpcmVjdG9yeSBzdGFjayBhdCB0aGUgdG9wLCBtYWtpbmcgaXQgdGhlCiAgICAJCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUg4oCYZGlyc+KAmSBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIHN1cHBsaWVkIG9yIHRoZSBkaXJlY3RvcnkKICAgIGNoYW5nZSBmYWlscy4AQWRkcyBhIGRpcmVjdG9yeSB0byB0aGUgdG9wIG9mIHRoZSBkaXJlY3Rvcnkgc3RhY2ssIG9yIHJvdGF0ZXMKICAgIHRoZSBzdGFjaywgbWFraW5nIHRoZSBuZXcgdG9wIG9mIHRoZSBzdGFjayB0aGUgY3VycmVudCB3b3JraW5nCiAgICBkaXJlY3RvcnkuICBXaXRoIG5vIGFyZ3VtZW50cywgZXhjaGFuZ2VzIHRoZSB0b3AgdHdvIGRpcmVjdG9yaWVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIGFkZGluZwogICAgCWRpcmVjdG9yaWVzIHRvIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUm90YXRlcyB0aGUgc3RhY2sgc28gdGhhdCB0aGUgTnRoIGRpcmVjdG9yeSAoY291bnRpbmcKICAgIAlmcm9tIHRoZSBsZWZ0IG9mIHRoZSBsaXN0IHNob3duIGJ5IOKAmGRpcnPigJksIHN0YXJ0aW5nIHdpdGgKICAgIAl6ZXJvKSBpcyBhdCB0aGUgdG9wLgogICAgCiAgICAgIC1OCVJvdGF0ZXMgdGhlIHN0YWNrIHNvIHRoYXQgdGhlIE50aCBkaXJlY3RvcnkgKGNvdW50aW5nCiAgICAJZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3Qgc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aAogICAgCXplcm8pIGlzIGF0IHRoZSB0b3AuCiAgICAKICAgICAgZGlyCUFkZHMgRElSIHRvIHRoZSBkaXJlY3Rvcnkgc3RhY2sgYXQgdGhlIHRvcCwgbWFraW5nIGl0IHRoZQogICAgCW5ldyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBUaGUg4oCYZGlyc+KAmSBidWlsdGluIGRpc3BsYXlzIHRoZSBkaXJlY3Rvcnkgc3RhY2suAEFsYXJtIChwcm9maWxlKQBBbGFybSAodmlydHVhbCkAQWxhcm0gY2xvY2sAQXJpdGhtZXRpYyBmb3IgbG9vcC4KICAgIAogICAgRXF1aXZhbGVudCB0bwogICAgCSgoIEVYUDEgKSkKICAgIAl3aGlsZSAoKCBFWFAyICkpOyBkbwogICAgCQlDT01NQU5EUwogICAgCQkoKCBFWFAzICkpCiAgICAJZG9uZQogICAgRVhQMSwgRVhQMiwgYW5kIEVYUDMgYXJlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuICBJZiBhbnkgZXhwcmVzc2lvbiBpcwogICAgb21pdHRlZCwgaXQgYmVoYXZlcyBhcyBpZiBpdCBldmFsdWF0ZXMgdG8gMS4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4AQlBUIHRyYWNlL3RyYXAAQmFkIHN5c3RlbSBjYWxsAEJvZ3VzIHNpZ25hbABCcm9rZW4gcGlwZQBCdXMgZXJyb3IAQ1BVIGxpbWl0AENoYW5nZSB0aGUgc2hlbGwgd29ya2luZyBkaXJlY3RvcnkuCiAgICAKICAgIENoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gRElSLiAgVGhlIGRlZmF1bHQgRElSIGlzIHRoZSB2YWx1ZSBvZiB0aGUKICAgIEhPTUUgc2hlbGwgdmFyaWFibGUuCiAgICAKICAgIFRoZSB2YXJpYWJsZSBDRFBBVEggZGVmaW5lcyB0aGUgc2VhcmNoIHBhdGggZm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZwogICAgRElSLiAgQWx0ZXJuYXRpdmUgZGlyZWN0b3J5IG5hbWVzIGluIENEUEFUSCBhcmUgc2VwYXJhdGVkIGJ5IGEgY29sb24gKDopLgogICAgQSBudWxsIGRpcmVjdG9yeSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIElmIERJUiBiZWdpbnMKICAgIHdpdGggYSBzbGFzaCAoLyksIHRoZW4gQ0RQQVRIIGlzIG5vdCB1c2VkLgogICAgCiAgICBJZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBmb3VuZCwgYW5kIHRoZSBzaGVsbCBvcHRpb24g4oCYY2RhYmxlX3ZhcnPigJkgaXMgc2V0LAogICAgdGhlIHdvcmQgaXMgYXNzdW1lZCB0byBiZSAgYSB2YXJpYWJsZSBuYW1lLiAgSWYgdGhhdCB2YXJpYWJsZSBoYXMgYSB2YWx1ZSwKICAgIGl0cyB2YWx1ZSBpcyB1c2VkIGZvciBESVIuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1MCWZvcmNlIHN5bWJvbGljIGxpbmtzIHRvIGJlIGZvbGxvd2VkOiByZXNvbHZlIHN5bWJvbGljCiAgICAJCWxpbmtzIGluIERJUiBhZnRlciBwcm9jZXNzaW5nIGluc3RhbmNlcyBvZiDigJguLuKAmQogICAgICAtUAl1c2UgdGhlIHBoeXNpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aG91dCBmb2xsb3dpbmcKICAgIAkJc3ltYm9saWMgbGlua3M6IHJlc29sdmUgc3ltYm9saWMgbGlua3MgaW4gRElSIGJlZm9yZQogICAgCQlwcm9jZXNzaW5nIGluc3RhbmNlcyBvZiDigJguLuKAmQogICAgICAtZQlpZiB0aGUgLVAgb3B0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIGN1cnJlbnQgd29ya2luZwogICAgCQlkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQgc3VjY2Vzc2Z1bGx5LCBleGl0IHdpdGgKICAgIAkJYSBub24temVybyBzdGF0dXMKICAgICAgLUAJb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHByZXNlbnQgYSBmaWxlIHdpdGggZXh0ZW5kZWQKICAgIAkJYXR0cmlidXRlcyBhcyBhIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlIGF0dHJpYnV0ZXMKICAgIAogICAgVGhlIGRlZmF1bHQgaXMgdG8gZm9sbG93IHN5bWJvbGljIGxpbmtzLCBhcyBpZiDigJgtTOKAmSB3ZXJlIHNwZWNpZmllZC4KICAgIOKAmC4u4oCZIGlzIHByb2Nlc3NlZCBieSByZW1vdmluZyB0aGUgaW1tZWRpYXRlbHkgcHJldmlvdXMgcGF0aG5hbWUgY29tcG9uZW50CiAgICBiYWNrIHRvIGEgc2xhc2ggb3IgdGhlIGJlZ2lubmluZyBvZiBESVIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAwIGlmIHRoZSBkaXJlY3RvcnkgaXMgY2hhbmdlZCwgYW5kIGlmICRQV0QgaXMgc2V0IHN1Y2Nlc3NmdWxseSB3aGVuCiAgICAtUCBpcyB1c2VkOyBub24temVybyBvdGhlcndpc2UuAENoaWxkIGRlYXRoIG9yIHN0b3AAQ29tbW9uIHNoZWxsIHZhcmlhYmxlIG5hbWVzIGFuZCB1c2FnZS4KICAgIAogICAgQkFTSF9WRVJTSU9OCVZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoaXMgQmFzaC4KICAgIENEUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaAogICAgCQlmb3IgZGlyZWN0b3JpZXMgZ2l2ZW4gYXMgYXJndW1lbnRzIHRvIOKAmGNk4oCZLgogICAgR0xPQklHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIGRlc2NyaWJpbmcgZmlsZW5hbWVzIHRvCiAgICAJCWJlIGlnbm9yZWQgYnkgcGF0aG5hbWUgZXhwYW5zaW9uLgogICAgSElTVEZJTEUJVGhlIG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgeW91ciBjb21tYW5kIGhpc3RvcnkgaXMgc3RvcmVkLgogICAgSElTVEZJTEVTSVpFCVRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGlzIGZpbGUgY2FuIGNvbnRhaW4uCiAgICBISVNUU0laRQlUaGUgbWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBsaW5lcyB0aGF0IGEgcnVubmluZwogICAgCQlzaGVsbCBjYW4gYWNjZXNzLgogICAgSE9NRQlUaGUgY29tcGxldGUgcGF0aG5hbWUgdG8geW91ciBsb2dpbiBkaXJlY3RvcnkuCiAgICBIT1NUTkFNRQlUaGUgbmFtZSBvZiB0aGUgY3VycmVudCBob3N0LgogICAgSE9TVFRZUEUJVGhlIHR5cGUgb2YgQ1BVIHRoaXMgdmVyc2lvbiBvZiBCYXNoIGlzIHJ1bm5pbmcgdW5kZXIuCiAgICBJR05PUkVFT0YJQ29udHJvbHMgdGhlIGFjdGlvbiBvZiB0aGUgc2hlbGwgb24gcmVjZWlwdCBvZiBhbiBFT0YKICAgIAkJY2hhcmFjdGVyIGFzIHRoZSBzb2xlIGlucHV0LiAgSWYgc2V0LCB0aGVuIHRoZSB2YWx1ZQogICAgCQlvZiBpdCBpcyB0aGUgbnVtYmVyIG9mIEVPRiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHNlZW4KICAgIAkJaW4gYSByb3cgb24gYW4gZW1wdHkgbGluZSBiZWZvcmUgdGhlIHNoZWxsIHdpbGwgZXhpdAogICAgCQkoZGVmYXVsdCAxMCkuICBXaGVuIHVuc2V0LCBFT0Ygc2lnbmlmaWVzIHRoZSBlbmQgb2YgaW5wdXQuCiAgICBNQUNIVFlQRQlBIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN5c3RlbSBCYXNoIGlzIHJ1bm5pbmcgb24uCiAgICBNQUlMQ0hFQ0sJSG93IG9mdGVuLCBpbiBzZWNvbmRzLCBCYXNoIGNoZWNrcyBmb3IgbmV3IG1haWwuCiAgICBNQUlMUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGVuYW1lcyB3aGljaCBCYXNoIGNoZWNrcwogICAgCQlmb3IgbmV3IG1haWwuCiAgICBPU1RZUEUJVGhlIHZlcnNpb24gb2YgVW5peCB0aGlzIHZlcnNpb24gb2YgQmFzaCBpcyBydW5uaW5nIG9uLgogICAgUEFUSAlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCB3aGVuCiAgICAJCWxvb2tpbmcgZm9yIGNvbW1hbmRzLgogICAgUFJPTVBUX0NPTU1BTkQJQSBjb21tYW5kIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgcHJpbnRpbmcgb2YgZWFjaAogICAgCQlwcmltYXJ5IHByb21wdC4KICAgIFBTMQkJVGhlIHByaW1hcnkgcHJvbXB0IHN0cmluZy4KICAgIFBTMgkJVGhlIHNlY29uZGFyeSBwcm9tcHQgc3RyaW5nLgogICAgUFdECQlUaGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICBTSEVMTE9QVFMJQSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBlbmFibGVkIHNoZWxsIG9wdGlvbnMuCiAgICBURVJNCVRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRlcm1pbmFsIHR5cGUuCiAgICBUSU1FRk9STUFUCVRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aW1pbmcgc3RhdGlzdGljcyBkaXNwbGF5ZWQgYnkgdGhlCiAgICAJCeKAmHRpbWXigJkgcmVzZXJ2ZWQgd29yZC4KICAgIGF1dG9fcmVzdW1lCU5vbi1udWxsIG1lYW5zIGEgY29tbWFuZCB3b3JkIGFwcGVhcmluZyBvbiBhIGxpbmUgYnkKICAgIAkJaXRzZWxmIGlzIGZpcnN0IGxvb2tlZCBmb3IgaW4gdGhlIGxpc3Qgb2YgY3VycmVudGx5CiAgICAJCXN0b3BwZWQgam9icy4gIElmIGZvdW5kIHRoZXJlLCB0aGF0IGpvYiBpcyBmb3JlZ3JvdW5kZWQuCiAgICAJCUEgdmFsdWUgb2Yg4oCYZXhhY3TigJkgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJZXhhY3RseSBtYXRjaCBhIGNvbW1hbmQgaW4gdGhlIGxpc3Qgb2Ygc3RvcHBlZCBqb2JzLiAgQQogICAgCQl2YWx1ZSBvZiDigJhzdWJzdHJpbmfigJkgbWVhbnMgdGhhdCB0aGUgY29tbWFuZCB3b3JkIG11c3QKICAgIAkJbWF0Y2ggYSBzdWJzdHJpbmcgb2YgdGhlIGpvYi4gIEFueSBvdGhlciB2YWx1ZSBtZWFucyB0aGF0CiAgICAJCXRoZSBjb21tYW5kIG11c3QgYmUgYSBwcmVmaXggb2YgYSBzdG9wcGVkIGpvYi4KICAgIGhpc3RjaGFycwlDaGFyYWN0ZXJzIGNvbnRyb2xsaW5nIGhpc3RvcnkgZXhwYW5zaW9uIGFuZCBxdWljawogICAgCQlzdWJzdGl0dXRpb24uICBUaGUgZmlyc3QgY2hhcmFjdGVyIGlzIHRoZSBoaXN0b3J5CiAgICAJCXN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIsIHVzdWFsbHkg4oCYIeKAmS4gIFRoZSBzZWNvbmQgaXMKICAgIAkJdGhlIOKAmHF1aWNrIHN1YnN0aXR1dGlvbuKAmSBjaGFyYWN0ZXIsIHVzdWFsbHkg4oCYXuKAmS4gIFRoZQogICAgCQl0aGlyZCBpcyB0aGUg4oCYaGlzdG9yeSBjb21tZW504oCZIGNoYXJhY3RlciwgdXN1YWxseSDigJgj4oCZLgogICAgSElTVElHTk9SRQlBIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIHVzZWQgdG8gZGVjaWRlIHdoaWNoCiAgICAJCWNvbW1hbmRzIHNob3VsZCBiZSBzYXZlZCBvbiB0aGUgaGlzdG9yeSBsaXN0LgoAQ29udGludWUAQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgBDcmVhdGUgYSBjb3Byb2Nlc3MgbmFtZWQgTkFNRS4KICAgIAogICAgRXhlY3V0ZSBDT01NQU5EIGFzeW5jaHJvbm91c2x5LCB3aXRoIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkCiAgICBpbnB1dCBvZiB0aGUgY29tbWFuZCBjb25uZWN0ZWQgdmlhIGEgcGlwZSB0byBmaWxlIGRlc2NyaXB0b3JzIGFzc2lnbmVkCiAgICB0byBpbmRpY2VzIDAgYW5kIDEgb2YgYW4gYXJyYXkgdmFyaWFibGUgTkFNRSBpbiB0aGUgZXhlY3V0aW5nIHNoZWxsLgogICAgVGhlIGRlZmF1bHQgTkFNRSBpcyDigJxDT1BST0PigJ0uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIGNvcHJvYyBjb21tYW5kIHJldHVybnMgYW4gZXhpdCBzdGF0dXMgb2YgMC4ARGVmaW5lIGxvY2FsIHZhcmlhYmxlcy4KICAgIAogICAgQ3JlYXRlIGEgbG9jYWwgdmFyaWFibGUgY2FsbGVkIE5BTUUsIGFuZCBnaXZlIGl0IFZBTFVFLiAgT1BUSU9OIGNhbgogICAgYmUgYW55IG9wdGlvbiBhY2NlcHRlZCBieSDigJhkZWNsYXJl4oCZLgogICAgCiAgICBMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gYSBmdW5jdGlvbjsgdGhleSBhcmUgdmlzaWJsZQogICAgb25seSB0byB0aGUgZnVuY3Rpb24gd2hlcmUgdGhleSBhcmUgZGVmaW5lZCBhbmQgaXRzIGNoaWxkcmVuLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQsIGEgdmFyaWFibGUKICAgIGFzc2lnbm1lbnQgZXJyb3Igb2NjdXJzLCBvciB0aGUgc2hlbGwgaXMgbm90IGV4ZWN1dGluZyBhIGZ1bmN0aW9uLgBEZWZpbmUgb3IgZGlzcGxheSBhbGlhc2VzLgogICAgCiAgICBXaXRob3V0IGFyZ3VtZW50cywg4oCYYWxpYXPigJkgcHJpbnRzIHRoZSBsaXN0IG9mIGFsaWFzZXMgaW4gdGhlIHJldXNhYmxlCiAgICBmb3JtIOKAmGFsaWFzIE5BTUU9VkFMVUXigJkgb24gc3RhbmRhcmQgb3V0cHV0LgogICAgCiAgICBPdGhlcndpc2UsIGFuIGFsaWFzIGlzIGRlZmluZWQgZm9yIGVhY2ggTkFNRSB3aG9zZSBWQUxVRSBpcyBnaXZlbi4KICAgIEEgdHJhaWxpbmcgc3BhY2UgaW4gVkFMVUUgY2F1c2VzIHRoZSBuZXh0IHdvcmQgdG8gYmUgY2hlY2tlZCBmb3IKICAgIGFsaWFzIHN1YnN0aXR1dGlvbiB3aGVuIHRoZSBhbGlhcyBpcyBleHBhbmRlZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgYWxsIGRlZmluZWQgYWxpYXNlcyBpbiBhIHJldXNhYmxlIGZvcm1hdAogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIGFsaWFzIHJldHVybnMgdHJ1ZSB1bmxlc3MgYSBOQU1FIGlzIHN1cHBsaWVkIGZvciB3aGljaCBubyBhbGlhcyBoYXMgYmVlbgogICAgZGVmaW5lZC4ARGVmaW5lIHNoZWxsIGZ1bmN0aW9uLgogICAgCiAgICBDcmVhdGUgYSBzaGVsbCBmdW5jdGlvbiBuYW1lZCBOQU1FLiAgV2hlbiBpbnZva2VkIGFzIGEgc2ltcGxlIGNvbW1hbmQsCiAgICBOQU1FIHJ1bnMgQ09NTUFORHMgaW4gdGhlIGNhbGxpbmcgc2hlbGwncyBjb250ZXh0LiAgV2hlbiBOQU1FIGlzIGludm9rZWQsCiAgICB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGFzICQxLi4uJG4sIGFuZCB0aGUgZnVuY3Rpb24ncwogICAgbmFtZSBpcyBpbiAkRlVOQ05BTUUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOQU1FIGlzIHJlYWRvbmx5LgBEaXNwbGF5IGRpcmVjdG9yeSBzdGFjay4KICAgIAogICAgRGlzcGxheSB0aGUgbGlzdCBvZiBjdXJyZW50bHkgcmVtZW1iZXJlZCBkaXJlY3Rvcmllcy4gIERpcmVjdG9yaWVzCiAgICBmaW5kIHRoZWlyIHdheSBvbnRvIHRoZSBsaXN0IHdpdGggdGhlIOKAmHB1c2hk4oCZIGNvbW1hbmQ7IHlvdSBjYW4gZ2V0CiAgICBiYWNrIHVwIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUg4oCYcG9wZOKAmSBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJCXRvIHlvdXIgaG9tZSBkaXJlY3RvcnkKICAgICAgLXAJcHJpbnQgdGhlIGRpcmVjdG9yeSBzdGFjayB3aXRoIG9uZSBlbnRyeSBwZXIgbGluZQogICAgICAtdglwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lIHByZWZpeGVkCiAgICAJCXdpdGggaXRzIHBvc2l0aW9uIGluIHRoZSBzdGFjawogICAgCiAgICBBcmd1bWVudHM6CiAgICAgICtOCURpc3BsYXlzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSBkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGgKICAgIAkJemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0CiAgICAJCXNob3duIGJ5IGRpcnMgd2hlbiBpbnZva2VkIHdpdGhvdXQgb3B0aW9ucywgc3RhcnRpbmcgd2l0aAogICAgCQl6ZXJvLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0aW4gY29tbWFuZHMuCiAgICAKICAgIERpc3BsYXlzIGJyaWVmIHN1bW1hcmllcyBvZiBidWlsdGluIGNvbW1hbmRzLiAgSWYgUEFUVEVSTiBpcwogICAgc3BlY2lmaWVkLCBnaXZlcyBkZXRhaWxlZCBoZWxwIG9uIGFsbCBjb21tYW5kcyBtYXRjaGluZyBQQVRURVJOLAogICAgb3RoZXJ3aXNlIHRoZSBsaXN0IG9mIGhlbHAgdG9waWNzIGlzIHByaW50ZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1kCW91dHB1dCBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgZWFjaCB0b3BpYwogICAgICAtbQlkaXNwbGF5IHVzYWdlIGluIHBzZXVkby1tYW5wYWdlIGZvcm1hdAogICAgICAtcwlvdXRwdXQgb25seSBhIHNob3J0IHVzYWdlIHN5bm9wc2lzIGZvciBlYWNoIHRvcGljIG1hdGNoaW5nCiAgICAJCVBBVFRFUk4KICAgIAogICAgQXJndW1lbnRzOgogICAgICBQQVRURVJOCVBhdHRlcm4gc3BlY2lmaXlpbmcgYSBoZWxwIHRvcGljCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBQQVRURVJOIGlzIG5vdCBmb3VuZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4ARGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kIHR5cGUuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIGluZGljYXRlIGhvdyBpdCB3b3VsZCBiZSBpbnRlcnByZXRlZCBpZiB1c2VkIGFzIGEKICAgIGNvbW1hbmQgbmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJZGlzcGxheSBhbGwgbG9jYXRpb25zIGNvbnRhaW5pbmcgYW4gZXhlY3V0YWJsZSBuYW1lZCBOQU1FOwogICAgCQlpbmNsdWRlcyBhbGlhc2VzLCBidWlsdGlucywgYW5kIGZ1bmN0aW9ucywgaWYgYW5kIG9ubHkgaWYKICAgIAkJdGhlIOKAmC1w4oCZIG9wdGlvbiBpcyBub3QgYWxzbyB1c2VkCiAgICAgIC1mCXN1cHByZXNzIHNoZWxsIGZ1bmN0aW9uIGxvb2t1cAogICAgICAtUAlmb3JjZSBhIFBBVEggc2VhcmNoIGZvciBlYWNoIE5BTUUsIGV2ZW4gaWYgaXQgaXMgYW4gYWxpYXMsCiAgICAJCWJ1aWx0aW4sIG9yIGZ1bmN0aW9uLCBhbmQgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZGlzayBmaWxlCiAgICAJCXRoYXQgd291bGQgYmUgZXhlY3V0ZWQKICAgICAgLXAJcmV0dXJucyBlaXRoZXIgdGhlIG5hbWUgb2YgdGhlIGRpc2sgZmlsZSB0aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLAogICAgCQlvciBub3RoaW5nIGlmIOKAmHR5cGUgLXQgTkFNReKAmSB3b3VsZCBub3QgcmV0dXJuIOKAmGZpbGXigJkKICAgICAgLXQJb3V0cHV0IGEgc2luZ2xlIHdvcmQgd2hpY2ggaXMgb25lIG9mIOKAmGFsaWFz4oCZLCDigJhrZXl3b3Jk4oCZLAogICAgCQnigJhmdW5jdGlvbuKAmSwg4oCYYnVpbHRpbuKAmSwg4oCYZmlsZeKAmSBvciDigJjigJksIGlmIE5BTUUgaXMgYW4gYWxpYXMsCiAgICAJCXNoZWxsIHJlc2VydmVkIHdvcmQsIHNoZWxsIGZ1bmN0aW9uLCBzaGVsbCBidWlsdGluLCBkaXNrIGZpbGUsCiAgICAJCW9yIG5vdCBmb3VuZCwgcmVzcGVjdGl2ZWx5CiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgTkFNRQlDb21tYW5kIG5hbWUgdG8gYmUgaW50ZXJwcmV0ZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFsbCBvZiB0aGUgTkFNRXMgYXJlIGZvdW5kOyBmYWlscyBpZiBhbnkgYXJlIG5vdCBmb3VuZC4ARGlzcGxheSBvciBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIGhpc3RvcnkgbGlzdC4KICAgIAogICAgZmMgaXMgdXNlZCB0byBsaXN0IG9yIGVkaXQgYW5kIHJlLWV4ZWN1dGUgY29tbWFuZHMgZnJvbSB0aGUgaGlzdG9yeSBsaXN0LgogICAgRklSU1QgYW5kIExBU1QgY2FuIGJlIG51bWJlcnMgc3BlY2lmeWluZyB0aGUgcmFuZ2UsIG9yIEZJUlNUIGNhbiBiZSBhCiAgICBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIGJlZ2lubmluZyB3aXRoIHRoYXQKICAgIHN0cmluZy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWUgRU5BTUUJc2VsZWN0IHdoaWNoIGVkaXRvciB0byB1c2UuICBEZWZhdWx0IGlzIEZDRURJVCwgdGhlbiBFRElUT1IsCiAgICAJCXRoZW4gdmkKICAgICAgLWwgCWxpc3QgbGluZXMgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgIC1uCW9taXQgbGluZSBudW1iZXJzIHdoZW4gbGlzdGluZwogICAgICAtcglyZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGluZXMgKG5ld2VzdCBsaXN0ZWQgZmlyc3QpCiAgICAKICAgIFdpdGggdGhlIOKAmGZjIC1zIFtwYXQ9cmVwIC4uLl0gW2NvbW1hbmRd4oCZIGZvcm1hdCwgQ09NTUFORCBpcwogICAgcmUtZXhlY3V0ZWQgYWZ0ZXIgdGhlIHN1YnN0aXR1dGlvbiBPTEQ9TkVXIGlzIHBlcmZvcm1lZC4KICAgIAogICAgQSB1c2VmdWwgYWxpYXMgdG8gdXNlIHdpdGggdGhpcyBpcyByPSdmYyAtcycsIHNvIHRoYXQgdHlwaW5nIOKAmHIgY2PigJkKICAgIHJ1bnMgdGhlIGxhc3QgY29tbWFuZCBiZWdpbm5pbmcgd2l0aCDigJhjY+KAmSBhbmQgdHlwaW5nIOKAmHLigJkgcmUtZXhlY3V0ZXMKICAgIHRoZSBsYXN0IGNvbW1hbmQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIG9yIHN0YXR1cyBvZiBleGVjdXRlZCBjb21tYW5kOyBub24temVybyBpZiBhbiBlcnJvciBvY2N1cnMuAERpc3BsYXkgb3IgbWFuaXB1bGF0ZSB0aGUgaGlzdG9yeSBsaXN0LgogICAgCiAgICBEaXNwbGF5IHRoZSBoaXN0b3J5IGxpc3Qgd2l0aCBsaW5lIG51bWJlcnMsIHByZWZpeGluZyBlYWNoIG1vZGlmaWVkCiAgICBlbnRyeSB3aXRoIGEg4oCYKuKAmS4gIEFuIGFyZ3VtZW50IG9mIE4gbGlzdHMgb25seSB0aGUgbGFzdCBOIGVudHJpZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1jCWNsZWFyIHRoZSBoaXN0b3J5IGxpc3QgYnkgZGVsZXRpbmcgYWxsIG9mIHRoZSBlbnRyaWVzCiAgICAgIC1kIG9mZnNldAlkZWxldGUgdGhlIGhpc3RvcnkgZW50cnkgYXQgcG9zaXRpb24gT0ZGU0VULgogICAgCiAgICAgIC1hCWFwcGVuZCBoaXN0b3J5IGxpbmVzIGZyb20gdGhpcyBzZXNzaW9uIHRvIHRoZSBoaXN0b3J5IGZpbGUKICAgICAgLW4JcmVhZCBhbGwgaGlzdG9yeSBsaW5lcyBub3QgYWxyZWFkeSByZWFkIGZyb20gdGhlIGhpc3RvcnkgZmlsZQogICAgCQlhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGhpc3RvcnkgbGlzdAogICAgICAtcglyZWFkIHRoZSBoaXN0b3J5IGZpbGUgYW5kIGFwcGVuZCB0aGUgY29udGVudHMgdG8gdGhlIGhpc3RvcnkKICAgIAkJbGlzdAogICAgICAtdwl3cml0ZSB0aGUgY3VycmVudCBoaXN0b3J5IHRvIHRoZSBoaXN0b3J5IGZpbGUKICAgIAogICAgICAtcAlwZXJmb3JtIGhpc3RvcnkgZXhwYW5zaW9uIG9uIGVhY2ggQVJHIGFuZCBkaXNwbGF5IHRoZSByZXN1bHQKICAgIAkJd2l0aG91dCBzdG9yaW5nIGl0IGluIHRoZSBoaXN0b3J5IGxpc3QKICAgICAgLXMJYXBwZW5kIHRoZSBBUkdzIHRvIHRoZSBoaXN0b3J5IGxpc3QgYXMgYSBzaW5nbGUgZW50cnkKICAgIAogICAgSWYgRklMRU5BTUUgaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIGhpc3RvcnkgZmlsZS4gIE90aGVyd2lzZSwKICAgIGlmIEhJU1RGSUxFIGhhcyBhIHZhbHVlLCB0aGF0IGlzIHVzZWQsIGVsc2Ugfi8uYmFzaF9oaXN0b3J5LgogICAgCiAgICBJZiB0aGUgSElTVFRJTUVGT1JNQVQgdmFyaWFibGUgaXMgc2V0IGFuZCBub3QgbnVsbCwgaXRzIHZhbHVlIGlzIHVzZWQKICAgIGFzIGEgZm9ybWF0IHN0cmluZyBmb3Igc3RyZnRpbWUoMykgdG8gcHJpbnQgdGhlIHRpbWUgc3RhbXAgYXNzb2NpYXRlZAogICAgd2l0aCBlYWNoIGRpc3BsYXllZCBoaXN0b3J5IGVudHJ5LiAgTm8gdGltZSBzdGFtcHMgYXJlIHByaW50ZWQgb3RoZXJ3aXNlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBEaXNwbGF5IG9yIHNldCBmaWxlIG1vZGUgbWFzay4KICAgIAogICAgU2V0cyB0aGUgdXNlciBmaWxlLWNyZWF0aW9uIG1hc2sgdG8gTU9ERS4gIElmIE1PREUgaXMgb21pdHRlZCwgcHJpbnRzCiAgICB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbWFzay4KICAgIAogICAgSWYgTU9ERSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhbiBvY3RhbCBudW1iZXI7CiAgICBvdGhlcndpc2UgaXQgaXMgYSBzeW1ib2xpYyBtb2RlIHN0cmluZyBsaWtlIHRoYXQgYWNjZXB0ZWQgYnkgY2htb2QoMSkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1wCWlmIE1PREUgaXMgb21pdHRlZCwgb3V0cHV0IGluIGEgZm9ybSB0aGF0IG1heSBiZSByZXVzZWQgYXMgaW5wdXQKICAgICAgLVMJbWFrZXMgdGhlIG91dHB1dCBzeW1ib2xpYzsgb3RoZXJ3aXNlIGFuIG9jdGFsIG51bWJlciBpcyBvdXRwdXQKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE1PREUgaXMgaW52YWxpZCBvciBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbi4ARGlzcGxheSBwb3NzaWJsZSBjb21wbGV0aW9ucyBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMuCiAgICAKICAgIEludGVuZGVkIHRvIGJlIHVzZWQgZnJvbSB3aXRoaW4gYSBzaGVsbCBmdW5jdGlvbiBnZW5lcmF0aW5nIHBvc3NpYmxlCiAgICBjb21wbGV0aW9ucy4gIElmIHRoZSBvcHRpb25hbCBXT1JEIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBtYXRjaGVzIGFnYWluc3QKICAgIFdPUkQgYXJlIGdlbmVyYXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGFuIGVycm9yIG9jY3Vycy4ARGlzcGxheSBwcm9jZXNzIHRpbWVzLgogICAgCiAgICBQcmludHMgdGhlIGFjY3VtdWxhdGVkIHVzZXIgYW5kIHN5c3RlbSB0aW1lcyBmb3IgdGhlIHNoZWxsIGFuZCBhbGwgb2YgaXRzCiAgICBjaGlsZCBwcm9jZXNzZXMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBEaXNwbGF5IHN0YXR1cyBvZiBqb2JzLgogICAgCiAgICBMaXN0cyB0aGUgYWN0aXZlIGpvYnMuICBKT0JTUEVDIHJlc3RyaWN0cyBvdXRwdXQgdG8gdGhhdCBqb2IuCiAgICBXaXRob3V0IG9wdGlvbnMsIHRoZSBzdGF0dXMgb2YgYWxsIGFjdGl2ZSBqb2JzIGlzIGRpc3BsYXllZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWwJbGlzdHMgcHJvY2VzcyBJRHMgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBpbmZvcm1hdGlvbgogICAgICAtbglsaXN0cyBvbmx5IHByb2Nlc3NlcyB0aGF0IGhhdmUgY2hhbmdlZCBzdGF0dXMgc2luY2UgdGhlIGxhc3QKICAgIAkJbm90aWZpY2F0aW9uCiAgICAgIC1wCWxpc3RzIHByb2Nlc3MgSURzIG9ubHkKICAgICAgLXIJcmVzdHJpY3Qgb3V0cHV0IHRvIHJ1bm5pbmcgam9icwogICAgICAtcwlyZXN0cmljdCBvdXRwdXQgdG8gc3RvcHBlZCBqb2JzCiAgICAKICAgIElmIC14IGlzIHN1cHBsaWVkLCBDT01NQU5EIGlzIHJ1biBhZnRlciBhbGwgam9iIHNwZWNpZmljYXRpb25zIHRoYXQKICAgIGFwcGVhciBpbiBBUkdTIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIHRoZSBwcm9jZXNzIElEIG9mIHRoYXQgam9iJ3MKICAgIHByb2Nlc3MgZ3JvdXAgbGVhZGVyLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYW4gZXJyb3Igb2NjdXJzLgogICAgSWYgLXggaXMgdXNlZCwgcmV0dXJucyB0aGUgZXhpdCBzdGF0dXMgb2YgQ09NTUFORC4ARGlzcGxheSB0aGUgbGlzdCBvZiBjdXJyZW50bHkgcmVtZW1iZXJlZCBkaXJlY3Rvcmllcy4gIERpcmVjdG9yaWVzCiAgICBmaW5kIHRoZWlyIHdheSBvbnRvIHRoZSBsaXN0IHdpdGggdGhlIOKAmHB1c2hk4oCZIGNvbW1hbmQ7IHlvdSBjYW4gZ2V0CiAgICBiYWNrIHVwIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUg4oCYcG9wZOKAmSBjb21tYW5kLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYwljbGVhciB0aGUgZGlyZWN0b3J5IHN0YWNrIGJ5IGRlbGV0aW5nIGFsbCBvZiB0aGUgZWxlbWVudHMKICAgICAgLWwJZG8gbm90IHByaW50IHRpbGRlLXByZWZpeGVkIHZlcnNpb25zIG9mIGRpcmVjdG9yaWVzIHJlbGF0aXZlCiAgICAJdG8geW91ciBob21lIGRpcmVjdG9yeQogICAgICAtcAlwcmludCB0aGUgZGlyZWN0b3J5IHN0YWNrIHdpdGggb25lIGVudHJ5IHBlciBsaW5lCiAgICAgIC12CXByaW50IHRoZSBkaXJlY3Rvcnkgc3RhY2sgd2l0aCBvbmUgZW50cnkgcGVyIGxpbmUgcHJlZml4ZWQKICAgIAl3aXRoIGl0cyBwb3NpdGlvbiBpbiB0aGUgc3RhY2sKICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3Qgc2hvd24gYnkKICAgIAlkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGggemVyby4KICAgIAogICAgICAtTglEaXNwbGF5cyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBsaXN0IHNob3duIGJ5CglkaXJzIHdoZW4gaW52b2tlZCB3aXRob3V0IG9wdGlvbnMsIHN0YXJ0aW5nIHdpdGggemVyby4ARG9uZQBEb25lKCVkKQBFTVQgaW5zdHJ1Y3Rpb24ARW5hYmxlIGFuZCBkaXNhYmxlIHNoZWxsIGJ1aWx0aW5zLgogICAgCiAgICBFbmFibGVzIGFuZCBkaXNhYmxlcyBidWlsdGluIHNoZWxsIGNvbW1hbmRzLiAgRGlzYWJsaW5nIGFsbG93cyB5b3UgdG8KICAgIGV4ZWN1dGUgYSBkaXNrIGNvbW1hbmQgd2hpY2ggaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBzaGVsbCBidWlsdGluCiAgICB3aXRob3V0IHVzaW5nIGEgZnVsbCBwYXRobmFtZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcHJpbnQgYSBsaXN0IG9mIGJ1aWx0aW5zIHNob3dpbmcgd2hldGhlciBvciBub3QgZWFjaCBpcyBlbmFibGVkCiAgICAgIC1uCWRpc2FibGUgZWFjaCBOQU1FIG9yIGRpc3BsYXkgYSBsaXN0IG9mIGRpc2FibGVkIGJ1aWx0aW5zCiAgICAgIC1wCXByaW50IHRoZSBsaXN0IG9mIGJ1aWx0aW5zIGluIGEgcmV1c2FibGUgZm9ybWF0CiAgICAgIC1zCXByaW50IG9ubHkgdGhlIG5hbWVzIG9mIFBvc2l4IOKAmHNwZWNpYWzigJkgYnVpbHRpbnMKICAgIAogICAgT3B0aW9ucyBjb250cm9sbGluZyBkeW5hbWljIGxvYWRpbmc6CiAgICAgIC1mCUxvYWQgYnVpbHRpbiBOQU1FIGZyb20gc2hhcmVkIG9iamVjdCBGSUxFTkFNRQogICAgICAtZAlSZW1vdmUgYSBidWlsdGluIGxvYWRlZCB3aXRoIC1mCiAgICAKICAgIFdpdGhvdXQgb3B0aW9ucywgZWFjaCBOQU1FIGlzIGVuYWJsZWQuCiAgICAKICAgIFRvIHVzZSB0aGUg4oCYdGVzdOKAmSBmb3VuZCBpbiAkUEFUSCBpbnN0ZWFkIG9mIHRoZSBzaGVsbCBidWlsdGluCiAgICB2ZXJzaW9uLCB0eXBlIOKAmGVuYWJsZSAtbiB0ZXN04oCZLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgTkFNRSBpcyBub3QgYSBzaGVsbCBidWlsdGluIG9yIGFuIGVycm9yIG9jY3Vycy4ARXZhbHVhdGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLgogICAgCiAgICBUaGUgRVhQUkVTU0lPTiBpcyBldmFsdWF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgYXJpdGhtZXRpYwogICAgZXZhbHVhdGlvbi4gIEVxdWl2YWxlbnQgdG8g4oCcbGV0IEVYUFJFU1NJT07igJ0uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyAxIGlmIEVYUFJFU1NJT04gZXZhbHVhdGVzIHRvIDA7IHJldHVybnMgMCBvdGhlcndpc2UuAEV2YWx1YXRlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuCiAgICAKICAgIEV2YWx1YXRlIGVhY2ggQVJHIGFzIGFuIGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gIEV2YWx1YXRpb24gaXMgZG9uZSBpbgogICAgZml4ZWQtd2lkdGggaW50ZWdlcnMgd2l0aCBubyBjaGVjayBmb3Igb3ZlcmZsb3csIHRob3VnaCBkaXZpc2lvbiBieSAwCiAgICBpcyB0cmFwcGVkIGFuZCBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgVGhlIGZvbGxvd2luZyBsaXN0IG9mIG9wZXJhdG9ycyBpcwogICAgZ3JvdXBlZCBpbnRvIGxldmVscyBvZiBlcXVhbC1wcmVjZWRlbmNlIG9wZXJhdG9ycy4gIFRoZSBsZXZlbHMgYXJlIGxpc3RlZAogICAgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBwcmVjZWRlbmNlLgogICAgCiAgICAJaWQrKywgaWQtLQl2YXJpYWJsZSBwb3N0LWluY3JlbWVudCwgcG9zdC1kZWNyZW1lbnQKICAgIAkrK2lkLCAtLWlkCXZhcmlhYmxlIHByZS1pbmNyZW1lbnQsIHByZS1kZWNyZW1lbnQKICAgIAktLCArCQl1bmFyeSBtaW51cywgcGx1cwogICAgCSEsIH4JCWxvZ2ljYWwgYW5kIGJpdHdpc2UgbmVnYXRpb24KICAgIAkqKgkJZXhwb25lbnRpYXRpb24KICAgIAkqLCAvLCAlCQltdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlcgogICAgCSssIC0JCWFkZGl0aW9uLCBzdWJ0cmFjdGlvbgogICAgCTw8LCA+PgkJbGVmdCBhbmQgcmlnaHQgYml0d2lzZSBzaGlmdHMKICAgIAk8PSwgPj0sIDwsID4JY29tcGFyaXNvbgogICAgCT09LCAhPQkJZXF1YWxpdHksIGluZXF1YWxpdHkKICAgIAkmCQliaXR3aXNlIEFORAogICAgCV4JCWJpdHdpc2UgWE9SCiAgICAJfAkJYml0d2lzZSBPUgogICAgCSYmCQlsb2dpY2FsIEFORAogICAgCXx8CQlsb2dpY2FsIE9SCiAgICAJZXhwciA/IGV4cHIgOiBleHByCiAgICAJCQljb25kaXRpb25hbCBvcGVyYXRvcgogICAgCT0sICo9LCAvPSwgJT0sCiAgICAJKz0sIC09LCA8PD0sID4+PSwKICAgIAkmPSwgXj0sIHw9CWFzc2lnbm1lbnQKICAgIAogICAgU2hlbGwgdmFyaWFibGVzIGFyZSBhbGxvd2VkIGFzIG9wZXJhbmRzLiAgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlCiAgICBpcyByZXBsYWNlZCBieSBpdHMgdmFsdWUgKGNvZXJjZWQgdG8gYSBmaXhlZC13aWR0aCBpbnRlZ2VyKSB3aXRoaW4KICAgIGFuIGV4cHJlc3Npb24uICBUaGUgdmFyaWFibGUgbmVlZCBub3QgaGF2ZSBpdHMgaW50ZWdlciBhdHRyaWJ1dGUKICAgIHR1cm5lZCBvbiB0byBiZSB1c2VkIGluIGFuIGV4cHJlc3Npb24uCiAgICAKICAgIE9wZXJhdG9ycyBhcmUgZXZhbHVhdGVkIGluIG9yZGVyIG9mIHByZWNlZGVuY2UuICBTdWItZXhwcmVzc2lvbnMgaW4KICAgIHBhcmVudGhlc2VzIGFyZSBldmFsdWF0ZWQgZmlyc3QgYW5kIG1heSBvdmVycmlkZSB0aGUgcHJlY2VkZW5jZQogICAgcnVsZXMgYWJvdmUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgSWYgdGhlIGxhc3QgQVJHIGV2YWx1YXRlcyB0byAwLCBsZXQgcmV0dXJucyAxOyBsZXQgcmV0dXJucyAwIG90aGVyd2lzZS4ARXZhbHVhdGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICAgIAogICAgRXhpdHMgd2l0aCBhIHN0YXR1cyBvZiAwICh0cnVlKSBvciAxIChmYWxzZSkgZGVwZW5kaW5nIG9uCiAgICB0aGUgZXZhbHVhdGlvbiBvZiBFWFBSLiAgRXhwcmVzc2lvbnMgbWF5IGJlIHVuYXJ5IG9yIGJpbmFyeS4gIFVuYXJ5CiAgICBleHByZXNzaW9ucyBhcmUgb2Z0ZW4gdXNlZCB0byBleGFtaW5lIHRoZSBzdGF0dXMgb2YgYSBmaWxlLiAgVGhlcmUKICAgIGFyZSBzdHJpbmcgb3BlcmF0b3JzIGFuZCBudW1lcmljIGNvbXBhcmlzb24gb3BlcmF0b3JzIGFzIHdlbGwuCiAgICAKICAgIFRoZSBiZWhhdmlvciBvZiB0ZXN0IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBhcmd1bWVudHMuICBSZWFkIHRoZQogICAgYmFzaCBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbXBsZXRlIHNwZWNpZmljYXRpb24uCiAgICAKICAgIEZpbGUgb3BlcmF0b3JzOgogICAgCiAgICAgIC1hIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBleGlzdHMuCiAgICAgIC1iIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBibG9jayBzcGVjaWFsLgogICAgICAtYyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgY2hhcmFjdGVyIHNwZWNpYWwuCiAgICAgIC1kIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIGRpcmVjdG9yeS4KICAgICAgLWUgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGV4aXN0cy4KICAgICAgLWYgRklMRSAgICAgICAgVHJ1ZSBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUuCiAgICAgIC1nIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBzZXQtZ3JvdXAtaWQuCiAgICAgIC1oIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHN5bWJvbGljIGxpbmsuCiAgICAgIC1MIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHN5bWJvbGljIGxpbmsuCiAgICAgIC1rIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBoYXMgaXRzIOKAmHN0aWNreeKAmSBiaXQgc2V0LgogICAgICAtcCBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgYSBuYW1lZCBwaXBlLgogICAgICAtciBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgaXMgcmVhZGFibGUgYnkgeW91LgogICAgICAtcyBGSUxFICAgICAgICBUcnVlIGlmIGZpbGUgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHkuCiAgICAgIC1TIEZJTEUgICAgICAgIFRydWUgaWYgZmlsZSBpcyBhIHNvY2tldC4KICAgICAgLXQgRkQgICAgICAgICAgVHJ1ZSBpZiBGRCBpcyBvcGVuZWQgb24gYSB0ZXJtaW5hbC4KICAgICAgLXUgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBzZXQtdXNlci1pZC4KICAgICAgLXcgRklMRSAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyB3cml0YWJsZSBieSB5b3UuCiAgICAgIC14IEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZXhlY3V0YWJsZSBieSB5b3UuCiAgICAgIC1PIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaXMgZWZmZWN0aXZlbHkgb3duZWQgYnkgeW91LgogICAgICAtRyBGSUxFICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGlzIGVmZmVjdGl2ZWx5IG93bmVkIGJ5IHlvdXIgZ3JvdXAuCiAgICAgIC1OIEZJTEUgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgaXQgd2FzIGxhc3QgcmVhZC4KICAgIAogICAgICBGSUxFMSAtbnQgRklMRTIgIFRydWUgaWYgZmlsZTEgaXMgbmV3ZXIgdGhhbiBmaWxlMiAoYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uIGRhdGUpLgogICAgCiAgICAgIEZJTEUxIC1vdCBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBvbGRlciB0aGFuIGZpbGUyLgogICAgCiAgICAgIEZJTEUxIC1lZiBGSUxFMiAgVHJ1ZSBpZiBmaWxlMSBpcyBhIGhhcmQgbGluayB0byBmaWxlMi4KICAgIAogICAgU3RyaW5nIG9wZXJhdG9yczoKICAgIAogICAgICAteiBTVFJJTkcgICAgICBUcnVlIGlmIHN0cmluZyBpcyBlbXB0eS4KICAgIAogICAgICAtbiBTVFJJTkcKICAgICAgICAgU1RSSU5HICAgICAgVHJ1ZSBpZiBzdHJpbmcgaXMgbm90IGVtcHR5LgogICAgCiAgICAgIFNUUklORzEgPSBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgdGhlIHN0cmluZ3MgYXJlIGVxdWFsLgogICAgICBTVFJJTkcxICE9IFNUUklORzIKICAgICAgICAgICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgc3RyaW5ncyBhcmUgbm90IGVxdWFsLgogICAgICBTVFJJTkcxIDwgU1RSSU5HMgogICAgICAgICAgICAgICAgICAgICBUcnVlIGlmIFNUUklORzEgc29ydHMgYmVmb3JlIFNUUklORzIgbGV4aWNvZ3JhcGhpY2FsbHkuCiAgICAgIFNUUklORzEgPiBTVFJJTkcyCiAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgU1RSSU5HMSBzb3J0cyBhZnRlciBTVFJJTkcyIGxleGljb2dyYXBoaWNhbGx5LgogICAgCiAgICBPdGhlciBvcGVyYXRvcnM6CiAgICAKICAgICAgLW8gT1BUSU9OICAgICAgVHJ1ZSBpZiB0aGUgc2hlbGwgb3B0aW9uIE9QVElPTiBpcyBlbmFibGVkLgogICAgICAtdiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0LgogICAgICAtUiBWQVIgICAgICAgICBUcnVlIGlmIHRoZSBzaGVsbCB2YXJpYWJsZSBWQVIgaXMgc2V0IGFuZCBpcyBhIG5hbWUKICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLgogICAgICAhIEVYUFIgICAgICAgICBUcnVlIGlmIGV4cHIgaXMgZmFsc2UuCiAgICAgIEVYUFIxIC1hIEVYUFIyIFRydWUgaWYgYm90aCBleHByMSBBTkQgZXhwcjIgYXJlIHRydWUuCiAgICAgIEVYUFIxIC1vIEVYUFIyIFRydWUgaWYgZWl0aGVyIGV4cHIxIE9SIGV4cHIyIGlzIHRydWUuCiAgICAKICAgICAgYXJnMSBPUCBhcmcyICAgQXJpdGhtZXRpYyB0ZXN0cy4gIE9QIGlzIG9uZSBvZiAtZXEsIC1uZSwKICAgICAgICAgICAgICAgICAgICAgLWx0LCAtbGUsIC1ndCwgb3IgLWdlLgogICAgCiAgICBBcml0aG1ldGljIGJpbmFyeSBvcGVyYXRvcnMgcmV0dXJuIHRydWUgaWYgQVJHMSBpcyBlcXVhbCwgbm90LWVxdWFsLAogICAgbGVzcy10aGFuLCBsZXNzLXRoYW4tb3ItZXF1YWwsIGdyZWF0ZXItdGhhbiwgb3IgZ3JlYXRlci10aGFuLW9yLWVxdWFsCiAgICB0aGFuIEFSRzIuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIEVYUFIgZXZhbHVhdGVzIHRvIHRydWU7IGZhaWxzIGlmIEVYUFIgZXZhbHVhdGVzIHRvCiAgICBmYWxzZSBvciBhbiBpbnZhbGlkIGFyZ3VtZW50IGlzIGdpdmVuLgBFdmFsdWF0ZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgCiAgICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlIOKAnHRlc3TigJ0gYnVpbHRpbiwgYnV0IHRoZSBsYXN0IGFyZ3VtZW50IG11c3QKICAgIGJlIGEgbGl0ZXJhbCDigJhd4oCZLCB0byBtYXRjaCB0aGUgb3BlbmluZyDigJhb4oCZLgBFeGVjdXRlIGEgc2ltcGxlIGNvbW1hbmQgb3IgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBjb21tYW5kcy4KICAgIAogICAgUnVucyBDT01NQU5EIHdpdGggQVJHUyBzdXBwcmVzc2luZyAgc2hlbGwgZnVuY3Rpb24gbG9va3VwLCBvciBkaXNwbGF5CiAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIENPTU1BTkRzLiAgQ2FuIGJlIHVzZWQgdG8gaW52b2tlIGNvbW1hbmRzCiAgICBvbiBkaXNrIHdoZW4gYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtcCAgICB1c2UgYSBkZWZhdWx0IHZhbHVlIGZvciBQQVRIIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBvZgogICAgICAgICAgICB0aGUgc3RhbmRhcmQgdXRpbGl0aWVzCiAgICAgIC12ICAgIHByaW50IGEgZGVzY3JpcHRpb24gb2YgQ09NTUFORCBzaW1pbGFyIHRvIHRoZSDigJh0eXBl4oCZIGJ1aWx0aW4KICAgICAgLVYgICAgcHJpbnQgYSBtb3JlIHZlcmJvc2UgZGVzY3JpcHRpb24gb2YgZWFjaCBDT01NQU5ECiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBleGl0IHN0YXR1cyBvZiBDT01NQU5ELCBvciBmYWlsdXJlIGlmIENPTU1BTkQgaXMgbm90IGZvdW5kLgBFeGVjdXRlIGFyZ3VtZW50cyBhcyBhIHNoZWxsIGNvbW1hbmQuCiAgICAKICAgIENvbWJpbmUgQVJHcyBpbnRvIGEgc2luZ2xlIHN0cmluZywgdXNlIHRoZSByZXN1bHQgYXMgaW5wdXQgdG8gdGhlIHNoZWxsLAogICAgYW5kIGV4ZWN1dGUgdGhlIHJlc3VsdGluZyBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIGV4aXQgc3RhdHVzIG9mIGNvbW1hbmQgb3Igc3VjY2VzcyBpZiBjb21tYW5kIGlzIG51bGwuAEV4ZWN1dGUgY29tbWFuZHMgYXMgbG9uZyBhcyBhIHRlc3QgZG9lcyBub3Qgc3VjY2VlZC4KICAgIAogICAgRXhwYW5kIGFuZCBleGVjdXRlIENPTU1BTkRTIGFzIGxvbmcgYXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlCiAgICDigJh1bnRpbOKAmSBDT01NQU5EUyBoYXMgYW4gZXhpdCBzdGF0dXMgd2hpY2ggaXMgbm90IHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYXMgbG9uZyBhcyBhIHRlc3Qgc3VjY2VlZHMuCiAgICAKICAgIEV4cGFuZCBhbmQgZXhlY3V0ZSBDT01NQU5EUyBhcyBsb25nIGFzIHRoZSBmaW5hbCBjb21tYW5kIGluIHRoZQogICAg4oCYd2hpbGXigJkgQ09NTUFORFMgaGFzIGFuIGV4aXQgc3RhdHVzIG9mIHplcm8uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYmFzZWQgb24gY29uZGl0aW9uYWwuCiAgICAKICAgIFRoZSDigJhpZiBDT01NQU5EU+KAmSBsaXN0IGlzIGV4ZWN1dGVkLiAgSWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZW4gdGhlCiAgICDigJh0aGVuIENPTU1BTkRT4oCZIGxpc3QgaXMgZXhlY3V0ZWQuICBPdGhlcndpc2UsIGVhY2gg4oCYZWxpZiBDT01NQU5EU+KAmSBsaXN0IGlzCiAgICBleGVjdXRlZCBpbiB0dXJuLCBhbmQgaWYgaXRzIGV4aXQgc3RhdHVzIGlzIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nCiAgICDigJh0aGVuIENPTU1BTkRT4oCZIGxpc3QgaXMgZXhlY3V0ZWQgYW5kIHRoZSBpZiBjb21tYW5kIGNvbXBsZXRlcy4gIE90aGVyd2lzZSwKICAgIHRoZSDigJhlbHNlIENPTU1BTkRT4oCZIGxpc3QgaXMgZXhlY3V0ZWQsIGlmIHByZXNlbnQuICBUaGUgZXhpdCBzdGF0dXMgb2YgdGhlCiAgICBlbnRpcmUgY29uc3RydWN0IGlzIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLCBvciB6ZXJvCiAgICBpZiBubyBjb25kaXRpb24gdGVzdGVkIHRydWUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuAEV4ZWN1dGUgY29tbWFuZHMgYmFzZWQgb24gcGF0dGVybiBtYXRjaGluZy4KICAgIAogICAgU2VsZWN0aXZlbHkgZXhlY3V0ZSBDT01NQU5EUyBiYXNlZCB1cG9uIFdPUkQgbWF0Y2hpbmcgUEFUVEVSTi4gIFRoZQogICAg4oCYfOKAmSBpcyB1c2VkIHRvIHNlcGFyYXRlIG11bHRpcGxlIHBhdHRlcm5zLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhIGxpc3QuCiAgICAKICAgIFRoZSDigJhmb3LigJkgbG9vcCBleGVjdXRlcyBhIHNlcXVlbmNlIG9mIGNvbW1hbmRzIGZvciBlYWNoIG1lbWJlciBpbiBhCiAgICBsaXN0IG9mIGl0ZW1zLiAgSWYg4oCYaW4gV09SRFMgLi4uO+KAmSBpcyBub3QgcHJlc2VudCwgdGhlbiDigJhpbiDigJwkQOKAneKAmSBpcwogICAgYXNzdW1lZC4gIEZvciBlYWNoIGVsZW1lbnQgaW4gV09SRFMsIE5BTUUgaXMgc2V0IHRvIHRoYXQgZWxlbWVudCwgYW5kCiAgICB0aGUgQ09NTUFORFMgYXJlIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBFeGVjdXRlIGNvbW1hbmRzIGZyb20gYSBmaWxlIGluIHRoZSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBSZWFkIGFuZCBleGVjdXRlIGNvbW1hbmRzIGZyb20gRklMRU5BTUUgaW4gdGhlIGN1cnJlbnQgc2hlbGwuICBUaGUKICAgIGVudHJpZXMgaW4gJFBBVEggYXJlIHVzZWQgdG8gZmluZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRU5BTUUuCiAgICBJZiBhbnkgQVJHVU1FTlRTIGFyZSBzdXBwbGllZCwgdGhleSBiZWNvbWUgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgd2hlbiBGSUxFTkFNRSBpcyBleGVjdXRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZCBpbiBGSUxFTkFNRTsgZmFpbHMgaWYKICAgIEZJTEVOQU1FIGNhbm5vdCBiZSByZWFkLgBFeGVjdXRlIGNvbmRpdGlvbmFsIGNvbW1hbmQuCiAgICAKICAgIFJldHVybnMgYSBzdGF0dXMgb2YgMCBvciAxIGRlcGVuZGluZyBvbiB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgY29uZGl0aW9uYWwKICAgIGV4cHJlc3Npb24gRVhQUkVTU0lPTi4gIEV4cHJlc3Npb25zIGFyZSBjb21wb3NlZCBvZiB0aGUgc2FtZSBwcmltYXJpZXMgdXNlZAogICAgYnkgdGhlIOKAmHRlc3TigJkgYnVpbHRpbiwgYW5kIG1heSBiZSBjb21iaW5lZCB1c2luZyB0aGUgZm9sbG93aW5nIG9wZXJhdG9yczoKICAgIAogICAgICAoIEVYUFJFU1NJT04gKQlSZXR1cm5zIHRoZSB2YWx1ZSBvZiBFWFBSRVNTSU9OCiAgICAgICEgRVhQUkVTU0lPTgkJVHJ1ZSBpZiBFWFBSRVNTSU9OIGlzIGZhbHNlOyBlbHNlIGZhbHNlCiAgICAgIEVYUFIxICYmIEVYUFIyCVRydWUgaWYgYm90aCBFWFBSMSBhbmQgRVhQUjIgYXJlIHRydWU7IGVsc2UgZmFsc2UKICAgICAgRVhQUjEgfHwgRVhQUjIJVHJ1ZSBpZiBlaXRoZXIgRVhQUjEgb3IgRVhQUjIgaXMgdHJ1ZTsgZWxzZSBmYWxzZQogICAgCiAgICBXaGVuIHRoZSDigJg9PeKAmSBhbmQg4oCYIT3igJkgb3BlcmF0b3JzIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHRvIHRoZSByaWdodCBvZgogICAgdGhlIG9wZXJhdG9yIGlzIHVzZWQgYXMgYSBwYXR0ZXJuIGFuZCBwYXR0ZXJuIG1hdGNoaW5nIGlzIHBlcmZvcm1lZC4KICAgIFdoZW4gdGhlIOKAmD1+4oCZIG9wZXJhdG9yIGlzIHVzZWQsIHRoZSBzdHJpbmcgdG8gdGhlIHJpZ2h0IG9mIHRoZSBvcGVyYXRvcgogICAgaXMgbWF0Y2hlZCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgIAogICAgVGhlICYmIGFuZCB8fCBvcGVyYXRvcnMgZG8gbm90IGV2YWx1YXRlIEVYUFIyIGlmIEVYUFIxIGlzIHN1ZmZpY2llbnQgdG8KICAgIGRldGVybWluZSB0aGUgZXhwcmVzc2lvbidzIHZhbHVlLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIDAgb3IgMSBkZXBlbmRpbmcgb24gdmFsdWUgb2YgRVhQUkVTU0lPTi4ARXhlY3V0ZSBzaGVsbCBidWlsdGlucy4KICAgIAogICAgRXhlY3V0ZSBTSEVMTC1CVUlMVElOIHdpdGggYXJndW1lbnRzIEFSR3Mgd2l0aG91dCBwZXJmb3JtaW5nIGNvbW1hbmQKICAgIGxvb2t1cC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gcmVpbXBsZW1lbnQgYSBzaGVsbCBidWlsdGluCiAgICBhcyBhIHNoZWxsIGZ1bmN0aW9uLCBidXQgbmVlZCB0byBleGVjdXRlIHRoZSBidWlsdGluIHdpdGhpbiB0aGUgZnVuY3Rpb24uCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgZXhpdCBzdGF0dXMgb2YgU0hFTEwtQlVJTFRJTiwgb3IgZmFsc2UgaWYgU0hFTEwtQlVJTFRJTiBpcwogICAgbm90IGEgc2hlbGwgYnVpbHRpbi4uAEV4aXQgJWQARXhpdCBhIGxvZ2luIHNoZWxsLgogICAgCiAgICBFeGl0cyBhIGxvZ2luIHNoZWxsIHdpdGggZXhpdCBzdGF0dXMgTi4gIFJldHVybnMgYW4gZXJyb3IgaWYgbm90IGV4ZWN1dGVkCiAgICBpbiBhIGxvZ2luIHNoZWxsLgBFeGl0IGZvciwgd2hpbGUsIG9yIHVudGlsIGxvb3BzLgogICAgCiAgICBFeGl0IGEgRk9SLCBXSElMRSBvciBVTlRJTCBsb29wLiAgSWYgTiBpcyBzcGVjaWZpZWQsIGJyZWFrIE4gZW5jbG9zaW5nCiAgICBsb29wcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBUaGUgZXhpdCBzdGF0dXMgaXMgMCB1bmxlc3MgTiBpcyBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuAEV4aXQgdGhlIHNoZWxsLgogICAgCiAgICBFeGl0cyB0aGUgc2hlbGwgd2l0aCBhIHN0YXR1cyBvZiBOLiAgSWYgTiBpcyBvbWl0dGVkLCB0aGUgZXhpdCBzdGF0dXMKICAgIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ARmlsZSBsaW1pdABGbG9hdGluZyBwb2ludCBleGNlcHRpb24ARm9ybWF0cyBhbmQgcHJpbnRzIEFSR1VNRU5UUyB1bmRlciBjb250cm9sIG9mIHRoZSBGT1JNQVQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC12IHZhcglhc3NpZ24gdGhlIG91dHB1dCB0byBzaGVsbCB2YXJpYWJsZSBWQVIgcmF0aGVyIHRoYW4KICAgIAkJZGlzcGxheSBpdCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0CiAgICAKICAgIEZPUk1BVCBpcyBhIGNoYXJhY3RlciBzdHJpbmcgd2hpY2ggY29udGFpbnMgdGhyZWUgdHlwZXMgb2Ygb2JqZWN0czogcGxhaW4KICAgIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBzaW1wbHkgY29waWVkIHRvIHN0YW5kYXJkIG91dHB1dDsgY2hhcmFjdGVyIGVzY2FwZQogICAgc2VxdWVuY2VzLCB3aGljaCBhcmUgY29udmVydGVkIGFuZCBjb3BpZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dDsgYW5kCiAgICBmb3JtYXQgc3BlY2lmaWNhdGlvbnMsIGVhY2ggb2Ygd2hpY2ggY2F1c2VzIHByaW50aW5nIG9mIHRoZSBuZXh0IHN1Y2Nlc3NpdmUKICAgIGFyZ3VtZW50LgogICAgCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmljYXRpb25zIGRlc2NyaWJlZCBpbiBwcmludGYoMSksCiAgICBwcmludGYgaW50ZXJwcmV0czoKICAgIAogICAgICAlYglleHBhbmQgYmFja3NsYXNoIGVzY2FwZSBzZXF1ZW5jZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQKICAgICAgJXEJcXVvdGUgdGhlIGFyZ3VtZW50IGluIGEgd2F5IHRoYXQgY2FuIGJlIHJldXNlZCBhcyBzaGVsbCBpbnB1dAogICAgICAlKGZtdClUCW91dHB1dCB0aGUgZGF0ZS10aW1lIHN0cmluZyByZXN1bHRpbmcgZnJvbSB1c2luZyBGTVQgYXMgYSBmb3JtYXQKICAgIAkgICAgICAgIHN0cmluZyBmb3Igc3RyZnRpbWUoMykKICAgIAogICAgVGhlIGZvcm1hdCBpcyByZS11c2VkIGFzIG5lY2Vzc2FyeSB0byBjb25zdW1lIGFsbCBvZiB0aGUgYXJndW1lbnRzLiAgSWYKICAgIHRoZXJlIGFyZSBmZXdlciBhcmd1bWVudHMgdGhhbiB0aGUgZm9ybWF0IHJlcXVpcmVzLCAgZXh0cmEgZm9ybWF0CiAgICBzcGVjaWZpY2F0aW9ucyBiZWhhdmUgYXMgaWYgYSB6ZXJvIHZhbHVlIG9yIG51bGwgc3RyaW5nLCBhcyBhcHByb3ByaWF0ZSwKICAgIGhhZCBiZWVuIHN1cHBsaWVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYSB3cml0ZSBvciBhc3NpZ25tZW50CiAgICBlcnJvciBvY2N1cnMuAEdOVSBiYXNoLCB2ZXJzaW9uICVzICglcykKAEdOVSBiYXNoLCB2ZXJzaW9uICVzLSglcykKAEdOVSBsb25nIG9wdGlvbnM6CgBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPgoAR3JvdXAgY29tbWFuZHMgYXMgYSB1bml0LgogICAgCiAgICBSdW4gYSBzZXQgb2YgY29tbWFuZHMgaW4gYSBncm91cC4gIFRoaXMgaXMgb25lIHdheSB0byByZWRpcmVjdCBhbgogICAgZW50aXJlIHNldCBvZiBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4ASEZUIGlucHV0IGRhdGEgcGVuZGluZwBIRlQgbW9uaXRvciBtb2RlIGdyYW50ZWQASEZUIG1vbml0b3IgbW9kZSByZXRyYWN0ZWQASEZUIHNvdW5kIHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQASE9NRSBub3Qgc2V0AEhhbmd1cABJIGhhdmUgbm8gbmFtZSEASS9PIHJlYWR5AElORk9STTogAElsbGVnYWwgaW5zdHJ1Y3Rpb24ASW5mb3JtYXRpb24gcmVxdWVzdABJbnRlcnJ1cHQAS2lsbGVkAExpY2Vuc2UgR1BMdjMrOiBHTlUgR1BMIHZlcnNpb24gMyBvciBsYXRlciA8aHR0cDovL2dudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWw+CgBNYXJrIHNoZWxsIHZhcmlhYmxlcyBhcyB1bmNoYW5nZWFibGUuCiAgICAKICAgIE1hcmsgZWFjaCBOQU1FIGFzIHJlYWQtb25seTsgdGhlIHZhbHVlcyBvZiB0aGVzZSBOQU1FcyBtYXkgbm90IGJlCiAgICBjaGFuZ2VkIGJ5IHN1YnNlcXVlbnQgYXNzaWdubWVudC4gIElmIFZBTFVFIGlzIHN1cHBsaWVkLCBhc3NpZ24gVkFMVUUKICAgIGJlZm9yZSBtYXJraW5nIGFzIHJlYWQtb25seS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWEJcmVmZXIgdG8gaW5kZXhlZCBhcnJheSB2YXJpYWJsZXMKICAgICAgLUEJcmVmZXIgdG8gYXNzb2NpYXRpdmUgYXJyYXkgdmFyaWFibGVzCiAgICAgIC1mCXJlZmVyIHRvIHNoZWxsIGZ1bmN0aW9ucwogICAgICAtcAlkaXNwbGF5IGEgbGlzdCBvZiBhbGwgcmVhZG9ubHkgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucywKICAgIAkJZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZSAtZiBvcHRpb24gaXMgZ2l2ZW4KICAgIAogICAgQW4gYXJndW1lbnQgb2Yg4oCYLS3igJkgZGlzYWJsZXMgZnVydGhlciBvcHRpb24gcHJvY2Vzc2luZy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIE5BTUUgaXMgaW52YWxpZC4ATW9kaWZ5IG9yIGRpc3BsYXkgY29tcGxldGlvbiBvcHRpb25zLgogICAgCiAgICBNb2RpZnkgdGhlIGNvbXBsZXRpb24gb3B0aW9ucyBmb3IgZWFjaCBOQU1FLCBvciwgaWYgbm8gTkFNRXMgYXJlIHN1cHBsaWVkLAogICAgdGhlIGNvbXBsZXRpb24gY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLiAgSWYgbm8gT1BUSU9OcyBhcmUgZ2l2ZW4sIHByaW50CiAgICB0aGUgY29tcGxldGlvbiBvcHRpb25zIGZvciBlYWNoIE5BTUUgb3IgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uLgogICAgCiAgICBPcHRpb25zOgogICAgCS1vIG9wdGlvbglTZXQgY29tcGxldGlvbiBvcHRpb24gT1BUSU9OIGZvciBlYWNoIE5BTUUKICAgIAktRAkJQ2hhbmdlIG9wdGlvbnMgZm9yIHRoZSDigJxkZWZhdWx04oCdIGNvbW1hbmQgY29tcGxldGlvbgogICAgCS1FCQlDaGFuZ2Ugb3B0aW9ucyBmb3IgdGhlIOKAnGVtcHR54oCdIGNvbW1hbmQgY29tcGxldGlvbgogICAgCiAgICBVc2luZyDigJgrb+KAmSBpbnN0ZWFkIG9mIOKAmC1v4oCZIHR1cm5zIG9mZiB0aGUgc3BlY2lmaWVkIG9wdGlvbi4KICAgIAogICAgQXJndW1lbnRzOgogICAgCiAgICBFYWNoIE5BTUUgcmVmZXJzIHRvIGEgY29tbWFuZCBmb3Igd2hpY2ggYSBjb21wbGV0aW9uIHNwZWNpZmljYXRpb24gbXVzdAogICAgaGF2ZSBwcmV2aW91c2x5IGJlZW4gZGVmaW5lZCB1c2luZyB0aGUg4oCYY29tcGxldGXigJkgYnVpbHRpbi4gIElmIG5vIE5BTUVzCiAgICBhcmUgc3VwcGxpZWQsIGNvbXBvcHQgbXVzdCBiZSBjYWxsZWQgYnkgYSBmdW5jdGlvbiBjdXJyZW50bHkgZ2VuZXJhdGluZwogICAgY29tcGxldGlvbnMsIGFuZCB0aGUgb3B0aW9ucyBmb3IgdGhhdCBjdXJyZW50bHktZXhlY3V0aW5nIGNvbXBsZXRpb24KICAgIGdlbmVyYXRvciBhcmUgbW9kaWZpZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBOQU1FIGRvZXMgbm90CiAgICBoYXZlIGEgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uIGRlZmluZWQuAE1vZGlmeSBzaGVsbCByZXNvdXJjZSBsaW1pdHMuCiAgICAKICAgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byB0aGUgc2hlbGwgYW5kIHByb2Nlc3NlcwogICAgaXQgY3JlYXRlcywgb24gc3lzdGVtcyB0aGF0IGFsbG93IHN1Y2ggY29udHJvbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLVMJdXNlIHRoZSDigJhzb2Z04oCZIHJlc291cmNlIGxpbWl0CiAgICAgIC1ICXVzZSB0aGUg4oCYaGFyZOKAmSByZXNvdXJjZSBsaW1pdAogICAgICAtYQlhbGwgY3VycmVudCBsaW1pdHMgYXJlIHJlcG9ydGVkCiAgICAgIC1iCXRoZSBzb2NrZXQgYnVmZmVyIHNpemUKICAgICAgLWMJdGhlIG1heGltdW0gc2l6ZSBvZiBjb3JlIGZpbGVzIGNyZWF0ZWQKICAgICAgLWQJdGhlIG1heGltdW0gc2l6ZSBvZiBhIHByb2Nlc3MncyBkYXRhIHNlZ21lbnQKICAgICAgLWUJdGhlIG1heGltdW0gc2NoZWR1bGluZyBwcmlvcml0eSAo4oCYbmljZeKAmSkKICAgICAgLWYJdGhlIG1heGltdW0gc2l6ZSBvZiBmaWxlcyB3cml0dGVuIGJ5IHRoZSBzaGVsbCBhbmQgaXRzIGNoaWxkcmVuCiAgICAgIC1pCXRoZSBtYXhpbXVtIG51bWJlciBvZiBwZW5kaW5nIHNpZ25hbHMKICAgICAgLWsJdGhlIG1heGltdW0gbnVtYmVyIG9mIGtxdWV1ZXMgYWxsb2NhdGVkIGZvciB0aGlzIHByb2Nlc3MKICAgICAgLWwJdGhlIG1heGltdW0gc2l6ZSBhIHByb2Nlc3MgbWF5IGxvY2sgaW50byBtZW1vcnkKICAgICAgLW0JdGhlIG1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUKICAgICAgLW4JdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycwogICAgICAtcAl0aGUgcGlwZSBidWZmZXIgc2l6ZQogICAgICAtcQl0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gUE9TSVggbWVzc2FnZSBxdWV1ZXMKICAgICAgLXIJdGhlIG1heGltdW0gcmVhbC10aW1lIHNjaGVkdWxpbmcgcHJpb3JpdHkKICAgICAgLXMJdGhlIG1heGltdW0gc3RhY2sgc2l6ZQogICAgICAtdAl0aGUgbWF4aW11bSBhbW91bnQgb2YgY3B1IHRpbWUgaW4gc2Vjb25kcwogICAgICAtdQl0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciBwcm9jZXNzZXMKICAgICAgLXYJdGhlIHNpemUgb2YgdmlydHVhbCBtZW1vcnkKICAgICAgLXgJdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGUgbG9ja3MKICAgICAgLVAJdGhlIG1heGltdW0gbnVtYmVyIG9mIHBzZXVkb3Rlcm1pbmFscwogICAgICAtVAl0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcwogICAgCiAgICBOb3QgYWxsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLgogICAgCiAgICBJZiBMSU1JVCBpcyBnaXZlbiwgaXQgaXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlOyB0aGUKICAgIHNwZWNpYWwgTElNSVQgdmFsdWVzIOKAmHNvZnTigJksIOKAmGhhcmTigJksIGFuZCDigJh1bmxpbWl0ZWTigJkgc3RhbmQgZm9yIHRoZQogICAgY3VycmVudCBzb2Z0IGxpbWl0LCB0aGUgY3VycmVudCBoYXJkIGxpbWl0LCBhbmQgbm8gbGltaXQsIHJlc3BlY3RpdmVseS4KICAgIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBwcmludGVkLiAgSWYKICAgIG5vIG9wdGlvbiBpcyBnaXZlbiwgdGhlbiAtZiBpcyBhc3N1bWVkLgogICAgCiAgICBWYWx1ZXMgYXJlIGluIDEwMjQtYnl0ZSBpbmNyZW1lbnRzLCBleGNlcHQgZm9yIC10LCB3aGljaCBpcyBpbiBzZWNvbmRzLAogICAgLXAsIHdoaWNoIGlzIGluIGluY3JlbWVudHMgb2YgNTEyIGJ5dGVzLCBhbmQgLXUsIHdoaWNoIGlzIGFuIHVuc2NhbGVkCiAgICBudW1iZXIgb2YgcHJvY2Vzc2VzLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgc3VwcGxpZWQgb3IgYW4gZXJyb3Igb2NjdXJzLgBNb3ZlIGpvYiB0byB0aGUgZm9yZWdyb3VuZC4KICAgIAogICAgUGxhY2UgdGhlIGpvYiBpZGVudGlmaWVkIGJ5IEpPQl9TUEVDIGluIHRoZSBmb3JlZ3JvdW5kLCBtYWtpbmcgaXQgdGhlCiAgICBjdXJyZW50IGpvYi4gIElmIEpPQl9TUEVDIGlzIG5vdCBwcmVzZW50LCB0aGUgc2hlbGwncyBub3Rpb24gb2YgdGhlCiAgICBjdXJyZW50IGpvYiBpcyB1c2VkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFN0YXR1cyBvZiBjb21tYW5kIHBsYWNlZCBpbiBmb3JlZ3JvdW5kLCBvciBmYWlsdXJlIGlmIGFuIGVycm9yIG9jY3Vycy4ATW92ZSBqb2JzIHRvIHRoZSBiYWNrZ3JvdW5kLgogICAgCiAgICBQbGFjZSB0aGUgam9icyBpZGVudGlmaWVkIGJ5IGVhY2ggSk9CX1NQRUMgaW4gdGhlIGJhY2tncm91bmQsIGFzIGlmIHRoZXkKICAgIGhhZCBiZWVuIHN0YXJ0ZWQgd2l0aCDigJgm4oCZLiAgSWYgSk9CX1NQRUMgaXMgbm90IHByZXNlbnQsIHRoZSBzaGVsbCdzIG5vdGlvbgogICAgb2YgdGhlIGN1cnJlbnQgam9iIGlzIHVzZWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAE51bGwgY29tbWFuZC4KICAgIAogICAgTm8gZWZmZWN0OyB0aGUgY29tbWFuZCBkb2VzIG5vdGhpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBPTERQV0Qgbm90IHNldABQYXJzZSBvcHRpb24gYXJndW1lbnRzLgogICAgCiAgICBHZXRvcHRzIGlzIHVzZWQgYnkgc2hlbGwgcHJvY2VkdXJlcyB0byBwYXJzZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKICAgIGFzIG9wdGlvbnMuCiAgICAKICAgIE9QVFNUUklORyBjb250YWlucyB0aGUgb3B0aW9uIGxldHRlcnMgdG8gYmUgcmVjb2duaXplZDsgaWYgYSBsZXR0ZXIKICAgIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24sIHRoZSBvcHRpb24gaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhbiBhcmd1bWVudCwKICAgIHdoaWNoIHNob3VsZCBiZSBzZXBhcmF0ZWQgZnJvbSBpdCBieSB3aGl0ZSBzcGFjZS4KICAgIAogICAgRWFjaCB0aW1lIGl0IGlzIGludm9rZWQsIGdldG9wdHMgd2lsbCBwbGFjZSB0aGUgbmV4dCBvcHRpb24gaW4gdGhlCiAgICBzaGVsbCB2YXJpYWJsZSAkbmFtZSwgaW5pdGlhbGl6aW5nIG5hbWUgaWYgaXQgZG9lcyBub3QgZXhpc3QsIGFuZAogICAgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGFyZ3VtZW50IHRvIGJlIHByb2Nlc3NlZCBpbnRvIHRoZSBzaGVsbAogICAgdmFyaWFibGUgT1BUSU5ELiAgT1BUSU5EIGlzIGluaXRpYWxpemVkIHRvIDEgZWFjaCB0aW1lIHRoZSBzaGVsbCBvcgogICAgYSBzaGVsbCBzY3JpcHQgaXMgaW52b2tlZC4gIFdoZW4gYW4gb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAogICAgZ2V0b3B0cyBwbGFjZXMgdGhhdCBhcmd1bWVudCBpbnRvIHRoZSBzaGVsbCB2YXJpYWJsZSBPUFRBUkcuCiAgICAKICAgIGdldG9wdHMgcmVwb3J0cyBlcnJvcnMgaW4gb25lIG9mIHR3byB3YXlzLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlcgogICAgb2YgT1BUU1RSSU5HIGlzIGEgY29sb24sIGdldG9wdHMgdXNlcyBzaWxlbnQgZXJyb3IgcmVwb3J0aW5nLiAgSW4KICAgIHRoaXMgbW9kZSwgbm8gZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50ZWQuICBJZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgc2VlbiwgZ2V0b3B0cyBwbGFjZXMgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgZm91bmQgaW50byBPUFRBUkcuICBJZiBhCiAgICByZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgZm91bmQsIGdldG9wdHMgcGxhY2VzIGEg4oCYOuKAmSBpbnRvIE5BTUUgYW5kCiAgICBzZXRzIE9QVEFSRyB0byB0aGUgb3B0aW9uIGNoYXJhY3RlciBmb3VuZC4gIElmIGdldG9wdHMgaXMgbm90IGluCiAgICBzaWxlbnQgbW9kZSwgYW5kIGFuIGludmFsaWQgb3B0aW9uIGlzIHNlZW4sIGdldG9wdHMgcGxhY2VzIOKAmD/igJkgaW50bwogICAgTkFNRSBhbmQgdW5zZXRzIE9QVEFSRy4gIElmIGEgcmVxdWlyZWQgYXJndW1lbnQgaXMgbm90IGZvdW5kLCBhIOKAmD/igJkKICAgIGlzIHBsYWNlZCBpbiBOQU1FLCBPUFRBUkcgaXMgdW5zZXQsIGFuZCBhIGRpYWdub3N0aWMgbWVzc2FnZSBpcwogICAgcHJpbnRlZC4KICAgIAogICAgSWYgdGhlIHNoZWxsIHZhcmlhYmxlIE9QVEVSUiBoYXMgdGhlIHZhbHVlIDAsIGdldG9wdHMgZGlzYWJsZXMgdGhlCiAgICBwcmludGluZyBvZiBlcnJvciBtZXNzYWdlcywgZXZlbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCiAgICBPUFRTVFJJTkcgaXMgbm90IGEgY29sb24uICBPUFRFUlIgaGFzIHRoZSB2YWx1ZSAxIGJ5IGRlZmF1bHQuCiAgICAKICAgIEdldG9wdHMgbm9ybWFsbHkgcGFyc2VzIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgKCQwIC0gJDkpLCBidXQgaWYKICAgIG1vcmUgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhleSBhcmUgcGFyc2VkIGluc3RlYWQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIGlmIGFuIG9wdGlvbiBpcyBmb3VuZDsgZmFpbHMgaWYgdGhlIGVuZCBvZiBvcHRpb25zIGlzCiAgICBlbmNvdW50ZXJlZCBvciBhbiBlcnJvciBvY2N1cnMuAFByaW50IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtTAlwcmludCB0aGUgdmFsdWUgb2YgJFBXRCBpZiBpdCBuYW1lcyB0aGUgY3VycmVudCB3b3JraW5nCiAgICAJCWRpcmVjdG9yeQogICAgICAtUAlwcmludCB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBzeW1ib2xpYyBsaW5rcwogICAgCiAgICBCeSBkZWZhdWx0LCDigJhwd2TigJkgYmVoYXZlcyBhcyBpZiDigJgtTOKAmSB3ZXJlIHNwZWNpZmllZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIDAgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeQogICAgY2Fubm90IGJlIHJlYWQuAFF1aXQAUmVhZCBhIGxpbmUgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIHNwbGl0IGl0IGludG8gZmllbGRzLgogICAgCiAgICBSZWFkcyBhIHNpbmdsZSBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBvciBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRAogICAgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSBsaW5lIGlzIHNwbGl0IGludG8gZmllbGRzIGFzIHdpdGggd29yZAogICAgc3BsaXR0aW5nLCBhbmQgdGhlIGZpcnN0IHdvcmQgaXMgYXNzaWduZWQgdG8gdGhlIGZpcnN0IE5BTUUsIHRoZSBzZWNvbmQKICAgIHdvcmQgdG8gdGhlIHNlY29uZCBOQU1FLCBhbmQgc28gb24sIHdpdGggYW55IGxlZnRvdmVyIHdvcmRzIGFzc2lnbmVkIHRvCiAgICB0aGUgbGFzdCBOQU1FLiAgT25seSB0aGUgY2hhcmFjdGVycyBmb3VuZCBpbiAkSUZTIGFyZSByZWNvZ25pemVkIGFzIHdvcmQKICAgIGRlbGltaXRlcnMuCiAgICAKICAgIElmIG5vIE5BTUVzIGFyZSBzdXBwbGllZCwgdGhlIGxpbmUgcmVhZCBpcyBzdG9yZWQgaW4gdGhlIFJFUExZIHZhcmlhYmxlLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSBhcnJheQlhc3NpZ24gdGhlIHdvcmRzIHJlYWQgdG8gc2VxdWVudGlhbCBpbmRpY2VzIG9mIHRoZSBhcnJheQogICAgCQl2YXJpYWJsZSBBUlJBWSwgc3RhcnRpbmcgYXQgemVybwogICAgICAtZCBkZWxpbQljb250aW51ZSB1bnRpbCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIERFTElNIGlzIHJlYWQsIHJhdGhlcgogICAgCQl0aGFuIG5ld2xpbmUKICAgICAgLWUJdXNlIFJlYWRsaW5lIHRvIG9idGFpbiB0aGUgbGluZSBpbiBhbiBpbnRlcmFjdGl2ZSBzaGVsbAogICAgICAtaSB0ZXh0CXVzZSBURVhUIGFzIHRoZSBpbml0aWFsIHRleHQgZm9yIFJlYWRsaW5lCiAgICAgIC1uIG5jaGFycwlyZXR1cm4gYWZ0ZXIgcmVhZGluZyBOQ0hBUlMgY2hhcmFjdGVycyByYXRoZXIgdGhhbiB3YWl0aW5nCiAgICAJCWZvciBhIG5ld2xpbmUsIGJ1dCBob25vciBhIGRlbGltaXRlciBpZiBmZXdlciB0aGFuCiAgICAJCU5DSEFSUyBjaGFyYWN0ZXJzIGFyZSByZWFkIGJlZm9yZSB0aGUgZGVsaW1pdGVyCiAgICAgIC1OIG5jaGFycwlyZXR1cm4gb25seSBhZnRlciByZWFkaW5nIGV4YWN0bHkgTkNIQVJTIGNoYXJhY3RlcnMsIHVubGVzcwogICAgCQlFT0YgaXMgZW5jb3VudGVyZWQgb3IgcmVhZCB0aW1lcyBvdXQsIGlnbm9yaW5nIGFueQogICAgCQlkZWxpbWl0ZXIKICAgICAgLXAgcHJvbXB0CW91dHB1dCB0aGUgc3RyaW5nIFBST01QVCB3aXRob3V0IGEgdHJhaWxpbmcgbmV3bGluZSBiZWZvcmUKICAgIAkJYXR0ZW1wdGluZyB0byByZWFkCiAgICAgIC1yCWRvIG5vdCBhbGxvdyBiYWNrc2xhc2hlcyB0byBlc2NhcGUgYW55IGNoYXJhY3RlcnMKICAgICAgLXMJZG8gbm90IGVjaG8gaW5wdXQgY29taW5nIGZyb20gYSB0ZXJtaW5hbAogICAgICAtdCB0aW1lb3V0CXRpbWUgb3V0IGFuZCByZXR1cm4gZmFpbHVyZSBpZiBhIGNvbXBsZXRlIGxpbmUgb2YKICAgIAkJaW5wdXQgaXMgbm90IHJlYWQgd2l0aGluIFRJTUVPVVQgc2Vjb25kcy4gIFRoZSB2YWx1ZSBvZiB0aGUKICAgIAkJVE1PVVQgdmFyaWFibGUgaXMgdGhlIGRlZmF1bHQgdGltZW91dC4gIFRJTUVPVVQgbWF5IGJlIGEKICAgIAkJZnJhY3Rpb25hbCBudW1iZXIuICBJZiBUSU1FT1VUIGlzIDAsIHJlYWQgcmV0dXJucwogICAgCQlpbW1lZGlhdGVseSwgd2l0aG91dCB0cnlpbmcgdG8gcmVhZCBhbnkgZGF0YSwgcmV0dXJuaW5nCiAgICAJCXN1Y2Nlc3Mgb25seSBpZiBpbnB1dCBpcyBhdmFpbGFibGUgb24gdGhlIHNwZWNpZmllZAogICAgCQlmaWxlIGRlc2NyaXB0b3IuICBUaGUgZXhpdCBzdGF0dXMgaXMgZ3JlYXRlciB0aGFuIDEyOAogICAgCQlpZiB0aGUgdGltZW91dCBpcyBleGNlZWRlZAogICAgICAtdSBmZAlyZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yIEZEIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGlucHV0CiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBjb2RlIGlzIHplcm8sIHVubGVzcyBlbmQtb2YtZmlsZSBpcyBlbmNvdW50ZXJlZCwgcmVhZCB0aW1lcyBvdXQKICAgIChpbiB3aGljaCBjYXNlIGl0J3MgZ3JlYXRlciB0aGFuIDEyOCksIGEgdmFyaWFibGUgYXNzaWdubWVudCBlcnJvciBvY2N1cnMsCiAgICBvciBhbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBpcyBzdXBwbGllZCBhcyB0aGUgYXJndW1lbnQgdG8gLXUuAFJlYWQgbGluZXMgZnJvbSBhIGZpbGUgaW50byBhbiBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgQSBzeW5vbnltIGZvciDigJhtYXBmaWxl4oCZLgBSZWFkIGxpbmVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGludG8gYW4gaW5kZXhlZCBhcnJheSB2YXJpYWJsZS4KICAgIAogICAgUmVhZCBsaW5lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpbnRvIHRoZSBpbmRleGVkIGFycmF5IHZhcmlhYmxlIEFSUkFZLCBvcgogICAgZnJvbSBmaWxlIGRlc2NyaXB0b3IgRkQgaWYgdGhlIC11IG9wdGlvbiBpcyBzdXBwbGllZC4gIFRoZSB2YXJpYWJsZSBNQVBGSUxFCiAgICBpcyB0aGUgZGVmYXVsdCBBUlJBWS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWQgZGVsaW0JVXNlIERFTElNIHRvIHRlcm1pbmF0ZSBsaW5lcywgaW5zdGVhZCBvZiBuZXdsaW5lCiAgICAgIC1uIGNvdW50CUNvcHkgYXQgbW9zdCBDT1VOVCBsaW5lcy4gIElmIENPVU5UIGlzIDAsIGFsbCBsaW5lcyBhcmUgY29waWVkCiAgICAgIC1PIG9yaWdpbglCZWdpbiBhc3NpZ25pbmcgdG8gQVJSQVkgYXQgaW5kZXggT1JJR0lOLiAgVGhlIGRlZmF1bHQgaW5kZXggaXMgMAogICAgICAtcyBjb3VudAlEaXNjYXJkIHRoZSBmaXJzdCBDT1VOVCBsaW5lcyByZWFkCiAgICAgIC10CVJlbW92ZSBhIHRyYWlsaW5nIERFTElNIGZyb20gZWFjaCBsaW5lIHJlYWQgKGRlZmF1bHQgbmV3bGluZSkKICAgICAgLXUgZmQJUmVhZCBsaW5lcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBGRCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBpbnB1dAogICAgICAtQyBjYWxsYmFjawlFdmFsdWF0ZSBDQUxMQkFDSyBlYWNoIHRpbWUgUVVBTlRVTSBsaW5lcyBhcmUgcmVhZAogICAgICAtYyBxdWFudHVtCVNwZWNpZnkgdGhlIG51bWJlciBvZiBsaW5lcyByZWFkIGJldHdlZW4gZWFjaCBjYWxsIHRvCiAgICAJCQlDQUxMQkFDSwogICAgCiAgICBBcmd1bWVudHM6CiAgICAgIEFSUkFZCUFycmF5IHZhcmlhYmxlIG5hbWUgdG8gdXNlIGZvciBmaWxlIGRhdGEKICAgIAogICAgSWYgLUMgaXMgc3VwcGxpZWQgd2l0aG91dCAtYywgdGhlIGRlZmF1bHQgcXVhbnR1bSBpcyA1MDAwLiAgV2hlbgogICAgQ0FMTEJBQ0sgaXMgZXZhbHVhdGVkLCBpdCBpcyBzdXBwbGllZCB0aGUgaW5kZXggb2YgdGhlIG5leHQgYXJyYXkKICAgIGVsZW1lbnQgdG8gYmUgYXNzaWduZWQgYW5kIHRoZSBsaW5lIHRvIGJlIGFzc2lnbmVkIHRvIHRoYXQgZWxlbWVudAogICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICAKICAgIElmIG5vdCBzdXBwbGllZCB3aXRoIGFuIGV4cGxpY2l0IG9yaWdpbiwgbWFwZmlsZSB3aWxsIGNsZWFyIEFSUkFZIGJlZm9yZQogICAgYXNzaWduaW5nIHRvIGl0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4gb3IgQVJSQVkgaXMgcmVhZG9ubHkgb3IKICAgIG5vdCBhbiBpbmRleGVkIGFycmF5LgBSZWNvcmQgbG9jawBSZW1lbWJlciBvciBkaXNwbGF5IHByb2dyYW0gbG9jYXRpb25zLgogICAgCiAgICBEZXRlcm1pbmUgYW5kIHJlbWVtYmVyIHRoZSBmdWxsIHBhdGhuYW1lIG9mIGVhY2ggY29tbWFuZCBOQU1FLiAgSWYKICAgIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGluZm9ybWF0aW9uIGFib3V0IHJlbWVtYmVyZWQgY29tbWFuZHMgaXMgZGlzcGxheWVkLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZAlmb3JnZXQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FCiAgICAgIC1sCWRpc3BsYXkgaW4gYSBmb3JtYXQgdGhhdCBtYXkgYmUgcmV1c2VkIGFzIGlucHV0CiAgICAgIC1wIHBhdGhuYW1lCXVzZSBQQVRITkFNRSBhcyB0aGUgZnVsbCBwYXRobmFtZSBvZiBOQU1FCiAgICAgIC1yCWZvcmdldCBhbGwgcmVtZW1iZXJlZCBsb2NhdGlvbnMKICAgICAgLXQJcHJpbnQgdGhlIHJlbWVtYmVyZWQgbG9jYXRpb24gb2YgZWFjaCBOQU1FLCBwcmVjZWRpbmcKICAgIAkJZWFjaCBsb2NhdGlvbiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIE5BTUUgaWYgbXVsdGlwbGUKICAgIAkJTkFNRXMgYXJlIGdpdmVuCiAgICBBcmd1bWVudHM6CiAgICAgIE5BTUUJRWFjaCBOQU1FIGlzIHNlYXJjaGVkIGZvciBpbiAkUEFUSCBhbmQgYWRkZWQgdG8gdGhlIGxpc3QKICAgIAkJb2YgcmVtZW1iZXJlZCBjb21tYW5kcy4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIE5BTUUgaXMgbm90IGZvdW5kIG9yIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBSZW1vdmUgZGlyZWN0b3JpZXMgZnJvbSBzdGFjay4KICAgIAogICAgUmVtb3ZlcyBlbnRyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBzdGFjay4gIFdpdGggbm8gYXJndW1lbnRzLCByZW1vdmVzCiAgICB0aGUgdG9wIGRpcmVjdG9yeSBmcm9tIHRoZSBzdGFjaywgYW5kIGNoYW5nZXMgdG8gdGhlIG5ldyB0b3AgZGlyZWN0b3J5LgogICAgCiAgICBPcHRpb25zOgogICAgICAtbglTdXBwcmVzc2VzIHRoZSBub3JtYWwgY2hhbmdlIG9mIGRpcmVjdG9yeSB3aGVuIHJlbW92aW5nCiAgICAJCWRpcmVjdG9yaWVzIGZyb20gdGhlIHN0YWNrLCBzbyBvbmx5IHRoZSBzdGFjayBpcyBtYW5pcHVsYXRlZC4KICAgIAogICAgQXJndW1lbnRzOgogICAgICArTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbGlzdAogICAgCQlzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYcG9wZCArMOKAmQogICAgCQlyZW1vdmVzIHRoZSBmaXJzdCBkaXJlY3RvcnksIOKAmHBvcGQgKzHigJkgdGhlIHNlY29uZC4KICAgIAogICAgICAtTglSZW1vdmVzIHRoZSBOdGggZW50cnkgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGxpc3QKICAgIAkJc2hvd24gYnkg4oCYZGlyc+KAmSwgc3RhcnRpbmcgd2l0aCB6ZXJvLiAgRm9yIGV4YW1wbGU6IOKAmHBvcGQgLTDigJkKICAgIAkJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIOKAmHBvcGQgLTHigJkgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIOKAmGRpcnPigJkgYnVpbHRpbiBkaXNwbGF5cyB0aGUgZGlyZWN0b3J5IHN0YWNrLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYW4gaW52YWxpZCBhcmd1bWVudCBpcyBzdXBwbGllZCBvciB0aGUgZGlyZWN0b3J5CiAgICBjaGFuZ2UgZmFpbHMuAFJlbW92ZSBlYWNoIE5BTUUgZnJvbSB0aGUgbGlzdCBvZiBkZWZpbmVkIGFsaWFzZXMuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1hCXJlbW92ZSBhbGwgYWxpYXMgZGVmaW5pdGlvbnMKICAgIAogICAgUmV0dXJuIHN1Y2Nlc3MgdW5sZXNzIGEgTkFNRSBpcyBub3QgYW4gZXhpc3RpbmcgYWxpYXMuAFJlbW92ZSBqb2JzIGZyb20gY3VycmVudCBzaGVsbC4KICAgIAogICAgUmVtb3ZlcyBlYWNoIEpPQlNQRUMgYXJndW1lbnQgZnJvbSB0aGUgdGFibGUgb2YgYWN0aXZlIGpvYnMuICBXaXRob3V0CiAgICBhbnkgSk9CU1BFQ3MsIHRoZSBzaGVsbCB1c2VzIGl0cyBub3Rpb24gb2YgdGhlIGN1cnJlbnQgam9iLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYQlyZW1vdmUgYWxsIGpvYnMgaWYgSk9CU1BFQyBpcyBub3Qgc3VwcGxpZWQKICAgICAgLWgJbWFyayBlYWNoIEpPQlNQRUMgc28gdGhhdCBTSUdIVVAgaXMgbm90IHNlbnQgdG8gdGhlIGpvYiBpZiB0aGUKICAgIAkJc2hlbGwgcmVjZWl2ZXMgYSBTSUdIVVAKICAgICAgLXIJcmVtb3ZlIG9ubHkgcnVubmluZyBqb2JzCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBvciBKT0JTUEVDIGlzIGdpdmVuLgBSZW1vdmVzIGVudHJpZXMgZnJvbSB0aGUgZGlyZWN0b3J5IHN0YWNrLiAgV2l0aCBubyBhcmd1bWVudHMsIHJlbW92ZXMKICAgIHRoZSB0b3AgZGlyZWN0b3J5IGZyb20gdGhlIHN0YWNrLCBhbmQgY2hhbmdlcyB0byB0aGUgbmV3IHRvcCBkaXJlY3RvcnkuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1uCVN1cHByZXNzZXMgdGhlIG5vcm1hbCBjaGFuZ2Ugb2YgZGlyZWN0b3J5IHdoZW4gcmVtb3ZpbmcKICAgIAlkaXJlY3RvcmllcyBmcm9tIHRoZSBzdGFjaywgc28gb25seSB0aGUgc3RhY2sgaXMgbWFuaXB1bGF0ZWQuCiAgICAKICAgIEFyZ3VtZW50czoKICAgICAgK04JUmVtb3ZlcyB0aGUgTnRoIGVudHJ5IGNvdW50aW5nIGZyb20gdGhlIGxlZnQgb2YgdGhlIGxpc3QKICAgIAlzaG93biBieSDigJhkaXJz4oCZLCBzdGFydGluZyB3aXRoIHplcm8uICBGb3IgZXhhbXBsZTog4oCYcG9wZCArMOKAmQogICAgCXJlbW92ZXMgdGhlIGZpcnN0IGRpcmVjdG9yeSwg4oCYcG9wZCArMeKAmSB0aGUgc2Vjb25kLgogICAgCiAgICAgIC1OCVJlbW92ZXMgdGhlIE50aCBlbnRyeSBjb3VudGluZyBmcm9tIHRoZSByaWdodCBvZiB0aGUgbGlzdAogICAgCXNob3duIGJ5IOKAmGRpcnPigJksIHN0YXJ0aW5nIHdpdGggemVyby4gIEZvciBleGFtcGxlOiDigJhwb3BkIC0w4oCZCiAgICAJcmVtb3ZlcyB0aGUgbGFzdCBkaXJlY3RvcnksIOKAmHBvcGQgLTHigJkgdGhlIG5leHQgdG8gbGFzdC4KICAgIAogICAgVGhlIOKAmGRpcnPigJkgYnVpbHRpbiBkaXNwbGF5cyB0aGUgZGlyZWN0b3J5IHN0YWNrLgBSZXBsYWNlIHRoZSBzaGVsbCB3aXRoIHRoZSBnaXZlbiBjb21tYW5kLgogICAgCiAgICBFeGVjdXRlIENPTU1BTkQsIHJlcGxhY2luZyB0aGlzIHNoZWxsIHdpdGggdGhlIHNwZWNpZmllZCBwcm9ncmFtLgogICAgQVJHVU1FTlRTIGJlY29tZSB0aGUgYXJndW1lbnRzIHRvIENPTU1BTkQuICBJZiBDT01NQU5EIGlzIG5vdCBzcGVjaWZpZWQsCiAgICBhbnkgcmVkaXJlY3Rpb25zIHRha2UgZWZmZWN0IGluIHRoZSBjdXJyZW50IHNoZWxsLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSBuYW1lCXBhc3MgTkFNRSBhcyB0aGUgemVyb3RoIGFyZ3VtZW50IHRvIENPTU1BTkQKICAgICAgLWMJZXhlY3V0ZSBDT01NQU5EIHdpdGggYW4gZW1wdHkgZW52aXJvbm1lbnQKICAgICAgLWwJcGxhY2UgYSBkYXNoIGluIHRoZSB6ZXJvdGggYXJndW1lbnQgdG8gQ09NTUFORAogICAgCiAgICBJZiB0aGUgY29tbWFuZCBjYW5ub3QgYmUgZXhlY3V0ZWQsIGEgbm9uLWludGVyYWN0aXZlIHNoZWxsIGV4aXRzLCB1bmxlc3MKICAgIHRoZSBzaGVsbCBvcHRpb24g4oCYZXhlY2ZhaWzigJkgaXMgc2V0LgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgQ09NTUFORCBpcyBub3QgZm91bmQgb3IgYSByZWRpcmVjdGlvbiBlcnJvciBvY2N1cnMuAFJlcG9ydCB0aW1lIGNvbnN1bWVkIGJ5IHBpcGVsaW5lJ3MgZXhlY3V0aW9uLgogICAgCiAgICBFeGVjdXRlIFBJUEVMSU5FIGFuZCBwcmludCBhIHN1bW1hcnkgb2YgdGhlIHJlYWwgdGltZSwgdXNlciBDUFUgdGltZSwKICAgIGFuZCBzeXN0ZW0gQ1BVIHRpbWUgc3BlbnQgZXhlY3V0aW5nIFBJUEVMSU5FIHdoZW4gaXQgdGVybWluYXRlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXAJcHJpbnQgdGhlIHRpbWluZyBzdW1tYXJ5IGluIHRoZSBwb3J0YWJsZSBQb3NpeCBmb3JtYXQKICAgIAogICAgVGhlIHZhbHVlIG9mIHRoZSBUSU1FRk9STUFUIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIG91dHB1dCBmb3JtYXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgVGhlIHJldHVybiBzdGF0dXMgaXMgdGhlIHJldHVybiBzdGF0dXMgb2YgUElQRUxJTkUuAFJlc3VtZSBmb3IsIHdoaWxlLCBvciB1bnRpbCBsb29wcy4KICAgIAogICAgUmVzdW1lcyB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIGVuY2xvc2luZyBGT1IsIFdISUxFIG9yIFVOVElMIGxvb3AuCiAgICBJZiBOIGlzIHNwZWNpZmllZCwgcmVzdW1lcyB0aGUgTnRoIGVuY2xvc2luZyBsb29wLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFRoZSBleGl0IHN0YXR1cyBpcyAwIHVubGVzcyBOIGlzIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMS4AUmVzdW1lIGpvYiBpbiBmb3JlZ3JvdW5kLgogICAgCiAgICBFcXVpdmFsZW50IHRvIHRoZSBKT0JfU1BFQyBhcmd1bWVudCB0byB0aGUg4oCYZmfigJkgY29tbWFuZC4gIFJlc3VtZSBhCiAgICBzdG9wcGVkIG9yIGJhY2tncm91bmQgam9iLiAgSk9CX1NQRUMgY2FuIHNwZWNpZnkgZWl0aGVyIGEgam9iIG5hbWUKICAgIG9yIGEgam9iIG51bWJlci4gIEZvbGxvd2luZyBKT0JfU1BFQyB3aXRoIGEg4oCYJuKAmSBwbGFjZXMgdGhlIGpvYiBpbgogICAgdGhlIGJhY2tncm91bmQsIGFzIGlmIHRoZSBqb2Igc3BlY2lmaWNhdGlvbiBoYWQgYmVlbiBzdXBwbGllZCBhcyBhbgogICAgYXJndW1lbnQgdG8g4oCYYmfigJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bWVkIGpvYi4AUmV0dXJuIGEgc3VjY2Vzc2Z1bCByZXN1bHQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgQWx3YXlzIHN1Y2NlZWRzLgBSZXR1cm4gYW4gdW5zdWNjZXNzZnVsIHJlc3VsdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBBbHdheXMgZmFpbHMuAFJldHVybiBmcm9tIGEgc2hlbGwgZnVuY3Rpb24uCiAgICAKICAgIENhdXNlcyBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0IHRvIGV4aXQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCiAgICBzcGVjaWZpZWQgYnkgTi4gIElmIE4gaXMgb21pdHRlZCwgdGhlIHJldHVybiBzdGF0dXMgaXMgdGhhdCBvZiB0aGUKICAgIGxhc3QgY29tbWFuZCBleGVjdXRlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uIG9yIHNjcmlwdC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIE4sIG9yIGZhaWx1cmUgaWYgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBmdW5jdGlvbiBvciBzY3JpcHQuAFJldHVybiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwuCiAgICAKICAgIFdpdGhvdXQgRVhQUiwgcmV0dXJucyDigJwkbGluZSAkZmlsZW5hbWXigJ0uICBXaXRoIEVYUFIsIHJldHVybnMKICAgIOKAnCRsaW5lICRzdWJyb3V0aW5lICRmaWxlbmFtZeKAnTsgdGhpcyBleHRyYSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0bwogICAgcHJvdmlkZSBhIHN0YWNrIHRyYWNlLgogICAgCiAgICBUaGUgdmFsdWUgb2YgRVhQUiBpbmRpY2F0ZXMgaG93IG1hbnkgY2FsbCBmcmFtZXMgdG8gZ28gYmFjayBiZWZvcmUgdGhlCiAgICBjdXJyZW50IG9uZTsgdGhlIHRvcCBmcmFtZSBpcyBmcmFtZSAwLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgMCB1bmxlc3MgdGhlIHNoZWxsIGlzIG5vdCBleGVjdXRpbmcgYSBzaGVsbCBmdW5jdGlvbiBvciBFWFBSCiAgICBpcyBpbnZhbGlkLgBSZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbC4KICAgIAogICAgV2l0aG91dCBFWFBSLCByZXR1cm5zIABSdW5uaW5nAFNlZ21lbnRhdGlvbiBmYXVsdABTZWxlY3Qgd29yZHMgZnJvbSBhIGxpc3QgYW5kIGV4ZWN1dGUgY29tbWFuZHMuCiAgICAKICAgIFRoZSBXT1JEUyBhcmUgZXhwYW5kZWQsIGdlbmVyYXRpbmcgYSBsaXN0IG9mIHdvcmRzLiAgVGhlCiAgICBzZXQgb2YgZXhwYW5kZWQgd29yZHMgaXMgcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3IsIGVhY2gKICAgIHByZWNlZGVkIGJ5IGEgbnVtYmVyLiAgSWYg4oCYaW4gV09SRFPigJkgaXMgbm90IHByZXNlbnQsIOKAmGluIOKAnCRA4oCd4oCZCiAgICBpcyBhc3N1bWVkLiAgVGhlIFBTMyBwcm9tcHQgaXMgdGhlbiBkaXNwbGF5ZWQgYW5kIGEgbGluZSByZWFkCiAgICBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIElmIHRoZSBsaW5lIGNvbnNpc3RzIG9mIHRoZSBudW1iZXIKICAgIGNvcnJlc3BvbmRpbmcgdG8gb25lIG9mIHRoZSBkaXNwbGF5ZWQgd29yZHMsIHRoZW4gTkFNRSBpcyBzZXQKICAgIHRvIHRoYXQgd29yZC4gIElmIHRoZSBsaW5lIGlzIGVtcHR5LCBXT1JEUyBhbmQgdGhlIHByb21wdCBhcmUKICAgIHJlZGlzcGxheWVkLiAgSWYgRU9GIGlzIHJlYWQsIHRoZSBjb21tYW5kIGNvbXBsZXRlcy4gIEFueSBvdGhlcgogICAgdmFsdWUgcmVhZCBjYXVzZXMgTkFNRSB0byBiZSBzZXQgdG8gbnVsbC4gIFRoZSBsaW5lIHJlYWQgaXMgc2F2ZWQKICAgIGluIHRoZSB2YXJpYWJsZSBSRVBMWS4gIENPTU1BTkRTIGFyZSBleGVjdXRlZCBhZnRlciBlYWNoIHNlbGVjdGlvbgogICAgdW50aWwgYSBicmVhayBjb21tYW5kIGlzIGV4ZWN1dGVkLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgBTZW5kIGEgc2lnbmFsIHRvIGEgam9iLgogICAgCiAgICBTZW5kIHRoZSBwcm9jZXNzZXMgaWRlbnRpZmllZCBieSBQSUQgb3IgSk9CU1BFQyB0aGUgc2lnbmFsIG5hbWVkIGJ5CiAgICBTSUdTUEVDIG9yIFNJR05VTS4gIElmIG5laXRoZXIgU0lHU1BFQyBub3IgU0lHTlVNIGlzIHByZXNlbnQsIHRoZW4KICAgIFNJR1RFUk0gaXMgYXNzdW1lZC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLXMgc2lnCVNJRyBpcyBhIHNpZ25hbCBuYW1lCiAgICAgIC1uIHNpZwlTSUcgaXMgYSBzaWduYWwgbnVtYmVyCiAgICAgIC1sCWxpc3QgdGhlIHNpZ25hbCBuYW1lczsgaWYgYXJndW1lbnRzIGZvbGxvdyDigJgtbOKAmSB0aGV5IGFyZQogICAgCQlhc3N1bWVkIHRvIGJlIHNpZ25hbCBudW1iZXJzIGZvciB3aGljaCBuYW1lcyBzaG91bGQgYmUgbGlzdGVkCiAgICAgIC1MCXN5bm9ueW0gZm9yIC1sCiAgICAKICAgIEtpbGwgaXMgYSBzaGVsbCBidWlsdGluIGZvciB0d28gcmVhc29uczogaXQgYWxsb3dzIGpvYiBJRHMgdG8gYmUgdXNlZAogICAgaW5zdGVhZCBvZiBwcm9jZXNzIElEcywgYW5kIGFsbG93cyBwcm9jZXNzZXMgdG8gYmUga2lsbGVkIGlmIHRoZSBsaW1pdAogICAgb24gcHJvY2Vzc2VzIHRoYXQgeW91IGNhbiBjcmVhdGUgaXMgcmVhY2hlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuIG9yIGFuIGVycm9yIG9jY3Vycy4AU2V0IFJlYWRsaW5lIGtleSBiaW5kaW5ncyBhbmQgdmFyaWFibGVzLgogICAgCiAgICBCaW5kIGEga2V5IHNlcXVlbmNlIHRvIGEgUmVhZGxpbmUgZnVuY3Rpb24gb3IgYSBtYWNybywgb3Igc2V0IGEKICAgIFJlYWRsaW5lIHZhcmlhYmxlLiAgVGhlIG5vbi1vcHRpb24gYXJndW1lbnQgc3ludGF4IGlzIGVxdWl2YWxlbnQgdG8KICAgIHRoYXQgZm91bmQgaW4gfi8uaW5wdXRyYywgYnV0IG11c3QgYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50OgogICAgZS5nLiwgYmluZCAn4oCcXEMteFxDLXLigJ06IHJlLXJlYWQtaW5pdC1maWxlJy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW0gIGtleW1hcCAgICAgICAgIFVzZSBLRVlNQVAgYXMgdGhlIGtleW1hcCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuICBBY2NlcHRhYmxlIGtleW1hcCBuYW1lcyBhcmUgZW1hY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbWFjcy1zdGFuZGFyZCwgZW1hY3MtbWV0YSwgZW1hY3MtY3RseCwgdmksIHZpLW1vdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2aS1jb21tYW5kLCBhbmQgdmktaW5zZXJ0LgogICAgICAtbCAgICAgICAgICAgICAgICAgTGlzdCBuYW1lcyBvZiBmdW5jdGlvbnMuCiAgICAgIC1QICAgICAgICAgICAgICAgICBMaXN0IGZ1bmN0aW9uIG5hbWVzIGFuZCBiaW5kaW5ncy4KICAgICAgLXAgICAgICAgICAgICAgICAgIExpc3QgZnVuY3Rpb25zIGFuZCBiaW5kaW5ncyBpbiBhIGZvcm0gdGhhdCBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlZCBhcyBpbnB1dC4KICAgICAgLVMgICAgICAgICAgICAgICAgIExpc3Qga2V5IHNlcXVlbmNlcyB0aGF0IGludm9rZSBtYWNyb3MgYW5kIHRoZWlyIHZhbHVlcwogICAgICAtcyAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIHRoYXQgaW52b2tlIG1hY3JvcyBhbmQgdGhlaXIgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcmV1c2VkIGFzIGlucHV0LgogICAgICAtViAgICAgICAgICAgICAgICAgTGlzdCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzCiAgICAgIC12ICAgICAgICAgICAgICAgICBMaXN0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgaW4gYSBmb3JtIHRoYXQgY2FuCiAgICAgICAgICAgICAgICAgICAgICAgICBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAgIC1xICBmdW5jdGlvbi1uYW1lICBRdWVyeSBhYm91dCB3aGljaCBrZXlzIGludm9rZSB0aGUgbmFtZWQgZnVuY3Rpb24uCiAgICAgIC11ICBmdW5jdGlvbi1uYW1lICBVbmJpbmQgYWxsIGtleXMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoZSBuYW1lZCBmdW5jdGlvbi4KICAgICAgLXIgIGtleXNlcSAgICAgICAgIFJlbW92ZSB0aGUgYmluZGluZyBmb3IgS0VZU0VRLgogICAgICAtZiAgZmlsZW5hbWUgICAgICAgUmVhZCBrZXkgYmluZGluZ3MgZnJvbSBGSUxFTkFNRS4KICAgICAgLXggIGtleXNlcTpzaGVsbC1jb21tYW5kCUNhdXNlIFNIRUxMLUNPTU1BTkQgdG8gYmUgZXhlY3V0ZWQgd2hlbgogICAgCQkJCUtFWVNFUSBpcyBlbnRlcmVkLgogICAgICAtWCAgICAgICAgICAgICAgICAgTGlzdCBrZXkgc2VxdWVuY2VzIGJvdW5kIHdpdGggLXggYW5kIGFzc29jaWF0ZWQgY29tbWFuZHMKICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgZm9ybSB0aGF0IGNhbiBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgYmluZCByZXR1cm5zIDAgdW5sZXNzIGFuIHVucmVjb2duaXplZCBvcHRpb24gaXMgZ2l2ZW4gb3IgYW4gZXJyb3Igb2NjdXJzLgBTZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMuCiAgICAKICAgIENoYW5nZSB0aGUgc2V0dGluZyBvZiBlYWNoIHNoZWxsIG9wdGlvbiBPUFROQU1FLiAgV2l0aG91dCBhbnkgb3B0aW9uCiAgICBhcmd1bWVudHMsIGxpc3QgYWxsIHNoZWxsIG9wdGlvbnMgd2l0aCBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGVhY2gKICAgIGlzIHNldC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW8JcmVzdHJpY3QgT1BUTkFNRXMgdG8gdGhvc2UgZGVmaW5lZCBmb3IgdXNlIHdpdGgg4oCYc2V0IC1v4oCZCiAgICAgIC1wCXByaW50IGVhY2ggc2hlbGwgb3B0aW9uIHdpdGggYW4gaW5kaWNhdGlvbiBvZiBpdHMgc3RhdHVzCiAgICAgIC1xCXN1cHByZXNzIG91dHB1dAogICAgICAtcwllbmFibGUgKHNldCkgZWFjaCBPUFROQU1FCiAgICAgIC11CWRpc2FibGUgKHVuc2V0KSBlYWNoIE9QVE5BTUUKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgaWYgT1BUTkFNRSBpcyBlbmFibGVkOyBmYWlscyBpZiBhbiBpbnZhbGlkIG9wdGlvbiBpcwogICAgZ2l2ZW4gb3IgT1BUTkFNRSBpcyBkaXNhYmxlZC4AU2V0IGV4cG9ydCBhdHRyaWJ1dGUgZm9yIHNoZWxsIHZhcmlhYmxlcy4KICAgIAogICAgTWFya3MgZWFjaCBOQU1FIGZvciBhdXRvbWF0aWMgZXhwb3J0IHRvIHRoZSBlbnZpcm9ubWVudCBvZiBzdWJzZXF1ZW50bHkKICAgIGV4ZWN1dGVkIGNvbW1hbmRzLiAgSWYgVkFMVUUgaXMgc3VwcGxpZWQsIGFzc2lnbiBWQUxVRSBiZWZvcmUgZXhwb3J0aW5nLgogICAgCiAgICBPcHRpb25zOgogICAgICAtZglyZWZlciB0byBzaGVsbCBmdW5jdGlvbnMKICAgICAgLW4JcmVtb3ZlIHRoZSBleHBvcnQgcHJvcGVydHkgZnJvbSBlYWNoIE5BTUUKICAgICAgLXAJZGlzcGxheSBhIGxpc3Qgb2YgYWxsIGV4cG9ydGVkIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICAKICAgIEFuIGFyZ3VtZW50IG9mIOKAmC0t4oCZIGRpc2FibGVzIGZ1cnRoZXIgb3B0aW9uIHByb2Nlc3NpbmcuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBOQU1FIGlzIGludmFsaWQuAFNldCBvciB1bnNldCB2YWx1ZXMgb2Ygc2hlbGwgb3B0aW9ucyBhbmQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBDaGFuZ2UgdGhlIHZhbHVlIG9mIHNoZWxsIGF0dHJpYnV0ZXMgYW5kIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgb3IKICAgIGRpc3BsYXkgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2hlbGwgdmFyaWFibGVzLgogICAgCiAgICBPcHRpb25zOgogICAgICAtYSAgTWFyayB2YXJpYWJsZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGNyZWF0ZWQgZm9yIGV4cG9ydC4KICAgICAgLWIgIE5vdGlmeSBvZiBqb2IgdGVybWluYXRpb24gaW1tZWRpYXRlbHkuCiAgICAgIC1lICBFeGl0IGltbWVkaWF0ZWx5IGlmIGEgY29tbWFuZCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLgogICAgICAtZiAgRGlzYWJsZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiAoZ2xvYmJpbmcpLgogICAgICAtaCAgUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIGNvbW1hbmRzIGFzIHRoZXkgYXJlIGxvb2tlZCB1cC4KICAgICAgLWsgIEFsbCBhc3NpZ25tZW50IGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgYQogICAgICAgICAgY29tbWFuZCwgbm90IGp1c3QgdGhvc2UgdGhhdCBwcmVjZWRlIHRoZSBjb21tYW5kIG5hbWUuCiAgICAgIC1tICBKb2IgY29udHJvbCBpcyBlbmFibGVkLgogICAgICAtbiAgUmVhZCBjb21tYW5kcyBidXQgZG8gbm90IGV4ZWN1dGUgdGhlbS4KICAgICAgLW8gb3B0aW9uLW5hbWUKICAgICAgICAgIFNldCB0aGUgdmFyaWFibGUgY29ycmVzcG9uZGluZyB0byBvcHRpb24tbmFtZToKICAgICAgICAgICAgICBhbGxleHBvcnQgICAgc2FtZSBhcyAtYQogICAgICAgICAgICAgIGJyYWNlZXhwYW5kICBzYW1lIGFzIC1CCiAgICAgICAgICAgICAgZW1hY3MgICAgICAgIHVzZSBhbiBlbWFjcy1zdHlsZSBsaW5lIGVkaXRpbmcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgZXJyZXhpdCAgICAgIHNhbWUgYXMgLWUKICAgICAgICAgICAgICBlcnJ0cmFjZSAgICAgc2FtZSBhcyAtRQogICAgICAgICAgICAgIGZ1bmN0cmFjZSAgICBzYW1lIGFzIC1UCiAgICAgICAgICAgICAgaGFzaGFsbCAgICAgIHNhbWUgYXMgLWgKICAgICAgICAgICAgICBoaXN0ZXhwYW5kICAgc2FtZSBhcyAtSAogICAgICAgICAgICAgIGhpc3RvcnkgICAgICBlbmFibGUgY29tbWFuZCBoaXN0b3J5CiAgICAgICAgICAgICAgaWdub3JlZW9mICAgIHRoZSBzaGVsbCB3aWxsIG5vdCBleGl0IHVwb24gcmVhZGluZyBFT0YKICAgICAgICAgICAgICBpbnRlcmFjdGl2ZS1jb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBjb21tZW50cyB0byBhcHBlYXIgaW4gaW50ZXJhY3RpdmUgY29tbWFuZHMKICAgICAgICAgICAgICBrZXl3b3JkICAgICAgc2FtZSBhcyAtawogICAgICAgICAgICAgIG1vbml0b3IgICAgICBzYW1lIGFzIC1tCiAgICAgICAgICAgICAgbm9jbG9iYmVyICAgIHNhbWUgYXMgLUMKICAgICAgICAgICAgICBub2V4ZWMgICAgICAgc2FtZSBhcyAtbgogICAgICAgICAgICAgIG5vZ2xvYiAgICAgICBzYW1lIGFzIC1mCiAgICAgICAgICAgICAgbm9sb2cgICAgICAgIGN1cnJlbnRseSBhY2NlcHRlZCBidXQgaWdub3JlZAogICAgICAgICAgICAgIG5vdGlmeSAgICAgICBzYW1lIGFzIC1iCiAgICAgICAgICAgICAgbm91bnNldCAgICAgIHNhbWUgYXMgLXUKICAgICAgICAgICAgICBvbmVjbWQgICAgICAgc2FtZSBhcyAtdAogICAgICAgICAgICAgIHBoeXNpY2FsICAgICBzYW1lIGFzIC1QCiAgICAgICAgICAgICAgcGlwZWZhaWwgICAgIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBwaXBlbGluZSBpcyB0aGUgc3RhdHVzIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGNvbW1hbmQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciB6ZXJvIGlmIG5vIGNvbW1hbmQgZXhpdGVkIHdpdGggYSBub24temVybyBzdGF0dXMKICAgICAgICAgICAgICBwb3NpeCAgICAgICAgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBiYXNoIHdoZXJlIHRoZSBkZWZhdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBkaWZmZXJzIGZyb20gdGhlIFBvc2l4IHN0YW5kYXJkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgIHByaXZpbGVnZWQgICBzYW1lIGFzIC1wCiAgICAgICAgICAgICAgdmVyYm9zZSAgICAgIHNhbWUgYXMgLXYKICAgICAgICAgICAgICB2aSAgICAgICAgICAgdXNlIGEgdmktc3R5bGUgbGluZSBlZGl0aW5nIGludGVyZmFjZQogICAgICAgICAgICAgIHh0cmFjZSAgICAgICBzYW1lIGFzIC14CiAgICAgIC1wICBUdXJuZWQgb24gd2hlbmV2ZXIgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcyBkbyBub3QgbWF0Y2guCiAgICAgICAgICBEaXNhYmxlcyBwcm9jZXNzaW5nIG9mIHRoZSAkRU5WIGZpbGUgYW5kIGltcG9ydGluZyBvZiBzaGVsbAogICAgICAgICAgZnVuY3Rpb25zLiAgVHVybmluZyB0aGlzIG9wdGlvbiBvZmYgY2F1c2VzIHRoZSBlZmZlY3RpdmUgdWlkIGFuZAogICAgICAgICAgZ2lkIHRvIGJlIHNldCB0byB0aGUgcmVhbCB1aWQgYW5kIGdpZC4KICAgICAgLXQgIEV4aXQgYWZ0ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nIG9uZSBjb21tYW5kLgogICAgICAtdSAgVHJlYXQgdW5zZXQgdmFyaWFibGVzIGFzIGFuIGVycm9yIHdoZW4gc3Vic3RpdHV0aW5nLgogICAgICAtdiAgUHJpbnQgc2hlbGwgaW5wdXQgbGluZXMgYXMgdGhleSBhcmUgcmVhZC4KICAgICAgLXggIFByaW50IGNvbW1hbmRzIGFuZCB0aGVpciBhcmd1bWVudHMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAgICAgIC1CICB0aGUgc2hlbGwgd2lsbCBwZXJmb3JtIGJyYWNlIGV4cGFuc2lvbgogICAgICAtQyAgSWYgc2V0LCBkaXNhbGxvdyBleGlzdGluZyByZWd1bGFyIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICBieSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuCiAgICAgIC1FICBJZiBzZXQsIHRoZSBFUlIgdHJhcCBpcyBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtSCAgRW5hYmxlICEgc3R5bGUgaGlzdG9yeSBzdWJzdGl0dXRpb24uICBUaGlzIGZsYWcgaXMgb24KICAgICAgICAgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgc2hlbGwgaXMgaW50ZXJhY3RpdmUuCiAgICAgIC1QICBJZiBzZXQsIGRvIG5vdCByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4gZXhlY3V0aW5nIGNvbW1hbmRzCiAgICAgICAgICBzdWNoIGFzIGNkIHdoaWNoIGNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIC1UICBJZiBzZXQsIHRoZSBERUJVRyBhbmQgUkVUVVJOIHRyYXBzIGFyZSBpbmhlcml0ZWQgYnkgc2hlbGwgZnVuY3Rpb25zLgogICAgICAtLSAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBJZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGFyZ3VtZW50cywgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICAgICAgYXJlIHVuc2V0LgogICAgICAtICAgQXNzaWduIGFueSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgICAgICAgICBUaGUgLXggYW5kIC12IG9wdGlvbnMgYXJlIHR1cm5lZCBvZmYuCiAgICAKICAgIFVzaW5nICsgcmF0aGVyIHRoYW4gLSBjYXVzZXMgdGhlc2UgZmxhZ3MgdG8gYmUgdHVybmVkIG9mZi4gIFRoZQogICAgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCB1cG9uIGludm9jYXRpb24gb2YgdGhlIHNoZWxsLiAgVGhlIGN1cnJlbnQKICAgIHNldCBvZiBmbGFncyBtYXkgYmUgZm91bmQgaW4gJC0uICBUaGUgcmVtYWluaW5nIG4gQVJHcyBhcmUgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycyBhbmQgYXJlIGFzc2lnbmVkLCBpbiBvcmRlciwgdG8gJDEsICQyLCAuLiAkbi4gIElmIG5vCiAgICBBUkdzIGFyZSBnaXZlbiwgYWxsIHNoZWxsIHZhcmlhYmxlcyBhcmUgcHJpbnRlZC4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIGdpdmVuLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBBIHN5bm9ueW0gZm9yIOKAmGRlY2xhcmXigJkuICBTZWUg4oCYaGVscCBkZWNsYXJl4oCZLgBTZXQgdmFyaWFibGUgdmFsdWVzIGFuZCBhdHRyaWJ1dGVzLgogICAgCiAgICBEZWNsYXJlIHZhcmlhYmxlcyBhbmQgZ2l2ZSB0aGVtIGF0dHJpYnV0ZXMuICBJZiBubyBOQU1FcyBhcmUgZ2l2ZW4sCiAgICBkaXNwbGF5IHRoZSBhdHRyaWJ1dGVzIGFuZCB2YWx1ZXMgb2YgYWxsIHZhcmlhYmxlcy4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJcmVzdHJpY3QgYWN0aW9uIG9yIGRpc3BsYXkgdG8gZnVuY3Rpb24gbmFtZXMgYW5kIGRlZmluaXRpb25zCiAgICAgIC1GCXJlc3RyaWN0IGRpc3BsYXkgdG8gZnVuY3Rpb24gbmFtZXMgb25seSAocGx1cyBsaW5lIG51bWJlciBhbmQKICAgIAkJc291cmNlIGZpbGUgd2hlbiBkZWJ1Z2dpbmcpCiAgICAgIC1nCWNyZWF0ZSBnbG9iYWwgdmFyaWFibGVzIHdoZW4gdXNlZCBpbiBhIHNoZWxsIGZ1bmN0aW9uOyBvdGhlcndpc2UKICAgIAkJaWdub3JlZAogICAgICAtcAlkaXNwbGF5IHRoZSBhdHRyaWJ1dGVzIGFuZCB2YWx1ZSBvZiBlYWNoIE5BTUUKICAgIAogICAgT3B0aW9ucyB3aGljaCBzZXQgYXR0cmlidXRlczoKICAgICAgLWEJdG8gbWFrZSBOQU1FcyBpbmRleGVkIGFycmF5cyAoaWYgc3VwcG9ydGVkKQogICAgICAtQQl0byBtYWtlIE5BTUVzIGFzc29jaWF0aXZlIGFycmF5cyAoaWYgc3VwcG9ydGVkKQogICAgICAtaQl0byBtYWtlIE5BTUVzIGhhdmUgdGhlIOKAmGludGVnZXLigJkgYXR0cmlidXRlCiAgICAgIC1sCXRvIGNvbnZlcnQgTkFNRXMgdG8gbG93ZXIgY2FzZSBvbiBhc3NpZ25tZW50CiAgICAgIC1uCW1ha2UgTkFNRSBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmFtZWQgYnkgaXRzIHZhbHVlCiAgICAgIC1yCXRvIG1ha2UgTkFNRXMgcmVhZG9ubHkKICAgICAgLXQJdG8gbWFrZSBOQU1FcyBoYXZlIHRoZSDigJh0cmFjZeKAmSBhdHRyaWJ1dGUKICAgICAgLXUJdG8gY29udmVydCBOQU1FcyB0byB1cHBlciBjYXNlIG9uIGFzc2lnbm1lbnQKICAgICAgLXgJdG8gbWFrZSBOQU1FcyBleHBvcnQKICAgIAogICAgVXNpbmcg4oCYK+KAmSBpbnN0ZWFkIG9mIOKAmC3igJkgdHVybnMgb2ZmIHRoZSBnaXZlbiBhdHRyaWJ1dGUuCiAgICAKICAgIFZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlZ2VyIGF0dHJpYnV0ZSBoYXZlIGFyaXRobWV0aWMgZXZhbHVhdGlvbiAoc2VlCiAgICB0aGUg4oCYbGV04oCZIGNvbW1hbmQpIHBlcmZvcm1lZCB3aGVuIHRoZSB2YXJpYWJsZSBpcyBhc3NpZ25lZCBhIHZhbHVlLgogICAgCiAgICBXaGVuIHVzZWQgaW4gYSBmdW5jdGlvbiwg4oCYZGVjbGFyZeKAmSBtYWtlcyBOQU1FcyBsb2NhbCwgYXMgd2l0aCB0aGUg4oCYbG9jYWzigJkKICAgIGNvbW1hbmQuICBUaGUg4oCYLWfigJkgb3B0aW9uIHN1cHByZXNzZXMgdGhpcyBiZWhhdmlvci4KICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGFuIGludmFsaWQgb3B0aW9uIGlzIHN1cHBsaWVkIG9yIGEgdmFyaWFibGUKICAgIGFzc2lnbm1lbnQgZXJyb3Igb2NjdXJzLgBTaGVsbCBjb21tYW5kcyBtYXRjaGluZyBrZXl3b3JkIGAAU2hlbGwgY29tbWFuZHMgbWF0Y2hpbmcga2V5d29yZHMgYABTaGVsbCBvcHRpb25zOgoAU2hpZnQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLgogICAgCiAgICBSZW5hbWUgdGhlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyAkTisxLCROKzIgLi4uIHRvICQxLCQyIC4uLiAgSWYgTiBpcwogICAgbm90IGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIDEuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBOIGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiAkIy4AU2lnbmFsICVkAFNwZWNpZnkgaG93IGFyZ3VtZW50cyBhcmUgdG8gYmUgY29tcGxldGVkIGJ5IFJlYWRsaW5lLgogICAgCiAgICBGb3IgZWFjaCBOQU1FLCBzcGVjaWZ5IGhvdyBhcmd1bWVudHMgYXJlIHRvIGJlIGNvbXBsZXRlZC4gIElmIG5vIG9wdGlvbnMKICAgIGFyZSBzdXBwbGllZCwgZXhpc3RpbmcgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9ucyBhcmUgcHJpbnRlZCBpbiBhIHdheSB0aGF0CiAgICBhbGxvd3MgdGhlbSB0byBiZSByZXVzZWQgYXMgaW5wdXQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1wCXByaW50IGV4aXN0aW5nIGNvbXBsZXRpb24gc3BlY2lmaWNhdGlvbnMgaW4gYSByZXVzYWJsZSBmb3JtYXQKICAgICAgLXIJcmVtb3ZlIGEgY29tcGxldGlvbiBzcGVjaWZpY2F0aW9uIGZvciBlYWNoIE5BTUUsIG9yLCBpZiBubwogICAgCQlOQU1FcyBhcmUgc3VwcGxpZWQsIGFsbCBjb21wbGV0aW9uIHNwZWNpZmljYXRpb25zCiAgICAgIC1ECWFwcGx5IHRoZSBjb21wbGV0aW9ucyBhbmQgYWN0aW9ucyBhcyB0aGUgZGVmYXVsdCBmb3IgY29tbWFuZHMKICAgIAkJd2l0aG91dCBhbnkgc3BlY2lmaWMgY29tcGxldGlvbiBkZWZpbmVkCiAgICAgIC1FCWFwcGx5IHRoZSBjb21wbGV0aW9ucyBhbmQgYWN0aW9ucyB0byDigJxlbXB0eeKAnSBjb21tYW5kcyAtLQogICAgCQljb21wbGV0aW9uIGF0dGVtcHRlZCBvbiBhIGJsYW5rIGxpbmUKICAgIAogICAgV2hlbiBjb21wbGV0aW9uIGlzIGF0dGVtcHRlZCwgdGhlIGFjdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZQogICAgdXBwZXJjYXNlLWxldHRlciBvcHRpb25zIGFyZSBsaXN0ZWQgYWJvdmUuICBUaGUgLUQgb3B0aW9uIHRha2VzCiAgICBwcmVjZWRlbmNlIG92ZXIgLUUuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBzdXBwbGllZCBvciBhbiBlcnJvciBvY2N1cnMuAFN0b3BwZWQAU3RvcHBlZCAoc2lnbmFsKQBTdG9wcGVkICh0dHkgaW5wdXQpAFN0b3BwZWQgKHR0eSBvdXRwdXQpAFN0b3BwZWQoJXMpAFN1c3BlbmQgc2hlbGwgZXhlY3V0aW9uLgogICAgCiAgICBTdXNwZW5kIHRoZSBleGVjdXRpb24gb2YgdGhpcyBzaGVsbCB1bnRpbCBpdCByZWNlaXZlcyBhIFNJR0NPTlQgc2lnbmFsLgogICAgVW5sZXNzIGZvcmNlZCwgbG9naW4gc2hlbGxzIGNhbm5vdCBiZSBzdXNwZW5kZWQuCiAgICAKICAgIE9wdGlvbnM6CiAgICAgIC1mCWZvcmNlIHRoZSBzdXNwZW5kLCBldmVuIGlmIHRoZSBzaGVsbCBpcyBhIGxvZ2luIHNoZWxsCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBqb2IgY29udHJvbCBpcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnMuAFRJTUVGT1JNQVQ6IOKAmCVj4oCZOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAVGVybWluYXRlZABUaGUgbWFpbCBpbiAlcyBoYXMgYmVlbiByZWFkCgBUaGVyZSBhcmUgcnVubmluZyBqb2JzLgoAVGhlcmUgYXJlIHN0b3BwZWQgam9icy4KAFRoZXJlIGlzIE5PIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuAFRoZXNlIHNoZWxsIGNvbW1hbmRzIGFyZSBkZWZpbmVkIGludGVybmFsbHkuICBUeXBlIOKAmGhlbHDigJkgdG8gc2VlIHRoaXMgbGlzdC4KVHlwZSDigJhoZWxwIG5hbWXigJkgdG8gZmluZCBvdXQgbW9yZSBhYm91dCB0aGUgZnVuY3Rpb24g4oCYbmFtZeKAmS4KVXNlIOKAmGluZm8gYmFzaOKAmSB0byBmaW5kIG91dCBtb3JlIGFib3V0IHRoZSBzaGVsbCBpbiBnZW5lcmFsLgpVc2Ug4oCYbWFuIC1r4oCZIG9yIOKAmGluZm/igJkgdG8gZmluZCBvdXQgbW9yZSBhYm91dCBjb21tYW5kcyBub3QgaW4gdGhpcyBsaXN0LgoKQSBzdGFyICgqKSBuZXh0IHRvIGEgbmFtZSBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGlzIGRpc2FibGVkLgoKAFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGFyZSBmcmVlIHRvIGNoYW5nZSBhbmQgcmVkaXN0cmlidXRlIGl0LgBUcmFwIHNpZ25hbHMgYW5kIG90aGVyIGV2ZW50cy4KICAgIAogICAgRGVmaW5lcyBhbmQgYWN0aXZhdGVzIGhhbmRsZXJzIHRvIGJlIHJ1biB3aGVuIHRoZSBzaGVsbCByZWNlaXZlcyBzaWduYWxzCiAgICBvciBvdGhlciBjb25kaXRpb25zLgogICAgCiAgICBBUkcgaXMgYSBjb21tYW5kIHRvIGJlIHJlYWQgYW5kIGV4ZWN1dGVkIHdoZW4gdGhlIHNoZWxsIHJlY2VpdmVzIHRoZQogICAgc2lnbmFsKHMpIFNJR05BTF9TUEVDLiAgSWYgQVJHIGlzIGFic2VudCAoYW5kIGEgc2luZ2xlIFNJR05BTF9TUEVDCiAgICBpcyBzdXBwbGllZCkgb3Ig4oCYLeKAmSwgZWFjaCBzcGVjaWZpZWQgc2lnbmFsIGlzIHJlc2V0IHRvIGl0cyBvcmlnaW5hbAogICAgdmFsdWUuICBJZiBBUkcgaXMgdGhlIG51bGwgc3RyaW5nIGVhY2ggU0lHTkFMX1NQRUMgaXMgaWdub3JlZCBieSB0aGUKICAgIHNoZWxsIGFuZCBieSB0aGUgY29tbWFuZHMgaXQgaW52b2tlcy4KICAgIAogICAgSWYgYSBTSUdOQUxfU1BFQyBpcyBFWElUICgwKSBBUkcgaXMgZXhlY3V0ZWQgb24gZXhpdCBmcm9tIHRoZSBzaGVsbC4gIElmCiAgICBhIFNJR05BTF9TUEVDIGlzIERFQlVHLCBBUkcgaXMgZXhlY3V0ZWQgYmVmb3JlIGV2ZXJ5IHNpbXBsZSBjb21tYW5kLiAgSWYKICAgIGEgU0lHTkFMX1NQRUMgaXMgUkVUVVJOLCBBUkcgaXMgZXhlY3V0ZWQgZWFjaCB0aW1lIGEgc2hlbGwgZnVuY3Rpb24gb3IgYQogICAgc2NyaXB0IHJ1biBieSB0aGUgLiBvciBzb3VyY2UgYnVpbHRpbnMgZmluaXNoZXMgZXhlY3V0aW5nLiAgQSBTSUdOQUxfU1BFQwogICAgb2YgRVJSIG1lYW5zIHRvIGV4ZWN1dGUgQVJHIGVhY2ggdGltZSBhIGNvbW1hbmQncyBmYWlsdXJlIHdvdWxkIGNhdXNlIHRoZQogICAgc2hlbGwgdG8gZXhpdCB3aGVuIHRoZSAtZSBvcHRpb24gaXMgZW5hYmxlZC4KICAgIAogICAgSWYgbm8gYXJndW1lbnRzIGFyZSBzdXBwbGllZCwgdHJhcCBwcmludHMgdGhlIGxpc3Qgb2YgY29tbWFuZHMgYXNzb2NpYXRlZAogICAgd2l0aCBlYWNoIHNpZ25hbC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWwJcHJpbnQgYSBsaXN0IG9mIHNpZ25hbCBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBudW1iZXJzCiAgICAgIC1wCWRpc3BsYXkgdGhlIHRyYXAgY29tbWFuZHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggU0lHTkFMX1NQRUMKICAgIAogICAgRWFjaCBTSUdOQUxfU1BFQyBpcyBlaXRoZXIgYSBzaWduYWwgbmFtZSBpbiA8c2lnbmFsLmg+IG9yIGEgc2lnbmFsIG51bWJlci4KICAgIFNpZ25hbCBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSBhbmQgdGhlIFNJRyBwcmVmaXggaXMgb3B0aW9uYWwuICBBCiAgICBzaWduYWwgbWF5IGJlIHNlbnQgdG8gdGhlIHNoZWxsIHdpdGgg4oCca2lsbCAtc2lnbmFsICQk4oCdLgogICAgCiAgICBFeGl0IFN0YXR1czoKICAgIFJldHVybnMgc3VjY2VzcyB1bmxlc3MgYSBTSUdTUEVDIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZCBvcHRpb24gaXMgZ2l2ZW4uAFR5cGUg4oCYJXMgLWMg4oCcaGVscCBzZXTigJ3igJkgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2hlbGwgb3B0aW9ucy4KAFR5cGUg4oCYJXMgLWMgaGVscOKAmSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzaGVsbCBidWlsdGluIGNvbW1hbmRzLgoAVW5rbm93biBTaWduYWwgIwBVbmtub3duIFNpZ25hbCAjJWQAVW5rbm93biBlcnJvcgBVbmtub3duIHN0YXR1cwBVbnNldCB2YWx1ZXMgYW5kIGF0dHJpYnV0ZXMgb2Ygc2hlbGwgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuCiAgICAKICAgIEZvciBlYWNoIE5BTUUsIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZSBvciBmdW5jdGlvbi4KICAgIAogICAgT3B0aW9uczoKICAgICAgLWYJdHJlYXQgZWFjaCBOQU1FIGFzIGEgc2hlbGwgZnVuY3Rpb24KICAgICAgLXYJdHJlYXQgZWFjaCBOQU1FIGFzIGEgc2hlbGwgdmFyaWFibGUKICAgICAgLW4JdHJlYXQgZWFjaCBOQU1FIGFzIGEgbmFtZSByZWZlcmVuY2UgYW5kIHVuc2V0IHRoZSB2YXJpYWJsZSBpdHNlbGYKICAgIAkJcmF0aGVyIHRoYW4gdGhlIHZhcmlhYmxlIGl0IHJlZmVyZW5jZXMKICAgIAogICAgV2l0aG91dCBvcHRpb25zLCB1bnNldCBmaXJzdCB0cmllcyB0byB1bnNldCBhIHZhcmlhYmxlLCBhbmQgaWYgdGhhdCBmYWlscywKICAgIHRyaWVzIHRvIHVuc2V0IGEgZnVuY3Rpb24uCiAgICAKICAgIFNvbWUgdmFyaWFibGVzIGNhbm5vdCBiZSB1bnNldDsgYWxzbyBzZWUg4oCYcmVhZG9ubHnigJkuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyBzdWNjZXNzIHVubGVzcyBhbiBpbnZhbGlkIG9wdGlvbiBpcyBnaXZlbiBvciBhIE5BTUUgaXMgcmVhZC1vbmx5LgBVcmdlbnQgSU8gY29uZGl0aW9uAFVzYWdlOgklcyBbR05VIGxvbmcgb3B0aW9uXSBbb3B0aW9uXSAuLi4KCSVzIFtHTlUgbG9uZyBvcHRpb25dIFtvcHRpb25dIHNjcmlwdC1maWxlIC4uLgoAVXNlIOKAnCVz4oCdIHRvIGxlYXZlIHRoZSBzaGVsbC4KAFVzZSB0aGUg4oCYYmFzaGJ1Z+KAmSBjb21tYW5kIHRvIHJlcG9ydCBidWdzLgoAVXNlciBzaWduYWwgMQBVc2VyIHNpZ25hbCAyAFdhaXQgZm9yIGpvYiBjb21wbGV0aW9uIGFuZCByZXR1cm4gZXhpdCBzdGF0dXMuCiAgICAKICAgIFdhaXRzIGZvciBlYWNoIHByb2Nlc3MgaWRlbnRpZmllZCBieSBhbiBJRCwgd2hpY2ggbWF5IGJlIGEgcHJvY2VzcyBJRCBvciBhCiAgICBqb2Igc3BlY2lmaWNhdGlvbiwgYW5kIHJlcG9ydHMgaXRzIHRlcm1pbmF0aW9uIHN0YXR1cy4gIElmIElEIGlzIG5vdAogICAgZ2l2ZW4sIHdhaXRzIGZvciBhbGwgY3VycmVudGx5IGFjdGl2ZSBjaGlsZCBwcm9jZXNzZXMsIGFuZCB0aGUgcmV0dXJuCiAgICBzdGF0dXMgaXMgemVyby4gIElmIElEIGlzIGEgYSBqb2Igc3BlY2lmaWNhdGlvbiwgd2FpdHMgZm9yIGFsbCBwcm9jZXNzZXMKICAgIGluIHRoYXQgam9iJ3MgcGlwZWxpbmUuCiAgICAKICAgIElmIHRoZSAtbiBvcHRpb24gaXMgc3VwcGxpZWQsIHdhaXRzIGZvciB0aGUgbmV4dCBqb2IgdG8gdGVybWluYXRlIGFuZAogICAgcmV0dXJucyBpdHMgZXhpdCBzdGF0dXMuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IElEOyBmYWlscyBpZiBJRCBpcyBpbnZhbGlkIG9yIGFuIGludmFsaWQKICAgIG9wdGlvbiBpcyBnaXZlbi4AV2FpdCBmb3IgcHJvY2VzcyBjb21wbGV0aW9uIGFuZCByZXR1cm4gZXhpdCBzdGF0dXMuCiAgICAKICAgIFdhaXRzIGZvciBlYWNoIHByb2Nlc3Mgc3BlY2lmaWVkIGJ5IGEgUElEIGFuZCByZXBvcnRzIGl0cyB0ZXJtaW5hdGlvbiBzdGF0dXMuCiAgICBJZiBQSUQgaXMgbm90IGdpdmVuLCB3YWl0cyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2hpbGQgcHJvY2Vzc2VzLAogICAgYW5kIHRoZSByZXR1cm4gc3RhdHVzIGlzIHplcm8uICBQSUQgbXVzdCBiZSBhIHByb2Nlc3MgSUQuCiAgICAKICAgIEV4aXQgU3RhdHVzOgogICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IFBJRDsgZmFpbHMgaWYgUElEIGlzIGludmFsaWQgb3IgYW4gaW52YWxpZAogICAgb3B0aW9uIGlzIGdpdmVuLgBXaW5kb3cgY2hhbmdlZABXcml0ZSBhcmd1bWVudHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgRGlzcGxheSB0aGUgQVJHcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JZG8gbm90IGFwcGVuZCBhIG5ld2xpbmUKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBXcml0ZSBhcmd1bWVudHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgRGlzcGxheSB0aGUgQVJHcywgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlIGNoYXJhY3RlciBhbmQgZm9sbG93ZWQgYnkgYQogICAgbmV3bGluZSwgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KICAgIAogICAgT3B0aW9uczoKICAgICAgLW4JZG8gbm90IGFwcGVuZCBhIG5ld2xpbmUKICAgICAgLWUJZW5hYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgYmFja3NsYXNoIGVzY2FwZXMKICAgICAgLUUJZXhwbGljaXRseSBzdXBwcmVzcyBpbnRlcnByZXRhdGlvbiBvZiBiYWNrc2xhc2ggZXNjYXBlcwogICAgCiAgICDigJhlY2hv4oCZIGludGVycHJldHMgdGhlIGZvbGxvd2luZyBiYWNrc2xhc2gtZXNjYXBlZCBjaGFyYWN0ZXJzOgogICAgICBcYQlhbGVydCAoYmVsbCkKICAgICAgXGIJYmFja3NwYWNlCiAgICAgIFxjCXN1cHByZXNzIGZ1cnRoZXIgb3V0cHV0CiAgICAgIFxlCWVzY2FwZSBjaGFyYWN0ZXIKICAgICAgXEUJZXNjYXBlIGNoYXJhY3RlcgogICAgICBcZglmb3JtIGZlZWQKICAgICAgXG4JbmV3IGxpbmUKICAgICAgXHIJY2FycmlhZ2UgcmV0dXJuCiAgICAgIFx0CWhvcml6b250YWwgdGFiCiAgICAgIFx2CXZlcnRpY2FsIHRhYgogICAgICBcXAliYWNrc2xhc2gKICAgICAgXDBubm4JdGhlIGNoYXJhY3RlciB3aG9zZSBBU0NJSSBjb2RlIGlzIE5OTiAob2N0YWwpLiAgTk5OIGNhbiBiZQogICAgCQkwIHRvIDMgb2N0YWwgZGlnaXRzCiAgICAgIFx4SEgJdGhlIGVpZ2h0LWJpdCBjaGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgSEggKGhleGFkZWNpbWFsKS4gIEhICiAgICAJCWNhbiBiZSBvbmUgb3IgdHdvIGhleCBkaWdpdHMKICAgIAogICAgRXhpdCBTdGF0dXM6CiAgICBSZXR1cm5zIHN1Y2Nlc3MgdW5sZXNzIGEgd3JpdGUgZXJyb3Igb2NjdXJzLgBZb3UgaGF2ZSBtYWlsIGluICRfAFlvdSBoYXZlIG5ldyBtYWlsIGluICRfAFsgYXJnLi4uIF0AW1sgZXhwcmVzc2lvbiBdXQDigJglY+KAmTogYmFkIGNvbW1hbmQA4oCYJWPigJk6IGludmFsaWQgZm9ybWF0IGNoYXJhY3RlcgDigJglY+KAmTogaW52YWxpZCBzeW1ib2xpYyBtb2RlIGNoYXJhY3RlcgDigJglY+KAmTogaW52YWxpZCBzeW1ib2xpYyBtb2RlIG9wZXJhdG9yAOKAmCVj4oCZOiBpbnZhbGlkIHRpbWUgZm9ybWF0IHNwZWNpZmljYXRpb24A4oCYJXPigJk6IGNhbm5vdCB1bmJpbmQA4oCYJXPigJk6IGludmFsaWQgYWxpYXMgbmFtZQDigJglc+KAmTogaW52YWxpZCBrZXltYXAgbmFtZQDigJglc+KAmTogaW52YWxpZCB2YXJpYWJsZSBuYW1lIGZvciBuYW1lIHJlZmVyZW5jZQDigJglc+KAmTogaXMgYSBzcGVjaWFsIGJ1aWx0aW4A4oCYJXPigJk6IG1pc3NpbmcgZm9ybWF0IGNoYXJhY3RlcgDigJglc+KAmTogbm90IGEgcGlkIG9yIHZhbGlkIGpvYiBzcGVjAOKAmCVz4oCZOiBub3QgYSB2YWxpZCBpZGVudGlmaWVyAOKAmCVz4oCZOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUA4oCYKeKAmSBleHBlY3RlZADigJgp4oCZIGV4cGVjdGVkLCBmb3VuZCAlcwDigJg64oCZIGV4cGVjdGVkIGZvciBjb25kaXRpb25hbCBleHByZXNzaW9uAGFkZF9wcm9jZXNzOiBwaWQgJTVsZCAoJXMpIG1hcmtlZCBhcyBzdGlsbCBhbGl2ZQBhZGRfcHJvY2VzczogcHJvY2VzcyAlNWxkICglcykgaW4gdGhlX3BpcGVsaW5lAGFsaWFzIFstcF0gW25hbWVbPXZhbHVlXSAuLi4gXQBhbGxfbG9jYWxfdmFyaWFibGVzOiBubyBmdW5jdGlvbiBjb250ZXh0IGF0IGN1cnJlbnQgc2NvcGUAYXJndW1lbnQAYXJndW1lbnQgZXhwZWN0ZWQAYXJyYXkgdmFyaWFibGUgc3VwcG9ydCByZXF1aXJlZABhdHRlbXB0ZWQgYXNzaWdubWVudCB0byBub24tdmFyaWFibGUAYmFkIGFycmF5IHN1YnNjcmlwdABiYWQgY29tbWFuZCB0eXBlAGJhZCBjb25uZWN0b3IAYmFkIGp1bXAAYmFkIHN1YnN0aXR1dGlvbjogbm8gY2xvc2luZyDigJxg4oCdIGluICVzAGJhZCBzdWJzdGl0dXRpb246IG5vIGNsb3Npbmcg4oCYJXPigJkgaW4gJXMAYmFzaCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaD4KAGJhc2hfZXhlY3V0ZV91bml4X2NvbW1hbmQ6IGNhbm5vdCBmaW5kIGtleW1hcCBmb3IgY29tbWFuZABiZyBbam9iX3NwZWMgLi4uXQBiaW5kIFstbHBzdlBTVlhdIFstbSBrZXltYXBdIFstZiBmaWxlbmFtZV0gWy1xIG5hbWVdIFstdSBuYW1lXSBbLXIga2V5c2VxXSBbLXgga2V5c2VxOnNoZWxsLWNvbW1hbmRdIFtrZXlzZXE6cmVhZGxpbmUtZnVuY3Rpb24gb3IgcmVhZGxpbmUtY29tbWFuZF0AYnJhY2UgZXhwYW5zaW9uOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcwBicmFjZSBleHBhbnNpb246IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICVkIGVsZW1lbnRzAGJyYWNlIGV4cGFuc2lvbjogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig4oCYJXPigJkAYnJlYWsgW25dAGJ1ZzogYmFkIGV4cGFzc2lnbiB0b2tlbgBidWlsdGluIFtzaGVsbC1idWlsdGluIFthcmcgLi4uXV0AY2FsbGVyIFtleHByXQBjYW4gb25seSDigJhyZXR1cm7igJkgZnJvbSBhIGZ1bmN0aW9uIG9yIHNvdXJjZWQgc2NyaXB0AGNhbiBvbmx5IGJlIHVzZWQgaW4gYSBmdW5jdGlvbgBjYW5ub3QgYWxsb2NhdGUgbmV3IGZpbGUgZGVzY3JpcHRvciBmb3IgYmFzaCBpbnB1dCBmcm9tIGZkICVkAGNhbm5vdCBjcmVhdGUgdGVtcCBmaWxlIGZvciBoZXJlLWRvY3VtZW50OiAlcwBjYW5ub3QgZHVwbGljYXRlIGZkICVkIHRvIGZkICVkAGNhbm5vdCBkdXBsaWNhdGUgbmFtZWQgcGlwZSAlcyBhcyBmZCAlZABjYW5ub3QgZmluZCAlcyBpbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgbWFrZSBjaGlsZCBmb3IgY29tbWFuZCBzdWJzdGl0dXRpb24AY2Fubm90IG1ha2UgY2hpbGQgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIGNvbW1hbmQgc3Vic3RpdHV0aW9uAGNhbm5vdCBtYWtlIHBpcGUgZm9yIHByb2Nlc3Mgc3Vic3RpdHV0aW9uAGNhbm5vdCBvcGVuIG5hbWVkIHBpcGUgJXMgZm9yIHJlYWRpbmcAY2Fubm90IG9wZW4gbmFtZWQgcGlwZSAlcyBmb3Igd3JpdGluZwBjYW5ub3Qgb3BlbiBzaGFyZWQgb2JqZWN0ICVzOiAlcwBjYW5ub3QgcmVkaXJlY3Qgc3RhbmRhcmQgaW5wdXQgZnJvbSAvZGV2L251bGw6ICVzAGNhbm5vdCByZXNldCBub2RlbGF5IG1vZGUgZm9yIGZkICVkAGNhbm5vdCBzZXQgYW5kIHVuc2V0IHNoZWxsIG9wdGlvbnMgc2ltdWx0YW5lb3VzbHkAY2Fubm90IHNldCBnaWQgdG8gJWQ6IGVmZmVjdGl2ZSBnaWQgJWQAY2Fubm90IHNldCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwICglZCkAY2Fubm90IHNldCB1aWQgdG8gJWQ6IGVmZmVjdGl2ZSB1aWQgJWQAY2Fubm90IHNpbXVsdGFuZW91c2x5IHVuc2V0IGEgZnVuY3Rpb24gYW5kIGEgdmFyaWFibGUAY2Fubm90IHN0YXJ0IGRlYnVnZ2VyOyBkZWJ1Z2dpbmcgbW9kZSBkaXNhYmxlZABjYW5ub3Qgc3VzcGVuZABjYW5ub3Qgc3VzcGVuZCBhIGxvZ2luIHNoZWxsAGNhbm5vdCB1c2Ug4oCYLWbigJkgdG8gbWFrZSBmdW5jdGlvbnMAY2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIG9mIC1hbnJ3AGNhc2UgV09SRCBpbiBbUEFUVEVSTiBbfCBQQVRURVJOXS4uLikgQ09NTUFORFMgOztdLi4uIGVzYWMAY2QgWy1MfFstUCBbLWVdXSBbLUBdXSBbZGlyXQBjaGlsZCBzZXRwZ2lkICglbGQgdG8gJWxkKQBjb21tYW5kIFstcFZ2XSBjb21tYW5kIFthcmcgLi4uXQBjb21tYW5kIHN1YnN0aXR1dGlvbjogaWdub3JlZCBudWxsIGJ5dGUgaW4gaW5wdXQAY29tbWFuZF9zdWJzdGl0dXRlOiBjYW5ub3QgZHVwbGljYXRlIHBpcGUgYXMgZmQgMQBjb21wZ2VuIFstYWJjZGVmZ2prc3V2XSBbLW8gb3B0aW9uXSBbLUEgYWN0aW9uXSBbLUcgZ2xvYnBhdF0gWy1XIHdvcmRsaXN0XSAgWy1GIGZ1bmN0aW9uXSBbLUMgY29tbWFuZF0gWy1YIGZpbHRlcnBhdF0gWy1QIHByZWZpeF0gWy1TIHN1ZmZpeF0gW3dvcmRdAGNvbXBsZXRlIFstYWJjZGVmZ2prc3V2XSBbLXByXSBbLURFXSBbLW8gb3B0aW9uXSBbLUEgYWN0aW9uXSBbLUcgZ2xvYnBhdF0gWy1XIHdvcmRsaXN0XSAgWy1GIGZ1bmN0aW9uXSBbLUMgY29tbWFuZF0gWy1YIGZpbHRlcnBhdF0gWy1QIHByZWZpeF0gWy1TIHN1ZmZpeF0gW25hbWUgLi4uXQBjb21wbGV0aW9uOiBmdW5jdGlvbiDigJglc+KAmSBub3QgZm91bmQAY29tcG9wdCBbLW98K28gb3B0aW9uXSBbLURFXSBbbmFtZSAuLi5dAGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvciBleHBlY3RlZABjb250aW51ZSBbbl0AY29wcm9jIFtOQU1FXSBjb21tYW5kIFtyZWRpcmVjdGlvbnNdAGNvdWxkIG5vdCBmaW5kIC90bXAsIHBsZWFzZSBjcmVhdGUhAGNwcmludGY6IOKAmCVj4oCZOiBpbnZhbGlkIGZvcm1hdCBjaGFyYWN0ZXIAY3VycmVudABkZWNsYXJlIFstYUFmRmdpbG5ydHV4XSBbLXBdIFtuYW1lWz12YWx1ZV0gLi4uXQBkZWxldGluZyBzdG9wcGVkIGpvYiAlZCB3aXRoIHByb2Nlc3MgZ3JvdXAgJWxkAGRlc2NyaWJlX3BpZDogJWxkOiBubyBzdWNoIHBpZABkaXJlY3Rvcnkgc3RhY2sgZW1wdHkAZGlyZWN0b3J5IHN0YWNrIGluZGV4AGRpcnMgWy1jbHB2XSBbK05dIFstTl0AZGlzb3duIFstaF0gWy1hcl0gW2pvYnNwZWMgLi4uIHwgcGlkIC4uLl0AZGl2aXNpb24gYnkgMABkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQBlY2hvIFstbl0gW2FyZyAuLi5dAGVjaG8gWy1uZUVdIFthcmcgLi4uXQBlbXB0eSBhcnJheSB2YXJpYWJsZSBuYW1lAGVuYWJsZSBbLWFdIFstZG5wc10gWy1mIGZpbGVuYW1lXSBbbmFtZSAuLi5dAGVycm9yIGdldHRpbmcgdGVybWluYWwgYXR0cmlidXRlczogJXMAZXJyb3IgaW1wb3J0aW5nIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIOKAmCVz4oCZAGVycm9yIHNldHRpbmcgdGVybWluYWwgYXR0cmlidXRlczogJXMAZXZhbCBbYXJnIC4uLl0AZXZhbDogbWF4aW11bSBldmFsIG5lc3RpbmcgbGV2ZWwgZXhjZWVkZWQgKCVkKQBleGVjIFstY2xdIFstYSBuYW1lXSBbY29tbWFuZCBbYXJndW1lbnRzIC4uLl1dIFtyZWRpcmVjdGlvbiAuLi5dAGV4ZWN1dGVfY29wcm9jOiBjb3Byb2MgWyVkOiVzXSBzdGlsbCBleGlzdHMAZXhpdCBbbl0AZXhwZWN0ZWQg4oCYKeKAmQBleHBvbmVudCBsZXNzIHRoYW4gMABleHBvcnQgWy1mbl0gW25hbWVbPXZhbHVlXSAuLi5dIG9yIGV4cG9ydCAtcABleHByZXNzaW9uIGV4cGVjdGVkAGV4cHJlc3Npb24gcmVjdXJzaW9uIGxldmVsIGV4Y2VlZGVkAGZjIFstZSBlbmFtZV0gWy1sbnJdIFtmaXJzdF0gW2xhc3RdIG9yIGZjIC1zIFtwYXQ9cmVwXSBbY29tbWFuZF0AZmcgW2pvYl9zcGVjXQBmaWxlIGRlc2NyaXB0b3Igb3V0IG9mIHJhbmdlAGZpbGVuYW1lIGFyZ3VtZW50IHJlcXVpcmVkAGZvciAoKCBleHAxOyBleHAyOyBleHAzICkpOyBkbyBDT01NQU5EUzsgZG9uZQBmb3IgTkFNRSBbaW4gV09SRFMgLi4uIF0gOyBkbyBDT01NQU5EUzsgZG9uZQBmb3JrZWQgcGlkICVkIGFwcGVhcnMgaW4gcnVubmluZyBqb2IgJWQAZm9ybWF0IHBhcnNpbmcgcHJvYmxlbTogJXMAZnJlZTogY2FsbGVkIHdpdGggYWxyZWFkeSBmcmVlZCBibG9jayBhcmd1bWVudABmcmVlOiBjYWxsZWQgd2l0aCB1bmFsbG9jYXRlZCBibG9jayBhcmd1bWVudABmcmVlOiBzdGFydCBhbmQgZW5kIGNodW5rIHNpemVzIGRpZmZlcgBmcmVlOiB1bmRlcmZsb3cgZGV0ZWN0ZWQ7IG1oX25ieXRlcyBvdXQgb2YgcmFuZ2UAZnVuY3Rpb24gbmFtZSB7IENPTU1BTkRTIDsgfSBvciBuYW1lICgpIHsgQ09NTUFORFMgOyB9AGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgc2hlbGwgd2lsbCBmb3JjZSBldmFsdWF0aW9uIGFzIGFuIGFyaXRobWV0aWMgc3Vic3RpdHV0aW9uAGdldGN3ZDogY2Fubm90IGFjY2VzcyBwYXJlbnQgZGlyZWN0b3JpZXMAZ2V0b3B0cyBvcHRzdHJpbmcgbmFtZSBbYXJnXQBoYXNoIFstbHJdIFstcCBwYXRobmFtZV0gWy1kdF0gW25hbWUgLi4uXQBoYXNoaW5nIGRpc2FibGVkAGhlbHAgWy1kbXNdIFtwYXR0ZXJuIC4uLl0AaGVscCBub3QgYXZhaWxhYmxlIGluIHRoaXMgdmVyc2lvbgBoZXJlLWRvY3VtZW50IGF0IGxpbmUgJWQgZGVsaW1pdGVkIGJ5IGVuZC1vZi1maWxlICh3YW50ZWQg4oCYJXPigJkpAGhpc3RvcnkgWy1jXSBbLWQgb2Zmc2V0XSBbbl0gb3IgaGlzdG9yeSAtYW5ydyBbZmlsZW5hbWVdIG9yIGhpc3RvcnkgLXBzIGFyZyBbYXJnLi4uXQBoaXN0b3J5IHBvc2l0aW9uAGhpc3Rvcnkgc3BlY2lmaWNhdGlvbgBoaXRzCWNvbW1hbmQKAGlkZW50aWZpZXIgZXhwZWN0ZWQgYWZ0ZXIgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50AGlmIENPTU1BTkRTOyB0aGVuIENPTU1BTkRTOyBbIGVsaWYgQ09NTUFORFM7IHRoZW4gQ09NTUFORFM7IF0uLi4gWyBlbHNlIENPTU1BTkRTOyBdIGZpAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGdldHBncnAgZmFpbGVkAGluaXRpYWxpemVfam9iX2NvbnRyb2w6IGxpbmUgZGlzY2lwbGluZQBpbml0aWFsaXplX2pvYl9jb250cm9sOiBzZXRwZ2lkAGludmFsaWQgYXJpdGhtZXRpYyBiYXNlAGludmFsaWQgYmFzZQBpbnZhbGlkIGNoYXJhY3RlciAlZCBpbiBleHBvcnRzdHIgZm9yICVzAGludmFsaWQgaGV4IG51bWJlcgBpbnZhbGlkIG51bWJlcgBpbnZhbGlkIG9jdGFsIG51bWJlcgBpbnZhbGlkIHNpZ25hbCBudW1iZXIAam9iICVkIHN0YXJ0ZWQgd2l0aG91dCBqb2IgY29udHJvbABqb2Jfc3BlYyBbJl0Aam9icyBbLWxucHJzXSBbam9ic3BlYyAuLi5dIG9yIGpvYnMgLXggY29tbWFuZCBbYXJnc10Aa2lsbCBbLXMgc2lnc3BlYyB8IC1uIHNpZ251bSB8IC1zaWdzcGVjXSBwaWQgfCBqb2JzcGVjIC4uLiBvciBraWxsIC1sIFtzaWdzcGVjXQBsYXN0IGNvbW1hbmQ6ICVzCgBsZXQgYXJnIFthcmcgLi4uXQBsaW1pdABsaW5lICVkOiAAbGluZSBlZGl0aW5nIG5vdCBlbmFibGVkAGxvYWQgZnVuY3Rpb24gZm9yICVzIHJldHVybnMgZmFpbHVyZSAoJWQpOiBub3QgbG9hZGVkAGxvY2FsIFtvcHRpb25dIG5hbWVbPXZhbHVlXSAuLi4AbG9nb3V0CgBsb2dvdXQgW25dAGxvb3AgY291bnQAbWFrZV9oZXJlX2RvY3VtZW50OiBiYWQgaW5zdHJ1Y3Rpb24gdHlwZSAlZABtYWtlX2xvY2FsX3ZhcmlhYmxlOiBubyBmdW5jdGlvbiBjb250ZXh0IGF0IGN1cnJlbnQgc2NvcGUAbWFrZV9yZWRpcmVjdGlvbjogcmVkaXJlY3Rpb24gaW5zdHJ1Y3Rpb24g4oCYJWTigJkgb3V0IG9mIHJhbmdlAG1hbGxvYzogYmxvY2sgb24gZnJlZSBsaXN0IGNsb2JiZXJlZABtYWxsb2M6IGZhaWxlZCBhc3NlcnRpb246ICVzCgBtYXBmaWxlIFstZCBkZWxpbV0gWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAG1heGltdW0gaGVyZS1kb2N1bWVudCBjb3VudCBleGNlZWRlZABtaWdyYXRlIHByb2Nlc3MgdG8gYW5vdGhlciBDUFUAbWlzc2luZyDigJgp4oCZAG1pc3Npbmcg4oCYXeKAmQBtaXNzaW5nIGhleCBkaWdpdCBmb3IgXHgAbWlzc2luZyB1bmljb2RlIGRpZ2l0IGZvciBcJWMAbmV0d29yayBvcGVyYXRpb25zIG5vdCBzdXBwb3J0ZWQAbm8g4oCYPeKAmSBpbiBleHBvcnRzdHIgZm9yICVzAG5vIGNsb3Npbmcg4oCYJWPigJkgaW4gJXMAbm8gY29tbWFuZCBmb3VuZABubyBoZWxwIHRvcGljcyBtYXRjaCDigJglc+KAmS4gIFRyeSDigJhoZWxwIGhlbHDigJkgb3Ig4oCYbWFuIC1rICVz4oCZIG9yIOKAmGluZm8gJXPigJkuAG5vIGpvYiBjb250cm9sAG5vIGpvYiBjb250cm9sIGluIHRoaXMgc2hlbGwAbm8gbWF0Y2g6ICVzAG5vIG90aGVyIGRpcmVjdG9yeQBubyBvdGhlciBvcHRpb25zIGFsbG93ZWQgd2l0aCDigJgteOKAmQBub3QgY3VycmVudGx5IGV4ZWN1dGluZyBjb21wbGV0aW9uIGZ1bmN0aW9uAG5vdCBsb2dpbiBzaGVsbDogdXNlIOKAmGV4aXTigJkAbnVsbCBkaXJlY3RvcnkAb2N0YWwgbnVtYmVyAG9ubHkgbWVhbmluZ2Z1bCBpbiBhIOKAmGZvcuKAmSwg4oCYd2hpbGXigJksIG9yIOKAmHVudGls4oCZIGxvb3AAcGlwZSBlcnJvcgBwb3Bfc2NvcGU6IGhlYWQgb2Ygc2hlbGxfdmFyaWFibGVzIG5vdCBhIHRlbXBvcmFyeSBlbnZpcm9ubWVudCBzY29wZQBwb3BfdmFyX2NvbnRleHQ6IGhlYWQgb2Ygc2hlbGxfdmFyaWFibGVzIG5vdCBhIGZ1bmN0aW9uIGNvbnRleHQAcG9wX3Zhcl9jb250ZXh0OiBubyBnbG9iYWxfdmFyaWFibGVzIGNvbnRleHQAcG9wZCBbLW5dIFsrTiB8IC1OXQBwb3dlciBmYWlsdXJlIGltbWluZW50AHByaW50X2NvbW1hbmQ6IGJhZCBjb25uZWN0b3Ig4oCYJWTigJkAcHJpbnRmIFstdiB2YXJdIGZvcm1hdCBbYXJndW1lbnRzXQBwcm9nY29tcF9pbnNlcnQ6ICVzOiBOVUxMIENPTVBTUEVDAHByb2dyYW1tYWJsZV9jb21wbGV0aW9uOiAlczogcG9zc2libGUgcmV0cnkgbG9vcABwcm9ncmFtbWluZyBlcnJvcgBwdXNoZCBbLW5dIFsrTiB8IC1OIHwgZGlyXQBwd2QgWy1MUF0AcmVhZCBbLWVyc10gWy1hIGFycmF5XSBbLWQgZGVsaW1dIFstaSB0ZXh0XSBbLW4gbmNoYXJzXSBbLU4gbmNoYXJzXSBbLXAgcHJvbXB0XSBbLXQgdGltZW91dF0gWy11IGZkXSBbbmFtZSAuLi5dAHJlYWQgZXJyb3I6ICVkOiAlcwByZWFkYXJyYXkgWy1uIGNvdW50XSBbLU8gb3JpZ2luXSBbLXMgY291bnRdIFstdF0gWy11IGZkXSBbLUMgY2FsbGJhY2tdIFstYyBxdWFudHVtXSBbYXJyYXldAHJlYWRvbmx5IFstYUFmXSBbbmFtZVs9dmFsdWVdIC4uLl0gb3IgcmVhZG9ubHkgLXAAcmVhbGxvYzogY2FsbGVkIHdpdGggdW5hbGxvY2F0ZWQgYmxvY2sgYXJndW1lbnQAcmVhbGxvYzogc3RhcnQgYW5kIGVuZCBjaHVuayBzaXplcyBkaWZmZXIAcmVhbGxvYzogdW5kZXJmbG93IGRldGVjdGVkOyBtaF9uYnl0ZXMgb3V0IG9mIHJhbmdlAHJlY3Vyc2lvbiBzdGFjayB1bmRlcmZsb3cAcmVkaXJlY3Rpb24gZXJyb3I6IGNhbm5vdCBkdXBsaWNhdGUgZmQAcmVnaXN0ZXJfYWxsb2M6ICVwIGFscmVhZHkgaW4gdGFibGUgYXMgYWxsb2NhdGVkPwoAcmVnaXN0ZXJfYWxsb2M6IGFsbG9jIHRhYmxlIGlzIGZ1bGwgd2l0aCBGSU5EX0FMTE9DPwoAcmVnaXN0ZXJfZnJlZTogJXAgYWxyZWFkeSBpbiB0YWJsZSBhcyBmcmVlPwoAcmVzdHJpY3RlZAByZXR1cm4gW25dAHJ1bl9wZW5kaW5nX3RyYXBzOiBiYWQgdmFsdWUgaW4gdHJhcF9saXN0WyVkXTogJXAAcnVuX3BlbmRpbmdfdHJhcHM6IHNpZ25hbCBoYW5kbGVyIGlzIFNJR19ERkwsIHJlc2VuZGluZyAlZCAoJXMpIHRvIG15c2VsZgBzYXZlX2Jhc2hfaW5wdXQ6IGJ1ZmZlciBhbHJlYWR5IGV4aXN0cyBmb3IgbmV3IGZkICVkAHNlbGVjdCBOQU1FIFtpbiBXT1JEUyAuLi4gO10gZG8gQ09NTUFORFM7IGRvbmUAc2V0IFstYWJlZmhrbW5wdHV2eEJDSFBdIFstbyBvcHRpb24tbmFtZV0gWy0tXSBbYXJnIC4uLl0Ac2V0bG9jYWxlOiAlczogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6ICVzOiBjYW5ub3QgY2hhbmdlIGxvY2FsZSAoJXMpOiAlcwBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKQBzZXRsb2NhbGU6IExDX0FMTDogY2Fubm90IGNoYW5nZSBsb2NhbGUgKCVzKTogJXMAc2hlbGwgbGV2ZWwgKCVkKSB0b28gaGlnaCwgcmVzZXR0aW5nIHRvIDEAc2hlbGxfZ2V0Yzogc2hlbGxfaW5wdXRfbGluZV9zaXplICglenUpIGV4Y2VlZHMgU0laRV9NQVggKCVsdSk6IGxpbmUgdHJ1bmNhdGVkAHNoaWZ0IFtuXQBzaGlmdCBjb3VudABzaG9wdCBbLXBxc3VdIFstb10gW29wdG5hbWUgLi4uXQBzaWdwcm9jbWFzazogJWQ6IGludmFsaWQgb3BlcmF0aW9uAHNvdXJjZSBmaWxlbmFtZSBbYXJndW1lbnRzXQBzdGFydF9waXBlbGluZTogcGdycCBwaXBlAHN1c3BlbmQgWy1mXQBzeW50YXggZXJyb3IAc3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb246IHVuZXhwZWN0ZWQgdG9rZW4g4oCYJXPigJkAc3ludGF4IGVycm9yIGluIGV4cHJlc3Npb24Ac3ludGF4IGVycm9yIG5lYXIg4oCYJXPigJkAc3ludGF4IGVycm9yIG5lYXIgdW5leHBlY3RlZCB0b2tlbiDigJglc+KAmQBzeW50YXggZXJyb3I6IOKAmCgoJXMpKeKAmQBzeW50YXggZXJyb3I6IOKAmDvigJkgdW5leHBlY3RlZABzeW50YXggZXJyb3I6IGFyaXRobWV0aWMgZXhwcmVzc2lvbiByZXF1aXJlZABzeW50YXggZXJyb3I6IGludmFsaWQgYXJpdGhtZXRpYyBvcGVyYXRvcgBzeW50YXggZXJyb3I6IG9wZXJhbmQgZXhwZWN0ZWQAc3ludGF4IGVycm9yOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlAHN5c3RlbSBjcmFzaCBpbW1pbmVudAB0ZXN0IFtleHByXQB0aW1lIFstcF0gcGlwZWxpbmUAdG9vIG1hbnkgYXJndW1lbnRzAHRyYXAgWy1scF0gW1thcmddIHNpZ25hbF9zcGVjIC4uLl0AdHJhcF9oYW5kbGVyOiBiYWQgc2lnbmFsICVkAHR5cGUgWy1hZnB0UF0gbmFtZSBbbmFtZSAuLi5dAHR5cGVzZXQgWy1hQWZGZ2lsbnJ0dXhdIFstcF0gbmFtZVs9dmFsdWVdIC4uLgB1bGltaXQgWy1TSGFiY2RlZmlrbG1ucHFyc3R1dnhQVF0gW2xpbWl0XQB1bWFzayBbLXBdIFstU10gW21vZGVdAHVuYWxpYXMgWy1hXSBuYW1lIFtuYW1lIC4uLl0AdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3Ig4oCYXV3igJkAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcg4oCYJWPigJkAdW5leHBlY3RlZCBFT0Ygd2hpbGUgbG9va2luZyBmb3IgbWF0Y2hpbmcg4oCYKeKAmQB1bmV4cGVjdGVkIGFyZ3VtZW50IOKAmCVz4oCZIHRvIGNvbmRpdGlvbmFsIGJpbmFyeSBvcGVyYXRvcgB1bmV4cGVjdGVkIGFyZ3VtZW50IOKAmCVz4oCZIHRvIGNvbmRpdGlvbmFsIHVuYXJ5IG9wZXJhdG9yAHVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gY29uZGl0aW9uYWwgYmluYXJ5IG9wZXJhdG9yAHVuZXhwZWN0ZWQgYXJndW1lbnQgdG8gY29uZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3IAdW5leHBlY3RlZCB0b2tlbiAlZCBpbiBjb25kaXRpb25hbCBjb21tYW5kAHVuZXhwZWN0ZWQgdG9rZW4g4oCYJWPigJkgaW4gY29uZGl0aW9uYWwgY29tbWFuZAB1bmV4cGVjdGVkIHRva2VuIOKAmCVz4oCZIGluIGNvbmRpdGlvbmFsIGNvbW1hbmQAdW5leHBlY3RlZCB0b2tlbiDigJglc+KAmSwgY29uZGl0aW9uYWwgYmluYXJ5IG9wZXJhdG9yIGV4cGVjdGVkAHVuZXhwZWN0ZWQgdG9rZW4g4oCYJXPigJksIGV4cGVjdGVkIOKAmCnigJkAdW5rbm93bgB1bmtub3duIGNvbW1hbmQgZXJyb3IAdW5zZXQgWy1mXSBbLXZdIFstbl0gW25hbWUgLi4uXQB1bnRpbCBDT01NQU5EUzsgZG8gQ09NTUFORFM7IGRvbmUAdmFsdWUgdG9vIGdyZWF0IGZvciBiYXNlAHZhcmlhYmxlcyAtIE5hbWVzIGFuZCBtZWFuaW5ncyBvZiBzb21lIHNoZWxsIHZhcmlhYmxlcwB3YWl0IFstbl0gW2lkIC4uLl0Ad2FpdCBbcGlkIC4uLl0Ad2FpdDogcGlkICVsZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIHNoZWxsAHdhaXRfZm9yOiBObyByZWNvcmQgb2YgcHJvY2VzcyAlbGQAd2FpdF9mb3Jfam9iOiBqb2IgJWQgaXMgc3RvcHBlZAB3YWl0Y2hsZDogdHVybmluZyBvbiBXTk9IQU5HIHRvIGF2b2lkIGluZGVmaW5pdGUgYmxvY2sAd2FybmluZzogAHdhcm5pbmc6ICVzOiAlcwB3YXJuaW5nOiAtQyBvcHRpb24gbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QAd2FybmluZzogLUYgb3B0aW9uIG1heSBub3Qgd29yayBhcyB5b3UgZXhwZWN0AHdoaWxlIENPTU1BTkRTOyBkbyBDT01NQU5EUzsgZG9uZQB3cml0ZSBlcnJvcjogJXMAeHRyYWNlIGZkICglZCkgIT0gZmlsZW5vIHh0cmFjZSBmcCAoJWQpAHh0cmFjZV9zZXQ6ICVkOiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgB4dHJhY2Vfc2V0OiBOVUxMIGZpbGUgcG9pbnRlcgB7IENPTU1BTkRTIDsgfQA=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
acl.mo
8.22 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
163.33 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
152.25 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.50 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.07 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
112.22 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
213.96 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
grub.mo
117.68 KB
lrw-r--r--
2026-05-23 12:26:38
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
libidn.mo
8.16 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).