# mem_moderation_article v0.7.6 # Moderation plugin that allows articles to be submitted to the moderation queue. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjIyOiJtZW1fbW9kZXJhdGlvbl9hcnRpY2xlIjtzOjc6InZl cnNpb24iO3M6NToiMC43LjYiO3M6NjoiYXV0aG9yIjtzOjE0OiJNaWNoYWVsIE1hbmZyZSI7 czoxMDoiYXV0aG9yX3VyaSI7czoxODoiaHR0cDovL21hbmZyZS5uZXQvIjtzOjExOiJkZXNj cmlwdGlvbiI7czo3OToiTW9kZXJhdGlvbiBwbHVnaW4gdGhhdCBhbGxvd3MgYXJ0aWNsZXMg dG8gYmUgc3VibWl0dGVkIHRvIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiI7czo0OiJ0eXBlIjtp OjE7czo0OiJoZWxwIjtzOjExODE2OiIJPGgxIGNsYXNzPSJ0aXRsZSI+bWVtX21vZGVyYXRp b25fYXJ0aWNsZSBwbHVnaW48L2gxPgoKCTxoMiBjbGFzcz0ic2VjdGlvbiBzdW1tYXJ5Ij5T dW1tYXJ5PC9oMj4KCgk8cD5UaGlzIG1vZGVyYXRpb24gcGx1Z2luIGFsbG93cyB1c2VycyB0 byBzdWJtaXQgYXJ0aWNsZXMgaW4gdG8gdGhlIG1vZGVyYXRpb24gcXVldWUuPC9wPgoKCTxo MiBjbGFzcz0ic2VjdGlvbiBjb250YWN0Ij5BdXRob3IgQ29udGFjdDwvaDI+CgoJPHA+PGEg aHJlZj0ibWFpbHRvOm1tYW5mcmVAZ21haWwuY29tP3N1YmplY3Q9VGV4dHBhdHRlcm4lMjBt ZW1fbW9kZXJhdGlvbl9hcnRpY2xlJTIwcGx1Z2luIj5NaWNoYWVsIE1hbmZyZTwvYT48YnIg Lz4KPGEgaHJlZj0iaHR0cDovL21hbmZyZS5uZXQiPmh0dHA6Ly9tYW5mcmUubmV0PC9hPjwv cD4KCgk8aDIgY2xhc3M9InNlY3Rpb24gbGljZW5zZSI+TGljZW5zZTwvaDI+CgoJPHA+VGhp cyBwbHVnaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnNm Lm9yZy9saWNlbnNpbmcvbGljZW5zZXMvaW5mby9HUEx2Mi5odG1sIj5HUEx2MjwvYT4uPC9w PgoKCTxoMiBjbGFzcz0ic2VjdGlvbiBpbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvaDI+ CgoJPHA+PGEgaHJlZj0iLi9pbmRleC5waHA/ZXZlbnQ9YXJ0aWNsZV9tb2RlcmF0ZSZhbXA7 c3RlcD1wcmVpbnN0YWxsIj5TdGFydCBJbnN0YWxsIFdpemFyZDwvYT48L3A+CgoJPGgyIGNs YXNzPSJzZWN0aW9uIHRhZ3MiPlRhZ3M8L2gyPgoKCTx1bD4KCQk8bGk+PGEgaHJlZj0iI21l bV9pZl9vd25zX2FydGljbGUiPm1lbV9pZl9vd25zX2FydGljbGU8L2E+PC9saT4KCQk8bGk+ PGEgaHJlZj0iI21lbV9hcnRpY2xlX2FjdGlvbl9saW5rIj5tZW1fYXJ0aWNsZV9hY3Rpb25f bGluazwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbWVtX2FydGljbGVfZGVsZXRlX3NlbnRy eSI+bWVtX2FydGljbGVfZGVsZXRlX3NlbnRyeTwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj bWVtX2N1c3RvbV91c2VyX2FydGljbGVfbGlzdCI+bWVtX2N1c3RvbV91c2VyX2FydGljbGVf bGlzdDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbWVtX21vZGVyYXRpb25fYXJ0aWNsZV9m b3JtIj5tZW1fbW9kZXJhdGlvbl9hcnRpY2xlX2Zvcm08L2E+PC9saT4KCQk8bGk+PGEgaHJl Zj0iI21lbV9ncHNfY2F0ZWdvcnkiPm1lbV9ncHNfY2F0ZWdvcnk8L2E+PC9saT4KCQk8bGk+ PGEgaHJlZj0iI21lbV9ncHNfc2VjdGlvbiI+bWVtX2dwc19zZWN0aW9uPC9hPjwvbGk+CgkJ PGxpPjxhIGhyZWY9IiNtb2RfYXJ0aWNsZV9mb3JtIj5tb2RfYXJ0aWNsZV9mb3JtPC9hPiA8 ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2xpPgoJCTxsaT48YSBocmVmPSIjbW9kX2N1c3RvbV9p bnB1dCI+bW9kX2N1c3RvbV9pbnB1dDwvYT4gPGVtPihkZXByZWNhdGVkKTwvZW0+PC9saT4K CQk8bGk+PGEgaHJlZj0iI21vZF90aXRsZV9pbnB1dCI+bW9kX3RpdGxlX2lucHV0PC9hPiA8 ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2xpPgoJCTxsaT48YSBocmVmPSIjbW9kX2ltYWdlX2lu cHV0Ij5tb2RfaW1hZ2VfaW5wdXQ8L2E+IDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwvbGk+CgkJ PGxpPjxhIGhyZWY9IiNtb2Rfa2V5d29yZHNfaW5wdXQiPm1vZF9rZXl3b3Jkc19pbnB1dDwv YT4gPGVtPihkZXByZWNhdGVkKTwvZW0+PC9saT4KCQk8bGk+PGEgaHJlZj0iI21vZF9ib2R5 X2lucHV0Ij5tb2RfYm9keV9pbnB1dDwvYT4gPGVtPihkZXByZWNhdGVkKTwvZW0+PC9saT4K CQk8bGk+PGEgaHJlZj0iI21vZF9ib2R5X2h0bWxfaW5wdXQiPm1vZF9ib2R5X2h0bWxfaW5w dXQ8L2E+IDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNtb2Rf ZXhjZXJwdF9pbnB1dCI+bW9kX2V4Y2VycHRfaW5wdXQ8L2E+IDxlbT4oZGVwcmVjYXRlZCk8 L2VtPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNtb2RfZXhjZXJwdF9odG1sX2lucHV0Ij5tb2Rf ZXhjZXJwdF9odG1sX2lucHV0PC9hPiA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2xpPgoJPC91 bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9pZl9vd25zX2FydGljbGUiPm1lbV9pZl9v d25zX2FydGljbGU8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+Q29uZGl0aW9uYWxs eSBwYXJzZSBlbmNsb3NlZCB0ZXh0IGJhc2VkIHVwb24gaWYgdGhlIGN1cnJlbnQgdXNlciBp cyB0aGUgY3JlYXRlciBvZiB0aGUgZGlzcGxheWVkIGFydGljbGUuPC9wPgoKCTx1bCBjbGFz cz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnVzZXJpZGZpZWxkPC9z cGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IE5hbWUgb2YgdGhl IHRhYmxlIGZpZWxkIGhvbGRpbmcgdGhlIHVzZXIgaWQuIERlZmF1bHQgaXMgJiM4MjIwO0F1 dGhvcklEJiM4MjIxOy48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9h cnRpY2xlX2FjdGlvbl9saW5rIj5tZW1fYXJ0aWNsZV9hY3Rpb25fbGluazwvaDM+CgoJPHAg Y2xhc3M9InRhZy1zdW1tYXJ5Ij5PdXRwdXQgYSB1cmwgKG9yIGxpbmspIGZvciB0aGUgY3Vy cmVudCBhcnRpY2xlIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGRlbGV0ZSBzZW50cnkuIFdv cmtzIHdpdGggYW55IHRhZyBzdXBwb3J0aW5nICR0aGlzYXJ0aWNsZS48L3A+CgoJPHVsIGNs YXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+YWN0aW9uPC9zcGFu PiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IEFjdGlvbiB0aGF0IGlz IGVuY29kZWQgaW4gdG8gdGhlIHVybC4gRGVmYXVsdCBpcyBkZWxldGUuPC9saT4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+dGV4dDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMt dHlwZSI+c3RyaW5nPC9zcGFuPiBMaW5rIHRleHQgdmFsdWUuPC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0dHMtbmFtZSI+dXJsPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5z dHJpbmc8L3NwYW4+IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRvIHNlbnRyeSBv ciBvdGhlciBoYW5kbGVyLCByZWxhdGl2ZSB0byBzaXRlIHJvb3QuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dHMtbmFtZSI+bW9kZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlw ZSI+c3RyaW5nPC9zcGFuPiBNb2RlIGZvciBnZW5lcmF0aW5nIG91dHB1dC4gdXJsX29ubHkg PSByYXcgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIHVybF9lbmNvZGVkID0gZW5j b2RlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiwgdXJsX2VzY2FwZWQgPSBodG1s IGVzY2FwZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIGxpbmsgPSA8c3BhbiBj bGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gYSB0YWcuIERlZmF1bHQgaXMgbGluay48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5wcm9tcHQ8L3NwYW4+IDxzcGFuIGNsYXNz PSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gSmF2YXNjcmlwdCBwcm9tcHQgdGV4dC48L2xp PgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9hcnRpY2xlX2RlbGV0ZV9zZW50 cnkiPm1lbV9hcnRpY2xlX2RlbGV0ZV9zZW50cnk8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3Vt bWFyeSI+TGlzdGVucyBmb3IgYW5kIHZhbGlkYXRlcyBkZWxldGUgbGlua3MgYW5kIGFkZHMg bW9kZXJhdGlvbiBpdGVtIHRvIHF1ZXVlLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5zdWNjZXNzbXNnPC9zcGFuPiA8c3BhbiBjbGFz cz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IE1lc3NhZ2UgdG8gc2hvdyBvbiBzdWNjZXNz LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmZhaWx1cmVtc2c8L3NwYW4+ IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gTWVzc2FnZSB0byBzaG93 IG9uIGZhaWx1cmUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+d3JhcHRh Zzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiA8c3BhbiBj bGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnIHRvIHdyYXAgbWVzc2FnZS48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBj bGFzcyBmb3Igd3JhcHRhZy48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1l bV9jdXN0b21fdXNlcl9hcnRpY2xlX2xpc3QiPm1lbV9jdXN0b21fdXNlcl9hcnRpY2xlX2xp c3Q8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+QXJ0aWNsZSBsaXN0IChzYW1lIGFz IGFydGljbGVfY3VzdG9tKSwgZXhjZXB0IGhhcyB0aGUgYWJpbGl0eSB0byBmaWx0ZXJzIGJh c2VkIHVwb24gYSB1c2VyIGlkIGJlaW5nIHN0b3JlZCBpbiBhbm90aGVyIGRhdGFiYXNlIGZp ZWxkLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1u YW1lIj51c2VyaWRmaWVsZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5n PC9zcGFuPiBEQiBGaWVsZCB0aGF0IGhvbGRzIHRoZSB1c2VyIGlkLjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHRzLW5hbWUiPmZvcm08L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5 cGUiPnN0cmluZzwvc3Bhbj4gRm9ybSBjb250YWluaW5nIGFydGljbGUgdGFncy48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5saW1pdDwvc3Bhbj4gPHNwYW4gY2xhc3M9 ImF0dHMtdHlwZSI+aW50PC9zcGFuPiBNYXggbnVtYmVyIG9mIGFydGljbGVzIGluIGxpc3Qu PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+b2Zmc2V0PC9zcGFuPiA8c3Bh biBjbGFzcz0iYXR0cy10eXBlIj5pbnQ8L3NwYW4+IE51bWJlciBvZiBhcnRpY2xlcyB0byBz a2lwLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnBhZ2VieTwvc3Bhbj4g PHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+aW50PC9zcGFuPiBOdW1iZXIgb2YgYXJ0aWNsZXMg cGVyIHBhZ2UuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+Y2F0ZWdvcnk8 L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gUmVzdHJpY3Rz IGFydGljbGVzIHRvIHRob3NlIHRoYXQgaGF2ZSBjYXRlZ29yeTEgb3IgY2F0ZWdvcnkyIG1h dGNoaW5nIHZhbHVlLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnNlY3Rp b248L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gUmVzdHJp Y3RzIHRvIGFydGljbGVzIG1hdGNoaW5nIHNlY3Rpb24uPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dHMtbmFtZSI+YXV0aG9yPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5z dHJpbmc8L3NwYW4+IFJlc3RyaWN0cyB0byBhcnRpY2xlcyBtYXRjaGluZyBhdXRob3IuPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+c29ydDwvc3Bhbj4gPHNwYW4gY2xh c3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9z cGFuPiBzb3J0IGZpZWxkIGFuZCBkaXJlY3Rpb24uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0dHMtbmFtZSI+dGltZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5n PC9zcGFuPiBBcnRpY2xlIHRpbWVmcmFtZS4gYW55ID0gaW5jbHVkZSBhbGwgYXJ0aWNsZXMs IGZ1dHVyZSA9IFBvc3RlZCAmZ3Q7IG5vdygpLCBkZWZhdWx0ID0gUG9zdGVkICZsdDsgbm93 KCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5tb250aDwvc3Bhbj4gPHNw YW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBSZXN0cmljdCB0byBhcnRpY2xl cyBwb3N0ZWQgZHVyaW5nIHRoZSBtb250aCBvZi48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXR0cy1uYW1lIj5zdGF0dXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmlu Zzwvc3Bhbj4gUmVzdHJpY3QgdG8gYXJ0aWNsZXMgbWF0Y2hpbmcgc3RhdHVzPC9saT4KCTwv dWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtZW1fbW9kZXJhdGlvbl9hcnRpY2xlX2Zvcm0i Pm1lbV9tb2RlcmF0aW9uX2FydGljbGVfZm9ybTwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1t YXJ5Ij5tZW1fZm9ybSBoZWxwZXIgdGFnIGZvciBhcnRpY2xlIGVkaXRzLiBTZWUgbWVtX2Zv cm0gZm9yIHRhZyBhdHRyaWJ1dGVzIGFuZCB1c2FnZS48L3A+CgoJPGgzIGNsYXNzPSJ0YWci IGlkPSJtb2RfYXJ0aWNsZV9mb3JtIj5tb2RfYXJ0aWNsZV9mb3JtIDxlbT4oZGVwcmVjYXRl ZCk8L2VtPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5UaGlzIGNsaWVudCBzaWRl IHRhZyB3aWxsIHBsYWNlIGEgZm9ybSBmb3Igc3VibWl0dGluZyBhbmQgcmUtZWRpdGluZyBz dWJtaXR0ZWQgYXJ0aWNsZXMuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdHRzLW5hbWUiPmZvcm08L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUi PnN0cmluZzwvc3Bhbj4gVGhlIHR4cCBmb3JtIHRoYXQgaG9sZHMgdGhlIGxheW91dCB0YWdz LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnN1Y2Nlc3Nmb3JtPC9zcGFu PiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSB0eHAgZm9ybSB0 aGF0IGhvbGRzIHRoZSB0ZW1wbGF0ZSB0byBzaG93IHRvIHRoZSB1c2VyIG9uIGEgc3VjY2Vz c2Z1bCBmb3JtIHN1Ym1pc3Npb24gKGZvciBlaXRoZXIgc2F2ZSwgZWRpdCwgb3IgZGVsZXRl KS48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF9jdXN0b21faW5wdXQi Pm1vZF9jdXN0b21faW5wdXQgPGVtPihkZXByZWNhdGVkKTwvZW0+PC9oMz4KCgk8cCBjbGFz cz0idGFnLXN1bW1hcnkiPkRpc3BsYXkgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBjdXN0b20g aW5wdXQgZmllbGRzLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3Ry aW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFt ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5I VE1MPC9zcGFuPiB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5pc2l6 ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+aW50PC9zcGFuPiBUaGUgc2l6ZSBv ZiB0aGUgaW5wdXQgZmllbGQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+ aWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPmludDwvc3Bhbj4gVGhlIGZpZWxk IGlkIHRoaXMgdGFnIHJlcHJlc2VudHMuIEUuZy4gaWQ9JiM4MjIwOzEmIzgyMjE7IG1hdGNo ZXMgZmllbGQgY3VzdG9tXzE8L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1v ZF90aXRsZV9pbnB1dCI+bW9kX3RpdGxlX2lucHV0IDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwv aDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5EaXNwbGF5IGEgdGV4dCBpbnB1dCBmaWVs ZCBmb3IgdGhlIHRpdGxlLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+ c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3Mg bmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVkIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPiB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5p c2l6ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+aW50PC9zcGFuPiBUaGUgc2l6 ZSBvZiB0aGUgaW5wdXQgZmllbGQuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlk PSJtb2RfaW1hZ2VfaW5wdXQiPm1vZF9pbWFnZV9pbnB1dCA8ZW0+KGRlcHJlY2F0ZWQpPC9l bT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSBhIHRleHQgaW5wdXQg ZmllbGQgZm9yIHRoZSBhcnRpY2xlIGltYWdlIGZpZWxkLjwvcD4KCgk8dWwgY2xhc3M9ImF0 dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4g Y2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVk IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWc8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0cy1uYW1lIj5pc2l6ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+ aW50PC9zcGFuPiBUaGUgc2l6ZSBvZiB0aGUgaW5wdXQgZmllbGQuPC9saT4KCTwvdWw+CgoJ PGgzIGNsYXNzPSJ0YWciIGlkPSJtb2Rfa2V5d29yZHNfaW5wdXQiPm1vZF9rZXl3b3Jkc19p bnB1dCA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFy eSI+RGlzcGxheSBhIHRleHQgaW5wdXQgZmllbGQgZm9yIHRoZSBrZXl3b3Jkcy48L3A+CgoJ PHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+Y2xhc3M8 L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gVGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGgg dGhlIG91dHB1dHRlZCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnPC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+aXNpemU8L3NwYW4+IDxzcGFuIGNsYXNz PSJhdHRzLXR5cGUiPmludDwvc3Bhbj4gVGhlIHNpemUgb2YgdGhlIGlucHV0IGZpZWxkLjwv bGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0ibW9kX2JvZHlfaW5wdXQiPm1vZF9i b2R5X2lucHV0IDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1z dW1tYXJ5Ij5EaXNwbGF5IGEgdGV4dGFyZWEgZmllbGQgZm9yIHRoZSBib2R5LjwvcD4KCgk8 dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5jbGFzczwv c3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4g Y2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0 aGUgb3V0cHV0dGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWc8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5zdHlsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9 ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gc3R5bGUgYXR0cmlidXRlIHRvIGFwcGx5IHRvIHRoZSBpbnB1dCBmaWVsZC48L2xp PgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF9ib2R5X2h0bWxfaW5wdXQiPm1v ZF9ib2R5X2h0bWxfaW5wdXQgPGVtPihkZXByZWNhdGVkKTwvZW0+PC9oMz4KCgk8cCBjbGFz cz0idGFnLXN1bW1hcnkiPkRpc3BsYXkgYSB0ZXh0YXJlYSBmaWVsZCBmb3IgdGhlIGJvZHlf aHRtbC48L3A+CgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMt bmFtZSI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bh bj4gVGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIG5hbWUgdG8gYXNz b2NpYXRlIHdpdGggdGhlIG91dHB1dHRlZCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+c3R5bGU8L3NwYW4+ IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gVGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5DU1M8L3NwYW4+IHN0eWxlIGF0dHJpYnV0ZSB0byBhcHBseSB0byB0aGUgaW5w dXQgZmllbGQuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtb2RfZXhjZXJw dF9pbnB1dCI+bW9kX2V4Y2VycHRfaW5wdXQgPGVtPihkZXByZWNhdGVkKTwvZW0+PC9oMz4K Cgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkRpc3BsYXkgYSB0ZXh0YXJlYSBmaWVsZCBmb3Ig dGhlIGV4Y2VycHQuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHRzLW5hbWUiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJp bmc8L3NwYW4+IFRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1l IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBvdXRwdXR0ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IHRhZzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnN0eWxl PC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBzdHlsZSBhdHRyaWJ1dGUgdG8gYXBwbHkgdG8g dGhlIGlucHV0IGZpZWxkLjwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0ibW9k X2V4Y2VycHRfaHRtbF9pbnB1dCI+bW9kX2V4Y2VycHRfaHRtbF9pbnB1dCA8ZW0+KGRlcHJl Y2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSBhIHRl eHRhcmVhIGZpZWxkIGZvciB0aGUgZXhjZXJwdF9odG1sLjwvcD4KCgk8dWwgY2xhc3M9ImF0 dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4g Y2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVk IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWc8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0cy1uYW1lIj5zdHlsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+ c3RyaW5nPC9zcGFuPiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gc3R5bGUg YXR0cmlidXRlIHRvIGFwcGx5IHRvIHRoZSBpbnB1dCBmaWVsZC48L2xpPgoJPC91bD4KCgk8 aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF9ub3RlX2lucHV0Ij5tb2Rfbm90ZV9pbnB1dCA8ZW0+ KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxh eSBhIHRleHRhcmVhIGZpZWxkIGZvciB0aGUgbm90ZSAodG8gdGhlIG1vZGVyYXRvcnMpPC9w PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmNs YXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1lIHRvIGFzc29jaWF0ZSB3 aXRoIHRoZSBvdXRwdXR0ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZzwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnN0eWxlPC9zcGFuPiA8c3BhbiBj bGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBzdHlsZSBhdHRyaWJ1dGUgdG8gYXBwbHkgdG8gdGhlIGlucHV0IGZpZWxk LjwvbGk+Cgk8L3VsPiI7czo0OiJjb2RlIjtzOjM4MTM4OiIKLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFBsdWdpbgov LyBBdXRob3I6IE1pY2hhZWwgTWFuZnJlIChodHRwOi8vbWFuZnJlLm5ldC8pCi8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoK Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLwovLyBEbyBub3QgbW9kaWZ5IGJlbG93IHRoaXMgbGluZQoKcmVxdWlyZV9wbHVn aW4oJ21lbV9tb2RlcmF0aW9uJyk7CgoKZ2xvYmFsICRldmVudCwgJHN0ZXAsICRwcmVmcywg JG1lbV9hcnRpY2xlX3ZhcnMsICRtZW1fYXJ0aWNsZV9kZWxldGVfdmFycywgJG1lbV9tb2Rl cmF0aW9uX2xhbmc7CgokbWVtX21vZGVyYXRpb25fbGFuZyA9IGFycmF5X21lcmdlKCRtZW1f bW9kZXJhdGlvbl9sYW5nLCBhcnJheSgKCSdtZW1fbW9kX3B1Yl9ieXBhc3NfcXVldWUnCT0+ CSdQdWJsaXNoZXJzIGJ5cGFzcyBxdWV1ZSBkZWxheT8nLAoJJ21lbV9tb2RfYXJ0aWNsZV9l ZGl0X3Jlc2V0c190aW1lJwk9PgknRWRpdCByZXNldHMgYXJ0aWNsZSB0aW1lPycsCgknbWVt X21vZF9hcnRpY2xlX3N1Ym1pdF93aXRoX21vZGVyYXRvcl9pZCcJPT4JJ1N1YnN0aXR1dGUg YXBwcm92ZXIgYXMgYXJ0aWNsZSBlZGl0b3I/JywKKSk7CgovLyBhcnRpY2xlL2FydGljbGUt ZWRpdCB2YXJzCiRtZW1fYXJ0aWNsZV92YXJzID0gYXJyYXkoJ25vdGUnLCd1c2VyJywnZW1h aWwnLCdtb2RpZCcsJ2lkJywnYXJ0aWNsZWlkJywKCQkndGl0bGUnLCd0aXRsZV9odG1sJywn Ym9keScsJ2JvZHlfaHRtbCcsJ2V4Y2VycHQnLCdleGNlcnB0X2h0bWwnLCd0ZXh0aWxlX2V4 Y2VycHQnLCdpbWFnZScsCgkJJ3RleHRpbGVfYm9keScsJ2tleXdvcmRzJywnc3RhdHVzJywn c2VjdGlvbicsJ2NhdGVnb3J5MScsJ2NhdGVnb3J5MicsCgkJJ2Fubm90YXRlJywnYW5ub3Rh dGVpbnZpdGUnLCdvdmVycmlkZV9mb3JtJywKCQknY3VzdG9tXzEnLCdjdXN0b21fMicsJ2N1 c3RvbV8zJywnY3VzdG9tXzQnLCdjdXN0b21fNScsCgkJJ2N1c3RvbV82JywnY3VzdG9tXzcn LCdjdXN0b21fOCcsJ2N1c3RvbV85JywnY3VzdG9tXzEwJyk7Ci8vIGFydGljbGUtZGVsZXRl IHZhcnMKJG1lbV9hcnRpY2xlX2RlbGV0ZV92YXJzID0gYXJyYXkoJ3VzZXInLCdlbWFpbCcs J2FydGljbGVpZCcsJ3RpdGxlJyk7CgoKLy8gSW5jbHVkZSB0aGUgYXJ0aWNsZSBwYWdlIHdo ZW4gc2FmZSB0byBkbyBzbwppZiAoKEB0eHBpbnRlcmZhY2U9PSdhZG1pbicgYW5kICgkZXZl bnQ9PSdtb2RlcmF0ZScgb3IgJGV2ZW50PT0nYXJ0aWNsZV9tb2RlcmF0ZScpKSBvciBAdHhw aW50ZXJmYWNlIT0nYWRtaW4nKQp7CglyZXF1aXJlX29uY2UodHhwYXRoLicvaW5jbHVkZS90 eHBfYXJ0aWNsZS5waHAnKTsKfQoKLyoqIFNob3cgYSBjYXRlZ29yeSBzZWxlY3QgbGlzdCBm b3IgcHJlc2VudGVyICovCmZ1bmN0aW9uIG1lbV9jYXRlZ29yeV9wb3B1cCgkbmFtZSwkdmFs KQp7CgkkcnMgPSBnZXRUcmVlKCJyb290IiwnYXJ0aWNsZScpOwoJaWYgKCRycykKCXsKCQly ZXR1cm4gdHJlZVNlbGVjdElucHV0KCRuYW1lLCRycywkdmFsKTsKCX0KCXJldHVybiBmYWxz ZTsKfQoKCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpCnsKCS8vIGdpdmUgcHVibGlz aGVyIGluc3RhbGwgYWNjZXNzCglhZGRfcHJpdnMoJ2FydGljbGVfbW9kZXJhdGUnLCcxJyk7 CgoJLy8gcmVnaXN0ZXIgZXZlbnQgd2l0aCB0eHAKCXJlZ2lzdGVyX2NhbGxiYWNrKCdhcnRp Y2xlX21vZGVyYXRlJywnYXJ0aWNsZV9tb2RlcmF0ZScsJycsIDEpOwoJLy8gd2lyZSB1cCBt b2RlcmF0aW9uIHR5cGVzCgltZW1fbW9kZXJhdGlvbl9yZWdpc3RlcignYXJ0aWNsZScsJG1l bV9hcnRpY2xlX3ZhcnMsJ21lbV9hcnRpY2xlX3ByZXNlbnRlcicsJ21lbV9hcnRpY2xlX2Fw cHJvdmVyJywnbWVtX2FydGljbGVfcmVqZWN0ZXInKTsKCW1lbV9tb2RlcmF0aW9uX3JlZ2lz dGVyKCdhcnRpY2xlLWVkaXQnLCRtZW1fYXJ0aWNsZV92YXJzLCdtZW1fYXJ0aWNsZV9wcmVz ZW50ZXInLCdtZW1fYXJ0aWNsZV9hcHByb3ZlcicsJ21lbV9hcnRpY2xlX3JlamVjdGVyJyk7 CgltZW1fbW9kZXJhdGlvbl9yZWdpc3RlcignYXJ0aWNsZS1kZWxldGUnLCRtZW1fYXJ0aWNs ZV9kZWxldGVfdmFycywnbWVtX2FydGljbGVfcHJlc2VudGVyJywnbWVtX2FydGljbGVfYXBw cm92ZXInLCdtZW1fYXJ0aWNsZV9yZWplY3RlcicpOwoKCWlmICgkZXZlbnQ9PSdhcnRpY2xl X21vZGVyYXRlJykKCXsKCQkvKiogRXZlbnQgaGFuZGxlciAqLwoJCWZ1bmN0aW9uIGFydGlj bGVfbW9kZXJhdGUoJGV2ZW50LCAkc3RlcCkKCQl7CgkJCSRtc2c9Jyc7CgoJCQlpZiAoJHN0 ZXA9PSdhcnRpY2xlX3NhdmUnIG9yICRzdGVwPT0nYXJ0aWNsZV9wb3N0JykKCQkJewoJCQkJ Ly8gc2F2ZSBjaGFuZ2VzCgkJCQkkbXNnID0gYXJ0aWNsZV9zYXZlKCRzdGVwKTsKCQkJfQoJ CQllbHNlIGlmICgkc3RlcD09J3ByZWluc3RhbGwnIG9yICRzdGVwPT0naW5zdGFsbCcpCgkJ CXsKCQkJCS8vIG5lZWQgdGFiIGR1cmluZyBpbnN0YWxsCgkJCQlyZWdpc3Rlcl90YWIoJ2V4 dGVuc2lvbnMnLCdhcnRpY2xlX21vZGVyYXRlJywnYXJ0aWNsZV9tb2RlcmF0ZScpOwoJCQkJ ZWNobyBwYWdlVG9wKCdBcnRpY2xlIE1vZGVyYXRpb24nLCcnKTsKCgkJCQllY2hvIGFydGlj bGVfaW5zdGFsbCgpOwoKCQkJCXJldHVybjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXRyaWdn ZXJfZXJyb3IoZ1R4dCgndW5rbm93bl9zdGVwJykpOwoJCQl9CgoJCQlwYWdlVG9wKCdhcnRp Y2xlIE1vZGVyYXRpb24nLCRtc2cpOwoJCX0KCgkJLyoqIEluc3RhbGwgRGVmYXVsdCBGb3Jt cywgcHJlZnMsIGV0Yy4gKi8KCQlmdW5jdGlvbiBhcnRpY2xlX2luc3RhbGwoKQoJCXsKCQkJ Z2xvYmFsICRwcmVmczsKCgkJCSRsb2cgPSBhcnJheSgpOwoKCQkJLy8gZGVmYXVsdCBhcnRp Y2xlIGVkaXQgZm9ybQoJCQkkZm9ybSA9IGZldGNoKCdGb3JtJywndHhwX2Zvcm0nLCduYW1l JywnbW9kX2FydGljbGVfZm9ybScpOwoJCQlpZiAoISRmb3JtKQoJCQl7CgkJCQkkZm9ybV9o dG1sID0gPDw8RU9GCjx0eHA6bWVtX2Zvcm1fdGV4dCBuYW1lPSJ0aXRsZSIgbGFiZWw9IlRp dGxlIiAvPgoKPHR4cDptZW1fZm9ybV9zZWxlY3RfY2F0ZWdvcnkgbmFtZT0iY2F0ZWdvcnkx IiBsYWJlbD0iQ2F0ZWdvcnkiIC8+Cgo8dHhwOm1lbV9mb3JtX3RleHRhcmVhIG5hbWU9ImJv ZHkiIGxhYmVsPSJCb2R5IiAvPgoKPHR4cDptZW1fZm9ybV90ZXh0YXJlYSBuYW1lPSJub3Rl IiBsYWJlbD0iTm90ZXMgZm9yIHRoZSBNb2RlcmF0b3IgKG9wdGlvbmFsKSIgcmVxdWlyZWQ9 IjAiIC8+Cgo8IS0tIHRoaXMgd2lsbCBwdXQgdGhlIHN1Ym1pdHRpbmcgdXNlcm5hbWUgaW4g dG8gY3VzdG9tIGZpZWxkIDEgLS0+Cjx0eHA6bWVtX2Zvcm1faGlkZGVuIG5hbWU9ImN1c3Rv bV8xIiB2YWx1ZT0nPHR4cDptZW1fcHJvZmlsZSB2YXI9Im5hbWUiIC8+JyAvPgoKPGRpdj48 dHhwOm1lbV9mb3JtX3N1Ym1pdCAvPjwvZGl2PgpFT0Y7CgkJCQkkZm9ybV9odG1sID0gZG9T bGFzaCgkZm9ybV9odG1sKTsKCQkJCWlmIChzYWZlX2luc2VydCgndHhwX2Zvcm0nLCJuYW1l PSdtb2RfYXJ0aWNsZV9mb3JtJyx0eXBlPSdtaXNjJyxGb3JtPSd7JGZvcm1faHRtbH0nIikp CgkJCQkJJGxvZ1tdID0gIkNyZWF0ZWQgZm9ybSAnbW9kX2FydGljbGVfZm9ybSciOwoJCQkJ ZWxzZQoJCQkJCSRsb2dbXSA9ICJGYWlsZWQgdG8gY3JlYXRlIGZvcm0gJ21vZF9hcnRpY2xl X2Zvcm0nLiAiIC4gbXlzcWxfZXJyb3IoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRsb2db XSA9ICJGb3VuZCBmb3JtICdtb2RfYXJ0aWNsZV9mb3JtJy4gU2tpcHBpbmcgaW5zdGFsbGF0 aW9uIG9mIGRlZmF1bHQgZm9ybS4iOwoJCQl9CgoJCQkvLyBkZWZhdWx0IGFydGljbGUgc3Vj Y2VzcyBmb3JtCgkJCSRmb3JtID0gZmV0Y2goJ0Zvcm0nLCd0eHBfZm9ybScsJ25hbWUnLCdt b2RfYXJ0aWNsZV9zdWNjZXNzJyk7CgkJCWlmICghJGZvcm0pCgkJCXsKCQkJCSRmb3JtX2h0 bWwgPSA8PDxFT0YKPHR4cDptZW1faWZfc3RlcCBuYW1lPSJhcnRpY2xlX2RlbGV0ZSI+Cgk8 aDI+QXJ0aWNsZSBkZWxldGVkPC9oMj4KCTxwPllvdXIgYXJ0aWNsZSBoYXMgYmVlbiBkZWxl dGVkIGFuZCB3aWxsIG5vdCBiZSBwb3N0ZWQgb24gdGhpcyBzaXRlLjwvcD4KPHR4cDplbHNl IC8+Cgk8aDI+TmV3cyBzdWJtaXR0ZWQ8L2gyPgoJPHA+VGhhbmsgeW91IGZvciBzdWJtaXR0 aW5nIHlvdXIgYXJ0aWNsZS4gSXQgd2lsbCBiZSByZXZpZXdlZCBieSBhIG1vZGVyYXRvciBi ZWZvcmUgYmVpbmcgcG9zdGVkIHRvIHRoZSBzaXRlLjwvcD4KPC90eHA6bWVtX2lmX3N0ZXA+ CkVPRjsKCQkJCSRmb3JtX2h0bWwgPSBkb1NsYXNoKCRmb3JtX2h0bWwpOwoJCQkJaWYgKHNh ZmVfaW5zZXJ0KCd0eHBfZm9ybScsIm5hbWU9J21vZF9hcnRpY2xlX3N1Y2Nlc3MnLHR5cGU9 J21pc2MnLEZvcm09J3skZm9ybV9odG1sfSciKSkKCQkJCQkkbG9nW10gPSAiQ3JlYXRlZCBm b3JtICdtb2RfYXJ0aWNsZV9mb3JtJyI7CgkJCQllbHNlCgkJCQkJJGxvZ1tdID0gIkZhaWxl ZCB0byBjcmVhdGUgZm9ybSAnbW9kX2FydGljbGVfc3VjY2VzcycuICIgLiBteXNxbF9lcnJv cigpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGxvZ1tdID0gIkZvdW5kIGZvcm0gJ21vZF9h cnRpY2xlX3N1Y2Nlc3MnLiBTa2lwcGluZyBpbnN0YWxsYXRpb24gb2YgZGVmYXVsdCBmb3Jt LiI7CgkJCX0KCgkJCWlmICghaXNzZXQoJHByZWZzWydtZW1fbW9kX2FydGljbGVfZWRpdF9y ZXNldHNfdGltZSddKSkKCQkJewoJCQkJc2V0X3ByZWYoJ21lbV9tb2RfYXJ0aWNsZV9lZGl0 X3Jlc2V0c190aW1lJywgJzAnLCAnbWVtX21vZGVyYXRpb24nLCAxLCAneWVzbm9yYWRpbycp OwoJCQkJJGxvZ1tdID0gIlNldCBwcmVmZXJlbmNlIG1lbV9tb2RfYXJ0aWNsZV9lZGl0X3Jl c2V0c190aW1lIjsKCQkJfQoJCQlpZiAoIWlzc2V0KCRwcmVmc1snbWVtX21vZF9hcnRpY2xl X3N1Ym1pdF93aXRoX21vZGVyYXRvcl9pZCddKSkKCQkJewoJCQkJc2V0X3ByZWYoJ21lbV9t b2RfYXJ0aWNsZV9zdWJtaXRfd2l0aF9tb2RlcmF0b3JfaWQnLCAnMCcsICdtZW1fbW9kZXJh dGlvbicsIDEsICd5ZXNub3JhZGlvJyk7CgkJCQkkbG9nW10gPSAiU2V0IHByZWZlcmVuY2Ug bWVtX21vZF9hcnRpY2xlX3N1Ym1pdF93aXRoX21vZGVyYXRvcl9pZCI7CgkJCX0KCgoJCQly ZXR1cm4gdGFnKCJJbnN0YWxsIExvZyIsJ2gyJykuZG9XcmFwKCRsb2csJ3VsJywnbGknKTsK CQl9Cgl9IC8vIGlmIGFydGljbGVfbW9kZXJhdGUKfSAvLyBpZiBhZG1pbgoKLyoqIFRoZSBh cnRpY2xlIGZvcm0gdGFnLiBIYW5kbGVzIGFsbCBsb2dpYy4gRGVwcmVjYXRlZCAqLwpmdW5j dGlvbiBtb2RfYXJ0aWNsZV9mb3JtKCRhdHRzLCR0aGluZz0nJykKewoJdHJpZ2dlcl9lcnJv cihnVHh0KCdkZXByZWNhdGVkX2Z1bmN0aW9uX3dpdGgnLCBhcnJheSgne25hbWV9JyA9PiBf X0ZVTkNUSU9OX18sICd7d2l0aH0nID0+ICdtZW1fbW9kZXJhdGlvbl9hcnRpY2xlX2Zvcm0n KSksIEVfVVNFUl9OT1RJQ0UpOwoKCWdsb2JhbCAkc3RlcCwkdHhwX3VzZXIsJGlnbl91c2Vy LCRtZW1fbW9kX2luZm8sJG1lbV9tb2RhcnRpY2xlX2luZm8sICRtZW1fYXJ0aWNsZV92YXJz OwoKCWV4dHJhY3QoZ3BzYShhcnJheSgnbW9kaWQnLCdhY3Rpb24nLCdldmVudCcsJ3N0ZXAn LCdpZCcpKSk7CgoKCWlmICghZW1wdHkoJG1vZGlkKSkgJGlkID0gJG1vZGlkOwoKCWlmIChp c3NldCgkaWduX3VzZXIpKSAkdHhwX3VzZXIgPSAkaWduX3VzZXI7CgoJZXh0cmFjdChsQXR0 cyhhcnJheSgKCQknZm9ybScJCT0+ICdtb2RfYXJ0aWNsZV9mb3JtJywKCQknc3VjY2Vzc2Zv cm0nCT0+ICdtb2RfYXJ0aWNsZV9zdWNjZXNzJwoJKSwkYXR0cykpOwoKCSRtZW1fbW9kYXJ0 aWNsZV9pbmZvID0gZ3BzYSgkbWVtX2FydGljbGVfdmFycyk7CglpZiAoaXNzZXQoJGlkKSkK CQkkbWVtX21vZGFydGljbGVfaW5mb1snaWQnXSA9ICRpZDsKCWV4dHJhY3QoJG1lbV9tb2Rh cnRpY2xlX2luZm8pOwoJJG91dCA9ICcnOwoKCWlmIChpc3NldCgkYWN0aW9uKSBhbmQgJGFj dGlvbj09Z1R4dCggJ2RlbGV0ZScgKSkKCQkkc3RlcCA9ICdhcnRpY2xlX2RlbGV0ZSc7CgoJ aWYgKGlzc2V0KCRzdGVwKSBhbmQgKCRzdGVwPT0nYXJ0aWNsZV9zYXZlJyBvciAkc3RlcD09 J2FydGljbGVfdXBkYXRlJyBvciAkc3RlcD09J2FydGljbGVfZGVsZXRlJykpCgl7CgkJaWYg KCFlbXB0eSgkc3VjY2Vzc2Zvcm0pKQoJCQkkRm9ybSA9IGZldGNoX2Zvcm0oJHN1Y2Nlc3Nm b3JtKTsKCgkJaWYgKCRzdGVwPT0nYXJ0aWNsZV9kZWxldGUnKQoJCXsKCQkJaWYgKHJlbW92 ZV9tb2RlcmF0ZWRfY29udGVudCgkbW9kaWQpKSB7CgkJCQkkbXNnID0gJ0RlbGV0ZWQgYXJ0 aWNsZSc7CgkJCX0gZWxzZSB7CgkJCQkkbXNnID0gJ0ZhaWxlZCB0byBkZWxldGUgYXJ0aWNs ZSBpbWFnZSc7CgkJCX0KCQl9CgkJZWxzZSBpZiAoJHN0ZXA9PSdhcnRpY2xlX3VwZGF0ZScp CgkJewoJCQlpZiAodXBkYXRlX21vZGVyYXRlZF9jb250ZW50KCRpZCwkbm90ZSwkbWVtX21v ZGFydGljbGVfaW5mbykpIHsKCQkJCSRyZXMgPSAnVXBkYXRlZCBBcnRpY2xlJzsKCQkJfSBl bHNlIHsKCQkJCSRyZXMgPSAnRmFpbGVkIHRvIHVwZGF0ZSBBcnRpY2xlJzsKCQkJfQoJCX0K CQllbHNlCgkJewoJCQlpZiAoIWlzc2V0KCR1c2VyKSkKCQkJCSRtZW1fbW9kYXJ0aWNsZV9p bmZvWyd1c2VyJ10gPSAkdHhwX3VzZXI7CgoJCQkkcmVzID0gc3VibWl0X21vZGVyYXRlZF9j b250ZW50KCdhcnRpY2xlJywnJywkbWVtX21vZGFydGljbGVfaW5mb1snbm90ZSddLCRtZW1f bW9kYXJ0aWNsZV9pbmZvKTsKCQl9CgoJCSRvdXQgPSBhZG1pbl9wYXJzZSgkRm9ybSk7CgoJ CXVuc2V0KCRtZW1fbW9kYXJ0aWNsZV9pbmZvKTsKCX0KCWVsc2UKCXsKCQlpZiAoZW1wdHko JGZvcm0pKQoJCQkkRm9ybSA9ICR0aGluZzsKCQllbHNlCgkJCSRGb3JtID0gZmV0Y2hfZm9y bSgkZm9ybSk7CgoKCQkkYWN0aW9uX3VybCA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwoJ CSRxcyA9IHN0cnBvcygkYWN0aW9uX3VybCwnPycpOwoJCWlmICgkcXMpICRhY3Rpb25fdXJs ID0gc3Vic3RyKCRhY3Rpb25fdXJsLCAwLCAkcXMpOwoKCQkkb3V0ID0Jbi5uLiI8Zm9ybSBl bmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyBhY3Rpb249J3skYWN0aW9uX3VybH0nIG1l dGhvZD0ncG9zdCc+IiAuCgkJCQllSW5wdXQoJ2FydGljbGVfbW9kZXJhdGUnKSAuCgkJCQlz SW5wdXQoICRzdGVwPT0nYXJ0aWNsZV9lZGl0JyA/ICdhcnRpY2xlX3VwZGF0ZScgOiAnYXJ0 aWNsZV9zYXZlJyApOwoKCQlpZiAoaXNzZXQoJG1vZGlkKSBhbmQgIWVtcHR5KCRtb2RpZCkp CgkJewoJCQkkb3V0IC49IGhJbnB1dCgnbW9kaWQnLCRtb2RpZCk7CgoJCQkkbWVtX21vZF9p bmZvID0gc2FmZV9yb3coJyonLCd0eHBfbW9kZXJhdGlvbicsImBpZGA9JyIuZG9TbGFzaCgk bW9kaWQpLiInIik7CgoJCQlleHRyYWN0KCRtZW1fbW9kYXJ0aWNsZV9pbmZvPW1lbV9tb2Rl cmF0aW9uX2RlY29kZSgkbWVtX21vZF9pbmZvWydkYXRhJ10pKTsKCQl9CgoJCWlmIChpc3Nl dCgkdXNlcikgYW5kICFlbXB0eSgkdXNlcikpCgkJCSRvdXQgLj0gaElucHV0KCd1c2VyJywk dXNlcik7CgkJaWYgKGlzc2V0KCRlbWFpbCkgYW5kICFlbXB0eSgkZW1haWwpKQoJCQkkb3V0 IC49IGhJbnB1dCgnZW1haWwnLCRlbWFpbCk7CgkJZWxzZSBpZiAoJGVtYWlsPXNhZmVfZmll bGQoJ2VtYWlsJywndHhwX3VzZXJzJywibmFtZT0nIi5kb1NsYXNoKCR1c2VyKS4iJyIpKQoJ CQkkb3V0IC49IGhJbnB1dCgnZW1haWwnLCRlbWFpbCk7CgoJCSRjYXR0cmVlID0gZ2V0VHJl ZSgicm9vdCIsJ2FydGljbGUnKTsKCQkkcnMgPSBzYWZlX2NvbHVtbigibmFtZSIsICJ0eHBf c2VjdGlvbiIsICJuYW1lIT0nZGVmYXVsdCciKTsKCQlpZiAoIWlzc2V0KCRzZWN0aW9uKSB8 fCBlbXB0eSgkc2VjdGlvbikpCgkJCSRzZWN0aW9uID0gZ2V0RGVmYXVsdFNlY3Rpb24oKTsK CQkkc2VjdGlvbl9zZWxlY3QgPSAoJHJzKSA/IHNlbGVjdElucHV0KCJzZWN0aW9uIiwgJHJz LCAkc2VjdGlvbikgOiAnJzsKCgkJJHZhbHMgPSBhcnJheSgKCQkJJ2NhdGVnb3J5MV9zZWxl Y3QnCT0+IHRyZWVTZWxlY3RJbnB1dCgiY2F0ZWdvcnkxIiwgJGNhdHRyZWUsICRjYXRlZ29y eTEpLAoJCQknY2F0ZWdvcnkyX3NlbGVjdCcJPT4gdHJlZVNlbGVjdElucHV0KCJjYXRlZ29y eTIiLCAkY2F0dHJlZSwgJGNhdGVnb3J5MiksCgkJCSdzZWN0aW9uX3NlbGVjdCcJPT4gJHNl Y3Rpb25fc2VsZWN0LAoJCQknc3VibWl0JwkJCT0+IGZJbnB1dCggInN1Ym1pdCIsICdhY3Rp b24nLCBnVHh0KCAnc2F2ZScgKSwgInB1Ymxpc2giICksCgkJCSdkZWxldGUnCQkJPT4gKCFl bXB0eSgkbW9kaWQpID8gZklucHV0KCAic3VibWl0IiwgJ2FjdGlvbicsIGdUeHQoICdkZWxl dGUnICksICJkZWxldGUiLCAnJywgInJldHVybiBjb25maXJtKCciLiBnVHh0KCdhcmVfeW91 X3N1cmUnKSAuIicpIiApIDogJycpCgkJKTsKCgkJZm9yZWFjaCAoJHZhbHMgYXMgJGE9PiRi KQoJCXsKCQkJJGEgPSAnPHR4cDptb2RfJy4kYS4nIC8+JzsKCQkJJEZvcm0gPSBzdHJfcmVw bGFjZSgkYSwkYiwkRm9ybSk7CgkJfQoKCQkkb3V0IC49IHBhcnNlKCRGb3JtKTsKCQkkb3V0 IC49ICc8L2Zvcm0+Jy5uOwoKCQl1bnNldCgkbWVtX21vZF9pbmZvKTsKCQl1bnNldCgkbWVt X21vZGFydGljbGVfaW5mbyk7Cgl9CgoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIG1vZF9j dXN0b21faW5wdXQoJGF0dHMpCnsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9m dW5jdGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9 JyA9PiAnbWVtX2Zvcm1fdGV4dCcpKSwgRV9VU0VSX05PVElDRSk7CglnbG9iYWwgJG1lbV9t b2RhcnRpY2xlX2luZm87CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdpZCcJPT4JJzEnLAoJ CSdpc2l6ZScJPT4JMjUsCgkJJ2NsYXNzJwk9PglfX0ZVTkNUSU9OX18KCSksJGF0dHMpKTsK CSR0aXRsZSA9ICR2YWx1ZSA9ICRtZW1fbW9kYXJ0aWNsZV9pbmZvWyJjdXN0b21feyRpZH0i XTsKCXJldHVybiBmSW5wdXQoJ3RleHQnLCJjdXN0b21feyRpZH0iLCR2YWx1ZSwkY2xhc3Ms ImN1c3RvbV97JGlkfSIsJycsJGlzaXplLCcnLCJjdXN0b21lci17JGlkfSIpOwp9CmZ1bmN0 aW9uIG1vZF90aXRsZV9pbnB1dCgkYXR0cykKewoJdHJpZ2dlcl9lcnJvcihnVHh0KCdkZXBy ZWNhdGVkX2Z1bmN0aW9uX3dpdGgnLCBhcnJheSgne25hbWV9JyA9PiBfX0ZVTkNUSU9OX18s ICd7d2l0aH0nID0+ICdtZW1fZm9ybV90ZXh0JykpLCBFX1VTRVJfTk9USUNFKTsKCWdsb2Jh bCAkbWVtX21vZF9pbmZvLCRtZW1fbW9kYXJ0aWNsZV9pbmZvOwoJZXh0cmFjdChsQXR0cyhh cnJheSgKCQknaXNpemUnCT0+CTI1LAoJCSdjbGFzcycJPT4JX19GVU5DVElPTl9fCgkpLCRh dHRzKSk7CgkkdGl0bGUgPSAkdmFsdWUgPSAkbWVtX21vZGFydGljbGVfaW5mb1sidGl0bGUi XTsKCXJldHVybiBmSW5wdXQoJ3RleHQnLCJ0aXRsZSIsJHZhbHVlLCRjbGFzcywndGl0bGUn LCcnLCRpc2l6ZSk7Cn0KZnVuY3Rpb24gbW9kX2ltYWdlX2lucHV0KCRhdHRzKQp7Cgl0cmln Z2VyX2Vycm9yKGdUeHQoJ2RlcHJlY2F0ZWRfZnVuY3Rpb25fd2l0aCcsIGFycmF5KCd7bmFt ZX0nID0+IF9fRlVOQ1RJT05fXywgJ3t3aXRofScgPT4gJ21lbV9mb3JtX3RleHQnKSksIEVf VVNFUl9OT1RJQ0UpOwoJZ2xvYmFsICRtZW1fbW9kX2luZm8sJG1lbV9tb2RhcnRpY2xlX2lu Zm87CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdpc2l6ZScJPT4JMjUsCgkJJ2NsYXNzJwk9 PglfX0ZVTkNUSU9OX18KCSksJGF0dHMpKTsKCSR0aXRsZSA9ICR2YWx1ZSA9ICRtZW1fbW9k YXJ0aWNsZV9pbmZvWyJpbWFnZSJdOwoJcmV0dXJuIGZJbnB1dCgndGV4dCcsImltYWdlIiwk dmFsdWUsJGNsYXNzLCdpbWFnZScsJycsJGlzaXplKTsKfQpmdW5jdGlvbiBtb2Rfa2V5d29y ZHNfaW5wdXQoJGF0dHMpCnsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5j dGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9JyA9 PiAnbWVtX2Zvcm1fdGV4dCcpKSwgRV9VU0VSX05PVElDRSk7CglnbG9iYWwgJG1lbV9tb2Rf aW5mbywkbWVtX21vZGFydGljbGVfaW5mbzsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2lz aXplJwk9PgkyNSwKCQknc3R5bGUnCT0+CScnLAoJCSdjbGFzcycJPT4JX19GVU5DVElPTl9f CgkpLCRhdHRzKSk7CgkkdGl0bGUgPSAkdmFsdWUgPSAkbWVtX21vZGFydGljbGVfaW5mb1si a2V5d29yZHMiXTsKCXJldHVybiAnPHRleHRhcmVhIG5hbWU9ImtleXdvcmRzIicuKCFlbXB0 eSgkc3R5bGUpPycgc3R5bGU9IicuJHN0eWxlLiciJzonJykuCgkJCSghZW1wdHkoJGNsYXNz KT8nIGNsYXNzPSInLiRjbGFzcy4nIic6JycpLic+Jy4KCQkJaHRtbHNwZWNpYWxjaGFycygk bWVtX21vZGFydGljbGVfaW5mb1sna2V5d29yZHMnXSkuJzwvdGV4dGFyZWE+JzsKCn0KZnVu Y3Rpb24gbW9kX2JvZHlfaW5wdXQoJGF0dHMpCnsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVw cmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9f LCAne3dpdGh9JyA9PiAnbWVtX2Zvcm1fdGV4dGFyZWEnKSksIEVfVVNFUl9OT1RJQ0UpOwoJ Z2xvYmFsICRtZW1fbW9kX2luZm8sJG1lbV9tb2RhcnRpY2xlX2luZm87CglleHRyYWN0KGxB dHRzKGFycmF5KAoJCSdzdHlsZScJPT4JJycsCgkJJ2NsYXNzJwk9PglfX0ZVTkNUSU9OX18K CSksJGF0dHMpKTsKCXJldHVybiAnPHRleHRhcmVhIG5hbWU9ImJvZHkiJy4oIWVtcHR5KCRz dHlsZSk/JyBzdHlsZT0iJy4kc3R5bGUuJyInOicnKS4KCQkJKCFlbXB0eSgkY2xhc3MpPycg Y2xhc3M9IicuJGNsYXNzLiciJzonJykuJz4nLgoJCQlodG1sc3BlY2lhbGNoYXJzKCRtZW1f bW9kYXJ0aWNsZV9pbmZvWydib2R5J10pLic8L3RleHRhcmVhPic7Cn0KZnVuY3Rpb24gbW9k X2JvZHlfaHRtbF9pbnB1dCgkYXR0cykKewoJdHJpZ2dlcl9lcnJvcihnVHh0KCdkZXByZWNh dGVkX2Z1bmN0aW9uX3dpdGgnLCBhcnJheSgne25hbWV9JyA9PiBfX0ZVTkNUSU9OX18sICd7 d2l0aH0nID0+ICdtZW1fZm9ybV90ZXh0YXJlYScpKSwgRV9VU0VSX05PVElDRSk7CglnbG9i YWwgJG1lbV9tb2RfaW5mbywkbWVtX21vZGFydGljbGVfaW5mbzsKCWV4dHJhY3QobEF0dHMo YXJyYXkoCgkJJ3N0eWxlJwk9PgknJywKCQknY2xhc3MnCT0+CV9fRlVOQ1RJT05fXwoJKSwk YXR0cykpOwoJcmV0dXJuICc8dGV4dGFyZWEgbmFtZT0iYm9keV9odG1sIicuKCFlbXB0eSgk c3R5bGUpPycgc3R5bGU9IicuJHN0eWxlLiciJzonJykuCgkJCSghZW1wdHkoJGNsYXNzKT8n IGNsYXNzPSInLiRjbGFzcy4nIic6JycpLic+Jy4KCQkJaHRtbHNwZWNpYWxjaGFycygkbWVt X21vZGFydGljbGVfaW5mb1snYm9keV9odG1sJ10pLic8L3RleHRhcmVhPic7Cn0KZnVuY3Rp b24gbW9kX2V4Y2VycHRfaW5wdXQoJGF0dHMpCnsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVw cmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9f LCAne3dpdGh9JyA9PiAnbWVtX2Zvcm1fdGV4dGFyZWEnKSksIEVfVVNFUl9OT1RJQ0UpOwoJ Z2xvYmFsICRtZW1fbW9kX2luZm8sJG1lbV9tb2RhcnRpY2xlX2luZm87CglleHRyYWN0KGxB dHRzKGFycmF5KAoJCSdzdHlsZScJPT4JJycsCgkJJ2NsYXNzJwk9PglfX0ZVTkNUSU9OX18K CSksJGF0dHMpKTsKCXJldHVybiAnPHRleHRhcmVhIG5hbWU9ImV4Y2VycHQiJy4oIWVtcHR5 KCRzdHlsZSk/JyBzdHlsZT0iJy4kc3R5bGUuJyInOicnKS4KCQkJKCFlbXB0eSgkY2xhc3Mp PycgY2xhc3M9IicuJGNsYXNzLiciJzonJykuJz4nLgoJCQlodG1sc3BlY2lhbGNoYXJzKCRt ZW1fbW9kYXJ0aWNsZV9pbmZvWydleGNlcnB0J10pLic8L3RleHRhcmVhPic7Cn0KZnVuY3Rp b24gbW9kX2V4Y2VycHRfaHRtbF9pbnB1dCgkYXR0cykKewoJdHJpZ2dlcl9lcnJvcihnVHh0 KCdkZXByZWNhdGVkX2Z1bmN0aW9uX3dpdGgnLCBhcnJheSgne25hbWV9JyA9PiBfX0ZVTkNU SU9OX18sICd7d2l0aH0nID0+ICdtZW1fZm9ybV90ZXh0YXJlYScpKSwgRV9VU0VSX05PVElD RSk7CglnbG9iYWwgJG1lbV9tb2RfaW5mbywkbWVtX21vZGFydGljbGVfaW5mbzsKCWV4dHJh Y3QobEF0dHMoYXJyYXkoCgkJJ3N0eWxlJwk9PgknJywKCQknY2xhc3MnCT0+CV9fRlVOQ1RJ T05fXwoJKSwkYXR0cykpOwoJcmV0dXJuICc8dGV4dGFyZWEgbmFtZT0iZXhjZXJwdF9odG1s IicuKCFlbXB0eSgkc3R5bGUpPycgc3R5bGU9IicuJHN0eWxlLiciJzonJykuCgkJCSghZW1w dHkoJGNsYXNzKT8nIGNsYXNzPSInLiRjbGFzcy4nIic6JycpLic+Jy4KCQkJaHRtbHNwZWNp YWxjaGFycygkbWVtX21vZGFydGljbGVfaW5mb1snZXhjZXJwdF9odG1sJ10pLic8L3RleHRh cmVhPic7Cn0KCi8qKiBBcnRpY2xlIHByZXNlbnRlciBmb3IgYXJ0aWNsZSogbW9kZXJhdGlv biB0eXBlcyAqLwpmdW5jdGlvbiBtZW1fYXJ0aWNsZV9wcmVzZW50ZXIoJHR5cGUsJGRhdGEp CnsKCWdsb2JhbCAkbWVtX2FydGljbGVfZGVsZXRlX3ZhcnMsICRwcmVmczsKCgkkb3V0ID0g Jyc7CgoJaWYgKCFpc19hcnJheSgkZGF0YSkpCgl7CgkJLy8gbm8gZGF0YSwgbm8gZm9ybQoJ CXJldHVybiAnJzsKCX0KCglleHRyYWN0KGdldF9wcmVmcygpKTsKCgkvLyBhcnRpY2xlIGFu ZCBlZGl0IGFjdGlvbnMKCWlmICgkdHlwZSA9PSAnYXJ0aWNsZScgfHwgJHR5cGUgPT0gJ2Fy dGljbGUtZWRpdCcpCgl7CgkJLy8gZGVmYXVsdHMKCQlleHRyYWN0KEBsQXR0cyhhcnJheSgK CQkJJ3VzZXInCQk9PiAnJywKCQkJJ2VtYWlsJwkJPT4gJycsCgkJCSd0aXRsZScJCT0+ICcn LAoJCQkndGl0bGVfaHRtbCcJPT4gJycsCgkJCSdib2R5JwkJPT4gJycsCgkJCSdib2R5X2h0 bWwnCT0+ICcnLAoJCQknZXhjZXJwdCcJPT4gJycsCgkJCSdleGNlcnB0X2h0bWwnCT0+ICcn LAoJCQknaW1hZ2UnCQk9PiAnJywKCQkJJ2tleXdvcmRzJwk9PiAnJywKCQkJJ3N0YXR1cycJ PT4gJycsCgkJCSdzZWN0aW9uJwk9PiBnZXREZWZhdWx0U2VjdGlvbigpLAoJCQknY2F0ZWdv cnkxJwk9PiAnJywKCQkJJ2NhdGVnb3J5MicJPT4gJycsCgkJCSdhbm5vdGF0ZScJPT4gKCRj b21tZW50c19vbl9kZWZhdWx0PT0xID8gMSA6IDApLAoJCQknYW5ub3RhdGVpbnZpdGUnCT0+ ICRjb21tZW50c19kZWZhdWx0X2ludml0ZSwKCQkJJ292ZXJyaWRlX2Zvcm0nCT0+ICcnLAoJ CQknY3VzdG9tXzEnCT0+ICcnLAoJCQknY3VzdG9tXzInCT0+ICcnLAoJCQknY3VzdG9tXzMn CT0+ICcnLAoJCQknY3VzdG9tXzQnCT0+ICcnLAoJCQknY3VzdG9tXzUnCT0+ICcnLAoJCQkn Y3VzdG9tXzYnCT0+ICcnLAoJCQknY3VzdG9tXzcnCT0+ICcnLAoJCQknY3VzdG9tXzgnCT0+ ICcnLAoJCQknY3VzdG9tXzknCT0+ICcnLAoJCQknY3VzdG9tXzEwJwk9PiAnJywKCQkJJ2N1 c3RvbV8xMScJPT4gJycsCgkJCSdjdXN0b21fMTInCT0+ICcnLAoJCQknY3VzdG9tXzEzJwk9 PiAnJywKCQkJJ2N1c3RvbV8xNCcJPT4gJycsCgkJCSdjdXN0b21fMTUnCT0+ICcnLAoJCQkn Y3VzdG9tXzE2Jwk9PiAnJywKCQkJJ2N1c3RvbV8xNycJPT4gJycsCgkJCSdjdXN0b21fMTgn CT0+ICcnLAoJCQknY3VzdG9tXzE5Jwk9PiAnJywKCQkJJ2N1c3RvbV8yMCcJPT4gJycsCgkJ CSdhcnRpY2xlaWQnCT0+IDAKCQkpLCRkYXRhKSk7CgoJCS8vIHBvcHVsYXRlIHNlY3Rpb24g c2VsZWN0CgkJJHJzID0gc2FmZV9yb3dzKCJuYW1lLCB0aXRsZSIsICJ0eHBfc2VjdGlvbiIs ICJuYW1lIT0nZGVmYXVsdCciKTsKCQkkc2VjdGlvbl92YWx1ZXMgPSBhcnJheSgpOwoJCWZv cmVhY2goJHJzIGFzICRyKQoJCXsKCQkJJHNlY3Rpb25fdmFsdWVzWyRyWyduYW1lJ11dID0g JHJbJ3RpdGxlJ107CgkJfQoJCSRzZWN0aW9uX3NlbGVjdCA9IHNlbGVjdElucHV0KCJzZWN0 aW9uIiwgJHNlY3Rpb25fdmFsdWVzLCAkc2VjdGlvbik7CgoJCS8vIHNob3cgYXJ0aWNsZSBl ZGl0IHRhYmxlCgkJJG91dCA9IHN0YXJ0VGFibGUoICdlZGl0JyApIC4KCQkJCXRyKCBmTGFi ZWxDZWxsKCAndGl0bGUnICkgLiBmSW5wdXRDZWxsKCAndGl0bGUnLCAkdGl0bGUsIDEsIDMw ICkpIC4KCQkJCShlbXB0eSgkc2VjdGlvbl9zZWxlY3QpID8gJycgOiB0ciggZkxhYmVsQ2Vs bCggJ3NlY3Rpb24nICkgLiB0ZGEoICRzZWN0aW9uX3NlbGVjdCApICkpIC4KCQkJCXRyKCBm TGFiZWxDZWxsKCAnY2F0ZWdvcml6ZScgKSAuIHRkYSggbWVtX2NhdGVnb3J5X3BvcHVwKCJj YXRlZ29yeTEiLCAkY2F0ZWdvcnkxKSAuYnIuIG1lbV9jYXRlZ29yeV9wb3B1cCgiY2F0ZWdv cnkyIiwgJGNhdGVnb3J5MikgKSApIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnZXhjZXJwdCcg KSAuIHRkYSggJzx0ZXh0YXJlYSBuYW1lPSJleGNlcnB0IiBjb2xzPSI0MCIgcm93cz0iNCI+ Jy4kZXhjZXJwdC4nPC90ZXh0YXJlYT4nLCAnIHZhbGlnbj0idG9wIicgKSApIC4KCQkJCXRy KCBmTGFiZWxDZWxsKCAnYm9keScgKSAuIHRkYSggJzx0ZXh0YXJlYSBuYW1lPSJib2R5IiBj b2xzPSI0MCIgcm93cz0iNyI+Jy4kYm9keS4nPC90ZXh0YXJlYT4nLCAnIHZhbGlnbj0idG9w IicgKSApIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnc3RhdHVzJyApIC4gdGRhKCBzZWxlY3RJ bnB1dCgnc3RhdHVzJywgYXJyYXkoMT0+J0RyYWZ0JywyPT4nSGlkZGVuJywzPT4nUGVuZGlu ZycsND0+J0xpdmUnLDU9PidTdGlja3knKSw0KSApICkgLgoJCQkJdHIoIGZMYWJlbENlbGwo ICdpbWFnZScgKSAuIGZJbnB1dENlbGwoICdpbWFnZScsICRpbWFnZSwgMSwgMzAgKSkgLgoJ CQkJdHIoIGZMYWJlbENlbGwoICdhbm5vdGF0ZScgKSAuIHRkYSggeWVzbm9SYWRpbygnYW5u b3RhdGUnLCRhbm5vdGF0ZSkgKSApIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAnYW5ub3RhdGVp bnZpdGUnICkgLiBmSW5wdXRDZWxsKCAnYW5ub3RhdGVpbnZpdGUnLCAkYW5ub3RhdGVpbnZp dGUsIDEsIDMwICkpIC4KCQkJCXRyKCBmTGFiZWxDZWxsKCAna2V5d29yZHMnICkgLiBmSW5w dXRDZWxsKCAna2V5d29yZHMnLCAka2V5d29yZHMsIDEsIDMwICkpIC4KCQkJCXRyKCBmTGFi ZWxDZWxsKCAnb3ZlcnJpZGVfZGVmYXVsdF9mb3JtJywgJycsICdvdmVycmlkZS1mb3JtJyAp IC4gdGRhKGZvcm1fcG9wKCRvdmVycmlkZV9mb3JtLCdvdmVycmlkZS1mb3JtJykucG9wSGVs cCgnb3ZlcnJpZGVfZm9ybScpKSkgLgoJCQkJdHIoIGZMYWJlbENlbGwoICdhdXRob3InICkg LiBmSW5wdXRDZWxsKCAndXNlcicsICR1c2VyLCAxLCAzMCApKTsKCgkJJGN1c3RvbV9maWVs ZHMgPSBzYWZlX3Jvd3MoJ25hbWUsIHZhbCwgaHRtbCcsICd0eHBfcHJlZnMnLCAibmFtZSBs aWtlICdjdXN0b21fJV9zZXQnIGFuZCBldmVudCA9ICdjdXN0b20nIik7CgoJCWlmICgkY3Vz dG9tX2ZpZWxkcykKCQl7CgkJCWZvcmVhY2goJGN1c3RvbV9maWVsZHMgYXMgJGZpZWxkKQoJ CQl7CgkJCQlleHRyYWN0KCRmaWVsZCk7CgoJCQkJJHRyID0gZkxhYmVsQ2VsbCggJHZhbCAp OwoKCQkJCSRrID0gaW1wbG9kZSgnXycsIGV4cGxvZGUoJ18nLCAkbmFtZSwgLTEpKTsKCgkJ CQlzd2l0Y2ggKCRodG1sKQoJCQkJewoJCQkJCWNhc2UgJ3NlbGVjdCc6CgkJCQkJCS8vIGdl dCB2YWx1ZXMKCQkJCQkJJGl0ZW1zID0gc2FmZV9jb2x1bW4oJ3ZhbHVlJywgJ2N1c3RvbV9m aWVsZHMnLCAibmFtZSA9ICd7JG5hbWV9JyIpOwoKCQkJCQkJJHRyIC49IHRkYSgKCQkJCQkJ CXNlbGVjdElucHV0KCRrLCAkaXRlbXMsIEAkJGspLAoJCQkJCQkJJyBjbGFzcz0ibm9saW5l IicKCQkJCQkJKTsKCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoKCQkJCQkJJHRyIC49IGZJ bnB1dENlbGwoICRrLCBAJCRrLCAxLCAzMCApOwoJCQkJCQlicmVhazsKCQkJCX0KCgkJCQkk b3V0IC49IHRyKCR0cik7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJLy8gYWRkIGN1c3RvbSBm aWVsZCBmb3JtcwoJCQlmb3IoJGk9MTskaTw9MjA7JGkrKykgewoJCQkJJGsgPSAiY3VzdG9t X3skaX0iOwoJCQkJJGtzZXQgPSAiY3VzdG9tX3skaX1fc2V0IjsKCQkJCWlmIChpc3NldCgk JGtzZXQpIGFuZCAhZW1wdHkoJCRrc2V0KSkKCQkJCXsKCQkJCQkkb3V0IC49IHRyKAlmTGFi ZWxDZWxsKCAkJGtzZXQsICcnLCAiY3VzdG9tLXskaX0iICkgLgoJCQkJCQkJCWZJbnB1dENl bGwoICRrLCAkJGssIDEsIDMwLCcnLCAiY3VzdG9tLXskaX0iICkgKTsKCQkJCX0KCQkJfQoJ CX0KCQkkb3V0IC49IGVuZFRhYmxlKCk7CgoJCS8vIGhpZGRlbiBmb3JtIGZpZWxkcwoJCSRv dXQgLj0gaElucHV0KCdlbWFpbCcsJGVtYWlsKTsKCQkkb3V0IC49IGhJbnB1dCgnZXhjZXJw dF9odG1sJywkZXhjZXJwdF9odG1sKTsKCQkkb3V0IC49IGhJbnB1dCgnYm9keV9odG1sJywk Ym9keV9odG1sKTsKCQkkb3V0IC49IGhJbnB1dCgndGl0bGVfaHRtbCcsJHRpdGxlX2h0bWwp OwoKCQlpZiAoJHR5cGUgPT0gJ2FydGljbGUtZWRpdCcpCgkJewoJCQkkb3V0IC49IGhJbnB1 dCgnYXJ0aWNsZWlkJywgJGFydGljbGVpZCk7CgkJfQoKCX0KCWVsc2UgaWYgKCR0eXBlPT0n YXJ0aWNsZS1kZWxldGUnKQoJewoJCWV4dHJhY3QoJGRhdGEpOwoKCQkvLyBwYXNzIHRocm91 Z2ggZGF0YQoJCWZvcmVhY2ggKCRtZW1fYXJ0aWNsZV9kZWxldGVfdmFycyBhcyAkdikKCQl7 CgkJCSRvdXQgLj0gQGhJbnB1dCgkdiwgJCR2KTsKCQl9CgoJCS8vIGxpbmsgdG8gYXJ0aWNs ZSBvbiB3cml0ZSB0YWIKCQkkb3V0IC49ICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRl cjttYXJnaW4tYm90dG9tOjFlbTsiPlRoZSB1c2VyICInLiBodG1sc3BlY2lhbGNoYXJzKCR1 c2VyKSAuJyIgaGFzIHJlcXVlc3RlZCB0aGUgZGVsZXRpb24gb2YgYXJ0aWNsZSA8YSBocmVm PSIuL2luZGV4LnBocD9ldmVudD1hcnRpY2xlJmFtcDtzdGVwPWVkaXQmYW1wO0lEPScKCQkJ CS4gJGFydGljbGVpZC4nIj4jJy4gJGFydGljbGVpZCAuJzogIicuICR0aXRsZSAuJyI8L2E+ LjwvZGl2Pic7Cgl9CgoJcmV0dXJuICRvdXQ7Cn0KCi8qKiBNb2RlcmF0aW9uIEFwcHJvdmVy LgogKiBhcnRpY2xlLCBhcnRpY2xlLWVkaXQgPSBjcmVhdGUvdXBkYXRlIGFydGljbGUKICog YXJ0aWNsZS1kZWxldGUgPSBkZWxldGUgYXJ0aWNsZQogKiBSZXR1cm5zICcnIG9uIHN1Y2Nl c3MsIG90aGVyd2lzZSBlcnJvciBzdHJpbmcuCiAqLwpmdW5jdGlvbiBtZW1fYXJ0aWNsZV9h cHByb3ZlcigkdHlwZSwgJGRhdGEpCnsKCWdsb2JhbCAkdHhwY2ZnLCAkdHhwX3VzZXIsICRw cmVmczsKCglpZiAoIWlzX2FycmF5KCRkYXRhKSkKCXsKCQkvLyBjYW5ub3QgYXBwcm92ZQoJ CXJldHVybiAnaW52YWxpZCBkYXRhJzsKCX0KCgkkZGF0YSA9IGFycmF5X21lcmdlKGFycmF5 KAoJCSdhbm5vdGF0ZWludml0ZScJPT4gJycsCgkJJ2ltYWdlJwk9PiAnJywKCQknc3RhdHVz Jwk9PiA0LAoJCSdjYXRlZ29yeTEnCT0+ICcnLAoJCSdjYXRlZ29yeTInCT0+ICcnLAoJCSdv dmVycmlkZV9mb3JtJwk9PiAnJywKCQkna2V5d29yZHMnCT0+ICcnLAoJCSdjdXN0b21fMScJ PT4gJycsCgkJJ2N1c3RvbV8yJwk9PiAnJywKCQknY3VzdG9tXzMnCT0+ICcnLAoJCSdjdXN0 b21fNCcJPT4gJycsCgkJJ2N1c3RvbV81Jwk9PiAnJywKCQknY3VzdG9tXzYnCT0+ICcnLAoJ CSdjdXN0b21fNycJPT4gJycsCgkJJ2N1c3RvbV84Jwk9PiAnJywKCQknY3VzdG9tXzknCT0+ ICcnLAoJCSdjdXN0b21fMTAnCT0+ICcnLAoJCSd1cmxfdGl0bGUnCT0+ICcnLAoJCSd0ZXh0 aWxlX2JvZHknCT0+ICcxJywKCQkndGV4dGlsZV9leGNlcnB0Jwk9PiAnMScsCgkpLCAkZGF0 YSk7CgoJaWYgKCR0eXBlPT0nYXJ0aWNsZScpCgl7CgkJJGluY29taW5nID0gJGRhdGE7CgoJ CWV4dHJhY3QoZ2V0X3ByZWZzKCkpOwoKCQkkbWVzc2FnZT0nJzsKCgkJLy8gcmVtYXAgZmll bGQgdmFsdWVzCgkJJGluY29taW5nWydTdGF0dXMnXSA9ICRpbmNvbWluZ1snc3RhdHVzJ107 CgkJJGluY29taW5nWydUaXRsZSddID0gJGluY29taW5nWyd0aXRsZSddOwoJCSRpbmNvbWlu Z1snQm9keSddID0gJGluY29taW5nWydib2R5J107CgkJJGluY29taW5nWydFeGNlcnB0J10g PSAkaW5jb21pbmdbJ2V4Y2VycHQnXTsKCQkkaW5jb21pbmdbJ3B1Ymxpc2hfbm93J10gPSAx OwoKCQkkaW5jb21pbmcgPSB0ZXh0aWxlX21haW5fZmllbGRzKCRpbmNvbWluZywgJHVzZV90 ZXh0aWxlKTsKCgkJZXh0cmFjdChkb1NsYXNoKCRpbmNvbWluZykpOwoKCQlpZiAoIEAkbWVt X21vZF9hcnRpY2xlX3N1Ym1pdF93aXRoX21vZGVyYXRvcl9pZCB8fCAhaXNzZXQoJHVzZXIp ICkgewoJCQkkdXNlciA9ICR0eHBfdXNlcjsKCQl9CgoJCS8vIGFydGljbGUgdGltZQoJCWlm ICgkcHVibGlzaF9ub3c9PTEpCgkJewoJCQkkd2hlbiA9ICdub3coKSc7CgkJfQoJCWVsc2UK CQl7CgkJCSR3aGVuID0gc3RydG90aW1lKCR5ZWFyLictJy4kbW9udGguJy0nLiRkYXkuJyAn LiRob3VyLic6Jy4kbWludXRlLiI6MDAiKS10el9vZmZzZXQoKTsKCQkJJHdoZW4gPSAiZnJv bV91bml4dGltZSgkd2hlbikiOwoJCX0KCgkJaWYgKCRUaXRsZSBvciAkQm9keSBvciAkRXhj ZXJwdCkKCQl7CgkJCS8vIGVuZm9yY2UgYXJ0aWNsZSBwdWJsaXNoaW5nIHByaXZzCgkJCWlm ICghaGFzX3ByaXZzKCdhcnRpY2xlLnB1Ymxpc2gnKSAmJiAkU3RhdHVzPj00KSAkU3RhdHVz ID0gMzsKCQkJaWYgKEBlbXB0eSgkdXJsX3RpdGxlKSkgJHVybF90aXRsZSA9IHN0cmlwU3Bh Y2UoJFRpdGxlX3BsYWluLCAxKTsKCQkJaWYgKCEkYW5ub3RhdGUpIHsKCQkJCSRhbm5vdGF0 ZSA9ICRjb21tZW50c19vbl9kZWZhdWx0OwoJCQl9CgoJCQlpZiAoZW1wdHkoJGFubm90YXRl aW52aXRlKSkgJGFubm90YXRlaW52aXRlID0gJGNvbW1lbnRzX2RlZmF1bHRfaW52aXRlOwoK CQkJJHVzZV90ZXh0aWxlID0gJHByZWZzWyd1c2VfdGV4dGlsZSddOwoKCQkJaWYgKGVtcHR5 KCR0ZXh0aWxlX2V4Y2VycHQpKQoJCQl7CgkJCQkkdGV4dGlsZV9leGNlcnB0ID0gIWVtcHR5 KCR1c2VfdGV4dGlsZSkgPyAkdXNlX3RleHRpbGUgOiAnMCc7CgkJCX0KCQkJaWYgKGVtcHR5 KCR0ZXh0aWxlX2JvZHkpKQoJCQl7CgkJCQkkdGV4dGlsZV9ib2R5ID0gIWVtcHR5KCR1c2Vf dGV4dGlsZSkgPyAkdXNlX3RleHRpbGUgOiAnMCc7CgkJCX0KCgkJCSRycyA9IHNhZmVfaW5z ZXJ0KAoJCQkgICAidGV4dHBhdHRlcm4iLAoJCQkgICAiVGl0bGUgICAgICAgICAgID0gJyRU aXRsZScsCgkJCQlCb2R5ICAgICAgICAgICAgPSAnJEJvZHknLAoJCQkJQm9keV9odG1sICAg ICAgID0gJyRCb2R5X2h0bWwnLAoJCQkJRXhjZXJwdCAgICAgICAgID0gJyRFeGNlcnB0JywK CQkJCUV4Y2VycHRfaHRtbCAgICA9ICckRXhjZXJwdF9odG1sJywKCQkJCUltYWdlICAgICAg ICAgICA9ICckaW1hZ2UnLAoJCQkJS2V5d29yZHMgICAgICAgID0gJyRrZXl3b3JkcycsCgkJ CQlTdGF0dXMgICAgICAgICAgPSAnJFN0YXR1cycsCgkJCQlQb3N0ZWQgICAgICAgICAgPSAk d2hlbiwKCQkJCUxhc3RNb2QgICAgICAgICA9IG5vdygpLAoJCQkJQXV0aG9ySUQgICAgICAg ID0gJyR1c2VyJywKCQkJCVNlY3Rpb24gICAgICAgICA9ICckc2VjdGlvbicsCgkJCQlDYXRl Z29yeTEgICAgICAgPSAnJGNhdGVnb3J5MScsCgkJCQlDYXRlZ29yeTIgICAgICAgPSAnJGNh dGVnb3J5MicsCgkJCQl0ZXh0aWxlX2JvZHkgICAgPSAgJHRleHRpbGVfYm9keSwKCQkJCXRl eHRpbGVfZXhjZXJwdCA9ICAkdGV4dGlsZV9leGNlcnB0LAoJCQkJQW5ub3RhdGUgICAgICAg ID0gJyRhbm5vdGF0ZScsCgkJCQlvdmVycmlkZV9mb3JtICAgPSAnJG92ZXJyaWRlX2Zvcm0n LAoJCQkJdXJsX3RpdGxlICAgICAgID0gJyR1cmxfdGl0bGUnLAoJCQkJQW5ub3RhdGVJbnZp dGUgID0gJyRhbm5vdGF0ZWludml0ZScsCgkJCQljdXN0b21fMSAgICAgICAgPSAnJGN1c3Rv bV8xJywKCQkJCWN1c3RvbV8yICAgICAgICA9ICckY3VzdG9tXzInLAoJCQkJY3VzdG9tXzMg ICAgICAgID0gJyRjdXN0b21fMycsCgkJCQljdXN0b21fNCAgICAgICAgPSAnJGN1c3RvbV80 JywKCQkJCWN1c3RvbV81ICAgICAgICA9ICckY3VzdG9tXzUnLAoJCQkJY3VzdG9tXzYgICAg ICAgID0gJyRjdXN0b21fNicsCgkJCQljdXN0b21fNyAgICAgICAgPSAnJGN1c3RvbV83JywK CQkJCWN1c3RvbV84ICAgICAgICA9ICckY3VzdG9tXzgnLAoJCQkJY3VzdG9tXzkgICAgICAg ID0gJyRjdXN0b21fOScsCgkJCQljdXN0b21fMTAgICAgICAgPSAnJGN1c3RvbV8xMCcsCgkJ CQl1aWQJCQkJPSAnIi5tZDUodW5pcWlkKHJhbmQoKSx0cnVlKSkuIicsCgkJCQlmZWVkX3Rp bWUJCT0gbm93KCkiCgkJCSk7CgoJCQlpZiAoJHJzICE9PSBmYWxzZSkKCQkJewoJCQkJJEdM T0JBTFNbJ0lEJ10gPSBteXNxbF9pbnNlcnRfaWQoKTsKCgkJCQkvLyBwaW5nIG9uIHB1Ymxp c2gKCQkJCWlmICgkU3RhdHVzPj00KQoJCQkJewoJCQkJCWRvX3BpbmdzKCk7CgoJCQkJCXNh ZmVfdXBkYXRlKCJ0eHBfcHJlZnMiLCAidmFsID0gbm93KCkiLCAibmFtZSA9ICdsYXN0bW9k JyIpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuICdlcnJvciAoJy5teXNx bF9lcnJubygpLicpIC0gJy4gbXlzcWxfZXJyb3IoKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJ CQlyZXR1cm4gJ21pc3NpbmcgdGl0bGUsIGJvZHksIGFuZCBleGNlcnB0JzsKCQl9Cgl9Cgll bHNlIGlmICgkdHlwZT09J2FydGljbGUtZWRpdCcpCgl7CgkJJGluY29taW5nID0gJGRhdGE7 CgoJCWlmICghaXNzZXQoJGluY29taW5nWydhcnRpY2xlaWQnXSkgfHwgZW1wdHkoJGluY29t aW5nWydhcnRpY2xlaWQnXSkpCgkJewoJCQlyZXR1cm4gJ0FydGljbGUgaWQgbm90IHByb3Zp ZGVkLic7CgkJfQoKCQlleHRyYWN0KGdldF9wcmVmcygpKTsKCgkJJG1lc3NhZ2U9Jyc7CgoJ CS8vIHJlbWFwIGZpZWxkIHZhbHVlcwoJCSRpbmNvbWluZ1snU3RhdHVzJ10gPSAkaW5jb21p bmdbJ3N0YXR1cyddOwoJCSRpbmNvbWluZ1snVGl0bGUnXSA9ICRpbmNvbWluZ1sndGl0bGUn XTsKCQkkaW5jb21pbmdbJ0JvZHknXSA9ICRpbmNvbWluZ1snYm9keSddOwoJCSRpbmNvbWlu Z1snRXhjZXJwdCddID0gJGluY29taW5nWydleGNlcnB0J107CgkJJGluY29taW5nWydJbWFn ZSddID0gJGluY29taW5nWydpbWFnZSddOwoKCQkkb2xkQXJ0aWNsZSA9IHNhZmVfcm93KCcq JywndGV4dHBhdHRlcm4nLCdJRCA9ICcuKGludCkkaW5jb21pbmdbJ2FydGljbGVpZCddKTsK CgkJaWYgKCRvbGRBcnRpY2xlID09PSBmYWxzZSkKCQl7CgkJCXJldHVybiAnQXJ0aWNsZSAn LiAkaW5jb21pbmdbJ2FydGljbGVpZCddLicgbm90IGZvdW5kLic7CgkJfQoKCQkvLyBhdXRo b3JpemUKCQlpZiAoISAoICAgICgkb2xkQXJ0aWNsZVsnU3RhdHVzJ10gPj0gNCBhbmQgaGFz X3ByaXZzKCdhcnRpY2xlLmVkaXQucHVibGlzaGVkJykpCgkJCQlvciAoJG9sZEFydGljbGVb J1N0YXR1cyddID49IDQgYW5kICRpbmNvbWluZ1snQXV0aG9ySUQnXT09JHR4cF91c2VyIGFu ZCBoYXNfcHJpdnMoJ2FydGljbGUuZWRpdC5vd24ucHVibGlzaGVkJykpCgkJICAgIAlvciAo JG9sZEFydGljbGVbJ1N0YXR1cyddIDwgNCBhbmQgaGFzX3ByaXZzKCdhcnRpY2xlLmVkaXQn KSkKCQkJCW9yICgkb2xkQXJ0aWNsZVsnU3RhdHVzJ10gPCA0IGFuZCAkaW5jb21pbmdbJ0F1 dGhvcklEJ109PSR0eHBfdXNlciBhbmQgaGFzX3ByaXZzKCdhcnRpY2xlLmVkaXQub3duJykp KSkKCQl7CgkJCQkvLyBOb3QgYWxsb3dlZCwgeW91IHNpbGx5IHJhYmJpdCwgeW91IHNob3Vs ZG4ndCBldmVuIGJlIGhlcmUuCgkJCQkvLyBTaG93IGRlZmF1bHQgZWRpdGluZyBzY3JlZW4u CgkJCXJldHVybiAnQWNjZXNzIGRlbmllZC4nOwoJCX0KCgkJJGluY29taW5nID0gdGV4dGls ZV9tYWluX2ZpZWxkcygkaW5jb21pbmcsICR1c2VfdGV4dGlsZSk7CgoJCWV4dHJhY3QoZG9T bGFzaCgkaW5jb21pbmcpKTsKCQkvLyB1c2UgZXhpc3RpbmcgZm9yIGRlZmF1bHRzCgkJZXh0 cmFjdChkb1NsYXNoKCRvbGRBcnRpY2xlKSwgRVhUUl9TS0lQKTsKCgkJJFN0YXR1cyA9IGFz c2VydF9pbnQoJFN0YXR1cyk7CgkJJElEID0gYXNzZXJ0X2ludCgkYXJ0aWNsZWlkKTsKCgkJ Ly8gb3ZlcnJpZGUgc3VibWl0dGVyIHdpdGggbW9kZXJhdG9yPwoJCWlmIChAJG1lbV9tb2Rf YXJ0aWNsZV9zdWJtaXRfd2l0aF9tb2RlcmF0b3JfaWQgfHwgIWlzc2V0KCR1c2VyKSApCgkJ ewoJCQkkdXNlciA9ICR0eHBfdXNlcjsKCQl9CgoJCSRBbm5vdGF0ZSA9IChpbnQpICRBbm5v dGF0ZTsKCgkJaWYgKCFoYXNfcHJpdnMoJ2FydGljbGUucHVibGlzaCcpICYmICRTdGF0dXM+ PTQpICRTdGF0dXMgPSAzOwoKCQlpZiAoQCRtZW1fbW9kX2FydGljbGVfZWRpdF9yZXNldHNf dGltZSkKCQl7CgkJCSR3aGVucG9zdGVkID0gIixQb3N0ZWQ9bm93KCkiOwoJCX0KCQllbHNl CgkJewoJCQkkd2hlbnBvc3RlZCA9ICcnOwoJCX0KCgkJLy9BdXRvLVVwZGF0ZSBjdXN0b20t dGl0bGVzIGFjY29yZGluZyB0byBUaXRsZSwgYXMgbG9uZyBhcyB1bnB1Ymxpc2hlZCBhbmQg Tk9UIGN1c3RvbWl6ZWQKCQlpZiAoIGVtcHR5KCR1cmxfdGl0bGUpCgkJCSAgfHwgKCAoJG9s ZEFydGljbGVbJ1N0YXR1cyddIDwgNCkKCQkJCQkmJiAoJG9sZEFydGljbGVbJ3VybF90aXRs ZSddID09ICR1cmxfdGl0bGUgKQoJCQkJCSYmICgkb2xkQXJ0aWNsZVsndXJsX3RpdGxlJ10g PT0gc3RyaXBTcGFjZSgkb2xkQXJ0aWNsZVsnVGl0bGUnXSwxKSkKCQkJCQkmJiAoJG9sZEFy dGljbGVbJ1RpdGxlJ10gIT0gJFRpdGxlKQoJCQkJICkKCQkgICApCgkJewoJCQkkdXJsX3Rp dGxlID0gc3RyaXBTcGFjZSgkVGl0bGVfcGxhaW4sIDEpOwoJCX0KCgkJJEtleXdvcmRzID0g ZG9TbGFzaCh0cmltKHByZWdfcmVwbGFjZSgnLyggP1tcclxuXHQsXSkrID8vcycsICcsJywg cHJlZ19yZXBsYWNlKCcvICsvJywgJyAnLCAka2V5d29yZHMpKSwgJywgJykpOwoKCQkkdXNl X3RleHRpbGUgPSAkcHJlZnNbJ3VzZV90ZXh0aWxlJ107CgoJCWlmIChlbXB0eSgkdGV4dGls ZV9leGNlcnB0KSkKCQl7CgkJCSR0ZXh0aWxlX2V4Y2VycHQgPSAhZW1wdHkoJHVzZV90ZXh0 aWxlKSA/ICR1c2VfdGV4dGlsZSA6ICcwJzsKCQl9CgkJaWYgKGVtcHR5KCR0ZXh0aWxlX2Jv ZHkpKQoJCXsKCQkJJHRleHRpbGVfYm9keSA9ICFlbXB0eSgkdXNlX3RleHRpbGUpID8gJHVz ZV90ZXh0aWxlIDogJzAnOwoJCX0KCgoJCSRycyA9IHNhZmVfdXBkYXRlKCJ0ZXh0cGF0dGVy biIsCgkJICAgIlRpdGxlICAgICAgICAgICA9ICckVGl0bGUnLAoJCQlCb2R5ICAgICAgICAg ICAgPSAnJEJvZHknLAoJCQlCb2R5X2h0bWwgICAgICAgPSAnJEJvZHlfaHRtbCcsCgkJCUV4 Y2VycHQgICAgICAgICA9ICckRXhjZXJwdCcsCgkJCUV4Y2VycHRfaHRtbCAgICA9ICckRXhj ZXJwdF9odG1sJywKCQkJS2V5d29yZHMgICAgICAgID0gJyRLZXl3b3JkcycsCgkJCUltYWdl ICAgICAgICAgICA9ICckSW1hZ2UnLAoJCQlTdGF0dXMgICAgICAgICAgPSAgJFN0YXR1cywK CQkJTGFzdE1vZCAgICAgICAgID0gIG5vdygpLAoJCQlMYXN0TW9kSUQgICAgICAgPSAnJHVz ZXInLAoJCQlTZWN0aW9uICAgICAgICAgPSAnJFNlY3Rpb24nLAoJCQlDYXRlZ29yeTEgICAg ICAgPSAnJENhdGVnb3J5MScsCgkJCUNhdGVnb3J5MiAgICAgICA9ICckQ2F0ZWdvcnkyJywK CQkJQW5ub3RhdGUgICAgICAgID0gICRBbm5vdGF0ZSwKCQkJdGV4dGlsZV9ib2R5ICAgID0g ICR0ZXh0aWxlX2JvZHksCgkJCXRleHRpbGVfZXhjZXJwdCA9ICAkdGV4dGlsZV9leGNlcnB0 LAoJCQlvdmVycmlkZV9mb3JtICAgPSAnJG92ZXJyaWRlX2Zvcm0nLAoJCQl1cmxfdGl0bGUg ICAgICAgPSAnJHVybF90aXRsZScsCgkJCUFubm90YXRlSW52aXRlICA9ICckQW5ub3RhdGVJ bnZpdGUnLAoJCQljdXN0b21fMSAgICAgICAgPSAnJGN1c3RvbV8xJywKCQkJY3VzdG9tXzIg ICAgICAgID0gJyRjdXN0b21fMicsCgkJCWN1c3RvbV8zICAgICAgICA9ICckY3VzdG9tXzMn LAoJCQljdXN0b21fNCAgICAgICAgPSAnJGN1c3RvbV80JywKCQkJY3VzdG9tXzUgICAgICAg ID0gJyRjdXN0b21fNScsCgkJCWN1c3RvbV82ICAgICAgICA9ICckY3VzdG9tXzYnLAoJCQlj dXN0b21fNyAgICAgICAgPSAnJGN1c3RvbV83JywKCQkJY3VzdG9tXzggICAgICAgID0gJyRj dXN0b21fOCcsCgkJCWN1c3RvbV85ICAgICAgICA9ICckY3VzdG9tXzknLAoJCQljdXN0b21f MTAgICAgICAgPSAnJGN1c3RvbV8xMCcKCQkJJHdoZW5wb3N0ZWQiLAoJCQkiSUQgPSAkSUQi CgkJKTsKCgkJaWYgKCRycykKCQl7CgkJCSRHTE9CQUxTWydJRCddID0gJElEOwoJCX0KCgkJ aWYoJFN0YXR1cyA+PSA0KQoJCXsKCQkJLy8gb25seSBwaW5nIG9uIGZpcnN0IHB1Ymxpc2gK CQkJaWYgKCRvbGRBcnRpY2xlWydTdGF0dXMnXSA8IDQpIHsKCQkJCWRvX3BpbmdzKCk7CgkJ CX0KCQkJdXBkYXRlX2xhc3Rtb2QoKTsKCQl9CgoJCXJldHVybiAoJHJzID8gJycgOiBnZXRf c3RhdHVzX21lc3NhZ2UoJFN0YXR1cykuY2hlY2tfdXJsX3RpdGxlKCR1cmxfdGl0bGUpKTsK CX0KCWVsc2UgaWYgKCR0eXBlPT0nYXJ0aWNsZS1kZWxldGUnKQoJewoJCS8vIG1ha2Ugc3Vy ZSB0aGUgbW9kIGlzIGFsbG93ZWQgdG8gZGVsZXRlCgkJaWYgKCFoYXNfcHJpdnMoJ2FydGlj bGUuZGVsZXRlJykpCgkJewoJCQlyZXR1cm4gJ1lvdSBsYWNrIHRoZSByZXF1aXJlZCBwcml2 aWxlZ2VzIHRvIG1vZGVyYXRlIHRoaXMgYXJ0aWNsZS4nOwoJCX0KCgkJZXh0cmFjdCgkZGF0 YSk7CgoJCWlmIChpc3NldCgkYXJ0aWNsZWlkKSkKCQl7CgkJCSRpZCA9IGFzc2VydF9pbnQo JGFydGljbGVpZCk7CgoJCQkvLyBkZWxldGUgYXJ0aWNsZQoJCQlpZiAoc2FmZV9kZWxldGUo J3RleHRwYXR0ZXJuJywgIklEID0gJGlkIikpCgkJCXsKCQkJCS8vIGhpZGUgY29tbWVudHMg YXNzb2NpYXRlZCB3aXRoIGRlbGV0ZWQgYXJ0aWNsZQoJCQkJc2FmZV91cGRhdGUoJ3R4cF9k aXNjdXNzJywgInZpc2libGUgPSAiLk1PREVSQVRFLCAicGFyZW50aWQgPSB7JGlkfSIpOwoJ CQl9CgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuICdmYWlsZWQgdG8gZGVsZXRlIGFydGljbGUn OwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCXJldHVybiAnaW52YWxpZCBhcnRpY2xlIGlkJzsK CQl9Cgl9CgllbHNlCgl7CgkJcmV0dXJuICJpbnZhbGlkIHR5cGUgeyR0eXBlfSI7Cgl9Cn0K CmZ1bmN0aW9uIG1lbV9hcnRpY2xlX3JlamVjdGVyKCR0eXBlLCRkYXRhKQp7Ci8vCWlmICgk dHlwZT09J2FydGljbGUnIGFuZCBpc19hcnJheSgkZGF0YSkpIHsKLy8JCS8vIGRvIG5vdGhp bmcKLy8JfQp9CgovKiogSFRNTCBzZWxlY3QgcG9wdWxhdGVkIHdpdGggY2F0ZWdvcmllcy4g RGVmYXVsdCBzZWN0aW9uIGlzCiAqIHB1bGxlZCBmcm9tIEdFVC9QT1NULgogKi8KZnVuY3Rp b24gbWVtX2dwc19jYXRlZ29yeSgkYXR0cykKewoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkn YXJnJwk9PiAnY2F0ZWdvcnkxJywKCQknbGluaycJPT4gMCwKCQkndGl0bGUnID0+IDEsCgkJ J3NlY3Rpb24nCT0+IGdwcygnc2VjdGlvbicpLAoJCSd3cmFwdGFnJwk9PiAnJywKCSksJGF0 dHMpKTsKCglyZXR1cm4gY2F0ZWdvcnkoYXJyYXkoCgkJCQkJJ2xpbmsnID0+ICRsaW5rLAoJ CQkJCSd0aXRsZScgPT4gJHRpdGxlLAoJCQkJCSduYW1lJyA9PiBncHMoJGFyZyksCgkJCQkJ J3dyYXB0YWcnID0+ICR3cmFwdGFnLAoJCQkJCSdzZWN0aW9uJyA9PiAkc2VjdGlvbgoJCQkJ CSkpOwp9CgovKiogSFRNTCBzZWxlY3QgcG9wdWxhdGVkIHdpdGggc2VjdGlvbnMuIERlZmF1 bHQgc2VjdGlvbiBpcwogKiBwdWxsZWQgZnJvbSBHRVQvUE9TVC4KICovCmZ1bmN0aW9uIG1l bV9ncHNfc2VjdGlvbigkYXR0cykKewoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknYXJnJwk9 PiAnc2VjdGlvbicsCgkJJ2xpbmsnCT0+IDAsCgkJJ3RpdGxlJyA9PiAxLAoJCSd3cmFwdGFn Jwk9PiAnJywKCSksJGF0dHMpKTsKCgoJcmV0dXJuIHNlY3Rpb24oYXJyYXkoCgkJCQkJJ2xp bmsnID0+ICRsaW5rLAoJCQkJCSd0aXRsZScgPT4gJHRpdGxlLAoJCQkJCSduYW1lJyA9PiBn cHMoJGFyZyksCgkJCQkJJ3dyYXB0YWcnID0+ICR3cmFwdGFnCgkJCQkJKSk7Cn0KCi8qKiBQ dXQgZGVsZXRlIGxpc3RlbmVyIG9uIGEgcGFnZS4gTGlua3MgZnJvbQogKiBtZW1fYXJ0aWNs ZV9hY3Rpb25fbGluayBzaG91bGQgcG9pbnQgaGVyZS4KICovCmZ1bmN0aW9uIG1lbV9hcnRp Y2xlX2RlbGV0ZV9zZW50cnkoJGF0dHMsJHRoaW5nPScnKQp7CglnbG9iYWwgJHR4cF91c2Vy LCRpZ25fdXNlciwkbWVtX21vZF9hcnRpY2xlX2RlbGV0ZV9yZXF1ZXN0ZWQ7CgoJZXh0cmFj dChsQXR0cyhhcnJheSgKCQknc3VjY2Vzc21zZycJPT4gJ1N1Ym1pdHRlZCByZXF1ZXN0JywK CQknZmFpbHVyZW1zZycJPT4gJ0ZhaWxlZCB0byBzdWJtaXQgcmVxdWVzdCcsCgkJJ3dyYXB0 YWcnCT0+ICcnLAoJCSdjbGFzcycJCT0+ICcnCgkpLCRhdHRzKSk7CgoJaWYgKGVtcHR5KCR0 eHBfdXNlcikpCgl7CgkJLy8gdXNlciBub3Qgc2V0LCB0cnkgaWduIHBsdWdpbgoJCSR0eHBf dXNlciA9IEAkaWduX3VzZXI7Cgl9CgoJJGhhc2ggPSBncHMoJ2gnKTsKCSRhcnRpY2xlaWQg PSBncHMoJ2FydGljbGVpZCcpOwoJJHJlcXVlc3QgPSBncHMoJ3JlcXVlc3RfYXJ0aWNsZV9k ZWxldGlvbicpOwoKCWlmIChlbXB0eSgkaGFzaCkgfHwgZW1wdHkoJGFydGljbGVpZCkgfHwg ZW1wdHkoJHJlcXVlc3QpKQoJewoJCS8vIG5vdCBhIGRlbGV0ZSByZXF1ZXN0CgkJcmV0dXJu ICcnOwoJfQoKCS8vIGdldCB0aGUgYXJ0aWNsZSB0aXRsZSBmb3IgdGhlIGhhc2gKCSR0aXRs ZSA9IHNhZmVfZmllbGQoJ1RpdGxlJywndGV4dHBhdHRlcm4nLCJJRCA9ICIgLiBhc3NlcnRf aW50KCRhcnRpY2xlaWQpKTsKCSRuaGFzaCA9IG1kNSgkYXJ0aWNsZWlkLiR0aXRsZSk7CgoJ aWYgKCAkbmhhc2ggPT0gJGhhc2ggJiYgJHJlcXVlc3QgPT0gJzEnICkKCXsKCQkvLyBzZXQg ZmxhZyB0byBoaWRlIGRlbGV0ZSBsaW5rcwoJCSRtZW1fbW9kX2FydGljbGVfZGVsZXRlX3Jl cXVlc3RlZCA9IHRydWU7CgkJJGRhdGEgPSBhcnJheSgKCQkJJ2FydGljbGVpZCcJPT4gJGFy dGljbGVpZCwKCQkJJ3RpdGxlJwk9PiAkdGl0bGUsCgkJCSd1c2VyJwk9PiAkdHhwX3VzZXIK CQkJKTsKCgkJLy8gcHVzaCBkZWxldGUgYWN0aW9uIHRvIHF1ZXVlCgkJJHJlcyA9IHN1Ym1p dF9tb2RlcmF0ZWRfY29udGVudCgnYXJ0aWNsZS1kZWxldGUnLCcnLCdhcnRpY2xlLWRlbGV0 ZTogIycuJGFydGljbGVpZC4nIC0gJy4kdGl0bGUsJGRhdGEsICRhcnRpY2xlaWQpOwoKCQlp ZiAoJHJlcykKCQl7CgkJCS8vIGRlbGV0ZSBhbGwgb3RoZXIgcGVuZGluZyBhcnRpY2xlIG1v ZGVyYXRpb24gYWN0aW9ucyBieSB0aGlzIHVzZXIgZm9yIHRoZSBzYW1lIGl0ZW1faWQKCQkJ c2FmZV9kZWxldGUoJ3R4cF9tb2RlcmF0aW9uJywgImB0eXBlYCBMSUtFICdhcnRpY2xlJScg YW5kIHVzZXIgPSAnJHR4cF91c2VyJyBhbmQgaXRlbV9pZCA9ICRhcnRpY2xlaWQgYW5kIGlk ICE9ICRyZXMgYW5kIGl0ZW1faWQgIT0gMCIpOwoKCQkJcmV0dXJuIGRvVGFnKCRzdWNjZXNz bXNnLCAkd3JhcHRhZywgJGNsYXNzKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gZmFpbGVkIHRv IGNyZWF0ZSBtb2QgYWN0aW9uCgkJCXJldHVybiBkb1RhZygkZmFpbHVyZW1zZywgJHdyYXB0 YWcsICRjbGFzcyk7CgkJfQoJfQoKCS8vIG5vIGRlbGV0ZQoJcmV0dXJuICcnOwp9CgovKiog VGFnIHNob3dzIGRlbGV0ZSBsaW5rLiBEZWxldGUgaGFuZGxlZCBieSBzZW50cnkgKi8KZnVu Y3Rpb24gbWVtX2FydGljbGVfYWN0aW9uX2xpbmsoJGF0dHMsJHRoaW5nPScnKQp7CglnbG9i YWwgJHRoaXNhcnRpY2xlLCRtZW1fbW9kX2FydGljbGVfZGVsZXRlX3JlcXVlc3RlZDsKCgll eHRyYWN0KGxBdHRzKGFycmF5KAoJCSdhY3Rpb24nCT0+ICdkZWxldGUnLAoJCSd0ZXh0Jwk9 PiAnJywKCQkndXJsJwk9PiAnJywKCQknbW9kZScJPT4gJycsCgkJJ3Byb21wdCcJPT4gJycs CgkpLCRhdHRzKSk7CgoJJGFjdGlvbiA9IHN0cnRvbG93ZXIoJGFjdGlvbik7CgoJaWYgKGVt cHR5KCR0ZXh0KSkKCQkkdGV4dCA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJGFjdGlvbik7CgoJ aWYgKGVtcHR5KCR1cmwpKQoJewoJCS8vIHVzZSBjdXJyZW50CgkJJHVybCA9ICRfU0VSVkVS WydSRVFVRVNUX1VSSSddOwoJfQoJZWxzZQoJewoJCS8vIG1ha2UgYWJzb2x1dGUKCQkkdXJs ID0gaHUubHRyaW0oJHVybCwgJy8nKTsKCX0KCgkvLyBidWlsZCB1cCBHRVQKCSR1cmwgLj0g KHN0cnBvcygkdXJsLCc/JykgPT09IEZBTFNFID8gJz8nIDogJyYnKTsKCgkkYXJ0aWNsZV9p ZCA9ICR0aGlzYXJ0aWNsZVsndGhpc2lkJ107CgoJaWYgKCRhY3Rpb24gPT0gJ2RlbGV0ZScp Cgl7CgkJaWYgKGVtcHR5KCRwcm9tcHQpKQoJCXsKCQkJJHByb21wdCA9ICdBcmUgeW91IHN1 cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBhcnRpY2xlPyc7CgkJfQoKCQlpZiAo JG1lbV9tb2RfYXJ0aWNsZV9kZWxldGVfcmVxdWVzdGVkID09PSB0cnVlKQoJCXsKCQkJLy8g c2VudHJ5IGlzIGFjdGluZwoJCQlyZXR1cm4gJyc7CgkJfQoKCQkkdXJsIC49ICdhcnRpY2xl aWQ9Jy4gJGFydGljbGVfaWQgLicmcmVxdWVzdF9hcnRpY2xlX2RlbGV0aW9uPTEmaD0nIC4g bWQ1KCRhcnRpY2xlX2lkLiR0aGlzYXJ0aWNsZVsndGl0bGUnXSk7Cgl9CgllbHNlIGlmICgk YWN0aW9uID09ICdlZGl0JykKCXsKCQkkdXJsIC49ICdhcnRpY2xlaWQ9Jy4kdGhpc2FydGlj bGVbJ3RoaXNpZCddOwoJfQoKCS8vIG91dHB1dCBtb2RlCglpZiAoJG1vZGUgPT0gJ3VybF9v bmx5JykKCXsKCQkkb3V0ID0gJHVybDsKCX0KCWVsc2UgaWYgKCRtb2RlID09ICd1cmxfZW5j b2RlZCcpCgl7CgkJJG91dCA9IHVybGVuY29kZSgkdXJsKTsKCX0KCWVsc2UgaWYgKCRtb2Rl ID09ICd1cmxfZXNjYXBlZCcpCgl7CgkJJG91dCA9IGh0bWxzcGVjaWFsY2hhcnMoJHVybCk7 Cgl9CgllbHNlCgl7CgkJJG91dCA9ICc8YSBocmVmPSInLmh0bWxzcGVjaWFsY2hhcnMoJHVy bCkuCgkJCSghZW1wdHkoJHByb21wdCkgPyAiXCIgb25jbGljaz1cImphdmFzY3JpcHQ6cmV0 dXJuIGNvbmZpcm0oJ3skcHJvbXB0fScpO1wiIiA6ICcnKS4KCQkJJyI+Jy4gaHRtbHNwZWNp YWxjaGFycygkdGV4dCkuJzwvYT4nOwoJfQoKCXJldHVybiAkb3V0Owp9CgovKiogQ29uZGl0 aW9uYWwgdGFnLiBTdXBwb3J0cyAkdGhpc2FydGljbGUgKi8KZnVuY3Rpb24gbWVtX2lmX293 bnNfYXJ0aWNsZSgkYXR0cywkdGhpbmc9JycpCnsKCWdsb2JhbCAkdGhpc2FydGljbGUsICR0 eHBfdXNlciwgJGlnbl91c2VyOwoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ3VzZXJpZGZp ZWxkJwk9PiAnQXV0aG9ySUQnLAoJKSwkYXR0cykpOwoKCS8vIHVzZSBpZ24gaWYgbmVlZGVk CglpZiAoZW1wdHkoJHR4cF91c2VyKSkgJHR4cF91c2VyID0gJGlnbl91c2VyOwoKCSRjb25k ID0gaXNfYXJyYXkoJHRoaXNhcnRpY2xlKSBhbmQgaXNzZXQoJHRoaXNhcnRpY2xlWyRhcnRp Y2xlZmllbGRdKSBhbmQgJHRoaXNhcnRpY2xlWyRhcnRpY2xlZmllbGRdID09ICR0eHBfdXNl cjsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsJGNvbmQpKTsKfQoKZnVuY3Rpb24g bWVtX2lmX2FydGljbGVfZGVsZXRlX3BlbmRpbmcoJGF0dHMsICR0aGluZz0nJykKewoJZ2xv YmFsICR0aGlzYXJ0aWNsZTsKCglzdGF0aWMgJHBlbmRpbmdfaWRzID0gZmFsc2U7CgoJaWYg KGVtcHR5KCRwZW5kaW5nX2lkcykpCgl7CgkJLy8gZ2V0IGV2ZXJ5IGRlbGV0ZSByZXF1ZXN0 CgkJJHBlbmRpbmdfaWRzID0gc2FmZV9jb2x1bW4oJ2l0ZW1faWQnLCAndHhwX21vZGVyYXRp b24nLCAidHlwZSA9ICdhcnRpY2xlLWRlbGV0ZSciKTsKCgkJLy8gcHJldmVudCBtb3JlIGRi IGNhbGxzIGlmIHRoZXJlIGFyZSBubyBkZWxldGUgcmVxdWVzdHMKCQlpZiAoZW1wdHkoJHBl bmRpbmdfaWRzKSkKCQkJJHBlbmRpbmdfaWRzID0gdHJ1ZTsKCX0KCgkkY29uZCA9IGlzX2Fy cmF5KCRwZW5kaW5nX2lkcykgJiYgaW5fYXJyYXkoJHRoaXNhcnRpY2xlWyd0aGlzaWQnXSwg JHBlbmRpbmdfaWRzKTsKCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkY29uZCkp Owp9CgovKiogY3VzdG9tX2FydGljbGUgdGhhdCBmaWx0ZXJzIGJhc2VkIHVwb24gY3VycmVu dCB1c2VyICh0eHAgb3IgaWduKSAqLwpmdW5jdGlvbiBtZW1fY3VzdG9tX3VzZXJfYXJ0aWNs ZV9saXN0KCRhdHRzLCAkdGhpbmc9JycpCnsKCWdsb2JhbCAkcHJldGV4dCwgJHByZWZzLCAk dHhwY2ZnLCR0eHBfdXNlciwkaWduX3VzZXI7CgoJLy8gbmVlZCB1cmwgaW5mbyBhbmQgdHhw IHByZWZzCglleHRyYWN0KCRwcmV0ZXh0KTsKCWV4dHJhY3QoJHByZWZzKTsKCS8vIGN1c3Rv bSBmaWVsZHMgYW5kIHRpdGxlcwoJLy8kY3VzdG9tRmllbGRzID0gZ2V0Q3VzdG9tRmllbGRz KCk7CgkkY3VzdG9tbEF0dHMgPSBhcnJheSgpOyAvL2FycmF5X251bGwoYXJyYXlfZmxpcCgk Y3VzdG9tRmllbGRzKSk7CgoJLy8gbmVlZCBhIHVzZXIKCSR1c2VyaWQgPSBpc3NldCgkdHhw X3VzZXIpID8gQCR0eHBfdXNlciA6IEAkaWduX3VzZXI7CgoJLy9nZXR0aW5nIGF0dHJpYnV0 ZXMKCSR0aGVBdHRzID0gbEF0dHMoYXJyYXkoCgkJJ3VzZXJpZGZpZWxkJwk9PiAnJywKCQkn Zm9ybScgICAgICA9PiAnZGVmYXVsdCcsCgkJJ2xpbWl0JyAgICAgPT4gMTAsCgkJJ29mZnNl dCcJPT4gMCwKCQkncGFnZWJ5JyAgICA9PiAnJywKCQknY2F0ZWdvcnknICA9PiAnJywKCQkn c2VjdGlvbicgICA9PiAnJywKCQknYXV0aG9yJyAgICA9PiAnJywKCQknc29ydCcgICAgICA9 PiAnUG9zdGVkIGRlc2MnLAoJCSd0aW1lJyAgICAgID0+ICdwYXN0JywKCQknbW9udGgnCQk9 PiAnJywKCQknc3RhdHVzJyAgICA9PiAnNCcsCgkpKyRjdXN0b21sQXR0cywkYXR0cyk7CgoJ ZXh0cmFjdCgkdGhlQXR0cyk7CgoJJHBhZ2VieSA9IChlbXB0eSgkcGFnZWJ5KSA/ICRsaW1p dCA6ICRwYWdlYnkpOwoKCS8vIHRyZWF0IHN0aWNreSBhcnRpY2xlcyBkaWZmZXJlbnRseSB3 cnQgc2VhcmNoIGZpbHRlcmluZywgZXRjCglpZiAoIWlzX251bWVyaWMoJHN0YXR1cykpCgl7 CgkJJHN0YXR1cyA9IGdldFN0YXR1c051bSgkc3RhdHVzKTsKCX0KCgkkaXNzdGlja3kgPSAo JHN0YXR1cyA9PSA1KTsKCgkkbWF0Y2ggPSAkc2VhcmNoID0gJyc7CgoJLy9CdWlsZGluZyBx dWVyeSBwYXJ0cwoJJGNhdGVnb3J5ICA9IGpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgk Y2F0ZWdvcnkpKSk7CgkkY2F0ZWdvcnkgID0gKCEkY2F0ZWdvcnkpICA/ICcnIDogIiBhbmQg KENhdGVnb3J5MSBJTiAoJyIuJGNhdGVnb3J5LiInKSBvciBDYXRlZ29yeTIgSU4gKCciLiRj YXRlZ29yeS4iJykpIjsKCSRzZWN0aW9uICAgPSAoISRzZWN0aW9uKSAgID8gJycgOiAiIGFu ZCBTZWN0aW9uIElOICgnIi5qb2luKCInLCciLCBkb1NsYXNoKGRvX2xpc3QoJHNlY3Rpb24p KSkuIicpIjsKCSRhdXRob3IgICAgPSAoISRhdXRob3IpICAgID8gJycgOiAiIGFuZCBBdXRo b3JJRCBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaChkb19saXN0KCRhdXRob3IpKSkuIicp IjsKCSRtb250aCAgICAgPSAoISRtb250aCkgICAgID8gJycgOiAiIGFuZCBQb3N0ZWQgbGlr ZSAnIi5kb1NsYXNoKCRtb250aCkuIiUnIjsKCglzd2l0Y2ggKCR0aW1lKSB7CgkJY2FzZSAn YW55JzoKCQkJJHRpbWUgPSAiIjsgYnJlYWs7CgkJY2FzZSAnZnV0dXJlJzoKCQkJJHRpbWUg PSAiIGFuZCBQb3N0ZWQgPiBub3coKSI7IGJyZWFrOwoJCWRlZmF1bHQ6CgkJCSR0aW1lID0g IiBhbmQgUG9zdGVkIDw9IG5vdygpIjsKCX0KCgkkY3VzdG9tID0gJyc7CgoJaWYgKCR1c2Vy aWRmaWVsZCkKCXsKCQkkY3VzdG9tIC49ICcgYW5kICcuIGRvU2xhc2goJHVzZXJpZGZpZWxk KSAuIj0neyR1c2VyaWR9JyAiOwoJfQoKCSRzdGF0dXNxID0gJyBhbmQgU3RhdHVzID0gJy5p bnR2YWwoJHN0YXR1cyk7CgoJLy8gY29tcG9zaXQgcGFydHMKCSR3aGVyZSA9ICIxPTEiIC4g JHN0YXR1c3EuICR0aW1lLgoJCSRjYXRlZ29yeSAuICRzZWN0aW9uIC4gJG1vbnRoIC4gJGF1 dGhvciAuICRjdXN0b20gOwoKCSRvZmZzZXQgPSBhc3NlcnRfaW50KCRvZmZzZXQpOwoJJGxp bWl0ID0gYXNzZXJ0X2ludCgkbGltaXQpOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiwg dW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChFeHBp cmVzKSBhcyB1RXhwaXJlcywgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2Qi LiRtYXRjaCwgJ3RleHRwYXR0ZXJuJywKCQkJJHdoZXJlLicgb3JkZXIgYnkgJy5kb1NsYXNo KCRzb3J0KS4nIGxpbWl0ICcuJG9mZnNldC4nLCAnLiRsaW1pdCk7CgoJaWYgKCRycykKCXsK CQkkY291bnQgPSAwOwoKCQkkYXJ0aWNsZXMgPSBhcnJheSgpOwoJCXdoaWxlKCRhID0gbmV4 dFJvdygkcnMpKQoJCXsKCQkJKyskY291bnQ7CgkJCXBvcHVsYXRlQXJ0aWNsZURhdGEoJGEp OwoJCQlnbG9iYWwgJHRoaXNhcnRpY2xlLCAkdVBvc3RlZCwgJGxpbWl0OwoJCQkkdGhpc2Fy dGljbGVbJ2lzX2ZpcnN0J10gPSAoJGNvdW50ID09IDEpOwoJCQkkdGhpc2FydGljbGVbJ2lz X2xhc3QnXSA9ICgkY291bnQgPT0gbnVtUm93cygkcnMpKTsKCgkJCS8vIHVuY29tbWVudCBm b3IgYXJ0aWNsZV9lbnRyeSBwYXRjaAoJCQkvL2NhbGxiYWNrX2V2ZW50KCdhcnRpY2xlX2Vu dHJ5JywnbGlzdCcpOwoKCQkJaWYgKGlzc2V0KCRHTE9CQUxTWyd0aGlzYXJ0aWNsZSddKSkK CQkJewoJCQkJLy8gZW5jbG9zZWQgPiBmb3JtCgkJCQkkYXJ0aWNsZXNbXSA9ICFlbXB0eSgk dGhpbmcpID8gcGFyc2UoJHRoaW5nKSA6IHBhcnNlX2Zvcm0oJGZvcm0pOwoKCQkJCS8vIHNl bmRpbmcgdGhlc2UgdG8gcGFnaW5nX2xpbmsoKTsgUmVxdWlyZWQ/CgkJCQkkdVBvc3RlZCA9 ICRhWyd1UG9zdGVkJ107CgoJCQkJLy8gY2xlYW4gdXAKCQkJCXVuc2V0KCRHTE9CQUxTWyd0 aGlzYXJ0aWNsZSddKTsKCQkJfQoJCX0KCgkJcmV0dXJuIGpvaW4oJycsJGFydGljbGVzKTsK CX0KfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCi8vIFB1YmxpYyBmb3JtIG1ldGhvZHMKCi8qKiBIZWxwZXIgdGFnIGZvciBtZW1f Zm9ybSAqLwpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9hcnRpY2xlX2Zvcm0oJGF0dHMsICR0 aGluZz0nJykKewoJJGF0dHNbJ3R5cGUnXSA9ICdtZW1fbW9kZXJhdGlvbl9hcnRpY2xlJzsK CglyZXR1cm4gbWVtX2Zvcm0oJGF0dHMsICR0aGluZyk7Cn0KCi8vIHJlZ2lzdGVyIGZ1bmN0 aW9ucyB3aXRoIG1lbV9mb3JtCnJlZ2lzdGVyX2NhbGxiYWNrKCdtZW1fbW9kX2FydGljbGVf Zm9ybV9kZWZhdWx0cycsICdtZW1fZm9ybS5kZWZhdWx0cycpOwpyZWdpc3Rlcl9jYWxsYmFj aygnbWVtX21vZF9hcnRpY2xlX2Zvcm1fZGlzcGxheScsICdtZW1fZm9ybS5kaXNwbGF5Jyk7 CnJlZ2lzdGVyX2NhbGxiYWNrKCdtZW1fbW9kX2FydGljbGVfZm9ybV9zdWJtaXR0ZWQnLCAn bWVtX2Zvcm0uc3VibWl0Jyk7CgovKiogU2V0IGZvcm0gZGVmYXVsdHMgKi8KZnVuY3Rpb24g bWVtX21vZF9hcnRpY2xlX2Zvcm1fZGVmYXVsdHMoKQp7CglnbG9iYWwgJG1lbV9mb3JtLCAk bWVtX2Zvcm1fdHlwZSwgJG1lbV9mb3JtX2RlZmF1bHQsICRtZW1fbW9kX2luZm8sICRtZW1f bW9kYXJ0aWNsZV9pbmZvOwoKCS8vIHR5cGUgY2hlY2sKCWlmICgkbWVtX2Zvcm1fdHlwZSE9 J21lbV9tb2RlcmF0aW9uX2FydGljbGUnKQoJewoJCXJldHVybjsKCX0KCglleHRyYWN0KGdw c2EoYXJyYXkoJ21vZGlkJywnYXJ0aWNsZWlkJykpKTsKCgkvLyBlZGl0aW5nIG1vZCBpdGVt CglpZiAoIWVtcHR5KCRtb2RpZCkpCgl7CgkJLy8gZ2V0IG1vZCBkYXRhCgkJJG1lbV9tb2Rf aW5mbyA9IHNhZmVfcm93KCcqJywndHhwX21vZGVyYXRpb24nLCJgaWRgPSciLmRvU2xhc2go JG1vZGlkKS4iJyIpOwoKCQlpZiAoJG1lbV9tb2RfaW5mbykKCQl7CgkJCS8vIHNldCBkZWNv ZGVkCgkJCSRtZW1fbW9kYXJ0aWNsZV9pbmZvID0gbWVtX21vZGVyYXRpb25fZGVjb2RlKCRt ZW1fbW9kX2luZm9bJ2RhdGEnXSk7CgkJfQoJfQoJLy8gZWRpdGluZyBwdWJsaXNoIGFydGlj bGUKCWVsc2UgaWYgKCFlbXB0eSgkYXJ0aWNsZWlkKSkKCXsKCQkkcnMgPSBzYWZlX3Jvdygn KicsICd0ZXh0cGF0dGVybicsImBpZGA9JyIuZG9TbGFzaCgkYXJ0aWNsZWlkKS4iJyIpOwoK CQkvLyBzZXQgbW9kIGRhdGEKCQkkbWVtX21vZGFydGljbGVfaW5mbyA9IGFycmF5KCk7CgkJ Zm9yZWFjaCgkcnMgYXMgJGsgPT4gJHYpCgkJewoJCQkkbWVtX21vZGFydGljbGVfaW5mb1tz dHJ0b2xvd2VyKCRrKV0gPSAkdjsKCQl9Cgl9CgoJaWYgKGlzX2FycmF5KCRtZW1fbW9kYXJ0 aWNsZV9pbmZvKSkKCXsKCQkvLyBzZXQgZGVmYXVsdHMKCQlmb3JlYWNoKCRtZW1fbW9kYXJ0 aWNsZV9pbmZvIGFzICRrZXkgPT4gJHZhbCkKCQl7CgkJCW1lbV9mb3JtX2RlZmF1bHQoJGtl eSwgJHZhbCk7CgkJfQoJfQp9CgpmdW5jdGlvbiBtZW1fbW9kX2FydGljbGVfZm9ybV9kaXNw bGF5KCkKewoJZ2xvYmFsICRtZW1fZm9ybV90eXBlLCAkbWVtX2Zvcm1fbGFiZWxzLCAkbWVt X2Zvcm1fdmFsdWVzLCAkbWVtX21vZF9pbmZvLCAkbWVtX21vZGFydGljbGVfaW5mbzsKCgkv LyB0eXBlIGNoZWNrCglpZiAoJG1lbV9mb3JtX3R5cGUhPSdtZW1fbW9kZXJhdGlvbl9hcnRp Y2xlJykKCXsKCQlyZXR1cm47Cgl9CgoJJG91dCA9ICcnOwoKCWlmIChpc3NldCgkbWVtX21v ZF9pbmZvKSkKCXsKCQkkb3V0IC49IG4uJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1v ZGlkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRtZW1fbW9kX2luZm9bJ2lkJ10pLici IC8+Jy4KCQkJbi4nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9Iicu IGh0bWxzcGVjaWFsY2hhcnMoJG1lbV9tb2RfaW5mb1sndHlwZSddKS4nIiAvPic7CgoJCWlm ICgkbWVtX21vZF9pbmZvWyd0eXBlJ10gPT0gJ2FydGljbGUtZWRpdCcgJiYgaXNzZXQoJG1l bV9tb2RhcnRpY2xlX2luZm9bJ2FydGljbGVpZCddKSkKCQkJJG91dCAuPSBuLic8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJhcnRpY2xlaWQiIHZhbHVlPSInLiRtZW1fbW9kYXJ0aWNs ZV9pbmZvWydhcnRpY2xlaWQnXS4nIiAvPic7CgoJCW1lbV9mb3JtX3N0b3JlKCdtb2RpZCcs ICdtb2RpZCcsICRtZW1fbW9kX2luZm9bJ2lkJ10pOwoJCW1lbV9mb3JtX3N0b3JlKCd0eXBl JywgJ3R5cGUnLCAkbWVtX21vZF9pbmZvWyd0eXBlJ10pOwoJfQoJZWxzZSBpZiAoaXNzZXQo JG1lbV9tb2RhcnRpY2xlX2luZm8pKQoJewoJCSRvdXQgLj0gbi4nPGlucHV0IHR5cGU9Imhp ZGRlbiIgbmFtZT0iYXJ0aWNsZWlkIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRtZW1f bW9kYXJ0aWNsZV9pbmZvWydhcnRpY2xlaWQnXSkuJyIgLz4nLgoJCQluLic8aW5wdXQgdHlw ZT0iaGlkZGVuIiBuYW1lPSJ0eXBlIiB2YWx1ZT0iYXJ0aWNsZSIgLz4nOwoJfQoKCXJldHVy biAkb3V0Owp9CgovKiogRm9ybSBzdWJtaXQgaGFuZGxlciAqLwpmdW5jdGlvbiBtZW1fbW9k X2FydGljbGVfZm9ybV9zdWJtaXR0ZWQoKQp7CglnbG9iYWwgJHByZWZzLCAkbWVtX2FydGlj bGVfdmFycywgJG1lbV9mb3JtX3R5cGUsICR0eHBfdXNlciwgJGlnbl91c2VyLCAkbWVtX21v ZF9pbmZvLCAkbWVtX21vZGFydGljbGVfaW5mbywgJG1lbV9mb3JtX3RoYW5rc19mb3JtOwoK CWlmICgkbWVtX2Zvcm1fdHlwZSE9J21lbV9tb2RlcmF0aW9uX2FydGljbGUnKQoJewoJCXJl dHVybjsKCX0KCglleHRyYWN0KGdwc2EoYXJyYXkoJ21vZGlkJywnc3RlcCcsJ2lkJywnYXJ0 aWNsZWlkJykpKTsKCgkkbWVtX21vZGFydGljbGVfaW5mbyA9IGdwc2EoJG1lbV9hcnRpY2xl X3ZhcnMpOwoJJG91dCA9ICcnOwoKCSRpc19zYXZlID0gcHMoJ21lbV9tb2RlcmF0aW9uX3Nh dmUnKTsKCSRpc19kZWxldGUgPSBwcygnbWVtX21vZGVyYXRpb25fZGVsZXRlJyk7CgkkaXNf dXBkYXRlID0gcHMoJ21lbV9tb2RlcmF0aW9uX3VwZGF0ZScpIHx8ICgkaXNfc2F2ZSAmJiBw cygnbW9kaWQnKSk7CgoJaWYgKGlzc2V0KCRpZ25fdXNlcikpICR0eHBfdXNlciA9ICRpZ25f dXNlcjsKCglpZiAoIWVtcHR5KCRtb2RpZCkpICRpZCA9ICRtb2RpZDsKCgoJaWYgKCRpc19k ZWxldGUpCgl7CgkJaWYgKHJlbW92ZV9tb2RlcmF0ZWRfY29udGVudCgkbW9kaWQpKQoJCXsK CQkJJHJlcyA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2FydGljbGVfZGVsZXRlZCcpOwoJCX0K CQllbHNlCgkJewoJCQkkcmVzID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnYXJ0aWNsZV9kZWxl dGVfZmFpbGVkJyk7CgkJfQoJfQoJZWxzZWlmICghZW1wdHkoJGFydGljbGVpZCkpCgl7CgkJ JGFydGljbGVpZCA9IGRvU2xhc2goJGFydGljbGVpZCk7CgkJJHJzID0gc2FmZV9yb3dzKCIq LCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQiLCJ0ZXh0cGF0dGVybiIsImBJ RGAgPSAkYXJ0aWNsZWlkIik7CgoJCWlmICgkcnMpCgkJewoJCQkvLyBtZXJnZSB0aGUgcGFz c2VkIGluIHZhbHVlcyB0byB0aGUgZXhpc3RpbmcKCQkJZm9yZWFjaCgkbWVtX21vZGFydGlj bGVfaW5mbyBhcyAka2V5ID0+ICR2YWwpCgkJCXsKCQkJCSRyc1ska2V5XSA9ICR2YWw7CgkJ CX0KCQkJJHJzWydhcnRpY2xlaWQnXSA9ICRhcnRpY2xlaWQ7CgoJCQlpZiAoJGlzX3VwZGF0 ZSkKCQkJewoJCQkJJHJlcyA9IHVwZGF0ZV9tb2RlcmF0ZWRfY29udGVudCgkaWQsICRtZW1f bW9kYXJ0aWNsZV9pbmZvWydub3RlJ10sICRtZW1fbW9kYXJ0aWNsZV9pbmZvKTsKCQkJfQoJ CQllbHNlCgkJCXsKCQkJCSRyZXMgPSBzdWJtaXRfbW9kZXJhdGVkX2NvbnRlbnQoJ2FydGlj bGUtZWRpdCcsICR1c2VyX2VtYWlsLCAkbWVtX21vZGFydGljbGVfaW5mb1snbm90ZSddLCAk bWVtX21vZGFydGljbGVfaW5mbywgJGFydGljbGVpZCk7CgoJCQkJaWYgKCRyZXMpCgkJCQl7 CgkJCQkJLy8gZGVsZXRlIGFsbCBvdGhlciBwZW5kaW5nIGFydGljbGUgbW9kZXJhdGlvbiBh Y3Rpb25zIGJ5IHRoaXMgdXNlciBmb3IgdGhlIHNhbWUgaXRlbV9pZAoJCQkJCXNhZmVfZGVs ZXRlKCd0eHBfbW9kZXJhdGlvbicsICJgdHlwZWAgTElLRSAnYXJ0aWNsZSUnIGFuZCB1c2Vy ID0gJyR0eHBfdXNlcicgYW5kIGl0ZW1faWQgPSAkYXJ0aWNsZWlkIGFuZCBpZCAhPSAkcmVz IGFuZCBpdGVtX2lkICE9IDAiKTsKCQkJCX0KCQkJfQoJCX0gLy8gaWYgJHJzCgl9CgllbHNl Cgl7CgkJaWYgKGlzc2V0KCRpZCkpICRtZW1fbW9kYXJ0aWNsZV9pbmZvWydpZCddID0gJGlk OwoKCQlpZiAoJGlzX3VwZGF0ZSkKCQl7CgkJCWlmIChpc3NldCgkbWVtX21vZGFydGljbGVf aW5mb1snbm90ZSddKSkKCQkJewoJCQkJJG5vdGUgPSAkbWVtX21vZGFydGljbGVfaW5mb1sn bm90ZSddOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJG5vdGUgPSAkbWVtX21vZF9pbmZvWydk ZXNjJ107CgkJCX0KCgkJCWlmICh1cGRhdGVfbW9kZXJhdGVkX2NvbnRlbnQoJGlkLCRub3Rl LCRtZW1fbW9kYXJ0aWNsZV9pbmZvKSkKCQkJewoJCQkJJHJlcyA9IG1lbV9tb2RlcmF0aW9u X2dUeHQoJ2FydGljbGVfdXBkYXRlZCcpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHJlcyA9 IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2FydGljbGVfdXBkYXRlX2ZhaWxlZCcpOwoJCQl9CgkJ fQoJCWVsc2UKCQl7CgkJCWlmICghaXNzZXQoJHVzZXIpKQoJCQl7CgkJCQkkbWVtX21vZGFy dGljbGVfaW5mb1sndXNlciddID0gJHR4cF91c2VyOwoJCQl9CgoJCQkkcmVzID0gc3VibWl0 X21vZGVyYXRlZF9jb250ZW50KCdhcnRpY2xlJywgJycsICRtZW1fbW9kYXJ0aWNsZV9pbmZv Wydub3RlJ10sICRtZW1fbW9kYXJ0aWNsZV9pbmZvKTsKCQl9Cgl9CgoJJG1lbV9tb2RhcnRp Y2xlX2luZm9bJ3Jlc3VsdCddID0gJHJlczsKCgkkdGhhbmtzX2Zvcm0gPSBAZmV0Y2hfZm9y bSgkbWVtX2Zvcm1fdGhhbmtzX2Zvcm0pOwoKCWlmICghZW1wdHkoJHRoYW5rc19mb3JtKSkK CXsKCQkkb3V0ID0gcGFyc2UoJHRoYW5rc19mb3JtKTsKCX0KCgkvLyBjbGVhbnVwIGdsb2Jh bAoJdW5zZXQoJG1lbV9tb2RhcnRpY2xlX2luZm8pOwoKCXJldHVybiAkb3V0Owp9CiI7czo4 OiJoZWxwX3JhdyI7czo3Njc5OiJoMSh0aXRsZSkuIG1lbV9tb2RlcmF0aW9uX2FydGljbGUg cGx1Z2luCgpoMihzZWN0aW9uIHN1bW1hcnkpLiBTdW1tYXJ5CgpwLiBUaGlzIG1vZGVyYXRp b24gcGx1Z2luIGFsbG93cyB1c2VycyB0byBzdWJtaXQgYXJ0aWNsZXMgaW4gdG8gdGhlIG1v ZGVyYXRpb24gcXVldWUuCgpoMihzZWN0aW9uIGNvbnRhY3QpLiBBdXRob3IgQ29udGFjdAoK Ik1pY2hhZWwgTWFuZnJlIjptYWlsdG86bW1hbmZyZUBnbWFpbC5jb20/c3ViamVjdD1UZXh0 cGF0dGVybiUyMG1lbV9tb2RlcmF0aW9uX2FydGljbGUlMjBwbHVnaW4KImh0dHA6Ly9tYW5m cmUubmV0IjpodHRwOi8vbWFuZnJlLm5ldAoKaDIoc2VjdGlvbiBsaWNlbnNlKS4gTGljZW5z ZQoKcC4gVGhpcyBwbHVnaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlICJHUEx2MiI6aHR0cDov L3d3dy5mc2Yub3JnL2xpY2Vuc2luZy9saWNlbnNlcy9pbmZvL0dQTHYyLmh0bWwuCgpoMihz ZWN0aW9uIGluc3RhbGxhdGlvbikuIEluc3RhbGxhdGlvbgoKcC4gIlN0YXJ0IEluc3RhbGwg V2l6YXJkIjouL2luZGV4LnBocD9ldmVudD1hcnRpY2xlX21vZGVyYXRlJnN0ZXA9cHJlaW5z dGFsbAoKaDIoc2VjdGlvbiB0YWdzKS4gVGFncwoKCiogIm1lbV9pZl9vd25zX2FydGljbGUi OiNtZW1faWZfb3duc19hcnRpY2xlCiogIm1lbV9hcnRpY2xlX2FjdGlvbl9saW5rIjojbWVt X2FydGljbGVfYWN0aW9uX2xpbmsKKiAibWVtX2FydGljbGVfZGVsZXRlX3NlbnRyeSI6I21l bV9hcnRpY2xlX2RlbGV0ZV9zZW50cnkKKiAibWVtX2N1c3RvbV91c2VyX2FydGljbGVfbGlz dCI6I21lbV9jdXN0b21fdXNlcl9hcnRpY2xlX2xpc3QKKiAibWVtX21vZGVyYXRpb25fYXJ0 aWNsZV9mb3JtIjojbWVtX21vZGVyYXRpb25fYXJ0aWNsZV9mb3JtCiogIm1lbV9ncHNfY2F0 ZWdvcnkiOiNtZW1fZ3BzX2NhdGVnb3J5CiogIm1lbV9ncHNfc2VjdGlvbiI6I21lbV9ncHNf c2VjdGlvbgoqICJtb2RfYXJ0aWNsZV9mb3JtIjojbW9kX2FydGljbGVfZm9ybSBfKGRlcHJl Y2F0ZWQpXwoqICJtb2RfY3VzdG9tX2lucHV0IjojbW9kX2N1c3RvbV9pbnB1dCBfKGRlcHJl Y2F0ZWQpXwoqICJtb2RfdGl0bGVfaW5wdXQiOiNtb2RfdGl0bGVfaW5wdXQgXyhkZXByZWNh dGVkKV8KKiAibW9kX2ltYWdlX2lucHV0IjojbW9kX2ltYWdlX2lucHV0IF8oZGVwcmVjYXRl ZClfCiogIm1vZF9rZXl3b3Jkc19pbnB1dCI6I21vZF9rZXl3b3Jkc19pbnB1dCBfKGRlcHJl Y2F0ZWQpXwoqICJtb2RfYm9keV9pbnB1dCI6I21vZF9ib2R5X2lucHV0IF8oZGVwcmVjYXRl ZClfCiogIm1vZF9ib2R5X2h0bWxfaW5wdXQiOiNtb2RfYm9keV9odG1sX2lucHV0IF8oZGVw cmVjYXRlZClfCiogIm1vZF9leGNlcnB0X2lucHV0IjojbW9kX2V4Y2VycHRfaW5wdXQgXyhk ZXByZWNhdGVkKV8KKiAibW9kX2V4Y2VycHRfaHRtbF9pbnB1dCI6I21vZF9leGNlcnB0X2h0 bWxfaW5wdXQgXyhkZXByZWNhdGVkKV8KCgpoMyh0YWcjbWVtX2lmX293bnNfYXJ0aWNsZSku IG1lbV9pZl9vd25zX2FydGljbGUKCnAodGFnLXN1bW1hcnkpLiBDb25kaXRpb25hbGx5IHBh cnNlIGVuY2xvc2VkIHRleHQgYmFzZWQgdXBvbiBpZiB0aGUgY3VycmVudCB1c2VyIGlzIHRo ZSBjcmVhdGVyIG9mIHRoZSBkaXNwbGF5ZWQgYXJ0aWNsZS4KCiooYXR0cykgJShhdHRzLW5h bWUpdXNlcmlkZmllbGQlICUoYXR0cy10eXBlKXN0cmluZyUgTmFtZSBvZiB0aGUgdGFibGUg ZmllbGQgaG9sZGluZyB0aGUgdXNlciBpZC4gRGVmYXVsdCBpcyAiQXV0aG9ySUQiLgoKaDMo dGFnI21lbV9hcnRpY2xlX2FjdGlvbl9saW5rKS4gbWVtX2FydGljbGVfYWN0aW9uX2xpbmsK CnAodGFnLXN1bW1hcnkpLiBPdXRwdXQgYSB1cmwgKG9yIGxpbmspIGZvciB0aGUgY3VycmVu dCBhcnRpY2xlIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGRlbGV0ZSBzZW50cnkuIFdvcmtz IHdpdGggYW55IHRhZyBzdXBwb3J0aW5nICR0aGlzYXJ0aWNsZS4KCiooYXR0cykgJShhdHRz LW5hbWUpYWN0aW9uJSAlKGF0dHMtdHlwZSlzdHJpbmclIEFjdGlvbiB0aGF0IGlzIGVuY29k ZWQgaW4gdG8gdGhlIHVybC4gRGVmYXVsdCBpcyBkZWxldGUuCiogJShhdHRzLW5hbWUpdGV4 dCUgJShhdHRzLXR5cGUpc3RyaW5nJSBMaW5rIHRleHQgdmFsdWUuCiogJShhdHRzLW5hbWUp dXJsJSAlKGF0dHMtdHlwZSlzdHJpbmclIFVSTCB0byBzZW50cnkgb3Igb3RoZXIgaGFuZGxl ciwgcmVsYXRpdmUgdG8gc2l0ZSByb290LgoqICUoYXR0cy1uYW1lKW1vZGUlICUoYXR0cy10 eXBlKXN0cmluZyUgTW9kZSBmb3IgZ2VuZXJhdGluZyBvdXRwdXQuIHVybF9vbmx5ID0gcmF3 IFVSTCwgdXJsX2VuY29kZWQgPSBlbmNvZGVkIFVSTCwgdXJsX2VzY2FwZWQgPSBodG1sIGVz Y2FwZWQgVVJMLCBsaW5rID0gSFRNTCBhIHRhZy4gRGVmYXVsdCBpcyBsaW5rLgoqICUoYXR0 cy1uYW1lKXByb21wdCUgJShhdHRzLXR5cGUpc3RyaW5nJSBKYXZhc2NyaXB0IHByb21wdCB0 ZXh0LgoKaDModGFnI21lbV9hcnRpY2xlX2RlbGV0ZV9zZW50cnkpLiBtZW1fYXJ0aWNsZV9k ZWxldGVfc2VudHJ5CgpwKHRhZy1zdW1tYXJ5KS4gTGlzdGVucyBmb3IgYW5kIHZhbGlkYXRl cyBkZWxldGUgbGlua3MgYW5kIGFkZHMgbW9kZXJhdGlvbiBpdGVtIHRvIHF1ZXVlLgoKKihh dHRzKSAlKGF0dHMtbmFtZSlzdWNjZXNzbXNnJSAlKGF0dHMtdHlwZSlzdHJpbmclIE1lc3Nh Z2UgdG8gc2hvdyBvbiBzdWNjZXNzLgoqICUoYXR0cy1uYW1lKWZhaWx1cmVtc2clICUoYXR0 cy10eXBlKXN0cmluZyUgTWVzc2FnZSB0byBzaG93IG9uIGZhaWx1cmUuCiogJShhdHRzLW5h bWUpd3JhcHRhZyUgJShhdHRzLXR5cGUpc3RyaW5nJSBIVE1MIHRhZyB0byB3cmFwIG1lc3Nh Z2UuCiogJShhdHRzLW5hbWUpY2xhc3MlICUoYXR0cy10eXBlKXN0cmluZyUgQ1NTIGNsYXNz IGZvciB3cmFwdGFnLgoKaDModGFnI21lbV9jdXN0b21fdXNlcl9hcnRpY2xlX2xpc3QpLiBt ZW1fY3VzdG9tX3VzZXJfYXJ0aWNsZV9saXN0CgpwKHRhZy1zdW1tYXJ5KS4gQXJ0aWNsZSBs aXN0IChzYW1lIGFzIGFydGljbGVfY3VzdG9tKSwgZXhjZXB0IGhhcyB0aGUgYWJpbGl0eSB0 byBmaWx0ZXJzIGJhc2VkIHVwb24gYSB1c2VyIGlkIGJlaW5nIHN0b3JlZCBpbiBhbm90aGVy IGRhdGFiYXNlIGZpZWxkLgoKKihhdHRzKSAlKGF0dHMtbmFtZSl1c2VyaWRmaWVsZCUgJShh dHRzLXR5cGUpc3RyaW5nJSBEQiBGaWVsZCB0aGF0IGhvbGRzIHRoZSB1c2VyIGlkLgoqICUo YXR0cy1uYW1lKWZvcm0lICUoYXR0cy10eXBlKXN0cmluZyUgRm9ybSBjb250YWluaW5nIGFy dGljbGUgdGFncy4KKiAlKGF0dHMtbmFtZSlsaW1pdCUgJShhdHRzLXR5cGUpaW50JSBNYXgg bnVtYmVyIG9mIGFydGljbGVzIGluIGxpc3QuCiogJShhdHRzLW5hbWUpb2Zmc2V0JSAlKGF0 dHMtdHlwZSlpbnQlIE51bWJlciBvZiBhcnRpY2xlcyB0byBza2lwLgoqICUoYXR0cy1uYW1l KXBhZ2VieSUgJShhdHRzLXR5cGUpaW50JSBOdW1iZXIgb2YgYXJ0aWNsZXMgcGVyIHBhZ2Uu CiogJShhdHRzLW5hbWUpY2F0ZWdvcnklICUoYXR0cy10eXBlKXN0cmluZyUgUmVzdHJpY3Rz IGFydGljbGVzIHRvIHRob3NlIHRoYXQgaGF2ZSBjYXRlZ29yeTEgb3IgY2F0ZWdvcnkyIG1h dGNoaW5nIHZhbHVlLgoqICUoYXR0cy1uYW1lKXNlY3Rpb24lICUoYXR0cy10eXBlKXN0cmlu ZyUgUmVzdHJpY3RzIHRvIGFydGljbGVzIG1hdGNoaW5nIHNlY3Rpb24uCiogJShhdHRzLW5h bWUpYXV0aG9yJSAlKGF0dHMtdHlwZSlzdHJpbmclIFJlc3RyaWN0cyB0byBhcnRpY2xlcyBt YXRjaGluZyBhdXRob3IuCiogJShhdHRzLW5hbWUpc29ydCUgJShhdHRzLXR5cGUpc3RyaW5n JSBTUUwgc29ydCBmaWVsZCBhbmQgZGlyZWN0aW9uLgoqICUoYXR0cy1uYW1lKXRpbWUlICUo YXR0cy10eXBlKXN0cmluZyUgQXJ0aWNsZSB0aW1lZnJhbWUuIGFueSA9IGluY2x1ZGUgYWxs IGFydGljbGVzLCBmdXR1cmUgPSBQb3N0ZWQgPiBub3coKSwgZGVmYXVsdCA9IFBvc3RlZCA8 IG5vdygpCiogJShhdHRzLW5hbWUpbW9udGglICUoYXR0cy10eXBlKXN0cmluZyUgUmVzdHJp Y3QgdG8gYXJ0aWNsZXMgcG9zdGVkIGR1cmluZyB0aGUgbW9udGggb2YuCiogJShhdHRzLW5h bWUpc3RhdHVzJSAlKGF0dHMtdHlwZSlzdHJpbmclIFJlc3RyaWN0IHRvIGFydGljbGVzIG1h dGNoaW5nIHN0YXR1cwoKaDModGFnI21lbV9tb2RlcmF0aW9uX2FydGljbGVfZm9ybSkuIG1l bV9tb2RlcmF0aW9uX2FydGljbGVfZm9ybQoKcCh0YWctc3VtbWFyeSkuIG1lbV9mb3JtIGhl bHBlciB0YWcgZm9yIGFydGljbGUgZWRpdHMuIFNlZSBtZW1fZm9ybSBmb3IgdGFnIGF0dHJp YnV0ZXMgYW5kIHVzYWdlLgoKaDModGFnI21vZF9hcnRpY2xlX2Zvcm0pLiBtb2RfYXJ0aWNs ZV9mb3JtIF8oZGVwcmVjYXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gVGhpcyBjbGllbnQgc2lk ZSB0YWcgd2lsbCBwbGFjZSBhIGZvcm0gZm9yIHN1Ym1pdHRpbmcgYW5kIHJlLWVkaXRpbmcg c3VibWl0dGVkIGFydGljbGVzLgoKKihhdHRzKSAlKGF0dHMtbmFtZSlmb3JtJSAlKGF0dHMt dHlwZSlzdHJpbmclIFRoZSB0eHAgZm9ybSB0aGF0IGhvbGRzIHRoZSBsYXlvdXQgdGFncy4K KiAlKGF0dHMtbmFtZSlzdWNjZXNzZm9ybSUgJShhdHRzLXR5cGUpc3RyaW5nJSBUaGUgdHhw IGZvcm0gdGhhdCBob2xkcyB0aGUgdGVtcGxhdGUgdG8gc2hvdyB0byB0aGUgdXNlciBvbiBh IHN1Y2Nlc3NmdWwgZm9ybSBzdWJtaXNzaW9uIChmb3IgZWl0aGVyIHNhdmUsIGVkaXQsIG9y IGRlbGV0ZSkuCgoKaDModGFnI21vZF9jdXN0b21faW5wdXQpLiBtb2RfY3VzdG9tX2lucHV0 IF8oZGVwcmVjYXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gRGlzcGxheSBhIHRleHQgaW5wdXQg ZmllbGQgZm9yIGN1c3RvbSBpbnB1dCBmaWVsZHMuCgoqKGF0dHMpICUoYXR0cy1uYW1lKWNs YXNzJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1MgY2xhc3MgbmFtZSB0byBhc3NvY2lh dGUgd2l0aCB0aGUgb3V0cHV0dGVkIEhUTUwgdGFnCiogJShhdHRzLW5hbWUpaXNpemUlICUo YXR0cy10eXBlKWludCUgVGhlIHNpemUgb2YgdGhlIGlucHV0IGZpZWxkLgoqICUoYXR0cy1u YW1lKWlkJSAlKGF0dHMtdHlwZSlpbnQlIFRoZSBmaWVsZCBpZCB0aGlzIHRhZyByZXByZXNl bnRzLiBFLmcuIGlkPSIxIiBtYXRjaGVzIGZpZWxkIGN1c3RvbV8xCgoKaDModGFnI21vZF90 aXRsZV9pbnB1dCkuIG1vZF90aXRsZV9pbnB1dCBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3Vt bWFyeSkuIERpc3BsYXkgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciB0aGUgdGl0bGUuCgoqKGF0 dHMpICUoYXR0cy1uYW1lKWNsYXNzJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1MgY2xh c3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVkIEhUTUwgdGFnCiogJShh dHRzLW5hbWUpaXNpemUlICUoYXR0cy10eXBlKWludCUgVGhlIHNpemUgb2YgdGhlIGlucHV0 IGZpZWxkLgoKCmgzKHRhZyNtb2RfaW1hZ2VfaW5wdXQpLiBtb2RfaW1hZ2VfaW5wdXQgXyhk ZXByZWNhdGVkKV8KCnAodGFnLXN1bW1hcnkpLiBEaXNwbGF5IGEgdGV4dCBpbnB1dCBmaWVs ZCBmb3IgdGhlIGFydGljbGUgaW1hZ2UgZmllbGQuCgoqKGF0dHMpICUoYXR0cy1uYW1lKWNs YXNzJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1MgY2xhc3MgbmFtZSB0byBhc3NvY2lh dGUgd2l0aCB0aGUgb3V0cHV0dGVkIEhUTUwgdGFnCiogJShhdHRzLW5hbWUpaXNpemUlICUo YXR0cy10eXBlKWludCUgVGhlIHNpemUgb2YgdGhlIGlucHV0IGZpZWxkLgoKaDModGFnI21v ZF9rZXl3b3Jkc19pbnB1dCkuIG1vZF9rZXl3b3Jkc19pbnB1dCBfKGRlcHJlY2F0ZWQpXwoK cCh0YWctc3VtbWFyeSkuIERpc3BsYXkgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciB0aGUga2V5 d29yZHMuCgoqKGF0dHMpICUoYXR0cy1uYW1lKWNsYXNzJSAlKGF0dHMtdHlwZSlzdHJpbmcl IFRoZSBDU1MgY2xhc3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVkIEhU TUwgdGFnCiogJShhdHRzLW5hbWUpaXNpemUlICUoYXR0cy10eXBlKWludCUgVGhlIHNpemUg b2YgdGhlIGlucHV0IGZpZWxkLgoKaDModGFnI21vZF9ib2R5X2lucHV0KS4gbW9kX2JvZHlf aW5wdXQgXyhkZXByZWNhdGVkKV8KCnAodGFnLXN1bW1hcnkpLiBEaXNwbGF5IGEgdGV4dGFy ZWEgZmllbGQgZm9yIHRoZSBib2R5LgoKKihhdHRzKSAlKGF0dHMtbmFtZSljbGFzcyUgJShh dHRzLXR5cGUpc3RyaW5nJSBUaGUgQ1NTIGNsYXNzIG5hbWUgdG8gYXNzb2NpYXRlIHdpdGgg dGhlIG91dHB1dHRlZCBIVE1MIHRhZwoqICUoYXR0cy1uYW1lKXN0eWxlJSAlKGF0dHMtdHlw ZSlzdHJpbmclIFRoZSBDU1Mgc3R5bGUgYXR0cmlidXRlIHRvIGFwcGx5IHRvIHRoZSBpbnB1 dCBmaWVsZC4KCmgzKHRhZyNtb2RfYm9keV9odG1sX2lucHV0KS4gbW9kX2JvZHlfaHRtbF9p bnB1dCBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3VtbWFyeSkuIERpc3BsYXkgYSB0ZXh0YXJl YSBmaWVsZCBmb3IgdGhlIGJvZHlfaHRtbC4KCiooYXR0cykgJShhdHRzLW5hbWUpY2xhc3Ml ICUoYXR0cy10eXBlKXN0cmluZyUgVGhlIENTUyBjbGFzcyBuYW1lIHRvIGFzc29jaWF0ZSB3 aXRoIHRoZSBvdXRwdXR0ZWQgSFRNTCB0YWcKKiAlKGF0dHMtbmFtZSlzdHlsZSUgJShhdHRz LXR5cGUpc3RyaW5nJSBUaGUgQ1NTIHN0eWxlIGF0dHJpYnV0ZSB0byBhcHBseSB0byB0aGUg aW5wdXQgZmllbGQuCgpoMyh0YWcjbW9kX2V4Y2VycHRfaW5wdXQpLiBtb2RfZXhjZXJwdF9p bnB1dCBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3VtbWFyeSkuIERpc3BsYXkgYSB0ZXh0YXJl YSBmaWVsZCBmb3IgdGhlIGV4Y2VycHQuCgoqKGF0dHMpICUoYXR0cy1uYW1lKWNsYXNzJSAl KGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1MgY2xhc3MgbmFtZSB0byBhc3NvY2lhdGUgd2l0 aCB0aGUgb3V0cHV0dGVkIEhUTUwgdGFnCiogJShhdHRzLW5hbWUpc3R5bGUlICUoYXR0cy10 eXBlKXN0cmluZyUgVGhlIENTUyBzdHlsZSBhdHRyaWJ1dGUgdG8gYXBwbHkgdG8gdGhlIGlu cHV0IGZpZWxkLgoKaDModGFnI21vZF9leGNlcnB0X2h0bWxfaW5wdXQpLiBtb2RfZXhjZXJw dF9odG1sX2lucHV0IF8oZGVwcmVjYXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gRGlzcGxheSBh IHRleHRhcmVhIGZpZWxkIGZvciB0aGUgZXhjZXJwdF9odG1sLgoKKihhdHRzKSAlKGF0dHMt bmFtZSljbGFzcyUgJShhdHRzLXR5cGUpc3RyaW5nJSBUaGUgQ1NTIGNsYXNzIG5hbWUgdG8g YXNzb2NpYXRlIHdpdGggdGhlIG91dHB1dHRlZCBIVE1MIHRhZwoqICUoYXR0cy1uYW1lKXN0 eWxlJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1Mgc3R5bGUgYXR0cmlidXRlIHRvIGFw cGx5IHRvIHRoZSBpbnB1dCBmaWVsZC4KCmgzKHRhZyNtb2Rfbm90ZV9pbnB1dCkuIG1vZF9u b3RlX2lucHV0IF8oZGVwcmVjYXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gRGlzcGxheSBhIHRl eHRhcmVhIGZpZWxkIGZvciB0aGUgbm90ZSAodG8gdGhlIG1vZGVyYXRvcnMpCgoqKGF0dHMp ICUoYXR0cy1uYW1lKWNsYXNzJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBDU1MgY2xhc3Mg bmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb3V0cHV0dGVkIEhUTUwgdGFnCiogJShhdHRz LW5hbWUpc3R5bGUlICUoYXR0cy10eXBlKXN0cmluZyUgVGhlIENTUyBzdHlsZSBhdHRyaWJ1 dGUgdG8gYXBwbHkgdG8gdGhlIGlucHV0IGZpZWxkLiI7czozOiJtZDUiO3M6MzI6IjFkOTZk ZDZjYmI5NjZhMGI4Y2JjNGZjNDdjMmQ4ZDZjIjt9