Illustration
Vous trouverez ici plusieurs illustrations de ma création généralement dessinées à l'aide du logiciel Adobe Illustrator . La création d'illustrations est l'une des choses que je préfère pour me détendre.
Ly8gPHNjcmlwdD4NCgkJCXZhciBnYWxlcmllUGFkZGluZyA9IDEwOw0KCQkJdmFyIGdhbGVyaWVMYWJlbEhlaWdodCA9IDMwOw0KCQkJdmFyIG1heEhlaWdodDsNCgkJCXZhciBnYWxlcmllc1RtcFNjcm9sbCA9IHt9Ow0KCQkJdmFyIGdhbGVyaWVzQ3VycmVudCA9ICdtYWluJzsNCgkJCXZhciBnYWxlcmllVHBsID0gew0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd01haW46IGZ1bmN0aW9uKGVsZW1lbnQpIHsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWUnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzJykuZmFkZWRTbGlkZURvd24oNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzLXNob3cnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJLy8kKCdib2R5Jykuc2Nyb2xsVG8oZ2FsZXJpZXNUbXBTY3JvbGwsIDUwMCk7DQoJCQkJCS8vZ2FsZXJpZXNDdXJyZW50ID0gJ21haW4nOw0KCQkJCQlnYWxlcmllVHBsLnN0b3JlU2Nyb2xsKCdtYWluJyk7DQoJCQkJfSwNCg0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd0dhbGVyaWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJy5nYWxlcmllcycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZXMtc2hvdycpLmZhZGVkU2xpZGVEb3duKDQwMCk7DQoNCg0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZScpLm5vdCgnI2dhbGVyaWVfJytpZCkuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJyNnYWxlcmllXycraWQpLmZhZGVkU2xpZGVEb3duKDQwMCwgZnVuY3Rpb24oKSB7Z2FsZXJpZVRwbC5zdG9yZVNjcm9sbChpZCk7fSk7DQoJCQkJfSwNCg0KCQkJCXN0b3JlU2Nyb2xsOiBmdW5jdGlvbih0YXJnZXQpIHsNCgkJCQkJZ2FsZXJpZXNUbXBTY3JvbGxbZ2FsZXJpZXNDdXJyZW50XSA9ICQoICdib2R5JyApLnNjcm9sbFRvcCgpOw0KCQkJCQkvL2NvbnNvbGUubG9nKCdzdG9yZSAnK2dhbGVyaWVzQ3VycmVudCk7DQoJCQkJCWlmICh0eXBlb2YgZ2FsZXJpZXNUbXBTY3JvbGxbdGFyZ2V0XSA9PT0gInVuZGVmaW5lZCIgfHwgdHJ1ZSkgew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKCQoJyNnYWxlcmllXycrdGFyZ2V0KSwgNTAwKTsNCgkJCQkJCS8vY29uc29sZS5sb2coJ2xvYWQgJysnI2dhbGVyaWVfJyt0YXJnZXQpOw0KCQkJCQl9DQoJCQkJCWVsc2UJew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKGdhbGVyaWVzVG1wU2Nyb2xsW3RhcmdldF0sIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrdGFyZ2V0KTsNCgkJCQkJfQ0KCQkJCQlnYWxlcmllc0N1cnJlbnQgPSB0YXJnZXQ7DQoJCQkJfSwNCg0KCQkJCXVwZGF0ZUhlaWdodDogZnVuY3Rpb24oKSB7DQoJCQkJCSQoJy5nYWxlcmllcywgLmdhbGVyaWUtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSkgew0KCQkJCQkJCXZhciBnYWxlcmllc1dpZHRoID0gJCh0aGlzKS53aWR0aCgpOw0KCQkJCQkJCWlmICghZ2FsZXJpZXNXaWR0aCkgew0KCQkJCQkJCQlnYWxlcmllc1dpZHRoID0gJCh0aGlzKS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykud2lkdGgoKTsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGdhbGVyaWVzV2lkdGggPiAxMDApIHsNCgkJCQkJCQkJdmFyIG51bWJlckNvbCA9IE1hdGguY2VpbChnYWxlcmllc1dpZHRoIC8gJCh0aGlzKS5kYXRhKCd0aWxlLXdpZHRoJykpOw0KCQkJCQkJCQltYXhIZWlnaHQgPSAoZ2FsZXJpZXNXaWR0aCAvIG51bWJlckNvbCkgLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSAqICQodGhpcykuZGF0YSgndGlsZS1oZWlnaHQnKTsNCg0KCQkJCQkJCQkkKHRoaXMpLmZpbmQoJy5nYWxlcmllcy1ibG9jaycpLmNzcygnd2lkdGgnLCAoMTAwIC8gbnVtYmVyQ29sKSArICclJykuY3NzKCdwYWRkaW5nJywgZ2FsZXJpZVBhZGRpbmcgKyAncHgnKTsNCgkJCQkJCQkJJCh0aGlzKS5kYXRhKCdjb2wnLCBudW1iZXJDb2wpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJJCgnLmdhbGVyaWUtZ3JvdXA6dmlzaWJsZScpLmNzcygnd2lkdGgnLCAnY2FsYygxMDAlICsgJysoZ2FsZXJpZVBhZGRpbmcqMikrJ3B4KScpLmNzcygnbWFyZ2luTGVmdCcsICctJytnYWxlcmllUGFkZGluZysncHgnKTsNCg0KCQkJCQkkKCcuZ2FsZXJpZXMtaW1nJykuaGVpZ2h0KHBhcnNlSW50KG1heEhlaWdodCkpOw0KDQoJCQkJCSQoJy5nYWxlcmllLWdyb3VwJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdwcmVzZW50YXRpb24nKSkgew0KCQkJCQkJCSQodGhpcykuZmluZCgnLmdhbGVyaWVzLWxlZ2VuZCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJykuY3NzKCd3aGl0ZS1zcGFjZScsICdub3dyYXAnKS5jc3MoJ3RleHQtb3ZlcmZsb3cnLCAnZWxsaXBzaXMnKTsNCg0KCQkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID4gNCApIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQocGFyc2VJbnQobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIGlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID09IDQgfHwgJCh0aGlzKS5kYXRhKCdjb2wnKSA9PSAzICkgew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodChwYXJzZUludCgobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKjIpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQoJ2F1dG8nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJfSwNCg0KCQkJCXVwZGF0ZVZpc2libGU6IGZ1bmN0aW9uKGdhbGVyaWUpIHsNCgkJCQkJaWYgKCFnYWxlcmllKSBnYWxlcmllID0gJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpOw0KCQkJCQllbHNlIGdhbGVyaWUgPSAkKGdhbGVyaWUpOw0KDQoJCQkJCWdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWltZzp2aXNpYmxlJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdzcmMnKSkgew0KCQkJCQkJCSQodGhpcykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoJCQkJCQkJJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmRhdGEoJ3NyYycpKTsNCgkJCQkJCQkvLyQodGhpcykuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnLCAndXJsKCcrJCh0aGlzKS5kYXRhKCdzcmMnKSsnKScpOw0KCQkJCQkJCXZhciBjdXJyZW50SW1nID0gJCh0aGlzKQ0KCQkJCQkJCSQoJzxpbWcvPicpLmF0dHIoJ3NyYycsICQodGhpcykuZGF0YSgnc3JjJykpLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJCQkJCQkJCSQodGhpcykucmVtb3ZlKCk7IC8vIHByZXZlbnQgbWVtb3J5IGxlYWtzIGFzIEBiZW53ZWV0IHN1Z2dlc3RlZA0KCQkJCQkJCQljdXJyZW50SW1nLmNzcygnYmFja2dyb3VuZEltYWdlJywgJ3VybCgnKyQodGhpcykuYXR0cignc3JjJykrJyknKTsNCgkJCQkJCQkJY3VycmVudEltZy5yZW1vdmVDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQl9KTsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoJ3NyYycsIG51bGwpOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YVJlcXVlc3Q6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZ2FsZXJpZXNbZGF0YS1leHRlcm5hbF0nKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJCQkJdmFyIGN1cnJlbnRHYWxlcmllID0gdGhpczsNCgkJCQkJCXZhciByZXF1ZXN0ID0gJC5hamF4KHsNCgkJCQkJCQl1cmw6ICQodGhpcykuZGF0YSgnZXh0ZXJuYWwnKSwNCgkJCQkJCQl0eXBlOiAiR0VUIiwNCgkJCQkJCQlkYXRhVHlwZTogImpzb24iLA0KCQkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJCQkJCQkJZ2FsZXJpZVRwbC5kYXRhSW1wb3J0KGN1cnJlbnRHYWxlcmllLCBkYXRhLmRhdGEsIHRydWUpOw0KCQkJCQkJCX0NCgkJCQkJCX0pOw0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YUltcG9ydDogZnVuY3Rpb24oZ2FsZXJpZSwgZGF0YSwgcmVmcmVzaCkgew0KCQkJCQl2YXIgZGVmYXVsdFdpZHRoID0gJChnYWxlcmllKS5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmRhdGEoJ3RpbGUtd2lkdGgnKQ0KCQkJCQl2YXIgZGVmYXVsdEhlaWdodCA9ICQoZ2FsZXJpZSkuZmluZCgnLmdhbGVyaWUtZ3JvdXAnKS5kYXRhKCd0aWxlLWhlaWdodCcpDQoJCQkJCXZhciBnYWxpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKTsNCgkJCQkJdmFyIGh0bWwgPSAnJzsNCg0KCQkJCQkvLyBjaGFuZ2UgaW1hZ2UgY292ZXINCgkJCQkJaWYgKGRhdGEudXJsX3RoKSB7DQoJCQkJCQl2YXIgZ2FsTGluayA9ICQoJy5nYWxlcmllcy1saW5rW2RhdGEtaWQ9JyArIGdhbGlkICsgJ10nKTsNCgkJCQkJCWdhbExpbmsuZmluZCgnLmdhbGVyaWVzLWltZycpLmF0dHIoJ2RhdGEtc3JjJywgZGF0YS51cmxfdGgpLmF0dHIoJ3NyYycsIGRhdGEudXJsX3RoKS5kYXRhKCdzcmMnLCBkYXRhLnVybF90aCk7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoZ2FsTGluayk7DQoJCQkJCX0NCg0KCQkJCQkvLyBhZGQgZ2FsZXJpZXMNCgkJCQkJaWYgKGRhdGEuY2hpbGRzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5jaGlsZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5jaGlsZHNbaV07DQoJCQkJCQkJaWYgKGl0ZW0uYWN0aWYgJiYgIWl0ZW0ucGFzc3dvcmRfY29kZSkgew0KCQkJCQkJCQl2YXIgbGFiZWwgPSBpdGVtLm5hbWU7DQoJCQkJCQkJCXZhciB0aHVtYiA9IGl0ZW0udXJsX3RoOw0KCQkJCQkJCQl2YXIgaW1nID0gaXRlbS51cmw7DQoJCQkJCQkJCXZhciBpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoNCgkJCQkJCQkJLy8gY3JlYXRlIGdhbGVyaWUNCgkJCQkJCQkJdmFyIGdhbCA9ICQoJzxkaXYgY2xhc3M9ImdhbGVyaWVzIiBpZD0iZ2FsZXJpZV8nICsgaWQgKyAnIiBkYXRhLWlkPSInICsgaWQgKyAnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0iZ2FsZXJpZS1oZWFkZXIiPjxoMj4nICsgbGFiZWwgKyAnPC9oMj48L2Rpdj48ZGl2IGNsYXNzPSJnYWxlcmllLWdyb3VwIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImdhbGVyaWUtZ3JvdXAiIGRhdGEtdGlsZS13aWR0aD0iJyArIGRlZmF1bHRXaWR0aCArICciIGRhdGEtdGlsZS1oZWlnaHQ9IicgKyBkZWZhdWx0SGVpZ2h0ICsgJyIgZGF0YS1wcmVzZW50YXRpb249IiI+PC9kaXY+PC9kaXY+Jyk7DQoJCQkJCQkJCSQoJy5nYWxlcmllcy1jb250YWluZXInKS5hcHBlbmQoZ2FsKTsNCg0KCQkJCQkJCQkvLyBnbyBiYWNrIGJ0bg0KCQkJCQkJCQl2YXIgYmFjayA9ICc8YSBkYXRhLWlkPSInICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSJSZXRvdXIiIGRhdGEtY2FwdGlvbj0iUmV0b3VyIiBjbGFzcz0iZ2FsZXJpZXMtbGluayBwYXJlbnQiIGRhdGEtaWQ9IicgKyBnYWxpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJnYWxlcmllcy1ibG9jayIgY2xhc3M9ImltZ2RpdiIgPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1ibG9jay1pbnNpZGUiPiA8c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSJ0aGVtZXMvaW1hZ2ljYWwtZmFudGFzeS9pbWcvcGFyZW50LnBuZyIgYWx0PSJSZXRvdXIiIGNsYXNzPSJnYWxlcmllcy1pbWcgaW1nX3RoIiBzdHlsZT0id2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgaGVpZ2h0OicgKyBkZWZhdWx0SGVpZ2h0ICsgJ3B4OyAiPiA8L3NwYW4+IDxkaXYgY2xhc3M9ImdhbGVyaWVzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPiBSZXRvdXIgPC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvYT4nOw0KCQkJCQkJCQlnYWwuZmluZCgnLmdhbGVyaWUtZ3JvdXAnKS5hcHBlbmQoYmFjayk7DQoNCgkJCQkJCQkJLy8gZ28gdG8gZ2FsZXJpZSBidG4NCgkJCQkJCQkJaHRtbCArPSAnPGEgZGF0YS1pZD0iJyArIGlkICsgJyIgY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgZGF0YS1jYXB0aW9uPSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtbGluayBHYWxlcmllQWxidW0iIGRhdGEtaWQ9IicgKyBpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJnYWxlcmllcy1ibG9jayIgY2xhc3M9ImltZ2RpdiIgPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1ibG9jay1pbnNpZGUiPiA8c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSInICsgdGh1bWIgKyAnIiBhbHQ9IicgKyBsYWJlbCArICciIGNsYXNzPSJnYWxlcmllcy1pbWcgaW1nX3RoIiBzdHlsZT0id2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgaGVpZ2h0OicgKyBkZWZhdWx0SGVpZ2h0ICsgJ3B4OyAiPiA8L3NwYW4+IDxkaXYgY2xhc3M9ImdhbGVyaWVzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPicgKyBsYWJlbCArICc8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoNCgkJCQkJCQkJZ2FsZXJpZVRwbC5kYXRhSW1wb3J0KGdhbCwgaXRlbSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gYWRkIGltYWdlcw0KCQkJCQlpZiAoZGF0YS5pbWFnZXMpIHsNCgkJCQkJCWZvciAodmFyIGkgPSAwLCBsZW4gPSBkYXRhLmltYWdlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KCQkJCQkJCWl0ZW0gPSBkYXRhLmltYWdlc1tpXTsNCgkJCQkJCQlpZiAoaXRlbS5hY3RpZiAmJiAhaXRlbS5wYXNzd29yZF9jb2RlKSB7DQoJCQkJCQkJCXZhciBsYWJlbCA9IGl0ZW0ubmFtZTsNCgkJCQkJCQkJdmFyIHRodW1iID0gaXRlbS51cmxfdGg7DQoJCQkJCQkJCXZhciBpbWcgPSBpdGVtLnVybDsNCgkJCQkJCQkJdmFyIGlkID0gJChnYWxlcmllKS5kYXRhKCdpZCcpICsgJ18nICsgaXRlbS5pZDsNCgkJCQkJCQkJaHRtbCArPSAnPGEgaHJlZj0iJyArIGltZyArICciIGNsYXNzPSJpbWdib3giIHJlbD0iZ2FsbGVyeV8nICsgZ2FsaWQgKyAnIiBkYXRhLWZhbmN5Ym94PSJnYWxsZXJ5XycgKyBnYWxpZCArICciIGNhcHRpb249IicgKyBsYWJlbCArICciIGRhdGEtY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImdhbGVyaWVzLWxpbmsgR2FsZXJpZUltYWdlIiBkYXRhLWlkPSInICsgaWQgKyAnIj48ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt6b29tOjE7dmVydGljYWwtYWxpZ246dG9wO3RleHQtYWxpZ246Y2VudGVyOyB3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBvdmVyZmxvdzpoaWRkZW47ICJjbGFzcz0iZ2FsZXJpZXMtYmxvY2siY2xhc3M9ImltZ2RpdiI+PGRpdiBjbGFzcz0iZ2FsZXJpZXMtYmxvY2staW5zaWRlIj48c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSInICsgdGh1bWIgKyAnIiBhbHQ9IicgKyBsYWJlbCArICciIGNsYXNzPSJnYWxlcmllcy1pbWcgaW1nX3RoIiBzdHlsZT0id2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgaGVpZ2h0OicgKyBkZWZhdWx0SGVpZ2h0ICsgJ3B4OyAiPjwvc3Bhbj48ZGl2IGNsYXNzPSJnYWxlcmllcy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4nICsgbGFiZWwgKyAnPC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvYT4nOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCSQoZ2FsZXJpZSkuZmluZCgnLmdhbGVyaWUtZ3JvdXAnKS5hcHBlbmQoaHRtbCk7DQoNCgkJCQkJZ2FsZXJpZVRwbC5iaW5kKCQoZ2FsZXJpZSkpOw0KDQoJCQkJCWlmIChyZWZyZXNoKSB7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoKTsNCgkJCQkJCWdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQkJCX0NCgkJCQl9LA0KDQoJCQkJYmluZDogZnVuY3Rpb24oZ2FsZXJpZSkgew0KCQkJCQlpZiAoIWdhbGVyaWUpIGdhbGVyaWUgPSAkKCcuZ2FsZXJpZXMtY29udGFpbmVyJyk7DQoJCQkJCWVsc2UgZ2FsZXJpZSA9ICQoZ2FsZXJpZSk7DQoNCg0KCQkJCQlnYWxlcmllLmZpbmQoJy5nYWxlcmllcy1pbWcnKS5hZGRDbGFzcygndHJhbnNwYXJlbnQnKTsNCg0KCQkJCQlnYWxlcmllLmZpbmQoJy5nYWxlcmllcy1pbWcnKS5ub3QoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoISQodGhpcykuZGF0YSgic3JjIikpIHsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoInNyYyIsIHRoaXMuc3JjKTsNCgkJCQkJCQl0aGlzLnNyYyA9ICJqcy9ibGFuay5naWYiOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCg0KCQkJCQl2YXIgZ2FsZXJpZXNMaW5rID0gZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtbGluazpub3QoLmJpbmRlZCknKTsNCgkJCQkJZ2FsZXJpZXNMaW5rLmFkZENsYXNzKCdiaW5kZWQnKTsNCgkJCQkJZ2FsZXJpZXNMaW5rLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoKTsgfSwgMTAwKTsNCgkJCQkJfSk7DQoNCg0KCQkJCQkvLyBDb250ZW51IGRlIGdhbGVyaWUNCgkJCQkJZ2FsZXJpZXNMaW5rLmZpbHRlcignOm5vdCguc2VjdXJlKScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQkJZ2FsZXJpZVRwbC5zaG93R2FsZXJpZSh0aGlzLCAkKHRoaXMpLmRhdGEoJ2lkJykpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9KTsNCg0KCQkJCQkvLyBBY2Pvv71zIHNlY3VyZQ0KCQkJCQlnYWxlcmllc0xpbmsuZmlsdGVyKCcuc2VjdXJlJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQl3aW5kb3cuc2VjdXJlQWNjZXNzSXRlbSgkKHRoaXMpLmRhdGEoJ2lkJykpOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCX07DQoNCgkJCXdpbmRvdy5nYWxlcmllVHBsID0gZ2FsZXJpZVRwbDsNCg0KCQkJd2luZG93LnJlcG9ydEl0ZW0gPSBmdW5jdGlvbihpZCkgew0KICAgICAgICAgICAgICAgIGlmICghaXNOdW1lcmljKGlkKSkgew0KICAgICAgICAgICAgICAgICAgICBpZCA9IGlkLmRhdGEoJ2lkJyk7DQogICAgICAgICAgICAgICAgfQ0KDQoJCQkJJC53aW5kb3coew0KCQkJCQlpZDogJ3JlcG9ydEl0ZW0nK2lkLA0KCQkJCQl0aXRsZTogJ1JlcG9ydGVyIHVuIHByb2JsZW1lIGF2ZWMgdW5lIGltYWdlJywNCgkJCQkJdXJsOiAnYWRtaW4vZ2FsZXJpZXMvaW1hZ2UvcmVwb3J0LycraWQrJz9vdXRwdXQ9dGV4dCcsDQoJCQkJCWljb246ICdzdGF0dXMtd2FybmluZycsDQoJCQkJCW1ldGhvZDogJ2FqYXgnLA0KCQkJCQltYXhXaWR0aDogLTEsCQkgLy8gdGhlIG1pbmltdW0gd2lkdGgsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQoJCQkJCW1heEhlaWdodDogLTEsCQkgLy8gdGhlIG1pbmltdW0gaGVpZ2h0LCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KCQkJCQlzaG93Rm9vdGVyOiBmYWxzZSwNCgkJCQkJbWF4aW1pemFibGU6IGZhbHNlLA0KCQkJCQljbG9zYWJsZTogdHJ1ZSwNCgkJCQkJbWluaW1pemFibGU6IGZhbHNlLA0KCQkJCQlzaG93TW9kYWw6IHRydWUsDQoJCQkJCXdpZHRoOiA5MDAsDQoJCQkJCWhlaWdodDogNTc1LA0KCQkJCQljaGVja0JvdW5kYXJ5OiB0cnVlLA0KCQkJCQl3aXRoaW5Ccm93c2VyV2luZG93OiBmYWxzZSwNCgkJCQkJb25JZnJhbWVFbmQ6IGZ1bmN0aW9uKCkge30sDQoJCQkJCW9uQ2xvc2U6IGZ1bmN0aW9uKCkgew0KCQkJCQkJYnJvd3NlckFjdGlvblJ1bigncmVmcmVzaCcpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9Ow0KICAgICAgICAgICAgd2luZG93LnNlY3VyZUFjY2Vzc0l0ZW0gPSBmdW5jdGlvbihpZCkgew0KICAgICAgICAgICAgICAgICQud2luZG93KHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6ICdzZWN1cmVBY2Nlc3NJdGVtJytpZCwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBY2MmZWdyYXZlO3MgcyZlYWN1dGU7Y3VyaXMmZWFjdXRlOycsDQogICAgICAgICAgICAgICAgICAgIHVybDogJ2FkbWluL2dhbGVyaWVzL2ltYWdlL3VubG9jay8nK2lkLA0KICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW1nLXNraW4vc2V0cy9zdmcvbWVkaXVtL3NlY3VyZS1rZXkuc3ZnJywNCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnYWpheCcsDQogICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAtMSwJCSAvLyB0aGUgbWluaW11bSB3aWR0aCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAtMSwJCSAvLyB0aGUgbWluaW11bSBoZWlnaHQsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQogICAgICAgICAgICAgICAgICAgIHNob3dGb290ZXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLA0KCQkJCQltaW5pbWl6YWJsZTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIHNob3dNb2RhbDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDU2MCwNCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1NTAsDQogICAgICAgICAgICAgICAgICAgIGNoZWNrQm91bmRhcnk6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIHdpdGhpbkJyb3dzZXJXaW5kb3c6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBvbklmcmFtZUVuZDogZnVuY3Rpb24oKSB7fSwNCiAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyQWN0aW9uUnVuKCdyZWZyZXNoJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH07DQoNCgkJCSQoIHdpbmRvdyApLnJlc2l6ZShmdW5jdGlvbigpIHsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJfSk7DQoNCgkJCSQoZnVuY3Rpb24gKCkgew0KCQkJCWdhbGVyaWVUcGwuYmluZCgpOw0KCQkJCWdhbGVyaWVUcGwudXBkYXRlVmlzaWJsZSgpOw0KCQkJCWdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQl9KTsNCg0KCQkJJCh3aW5kb3cpLmxvYWQoZnVuY3Rpb24oKSB7DQoJCQkJZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7IH0sIDUwMCk7DQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOyB9LCAxMDAwKTsNCg0KCQkJCWdhbGVyaWVUcGwuZGF0YVJlcXVlc3QoKTsNCgkJCX0pOw0KDQoNCgkJCS8vPC9zY3JpcHQ+