# mem_moderation v0.7.4 # This plugin adds a generic moderation queue to Textpattern. A plugin can extend the moderation queue to support any type of content. # 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: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE0OiJtZW1fbW9kZXJhdGlvbiI7czo3OiJ2ZXJzaW9uIjtz OjU6IjAuNy40IjtzOjY6ImF1dGhvciI7czoxNDoiTWljaGFlbCBNYW5mcmUiO3M6MTA6ImF1 dGhvcl91cmkiO3M6MTg6Imh0dHA6Ly9tYW5mcmUubmV0LyI7czoxMToiZGVzY3JpcHRpb24i O3M6MTMyOiJUaGlzIHBsdWdpbiBhZGRzIGEgZ2VuZXJpYyBtb2RlcmF0aW9uIHF1ZXVlIHRv IFRleHRwYXR0ZXJuLiBBIHBsdWdpbiBjYW4gZXh0ZW5kIHRoZSBtb2RlcmF0aW9uIHF1ZXVl IHRvIHN1cHBvcnQgYW55IHR5cGUgb2YgY29udGVudC4iO3M6NDoidHlwZSI7aToxO3M6NDoi aGVscCI7czoxNTM3NjoiCTxoMSBjbGFzcz0idGl0bGUiPm1lbV9tb2RlcmF0aW9uIHBsdWdp bjwvaDE+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIHN1bW1hcnkiPlN1bW1hcnk8L2gyPgoKCTxw PlRoaXMgcGx1Z2luIGFkZHMgYSBnZW5lcmljIG1vZGVyYXRpb24gcXVldWUgdG8gVGV4dHBh dHRlcm4uIEEgcGx1Z2luIGNhbiBleHRlbmQgdGhlIG1vZGVyYXRpb24gcXVldWUgdG8gc3Vw cG9ydCBhbnkgdHlwZSBvZiBjb250ZW50LjwvcD4KCgk8aDIgY2xhc3M9InNlY3Rpb24gY29u dGFjdCI+QXV0aG9yIENvbnRhY3Q8L2gyPgoKCTxwPjxhIGhyZWY9Im1haWx0bzptbWFuZnJl QGdtYWlsLmNvbT9zdWJqZWN0PVRleHRwYXR0ZXJuJTIwbWVtX21vZGVyYXRpb24lMjBwbHVn aW4iPk1pY2hhZWwgTWFuZnJlPC9hPjxiciAvPgo8YSBocmVmPSJodHRwOi8vbWFuZnJlLm5l dCI+aHR0cDovL21hbmZyZS5uZXQ8L2E+PC9wPgoKCTxoMiBjbGFzcz0ic2VjdGlvbiBsaWNl bnNlIj5MaWNlbnNlPC9oMj4KCgk8cD5UaGlzIHBsdWdpbiBpcyBsaWNlbnNlZCB1bmRlciB0 aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2luZy9saWNlbnNlcy9pbmZv L0dQTHYyLmh0bWwiPkdQTHYyPC9hPi48L3A+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIGluc3Rh bGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9oMj4KCgk8cD48YSBocmVmPSIuL2luZGV4LnBocD9l dmVudD1tb2RlcmF0ZSZhbXA7c3RlcD1wcmVpbnN0YWxsIj5TdGFydCBJbnN0YWxsIFdpemFy ZDwvYT48L3A+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIHRhZ3MiPlRhZ3M8L2gyPgoKCTx1bD4K CQk8bGk+PGEgaHJlZj0iI21lbV9pZl9tb2RlcmF0aW9uIj5tZW1faWZfbW9kZXJhdGlvbjwv YT48L2xpPgoJCTxsaT48YSBocmVmPSIjbWVtX21vZGVyYXRpb25faW5mbyI+bWVtX21vZGVy YXRpb25faW5mbzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbW9kZXJhdGVfc3VibWlzc2lv bl9saXN0Ij5tb2RlcmF0ZV9zdWJtaXNzaW9uX2xpc3Q8L2E+PC9saT4KCQk8bGk+PGEgaHJl Zj0iI21lbV9pZl90eXBlIj5tZW1faWZfdHlwZTwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj bWVtX2lmX2RhdGEiPm1lbV9pZl9kYXRhPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNtZW1f bW9kZXJhdGlvbl9pZl9ncHMiPm1lbV9tb2RlcmF0aW9uX2lmX2dwczwvYT48L2xpPgoJCTxs aT48YSBocmVmPSIjbW9kX2lkIj5tb2RfaWQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI21v ZF9pdGVtX2lkIj5tb2RfaXRlbV9pZDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbW9kX3N1 Ym1pdHRlZCI+bW9kX3N1Ym1pdHRlZDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbW9kX3Vz ZXIiPm1vZF91c2VyPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNtb2RfZGVzYyI+bW9kX2Rl c2M8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI21vZF90eXBlIj5tb2RfdHlwZTwvYT48L2xp PgoJCTxsaT48YSBocmVmPSIjbW9kX2VtYWlsIj5tb2RfZW1haWw8L2E+PC9saT4KCQk8bGk+ PGEgaHJlZj0iI21vZF9kYXRhIj5tb2RfZGF0YTwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj bW9kX25vdGVfaW5wdXQiPm1vZF9ub3RlX2lucHV0PC9hPjwvbGk+Cgk8L3VsPgoKCTxoMyBj bGFzcz0idGFnIiBpZD0ibWVtX2lmX21vZGVyYXRpb24iPm1lbV9pZl9tb2RlcmF0aW9uPC9o Mz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkNvbmRpdGlvbmFsbHkgcGFyc2UgYSBibG9j ayBvZiB0ZXh0IGJhc2VkIHVwb24gdmFyaW91cyBjaGVja3MuPC9wPgoKCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmNoZWNrPC9zcGFuPiA8c3Bh biBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFR5cGUgb2YgY2hlY2sgdG8gcGVy Zm9ybS4gRWl0aGVyICYjODIxNjt0eXBlJiM4MjE3OywgJiM4MjE2O2RhdGEmIzgyMTc7IG9y ICYjODIxNjtncHMmIzgyMTc7PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+ bmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBOYW1l IG9mIHRoZSB0eXBlLCBkYXRhIGZpZWxkIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5HRVQ8L3Nw YW4+L1BPU1QgdmFyaWFibGUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+ dmFsdWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gVmFs dWUgdG8gY29tcGFyZSBhZ2FpbnN0IGZvciAmIzgyMTY7ZGF0YSYjODIxNzsgYW5kICYjODIx NjtncHMmIzgyMTc7IGNoZWNrcy48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1l IGRlbGltaXRlciI+dHlwZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5n PC9zcGFuPiBOYW1lIG9mIHRoZSBmb3JtIHRvIGlkZW50aWZ5IGl0c2VsZiB0byBib3VuZCBw bHVnaW4uPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtZW1fbW9kZXJhdGlv bl9pbmZvIj5tZW1fbW9kZXJhdGlvbl9pbmZvPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1h cnkiPk91dHB1dCBpbmZvcm1hdGlvbiBmcm9tIGEgbW9kZXJhdGVkIGl0ZW0uIFN1cHBvcnRl ZCBmaWVsZCBuYW1lcyBhcmUgJiM4MjE2O2lkJiM4MjE3OywgJiM4MjE2O2l0ZW1faWQmIzgy MTc7LCAmIzgyMTY7c3VibWl0dGVkJiM4MjE3OywgJiM4MjE2O3VzZXImIzgyMTc7LCAmIzgy MTY7ZGVzYyYjODIxNzssICYjODIxNjt0eXBlJiM4MjE3OywgJiM4MjE2O2VtYWlsJiM4MjE3 OyBhbmQgJiM4MjE2O2RhdGEmIzgyMTc7LjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5maWVsZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBGaWVsZCB0byBvdXRwdXQuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dHMtbmFtZSI+ZGF0YWZpZWxkPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0 cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSBmaWVsZCBmcm9tIHRoZSBlbmNvZGVkIGRhdGEu IEZpZWxkIG11c3QgYmUgJiM4MjE2O2RhdGEmIzgyMTc7LjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdHRzLW5hbWUiPmZvcm1hdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+ c3RyaW5nPC9zcGFuPiBBIHRpbWUgZm9ybWF0IHRvIHVzZWQgdG8gZGlzcGxheSB0aGUgc3Vi bWl0dGVkIHRpbWUuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtb2RlcmF0 ZV9zdWJtaXNzaW9uX2xpc3QiPm1vZGVyYXRlX3N1Ym1pc3Npb25fbGlzdDwvaDM+CgoJPHAg Y2xhc3M9InRhZy1zdW1tYXJ5Ij5UaGlzIHdpbGwgb3V0cHV0IGFuIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiB0ZXh0IGlucHV0IGZpZWxkIGFuZCB2YWxpZGF0ZXMgdGhlIHN1 Ym1pdHRlZCB2YWx1ZSBhcyBhbiBlbWFpbCBhZGRyZXNzLjwvcD4KCgk8dWwgY2xhc3M9ImF0 dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5mb3JtPC9zcGFuPiA8c3BhbiBj bGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFRoZSBmb3JtIGNvbnRhaW5pbmcgdGhl IGZvcm1hdHRpbmcgdGFncy4gSWYgc3BlY2lmaWVkLCB0YWcgZW5jbG9zZWQgdGV4dCBpcyBp Z25vcmVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnR5cGU8L3NwYW4+ IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gV2hlbiBzZXQsIHRoaXMg d2lsbCByZXN0cmljdCB0aGUgbGlzdCB0byBzcGVjaWZpYyB0eXBlcyBvZiBtb2RlcmF0ZWQg Y29udGVudC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj53cmFwdGFnPC9z cGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IDxzcGFuIGNsYXNz PSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgdG8gd3JhcCBhcm91bmQgdGhlIG91dHB1dC48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5icmVhazwvc3Bhbj4gPHNwYW4gY2xh c3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUZXh0L0hUTUwgdG8gc2VwYXJhdGUgZWFj aCBpdGVtIGluIHRoZSBsaXN0LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUi PmJyZWFrY2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bh bj4gPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZS48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBj bGFzcyBuYW1lLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnVzZXI8L3Nw YW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gUmVzdHJpY3QgdGhl IGxpc3QgdG8gc3BlY2lmaWVkIHVzZXJzLiBEZWZhdWx0cyB0byBsb2dnZWQgaW4gdXNlci48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5sYWJlbDwvc3Bhbj4gPHNwYW4g Y2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBUZXh0L0hUTUwgdGhhdCBwcmVjZWVk cyB0aGUgbGlzdC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5sYWJlbHdy YXB0YWc8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gPHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyB0byB3cmFwIGFyb3VuZCB0aGUgbGFi ZWwuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+bGFiZWxjbGFzczwvc3Bh bj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiA8c3BhbiBjbGFzcz0i Y2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyBuYW1lIGZvciBsYWJlbHdyYXB0YWcuPC9saT4KCTwv dWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtZW1faWZfdHlwZSI+bWVtX2lmX3R5cGUgPGVt PihkZXByZWNhdGVkKTwvZW0+PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkNvbmRp dGlvbmFsbHkgcGFyc2UgYSBibG9jayBvZiB0ZXh0IGJhc2VkIHVwb24gdGhlIGN1cnJlbnQg bW9kZXJhdGlvbiB0eXBlLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0cy1uYW1lIj5uYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5z dHJpbmc8L3NwYW4+IE5hbWUgb2YgdGhlIG1vZGVyYXRpb24gdG8gY29tcGFyZSBhZ2FpbnN0 LjwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0ibWVtX2lmX2RhdGEiPm1lbV9p Zl9kYXRhIDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1t YXJ5Ij5Db25kaXRpb25hbGx5IHBhcnNlIGJhc2VkIHVwb24gc3BlY2lmaWMgbW9kZXJhdGlv biBkYXRhLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0 cy1uYW1lIj5uYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3Nw YW4+IE5hbWUgb2YgdGhlIGRhdGEgZmllbGQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dHMtbmFtZSI+dmFsdWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwv c3Bhbj4gVmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiBJZiBibGFuaywgY2hlY2tzIGZvciBl eGlzdGFuY2UuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciIGlkPSJtZW1fbW9kZXJh dGlvbl9pZl9ncHMiPm1lbV9tb2RlcmF0aW9uX2lmX2dwcyA8ZW0+KGRlcHJlY2F0ZWQpPC9l bT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+Q29uZGl0aW9uYWxseSBwYXJzZSBi YXNlZCB1cG9uIGEgPHNwYW4gY2xhc3M9ImNhcHMiPkdFVDwvc3Bhbj4vUE9TVCB2YXJpYWJs ZS48L3A+CgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFt ZSI+bmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBO YW1lIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+R0VUPC9zcGFuPi9QT1NUIHZhcmlhYmxl LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnZhbHVlPC9zcGFuPiA8c3Bh biBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFZhbHVlIHRvIGNvbXBhcmUgYWdh aW5zdC4gSWYgYmxhbmssIGNoZWNrcyBmb3IgZXhpc3RhbmNlLjwvbGk+Cgk8L3VsPgoKCTxo MyBjbGFzcz0idGFnIiBpZD0ibW9kX2lkIj5tb2RfaWQgPGVtPihkZXByZWNhdGVkKTwvZW0+ PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPk91dHB1dCBtb2RlcmF0aW9uIGlkIGZp ZWxkLjwvcD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF9pdGVtX2lkIj5tb2RfaXRlbV9p ZCA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+ T3V0cHV0IG1vZGVyYXRpb24gaXRlbV9pZCBmaWVsZC48L3A+CgoJPGgzIGNsYXNzPSJ0YWci IGlkPSJtb2Rfc3VibWl0dGVkIj5tb2Rfc3VibWl0dGVkIDxlbT4oZGVwcmVjYXRlZCk8L2Vt PjwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5PdXRwdXQgbW9kZXJhdGlvbiBzdWJt aXR0ZWQgZmllbGQuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHRzLW5hbWUiPmZvcm1hdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3Ry aW5nPC9zcGFuPiBUaW1lIGZvcm1hdCBzdHJpbmcuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNz PSJ0YWciIGlkPSJtb2RfdXNlciI+bW9kX3VzZXIgPGVtPihkZXByZWNhdGVkKTwvZW0+PC9o Mz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPk91dHB1dCBtb2RlcmF0aW9uIHVzZXIgZmll bGQuPC9wPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0ibW9kX2Rlc2MiPm1vZF9kZXNjIDxlbT4o ZGVwcmVjYXRlZCk8L2VtPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5PdXRwdXQg bW9kZXJhdGlvbiBkZXNjIGZpZWxkLjwvcD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF90 eXBlIj5tb2RfdHlwZSA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0 YWctc3VtbWFyeSI+T3V0cHV0IG1vZGVyYXRpb24gdHlwZSBmaWVsZC48L3A+CgoJPGgzIGNs YXNzPSJ0YWciIGlkPSJtb2RfZW1haWwiPm1vZF9lbWFpbCA8ZW0+KGRlcHJlY2F0ZWQpPC9l bT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+T3V0cHV0IG1vZGVyYXRpb24gZW1h aWwgZmllbGQuPC9wPgoKCTxoMyBjbGFzcz0idGFnIiBpZD0ibW9kX2RhdGEiPm1vZF9kYXRh IDxlbT4oZGVwcmVjYXRlZCk8L2VtPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5P dXRwdXQgbW9kZXJhdGlvbiBkYXRhIGZpZWxkLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5uYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0i YXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IE5hbWUgb2YgdGhlIG1vZGVyYXRpb24gZGF0YSBm aWVsZC48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1vZF9ub3RlX2lucHV0 Ij5tb2Rfbm90ZV9pbnB1dCA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNz PSJ0YWctc3VtbWFyeSI+T3V0cHV0cyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gdGV4dGFyZWEgdG8gcHJvY2VzcyB0aGUgJiM4MjE2O25vdGUmIzgyMTc7IGZpZWxkLjwv cD4KCgk8aDMgY2xhc3M9InRhZyIgaWQ9Im1lbV9tb2RlcmF0aW9uX2VkaXRfbGluayI+bWVt X21vZGVyYXRpb25fZWRpdF9saW5rPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPk91 dHB1dCBhIHVzZXIgc2lkZSBsaW5rIHRvIGVkaXQgYSBzcGVjaWZpYyBtb2RlcmF0aW9uIGl0 ZW0uPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5h bWUiPmxhYmVsPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+ IEZyaWVuZGx5IG5hbWUgZm9yIHRoZSBpbnB1dCBmaWVsZC4gSWYgc2V0LCB0aGlzIHdpbGwg b3V0cHV0IGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiA8bGFiZWw+IHRhZyBs aW5rZWQgdG8gdGhlIGlucHV0IGZpZWxkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRz LW5hbWUiPm5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bh bj4gSW5wdXQgZmllbGQgbmFtZS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1l Ij5icmVhazwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBT ZXBhcmF0b3IgYmV0d2VlbiBsYWJlbCB0YWcgYW5kIGlucHV0IHRhZy48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5kZWxpbWl0ZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJh dHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gTGlzdCBzZXBhcmF0b3IuIERlZmF1bHQgJiM4MjIw OywmIzgyMjE7PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+aXRlbXM8L3Nw YW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gRGVsaW1pdGVkIGxp c3QgY29udGFpbmluZyBhIHNlbGVjdCBsaXN0IGRpc3BsYXkgdmFsdWVzLjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPnZhbHVlczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBEZWxpbWl0ZWQgbGlzdCBjb250YWluaW5nIGEgc2Vs ZWN0IGxpc3QgaXRlbSB2YWx1ZXMuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFt ZSI+cmVxdWlyZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPmludDwvc3Bhbj4g U3BlY2lmaWVzIGlmIGlucHV0IGlzIHJlcXVpcmVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHRzLW5hbWUiPnNlbGVjdGVkPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5z dHJpbmc8L3NwYW4+IFRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgaXRlbS48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5maXJzdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBEaXNwbGF5IHZhbHVlIG9mIHRoZSBmaXJzdCBpdGVt IGluIHRoZSBsaXN0LiBFLmcuICYjODIyMDtTZWxlY3QgYSBTZWN0aW9uJiM4MjIxOyBvciAm IzgyMjA7JiM4MjIxOyBmb3IgYSBibGFuayBvcHRpb24uPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dHMtbmFtZSI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0 cmluZzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZS48 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5leGNsdWRlPC9zcGFuPiA8c3Bh biBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IExpc3Qgb2YgaXRlbSB2YWx1ZXMg dGhhdCB3aWxsIG5vdCBiZSBpbmNsdWRlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0 cy1uYW1lIj5zb3J0PC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3Nw YW4+ICBIb3cgd2lsbCB0aGUgbGlzdCB2YWx1ZXMgYmUgc29ydGVkLjwvbGk+Cgk8L3VsPgoK CTxoMyBjbGFzcz0idGFnIiBpZD0ibW9kX2VkaXRfbGluayI+bW9kX2VkaXRfbGluayA8ZW0+ KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+U2VlIG1l bV9tb2RlcmF0aW9uX2VkaXRfbGluay48L3A+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIj5FeHBv c2VkIEZ1bmN0aW9uczwvaDI+CgoJPGgzIGNsYXNzPSJ0YWciPnJlZ2lzdGVyX21vZGVyYXRp b25fdHlwZSA8ZW0+KGRlcHJlY2F0ZWQpPC9lbT48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3Vt bWFyeSI+U2VlIG1lbV9tb2RlcmF0aW9uX3JlZ2lzdGVyLjwvcD4KCgk8aDMgY2xhc3M9InRh ZyI+bWVtX21vZGVyYXRpb25fcmVnaXN0ZXI8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFy eSI+UmVnaXN0ZXJzIGEgbW9kZXJhdGlvbiB0eXBlIHRvIGJlIHVzZWQgaW4gdGhlIG1vZGVy YXRpb24gcXVldWUuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHRzLW5hbWUiPnR5cGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmlu Zzwvc3Bhbj4gTW9kZXJhdGlvbiB0eXBlIG5hbWUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0dHMtbmFtZSI+dmFyczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+YXJyYXk8 L3NwYW4+IEFycmF5IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5HRVQ8L3NwYW4+L1BPU1QgdmFy aWFibGUgdXNlZCBieSB0aGlzIG1vZGVyYXRpb24gdHlwZS48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0cy1uYW1lIj5wcmVzZW50ZXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5 cGUiPnN0cmluZzwvc3Bhbj4gTmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnN0 cnVjdCBhIGZvcm0gdG8gZWRpdCB0aGUgcGx1Z2luIHNwZWNpZmljIGNvbnRlbnQuIFRoaXMg aXMgbmVlZGVkIHRvIGFsbG93IG1vZGVyYXRvcnMgdG8gZWRpdCBzdWJtaXR0ZWQgY29udGVu dC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5hcHByb3Zlcjwvc3Bhbj4g PHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBOYW1lIG9mIGNhbGxiYWNr IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpdGVtIGlzIG1hcmtlZCBh cyBhcHByb3ZlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5yZWplY3Rl cjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+c3RyaW5nPC9zcGFuPiBOYW1lIG9m IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpdGVtIGlz IG1hcmtlZCBhcyByZWplY3RlZC48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyI+c3Vi bWl0X21vZGVyYXRlZF9jb250ZW50PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPkFk ZHMgYW4gaXRlbSB0byB0aGUgbW9kZXJhdGlvbiBxdWV1ZS48L3A+CgoJPHVsIGNsYXNzPSJh dHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+UmV0dXJuIFZhbHVlPC9zcGFu PiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5ib29sPC9zcGFuPiBSZXR1cm5zIHRydWUgb3Ig ZmFsc2UsIGluZGljYXRpbmcgd2hldGhlciB0aGUgaXRlbSB3YXMgc3VjY2Vzc2Z1bGx5IGFk ZGVkIHRvIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHRzLW5hbWUiPnR5cGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwv c3Bhbj4gTW9kZXJhdGlvbiB0eXBlIG5hbWUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dHMtbmFtZSI+ZW1haWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmluZzwv c3Bhbj4gRW1haWwgb2Ygc3VibWl0dGluZyB1c2VyLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHRzLW5hbWUiPmRlc2M8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPnN0cmlu Zzwvc3Bhbj4gRGVzY3JpcHRpb24gb2YgbW9kZXJhdGVkIGl0ZW0gKG5vdGUgdG8gbW9kZXJh dGVyKS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5kYXRhPC9zcGFuPiA8 c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5taXhlZDwvc3Bhbj4gTW9kZXJhdGlvbiBzcGVjaWZp YyBkYXRhIHRvIGJlIGVuY29kZWQgYW5kIHN0b3JlZCB3aXRoIHRoZSBpdGVtLjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPml0ZW1faWQ8L3NwYW4+IDxzcGFuIGNsYXNz PSJhdHRzLXR5cGUiPmludDwvc3Bhbj4gKG9wdGlvbmFsKSBUaGUgSUQgb2YgYSBjb250ZW50 IGl0ZW0gbm90IGluIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiBVc2VkIGZvciB3aGVuIG1vZGVy YXRpbmcgZWRpdHMgb2YgcHVibGlzaGVkIGNvbnRlbnQuPC9saT4KCTwvdWw+CgoJPGgzIGNs YXNzPSJ0YWciPnVwZGF0ZV9tb2RlcmF0ZWRfY29udGVudDwvaDM+CgoJPHAgY2xhc3M9InRh Zy1zdW1tYXJ5Ij5VcGRhdGVzIGFuIGl0ZW0gaW4gdGhlIG1vZGVyYXRpb24gcXVldWUuPC9w PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPlJl dHVybiBWYWx1ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+Ym9vbDwvc3Bhbj4g UmV0dXJucyB0cnVlIG9yIGZhbHNlLCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGl0ZW0gd2Fz IHN1Y2Nlc3NmdWxseSB1cGRhdGUgaW4gdGhlIG1vZGVyYXRpb24gcXVldWUuPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+aWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRz LXR5cGUiPmludDwvc3Bhbj4gVGhlIElEIG9mIHRoZSBtb2RlcmF0ZWQgaXRlbS48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5kZXNjPC9zcGFuPiA8c3BhbiBjbGFzcz0i YXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IERlc2NyaXB0aW9uIG9mIG1vZGVyYXRlZCBpdGVt IChub3RlIHRvIG1vZGVyYXRlcikuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFt ZSI+ZGF0YTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+bWl4ZWQ8L3NwYW4+IE1v ZGVyYXRpb24gc3BlY2lmaWMgZGF0YSB0byBiZSBlbmNvZGVkIGFuZCBzdG9yZWQgd2l0aCB0 aGUgaXRlbS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj50eXBlPC9zcGFu PiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IChvcHRpb25hbCkgTW9k ZXJhdGlvbiB0eXBlIG5hbWUuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+ aXRlbV9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0dHMtdHlwZSI+aW50PC9zcGFuPiAob3B0 aW9uYWwpIFRoZSBJRCBvZiBhIGNvbnRlbnQgaXRlbSBub3QgaW4gdGhlIG1vZGVyYXRpb24g cXVldWUuIFVzZWQgZm9yIHdoZW4gbW9kZXJhdGluZyBlZGl0cyBvZiBwdWJsaXNoZWQgY29u dGVudC48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyI+cmVtb3ZlX21vZGVyYXRlZF9j b250ZW50PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPlJlbW92ZSBhbiBpdGVtIGZy b20gdGhlIG1vZGVyYXRpb24gcXVldWUuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPlJldHVybiBWYWx1ZTwvc3Bhbj4gPHNwYW4gY2xh c3M9ImF0dHMtdHlwZSI+Ym9vbDwvc3Bhbj4gUmV0dXJucyBib29sZWFuIHJlc3VsdCBvZiBy ZW1vdmUgb3BlcmF0aW9uLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmlk PC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0cy10eXBlJSI+aW50PC9zcGFuPiBJRCBvZiBtb2Rl cmF0ZWQgaXRlbS48L2xpPgoJPC91bD4KCgk8aDMgY2xhc3M9InRhZyI+bWVtX21vZGVyYXRp b25fZW5jb2RlPC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPlNlcmlhbGl6ZXMgbW9k ZXJhdGlvbiBkYXRhIGZvciBzdG9yYWdlLjwvcD4KCgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj5SZXR1cm4gVmFsdWU8L3NwYW4+IDxzcGFuIGNs YXNzPSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gUmV0dXJucyBhIHNlcmlhbGl6ZWQgc3Ry aW5nLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmNvbnRlbnQ8L3NwYW4+ IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUlIj5taXhlZDwvc3Bhbj4gVGhlIGRhdGEgdG8gc2Vy aWFsaXplLjwvbGk+Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIj5tZW1fbW9kZXJhdGlvbl9k ZWNvZGU8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGVzZXJpYWxpemVzIG1vZGVy YXRpb24gZGF0YSBmcm9tIHN0b3JhZ2UuPC9wPgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPlJldHVybiBWYWx1ZTwvc3Bhbj4gPHNwYW4gY2xh c3M9ImF0dHMtdHlwZSI+bWl4ZWQ8L3NwYW4+IFJldHVybnMgdGhlIGRhdGEuPC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+Y29udGVudDwvc3Bhbj4gPHNwYW4gY2xhc3M9 ImF0dHMtdHlwZSUiPnN0cmluZzwvc3Bhbj4gVGhlIHNlcmlhbGl6ZWQgY29udGVudC48L2xp PgoJPC91bD4KCgk8aDIgY2xhc3M9InNlY3Rpb24iPkdsb2JhbCBWYXJpYWJsZXM8L2gyPgoK CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPiRtZW1f bW9kX2luZm88L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPmFycmF5PC9zcGFuPiBB biBhcnJheSBjb250YWluaW5nIHRoZSBtb2RlcmF0aW9uIGluZm8uIENhbiBiZSB1c2VkIGJ5 IHRhZ3MgaW5zaWRlIG1vZGVyYXRlX3N1Ym1pc3Npb25fbGlzdC48L2xpPgoJPC91bD4KCgk8 aDIgY2xhc3M9InNlY3Rpb24iPlBsdWdpbiBFdmVudHM8L2gyPgoKCTxwPlRoaXMgbGlicmFy eSBhbGxvd3Mgb3RoZXIgcGx1Z2lucyB0byBob29rIGluIHRvIGV2ZW50cyB3aXRoIHRoZSA8 Y29kZT5tZW1fbW9kZXJhdGlvbl9yZWdpc3RlcjwvY29kZT4gZnVuY3Rpb24uIEFsbCBjYWxs YmFjayBmdW5jdGlvbnMgaGF2ZSB0aGUgc3RydWN0dXJlIG9mIGZ1bmMoJHR5cGUsICRkYXRh KSwgd2hlcmUgJHR5cGUgaXMgdGhlIHR5cGUgbmFtZSB0aGF0IGlzIGJlaW5nIHByb2Nlc3Nl ZCBhbmQgJGRhdGEgaXMgdGhlIHR5cGUgc3BlY2lmaWMgZGF0YSBhcHBlbmRlZCB0byB0aGUg cGx1Z2luLjwvcD4KCgk8aDMgY2xhc3M9ImV2ZW50Ij5wcmVzZW50ZXI8L2gzPgoKCTxwIGNs YXNzPSJldmVudC1zdW1tYXJ5Ij5BIHN1Ym1pdHRlZCBpdGVtIGlzIGJlaW5nIHZpZXdlZCBi eSBhIG1vZGVyYXRvciBhbmQgdGhlIHBsdWdpbiYjODIxNztzIHByZXNlbnRlciBoYW5kbGVy IHNob3VsZCByZXR1cm4gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGZvcm1hdHRl ZCBmb3JtIGZpZWxkcyB0byBlbmFibGUgdGhlIG1vZGVyYXRvciB0byBlZGl0IHRoZSBkYXRh IChubyBmb3JtIHRhZyBvciBidXR0b25zKS48L3A+CgoJPGgzIGNsYXNzPSJldmVudCI+YXBw cm92ZXI8L2gzPgoKCTxwIGNsYXNzPSJldmVudC1zdW1tYXJ5Ij4gc3VibWl0dGVkIGl0ZW0g aGFzIGJlZW4gYXBwcm92ZWQgYW5kIHRoZSBwbHVnaW4mIzgyMTc7cyBhcHByb3ZlciBoYW5k bGVyIHNob3VsZCBzdWJtaXQgJGRhdGEgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIHdoZXJl IGxpdmUgY29udGVudCByZXNpZGVzLjwvcD4KCgk8aDMgY2xhc3M9ImV2ZW50Ij5yZWplY3Rl cjwvaDM+CgoJPHAgY2xhc3M9ImV2ZW50LXN1bW1hcnkiPkEgc3VibWl0dGVkIGl0ZW0gaGFz IGJlZW4gcmVqZWN0ZWQgYW5kIGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuPC9w PiI7czo0OiJjb2RlIjtzOjMwOTE5OiIKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFBsdWdpbiBtZW1fbW9kZXJhdGlv bgovLyBBdXRob3I6IE1pY2hhZWwgTWFuZnJlIChodHRwOi8vbWFuZnJlLm5ldC8pCi8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LwoKLy8gdGhlIG51bWJlciBvZiBkYXlzIHRoYXQgYSBuZXdseSBzdWJtaXR0ZWQgaXRlbSB3 aWxsIHdhaXQKLy8gYmVmb3JlIGFwcGVhcmluZyBpbiB0aGUgbW9kZXJhdGlvbiBxdWV1ZS4g MCB3aWxsIGRpc2FibGUKLy9kZWZpbmUoJ1FVRVVFX1NVQk1JU1NJT05fREVMQVknLCAiMCIp OwoKLy8gU3BlY2lmeSB3aGV0aGVyIHVzZXJzIHdpdGggUHVibGlzaGVyIHByaXZzIHdpbGwg aGF2ZSB0aGVpcgovLyBzdWJtaXR0ZWQgY29udGVudCBhcHBlYXIgaW1tZWRpYXRseSBpbiB0 aGUgbGlzdCB3aXRob3V0Ci8vIHdhaXRpbmcgZm9yIHRoZSBRVUVVRV9TVUJNSVNTSU9OX0RF TEFZCi8vZGVmaW5lKCdQVUJMSVNIRVJTX0JZUEFTU19RVUVVRV9ERUxBWScsIHRydWUpOwoK Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KLy8gRG8gbm90IG1vZGlmeSBiZWxvdyB0aGlzIGxpbmUKCgovLyBNTFAgc3VwcG9y dApkZWZpbmUoICdNRU1fTU9ERVJBVElPTl9QUkVGSVgnICwgJ21lbV9tb2RlcmF0aW9uJyAp OwpnbG9iYWwgJG1lbV9tb2RlcmF0aW9uX2xhbmc7CiRtZW1fbW9kZXJhdGlvbl9sYW5nID0g YXJyYXkoCgknaWRfbm90X2ZvdW5kJwk9PiAiTW9kZXJhdGlvbiBJRCB7aWR9IG5vdCBmb3Vu ZC4iLAoJJ2luc3RhbGxfbG9nJwk9PiAiSW5zdGFsbCBMb2ciLAoJJ2ludmFsaWRfYXJnJwk9 PiAiVGhlIGFyZ3VtZW50IHthcmd9IGlzIGludmFsaWQuIiwKCSdtaXNzaW5nX2FyZycJPT4g IlRoZSBhdHRyaWJ1dGUge2FyZ30gaXMgcmVxdWlyZWQgYW5kIHdhcyBub3QgcHJvdmlkZWQu IiwKCSdyZW1vdmVfZmFpbGVkJwk9PiAiRmFpbGVkIHRvIHJlbW92ZSBJRCB7aWR9IGZyb20g cXVldWUuIiwKCSduZXdfc3VibWlzc2lvbl9lbWFpbCcJPT4gIlRoZSB1c2VyIHt1c2VyfSBo YXMgc3VibWl0dGVkIGEgcmVxdWVzdCBvZiB0eXBlIHt0eXBlfSB0byB0aGUgbW9kZXJhdGlv biBxdWV1ZS4iLAoJJ25ld19zdWJtaXNzaW9uX2VtYWlsX3N1YmplY3QnCT0+ICJNb2RlcmF0 aW9uIFF1ZXVlIiwKCSd1cGRhdGVfc3VibWlzc2lvbl9lbWFpbCcJPT4gIlRoZSB1c2VyIHt1 c2VyfSBoYXMgdXBkYXRlZCB0aGVpciByZXF1ZXN0IG9mIHR5cGUge3R5cGV9IHRvIHRoZSBt b2RlcmF0aW9uIHF1ZXVlLiIsCgkndXBkYXRlX3N1Ym1pc3Npb25fZW1haWxfc3ViamVjdCcJ PT4gIk1vZGVyYXRpb24gUXVldWUiLAoKCSd0YWJsZV9hY2Nlc3NfZmFpbGVkJwk9PgkiRXJy b3IgYWNjZXNzaW5nIHRoZSBkYXRhYmFzZSB0YWJsZS4ge2Vycn0iLAoKCS8vIGluc3RhbGxh dGlvbgoJJ2FkZF9pdGVtX2ZpZWxkJwk9PiAnQWRkZWQgaXRlbV9pZCBmaWVsZCB0byBtb2Rl cmF0aW9uIHRhYmxlLicsCgknYWRkX2l0ZW1fZmllbGRfZmFpbGVkJwk9PiAnRmFpbGVkIHRv IGFkZCBmaWVsZCAiaXRlbV9pZCIgdG8gbW9kZXJhdGlvbiB0YWJsZS4nLAoJJ3RhYmxlX2Ny ZWF0ZWQnCT0+ICJDcmVhdGVkIHRhYmxlIHtuYW1lfSIsCgkndGFibGVfY3JlYXRlX2ZhaWxl ZCcJPT4gIkZhaWxlZCB0byBjcmVhdGUgbW9kZXJhdGlvbiB0YWJsZS4ge215c3FsX2Vycm9y fSIsCgkndGFibGVfZXhpc3RzJwk9PiAnTW9kZXJhdGlvbiB0YWJsZSBhbHJlYWR5IGV4aXN0 cycsCgknZm9ybV9mb3VuZCcJPT4gIkZvdW5kIGZvcm0gJ3tmb3JtfScuIFNraXBwaW5nIGlu c3RhbGxhdGlvbiBvZiBkZWZhdWx0IGZvcm0uIiwKCSdmb3JtX2NyZWF0ZWQnCT0+ICJDcmVh dGVkIGRlZmF1bHQgZm9ybSAne2Zvcm19JyIsCgknZm9ybV9jcmVhdGVfZmFpbCcJPT4gIkZh aWxlZCB0byBjcmVhdGUgZm9ybSAne2Zvcm19Jy4ge215c3FsX2Vycm9yfSIsCgknc2tpcHBp bmdfZm9ybV9pbnN0YWxsJwk9PiAiU2tpcHBpbmcgaW5zdGFsbGF0aW9uIG9mIGRlZmF1bHQg Zm9ybXMiLAoJJ3NldF9wcmVmJwk9PiAnU2V0IHByZWZlcmVuY2Uge25hbWV9JywKCSdzZXRf cHJlZl9mYWlsZWQnCT0+ICdGYWlsZWQgdG8gc2V0IHByZWZlcmVuY2Uge25hbWV9JywKCSdz ZXRfcHJlZl9leGlzdHMnCT0+ICdQcmVmZXJlbmNlIHtuYW1lfSBhbHJlYWR5IGV4aXN0cy4n LAoKCSdtZW1fbW9kZXJhdGknCT0+CSdNb2RlcmF0aW9uIFBsdWdpbicsCgoJLy8gcHJlZnMK CSdtZW1fbW9kX2VtYWlsX29uX25ldycJPT4JJ0VtYWlsIG9uIG5ldyBjb250ZW50PycsCgkn bWVtX21vZF9lbWFpbF9vbl91cGRhdGUnCT0+CSdFbWFpbCBvbiBjb250ZW50IHVwZGF0ZT8n LAoJJ21lbV9tb2Rfbm90aWZ5X2VtYWlsJwk9PgknTm90aWZpY2F0aW9uIEVtYWlsIEFkZHJl c3MnLAoJJ21lbV9tb2RfcXVldWVfZGVsYXknCT0+CSdRdWV1ZSBEZWxheSAoZGF5cyknLAoJ J21lbV9tb2RfbXVsdGllZGl0X2FwcHJvdmUnCT0+CSdFbmFibGUgTXVsdGktZWRpdCBhcHBy b3ZhbD8nLAopOwoKcmVnaXN0ZXJfY2FsbGJhY2soJ2ZpeF9sYW5nJywgJ3ByZWZzJywgJycs IDEpOwpmdW5jdGlvbiBmaXhfbGFuZygpCnsKCWdsb2JhbCAkbWVtX21vZGVyYXRpb25fbGFu ZywgJHRleHRhcnJheSwgJGxvY2FsZTsKCWlmIChzdHJuY2FzZWNtcCgnZW4nLCAkbG9jYWxl LCAyKSAhPSAwKQoJCXJldHVybjsKCglmb3JlYWNoICgkbWVtX21vZGVyYXRpb25fbGFuZyBh cyAkayA9PiAkdikKCXsKCQkkdGV4dGFycmF5WyRrXSA9ICR2OwoJfQp9CgpyZWdpc3Rlcl9j YWxsYmFjayggJ21lbV9tb2RlcmF0aW9uX2VudW1lcmF0ZV9zdHJpbmdzJyAsICdsMTBuLmVu dW1lcmF0ZV9zdHJpbmdzJyApOwpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9lbnVtZXJhdGVf c3RyaW5ncygkZXZlbnQgLCAkc3RlcD0nJyAsICRwcmU9MCkKewoJZ2xvYmFsICRtZW1fbW9k ZXJhdGlvbl9sYW5nOwoJJHIgPSBhcnJheQkoCgkJCQknb3duZXInCQk9PiAnbWVtX21vZGVy YXRpb24nLAkJCSMJQ2hhbmdlIHRvIHlvdXIgcGx1Z2luJ3MgbmFtZQoJCQkJJ3ByZWZpeCcJ PT4gTUVNX01PREVSQVRJT05fUFJFRklYLAkJCQkjCUl0cyB1bmlxdWUgc3RyaW5nIHByZWZp eAoJCQkJJ2xhbmcnCQk9PiAnZW4tZ2InLAkJCQkJCSMJVGhlIGxhbmd1YWdlIG9mIHRoZSBp bml0aWFsIHN0cmluZ3MuCgkJCQknZXZlbnQnCQk9PiAncHVibGljJywJCQkJCSMJcHVibGlj L2FkbWluL2NvbW1vbiA9IHdoaWNoIGludGVyZmFjZSB0aGUgc3RyaW5ncyB3aWxsIGJlIGxv YWRlZCBpbnRvCgkJCQknc3RyaW5ncycJPT4gJG1lbV9tb2RlcmF0aW9uX2xhbmcsCQkjCVRo ZSBzdHJpbmdzIHRoZW1zZWx2ZXMuCgkJCQkpOwoJcmV0dXJuICRyOwp9CmZ1bmN0aW9uIG1l bV9tb2RlcmF0aW9uX2dUeHQoJHdoYXQsJGFyZ3MgPSBhcnJheSgpKQp7CglnbG9iYWwgJG1l bV9tb2RlcmF0aW9uX2xhbmcsICR0ZXh0YXJyYXk7CgoJJGtleSA9IHN0cnRvbG93ZXIoIE1F TV9NT0RFUkFUSU9OX1BSRUZJWCAuICctJyAuICR3aGF0ICk7CgoJaWYgKGlzc2V0KCR0ZXh0 YXJyYXlbJGtleV0pKQoJewoJCSRzdHIgPSAkdGV4dGFycmF5WyRrZXldOwoJfQoJZWxzZQoJ ewoJCSRrZXkgPSBzdHJ0b2xvd2VyKCR3aGF0KTsKCgkJaWYgKGlzc2V0KCRtZW1fbW9kZXJh dGlvbl9sYW5nWyRrZXldKSkKCQkJJHN0ciA9ICRtZW1fbW9kZXJhdGlvbl9sYW5nWyRrZXld OwoJCWVsc2VpZiAoaXNzZXQoJHRleHRhcnJheVska2V5XSkpCgkJCSRzdHIgPSAkdGV4dGFy cmF5WyRrZXldOwoJCWVsc2UKCQkJJHN0ciA9ICR3aGF0OwoJfQoKCWlmKCAhZW1wdHkoJGFy Z3MpICkKCQkkc3RyID0gc3RydHIoICRzdHIgLCAkYXJncyApOwoKCXJldHVybiAkc3RyOwp9 CgoKCmdsb2JhbCAkbW9kX2V2ZW50LCAkbWVtX21vZGVyYXRpb25fbGFuZywgJHByZWZzOwok bW9kX2V2ZW50ID0gJ21vZGVyYXRlJzsKCnJlcXVpcmVfcGx1Z2luKCdtZW1fYWRtaW5fcGFy c2UnKTsKLy8gbWFrZSBzdXJlIGlnbiBpcyBsb2FkZWQgZmlyc3QsIGlmIGl0IGV4aXN0cwpA bG9hZF9wbHVnaW4oJ2lnbl9wYXNzd29yZF9wcm90ZWN0Jyk7Ci8vIG1pZ2h0IG5lZWQgYWNj ZXNzIHRvIGlnbiB1c2VyIHRhYmxlCkBsb2FkX3BsdWdpbignbWVtX3NlbGZfcmVnaXN0ZXIn KTsKCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi8vIFRhZ3MKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqIFNob3cgYSBzdWJtaXNz aW9uIGxpc3QuIFVzZXIgcHJvZmlsZSBwYWdlLiAqLwpmdW5jdGlvbiBtb2RlcmF0ZV9zdWJt aXNzaW9uX2xpc3QoJGF0dHMsJHRoaW5nPScnKQp7CglnbG9iYWwgJHN0ZXAsJGxpbmtfbGlz dF9wYWdlYnksJG1vZF9ldmVudCwkdHhwX3VzZXIsJGlnbl91c2VyOwoKCS8vIHRyeSBsb29r aW5nIGZvciB1c2VyIGZyb20gaWduX3Bhc3N3b3JkX3Byb3RlY3QgcGx1Z2luCglpZiAoaXNz ZXQoJGlnbl91c2VyKSBhbmQgZW1wdHkoJHR4cF91c2VyKSkgJHR4cF91c2VyID0gJGlnbl91 c2VyOwoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJCSdsaW1pdCcJCT0+CTUsCgkJCSdmb3Jt JwkJPT4JJycsCgkJCSd0eXBlJwkJPT4JJycsCgkJCSd3cmFwdGFnJwk9PgknZGl2JywKCQkJ J2JyZWFrJwkJPT4JJ2JyJywKCQkJJ2JyZWFrY2xhc3MnCT0+CSdtb2RfbGlzdGl0ZW0nLAoJ CQknY2xhc3MnCQk9PgknbW9kX2xpc3QnLAoJCQkndXNlcicJCT0+CSR0eHBfdXNlciwKCQkJ J2xhYmVsJwkJPT4JJycsCgkJCSdsYWJlbHdyYXB0YWcnCT0+CScnLAoJCQknbGFiZWxjbGFz cycJPT4JJ21vZGVyYXRlX2xpc3RfbGFiZWwnCgkpLCRhdHRzKSk7CgoJZXh0cmFjdChnZXRf cHJlZnMoKSk7CgkkRm9ybSA9ICFlbXB0eSgkZm9ybSkgPyBmZXRjaF9mb3JtKCRmb3JtKSA6 ICR0aGluZzsKCgkkdXNlciA9IGRvU2xhc2goJHVzZXIpOwoJJHR5cGUgPSBkb1NsYXNoKCR0 eXBlKTsKCgkkd2hlcmUgPSAiYHVzZXJgIExJS0UgJ3skdXNlcn0nIjsKCWlmICghZW1wdHko JHR5cGUpKQoJCSR3aGVyZSAuPSAiIEFORCBgdHlwZWAgTElLRSAneyR0eXBlfSciOwoJJHdo ZXJlIC49ICIgT1JERVIgQlkgYHN1Ym1pdHRlZGAiOwoKCSRycyA9IHNhZmVfcm93c19zdGFy dCgnKicsJ3R4cF9tb2RlcmF0aW9uJywkd2hlcmUpOwoKCglpZiAoJHJzKQoJewoJCSRvdXQg PSBhcnJheSgpOwoKCQl3aGlsZSAoJHIgPSBuZXh0Um93KCRycykpCgkJewoJCQkkR0xPQkFM U1snbWVtX21vZF9pbmZvJ10gPSAkcjsKCQkJJG91dFtdID0gYWRtaW5fcGFyc2UoJEZvcm0p OwoKCQkJLy8gY2xlYW4gdXAgZ2xvYmFsCgkJCXVuc2V0KCRHTE9CQUxTWydtZW1fbW9kX2lu Zm8nXSk7CgkJfQoKCQkkaXRlbXMgPSAnJzsKCgkJaWYgKGNvdW50KCRvdXQpID4gMCAmJiAh ZW1wdHkoJGxhYmVsKSkKCQl7CgkJCSRpdGVtcyA9IGRvVGFnKCRsYWJlbCwkbGFiZWx3cmFw dGFnLCRsYWJlbGNsYXNzKTsKCQl9CgoJCXJldHVybiAkaXRlbXMgLiBkb1dyYXAoJG91dCwk d3JhcHRhZywkYnJlYWssJGNsYXNzLCRicmVha2NsYXNzKTsKCX0KCglyZXR1cm4gJyc7Cn0K CmZ1bmN0aW9uIG1vZF9ub3RlX2lucHV0KCRhdHRzKSB7Cgl0cmlnZ2VyX2Vycm9yKGdUeHQo J2RlcHJlY2F0ZWRfZnVuY3Rpb25fd2l0aCcsIGFycmF5KCd7bmFtZX0nID0+IF9fRlVOQ1RJ T05fXywgJ3t3aXRofScgPT4gJ21lbV9mb3JtX3RleHRhcmVhJykpLCBFX1VTRVJfTk9USUNF KTsKCWdsb2JhbCAkbWVtX21vZF9pbmZvOwoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknc3R5 bGUnCT0+CScnLAoJCSdjbGFzcycJPT4JX19GVU5DVElPTl9fCgkpLCRhdHRzKSk7CglyZXR1 cm4gJzx0ZXh0YXJlYSBuYW1lPSJub3RlIicuKCFlbXB0eSgkc3R5bGUpPycgc3R5bGU9Iicu JHN0eWxlLiciJzonJykuCgkJCSghZW1wdHkoJGNsYXNzKT8nIGNsYXNzPSInLiRjbGFzcy4n Iic6JycpLic+Jy4KCQkJaHRtbHNwZWNpYWxjaGFycyhAJG1lbV9tb2RfaW5mb1snbm90ZSdd KS4nPC90ZXh0YXJlYT4nOwp9CgpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9lZGl0X2xpbmso JGF0dHMsICR0aGluZykKewoJZ2xvYmFsICRtb2RfZXZlbnQsJG1lbV9tb2RfaW5mbzsKCWV4 dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2Jhc2V1cmwnCT0+ICRfU0VSVkVSWydSRVFVRVNUX1VS SSddCgkpLCRhdHRzKSk7CgoJJGVsaW5rID0gJzxhIGhyZWY9IicuJGJhc2V1cmwuJz9ldmVu dD0nLiRtb2RfZXZlbnQuJyZzdGVwPScuJG1lbV9tb2RfaW5mb1sndHlwZSddLidfZWRpdCZt b2RpZD0nLiRtZW1fbW9kX2luZm9bJ2lkJ10uJyI+Jy5hZG1pbl9wYXJzZSgkdGhpbmcpLic8 L2E+JzsKCXJldHVybiAkZWxpbms7Cn0KZnVuY3Rpb24gbW9kX2VkaXRfbGluaygkYXR0cywk dGhpbmcpCnsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93aXRo JywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVtX21v ZGVyYXRpb25fZWRpdF9saW5rJykpLCBFX1VTRVJfTk9USUNFKTsKCXJldHVybiBtZW1fbW9k ZXJhdGlvbl9lZGl0X2xpbmsoJGF0dHMsICR0aGluZyk7Cn0KCi8qKiBUYWcgdG8gRGlzcGxh eSBtb2RlcmF0aW9uIGluZm8uICovCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2luZm8oJGF0 dHMpCnsKCWdsb2JhbCAkbWVtX21vZF9pbmZvLCAkcHJlZnM7CgoJZXh0cmFjdChsQXR0cyhh cnJheSgKCQknZGF0YWZpZWxkJwk9PiAnJywKCQknZmllbGQnCQk9PiAnJywKCQknZm9ybWF0 Jwk9PiAkcHJlZnNbJ2FyY2hpdmVfZGF0ZWZvcm1hdCddCgkpLCRhdHRzKSk7CgoJaWYgKGVt cHR5KCRmaWVsZCkpCgl7CgkJdHJpZ2dlcl9lcnJvcihtZW1fbW9kZXJhdGlvbl9nVHh0KCdt aXNzaW5nX2FyZycsIGFycmF5KCd7YXJnfScgPT4gJ2ZpZWxkJykpLCBFX1VTRVJfTk9USUNF KTsKCX0KCgkkb3V0ID0gJyc7CgoJaWYgKGlzc2V0KCRtZW1fbW9kX2luZm9bJGZpZWxkXSkp Cgl7CgkJaWYgKCRmaWVsZCA9PSAnc3VibWl0dGVkJykKCQl7CgkJCSR0aW1lID0gc3RydG90 aW1lKCRtZW1fbW9kX2luZm9bJ3N1Ym1pdHRlZCddKTsKCQkJJG91dCA9IHNhZmVfc3RyZnRp bWUoJGZvcm1hdCwgJHRpbWUpOwoJCX0KCQllbHNlIGlmICgkZmllbGQgPT0gJ2RhdGEnKQoJ CXsKCQkJJGRhdGEgPSBtZW1fbW9kZXJhdGlvbl9kZWNvZGUoJG1lbV9tb2RfaW5mb1snZGF0 YSddKTsKCgkJCWlmIChpc19hcnJheSgkZGF0YSkgYW5kIGFycmF5X2tleV9leGlzdHMoJGRh dGFmaWVsZCwgJGRhdGEpKQoJCQl7CgkJCQkkb3V0ID0gJGRhdGFbJGRhdGFmaWVsZF07CgkJ CX0KCQkJZWxzZQoJCQl7CgkJCQl0cmlnZ2VyX2Vycm9yKG1lbV9tb2RlcmF0aW9uX2dUeHQo J2ludmFsaWRfYXJnJywgYXJyYXkoJ3thcmd9JyA9PiAnZGF0YWZpZWxkJykpLCBFX1VTRVJf Tk9USUNFKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlpZiAoaXNzZXQoJG1lbV9tb2RfaW5m b1skZmllbGRdKSkKCQkJewoJCQkJJG91dCA9ICRtZW1fbW9kX2luZm9bJGZpZWxkXTsKCQkJ fQoJCQllbHNlCgkJCXsKCQkJCXRyaWdnZXJfZXJyb3IobWVtX21vZGVyYXRpb25fZ1R4dCgn aW52YWxpZF9hcmcnLCBhcnJheSgne2FyZ30nID0+ICdmaWVsZCcpKSwgRV9VU0VSX05PVElD RSk7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIG1lbV9pZl9tb2Rl cmF0aW9uKCRhdHRzLCAkdGhpbmcpCnsKCWdsb2JhbCAkbWVtX21vZF9pbmZvOwoKCWV4dHJh Y3QobEF0dHMoYXJyYXkoCgkJJ2NoZWNrJwk9PiAndHlwZScsCgkJJ25hbWUnCT0+ICcnLAoJ CSd2YWx1ZScJPT4gJycsCgkJJ2RlbGltaXRlcicJPT4gJywnLAoJKSwgJGF0dHMpKTsKCglp ZiAoZW1wdHkoJG5hbWUpKQoJewoJCXRyaWdnZXJfZXJyb3IobWVtX21vZGVyYXRpb25fZ1R4 dCgnbWlzc2luZ19hcmcnLCBhcnJheSgne2FyZ30nID0+ICduYW1lJykpLCBFX1VTRVJfTk9U SUNFKTsKCQlyZXR1cm4gJyc7Cgl9CgoJc3dpdGNoIChzdHJ0b2xvd2VyKCRjaGVjaykpCgl7 CgkJY2FzZSAndHlwZSc6CgkJCS8vIGNoZWNrIGlmIGFueSBvZiB0aGUgcHJvdmlkZWQgdHlw ZXMgbWF0Y2guCgkJCSR0eXBlcyA9IGFycmF5X2ZsaXAoc3BsaXQoJGRlbGltaXRlciwgJG5h bWUpKTsKCgkJCSRjb25kID0gYXJyYXlfa2V5X2V4aXN0cygkbWVtX21vZF9pbmZvWyd0eXBl J10sICR0eXBlcyk7CgkJCWJyZWFrOwoJCWNhc2UgJ2dwcyc6CgkJCSRnID0gZ3BzKCRuYW1l KTsKCgkJCS8vIHRydWUgaWYgbWF0Y2hlcyB2YWx1ZSBvciBpZiBzZXQgd2hlbiB2YWx1ZSBp cyBlbXB0eQoJCQkkY29uZCA9IChlbXB0eSgkdmFsdWUpICYmICFlbXB0eSgkZykpIG9yICgh ZW1wdHkoJHZhbHVlKSAmJiBzdHJjYXNlY21wKCRnLCAkdmFsdWUpID09IDApOwoJCQlicmVh azsKCQljYXNlICdkYXRhJzoKCQkJJGRhdGEgPSBtZW1fbW9kZXJhdGlvbl9kZWNvZGUoJG1l bV9tb2RfaW5mb1snZGF0YSddKTsKCgkJCS8vIGV4aXN0cz8KCQkJJGNvbmQgPSBpc19hcnJh eSgkZGF0YSkgYW5kIGFycmF5X2tleV9leGlzdHMoJG5hbWUsICRkYXRhKSBhbmQgIWVtcHR5 KCRkYXRhWyRuYW1lXSk7CgoJCQlpZiAoJGNvbmQgJiYgIWVtcHR5KCR2YWx1ZSkpCgkJCXsK CQkJCSRjb25kID0gc3RyY2FzZWNtcCgkZGF0YVskbmFtZV0sICR2YWx1ZSkgPT0gMDsKCQkJ fQoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQl0cmlnZ2VyX2Vycm9yKG1lbV9tb2RlcmF0aW9u X2dUeHQoJ2ludmFsaWRfY2hlY2snLCBhcnJheSgne2NoZWNrfScgPT4gJGNoZWNrKSksIEVf VVNFUl9OT1RJQ0UpOwoJCQlyZXR1cm4gJyc7Cgl9CgoJcmV0dXJuIGFkbWluX3BhcnNlKEV2 YWxFbHNlKCR0aGluZywgJGNvbmQpKTsKfQoKZnVuY3Rpb24gbW9kX2lmX3R5cGUoJGF0dHMs JHRoaW5nKSB7Cgl0cmlnZ2VyX2Vycm9yKGdUeHQoJ2RlcHJlY2F0ZWRfZnVuY3Rpb25fd2l0 aCcsIGFycmF5KCd7bmFtZX0nID0+IF9fRlVOQ1RJT05fXywgJ3t3aXRofScgPT4gJ21lbV9p Zl9tb2RlcmF0aW9uJykpLCBFX1VTRVJfTk9USUNFKTsKCXJldHVybiBtZW1faWZfbW9kZXJh dGlvbihhcnJheSgKCQkJCQkJJ2NoZWNrJwk9PiAndHlwZScsCgkJCQkJCSduYW1lJyA9PiBA JGF0dHNbJ25hbWUnXQoJCQkJCSksICR0aGluZyk7Cn0KZnVuY3Rpb24gbW9kX2lmX2RhdGEo JGF0dHMsJHRoaW5nKSB7Cgl0cmlnZ2VyX2Vycm9yKGdUeHQoJ2RlcHJlY2F0ZWRfZnVuY3Rp b25fd2l0aCcsIGFycmF5KCd7bmFtZX0nID0+IF9fRlVOQ1RJT05fXywgJ3t3aXRofScgPT4g J21lbV9pZl9tb2RlcmF0aW9uJykpLCBFX1VTRVJfTk9USUNFKTsKCXJldHVybiBtZW1faWZf bW9kZXJhdGlvbihhcnJheSgKCQkJCQkJJ2NoZWNrJwk9PiAnZGF0YScsCgkJCQkJCSduYW1l Jwk9PiBAJGF0dHNbJ25hbWUnXSwKCQkJCQkJJ3ZhbHVlJwk9PiBAJGF0dHNbJ3ZhbHVlJ10K CQkJCQkpLCAkdGhpbmcpOwp9CmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX2lmX2dwcygkYXR0 cywkdGhpbmcpIHsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93 aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVt X2lmX21vZGVyYXRpb24nKSksIEVfVVNFUl9OT1RJQ0UpOwoJcmV0dXJuIG1lbV9pZl9tb2Rl cmF0aW9uKGFycmF5KAoJCQkJCQknY2hlY2snCT0+ICdncHMnLAoJCQkJCQknbmFtZScJPT4g QCRhdHRzWyduYW1lJ10sCgkJCQkJCSd2YWx1ZScJPT4gQCRhdHRzWyd2YWx1ZSddCgkJCQkJ KSwgJHRoaW5nKTsKfQpmdW5jdGlvbiBtb2RfaWQoJGF0dHMpIHsKCXRyaWdnZXJfZXJyb3Io Z1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19G VU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVtX21vZGVyYXRpb25faW5mbycpKSwgRV9VU0VS X05PVElDRSk7CglyZXR1cm4gbWVtX21vZGVyYXRpb25faW5mbyhhcnJheSgnZmllbGQnPT4n aWQnKSk7Cn0KZnVuY3Rpb24gbW9kX2l0ZW1faWQoJGF0dHMpIHsKCXRyaWdnZXJfZXJyb3Io Z1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJyYXkoJ3tuYW1lfScgPT4gX19G VU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVtX21vZGVyYXRpb25faW5mbycpKSwgRV9VU0VS X05PVElDRSk7CglyZXR1cm4gbWVtX21vZGVyYXRpb25faW5mbyhhcnJheSgnZmllbGQnPT4n aXRlbV9pZCcpKTsKfQpmdW5jdGlvbiBtb2Rfc3VibWl0dGVkKCRhdHRzKSB7Cgl0cmlnZ2Vy X2Vycm9yKGdUeHQoJ2RlcHJlY2F0ZWRfZnVuY3Rpb25fd2l0aCcsIGFycmF5KCd7bmFtZX0n ID0+IF9fRlVOQ1RJT05fXywgJ3t3aXRofScgPT4gJ21lbV9tb2RlcmF0aW9uX2luZm8nKSks IEVfVVNFUl9OT1RJQ0UpOwoJJGF0dHNbJ2ZpZWxkJ10gPSAnc3VibWl0dGVkJzsKCXJldHVy biBtZW1fbW9kZXJhdGlvbl9pbmZvKCRhdHRzKTsKfQpmdW5jdGlvbiBtb2RfdXNlcigkYXR0 cykgewoJdHJpZ2dlcl9lcnJvcihnVHh0KCdkZXByZWNhdGVkX2Z1bmN0aW9uX3dpdGgnLCBh cnJheSgne25hbWV9JyA9PiBfX0ZVTkNUSU9OX18sICd7d2l0aH0nID0+ICdtZW1fbW9kZXJh dGlvbl9pbmZvJykpLCBFX1VTRVJfTk9USUNFKTsKCXJldHVybiBtZW1fbW9kZXJhdGlvbl9p bmZvKGFycmF5KCdmaWVsZCc9Pid1c2VyJykpOwp9CmZ1bmN0aW9uIG1vZF9kZXNjKCRhdHRz KSB7Cgl0cmlnZ2VyX2Vycm9yKGdUeHQoJ2RlcHJlY2F0ZWRfZnVuY3Rpb25fd2l0aCcsIGFy cmF5KCd7bmFtZX0nID0+IF9fRlVOQ1RJT05fXywgJ3t3aXRofScgPT4gJ21lbV9tb2RlcmF0 aW9uX2luZm8nKSksIEVfVVNFUl9OT1RJQ0UpOwoJcmV0dXJuIG1lbV9tb2RlcmF0aW9uX2lu Zm8oYXJyYXkoJ2ZpZWxkJz0+J2Rlc2MnKSk7Cn0KZnVuY3Rpb24gbW9kX3R5cGUoJGF0dHMp IHsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJy YXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVtX21vZGVyYXRp b25faW5mbycpKSwgRV9VU0VSX05PVElDRSk7CglyZXR1cm4gbWVtX21vZGVyYXRpb25faW5m byhhcnJheSgnZmllbGQnPT4ndHlwZScpKTsKfQpmdW5jdGlvbiBtb2RfZW1haWwoJGF0dHMp IHsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbl93aXRoJywgYXJy YXkoJ3tuYW1lfScgPT4gX19GVU5DVElPTl9fLCAne3dpdGh9JyA9PiAnbWVtX21vZGVyYXRp b25faW5mbycpKSwgRV9VU0VSX05PVElDRSk7CglyZXR1cm4gbWVtX21vZGVyYXRpb25faW5m byhhcnJheSgnZmllbGQnPT4nZW1haWwnKSk7Cn0KZnVuY3Rpb24gbW9kX2RhdGEoJGF0dHMp IHsKCXRyaWdnZXJfZXJyb3IoZ1R4dCgnZGVwcmVjYXRlZF9mdW5jdGlvbicsIGFycmF5KCd7 bmFtZX0nID0+IF9fRlVOQ1RJT05fXykpLCBFX1VTRVJfTk9USUNFKTsKCSRhdHRzWydmaWVs ZCddID0gJ2RhdGEnOwoJJGF0dHNbJ2RhdGFmaWVsZCddID0gQCRhdHRzWyduYW1lJ107Cgly ZXR1cm4gbWVtX21vZGVyYXRpb25faW5mbygkYXR0cyk7Cn0KCgovKiogU2hvdyB0aGUgbW9k ZXJhdGlvbiBxdWV1ZSAqLwpmdW5jdGlvbiBtZW1fbW9kZXJhdGVfbGlzdCgkbWVzc2FnZT0i IikKewoJZ2xvYmFsICRzdGVwLCAkbGlua19saXN0X3BhZ2VieSwgJG1vZF9ldmVudDsKCgkv LyBjaGVjayBwcml2cwoJaWYgKCFoYXNfcHJpdnMoJ21vZGVyYXRlLmxpc3QnKSkKCXsKCQly ZXR1cm47Cgl9CgoJZXh0cmFjdChnZXRfcHJlZnMoKSk7CgoJJHBhZ2UgPSBncHMoJ3BhZ2Un KTsKCSR0b3RhbCA9IGdldENvdW50KCd0eHBfbW9kZXJhdGlvbicsIjEiKTsKCSRsaW1pdCA9 IGVtcHR5KCRsaW5rX2xpc3RfcGFnZWJ5KSA/IDIwIDogJGxpbmtfbGlzdF9wYWdlYnk7Cgkk bnVtUGFnZXMgPSAkdG90YWw9PTAgPyAxIDogY2VpbCgkdG90YWwvJGxpbWl0KTsKCSRwYWdl ID0gKCEkcGFnZSkgPyAxIDogJHBhZ2U7Cgkkb2Zmc2V0ID0gKCRwYWdlIC0gMSkgKiAkbGlt aXQ7Cgkkc29ydCA9IGdwcygnc29ydCcpOwoJJGRpciA9IGdwcygnZGlyJyk7CgoJJHNvcnQg PSAoJHNvcnQpID8gZG9TbGFzaCgkc29ydCkgOiAic3VibWl0dGVkIjsKCSRkaXIgPSAoJGRp cikgPyBkb1NsYXNoKCRkaXIpIDogJ2FzYyc7CgoJLy8gbmF2aWdhdGlvbiBsaW5rcwoJJG5h dltdID0gKCRwYWdlID4gMSkKCQkJPwlQcmV2TmV4dExpbmsoJG1vZF9ldmVudCwkcGFnZS0x LGdUeHQoJ3ByZXYnKSwncHJldicpIDogJyc7CgkkbmF2W10gPSBzcC5zbWFsbCgkcGFnZS4g Jy8nLiRudW1QYWdlcykuc3A7CgkkbmF2W10gPSAoJHBhZ2UgIT0gJG51bVBhZ2VzICYmICRu dW1QYWdlcyA+IDEpCgkJCT8JUHJldk5leHRMaW5rKCRtb2RfZXZlbnQsJHBhZ2UrMSxnVHh0 KCduZXh0JyksJ25leHQnKSA6ICcnOwoKCSRkZWxheSA9IGlzc2V0KCRtZW1fbW9kX3F1ZXVl X2RlbGF5KSA/IGFzc2VydF9pbnQoJG1lbV9tb2RfcXVldWVfZGVsYXkpIDogMDsKCglpZigk bWVtX21vZF9wdWJfYnlwYXNzX3F1ZXVlKQoJewoJCS8vIGNoZWNrIGFnYWluc3QgdXNlciB0 YWJsZQoJCSR1c2VyX3RhYmxlID0gbWVtX2dldF91c2VyX3RhYmxlX25hbWUoKTsKCQlpZiAo ZW1wdHkoJHVzZXJfdGFibGUpKSAkdXNlcl90YWJsZSA9ICd0eHBfdXNlcnMnOwoKCQkkcnMg PSBzYWZlX3Jvd3Nfc3RhcnQoCgkJCSJ0eHBfbW9kZXJhdGlvbi4qIiwKCQkJInR4cF9tb2Rl cmF0aW9uLCB7JHVzZXJfdGFibGV9IiwKCQkJIiB0eHBfbW9kZXJhdGlvbi51c2VyPXskdXNl cl90YWJsZX0ubmFtZSBBTkQgKERBVEVfU1VCKCBOT1coKSwgSU5URVJWQUwgIi4gJGRlbGF5 IC4iIERBWSApID4gdHhwX21vZGVyYXRpb24uc3VibWl0dGVkIE9SIHskdXNlcl90YWJsZX0u cHJpdnMgPSAxKSBvcmRlciBieSB0eHBfbW9kZXJhdGlvbi57JHNvcnR9ICRkaXIgbGltaXQg JG9mZnNldCwkbGltaXQiCgkJKTsKCX0KCWVsc2UKCXsKCQkvLyBnZXQgYWxsIHF1ZXVlIGl0 ZW1zCgkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KAoJCQkiKiIsCgkJCSJ0eHBfbW9kZXJhdGlv biIsCgkJCSIgKERBVEVfU1VCKCBOT1coKSwgSU5URVJWQUwgIi4gJGRlbGF5IC4iIERBWSAp ID4gc3VibWl0dGVkKSBvcmRlciBieSB7JHNvcnR9ICRkaXIgbGltaXQgJG9mZnNldCwkbGlt aXQiCgkJKTsKCX0KCglpZiAoJHJzKQoJewoJCS8vIHJldmVyc2UgZGlyIGZvciBsaW5rcwoJ CWlmICgkZGlyID09ICJkZXNjIikgeyAkZGlyID0gImFzYyI7IH0gZWxzZSB7ICRkaXIgPSAi ZGVzYyI7IH0KCgkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9z dCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdh cmVfeW91X3N1cmUnKS4nXCcpIj4nLAoJCXN0YXJ0VGFibGUoJ2xpc3QnKSwKCgkJLy8gY29s dW1uIGhlYWRpbmcgd2l0aCBzb3J0IGxpbmtzCgkJdHIoCgkJCWNvbHVtbl9oZWFkKCdpZCcs J2lkJywkbW9kX2V2ZW50LDEsJGRpcikuCgkJCWNvbHVtbl9oZWFkKCdzdWJtaXR0ZWQnLCdz dWJtaXR0ZWQnLCRtb2RfZXZlbnQsMSwkZGlyKS4KCQkJY29sdW1uX2hlYWQoJ3R5cGUnLCd0 eXBlJywkbW9kX2V2ZW50LDEsJGRpcikuCgkJCWNvbHVtbl9oZWFkKCd1c2VyJywndXNlcics JG1vZF9ldmVudCwxLCRkaXIpLgoJCQljb2x1bW5faGVhZCgnZGVzY3JpcHRpb24nLCdkZXNj cmlwdGlvbicsJG1vZF9ldmVudCwwLCRkaXIpLgoJCQl0ZCgpCgkJCSk7CgoJCS8vIGVhY2gg cm93CgkJJGFsdCA9IGZhbHNlOwoJCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkKCQl7CgkJ CWV4dHJhY3QoJGEpOwoJCQkkZWxpbmsgPSBlTGluaygkbW9kX2V2ZW50LCdkZXRhaWxzJywn aWQnLCRpZCwkaWQpOwoJCQkkY2JveCA9IGZJbnB1dCgnY2hlY2tib3gnLCdzZWxlY3RlZFtd JywkaWQpOwoKCQkJLy8gbm8gZGVzYywgdXNlIGFub3RoZXIgZmllbGQKCQkJaWYgKGVtcHR5 KCRkZXNjKSkKCQkJewoJCQkJJGRhdGEgPSBtZW1fbW9kZXJhdGlvbl9kZWNvZGUoJGFbJ2Rh dGEnXSk7CgoJCQkJJGFsdGZpZWxkcyA9IGFycmF5KCd0aXRsZScsICdkZXNjJywgJ2Rlc2Ny aXB0aW9uJywgJ2FsdCcpOwoKCQkJCWZvcmVhY2ggKCRhbHRmaWVsZHMgYXMgJGYpCgkJCQl7 CgkJCQkJaWYgKGlzc2V0KCRkYXRhWyRmXSkgYW5kICFlbXB0eSgkZGF0YVskZl0pKQoJCQkJ CXsKCQkJCQkJJGRlc2MgPSAkZGF0YVskZl07CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0K CgkJCQkvLyBlbnN1cmUgc29tZXRoaW5nIGlzIGluIGRlc2MgY29sdW1uCgkJCQlpZiAoZW1w dHkoJGRlc2MpKQoJCQkJewoJCQkJCSRkZXNjID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnbm9f ZGVzYycpOwoJCQkJfQoJCQl9CgoJCQkkZGVzY2xpbmsgPSBlTGluaygkbW9kX2V2ZW50LCdk ZXRhaWxzJywnaWQnLCRpZCwkZGVzYyk7CgoJCQllY2hvIHRyKAoJCQkJCXRkKCRlbGluaywy MCkuCgkJCQkJdGQoJHN1Ym1pdHRlZCwxNzUpLgoJCQkJCXRkKCR0eXBlLDUwKS4KCQkJCQko JHVzZXIhPSdhbm9ueW1vdXMnP3RkKCR1c2VyLDEzMCk6dGQoJGVtYWlsLDEzMCkpLgoJCQkJ CXRkKCRkZXNjbGluaywyMDApLgoJCQkJCXRkKCRjYm94KQoJCQkJKTsKCQl9CgoJCSRtdWx0 aV9lZGl0X29wdGlvbnMgPSBhcnJheSgncmVqZWN0Jz0+Z1R4dCgncmVqZWN0JykpOwoKCQlp ZiAoJG1lbV9tb2RfbXVsdGllZGl0X2FwcHJvdmUpCgkJewoJCQkkbXVsdGlfZWRpdF9vcHRp b25zWydhcHByb3ZlJ10gPSBnVHh0KCdhcHByb3ZlJyk7CgkJfQoKCQkvLyBsaXN0IGFjdGlv biBmb3JtCgkJZWNobyB0cih0ZGEoc2VsZWN0X2J1dHRvbnMoKS4KCQlldmVudF9tdWx0aWVk aXRfZm9ybSgkbW9kX2V2ZW50LCRtdWx0aV9lZGl0X29wdGlvbnMsICRwYWdlLCAkc29ydCwg JGRpciwnJywnJyksJyBjb2xzcGFuPSI2IiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtib3Jk ZXI6MHB4IicpKTsKCgkJLy8gcGFnaW5nCgkJZWNobyBlbmRUYWJsZSgpLCc8L2Zvcm0+JzsK CQllY2hvIHBhZ2VieV9mb3JtKCRtb2RfZXZlbnQsJGxpbmtfbGlzdF9wYWdlYnkpOwoJCWVj aG8gZ3JhZihqb2luKCcnLCRuYXYpLCcgYWxpZ249ImNlbnRlciInKTsKCX0KCWVsc2UKCXsK CQllY2hvIG1lbV9tb2RlcmF0aW9uX2dUeHQoJ3RhYmxlX2FjY2Vzc19mYWlsZWQnLCBhcnJh eSgne2Vycn0nID0+IG15c3FsX2Vycm9yKCkpKTsKCX0KfQoKLyoqIFVwZGF0ZSBhbiBpdGVt IGluIHRoZSBxdWV1ZSAqLwpmdW5jdGlvbiBtZW1fbW9kZXJhdGVfc2F2ZSgpCnsKCXJlcXVp cmVfcHJpdnMoJ21vZGVyYXRlLmVkaXQnKTsKCglleHRyYWN0KGdwc2EoYXJyYXkoJ2lkJywn dHlwZScsJ21vZGVyYXRpb25fZGVzY3JpcHRpb24nKSkpOwoKCSR2YXJzID0gZ3BzYShtZW1f Z2V0X21vZGVyYXRpb25fdmFyaWFibGVzKCR0eXBlKSk7CgoJdXBkYXRlX21vZGVyYXRlZF9j b250ZW50KCRpZCwkbW9kZXJhdGlvbl9kZXNjcmlwdGlvbiwkdmFycyk7Cn0KCgovKiogQXBw cm92ZSBhbiBpdGVtIGluIHRoZSBtb2RlcmF0aW9uIHF1ZXVlICovCmZ1bmN0aW9uIG1lbV9t b2RlcmF0ZV9hcHByb3ZlKCR0eXBlPScnLCRpZD1mYWxzZSkKewoJcmVxdWlyZV9wcml2cygn bW9kZXJhdGUuYXBwcm92ZScpOwoKCWlmICgkaWQ9PT1mYWxzZSB8fCBlbXB0eSgkdHlwZSkp Cgl7CgkJZXh0cmFjdChncHNhKGFycmF5KCdpZCcsJ3R5cGUnKSkpOwoKCQkvLyBzYXZlIGl0 IGZpcnN0CgkJbWVtX21vZGVyYXRlX3NhdmUoKTsKCX0KCWVsc2UKCXsKCQkvLyBBcHByb3Zp bmcgZnJvbSB0aGUgbGlzdGluZwoJfQoKCSRycyA9IHNhZmVfcm93KCIqIiwgInR4cF9tb2Rl cmF0aW9uIiwgImlkID0gIi4gZG9TbGFzaCgkaWQpKTsKCglpZiAoJHJzKQoJewoJCSR2YXJz ID0gbWVtX2dldF9tb2RlcmF0aW9uX3ZhcmlhYmxlcygkdHlwZSk7CgoJCWV4dHJhY3QoYXJy YXlfbWVyZ2UoJHJzLCR2YXJzKSk7CgoJCSRkZWNvZGVkX2RhdGEgPSBtZW1fbW9kZXJhdGlv bl9kZWNvZGUoJHJzWydkYXRhJ10pOwoJCSRkZWNvZGVkX2RhdGFbJ2lkJ10gPSAkaWQ7CgoJ CS8vIG5vdGlmeSBwbHVnaW5zCgkJJHJlcyA9IG1lbV9tb2RlcmF0aW9uX2FwcHJvdmVyX2Nh bGxiYWNrKCR0eXBlLCRkZWNvZGVkX2RhdGEpOwoKCQlpZiAoJHJlcyA9PSAnJykKCQl7CgkJ CWlmIChyZW1vdmVfbW9kZXJhdGVkX2NvbnRlbnQoJGlkKSkKCQkJewoJCQkJLy8gbm8gcmV0 dXJuIG9uIHN1Y2Nlc3MKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBtZW1fbW9kZXJh dGlvbl9nVHh0KCdyZW1vdmVfZmFpbGVkJywgYXJyYXkoJ3tpZH0nID0+ICRpZCkpOwoJCQl9 CgkJfQoKCQlyZXR1cm4gJHJlczsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gbWVtX21vZGVyYXRp b25fZ1R4dCgnaWRfbm90X2ZvdW5kJyk7Cgl9Cn0KCi8qKiBSZWplY3QgYSBtb2RlcmF0ZWQg aXRlbSAqLwpmdW5jdGlvbiBtZW1fbW9kZXJhdGVfcmVqZWN0KCR0eXBlPScnLCAkaWQ9ZmFs c2UpCnsKCXJlcXVpcmVfcHJpdnMoJ21vZGVyYXRlLmFwcHJvdmUnKTsKCglpZiAoJGlkPT09 ZmFsc2UgfHwgZW1wdHkoJHR5cGUpKQoJCWV4dHJhY3QoZ3BzYShhcnJheSgnaWQnLCd0eXBl JykpKTsKCgkkcnMgPSBzYWZlX3JvdygiKiIsICJ0eHBfbW9kZXJhdGlvbiIsICJpZCA9ICRp ZCIpOwoKCWlmICgkcnMpCgl7CgkJJGRlY29kZWRfZGF0YSA9IG1lbV9tb2RlcmF0aW9uX2Rl Y29kZSgkcnNbJ2RhdGEnXSk7CgkJJGRlY29kZWRfZGF0YVsnaWQnXSA9ICRpZDsKCgkJLy8g bm90aWZ5IHBsdWdpbnMKCQkkcmVzID0gbWVtX21vZGVyYXRpb25fcmVqZWN0ZXJfY2FsbGJh Y2soJHR5cGUsICRkZWNvZGVkX2RhdGEpOwoKCQlpZiAoJHJlcyA9PSAnJykKCQl7CgkJCWlm IChyZW1vdmVfbW9kZXJhdGVkX2NvbnRlbnQoJGlkKSkKCQkJewoJCQkJLy8gbm8gcmV0dXJu IG9uIHN1Y2Nlc3MKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBtZW1fbW9kZXJhdGlv bl9nVHh0KCdyZW1vdmVfZmFpbGVkJywgYXJyYXkoJ3tpZH0nID0+ICRpZCkpOwoJCQl9CgkJ fQoKCQlyZXR1cm4gJHJlczsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gbWVtX21vZGVyYXRpb25f Z1R4dCgnaWRfbm90X2ZvdW5kJyk7Cgl9Cn0KCgovKiogQWRkIGFuIGl0ZW0gdG8gdGhlIG1v ZGVyYXRpb24gcXVldWUgKi8KZnVuY3Rpb24gc3VibWl0X21vZGVyYXRlZF9jb250ZW50KCR0 eXBlLCRlbWFpbCwkZGVzYywkZGF0YSwkaXRlbV9pZD0nMCcpCnsKCWdsb2JhbCAkdHhwX3Vz ZXIsJGlnbl91c2VyLCAkbWVtX21vZF9lbWFpbF9vbl9uZXcsICRtZW1fbW9kX25vdGlmeV9l bWFpbCwgJHNpdGVuYW1lOwoKCS8vIGlnbl91c2VyCgkkdXNlciA9IGlzc2V0KCRpZ25fdXNl cikgPyAkaWduX3VzZXIgOiAkdHhwX3VzZXI7CgoJLy8gY2FuIHRoaXMgYmUgYW4gdXBkYXRl IGluc3RlYWQ/CglpZiAoJGl0ZW1faWQgIT0gMCkKCXsKCQkkZXhpc3RpbmdfbW9kaWQgPSBz YWZlX2ZpZWxkKCdpZCwgaXRlbV9pZCcsICd0eHBfbW9kZXJhdGlvbicsICJgdHlwZWAgPSAn Ii5kb1NsYXNoKCR0eXBlKS4iJyBhbmQgYHVzZXJgID0gJyIuZG9TbGFzaCgkdXNlcikuIicg YW5kIGBpdGVtX2lkYCA9ICIuZG9TbGFzaCgkaXRlbV9pZCkpOwoKCQlpZiAoJGV4aXN0aW5n X21vZGlkKQoJCXsKCQkJLy8gZG8gYW4gdXBkYXRlIGluc3RlYWQKCQkJaWYgKHVwZGF0ZV9t b2RlcmF0ZWRfY29udGVudCgkZXhpc3RpbmdfbW9kaWQsICRkZXNjLCAkZGF0YSwgJHR5cGUs ICRpdGVtX2lkKSkKCQkJewoJCQkJcmV0dXJuICRleGlzdGluZ19tb2RpZDsKCQkJfQoKCQkJ cmV0dXJuIGZhbHNlOwoJCX0KCX0KCglpZiAoZW1wdHkoJGVtYWlsKSkKCXsKCQkkZW1haWwg PSBzYWZlX2ZpZWxkKCdlbWFpbCcsJ3R4cF91c2VycycsIm5hbWUgPSAnIi5kb1NsYXNoKCR1 c2VyKS4iJyIpOwoJfQoKCS8vIGVuY29kZSBmb3IgaW5zZXJ0CgkkZW5jb2RlZF9kYXRhID0g bWVtX21vZGVyYXRpb25fZW5jb2RlKCRkYXRhKTsKCgkkciA9IHNhZmVfaW5zZXJ0KCd0eHBf bW9kZXJhdGlvbicsCgkJCSJgc3VibWl0dGVkYCA9IG5vdygpLAoJCQlgdHlwZWAJPSAnIi5k b1NsYXNoKCR0eXBlKS4iJywKCQkJYGl0ZW1faWRgCT0gJyIuZG9TbGFzaCgkaXRlbV9pZCku IicsCgkJCWB1c2VyYAk9ICciLmRvU2xhc2goJHVzZXIpLiInLAoJCQlgZW1haWxgCT0gJyIu ZG9TbGFzaCgkZW1haWwpLiInLAoJCQlgaXBgCT0gJyIuZG9TbGFzaCgkX1NFUlZFUlsnUkVN T1RFX0FERFInXSkuIicsCgkJCWBkZXNjYAk9ICciLmRvU2xhc2goJGRlc2MpLiInLAoJCQlg ZGF0YWAJPSAnIi5kb1NsYXNoKCRlbmNvZGVkX2RhdGEpLiInIgoJCQkpOwoKCS8vIHNlbmQg ZW1haWwgbm90aWZpY2F0aW9uCglpZiAoJG1lbV9tb2RfZW1haWxfb25fbmV3ICYmICFlbXB0 eSgkbWVtX21vZF9ub3RpZnlfZW1haWwpKQoJewoJCSRtZXNzYWdlID0gbWVtX21vZGVyYXRp b25fZ1R4dCgnbmV3X3N1Ym1pc3Npb25fZW1haWwnLCBhcnJheSgne3VzZXJ9Jz0+ICR1c2Vy LCAne3R5cGV9Jz0+ICR0eXBlKSk7CgkJJHJlcGx5ID0gJGZyb20gPSAkdG8gPSAkbWVtX21v ZF9ub3RpZnlfZW1haWw7CgkJJHN1YmplY3QgPSAiWyRzaXRlbmFtZV0gIiAuIG1lbV9tb2Rl cmF0aW9uX2dUeHQoJ25ld19zdWJtaXNzaW9uX2VtYWlsX3N1YmplY3QnKTsKCgkJJHNlbnQg PSBAbWVtX2Zvcm1fbWFpbCgkZnJvbSwgJHJlcGx5LCAkdG8sICRzdWJqZWN0LCAkbWVzc2Fn ZSk7Cgl9CgoJcmV0dXJuICRyOwp9CgovKiogVXBkYXRlIGFuIGVudHJ5IGluIHRoZSBtb2Rl cmF0aW9uIHF1ZXVlICovCmZ1bmN0aW9uIHVwZGF0ZV9tb2RlcmF0ZWRfY29udGVudCgkaWQs JGRlc2MsJGRhdGEsJHR5cGU9JycsJGl0ZW1faWQ9JycpCnsKCWdsb2JhbCAkbWVtX21vZF9l bWFpbF9vbl91cGRhdGUsICRtZW1fbW9kX25vdGlmeV9lbWFpbCwgJHNpdGVuYW1lOwoKCSRl bmNvZGVkX2RhdGEgPSBtZW1fbW9kZXJhdGlvbl9lbmNvZGUoJGRhdGEpOwoKCSRzZXQgPSAi YGRlc2NgID0gJyIuIGRvU2xhc2goJGRlc2MpLiInLCBgZGF0YWAgPSAnJGVuY29kZWRfZGF0 YSciOwoKCWlmICghZW1wdHkoJHR5cGUpKQoJewoJCSRzZXQgLj0gIiwgYHR5cGVgID0gJyIu ZG9TbGFzaCgkdHlwZSkuIiciOwoJfQoKCWlmICghZW1wdHkoJGl0ZW1faWQpIG9yICRpdGVt X2lkID09ICcwJykKCXsKCQkkc2V0IC49ICIsIGBpdGVtX2lkYCA9ICIuZG9TbGFzaCgkaXRl bV9pZCk7Cgl9CgoJJHIgPSBzYWZlX3VwZGF0ZSgndHhwX21vZGVyYXRpb24nLCAkc2V0LCAi aWQ9JyIuZG9TbGFzaCgkaWQpLiInIik7CgoJaWYgKEB0eHBpbnRlcmZhY2UgIT0gJ2FkbWlu JykKCXsKCQlpZiAoJG1lbV9tb2RfZW1haWxfb25fdXBkYXRlICYmICFlbXB0eSgkbWVtX21v ZF9ub3RpZnlfZW1haWwpKQoJCXsKCQkJJHJzID0gc2FmZV9yb3coJ3VzZXIsdHlwZScsICd0 eHBfbW9kZXJhdGlvbicsICJpZD0nIi5kb1NsYXNoKCRpZCkuIiciKTsKCQkJaWYgKCRycykK CQkJCWV4dHJhY3QoJHJzKTsKCgkJCSRtZXNzYWdlID0gbWVtX21vZGVyYXRpb25fZ1R4dCgn dXBkYXRlX3N1Ym1pc3Npb25fZW1haWwnLCBhcnJheSgne3VzZXJ9Jz0+ICR1c2VyLCAne3R5 cGV9Jz0+ICR0eXBlKSk7CgkJCSRyZXBseSA9ICRmcm9tID0gJHRvID0gJG1lbV9tb2Rfbm90 aWZ5X2VtYWlsOwoJCQkkc3ViamVjdCA9ICJbJHNpdGVuYW1lXSAiIC4gbWVtX21vZGVyYXRp b25fZ1R4dCgndXBkYXRlX3N1Ym1pc3Npb25fZW1haWxfc3ViamVjdCcpOwoKCQkJJHNlbnQg PSBAbWVtX2Zvcm1fbWFpbCgkZnJvbSwgJHJlcGx5LCAkdG8sICRzdWJqZWN0LCAkbWVzc2Fn ZSk7CgkJfQoJfQoKCXJldHVybiAkcjsKfQoKLyoqIFJlbW92ZSBhbiBpdGVtIGZyb20gdGhl IG1vZGVyYXRpb24gcXVldWUgKi8KZnVuY3Rpb24gcmVtb3ZlX21vZGVyYXRlZF9jb250ZW50 KCRpZCkKewoJcmV0dXJuIHNhZmVfZGVsZXRlKCd0eHBfbW9kZXJhdGlvbicsImlkPSciLmRv U2xhc2goJGlkKS4iJyIpOwp9CgovKiogU2VyaWFsaXplIGRhdGEgZm9yIHN0b3JhZ2UgKi8K ZnVuY3Rpb24gbWVtX21vZGVyYXRpb25fZW5jb2RlKCRjb250ZW50KQp7CglyZXR1cm4gYmFz ZTY0X2VuY29kZShzZXJpYWxpemUoJGNvbnRlbnQpKTsKfQovKiogRGVzZXJpYWxpemUgZGF0 YSBmcm9tIHN0b3JhZ2UgKi8KZnVuY3Rpb24gbWVtX21vZGVyYXRpb25fZGVjb2RlKCRjb250 ZW50KQp7CglyZXR1cm4gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkY29udGVudCkpOwp9 CgovKiogUmVnaXN0ZXIgaGFuZGxlcnMgZm9yIGEgY29udGVudCB0eXBlICovCmZ1bmN0aW9u IG1lbV9tb2RlcmF0aW9uX3JlZ2lzdGVyKCR0eXBlLCR2YXJzLCRwcmVzZW50ZXIsJGFwcHJv dmVyLCRyZWplY3RlcikKewoJZ2xvYmFsICRtb2RlcmF0aW9uX3R5cGVzOwoKCSRtb2RlcmF0 aW9uX3R5cGVzW10gPSBhcnJheSgoJ3R5cGUnKSA9PiAkdHlwZSwKCQkJCQkJCQkoJ3Zhcmlh YmxlcycpID0+ICR2YXJzLAoJCQkJCQkJCSgnZnVuY19wcmVzZW50ZXInKSA9PiAkcHJlc2Vu dGVyLAoJCQkJCQkJCSgnZnVuY19hcHByb3ZlcicpID0+ICRhcHByb3ZlciwKCQkJCQkJCQko J2Z1bmNfcmVqZWN0ZXInKSA9PiAkcmVqZWN0ZXIpOwp9CmZ1bmN0aW9uIHJlZ2lzdGVyX21v ZGVyYXRpb25fdHlwZSgkdHlwZSwgJHZhcnMsICRwcmVzZW50ZXIsICRhcHByb3ZlciwgJHJl amVjdGVyKXsKCS8vdHJpZ2dlcl9lcnJvcihnVHh0KCdkZXByZWNhdGVkX3RhZycpLCBFX1VT RVJfTk9USUNFKTsKCW1lbV9tb2RlcmF0aW9uX3JlZ2lzdGVyKCR0eXBlLCAkdmFycywgJHBy ZXNlbnRlciwgJGFwcHJvdmVyLCAkcmVqZWN0ZXIpOwp9CgovKiogR2V0IHRoZSByZWdpc3Rl cmVkIHZhcmlhYmxlIG5hbWVzICovCmZ1bmN0aW9uIG1lbV9nZXRfbW9kZXJhdGlvbl92YXJp YWJsZXMoJHR5cGUpCnsKCWdsb2JhbCAkbW9kZXJhdGlvbl90eXBlczsKCglpZiAoIWlzX2Fy cmF5KCRtb2RlcmF0aW9uX3R5cGVzKSkKCXsKCQlyZXR1cm4gYXJyYXkoKTsKCX0KCgkkb3V0 ID0gYXJyYXkoKTsKCglmb3JlYWNoICgkbW9kZXJhdGlvbl90eXBlcyBhcyAkcCkKCXsKCQlp ZiAoJHBbKCd0eXBlJyldPT0kdHlwZSkKCQl7CgkJCSRvdXQgPSBhcnJheV9tZXJnZSgkb3V0 LCAkcFsoJ3ZhcmlhYmxlcycpXSk7CgkJfQoJfQoKCXJldHVybiAkb3V0Owp9CgovKiogTW9k ZXJhdGlvbiBDYWxsYmFjayAqLwpmdW5jdGlvbiBtZW1fbW9kZXJhdGlvbl9jYWxsYmFjaygk dHlwZSwkY2FsbGJhY2ssJGRhdGEpCnsKCWdsb2JhbCAkbW9kZXJhdGlvbl90eXBlczsKCglp ZiAoIWlzX2FycmF5KCRtb2RlcmF0aW9uX3R5cGVzKSkKCXsKCQlyZXR1cm4gJyc7Cgl9CgoJ JG91dCA9ICcnOwoKCWZvcmVhY2ggKCRtb2RlcmF0aW9uX3R5cGVzIGFzICRwKQoJewoJCWlm ICgkcFsoJ3R5cGUnKV09PSR0eXBlICYmIGlzX2NhbGxhYmxlKCRwWygnZnVuY18nLiRjYWxs YmFjayldKSkKCQl7CgkJCSRvdXRbXSA9IGNhbGxfdXNlcl9mdW5jKCRwWygnZnVuY18nLiRj YWxsYmFjayldLCRwWygndHlwZScpXSwkZGF0YSk7CgkJfQoJfQoKCXJldHVybiAoaXNfYXJy YXkoJG91dCkgPyBqb2luKCcgJywkb3V0KSA6ICRvdXQpOwp9CgovKiogUHJlc2VudGVyIENh bGxiYWNrICovCmZ1bmN0aW9uIG1lbV9tb2RlcmF0aW9uX3ByZXNlbnRlcl9jYWxsYmFjaygk dHlwZSwkZGF0YSkgewoJcmV0dXJuIG1lbV9tb2RlcmF0aW9uX2NhbGxiYWNrKCR0eXBlLCdw cmVzZW50ZXInLCRkYXRhKTsKfQovKiogQXBwcm92ZXIgQ2FsbGJhY2sgKi8KZnVuY3Rpb24g bWVtX21vZGVyYXRpb25fYXBwcm92ZXJfY2FsbGJhY2soJHR5cGUsJGRhdGEpIHsKCXJldHVy biBtZW1fbW9kZXJhdGlvbl9jYWxsYmFjaygkdHlwZSwnYXBwcm92ZXInLCRkYXRhKTsKfQov KiogUmVqZWN0ZXIgQ2FsbGJhY2sgKi8KZnVuY3Rpb24gbWVtX21vZGVyYXRpb25fcmVqZWN0 ZXJfY2FsbGJhY2soJHR5cGUsJGRhdGEpIHsKCXJldHVybiBtZW1fbW9kZXJhdGlvbl9jYWxs YmFjaygkdHlwZSwncmVqZWN0ZXInLCRkYXRhKTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMo J21lbV9nZXRfdXNlcl90YWJsZV9uYW1lJykpIHsKCWZ1bmN0aW9uIG1lbV9nZXRfdXNlcl90 YWJsZV9uYW1lKCkgewoJCWdsb2JhbCAkcHJlZnM7CgoJCWV4dHJhY3QoJHByZWZzKTsKCgkJ JHRhYmxlX25hbWUgPSAndHhwX3VzZXJzJzsKCgkJaWYgKGlzc2V0KCRtZW1fc2VsZl91c2Vf aWduX2RiKSAmJiAkbWVtX3NlbGZfdXNlX2lnbl9kYiA9PSAnMScpIHsKCgkJCWlmIChpc3Nl dCgkaWduX3VzZV9jdXN0b20pICYmICRpZ25fdXNlX2N1c3RvbT09JzEnKSB7CgoJCQkJaWYg KGlzc2V0KCRpZ25fdXNlcl9kYikgJiYgIWVtcHR5KCRpZ25fdXNlcl9kYikpCgkJCQkJJHRh YmxlX25hbWUgPSAkaWduX3VzZXJfZGI7CgkJCX0KCQl9CgkJcmV0dXJuICR0YWJsZV9uYW1l OwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpCnsK CS8vIHNldCB1cCB0YWIgYW5kIGV2ZW50IGNhbGxiYWNrCglyZWdpc3Rlcl90YWIoJ2V4dGVu c2lvbnMnLCdtb2RlcmF0ZScsJG1vZF9ldmVudCk7CglyZWdpc3Rlcl9jYWxsYmFjaygnbWVt X21vZGVyYXRlJywgJG1vZF9ldmVudCwgJycsIDEpOwoKCS8vIHdobyBjYW4gYWNjZXNzIHRo aXMgdGFiCglhZGRfcHJpdnMoJG1vZF9ldmVudCwnMSwyLDMnKTsKCS8vIHdobyBjYW4gdmll dyBzdWJtaXNzaW9uIGxpc3QKCWFkZF9wcml2cygkbW9kX2V2ZW50LicubGlzdCcsJzEsMiwz Jyk7CgkvLyB3aG8gY2FuIGVkaXQKCWFkZF9wcml2cygkbW9kX2V2ZW50LicuZWRpdCcsJzEs MiwzJyk7CgkvLyB3aG8gY2FuIGFwcHJvdmUKCWFkZF9wcml2cygkbW9kX2V2ZW50LicuYXBw cm92ZScsJzEsMiwzJyk7CgoJLyoqIE1haW4gc3RlcCBoYW5kbGVyICovCglmdW5jdGlvbiBt ZW1fbW9kZXJhdGUoJGV2ZW50LCAkc3RlcCkKCXsKCQlnbG9iYWwgJHR4cF9wZXJtaXNzaW9u cywgJG1vZF9ldmVudDsKCgkJJG1vZF9ldmVudCA9ICRldmVudDsKCgkJJG1zZyA9ICcnOwoK CQlwYWdldG9wKCcnKTsKCgkJaWYgKCRzdGVwPT0nZGV0YWlscycpCgkJewoJCQltZW1fbW9k ZXJhdGVfZGV0YWlscygpOwoJCX0KCQllbHNlIGlmICgkc3RlcD09JG1vZF9ldmVudC4nX3Vw ZGF0ZScpCgkJewoJCQkkYWN0aW9uID0gZ3BzKCdhY3Rpb24nKTsKCQkJaWYgKCRhY3Rpb249 PWdUeHQoJ3NhdmUnKSkKCQkJewoJCQkJbWVtX21vZGVyYXRlX3NhdmUoKTsKCQkJCW1lbV9t b2RlcmF0ZV9kZXRhaWxzKCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoJGFjdGlvbj09 Z1R4dCgnYXBwcm92ZScpKQoJCQkJewoJCQkJCSRtc2cgPSBtZW1fbW9kZXJhdGVfYXBwcm92 ZSgpOwoJCQkJfQoJCQkJZWxzZSBpZiAoJGFjdGlvbj09Z1R4dCgncmVqZWN0JykpCgkJCQl7 CgkJCQkJJG1zZyA9IG1lbV9tb2RlcmF0ZV9yZWplY3QoKTsKCQkJCX0KCgkJCQltZW1fbW9k ZXJhdGVfbGlzdCgkbXNnKTsKCQkJfQoJCX0KCQllbHNlIGlmICgkc3RlcD09J3ByZWluc3Rh bGwnIG9yICRzdGVwPT0naW5zdGFsbCcpCgkJewoJCQllY2hvIG1lbV9tb2RlcmF0aW9uX2lu c3RhbGwoKTsKCQl9CgkJZWxzZSBpZiAoJHN0ZXA9PSRtb2RfZXZlbnQuJ19tdWx0aV9lZGl0 JykKCQl7CgkJCS8vIGFjdGlvbnMgZnJvbSB0aGUgbW9kZXJhdGlvbiBsaXN0CgkJCSRzZWxl Y3RlZCA9IGdwcygnc2VsZWN0ZWQnKTsKCQkJJG1ldGhvZCA9IGdwcygnZWRpdF9tZXRob2Qn KTsKCgkJCSRzdWNjZXNzID0gYXJyYXkoKTsKCQkJJGZhaWxlZCA9IGFycmF5KCk7CgkJCSRy cyA9IGZhbHNlOwoKCQkJaWYgKGNvdW50KCRzZWxlY3RlZCkgPiAwKQoJCQl7CgkJCQkkc2Vs ZWN0ZWRfaWRzID0gam9pbignLCcsJHNlbGVjdGVkKTsKCgkJCQkkcnMgPSBzYWZlX3Jvd3Mo ImlkLHR5cGUiLCd0eHBfbW9kZXJhdGlvbicsImBpZGAgSU4gKCIuIGRvU2xhc2goJHNlbGVj dGVkX2lkcykgLiIpIik7CgkJCX0KCgkJCWlmICgkcnMpCgkJCXsKCQkJCWZvcmVhY2goJHJz IGFzICRyKQoJCQkJewoJCQkJCWV4dHJhY3QoJHIpOwoJCQkJCSRyZXN1bHQgPSAnJzsKCgkJ CQkJaWYgKCRtZXRob2Q9PSdyZWplY3QnKQoJCQkJCXsKCQkJCQkJJHJlc3VsdCA9IG1lbV9t b2RlcmF0ZV9yZWplY3QoJHR5cGUsJGlkKTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoJG1ldGhv ZD09J2FwcHJvdmUnKQoJCQkJCXsKCQkJCQkJJHJlc3VsdCA9IG1lbV9tb2RlcmF0ZV9hcHBy b3ZlKCR0eXBlLCRpZCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRyZXN1bHQg PSAndW5zdXBwb3J0ZWQgbWV0aG9kICInLiRtZXRob2QuIiciOwoJCQkJCX0KCgkJCQkJaWYg KGVtcHR5KCRyZXN1bHQpKQoJCQkJCXsKCQkJCQkJJHN1Y2Nlc3NbXSA9IGFycmF5KCdpZCc9 PiRpZCwndHlwZSc9PiR0eXBlKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJGZh aWxlZFtdID0gYXJyYXkoJ2lkJz0+JGlkLCd0eXBlJz0+JHR5cGUpOwoJCQkJCX0KCQkJCX0K CQkJfQoKCQkJJG1zZyA9ICcnOwoKCQkJLy8gYnVpbGQgc3VjY2VzcyBsaXN0CgkJCWlmIChj b3VudCgkc3VjY2Vzcyk+MCkKCQkJewoJCQkJJG1zZyAuPSAieyRtZXRob2R9IHN1Y2Nlc3Nm dWwgZm9yOiAiOwoJCQkJJHNsaXN0ID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHN1Y2Nlc3Mg YXMgJHMpCgkJCQl7CgkJCQkJJHNsaXN0W10gPSBzcHJpbnRmKCclcyAlZCcsJHNbJ3R5cGUn XSwkc1snaWQnXSk7CgkJCQl9CgoJCQkJJG1zZyAuPSBqb2luKCcsICcsJHNsaXN0KSAuICc7 ICc7CgkJCX0KCgkJCS8vIGJ1aWxkIGZhaWx1cmUgbGlzdAoJCQlpZiAoY291bnQoJGZhaWxl ZCk+MCkKCQkJewoJCQkJJG1zZyAuPSAneyRtZXRob2R9IGZhaWxlZCBmb3I6ICc7CgkJCQkk Zmxpc3QgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkZmFpbGVkIGFzICRmKQoJCQkJewoJCQkJ CSRmbGlzdFtdID0gc3ByaW50ZignJXMgJWQnLCRmWyd0eXBlJ10sJGZbJ2lkJ10pOwoJCQkJ fQoKCQkJCSRtc2cgLj0gam9pbignLCAnLCRmbGlzdCkgLiAnOyAnOwoJCQl9CgoJCQltZW1f bW9kZXJhdGVfbGlzdCgkbXNnKTsKCQl9CgkJZWxzZQoJCXsKCQkJbWVtX21vZGVyYXRlX2xp c3QoJG1zZyk7CgkJfQoJfQoKCS8qKiBQbHVnaW4gaW5zdGFsbGVyICovCglmdW5jdGlvbiBt ZW1fbW9kZXJhdGlvbl9pbnN0YWxsKCkKCXsKCQlnbG9iYWwgJHByZWZzOwoKCQkkY3JlYXRl X2RlZmF1bHRfZm9ybXMgPSB0cnVlOwoKCQkkbG9nID0gYXJyYXkoKTsKCgkJb2Jfc3RhcnQo KTsKCgkJLy8gc2V0IHByZWZzCgkJaWYgKCFpc3NldCgkcHJlZnNbJ21lbV9tb2Rfbm90aWZ5 X2VtYWlsJ10pKQoJCXsKCQkJc2V0X3ByZWYoJ21lbV9tb2Rfbm90aWZ5X2VtYWlsJywgJycs ICdtZW1fbW9kZXJhdGlvbicsIDEpOwoJCQkkbG9nW10gPSBtZW1fbW9kZXJhdGlvbl9nVHh0 KCdzZXRfcHJlZicsIGFycmF5KCd7bmFtZX0nID0+ICdtZW1fbW9kX25vdGlmeV9lbWFpbCcp KTsKCQl9CgkJaWYgKCFpc3NldCgkcHJlZnNbJ21lbV9tb2RfZW1haWxfb25fbmV3J10pKQoJ CXsKCQkJc2V0X3ByZWYoJ21lbV9tb2RfZW1haWxfb25fbmV3JywgJycsICdtZW1fbW9kZXJh dGlvbicsIDEsICd5ZXNub3JhZGlvJyk7CgkJCSRsb2dbXSA9IG1lbV9tb2RlcmF0aW9uX2dU eHQoJ3NldF9wcmVmJywgYXJyYXkoJ3tuYW1lfScgPT4gJ21lbV9tb2RfZW1haWxfb25fbmV3 JykpOwoJCX0KCQlpZiAoIWlzc2V0KCRwcmVmc1snbWVtX21vZF9lbWFpbF9vbl91cGRhdGUn XSkpCgkJewoJCQlzZXRfcHJlZignbWVtX21vZF9lbWFpbF9vbl91cGRhdGUnLCAnJywgJ21l bV9tb2RlcmF0aW9uJywgMSwgJ3llc25vcmFkaW8nKTsKCQkJJGxvZ1tdID0gbWVtX21vZGVy YXRpb25fZ1R4dCgnc2V0X3ByZWYnLCBhcnJheSgne25hbWV9JyA9PiAnbWVtX21vZF9lbWFp bF9vbl91cGRhdGUnKSk7CgkJfQoJCWlmICghaXNzZXQoJHByZWZzWydtZW1fbW9kX3F1ZXVl X2RlbGF5J10pKQoJCXsKCQkJc2V0X3ByZWYoJ21lbV9tb2RfcXVldWVfZGVsYXknLCAnMCcs ICdtZW1fbW9kZXJhdGlvbicsIDEpOwoJCQkkbG9nW10gPSBtZW1fbW9kZXJhdGlvbl9nVHh0 KCdzZXRfcHJlZicsIGFycmF5KCd7bmFtZX0nID0+ICdtZW1fbW9kX3F1ZXVlX2RlbGF5Jykp OwoJCX0KCQlpZiAoIWlzc2V0KCRwcmVmc1snbWVtX21vZF9tdWx0aWVkaXRfYXBwcm92ZSdd KSkKCQl7CgkJCXNldF9wcmVmKCdtZW1fbW9kX211bHRpZWRpdF9hcHByb3ZlJywgJzAnLCAn bWVtX21vZGVyYXRpb24nLCAxLCAneWVzbm9yYWRpbycpOwoJCQkkbG9nW10gPSBtZW1fbW9k ZXJhdGlvbl9nVHh0KCdzZXRfcHJlZicsIGFycmF5KCd7bmFtZX0nID0+ICdtZW1fbW9kX211 bHRpZWRpdF9hcHByb3ZlJykpOwoJCX0KCQlpZiAoIWlzc2V0KCRwcmVmc1snbWVtX21vZF9w dWJfYnlwYXNzX3F1ZXVlJ10pKQoJCXsKCQkJc2V0X3ByZWYoJ21lbV9tb2RfcHViX2J5cGFz c19xdWV1ZScsICcwJywgJ21lbV9tb2RlcmF0aW9uJywgMSwgJ3llc25vcmFkaW8nKTsKCQkJ JGxvZ1tdID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnc2V0X3ByZWYnLCBhcnJheSgne25hbWV9 JyA9PiAnbWVtX21vZF9wdWJfYnlwYXNzX3F1ZXVlJykpOwoJCX0KCQkvLyBjaGVjayBmb3Ig dGFibGUKCQkkcnMgPSBzYWZlX3JvdygiaWQiLCAidHhwX21vZGVyYXRpb24iLCAiMT0xIExJ TUlUIDEiKTsKCiAgICAgCWlmICghJHJzICYmIG15c3FsX2Vycm5vKCkgIT0gMCkKICAgICAJ ewogICAgIAkJLy8gYWRkIHRhYmxlCgkJCSRzcWwgPSAiQ1JFQVRFIFRBQkxFIGAiLlBGWC4i dHhwX21vZGVyYXRpb25gICgKCQkJCSAgYGlkYCBpbnQoMTApIHVuc2lnbmVkIE5PVCBOVUxM IGF1dG9faW5jcmVtZW50LAoJCQkJICBgc3VibWl0dGVkYCBkYXRldGltZSBOT1QgTlVMTCBk ZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKCQkJCSAgYHR5cGVgIHZhcmNoYXIoMzIp IE5PVCBOVUxMIGRlZmF1bHQgJycsCgkJCQkgIGBpdGVtX2lkYCBpbnQoMTApIHVuc2lnbmVk IE5PVCBOVUxMIGRlZmF1bHQgJzAnLAoJCQkJICBgdXNlcmAgdmFyY2hhcig2NCkgTk9UIE5V TEwgZGVmYXVsdCAnJywKCQkJCSAgYGVtYWlsYCB2YXJjaGFyKDEwMCkgTk9UIE5VTEwgZGVm YXVsdCAnJywKCQkJCSAgYGlwYCB2YXJjaGFyKDE2KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAoJ CQkJICBgZGVzY2AgdGV4dCBOT1QgTlVMTCwKCQkJCSAgYGRhdGFgIGxvbmd0ZXh0IE5PVCBO VUxMLAoJCQkJICBQUklNQVJZIEtFWSAgKGBpZGApLAoJCQkJICBLRVkgYHR5cGVgIChgdHlw ZWApCgkJCQkpIFR5cGU9TXlJU0FNIFBBQ0tfS0VZUz0wIEFVVE9fSU5DUkVNRU5UPTEgIjsK CgkJCWlmICgoJHJzPXNhZmVfcXVlcnkoJHNxbCkpKQoJCQl7CgkJCQkkbG9nW10gPSBtZW1f bW9kZXJhdGlvbl9nVHh0KCd0YWJsZV9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gUEZY LiJ0eHBfbW9kZXJhdGlvbiIpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRsb2dbXSA9IG1l bV9tb2RlcmF0aW9uX2dUeHQoJ3RhYmxlX2NyZWF0ZV9mYWlsZWQnLCBhcnJheSgne215c3Fs X2Vycm9yfScgPT4gbXlzcWxfZXJyb3IoKSkpOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSRs b2dbXSA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ3RhYmxlX2V4aXN0cycpOwoKCQkJJHJzID0g c2FmZV9yb3coIml0ZW1faWQiLCAidHhwX21vZGVyYXRpb24iLCAiMT0xIExJTUlUIDEiKTsK CgkJCWlmICghJHJzICYmIG15c3FsX2Vycm5vKCkgIT0gMCkKCQkJewoJCSAgICAgCWlmIChz YWZlX2FsdGVyKCd0eHBfbW9kZXJhdGlvbicsICJBREQgYGl0ZW1faWRgIElOVCBOT1QgTlVM TCBERUZBVUxUICcwJyBBRlRFUiBgdHlwZWAiKSkKCQkgICAgIAl7CgkJICAgICAJCSRsb2db XSA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2FkZF9pdGVtX2ZpZWxkJyk7CgkJICAgICAJfQoJ CSAgICAgCWVsc2UKCQkgICAgIAl7CgkJICAgICAJCSRsb2dbXSA9IG1lbV9tb2RlcmF0aW9u X2dUeHQoJ2FkZF9pdGVtX2ZpZWxkX2ZhaWxlZCcpOwoJCSAgICAgCX0KCQkJfQoJCX0KCgkJ aWYgKCRjcmVhdGVfZGVmYXVsdF9mb3JtcykKCQl7CgkJCSRmb3JtID0gZmV0Y2goJ0Zvcm0n LCd0eHBfZm9ybScsJ25hbWUnLCdtb2Rfc3VibWlzc2lvbl9saXN0Jyk7CgkJCWlmICghJGZv cm0pCgkJCXsKCQkJCSRmb3JtX2h0bWwgPSA8PDxFT0YKPHR4cDptZW1fbW9kZXJhdGlvbl9l ZGl0X2xpbms+PHR4cDptZW1fbW9kZXJhdGlvbl9pbmZvIGZpZWxkPSJ0eXBlIiAvPgojPHR4 cDptZW1fbW9kZXJhdGlvbl9pbmZvIGZpZWxkPSJpZCIgLz48L3R4cDptZW1fbW9kZXJhdGlv bl9lZGl0X2xpbms+IC0gPHR4cDptZW1fbW9kZXJhdGlvbl9pbmZvIGZpZWxkPSJzdWJtaXR0 ZWQiIC8+CjxkaXY+Cgk8dHhwOm1lbV9tb2RlcmF0aW9uX2luZm8gZmllbGQ9ImRlc2MiIC8+ CjwvZGl2PgpFT0Y7CgkJCQkkZm9ybV9odG1sID0gZG9TbGFzaCgkZm9ybV9odG1sKTsKCQkJ CWlmIChzYWZlX2luc2VydCgndHhwX2Zvcm0nLCJuYW1lPSdtb2Rfc3VibWlzc2lvbl9saXN0 Jyx0eXBlPSdtaXNjJyxGb3JtPSd7JGZvcm1faHRtbH0nIikpCgkJCQl7CgkJCQkJJGxvZ1td ID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnZm9ybV9jcmVhdGVkJywgYXJyYXkoJ3tmb3JtfScg PT4gJ21vZF9zdWJtaXNzaW9uX2xpc3QnKSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJ JGxvZ1tdID0gbWVtX21vZGVyYXRpb25fZ1R4dCgnZm9ybV9jcmVhdGVfZmFpbGVkJywgYXJy YXkoJ3tmb3JtfScgPT4gJ21vZF9zdWJtaXNzaW9uX2xpc3QnLCAnbXlzcWxfZXJyb3InID0+ IG15c3FsX2Vycm9yKCkpKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRsb2dbXSA9 IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ2Zvcm1fZm91bmQnLCBhcnJheSgne2Zvcm19JyA9PiAn bW9kX3N1Ym1pc3Npb25fbGlzdCcpKTsKCQkJfQoKCgkJfQoJCWVsc2UKCQl7CgkJCSRsb2db XSA9IG1lbV9tb2RlcmF0aW9uX2dUeHQoJ3NraXBwaW5nX2Zvcm1faW5zdGFsbCcpOwoJCX0K CgkJb2JfZW5kX2NsZWFuKCk7CgoJCXJldHVybiB0YWcobWVtX21vZGVyYXRpb25fZ1R4dCgn aW5zdGFsbF9sb2cnKSwnaDInKS5kb1dyYXAoJGxvZywndWwnLCdsaScpOwoJfQoKCS8qKiBT aG93IGl0ZW0gbW9kZXJhdGlvbiBkZXRhaWxzICovCglmdW5jdGlvbiBtZW1fbW9kZXJhdGVf ZGV0YWlscygpCgl7CgkJZ2xvYmFsICRzdGVwLCRtb2RfZXZlbnQsJHR4cF91c2VyOwoKCQkk Y2FuX2FwcHJvdmUgPSBoYXNfcHJpdnMoJ21vZGVyYXRlLmFwcHJvdmUnKTsKCQkkY2FuX2Vk aXQgPSBoYXNfcHJpdnMoJ21vZGVyYXRlLmVkaXQnKTsKCgkJJGlkID0gZ3BzKCdpZCcpOwoJ CWlmKCRpZCkKCQl7CgkJCS8vIGZldGNoIGl0ZW0KCQkJZXh0cmFjdChzYWZlX3JvdygiKiIs ICJ0eHBfbW9kZXJhdGlvbiIsICJpZCA9ICIgLiBkb1NsYXNoKCRpZCkpKTsKCgkJCSRjYW5f ZWRpdCA9ICRjYW5fZWRpdCBvciAkdXNlcj09JHR4cF91c2VyOwoKCQkJJHRleHRhcmVhID0g Jzx0ZXh0YXJlYSBuYW1lPSJtb2RlcmF0aW9uX2Rlc2NyaXB0aW9uIiBjb2xzPSI0MCIgcm93 cz0iNyIgdGFiaW5kZXg9IjQiPicuCgkJCQkJCWh0bWxzcGVjaWFsY2hhcnMoJGRlc2MpLgoJ CQkJCQknPC90ZXh0YXJlYT4nOwoKCQkJJG91dCA9IFN0YXJ0VGFibGUoJ2xpc3RpbmcnKTsK CQkJJG91dCAuPSB0ciggdGQoCgkJCQkJCWhlZCgiJHR5cGUgI3skaWR9IC0gIi5ocmVmKCgk dXNlcj8kdXNlcjokZW1haWwpLCdtYWlsdG86Jy4kZW1haWwpIC4gIiAoeyRlbWFpbH0pIiwg MikgLgoJCQkJCQl0YWcoIGdUeHQoJ3N1Ym1pdHRlZCcpIC4nICcuICRzdWJtaXR0ZWQgLCAn ZGl2JykgLgoJCQkJCQl0YWcoIGdUeHQoJ25vdGVzJyksICdkaXYnKSAuICR0ZXh0YXJlYQoJ CQkJCQkpCgkJCQkJKSAuCgkJCQkJdHIoIHRkKCc8aHIgLz4nKSApOwoJCQkkb3V0IC49IEVu ZFRhYmxlKCk7CgoJCQkkZGVjb2RlZF9kYXRhID0gbWVtX21vZGVyYXRpb25fZGVjb2RlKCRk YXRhKTsKCgkJCSRkZWNvZGVkX2RhdGFbJ2lkJ10gPSAkaWQ7CgkJCSRkZWNvZGVkX2RhdGFb J3R5cGUnXSA9ICR0eXBlOwoJCQkkZGVjb2RlZF9kYXRhWyd1c2VyJ10gPSAkdXNlcjsKCQkJ JGRlY29kZWRfZGF0YVsnZW1haWwnXSA9ICRlbWFpbDsKCgkJCSRvdXQgLj0gbWVtX21vZGVy YXRpb25fcHJlc2VudGVyX2NhbGxiYWNrKCR0eXBlLCAkZGVjb2RlZF9kYXRhKTsKCgkJCSRv dXQgLj0gZUlucHV0KCAkbW9kX2V2ZW50ICkgLiBzSW5wdXQoICRtb2RfZXZlbnQgLidfdXBk YXRlJyApIC4gaElucHV0KCAnaWQnLCAkaWQgKTsKCQkJJG91dCAuPSBoSW5wdXQoJ3R5cGUn LCR0eXBlKTsKCQkJaWYgKCRjYW5fZWRpdCBvciAkY2FuX2FwcHJvdmUpCgkJCXsKCQkJCSRv dXQgLj0gU3RhcnRUYWJsZSgnJykgLgoJCQkJCXRyKAoJCQkJCQkoJGNhbl9lZGl0ID8KCQkJ CQkJCQl0ZCggZklucHV0KCAic3VibWl0IiwgJ2FjdGlvbicsIGdUeHQoICdzYXZlJyApLCAi cHVibGlzaCIgKSApCgkJCQkJCQk6IHRkKCkKCQkJCQkJKSAuCgkJCQkJCSgkY2FuX2FwcHJv dmUgPwoJCQkJCQkJCXRkKCBmSW5wdXQoICJzdWJtaXQiLCAnYWN0aW9uJywgZ1R4dCggJ2Fw cHJvdmUnICksICJwdWJsaXNoIiApICkgLgoJCQkJCQkJCXRkKCBmSW5wdXQoICJzdWJtaXQi LCAnYWN0aW9uJywgZ1R4dCggJ3JlamVjdCcgKSwgInB1Ymxpc2giLCcnLCJyZXR1cm4gY29u ZmlybSgnIi4gZ1R4dCgnYXJlX3lvdV9zdXJlJykuIicpIiApICkKCQkJCQkJCTogdGQoKSAu IHRkKCkKCQkJCQkJKQoJCQkJCSkgLgoJCQkJCUVuZFRhYmxlKCk7CgkJCX0KCgkJCWVjaG8g Zm9ybSggJG91dCApOwoJCX0KCX0KfQplbHNlCnsKCSR0eXBlID0gZ3BzKCRtb2RfZXZlbnQp OwoKCWlmICghZW1wdHkoJHR5cGUpKSB7CgkJZWNobyB0YWcoJ0RvaW5nIGEgbW9kZXJhdGlv biBwb3N0YmFjaycsJ2RpdicpOwoKCQkkdmFycyA9IG1lbV9nZXRfbW9kZXJhdGlvbl92YXJp YWJsZXMoJHR5cGUpOwoKCQkkZGF0YSA9IGdwc2EoJHZhcnMpOwoKCQlleGl0KCk7Cgl9Cn0K IjtzOjg6ImhlbHBfcmF3IjtzOjEwMzcyOiJoMSh0aXRsZSkuIG1lbV9tb2RlcmF0aW9uIHBs dWdpbgoKaDIoc2VjdGlvbiBzdW1tYXJ5KS4gU3VtbWFyeQoKcC4gVGhpcyBwbHVnaW4gYWRk cyBhIGdlbmVyaWMgbW9kZXJhdGlvbiBxdWV1ZSB0byBUZXh0cGF0dGVybi4gQSBwbHVnaW4g Y2FuIGV4dGVuZCB0aGUgbW9kZXJhdGlvbiBxdWV1ZSB0byBzdXBwb3J0IGFueSB0eXBlIG9m IGNvbnRlbnQuCgpoMihzZWN0aW9uIGNvbnRhY3QpLiBBdXRob3IgQ29udGFjdAoKIk1pY2hh ZWwgTWFuZnJlIjptYWlsdG86bW1hbmZyZUBnbWFpbC5jb20/c3ViamVjdD1UZXh0cGF0dGVy biUyMG1lbV9tb2RlcmF0aW9uJTIwcGx1Z2luCiJodHRwOi8vbWFuZnJlLm5ldCI6aHR0cDov L21hbmZyZS5uZXQKCmgyKHNlY3Rpb24gbGljZW5zZSkuIExpY2Vuc2UKCnAuIFRoaXMgcGx1 Z2luIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSAiR1BMdjIiOmh0dHA6Ly93d3cuZnNmLm9yZy9s aWNlbnNpbmcvbGljZW5zZXMvaW5mby9HUEx2Mi5odG1sLgoKaDIoc2VjdGlvbiBpbnN0YWxs YXRpb24pLiBJbnN0YWxsYXRpb24KCnAuICJTdGFydCBJbnN0YWxsIFdpemFyZCI6Li9pbmRl eC5waHA/ZXZlbnQ9bW9kZXJhdGUmc3RlcD1wcmVpbnN0YWxsCgpoMihzZWN0aW9uIHRhZ3Mp LiBUYWdzCgoqICJtZW1faWZfbW9kZXJhdGlvbiI6I21lbV9pZl9tb2RlcmF0aW9uCiogIm1l bV9tb2RlcmF0aW9uX2luZm8iOiNtZW1fbW9kZXJhdGlvbl9pbmZvCiogIm1vZGVyYXRlX3N1 Ym1pc3Npb25fbGlzdCI6I21vZGVyYXRlX3N1Ym1pc3Npb25fbGlzdAoqICJtZW1faWZfdHlw ZSI6I21lbV9pZl90eXBlCiogIm1lbV9pZl9kYXRhIjojbWVtX2lmX2RhdGEKKiAibWVtX21v ZGVyYXRpb25faWZfZ3BzIjojbWVtX21vZGVyYXRpb25faWZfZ3BzCiogIm1vZF9pZCI6I21v ZF9pZAoqICJtb2RfaXRlbV9pZCI6I21vZF9pdGVtX2lkCiogIm1vZF9zdWJtaXR0ZWQiOiNt b2Rfc3VibWl0dGVkCiogIm1vZF91c2VyIjojbW9kX3VzZXIKKiAibW9kX2Rlc2MiOiNtb2Rf ZGVzYwoqICJtb2RfdHlwZSI6I21vZF90eXBlCiogIm1vZF9lbWFpbCI6I21vZF9lbWFpbAoq ICJtb2RfZGF0YSI6I21vZF9kYXRhCiogIm1vZF9ub3RlX2lucHV0IjojbW9kX25vdGVfaW5w dXQKCmgzKHRhZyNtZW1faWZfbW9kZXJhdGlvbikuIG1lbV9pZl9tb2RlcmF0aW9uCgpwKHRh Zy1zdW1tYXJ5KS4gQ29uZGl0aW9uYWxseSBwYXJzZSBhIGJsb2NrIG9mIHRleHQgYmFzZWQg dXBvbiB2YXJpb3VzIGNoZWNrcy4KCiooYXR0cykgJShhdHRzLW5hbWUpY2hlY2slICUoYXR0 cy10eXBlKXN0cmluZyUgVHlwZSBvZiBjaGVjayB0byBwZXJmb3JtLiBFaXRoZXIgJ3R5cGUn LCAnZGF0YScgb3IgJ2dwcycKKiAlKGF0dHMtbmFtZSluYW1lJSAlKGF0dHMtdHlwZSlzdHJp bmclIE5hbWUgb2YgdGhlIHR5cGUsIGRhdGEgZmllbGQgb3IgR0VUL1BPU1QgdmFyaWFibGUu CiogJShhdHRzLW5hbWUpdmFsdWUlICUoYXR0cy10eXBlKXN0cmluZyUgVmFsdWUgdG8gY29t cGFyZSBhZ2FpbnN0IGZvciAnZGF0YScgYW5kICdncHMnIGNoZWNrcy4KKiAlKGF0dHMtbmFt ZSBkZWxpbWl0ZXIpdHlwZSUgJShhdHRzLXR5cGUpc3RyaW5nJSBOYW1lIG9mIHRoZSBmb3Jt IHRvIGlkZW50aWZ5IGl0c2VsZiB0byBib3VuZCBwbHVnaW4uCgpoMyh0YWcjbWVtX21vZGVy YXRpb25faW5mbykuIG1lbV9tb2RlcmF0aW9uX2luZm8KCnAodGFnLXN1bW1hcnkpLiBPdXRw dXQgaW5mb3JtYXRpb24gZnJvbSBhIG1vZGVyYXRlZCBpdGVtLiBTdXBwb3J0ZWQgZmllbGQg bmFtZXMgYXJlICdpZCcsICdpdGVtX2lkJywgJ3N1Ym1pdHRlZCcsICd1c2VyJywgJ2Rlc2Mn LCAndHlwZScsICdlbWFpbCcgYW5kICdkYXRhJy4KCiooYXR0cykgJShhdHRzLW5hbWUpZmll bGQlICUoYXR0cy10eXBlKXN0cmluZyUgRmllbGQgdG8gb3V0cHV0LgoqICUoYXR0cy1uYW1l KWRhdGFmaWVsZCUgJShhdHRzLXR5cGUpc3RyaW5nJSBUaGUgZmllbGQgZnJvbSB0aGUgZW5j b2RlZCBkYXRhLiBGaWVsZCBtdXN0IGJlICdkYXRhJy4KKiAlKGF0dHMtbmFtZSlmb3JtYXQl ICUoYXR0cy10eXBlKXN0cmluZyUgQSB0aW1lIGZvcm1hdCB0byB1c2VkIHRvIGRpc3BsYXkg dGhlIHN1Ym1pdHRlZCB0aW1lLgoKaDModGFnI21vZGVyYXRlX3N1Ym1pc3Npb25fbGlzdCku IG1vZGVyYXRlX3N1Ym1pc3Npb25fbGlzdAoKcCh0YWctc3VtbWFyeSkuIFRoaXMgd2lsbCBv dXRwdXQgYW4gSFRNTCB0ZXh0IGlucHV0IGZpZWxkIGFuZCB2YWxpZGF0ZXMgdGhlIHN1Ym1p dHRlZCB2YWx1ZSBhcyBhbiBlbWFpbCBhZGRyZXNzLgoKKihhdHRzKSAlKGF0dHMtbmFtZSlm b3JtJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSBmb3JtIGNvbnRhaW5pbmcgdGhlIGZvcm1h dHRpbmcgdGFncy4gSWYgc3BlY2lmaWVkLCB0YWcgZW5jbG9zZWQgdGV4dCBpcyBpZ25vcmVk LgoqICUoYXR0cy1uYW1lKXR5cGUlICUoYXR0cy10eXBlKXN0cmluZyUgV2hlbiBzZXQsIHRo aXMgd2lsbCByZXN0cmljdCB0aGUgbGlzdCB0byBzcGVjaWZpYyB0eXBlcyBvZiBtb2RlcmF0 ZWQgY29udGVudC4KKiAlKGF0dHMtbmFtZSl3cmFwdGFnJSAlKGF0dHMtdHlwZSlzdHJpbmcl IEhUTUwgdGFnIHRvIHdyYXAgYXJvdW5kIHRoZSBvdXRwdXQuCiogJShhdHRzLW5hbWUpYnJl YWslICUoYXR0cy10eXBlKXN0cmluZyUgVGV4dC9IVE1MIHRvIHNlcGFyYXRlIGVhY2ggaXRl bSBpbiB0aGUgbGlzdC4KKiAlKGF0dHMtbmFtZSlicmVha2NsYXNzJSAlKGF0dHMtdHlwZSlz dHJpbmclIENTUyBjbGFzcyBuYW1lLgoqICUoYXR0cy1uYW1lKWNsYXNzJSAlKGF0dHMtdHlw ZSlzdHJpbmclIENTUyBjbGFzcyBuYW1lLgoqICUoYXR0cy1uYW1lKXVzZXIlICUoYXR0cy10 eXBlKXN0cmluZyUgUmVzdHJpY3QgdGhlIGxpc3QgdG8gc3BlY2lmaWVkIHVzZXJzLiBEZWZh dWx0cyB0byBsb2dnZWQgaW4gdXNlci4KKiAlKGF0dHMtbmFtZSlsYWJlbCUgJShhdHRzLXR5 cGUpc3RyaW5nJSBUZXh0L0hUTUwgdGhhdCBwcmVjZWVkcyB0aGUgbGlzdC4KKiAlKGF0dHMt bmFtZSlsYWJlbHdyYXB0YWclICUoYXR0cy10eXBlKXN0cmluZyUgSFRNTCB0YWcgdG8gd3Jh cCBhcm91bmQgdGhlIGxhYmVsLgoqICUoYXR0cy1uYW1lKWxhYmVsY2xhc3MlICUoYXR0cy10 eXBlKXN0cmluZyUgQ1NTIGNsYXNzIG5hbWUgZm9yIGxhYmVsd3JhcHRhZy4KCmgzKHRhZyNt ZW1faWZfdHlwZSkuIG1lbV9pZl90eXBlIF8oZGVwcmVjYXRlZClfCgpwKHRhZy1zdW1tYXJ5 KS4gQ29uZGl0aW9uYWxseSBwYXJzZSBhIGJsb2NrIG9mIHRleHQgYmFzZWQgdXBvbiB0aGUg Y3VycmVudCBtb2RlcmF0aW9uIHR5cGUuCgoqKGF0dHMpICUoYXR0cy1uYW1lKW5hbWUlICUo YXR0cy10eXBlKXN0cmluZyUgTmFtZSBvZiB0aGUgbW9kZXJhdGlvbiB0byBjb21wYXJlIGFn YWluc3QuCgoKaDModGFnI21lbV9pZl9kYXRhKS4gbWVtX2lmX2RhdGEgXyhkZXByZWNhdGVk KV8KCnAodGFnLXN1bW1hcnkpLiBDb25kaXRpb25hbGx5IHBhcnNlIGJhc2VkIHVwb24gc3Bl Y2lmaWMgbW9kZXJhdGlvbiBkYXRhLgoKKihhdHRzKSAlKGF0dHMtbmFtZSluYW1lJSAlKGF0 dHMtdHlwZSlzdHJpbmclIE5hbWUgb2YgdGhlIGRhdGEgZmllbGQuCiogJShhdHRzLW5hbWUp dmFsdWUlICUoYXR0cy10eXBlKXN0cmluZyUgVmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiBJ ZiBibGFuaywgY2hlY2tzIGZvciBleGlzdGFuY2UuCgpoMyh0YWcjbWVtX21vZGVyYXRpb25f aWZfZ3BzKS4gbWVtX21vZGVyYXRpb25faWZfZ3BzIF8oZGVwcmVjYXRlZClfCgpwKHRhZy1z dW1tYXJ5KS4gQ29uZGl0aW9uYWxseSBwYXJzZSBiYXNlZCB1cG9uIGEgR0VUL1BPU1QgdmFy aWFibGUuCgoqKGF0dHMpICUoYXR0cy1uYW1lKW5hbWUlICUoYXR0cy10eXBlKXN0cmluZyUg TmFtZSBvZiB0aGUgR0VUL1BPU1QgdmFyaWFibGUuCiogJShhdHRzLW5hbWUpdmFsdWUlICUo YXR0cy10eXBlKXN0cmluZyUgVmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LiBJZiBibGFuaywg Y2hlY2tzIGZvciBleGlzdGFuY2UuCgpoMyh0YWcjbW9kX2lkKS4gbW9kX2lkIF8oZGVwcmVj YXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gT3V0cHV0IG1vZGVyYXRpb24gaWQgZmllbGQuCgpo Myh0YWcjbW9kX2l0ZW1faWQpLiBtb2RfaXRlbV9pZCBfKGRlcHJlY2F0ZWQpXwoKcCh0YWct c3VtbWFyeSkuIE91dHB1dCBtb2RlcmF0aW9uIGl0ZW1faWQgZmllbGQuCgpoMyh0YWcjbW9k X3N1Ym1pdHRlZCkuIG1vZF9zdWJtaXR0ZWQgXyhkZXByZWNhdGVkKV8KCnAodGFnLXN1bW1h cnkpLiBPdXRwdXQgbW9kZXJhdGlvbiBzdWJtaXR0ZWQgZmllbGQuCgoqKGF0dHMpICUoYXR0 cy1uYW1lKWZvcm1hdCUgJShhdHRzLXR5cGUpc3RyaW5nJSBUaW1lIGZvcm1hdCBzdHJpbmcu CgpoMyh0YWcjbW9kX3VzZXIpLiBtb2RfdXNlciBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3Vt bWFyeSkuIE91dHB1dCBtb2RlcmF0aW9uIHVzZXIgZmllbGQuCgpoMyh0YWcjbW9kX2Rlc2Mp LiBtb2RfZGVzYyBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3VtbWFyeSkuIE91dHB1dCBtb2Rl cmF0aW9uIGRlc2MgZmllbGQuCgpoMyh0YWcjbW9kX3R5cGUpLiBtb2RfdHlwZSBfKGRlcHJl Y2F0ZWQpXwoKcCh0YWctc3VtbWFyeSkuIE91dHB1dCBtb2RlcmF0aW9uIHR5cGUgZmllbGQu CgpoMyh0YWcjbW9kX2VtYWlsKS4gbW9kX2VtYWlsIF8oZGVwcmVjYXRlZClfCgpwKHRhZy1z dW1tYXJ5KS4gT3V0cHV0IG1vZGVyYXRpb24gZW1haWwgZmllbGQuCgpoMyh0YWcjbW9kX2Rh dGEpLiBtb2RfZGF0YSBfKGRlcHJlY2F0ZWQpXwoKcCh0YWctc3VtbWFyeSkuIE91dHB1dCBt b2RlcmF0aW9uIGRhdGEgZmllbGQuCgoqKGF0dHMpICUoYXR0cy1uYW1lKW5hbWUlICUoYXR0 cy10eXBlKXN0cmluZyUgTmFtZSBvZiB0aGUgbW9kZXJhdGlvbiBkYXRhIGZpZWxkLgoKCmgz KHRhZyNtb2Rfbm90ZV9pbnB1dCkuIG1vZF9ub3RlX2lucHV0IF8oZGVwcmVjYXRlZClfCgpw KHRhZy1zdW1tYXJ5KS4gT3V0cHV0cyBhbiBIVE1MIHRleHRhcmVhIHRvIHByb2Nlc3MgdGhl ICdub3RlJyBmaWVsZC4KCmgzKHRhZyNtZW1fbW9kZXJhdGlvbl9lZGl0X2xpbmspLiBtZW1f bW9kZXJhdGlvbl9lZGl0X2xpbmsKCnAodGFnLXN1bW1hcnkpLiBPdXRwdXQgYSB1c2VyIHNp ZGUgbGluayB0byBlZGl0IGEgc3BlY2lmaWMgbW9kZXJhdGlvbiBpdGVtLgoKKihhdHRzKSAl KGF0dHMtbmFtZSlsYWJlbCUgJShhdHRzLXR5cGUpc3RyaW5nJSBGcmllbmRseSBuYW1lIGZv ciB0aGUgaW5wdXQgZmllbGQuIElmIHNldCwgdGhpcyB3aWxsIG91dHB1dCBhbiBIVE1MID09 PGxhYmVsPj09IHRhZyBsaW5rZWQgdG8gdGhlIGlucHV0IGZpZWxkLgoqICUoYXR0cy1uYW1l KW5hbWUlICUoYXR0cy10eXBlKXN0cmluZyUgSW5wdXQgZmllbGQgbmFtZS4KKiAlKGF0dHMt bmFtZSlicmVhayUgJShhdHRzLXR5cGUpc3RyaW5nJSBTZXBhcmF0b3IgYmV0d2VlbiBsYWJl bCB0YWcgYW5kIGlucHV0IHRhZy4KKiAlKGF0dHMtbmFtZSlkZWxpbWl0ZXIlICUoYXR0cy10 eXBlKXN0cmluZyUgTGlzdCBzZXBhcmF0b3IuIERlZmF1bHQgIiwiCiogJShhdHRzLW5hbWUp aXRlbXMlICUoYXR0cy10eXBlKXN0cmluZyUgRGVsaW1pdGVkIGxpc3QgY29udGFpbmluZyBh IHNlbGVjdCBsaXN0IGRpc3BsYXkgdmFsdWVzLgoqICUoYXR0cy1uYW1lKXZhbHVlcyUgJShh dHRzLXR5cGUpc3RyaW5nJSBEZWxpbWl0ZWQgbGlzdCBjb250YWluaW5nIGEgc2VsZWN0IGxp c3QgaXRlbSB2YWx1ZXMuCiogJShhdHRzLW5hbWUpcmVxdWlyZWQlICUoYXR0cy10eXBlKWlu dCUgU3BlY2lmaWVzIGlmIGlucHV0IGlzIHJlcXVpcmVkLgoqICUoYXR0cy1uYW1lKXNlbGVj dGVkJSAlKGF0dHMtdHlwZSlzdHJpbmclIFRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgaXRl bS4KKiAlKGF0dHMtbmFtZSlmaXJzdCUgJShhdHRzLXR5cGUpc3RyaW5nJSBEaXNwbGF5IHZh bHVlIG9mIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LiBFLmcuICJTZWxlY3QgYSBTZWN0 aW9uIiBvciAiIiBmb3IgYSBibGFuayBvcHRpb24uCiogJShhdHRzLW5hbWUpY2xhc3MlICUo YXR0cy10eXBlKXN0cmluZyUgQ1NTIGNsYXNzIG5hbWUuCiogJShhdHRzLW5hbWUpZXhjbHVk ZSUgJShhdHRzLXR5cGUpc3RyaW5nJSBMaXN0IG9mIGl0ZW0gdmFsdWVzIHRoYXQgd2lsbCBu b3QgYmUgaW5jbHVkZWQuCiogJShhdHRzLW5hbWUpc29ydCUgJShhdHRzLXR5cGUpc3RyaW5n JSAgSG93IHdpbGwgdGhlIGxpc3QgdmFsdWVzIGJlIHNvcnRlZC4KCgpoMyh0YWcjbW9kX2Vk aXRfbGluaykuIG1vZF9lZGl0X2xpbmsgXyhkZXByZWNhdGVkKV8KCnAodGFnLXN1bW1hcnkp LiBTZWUgbWVtX21vZGVyYXRpb25fZWRpdF9saW5rLgoKCmgyKHNlY3Rpb24pLiBFeHBvc2Vk IEZ1bmN0aW9ucwoKaDModGFnKS4gcmVnaXN0ZXJfbW9kZXJhdGlvbl90eXBlIF8oZGVwcmVj YXRlZClfCgpwKHRhZy1zdW1tYXJ5KS4gU2VlIG1lbV9tb2RlcmF0aW9uX3JlZ2lzdGVyLgoK aDModGFnKS4gbWVtX21vZGVyYXRpb25fcmVnaXN0ZXIKCnAodGFnLXN1bW1hcnkpLiBSZWdp c3RlcnMgYSBtb2RlcmF0aW9uIHR5cGUgdG8gYmUgdXNlZCBpbiB0aGUgbW9kZXJhdGlvbiBx dWV1ZS4KCiooYXR0cykgJShhdHRzLW5hbWUpdHlwZSUgJShhdHRzLXR5cGUpc3RyaW5nJSBN b2RlcmF0aW9uIHR5cGUgbmFtZS4KKiAlKGF0dHMtbmFtZSl2YXJzJSAlKGF0dHMtdHlwZSlh cnJheSUgQXJyYXkgb2YgR0VUL1BPU1QgdmFyaWFibGUgdXNlZCBieSB0aGlzIG1vZGVyYXRp b24gdHlwZS4KKiAlKGF0dHMtbmFtZSlwcmVzZW50ZXIlICUoYXR0cy10eXBlKXN0cmluZyUg TmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnN0cnVjdCBhIGZvcm0gdG8gZWRp dCB0aGUgcGx1Z2luIHNwZWNpZmljIGNvbnRlbnQuIFRoaXMgaXMgbmVlZGVkIHRvIGFsbG93 IG1vZGVyYXRvcnMgdG8gZWRpdCBzdWJtaXR0ZWQgY29udGVudC4KKiAlKGF0dHMtbmFtZSlh cHByb3ZlciUgJShhdHRzLXR5cGUpc3RyaW5nJSBOYW1lIG9mIGNhbGxiYWNrIGZ1bmN0aW9u IHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpdGVtIGlzIG1hcmtlZCBhcyBhcHByb3Zl ZC4KKiAlKGF0dHMtbmFtZSlyZWplY3RlciUgJShhdHRzLXR5cGUpc3RyaW5nJSBOYW1lIG9m IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpdGVtIGlz IG1hcmtlZCBhcyByZWplY3RlZC4KCmgzKHRhZykuIHN1Ym1pdF9tb2RlcmF0ZWRfY29udGVu dAoKcCh0YWctc3VtbWFyeSkuIEFkZHMgYW4gaXRlbSB0byB0aGUgbW9kZXJhdGlvbiBxdWV1 ZS4KCiooYXR0cykgJShhdHRzLW5hbWUpUmV0dXJuIFZhbHVlJSAlKGF0dHMtdHlwZSlib29s JSBSZXR1cm5zIHRydWUgb3IgZmFsc2UsIGluZGljYXRpbmcgd2hldGhlciB0aGUgaXRlbSB3 YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLgoqICUoYXR0 cy1uYW1lKXR5cGUlICUoYXR0cy10eXBlKXN0cmluZyUgTW9kZXJhdGlvbiB0eXBlIG5hbWUu CiogJShhdHRzLW5hbWUpZW1haWwlICUoYXR0cy10eXBlKXN0cmluZyUgRW1haWwgb2Ygc3Vi bWl0dGluZyB1c2VyLgoqICUoYXR0cy1uYW1lKWRlc2MlICUoYXR0cy10eXBlKXN0cmluZyUg RGVzY3JpcHRpb24gb2YgbW9kZXJhdGVkIGl0ZW0gKG5vdGUgdG8gbW9kZXJhdGVyKS4KKiAl KGF0dHMtbmFtZSlkYXRhJSAlKGF0dHMtdHlwZSltaXhlZCUgTW9kZXJhdGlvbiBzcGVjaWZp YyBkYXRhIHRvIGJlIGVuY29kZWQgYW5kIHN0b3JlZCB3aXRoIHRoZSBpdGVtLgoqICUoYXR0 cy1uYW1lKWl0ZW1faWQlICUoYXR0cy10eXBlKWludCUgKG9wdGlvbmFsKSBUaGUgSUQgb2Yg YSBjb250ZW50IGl0ZW0gbm90IGluIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiBVc2VkIGZvciB3 aGVuIG1vZGVyYXRpbmcgZWRpdHMgb2YgcHVibGlzaGVkIGNvbnRlbnQuCgpoMyh0YWcpLiB1 cGRhdGVfbW9kZXJhdGVkX2NvbnRlbnQKCnAodGFnLXN1bW1hcnkpLiBVcGRhdGVzIGFuIGl0 ZW0gaW4gdGhlIG1vZGVyYXRpb24gcXVldWUuCgoqKGF0dHMpICUoYXR0cy1uYW1lKVJldHVy biBWYWx1ZSUgJShhdHRzLXR5cGUpYm9vbCUgUmV0dXJucyB0cnVlIG9yIGZhbHNlLCBpbmRp Y2F0aW5nIHdoZXRoZXIgdGhlIGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGUgaW4gdGhl IG1vZGVyYXRpb24gcXVldWUuCiogJShhdHRzLW5hbWUpaWQlICUoYXR0cy10eXBlKWludCUg VGhlIElEIG9mIHRoZSBtb2RlcmF0ZWQgaXRlbS4KKiAlKGF0dHMtbmFtZSlkZXNjJSAlKGF0 dHMtdHlwZSlzdHJpbmclIERlc2NyaXB0aW9uIG9mIG1vZGVyYXRlZCBpdGVtIChub3RlIHRv IG1vZGVyYXRlcikuCiogJShhdHRzLW5hbWUpZGF0YSUgJShhdHRzLXR5cGUpbWl4ZWQlIE1v ZGVyYXRpb24gc3BlY2lmaWMgZGF0YSB0byBiZSBlbmNvZGVkIGFuZCBzdG9yZWQgd2l0aCB0 aGUgaXRlbS4KKiAlKGF0dHMtbmFtZSl0eXBlJSAlKGF0dHMtdHlwZSlzdHJpbmclIChvcHRp b25hbCkgTW9kZXJhdGlvbiB0eXBlIG5hbWUuCiogJShhdHRzLW5hbWUpaXRlbV9pZCUgJShh dHRzLXR5cGUpaW50JSAob3B0aW9uYWwpIFRoZSBJRCBvZiBhIGNvbnRlbnQgaXRlbSBub3Qg aW4gdGhlIG1vZGVyYXRpb24gcXVldWUuIFVzZWQgZm9yIHdoZW4gbW9kZXJhdGluZyBlZGl0 cyBvZiBwdWJsaXNoZWQgY29udGVudC4KCmgzKHRhZykuIHJlbW92ZV9tb2RlcmF0ZWRfY29u dGVudAoKcCh0YWctc3VtbWFyeSkuIFJlbW92ZSBhbiBpdGVtIGZyb20gdGhlIG1vZGVyYXRp b24gcXVldWUuCgoqKGF0dHMpICUoYXR0cy1uYW1lKVJldHVybiBWYWx1ZSUgJShhdHRzLXR5 cGUpYm9vbCUgUmV0dXJucyBib29sZWFuIHJlc3VsdCBvZiByZW1vdmUgb3BlcmF0aW9uLgoq ICUoYXR0cy1uYW1lKWlkJSAlKGF0dHMtdHlwZSUpaW50JSBJRCBvZiBtb2RlcmF0ZWQgaXRl bS4KCmgzKHRhZykuIG1lbV9tb2RlcmF0aW9uX2VuY29kZQoKcCh0YWctc3VtbWFyeSkuIFNl cmlhbGl6ZXMgbW9kZXJhdGlvbiBkYXRhIGZvciBzdG9yYWdlLgoKKihhdHRzKSAlKGF0dHMt bmFtZSlSZXR1cm4gVmFsdWUlICUoYXR0cy10eXBlKXN0cmluZyUgUmV0dXJucyBhIHNlcmlh bGl6ZWQgc3RyaW5nLgoqICUoYXR0cy1uYW1lKWNvbnRlbnQlICUoYXR0cy10eXBlJSltaXhl ZCUgVGhlIGRhdGEgdG8gc2VyaWFsaXplLgoKaDModGFnKS4gbWVtX21vZGVyYXRpb25fZGVj b2RlCgpwKHRhZy1zdW1tYXJ5KS4gRGVzZXJpYWxpemVzIG1vZGVyYXRpb24gZGF0YSBmcm9t IHN0b3JhZ2UuCgoqKGF0dHMpICUoYXR0cy1uYW1lKVJldHVybiBWYWx1ZSUgJShhdHRzLXR5 cGUpbWl4ZWQlIFJldHVybnMgdGhlIGRhdGEuCiogJShhdHRzLW5hbWUpY29udGVudCUgJShh dHRzLXR5cGUlKXN0cmluZyUgVGhlIHNlcmlhbGl6ZWQgY29udGVudC4KCmgyKHNlY3Rpb24p LiBHbG9iYWwgVmFyaWFibGVzCgoqKGF0dHMpICUoYXR0cy1uYW1lKSRtZW1fbW9kX2luZm8l ICUoYXR0cy10eXBlKWFycmF5JSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBtb2RlcmF0aW9u IGluZm8uIENhbiBiZSB1c2VkIGJ5IHRhZ3MgaW5zaWRlIG1vZGVyYXRlX3N1Ym1pc3Npb25f bGlzdC4KCmgyKHNlY3Rpb24pLiBQbHVnaW4gRXZlbnRzCgpwLiBUaGlzIGxpYnJhcnkgYWxs b3dzIG90aGVyIHBsdWdpbnMgdG8gaG9vayBpbiB0byBldmVudHMgd2l0aCB0aGUgQG1lbV9t b2RlcmF0aW9uX3JlZ2lzdGVyQCBmdW5jdGlvbi4gQWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyBo YXZlIHRoZSBzdHJ1Y3R1cmUgb2YgZnVuYygkdHlwZSwgJGRhdGEpLCB3aGVyZSAkdHlwZSBp cyB0aGUgdHlwZSBuYW1lIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkIGFuZCAkZGF0YSBpcyB0 aGUgdHlwZSBzcGVjaWZpYyBkYXRhIGFwcGVuZGVkIHRvIHRoZSBwbHVnaW4uCgpoMyhldmVu dCkuIHByZXNlbnRlcgoKcChldmVudC1zdW1tYXJ5KS4gQSBzdWJtaXR0ZWQgaXRlbSBpcyBi ZWluZyB2aWV3ZWQgYnkgYSBtb2RlcmF0b3IgYW5kIHRoZSBwbHVnaW4ncyBwcmVzZW50ZXIg aGFuZGxlciBzaG91bGQgcmV0dXJuIEhUTUwgZm9ybWF0dGVkIGZvcm0gZmllbGRzIHRvIGVu YWJsZSB0aGUgbW9kZXJhdG9yIHRvIGVkaXQgdGhlIGRhdGEgKG5vIGZvcm0gdGFnIG9yIGJ1 dHRvbnMpLgoKaDMoZXZlbnQpLiBhcHByb3ZlcgoKcChldmVudC1zdW1tYXJ5KS4gIHN1Ym1p dHRlZCBpdGVtIGhhcyBiZWVuIGFwcHJvdmVkIGFuZCB0aGUgcGx1Z2luJ3MgYXBwcm92ZXIg aGFuZGxlciBzaG91bGQgc3VibWl0ICRkYXRhIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSB3 aGVyZSBsaXZlIGNvbnRlbnQgcmVzaWRlcy4KCmgzKGV2ZW50KS4gcmVqZWN0ZXIKCnAoZXZl bnQtc3VtbWFyeSkuIEEgc3VibWl0dGVkIGl0ZW0gaGFzIGJlZW4gcmVqZWN0ZWQgYW5kIGlz IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuIjtzOjM6Im1kNSI7czozMjoiZDJmMWQ5 OWEzNDIxZjI2ODlmZjNmOTNhZWE1YjgyZTEiO30=