# Name: rah_personal_budget v0.3 # Type: Admin only plugin # Personal budget tools and management # Author: Jukka Svahn # URL: http://rahforum.biz # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJyYWhfcGVyc29uYWxfYnVkZ2V0IjtzOjY6ImF1dGhv ciI7czoxMToiSnVra2EgU3ZhaG4iO3M6MTA6ImF1dGhvcl91cmkiO3M6MTk6Imh0dHA6Ly9y YWhmb3J1bS5iaXoiO3M6NzoidmVyc2lvbiI7czozOiIwLjMiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjM2OiJQZXJzb25hbCBidWRnZXQgdG9vbHMgYW5kIG1hbmFnZW1lbnQiO3M6NDoiaGVs cCI7czozNjM4OiIJPGgxPnJhaF9wZXJzb25hbF9idWRnZXQ8L2gxPgoKCTxwPkEgdGlueSBi dWRnZXQgbWFuYWdlciBmb3IgPGEgaHJlZj0iaHR0cDovL3d3dy50ZXh0cGF0dGVybi5jb20i PlRleHRwYXR0ZXJuIDxzcGFuIGNsYXNzPSJjYXBzIj5DTVM8L3NwYW4+PC9hPi4gQnVpbGQg YW5kIG1hbmFnZSBwZXJzb25hbCBidWRnZXRzLCBrZWVwIG9uIGV5ZSB5b3VyIGluY29tZSwg ZXhwZW5zZXMgYW5kIHRvdGFsIHByb2ZpdCAmIzgyMTI7IGFsbCBmcm9tIFRleHRwYXR0ZXJu JiM4MjE3O3MgbG9naW4gcHJvdGVjdGVkIGFkbWluLXBhbmVsLjwvcD4KCgk8dWw+CgkJPGxp PlZlcnNpb246IDAuMzwvbGk+CgkJPGxpPlVwZGF0ZWQ6IDIwMTAvMDgvMTAgMjowMCBBTSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVRDPC9zcGFuPjwvbGk+Cgk8L3VsPgoKCTxoMz5UYWJsZSBv ZiBDb250ZW50czwvaDM+CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjbGlzdC1vZi1mZWF0dXJl cyI+TGlzdCBvZiBmZWF0dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjcmVxdWlyZW1l bnRzIj5SZXF1aXJlbWVudHM8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGxhdGlv bi1hbmQtdXNhZ2UiPkluc3RhbGxhdGlvbiBhbmQgdXNhZ2U8L2E+PC9saT4KCQk8bGk+PGEg aHJlZj0iI2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9hPjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0i bGlzdC1vZi1mZWF0dXJlcyI+TGlzdCBvZiBmZWF0dXJlczwvaDM+CgoJPHVsPgoJCTxsaT5N YW5hZ2UgeW91ciBwZXJzb25hbCBidWRnZXQgZGlyZWN0bHkgZnJvbSBUZXh0cGF0dGVybiYj ODIxNztzIGFkbWluLXBhbmVsLjwvbGk+CgkJPGxpPlRoZSBwbHVnaW4gcHJvdmlkZXMgZWFz eS10by11c2UgaW50ZXJmYWNlIHdpdGggYmFzaWMgYnVkZ2V0IHRvb2xzLjwvbGk+Cgk8L3Vs PgoKCTxoMyBpZD0icmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVudHM8L2gzPgoKCTxwPlJhaF9w ZXJzb25hbF9idWRnZXQmIzgyMTc7cyBtaW5pbXVtIHJlcXVpcmVtZW50czo8L3A+CgoJPHVs PgoJCTxsaT5UZXh0cGF0dGVybiA0LjAuNys8L2xpPgoJCTxsaT5PcHRpb25hbDogalF1ZXJ5 IChidW5kbGVkIHdpdGggVGV4dHBhdHRlcm4pPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJpbnN0 YWxsYXRpb24tYW5kLXVzYWdlIj5JbnN0YWxsYXRpb24gYW5kIHVzYWdlPC9oMz4KCgk8b2w+ CgkJPGxpPkdvIHRvIHlvdXIgVGV4dHBhdHRlcm4gaW5zdGFsbGF0aW9uJiM4MjE3O3MgYWRt aW4gcGFuZWwuPC9saT4KCQk8bGk+TmF2aWdhdGUgdG8gPGVtPkFkbWluIC8gUGx1Z2luczwv ZW0+LjwvbGk+CgkJPGxpPkRvd25sb2FkIGFuZCBvcGVuIHRoZSBwbHVnaW4gY29kZS48L2xp PgoJCTxsaT5Db3B5IHRoZSBwbHVnaW4gY29kZSB0byB0aGUgaW5zdGFsbCBwbHVnaW4gYm94 LjwvbGk+CgkJPGxpPkNsaWNrIGluc3RhbGwgYW5kIGdvIHRocnUgdGhlIGF1dG9tYXRlZCBp bnN0YWxsYXRpb24gcHJvY2Vzcy48L2xpPgoJCTxsaT5BZnRlciB0aGUgaW5zdGFsbGF0aW9u LCBmaW5kIHRoZSBwbHVnaW4gZnJvbSB0aGUgcGx1Z2luIGxpc3QgYW5kIGNsaWNrIDxlbT5B Y3RpdmF0ZTwvZW0+LjwvbGk+CgkJPGxpPk5vdyB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBh bmQgcmVhZHkgdG8gYmUgdXNlZC4gVGhlIHBsdWdpbiYjODIxNztzIGludGVyZmFjZSBjYW4g YmUgbm93IGZvdW5kIGZyb20gPGVtPkV4dGVuc2lvbnMvUGVyc29uYWwgYnVkZ2V0PC9lbT4u PC9saT4KCTwvb2w+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDM+CgoJPHA+ PHN0cm9uZz5WZXJzaW9uIDAuMzwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkZpeGVkOiBu b3cgZG9lc24mIzgyMTc7dCBzaG93IDxlbT5oaWdoZXN0IGluY29tZTwvZW0+IGFzIHRoZSA8 ZW0+aGlnaGVzdCBleHBlbnNlPC9lbT4gaW4gdGhlIGJ1ZGdldCYjODIxNztzIHN0YXRzLjwv bGk+CgkJPGxpPkZpeGVkOiBKYXZhU2NyaXB0IHNsaWRlciBwcm9ibGVtcyBjYXVzZWQgYnkg ZHVwbGljYXRlZCBjb2RlLjwvbGk+CgkJPGxpPkZpeGVkOiB0aW1lem9uZSBpc3N1ZXMgd2l0 aCB0aGUgZGF0ZXRpbWUgZnVuY3Rpb25zLjwvbGk+CgkJPGxpPkZpeGVkOiBub3cgc2hvd3Mg dGhlIGhpZGRlbiBvZGQgJiM4MjIwO2l0ZW0gZGVzY3JpcHRpb24mIzgyMjE7LiBCZWZvcmUg dXNlciBjb3VsZCBwcm92aWRlIGEgZGVzY3JpcHRpb24sIGJ1dCBpdCB3YXNuJiM4MjE3O3Qg c2hvd24gYW55d2hlcmUuPC9saT4KCQk8bGk+Q2hhbmdlZDogc2VwYXJhdGVkIHRoZSBlZGl0 aW5nIHBhbmVscyBmcm9tIHRoZSBsaXN0cy4gTm93IHRoZSBmb3JtcyBhbmQgZWRpdGluZyBw YW5lbHMgaGF2ZSB0aGVpciBvd24gcGFuZXMuPC9saT4KCQk8bGk+Q2hhbmdlZDogbm93IGhp ZGVzIHVubmVzc2FzZXJ5IGNvbnRyb2xzIGFzIHNlZW4gaW4gPGEgaHJlZj0iaHR0cDovL3Jh aGZvcnVtLmJpei9wbHVnaW5zL3JhaF9wb3N0X3ZlcnNpb25zIj5yYWhfcG9zdF92ZXJzaW9u czwvYT4uPC9saT4KCQk8bGk+Q2hhbmdlZDogdGhlIHBhbmVsIGV2ZW50IGZyb20gPGNvZGU+ cmFoX3BlcnNvbmFsX2J1ZGdldF9wYWdlPC9jb2RlPiB0byA8Y29kZT5yYWhfcGVyc29uYWxf YnVkZ2V0PC9jb2RlPi48L2xpPgoJCTxsaT5DaGFuZ2VkOiBpbnN0ZWFkIHNob3dpbmcgKmxv bmcqIGRyb3Bkb3duIGxpc3RzIGZvciBzZWxldGluZyBkYXRlcywgbm93IGV2ZXJ5dGhpbmcg aXMgZG9uZSBieSBzaW1wbHkgdHlwaW5nIHRoZSBkYXRlIGluIGEgZmllbGQuPC9saT4KCQk8 bGk+QWRkZWQ6IHdoZW4gZGVsZXRpbmcgaXRlbXMsIGNoZWNrcyBpZiB0aGUgaXRlbSBpcyBl aXRoZXIgdGhlIG1haW4gZ3JvdXAgb3IgaW5kaXZpZHVhbCBpdGVtIGluc2lkZSB0aGUgZ3Jv dXAuIERvZXNuJiM4MjE3O3QganVzdCByZW1vdmUgcmVjb3JkcyBiYXNlZCBvbiB0aGUgdXNl ciBpbnB1dC48L2xpPgoJCTxsaT5BZGRlZDogY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiBzZXQg dGltZXN0YW1wcywgYW5kIHByb21wdHMgdGhlIHVzZXIgaWYgaXQgaXNuJiM4MjE3O3QgdmFs aWQuPC9saT4KCQk8bGk+UmVtb3ZlZDogaW5saW5lIHN0eWxlcy48L2xpPgoJCTxsaT5SZW1v dmVkOiA8Y29kZT5yYWhfcGVyc29uYWxfYnVkZ2V0X2NvcnJlY3QoKTwvY29kZT4uIE5vdyBj b3JyZWN0cyB2YWx1ZXMgd2l0aCA8Y29kZT5udW1iZXJfZm9ybWF0KCk8L2NvZGU+LjwvbGk+ CgkJPGxpPlJlbW92ZWQ6IDxjb2RlPnJhaF9wZXJzb25hbF9idWRnZXRfc2VsZWN0KCk8L2Nv ZGU+LjwvbGk+CgkJPGxpPkltcHJvdmVkOiBzYXZpbmcgYW5kIGVkaXRpbmcgZnVuY3Rpb25z LjwvbGk+CgkJPGxpPlVwZGF0ZWQ6IHVzZSBvZiBvcGVyYXRvcnMuPC9saT4KCQk8bGk+VXBk YXRlZDogbmF2aWdhdGlvbiBiYXIgYXQgdGhlIHRvcCBvZiB0aGUgcGFuZWwuPC9saT4KCQk8 bGk+RnJvbSB2ZXJzaW9uIDAuMyBvbndhcmRzIHJlcXVpcmVzIFRleHRwYXR0ZXJuIHZlcnNp b24gNC4wLjcgb3IgbmV3ZXIuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAu Mjwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkltcHJvdmVkIGNhbGxiYWNrcy48L2xpPgoJ PC91bD4KCgk8cD48c3Ryb25nPlZlcnNpb24gMC4xPC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8 bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+Cgk8L3VsPiI7czo0OiJjb2RlIjtzOjIxODI2OiIJ IyMjIyMjIyMjIyMjIyMjIyMjDQoJIw0KCSMJcmFoX3BlcnNvbmFsX2J1ZGdldC1wbHVnaW4g Zm9yIFRleHRwYXR0ZXJuDQoJIwl2ZXJzaW9uIDAuMw0KCSMJYnkgSnVra2EgU3ZhaG4NCgkj CWh0dHA6Ly9yYWhmb3J1bS5iaXoNCgkjDQoJIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJaWYg KEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCQlhZGRfcHJpdnMoJ3JhaF9wZXJzb25h bF9idWRnZXQnLCcxLDInKTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywncmFoX3Bl cnNvbmFsX2J1ZGdldCcsJ1BlcnNvbmFsIEJ1ZGdldCcpOw0KCQlyZWdpc3Rlcl9jYWxsYmFj aygncmFoX3BlcnNvbmFsX2J1ZGdldCcsJ3JhaF9wZXJzb25hbF9idWRnZXQnKTsNCgkJcmVn aXN0ZXJfY2FsbGJhY2soJ3JhaF9wZXJzb25hbF9idWRnZXRfaGVhZCcsJ2FkbWluX3NpZGUn LCdoZWFkX2VuZCcpOw0KCX0NCg0KLyoqDQoJSW5zdGFsbGVyDQoqLw0KDQoJZnVuY3Rpb24g cmFoX3BlcnNvbmFsX2J1ZGdldF9pbnN0YWxsKCkgew0KCQlzYWZlX3F1ZXJ5KA0KCQkJIkNS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICIuc2FmZV9wZngoJ3JhaF9wZXJzb25hbF9idWRn ZXQnKS4iICgNCgkJCQlgaWRgIGludCgxMSkgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsDQoJ CQkJYHVwZGF0ZWRgIGRhdGV0aW1lIE5PVCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAgMDA6 MDA6MDAnLA0KCQkJCWBidWRnZXRfaXRlbWAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1 bHQgJycsDQoJCQkJYGJ1ZGdldF9jb21tZW50YCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVm YXVsdCAnJywNCgkJCQlgYnVkZ2V0X3N0YXJ0YCBkYXRldGltZSBOT1QgTlVMTCBkZWZhdWx0 ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywNCgkJCQlgYnVkZ2V0X2VuZGAgZGF0ZXRpbWUgTk9U IE5VTEwgZGVmYXVsdCAnMDAwMC0wMC0wMCAwMDowMDowMCcsDQoJCQkJYGJ1ZGdldF9pZGAg aW50KDExKSBOT1QgTlVMTCBkZWZhdWx0ICcwJywNCgkJCQlgcGF5bWVudF9kYXRlYCBkYXRl dGltZSBOT1QgTlVMTCBkZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywNCgkJCQlgcGF5 bWVudF9pdGVtYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJCQlgcGF5 bWVudF9pbmNvbWluZ2AgZGVjaW1hbCgxMiwyKSBOT1QgTlVMTCBkZWZhdWx0ICcwLjAwJywN CgkJCQlgcGF5bWVudF9vdXRjb21pbmdgIGRlY2ltYWwoMTIsMikgTk9UIE5VTEwgZGVmYXVs dCAnMC4wMCcsDQoJCQkJYHBheW1lbnRfY29tbWVudGAgdmFyY2hhcigyNTUpIE5PVCBOVUxM IGRlZmF1bHQgJycsDQoJCQkJUFJJTUFSWSBLRVkgIChgaWRgKQ0KCQkJKSBQQUNLX0tFWVM9 MSBBVVRPX0lOQ1JFTUVOVD0xIg0KCQkpOw0KCX0NCg0KLyoqDQoJRGVsaXZlcnMgdGhlIHBh bmVscw0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9wZXJzb25hbF9idWRnZXQoKSB7DQoJCXJlcXVp cmVfcHJpdnMoJ3JhaF9wZXJzb25hbF9idWRnZXQnKTsNCgkJcmFoX3BlcnNvbmFsX2J1ZGdl dF9pbnN0YWxsKCk7DQoJCWdsb2JhbCAkc3RlcDsNCgkJaWYoaW5fYXJyYXkoJHN0ZXAsYXJy YXkoDQoJCQkncmFoX3BlcnNvbmFsX2J1ZGdldF9zYXZlJywNCgkJCSdyYWhfcGVyc29uYWxf YnVkZ2V0X2RlbGV0ZScsDQoJCQkncmFoX3BlcnNvbmFsX2J1ZGdldF9pdGVtcycsDQoJCQkn cmFoX3BlcnNvbmFsX2J1ZGdldF9lZGl0JywNCgkJCSdyYWhfcGVyc29uYWxfYnVkZ2V0X2l0 ZW1fZWRpdCcsDQoJCQkncmFoX3BlcnNvbmFsX2J1ZGdldF9pdGVtX3NhdmUnDQoJCSkpKSAk c3RlcCgpOw0KCQllbHNlIHJhaF9wZXJzb25hbF9idWRnZXRfbGlzdCgpOw0KCX0NCg0KLyoq DQoJQWRkcyB0aGUgc3R5bGVzIGZvciB0aGUgcGFuZWwNCiovDQoNCglmdW5jdGlvbiByYWhf cGVyc29uYWxfYnVkZ2V0X2hlYWQoKSB7DQoJCWdsb2JhbCAkZXZlbnQ7DQoJCWlmKCRldmVu dCAhPSAncmFoX3BlcnNvbmFsX2J1ZGdldCcpDQoJCQlyZXR1cm47DQoJCQ0KCQllY2hvIDw8 PEVPRg0KCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJCSQoZG9jdW1l bnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQoJCQkJCSQoJy5yYWhfcGVyc29uYWxfYnVkZ2V0X3N0 ZXAsI3JhaF9wZXJzb25hbF9idWRnZXRfc3RhdHMnKS5oaWRlKCk7DQoJCQkJCSQoJyNyYWhf cGVyc29uYWxfYnVkZ2V0X25hdiBzcGFuJykuaHRtbCgNCgkJCQkJCScgIyA8c3BhbiBpZD0i cmFoX3BlcnNvbmFsX2J1ZGdldF9zdGF0c19saW5rIj5CdWRnZXQgc3RhdHM8L3NwYW4+Jw0K CQkJCQkpOw0KCQkJCQkkKCcjcmFoX3BlcnNvbmFsX2J1ZGdldF9zdGF0c19saW5rJykuY2xp Y2soZnVuY3Rpb24oKXsNCgkJCQkJCSQoJyNyYWhfcGVyc29uYWxfYnVkZ2V0X3N0YXRzJyku c2xpZGVUb2dnbGUoKTsNCgkJCQkJfSk7DQoJCQkJCSQoJyNyYWhfcGVyc29uYWxfYnVkZ2V0 X2NvbnRhaW5lciBpbnB1dFt0eXBlPWNoZWNrYm94XScpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJ CQkJCQlpZigkKCcjcmFoX3BlcnNvbmFsX2J1ZGdldF9jb250YWluZXIgaW5wdXRbdHlwZT1j aGVja2JveF06Y2hlY2tlZCcpLnZhbCgpICE9IG51bGwpIHsNCgkJCQkJCQkkKCcucmFoX3Bl cnNvbmFsX2J1ZGdldF9zdGVwJykuc2xpZGVEb3duKCk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJ CQkJCSQoJy5yYWhfcGVyc29uYWxfYnVkZ2V0X3N0ZXAnKS5zbGlkZVVwKCk7DQoJCQkJCQl9 DQoJCQkJCX0pOw0KCQkJCX0pOw0KCQkJPC9zY3JpcHQ+DQoJCQk8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPg0KCQkJCQkjcmFoX3BlcnNvbmFsX2J1ZGdldF9jb250YWluZXIgew0KCQkJCQkJ d2lkdGg6IDk1MHB4Ow0KCQkJCQkJbWFyZ2luOiAwIGF1dG87DQoJCQkJCX0NCgkJCQkJI3Jh aF9wZXJzb25hbF9idWRnZXRfY29udGFpbmVyIC5yYWhfcGVyc29uYWxfYnVkZ2V0X3N1Ym1p dCB7DQoJCQkJCQl0ZXh0LWFsaWduOiByaWdodDsNCgkJCQkJCQ0KCQkJCQl9DQoJCQkJCSNy YWhfcGVyc29uYWxfYnVkZ2V0X2NvbnRhaW5lciBpbnB1dC5lZGl0IHsNCgkJCQkJCXdpZHRo OiA5NDBweDsNCgkJCQkJCXBhZGRpbmc6IDA7DQoJCQkJCQltYXJnaW46IDA7DQoJCQkJCX0N CgkJCQkJI3JhaF9wZXJzb25hbF9idWRnZXRfY29udGFpbmVyIC5yYWhfcGVyc29uYWxfYnVk Z2V0X3N0ZXAgew0KCQkJCQkJdGV4dC1hbGlnbjogcmlnaHQ7DQoJCQkJCX0NCgkJCQkJI3Jh aF9wZXJzb25hbF9idWRnZXRfc3RhdHNfbGluayB7DQoJCQkJCQljdXJzb3I6IHBvaW50ZXI7 DQoJCQkJCQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCgkJCQkJfQ0KCQkJPC9zdHls ZT4NCkVPRjsNCgl9DQoNCi8qKg0KCUVjaG9lcyB0aGUgcGFuZWxzIGFuZCBoZWFkZXINCiov DQoNCglmdW5jdGlvbiByYWhfcGVyc29uYWxfYnVkZ2V0X2hlYWRlcigkY29udGVudD0nJywk bWVzc2FnZT0nJywkc2xvZ2FuPSdNYW5hZ2UgcGVyc29uYWwgYnVkZ2V0JywkbmF2PScnKSB7 DQoJCQ0KCQlnbG9iYWwgJGV2ZW50LCRzdGVwOw0KCQlwYWdldG9wKCdyYWhfcGVyc29uYWxf YnVkZ2V0JywkbWVzc2FnZSk7DQoJCQ0KCQlpZihpc19hcnJheSgkY29udGVudCkpDQoJCQkk Y29udGVudCA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkNCgkJJGdyb3VwID0gDQoJCQlo dG1sc3BlY2lhbGNoYXJzKGdwcygnZ3JvdXAnKSk7DQoJCQ0KCQllY2hvIA0KCQkJbi4NCgkJ CScJPGRpdiBpZD0icmFoX3BlcnNvbmFsX2J1ZGdldF9jb250YWluZXIiPicubi4NCgkJCScJ CTxoMT48c3Ryb25nPnJhaF9wZXJzb25hbF9idWRnZXQ8L3N0cm9uZz4gfCAnLiRzbG9nYW4u JzwvaDE+Jy5uLg0KCQkJDQoJCQknCQk8cCBpZD0icmFoX3BlcnNvbmFsX2J1ZGdldF9uYXYi PicuDQoJCQkNCgkJCSgoJG5hdikgPyANCgkJCQkkbmF2IDogDQoJCQkNCgkJCQknICYjMTg3 OyA8YSBocmVmPSI/ZXZlbnQ9Jy4kZXZlbnQuJyI+TWFpbjwvYT4gJy4NCgkJCQknICYjMTg3 OyA8YSBocmVmPSI/ZXZlbnQ9Jy4kZXZlbnQuJyZhbXA7c3RlcD1yYWhfcGVyc29uYWxfYnVk Z2V0X2VkaXQiPkNyZWF0ZSBuZXcgYnVkZ2V0PC9hPiAnLg0KCQkJCScgJiMxODc7IDxhIGhy ZWY9Ij9ldmVudD1wbHVnaW4mYW1wO3N0ZXA9cGx1Z2luX2hlbHAmYW1wO25hbWU9cmFoX3Bl cnNvbmFsX2J1ZGdldCI+RG9jdW1lbnRhdGlvbjwvYT4nDQoJCQkpLg0KCQkJJzwvcD4nLm4u DQoJCQkkY29udGVudC5uLg0KCQkJJwk8L2Rpdj4nLm47DQoJfQ0KDQovKioNCglMaXN0cyB0 aGUgYnVkZ2V0cw0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9wZXJzb25hbF9idWRnZXRfbGlzdCgk bWVzc2FnZT0nJykgew0KCQkNCgkJZ2xvYmFsICRldmVudCwkc3RlcDsNCgkJDQoJCSR0b3Rh bF9pbmNvbWluZyA9ICR0b3RhbF9leHBlbnNlcyA9IDA7DQoJCQ0KCQkkb3V0W10gPQ0KCQkJ CQ0KCQkJCScJCTxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSJpbmRleC5waHAiPicubi4N CgkJCQknCQkJPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9Imxp c3QiIGNsYXNzPSJsaXN0IiBzdHlsZT0id2lkdGg6MTAwJTsiPicubi4NCgkJCQknCQkJCTx0 cj4nLm4uDQoJCQkJJwkJCQkJPHRoPlRpdGxlPC90aD4nLm4uDQoJCQkJJwkJCQkJPHRoPlBl cmlvZCBzdGFydDwvdGg+Jy5uLg0KCQkJCScJCQkJCTx0aD5QZXJpb2QgZW5kPC90aD4nLm4u DQoJCQkJJwkJCQkJPHRoPkluY29taW5nPC90aD4nLm4uDQoJCQkJJwkJCQkJPHRoPkV4cGVu c2VzPC90aD4nLm4uDQoJCQkJJwkJCQkJPHRoPlAvTDwvdGg+Jy5uLg0KCQkJCScJCQkJCTx0 aD4mIzE2MDs8L3RoPicubi4NCgkJCQknCQkJCTwvdHI+Jy5uOw0KCQkNCgkJJHJzID0NCgkJ CXNhZmVfcm93cygNCgkJCQknKicsDQoJCQkJJ3JhaF9wZXJzb25hbF9idWRnZXQnLA0KCQkJ CSJidWRnZXRfaWQgPSAnJyBvcmRlciBieSBidWRnZXRfc3RhcnQgZGVzYywgYnVkZ2V0X2Vu ZCBkZXNjLCBpZCBkZXNjIg0KCQkJKTsNCgkJDQoJCWlmKCRycyl7DQoJCQlmb3JlYWNoKCRy cyBhcyAkYSkgew0KCQkJCWV4dHJhY3QoJGEpOw0KCQkJCQ0KCQkJCSRpbmNvbWluZyA9ICRl eHBlbnNlcyA9IDA7DQoJCQkJDQoJCQkJLyoNCgkJCQkJRG9lcyBjb3VudGluZy4gU2x1Z2dp c2gsIGJ1dCBub3cgaXQncyB0b28gbGF0ZSB0bw0KCQkJCQljaGFuZ2UgaXQNCgkJCQkqLw0K CQkJCQ0KCQkJCSRpdGVtcyA9DQoJCQkJCXNhZmVfcm93cygNCgkJCQkJCSdwYXltZW50X2lu Y29taW5nLHBheW1lbnRfb3V0Y29taW5nJywNCgkJCQkJCSdyYWhfcGVyc29uYWxfYnVkZ2V0 JywNCgkJCQkJCSJidWRnZXRfaWQgPSAnJGlkJyBvcmRlciBieSBpZCBkZXNjIg0KCQkJCQkp Ow0KCQkJCQ0KCQkJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKSB7DQoJCQkJCSRleHBlbnNl cyArPSAkaXRlbVsncGF5bWVudF9vdXRjb21pbmcnXTsNCgkJCQkJJGluY29taW5nICs9ICRp dGVtWydwYXltZW50X2luY29taW5nJ107DQoJCQkJfQ0KCQkJCQ0KCQkJCSR0b3RhbF9leHBl bnNlcyArPSAkZXhwZW5zZXM7DQoJCQkJJHRvdGFsX2luY29taW5nICs9ICRpbmNvbWluZzsN CgkJCQkNCgkJCQkkb3V0W10gPSANCgkJCQkJJwkJCQk8dHI+Jy5uLg0KCQkJCQknCQkJCQk8 dGQ+PGEgaHJlZj0iP2V2ZW50PScuJGV2ZW50LicmYW1wO3N0ZXA9cmFoX3BlcnNvbmFsX2J1 ZGdldF9pdGVtcyZhbXA7Z3JvdXA9Jy4kaWQuJyI+Jy4oKCRidWRnZXRfaXRlbSkgPyBodG1s c3BlY2lhbGNoYXJzKCRidWRnZXRfaXRlbSkgOiAnVW50aXRsZWQnKS4nPC9hPjwvdGQ+Jy5u Lg0KCQkJCQknCQkJCQk8dGQ+Jy4kYnVkZ2V0X3N0YXJ0Lic8L3RkPicubi4NCgkJCQkJJwkJ CQkJPHRkPicuJGJ1ZGdldF9lbmQuJzwvdGQ+Jy5uLg0KCQkJCQknCQkJCQk8dGQ+Jy4kaW5j b21pbmcuJzwvdGQ+Jy5uLg0KCQkJCQknCQkJCQk8dGQ+Jy4kZXhwZW5zZXMuJzwvdGQ+Jy5u Lg0KCQkJCQknCQkJCQk8dGQ+Jy5udW1iZXJfZm9ybWF0KCRpbmNvbWluZy0kZXhwZW5zZXMs IDIsICcuJywgJycpLic8L3RkPicubi4NCgkJCQkJJwkJCQkJPHRkPjxpbnB1dCB0eXBlPSJj aGVja2JveCIgbmFtZT0ic2VsZWN0ZWRbXSIgdmFsdWU9IicuJGlkLiciIC8+PC90ZD4nLm4u DQoJCQkJCScJCQkJPC90cj4nLm47DQoJCQl9DQoJCQkNCgkJCSRvdXRbXSA9IA0KCQkJCScJ CQkJPHRyPicubi4NCgkJCQknCQkJCQk8dGQgY29sc3Bhbj0iMyI+JiMxNjA7PC90ZD4nLm4u DQoJCQkJJwkJCQkJPHRkPicubnVtYmVyX2Zvcm1hdCgkdG90YWxfaW5jb21pbmcsIDIsICcu JywgJycpLic8L3RkPicubi4NCgkJCQknCQkJCQk8dGQ+Jy5udW1iZXJfZm9ybWF0KCR0b3Rh bF9leHBlbnNlcywgMiwgJy4nLCAnJykuJzwvdGQ+Jy5uLg0KCQkJCScJCQkJCTx0ZD4nLm51 bWJlcl9mb3JtYXQoJHRvdGFsX2luY29taW5nLSR0b3RhbF9leHBlbnNlcywgMiwgJy4nLCAn JykuJzwvdGQ+Jy5uLg0KCQkJCScJCQkJCTx0ZD4mIzE2MDs8L3RkPicubi4NCgkJCQknCQkJ CTwvdHI+Jy5uLg0KCQkJCScJCQk8L3RhYmxlPicubi4NCgkJCQknCQkJPHAgY2xhc3M9InJh aF9wZXJzb25hbF9idWRnZXRfc3RlcCI+Jy5uLg0KCQkJCScJCQkJPGxhYmVsPicubi4NCgkJ CQknCQkJCQlXaXRoIHNlbGVjdGVkOicubi4NCgkJCQknCQkJCQk8c2VsZWN0IG5hbWU9InN0 ZXAiIGlkPSJyYWhfcGVyc29uYWxfYnVkZ2V0X3N0ZXAiPicubi4NCgkJCQknCQkJCQkJPG9w dGlvbiB2YWx1ZT0iIj5TZWxlY3QuLi48L29wdGlvbj4nLm4uDQoJCQkJJwkJCQkJCTxvcHRp b24gdmFsdWU9InJhaF9wZXJzb25hbF9idWRnZXRfZGVsZXRlIj5EZWxldGU8L29wdGlvbj4n Lm4uDQoJCQkJJwkJCQkJPC9zZWxlY3Q+Jy5uLg0KCQkJCScJCQkJPC9sYWJlbD4nLm4uDQoJ CQkJJwkJCQk8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic21hbGxlcmJveCIgdmFsdWU9 IkdvIiAvPicubi4NCgkJCQknCQkJPC9wPicubjsNCgkJCQ0KCQl9IGVsc2UgDQoJCQkkb3V0 W10gPSANCgkJCQknCQkJCTx0cj4nLm4uDQoJCQkJJwkJCQkJPHRkIGNvbHNwYW49IjciPk5v IGJ1ZGdldHMgY3JlYXRlZCB5ZXQuPC90ZD4nLm4uDQoJCQkJJwkJCQk8L3RyPicubi4NCgkJ CQknCQkJPC90YWJsZT4nLm47DQoNCgkJJG91dFtdID0JDQoJCQknCQkJPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iZXZlbnQiIHZhbHVlPSInLiRldmVudC4nIiAvPicubi4NCgkJCScJ CQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJuZXh0X3N0ZXAiIHZhbHVlPSJyYWhfcGVy c29uYWxfYnVkZ2V0X2xpc3QiIC8+Jy5uLg0KCQkJJwkJPC9mb3JtPic7DQoNCgkJcmFoX3Bl cnNvbmFsX2J1ZGdldF9oZWFkZXIoJG91dCwkbWVzc2FnZSk7DQoJfQ0KDQovKioNCglFZGl0 IGluZGl2aWR1YWwgaXRlbXMNCiovDQoNCglmdW5jdGlvbiByYWhfcGVyc29uYWxfYnVkZ2V0 X2l0ZW1fZWRpdCgkbWVzc2FnZT0nJykgew0KCQkNCgkJZ2xvYmFsICRldmVudDsNCgkJDQoJ CWV4dHJhY3QoDQoJCQlncHNhKA0KCQkJCWFycmF5KA0KCQkJCQkncGF5bWVudF9pdGVtJywN CgkJCQkJJ3BheW1lbnRfY29tbWVudCcsDQoJCQkJCSdwYXltZW50X2luY29taW5nJywNCgkJ CQkJJ3BheW1lbnRfb3V0Y29taW5nJywNCgkJCQkJJ3BheW1lbnRfZGF0ZScsDQoJCQkJCSdn cm91cCcsDQoJCQkJCSdpZCcNCgkJCQkpDQoJCQkpDQoJCSk7DQoJCQ0KCQkvKg0KCQkJQ2hl Y2sgaWYgdGhlIGdyb3VwIGV4aXN0cyBhbmQgdGhlIGlkIHJlYWxseQ0KCQkJaXMgYSBncm91 cCwgbm90IGFuIGl0ZW0NCgkJKi8NCgkJDQoJCWlmKA0KCQkJc2FmZV9jb3VudCgNCgkJCQkn cmFoX3BlcnNvbmFsX2J1ZGdldCcsDQoJCQkJImlkPSciLmRvU2xhc2goJGdyb3VwKS4iJyBh bmQgKGJ1ZGdldF9pZD0nJyBvciAgYnVkZ2V0X2lkPTApIg0KCQkJKSA9PSAwDQoJCSkgew0K CQkJcmFoX3BlcnNvbmFsX2J1ZGdldF9saXN0KCdVbmtub3duIGJ1ZGdldC4nKTsNCgkJCXJl dHVybjsNCgkJfQ0KCQkNCgkJLyoNCgkJCUlmIHdlIGhhdmUgaWQsIGdldCB0aGUgaXRlbSdz IGluZm9ybWF0aW9uIGZyb20gaXQNCgkJKi8NCgkJDQoJCWlmKCRpZCkgew0KCQkJJHJzID0g DQoJCQkJc2FmZV9yb3coDQoJCQkJCSdidWRnZXRfaWQscGF5bWVudF9kYXRlLHBheW1lbnRf aXRlbSxwYXltZW50X2luY29taW5nLHBheW1lbnRfb3V0Y29taW5nLHBheW1lbnRfY29tbWVu dCcsDQoJCQkJCSdyYWhfcGVyc29uYWxfYnVkZ2V0JywNCgkJCQkJImlkPSciLmRvU2xhc2go JGlkKS4iJyINCgkJCQkpOw0KCQkJDQoJCQlpZighJHJzKSB7DQoJCQkJcmFoX3BlcnNvbmFs X2J1ZGdldF9pdGVtcygnVW5rbm93biBpdGVtLicpOw0KCQkJCXJldHVybjsNCgkJCX0NCgkJ CWV4dHJhY3QoJHJzKTsNCgkJfQ0KDQoJCSRvdXQgPSANCgkJCQknCQk8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIj4nLm4uDQoJCQkJJwkJCTxpbnB1dCB0eXBlPSJo aWRkZW4iIG5hbWU9ImV2ZW50IiB2YWx1ZT0iJy4kZXZlbnQuJyIgLz4nLm4uDQoJCQkJJwkJ CTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InN0ZXAiIHZhbHVlPSJyYWhfcGVyc29uYWxf YnVkZ2V0X2l0ZW1fc2F2ZSIgLz4nLm4uDQoJCQkJJwkJCTxpbnB1dCB0eXBlPSJoaWRkZW4i IG5hbWU9Imdyb3VwIiB2YWx1ZT0iJy4kZ3JvdXAuJyIgLz4nLm4uDQoJCQkJKCRpZCA/ICcJ CQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpZCIgdmFsdWU9IicuJGlkLiciIC8+Jy5u IDogJycpLg0KCQkJCQ0KCQkJCScJCQk8cD4nLm4uDQoJCQkJJwkJCQk8bGFiZWw+Jy5uLg0K CQkJCScJCQkJCU5hbWU8YnIgLz4nLm4uDQoJCQkJJwkJCQkJPGlucHV0IGNsYXNzPSJlZGl0 IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRwYXltZW50X2l0ZW0p LiciIG5hbWU9InBheW1lbnRfaXRlbSIgLz4nLm4uDQoJCQkJJwkJCQk8L2xhYmVsPicubi4N CgkJCQknCQkJPC9wPicubi4NCgkJCQkNCgkJCQknCQkJPHA+Jy5uLg0KCQkJCScJCQkJPGxh YmVsPicubi4NCgkJCQknCQkJCQlDb21tZW50PGJyIC8+Jy5uLg0KCQkJCScJCQkJCTxpbnB1 dCBjbGFzcz0iZWRpdCIgdHlwZT0idGV4dCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk cGF5bWVudF9jb21tZW50KS4nIiBuYW1lPSJwYXltZW50X2NvbW1lbnQiIC8+Jy5uLg0KCQkJ CScJCQkJPC9sYWJlbD4nLm4uDQoJCQkJJwkJCTwvcD4nLm4uDQoJCQkJDQoJCQkJJwkJCTxw Picubi4NCgkJCQknCQkJCTxsYWJlbD4nLm4uDQoJCQkJJwkJCQkJSW5jb21pbmc8YnIgLz4n Lm4uDQoJCQkJJwkJCQkJPGlucHV0IGNsYXNzPSJlZGl0IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0i Jy5odG1sc3BlY2lhbGNoYXJzKCRwYXltZW50X2luY29taW5nKS4nIiBuYW1lPSJwYXltZW50 X2luY29taW5nIiAvPicubi4NCgkJCQknCQkJCTwvbGFiZWw+Jy5uLg0KCQkJCScJCQk8L3A+ Jy5uLg0KCQkJCQ0KCQkJCScJCQk8cD4nLm4uDQoJCQkJJwkJCQk8bGFiZWw+Jy5uLg0KCQkJ CScJCQkJCUV4cGVuc2VzPGJyIC8+Jy5uLg0KCQkJCScJCQkJCTxpbnB1dCBjbGFzcz0iZWRp dCIgdHlwZT0idGV4dCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkcGF5bWVudF9vdXRj b21pbmcpLiciIG5hbWU9InBheW1lbnRfb3V0Y29taW5nIiAvPicubi4NCgkJCQknCQkJCTwv bGFiZWw+Jy5uLg0KCQkJCScJCQk8L3A+Jy5uLg0KCQkJCScJCQk8cD4nLm4uDQoJCQkJJwkJ CQlEYXRlPGJyIC8+Jy5uLg0KCQkJCScJCQkJPGlucHV0IGNsYXNzPSJlZGl0IiB0eXBlPSJ0 ZXh0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRwYXltZW50X2RhdGUpLiciIG5hbWU9 InBheW1lbnRfZGF0ZSIgLz4nLm4uDQoJCQkJJwkJCTwvcD4nLm4uDQoJCQkJDQoJCQkJJwkJ CTxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJwdWJsaXNoIiB2YWx1ZT0iU2F2ZSIg Lz48L3A+Jy5uLg0KCQkJCScJCTwvZm9ybT4nLm47DQoJCQkJDQoJCXJhaF9wZXJzb25hbF9i dWRnZXRfaGVhZGVyKCRvdXQsJG1lc3NhZ2UsJ0J1ZGdldCBpdGVtIGluZm9ybWF0aW9uJyk7 DQoJfQ0KDQovKioNCglMaXN0cyB0aGUgaW5jb21pbmdzIGFuZCBleHBlbnNlcyBpbiBhIHNp bmdsZSBidWRnZXQNCiovDQoNCglmdW5jdGlvbiByYWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1z KCRtZXNzYWdlPScnKSB7DQoJCWdsb2JhbCAkZXZlbnQsJHN0ZXA7DQoJCQ0KCQkkZ3JvdXAg PSBkb1NsYXNoKGdwcygnZ3JvdXAnKSk7DQoJCQ0KCQkkbWFpbiA9IA0KCQkJc2FmZV9yb3co DQoJCQkJJ2lkLHVwZGF0ZWQsYnVkZ2V0X2l0ZW0sYnVkZ2V0X2NvbW1lbnQsYnVkZ2V0X3N0 YXJ0LGJ1ZGdldF9lbmQsIHVuaXhfdGltZXN0YW1wKGJ1ZGdldF9zdGFydCkgYXMgdWJ1ZGdl dF9zdGFydCwgdW5peF90aW1lc3RhbXAoYnVkZ2V0X2VuZCkgYXMgdWJ1ZGdldF9lbmQnLA0K CQkJCSdyYWhfcGVyc29uYWxfYnVkZ2V0JywNCgkJCQkiaWQ9JyIuJGdyb3VwLiInIg0KCQkJ KTsNCgkJDQoJCWlmKCEkbWFpbikgew0KCQkJcmFoX3BlcnNvbmFsX2J1ZGdldF9saXN0KCdV bmtub3duIGJ1ZGdldC4nKTsNCgkJCXJldHVybjsNCgkJfQ0KCQkNCgkJJGRheXMgPSANCgkJ CWNlaWwoYWJzKCRtYWluWyd1YnVkZ2V0X3N0YXJ0J10tJG1haW5bJ3VidWRnZXRfZW5kJ10p IC8gODY0MDApOw0KCQkNCgkJJHNsb2dhbiA9IA0KCQkJaHRtbHNwZWNpYWxjaGFycygkbWFp blsnYnVkZ2V0X2l0ZW0nXSkuDQoJCQkoJG1haW5bJ2J1ZGdldF9jb21tZW50J10gPyAnIHwg Jy5odG1sc3BlY2lhbGNoYXJzKCRtYWluWydidWRnZXRfY29tbWVudCddKSA6ICcnKTsNCgkJ DQoJCSR0b3RhbF9pbmNvbWluZyA9ICR0b3RhbF9leHBlbnNlcyA9IDA7DQoNCgkJJG91dFtd ID0NCgkJCQknCQk8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIj4nLm4u DQoJCQkJJwkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImlkIiB2YWx1ZT0iJy4kZ3Jv dXAuJyIgLz4nLm4uDQoJCQkJJwkJCTx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRp bmc9IjAiIGlkPSJsaXN0IiBjbGFzcz0ibGlzdCIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nLm4u DQoJCQkJJwkJCQk8dHI+Jy5uLg0KCQkJCScJCQkJCTx0aD5EYXRlPC90aD4nLm4uDQoJCQkJ JwkJCQkJPHRoPk5hbWU8L3RoPicubi4NCgkJCQknCQkJCQk8dGg+Q29tbWVudDwvdGg+Jy5u Lg0KCQkJCScJCQkJCTx0aD5JbmNvbWluZzwvdGg+Jy5uLg0KCQkJCScJCQkJCTx0aD5FeHBl bnNlczwvdGg+Jy5uLg0KCQkJCScJCQkJCTx0aD5QL0w8L3RoPicubi4NCgkJCQknCQkJCQk8 dGg+JiMxNjA7PC90aD4nLm4uDQoJCQkJJwkJCQk8L3RyPicubjsNCgkJDQoJCSRycyA9IA0K CQkJc2FmZV9yb3dzKA0KCQkJCSdpZCxwYXltZW50X2RhdGUscGF5bWVudF9pdGVtLHBheW1l bnRfaW5jb21pbmcscGF5bWVudF9vdXRjb21pbmcscGF5bWVudF9jb21tZW50JywNCgkJCQkn cmFoX3BlcnNvbmFsX2J1ZGdldCcsDQoJCQkJImJ1ZGdldF9pZD0nJGdyb3VwJyBvcmRlciBi eSBwYXltZW50X2RhdGUgYXNjIg0KCQkJKTsNCgkJDQoJCWlmKCRycyl7DQoJCQlmb3JlYWNo KCRycyBhcyAkYSkgew0KCQkJCWV4dHJhY3QoJGEpOw0KCQkJCQ0KCQkJCWlmKCEkcGF5bWVu dF9pdGVtKQ0KCQkJCQkkcGF5bWVudF9pdGVtID0gZ1R4dCgndW50aXRsZWQnKTsNCgkJCQkN CgkJCQlpZighJHBheW1lbnRfY29tbWVudCkNCgkJCQkJJHBheW1lbnRfY29tbWVudCA9ICcm IzE2MDsnOw0KCQkJCWVsc2UNCgkJCQkJJHBheW1lbnRfY29tbWVudCA9IGh0bWxzcGVjaWFs Y2hhcnMoJHBheW1lbnRfY29tbWVudCk7DQoJCQkJDQoJCQkJJG91dFtdID0gDQoJCQkJCScJ CQkJPHRyPicubi4NCgkJCQkJJwkJCQkJPHRkPicuJHBheW1lbnRfZGF0ZS4nPC90ZD4nLm4u DQoJCQkJCScJCQkJCTx0ZD48YSBocmVmPSI/ZXZlbnQ9Jy4kZXZlbnQuJyZhbXA7c3RlcD1y YWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1fZWRpdCZhbXA7aWQ9Jy4kaWQuJyZhbXA7Z3JvdXA9 Jy4kZ3JvdXAuJyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRwYXltZW50X2l0ZW0pLic8L2E+PC90 ZD4nLm4uDQoJCQkJCScJCQkJCTx0ZD4nLiRwYXltZW50X2NvbW1lbnQuJzwvdGQ+Jy5uLg0K CQkJCQknCQkJCQk8dGQ+Jy4kcGF5bWVudF9pbmNvbWluZy4nPC90ZD4nLm4uDQoJCQkJCScJ CQkJCTx0ZD4nLiRwYXltZW50X291dGNvbWluZy4nPC90ZD4nLm4uDQoJCQkJCScJCQkJCTx0 ZD4nLm51bWJlcl9mb3JtYXQoJHBheW1lbnRfaW5jb21pbmctJHBheW1lbnRfb3V0Y29taW5n LCAyLCAnLicsICcnKS4nPC90ZD4nLm4uDQoJCQkJCScJCQkJCTx0ZD48aW5wdXQgdHlwZT0i Y2hlY2tib3giIG5hbWU9InNlbGVjdGVkW10iIHZhbHVlPSInLiRpZC4nIiAvPjwvdGQ+Jy5u Lg0KCQkJCQknCQkJCTwvdHI+Jy5uOw0KCQkJCQ0KCQkJCSR0b3RhbF9leHBlbnNlcyArPSAk cGF5bWVudF9vdXRjb21pbmc7DQoJCQkJJHRvdGFsX2luY29taW5nICs9ICRwYXltZW50X2lu Y29taW5nOw0KCQkJfQ0KCQkJJG91dFtdID0gDQoJCQkJCScJCQkJPHRyPicubi4NCgkJCQkJ JwkJCQkJPHRkPiYjMTYwOzwvdGQ+Jy5uLg0KCQkJCQknCQkJCQk8dGQ+VG90YWw8L3RkPicu bi4NCgkJCQkJJwkJCQkJPHRkPiYjMTYwOzwvdGQ+Jy5uLg0KCQkJCQknCQkJCQk8dGQ+Jy5u dW1iZXJfZm9ybWF0KCR0b3RhbF9pbmNvbWluZywgMiwgJy4nLCAnJykuJzwvdGQ+Jy5uLg0K CQkJCQknCQkJCQk8dGQ+Jy5udW1iZXJfZm9ybWF0KCR0b3RhbF9leHBlbnNlcywgMiwgJy4n LCAnJykuJzwvdGQ+Jy5uLg0KCQkJCQknCQkJCQk8dGQ+Jy5udW1iZXJfZm9ybWF0KCR0b3Rh bF9pbmNvbWluZy0kdG90YWxfZXhwZW5zZXMsIDIsICcuJywgJycpLic8L3RkPicubi4NCgkJ CQkJJwkJCQkJPHRkPiYjMTYwOzwvdGQ+Jy5uLg0KCQkJCQknCQkJCTwvdHI+Jy5uLg0KCQkJ CQkNCgkJCQkJJwkJCTwvdGFibGU+Jy5uLg0KCQkJCQkNCgkJCQkJJwkJCTxwIGNsYXNzPSJy YWhfcGVyc29uYWxfYnVkZ2V0X3N0ZXAiPicubi4NCgkJCQkJJwkJCQk8bGFiZWw+Jy5uLg0K CQkJCQknCQkJCQlXaXRoIHNlbGVjdGVkOicubi4NCgkJCQkJJwkJCQkJPHNlbGVjdCBuYW1l PSJzdGVwIj4nLm4uDQoJCQkJCScJCQkJCQk8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdC4uLjwv b3B0aW9uPicubi4NCgkJCQkJJwkJCQkJCTxvcHRpb24gdmFsdWU9InJhaF9wZXJzb25hbF9i dWRnZXRfaXRlbV9kZWxldGUiPkRlbGV0ZTwvb3B0aW9uPicubi4NCgkJCQkJJwkJCQkJPC9z ZWxlY3Q+Jy5uLg0KCQkJCQknCQkJCTwvbGFiZWw+Jy5uLg0KCQkJCQknCQkJCTxpbnB1dCB0 eXBlPSJzdWJtaXQiIGNsYXNzPSJzbWFsbGVyYm94IiB2YWx1ZT0iR28iIC8+Jy5uLg0KCQkJ CQknCQkJPC9wPicubjsNCgkJCQkNCgkJCQkJDQoJCQkkc3RhdHMgPSANCgkJCQknCQk8ZGl2 IGlkPSJyYWhfcGVyc29uYWxfYnVkZ2V0X3N0YXRzIj4nLm4uDQoJCQkJJwkJCTxoMz5CdWRn ZXQgc3RhdHM8L2gzPicubi4NCgkJCQknCQkJPHVsPicubi4NCgkJCQknCQkJCTxsaT5QZXJp b2Q6ICcuJG1haW5bJ2J1ZGdldF9zdGFydCddLicgLSAnLiRtYWluWydidWRnZXRfZW5kJ10u JzwvbGk+Jy5uLg0KCQkJCScJCQkJPGxpPlRvdGFsIGRheXM6ICcuJGRheXMuJzwvbGk+Jy5u Lg0KCQkJCScJCQkJPGxpPkluY29taW5nIHBlciBkYXk6ICcubnVtYmVyX2Zvcm1hdCgkdG90 YWxfaW5jb21pbmcvJGRheXMsIDIsICcuJywgJycpLic8L2xpPicubi4NCgkJCQknCQkJCTxs aT5FeHBlbnNlcyBwZXIgZGF5OiAnLm51bWJlcl9mb3JtYXQoJHRvdGFsX2V4cGVuc2VzLyRk YXlzLCAyLCAnLicsICcnKS4nPC9saT4nLm4uDQoJCQkJJwkJCQk8bGk+SGlnaGVzdCBpbmNv bWluZzogJy5zYWZlX2ZpZWxkKCdwYXltZW50X2luY29taW5nJywncmFoX3BlcnNvbmFsX2J1 ZGdldCcsImJ1ZGdldF9pZD0nJGdyb3VwJyBvcmRlciBieSBwYXltZW50X2luY29taW5nIGRl c2MiKS4nPC9saT4nLm4uDQoJCQkJJwkJCQk8bGk+SGlnaGVzdCBleHBlbnNlOiAnLnNhZmVf ZmllbGQoJ3BheW1lbnRfb3V0Y29taW5nJywncmFoX3BlcnNvbmFsX2J1ZGdldCcsImJ1ZGdl dF9pZD0nJGdyb3VwJyBvcmRlciBieSBwYXltZW50X291dGNvbWluZyBkZXNjIikuJzwvbGk+ Jy5uLg0KCQkJCScJCQk8L3VsPicubi4NCgkJCQknCQk8L2Rpdj4nLm47DQoNCgkJfSBlbHNl ICRvdXRbXSA9IA0KCQkJCQknCQkJCTx0cj4nLm4uDQoJCQkJCScJCQkJCTx0ZCBjb2xzcGFu PSI2Ij5ObyBidWRnZXQgaXRlbXMgYWRkZWQgeWV0LjwvdGQ+Jy5uLg0KCQkJCQknCQkJCTwv dHI+Jy5uLg0KCQkJCQknCQkJPC90YWJsZT4nOw0KCQkNCgkJJG91dFtdID0NCgkJCScJCQk8 aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJldmVudCIgdmFsdWU9IicuJGV2ZW50LiciIC8+ Jy5uLg0KCQkJJwkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im5leHRfc3RlcCIgdmFs dWU9InJhaF9wZXJzb25hbF9idWRnZXRfaXRlbXMiIC8+Jy5uLg0KCQkJJwkJPC9mb3JtPicu bjsNCgkJCQ0KCQkkbmF2ID0gDQoJCQknICYjMTg3OyA8YSBocmVmPSI/ZXZlbnQ9Jy4kZXZl bnQuJyI+TWFpbjwvYT4gJy4NCgkJCScgJiMxODc7IDxzdHJvbmc+PGEgaHJlZj0iP2V2ZW50 PScuJGV2ZW50LicmYW1wO3N0ZXA9cmFoX3BlcnNvbmFsX2J1ZGdldF9pdGVtX2VkaXQmYW1w O2dyb3VwPScuJGdyb3VwLiciPkFkZCBuZXcgaXRlbTwvYT48L3N0cm9uZz4gJy4NCgkJCScg JiMxODc7IDxhIGhyZWY9Ij9ldmVudD0nLiRldmVudC4nJmFtcDtzdGVwPXJhaF9wZXJzb25h bF9idWRnZXRfZWRpdCZhbXA7aWQ9Jy4kZ3JvdXAuJyZhbXA7Z3JvdXA9Jy4kZ3JvdXAuJyI+ RWRpdCBidWRnZXQgcHJlZmVyZW5jZXM8L2E+ICcuDQoJCQknICYjMTg3OyA8YSBocmVmPSI/ ZXZlbnQ9Jy4kZXZlbnQuJyZhbXA7c3RlcD1yYWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1zJmFt cDtncm91cD0nLiRncm91cC4nIj5UaGUgaXRlbSBsaXN0PC9hPiAnLg0KCQkJJyA8c3Bhbj48 L3NwYW4+JzsNCgkJDQoJCSRjb250ZW50ID0gDQoJCQkkc3RhdHMuaW1wbG9kZSgnJywkb3V0 KTsNCgkJDQoJCXJhaF9wZXJzb25hbF9idWRnZXRfaGVhZGVyKCRjb250ZW50LCRtZXNzYWdl LCRzbG9nYW4sJG5hdik7DQoJfQ0KDQovKioNCglEZWxldGVzIHdob2xlIGJ1ZGdldCBpbmNs dWRpbmcgdGhlIGl0ZW1zDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3BlcnNvbmFsX2J1ZGdldF9k ZWxldGUoKSB7DQoNCgkJJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7DQoNCgkJaWYoIWlz X2FycmF5KCRzZWxlY3RlZCkpIHsNCgkJCXJhaF9wZXJzb25hbF9idWRnZXRfbGlzdCgnTm90 aGluZyBzZWxlY3RlZC4nKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWZvcmVhY2goJHNlbGVj dGVkIGFzICRpZCkNCgkJCXNhZmVfZGVsZXRlKA0KCQkJCSdyYWhfcGVyc29uYWxfYnVkZ2V0 JywNCgkJCQkiKGlkPSciLmRvU2xhc2goJGlkKS4iJyBhbmQgKGJ1ZGdldF9pZD0wIG9yIGJ1 ZGdldF9pZD0nJykpIG9yIGJ1ZGdldF9pZD0nIi5kb1NsYXNoKCRpZCkuIiciDQoJCQkpOw0K DQoJCXJhaF9wZXJzb25hbF9idWRnZXRfbGlzdCgnQnVkZ2V0cyBkZWxldGVkLicpOw0KCX0N Cg0KLyoqDQoJRGVsZXRlcyBpbmRpdmlkdWFsIGl0ZW1zDQoqLw0KDQoJZnVuY3Rpb24gcmFo X3BlcnNvbmFsX2J1ZGdldF9pdGVtX2RlbGV0ZSgpIHsNCg0KCQkkc2VsZWN0ZWQgPSBwcygn c2VsZWN0ZWQnKTsNCgkJDQoJCWlmKCFpc19hcnJheSgkc2VsZWN0ZWQpKSB7DQoJCQlyYWhf cGVyc29uYWxfYnVkZ2V0X2l0ZW1zKCdOb3RoaW5nIHNlbGVjdGVkLicpOw0KCQkJcmV0dXJu Ow0KCQl9DQoJCQ0KCQlmb3JlYWNoKCRzZWxlY3RlZCBhcyAkaWQpDQoJCQlzYWZlX2RlbGV0 ZSgNCgkJCQkncmFoX3BlcnNvbmFsX2J1ZGdldCcsDQoJCQkJImlkPSciLmRvU2xhc2goJGlk KS4iJyINCgkJCSk7DQoJCQkNCgkJcmFoX3BlcnNvbmFsX2J1ZGdldF9pdGVtcygnSXRlbXMg ZGVsZXRlZC4nKTsNCgl9DQoNCi8qKg0KCUVkaXQgYW5kIGFkZCBidWRnZXQgcGVyaW9kcw0K Ki8NCg0KCWZ1bmN0aW9uIHJhaF9wZXJzb25hbF9idWRnZXRfZWRpdCgkbWVzc2FnZT0nJykg ew0KCQkNCgkJZ2xvYmFsICRldmVudDsNCgkJDQoJCWV4dHJhY3QoDQoJCQlncHNhKA0KCQkJ CWFycmF5KA0KCQkJCQknYnVkZ2V0X2l0ZW0nLA0KCQkJCQknYnVkZ2V0X3N0YXJ0JywNCgkJ CQkJJ2J1ZGdldF9lbmQnLA0KCQkJCQknYnVkZ2V0X2NvbW1lbnQnLA0KCQkJCQknaWQnDQoJ CQkJKQ0KCQkJKQ0KCQkpOw0KCQkNCgkJaWYoJGlkKSB7DQoJCQkkcnMgPSANCgkJCQlzYWZl X3JvdygNCgkJCQkJJ2J1ZGdldF9pdGVtLGJ1ZGdldF9jb21tZW50LGJ1ZGdldF9zdGFydCxi dWRnZXRfZW5kJywNCgkJCQkJJ3JhaF9wZXJzb25hbF9idWRnZXQnLA0KCQkJCQkiaWQ9JyIu ZG9TbGFzaCgkaWQpLiInIg0KCQkJCSk7DQoJCQlpZighJHJzKSB7DQoJCQkJcmFoX3BlcnNv bmFsX2J1ZGdldF9saXN0KCdVbmtub3duIGJ1ZGdldCcpOw0KCQkJCXJldHVybjsNCgkJCX0N CgkJCWV4dHJhY3QoJHJzKTsNCgkJfQ0KCQkNCgkJJG91dCA9DQoJCQknCQk8Zm9ybSBtZXRo b2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIj4nLm4uDQoJCQknCQkJPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iZXZlbnQiIHZhbHVlPSInLiRldmVudC4nIiAvPicubi4NCgkJCScJ CQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzdGVwIiB2YWx1ZT0icmFoX3BlcnNvbmFs X2J1ZGdldF9zYXZlIiAvPicubi4NCgkJCSgkaWQgPyANCgkJCQknCQkJPGlucHV0IHR5cGU9 ImhpZGRlbiIgbmFtZT0iaWQiIHZhbHVlPSInLiRpZC4nIiAvPicubi4NCgkJCQknCQkJPGlu cHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3JvdXAiIHZhbHVlPSInLiRpZC4nIiAvPicubg0K CQkJOiAnJykuDQoJCQknCQkJPHA+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+Jy5uLg0KCQkJJwkJ CQkJVGl0bGU8YnIgLz4nLm4uDQoJCQknCQkJCQk8aW5wdXQgY2xhc3M9ImVkaXQiIHR5cGU9 InRleHQiIG5hbWU9ImJ1ZGdldF9pdGVtIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRi dWRnZXRfaXRlbSkuJyIgLz4nLm4uDQoJCQknCQkJCTwvbGFiZWw+Jy5uLg0KCQkJJwkJCTwv cD4nLm4uDQoJCQknCQkJPHA+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+Jy5uLg0KCQkJJwkJCQkJ RGVzY3JpcHRpb248YnIgLz4nLm4uDQoJCQknCQkJCQk8aW5wdXQgY2xhc3M9ImVkaXQiIHR5 cGU9InRleHQiIG5hbWU9ImJ1ZGdldF9jb21tZW50IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNo YXJzKCRidWRnZXRfY29tbWVudCkuJyIgLz4nLm4uDQoJCQknCQkJCTwvbGFiZWw+Jy5uLg0K CQkJJwkJCTwvcD4nLm4uDQoJCQknCQkJPHA+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+Jy5uLg0K CQkJJwkJCQkJUGVyaW9kIHN0YXJ0cyAoWVlZWS1tbS1kZCk8YnIgLz4nLm4uDQoJCQknCQkJ CQk8aW5wdXQgY2xhc3M9ImVkaXQiIHR5cGU9InRleHQiIG5hbWU9ImJ1ZGdldF9zdGFydCIg dmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkYnVkZ2V0X3N0YXJ0KS4nIiAvPicubi4NCgkJ CScJCQkJPC9sYWJlbD4nLm4uDQoJCQknCQkJPC9wPicubi4NCgkJCScJCQk8cD4nLm4uDQoJ CQknCQkJCTxsYWJlbD4nLm4uDQoJCQknCQkJCQlQZXJpb2QgZW5kcyAoWVlZWS1tbS1kZCk8 YnIgLz4nLm4uDQoJCQknCQkJCQk8aW5wdXQgY2xhc3M9ImVkaXQiIHR5cGU9InRleHQiIG5h bWU9ImJ1ZGdldF9lbmQiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGJ1ZGdldF9lbmQp LiciIC8+Jy5uLg0KCQkJJwkJCQk8L2xhYmVsPicubi4NCgkJCScJCQk8L3A+Jy5uLg0KCQkJ JwkJCTxwPicubi4NCgkJCScJCQkJPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InB1Ymxp c2giIHZhbHVlPSJTYXZlIiAvPicubi4NCgkJCScJCQk8L3A+Jy5uLg0KCQkJJwkJPC9mb3Jt PicNCgkJOw0KDQoJCXJhaF9wZXJzb25hbF9idWRnZXRfaGVhZGVyKCRvdXQsJG1lc3NhZ2Up Ow0KCX0NCg0KLyoqDQoJU2F2ZXMgYSBidWRnZXQNCiovDQoNCglmdW5jdGlvbiByYWhfcGVy c29uYWxfYnVkZ2V0X3NhdmUoKSB7DQoJCQ0KCQlleHRyYWN0KA0KCQkJZG9TbGFzaCgNCgkJ CQlncHNhKA0KCQkJCQlhcnJheSgNCgkJCQkJCSdidWRnZXRfaXRlbScsDQoJCQkJCQknYnVk Z2V0X2NvbW1lbnQnLA0KCQkJCQkJJ2J1ZGdldF9zdGFydCcsDQoJCQkJCQknYnVkZ2V0X2Vu ZCcsDQoJCQkJCQknaWQnDQoJCQkJCSkNCgkJCQkpDQoJCQkpDQoJCSk7DQoJCQ0KCQlpZigh JGJ1ZGdldF9zdGFydCB8fCAhJGJ1ZGdldF9lbmQpIHsNCgkJCXJhaF9wZXJzb25hbF9idWRn ZXRfZWRpdCgNCgkJCQknUGVyaW9kIGVuZCBhbmQgcGVyaW9kIHN0YXJ0IGFyZSByZXF1aXJl ZC4nDQoJCQkpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCQ0KCQkkZW5kID0gc3RydG90aW1lKCRi dWRnZXRfZW5kKTsNCgkJJHN0YXJ0ID0gc3RydG90aW1lKCRidWRnZXRfc3RhcnQpOw0KCQkN CgkJaWYoDQoJCQkkZW5kID09PSBmYWxzZSB8fCANCgkJCSRzdGFydCA9PT0gZmFsc2UgfHwg DQoJCQkkZW5kID09IC0xIHx8DQoJCQkkc3RhcnQgPT0gLTENCgkJKSB7DQoJCQlyYWhfcGVy c29uYWxfYnVkZ2V0X2VkaXQoDQoJCQkJJ0ludmFsaWQgdGltZXN0YW1wcy4gUmVtZW1iZXIg dG8gdXNlIFlZWVktZGQtbW0gc3ludGF4LicNCgkJCSk7DQoJCQlyZXR1cm47DQoJCX0NCgkJ DQoJCWlmKCRzdGFydCA+PSAkZW5kKSB7DQoJCQlyYWhfcGVyc29uYWxfYnVkZ2V0X2VkaXQo DQoJCQkJJ0VuZGluZyBkYXRlIGhhcyB0byBiZSBhZnRlciBzdGFydGluZyBkYXRlLicNCgkJ CSk7DQoJCQlyZXR1cm47DQoJCX0NCgkJDQoJCWlmKCRpZCkgew0KCQkJDQoJCQlpZihzYWZl X2NvdW50KCdyYWhfcGVyc29uYWxfYnVkZ2V0JywiaWQ9JyRpZCciKSA9PSAwKSB7DQoJCQkJ cmFoX3BlcnNvbmFsX2J1ZGdldF9saXN0KA0KCQkJCQknVW5rbm93biBidWRnZXQuJw0KCQkJ CSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KCQkJDQoJCQlzYWZlX3VwZGF0ZSgNCgkJCQkncmFo X3BlcnNvbmFsX2J1ZGdldCcsDQoJCQkJInVwZGF0ZWQ9bm93KCksDQoJCQkJYnVkZ2V0X2l0 ZW09JyRidWRnZXRfaXRlbScsDQoJCQkJYnVkZ2V0X2NvbW1lbnQ9JyRidWRnZXRfY29tbWVu dCcsDQoJCQkJYnVkZ2V0X3N0YXJ0PSckYnVkZ2V0X3N0YXJ0JywNCgkJCQlidWRnZXRfZW5k PSckYnVkZ2V0X2VuZCciLA0KCQkJCSJpZD0nJGlkJyINCgkJCSk7DQoJCQlyYWhfcGVyc29u YWxfYnVkZ2V0X2l0ZW1zKA0KCQkJCSdCdWRnZXQgdXBkYXRlZC4nDQoJCQkpOw0KCQkJcmV0 dXJuOw0KCQl9DQoJCQ0KCQkNCgkJc2FmZV9pbnNlcnQoDQoJCQkncmFoX3BlcnNvbmFsX2J1 ZGdldCcsDQoJCQkidXBkYXRlZD1ub3coKSwNCgkJCWJ1ZGdldF9pdGVtPSckYnVkZ2V0X2l0 ZW0nLA0KCQkJYnVkZ2V0X2NvbW1lbnQ9JyRidWRnZXRfY29tbWVudCcsDQoJCQlidWRnZXRf c3RhcnQ9JyRidWRnZXRfc3RhcnQnLA0KCQkJYnVkZ2V0X2VuZD0nJGJ1ZGdldF9lbmQnIg0K CQkpOw0KCQkNCgkJcmFoX3BlcnNvbmFsX2J1ZGdldF9saXN0KA0KCQkJJ05ldyBidWRnZXQg YWRkZWQuJw0KCQkpOw0KDQoJfQ0KDQovKioNCglTYXZlcyBhbiBpbmRpdmlkdWFsIGl0ZW0N CiovDQoNCglmdW5jdGlvbiByYWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1fc2F2ZSgpIHsNCgkJ ZXh0cmFjdCgNCgkJCWRvU2xhc2goDQoJCQkJZ3BzYSgNCgkJCQkJYXJyYXkoDQoJCQkJCQkn cGF5bWVudF9kYXRlJywNCgkJCQkJCSdwYXltZW50X2l0ZW0nLA0KCQkJCQkJJ3BheW1lbnRf aW5jb21pbmcnLA0KCQkJCQkJJ3BheW1lbnRfb3V0Y29taW5nJywNCgkJCQkJCSdwYXltZW50 X2NvbW1lbnQnLA0KCQkJCQkJJ2lkJywNCgkJCQkJCSdncm91cCcNCgkJCQkJKQ0KCQkJCSkN CgkJCSkNCgkJKTsNCgkJDQoJCSRtYWluID0gDQoJCQlzYWZlX3JvdygNCgkJCQknaWQsIHVu aXhfdGltZXN0YW1wKGJ1ZGdldF9zdGFydCkgYXMgdWJ1ZGdldF9zdGFydCwgdW5peF90aW1l c3RhbXAoYnVkZ2V0X2VuZCkgYXMgdWJ1ZGdldF9lbmQnLA0KCQkJCSdyYWhfcGVyc29uYWxf YnVkZ2V0JywNCgkJCQkiaWQ9JyRncm91cCcgYW5kIChidWRnZXRfaWQ9Jycgb3IgYnVkZ2V0 X2lkPTApIg0KCQkJKTsNCgkJDQoJCWlmKCEkbWFpbikgew0KCQkJcmFoX3BlcnNvbmFsX2J1 ZGdldF9saXN0KA0KCQkJCSdVbmtub3duIGdyb3VwLicNCgkJCSk7DQoJCQlyZXR1cm47DQoJ CX0NCgkJDQoJCWlmKGVtcHR5KCRwYXltZW50X2RhdGUpKSB7DQoJCQlyYWhfcGVyc29uYWxf YnVkZ2V0X2l0ZW1fZWRpdCgNCgkJCQknRGF0ZSBpcyByZXF1aXJlZC4nDQoJCQkpOw0KCQkJ cmV0dXJuOw0KCQl9DQoJCQ0KCQkkZGF0ZSA9IHN0cnRvdGltZSgkcGF5bWVudF9kYXRlKTsN CgkJDQoJCWlmKA0KCQkJJGRhdGUgPT09IGZhbHNlIHx8ICRkYXRlID09IC0xDQoJCSkgew0K CQkJcmFoX3BlcnNvbmFsX2J1ZGdldF9pdGVtX2VkaXQoDQoJCQkJJ0ludmFsaWQgdGltZXN0 YW1wcy4gUmVtZW1iZXIgdG8gdXNlIFlZWVktZGQtbW0gc3ludGF4LicNCgkJCSk7DQoJCQly ZXR1cm47DQoJCX0NCgkJDQoJCWlmKA0KCQkJJGRhdGUgPCAkbWFpblsndWJ1ZGdldF9zdGFy dCddIHx8DQoJCQkkZGF0ZSA+ICRtYWluWyd1YnVkZ2V0X2VuZCddDQoJCSkgew0KCQkJcmFo X3BlcnNvbmFsX2J1ZGdldF9pdGVtX2VkaXQoDQoJCQkJJ1RoZSBkYXRlIG11c3QgYmUgd2l0 aGluIHRoZSBidWRnZXQgcGVyaW9kLicNCgkJCSk7DQoJCQlyZXR1cm47DQoJCX0NCgkJDQoJ CWlmKGVtcHR5KCRwYXltZW50X2luY29taW5nKSkNCgkJCSRwYXltZW50X2luY29taW5nID0g MDsNCgkJDQoJCWlmKGVtcHR5KCRwYXltZW50X291dGNvbWluZykpDQoJCQkkcGF5bWVudF9v dXRjb21pbmcgPSAwOw0KCQkNCgkJaWYoDQoJCQkkcGF5bWVudF9pbmNvbWluZyA8IDAgfHwg DQoJCQkkcGF5bWVudF9vdXRjb21pbmcgPCAwDQoJCSkgew0KCQkJcmFoX3BlcnNvbmFsX2J1 ZGdldF9pdGVtX2VkaXQoDQoJCQkJJ01pbmltdW0gdmFsdWUgaXMgMCBmb3IgZXhwZW5zZSBv ciBpbmNvbWUuJw0KCQkJKTsNCgkJCXJldHVybjsNCgkJfQ0KCQkNCgkJaWYoJGlkKSB7DQoJ CQkNCgkJCWlmKHNhZmVfY291bnQoJ3JhaF9wZXJzb25hbF9idWRnZXQnLCJpZD0nJGlkJyBh bmQgYnVkZ2V0X2lkPSckZ3JvdXAnIikgPT0gMCkgew0KCQkJCXJhaF9wZXJzb25hbF9idWRn ZXRfbGlzdCgNCgkJCQkJJ1Vua25vd24gYnVkZ2V0LicNCgkJCQkpOw0KCQkJCXJldHVybjsN CgkJCX0NCgkJCQ0KCQkJc2FmZV91cGRhdGUoDQoJCQkJJ3JhaF9wZXJzb25hbF9idWRnZXQn LA0KCQkJCSJ1cGRhdGVkPW5vdygpLA0KCQkJCXBheW1lbnRfZGF0ZT0nJHBheW1lbnRfZGF0 ZScsDQoJCQkJcGF5bWVudF9pdGVtPSckcGF5bWVudF9pdGVtJywNCgkJCQlwYXltZW50X2lu Y29taW5nPSckcGF5bWVudF9pbmNvbWluZycsDQoJCQkJcGF5bWVudF9vdXRjb21pbmc9JyRw YXltZW50X291dGNvbWluZycsDQoJCQkJcGF5bWVudF9jb21tZW50PSckcGF5bWVudF9jb21t ZW50JyIsDQoJCQkJImlkPSckaWQnIGFuZCBidWRnZXRfaWQ9JyRncm91cCciDQoJCQkpOw0K CQkJDQoJCQlyYWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1zKA0KCQkJCSdJdGVtIHVwZGF0ZWQu Jw0KCQkJKTsNCgkJCQ0KCQkJcmV0dXJuOw0KCQl9DQoJCQ0KCQlzYWZlX2luc2VydCgNCgkJ CSdyYWhfcGVyc29uYWxfYnVkZ2V0JywNCgkJCSJ1cGRhdGVkPW5vdygpLA0KCQkJYnVkZ2V0 X2lkPSckZ3JvdXAnLA0KCQkJcGF5bWVudF9kYXRlPSckcGF5bWVudF9kYXRlJywNCgkJCXBh eW1lbnRfaXRlbT0nJHBheW1lbnRfaXRlbScsDQoJCQlwYXltZW50X2luY29taW5nPSckcGF5 bWVudF9pbmNvbWluZycsDQoJCQlwYXltZW50X291dGNvbWluZz0nJHBheW1lbnRfb3V0Y29t aW5nJywNCgkJCXBheW1lbnRfY29tbWVudD0nJHBheW1lbnRfY29tbWVudCciDQoJCSk7DQoJ CQ0KCQlyYWhfcGVyc29uYWxfYnVkZ2V0X2l0ZW1zKA0KCQkJJ05ldyBpdGVtIGFkZGVkLicN CgkJKTsNCgl9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJmbGFncyI7czoxOiIwIjtzOjU6 Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiIzM2QxMTBlNGFlZWQwNzBhN2Q0MGUw NjQ3OTUyMGVmMyI7fQ==