Mercurial > repos > metexplore > met4j
diff tests.html @ 7:1436e9cde9c9 draft
planemo upload for repository https://forgemia.inra.fr/metexplore/met4j-galaxy commit 1d31a48bf8328b7a3ad9910971d24b9f453459c5
author | metexplore |
---|---|
date | Tue, 04 Jul 2023 10:21:26 +0000 |
parents | 7a6f2380fc1d |
children | 1274e2a62479 |
line wrap: on
line diff
--- a/tests.html Wed May 17 13:26:37 2023 +0000 +++ b/tests.html Tue Jul 04 10:21:26 2023 +0000 @@ -285,7 +285,7 @@ var md = window.markdownit({ html: true, }); - target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iNzEiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjcxIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjcxIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjcxIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjAgU2tpcHBlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1kYW5nZXIiIHN0eWxlPSJ3aWR0aDogMC4wJSIgYXJpYS12YWx1ZW5vdz0iMCIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iNzEiIHRpdGxlPSIwIEZhaWxlZCBvciBFcnJvcmVkIj4KICA8L2Rpdj4KPC9kaXY+Cgp8IFRlc3QgU3RhdGUgfCBDb3VudCB8CnwgLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBUb3RhbCAgICAgIHwgNzEgfAp8IFBhc3NlZCAgICAgfCA3MSB8CnwgRXJyb3IgICAgICB8IDAgfAp8IEZhaWx1cmUgICAgfCAwIHwKfCBTa2lwcGVkICAgIHwgMCB8CgoKPGRldGFpbHM+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMy84LzkvZGF0YXNldF8zODkwOTdlOC05NDI1LTQ3ODAtYjgyMi03YjYxMGM3NTAwNDIuZGF0IiAtZyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8zLzkvZi9kYXRhc2V0XzM5Zjk5YTcyLTkyOTgtNDRkZi05ZTQxLWVkOTU1OWYzOTk0MS5kYXQiICAgICAgICAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlOGJlOGU3LTEwMjItNGRiZC05MGYzLTUxOGJjMmMxYWM0My5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80ZThiZThlNy0xMDIyLTRkYmQtOTBmMy01MThiYzJjMWFjNDMuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy84LzEvNC9kYXRhc2V0XzgxNDE2MDg4LWUzZTMtNGU1ZS1hYzlkLWE2YzIzYzg1YzhhOS5kYXQiIC1nICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2MvZi9kL2RhdGFzZXRfY2ZkNGMyMGMtOWVhMy00ODYxLTkzZmItYTZhODBjNzZhNjg2LmRhdCIgLWtzICAgICAgICAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOGRmZjNkZDUtZDQ0Ni00ODFkLTkyYjEtNWVhZGU2YWUwZjU5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzhkZmYzZGQ1LWQ0NDYtNDgxZC05MmIxLTVlYWRlNmFlMGY1OS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMC8yLzEvZGF0YXNldF8wMjExYjE3Yy0yYjAyLTQ5ZWUtOGFhZi00NTZkNjQwZjEyMGYuZGF0IiAtZyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wLzUvNS9kYXRhc2V0XzA1NTNlNzg5LTk2MzItNDMyMi1iYjk0LWE4NzRhMGEwNzA2NC5kYXQiICAtbWMgICAgICAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg5YjQyMzYxLWFiMmQtNDhiZi1hNWVhLTk4YmFiMGIwMWYwNS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg5YjQyMzYxLWFiMmQtNDhiZi1hNWVhLTk4YmFiMGIwMWYwNS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvOC9iLzgvZGF0YXNldF84Yjg3MTIzZS0xN2U2LTRkOTEtYWMxMC1lZDUxYmNkMjY5ODUuZGF0IiAtZyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8xLzIvZS9kYXRhc2V0XzEyZTc2OTIzLTUzYmMtNGM4Mi1hYzA0LWU4ZmNlOGU2NzMzYy5kYXQiICAgLW1lICAgICAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9kNGM1OWVkYS0wZmNlLTRkMWQtYTEwZi1iYTA5MDE2ZDVmODYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgZWRnZXMuLi4gRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDRjNTllZGEtMGZjZS00ZDFkLWExMGYtYmEwOTAxNmQ1Zjg2LmRhdCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9mLzkvMC9kYXRhc2V0X2Y5MGJiYjgxLWU0N2EtNDA5OS1hMmFiLTdlMDA5NWJmNzhlMC5kYXQiIC1nICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzIvYi9jL2RhdGFzZXRfMmJjNDMyMTQtMmZlMS00ZGI3LTljNjItYjZiMzFkMWNiNTA3LmRhdCIgICAgLXJpICAgICAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2IzY2Q0YWM4LWYyYjctNDZkZi04MGMyLTU5ODZjNGIxMzdlNC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCiAgICAgIDE2IGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBnYWxhY3Rvc2UKICAgICAgCXJlbW92aW5nIEgyTwogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyBQUGkKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBmcnVjdG9zZS0zLXBob3NwaGF0ZQogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIDMta2V0by1iZXRhLUQtZ2FsYWN0b3NlCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIKwogICAgICAJcmVtb3ZpbmcgQ08yCiAgICAgIAlyZW1vdmluZyBQaQogICAgICAJcmVtb3ZpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iM2NkNGFjOC1mMmI3LTQ2ZGYtODBjMi01OTg2YzRiMTM3ZTQuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzYpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2EvMi85L2RhdGFzZXRfYTI5MjJhYzEtZTgwYy00NWZmLWFjOTAtY2ZlZTEyNThjMjUzLmRhdCIgLWcgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMi9jLzkvZGF0YXNldF8yYzkzOWQ2NS0zYjc0LTRhZjMtOGY3MC1kMWQ5MGE5MzY1YjUuZGF0IiAgICAgLXVuICAgICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNWViYjM5NTctMDlhMy00YjJlLWE1NjctMDBkNTIzNjQyMTQ4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81ZWJiMzk1Ny0wOWEzLTRiMmUtYTU2Ny0wMGQ1MjM2NDIxNDguZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2QvMC83L2RhdGFzZXRfZDA3NmZkNTYtYTY5OS00ODk5LWEyMzAtN2JhOWU3YjM4OTA5LmRhdCIgLWcgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZC83LzQvZGF0YXNldF9kNzRiOTVkMS01OWVlLTQwYTItYjk4Ni0wNzhiMGVjYWQwYzIuZGF0IiAgICAgICAtYW0gICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTdjZjM5MzgtZTgwOC00NWRmLThkZDktZjM5NWI1OTk5NTQ5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCB0cnVlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM4KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9mLzgvNi9kYXRhc2V0X2Y4NjkwOTQyLTExZTEtNDk1Ni1iZjA2LTc2NTdkNTdiYjdjMS5kYXQiIC1nICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzMvMS9iL2RhdGFzZXRfMzFiMWIyZDMtZWQ1MC00MjZmLTljZjEtN2U3NTI3NWEyOWViLmRhdCIgICAgICAgICAtaSAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzI0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzYwNjNiYTEtNTA5My00ODNmLWI0Y2MtMTNhNjZlYjg5M2Q2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNiB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83NjA2M2JhMS01MDkzLTQ4M2YtYjRjYy0xM2E2NmViODkzZDYuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2hva2VQb2ludCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy82LzkvNS9kYXRhc2V0XzY5NTVkMGE2LWNlYzEtNGUxYy04NWE3LTQwNmJmYTVjMmIzMC5kYXQiIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81NTQ5MThlMy03NDY4LTQ0ZDAtYTIyYS02MDU0OTJhNWQyNDIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgbG9hZCBwb2ludHMuLi4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2hva2VQb2ludCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9hLzMvMi9kYXRhc2V0X2EzMjg2NDdmLTQ2ZTktNDY3ZS04NWM4LWVlM2NiMGI2ZDNlOS5kYXQiIC1zICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvMC80L2RhdGFzZXRfNDA0YWFmNGUtZjkxNC00NjQ4LWIxNjktMDg3NDc3NmRlNmVkLmRhdCIgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2FhMmQ5MjZiLTNjYzEtNDA1Yi1hY2U2LTEzODYwMjIwOGQ4MC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDQgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIENvbXB1dGluZyBsb2FkIHBvaW50cy4uLgogICAgICBFeHBvcnQgcmVzdWx0cy4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9Db21wb3VuZE5ldCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ29tcG91bmROZXQgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZi80LzAvZGF0YXNldF9mNDBkMThkYS0zNzE1LTQ0NGMtOGYwNi05NmI1ZDY4YjhiNDYuZGF0IiAtc2MgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMS8wLzYvZGF0YXNldF8xMDY3NDBlZC1hYWM0LTRhYzktODQxMi05MDQ4N2VlYzAzMDkuZGF0IiAtbWMgIm5vIiAgICAgICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzMyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzU4ZTdlYWItYTM1Yi00ZWM4LWFkNGYtOWFmMTE0OTQ2ZTljLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83NThlN2VhYi1hMzViLTRlYzgtYWQ0Zi05YWYxMTQ5NDZlOWMuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9Db21wb3VuZE5ldCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ29tcG91bmROZXQgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZi8xLzIvZGF0YXNldF9mMTI2YzYyNS1iZGE5LTRhZDktYjQ2Yi0yZGE0YzQwMjE5NjMuZGF0IiAtc2MgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZC80L2IvZGF0YXNldF9kNGIzZTI3Ni1lMzAzLTRmMzMtYmFlOS00Nzk2YjViMWY3ZDcuZGF0IiAtbWMgImJ5X2lkIiAgLXJpIC1kdyAtdW4gLXRwICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMmUwYTgzZGMtNDQ2NC00ZjJhLTg5NzktNWM3NzBmYmM2OTUxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICBTZXR0aW5nIGVkZ2Ugd2VpZ2h0cyAodGFyZ2V0IGRlZ3JlZSkuLi4KICAgICAgMTIgaXNvbGF0ZWQgbm9kZXMgcmVtb3ZlZCAKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICAgRG9uZS4KICAgICAgQ3JlYXRlIFVuZGlyZWN0ZWQuLi4gRG9uZS4KICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIFJlbW92ZSBpc29sYXRlZCBub2Rlcy4uLgogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9fMV9pbm9zaXRvbAogICAgICAJcmVtb3ZpbmcgbWV0aGFuZXN1bGZvbmF0ZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9jaG9saW5lCiAgICAgIAlyZW1vdmluZyBQMV9QNF9CaXNfNV9fYWRlbm9zeWxfX3RldHJhcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob2dseWNlcm9sCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIFAxX1A1X0Jpc181X19hZGVub3N5bF9fcGVudGFwaG9zcGhhdGUKICAgICAgCXJlbW92aW5nIHNuX0dseWNlcm9fM19waG9zcGhvZXRoYW5vbGFtaW5lCiAgICAgIAlyZW1vdmluZyBNX3NfYwogICAgICAJcmVtb3ZpbmcgR2x5Y2Vyb3Bob3NwaG9zZXJpbmUKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgRF9HbHljZXJhbGRlaHlkZQogICAgICAgRG9uZS4KICAgICAgQ29tcHV0ZSB0cmFuc2l0aW9uIG1hdHJpeC4uLiBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8yZTBhODNkYy00NDY0LTRmMmEtODk3OS01Yzc3MGZiYzY5NTEuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0RlY29tcG9zZVNCTUwgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5EZWNvbXBvc2VTQk1MIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzIvMS9mL2RhdGFzZXRfMjFmZGIwMDQtNmNlNC00MTgxLTgyNTAtMGNjZDIzNThlNThiLmRhdCIgICAgICAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzNhMTZiYjU1LWJhYzQtNDQ1Ny05YjgyLTVmMGM3YzQ4NTNlOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHByaW50TWV0YWJvbGl0ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludFJlYWN0aW9ucyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50Q29tcGFydG1lbnRzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRQYXRod2F5cyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50R2VuZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBub1R5cGVDb2wgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0RlY29tcG9zZVNCTUwgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5EZWNvbXBvc2VTQk1MIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzkvYS9lL2RhdGFzZXRfOWFlZTdjOTctYzhiNy00NTNiLTgxMDctYTBhZmNlOWQwMTNmLmRhdCIgLW0gLXIgLWMgIC1nIC1udCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjUyN2Y5YTItM2RhZi00ZTRjLTkyMzItZDM4MzIzY2QyNmUzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcHJpbnRNZXRhYm9saXRlcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRSZWFjdGlvbnMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50Q29tcGFydG1lbnRzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFBhdGh3YXlzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRHZW5lcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbm9UeXBlQ29sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0Rpc3RhbmNlTWF0cml4IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8xLzQvMy9kYXRhc2V0XzE0M2VkMjdjLTAwZGEtNGYzMS1hNTdmLWQzNWEyMzRhMmUyZS5kYXQiICAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80MS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzNmOTdmYzc0LWYxMTctNDY1NC04M2ZhLTgzMWNkM2VlYmZkNi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgc2VlZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0Rpc3RhbmNlTWF0cml4IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy85LzYvOC9kYXRhc2V0Xzk2ODliODk1LWVmMjEtNDk0Yi1hZDg3LTNmN2I3ODQ5NmFkOS5kYXQiIC1zYyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy82L2QvNS9kYXRhc2V0XzZkNTQ5NDM5LWRlMDktNGMyYy1hNzY2LTRkNjc4YjRjZmZkMS5kYXQiIC1kdyAtdSAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzQ0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNDQ3NzBmYTktZTc2Mi00ODhjLTllZTItNGE3ODE4YzQ0YzgxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDEgc2lkZSBjb21wb3VuZHMgaWdub3JlZCBkdXJpbmcgZ3JhcGggYnVpbGQuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZWVkRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RQYXRod2F5cyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkV4dHJhY3RQYXRod2F5cyAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9jL2EvNS9kYXRhc2V0X2NhNWFhNDYyLWNiYWItNDNjZC1hOGE3LWE0ODEzMmU0OTEyNy5kYXQiIC1wICJDaXRyaWNfQWNpZF9DeWNsZStGb2xhdGVfTWV0YWJvbGlzbSt0b3RvIiAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzQ2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNDY3ZTBlMjAtMWNjZi00NjQ1LWFmYzMtOGRkNmUwODFkYjQ3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBuZXR3b3JrIGV4cG9ydGVkLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBOdW1iZXIgb2YgcmVhY3Rpb25zIGluIG9yaWdpbmFsIG5ldHdvcms6IDExNTgKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gb3JpZ2luYWwgbmV0d29yazogMTEwNwogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gb3JpZ2luYWwgbmV0d29yazogNTcyCiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gcGF0aHdheSBDaXRyaWNfQWNpZF9DeWNsZSAoQ2l0cmljX0FjaWRfQ3ljbGUpOiAxMQogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBwYXRod2F5IENpdHJpY19BY2lkX0N5Y2xlIChDaXRyaWNfQWNpZF9DeWNsZSk6IDI2CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBwYXRod2F5IENpdHJpY19BY2lkX0N5Y2xlIChDaXRyaWNfQWNpZF9DeWNsZSk6IDE4CiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiA2CiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIHBhdGh3YXkgRm9sYXRlX01ldGFib2xpc20gKEZvbGF0ZV9NZXRhYm9saXNtKTogMTYKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIHBhdGh3YXkgRm9sYXRlX01ldGFib2xpc20gKEZvbGF0ZV9NZXRhYm9saXNtKTogOAogICAgICBFcnJvcjogUGF0aHdheSB0b3RvIG5vdCBmb3VuZCBpbiBuZXR3b3JrLCBwbGVhc2UgY2hlY2sgc2JtbCBmaWxlLgogICAgICBOdW1iZXIgb2YgcmVhY3Rpb25zIGluIG5ldHdvcms6IDE3CiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIG5ldHdvcms6IDM1CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBuZXR3b3JrOiAyNQoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcGF0aHdheUlkIHwgYCAiQ2l0cmljX0FjaWRfQ3ljbGUrRm9sYXRlX01ldGFib2xpc20rdG90byIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFNibWxBbm5vdCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkV4dHJhY3RTYm1sQW5ub3QgLWkgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvOC9kLzAvZGF0YXNldF84ZDAzNDdjMS1lMzZkLTQxYjgtYTIyNi1jYTNiNTE0MjgyZTUuZGF0IiAtZXhwb3J0ICJNRVRBQk9MSVRFIiAtZGIgIm1ldGFuZXR4LmNoZW1pY2FsIiAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81ZGIxMzY4NS1jZTRmLTQ3ZWYtODIyMS1kM2VjOWMzMGU0Y2QuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIGFubm90YXRpb25zIGZvdW5kIGZvciAxMTAvMTExIG1ldGFib2xpdGVzCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBleHBvcnQgfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgZGIgfCBgICJtZXRhbmV0eC5jaGVtaWNhbCIgYCB8CiAgICAgICB8IHVuaXEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBza2lwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U2JtbEFubm90IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFNibWxBbm5vdCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wL2EvZS9kYXRhc2V0XzBhZWE2NzQzLTE3YWItNGJmMy04MTU4LTk5YTQxOTI3OWFiMS5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAtc2tpcCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzUwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMmNkZTU2ODAtNGQzMS00ZDIzLWI1OTEtMzkzYTAxNzM2Mjg2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBhbm5vdGF0aW9ucyBmb3VuZCBmb3IgMTEwLzExMSBtZXRhYm9saXRlcwoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZXhwb3J0IHwgYCAiTUVUQUJPTElURSIgYCB8CiAgICAgICB8IGRiIHwgYCAibWV0YW5ldHguY2hlbWljYWwiIGAgfAogICAgICAgfCB1bmlxIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgc2tpcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U2JtbEFubm90IChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFNibWxBbm5vdCAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy84L2QvYS9kYXRhc2V0XzhkYTg0YzQ1LWFhZTYtNDFlYy1hZjZjLTZhMzBmNDUzZjcwOC5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiIC11bmlxIC1za2lwIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jYWQ2NjYzZS01ZmQzLTRiNTUtOWYzYS1hNjJiZWM4Mzc2MmYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIGFubm90YXRpb25zIGZvdW5kIGZvciAxMTAvMTExIG1ldGFib2xpdGVzCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBleHBvcnQgfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgZGIgfCBgICJtZXRhbmV0eC5jaGVtaWNhbCIgYCB8CiAgICAgICB8IHVuaXEgfCBgIHRydWUgYCB8CiAgICAgICB8IHNraXAgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFN1YkJpcE5ldHdvcmsgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkV4dHJhY3RTdWJCaXBOZXR3b3JrIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvMS9jL2RhdGFzZXRfNDFjOTc3NDAtYjMzZi00YzZkLTlkODQtNDUxMmUxYjVlOTZlLmRhdCIgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYi83LzUvZGF0YXNldF9iNzUyMjM3My00ZTFlLTRmNDgtYjNmNy1kMDAxNmUzYmYxODQuZGF0IiAtdCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8yLzkvMi9kYXRhc2V0XzI5MmNkYjI3LWE4OGYtNGFhOC1iYThlLWU5MGZmOTRkZGIwNS5kYXQiICAgLXNjICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzEvMS9iL2RhdGFzZXRfMTFiYWYxN2QtYjc3Ni00YjljLWEzMmMtYWJlYTU3MmU4NGIwLmRhdCIgLWsgIjEiICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzU3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzg0ZDlmOTQtZTliMi00ZWQzLWJjZmEtYWY4NzMwNzgzM2Y0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIGltcG9ydGluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81Ny9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzc4NGQ5Zjk0LWU5YjItNGVkMy1iY2ZhLWFmODczMDc4MzNmNC5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYmxrZFJlYWN0aW9uRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFN1Yk5ldHdvcmsgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkV4dHJhY3RTdWJOZXR3b3JrIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzMvYy8zL2RhdGFzZXRfM2MzNDA2MWYtZmRjNC00ZTBlLWEzM2ItNGMyOTc4YjZjYzVhLmRhdCIgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNS8yLzIvZGF0YXNldF81MjJlZTdkZi02YjdlLTRlY2UtYTY1OC01ODRlMzA0ZTMyNDEuZGF0IiAtdCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9kLzIvOS9kYXRhc2V0X2QyOTk1M2ExLTljYzQtNDBiMi04MDVjLTg3NzA2MTZjNjAzZi5kYXQiICAgICAtayAiMSIgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iMGEzZjgyYS1mNGJkLTQ0OTQtOWIyMi1mYjYwYWVkNzA5ZGMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgZXh0cmFjdGluZyBzb3VyY2VzIGFuZCB0YXJnZXRzCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iMGEzZjgyYS1mNGJkLTQ0OTQtOWIyMi1mYjYwYWVkNzA5ZGMuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBjaGVtaWNhbFNpbSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFN1YlJlYWN0aW9uTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1YlJlYWN0aW9uTmV0d29yayAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8zL2UvOS9kYXRhc2V0XzNlOTc4MTMzLTgxODUtNDIxNS1hYWIzLWExMTI2OWQ5MjM4YS5kYXQiIC1zICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvOS9iL2RhdGFzZXRfNDliZDdiMTgtMzdhMS00MmI2LTgzMDAtNGIwMDNkZmQ4MTk4LmRhdCIgICAtdCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9lLzUvMi9kYXRhc2V0X2U1MjFhMzU1LWQ5M2ItNGNiYi04ZDQwLTcxNzJmZWU1ZTUwMC5kYXQiIC1zYyAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy80LzIvYi9kYXRhc2V0XzQyYjVkNDdiLWY3N2QtNDI0Zi1hZmU3LWVmNTczMjJhYWY2Zi5kYXQiIC1rICIxIiAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82Ni9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzE0ODc4NGM0LTg0NjUtNDQxYy1iZjg2LTdhOWZhNzJhNDhjNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBpbXBvcnRpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMCBzaWRlIGNvbXBvdW5kcyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KICAgICAgZXh0cmFjdGluZyBzb3VyY2VzIGFuZCB0YXJnZXRzCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8xNDg3ODRjNC04NDY1LTQ0MWMtYmY4Ni03YTlmYTcyYTQ4YzcuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNUYWJsZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0ZiY1RvTm90ZXMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5GYmNUb05vdGVzIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2YvNy8zL2RhdGFzZXRfZjczZTA0ZDEtM2Q3Mi00ZThkLWI5ZmYtMWNiNDlmYzJmMzVhLmRhdCIgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzJmOTBkYmJkLWQ2NmItNGQ2OS1hYzNhLWYzN2RkNWMzY2I0Zi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgaU1MMTUxNQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBpTUwxNTE1CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGhhc1Byb3BlcnR5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaGFzUHJvcGVydHksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRHZW5lc0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRHZW5lc0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNS8wLzgvZGF0YXNldF81MDg4NGQ3Yy0wYjJkLTRlZTItODMyZi1mYzhlMWNhOWJmOGYuZGF0IiAtciAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9iLzMvZi9kYXRhc2V0X2IzZjM1NzlmLTg4MzMtNDEwNC05ZWZiLTIwZmI5YjMxN2U3Yi5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzcxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTY3MDdkNmMtZDgyOC00NjRhLTg2NDctMjg1YzUwNjk3YjIzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0TW9kZWxQcm90ZW9tZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBiaWdnLkdldE1vZGVsUHJvdGVvbWUgLW0gImVfY29saV9jb3JlIiAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzcyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfN2ZkMWI1NWMtMmZlNC00OGJkLTlhNTktZTZjMWJjNTBiNTljLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1vZGVsSWQgfCBgICJlX2NvbGlfY29yZSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgImRhdGEiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzUvYi9iL2RhdGFzZXRfNWJiYzNkZTItOWJkNS00OTBiLWE5ZTUtNTMwMjMwYTFjMjI0LmRhdCIgLXIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMy8wLzgvZGF0YXNldF8zMDgwNGFkOS1hOTcxLTQzN2UtYmQ0My03Yjk2YzRhYjM4ZjkuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgICAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzc1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjI5ZWM2MGUtMGQ0Yi00ZGZjLWJjYmQtZjUyNjYwMjBjYjQ0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2MvMS8xL2RhdGFzZXRfYzExN2YzYjQtZWIyMS00MDVlLThjNTUtNmNlNjZjYTFmNzBlLmRhdCIgLXIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYy8yLzQvZGF0YXNldF9jMjQ3ODBlMS1jMDI0LTQ4NDMtYmNjZS04NTY3Y2ViMmIxZDIuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgLXMgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83YWZiODcwNS0yZDgwLTQyMmUtYjM2Mi02MjUyNGE5ODRjMmIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFByb2R1Y3RzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy83LzMvMi9kYXRhc2V0XzczMjJhNGZkLWQ5YWMtNDdjOS05ZjdlLTA3NTE3MWFiMmVkYS5kYXQiIC1yICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzMvYS8wL2RhdGFzZXRfM2EwZDRjMzgtM2E3Yy00NmVlLWI4ZDUtM2E1ZTlmNTk3YjJiLmRhdCIgLXNlcCAiCSIgIC1jb2wgIjEiICAtcCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzgxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTBkMjc4ZTEtZWEzOC00NGY2LTg1NzItZWEzZWFiYjhiMmE3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTG9hZFBvaW50IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Mb2FkUG9pbnQgLWkgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNy81L2YvZGF0YXNldF83NWZmM2ZiOS1jNmNlLTQwNmItYjQyYS0wYzUyNDFmN2RjNTUuZGF0IiAtayAiMSIgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzliN2U1NjVmLTlkZjYtNGU4My05MDRjLTQ4YzBjMzA5MWY1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgbG9hZCBwb2ludHMuLi4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9OZXR3b3JrU3VtbWFyeSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuTmV0d29ya1N1bW1hcnkgLWkgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNS83L2MvZGF0YXNldF81N2M3OTY0Ny1mZmRhLTQ3ZjItOTRlZS0wZjYxZjZlN2QwOWIuZGF0IiAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvODUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80OGJiNGE3Yi1kY2Y1LTQwZjgtYjk0NS1kZjVlOGUwMDhlMjYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgcGVyZm9ybSBiYXNpYyBhbmFseXNpcy4uLgogICAgICBleHRyYWN0IGNvbm5lY3RlZCBjb21wb25lbnQuLi4KICAgICAgQ29tcHV0ZSBkZW5zaXR5Li4uCiAgICAgIENvbXB1dGUgbG9jYWwgY2x1c3RlcmluZyBjb2VmZmljaWVudHMuLi4KICAgICAgQ29tcHV0ZSBkZWdyZWUgc3RhdGlzdGljcy4uLgogICAgICBDb21wdXRlIGRpc3RhbmNlcy4uLgogICAgICBDb21wdXRlIGRpc3RhbmNlcyBzdGF0aXN0aWNzLi4uCiAgICAgIENvbXB1dGUgY2VudHJhbGl0eS4uLgogICAgICAJQ2xvc2VuZXNzIGRvbmUuCiAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBza2lwZGlzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9QcmVjdXJzb3JOZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5QcmVjdXJzb3JOZXR3b3JrIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2MvMS8yL2RhdGFzZXRfYzEyYzBhMjEtZGExMS00NGE0LWE1NGMtYzk2ZTIxM2MwMmU4LmRhdCIgLXQgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvOC9jL2YvZGF0YXNldF84Y2YwYmU3Yi0yNjY4LTQ2NjktOTI0My01YTA0MjI0MmY1OTQuZGF0IiAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2MyZTFmZjhjLTE3MTUtNDYyNi1iNmNjLWQ0Yjg1NjQ1NDE1My5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYzJlMWZmOGMtMTcxNS00NjI2LWI2Y2MtZDRiODU2NDU0MTUzLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcmVhY3Rpb25Ub0lnbm9yZUZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyR3JhcGggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2EvOS83L2RhdGFzZXRfYTk3YjYwYjktZGQzNi00MTUxLWEzZTEtMTRkNzIyZmE3YTNlLmRhdCIgIC1jICAgLWdtbCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZTU3MWQ3OGYtYzllNC00Nzc4LWE1NTQtOTQ1MDgyYjQxMGZkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZTU3MWQ3OGYtYzllNC00Nzc4LWE1NTQtOTQ1MDgyYjQxMGZkLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgYmlwYXJ0aXRlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIHRydWUgYCB8CiAgICAgICB8IHJlYWN0aW9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdGFiIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZ21sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyR3JhcGggKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2MvMy8zL2RhdGFzZXRfYzMzYjc4NWUtNTIyNi00MWUyLWFmNjItYjE2ZDA0YzFhOTcxLmRhdCIgLWIgICAgLWdtbCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmU0ZTFiMWItNTU2NS00ODUxLWFkNTctNzY0NmExZWFjNzZjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmU0ZTFiMWItNTU2NS00ODUxLWFkNTctNzY0NmExZWFjNzZjLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgYmlwYXJ0aXRlIHwgYCB0cnVlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlYWN0aW9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdGFiIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZ21sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyR3JhcGggKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzAvYi9hL2RhdGFzZXRfMGJhNmY5NTYtZjdmZC00NjMxLWI1ZTktMWFjYmU2YzhhOWMwLmRhdCIgICAtciAgLWdtbCAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzk0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmQ1YmYwMzYtNGRlMy00YTMwLWFkMWMtY2RlYzRiOTg0M2JlLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzk0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmQ1YmYwMzYtNGRlMy00YTMwLWFkMWMtY2RlYzRiOTg0M2JlLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgYmlwYXJ0aXRlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvbiB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdGFiIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZ21sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyVGFiIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJUYWIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9hLzcvOC9kYXRhc2V0X2E3ODJjZTVkLWIxYTQtNDIwNy1hYmE0LWNkY2EwMDRiYTUxOC5kYXQiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85Ni9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzlkMTc2NDQ4LWEwNjAtNDc5MS1iM2ZjLTgzMDViODEzZjM3Yi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMlRhYiAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyVGFiIC1pICItPiIgLXIgIj0iIC1pbiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wLzAvMS9kYXRhc2V0XzAwMWNiM2M1LTAxMjAtNGQwOC05NDNjLTgxMTkzNzRkY2Q2MC5kYXQiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzUwMDdmNTc3LTBlMDctNDEzMy1iODYxLTMzOTA4NzBmMTFhMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaSB8IGAgIi0+IiBgIHwKICAgICAgIHwgciB8IGAgIj0iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wLzQvYy9kYXRhc2V0XzA0Y2IyYjVjLWM1NWUtNGZjZC1iMzg4LWQ4OTQyYTE2OTliYy5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvOC84LzkvZGF0YXNldF84ODk2MmM1YS1lN2Q1LTQ5M2MtODU1Zi04ODMzMzE4ZmU1MzUuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzE0YTFiOWI4LTZlZmItNGM0OS1iMDE3LWFhOTFhODgzNGViMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzEyNDIzMzBiXzgzZDNfNDJhN184NjlmXzgxZjM5YjE1NDBkMgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzMvMC84L2RhdGFzZXRfMzA4YTQ5YzgtYTc1MC00MmI4LTk5YTQtOTU2ZmMyODJjN2UyLmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy80L2EvZS9kYXRhc2V0XzRhZWRhOTc2LWYwMDktNDVmMy05NzYyLTk0YTU3ZDU5OTJjOS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNDdjMWU1YzgtMzJmMC00YjdmLTk3ZGUtNThmYzA2NmJmZWE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDEgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNjQ2ZGM4YjVfYzIxOV80MGU2X2ExYWJfMGQyNTZmOTU5NjA1CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMSIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYi82L2QvZGF0YXNldF9iNmQxMjk4OS0wYzI3LTQ3NmEtOTg3Yy1hMDA2YTg4MDFhMDMuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2MvMS9mL2RhdGFzZXRfYzFmMzA5ZjEtNTYyNC00YzBkLWEwOGYtMDlmNjYyYzRjYjgwLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMDcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iYjJiN2UwYS1kYTcyLTRiYjctOGY1Ny1iMjMxNzQxMjM0ODIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMSBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80ZTQzMTk2Y19iMDk3XzRkMmJfYmM2M184NjU0NDc1Yzk2NDYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIxIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9lLzQvYy9kYXRhc2V0X2U0Y2YzZDhlLWFmYjUtNGI1ZC1hYzZkLTA0YWEwYjExMWY0Yi5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYy9hL2UvZGF0YXNldF9jYWViZmFhYS1jODAzLTQxMGYtODllOS0xMjE0YzVmZDMyZmQuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExMC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzUyOGFmZDcwLTU0YjEtNDJlYy05ZTNkLTU1ODFmMzJlODk1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2E3MGQ4MTQwXzc0MGFfNDEwY184MGE2X2I4YTUxYmIzZTI2YgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiIC1wIC1zIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9hLzMvOC9kYXRhc2V0X2EzODhhZGU4LWQzOTgtNDQxZS1iOGRlLTRlZWI5MGJmMGU5NC5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNC8yLzYvZGF0YXNldF80MjY3OTE0NC0yMjNhLTQ2YjgtYTJlYy0wN2FhNmNkZGMyNGMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2M1NTYyYmJmLWMxZmUtNDQwYy1hZGRmLWJlNzc5MjM5YTgwOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDMgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCB0cnVlIGAgfAogICAgICAgfCBzIHwgYCB0cnVlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEVjc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldEVjc0Zyb21GaWxlIC1jZWMgIjIiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9hLzUvNy9kYXRhc2V0X2E1NzBjYzViLTdiMzktNGYxZS1iZDA4LWY1NGM4NTFiMzFhYS5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNC8yLzYvZGF0YXNldF80MjY2NDY1My1mMDIzLTQ1NzUtODRmNi0wNWM3YjE0NDU5NzMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExNi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzU5OWQwMWQ5LTM3ZTctNGNiZi04MWQ2LTY0Y2Q4YWVmOTI1ZC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIHJlYWN0aW9ucyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80OGZmYWY1NF9mYjdhXzQ3NzJfODlkNV85NGY0MTdmOWUyNjEKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZWMgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0RWNzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0RWNzRnJvbUZpbGUgLWNlYyAiMiIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzUvMy85L2RhdGFzZXRfNTM5YWFjNTYtZDdiOS00YmQ3LWJiNzgtYWY1OWI3YWM1ZDNjLmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy85LzYvYS9kYXRhc2V0Xzk2YTIwMmVlLTVjZTAtNGNiMy1hNmExLTAwNjM3NmI0OGViNC5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTE5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMDIwMDg1YjgtMzE3Mi00Mjg1LWE1MDUtYjAzMmEwYWE2NDU3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAxCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgICoqKioqKioqCiAgICAgIFtXYXJuaW5nXUF0dHJpYnV0ZSAiMS4yLjMuNC41IiBub3Qgd2VsbCBmb3JtYXR0ZWQKICAgICAgKioqKioqKioKICAgICAgRXJyb3IgaW4gc2V0dGluZyBFQ3MKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGVjIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEZvcm11bGFzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAtY2YgIjIiIC1jaSAiMSIgICAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZS8zLzQvZGF0YXNldF9lMzQ0YTZhZS0xZTk2LTRlMTktOGY3MS00Mjg5ZjVhZDgyZjAuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvMS9lL2RhdGFzZXRfNDFlMTkzYjUtNzNhMC00NzIxLWI5NDYtYTY5YmNkMzljMGQ4LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zMWRkZWExMC0wNGExLTQ4NDctYTRkMC0wMDdkMmQ2MmRiZGMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83NGZiMDMxOF84YTUyXzRjYjhfOTczN19iNmYyNTBjM2IyOTcKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRGb3JtdWxhc0Zyb21GaWxlIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8xL2QvOC9kYXRhc2V0XzFkODM3ODc1LWM2NDktNDEwOC1iYjc0LTQ1ODMzNTAzODBkMS5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYi9hLzYvZGF0YXNldF9iYTYwZDE4ZS1mM2MyLTQwZTUtOGVlNS1hMzIxOTEwYTJjMmIuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2FmOTdhNjU4LWZiMDYtNDY2ZS1iYTNhLWY4ZDNiZjMyNDQ1My5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMQogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAqKioqKioqKgogICAgICBbV2FybmluZ11BdHRyaWJ1dGUgIjEyQ0g0TyIgbm90IHdlbGwgZm9ybWF0dGVkCiAgICAgICoqKioqKioqCiAgICAgIEVycm9yIGluIFNibWxTZXRGb3JtdWxhCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRHcHJzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0R3Byc0Zyb21GaWxlIC1jZ3ByICIyIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvNC80L2YvZGF0YXNldF80NGZjMTE1Zi1jNzRhLTRmNjYtOGZmOC05ZTBkNzU2ZjE5MTkuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzgvYi82L2RhdGFzZXRfOGI2MmY4MDItY2MzMC00NzlhLTkxNWYtZjhkMGNjYmU5OGU3LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iNmZmM2Q3OC0yZmNmLTQ2MTYtYmYzOS0wM2FmZjUzNDc3MzIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBnZW5lIGFzc29jaWF0aW9ucyBjcmVhdGVkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMTFiYTU3ODRfYTU4Y180NzA3X2JiZmZfNDcxNjBkNTMzYzhjCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGdwciB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMi9mL2UvZGF0YXNldF8yZmUwODRiMy0zYTA2LTRlNmUtODBjNy1hNGFjMGZmOGVkZTEuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzgvNC82L2RhdGFzZXRfODQ2OTdlY2EtM2I4Mi00YWRjLWE5NDItMTNjY2RlMGM2OGZiLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zZDI0OTBiNi02ZDNiLTRlZjgtODI0YS1jNzQzMTllZDY4OTkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80ZDQ4MGI0Nl8zOGYzXzQwNDFfYmQwZl9hYjJhYTg3YTkwZDEKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJSRUFDVElPTiIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2EvMS8yL2RhdGFzZXRfYTEyMjExMjctZjgzYi00NmJkLTkxOTYtZDA5ZmY5M2ZmY2VjLmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9kLzEvYi9kYXRhc2V0X2QxYjBmZGM0LTg4YzUtNDQ5Zi1hODFmLWEyODdiY2Y0ZDAzZS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTM0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDU0MjIzYzctNzg1ZC00OTUzLTg3NjAtMGQ5ZTgwMjhiYjNjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfYTM1NjZiZTZfZGI4NF80NzQ1XzlhNThfODRkYWY1MDQxMTY2CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUkVBQ1RJT04iIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIlBBVEhXQVkiIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9lLzkvZS9kYXRhc2V0X2U5ZTc2M2FjLWQzNzYtNDU3ZS1hOTVhLWQ0NGE1N2U3ZDJlMi5kYXQiIC10YWIgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMC82LzEvZGF0YXNldF8wNjFjNzdlZS0yOGI3LTRiZTctODY4Yy00ZWMwMWI3ZDE3NTIuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEzNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzY0N2JjN2YwLTFhMGItNGZmYy1iNjNlLTM2ZmI1ODM1OTgwYS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUEFUSFdBWSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0SWRzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0SWRzRnJvbUZpbGUgLWNuZXcgIjIiIC1jaSAiMSIgICAtbyAiR0VORSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzUvYS9kL2RhdGFzZXRfNWFkZjdhNGQtNDA1Ni00MjZjLTk5YzQtMDI4ZDI3Y2NjOTExLmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8zLzAvZC9kYXRhc2V0XzMwZDhhZGU5LWY3MmUtNDFjOS1iMjAwLTg3MDNlZTRlZDQ3Yi5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQwL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZWI5YTUxNjktYzUzZC00ODNiLWIzODUtNDhjZjU3N2ViMDY4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJHRU5FIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJDT01QQVJUTUVOVCIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzEvYS8wL2RhdGFzZXRfMWEwN2Q2YWUtZWEwZi00ZDkzLWE0NmEtMGU1MWNlZjdmYTU5LmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9kLzkvNC9kYXRhc2V0X2Q5NDM3MGNlLWYwZmYtNGE3OC1iYzRiLWY4YTZlOWM2MmZmNy5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMzU0YmFhM2QtNWQxMC00YmFjLThiOTktOGMxNjk3MzE4YmNjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJDT01QQVJUTUVOVCIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYS8zLzkvZGF0YXNldF9hMzk2YTA4YS05YWI5LTQxNWItOTNiZi1kYjg5OTg4ZmY0MDguZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2IvNC82L2RhdGFzZXRfYjQ2MWQwZGMtZDJiNS00YzcxLWI5ZTItMTk4YzNiNWFiYmViLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNDYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8yZmQ4YTc1ZS1iYTdjLTRjOTctYWVlMS1kYzVmNzk0NTM0OGUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80NjUzOWI0OF85ODRlXzRiNzVfYWQyZV84OGY5MDM2ZmQwM2YKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIlJFQUNUSU9OIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZS9lLzcvZGF0YXNldF9lZTcwYzNjZi1jMTc0LTQwZTctODc0MC1lMmRkMzliMTNjODguZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzMvZC9mL2RhdGFzZXRfM2RmODU1NDktMTE1Ni00YWE0LTkzNWYtYjE4MGE5MDkzNDhjLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNDkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mOTE4NTIxMy1jOWU4LTQzZmMtOTExOS1kMzlhNDZkZWMwMTUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9lMjhmN2FmOF8xOWFhXzQ4MzVfOGE4MF80ZWUzNTBiNDMxOTYKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJSRUFDVElPTiIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJQQVRIV0FZIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZC80LzEvZGF0YXNldF9kNDE1N2U5Yi1mYTljLTRhOWItODI0NS01NGIyMDUwMWYxZWIuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzcvMy8xL2RhdGFzZXRfNzMxOWI4MmUtYWM1ZC00NzUwLThhZjQtMTNmNzY3MGU2ZTNkLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83ODIzNDNmNy1lZWViLTQyYmUtYTQ3Zi1kZDhmNTY1YjUzOWIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIlBBVEhXQVkiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldE5hbWVzRnJvbUZpbGUgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0TmFtZXNGcm9tRmlsZSAtY25hbWUgIjIiIC1jaSAiMSIgICAtbyAiR0VORSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2QvMC82L2RhdGFzZXRfZDA2ZmVhMWMtMmVhYi00MTYwLThiZmUtZmRkMzU0MmZkYjg4LmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9iLzQvOC9kYXRhc2V0X2I0ODc5NzBkLTQxNDMtNDQ3ZC1iZmJlLTdkMzU0NDE1NDYxOS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTU1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDhmOTczODEtNjFkYS00MmVhLWJlM2QtYTM5ZDBmY2RkZGFlLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJHRU5FIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRQYXRod2F5c0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgLWNwICIyIiAtc2VwICJ8IiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZi9hL2IvZGF0YXNldF9mYWJlYWNhYi04YzU5LTRiYWMtODEwOS1kYzcwYzUwNThhNmQuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvZi82L2RhdGFzZXRfNGY2NDMyN2EtYjg5ZC00Mzk1LWE3NjQtNzE2MWQ0MmFhZTJiLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8xOTQxMGRmYi02ZjU1LTQzYWUtOTAzNC0wMmMzM2JiNzMyODMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMyByZWFjdGlvbnMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfZWIyY2RlZmFfZWQxNV80YTMxXzliYTFfZWUwNzY4OGZmN2EyCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbHAgfCBgICIyIiBgIHwKICAgICAgIHwgc2VwIHwgYCAifCIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAtY3AgIjIiIC1zZXAgIiArICIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzEvYy81L2RhdGFzZXRfMWM1MTk2ZDMtMGI1OS00YzA2LTk4MWUtZmI0NzIxYjFiMDFlLmRhdCIgLXRhYiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy9iLzEvZC9kYXRhc2V0X2IxZDM1MDkxLTlkZjItNDM2OC1iMzE1LTQwYTQzMTI5OTZjOS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTYxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzZmNDQ3NjItYmU5Ny00ZmE0LWFmYjQtOGY5Y2YyZjFhYzA2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDMgcmVhY3Rpb25zIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzhlMmQ4OTZjX2YyNjZfNGQxN19iNWFjX2Q2YzkyOTQyM2I3MQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xwIHwgYCAiMiIgYCB8CiAgICAgICB8IHNlcCB8IGAgIiArICIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFJlZnNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRSZWZzRnJvbUZpbGUgLWNyICIyIiAtcmVmICJJbkNoaSIgLWNpICIxIiAgIC1vICJNRVRBQk9MSVRFIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvYy84L2EvZGF0YXNldF9jOGEzZDk3OC1jOTI2LTRhZTktOTM5YS0zOWRhYTFiMzVjOTkuZGF0IiAtdGFiICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzL2QvMy80L2RhdGFzZXRfZDM0YjI3MjAtMDZiOS00YzY5LTk1MWQtNDU3NTYzYzVhNGVhLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iNWY3MzgzNS04NDVhLTRiYTktOWFhNS0wZmY5YTdkYTYzMDcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9mYzEzZDJiZl80YTI4XzQzNjRfOTViMl83MDk1NDUyNTdjZDIKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sUmVmIHwgYCAiMiIgYCB8CiAgICAgICB8IHJlZiB8IGAgIkluQ2hpIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiTUVUQUJPTElURSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sVG9NZXRhYm9saXRlVGFibGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sVG9NZXRhYm9saXRlVGFibGUgLXMgIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvMS9hLzgvZGF0YXNldF8xYTgzMmFmNi1lYTVkLTQ5OWItYWUwNi02YzhmYzI5ZTBlZjIuZGF0IiAtbyAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE2Ni9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U4YmRkNTQ2LTIyZjEtNDQ2MC05NTI5LTM4YjQyNmY5YzQ3Yi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TY29wZU5ldHdvcmsgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNjb3BlTmV0d29yayAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy80LzEvYi9kYXRhc2V0XzQxYmQ3ZjIxLTQzZDUtNDM5NC04YjliLWI0ODY3MDU0NWYzMS5kYXQiIC1zICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzUvZC85L2RhdGFzZXRfNWQ5NmQyZGMtMTJmNi00YmU4LWI3N2EtNjI2YmJlMmY5NmRkLmRhdCIgLXNjICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzUvMy83L2RhdGFzZXRfNTM3NTZiZGItM2RkMi00NmFiLWExMTctYTNkMDNhZWJlY2NkLmRhdCIgICAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lYzY5YmEzZS03MTU1LTRiMzEtYjVmZC05NWZiYzFjODFjNGIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lYzY5YmEzZS03MTU1LTRiMzEtYjVmZC05NWZiYzFjODFjNGIuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbmNsdWRlU2lkZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvblRvSWdub3JlRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdHJhY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZWVkc0FuZFRhcmdldHMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNlZWRzQW5kVGFyZ2V0cyAtaSAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wL2QvMC9kYXRhc2V0XzBkMGEzYjkxLTI3YjQtNGI4Yy1hNjBjLTI4NTc2ZmIyY2Y5ZS5kYXQiIC1zICAgICAgIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTcyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYWI5ZWZiMmItYzc1ZS00NWFhLTlkMWYtODMwNmI2ODdkNzU4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGlucHV0U2lkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgY29tcCB8IGAgIiIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgc2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlSW50ZXJuYWwgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzgvYy8wL2RhdGFzZXRfOGMwYmZhNTItNWI0Mi00MjRiLTg1MTEtZjZkNjcxMjRjOTE0LmRhdCIgLWMgImUiICAtdCAgICAgLWluIC1vICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTc0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNWZkZDZkODctMDNmNi00ZTk3LThhZWQtYjMzNGJkOTVhZjZkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIENyZWF0aW5nIG5ldHdvcmsuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGlucHV0U2lkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgY29tcCB8IGAgImUiIGAgfAogICAgICAgfCBzb3VyY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzaW5rIHwgYCB0cnVlIGAgfAogICAgICAgfCBub3Rzb3VyY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBub3RzaW5rIHwgYCBmYWxzZSBgIHwKICAgICAgIHwga2VlcElzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlQm9yZW5zdGVpbkFsZyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUludGVybmFsIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzQvZC81L2RhdGFzZXRfNGQ1YzdlYjYtZDIyZS00YTZmLWI5ZjktZjhkMjAzYTE2NDExLmRhdCIgLWMgImUiICAtdCAgICAtQiAgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85NGU5YWNkZS05NWEwLTQ4ZmMtYTkzZS0zZjAwMGYyMDFkODcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiZSIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNpbmsgfCBgIHRydWUgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCB0cnVlIGAgfAogICAgICAgfCB1c2VJbnRlcm5hbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2lkZUNvbXBvdW5kc1NjYW4gKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNpZGVDb21wb3VuZHNTY2FuIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzgvOC8wL2RhdGFzZXRfODgwZGE2MmItMWY5MS00MDlmLTgzNzEtZTEwZjEyYjEyYTA1LmRhdCIgICAtZCAiNDAwIiAgIC1tICJubyIgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mYjA1YTRmOC1lNjM1LTRjOWItYmVmZi1lZGM0MzBlNmFiMGMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICAvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzgvOC8wL2RhdGFzZXRfODgwZGE2MmItMWY5MS00MDlmLTgzNzEtZTEwZjEyYjEyYTA1LmRhdAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBTY2FuaW5nLi4uCiAgICAgIGRvbmUKICAgICAgZm91bmQgNiBzaWRlIGNvbXBvdW5kIGFtb25nIDExMDcgY29tcG91bmRzCiAgICAgIC90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mYjA1YTRmOC1lNjM1LTRjOWItYmVmZi1lZGM0MzBlNmFiMGMuZGF0CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlT25seSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vUmVwb3J0VmFsdWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWdyZWUgfCBgICI0MDAiIGAgfAogICAgICAgfCBkZWdyZWVQcmVjZW50aWxlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgZmxhZ0lub3JnYW5pYyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZsYWdOb0Zvcm11bGEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwYXJhbGxlbEVkZ2UgfCBgICJuYW4iIGAgfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2lkZUNvbXBvdW5kc1NjYW4gKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNpZGVDb21wb3VuZHNTY2FuIC1pICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzEvZS8wL2RhdGFzZXRfMWUwNTdjZGMtYTg5Ny00Y2JiLThmN2UtMmViNTJmODdhNTVlLmRhdCIgIC1pZCAtZCAiNDAwIiAgIC1tICJubyIgLW8gIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lNjM2ZmNjOS0yZjU0LTQxZWEtYjA5OC1mNWVjNDNmYWNlYjcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICAvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzEvZS8wL2RhdGFzZXRfMWUwNTdjZGMtYTg5Ny00Y2JiLThmN2UtMmViNTJmODdhNTVlLmRhdAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBTY2FuaW5nLi4uCiAgICAgIGRvbmUKICAgICAgZm91bmQgNiBzaWRlIGNvbXBvdW5kIGFtb25nIDExMDcgY29tcG91bmRzCiAgICAgIC90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9lNjM2ZmNjOS0yZjU0LTQxZWEtYjA5OC1mNWVjNDNmYWNlYjcuZGF0CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlT25seSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vUmVwb3J0VmFsdWUgfCBgIHRydWUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgIjQwMCIgYCB8CiAgICAgICB8IGRlZ3JlZVByZWNlbnRpbGUgfCBgICJuYW4iIGAgfAogICAgICAgfCBmbGFnSW5vcmdhbmljIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZmxhZ05vRm9ybXVsYSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHBhcmFsbGVsRWRnZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8zLzEvNC9kYXRhc2V0XzMxNDY3YTc2LWM4OTYtNDA2ZS04ZmUzLWU4ODljMjE3NzYwNi5kYXQiIC1pZCAiTkEiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTg3NTM4NGMtMTk5NC00MmY1LWI4YmYtODcwN2MyYTQxMDY4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNmNmY2MxMGJfODNjMl80YzUzXzk4NjdfZmVmZDRiOTlhNmVhCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBhYjU1ZTg2YjVjOTc2NDVkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMiIgLWNmICIzIiAgIC1lICJfYiIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXBzMzJ3dGI0NC9maWxlcy8wLzEvNS9kYXRhc2V0XzAxNWViOTA4LWQ3ZmMtNDE5Ni1iM2NmLTViZWNlNDNhNmE5Ni5kYXQiIC1pZCAiTkEiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcHMzMnd0YjQ0L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTg0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjYyYmI0YWMtYTYyMi00Njc3LWJjMDMtOGQ2MzA0MWY0MmFiLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzU1MDU0MDU3JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfYzZlNzFmNDdfMmNiYl80ZDE2X2E1MTFfM2UzZjMzOGYwNDJkCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIzIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBhYjU1ZTg2YjVjOTc2NDVkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcHMzMnd0YjQ0L2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWkgIi0+IiAtciAiPSIgLWluICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzAvZS9lL2RhdGFzZXRfMGVlYWU5ODYtMzU4Zi00ZjQwLTk5NDItMWZlYzczNzdiOGEzLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMjZhYjdiOC05ZDkzLTQyMjgtOGUzZS0zYTFiZGRkZTJmZGYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF82ZWE2MTNmYl8zYmRlXzQ4MDBfOWQ0MV81MDdmZTE1NmYwZGMKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0+IiBgIHwKICAgICAgIHwgciB8IGAgIj0iIGAgfAogICAgICAgfCBpZCB8IGAgYWI1NWU4NmI1Yzk3NjQ1ZCBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXBzMzJ3dGI0NC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVGFiMlNibWwgKFRlc3QgIzQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5UYWIyU2JtbCAtY2kgIjEiIC1jZiAiMiIgLXJwIC1tcCAtZSAiX2UiIC1pICItLT4iIC1yICI8PT0+IiAtaW4gIi90bXAvdG1wczMyd3RiNDQvZmlsZXMvZi9jLzQvZGF0YXNldF9mYzQwODE1Ni05YWFiLTQxZDMtYWVkNC0wMWY4Mzk3N2FkOWYuZGF0IiAtaWQgIk5BIiAtY3B0IC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wczMyd3RiNDQvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMTk4MmVhNS01YmE2LTQzY2MtOTJjZi02NGViNTUzZjgwYmEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNTUwNTQwNTcnIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF84YTE4OGI2NV8yYjYwXzRhODRfYmVkM19kMmJmNTRlNGYyNjgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbXAgfCBgIHRydWUgYCB8CiAgICAgICB8IGUgfCBgICJfZSIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBhYjU1ZTg2YjVjOTc2NDVkIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcHMzMnd0YjQ0L2ZpbGVzLzAvYy9kL2RhdGFzZXRfMGNkYjQ1ZGMtMTVlMy00YzZkLTgyYWMtY2M5NzJhOTA1NWJiLmRhdCIgLWlkICJteU1vZGVsIiAgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXBzMzJ3dGI0NC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE5MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg5YTIxOGY3LTIwNDYtNGViNC1iOGRlLWExOTNiN2JiOWYwOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1NTA1NDA1NycgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgbXlNb2RlbAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgNTJlMGY4NmU4NTViMjgxYjlkNTI5Mjc4Y2FkMWFlOTYgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wczMyd3RiNDQvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgo8L2RldGFpbHM+Cg==')); + 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==')); </script> </body> </html> \ No newline at end of file