Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

PD9waHAKCighZGVmaW5lZCgnSU5fUG93ZXJCQicpKSA/IGRpZSgpIDogJyc7CgpkZWZpbmUoJ0lOX0FETUlOJyx0cn..

Decoded Output download

<?  PD9waHAKCighZGVmaW5lZCgnSU5fUG93ZXJCQicpKSA/IGRpZSgpIDogJyc7CgpkZWZpbmUoJ0lOX0FETUlOJyx0cnVlKTsKCiRDQUxMX1NZU1RFTQkJCSAgICAgICAgPQlhcnJheSgpOwokQ0FMTF9TWVNURU1bJ1RPUElDTU9EJ10gICAgICAgICAgID0gICB0cnVlOwokQ0FMTF9TWVNURU1bJ1NFQ1RJT04nXSAgICAgICAgICAgID0gCXRydWU7CgpkZWZpbmUoJ0pBVkFTQ1JJUFRfUG93ZXJDb2RlJyx0cnVlKTsKCgoKZGVmaW5lKCdDTEFTU19OQU1FJywnUG93ZXJCQlRvcGljUHJlZml4cycpOwoKaW5jbHVkZSgnLi4vY29tbW9uLnBocCcpOwpjbGFzcyBQb3dlckJCVG9waWNQcmVmaXhzCnsKCWZ1bmN0aW9uIHJ1bigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKCQlpZiAoJFBvd2VyQkItPl9DT05GWydtZW1iZXJfcGVybWlzc2lvbiddKQoJCXsKCQkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCdoZWFkZXInKTsKCgkJCWlmICgkUG93ZXJCQi0+X0dFVFsnY29udHJvbCddKQoJCQl7CgkJCQlpZiAoJFBvd2VyQkItPl9HRVRbJ21haW4nXSkKCQkJCXsKCQkJCQkkdGhpcy0+X0NvbnRyb2xNYWluKCk7CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkUG93ZXJCQi0+X0dFVFsnYWRkJ10pCgkJCXsKICAgICAgICAgICAgICAJaWYgKCRQb3dlckJCLT5fR0VUWydtYWluJ10pCgkJCQl7CgkJCQkJJHRoaXMtPl9BZGRUb3BpY1ByZWZpeHNNYWluKCk7CgkJCQl9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fQWRkVG9waWNQcmVmaXhzU3RhcnQoKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRQb3dlckJCLT5fR0VUWydlZGl0J10pCgkJCXsKCQkJCWlmICgkUG93ZXJCQi0+X0dFVFsnbWFpbiddKQoJCQkJewoJCQkJCSR0aGlzLT5fRWRpdE1haW4oKTsKCQkJCX0KCQkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ3N0YXJ0J10pCgkJCQl7CgkJCQkJJHRoaXMtPl9FZGl0U3RhcnQoKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRQb3dlckJCLT5fR0VUWydkZWwnXSkKCQkJewogICAgICAgICAgICAgICAgaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fRGVsU3RhcnQoKTsKCQkJCX0KCQkJfQogICAgICAgICAgIGVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ2FjdGl2ZSddKQoJCQl7CiAgICAgICAgICAgICAgICBpZiAoJFBvd2VyQkItPl9HRVRbJ3N0YXJ0J10pCgkJCQl7CgkJCQkJJHRoaXMtPl9BY3RpdmVTdGFydCgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ25vX2FjdGl2ZSddKQoJCQl7CgogICAgICAgICAgICAgICAgaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fTm9BY3RpdmVTdGFydCgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ2NoYW5nZV9vcmRlciddKQoJCQl7CgkJCQkkdGhpcy0+X0NoYW5nZU9yZGVyKCk7CgkJCX0KCQkkUG93ZXJCQi0+dGVtcGxhdGUtPmRpc3BsYXkoJ2Zvb3RlcicpOwoJCX0KCgl9CgoKCS8qKgoJICogYWRkIFRvcGljUHJlZml4cyBNYWluCgkgKi8KCglmdW5jdGlvbiBfQWRkVG9waWNQcmVmaXhzTWFpbigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoJCS8vLy8vLy8vLy8KCgkJJFNlY0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkU2VjQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJFNlY0FyclsncHJvYyddWycqJ10gCQkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCgkJJFNlY0Fyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJFNlY0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJJFNlY0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkU2VjQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkkU2VjQXJyWyd3aGVyZSddWzBdWyduYW1lJ10JCT0gCSdwYXJlbnQnOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJzAnOwoKCQkvLyBHZXQgbWFpbiBzZWN0aW9ucwoJCSRjYXRzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJFNlY0Fyciwnc2VjdGlvbicpOwoKIAkJLy8vLy8vLy8vLy8vCgoJCS8vIExvb3AgdG8gcmVhZCB0aGUgaW5mb3JtYXRpb24gb2YgbWFpbiBzZWN0aW9ucwoJCWZvcmVhY2ggKCRjYXRzIGFzICRjYXQpCgkJewogICAgICAgICAgICAgLy8gZm9yZWFjaCBtYWluIHNlY3Rpb25zCgkJCSRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydmb3J1bXNfbGlzdCddWyRjYXRbJ2lkJ10gLiAnX20nXSA9ICRjYXQ7CgoJCQlpZigkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQl7CgkJCUBpbmNsdWRlKCIuLi9jYWNoZS9mb3J1bXNfY2FjaGUvZm9ydW1zX2NhY2hlXyIuJGNhdFsnaWQnXS4iLnBocCIpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkkZm9ydW1zX2NhY2hlID0gJGNhdFsnZm9ydW1zX2NhY2hlJ107CgkJCX0KCQkJaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCQkJewogICAgICAgICAgICAgICAJJEZvcnVtQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoJCQkJJEZvcnVtQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgkJCQkkRm9ydW1BcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdzb3J0JzsKCQkJCSRGb3J1bUFyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoJCQkJJEZvcnVtQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXVswXVsnbmFtZSddCQk9IAkncGFyZW50JzsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXVswXVsnb3BlciddCQk9IAknPSc7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJGNhdFsnaWQnXTsKCQkJCSRmb3J1bXMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkRm9ydW1BcnIsJ3NlY3Rpb24nKTsKCgkJCQkJZm9yZWFjaCAoJGZvcnVtcyBhcyAkZm9ydW0pCgkJCQkJewoJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCQkJCQkJCSRmb3J1bVsnaXNfc3ViJ10gCT0gCTA7CgkJCQkJCQkkZm9ydW1bJ3N1YiddCQk9CScnOwoKCQkJCQkJCWlmICgkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQkJCQkJewoJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kZm9ydW1bJ2lkJ10uIi5waHAiKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkZm9ydW1bJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkgICAgICAgICAgICAgICAJJFN1YkFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJJFN1YkFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkkU3ViQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJJFN1YkFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCSRTdWJBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJJFN1YkFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkkU3ViQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRmb3J1bVsnaWQnXTsKCQkJCQkJCQkJJHN1YnMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3ViQXJyLCdzZWN0aW9uJyk7CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzIGFzICRzdWIpCgkJCQkJCQkJCXsKCQkJCQkJCQkJICAgaWYgKCRmb3J1bVsnaWQnXSA9PSAkc3ViWydwYXJlbnQnXSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWInXSkKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWInXSA9IDE7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJICRmb3J1bVsnc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kc3ViWydpZCddIC4gJyI+LS0tLSAnICAuICRzdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgoJCQkJCQkJCQkJICB9CgoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8KCgkJCQkJCQkJCQkJCQkkZm9ydW1bJ2lzX3N1Yl9zdWInXSAJPSAJMDsKCQkJCQkJCQkJCQkJCSRmb3J1bVsnc3ViX3N1YiddCQk9CScnOwoKCQkJCQkJCQkJCQlpZiAoJFBvd2VyQkItPl9DT05GWydmaWxlc19mb3J1bXNfQ2FjaGUnXSkKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kc3ViWydpZCddLiIucGhwIik7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJJGZvcnVtc19jYWNoZSA9ICRzdWJbJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJCQkJCX0KCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGZvcnVtc19jYWNoZSkpCgkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgoJCQkJCQkJICAgICAgICAgICAgICAgCSRTdWJzQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdzb3J0JzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoJCQkJCQkJCQkJCSRTdWJzQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXVswXVsnbmFtZSddCQk9IAkncGFyZW50JzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXVswXVsnb3BlciddCQk9IAknPSc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJHN1YlsnaWQnXTsKCQkJCQkJCQkJCQkkc3Vic19zdWIgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3Vic0Fyciwnc2VjdGlvbicpOwoJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzX3N1YiBhcyAkc3ViX3N1YikKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkgICBpZiAoJHN1YlsnaWQnXSA9PSAkc3ViX3N1YlsncGFyZW50J10pCgkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgoJCQkJCQkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWJfc3ViJ10pCgkJCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJCQkkZm9ydW1bJ2lzX3N1Yl9zdWInXSA9IDE7CgkJCQkJCQkJCQkJCQkJCQkJfQoKCQkJCQkJCQkJCQkJCQkJICRmb3J1bVsnc3ViX3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1Yl9zdWJbJ2lkJ10gLiAnIj4tLS0tICcgIC4gJHN1Yl9zdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCQkJCQkJCQkgIH0KCQkJCQkJCQkJCQkJIH0KCgkJCQkJCQkJCQkgICB9CgkJCQkJCQkJCSB9CgkJCQkJCQkJfQoKCQkJCQkJCSRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydmb3J1bXNfbGlzdCddWyRmb3J1bVsnaWQnXSAuICdfZiddID0gJGZvcnVtOwoJCQkJCQkJdW5zZXQoJGdyb3Vwcyk7CgoJCSAgICAgICAgICAgICB9IC8vIGVuZCBmb3JlYWNoICgkZm9ydW1zKQoJCQkgIH0gLy8gZW5kICFlbXB0eSgkZm9ydW1zX2NhY2hlKQoKCQkJCXVuc2V0KCRTZWNBcnIpOwoJCQkJJFNlY0FyciA9ICRQb3dlckJCLT5EQi0+c3FsX2ZyZWVfcmVzdWx0KCRTZWNBcnIpOwoJCX0gLy8gZW5kIGZvcmVhY2ggKCRjYXRzKQoKCiAgICAgICAgLy8gR2V0IGFsbCBncm91cHMKCQkkR3JvdXBBcnIgCQkJCQkJPSAJYXJyYXkoKTsKCQkkR3JvdXBBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkR3JvdXBBcnJbJ3Byb2MnXSAJCQkJPSAJYXJyYXkoKTsKCQkkR3JvdXBBcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgoJCSRHcm91cEFyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJEdyb3VwQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdpZCc7CgkJJEdyb3VwQXJyWydvcmRlciddWyd0eXBlJ10JCT0JJ0FTQyc7CgoKCQkkZ3JvdXBzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEdyb3VwQXJyLCdncm91cCcpOwogCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZ3JvdXBfbGlzdCddID0gJGdyb3VwczsKCgkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCd0b3BpY3NfcHJlZml4c19hZGQnKTsKCiAgICB9CgoJLyoqCgkgKiBhZGQgVG9waWNQcmVmaXhzIFN0YXJ0CgkgKi8KCWZ1bmN0aW9uIF9BZGRUb3BpY1ByZWZpeHNTdGFydCgpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfbmFtZSddKSkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydQbGVhc2VfZmlsbF9pbl9hbGxfdGhlX2luZm9ybWF0aW9uJ10pOwoJCX0KCgkJJGZvcnVtcyA9ICR0aGlzLT5nZXRfYWN0aXZlaW5fZm9ydW1zKCk7CgkJJGdyb3VwcyA9ICR0aGlzLT5nZXRfYWN0aXZlaW5fZ3JvdXBzKCk7CgoJCWlmICggISAkZm9ydW1zICkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydZb3VfbXVzdF9zZWxlY3RfdGhlX2ZvcnVtJ10pOwoJCX0KCgoJCS8vLy8vLy8vLy8KCgkJJG9yZGVyID0gMDsKCgkJaWYgKCRQb3dlckJCLT5fUE9TVFsnb3JkZXJfdHlwZSddID09ICdhdXRvJykKCQl7CiRPcmRlcnRBcnIgPSAkUG93ZXJCQi0+REItPnNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSAiLiRQb3dlckJCLT5wcmVmaXguInRvcGljc19wcmVmaXhzIE9SREVSIEJZIHByZWZpeF9vcmRlciBERVNDIik7CiRPcmRlclByZWZpeCAgID0gJFBvd2VyQkItPkRCLT5zcWxfZmV0Y2hfYXJyYXkoJE9yZGVydEFycik7CgoJCQkvLyBObyB0b3BpY3MgcHJlZml4CgkJCWlmICghJE9yZGVyUHJlZml4KQoJCQl7CgkJCQkkb3JkZXIgPSAxOwoJCQl9CgkJCS8vIFRoZXJlIGlzIGEgdG9waWNzIHByZWZpeAoJCQllbHNlCgkJCXsKCQkJCSRvcmRlciA9ICRPcmRlclByZWZpeFsncHJlZml4X29yZGVyJ10gKyAxOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkgCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9QT1NUWydvcmRlcl90eXBlJ10gPT0gJ21hbnVhbCcgYW5kIGVtcHR5KCRQb3dlckJCLT5fUE9TVFsncHJlZml4X29yZGVyJ10pKSkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1BsZWFzZV9maWxsX2luX2FsbF90aGVfaW5mb3JtYXRpb24nXSk7CgkJCX0KCgkJCSRvcmRlciA9ICRQb3dlckJCLT5fUE9TVFsncHJlZml4X29yZGVyJ107CgkJfQoKCQkvLy8vLy8vLy8vCgoJCQkkVG9waWNQcmVmaXhzQXJyIAkJCT0gCWFycmF5KCk7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ10JPQlhcnJheSgpOwoKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X25hbWUnXSAgICAgICAgICAgID0gCSAkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9uYW1lJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9iYWNrZ3JvdW5kJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfYmFja2dyb3VuZCddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfdGV4dF9jb2xvciddIAkgICAgCT0gCSRQb3dlckJCLT5fUE9TVFsncHJlZml4X3RleHRfY29sb3InXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2JvcmRlcl9jb2xvciddIAkJICAgID0gCSRQb3dlckJCLT5fUE9TVFsncHJlZml4X2JvcmRlcl9jb2xvciddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfYWxsb3dlZF9mb3J1bXMnXSAJCT0gCSRmb3J1bXM7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hbGxvd2VkX3VzZXJncm91cHMnXSAJCT0gCSRncm91cHM7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9hY3RpdmEnXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X29yZGVyJ10gCQkgICAgPSAJJG9yZGVyOwoKCQkJJGluc2VydCA9ICRQb3dlckJCLT5jb3JlLT5JbnNlcnQoJFRvcGljUHJlZml4c0FyciwndG9waWNzX3ByZWZpeHMnKTsKCgoJCQlpZiAoJGluc2VydCkKCQkJewogICAgICAgICAgICAgICAkUG93ZXJCQi0+ZnVuY3Rpb25zLT5yZWRpcmVjdCgnaW5kZXgucGhwP3BhZ2U9dG9waWNzX3ByZWZpeHMmY29udHJvbD0xJm1haW49MScpOwoJCQl9CgoJfQoKCWZ1bmN0aW9uIF9Db250cm9sTWFpbigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKICAgICAgICAvLyBzaG93IFRvcGljUHJlZml4cyBMaXN0CgkJJFRvcGljUHJlZml4c0FyciAJCQkJCT0gCWFycmF5KCk7CgkJJFRvcGljUHJlZml4c0Fyclsnb3JkZXInXQkJCT0JYXJyYXkoKTsKCQkkVG9waWNQcmVmaXhzQXJyWydvcmRlciddWydmaWVsZCddCT0JJ3ByZWZpeF9vcmRlcic7CgkJJFRvcGljUHJlZml4c0Fyclsnb3JkZXInXVsndHlwZSddCT0JJ0FTQyc7CgkJJFRvcGljUHJlZml4c0FyclsncHJvYyddIAkJCT0gCWFycmF5KCk7CgkJJFRvcGljUHJlZml4c0FyclsncHJvYyddWycqJ10gCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoKCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ3doaWxlJ11bJ1RvcGljc1ByZWZpeHNMaXN0J10gPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkVG9waWNQcmVmaXhzQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCgkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCd0b3BpY3NfcHJlZml4c19tYWluJyk7Cgl9CgoKCgoJZnVuY3Rpb24gX0VkaXRNYWluKCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5lcnJvcigkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ19DT05GJ11bJ2xhbmcnXVsnVGhlX3JlcXVlc3RfaXNfbm90X3ZhbGlkJ10pOwoJCQl9CgoJCQkkVG9waWNQcmVmaXhzRWRpdEFycgkJCQk9CWFycmF5KCk7CgkJICAgICRUb3BpY1ByZWZpeHNFZGl0QXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCgkJCSRUb3BpY1ByZWZpeHNFZGl0ID0gJFBvd2VyQkItPmNvcmUtPkdldEluZm8oJFRvcGljUHJlZml4c0VkaXRBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoKCQkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCiAgICAgICAgICAgJHNlbGVjdGVkX2ZvcnVtcyA9IGV4cGxvZGUoJywnLCAkVG9waWNQcmVmaXhzRWRpdFsncHJlZml4X2FsbG93ZWRfZm9ydW1zJ10pOwogICAgICAgICAgICRzZWxlY3RlZF9ncm91cHMgPSBleHBsb2RlKCcsJywgJFRvcGljUHJlZml4c0VkaXRbJ3ByZWZpeF9hbGxvd2VkX3VzZXJncm91cHMnXSk7CgoJCS8vLy8vLy8vLy8KCgkJJFNlY0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkU2VjQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJFNlY0FyclsncHJvYyddWycqJ10gCQkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCgkJJFNlY0Fyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJFNlY0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJJFNlY0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkU2VjQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkkU2VjQXJyWyd3aGVyZSddWzBdWyduYW1lJ10JCT0gCSdwYXJlbnQnOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJzAnOwoKCQkvLyBHZXQgbWFpbiBzZWN0aW9ucwoJCSRjYXRzID0gJFBvd2VyQkItPnNlY3Rpb24tPkdldFNlY3Rpb25zTGlzdCgkU2VjQXJyKTsKCiAJCS8vLy8vLy8vLy8vLwoKCQkvLyBMb29wIHRvIHJlYWQgdGhlIGluZm9ybWF0aW9uIG9mIG1haW4gc2VjdGlvbnMKCQlmb3JlYWNoICgkY2F0cyBhcyAkY2F0KQoJCXsKICAgICAgICAgICAgIC8vIGZvcmVhY2ggbWFpbiBzZWN0aW9ucwoJCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZm9ydW1zX2xpc3QnXVskY2F0WydpZCddIC4gJ19tJ10gPSAkY2F0OwoKCQkJaWYoJFBvd2VyQkItPl9DT05GWydmaWxlc19mb3J1bXNfQ2FjaGUnXSkKCQkJewoJCQlAaW5jbHVkZSgiLi4vY2FjaGUvZm9ydW1zX2NhY2hlL2ZvcnVtc19jYWNoZV8iLiRjYXRbJ2lkJ10uIi5waHAiKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJJGZvcnVtc19jYWNoZSA9ICRjYXRbJ2ZvcnVtc19jYWNoZSddOwoJCQl9CgkJCWlmICghZW1wdHkoJGZvcnVtc19jYWNoZSkpCgkJCXsKICAgICAgICAgICAgICAgCSRGb3J1bUFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCSRGb3J1bUFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJJEZvcnVtQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCSRGb3J1bUFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkkRm9ydW1BcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJJEZvcnVtQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRjYXRbJ2lkJ107CgkJCQkkZm9ydW1zID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEZvcnVtQXJyLCdzZWN0aW9uJyk7CgoJCQkJCWZvcmVhY2ggKCRmb3J1bXMgYXMgJGZvcnVtKQoJCQkJCXsKCQkJCQkJCSRmb3J1bVsnaXNfc3ViJ10gCT0gCTA7CgkJCQkJCQkkZm9ydW1bJ3N1YiddCQk9CScnOwoKCQkJCQkJCWlmICgkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQkJCQkJewoJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kZm9ydW1bJ2lkJ10uIi5waHAiKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkZm9ydW1bJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkgICAgICAgICAgICAgICAJJFN1YkFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJJFN1YkFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkkU3ViQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJJFN1YkFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCSRTdWJBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJJFN1YkFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkkU3ViQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRmb3J1bVsnaWQnXTsKCQkJCQkJCQkJJHN1YnMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3ViQXJyLCdzZWN0aW9uJyk7CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzIGFzICRzdWIpCgkJCQkJCQkJCXsKCQkJCQkJCQkJICAgaWYgKCRmb3J1bVsnaWQnXSA9PSAkc3ViWydwYXJlbnQnXSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWInXSkKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWInXSA9IDE7CgkJCQkJCQkJCQkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgICAgICBpZiAoaW5fYXJyYXkoJHN1YlsnaWQnXSAsICRzZWxlY3RlZF9mb3J1bXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgICAgIHsKCQkJCQkJCQkJCQkkZm9ydW1bJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1YlsnaWQnXSAuICciIHNlbGVjdGVkPSJzZWxlY3RlZCIgPi0tLScgIC4gJHN1YlsndGl0bGUnXSAuICc8L29wdGlvbj4nKTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkZm9ydW1bJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1YlsnaWQnXSAuICciID4tLS0nICAuICRzdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJICB9CgkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWJfc3ViJ10gCT0gCTA7CgkJCQkJCQkJCQkJJGZvcnVtWydzdWJfc3ViJ10JCT0JJyc7CgkJCQkJCQkJCQkJaWYgKCRQb3dlckJCLT5fQ09ORlsnZmlsZXNfZm9ydW1zX0NhY2hlJ10pCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCUBpbmNsdWRlKCIuLi9jYWNoZS9mb3J1bXNfY2FjaGUvZm9ydW1zX2NhY2hlXyIuJHN1YlsnaWQnXS4iLnBocCIpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQllbHNlCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkc3ViWydmb3J1bXNfY2FjaGUnXTsKCQkJCQkJCQkJCQl9CgoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkJCQkJCQkkU3Vic0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJCQkkU3Vic0FyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkJCSRTdWJzQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRzdWJbJ2lkJ107CgkJCQkJCQkJCQkJJHN1YnNfc3ViID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJFN1YnNBcnIsJ3NlY3Rpb24nKTsKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3Vic19zdWIgYXMgJHN1Yl9zdWIpCgkJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkJICAgaWYgKCRzdWJbJ2lkJ10gPT0gJHN1Yl9zdWJbJ3BhcmVudCddKQoJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKCQkJCQkJCQkJCQkJCQkJCQlpZiAoISRmb3J1bVsnaXNfc3ViX3N1YiddKQoJCQkJCQkJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWJfc3ViJ10gPSAxOwoJCQkJCQkJCQkJCQkJCQkJCX0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHN1Yl9zdWJbJ2lkJ10gLCAkc2VsZWN0ZWRfZm9ydW1zKSkKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgICAgIHsKCQkJCQkJCQkJCQkJCQkJCSRmb3J1bVsnc3ViX3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1Yl9zdWJbJ2lkJ10gLiAnIiBzZWxlY3RlZD0ic2VsZWN0ZWQiID4tLS0nICAuICRzdWJfc3ViWyd0aXRsZSddIC4gJzwvb3B0aW9uPicpOwoJCQkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJJGZvcnVtWydzdWJfc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kc3ViX3N1YlsnaWQnXSAuICciID4tLS0nICAuICRzdWJfc3ViWyd0aXRsZSddIC4gJzwvb3B0aW9uPicpOwoJCQkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJICB9CgkJCQkJCQkJCQkJCSB9CgoJCQkJCQkJCQkJICAgfQoJCQkJCQkJCQkgfQoJCQkJCQkJCX0KCgkJCQkJCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZm9ydW1zX2xpc3QnXVskZm9ydW1bJ2lkJ10gLiAnX2YnXSA9ICRmb3J1bTsKCQkJCQkJCXVuc2V0KCRncm91cHMpOwoKCQkgICAgICAgICAgICAgfSAvLyBlbmQgZm9yZWFjaCAoJGZvcnVtcykKCQkJICB9IC8vIGVuZCAhZW1wdHkoJGZvcnVtc19jYWNoZSkKCgkJCQl1bnNldCgkU2VjQXJyKTsKCQkJCSRTZWNBcnIgPSAkUG93ZXJCQi0+REItPnNxbF9mcmVlX3Jlc3VsdCgkU2VjQXJyKTsKCQl9IC8vIGVuZCBmb3JlYWNoICgkY2F0cykKCgkJCSRQb3dlckJCLT50ZW1wbGF0ZS0+YXNzaWduKCdUb3BpY1ByZWZpeHNFZGl0JywkVG9waWNQcmVmaXhzRWRpdCk7CgogICAgICAgIC8vIEdldCBhbGwgZ3JvdXBzCgkJJEdyb3VwQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJJEdyb3VwQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCgkJJEdyb3VwQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJEdyb3VwQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoKCQkkR3JvdXBBcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCSRHcm91cEFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknaWQnOwoJCSRHcm91cEFyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkR3JvdXBzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEdyb3VwQXJyLCdncm91cCcpOwoKICAgICAgIGZvcmVhY2ggKCRHcm91cHMgYXMgJEdyb3VwKQoJCXsKICAgICAgICAgICAgIC8vIGZvcmVhY2ggbWFpbiBncm91cHMKCQkJJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydmb3JlYWNoJ11bJ2dyb3Vwc19saXN0J11bJEdyb3VwWydpZCddIC4gJ19tJ10gPSAkR3JvdXA7CgoJCQlAaW5jbHVkZSgiLi4vY2FjaGUvZ3JvdXBzX2NhY2hlL2dyb3Vwc19jYWNoZV8iLiRHcm91cFsnaWQnXS4iLnBocCIpOwoJCQlpZiAoIWVtcHR5KCRHcm91cHNfY2FjaGUpKQoJCQl7CgkJCQkJZm9yZWFjaCAoJEdyb3VwcyBhcyAkR3JvdXApCgkJCQkJewoJICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJEdyb3VwWydpZCddICwgJHNlbGVjdGVkX0dyb3VwcykpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkJICRHcm91cFsnc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kR3JvdXBbJ2lkJ10gLiAnIiBzZWxlY3RlZD0ic2VsZWN0ZWQiJyAgLiAkR3JvdXBbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCSAkR3JvdXBbJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJEdyb3VwWydpZCddIC4gJyInICAuICRHcm91cFsndGl0bGUnXSAuICc8L29wdGlvbj4nKTsKCQkJCQkJfQoKCQkJCQkgICRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydncm91cHNfbGlzdCddWyRHcm91cFsnaWQnXSAuICdfZiddID0gJEdyb3VwOwoJCQkJCSAgdW5zZXQoJGdyb3Vwcyk7CgoJCSAgICAgICAgICAgICB9IC8vIGVuZCBmb3JlYWNoICgkR3JvdXBzKQoJCQkgIH0KCgkJfSAvLyBlbmQgZm9yZWFjaCAoJEdyb3VwcykKCgoJCSRQb3dlckJCLT50ZW1wbGF0ZS0+ZGlzcGxheSgndG9waWNzX3ByZWZpeHNfZWRpdCcpOwoJfQoKCWZ1bmN0aW9uIF9FZGl0U3RhcnQoKQoJewoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJCWlmIChlbXB0eSgkUG93ZXJCQi0+X0dFVFsnaWQnXSkpCgkJCXsKCQkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJCX0KCiAgICAgIAkJJFRvcGljUHJlZml4c0VkaXRBcnIJCQkJPQlhcnJheSgpOwoJCSAgICAkVG9waWNQcmVmaXhzRWRpdEFyclsnd2hlcmUnXSAJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCQkkVG9waWNQcmVmaXhzRWRpdCA9ICRQb3dlckJCLT5jb3JlLT5HZXRJbmZvKCRUb3BpY1ByZWZpeHNFZGl0QXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCQkkZm9ydW1zID0gJHRoaXMtPmdldF9hY3RpdmVpbl9mb3J1bXMoKTsKCQkkZ3JvdXBzID0gJHRoaXMtPmdldF9hY3RpdmVpbl9ncm91cHMoKTsKCgkJaWYgKCAhICRmb3J1bXMgKQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1lvdV9tdXN0X3NlbGVjdF90aGVfZm9ydW0nXSk7CgkJfQoKCQkJJFRvcGljUHJlZml4c0FyciAJCQk9IAlhcnJheSgpOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddCT0JYXJyYXkoKTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X25hbWUnXSAgICAgICAgICAgID0gCSAkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9uYW1lJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hbGxvd2VkX2ZvcnVtcyddIAkJPSAJJGZvcnVtczsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2FsbG93ZWRfdXNlcmdyb3VwcyddIAkJPSAJJGdyb3VwczsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2JhY2tncm91bmQnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9iYWNrZ3JvdW5kJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF90ZXh0X2NvbG9yJ10gCSAgICAJPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfdGV4dF9jb2xvciddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfYm9yZGVyX2NvbG9yJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfYm9yZGVyX2NvbG9yJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9hY3RpdmEnXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X29yZGVyJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfb3JkZXInXTsKCQkgICAgJFRvcGljUHJlZml4c0Fyclsnd2hlcmUnXSAJCQkJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgkJCSR1cGRhdGUgPSAkUG93ZXJCQi0+Y29yZS0+VXBkYXRlKCRUb3BpY1ByZWZpeHNBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgkJaWYgKCR1cGRhdGUpCgkJewogICAgICAgICAgJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJZnVuY3Rpb24gX0RlbFN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJCX0KCQkJJERlbEFyciAJCQk9IAlhcnJheSgpOwoJCQkkRGVsQXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCQkJJGRlbCA9ICRQb3dlckJCLT5jb3JlLT5EZWxldGVkKCREZWxBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoJCWlmICgkZGVsKQoJCXsKICAgICAgICAgJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gR2V0IHRoZSBhY3RpdmUgaW4gZm9ydW1zCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZ2V0X2FjdGl2ZWluX2ZvcnVtcygpCiAgICB7CgoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJJGZvcnVtaWRzID0gYXJyYXkoKTsKCiAgICAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCS8vIENoZWNrIGZvciBhbiBhcnJheQogICAgCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJaWYgKCBpc19hcnJheSggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSApICApCiAgICAJewoKICAgIAkJaWYgKCBpbl9hcnJheSggJ2FsbCcsICRQb3dlckJCLT5fUE9TVFsnZm9ydW1zJ10gKSApCiAgICAJCXsKICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAkJCS8vIFNlYXJjaGluZyBhbGwgZm9ydW1zLi4KICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJCQlyZXR1cm4gJyonOwogICAgCQl9CiAgICAJCWVsc2UKICAgIAkJewoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gR28gbG9vcHkgbG9vCgkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkJZm9yZWFjaCggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSBhcyAkbCApCgkJCQl7CgoJCQkJCQkkZm9ydW1pZHNbXSA9IGludHZhbCgkbCk7CgkJCQl9CgoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gRG8gd2UgaGF2ZSBjYXRzPyBHaXZlICdlbSB0byBDaGFybGVzIQoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJCWlmICggY291bnQoICRmb3J1bWlkcyAgKSApCgkJCQl7CgkJCQkJZm9yZWFjaCggJGZvcnVtaWRzICBhcyAkZiApCgkJCQkJewoJCQkJCQlpZiAoIGlzX2FycmF5KCRmKSBhbmQgY291bnQoJGYpICkKCQkJCQkJewoJCQkJCQkJJGZvcnVtaWRzICA9IGFycmF5X21lcmdlKCAkZm9ydW1pZHMgLCAkZiApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBObyBmb3J1bXMgc2VsZWN0ZWQgLyB3ZSBoYXZlIGF2YWlsYWJsZQoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCQkJcmV0dXJuOwoJCQkJfQogICAgCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJLy8gTm90IGFuIGFycmF5Li4uCgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCWlmICgkUG93ZXJCQi0+X1BPU1RbJ2ZvcnVtcyddID09ICdhbGwnICkKCQkJewoJCQkJcmV0dXJuICcqJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmICggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSAhPSAiIiApCgkJCQl7CgkJCQkJJGwgPSBpbnR2YWwoJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSk7CgoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBTaW5nbGUgZm9ydW0KCQkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCQkJCQkJJGZvcnVtaWRzW10gPSBpbnR2YWwoJGwpOwoKCgkJCQkJCWlmICggaXNfYXJyYXkoJGYpIGFuZCBjb3VudCgkZikgKQoJCQkJCQl7CgkJCQkJCQkkZm9ydW1pZHMgID0gYXJyYXlfbWVyZ2UoICRmb3J1bWlkcyAsICRmICk7CgkJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGltcGxvZGUoICIsIiwgJGZvcnVtaWRzICk7CiAgICB9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gR2V0IHRoZSBhY3RpdmUgaW4gZ3JvdXBzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZ2V0X2FjdGl2ZWluX2dyb3VwcygpCiAgICB7CgoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJJGdyb3VwaWRzID0gYXJyYXkoKTsKCiAgICAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCS8vIENoZWNrIGZvciBhbiBhcnJheQogICAgCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJaWYgKCBpc19hcnJheSggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSApICApCiAgICAJewoKICAgIAkJaWYgKCBpbl9hcnJheSggJ2FsbCcsICRQb3dlckJCLT5fUE9TVFsnZ3JvdXBzJ10gKSApCiAgICAJCXsKICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAkJCS8vIFNlYXJjaGluZyBhbGwgZ3JvdXBzLi4KICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJCQlyZXR1cm4gJyonOwogICAgCQl9CiAgICAJCWVsc2UKICAgIAkJewoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gR28gbG9vcHkgbG9vCgkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkJZm9yZWFjaCggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSBhcyAkbCApCgkJCQl7CgoJCQkJCQkkZ3JvdXBpZHNbXSA9IGludHZhbCgkbCk7CgkJCQl9CgoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gRG8gd2UgaGF2ZSBjYXRzPyBHaXZlICdlbSB0byBDaGFybGVzIQoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJCWlmICggY291bnQoICRncm91cGlkcyAgKSApCgkJCQl7CgkJCQkJZm9yZWFjaCggJGdyb3VwaWRzICBhcyAkZiApCgkJCQkJewoJCQkJCQlpZiAoIGlzX2FycmF5KCRmKSBhbmQgY291bnQoJGYpICkKCQkJCQkJewoJCQkJCQkJJGdyb3VwaWRzICA9IGFycmF5X21lcmdlKCAkZ3JvdXBpZHMgLCAkZiApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBObyBncm91cHMgc2VsZWN0ZWQgLyB3ZSBoYXZlIGF2YWlsYWJsZQoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCQkJcmV0dXJuOwoJCQkJfQogICAgCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJLy8gTm90IGFuIGFycmF5Li4uCgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCWlmICgkUG93ZXJCQi0+X1BPU1RbJ2dyb3VwcyddID09ICdhbGwnICkKCQkJewoJCQkJcmV0dXJuICcqJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmICggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSAhPSAiIiApCgkJCQl7CgkJCQkJJGwgPSBpbnR2YWwoJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSk7CgoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBTaW5nbGUgZ3JvdXAKCQkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCQkJCQkJJGdyb3VwaWRzW10gPSBpbnR2YWwoJGwpOwoKCgkJCQkJCWlmICggaXNfYXJyYXkoJGYpIGFuZCBjb3VudCgkZikgKQoJCQkJCQl7CgkJCQkJCQkkZ3JvdXBpZHMgID0gYXJyYXlfbWVyZ2UoICRncm91cGlkcyAsICRmICk7CgkJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGltcGxvZGUoICIsIiwgJGdyb3VwaWRzICk7CiAgICB9CgoJZnVuY3Rpb24gX0NoYW5nZU9yZGVyKCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgogCQkkU2VjQXJyIAkJCQkJPSAJYXJyYXkoKTsKCQkkU2VjQXJyWydnZXRfZnJvbSddCQkJPQknZGInOwoJCSRTZWNBcnJbJ3Byb2MnXSAJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ3Byb2MnXVsnKiddIAkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCQkkU2VjQXJyWydvcmRlciddCQkJPQlhcnJheSgpOwoJCSRTZWNBcnJbJ29yZGVyJ11bJ2ZpZWxkJ10JPQkncHJlZml4X29yZGVyJzsKCQkkU2VjQXJyWydvcmRlciddWyd0eXBlJ10JPQknQVNDJzsKCgkJJFNlY0xpc3QgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU2VjQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQkkeCA9IDA7CgkJJHkgPSBzaXplb2YoJFNlY0xpc3QpOwoJCSRzID0gYXJyYXkoKTsKCgkJd2hpbGUgKCR4IDwgJHkpCgkJewoJCQkkbmFtZSA9ICdvcmRlci0nIC4gJFNlY0xpc3RbJHhdWydpZCddOwoKCQkJaWYgKCRTZWNMaXN0WyR4XVsnb3JkZXInXSAhPSAkUG93ZXJCQi0+X1BPU1RbJG5hbWVdKQoJCQl7CgkJCQkkVXBkYXRlQXJyIAkJCQkJCT0gCWFycmF5KCk7CgoJCQkJJFVwZGF0ZUFyclsnZmllbGQnXQkJIAkJPSAJYXJyYXkoKTsKCQkJCSRVcGRhdGVBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9vcmRlciddIAk9IAkkUG93ZXJCQi0+X1BPU1RbJG5hbWVdOwoKCQkJCSRVcGRhdGVBcnJbJ3doZXJlJ10gCQkJPQlhcnJheSgnaWQnLCRTZWNMaXN0WyR4XVsnaWQnXSk7CgoJCQkJJHVwZGF0ZSA9ICRQb3dlckJCLT5jb3JlLT5VcGRhdGUoJFVwZGF0ZUFyciwndG9waWNzX3ByZWZpeHMnKTsKCiAgICAgICAgICAgICAgJHNbJFNlY0xpc3RbJHhdWydpZCddXSA9ICgkdXBkYXRlKSA/ICd0cnVlJyA6ICdmYWxzZSc7CgoJCQl9CgoJCQkkeCArPSAxOwoJCX0KCgkJaWYgKGluX2FycmF5KCdmYWxzZScsJHMpKQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ2RpZF9ub3Rfc3VjY2VlZF90aGVfcHJvY2VzcyddKTsKCQl9CgkJZWxzZQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJZnVuY3Rpb24gX0FjdGl2ZVN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5lcnJvcigkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ19DT05GJ11bJ2xhbmcnXVsnVGhlX3JlcXVlc3RfaXNfbm90X3ZhbGlkJ10pOwoJCQl9CgoJCQkkVG9waWNQcmVmaXhzRWRpdEFycgkJCQk9CWFycmF5KCk7CgkJICAgICRUb3BpY1ByZWZpeHNFZGl0QXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCgkJCSRUb3BpY1ByZWZpeHNFZGl0ID0gJFBvd2VyQkItPmNvcmUtPkdldEluZm8oJFRvcGljUHJlZml4c0VkaXRBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoKCQlpZiAoISRUb3BpY1ByZWZpeHNFZGl0KQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQl9CgoJCSRQcmVmaXhzQXJyIAkJCT0gCWFycmF5KCk7CgkJJFByZWZpeHNBcnJbJ2ZpZWxkJ10JPQlhcnJheSgpOwoKCQkkUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2FjdGl2YSddIAkJICAgID0gICAgICAgJzEnOwoJCSRQcmVmaXhzQXJyWyd3aGVyZSddIAkJCQkgICAgPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCSR1cGRhdGUgPSAkUG93ZXJCQi0+Y29yZS0+VXBkYXRlKCRQcmVmaXhzQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQlpZiAoJHVwZGF0ZSkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPnJlZGlyZWN0KCdpbmRleC5waHA/cGFnZT10b3BpY3NfcHJlZml4cyZjb250cm9sPTEmbWFpbj0xJyk7CgkJfQoJfQoKCWZ1bmN0aW9uIF9Ob0FjdGl2ZVN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQkJaWYgKGVtcHR5KCRQb3dlckJCLT5fR0VUWydpZCddKSkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCQkJJFRvcGljUHJlZml4c0VkaXRBcnIJCQkJPQlhcnJheSgpOwoJCSAgICAkVG9waWNQcmVmaXhzRWRpdEFyclsnd2hlcmUnXSAJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCQkkVG9waWNQcmVmaXhzRWRpdCA9ICRQb3dlckJCLT5jb3JlLT5HZXRJbmZvKCRUb3BpY1ByZWZpeHNFZGl0QXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCgkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJfQoKCQkkUHJlZml4c0FyciAJCQk9IAlhcnJheSgpOwoJCSRQcmVmaXhzQXJyWydmaWVsZCddCT0JYXJyYXkoKTsKCgkJJFByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9ICAgICAgICcwJzsKCQkkUHJlZml4c0Fyclsnd2hlcmUnXSAJCQkJICAgID0gCWFycmF5KCdpZCcsJFBvd2VyQkItPl9HRVRbJ2lkJ10pOwoKCQkkdXBkYXRlID0gJFBvd2VyQkItPmNvcmUtPlVwZGF0ZSgkUHJlZml4c0FyciwndG9waWNzX3ByZWZpeHMnKTsKCgkJaWYgKCR1cGRhdGUpCgkJewoJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5yZWRpcmVjdCgnaW5kZXgucGhwP3BhZ2U9dG9waWNzX3ByZWZpeHMmY29udHJvbD0xJm1haW49MScpOwoJCX0KCgl9Cgp9Cgo/Pg== ?>

Did this file decode correctly?

Original Code

PD9waHAKCighZGVmaW5lZCgnSU5fUG93ZXJCQicpKSA/IGRpZSgpIDogJyc7CgpkZWZpbmUoJ0lOX0FETUlOJyx0cnVlKTsKCiRDQUxMX1NZU1RFTQkJCSAgICAgICAgPQlhcnJheSgpOwokQ0FMTF9TWVNURU1bJ1RPUElDTU9EJ10gICAgICAgICAgID0gICB0cnVlOwokQ0FMTF9TWVNURU1bJ1NFQ1RJT04nXSAgICAgICAgICAgID0gCXRydWU7CgpkZWZpbmUoJ0pBVkFTQ1JJUFRfUG93ZXJDb2RlJyx0cnVlKTsKCgoKZGVmaW5lKCdDTEFTU19OQU1FJywnUG93ZXJCQlRvcGljUHJlZml4cycpOwoKaW5jbHVkZSgnLi4vY29tbW9uLnBocCcpOwpjbGFzcyBQb3dlckJCVG9waWNQcmVmaXhzCnsKCWZ1bmN0aW9uIHJ1bigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKCQlpZiAoJFBvd2VyQkItPl9DT05GWydtZW1iZXJfcGVybWlzc2lvbiddKQoJCXsKCQkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCdoZWFkZXInKTsKCgkJCWlmICgkUG93ZXJCQi0+X0dFVFsnY29udHJvbCddKQoJCQl7CgkJCQlpZiAoJFBvd2VyQkItPl9HRVRbJ21haW4nXSkKCQkJCXsKCQkJCQkkdGhpcy0+X0NvbnRyb2xNYWluKCk7CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkUG93ZXJCQi0+X0dFVFsnYWRkJ10pCgkJCXsKICAgICAgICAgICAgICAJaWYgKCRQb3dlckJCLT5fR0VUWydtYWluJ10pCgkJCQl7CgkJCQkJJHRoaXMtPl9BZGRUb3BpY1ByZWZpeHNNYWluKCk7CgkJCQl9CiAgICAgICAgICAgICAgICBlbHNlaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fQWRkVG9waWNQcmVmaXhzU3RhcnQoKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRQb3dlckJCLT5fR0VUWydlZGl0J10pCgkJCXsKCQkJCWlmICgkUG93ZXJCQi0+X0dFVFsnbWFpbiddKQoJCQkJewoJCQkJCSR0aGlzLT5fRWRpdE1haW4oKTsKCQkJCX0KCQkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ3N0YXJ0J10pCgkJCQl7CgkJCQkJJHRoaXMtPl9FZGl0U3RhcnQoKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRQb3dlckJCLT5fR0VUWydkZWwnXSkKCQkJewogICAgICAgICAgICAgICAgaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fRGVsU3RhcnQoKTsKCQkJCX0KCQkJfQogICAgICAgICAgIGVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ2FjdGl2ZSddKQoJCQl7CiAgICAgICAgICAgICAgICBpZiAoJFBvd2VyQkItPl9HRVRbJ3N0YXJ0J10pCgkJCQl7CgkJCQkJJHRoaXMtPl9BY3RpdmVTdGFydCgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ25vX2FjdGl2ZSddKQoJCQl7CgogICAgICAgICAgICAgICAgaWYgKCRQb3dlckJCLT5fR0VUWydzdGFydCddKQoJCQkJewoJCQkJCSR0aGlzLT5fTm9BY3RpdmVTdGFydCgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJFBvd2VyQkItPl9HRVRbJ2NoYW5nZV9vcmRlciddKQoJCQl7CgkJCQkkdGhpcy0+X0NoYW5nZU9yZGVyKCk7CgkJCX0KCQkkUG93ZXJCQi0+dGVtcGxhdGUtPmRpc3BsYXkoJ2Zvb3RlcicpOwoJCX0KCgl9CgoKCS8qKgoJICogYWRkIFRvcGljUHJlZml4cyBNYWluCgkgKi8KCglmdW5jdGlvbiBfQWRkVG9waWNQcmVmaXhzTWFpbigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoJCS8vLy8vLy8vLy8KCgkJJFNlY0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkU2VjQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJFNlY0FyclsncHJvYyddWycqJ10gCQkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCgkJJFNlY0Fyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJFNlY0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJJFNlY0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkU2VjQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkkU2VjQXJyWyd3aGVyZSddWzBdWyduYW1lJ10JCT0gCSdwYXJlbnQnOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJzAnOwoKCQkvLyBHZXQgbWFpbiBzZWN0aW9ucwoJCSRjYXRzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJFNlY0Fyciwnc2VjdGlvbicpOwoKIAkJLy8vLy8vLy8vLy8vCgoJCS8vIExvb3AgdG8gcmVhZCB0aGUgaW5mb3JtYXRpb24gb2YgbWFpbiBzZWN0aW9ucwoJCWZvcmVhY2ggKCRjYXRzIGFzICRjYXQpCgkJewogICAgICAgICAgICAgLy8gZm9yZWFjaCBtYWluIHNlY3Rpb25zCgkJCSRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydmb3J1bXNfbGlzdCddWyRjYXRbJ2lkJ10gLiAnX20nXSA9ICRjYXQ7CgoJCQlpZigkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQl7CgkJCUBpbmNsdWRlKCIuLi9jYWNoZS9mb3J1bXNfY2FjaGUvZm9ydW1zX2NhY2hlXyIuJGNhdFsnaWQnXS4iLnBocCIpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkkZm9ydW1zX2NhY2hlID0gJGNhdFsnZm9ydW1zX2NhY2hlJ107CgkJCX0KCQkJaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCQkJewogICAgICAgICAgICAgICAJJEZvcnVtQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoJCQkJJEZvcnVtQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgkJCQkkRm9ydW1BcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdzb3J0JzsKCQkJCSRGb3J1bUFyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoJCQkJJEZvcnVtQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXVswXVsnbmFtZSddCQk9IAkncGFyZW50JzsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXVswXVsnb3BlciddCQk9IAknPSc7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJGNhdFsnaWQnXTsKCQkJCSRmb3J1bXMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkRm9ydW1BcnIsJ3NlY3Rpb24nKTsKCgkJCQkJZm9yZWFjaCAoJGZvcnVtcyBhcyAkZm9ydW0pCgkJCQkJewoJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKCQkJCQkJCSRmb3J1bVsnaXNfc3ViJ10gCT0gCTA7CgkJCQkJCQkkZm9ydW1bJ3N1YiddCQk9CScnOwoKCQkJCQkJCWlmICgkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQkJCQkJewoJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kZm9ydW1bJ2lkJ10uIi5waHAiKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkZm9ydW1bJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkgICAgICAgICAgICAgICAJJFN1YkFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJJFN1YkFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkkU3ViQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJJFN1YkFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCSRTdWJBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJJFN1YkFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkkU3ViQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRmb3J1bVsnaWQnXTsKCQkJCQkJCQkJJHN1YnMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3ViQXJyLCdzZWN0aW9uJyk7CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzIGFzICRzdWIpCgkJCQkJCQkJCXsKCQkJCQkJCQkJICAgaWYgKCRmb3J1bVsnaWQnXSA9PSAkc3ViWydwYXJlbnQnXSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWInXSkKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWInXSA9IDE7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJICRmb3J1bVsnc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kc3ViWydpZCddIC4gJyI+LS0tLSAnICAuICRzdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgoJCQkJCQkJCQkJICB9CgoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8KCgkJCQkJCQkJCQkJCQkkZm9ydW1bJ2lzX3N1Yl9zdWInXSAJPSAJMDsKCQkJCQkJCQkJCQkJCSRmb3J1bVsnc3ViX3N1YiddCQk9CScnOwoKCQkJCQkJCQkJCQlpZiAoJFBvd2VyQkItPl9DT05GWydmaWxlc19mb3J1bXNfQ2FjaGUnXSkKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kc3ViWydpZCddLiIucGhwIik7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJJGZvcnVtc19jYWNoZSA9ICRzdWJbJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJCQkJCX0KCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGZvcnVtc19jYWNoZSkpCgkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgoJCQkJCQkJICAgICAgICAgICAgICAgCSRTdWJzQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdzb3J0JzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoJCQkJCQkJCQkJCSRTdWJzQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXVswXVsnbmFtZSddCQk9IAkncGFyZW50JzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXVswXVsnb3BlciddCQk9IAknPSc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJHN1YlsnaWQnXTsKCQkJCQkJCQkJCQkkc3Vic19zdWIgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3Vic0Fyciwnc2VjdGlvbicpOwoJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzX3N1YiBhcyAkc3ViX3N1YikKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkgICBpZiAoJHN1YlsnaWQnXSA9PSAkc3ViX3N1YlsncGFyZW50J10pCgkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgoJCQkJCQkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWJfc3ViJ10pCgkJCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJCQkkZm9ydW1bJ2lzX3N1Yl9zdWInXSA9IDE7CgkJCQkJCQkJCQkJCQkJCQkJfQoKCQkJCQkJCQkJCQkJCQkJICRmb3J1bVsnc3ViX3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1Yl9zdWJbJ2lkJ10gLiAnIj4tLS0tICcgIC4gJHN1Yl9zdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCQkJCQkJCQkgIH0KCQkJCQkJCQkJCQkJIH0KCgkJCQkJCQkJCQkgICB9CgkJCQkJCQkJCSB9CgkJCQkJCQkJfQoKCQkJCQkJCSRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydmb3J1bXNfbGlzdCddWyRmb3J1bVsnaWQnXSAuICdfZiddID0gJGZvcnVtOwoJCQkJCQkJdW5zZXQoJGdyb3Vwcyk7CgoJCSAgICAgICAgICAgICB9IC8vIGVuZCBmb3JlYWNoICgkZm9ydW1zKQoJCQkgIH0gLy8gZW5kICFlbXB0eSgkZm9ydW1zX2NhY2hlKQoKCQkJCXVuc2V0KCRTZWNBcnIpOwoJCQkJJFNlY0FyciA9ICRQb3dlckJCLT5EQi0+c3FsX2ZyZWVfcmVzdWx0KCRTZWNBcnIpOwoJCX0gLy8gZW5kIGZvcmVhY2ggKCRjYXRzKQoKCiAgICAgICAgLy8gR2V0IGFsbCBncm91cHMKCQkkR3JvdXBBcnIgCQkJCQkJPSAJYXJyYXkoKTsKCQkkR3JvdXBBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkR3JvdXBBcnJbJ3Byb2MnXSAJCQkJPSAJYXJyYXkoKTsKCQkkR3JvdXBBcnJbJ3Byb2MnXVsnKiddIAkJCT0gCWFycmF5KCdtZXRob2QnPT4nY2xlYW4nLCdwYXJhbSc9PidodG1sJyk7CgoJCSRHcm91cEFyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJEdyb3VwQXJyWydvcmRlciddWydmaWVsZCddCQk9CSdpZCc7CgkJJEdyb3VwQXJyWydvcmRlciddWyd0eXBlJ10JCT0JJ0FTQyc7CgoKCQkkZ3JvdXBzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEdyb3VwQXJyLCdncm91cCcpOwogCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZ3JvdXBfbGlzdCddID0gJGdyb3VwczsKCgkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCd0b3BpY3NfcHJlZml4c19hZGQnKTsKCiAgICB9CgoJLyoqCgkgKiBhZGQgVG9waWNQcmVmaXhzIFN0YXJ0CgkgKi8KCWZ1bmN0aW9uIF9BZGRUb3BpY1ByZWZpeHNTdGFydCgpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfbmFtZSddKSkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydQbGVhc2VfZmlsbF9pbl9hbGxfdGhlX2luZm9ybWF0aW9uJ10pOwoJCX0KCgkJJGZvcnVtcyA9ICR0aGlzLT5nZXRfYWN0aXZlaW5fZm9ydW1zKCk7CgkJJGdyb3VwcyA9ICR0aGlzLT5nZXRfYWN0aXZlaW5fZ3JvdXBzKCk7CgoJCWlmICggISAkZm9ydW1zICkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydZb3VfbXVzdF9zZWxlY3RfdGhlX2ZvcnVtJ10pOwoJCX0KCgoJCS8vLy8vLy8vLy8KCgkJJG9yZGVyID0gMDsKCgkJaWYgKCRQb3dlckJCLT5fUE9TVFsnb3JkZXJfdHlwZSddID09ICdhdXRvJykKCQl7CiRPcmRlcnRBcnIgPSAkUG93ZXJCQi0+REItPnNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSAiLiRQb3dlckJCLT5wcmVmaXguInRvcGljc19wcmVmaXhzIE9SREVSIEJZIHByZWZpeF9vcmRlciBERVNDIik7CiRPcmRlclByZWZpeCAgID0gJFBvd2VyQkItPkRCLT5zcWxfZmV0Y2hfYXJyYXkoJE9yZGVydEFycik7CgoJCQkvLyBObyB0b3BpY3MgcHJlZml4CgkJCWlmICghJE9yZGVyUHJlZml4KQoJCQl7CgkJCQkkb3JkZXIgPSAxOwoJCQl9CgkJCS8vIFRoZXJlIGlzIGEgdG9waWNzIHByZWZpeAoJCQllbHNlCgkJCXsKCQkJCSRvcmRlciA9ICRPcmRlclByZWZpeFsncHJlZml4X29yZGVyJ10gKyAxOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkgCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9QT1NUWydvcmRlcl90eXBlJ10gPT0gJ21hbnVhbCcgYW5kIGVtcHR5KCRQb3dlckJCLT5fUE9TVFsncHJlZml4X29yZGVyJ10pKSkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1BsZWFzZV9maWxsX2luX2FsbF90aGVfaW5mb3JtYXRpb24nXSk7CgkJCX0KCgkJCSRvcmRlciA9ICRQb3dlckJCLT5fUE9TVFsncHJlZml4X29yZGVyJ107CgkJfQoKCQkvLy8vLy8vLy8vCgoJCQkkVG9waWNQcmVmaXhzQXJyIAkJCT0gCWFycmF5KCk7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ10JPQlhcnJheSgpOwoKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X25hbWUnXSAgICAgICAgICAgID0gCSAkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9uYW1lJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9iYWNrZ3JvdW5kJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfYmFja2dyb3VuZCddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfdGV4dF9jb2xvciddIAkgICAgCT0gCSRQb3dlckJCLT5fUE9TVFsncHJlZml4X3RleHRfY29sb3InXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2JvcmRlcl9jb2xvciddIAkJICAgID0gCSRQb3dlckJCLT5fUE9TVFsncHJlZml4X2JvcmRlcl9jb2xvciddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfYWxsb3dlZF9mb3J1bXMnXSAJCT0gCSRmb3J1bXM7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hbGxvd2VkX3VzZXJncm91cHMnXSAJCT0gCSRncm91cHM7CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9hY3RpdmEnXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X29yZGVyJ10gCQkgICAgPSAJJG9yZGVyOwoKCQkJJGluc2VydCA9ICRQb3dlckJCLT5jb3JlLT5JbnNlcnQoJFRvcGljUHJlZml4c0FyciwndG9waWNzX3ByZWZpeHMnKTsKCgoJCQlpZiAoJGluc2VydCkKCQkJewogICAgICAgICAgICAgICAkUG93ZXJCQi0+ZnVuY3Rpb25zLT5yZWRpcmVjdCgnaW5kZXgucGhwP3BhZ2U9dG9waWNzX3ByZWZpeHMmY29udHJvbD0xJm1haW49MScpOwoJCQl9CgoJfQoKCWZ1bmN0aW9uIF9Db250cm9sTWFpbigpCgl7CgkJZ2xvYmFsICRQb3dlckJCOwoKICAgICAgICAvLyBzaG93IFRvcGljUHJlZml4cyBMaXN0CgkJJFRvcGljUHJlZml4c0FyciAJCQkJCT0gCWFycmF5KCk7CgkJJFRvcGljUHJlZml4c0Fyclsnb3JkZXInXQkJCT0JYXJyYXkoKTsKCQkkVG9waWNQcmVmaXhzQXJyWydvcmRlciddWydmaWVsZCddCT0JJ3ByZWZpeF9vcmRlcic7CgkJJFRvcGljUHJlZml4c0Fyclsnb3JkZXInXVsndHlwZSddCT0JJ0FTQyc7CgkJJFRvcGljUHJlZml4c0FyclsncHJvYyddIAkJCT0gCWFycmF5KCk7CgkJJFRvcGljUHJlZml4c0FyclsncHJvYyddWycqJ10gCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoKCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ3doaWxlJ11bJ1RvcGljc1ByZWZpeHNMaXN0J10gPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkVG9waWNQcmVmaXhzQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCgkJJFBvd2VyQkItPnRlbXBsYXRlLT5kaXNwbGF5KCd0b3BpY3NfcHJlZml4c19tYWluJyk7Cgl9CgoKCgoJZnVuY3Rpb24gX0VkaXRNYWluKCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5lcnJvcigkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ19DT05GJ11bJ2xhbmcnXVsnVGhlX3JlcXVlc3RfaXNfbm90X3ZhbGlkJ10pOwoJCQl9CgoJCQkkVG9waWNQcmVmaXhzRWRpdEFycgkJCQk9CWFycmF5KCk7CgkJICAgICRUb3BpY1ByZWZpeHNFZGl0QXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCgkJCSRUb3BpY1ByZWZpeHNFZGl0ID0gJFBvd2VyQkItPmNvcmUtPkdldEluZm8oJFRvcGljUHJlZml4c0VkaXRBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoKCQkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCiAgICAgICAgICAgJHNlbGVjdGVkX2ZvcnVtcyA9IGV4cGxvZGUoJywnLCAkVG9waWNQcmVmaXhzRWRpdFsncHJlZml4X2FsbG93ZWRfZm9ydW1zJ10pOwogICAgICAgICAgICRzZWxlY3RlZF9ncm91cHMgPSBleHBsb2RlKCcsJywgJFRvcGljUHJlZml4c0VkaXRbJ3ByZWZpeF9hbGxvd2VkX3VzZXJncm91cHMnXSk7CgoJCS8vLy8vLy8vLy8KCgkJJFNlY0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ2dldF9mcm9tJ10JCQkJPQknZGInOwoKCQkkU2VjQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJFNlY0FyclsncHJvYyddWycqJ10gCQkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCgkJJFNlY0Fyclsnb3JkZXInXQkJCQk9CWFycmF5KCk7CgkJJFNlY0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJJFNlY0Fyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkU2VjQXJyWyd3aGVyZSddCQkJCT0JYXJyYXkoKTsKCQkkU2VjQXJyWyd3aGVyZSddWzBdWyduYW1lJ10JCT0gCSdwYXJlbnQnOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCSRTZWNBcnJbJ3doZXJlJ11bMF1bJ3ZhbHVlJ10JPSAJJzAnOwoKCQkvLyBHZXQgbWFpbiBzZWN0aW9ucwoJCSRjYXRzID0gJFBvd2VyQkItPnNlY3Rpb24tPkdldFNlY3Rpb25zTGlzdCgkU2VjQXJyKTsKCiAJCS8vLy8vLy8vLy8vLwoKCQkvLyBMb29wIHRvIHJlYWQgdGhlIGluZm9ybWF0aW9uIG9mIG1haW4gc2VjdGlvbnMKCQlmb3JlYWNoICgkY2F0cyBhcyAkY2F0KQoJCXsKICAgICAgICAgICAgIC8vIGZvcmVhY2ggbWFpbiBzZWN0aW9ucwoJCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZm9ydW1zX2xpc3QnXVskY2F0WydpZCddIC4gJ19tJ10gPSAkY2F0OwoKCQkJaWYoJFBvd2VyQkItPl9DT05GWydmaWxlc19mb3J1bXNfQ2FjaGUnXSkKCQkJewoJCQlAaW5jbHVkZSgiLi4vY2FjaGUvZm9ydW1zX2NhY2hlL2ZvcnVtc19jYWNoZV8iLiRjYXRbJ2lkJ10uIi5waHAiKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJJGZvcnVtc19jYWNoZSA9ICRjYXRbJ2ZvcnVtc19jYWNoZSddOwoJCQl9CgkJCWlmICghZW1wdHkoJGZvcnVtc19jYWNoZSkpCgkJCXsKICAgICAgICAgICAgICAgCSRGb3J1bUFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCSRGb3J1bUFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJJEZvcnVtQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJJEZvcnVtQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCSRGb3J1bUFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkkRm9ydW1BcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCSRGb3J1bUFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkkRm9ydW1BcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJJEZvcnVtQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRjYXRbJ2lkJ107CgkJCQkkZm9ydW1zID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEZvcnVtQXJyLCdzZWN0aW9uJyk7CgoJCQkJCWZvcmVhY2ggKCRmb3J1bXMgYXMgJGZvcnVtKQoJCQkJCXsKCQkJCQkJCSRmb3J1bVsnaXNfc3ViJ10gCT0gCTA7CgkJCQkJCQkkZm9ydW1bJ3N1YiddCQk9CScnOwoKCQkJCQkJCWlmICgkUG93ZXJCQi0+X0NPTkZbJ2ZpbGVzX2ZvcnVtc19DYWNoZSddKQoJCQkJCQkJewoJCQkJCQkJQGluY2x1ZGUoIi4uL2NhY2hlL2ZvcnVtc19jYWNoZS9mb3J1bXNfY2FjaGVfIi4kZm9ydW1bJ2lkJ10uIi5waHAiKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkZm9ydW1bJ2ZvcnVtc19jYWNoZSddOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkgICAgICAgICAgICAgICAJJFN1YkFyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJJFN1YkFyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkkU3ViQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkkU3ViQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJJFN1YkFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCSRTdWJBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJJFN1YkFyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCSRTdWJBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkkU3ViQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRmb3J1bVsnaWQnXTsKCQkJCQkJCQkJJHN1YnMgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU3ViQXJyLCdzZWN0aW9uJyk7CgoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJzIGFzICRzdWIpCgkJCQkJCQkJCXsKCQkJCQkJCQkJICAgaWYgKCRmb3J1bVsnaWQnXSA9PSAkc3ViWydwYXJlbnQnXSkKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgkJCQkJCQkJCQkJCWlmICghJGZvcnVtWydpc19zdWInXSkKCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWInXSA9IDE7CgkJCQkJCQkJCQkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgICAgICBpZiAoaW5fYXJyYXkoJHN1YlsnaWQnXSAsICRzZWxlY3RlZF9mb3J1bXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgICAgIHsKCQkJCQkJCQkJCQkkZm9ydW1bJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1YlsnaWQnXSAuICciIHNlbGVjdGVkPSJzZWxlY3RlZCIgPi0tLScgIC4gJHN1YlsndGl0bGUnXSAuICc8L29wdGlvbj4nKTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkZm9ydW1bJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1YlsnaWQnXSAuICciID4tLS0nICAuICRzdWJbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJICB9CgkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWJfc3ViJ10gCT0gCTA7CgkJCQkJCQkJCQkJJGZvcnVtWydzdWJfc3ViJ10JCT0JJyc7CgkJCQkJCQkJCQkJaWYgKCRQb3dlckJCLT5fQ09ORlsnZmlsZXNfZm9ydW1zX0NhY2hlJ10pCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCUBpbmNsdWRlKCIuLi9jYWNoZS9mb3J1bXNfY2FjaGUvZm9ydW1zX2NhY2hlXyIuJHN1YlsnaWQnXS4iLnBocCIpOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQllbHNlCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCSRmb3J1bXNfY2FjaGUgPSAkc3ViWydmb3J1bXNfY2FjaGUnXTsKCQkJCQkJCQkJCQl9CgoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZm9ydW1zX2NhY2hlKSkKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkJCQkJCQkkU3Vic0FyciAJCQkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCQkJCQkJCQkJCQkkU3Vic0FyclsncHJvYyddIAkJCQk9IAlhcnJheSgpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoJCQkJCQkJCQkJCSRTdWJzQXJyWydvcmRlciddCQkJCT0JYXJyYXkoKTsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnb3JkZXInXVsnZmllbGQnXQkJPQknc29ydCc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ29yZGVyJ11bJ3R5cGUnXQkJPQknQVNDJzsKCQkJCQkJCQkJCQkkU3Vic0Fyclsnd2hlcmUnXQkJCQk9CWFycmF5KCk7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ25hbWUnXQkJPSAJJ3BhcmVudCc7CgkJCQkJCQkJCQkJJFN1YnNBcnJbJ3doZXJlJ11bMF1bJ29wZXInXQkJPSAJJz0nOwoJCQkJCQkJCQkJCSRTdWJzQXJyWyd3aGVyZSddWzBdWyd2YWx1ZSddCT0gCSRzdWJbJ2lkJ107CgkJCQkJCQkJCQkJJHN1YnNfc3ViID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJFN1YnNBcnIsJ3NlY3Rpb24nKTsKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3Vic19zdWIgYXMgJHN1Yl9zdWIpCgkJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkJICAgaWYgKCRzdWJbJ2lkJ10gPT0gJHN1Yl9zdWJbJ3BhcmVudCddKQoJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKCQkJCQkJCQkJCQkJCQkJCQlpZiAoISRmb3J1bVsnaXNfc3ViX3N1YiddKQoJCQkJCQkJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkJCQkJCQkJJGZvcnVtWydpc19zdWJfc3ViJ10gPSAxOwoJCQkJCQkJCQkJCQkJCQkJCX0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHN1Yl9zdWJbJ2lkJ10gLCAkc2VsZWN0ZWRfZm9ydW1zKSkKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgICAgIHsKCQkJCQkJCQkJCQkJCQkJCSRmb3J1bVsnc3ViX3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJHN1Yl9zdWJbJ2lkJ10gLiAnIiBzZWxlY3RlZD0ic2VsZWN0ZWQiID4tLS0nICAuICRzdWJfc3ViWyd0aXRsZSddIC4gJzwvb3B0aW9uPicpOwoJCQkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQkJCQkJJGZvcnVtWydzdWJfc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kc3ViX3N1YlsnaWQnXSAuICciID4tLS0nICAuICRzdWJfc3ViWyd0aXRsZSddIC4gJzwvb3B0aW9uPicpOwoJCQkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJICB9CgkJCQkJCQkJCQkJCSB9CgoJCQkJCQkJCQkJICAgfQoJCQkJCQkJCQkgfQoJCQkJCQkJCX0KCgkJCQkJCQkkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ2ZvcmVhY2gnXVsnZm9ydW1zX2xpc3QnXVskZm9ydW1bJ2lkJ10gLiAnX2YnXSA9ICRmb3J1bTsKCQkJCQkJCXVuc2V0KCRncm91cHMpOwoKCQkgICAgICAgICAgICAgfSAvLyBlbmQgZm9yZWFjaCAoJGZvcnVtcykKCQkJICB9IC8vIGVuZCAhZW1wdHkoJGZvcnVtc19jYWNoZSkKCgkJCQl1bnNldCgkU2VjQXJyKTsKCQkJCSRTZWNBcnIgPSAkUG93ZXJCQi0+REItPnNxbF9mcmVlX3Jlc3VsdCgkU2VjQXJyKTsKCQl9IC8vIGVuZCBmb3JlYWNoICgkY2F0cykKCgkJCSRQb3dlckJCLT50ZW1wbGF0ZS0+YXNzaWduKCdUb3BpY1ByZWZpeHNFZGl0JywkVG9waWNQcmVmaXhzRWRpdCk7CgogICAgICAgIC8vIEdldCBhbGwgZ3JvdXBzCgkJJEdyb3VwQXJyIAkJCQkJCT0gCWFycmF5KCk7CgkJJEdyb3VwQXJyWydnZXRfZnJvbSddCQkJCT0JJ2RiJzsKCgkJJEdyb3VwQXJyWydwcm9jJ10gCQkJCT0gCWFycmF5KCk7CgkJJEdyb3VwQXJyWydwcm9jJ11bJyonXSAJCQk9IAlhcnJheSgnbWV0aG9kJz0+J2NsZWFuJywncGFyYW0nPT4naHRtbCcpOwoKCQkkR3JvdXBBcnJbJ29yZGVyJ10JCQkJPQlhcnJheSgpOwoJCSRHcm91cEFyclsnb3JkZXInXVsnZmllbGQnXQkJPQknaWQnOwoJCSRHcm91cEFyclsnb3JkZXInXVsndHlwZSddCQk9CSdBU0MnOwoKCQkkR3JvdXBzID0gJFBvd2VyQkItPmNvcmUtPkdldExpc3QoJEdyb3VwQXJyLCdncm91cCcpOwoKICAgICAgIGZvcmVhY2ggKCRHcm91cHMgYXMgJEdyb3VwKQoJCXsKICAgICAgICAgICAgIC8vIGZvcmVhY2ggbWFpbiBncm91cHMKCQkJJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydmb3JlYWNoJ11bJ2dyb3Vwc19saXN0J11bJEdyb3VwWydpZCddIC4gJ19tJ10gPSAkR3JvdXA7CgoJCQlAaW5jbHVkZSgiLi4vY2FjaGUvZ3JvdXBzX2NhY2hlL2dyb3Vwc19jYWNoZV8iLiRHcm91cFsnaWQnXS4iLnBocCIpOwoJCQlpZiAoIWVtcHR5KCRHcm91cHNfY2FjaGUpKQoJCQl7CgkJCQkJZm9yZWFjaCAoJEdyb3VwcyBhcyAkR3JvdXApCgkJCQkJewoJICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJEdyb3VwWydpZCddICwgJHNlbGVjdGVkX0dyb3VwcykpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKCQkJCQkJICRHcm91cFsnc3ViJ10gLj0gKCc8b3B0aW9uIHZhbHVlPSInIC4kR3JvdXBbJ2lkJ10gLiAnIiBzZWxlY3RlZD0ic2VsZWN0ZWQiJyAgLiAkR3JvdXBbJ3RpdGxlJ10gLiAnPC9vcHRpb24+Jyk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCSAkR3JvdXBbJ3N1YiddIC49ICgnPG9wdGlvbiB2YWx1ZT0iJyAuJEdyb3VwWydpZCddIC4gJyInICAuICRHcm91cFsndGl0bGUnXSAuICc8L29wdGlvbj4nKTsKCQkJCQkJfQoKCQkJCQkgICRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnZm9yZWFjaCddWydncm91cHNfbGlzdCddWyRHcm91cFsnaWQnXSAuICdfZiddID0gJEdyb3VwOwoJCQkJCSAgdW5zZXQoJGdyb3Vwcyk7CgoJCSAgICAgICAgICAgICB9IC8vIGVuZCBmb3JlYWNoICgkR3JvdXBzKQoJCQkgIH0KCgkJfSAvLyBlbmQgZm9yZWFjaCAoJEdyb3VwcykKCgoJCSRQb3dlckJCLT50ZW1wbGF0ZS0+ZGlzcGxheSgndG9waWNzX3ByZWZpeHNfZWRpdCcpOwoJfQoKCWZ1bmN0aW9uIF9FZGl0U3RhcnQoKQoJewoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJCWlmIChlbXB0eSgkUG93ZXJCQi0+X0dFVFsnaWQnXSkpCgkJCXsKCQkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJCX0KCiAgICAgIAkJJFRvcGljUHJlZml4c0VkaXRBcnIJCQkJPQlhcnJheSgpOwoJCSAgICAkVG9waWNQcmVmaXhzRWRpdEFyclsnd2hlcmUnXSAJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCQkkVG9waWNQcmVmaXhzRWRpdCA9ICRQb3dlckJCLT5jb3JlLT5HZXRJbmZvKCRUb3BpY1ByZWZpeHNFZGl0QXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCQkkZm9ydW1zID0gJHRoaXMtPmdldF9hY3RpdmVpbl9mb3J1bXMoKTsKCQkkZ3JvdXBzID0gJHRoaXMtPmdldF9hY3RpdmVpbl9ncm91cHMoKTsKCgkJaWYgKCAhICRmb3J1bXMgKQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1lvdV9tdXN0X3NlbGVjdF90aGVfZm9ydW0nXSk7CgkJfQoKCQkJJFRvcGljUHJlZml4c0FyciAJCQk9IAlhcnJheSgpOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddCT0JYXJyYXkoKTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X25hbWUnXSAgICAgICAgICAgID0gCSAkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9uYW1lJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hbGxvd2VkX2ZvcnVtcyddIAkJPSAJJGZvcnVtczsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2FsbG93ZWRfdXNlcmdyb3VwcyddIAkJPSAJJGdyb3VwczsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2JhY2tncm91bmQnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9iYWNrZ3JvdW5kJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF90ZXh0X2NvbG9yJ10gCSAgICAJPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfdGV4dF9jb2xvciddOwoJCQkkVG9waWNQcmVmaXhzQXJyWydmaWVsZCddWydwcmVmaXhfYm9yZGVyX2NvbG9yJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfYm9yZGVyX2NvbG9yJ107CgkJCSRUb3BpY1ByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9IAkkUG93ZXJCQi0+X1BPU1RbJ3ByZWZpeF9hY3RpdmEnXTsKCQkJJFRvcGljUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X29yZGVyJ10gCQkgICAgPSAJJFBvd2VyQkItPl9QT1NUWydwcmVmaXhfb3JkZXInXTsKCQkgICAgJFRvcGljUHJlZml4c0Fyclsnd2hlcmUnXSAJCQkJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgkJCSR1cGRhdGUgPSAkUG93ZXJCQi0+Y29yZS0+VXBkYXRlKCRUb3BpY1ByZWZpeHNBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgkJaWYgKCR1cGRhdGUpCgkJewogICAgICAgICAgJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJZnVuY3Rpb24gX0RlbFN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJCX0KCQkJJERlbEFyciAJCQk9IAlhcnJheSgpOwoJCQkkRGVsQXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCQkJJGRlbCA9ICRQb3dlckJCLT5jb3JlLT5EZWxldGVkKCREZWxBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoJCWlmICgkZGVsKQoJCXsKICAgICAgICAgJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gR2V0IHRoZSBhY3RpdmUgaW4gZm9ydW1zCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZ2V0X2FjdGl2ZWluX2ZvcnVtcygpCiAgICB7CgoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJJGZvcnVtaWRzID0gYXJyYXkoKTsKCiAgICAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCS8vIENoZWNrIGZvciBhbiBhcnJheQogICAgCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJaWYgKCBpc19hcnJheSggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSApICApCiAgICAJewoKICAgIAkJaWYgKCBpbl9hcnJheSggJ2FsbCcsICRQb3dlckJCLT5fUE9TVFsnZm9ydW1zJ10gKSApCiAgICAJCXsKICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAkJCS8vIFNlYXJjaGluZyBhbGwgZm9ydW1zLi4KICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJCQlyZXR1cm4gJyonOwogICAgCQl9CiAgICAJCWVsc2UKICAgIAkJewoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gR28gbG9vcHkgbG9vCgkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkJZm9yZWFjaCggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSBhcyAkbCApCgkJCQl7CgoJCQkJCQkkZm9ydW1pZHNbXSA9IGludHZhbCgkbCk7CgkJCQl9CgoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gRG8gd2UgaGF2ZSBjYXRzPyBHaXZlICdlbSB0byBDaGFybGVzIQoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJCWlmICggY291bnQoICRmb3J1bWlkcyAgKSApCgkJCQl7CgkJCQkJZm9yZWFjaCggJGZvcnVtaWRzICBhcyAkZiApCgkJCQkJewoJCQkJCQlpZiAoIGlzX2FycmF5KCRmKSBhbmQgY291bnQoJGYpICkKCQkJCQkJewoJCQkJCQkJJGZvcnVtaWRzICA9IGFycmF5X21lcmdlKCAkZm9ydW1pZHMgLCAkZiApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBObyBmb3J1bXMgc2VsZWN0ZWQgLyB3ZSBoYXZlIGF2YWlsYWJsZQoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCQkJcmV0dXJuOwoJCQkJfQogICAgCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJLy8gTm90IGFuIGFycmF5Li4uCgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCWlmICgkUG93ZXJCQi0+X1BPU1RbJ2ZvcnVtcyddID09ICdhbGwnICkKCQkJewoJCQkJcmV0dXJuICcqJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmICggJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSAhPSAiIiApCgkJCQl7CgkJCQkJJGwgPSBpbnR2YWwoJFBvd2VyQkItPl9QT1NUWydmb3J1bXMnXSk7CgoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBTaW5nbGUgZm9ydW0KCQkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCQkJCQkJJGZvcnVtaWRzW10gPSBpbnR2YWwoJGwpOwoKCgkJCQkJCWlmICggaXNfYXJyYXkoJGYpIGFuZCBjb3VudCgkZikgKQoJCQkJCQl7CgkJCQkJCQkkZm9ydW1pZHMgID0gYXJyYXlfbWVyZ2UoICRmb3J1bWlkcyAsICRmICk7CgkJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGltcGxvZGUoICIsIiwgJGZvcnVtaWRzICk7CiAgICB9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gR2V0IHRoZSBhY3RpdmUgaW4gZ3JvdXBzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb24gZ2V0X2FjdGl2ZWluX2dyb3VwcygpCiAgICB7CgoJCWdsb2JhbCAkUG93ZXJCQjsKCgkJJGdyb3VwaWRzID0gYXJyYXkoKTsKCiAgICAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCS8vIENoZWNrIGZvciBhbiBhcnJheQogICAgCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJaWYgKCBpc19hcnJheSggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSApICApCiAgICAJewoKICAgIAkJaWYgKCBpbl9hcnJheSggJ2FsbCcsICRQb3dlckJCLT5fUE9TVFsnZ3JvdXBzJ10gKSApCiAgICAJCXsKICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAkJCS8vIFNlYXJjaGluZyBhbGwgZ3JvdXBzLi4KICAgIAkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAJCQlyZXR1cm4gJyonOwogICAgCQl9CiAgICAJCWVsc2UKICAgIAkJewoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gR28gbG9vcHkgbG9vCgkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkJZm9yZWFjaCggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSBhcyAkbCApCgkJCQl7CgoJCQkJCQkkZ3JvdXBpZHNbXSA9IGludHZhbCgkbCk7CgkJCQl9CgoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJLy8gRG8gd2UgaGF2ZSBjYXRzPyBHaXZlICdlbSB0byBDaGFybGVzIQoJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJCWlmICggY291bnQoICRncm91cGlkcyAgKSApCgkJCQl7CgkJCQkJZm9yZWFjaCggJGdyb3VwaWRzICBhcyAkZiApCgkJCQkJewoJCQkJCQlpZiAoIGlzX2FycmF5KCRmKSBhbmQgY291bnQoJGYpICkKCQkJCQkJewoJCQkJCQkJJGdyb3VwaWRzICA9IGFycmF5X21lcmdlKCAkZ3JvdXBpZHMgLCAkZiApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBObyBncm91cHMgc2VsZWN0ZWQgLyB3ZSBoYXZlIGF2YWlsYWJsZQoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCQkJcmV0dXJuOwoJCQkJfQogICAgCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJLy8gTm90IGFuIGFycmF5Li4uCgkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCWlmICgkUG93ZXJCQi0+X1BPU1RbJ2dyb3VwcyddID09ICdhbGwnICkKCQkJewoJCQkJcmV0dXJuICcqJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmICggJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSAhPSAiIiApCgkJCQl7CgkJCQkJJGwgPSBpbnR2YWwoJFBvd2VyQkItPl9QT1NUWydncm91cHMnXSk7CgoJCQkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQkvLyBTaW5nbGUgZ3JvdXAKCQkJCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCQkJCQkJJGdyb3VwaWRzW10gPSBpbnR2YWwoJGwpOwoKCgkJCQkJCWlmICggaXNfYXJyYXkoJGYpIGFuZCBjb3VudCgkZikgKQoJCQkJCQl7CgkJCQkJCQkkZ3JvdXBpZHMgID0gYXJyYXlfbWVyZ2UoICRncm91cGlkcyAsICRmICk7CgkJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIGltcGxvZGUoICIsIiwgJGdyb3VwaWRzICk7CiAgICB9CgoJZnVuY3Rpb24gX0NoYW5nZU9yZGVyKCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgogCQkkU2VjQXJyIAkJCQkJPSAJYXJyYXkoKTsKCQkkU2VjQXJyWydnZXRfZnJvbSddCQkJPQknZGInOwoJCSRTZWNBcnJbJ3Byb2MnXSAJCQk9IAlhcnJheSgpOwoJCSRTZWNBcnJbJ3Byb2MnXVsnKiddIAkJPSAJYXJyYXkoJ21ldGhvZCc9PidjbGVhbicsJ3BhcmFtJz0+J2h0bWwnKTsKCQkkU2VjQXJyWydvcmRlciddCQkJPQlhcnJheSgpOwoJCSRTZWNBcnJbJ29yZGVyJ11bJ2ZpZWxkJ10JPQkncHJlZml4X29yZGVyJzsKCQkkU2VjQXJyWydvcmRlciddWyd0eXBlJ10JPQknQVNDJzsKCgkJJFNlY0xpc3QgPSAkUG93ZXJCQi0+Y29yZS0+R2V0TGlzdCgkU2VjQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQkkeCA9IDA7CgkJJHkgPSBzaXplb2YoJFNlY0xpc3QpOwoJCSRzID0gYXJyYXkoKTsKCgkJd2hpbGUgKCR4IDwgJHkpCgkJewoJCQkkbmFtZSA9ICdvcmRlci0nIC4gJFNlY0xpc3RbJHhdWydpZCddOwoKCQkJaWYgKCRTZWNMaXN0WyR4XVsnb3JkZXInXSAhPSAkUG93ZXJCQi0+X1BPU1RbJG5hbWVdKQoJCQl7CgkJCQkkVXBkYXRlQXJyIAkJCQkJCT0gCWFycmF5KCk7CgoJCQkJJFVwZGF0ZUFyclsnZmllbGQnXQkJIAkJPSAJYXJyYXkoKTsKCQkJCSRVcGRhdGVBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9vcmRlciddIAk9IAkkUG93ZXJCQi0+X1BPU1RbJG5hbWVdOwoKCQkJCSRVcGRhdGVBcnJbJ3doZXJlJ10gCQkJPQlhcnJheSgnaWQnLCRTZWNMaXN0WyR4XVsnaWQnXSk7CgoJCQkJJHVwZGF0ZSA9ICRQb3dlckJCLT5jb3JlLT5VcGRhdGUoJFVwZGF0ZUFyciwndG9waWNzX3ByZWZpeHMnKTsKCiAgICAgICAgICAgICAgJHNbJFNlY0xpc3RbJHhdWydpZCddXSA9ICgkdXBkYXRlKSA/ICd0cnVlJyA6ICdmYWxzZSc7CgoJCQl9CgoJCQkkeCArPSAxOwoJCX0KCgkJaWYgKGluX2FycmF5KCdmYWxzZScsJHMpKQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ2RpZF9ub3Rfc3VjY2VlZF90aGVfcHJvY2VzcyddKTsKCQl9CgkJZWxzZQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+cmVkaXJlY3QoJ2luZGV4LnBocD9wYWdlPXRvcGljc19wcmVmaXhzJmNvbnRyb2w9MSZtYWluPTEnKTsKCQl9Cgl9CgoJZnVuY3Rpb24gX0FjdGl2ZVN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQlpZiAoZW1wdHkoJFBvd2VyQkItPl9HRVRbJ2lkJ10pKQoJCQl7CgkJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5lcnJvcigkUG93ZXJCQi0+X0NPTkZbJ3RlbXBsYXRlJ11bJ19DT05GJ11bJ2xhbmcnXVsnVGhlX3JlcXVlc3RfaXNfbm90X3ZhbGlkJ10pOwoJCQl9CgoJCQkkVG9waWNQcmVmaXhzRWRpdEFycgkJCQk9CWFycmF5KCk7CgkJICAgICRUb3BpY1ByZWZpeHNFZGl0QXJyWyd3aGVyZSddIAk9IAlhcnJheSgnaWQnLCRQb3dlckJCLT5fR0VUWydpZCddKTsKCgkJCSRUb3BpY1ByZWZpeHNFZGl0ID0gJFBvd2VyQkItPmNvcmUtPkdldEluZm8oJFRvcGljUHJlZml4c0VkaXRBcnIsJ3RvcGljc19wcmVmaXhzJyk7CgoKCQlpZiAoISRUb3BpY1ByZWZpeHNFZGl0KQoJCXsKCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQl9CgoJCSRQcmVmaXhzQXJyIAkJCT0gCWFycmF5KCk7CgkJJFByZWZpeHNBcnJbJ2ZpZWxkJ10JPQlhcnJheSgpOwoKCQkkUHJlZml4c0FyclsnZmllbGQnXVsncHJlZml4X2FjdGl2YSddIAkJICAgID0gICAgICAgJzEnOwoJCSRQcmVmaXhzQXJyWyd3aGVyZSddIAkJCQkgICAgPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCSR1cGRhdGUgPSAkUG93ZXJCQi0+Y29yZS0+VXBkYXRlKCRQcmVmaXhzQXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCQlpZiAoJHVwZGF0ZSkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPnJlZGlyZWN0KCdpbmRleC5waHA/cGFnZT10b3BpY3NfcHJlZml4cyZjb250cm9sPTEmbWFpbj0xJyk7CgkJfQoJfQoKCWZ1bmN0aW9uIF9Ob0FjdGl2ZVN0YXJ0KCkKCXsKCQlnbG9iYWwgJFBvd2VyQkI7CgoJCQkJaWYgKGVtcHR5KCRQb3dlckJCLT5fR0VUWydpZCddKSkKCQkJewoJCQkJJFBvd2VyQkItPmZ1bmN0aW9ucy0+ZXJyb3IoJFBvd2VyQkItPl9DT05GWyd0ZW1wbGF0ZSddWydfQ09ORiddWydsYW5nJ11bJ1RoZV9yZXF1ZXN0X2lzX25vdF92YWxpZCddKTsKCQkJfQoKCQkJJFRvcGljUHJlZml4c0VkaXRBcnIJCQkJPQlhcnJheSgpOwoJCSAgICAkVG9waWNQcmVmaXhzRWRpdEFyclsnd2hlcmUnXSAJPSAJYXJyYXkoJ2lkJywkUG93ZXJCQi0+X0dFVFsnaWQnXSk7CgoJCQkkVG9waWNQcmVmaXhzRWRpdCA9ICRQb3dlckJCLT5jb3JlLT5HZXRJbmZvKCRUb3BpY1ByZWZpeHNFZGl0QXJyLCd0b3BpY3NfcHJlZml4cycpOwoKCgkJaWYgKCEkVG9waWNQcmVmaXhzRWRpdCkKCQl7CgkJCSRQb3dlckJCLT5mdW5jdGlvbnMtPmVycm9yKCRQb3dlckJCLT5fQ09ORlsndGVtcGxhdGUnXVsnX0NPTkYnXVsnbGFuZyddWydUaGVfcmVxdWVzdF9pc19ub3RfdmFsaWQnXSk7CgkJfQoKCQkkUHJlZml4c0FyciAJCQk9IAlhcnJheSgpOwoJCSRQcmVmaXhzQXJyWydmaWVsZCddCT0JYXJyYXkoKTsKCgkJJFByZWZpeHNBcnJbJ2ZpZWxkJ11bJ3ByZWZpeF9hY3RpdmEnXSAJCSAgICA9ICAgICAgICcwJzsKCQkkUHJlZml4c0Fyclsnd2hlcmUnXSAJCQkJICAgID0gCWFycmF5KCdpZCcsJFBvd2VyQkItPl9HRVRbJ2lkJ10pOwoKCQkkdXBkYXRlID0gJFBvd2VyQkItPmNvcmUtPlVwZGF0ZSgkUHJlZml4c0FyciwndG9waWNzX3ByZWZpeHMnKTsKCgkJaWYgKCR1cGRhdGUpCgkJewoJCQkkUG93ZXJCQi0+ZnVuY3Rpb25zLT5yZWRpcmVjdCgnaW5kZXgucGhwP3BhZ2U9dG9waWNzX3ByZWZpeHMmY29udHJvbD0xJm1haW49MScpOwoJCX0KCgl9Cgp9Cgo/Pg==

Function Calls

None

Variables

None

Stats

MD5 40d864c75390eb9922d792a9c422fd00
Eval Count 0
Decode Time 309 ms