# Name: ebl-image-edit v2.0 # Type: Admin/Client side plugin # Advanced Image Editing Plugin for Textpattern # Author: Eric Limegrover # URL: http://www.syserror.net/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE0OiJlYmwtaW1hZ2UtZWRpdCI7czo2OiJhdXRob3IiO3M6 MTU6IkVyaWMgTGltZWdyb3ZlciI7czoxMDoiYXV0aG9yX3VyaSI7czoyNDoiaHR0cDovL3d3 dy5zeXNlcnJvci5uZXQvIjtzOjc6InZlcnNpb24iO3M6MzoiMi4wIjtzOjExOiJkZXNjcmlw dGlvbiI7czo0NToiQWR2YW5jZWQgSW1hZ2UgRWRpdGluZyBQbHVnaW4gZm9yIFRleHRwYXR0 ZXJuIjtzOjQ6ImNvZGUiO3M6Mjc1NTk6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicp DQoJew0KCQlhZGRfcHJpdnMoJ2VibGltZ2VkaXRleHQnLCAnMScpOyANCgkJcmVnaXN0ZXJf dGFiKCJleHRlbnNpb25zIiwgImVibGltZ2VkaXRleHQiLCAiRUJMIEltYWdlIEVkaXQiKTsN CgkJcmVnaXN0ZXJfY2FsbGJhY2soImVibF9pbWFnZV9lZGl0X2V4dCIsICJlYmxpbWdlZGl0 ZXh0Iik7DQoNCglzd2l0Y2ggKGdwcygnZXZlbnQnKSkNCgl7DQoJCWNhc2UgJ2VibHJvdGF0 ZWxlZnQnOg0KCQkJZWJsX2ltZ19lZGl0KGdwcygnaW1naWQnKSwgJ2xlZnQnLCAncm90YXRl Jyk7IGV4aXQoKTsNCgkJCWJyZWFrOw0KCQljYXNlICdlYmxyb3RhdGVyaWdodCc6DQoJCQll YmxfaW1nX2VkaXQoZ3BzKCdpbWdpZCcpLCAncmlnaHQnLCAncm90YXRlJyk7IGV4aXQoKTsN CgkJCWJyZWFrOw0KCQljYXNlICdlYmxyb3RhdGV1cCc6DQoJCQllYmxfaW1nX2VkaXQoZ3Bz KCdpbWdpZCcpLCAndXAnLCAncm90YXRlJyk7IGV4aXQoKTsNCgkJCWJyZWFrOw0KCQljYXNl ICdlYmxpbWdjcm9wJzoNCgkJCWVibF9pbWdfZWRpdChncHMoJ2ltZ2lkJyksICcnLCAnY3Jv cCcpOyBleGl0KCk7DQoJCQlicmVhazsNCgkJY2FzZSAnZWJsaW1nY3JvcCc6DQoJCQllYmxf cHJvY2Vzc1VwbG9hZChncHMoJ3VwbG9hZFR5cGUnKSk7DQoJCQlicmVhazsNCgkJY2FzZSAn ZWJsdG1iY3JvcCc6DQoJCQllYmxfaW1nX2VkaXQoZ3BzKCdpbWdpZCcpLCAnJywgJ3RodW1i bmFpbCcpOyBleGl0KCk7DQoJCQlicmVhazsNCgkJY2FzZSAnZWJscnN6aW1nJzoNCgkJCWVi bF9pbWdfZWRpdChncHMoJ2ltZ2lkJyksICcnLCAncnN6Jyk7IGV4aXQoKTsNCgkJCWJyZWFr Ow0KCQljYXNlICdlYmxiYWNrdXBpbWcnOg0KCQkJZWJsYmFja3VwaW1nKGdwcygnaW1naWQn KSk7DQoJCQlicmVhazsNCgkJY2FzZSAnZWJscmVzdG9yZWltZyc6DQoJCQllYmxyZXN0b3Jl aW1nKGdwcygnaW1naWQnKSk7DQoJCQlicmVhazsNCgl9DQp9DQoNCmZ1bmN0aW9uIGVibF9p bWFnZV9lZGl0X2V4dCgpIA0Kew0KCQ0KCSRzdGVwID0gZ3BzKCdzdGVwJyk7DQoJDQoJJG1l c3NhZ2UgPSAoaXNfY2FsbGFibGUoJHN0ZXApKSA/ICRzdGVwKCkgOiAnJzsNCgkNCgllY2hv IHBhZ2V0b3AoIkVCTCBJbWFnZSBFZGl0IFByZWZlcmVuY2VzIiwgJG1lc3NhZ2UpOw0KCQ0K CWVjaG8gCSc8ZGl2IHN0eWxlPSJtYXJnaW46IDAgYXV0bzsgd2lkdGg6IDQwMHB4OyI+Jy5u Lg0KCQkJZWJsX2xpc3RfY3JvcFN0eWxlcygpLg0KCQkJJzwvZGl2Pic7CQ0KfQ0KDQpmdW5j dGlvbiBlYmxfbGlzdF9jcm9wU3R5bGVzKCkNCnsNCglnbG9iYWwgJHR4cF91c2VyLCAkcGF0 aF90b19zaXRlLCAkaW1nX2RpcjsNCgkNCgkkYmFja3VwZGlyIAk9ICRwYXRoX3RvX3NpdGUg LiAnLycgLiAkaW1nX2RpciAuICcvYmFja3VwLyc7DQoJCWlmKCFmaWxlX2V4aXN0cygkYmFj a3VwZGlyKSkgew0KCQkJDQoJCSRjcmVhdGVFQkx0YWJsZSA9IHNhZmVfcXVlcnkoIkNSRUFU RSBUQUJMRSBgIi5QRlguImVibF9jcm9wYCAoIi4NCgkJCQkJCQkJCSJgbmFtZWAgdmFyY2hh cig2NCkgTk9UIE5VTEwsIi4NCgkJCQkJCQkJCSJgd2lkdGhgIHZhcmNoYXIoMTYpIE5PVCBO VUxMLCIuDQoJCQkJCQkJCQkiYGhlaWdodGAgdmFyY2hhcigxNikgTk9UIE5VTEwsIi4NCgkJ CQkJCQkJCSJgdGh1bWJgIHZhcmNoYXIoMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsIi4NCgkJ CQkJCQkJCSJVTklRVUUgS0VZIGBuYW1lYCAoYG5hbWVgKSIuDQoJCQkJCQkJCQkiKTsiKTsN CgkJCQkJCQkJCQ0KCQkkcnMgPSBzYWZlX2luc2VydCgnZWJsX2Nyb3AnLCAiYG5hbWVgID0g J0ltYWdlIENyb3AnLCBgd2lkdGhgID0gJzUwMCcsYGhlaWdodGAgPSAnNTAwJywgYHRodW1i YCA9ICcwJyIpOw0KCQkkcnMgPSBzYWZlX2luc2VydCgnZWJsX2Nyb3AnLCAiYG5hbWVgID0g J1RodW1ibmFpbCBTcXVhcmUnLCBgd2lkdGhgID0gJzEwMCcsYGhlaWdodGAgPSAnMTAwJywg YHRodW1iYCA9ICcxJyIpOw0KDQoJCQkkbWtkaXIgPSAoQG1rZGlyKCRiYWNrdXBkaXIpKSA/ IFRSVUUgOiBGQUxTRTsNCgkJCWlmKCRta2RpcikgeyANCgkJCQllY2hvICI8cCAgc3R5bGU9 XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IFwiPiRiYWNrdXBkaXIgZGlkIG5vdCBleGlzdCBwcmV2 aW91c2x5LiBOb3cgY3JlYXRlZC48L3A+IjsNCgkJCX0gZWxzZSB7DQoJCQkJZWNobyAiPHAg c3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtd2VpZ2h0OiBib2xkOyBcIj5VbmFi bGUgdG8gY3JlYXRlICRiYWNrdXBkaXIuIFBsZWFzZSBjaGVjayB5b3VyIGZvbGRlciBwZXJt aXNzaW9ucy48L3A+IjsNCgkJCX0NCgkJfQ0KDQoNCiANCgllY2hvIG4ubi5oZWQoZ1R4dCgn Q3JvcCBTdHlsZXMnKSwgMSwgJyBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4t dG9wOjJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7IicpLg0KCQluLm4uc3RhcnRUYWJsZSgnbGlz dCcpLg0KCQluLnRyKA0KCQkJbi5oQ2VsbChnVHh0KCduYW1lJykpLg0KCQkJbi5oQ2VsbChn VHh0KCd3aWR0aCcpKS4NCgkJCW4uaENlbGwoKS4NCgkJCW4uaENlbGwoZ1R4dCgnaGVpZ2h0 JykpLg0KCQkJbi5oQ2VsbChnVHh0KCd0aHVtYm5haWwnKSkuDQoJCQluLmhDZWxsKGdUeHQo J2RlbGV0ZScpKQ0KCQkpOw0KDQoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCcqJywgJ2VibF9j cm9wJywgJzE9MSBPUkRFUiBCWSBgbmFtZWAnKTsNCg0KCSRvdXQgPSAnJzsNCgkNCglpZiAo JHJzKQ0KCXsgDQoJCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkNCgkJeyANCgkJCSRpc0No ZWNrZWQgPSAoJGFbJ3RodW1iJ10gPT0gMSkgPyAneWVzJyA6ICdubyc7DQoJCQkkb3V0IC49 IG4udHIoDQoJCQkJCXRkKCBodG1sc3BlY2lhbGNoYXJzKCRhWyduYW1lJ10pKS4NCgkJCQkJ dGQoIGh0bWxzcGVjaWFsY2hhcnMoJGFbJ3dpZHRoJ10pKS4NCgkJCQkJdGQoIGh0bWxzcGVj aWFsY2hhcnMoJyBYICcpKS4NCgkJCQkJdGQoIGh0bWxzcGVjaWFsY2hhcnMoJGFbJ2hlaWdo dCddKSkuDQoJCQkJCXRkKCAkaXNDaGVja2VkKS4NCgkJCQkJdGQoIA0KCQkJCQkJZExpbmso J2VibGltZ2VkaXRleHQnLCAnZWJsX2Nyb3BkZWxldGUnLCAnc3R5bGVuYW1lJywgJGFbJ25h bWUnXSkNCgkJCQkJKQ0KCQkJCSk7DQoJCX0NCgl9DQoJDQoJZWNobyBmb3JtKCRvdXQpOw0K CQ0KCWVjaG8gbi50cigNCgkJZm9ybSgNCgkJCXRkKCBmSW5wdXQoJ3RleHQnLCAnbmFtZScs ICcnLCAnZWRpdCcsJycsJycsMTApICkuDQoJCQl0ZCggZklucHV0KCd0ZXh0JywgJ3dpZHRo JywgJycsICdlZGl0JywnJywnJyw1KSApLg0KCQkJdGQoKS4NCgkJCXRkKCBmSW5wdXQoJ3Rl eHQnLCAnaGVpZ2h0JywgJycsICdlZGl0JywnJywnJyw1KSApLg0KCQkJdGQoICc8aW5wdXQg bmFtZT0iZWJsaXN0bWIiIGNsYXNzPSJjaGVja2JveCIgdHlwZT0iY2hlY2tib3giPicpLg0K CQkJdGQoIGZJbnB1dCgnc3VibWl0JywgJ2FkZCcsIGdUeHQoJ2FkZCcpLCAnc21hbGxlcmJv eCcpICkuDQoJCQluLmVJbnB1dCgnZWJsaW1nZWRpdGV4dCcpLg0KCQkJbi5zSW5wdXQoJ2Vi bF9jcm9wc2F2ZW5ldycpDQoJCSkNCgkpOw0KDQoJZWNobyBuLmVuZFRhYmxlKCk7DQp9DQoN CmZ1bmN0aW9uIHNlbGVjdFN0eWxlcygkdGh1bWIgPSAnMCcpIHsNCg0KCSRycyA9IHNhZmVf cm93c19zdGFydCgnKicsICdlYmxfY3JvcCcsICd0aHVtYj0nLiR0aHVtYi4nIE9SREVSIEJZ IGBuYW1lYCcpOw0KDQoJJG91dCA9ICI8c2VsZWN0IG5hbWU9XCJjdXN0b21zaXplXCIgaWQ9 XCJjdXN0b21zaXplJHRodW1iXCI+JyArICIubi4NCgkJICAgIic8b3B0aW9uIHZhbHVlPVwi Q3VzdG9tXCI+Q3VzdG9tPC9vcHRpb24+JyArICIubjsNCgkNCglpZiAoJHJzKQ0KCXsgDQoJ CXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkNCgkJew0KCQkJJHdpZHRoCT0gJGFbJ3dpZHRo J107DQoJCQkkaGVpZ2h0CT0gJGFbJ2hlaWdodCddOw0KCQkJJG5hbWUgCT0gJGFbJ25hbWUn XTsNCg0KCQkJJG91dCAuPSAiJzxvcHRpb24gdmFsdWU9Ii4kd2lkdGguIngiLiRoZWlnaHQu Ilw+Ii5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iIDogJHdpZHRoIHggJGhlaWdodCA8L29w dGlvbj4nICsgIi5uOw0KCQl9DQoJfQ0KCSRvdXQgLj0gIic8L3NlbGVjdD4iOw0KCQ0KCXJl dHVybiAkb3V0Ow0KfQ0KZnVuY3Rpb24gZWJsX2Nyb3BzYXZlbmV3KCkNCnsNCg0KCWV4dHJh Y3QoZG9TbGFzaChwc2EoYXJyYXkoJ25hbWUnLCAnd2lkdGgnLCdoZWlnaHQnLCdlYmxpc3Rt YicpKSkpOw0KCQ0KCWlmICgkbmFtZSAmJiBpc19udW1lcmljKCR3aWR0aCkgJiYgaXNfbnVt ZXJpYygkaGVpZ2h0KSkNCgl7IA0KCQkkZWJsaXN0bWIgPSAoJGVibGlzdG1iID09ICJvbiIp ID8gMSA6IDA7DQoJCQ0KCQkkcnMgPSBAc2FmZV9pbnNlcnQoJ2VibF9jcm9wJywgIg0KCQkJ YG5hbWVgCSA9ICckbmFtZScsDQoJCQlgd2lkdGhgCSA9ICckd2lkdGgnLA0KCQkJYGhlaWdo dGAgPSAnJGhlaWdodCcsDQoJCQlgdGh1bWJgICA9ICckZWJsaXN0bWInIik7DQoNCgkJcmV0 dXJuICgkcnMpID8NCgkJCSJOZXcgY3JvcCBzdHlsZSBjcmVhdGVkIiA6IA0KCQkJIjxiPkVy cm9yOjwvYj4gRHVwbGljYXRlIE5hbWUiOwkNCgkJDQoJfSBlbHNlIHsNCgkJDQoJCXJldHVy biAiPGI+V2lkdGg8L2I+IGFuZCA8Yj5IZWlnaHQ8L2I+IG11c3QgYmUgbnVtZXJpYyB2YWx1 ZXMiOw0KCX0NCgkNCglyZXR1cm4gRkFMU0U7DQp9DQoNCmZ1bmN0aW9uIGVibF9jcm9wZGVs ZXRlKCkNCnsNCgkkbmFtZSA9IHBzKCdzdHlsZW5hbWUnKTsNCglyZXR1cm4gKHNhZmVfZGVs ZXRlKCdlYmxfY3JvcCcsICJgbmFtZWAgPSAnIi5kb1NsYXNoKCRuYW1lKS4iJyIpKSA/IA0K CQkiPGI+RGVsZXRlZDwvYj4gJG5hbWUiIDogDQoJCSI8Yj5FcnJvcjwvYj4gVW5hYmxlIHRv IGRlbGV0ZSAkbmFtZSI7IA0KfQ0KDQoNCmlmKGdwcygnc3RlcCcpID09ICdpbWFnZV9lZGl0 JyB8fCBncHMoJ3N0ZXAnKSA9PSAndGh1bWJuYWlsX2luc2VydCcgfHwgZ3BzKCdzdGVwJykg PT0gJ2ltYWdlX3JlcGxhY2UnIHx8IGdwcygnc3RlcCcpID09ICd0aHVtYm5haWxfY3JlYXRl JyB8fCBncHMoJ3N0ZXAnKSA9PSAndGh1bWJuYWlsX2RlbGV0ZScpIHsNCglyZWdpc3Rlcl9j YWxsYmFjaygnZWJsX2ltZ2Nyb3AnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KfQ0K DQpmdW5jdGlvbiBlYmxfaW1nY3JvcCgpIHsNCg0KCWdsb2JhbCAkcGF0aF90b19zaXRlLCRp bWdfZGlyOw0KDQoJJGlkPWdwcygnaWQnKTsNCgkkaW1hZ2VkaXIgPSBodSAuICRpbWdfZGly IC4gJy8nOw0KDQoJJHJzID0gQHNhZmVfcm93KCIqLCB1bml4X3RpbWVzdGFtcChkYXRlKSBh cyB1RGF0ZSIsICJ0eHBfaW1hZ2UiLCAiaWQgPSAkaWQiKTsNCg0KCWlmICgkcnMpIHsNCgkJ ZXh0cmFjdCgkcnMpOw0KCQkkZmlsZW5hbWUgPSAkaWQuJGV4dDsNCgkJJGltZ3NyYyA9ICRp bWFnZWRpci4kZmlsZW5hbWU7DQoJCSR0bWJzcmMgPSAkaW1hZ2VkaXIuJGlkLid0Jy4kZXh0 Ow0KCX0NCgkNCgkkY3VzdG9tVGh1bWJTaXplID0gc2VsZWN0U3R5bGVzKDEpOw0KCSRjdXN0 b21JbWdTaXplID0gc2VsZWN0U3R5bGVzKDApOw0KCQ0KCWVjaG8gPDw8IEVPRg0KPHNjcmlw dCBzcmM9Impjcm9wL2pxdWVyeS5KY3JvcC5wYWNrLmpzIj48L3NjcmlwdD4NCjxsaW5rIGhy ZWY9Impjcm9wL2pxdWVyeS5KY3JvcC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4 dC9jc3MiIC8+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KI2VibGltZ3Byb2Nlc3Mgew0K CW1hcmdpbjogNXB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOyANCglmb250LXNpemU6IDE0cHQ7 DQoJY29sb3I6ICM1NTAwMDA7DQoJcGFkZGluZzogMCAwIDAgMjBweDsNCgliYWNrZ3JvdW5k OiB1cmwoJ2pjcm9wL3Byb2Nlc3NpbmcuZ2lmJykgbGVmdCBuby1yZXBlYXQ7DQp9DQphIHsg cGFkZGluZzogMCAwIDNweDt9DQphOnZpc2l0ZWQge30gYTpob3ZlciB7fSBhOmFjdGl2ZSB7 IGJvcmRlcjogMDsgfQ0KYTpmb2N1cyB7IG91dGxpbmU6IDA7IHRleHQtZGVjb3JhdGlvbjog bm9uZTt9IA0KPC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiQo ZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeyAvLyBpbml0IGV2ZXJ5dGhpbmcNCg0KCSQo IiNsaXN0IHRkOmZpcnN0IGltZyIpLmF0dHIoJ2lkJywnbWFpbkltZycpOyAvLyBHaXZlIG91 ciBpbWFnZSBhbiBJRA0KCSQoIiNsaXN0IHRkOmZpcnN0IikuYXR0cignaWQnLCdtYWluSW1n VEQnKTsgLy8gbmFtZSB0aGUgdGFibGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZC4NCg0K CSQoJyNpbWFnZS10aHVtYm5haWwgdGQ6Zmlyc3QgaW1nJykuYXR0cignaWQnLCd0aHVtYicp OyAvLyBHaXZlIG91ciB0aHVtYm5haWwgaW1hZ2UgYW4gSUQNCgkkKCcjaW1hZ2UtdGh1bWJu YWlsIHRkOmZpcnN0JykuYXR0cignaWQnLCd0aHVtYlREJyk7IC8vIG5hbWUgdGhlIFREIHRo YXQgY29udGFpbnMgdGhlIGltYWdlIHNvIHdlIGNhbiBzd2FwIGl0IG91dC4NCg0KCWlmKCEg JCgnI3RodW1iVEQnKS5sZW5ndGggKSB7ICAkKCIjbGlzdCB0ZDplcSgxKSIpLmF0dHIoJ2lk JywndGh1bWJURCcpOyAgfQ0KDQoJJCgnI21haW5JbWdURCcpLnByZXBlbmQoJzxkaXYgaWQ9 ImVibGNyb3B1aSI+PC9kaXY+Jyk7DQoJJCgnI2VibGNyb3B1aScpLmFwcGVuZCgnPGZpZWxk c2V0IHN0eWxlPSJtaW4td2lkdGg6IDUwMHB4OyI+PGxlZ2VuZD5FZGl0IEltYWdlPC9sZWdl bmQ+PGRpdiBpZD0iZWJsY29udGFpbmVyIj48L2Rpdj48L2ZpZWxkc2V0PicpOw0KCQ0KCSQo JyNlYmxjb250YWluZXInKS5jc3MoeydtYXJnaW4nOicxMHB4J30pOw0KCSQoJyNlYmxjb250 YWluZXInKS5hcHBlbmQoDQoJCQkJCQknPHA+JyArIA0KCQkJCQkJICc8YSBocmVmPSIjIiBp ZD0iZWJsY3JvcGxuayIgPkNyb3A8L2E+IHwgJyArIA0KCQkJCQkJICc8YSBocmVmPSIjIiBp ZD0iZWJsdG1ibG5rIiA+VGh1bWJuYWlsPC9hPiB8ICcgKyANCgkJCQkJCSAnPGEgaHJlZj0i IyIgaWQ9ImVibHJvdGF0ZWxuayIgPlJvdGF0ZTwvYT4gfCAnICsNCgkJCQkJCSAnPGEgaHJl Zj0iIyIgaWQ9ImVibHJlc2l6ZWxuayIgPlJlc2l6ZTwvYT4gfCAnICsgDQoJCQkJCQkgJzxh IGhyZWY9IiMiIGlkPSJlYmxiYWNrdXBsbmsiID5CYWNrdXA8L2E+JyArIA0KCQkJCQkJJzwv cD4nDQoJCQkJCQkpOw0KCQ0KCSQoJyNlYmxjb250YWluZXInKS5hcHBlbmQoJzxkaXYgaWQ9 ImVibGNyb3BkYXRhIj48L2Rpdj48ZGl2IGlkPSJlYmxjcm9wY3RybCI+PC9kaXY+PGRpdiBp ZD0iZWJsdG1iY3RybCI+PC9kaXY+PGRpdiBpZD0iZWJscm90YXRlY3RybCI+PC9kaXY+PGRp diBpZD0iZWJscmVzaXplIj48L2Rpdj48ZGl2IGlkPSJlYmxiYWNrdXBpbWciPjwvZGl2Pjxk aXYgaWQ9ImVibGhpZGRlbmRhdGEiPjwvZGl2PjxkaXYgaWQ9ImVibGltZ3Byb2Nlc3MiPiBQ cm9jZXNzaW5nLi4uPC9kaXY+Jyk7DQoJDQoJJCgnI2VibGNyb3BjdHJsJykuYXBwZW5kKA0K CQkJCQkJCQkgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJlYmxjcm9wSGgiIG5hbWU9ImVi bGNyb3BIIiB2YWx1ZT0iIiAvPicgKw0KCQkJCQkJCQkgJzxpbnB1dCB0eXBlPSJoaWRkZW4i IGlkPSJlYmxjcm9wV2giIG5hbWU9ImVibGNyb3BXIiB2YWx1ZT0iIiAvPicgKw0KCQkJCQkJ CQkgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJlYmxjcm9wWGgiIG5hbWU9ImVibGNyb3BY aCIgdmFsdWU9IiIgLz4nICsNCgkJCQkJCQkJICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0i ZWJsY3JvcFloIiBuYW1lPSJlYmxjcm9wWWgiIHZhbHVlPSIiIC8+Jw0KCQkJCQkJCSk7DQoJ DQoJJCgnI2VibGNyb3BjdHJsJykuYXBwZW5kKA0KCQkJCQkJCQknPHA+VXNlIHByZWRlZmlu ZWQgc2l6ZTogJGN1c3RvbUltZ1NpemUgfCA8aW5wdXQgbmFtZT0iYXNwZWN0cmF0aW8iIHR5 cGU9ImNoZWNrYm94IiBpZD0iaW1nYXNwZWN0cmF0aW8iIHZhbHVlPSIiIC8+IExvY2sgQXNw ZWN0IFJhdGlvIDwvcD4nICsNCgkJCQkJCQkJJzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9 IiRpZCIgaWQ9ImVibGltZ2Nyb3AiIHZhbHVlPSJDcm9wIE9yaWdpbmFsIiBjbGFzcz0ic21h bGxlcmJveCIgLz4nDQoJCQkJCQkJKTsNCgkNCgkkKCcjZWJsdG1iY3RybCcpLmFwcGVuZCgJ CQkJCSAgICAgCQ0KCQkJCQkJCQknPC9wPjxwPlVzZSBwcmVkZWZpbmVkIHNpemU6ICRjdXN0 b21UaHVtYlNpemUgfCAnICsgDQoJCQkJCQkJCSc8aW5wdXQgbmFtZT0iYXNwZWN0cmF0aW8i IHR5cGU9ImNoZWNrYm94IiBpZD0idG1iYXNwZWN0cmF0aW8iIHZhbHVlPSIiIC8+IExvY2sg QXNwZWN0IFJhdGlvIDwvcD48L3A+PHA+IFRodW1ibmFpbCBEaW1lbnNpb25zOiAnICsgDQoJ CQkJCQkJCSAnKCBXOiA8aW5wdXQgbmFtZT0iZWJsdG1iVyIgdHlwZT0idGV4dCIgaWQ9ImVi bHRtYlciIHNpemU9IjUiIG1heGxlbmd0aD0iNCIgdmFsdWU9IjEwMCIgLz4gKSB4ICcgKw0K CQkJCQkJCQkgJyggSDogPGlucHV0IG5hbWU9ImVibHRtYkgiIHR5cGU9InRleHQiIGlkPSJl Ymx0bWJIIiBzaXplPSI1IiBtYXhsZW5ndGg9IjQiIHZhbHVlPSIxMDAiIC8+ICknICsgDQoJ CQkJCQkJCSAnfCA8aW5wdXQgbmFtZT0iY3JvcHRodW1iIiB0eXBlPSJjaGVja2JveCIgaWQ9 ImNyb3B0aHVtYiIgY2hlY2tlZD0idHJ1ZSIvPiBSZXNpemUgVGh1bWJuYWlsICcgKyANCgkJ CQkJCQkJJzwvcD48cD4nICsgIA0KCQkJCQkJCQkgJzxpbnB1dCB0eXBlPSJidXR0b24iIG5h bWU9IiRpZCIgaWQ9ImVibHRtYmNyb3AiIHZhbHVlPSJDcmVhdGUgVGh1bWJuYWlsIiBjbGFz cz0ic21hbGxlcmJveCIgLz4nICsgDQoJCQkJCQkJCSc8L3A+Jw0KCQkJCQkJCSk7DQoJDQoJ JCgnI2VibHJvdGF0ZWN0cmwnKS5hcHBlbmQoDQoJCQkJCQkJCSc8cD5Sb3RhdGUgPGlucHV0 IHR5cGU9ImJ1dHRvbiIgbmFtZT0iJGlkIiBpZD0icm90YXRlcmlnaHQiIHZhbHVlPSJDbG9j a3dpc2UgOTAmZGVnOyIgY2xhc3M9InNtYWxsZXJib3giIC8+ICcgKw0KCQkJCQkJCQkgJzxp bnB1dCB0eXBlPSJidXR0b24iIG5hbWU9IiRpZCIgaWQ9InJvdGF0ZWxlZnQiIHZhbHVlPSJD b3VudGVyY2xvY2t3aXNlIDkwJmRlZzsgIiBjbGFzcz0ic21hbGxlcmJveCIgLz4gJyArDQoJ CQkJCQkJCSAnPGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iJGlkIiBpZD0icm90YXRldXAi IHZhbHVlPSIxODAgJmRlZzsgIiBjbGFzcz0ic21hbGxlcmJveCIgLz4nICsgDQoJCQkJCQkJ CSc8L3A+Jw0KCQkJCQkJCSk7DQoJCQkJCQkJDQoJJCgnI2VibGJhY2t1cGltZycpLmFwcGVu ZCgNCgkJCQkJCQkJJzxwPjxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9IiRpZCIgaWQ9ImVi bGJhY2t1cCIgdmFsdWU9IkJhY2t1cCIgY2xhc3M9InNtYWxsZXJib3giIC8+ICcgKw0KCQkJ CQkJCQknPGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iJGlkIiBpZD0iZWJscmVzdG9yZSIg dmFsdWU9IlJlc3RvcmUiIGNsYXNzPSJzbWFsbGVyYm94IiAvPicgKyANCgkJCQkJCQkJJzwv cD4nDQoJCQkJCQkJKTsNCgkNCgkkKCcjZWJscmVzaXplJykuYXBwZW5kKA0KCQkJCQkJCQkn PHA+Q3VycmVudCBJbWFnZSBTaXplIDogV1sgPHNwYW4gaWQ9Im9yaWdXIj48L3NwYW4+IF0g eCBIWyA8c3BhbiBpZD0ib3JpZ0giPjwvc3Bhbj4gXTwvcD4nICsgDQoJCQkJCQkJCSc8cD48 bGFiZWwgZm9yPSJlYmxyc3pXIj5XaWR0aDogPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIg bmFtZT0iZWJscnN6VyIgaWQ9ImVibHJzelciIC8+IHggJyArDQoJCQkJCQkJCSAnPGxhYmVs IGZvcj0iZWJscnN6SCI+SGVpZ2h0OiA8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1l PSJlYmxyc3pIIiBpZD0iZWJscnN6SCIgLz4gJyArDQoJCQkJCQkJIAkgJzxpbnB1dCB0eXBl PSJidXR0b24iIG5hbWU9IiRpZCIgaWQ9ImVibHJzemltZyIgdmFsdWU9IlJlc2l6ZSIgY2xh c3M9InNtYWxsZXJib3giIC8+JyArDQoJCQkJCQkJCSc8L3A+Jw0KCQkJCQkJCSk7DQoJDQoJ JCgnI2VibGNyb3BkYXRhJykuYXBwZW5kKA0KCQkJCQkJCQknPHA+Q3VycmVudCBDcm9wIEFy ZWEgKFc6IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiIGlkPSJlYmxjcm9wVyI+ MDwvc3Bhbj4pIHggKEg6IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiIGlkPSJl Ymxjcm9wSCI+MDwvc3Bhbj4pPC9wPicNCgkJCQkJCQkpOw0KCQ0KCSQoJyNlYmxjcm9wY3Ry bCwjZWJscm90YXRlY3RybCwjZWJscmVzaXplLCNlYmx0bWJjdHJsLCNlYmxjcm9wZGF0YSwj ZWJsaW1ncHJvY2VzcywjZWJsYmFja3VwaW1nJykuaGlkZSgpOw0KCQ0KCQ0KCS8vIHNldCBv dXIgZGVmYXVsdHMNCgl3aW5kb3cuY3JvcCA9IGZhbHNlOw0KCXdpbmRvdy50bWJjcm9wID0g ZmFsc2U7DQoNCgkkKCcjbWFpbkltZycpLndyYXAoJzxkaXYgaWQ9ImltZ0RpdiI+PC9kaXYn KTsNCgkkKCcjaW1nYXNwZWN0cmF0aW8sI3RtYmFzcGVjdHJhdGlvJykuYXR0cignZGlzYWJs ZWQnLCB0cnVlKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpOw0KDQoJDQpmdW5jdGlvbiByZW1v dmVDcm9wKCkgew0KCS8vIFJlbW92ZXMgakNyb3AgaWYgZm91bmQuDQoJaWYgKCAkKCcuamNy b3AtaG9sZGVyJykubGVuZ3RoICkgew0KCQl2YXIgeCA9ICQoJyNpbWdEaXYnKTsNCgkJDQoJ CS8vIGdlbmVyYXRlIHJhbmRvbSBudW1iZXIgdG8gYXBwZW5kIHRvIGltZyB1cmwgdG8gYXZv aWQgY2FjaGUgaXNzdWVzDQoJCXZhciByYW5kID0gTWF0aC5yYW5kb20oKTsNCgkJDQoJCS8v IGhpZGUgV2lkdGgvSGVpZ2h0IGRhdGENCgkJJCgnI2VibGNyb3BkYXRhJykuaGlkZSgpOyAN CgkJDQoJCS8vIHJlcGxhY2UgcmVtb3ZlZCBjb250ZW50IHdpdGgganVzdCB0aGUgaW1hZ2Uu DQoJCXguZW1wdHkoKS5hcHBlbmQoJzxpbWcgc3JjPSIkaW1nc3JjPycgKyByYW5kICsnIiBp ZD0ibWFpbkltZyIgLz4nKTsNCgkJd2luZG93Lm15Q3JvcCA9ICcnOw0KCX0NCgkNCgl3aW5k b3cuY3JvcE9uID0gZmFsc2U7DQoJd2luZG93LmNyb3AgPSBmYWxzZTsNCgl3aW5kb3cudG1i Y3JvcCA9IGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBhZGRDcm9wKCkgew0KCS8vIEJpbmQgakNy b3AgdG8gI21haW5JbWcNCgl2YXIgYXNwZWN0cmF0aW8gPSAkKCcjYXNwZWN0cmF0aW8nKS5h dHRyKCdjaGVja2VkJykgPyAxIDogMDsgLy8gVGhhbmtzIE1hbmZyZQ0KDQoJLy8gRGlzcGxh eSBIIFggVw0KCSQoJyNlYmxjcm9wZGF0YScpLnNob3coKTsgDQoNCgkvLyBjaGVjayBpZiB0 aGUgamNyb3AgaG9sZGVyIGlzIGFscmVhZHkgYWN0aXZlLiBMb2FkIGlmIG5vdCBhY3RpdmUu DQoJaWYgKCEgJCgnLmpjcm9wLWhvbGRlcicpLmxlbmd0aCApIHsNCgkJd2luZG93Lm15Q3Jv cCA9ICQuSmNyb3AoJyNtYWluSW1nJyx7IA0KCQkJb25TZWxlY3Q6IHNob3dDb29yZHMsDQoJ CQlvbkNoYW5nZTogc2hvd0Nvb3JkcywNCgkJCWFzcGVjdFJhdGlvOiBhc3BlY3RyYXRpbw0K CQl9KTsNCglteUNyb3Auc2V0U2VsZWN0KFsgMCwgMCwgMTAwLCAxNTAgXSk7DQoJfQ0KCXdp bmRvdy5jcm9wT24gPSB0cnVlOw0KfQ0KCQ0KCQ0KCSQoJyNlYmxjcm9wbG5rJykuY2xpY2so ZnVuY3Rpb24gKCkgew0KCQkkKHRoaXMpLmNzcyh7J2ZvbnQtd2VpZ2h0JzonYm9sZCd9KTsN CgkJJCgnI2VibHJlc2l6ZWxuaywjZWJscm90YXRlbG5rLCNlYmx0bWJsbmssI2VibGJhY2t1 cGxuaycpLmNzcygnZm9udC13ZWlnaHQnLCdub3JtYWwnKTsNCgkJJCgnI2VibHJvdGF0ZWN0 cmwsI2VibHRtYmN0cmwsI2VibHJlc2l6ZSwjZWJscm90YXRlY3RybCwjZWJsYmFja3VwaW1n JykuaGlkZSgpOw0KCQkkKCcjZWJsY3JvcGN0cmwnKS50b2dnbGUoKTsNCg0KCQ0KCQlpZih3 aW5kb3cuY3JvcCAmJiB3aW5kb3cuY3JvcE9uKSB7IC8vIHVzZXIgY2xvc2VkIG1haW4gY3Jv cCBmdW5jdGlvbg0KCQkJd2luZG93LmNyb3AgPSBmYWxzZTsNCgkJCXJlbW92ZUNyb3AoKTsg IC8vIHJlbW92ZSB0aGUgY3JvcCBiaW5kaW5nDQoJCX0gZWxzZSBpZiAoIXdpbmRvdy5jcm9w ICYmIHdpbmRvdy5jcm9wT24pIHsgLy8gdXNlciBzd2l0Y2hlZCBmcm9tIHRodW1iIGNyb3AN CgkJCXdpbmRvdy50bWJjcm9wID0gZmFsc2U7DQoJCQl3aW5kb3cuY3JvcCA9IHRydWU7DQoJ CQkkKCcjaW1nYXNwZWN0cmF0aW8sI3RtYmFzcGVjdHJhdGlvJykuYXR0cignZGlzYWJsZWQn LCB0cnVlKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpOw0KCQkJJCgnI2N1c3RvbXNpemUwJyku dmFsKCdDdXN0b20nKTsNCgkJCW15Q3JvcC5zZXRPcHRpb25zKHthc3BlY3RSYXRpbzogMH0p Ow0KCQkJbXlDcm9wLmFuaW1hdGVUbyhbIDAsIDAsIDEwMCwgMTUwIF0pOw0KCQl9IGVsc2Ug eyAvLyB1c2VyIG9wZW5lZCBtYWluIGNyb3AgZnVuY3Rpb24NCgkJCWFkZENyb3AoKTsgLy8g YWRkIGNyb3AgYmluZGluZw0KCQkJd2luZG93LmNyb3AgPSB0cnVlOw0KCQl9DQoJfSk7DQoN CgkkKCcjZWJsdG1ibG5rJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkkKHRoaXMpLmNzcygn Zm9udC13ZWlnaHQnLCAnYm9sZCcpOw0KCQkkKCcjZWJscmVzaXplbG5rLCNlYmxyb3RhdGVs bmssI2VibGNyb3BsbmssI2VibGJhY2t1cGxuaycpLmNzcygnZm9udC13ZWlnaHQnLCdub3Jt YWwnKTsNCgkJJCgnI2VibHRtYmN0cmwnKS50b2dnbGUoKTsNCgkJJCgnI2VibHJvdGF0ZWN0 cmwsI2VibGNyb3BjdHJsLCNlYmxyZXNpemUsI2VibHJvdGF0ZWN0cmwsI2VibGJhY2t1cGlt ZycpLmhpZGUoKTsNCgkNCgkJaWYod2luZG93LnRtYmNyb3AgJiYgd2luZG93LmNyb3BPbikg eyAvLyB1c2VyIGNsb3NlZCB0aHVtYiBjcm9wDQoJCQl3aW5kb3cudG1iY3JvcCA9IGZhbHNl OyANCgkJCXJlbW92ZUNyb3AoKTsNCgkJfSBlbHNlIGlmICghd2luZG93LnRtYmNyb3AgJiYg d2luZG93LmNyb3BPbikgeyAvLyB1c2VyIHN3aXRjaGVkIGZyb20gbWFpbiBjcm9wDQoJCQl3 aW5kb3cudG1iY3JvcCA9IHRydWU7DQoJCQl3aW5kb3cuY3JvcCA9IGZhbHNlOw0KCQkJJCgn I2ltZ2FzcGVjdHJhdGlvLCN0bWJhc3BlY3RyYXRpbycpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1 ZSkuYXR0cignY2hlY2tlZCcsIGZhbHNlKTsNCgkJCSQoJyNjdXN0b21zaXplMScpLnZhbCgn Q3VzdG9tJyk7DQoJCQlteUNyb3Auc2V0T3B0aW9ucyh7YXNwZWN0UmF0aW86IDB9KTsNCgkJ CW15Q3JvcC5hbmltYXRlVG8oWyAwLCAwLCAxMDAsIDE1MCBdKTsNCgkJfSBlbHNlIHsgLy8g dXNlciBvcGVucyB0aHVtYiBjcm9wDQoJCQlhZGRDcm9wKCk7DQoJCQl3aW5kb3cudG1iY3Jv cCA9IHRydWU7DQoJCX0NCgkNCgl9KTsNCg0KCSQoJyNlYmxyb3RhdGVsbmsnKS5jbGljayhm dW5jdGlvbiAoKSB7DQoJCSQodGhpcykuY3NzKCdmb250LXdlaWdodCcsICdib2xkJyk7DQoJ CSQoJyNlYmxyZXNpemVsbmssI2VibHRtYmxuaywjZWJsY3JvcGxuaywjZWJsYmFja3VwbG5r JykuY3NzKCdmb250LXdlaWdodCcsJ25vcm1hbCcpOw0KCQkkKCcjZWJsY3JvcGN0cmwsI2Vi bHRtYmN0cmwsI2VibHJlc2l6ZSwjZWJsY3JvcGRhdGEsI2VibGJhY2t1cGltZycpLmhpZGUo KTsNCgkJJCgnI2VibHJvdGF0ZWN0cmwnKS50b2dnbGUoKTsNCg0KCQlyZW1vdmVDcm9wKCk7 DQoJCXdpbmRvdy5teUNyb3AgPSAnICc7DQoJCXdpbmRvdy5jcm9wID0gZmFsc2U7DQoJfSk7 DQoNCgkkKCcjZWJscmVzaXplbG5rJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkkKHRoaXMp LmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpOw0KCQkkKCcjZWJscm90YXRlbG5rLCNlYmx0 bWJsbmssI2VibGNyb3BsbmssI2VibGJhY2t1cGxuaycpLmNzcygnZm9udC13ZWlnaHQnLCdu b3JtYWwnKTsNCgkJJCgnI2VibHJvdGF0ZWN0cmwsI2VibGNyb3BjdHJsLCNlYmx0bWJjdHJs LCNlYmxyb3RhdGVjdHJsLCNlYmxjcm9wZGF0YSwjZWJsYmFja3VwaW1nJykuaGlkZSgpOw0K CQkkKCcjZWJscmVzaXplJykudG9nZ2xlKCk7DQoJCQ0KCQl2YXIgaW1nVyA9ICQoJyNtYWlu SW1nJykud2lkdGgoKTsNCgkJdmFyIGltZ0ggPSAkKCcjbWFpbkltZycpLmhlaWdodCgpOw0K CQkNCgkJJCgnI29yaWdXJykudGV4dChpbWdXKTsNCgkJJCgnI29yaWdIJykudGV4dChpbWdI KTsNCgkJDQoJCXJlbW92ZUNyb3AoKTsJDQoJfSk7DQoNCgkkKCcjcm90YXRlbGVmdCcpLmNs aWNrKGZ1bmN0aW9uICgpIHsNCgkJcmVtb3ZlQ3JvcCgpOw0KCQl2YXIgaWQgPSAkKCcjcm90 YXRlcmlnaHQnKS5hdHRyKCduYW1lJyk7DQoNCgkJdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgp Ow0KCQkkKCcjZWJsaW1ncHJvY2VzcycpLnNob3coKTsNCgkJJC5hamF4KHsNCgkJCXR5cGU6 ICJQT1NUIiwNCgkJCXVybDogImluZGV4LnBocD9ldmVudD1lYmxyb3RhdGVsZWZ0JmltZ2lk PSIraWQsDQoJCQlzdWNjZXNzOiBmdW5jdGlvbihodG1sKXsNCgkJCQlpZihodG1sLm1hdGNo KC9zdWNjZXNzLykpIHsNCgkJCQkJJCgnI2VibGltZ3Byb2Nlc3MnKS5oaWRlKCk7DQoJCQkJ CXZhciB4ID0gJCgnI2ltZ0RpdicpOw0KCQkJCQl4LmVtcHR5KCkuYXBwZW5kKCc8aW1nIHNy Yz0iJGltZ3NyYz8nICsgcmFuZCArJyIgaWQ9Im1haW5JbWciIC8+Jyk7CQkJCQkNCgkJCQl9 IGVsc2Ugew0KCQkJCQlhbGVydChodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0pOw0KCX0pOw0K DQoJJCgnI3JvdGF0ZXJpZ2h0JykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQlyZW1vdmVDcm9w KCk7DQoJCXZhciBpZCA9ICQoJyNyb3RhdGVyaWdodCcpLmF0dHIoJ25hbWUnKTsNCgkJdmFy IHJhbmQgPSBNYXRoLnJhbmRvbSgpOw0KCQkkKCcjZWJsaW1ncHJvY2VzcycpLnNob3coKTsN CgkJJC5hamF4KHsNCgkJCXR5cGU6ICJQT1NUIiwNCgkJCXVybDogImluZGV4LnBocD9ldmVu dD1lYmxyb3RhdGVyaWdodCZpbWdpZD0iK2lkLA0KCQkJc3VjY2VzczogZnVuY3Rpb24oaHRt bCl7DQoJCQkJaWYoaHRtbC5tYXRjaCgvc3VjY2Vzcy8pKSB7DQoJCQkJCSQoJyNlYmxpbWdw cm9jZXNzJykuaGlkZSgpOw0KCQkJCQl2YXIgeCA9ICQoJyNpbWdEaXYnKTsNCgkJCQkJeC5l bXB0eSgpLmFwcGVuZCgnPGltZyBzcmM9IiRpbWdzcmM/JyArIHJhbmQgKyciIGlkPSJtYWlu SW1nIiAvPicpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWFsZXJ0KGh0bWwpOw0KCQkJCX0NCgkJ CX0NCgkJfSk7DQoJfSk7DQoNCgkkKCcjcm90YXRldXAnKS5jbGljayhmdW5jdGlvbiAoKSB7 DQoJCXJlbW92ZUNyb3AoKTsNCgkJdmFyIGlkID0gJCgnI3JvdGF0ZXJpZ2h0JykuYXR0cign bmFtZScpOw0KCQl2YXIgcmFuZCA9IE1hdGgucmFuZG9tKCk7DQoJCSQoJyNlYmxpbWdwcm9j ZXNzJykuc2hvdygpOw0KCQkkLmFqYXgoew0KCQkJdHlwZTogIlBPU1QiLA0KCQkJdXJsOiAi aW5kZXgucGhwP2V2ZW50PWVibHJvdGF0ZXVwJmltZ2lkPSIraWQsDQoJCQlzdWNjZXNzOiBm dW5jdGlvbihodG1sKXsNCgkJCQlpZihodG1sLm1hdGNoKC9zdWNjZXNzLykpIHsNCgkJCQkJ JCgnI2VibGltZ3Byb2Nlc3MnKS5oaWRlKCk7DQoJCQkJCXZhciB4ID0gJCgnI2ltZ0Rpdicp Ow0KCQkJCQl4LmVtcHR5KCkuYXBwZW5kKCc8aW1nIHNyYz0iJGltZ3NyYz8nICsgcmFuZCAr JyIgaWQ9Im1haW5JbWciIC8+Jyk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJYWxlcnQoaHRtbCk7 DQoJCQkJfQ0KCQkJfQ0KCQl9KTsNCgl9KTsNCg0KCSQoJyNlYmxpbWdjcm9wJykuY2xpY2so ZnVuY3Rpb24gKCkgew0KCQl2YXIgaWQgPSAkKCcjZWJsaW1nY3JvcCcpLmF0dHIoJ25hbWUn KTsNCgkJdmFyIEggPSAkKCcjZWJsY3JvcEhoJykuYXR0cigndmFsdWUnKTsNCgkJdmFyIFcg PSAkKCcjZWJsY3JvcFdoJykuYXR0cigndmFsdWUnKTsNCgkJdmFyIFggPSAkKCcjZWJsY3Jv cFhoJykuYXR0cigndmFsdWUnKTsNCgkJdmFyIFkgPSAkKCcjZWJsY3JvcFloJykuYXR0cign dmFsdWUnKTsNCgkJJCgnI2VibGltZ3Byb2Nlc3MnKS5zaG93KCk7DQoJCXZhciByYW5kID0g TWF0aC5yYW5kb20oKTsNCgkJJC5hamF4KHsNCgkJCXR5cGU6ICJQT1NUIiwNCgkJCXVybDog ImluZGV4LnBocD9ldmVudD1lYmxpbWdjcm9wJmltZ2lkPSIraWQsDQoJCQlkYXRhOiAJIiZl Ymxjcm9wWGg9IiArIFggKyAiJmVibGNyb3BZaD0iICsgWSArICImZWJsY3JvcFc9IiArIFcg KyAiJmVibGNyb3BIPSIgKyBILA0KCQkJc3VjY2VzczogZnVuY3Rpb24oaHRtbCl7DQoJCQkJ JCgnI2VibGltZ3Byb2Nlc3MnKS5oaWRlKCk7DQoJCQkJaWYoaHRtbC5tYXRjaCgvc3VjY2Vz cy8pKSB7DQoJCQkJCXJlbW92ZUNyb3AoKTsNCgkJCQkJJCgnI2VibGNyb3BjdHJsJykudG9n Z2xlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJYWxlcnQoaHRtbCk7DQoJCQkJfQ0KCQkJfQ0K CQl9KTsNCgl9KTsNCgkNCgkkKCcjZWJsdG1iY3JvcCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsN CgkJdmFyIGlkID0gJCgnI2VibGltZ2Nyb3AnKS5hdHRyKCduYW1lJyk7DQoJCXZhciBIID0g JCgnI2VibGNyb3BIaCcpLmF0dHIoJ3ZhbHVlJyk7DQoJCXZhciBXID0gJCgnI2VibGNyb3BX aCcpLmF0dHIoJ3ZhbHVlJyk7DQoJCXZhciBYID0gJCgnI2VibGNyb3BYaCcpLmF0dHIoJ3Zh bHVlJyk7DQoJCXZhciBZID0gJCgnI2VibGNyb3BZaCcpLmF0dHIoJ3ZhbHVlJyk7DQoJCQ0K CQl2YXIgdEggPSAkKCcjZWJsdG1iSCcpLmF0dHIoJ3ZhbHVlJyk7DQoJCXZhciB0VyA9ICQo JyNlYmx0bWJXJykuYXR0cigndmFsdWUnKTsNCg0KCQkkKCcjZWJsaW1ncHJvY2VzcycpLnNo b3coKTsNCgkJdmFyIHJzelRtYiA9ICQoJyNjcm9wdGh1bWInKS5hdHRyKCdjaGVja2VkJykg PyAncnN6JyA6ICdubyc7DQoJCQkNCgkJdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpOw0KCQkk LmFqYXgoew0KCQkJdHlwZTogIlBPU1QiLA0KCQkJdXJsOiAiaW5kZXgucGhwP2V2ZW50PWVi bHRtYmNyb3AmaW1naWQ9IitpZCwNCgkJCWRhdGE6ICImcnN6VG1iPSIgKyByc3pUbWIgKyAi JmVibGNyb3BYaD0iICsgWCArICImZWJsY3JvcFloPSIgKyBZICsgIiZlYmxjcm9wVz0iICsg VyArICImZWJsY3JvcEg9IiArIEggKyAiJmVibHRtYkg9IiArIHRIICsgIiZlYmx0bWJXPSIg KyB0VywNCgkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGh0bWwpew0KCQkJCSQoJyNlYmxpbWdwcm9j ZXNzJykuaGlkZSgpOw0KCQkJCWlmKGh0bWwubWF0Y2goL3N1Y2Nlc3MvKSkgew0KCQkJCQly ZW1vdmVDcm9wKCk7DQoJCQkJCSQoJyN0aHVtYlREJykuZW1wdHkoKS5hcHBlbmQoJzxpbWcg c3JjPSIkdG1ic3JjPycgKyByYW5kICsnIiBpZD0idGh1bWIiIC8+Jyk7DQoJCQkJCSQoJyNl Ymx0bWJjdHJsJykudG9nZ2xlKCk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJYWxlcnQoaHRtbCk7 DQoJCQkJfQ0KCQkJfQ0KCQl9KTsNCgl9KTsNCgkNCgkkKCcjZWJscnN6aW1nJykuY2xpY2so ZnVuY3Rpb24gKCkgew0KCQl2YXIgaWQgPSAkKCcjZWJscnN6aW1nJykuYXR0cignbmFtZScp Ow0KCQl2YXIgSCA9ICQoJyNlYmxyc3pIJykuYXR0cigndmFsdWUnKTsNCgkJdmFyIFcgPSAk KCcjZWJscnN6VycpLmF0dHIoJ3ZhbHVlJyk7DQoJDQoJCSQoJyNlYmxpbWdwcm9jZXNzJyku c2hvdygpOw0KCQkJDQoJCXZhciByYW5kID0gTWF0aC5yYW5kb20oKTsNCgkJJC5hamF4KHsN CgkJCXR5cGU6ICJQT1NUIiwNCgkJCXVybDogImluZGV4LnBocD9ldmVudD1lYmxyc3ppbWcm aW1naWQ9IitpZCwNCgkJCWRhdGE6ICImZWJscnN6SD0iICsgSCArICImZWJscnN6Vz0iICsg VywNCgkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGh0bWwpew0KCQkJCSQoJyNlYmxpbWdwcm9jZXNz JykuaGlkZSgpOw0KCQkJCWlmKGh0bWwubWF0Y2goL3N1Y2Nlc3MvKSkgew0KCQkJCQl2YXIg eCA9ICQoJyNpbWdEaXYnKTsNCgkJCQkJeC5lbXB0eSgpLmFwcGVuZCgnPGltZyBzcmM9IiRp bWdzcmM/JyArIHJhbmQgKyciIGlkPSJtYWluSW1nIiAvPicpOw0KCQkJCQkvLyANCgkJCQl9 IGVsc2Ugew0KCQkJCQlhbGVydChodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0pOw0KCX0pOw0K DQoNCgkkKCcjZWJsYmFja3VwbG5rJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkkKHRoaXMp LmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpOw0KCQkkKCcjZWJscm90YXRlbG5rLCAjZWJs cmVzaXplbG5rLCNlYmx0bWJsbmssI2VibGNyb3BsbmsnKS5jc3MoJ2ZvbnQtd2VpZ2h0Jywn bm9ybWFsJyk7DQoJCSQoJyNlYmxyb3RhdGVjdHJsLCNlYmxjcm9wY3RybCwjZWJsdG1iY3Ry bCwjZWJscmVzaXplLCNlYmxyb3RhdGVjdHJsLCNlYmxjcm9wZGF0YScpLmhpZGUoKTsNCgkJ JCgnI2VibGJhY2t1cGltZycpLnRvZ2dsZSgpOw0KCX0pOw0KCQ0KCSQoJyNlYmxiYWNrdXAn KS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCXZhciBpZCA9ICQodGhpcykuYXR0cignbmFtZScp Ow0KCQkkKCcjZWJsaW1ncHJvY2VzcycpLnNob3coKTsNCgkJJC5hamF4KHsNCgkJCXR5cGU6 ICJQT1NUIiwNCgkJCXVybDogImluZGV4LnBocD9ldmVudD1lYmxiYWNrdXBpbWcmaW1naWQ9 IitpZCwNCgkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGh0bWwpew0KCQkJCWlmKGh0bWwubWF0Y2go L3N1Y2Nlc3MvKSkgew0KCQkJCQkkKCcjZWJsaW1ncHJvY2VzcycpLmhpZGUoKTsNCgkJCQkJ YWxlcnQoImltYWdlIGJhY2tlZCB1cCIpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSQoJyNlYmxp bWdwcm9jZXNzJykuaGlkZSgpOw0KCQkJCQlhbGVydCgiRXJyb3IgOiAiICsgaWQgKyAiICB8 ICAgIiArIGh0bWwpOw0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJfSk7DQoJDQoJJCgnI2VibHJl c3RvcmUnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCXZhciBpZCA9ICQodGhpcykuYXR0cign bmFtZScpOw0KCQkkKCcjZWJsaW1ncHJvY2VzcycpLnNob3coKTsNCgkJdmFyIHJhbmQgPSBN YXRoLnJhbmRvbSgpOw0KCQkkLmFqYXgoew0KCQkJdHlwZTogIlBPU1QiLA0KCQkJdXJsOiAi aW5kZXgucGhwP2V2ZW50PWVibHJlc3RvcmVpbWcmaW1naWQ9IitpZCwNCgkJCXN1Y2Nlc3M6 IGZ1bmN0aW9uKGh0bWwpew0KCQkJCWlmKGh0bWwubWF0Y2goL3N1Y2Nlc3MvKSkgew0KCQkJ CQkkKCcjZWJsaW1ncHJvY2VzcycpLmhpZGUoKTsNCgkJCQkJYWxlcnQoImltYWdlIHJlc3Rv cmVkIik7DQoJCQkJCXZhciB4ID0gJCgnI2ltZ0RpdicpOw0KCQkJCQl4LmVtcHR5KCkuYXBw ZW5kKCc8aW1nIHNyYz0iJGltZ3NyYz8nICsgcmFuZCArJyIgaWQ9Im1haW5JbWciIC8+Jyk7 DQoJCQkJfSBlbHNlIHsNCgkJCQkJJCgnI2VibGltZ3Byb2Nlc3MnKS5oaWRlKCk7DQoJCQkJ CWFsZXJ0KCJFcnJvciA6ICIgKyBodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0pOw0KCX0pOw0K CQ0KCSQoJyNjdXN0b21zaXplMCwjY3VzdG9tc2l6ZTEnKS5jaGFuZ2UoZnVuY3Rpb24gKCkg ew0KCQl2YXIgc2l6ZSA9ICQodGhpcykudmFsKCk7DQoJCWlmKCFzaXplLm1hdGNoKCJDdXN0 b20iKSkgew0KCQkJJCgnI2ltZ2FzcGVjdHJhdGlvLCN0bWJhc3BlY3RyYXRpbycpLmF0dHIo J2Rpc2FibGVkJywgZmFsc2UpLmF0dHIoJ2NoZWNrZWQnLCB0cnVlKTsNCgkJCXZhciB4ID0g c2l6ZS5zcGxpdCgneCcpWzBdOw0KCQkJdmFyIHkgPSBzaXplLnNwbGl0KCd4JylbMV07DQoN CgkJCW15Q3JvcC5hbmltYXRlVG8oWyAwLCAwLCB4LCB5IF0pOw0KCQkJDQoJCQl2YXIgYXNw ZWN0cmF0aW8gPSB4IC8geTsNCg0KCQkJdmFyIG9wdCA9IHsNCgkJCQlhc3BlY3RSYXRpbzog YXNwZWN0cmF0aW8NCgkJCX0NCgkJCQ0KCQkJbXlDcm9wLnNldE9wdGlvbnMob3B0KTsNCgkJ fSBlbHNlIHsNCgkJCSQoJyNpbWdhc3BlY3RyYXRpbywjdG1iYXNwZWN0cmF0aW8nKS5hdHRy KCdkaXNhYmxlZCcsIHRydWUpLmF0dHIoJ2NoZWNrZWQnLCBmYWxzZSk7DQoJCQlteUNyb3Au c2V0T3B0aW9ucyh7YXNwZWN0UmF0aW86IDB9KTsNCgkJfQ0KCQkNCgl9KTsNCg0KCSQoJyNp bWdhc3BlY3RyYXRpbywjdG1iYXNwZWN0cmF0aW8nKS5jaGFuZ2UoZnVuY3Rpb24gKCkgew0K CQlpZigkKHRoaXMpLmF0dHIoJ2NoZWNrZWQnKSkNCgkJew0KCQkJaWYodGhpcy5pZCA9PT0g J2ltZ2FzcGVjdHJhdGlvJykgDQoJCQl7DQoJCQkJdmFyIHNpemUgPSAkKCcjY3VzdG9tc2l6 ZTAnKS52YWwoKTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIHNpemUgPSAkKCcjY3VzdG9tc2l6 ZTEnKS52YWwoKTsNCgkJCX0NCgkJCQ0KCQkJdmFyIHggPSBzaXplLnNwbGl0KCd4JylbMF07 DQoJCQl2YXIgeSA9IHNpemUuc3BsaXQoJ3gnKVsxXTsJDQoJCQkNCgkJCXZhciBhc3BlY3Ry YXRpbyA9IHggLyB5Ow0KCQkJbXlDcm9wLmFuaW1hdGVUbyhbIDAsIDAsIHgsIHkgXSk7DQoN CgkJfSBlbHNlIHsNCgkJCXZhciBhc3BlY3RyYXRpbyA9IDA7DQoJCQkNCgkJfQ0KDQoJCXZh ciBvcHQgPSB7DQoJCQlhc3BlY3RSYXRpbzogYXNwZWN0cmF0aW8NCgkJfQ0KCQlteUNyb3Au c2V0T3B0aW9ucyhvcHQpOw0KCX0pOw0KCQ0KCSQoJyNjcm9wdGh1bWInKS5jaGFuZ2UoZnVu Y3Rpb24gKCkgew0KCQkJdmFyIGNyb3B0aHVtYiA9ICQodGhpcykuYXR0cignY2hlY2tlZCcp ID8gZmFsc2UgOiB0cnVlOw0KCQkJDQoJCQlpZihjcm9wdGh1bWIpIHsNCgkJCQkkKCcjZWJs dG1iVywgI2VibHRtYkgnKS5hdHRyKHtkaXNhYmxlZDoiZGlzYWJsZWQiLHZhbHVlOiIjIyMi fSk7DQoJCQl9IGVsc2Ugew0KCQkJCSQoJyNlYmx0bWJXLCAjZWJsdG1iSCcpLnJlbW92ZUF0 dHIoImRpc2FibGVkIik7DQoJCQkJJCgnI2VibHRtYlcsICNlYmx0bWJIJykuYXR0cigidmFs dWUiLCIxMDAiKTsNCgkJCX0NCgl9KTsNCn0pOw0KDQpmdW5jdGlvbiBzaG93Q29vcmRzKGMp IHsNCgkJJCgnI2VibGNyb3BYJykudGV4dChjLngpOw0KCQkkKCcjZWJsY3JvcFhoJykudmFs KGMueCk7DQoJCSQoJyNlYmxjcm9wWScpLnRleHQoYy55KTsNCgkJJCgnI2VibGNyb3BZaCcp LnZhbChjLnkpOw0KCQkkKCcjZWJsY3JvcFgyJykudGV4dChjLngyKTsNCgkJJCgnI2VibGNy b3BYMmgnKS52YWwoYy54Mik7DQoJCSQoJyNlYmxjcm9wWTInKS50ZXh0KGMueTIpOw0KCQkk KCcjZWJsY3JvcFkyaCcpLnZhbChjLnkyKTsNCgkJDQoJCXZhciBpbWdXID0gemVyb1BhZChj LncsNCk7DQoJCXZhciBpbWdIID0gemVyb1BhZChjLmgsNCk7DQoJCQ0KCQkkKCcjZWJsY3Jv cFcnKS50ZXh0KGltZ1cpOw0KCQkkKCcjZWJsY3JvcFdoJykudmFsKGMudyk7DQoJCSQoJyNl Ymxjcm9wSCcpLnRleHQoaW1nSCk7DQoJCSQoJyNlYmxjcm9wSGgnKS52YWwoYy5oKTsNCn07 DQoNCmZ1bmN0aW9uIHplcm9QYWQobnVtLGNvdW50KSB7DQoJdmFyIG51bVplcm9wYWQgPSBu dW0gKyAnJzsNCgl3aGlsZShudW1aZXJvcGFkLmxlbmd0aCA8IGNvdW50KSB7DQoJCW51bVpl cm9wYWQgPSAiMCIgKyBudW1aZXJvcGFkOw0KCX0NCglyZXR1cm4gbnVtWmVyb3BhZDsNCn0N Cg0KPC9zY3JpcHQ+DQpFT0Y7DQoNCn0NCg0KZnVuY3Rpb24gZWJscmVzdG9yZWltZygkaWQp IA0Kew0KCQ0KCWdsb2JhbCAkcGF0aF90b19zaXRlLCRpbWdfZGlyOw0KCQ0KCSRycyA9IHNh ZmVfcm93KCIqLCB1bml4X3RpbWVzdGFtcChkYXRlKSBhcyB1RGF0ZSIsICJ0eHBfaW1hZ2Ui LCAiaWQgPSAkaWQiKTsNCgkJDQoJaWYgKCRycykgew0KCQkkYmFja3VwZGlyIAk9ICRwYXRo X3RvX3NpdGUgLiAnLycgLiAkaW1nX2RpciAuICcvYmFja3VwLyc7DQoJCSRpbWFnZWRpcgk9 ICRwYXRoX3RvX3NpdGUgLiAnLycgLiAkaW1nX2RpciAuICcvJzsNCgkJDQoJCWV4dHJhY3Qo JHJzKTsNCgkJJGZpbGVuYW1lID0gJGlkLiRleHQ7DQoJCSRpbWdzcmMgPSAkaW1hZ2VkaXIu JGZpbGVuYW1lOwkJDQoJCQ0KCQlpZihjb3B5KCRiYWNrdXBkaXIuJGZpbGVuYW1lLCAkaW1h Z2VkaXIuJGZpbGVuYW1lKSkgDQoJCXsNCgkJCWxpc3QoJHdpZHRoLCAkaGVpZ2h0KSA9IGdl dGltYWdlc2l6ZSgkYmFja3VwZGlyLiRmaWxlbmFtZSk7DQoJCQlpZihzYWZlX3VwZGF0ZSgn dHhwX2ltYWdlJywgIncgPSAnIi4kd2lkdGguIicsIGggPSAnIi4kaGVpZ2h0LiInIiwgImlk ID0gJGlkIikpIA0KCQkJew0KCQkJCWVjaG8gInN1Y2Nlc3MiOyBleGl0KCk7DQoJCQl9IGVs c2Ugew0KCQkJCWVjaG8gIkZpbGUgQ29waWVkIGJ1dCBkYiBub3QgdXBkYXRlZCI7DQoJCQl9 DQoJCX0NCgl9IGVsc2Ugew0KCQllY2hvICJEYXRhYmFzZSBFcnJvciI7DQoJfQ0KDQoJZXhp dCgpOw0KfQ0KDQpmdW5jdGlvbiBlYmxiYWNrdXBpbWcoJGlkKSANCnsJDQoJZ2xvYmFsICRw YXRoX3RvX3NpdGUsJGltZ19kaXI7DQoJDQoJJHJzID0gc2FmZV9yb3coIiosIHVuaXhfdGlt ZXN0YW1wKGRhdGUpIGFzIHVEYXRlIiwgInR4cF9pbWFnZSIsICJpZCA9ICRpZCIpOw0KDQoJ aWYgKCRycykgew0KCQkkYmFja3VwZGlyIAk9ICRwYXRoX3RvX3NpdGUgLiAnLycgLiAkaW1n X2RpciAuICcvYmFja3VwLyc7DQoJCSRpbWFnZWRpcgk9ICRwYXRoX3RvX3NpdGUgLiAnLycg LiAkaW1nX2RpciAuICcvJzsNCgkJDQoJCWV4dHJhY3QoJHJzKTsNCgkJJGZpbGVuYW1lID0g JGlkLiRleHQ7DQoJCSRpbWdzcmMgPSAkaW1hZ2VkaXIuJGZpbGVuYW1lOyBlY2hvICRpbWFn ZWRpci4kZmlsZW5hbWU7DQoJDQoJCSRjciA9IGNvcHkoJGltYWdlZGlyLiRmaWxlbmFtZSwk YmFja3VwZGlyLiRmaWxlbmFtZSk7DQoJCWVjaG8gInN1Y2Nlc3MiOw0KCX0gZWxzZSB7DQoJ CWVjaG8gIkRhdGFiYXNlIEVycm9yIjsNCgl9DQoJDQoJZXhpdCgpOw0KfQ0KDQpmdW5jdGlv biBlYmxfaW1nX2VkaXQgKCRpZCwgJGRpcmVjdGlvbiwgJGFjdGlvbikNCnsNCglnbG9iYWwg JHBhdGhfdG9fc2l0ZSwkaW1nX2RpcjsNCg0KCSRpbWFnZWRpciA9ICRwYXRoX3RvX3NpdGUg LiAnLycgLiAkaW1nX2RpciAuICcvJzsNCg0KCSRycyA9IHNhZmVfcm93KCIqLCB1bml4X3Rp bWVzdGFtcChkYXRlKSBhcyB1RGF0ZSIsICJ0eHBfaW1hZ2UiLCAiaWQgPSAkaWQiKTsNCg0K CWlmICgkcnMpIHsNCgkJZXh0cmFjdCgkcnMpOw0KCQkkZmlsZW5hbWUgPSAkaWQuJGV4dDsN Cg0KCQlzd2l0Y2ggKHN0cnRvbG93ZXIoJGV4dCkpIHsNCgkJCWNhc2UgJy5qcGcnOg0KCQkJ CSRzcmNpbWFnZSA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJGltYWdlZGlyIC4gJGZpbGVuYW1l KTsNCgkJCQlicmVhazsNCgkJCWNhc2UgJy5naWYnOg0KCQkJCSRzcmNpbWFnZSA9IGltYWdl Y3JlYXRlZnJvbWdpZigkaW1hZ2VkaXIgLiAkZmlsZW5hbWUpOw0KCQkJCWJyZWFrOw0KCQkJ Y2FzZSAnLnBuZyc6DQoJCQkJJHNyY2ltYWdlID0gaW1hZ2VjcmVhdGVmcm9tcG5nKCRpbWFn ZWRpciAuICRmaWxlbmFtZSk7DQoJCQkJYnJlYWs7DQoJCX0NCg0KCQlpZigkYWN0aW9uID09 ICdyb3RhdGUnKSB7IC8vIHJvdGF0ZSBpbWFnZQ0KDQoJCQkvKiogVGVybmFyeSBlcXVpdmFs ZW50IG9mICBpZiAvIGVsc2VpZiAvIGVsc2UgOiBEb25lIGZvciBzaW1wbGUgc2hvcnRoYW5k LiBBc3N1bWVzIGFueXRoaW5nIG5vdCByaWdodCAvIGxlZnQgPSAxODAgKiovDQoJCQkkZGVn cmVlcyA9ICgkZGlyZWN0aW9uID09ICdyaWdodCcpID8gLTkwIDogKCgkZGlyZWN0aW9uID09 ICdsZWZ0JykgPyA5MCA6IDE4MCk7DQoJCQkkbmV3aW1nICA9IGltYWdlcm90YXRlKCRzcmNp bWFnZSwgJGRlZ3JlZXMsIDApOw0KCQl9IGVsc2VpZiAoJGFjdGlvbiA9PSAnY3JvcCcpIHsg Ly8gcHJpbWFyeSBpbWFnZSBjcm9wcGluZw0KDQoJCQkvL2dhdGhlciBjcm9wIHZhcmlhYmxl cyBmcm9tIGhpZGRlbiBmaWVsZHMuDQoJCQkkY3JvcFggPSBncHMoJ2VibGNyb3BYaCcpOw0K CQkJJGNyb3BZID0gZ3BzKCdlYmxjcm9wWWgnKTsNCgkJCSR0YXJnVyA9ICRjcm9wVyA9IGdw cygnZWJsY3JvcFcnKTsNCgkJCSR0YXJnSCA9ICRjcm9wSCA9IGdwcygnZWJsY3JvcEgnKTsN CgkJCQ0KCQkJLy8gcHJldmVudHMgZGl2aXNpb24gYnkgemVybyAmIGludmFsaWQgY3JvcCB3 aWR0aHMuDQoJCQkkdmFsdWUgPSAoaW50KSR0YXJnSCArIChpbnQpJHRhcmdXOw0KCQkJaWYo JHZhbHVlIDwgMzApIHsNCgkJCQllY2hvICJpbnZhbGlkIGNyb3AgdmFsdWVzIGRldGVjdGVk IjsNCgkJCQlpbWFnZWRlc3Ryb3koJHNyY2ltYWdlKTsNCgkJCQlleGl0KCk7DQoJCQl9DQoN CgkJCS8qKiBDcmVhdGUgYmFzZSBjYW52YXMgKiovDQoJCQkkbmV3aW1nID0gaW1hZ2VjcmVh dGV0cnVlY29sb3IoJHRhcmdXLCR0YXJnSCk7DQoNCgkJCS8qKiBVc2UgdGhlIFgvWSBjb29y ZHMgdG8gcGxvdCB0aGUgaW5pdGlhbCBwb2ludCwgd2lkdGgvaGVpZ2h0IHRha2UgY2FyZSBv ZiB0aGUgcmVzdCAqKi8NCgkJCWltYWdlY29weXJlc2FtcGxlZCgkbmV3aW1nLCAkc3JjaW1h Z2UsMCwwLCAkY3JvcFgsICRjcm9wWSwgJHRhcmdXLCAkdGFyZ0gsICRjcm9wVywgJGNyb3BI KTsNCg0KCQl9IGVsc2VpZiAoJGFjdGlvbiA9PSAndGh1bWJuYWlsJykgeyAvLyBjcmVhdGUg dGh1bWJuYWlsDQoNCgkJCS8vZ2F0aGVyIGNyb3AgdmFyaWFibGVzIGZyb20gaGlkZGVuIGZp ZWxkcy4NCgkJCSRjcm9wWCA9IGdwcygnZWJsY3JvcFhoJyk7DQoJCQkkY3JvcFkgPSBncHMo J2VibGNyb3BZaCcpOw0KCQkJJGNyb3BIID0gZ3BzKCdlYmxjcm9wSCcpOw0KCQkJJGNyb3BX ID0gZ3BzKCdlYmxjcm9wVycpOw0KCQkJDQoJCQkvLyBwcmV2ZW50cyBkaXZpc2lvbiBieSB6 ZXJvICYgaW52YWxpZCBjcm9wIHdpZHRocy4NCgkJCSR2YWx1ZSA9IChpbnQpJGNyb3BIICsg KGludCkkY3JvcFc7DQoJCQlpZigkdmFsdWUgPCA0KSB7DQoJCQkJZWNobyAiaW52YWxpZCBj cm9wIHZhbHVlcyBkZXRlY3RlZCI7DQoJCQkJaW1hZ2VkZXN0cm95KCRzcmNpbWFnZSk7DQoJ CQkJZXhpdCgpOw0KCQkJfQ0KCQkJDQoJCQlpZihncHMoJ3JzelRtYicpID09ICJyc3oiKSB7 IC8vIGFyZSB3ZSByZXNpemluZyB0aGUgdGhlIHRodW1ibmFpbD8NCgkJCQkkdGFyZ0ggPSBn cHMoJ2VibHRtYkgnKTsNCgkJCQkkdGFyZ1cgPSBncHMoJ2VibHRtYlcnKTsgDQoJCQkNCgkJ CS8vIGRpZCBzb21lb25lIGZvcmdldCB0byBpbnB1dCBhIGhlaWdodCBvciB3aWR0aD8gSWYg c28sIGRlZmF1bHQgdG8gY3JvcCB3aWR0aA0KCQkJaWYoJHRhcmdIIDwgMSkgeyAkdGFyZ0gg PSAkY3JvcEg7IH0NCgkJCWlmKCR0YXJnVyA8IDEpIHsgJHRhcmdXID0gJGNyb3BXOyB9DQoN CgkJCQkvLyBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc2NhbGUgdmFsdWUNCgkJCQkkc2NhbGUg PSBtaW4oJHRhcmdXIC8gJGNyb3BXLCR0YXJnSCAvICRjcm9wSCk7DQoJCQkJLy8gYXJlIHRo ZSBzaWRlcyBlcXVhbD8gSWYgbm90LCBzY2FsZSB0byBmaXQuDQoJCQkJaWYgKCRzY2FsZSA8 IDEpIHsNCgkJCQkJJHRhcmdXID0gY2VpbCgkc2NhbGUgKiAkY3JvcFcpOw0KCQkJCQkkdGFy Z0ggPSBjZWlsKCRzY2FsZSAqICRjcm9wSCk7DQoJCQkJfSANCgkJCX0gZWxzZWlmIChncHMo J3JzelRtYicpICE9ICdyc3onKSB7IC8vIGlmIG5vdCwgd2UnbGwganVzdCB1c2UgdGhlIGNy b3AtYXJlYSBzaXplIHRvIGNyZWF0ZSBvdXIgdGh1bWJuYWlsDQoJCQkJJHRhcmdIID0gJGNy b3BIOw0KCQkJCSR0YXJnVyA9ICRjcm9wVzsNCgkJCX0NCgkJCQ0KCQkJLyoqIENyZWF0ZSBi YXNlIGNhbnZhcyAqKi8NCgkJCSRuZXdpbWcgPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkdGFy Z1csJHRhcmdIKTsNCgkJCS8qKiBVc2UgdGhlIFgvWSBjb29yZHMgdG8gcGxvdCB0aGUgaW5p dGlhbCBwb2ludCwgd2lkdGgvaGVpZ2h0IHRha2UgY2FyZSBvZiB0aGUgcmVzdCAqKi8NCgkJ CWltYWdlY29weXJlc2FtcGxlZCgkbmV3aW1nLCAkc3JjaW1hZ2UsMCwwLCAkY3JvcFgsICRj cm9wWSwgJHRhcmdXLCAkdGFyZ0gsICRjcm9wVywgJGNyb3BIKTsNCg0KCQl9IGVsc2VpZiAo JGFjdGlvbiA9PSAncnN6JykgeyAvLyBnZW5lcmFsIHJlc2l6ZQ0KCQkJJHRhcmdIID0gZ3Bz KCdlYmxyc3pIJyk7DQoJCQkkdGFyZ1cgPSBncHMoJ2VibHJzelcnKTsNCgkJCQ0KCQkJaWYo KCR0YXJnSCArICR0YXJnVykgPCAxKSB7DQoJCQkJZWNobyAiIEVSUk9SIDogRGltZW5zaW9u cyBtdXN0IGJlIGVudGVyZWQuIjsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQkvLyBk aWQgc29tZW9uZSBmb3JnZXQgdG8gaW5wdXQgYSBoZWlnaHQgb3Igd2lkdGg/IElmIHNvLCB3 ZSdsbCBkZWZhdWx0IHRvIHRoZSBvcmlnaW5hbCBzaXplIGZvciB0aGUgbWlzc2luZyB2YWx1 ZS4NCgkJCWlmKCR0YXJnSCA8IDEpIHsgJHRhcmdIID0gJGg7IH0NCgkJCWlmKCR0YXJnVyA8 IDEpIHsgJHRhcmdXID0gJHc7IH0NCgkJCS8vIGNoZWNrcyB0byBzZWUgaWYgdGhlIHRhcmdl dGVkIHZhbHVlcyBhcmUgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLCBpZiBzbywgcmVzZXQg dG8gb3JpZ2luYWwgdmFsdWUgYXMgdGhlIGxvbmdlc3Qgc2lkZS4NCgkJCWlmKCR0YXJnSCA+ ICRoKSB7ICR0YXJnSCA9ICRoOyB9DQoJCQlpZigkdGFyZ1cgPiAkdykgeyAkdGFyZ1cgPSAk dzsgfQ0KCQkJDQoJCQkkc2NhbGUgPSBtaW4oJHRhcmdXIC8gJHcsICR0YXJnSCAvICRoKTsN CgkJCS8vIGFyZSB0aGUgc2lkZXMgZXF1YWw/IElmIG5vdCwgc2NhbGUgdG8gZml0Lg0KCQkJ aWYgKCRzY2FsZSA8IDEpIHsNCgkJCQkkdGFyZ1cgPSBjZWlsKCRzY2FsZSAqICR3KTsNCgkJ CQkkdGFyZ0ggPSBjZWlsKCRzY2FsZSAqICRoKTsNCgkJCX0gZWxzZSB7IC8vIGltYWdlIGlz IHNtYWxsZXIgdGhhbiByZXF1ZXN0ZWQgc2NhbGUuIEFib3J0Lg0KCQkJCWltYWdlZGVzdHJv eSgkc3JjaW1hZ2UpOw0KCQkJCWVjaG8gIkltYWdlIHNtYWxsZXIgdGhhbiBwYXJhbWV0ZXJz IGVudGVyZWQiOw0KCQkJCXJldHVybjsNCgkJCX0NCg0KCQkJLyoqIENyZWF0ZSBiYXNlIGNh bnZhcyAqKi8NCgkJCSRuZXdpbWcgPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkdGFyZ1csJHRh cmdIKTsNCgkJCS8qKiBVc2UgdGhlIFgvWSBjb29yZHMgdG8gcGxvdCB0aGUgaW5pdGlhbCBw b2ludCwgd2lkdGgvaGVpZ2h0IHRha2UgY2FyZSBvZiB0aGUgcmVzdCAqKi8NCgkJCWltYWdl Y29weXJlc2FtcGxlZCgkbmV3aW1nLCAkc3JjaW1hZ2UsMCwwLDAsMCwgJHRhcmdXLCAkdGFy Z0gsICR3LCAkaCk7DQoJCX0NCg0KCQkkdCA9ICgkYWN0aW9uID09ICd0aHVtYm5haWwnKSA/ ICd0JyA6ICcnOw0KCQkNCgkJJGZpbGVuYW1lID0gJGlkLiR0LiRleHQ7DQoJCQ0KCQlzd2l0 Y2ggKHN0cnRvbG93ZXIoJGV4dCkpIHsNCgkJCWNhc2UgKCRleHQgPT0gJy5qcGcnIHx8ICRl eHQgPT0gJy5qcGVnJyk6DQoJCQkJJGZpbGVyZXN1bHQgPSBpbWFnZWpwZWcoJG5ld2ltZywk aW1hZ2VkaXIgLiAkZmlsZW5hbWUsJzEwMCcpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiLmdp ZiI6DQoJCQkJJGZpbGVyZXN1bHQgPSBpbWFnZWdpZigkbmV3aW1nLCRpbWFnZWRpciAuICRm aWxlbmFtZSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICIucG5nIjoNCgkJCQkkZmlsZXJlc3Vs dCA9IGltYWdlcG5nKCRuZXdpbWcsJGltYWdlZGlyIC4gJGZpbGVuYW1lKTsNCgkJCQlicmVh azsNCgkJfQ0KDQoJCWltYWdlZGVzdHJveSgkc3JjaW1hZ2UpOw0KCX0NCg0KCWlmKCRhY3Rp b24gIT0gJ3RodW1ibmFpbCcpIA0KCXsNCgkJbGlzdCAoJHdpZHRoLCRoZWlnaHQpID0gZ2V0 aW1hZ2VzaXplKCRpbWFnZWRpciAuICRmaWxlbmFtZSk7DQoJCSRycyA9IHNhZmVfdXBkYXRl KCd0eHBfaW1hZ2UnLCAidyA9ICciLiR3aWR0aC4iJywgaCA9ICciLiRoZWlnaHQuIiciLCAi aWQgPSAkaWQiKTsNCgl9IGVsc2Ugew0KCQkkcnMgPSBzYWZlX3VwZGF0ZSgndHhwX2ltYWdl JywgInRodW1ibmFpbCA9ICcxJyIsICJpZCA9ICRpZCIpOw0KCX0NCgkNCgllY2hvICgkZmls ZXJlc3VsdCAmJiAkcnMpID8gInN1Y2Nlc3MiIDogJ0VSUk9SICc7DQp9DQoiO3M6NDoidHlw ZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6NDoiaGVscCI7czo1OTg4OiI8c3R5 bGUgdHlwZT0idGV4dC9jc3MiID5oMSwgaDIsIGgzLCBwIHt0ZXh0LWFsaWduOmxlZnR9aDF7 Zm9udC1zaXplOjI4cHg7IGxldHRlci1zcGFjaW5nOi4wMWVtOyB3b3JkLXNwYWNpbmc6LjFl bTsgY29sb3I6IzQ0NH1oMntmb250LXNpemU6MTRweDsgbWFyZ2luOjVweCAwIDE1cHg7IGNv bG9yOiNBQUE7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNEREQ7IHBhZGRpbmc6MCAwIDVw eDsgbGV0dGVyLXNwYWNpbmc6LjA1ZW07IHdvcmQtc3BhY2luZzouMWVtfWgze2ZvbnQtc2l6 ZToxNnB4OyBtYXJnaW46MTBweCAwOyBjb2xvcjojNDQ0OyBmb250LXdlaWdodDogOTAwO31w e21hcmdpbjoxNXB4IDA7IGZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDoyNHB4fS5kcm9w Y2Fwe2Zsb2F0OmxlZnQ7IGNvbG9yOiNCNEI0Qjc7IGZvbnQtc2l6ZTo1MHB4OyBsaW5lLWhl aWdodDo0MHB4OyBwYWRkaW5nLXRvcDoycHg7IG1hcmdpbjowIDNweCAwIDA7IGZvbnQtZmFt aWx5OlRpbWVzLHNlcmlmLEdlb3JnaWF9LmNhcHN7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNl OyBsZXR0ZXItc3BhY2luZzouMTVlbTsgZm9udC1zaXplOjEycHg7IGNvbG9yOiM1NTV9I21h aW4ge2ZvbnQtZmFtaWx5Okdlb3JnaWEsICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2Vy aWY7IGZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDt9CTwvc3R5bGU+Cgo8ZGl2IGlk PSJtYWluIj4KPGgxPkVCTCBJbWFnZSBFZGl0PC9oMT4KIDxoMj5BZHZhbmNlZCBJbWFnZSBF ZGl0aW5nIFBsdWdpbiBmb3IgVGV4dHBhdHRlcm48L2gyPgogPHA+PHNwYW4gY2xhc3M9ImRy b3BjYXAiPlQ8L3NwYW4+aGlzIHBsdWdpbiBpbnRyb2R1Y2VzIGFkdmFuY2VkIGltYWdlIGVk aXRpbmcgZnVuY3Rpb25hbGl0eSB0byBUZXh0cGF0dGVybiA0LjA3IC8gNC4wOC4KIFVzZXJz IG1heSBub3cgY3VzdG9tIGNyb3AsIHJlc2l6ZSwgcm90YXRlLCBhbmQgY3JlYXRlIGN1c3Rv bSB0aHVtYm5haWxzIGRpcmVjdGx5IHdpdGhpbiBUZXh0cGF0dGVybi48L3A+CgogPGgzPkZl YXR1cmVzPC9oMz4KIDxwPlRoaXMgcGx1Z2luIGFsbG93cyBmb3IgZnVuY3Rpb25zIHByZXZp b3VzbHkgb25seSBhdmFpbGFibGUgaW4gaW1hZ2UtZWRpdGluZyBwcm9ncmFtaW5zLiBJdCBh bGxvd3MgZm9yIHVzZXJzLCBhdCBhbnkgdGVybWluYWwgd2hpY2ggdGhleSdyZSBsb2dnZWQg aW4gdG8gdG8gZG8gdGhlIGZvbGxvd2luZzoKIDx1bD4KIAk8bGk+PHN0cm9uZz5Dcm9wcGlu Zzwvc3Ryb25nPjogVGhlIG9yaWdpbmFsIHVwbG9hZGVkIGltYWdlIGNhbiBiZSBlZGl0ZWQg dG8gY3V0IG91dCBwYXJ0cyB0aGF0IGFyZSBub3QgZGVzaXJlZCBhbmQga2VlcCBvbmx5IHRo b3NlIGltcG9ydGFudCBmYWNldHMgb2YgdGhlIG9yaWdpbmFsIGltYWdlLjwvbGk+CiAJPGxp PjxzdHJvbmc+VGh1bWJuYWlsIENyb3A8L3N0cm9uZz46IE1ha2UgYSB0aHVtYm5haWwgc2hv dyBub3QgdGhlIGVudGlyZSBpbWFnZSwgYnV0IGp1c3QgZW5vdWdoIHRvIHBpcXVlIGludGVy ZXN0LjwvbGk+CiAJPGxpPjxzdHJvbmc+Um90YXRlPC9zdHJvbmc+OiBGb3IgdGhvc2UgcGlj dHVyZXMgdGhhdCBhcmUgc2lkZXdheXMgb3IgdXBzaWRlIGRvd24uIFVzZXJzIG1heSByb3Rh dGUgdGhlIGltYWdlIGNsb2Nrd2lzZTkwJmRlZzssIGNvdW50ZXJjbG9ja3dpc2U5MCZkZWc7 IG9yIHJvdGF0ZSBhIGZ1bGwgMTgwOTAmZGVnOy48L2xpPgogCTxsaT48c3Ryb25nPlJlc2l6 ZTwvc3Ryb25nPjogTWFueSBkaWdpdGFsIGltYWdlcyBhcmUganVzdCB0b28gbGFyZ2UgdG8g YmUgc2hvd24gb24gdGhlIHdlYi4gVGhpcyBvcHRpb24gYWxsb3dzIGZvciBleGNlc3NpdmVs eSBzaXplZCBpbWFnZXMgdG8gYmUgc2NhbGVkIGRvd24uIEJ1aWx0IGludG8gdGhlIHJlc2l6 aW5nIGZ1bmN0aW9uIGlzIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHRoZSBvcmlnaW5hbCBo ZWlnaHQgdG8gd2lkdGggcmF0aW8sIHNvIGltYWdlcyB3aWxsIG5ldmVyIHNlZW0gc3F1aXNo ZWQgb25lIHdheSBvciB0aGUgb3RoZXIuPC9saT4KIAk8bGk+PHN0cm9uZz5JbWFnZSBCYWNr dXBzPC9zdHJvbmc+OiBOZXcgZm9yIDxpPjIuMDwvaT4gaXMgdGhlIGZlYXR1cmUgdG8gc2F2 ZSBhbiBvcmlnaW5hbCBjb3B5IG9mIHRoZSB0aGUgaW1hZ2UgdG8gYSB0ZW1wIGZvbGRlciBz byB0aGF0IHlvdSBtYXkgcmVzdG9yZSBpdCBhdCBhbnkgdGltZS4gVGhlIGltYWdlIG11c3Qg Zmlyc3QgYmUgc2F2ZWQgYnkgY2xpY2tpbmcgb24gYmFja3VwLCBhbmQgdGhlbiBtYXkgYmUg cmVzdG9yZWQgYXQgYW55IHRpbWUuPC9saT4KIDwvdWw+PC9wPgogPGgzPkluc3RhbGxhdGlv bjwvaDM+CiA8cD5JbnN0YWxsYXRpb24gaXMgc3RyYWlnaHQgZm9yd2FyZCBhbmQgaW52b2x2 ZXMgdGhlIGluc3RhbGxhdGlvbiBvZiBvbmUgcGx1Z2luIGZpbGUsIGFuZCB0aGUgdXBsb2Fk IG9mIG9uZSBkaXJlY3RvcnkgdG8geW91ciBUZXh0cGF0dGVybiBmb2xkZXIuPC9wPgogPHA+ Q29udGFpbmVkIHdpdGhpbiB0aGUgemlwIGFyY2hpdmUgYXJlIHR3byBmaWxlczoKICA8b2w+ CiAgIDxsaT48Yj5lYmwtaW1hZ2UtZWRpdF92MS4wLnR4dDwvYj4gOiBUaGlzIGlzIHRoZSBw bHVnaW4gY29kZSB0aGF0IGlzIHBhc3RlZCBpbnRvIHRoZSB0ZXh0Ym94IGluIDxpPkFkbWlu IC0+IFBsdWdpbnM8L2k+PC9saT4KICAgPGxpPjxiPmpjcm9wPC9iPiA6IFRoaXMgZm9sZGVy IHdpbGwgbmVlZCB0byBiZSB1cGxvYWRlZCB0byB0aGUgVGV4dHBhdHRlcm4gZGlyZWN0b3J5 IChlLmcuLCAvdGV4dHBhdHRlcm4vICk8L2xpPgogIDwvb2w+CiA8L3A+CiA8cD5PbmNlIHRo ZSBhYm92ZSBoYXMgYmVlbiBjb21wbGV0ZWQsIGFjdGl2YXRlIHRoZSBwbHVnaW4gaW4gPGk+ QWRtaW4gLT4gUGx1Z2luczwvaT48L3A+CiA8cD5PbmNlIHRoZSBwbHVnaW4gaGFzIGJlZW4g YWN0aXZhdGVkLCBuYXZpZ2F0ZSB0byA8aT5Db250ZW50IC0+IEV4dGVuc2lvbnMgLT4gRUJM IEltYWdlIEVkaXQ8L2k+LiBUaGUgdGVtcCBmb2xkZXIgYW5kIGRiIGZpZWxkIHdpbGwgYmUg Y3JlYXRlZC4gVGhlIHBsdWdpbiB3aWxsIGJlIHJlYWR5IGZvciB1c2UgYXQgdGhpcyBwb2lu dC48L3A+CgogPGgzPlVzYWdlIEluc3RydWN0aW9uczwvaDM+CiA8cD5GdXJ0aGVyIGhlbHAg Y2FuIGJlIGZvdW5kIG9ubGluZSBpbiB0aGUgdGV4dHBhdHRlcm4gZm9ydW0gdG9waWM6ICI8 c3Ryb25nPjxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGlj LnBocD9pZD0yOTU0NyI+ZWJsIGltYWdlIGVkaXQgdjEuMCA8L2E+PC9zdHJvbmc+IjwvcD4K IDx1bD4KIAk8bGk+PGI+Q3JvcDwvYj46IFRoaXMgdGFiIHBlcm1pdHMgdGhlIGNyb3BwaW5n IG9mIGltYWdlcy4gQ2xpY2sgYW5kIGRyYWcgYWNyb3NzIHRoZSBpbWFnZSB0byBzZWxlY3Qg dGhlIGNyb3AgYXJlYS4gV2hpbGUgc2VsZWN0aW5nIHRoZSBjcm9wIHJlZ2lvbiwgdGhlIHNp emUgb2YgdGhlIGNyb3AgYXJlYSB3aWxsYmUgZGlzcGxheWVkIGluIGFzIFdpZHRoIFggSGVp Z2h0LiBUaGlzIGlzIG1lYXN1cmVkIGluIHBpeGVscy4gWW91J2xsIG5vdGUgdGhhdCB0aGUg YXJlYSBvdXRzaWRlIG9mIHRoZSBjcm9wIHJlZ2lvbiBpcyBkYXJrLCB3aGVyZWFzIHRoZSBh cmVhIGluc2lkZSBpcyBsaWdodGVyLiBUaGlzIGlzIHRoZSBpbnRlbmRlZCBlZmZlY3QuIEV2 ZXJ5dGhpbmcgd2l0aGluIHRoZSBjcm9wIGFyZWEgd2lsbCBiZSBzZWxlY3RlZCBhbmQgd2ls bCByZXBsYWNlIHRoZSBvcmlnaW5hbCBpbWFnZSBvbmNlIHRoZSA8Yj5Dcm9wIE9yaWdpbmFs PC9iPiBidXR0b24gaXMgY2xpY2tlZC4KCTx1bD4KCQk8bGk+PGk+UHJlZGVmaW5lZCBzaXpl PC9pPjogVGhpcyBkcm9wLWRvd24gYm94IGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgcHJl LWRlZmluZWQgY3JvcCBhcmVhIHNlbGVjdGlvbnMuIFRoZXkgbWF5IGJlIG1vdmVkIGFyb3Vu ZCBhbnl3aGVyZSBvbiB0aGUgaW1hZ2UuIElmIG5lZWRlZCwgdGhlc2UgYXJlYXMgY2FuIGJl IHNpemVkIGRpZmZlcmVudGx5LCBidXQgdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgb3JpZ2lu YWwgd2lsbCByZW1haW4uIDxpPihGb3VuZCBpbiBUaHVtYm5haWwgQ3JvcCBhcyB3ZWxsLik8 L2k+PGxpPgoJCTxsaT48aT5Mb2NrIEFzcGVjdCBSYXRpbzwvaT46IFVuY2hlY2tpbmcgdGhp cyBib3ggd2lsbCBhbGxvdyBmb3IgYSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvIHRoYW4gd2hh dCB3YXMgc2VsZWN0ZWQgaW4gdGhlIGRyb3AgZG93biBib3guIDxpPihGb3VuZCBpbiBUaHVt Ym5haWwgQ3JvcCBhcyB3ZWxsLik8L2k+PC9saT4KCTwvdWw+PC9saT4KIAk8bGk+PGI+VGh1 bWJuYWlsIENyb3A8L2I+OiBOZWFybHkgaWRlbnRpY2FsIGluIGZ1bmN0aW9uIHRvIHRoZSBt YWluIGltYWdlIGNyb3AsIHRoZSB0aHVtYm5haWwgY3JvcCBhbGxvd3MgZm9yIGEgc2VsZWN0 ZWQgcmVnaW9uIHRvIGJlIGhpZ2hsaWdodGVkIHRvIGFjdCBhcyB0aGUgcHJpbWFyeSBpbWFn ZSB0aHVtYm5haWwuIFRvIGNyZWF0ZSB0aGUgY3JvcHBlZCB0aHVtYm5haWwsIHNlbGVjdCB0 aGUgY3JvcC1hcmVhLiBJZiB5b3Ugd2FudCB0aGUgaW1hZ2UgcmVzaXplZCB0byBhIHNwZWNp ZmljIGRpbWVuc2lvbiwgY2hlY2sgPGk+UmVzaXplIFRodW1ibmFpbDwvaT4gYW5kIGVkaXQg dGhlIHNpemUgYWNjb3JkaW5nbHkuIE9uY2UgeW91IGFyZSBzYXRpc2lmaWVkIHdpdGggdGhl IGNyb3AgYXJlYSBhbmQgdGhlIG9wdGlvbnMsIGNsaWNrIG9uIHRoZSBDcmVhdGUgVGh1bWJu YWlsIGJ1dHRvbi4gPC9saT4KIAk8bGk+PGI+Um90YXRlPC9iPjogVGhpcyB0YWIgYWxsb3dz IHRocmVlIHNlcGVyYXRlIG1ldGhvZHMgb2Ygcm90YXRpbmcuIDEuIFJvdGF0ZSBDbG9ja3dp c2UgOTAmZGVnOyAoVHVybiBSaWdodCksIDIuIENvdW50ZXItQ2xvY2t3aXNlIDkwJmRlZzsg KExlZnQgVHVybikgb3IgMy4gMTgwJmRlZzsgKEZsaXApLiBDbGlja2luZyBhbnkgb2YgdGhl c2UgYnV0dG9ucyB3aWxsIHJvdGF0ZSB0aGUgb3JpZ2luYWwgYnV0dG9uLiA8ZW0+RG8gbm90 IHJlcGVhdGVkbHkgcm90YXRlIHRoZSBpbWFnZXMgYXMgdGhpcyB3aWxsIGdyYWR1YWxseSBk ZWdyYWRlIGltYWdlIHF1YWxpdHk8L2VtPi48L2xpPgogCTxsaT48Yj5SZXNpemU8L2I+OiBU aGlzIHRhYiBhbGxvd3MgdGhlIGZvciBhIGxvbmdlc3Qtc2lkZSByZXNpemUgb2YgYW4gb3Jp Z2luYWwgaW1hZ2UuIFNpbXBseSBpbnB1dCB0aGUgZGVzaXJlZCBkaW1lbnNpb25zIGFuZCB0 aGUgaW1hZ2Ugd2lsbCBiZSBzaXplZCBkb3duIHRvIGZpdC4gTm90ZSwgaWYgdGhlIGltYWdl IGlzIHNtYWxsZXIgaW4gYW55IG9uZSBkaW1lbnNpb24gdGhhdCB3aGljaCB3YXMgZW50ZXJl ZCwgaXQgd2lsbCBub3QgYmUgc2l6ZWQgdXAgdG8gZml0LCBidXQgcmF0aGVyLCBzaXplZCBk b3duIGluIHByb3BvcnRpb24gd2l0aCB0aGUgbG9uZ2VzdCBzaWRlLiBJZiB0aGUgaW1hZ2Ug aXMgZW50aXJlbHkgc21hbGxlciB0aGFuIHRoZSBkaW1lbnNpb25zIGVudGVyZWQsIGl0IHdp bGwgbm90IGJlIHJlc2l6ZWQuIDwvbGk+Cgk8bGk+PGI+QmFja3VwPC9iPjogVGhpcyB0YWIg YWxsb3dzIGZvciB0aGUgYmFja2luZy11cCBvZiBhbiBpbWFnZSBpbnRvIGEgYmFja3VwIGZv bGRlciBsb2NhdGVkIHdpdGhpbiB5b3VyIGltYWdlIGRpcmVjdG9yeS4gV2hlbiBhY3RpdmUs IHR3byBidXR0b25zIGFyZSBkaXNwbGF5ZWQuIFRoZSBmaXJzdCwgQmFja3VwIHdpbGwgaW1t ZWRpYXRlbHkgY29weSB0aGUgYXNzb2NpYXRlZCBpbWFnZSB0byB0aGUgYmFja3VwIGRpcmVj dG9yeSBhbmQgb3ZlcndyaXRlIGFueSBpZGVudGljYWxseSBuYW1lZCBmaWxlLiBDbGlja2lu ZyBSZXN0b3JlIHdpbGwgY29weSB0aGF0IGltYWdlIGJhY2sgdG8gdGhlIG1haW4gaW1hZ2Ug ZGlyZWN0b3J5IGJ1dCB3aWxsIHN0aWxsIG1haW50YWluIHRoZSBjb3BpZWQgZmlsZSBpbiB0 aGlzIGxvY2F0aW9uLjwvbGk+CiA8L3VsPjwvcD4KPC9kaXY+Cgo8L2Rpdj4iO3M6MzoibWQ1 IjtzOjMyOiI2NDNkM2NmYmU4NzQ4NDdiZGRmMjQxM2JhNTMxNDcwZSI7fQ==