diff tests.html @ 8:1274e2a62479 draft default tip

planemo upload for repository https://forgemia.inra.fr/metexplore/met4j-galaxy commit e34acf0f51cafcf6ae7c97b4feb3188a39f17c32
author metexplore
date Wed, 26 Jul 2023 15:33:45 +0000
parents 1436e9cde9c9
children
line wrap: on
line diff
--- a/tests.html	Tue Jul 04 10:21:26 2023 +0000
+++ b/tests.html	Wed Jul 26 15:33:45 2023 +0000
@@ -285,7 +285,7 @@
         var md = window.markdownit({
           html: true,
         });
-        target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iNzMiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjczIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjczIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjczIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjAgU2tpcHBlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1kYW5nZXIiIHN0eWxlPSJ3aWR0aDogMC4wJSIgYXJpYS12YWx1ZW5vdz0iMCIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iNzMiIHRpdGxlPSIwIEZhaWxlZCBvciBFcnJvcmVkIj4KICA8L2Rpdj4KPC9kaXY+Cgp8IFRlc3QgU3RhdGUgfCBDb3VudCB8CnwgLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBUb3RhbCAgICAgIHwgNzMgfAp8IFBhc3NlZCAgICAgfCA3MyB8CnwgRXJyb3IgICAgICB8IDAgfAp8IEZhaWx1cmUgICAgfCAwIHwKfCBTa2lwcGVkICAgIHwgMCB8CgoKPGRldGFpbHM+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZi9lL2QvZGF0YXNldF9mZWQ2NDg3Mi1iMTI2LTQzMmEtOWVlOC04NDA1YTRjNWFlZGIuZGF0IiAtZyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy84L2IvMi9kYXRhc2V0XzhiMjYyY2QzLWJmNWMtNDQ0MC05MWVjLTk4M2JhMGY5NDEzYS5kYXQiICAgICAgICAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2ZhZWI4NjZjLTA5NTktNDgwOS1iMTdkLTAxZWRhNmY5N2M4NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mYWViODY2Yy0wOTU5LTQ4MDktYjE3ZC0wMWVkYTZmOTdjODQuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy80LzUvOC9kYXRhc2V0XzQ1OGRhNWM2LThjYWMtNGQ3OC05MzY1LTZlNmI2ZWIyMDk1YS5kYXQiIC1nICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzEvNy8yL2RhdGFzZXRfMTcyMTgwNGEtZTBlNC00MjA0LTk1Y2YtMjY0MzQ0ZmQxYmVkLmRhdCIgLWtzICAgICAgICAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZmRlNTMyYjEtM2E2MS00MjUzLWI3OTUtNjJiYzc0ODYwNjliLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2ZkZTUzMmIxLTNhNjEtNDI1My1iNzk1LTYyYmM3NDg2MDY5Yi5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMy8wL2YvZGF0YXNldF8zMGZmNGFhZC0wMDcwLTRmYmQtOWMwZS0zZTJhZTRkODUxMDguZGF0IiAtZyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy83LzMvYi9kYXRhc2V0XzczYmQ2NjAyLWQ5NzktNDc0OS05ODMwLTM2MjBjOGE3ZmE4NS5kYXQiICAtbWMgICAgICAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ5MzlmYTM3LThlNDQtNGI4Yi05YmNmLTVlNDUyMTQyZjcyMC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ5MzlmYTM3LThlNDQtNGI4Yi05YmNmLTVlNDUyMTQyZjcyMC5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMi81LzEvZGF0YXNldF8yNTE3ZTY2Mi04ZDA5LTQ3ODEtYWQzOS0zNTFiMTAxYWQzZmUuZGF0IiAtZyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8yL2QvNi9kYXRhc2V0XzJkNjcyZDY3LWU1MzUtNGJmYi05Y2VkLWVkZjMyMGFjZDAyMC5kYXQiICAgLW1lICAgICAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lYTM0OWE5MC1mNTI1LTQ3OWItOWFjOS1hODZiN2Q2NDA3NjAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgZWRnZXMuLi4gRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZWEzNDlhOTAtZjUyNS00NzliLTlhYzktYTg2YjdkNjQwNzYwLmRhdCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy80LzkvNC9kYXRhc2V0XzQ5NGYxNmFkLTlmODMtNGI0Zi1hZmUwLWE3ZGZmYmE4NGY0Ni5kYXQiIC1nICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2YvMS84L2RhdGFzZXRfZjE4YWQwNmQtN2NkNi00MDJiLTgwMWQtN2JhOTkzNDc5MzM1LmRhdCIgICAgLXJpICAgICAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzhjNzdiMWViLWVhOWEtNDM0ZS1iNTA5LWViY2M0ZTE3Zjc4OC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCiAgICAgIDE2IGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIFBpCiAgICAgIAlyZW1vdmluZyBnYWxhY3Rvc2UKICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyBIKwogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyAzLWtldG8tYmV0YS1ELWdhbGFjdG9zZQogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UtMy1waG9zcGhhdGUKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBQUGkKICAgICAgCXJlbW92aW5nIEgrCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84Yzc3YjFlYi1lYTlhLTQzNGUtYjUwOS1lYmNjNGUxN2Y3ODguZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzYpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzYvYS9iL2RhdGFzZXRfNmFiMmEzNmYtMTZkZi00MTFkLTk5M2EtYTY5ZWE4ZTg5NzFjLmRhdCIgLWcgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy9kLzkvZGF0YXNldF9jZDlhMTVkMS0yNjkwLTQ5MjEtYThiNy1hNDdlZGU3OGNkMDYuZGF0IiAgICAgLXVuICAgICAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNTVmMDMxNWUtMTczNy00MjdkLTkyOGEtZGU5YjdiZWYwZGMxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81NWYwMzE1ZS0xNzM3LTQyN2QtOTI4YS1kZTliN2JlZjBkYzEuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2UvMC8zL2RhdGFzZXRfZTAzN2RkN2UtYjY0Ny00MWI0LWE0YTgtZjYwNDJmZWExYmExLmRhdCIgLWcgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZS82LzgvZGF0YXNldF9lNjhjOGI1Zi1jOWI4LTQ2ZmQtYTdjNi0zZjFmNDQ0MTZmNmUuZGF0IiAgICAgICAtYW0gICAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjk2YjgxN2ItZmI3OS00MjZhLTg4MzctYWI1NjAyZmE2NTg3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCB0cnVlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM4KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8zLzAvZi9kYXRhc2V0XzMwZmJkN2I1LTBmODItNDljMy1hZDMyLTIyYzcxMjUyMTJiZi5kYXQiIC1nICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvZC85L2RhdGFzZXRfOGQ5MTYwYzctY2FiMy00YmMyLTg4YzgtOTc1ZDlmYmUxN2ZlLmRhdCIgICAgICAgICAtaSAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzI0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjU2YTc1YTQtZWVlNC00ZDcyLTlmMjYtY2JkMWI4MjY2YzI2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNiB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82NTZhNzVhNC1lZWU0LTRkNzItOWYyNi1jYmQxYjgyNjZjMjYuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2hva2VQb2ludCAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy80LzEvMy9kYXRhc2V0XzQxM2YyMTU2LTY4ZGYtNGMyMC05YjEwLTJkMjkxZGQ0MjQ3Yi5kYXQiIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jM2JiOWMzZC1kMzA0LTQ4MDQtYmFmYS1jNTZlZjhjNmZjNzMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgY2hva2UgcG9pbnRzLi4uCiAgICAgIEV4cG9ydCByZXN1bHRzLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8wL2EvMi9kYXRhc2V0XzBhMjUwMWE0LTNhN2ItNGEwOS05ZmVjLWQzZTczMDZlM2ZlZi5kYXQiIC1zYyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9jL2QvNC9kYXRhc2V0X2NkNDEzYzZlLTA1YTAtNDZhNy1hZDU2LWYxZmZhMjczMmNkMC5kYXQiIC1tYyAibm8iICAgICAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81MTJkMTMzZi0xMDY1LTQ2MGUtYmRkNi0zMDY5OWNjNmNmZmMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzUxMmQxMzNmLTEwNjUtNDYwZS1iZGQ2LTMwNjk5Y2M2Y2ZmYy5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9lL2YvMi9kYXRhc2V0X2VmMmFjM2IyLWM0MmUtNDk0Yi05Zjk3LTQxYjVkMTU1MjBjYy5kYXQiIC1zYyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy80LzYvMC9kYXRhc2V0XzQ2MDdmY2ZlLWE3ODEtNDk5Mi1iN2YzLTBiZWVlMTlhOWFmOS5kYXQiIC1tYyAiYnlfaWQiICAtcmkgLWR3IC11biAtdHAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82ZWUyYTg2MC1mNzA0LTRjNWMtODA4Ny1jZjEyMjE1NTI0NTUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIFNldHRpbmcgZWRnZSB3ZWlnaHRzICh0YXJnZXQgZGVncmVlKS4uLgogICAgICAxMiBpc29sYXRlZCBub2RlcyByZW1vdmVkIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgICBEb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICAgRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob2dseWNlcm9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob18xX2lub3NpdG9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIE1fc19jCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBQMV9QNF9CaXNfNV9fYWRlbm9zeWxfX3RldHJhcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgUDFfUDVfQmlzXzVfX2FkZW5vc3lsX19wZW50YXBob3NwaGF0ZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9ldGhhbm9sYW1pbmUKICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvc2VyaW5lCiAgICAgIAlyZW1vdmluZyBEX0dseWNlcmFsZGVoeWRlCiAgICAgICBEb25lLgogICAgICBDb21wdXRlIHRyYW5zaXRpb24gbWF0cml4Li4uIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zMi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzZlZTJhODYwLWY3MDQtNGM1Yy04MDg3LWNmMTIyMTU1MjQ1NS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJieV9pZCIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCB0cnVlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMy9jL2YvZGF0YXNldF8zY2Y4NmFhYy1lYmE5LTQxNWItYmE0NC03ZTViMzc2OTM1NzUuZGF0IiAgICAgICAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjI5ODI2ZWEtNTk4ZS00NDA4LTgxNjgtOTk4N2ExYTY4YTgzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcHJpbnRNZXRhYm9saXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UmVhY3Rpb25zIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludFBhdGh3YXlzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRHZW5lcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vVHlwZUNvbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMC85LzkvZGF0YXNldF8wOTlmYzEzNS1jMjNkLTQ4ODYtOTU5Yi1jMmQ2MTA1MWZhMDAuZGF0IiAtbSAtciAtYyAgLWcgLW50IC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZmM0MGIyOS0yYTc1LTQ0ZjQtOGRiYi1kMjU3YjA1ZGM1YjcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwcmludE1ldGFib2xpdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFJlYWN0aW9ucyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50UGF0aHdheXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludEdlbmVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBub1R5cGVDb2wgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2EvYy9lL2RhdGFzZXRfYWNlZmZmYjUtMjEyMC00YzI0LWExZGItYzlkYzNmNTgxYjJjLmRhdCIgICAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNTc5ZjAwMTItMGUyZi00MTE3LThlNGUtOTQxNDc4NmNmYjNkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBzZWVkRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2UvZC9iL2RhdGFzZXRfZWRiNzVjNmEtZjNiNy00ZGRiLTk5OGQtZWQyMmZlYjRlZGViLmRhdCIgLXNjICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvMC9jL2RhdGFzZXRfMjBjZmU4MDEtYjQ5Ny00Njc3LWE1M2YtNDVhMjMyYmMxY2ZkLmRhdCIgLWR3IC11IC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83OTMxNGFjYi1jZTdmLTRkZjEtOTg3OS05YjYxMDYxZGRmNzYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNlZWRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIHRydWUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFBhdGh3YXlzIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFBhdGh3YXlzIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvOS80L2RhdGFzZXRfMjk0Y2Q2NjctZWMyZC00NjA0LTllNDUtZDdlYWI1NTgwZDkwLmRhdCIgLXAgIkNpdHJpY19BY2lkX0N5Y2xlK0ZvbGF0ZV9NZXRhYm9saXNtK3RvdG8iIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jMDEyZWFlZS1kYTg0LTRhZTAtODU1My1iNzRhZTY3YjczODYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIG5ldHdvcmsgZXhwb3J0ZWQuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gb3JpZ2luYWwgbmV0d29yazogMTE1OAogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiAxMTA3CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiA1NzIKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IENpdHJpY19BY2lkX0N5Y2xlIChDaXRyaWNfQWNpZF9DeWNsZSk6IDExCiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMjYKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMTgKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IEZvbGF0ZV9NZXRhYm9saXNtIChGb2xhdGVfTWV0YWJvbGlzbSk6IDYKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiAxNgogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiA4CiAgICAgIEVycm9yOiBQYXRod2F5IHRvdG8gbm90IGZvdW5kIGluIG5ldHdvcmssIHBsZWFzZSBjaGVjayBzYm1sIGZpbGUuCiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gbmV0d29yazogMTcKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gbmV0d29yazogMzUKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIG5ldHdvcms6IDI1CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwYXRod2F5SWQgfCBgICJDaXRyaWNfQWNpZF9DeWNsZStGb2xhdGVfTWV0YWJvbGlzbSt0b3RvIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U2JtbEFubm90IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFNibWxBbm5vdCAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9mL2YvMi9kYXRhc2V0X2ZmMjU4MzU0LTcxZDctNDQ4Ni04ODE5LTE5Y2I0YmZmMTM1OS5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzJiYzIwY2JiLTBjM2MtNGY0NC04YzRiLTY2YTE5MTZlYmFjOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNraXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvOS8yL2RhdGFzZXRfMjkyMjVmMWYtNmRjMy00Y2Y4LWJmMjYtZDA5NTZmN2EyMWRmLmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgIC1za2lwIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jZTJiM2MxMy1hN2JlLTQzYTYtOTNhNC05YjFkODkyMmY2OGIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNDZmYmIyYzEnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIGFubm90YXRpb25zIGZvdW5kIGZvciAxMTAvMTExIG1ldGFib2xpdGVzCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBleHBvcnQgfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgZGIgfCBgICJtZXRhbmV0eC5jaGVtaWNhbCIgYCB8CiAgICAgICB8IHVuaXEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBza2lwIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvNS9mL2RhdGFzZXRfODVmZDhkNGUtMDU2Yi00NjQ0LTgwZDAtMGM3NTg0YTc4ODU2LmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgLXVuaXEgLXNraXAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U2NTlhZmY4LTlmNTQtNDIyZS05NWI3LThhYzM3YmM2YTFlZC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgc2tpcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViQmlwTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1YkJpcE5ldHdvcmsgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvOS9mLzgvZGF0YXNldF85Zjg0ZWE3Yi02M2E3LTRhMGUtOGVkMC02MjdmYTE0N2UxNjQuZGF0IiAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9hLzcvMy9kYXRhc2V0X2E3MzdmMGM3LTJlZjEtNDQ4NC1hOTAwLTRmYTE1ODVmMmJlOC5kYXQiIC10ICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2IvMS84L2RhdGFzZXRfYjE4MjUwZjktMjQwOS00ZTNmLTg3MDgtNDJiMmI2YzY4ZGY2LmRhdCIgICAtc2MgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNC9mL2YvZGF0YXNldF80ZmY2YzU5Yy1mOWIzLTRlZmQtYjQwNC0wOGMyZGFkNzUzY2IuZGF0IiAtayAiMSIgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNTQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mNzQyYjAwMi0wMzA5LTQ4NmUtYjE0Yy00NTVhODg1ZmExMjUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgaW1wb3J0aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIGV4dHJhY3Rpbmcgc291cmNlcyBhbmQgdGFyZ2V0cwoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzU0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjc0MmIwMDItMDMwOS00ODZlLWIxNGMtNDU1YTg4NWZhMTI1LmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBibGtkUmVhY3Rpb25GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1Yk5ldHdvcmsgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy9lLzgvZGF0YXNldF9jZTgzNmY2Zi01NzdmLTQ1MTctYTNlZC0zOWU1NDU2Njk3MDYuZGF0IiAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8zLzMvMy9kYXRhc2V0XzMzMzBmMjI4LTY5YzUtNGEwOS05Y2VhLTM1NTAxOGJkOTMwMi5kYXQiIC10ICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2QvYy9iL2RhdGFzZXRfZGNiOWExOTQtNGM3NS00NTdlLTlmMzMtMTQ1ODdjM2I4YzU3LmRhdCIgICAgIC1rICIxIiAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzUxM2IxNmY2LTE2MWMtNDlmYi1iMjIwLWU2ZmZmMDkyNDFkOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc0NmZiYjJjMScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzUxM2IxNmY2LTE2MWMtNDlmYi1iMjIwLWU2ZmZmMDkyNDFkOC5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNoZW1pY2FsU2ltIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvNC82L2RhdGFzZXRfODQ2Y2Q0YjgtMTAyYS00MWI1LWI1YzAtMWQ3MTk1OGI2Y2Y4LmRhdCIgLXMgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYS8yLzAvZGF0YXNldF9hMjBhYTMwZS00MmMwLTRmMWMtYTE1My02YTNiNjRhZDEzZmEuZGF0IiAgIC10ICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzUvNC9iL2RhdGFzZXRfNTRiMTMyMDAtNzljOC00MmVlLWE3OTQtMjE5ZmFiM2QyNmJkLmRhdCIgLXNjICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvNi84L2RhdGFzZXRfODY4YTY4MzctNWJlNC00ZGY5LTkzNjktNjZjZGI5YjIzNDZmLmRhdCIgLWsgIjEiICAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzYzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYWQzYzhhZGEtNmJiNy00YTIwLTlkYTItN2Y3N2I3MmU0NDI5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIGltcG9ydGluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICAwIHNpZGUgY29tcG91bmRzIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2FkM2M4YWRhLTZiYjctNGEyMC05ZGEyLTdmNzdiNzJlNDQyOS5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRmJjVG9Ob3RlcyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LkZiY1RvTm90ZXMgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNy9lLzAvZGF0YXNldF83ZTA5OGUzYS00NDFhLTRmMDctOWNjMS1iNGY0ZDUxMmMyNjEuZGF0IiAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzY1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfODE1NTExMDMtY2QyMy00ZWM4LWE4OTUtODk0YjQ4NWI2MTczLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIGlNTDE1MTUKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIGlNTDE1MTUKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaGFzUHJvcGVydHksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBoYXNQcm9wZXJ0eSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldEdlbmVzRnJvbVJlYWN0aW9ucyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldEdlbmVzRnJvbVJlYWN0aW9ucyAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy82LzIvNi9kYXRhc2V0XzYyNmFmM2RiLTU2NDYtNDY0My04N2JjLWMxYzJkNmE0Mzc4MS5kYXQiIC1yICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzkvNS8yL2RhdGFzZXRfOTUyMDc2ZDUtYmUzOS00YzBlLWE0NjctNGQ5OGIxMTE3ZDM3LmRhdCIgLXNlcCAiCSIgIC1jb2wgIjEiIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wOWNmYmU3Ny04ZmE2LTQyY2MtYjBlMC1jYWFiNmI0ZTE2NTUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNDZmYmIyYzEnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRNb2RlbFByb3Rlb21lIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGJpZ2cuR2V0TW9kZWxQcm90ZW9tZSAtbSAiZV9jb2xpX2NvcmUiIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hMjc4NTUzNi01NDgxLTRhMTUtYWE1YS01NWJjMWQ2MTNhMzguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbW9kZWxJZCB8IGAgImVfY29saV9jb3JlIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAiZGF0YSIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNC80L2MvZGF0YXNldF80NGMxMWQyNi0wZGNiLTRiYmEtOTY0OS03ZGQ5ZmFkNjgyZTcuZGF0IiAtciAiL3RtcC90bXBibmxqaTJzMy9maWxlcy80LzAvMi9kYXRhc2V0XzQwMjk5YWFjLTI5N2MtNDdmYy1iMDQ1LWQ0NGNmMDRkZDY0Ny5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lYTM0YWE4YS1kOTAwLTRiOTMtOWY1OS02MjRhNGQ0NjM0ZTMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRQcm9kdWN0cyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvOS81LzMvZGF0YXNldF85NTNkODA3My0xZGQ2LTRhYzEtOTQ2NS0yMTlmN2E0ZjBiOTkuZGF0IiAtciAiL3RtcC90bXBibmxqaTJzMy9maWxlcy85L2MvYy9kYXRhc2V0XzljYzliMDA3LWQ0MzMtNGFjZi1iMzNjLTUwYzZkMTY2ZGJjNi5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAtcyAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC83NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzI2YjY5MmM1LWMwOTMtNDAyMS1iMWViLWJlZWVlZTA4OGQ0OC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDIgcmVhY3Rpb25zIG1hcHBlZAogICAgICAwIHJlYWN0aW9ucyBub3QgZm91bmQgaW4gbW9kZWwKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNlcCB8IGAgIlx0IiBgIHwKICAgICAgIHwgaGFzSGVhZGVyIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgaSB8IGAgIjEiIGAgfAogICAgICAgfCBwcmludFN1YnN0cmF0ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2IvNC8zL2RhdGFzZXRfYjQzOGI5N2YtYjdlMi00Njk0LWE0ZjEtYWJjMzBjYWJkMmMyLmRhdCIgLXIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvOS80LzQvZGF0YXNldF85NDRkNTkxMi1kYzU4LTRiYzItOGQ5NS05NjMwOTc1Mjk5NmYuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgIC1wIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wNTgwYjBmZi1mZWEzLTRmZjAtODE4Yy02Y2Y1YWVmYjg0YWYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRQcm9kdWN0cyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9Mb2FkUG9pbnQgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkxvYWRQb2ludCAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8wLzAvZS9kYXRhc2V0XzAwZWQ1MmU0LWJhZjgtNDBkOC05MTBkLTYzM2Y3NzIxN2U1Yi5kYXQiIC1rICIxIiAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzgwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzczNDcwMDAtM2YxZC00ZjA0LWJhOTEtMDAzYmRjOWUzODIwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIENvbXB1dGluZyBsb2FkIHBvaW50cy4uLgogICAgICBFeHBvcnQgcmVzdWx0cy4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX01ldGFib1JhbmsgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLk1ldGFib1JhbmsgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy8wLzQvZGF0YXNldF9jMDRjNDU0ZS00NTkxLTQ1NDItODg0Zi1hMWE5NjUzNzc5MDYuZGF0IiAtcyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9kL2EvNS9kYXRhc2V0X2RhNTliOTZiLTY5YjUtNDQ5Yi04YWRmLWMwOTY4ZDA1YTc5OC5kYXQiIC1zYyAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8yLzYvZC9kYXRhc2V0XzI2ZDk1OWE4LWQ4NTktNGE3Zi1iYWZhLWRlN2Q1YjU2MGU2OS5kYXQiIC1tYXggIjE1MDAwIiAtdCAiMC4wMDEiIC1kICIwLjg1IiAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZGMzMzU5ZmItMGE0ZS00MTUxLWIxYTYtNTUzNDhlMDRhODA1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgbW9kZWwgaW1wb3J0ZWQuCiAgICAgIGNvbXBvdW5kIGdyYXBoIGNyZWF0ZWQuCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIDIgaXNvbGF0ZWQgbm9kZXMgcmVtb3ZlZCAKICAgICAgd2VpZ2h0cyBjb21wdXRlZC4KICAgICAgcmV2ZXJzZSBncmFwaCBjcmVhdGVkLgogICAgICB0cmFuc2l0aW9uIHByb2JhYmlsaXRpZXMgY29tcHV0ZWQKICAgICAgdHJhbnNpdGlvbiBwcm9iYWJpbGl0aWVzIGNvbXB1dGVkIChyZXZlcnNlIGdyYXBoKQogICAgICBzZWVkcyBmaWxlIGltcG9ydGVkCiAgICAgIDMgc2VlZHMKICAgICAgZ2xvYmFsIHBhZ2VSYW5rIGNvbXB1dGVkCiAgICAgIGdsb2JhbCBjaGVpUmFuayBjb21wdXRlZAogICAgICBwYWdlUmFuayBjb21wdXRlZAogICAgICBjaGVpUmFuayBjb21wdXRlZAogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZWRnZVdlaWdodHNGaWxlUGF0aHMgfCBgIE5vbmUgYCB8CiAgICAgICB8IG1heE5iT2ZJdGVyIHwgYCAiMTUwMDAiIGAgfAogICAgICAgfCB0b2xlcmFuY2UgfCBgICIwLjAwMSIgYCB8CiAgICAgICB8IGRhbXBpbmdGYWN0b3IgfCBgICIwLjg1IiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9OZXR3b3JrU3VtbWFyeSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuTmV0d29ya1N1bW1hcnkgLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZC8xLzEvZGF0YXNldF9kMTE1MGFkMC1jNjU3LTQzMWItOWNmZC01ZTRkMjBlNWE2MDYuZGF0IiAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvODYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lN2YzMTJjNi1jOGRiLTQ0OTEtOWFhNi1hMzUyZDE0MWUzNTAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgcGVyZm9ybSBiYXNpYyBhbmFseXNpcy4uLgogICAgICBleHRyYWN0IGNvbm5lY3RlZCBjb21wb25lbnQuLi4KICAgICAgQ29tcHV0ZSBkZW5zaXR5Li4uCiAgICAgIENvbXB1dGUgbG9jYWwgY2x1c3RlcmluZyBjb2VmZmljaWVudHMuLi4KICAgICAgQ29tcHV0ZSBkZWdyZWUgc3RhdGlzdGljcy4uLgogICAgICBDb21wdXRlIGRpc3RhbmNlcy4uLgogICAgICBDb21wdXRlIGRpc3RhbmNlcyBzdGF0aXN0aWNzLi4uCiAgICAgIENvbXB1dGUgY2VudHJhbGl0eS4uLgogICAgICAJQ2xvc2VuZXNzIGRvbmUuCiAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBza2lwZGlzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9QcmVjdXJzb3JOZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5QcmVjdXJzb3JOZXR3b3JrIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzkvYS8zL2RhdGFzZXRfOWEzZGIyMmMtOWU1MC00N2Q4LWE1M2ItMWEwODlmNThjMWQzLmRhdCIgLXQgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNC81L2YvZGF0YXNldF80NWYwZTAzMS1mMTg3LTRiZjctOTIzNy0wMjIyYmU5MzE4MTguZGF0IiAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E5MWFhMTcxLTZlYjMtNDdkNS1hMWFiLTI5YjBkYzJlMDlkZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTkxYWExNzEtNmViMy00N2Q1LWExYWItMjliMGRjMmUwOWRlLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcmVhY3Rpb25Ub0lnbm9yZUZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NCTUx3aXphcmQgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TQk1Md2l6YXJkIC1zICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2YvMi81L2RhdGFzZXRfZjI1MTA5YjgtMDk3OC00ODNmLWIwMTctZjM4YzY5NTcxMTJmLmRhdCIgLXJpYyAtcjAgLW1jICJieV9pZCIgLXJkciAtckVYICJzIiAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjQ0MmE1NzgtOWNmNy00ODdhLWFiNGEtOTVlNGMxYTVlMWIyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMDVkNDBjNzNfOGFiYV80MTNmXzlkZDhfNzc5YTBiNWZiMmFlCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCgoKICAgICAgCWNvbXBhcnRtZW50czoJNQogICAgICAJbWV0YWJvbGl0ZXM6CTExMQogICAgICAJcmVhY3Rpb25zOgk3NQogICAgICAJZW56eW1lczoJODUKICAgICAgCWdlbmVzOgk4NgogICAgICAJcHJvdGVpbjoJODYKICAgICAgCXBhdGh3YXk6CTMKCgogICAgICByZW1vdmluZyByZWFjdGlvbiB3aXRoIGNsb3NlZCBmbHV4IGJvdW5kLi4uCiAgICAgIDAgImNsb3NlZCIgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBleHRlcm5hbCBjb21wYXJ0bWVudC4uLgogICAgICAxMyBleHRlcm5hbCBzcGVjaWVzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBpc29sYXRlZCBjb21wb3VuZHMuLi4KICAgICAgMCBpc29sYXRlZCBjb21wb3VuZHMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIHJlbW92aW5nIGR1cGxpY2F0ZWQgcmVhY3Rpb25zLi4uCiAgICAgIDEgZHVwbGljYXRlZCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCgoKICAgICAgCWNvbXBhcnRtZW50czoJMQogICAgICAJbWV0YWJvbGl0ZXM6CTQ5CiAgICAgIAlyZWFjdGlvbnM6CTM0CiAgICAgIAllbnp5bWVzOgk4NQogICAgICAJZ2VuZXM6CTg2CiAgICAgIAlwcm90ZWluOgk4NgogICAgICAJcGF0aHdheToJMwoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgaW5wdXRSZWFjdGlvbnMgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgInMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NCTUx3aXphcmQgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TQk1Md2l6YXJkIC1zICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2YvMC9kL2RhdGFzZXRfZjBkNWQzODQtZGMyOC00OTJhLTk3ZmYtMDBiM2Y2Y2I0MDg4LmRhdCIgLXJjICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzcvOC8wL2RhdGFzZXRfNzgwNzdjZmQtNmJhOS00MmRhLTlkYTktZDU1ODRiOTVkMWFlLmRhdCIgLXJpYyAtcnIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMi85LzMvZGF0YXNldF8yOTNhNWI5MC0zMWUzLTRjMDMtYWNhNC0xYWRlOTU3ZGZjYmYuZGF0IiAtcjAgLW1jICJubyIgLXJkciAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzk1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDcwNTY3MmYtYTQ4OS00NTYxLWFiN2MtYTJmODNkMTRhMjM4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgoKCiAgICAgIAljb21wYXJ0bWVudHM6CTMKICAgICAgCW1ldGFib2xpdGVzOgkxMTA3CiAgICAgIAlyZWFjdGlvbnM6CTExNTgKICAgICAgCWVuenltZXM6CTUxNAogICAgICAJZ2VuZXM6CTU3MgogICAgICAJcHJvdGVpbjoJNTcyCiAgICAgIAlwYXRod2F5Ogk0OAoKCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgc2lkZSBjb21wb3VuZHMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIHNpZGUgcmVhY3Rpb24uLi4KICAgICAgMiBpcnJlbGV2YW50IHJlYWN0aW9ucyByZW1vdmVkIGZyb20gbmV0d29yay4KICAgICAgcmVtb3ZpbmcgcmVhY3Rpb24gd2l0aCBjbG9zZWQgZmx1eCBib3VuZC4uLgogICAgICAwICJjbG9zZWQiIHJlYWN0aW9ucyByZW1vdmVkIGZyb20gbmV0d29yay4KICAgICAgcmVtb3ZpbmcgaXNvbGF0ZWQgY29tcG91bmRzLi4uCiAgICAgIDAgaXNvbGF0ZWQgY29tcG91bmRzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBkdXBsaWNhdGVkIHJlYWN0aW9ucy4uLgogICAgICAwIGR1cGxpY2F0ZWQgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgoKCiAgICAgIAljb21wYXJ0bWVudHM6CTMKICAgICAgCW1ldGFib2xpdGVzOgkxMTAxCiAgICAgIAlyZWFjdGlvbnM6CTExNTIKICAgICAgCWVuenltZXM6CTUxNAogICAgICAJZ2VuZXM6CTU3MgogICAgICAJcHJvdGVpbjoJNTcyCiAgICAgIAlwYXRod2F5Ogk0OAoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgIiIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyR3JhcGggLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZi84L2UvZGF0YXNldF9mOGVmOWUxYS1jNWEwLTRkYzMtYmYwMC0zMzYzMDgyYjdmYWUuZGF0IiAgLWMgICAtZ21sIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80NDJhYTJjMi00MzNmLTQyMjQtYTgzZi02ZmRlYWI4ZTg4Y2IuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80NDJhYTJjMi00MzNmLTQyMjQtYTgzZi02ZmRlYWI4ZTg4Y2IuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCB0YWIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBnbWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyR3JhcGggLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZC9mLzAvZGF0YXNldF9kZjBlZDdkMC0zMDc2LTQ2ZmUtYjI2ZC0zMTMyNDgwYWY1MDEuZGF0IiAtYiAgICAtZ21sIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83Y2UzODk0Ny1jMDU3LTQ1ZWEtOWVlNC0xZTZkOGJiNWRiZjkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83Y2UzODk0Ny1jMDU3LTQ1ZWEtOWVlNC0xZTZkOGJiNWRiZjkuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXBvdW5kIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCB0YWIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBnbWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyR3JhcGggLWkgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMy84LzkvZGF0YXNldF8zODllZmQ0NC1iOTRjLTQ2YmItODgxZi02NjIwZWYxMDcyNTAuZGF0IiAgIC1yICAtZ21sIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTAxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYjA0YzQ4YTItMmRiOC00NjE5LWIyNzgtYzM3ZmNlMDBiMDU1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2IwNGM0OGEyLTJkYjgtNDYxOS1iMjc4LWMzN2ZjZTAwYjA1NS5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGJpcGFydGl0ZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXBvdW5kIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIHRydWUgYCB8CiAgICAgICB8IHRhYiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGdtbCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMlRhYiAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyVGFiIC1pICItLT4iIC1yICI8PT0+IiAtaW4gIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy9lLzYvZGF0YXNldF9jZTY5YTI4Yy0xNmQ0LTRlNjUtOGI2Yi0xOTljMjY5ZjRkOTYuZGF0IiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTAzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOGEwMzEzNDktNDMzNS00YjIzLTliMjQtMWJkZTM4MDRlNTQ0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyVGFiIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJUYWIgLWkgIi0+IiAtciAiPSIgLWluICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzQvMy80L2RhdGFzZXRfNDM0Y2Q1MTUtMTI5Yy00MDQwLWE4MGUtYTFkOWEzYmEyZWI4LmRhdCIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEwNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzY5OWMxOWYyLWJjOTItNDdhOC04ZjlmLWM4MjMyMTQ5NjExMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaSB8IGAgIi0+IiBgIHwKICAgICAgIHwgciB8IGAgIj0iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9hL2YvYy9kYXRhc2V0X2FmYzhlNzMzLWE5M2YtNDQyNi04YzQ5LTE1YzFmNjNmNTQ5ZC5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNi9lL2IvZGF0YXNldF82ZWJiNjEzNi05Y2YzLTQwNWUtOWI2Ny02YWY4N2FkMjNhZDcuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEwOC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzkzZTc3ODJhLWVhODYtNDQ3Ny04MzFkLTRmNzY2ZjA4MzI0MS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzk0MTk0YTE4Xzc5MGRfNDI5Ml9iZTBkXzg0NTE1NWYyNTg5ZAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2QvYy9kL2RhdGFzZXRfZGNkM2FkOWMtZWU5Yy00MTFkLTk3ZTQtNGFhN2VjNDFhYzBlLmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8xL2IvZS9kYXRhc2V0XzFiZWEwZTFlLThkMmMtNDBjNy1hMjcxLWQxNGFkNzc5MmVmOC5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTExL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMjdlMWQ0NjQtOGEwNC00ZmU4LWE0NjMtZDk5MmMyNTAxNGM1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDEgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfODU4N2ViNGNfZGQ1Ml80MDI5X2IxMTRfNjUyNmU5NzAzMjEyCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMSIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMS8wL2UvZGF0YXNldF8xMGUyZDg2MS0wN2EyLTQ5NjAtOGM3Zi02NjcwNjQyNjkxMTkuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzMvZi8wL2RhdGFzZXRfM2YwOGEwMTktZWFkZC00YWEyLWIxNTMtNDYxZTZlODk2ZTA0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMTQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85NWFkMzUyMi1hNmUzLTRjOGItOGRmMy0wNGJlYTRiMTllZGUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMSBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF84NWZjMjcwM184ZTMwXzRmYjFfYWZkMl8wZjQwOTUwZTZlMjYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIxIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy81L2YvYy9kYXRhc2V0XzVmYzNmMTVkLTIyZGMtNGJmMy1hNjcxLWE3YjFhZDhlYWFjNC5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMi9hLzEvZGF0YXNldF8yYTFlNzJkNC1lODFlLTRiMDUtYmJjOC02ZTY4ZTUxMDRlZmIuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzMwNmIwNjEwLTM1MjktNDgwNS1hN2FjLWVkMDllYTFkZDI1Ni5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2VjNTZhOGY1XzUzNDFfNDI3YV85MWJlXzJiNGJhYzQ4NWEzNwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiIC1wIC1zIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8yL2YvYi9kYXRhc2V0XzJmYmFjMWQ5LWI0ODctNDY5Ni04YzdkLTc4YmJiNmYzMmUzNS5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMC9hLzQvZGF0YXNldF8wYTQ3YmRkNi1iZmJkLTRkY2MtYThhMC1mNTJiZjIwZDQ4ZmMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzhiNzVhMGQ2LTYxYzgtNGMzNS04OTA2LTdjZjBhMGNhNmYwZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDMgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCB0cnVlIGAgfAogICAgICAgfCBzIHwgYCB0cnVlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEVjc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldEVjc0Zyb21GaWxlIC1jZWMgIjIiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy81LzgvOS9kYXRhc2V0XzU4OTFhNzA1LWU5OWMtNDVhMi1iNzM0LWY0NTkyM2I3YTU5Zi5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvOC9lL2UvZGF0YXNldF84ZWVmOGY5MC1jNDhkLTQ3ZTctYTFlOS1hODVkMDJiMWMyZWQuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ5Yzk0OGQ5LWNjYzItNDQzMy05ZjI5LTNlMTdiZjMwOGFjOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIHJlYWN0aW9ucyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83YWE1NzRkOF8wNGE5XzRmZjJfODZjMV85ZTRjYmUzZGE5NzgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZWMgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0RWNzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0RWNzRnJvbUZpbGUgLWNlYyAiMiIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2IvNC9lL2RhdGFzZXRfYjRlNThjOTMtZmUzYi00NDFkLWFiMzMtYmQ2NTc4ZDBiNjIyLmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8wLzAvYS9kYXRhc2V0XzAwYTg4ZDY5LTFhMmQtNGY2YS1iOGRiLTYwODE1ZDc3MmE4ZS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMDIyNzM1MGYtOTIzYS00MmM2LWI4ODgtMDE5YmQyNGU2NDgzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAxCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgICoqKioqKioqCiAgICAgIFtXYXJuaW5nXUF0dHJpYnV0ZSAiMS4yLjMuNC41IiBub3Qgd2VsbCBmb3JtYXR0ZWQKICAgICAgKioqKioqKioKICAgICAgRXJyb3IgaW4gc2V0dGluZyBFQ3MKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGVjIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEZvcm11bGFzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAtY2YgIjIiIC1jaSAiMSIgICAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy9kLzgvZGF0YXNldF9jZDhmMjE5Yy05MTNlLTQ3YjEtODE2Ny1kNmY5YjUwNzhhZDMuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2IvYy80L2RhdGFzZXRfYmM0OThjOWItNDdiMC00ZWI2LWI3NjMtNWMwMDRjZjVjOTdmLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82MmVjZGFlMi1lODA0LTQxYWYtOTI0Yi1lODEyYjRmYzA1YjcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF81MmEwM2YyY182NjQ0XzQ1ZjVfYTM1MV9lMmI0Yjk1ZTJlNjcKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRGb3JtdWxhc0Zyb21GaWxlIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy81L2MvMC9kYXRhc2V0XzVjMDIxNWNhLTFmMGQtNDg2NS04ZmJlLTg2ZjYyZTI3NGJlMi5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvNy9iLzUvZGF0YXNldF83YjVkYTUwZi05NGI4LTQ3ZmEtODk4Yi0xMDEzZDQxMTg5MmEuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEzMi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Q1NjI3ZGU0LTlhYjYtNDc1YS04MTY2LTc3YzdkZTY5YjY2MS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMQogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAqKioqKioqKgogICAgICBbV2FybmluZ11BdHRyaWJ1dGUgIjEyQ0g0TyIgbm90IHdlbGwgZm9ybWF0dGVkCiAgICAgICoqKioqKioqCiAgICAgIEVycm9yIGluIFNibWxTZXRGb3JtdWxhCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRHcHJzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0R3Byc0Zyb21GaWxlIC1jZ3ByICIyIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYS9jLzYvZGF0YXNldF9hYzZjMWM1NS03Y2ZkLTRiZjgtYmUzMy03Yzg2NDVmOWQ3MTYuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2MvNC9iL2RhdGFzZXRfYzRiNjQ0NmItZDk3OS00NmRlLTg1MjktYjk0Njg5ZDBkZGM3LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lN2Q0YmY0Zi03MjFmLTQ3NDQtOWIzOS1kMDE2YjFmNWFlNzEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBnZW5lIGFzc29jaWF0aW9ucyBjcmVhdGVkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfZDYzMzg5MjNfMzE1NV80MmVjXzg1N2JfZTFmODJlZThkMzNhCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGdwciB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMS9iL2UvZGF0YXNldF8xYmUyZDJkMi0wZjMzLTQ5NTMtYmYxMC1hNmE4YjE3YTE4ZGQuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzkvYy8wL2RhdGFzZXRfOWMwOTFkNjEtODA0Yi00NmU4LThmMmItZTdjMTA3NGY1MTk3LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85ZDE5MjZiNS0zMmNjLTRhNjctOGI2MC1hYzBkYWE0NGNiYjIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF8yOGVmMmQzNl8wNGMwXzQxY2VfOGI1YV9lMWNjY2E0YjJmNzAKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJSRUFDVElPTiIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzUvOS9iL2RhdGFzZXRfNTliNmE1OWYtYzE5NS00Mzc2LTg4YWEtZmE1MGQ0Y2RjMWY1LmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8yLzYvNS9kYXRhc2V0XzI2NTc3OTQ0LTVmOTktNDE5NC04MTczLTYwMGEyYzBiNjE2Yy5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOWI1NzBkMWItYjhmZS00YmFmLWI3NzAtZjFiODMyYmFhN2M4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMWFhNjg5YWRfYzU5Ml80ZTc1Xzk5NTdfMjQ4YzJmYzcyOTgzCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUkVBQ1RJT04iIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIlBBVEhXQVkiIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8zLzcvZS9kYXRhc2V0XzM3ZTY2NzZmLWFjZjEtNDk5OC04MTZkLWNmY2U3OTgxNDQxYy5kYXQiIC10YWIgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYy9mLzIvZGF0YXNldF9jZjJlZDFmMi1hNmNlLTQ1NWEtYTA0MC02OGVkZDIzMDhhYmUuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE0NC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ4MWRmMTE2LTJjNTktNDJjNC1hY2RlLThjMGE2YmQ3NGM3My5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUEFUSFdBWSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0SWRzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0SWRzRnJvbUZpbGUgLWNuZXcgIjIiIC1jaSAiMSIgICAtbyAiR0VORSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvZC81L2RhdGFzZXRfMmQ1OWNjZTctZjg3Yi00ZGU0LWE2ZTItNjNmODNiYzBlMWUzLmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy8wLzEvNy9kYXRhc2V0XzAxNzZhODU0LTJjYTYtNGIyMi1iODE3LWRlYzZmNTQwOWI2MS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNWZkMGNkZWQtMDc0Zi00MWZiLWJjMTUtMDg4ZGYzNWI1MTMxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJHRU5FIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJDT01QQVJUTUVOVCIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2YvZi9lL2RhdGFzZXRfZmZlZmYyNzMtODcxOC00ZGVjLThlMWUtMjA2YjQ4OTc3YjZkLmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy84LzUvNC9kYXRhc2V0Xzg1NDUyMmQ3LWM0ZDUtNDcyYS1hYzU4LWZiMWQzYjI4OWY5NS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTUwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMzExZTYyZWMtY2ZkYS00ZmM2LThiZWUtZWUzOWFkNDZjYjJjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJDT01QQVJUTUVOVCIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZC82L2YvZGF0YXNldF9kNmZlNzhlNC0zZjVmLTQ4ODUtOTljYS01ZjY0YzRiOWIxOTYuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzAvNi80L2RhdGFzZXRfMDY0MmZhOWUtMmJhNi00ZTM1LTg3MDktNDNlYWY1NjY4MmQ5LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81NzcwMDIxMC0yNWVjLTRhNTEtODZmMi1iOGQ5Mzg3ZjlkMzkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9hNTRkMGM3MF9hYTI4XzQxMzBfYmQyMV8xZThlMGIwNTc3N2QKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIlJFQUNUSU9OIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZC8xL2UvZGF0YXNldF9kMWViNTZiZi1mYTE4LTRjYjItYTkyNS01NWYyM2E3Yjk4YjUuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvMS80L2RhdGFzZXRfODE0NWI2OWMtMTM4Ny00OTExLWJlMGYtZmJlZDg3MTIwYWRiLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wNDg3MjNjYy01ZjhjLTQwYzEtYjNmMC05ZTNmMjJlYzY2ZjkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF8yYTZkZmRlNF83NTdkXzQ0NTlfYmJlY18wODYzYjYxMWZjOWUKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJSRUFDVElPTiIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJQQVRIV0FZIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvYS8zL2QvZGF0YXNldF9hM2RjNjg0My1iZmY3LTQzMmUtOWNmMS0wMjliNWYwMDViNDAuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2IvOS9mL2RhdGFzZXRfYjlmNjFhMWQtM2IwYy00MzY5LTkyYWQtN2JhNDAzNTMyOWJmLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jZWQyNDA4Ni0zNjBjLTRkMDYtYTZkMy02ODliOTZjNjJhM2MuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIlBBVEhXQVkiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldE5hbWVzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0TmFtZXNGcm9tRmlsZSAtY25hbWUgIjIiIC1jaSAiMSIgICAtbyAiR0VORSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzMvNC83L2RhdGFzZXRfMzQ3ZTVlYzgtMzU0NS00OGFiLThhZWQtMWJlZDBmY2FiNWFiLmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9hLzgvZS9kYXRhc2V0X2E4ZTY1MjM2LWU3NDUtNDVmZC04M2I0LTRkNDQxMGNiOTQ5Mi5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTYyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzFlYzBjNmItYWYwZC00YWNmLWJjMTAtOGJlM2UzYjA4YmMyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJHRU5FIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRQYXRod2F5c0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgLWNwICIyIiAtc2VwICJ8IiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvZi83L2IvZGF0YXNldF9mN2JkNjY0OS03ZWZlLTRjZDUtODc3Mi03YTkwOGZmYzUyNzEuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2YvOC85L2RhdGFzZXRfZjg5YzFkMTYtZjU4NC00ZDk1LTg4ZjEtNWQxNzkyYjlkZTQ0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8xYzIxOTA1OC02ZDBkLTRhZWYtYWU1My1jODUyODA0ZDk4ZjQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMyByZWFjdGlvbnMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfZGI3MjUwNjNfOThjOF80ODE4Xzk2MzVfNGNjYzUwMWU3MTQ3CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbHAgfCBgICIyIiBgIHwKICAgICAgIHwgc2VwIHwgYCAifCIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAtY3AgIjIiIC1zZXAgIiArICIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzMvYi8wL2RhdGFzZXRfM2IwMGEwMWMtNmM5Yy00ZGQzLTg4ZjYtYzllZDhhMmNiNjE2LmRhdCIgLXRhYiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9lLzcvNC9kYXRhc2V0X2U3NDFhYTYxLWVjYTEtNDI0Yy04ZjdiLWFkYWZiZTMyNTQ2MS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTY4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMDY0MWNkMDgtMWM1Yy00MDc2LTliNjYtNmRmNDk3N2ExOWJmLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDMgcmVhY3Rpb25zIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2ZhZjIzNTAzXzk5NTRfNDU5YV85YmViXzQxYjk1NjFjYTI2MwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xwIHwgYCAiMiIgYCB8CiAgICAgICB8IHNlcCB8IGAgIiArICIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFJlZnNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRSZWZzRnJvbUZpbGUgLWNyICIyIiAtcmVmICJJbkNoaSIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvZmlsZXMvOC84L2UvZGF0YXNldF84OGUzNDY3ZC03YmRkLTRlYzEtYmUxZS0yN2I3ZmM2ZDM0NDkuZGF0IiAtdGFiICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzgvZS8wL2RhdGFzZXRfOGUwNDZjOTYtZWQwZC00Zjk1LWEwZjYtNWE0MjAwNWY3MDgyLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lOThmNjQ1OC1lMzEyLTRiOGItYTgzYy1jMDc2NmM2OWRjMjguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF81MWU0M2NmMF84OTQ3XzQ4MWJfODljNF85OTQwNmYxOTU0MjMKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sUmVmIHwgYCAiMiIgYCB8CiAgICAgICB8IHJlZiB8IGAgIkluQ2hpIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiTUVUQUJPTElURSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sVG9NZXRhYm9saXRlVGFibGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sVG9NZXRhYm9saXRlVGFibGUgLXMgIi90bXAvdG1wYm5samkyczMvZmlsZXMvMC9kL2IvZGF0YXNldF8wZGJjNDliNi1iYTU5LTQ1Y2YtYTEzYi05MjJiMjVmNzcyYjUuZGF0IiAtbyAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE3My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzIyMGVjMjEyLTMxZjUtNDVlMy05MDYxLTM1MzIwYjIyMGI5NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TY29wZU5ldHdvcmsgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNjb3BlTmV0d29yayAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy83LzcvZi9kYXRhc2V0Xzc3ZmMyMzk5LWE1YWMtNDNiMC1iNGIzLWEwOTU5ZWE2OTE4Zi5kYXQiIC1zICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvNi83L2RhdGFzZXRfMjY3YTI4YTMtOGRkNS00OGFjLTlmZTAtYTcyNDdkNjRmMWI4LmRhdCIgLXNjICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2EvMy8zL2RhdGFzZXRfYTMzMDNjOTItNzY5YS00NDA0LWE1NzYtYzRmOWQ2YWUwMmFhLmRhdCIgICAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85NTk0MDI4YS05MzhjLTRlMDctOGI5ZS0xNzBmYjE0MTY2YzAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85NTk0MDI4YS05MzhjLTRlMDctOGI5ZS0xNzBmYjE0MTY2YzAuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbmNsdWRlU2lkZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvblRvSWdub3JlRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdHJhY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZWVkc0FuZFRhcmdldHMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNlZWRzQW5kVGFyZ2V0cyAtaSAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9lLzIvZC9kYXRhc2V0X2UyZGEyYTUwLWQ0MDEtNDkxZS04YTM0LTllMzYyYTkxYjNlNi5kYXQiIC1zICAgICAgIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTc5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZGM1MzA4MzItODk4MC00YTA1LTg3ZGItYjNiYWYxYjExOWExLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGlucHV0U2lkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgY29tcCB8IGAgIiIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgc2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlSW50ZXJuYWwgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzQvZS8wL2RhdGFzZXRfNGUwOWI4ZGMtOTcwOC00OTczLWFlNTAtNTQ3MWE5M2MxMzVkLmRhdCIgLWMgImUiICAtdCAgICAgLWluIC1vICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMmU1OWFiNjYtYzNhNS00ZWFmLWJiN2QtYzdkZTZmZDY5NzgwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGlucHV0U2lkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgY29tcCB8IGAgImUiIGAgfAogICAgICAgfCBzb3VyY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzaW5rIHwgYCB0cnVlIGAgfAogICAgICAgfCBub3Rzb3VyY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBub3RzaW5rIHwgYCBmYWxzZSBgIHwKICAgICAgIHwga2VlcElzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlQm9yZW5zdGVpbkFsZyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUludGVybmFsIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzcvZS85L2RhdGFzZXRfN2U5ZDE3ZTMtOWNmZi00NzQ0LTlmNzItODExYzM3YWI5YmE0LmRhdCIgLWMgImUiICAtdCAgICAtQiAgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lMjg5MWQ2YS1hNTk0LTQ2MjQtYWY2ZS02NjNiYTk4ZTY0NjAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiZSIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNpbmsgfCBgIHRydWUgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCB0cnVlIGAgfAogICAgICAgfCB1c2VJbnRlcm5hbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2lkZUNvbXBvdW5kc1NjYW4gKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNpZGVDb21wb3VuZHNTY2FuIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzcvYi8xL2RhdGFzZXRfN2IxYjIzNTEtY2Q0MS00MTdmLTg5YjYtY2U0YTc5NzE1NjFjLmRhdCIgICAtZCAiNDAwIiAgIC1tICJubyIgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hYTczNDJkZi1kOGI4LTRkMmUtOGQ3NC0wZmU4MGUxNjg2MTkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICAvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzcvYi8xL2RhdGFzZXRfN2IxYjIzNTEtY2Q0MS00MTdmLTg5YjYtY2U0YTc5NzE1NjFjLmRhdAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBTY2FuaW5nLi4uCiAgICAgIGRvbmUKICAgICAgZm91bmQgNiBzaWRlIGNvbXBvdW5kIGFtb25nIDExMDcgY29tcG91bmRzCiAgICAgIC90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hYTczNDJkZi1kOGI4LTRkMmUtOGQ3NC0wZmU4MGUxNjg2MTkuZGF0CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlT25seSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vUmVwb3J0VmFsdWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWdyZWUgfCBgICI0MDAiIGAgfAogICAgICAgfCBkZWdyZWVQcmVjZW50aWxlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgZmxhZ0lub3JnYW5pYyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZsYWdOb0Zvcm11bGEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwYXJhbGxlbEVkZ2UgfCBgICJuYW4iIGAgfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2lkZUNvbXBvdW5kc1NjYW4gKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNpZGVDb21wb3VuZHNTY2FuIC1pICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2UvZS82L2RhdGFzZXRfZWU2MjUzNmMtYmY3MS00YzVmLTg1YmEtMmI2MWVjZDc2YmI1LmRhdCIgIC1pZCAtZCAiNDAwIiAgIC1tICJubyIgLW8gIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wZjI0ZmNlYi04MmFkLTRiMTEtYTJjNi02N2IyZDc5OWU1MzEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICAvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2UvZS82L2RhdGFzZXRfZWU2MjUzNmMtYmY3MS00YzVmLTg1YmEtMmI2MWVjZDc2YmI1LmRhdAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBTY2FuaW5nLi4uCiAgICAgIGRvbmUKICAgICAgZm91bmQgNiBzaWRlIGNvbXBvdW5kIGFtb25nIDExMDcgY29tcG91bmRzCiAgICAgIC90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wZjI0ZmNlYi04MmFkLTRiMTEtYTJjNi02N2IyZDc5OWU1MzEuZGF0CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlT25seSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vUmVwb3J0VmFsdWUgfCBgIHRydWUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgIjQwMCIgYCB8CiAgICAgICB8IGRlZ3JlZVByZWNlbnRpbGUgfCBgICJuYW4iIGAgfAogICAgICAgfCBmbGFnSW5vcmdhbmljIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZmxhZ05vRm9ybXVsYSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHBhcmFsbGVsRWRnZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy85LzcvNS9kYXRhc2V0Xzk3NWEwYjZiLTNiOTUtNDI1ZC1iZGE2LTYzNTA1Njg1ZDhmZi5kYXQiIC1pZCAiTkEiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTg5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfODI2YzcxOTAtYzg5Ni00YjcwLTkxNzMtYjQwODYyZDEyMzUyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfOTM4NmE5NmZfNTMyYV80Y2M0X2FlNzVfNTMxZTBhMjMyNWMzCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBlM2NhNzRlYWEwYzgxOTRkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMiIgLWNmICIzIiAgIC1lICJfYiIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXBibmxqaTJzMy9maWxlcy9lL2QvZC9kYXRhc2V0X2VkZGFhN2Q5LTMzNTgtNDQ2MC05MGNiLWMyNWQ4ZDA0NDU0Yy5kYXQiIC1pZCAiTkEiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcGJubGppMnMzL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTkxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmVlMjhkNDMtNDU3OS00MmYxLWE1MWItNDE5OWRkZmVmNjM5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMWM3OGIyYzZfOGRjOV80YWFjXzk4NTdfYmQwOWExMWE3MTg3CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIzIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBlM2NhNzRlYWEwYzgxOTRkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcGJubGppMnMzL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWkgIi0+IiAtciAiPSIgLWluICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzL2MvMS8yL2RhdGFzZXRfYzEyOTIzOTItMTliMy00NjAxLWJlMDQtYzFkZGExYTg0NjBkLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZDc2MDFmYy1lMWNmLTQxOWEtOWZjNC1mMzVjN2QyMDJkMzAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83YjUwMjI0OF9jNjMwXzQzOTRfODAwZF85OTgzOWQ4NWI3OTAKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0+IiBgIHwKICAgICAgIHwgciB8IGAgIj0iIGAgfAogICAgICAgfCBpZCB8IGAgZTNjYTc0ZWFhMGM4MTk0ZCBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBibmxqaTJzMy9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVGFiMlNibWwgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5UYWIyU2JtbCAtY2kgIjEiIC1jZiAiMiIgLXJwIC1tcCAtZSAiX2UiIC1pICItLT4iIC1yICI8PT0+IiAtaW4gIi90bXAvdG1wYm5samkyczMvZmlsZXMvNC82L2QvZGF0YXNldF80NmQ2M2E5NC02ODZhLTQzODItODdhNS04Y2JkMDUwMjg3NWMuZGF0IiAtaWQgIk5BIiAtY3B0IC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wYm5samkyczMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMzFiY2ExNC0zYTg5LTQ2OTktODRjMS01MzI3NGZjODUxNGYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9jNzliMzMyY183NmU4XzQ1YTFfYjZjNF81OGU0YzI4NDlkZjUKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbXAgfCBgIHRydWUgYCB8CiAgICAgICB8IGUgfCBgICJfZSIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBlM2NhNzRlYWEwYzgxOTRkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcGJubGppMnMzL2ZpbGVzLzIvYi9lL2RhdGFzZXRfMmJlMWM5YzMtOGRiMi00NjRmLWJhN2UtNWUwMmYxY2VlNGM1LmRhdCIgLWlkICJteU1vZGVsIiAgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXBibmxqaTJzMy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE5Ny9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdjZjgyNWJhLTdmOWYtNDhiNi1iN2NjLTgyODNjZTljM2M0NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgbXlNb2RlbAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgY2E0NWFiY2EyM2M2Y2M1Njk0MmJkNTlhYjc3ZmU4YTkgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wYm5samkyczMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgo8L2RldGFpbHM+Cg=='));
+        target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iODMiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjgzIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjgzIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjgzIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjAgU2tpcHBlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1kYW5nZXIiIHN0eWxlPSJ3aWR0aDogMC4wJSIgYXJpYS12YWx1ZW5vdz0iMCIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iODMiIHRpdGxlPSIwIEZhaWxlZCBvciBFcnJvcmVkIj4KICA8L2Rpdj4KPC9kaXY+Cgp8IFRlc3QgU3RhdGUgfCBDb3VudCB8CnwgLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBUb3RhbCAgICAgIHwgODMgfAp8IFBhc3NlZCAgICAgfCA4MyB8CnwgRXJyb3IgICAgICB8IDAgfAp8IEZhaWx1cmUgICAgfCAwIHwKfCBTa2lwcGVkICAgIHwgMCB8CgoKPGRldGFpbHM+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9hLzEvZGF0YXNldF84YTFjMzZhMi00ODhlLTQ1MzItYjQ5Yi04NzAxMjgyODAzZGEuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iLzMvOS9kYXRhc2V0X2IzOWMwZjg1LTY1OTItNDBiOC05ZDIzLTExZjI4NTk1YTdlOS5kYXQiICAgICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzk5ZTdlYWI2LTQ2YWItNGIzNi1hMDAxLTQ5ZTM5M2I0MzQ2Zi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85OWU3ZWFiNi00NmFiLTRiMzYtYTAwMS00OWUzOTNiNDM0NmYuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81L2IvZS9kYXRhc2V0XzViZWI3YWQ5LTExNzMtNDdjZS04NjEzLTc3ZWJmMWU2OGY0Ni5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvNC8wL2RhdGFzZXRfODQwMWEzN2ItMWQzYy00MzNlLTlhZGQtYzFiOTNjZTFhMmNhLmRhdCIgLWtzICAgICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfN2Y1MWY3MDktMzZhOC00OTFhLTk5NGEtNjkwZjlkMTRlY2M3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdmNTFmNzA5LTM2YTgtNDkxYS05OTRhLTY5MGY5ZDE0ZWNjNy5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy82LzIvZGF0YXNldF9jNjI3ZmI4Zi02ZjI2LTRlZDUtODJkMC1iNDY2NWY4N2FhMmMuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9lLzIvZi9kYXRhc2V0X2UyZjA5MDNlLTAzMTQtNDFlNy1iMWEzLWY2ZjFjZDk4OWU2OS5kYXQiICAtbWMgICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzliMGJiOGQ4LWIwMTYtNGNlYy1hNDg4LTBiMThhZWZlMWJhOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzliMGJiOGQ4LWIwMTYtNGNlYy1hNDg4LTBiMThhZWZlMWJhOS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMy80LzYvZGF0YXNldF8zNDY0NWQ0MS0zOTVmLTQyYzgtYTRhNi02MDNiMjlkM2NhNTYuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2IvMC9kYXRhc2V0XzRiMDU4Y2FkLWQzNzMtNGViMi04NDcxLTYzZTE0MDU5OWRjYS5kYXQiICAgLW1lICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iMTVmMGU3YS02OGVhLTQ0ZmUtYWM2NS1mYTRhMDYwOTE3NDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgZWRnZXMuLi4gRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYjE1ZjBlN2EtNjhlYS00NGZlLWFjNjUtZmE0YTA2MDkxNzQxLmRhdCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81LzQvNy9kYXRhc2V0XzU0NzEyM2ZjLWE4ZDEtNDk1NS05YzFmLTNiYjE5NTRmZDdjNi5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzEvNS9jL2RhdGFzZXRfMTVjZmYxOGUtOGNkZS00ZTAwLTljYTktYWM3Zjc2Yzg0OTQ2LmRhdCIgICAgLXJpICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2FmM2FkMmIyLWRkMzktNDlhMC1hODFkLTdhMWU4YWY3ZGIxZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCiAgICAgIDE2IGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIFBpCiAgICAgIAlyZW1vdmluZyBnYWxhY3Rvc2UKICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyBIKwogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyAzLWtldG8tYmV0YS1ELWdhbGFjdG9zZQogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UtMy1waG9zcGhhdGUKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBQUGkKICAgICAgCXJlbW92aW5nIEgrCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hZjNhZDJiMi1kZDM5LTQ5YTAtYTgxZC03YTFlOGFmN2RiMWUuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzYpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMC80L2RhdGFzZXRfMDA0YmRiYmQtNGIxMy00MDdlLThkNDgtZWQwMGExNDFlYTc5LmRhdCIgLWcgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS9iLzUvZGF0YXNldF85YjVmZGI5Zi1lZWNiLTRiNWQtOWIwOC02NjlmNzRkMzE1MTEuZGF0IiAgICAgLXVuICAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDg0ZTNkYzMtMjQyZi00ZGE2LTkyMzAtZDBjMDFhODk4MTk0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9kODRlM2RjMy0yNDJmLTRkYTYtOTIzMC1kMGMwMWE4OTgxOTQuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2MvZS8yL2RhdGFzZXRfY2UyOTY2OWItN2UwZS00MzRiLTliMjgtMWZlM2YyNTVlZGIyLmRhdCIgLWcgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS8zLzgvZGF0YXNldF85Mzg1NzEzZi01NmU3LTQwMTItYTY2ZS01NGY2ZGEwOTNlNGYuZGF0IiAgICAgICAtYW0gICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjAzZGEzNGUtMzNjZC00YjE4LWI0NzItZGQ3YWVlYzM2YTBjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCB0cnVlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM4KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzQvMC9kYXRhc2V0Xzc0MDk1MDgyLTk2NDgtNDFlNi05Yzg4LWNlNDhlNDJhOGFmYS5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvOS9jL2RhdGFzZXRfZTljYTQ2Y2QtNWQ1YS00N2Y4LTk4YjAtZDJhYTU0ZTg0YmQ3LmRhdCIgICAgICAgICAtaSAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzI0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzJhYmNmYTAtZDIxNC00ZTU1LWJjNDktMTRlZGIxZmI3YzEwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNiB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83MmFiY2ZhMC1kMjE0LTRlNTUtYmM0OS0xNGVkYjFmYjdjMTAuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2hva2VQb2ludCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzkvYi9kYXRhc2V0X2E5YmFhZDgxLTNhYjMtNGQ4My05ZjgwLWJlMTI4NjI3OWFjNC5kYXQiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80NGMzMWZhYy1hNDFkLTRjZDAtOGE4OS00MjRlZGJhMWFmMzYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgY2hva2UgcG9pbnRzLi4uCiAgICAgIEV4cG9ydCByZXN1bHRzLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8wL2YvYy9kYXRhc2V0XzBmYzE5MTU0LWU2YzYtNDE2MS04NjM2LWYwM2ZmMTQ3MzA3Ny5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81L2QvMi9kYXRhc2V0XzVkMjdlNjk2LWQ1MzEtNGRjMC04OTg0LWVjMDc1MTk5MTUyZC5kYXQiIC1tYyAibm8iICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zYjA1ODUxMC0wOGEwLTQ5NDQtODNiMC02MzdmNjdlN2FkZGQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzNiMDU4NTEwLTA4YTAtNDk0NC04M2IwLTYzN2Y2N2U3YWRkZC5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iL2EvMi9kYXRhc2V0X2JhMmUzYjBkLWQ2MjEtNDkyZS05YTQ4LTI0NTM2NmRmNzI5ZS5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9lLzQvMy9kYXRhc2V0X2U0MzlkNjQwLWM0NDQtNGRkYi1iYzJmLWUwMjFlOTYzNDU5Ny5kYXQiIC1tYyAiYnlfaWQiICAtcmkgLWR3IC11biAtdHAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80ZWZmNzQ3Zi0yZGUxLTRhNTAtODc4My05YzUxMzY2YWVhMDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIFNldHRpbmcgZWRnZSB3ZWlnaHRzICh0YXJnZXQgZGVncmVlKS4uLgogICAgICAxMiBpc29sYXRlZCBub2RlcyByZW1vdmVkIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgICBEb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICAgRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob2dseWNlcm9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob18xX2lub3NpdG9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIE1fc19jCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBQMV9QNF9CaXNfNV9fYWRlbm9zeWxfX3RldHJhcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgUDFfUDVfQmlzXzVfX2FkZW5vc3lsX19wZW50YXBob3NwaGF0ZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9ldGhhbm9sYW1pbmUKICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvc2VyaW5lCiAgICAgIAlyZW1vdmluZyBEX0dseWNlcmFsZGVoeWRlCiAgICAgICBEb25lLgogICAgICBDb21wdXRlIHRyYW5zaXRpb24gbWF0cml4Li4uIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zMi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlZmY3NDdmLTJkZTEtNGE1MC04NzgzLTljNTEzNjZhZWEwMS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJieV9pZCIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCB0cnVlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy84LzcvZGF0YXNldF83ODc1NGE4MC1lZTMwLTQxYWQtOGJlMi01ZjZkYmNlZGQzOTMuZGF0IiAgICAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzFhMjA3N2UtNzNhZS00NDAwLTljYWQtNGZkMDQ5MDI5MjJhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcHJpbnRNZXRhYm9saXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UmVhY3Rpb25zIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludFBhdGh3YXlzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRHZW5lcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vVHlwZUNvbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8zLzEvZGF0YXNldF9iMzFjYmFmYi01ODdiLTRjYzItOWU4ZS01MmFhNzU2ZGU1NzguZGF0IiAtbSAtciAtYyAgLWcgLW50IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zOTUwZWUwYS0yN2Y1LTRlNjQtYTgyNy0zNzk3NTgzNDViYzYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwcmludE1ldGFib2xpdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFJlYWN0aW9ucyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50UGF0aHdheXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludEdlbmVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBub1R5cGVDb2wgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMC8xL2RhdGFzZXRfYjAxYmM2NGYtNWVlZi00YmIzLTk3ZWQtNGIwOWNiMjQyNGExLmRhdCIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTYyMWM5OWEtYzdlNS00MDM0LTg5MmEtZDkyNzlmN2I0N2UxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBzZWVkRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvMi8wL2RhdGFzZXRfMzIwMTk0YTEtZjU5OS00MDI4LWFiZTItOTA3M2JmMTAyYjdhLmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvOS84L2RhdGFzZXRfNTk4Yjg1OWItNTg5OC00M2E0LTlmNWItOWFlMzJjOTE1MDcwLmRhdCIgLWR3IC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82M2M3MjAyZS03NDNmLTRjMDctODA3OC04NzU0NThiYTRhNjQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNlZWRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIHRydWUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFBhdGh3YXlzIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFBhdGh3YXlzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMS8yL2RhdGFzZXRfMDEyNGYzOTYtMjhkYS00ZmJhLWIzNTgtOWQwNDQ4YmQ1ZWFjLmRhdCIgLXAgIkNpdHJpY19BY2lkX0N5Y2xlK0ZvbGF0ZV9NZXRhYm9saXNtK3RvdG8iIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZTJjMGEzNy0xNzc3LTQ0MmEtYWJmMS00NzRjNTc3YjBjZDkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIG5ldHdvcmsgZXhwb3J0ZWQuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gb3JpZ2luYWwgbmV0d29yazogMTE1OAogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiAxMTA3CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiA1NzIKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IENpdHJpY19BY2lkX0N5Y2xlIChDaXRyaWNfQWNpZF9DeWNsZSk6IDExCiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMjYKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMTgKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IEZvbGF0ZV9NZXRhYm9saXNtIChGb2xhdGVfTWV0YWJvbGlzbSk6IDYKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiAxNgogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiA4CiAgICAgIEVycm9yOiBQYXRod2F5IHRvdG8gbm90IGZvdW5kIGluIG5ldHdvcmssIHBsZWFzZSBjaGVjayBzYm1sIGZpbGUuCiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gbmV0d29yazogMTcKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gbmV0d29yazogMzUKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIG5ldHdvcms6IDI1CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwYXRod2F5SWQgfCBgICJDaXRyaWNfQWNpZF9DeWNsZStGb2xhdGVfTWV0YWJvbGlzbSt0b3RvIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U2JtbEFubm90IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFNibWxBbm5vdCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81LzMvZi9kYXRhc2V0XzUzZjlhY2EzLTIwZGYtNDhjNS05ZGM4LWQ1OWZlYjI3NjIxNS5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2JhYTRiZjQ3LWQ0N2QtNDE4ZC1hOTUwLTZkMjM1N2MwNjExNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNraXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzIvNS9hL2RhdGFzZXRfMjVhNDk2OTItNjA1Zi00NWMxLTk2MjYtZDM5ZDA1ZTlhOTA2LmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgIC1za2lwIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83NjQyMWNjMC1lMjVjLTRlNGItYTI2Yi00M2E4MmYxNDI5ZGEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIGFubm90YXRpb25zIGZvdW5kIGZvciAxMTAvMTExIG1ldGFib2xpdGVzCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBleHBvcnQgfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgZGIgfCBgICJtZXRhbmV0eC5jaGVtaWNhbCIgYCB8CiAgICAgICB8IHVuaXEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBza2lwIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2MvNS82L2RhdGFzZXRfYzU2NmZiZDktZWVlMS00ZDIzLWI3ZmUtODI5MmI2YWY3ODcyLmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgLXVuaXEgLXNraXAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzYzOTg3ZjVmLWY3ZDMtNDk5ZS1iMzBhLThlMjJmOWVlODY5NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgc2tpcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViQmlwTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1YkJpcE5ldHdvcmsgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMC83LzcvZGF0YXNldF8wNzcwYmEwZC1jZjcwLTQzOWYtYjVhMy01ZTE2YzhjMGMxZjguZGF0IiAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzAvZC9kYXRhc2V0XzIwZDNkYjI4LTJjMmEtNDk0My1hNWYwLTRhMjIxMGZlMjBhMy5kYXQiIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMi80L2RhdGFzZXRfYjI0OGExNTktZWI3YS00NjE5LWJkZmUtOTc5OTQyNTkzMjJhLmRhdCIgICAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy8wLzQvZGF0YXNldF9jMDQ1ODY4NC0zMzA4LTRjMDMtYmM0Mi03YjY0MzI4NzhhZGMuZGF0IiAtayAiMSIgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNTQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84ZmM2MTVlZS1lZGEyLTQ0ZTEtYmU0ZS03MDIzOTkwZmU2N2YuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgaW1wb3J0aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIGV4dHJhY3Rpbmcgc291cmNlcyBhbmQgdGFyZ2V0cwoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzU0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOGZjNjE1ZWUtZWRhMi00NGUxLWJlNGUtNzAyMzk5MGZlNjdmLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBibGtkUmVhY3Rpb25GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1Yk5ldHdvcmsgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZC81LzgvZGF0YXNldF9kNTg0NjY5Ny1jZjViLTQ2ZjktOTc0ZS1mNzRmOTg0ZWM0YmUuZGF0IiAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iLzgvYy9kYXRhc2V0X2I4YzRkNDIzLTJiZGYtNGUzNy1iZjI4LTA5NWI5ZjgwY2E1Yi5kYXQiIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvMC80L2RhdGFzZXRfMzA0Y2RiYTktMGYyYy00NDE0LTgzOTEtN2MwNmZjOTY3NDlhLmRhdCIgICAgIC1rICIxIiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2M3MTBkODcwLTZhZGQtNGIyNS1hN2M3LTUwZjI4MWNmNTVmYi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2M3MTBkODcwLTZhZGQtNGIyNS1hN2M3LTUwZjI4MWNmNTVmYi5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNoZW1pY2FsU2ltIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvOS80L2RhdGFzZXRfODk0ZDZhNDktMWU4NS00YmRkLTg4MWMtNmFmZDMzNmYxYjNkLmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi9mL2QvZGF0YXNldF9iZmQ4ODMzZS1mYWJjLTQ5YmMtOWVjMy03NzAzNDM4MDY1ZmEuZGF0IiAgIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvNC81L2RhdGFzZXRfOTQ1MTZmZTgtYWE0ZS00YzhlLTliYzAtYWUyZGYwY2QyM2NmLmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvNC9mL2RhdGFzZXRfMzRmZjgxODAtMzcyNC00N2JlLTg1ODgtZWQ1MDkyMTc5M2JjLmRhdCIgLWsgIjEiICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzYzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTk1MWVhNzAtNzJmMC00MTlkLTg0NmMtMDU4NDA2M2IzZTkzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIGltcG9ydGluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICAwIHNpZGUgY29tcG91bmRzIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzE5NTFlYTcwLTcyZjAtNDE5ZC04NDZjLTA1ODQwNjNiM2U5My5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgckV4Y2x1ZGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0ZiY1RvTm90ZXMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5GYmNUb05vdGVzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvMy8zL2RhdGFzZXRfNTMzNjI5MzEtOGFhZS00NGIwLWFkNDMtNDkwNmM0NzU0ZjUwLmRhdCIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Q3NDVlNjg1LTE0MTYtNDk5My1iMDg0LTAxYTQ5YmIyNjAwYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgaU1MMTUxNQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBpTUwxNTE1CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGhhc1Byb3BlcnR5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaGFzUHJvcGVydHksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRHZW5lc0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRHZW5lc0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNC85LzIvZGF0YXNldF80OTJlYjhmZC03YWU1LTQyMDktYTI4OS04YzEwOWI0YzVkMDIuZGF0IiAtciAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy84LzcvNS9kYXRhc2V0Xzg3NTU5ZTJlLTcxZDAtNDdhYS1hYmY0LTEwYjE1NDVkMGRlMC5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzY4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNTgxY2JhNTItYjQ3Yi00YzM1LThlNzYtOWI5YmQ2NWYyYzJkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0TW9kZWxQcm90ZW9tZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBiaWdnLkdldE1vZGVsUHJvdGVvbWUgLW0gImVfY29saV9jb3JlIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzY5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjdjN2ZjYjctYjQ2YS00N2Q0LTg5OTktZWU0YjMxODdkNDJlLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1vZGVsSWQgfCBgICJlX2NvbGlfY29yZSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgImRhdGEiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvMS9hL2RhdGFzZXRfNjFhOGZkMTctNmU1OS00MDFhLWFmNTktZTA2YjA2MWMxODEyLmRhdCIgLXIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy9lL2IvZGF0YXNldF9jZWIxODIwMS1jYjBjLTQ2MjctYjdjMC00OGY0MTE2MzFmYWYuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzcyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOTMwNjQ2NmMtNWEzYS00ZmE4LTgyYjYtYzNhNjAzMWI4NTM5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvMi83L2RhdGFzZXRfODI3ZWFiMDMtYjc4MS00MWE3LTkzNzItMmVhNjdlNGY2MmZmLmRhdCIgLXIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9iL2UvZGF0YXNldF84YmUxZWRmZi1mNzc3LTQ5MmQtYTVhZC0wYzRhNjg5MWNkNDcuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgLXMgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMDgzMDIwMC1kYzNlLTQ5MjQtOWM3NS03MzIwOWRjYzVkMTQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFByb2R1Y3RzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xL2EvMi9kYXRhc2V0XzFhMmIxMDUzLTQzMDYtNGVmOC05NzQzLWRjODg1OGI2Yzc3YS5kYXQiIC1yICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvZC81L2RhdGFzZXRfYWQ1MTEzNGMtODA0My00YWVhLTk4ZjEtMGM3ZmU5NDgxYTBkLmRhdCIgLXNlcCAiCSIgIC1jb2wgIjEiICAtcCAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzc4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjhmZTM3NGYtMzdmOC00OTUwLWJjZGItYWFjNWM0NjdjZDE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTG9hZFBvaW50IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Mb2FkUG9pbnQgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS8xLzAvZGF0YXNldF81MTA5M2VjZC1mNDYwLTQxNjktYWM3Mi1lMTEwODEwNWJhOTcuZGF0IiAtayAiMSIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ1NmZiZDRiLTA3NjItNGEyOS05MDUyLTc2MWJjMDVkZTE2OS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgbG9hZCBwb2ludHMuLi4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9NZXRhYm9SYW5rIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5NZXRhYm9SYW5rIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvOS85L2RhdGFzZXRfNjk5NzVlOTUtYTUyMC00ZjZhLWFlYWMtMTBjZTQ4MTlhMjM1LmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS8xLzYvZGF0YXNldF8xMTZiZGZkZS0xMjdjLTQ1ZWQtYTU5OS02NzFkMzMzMDAyNWMuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS9jLzQvZGF0YXNldF8xYzQzYWEwOS1kMGU1LTQyOGUtYWE0Yy1lMWE0ODljYWJkOTIuZGF0IiAtbWF4ICIxNTAwMCIgLXQgIjAuMDAxIiAtZCAiMC44NSIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84NC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2IwOWEyNjUwLTJjMzItNDg4NS04ZjQ5LTU4ZDU1MWM4NzlhOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIG1vZGVsIGltcG9ydGVkLgogICAgICBjb21wb3VuZCBncmFwaCBjcmVhdGVkLgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICAyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCiAgICAgIHdlaWdodHMgY29tcHV0ZWQuCiAgICAgIHJldmVyc2UgZ3JhcGggY3JlYXRlZC4KICAgICAgdHJhbnNpdGlvbiBwcm9iYWJpbGl0aWVzIGNvbXB1dGVkCiAgICAgIHRyYW5zaXRpb24gcHJvYmFiaWxpdGllcyBjb21wdXRlZCAocmV2ZXJzZSBncmFwaCkKICAgICAgc2VlZHMgZmlsZSBpbXBvcnRlZAogICAgICAzIHNlZWRzCiAgICAgIGdsb2JhbCBwYWdlUmFuayBjb21wdXRlZAogICAgICBnbG9iYWwgY2hlaVJhbmsgY29tcHV0ZWQKICAgICAgcGFnZVJhbmsgY29tcHV0ZWQKICAgICAgY2hlaVJhbmsgY29tcHV0ZWQKICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGVkZ2VXZWlnaHRzRmlsZVBhdGhzIHwgYCBOb25lIGAgfAogICAgICAgfCBtYXhOYk9mSXRlciB8IGAgIjE1MDAwIiBgIHwKICAgICAgIHwgdG9sZXJhbmNlIHwgYCAiMC4wMDEiIGAgfAogICAgICAgfCBkYW1waW5nRmFjdG9yIHwgYCAiMC44NSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTmV0d29ya1N1bW1hcnkgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLk5ldHdvcmtTdW1tYXJ5IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvMC82L2RhdGFzZXRfODA2OTkxNjEtYWQ5Mi00MzVlLWEwZDQtNWZjZWE2YmRhZWE2LmRhdCIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDU5ZGI4YmMtZjQ3ZS00MmZhLTkzM2MtZWZmNDQ0MmE2ZmI3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIHBlcmZvcm0gYmFzaWMgYW5hbHlzaXMuLi4KICAgICAgZXh0cmFjdCBjb25uZWN0ZWQgY29tcG9uZW50Li4uCiAgICAgIENvbXB1dGUgZGVuc2l0eS4uLgogICAgICBDb21wdXRlIGxvY2FsIGNsdXN0ZXJpbmcgY29lZmZpY2llbnRzLi4uCiAgICAgIENvbXB1dGUgZGVncmVlIHN0YXRpc3RpY3MuLi4KICAgICAgQ29tcHV0ZSBkaXN0YW5jZXMuLi4KICAgICAgQ29tcHV0ZSBkaXN0YW5jZXMgc3RhdGlzdGljcy4uLgogICAgICBDb21wdXRlIGNlbnRyYWxpdHkuLi4KICAgICAgCUNsb3NlbmVzcyBkb25lLgogICAgICBEb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgc2tpcGRpc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfT1JBcGF0aHdheUVucmljaG1lbnQgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbWFwcGluZy5PUkFwYXRod2F5RW5yaWNobWVudCAtdGggIjAuMCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS85L2YvZGF0YXNldF9hOWYyYzUwMi1jZWYzLTQ5Y2EtYTVmNi1kZGQ1MDIwOGQ3ODAuZGF0IiAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy85L2MvNS9kYXRhc2V0XzljNTdjNTljLTkxNWYtNDJhOC04Yjg5LTBhYjBjNjIxMzUyNi5kYXQiIC1jICJCZW5qYW1pbmlIb2NoYmVyZyIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzI5ZDQ2ZWUxLTc0ZGQtNDYzMy1hNjYzLTI2OWIyZWFiMWNhYi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEltcG9ydCBkYXRhLi4uCiAgICAgIDMgY29tcG91bmRzIGltcG9ydGVkLgogICAgICAgRG9uZS4KICAgICAgUGVyZm9ybSBQYXRod2F5IEVucmljaG1lbnQuLi4gRG9uZS4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHRoIHwgYCAiMC4wIiBgIHwKICAgICAgIHwgY29yciB8IGAgIkJlbmphbWluaUhvY2hiZXJnIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9PUkFwYXRod2F5RW5yaWNobWVudCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBtYXBwaW5nLk9SQXBhdGh3YXlFbnJpY2htZW50IC10aCAiMC4wMDUiIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvZi85L2RhdGFzZXRfOWY5ZDNmMjUtYjkzMy00MTRhLTlmZGMtYmU0NGMzMTZmNGIxLmRhdCIgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy9lL2YvZGF0YXNldF83ZWZhZGJmNC01NDc4LTRhNjAtYjU2YS03ZGJiMGM2ODJlZWEuZGF0IiAtYyAiSG9sbUJvbmZlcnJvbmkiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81MmIwY2NmZi0wNjhjLTRjMWUtOWYwNS01NDY1ZGE4ZmJkZDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBJbXBvcnQgZGF0YS4uLgogICAgICAzIGNvbXBvdW5kcyBpbXBvcnRlZC4KICAgICAgIERvbmUuCiAgICAgIFBlcmZvcm0gUGF0aHdheSBFbnJpY2htZW50Li4uIERvbmUuCiAgICAgIFNlbGVjdCBzaWduaWZpY2FudCBwYXRod2F5cy4uLgogICAgICAJMiBzaWduaWZpY2FudCBwYXRod2F5cyBmb3VuZC4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydCByZXN1bHRzLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCB0aCB8IGAgIjAuMDA1IiBgIHwKICAgICAgIHwgY29yciB8IGAgIkhvbG1Cb25mZXJyb25pIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9QcmVjdXJzb3JOZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5QcmVjdXJzb3JOZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvMC85L2RhdGFzZXRfZDA5MDVmYWQtMzY2OC00MDI3LTk5ZGUtNGM4YWMxYjIwYTgxLmRhdCIgLXQgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS82LzAvZGF0YXNldF9hNjAyMmI1My0xZTgxLTRkMDctYmVjYS1jZTg0MzI0MWM2ODcuZGF0IiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E0ZDk5MjZjLTBlNTEtNDVjOC1hMGE4LWIzZjI5ZjNhMDg1OS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzk1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTRkOTkyNmMtMGU1MS00NWM4LWEwYTgtYjNmMjlmM2EwODU5LmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcmVhY3Rpb25Ub0lnbm9yZUZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1JlYWN0aW9uRGlzdGFuY2VNYXRyaXggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS84L2QvZGF0YXNldF81OGQ1ZjhkMS0yMzE2LTQ3OWYtODM0NS0wYTY1MDg2MDQ4Y2YuZGF0IiAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83ZTcwODJkOC03ZjAyLTQ3MWYtYWJiYS0yZDA0YjFjYjZmNWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvMS8wL2RhdGFzZXRfOTEwNTY0ZjMtYzNhOS00NGNiLTg2M2EtYTY0NTNiZWRlNjlhLmRhdCIgIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hYTBkMWYzNC1iMjM3LTQ0ZjMtOTc4ZC1hM2QxMjkwMDllZmYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1JlYWN0aW9uRGlzdGFuY2VNYXRyaXggKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy8wL2QvZGF0YXNldF83MGQ4NTVlNi1iZWE5LTQ1N2MtOTFjNS1jNGY5MGI3NWI3ZDMuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS85L2UvZGF0YXNldF8xOWU1NjYyZS1lYTVmLTQ5MmUtYTg2OS0yOGQ2NDI1ZjNjY2EuZGF0IiAgLXUgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMDIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84ZDBjYWMwMS01N2I3LTRlMDgtOTBkYi01MjAyMjVmYTJkMTguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyB0byBpZ25vcmUgZHVyaW5nIGdyYXBoIGJ1aWxkCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCByRXhjbHVkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICM0KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvZC8xL2RhdGFzZXRfYmQxMmQ4ODMtZWM1Ni00Mzg2LWFhYTgtNTM5Njk0MTQ4MWZhLmRhdCIgIC1yZSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zL2MvNC9kYXRhc2V0XzNjNDJmZDA3LTZjYjctNDllNi1iZjMyLWZjMDY2ZjRmMmQxOS5kYXQiIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMjhhNDM2ODEtYTJkNS00ZGUyLTkxOWMtZTljOTRiY2U5MTljLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIHJlbW92aW5nIHJlYWN0aW9ucyB0byBleGNsdWRlLi4uCiAgICAgIDEgcmVhY3Rpb25zIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzIvOS81L2RhdGFzZXRfMjk1Mjg1MjAtYWMyZS00NWY1LThhODYtMTViZmJmZmNjYjc5LmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvZC85L2RhdGFzZXRfM2Q5NjQ1NzYtM2NlYi00YzIxLWEyMWEtNmJhNDFjMTU1YTFlLmRhdCIgIC1yZSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8wLzEvNC9kYXRhc2V0XzAxNDA5M2RjLTYxZDEtNDZhNy1iODc5LTUyNzg5OGJmYWZmOC5kYXQiIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTQ4NTgxYWYtNDJmZi00ZmI0LWEzNjItN2ZiNzY0ZGIyNWNkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDEgc2lkZSBjb21wb3VuZHMgdG8gaWdub3JlIGR1cmluZyBncmFwaCBidWlsZAogICAgICByZW1vdmluZyByZWFjdGlvbnMgdG8gZXhjbHVkZS4uLgogICAgICAxIHJlYWN0aW9ucyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJ4bkZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAoVGVzdCAjNik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zL2UvYi9kYXRhc2V0XzNlYjkyYjMxLThlZDgtNDA5Ny1iMzUwLTc4NDFkMDU0M2ExMC5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80LzMvMi9kYXRhc2V0XzQzMmRiYWVjLWQ3OWItNDRlOS05ZDYxLWIyNDAyZDdkMGQxYi5kYXQiICAtcmUgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZC9lL2YvZGF0YXNldF9kZWYyMGI3OC0xODNkLTQ2N2ItYWY0My0yMTUxZDJmNGExZjEuZGF0IiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wMDEyN2M4OS1hN2M0LTQ5MWUtYTgyZi02Y2EwMGIyZGQ1OWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyB0byBpZ25vcmUgZHVyaW5nIGdyYXBoIGJ1aWxkCiAgICAgIHJlbW92aW5nIHJlYWN0aW9ucyB0byBleGNsdWRlLi4uCiAgICAgIDEgcmVhY3Rpb25zIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU0JNTHdpemFyZCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNCTUx3aXphcmQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy85L2MvZGF0YXNldF83OWM1ZGI3NS04Yzc4LTRiOGEtOGFjMi0xNGFiYzU4NmUzYjAuZGF0IiAtcmljIC1yMCAtbWMgImJ5X2lkIiAtcmRyIC1yRVggInMiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTE1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmVlOWZhNjQtMjI3Zi00Yzg3LWFkNmUtZjVjNzU2N2E2YWYyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMzIyZGZjMzdfNTI1MF80MDdjX2EzNDBfOTZjNmExODc3YjUzCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCgoKICAgICAgCWNvbXBhcnRtZW50czoJNQogICAgICAJbWV0YWJvbGl0ZXM6CTExMQogICAgICAJcmVhY3Rpb25zOgk3NQogICAgICAJZW56eW1lczoJODUKICAgICAgCWdlbmVzOgk4NgogICAgICAJcHJvdGVpbjoJODYKICAgICAgCXBhdGh3YXk6CTMKCgogICAgICByZW1vdmluZyByZWFjdGlvbiB3aXRoIGNsb3NlZCBmbHV4IGJvdW5kLi4uCiAgICAgIDAgImNsb3NlZCIgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBleHRlcm5hbCBjb21wYXJ0bWVudC4uLgogICAgICAxMyBleHRlcm5hbCBzcGVjaWVzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBpc29sYXRlZCBjb21wb3VuZHMuLi4KICAgICAgMCBpc29sYXRlZCBjb21wb3VuZHMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIHJlbW92aW5nIGR1cGxpY2F0ZWQgcmVhY3Rpb25zLi4uCiAgICAgIDEgZHVwbGljYXRlZCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCgoKICAgICAgCWNvbXBhcnRtZW50czoJMQogICAgICAJbWV0YWJvbGl0ZXM6CTQ5CiAgICAgIAlyZWFjdGlvbnM6CTM0CiAgICAgIAllbnp5bWVzOgk4NQogICAgICAJZ2VuZXM6CTg2CiAgICAgIAlwcm90ZWluOgk4NgogICAgICAJcGF0aHdheToJMwoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgaW5wdXRSZWFjdGlvbnMgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgInMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NCTUx3aXphcmQgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TQk1Md2l6YXJkIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMC8wL2RhdGFzZXRfYjAwMjBmYjMtNzdjYy00ZjA4LTgyNzYtZDM0MDNkNTE3ZWZmLmRhdCIgLXJjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2YvNS8zL2RhdGFzZXRfZjUzZTdhZWUtODA0Yi00MDRjLWFkODUtMjA3ZjYxNGMzMmY5LmRhdCIgLXJpYyAtcnIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS80L2EvZGF0YXNldF85NGFiZmFmNi1jYWIyLTQ1MTItOTdjNC00Yzc2YzA0ZWY2YzguZGF0IiAtcjAgLW1jICJubyIgLXJkciAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U1OTgzNjgyLTUzN2YtNDBiZC1iZTg5LTk4ODFjYzZjODg0Yy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICAJY29tcGFydG1lbnRzOgkzCiAgICAgIAltZXRhYm9saXRlczoJMTEwNwogICAgICAJcmVhY3Rpb25zOgkxMTU4CiAgICAgIAllbnp5bWVzOgk1MTQKICAgICAgCWdlbmVzOgk1NzIKICAgICAgCXByb3RlaW46CTU3MgogICAgICAJcGF0aHdheToJNDgKCgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IHNpZGUgY29tcG91bmRzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBzaWRlIHJlYWN0aW9uLi4uCiAgICAgIDIgaXJyZWxldmFudCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIHJlYWN0aW9uIHdpdGggY2xvc2VkIGZsdXggYm91bmQuLi4KICAgICAgMCAiY2xvc2VkIiByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIGlzb2xhdGVkIGNvbXBvdW5kcy4uLgogICAgICAwIGlzb2xhdGVkIGNvbXBvdW5kcyByZW1vdmVkIGZyb20gbmV0d29yay4KICAgICAgcmVtb3ZpbmcgZHVwbGljYXRlZCByZWFjdGlvbnMuLi4KICAgICAgMCBkdXBsaWNhdGVkIHJlYWN0aW9ucyByZW1vdmVkIGZyb20gbmV0d29yay4KCgogICAgICAJY29tcGFydG1lbnRzOgkzCiAgICAgIAltZXRhYm9saXRlczoJMTEwMQogICAgICAJcmVhY3Rpb25zOgkxMTUyCiAgICAgIAllbnp5bWVzOgk1MTQKICAgICAgCWdlbmVzOgk1NzIKICAgICAgCXByb3RlaW46CTU3MgogICAgICAJcGF0aHdheToJNDgKCgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVOb0ZsdXggfCBgIHRydWUgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgcmVtb3ZlRHVwbGljYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZXhjaGFuZ2VDb21wVG9SZW1vdmUgfCBgICIiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyR3JhcGggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvYy82L2RhdGFzZXRfOWM2MjFiMGYtNDY0Mi00MzA3LWE0MzEtYmQwZmVkYWNiNDExLmRhdCIgIC1jICAgLWdtbCAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzMyZGFlMDBmLTg5ZjgtNDA1OS04YzYyLWJkYjUyMmFlZDI1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zMmRhZTAwZi04OWY4LTQwNTktOGM2Mi1iZGI1MjJhZWQyNWEuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCB0YWIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBnbWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyR3JhcGggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNC85LzMvZGF0YXNldF80OTNiY2ZkMS02ZGZmLTRkNGUtOWFlOC1kZGZlN2VjMDRlMjYuZGF0IiAtYiAgICAtZ21sIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfN2ZmYTIwMzUtMjRhZS00YmViLTljZjUtZjRkOTJjNDMzZjE2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdmZmEyMDM1LTI0YWUtNGJlYi05Y2Y1LWY0ZDkyYzQzM2YxNi5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGJpcGFydGl0ZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHRhYiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGdtbCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkdyYXBoIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJHcmFwaCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2MvNy9kYXRhc2V0X2RjNzQ3ZGUwLTVhZTMtNGUxYS04NDNiLWE5NDY2N2Y3MmQwZi5kYXQiICAgLXIgIC1nbWwgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMTA0MjhjYy01NGEyLTQ4YjEtOGRhYi03ZWZiOTM4ZjU3MGUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjEwNDI4Y2MtNTRhMi00OGIxLThkYWItN2VmYjkzOGY1NzBlLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgYmlwYXJ0aXRlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvbiB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdGFiIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZ21sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyVGFiIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJUYWIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83L2YvNy9kYXRhc2V0XzdmN2QzZjM3LWU1ZWUtNGQ3Yy1hMjMxLWIxZDhmOTk2NmU5My5kYXQiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82MTI0MTY2Yi1mZWY0LTQxMWQtOTU0Zi00ZTA0OTRmYmUwYWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJUYWIgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMlRhYiAtaSAiLT4iIC1yICI9IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNi9iLzUvZGF0YXNldF82YjUxOTI3Yy0wN2ViLTRmM2QtOGNiMy02YzY2OWI5MjgxMWMuZGF0IiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZGEyMTZiYjUtYWFhYS00ZjkwLTlhYzAtM2U3NDRmMjFhZDUwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzQvOC9iL2RhdGFzZXRfNDhiYTc0OGItYjI5MS00MWJlLWIxZTgtMWE1OTM3MTRjN2RkLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2YvMi9kYXRhc2V0X2RmMjJkNGNkLTNiMTQtNDg1OS04ZWEwLWVlNmYzZTU3MmNkYy5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTMyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOWMxY2U4MjctYWQwYy00NGVlLTg1MDMtMDBlMDVkYzhiZDVjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfZTExNDgxODJfOWIyY180OTc1Xzg0YzhfNjFlNTUwOTRhZDBiCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZS83L2IvZGF0YXNldF9lN2IxYjAxYy1jZDU4LTQxYzUtYTQxYy1jZjkyMzQ4YTRkM2EuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzcvYS8yL2RhdGFzZXRfN2EyNTYxNmEtNGQwMC00ODkyLWJjZjctMjk5ZGVhNzVjODU5LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zZjRhMWQ1NC1mMWNmLTQ4MzgtYmQ2Zi1lYmViOGM3NTcxMjYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMSBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF8xMzE2NmMzNF8yNGE0XzQyZTNfYjM3OF9lM2RlNzhkN2YxZGYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIxIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hL2QvYS9kYXRhc2V0X2FkYThiYmZiLTE0YjgtNDkxNC1hNTE4LTM5OTAyMzg1YzFlZS5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9lLzcvZGF0YXNldF84ZTcyYWJhOS04MjNmLTQyMzctYWY0Yy1hNjkyNGYwNDY3OTEuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEzOC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzJjZmUyYzVhLTlmOTItNDRjNy1iYTIzLTBiMjRmMjg3NTcwMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAxIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzY2NDY1ODAzX2VhOTlfNGUzMl85ZWU4XzQ3OWI2MmE1YWZjZgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjEiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvYS9hL2RhdGFzZXRfZGFhNGE0YzEtNjI4YS00YzI5LTgzZjMtYTUwZjg4NGY4ZDI4LmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzQvYS9kYXRhc2V0X2E0YTNkYzM0LWY2ZTQtNDdmNS05Y2M1LTg2ZTlkZjRhYTdkNi5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDU2ZWU3NGQtNzVhZC00MjEwLWE4YWYtOWI1MGY5NTczYTYwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMTVlZTU1ZTNfNDc2ZV80MWVhX2IxY2JfMmYwMmIyNTQ1NzU2CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgLXAgLXMgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvMC85L2RhdGFzZXRfNTA5MGM0YzctMWNmYy00YjA3LWI3OTMtMDUwNGJmODNmMDRhLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzkvZS9kYXRhc2V0XzI5ZWMxZGVhLTYxZTAtNDQ0OS05NDNmLWIzNDM2MGEzN2VjNC5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYmE3MmFiN2EtZWVmMi00Mzc4LTkyOTQtNThiZGYzNjBlODk0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMyBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIHRydWUgYCB8CiAgICAgICB8IHMgfCBgIHRydWUgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0RWNzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0RWNzRnJvbUZpbGUgLWNlYyAiMiIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMi9kL2RhdGFzZXRfYjJkOWRjMDktMjRhYS00ZWEyLTk5MmUtNWQwYjYzNzcwNmUyLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iL2YvZi9kYXRhc2V0X2JmZmNmOTk1LWU0YmMtNGU3Mi05NTAwLWQxNDFjYjg5NGQyOS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOTE1MmQyMDItMzgzZC00NzRjLThkOTItYTg1ZmVmODg3YzU4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgcmVhY3Rpb25zIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzA4NGI4YzcxXzk1ZTBfNDUyYl85ZTdhXzM5OWFhZGM4YWY3YQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xlYyB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRFY3NGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRFY3NGcm9tRmlsZSAtY2VjICIyIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC83LzgvZGF0YXNldF84NzgwMDBmZS1mYzQzLTQ0ZmYtYjYxNi1lNmU1Yjc2OTdiZGQuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvYS8zL2RhdGFzZXRfNmEzNGJiNTYtNDgzZC00OTYyLWI0YzQtNmUzOTNhYzU5YWE0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZjc1MzQ5Ny1iNDBiLTRmZWEtYTJlMS00YzQyYzE3ZjhkMTAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDEKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgKioqKioqKioKICAgICAgW1dhcm5pbmddQXR0cmlidXRlICIxLjIuMy40LjUiIG5vdCB3ZWxsIGZvcm1hdHRlZAogICAgICAqKioqKioqKgogICAgICBFcnJvciBpbiBzZXR0aW5nIEVDcwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZWMgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRGb3JtdWxhc0Zyb21GaWxlIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zLzgvYS9kYXRhc2V0XzM4YWIxNDkwLTIwYzctNGUyOS1hZGRiLTE2YTg1M2Y5NmE1Yy5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy9kLzYvZGF0YXNldF9jZDYyZmI5OC02ZmFkLTRiNTEtOGZjZC1jYzEyYWMzODdhZTMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE1My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E0MTA4ZWVhLWVlM2MtNGE4MS1iYjE3LTdkZmRiNzZmZTgwOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2M2ZTRkNGIyXzQzNzBfNDg5NV85MmNmXzliNzBmZTFjMzI0OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRGb3JtdWxhc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldEZvcm11bGFzRnJvbUZpbGUgLWNmICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvNS82L2RhdGFzZXRfYjU2OWIxODQtOTdmNS00ZTFkLThhMDgtN2M0NDQ4OWQxMDg0LmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2IvOC9kYXRhc2V0X2RiODk4MDk2LWQ2MjYtNDhjNC04ZTA3LWYzYTExOTU2Y2VhNS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTU2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNWFiYTUwMmUtYjgzZC00ZWVmLTliM2QtZjAwNDc3NmIyNmFiLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAxCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgICoqKioqKioqCiAgICAgIFtXYXJuaW5nXUF0dHJpYnV0ZSAiMTJDSDRPIiBub3Qgd2VsbCBmb3JtYXR0ZWQKICAgICAgKioqKioqKioKICAgICAgRXJyb3IgaW4gU2JtbFNldEZvcm11bGEKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEdwcnNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRHcHJzRnJvbUZpbGUgLWNncHIgIjIiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzIvNy9kYXRhc2V0XzcyNzdhYWY5LWE4NjMtNDUxYi1iNDdlLTRmMWNlYjEzNzI5ZC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wLzUvZGF0YXNldF84MDViZTJmYS1jNTA0LTQ2OTktODkyMC04OTVhMWE1NTk1MjkuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE1OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdlMGVmZWQ4LTFkMTItNGY3MS1hZmI4LTU5MGE0ZjZhN2RjNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGdlbmUgYXNzb2NpYXRpb25zIGNyZWF0ZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80MTllNWEyMF9hYmM5XzQzNWZfOTBjMl9iZmRkZTBhYmRhNjUKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZ3ByIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kLzgvMC9kYXRhc2V0X2Q4MDkzZjVmLWNkMzYtNDcwYy1hNDg2LTNjYjgxOTRjMmFkZS5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy80L2MvZGF0YXNldF9jNGM1N2IwMy1iZTBhLTRmMTgtYTI2MC02ZWVmMmQwZTVkYjYuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE2Mi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2YxMzliYjdkLTZlZjQtNDdhNy1hMzYwLTY4MjQ2NzNkZmNkNS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzgwNzE0YzBiXzY4YWVfNDMyNF9iZDAwXzJlZjliNDYxZTEyMQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIlJFQUNUSU9OIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9jLzIvZGF0YXNldF84YzJkYTE1Mi0wYWJmLTQ2M2UtYTMwZC02NmZiNzQ1YTYxNmUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvNS8xL2RhdGFzZXRfYTUxMDFhOTItOTA5ZC00OTUzLTg5NWYtM2VkZTQ3MTk0OGMzLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mM2YyYTAwYy1mOTdmLTQzY2UtODlhZC0wMjYzNTk3N2YwNzUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83YjZjYmZhYl80MjhiXzQyNzVfOGQ0NF83ZDZhMjI0YWY5ZTMKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJSRUFDVElPTiIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0SWRzRnJvbUZpbGUgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0SWRzRnJvbUZpbGUgLWNuZXcgIjIiIC1jaSAiMSIgICAtbyAiUEFUSFdBWSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvOC8zL2RhdGFzZXRfMDgzYWU0MmUtMzA3Yy00ODM1LTk4YWItYjUxZTkxODlmZDEzLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2MvNC9kYXRhc2V0XzRjNDA1MTE2LWMwNDItNDY1MS1hNDhiLTA4OTVkN2RhM2JlMS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTY4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTRlYzU2ZGUtNDhjOS00MTYxLWExNDUtOTY5NzMyMmJiOGNkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJQQVRIV0FZIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJHRU5FIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS81LzAvZGF0YXNldF85NTBhMDQ2Ni04ZGEyLTQzOGQtYjY1MS04ZWFmZTY1ZDJkMGUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMi82L2RhdGFzZXRfMDI2MDg2MzItNDc5OS00OGRkLTgyODEtMmE2NDk3NDQ1ZWQzLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wOWQ4MGU3Ny01ODQzLTQ0N2MtYTlhYi02Mjg2MWEyOTlkMjguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIkNPTVBBUlRNRU5UIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS85L2EvZGF0YXNldF9hOWE1N2IyZi0yYmVjLTRiYmUtODc1YS03ZWNmOTVlOTUyYzQuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvZC81L2RhdGFzZXRfMGQ1MmM2ZjYtMzM0Mi00YmE0LTlhMjctNjI0YzdmOTUxODFkLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZTg2MGZlNi0yN2QzLTQ4NzEtOTAwYy1jNDAzZDdmN2NiYjUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkNPTVBBUlRNRU5UIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzgvYS9kYXRhc2V0Xzc4YTJjNWU2LTAwOTctNDIzYS04ZTMxLWE4OWM3Y2M5M2I2OC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi83LzgvZGF0YXNldF9iNzg3MmRiNS0zMGY4LTQ3N2ItYTY5MS01ZWVkM2I5YzA2YzUuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE3Ny9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U0NTU4ZWRhLTYxNTAtNGQ4NC04YmRjLWU4MWI0NmIyZDFjOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzIxNDhkM2M2Xzk5MDBfNDUwZF9iYTQ2XzQ5ZWFmMGJhOGMxZQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldE5hbWVzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0TmFtZXNGcm9tRmlsZSAtY25hbWUgIjIiIC1jaSAiMSIgICAtbyAiUkVBQ1RJT04iIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy84LzYvZS9kYXRhc2V0Xzg2ZTE1ODU5LWU5ODMtNDM4My1iMGE5LTk0YmFhMDMxMDIwOC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMi8wL2EvZGF0YXNldF8yMGFjNjNkYS00MjhlLTRiZTgtOWUyNC0wZTZkOWEzYmQzNmEuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Y0YTAzNTcwLThjZGItNGY3OS1iNmE5LTZmMTM1ZGJiODc2Mi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2Y4NjdkNjJjX2YzOGVfNDQ1Yl85YjI5XzljMTVkNjJmYWFlNwogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIlJFQUNUSU9OIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIlBBVEhXQVkiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80LzIvNC9kYXRhc2V0XzQyNGJjZmRiLTUyYTQtNDRjNy04ZjRhLTMxMmIxOWY4ZmNmYi5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8zLzcvZGF0YXNldF9iMzcyZjU0My1mNTBlLTQ2Y2YtOGEyZi04YWU1YjNhZWVkN2IuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U0NTc1ZDRiLTI4NmQtNDQzMi04ZWFmLWJhYmFiMDE3ZjY3NS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUEFUSFdBWSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJHRU5FIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS9kLzgvZGF0YXNldF8xZDgyMDNjNS04NjViLTRjODQtYWY1OS0wMGRiOTZhYzEyOTUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvNC85L2RhdGFzZXRfNjQ5OWMxZDItMWUzOC00MDI5LWE2ZGItYWNlODhkMzM1YmQ3LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84NjZhOTNmNC04MzllLTRhODktOGQyNS04OGJlZmY5MTEyMjQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAtY3AgIjIiIC1zZXAgInwiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yL2YvZS9kYXRhc2V0XzJmZWIyYWJkLTNjMTAtNGI1YS1iMTc3LWM2NjQ5NTJmY2FmMy5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8wLzQvZGF0YXNldF9iMDRlOTFiZS1iMmExLTRmNjgtOTlhMy0xZjllZmI1MjhiMzMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2NmNTUxOTdmLTNjMzgtNDZmYy04ZGIwLTRlZjFkMTUwYmFiZi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAzIHJlYWN0aW9ucyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80ZWIzMWExNV9iZmZhXzQzMTJfOTQ5YV8zZTZmZWYxYjlhODcKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29scCB8IGAgIjIiIGAgfAogICAgICAgfCBzZXAgfCBgICJ8IiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRQYXRod2F5c0Zyb21GaWxlIC1jcCAiMiIgLXNlcCAiICsgIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMi80L2IvZGF0YXNldF8yNGJjNTBjMi02Mzk4LTQxODMtYmE3OC03OTFjYzFmNWI0YTkuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvOS81L2RhdGFzZXRfOTk1ZjdlYzAtODdmMi00NTIyLWFhODEtZGIyOGIzMTdlODQ0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8xYjRiMjA2Mi1iMTFkLTQ3OWQtYTQyZS1hZThjNTMxZmUzZDUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMyByZWFjdGlvbnMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNTRiYzkxNDFfNjQ2NF80OWMyX2IxOTlfYmVhYTJlZjQxMTY3CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbHAgfCBgICIyIiBgIHwKICAgICAgIHwgc2VwIHwgYCAiICsgIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0UmVmc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldFJlZnNGcm9tRmlsZSAtY3IgIjIiIC1yZWYgIkluQ2hpIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzkvYS9kYXRhc2V0XzI5YTQwMzI0LTM2NGEtNDZmOC1iN2I4LWRmOGE0MGFkYjQ2Mi5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMy82LzQvZGF0YXNldF8zNjQ3OTRjOS0wNjc4LTQyNzUtOTAxZi01ZDY2ZjEwMzFjYzYuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE5NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2VlYjQ1Y2QxLTI3M2UtNGMyMC1hMDJlLWZlNTZiZDIwNjNmNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzExNDVmMDYyX2ZmYzBfNDIzYV84ZjI1X2U1YzhiMzI5MDNjMwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xSZWYgfCBgICIyIiBgIHwKICAgICAgIHwgcmVmIHwgYCAiSW5DaGkiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxUb01ldGFib2xpdGVUYWJsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxUb01ldGFib2xpdGVUYWJsZSAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xLzkvNy9kYXRhc2V0XzE5NzQ0MTNiLWEzZWYtNGY1Ni05MjA3LTgyZTMyODE3ZDVjMi5kYXQiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTk3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYjY1YjU1NDQtNzRjMS00OWI0LWIxMzEtMmQ0ZjhkYjM1ZWY3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1Njb3BlTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2NvcGVOZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvZC9kL2RhdGFzZXRfZGRkNWY1YWQtZDkxOS00ZDhmLWFkZDctZmFiOTBiZjMwM2JjLmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS80LzEvZGF0YXNldF81NDExMjVhZi0xODJmLTQyY2QtYjRiNi1jYzMyYzQwOWVjYzUuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS8zL2IvZGF0YXNldF9hM2I4ZDJlMy1mNzg2LTRmMWEtOGE0Yy1jZDA2YTY3MDA2OTUuZGF0IiAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E5OTBhNTU0LTMxOGYtNDhlNC1iOGVhLWQ2YjE3N2FiNDNlYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E5OTBhNTU0LTMxOGYtNDhlNC1iOGVhLWQ2YjE3N2FiNDNlYy5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGluY2x1ZGVTaWRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlYWN0aW9uVG9JZ25vcmVGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB0cmFjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvNS83L2RhdGFzZXRfYTU3MTdhOGQtYmM4Yi00ZTRkLTkxMjAtZDZlYzIzNmEwMGVjLmRhdCIgLXMgICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMDMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8yMDE1NTQwOC0wZmE2LTQ2NTktYjdiNS1lMmQyNzdlZDI0MGYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCB0cnVlIGAgfAogICAgICAgfCBzaW5rIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VJbnRlcm5hbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2VlZHNBbmRUYXJnZXRzIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZS9iLzMvZGF0YXNldF9lYjNiYjgyNy1kY2Y3LTQ0ZmUtYjY5ZC0zYjNjNjRhYTdiMDkuZGF0IiAtYyAiZSIgIC10ICAgICAtaW4gLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMDUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jNDU1ODY1OC0zMGY1LTQzNTYtYmZkZC01MjkyNjc4YmIyYmMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiZSIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNpbmsgfCBgIHRydWUgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlSW50ZXJuYWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2VlZHNBbmRUYXJnZXRzIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS9iLzMvZGF0YXNldF81YjM1YTljMS0yMjVkLTQ3MWEtYjBlMi0yY2JlMWQxYjJkNGYuZGF0IiAtYyAiZSIgIC10ICAgIC1CICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Q0ZWIyMzJjLWIyMGYtNDdkNC1iZjg0LTFkYWU4YmI1NjljNC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbnB1dFNpZGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNvbXAgfCBgICJlIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgc2luayB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIHRydWUgYCB8CiAgICAgICB8IHVzZUludGVybmFsIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TaWRlQ29tcG91bmRzU2NhbiAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2lkZUNvbXBvdW5kc1NjYW4gLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi81LzMvZGF0YXNldF9iNTM2MWQ3Ny1kMzJlLTQ2Y2EtYWUyYS1lYTAzMDk2YjEyMzYuZGF0IiAgIC1kICI0MDAiICAgLW0gIm5vIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlY2M2ZmI5LWIzZGYtNGQ4Mi1hZjFkLWQ0ZWJhODBlMDk1NS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIC90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi81LzMvZGF0YXNldF9iNTM2MWQ3Ny1kMzJlLTQ2Y2EtYWUyYS1lYTAzMDk2YjEyMzYuZGF0CiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIFNjYW5pbmcuLi4KICAgICAgZG9uZQogICAgICBmb3VuZCA2IHNpZGUgY29tcG91bmQgYW1vbmcgMTEwNyBjb21wb3VuZHMKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlY2M2ZmI5LWIzZGYtNGQ4Mi1hZjFkLWQ0ZWJhODBlMDk1NS5kYXQKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVPbmx5IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm9SZXBvcnRWYWx1ZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgIjQwMCIgYCB8CiAgICAgICB8IGRlZ3JlZVByZWNlbnRpbGUgfCBgICJuYW4iIGAgfAogICAgICAgfCBmbGFnSW5vcmdhbmljIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZmxhZ05vRm9ybXVsYSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHBhcmFsbGVsRWRnZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TaWRlQ29tcG91bmRzU2NhbiAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2lkZUNvbXBvdW5kc1NjYW4gLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wL2EvZGF0YXNldF84MGEwZjQ3NS1kNDk4LTRiMzEtYTlkYy03ZGI4ZWMzZjZmOWMuZGF0IiAgLWlkIC1kICI0MDAiICAgLW0gIm5vIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1YzNlZTFlLWJiYjYtNGM2ZC1iNDZmLTBkNGIyNDFhNjAwYS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIC90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wL2EvZGF0YXNldF84MGEwZjQ3NS1kNDk4LTRiMzEtYTlkYy03ZGI4ZWMzZjZmOWMuZGF0CiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIFNjYW5pbmcuLi4KICAgICAgZG9uZQogICAgICBmb3VuZCA2IHNpZGUgY29tcG91bmQgYW1vbmcgMTEwNyBjb21wb3VuZHMKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1YzNlZTFlLWJiYjYtNGM2ZC1iNDZmLTBkNGIyNDFhNjAwYS5kYXQKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVPbmx5IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm9SZXBvcnRWYWx1ZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCAiNDAwIiBgIHwKICAgICAgIHwgZGVncmVlUHJlY2VudGlsZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IGZsYWdJbm9yZ2FuaWMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmbGFnTm9Gb3JtdWxhIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcGFyYWxsZWxFZGdlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvMS9hL2RhdGFzZXRfZTFhNzM3ZjAtZGY2Yi00ZTc3LWIwODYtMjQ1MWEwYThlMDBhLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mM2QwMTk4Mi0wOTQ1LTRiMzUtOTAwYy1lZjQzZjJmOTAyZWQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9kYmQ0ZTEwOV81NTRiXzQ4ZWJfYTUyMl9iN2M0OWZmZjc3MjAKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIyIiAtY2YgIjMiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvMS9lL2RhdGFzZXRfZTFlNzc1OTQtNDgxMy00MGZkLWFkYjMtOTIzZGZkZDM2YzdhLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zN2I4OTU5ZS01ODY5LTQ2ZDMtYTllZC05YWRiNWFiZmViMTEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83MWRhYjJmOF8xMzkxXzRkMjFfYjEzZV8xZTA0Y2E5MTAxMGYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIyIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjMiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLT4iIC1yICI9IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi9hL2MvZGF0YXNldF9iYWM5MzVmYy1jM2YzLTRmZTEtYmY2My03M2NhMzkwZTg0NWQuZGF0IiAtaWQgIk5BIiAgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1NzYwMGQxLTVkNmMtNGRkZS04YjdiLTFmNzkxYzJiNGI1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzk1NjA4NDNjXzJkZjJfNDVjYl84MDM4XzRmYjMyZDE5MGIwOAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGlkIHwgYCAyYTAyZDJmYThlMjUyYmE0IGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAtcnAgLW1wIC1lICJfZSIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzkvNC9kYXRhc2V0X2E5NDg4MGZiLWFmODMtNDA5Ny05YjNlLTQxMzI2MzJjMWNiNi5kYXQiIC1pZCAiTkEiIC1jcHQgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ0M2E2MDJiLWFmMGMtNGY0Ni1iYzA4LWYwN2EwZjQ1MDkwMC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2JhYmY1YTAzX2E1ZDhfNDA3Y185NDQ4XzY0MWMwNzAzZDRjYgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCB0cnVlIGAgfAogICAgICAgfCBtcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZSB8IGAgIl9lIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCB0cnVlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVGFiMlNibWwgKFRlc3QgIzUpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5UYWIyU2JtbCAtY2kgIjEiIC1jZiAiMiIgICAtZSAiX2IiIC1pICItLT4iIC1yICI8PT0+IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC80L2UvZGF0YXNldF84NGU4ODY4ZS1hOTk4LTQ4YjQtYjhiZi0xMWFiMGQyMjVkOGUuZGF0IiAtaWQgIm15TW9kZWwiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfY2YwY2ZlNWItNGNkYS00YjMwLWEyNTQtZmRlYTZjZTFjOWE0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBteU1vZGVsCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBjOWFhYTZhNmMwNjA5NWZmNzlmYTU3YzM2YjhlZDlhYyBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVG9wb2xvZ2ljYWxQYXRod2F5QW5hbHlzaXMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlRvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzQvMi9kL2RhdGFzZXRfNDJkYjcwNTUtOGNmOS00OTZhLWIzZDQtYWY5YmQ4MTIwZWM4LmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvOC84L2RhdGFzZXRfYjg4MTE0ZmItYTgyYy00Y2I4LWI0YjAtNWU5YTM5NWZiYWUyLmRhdCIgLW1jICJubyIgICAtbm9pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvNC8xL2RhdGFzZXRfMzQxOTU0ZTEtM2Q0OS00MmM0LTgwYjYtNTZmMDY5NTM2OWM2LmRhdCIgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjI1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMWI2OTE2N2YtNzI1Zi00YjBmLTk0YWEtNzBiODg3YWE5ZDE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uUmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgNiBjb21wb3VuZHMgcmVtb3ZlZC4KICAgICAgIE5ldHdvcmsgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuCgoKICAgICAgSW1wb3J0aW5nIG5vZGVzIG9mIGludGVyZXN0CiAgICAgIERvbmUuCiAgICAgIENvbXB1dGluZyBQYXRod2F5IHRvcG9sb2d5IEFuYWx5c2lzLi4uIChtYXkgdGFrZSBhIHdoaWxlKQogICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi5Eb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvdXQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Ub3BvbG9naWNhbFBhdGh3YXlBbmFseXNpcyAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xLzkvZS9kYXRhc2V0XzE5ZTY3YzkyLWNhMGItNDU3YS04NDM4LTAwMjUzYjIxMDcyZC5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2EvZS9kYXRhc2V0XzRhZTc1MjJjLWIyMGQtNGViZC05Mzg0LTA4MTNkOGZlMzIzNy5kYXQiIC1tYyAiYnlfaWQiIC1yaSAtdW4gLW5vaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy82LzQvNy9kYXRhc2V0XzY0NzVlNzAxLTJiODctNGQzMi1iNzFkLTY1OTdmNDcyMWE4NC5kYXQiIC1vdXQgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZmU3YjI3OC1jMjRmLTRjYmQtYTRlZC1kZjFhZGM2OGQzMWQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDEyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgoKCiAgICAgIEJ1aWxkaW5nIE5ldHdvcmsuLi5SZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBNZXJnaW5nIGNvbXBhcnRtZW50cy4uLiBEb25lLgogICAgICBSZW1vdmUgaXNvbGF0ZWQgbm9kZXMuLi4KICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvc2VyaW5lCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIFAxX1A1X0Jpc181X19hZGVub3N5bF9fcGVudGFwaG9zcGhhdGUKICAgICAgCXJlbW92aW5nIE1fc19jCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgRF9HbHljZXJhbGRlaHlkZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9fMV9pbm9zaXRvbAogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9ldGhhbm9sYW1pbmUKICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvZ2x5Y2Vyb2wKICAgICAgCXJlbW92aW5nIFAxX1A0X0Jpc181X19hZGVub3N5bF9fdGV0cmFwaG9zcGhhdGUKICAgICAgIERvbmUuCiAgICAgICBOZXR3b3JrIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLgoKCiAgICAgIEltcG9ydGluZyBub2RlcyBvZiBpbnRlcmVzdAogICAgICBEb25lLgogICAgICBDb21wdXRpbmcgUGF0aHdheSB0b3BvbG9neSBBbmFseXNpcy4uLiAobWF5IHRha2UgYSB3aGlsZSkKICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgImJ5X2lkIiBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IG91dCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKPC9kZXRhaWxzPgo='));
     </script>
   </body>
 </html>
\ No newline at end of file