# smd_slimbox 0.29 # Image gallery lightbox wrapper using Christophe Beyl's Slimbox # Stef Dawson # http://stefdawson.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjkiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYyOiJJbWFnZSBnYWxsZXJ5IGxpZ2h0Ym94IHdyYXBwZXIgdXNpbmcgQ2hyaXN0b3BoZSBCZXlsJ3MgU2xpbWJveCI7czo0OiJoZWxwIjtzOjI5OTk2OiI8c3R5bGU+DQpjb2RlIHtjb2xvcjogIzIwNDY2Zn0NCnByZSB7cGFkZGluZzogMC41ZW0gMWVtOyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBkYXNoZWQgI2NjYzt9DQpoMSwgaDIsIGgzLCBoMyBjb2RlIHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQ0KaDEsIGgyLCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQ0KaDIsIGgzIHttYXJnaW4tdG9wOiAyZW07fQ0KaDEge2ZvbnQtc2l6ZTogM2VtO30NCmgyIHtmb250LXNpemU6IDJlbTt9DQpoMyB7Zm9udC1zaXplOiAxLjVlbTt9DQpsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQ0KLnJlcXVpcmVkLCAud2FybmluZyB7Y29sb3I6cmVkO30NCiNlZ3RhYiB0ZCwjZWd0YWIgdGgge3BhZGRpbmc6LjdlbTsgYm9yZGVyOjFweCBzb2xpZCAjODg4O3RleHQtYWxpZ246Y2VudGVyO30NCjwvc3R5bGU+DQo8aDEgaWQ9InRvcCI+c21kX3NsaW1ib3g8L2gxPg0KPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNhZ2UsIGJ1Z3MsIGZlYXR1cmVzIGV0YywgcGxlYXNlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yMDcxNCI+dmlzaXQgdGhlIGZvcnVtIHRocmVhZDwvYT4uPC9wPg0KDQo8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2xpYl92MC4yMWUudHh0Ij5zbWRfbGliIHYwLjIxZTwvYT4gdG8gYmUgaW5zdGFsbGVkIGFuZCBhY3RpdmF0ZWQuPHA+DQoNCjxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4NCjx1bD4NCjxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2luc3RhbGwiPkluc3RhbGxhdGlvbjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNpbmMiPkxvYWRpbmcgaW5jbHVkZWQgZmlsZXM6IHNtZF9zbGltYm94X2luYzwvYT4NCjx1bD4NCjxsaT48YSBocmVmPSIjanNkaXIiPmpzZGlyIGFuZCBjc3NkaXI8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc2NyaXB0cyI+c2NyaXB0czwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNza2lwIj5za2lwPC9hPjwvbGk+DQo8L3VsPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3NsaW1ib3giPlRoZSBwbHVnaW46IHNtZF9zbGltYm94PC9hPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiNjYXRlZ29yeSI+Y2F0ZWdvcnk8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc3ViY2F0cyI+c3ViY2F0czwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNjYXRsYWJlbCI+Y2F0bGFiZWw8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjaW1hZ2VpZCI+aW1hZ2VpZDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNpbWFnZWNhcHRpb24iPmltYWdlY2FwdGlvbjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiN0aHVtYiI+dGh1bWI8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbGltaXQiPmxpbWl0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI21heGxpbWl0Ij5tYXhsaW1pdDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNvcmRlcmJ5Ij5vcmRlcmJ5PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3Nob3djYXB0aW9uIj5zaG93Y2FwdGlvbjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNzaG93YWx0Ij5zaG93YWx0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3RleHRwb3MiPnRleHRwb3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc2hvd3BhZ2VsaW5rcyI+c2hvd3BhZ2VsaW5rczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNnYWxsZXJ5aWQiPmdhbGxlcnlpZDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiN0aHVtYnNpemUiPnRodW1ic2l6ZTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNwcmV2bGFiZWwiPnByZXZsYWJlbDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNuZXh0bGFiZWwiPm5leHRsYWJlbDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiN3cmFwdGFnIj53cmFwdGFnPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2NlbGxjbGFzcyI+Y2VsbGNsYXNzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2NhcHRpb25jbGFzcyI+Y2FwdGlvbmNsYXNzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2FsdGNsYXNzIj5hbHRjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNuYXZjbGFzcyI+bmF2Y2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjcHJldmNsYXNzIj5wcmV2Y2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbmV4dGNsYXNzIj5uZXh0Y2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbGliY2hlY2siPmxpYmNoZWNrPC9hPjwvbGk+DQo8L3VsPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNzdHlsZSI+U3R5bGluZzwvYT48L2xpPg0KPC91bD4NCg0KPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPg0KPHA+WWVhaCwgeWVhaCA8ZW0+YW5vdGhlcjwvZW0+IGxpZ2h0Ym94LXN0eWxlIGltYWdlIGdhbGxlcnkhIEJ1dCB0aGlzIHRpbWUgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5kaWdpdGFsaWEuYmUvc29mdHdhcmUvc2xpbWJveCI+Q2hyaXN0b3BoZSBCZXlsJ3M8L2E+IHVsdHJhLWxpZ2h0d2VpZ2h0IFNsaW1ib3ggKGRpZXQgY29rZSB2ZXJzaW9uIG9mIGxpZ2h0Ym94KSBhbmQgbW9vdG9vbHMuPC9wPg0KPHA+RmVhdHVyZXM6PC9wPg0KPHVsPg0KPGxpPlRodW1ibmFpbCBnYWxsZXJpZXMgZGVyaXZlZCBmcm9tIG5hbWVkIGNhdGVnb3JpZXMsIGltYWdlIElEcywgYXJ0aWNsZSBmaWVsZHMgb3IgY3VzdG9tIGxpc3RzPC9saT4NCjxsaT5BcmJpdHJhcnkgaW5jbHVzaW9uL2V4Y2x1c2lvbiBvZiBjYXRlZ29yaWVzIG9yIGltYWdlIElEczwvbGk+DQo8bGk+U3ViY2F0ZWdvcmllczogc3BlY2lmeSBhIHBhcmVudCBhbmQgYWxsIGNoaWxkIGNhdGVnb3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQ8L2xpPg0KPGxpPlNob3cgY2FwdGlvbi9hbHQgaW4gdmFyaW91cyBsb2NhdGlvbnMgbmVhciB0aGUgdGh1bWJuYWlsPC9saT4NCjxsaT5QYWdpbmcgYW5kIG11bHRpcGxlIGdhbGxlcmllcyBwZXIgcGFnZTwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTIwNjkyIj5NdWx0aS1saW5ndWFsIFBhY2sgKE1MUCk8L2E+IGF3YXJlPC9saT4NCjwvdWw+DQoNCjxwPkl0IHBsYWdpYXJpc2VzIGlkZWFzIGZyb20gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTUxNzYiPlJvYiBTYWJsZSdzIHJzc190aHVtYnBvcDwvYT4gYW5kIHZhcmlvdXMgVFhQZXJzIGluIHRoZSBjb21tdW5pdHkgd2hvIGhhdmUgc3VnZ2VzdGVkIGZlYXR1cmVzIGFuZCBpbXByb3ZlbWVudHMuIE1hbnkgdGhhbmtzIHRvIGFsbCB3aG8gaGF2ZSBoZWxwZWQgY3JhZnQgdGhpcyBwbHVnaW4uPC9wPg0KDQo8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbjwvaDI+DQoNCjxwPkVuc3VyZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUganMgZm9sZGVyICg8Y29kZT5tb290b29scy5qczwvY29kZT4gYW5kIDxjb2RlPnNsaW1ib3guanM8L2NvZGU+KSBhbmQgdGhlIGNzcyBmb2xkZXIgKDxjb2RlPnNsaW1ib3guY3NzPC9jb2RlPiBhbmQgNCBpbWFnZXMpIGFyZSB1cGxvYWRlZCB0byB5b3VyIHNlcnZlci4gWW91IGNhbiBwdXQgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSB0ZXh0cGF0dGVybiByb290IGZvbGRlciBvciBzb21ld2hlcmUgZWxzZSBvZiB5b3VyIGNob2ljZS4gSXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoZXJlIHlvdSBwdXQgdGhlbSwgeW91IGp1c3QgaGF2ZSB0byB0ZWxsIHRoZSBwbHVnaW4gd2hlcmUgaXQgaXMuPC9wPg0KDQo8cD5UaGVuIG1ha2Ugc3VyZSB0aGF0IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2xpYl92MC4yMWMudHh0Ij5zbWRfbGliPC9hPiBpcyBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZC4gRmluYWxseSwgaW5zdGFsbCB0aGUgc21kX3NsaW1ib3ggcGx1Z2luIGFuZCBhY3RpdmF0ZSBpdC48L3A+DQoNCjxwPk9uY2UgaW5zdGFsbGVkLCB0aGlzIHBsdWdpbiBhZGRzIHR3byB0YWdzLiBUaGUgZmlyc3QgKDxhIGhyZWY9IiNpbmMiPnNtZF9zbGltYm94X2luYzwvYT4pIHVzdWFsbHkgZ29lcyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IHNlY3Rpb24gb2YgeW91ciBwYWdlIGFuZCBsb2FkcyB0aGUgcmVxdWlyZWQgbGlicmFyaWVzICYjODIxMTsgdGhlIGpzL2NzcyBmaWxlcyB5b3UganVzdCB1cGxvYWRlZCB0byB5b3VyIHNlcnZlci4gVGhlIHNlY29uZCAoPGEgaHJlZj0iI3NsaW1ib3giPnNtZF9zbGltYm94PC9hPikgaXMgdGhlIGFjdHVhbCBwbHVnaW4gdGhhdCBkaXNwbGF5cyB5b3VyIGltYWdlIGdhbGxlcnkgKG9yIGdhbGxlcmllcyBpZiB5b3UncmUgZmVlbGluZyBhZHZlbnR1cm91cykuPC9wPg0KDQo8cD5BIHF1aWNrIHdvcmQgYWJvdXQgaG93IGl0IGFsbCB3b3JrczogdGhlIHBsdWdpbiBvcHRpb25zIGdvdmVybiB3aGljaCB0aHVtYm5haWxzIHRvIHVzZSBhbmQgaG93IHRoZXkgYXJlIGRpc3BsYXllZCBvbmx5LiBPbmNlIHRoZSB0aHVtYnMgYXJlIGNsaWNrZWQsIGNvbnRyb2wgaXMgaGFuZGVkIG92ZXIgdG8gc2xpbWJveCBhbmQgbW9vdG9vbHMgdG8gZG8gdGhlIGZhbmN5IHdvcmsuIFRoZXJlZm9yZSwgaWYgeW91IHdpc2ggdG8gY29uZmlndXJlIHRoZSBsb29rIG9mIHRoZSAibGlnaHRib3giIHBhcnQsIHlvdSBuZWVkIHRvIGVkaXQgPGNvZGU+c2xpbWJveC5qczwvY29kZT4gYW5kL29yIDxjb2RlPnNsaW1ib3guY3NzPC9jb2RlPi4gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBvbiA8YSBocmVmPSJodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZS9zb2Z0d2FyZS9zbGltYm94Ij5DaHJpc3RvcGhlIEJleWwncyBwYWdlPC9hPi48L3A+DQoNCjxwPkFsc28sIGlmIHlvdSBhbHJlYWR5IHVzZSBtb290b29scyBmb3IgeW91ciBwYWdlIHlvdSBkb24ndCBuZWVkIHRvIHVwbG9hZCBpdCBhZ2Fpbi4gSnVzdCBtYWtlIHN1cmUgdGhlIHZlcnNpb24geW91IHVzZSBoYXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBwbHVzIHRoZSAiZngiIGFuZCAid2luZG93IiBtb2R1bGVzIGxpc3RlZCBvbiBDaHJpc3RvcGhlJ3MgcGFnZS4gQmUgY2FyZWZ1bCBpZiB5b3UgdXNlIG90aGVyIGphdmFzY3JpcHQgbGlicmFyaWVzIHN1Y2ggYXMgalF1ZXJ5IGJlY2F1c2UgdGhleSBtYXkgY2xhc2guIFNlZSA8YSBocmVmPSJodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VzaW5nX2pRdWVyeV93aXRoX090aGVyX0xpYnJhcmllcyI+aG93IHRvIHVzZSBqUXVlcnkgd2l0aCBvdGhlciBsaWJyYXJpZXM8L2E+IGZvciBhbiBleGFtcGxlIG9mIGludGVncmF0aW5nIHRoZSB0d28uPC9wPg0KDQo8aDIgaWQ9ImluYyI+TG9hZGluZyBpbmNsdWRlIGZpbGVzOiBzbWRfc2xpbWJveF9pbmM8L2gyPg0KPHA+QmVmb3JlIHlvdSBjYW4gdXNlIHNtZF9zbGltYm94IHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBwbHVnaW4ga25vd3Mgd2hlcmUgdCBvZmluZCB0aGUgZXh0ZXJuYWwgaW5jbHVkZS9saWJyYXJ5IGZpbGVzLiBZb3UgZG8gdGhpcyB3aXRoIDxjb2RlPnNtZF9zbGltYm94X2luYzwvY29kZT4uIE5vdGUgdGhhdCB0aGUgcGx1Z2luIGRvZXMgbm90IGNoZWNrIHRoYXQgeW91IGhhdmUgZ2l2ZW4gaXQgY29ycmVjdCBmaWxlIGxvY2F0aW9ucyB0byB2YWxpZCwgcmVhZGFibGUgZmlsZXMgc28gaWYgeW91IGhhdmUgcHJvYmxlbXMgbWFraW5nIGl0IHdvcmssIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgcGFnZSB0byBzZWUgaWYgeW91J3JlIGxvYWRpbmcgd2hhdCB5b3UgdGhpbmsgeW91J3JlIGxvYWRpbmcgZnJvbSB0aGUgY29ycmVjdCBwbGFjZXMhPC9wPg0KDQo8aDMgaWQ9ImpzZGlyIj5BdHRyaWJ1dGVzOiBqc2RpciBhbmQgY3NzZGlyPC9oMz4NCjxwPkFzc3VtaW5nIHlvdSd2ZSBwdXQgdGhlIGpzIGFuZCBjc3MgZGlyZWN0b3JpZXMgaW4geW91ciB0ZXh0cGF0dGVybiByb290IChpLmUuIGF0IHRoZSBzYW1lIGxldmVsIGFzIHRoZSA8Y29kZT5pbWFnZXM8L2NvZGU+LCA8Y29kZT5maWxlczwvY29kZT4gYW5kIDxjb2RlPnRleHRwYXR0ZXJuPC9jb2RlPiBkaXJlY3RvcmllcyksIGFkZCB0aGlzIHNvbWV3aGVyZSBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoZSBwYWdlIHRoYXQgeW91IHdhbnQgeW91ciBnYWxsZXJ5OjwvcD4NCg0KPHByZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBqc2Rpcj0iL2pzIiBjc3NkaXI9Ii9jc3MiIC8mZ3Q7PC9wcmU+DQoNCjxwPklmIHlvdSBoYXZlIHRoZSBsaWJyYXJpZXMgZWxzZXdoZXJlLCBjaGFuZ2Ugd2hlcmUgdGhlIHBsdWdpbiBsb29rcyBmb3IgdGhlIGxpYnJhcmllcyBieSBhZGp1c3RpbmcgdGhlIHR3byBvcHRpb25zLiBQYXkgYXR0ZW50aW9uIHRvIHRoZSBmb3J3YXJkIHNsYXNoIGF0IHRoZSBzdGFydDsgd2l0aG91dCBpdCwgdGhlIHNjcmlwdCB3aWxsIGxvb2sgZm9yIHRoZSBmaWxlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBhcnRpY2xlL3NlY3Rpb24gd2hpY2ggbWF5IChvciBtYXkgbm90KSBiZSB3aGF0IHlvdSB3YW50LjwvcD4NCg0KPGgzIGlkPSJzY3JpcHRzIj5BdHRyaWJ1dGU6IHNjcmlwdHM8L2gzPg0KPHA+SWYgeW91IHdhbnQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGZpbGUgbG9jYXRpb25zLCB5b3UgaGF2ZSB0d28gbW9yZSBvcHRpb25zIGF2YWlsYWJsZS4gVGhlIGZpcnN0IGlzIDxjb2RlPnNjcmlwdHM8L2NvZGU+LiBUaGlzIHRha2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdXAgdG8gMyBhcmd1bWVudHMgaW4gdGhpcyBvcmRlcjo8L3A+DQo8dWw+DQo8bGk+bW9vdG9vbHMuanMgbG9jYXRpb248L2xpPg0KPGxpPnNsaW1ib3guanMgbG9jYXRpb248L2xpPg0KPGxpPnNsaW1ib3guY3NzIGxvY2F0aW9uPC9saT4NCjwvdWw+DQoNCjxwPlRoZSBvcmRlciBpcyBpbXBvcnRhbnQ6IG1vb3Rvb2xzIG11c3QgYXBwZWFyIG9uIHRoZSBwYWdlIGJlZm9yZSBzbGltYm94LmpzISBTbyBpZiB5b3UgaGF2ZSB5b3VyIHNjcmlwdHMgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzIG9yIGhhdmUgcmVuYW1lZCB0aGUgZmlsZXMsIHlvdSBjb3VsZCBkbyB0aGlzIGluc3RlYWQgb2YgdGhlIDxjb2RlPmNzc2RpcjwvY29kZT4gYW5kIDxjb2RlPmpzZGlyPC9jb2RlPiBvcHRpb25zOjwvcD4NCg0KPHByZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBzY3JpcHRzPSIvc2NyaXB0cy9tb290b29scy5qcywgL3Nib3gvc2xpbWJveC5qcywgL3NiY3NzL3NsaW1ib3guY3NzIiAvJmd0OzwvcHJlPg0KDQo8cD5UaGUgdGhyZWUgb3B0aW9ucyBjYW4gZWl0aGVyIGJlIGRpcmVjdCBmaWxlIHBhdGhzLCBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgb3IgZnVsbCBYSFRNTCB0YWdzIGluY2x1ZGluZyA8Y29kZT4mbHQ7c2NyaXB0Jmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O2xpbmsmZ3Q7PC9jb2RlPnRhZ3MuIFlvdSBjYW4gbWl4IGFuZCBtYXRjaCB0aGUgb3B0aW9ucyBpbiBhbnkgd2F5IHlvdSBsaWtlLCBhcyBsb25nIGFzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2NyaXB0cyB5b3UgdGVsbCB0aGUgdGFnIHRvIGxvYWQgZG9lc24ndCBleGNlZWQgMy4gU28gYW4gZXF1aXZhbGVudCB0byB0aGUgYWJvdmUgaXM6PC9wPg0KDQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Ii9zY3JpcHRzL21vb3Rvb2xzLmpzLCAvc2JveC9zbGltYm94LmpzIiBjc3NkaXI9Ii9zYmNzcyIgLyZndDs8L3ByZT4NCg0KPGgzIGlkPSJza2lwIj5BdHRyaWJ1dGU6IHNraXA8L2gzPg0KPHA+SWYgeW91IHdpc2ggdG8gbG9hZCBzb21lIG9yIGFsbCBvZiB0aGUgc2NyaXB0cyAib3V0c2lkZSIgdGhlIHNtZF9zbGltYm94X2luYyBmdW5jdGlvbiB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+c2tpcDwvY29kZT4gb3B0aW9uIHRvIHRlbGwgaXQgaG93IG1hbnkgeW91IGhhdmUgbG9hZGVkLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIHN0bV9qYXZhc2NyaXB0IGluc3RhbGxlZCB5b3UgY291bGQgZG86PC9wPg0KDQo8cHJlPiZsdDt0eHA6anMgbj0ibW9vdG9vbHMiIC8mZ3Q7DQombHQ7dHhwOnNtZF9zbGltYm94X2luYyBza2lwPSIxIiBzY3JpcHRzPSIsIC9zYm94L3NsaW1ib3guanMsIC9zYmNzcy9zbGltYm94LmNzcyIgLyZndDs8L3ByZT4NCg0KPHA+Tm90ZSB0aGUgZW1wdHkgb3B0aW9uIGF0IHRoZSBzdGFydCBiZWZvcmUgdGhlIGNvbW1hLiBZb3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IChiZWNhdXNlIDxjb2RlPnNraXA8L2NvZGU+IHdpbGwganVtcCBvdmVyIGl0IGZvciB5b3UpIGJ1dCBpZiB5b3UgbGlrZSB0byBtYWtlIGl0IG9idmlvdXMsIGl0IGRvZXMgbm8gaGFybS4gVXNpbmcgdGhlIHNvbGUgb3B0aW9uIDxjb2RlPnNraXA9IjMiPC9jb2RlPiBtZWFucyAiSSd2ZSBsb2FkZWQgdGhlbSBhbGwgbXlzZWxmLCBJIGtub3cgd2hhdCBJJ20gZG9pbmciIDotKTwvcD4NCg0KPHA+T25lIG1vcmUgdGhpbmcgd2l0aCB0aGlzIGZlYXR1cmU6IFRYUCBkb2VzIG5vdCBhbGxvdyB5b3UgdG8gZGlyZWN0bHkgZW1iZWQgb3RoZXIgdGFncyBhcyBhdHRyaWJ1dGVzIChzbyB1bmZvcnR1bmF0ZWx5IDxjb2RlPnNjcmlwdHM9IiZsdDt0eHA6Y3NzIC8mZ3Q7IjwvY29kZT4gZmFpbHMpLiBJZiB5b3UgYWJzb2x1dGVseSBtdXN0IGRvIGl0LCB5b3UgY2FuIGNoZWF0IChzZWUgV2V0J3MgZXhjZWxsZW50IHBvc3Qgb24gPGEgaHJlZj0iaHR0cDovL2F3YXN0ZW9md29yZHMuY29tL2FydGljbGUvdGV4dHBhdHRlcm4tdGFncy1pbi10YWdzLXRoZS1nb3JkaWFuLWtub3QiPnRhZ3MgaW4gdGFnczwvYT4gZm9yIG1vcmUgZGV0YWlscykgYnkgZHJvcHBpbmcgaW50byBQSFAgYW5kIGRvaW5nIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6PC9wPg0KDQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIGNzc2Rpcj0iL2NzcyIgc2NyaXB0cz0iL3NjcmlwdHMvbW9vdG9vbHMuanMsICZsdDt0eHA6cGhwJmd0O2VjaG8ganMoYXJyYXkoICduJyA9PiAnc2xpbWJveCcpKTsmbHQ7L3R4cDpwaHAmZ3Q7IC8mZ3Q7PC9wcmU+DQoNCjxwPklmIHlvdSBzdXBwbHlpbmcgdGh1bWJuYWlscyBpbiBSU1MgZmVlZHMgb3IganVzdCBkb24ndCB3YW50IHRvIHVzZSBzbWRfc2xpbWJveF9pbmMsIHlvdSBjYW4gdHVybiBpdCBvZmYgYnkgdXNpbmcgdGhlIDxhIGhyZWY9IiNsaWJjaGVjayI+bGliY2hlY2s9IjAiPC9hPiB0byB0aGUgc21kX3NsaW1ib3ggdGFnLjwvcD4NCg0KPGgyIGlkPSJzbGltYm94Ij5UaGUgcGx1Z2luOiBzbWRfc2xpbWJveDwvaDI+DQoNCjxwPk9uY2UgdGhlIDxhIGhyZWY9IiNpbmMiPnNjcmlwdHMgYXJlIGxvYWRlZDwvYT4sIHlvdSBhcmUgZnJlZSB0byB1c2UgPGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveCAvJmd0OzwvY29kZT4gdG8gZGlzcGxheSBhbiBpbWFnZSBnYWxsZXJ5LiBXaXRob3V0IGFueSBvcHRpb25zIGl0IGRpc3BsYXlzIGV2ZXJ5IGltYWdlIGluIHlvdXIgZW50aXJlIGNvbGxlY3Rpb24gYW5kIHdvbid0IGxvb2sgdmVyeSBwcmV0dHkgKHRob3VnaCB5b3UgY2FuIGhlbHAgYSBiaXQgYnkgc3RhcnRpbmcgd2l0aCB0aGUgPGEgaHJlZj0iI3N0eWxlIj5leGFtcGxlIENTUzwvYT4gZ2l2ZW4gbGF0ZXIpLiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgdGFtZSB0aGUgcGx1Z2luIGEgbGl0dGxlOjwvcD4NCg0KPGgzIGlkPSJjYXRlZ29yeSI+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PC9oMz4NCjxwPkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgY2F0ZWdvcnkgbmFtZXMgdG8gc2hvdy48L3A+DQoNCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4/YzwvY29kZT48YnIgLz4NCnVzZSB0aGUgY3VycmVudCBnbG9iYWwgKGFydGljbGUpIGNhdGVnb3J5IGFzIHRoZSBuYW1lIG9mIGFuIGltYWdlIGNhdGVnb3J5PC9saT4NCjxsaT48Y29kZT4hYzwvY29kZT48YnIgLz4NCnVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVnb3J5PC9saT4NCjxsaT48Y29kZT4/czwvY29kZT48YnIgLz4NCnVzZSB0aGUgY3VycmVudCBUWFAgc2VjdGlvbiBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeTwvbGk+DQo8bGk+PGNvZGU+IXM8L2NvZGU+PGJyIC8+DQp1c2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjdXJyZW50IHNlY3Rpb248L2xpPg0KPGxpPjxjb2RlPj90PC9jb2RlPjxiciAvPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyB1cmwtdGl0bGUgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPiF0PC9jb2RlPjxiciAvPg0KdXNlcyBhbGwgdXJsLXRpdGxlcyBleGNlcHQgdGhlIGN1cnJlbnQgYXJ0aWNsZSAocHJvYmFibHkgbm90IG11Y2ggdXNlISk8L2xpPg0KPGxpPjxjb2RlPj9pZDwvY29kZT48YnIgLz4NCnVzZSB0aGUgY3VycmVudCBhcnRpY2xlJ3MgSUQgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnkuIFRoZSBjYXRlZ29yeSBuYW1lIGlzIG1hZGUgdXAgb2YgdGhlIDxhIGhyZWY9IiNjYXRsYWJlbCI+Y2F0bGFiZWw8L2E+IG9wdGlvbiBhbmQgdGhlIElEIHNvLCBieSBkZWZhdWx0LCBpdCB3aWxsIGJlIGFydGljbGUtPGNvZGU+SUQ8L2NvZGU+LiBVc2VmdWwgdG8gbWFrZSBhIHBlci1hcnRpY2xlIGltYWdlIGdhbGxlcnk8L2xpPg0KPGxpPjxjb2RlPiFpZDwvY29kZT48YnIgLz4NCnVzZXMgYWxsIGltYWdlIElEcyBleGNlcHQgdGhlIGN1cnJlbnQgYXJ0aWNsZTwvbGk+DQo8bGk+PGNvZGU+P2ZpZWxkbmFtZTwvY29kZT48YnIgLz4NCmxvb2tzIGluIHRoZSBnaXZlbiBmaWVsZG5hbWUgb2YgdGhlIGN1cnJlbnQgYXJ0aWNsZSBhbmQgdHJlYXRzIHRoZSBjb250ZW50cyBhcyBhIGxpc3Qgb2YgY2F0ZWdvcmllcy4gRGVzaWduZWQgcHJpbWFyaWx5IGZvciB1c2Ugd2l0aCBjdXN0b20gZmllbGRzIChlLmcuIDxjb2RlPj9jdXN0b20xPC9jb2RlPiksIGl0IGNvdWxkIGFsc28gYmUgYW55IG90aGVyIGZpZWxkIChvciBmaWVsZHMpIGZyb20geW91ciBhcnRpY2xlcyAoZS5nLiA8Y29kZT4/ZXhjZXJwdDwvY29kZT4gb3IgPGNvZGU+P2NhdGVnb3J5MTwvY29kZT4gb3IgPGNvZGU+P2tleXdvcmRzPC9jb2RlPiBvciA8Y29kZT4/YXV0aG9yaWQ8L2NvZGU+LCBldGMpLiBCZSB3YXJuZWQ6IGlmIHlvdSB1c2UgPGNvZGU+P2JvZHk8L2NvZGU+IG9yIHNvbWV0aGluZyBlcXVhbGx5IG91dHJhZ2VvdXMsIGNoYW5jZXMgYXJlIHRoZSBwbHVnaW4gd2lsbCBleHBsb2RlPC9saT4NCjwvdWw+DQoNCjxwPlRvIG5lZ2F0ZSBhbnkgY2F0ZWdvcnkgc2VsZWN0aW9uLCB1c2UgPGNvZGU+IWNhdGVnb3J5PC9jb2RlPiBvciA8Y29kZT4hZmllbGRfbmFtZTwvY29kZT4uIElmIHlvdSBsaXN0IHNwZWNpZmljIGltYWdlIGNhdGVnb3JpZXMgKGUuZy4gPGNvZGU+IWxhbmRzY2FwZSwgIWJpcmRzPC9jb2RlPikgdGhvc2UgY2F0ZWdvcmllcyB3aWxsIGJlIGV4Y2x1ZGVkLiBJZiB5b3Ugc3BlY2lmeSBhIGZpZWxkIG5hbWUgc3VjaCBhcyA8Y29kZT4ha2V5d29yZHM8L2NvZGU+IG9yIDxjb2RlPiFjdXN0b20xPC9jb2RlPiwgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmllbGQgd2lsbCBiZSByZWFkIGFuZCB0aGUgbGlzdCBvZiBpbWFnZSBjYXRlZ29yaWVzIGZvdW5kIHRoZXJlIHdpbGwgYmUgZXhjbHVkZWQuPC9wPg0KDQo8cD5Ob3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYSBmaWVsZCBuYW1lIGFuZCB0aGF0IGZpZWxkIGluIHRoZSBhcnRpY2xlIGlzIGVtcHR5LCB0aGUgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2FzIGFuIGFjdHVhbCBpbWFnZSBjYXRlZ29yeS4gU28gaWYgeW91IHNwZWNpZmllZCA8Y29kZT4/a2V5d29yZHM8L2NvZGU+IGFuZCB0aGUga2V5d29yZHMgZmllbGQgaW4gdGhlIGN1cnJlbnQgYXJ0aWNsZSB3YXMgZW1wdHksIGl0IHdvdWxkIGxvb2sgZm9yIGFuIGltYWdlIGNhdGVnb3J5IG5hbWVkICJrZXl3b3JkcyIuPC9wPg0KDQo8cD5BbHNvIG5vdGUgdGhhdCwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgeW91IGxpc3QgdGhlbSwgYWxsICdwb3NpdGl2ZXMnIHdpbGwgYmUgcHJvY2Vzc2VkIGZpcnN0LCB0aGVuIGFueSBleGNsdXNpb25zIGFwcGxpZWQuPC9wPg0KDQo8aDMgaWQ9InN1YmNhdHMiPjxjb2RlPnN1YmNhdHM8L2NvZGU+PC9oMz4NCjxwPkF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYWxsIHN1Yi1jYXRlZ29yaWVzIG9mIHRoZSBjaG9zZW4gaW1hZ2UgY2F0ZWdvcmllcy48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MTwvY29kZT48YnIgLz4NCnN3aXRjaGVzIHRoZSBvcHRpb24gb24uIEl0IGlzIG1pc3NpbmcgKGkuZS4gb2ZmKSBieSBkZWZhdWx0PC9saT4NCjwvdWw+DQoNCjxoMyBpZD0iY2F0bGFiZWwiPjxjb2RlPmNhdGxhYmVsPC9jb2RlPjwvaDM+DQo8cD50aGUgbGFiZWwgdXNlZCBpbiBmcm9udCBvZiB0aGUgY2F0ZWdvcnkgaWYgdGhlICI/aWQiIG9yICIhaWQiIDxhIGhyZWY9IiNjYXRlZ29yeSI+Y2F0ZWdvcnk8L2E+IG9wdGlvbiBpcyB1c2VkOyBkZWZhdWx0OiAiYXJ0aWNsZS0iPC9wPg0KDQo8aDMgaWQ9ImltYWdlaWQiPjxjb2RlPmltYWdlaWQ8L2NvZGU+PC9oMz4NCjxwPkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgSURzIHRvIHNob3cuIFRoZXNlIGFyZSBhZGRlZCB0byBhbnkgaW1hZ2VzIGZyb20gdGhlIDxhIGhyZWY9IiNjYXRlZ29yeSI+Y2F0ZWdvcnk8L2E+IG9wdGlvbiBCRUZPUkUgYW55IGV4Y2x1c2lvbnMgYXJlIGFwcGxpZWQuPC9wPg0KDQo8cD5BcyB3aXRoIHRoZSBjYXRlZ29yeSBvcHRpb24sIHlvdSBjYW4gYWxzbyB1c2UgIj9pZCIgYW5kICI/ZmllbGRuYW1lIiB3aGljaCB3aWxsIHBpY2sgdXAgaW1hZ2UgSURzIGZyb20gdGhlIGdpdmVuIGZpZWxkbmFtZSBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBhcnRpY2xlLiBJbnRlcmVzdGluZyBpZiB5b3UgY2hvb3NlIDxjb2RlPj9hcnRpY2xlX2ltYWdlPC9jb2RlPiBiZWNhdXNlIHlvdSBjYW4gbWFrZSB5b3VyIGFydGljbGUgaW1hZ2Ugdmlld2FibGUgaW4gYSBsaWdodGJveCEgSXQgYWxzbyBzdXBwb3J0cyBJRCBhbmQgZmllbGQgbmVnYXRpb24gdXNpbmcgdGhlIHNhbWUgdGVybWlub2xvZ3kgYXMgdGhlIGNhdGVnb3J5IG9wdGlvbi48L3A+DQoNCjxoMyBpZD0iaW1hZ2VjYXB0aW9uIj48Y29kZT5pbWFnZWNhcHRpb248L2NvZGU+PC9oMz4NCjxwPlRoZSB0ZXh0IHRvIGRpc3BsYXkgdW5kZXIgdGhlIGxhcmdlIHNsaW1ib3ggaW1hZ2UuIEl0IGNhbiBiZSBhbnkgZml4ZWQgc3RyaW5nIChyYXRoZXIgcG9pbnRsZXNzISkgb3IgYSBjb21iaW5hdGlvbiBvZiBmaXhlZCB0ZXh0IGFuZCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gcHVsbCB0aGUgcmVsZXZhbnQgZmllbGQgZnJvbSB0aGUgaW1hZ2UuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPj9jYXB0aW9uPC9jb2RlPjxiciAvPg0KVGhlIGRlZmF1bHQ8L2xpPg0KPGxpPjxjb2RlPj9hbHQ8L2NvZGU+PC9saT4NCjxsaT48Y29kZT4/bmFtZTwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj9pZDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj9kYXRlPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+P2NhdGVnb3J5PC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+P2F1dGhvcjwvY29kZT48L2xpPg0KPGxpPjxjb2RlPj9leHQ8L2NvZGU+PC9saT4NCjxsaT48Y29kZT4/d2lkdGg8L2NvZGU+PC9saT4NCjxsaT48Y29kZT4/aGVpZ2h0PC9jb2RlPjwvbGk+DQo8L3VsPg0KDQo8cD5Gb3IgZXhhbXBsZTo8L3A+DQo8cHJlPmltYWdlY2FwdGlvbj0iP2FsdCI8L3ByZT4NCjxwPiB3b3VsZCBzaG93IHRoZSBhbHQgdGV4dCB1bmRlciB0aGUgbWFpbiBpbWFnZSBpbnN0ZWFkIG9mIHRoZSBjYXB0aW9uICh3aGljaCBpdCB1c2VzIGJ5IGRlZmF1bHQpLjwvcD4NCg0KPHA+T3IsIGZvciB0aGUgYWR2ZW50dXJvdXM6PC9wPg0KPHByZT5pbWFnZWNhcHRpb249Ij9jYXB0aW9uIGJ5ID9hdXRob3IgWyA/ZXh0IHBpY3R1cmU6ID93aWR0aCB4ID9oZWlnaHQgXSI8L3ByZT4NCjxwPiBtaWdodCBzaG93IGEgY2FwdGlvbiBzdWNoIGFzICJMYWtlIFdpbmRlcm1lcmUgYXQgbmlnaHQgYnkgU3RlZiBbIGpwZyBwaWN0dXJlOiA4MDAgeCA2MDAgXSIuPC9wPg0KDQo8cD5UaGVyZSBpcyBvbmUgbGltaXRhdGlvbiBpbnNvZmFyIGFzIGVhY2ggP3ZhcmlhYmxlIDxpPm11c3Q8L2k+IGJlIGFsb25lLCBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UuIFNvLCA8Y29kZT4/Y2FwdGlvbjogcGhvdG9ncmFwaGVkIGJ5ID9hdXRob3IuPC9jb2RlPiB3b24ndCB3b3JrLjwvcD4NCg0KPGgzIGlkPSJ0aHVtYiI+PGNvZGU+dGh1bWI8L2NvZGU+PC9oMz4NCjxwPklmIHlvdSB3aXNoIHRoZSBmdWxsc2l6ZSBpbWFnZXMgZGlzcGxheWVkIGluIHRoZSBzbGltYm94IHdpbmRvdyB0byBiZSB0aGUgdGh1bWJuYWlscyBpbnN0ZWFkLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4xPC9jb2RlPjxiciAvPg0Kc3dpdGNoZXMgdGhlIG9wdGlvbiBvbi4gSXQgaXMgbWlzc2luZyAoaS5lLiBvZmYpIGJ5IGRlZmF1bHQ8L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJsaW1pdCI+PGNvZGU+bGltaXQ8L2NvZGU+PC9oMz4NCjxwPlRoZSBudW1iZXIgb2YgaW1hZ2UgdGh1bWJuYWlscyB0byBzaG93IHBlciBwYWdlLiAwIChvciBvbWl0dGVkKT1lc3NlbnRpYWxseSB1bmxpbWl0ZWQuPC9wPg0KDQo8aDMgaWQ9Im1heGxpbWl0Ij48Y29kZT5tYXhsaW1pdDwvY29kZT48L2gzPg0KPHA+VGhlIGFic29sdXRlIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBwdWxsIGZyb20gdGhlIGRhdGFiYXNlLiAwIChvciBvbWl0dGVkKT1lc3NlbnRpYWxseSB1bmxpbWl0ZWQuPC9wPg0KDQo8aDMgaWQ9Im9yZGVyYnkiPjxjb2RlPm9yZGVyYnk8L2NvZGU+PC9oMz4NCjxwPkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd2F5cyB0byBvcmRlciB0aGUgcmVzdWx0cy48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PGJyIC8+DQpUaGUgZGVmYXVsdCBzb3J0IG9yZGVyPC9saT4NCjxsaT48Y29kZT5uYW1lPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+aWQ8L2NvZGU+PC9saT4NCjxsaT48Y29kZT5kYXRlPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+YWx0PC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+Y2FwdGlvbjwvY29kZT48L2xpPg0KPGxpPjxjb2RlPmF1dGhvcjwvY29kZT48L2xpPg0KPGxpPjxjb2RlPmV4dDwvY29kZT48L2xpPg0KPGxpPjxjb2RlPndpZHRoPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+aGVpZ2h0PC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+cmFuZG9tPC9jb2RlPjwvbGk+DQo8bGk+PGNvZGU+Zml4ZWQ8L2NvZGU+PC9saT4NCjwvdWw+DQoNCjxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNvcnQgb3JkZXIgYnkgYWRkaW5nIDphc2Mgb3IgOmRlc2MgdG8gYW55IHZhbHVlLiBGb3IgZXhhbXBsZTo8L3A+DQo8cHJlPmNhdGVnb3J5LCBkYXRlOmRlc2M8L3ByZT4NCjxwPiB3b3VsZCBzb3J0IGJ5IGNhdGVnb3J5IGZpcnN0LCB0aGVuIGRlc2NlbmRpbmcgZGF0ZS48L3A+DQoNCjxwPlRoZSBzcGVjaWFsLCBvdmVycmlkaW5nLCBvcHRpb24gPGNvZGU+Zml4ZWQ8L2NvZGU+IGZvcmNlcyB0aHVtYnMgdG8gYmUgb3V0cHV0IGluIHRoZSBvcmRlciBnaXZlbiBpbiB0aGUgPGEgaHJlZj0iI2ltYWdlaWQiPmltYWdlaWQ8L2E+IHRhZy4NCg0KPHA+Tm90ZSB0aGF0IDxjb2RlPnJhbmRvbTwvY29kZT4gYWN0cyBzbGlnaHRseSBkaWZmZXJlbnRseSBmcm9tIHRoZSBvdGhlcnMuIElmIGl0IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QsIHJhbmRvbSBpbWFnZXMgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHRoZXkgd2lsbCB0aGVuIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgbGlzdGVkIGFmdGVyIGl0LjwvcD4NCg0KPHA+SWYgaXQgYXBwZWFycyBhbnl3aGVyZSBlbHNlIGluIHRoZSBsaXN0LCBhbnkgc29ydCBpdGVtcyBiZWZvcmUgaXQgd2lsbCBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mIGRhdGEgcHVsbGVkIGZyb20gdGhlIGRhdGFiYXNlLCBhbmQgdGhlIHJlc3VsdHMgd2lsbCB0aGVuIGJlIG9yZGVyZWQgcmFuZG9tbHkgKGluIHRoYXQgY2FzZSwgYW55IGl0ZW1zICBsaXN0ZWQgYWZ0ZXIgPGNvZGU+cmFuZG9tPC9jb2RlPiB3aWxsIGJlIGlnbm9yZWQuIDxjb2RlPmZpeGVkPC9jb2RlPiBpcyBzdGlsbCBob25vdXJlZCwgaG93ZXZlcikuIFNlZSB0aGUgPGEgaHJlZj0iI2VnMiI+ZXhhbXBsZXM8L2E+IGZvciBtb3JlIG9uIHRoaXMgZmVhdHVyZS48L3A+DQoNCjxoMyBpZD0iZ3JvdXBuYW1lIj48Y29kZT5ncm91cG5hbWU8L2NvZGU+PC9oMz4NCjxwPlRoZSBuYW1lIHRvIGFwcGVuZCB0byB0aGUgW3JlbF0gYXJndW1lbnQgaW4gb3JkZXIgdG8gbG9naWNhbGx5IGdyb3VwIGltYWdlcy4gRGVmYXVsdDogInNtZCIuPC9wPg0KDQo8cD5PbmNlIGEgdmlzaXRvciBjbGlja3MgYSB0aHVtYm5haWwgYW5kIGNvbnRyb2wgaXMgcGFzc2VkIHRvIHRoZSBzbGltYm94IGNvZGUsIG5hdmlnYXRpb24gaXMgdmlhIHRoZSBOZXh0L1ByZXYgbGlua3MgKG9yIHRoZSAnbicvJ3AnIG9yIGFycm93IGtleXMpLiBXaXRob3V0IHN1cHBseWluZyBhIGdyb3VwbmFtZSwgYWxsIGxpZ2h0Ym94YWJsZSBpbWFnZXMgZnJvbSBhbGwgc2xpbWJveCB0YWdzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG5hdmlnYXRpb24uIFNvIGlmIHlvdSBoYWQgMyBzbGltYm94IHRhZ3Mgb24gdGhlIHBhZ2UsIGVhY2ggd2l0aCAyMCBpbWFnZXMgaW4gdGhlbSwgdGhlIGxpZ2h0Ym94IHdvdWxkIHNob3cgIkltYWdlIDEgb2YgNjAiLjwvcD4NCg0KPHA+VG8gYnlwYXNzIHRoaXMgZmVhdHVyZSwgZ2l2ZSBlYWNoIHNsaW1ib3ggdGFnIGEgdW5pcXVlIGdyb3VwbmFtZTsgdGhhdCB3aWxsIGxpbWl0IHRoZSBuYXZpZ2F0aW9uIG9ubHkgdG8gdGhlIGdyb3VwIG9mIGltYWdlcyB0aGF0IG1hdGNoLiBJdCBjYW4gYmUgYW55dGhpbmcgeW91IGxpa2UsIG9yIHlvdSBjYW4gc3VwcGx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gcHVsbCB0aGUgZ3JvdXBuYW1lIGZyb20gdGhlIHJlbGV2YW50IGZpZWxkOjwvcD4NCg0KPHVsPg0KPGxpPjxjb2RlPj9jPC9jb2RlPjxiciAvPg0KdGhlIGltYWdlIGNhdGVnb3J5PC9saT4NCjxsaT48Y29kZT4/aWQ8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UgSUQgKHdoaWNoIGVmZmVjdGl2ZWx5IG1ha2VzIGV2ZXkgaW1hZ2UgYSBzZXBhcmF0ZSBlbnRpdGl5LCBkaXNhYmxpbmcgdGhlIHByZXZpb3VzL25leHQgbmF2aWdhdGlvbiBhbmQgcmVxdWlyaW5nIHRoZSB2aWV3ZXIgdG8gY2xvc2UgdGhlIGxpZ2h0Ym94IHRvIHZpZXcgYW5vdGhlciBpbWFnZSk8L2xpPg0KPGxpPjxjb2RlPj9hdXRob3I8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UgYXV0aG9yL3VwbG9hZGVyPC9saT4NCjxsaT48Y29kZT4/ZGF0ZTwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSB1cGxvYWQgZGF0ZTwvbGk+DQo8bGk+PGNvZGU+P25hbWU8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UgZmlsZW5hbWU8L2xpPg0KPGxpPjxjb2RlPj9leHQ8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UgZmlsZSBleHRlbnNpb248L2xpPg0KPGxpPjxjb2RlPj9hbHQ8L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UncyBhbHQgdGV4dDwvbGk+DQo8bGk+PGNvZGU+P2NhcHRpb248L2NvZGU+PGJyIC8+DQp0aGUgaW1hZ2UncyBjYXB0aW9uIHRleHQ8L2xpPg0KPGxpPjxjb2RlPj93aWR0aDwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSB3aWR0aDwvbGk+DQo8bGk+PGNvZGU+P2hlaWdodDwvY29kZT48YnIgLz4NCnRoZSBpbWFnZSBoZWlnaHQ8L2xpPg0KPGxpPjxjb2RlPj9maWVsZG5hbWU8L2NvZGU+PGJyIC8+DQphbnkgdmFsaWQgYXJ0aWNsZSBmaWVsZCAoZS5nLiA8Y29kZT4/ZXhjZXJwdDwvY29kZT4sIDxjb2RlPj9jdXN0b20xPC9jb2RlPiwgPGNvZGU+P2FydGljbGUtaW1hZ2U8L2NvZGU+KSB0byBwdWxsIHRoZSBncm91cG5hbWUgZnJvbSB0aGF0IGZpZWxkPC9saT4NCjwvdWw+DQoNCjxwPiBTZWUgdGhlIDxhIGhyZWY9IiNlZzQiPmV4YW1wbGVzPC9hPiBmb3IgbW9yZS48L3A+DQoNCjxoMyBpZD0ic2hvd2NhcHRpb24iPjxjb2RlPnNob3djYXB0aW9uPC9jb2RlPjwvaDM+DQo8cD5EaXNwbGF5IHRoZSBpbWFnZSdzIGNhcHRpb24gd2l0aCB0aGUgaW1hZ2UuIE9mZiBieSBkZWZhdWx0LiBTZWUgPGEgaHJlZj0iI3RleHRwb3MiPnRleHRwb3M8L2E+IGZvciBwb3NpdGlvbmluZy48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MDwvY29kZT48YnIgLz4NCk5vLCBkb24ndCBkaXNwbGF5IGl0PC9saT4NCjxsaT48Y29kZT4xPC9jb2RlPjxiciAvPg0KWWVzLCBkaXNwbGF5IGl0PC9saT4NCjwvdWw+DQoNCjxoMyBpZD0ic2hvd2FsdCI+PGNvZGU+c2hvd2FsdDwvY29kZT48L2gzPg0KPHA+RGlzcGxheSB0aGUgaW1hZ2UncyBhbHQgdGV4dCB3aXRoIHRoZSBpbWFnZS4gT2ZmIGJ5IGRlZmF1bHQuIFNlZSA8YSBocmVmPSIjdGV4dHBvcyI+dGV4dHBvczwvYT4gZm9yIHBvc2l0aW9uaW5nLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4wPC9jb2RlPjxiciAvPg0KTm8sIGRvbid0IGRpc3BsYXkgaXQ8L2xpPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyIC8+DQpZZXMsIGRpc3BsYXkgaXQ8L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJ0ZXh0cG9zIj48Y29kZT50ZXh0cG9zPC9jb2RlPjwvaDM+DQo8cD5Qb3NpdGlvbiBvZiB0aGUgPGEgaHJlZj0iI3Nob3dhbHQiPmFsdDwvYT4vPGEgaHJlZj0iI3Nob3djYXB0aW9uIj5jYXB0aW9uPC9hPiBpbmZvcm1hdGlvbi48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+YWJvdmU8L2NvZGU+PGJyIC8+DQphYm92ZSB0aGUgdGh1bWJuYWlsLCBub3QgY2xpY2thYmxlPC9saT4NCjxsaT48Y29kZT5iZWxvdzwvY29kZT48YnIgLz4NCmJlbG93IHRoZSB0aHVtYm5haWwsIG5vdCBjbGlja2FibGUgKGRlZmF1bHQpPC9saT4NCjxsaT48Y29kZT5iZWZvcmU8L2NvZGU+PGJyIC8+DQppbW1lZGlhdGVseSBhYm92ZSB0aGUgdGh1bWJuYWlsLCBjbGlja2FibGUgYXMgcGFydCBvZiB0aGUgbGluazwvbGk+DQo8bGk+PGNvZGU+YWZ0ZXI8L2NvZGU+PGJyIC8+DQppbW1lZGlhdGVseSBiZWxvdyB0aGUgdGh1bWJuYWlsLCBjbGlja2FibGUgYXMgcGFydCBvZiB0aGUgbGluazwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9InNob3dwYWdlbGlua3MiPjxjb2RlPnNob3dwYWdlbGlua3M8L2NvZGU+PC9oMz4NCjxwPkRpc3BsYXlzIGNsaWNrYWJsZSBuZXh0L3ByZXZpb3VzIGxpbmtzIHVuZGVyIHRoZSB0aHVtYm5haWxzLiBPbiBieSBkZWZhdWx0IChpZiA8YSBocmVmPSIjbGltaXQiPmxpbWl0PC9hPiBpcyBncmVhdGVyIHRoYW4gMCkuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyIC8+DQpZZXMsIGRpc3BsYXkgaXQ8L2xpPg0KPGxpPjxjb2RlPjA8L2NvZGU+PGJyIC8+DQpObywgZG9uJ3QgZGlzcGxheSBpdDwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9ImdhbGxlcnlpZCI+PGNvZGU+Z2FsbGVyeWlkPC9jb2RlPjwvaDM+DQo8cD5JZiB1c2luZyA8YSBocmVmPSIjc2hvd3BhZ2VsaW5rcyI+c2hvd3BhZ2VsaW5rczwvYT4sIHRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG11bHRpcGxlIHNsaW1ib3ggZ2FsbGVyaWVzIG9uIGEgc2luZ2xlIHBhZ2UuIEl0IGFsbG93cyBwYWdpbmcgdG8gYmUgY29udHJvbGxlZCBvbiBhIHBlci1nYWxsZXJ5IGJhc2lzLCBzbyBjbGlja2luZyBOZXh0L1ByZXYgaW4gb25lIGdhbGxlcnkgd29uJ3QgYWZmZWN0IHRoZSB0aHVtYm5haWxzIGluIG90aGVyIGdhbGxlcmllcyBvbiB0aGUgc2FtZSBwYWdlLiBFYWNoIGdhbGxlcnkgb24gYSBwYWdlIDxpPm11c3Q8L2k+aGF2ZSBhIHVuaXF1ZSBnYWxsZXJ5aWQgaW4gb3JkZXIgZm9yIHBhZ2luZyB0byB3b3JrLiBUaGUgZ29vZCBuZXdzIGlzIHlvdSdsbCBwcm9iYWJseSBuZXZlciBoYXZlIHRvIHVzZSB0aGlzIGF0dHJpYnV0ZSBiZWNhdXNlIGl0IHdvcmtzIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4gSW4gdGhlICh2ZXJ5KSB1bmxpa2VseSBldmVudCBpdCBnZW5lcmF0ZXMgdHdvIGlkZW50aWNhbCBzdHJpbmdzLCB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuPC9wPg0KPHA+SXQgdGFrZXMgZWl0aGVyIGEgZml4ZWQgc3RyaW5nIChlLmcuIDxjb2RlPmdhbGxlcnlpZD0iTXlHYWwxIjwvY29kZT4pOyBvciBhIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQgYnkgdXAgdG8gdHdvIG51bWJlcnMgc2VwYXJhdGVkIGJ5IGEgY29sb24uIEluIHRoZSBsYXR0ZXIgbW9kZSwgdGhlIHBsdWdpbiBnZW5lcmF0ZXMgYSB1bmlxdWUgKDMyLWNoYXJhY3Rlcikgc3RyaW5nIGJhc2VkIG9uIHRoZSBvdGhlciBhdHRyaWJ1dGVzIGdpdmVuLiBZb3UgdXNlIHRoZSB0d28gbnVtYmVycyB0byBjb250cm9sIHdoaWNoIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyB0byB1c2UgaW4geW91ciB1bmlxdWUgY29kZS4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdG8gZ2VuZXJhdGUgYW5kIHRoZSAybmQgbnVtYmVyIGlzIGhvdyBtYW55IGNoYXJhY3RlcnMgdG8gc2tpcCBlYWNoIHRpbWUgaXQgcGlja3Mgb25lIGZyb20gdGhlIHN0cmluZyAod3JhcHBpbmcgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBpZiBpdCBmYWxscyBvZmYgdGhlIGVuZCkuPC9wPg0KPHA+QW4gZXhhbXBsZTogc3VwcG9zZSB0aGUgdGFnIGdlbmVyYXRlZCB0aGlzIHN0cmluZyBpbnRlcm5hbGx5OiA8Y29kZT4yY2I1YmJmOGIwYzJjMDI4ZDhmMjM0YjRiZDQ2ZmRkZTwvY29kZT4uIFRoZXNlIGFyZSB0aGUgcmVzdWx0cyBvZiB2YXJpb3VzIHZhbHVlczo8L3A+DQoNCjx0YWJsZSBpZD0iZWd0YWIiPg0KPHRyPjx0aD5nYWxsZXJ5aWQ9PC90aD48dGg+cmVzdWx0PC90aD48dGg+cmVtYXJrczwvdGg+PC90cj4NCjx0cj48dGQ+IiIgb3IgIj80OjYiPC90ZD48dGQ+MmZjZjwvdGQ+PHRkPnRoZSBkZWZhdWx0PC90ZD48L3RyPg0KPHRyPjx0ZD4iPzgiPC90ZD48dGQ+MmNiNWJiZjg8L3RkPjx0ZD50aGUgZmlyc3QgOCBjaGFyYWN0ZXJzPC90ZD48L3RyPg0KPHRyPjx0ZD4iPzc6MyI8L3RkPjx0ZD4yNWYwYzhmPC90ZD48dGQ+bGVuZ3RoIDcsIGNob29zaW5nIGV2ZXJ5IDNyZCBjaGFyYWN0ZXI8L3RkPjwvdHI+DQo8dHI+PHRkPiI/ODo3IjwvdGQ+PHRkPjI4MjRmNWM4PC90ZD48dGQ+bGVuZ3RoIDgsIGNob29zaW5nIGV2ZXJ5IDd0aCBjaGFyYWN0ZXIgKHdyYXBzKTwvdGQ+PC90cj4NCjwvdGFibGU+DQoNCjxoMyBpZD0idGh1bWJzaXplIj48Y29kZT50aHVtYnNpemU8L2NvZGU+PC9oMz4NCjxwPkVpdGhlciBmb3Igc3BlY2lhbCBlZmZlY3RzLCBvciBpbiBvcmRlciB0byB2YWxpZGF0ZSBhZ2FpbnN0IFhIVE1MLCB0aGUgaW1hZ2UgdGh1bWJuYWlscyBzaG91bGQgaGF2ZSA8Y29kZT53aWR0aDwvY29kZT4gYW5kIDxjb2RlPmhlaWdodDwvY29kZT4gYXR0cmlidXRlcy4gVFhQIGNhbm5vdCBzdXBwbHkgdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgdGhlIDxjb2RlPnRodW1ic2l6ZTwvY29kZT4gb3B0aW9uIHdpbGwuPC9wPg0KDQo8cD5TaW1wbHkgc3BlY2lmeSB1cCB0byB0d28gdmFsdWVzIHNlcGFyYXRlZCBieSBhIGNvbW1hIHRvIGRlZmluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB5b3VyIHRodW1ibmFpbHMgKGluIHBpeGVscyBieSBkZWZhdWx0KS4gRm9yIGV4YW1wbGU6IDxjb2RlPnRodW1ic2l6ZT0iNDAsIDYwIjwvY29kZT4gdG8gc2V0IDQwLXBpeGVsIHggNjAtcGl4ZWwgdGh1bWJuYWlscy4gU3VwcGx5aW5nIG9ubHkgb25lIHZhbHVlIHdpbGwgc2V0IGJvdGggd2lkdGggYW5kIGhlaWdodCB0byB0aGUgc2FtZSB2YWx1ZS4gQWRkaW5nIHVuaXRzIGFmdGVyIGVhY2ggdmFsdWUgKCJweCIsICJlbSIsICIlIiBldGMpIHdpbGwgdXNlIHRob3NlIHVuaXRzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgInB4Ii48L3A+DQoNCjxwPlRvIHNwZWNpZnkganVzdCB0aGUgd2lkdGgsIHB1dCB0aGUgY29tbWEgaW4gYnV0IGxlYXZlIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGVtcHR5IChlLmcuIDxjb2RlPnRodW1ic2l6ZT0iMmVtLCI8L2NvZGU+KS4gU2ltaWxhcmx5IHRvIHNwZWNpZnkgdGhlIGhlaWdodCBvbmx5LCBsZWF2ZSB0aGUgZmlyc3QgdmFsdWUgZW1wdHkgYnkgc3RhcnRpbmcgd2l0aCBhIGNvbW1hIChlLmcuIDxjb2RlPnRodW1ic2l6ZT0iLDEwJSI8L2NvZGU+KS48L3A+DQoNCjxoMyBpZD0icHJldmxhYmVsIj48Y29kZT5wcmV2bGFiZWw8L2NvZGU+PC9oMz4NCjxwPkxhYmVsIGZvciB0aGUgJ3ByZXZpb3VzIHBhZ2UnIG9mIHBpY3R1cmVzIHdoZW4gdXNpbmcgPGEgaHJlZj0iI3Nob3dwYWdlbGlua3MiPnNob3dwYWdlbGlua3M8L2E+LiBEZWZhdWx0OiAiUHJldiIgYW5kIGN1c3RvbWlzYWJsZSBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzIHZpYSBNTFAuPC9wPg0KDQo8aDMgaWQ9Im5leHRsYWJlbCI+PGNvZGU+bmV4dGxhYmVsPC9jb2RlPjwvaDM+DQo8cD5MYWJlbCBmb3IgdGhlICduZXh0IHBhZ2UnIG9mIHBpY3R1cmVzIHdoZW4gdXNpbmcgPGEgaHJlZj0iI3Nob3dwYWdlbGlua3MiPnNob3dwYWdlbGlua3M8L2E+LiBEZWZhdWx0OiAiTmV4dCIgYW5kIGN1c3RvbWlzYWJsZSBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzIHZpYSBNTFAuPC9wPg0KDQo8aDMgaWQ9IndyYXB0YWciPjxjb2RlPndyYXB0YWc8L2NvZGU+PC9oMz4NCjxwPlhIVE1MIHRhZyB0byB3cmFwIGVhY2ggJ2NlbGwnIChlZmZlY3RpdmVseSBhIHRodW1ibmFpbCBpbWFnZSkgd2l0aC4gRG8gbm90IHNwZWNpZnkgdGhlICZsdDsgb3IgJmd0OyBjaGFyYWN0ZXJzLiBGb3IgYSB2YWxpZCBwYWdlLCB0aGUgb25seSB1c2VmdWwgb3B0aW9ucyBhcmUgImRpdiIsICJsaSIgb3IgInAiLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyB0YWcpLjwvcD4NCg0KPGgzIGlkPSJjZWxsY2xhc3MiPjxjb2RlPmNlbGxjbGFzczwvY29kZT48L2gzPg0KPHA+Q1NTIGNsYXNzIGZvciBlYWNoICdjZWxsJyB0aGF0IGRpc3BsYXlzIGEgdGh1bWJuYWlsLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcykuPC9wPg0KDQo8aDMgaWQ9ImNhcHRpb25jbGFzcyI+PGNvZGU+Y2FwdGlvbmNsYXNzPC9jb2RlPjwvaDM+DQo8cD5DU1MgY2xhc3MgZm9yIHRoZSBjYXB0aW9uIHRleHQuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKS48L3A+DQoNCjxoMyBpZD0iYWx0Y2xhc3MiPjxjb2RlPmFsdGNsYXNzPC9jb2RlPjwvaDM+DQo8cD5DU1MgY2xhc3MgZm9yIHRoZSBhbHQgdGV4dC4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpLjwvcD4NCg0KPGgzIGlkPSJuYXZjbGFzcyI+PGNvZGU+bmF2Y2xhc3M8L2NvZGU+PC9oMz4NCjxwPkNTUyBjbGFzcyBmb3IgdGhlIG5leHQvcHJldiBjb250YWluZXIuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKS48L3A+DQoNCjxoMyBpZD0icHJldmNsYXNzIj48Y29kZT5wcmV2Y2xhc3M8L2NvZGU+PC9oMz4NCjxwPkNTUyBjbGFzcyBmb3IgdGhlICdwcmV2JyBsaW5rLiBEZWZhdWx0OiBzbWRfc2xpbWJveF9wcmV2LjwvcD4NCg0KPGgzIGlkPSJuZXh0Y2xhc3MiPjxjb2RlPm5leHRjbGFzczwvY29kZT48L2gzPg0KPHA+Q1NTIGNsYXNzIGZvciB0aGUgJ25leHQnIGxpbmsuIERlZmF1bHQ6IHNtZF9zbGltYm94X25leHQuPC9wPg0KDQo8aDMgaWQ9ImxpYmNoZWNrIj48Y29kZT5saWJjaGVjazwvY29kZT48L2gzPg0KPHA+U2V0IHRoaXMgdG8gMCB0byBieXBhc3MgdGhlIGxpYnJhcnkgY2hlY2suIFVzZWZ1bCBpZiB5b3Ugd2FudCB0aGUgdGh1bWJzIHRvIGJlIGluY2x1ZGVkIGluIGFuIFJTUyBmZWVkIHdpdGhvdXQgdGhlIHBsdWdpbiBjb21wbGFpbmluZyB0aGUgbGlicmFyaWVzIGFyZSBtaXNzaW5nLiBEZWZhdWx0OiAxIChvbikuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyIC8+DQpZZXMsIGNoZWNrIHRoZSA8YSBocmVmPSIjaW5jIj5zbWRfc2xpbWJveF9pbmM8L2E+IHRhZyBoYXMgYmVlbiBjYWxsZWQ8L2xpPg0KPGxpPjxjb2RlPjA8L2NvZGU+PGJyIC8+DQpObywgZG9uJ3QgY2hlY2s8L2xpPg0KPC91bD4NCg0KPGgyPjxhIGlkPSJleGFtcGxlcyI+PC9hPkV4YW1wbGVzPC9oMj4NCg0KPGgzIGlkPSJlZzEiPkV4YW1wbGUgMTwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9ImxhbmRzY2FwZSIgbGltaXQ9IjEwIiAvJmd0OzwvcHJlPg0KDQo8cD5TaG93IGFsbCBpbWFnZXMgaW4gdGhlIGxhbmRzY2FwZSBjYXRlZ29yeSwgdGVuIGF0IGEgdGltZS48L3A+DQoNCjxoMyBpZD0iZWcyIj5FeGFtcGxlIDI8L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSJkb2dzLCBiaXJkcyIgbGltaXQ9IjkiIHNob3djYXB0aW9ucz0iMSIgdGV4dHBvcz0iYWZ0ZXIiIHdyYXB0YWc9ImxpIiBjZWxsY2xhc3M9ImNlbGwiIC8mZ3Q7PC9wcmU+DQoNCjxwPlNob3cgYWxsIGltYWdlcyBpbiB0aGUgZG9ncyBhbmQgYmlyZHMgY2F0ZWdvcmllcywgOSBwZXIgcGFnZS4gQWRkIHRoZSBjYXB0aW9ucyB1bmRlciB0aGUgdGh1bWJuYWlscyBhbmQgbWFrZSB0aGVtIGNsaWNrYWJsZSB0b28uIFdyYXAgZWFjaCBpbWFnZSBpbiBhIDxjb2RlPmxpPC9jb2RlPiB0YWcgYW5kIGdpdmUgZWFjaCBhIGNsYXNzIG9mICdjZWxsJyAoaW1wbGllcyB5b3UgbXVzdCBtYW51YWxseSBhZGQgYSBjb3JyZXNwb25kaW5nIDxjb2RlPiZsdDt1bCZndDs8L2NvZGU+IHRhZyBhcm91bmQgdGhlIHBsdWdpbiBpbiBvcmRlciB0byBtYWludGFpbiBwYWdlIHZhbGlkaXR5KS48L3A+DQoNCjxwPklmIHlvdSBhZGRlZCA8Y29kZT5vcmRlcmJ5PSJkYXRlOmRlc2MsIHJhbmRvbSI8L2NvZGU+IHRvIHRoZSBhYm92ZSB0YWcsIHlvdSB3b3VsZCBnZXQgdGhlIG1vc3QgcmVjZW50IDkgaW1hZ2VzIG9uIHRoZSBmaXJzdCBwYWdlLCBidXQgc2hvd24gaW4gYSByYW5kb20gb3JkZXIuIFRoZSBuZXh0IHBhZ2Ugd291bGQgc2hvdyB0aGUgbmV4dCBtb3N0LXJlY2VudCA5IGltYWdlcywgYWdhaW4gc29ydGVkIHJhbmRvbWx5IHdpdGhpbiB0aGVtc2VsdmVzLjwvcD4NCg0KPHA+U3dpdGNoaW5nIHRoZSBzb3J0IHRvOiA8Y29kZT5vcmRlcmJ5PSJyYW5kb20sIGRhdGU6ZGVzYyI8L2NvZGU+IHdvdWxkIGNoYW5nZSB0aGUgb3V0cHV0LiBZb3Ugd291bGQgdGhlbiBnZXQgOSByYW5kb20gaW1hZ2VzIG9uIHRoZSBmaXJzdCBwYWdlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBvbmVzIG9mIHRoZSBncm91cCBzaG93biBmaXJzdC4gQ2xpY2tpbmcgJ05leHQnIHdvdWxkIHNob3cgYW5vdGhlciA5IHJhbmRvbSBpbWFnZXMgKHNvbWUgbWF5IGJlIHRoZSBzYW1lIGFzIHBhZ2UgMSksIGFnYWluIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGRhdGUuIEZvciB0aGlzIHJlYXNvbiAodW5sZXNzIHlvdSdyZSBzaW1wbHkgdXNpbmcgdGhlIHBsdWdpbiB0byBwcmV0dHkgdXAgYSBwYWdlIHdpdGggcmFuZG9tIGltYWdlcykgaWYgeW91J3JlIHVzaW5nIHJhbmRvbSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3JkZXJieSwgeW91IHByb2JhYmx5IHdhbnQgdG8gZGlzYWJsZSBwYWdpbmcgYnkgc2V0dGluZyBzaG93cGFnZWxpbmtzPSIwIi48L3A+DQoNCjxoMyBpZD0iZWczIj5FeGFtcGxlIDM8L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9zbGltYm94IGltYWdlaWQ9IjQ4LCAyNSwgNCIgY2F0ZWdvcnk9ImRvZ3MsID9jdXN0b20xIiBzdWJjYXRzPSIxIiBsaW1pdD0iMjAiIHByZXZsYWJlbD0iQmFjayIgb3JkZXJieT0ibmFtZTpkZXNjLCBjYXRlZ29yeSIgLyZndDs8L3ByZT4NCg0KPHA+U2hvdyBpbWFnZXMgd2l0aCBJRHMgNDgsIDI1IGFuZCA0IGFzIHdlbGwgYXMgYWxsIGltYWdlcyBpbiB0aGUgZG9ncyBjYXRlZ29yeSBhbmQgYWxzbyBwdWxsIHRoZSBpbWFnZSBjYXRlZ29yeSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUncyBjdXN0b20xIGZpZWxkIChpZiBjdXN0b20xIGhlbGQgImJpcmRzLCBsYW5kc2NhcGVzIiAod2l0aG91dCB0aGUgcXVvdGVzKSB5b3UnZCBnZXQgcGljdHVyZXMgZnJvbSBhbGwgdGhyZWUgY2F0ZWdvcmllcyBhbmQgYWxsIHRoZWlyIHN1YmNhdGVnb3JpZXMpLiBMaW1pdCB0aGUgbnVtYmVyIHBlciBwYWdlIHRvIDIwLCBjaGFuZ2UgdGhlIHByZXZpb3VzIHBhZ2UgbGFiZWwgdG8gIkJhY2siIGFuZCBzb3J0IHRoZSBpbWFnZXMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBuYW1lLCB0aGVuIGNhdGVnb3J5LjwvcD4NCg0KPGgzIGlkPSJlZzQiPkV4YW1wbGUgNDwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9InN0YXRpYywgP2lkIiBpbWFnZWlkPSIhYXJ0aWNsZV9pbWFnZSIgbGltaXQ9IjYiIGdyb3VwbmFtZT0iP2MiIHNob3dwYWdlbGlua3M9IjAiIC8mZ3Q7PC9wcmU+DQoNCjxwPklmIHRoZSBwZXJzb24gaXMgY3VycmVudGx5IHZpZXdpbmcgYXJ0aWNsZSBJRCA2Nywgc2hvdyBhbGwgaW1hZ2VzIGZyb20gdGhlICdzdGF0aWMnIGNhdGVnb3J5IGFuZCB0aGUgJ2FydGljbGUtNjcnIGNhdGVnb3J5LiBJZiBhbnkgaW1hZ2UgaW4gZWl0aGVyIG9mIHRob3NlIGNhdGVnb3JpZXMgaXMgZm91bmQgdG8gaGF2ZSBhbiBJRCBvZiB0aGUgYXJ0aWNsZSBpbWFnZSBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUsIHRoYXQgcGljdHVyZSB3aWxsIGJlIGlnbm9yZWQuIE9ubHkgc2hvdyA2IHBpY3R1cmVzIGFuZCBkb24ndCBzaG93IHRoZSBuZXh0L3ByZXYgbGlua3Mgb24gdGhlIHBhZ2UuPC9wPg0KDQo8cD5BbHNvLCBncm91cCB0aGUgU2xpbWJveCBwaWN0dXJlcyBieSBpbWFnZSBjYXRlZ29yeS4gVGhpcyBtZWFucyB0aGF0IGlmIHNvbWVvbmUgY2xpY2tzIG9uIGEgcGljdHVyZSBmcm9tIHRoZSAic3RhdGljIiBjYXRlZ29yeSwgdGhlIFNsaW1ib3ggbmV4dC9wcmV2IGxpbmtzIG9ubHkgbmF2aWdhdGUgYmV0d2VlbiB0aG9zZSBwaWN0dXJlcy4gVGhlIHVzZXIgd2lsbCBoYXZlIHRvIGNsb3NlIHRoZSBsaWdodGJveCBhbmQgY2xpY2sgYSBwaWN0dXJlIGluIHRoZSBhcnRpY2xlLTY3IGNhdGVnb3J5IHRvIHNob3cgcGljdHVyZXMgZnJvbSB0aGUgb3RoZXIgZ3JvdXAuPC9wPg0KDQo8cD5PbiB0aGUgc3VyZmFjZSB0aGUgZ3JvdXBuYW1lIG9wdGlvbiBtYXkgc2VlbSBhIGxpdHRsZSBzdXBlcmZsdW91cyBidXQgaXQgY2FuIGJlIHVzZWZ1bCB0byBhbGxvdyBwZW9wbGUgdG8gb25seSBmbGljayB0aHJvdWdoIGEgc3Vic2V0IG9mIHRoZSBwaWN0dXJlcyBvbiBlYWNoIHBhZ2UsIGJhc2VkIG9uIHRoZWlyIGNhdGVnb3J5LCBmaWxlIG5hbWUsIGF1dGhvciwgd2lkdGgvaGVpZ2h0LCBhbHQvY2FwdGlvbiwgZXZlbiBJRCBpZiB5b3Ugd2FudCB0aGVtIHRvIGFsbCBiZSB1bmlxdWUgZW50aXRpZXMuIFlvdSBjYW4gYWxzbyB1c2UgYSBmaXhlZCB2YWx1ZSByZWFkIGZyb20gYSBmaWVsZCBpbiB0aGUgY3VycmVudCBhcnRpY2xlLCBlLmcuIGdyb3VwbmFtZT0iP2N1c3RvbTIiLiBVc2VmdWwgd2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3JkZXJieS48L3A+DQoNCjxoMyBpZD0iZWc1Ij5FeGFtcGxlIDU8L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSI/YywgP2N1c3RvbTEsICFjdXN0b20yLCAhc3RhdGljIiBsaW1pdD0iOCIgbWF4bGltaXQ9IjMyIiAvJmd0OzwvcHJlPg0KPHA+QSBiaXQgb2YgYSBjb250cml2ZWQgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyBjcmF6eSB5b3UgY2FuIGdldDogVGhpcyB3aWxsIHNob3cgYSBtYXhpbXVtIG9mIDMyIGltYWdlcyBmcm9tIGFuIGltYWdlIGNhdGVnb3J5IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnksIHBsdXMgYWxsIGltYWdlcyBmcm9tIGNhdGVnb3JpZXMgbGlzdGVkIGluIHRoZSBjdXN0b20xIGZpZWxkIG9mIHRoZSBjdXJyZW50IGFydGljbGUgYnV0IDxlbT5leGNsdWRpbmc8L2VtPiBpbWFnZXMgZnJvbSBjYXRlZ29yaWVzIGxpc3RlZCBpbiBjdXN0b20yIGFuZCBhbHNvIGV4Y2x1ZGluZyB0aGUgJ3N0YXRpYycgY2F0ZWdvcnkuIFNob3cgOCBpbWFnZSB0aHVtYm5haWxzIGF0IGEgdGltZS48L3A+DQoNCjxoMj48YSBuYW1lPSJzdHlsZSI+PC9hPlN0eWxpbmcgd2l0aCBDU1M8L2gyPg0KDQo8cD5UaGVyZSBhcmUgKGRlbGliZXJhdGVseSkgdmVyeSBmZXcgbGF5b3V0IGF0dHJpYnV0ZXMgZm9yIHRoZSBwbHVnaW4gYmVjYXVzZSBwcmV0dHkgbXVjaCBldmVyeXRoaW5nIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIENTUyB0byBsYXkgeW91ciBpbWFnZXMgb3V0IGhvd2V2ZXIgeW91IGxpa2UgdGhlbS4gV2FudCB0byBjaGFuZ2UgdGhlIG51bWJlciBvZiBpbWFnZXMgcGVyIHJvdz8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyAmbHQ7ZGl2Jmd0OyBhbmQgc2V0IHRoZSB3aWR0aCBvZiBlYWNoIHRodW1ibmFpbCBzcGFjZSB0byBhIHBhcnRpY3VsYXIgc2l6ZS48L3A+DQoNCjxwPlRoZSBmb2xsb3dpbmcgbG9naWNhbCBzdHJ1Y3R1cmUgYXBwbGllczo8L3A+DQoNCjx1bD4NCjxsaT5BbiBvcHRpb25hbCB3cmFwdGFnIGFuZCBjbGFzcyBuYW1lIGFyb3VuZCBlYWNoICJjZWxsIiAoaS5lLiB0aHVtYm5haWwpPC9saT4NCjxsaT5BIGxpbmsgZWxlbWVudCBjb250YWluaW5nIHRoZSB0aHVtYm5haWwncyA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnPC9saT4NCjxsaT5UaGUgY2FwdGlvbi9hbHQgaXMgYSAmbHQ7c3BhbiZndDsgd2l0aCBhbiBvcHRpb25hbCBjbGFzcyBhbmQgY2FuIGFwcGVhciBhYm92ZSwgYmVsb3cgb3Igd2l0aGluIHRoZSBsaW5rIGVsZW1lbnQ8L2xpPg0KPGxpPlRoZSBuZXh0L3ByZXYgbGlua3MgYXJlIHdyYXBwZWQgaW4gdGhlIG9wdGlvbmFsIHdyYXB0YWcgY29udGFpbmVyIGFuZCBjYW4gYmUgZ2l2ZW4gYW4gb3B0aW9uYWwgY2xhc3MgbmFtZTwvbGk+DQo8bGk+VGhlIG5leHQgbGluayBoYXMgYSAoZGVmYXVsdCkgY2xhc3Mgb2YgInNtZF9zbGltYm94X25leHQiIGFuZCBwcmV2IGhhcyAic21kX3NsaW1ib3hfcHJldiIuIFRoZXNlIGNhbiBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgaWYgeW91IHdpc2guPC9saT4NCjwvdWw+DQoNCjxwPlVzaW5nIENTUyBzZWxlY3RvcnMgeW91IGNhbiBhY2Nlc3MgZXZlcnkgcGFydCBvZiB0aGUgc3RydWN0dXJlLiBBbiBleGFtcGxlIENTUyBsYXlvdXQgaXMgZ2l2ZW4gaGVyZSB0byBnZXQgeW91IHN0YXJ0ZWQgKGFzc3VtZXMgYSB3cmFwdGFnIG9mICdsaScsIGEgY29udGFpbmluZyAndWwnIGFyb3VuZCB0aGUgcGx1Z2luIHRhZyB3aXRoIGEgY2xhc3Mgb2YgPGNvZGU+c21kX3NsaW1ib3g8L2NvZGU+IGFuZCA8Y29kZT5uYXZjbGFzcz0ic21kX3NsaW1ib3hfbmF2IjwvY29kZT4pLiBQYXN0ZSBpdCBpbnRvIHlvdXIgQ1NTIHRlbXBsYXRlIGFuZCB5b3UncmUgZ29vZCB0byBnby48L3A+DQoNCjxwcmU+DQouc21kX3NsaW1ib3ggew0KCWZsb2F0OmxlZnQ7DQoJd2lkdGg6NjAwcHg7DQoJbWFyZ2luOjFlbSAwOw0KCWNsZWFyOmJvdGg7DQoJbGlzdC1zdHlsZTpub25lOw0KfQ0KLnNtZF9zbGltYm94IGxpIHsNCgl3aWR0aDoxNTBweDsNCgloZWlnaHQ6MTUwcHg7DQoJZmxvYXQ6bGVmdDsNCgltYXJnaW46MWVtIGF1dG87DQoJdGV4dC1hbGlnbjpjZW50ZXI7DQp9DQouc21kX3NsaW1ib3ggaW1nIHsNCgltYXJnaW46MCBhdXRvOw0KfQ0KLnNtZF9zbGltYm94IHNwYW4gew0KCWZsb2F0OmxlZnQ7DQoJd2lkdGg6MTQwcHg7DQoJcGFkZGluZzoycHggMCAwIDVweDsNCn0NCmxpLnNtZF9zbGltYm94X25hdiB7DQoJY2xlYXI6Ym90aDsNCgl3aWR0aDo1MDBweDsNCglwYWRkaW5nOjIwcHg7DQp9DQouc21kX3NsaW1ib3hfcHJldiB7DQoJZmxvYXQ6bGVmdDsNCn0NCi5zbWRfc2xpbWJveF9uZXh0IHsNCglmbG9hdDpyaWdodDsNCn0NCjwvcHJlPiI7czo0OiJjb2RlIjtzOjE5NDE5OiIvLyB2MC4xICAgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZQ0KLy8gdjAuMTEgQWRkZWQgIWNhdGVnb3J5IHN1cHBvcnQNCi8vIHYwLjEyIEFkZGVkIHRleHRwb3Mgb3B0aW9uICh0aGFua3MgbGVlKSBhbmQgaW1hZ2VpZCBvcHRpb24gKHRoYW5rcyB3b3VhcmVuKQ0KLy8gdjAuMiAgIGpzIGFuZCBjc3MgY2FuIG5vdyBiZSBsb2FkZWQgZWxzZXdoZXJlICh0aGFua3MganN0dWJicykuIEFkZGVkIHdyYXB0YWcgYW5kIGNoYW5nZWQgZGVmYXVsdHMgdG8gbWFrZSBvdXRwdXQgbGVzcyBsaWtlIHRhZy1zb3VwICh0aGFua3Mgd291YXJlbikNCi8vIHYwLjIxIEFkZGVkIG9yZGVyYnk9ImZpeGVkIiB0byBhbGxvd2VkIGZpeGVkIGltYWdlaWQgb3JkZXJpbmcgKHRoYW5rcyBsZWUpLiAkd2hlcmUgd2FybmluZyBzcXVhc2hlZCAodGhhbmtzIGJlbmppYm90KQ0KLy8gdjAuMjIgTm93IHVzZXMgc21kX2xpYiBhbmQgc3ViY2F0cy4gQWxzbyBNTFAoTXVsdGktbGluZ3VhbCktYXdhcmUuDQovLyB2MC4yMyBGaXhlZCBvcmRlcmJ5IHdoZW4gdXNpbmcgcmFuZG9tICh0aGFua3MgbXJkYWxlKSBhbmQgYWRkZWQgYWJpbGl0eSB0byBvdmVycmlkZSBtYXhsaW1pdA0KLy8gdjAuMjQgQWRkZWQgbGliY2hlY2sgKHRoYW5rcyBwYXB1YXNzKS4gTnVtZXJpYyByYW5nZXMgbm93IGFsbG93ZWQgZm9yIElEcyAoc21kX2xpYikuIEZpeGVkIGVtcHR5IGZpZWxkL2ltYWdlaWQgbmVnYXRpb24gYnVncy4gRml4ZWQgbmV4dC9wcmV2IGJ1dHRvbnMgZm9yIE1MUC4NCi8vIHYwLjI0YiBGaXhlZCBwYWdpbmcgaW4gc3ViZGlyZWN0b3J5IGluc3RhbGxhdGlvbnMgKHRoYW5rcyB1bHRyYW1lZ2EgYW5kIFF3ZXN0KQ0KLy8gdjAuMjUgRXh0ZW5kZWQgZ3JvdXBuYW1lICh0aGFua3MgW0F4ZWxdKQ0KLy8gdjAuMjVhIEJ1bmRsZWQgbGF0ZXN0IHZlcnNpb24gb2Ygc2xpbWJveCBpbiB0aGUgcGFja2FnZS4gTWFkZSB0aGUgZG9jcyBlYXNpZXIgdG8gcmVhZC4NCi8vIHYwLjI2IEFkZGVkIHRydWUgbXVsdGlwbGUgZ2FsbGVyeSBzdXBwb3J0ICh0aGFua3Mgd2hlYXRpY3VzKQ0KLy8gdjAuMjcgQWRkZWQgdGh1bWIgKHRoYW5rcyBwcm9ncmU1NSkNCi8vIHYwLjI4IEFkZGVkIGltYWdlY2FwdGlvbiAodGhhbmtzIEFkYW1fVikNCi8vIHYwLjI5IEFkZGVkIHRodW1ic2l6ZSAodGhhbmtzIFNpbWFuZWspDQoNCnJlcXVpcmVfcGx1Z2luKCdzbWRfbGliJyk7DQpyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Nib3hfZW51bV9zdHInLCAnbDEwbi5lbnVtZXJhdGVfc3RyaW5ncycpOw0KZ2xvYmFsICRzbWRfc2JveF9saWJzOw0KZ2xvYmFsICRzbWRfc2JveF9zdHI7DQokc21kX3Nib3hfc3RyID0gYXJyYXkoDQoJJ2luY2VycicgPT4gJ0lmIHVzaW5nIHRoZSBzY3JpcHRzIG9wdGlvbiwgc3BlY2lmeSB1cCB0byB0aHJlZSByZXF1aXJlZCBzY3JpcHRzIGluIHRoaXMgb3JkZXI6ICZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Im1vb3Rvb2xzSlNMb2NhdGlvbiwgc2xpbWJveEpTTG9jYXRpb24sIHNsaW1ib3hDU1NMb2NhdGlvbiIgLyZndDsuIElmIGFueSBwb3NpdGlvbnMgYXJlIGxlZnQgZW1wdHksIHRoZSBtaXNzaW5nIHNjcmlwdHMgbXVzdCBiZSBzdXBwbGllZCB2aWEgdGhlIGpzZGlyL2Nzc2RpciBvcHRpb25zLCBvciBsb2FkZWQgZXh0ZXJuYWxseSBhbmQgdG9sZCB0byBza2lwIHRoaXMgc3RlcC4gVGhlIHRocmVlIHZhbHVlcyBjYW4gZWl0aGVyIGJlIGEgZnVsbCBYSFRNTCBzdHJpbmcgKGUuZy4gYXMgcmV0dXJuZWQgYnkgdHhwOnN0bV9qYXZhc2NyaXB0IG9yIHR4cDpjc3MsIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCB3b3JrIGRpcmVjdGx5IHdpdGhpbiB0aGUgdGFnOyBzZWUgdGhlIGRvY3MpIG9yIHNpbXBseSBwYXRocyB0byB0aGUgZmlsZXMuIE5vdGUgdGhhdCBubyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCB0byBjaGVjayBpZiB0aGUgZmlsZXMgZXhpc3QuJywNCgknbm9pbmMnID0+ICdSZXF1aXJlZCBsaWJyYXJpZXMgbm90IGxvYWRlZC4gQ2FsbCAmbHQ7dHhwOnNtZF9zbGltYm94X2luYyAvJmd0OyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoaXMgcGFnZS4nLA0KCSduZXh0X2xibCcgPT4gJ05leHQnLA0KCSdwcmV2X2xibCcgPT4gJ1ByZXYnLA0KKTsNCg0KLy8gVXNlIHRoaXMgdG8gaW5jbHVkZSB0aGUgbGlicmFyaWVzIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiB0aGUgcGFnZQ0KZnVuY3Rpb24gc21kX3NsaW1ib3hfaW5jKCRhdHRzKSB7DQoJZ2xvYmFsICRzbWRfc2JveF9saWJzOw0KCWdsb2JhbCAkc21kX3Nib3hfc3RyOw0KDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoNCgkvLyBGdW5jdGlvbiBvcHRpb25zDQoJJGpzZGlyID0gaXNzZXQoJGpzZGlyKSA/IGRvU2xhc2goJGpzZGlyKSA6ICcnOw0KCSRjc3NkaXIgPSBpc3NldCgkY3NzZGlyKSA/IGRvU2xhc2goJGNzc2RpcikgOiAnJzsNCgkkc2NyaXB0cyA9IGlzc2V0KCRzY3JpcHRzKSA/ICRzY3JpcHRzIDogJyc7DQoJJHNraXAgPSBpc3NldCgkc2tpcCkgPyAkc2tpcCA6ICIwIjsNCg0KCSRtb2RzUmVxdWlyZWQgPSAzOw0KCSRtb2RzTG9hZGVkID0gMDsNCgkkb3V0U3RyID0gJyc7DQoNCglpZiAoJHNraXAgPiAwKSB7DQoJCSRtb2RzTG9hZGVkID0gJHNraXA7DQoJfQ0KDQoJLy8gSW5jbHVkZSB0aGUganMgbGlicyBpZiByZXF1aXJlZA0KCWlmICgkanNkaXIgIT0gJycpIHsNCgkJJG91dFN0ciAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuJGpzZGlyLiAnL21vb3Rvb2xzLmpzIj48L3NjcmlwdD4nLm47DQoJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9zbGltYm94LmpzIj48L3NjcmlwdD4nLm47DQoJCSRtb2RzTG9hZGVkICs9IDI7DQoJfQ0KDQoJLy8gRmluZCB3aGljaCBzY3JpcHRzIHRvIGF1dG8tbG9hZA0KCWlmICgoJHNjcmlwdHMgIT0gJycpICYmICgkbW9kc0xvYWRlZCA8ICRtb2RzUmVxdWlyZWQpKSB7DQoJCSRtb2RzTGlzdCA9IHByZWdfc3BsaXQoJy9bLF0rLycsJHNjcmlwdHMsJG1vZHNSZXF1aXJlZCk7DQoJCSRqc3ByZWZpeCA9ICI8c2NyaXB0IjsNCgkJJGNzc3ByZWZpeCA9ICI8bGluayI7DQoJCSR0eHBwcmVmaXggPSAiPHR4cCI7DQoJCWZvcmVhY2ggKCRtb2RzTGlzdCBhcyAkZmlsZW9iaikgew0KCQkJJGZpbGVvYmogPSB0cmltKCRmaWxlb2JqKTsNCgkJCWlmICgkZmlsZW9iaiA9PSAnJykgew0KCQkJCSRtb2RzTG9hZGVkLS07DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCRqc3ByZWZpeCkpID09PSAkanNwcmVmaXgpIHsNCgkJCQkkb3V0U3RyIC49ICRmaWxlb2JqLm47DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCRjc3NwcmVmaXgpKSA9PT0gJGNzc3ByZWZpeCkgew0KCQkJCSRvdXRTdHIgLj0gJGZpbGVvYmoubjsNCgkJCX0gZWxzZSBpZiAoc3Vic3RyKCRmaWxlb2JqLCAwLCBzdHJsZW4oJHR4cHByZWZpeCkpID09PSAkdHhwcHJlZml4KSB7DQoJCQkJJG91dFN0ciAuPSBwYXJzZSgkZmlsZW9iaik7DQoJCQl9IGVsc2Ugew0KCQkJCWlmICgkbW9kc0xvYWRlZCA8IDIpIHsNCgkJCQkJJG91dFN0ciAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuJGZpbGVvYmouICciPjwvc2NyaXB0PicubjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkb3V0U3RyIC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiRmaWxlb2JqLiAnIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nLm47DQoJCQkJfQ0KCQkJfQ0KCQkJJG1vZHNMb2FkZWQrKzsNCgkJfQ0KCX0NCg0KCS8vIEluY2x1ZGUgdGhlIGNzcyBmaWxlIGlmIHJlcXVpcmVkDQoJaWYgKCRjc3NkaXIgIT0gJycpIHsNCgkJJG91dFN0ciAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4kY3NzZGlyLiAnL3NsaW1ib3guY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4nLm47DQoJCSRtb2RzTG9hZGVkKys7DQoJfQ0KDQoJLy8gU2V0IHRoZSBmbGFnIHRvIHNheSB0aGUgbGlicyBhcmUgb2suIFNoYW1lIHRoZXJlJ3Mgbm8gZWFzeSBwcm92aXNpb24gZm9yDQoJLy8gY2hlY2tpbmcgdGhlIGZpbGVzIGFjdHVhbGx5IGV4aXN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbnMsIGJ1dCBoZXkNCglpZiAoJG1vZHNMb2FkZWQgPT0gJG1vZHNSZXF1aXJlZCkgew0KCQkkc21kX3Nib3hfbGlicyA9IHRydWU7DQoJfSBlbHNlIHsNCgkJJHNtZF9zYm94X2xpYnMgPSBmYWxzZTsNCgkJJG91dFN0ciA9IHNtZF9nVHh0KCRzbWRfc2JveF9zdHIsJ2luY2VycicpLm47DQoJfQ0KDQoJcmV0dXJuICRvdXRTdHI7DQp9DQoNCmZ1bmN0aW9uIHNtZF9zbGltYm94KCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICRpbWdfZGlyOw0KCWdsb2JhbCAkc21kX3Nib3hfbGlicywgJHNtZF9zYm94X3N0cjsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KCSRjYXRpZG9wdHMgPSAoaXNzZXQoJGNhdGVnb3J5KSB8fCBpc3NldCgkaW1hZ2VpZCkpID8gdHJ1ZSA6IGZhbHNlOw0KDQoJLy8gUGx1Z2luIG9wdGlvbnMNCgkkbGliY2hlY2sgPSBpc3NldCgkbGliY2hlY2spID8gJGxpYmNoZWNrOiAiMSI7DQoJJGltYWdlaWQgPSBpc3NldCgkaW1hZ2VpZCkgPyBkb1NsYXNoKCRpbWFnZWlkKSA6ICcnOw0KCSRjYXRlZ29yeSA9IGlzc2V0KCRjYXRlZ29yeSkgPyBkb1NsYXNoKCRjYXRlZ29yeSkgOiAoKCRpbWFnZWlkPT0iIikgPyAkcHJldGV4dFsnYyddOiAnJyk7DQoJJHN1YmNhdHMgPSBpc3NldCgkc3ViY2F0cykgPyB0cnVlIDogZmFsc2U7DQoJJGNhdGxhYmVsID0gaXNzZXQoJGNhdGxhYmVsKSA/ICRjYXRsYWJlbDogImFydGljbGUtIjsNCgkkZ3JvdXBuYW1lID0gaXNzZXQoJGdyb3VwbmFtZSkgPyAkZ3JvdXBuYW1lOiAic21kIjsNCgkkdGh1bWIgPSBpc3NldCgkdGh1bWIpID8gdHJ1ZSA6IGZhbHNlOw0KCSRtYXhsaW1pdCA9IGlzc2V0KCRtYXhsaW1pdCkgPyAkbWF4bGltaXQ6ICI5OTk5OSI7DQoJJGxpbWl0ID0gaXNzZXQoJGxpbWl0KSA/ICRsaW1pdDogIjAiOw0KCSRvcmRlcmJ5ID0gaXNzZXQoJG9yZGVyYnkpID8gJG9yZGVyYnk6ICJjYXRlZ29yeSI7DQoJJHNob3dwYWdlbGlua3MgPSBpc3NldCgkc2hvd3BhZ2VsaW5rcykgPyAkc2hvd3BhZ2VsaW5rczogIjEiOw0KCSRnYWxsZXJ5aWQgPSBpc3NldCgkZ2FsbGVyeWlkKSA/ICRnYWxsZXJ5aWQ6ICI/NDo2IjsNCgkkdGh1bWJzaXplID0gaXNzZXQoJHRodW1ic2l6ZSkgPyAkdGh1bWJzaXplIDogIiI7DQoJJHByZXZsYWJlbD0gaXNzZXQoJHByZXZsYWJlbCkgPyAkcHJldmxhYmVsOiBzbWRfZ1R4dCgkc21kX3Nib3hfc3RyLCAncHJldl9sYmwnKTsNCgkkbmV4dGxhYmVsPSBpc3NldCgkbmV4dGxhYmVsKSA/ICRuZXh0bGFiZWw6IHNtZF9nVHh0KCRzbWRfc2JveF9zdHIsICduZXh0X2xibCcpOw0KCSRpbWFnZWNhcHRpb24gPSBpc3NldCgkaW1hZ2VjYXB0aW9uKSA/ICRpbWFnZWNhcHRpb246ICI/Y2FwdGlvbiI7DQoJJHNob3djYXB0aW9uID0gaXNzZXQoJHNob3djYXB0aW9uKSA/ICRzaG93Y2FwdGlvbjogIjAiOw0KCSRzaG93YWx0ID0gaXNzZXQoJHNob3dhbHQpID8gJHNob3dhbHQ6ICIwIjsNCgkkdGV4dHBvcyA9IGlzc2V0KCR0ZXh0cG9zKSA/ICR0ZXh0cG9zOiAiYmVsb3ciOw0KCSR3cmFwdGFnID0gaXNzZXQoJHdyYXB0YWcpID8gJHdyYXB0YWc6ICIiOw0KCSRjZWxsY2xhc3MgPSBpc3NldCgkY2VsbGNsYXNzKSA/ICRjZWxsY2xhc3M6ICIiOw0KCSRpbWdjbGFzcyA9IGlzc2V0KCRpbWdjbGFzcykgPyAkaW1nY2xhc3M6ICIiOw0KCSRuYXZjbGFzcyA9IGlzc2V0KCRuYXZjbGFzcykgPyAkbmF2Y2xhc3M6ICIiOw0KCSRwcmV2Y2xhc3MgPSBpc3NldCgkcHJldmNsYXNzKSA/ICRwcmV2Y2xhc3M6ICJzbWRfc2xpbWJveF9wcmV2IjsNCgkkbmV4dGNsYXNzID0gaXNzZXQoJG5leHRjbGFzcykgPyAkbmV4dGNsYXNzOiAic21kX3NsaW1ib3hfbmV4dCI7DQoJJGNhcHRpb25jbGFzcyA9IGlzc2V0KCRjYXB0aW9uY2xhc3MpID8gJGNhcHRpb25jbGFzczogIiI7DQoJJGFsdGNsYXNzID0gaXNzZXQoJGFsdGNsYXNzKSA/ICRhbHRjbGFzczogIiI7DQoNCgkkZml4ZWRPcmRlciA9IGZhbHNlOw0KCSRnYWxsSUQgPSAiIjsNCgkkZmllbGRNYXAgPSBhcnJheSgibmFtZSIgPT4gIm5hbWUiLA0KCQkJCQkJCSJpZCIgPT4gImlkIiwNCgkJCQkJCQkiYWx0IiA9PiAiYWx0IiwNCgkJCQkJCQkiY2FwdGlvbiIgPT4gImNhcHRpb24iLA0KCQkJCQkJCSJjYXRlZ29yeSIgPT4gImNhdGVnb3J5IiwNCgkJCQkJCQkiYXV0aG9yIiA9PiAiYXV0aG9yIiwNCgkJCQkJCQkiZGF0ZSIgPT4gImRhdGUiLA0KCQkJCQkJCSJleHQiID0+ICJleHQiLA0KCQkJCQkJCSJ3IiA9PiAid2lkdGgiLA0KCQkJCQkJCSJoIiA9PiAiaGVpZ2h0Iik7DQoNCgkvLyBUaGUgZ2FsbGVyeSBpZGVudGlmaWVyIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgbmV4dC9wcmV2IHRodW1icGFnZSBsaW5rcw0KCWlmICgkZ2FsbGVyeWlkID09ICIiIHx8ICRnYWxsZXJ5aWRbMF0gPT0gIj8iKSB7DQoJCS8vIEdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciB0aGlzIGdhbGxlcnkgaW5zdGFuY2UNCgkJJGdhbGxUbXAgPSBtZDUoJGNhdGVnb3J5LiRpbWFnZWlkLiRvcmRlcmJ5LiRsaW1pdC4kbWF4bGltaXQuJHdyYXB0YWcpOw0KCQlsaXN0KCRnYWxsTGVuLCAkZ2FsbFNraXApID0gZXhwbG9kZSgiOiIsIHN1YnN0cigkZ2FsbGVyeWlkLDEpKTsNCgkJJGdhbGxMZW4gPSAgKGVtcHR5KCRnYWxsTGVuKSkgPyAiNCIgOiAkZ2FsbExlbjsNCgkJJGdhbGxTa2lwID0gIChlbXB0eSgkZ2FsbFNraXApKSA/ICIxIiA6ICRnYWxsU2tpcDsNCgkJZm9yICgkaWR4ID0gMCwgJGNudCA9IDA7ICRjbnQgPCAkZ2FsbExlbjsgJGNudCsrLCAkaWR4ID0gKCgkaWR4KyRnYWxsU2tpcCkgJSBzdHJsZW4oJGdhbGxUbXApKSkgew0KCQkJJGdhbGxJRCAuPSAkZ2FsbFRtcFskaWR4XTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRnYWxsSUQgPSAkZ2FsbGVyeWlkOw0KCX0NCg0KCS8vIE1haW4gY29kZSBib2R5DQoJaWYgKCgkbGliY2hlY2sgPT0gMSkgJiYgKCRzbWRfc2JveF9saWJzID09IGZhbHNlKSkgew0KCQkkb3V0U3RyID0gc21kX2dUeHQoJHNtZF9zYm94X3N0ciwnbm9pbmMnKTsNCgl9IGVsc2Ugew0KCQkvLyBUaGUgZGF0YWJhc2UgZmllbGRzIHJlcXVpcmVkDQoJCSRmaWVsZHMgPSAnaWQsbmFtZSxjYXB0aW9uLGFsdCxjYXRlZ29yeSxkYXRlLGF1dGhvcixleHQsdyxoJzsNCg0KCQkvLyBDb252ZXJ0IHRoZSBjYXRlZ29yeSAocG9zc2libHkgYSBjb21tYS1zZXAgbGlzdCkgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkkZnVsbENhdExpc3QgPSBhcnJheSgpOw0KCQkkbm90Q2F0TGlzdCA9IGFycmF5KCk7DQoJCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwgIiFjIiwgIj9zIiwgIiFzIiwgIj90IiwgIiF0IiwgIj9pZCIsICIhaWQiLCAiP2ZpZWxkIiwgIiFmaWVsZCIpOw0KCQkkcmV0QXJyYXkgPSBzbWRfZ2V0QXR0cygkY2F0ZWdvcnksICRjYXRWYXJzLCAkY2F0bGFiZWwpOw0KCQkkZnVsbENhdExpc3QgPSAkcmV0QXJyYXlbMF07DQoJCSRub3RDYXRMaXN0ID0gJHJldEFycmF5WzFdOw0KDQoJCS8vIENvbnZlcnQgdGhlIGltYWdlaWQgKHBvc3NpYmx5IGEgY29tbWEtc2VwIGxpc3QpIGludG8gYW4gU1FMLXN0eWxlICdpbicgbGlzdC4NCgkJJGZ1bGxJRExpc3QgPSBhcnJheSgpOw0KCQkkbm90SURMaXN0ID0gYXJyYXkoKTsNCgkJJGlkVmFycyA9IGFycmF5KCI/aWQiLCAiIWlkIiwgIj9maWVsZCIsICIhZmllbGQiKTsNCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGltYWdlaWQsICRpZFZhcnMpOw0KCQkkZnVsbElETGlzdCA9ICRyZXRBcnJheVswXTsNCgkJJG5vdElETGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdHMuDQoJCS8vIFRoZSBjYXRlZ29yaWVzL2ltYWdlIElEcyBhcmUgT1JlZCB0b2dldGhlciBpbiBicmFja2V0cyBmaXJzdA0KCQkvLyBiZWZvcmUgdGhlIG5lZ2F0aW9uIG9wdGlvbnMgYXJlIHRhY2tlZCBvbiBhcyBBTkRzIGFmdGVyd2FyZHMNCgkJJHdoZXJlT1IgPSBhcnJheSgpOw0KCQkkd2hlcmVBTkQgPSBhcnJheSgpOw0KDQoJCS8vIFN0YXJ0IHRoZSBXSEVSRSBzdGF0ZW1lbnQgd2l0aCB0aGUgY29tYmluZWQgbGlzdCBvZiBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCWZvciAoJGlkeCA9IGNvdW50KCRmdWxsSURMaXN0KTsgJGlkeCA+PTA7ICRpZHgtLSkgew0KCQkJCWlmIChlbXB0eSgkZnVsbElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJGZ1bGxJRExpc3RbJGlkeF0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRmdWxsSURMaXN0WyRpZHhdID0gIiciIC4gJGZ1bGxJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRmdWxsSURMaXN0KSA+IDApIHsNCgkJCQkkd2hlcmVPUltdID0gImlkIElOICgiIC4gaW1wbG9kZSgiLCIsICRmdWxsSURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJLy8gaW5jbHVkZWQgY2F0ZWdvcmllcyAtIHNvbWUgbWF5IGJlIHN1YmNhdHMNCgkJJHRtcGEgPSBhcnJheSgpOw0KCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJGZ1bGxDYXRMaXN0WyRpZHhdLCdpbWFnZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJGZ1bGxDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCQl9DQoJCX0NCgkJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJCSR3aGVyZU9SW10gPSAiY2F0ZWdvcnkgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVPUikgPiAwKSB7DQoJCQkkd2hlcmUgPSAiKCIgLiBpbXBsb2RlKCIgT1IgIiwgJHdoZXJlT1IpIC4gIikiOw0KCQl9IGVsc2Ugew0KCQkJJHdoZXJlID0gIiI7DQoJCX0NCg0KCQkvLyBleGNsdWRlZCBjYXRlZ29yaWVzDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRub3RDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZiAoJHN1YmNhdHMpIHsNCgkJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJG5vdENhdExpc3RbJGlkeF0sJ2ltYWdlJyk7DQoJCQkJZm9yICgkamR4ID0gMDsgJGpkeCA8IGNvdW50KCRjYXRlZ3MpOyAkamR4KyspIHsNCgkJCQkJaWYgKCRjYXRlZ3NbJGpkeF1bJ25hbWUnXSAhPSAicm9vdCIpIHsNCgkJCQkJCSR0bXBhW10gPSAiJyIgLiRjYXRlZ3NbJGpkeF1bJ25hbWUnXS4gIiciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkdG1wYVtdID0gIiciIC4kbm90Q2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0KCQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkd2hlcmVBTkRbXSA9ICJjYXRlZ29yeSBOT1QgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgkJfQ0KDQoJCS8vIEFkZCB0byB0aGUgV0hFUkUgc3RhdGVtZW50IHRoZSBjb21iaW5lZCBsaXN0IG9mIE5PVCBpbWFnZSBJRHMNCgkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJZm9yICgkaWR4ID0gY291bnQoJG5vdElETGlzdCk7ICRpZHggPj0wOyAkaWR4LS0pIHsNCgkJCQlpZiAoZW1wdHkoJG5vdElETGlzdFskaWR4XSkpIHsNCgkJCQkJdW5zZXQoJG5vdElETGlzdFskaWR4XSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG5vdElETGlzdFskaWR4XSA9ICInIiAuICRub3RJRExpc3RbJGlkeF0gLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYgKGNvdW50KCRub3RJRExpc3QpID4gMCkgew0KCQkJCSR3aGVyZUFORFtdID0gImlkIE5PVCBJTiAoIiAuIGltcGxvZGUoIiwiLCAkbm90SURMaXN0KS4gIikiOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZUFORCkgPiAwKSB7DQoJCQkkd2hlcmUgLj0gKCgkd2hlcmU9PSIiKSA/ICIiIDogIiBBTkQgIikgLiBpbXBsb2RlKCIgQU5EICIsICR3aGVyZUFORCk7DQoJCX0NCg0KCQkvLyBJZiB0aGUgcmVhc29uIG5vdGhpbmcgd2FzIHJldHVybmVkIGlzIGJlY2F1c2Ugbm8gb3B0aW9ucyB3ZXJlIGdpdmVuDQoJCWlmICgkd2hlcmUgPT0gIiIgJiYgISRjYXRpZG9wdHMpIHsNCgkJCSR3aGVyZSA9ICIxPTEiOw0KCQl9DQoNCgkJLy8gQ29udmVydCB0aGUgb3JkZXJieSBpbnRvIGEgdmFsaWQgc29ydGluZyBoaWVyYXJjaHkuDQoJCS8vIE5vdGUgdGhhdCByYW5kb20gaXMgYSBzcGVjaWFsIGNhc2UgYW5kIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6DQoJCS8vICAxKSBBbnl0aGluZyBhcHBlYXJpbmcgYmVmb3JlIHJhbmRvbSBpcyBwYXNzZWQgdG8gdGhlIGRhdGFiYXNlIHF1ZXJ5IGZvciBvcmRlcmluZw0KCQkvLyAgMikgQXMgc29vbiBhcyByYW5kb20gaXMgZW5jb3VudGVyZWQsIHRoZSBvcmRlcmJ5IHN0cmluZyBpcyBpZ25vcmVkLg0KCQkvLyAgICAgVGhlIHJlc3VsdHNldCB3aWxsIGJlIHNvcnRlZCByYW5kb21seSBpbnN0ZWFkDQoJCS8vICAzKSBJZiByYW5kb20gYXBwZWFycyBmaXJzdCBpbiB0aGUgbGlzdCwgdGhlIGRhdGEgaXMgcmV0cmlldmVkIHJhbmRvbWx5IHRoZW4gdGhlDQoJCS8vICAgICByZW1haW5pbmcgb3B0aW9ucyBzb3J0IHRoZSByZXN1bHRzZXQNCgkJJHdoZXJlT0IgPSBBcnJheSgpOw0KCQkkcG9zdE9yZGVyID0gYXJyYXkoKTsNCgkJJHJ1bGUgPSAic3FsIjsNCgkJJHBvc3RQcmVmaXggPSAiU09SVF8iOw0KCQkkcmFuZHNvcnQgPSBmYWxzZTsNCgkJJG9iTGlzdCA9IHByZWdfc3BsaXQoJy9bLFxzXSsvJywkb3JkZXJieSwtMSxQUkVHX1NQTElUX05PX0VNUFRZKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRvYkxpc3QpOyAkaWR4KyspIHsNCgkJCSRvYl9kaXIgPSBleHBsb2RlKCc6Jywkb2JMaXN0WyRpZHhdKTsNCgkJCSRkaXJlY3Rpb24gPSAnJzsNCgkJCSRjb2xSZWYgPSAnJzsNCgkJCWlmIChjb3VudCgkb2JfZGlyKSA8PSAxKSB7DQoJCQkJJG9iX2RpclsxXSA9ICJhc2MiOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJJGRpcmVjdGlvbiA9ICgkb2JfZGlyWzFdID09ICJkZXNjIikgPyAnIGRlc2MnIDogJyBhc2MnOw0KCQkJfSBlbHNlIHsNCgkJCQkkZGlyZWN0aW9uID0gKCRvYl9kaXJbMV0gPT0gImRlc2MiKSA/ICRwb3N0UHJlZml4LidERVNDJyA6ICRwb3N0UHJlZml4LidBU0MnOw0KCQkJfQ0KDQoJCQlzd2l0Y2ggKCRvYl9kaXJbMF0pIHsNCgkJCQljYXNlICdyYW5kb20nOg0KCQkJCQkkcnVsZSA9ICJwb3N0IjsNCgkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJJHdoZXJlT0JbXSA9ICdyYW5kKCknOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJhbmRzb3J0ID0gdHJ1ZTsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICdmaXhlZCc6DQoJCQkJCS8vICdmaXhlZCcgb25seSB3b3JrcyBvbiBpbWFnZSBpZHMNCgkJCQkJaWYgKCRpbWFnZWlkICE9ICIiKSB7DQoJCQkJCQkkZml4ZWRPcmRlciA9IHRydWU7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGNvbFJlZiA9IGFycmF5X3NlYXJjaCgkb2JfZGlyWzBdLCAkZmllbGRNYXApOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJCWlmICgkcnVsZSA9PSAic3FsIikgew0KCQkJCWlmICgkY29sUmVmICE9ICIiKSB7DQoJCQkJCSR3aGVyZU9CW10gPSAkY29sUmVmLiRkaXJlY3Rpb247DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoISRyYW5kc29ydCkgew0KCQkJCQlpZiAoJGNvbFJlZiAhPSAiIikgew0KCQkJCQkJJHBvc3RPcmRlcltdID0gYXJyYXkoImNvbCIgPT4gJGNvbFJlZiwgInNvcnQiID0+ICRkaXJlY3Rpb24pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZU9CKSA+IDApIHsNCgkJCSR3aGVyZSAuPSAnIE9SREVSIEJZICcgLiBpbXBsb2RlKCIsIiwkd2hlcmVPQik7DQoJCX0NCg0KCQkvLyBIYW5kbGUgcGFnaW5nDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHNob3dwYWdlbGlua3MpIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUIDAsJy4kbWF4bGltaXQpOw0KCQkJJG51bXRodW0gPSBjb3VudCgkcnMpOw0KCQkJJG51bVBhZ2VzID0gKCRudW10aHVtID4gMCkgPyBjZWlsKCRudW10aHVtLyRsaW1pdCkgOiAxOw0KCQkJJHRodW1icGFnZSA9ICghZ3BzKCRnYWxsSUQpKSA/IDEgOiBncHMoJGdhbGxJRCk7DQoJCQkkb2Zmc2V0ID0gKCR0aHVtYnBhZ2UgLSAxKSAqICRsaW1pdDsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUICcuJG9mZnNldC4nLCcuJGxpbWl0KTsNCgkJfSBlbHNlIHsNCgkJCS8vIE5vIHBhZ2luZyByZXF1aXJlZA0KCQkJJG51bVBhZ2VzID0gMTsNCgkJCSR0aHVtYnBhZ2UgPSAxOw0KCQkJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUgLicgTElNSVQgMCwnLiAoKCRsaW1pdD09MCkgPyAkbWF4bGltaXQgOiAkbGltaXQpKTsNCgkJfQ0KDQoJCS8vIElzIHBvc3Qtb3JkZXJpbmcgcmVxdWlyZWQ/IERvIGl0DQoJCWlmICgkcmFuZHNvcnQpIHsNCgkJCXNodWZmbGUoJHJzKTsNCgkJfSBlbHNlIGlmIChjb3VudCgkcG9zdE9yZGVyKSA+IDApIHsNCgkJCS8vIFRyYW5zbGF0ZSB0aGUgcm93cyBpbnRvIGNvbHVtbnMgdGhhdCBjYW4gYmUgc29ydGVkDQoJCQlmb3JlYWNoKCRycyBhcyAka2V5ID0+ICRyb3cpIHsNCgkJCQkkY29sX2lkWyRrZXldID0gJHJvd1snaWQnXTsNCgkJCQkkY29sX25hbWVbJGtleV0gPSAkcm93WyduYW1lJ107DQoJCQkJJGNvbF9jYXB0aW9uWyRrZXldID0gJHJvd1snY2FwdGlvbiddOw0KCQkJCSRjb2xfYWx0WyRrZXldID0gJHJvd1snYWx0J107DQoJCQkJJGNvbF9jYXRlZ29yeVska2V5XSA9ICRyb3dbJ2NhdGVnb3J5J107DQoJCQkJJGNvbF9kYXRlWyRrZXldID0gJHJvd1snZGF0ZSddOw0KCQkJCSRjb2xfZXh0WyRrZXldID0gJHJvd1snZXh0J107DQoJCQkJJGNvbF9hdXRob3JbJGtleV0gPSAkcm93WydhdXRob3InXTsNCgkJCQkkY29sX3dbJGtleV0gPSAkcm93Wyd3J107DQoJCQkJJGNvbF9oWyRrZXldID0gJHJvd1snaCddOw0KCQkJfQ0KCQkJLy8gTWFrZSB1cCBhbiBhcnJheV9tdWx0aXNvcnQgYXJnIGxpc3QgYW5kIGV4ZWN1dGUgaXQNCgkJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkcG9zdE9yZGVyKTsgJGlkeCsrKSB7DQoJCQkJJHNvcnRhcmdzW10gPSAnJGNvbF8nLiRwb3N0T3JkZXJbJGlkeF1bJ2NvbCddOw0KCQkJCSRzb3J0YXJnc1tdID0gJHBvc3RPcmRlclskaWR4XVsnc29ydCddOw0KCQkJfQ0KCQkJJHNvcnRpdCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAkcnMpOyc7DQoJCQlldmFsKCRzb3J0aXQpOw0KCQl9DQoNCgkJLy8gSXMgZml4ZWQtb3JkZXIgb3V0cHV0IGRlc2lyZWQ/IElmIHNvLCByZS1vcmRlciB0aGUgJHJzDQoJCWlmICgkZml4ZWRPcmRlcikgew0KCQkJJG9yZGVyZWRSUyA9IEFycmF5KCk7DQoJCQkkaWdub3JlTGlzdCA9IEFycmF5KCk7DQoJCQkkcmVtYWluaW5nUlMgPSBBcnJheSgpOw0KCQkJLy8gU3VjayBvdXQgdGhlIGZpeGVkIGl0ZW1zIGZpcnN0DQoJCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxJRExpc3QpOyAkaWR4KyspIHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJCWlmICgiJyIuJHJvd1snaWQnXS4iJyIgPT0gJGZ1bGxJRExpc3RbJGlkeF0pIHsNCgkJCQkJCSRvcmRlcmVkUlNbXSA9ICRyb3c7DQoJCQkJCQkkaWdub3JlTGlzdFtdID0gJHJvd1snaWQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIFRhY2sgb24gdGhlIHJlbWFpbmluZyByb3dzDQoJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkaWdub3JlTGlzdCkpIHsNCgkJCQkJJHJlbWFpbmluZ1JTW10gPSAkcm93Ow0KCQkJCX0NCgkJCX0NCgkJCSRycyA9IGFycmF5X21lcmdlKCRvcmRlcmVkUlMsICRyZW1haW5pbmdSUyk7DQoJCX0NCg0KCQkvLyBIYW5kbGUgdGh1bWJzaXplDQoJCSR0aHVtYldpZHRoID0gJHRodW1iSGVpZ2h0ID0gIiI7DQoJCSR0aHVtYldVbml0cyA9ICR0aHVtYkhVbml0cyA9ICJweCI7DQoJCWlmICgkdGh1bWJzaXplKSB7DQoJCQkkdGh1bWJTaXplcyA9IHNtZF9zcGxpdFJhbmdlKHRyaW0oJHRodW1ic2l6ZSksICIsXHMiLCAiIik7DQoJCQlpZiAoY291bnQoJHRodW1iU2l6ZXMpID09IDEpIHsNCgkJCQkkdGh1bWJXaWR0aCA9ICR0aHVtYkhlaWdodCA9IGVyZWdfcmVwbGFjZSgiW14wLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdW5pdHMgPSBlcmVnX3JlcGxhY2UoIlswLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMgPSAoJHVuaXRzID09ICIiKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsNCgkJCX0gZWxzZSB7DQoJCQkJJHRodW1iV2lkdGggPSBlcmVnX3JlcGxhY2UoIlteMC05XSIsICIiLCAkdGh1bWJTaXplc1swXSk7DQoJCQkJJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMF0pOw0KCQkJCSR0aHVtYldVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iV2lkdGggIT0gIiIpID8gJHRodW1iV1VuaXRzIDogJHVuaXRzOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR0aHVtYkhVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iSGVpZ2h0ICE9ICIiKSA/ICR0aHVtYkhVbml0cyA6ICR1bml0czsNCgkJCX0NCgkJfQ0KDQoJCS8vIENvbnN0cnVjdCB0aGUgb3V0cHV0DQoJCSRjYXB0aW9uSXRlbXMgPSBzbWRfc3BsaXRSYW5nZSgkaW1hZ2VjYXB0aW9uLCAiXHMiKTsNCgkJJG91dFN0ciA9ICcnOw0KCQlpZigkcnMpIHsNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQkkdGhlVGh1bWIgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gJ3QnIC4gJHJvd1snZXh0J107DQoJCQkJJGZ1bGwgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gKCgkdGh1bWIpID8gInQiIDogIiIpIC4kcm93WydleHQnXTsNCgkJCQlpZiAoJGdyb3VwbmFtZSA9PT0gIj9jIikgew0KCQkJCQkkZ3JwID0gJHJvd1snY2F0ZWdvcnknXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aWQiKSB7DQoJCQkJCSRncnAgPSAkcm93WydpZCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9hdXRob3IiKSB7DQoJCQkJCSRncnAgPSAkcm93WydhdXRob3InXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/ZGF0ZSIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2RhdGUnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/YWx0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snYWx0J107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2NhcHRpb24iKSB7DQoJCQkJCSRncnAgPSAkcm93WydjYXB0aW9uJ107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2V4dCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2V4dCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9uYW1lIikgew0KCQkJCQkkZ3JwID0gJHJvd1snbmFtZSddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj93aWR0aCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ3cnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aGVpZ2h0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snaCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZVswXSA9PT0gIj8iKSB7DQoJCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJCSRmaWVsZG5hbWUgPSBzdWJzdHIoJGdyb3VwbmFtZSwxKTsNCgkJCQkJaWYgKGlzc2V0KCR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXSkpIHsNCgkJCQkJCSRncnAgPSAkdGhpc2FydGljbGVbJGZpZWxkbmFtZV07DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZ3JwID0gJyc7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkZ3JwID0gJGdyb3VwbmFtZTsNCgkJCQl9DQoNCgkJCQkvLyBIYW5kbGUgaW1hZ2VjYXB0aW9uDQoJCQkJJGNhcHRpb25BcnJheSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGNhcHRpb25JdGVtcyBhcyAkaXRlbSkgew0KCQkJCQlpZiAoJGl0ZW1bMF0gPT09ICI/Iikgew0KCQkJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkaXRlbSwxKTsNCgkJCQkJCSRrZXkgPSBhcnJheV9zZWFyY2goJGZpZWxkbmFtZSwgJGZpZWxkTWFwKTsNCgkJCQkJCWlmICgka2V5KSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJHJvd1ska2V5XTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJGZpZWxkbmFtZTsNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjYXB0aW9uQXJyYXlbXSA9ICRpdGVtOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gR2VuZXJhdGUgdGhlIGNhcHRpb24vYWx0IGlmIHJlcXVpcmVkDQoJCQkJJGNhcFN0ciA9ICgkc2hvd2FsdCAmJiAkcm93WydhbHQnXSkgPyAnPHNwYW4nIC4gKCgkYWx0Y2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGFsdGNsYXNzLiAnIicgOiAnJykgLiAnPicgLiRyb3dbJ2FsdCddLiAnPC9zcGFuPicgOiAnJzsNCgkJCQkkY2FwU3RyIC49ICgkc2hvd2NhcHRpb24gJiYgJHJvd1snY2FwdGlvbiddKSA/ICc8c3BhbicgLiAoKCRjYXB0aW9uY2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGNhcHRpb25jbGFzcy4gJyInIDogJycpIC4gJz4nIC4kcm93WydjYXB0aW9uJ10uICc8L3NwYW4+JyA6ICcnOw0KDQoJCQkJLy8gQ29uc3RydWN0IHRoZSBsaW5rIGFuZCBwdXQgY2FwdGlvbi9hbHQgaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uDQoJCQkJJG91dFN0ciAuPSAoJHdyYXB0YWcgIT0gIiIpID8gJzwnIC4kd3JhcHRhZy4gKCgkY2VsbGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRjZWxsY2xhc3MuICciJyA6ICcnKSAuICc+JyA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR0ZXh0cG9zID09ICJhYm92ZSIpID8gJGNhcFN0ciA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gJzxhIGhyZWY9IicuJGZ1bGwuJyIgcmVsPSJsaWdodGJveC0nIC4kZ3JwLiAnIiB0aXRsZT0iJyAuaW1wbG9kZSgiICIsICRjYXB0aW9uQXJyYXkpLiAnIj4nIC4oKCR0ZXh0cG9zID09ICJiZWZvcmUiKSA/ICRjYXBTdHIgOiAnJykuICc8aW1nIHNyYz0iJyAuJHRoZVRodW1iLiAnIiBhbHQ9IicgLiRyb3dbJ2FsdCddLiAnIicgLiAoKCRpbWdjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kaW1nY2xhc3MuICciJyA6ICcnKSAuICgoJHRodW1iV2lkdGgpID8gJyB3aWR0aD0iJyAuICR0aHVtYldpZHRoLiR0aHVtYldVbml0cy4gJyInIDogJycpIC4gKCgkdGh1bWJIZWlnaHQpID8gJyBoZWlnaHQ9IicgLiAkdGh1bWJIZWlnaHQuJHRodW1iSFVuaXRzLiAnIicgOiAnJykgLiAnIC8+JyAuKCgkdGV4dHBvcyA9PSAiYWZ0ZXIiKSA/ICRjYXBTdHIgOiAnJykuICc8L2E+Jy5uOw0KCQkJCSRvdXRTdHIgLj0gKCR0ZXh0cG9zID09ICJiZWxvdyIpID8gJGNhcFN0ciA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoNCgkJCS8vIEFkZCB0aGUgcGFnaW5nIGZlYXR1cmVzIGlmIHJlcXVpcmVkDQoJCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkJJG5leHQgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlICE9ICRudW1QYWdlcyk7DQoJCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlID4gMSk7DQoNCgkJCQkvLyBSZXBsYWNlIGFueSBwYWdpbmcgaW5mbyBpbiB0aGUgcXVlcnkgc3RyaW5nDQoJCQkJJHByZXZQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1bWJwYWdlLTEpOw0KCQkJCSRuZXh0UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVzdF91cmknXSwgJGdhbGxJRCwgJHRodW1icGFnZSsxKTsNCg0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8JyAuJHdyYXB0YWcuICgoJG5hdmNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuYXZjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhJyAuICgoJHByZXZjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIicgOiAnJykgLiAnIGhyZWY9IicgLiRwcmV2UGFnZS4gJyI+JyAuJHByZXZsYWJlbC4gJzwvYT4nLm4gOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkbmV4dCkgPyAnPGEnIC4gKCgkbmV4dGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuZXh0Y2xhc3MuICciJyA6ICcnKSAuICcgaHJlZj0iJyAuJG5leHRQYWdlLiAnIj4nIC4kbmV4dGxhYmVsLiAnPC9hPicubiA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KLy8gQ2FsbGJhY2sgZm9yIE1MUCBzdHJpbmcgcmVwbGFjZW1lbnQNCmZ1bmN0aW9uIHNtZF9zYm94X2VudW1fc3RyKCRldmVudCwgJHN0ZXA9JycsICRwcmU9MCkgew0KCWdsb2JhbCAkc21kX3Nib3hfc3RyLCAkc21kTUxQOw0KCSRyID0gYXJyYXkJKA0KCQkJJ293bmVyJyA9PiAnc21kX3NsaW1ib3gnLA0KCQkJJ3ByZWZpeCcgPT4gJHNtZE1MUFsnc21kX3NsaW1ib3gnXSwNCgkJCSdsYW5nJyA9PiAnZW4tZ2InLCAvLyBEZWZhdWx0IGxhbmd1YWdlDQoJCQknZXZlbnQnID0+ICdwdWJsaWMnLCAvLyBwdWJsaWMvYWRtaW4vY29tbW9uID0gd2hpY2ggaW50ZXJmYWNlIHRoZSBzdHJpbmdzIHdpbGwgYmUgbG9hZGVkIGludG8NCgkJCSdzdHJpbmdzJyA9PiAkc21kX3Nib3hfc3RyLA0KCQkpOw0KCXJldHVybiAkcjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiMTVmZmUxZDFiN2M5MzBjYWI1NDEzOTc1NzkxNGRhY2YiO30=