• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 497
  • Last Modified:

PHP Script file with possible base64 decode needed

I see this in one of the includes of a php script I am wanting to use, and I need to see what this $o variable really means?


$o = "Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=";

Open in new window

0
keith1001
Asked:
keith1001
  • 4
  • 3
  • 2
2 Solutions
 
Ronak PatelCommented:
The decoded output can be as below:

Reference decoder : http://www.opinionatedgeek.com/dotnet/tools/base64decode

 
class wpBannersCheckinit {

	function wpBannersCheckinit() {
		return true;	
	}
	
	function ci_initialize() {		
		if ($this -> ci_serial_valid()) {
			$this -> ci_initialization();
		} else {
			add_thickbox();	
			$this -> add_action(\'admin_notices\');
			$this -> add_action(\'init\', \'wp_init\', 10, 1);
		}
		
		return false;
	}
	
	function ci_initialization() {	
		global $wpbrShortcode;
	
		//enqueue JavaScript files
		$this -> enqueue_scripts();
		//enqueue StyleSheets
		$this -> enqueue_styles();
		
		//WordPress action hooks
		$this -> add_action(\'admin_init\', \'tinymce\');
		$this -> add_action(\'admin_menu\');
		$this -> add_action(\'admin_head\');
		$this -> add_action(\'widgets_init\', \'widget_register\', 1, 1);
		$this -> add_action(\'wp_head\');
		$this -> add_action(\'admin_notices\');
		$this -> add_action(\'init\', \'wp_init\', 1, 1);
		$this -> add_action(\'after_plugin_row_\' . plugin_basename(__FILE__), \'after_plugin_row\', 1, 2);
		
		//WordPress filter hooks
		//$this -> add_filter(\'the_content\', \'the_content\', 10, 1);
		
		//WordPress shortcodes
		add_shortcode($this -> pre . \'zone\', array($wpbrShortcode, \'zone\'));
		add_shortcode($this -> pre . \'size\', array($wpbrShortcode, \'size\'));
		add_shortcode($this -> pre . \'ad\', array($wpbrShortcode, \'ad\'));
		add_shortcode($this -> pre . \'sizezone\', array($wpbrShortcode, \'sizezone\'));
	}
	
	function ci_get_serial() {
		if ($serial = $this -> get_option(\'serialkey\')) {
			return $serial;
		}
		
		return false;
	}
	
	function ci_serial_valid() {		
		if ($_SERVER[\'HTTP_HOST\'] == \"localhost\" || $_SERVER[\'HTTP_HOST\'] == \"localhost:\" . $_SERVER[\'SERVER_PORT\']) {
			return true;	
		} else {
			if ($serial = $this -> ci_get_serial()) {			
				if ($serial == strtoupper(md5($_SERVER[\'HTTP_HOST\'] . \"wpbr\" . \"mymasesoetkoekiesisfokkenlekker\"))) {
					return true;
				}
			}
		}
		
		return false;
	}
}

Open in new window

0
 
keith1001Author Commented:
I get the following error:  The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.

I'm just pasting in the data between "".

I have attached the all the code in the file this time.  I see near the end of the $o variable there is a eval decode.   I can get the data in that to decode but not the $o data.

Does it look like the eval is using the $o?
<?php

$o = "Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0="; eval(stripslashes(base64_decode("Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=")));

?>

Open in new window

0
 
Ronak PatelCommented:
try to decode the text (which is copied from your post only) in below text file.

 temp.txt
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
Ray PaseurCommented:
http://www.laprbass.com/RAY_temp_base64.php
Outputs:
bool(false)

In other words, it is not base64_encode() data.  Who is the originator of this 130,000 byte string?  Have you asked them what it is supposed to mean?
<?php // RAY_temp_base64.php
error_reporting(E_ALL);
echo "<pre>";

// TEST DATA FROM THE POST AT EE (130,000 + CHARACTERS)
$o = "Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=";
$b = base64_decode($o);
var_dump($b);

Open in new window

0
 
Ronak PatelCommented:
Ray_Paseur,
If you copy the string from the original post by keith1001  and paste it in any text editor.. you will find repeatative text of which I've attached in text file in my previous post. The repeat count is like 49.

I removed the repeated text and decoded it and found the output mentioned in my first responce of this thread.
0
 
keith1001Author Commented:
Ray, your correct, it is repeating many times.  Thanks for your quick reply and help.

Oh, can you use PHP to display just the output of base64 data,  but not execute the code with eval?
0
 
Ray PaseurCommented:
use PHP to display just the output of base64 data

Yes, I think you can just echo it.
0
 
Ronak PatelCommented:
<?php
$o = use the text attached in text file (encode.txt)
echo base64_decode($o); 
?>

Open in new window

encode.txt
0
 
Ray PaseurCommented:
Here it is.  Looks like some Wordpress stuff.
http://www.laprbass.com/RAY_temp_base64.php
<?php // RAY_temp_base64.php
error_reporting(E_ALL);
echo "<pre>";

// TEST DATA FROM THE POST AT EE (REDUCED FROM THE ORIGINAL 130,000 + CHARACTERS TO ABOUT 2,700)
$o = 'Y2xhc3Mgd3BCYW5uZXJzQ2hlY2tpbml0IHsNCg0KCWZ1bmN0aW9uIHdwQmFubmVyc0NoZWNraW5pdCgpIHsNCgkJcmV0dXJuIHRydWU7CQ0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXplKCkgewkJDQoJCWlmICgkdGhpcyAtPiBjaV9zZXJpYWxfdmFsaWQoKSkgew0KCQkJJHRoaXMgLT4gY2lfaW5pdGlhbGl6YXRpb24oKTsNCgkJfSBlbHNlIHsNCgkJCWFkZF90aGlja2JveCgpOwkNCgkJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9ub3RpY2VzXCcpOw0KCQkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2luaXRcJywgXCd3cF9pbml0XCcsIDEwLCAxKTsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9pbml0aWFsaXphdGlvbigpIHsJDQoJCWdsb2JhbCAkd3BiclNob3J0Y29kZTsNCgkNCgkJLy9lbnF1ZXVlIEphdmFTY3JpcHQgZmlsZXMNCgkJJHRoaXMgLT4gZW5xdWV1ZV9zY3JpcHRzKCk7DQoJCS8vZW5xdWV1ZSBTdHlsZVNoZWV0cw0KCQkkdGhpcyAtPiBlbnF1ZXVlX3N0eWxlcygpOw0KCQkNCgkJLy9Xb3JkUHJlc3MgYWN0aW9uIGhvb2tzDQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9pbml0XCcsIFwndGlueW1jZVwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX21lbnVcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdhZG1pbl9oZWFkXCcpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd2lkZ2V0c19pbml0XCcsIFwnd2lkZ2V0X3JlZ2lzdGVyXCcsIDEsIDEpOw0KCQkkdGhpcyAtPiBhZGRfYWN0aW9uKFwnd3BfaGVhZFwnKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FkbWluX25vdGljZXNcJyk7DQoJCSR0aGlzIC0+IGFkZF9hY3Rpb24oXCdpbml0XCcsIFwnd3BfaW5pdFwnLCAxLCAxKTsNCgkJJHRoaXMgLT4gYWRkX2FjdGlvbihcJ2FmdGVyX3BsdWdpbl9yb3dfXCcgLiBwbHVnaW5fYmFzZW5hbWUoX19GSUxFX18pLCBcJ2FmdGVyX3BsdWdpbl9yb3dcJywgMSwgMik7DQoJCQ0KCQkvL1dvcmRQcmVzcyBmaWx0ZXIgaG9va3MNCgkJLy8kdGhpcyAtPiBhZGRfZmlsdGVyKFwndGhlX2NvbnRlbnRcJywgXCd0aGVfY29udGVudFwnLCAxMCwgMSk7DQoJCQ0KCQkvL1dvcmRQcmVzcyBzaG9ydGNvZGVzDQoJCWFkZF9zaG9ydGNvZGUoJHRoaXMgLT4gcHJlIC4gXCd6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3pvbmVcJykpOw0KCQlhZGRfc2hvcnRjb2RlKCR0aGlzIC0+IHByZSAuIFwnc2l6ZVwnLCBhcnJheSgkd3BiclNob3J0Y29kZSwgXCdzaXplXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ2FkXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ2FkXCcpKTsNCgkJYWRkX3Nob3J0Y29kZSgkdGhpcyAtPiBwcmUgLiBcJ3NpemV6b25lXCcsIGFycmF5KCR3cGJyU2hvcnRjb2RlLCBcJ3NpemV6b25lXCcpKTsNCgl9DQoJDQoJZnVuY3Rpb24gY2lfZ2V0X3NlcmlhbCgpIHsNCgkJaWYgKCRzZXJpYWwgPSAkdGhpcyAtPiBnZXRfb3B0aW9uKFwnc2VyaWFsa2V5XCcpKSB7DQoJCQlyZXR1cm4gJHNlcmlhbDsNCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBjaV9zZXJpYWxfdmFsaWQoKSB7CQkNCgkJaWYgKCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddID09IFwibG9jYWxob3N0XCIgfHwgJF9TRVJWRVJbXCdIVFRQX0hPU1RcJ10gPT0gXCJsb2NhbGhvc3Q6XCIgLiAkX1NFUlZFUltcJ1NFUlZFUl9QT1JUXCddKSB7DQoJCQlyZXR1cm4gdHJ1ZTsJDQoJCX0gZWxzZSB7DQoJCQlpZiAoJHNlcmlhbCA9ICR0aGlzIC0+IGNpX2dldF9zZXJpYWwoKSkgewkJCQ0KCQkJCWlmICgkc2VyaWFsID09IHN0cnRvdXBwZXIobWQ1KCRfU0VSVkVSW1wnSFRUUF9IT1NUXCddIC4gXCJ3cGJyXCIgLiBcIm15bWFzZXNvZXRrb2VraWVzaXNmb2trZW5sZWtrZXJcIikpKSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0=';
$b = base64_decode($o);
var_dump($b);

Open in new window

0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 4
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now