# md_expirations v0.65 # Plugin for expirations of the articles # Martin Dostal # http://martanek.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTQ6Im1kX2V4cGlyYXRpb25zIjtzOjc6InZlcnNpb24iO3M6 NDoiMC42NSI7czo2OiJhdXRob3IiO3M6MTM6Ik1hcnRpbiBEb3N0YWwiO3M6MTA6ImF1dGhv cl91cmkiO3M6MjA6Imh0dHA6Ly9tYXJ0YW5lay5uZXQvIjtzOjExOiJkZXNjcmlwdGlvbiI7 czozODoiUGx1Z2luIGZvciBleHBpcmF0aW9ucyBvZiB0aGUgYXJ0aWNsZXMiO3M6NDoidHlw ZSI7aToxO3M6NDoiaGVscCI7czoyMTUwOiIKCjxoMT5NRCBleHBpcmF0aW9ucyBvZiB0aGUg YXJ0aWNsZXM8L2gxPgoKPHA+Cjxici8+CjxhIGhyZWY9Imh0dHA6Ly93d3cubWFydGFuZWsu bmV0Ij5Ib21lIHNpdGUgZm9yIHRoaXMgcGx1Z2luIC0gbWFydGFuZWsubmV0PC9hPgo8YnIv Pgo8L3A+CgoKPGgyPkN6ZWNoPC9oMj4KCjxwPlRlbnRvIHBsdWdpbiB1bW/FvsWIdWplIHDF mWlkw6Fuw60gZXhwaXJhY2UgxI1sw6Fua8WvLiBQxZlpZMOhdsOhIGRvICJ3cml0ZSB0YWJ1 IiBmaWxlZHNldCwgdmUga3RlcsOpbSBqZSBtb8W+bsOpIHphZGF0IGRhdHVtIGEgxI1hcyBl eHBpcmFjZSBkYW7DqWhvIMSNbMOhbmt1LjwvcD4KPHA+UG9rdWQgdnlwcsWhw60gcGxhdG5v c3QgdG9ob3RvIMSNbMOhbmt1LCB0YWsgamUgZGFuw70gxI1sw6FuZWsgcMWZZXBudXQgZG8g U3RhdHVzdSAiU2tyeXTDvSIuPC9wPgoKPGgzPkluc3RhbGFjZTwvaDM+Cgo8cD5DZWzDvSBw bHVnaW4gc2Ugc2tsw6Fkw6EgemUgMyBpbnN0YWxhxI1uw61jaCBzb3Vib3LFryBhIHplIDIg Im9iamVrdG92w71jaCIgc291Ym9yxa86PGJyLz48L3A+Cgo8cD48Yj5pbnN0YWxhxI1uw60g c291Ym9yeTwvYj4gLSB2bG/FvnRlIGplIHZlZGxlIHNvdWJvcnUgY29uZmlnLnBocDo8YnIv PgoJLSBtZF9leHBpcmF0aW9uc19jcmVhdGVfcGx1Z2luLnBocCAtIHRlbnRvIHNrcmlwdCB2 eXR2b8WZw60ga8OzZCBwcm8gdmxvxb5lbsOtIGRvIGFkbWluaXN0cmHEjW7DrWhvIHJvemhy YW5uw60gdGV4dHBhdHRlcm51PGJyLz4KCS0gemVtX3RwbC5waHAgLSBjcmVhdGVfcGx1Z2lu IHBvdcW+w612w6EgdGVudG8gc2tyaXB0IGsgdnlnZW5lcm92w6Fuw60ga8OzZHUKCS0gbWRf ZXhwaXJhdGlvbnNfaW5zX2xhbl9jei5waHAgLSBpbnN0YWxhY2UgxI1lxaF0aW55CjwvcD4K CjxwPjxiPm9iamVjdCBmaWxlczwvYj4gLSB2bG/FvmUgdG8gZG8gcm9vdHUgd2VidTo8YnIv PgoJLSBtZF9leHBpcmF0aW9ucy5jbGFzcy5waHAgLSB0ZW50byBvYmpla3QgbmHEjcOtdMOh IGRhdGEgeiBkYXRhYsOhemUgYSBwxZlpcHJhdnVqZSBqZSBwcm8gInpvYnJhem92YWPDrSIg b2JqZWt0PGJyLz4KCS0gbWRfZXhwaXJhdGlvbnNfdmlldy5jbGFzcy5waHAgLSB0ZW50byBv Ympla3QgemFqacWhxaV1amUgcG91emUgem9icmF6ZW7DrSBkYXQKPC9wPgoKCjxoMj5Fbmds aXNoPC9oMj4KCjxwPlRoaXMgcGx1Z2luIGFkZCB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGFy dGljbGVzLiBJdCB3aWxsIGFkZCB0aGUgIkV4cGlyYXRpb24gZmllbGRzZXQiIHRvIHRoZSB3 cml0ZSB0YWIuIFdoZW4gdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFydGljbGUgaXMgaW4gdGhl IHBhc3QsIHRoZSBhcnRpY2xlJ3MgU3RhdHVzCmlzIGNoYW5nZWQgdG8gSGlkZGVuLjwvcD4K CjxoMz5JbnN0YWxsYXRpb248L2gzPgoKPHA+VGhlcmUgYXJlIDMgaW5zdGFsbGF0aW9uIGZp bGVzIGFuZCAyIG9iamVjdCBmaWxlczo8YnIvPjwvcD4KCjxwPjxiPmluc3RhbGwgZmlsZXM8 L2I+IC0gcHV0IGl0IG5leHQgdG8gdGhlIGNvbmZpZy5waHAgZmlsZTo8YnIvPgoJLSBtZF9l eHBpcmF0aW9uc19jcmVhdGVfcGx1Z2luLnBocCAtIHRoaXMgd2lsbCBjcmVhdGUgdGhlIGNv ZGUgZm9yIGluc2VydGluZyBpbnRvIGFkbWluIG9mIHRleHRwYXR0ZXJuPGJyLz4KCS0gemVt X3RwbC5waHAgLSBjcmVhdGVfcGx1Z2luIGhhdmUgdG8gdXNlIHRoaXMgZmlsZSBmb3IgY3Jl YXRpbmcgY29kZQoJLSBtZF9leHBpcmF0aW9uc19pbnNfbGFuX2N6LnBocCAtIHRoaXMgc2Ny aXB0IHdpbGwgaW5zdGFsbCB0aGUgY3plY2ggbGFuZ3VhZ2UgZm9yIHRoaXMgcGx1Z2luIChh ZGQgdGhlIGRhdGEgdG8gdGhlIGxhbmd1YWdlIHRhYmxlKQo8L3A+Cgo8cD48Yj5vYmplY3Qg ZmlsZXM8L2I+IC0gcHV0IGl0IHRvIHRoZSByb290IChvbmUgZm9sZGVyIHVwIGZyb20gY29u ZmlnLnBocCBmaWxlKTo8YnIvPgoJLSBtZF9leHBpcmF0aW9ucy5jbGFzcy5waHAgLSB0aGlz IG9iamVjdCB3aWxsIGxvYWQgdGhlIGRhdGEgZnJvbSBkYXRhYmFzZSBhbmQgcHJlcGFyZSBp dCBmb3IgdmlldyBvYmplY3Q8YnIvPgoJLSBtZF9leHBpcmF0aW9uc192aWV3LmNsYXNzLnBo cCAtIHRoaXMgb2JqZWN0IHdpbGwgc2hvdyB0aGUgZGF0YSBmcm9tIG1kX2V4cGlyYXRvbnMu Y2xhc3MucGhwCjwvcD4KCiI7czo0OiJjb2RlIjtzOjg5NDU6IgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCWlmIChAdHhwaW50 ZXJmYWNlID09ICdwdWJsaWMnKQoJewoJCS8vc2tyeWplIGNsYW5reSwga3RlcmUgaml6IG5l bWFqaSBieXQgem9icmF6ZW55CS0gdiBrb25zdHJ1a3RvcnUgb2JqZWt0dQoJCS8vRU46IGhp ZGUgb2xkIGFydGljbGVzIC0gd2hlcmUgdGhlIGV4cGlyYXRpb24gaXMgaW4gdGhlIHBhc3QK CQlpbmNsdWRlX29uY2UoJ3RleHRwYXR0ZXJuL3BsdWdpbnMvbWRfZXhwaXJhdGlvbnMuY2xh c3MucGhwJyk7CgkJJG1kZXhwaXJhdGlvbnMgPSBuZXcgbWRfZXhwaXJhdGlvbnMoKTsKCX0K CgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCgkvL0FETUlOCgoJaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWlu JykKCXsKCQlpbmNsdWRlX29uY2UoJ3BsdWdpbnMvbWRfZXhwaXJhdGlvbnMuY2xhc3MucGhw Jyk7CgkJaW5jbHVkZV9vbmNlKCdwbHVnaW5zL21kX2V4cGlyYXRpb25zX3ZpZXcuY2xhc3Mu cGhwJyk7CgoJCS8vRU46IGl0IHdpbGwgc2hvdyBhbGwgYWN0aXZlIGV4cGlyYXRpb25zID0g ZXhwaXJhdGlvbnMgaW4gdGhlIGZ1dHVyZQoJCXJlZ2lzdGVyX3RhYigiZXh0ZW5zaW9ucyIs ICJtZF9leHBpcmF0aW9ucyIsIGdUeHQoJ3RhYl9tZF9leHBpcmF0aW9ucycpKTsKCgkJLy9F TjogZm9yIHRhYiBpbiBleHRlbnN0aW9ucyAtIHZpZXcgZXhwaXJhdGlvbnMKCQlyZWdpc3Rl cl9jYWxsYmFjaygibWRfZXhwaXJhdGlvbnNfYWRtaW4iLCAibWRfZXhwaXJhdGlvbnMiKTsK CgkJLy9kbyB3cml0ZSB0YWJ1IC0gcHJpIGVkaXRhY2kgY2xhbmt1CgkJLy9FTjogdG8gdGhl IHdyaXRlIHRhYiAtIGZvciBlZGl0IG9mIHRoZSBhcnRpY2xlCgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ21kX2V4cF90b193cml0ZXRhYl9sb2FkJywgJ2FydGljbGUnLCAnZWRpdCcsIDEpOwoK CQkvL3RvdG8gc2Ugdm9sYSB2emR5IC0gcG9rdWQgYnlsIG9kZXNsYW4gZm9ybXVsYXIsIHVr bGFkYSB0byBleHBpcmFjaQoJCS8vRU46IHNhdmUgZXhwaXJhdGlvbiB3aGVuIHRoZSBmb3Jt IHdhcyBwb3N0ZWQKCQlyZWdpc3Rlcl9jYWxsYmFjaygnbWRfZXhwX3NhdmVfYXJ0aWNsZScs J2FydGljbGUnKTsKCgkJLy9kbyB3cml0ZSB0YWJ1IHByaSB2eXR2b3Jlbmkgbm92ZWhvIGNs YW5rdSAtIGppbmFrIHNlIGZ1bmtjZSB1a29uY2kKCQkvL0VOOiB0byB0aGUgd3JpdGUgdGFi IC0gZm9yIG5ldyBhcnRpY2xlIG9ubHkKCQlyZWdpc3Rlcl9jYWxsYmFjaygnbWRfZXhwX2Zv cl9uZXdfYXJ0aWNsZScsJ2FydGljbGUnKTsKCX0KCgkvL0VOOiBhZGQgZXhwaXJhdGlvbiBm aWVsZHNldCB0byB0aGUgd3JpdGUgdGFiCglmdW5jdGlvbiBtZF9leHBfdG9fd3JpdGV0YWJf bG9hZCgpCgl7CgkJLy9FTjogc2VuZCBidWZmZXIgdG8gbXkgZnVuY3Rpb24KCQlvYl9zdGFy dCgnbWRfZXhwX3RvX3dyaXRldGFiX2FydGljbGUnKTsKCX0KCgoJLy9wcmkgZWRpdGFjaSBj bGFua3UgdXBkYXR1anUgaW5mb3JtYWNpIG8gZXhwaXJhY2kKCS8vRU46IHNhdmUgdGhlIGV4 cGlyYXRpb25zIGNoYW5nZXMgd2hlbiBpdCB3YXMgcG9zdGVkCglmdW5jdGlvbiBtZF9leHBf c2F2ZV9hcnRpY2xlKCkKCXsKCQkvL3Vsb3ppdCBleHBpcmFjaQoJCSRtZF9leHBpcmF0aW9u cyA9IG5ldyBtZF9leHBpcmF0aW9ucygpOwoJCSRtZF9leHBpcmF0aW9ucy0+VXBkYXRlRXhw aXJhdGlvbkZyb21Xcml0ZVRhYkdvKCk7Cgl9CgoJLy9FTjogdGhpcyB3aWxsIGFkZCB0aGUg ZXhwaXJhdGlvbiBmaWVsZHNldCB0byB0aGUgZm9ybSBmb3IgbmV3IGFydGljbGUKCS8vIEkg dXNlIEpTCglmdW5jdGlvbiBtZF9leHBfZm9yX25ld19hcnRpY2xlKCRldmVudCwgJHN0ZXAp Cgl7CgkJLy9jaGNpIHRvdG8gdm9sYXQsIGplbiBwb2t1ZCBtYW0gcHJhemRueSBmb3JtIHBy byB2eXR2b3Jlbmkgbm92ZWhvIGNsYW5rdQoJCS8vRU46IGZvciBuZXcgYXJ0aWNsZSBvbmx5 CgkJaWYgKGdwcygnc3RlcCcpICE9ICcnIGFuZCBncHMoJ3N0ZXAnKSAhPSAnY3JlYXRlJykg ZXhpdDsKCgkgCS8vRU46IHRoZSBmaWVsZHNldAokanMgPSA8PDwgRU9GCmZ1bmN0aW9uIEFk ZEV4cGlyYXRpb25Ub1dyaXRlVGFiKCkKewp2YXIgdHIgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgiYXJ0aWNsZS1jb2wtMiIpOwp2YXIgZWxtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRz QnlUYWdOYW1lKCdpbnB1dCcpOwpmb3IgKHZhciBpPTA7IGkgPCBlbG1zLmxlbmd0aDsgaSsr KSB7CglpZiAoZWxtc1tpXS5nZXRBdHRyaWJ1dGUoJ25hbWUnKSA9PSAnc2F2ZScpCgl7CgkJ dmFyIHB1Ymxpc2ggPSBlbG1zW2ldOwoJfQp9CnZhciBmbGRzdCA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoImZpZWxkc2V0Iik7CmZsZHN0LnNldEF0dHJpYnV0ZSgiaWQiLCAid3JpdGUt ZXhwaXJhdGlvbiIpOwp0ci5pbnNlcnRCZWZvcmUoZmxkc3QsIHB1Ymxpc2gpOwp9CkFkZEV4 cGlyYXRpb25Ub1dyaXRlVGFiKCk7CkVPRjsKCQkvL0VOOiBzaG93IEpTCgkJZWNobyhzY3Jp cHRfanMoJGpzKSk7CgoKCQlpZiAoZ3BzKCdzdGVwJykgPT0gJ2NyZWF0ZScpCgkJewoJCQkJ Ly9FTjogY3JlYXRlIG9iamVjdCB3aXRoIGZ1bmN0aW9ucyBmb3IgZXhwaXJhdGlvbgoJCQkJ JG1kX2V4cGlyYXRpb25zID0gbmV3IG1kX2V4cGlyYXRpb25zKCk7CgoJCQkJJGFydGljbGVf aWQgPSBpbnR2YWwoJEdMT0JBTFNbJ0lEJ10pOwoKCQkJCS8vdmltIHV6IG5lY28gbyB0b210 byBjbGFua3UgPwoJCQkJLy9qZSB0YXRvIGV4cGlyYWNlIGFrdGl2bmkgPwoJCQkJaWYgKCRt ZF9leHBpcmF0aW9ucy0+RXhwaXJhdGlvbklzQWN0aXZlRm9yQXJ0aWNsZSgkYXJ0aWNsZV9p ZCkpCgkJCQl7CgkJCQkJJGFjdGl2ZV9jaGVja2VkX3BvbSA9ICdjaGVja2VkPSJjaGVja2Vk Iic7CgkJCQkJJGRlYWN0aXZlX2NoZWNrZWRfcG9tID0gJyc7CgkJCQl9CgkJCQllbHNlCgkJ CQl7CgkJCQkJJGFjdGl2ZV9jaGVja2VkX3BvbSA9ICcnOwoJCQkJCSRkZWFjdGl2ZV9jaGVj a2VkX3BvbSA9ICdjaGVja2VkPSJjaGVja2VkIic7CgkJCQl9CgoJCQkJLy9tYW0gdXogbmVq YWtvdSBleHBpcmFjaSB1bG96ZW5vdSA/CgkJCQlpZiAoJG1kX2V4cGlyYXRpb25zLT5FeHBp cmF0aW9uRXhpc3RzRm9yQXJ0aWNsZSgkYXJ0aWNsZV9pZCkpCgkJCQl7CgkJCQkJICRleHBf ZGF0ZSA9ICRtZF9leHBpcmF0aW9ucy0+R2V0RXhwRGF0ZUZvckFydGljbGUoJGFydGljbGVf aWQpOwoJCQkJfQoJCQkJZWxzZSAvL3Bva3VkIG5lbWFtIHVsb3plbm91IGV4cGlyYWNpLCB0 YWsgdmV6bXUgYWt0dWFsbmkgY2FzCgkJCQl7CgkJCQkJJGV4cF9kYXRlID0gdGltZSgpOwoJ CQkJfQoKCQkJCSR5ZWFyID0gZGF0ZSgiWSIsICRleHBfZGF0ZSk7CgkJCSAgICAkbW9udGgg PSBkYXRlKCJtIiwgJGV4cF9kYXRlKTsKCQkJICAgICRkYXkgPSBkYXRlKCJqIiwgJGV4cF9k YXRlKTsKCgkJCSAgICAkaG91ciA9IGRhdGUoIkgiLCAkZXhwX2RhdGUpOwoJCQkgICAgJG1p bnV0ZSA9IGRhdGUoImkiLCAkZXhwX2RhdGUpOwoJCQkgICAgJHNlY29uZCA9IGRhdGUoInMi LCAkZXhwX2RhdGUpOwoJCX0KCQllbHNlCgkJewoJCQkJJHllYXIgPSBkYXRlKCJZIik7CgkJ CSAgICAkbW9udGggPSBkYXRlKCJtIik7CgkJCSAgICAkZGF5ID0gZGF0ZSgiaiIpOwoKCQkJ ICAgICRob3VyID0gZGF0ZSgiSCIpOwoJCQkgICAgJG1pbnV0ZSA9IGRhdGUoImkiKTsKCQkJ ICAgICRzZWNvbmQgPSBkYXRlKCJzIik7CgoJCQkgICAgJGFjdGl2ZV9jaGVja2VkX3BvbSA9 ICcnOwoJCQkJJGRlYWN0aXZlX2NoZWNrZWRfcG9tID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsK ICAgIAl9CgoKCSAgICAkZW5hYmxlZCA9IGdUeHQoInRhYl9tZF9leHBfZW5hYmxlZCIpOwoJ IAkkZGlzYWJsZWQgPSAgZ1R4dCgidGFiX21kX2V4cF9kaXNhYmxlZCIpOwoKCSAJJGRhdGUg PSBnVHh0KCJkYXRlIik7CgkgCSR0aW1lID0gZ1R4dCgidGltZSIpOwoKCSAgICAvL0VOOiBh ZGQgbXkgZm9ybQokbXlfaHRtbCA9IDw8PEVPRgo8cD48aW5wdXQgdHlwZT0icmFkaW8iIGNs YXNzPSJyYWRpbyIgbmFtZT0iZXhwX2FjdGl2ZSIgdmFsdWU9IjAiICRkZWFjdGl2ZV9jaGVj a2VkX3BvbSAvPgo8bGFiZWwgZm9yPSJleHBfYWN0aXZlIj4kZGlzYWJsZWQ8L2xhYmVsPgo8 aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJyYWRpbyIgbmFtZT0iZXhwX2FjdGl2ZSIgdmFs dWU9IjEiICAkYWN0aXZlX2NoZWNrZWRfcG9tIC8+CjxsYWJlbCBmb3I9ImV4cF9hY3RpdmUi PiRlbmFibGVkPC9sYWJlbD4KPC9wPgo8cD4kZGF0ZSYjMTYwOwo8aW5wdXQgdHlwZT0idGV4 dCIgbmFtZT0iZXhwX3llYXIiIHZhbHVlPSIkeWVhciIgc2l6ZT0iNCIgbWF4bGVuZ3RoPSI0 IiBjbGFzcz0iZWRpdCIgdGFiaW5kZXg9IiIgIHRpdGxlPSInLmdUeHQoInllYXIiKS4nIiAv PiAvCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJleHBfbW9udGgiIHZhbHVlPSIkbW9udGgi IHNpemU9IjIiIG1heGxlbmd0aD0iMiIgY2xhc3M9ImVkaXQiIHRhYmluZGV4PSIiIHRpdGxl PSInLmdUeHQoIm1vbnRoIikuJyIgLz4gLwo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZXhw X2RheSIgdmFsdWU9IiRkYXkiIHNpemU9IjIiIG1heGxlbmd0aD0iMiIgY2xhc3M9ImVkaXQi IHRhYmluZGV4PSIiIHRpdGxlPSInLmdUeHQoImRheSIpLiciIC8+PC9wPgo8cD4kdGltZSYj MTYwOwo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZXhwX2hvdXIiIHZhbHVlPSIkaG91ciIg c2l6ZT0iMiIgbWF4bGVuZ3RoPSIyIiBjbGFzcz0iZWRpdCIgdGFiaW5kZXg9IiIgdGl0bGU9 IicuZ1R4dCgiaG91ciIpLiciIC8+IDoKPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImV4cF9t aW51dGUiIHZhbHVlPSIkbWludXRlIiBzaXplPSIyIiBtYXhsZW5ndGg9IjIiIGNsYXNzPSJl ZGl0IiB0YWJpbmRleD0iIiB0aXRsZT0iJy5nVHh0KCJtaW51dGUiKS4nIiAvPiA6CjxpbnB1 dCB0eXBlPSJ0ZXh0IiBuYW1lPSJleHBfc2Vjb25kIiB2YWx1ZT0iJHNlY29uZCIgc2l6ZT0i MiIgbWF4bGVuZ3RoPSIyIiBjbGFzcz0iZWRpdCIgdGFiaW5kZXg9IiIgdGl0bGU9IicuZ1R4 dCgic2Vjb25kIikuJyIgLz48L3A+CkVPRjsKCgkJLy9FTjogYWRkIGxhYmVsIGZvciBmaWVs ZHNldAoJCSRkYXRlX3RpbWVfcG9tID0gZ1R4dCgidGFiX21kX2V4cF9kYXRlX2FuZF90aW1l Iik7CgkJZWNobyhkb21fYXR0YWNoKCJ3cml0ZS1leHBpcmF0aW9uIiwgIiRkYXRlX3RpbWVf cG9tJiMxNjA7IiwgIiIsICJsZWdlbmQiKSk7CgoJCS8vRU46IGFkZCBteSBmaWVsZHNldAoJ CWVjaG8oZG9tX2F0dGFjaCgnd3JpdGUtZXhwaXJhdGlvbicsICRteV9odG1sKSk7Cgl9Ly9l bmQgZnVuY3Rpb24gZXhwaXJhdGlvbl9mb3JfbmV3X2FydGljbGUKCgoKCS8vRU46IGFkZCBl eHBpcmF0aW9uIGZpZWxkc2V0IGZvciBhcnRpY2xlIC0gYXJ0aWNsZSBlZGl0CglmdW5jdGlv biBtZF9leHBfdG9fd3JpdGV0YWJfYXJ0aWNsZSgkYnVmZmVyKQoJewoJCS8vRU46IGNyZWF0 ZSBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgZm9yIGV4cGlyYXRpb24KCQkkbWRfZXhwaXJhdGlv bnMgPSBuZXcgbWRfZXhwaXJhdGlvbnMoKTsKCgkJLy90b3RvIGplIElEIGFrdHVhbG5paG8g Y2xhbmt1CgkJJGFydGljbGVfaWQgPSAkX1JFUVVFU1RbJ0lEJ107CgoJCS8vdmltIHV6IG5l Y28gbyB0b210byBjbGFua3UgPwoJCS8vamUgdGF0byBleHBpcmFjZSBha3Rpdm5pID8KCQlp ZiAoJG1kX2V4cGlyYXRpb25zLT5FeHBpcmF0aW9uSXNBY3RpdmVGb3JBcnRpY2xlKCRhcnRp Y2xlX2lkKSkKCQl7CgkJCSRhY3RpdmVfY2hlY2tlZF9wb20gPSAnY2hlY2tlZD0iY2hlY2tl ZCInOwoJCQkkZGVhY3RpdmVfY2hlY2tlZF9wb20gPSAnJzsKCQl9CgkJZWxzZQoJCXsKCQkJ JGFjdGl2ZV9jaGVja2VkX3BvbSA9ICcnOwoJCQkkZGVhY3RpdmVfY2hlY2tlZF9wb20gPSAn Y2hlY2tlZD0iY2hlY2tlZCInOwoJCX0KCgkJLy9tYW0gdXogbmVqYWtvdSBleHBpcmFjaSB1 bG96ZW5vdSA/CgkJaWYgKCRtZF9leHBpcmF0aW9ucy0+RXhwaXJhdGlvbkV4aXN0c0ZvckFy dGljbGUoJGFydGljbGVfaWQpKQoJCXsKCQkJICRleHBfZGF0ZSA9ICRtZF9leHBpcmF0aW9u cy0+R2V0RXhwRGF0ZUZvckFydGljbGUoJGFydGljbGVfaWQpOwoJCX0KCQllbHNlIC8vcG9r dWQgbmVtYW0gdWxvemVub3UgZXhwaXJhY2ksIHRhayB2ZXptdSBha3R1YWxuaSBjYXMKCQl7 CgkJCSRleHBfZGF0ZSA9IHRpbWUoKTsKCQl9CgoJCSR5ZWFyID0gZGF0ZSgiWSIsICRleHBf ZGF0ZSk7CgkgICAgJG1vbnRoID0gZGF0ZSgibSIsICRleHBfZGF0ZSk7CgkgICAgJGRheSA9 IGRhdGUoImoiLCAkZXhwX2RhdGUpOwoKCSAgICAkaG91ciA9IGRhdGUoIkgiLCAkZXhwX2Rh dGUpOwoJICAgICRtaW51dGUgPSBkYXRlKCJpIiwgJGV4cF9kYXRlKTsKCSAgICAkc2Vjb25k ID0gZGF0ZSgicyIsICRleHBfZGF0ZSk7CgoKCQkvL0VOOiBhZGQgZXhwaXJhdGlvbiBmaWVs ZHNldAoJCSRuZXcgPSAnPGZpZWxkc2V0IGlkPSJ3cml0ZS1leHBpcmF0aW9uIj4nOwoJICAg ICRuZXcgLj0gJzxsZWdlbmQ+Jy5nVHh0KCJ0YWJfbWRfZXhwX2RhdGVfYW5kX3RpbWUiKS4n JiMxNjA7PC9sZWdlbmQ+JzsKCgoKCSAgICAkbmV3IC49ICc8cD48aW5wdXQgdHlwZT0icmFk aW8iIGNsYXNzPSJyYWRpbyIgbmFtZT0iZXhwX2FjdGl2ZSIgdmFsdWU9IjAiICcuJGRlYWN0 aXZlX2NoZWNrZWRfcG9tLicgLz4nOwoJICAgICRuZXcgLj0gJzxsYWJlbCBmb3I9ImV4cF9h Y3RpdmUiPicuZ1R4dCgidGFiX21kX2V4cF9kaXNhYmxlZCIpLic8L2xhYmVsPic7CgoJICAg ICRuZXcgLj0gJzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9InJhZGlvIiBuYW1lPSJleHBf YWN0aXZlIiB2YWx1ZT0iMSIgJy4kYWN0aXZlX2NoZWNrZWRfcG9tLicgLz4nOwoJICAgICRu ZXcgLj0gJzxsYWJlbCBmb3I9ImV4cF9hY3RpdmUiPicuZ1R4dCgidGFiX21kX2V4cF9lbmFi bGVkIikuJzwvbGFiZWw+PC9wPic7CgoJCSRuZXcgLj0gJzxwPicuZ1R4dCgiZGF0ZSIpLicm IzE2MDsnOwoJICAgICRuZXcgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJleHBfeWVh ciIgdmFsdWU9IicuJHllYXIuJyIgc2l6ZT0iNCIgbWF4bGVuZ3RoPSI0IiBjbGFzcz0iZWRp dCIgdGFiaW5kZXg9IiIgdGl0bGU9IicuZ1R4dCgieWVhciIpLiciICAvPiAvICc7CgkJJG5l dyAuPSAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImV4cF9tb250aCIgdmFsdWU9IicuJG1v bnRoLiciIHNpemU9IjIiIG1heGxlbmd0aD0iMiIgY2xhc3M9ImVkaXQiIHRhYmluZGV4PSIi IHRpdGxlPSInLmdUeHQoIm1vbnRoIikuJyIgLz4gLyAnOwoJCSRuZXcgLj0gJzxpbnB1dCB0 eXBlPSJ0ZXh0IiBuYW1lPSJleHBfZGF5IiB2YWx1ZT0iJy4kZGF5LiciIHNpemU9IjIiIG1h eGxlbmd0aD0iMiIgY2xhc3M9ImVkaXQiIHRhYmluZGV4PSIiIHRpdGxlPSInLmdUeHQoImRh eSIpLiciIC8+PC9wPic7CgoJCSRuZXcgLj0gJzxwPicuZ1R4dCgidGltZSIpLicmIzE2MDsn OwoJCSRuZXcgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJleHBfaG91ciIgdmFsdWU9 IicuJGhvdXIuJyIgc2l6ZT0iMiIgbWF4bGVuZ3RoPSIyIiBjbGFzcz0iZWRpdCIgdGFiaW5k ZXg9IiIgdGl0bGU9IicuZ1R4dCgiaG91ciIpLiciIC8+IDogJzsKCQkkbmV3IC49ICc8aW5w dXQgdHlwZT0idGV4dCIgbmFtZT0iZXhwX21pbnV0ZSIgdmFsdWU9IicuJG1pbnV0ZS4nIiBz aXplPSIyIiBtYXhsZW5ndGg9IjIiIGNsYXNzPSJlZGl0IiB0YWJpbmRleD0iIiB0aXRsZT0i Jy5nVHh0KCJtaW51dGUiKS4nIiAvPiA6ICc7CgkJJG5ldyAuPSAnPGlucHV0IHR5cGU9InRl eHQiIG5hbWU9ImV4cF9zZWNvbmQiIHZhbHVlPSInLiRzZWNvbmQuJyIgc2l6ZT0iMiIgbWF4 bGVuZ3RoPSIyIiBjbGFzcz0iZWRpdCIgdGFiaW5kZXg9IiIgdGl0bGU9IicuZ1R4dCgic2Vj b25kIikuJyIgLz48L3A+JzsKCQkkbmV3IC49ICc8L2ZpZWxkc2V0Pic7CgoKCQkvL0VOOiB3 aGF0IHNoYWxsICBJIGZpbmQgaW4gdGhlIGJ1ZmZlcgoJCSRmaW5kID0gJzxmaWVsZHNldCBp ZD0id3JpdGUtdGltZXN0YW1wIj4nOwoKCQkvL0VOOiBhZGQgbXkgY29kZSBiZWZvcmUgdGhp cwoJCXJldHVybiBzdHJfcmVwbGFjZSgkZmluZCwgJG5ldy4kZmluZCwgJGJ1ZmZlcik7Cgl9 Ly9FTkQgZnVuY3Rpb24gbWRfZXhwX3RvX3dyaXRldGFiX2FydGljbGUKCgoKCgoJZnVuY3Rp b24gbWRfZXhwaXJhdGlvbnNfYWRtaW4oJGV2ZW50LCAkc3RlcCkKCXsKCQkkbWRfZXhwaXJh dGlvbnNfdmlldyA9IG5ldyBtZF9leHBpcmF0aW9uc192aWV3KCk7CgkJcGFnZXRvcChnVHh0 KCd0YWJfbWRleHBpcmF0aW9ucycpKTsKCgkJZWNobyAiPGRpdiBzdHlsZT1cIm1hcmdpbi1y aWdodDo1JTsgbWFyZ2luLWxlZnQ6NSU7IG1hcmdpbi10b3A6MWVtOyB3aWR0aDo5MCU7XCI+ IjsKCQkvL3pvYnJheml0IG1lbnUKCQkkbWRfZXhwaXJhdGlvbnNfdmlldy0+Vmlld05hdmln YXRpb24oKTsKCgkJLy96b2JyYXppdCBha3Rpdm5pIGV4cGlyYWNlIC0gYSB2IHRlIGZjaSBz ZSByb3Zub3UgcHJvdmVkZSBzbWF6YW5pLCBwb2t1ZCBqZSBwb3phZG92YW5vCgkJJG1kX2V4 cGlyYXRpb25zX3ZpZXctPlZpZXdFeHBpcmF0aW9uc0ZvckFydGljbGVzKCk7CgkJZWNobyAi PC9kaXY+IjsKCgkJJG1kX2V4cGlyYXRpb25zX3ZpZXcgPSBudWxsOwoJfQoKCgkvLyoqKioq CgkvL2tvbmVjIGFkbWluaXN0cmFjZQoJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJ Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgoKCgoKIjtzOjM6Im1kNSI7czozMjoiYTM1MDRiNGQ1M2Q2MWJlOWE1 MDA4ZDM5MjFkNjE5MWUiO30=