PD9waHAKLyoqCiAqIE1vbmFsw6kg4oCUIFRpZW5kYSwgRmF2b3JpdG9zIHkgUXVpY2t2aWV3IChBSkFYKS4KICogU2hvcnRjb2RlczogW21vbmFsZV9zaG9wXSwgW21vbmFsZV9mYXZvcml0ZXNdCiAqLwoKaWYgKCAhIGRlZmluZWQoICdBQlNQQVRIJyApICkgeyBleGl0OyB9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBIZWxwZXJzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpmdW5jdGlvbiBtb25hbGVfc2hvcF9pbWcoICRwcm9kdWN0X2lkICkgewoJJHVybCA9IGdldF9wb3N0X21ldGEoICRwcm9kdWN0X2lkLCAnX21vbmFsZV9pbWdfdXJsJywgdHJ1ZSApOwoJaWYgKCAkdXJsICkgeyByZXR1cm4gJHVybDsgfQoJJHQgPSBnZXRfdGhlX3Bvc3RfdGh1bWJuYWlsX3VybCggJHByb2R1Y3RfaWQsICdsYXJnZScgKTsKCXJldHVybiAkdCA/OiAnaHR0cHM6Ly9pbWFnZXMucGV4ZWxzLmNvbS9waG90b3MvMTc3MTk4NzkvcGV4ZWxzLXBob3RvLTE3NzE5ODc5LmpwZWc/dz04MDAmaD0xMDAwJmZpdD1jcm9wJmF1dG89Y29tcHJlc3MmY3M9dGlueXNyZ2InOwp9CgpmdW5jdGlvbiBtb25hbGVfbW9uZXkoICRhbW91bnQgKSB7CglyZXR1cm4gJyQnIC4gbnVtYmVyX2Zvcm1hdCggKGZsb2F0KSAkYW1vdW50LCAwLCAnLicsICcsJyApOwp9CgpmdW5jdGlvbiBtb25hbGVfY29sb3JfaGV4KCAkc2x1ZyApIHsKCSRtYXAgPSBbCgkJJ3Jvc2EtcGFsbycgICAgICA9PiAnI0Q0OTI5QScsICdyb3NhLWNsYXJvJyAgID0+ICcjRjVENUQ4JywKCQkncm9zYS1ibHVzaCcgICAgID0+ICcjRTlDMkM3JywgJ3Jvc2Etc29mdCcgICAgPT4gJyNFOUI2QkInLAoJCSdsaWxhJyAgICAgICAgICAgPT4gJyM5RTdBOUUnLCAnbGlsYS1jbGFybycgICA9PiAnI0VERTBFRCcsCgkJJ21vcmFkbycgICAgICAgICA9PiAnIzhFNUJBMCcsICdtYWdlbnRhJyAgICAgID0+ICcjQjUzMzg5JywKCQknYnVnYW1iaWxpYScgICAgID0+ICcjQjYzMjhBJywKCQknbnVkZScgICAgICAgICAgID0+ICcjQjg5NjdFJywgJ251ZGUtY2xhcm8nICAgPT4gJyNGMEU0REEnLAoJCSdjYW1lbCcgICAgICAgICAgPT4gJyNDMTlBN0MnLCAnY2FmZScgICAgICAgICA9PiAnIzg3NkI1QycsCgkJJ2JsYW5jbycgICAgICAgICA9PiAnI0ZGRkZGRicsICduZWdybycgICAgICAgID0+ICcjMkMxRjFGJywKCQknaXZvcnknICAgICAgICAgID0+ICcjRjFFNUQwJywKCQknYXp1bC1jaWVsbycgICAgID0+ICcjQTdDN0U3JywgJ2F6dWwtcG9sdm8nICAgPT4gJyNBNEI1Q0MnLAoJCSdjZWxlc3RlJyAgICAgICAgPT4gJyNCNkQwRTgnLAoJCSd2ZXJkZS1zYWdlJyAgICAgPT4gJyNCNUM5QTknLCAndmVyZGUtbGltYScgICA9PiAnI0M3REI3NicsCgkJJ3ZlcmRlLW9saXZvJyAgICA9PiAnIzZCN0EzQicsICd2ZXJkZS10dXJxdWVzYSc9PiAnIzg4QjdCMCcsCgkJJ3ZlcmRlLXNvZnQnICAgICA9PiAnI0IwQzlBOCcsCgldOwoJcmV0dXJuICRtYXBbICRzbHVnIF0gPz8gJyNEREREREQnOwp9CgpmdW5jdGlvbiBtb25hbGVfY2xlYW4oICRodG1sICkgewoJJGh0bWwgPSBwcmVnX3JlcGxhY2UoICcvPCEtLS4qPy0tPi9zJywgJycsICRodG1sICk7CgkkaHRtbCA9IHByZWdfcmVwbGFjZSggJy8+XHMrPC9zJywgJz48JywgJGh0bWwgKTsKCXJldHVybiB0cmltKCAkaHRtbCApOwp9CgovKiogQmxvcXVlIGNvcmUvc2hvcnRjb2RlIHNpbiB3cGF1dG9wICovCmFkZF9hY3Rpb24oICdpbml0JywgZnVuY3Rpb24oKSB7CglpZiAoIFdQX0Jsb2NrX1R5cGVfUmVnaXN0cnk6OmdldF9pbnN0YW5jZSgpLT5pc19yZWdpc3RlcmVkKCAnY29yZS9zaG9ydGNvZGUnICkgKSB7CgkJdW5yZWdpc3Rlcl9ibG9ja190eXBlKCAnY29yZS9zaG9ydGNvZGUnICk7Cgl9CglyZWdpc3Rlcl9ibG9ja190eXBlKCAnY29yZS9zaG9ydGNvZGUnLCBbCgkJJ3JlbmRlcl9jYWxsYmFjaycgPT4gZnVuY3Rpb24oICRhdHRyaWJ1dGVzLCAkY29udGVudCApIHsgcmV0dXJuIGRvX3Nob3J0Y29kZSggJGNvbnRlbnQgKTsgfSwKCV0gKTsKfSwgMjAgKTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEVucXVldWUgSlMgKyBsb2NhbGl6ZQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwphZGRfYWN0aW9uKCAnd3BfZW5xdWV1ZV9zY3JpcHRzJywgZnVuY3Rpb24oKSB7Cgkkc2hvcF9qc19wYXRoID0gZ2V0X3RoZW1lX2ZpbGVfcGF0aCggJ2Fzc2V0cy9zaG9wLmpzJyApOwoJd3BfZW5xdWV1ZV9zY3JpcHQoCgkJJ21vbmFsZS1zaG9wJywKCQlnZXRfdGhlbWVfZmlsZV91cmkoICdhc3NldHMvc2hvcC5qcycgKSwKCQlbXSwKCQlmaWxlX2V4aXN0cyggJHNob3BfanNfcGF0aCApID8gZmlsZW10aW1lKCAkc2hvcF9qc19wYXRoICkgOiAnMS4wLjAnLAoJCXRydWUKCSk7Cgl3cF9sb2NhbGl6ZV9zY3JpcHQoICdtb25hbGUtc2hvcCcsICdNb25hbGVTaG9wJywgWwoJCSdhamF4JyAgICAgICA9PiBhZG1pbl91cmwoICdhZG1pbi1hamF4LnBocCcgKSwKCQknbm9uY2UnICAgICAgPT4gd3BfY3JlYXRlX25vbmNlKCAnbW9uYWxlX3Nob3AnICksCgkJJ2NhcnRfY291bnQnID0+IGZ1bmN0aW9uX2V4aXN0cyggJ1dDJyApICYmIFdDKCktPmNhcnQgPyBXQygpLT5jYXJ0LT5nZXRfY2FydF9jb250ZW50c19jb3VudCgpIDogMCwKCQknY2FydF91cmwnICAgPT4gZnVuY3Rpb25fZXhpc3RzKCAnd2NfZ2V0X2NhcnRfdXJsJyApID8gd2NfZ2V0X2NhcnRfdXJsKCkgOiBob21lX3VybCggJy9jYXJyaXRvJyApLAoJXSApOwp9LCAyMCApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ2FyZCByZW5kZXIgKGVzdHJ1Y3R1cmEgaWTDqW50aWNhIGFsIG1vY2t1cCkKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbW9uYWxlX3JlbmRlcl9wcm9kdWN0X2NhcmQoICRwcm9kdWN0X2lkICkgewoJJGltZyAgICAgPSBtb25hbGVfc2hvcF9pbWcoICRwcm9kdWN0X2lkICk7CgkkdGl0bGUgICA9IGdldF90aGVfdGl0bGUoICRwcm9kdWN0X2lkICk7CgkkcGVybSAgICA9IGdldF9wZXJtYWxpbmsoICRwcm9kdWN0X2lkICk7CgkkcmVndWxhciA9IChmbG9hdCkgZ2V0X3Bvc3RfbWV0YSggJHByb2R1Y3RfaWQsICdfcmVndWxhcl9wcmljZScsIHRydWUgKTsKCSRzYWxlICAgID0gZ2V0X3Bvc3RfbWV0YSggJHByb2R1Y3RfaWQsICdfc2FsZV9wcmljZScsIHRydWUgKTsKCSRwcmljZSAgID0gJHNhbGUgPyAoZmxvYXQpICRzYWxlIDogJHJlZ3VsYXI7Cgkkc2FsZXMgICA9IChpbnQpIGdldF9wb3N0X21ldGEoICRwcm9kdWN0X2lkLCAndG90YWxfc2FsZXMnLCB0cnVlICk7CgoJJGNhdHMgICAgPSB3cF9nZXRfcG9zdF90ZXJtcyggJHByb2R1Y3RfaWQsICdwcm9kdWN0X2NhdCcsIFsgJ2ZpZWxkcycgPT4gJ25hbWVzJyBdICk7CgkkY2F0ICAgICA9ICRjYXRzID8gJGNhdHNbMF0gOiAnTW9uYWzDqSc7CgoJJGNvbG9ycyAgPSB3cF9nZXRfcG9zdF90ZXJtcyggJHByb2R1Y3RfaWQsICdwYV9jb2xvcicgKTsKCWlmICggaXNfd3BfZXJyb3IoICRjb2xvcnMgKSB8fCAhIGlzX2FycmF5KCAkY29sb3JzICkgKSB7ICRjb2xvcnMgPSBbXTsgfQoJJHRhbGxhcyAgPSB3cF9nZXRfcG9zdF90ZXJtcyggJHByb2R1Y3RfaWQsICdwYV90YWxsYScgKTsKCWlmICggaXNfd3BfZXJyb3IoICR0YWxsYXMgKSB8fCAhIGlzX2FycmF5KCAkdGFsbGFzICkgKSB7ICR0YWxsYXMgPSBbXTsgfQoJJGhhdmUgICAgPSB3cF9saXN0X3BsdWNrKCAkdGFsbGFzLCAnbmFtZScgKTsKCgkkYmFkZ2UgPSAnJzsKCWlmICggJHNhbGUgKSB7CgkJJGJhZGdlID0gJzxzcGFuIGNsYXNzPSJwcm9kdWN0LWJhZGdlIj5PZmVydGE8L3NwYW4+JzsKCX0gZWxzZWlmICggJHNhbGVzID49IDI1ICkgewoJCSRiYWRnZSA9ICc8c3BhbiBjbGFzcz0icHJvZHVjdC1iYWRnZSI+QmVzdCBTZWxsZXI8L3NwYW4+JzsKCX0gZWxzZWlmICggKCB0aW1lKCkgLSBnZXRfcG9zdF90aW1lKCAnVScsIHRydWUsICRwcm9kdWN0X2lkICkgKSA8ICggMzAgKiBEQVlfSU5fU0VDT05EUyApICkgewoJCSRiYWRnZSA9ICc8c3BhbiBjbGFzcz0icHJvZHVjdC1iYWRnZSBuZXciPk51ZXZvPC9zcGFuPic7Cgl9CgoJb2Jfc3RhcnQoKTsgPz4KCTxhcnRpY2xlIGNsYXNzPSJwcm9kdWN0LWNhcmQiIHJvbGU9Imxpc3RpdGVtIiBkYXRhLXBpZD0iPD9waHAgZWNobyAoaW50KSAkcHJvZHVjdF9pZDsgPz4iPgoJCTw/cGhwIGVjaG8gJGJhZGdlOyA/PgoJCTxidXR0b24gY2xhc3M9InByb2R1Y3Qtd2lzaGxpc3QiIGFyaWEtbGFiZWw9IkFncmVnYXIgPD9waHAgZWNobyBlc2NfYXR0ciggJHRpdGxlICk7ID8+IGEgZmF2b3JpdG9zIiB0eXBlPSJidXR0b24iPgoJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTIwLjg0IDQuNjFhNS41IDUuNSAwIDAgMC03Ljc4IDBMMTIgNS42N2wtMS4wNi0xLjA2YTUuNSA1LjUgMCAwIDAtNy43OCA3Ljc4bDEuMDYgMS4wNkwxMiAyMS4yM2w3Ljc4LTcuNzggMS4wNi0xLjA2YTUuNSA1LjUgMCAwIDAgMC03Ljc4eiIvPjwvc3ZnPgoJCTwvYnV0dG9uPgoJCTxkaXYgY2xhc3M9InByb2R1Y3QtaW1hZ2UiPgoJCQk8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoICRwZXJtICk7ID8+IiBjbGFzcz0icHJvZHVjdC1pbWFnZS1saW5rIiBhcmlhLWxhYmVsPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkdGl0bGUgKTsgPz4iPgoJCQkJPD9waHAgZWNobyBtb25hbGVfaW1nKCAkaW1nLCAkdGl0bGUsIDYwMCwgODAwLCAnKG1heC13aWR0aDogNjAwcHgpIDEwMHZ3LCAobWF4LXdpZHRoOiAxMDI0cHgpIDUwdncsIDMzdncnICk7ID8+CgkJCTwvYT4KCQkJPGRpdiBjbGFzcz0icHJvZHVjdC1xdWlja3ZpZXciPgoJCQkJPGJ1dHRvbiBjbGFzcz0iYnRuLXF1aWNrdmlldyIgdHlwZT0iYnV0dG9uIiBkYXRhLXF1aWNrdmlldz0iPD9waHAgZWNobyAoaW50KSAkcHJvZHVjdF9pZDsgPz4iPgoJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNMSAxMnM0LTggMTEtOCAxMSA4IDExIDgtNCA4LTExIDgtMTEtOC0xMS04eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4KCQkJCQlWaXN0YSByw6FwaWRhCgkJCQk8L2J1dHRvbj4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0icHJvZHVjdC1pbmZvIj4KCQkJPGRpdiBjbGFzcz0icHJvZHVjdC1jYXRlZ29yeS1sYWJlbCI+PD9waHAgZWNobyBlc2NfaHRtbCggJGNhdCApOyA/PjwvZGl2PgoJCQk8aDMgY2xhc3M9InByb2R1Y3QtbmFtZSI+PGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkcGVybSApOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCggJHRpdGxlICk7ID8+PC9hPjwvaDM+CgkJCTxkaXYgY2xhc3M9InByb2R1Y3Qtc2l6ZXMiPgoJCQkJPD9waHAKCQkJCSRhbGxfc2l6ZXMgPSBbICdTJywgJ00nLCAnTCcsICdYTCcsICcxWEwnLCAnMlhMJywgJzNYTCcgXTsKCQkJCSRzaG93ID0gYXJyYXlfdmFsdWVzKCBhcnJheV91bmlxdWUoIGFycmF5X21lcmdlKAoJCQkJCWFycmF5X2ZpbHRlciggJGFsbF9zaXplcywgZnVuY3Rpb24oICRzICkgdXNlICggJGhhdmUgKSB7IHJldHVybiBpbl9hcnJheSggJHMsIFsgJ1MnLCAnTScsICdMJywgJ1hMJyBdLCB0cnVlICkgfHwgaW5fYXJyYXkoICRzLCAkaGF2ZSwgdHJ1ZSApOyB9ICksCgkJCQkJJGhhdmUKCQkJCSkgKSApOwoJCQkJJHNob3cgPSBhcnJheV92YWx1ZXMoIGFycmF5X2ludGVyc2VjdCggJGFsbF9zaXplcywgJHNob3cgKSApOwoJCQkJZm9yZWFjaCAoICRzaG93IGFzICR0ICkgOgoJCQkJCSRvdXQgPSAhIGluX2FycmF5KCAkdCwgJGhhdmUsIHRydWUgKTsgPz4KCQkJCQk8c3BhbiBjbGFzcz0ic2l6ZS10YWcgPD9waHAgZWNobyAkb3V0ID8gJ291dCcgOiAnJzsgPz4iPjw/cGhwIGVjaG8gJHQ7ID8+PC9zcGFuPgoJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJPC9kaXY+CgkJCTxkaXYgY2xhc3M9InByb2R1Y3QtY29sb3JzIiByb2xlPSJyYWRpb2dyb3VwIiBhcmlhLWxhYmVsPSJDb2xvcmVzIGRpc3BvbmlibGVzIj4KCQkJCTw/cGhwIGZvcmVhY2ggKCAkY29sb3JzIGFzICRpID0+ICRjICkgOgoJCQkJCSRoZXggPSBtb25hbGVfY29sb3JfaGV4KCAkYy0+c2x1ZyApOwoJCQkJCSRzaCAgPSAoICRjLT5zbHVnID09PSAnYmxhbmNvJyApID8gJ2JveC1zaGFkb3c6MCAwIDAgMXB4ICNjY2M7JyA6ICcnOyA/PgoJCQkJCTxzcGFuIGNsYXNzPSJjb2xvci1kb3QgPD9waHAgZWNobyAkaSA9PT0gMCA/ICdhY3RpdmUnIDogJyc7ID8+IgoJCQkJCSAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiA8P3BocCBlY2hvIGVzY19hdHRyKCAkaGV4ICk7ID8+OyA8P3BocCBlY2hvIGVzY19hdHRyKCAkc2ggKTsgPz4iCgkJCQkJICAgICAgYXJpYS1sYWJlbD0iPD9waHAgZWNobyBlc2NfYXR0ciggJGMtPm5hbWUgKTsgPz4iPjwvc3Bhbj4KCQkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CgkJCQk8ZGl2IGNsYXNzPSJwcm9kdWN0LXByaWNlIj48P3BocCBlY2hvIG1vbmFsZV9tb25leSggJHByaWNlICk7ID8+IDxzcGFuIGNsYXNzPSJjdXJyZW5jeSI+TVhOPC9zcGFuPjwvZGl2PgoJCQkJPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkcGVybSApOyA/PiIgY2xhc3M9ImJ0bi1hZGQtY2FydCBtbi12aWV3LWJ0biIgYXJpYS1sYWJlbD0iVmVyIDw/cGhwIGVjaG8gZXNjX2F0dHIoICR0aXRsZSApOyA/PiI+CgkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLTh6Ii8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIvPjwvc3ZnPgoJCQkJCVZlciBwcm9kdWN0bwoJCQkJPC9hPgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTwvYXJ0aWNsZT4KCTw/cGhwCglyZXR1cm4gb2JfZ2V0X2NsZWFuKCk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFF1ZXJ5IGJ1aWxkZXIgKyBncmlkIHJlbmRlcmVyICh1c2FkbyBwb3Igc2hvcnRjb2RlIHkgQUpBWCkKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbW9uYWxlX3F1ZXJ5X3Byb2R1Y3RzKCAkcGFyYW1zLCAkcGVyX3BhZ2UgPSAxMiApIHsKCSRsb2NrX2NhdCA9IHNhbml0aXplX3RpdGxlKCAkcGFyYW1zWydsb2NrX2NhdCddID8/ICcnICk7IC8vIGNhdGVnb3LDrWEgZmlqYSAoYXJjaGl2ZSkKCSRjYXQgICAgPSBzYW5pdGl6ZV90aXRsZSggJHBhcmFtc1snY2F0J10gICAgPz8gJycgKTsKCSRjb2xvciAgPSBzYW5pdGl6ZV90aXRsZSggJHBhcmFtc1snY29sb3InXSAgPz8gJycgKTsKCSR0YWxsYSAgPSBzYW5pdGl6ZV90aXRsZSggJHBhcmFtc1sndGFsbGEnXSAgPz8gJycgKTsKCSRtYXggICAgPSAoaW50KSAgICAgICAgICAgICggJHBhcmFtc1snbWF4J10gICAgPz8gMCApOwoJJG9yZGVyYnk9IHNhbml0aXplX2tleSggICAgJHBhcmFtc1snb3JkZXJieSddPz8gJ3BvcHVsYXJpdHknICk7Cgkkc2VhcmNoID0gc2FuaXRpemVfdGV4dF9maWVsZCggJHBhcmFtc1sncSddICA/PyAnJyApOwoJJHBhZ2VkICA9IG1heCggMSwgKGludCkgKCAkcGFyYW1zWydwZyddID8/IDEgKSApOwoKCSR0YXggPSBbXTsKCS8vIExhIGNhdGVnb3LDrWEgZmlqYWRhIChhcmNoaXZlKSBzaWVtcHJlIHNlIGFwbGljYTsgImNhdCIgbm9ybWFsIHB1ZWRlIGHDsWFkaXJzZSBhZGVtw6FzLgoJJGVmZmVjdGl2ZV9jYXQgPSAkbG9ja19jYXQgPzogJGNhdDsKCWlmICggJGVmZmVjdGl2ZV9jYXQgKSB7ICR0YXhbXSA9IFsgJ3RheG9ub215JyA9PiAncHJvZHVjdF9jYXQnLCAnZmllbGQnID0+ICdzbHVnJywgJ3Rlcm1zJyA9PiAkZWZmZWN0aXZlX2NhdCBdOyB9CglpZiAoICRjb2xvciApIHsgJHRheFtdID0gWyAndGF4b25vbXknID0+ICdwYV9jb2xvcicsICAgICdmaWVsZCcgPT4gJ3NsdWcnLCAndGVybXMnID0+ICRjb2xvciBdOyB9CglpZiAoICR0YWxsYSApIHsgJHRheFtdID0gWyAndGF4b25vbXknID0+ICdwYV90YWxsYScsICAgICdmaWVsZCcgPT4gJ3NsdWcnLCAndGVybXMnID0+ICR0YWxsYSBdOyB9CglpZiAoIGNvdW50KCAkdGF4ICkgPiAxICkgeyAkdGF4WydyZWxhdGlvbiddID0gJ0FORCc7IH0KCgkkbWV0YSA9IFtdOwoJaWYgKCAkbWF4ID4gMCApIHsgJG1ldGFbXSA9IFsgJ2tleScgPT4gJ19wcmljZScsICd2YWx1ZScgPT4gJG1heCwgJ2NvbXBhcmUnID0+ICc8PScsICd0eXBlJyA9PiAnTlVNRVJJQycgXTsgfQoKCSRvcmRlciA9IFsgJ29yZGVyYnknID0+ICdtZXRhX3ZhbHVlX251bSBkYXRlJywgJ21ldGFfa2V5JyA9PiAndG90YWxfc2FsZXMnLCAnb3JkZXInID0+ICdERVNDJyBdOwoJaWYgKCAkb3JkZXJieSA9PT0gJ3ByaWNlJyApICAgICAgICAgIHsgJG9yZGVyID0gWyAnb3JkZXJieScgPT4gJ21ldGFfdmFsdWVfbnVtJywgJ21ldGFfa2V5JyA9PiAnX3ByaWNlJywgJ29yZGVyJyA9PiAnQVNDJyBdOyB9CgllbHNlaWYgKCAkb3JkZXJieSA9PT0gJ3ByaWNlLWRlc2MnICkgeyAkb3JkZXIgPSBbICdvcmRlcmJ5JyA9PiAnbWV0YV92YWx1ZV9udW0nLCAnbWV0YV9rZXknID0+ICdfcHJpY2UnLCAnb3JkZXInID0+ICdERVNDJyBdOyB9CgllbHNlaWYgKCAkb3JkZXJieSA9PT0gJ2RhdGUnICkgICAgICAgeyAkb3JkZXIgPSBbICdvcmRlcmJ5JyA9PiAnZGF0ZScsICdvcmRlcicgPT4gJ0RFU0MnIF07IH0KCWVsc2VpZiAoICRvcmRlcmJ5ID09PSAndGl0bGUnICkgICAgICB7ICRvcmRlciA9IFsgJ29yZGVyYnknID0+ICd0aXRsZScsICdvcmRlcicgPT4gJ0FTQycgXTsgfQoKCXJldHVybiBuZXcgV1BfUXVlcnkoIGFycmF5X21lcmdlKCBbCgkJJ3Bvc3RfdHlwZScgICAgICA9PiAncHJvZHVjdCcsCgkJJ3Bvc3Rfc3RhdHVzJyAgICA9PiAncHVibGlzaCcsCgkJJ3Bvc3RzX3Blcl9wYWdlJyA9PiAkcGVyX3BhZ2UsCgkJJ3BhZ2VkJyAgICAgICAgICA9PiAkcGFnZWQsCgkJJ3MnICAgICAgICAgICAgICA9PiAkc2VhcmNoLAoJCSd0YXhfcXVlcnknICAgICAgPT4gJHRheCwKCQknbWV0YV9xdWVyeScgICAgID0+ICRtZXRhLAoJXSwgJG9yZGVyICkgKTsKfQoKZnVuY3Rpb24gbW9uYWxlX3JlbmRlcl9ncmlkKCAkcXVlcnksICRjdXJyZW50X3BhZ2UgPSAxICkgewoJaWYgKCAhICRxdWVyeS0+aGF2ZV9wb3N0cygpICkgewoJCXJldHVybiAnPGRpdiBjbGFzcz0ibW4tZW1wdHkiPjxoMz5ObyBlbmNvbnRyYW1vcyBwcm9kdWN0b3M8L2gzPjxwPlBydWViYSBhanVzdGFuZG8gbG9zIGZpbHRyb3MuPC9wPjwvZGl2Pic7Cgl9Cgkkb3V0ID0gJzxkaXYgY2xhc3M9InByb2R1Y3RzLWdyaWQiIHJvbGU9Imxpc3QiIGFyaWEtbGFiZWw9Ikxpc3RhIGRlIHByb2R1Y3RvcyI+JzsKCXdoaWxlICggJHF1ZXJ5LT5oYXZlX3Bvc3RzKCkgKSB7ICRxdWVyeS0+dGhlX3Bvc3QoKTsgJG91dCAuPSBtb25hbGVfcmVuZGVyX3Byb2R1Y3RfY2FyZCggZ2V0X3RoZV9JRCgpICk7IH0KCXdwX3Jlc2V0X3Bvc3RkYXRhKCk7Cgkkb3V0IC49ICc8L2Rpdj4nOwoJJHRvdGFsX3BhZ2VzID0gKGludCkgJHF1ZXJ5LT5tYXhfbnVtX3BhZ2VzOwoJaWYgKCAkY3VycmVudF9wYWdlIDwgJHRvdGFsX3BhZ2VzICkgewoJCSRvdXQgLj0gJzxkaXYgY2xhc3M9Im1uLWxvYWRtb3JlIiBkYXRhLW1uLWxvYWRtb3JlIGRhdGEtcGc9IicgLiBlc2NfYXR0ciggJGN1cnJlbnRfcGFnZSApIC4gJyIgZGF0YS10b3RhbC1wYWdlcz0iJyAuIGVzY19hdHRyKCAkdG90YWxfcGFnZXMgKSAuICciIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHggMDt3aWR0aDoxMDAlIj48c3BhbiBjbGFzcz0ibW4tbG9hZG1vcmUtc3Bpbm5lciIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDozMnB4O2hlaWdodDozMnB4O2JvcmRlcjozcHggc29saWQgI2U3ZDRkODtib3JkZXItdG9wLWNvbG9yOiM5RTdBOUU7Ym9yZGVyLXJhZGl1czo1MCU7YW5pbWF0aW9uOm1uLXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGUiPjwvc3Bhbj48L2Rpdj4nOwoJCSRvdXQgLj0gJzxzdHlsZT5Aa2V5ZnJhbWVzIG1uLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX08L3N0eWxlPic7Cgl9CglyZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gbW9uYWxlX3JlbmRlcl9ncmlkX2NhcmRzX29ubHkoICRxdWVyeSApIHsKCWlmICggISAkcXVlcnktPmhhdmVfcG9zdHMoKSApIHsgcmV0dXJuICcnOyB9Cgkkb3V0ID0gJyc7Cgl3aGlsZSAoICRxdWVyeS0+aGF2ZV9wb3N0cygpICkgeyAkcXVlcnktPnRoZV9wb3N0KCk7ICRvdXQgLj0gbW9uYWxlX3JlbmRlcl9wcm9kdWN0X2NhcmQoIGdldF90aGVfSUQoKSApOyB9Cgl3cF9yZXNldF9wb3N0ZGF0YSgpOwoJcmV0dXJuICRvdXQ7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFKQVg6IGZpbHRyYXIgcHJvZHVjdG9zCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmFkZF9hY3Rpb24oICd3cF9hamF4X21vbmFsZV9maWx0ZXInLCAgICAgICAgJ21vbmFsZV9hamF4X2ZpbHRlcicgKTsKYWRkX2FjdGlvbiggJ3dwX2FqYXhfbm9wcml2X21vbmFsZV9maWx0ZXInLCAnbW9uYWxlX2FqYXhfZmlsdGVyJyApOwpmdW5jdGlvbiBtb25hbGVfYWpheF9maWx0ZXIoKSB7CgljaGVja19hamF4X3JlZmVyZXIoICdtb25hbGVfc2hvcCcsICdub25jZScgKTsKCSRjdHggICAgPSBpc3NldCggJF9QT1NUWydjdHgnXSApID8gc2FuaXRpemVfa2V5KCAkX1BPU1RbJ2N0eCddICkgOiAnc2hvcCc7CgkkcGVyICAgID0gJGN0eCA9PT0gJ2hvbWUnID8gOCA6IDEyOwoJJGFwcGVuZCA9ICEgZW1wdHkoICRfUE9TVFsnYXBwZW5kJ10gKTsKCSRwZyAgICAgPSBtYXgoIDEsIChpbnQpICggJF9QT1NUWydwZyddID8/IDEgKSApOwoJJHEgICAgICA9IG1vbmFsZV9xdWVyeV9wcm9kdWN0cyggJF9QT1NULCAkcGVyICk7CgkkcmVzcCAgID0gWwoJCSdjb3VudCcgICAgICAgID0+IChpbnQpICRxLT5mb3VuZF9wb3N0cywKCQkncGcnICAgICAgICAgICA9PiAkcGcsCgkJJ3RvdGFsX3BhZ2VzJyAgPT4gKGludCkgJHEtPm1heF9udW1fcGFnZXMsCgkJJ2hhc19tb3JlJyAgICAgPT4gJHBnIDwgKGludCkgJHEtPm1heF9udW1fcGFnZXMsCgldOwoJaWYgKCAkYXBwZW5kICkgewoJCSRyZXNwWydodG1sJ10gPSBtb25hbGVfcmVuZGVyX2dyaWRfY2FyZHNfb25seSggJHEgKTsKCX0gZWxzZSB7CgkJJHJlc3BbJ2h0bWwnXSA9IG1vbmFsZV9yZW5kZXJfZ3JpZCggJHEsICRwZyApOwoJfQoJd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoICRyZXNwICk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFKQVg6IHF1aWNrdmlldwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwphZGRfYWN0aW9uKCAnd3BfYWpheF9tb25hbGVfcXVpY2t2aWV3JywgICAgICAgICdtb25hbGVfYWpheF9xdWlja3ZpZXcnICk7CmFkZF9hY3Rpb24oICd3cF9hamF4X25vcHJpdl9tb25hbGVfcXVpY2t2aWV3JywgJ21vbmFsZV9hamF4X3F1aWNrdmlldycgKTsKZnVuY3Rpb24gbW9uYWxlX2FqYXhfcXVpY2t2aWV3KCkgewoJY2hlY2tfYWpheF9yZWZlcmVyKCAnbW9uYWxlX3Nob3AnLCAnbm9uY2UnICk7CgkkcGlkID0gYWJzaW50KCAkX1BPU1RbJ3BpZCddID8/IDAgKTsKCSRwcm9kdWN0ID0gZ2V0X3Bvc3QoICRwaWQgKTsKCWlmICggISAkcHJvZHVjdCB8fCAkcHJvZHVjdC0+cG9zdF90eXBlICE9PSAncHJvZHVjdCcgKSB7CgkJd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnUHJvZHVjdG8gbm8gZW5jb250cmFkbycgXSApOwoJfQoKCSRpbWcgICAgID0gbW9uYWxlX3Nob3BfaW1nKCAkcGlkICk7CgkkdGl0bGUgICA9IGdldF90aGVfdGl0bGUoICRwaWQgKTsKCSRwZXJtICAgID0gZ2V0X3Blcm1hbGluayggJHBpZCApOwoJJHJlZ3VsYXIgPSAoZmxvYXQpIGdldF9wb3N0X21ldGEoICRwaWQsICdfcmVndWxhcl9wcmljZScsIHRydWUgKTsKCSRzYWxlICAgID0gZ2V0X3Bvc3RfbWV0YSggJHBpZCwgJ19zYWxlX3ByaWNlJywgdHJ1ZSApOwoJJHByaWNlICAgPSAkc2FsZSA/IChmbG9hdCkgJHNhbGUgOiAkcmVndWxhcjsKCSRleGNlcnB0ID0gJHByb2R1Y3QtPnBvc3RfZXhjZXJwdCA/OiB3cF90cmltX3dvcmRzKCAkcHJvZHVjdC0+cG9zdF9jb250ZW50LCAzMCApOwoJJGNvbnRlbnQgPSB3cF9zdHJpcF9hbGxfdGFncyggJHByb2R1Y3QtPnBvc3RfY29udGVudCApOwoKCSRjYXRzICAgID0gd3BfZ2V0X3Bvc3RfdGVybXMoICRwaWQsICdwcm9kdWN0X2NhdCcsIFsgJ2ZpZWxkcycgPT4gJ25hbWVzJyBdICk7CgkkY2F0ICAgICA9ICRjYXRzID8gJGNhdHNbMF0gOiAnTW9uYWzDqSc7CgkkY29sb3JzICA9IHdwX2dldF9wb3N0X3Rlcm1zKCAkcGlkLCAncGFfY29sb3InICk7CglpZiAoIGlzX3dwX2Vycm9yKCAkY29sb3JzICkgfHwgISBpc19hcnJheSggJGNvbG9ycyApICkgeyAkY29sb3JzID0gW107IH0KCSR0YWxsYXMgID0gd3BfZ2V0X3Bvc3RfdGVybXMoICRwaWQsICdwYV90YWxsYScgKTsKCWlmICggaXNfd3BfZXJyb3IoICR0YWxsYXMgKSB8fCAhIGlzX2FycmF5KCAkdGFsbGFzICkgKSB7ICR0YWxsYXMgPSBbXTsgfQoKCW9iX3N0YXJ0KCk7ID8+Cgk8ZGl2IGNsYXNzPSJtbi1xdi1tZWRpYSI+CgkJPD9waHAgZWNobyBtb25hbGVfaW1nKCAkaW1nLCAkdGl0bGUsIDgwMCwgMTAwMCApOyA/PgoJCTw/cGhwIGlmICggJHNhbGUgKSA6CgkJCSRvZmYgPSByb3VuZCggKCAxIC0gKCAkcHJpY2UgLyAkcmVndWxhciApICkgKiAxMDAgKTsgPz4KCQkJPHNwYW4gY2xhc3M9Im1uLXF2LWJhZGdlIj4tPD9waHAgZWNobyAoaW50KSAkb2ZmOyA/PiU8L3NwYW4+CgkJPD9waHAgZW5kaWY7ID8+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1uLXF2LWluZm8iPgoJCTxkaXYgY2xhc3M9Im1uLXF2LWNhdCI+PD9waHAgZWNobyBlc2NfaHRtbCggJGNhdCApOyA/PjwvZGl2PgoJCTxoMiBjbGFzcz0ibW4tcXYtdGl0bGUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0aXRsZSApOyA/PjwvaDI+CgkJPGRpdiBjbGFzcz0ibW4tcXYtcmF0aW5nIj7imIXimIXimIXimIXimIUgPHNwYW4+KDEyIHJlc2XDsWFzKTwvc3Bhbj48L2Rpdj4KCQk8ZGl2IGNsYXNzPSJtbi1xdi1wcmljZSI+CgkJCTw/cGhwIGlmICggJHNhbGUgJiYgJHJlZ3VsYXIgKSA6ID8+CgkJCQk8c3BhbiBjbGFzcz0ibW4tcXYtbm93Ij48P3BocCBlY2hvIG1vbmFsZV9tb25leSggJHByaWNlICk7ID8+IDxlbT5NWE48L2VtPjwvc3Bhbj4KCQkJCTxzcGFuIGNsYXNzPSJtbi1xdi1vbGQiPjw/cGhwIGVjaG8gbW9uYWxlX21vbmV5KCAkcmVndWxhciApOyA/Pjwvc3Bhbj4KCQkJPD9waHAgZWxzZSA6ID8+CgkJCQk8c3BhbiBjbGFzcz0ibW4tcXYtbm93Ij48P3BocCBlY2hvIG1vbmFsZV9tb25leSggJHByaWNlICk7ID8+IDxlbT5NWE48L2VtPjwvc3Bhbj4KCQkJPD9waHAgZW5kaWY7ID8+CgkJPC9kaXY+CgkJPHAgY2xhc3M9Im1uLXF2LWRlc2MiPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRleGNlcnB0ID86ICRjb250ZW50ICk7ID8+PC9wPgoKCQk8P3BocCBpZiAoICRjb2xvcnMgKSA6ID8+CgkJPGRpdiBjbGFzcz0ibW4tcXYtZ3JvdXAiPgoJCQk8ZGl2IGNsYXNzPSJtbi1xdi1sYWJlbCI+Q29sb3I6PC9kaXY+CgkJCTxkaXYgY2xhc3M9Im1uLXF2LWNvbG9ycyI+CgkJCQk8P3BocCBmb3JlYWNoICggJGNvbG9ycyBhcyAkaSA9PiAkYyApIDoKCQkJCQkkaGV4ID0gbW9uYWxlX2NvbG9yX2hleCggJGMtPnNsdWcgKTsKCQkJCQkkc2ggID0gKCAkYy0+c2x1ZyA9PT0gJ2JsYW5jbycgKSA/ICdib3gtc2hhZG93OjAgMCAwIDFweCAjY2NjOycgOiAnJzsgPz4KCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im1uLXF2LWNvbG9yIDw/cGhwIGVjaG8gJGkgPT09IDAgPyAnYWN0aXZlJyA6ICcnOyA/PiIKCQkJCQkgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiA8P3BocCBlY2hvIGVzY19hdHRyKCAkaGV4ICk7ID8+OyA8P3BocCBlY2hvIGVzY19hdHRyKCAkc2ggKTsgPz4iCgkJCQkJICAgICAgICBhcmlhLWxhYmVsPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkYy0+bmFtZSApOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjLT5uYW1lICk7ID8+Ij48L2J1dHRvbj4KCQkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGVuZGlmOyA/PgoKCQk8P3BocCBpZiAoICR0YWxsYXMgKSA6ID8+CgkJPGRpdiBjbGFzcz0ibW4tcXYtZ3JvdXAiPgoJCQk8ZGl2IGNsYXNzPSJtbi1xdi1sYWJlbCI+VGFsbGE6PC9kaXY+CgkJCTxkaXYgY2xhc3M9Im1uLXF2LXNpemVzIj4KCQkJCTw/cGhwIGZvcmVhY2ggKCAkdGFsbGFzIGFzICRpID0+ICR0ICkgOiA/PgoJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibW4tcXYtc2l6ZSA8P3BocCBlY2hvICRpID09PSAwID8gJ2FjdGl2ZScgOiAnJzsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0LT5uYW1lICk7ID8+PC9idXR0b24+CgkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCgkJPGRpdiBjbGFzcz0ibW4tcXYtYWN0aW9ucyI+CgkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuLWFkZC1jYXJ0IG1uLXF2LWNhcnQiIGRhdGEtbW4tYWRkY2FydD0iPD9waHAgZWNobyAoaW50KSAkcGlkOyA/PiI+CgkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTYgMiAzIDZ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjZsLTMtNHoiLz48cGF0aCBkPSJNMyA2aDE4Ii8+PHBhdGggZD0iTTE2IDEwYTQgNCAwIDAgMS04IDAiLz48L3N2Zz4KCQkJCUFncmVnYXIgYWwgY2Fycml0bwoJCQk8L2J1dHRvbj4KCQkJPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkcGVybSApOyA/PiIgY2xhc3M9Im1uLXF2LWRldGFpbCI+VmVyIHDDoWdpbmEgY29tcGxldGEg4oaSPC9hPgoJCTwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJtbi1xdi1tZXRhIj4KCQkJPGRpdiBjbGFzcz0ibW4tcXYtbWV0YS1pdGVtIj4KCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cmVjdCB4PSIxIiB5PSIzIiB3aWR0aD0iMTUiIGhlaWdodD0iMTMiLz48cG9seWdvbiBwb2ludHM9IjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4Ii8+PGNpcmNsZSBjeD0iNS41IiBjeT0iMTguNSIgcj0iMi41Ii8+PGNpcmNsZSBjeD0iMTguNSIgY3k9IjE4LjUiIHI9IjIuNSIvPjwvc3ZnPgoJCQkJPHNwYW4+RW52w61vIGdyYXRpcyBlbiBwZWRpZG9zICskMSw1MDA8L3NwYW4+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJtbi1xdi1tZXRhLWl0ZW0iPgoJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0zIDEyYTkgOSAwIDEgMCAxOCAwIDkgOSAwIDAgMC0xOCAwIi8+PHBvbHlsaW5lIHBvaW50cz0iMTIgNyAxMiAxMiAxNSAxNSIvPjwvc3ZnPgoJCQkJPHNwYW4+RGV2b2x1Y2lvbmVzIGbDoWNpbGVzIGVuIDE1IGTDrWFzPC9zcGFuPgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTwvZGl2PgoJPD9waHAKCXdwX3NlbmRfanNvbl9zdWNjZXNzKCBbICdodG1sJyA9PiBvYl9nZXRfY2xlYW4oKSwgJ3RpdGxlJyA9PiAkdGl0bGUgXSApOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTaG9ydGNvZGUgVElFTkRBCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIG1vbmFsZV9zaG9wX3JlbmRlciggJGF0dHMgPSBbXSApIHsKCSRwYXJhbXMgPSAkX0dFVDsKCSRwZyAgICAgPSBtYXgoIDEsIChpbnQpICggJHBhcmFtc1sncGcnXSA/PyAxICkgKTsKCSRxdWVyeSAgPSBtb25hbGVfcXVlcnlfcHJvZHVjdHMoICRwYXJhbXMsIDEyICk7CgoJJGNhdGVnb3JpZXMgPSBnZXRfdGVybXMoIFsgJ3RheG9ub215JyA9PiAncHJvZHVjdF9jYXQnLCAnaGlkZV9lbXB0eScgPT4gdHJ1ZSBdICk7CglpZiAoIGlzX3dwX2Vycm9yKCAkY2F0ZWdvcmllcyApIHx8ICEgaXNfYXJyYXkoICRjYXRlZ29yaWVzICkgKSB7ICRjYXRlZ29yaWVzID0gW107IH0KCSRjb2xvcnNfYWxsID0gZ2V0X3Rlcm1zKCBbICd0YXhvbm9teScgPT4gJ3BhX2NvbG9yJywgICAgJ2hpZGVfZW1wdHknID0+IHRydWUgXSApOwoJaWYgKCBpc193cF9lcnJvciggJGNvbG9yc19hbGwgKSB8fCAhIGlzX2FycmF5KCAkY29sb3JzX2FsbCApICkgeyAkY29sb3JzX2FsbCA9IFtdOyB9CgkkdGFsbGFzX2FsbCA9IGdldF90ZXJtcyggWyAndGF4b25vbXknID0+ICdwYV90YWxsYScsICAgICdoaWRlX2VtcHR5JyA9PiB0cnVlIF0gKTsKCWlmICggaXNfd3BfZXJyb3IoICR0YWxsYXNfYWxsICkgfHwgISBpc19hcnJheSggJHRhbGxhc19hbGwgKSApIHsgJHRhbGxhc19hbGwgPSBbXTsgfQoKCSRiYXNlID0gZ2V0X3Blcm1hbGluaygpOwoJJGNhdCAgID0gc2FuaXRpemVfdGl0bGUoICRwYXJhbXNbJ2NhdCddID8/ICcnICk7CgkkY29sb3IgPSBzYW5pdGl6ZV90aXRsZSggJHBhcmFtc1snY29sb3InXSA/PyAnJyApOwoJJHRhbGxhID0gc2FuaXRpemVfdGl0bGUoICRwYXJhbXNbJ3RhbGxhJ10gPz8gJycgKTsKCSRtYXggICA9IChpbnQpICggJHBhcmFtc1snbWF4J10gPz8gMCApOwoJJG9yZGVyYnkgPSBzYW5pdGl6ZV9rZXkoICRwYXJhbXNbJ29yZGVyYnknXSA/PyAncG9wdWxhcml0eScgKTsKCSRzZWFyY2ggPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkcGFyYW1zWydxJ10gPz8gJycgKTsKCglvYl9zdGFydCgpOyA/PgoJPHNlY3Rpb24gY2xhc3M9Im1uLXNob3AiIGRhdGEtbW9uYWxlLXNob3A+CgkJPGRpdiBjbGFzcz0ibW4tc2hvcC1oZXJvIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj5Db2xlY2Npw7NuIE1vbmFsw6k8L2Rpdj4KCQkJCTxoMT5OdWVzdHJhIDxzcGFuIGNsYXNzPSJtbi1hY2NlbnQiPlRpZW5kYTwvc3Bhbj48L2gxPgoJCQkJPHA+RXhwbG9yYSBwaWV6YXMgw7puaWNhcyBkaXNlw7FhZGFzIHBhcmEgYWNvbXBhw7FhcnRlIGNvbiBlbGVnYW5jaWEgZW4gY2FkYSBldGFwYS48L3A+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIgbW4tc2hvcC1sYXlvdXQiPgoJCQk8IS0tIFNJREVCQVIgLS0+CgkJCTxhc2lkZSBjbGFzcz0ibW4tc2lkZWJhciIgaWQ9Im1uLXNpZGViYXIiPgoJCQkJPGZvcm0gY2xhc3M9Im1uLXNpZGViYXItZm9ybSIgZGF0YS1tbi1maWx0ZXJzIG9uc3VibWl0PSJyZXR1cm4gZmFsc2UiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNpZGViYXItaGVhZCI+CgkJCQkJCTxoMz5GaWx0cm9zPC9oMz4KCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zaWRlYmFyLWNsb3NlIiBhcmlhLWxhYmVsPSJDZXJyYXIgZmlsdHJvcyI+JnRpbWVzOzwvYnV0dG9uPgoJCQkJCTwvZGl2PgoKCQkJCQk8ZGl2IGNsYXNzPSJtbi1mZ3JvdXAiPgoJCQkJCQk8bGFiZWwgY2xhc3M9Im1uLWZsYWJlbCIgZm9yPSJtbi1xIj5CdXNjYXIgcHJvZHVjdG88L2xhYmVsPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1zZWFyY2gtd3JhcCI+CgkJCQkJCQk8c3ZnIGNsYXNzPSJtbi1zZWFyY2gtaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48Y2lyY2xlIGN4PSIxMSIgY3k9IjExIiByPSI4Ii8+PHBhdGggZD0ibTIxIDIxLTQuMzUtNC4zNSIvPjwvc3ZnPgoJCQkJCQkJPGlucHV0IGlkPSJtbi1xIiB0eXBlPSJzZWFyY2giIG5hbWU9InEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkc2VhcmNoICk7ID8+IiBwbGFjZWhvbGRlcj0iQnVzY2EgdHUgdmVzdGlkb+KApiIgY2xhc3M9Im1uLWZpbnB1dCIgYXV0b2NvbXBsZXRlPSJvZmYiPgoJCQkJCQkJPHNwYW4gY2xhc3M9Im1uLXNlYXJjaC1sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoKCQkJCQk8ZGl2IGNsYXNzPSJtbi1mZ3JvdXAiPgoJCQkJCQk8c3BhbiBjbGFzcz0ibW4tZmxhYmVsIj5DYXRlZ29yw61hPC9zcGFuPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1yYWRpby1saXN0Ij4KCQkJCQkJCTxsYWJlbCBjbGFzcz0ibW4tcmFkaW8gPD9waHAgZWNobyAkY2F0ID09PSAnJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KCQkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImNhdCIgdmFsdWU9IiIgPD9waHAgY2hlY2tlZCggJGNhdCwgJycgKTsgPz4+CgkJCQkJCQkJPHNwYW4+VG9kYXM8L3NwYW4+CgkJCQkJCQk8L2xhYmVsPgoJCQkJCQkJPD9waHAgZm9yZWFjaCAoICRjYXRlZ29yaWVzIGFzICRjICkgOiA/PgoJCQkJCQkJCTxsYWJlbCBjbGFzcz0ibW4tcmFkaW8gPD9waHAgZWNobyAkY2F0ID09PSAkYy0+c2x1ZyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KCQkJCQkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjYXQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkYy0+c2x1ZyApOyA/PiIgPD9waHAgY2hlY2tlZCggJGNhdCwgJGMtPnNsdWcgKTsgPz4+CgkJCQkJCQkJCTxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRjLT5uYW1lICk7ID8+PC9zcGFuPgoJCQkJCQkJCQk8ZW0gY2xhc3M9Im1uLWNvdW50Ij48P3BocCBlY2hvIChpbnQpICRjLT5jb3VudDsgPz48L2VtPgoJCQkJCQkJCTwvbGFiZWw+CgkJCQkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCgkJCQkJPGRpdiBjbGFzcz0ibW4tZmdyb3VwIj4KCQkJCQkJPHNwYW4gY2xhc3M9Im1uLWZsYWJlbCI+Q29sb3I8L3NwYW4+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLXN3YXRjaGVzIj4KCQkJCQkJCTw/cGhwIGZvcmVhY2ggKCAkY29sb3JzX2FsbCBhcyAkYyApIDoKCQkJCQkJCQkkaGV4ID0gbW9uYWxlX2NvbG9yX2hleCggJGMtPnNsdWcgKTsgPz4KCQkJCQkJCQk8bGFiZWwgY2xhc3M9Im1uLXN3YXRjaC13cmFwIiB0aXRsZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGMtPm5hbWUgKTsgPz4iPgoJCQkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImNvbG9yIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGMtPnNsdWcgKTsgPz4iIDw/cGhwIGNoZWNrZWQoICRjb2xvciwgJGMtPnNsdWcgKTsgPz4+CgkJCQkJCQkJCTxzcGFuIGNsYXNzPSJtbi1zd2F0Y2ggPD9waHAgZWNobyAkY29sb3IgPT09ICRjLT5zbHVnID8gJ2FjdGl2ZScgOiAnJzsgPz4iIHN0eWxlPSJiYWNrZ3JvdW5kOiA8P3BocCBlY2hvIGVzY19hdHRyKCAkaGV4ICk7ID8+OyI+PC9zcGFuPgoJCQkJCQkJCTwvbGFiZWw+CgkJCQkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCgkJCQkJPGRpdiBjbGFzcz0ibW4tZmdyb3VwIj4KCQkJCQkJPHNwYW4gY2xhc3M9Im1uLWZsYWJlbCI+VGFsbGE8L3NwYW4+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLXNpemUtb3B0cyI+CgkJCQkJCQk8P3BocCBmb3JlYWNoICggJHRhbGxhc19hbGwgYXMgJHQgKSA6ID8+CgkJCQkJCQkJPGxhYmVsIGNsYXNzPSJtbi1zaXplLW9wdCA8P3BocCBlY2hvICR0YWxsYSA9PT0gJHQtPnNsdWcgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CgkJCQkJCQkJCTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idGFsbGEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkdC0+c2x1ZyApOyA/PiIgPD9waHAgY2hlY2tlZCggJHRhbGxhLCAkdC0+c2x1ZyApOyA/Pj4KCQkJCQkJCQkJPHNwYW4+PD9waHAgZWNobyBlc2NfaHRtbCggJHQtPm5hbWUgKTsgPz48L3NwYW4+CgkJCQkJCQkJPC9sYWJlbD4KCQkJCQkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoKCQkJCQk8ZGl2IGNsYXNzPSJtbi1mZ3JvdXAiPgoJCQkJCQk8bGFiZWwgY2xhc3M9Im1uLWZsYWJlbCIgZm9yPSJtbi1yYW5nZSI+UHJlY2lvIG3DoXhpbW86IDxzcGFuIGRhdGEtbW4tcHJpY2UtdmFsPjw/cGhwIGVjaG8gJG1heCA/IG1vbmFsZV9tb25leSggJG1heCApIC4gJyBNWE4nIDogJ1NpbiBsw61taXRlJzsgPz48L3NwYW4+PC9sYWJlbD4KCQkJCQkJPGlucHV0IGlkPSJtbi1yYW5nZSIgdHlwZT0icmFuZ2UiIG5hbWU9Im1heCIgbWluPSIwIiBtYXg9IjMwMDAiIHN0ZXA9IjEwMCIgdmFsdWU9Ijw/cGhwIGVjaG8gKGludCkgJG1heDsgPz4iIGNsYXNzPSJtbi1yYW5nZSI+CgkJCQkJPC9kaXY+CgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZGVyYnkiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkb3JkZXJieSApOyA/PiI+CgkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY3R4IiB2YWx1ZT0ic2hvcCI+CgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNpZGViYXItYWN0aW9ucyI+CgkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibW4tY2xlYXItYnRuIiBkYXRhLW1uLWNsZWFyPuKclSBMaW1waWFyIGZpbHRyb3M8L2J1dHRvbj4KCQkJCQk8L2Rpdj4KCQkJCTwvZm9ybT4KCQkJPC9hc2lkZT4KCgkJCTwhLS0gTUFJTiAtLT4KCQkJPGRpdiBjbGFzcz0ibW4tc2hvcC1tYWluIj4KCQkJCTxkaXYgY2xhc3M9Im1uLXNob3AtdG9vbGJhciI+CgkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWx0ZXItdGFiIG1uLXRvZ2dsZS1zaWRlYmFyIj7imLAgRmlsdHJvczwvYnV0dG9uPgoJCQkJCTxzcGFuIGNsYXNzPSJtbi1zaG9wLWNvdW50IiBkYXRhLW1uLWNvdW50PgoJCQkJCQk8P3BocCBwcmludGYoICclZCBwcm9kdWN0byVzJywgKGludCkgJHF1ZXJ5LT5mb3VuZF9wb3N0cywgJHF1ZXJ5LT5mb3VuZF9wb3N0cyA9PT0gMSA/ICcnIDogJ3MnICk7ID8+CgkJCQkJPC9zcGFuPgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNvcnQiPgoJCQkJCQk8bGFiZWwgZm9yPSJtbi1vcmRlcmJ5Ij5PcmRlbmFyOjwvbGFiZWw+CgkJCQkJCTxzZWxlY3QgaWQ9Im1uLW9yZGVyYnkiIGNsYXNzPSJmaWx0ZXItc2VsZWN0IiBkYXRhLW1uLW9yZGVyYnk+CgkJCQkJCQk8b3B0aW9uIHZhbHVlPSJwb3B1bGFyaXR5IiA8P3BocCBzZWxlY3RlZCggJG9yZGVyYnksICdwb3B1bGFyaXR5JyApOyA/Pj5Nw6FzIHBvcHVsYXJlczwvb3B0aW9uPgoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iZGF0ZSIgICAgICAgPD9waHAgc2VsZWN0ZWQoICRvcmRlcmJ5LCAnZGF0ZScgKTsgPz4+TcOhcyByZWNpZW50ZXM8L29wdGlvbj4KCQkJCQkJCTxvcHRpb24gdmFsdWU9InByaWNlIiAgICAgIDw/cGhwIHNlbGVjdGVkKCAkb3JkZXJieSwgJ3ByaWNlJyApOyA/Pj5QcmVjaW86IG1lbm9yIGEgbWF5b3I8L29wdGlvbj4KCQkJCQkJCTxvcHRpb24gdmFsdWU9InByaWNlLWRlc2MiIDw/cGhwIHNlbGVjdGVkKCAkb3JkZXJieSwgJ3ByaWNlLWRlc2MnICk7ID8+PlByZWNpbzogbWF5b3IgYSBtZW5vcjwvb3B0aW9uPgoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0idGl0bGUiICAgICAgPD9waHAgc2VsZWN0ZWQoICRvcmRlcmJ5LCAndGl0bGUnICk7ID8+PkHigJNaPC9vcHRpb24+CgkJCQkJCTwvc2VsZWN0PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0ibW4tZ3JpZC13cmFwIiBkYXRhLW1uLWdyaWQ+CgkJCQkJPD9waHAgZWNobyBtb25hbGVfcmVuZGVyX2dyaWQoICRxdWVyeSwgJHBnICk7ID8+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+Cgk8L3NlY3Rpb24+Cgk8P3BocAoJZWNobyBtb25hbGVfcXVpY2t2aWV3X21vZGFsKCk7CgllY2hvIG1vbmFsZV90b2FzdF9odG1sKCk7CglyZXR1cm4gbW9uYWxlX2NsZWFuKCBvYl9nZXRfY2xlYW4oKSApOwp9CmFkZF9zaG9ydGNvZGUoICdtb25hbGVfc2hvcCcsICdtb25hbGVfc2hvcF9yZW5kZXInICk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTaG9ydGNvZGUgRkFWT1JJVE9TIChob21lKQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfZmF2b3JpdGVzX3JlbmRlciggJGF0dHMgPSBbXSApIHsKCSRhdHRzID0gc2hvcnRjb2RlX2F0dHMoIFsgJ2xpbWl0JyA9PiA4IF0sICRhdHRzLCAnbW9uYWxlX2Zhdm9yaXRlcycgKTsKCgkkcSA9IG1vbmFsZV9xdWVyeV9wcm9kdWN0cyggW10sIChpbnQpICRhdHRzWydsaW1pdCddICk7CgkkY2F0c190YWJzID0gZ2V0X3Rlcm1zKCBbICd0YXhvbm9teScgPT4gJ3Byb2R1Y3RfY2F0JywgJ2hpZGVfZW1wdHknID0+IHRydWUsICdudW1iZXInID0+IDQsICdvcmRlcmJ5JyA9PiAnY291bnQnLCAnb3JkZXInID0+ICdERVNDJyBdICk7CglpZiAoIGlzX3dwX2Vycm9yKCAkY2F0c190YWJzICkgfHwgISBpc19hcnJheSggJGNhdHNfdGFicyApICkgeyAkY2F0c190YWJzID0gW107IH0KCSRjb2xvcnNfYWxsID0gZ2V0X3Rlcm1zKCBbICd0YXhvbm9teScgPT4gJ3BhX2NvbG9yJywgJ2hpZGVfZW1wdHknID0+IHRydWUgXSApOwoJaWYgKCBpc193cF9lcnJvciggJGNvbG9yc19hbGwgKSB8fCAhIGlzX2FycmF5KCAkY29sb3JzX2FsbCApICkgeyAkY29sb3JzX2FsbCA9IFtdOyB9CgkkdGFsbGFzX2FsbCA9IGdldF90ZXJtcyggWyAndGF4b25vbXknID0+ICdwYV90YWxsYScsICdoaWRlX2VtcHR5JyA9PiB0cnVlIF0gKTsKCWlmICggaXNfd3BfZXJyb3IoICR0YWxsYXNfYWxsICkgfHwgISBpc19hcnJheSggJHRhbGxhc19hbGwgKSApIHsgJHRhbGxhc19hbGwgPSBbXTsgfQoKCW9iX3N0YXJ0KCk7ID8+Cgk8c2VjdGlvbiBjbGFzcz0ic2VjdGlvbiBwcm9kdWN0cyIgaWQ9InByb2R1Y3RvcyIgYXJpYS1sYWJlbGxlZGJ5PSJwcm9kLWhlYWRpbmciIGRhdGEtbW9uYWxlLWZhdj4KCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIiPgoJCQk8ZGl2IGNsYXNzPSJtbi1zZWN0aW9uLWhlYWRlciI+CgkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+TG8gbcOhcyB2ZW5kaWRvPC9kaXY+CgkJCQk8aDIgaWQ9InByb2QtaGVhZGluZyI+TnVlc3Ryb3MgPHNwYW4gY2xhc3M9Im1uLWFjY2VudCI+ZmF2b3JpdG9zPC9zcGFuPjwvaDI+CgkJCQk8cD5Mb3MgdmVzdGlkb3MgcXVlIG51ZXN0cmFzIG1hbcOhcyBtw6FzIGFtYW48L3A+CgkJCTwvZGl2PgoKCQkJPGRpdiBjbGFzcz0iZmlsdGVycy1iYXIiIHJvbGU9InRvb2xiYXIiIGFyaWEtbGFiZWw9IkZpbHRyb3MgZGUgcHJvZHVjdG9zIiBkYXRhLW1uLWZhdi1maWx0ZXJzPgoJCQkJPGRpdiBjbGFzcz0iZmlsdGVyLXRhYnMiPgoJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZmlsdGVyLXRhYiBhY3RpdmUiIGRhdGEtZmF2LWNhdD0iIj5Ub2RvczwvYnV0dG9uPgoJCQkJCTw/cGhwIGZvcmVhY2ggKCAkY2F0c190YWJzIGFzICRjICkgOiA/PgoJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImZpbHRlci10YWIiIGRhdGEtZmF2LWNhdD0iPD9waHAgZWNobyBlc2NfYXR0ciggJGMtPnNsdWcgKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRjLT5uYW1lICk7ID8+PC9idXR0b24+CgkJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJCTwvZGl2PgoJCQkJPGRpdiBjbGFzcz0iZmlsdGVyLW9wdGlvbnMiPgoJCQkJCTxzZWxlY3QgY2xhc3M9ImZpbHRlci1zZWxlY3QiIGRhdGEtZmF2LWNvbG9yIGFyaWEtbGFiZWw9IkZpbHRyYXIgcG9yIGNvbG9yIj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iIj5Db2xvcjwvb3B0aW9uPgoJCQkJCQk8P3BocCBmb3JlYWNoICggJGNvbG9yc19hbGwgYXMgJGMgKSA6ID8+CgkJCQkJCQk8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkYy0+c2x1ZyApOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCggJGMtPm5hbWUgKTsgPz48L29wdGlvbj4KCQkJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJCQk8L3NlbGVjdD4KCQkJCQk8c2VsZWN0IGNsYXNzPSJmaWx0ZXItc2VsZWN0IiBkYXRhLWZhdi10YWxsYSBhcmlhLWxhYmVsPSJGaWx0cmFyIHBvciB0YWxsYSI+CgkJCQkJCTxvcHRpb24gdmFsdWU9IiI+VGFsbGE8L29wdGlvbj4KCQkJCQkJPD9waHAgZm9yZWFjaCAoICR0YWxsYXNfYWxsIGFzICR0ICkgOiA/PgoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJHQtPnNsdWcgKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0LT5uYW1lICk7ID8+PC9vcHRpb24+CgkJCQkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+CgkJCQkJPC9zZWxlY3Q+CgkJCQkJPHNlbGVjdCBjbGFzcz0iZmlsdGVyLXNlbGVjdCIgZGF0YS1mYXYtb3JkZXJieSBhcmlhLWxhYmVsPSJPcmRlbmFyIHBvciI+CgkJCQkJCTxvcHRpb24gdmFsdWU9IiI+T3JkZW5hciBwb3I8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0icHJpY2UiPlByZWNpbzogbWVub3IgYSBtYXlvcjwvb3B0aW9uPgoJCQkJCQk8b3B0aW9uIHZhbHVlPSJwcmljZS1kZXNjIj5QcmVjaW86IG1heW9yIGEgbWVub3I8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iZGF0ZSI+TcOhcyByZWNpZW50ZXM8L29wdGlvbj4KCQkJCQk8L3NlbGVjdD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCgkJCTxkaXYgY2xhc3M9Im1uLWdyaWQtd3JhcCIgZGF0YS1tbi1ncmlkPgoJCQkJPD9waHAgZWNobyBtb25hbGVfcmVuZGVyX2dyaWQoICRxICk7ID8+CgkJCTwvZGl2PgoKCQkJPGRpdiBjbGFzcz0iY2VudGVyLWFjdGlvbiI+CgkJCQk8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGhvbWVfdXJsKCAnL3RpZW5kYScgKSApOyA/PiIgY2xhc3M9Im1uLWJ0bi1zZWNvbmRhcnkiPlZlciB0b2RhIGxhIGNvbGVjY2nDs248L2E+CgkJCTwvZGl2PgoKCQkJPGRpdiBjbGFzcz0ic2l6ZS1ndWlkZS1iYW5uZXIiPgoJCQkJPGRpdiBjbGFzcz0ic2l6ZS1ndWlkZS1jb250ZW50Ij4KCQkJCQk8ZGl2IGNsYXNzPSJzaXplLWd1aWRlLWljb24iPgoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTIxIDNIM3Y3aDE4VjN6Ii8+PHBhdGggZD0iTTIxIDE0SDN2N2gxOHYtN3oiLz48cGF0aCBkPSJNMTIgM3Y3Ii8+PHBhdGggZD0iTTEyIDE0djciLz48cGF0aCBkPSJNMyAxMGgzIi8+PHBhdGggZD0iTTMgMTRoMyIvPjwvc3ZnPgoJCQkJCTwvZGl2PgoJCQkJCTxkaXY+CgkJCQkJCTxzdHJvbmc+wr9ObyBlc3TDoXMgc2VndXJhIGRlIHR1IHRhbGxhPzwvc3Ryb25nPgoJCQkJCQk8c3Bhbj5Db25zdWx0YSBudWVzdHJhIGd1w61hIGRlIHRhbGxhcyBwYXJhIG1hdGVybmlkYWQgeSBlbmN1ZW50cmEgZWwgYWp1c3RlIHBlcmZlY3RvLjwvc3Bhbj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGEgaHJlZj0iIyIgY2xhc3M9ImJ0bi1zaXplLWd1aWRlIj5WZXIgZ3XDrWEgZGUgdGFsbGFzIOKGkjwvYT4KCQkJPC9kaXY+CgkJPC9kaXY+Cgk8L3NlY3Rpb24+Cgk8P3BocAoJZWNobyBtb25hbGVfcXVpY2t2aWV3X21vZGFsKCk7CgllY2hvIG1vbmFsZV90b2FzdF9odG1sKCk7CglyZXR1cm4gbW9uYWxlX2NsZWFuKCBvYl9nZXRfY2xlYW4oKSApOwp9CmFkZF9zaG9ydGNvZGUoICdtb25hbGVfZmF2b3JpdGVzJywgJ21vbmFsZV9mYXZvcml0ZXNfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQUpBWDogb2J0ZW5lciBwcm9kdWN0b3MgcG9yIElEcyAocGFyYSBmYXZvcml0b3MpCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmFkZF9hY3Rpb24oICd3cF9hamF4X21vbmFsZV9ieV9pZHMnLCAgICAgICAgJ21vbmFsZV9hamF4X2J5X2lkcycgKTsKYWRkX2FjdGlvbiggJ3dwX2FqYXhfbm9wcml2X21vbmFsZV9ieV9pZHMnLCAnbW9uYWxlX2FqYXhfYnlfaWRzJyApOwpmdW5jdGlvbiBtb25hbGVfYWpheF9ieV9pZHMoKSB7CgljaGVja19hamF4X3JlZmVyZXIoICdtb25hbGVfc2hvcCcsICdub25jZScgKTsKCSRpZHMgPSBpc3NldCggJF9QT1NUWydpZHMnXSApID8gYXJyYXlfbWFwKCAnYWJzaW50JywgKGFycmF5KSAkX1BPU1RbJ2lkcyddICkgOiBbXTsKCSRpZHMgPSBhcnJheV9maWx0ZXIoICRpZHMgKTsKCWlmICggZW1wdHkoICRpZHMgKSApIHsgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIFsgJ2h0bWwnID0+ICcnLCAnY291bnQnID0+IDAgXSApOyB9CgoJJHEgPSBuZXcgV1BfUXVlcnkoIFsKCQkncG9zdF90eXBlJyAgICAgID0+ICdwcm9kdWN0JywKCQkncG9zdF9zdGF0dXMnICAgID0+ICdwdWJsaXNoJywKCQkncG9zdF9faW4nICAgICAgID0+ICRpZHMsCgkJJ29yZGVyYnknICAgICAgICA9PiAncG9zdF9faW4nLAoJCSdwb3N0c19wZXJfcGFnZScgPT4gMTAwLAoJXSApOwoJd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIFsKCQknaHRtbCcgID0+IG1vbmFsZV9yZW5kZXJfZ3JpZCggJHEgKSwKCQknY291bnQnID0+IChpbnQpICRxLT5mb3VuZF9wb3N0cywKCV0gKTsKfQoKLyoqIE1pbmkgY2FyZCByZW5kZXIgcGFyYSB0b2FzdCAoaW1hZ2VuICsgdMOtdHVsbyArIHByZWNpbykgKi8KZnVuY3Rpb24gbW9uYWxlX21pbmlfY2FyZF9kYXRhKCAkcHJvZHVjdF9pZCApIHsKCXJldHVybiBbCgkJJ2lkJyAgICA9PiAoaW50KSAkcHJvZHVjdF9pZCwKCQkndGl0bGUnID0+IGdldF90aGVfdGl0bGUoICRwcm9kdWN0X2lkICksCgkJJ2ltZycgICA9PiBtb25hbGVfc2hvcF9pbWcoICRwcm9kdWN0X2lkICksCgkJJ3ByaWNlJyA9PiAoZmxvYXQpIGdldF9wb3N0X21ldGEoICRwcm9kdWN0X2lkLCAnX3ByaWNlJywgdHJ1ZSApLAoJXTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQUpBWDogYsO6c3F1ZWRhIGxpdmUgKGhlYWRlcikKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYWRkX2FjdGlvbiggJ3dwX2FqYXhfbW9uYWxlX3NlYXJjaCcsICAgICAgICAnbW9uYWxlX2FqYXhfc2VhcmNoJyApOwphZGRfYWN0aW9uKCAnd3BfYWpheF9ub3ByaXZfbW9uYWxlX3NlYXJjaCcsICdtb25hbGVfYWpheF9zZWFyY2gnICk7CmZ1bmN0aW9uIG1vbmFsZV9hamF4X3NlYXJjaCgpIHsKCWNoZWNrX2FqYXhfcmVmZXJlciggJ21vbmFsZV9zaG9wJywgJ25vbmNlJyApOwoJJHEgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCB3cF91bnNsYXNoKCAkX1BPU1RbJ3EnXSA/PyAnJyApICk7CglpZiAoIHN0cmxlbiggJHEgKSA8IDIgKSB7IHdwX3NlbmRfanNvbl9zdWNjZXNzKCBbICdodG1sJyA9PiAnJywgJ2NvdW50JyA9PiAwIF0gKTsgfQoKCS8vIELDunNxdWVkYSBlc3RyaWN0YSBwb3IgdMOtdHVsbyBZL08gY2F0ZWdvcsOtYSB1c2FuZG8gTElLRSBkaXJlY3RvCglnbG9iYWwgJHdwZGI7CgkkbGlrZSA9ICclJyAuICR3cGRiLT5lc2NfbGlrZSggJHEgKSAuICclJzsKCgkvLyAxLiBJRHMgcG9yIHTDrXR1bG8gbyBjb250ZW5pZG8vZXhjZXJwdAoJJGlkc190aXRsZSA9ICR3cGRiLT5nZXRfY29sKCAkd3BkYi0+cHJlcGFyZSgKCQkiU0VMRUNUIElEIEZST00geyR3cGRiLT5wb3N0c30gV0hFUkUgcG9zdF90eXBlPSdwcm9kdWN0JyBBTkQgcG9zdF9zdGF0dXM9J3B1Ymxpc2gnCgkJIEFORCAocG9zdF90aXRsZSBMSUtFICVzIE9SIHBvc3RfZXhjZXJwdCBMSUtFICVzIE9SIHBvc3RfY29udGVudCBMSUtFICVzKQoJCSBMSU1JVCAyMCIsCgkJJGxpa2UsICRsaWtlLCAkbGlrZQoJKSApOwoKCS8vIDIuIElEcyBwb3IgY2F0ZWdvcsOtYSBxdWUgbWF0Y2hlZSBlbCB0w6lybWlubwoJJGlkc19jYXQgPSAkd3BkYi0+Z2V0X2NvbCggJHdwZGItPnByZXBhcmUoCgkJIlNFTEVDVCBwLklEIEZST00geyR3cGRiLT5wb3N0c30gcAoJCSBJTk5FUiBKT0lOIHskd3BkYi0+dGVybV9yZWxhdGlvbnNoaXBzfSB0ciBPTiBwLklEID0gdHIub2JqZWN0X2lkCgkJIElOTkVSIEpPSU4geyR3cGRiLT50ZXJtX3RheG9ub215fSB0dCBPTiB0ci50ZXJtX3RheG9ub215X2lkID0gdHQudGVybV90YXhvbm9teV9pZAoJCSBJTk5FUiBKT0lOIHskd3BkYi0+dGVybXN9IHQgT04gdHQudGVybV9pZCA9IHQudGVybV9pZAoJCSBXSEVSRSBwLnBvc3RfdHlwZT0ncHJvZHVjdCcgQU5EIHAucG9zdF9zdGF0dXM9J3B1Ymxpc2gnCgkJIEFORCB0dC50YXhvbm9teSBJTiAoJ3Byb2R1Y3RfY2F0JywncGFfY29sb3InLCdwYV90YWxsYScpCgkJIEFORCB0Lm5hbWUgTElLRSAlcwoJCSBMSU1JVCAyMCIsCgkJJGxpa2UKCSkgKTsKCgkkaWRzID0gYXJyYXlfdW5pcXVlKCBhcnJheV9tZXJnZSggKGFycmF5KSAkaWRzX3RpdGxlLCAoYXJyYXkpICRpZHNfY2F0ICkgKTsKCSRpZHMgPSBhcnJheV9tYXAoICdpbnR2YWwnLCAkaWRzICk7CgoJaWYgKCBlbXB0eSggJGlkcyApICkgewoJCXdwX3NlbmRfanNvbl9zdWNjZXNzKCBbCgkJCSdodG1sJyAgPT4gJzxkaXYgY2xhc3M9Im1uLXNlYXJjaC1lbXB0eSI+Tm8gZW5jb250cmFtb3MgcHJvZHVjdG9zIHBhcmEgPHN0cm9uZz4iJyAuIGVzY19odG1sKCAkcSApIC4gJyI8L3N0cm9uZz48YnI+PHNwYW4+UHJ1ZWJhIGNvbiBvdHJvIHTDqXJtaW5vIG8gPGEgaHJlZj0iL3RpZW5kYSI+ZXhwbG9yYSBsYSB0aWVuZGE8L2E+Ljwvc3Bhbj48L2Rpdj4nLAoJCQknY291bnQnID0+IDAsCgkJXSApOwoJfQoKCSRxdWVyeSA9IG5ldyBXUF9RdWVyeSggWwoJCSdwb3N0X3R5cGUnICAgICAgPT4gJ3Byb2R1Y3QnLAoJCSdwb3N0X3N0YXR1cycgICAgPT4gJ3B1Ymxpc2gnLAoJCSdwb3N0c19wZXJfcGFnZScgPT4gOCwKCQkncG9zdF9faW4nICAgICAgID0+ICRpZHMsCgkJJ29yZGVyYnknICAgICAgICA9PiAncG9zdF9faW4nLAoJXSApOwoKCSRvdXQgPSAnJzsKCWlmICggJHF1ZXJ5LT5oYXZlX3Bvc3RzKCkgKSB7CgkJJG91dCAuPSAnPGRpdiBjbGFzcz0ibW4tc2VhcmNoLWxpc3QiPic7CgkJd2hpbGUgKCAkcXVlcnktPmhhdmVfcG9zdHMoKSApIHsgJHF1ZXJ5LT50aGVfcG9zdCgpOwoJCQkkcGlkICAgPSBnZXRfdGhlX0lEKCk7CgkJCSRpbWcgICA9IG1vbmFsZV9zaG9wX2ltZyggJHBpZCApOwoJCQkkcGVybSAgPSBnZXRfcGVybWFsaW5rKCAkcGlkICk7CgkJCSRwcmljZSA9IChmbG9hdCkgZ2V0X3Bvc3RfbWV0YSggJHBpZCwgJ19wcmljZScsIHRydWUgKTsKCQkJJGNhdHMgID0gd3BfZ2V0X3Bvc3RfdGVybXMoICRwaWQsICdwcm9kdWN0X2NhdCcsIFsgJ2ZpZWxkcycgPT4gJ25hbWVzJyBdICk7CgkJCSRjYXQgICA9ICRjYXRzID8gJGNhdHNbMF0gOiAnJzsKCQkJJG91dCAuPSAnPGEgaHJlZj0iJyAuIGVzY191cmwoICRwZXJtICkgLiAnIiBjbGFzcz0ibW4tc2VhcmNoLWl0ZW0iPicKCQkJCS4gJzxpbWcgc3JjPSInIC4gZXNjX3VybCggJGltZyApIC4gJyIgYWx0PSIiIGNsYXNzPSJtbi1zZWFyY2gtdGh1bWIiPicKCQkJCS4gJzxkaXYgY2xhc3M9Im1uLXNlYXJjaC1tZXRhIj4nCgkJCQkJLiAnPHNwYW4gY2xhc3M9Im1uLXNlYXJjaC1jYXQiPicgLiBlc2NfaHRtbCggJGNhdCApIC4gJzwvc3Bhbj4nCgkJCQkJLiAnPHN0cm9uZyBjbGFzcz0ibW4tc2VhcmNoLXRpdGxlIj4nIC4gZXNjX2h0bWwoIGdldF90aGVfdGl0bGUoKSApIC4gJzwvc3Ryb25nPicKCQkJCQkuICc8c3BhbiBjbGFzcz0ibW4tc2VhcmNoLXByaWNlIj4nIC4gbW9uYWxlX21vbmV5KCAkcHJpY2UgKSAuICcgTVhOPC9zcGFuPicKCQkJCS4gJzwvZGl2PicKCQkJCS4gJzxzdmcgY2xhc3M9Im1uLXNlYXJjaC1hcnJvdyIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNNSAxMmgxNE0xMiA1bDcgNy03IDciLz48L3N2Zz4nCgkJCQkuICc8L2E+JzsKCQl9CgkJJG91dCAuPSAnPC9kaXY+JzsKCQkkb3V0IC49ICc8YSBocmVmPSInIC4gZXNjX3VybCggaG9tZV91cmwoICcvdGllbmRhP3E9JyAuIHVybGVuY29kZSggJHEgKSApICkgLiAnIiBjbGFzcz0ibW4tc2VhcmNoLW1vcmUiPlZlciB0b2RvcyBsb3MgcmVzdWx0YWRvcyDihpI8L2E+JzsKCQl3cF9yZXNldF9wb3N0ZGF0YSgpOwoJfSBlbHNlIHsKCQkkb3V0ID0gJzxkaXYgY2xhc3M9Im1uLXNlYXJjaC1lbXB0eSI+Tm8gZW5jb250cmFtb3MgcHJvZHVjdG9zIHBhcmEgPHN0cm9uZz4iJyAuIGVzY19odG1sKCAkcSApIC4gJyI8L3N0cm9uZz48YnI+PHNwYW4+UHJ1ZWJhIGNvbiBvdHJvIHTDqXJtaW5vIG8gPGEgaHJlZj0iL3RpZW5kYSI+ZXhwbG9yYSBsYSB0aWVuZGE8L2E+Ljwvc3Bhbj48L2Rpdj4nOwoJfQoKCXdwX3NlbmRfanNvbl9zdWNjZXNzKCBbICdodG1sJyA9PiAkb3V0LCAnY291bnQnID0+IChpbnQpICRxdWVyeS0+Zm91bmRfcG9zdHMgXSApOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBSkFYOiBhZ3JlZ2FyIGFsIGNhcnJpdG8KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYWRkX2FjdGlvbiggJ3dwX2FqYXhfbW9uYWxlX2FkZF9jYXJ0JywgICAgICAgICdtb25hbGVfYWpheF9hZGRfY2FydCcgKTsKYWRkX2FjdGlvbiggJ3dwX2FqYXhfbm9wcml2X21vbmFsZV9hZGRfY2FydCcsICdtb25hbGVfYWpheF9hZGRfY2FydCcgKTsKZnVuY3Rpb24gbW9uYWxlX2FqYXhfYWRkX2NhcnQoKSB7CgljaGVja19hamF4X3JlZmVyZXIoICdtb25hbGVfc2hvcCcsICdub25jZScgKTsKCWlmICggISBmdW5jdGlvbl9leGlzdHMoICdXQycgKSB8fCAhIFdDKCktPmNhcnQgKSB7CgkJd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnV29vQ29tbWVyY2Ugbm8gZGlzcG9uaWJsZScgXSApOwoJfQoJJHBpZCA9IGFic2ludCggJF9QT1NUWydwaWQnXSA/PyAwICk7CgkkcXR5ID0gbWF4KCAxLCBhYnNpbnQoICRfUE9TVFsncXR5J10gPz8gMSApICk7CglpZiAoICEgJHBpZCApIHsgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnUHJvZHVjdG8gaW52w6FsaWRvJyBdICk7IH0KCgkkcmVzdWx0ID0gV0MoKS0+Y2FydC0+YWRkX3RvX2NhcnQoICRwaWQsICRxdHkgKTsKCWlmICggISAkcmVzdWx0ICkgewoJCXdwX3NlbmRfanNvbl9lcnJvciggWyAnbWVzc2FnZScgPT4gJ05vIHNlIHB1ZG8gYWdyZWdhciBhbCBjYXJyaXRvJyBdICk7Cgl9Cgl3cF9zZW5kX2pzb25fc3VjY2VzcyggWwoJCSdjb3VudCcgID0+IFdDKCktPmNhcnQtPmdldF9jYXJ0X2NvbnRlbnRzX2NvdW50KCksCgkJJ3N1YnRvdGFsJyA9PiBXQygpLT5jYXJ0LT5nZXRfY2FydF9zdWJ0b3RhbCgpLAoJCSd0aXRsZScgID0+IGdldF90aGVfdGl0bGUoICRwaWQgKSwKCQknaW1nJyAgICA9PiBtb25hbGVfc2hvcF9pbWcoICRwaWQgKSwKCV0gKTsKfQoKYWRkX2FjdGlvbiggJ3dwX2FqYXhfbW9uYWxlX21pbmknLCAgICAgICAgJ21vbmFsZV9hamF4X21pbmknICk7CmFkZF9hY3Rpb24oICd3cF9hamF4X25vcHJpdl9tb25hbGVfbWluaScsICdtb25hbGVfYWpheF9taW5pJyApOwpmdW5jdGlvbiBtb25hbGVfYWpheF9taW5pKCkgewoJY2hlY2tfYWpheF9yZWZlcmVyKCAnbW9uYWxlX3Nob3AnLCAnbm9uY2UnICk7CgkkcGlkID0gYWJzaW50KCAkX1BPU1RbJ3BpZCddID8/IDAgKTsKCWlmICggISAkcGlkICkgeyB3cF9zZW5kX2pzb25fZXJyb3IoKTsgfQoJd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIG1vbmFsZV9taW5pX2NhcmRfZGF0YSggJHBpZCApICk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFNob3J0Y29kZSBXSVNITElTVCAocMOhZ2luYSBGYXZvcml0b3MpCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIG1vbmFsZV93aXNobGlzdF9yZW5kZXIoICRhdHRzID0gW10gKSB7CglvYl9zdGFydCgpOyA/PgoJPHNlY3Rpb24gY2xhc3M9Im1uLXdpc2hsaXN0IiBkYXRhLW1vbmFsZS13aXNobGlzdD4KCQk8ZGl2IGNsYXNzPSJtbi1zaG9wLWhlcm8gbW4td2lzaGxpc3QtaGVybyI+CgkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciI+CgkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+CgkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3R5bGU9IndpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7dmVydGljYWwtYWxpZ246LTJweDttYXJnaW4tcmlnaHQ6NHB4Ij48cGF0aCBkPSJNMjAuODQgNC42MWE1LjUgNS41IDAgMCAwLTcuNzggMEwxMiA1LjY3bC0xLjA2LTEuMDZhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsMS4wNiAxLjA2TDEyIDIxLjIzbDcuNzgtNy43OCAxLjA2LTEuMDZhNS41IDUuNSAwIDAgMCAwLTcuNzh6Ii8+PC9zdmc+CgkJCQkJVHUgbGlzdGEKCQkJCTwvZGl2PgoJCQkJPGgxPk1pcyA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij5GYXZvcml0b3M8L3NwYW4+PC9oMT4KCQkJCTxwPkxvcyB2ZXN0aWRvcyBxdWUgZ3VhcmRhc3RlIHBhcmEgY29tcHJhciBtw6FzIHRhcmRlLiBDdWFuZG8gZXN0w6lzIGxpc3RhLCBlc3TDoW4gYXF1w60gZXNwZXLDoW5kb3RlLjwvcD4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciBtbi13aXNobGlzdC1ib2R5Ij4KCQkJPGRpdiBjbGFzcz0ibW4td2lzaGxpc3QtdG9vbGJhciIgZGF0YS1tbi13bC10b29sYmFyIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgoJCQkJPHNwYW4gY2xhc3M9Im1uLXdpc2hsaXN0LWNvdW50IiBkYXRhLW1uLXdsLWNvdW50PjAgcHJvZHVjdG9zPC9zcGFuPgoJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1jbGVhci1idG4iIGRhdGEtbW4td2wtY2xlYXIgc3R5bGU9Im1heC13aWR0aDoyNjBweCI+4pyVIFZhY2lhciBsaXN0YTwvYnV0dG9uPgoJCQk8L2Rpdj4KCgkJCTxkaXYgY2xhc3M9Im1uLWdyaWQtd3JhcCIgZGF0YS1tbi13bC1ncmlkPgoJCQkJPCEtLSByZW5kZXJpemFkbyBwb3IgSlMgLS0+CgkJCTwvZGl2PgoKCQkJPGRpdiBjbGFzcz0ibW4td2wtZW1wdHkiIGRhdGEtbW4td2wtZW1wdHk+CgkJCQk8ZGl2IGNsYXNzPSJtbi13bC1lbXB0eS1pY29uIj4KCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNMjAuODQgNC42MWE1LjUgNS41IDAgMCAwLTcuNzggMEwxMiA1LjY3bC0xLjA2LTEuMDZhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsMS4wNiAxLjA2TDEyIDIxLjIzbDcuNzgtNy43OCAxLjA2LTEuMDZhNS41IDUuNSAwIDAgMCAwLTcuNzh6Ii8+PC9zdmc+CgkJCQk8L2Rpdj4KCQkJCTxoMz5Bw7puIG5vIHRpZW5lcyBmYXZvcml0b3M8L2gzPgoJCQkJPHA+RXhwbG9yYSBudWVzdHJhIGNvbGVjY2nDs24geSBndWFyZGEgbG9zIHZlc3RpZG9zIHF1ZSBtw6FzIHRlIGd1c3RlbiBoYWNpZW5kbyBjbGljayBlbiBlbCBjb3JhesOzbi48L3A+CgkJCQk8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGhvbWVfdXJsKCAnL3RpZW5kYScgKSApOyA/PiIgY2xhc3M9Im1uLWJ0bi1wcmltYXJ5Ij5FeHBsb3JhciBsYSB0aWVuZGE8L2E+CgkJCTwvZGl2PgoJCTwvZGl2PgoJPC9zZWN0aW9uPgoJPD9waHAKCWVjaG8gbW9uYWxlX3F1aWNrdmlld19tb2RhbCgpOwoJZWNobyBtb25hbGVfdG9hc3RfaHRtbCgpOwoJcmV0dXJuIG1vbmFsZV9jbGVhbiggb2JfZ2V0X2NsZWFuKCkgKTsKfQphZGRfc2hvcnRjb2RlKCAnbW9uYWxlX3dpc2hsaXN0JywgJ21vbmFsZV93aXNobGlzdF9yZW5kZXInICk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTaG9ydGNvZGUgQ0FURUdPUlkgQVJDSElWRSDigJQgW21vbmFsZV9jYXRlZ29yeV0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbW9uYWxlX2NhdGVnb3J5X3JlbmRlciggJGF0dHMgPSBbXSApIHsKCSR0ZXJtID0gZ2V0X3F1ZXJpZWRfb2JqZWN0KCk7CglpZiAoICEgJHRlcm0gfHwgZW1wdHkoICR0ZXJtLT50YXhvbm9teSApIHx8ICR0ZXJtLT50YXhvbm9teSAhPT0gJ3Byb2R1Y3RfY2F0JyApIHsKCQlyZXR1cm4gJzxkaXYgY2xhc3M9Im1uLWVtcHR5Ij48aDM+Q2F0ZWdvcsOtYSBubyBlbmNvbnRyYWRhPC9oMz48L2Rpdj4nOwoJfQoKCSRsb2NrX3NsdWcgPSAkdGVybS0+c2x1ZzsKCSRwYXJhbXMgICAgPSBhcnJheV9tZXJnZSggJF9HRVQsIFsgJ2xvY2tfY2F0JyA9PiAkbG9ja19zbHVnIF0gKTsKCSRjYXRfcGcgICAgPSBtYXgoIDEsIChpbnQpICggJF9HRVRbJ3BnJ10gPz8gMSApICk7CgkkcXVlcnkgICAgID0gbW9uYWxlX3F1ZXJ5X3Byb2R1Y3RzKCAkcGFyYW1zLCAxMiApOwoKCSRjb2xvcnNfYWxsID0gZ2V0X3Rlcm1zKCBbICd0YXhvbm9teScgPT4gJ3BhX2NvbG9yJywgJ2hpZGVfZW1wdHknID0+IHRydWUgXSApOwoJaWYgKCBpc193cF9lcnJvciggJGNvbG9yc19hbGwgKSB8fCAhIGlzX2FycmF5KCAkY29sb3JzX2FsbCApICkgeyAkY29sb3JzX2FsbCA9IFtdOyB9CgkkdGFsbGFzX2FsbCA9IGdldF90ZXJtcyggWyAndGF4b25vbXknID0+ICdwYV90YWxsYScsICdoaWRlX2VtcHR5JyA9PiB0cnVlIF0gKTsKCWlmICggaXNfd3BfZXJyb3IoICR0YWxsYXNfYWxsICkgfHwgISBpc19hcnJheSggJHRhbGxhc19hbGwgKSApIHsgJHRhbGxhc19hbGwgPSBbXTsgfQoJLy8gU3ViLWNhdGVnb3LDrWFzIChzaSBubyBoYXksIG1vc3RyYXIgY2F0ZWdvcsOtYXMgaGVybWFuYXMpCgkkY2hpbGRyZW4gPSBnZXRfdGVybXMoIFsgJ3RheG9ub215JyA9PiAncHJvZHVjdF9jYXQnLCAncGFyZW50JyA9PiAkdGVybS0+dGVybV9pZCwgJ2hpZGVfZW1wdHknID0+IHRydWUgXSApOwoJaWYgKCBpc193cF9lcnJvciggJGNoaWxkcmVuICkgfHwgISBpc19hcnJheSggJGNoaWxkcmVuICkgKSB7ICRjaGlsZHJlbiA9IFtdOyB9CglpZiAoIGVtcHR5KCAkY2hpbGRyZW4gKSApIHsKCQkkY2hpbGRyZW4gPSBnZXRfdGVybXMoIFsgJ3RheG9ub215JyA9PiAncHJvZHVjdF9jYXQnLCAnaGlkZV9lbXB0eScgPT4gdHJ1ZSwgJ2V4Y2x1ZGUnID0+IFsgJHRlcm0tPnRlcm1faWQgXSwgJ251bWJlcicgPT4gOCBdICk7CgkJaWYgKCBpc193cF9lcnJvciggJGNoaWxkcmVuICkgfHwgISBpc19hcnJheSggJGNoaWxkcmVuICkgKSB7ICRjaGlsZHJlbiA9IFtdOyB9Cgl9CgoJJGNvbG9yICAgPSBzYW5pdGl6ZV90aXRsZSggJF9HRVRbJ2NvbG9yJ10gPz8gJycgKTsKCSR0YWxsYSAgID0gc2FuaXRpemVfdGl0bGUoICRfR0VUWyd0YWxsYSddID8/ICcnICk7CgkkbWF4ICAgICA9IChpbnQpICggJF9HRVRbJ21heCddID8/IDAgKTsKCSRvcmRlcmJ5ID0gc2FuaXRpemVfa2V5KCAkX0dFVFsnb3JkZXJieSddID8/ICdwb3B1bGFyaXR5JyApOwoJJHNlYXJjaCAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsncSddID8/ICcnICk7CgoJLy8gSW1hZ2VuIGRlIGNhYmVjZXJhOiBwcmltZXIgcHJvZHVjdG8gZGUgbGEgY2F0CgkkZmlyc3QgPSBnZXRfcG9zdHMoIFsgJ3Bvc3RfdHlwZScgPT4gJ3Byb2R1Y3QnLCAncG9zdHNfcGVyX3BhZ2UnID0+IDEsICd0YXhfcXVlcnknID0+IFsgWyAndGF4b25vbXknID0+ICdwcm9kdWN0X2NhdCcsICdmaWVsZCcgPT4gJ3Rlcm1faWQnLCAndGVybXMnID0+ICR0ZXJtLT50ZXJtX2lkIF0gXSBdICk7CgkkaGVyb19pbWcgPSAkZmlyc3QgPyBtb25hbGVfc2hvcF9pbWcoICRmaXJzdFswXS0+SUQgKSA6ICdodHRwczovL2ltYWdlcy5wZXhlbHMuY29tL3Bob3Rvcy8xNzcxOTg3OS9wZXhlbHMtcGhvdG8tMTc3MTk4NzkuanBlZz93PTE2MDAmaD02MDAmZml0PWNyb3AnOwoKCW9iX3N0YXJ0KCk7ID8+Cgk8c2VjdGlvbiBjbGFzcz0ibW4tc2hvcCBtbi1jYXQiIGRhdGEtbW9uYWxlLXNob3A+CgkJPGRpdiBjbGFzcz0ibW4tY2F0LWhlcm8iIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudChyZ2JhKDI1MywyNDAsMjQyLC44OCkscmdiYSgyMzcsMjI0LDIzNywuNykpLHVybCgnPD9waHAgZWNobyBlc2NfdXJsKCAkaGVyb19pbWcgKTsgPz4nKSI+CgkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciI+CgkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+Q29sZWNjacOzbjwvZGl2PgoJCQkJPGgxPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0ZXJtLT5uYW1lICk7ID8+PC9oMT4KCQkJCTw/cGhwIGlmICggJHRlcm0tPmRlc2NyaXB0aW9uICkgOiA/PgoJCQkJCTxkaXYgY2xhc3M9Im1uLWNhdC1pbnRybyI+PD9waHAgZWNobyB3cF9rc2VzX3Bvc3QoICR0ZXJtLT5kZXNjcmlwdGlvbiApOyA/PjwvZGl2PgoJCQkJPD9waHAgZW5kaWY7ID8+CgkJCQk8ZGl2IGNsYXNzPSJtbi1jYXQtY291bnQtaGVybyI+PD9waHAgZWNobyAoaW50KSAkdGVybS0+Y291bnQ7ID8+IHByb2R1Y3RvPD9waHAgZWNobyAkdGVybS0+Y291bnQgPT09IDEgPyAnJyA6ICdzJzsgPz48L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTw/cGhwIGlmICggJGNoaWxkcmVuICkgOiA/PgoJCTxkaXYgY2xhc3M9Im1uLWNhdC1jaGlwcy13cmFwIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9Im1uLWNhdC1jaGlwcyIgcm9sZT0idG9vbGJhciIgYXJpYS1sYWJlbD0iRXhwbG9yYXIgY2F0ZWdvcsOtYXMiPgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggaG9tZV91cmwoICcvdGllbmRhJyApICk7ID8+IiBjbGFzcz0ibW4tY2F0LWNoaXAiPlRvZGFzPC9hPgoJCQkJCTw/cGhwIGZvcmVhY2ggKCAkY2hpbGRyZW4gYXMgJGNoICkgOiA/PgoJCQkJCQk8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGdldF90ZXJtX2xpbmsoICRjaCApICk7ID8+IiBjbGFzcz0ibW4tY2F0LWNoaXAgPD9waHAgZWNobyAkY2gtPnRlcm1faWQgPT09ICR0ZXJtLT50ZXJtX2lkID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoJCQkJCQkJPD9waHAgZWNobyBlc2NfaHRtbCggJGNoLT5uYW1lICk7ID8+CgkJCQkJCTwvYT4KCQkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJCTw/cGhwIGVuZGlmOyA/PgoKCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIgbW4tc2hvcC1sYXlvdXQiPgoJCQk8YXNpZGUgY2xhc3M9Im1uLXNpZGViYXIiIGlkPSJtbi1zaWRlYmFyIj4KCQkJCTxmb3JtIGNsYXNzPSJtbi1zaWRlYmFyLWZvcm0iIGRhdGEtbW4tZmlsdGVycyBvbnN1Ym1pdD0icmV0dXJuIGZhbHNlIj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zaWRlYmFyLWhlYWQiPgoJCQkJCQk8aDM+RmlsdHJvczwvaDM+CgkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibW4tc2lkZWJhci1jbG9zZSIgYXJpYS1sYWJlbD0iQ2VycmFyIGZpbHRyb3MiPiZ0aW1lczs8L2J1dHRvbj4KCQkJCQk8L2Rpdj4KCgkJCQkJPGRpdiBjbGFzcz0ibW4tZmdyb3VwIj4KCQkJCQkJPGxhYmVsIGNsYXNzPSJtbi1mbGFiZWwiIGZvcj0ibW4tcSI+QnVzY2FyIGVuIDw/cGhwIGVjaG8gZXNjX2h0bWwoICR0ZXJtLT5uYW1lICk7ID8+PC9sYWJlbD4KCQkJCQkJPGRpdiBjbGFzcz0ibW4tc2VhcmNoLXdyYXAiPgoJCQkJCQkJPHN2ZyBjbGFzcz0ibW4tc2VhcmNoLWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PGNpcmNsZSBjeD0iMTEiIGN5PSIxMSIgcj0iOCIvPjxwYXRoIGQ9Im0yMSAyMS00LjM1LTQuMzUiLz48L3N2Zz4KCQkJCQkJCTxpbnB1dCBpZD0ibW4tcSIgdHlwZT0ic2VhcmNoIiBuYW1lPSJxIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJHNlYXJjaCApOyA/PiIgcGxhY2Vob2xkZXI9IsK/UXXDqSBidXNjYXM/IiBjbGFzcz0ibW4tZmlucHV0IiBhdXRvY29tcGxldGU9Im9mZiI+CgkJCQkJCQk8c3BhbiBjbGFzcz0ibW4tc2VhcmNoLWxvYWRlciIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgoJCQkJCTxkaXYgY2xhc3M9Im1uLWZncm91cCI+CgkJCQkJCTxzcGFuIGNsYXNzPSJtbi1mbGFiZWwiPkNvbG9yPC9zcGFuPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1zd2F0Y2hlcyI+CgkJCQkJCQk8P3BocCBmb3JlYWNoICggJGNvbG9yc19hbGwgYXMgJGMgKSA6CgkJCQkJCQkJJGhleCA9IG1vbmFsZV9jb2xvcl9oZXgoICRjLT5zbHVnICk7ID8+CgkJCQkJCQkJPGxhYmVsIGNsYXNzPSJtbi1zd2F0Y2gtd3JhcCIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjLT5uYW1lICk7ID8+Ij4KCQkJCQkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjb2xvciIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjLT5zbHVnICk7ID8+IiA8P3BocCBjaGVja2VkKCAkY29sb3IsICRjLT5zbHVnICk7ID8+PgoJCQkJCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3dhdGNoIDw/cGhwIGVjaG8gJGNvbG9yID09PSAkYy0+c2x1ZyA/ICdhY3RpdmUnIDogJyc7ID8+IiBzdHlsZT0iYmFja2dyb3VuZDogPD9waHAgZWNobyBlc2NfYXR0ciggJGhleCApOyA/PjsiPjwvc3Bhbj4KCQkJCQkJCQk8L2xhYmVsPgoJCQkJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJCQkJPC9kaXY+CgkJCQkJPC9kaXY+CgoJCQkJCTxkaXYgY2xhc3M9Im1uLWZncm91cCI+CgkJCQkJCTxzcGFuIGNsYXNzPSJtbi1mbGFiZWwiPlRhbGxhPC9zcGFuPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1zaXplLW9wdHMiPgoJCQkJCQkJPD9waHAgZm9yZWFjaCAoICR0YWxsYXNfYWxsIGFzICR0ICkgOiA/PgoJCQkJCQkJCTxsYWJlbCBjbGFzcz0ibW4tc2l6ZS1vcHQgPD9waHAgZWNobyAkdGFsbGEgPT09ICR0LT5zbHVnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoJCQkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRhbGxhIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJHQtPnNsdWcgKTsgPz4iIDw/cGhwIGNoZWNrZWQoICR0YWxsYSwgJHQtPnNsdWcgKTsgPz4+CgkJCQkJCQkJCTxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0LT5uYW1lICk7ID8+PC9zcGFuPgoJCQkJCQkJCTwvbGFiZWw+CgkJCQkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCgkJCQkJPGRpdiBjbGFzcz0ibW4tZmdyb3VwIj4KCQkJCQkJPGxhYmVsIGNsYXNzPSJtbi1mbGFiZWwiIGZvcj0ibW4tcmFuZ2UiPlByZWNpbyBtw6F4aW1vOiA8c3BhbiBkYXRhLW1uLXByaWNlLXZhbD48P3BocCBlY2hvICRtYXggPyBtb25hbGVfbW9uZXkoICRtYXggKSAuICcgTVhOJyA6ICdTaW4gbMOtbWl0ZSc7ID8+PC9zcGFuPjwvbGFiZWw+CgkJCQkJCTxpbnB1dCBpZD0ibW4tcmFuZ2UiIHR5cGU9InJhbmdlIiBuYW1lPSJtYXgiIG1pbj0iMCIgbWF4PSIzMDAwIiBzdGVwPSIxMDAiIHZhbHVlPSI8P3BocCBlY2hvIChpbnQpICRtYXg7ID8+IiBjbGFzcz0ibW4tcmFuZ2UiPgoJCQkJCTwvZGl2PgoKCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvcmRlcmJ5IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJG9yZGVyYnkgKTsgPz4iPgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImxvY2tfY2F0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGxvY2tfc2x1ZyApOyA/PiI+CgkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY3R4IiB2YWx1ZT0ic2hvcCI+CgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNpZGViYXItYWN0aW9ucyI+CgkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibW4tY2xlYXItYnRuIiBkYXRhLW1uLWNsZWFyPuKclSBMaW1waWFyIGZpbHRyb3M8L2J1dHRvbj4KCQkJCQk8L2Rpdj4KCQkJCTwvZm9ybT4KCQkJPC9hc2lkZT4KCgkJCTxkaXYgY2xhc3M9Im1uLXNob3AtbWFpbiI+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zaG9wLXRvb2xiYXIiPgoJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZmlsdGVyLXRhYiBtbi10b2dnbGUtc2lkZWJhciI+4piwIEZpbHRyb3M8L2J1dHRvbj4KCQkJCQk8c3BhbiBjbGFzcz0ibW4tc2hvcC1jb3VudCIgZGF0YS1tbi1jb3VudD4KCQkJCQkJPD9waHAgcHJpbnRmKCAnJWQgcHJvZHVjdG8lcycsIChpbnQpICRxdWVyeS0+Zm91bmRfcG9zdHMsICRxdWVyeS0+Zm91bmRfcG9zdHMgPT09IDEgPyAnJyA6ICdzJyApOyA/PgoJCQkJCTwvc3Bhbj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zb3J0Ij4KCQkJCQkJPGxhYmVsIGZvcj0ibW4tb3JkZXJieSI+T3JkZW5hcjo8L2xhYmVsPgoJCQkJCQk8c2VsZWN0IGlkPSJtbi1vcmRlcmJ5IiBjbGFzcz0iZmlsdGVyLXNlbGVjdCIgZGF0YS1tbi1vcmRlcmJ5PgoJCQkJCQkJPG9wdGlvbiB2YWx1ZT0icG9wdWxhcml0eSIgPD9waHAgc2VsZWN0ZWQoICRvcmRlcmJ5LCAncG9wdWxhcml0eScgKTsgPz4+TcOhcyBwb3B1bGFyZXM8L29wdGlvbj4KCQkJCQkJCTxvcHRpb24gdmFsdWU9ImRhdGUiICAgICAgIDw/cGhwIHNlbGVjdGVkKCAkb3JkZXJieSwgJ2RhdGUnICk7ID8+Pk3DoXMgcmVjaWVudGVzPC9vcHRpb24+CgkJCQkJCQk8b3B0aW9uIHZhbHVlPSJwcmljZSIgICAgICA8P3BocCBzZWxlY3RlZCggJG9yZGVyYnksICdwcmljZScgKTsgPz4+UHJlY2lvOiBtZW5vciBhIG1heW9yPC9vcHRpb24+CgkJCQkJCQk8b3B0aW9uIHZhbHVlPSJwcmljZS1kZXNjIiA8P3BocCBzZWxlY3RlZCggJG9yZGVyYnksICdwcmljZS1kZXNjJyApOyA/Pj5QcmVjaW86IG1heW9yIGEgbWVub3I8L29wdGlvbj4KCQkJCQkJCTxvcHRpb24gdmFsdWU9InRpdGxlIiAgICAgIDw/cGhwIHNlbGVjdGVkKCAkb3JkZXJieSwgJ3RpdGxlJyApOyA/Pj5B4oCTWjwvb3B0aW9uPgoJCQkJCQk8L3NlbGVjdD4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoKCQkJCTxkaXYgY2xhc3M9Im1uLWdyaWQtd3JhcCIgZGF0YS1tbi1ncmlkPgoJCQkJCTw/cGhwIGVjaG8gbW9uYWxlX3JlbmRlcl9ncmlkKCAkcXVlcnksICRjYXRfcGcgKTsgPz4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTwvc2VjdGlvbj4KCTw/cGhwCgllY2hvIG1vbmFsZV9xdWlja3ZpZXdfbW9kYWwoKTsKCWVjaG8gbW9uYWxlX3RvYXN0X2h0bWwoKTsKCXJldHVybiBtb25hbGVfY2xlYW4oIG9iX2dldF9jbGVhbigpICk7Cn0KYWRkX3Nob3J0Y29kZSggJ21vbmFsZV9jYXRlZ29yeScsICdtb25hbGVfY2F0ZWdvcnlfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgU2hvcnRjb2RlIFNJTkdMRSBQUk9EVUNUIOKAlCBbbW9uYWxlX3NpbmdsZV9wcm9kdWN0XQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfc2luZ2xlX3Byb2R1Y3RfcmVuZGVyKCAkYXR0cyA9IFtdICkgewoJJHBpZCA9IDA7Cgkkb2JqID0gZ2V0X3F1ZXJpZWRfb2JqZWN0KCk7CglpZiAoICRvYmogJiYgaXNzZXQoICRvYmotPklEICkgJiYgJG9iai0+cG9zdF90eXBlID09PSAncHJvZHVjdCcgKSB7ICRwaWQgPSAkb2JqLT5JRDsgfQoJaWYgKCAhICRwaWQgKSB7IGdsb2JhbCAkcG9zdDsgaWYgKCAkcG9zdCAmJiAkcG9zdC0+cG9zdF90eXBlID09PSAncHJvZHVjdCcgKSB7ICRwaWQgPSAkcG9zdC0+SUQ7IH0gfQoJaWYgKCAhICRwaWQgKSB7IHJldHVybiAnPGRpdiBjbGFzcz0ibW4tZW1wdHkiPjxoMz5Qcm9kdWN0byBubyBlbmNvbnRyYWRvPC9oMz48L2Rpdj4nOyB9CgoJJHRpdGxlICAgPSBnZXRfdGhlX3RpdGxlKCAkcGlkICk7CgkkaW1nICAgICA9IG1vbmFsZV9zaG9wX2ltZyggJHBpZCApOwoJJHJlZ3VsYXIgPSAoZmxvYXQpIGdldF9wb3N0X21ldGEoICRwaWQsICdfcmVndWxhcl9wcmljZScsIHRydWUgKTsKCSRzYWxlICAgID0gZ2V0X3Bvc3RfbWV0YSggJHBpZCwgJ19zYWxlX3ByaWNlJywgdHJ1ZSApOwoJJHByaWNlICAgPSAkc2FsZSA/IChmbG9hdCkgJHNhbGUgOiAkcmVndWxhcjsKCSRwcm9kdWN0ID0gZ2V0X3Bvc3QoICRwaWQgKTsKCSRkZXNjICAgID0gJHByb2R1Y3QtPnBvc3RfY29udGVudDsKCSRleGNlcnB0ID0gJHByb2R1Y3QtPnBvc3RfZXhjZXJwdDsKCgkkY2F0cyAgID0gd3BfZ2V0X3Bvc3RfdGVybXMoICRwaWQsICdwcm9kdWN0X2NhdCcgKTsKCWlmICggaXNfd3BfZXJyb3IoICRjYXRzICkgfHwgISBpc19hcnJheSggJGNhdHMgKSApIHsgJGNhdHMgPSBbXTsgfQoJJGNhdCAgICA9ICRjYXRzID8gJGNhdHNbMF0gOiBudWxsOwoJJGNvbG9ycyA9IHdwX2dldF9wb3N0X3Rlcm1zKCAkcGlkLCAncGFfY29sb3InICk7CglpZiAoIGlzX3dwX2Vycm9yKCAkY29sb3JzICkgfHwgISBpc19hcnJheSggJGNvbG9ycyApICkgeyAkY29sb3JzID0gW107IH0KCSR0YWxsYXMgPSB3cF9nZXRfcG9zdF90ZXJtcyggJHBpZCwgJ3BhX3RhbGxhJyApOwoJaWYgKCBpc193cF9lcnJvciggJHRhbGxhcyApIHx8ICEgaXNfYXJyYXkoICR0YWxsYXMgKSApIHsgJHRhbGxhcyA9IFtdOyB9CgoJLy8gUmVsYXRlZDogbWlzbWEgY2F0ZWdvcsOtYSwgZXhjbHVpciBlc3RlIHByb2R1Y3RvCgkkcmVsYXRlZF9pZHMgPSBbXTsKCWlmICggJGNhdCApIHsKCQkkcnEgPSBuZXcgV1BfUXVlcnkoIFsKCQkJJ3Bvc3RfdHlwZScgICAgICA9PiAncHJvZHVjdCcsCgkJCSdwb3N0c19wZXJfcGFnZScgPT4gNCwKCQkJJ3Bvc3RfX25vdF9pbicgICA9PiBbICRwaWQgXSwKCQkJJ3RheF9xdWVyeScgICAgICA9PiBbIFsgJ3RheG9ub215JyA9PiAncHJvZHVjdF9jYXQnLCAnZmllbGQnID0+ICd0ZXJtX2lkJywgJ3Rlcm1zJyA9PiAkY2F0LT50ZXJtX2lkIF0gXSwKCQkJJ29yZGVyYnknICAgICAgICA9PiAncmFuZCcsCgkJXSApOwoJCSRyZWxhdGVkX2lkcyA9IHdwX2xpc3RfcGx1Y2soICRycS0+cG9zdHMsICdJRCcgKTsKCQl3cF9yZXNldF9wb3N0ZGF0YSgpOwoJfQoJLy8gU2kgbm8gaGF5IHN1ZmljaWVudGVzLCByZWxsZW5hciBjb24gb3Ryb3MgcHJvZHVjdG9zCglpZiAoIGNvdW50KCAkcmVsYXRlZF9pZHMgKSA8IDQgKSB7CgkJJGV4Y2x1ZGUgPSBhcnJheV9tZXJnZSggWyAkcGlkIF0sICRyZWxhdGVkX2lkcyApOwoJCSRmaWxsID0gbmV3IFdQX1F1ZXJ5KCBbCgkJCSdwb3N0X3R5cGUnICAgICAgPT4gJ3Byb2R1Y3QnLAoJCQkncG9zdHNfcGVyX3BhZ2UnID0+IDQgLSBjb3VudCggJHJlbGF0ZWRfaWRzICksCgkJCSdwb3N0X19ub3RfaW4nICAgPT4gJGV4Y2x1ZGUsCgkJCSdvcmRlcmJ5JyAgICAgICAgPT4gJ3JhbmQnLAoJCV0gKTsKCQkkcmVsYXRlZF9pZHMgPSBhcnJheV9tZXJnZSggJHJlbGF0ZWRfaWRzLCB3cF9saXN0X3BsdWNrKCAkZmlsbC0+cG9zdHMsICdJRCcgKSApOwoJCXdwX3Jlc2V0X3Bvc3RkYXRhKCk7Cgl9CgoJb2Jfc3RhcnQoKTsgPz4KCTxzZWN0aW9uIGNsYXNzPSJtbi1zcCIgZGF0YS1tb25hbGUtc3AgZGF0YS1waWQ9Ijw/cGhwIGVjaG8gKGludCkgJHBpZDsgPz4iPgoKCQk8IS0tIEdhbGxlcnkgKyBJbmZvIC0tPgoJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciBtbi1zcC1tYWluIj4KCQkJPGRpdiBjbGFzcz0ibW4tc3AtZ2FsbGVyeSI+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1tYWluLWltZyI+CgkJCQkJPD9waHAKCQkJCQkvLyBJbWFnZW4gTENQIGRlbCBzaW5nbGUgcHJvZHVjdDogZmV0Y2hwcmlvcml0eT1oaWdoICsgZWFnZXIKCQkJCQkkbGNwX2ltZyA9IG1vbmFsZV9pbWcoICRpbWcsICR0aXRsZSwgOTAwLCAxMjAwLCAnKG1heC13aWR0aDogOTAwcHgpIDEwMHZ3LCA1MHZ3JywgdHJ1ZSApOwoJCQkJCS8vIElueWVjdGEgZWwgaWQ9Im1uLXNwLWltYWdlIiAobmVjZXNhcmlvIHBhcmEgem9vbSBKUykKCQkJCQllY2hvIHN0cl9yZXBsYWNlKCAnPGltZycsICc8aW1nIGlkPSJtbi1zcC1pbWFnZSInLCAkbGNwX2ltZyApOwoJCQkJCT8+CgkJCQkJPD9waHAgaWYgKCAkc2FsZSAmJiAkcmVndWxhciApIDoKCQkJCQkJJG9mZiA9IHJvdW5kKCAoIDEgLSAoICRwcmljZSAvICRyZWd1bGFyICkgKSAqIDEwMCApOyA/PgoJCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3AtYmFkZ2UiPi08P3BocCBlY2hvIChpbnQpICRvZmY7ID8+JTwvc3Bhbj4KCQkJCQk8P3BocCBlbmRpZjsgPz4KCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im1uLXNwLXpvb20iIGFyaWEtbGFiZWw9IkFtcGxpYXIgaW1hZ2VuIj4KCQkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48cGF0aCBkPSJtMjEgMjEtNC4zNS00LjM1Ii8+PGxpbmUgeDE9IjExIiB5MT0iOCIgeDI9IjExIiB5Mj0iMTQiLz48bGluZSB4MT0iOCIgeTE9IjExIiB4Mj0iMTQiIHkyPSIxMSIvPjwvc3ZnPgoJCQkJCTwvYnV0dG9uPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zcC10aHVtYnMiPgoJCQkJCTw/cGhwCgkJCQkJLy8gMyB0aHVtYm5haWxzIChtaXNtYSBpbWFnZW4gY29uIGNyb3BzIGRpc3RpbnRvcyBwYXJhIGRlbW8pCgkJCQkJJGNyb3BzID0gWyAndz00MDAmaD01MDAnLCAndz00MDAmaD01MDAmZml0PWNyb3AmY3JvcD10b3AnLCAndz00MDAmaD01MDAmZml0PWNyb3AmY3JvcD1ib3R0b20nIF07CgkJCQkJJGJhc2UgPSBnZXRfcG9zdF9tZXRhKCAkcGlkLCAnX21vbmFsZV9pbWdfdXJsJywgdHJ1ZSApOwoJCQkJCWZvcmVhY2ggKCAkY3JvcHMgYXMgJGkgPT4gJGMgKSA6CgkJCQkJCSR0aCA9ICRiYXNlID8gcHJlZ19yZXBsYWNlKCAnL3c9XGQrJmg9XGQrLycsICRjLCAkYmFzZSApIDogJGltZzsgPz4KCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zcC10aHVtYiA8P3BocCBlY2hvICRpID09PSAwID8gJ2FjdGl2ZScgOiAnJzsgPz4iIGRhdGEtaW1nPSI8P3BocCBlY2hvIGVzY191cmwoICR0aCApOyA/PiI+CgkJCQkJCQk8aW1nIHNyYz0iPD9waHAgZWNobyBlc2NfdXJsKCAkdGggKTsgPz4iIGFsdD0iIj4KCQkJCQkJPC9idXR0b24+CgkJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCgkJCTxkaXYgY2xhc3M9Im1uLXNwLWluZm8iPgoJCQkJPD9waHAgaWYgKCAkY2F0ICkgOiA/PgoJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggZ2V0X3Rlcm1fbGluayggJGNhdCApICk7ID8+IiBjbGFzcz0ibW4tc3AtY2F0Ij48P3BocCBlY2hvIGVzY19odG1sKCAkY2F0LT5uYW1lICk7ID8+PC9hPgoJCQkJPD9waHAgZW5kaWY7ID8+CgkJCQk8aDEgY2xhc3M9Im1uLXNwLXRpdGxlIj48P3BocCBlY2hvIGVzY19odG1sKCAkdGl0bGUgKTsgPz48L2gxPgoJCQkJPGRpdiBjbGFzcz0ibW4tc3AtcmF0aW5nIj4KCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3Atc3RhcnMiPuKYheKYheKYheKYheKYhTwvc3Bhbj4KCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3AtcmV2aWV3cyI+KDE4IHJlc2XDsWFzKTwvc3Bhbj4KCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3Atc2t1Ij5TS1U6IE1PTi08P3BocCBlY2hvIHN0cl9wYWQoICRwaWQsIDQsICcwJywgU1RSX1BBRF9MRUZUICk7ID8+PC9zcGFuPgoJCQkJPC9kaXY+CgoJCQkJPGRpdiBjbGFzcz0ibW4tc3AtcHJpY2UiPgoJCQkJCTw/cGhwIGlmICggJHNhbGUgJiYgJHJlZ3VsYXIgKSA6ID8+CgkJCQkJCTxzcGFuIGNsYXNzPSJtbi1zcC1ub3ciPjw/cGhwIGVjaG8gbW9uYWxlX21vbmV5KCAkcHJpY2UgKTsgPz4gPGVtPk1YTjwvZW0+PC9zcGFuPgoJCQkJCQk8c3BhbiBjbGFzcz0ibW4tc3Atb2xkIj48P3BocCBlY2hvIG1vbmFsZV9tb25leSggJHJlZ3VsYXIgKTsgPz48L3NwYW4+CgkJCQkJCTxzcGFuIGNsYXNzPSJtbi1zcC1zYXZlIj5BaG9ycmFzIDw/cGhwIGVjaG8gbW9uYWxlX21vbmV5KCAkcmVndWxhciAtICRwcmljZSApOyA/Pjwvc3Bhbj4KCQkJCQk8P3BocCBlbHNlIDogPz4KCQkJCQkJPHNwYW4gY2xhc3M9Im1uLXNwLW5vdyI+PD9waHAgZWNobyBtb25hbGVfbW9uZXkoICRwcmljZSApOyA/PiA8ZW0+TVhOPC9lbT48L3NwYW4+CgkJCQkJPD9waHAgZW5kaWY7ID8+CgkJCQk8L2Rpdj4KCgkJCQk8P3BocCBpZiAoICRleGNlcnB0ICkgOiA/PgoJCQkJCTxwIGNsYXNzPSJtbi1zcC1leGNlcnB0Ij48P3BocCBlY2hvIGVzY19odG1sKCAkZXhjZXJwdCApOyA/PjwvcD4KCQkJCTw/cGhwIGVuZGlmOyA/PgoKCQkJCTw/cGhwIGlmICggJGNvbG9ycyApIDogPz4KCQkJCTxkaXYgY2xhc3M9Im1uLXNwLWdyb3VwIj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1sYWJlbCI+Q29sb3I6IDxzcGFuIGNsYXNzPSJtbi1zcC12YWwiIGRhdGEtc2VsLWNvbG9yPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRjb2xvcnNbMF0tPm5hbWUgKTsgPz48L3NwYW4+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tc3AtY29sb3JzIj4KCQkJCQkJPD9waHAgZm9yZWFjaCAoICRjb2xvcnMgYXMgJGkgPT4gJGMgKSA6CgkJCQkJCQkkaGV4ID0gbW9uYWxlX2NvbG9yX2hleCggJGMtPnNsdWcgKTsKCQkJCQkJCSRzaCAgPSAoICRjLT5zbHVnID09PSAnYmxhbmNvJyApID8gJ2JveC1zaGFkb3c6MCAwIDAgMXB4ICNjY2M7JyA6ICcnOyA/PgoJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zcC1jb2xvciA8P3BocCBlY2hvICRpID09PSAwID8gJ2FjdGl2ZScgOiAnJzsgPz4iCgkJCQkJCQkgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiA8P3BocCBlY2hvIGVzY19hdHRyKCAkaGV4ICk7ID8+OyA8P3BocCBlY2hvIGVzY19hdHRyKCAkc2ggKTsgPz4iCgkJCQkJCQkgICAgICAgIGRhdGEtbmFtZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGMtPm5hbWUgKTsgPz4iCgkJCQkJCQkgICAgICAgIGFyaWEtbGFiZWw9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjLT5uYW1lICk7ID8+Ij48L2J1dHRvbj4KCQkJCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPD9waHAgZW5kaWY7ID8+CgoJCQkJPD9waHAgaWYgKCAkdGFsbGFzICkgOiA/PgoJCQkJPGRpdiBjbGFzcz0ibW4tc3AtZ3JvdXAiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNwLWxhYmVsLXJvdyI+CgkJCQkJCTxzcGFuIGNsYXNzPSJtbi1zcC1sYWJlbCI+VGFsbGE6IDxzcGFuIGNsYXNzPSJtbi1zcC12YWwiIGRhdGEtc2VsLXRhbGxhPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0YWxsYXNbMF0tPm5hbWUgKTsgPz48L3NwYW4+PC9zcGFuPgoJCQkJCQk8YSBocmVmPSIjIiBjbGFzcz0ibW4tc3AtZ3VpZGUiPvCfk48gR3XDrWEgZGUgdGFsbGFzPC9hPgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNwLXNpemVzIj4KCQkJCQkJPD9waHAgZm9yZWFjaCAoICR0YWxsYXMgYXMgJGkgPT4gJHQgKSA6ID8+CgkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im1uLXNwLXNpemUgPD9waHAgZWNobyAkaSA9PT0gMCA/ICdhY3RpdmUnIDogJyc7ID8+IiBkYXRhLW5hbWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICR0LT5uYW1lICk7ID8+Ij48P3BocCBlY2hvIGVzY19odG1sKCAkdC0+bmFtZSApOyA/PjwvYnV0dG9uPgoJCQkJCQk8P3BocCBlbmRmb3JlYWNoOyA/PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8P3BocCBlbmRpZjsgPz4KCgkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1hY3Rpb25zIj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1xdHkiPgoJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im1uLXNwLXF0eS1idG4iIGRhdGEtcXR5PSItIiBhcmlhLWxhYmVsPSJSZXN0YXIiPuKIkjwvYnV0dG9uPgoJCQkJCQk8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0ibW4tc3AtcXR5LWlucHV0IiB2YWx1ZT0iMSIgbWluPSIxIiBtYXg9IjEwIiByZWFkb25seT4KCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zcC1xdHktYnRuIiBkYXRhLXF0eT0iKyIgYXJpYS1sYWJlbD0iU3VtYXIiPis8L2J1dHRvbj4KCQkJCQk8L2Rpdj4KCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1hZGQtY2FydCBtbi1zcC1jYXJ0IiBkYXRhLW1uLWFkZGNhcnQ9Ijw/cGhwIGVjaG8gKGludCkgJHBpZDsgPz4iIGRhdGEtbW4tcXR5LWZyb209Ii5tbi1zcC1xdHktaW5wdXQiPgoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTYgMiAzIDZ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjZsLTMtNHoiLz48cGF0aCBkPSJNMyA2aDE4Ii8+PHBhdGggZD0iTTE2IDEwYTQgNCAwIDAgMS04IDAiLz48L3N2Zz4KCQkJCQkJQWdyZWdhciBhbCBjYXJyaXRvCgkJCQkJPC9idXR0b24+CgkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zcC13aXNoIHByb2R1Y3Qtd2lzaGxpc3QiIGRhdGEtc3Atd2lzaCBhcmlhLWxhYmVsPSJBw7FhZGlyIGEgZmF2b3JpdG9zIj4KCQkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0yMC44NCA0LjYxYTUuNSA1LjUgMCAwIDAtNy43OCAwTDEyIDUuNjdsLTEuMDYtMS4wNmE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwxLjA2IDEuMDZMMTIgMjEuMjNsNy43OC03Ljc4IDEuMDYtMS4wNmE1LjUgNS41IDAgMCAwIDAtNy43OHoiLz48L3N2Zz4KCQkJCQk8L2J1dHRvbj4KCQkJCTwvZGl2PgoKCQkJCTxkaXYgY2xhc3M9Im1uLXNwLW1ldGEiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNwLW1ldGEtaXRlbSI+CgkJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cmVjdCB4PSIxIiB5PSIzIiB3aWR0aD0iMTUiIGhlaWdodD0iMTMiLz48cG9seWdvbiBwb2ludHM9IjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4Ii8+PGNpcmNsZSBjeD0iNS41IiBjeT0iMTguNSIgcj0iMi41Ii8+PGNpcmNsZSBjeD0iMTguNSIgY3k9IjE4LjUiIHI9IjIuNSIvPjwvc3ZnPgoJCQkJCQk8ZGl2PjxzdHJvbmc+RW52w61vIGdyYXRpczwvc3Ryb25nPjxzcGFuPkVuIGNvbXByYXMgbWF5b3JlcyBhICQxLDUwMDwvc3Bhbj48L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1tZXRhLWl0ZW0iPgoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDAgOSA5IDAgMCAwLTE4IDAiLz48cG9seWxpbmUgcG9pbnRzPSIxMiA3IDEyIDEyIDE1IDE1Ii8+PC9zdmc+CgkJCQkJCTxkaXY+PHN0cm9uZz5FbnRyZWdhIDMtNSBkw61hczwvc3Ryb25nPjxzcGFuPlJhc3RyZW8gZW4gdGllbXBvIHJlYWw8L3NwYW4+PC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tc3AtbWV0YS1pdGVtIj4KCQkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xIDR2Nmg2Ii8+PHBhdGggZD0iTTMuNTEgMTVhOSA5IDAgMSAwIDIuMTMtOS4zNkwxIDEwIi8+PC9zdmc+CgkJCQkJCTxkaXY+PHN0cm9uZz5EZXZvbHVjaW9uZXM8L3N0cm9uZz48c3Bhbj4xNSBkw61hcyBzaW4gcHJlZ3VudGFzPC9zcGFuPjwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNwLW1ldGEtaXRlbSI+CgkJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cmVjdCB4PSIzIiB5PSIxMSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiByeD0iMiIvPjxwYXRoIGQ9Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIvPjwvc3ZnPgoJCQkJCQk8ZGl2PjxzdHJvbmc+UGFnbyBzZWd1cm88L3N0cm9uZz48c3Bhbj5TU0wgKyBNZXJjYWRvIFBhZ288L3NwYW4+PC9kaXY+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTwhLS0gVGFicyAtLT4KCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIiPgoJCQk8ZGl2IGNsYXNzPSJtbi1zcC10YWJzIj4KCQkJCTxkaXYgY2xhc3M9Im1uLXNwLXRhYi1uYXYiIHJvbGU9InRhYmxpc3QiPgoJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibW4tc3AtdGFiIGFjdGl2ZSIgZGF0YS10YWI9ImRlc2MiIHJvbGU9InRhYiI+RGVzY3JpcGNpw7NuPC9idXR0b24+CgkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1zcC10YWIiIGRhdGEtdGFiPSJkZXQiIHJvbGU9InRhYiI+RGV0YWxsZXM8L2J1dHRvbj4KCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im1uLXNwLXRhYiIgZGF0YS10YWI9ImVudiIgcm9sZT0idGFiIj5FbnbDrW9zIHkgZGV2b2x1Y2lvbmVzPC9idXR0b24+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXNwLXRhYi1wYW5lbHMiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLXNwLXBhbmVsIGFjdGl2ZSIgZGF0YS1wYW5lbD0iZGVzYyI+CgkJCQkJCTxwPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRkZXNjID86ICRleGNlcnB0ICk7ID8+PC9wPgoJCQkJCQk8dWw+CgkJCQkJCQk8bGk+VGVsYSBwcmVtaXVtIGRlIGNhw61kYSBlbGVnYW50ZSB5IHN1YXZlIGFsIHRhY3RvPC9saT4KCQkJCQkJCTxsaT5Db3J0ZSBmYXZvcmVjZWRvciBkaXNlw7FhZG8gcGFyYSByZWFsemFyIHR1IHBhbmNpdGE8L2xpPgoJCQkJCQkJPGxpPkNvbmZlY2Npw7NuIGFydGVzYW5hbCBjb24gYWNhYmFkb3MgZGUgYm91dGlxdWU8L2xpPgoJCQkJCQkJPGxpPkPDs21vZG8gcGFyYSBsbGV2YXIgdG9kbyBlbCBkw61hPC9saT4KCQkJCQkJPC91bD4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1wYW5lbCIgZGF0YS1wYW5lbD0iZGV0Ij4KCQkJCQkJPHRhYmxlIGNsYXNzPSJtbi1zcC1kZXRhaWxzIj4KCQkJCQkJCTx0cj48dGg+TWF0ZXJpYWw8L3RoPjx0ZD45NSUgcG9sacOpc3RlciwgNSUgZWxhc3Rhbm88L3RkPjwvdHI+CgkJCQkJCQk8dHI+PHRoPkN1aWRhZG88L3RoPjx0ZD5MYXZhZG8gYSBtYW5vIGNvbiBhZ3VhIGZyw61hPC90ZD48L3RyPgoJCQkJCQkJPHRyPjx0aD5PcmlnZW48L3RoPjx0ZD5Nw6l4aWNvPC90ZD48L3RyPgoJCQkJCQkJPHRyPjx0aD5UYWxsYXMgZGlzcG9uaWJsZXM8L3RoPjx0ZD48P3BocCBlY2hvIGVzY19odG1sKCBpbXBsb2RlKCAnLCAnLCB3cF9saXN0X3BsdWNrKCAkdGFsbGFzLCAnbmFtZScgKSApICk7ID8+PC90ZD48L3RyPgoJCQkJCQkJPHRyPjx0aD5Db2xvcmVzPC90aD48dGQ+PD9waHAgZWNobyBlc2NfaHRtbCggaW1wbG9kZSggJywgJywgd3BfbGlzdF9wbHVjayggJGNvbG9ycywgJ25hbWUnICkgKSApOyA/PjwvdGQ+PC90cj4KCQkJCQkJPC90YWJsZT4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1zcC1wYW5lbCIgZGF0YS1wYW5lbD0iZW52Ij4KCQkJCQkJPHA+PHN0cm9uZz5FbnbDrW9zOjwvc3Ryb25nPiBIYWNlbW9zIGVudsOtb3MgYSB0b2RvIE3DqXhpY28gZW4gMyBhIDUgZMOtYXMgaMOhYmlsZXMuIEVudsOtbyBncmF0aXMgZW4gY29tcHJhcyBtYXlvcmVzIGEgJDEsNTAwIE1YTi48L3A+CgkJCQkJCTxwPjxzdHJvbmc+RGV2b2x1Y2lvbmVzOjwvc3Ryb25nPiBUaWVuZXMgMTUgZMOtYXMgcGFyYSBjYW1iaWFyIG8gZGV2b2x2ZXIgdHUgcGVkaWRvLiBMYSBwcmVuZGEgZGViZSBlc3RhciBzaW4gdXNhciB5IGNvbiBldGlxdWV0YXMuPC9wPgoJCQkJCQk8cD48c3Ryb25nPkNhbWJpb3MgZGUgdGFsbGE6PC9zdHJvbmc+IFNpbiBjb3N0byBleHRyYSwgc29sbyBjdWJyZXMgZWwgZW52w61vIGRlIHJlZ3Jlc28uPC9wPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8IS0tIFJlbGF0ZWQgcHJvZHVjdHMgLS0+CgkJPD9waHAgaWYgKCAkcmVsYXRlZF9pZHMgKSA6ID8+CgkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIG1uLXNwLXJlbGF0ZWQiPgoJCQk8ZGl2IGNsYXNzPSJtbi1zZWN0aW9uLWhlYWRlciI+CgkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+VGFtYmnDqW4gdGUgcHVlZGUgZ3VzdGFyPC9kaXY+CgkJCQk8aDI+UHJvZHVjdG9zIDxzcGFuIGNsYXNzPSJtbi1hY2NlbnQiPnJlbGFjaW9uYWRvczwvc3Bhbj48L2gyPgoJCQkJPHA+RGVzY3VicmUgbcOhcyBwaWV6YXMgcXVlIGNvbWJpbmFuIGNvbiB0dSBlc3RpbG88L3A+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJwcm9kdWN0cy1ncmlkIG1uLXNwLXJlbGF0ZWQtZ3JpZCIgcm9sZT0ibGlzdCI+CgkJCQk8P3BocCBmb3JlYWNoICggJHJlbGF0ZWRfaWRzIGFzICRyaWQgKSB7IGVjaG8gbW9uYWxlX3JlbmRlcl9wcm9kdWN0X2NhcmQoICRyaWQgKTsgfSA/PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8P3BocCBlbmRpZjsgPz4KCTwvc2VjdGlvbj4KCTw/cGhwCgllY2hvIG1vbmFsZV9xdWlja3ZpZXdfbW9kYWwoKTsKCWVjaG8gbW9uYWxlX3RvYXN0X2h0bWwoKTsKCXJldHVybiBtb25hbGVfY2xlYW4oIG9iX2dldF9jbGVhbigpICk7Cn0KYWRkX3Nob3J0Y29kZSggJ21vbmFsZV9zaW5nbGVfcHJvZHVjdCcsICdtb25hbGVfc2luZ2xlX3Byb2R1Y3RfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgU2hvcnRjb2RlIE5PU09UUkFTIOKAlCBbbW9uYWxlX25vc290cmFzXQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfbm9zb3RyYXNfcmVuZGVyKCAkYXR0cyA9IFtdICkgewoJb2Jfc3RhcnQoKTsgPz4KCTxzZWN0aW9uIGNsYXNzPSJtbi1hYm91dC1wYWdlIj4KCQk8IS0tIEhlcm8gLS0+CgkJPGRpdiBjbGFzcz0ibW4tYWItaGVybyI+CgkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciI+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hYi1oZXJvLWdyaWQiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWhlcm8tdGV4dCI+CgkJCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj5OdWVzdHJhIGhpc3RvcmlhPC9kaXY+CgkJCQkJCTxoMT5Nw6FzIHF1ZSB2ZXN0aWRvcywgPHNwYW4gY2xhc3M9Im1uLWFjY2VudCI+bW9tZW50b3MgaW5vbHZpZGFibGVzPC9zcGFuPjwvaDE+CgkJCQkJCTxwPk1vbmFsw6kgbmFjZSBjb24gZWwgZGVzZW8gZGUgaGFjZXIgc2VudGlyIGEgY2FkYSBtdWplciBlbWJhcmF6YWRhIHNlZ3VyYSwgaGVybW9zYSB5IGVzcGVjaWFsIGVuIHVuYSBkZSBsYXMgZXRhcGFzIG3DoXMgaW1wb3J0YW50ZXMgZGUgc3UgdmlkYS48L3A+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWhlcm8tc3RhdHMiPgoJCQkJCQkJPGRpdj48c3Ryb25nPjIwMCs8L3N0cm9uZz48c3Bhbj5NYW3DoXMgZmVsaWNlczwvc3Bhbj48L2Rpdj4KCQkJCQkJCTxkaXY+PHN0cm9uZz41IGHDsW9zPC9zdHJvbmc+PHNwYW4+RGUgZXhwZXJpZW5jaWE8L3NwYW4+PC9kaXY+CgkJCQkJCQk8ZGl2PjxzdHJvbmc+MzI8L3N0cm9uZz48c3Bhbj5Fc3RhZG9zIGRlIE3DqXhpY288L3NwYW4+PC9kaXY+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWhlcm8taW1nIj4KCQkJCQkJPGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLnBleGVscy5jb20vcGhvdG9zLzI4MjEyMTE5L3BleGVscy1waG90by0yODIxMjExOS5qcGVnP3c9OTAwJmg9MTEwMCZmaXQ9Y3JvcCZhdXRvPWNvbXByZXNzJmNzPXRpbnlzcmdiIiBhbHQ9Ik1vbmFsw6kg4oCUIGNlbGVicmFuZG8gbGEgbWF0ZXJuaWRhZCI+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWhlcm8tYmFkZ2UiPgoJCQkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTEyIDJsMi40IDcuNEgyMmwtNi4yIDQuNSAyLjQgNy40TDEyIDE2LjhsLTYuMiA0LjUgMi40LTcuNEwyIDkuNGg3LjZ6Ii8+PC9zdmc+CgkJCQkJCQk8c3Ryb25nPjUuMDwvc3Ryb25nPgoJCQkJCQkJPHNwYW4+cmVzZcOxYXMgdmVyaWZpY2FkYXM8L3NwYW4+CgkJCQkJCTwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8IS0tIE1pc2nDs24gLyBWaXNpw7NuIC8gVmFsb3JlcyAtLT4KCQk8ZGl2IGNsYXNzPSJtbi1hYi1tdnYiPgoJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIiPgoJCQkJPGRpdiBjbGFzcz0ibW4tYWItbXZ2LWdyaWQiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWNhcmQiPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1hYi1pY29uIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjYiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIiBmaWxsPSJjdXJyZW50Q29sb3IiLz48L3N2Zz48L2Rpdj4KCQkJCQkJPGgzPk51ZXN0cmEgbWlzacOzbjwvaDM+CgkJCQkJCTxwPkFjb21wYcOxYXJ0ZSBjb24gZGlzZcOxb3MgZWxlZ2FudGVzLCBjw7Ntb2RvcyB5IGFjY2VzaWJsZXMgcXVlIHJlYWx6YW4gdHUgYmVsbGV6YSBlbiBjYWRhIGV0YXBhIGRlbCBlbWJhcmF6by48L3A+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItY2FyZCI+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWljb24iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiPjxwYXRoIGQ9Ik0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLTh6Ii8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMyIvPjwvc3ZnPjwvZGl2PgoJCQkJCQk8aDM+TnVlc3RyYSB2aXNpw7NuPC9oMz4KCQkJCQkJPHA+U2VyIGxhIGJvdXRpcXVlIGRlIG1hdGVybmlkYWQgZGUgcmVmZXJlbmNpYSBlbiBNw6l4aWNvLCBjb25vY2lkYSBwb3IgZGlzZcOxb3Mgw7puaWNvcyB5IGF0ZW5jacOzbiBkZSBib3V0aXF1ZS48L3A+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItY2FyZCI+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLWljb24iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiPjxwYXRoIGQ9Ik0yMC44NCA0LjYxYTUuNSA1LjUgMCAwIDAtNy43OCAwTDEyIDUuNjdsLTEuMDYtMS4wNmE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwxLjA2IDEuMDZMMTIgMjEuMjNsNy43OC03Ljc4IDEuMDYtMS4wNmE1LjUgNS41IDAgMCAwIDAtNy43OHoiLz48L3N2Zz48L2Rpdj4KCQkJCQkJPGgzPk51ZXN0cm9zIHZhbG9yZXM8L2gzPgoJCQkJCQk8cD5DYWxpZGFkLCBjb25maWFuemEsIGVtcGF0w61hIHkgdW4gY29tcHJvbWlzbyByZWFsIGNvbiBjYWRhIGNsaWVudGEuIExvIHRyYXRhbW9zIGNvbW8gdHJhdGFyw61hbW9zIGEgbnVlc3RyYSBoZXJtYW5hLjwvcD4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCgkJPCEtLSBIaXN0b3JpYSBjb24gaW1hZ2VuICsgdGV4dG8gLS0+CgkJPGRpdiBjbGFzcz0ibW4tYWItc3RvcnkiPgoJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIiPgoJCQkJPGRpdiBjbGFzcz0ibW4tYWItc3RvcnktZ3JpZCI+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItc3RvcnktaW1nIj4KCQkJCQkJPGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLnBleGVscy5jb20vcGhvdG9zLzE3NzE5ODc5L3BleGVscy1waG90by0xNzcxOTg3OS5qcGVnP3c9OTAwJmg9MTEwMCZmaXQ9Y3JvcCZhdXRvPWNvbXByZXNzJmNzPXRpbnlzcmdiIiBhbHQ9Ikhpc3RvcmlhIE1vbmFsw6kiPgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9Im1uLWFiLXN0b3J5LXRleHQiPgoJCQkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+RGUgZMOzbmRlIHZlbmltb3M8L2Rpdj4KCQkJCQkJPGgyPlVuYSBib3V0aXF1ZSBkZSA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij5DZC4gVmljdG9yaWE8L3NwYW4+IGFsIHJlc3RvIGRlIE3DqXhpY288L2gyPgoJCQkJCQk8cD5Db21lbnphbW9zIGNvbW8gdW5hIGJvdXRpcXVlIGRlIHJlbnRhIGVuIENkLiBWaWN0b3JpYSwgVGFtYXVsaXBhcywgcG9ycXVlIG5vdGFtb3MgcXVlIGhhYsOtYSBwb2NvcyB2ZXN0aWRvcyByZWFsbWVudGUgbW9kZXJub3MgcGFyYSBsYSBtYXRlcm5pZGFkLjwvcD4KCQkJCQkJPHA+RGVzcHXDqXMgZGUgdmVzdGlyIGEgZGVjZW5hcyBkZSBtYW3DoXMgbG9jYWxlcyBwYXJhIGJhYnkgc2hvd2Vycywgc2VzaW9uZXMgZGUgZm90b3MgeSBldmVudG9zIGVzcGVjaWFsZXMsIGRlY2lkaW1vcyBkYXIgZWwgcGFzbyBhIHZlbnRhIG5hY2lvbmFsIHBhcmEgcXVlIG3DoXMgZnV0dXJhcyBtYW3DoXMgcHVlZGFuIGVuY29udHJhciBzdSB2ZXN0aWRvIHBlcmZlY3RvIHNpbiBpbXBvcnRhciBkw7NuZGUgZXN0w6luLjwvcD4KCQkJCQkJPHA+PHN0cm9uZz5DYWRhIHZlc3RpZG8gcXVlIGVudmlhbW9zPC9zdHJvbmc+IGVzIGluc3BlY2Npb25hZG8gYSBtYW5vLCBlbXBhcXVldGFkbyBjb24gYW1vciB5IGRlc3BhY2hhZG8gY29uIHVuYSBub3RhIHBlcnNvbmFsLiBQb3JxdWUgdHUgcGFuY2l0YSBtZXJlY2UgbG8gbWVqb3IuPC9wPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8IS0tIFRpbWVsaW5lIC0tPgoJCTxkaXYgY2xhc3M9Im1uLWFiLXRpbWVsaW5lIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9Im1uLXNlY3Rpb24taGVhZGVyIj4KCQkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+TnVlc3RyYSB0cmF5ZWN0b3JpYTwvZGl2PgoJCQkJCTxoMj5VbiBjYW1pbm8gbGxlbm8gZGUgPHNwYW4gY2xhc3M9Im1uLWFjY2VudCI+YW1vcjwvc3Bhbj48L2gyPgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hYi1zdGVwcyI+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItc3RlcCI+PGRpdiBjbGFzcz0ibW4tYWIteWVhciI+MjAyMTwvZGl2PjxoND5OYWNlIE1vbmFsw6k8L2g0PjxwPkFicmltb3MgbnVlc3RyYSBib3V0aXF1ZSBsb2NhbCBkZSByZW50YSBkZSB2ZXN0aWRvcyBkZSBtYXRlcm5pZGFkLjwvcD48L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1hYi1zdGVwIj48ZGl2IGNsYXNzPSJtbi1hYi15ZWFyIj4yMDIzPC9kaXY+PGg0PjEwMCBtYW3DoXMgdmVzdGlkYXM8L2g0PjxwPkNlbGVicmFtb3MgbnVlc3RyYSBwcmltZXJhIGNlbnRlbmEgZGUgY2xpZW50YXMgZW4gVGFtYXVsaXBhcy48L3A+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItc3RlcCI+PGRpdiBjbGFzcz0ibW4tYWIteWVhciI+MjAyNTwvZGl2PjxoND5DYXTDoWxvZ28gcHJvcGlvPC9oND48cD5MYW56YW1vcyBudWVzdHJhIHByaW1lcmEgY29sZWNjacOzbiBleGNsdXNpdmEgZGUgZGlzZcOxb3Mgw7puaWNvcy48L3A+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYWItc3RlcCI+PGRpdiBjbGFzcz0ibW4tYWIteWVhciI+MjAyNjwvZGl2PjxoND5WZW50YSBuYWNpb25hbDwvaDQ+PHA+RGFtb3MgZWwgZ3JhbiBwYXNvOiBlbnbDrW9zIGEgdG9kbyBNw6l4aWNvIGNvbiBhdGVuY2nDs24gcGVyc29uYWxpemFkYS48L3A+PC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTwhLS0gQ1RBIC0tPgoJCTxkaXYgY2xhc3M9Im1uLWFiLWN0YSI+CgkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhaW5lciI+CgkJCQk8aDI+wr9MaXN0YSBwYXJhIGVuY29udHJhciA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij50dSB2ZXN0aWRvPC9zcGFuPj88L2gyPgoJCQkJPHA+RXhwbG9yYSBudWVzdHJhIGNvbGVjY2nDs24geSBkw6lqYXRlIGVuYW1vcmFyIHBvciBudWVzdHJvcyBkaXNlw7Fvcy48L3A+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hY3Rpb25zIiBzdHlsZT0ianVzdGlmeS1jb250ZW50OmNlbnRlciI+CgkJCQkJPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCBob21lX3VybCggJy90aWVuZGEnICkgKTsgPz4iIGNsYXNzPSJtbi1idG4tcHJpbWFyeSI+VmVyIGxhIHRpZW5kYTwvYT4KCQkJCQk8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoIGhvbWVfdXJsKCAnL2NvbnRhY3RvJyApICk7ID8+IiBjbGFzcz0ibW4tYnRuLXNlY29uZGFyeSI+Q29udGFjdGFyPC9hPgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJPC9zZWN0aW9uPgoJPD9waHAKCXJldHVybiBtb25hbGVfY2xlYW4oIG9iX2dldF9jbGVhbigpICk7Cn0KYWRkX3Nob3J0Y29kZSggJ21vbmFsZV9ub3NvdHJhcycsICdtb25hbGVfbm9zb3RyYXNfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgU2hvcnRjb2RlIENPTlRBQ1RPIOKAlCBbbW9uYWxlX2NvbnRhY3RvXQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfY29udGFjdG9fcmVuZGVyKCAkYXR0cyA9IFtdICkgewoJJHNlbnQgPSBpc3NldCggJF9HRVRbJ3NlbnQnXSApICYmICRfR0VUWydzZW50J10gPT09ICcxJzsKCgkvLyBQcm9jZXNhciBQT1NUCglpZiAoICEgZW1wdHkoICRfUE9TVFsnbW5fY29udGFjdF9zdWJtaXQnXSApICYmIHdwX3ZlcmlmeV9ub25jZSggJF9QT1NUWydtbl9jb250YWN0X25vbmNlJ10gPz8gJycsICdtb25hbGVfY29udGFjdCcgKSApIHsKCQkkbmFtZSAgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsnbW5fbmFtZSddID8/ICcnICk7CgkJJGVtYWlsICAgPSBzYW5pdGl6ZV9lbWFpbCggJF9QT1NUWydtbl9lbWFpbCddID8/ICcnICk7CgkJJHBob25lICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ21uX3Bob25lJ10gPz8gJycgKTsKCQkkc3ViamVjdCA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsnbW5fc3ViamVjdCddID8/ICcnICk7CgkJJG1zZyAgICAgPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCggJF9QT1NUWydtbl9tZXNzYWdlJ10gPz8gJycgKTsKCQlpZiAoICRuYW1lICYmICRlbWFpbCAmJiAkbXNnICkgewoJCQl3cF9tYWlsKAoJCQkJZ2V0X29wdGlvbiggJ2FkbWluX2VtYWlsJyApLAoJCQkJJ1tNb25hbMOpXSBOdWV2byBtZW5zYWplOiAnIC4gJHN1YmplY3QsCgkJCQkiTm9tYnJlOiAkbmFtZVxuRW1haWw6ICRlbWFpbFxuVGVsw6lmb25vOiAkcGhvbmVcblxuQXN1bnRvOiAkc3ViamVjdFxuXG5NZW5zYWplOlxuJG1zZyIsCgkJCQlbICdSZXBseS1UbzogJyAuICRlbWFpbCBdCgkJCSk7CgkJCXdwX3NhZmVfcmVkaXJlY3QoIGFkZF9xdWVyeV9hcmcoICdzZW50JywgJzEnLCBnZXRfcGVybWFsaW5rKCkgKSApOwoJCQlleGl0OwoJCX0KCX0KCglvYl9zdGFydCgpOyA/PgoJPHNlY3Rpb24gY2xhc3M9Im1uLWNvbnRhY3QtcGFnZSI+CgkJPGRpdiBjbGFzcz0ibW4tY29udGFjdC1oZXJvIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj5IYWJsZW1vczwvZGl2PgoJCQkJPGgxPkVzdGFtb3MgYXF1w60gcGFyYSA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij5hY29tcGHDsWFydGU8L3NwYW4+PC9oMT4KCQkJCTxwPsK/RHVkYXMgZGUgdGFsbGFzLCBlbnbDrW9zIG8gbmVjZXNpdGFzIGF5dWRhIHBhcmEgZWxlZ2lyIHR1IHZlc3RpZG8/IEVzY3LDrWJlbm9zIHkgdGUgcmVzcG9uZGVtb3MgcGVyc29uYWxtZW50ZS48L3A+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIgbW4tY29udGFjdC1ncmlkIj4KCQkJPCEtLSBJbmZvIGNhcmRzIC0tPgoJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWN0LWluZm8iPgoJCQkJPGEgaHJlZj0iaHR0cHM6Ly93YS5tZS81MjgzNDEyMzQ1NjciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBjbGFzcz0ibW4tY29udGFjdC1jYXJkIG1uLWNvbnRhY3Qtd2EiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhY3QtaWNvbiI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTE3LjUgMTQuNGMtLjMtLjEtMS43LS44LTItLjktLjMtLjEtLjUtLjEtLjcuMS0uMi4zLS43LjktLjkgMS4xLS4yLjItLjMuMi0uNi4xLTEuNy0uOC0yLjgtMS41LTMuOS0zLjUtLjMtLjUuMy0uNS44LTEuNS4xLS4yIDAtLjQgMC0uNSAwLS4xLS42LTEuNi0uOS0yLjEtLjItLjUtLjQtLjUtLjYtLjUtLjIgMC0uNCAwLS41IDAtLjIgMC0uNS4xLS44LjQtLjMuMy0xIDEtMSAyLjVzMS4xIDMgMS4yIDMuMmMuMi4yIDIuMSAzLjQgNS4xIDQuNSAxLjkuOCAyLjcuOSAzLjYuNy42LS4xIDEuNy0uNyAyLTEuNC4yLS43LjItMS4zLjItMS40LS4xLS4xLS4zLS4yLS41LS4zek0xMiAyQzYuNSAyIDIgNi41IDIgMTJjMCAyIC42IDMuOCAxLjYgNS4zTDIgMjJsNC44LTEuNmMxLjUuOSAzLjIgMS40IDUuMiAxLjQgNS41IDAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyeiIvPjwvc3ZnPjwvZGl2PgoJCQkJCTxkaXY+PHN0cm9uZz5XaGF0c0FwcDwvc3Ryb25nPjxzcGFuPlJlc3B1ZXN0YSBlbiBtaW51dG9zPC9zcGFuPjxlbT4rNTIgODM0IDEyMyA0NTY3PC9lbT48L2Rpdj4KCQkJCTwvYT4KCQkJCTxhIGhyZWY9Im1haWx0bzpob2xhQG1vbmFsZS5zaG9wIiBjbGFzcz0ibW4tY29udGFjdC1jYXJkIj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWN0LWljb24iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgcng9IjIiLz48cGF0aCBkPSJtMjIgNy0xMCA1TDIgNyIvPjwvc3ZnPjwvZGl2PgoJCQkJCTxkaXY+PHN0cm9uZz5Db3JyZW88L3N0cm9uZz48c3Bhbj5Db25zdWx0YXMgZ2VuZXJhbGVzPC9zcGFuPjxlbT5ob2xhQG1vbmFsZS5zaG9wPC9lbT48L2Rpdj4KCQkJCTwvYT4KCQkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhY3QtY2FyZCI+CgkJCQkJPGRpdiBjbGFzcz0ibW4tY29udGFjdC1pY29uIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48cGF0aCBkPSJNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMCAxIDE4IDB6Ii8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMCIgcj0iMyIvPjwvc3ZnPjwvZGl2PgoJCQkJCTxkaXY+PHN0cm9uZz5Cb3V0aXF1ZTwvc3Ryb25nPjxzcGFuPlNvbG8gY29uIGNpdGEgcHJldmlhPC9zcGFuPjxlbT5DZC4gVmljdG9yaWEsIFRhbWF1bGlwYXM8L2VtPjwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWN0LWNhcmQiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLWNvbnRhY3QtaWNvbiI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiLz48cG9seWxpbmUgcG9pbnRzPSIxMiA2IDEyIDEyIDE2IDE0Ii8+PC9zdmc+PC9kaXY+CgkJCQkJPGRpdj48c3Ryb25nPkhvcmFyaW88L3N0cm9uZz48c3Bhbj5BdGVuY2nDs24gb25saW5lPC9zcGFuPjxlbT5MdW4g4oCTIFPDoWIgwrcgOWFtIGEgOHBtPC9lbT48L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBjbGFzcz0ibW4tY29udGFjdC1zb2NpYWwiPgoJCQkJCTxzcGFuPlPDrWd1ZW5vczwvc3Bhbj4KCQkJCQk8YSBocmVmPSJodHRwczovL2luc3RhZ3JhbS5jb20vbW9uYWxlLnNob3AiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBhcmlhLWxhYmVsPSJJbnN0YWdyYW0iPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSI1Ii8+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNCIvPjxjaXJjbGUgY3g9IjE3LjUiIGN5PSI2LjUiIHI9IjEiIGZpbGw9ImN1cnJlbnRDb2xvciIvPjwvc3ZnPjwvYT4KCQkJCQk8YSBocmVmPSJodHRwczovL2ZhY2Vib29rLmNvbS9tb25hbGUuc2hvcCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIGFyaWEtbGFiZWw9IkZhY2Vib29rIj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNMjIgMTJhMTAgMTAgMCAxIDAtMTEuNiA5Ljl2LTdoLTIuNVYxMmgyLjVWOS44YzAtMi41IDEuNS0zLjggMy43LTMuOCAxLjEgMCAyLjIuMiAyLjIuMnYyLjRoLTEuMmMtMS4yIDAtMS42LjgtMS42IDEuNVYxMmgyLjdsLS40IDIuOWgtMi4zdjdBMTAgMTAgMCAwIDAgMjIgMTIiLz48L3N2Zz48L2E+CgkJCQkJPGEgaHJlZj0iaHR0cHM6Ly90aWt0b2suY29tL0Btb25hbGUuc2hvcCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIGFyaWEtbGFiZWw9IlRpa1RvayI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTE2LjYgNS44MnMuNTEuNSAwIDBBNC4yNyA0LjI3IDAgMCAxIDE1LjU0IDNoLTMuMDl2MTIuNGEyLjU5IDIuNTkgMCAwIDEtMi41OSAyLjVjLTEuNDIgMC0yLjU5LTEuMTYtMi41OS0yLjU4czEuMTctMi41OCAyLjU5LTIuNThjLjI3IDAgLjUzLjA0Ljc3LjExVjkuNzJjLS4yNS0uMDQtLjUxLS4wNi0uNzctLjA2LTMuMTUgMC01LjcxIDIuNTYtNS43MSA1LjcxIDAgMy4xNSAyLjU2IDUuNzEgNS43MSA1LjcxczUuNzEtMi41NiA1LjcxLTUuNzFWOS40YTcuMzEgNy4zMSAwIDAgMCA0LjI3IDEuMzdWNy42OGE0LjI3IDQuMjcgMCAwIDEtMy4yNC0xLjg2eiIvPjwvc3ZnPjwvYT4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCgkJCTwhLS0gRm9ybXVsYXJpbyAtLT4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFjdC1mb3JtLXdyYXAiPgoJCQkJPD9waHAgaWYgKCAkc2VudCApIDogPz4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWN0LXN1Y2Nlc3MiPgoJCQkJCQk8ZGl2IGNsYXNzPSJtbi1jb250YWN0LXN1Y2Nlc3MtaWNvbiI+CgkJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi41Ij48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiIvPjwvc3ZnPgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGgzPsKhR3JhY2lhcyBwb3IgZXNjcmliaXJub3MhPC9oMz4KCQkJCQkJPHA+SGVtb3MgcmVjaWJpZG8gdHUgbWVuc2FqZS4gVGUgY29udGVzdGFyZW1vcyBlbiBtZW5vcyBkZSAyNCBob3Jhcy48L3A+CgkJCQkJCTxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggaG9tZV91cmwoICcvdGllbmRhJyApICk7ID8+IiBjbGFzcz0ibW4tYnRuLXByaW1hcnkiPk1pZW50cmFzIHRhbnRvLCB2ZXIgbGEgdGllbmRhPC9hPgoJCQkJCTwvZGl2PgoJCQkJPD9waHAgZWxzZSA6ID8+CgkJCQk8aDI+RW52w61hbm9zIHVuIG1lbnNhamU8L2gyPgoJCQkJPHAgY2xhc3M9Im1uLWNvbnRhY3QtaW50cm8iPkN1w6ludGFub3MgcXXDqSBuZWNlc2l0YXMgeSB0ZSByZXNwb25kZW1vcyBhIGxhIGJyZXZlZGFkLjwvcD4KCQkJCTxmb3JtIGNsYXNzPSJtbi1jb250YWN0LWZvcm0iIG1ldGhvZD0icG9zdCI+CgkJCQkJPD9waHAgd3Bfbm9uY2VfZmllbGQoICdtb25hbGVfY29udGFjdCcsICdtbl9jb250YWN0X25vbmNlJyApOyA/PgoJCQkJCTxkaXYgY2xhc3M9Im1uLWZvcm0tcm93Ij4KCQkJCQkJPGxhYmVsPgoJCQkJCQkJPHNwYW4+Tm9tYnJlIGNvbXBsZXRvICo8L3NwYW4+CgkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibW5fbmFtZSIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9IlR1IG5vbWJyZSI+CgkJCQkJCTwvbGFiZWw+CgkJCQkJCTxsYWJlbD4KCQkJCQkJCTxzcGFuPkNvcnJlbyBlbGVjdHLDs25pY28gKjwvc3Bhbj4KCQkJCQkJCTxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0ibW5fZW1haWwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPSJ0dWNvcnJlb0BlamVtcGxvLmNvbSI+CgkJCQkJCTwvbGFiZWw+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tZm9ybS1yb3ciPgoJCQkJCQk8bGFiZWw+CgkJCQkJCQk8c3Bhbj5UZWzDqWZvbm88L3NwYW4+CgkJCQkJCQk8aW5wdXQgdHlwZT0idGVsIiBuYW1lPSJtbl9waG9uZSIgcGxhY2Vob2xkZXI9Iis1MiAuLi4iPgoJCQkJCQk8L2xhYmVsPgoJCQkJCQk8bGFiZWw+CgkJCQkJCQk8c3Bhbj5Bc3VudG8gKjwvc3Bhbj4KCQkJCQkJCTxzZWxlY3QgbmFtZT0ibW5fc3ViamVjdCIgcmVxdWlyZWQ+CgkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iIj5FbGlnZSB1biBhc3VudG88L29wdGlvbj4KCQkJCQkJCQk8b3B0aW9uPkR1ZGFzIHNvYnJlIHVuIHByb2R1Y3RvPC9vcHRpb24+CgkJCQkJCQkJPG9wdGlvbj5HdcOtYSBkZSB0YWxsYXM8L29wdGlvbj4KCQkJCQkJCQk8b3B0aW9uPkVudsOtb3MgeSBkZXZvbHVjaW9uZXM8L29wdGlvbj4KCQkJCQkJCQk8b3B0aW9uPkVzdGFkbyBkZSBtaSBwZWRpZG88L29wdGlvbj4KCQkJCQkJCQk8b3B0aW9uPkNvbGFib3JhY2lvbmVzPC9vcHRpb24+CgkJCQkJCQkJPG9wdGlvbj5PdHJvPC9vcHRpb24+CgkJCQkJCQk8L3NlbGVjdD4KCQkJCQkJPC9sYWJlbD4KCQkJCQk8L2Rpdj4KCQkJCQk8bGFiZWwgY2xhc3M9Im1uLWZvcm0tZnVsbCI+CgkJCQkJCTxzcGFuPk1lbnNhamUgKjwvc3Bhbj4KCQkJCQkJPHRleHRhcmVhIG5hbWU9Im1uX21lc3NhZ2UiIHJvd3M9IjUiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPSJDdcOpbnRhbm9zIGVuIHF1w6kgcG9kZW1vcyBheXVkYXJ0ZeKApiI+PC90ZXh0YXJlYT4KCQkJCQk8L2xhYmVsPgoJCQkJCTxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJtbl9jb250YWN0X3N1Ym1pdCIgdmFsdWU9IjEiIGNsYXNzPSJtbi1idG4tcHJpbWFyeSBtbi1mb3JtLXN1Ym1pdCI+CgkJCQkJCUVudmlhciBtZW5zYWplCgkJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNNSAxMmgxNE0xMiA1bDcgNy03IDciLz48L3N2Zz4KCQkJCQk8L2J1dHRvbj4KCQkJCQk8cCBjbGFzcz0ibW4tZm9ybS1sZWdhbCI+QWwgZW52aWFyIGFjZXB0YXMgbnVlc3RyYSA8YSBocmVmPSIvcHJpdmFjeS1wb2xpY3kiPnBvbMOtdGljYSBkZSBwcml2YWNpZGFkPC9hPi48L3A+CgkJCQk8L2Zvcm0+CgkJCQk8P3BocCBlbmRpZjsgPz4KCQkJPC9kaXY+CgkJPC9kaXY+CgoJCTwhLS0gRkFRIC0tPgoJCTxkaXYgY2xhc3M9Im1uLWNvbnRhY3QtZmFxIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9Im1uLXNlY3Rpb24taGVhZGVyIj4KCQkJCQk8ZGl2IGNsYXNzPSJzZWN0aW9uLXRhZyI+UHJlZ3VudGFzIGZyZWN1ZW50ZXM8L2Rpdj4KCQkJCQk8aDI+UXVpesOhIHlhIHRlbmVtb3MgPHNwYW4gY2xhc3M9Im1uLWFjY2VudCI+dHUgcmVzcHVlc3RhPC9zcGFuPjwvaDI+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLWZhcS1saXN0IiBkYXRhLW1uLWZhcT4KCQkJCQk8ZGV0YWlscz48c3VtbWFyeT7Cv0N1w6FudG8gdGFyZGEgbWkgZW52w61vPzxzcGFuIGNsYXNzPSJtbi1mYXEtcGx1cyI+Kzwvc3Bhbj48L3N1bW1hcnk+PHA+RW52aWFtb3MgYSB0b2RvIE3DqXhpY28gZW4gMyBhIDUgZMOtYXMgaMOhYmlsZXMuIEVudsOtbyBncmF0aXMgZW4gcGVkaWRvcyBtYXlvcmVzIGEgJDEsNTAwIE1YTi48L3A+PC9kZXRhaWxzPgoJCQkJCTxkZXRhaWxzPjxzdW1tYXJ5PsK/UXXDqSBwYXNhIHNpIGxhIHRhbGxhIG5vIG1lIHF1ZWRhPzxzcGFuIGNsYXNzPSJtbi1mYXEtcGx1cyI+Kzwvc3Bhbj48L3N1bW1hcnk+PHA+VGllbmVzIDE1IGTDrWFzIHBhcmEgY2FtYmlhciB0dSB0YWxsYSBzaW4gY29zdG8gZXh0cmEsIHNvbG8gY3VicmVzIGVsIGVudsOtbyBkZSByZWdyZXNvLjwvcD48L2RldGFpbHM+CgkJCQkJPGRldGFpbHM+PHN1bW1hcnk+wr9Mb3MgdmVzdGlkb3Mgc29uIHNvbG8gcGFyYSBlbWJhcmF6bz88c3BhbiBjbGFzcz0ibW4tZmFxLXBsdXMiPis8L3NwYW4+PC9zdW1tYXJ5PjxwPk51ZXN0cm9zIGRpc2XDsW9zIHNvbiB2ZXJzw6F0aWxlczogc2UgYWp1c3RhbiBjw7Ntb2RhbWVudGUgZHVyYW50ZSBlbCBlbWJhcmF6byB5IG11Y2hvcyB0YW1iacOpbiBkZXNwdcOpcy48L3A+PC9kZXRhaWxzPgoJCQkJCTxkZXRhaWxzPjxzdW1tYXJ5PsK/UHVlZG8gcGFnYXIgZW4gZWZlY3Rpdm8/PHNwYW4gY2xhc3M9Im1uLWZhcS1wbHVzIj4rPC9zcGFuPjwvc3VtbWFyeT48cD5Tw60uIEFjZXB0YW1vcyB0YXJqZXRhLCB0cmFuc2ZlcmVuY2lhIHkgcGFnbyBlbiBPWFhPIGEgdHJhdsOpcyBkZSBNZXJjYWRvIFBhZ28uPC9wPjwvZGV0YWlscz4KCQkJCQk8ZGV0YWlscz48c3VtbWFyeT7Cv1RpZW5lbiB0aWVuZGEgZsOtc2ljYT88c3BhbiBjbGFzcz0ibW4tZmFxLXBsdXMiPis8L3NwYW4+PC9zdW1tYXJ5PjxwPk51ZXN0cmEgYm91dGlxdWUgZXN0w6EgZW4gQ2QuIFZpY3RvcmlhLCBUYW1hdWxpcGFzLiBTb2xvIGF0ZW5kZW1vcyBjb24gY2l0YSBwcmV2aWEgcG9yIFdoYXRzQXBwLjwvcD48L2RldGFpbHM+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+Cgk8L3NlY3Rpb24+Cgk8P3BocAoJcmV0dXJuIG1vbmFsZV9jbGVhbiggb2JfZ2V0X2NsZWFuKCkgKTsKfQphZGRfc2hvcnRjb2RlKCAnbW9uYWxlX2NvbnRhY3RvJywgJ21vbmFsZV9jb250YWN0b19yZW5kZXInICk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTaG9ydGNvZGUgQUNDT1VOVCDigJQgW21vbmFsZV9hY2NvdW50XQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfYWNjb3VudF9yZW5kZXIoICRhdHRzID0gW10gKSB7CgkkbG9nZ2VkID0gaXNfdXNlcl9sb2dnZWRfaW4oKTsKCW9iX3N0YXJ0KCk7ID8+Cgk8c2VjdGlvbiBjbGFzcz0ibW4tYWNjb3VudCI+CgkJPGRpdiBjbGFzcz0ibW4tYWNjb3VudC1oZXJvIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj5UdSBlc3BhY2lvIE1vbmFsw6k8L2Rpdj4KCQkJCTxoMT48P3BocCBlY2hvICRsb2dnZWQgPyAnTWkgPHNwYW4gY2xhc3M9Im1uLWFjY2VudCI+Y3VlbnRhPC9zcGFuPicgOiAnQmllbnZlbmlkYSBhIDxzcGFuIGNsYXNzPSJtbi1hY2NlbnQiPk1vbmFsw6k8L3NwYW4+JzsgPz48L2gxPgoJCQkJPHA+PD9waHAgZWNobyAkbG9nZ2VkID8gJ0dlc3Rpb25hIHR1cyBwZWRpZG9zLCBkaXJlY2Npb25lcyB5IHByZWZlcmVuY2lhcy4nIDogJ0FjY2VkZSBhIHR1IGN1ZW50YSBvIGNyZWEgdW5hIG51ZXZhIHBhcmEgY29tcHJhciBtw6FzIHLDoXBpZG8uJzsgPz48L3A+CgkJCTwvZGl2PgoJCTwvZGl2PgoKCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIgbW4tYWNjb3VudC1ib2R5Ij4KCQkJPD9waHAgaWYgKCAhICRsb2dnZWQgKSA6ID8+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hdXRoLWdyaWQiPgoJCQkJCTxkaXYgY2xhc3M9Im1uLWF1dGgtY2FyZCBtbi1hdXRoLWxvZ2luIj4KCQkJCQkJPGRpdiBjbGFzcz0ibW4tYXV0aC1pY29uIj4KCQkJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiPjxwYXRoIGQ9Ik0yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyIi8+PGNpcmNsZSBjeD0iMTIiIGN5PSI3IiByPSI0Ii8+PC9zdmc+CgkJCQkJCTwvZGl2PgoJCQkJCQk8aDI+WWEgdGVuZ28gY3VlbnRhPC9oMj4KCQkJCQkJPHA+QWNjZWRlIHBhcmEgdmVyIHR1cyBwZWRpZG9zIHkgY29udGludWFyIGRvbmRlIGxvIGRlamFzdGUuPC9wPgoJCQkJCQk8Zm9ybSBjbGFzcz0id29vY29tbWVyY2UtZm9ybSB3b29jb21tZXJjZS1mb3JtLWxvZ2luIGxvZ2luIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD9waHAgZWNobyBlc2NfdXJsKCB3Y19nZXRfcGFnZV9wZXJtYWxpbmsoICdteWFjY291bnQnICkgKTsgPz4iPgoJCQkJCQkJPD9waHAgZG9fYWN0aW9uKCAnd29vY29tbWVyY2VfbG9naW5fZm9ybV9zdGFydCcgKTsgPz4KCQkJCQkJCTxwIGNsYXNzPSJmb3JtLXJvdyBmb3JtLXJvdy13aWRlIj4KCQkJCQkJCQk8bGFiZWwgZm9yPSJ1c2VybmFtZSI+Q29ycmVvIGVsZWN0csOzbmljbyBvIHVzdWFyaW8gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPjwvbGFiZWw+CgkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBpZD0idXNlcm5hbWUiIGF1dG9jb21wbGV0ZT0idXNlcm5hbWUiIHJlcXVpcmVkPgoJCQkJCQkJPC9wPgoJCQkJCQkJPHAgY2xhc3M9ImZvcm0tcm93IGZvcm0tcm93LXdpZGUiPgoJCQkJCQkJCTxsYWJlbCBmb3I9InBhc3N3b3JkIj5Db250cmFzZcOxYSA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+PC9sYWJlbD4KCQkJCQkJCQk8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBpZD0icGFzc3dvcmQiIGF1dG9jb21wbGV0ZT0iY3VycmVudC1wYXNzd29yZCIgcmVxdWlyZWQ+CgkJCQkJCQk8L3A+CgkJCQkJCQk8P3BocCBkb19hY3Rpb24oICd3b29jb21tZXJjZV9sb2dpbl9mb3JtJyApOyA/PgoJCQkJCQkJPHAgY2xhc3M9ImZvcm0tcm93IG1uLWF1dGgtcm93LWFjdGlvbnMiPgoJCQkJCQkJCTxsYWJlbCBjbGFzcz0ibW4tcmVtZW1iZXIiPgoJCQkJCQkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlbWVtYmVybWUiIHZhbHVlPSJmb3JldmVyIj4gPHNwYW4+UmVjdcOpcmRhbWU8L3NwYW4+CgkJCQkJCQkJPC9sYWJlbD4KCQkJCQkJCQk8YSBjbGFzcz0ibW4tYXV0aC1mb3Jnb3QiIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggd3BfbG9zdHBhc3N3b3JkX3VybCgpICk7ID8+Ij7Cv09sdmlkYXN0ZSB0dSBjb250cmFzZcOxYT88L2E+CgkJCQkJCQk8L3A+CgkJCQkJCQk8cCBjbGFzcz0iZm9ybS1yb3ciPgoJCQkJCQkJCTw/cGhwIHdwX25vbmNlX2ZpZWxkKCAnd29vY29tbWVyY2UtbG9naW4nLCAnd29vY29tbWVyY2UtbG9naW4tbm9uY2UnICk7ID8+CgkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJ3b29jb21tZXJjZS1idXR0b24gYnV0dG9uIG1uLWJ0bi1wcmltYXJ5IHdvb2NvbW1lcmNlLWZvcm0tbG9naW5fX3N1Ym1pdCIgbmFtZT0ibG9naW4iIHZhbHVlPSI8P3BocCBlc2NfYXR0cl9lKCAnSW5pY2lhciBzZXNpw7NuJywgJ3dvb2NvbW1lcmNlJyApOyA/PiI+SW5pY2lhciBzZXNpw7NuPC9idXR0b24+CgkJCQkJCQk8L3A+CgkJCQkJCQk8P3BocCBkb19hY3Rpb24oICd3b29jb21tZXJjZV9sb2dpbl9mb3JtX2VuZCcgKTsgPz4KCQkJCQkJPC9mb3JtPgoJCQkJCTwvZGl2PgoKCQkJCQk8ZGl2IGNsYXNzPSJtbi1hdXRoLWNhcmQgbW4tYXV0aC1yZWdpc3RlciI+CgkJCQkJCTxkaXYgY2xhc3M9Im1uLWF1dGgtaWNvbiI+CgkJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ij48cGF0aCBkPSJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MiIvPjxjaXJjbGUgY3g9IjguNSIgY3k9IjciIHI9IjQiLz48bGluZSB4MT0iMjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSIxNCIvPjxsaW5lIHgxPSIyMyIgeTE9IjExIiB4Mj0iMTciIHkyPSIxMSIvPjwvc3ZnPgoJCQkJCQk8L2Rpdj4KCQkJCQkJPGgyPkNyZWFyIGN1ZW50YSBudWV2YTwvaDI+CgkJCQkJCTxwPsOabmV0ZSBlbiAzMCBzZWd1bmRvcyB5IGRpc2ZydXRhIGRlIGVudsOtb3MgcsOhcGlkb3MsIGhpc3RvcmlhbCB5IGZhdm9yaXRvcyBzaW5jcm9uaXphZG9zLjwvcD4KCQkJCQkJPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0id29vY29tbWVyY2UtZm9ybSB3b29jb21tZXJjZS1mb3JtLXJlZ2lzdGVyIHJlZ2lzdGVyIj4KCQkJCQkJCTw/cGhwIGRvX2FjdGlvbiggJ3dvb2NvbW1lcmNlX3JlZ2lzdGVyX2Zvcm1fc3RhcnQnICk7ID8+CgkJCQkJCQk8cCBjbGFzcz0iZm9ybS1yb3cgZm9ybS1yb3ctd2lkZSI+CgkJCQkJCQkJPGxhYmVsPk5vbWJyZSA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+PC9sYWJlbD4KCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmlsbGluZ19maXJzdF9uYW1lIiByZXF1aXJlZD4KCQkJCQkJCTwvcD4KCQkJCQkJCTxwIGNsYXNzPSJmb3JtLXJvdyBmb3JtLXJvdy13aWRlIj4KCQkJCQkJCQk8bGFiZWw+Q29ycmVvIGVsZWN0csOzbmljbyA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+PC9sYWJlbD4KCQkJCQkJCQk8aW5wdXQgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiByZXF1aXJlZCBhdXRvY29tcGxldGU9ImVtYWlsIj4KCQkJCQkJCTwvcD4KCQkJCQkJCTxwIGNsYXNzPSJmb3JtLXJvdyBmb3JtLXJvdy13aWRlIj4KCQkJCQkJCQk8bGFiZWw+Q29udHJhc2XDsWEgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPjwvbGFiZWw+CgkJCQkJCQkJPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcmVxdWlyZWQgYXV0b2NvbXBsZXRlPSJuZXctcGFzc3dvcmQiPgoJCQkJCQkJPC9wPgoJCQkJCQkJPD9waHAgZG9fYWN0aW9uKCAnd29vY29tbWVyY2VfcmVnaXN0ZXJfZm9ybScgKTsgPz4KCQkJCQkJCTxwIGNsYXNzPSJ3b29jb21tZXJjZS1mb3JtLXJvdyBmb3JtLXJvdyI+CgkJCQkJCQkJPD9waHAgd3Bfbm9uY2VfZmllbGQoICd3b29jb21tZXJjZS1yZWdpc3RlcicsICd3b29jb21tZXJjZS1yZWdpc3Rlci1ub25jZScgKTsgPz4KCQkJCQkJCQk8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9Indvb2NvbW1lcmNlLUJ1dHRvbiBidXR0b24gbW4tYnRuLXByaW1hcnkiIG5hbWU9InJlZ2lzdGVyIiB2YWx1ZT0iUmVnaXN0ZXIiPkNyZWFyIG1pIGN1ZW50YTwvYnV0dG9uPgoJCQkJCQkJPC9wPgoJCQkJCQkJPHAgY2xhc3M9Im1uLWF1dGgtbGVnYWwiPkFsIGNyZWFyIHR1IGN1ZW50YSBhY2VwdGFzIG51ZXN0cmEgPGEgaHJlZj0iL3ByaXZhY3ktcG9saWN5Ij5wb2zDrXRpY2EgZGUgcHJpdmFjaWRhZDwvYT4uPC9wPgoJCQkJCQkJPD9waHAgZG9fYWN0aW9uKCAnd29vY29tbWVyY2VfcmVnaXN0ZXJfZm9ybV9lbmQnICk7ID8+CgkJCQkJCTwvZm9ybT4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoKCQkJCTwhLS0gQmVuZWZpdHMgc3RyaXAgLS0+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hdXRoLWJlbmVmaXRzIj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1hdXRoLWJlbmVmaXQiPgoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48cmVjdCB4PSIxIiB5PSIzIiB3aWR0aD0iMTUiIGhlaWdodD0iMTMiLz48cG9seWdvbiBwb2ludHM9IjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4Ii8+PGNpcmNsZSBjeD0iNS41IiBjeT0iMTguNSIgcj0iMi41Ii8+PGNpcmNsZSBjeD0iMTguNSIgY3k9IjE4LjUiIHI9IjIuNSIvPjwvc3ZnPgoJCQkJCQk8ZGl2PjxzdHJvbmc+Q2hlY2tvdXQgcsOhcGlkbzwvc3Ryb25nPjxzcGFuPkNvbXByYSBlbiAxIGNsaWNrPC9zcGFuPjwvZGl2PgoJCQkJCTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9Im1uLWF1dGgtYmVuZWZpdCI+CgkJCQkJCTxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxwYXRoIGQ9Ik0yMC44NCA0LjYxYTUuNSA1LjUgMCAwIDAtNy43OCAwTDEyIDUuNjdsLTEuMDYtMS4wNmE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwxLjA2IDEuMDZMMTIgMjEuMjN6Ii8+PC9zdmc+CgkJCQkJCTxkaXY+PHN0cm9uZz5GYXZvcml0b3M8L3N0cm9uZz48c3Bhbj5TaW5jcm9uaXphZG9zIGVuIGxhIG51YmU8L3NwYW4+PC9kaXY+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibW4tYXV0aC1iZW5lZml0Ij4KCQkJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCI+PHBhdGggZD0iTTMgM2gxOHYxOEgzeiIvPjxwYXRoIGQ9Ik0zIDloMTgiLz48cGF0aCBkPSJNOSAyMVY5Ii8+PC9zdmc+CgkJCQkJCTxkaXY+PHN0cm9uZz5IaXN0b3JpYWw8L3N0cm9uZz48c3Bhbj5Ub2RvcyB0dXMgcGVkaWRvczwvc3Bhbj48L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJtbi1hdXRoLWJlbmVmaXQiPgoJCQkJCQk8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik04IDEybDMgMyA1LTYiLz48L3N2Zz4KCQkJCQkJPGRpdj48c3Ryb25nPlByb21vcyBWSVA8L3N0cm9uZz48c3Bhbj5PZmVydGFzIGV4Y2x1c2l2YXM8L3NwYW4+PC9kaXY+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkJPD9waHAgZWxzZSA6ID8+CgkJCQk8ZGl2IGNsYXNzPSJtbi1hY2NvdW50LWxvZ2dlZCI+CgkJCQkJPD9waHAgZWNobyBkb19zaG9ydGNvZGUoICdbd29vY29tbWVyY2VfbXlfYWNjb3VudF0nICk7ID8+CgkJCQk8L2Rpdj4KCQkJPD9waHAgZW5kaWY7ID8+CgkJPC9kaXY+Cgk8L3NlY3Rpb24+Cgk8P3BocAoJcmV0dXJuIG1vbmFsZV9jbGVhbiggb2JfZ2V0X2NsZWFuKCkgKTsKfQphZGRfc2hvcnRjb2RlKCAnbW9uYWxlX2FjY291bnQnLCAnbW9uYWxlX2FjY291bnRfcmVuZGVyJyApOwoKLyoqCiAqIFRyYWR1Y2Npw7NuIGRlIHN0cmluZ3MgZGUgV29vQ29tbWVyY2UgYSBlc3Bhw7FvbCAocGFyYSBzaXRpb3MgZW4gU3R1ZGlvIGRvbmRlIG5vIHNlCiAqIHB1ZWRlbiBkZXNjYXJnYXIgbG9zIC5tbykuIEN1YnJlIGNhcnQsIGNoZWNrb3V0LCBteSBhY2NvdW50IHkgdmFyaW9zIGNvbXVuZXMuCiAqLwphZGRfZmlsdGVyKCAnZ2V0dGV4dCcsICdtb25hbGVfdHJhbnNsYXRlX3djJywgMjAsIDMgKTsKYWRkX2ZpbHRlciggJ2dldHRleHRfd2l0aF9jb250ZXh0JywgJ21vbmFsZV90cmFuc2xhdGVfd2NfY3R4JywgMjAsIDQgKTsKCmZ1bmN0aW9uIG1vbmFsZV90cmFuc2xhdGVfd2MoICR0cmFuc2xhdGVkLCAkb3JpZ2luYWwsICRkb21haW4gKSB7CglpZiAoICRkb21haW4gIT09ICd3b29jb21tZXJjZScgJiYgJGRvbWFpbiAhPT0gJ2RlZmF1bHQnICkgeyByZXR1cm4gJHRyYW5zbGF0ZWQ7IH0KCSRtYXAgPSBtb25hbGVfd2NfdHJhbnNsYXRpb25zKCk7CglyZXR1cm4gJG1hcFsgJG9yaWdpbmFsIF0gPz8gJHRyYW5zbGF0ZWQ7Cn0KZnVuY3Rpb24gbW9uYWxlX3RyYW5zbGF0ZV93Y19jdHgoICR0cmFuc2xhdGVkLCAkb3JpZ2luYWwsICRjb250ZXh0LCAkZG9tYWluICkgewoJaWYgKCAkZG9tYWluICE9PSAnd29vY29tbWVyY2UnICYmICRkb21haW4gIT09ICdkZWZhdWx0JyApIHsgcmV0dXJuICR0cmFuc2xhdGVkOyB9CgkkbWFwID0gbW9uYWxlX3djX3RyYW5zbGF0aW9ucygpOwoJcmV0dXJuICRtYXBbICRvcmlnaW5hbCBdID8/ICR0cmFuc2xhdGVkOwp9CgpmdW5jdGlvbiBtb25hbGVfd2NfdHJhbnNsYXRpb25zKCkgewoJc3RhdGljICRtID0gbnVsbDsKCWlmICggJG0gIT09IG51bGwgKSB7IHJldHVybiAkbTsgfQoJJG0gPSBbCgkJLy8gQ2FydAoJCSdQcm9kdWN0JyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnUHJvZHVjdG8nLAoJCSdQcmljZScgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnUHJlY2lvJywKCQknUXVhbnRpdHknICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NhbnRpZGFkJywKCQknU3VidG90YWwnICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1N1YnRvdGFsJywKCQknVG90YWwnICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1RvdGFsJywKCQknQ291cG9uOicgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0N1cMOzbjonLAoJCSdDb3Vwb24gY29kZScgICAgICAgICAgICAgICAgICAgICA9PiAnQ8OzZGlnbyBkZSBjdXDDs24nLAoJCSdBcHBseSBjb3Vwb24nICAgICAgICAgICAgICAgICAgICA9PiAnQXBsaWNhciBjdXDDs24nLAoJCSdSZW1vdmUgdGhpcyBpdGVtJyAgICAgICAgICAgICAgICA9PiAnUXVpdGFyIGVzdGUgcHJvZHVjdG8nLAoJCSdVcGRhdGUgY2FydCcgICAgICAgICAgICAgICAgICAgICA9PiAnQWN0dWFsaXphciBjYXJyaXRvJywKCQknQ2FydCB0b3RhbHMnICAgICAgICAgICAgICAgICAgICAgPT4gJ1RvdGFsZXMgZGVsIGNhcnJpdG8nLAoJCSdDYXJ0IFN1YnRvdGFsJyAgICAgICAgICAgICAgICAgICA9PiAnU3VidG90YWwgZGVsIGNhcnJpdG8nLAoJCSdQcm9jZWVkIHRvIGNoZWNrb3V0JyAgICAgICAgICAgICA9PiAnRmluYWxpemFyIGNvbXByYScsCgkJJ1lvdXIgY2FydCBpcyBjdXJyZW50bHkgZW1wdHkuJyAgID0+ICdUdSBjYXJyaXRvIGVzdMOhIHZhY8Otby4nLAoJCSdZb3VyIGNhcnQgaXMgY3VycmVudGx5IGVtcHR5JyAgICA9PiAnVHUgY2Fycml0byBlc3TDoSB2YWPDrW8nLAoJCSdSZXR1cm4gdG8gc2hvcCcgICAgICAgICAgICAgICAgICA9PiAnVm9sdmVyIGEgbGEgdGllbmRhJywKCQknQnJvd3NlIHByb2R1Y3RzJyAgICAgICAgICAgICAgICAgPT4gJ0V4cGxvcmFyIHByb2R1Y3RvcycsCgkJJ1NoaXBwaW5nJyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdFbnbDrW8nLAoJCSdDYWxjdWxhdGUgc2hpcHBpbmcnICAgICAgICAgICAgICA9PiAnQ2FsY3VsYXIgZW52w61vJywKCQknU2hpcHBpbmcgY29zdHMgd2lsbCBiZSBjYWxjdWxhdGVkIG9uY2UgeW91IGhhdmUgcHJvdmlkZWQgeW91ciBhZGRyZXNzLicgPT4gJ0xvcyBjb3N0b3MgZGUgZW52w61vIHNlIGNhbGN1bGFyw6FuIHVuYSB2ZXogcXVlIGluZ3Jlc2VzIHR1IGRpcmVjY2nDs24uJywKCQknRW50ZXIgYSBkaWZmZXJlbnQgYWRkcmVzcycgICAgICAgPT4gJ0luZ3Jlc2FyIG90cmEgZGlyZWNjacOzbicsCgkJJ0VudGVyIHlvdXIgYWRkcmVzcyB0byB2aWV3IHNoaXBwaW5nIG9wdGlvbnMuJyA9PiAnSW5ncmVzYSB0dSBkaXJlY2Npw7NuIHBhcmEgdmVyIGxhcyBvcGNpb25lcyBkZSBlbnbDrW8uJywKCQknTm8gc2hpcHBpbmcgb3B0aW9ucyB3ZXJlIGZvdW5kLicgPT4gJ05vIHNlIGVuY29udHJhcm9uIG9wY2lvbmVzIGRlIGVudsOtby4nLAoJCSdGcmVlIHNoaXBwaW5nJyAgICAgICAgICAgICAgICAgICA9PiAnRW52w61vIGdyYXRpcycsCgkJJ0ZyZWUnICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdHcmF0aXMnLAoJCSdGbGF0IHJhdGUnICAgICAgICAgICAgICAgICAgICAgICA9PiAnVGFyaWZhIHBsYW5hJywKCQknTG9jYWwgcGlja3VwJyAgICAgICAgICAgICAgICAgICAgPT4gJ1JlY29nZXIgZW4gdGllbmRhJywKCQknU2hpcHBpbmcgdG8gJXMuJyAgICAgICAgICAgICAgICAgPT4gJ0VudmlhciBhICVzLicsCgoJCS8vIENoZWNrb3V0CgkJJ0NoZWNrb3V0JyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdGaW5hbGl6YXIgY29tcHJhJywKCQknQmlsbGluZyBkZXRhaWxzJyAgICAgICAgICAgICAgICAgPT4gJ0RhdG9zIGRlIGZhY3R1cmFjacOzbicsCgkJJ0JpbGxpbmcgJmFtcDsgU2hpcHBpbmcnICAgICAgICAgID0+ICdGYWN0dXJhY2nDs24geSBlbnbDrW8nLAoJCSdTaGlwcGluZyBkZXRhaWxzJyAgICAgICAgICAgICAgICA9PiAnRGF0b3MgZGUgZW52w61vJywKCQknU2hpcCB0byBhIGRpZmZlcmVudCBhZGRyZXNzPycgICAgPT4gJ8K/RW52aWFyIGEgb3RyYSBkaXJlY2Npw7NuPycsCgkJJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nICAgICAgICAgID0+ICdJbmZvcm1hY2nDs24gYWRpY2lvbmFsJywKCQknT3JkZXIgbm90ZXMnICAgICAgICAgICAgICAgICAgICAgPT4gJ05vdGFzIGRlbCBwZWRpZG8nLAoJCSdPcmRlciBub3RlcyAob3B0aW9uYWwpJyAgICAgICAgICA9PiAnTm90YXMgZGVsIHBlZGlkbyAob3BjaW9uYWwpJywKCQknTm90ZXMgYWJvdXQgeW91ciBvcmRlciwgZS5nLiBzcGVjaWFsIG5vdGVzIGZvciBkZWxpdmVyeS4nID0+ICdOb3RhcyBzb2JyZSB0dSBwZWRpZG8sIHBvciBlamVtcGxvIGluc3RydWNjaW9uZXMgcGFyYSBsYSBlbnRyZWdhLicsCgkJJ1lvdXIgb3JkZXInICAgICAgICAgICAgICAgICAgICAgID0+ICdUdSBwZWRpZG8nLAoJCSdPcmRlciBudW1iZXI6JyAgICAgICAgICAgICAgICAgICA9PiAnTsO6bWVybyBkZSBwZWRpZG86JywKCQknRGF0ZTonICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0ZlY2hhOicsCgkJJ0VtYWlsOicgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdDb3JyZW86JywKCQknUGxhY2Ugb3JkZXInICAgICAgICAgICAgICAgICAgICAgPT4gJ1JlYWxpemFyIHBlZGlkbycsCgkJJ1BheSBmb3Igb3JkZXInICAgICAgICAgICAgICAgICAgID0+ICdQYWdhciBlbCBwZWRpZG8nLAoJCSdUaGFuayB5b3UuIFlvdXIgb3JkZXIgaGFzIGJlZW4gcmVjZWl2ZWQuJyA9PiAnR3JhY2lhcy4gVHUgcGVkaWRvIGhhIHNpZG8gcmVjaWJpZG8uJywKCQknT3JkZXIgZGV0YWlscycgICAgICAgICAgICAgICAgICAgPT4gJ0RldGFsbGVzIGRlbCBwZWRpZG8nLAoJCSdIYXZlIGEgY291cG9uPycgICAgICAgICAgICAgICAgICA9PiAnwr9UaWVuZXMgdW4gY3Vww7NuPycsCgkJJ0NsaWNrIGhlcmUgdG8gZW50ZXIgeW91ciBjb2RlJyAgID0+ICdIYXogY2xpY2sgYXF1w60gcGFyYSBpbmdyZXNhciB0dSBjw7NkaWdvJywKCQknUmV0dXJuaW5nIGN1c3RvbWVyPycgICAgICAgICAgICAgPT4gJ8K/WWEgZXJlcyBjbGllbnRhPycsCgkJJ0NsaWNrIGhlcmUgdG8gbG9naW4nICAgICAgICAgICAgID0+ICdIYXogY2xpY2sgYXF1w60gcGFyYSBpbmljaWFyIHNlc2nDs24nLAoJCSdJZiB5b3UgaGF2ZSBzaG9wcGVkIHdpdGggdXMgYmVmb3JlLCBwbGVhc2UgZW50ZXIgeW91ciBkZXRhaWxzIGJlbG93LiBJZiB5b3UgYXJlIGEgbmV3IGN1c3RvbWVyLCBwbGVhc2UgcHJvY2VlZCB0byB0aGUgQmlsbGluZyBzZWN0aW9uLicgPT4KCQkJJ1NpIHlhIGhhcyBjb21wcmFkbyBjb24gbm9zb3Ryb3MsIGluZ3Jlc2EgdHVzIGRhdG9zIGFiYWpvLiBTaSBlcmVzIG51ZXZhLCBjb250aW7DumEgY29uIGxhIGZhY3R1cmFjacOzbi4nLAoJCSdDcmVhdGUgYW4gYWNjb3VudD8nICAgICAgICAgICAgICA9PiAnwr9DcmVhciB1bmEgY3VlbnRhPycsCgkJJ0NyZWF0ZSBhY2NvdW50IHBhc3N3b3JkJyAgICAgICAgID0+ICdDb250cmFzZcOxYSBwYXJhIHR1IGN1ZW50YScsCgoJCS8vIEZvcm0gZmllbGRzCgkJJ0ZpcnN0IG5hbWUnICAgICAgICAgICAgICAgICAgICAgID0+ICdOb21icmUnLAoJCSdMYXN0IG5hbWUnICAgICAgICAgICAgICAgICAgICAgICA9PiAnQXBlbGxpZG9zJywKCQknRnVsbCBuYW1lJyAgICAgICAgICAgICAgICAgICAgICAgPT4gJ05vbWJyZSBjb21wbGV0bycsCgkJJ0NvbXBhbnkgbmFtZScgICAgICAgICAgICAgICAgICAgID0+ICdFbXByZXNhJywKCQknQ29tcGFueSBuYW1lIChvcHRpb25hbCknICAgICAgICAgPT4gJ0VtcHJlc2EgKG9wY2lvbmFsKScsCgkJJ0NvdW50cnkgLyBSZWdpb24nICAgICAgICAgICAgICAgID0+ICdQYcOtcyAvIFJlZ2nDs24nLAoJCSdDb3VudHJ5JyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnUGHDrXMnLAoJCSdTdHJlZXQgYWRkcmVzcycgICAgICAgICAgICAgICAgICA9PiAnQ2FsbGUgeSBuw7ptZXJvJywKCQknVG93biAvIENpdHknICAgICAgICAgICAgICAgICAgICAgPT4gJ0NpdWRhZCcsCgkJJ1N0YXRlIC8gQ291bnR5JyAgICAgICAgICAgICAgICAgID0+ICdFc3RhZG8nLAoJCSdTdGF0ZScgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnRXN0YWRvJywKCQknUG9zdGNvZGUgLyBaSVAnICAgICAgICAgICAgICAgICAgPT4gJ0PDs2RpZ28gcG9zdGFsJywKCQknUG9zdGNvZGUnICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0PDs2RpZ28gcG9zdGFsJywKCQknUGhvbmUnICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1RlbMOpZm9ubycsCgkJJ0VtYWlsIGFkZHJlc3MnICAgICAgICAgICAgICAgICAgID0+ICdDb3JyZW8gZWxlY3Ryw7NuaWNvJywKCQknRW1haWwnICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NvcnJlbycsCgkJJ1Bhc3N3b3JkJyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdDb250cmFzZcOxYScsCgkJJyhvcHRpb25hbCknICAgICAgICAgICAgICAgICAgICAgID0+ICcob3BjaW9uYWwpJywKCQkncmVxdWlyZWQnICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ29ibGlnYXRvcmlvJywKCgkJLy8gTXkgQWNjb3VudAoJCSdMb2dpbicgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnSW5pY2lhciBzZXNpw7NuJywKCQknTG9nIGluJyAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0luaWNpYXIgc2VzacOzbicsCgkJJ0xvZyBvdXQnICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdDZXJyYXIgc2VzacOzbicsCgkJJ0xvZ291dCcgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdDZXJyYXIgc2VzacOzbicsCgkJJ1JlZ2lzdGVyJyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdSZWdpc3RyYXJtZScsCgkJJ1VzZXJuYW1lIG9yIGVtYWlsIGFkZHJlc3MnICAgICAgID0+ICdVc3VhcmlvIG8gY29ycmVvIGVsZWN0csOzbmljbycsCgkJJ1VzZXJuYW1lIG9yIGVtYWlsJyAgICAgICAgICAgICAgID0+ICdVc3VhcmlvIG8gY29ycmVvJywKCQknUmVtZW1iZXIgbWUnICAgICAgICAgICAgICAgICAgICAgPT4gJ1JlY3XDqXJkYW1lJywKCQknTG9zdCB5b3VyIHBhc3N3b3JkPycgICAgICAgICAgICAgPT4gJ8K/T2x2aWRhc3RlIHR1IGNvbnRyYXNlw7FhPycsCgkJJ1Jlc2V0IHBhc3N3b3JkJyAgICAgICAgICAgICAgICAgID0+ICdSZXN0YWJsZWNlciBjb250cmFzZcOxYScsCgkJJ0EgcGFzc3dvcmQgd2lsbCBiZSBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4nID0+ICdUZSBlbnZpYXJlbW9zIGxhIGNvbnRyYXNlw7FhIHBvciBjb3JyZW8uJywKCQknRGFzaGJvYXJkJyAgICAgICAgICAgICAgICAgICAgICAgPT4gJ01pIHBhbmVsJywKCQknT3JkZXJzJyAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1BlZGlkb3MnLAoJCSdEb3dubG9hZHMnICAgICAgICAgICAgICAgICAgICAgICA9PiAnRGVzY2FyZ2FzJywKCQknQWRkcmVzc2VzJyAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0RpcmVjY2lvbmVzJywKCQknUGF5bWVudCBtZXRob2RzJyAgICAgICAgICAgICAgICAgPT4gJ03DqXRvZG9zIGRlIHBhZ28nLAoJCSdBY2NvdW50IGRldGFpbHMnICAgICAgICAgICAgICAgICA9PiAnRGV0YWxsZXMgZGUgbGEgY3VlbnRhJywKCQknRWRpdCBhY2NvdW50JyAgICAgICAgICAgICAgICAgICAgPT4gJ0VkaXRhciBjdWVudGEnLAoJCSdCaWxsaW5nIGFkZHJlc3MnICAgICAgICAgICAgICAgICA9PiAnRGlyZWNjacOzbiBkZSBmYWN0dXJhY2nDs24nLAoJCSdTaGlwcGluZyBhZGRyZXNzJyAgICAgICAgICAgICAgICA9PiAnRGlyZWNjacOzbiBkZSBlbnbDrW8nLAoJCSdFZGl0JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnRWRpdGFyJywKCQknSGVsbG8gJTEkcyAobm90ICUxJHM/ICUyJHMpJyAgICAgPT4gJ0hvbGEgJTEkcyAowr9ubyBlcmVzICUxJHM/ICUyJHMpJywKCQknRnJvbSB5b3VyIGFjY291bnQgZGFzaGJvYXJkIHlvdSBjYW4gdmlldyB5b3VyIDxhIGhyZWY9IiUxJHMiPnJlY2VudCBvcmRlcnM8L2E+LCBtYW5hZ2UgeW91ciA8YSBocmVmPSIlMiRzIj5zaGlwcGluZyBhbmQgYmlsbGluZyBhZGRyZXNzZXM8L2E+LCBhbmQgPGEgaHJlZj0iJTMkcyI+ZWRpdCB5b3VyIHBhc3N3b3JkIGFuZCBhY2NvdW50IGRldGFpbHM8L2E+LicgPT4KCQkJJ0Rlc2RlIHR1IHBhbmVsIHB1ZWRlcyB2ZXIgdHVzIDxhIGhyZWY9IiUxJHMiPnBlZGlkb3MgcmVjaWVudGVzPC9hPiwgZ2VzdGlvbmFyIHR1cyA8YSBocmVmPSIlMiRzIj5kaXJlY2Npb25lczwvYT4geSA8YSBocmVmPSIlMyRzIj5lZGl0YXIgdHUgY29udHJhc2XDsWEgeSBkYXRvczwvYT4uJywKCQknTm8gb3JkZXIgaGFzIGJlZW4gbWFkZSB5ZXQuJyAgICAgPT4gJ0HDum4gbm8gaGFzIHJlYWxpemFkbyBuaW5nw7puIHBlZGlkby4nLAoJCSdWaWV3JyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnVmVyJywKCQknT3JkZXInICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1BlZGlkbycsCgkJJ0RhdGUnICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdGZWNoYScsCgkJJ1N0YXR1cycgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdFc3RhZG8nLAoJCSdBY3Rpb25zJyAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQWNjaW9uZXMnLAoJCSdQYXknICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnUGFnYXInLAoJCSdDYW5jZWwnICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQ2FuY2VsYXInLAoKCQkvLyBBw7FhZGlyIGFsIGNhcnJpdG8geSBub3RpY2VzCgkJJ0FkZCB0byBjYXJ0JyAgICAgICAgICAgICAgICAgICAgID0+ICdBZ3JlZ2FyIGFsIGNhcnJpdG8nLAoJCSdBZGRlZCB0byBjYXJ0JyAgICAgICAgICAgICAgICAgICA9PiAnQWdyZWdhZG8gYWwgY2Fycml0bycsCgkJJ1ZpZXcgY2FydCcgICAgICAgICAgICAgICAgICAgICAgID0+ICdWZXIgY2Fycml0bycsCgkJJyIlcyIgaGFzIGJlZW4gYWRkZWQgdG8geW91ciBjYXJ0LicgPT4gJyIlcyIgaGEgc2lkbyBhZ3JlZ2FkbyBhIHR1IGNhcnJpdG8uJywKCQknJXMgaGFzIGJlZW4gYWRkZWQgdG8geW91ciBjYXJ0LicgPT4gJyVzIGhhIHNpZG8gYWdyZWdhZG8gYSB0dSBjYXJyaXRvLicsCgkJJ1NlbGVjdCBvcHRpb25zJyAgICAgICAgICAgICAgICAgID0+ICdFbGVnaXIgb3BjaW9uZXMnLAoJCSdSZWFkIG1vcmUnICAgICAgICAgICAgICAgICAgICAgICA9PiAnTcOhcyBpbmZvcm1hY2nDs24nLAoJCSdPdXQgb2Ygc3RvY2snICAgICAgICAgICAgICAgICAgICA9PiAnQWdvdGFkbycsCgkJJ0luIHN0b2NrJyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdFbiBleGlzdGVuY2lhJywKCQknJXMgaW4gc3RvY2snICAgICAgICAgICAgICAgICAgICAgPT4gJyVzIGVuIGV4aXN0ZW5jaWEnLAoJCSdTYWxlIScgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnwqFPZmVydGEhJywKCQknUmVsYXRlZCBwcm9kdWN0cycgICAgICAgICAgICAgICAgPT4gJ1Byb2R1Y3RvcyByZWxhY2lvbmFkb3MnLAoJCSdZb3UgbWF5IGFsc28gbGlrZSZoZWxsaXA7JyAgICAgICA9PiAnVGFtYmnDqW4gdGUgcHVlZGUgZ3VzdGFy4oCmJywKCQknRGVzY3JpcHRpb24nICAgICAgICAgICAgICAgICAgICAgPT4gJ0Rlc2NyaXBjacOzbicsCgkJJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24nICAgICAgICAgID0+ICdJbmZvcm1hY2nDs24gYWRpY2lvbmFsJywKCQknUmV2aWV3cycgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1Jlc2XDsWFzJywKCQknU0tVOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ1NLVTonLAoJCSdDYXRlZ29yeTonICAgICAgICAgICAgICAgICAgICAgICA9PiAnQ2F0ZWdvcsOtYTonLAoJCSdDYXRlZ29yaWVzOicgICAgICAgICAgICAgICAgICAgICA9PiAnQ2F0ZWdvcsOtYXM6JywKCQknVGFnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0V0aXF1ZXRhOicsCgkJJ1RhZ3M6JyAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdFdGlxdWV0YXM6JywKCgkJLy8gU2VhcmNoIC8gU2hvcAoJCSdTZWFyY2gnICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnQnVzY2FyJywKCQknU2VhcmNoIGZvcjonICAgICAgICAgICAgICAgICAgICAgPT4gJ0J1c2NhcjonLAoJCSdTZWFyY2ggcHJvZHVjdHMmaGVsbGlwOycgICAgICAgICA9PiAnQnVzY2FyIHByb2R1Y3Rvc+KApicsCgkJJ05vIHByb2R1Y3RzIHdlcmUgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWxlY3Rpb24uJyA9PiAnTm8gZW5jb250cmFtb3MgcHJvZHVjdG9zIGNvbiB0dSBzZWxlY2Npw7NuLicsCgkJJ0RlZmF1bHQgc29ydGluZycgICAgICAgICAgICAgICAgID0+ICdPcmRlbiBwcmVkZXRlcm1pbmFkbycsCgkJJ1NvcnQgYnkgcG9wdWxhcml0eScgICAgICAgICAgICAgID0+ICdPcmRlbmFyIHBvciBwb3B1bGFyaWRhZCcsCgkJJ1NvcnQgYnkgYXZlcmFnZSByYXRpbmcnICAgICAgICAgID0+ICdPcmRlbmFyIHBvciB2YWxvcmFjacOzbicsCgkJJ1NvcnQgYnkgbGF0ZXN0JyAgICAgICAgICAgICAgICAgID0+ICdPcmRlbmFyIHBvciBtw6FzIHJlY2llbnRlcycsCgkJJ1NvcnQgYnkgcHJpY2U6IGxvdyB0byBoaWdoJyAgICAgID0+ICdQcmVjaW86IG1lbm9yIGEgbWF5b3InLAoJCSdTb3J0IGJ5IHByaWNlOiBoaWdoIHRvIGxvdycgICAgICA9PiAnUHJlY2lvOiBtYXlvciBhIG1lbm9yJywKCgkJLy8gTWlzYwoJCSdTaG93aW5nIGFsbCAlZCByZXN1bHRzJyAgICAgICAgICA9PiAnTW9zdHJhbmRvIGxvcyAlZCByZXN1bHRhZG9zJywKCQknU2hvd2luZyAlMSRkJm5kYXNoOyUyJGQgb2YgJTMkZCByZXN1bHRzJyA9PiAnTW9zdHJhbmRvICUxJGTigJMlMiRkIGRlICUzJGQgcmVzdWx0YWRvcycsCgkJJ05vdGUnICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdOb3RhJywKCQknU2F2ZSBjaGFuZ2VzJyAgICAgICAgICAgICAgICAgICAgPT4gJ0d1YXJkYXIgY2FtYmlvcycsCgkJJ1VwZGF0ZScgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdBY3R1YWxpemFyJywKCQknQ29udGludWUgc2hvcHBpbmcnICAgICAgICAgICAgICAgPT4gJ1NlZ3VpciBjb21wcmFuZG8nLAoJCSdZZXMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAnU8OtJywKCQknTm8nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ05vJywKCgkJLy8gU3RhdHVzCgkJJ1BlbmRpbmcgcGF5bWVudCcgICAgICAgICAgICAgICAgID0+ICdQYWdvIHBlbmRpZW50ZScsCgkJJ1Byb2Nlc3NpbmcnICAgICAgICAgICAgICAgICAgICAgID0+ICdQcm9jZXNhbmRvJywKCQknT24gaG9sZCcgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0VuIGVzcGVyYScsCgkJJ0NvbXBsZXRlZCcgICAgICAgICAgICAgICAgICAgICAgID0+ICdDb21wbGV0YWRvJywKCQknQ2FuY2VsbGVkJyAgICAgICAgICAgICAgICAgICAgICAgPT4gJ0NhbmNlbGFkbycsCgkJJ1JlZnVuZGVkJyAgICAgICAgICAgICAgICAgICAgICAgID0+ICdSZWVtYm9sc2FkbycsCgkJJ0ZhaWxlZCcgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdGYWxsaWRvJywKCV07CglyZXR1cm4gJG07Cn0KCi8qKiBPY3VsdGEgZWwgdMOtdHVsbyBhdXRvbcOhdGljbyBkZSBsYSBww6FnaW5hIChsbyB1c2Ftb3MgY29uIG51ZXN0cm8gaGVybyBjdXN0b20pLiAqLwphZGRfZmlsdGVyKCAnd29vY29tbWVyY2Vfc2hvd19wYWdlX3RpdGxlJywgJ19fcmV0dXJuX2ZhbHNlJyApOwphZGRfZmlsdGVyKCAndGhlX3RpdGxlJywgZnVuY3Rpb24oICR0aXRsZSwgJGlkID0gbnVsbCApIHsKCWlmICggaXNfYWRtaW4oKSB8fCAhICRpZCApIHsgcmV0dXJuICR0aXRsZTsgfQoJJHNsdWdzID0gWyAnY2Fycml0bycsICdmaW5hbGl6YXItY29tcHJhJywgJ21pLWN1ZW50YScsICd0aWVuZGEnLCAnZmF2b3JpdG9zJywgJ25vc290cmFzJywgJ2NvbnRhY3RvJyBdOwoJJHBvc3QgID0gZ2V0X3Bvc3QoICRpZCApOwoJaWYgKCAkcG9zdCAmJiBpbl9hcnJheSggJHBvc3QtPnBvc3RfbmFtZSwgJHNsdWdzLCB0cnVlICkgJiYgaW5fdGhlX2xvb3AoKSAmJiBpc19zaW5ndWxhciggJ3BhZ2UnICkgKSB7CgkJcmV0dXJuICcnOwoJfQoJcmV0dXJuICR0aXRsZTsKfSwgMTAsIDIgKTsKCi8qKgogKiBGaWx0cmEgZWwgdGh1bWJuYWlsIGRlbCBjYXJyaXRvIHBhcmEgdXNhciBudWVzdHJhIGltYWdlbiBfbW9uYWxlX2ltZ191cmwuCiAqLwphZGRfZmlsdGVyKCAnd29vY29tbWVyY2VfY2FydF9pdGVtX3RodW1ibmFpbCcsIGZ1bmN0aW9uKCAkdGh1bWIsICRjYXJ0X2l0ZW0sICRjYXJ0X2l0ZW1fa2V5ICkgewoJJHBpZCA9ICRjYXJ0X2l0ZW1bJ3Byb2R1Y3RfaWQnXSA/PyAwOwoJaWYgKCAhICRwaWQgKSB7IHJldHVybiAkdGh1bWI7IH0KCSR1cmwgPSBnZXRfcG9zdF9tZXRhKCAkcGlkLCAnX21vbmFsZV9pbWdfdXJsJywgdHJ1ZSApOwoJaWYgKCAhICR1cmwgKSB7IHJldHVybiAkdGh1bWI7IH0KCXJldHVybiAnPGltZyBzcmM9IicgLiBlc2NfdXJsKCAkdXJsICkgLiAnIiBhbHQ9IiIgY2xhc3M9Im1uLWNhcnQtdGh1bWItaW1nIj4nOwp9LCAxMCwgMyApOwoKYWRkX2ZpbHRlciggJ3dvb2NvbW1lcmNlX29yZGVyX2l0ZW1fdGh1bWJuYWlsJywgZnVuY3Rpb24oICR0aHVtYiwgJGl0ZW0gKSB7CgkkcGlkID0gJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCk7CgkkdXJsID0gZ2V0X3Bvc3RfbWV0YSggJHBpZCwgJ19tb25hbGVfaW1nX3VybCcsIHRydWUgKTsKCWlmICggISAkdXJsICkgeyByZXR1cm4gJHRodW1iOyB9CglyZXR1cm4gJzxpbWcgc3JjPSInIC4gZXNjX3VybCggJHVybCApIC4gJyIgYWx0PSIiIGNsYXNzPSJtbi1jYXJ0LXRodW1iLWltZyI+JzsKfSwgMTAsIDIgKTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFNob3J0Y29kZSBDQVJUIOKAlCBbbW9uYWxlX2NhcnRdCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIG1vbmFsZV9jYXJ0X3JlbmRlciggJGF0dHMgPSBbXSApIHsKCW9iX3N0YXJ0KCk7ID8+Cgk8c2VjdGlvbiBjbGFzcz0ibW4tY2FydCI+CgkJPGRpdiBjbGFzcz0ibW4tYWNjb3VudC1oZXJvIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj5UdSBzZWxlY2Npw7NuPC9kaXY+CgkJCQk8aDE+Q2Fycml0byBkZSA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij5jb21wcmFzPC9zcGFuPjwvaDE+CgkJCQk8cD5SZXZpc2EgdHVzIHByb2R1Y3RvcyB5IGNvbnRpbsO6YSBhbCBjaGVja291dCBjdWFuZG8gZXN0w6lzIGxpc3RhLjwvcD4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIG1uLWNhcnQtYm9keSI+CgkJCTxkaXYgY2xhc3M9Im1uLXN0ZXBzLWluZGljYXRvciI+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zdGVwLWkgYWN0aXZlIj48c3Bhbj4xPC9zcGFuPkNhcnJpdG88L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXN0ZXAtbGluZSI+PC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zdGVwLWkiPjxzcGFuPjI8L3NwYW4+Q2hlY2tvdXQ8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXN0ZXAtbGluZSI+PC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zdGVwLWkiPjxzcGFuPjM8L3NwYW4+Q29uZmlybWFjacOzbjwvZGl2PgoJCQk8L2Rpdj4KCQkJPD9waHAgZWNobyBkb19zaG9ydGNvZGUoICdbd29vY29tbWVyY2VfY2FydF0nICk7ID8+CgkJPC9kaXY+Cgk8L3NlY3Rpb24+Cgk8P3BocAoJcmV0dXJuIG1vbmFsZV9jbGVhbiggb2JfZ2V0X2NsZWFuKCkgKTsKfQphZGRfc2hvcnRjb2RlKCAnbW9uYWxlX2NhcnQnLCAnbW9uYWxlX2NhcnRfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgU2hvcnRjb2RlIENIRUNLT1VUIOKAlCBbbW9uYWxlX2NoZWNrb3V0XQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtb25hbGVfY2hlY2tvdXRfcmVuZGVyKCAkYXR0cyA9IFtdICkgewoJb2Jfc3RhcnQoKTsgPz4KCTxzZWN0aW9uIGNsYXNzPSJtbi1jaGVja291dCI+CgkJPGRpdiBjbGFzcz0ibW4tYWNjb3VudC1oZXJvIj4KCQkJPGRpdiBjbGFzcz0ibW4tY29udGFpbmVyIj4KCQkJCTxkaXYgY2xhc3M9InNlY3Rpb24tdGFnIj7Dmmx0aW1vcyBkZXRhbGxlczwvZGl2PgoJCQkJPGgxPkZpbmFsaXphciA8c3BhbiBjbGFzcz0ibW4tYWNjZW50Ij5jb21wcmE8L3NwYW4+PC9oMT4KCQkJCTxwPkVzdMOhcyBhIHVuIHBhc28gZGUgcmVjaWJpciB0dSBwZWRpZG8uPC9wPgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJtbi1jb250YWluZXIgbW4tY2hlY2tvdXQtYm9keSI+CgkJCTxkaXYgY2xhc3M9Im1uLXN0ZXBzLWluZGljYXRvciI+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zdGVwLWkgZG9uZSI+PHNwYW4+4pyTPC9zcGFuPkNhcnJpdG88L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXN0ZXAtbGluZSBkb25lIj48L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXN0ZXAtaSBhY3RpdmUiPjxzcGFuPjI8L3NwYW4+Q2hlY2tvdXQ8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9Im1uLXN0ZXAtbGluZSI+PC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJtbi1zdGVwLWkiPjxzcGFuPjM8L3NwYW4+Q29uZmlybWFjacOzbjwvZGl2PgoJCQk8L2Rpdj4KCQkJPD9waHAgZWNobyBkb19zaG9ydGNvZGUoICdbd29vY29tbWVyY2VfY2hlY2tvdXRdJyApOyA/PgoJCQk8ZGl2IGNsYXNzPSJtbi10cnVzdC1yb3ciPgoJCQkJPGRpdj48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48cmVjdCB4PSIzIiB5PSIxMSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjExIiByeD0iMiIvPjxwYXRoIGQ9Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIvPjwvc3ZnPiBQYWdvIDEwMCUgc2VndXJvIGNvbiBTU0w8L2Rpdj4KCQkJCTxkaXY+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCI+PHBhdGggZD0iTTEgNHY2aDYiLz48cGF0aCBkPSJNMy41MSAxNWE5IDkgMCAxIDAgMi4xMy05LjM2TDEgMTAiLz48L3N2Zz4gRGV2b2x1Y2lvbmVzIGbDoWNpbGVzIDE1IGTDrWFzPC9kaXY+CgkJCQk8ZGl2Pjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxyZWN0IHg9IjEiIHk9IjMiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxMyIvPjxwb2x5Z29uIHBvaW50cz0iMTYgOCAyMCA4IDIzIDExIDIzIDE2IDE2IDE2IDE2IDgiLz48L3N2Zz4gRW52w61vIGEgdG9kbyBNw6l4aWNvPC9kaXY+CgkJCTwvZGl2PgoJCTwvZGl2PgoJPC9zZWN0aW9uPgoJPD9waHAKCXJldHVybiBtb25hbGVfY2xlYW4oIG9iX2dldF9jbGVhbigpICk7Cn0KYWRkX3Nob3J0Y29kZSggJ21vbmFsZV9jaGVja291dCcsICdtb25hbGVfY2hlY2tvdXRfcmVuZGVyJyApOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVG9hc3QgY29udGFpbmVyIChpbnllY3RhZG8gZW4gY2FkYSBww6FnaW5hIGNvbiBzaG9ydGNvZGUpCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIG1vbmFsZV90b2FzdF9odG1sKCkgewoJcmV0dXJuICc8ZGl2IGNsYXNzPSJtbi10b2FzdCIgZGF0YS1tbi10b2FzdCBhcmlhLWxpdmU9InBvbGl0ZSI+PC9kaXY+JzsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgTW9kYWwgSFRNTCAoaW55ZWN0YWRvIHVuYSBzb2xhIHZleikKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbW9uYWxlX3F1aWNrdmlld19tb2RhbCgpIHsKCW9iX3N0YXJ0KCk7ID8+Cgk8ZGl2IGNsYXNzPSJtbi1xdiIgZGF0YS1tbi1xdiBhcmlhLWhpZGRlbj0idHJ1ZSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im1uLXF2LXRpdGxlIj4KCQk8ZGl2IGNsYXNzPSJtbi1xdi1iYWNrZHJvcCIgZGF0YS1tbi1xdi1jbG9zZT48L2Rpdj4KCQk8ZGl2IGNsYXNzPSJtbi1xdi1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtbi1xdi1jbG9zZSIgZGF0YS1tbi1xdi1jbG9zZSBhcmlhLWxhYmVsPSJDZXJyYXIiPgoJCQkJPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xOCA2IDYgMThNNiA2bDEyIDEyIi8+PC9zdmc+CgkJCTwvYnV0dG9uPgoJCQk8ZGl2IGNsYXNzPSJtbi1xdi1ib2R5IiBkYXRhLW1uLXF2LWJvZHk+CgkJCQk8ZGl2IGNsYXNzPSJtbi1xdi1sb2FkaW5nIj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+Cgk8L2Rpdj4KCTw/cGhwCglyZXR1cm4gb2JfZ2V0X2NsZWFuKCk7Cn0K Vestido largo satinado Verde soft con detalle en hombros · Vestidos · Monalé

[monale_single_product]

¡Hola! ¿Te ayudamos?