# pnh_mf v1.2b # Tags for embedding Microformats in page templates and content. # Chris Casciano # http://placenamehere.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NDoiMS4yYiI7czo2OiJhdXRob3IiO3M6MTQ6IkNocmlz IENhc2NpYW5vIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI1OiJodHRwOi8vcGxhY2VuYW1laGVy ZS5jb20vIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MjoiVGFncyBmb3IgZW1iZWRkaW5nIE1p Y3JvZm9ybWF0cyBpbiBwYWdlIHRlbXBsYXRlcyBhbmQgY29udGVudC4iO3M6NDoidHlwZSI7 aToxO3M6NDoibmFtZSI7czo2OiJwbmhfbWYiO3M6NDoiaGVscCI7czozNTEwOiIJPHA+Cmgx LiBbcG5oX21mXSBNaWNyb2Zvcm1hdCBQbHVnaW4gSGVscDwvcD4KCgk8cD5UaGlzIHBsdWdp biBwcm92aWRlcyB0YWdzIGZvciBlbWJlZGRpbmcgTWljcm9mb3JtYXRzIGluIHBhZ2UgdGVt cGxhdGVzLCBmb3JtcyBhbmQgY29udGVudC4gVGFncyBhdmFpbGFibGUgaW4gdGhpcyB2ZXJz aW9uOjwvcD4KCgk8dWw+CgkJPGxpPnR4cDpwbmhfbWZfeGZuPC9saT4KCQk8bGk+dHhwOnBu aF9tZl9oY2FyZDwvbGk+CgkJPGxpPnR4cDpwbmhfbWZfYWRyPC9saT4KCQk8bGk+dHhwOnBu aF9tZl9oY2FsZW5kYXI8L2xpPgoJCTxsaT50eHA6cG5oX21mX2hyZXZpZXc8L2xpPgoJCTxs aT50eHA6cG5oX21mX3RhZzwvbGk+CgkJPGxpPnR4cDpwbmhfbWZfbGljZW5zZTwvbGk+CgkJ PGxpPnR4cDpwbmhfbWZfZ2VvPC9saT4KCTwvdWw+CgoJPHA+QWxsIG9mIHRoZXNlIHRhZ3Mg Y2FuIGJlIHVzZWQgaW4gZWl0aGVyIHRlbXBsYXRlcyAoJiM4MjE2O3BhZ2VzJiM4MjE3Oyks IHNuaXBwZXRzICgmIzgyMTY7Zm9ybXMmIzgyMTc7KSBvciBpbiBhcnRpY2xlIGJvZGllcywg YnV0IGNhbm5vdCBiZSB1c2VkIGluIGNvbW1lbnRzLjwvcD4KCgk8aDI+dHhwOnBuaF9tZl94 Zm48L2gyPgoKCTxwPlVzYWdlOiA8Y29kZT4mIzYwO3R4cDpwbmhfbWZfeGZuJiM2MjsmIzYw Oy90eHA6cG5oX21mX3hmbiYjNjI7PC9jb2RlPjwvcD4KCgk8aDM+QXR0cmlidXRlcyAmIENv bnRlbnQ8L2gzPgoKCTx1bD4KCQk8bGk+cmVsPC9saT4KCQk8bGk+aHJlZjwvbGk+CgkJPGxp PmlkPC9saT4KCQk8bGk+Y2xhc3M8L2xpPgoJCTxsaT50aXRsZTwvbGk+CgkJPGxpPm5hbWUg KGNvbnRlbnQpPC9saT4KCTwvdWw+CgoJPGgyPnR4cDpwbmhfbWZfaGNhcmQ8L2gyPgoKCTxw PlVzYWdlOiA8Y29kZT4mIzYwO3R4cDpwbmhfbWZfaGNhcmQgLyYjNjI7PC9jb2RlPjxiciAv PgpVc2FnZTogPGNvZGU+JiM2MDt0eHA6cG5oX21mX2hjYXJkJiM2MjsmIzYwO3R4cDpwbmhf bWZfYWRyIC8mIzYyOyYjNjA7L3R4cDpwbmhfbWZfaGNhcmQmIzYyOzwvY29kZT48L3A+CgoJ PGgzPkF0dHJpYnV0ZXMgJiBDb250ZW50PC9oMz4KCgk8dWw+CgkJPGxpPm5hbWU8L2xpPgoJ CTxsaT5ocmVmPC9saT4KCQk8bGk+b3JnPC9saT4KCQk8bGk+b3JnaHJlZjwvbGk+CgkJPGxp PnBob3RvPC9saT4KCQk8bGk+ZW1haWw8L2xpPgoJCTxsaT53b3JrdGVsPC9saT4KCQk8bGk+ aG9tZXRlbDwvbGk+CgkJPGxpPmNlbGx0ZWw8L2xpPgoJCTxsaT53b3JrZmF4PC9saT4KCQk8 bGk+YWRkcmVzcyhlcykgKGNvbnRlbnQsIHVzaW5nIHBuaF9tZl9hZHIpPC9saT4KCTwvdWw+ CgoJPGgyPnR4cDpwbmhfbWZfYWRyPC9oMj4KCgk8cD5Vc2FnZTogPGNvZGU+JiM2MDt0eHA6 cG5oX21mX2FkciAvJiM2Mjs8L2NvZGU+PC9wPgoKCTxoMz5BdHRyaWJ1dGVzPC9oMz4KCgk8 dWw+CgkJPGxpPnR5cGU8L2xpPgoJCTxsaT5wb3N0b2ZmaWNlYm94PC9saT4KCQk8bGk+c3Ry ZWV0YWRkcmVzczwvbGk+CgkJPGxpPmV4dGVuZGVkYWRkcmVzczwvbGk+CgkJPGxpPmxvY2Fs aXR5PC9saT4KCQk8bGk+cmVnaW9uPC9saT4KCQk8bGk+cG9zdGFsY29kZTwvbGk+CgkJPGxp PmNvdW50cnk8L2xpPgoJPC91bD4KCgk8aDI+dHhwOnBuaF9tZl9oY2FsZW5kYXI8L2gyPgoK CTxwPlVzYWdlOiA8Y29kZT4mIzYwO3R4cDpwbmhfbWZfaGNhbGVuZGFyJiM2MjsmIzYwOy90 eHA6cG5oX21mX2hjYWxlbmRhciYjNjI7PC9jb2RlPjwvcD4KCgk8aDM+QXR0cmlidXRlcyAm IENvbnRlbnQ8L2gzPgoKCTx1bD4KCQk8bGk+c3VtbWFyeTwvbGk+CgkJPGxpPmxvY2F0aW9u PC9saT4KCQk8bGk+aHJlZjwvbGk+CgkJPGxpPmR0c3RhcnQgKG1hY2hpbmUgZm9ybWF0dGVk IHN0YXJ0KTwvbGk+CgkJPGxpPnN0YXJ0IChodW1hbiByZWFkYWJsZSBzdGFydCk8L2xpPgoJ CTxsaT5kdGVuZCAobWFjaGluZSBmb3JtYXR0ZWQgZW5kKTwvbGk+CgkJPGxpPmVuZCAoaHVt YW4gcmVhZGFibGUgZW5kKTwvbGk+CgkJPGxpPmRlc2NyaXB0aW9uIChjb250ZW50KTwvbGk+ Cgk8L3VsPgoKCTxwPk5PVEU6IFJlYWQgZm9yIGh0dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dp a2kvaGNhbGVuZGFyIHByb3BlciBkYXRlIHVzYWdlLiBWYWx1ZSB1c2VkIGluIHRhZyBpcyBp biBleHBlY3RlZCBtYWNoaW5lIHJlYWRhYmxlIGZvcm1hdC48L3A+CgoJPGgyPnR4cDpwbmhf bWZfaHJldmlldzwvaDI+CgoJPHA+VXNhZ2U6IDxjb2RlPiYjNjA7dHhwOnBuaF9tZl9ocmV2 aWV3JiM2MjsmIzYwOy90eHA6cG5oX21mX2hyZXZpZXcmIzYyOzwvY29kZT48L3A+CgoJPGgz PkF0dHJpYnV0ZXMgJiBDb250ZW50PC9oMz4KCgk8dWw+CgkJPGxpPnN1bW1hcnk8L2xpPgoJ CTxsaT50eXBlIChzZWxlY3Rpb24pPC9saT4KCQk8bGk+cmF0aW5nICgxLTUpPC9saT4KCQk8 bGk+aXRlbSArIGRlc2NyaXB0aW9uIChjb250ZW50KTwvbGk+Cgk8L3VsPgoKCTxwPk5PVEU6 IFRoZSBtZXRob2Qgb2YgZGVmaW5pbmcgdGhlIGl0ZW0gdG8gYmUgcmV2aWV3ZWQgaXMgZGVw ZW5kZW50IG9uIHRoZSBpdGVtIHR5cGUgc2VsZWN0ZWQgKGV2ZW50LCBidXNpbmVzcywgcHJv ZHVjdCwgZXRjLikuIFRoZSB0YWcgaGVscGVyIG91dHB1dCBzcGVjaWZpZXMgd2hhdCBvdGhl ciBpbmZvcm1hdGlvbiBpcyBuZWVkZWQuIFJlYWQgaHR0cDovL21pY3JvZm9ybWF0cy5vcmcv d2lraS9ocmV2aWV3IGZvciBwcm9wZXIgdXNhZ2UuPC9wPgoKCTxoMj50eHA6cG5oX21mX3Rh ZzwvaDI+CgoJPHA+VXNhZ2U6IDxjb2RlPiYjNjA7dHhwOnBuaF9tZl90YWcmIzYyOyYjNjA7 L3R4cDpwbmhfbWZfdGFnJiM2Mjs8L2NvZGU+PC9wPgoKCTxoMz5BdHRyaWJ1dGVzICYgQ29u dGVudDwvaDM+CgoJPHVsPgoJCTxsaT5ocmVmIChpZiBub3QgcHJvdmlkZWQgdXNlcyB0ZWNo bm9yYXRpKTwvbGk+CgkJPGxpPmlkPC9saT4KCQk8bGk+Y2xhc3M8L2xpPgoJCTxsaT50aXRs ZTwvbGk+CgkJPGxpPnRhZyAoY29udGVudCk8L2xpPgoJPC91bD4KCgk8aDI+dHhwOnBuaF9t Zl9saWNlbnNlPC9oMj4KCgk8cD5Vc2FnZTogPGNvZGU+JiM2MDt0eHA6cG5oX21mX2xpY2Vu c2UmIzYyOyYjNjA7L3R4cDpwbmhfbWZfbGljZW5zZSYjNjI7PC9jb2RlPjwvcD4KCgk8aDM+ QXR0cmlidXRlcyAmIENvbnRlbnQ8L2gzPgoKCTx1bD4KCQk8bGk+aHJlZjwvbGk+CgkJPGxp PmlkPC9saT4KCQk8bGk+Y2xhc3M8L2xpPgoJCTxsaT50aXRsZTwvbGk+CgkJPGxpPmxpbmsg dGV4dCAoY29udGVudCk8L2xpPgoJPC91bD4KCgk8aDI+dHhwOnBuaF9tZl9nZW88L2gyPgoK CTxwPlVzYWdlOiA8Y29kZT4mIzYwO3R4cDpwbmhfbWZfZ2VvIC8mIzYyOzwvY29kZT48L3A+ CgoJPGgzPkF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+bGF0PC9saT4KCQk8bGk+bG9u ZzwvbGk+Cgk8L3VsPgoKCTxwPkZvciBtb3JlIGRldGFpbGVkIGV4YW1wbGVzIGFuZCB1cGRh dGVzIHBsZWFzZSBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9wbGFjZW5hbWVoZXJlLmNvbS9U WFAvcG5oX21mLyI+cGx1Z2luJiM4MjE3O3MgaG9tZSBwYWdlPC9hPi48L3A+CgoiO3M6NDoi Y29kZSI7czoyMTA3NToiCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLy8gUHVibGljIHNpZGUgdGFncwoKCS8vIEEgdGFnIGZvciB0 aGUgWEZOIG1pY3JvZm9ybWF0CgkvLyA8dHhwOnBuaF9tZl94Zm4gcmVsPSJjb250YWN0IiBo cmVmPSJodHRwOi8vcGxhY2VuYW1laGVyZS5jb20vIj5DaHJpczwvdHhwOnBuaF9tZl94Zm4+ CgkvLyBhbHNvIGFjY2VwdHMgc3RhbmRhcmQgPGE+IGF0dHJpYnV0ZXM6IGlkLCBjbGFzcywg dGl0bGUKCglmdW5jdGlvbiBwbmhfbWZfeGZuKCRhdHRzLCR0ZXh0PScnKSB7CgkJZXh0cmFj dChsQXR0cyhhcnJheSgKCQkJJ3JlbCcgID0+ICcnLAoJCQknaHJlZicgID0+ICcnLAoJCSks JGF0dHMpKTsKCgkJLy8gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgcmVwbGFjZSB0aGUgdGFn IG9uIHRoZSBwYWdlCgkJJG1hcmt1cCA9ICc8YSBocmVmPSInLiRocmVmLiciJzsKCQkkbWFy a3VwIC49ICcgcmVsPSInLiRyZWwuJyInOwoKCQlpZiAoaXNzZXQoJGNsYXNzKSkgeyAkbWFy a3VwIC49ICcgY2xhc3M9IicuJGNsYXNzLiciJzsgfQoJCWlmIChpc3NldCgkaWQpKSB7ICRt YXJrdXAgLj0gJyBpZD0iJy4kaWQuJyInOyB9CgoJCWlmIChpc3NldCgkdGl0bGUpKSB7ICRt YXJrdXAgLj0gJyB0aXRsZT0iJy4kdGl0bGUuJyInOyB9CgkJJG1hcmt1cCAuPSAnPicuJHRl eHQuJzwvYT4nOwoJCXJldHVybiAkbWFya3VwOwoJfQoKCS8vIEEgdGFnIGZvciB0aGUgcmVs VGFnIG1pY3JvZm9ybWF0CgkvLyBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGxpbmsgdG8gdGVj aG5vcmF0aQoJLy8gPHR4cDpwbmhfbWZfdGFnPnRlY2g8L3R4cDpwbmhfbWZfdGFnPgoJLy8g PHR4cDpwbmhfbWZfdGFnIGhyZWY9Imh0dHA6Ly9kZWwuaWNpby51cy90YWcvdGVjaCI+dGVj aDwvdHhwOnBuaF9tZl90YWc+CgkvLyBhbHNvIGFjY2VwdHMgc3RhbmRhcmQgPGE+IGF0dHJp YnV0ZXM6IGlkLCBjbGFzcywgdGl0bGUKCgoJZnVuY3Rpb24gcG5oX21mX3RhZygkYXR0cywk dGV4dD0nJykgewoJCWV4dHJhY3QoJGF0dHMpOwoKCQkvLyBpZiB0aGVyZSB3YXMgbm8gZXhw bGljaXQgdXJsIGdpdmVuLCB1c2UgdGVjaG5vcmF0aQoJCWlmICghaXNzZXQoJGhyZWYpKSB7 CgkJCSRocmVmID0gJ2h0dHA6Ly90ZWNobm9yYXRpLmNvbS90YWcvJy4kdGV4dDsKCQl9CgoJ CS8vIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHRhZyBvbiB0aGUgcGFn ZQoJCSRtYXJrdXAgPSAnPGEgaHJlZj0iJy4kaHJlZi4nIic7CgkJJG1hcmt1cCAuPSAnIHJl bD0idGFnIic7CgkJaWYgKGlzc2V0KCRpZCkpIHsgJG1hcmt1cCAuPSAnIGlkPSInLiRpZC4n Iic7IH0KCQlpZiAoaXNzZXQoJGNsYXNzKSkgeyAkbWFya3VwIC49ICcgY2xhc3M9IicuJGNs YXNzLiciJzsgfQoJCWlmIChpc3NldCgkdGl0bGUpKSB7ICRtYXJrdXAgLj0gJyB0aXRsZT0i Jy4kdGl0bGUuJyInOyB9CgkJJG1hcmt1cCAuPSAnPicuJHRleHQuJzwvYT4nOwoJCXJldHVy biAkbWFya3VwOwoJfQoKCS8vIEEgdGFnIGZvciB0aGUgZ2VvIG1pY3JvZm9ybWF0CgkvLyA8 dHhwOnBuaF9tZl9nZW8gbGF0PSIiIGxvbmc9IiIgLz4KCgoJZnVuY3Rpb24gcG5oX21mX2dl bygkYXR0cykgewoJCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJCSdsYXQnICA9PiAnMCcsCgkJ CSdsb25nJyAgPT4gJzAnLAoJCSksJGF0dHMpKTsKCgkJJG1hcmt1cCA9ICc8c3BhbiBjbGFz cz0iZ2VvIj4nOwoJCSRtYXJrdXAgLj0gJzxzcGFuIGNsYXNzPSJsYXRpdHVkZSI+Jy4kbGF0 Lic8L3NwYW4+ICc7CgkJJG1hcmt1cCAuPSAnPHNwYW4gY2xhc3M9ImxvbmdpdHVkZSI+Jy4k bG9uZy4nPC9zcGFuPic7CgkJJG1hcmt1cCAuPSAnPC9zcGFuPic7CgoJCXJldHVybiAkbWFy a3VwOwoJfQoKCS8vIEEgdGFnIGZvciB0aGUgaENhbGVuZGFyIG1pY3JvZm9ybWF0CgkvLyBt YXJrdXAgdGVtcGxhdGUgb3JpZ2luYWxseSB0YWtlbiBmcm9tOiBodHRwOi8vbWljcm9mb3Jt YXRzLm9yZy9jb2RlL2hjYWxlbmRhci9jcmVhdG9yCgkvLyA8dHhwOnBuaF9tZl9oY2FsZW5k YXIgc3VtbWFyeT0iIiBsb2NhdGlvbj0iIiBocmVmPSIiIHN0YXJ0PSIiIGVuZD0iIj5EZXNj cmlwdGlvbjwvdHhwOnBuaF9tZl9oY2FsZW5kYXI+CgoJZnVuY3Rpb24gcG5oX21mX2hjYWxl bmRhcigkYXR0cywkdGV4dD0nJykgewoJCWV4dHJhY3QoJGF0dHMpOwoKCQkvLyBmb3JtYXQg aHVtYW4gcmVhZGFibGUgZGF0ZXMKCQkvLyRzdGFydF90aW1lID0gc3RydG90aW1lKCRkdHN0 YXJ0KTsKCQkvLyRlbmRfZW5kID0gc3RydG90aW1lKCRkdHN0YXJ0KTsKCgkJLy8gVGhlIHJl dHVybmVkIHZhbHVlIHdpbGwgcmVwbGFjZSB0aGUgdGFnIG9uIHRoZSBwYWdlCgoJCSRtYXJr dXAgPSAnPGRpdiBjbGFzcz0idmV2ZW50Ij4nOwoJCWlmIChpc3NldCgkaHJlZikpIHsgJG1h cmt1cCAuPSAnPGEgY2xhc3M9InVybCIgaHJlZj0iJy4kaHJlZi4nIj4nOyB9CgoJCWlmIChp c3NldCgkZHRzdGFydCkpIHsKCQkJJG1hcmt1cCAuPSAnPGFiYnIgY2xhc3M9ImR0c3RhcnQi IHRpdGxlPSInLiRkdHN0YXJ0LiciPic7CgkJCWlmIChpc3NldCgkc3RhcnQpKSB7CgkJCQkk bWFya3VwIC49ICRzdGFydDsKCQkJfSBlbHNlIHsKCQkJCWxpc3QoJGQsJHQpID0gZXhwbG9k ZSgiVCIsJGR0c3RhcnQpOwoJCQkJJG1hcmt1cCAuPSBkYXRlKCdNLiBqLCBZJyxzdHJ0b3Rp bWUoJGQpKS4nICcuJHQ7CgkJCX0KCQkJJG1hcmt1cCAuPSAnPC9hYmJyPic7CgkJfQoJCWlm IChpc3NldCgkZHRlbmQpKSB7CgkJCSRtYXJrdXAgLj0gJyAtIDxhYmJyIGNsYXNzPSJkdGVu ZCIgdGl0bGU9IicuJGR0ZW5kLiciPic7CgkJCWlmIChpc3NldCgkZW5kKSkgewoJCQkJJG1h cmt1cCAuPSAkZW5kOwoJCQl9IGVsc2UgewoJCQkJbGlzdCgkZCwkdCkgPSBleHBsb2RlKCJU IiwkZHRlbmQpOwoJCQkJaWYgKGlzc2V0KCR0KSkgewoJCQkJCSRtYXJrdXAgLj0gZGF0ZSgn TS4gaiwgWScsc3RydG90aW1lKCRkKSkuJyAnLiR0OwoJCQkJfSBlbHNlIHsKCQkJCQkkbWFy a3VwIC49IGRhdGUoJ00uIGosIFknLChzdHJ0b3RpbWUoJGQpLTg2NDAwKSk7CgkJCQl9CgkJ CX0KCQkJJG1hcmt1cCAuPSAnPC9hYmJyPic7IH0KCQlpZiAoaXNzZXQoJHN1bW1hcnkpKSB7 ICRtYXJrdXAgLj0gJyAtIDxzcGFuIGNsYXNzPSJzdW1tYXJ5Ij4nLiRzdW1tYXJ5Lic8L3Nw YW4+JzsgfQoJCWlmIChpc3NldCgkbG9jYXRpb24pKSB7ICRtYXJrdXAgLj0gJyAtIDxzcGFu IGNsYXNzPSJsb2NhdGlvbiI+Jy4kbG9jYXRpb24uJzwvc3Bhbj4nOyB9CgkJaWYgKGlzc2V0 KCRocmVmKSkgeyAkbWFya3VwIC49ICc8L2E+JzsgfQoKCQkkbWFya3VwIC49ICc8ZGl2IGNs YXNzPSJkZXNjcmlwdGlvbiI+Jy4kdGV4dC4nPC9kaXY+JzsKCgkJJG1hcmt1cCAuPSAnPC9k aXY+JzsKCQlyZXR1cm4gJG1hcmt1cDsKCX0KCgkvLyBBIHRhZyBmb3IgdGhlIGhSZXZpZXcg bWljcm9mb3JtYXQKCS8vIDx0eHA6cG5oX21mX2hyZXZpZXcgc3VtbWFyeT0iIiB0eXBlPSIi IHJhdGluZz0iIj5JdGVtPC90eHA6cG5oX21mX2hyZXZpZXc+RGVzY3JpcHRpb248dHhwOnBu aF9tZl9ocmV2aWV3X2VuZCAvPgoKCWZ1bmN0aW9uIHBuaF9tZl9ocmV2aWV3KCRhdHRzLCR0 ZXh0PScnKSB7CgkJZXh0cmFjdCgkYXR0cyk7CgoJCS8vIFRoZSByZXR1cm5lZCB2YWx1ZSB3 aWxsIHJlcGxhY2UgdGhlIHRhZyBvbiB0aGUgcGFnZQoKCQkkbWFya3VwID0gJzxkaXYgY2xh c3M9ImhyZXZpZXciPic7CgkJLy8gc3VtbWFyeQoJCSRtYXJrdXAgLj0gJzxwIGNsYXNzPSJz dW1tYXJ5Ij4nLiRzdW1tYXJ5Lic8L3A+JzsKCgkJLy8gcmF0aW5nCgkJaWYgKGlzc2V0KCRy YXRpbmcpKSB7CgkJCSRtYXJrdXAgLj0gJzxkaXY+UmF0aW5nOiA8YWJiciBjbGFzcz0icmF0 aW5nIiB0aXRsZT0iJy4kcmF0aW5nLiciPic7CgkJCWZvciAoJHg9MTskeDw9JHJhdGluZzsk eCsrKXsKCQkJCSRtYXJrdXAgLj0gJyonOwoJCQl9CgkJCSRtYXJrdXAgLj0gJzwvYWJicj48 L2Rpdj4nOwoKCQl9CgoJCS8vIHR5cGUKCQkkbWFya3VwIC49ICc8IS0tPHNwYW4gY2xhc3M9 InR5cGUiPicuJHR5cGUuJzwvc3Bhbj4tLT4nOwoJCSRtYXJrdXAgLj0gJzxkaXYgY2xhc3M9 ImRlc2NyaXB0aW9uIGl0ZW0iPicuJHRleHQuJzwvZGl2Pic7CgoJCSRtYXJrdXAgLj0gJzwv ZGl2Pic7CgkJcmV0dXJuICRtYXJrdXA7Cgl9CgoKCS8vIEEgdGFnIGZvciB0aGUgcmVsTGlj ZW5zZSBtaWNyb2Zvcm1hdAoJLy8gPHR4cDpwbmhfbWZfbGljZW5zZSBocmVmPSJodHRwOi8v Y3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8yLjAvIj5jYyBieSAyLjA8L3R4cDpw bmhfbWZfbGljZW5zZT4KCS8vIGFsc28gYWNjZXB0cyBzdGFuZGFyZCA8YT4gYXR0cmlidXRl czogaWQsIGNsYXNzLCB0aXRsZQoKCWZ1bmN0aW9uIHBuaF9tZl9saWNlbnNlKCRhdHRzLCR0 ZXh0PScnKSB7CgkJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkJJ2hyZWYnICA9PiAnJywKCQkp LCRhdHRzKSk7CgoJCS8vIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHRh ZyBvbiB0aGUgcGFnZQoJCSRtYXJrdXAgPSAnPGEgaHJlZj0iJy4kaHJlZi4nIic7CgkJJG1h cmt1cCAuPSAnIHJlbD0ibGljZW5zZSInOwoJCWlmIChpc3NldCgkaWQpKSB7ICRtYXJrdXAg Lj0gJyBpZD0iJy4kaWQuJyInOyB9CgkJaWYgKGlzc2V0KCRjbGFzcykpIHsgJG1hcmt1cCAu PSAnIGNsYXNzPSInLiRjbGFzcy4nIic7IH0KCQlpZiAoaXNzZXQoJHRpdGxlKSkgeyAkbWFy a3VwIC49ICcgdGl0bGU9IicuJHRpdGxlLiciJzsgfQoJCSRtYXJrdXAgLj0gJz4nLiR0ZXh0 Lic8L2E+JzsKCQlyZXR1cm4gJG1hcmt1cDsKCX0KCgkvLyBBIHRhZyBmb3IgdGhlIGhjYXJk IG1pY3JvZm9ybWF0CgkvLyBtYXJrdXAgdGVtcGxhdGUgb3JpZ2luYWxseSB0YWtlbiBmcm9t OiBodHRwOi8vdGFudGVrLmNvbS9taWNyb2Zvcm1hdHMvaGNhcmQtY3JlYXRvci5odG1sCgkv LyA8dHhwOnBuaF9tZl9oY2FyZCBuYW1lPSIiIHN0cmVldGFkZHJlc3M9IiIgZXh0ZW5kZWRh ZGRyZXNzPSIiIGxvY2FsaXR5PSIiIHJlZ2lvbj0iIiBwb3N0YWxjb2RlPSIiIGNvdW50cnlu YW1lPSIiIC8+TmFtZTwvdHhwOnBuaF9tZl9oY2FyZD4KCglmdW5jdGlvbiBwbmhfbWZfaGNh cmQoJGF0dHMsJHRleHQ9JycpIHsKCQlleHRyYWN0KCRhdHRzKTsKCgoJCS8vIFRoZSByZXR1 cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHRhZyBvbiB0aGUgcGFnZQoJCSRtYXJrdXAg PSAnPGRpdiBjbGFzcz0idmNhcmQiPic7CgoJCWlmIChpc3NldCgkcGhvdG8pKSB7ICRtYXJr dXAgLj0gJzxpbWcgc3JjPSInLiRwaG90by4nIiBhbHQ9InBob3RvIiBjbGFzcz0icGhvdG8i IC8+JzsgfQoJCWlmIChpc3NldCgkaHJlZikpIHsKCQkJJG1hcmt1cCAuPSAnPGEgY2xhc3M9 InVybCBmbiIgaHJlZj0iJy4kaHJlZi4nIj4nLiRuYW1lLic8L2E+JzsKCQl9IGVsc2UgewoJ CQkkbWFya3VwIC49ICc8c3BhbiBjbGFzcz0iZm4iPicuJG5hbWUuJzwvc3Bhbj4nOwoJCX0K CgkJaWYgKGlzc2V0KCRvcmcpKSB7CgkJCWlmIChpc3NldCgkb3JnaHJlZikpIHsKCQkJCSRt YXJrdXAgLj0gJzxkaXY+PGEgaHJlZj0iJy4kb3JnaHJlZi4nIiBjbGFzcz0ib3JnIj4nLiRv cmcuJzwvYT48L2Rpdj4nOwoJCQl9IGVsc2UgewoJCQkJJG1hcmt1cCAuPSAnPGRpdiBjbGFz cz0ib3JnIj4nLiRvcmcuJzwvZGl2Pic7CgkJCX0KCQl9CgoKCgkJLy8gd29ya3RlbAoJCWlm IChpc3NldCgkd29ya3RlbCkpIHsgJG1hcmt1cCAuPSAnPGRpdiBjbGFzcz0idGVsIj48c3Bh biBjbGFzcz0idHlwZSI+V29yazwvc3Bhbj46IDxzcGFuIGNsYXNzPSJ2YWx1ZSI+Jy4kd29y a3RlbC4nPC9zcGFuPjwvZGl2Pic7IH0KCQkvLyBob21ldGVsCgkJaWYgKGlzc2V0KCRob21l dGVsKSkgeyAkbWFya3VwIC49ICc8ZGl2IGNsYXNzPSJ0ZWwiPjxzcGFuIGNsYXNzPSJ0eXBl Ij5Ib21lPC9zcGFuPjogPHNwYW4gY2xhc3M9InZhbHVlIj4nLiRob21ldGVsLic8L3NwYW4+ PC9kaXY+JzsgfQoJCS8vIGNlbGx0ZWwKCQlpZiAoaXNzZXQoJGNlbGx0ZWwpKSB7ICRtYXJr dXAgLj0gJzxkaXYgY2xhc3M9InRlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkNlbGw8L3NwYW4+ OiA8c3BhbiBjbGFzcz0idmFsdWUiPicuJGNlbGx0ZWwuJzwvc3Bhbj48L2Rpdj4nOyB9CgkJ Ly8gd29ya2ZheAoJCWlmIChpc3NldCgkd29ya2ZheCkpIHsgJG1hcmt1cCAuPSAnPGRpdiBj bGFzcz0idGVsIj48c3BhbiBjbGFzcz0idHlwZSI+RmF4PC9zcGFuPjogPHNwYW4gY2xhc3M9 InZhbHVlIj4nLiR3b3JrZmF4Lic8L3NwYW4+PC9kaXY+JzsgfQoJCS8vIGltIC0gbmVlZCB1 cmwsIHNlcnZpY2UgJiBzY3JlZW4gbmFtZT8KCQkvLyBlbWFpbAoJCWlmIChpc3NldCgkZW1h aWwpKSB7ICRtYXJrdXAgLj0gJzxkaXY+PGEgY2xhc3M9ImVtYWlsIiBocmVmPSJtYWlsdG86 Jy4kZW1haWwuJyI+Jy4kZW1haWwuJzwvYT48L2Rpdj4nOyB9CgoJCSRtYXJrdXAgLj0gJHRl eHQ7IC8vIGFueSBhZGRyZXNzZXMKCgkJJG1hcmt1cCAuPSAnPC9kaXY+JzsKCQlyZXR1cm4g JG1hcmt1cDsKCX0KCgoJLy8gQSB0YWcgZm9yIHRoZSBhZHIgbWljcm9mb3JtYXQKCS8vIGNh dXRpb246IHRoaXMgbWljcm9mb3JtYXQgaXMgc3RpbGwgaW4gZHJhZnQgbW9kZQoJLy8gPHR4 cDpwbmhfbWZfYWRyIHN0cmVldGFkZHJlc3M9IiIgZXh0ZW5kZWRhZGRyZXNzPSIiIGxvY2Fs aXR5PSIiIHJlZ2lvbj0iIiBwb3N0YWxjb2RlPSIiIGNvdW50cnk9IiIgLz4KCglmdW5jdGlv biBwbmhfbWZfYWRyKCRhdHRzKSB7CgkJZXh0cmFjdCgkYXR0cyk7CgoKCgkJLy8gVGhlIHJl dHVybmVkIHZhbHVlIHdpbGwgcmVwbGFjZSB0aGUgdGFnIG9uIHRoZSBwYWdlCgkJJG1hcmt1 cCA9ICc8ZGl2IGNsYXNzPSJhZHIiPic7CgoJCWlmIChpc3NldCgkdHlwZSkpIHsgJG1hcmt1 cCAuPSAnPGRpdj48c3BhbiBjbGFzcz0idHlwZSI+Jy4kdHlwZS4nPC9zcGFuPiBBZGRyZXNz PC9kaXY+JzsgfQoJCWlmIChpc3NldCgkcG9zdG9mZmljZWJveCkpIHsgJG1hcmt1cCAuPSAn PGRpdiBjbGFzcz0icG9zdC1vZmZpY2UtYm94Ij4nLiRwb3N0b2ZmaWNlYm94Lic8L2Rpdj4n OyB9CgkJaWYgKGlzc2V0KCRzdHJlZXRhZGRyZXNzKSkgeyAkbWFya3VwIC49ICc8ZGl2IGNs YXNzPSJzdHJlZXQtYWRkcmVzcyI+Jy4kc3RyZWV0YWRkcmVzcy4nPC9kaXY+JzsgfQoJCWlm IChpc3NldCgkZXh0ZW5kZWRhZGRyZXNzKSkgeyAkbWFya3VwIC49ICc8ZGl2IGNsYXNzPSJl eHRlbmRlZC1hZGRyZXNzIj4nLiRleHRlbmRlZGFkZHJlc3MuJzwvZGl2Pic7IH0KCQlpZiAo aXNzZXQoJGxvY2FsaXR5KSkgeyAkbWFya3VwIC49ICc8c3BhbiBjbGFzcz0ibG9jYWxpdHki PicuJGxvY2FsaXR5Lic8L3NwYW4+LCAnOyB9CgkJaWYgKGlzc2V0KCRyZWdpb24pKSB7ICRt YXJrdXAgLj0gJzxzcGFuIGNsYXNzPSJyZWdpb24iPicuJHJlZ2lvbi4nPC9zcGFuPic7IH0K CQlpZiAoaXNzZXQoJHBvc3RhbGNvZGUpKSB7ICRtYXJrdXAgLj0gJyA8c3BhbiBjbGFzcz0i cG9zdGFsLWNvZGUiPicuJHBvc3RhbGNvZGUuJzwvc3Bhbj4nOyB9CgkJaWYgKGlzc2V0KCRj b3VudHJ5KSkgeyAkbWFya3VwIC49ICc8ZGl2IGNsYXNzPSJjb3VudHJ5LW5hbWUiPicuJGNv dW50cnkuJzwvZGl2Pic7IH0KCgkJJG1hcmt1cCAuPSAnPC9kaXY+JzsKCQlyZXR1cm4gJG1h cmt1cDsKCX0KCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIEV4YW1wbGUgYWRtaW4gc2lkZSBwbHVnaW4KCglpZiAoQHR4cGlu dGVyZmFjZSA9PSAnYWRtaW4nKSB7CgkJZ2xvYmFsICR0ZXh0YXJyYXk7CgkgICAgLy9yZWdp c3Rlcl9jYWxsYmFjaygicG5oX21mX3RhZ2dlbmhlbHBlcnMiLCAidGFnIiwgJycsIDEpOwoJ ICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJwbmhfbWZfcGFnZWhlbHBlcnMiLCAicGFnZSIpOwoJ ICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJwbmhfbWZfZm9ybWhlbHBlcnMiLCAiZm9ybSIpOwoJ ICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJwbmhfbWZfYXJ0aWNsZWhlbHBlcnMiLCAiYXJ0aWNs ZSIpOwoKCQkkdGV4dGFycmF5W3N0cnRvbG93ZXIoJ3RhZ19wbmhfbWZfeGZuJyldID0gJ1hG Tic7CgkJJHRleHRhcnJheVtzdHJ0b2xvd2VyKCd0YWdfcG5oX21mX2hjYXJkJyldID0gJ2hD YXJkJzsKCQkkdGV4dGFycmF5W3N0cnRvbG93ZXIoJ3RhZ19wbmhfbWZfYWRyJyldID0gJ2Fk cic7CgkJJHRleHRhcnJheVtzdHJ0b2xvd2VyKCd0YWdfcG5oX21mX2hjYWxlbmRhcicpXSA9 ICdoQ2FsZW5kYXInOwoJCSR0ZXh0YXJyYXlbc3RydG9sb3dlcigndGFnX3BuaF9tZl9ocmV2 aWV3JyldID0gJ2hSZXZpZXcnOwoJCSR0ZXh0YXJyYXlbc3RydG9sb3dlcigndGFnX3BuaF9t Zl90YWcnKV0gPSAncmVsLXRhZyc7CgkJJHRleHRhcnJheVtzdHJ0b2xvd2VyKCd0YWdfcG5o X21mX2xpY2Vuc2UnKV0gPSAncmVsLWxpY2Vuc2UnOwoJCSR0ZXh0YXJyYXlbc3RydG9sb3dl cigndGFnX3BuaF9tZl9nZW8nKV0gPSAnZ2VvJzsKCgl9CgoJZnVuY3Rpb24gdGFnX3BuaF9t Zl94Zm4oKQoJewoJCWdsb2JhbCAkc3RlcCwkZW5kZm9ybSwkdGFnX25hbWU7CgkJJGxhYmVs ID0gZ3BzKCdsYWJlbCcpOwoJCSRpbnZhcnMgPSBncHNhKGFycmF5KCdyZWwnLCdocmVmJykp OwoJCWV4dHJhY3QoJGludmFycyk7CgkJJGxhYmVsID0gKCEkbGFiZWwpID8gJ05hbWUnIDog JGxhYmVsOwoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFibGUoJ2xpc3QnKS4KCQkJdHIodGRjcyho ZWQoZ1R4dCgndGFnX3BuaF9tZl94Zm4nKSwzKSwyKSApIC4KCQkJdGFnUm93KCdyZWwnLGZJ bnB1dCgndGV4dCcsJ3JlbCcsJHJlbCwnZWRpdCcsJycsJycsMjUpKSAuCgkJCXRhZ1Jvdygn aHJlZicsIGZJbnB1dCgndGV4dCcsJ2hyZWYnLCRocmVmLCdlZGl0JywnJywnJywyNSkpLgoJ CQl0YWdSb3coJ25hbWUnLCBmSW5wdXQoJ3RleHQnLCdsYWJlbCcsJGxhYmVsLCdlZGl0Jywn JywnJywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJJG91dCAuPSAoJHN0ZXA9PSdidWlsZCcp ID8gdGRiKHRiKCR0YWdfbmFtZSwgJGludmFycywgJGxhYmVsKSkgOiAnJzsKCQlyZXR1cm4g JG91dDsKCX0KCWZ1bmN0aW9uIHRhZ19wbmhfbWZfaGNhcmQoKQoJewoJCWdsb2JhbCAkc3Rl cCwkZW5kZm9ybSwkdGFnX25hbWU7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsgLy8gYXZvaWQg Y29sbGlzaW9uIHdpdGggdHhwcyB1c2Ugb2YgbmFtZT8KCQkkYWRkcmVzcyA9IGdwcygnYWRk cmVzcycpOwoJCSRpbnZhcnMgPSBncHNhKGFycmF5KCdocmVmJywnb3JnJywnb3JnaHJlZics J3Bob3RvJywnZW1haWwnLCd3b3JrdGVsJywnaG9tZXRlbCcsJ2NlbGx0ZWwnLCd3b3JrZmF4 JykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJG91dCA9IGZvcm0oc3RhcnRUYWJsZSgnbGlz dCcpLgoJCQl0cih0ZGNzKGhlZChnVHh0KCd0YWdfcG5oX21mX2hjYXJkJyksMyksMikgKSAu CgkJCXRhZ1JvdygncGVyc29uXCdzIG5hbWUnLCBmSW5wdXQoJ3RleHQnLCduYW1lJywkbmFt ZSwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdocmVmJywgZklucHV0KCd0ZXh0Jywn aHJlZicsJGhyZWYsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1Jvdygnb3JnYW5pemF0aW9u JyxmSW5wdXQoJ3RleHQnLCdvcmcnLCRvcmcsJ2VkaXQnLCcnLCcnLDI1KSkgLgoJCQl0YWdS b3coJ29yZ1wncyBocmVmJyxmSW5wdXQoJ3RleHQnLCdvcmdocmVmJywkb3JnaHJlZiwnZWRp dCcsJycsJycsMjUpKSAuCgkJCXRhZ1JvdygncGhvdG8gaHJlZicsIGZJbnB1dCgndGV4dCcs J3Bob3RvJywkcGhvdG8sJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1JvdygnZW1haWwnLGZJ bnB1dCgndGV4dCcsJ2VtYWlsJywkZW1haWwsJ2VkaXQnLCcnLCcnLDI1KSkgLgoJCQl0YWdS b3coJ3dvcmsgcGhvbmUnLCBmSW5wdXQoJ3RleHQnLCd3b3JrdGVsJywkd29ya3RlbCwnZWRp dCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdob21lIHBob25lJyxmSW5wdXQoJ3RleHQnLCdo b21ldGVsJywkaG9tZXRlbCwnZWRpdCcsJycsJycsMjUpKSAuCgkJCXRhZ1JvdygnY2VsbCcs IGZJbnB1dCgndGV4dCcsJ2NlbGx0ZWwnLCRjZWxsdGVsLCdlZGl0JywnJywnJywyNSkpLgoJ CQl0YWdSb3coJ3dvcmsgZmF4JywgZklucHV0KCd0ZXh0Jywnd29ya2ZheCcsJHdvcmtmYXgs J2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1JvdygnaGFzIGFkZHJlc3M/JywgeWVzbm9fcG9w KCdhZGRyZXNzJywkYWRkcmVzcykpLgoJCQkkZW5kZm9ybQoJCSk7CgkJaWYgKCRzdGVwPT0n YnVpbGQnKSB7CgkJCSRpbnZhcnNbJ25hbWUnXSA9ICRuYW1lOwoJCQkkb3V0IC49ICgkYWRk cmVzcz09J3knKSA/IHRkYih0YigkdGFnX25hbWUsICRpbnZhcnMsICc8IS0tcmVwbGFjZSB3 aXRoIGFkci0tPicpKSA6IHRkYih0YigkdGFnX25hbWUsICRpbnZhcnMpKTsKCQl9CgkJcmV0 dXJuICRvdXQ7Cgl9CglmdW5jdGlvbiB0YWdfcG5oX21mX2FkcigpCgl7CgkJZ2xvYmFsICRz dGVwLCRlbmRmb3JtLCR0YWdfbmFtZTsKCQkkaW52YXJzID0gZ3BzYShhcnJheSgndHlwZScs J3Bvc3RvZmZpY2Vib3gnLCdzdHJlZXRhZGRyZXNzJywnZXh0ZW5kZWRhZGRyZXNzJywnbG9j YWxpdHknLCdyZWdpb24nLCdwb3N0YWxjb2RlJywnY291bnRyeScpKTsKCQlleHRyYWN0KCRp bnZhcnMpOwoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFibGUoJ2xpc3QnKS4KCQkJdHIodGRjcyho ZWQoZ1R4dCgndGFnX3BuaF9tZl9hZHInKSwzKSwyKSApIC4KCQkJdGFnUm93KCd0eXBlJyxm SW5wdXQoJ3RleHQnLCd0eXBlJywkdHlwZSwnZWRpdCcsJycsJycsMjUpKSAuCgkJCXRhZ1Jv dygncG9zdG9mZmljZWJveCcsIGZJbnB1dCgndGV4dCcsJ3Bvc3RvZmZpY2Vib3gnLCRwb3N0 b2ZmaWNlYm94LCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ3N0cmVldGFkZHJlc3Mn LCBmSW5wdXQoJ3RleHQnLCdzdHJlZXRhZGRyZXNzJywkc3RyZWV0YWRkcmVzcywnZWRpdCcs JycsJycsMjUpKS4KCQkJdGFnUm93KCdleHRlbmRlZGFkZHJlc3MnLGZJbnB1dCgndGV4dCcs J2V4dGVuZGVkYWRkcmVzcycsJGV4dGVuZGVkYWRkcmVzcywnZWRpdCcsJycsJycsMjUpKSAu CgkJCXRhZ1JvdygnbG9jYWxpdHknLCBmSW5wdXQoJ3RleHQnLCdsb2NhbGl0eScsJGxvY2Fs aXR5LCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ3JlZ2lvbicsIGZJbnB1dCgndGV4 dCcsJ3JlZ2lvbicsJHJlZ2lvbiwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdwb3N0 YWxjb2RlJyxmSW5wdXQoJ3RleHQnLCdwb3N0YWxjb2RlJywkcG9zdGFsY29kZSwnZWRpdCcs JycsJycsMjUpKSAuCgkJCXRhZ1JvdygnY291bnRyeScsIGZJbnB1dCgndGV4dCcsJ2NvdW50 cnknLCRjb3VudHJ5LCdlZGl0JywnJywnJywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJJG91 dCAuPSAoJHN0ZXA9PSdidWlsZCcpID8gdGRiKHRiKCR0YWdfbmFtZSwgJGludmFycykpIDog Jyc7CgkJcmV0dXJuICRvdXQ7Cgl9CglmdW5jdGlvbiB0YWdfcG5oX21mX2hjYWxlbmRhcigp Cgl7CgkJZ2xvYmFsICRzdGVwLCRlbmRmb3JtLCR0YWdfbmFtZTsKCQkkbGFiZWwgPSBncHMo J2xhYmVsJyk7CgkJJGludmFycyA9IGdwc2EoYXJyYXkoJ3N1bW1hcnknLCdsb2NhdGlvbics J2hyZWYnLCdkdHN0YXJ0Jywnc3RhcnQnLCdkdGVuZCcsJ2VuZCcpKTsKCQlleHRyYWN0KCRp bnZhcnMpOwoJCSRsYWJlbCA9ICghJGxhYmVsKSA/ICdEZXNjcmlwdGlvbicgOiAkbGFiZWw7 CgkJJG91dCA9IGZvcm0oc3RhcnRUYWJsZSgnbGlzdCcpLgoJCQl0cih0ZGNzKGhlZChnVHh0 KCd0YWdfcG5oX21mX2hjYWxlbmRhcicpLDMpLDIpICkgLgoJCQl0YWdSb3coJ3N1bW1hcnkn LCBmSW5wdXQoJ3RleHQnLCdzdW1tYXJ5Jywkc3VtbWFyeSwnZWRpdCcsJycsJycsMjUpKS4K CQkJdGFnUm93KCdsb2NhdGlvbicsIGZJbnB1dCgndGV4dCcsJ2xvY2F0aW9uJywkbG9jYXRp b24sJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1JvdygnaHJlZicsIGZJbnB1dCgndGV4dCcs J2hyZWYnLCRocmVmLCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2R0c3RhcnQnLCBm SW5wdXQoJ3RleHQnLCdkdHN0YXJ0JywkZHRzdGFydCwnZWRpdCcsJycsJycsMjUpKS4KCQkJ dGFnUm93KCdzdGFydCcsIGZJbnB1dCgndGV4dCcsJ3N0YXJ0Jywkc3RhcnQsJ2VkaXQnLCcn LCcnLDI1KSkuCgkJCXRhZ1JvdygnZHRlbmQnLCBmSW5wdXQoJ3RleHQnLCdkdGVuZCcsJGR0 ZW5kLCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2VuZCcsIGZJbnB1dCgndGV4dCcs J2VuZCcsJGVuZCwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdkZXNjcmlwdGlvbics IGZJbnB1dCgndGV4dCcsJ2xhYmVsJywkbGFiZWwsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCSRl bmRmb3JtCgkJKTsKCQkkb3V0IC49ICgkc3RlcD09J2J1aWxkJykgPyB0ZGIodGIoJHRhZ19u YW1lLCAkaW52YXJzLCAkbGFiZWwpKSA6ICcnOwoJCXJldHVybiAkb3V0OwoJfQoJZnVuY3Rp b24gdGFnX3BuaF9tZl9ocmV2aWV3KCkKCXsKCQlnbG9iYWwgJHN0ZXAsJGVuZGZvcm0sJHRh Z19uYW1lOwoJCSRsYWJlbCA9IGdwcygnbGFiZWwnKTsKCQkkaW52YXJzID0gZ3BzYShhcnJh eSgnc3VtbWFyeScsJ3R5cGUnLCdyYXRpbmcnKSk7CgkJZXh0cmFjdCgkaW52YXJzKTsKCQlp ZiAoKCR0eXBlPT0icGVyc29uIil8fCgkdHlwZT09ImJ1c2luZXNzIikpIHsKCQkJJGxhYmVs ID0gIlxuICIuJzwhLS1SZXBsYWNlIHdpdGggaENhcmQtLS0+Jy4iXG4iLidSZXZpZXcgQ29u dGVudCcuIlxuIjsKCQl9IGVsc2VpZiAoKCR0eXBlPT0iZXZlbnQiKSkgewoJCQkkbGFiZWwg PSAiXG4gIi4nPCEtLVJlcGxhY2Ugd2l0aCBoQ2FsZW5kYXItLT4nLiJcbiIuJ1JldmlldyBD b250ZW50Jy4iXG4iOwoJCX0gZWxzZSB7CgkJCSRsYWJlbCA9ICJcbiAiLic8YSBjbGFzcz0i Zm4gdXJsIiBocmVmPSJFRElUVEhJUyI+RURJVFRISVM8L2E+PGJyIC8+Jy4iXG4iLidSZXZp ZXcgQ29udGVudCcuIlxuIjsKCQl9CgoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFibGUoJ2xpc3Qn KS4KCQkJdHIodGRjcyhoZWQoZ1R4dCgndGFnX3BuaF9tZl9ocmV2aWV3JyksMyksMikgKSAu CgkJCXRhZ1Jvdygnc3VtbWFyeScsIGZJbnB1dCgndGV4dCcsJ3N1bW1hcnknLCRzdW1tYXJ5 LCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ3R5cGUnLCBzZWxlY3RJbnB1dCgndHlw ZScsYXJyYXkoJ3Byb2R1Y3QnPT4ncHJvZHVjdCcsJ2J1c2luZXNzJz0+J2J1c2luZXNzJywn ZXZlbnQnPT4nZXZlbnQnLCdwZXJzb24nPT4ncGVyc29uJywncGxhY2UnPT4ncGxhY2UnLCd3 ZWJzaXRlJz0+J3dlYnNpdGUnLCd1cmwnPT4ndXJsJyksJycsMSkpLgoJCQl0YWdSb3coJ3Jh dGluZycsIHNlbGVjdElucHV0KCdyYXRpbmcnLGFycmF5KDE9PjEsMj0+MiwzPT4zLDQ9PjQs NT0+NSksJycsMSkpLgovLwkJCXRhZ1JvdygnZGVzY3JpcHRpb24nLCBmSW5wdXQoJ3RleHQn LCdkZXNjcmlwdGlvbicsJGRlc2NyaXB0aW9uLCdlZGl0JywnJywnJywyNSkpLgoJCQkkZW5k Zm9ybQoJCSk7CgkJJG91dCAuPSAoJHN0ZXA9PSdidWlsZCcpID8gdGRiKHRiKCR0YWdfbmFt ZSwgJGludmFycywgJGxhYmVsKSkgOiAnJzsKCQlyZXR1cm4gJG91dDsKCX0KCWZ1bmN0aW9u IHRhZ19wbmhfbWZfdGFnKCkKCXsKCQlnbG9iYWwgJHN0ZXAsJGVuZGZvcm0sJHRhZ19uYW1l OwoJCSRsYWJlbCA9IGdwcygnbGFiZWwnKTsKCQkkaW52YXJzID0gZ3BzYShhcnJheSgnaHJl ZicpKTsKCQlleHRyYWN0KCRpbnZhcnMpOwoJCSRsYWJlbCA9ICghJGxhYmVsKSA/ICdUYWcn IDogJGxhYmVsOwoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFibGUoJ2xpc3QnKS4KCQkJdHIodGRj cyhoZWQoZ1R4dCgndGFnX3BuaF9tZl90YWcnKSwzKSwyKSApIC4KCQkJdGFnUm93KCdocmVm JywgZklucHV0KCd0ZXh0JywnaHJlZicsJGhyZWYsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRh Z1JvdygndGFnJywgZklucHV0KCd0ZXh0JywnbGFiZWwnLCRsYWJlbCwnZWRpdCcsJycsJycs MjUpKS4KCQkJJGVuZGZvcm0KCQkpOwoJCSRvdXQgLj0gKCRzdGVwPT0nYnVpbGQnKSA/IHRk Yih0YigkdGFnX25hbWUsICRpbnZhcnMsICRsYWJlbCkpIDogJyc7CgkJcmV0dXJuICRvdXQ7 Cgl9CglmdW5jdGlvbiB0YWdfcG5oX21mX2xpY2Vuc2UoKQoJewoJCWdsb2JhbCAkc3RlcCwk ZW5kZm9ybSwkdGFnX25hbWU7CgkJJGxhYmVsID0gZ3BzKCdsYWJlbCcpOwoJCSRpbnZhcnMg PSBncHNhKGFycmF5KCdocmVmJykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJGxhYmVsID0g KCEkbGFiZWwpID8gJ0xpY2Vuc2UnIDogJGxhYmVsOwoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFi bGUoJ2xpc3QnKS4KCQkJdHIodGRjcyhoZWQoZ1R4dCgndGFnX3BuaF9tZl9saWNlbnNlJyks MyksMikgKSAuCgkJCXRhZ1JvdygnaHJlZicsIGZJbnB1dCgndGV4dCcsJ2hyZWYnLCRocmVm LCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2xpY2Vuc2UnLCBmSW5wdXQoJ3RleHQn LCdsYWJlbCcsJGxhYmVsLCdlZGl0JywnJywnJywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJ JG91dCAuPSAoJHN0ZXA9PSdidWlsZCcpID8gdGRiKHRiKCR0YWdfbmFtZSwgJGludmFycywg JGxhYmVsKSkgOiAnJzsKCQlyZXR1cm4gJG91dDsKCX0KCWZ1bmN0aW9uIHRhZ19wbmhfbWZf Z2VvKCkKCXsKCQlnbG9iYWwgJHN0ZXAsJGVuZGZvcm0sJHRhZ19uYW1lOwoJCSRpbnZhcnMg PSBncHNhKGFycmF5KCdsYXQnLCdsb25nJykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJG91 dCA9IGZvcm0oc3RhcnRUYWJsZSgnbGlzdCcpLgoJCQl0cih0ZGNzKGhlZChnVHh0KCd0YWdf cG5oX21mX2dlbycpLDMpLDIpICkgLgoJCQl0YWdSb3coJ2xhdCcsZklucHV0KCd0ZXh0Jywn bGF0JywkbGF0LCdlZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCdsb25nJywgZklucHV0 KCd0ZXh0JywnbG9uZycsJGxvbmcsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCSRlbmRmb3JtCgkJ KTsKCQkkb3V0IC49ICgkc3RlcD09J2J1aWxkJykgPyB0ZGIodGIoJHRhZ19uYW1lLCAkaW52 YXJzKSkgOiAnJzsKCQlyZXR1cm4gJG91dDsKCX0KCgkvLyBQYWdlIGVkaXRvciBoZWxwZXIg dGFncwoJLy8gSW5zZXJ0cyB0YWcgaGVscGVycyBpbiBsZWZ0IGNvbHVtbiB2aWEgRE9NIG1h bmlwdWxhdGlvbgoJZnVuY3Rpb24gcG5oX21mX3BhZ2VoZWxwZXJzKCkgewogICAgZWNobzw8 PEVPRgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8IS0tCgppZiAoZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHsKCgkvLyBUaGlzIGlzIHNvbWUgYXdmdWwgbG9n aWMgdG8gZmluZCB0aGUgdGFibGUgY2VsbCBJIHdhbnQKCXZhciB0YmxjZWxsID0gZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gyJylbMF0ucGFyZW50Tm9kZTsKCgl2YXIgbmV3 aGVscGVycyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1AnKTsKCW5ld2hlbHBlcnMuY2xh c3NOYW1lID0gJ2NvbHVtbic7CgluZXdoZWxwZXJzLmlubmVySFRNTCA9ICdNaWNyb2Zvcm1h dHM8YnIgLz48c21hbGw+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4 O3RhZ19uYW1lPXBuaF9tZl94Zm4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwg XCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVz aXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5YRk48L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxh bmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl9oY2FyZCIgb25jbGlj az0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAw LGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhD YXJkPC9hPjxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODt0 YWdfbmFtZT1wbmhfbWZfaHJldmlldyIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVm LCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxy ZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhSZXZpZXc8L2E+PGJyIC8+PGEgdGFyZ2V0 PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl9hZHIiIG9u Y2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRo PTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7 Ij5hZHI8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4 O3RhZ19uYW1lPXBuaF9tZl9oY2FsZW5kYXIiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMu aHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJh cnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oQ2FsZW5kYXI8L2E+PGJyIC8+PGEg aHJlZj0iP2V2ZW50PXRhZyYjMzg7dGFnX25hbWU9cG5oX21mX3RhZyIgb25jbGljaz0id2lu ZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdo dD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPnJlbC10YWc8 L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19u YW1lPXBuaF9tZl9saWNlbnNlIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwn cG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6 YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+cmVsLWxpY2Vuc2U8L2E+PGJyIC8+PGEgdGFyZ2V0 PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl9nZW8iIG9u Y2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRo PTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7 Ij5nZW88L2E+PC9zbWFsbD4nOwoJdGJsY2VsbC5hcHBlbmRDaGlsZChuZXdoZWxwZXJzKTsK fQoKCi0tPgo8L3NjcmlwdD4KRU9GOwoJfQoKCS8vIEZvcm0gZWRpdG9yIGhlbHBlciB0YWdz CgkvLyBJbnNlcnRzIHRhZyBoZWxwZXJzIGluIGxlZnQgY29sdW1uIHZpYSBET00gbWFuaXB1 bGF0aW9uCglmdW5jdGlvbiBwbmhfbWZfZm9ybWhlbHBlcnMoKSB7CiAgICBlY2hvPDw8RU9G Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KCmlmIChkb2N1bWVudC5n ZXRFbGVtZW50c0J5VGFnTmFtZSkgewoKCS8vIFRoaXMgaXMgc29tZSBhd2Z1bCBsb2dpYyB0 byBmaW5kIHRoZSB0YWJsZSBjZWxsIEkgd2FudAoJdmFyIHRibGNlbGwgPSBkb2N1bWVudC5n ZXRFbGVtZW50c0J5VGFnTmFtZSgnaDInKVswXS5wYXJlbnROb2RlOwoKCXZhciBuZXdoZWxw ZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnUCcpOwoJbmV3aGVscGVycy5pbm5lckhU TUwgPSAnTWljcm9mb3JtYXRzPGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVu dD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl94Zm4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRo aXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9s bGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5YRk48L2E+PGJyIC8+PGEgdGFy Z2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl9oY2Fy ZCIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwn d2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBm YWxzZTsiPmhDYXJkPC9hPjxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9 dGFnJiMzODt0YWdfbmFtZT1wbmhfbWZfaHJldmlldyIgb25jbGljaz0id2luZG93Lm9wZW4o dGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Ny b2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhSZXZpZXc8L2E+PGJyIC8+ PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9t Zl9hZHIiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wn LCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1 cm4gZmFsc2U7Ij5hZHI8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVu dD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl9oY2FsZW5kYXIiIG9uY2xpY2s9IndpbmRvdy5v cGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAw LHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oQ2FsZW5kYXI8L2E+ PGJyIC8+PGEgaHJlZj0iP2V2ZW50PXRhZyYjMzg7dGFnX25hbWU9cG5oX21mX3RhZyIgb25j bGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9 NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsi PnJlbC10YWc8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcm IzM4O3RhZ19uYW1lPXBuaF9tZl9saWNlbnNlIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlz LmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxi YXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+cmVsLWxpY2Vuc2U8L2E+PGJyIC8+ PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9t Zl9nZW8iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wn LCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1 cm4gZmFsc2U7Ij5nZW88L2E+JzsKCXRibGNlbGwuYXBwZW5kQ2hpbGQobmV3aGVscGVycyk7 Cn0KCi0tPgo8L3NjcmlwdD4KRU9GOwoJfQoKCS8vIGFydGljbGUgZWRpdG9yIGhlbHBlciB0 YWdzCgkvLyBJbnNlcnRzIHRhZyBoZWxwZXJzIGluIGxlZnQgY29sdW1uIHZpYSBET00gbWFu aXB1bGF0aW9uCglmdW5jdGlvbiBwbmhfbWZfYXJ0aWNsZWhlbHBlcnMoKSB7CiAgICBlY2hv PDw8RU9GCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0KCmlmIChkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCkgewoKCS8vIFRoaXMgaXMgc29tZSBhd2Z1bCBsb2dpYyB0 byBmaW5kIHRoZSB0YWJsZSBjZWxsIEkgd2FudAoJdmFyIHRibGNlbGwgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgndGV4dGlsZV9oZWxwJykucGFyZW50Tm9kZTsKCgl2YXIgbmV3aGVs cGVycyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1AnKTsKCW5ld2hlbHBlcnMuaW5uZXJI VE1MID0gJ01pY3JvZm9ybWF0czxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZl bnQ9dGFnJiMzODt0YWdfbmFtZT1wbmhfbWZfeGZuIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0 aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3Jv bGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+WEZOPC9hPjxiciAvPjxhIHRh cmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODt0YWdfbmFtZT1wbmhfbWZfaGNh cmQiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBc J3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4g ZmFsc2U7Ij5oQ2FyZDwvYT48YnIgLz48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP2V2ZW50 PXRhZyYjMzg7dGFnX25hbWU9cG5oX21mX2hyZXZpZXciIG9uY2xpY2s9IndpbmRvdy5vcGVu KHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNj cm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oUmV2aWV3PC9hPjxiciAv PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODt0YWdfbmFtZT1wbmhf bWZfYWRyIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dc JywgXCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0 dXJuIGZhbHNlOyI+YWRyPC9hPjxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZl bnQ9dGFnJiMzODt0YWdfbmFtZT1wbmhfbWZfaGNhbGVuZGFyIiBvbmNsaWNrPSJ3aW5kb3cu b3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVpZ2h0PTQw MCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+aENhbGVuZGFyPC9h PjxiciAvPjxhIGhyZWY9Ij9ldmVudD10YWcmIzM4O3RhZ19uYW1lPXBuaF9tZl90YWciIG9u Y2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRo PTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7 Ij5yZWwtdGFnPC9hPjxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFn JiMzODt0YWdfbmFtZT1wbmhfbWZfbGljZW5zZSIgb25jbGljaz0id2luZG93Lm9wZW4odGhp cy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xs YmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPnJlbC1saWNlbnNlPC9hPjxiciAv PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODt0YWdfbmFtZT1wbmhf bWZfZ2VvIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dc JywgXCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0 dXJuIGZhbHNlOyI+Z2VvPC9hPic7Cgl0YmxjZWxsLmFwcGVuZENoaWxkKG5ld2hlbHBlcnMp Owp9CgotLT4KPC9zY3JpcHQ+CkVPRjsKCX0KCgoKIjtzOjM6Im1kNSI7czozMjoiZjhhMGNi Yjc0MTU1YzIzZjlhNjE1MWZiYjE5MDkyNmIiO30=