PD9waHAKLyoqCiAqIFNjaGVtYSBKU09OLUxEOiBNdXNpY0V2ZW50LCBSZXZpZXcsIFBlcnNvbiwgTmV3c0FydGljbGUKICogR29vZ2xlIE5ld3MgU2l0ZW1hcCBlbmRwb2ludDogL25ld3Mtc2l0ZW1hcC54bWwKICogU2hvcnRjb2RlIFtkaXN0cmlidXRpZV0gKyBbYXJ0aXN0IG51bWU9IlgiIHJvbD0iWSIgdm9jZT0iWiJdCiAqIG1hZGFsaW5nZW9yZ2Vncm96YS5ybyAtIG11LXBsdWdpbgogKi8KCi8vIOKUgOKUgOKUgCDDjm5yZWdpc3RyYXJlIG1ldGEgc3BlY3RhY29sX2RhdGVfc29ydCAobmVjZXNhcsSDIHBlbnRydSBSRVNUIHdyaXRlICsgV1BfUXVlcnkpIOKUgOKUgAoKYWRkX2FjdGlvbignaW5pdCcsICdtZ2dfcmVnaXN0ZXJfc3BlY3RhY29sX21ldGEnKTsKZnVuY3Rpb24gbWdnX3JlZ2lzdGVyX3NwZWN0YWNvbF9tZXRhKCkgewogICAgcmVnaXN0ZXJfcG9zdF9tZXRhKCdzcGVjdGFjb2wnLCAnc3BlY3RhY29sX2RhdGVfc29ydCcsIFsKICAgICAgICAndHlwZScgICAgICAgICA9PiAnc3RyaW5nJywKICAgICAgICAnc2luZ2xlJyAgICAgICA9PiB0cnVlLAogICAgICAgICdzaG93X2luX3Jlc3QnID0+IHRydWUsCiAgICAgICAgJ2F1dGhfY2FsbGJhY2snPT4gJ19fcmV0dXJuX3RydWUnLAogICAgICAgICdkZWZhdWx0JyAgICAgID0+ICcnLAogICAgXSk7Cn0KCi8vIOKUgOKUgOKUgCBBcmhpdsSDIHNwZWN0YWNvbGUg4oCUIHNvcnRhcmUgY3Jvbm9sb2dpY8SDIEFTQywgZG9hciB2aWl0b2FyZSArIGF6aSDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmFkZF9hY3Rpb24oJ3ByZV9nZXRfcG9zdHMnLCAnbWdnX3NwZWN0YWNvbF9hcmNoaXZlX3F1ZXJ5Jyk7CmZ1bmN0aW9uIG1nZ19zcGVjdGFjb2xfYXJjaGl2ZV9xdWVyeSgkcXVlcnkpIHsKICAgIGlmIChpc19hZG1pbigpIHx8ICEkcXVlcnktPmlzX21haW5fcXVlcnkoKSkgcmV0dXJuOwogICAgJHB0ID0gJHF1ZXJ5LT5nZXQoJ3Bvc3RfdHlwZScpOwogICAgJGlzX3NwZWN0YWNvbF9hcmNoaXZlID0gJHF1ZXJ5LT5pc19wb3N0X3R5cGVfYXJjaGl2ZSgnc3BlY3RhY29sJykKICAgICAgICB8fCAoJHB0ID09PSAnc3BlY3RhY29sJyAmJiAkcXVlcnktPmlzX2FyY2hpdmUoKSk7CiAgICBpZiAoISRpc19zcGVjdGFjb2xfYXJjaGl2ZSkgcmV0dXJuOwoKICAgIC8vIFRFU1QgSVpPTEFUOiBET0FSIHBvc3RzX3Blcl9wYWdlCiAgICAkcXVlcnktPnNldCgncG9zdHNfcGVyX3BhZ2UnLCAyMCk7Cn0KCi8vIOKUgOKUgOKUgCBHb29nbGUgTmV3cyBTaXRlbWFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBGxINyxIMgcmV3cml0ZSBydWxlcyDigJQgdmVyaWZpY8SDIFJFUVVFU1RfVVJJIGRpcmVjdCDDrm4gJ3BhcnNlX3JlcXVlc3QnCgphZGRfYWN0aW9uKCdwYXJzZV9yZXF1ZXN0JywgJ21nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0Jyk7CmZ1bmN0aW9uIG1nZ19uZXdzX3NpdGVtYXBfaW50ZXJjZXB0KCkgewogICAgJHVyaSA9IHRyaW0ocGFyc2VfdXJsKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddID8/ICcnLCBQSFBfVVJMX1BBVEgpLCAnLycpOwogICAgaWYgKCR1cmkgIT09ICduZXdzLXNpdGVtYXAueG1sJykgcmV0dXJuOwogICAgbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKTsKfQoKZnVuY3Rpb24gbWdnX25ld3Nfc2l0ZW1hcF9vdXRwdXQoKSB7CgogICAgJHBvc3RzID0gZ2V0X3Bvc3RzKFsKICAgICAgICAncG9zdF90eXBlJyAgICAgID0+ICdzdGlyZScsCiAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgICA9PiAncHVibGlzaCcsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAxMDAwLAogICAgICAgICdkYXRlX3F1ZXJ5JyAgICAgPT4gW1snYWZ0ZXInID0+ICcyIGRheXMgYWdvJ11dLAogICAgICAgICdvcmRlcmJ5JyAgICAgICAgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICAgICAgICAgPT4gJ0RFU0MnLAogICAgXSk7CgogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1VVEYtOCcpOwogICAgaGVhZGVyKCdYLVJvYm90cy1UYWc6IG5vaW5kZXgnKTsKCiAgICBlY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOwogICAgZWNobyAnPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSInIC4gIlxuIjsKICAgIGVjaG8gJyAgICAgICAgeG1sbnM6bmV3cz0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NjaGVtYXMvc2l0ZW1hcC1uZXdzLzAuOSI+JyAuICJcbiI7CgogICAgZm9yZWFjaCAoJHBvc3RzIGFzICRwb3N0KSB7CiAgICAgICAgJHRpdGxlID0gZXNjX3htbChnZXRfdGhlX3RpdGxlKCRwb3N0KSk7CiAgICAgICAgJHVybCAgID0gZXNjX3VybChnZXRfcGVybWFsaW5rKCRwb3N0KSk7CiAgICAgICAgJGRhdGUgID0gZ2V0X3RoZV9kYXRlKCdjJywgJHBvc3QpOwoKICAgICAgICBlY2hvICIgIDx1cmw+XG4iOwogICAgICAgIGVjaG8gIiAgICA8bG9jPnskdXJsfTwvbG9jPlxuIjsKICAgICAgICBlY2hvICIgICAgPG5ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6cHVibGljYXRpb24+XG4iOwogICAgICAgIGVjaG8gIiAgICAgICAgPG5ld3M6bmFtZT5tYWRhbGluZ2VvcmdlZ3JvemEucm88L25ld3M6bmFtZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgICA8bmV3czpsYW5ndWFnZT5ybzwvbmV3czpsYW5ndWFnZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPC9uZXdzOnB1YmxpY2F0aW9uPlxuIjsKICAgICAgICBlY2hvICIgICAgICA8bmV3czpwdWJsaWNhdGlvbl9kYXRlPnskZGF0ZX08L25ld3M6cHVibGljYXRpb25fZGF0ZT5cbiI7CiAgICAgICAgZWNobyAiICAgICAgPG5ld3M6dGl0bGU+eyR0aXRsZX08L25ld3M6dGl0bGU+XG4iOwogICAgICAgIGVjaG8gIiAgICA8L25ld3M6bmV3cz5cbiI7CiAgICAgICAgZWNobyAiICA8L3VybD5cbiI7CiAgICB9CgogICAgZWNobyAnPC91cmxzZXQ+JzsKICAgIGV4aXQ7Cn0KCmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX291dHB1dF9zY2hlbWEnLCAyMCk7CgpmdW5jdGlvbiBtZ2dfb3V0cHV0X3NjaGVtYSgpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCkgcmV0dXJuOwoKICAgICRzY2hlbWEgPSBudWxsOwoKICAgIGlmICgkcG9zdC0+cG9zdF90eXBlID09PSAnc3BlY3RhY29sJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbXVzaWNfZXZlbnRfc2NoZW1hKCRwb3N0KTsKICAgIH0gZWxzZWlmICgkcG9zdC0+cG9zdF90eXBlID09PSAncG9zdCcgJiYgaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcmV2aWV3X3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3Bvc3QnICYmIGhhc19jYXRlZ29yeSgnY2F0ZWdvcmllLWFydGlzdGknLCAkcG9zdCkpIHsKICAgICAgICAkc2NoZW1hID0gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpOwogICAgfSBlbHNlaWYgKCRwb3N0LT5wb3N0X3R5cGUgPT09ICdhcnRpc3RpJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfcGVyc29uX3NjaGVtYSgkcG9zdCk7CiAgICB9IGVsc2VpZiAoJHBvc3QtPnBvc3RfdHlwZSA9PT0gJ3N0aXJlJykgewogICAgICAgICRzY2hlbWEgPSBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCk7CiAgICB9CgogICAgaWYgKCEkc2NoZW1hKSByZXR1cm47CgogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIiBjbGFzcz0ibWdnLXNjaGVtYSI+JyAuICJcbiI7CiAgICBlY2hvIHdwX2pzb25fZW5jb2RlKCRzY2hlbWEsIEpTT05fVU5FU0NBUEVEX1NMQVNIRVMgfCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9QUkVUVFlfUFJJTlQpOwogICAgZWNobyAiXG48L3NjcmlwdD5cbiI7Cn0KCmZ1bmN0aW9uIG1nZ19tdXNpY19ldmVudF9zY2hlbWEoJHBvc3QpIHsKICAgICR2ZW51ZSA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3ZlbnVlJywgdHJ1ZSk7CiAgICAkZGF0ZSAgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ3NwZWN0YWNvbF9kYXRlJywgIHRydWUpOwogICAgJHRpbWUgID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICdzcGVjdGFjb2xfdGltZScsICB0cnVlKTsKICAgICR0eXBlICA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAnc3BlY3RhY29sX3R5cGUnLCAgdHJ1ZSk7CgogICAgJHN0YXJ0X2RhdGUgPSBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGUsICR0aW1lKTsKCiAgICAkc2NoZW1hID0gWwogICAgICAgICdAY29udGV4dCcgICAgICAgICAgICA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgICAgICAgICAgICAgPT4gJ011c2ljRXZlbnQnLAogICAgICAgICduYW1lJyAgICAgICAgICAgICAgICA9PiBnZXRfdGhlX3RpdGxlKCRwb3N0KSwKICAgICAgICAndXJsJyAgICAgICAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2V2ZW50U3RhdHVzJyAgICAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcvRXZlbnRTY2hlZHVsZWQnLAogICAgICAgICdldmVudEF0dGVuZGFuY2VNb2RlJyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnL09mZmxpbmVFdmVudEF0dGVuZGFuY2VNb2RlJywKICAgIF07CgogICAgaWYgKCRzdGFydF9kYXRlKSB7CiAgICAgICAgJHNjaGVtYVsnc3RhcnREYXRlJ10gPSAkc3RhcnRfZGF0ZTsKICAgIH0KCiAgICBpZiAoJHZlbnVlKSB7CiAgICAgICAgJHNjaGVtYVsnbG9jYXRpb24nXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgID0+ICdQZXJmb3JtaW5nQXJ0c1RoZWF0ZXInLAogICAgICAgICAgICAnbmFtZScgICAgPT4gJHZlbnVlLAogICAgICAgICAgICAnYWRkcmVzcycgPT4gWydAdHlwZScgPT4gJ1Bvc3RhbEFkZHJlc3MnLCAnYWRkcmVzc0NvdW50cnknID0+ICdSTyddLAogICAgICAgIF07CiAgICAgICAgJHNjaGVtYVsnb3JnYW5pemVyJ10gPSBbJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywgJ25hbWUnID0+ICR2ZW51ZV07CiAgICB9CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9ICRpbWdbMF07CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkdHlwZSkgewogICAgICAgICRzY2hlbWFbJ2Rlc2NyaXB0aW9uJ10gPSB1Y2ZpcnN0KCR0eXBlKTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3Jldmlld19zY2hlbWEoJHBvc3QpIHsKICAgICRvdmVyYWxsX3JhdGluZyA9IGdldF9wb3N0X21ldGEoJHBvc3QtPklELCAneWFzcl9vdmVyYWxsX3JhdGluZycsIHRydWUpOwoKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyAgICAgID0+ICdodHRwczovL3NjaGVtYS5vcmcnLAogICAgICAgICdAdHlwZScgICAgICAgICA9PiAnUmV2aWV3JywKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgICdkYXRlUHVibGlzaGVkJyA9PiBnZXRfdGhlX2RhdGUoJ2MnLCAkcG9zdCksCiAgICAgICAgJ2F1dGhvcicgICAgICAgID0+IG1nZ19hdXRob3Jfc2NoZW1hKCksCiAgICAgICAgJ2l0ZW1SZXZpZXdlZCcgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnRXZlbnQnLAogICAgICAgICAgICAnbmFtZScgID0+IGdldF90aGVfdGl0bGUoJHBvc3QpLAogICAgICAgIF0sCiAgICAgICAgJ3B1Ymxpc2hlcicgICAgID0+IFsKICAgICAgICAgICAgJ0B0eXBlJyA9PiAnT3JnYW5pemF0aW9uJywKICAgICAgICAgICAgJ25hbWUnICA9PiAnbWFkYWxpbmdlb3JnZWdyb3phLnJvJywKICAgICAgICAgICAgJ3VybCcgICA9PiBob21lX3VybCgpLAogICAgICAgIF0sCiAgICBdOwoKICAgIGlmICgkb3ZlcmFsbF9yYXRpbmcgIT09ICcnICYmICRvdmVyYWxsX3JhdGluZyAhPT0gZmFsc2UpIHsKICAgICAgICAkc2NoZW1hWydyZXZpZXdSYXRpbmcnXSA9IFsKICAgICAgICAgICAgJ0B0eXBlJyAgICAgICA9PiAnUmF0aW5nJywKICAgICAgICAgICAgJ3JhdGluZ1ZhbHVlJyA9PiAoZmxvYXQpICRvdmVyYWxsX3JhdGluZywKICAgICAgICAgICAgJ2Jlc3RSYXRpbmcnICA9PiA1LAogICAgICAgICAgICAnd29yc3RSYXRpbmcnID0+IDEsCiAgICAgICAgXTsKICAgIH0KCiAgICByZXR1cm4gJHNjaGVtYTsKfQoKZnVuY3Rpb24gbWdnX3BlcnNvbl9zY2hlbWEoJHBvc3QpIHsKICAgICRzY2hlbWEgPSBbCiAgICAgICAgJ0Bjb250ZXh0JyA9PiAnaHR0cHM6Ly9zY2hlbWEub3JnJywKICAgICAgICAnQHR5cGUnICAgID0+ICdQZXJzb24nLAogICAgICAgICduYW1lJyAgICAgPT4gZ2V0X3RoZV90aXRsZSgkcG9zdCksCiAgICAgICAgJ3VybCcgICAgICA9PiBnZXRfcGVybWFsaW5rKCRwb3N0KSwKICAgIF07CgogICAgJHRodW1iX2lkID0gZ2V0X3Bvc3RfdGh1bWJuYWlsX2lkKCRwb3N0LT5JRCk7CiAgICBpZiAoJHRodW1iX2lkKSB7CiAgICAgICAgJGltZyA9IHdwX2dldF9hdHRhY2htZW50X2ltYWdlX3NyYygkdGh1bWJfaWQsICdmdWxsJyk7CiAgICAgICAgaWYgKCRpbWcpIHsKICAgICAgICAgICAgJHNjaGVtYVsnaW1hZ2UnXSA9IFsKICAgICAgICAgICAgICAgICdAdHlwZScgID0+ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgICAgICAndXJsJyAgICA9PiAkaW1nWzBdLAogICAgICAgICAgICAgICAgJ3dpZHRoJyAgPT4gKGludCkgJGltZ1sxXSwKICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IChpbnQpICRpbWdbMl0sCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFRheG9ub21pYSBwcmltYXJhIGEgcGFnaW5paSBkZSBhcnRpc3QgKGRpcmlqb3IsIHNvcHJhbmEgZXRjKSDihpIgam9iVGl0bGUKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnY2F0ZWdvcnknKTsKICAgIGlmICgkdGVybXMgJiYgIWlzX3dwX2Vycm9yKCR0ZXJtcykpIHsKICAgICAgICAkc2NoZW1hWydqb2JUaXRsZSddID0gJHRlcm1zWzBdLT5uYW1lOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX3NjaGVtYSgpIHsKICAgIHJldHVybiBbCiAgICAgICAgJ0B0eXBlJyAgPT4gJ1BlcnNvbicsCiAgICAgICAgJ25hbWUnICAgPT4gJ03Eg2TEg2xpbiBHZW9yZ2UgR3JvemEnLAogICAgICAgICd1cmwnICAgID0+ICdodHRwczovL21hZGFsaW5nZW9yZ2Vncm96YS5yby9tYWRhbGluLWdlb3JnZS1ncm96YS10ZW5vci1jcml0aWMtbXV6aWNhbC8nLAogICAgICAgICdzYW1lQXMnID0+IFsKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQG1hZGFsaW4uZ3JvemEub3BlcmEnLAogICAgICAgICAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL21hZGFsaW5nZW9yZ2Vncm96YScsCiAgICAgICAgICAgICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJywKICAgICAgICAgICAgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BtYWRhbGluZ2VvcmdlZ3JvemEnLAogICAgICAgIF0sCiAgICBdOwp9CgpmdW5jdGlvbiBtZ2dfbmV3c19hcnRpY2xlX3NjaGVtYSgkcG9zdCkgewogICAgJHNjaGVtYSA9IFsKICAgICAgICAnQGNvbnRleHQnICAgICAgPT4gJ2h0dHBzOi8vc2NoZW1hLm9yZycsCiAgICAgICAgJ0B0eXBlJyAgICAgICAgID0+ICdOZXdzQXJ0aWNsZScsCiAgICAgICAgJ2hlYWRsaW5lJyAgICAgID0+IG1iX3N1YnN0cihnZXRfdGhlX3RpdGxlKCRwb3N0KSwgMCwgMTEwKSwKICAgICAgICAndXJsJyAgICAgICAgICAgPT4gZ2V0X3Blcm1hbGluaygkcG9zdCksCiAgICAgICAgJ2RhdGVQdWJsaXNoZWQnID0+IGdldF90aGVfZGF0ZSgnYycsICRwb3N0KSwKICAgICAgICAnZGF0ZU1vZGlmaWVkJyAgPT4gZ2V0X3RoZV9tb2RpZmllZF9kYXRlKCdjJywgJHBvc3QpLAogICAgICAgICdhdXRob3InICAgICAgICA9PiBtZ2dfYXV0aG9yX3NjaGVtYSgpLAogICAgICAgICdwdWJsaXNoZXInICAgICA9PiBbCiAgICAgICAgICAgICdAdHlwZScgPT4gJ09yZ2FuaXphdGlvbicsCiAgICAgICAgICAgICduYW1lJyAgPT4gJ21hZGFsaW5nZW9yZ2Vncm96YS5ybycsCiAgICAgICAgICAgICd1cmwnICAgPT4gaG9tZV91cmwoKSwKICAgICAgICAgICAgJ2xvZ28nICA9PiBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJ2h0dHBzOi8vbWFkYWxpbmdlb3JnZWdyb3phLnJvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lNR18wNjMxLmpwZycsCiAgICAgICAgICAgICAgICAnd2lkdGgnICA9PiAxMzIwLAogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gNTYwLAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICAgICAgJ2luTGFuZ3VhZ2UnICAgID0+ICdyby1STycsCiAgICBdOwoKICAgICR0aHVtYl9pZCA9IGdldF9wb3N0X3RodW1ibmFpbF9pZCgkcG9zdC0+SUQpOwogICAgaWYgKCR0aHVtYl9pZCkgewogICAgICAgICRpbWcgPSB3cF9nZXRfYXR0YWNobWVudF9pbWFnZV9zcmMoJHRodW1iX2lkLCAnZnVsbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICRzY2hlbWFbJ2ltYWdlJ10gPSBbCiAgICAgICAgICAgICAgICAnQHR5cGUnICA9PiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgICAgJ3VybCcgICAgPT4gJGltZ1swXSwKICAgICAgICAgICAgICAgICd3aWR0aCcgID0+IChpbnQpICRpbWdbMV0sCiAgICAgICAgICAgICAgICAnaGVpZ2h0JyA9PiAoaW50KSAkaW1nWzJdLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgIH0KCiAgICAkZXhjZXJwdCA9IGdldF90aGVfZXhjZXJwdCgkcG9zdCk7CiAgICBpZiAoJGV4Y2VycHQpIHsKICAgICAgICAkc2NoZW1hWydkZXNjcmlwdGlvbiddID0gd3Bfc3RyaXBfYWxsX3RhZ3MoJGV4Y2VycHQpOwogICAgfQoKICAgIHJldHVybiAkc2NoZW1hOwp9CgpmdW5jdGlvbiBtZ2dfcm9fZGF0ZV90b19pc28oJGRhdGVfcm8sICR0aW1lID0gJycpIHsKICAgIGlmICghJGRhdGVfcm8pIHJldHVybiAnJzsKICAgICRsdW5pID0gWwogICAgICAgICdpYW51YXJpZScgPT4gJzAxJywgJ2ZlYnJ1YXJpZScgPT4gJzAyJywgJ21hcnRpZScgICAgID0+ICcwMycsCiAgICAgICAgJ2FwcmlsaWUnICA9PiAnMDQnLCAnbWFpJyAgICAgICAgPT4gJzA1JywgJ2l1bmllJyAgICAgID0+ICcwNicsCiAgICAgICAgJ2l1bGllJyAgICA9PiAnMDcnLCAnYXVndXN0JyAgICAgPT4gJzA4JywgJ3NlcHRlbWJyaWUnID0+ICcwOScsCiAgICAgICAgJ29jdG9tYnJpZSc9PiAnMTAnLCAnbm9pZW1icmllJyAgPT4gJzExJywgJ2RlY2VtYnJpZScgID0+ICcxMicsCiAgICBdOwogICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnL1xzKy8nLCB0cmltKCRkYXRlX3JvKSk7CiAgICBpZiAoY291bnQoJHBhcnRzKSA8IDMpIHJldHVybiAnJzsKICAgICR6aSAgID0gc3RyX3BhZCgoaW50KSRwYXJ0c1swXSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpOwogICAgJGx1bmEgPSAkbHVuaVtzdHJ0b2xvd2VyKCRwYXJ0c1sxXSldID8/ICcnOwogICAgJGFuICAgPSAkcGFydHNbMl07CiAgICBpZiAoISRsdW5hIHx8ICEkYW4pIHJldHVybiAnJzsKICAgICRpc28gPSAieyRhbn0teyRsdW5hfS17JHppfSI7CiAgICBpZiAoJHRpbWUpIHsKICAgICAgICAkdCA9IHByZWdfcmVwbGFjZSgnL1teMC05Ol0vJywgJycsICR0aW1lKTsKICAgICAgICBpZiAoc3RybGVuKCR0KSA+PSA0KSAkaXNvIC49ICdUJyAuICR0IC4gJzowMCc7CiAgICB9CiAgICByZXR1cm4gJGlzbzsKfQoKLy8g4pSA4pSA4pSAIFNob3J0Y29kZSBkaXN0cmlidcibaWUgYXJ0aciZdGkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfc2hvcnRjb2RlKCdtZ2dfZGlzdHJpYnV0aWUnLCAnbWdnX3NjX2Rpc3RyaWJ1dGllJyk7CmFkZF9zaG9ydGNvZGUoJ21nZ19hcnRpc3QnLCAgICAgJ21nZ19zY19hcnRpc3QnKTsKLy8gQWxpYXN1cmkgc2N1cnRlIChkb2FyIGRhY2EgbnUgc3VudCBkZWphIGlucmVnaXN0cmF0ZSBkZSBhbHQgcGx1Z2luKQphZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIXNob3J0Y29kZV9leGlzdHMoJ2Rpc3RyaWJ1dGllJykpIGFkZF9zaG9ydGNvZGUoJ2Rpc3RyaWJ1dGllJywgJ21nZ19zY19kaXN0cmlidXRpZScpOwogICAgaWYgKCFzaG9ydGNvZGVfZXhpc3RzKCdhcnRpc3QnKSkgICAgICBhZGRfc2hvcnRjb2RlKCdhcnRpc3QnLCAgICAgICdtZ2dfc2NfYXJ0aXN0Jyk7Cn0sIDIwKTsKCmZ1bmN0aW9uIG1nZ19zY19kaXN0cmlidXRpZSgkYXR0cywgJGNvbnRlbnQgPSAnJykgewogICAgaWYgKCEkY29udGVudCkgcmV0dXJuICcnOwogICAgJGlubmVyID0gZG9fc2hvcnRjb2RlKCRjb250ZW50KTsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0ibWdnLWRpc3RyaWJ1dGllIj4nIC4gJGlubmVyIC4gJzwvZGl2Pic7Cn0KCmZ1bmN0aW9uIG1nZ19zY19hcnRpc3QoJGF0dHMpIHsKICAgICRhdHRzID0gc2hvcnRjb2RlX2F0dHMoWwogICAgICAgICdudW1lJyA9PiAnJywKICAgICAgICAncm9sJyAgPT4gJycsCiAgICAgICAgJ3ZvY2UnID0+ICcnLAogICAgXSwgJGF0dHMsICdhcnRpc3QnKTsKCiAgICAkbnVtZSA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ251bWUnXSk7CiAgICAkcm9sICA9IHNhbml0aXplX3RleHRfZmllbGQoJGF0dHNbJ3JvbCddKTsKICAgICR2b2NlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkYXR0c1sndm9jZSddKTsKCiAgICBpZiAoISRudW1lKSByZXR1cm4gJyc7CgogICAgJHBvc3QgPSBtZ2dfZmluZF9hcnRpc3QoJG51bWUpOwoKICAgIGlmICghJHBvc3QpIHsKICAgICAgICAvLyBGYWlsLXNhZmU6IGFmaciZZWF6xIMgbnVtZWxlIHNpbXBsdSBmxINyxIMgbGluawogICAgICAgICRsYWJlbCAgPSAkdm9jZSA/ICI8c21hbGw+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgICAgICRyb2xfZWwgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCBtZ2ctYXJ0aXN0LW5vZm91bmQiPicKICAgICAgICAgICAgIC4gIjxzcGFuIGNsYXNzPVwibWdnLWFydGlzdC1uYW1lXCI+eyRudW1lfTwvc3Bhbj57JGxhYmVsfXskcm9sX2VsfTwvZGl2PiI7CiAgICB9CgogICAgJGxpbmsgICAgPSBnZXRfcGVybWFsaW5rKCRwb3N0KTsKICAgICR0aHVtYiAgID0gJyc7CiAgICAkdGh1bWJfaWQgPSBnZXRfcG9zdF90aHVtYm5haWxfaWQoJHBvc3QtPklEKTsKICAgIGlmICgkdGh1bWJfaWQpIHsKICAgICAgICAkaW1nID0gd3BfZ2V0X2F0dGFjaG1lbnRfaW1hZ2Vfc3JjKCR0aHVtYl9pZCwgJ3RodW1ibmFpbCcpOwogICAgICAgIGlmICgkaW1nKSB7CiAgICAgICAgICAgICR0aHVtYiA9ICI8aW1nIHNyYz1cInskaW1nWzBdfVwiIGFsdD1cIiIgLiBlc2NfYXR0cigkbnVtZSkgLiAiXCIgIgogICAgICAgICAgICAgICAgICAgLiAid2lkdGg9XCJ7JGltZ1sxXX1cIiBoZWlnaHQ9XCJ7JGltZ1syXX1cIiBsb2FkaW5nPVwibGF6eVwiPiI7CiAgICAgICAgfQogICAgfQoKICAgICR2b2NlX2VsID0gJHZvY2UgPyAiPHNtYWxsIGNsYXNzPVwibWdnLWFydGlzdC12b2NlXCI+eyR2b2NlfTwvc21hbGw+IiA6ICcnOwogICAgJHJvbF9lbCAgPSAkcm9sICA/ICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3Qtcm9sXCI+eyRyb2x9PC9zcGFuPiIgOiAnJzsKCiAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1nZy1hcnRpc3QtY2FyZCI+JwogICAgICAgICAuICI8YSBocmVmPVwieyRsaW5rfVwiIGNsYXNzPVwibWdnLWFydGlzdC1saW5rXCI+IgogICAgICAgICAuICR0aHVtYgogICAgICAgICAuICI8c3BhbiBjbGFzcz1cIm1nZy1hcnRpc3QtbmFtZVwiPnskbnVtZX08L3NwYW4+IgogICAgICAgICAuICR2b2NlX2VsCiAgICAgICAgIC4gIjwvYT4iCiAgICAgICAgIC4gJHJvbF9lbAogICAgICAgICAuICc8L2Rpdj4nOwp9CgpmdW5jdGlvbiBtZ2dfZmluZF9hcnRpc3QoJG5hbWUpIHsKICAgIHN0YXRpYyAkY2FjaGUgPSBbXTsKICAgIGlmIChpc3NldCgkY2FjaGVbJG5hbWVdKSkgcmV0dXJuICRjYWNoZVskbmFtZV07CgogICAgLy8gQ2F1dGEgZGlyZWN0IGluIERCIGR1cGEgcG9zdF9uYW1lIChzbHVnKSDigJQgYnlwYXNzZXMgcmVzdHJpY3RpaSBDUFQgcHVibGljbHlfcXVlcnlhYmxlCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2x1ZyAgICA9IHNhbml0aXplX3RpdGxlKCRuYW1lKTsKICAgICRwb3N0X2lkID0gJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBJRCBGUk9NIHskd3BkYi0+cG9zdHN9CiAgICAgICAgIFdIRVJFIHBvc3RfbmFtZSA9ICVzIEFORCBwb3N0X3N0YXR1cyA9ICdwdWJsaXNoJyBBTkQgcG9zdF90eXBlID0gJ2FydGlzdGknCiAgICAgICAgIExJTUlUIDEiLAogICAgICAgICRzbHVnCiAgICApKTsKCiAgICAkcmVzdWx0ID0gJHBvc3RfaWQgPyBnZXRfcG9zdCgoaW50KSAkcG9zdF9pZCkgOiBudWxsOwogICAgJGNhY2hlWyRuYW1lXSA9ICRyZXN1bHQ7CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcygpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoKSkgcmV0dXJuOwogICAgZWNobyAnPHN0eWxlPgoubWdnLWRpc3RyaWJ1dGlle2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW46MjBweCAwO30KLm1nZy1hcnRpc3QtY2FyZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjsKICB3aWR0aDoxMjBweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjQ7fQoubWdnLWFydGlzdC1saW5re2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoubWdnLWFydGlzdC1saW5rOmhvdmVyIC5tZ2ctYXJ0aXN0LW5hbWV7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9Ci5tZ2ctYXJ0aXN0LWNhcmQgaW1ne3dpZHRoOjkwcHg7aGVpZ2h0OjkwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjUwJTsKICBkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG8gNnB4O30KLm1nZy1hcnRpc3QtbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWExYTFhO30KLm1nZy1hcnRpc3Qtdm9jZXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM4ODg7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDoycHg7fQoubWdnLWFydGlzdC1yb2x7ZGlzcGxheTpibG9jaztjb2xvcjojOEIwMDAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6aXRhbGljO21hcmdpbi10b3A6NHB4O30KLm1nZy1hcnRpc3Qtbm9mb3VuZCAubWdnLWFydGlzdC1uYW1le2NvbG9yOiM1NTU7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWRpc3RyaWJ1dGlle2dhcDo4cHg7fS5tZ2ctYXJ0aXN0LWNhcmR7d2lkdGg6OTBweDt9fQo8L3N0eWxlPicgLiAiXG4iOwp9CmFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAnbWdnX2Rpc3RyaWJ1dGllX3N0eWxlcycsIDUpOwoKLy8g4pSA4pSA4pSAIEF1dGhvciBib3ggcGUgcmVjZW56aWkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphZGRfZmlsdGVyKCd0aGVfY29udGVudCcsICdtZ2dfYXV0aG9yX2JveF9hcHBlbmQnLCAzMCk7CgpmdW5jdGlvbiBtZ2dfYXV0aG9yX2JveF9hcHBlbmQoJGNvbnRlbnQpIHsKICAgIGlmICghaXNfc2luZ3VsYXIoJ3Bvc3QnKSkgcmV0dXJuICRjb250ZW50OwogICAgJHBvc3QgPSBnZXRfcG9zdCgpOwogICAgaWYgKCEkcG9zdCB8fCAhaGFzX2NhdGVnb3J5KCdyZWNlbnppaScsICRwb3N0KSkgcmV0dXJuICRjb250ZW50OwoKICAgICRhdXRob3JfdXJsICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vbWFkYWxpbi1nZW9yZ2UtZ3JvemEtdGVub3ItY3JpdGljLW11emljYWwvJzsKICAgICRhdXRob3JfaW1nICAgPSAnaHR0cHM6Ly9tYWRhbGluZ2VvcmdlZ3JvemEucm8vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDIvSU1HXzA2MzEuanBnJzsKICAgICRzb2NpYWwgPSBbCiAgICAgICAgWydUaWtUb2snLCAgICAnaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFkYWxpbi5ncm96YS5vcGVyYSddLAogICAgICAgIFsnRmFjZWJvb2snLCAgJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9tYWRhbGluZ2VvcmdlZ3JvemEnXSwKICAgICAgICBbJ0luc3RhZ3JhbScsICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21hZGFsaW4uZ3JvemEub3BlcmEvJ10sCiAgICAgICAgWydZb3VUdWJlJywgICAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQG1hZGFsaW5nZW9yZ2Vncm96YSddLAogICAgXTsKICAgICRzb2NpYWxfaHRtbCA9ICcnOwogICAgZm9yZWFjaCAoJHNvY2lhbCBhcyBbJGxhYmVsLCAkdXJsXSkgewogICAgICAgICRzb2NpYWxfaHRtbCAuPSAnPGEgaHJlZj0iJyAuIGVzY191cmwoJHVybCkgLiAnIiBjbGFzcz0ibWdnLWFiLXNvY2lhbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicgLiAkbGFiZWwgLiAnPC9hPiAnOwogICAgfQoKICAgICRib3ggPSAnPGRpdiBjbGFzcz0ibWdnLWF1dGhvci1ib3giPicKICAgICAgICAgLiAnPGltZyBzcmM9IicgLiBlc2NfdXJsKCRhdXRob3JfaW1nKSAuICciIGFsdD0iTcSDZMSDbGluIEdlb3JnZSBHcm96YSIgY2xhc3M9Im1nZy1hYi1pbWciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgbG9hZGluZz0ibGF6eSI+JwogICAgICAgICAuICc8ZGl2IGNsYXNzPSJtZ2ctYWItY29udGVudCI+JwogICAgICAgICAuICc8c3Ryb25nIGNsYXNzPSJtZ2ctYWItbmFtZSI+PGEgaHJlZj0iJyAuIGVzY191cmwoJGF1dGhvcl91cmwpIC4gJyI+TcSDZMSDbGluIEdlb3JnZSBHcm96YTwvYT48L3N0cm9uZz4nCiAgICAgICAgIC4gJzxwIGNsYXNzPSJtZ2ctYWItYmlvIj5UZW5vciwgY3JpdGljIG11emljYWwgyJlpIGJsb2dnZXIuIFNjcmllIGRlc3ByZSBvcGVyxIMsIG11emljxIMgY2xhc2ljxIMgyJlpIHNwZWN0YWNvbGUgZGluIFJvbcOibmlhIMiZaSBFdXJvcGEuPC9wPicKICAgICAgICAgLiAnPGRpdiBjbGFzcz0ibWdnLWFiLXNvY2lhbHMiPicgLiB0cmltKCRzb2NpYWxfaHRtbCkgLiAnPC9kaXY+JwogICAgICAgICAuICc8L2Rpdj4nCiAgICAgICAgIC4gJzwvZGl2Pic7CgogICAgcmV0dXJuICRjb250ZW50IC4gJGJveDsKfQoKYWRkX2FjdGlvbignd3BfaGVhZCcsICdtZ2dfYXV0aG9yX2JveF9zdHlsZXMnLCA1KTsKZnVuY3Rpb24gbWdnX2F1dGhvcl9ib3hfc3R5bGVzKCkgewogICAgaWYgKCFpc19zaW5ndWxhcigncG9zdCcpKSByZXR1cm47CiAgICAkcG9zdCA9IGdldF9wb3N0KCk7CiAgICBpZiAoISRwb3N0IHx8ICFoYXNfY2F0ZWdvcnkoJ3JlY2VuemlpJywgJHBvc3QpKSByZXR1cm47CiAgICBlY2hvICc8c3R5bGU+Ci5tZ2ctYXV0aG9yLWJveHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTZweDttYXJnaW46MzJweCAwIDE2cHg7cGFkZGluZzoyMHB4OwogIGJhY2tncm91bmQ6I2Y5ZjlmOTtib3JkZXItbGVmdDozcHggc29saWQgIzhCMDAwMDtib3JkZXItcmFkaXVzOjJweDt9Ci5tZ2ctYWItaW1ne3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHg7Ym9yZGVyLXJhZGl1czo1MCU7b2JqZWN0LWZpdDpjb3ZlcjtmbGV4LXNocmluazowO30KLm1nZy1hYi1jb250ZW50e2ZsZXg6MTttaW4td2lkdGg6MDt9Ci5tZ2ctYWItbmFtZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206NnB4O30KLm1nZy1hYi1uYW1lIGF7Y29sb3I6IzFhMWExYTt0ZXh0LWRlY29yYXRpb246bm9uZTt9Ci5tZ2ctYWItbmFtZSBhOmhvdmVye2NvbG9yOiM4QjAwMDA7fQoubWdnLWFiLWJpb3ttYXJnaW46MCAwIDhweDtmb250LXNpemU6MTNweDtjb2xvcjojNTU1O2xpbmUtaGVpZ2h0OjEuNTt9Ci5tZ2ctYWItc29jaWFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo4cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzhCMDAwMDsKICB0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzhCMDAwMDt9Ci5tZ2ctYWItc29jaWFsOmhvdmVye2NvbG9yOiM1YTAwMDA7fQpAbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubWdnLWF1dGhvci1ib3h7ZmxleC1kaXJlY3Rpb246Y29sdW1uO30ubWdnLWFiLWltZ3t3aWR0aDo2MHB4O2hlaWdodDo2MHB4O319Cjwvc3R5bGU+JyAuICJcbiI7Cn0K Bogdan Mihai | madalingeorgegroza.ro

Bogdan Mihai

# Bogdan Mihai - Artist și Muzician Român

Bogdan Mihai este un artist și muzician român care s-a remarcat în peisajul cultural și muzical din România prin cont

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]

# Bogdan Mihai – Artist și Muzician Român

Bogdan Mihai este un artist și muzician român care s-a remarcat în peisajul cultural și muzical din România prin contribuții significative în domeniul muzicii și interpretării. Traiectoria sa profesională reflectă dedicația față de arta și perseverența în dezvoltarea unei cariere în industria muzicală românească.

Formare și debut

Bogdan Mihai a dezvoltat pasiunea pentru muzică din copilărie, urmând o formare artistică care i-a permis să dobândească competențele necesare pentru o carieră profesională în domeniu. Educația muzicală a reprezentat o bază solidă pentru dezvoltarea ulterioară a talentului său și pentru încadrarea sa în contextul industriei muzicale locale.

Debutul său profesional a marcat începutul unei prezențe active pe scena muzicală din România. Prin primele proiecte și colaborări, artistul a reușit să se afirme și să atragă atenția publicului și a criticilor de specialitate. Această perioadă inițială a fost crucială pentru construirea unei reputații și pentru stabilirea unei direcții artistice clară.

Cariera

De-a lungul carierei sale, Bogdan Mihai a fost implicat în diverse proiecte și inițiative artistice care au demonstrat versatilitatea și capacitatea sa de adaptare la diferite genuri și contexte muzicale. Prezența sa pe scenele importante din România și participarea la diferite manifestări culturale și muzicale au consolidat poziția sa în industrie.

Colaborările cu alți artești și participarea la proiecte colective au reprezentat oportunități importante pentru dezvoltarea și evoluția artistică. Prin aceste experiențe, Bogdan Mihai a avut posibilitatea de a lucra cu profesionisti din domeniu și de a explora noi direcții creative.

Activitatea sa în industria muzicală a inclus, de asemenea, prezentări în fața unor audiențe diverse, de la manifestări locale până la evenimente de mai mare amploare. Aceste apariții publice au reprezentat momente importante de conexiune cu publicul și de promovare a muncii sale.

Cariera sa s-a dezvoltat în contextul dinamicii generale a industriei muzicale românești, care în ultimele decenii a cunoscut o transformare semnificativă datorită noilor tehnologii și platformelor de distribuție. Ca artist activ în această perioadă, Bogdan Mihai a trebuit să se adapteze acestor schimbări și să găsească noi modalități de a-și promova și distribui lucrările.

Repertoriu și roluri

Repertoriul lui Bogdan Mihai reflectă o abordare muzicală care se poate situa în diferite genuri, demonstrând o deschidere față de explorarea diverselor stiluri și forme de expresie artistică. Această versatilitate a permis artistului să se adreseze unor audiențe variate și să-și demonstreze capacitatea de a interpreta și a crea în contexte diferite.

Rolurile și proiectele în care a fost implicat au fost alese cu atenție, reflectând o înțelegere profundă a naturii muncii artistice și a importanței unei evolucii constante. Prin alegerea proiectelor, Bogdan Mihai a demonstrat preocupare pentru calitate și pentru menținerea unei standarde artistice ridicate.

Munca sa de interpretare a arătat o sensibilitate deosebită față de textul muzical și o capacitate de a transpune în mod autentic emoțiile și intențiile acestuia. Abordarea lui asupra repertoriului a fost marcată de seriozitate și dedică către meșteșug.

Recunoaștere

Activitatea și contribuția lui Bogdan Mihai la scena muzicală și culturală din România au fost apreciate de către publicul și de către specialiștii din domeniu. Recunoașterea muncii sale s-a manifestat prin diverse forme, reflectând impactul pe care l-a avut asupra evoluției muzicii și culturii românești.

Prezența constantă a artistului în peisajul muzical românesc și participarea sa la inițiative artistice relevante au consolidat reputația sa ca profesionist serios și dedicat. Prin consistența muncii sale și prin calitatea interpretărilor, Bogdan Mihai a contribuit la îmbogățirea ofertei culturale locale.

Influența sa în domeniu a fost semnificativă, iar legitatea pe care a câștigat-o în rândul contemporanilor și al publicului atestă valoarea și relevanța contribuției sale artistice. Continuitatea implicării sale în proiecte și manifestări culturale demonstrează o pasiune durabilă pentru artă și o responsabilitate către comunitatea artistică din care face parte.

Dă click pentru a evalua acest articol!
[Total: 0 Media: 0]
Partajează

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *