File Manager
<?xml version="1.0" encoding="ISO-8859-1"?>
<gallerytpl>
<name>AE-Gallery</name>
<version>1.2.4-1</version>
<galleryversion>1.4.3</galleryversion>
<about>PHA+VGhpcyBHYWxsZXJ5dGVtcGxhdGUgdXNlcyB0aGUgQUQtR2FsbGVyeSBqUXVlcnkgcGx1Z2luIHZlcnNpb24gMS4yLjQgYnkgQW5kZXJzIEVrZGFobCAoPGEgaHJlZj0iaHR0cDovL2NvZmZlZXNjcmlwdGVyLmNvbS8iIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vY29mZmVlc2NyaXB0ZXIuY29tLzwvYT4pPC9wPg0KPHA+Rm9yIHRoZSBDTVNtcyBHYWxsZXJ5IE1vZHVsZSwgdGhlIG5hbWUgaXMgY2hhbmdlZCB0byBBRS1HYWxsZXJ5LCB0byBwcmV2ZW50IHRoZSBzY3JpcHQgYmVpbmcgYmxvY2tlZCBieSBBZC1ibG9jayBicm93c2VyIHBsdWdpbnMuIEFsbCBvY2N1cmVuY2VzIG9mICdhZCcgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5ICdhZScgKHRoZSBpbml0aWFscyBvZiB0aGUgYXV0aG9yKS48L3A+DQo8cD5BIGRlbW8gYW5kIGRvY3VtZW50YXRpb24gZm9yIGV4dHJhIG9wdGlvbnMgY2FuIGJlIGZvdW5kIGF0IDxhIGhyZWY9Imh0dHA6Ly9jb2ZmZWVzY3JpcHRlci5jb20vY29kZS9hZC1nYWxsZXJ5IiB0YXJnZXQ9Il9ibGFuayI+Y29mZmVlc2NyaXB0ZXIuY29tL2NvZGUvYWQtZ2FsbGVyeTwvYT48L3A+DQo8cD5GaWxlcyB0aGF0IGNvbWUgd2l0aCBBRS1HYWxsZXJ5IGFyZSBzdG9yZWQgaW4gbW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9hZS1nYWxsZXJ5LzwvcD4NCjxwPlRoZSBBRC1HYWxsZXJ5IHBsdWdpbiBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocDwvYT4pIGFuZCBHUEwgKDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwIiB0YXJnZXQ9Il9ibGFuayI+d3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocDwvYT4pIGxpY2Vuc2VzLjwvcD4=</about>
<thumbwidth></thumbwidth>
<thumbheight></thumbheight>
<resizemethod></resizemethod>
<maxnumber></maxnumber>
<sortitems>s+file</sortitems>
<tplcode>PGRpdiBjbGFzcz0iZ2FsbGVyeSI+DQp7aWYgIWVtcHR5KCRtb2R1bGVfbWVzc2FnZSl9PGg0PnskbW9kdWxlX21lc3NhZ2V8ZXNjYXBlfTwvaDQ+ey9pZn0NCntpZiAhZW1wdHkoJGdhbGxlcnl0aXRsZSl9PGgzPnskZ2FsbGVyeXRpdGxlfTwvaDM+ey9pZn0NCntpZiAhZW1wdHkoJGdhbGxlcnljb21tZW50KX08ZGl2IGNsYXNzPSJnYWxsZXJ5Y29tbWVudCI+eyRnYWxsZXJ5Y29tbWVudH08L2Rpdj57L2lmfQ0KPHA+eyRpbWFnZWNvdW50fTwvcD4NCjxkaXYgY2xhc3M9InBhZ2VuYXZpZ2F0aW9uIj4NCntpZiAkcGFnZXMgPiAxfQ0KPGRpdiBjbGFzcz0icHJldnBhZ2UiPnskcHJldnBhZ2V9PC9kaXY+DQo8ZGl2IGNsYXNzPSJuZXh0cGFnZSI+eyRuZXh0cGFnZX08L2Rpdj4NCnsvaWZ9DQp7aWYgISRoaWRlcGFyZW50bGluayAmJiAhZW1wdHkoJHBhcmVudGxpbmspfTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPnskcGFyZW50bGlua308L2Rpdj57L2lmfQ0Ke2lmICRwYWdlcyA+IDF9PGRpdiBjbGFzcz0icGFnZWxpbmtzIj57JHBhZ2VsaW5rc308L2Rpdj57L2lmfQ0KPC9kaXY+DQoNCnthc3NpZ24gdmFyPSdkaXJzJyB2YWx1ZT0nJ30NCnthc3NpZ24gdmFyPSdpbWdzJyB2YWx1ZT0nJ30NCntmb3JlYWNoIGZyb209JGltYWdlcyBpdGVtPWltYWdlfQ0Ke2lmICRpbWFnZS0+aXNkaXJ9DQp7YXNzaWduIHZhcj0nZGlycycgdmFsdWU9IiRkaXJzDQoJPGRpdiBjbGFzcz1cImltZ1wiPg0KCQk8YSBocmVmPVwiYCRpbWFnZS0+ZmlsZWBcIiB0aXRsZT1cImAkaW1hZ2UtPnRpdGxlYFwiPjxpbWcgc3JjPVwiYCRpbWFnZS0+dGh1bWJgXCIgYWx0PVwiYCRpbWFnZS0+dGl0bGVuYW1lYFwiIC8+PC9hPjxiciAvPg0KCQlgJGltYWdlLT50aXRsZW5hbWVgDQoJPC9kaXY+DQoifQ0Ke2Vsc2V9DQp7Y2FwdHVyZSBuYW1lPWltYWdlcyBhc3NpZ249aW1nc30NCnskaW1nc30NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxhIGhyZWY9InskaW1hZ2UtPmZpbGV9Ij4NCiAgICAgICAgICAgIDxpbWcgc3JjPSJ7JGltYWdlLT50aHVtYn0iIHRpdGxlPSJ7JGltYWdlLT50aXRsZX0iIGFsdD0ie2lmIGVtcHR5KCRpbWFnZS0+Y29tbWVudCl9eyRpbWFnZS0+dGl0bGVuYW1lfXtlbHNlfXskaW1hZ2UtPmNvbW1lbnR9ey9pZn0iIGxvbmdkZXNjPSJ7KiB5b3UgY2FuIHB1dCBhIHVybCBoZXJlIHVzaW5nIGEgY3VzdG9tIGZpZWxkLiBUaGlzIHdpbCBnZW5lcmF0ZSBhIGxpbmsgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYmlnIGltYWdlICp9IiBjbGFzcz0iaW1hZ2V7JGltYWdlLT5maWxlaWR9Ij4NCiAgICAgICAgICA8L2E+DQogICAgICAgIDwvbGk+DQp7L2NhcHR1cmV9DQp7L2lmfQ0Key9mb3JlYWNofQ0KDQoNCntpZiAhZW1wdHkoJGltZ3MpfQ0KPGRpdiBjbGFzcz0iYWUtZ2FsbGVyeSI+DQogIDxkaXYgY2xhc3M9ImFlLWltYWdlLXdyYXBwZXIiPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iYWUtY29udHJvbHMiPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iYWUtbmF2Ij4NCiAgICA8ZGl2IGNsYXNzPSJhZS10aHVtYnMiPg0KICAgICAgPHVsIGNsYXNzPSJhZS10aHVtYi1saXN0Ij4NCnskaW1nc30NCiAgICAgIDwvdWw+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQp7L2lmfQ0KDQp7JGRpcnN9DQo8ZGl2IGNsYXNzPSJnYWxsZXJ5Y2xlYXIiPiZuYnNwOzwvZGl2Pg0KPC9kaXY+DQoNCg==</tplcode>
<tplcss>LmdhbGxlcnkgLmltZyB7DQoJaGVpZ2h0OiAxMjBweDsNCgkvKndpZHRoOiAxMjBweDsgICBBZGp1c3QgYXMgeW91IHNlZSBmaXQgKi8NCglmbG9hdDogbGVmdDsNCgltYXJnaW46IDEwcHg7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouZ2FsbGVyeSAuaW1nIGEgew0KCWRpc3BsYXk6IGlubGluZS1ibG9jazsNCglib3JkZXI6IDJweCBzb2xpZCAjZGRkOw0KCXBhZGRpbmc6IDFweDsNCn0NCg0KLmdhbGxlcnkgLmltZyBhOmhvdmVyIHsNCglib3JkZXItY29sb3I6ICM5OTk7DQp9DQoNCi5nYWxsZXJ5IGltZyB7DQoJYm9yZGVyOiBub25lOw0KfQ0KDQouZ2FsbGVyeSAucGFnZW5hdmlnYXRpb24gew0KCWhlaWdodDogNTBweDsNCn0NCg0KLmdhbGxlcnkgLnByZXZwYWdlIGEsIC5nYWxsZXJ5IC5wcmV2cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7DQoJd2lkdGg6IDUwcHg7DQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0Ow0KCW1hcmdpbjogMDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3ByZXZpb3VzLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLm5leHRwYWdlIGEsIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7DQoJd2lkdGg6IDUwcHg7DQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0Ow0KCW1hcmdpbjogMCA2cHggMCAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvbmV4dC5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYXJlbnRsaW5rIGEgew0KCWRpc3BsYXk6IGJsb2NrOw0KCXdpZHRoOiA1MHB4Ow0KCWhlaWdodDogMzlweDsNCglmbG9hdDogbGVmdDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3VwcGFnZS5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiBhOmhvdmVyIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgZW0sIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyB7DQoJZmxvYXQ6IHJpZ2h0Ow0KCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgYSwgLmdhbGxlcnkgLnBhZ2VsaW5rcyBlbSB7DQoJbWFyZ2luLXRvcDogNnB4Ow0KCXBhZGRpbmc6IDAgNnB4Ow0KCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzY2NjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJZm9udDogYm9sZCAxMXB4IHZlcmRhbmE7IGNvbG9yOiAjNjY2Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgljb2xvcjogIzAwMDsNCn0NCg0KLmdhbGxlcnljbGVhciB7DQoJY2xlYXI6IGJvdGg7DQp9DQoNCi8qIEFFLUdBTExFUlkgKi8NCg0KLmFlLWdhbGxlcnksIC5hZS1nYWxsZXJ5ICogew0KICBtYXJnaW46IDA7DQogIHBhZGRpbmc6IDA7DQp9DQouYWUtZ2FsbGVyeSB7DQogIHdpZHRoOiA1MzNweDsgIC8qIHNldCB0aGUgd2lkdGggb2YgdGhlIHRodW1icm93ICovDQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQogIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIHsNCiAgICB3aWR0aDogMTAwJTsgLyogc2V0IHRoZSBtYXhpbXVtIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGJpZyBpbWFnZS4gQmlnZ2VyIGltYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3duIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHNjcmlwdCAqLw0KICAgIGhlaWdodDogNDAwcHg7DQogICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBib3JkZXI6IDJweCBzb2xpZCAjZGRkOw0KICB9DQogICAgLmFlLWdhbGxlcnkgLmFlLWltYWdlLXdyYXBwZXIgLmFlLWxvYWRlciB7DQogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICB6LWluZGV4OiAxMDsNCiAgICAgIHRvcDogNDglOw0KICAgICAgbGVmdDogNDglOw0KICAgICAgYm9yZGVyOiAxcHggc29saWQgI0NDQzsNCiAgICB9DQogICAgLmFlLWdhbGxlcnkgLmFlLWltYWdlLXdyYXBwZXIgLmFlLW5leHQgew0KICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgcmlnaHQ6IDA7DQogICAgICB0b3A6IDA7DQogICAgICB3aWR0aDogMjUlOw0KICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICB6LWluZGV4OiAxMDA7DQogICAgfQ0KICAgIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIC5hZS1wcmV2IHsNCiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgIGxlZnQ6IDA7DQogICAgICB0b3A6IDA7DQogICAgICB3aWR0aDogMjUlOw0KICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICB6LWluZGV4OiAxMDA7DQogICAgfQ0KICAgIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIC5hZS1wcmV2LCAuYWUtZ2FsbGVyeSAuYWUtaW1hZ2Utd3JhcHBlciAuYWUtbmV4dCB7DQogICAgICAvKiBPciBlbHNlIElFIHdpbGwgaGlkZSBpdCAqLw0KICAgICAgYmFja2dyb3VuZDogdXJsKG5vbi1leGlzdGluZy5qcGcpXDkNCiAgICB9DQogICAgICAuYWUtZ2FsbGVyeSAuYWUtaW1hZ2Utd3JhcHBlciAuYWUtcHJldiAuYWUtcHJldi1pbWFnZSwgLmFlLWdhbGxlcnkgLmFlLWltYWdlLXdyYXBwZXIgLmFlLW5leHQgLmFlLW5leHQtaW1hZ2Ugew0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vYWUtZ2FsbGVyeS9hZV9wcmV2LnBuZyk7DQogICAgICAgIHdpZHRoOiAzMHB4Ow0KICAgICAgICBoZWlnaHQ6IDMwcHg7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgdG9wOiA0NyU7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHotaW5kZXg6IDEwMTsNCiAgICAgIH0NCiAgICAgIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIC5hZS1uZXh0IC5hZS1uZXh0LWltYWdlIHsNCiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2FlLWdhbGxlcnkvYWVfbmV4dC5wbmcpOw0KICAgICAgICB3aWR0aDogMzBweDsNCiAgICAgICAgaGVpZ2h0OiAzMHB4Ow0KICAgICAgICByaWdodDogMDsNCiAgICAgICAgbGVmdDogYXV0bzsNCiAgICAgIH0NCiAgICAuYWUtZ2FsbGVyeSAuYWUtaW1hZ2Utd3JhcHBlciAuYWUtaW1hZ2Ugew0KICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgIHRvcDogMDsNCiAgICAgIGxlZnQ6IDA7DQogICAgICB6LWluZGV4OiA5Ow0KICAgIH0NCiAgICAgICAuYWQtZ2FsbGVyeSAuYWQtaW1hZ2Utd3JhcHBlciAuYWQtaW1hZ2UgYSBpbWcgew0KICAgICAgICBib3JkZXI6IDA7DQogICAgICB9DQogICAgIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIC5hZS1pbWFnZSAuYWUtaW1hZ2UtZGVzY3JpcHRpb24gew0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgIGJvdHRvbTogMHB4Ow0KICAgICAgICBsZWZ0OiAwcHg7DQogICAgICAgIHBhZGRpbmc6IDdweDsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIHotaW5kZXg6IDI7DQogICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9hZS1nYWxsZXJ5L29wYTc1LnBuZyk7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgfQ0KICAgICAgKiBodG1sIC5hZS1nYWxsZXJ5IC5hZS1pbWFnZS13cmFwcGVyIC5hZS1pbWFnZSAuYWUtaW1hZ2UtZGVzY3JpcHRpb24gew0KICAgICAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgICAgICBmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIgKGVuYWJsZWQ9dHJ1ZSwgc2l6aW5nTWV0aG9kPXNjYWxlLCBzcmM9J21vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvYWUtZ2FsbGVyeS9vcGE3NS5wbmcnKTsNCiAgICAgIH0NCiAgICAgICAgLmFlLWdhbGxlcnkgLmFlLWltYWdlLXdyYXBwZXIgLmFlLWltYWdlIC5hZS1pbWFnZS1kZXNjcmlwdGlvbiAuYWUtZGVzY3JpcHRpb24tdGl0bGUgew0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICB9DQogIC5hZS1nYWxsZXJ5IC5hZS1jb250cm9scyB7DQogICAgaGVpZ2h0OiAyMHB4Ow0KICB9DQogICAgLmFlLWdhbGxlcnkgLmFlLWluZm8gew0KICAgICAgZmxvYXQ6IGxlZnQ7DQogICAgfQ0KICAgIC5hZS1nYWxsZXJ5IC5hZS1zbGlkZXNob3ctY29udHJvbHMgew0KICAgICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIH0NCiAgICAgIC5hZS1nYWxsZXJ5IC5hZS1zbGlkZXNob3ctY29udHJvbHMgLmFlLXNsaWRlc2hvdy1zdGFydCwgLmFlLWdhbGxlcnkgLmFlLXNsaWRlc2hvdy1jb250cm9scyAuYWUtc2xpZGVzaG93LXN0b3Agew0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHRleHQtaW5kZW50OiAtNTAwcHg7DQogICAgICAgIG92ZXJmbG93OmhpZGRlbjsNCiAgICAgICAgd2lkdGg6IDE0cHg7DQogICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9hZS1nYWxsZXJ5L2FlX3Njcm9sbF9mb3J3YXJkLnBuZykgMHB4IC0zcHggbm8tcmVwZWF0Ow0KICAgICAgfQ0KICAgICAgLmFlLWdhbGxlcnkgLmFlLXNsaWRlc2hvdy1jb250cm9scyAuYWUtc2xpZGVzaG93LXN0b3Agew0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vYWUtZ2FsbGVyeS9hZV9zdG9wLnBuZykgMHB4IC0zcHggbm8tcmVwZWF0Ow0KICAgICAgfQ0KICAgICAgLmFlLWdhbGxlcnkgLmFlLXNsaWRlc2hvdy1jb250cm9scyAuYWUtc2xpZGVzaG93LWNvdW50ZG93biB7DQogICAgICAgIHBhZGRpbmctbGVmdDogNXB4Ow0KICAgICAgICBmb250LXNpemU6IDAuOWVtOw0KICAgICAgfQ0KICAgIC5hZS1nYWxsZXJ5IC5hZS1zbGlkZXNob3ctcnVubmluZyAuYWUtc2xpZGVzaG93LXN0YXJ0IHsNCiAgICAgIGN1cnNvcjogZGVmYXVsdDsNCiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCiAgICB9DQogIC5hZS1nYWxsZXJ5IC5hZS1uYXYgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgfQ0KICAgIC5hZS1nYWxsZXJ5IC5hZS1mb3J3YXJkLCAuYWUtZ2FsbGVyeSAuYWUtYmFjayB7DQogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICB0b3A6IDA7DQogICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICB6LWluZGV4OiAxMDsNCiAgICB9DQogICAgLyogSUUgNiBkb2Vzbid0IGxpa2UgaGVpZ2h0OiAxMDAlICovDQogICAgKiBodG1sIC5hZS1nYWxsZXJ5IC5hZS1mb3J3YXJkLCAuYWUtZ2FsbGVyeSAuYWUtYmFjayB7DQogICAgICBoZWlnaHQ6IDEwMHB4Ow0KICAgIH0NCiAgICAuYWUtZ2FsbGVyeSAuYWUtYmFjayB7DQogICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICBsZWZ0OiAtMjBweDsNCiAgICAgIHdpZHRoOiAxM3B4Ow0KICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vYWUtZ2FsbGVyeS9hZV9zY3JvbGxfYmFjay5wbmcpIDBweCAyMnB4IG5vLXJlcGVhdDsNCiAgICB9DQogICAgLmFlLWdhbGxlcnkgLmFlLWZvcndhcmQgew0KICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICByaWdodDogLTIwcHg7DQogICAgICB3aWR0aDogMTNweDsNCiAgICAgIGJhY2tncm91bmQ6IHVybCguLi9hZS1nYWxsZXJ5L2FlX3Njcm9sbF9mb3J3YXJkLnBuZykgMHB4IDIycHggbm8tcmVwZWF0Ow0KICAgIH0NCiAgICAuYWUtZ2FsbGVyeSAuYWUtbmF2IC5hZS10aHVtYnMgew0KICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgIHdpZHRoOiAxMDAlOw0KcGFkZGluZzogM3B4IDFweDsNCmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICAgfQ0KICAgICAgICAuYWUtZ2FsbGVyeSAuYWUtdGh1bWJzIGxpIHsNCiAgICAgICAgICBmbG9hdDogbGVmdDsNCiAgICAgICAgICBwYWRkaW5nOjAgNXB4IDAgMCAhaW1wb3J0YW50Ow0KICAgICAgICAgIG1hcmdpbjowIDAgMCAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICAgIC5hZS1nYWxsZXJ5IC5hZS10aHVtYnMgbGkgYSB7DQogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICB9DQogICAgICAgICAgICAuYWUtZ2FsbGVyeSAuYWUtdGh1bWJzIGxpIGEgaW1nIHsNCiAgICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgI0NDQzsNCiAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAuYWUtZ2FsbGVyeSAuYWUtdGh1bWJzIGxpIGEuYWUtYWN0aXZlIGltZyB7DQogICAgICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICM2MTYxNjE7DQogICAgICAgICAgICB9DQovKiBDYW4ndCBkbyBkaXNwbGF5IG5vbmUsIHNpbmNlIE9wZXJhIHdvbid0IGxvYWQgdGhlIGltYWdlcyB0aGVuICovDQouYWUtcHJlbG9hZHMgew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIGxlZnQ6IC05MDAwMHB4Ow0KICB0b3A6IC05MDAwMHB4Ow0KfQ==</tplcss>
<tpljs>PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjQuNC9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvYWUtZ2FsbGVyeS9qcXVlcnkuYWUtZ2FsbGVyeS5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgJChmdW5jdGlvbigpIHsNCiAgICB2YXIgZ2FsbGVyaWVzID0gJCgnLmFlLWdhbGxlcnknKS5hZUdhbGxlcnkoew0KICAgICAgbG9hZGVyX2ltYWdlOiAnbW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9hZS1nYWxsZXJ5L2xvYWRlci5naWYnLA0KICAgICAgc2xpZGVzaG93OiB7DQogICAgICAgIGF1dG9zdGFydDogZmFsc2UsDQogICAgICAgIHNwZWVkOiA0MDAwLA0KICAgICAgICBzdGFydF9sYWJlbDogJ1N0YXJ0JywNCiAgICAgICAgc3RvcF9sYWJlbDogJ1N0b3AnLA0KICAgICAgICBzdG9wX29uX3Njcm9sbDogZmFsc2UNCiAgICAgIH0NCiAgICB9KTsNCiAgfSk7DQo8L3NjcmlwdD4NCg==</tpljs>
<file>
<filename>/ae_next.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQVJREFUeNpi+P//vz0Qn/xPZ8AIxM8ZGBgkGOgMQBb/ZxgAwMQwQGDU4sFl8YULFxhqamrANF0tXrNmDcOOHTsYUlJSGBYsWEC/7GRiYoLCDwkJYYiLi2OQkpKibxyDQsDPzw9MD0ji6ujoYOjv72f4+fMnfYIaHZiamoKD39nZmb4Ww0BCQgJDTk4O/fMxKMXv2rVrYAqQf//+0d9iUFB7eHgQpZaFGhYaGRmBE5ebmxvReii2ODIykiEzM5OBi4uLJH0UWVxRUQH2KTmALItBlkVHRzPIysrStuRCjrusrCywTymxlGgfw4ITRIMS0mhjb9TiQW/x04GyOAWIX9DbYoAAAwDj9cuFNA9hSgAAAABJRU5ErkJggg==]]></data>
</file>
<file>
<filename>/ae_prev.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQ5JREFUeNrslj0KgzAUx1+Lk3fwDp5CPIAHcHZ1UfAAHkB0DRZxEdwFT+AHnsKxo+BQrckgdGmTxhoo+UN4JCT8eC/vveSyboJzdd8GuggAE11BkCRYgqk1DAMEQUAsjZQjoAghiKJon+u6/vEMVx2P4whpmkJRFC/rbdv+zmMMC8Pw6ygxg+d5hjiOIcsyruthAtd1TTxtmoY7L6jBOHlwEp1aTlVVHQqlBi/LIqaBmKYJtm0fCmaqYxxynFx937/dR1PHzA1kmiZIkgTyPOcCM/dqVVXBdV3wPE/MI2FZFpRlSezpr5OmacRzx3H2NcMw6A6vB6nrutX3fWJpJH+ZEvx/YEUA87GN21OAAQDTEd3EBGScywAAAABJRU5ErkJggg==]]></data>
</file>
<file>
<filename>/ae_scroll_back.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAA4AAAAUCAYAAAC9BQwsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJJJREFUeNpi/P//PwM5gImBTEC2RhZiFJmYmJgBqUwgnn7mzJlTRGkEasoBUpORhE4RdCpQUxeapgS8TkVyWgLRfsTiNMKhisVphDUCNYGcVUq/BACMnwVAqo8sG4Gai4FUAVlOBWqeCKTMgXgBPo2M+HIHMMB6gVQRmsGMBAMHi9MXEB2qaE6fTpRTB1dGBggwAOOjL/K+XJ5NAAAAAElFTkSuQmCC]]></data>
</file>
<file>
<filename>/ae_scroll_forward.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAA4AAAAUCAYAAAC9BQwsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIxJREFUeNpi/P//PwM5gImBTEC2RhYYw8TExAxIZQLx9DNnzpwixUaQpgQgPgk0JIcUjQlI7MlAzV34NDLCQhWoEFvwLsDldEKBg9PpxIYqhtNJiY5SoOYEuiaAPmAgLcBIAARAAVDTRKwpBwfAGR0sBJxWTIwfF6A5rZioRA5yEowmJpEzDp2MDBBgAObbNTlhgwa0AAAAAElFTkSuQmCC]]></data>
</file>
<file>
<filename>/ae_stop.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAA4AAAAUCAYAAAC9BQwsAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABTSURBVHjaYvz//z8DOYCJgUxAtkYWGMPExMQMSGUSoWf6mTNnTrEgCYA0JRBp4SlkpxKrKWFgAmdU46DVuIBIPQtQEjko8RKpEayOcehkZIAAAwC0rw/o37M4vAAAAABJRU5ErkJggg==]]></data>
</file>
<file>
<filename>/jquery.ae-gallery.js</filename>
<isdir>0</isdir>
<data><![CDATA[LyoqDQogKiBDb3B5cmlnaHQgKGMpIDIwMTAgQW5kZXJzIEVrZGFobCAoaHR0cDovL2NvZmZlZXNjcmlwdGVyLmNvbS8pDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQ0KICogYW5kIEdQTCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5waHApIGxpY2Vuc2VzLg0KICoNCiAqIFZlcnNpb246IDEuMi40DQogKg0KICogRGVtbyBhbmQgZG9jdW1lbnRhdGlvbjogaHR0cDovL2NvZmZlZXNjcmlwdGVyLmNvbS9jb2RlL2FkLWdhbGxlcnkvDQogKi8NCihmdW5jdGlvbigkKSB7DQogICQuZm4uYWVHYWxsZXJ5ID0gZnVuY3Rpb24ob3B0aW9ucykgew0KICAgIHZhciBkZWZhdWx0cyA9IHsgbG9hZGVyX2ltYWdlOiAnbG9hZGVyLmdpZicsDQogICAgICAgICAgICAgICAgICAgICBzdGFydF9hdF9pbmRleDogMCwNCiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uX3dyYXBwZXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgdGh1bWJfb3BhY2l0eTogMC43LA0KICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZV9maXJzdF9pbWFnZTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25fc3BlZWQ6IDQwMCwNCiAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X25leHRfYW5kX3ByZXY6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2JhY2tfYW5kX2ZvcndhcmQ6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICBzY3JvbGxfanVtcDogMCwgLy8gSWYgMCwgaXQganVtcHMgdGhlIHdpZHRoIG9mIHRoZSBjb250YWluZXINCiAgICAgICAgICAgICAgICAgICAgIHNsaWRlc2hvdzogew0KICAgICAgICAgICAgICAgICAgICAgICBlbmFibGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgIGF1dG9zdGFydDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgIHNwZWVkOiA1MDAwLA0KICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9sYWJlbDogJ1N0YXJ0JywNCiAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9sYWJlbDogJ1N0b3AnLA0KICAgICAgICAgICAgICAgICAgICAgICBzdG9wX29uX3Njcm9sbDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgY291bnRkb3duX3ByZWZpeDogJygnLA0KICAgICAgICAgICAgICAgICAgICAgICBjb3VudGRvd25fc3VmaXg6ICcpJywNCiAgICAgICAgICAgICAgICAgICAgICAgb25TdGFydDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgIG9uU3RvcDogZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6ICdzbGlkZS1ob3JpJywgLy8gb3IgJ3NsaWRlLXZlcnQnLCAnZmFkZScsIG9yICdyZXNpemUnLCAnbm9uZScNCiAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9rZXlib2FyZF9tb3ZlOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgY3ljbGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgaW5pdDogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgIGFmdGVySW1hZ2VWaXNpYmxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW1hZ2VWaXNpYmxlOiBmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgfQ0KICAgIH07DQogICAgdmFyIHNldHRpbmdzID0gJC5leHRlbmQoZmFsc2UsIGRlZmF1bHRzLCBvcHRpb25zKTsNCiAgICBpZihvcHRpb25zICYmIG9wdGlvbnMuc2xpZGVzaG93KSB7DQogICAgICBzZXR0aW5ncy5zbGlkZXNob3cgPSAkLmV4dGVuZChmYWxzZSwgZGVmYXVsdHMuc2xpZGVzaG93LCBvcHRpb25zLnNsaWRlc2hvdyk7DQogICAgfTsNCiAgICBpZighc2V0dGluZ3Muc2xpZGVzaG93LmVuYWJsZSkgew0KICAgICAgc2V0dGluZ3Muc2xpZGVzaG93LmF1dG9zdGFydCA9IGZhbHNlOw0KICAgIH07DQogICAgdmFyIGdhbGxlcmllcyA9IFtdOw0KICAgICQodGhpcykuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgIHZhciBnYWxsZXJ5ID0gbmV3IEFlR2FsbGVyeSh0aGlzLCBzZXR0aW5ncyk7DQogICAgICBnYWxsZXJpZXNbZ2FsbGVyaWVzLmxlbmd0aF0gPSBnYWxsZXJ5Ow0KICAgIH0pOw0KICAgIC8vIFNvcnJ5LCBicmVha2luZyB0aGUgalF1ZXJ5IGNoYWluIGJlY2F1c2UgdGhlIGdhbGxlcnkgaW5zdGFuY2VzDQogICAgLy8gYXJlIHJldHVybmVkIHNvIHlvdSBjYW4gZmlkZGxlIHdpdGggdGhlbQ0KICAgIHJldHVybiBnYWxsZXJpZXM7DQogIH07DQoNCiAgZnVuY3Rpb24gVmVydGljYWxTbGlkZUFuaW1hdGlvbihpbWdfY29udGFpbmVyLCBkaXJlY3Rpb24sIGRlc2MpIHsNCiAgICB2YXIgY3VycmVudF90b3AgPSBwYXJzZUludChpbWdfY29udGFpbmVyLmNzcygndG9wJyksIDEwKTsNCiAgICBpZihkaXJlY3Rpb24gPT0gJ2xlZnQnKSB7DQogICAgICB2YXIgb2xkX2ltYWdlX3RvcCA9ICctJysgdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCArJ3B4JzsNCiAgICAgIGltZ19jb250YWluZXIuY3NzKCd0b3AnLCB0aGlzLmltYWdlX3dyYXBwZXJfaGVpZ2h0ICsncHgnKTsNCiAgICB9IGVsc2Ugew0KICAgICAgdmFyIG9sZF9pbWFnZV90b3AgPSB0aGlzLmltYWdlX3dyYXBwZXJfaGVpZ2h0ICsncHgnOw0KICAgICAgaW1nX2NvbnRhaW5lci5jc3MoJ3RvcCcsICctJysgdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCArJ3B4Jyk7DQogICAgfTsNCiAgICBpZihkZXNjKSB7DQogICAgICBkZXNjLmNzcygnYm90dG9tJywgJy0nKyBkZXNjWzBdLm9mZnNldEhlaWdodCArJ3B4Jyk7DQogICAgICBkZXNjLmFuaW1hdGUoe2JvdHRvbTogMH0sIHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uX3NwZWVkICogMik7DQogICAgfTsNCiAgICBpZih0aGlzLmN1cnJlbnRfZGVzY3JpcHRpb24pIHsNCiAgICAgIHRoaXMuY3VycmVudF9kZXNjcmlwdGlvbi5hbmltYXRlKHtib3R0b206ICctJysgdGhpcy5jdXJyZW50X2Rlc2NyaXB0aW9uWzBdLm9mZnNldEhlaWdodCArJ3B4J30sIHRoaXMuc2V0dGluZ3MuYW5pbWF0aW9uX3NwZWVkICogMik7DQogICAgfTsNCiAgICByZXR1cm4ge29sZF9pbWFnZToge3RvcDogb2xkX2ltYWdlX3RvcH0sDQogICAgICAgICAgICBuZXdfaW1hZ2U6IHt0b3A6IGN1cnJlbnRfdG9wfX07DQogIH07DQoNCiAgZnVuY3Rpb24gSG9yaXpvbnRhbFNsaWRlQW5pbWF0aW9uKGltZ19jb250YWluZXIsIGRpcmVjdGlvbiwgZGVzYykgew0KICAgIHZhciBjdXJyZW50X2xlZnQgPSBwYXJzZUludChpbWdfY29udGFpbmVyLmNzcygnbGVmdCcpLCAxMCk7DQogICAgaWYoZGlyZWN0aW9uID09ICdsZWZ0Jykgew0KICAgICAgdmFyIG9sZF9pbWFnZV9sZWZ0ID0gJy0nKyB0aGlzLmltYWdlX3dyYXBwZXJfd2lkdGggKydweCc7DQogICAgICBpbWdfY29udGFpbmVyLmNzcygnbGVmdCcsdGhpcy5pbWFnZV93cmFwcGVyX3dpZHRoICsncHgnKTsNCiAgICB9IGVsc2Ugew0KICAgICAgdmFyIG9sZF9pbWFnZV9sZWZ0ID0gdGhpcy5pbWFnZV93cmFwcGVyX3dpZHRoICsncHgnOw0KICAgICAgaW1nX2NvbnRhaW5lci5jc3MoJ2xlZnQnLCctJysgdGhpcy5pbWFnZV93cmFwcGVyX3dpZHRoICsncHgnKTsNCiAgICB9Ow0KICAgIGlmKGRlc2MpIHsNCiAgICAgIGRlc2MuY3NzKCdib3R0b20nLCAnLScrIGRlc2NbMF0ub2Zmc2V0SGVpZ2h0ICsncHgnKTsNCiAgICAgIGRlc2MuYW5pbWF0ZSh7Ym90dG9tOiAwfSwgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQgKiAyKTsNCiAgICB9Ow0KICAgIGlmKHRoaXMuY3VycmVudF9kZXNjcmlwdGlvbikgew0KICAgICAgdGhpcy5jdXJyZW50X2Rlc2NyaXB0aW9uLmFuaW1hdGUoe2JvdHRvbTogJy0nKyB0aGlzLmN1cnJlbnRfZGVzY3JpcHRpb25bMF0ub2Zmc2V0SGVpZ2h0ICsncHgnfSwgdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQgKiAyKTsNCiAgICB9Ow0KICAgIHJldHVybiB7b2xkX2ltYWdlOiB7bGVmdDogb2xkX2ltYWdlX2xlZnR9LA0KICAgICAgICAgICAgbmV3X2ltYWdlOiB7bGVmdDogY3VycmVudF9sZWZ0fX07DQogIH07DQoNCiAgZnVuY3Rpb24gUmVzaXplQW5pbWF0aW9uKGltZ19jb250YWluZXIsIGRpcmVjdGlvbiwgZGVzYykgew0KICAgIHZhciBpbWFnZV93aWR0aCA9IGltZ19jb250YWluZXIud2lkdGgoKTsNCiAgICB2YXIgaW1hZ2VfaGVpZ2h0ID0gaW1nX2NvbnRhaW5lci5oZWlnaHQoKTsNCiAgICB2YXIgY3VycmVudF9sZWZ0ID0gcGFyc2VJbnQoaW1nX2NvbnRhaW5lci5jc3MoJ2xlZnQnKSwgMTApOw0KICAgIHZhciBjdXJyZW50X3RvcCA9IHBhcnNlSW50KGltZ19jb250YWluZXIuY3NzKCd0b3AnKSwgMTApOw0KICAgIGltZ19jb250YWluZXIuY3NzKHt3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IHRoaXMuaW1hZ2Vfd3JhcHBlcl9oZWlnaHQgLyAyLCBsZWZ0OiB0aGlzLmltYWdlX3dyYXBwZXJfd2lkdGggLyAyfSk7DQogICAgcmV0dXJuIHtvbGRfaW1hZ2U6IHt3aWR0aDogMCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCAvIDIsDQogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLmltYWdlX3dyYXBwZXJfd2lkdGggLyAyfSwNCiAgICAgICAgICAgIG5ld19pbWFnZToge3dpZHRoOiBpbWFnZV93aWR0aCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaW1hZ2VfaGVpZ2h0LA0KICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjdXJyZW50X3RvcCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGN1cnJlbnRfbGVmdH19Ow0KICB9Ow0KDQogIGZ1bmN0aW9uIEZhZGVBbmltYXRpb24oaW1nX2NvbnRhaW5lciwgZGlyZWN0aW9uLCBkZXNjKSB7DQogICAgaW1nX2NvbnRhaW5lci5jc3MoJ29wYWNpdHknLCAwKTsNCiAgICByZXR1cm4ge29sZF9pbWFnZToge29wYWNpdHk6IDB9LA0KICAgICAgICAgICAgbmV3X2ltYWdlOiB7b3BhY2l0eTogMX19Ow0KICB9Ow0KDQogIC8vIFNvcnQgb2YgYSBoYWNrLCB3aWxsIGNsZWFuIHRoaXMgdXAuLi4gZXZlbnR1YWxseQ0KICBmdW5jdGlvbiBOb25lQW5pbWF0aW9uKGltZ19jb250YWluZXIsIGRpcmVjdGlvbiwgZGVzYykgew0KICAgIGltZ19jb250YWluZXIuY3NzKCdvcGFjaXR5JywgMCk7DQogICAgcmV0dXJuIHtvbGRfaW1hZ2U6IHtvcGFjaXR5OiAwfSwNCiAgICAgICAgICAgIG5ld19pbWFnZToge29wYWNpdHk6IDF9LA0KICAgICAgICAgICAgc3BlZWQ6IDB9Ow0KICB9Ow0KDQogIGZ1bmN0aW9uIEFlR2FsbGVyeSh3cmFwcGVyLCBzZXR0aW5ncykgew0KICAgIHRoaXMuaW5pdCh3cmFwcGVyLCBzZXR0aW5ncyk7DQogIH07DQogIEFlR2FsbGVyeS5wcm90b3R5cGUgPSB7DQogICAgLy8gRWxlbWVudHMNCiAgICB3cmFwcGVyOiBmYWxzZSwNCiAgICBpbWFnZV93cmFwcGVyOiBmYWxzZSwNCiAgICBnYWxsZXJ5X2luZm86IGZhbHNlLA0KICAgIG5hdjogZmFsc2UsDQogICAgbG9hZGVyOiBmYWxzZSwNCiAgICBwcmVsb2FkczogZmFsc2UsDQogICAgdGh1bWJzX3dyYXBwZXI6IGZhbHNlLA0KICAgIHNjcm9sbF9iYWNrOiBmYWxzZSwNCiAgICBzY3JvbGxfZm9yd2FyZDogZmFsc2UsDQogICAgbmV4dF9saW5rOiBmYWxzZSwNCiAgICBwcmV2X2xpbms6IGZhbHNlLA0KDQogICAgc2xpZGVzaG93OiBmYWxzZSwNCiAgICBpbWFnZV93cmFwcGVyX3dpZHRoOiAwLA0KICAgIGltYWdlX3dyYXBwZXJfaGVpZ2h0OiAwLA0KICAgIGN1cnJlbnRfaW5kZXg6IDAsDQogICAgY3VycmVudF9pbWFnZTogZmFsc2UsDQogICAgY3VycmVudF9kZXNjcmlwdGlvbjogZmFsc2UsDQogICAgbmF2X2Rpc3BsYXlfd2lkdGg6IDAsDQogICAgc2V0dGluZ3M6IGZhbHNlLA0KICAgIGltYWdlczogZmFsc2UsDQogICAgaW5fdHJhbnNpdGlvbjogZmFsc2UsDQogICAgYW5pbWF0aW9uczogZmFsc2UsDQogICAgaW5pdDogZnVuY3Rpb24od3JhcHBlciwgc2V0dGluZ3MpIHsNCiAgICAgIHZhciBjb250ZXh0ID0gdGhpczsNCiAgICAgIHRoaXMud3JhcHBlciA9ICQod3JhcHBlcik7DQogICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7DQogICAgICB0aGlzLnNldHVwRWxlbWVudHMoKTsNCiAgICAgIHRoaXMuc2V0dXBBbmltYXRpb25zKCk7DQogICAgICBpZih0aGlzLnNldHRpbmdzLndpZHRoKSB7DQogICAgICAgIHRoaXMuaW1hZ2Vfd3JhcHBlcl93aWR0aCA9IHRoaXMuc2V0dGluZ3Mud2lkdGg7DQogICAgICAgIHRoaXMuaW1hZ2Vfd3JhcHBlci53aWR0aCh0aGlzLnNldHRpbmdzLndpZHRoKTsNCiAgICAgICAgdGhpcy53cmFwcGVyLndpZHRoKHRoaXMuc2V0dGluZ3Mud2lkdGgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5pbWFnZV93cmFwcGVyX3dpZHRoID0gdGhpcy5pbWFnZV93cmFwcGVyLndpZHRoKCk7DQogICAgICB9Ow0KICAgICAgaWYodGhpcy5zZXR0aW5ncy5oZWlnaHQpIHsNCiAgICAgICAgdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCA9IHRoaXMuc2V0dGluZ3MuaGVpZ2h0Ow0KICAgICAgICB0aGlzLmltYWdlX3dyYXBwZXIuaGVpZ2h0KHRoaXMuc2V0dGluZ3MuaGVpZ2h0KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuaW1hZ2Vfd3JhcHBlcl9oZWlnaHQgPSB0aGlzLmltYWdlX3dyYXBwZXIuaGVpZ2h0KCk7DQogICAgICB9Ow0KICAgICAgdGhpcy5uYXZfZGlzcGxheV93aWR0aCA9IHRoaXMubmF2LndpZHRoKCk7DQogICAgICB0aGlzLmN1cnJlbnRfaW5kZXggPSAwOw0KICAgICAgdGhpcy5jdXJyZW50X2ltYWdlID0gZmFsc2U7DQogICAgICB0aGlzLmN1cnJlbnRfZGVzY3JpcHRpb24gPSBmYWxzZTsNCiAgICAgIHRoaXMuaW5fdHJhbnNpdGlvbiA9IGZhbHNlOw0KICAgICAgdGhpcy5maW5kSW1hZ2VzKCk7DQogICAgICBpZih0aGlzLnNldHRpbmdzLmRpc3BsYXlfbmV4dF9hbmRfcHJldikgew0KICAgICAgICB0aGlzLmluaXROZXh0QW5kUHJldigpOw0KICAgICAgfTsNCiAgICAgIC8vIFRoZSBzbGlkZXNob3cgbmVlZHMgYSBjYWxsYmFjayB0byB0cmlnZ2VyIHRoZSBuZXh0IGltYWdlIHRvIGJlIHNob3duDQogICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBnaXZlIGl0IGFjY2VzcyB0byB0aGUgd2hvbGUgZ2FsbGVyeSBpbnN0YW5jZQ0KICAgICAgdmFyIG5leHRpbWFnZV9jYWxsYmFjayA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7DQogICAgICAgIHJldHVybiBjb250ZXh0Lm5leHRJbWFnZShjYWxsYmFjayk7DQogICAgICB9Ow0KICAgICAgdGhpcy5zbGlkZXNob3cgPSBuZXcgQWVHYWxsZXJ5U2xpZGVzaG93KG5leHRpbWFnZV9jYWxsYmFjaywgdGhpcy5zZXR0aW5ncy5zbGlkZXNob3cpOw0KICAgICAgdGhpcy5jb250cm9scy5hcHBlbmQodGhpcy5zbGlkZXNob3cuY3JlYXRlKCkpOw0KICAgICAgaWYodGhpcy5zZXR0aW5ncy5zbGlkZXNob3cuZW5hYmxlKSB7DQogICAgICAgIHRoaXMuc2xpZGVzaG93LmVuYWJsZSgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5zbGlkZXNob3cuZGlzYWJsZSgpOw0KICAgICAgfTsNCiAgICAgIGlmKHRoaXMuc2V0dGluZ3MuZGlzcGxheV9iYWNrX2FuZF9mb3J3YXJkKSB7DQogICAgICAgIHRoaXMuaW5pdEJhY2tBbmRGb3J3YXJkKCk7DQogICAgICB9Ow0KICAgICAgaWYodGhpcy5zZXR0aW5ncy5lbmFibGVfa2V5Ym9hcmRfbW92ZSkgew0KICAgICAgICB0aGlzLmluaXRLZXlFdmVudHMoKTsNCiAgICAgIH07DQogICAgICB2YXIgc3RhcnRfYXQgPSBwYXJzZUludCh0aGlzLnNldHRpbmdzLnN0YXJ0X2F0X2luZGV4LCAxMCk7DQogICAgICBpZih3aW5kb3cubG9jYXRpb24uaGFzaCAmJiB3aW5kb3cubG9jYXRpb24uaGFzaC5pbmRleE9mKCcjYWUtaW1hZ2UnKSA9PT0gMCkgew0KICAgICAgICBzdGFydF9hdCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoL1teMC05XSsvZywgJycpOw0KICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbnVtYmVyDQogICAgICAgIGlmKChzdGFydF9hdCAqIDEpICE9IHN0YXJ0X2F0KSB7DQogICAgICAgICAgc3RhcnRfYXQgPSB0aGlzLnNldHRpbmdzLnN0YXJ0X2F0X2luZGV4Ow0KICAgICAgICB9Ow0KICAgICAgfTsNCg0KICAgICAgdGhpcy5sb2FkaW5nKHRydWUpOw0KICAgICAgdGhpcy5zaG93SW1hZ2Uoc3RhcnRfYXQsDQogICAgICAgIGZ1bmN0aW9uKCkgew0KICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3RhcnQgdGhlIHNsaWRlc2hvdyBiZWZvcmUgdGhlIGltYWdlIGhhcyBiZWVuDQogICAgICAgICAgLy8gZGlzcGxheWVkDQogICAgICAgICAgaWYoY29udGV4dC5zZXR0aW5ncy5zbGlkZXNob3cuYXV0b3N0YXJ0KSB7DQogICAgICAgICAgICBjb250ZXh0LnByZWxvYWRJbWFnZShzdGFydF9hdCArIDEpOw0KICAgICAgICAgICAgY29udGV4dC5zbGlkZXNob3cuc3RhcnQoKTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICApOw0KICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5zZXR0aW5ncy5jYWxsYmFja3MuaW5pdCk7DQogICAgfSwNCiAgICBzZXR1cEFuaW1hdGlvbnM6IGZ1bmN0aW9uKCkgew0KICAgICAgdGhpcy5hbmltYXRpb25zID0gew0KICAgICAgICAnc2xpZGUtdmVydCc6IFZlcnRpY2FsU2xpZGVBbmltYXRpb24sDQogICAgICAgICdzbGlkZS1ob3JpJzogSG9yaXpvbnRhbFNsaWRlQW5pbWF0aW9uLA0KICAgICAgICAncmVzaXplJzogUmVzaXplQW5pbWF0aW9uLA0KICAgICAgICAnZmFkZSc6IEZhZGVBbmltYXRpb24sDQogICAgICAgICdub25lJzogTm9uZUFuaW1hdGlvbg0KICAgICAgfTsNCiAgICB9LA0KICAgIHNldHVwRWxlbWVudHM6IGZ1bmN0aW9uKCkgew0KICAgICAgdGhpcy5jb250cm9scyA9IHRoaXMud3JhcHBlci5maW5kKCcuYWUtY29udHJvbHMnKTsNCiAgICAgIHRoaXMuZ2FsbGVyeV9pbmZvID0gJCgnPHAgY2xhc3M9ImFlLWluZm8iPjwvcD4nKTsNCiAgICAgIHRoaXMuY29udHJvbHMuYXBwZW5kKHRoaXMuZ2FsbGVyeV9pbmZvKTsNCiAgICAgIHRoaXMuaW1hZ2Vfd3JhcHBlciA9IHRoaXMud3JhcHBlci5maW5kKCcuYWUtaW1hZ2Utd3JhcHBlcicpOw0KICAgICAgdGhpcy5pbWFnZV93cmFwcGVyLmVtcHR5KCk7DQogICAgICB0aGlzLm5hdiA9IHRoaXMud3JhcHBlci5maW5kKCcuYWUtbmF2Jyk7DQogICAgICB0aGlzLnRodW1ic193cmFwcGVyID0gdGhpcy5uYXYuZmluZCgnLmFlLXRodW1icycpOw0KICAgICAgdGhpcy5wcmVsb2FkcyA9ICQoJzxkaXYgY2xhc3M9ImFlLXByZWxvYWRzIj48L2Rpdj4nKTsNCiAgICAgIHRoaXMubG9hZGVyID0gJCgnPGltZyBjbGFzcz0iYWUtbG9hZGVyIiBzcmM9IicrIHRoaXMuc2V0dGluZ3MubG9hZGVyX2ltYWdlICsnIj4nKTsNCiAgICAgIHRoaXMuaW1hZ2Vfd3JhcHBlci5hcHBlbmQodGhpcy5sb2FkZXIpOw0KICAgICAgdGhpcy5sb2FkZXIuaGlkZSgpOw0KICAgICAgJChkb2N1bWVudC5ib2R5KS5hcHBlbmQodGhpcy5wcmVsb2Fkcyk7DQogICAgfSwNCiAgICBsb2FkaW5nOiBmdW5jdGlvbihib29sKSB7DQogICAgICBpZihib29sKSB7DQogICAgICAgIHRoaXMubG9hZGVyLnNob3coKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMubG9hZGVyLmhpZGUoKTsNCiAgICAgIH07DQogICAgfSwNCiAgICBhZGRBbmltYXRpb246IGZ1bmN0aW9uKG5hbWUsIGZuKSB7DQogICAgICBpZigkLmlzRnVuY3Rpb24oZm4pKSB7DQogICAgICAgIHRoaXMuYW5pbWF0aW9uc1tuYW1lXSA9IGZuOw0KICAgICAgfTsNCiAgICB9LA0KICAgIGZpbmRJbWFnZXM6IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgdGhpcy5pbWFnZXMgPSBbXTsNCiAgICAgIHZhciB0aHVtYl93cmFwcGVyX3dpZHRoID0gMDsNCiAgICAgIHZhciB0aHVtYnNfbG9hZGVkID0gMDsNCiAgICAgIHZhciB0aHVtYnMgPSB0aGlzLnRodW1ic193cmFwcGVyLmZpbmQoJ2EnKTsNCiAgICAgIHZhciB0aHVtYl9jb3VudCA9IHRodW1icy5sZW5ndGg7DQogICAgICBpZih0aGlzLnNldHRpbmdzLnRodW1iX29wYWNpdHkgPCAxKSB7DQogICAgICAgIHRodW1icy5maW5kKCdpbWcnKS5jc3MoJ29wYWNpdHknLCB0aGlzLnNldHRpbmdzLnRodW1iX29wYWNpdHkpOw0KICAgICAgfTsNCiAgICAgIHRodW1icy5lYWNoKA0KICAgICAgICBmdW5jdGlvbihpKSB7DQogICAgICAgICAgdmFyIGxpbmsgPSAkKHRoaXMpOw0KICAgICAgICAgIHZhciBpbWFnZV9zcmMgPSBsaW5rLmF0dHIoJ2hyZWYnKTsNCiAgICAgICAgICB2YXIgdGh1bWIgPSBsaW5rLmZpbmQoJ2ltZycpOw0KICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB0aHVtYiBoYXMgYWxyZWFkeSBsb2FkZWQNCiAgICAgICAgICBpZighY29udGV4dC5pc0ltYWdlTG9hZGVkKHRodW1iWzBdKSkgew0KICAgICAgICAgICAgdGh1bWIubG9hZCgNCiAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgdGh1bWJfd3JhcHBlcl93aWR0aCArPSB0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aDsNCiAgICAgICAgICAgICAgICB0aHVtYnNfbG9hZGVkKys7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICk7DQogICAgICAgICAgfSBlbHNlew0KICAgICAgICAgICAgdGh1bWJfd3JhcHBlcl93aWR0aCArPSB0aHVtYlswXS5wYXJlbnROb2RlLnBhcmVudE5vZGUub2Zmc2V0V2lkdGg7DQogICAgICAgICAgICB0aHVtYnNfbG9hZGVkKys7DQogICAgICAgICAgfTsNCiAgICAgICAgICBsaW5rLmFkZENsYXNzKCdhZS10aHVtYicrIGkpOw0KICAgICAgICAgIGxpbmsuY2xpY2soDQogICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgY29udGV4dC5zaG93SW1hZ2UoaSk7DQogICAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICkuaG92ZXIoDQogICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgaWYoISQodGhpcykuaXMoJy5hZS1hY3RpdmUnKSAmJiBjb250ZXh0LnNldHRpbmdzLnRodW1iX29wYWNpdHkgPCAxKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdpbWcnKS5mYWRlVG8oMzAwLCAxKTsNCiAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgY29udGV4dC5wcmVsb2FkSW1hZ2UoaSk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIGlmKCEkKHRoaXMpLmlzKCcuYWUtYWN0aXZlJykgJiYgY29udGV4dC5zZXR0aW5ncy50aHVtYl9vcGFjaXR5IDwgMSkgew0KICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnaW1nJykuZmFkZVRvKDMwMCwgY29udGV4dC5zZXR0aW5ncy50aHVtYl9vcGFjaXR5KTsNCiAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICApOw0KICAgICAgICAgIHZhciBsaW5rID0gZmFsc2U7DQogICAgICAgICAgaWYodGh1bWIuZGF0YSgnYWUtbGluaycpKSB7DQogICAgICAgICAgICBsaW5rID0gdGh1bWIuZGF0YSgnYWUtbGluaycpOw0KICAgICAgICAgIH0gZWxzZSBpZih0aHVtYi5hdHRyKCdsb25nZGVzYycpICYmIHRodW1iLmF0dHIoJ2xvbmdkZXNjJykubGVuZ3RoKSB7DQogICAgICAgICAgICBsaW5rID0gdGh1bWIuYXR0cignbG9uZ2Rlc2MnKTsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIHZhciBkZXNjID0gZmFsc2U7DQogICAgICAgICAgaWYodGh1bWIuZGF0YSgnYWUtZGVzYycpKSB7DQogICAgICAgICAgICBkZXNjID0gdGh1bWIuZGF0YSgnYWUtZGVzYycpOw0KICAgICAgICAgIH0gZWxzZSBpZih0aHVtYi5hdHRyKCdhbHQnKSAmJiB0aHVtYi5hdHRyKCdhbHQnKS5sZW5ndGgpIHsNCiAgICAgICAgICAgIGRlc2MgPSB0aHVtYi5hdHRyKCdhbHQnKTsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIHZhciB0aXRsZSA9IGZhbHNlOw0KICAgICAgICAgIGlmKHRodW1iLmRhdGEoJ2FlLXRpdGxlJykpIHsNCiAgICAgICAgICAgIHRpdGxlID0gdGh1bWIuZGF0YSgnYWUtdGl0bGUnKTsNCiAgICAgICAgICB9IGVsc2UgaWYodGh1bWIuYXR0cigndGl0bGUnKSAmJiB0aHVtYi5hdHRyKCd0aXRsZScpLmxlbmd0aCkgew0KICAgICAgICAgICAgdGl0bGUgPSB0aHVtYi5hdHRyKCd0aXRsZScpOw0KICAgICAgICAgIH07DQogICAgICAgICAgY29udGV4dC5pbWFnZXNbaV0gPSB7IHRodW1iOiB0aHVtYi5hdHRyKCdzcmMnKSwgaW1hZ2U6IGltYWdlX3NyYywgZXJyb3I6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkZWQ6IGZhbHNlLCBkZXNjOiBkZXNjLCB0aXRsZTogdGl0bGUsIHNpemU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBsaW5rIH07DQogICAgICAgIH0NCiAgICAgICk7DQogICAgICAvLyBXYWl0IHVudGlsIGFsbCB0aHVtYnMgYXJlIGxvYWRlZCwgYW5kIHRoZW4gc2V0IHRoZSB3aWR0aCBvZiB0aGUgdWwNCiAgICAgIHZhciBpbnRlciA9IHNldEludGVydmFsKA0KICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICBpZih0aHVtYl9jb3VudCA9PSB0aHVtYnNfbG9hZGVkKSB7DQogICAgICAgICAgICB0aHVtYl93cmFwcGVyX3dpZHRoIC09IDEwMDsNCiAgICAgICAgICAgIHZhciBsaXN0ID0gY29udGV4dC5uYXYuZmluZCgnLmFlLXRodW1iLWxpc3QnKTsNCiAgICAgICAgICAgIGxpc3QuY3NzKCd3aWR0aCcsIHRodW1iX3dyYXBwZXJfd2lkdGggKydweCcpOw0KICAgICAgICAgICAgdmFyIGkgPSAxOw0KICAgICAgICAgICAgdmFyIGxhc3RfaGVpZ2h0ID0gbGlzdC5oZWlnaHQoKTsNCiAgICAgICAgICAgIHdoaWxlKGkgPCAyMDEpIHsNCiAgICAgICAgICAgICAgbGlzdC5jc3MoJ3dpZHRoJywgKHRodW1iX3dyYXBwZXJfd2lkdGggKyBpKSArJ3B4Jyk7DQogICAgICAgICAgICAgIGlmKGxhc3RfaGVpZ2h0ICE9IGxpc3QuaGVpZ2h0KCkpIHsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBsYXN0X2hlaWdodCA9IGxpc3QuaGVpZ2h0KCk7DQogICAgICAgICAgICAgIGkrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXIpOw0KICAgICAgICAgIH07DQogICAgICAgIH0sDQogICAgICAgIDEwMA0KICAgICAgKTsNCiAgICB9LA0KICAgIGluaXRLZXlFdmVudHM6IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgJChkb2N1bWVudCkua2V5ZG93bigNCiAgICAgICAgZnVuY3Rpb24oZSkgew0KICAgICAgICAgIGlmKGUua2V5Q29kZSA9PSAzOSkgew0KICAgICAgICAgICAgLy8gcmlnaHQgYXJyb3cNCiAgICAgICAgICAgIGNvbnRleHQubmV4dEltYWdlKCk7DQogICAgICAgICAgICBjb250ZXh0LnNsaWRlc2hvdy5zdG9wKCk7DQogICAgICAgICAgfSBlbHNlIGlmKGUua2V5Q29kZSA9PSAzNykgew0KICAgICAgICAgICAgLy8gbGVmdCBhcnJvdw0KICAgICAgICAgICAgY29udGV4dC5wcmV2SW1hZ2UoKTsNCiAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICApOw0KICAgIH0sDQogICAgaW5pdE5leHRBbmRQcmV2OiBmdW5jdGlvbigpIHsNCiAgICAgIHRoaXMubmV4dF9saW5rID0gJCgnPGRpdiBjbGFzcz0iYWUtbmV4dCI+PGRpdiBjbGFzcz0iYWUtbmV4dC1pbWFnZSI+PC9kaXY+PC9kaXY+Jyk7DQogICAgICB0aGlzLnByZXZfbGluayA9ICQoJzxkaXYgY2xhc3M9ImFlLXByZXYiPjxkaXYgY2xhc3M9ImFlLXByZXYtaW1hZ2UiPjwvZGl2PjwvZGl2PicpOw0KICAgICAgdGhpcy5pbWFnZV93cmFwcGVyLmFwcGVuZCh0aGlzLm5leHRfbGluayk7DQogICAgICB0aGlzLmltYWdlX3dyYXBwZXIuYXBwZW5kKHRoaXMucHJldl9saW5rKTsNCiAgICAgIHZhciBjb250ZXh0ID0gdGhpczsNCiAgICAgIHRoaXMucHJldl9saW5rLmFkZCh0aGlzLm5leHRfbGluaykubW91c2VvdmVyKA0KICAgICAgICBmdW5jdGlvbihlKSB7DQogICAgICAgICAgLy8gSUUgNiBoaWRlcyB0aGUgd3JhcHBlciBkaXYsIHNvIHdlIGhhdmUgdG8gc2V0IGl0J3Mgd2lkdGgNCiAgICAgICAgICAkKHRoaXMpLmNzcygnaGVpZ2h0JywgY29udGV4dC5pbWFnZV93cmFwcGVyX2hlaWdodCk7DQogICAgICAgICAgJCh0aGlzKS5maW5kKCdkaXYnKS5zaG93KCk7DQogICAgICAgIH0NCiAgICAgICkubW91c2VvdXQoDQogICAgICAgIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2RpdicpLmhpZGUoKTsNCiAgICAgICAgfQ0KICAgICAgKS5jbGljaygNCiAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgaWYoJCh0aGlzKS5pcygnLmFlLW5leHQnKSkgew0KICAgICAgICAgICAgY29udGV4dC5uZXh0SW1hZ2UoKTsNCiAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgY29udGV4dC5wcmV2SW1hZ2UoKTsNCiAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICApLmZpbmQoJ2RpdicpLmNzcygnb3BhY2l0eScsIDAuNyk7DQogICAgfSwNCiAgICBpbml0QmFja0FuZEZvcndhcmQ6IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgdGhpcy5zY3JvbGxfZm9yd2FyZCA9ICQoJzxkaXYgY2xhc3M9ImFlLWZvcndhcmQiPjwvZGl2PicpOw0KICAgICAgdGhpcy5zY3JvbGxfYmFjayA9ICQoJzxkaXYgY2xhc3M9ImFlLWJhY2siPjwvZGl2PicpOw0KICAgICAgdGhpcy5uYXYuYXBwZW5kKHRoaXMuc2Nyb2xsX2ZvcndhcmQpOw0KICAgICAgdGhpcy5uYXYucHJlcGVuZCh0aGlzLnNjcm9sbF9iYWNrKTsNCiAgICAgIHZhciBoYXNfc2Nyb2xsZWQgPSAwOw0KICAgICAgdmFyIHRodW1ic19zY3JvbGxfaW50ZXJ2YWwgPSBmYWxzZTsNCiAgICAgICQodGhpcy5zY3JvbGxfYmFjaykuYWRkKHRoaXMuc2Nyb2xsX2ZvcndhcmQpLmNsaWNrKA0KICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGp1bXAgdGhlIHdob2xlIHdpZHRoLCBzaW5jZSBhbiBpbWFnZQ0KICAgICAgICAgIC8vIG1pZ2h0IGJlIGN1dCBhdCB0aGUgZWRnZQ0KICAgICAgICAgIHZhciB3aWR0aCA9IGNvbnRleHQubmF2X2Rpc3BsYXlfd2lkdGggLSA1MDsNCiAgICAgICAgICBpZihjb250ZXh0LnNldHRpbmdzLnNjcm9sbF9qdW1wID4gMCkgew0KICAgICAgICAgICAgdmFyIHdpZHRoID0gY29udGV4dC5zZXR0aW5ncy5zY3JvbGxfanVtcDsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIGlmKCQodGhpcykuaXMoJy5hZS1mb3J3YXJkJykpIHsNCiAgICAgICAgICAgIHZhciBsZWZ0ID0gY29udGV4dC50aHVtYnNfd3JhcHBlci5zY3JvbGxMZWZ0KCkgKyB3aWR0aDsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdmFyIGxlZnQgPSBjb250ZXh0LnRodW1ic193cmFwcGVyLnNjcm9sbExlZnQoKSAtIHdpZHRoOw0KICAgICAgICAgIH07DQogICAgICAgICAgaWYoY29udGV4dC5zZXR0aW5ncy5zbGlkZXNob3cuc3RvcF9vbl9zY3JvbGwpIHsNCiAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIGNvbnRleHQudGh1bWJzX3dyYXBwZXIuYW5pbWF0ZSh7c2Nyb2xsTGVmdDogbGVmdCArJ3B4J30pOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgKS5jc3MoJ29wYWNpdHknLCAwLjYpLmhvdmVyKA0KICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gJ2xlZnQnOw0KICAgICAgICAgIGlmKCQodGhpcykuaXMoJy5hZS1mb3J3YXJkJykpIHsNCiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdyaWdodCc7DQogICAgICAgICAgfTsNCiAgICAgICAgICB0aHVtYnNfc2Nyb2xsX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoDQogICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgaGFzX3Njcm9sbGVkKys7DQogICAgICAgICAgICAgIC8vIERvbid0IHdhbnQgdG8gc3RvcCB0aGUgc2xpZGVzaG93IGp1c3QgYmVjYXVzZSB3ZSBzY3JvbGxlZCBhIHBpeGVsIG9yIHR3bw0KICAgICAgICAgICAgICBpZihoYXNfc2Nyb2xsZWQgPiAzMCAmJiBjb250ZXh0LnNldHRpbmdzLnNsaWRlc2hvdy5zdG9wX29uX3Njcm9sbCkgew0KICAgICAgICAgICAgICAgIGNvbnRleHQuc2xpZGVzaG93LnN0b3AoKTsNCiAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgdmFyIGxlZnQgPSBjb250ZXh0LnRodW1ic193cmFwcGVyLnNjcm9sbExlZnQoKSArIDE7DQogICAgICAgICAgICAgIGlmKGRpcmVjdGlvbiA9PSAnbGVmdCcpIHsNCiAgICAgICAgICAgICAgICBsZWZ0ID0gY29udGV4dC50aHVtYnNfd3JhcHBlci5zY3JvbGxMZWZ0KCkgLSAxOw0KICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICBjb250ZXh0LnRodW1ic193cmFwcGVyLnNjcm9sbExlZnQobGVmdCk7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgMTANCiAgICAgICAgICApOw0KICAgICAgICAgICQodGhpcykuY3NzKCdvcGFjaXR5JywgMSk7DQogICAgICAgIH0sDQogICAgICAgIGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGhhc19zY3JvbGxlZCA9IDA7DQogICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aHVtYnNfc2Nyb2xsX2ludGVydmFsKTsNCiAgICAgICAgICAkKHRoaXMpLmNzcygnb3BhY2l0eScsIDAuNik7DQogICAgICAgIH0NCiAgICAgICk7DQogICAgfSwNCiAgICBfYWZ0ZXJTaG93OiBmdW5jdGlvbigpIHsNCiAgICAgIHRoaXMuZ2FsbGVyeV9pbmZvLmh0bWwoKHRoaXMuY3VycmVudF9pbmRleCArIDEpICsnIC8gJysgdGhpcy5pbWFnZXMubGVuZ3RoKTsNCiAgICAgIGlmKCF0aGlzLnNldHRpbmdzLmN5Y2xlKSB7DQogICAgICAgIC8vIE5lZWRlZCBmb3IgSUUNCiAgICAgICAgdGhpcy5wcmV2X2xpbmsuc2hvdygpLmNzcygnaGVpZ2h0JywgdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCk7DQogICAgICAgIHRoaXMubmV4dF9saW5rLnNob3coKS5jc3MoJ2hlaWdodCcsIHRoaXMuaW1hZ2Vfd3JhcHBlcl9oZWlnaHQpOw0KICAgICAgICBpZih0aGlzLmN1cnJlbnRfaW5kZXggPT0gKHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpKSB7DQogICAgICAgICAgdGhpcy5uZXh0X2xpbmsuaGlkZSgpOw0KICAgICAgICB9Ow0KICAgICAgICBpZih0aGlzLmN1cnJlbnRfaW5kZXggPT0gMCkgew0KICAgICAgICAgIHRoaXMucHJldl9saW5rLmhpZGUoKTsNCiAgICAgICAgfTsNCiAgICAgIH07DQogICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnNldHRpbmdzLmNhbGxiYWNrcy5hZnRlckltYWdlVmlzaWJsZSk7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBDaGVja3MgaWYgdGhlIGltYWdlIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgaW5zaWRlIHRoZSBjb250YWluZXINCiAgICAgKiBJZiBpdCdzIG5vdCwgc2hyaW5rIGl0IHByb3BvcnRpb25hbGx5DQogICAgICovDQogICAgX2dldENvbnRhaW5lZEltYWdlU2l6ZTogZnVuY3Rpb24oaW1hZ2Vfd2lkdGgsIGltYWdlX2hlaWdodCkgew0KICAgICAgaWYoaW1hZ2VfaGVpZ2h0ID4gdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCkgew0KICAgICAgICB2YXIgcmF0aW8gPSBpbWFnZV93aWR0aCAvIGltYWdlX2hlaWdodDsNCiAgICAgICAgaW1hZ2VfaGVpZ2h0ID0gdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodDsNCiAgICAgICAgaW1hZ2Vfd2lkdGggPSB0aGlzLmltYWdlX3dyYXBwZXJfaGVpZ2h0ICogcmF0aW87DQogICAgICB9Ow0KICAgICAgaWYoaW1hZ2Vfd2lkdGggPiB0aGlzLmltYWdlX3dyYXBwZXJfd2lkdGgpIHsNCiAgCSAgICB2YXIgcmF0aW8gPSBpbWFnZV9oZWlnaHQgLyBpbWFnZV93aWR0aDsNCiAgCSAgICBpbWFnZV93aWR0aCA9IHRoaXMuaW1hZ2Vfd3JhcHBlcl93aWR0aDsNCiAgCSAgICBpbWFnZV9oZWlnaHQgPSB0aGlzLmltYWdlX3dyYXBwZXJfd2lkdGggKiByYXRpbzsNCiAgCSAgfTsNCiAgICAgIHJldHVybiB7d2lkdGg6IGltYWdlX3dpZHRoLCBoZWlnaHQ6IGltYWdlX2hlaWdodH07DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBJZiB0aGUgaW1hZ2UgZGltZW5zaW9ucyBhcmUgc21hbGxlciB0aGFuIHRoZSB3cmFwcGVyLCB3ZSBwb3NpdGlvbg0KICAgICAqIGl0IGluIHRoZSBtaWRkbGUgYW55d2F5DQogICAgICovDQogICAgX2NlbnRlckltYWdlOiBmdW5jdGlvbihpbWdfY29udGFpbmVyLCBpbWFnZV93aWR0aCwgaW1hZ2VfaGVpZ2h0KSB7DQogICAgICBpbWdfY29udGFpbmVyLmNzcygndG9wJywgJzBweCcpOw0KICAgICAgaWYoaW1hZ2VfaGVpZ2h0IDwgdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCkgew0KICAgICAgICB2YXIgZGlmID0gdGhpcy5pbWFnZV93cmFwcGVyX2hlaWdodCAtIGltYWdlX2hlaWdodDsNCiAgICAgICAgaW1nX2NvbnRhaW5lci5jc3MoJ3RvcCcsIChkaWYgLyAyKSArJ3B4Jyk7DQogICAgICB9Ow0KICAgICAgaW1nX2NvbnRhaW5lci5jc3MoJ2xlZnQnLCAnMHB4Jyk7DQogICAgICBpZihpbWFnZV93aWR0aCA8IHRoaXMuaW1hZ2Vfd3JhcHBlcl93aWR0aCkgew0KICAgICAgICB2YXIgZGlmID0gdGhpcy5pbWFnZV93cmFwcGVyX3dpZHRoIC0gaW1hZ2Vfd2lkdGg7DQogICAgICAgIGltZ19jb250YWluZXIuY3NzKCdsZWZ0JywgKGRpZiAvIDIpICsncHgnKTsNCiAgICAgIH07DQogICAgfSwNCiAgICBfZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKGltYWdlKSB7DQogICAgICB2YXIgZGVzYyA9IGZhbHNlOw0KICAgICAgaWYoaW1hZ2UuZGVzYy5sZW5ndGggfHwgaW1hZ2UudGl0bGUubGVuZ3RoKSB7DQogICAgICAgIHZhciB0aXRsZSA9ICcnOw0KICAgICAgICBpZihpbWFnZS50aXRsZS5sZW5ndGgpIHsNCiAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nIGNsYXNzPSJhZS1kZXNjcmlwdGlvbi10aXRsZSI+JysgaW1hZ2UudGl0bGUgKyc8L3N0cm9uZz4nOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgZGVzYyA9ICcnOw0KICAgICAgICBpZihpbWFnZS5kZXNjLmxlbmd0aCkgew0KICAgICAgICAgIGRlc2MgPSAnPHNwYW4+JysgaW1hZ2UuZGVzYyArJzwvc3Bhbj4nOw0KICAgICAgICB9Ow0KICAgICAgICBkZXNjID0gJCgnPHAgY2xhc3M9ImFlLWltYWdlLWRlc2NyaXB0aW9uIj4nKyB0aXRsZSArIGRlc2MgKyc8L3A+Jyk7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIGRlc2M7DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gZnVuY3Rpb24gY2FsbGJhY2sgR2V0cyBmaXJlZCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkLCBpcyBkaXNwbGF5aW5nDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpdCdzIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQNCiAgICAgKi8NCiAgICBzaG93SW1hZ2U6IGZ1bmN0aW9uKGluZGV4LCBjYWxsYmFjaykgew0KICAgICAgaWYodGhpcy5pbWFnZXNbaW5kZXhdICYmICF0aGlzLmluX3RyYW5zaXRpb24pIHsNCiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLmltYWdlc1tpbmRleF07DQogICAgICAgIHRoaXMuaW5fdHJhbnNpdGlvbiA9IHRydWU7DQogICAgICAgIGlmKCFpbWFnZS5wcmVsb2FkZWQpIHsNCiAgICAgICAgICB0aGlzLmxvYWRpbmcodHJ1ZSk7DQogICAgICAgICAgdGhpcy5wcmVsb2FkSW1hZ2UoaW5kZXgsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgY29udGV4dC5sb2FkaW5nKGZhbHNlKTsNCiAgICAgICAgICAgIGNvbnRleHQuX3Nob3dXaGVuTG9hZGVkKGluZGV4LCBjYWxsYmFjayk7DQogICAgICAgICAgfSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5fc2hvd1doZW5Mb2FkZWQoaW5kZXgsIGNhbGxiYWNrKTsNCiAgICAgICAgfTsNCiAgICAgIH07DQogICAgfSwNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gZnVuY3Rpb24gY2FsbGJhY2sgR2V0cyBmaXJlZCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkLCBpcyBkaXNwbGF5aW5nDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpdCdzIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQNCiAgICAgKi8NCiAgICBfc2hvd1doZW5Mb2FkZWQ6IGZ1bmN0aW9uKGluZGV4LCBjYWxsYmFjaykgew0KICAgICAgaWYodGhpcy5pbWFnZXNbaW5kZXhdKSB7DQogICAgICAgIHZhciBjb250ZXh0ID0gdGhpczsNCiAgICAgICAgdmFyIGltYWdlID0gdGhpcy5pbWFnZXNbaW5kZXhdOw0KICAgICAgICB2YXIgaW1nX2NvbnRhaW5lciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLmFkZENsYXNzKCdhZS1pbWFnZScpOw0KICAgICAgICB2YXIgaW1nID0gJChuZXcgSW1hZ2UoKSkuYXR0cignc3JjJywgaW1hZ2UuaW1hZ2UpOw0KICAgICAgICBpZihpbWFnZS5saW5rKSB7DQogICAgICAgICAgdmFyIGxpbmsgPSAkKCc8YSBocmVmPSInKyBpbWFnZS5saW5rICsnIiB0YXJnZXQ9Il9ibGFuayI+PC9hPicpOw0KICAgICAgICAgIGxpbmsuYXBwZW5kKGltZyk7DQogICAgICAgICAgaW1nX2NvbnRhaW5lci5hcHBlbmQobGluayk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaW1nX2NvbnRhaW5lci5hcHBlbmQoaW1nKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmltYWdlX3dyYXBwZXIucHJlcGVuZChpbWdfY29udGFpbmVyKTsNCiAgICAgICAgdmFyIHNpemUgPSB0aGlzLl9nZXRDb250YWluZWRJbWFnZVNpemUoaW1hZ2Uuc2l6ZS53aWR0aCwgaW1hZ2Uuc2l6ZS5oZWlnaHQpOw0KICAgICAgICBpbWcuYXR0cignd2lkdGgnLCBzaXplLndpZHRoKTsNCiAgICAgICAgaW1nLmF0dHIoJ2hlaWdodCcsIHNpemUuaGVpZ2h0KTsNCiAgICAgICAgaW1nX2NvbnRhaW5lci5jc3Moe3dpZHRoOiBzaXplLndpZHRoICsncHgnLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsncHgnfSk7DQogICAgICAgIHRoaXMuX2NlbnRlckltYWdlKGltZ19jb250YWluZXIsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTsNCiAgICAgICAgdmFyIGRlc2MgPSB0aGlzLl9nZXREZXNjcmlwdGlvbihpbWFnZSwgaW1nX2NvbnRhaW5lcik7DQogICAgICAgIGlmKGRlc2MpIHsNCiAgICAgICAgICBpZighdGhpcy5zZXR0aW5ncy5kZXNjcmlwdGlvbl93cmFwcGVyKSB7DQogICAgICAgICAgICBpbWdfY29udGFpbmVyLmFwcGVuZChkZXNjKTsNCiAgICAgICAgICAgIHZhciB3aWR0aCA9IHNpemUud2lkdGggLSBwYXJzZUludChkZXNjLmNzcygncGFkZGluZy1sZWZ0JyksIDEwKSAtIHBhcnNlSW50KGRlc2MuY3NzKCdwYWRkaW5nLXJpZ2h0JyksIDEwKTsNCiAgICAgICAgICAgIGRlc2MuY3NzKCd3aWR0aCcsIHdpZHRoICsncHgnKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5kZXNjcmlwdGlvbl93cmFwcGVyLmFwcGVuZChkZXNjKTsNCiAgICAgICAgICB9DQogICAgICAgIH07DQogICAgICAgIHRoaXMuaGlnaExpZ2h0VGh1bWIodGhpcy5uYXYuZmluZCgnLmFlLXRodW1iJysgaW5kZXgpKTsNCg0KICAgICAgICB2YXIgZGlyZWN0aW9uID0gJ3JpZ2h0JzsNCiAgICAgICAgaWYodGhpcy5jdXJyZW50X2luZGV4IDwgaW5kZXgpIHsNCiAgICAgICAgICBkaXJlY3Rpb24gPSAnbGVmdCc7DQogICAgICAgIH07DQogICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuc2V0dGluZ3MuY2FsbGJhY2tzLmJlZm9yZUltYWdlVmlzaWJsZSk7DQogICAgICAgIGlmKHRoaXMuY3VycmVudF9pbWFnZSB8fCB0aGlzLnNldHRpbmdzLmFuaW1hdGVfZmlyc3RfaW1hZ2UpIHsNCiAgICAgICAgICB2YXIgYW5pbWF0aW9uX3NwZWVkID0gdGhpcy5zZXR0aW5ncy5hbmltYXRpb25fc3BlZWQ7DQogICAgICAgICAgdmFyIGVhc2luZyA9ICdzd2luZyc7DQogICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uc1t0aGlzLnNldHRpbmdzLmVmZmVjdF0uY2FsbCh0aGlzLCBpbWdfY29udGFpbmVyLCBkaXJlY3Rpb24sIGRlc2MpOw0KICAgICAgICAgIGlmKHR5cGVvZiBhbmltYXRpb24uc3BlZWQgIT0gJ3VuZGVmaW5lZCcpIHsNCiAgICAgICAgICAgIGFuaW1hdGlvbl9zcGVlZCA9IGFuaW1hdGlvbi5zcGVlZDsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIGlmKHR5cGVvZiBhbmltYXRpb24uZWFzaW5nICE9ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICBlYXNpbmcgPSBhbmltYXRpb24uZWFzaW5nOw0KICAgICAgICAgIH07DQogICAgICAgICAgaWYodGhpcy5jdXJyZW50X2ltYWdlKSB7DQogICAgICAgICAgICB2YXIgb2xkX2ltYWdlID0gdGhpcy5jdXJyZW50X2ltYWdlOw0KICAgICAgICAgICAgdmFyIG9sZF9kZXNjcmlwdGlvbiA9IHRoaXMuY3VycmVudF9kZXNjcmlwdGlvbjsNCiAgICAgICAgICAgIG9sZF9pbWFnZS5hbmltYXRlKGFuaW1hdGlvbi5vbGRfaW1hZ2UsIGFuaW1hdGlvbl9zcGVlZCwgZWFzaW5nLA0KICAgICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBvbGRfaW1hZ2UucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgaWYob2xkX2Rlc2NyaXB0aW9uKSBvbGRfZGVzY3JpcHRpb24ucmVtb3ZlKCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICk7DQogICAgICAgICAgfTsNCiAgICAgICAgICBpbWdfY29udGFpbmVyLmFuaW1hdGUoYW5pbWF0aW9uLm5ld19pbWFnZSwgYW5pbWF0aW9uX3NwZWVkLCBlYXNpbmcsDQogICAgICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50X2luZGV4ID0gaW5kZXg7DQogICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudF9pbWFnZSA9IGltZ19jb250YWluZXI7DQogICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudF9kZXNjcmlwdGlvbiA9IGRlc2M7DQogICAgICAgICAgICAgIGNvbnRleHQuaW5fdHJhbnNpdGlvbiA9IGZhbHNlOw0KICAgICAgICAgICAgICBjb250ZXh0Ll9hZnRlclNob3coKTsNCiAgICAgICAgICAgICAgY29udGV4dC5maXJlQ2FsbGJhY2soY2FsbGJhY2spOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5jdXJyZW50X2luZGV4ID0gaW5kZXg7DQogICAgICAgICAgdGhpcy5jdXJyZW50X2ltYWdlID0gaW1nX2NvbnRhaW5lcjsNCiAgICAgICAgICBjb250ZXh0LmN1cnJlbnRfZGVzY3JpcHRpb24gPSBkZXNjOw0KICAgICAgICAgIHRoaXMuaW5fdHJhbnNpdGlvbiA9IGZhbHNlOw0KICAgICAgICAgIGNvbnRleHQuX2FmdGVyU2hvdygpOw0KICAgICAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKGNhbGxiYWNrKTsNCiAgICAgICAgfTsNCiAgICAgIH07DQogICAgfSwNCiAgICBuZXh0SW5kZXg6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYodGhpcy5jdXJyZW50X2luZGV4ID09ICh0aGlzLmltYWdlcy5sZW5ndGggLSAxKSkgew0KICAgICAgICBpZighdGhpcy5zZXR0aW5ncy5jeWNsZSkgew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfTsNCiAgICAgICAgdmFyIG5leHQgPSAwOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdmFyIG5leHQgPSB0aGlzLmN1cnJlbnRfaW5kZXggKyAxOw0KICAgICAgfTsNCiAgICAgIHJldHVybiBuZXh0Ow0KICAgIH0sDQogICAgbmV4dEltYWdlOiBmdW5jdGlvbihjYWxsYmFjaykgew0KICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRJbmRleCgpOw0KICAgICAgaWYobmV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsNCiAgICAgIHRoaXMucHJlbG9hZEltYWdlKG5leHQgKyAxKTsNCiAgICAgIHRoaXMuc2hvd0ltYWdlKG5leHQsIGNhbGxiYWNrKTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0sDQogICAgcHJldkluZGV4OiBmdW5jdGlvbigpIHsNCiAgICAgIGlmKHRoaXMuY3VycmVudF9pbmRleCA9PSAwKSB7DQogICAgICAgIGlmKCF0aGlzLnNldHRpbmdzLmN5Y2xlKSB7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgcHJldiA9IHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDE7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB2YXIgcHJldiA9IHRoaXMuY3VycmVudF9pbmRleCAtIDE7DQogICAgICB9Ow0KICAgICAgcmV0dXJuIHByZXY7DQogICAgfSwNCiAgICBwcmV2SW1hZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7DQogICAgICB2YXIgcHJldiA9IHRoaXMucHJldkluZGV4KCk7DQogICAgICBpZihwcmV2ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOw0KICAgICAgdGhpcy5wcmVsb2FkSW1hZ2UocHJldiAtIDEpOw0KICAgICAgdGhpcy5zaG93SW1hZ2UocHJldiwgY2FsbGJhY2spOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICBwcmVsb2FkQWxsOiBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBjb250ZXh0ID0gdGhpczsNCiAgICAgIHZhciBpID0gMDsNCiAgICAgIGZ1bmN0aW9uIHByZWxvYWROZXh0KCkgew0KICAgICAgICBpZihpIDwgY29udGV4dC5pbWFnZXMubGVuZ3RoKSB7DQogICAgICAgICAgaSsrOw0KICAgICAgICAgIGNvbnRleHQucHJlbG9hZEltYWdlKGksIHByZWxvYWROZXh0KTsNCiAgICAgICAgfTsNCiAgICAgIH07DQogICAgICBjb250ZXh0LnByZWxvYWRJbWFnZShpLCBwcmVsb2FkTmV4dCk7DQogICAgfSwNCiAgICBwcmVsb2FkSW1hZ2U6IGZ1bmN0aW9uKGluZGV4LCBjYWxsYmFjaykgew0KICAgICAgaWYodGhpcy5pbWFnZXNbaW5kZXhdKSB7DQogICAgICAgIHZhciBpbWFnZSA9IHRoaXMuaW1hZ2VzW2luZGV4XTsNCiAgICAgICAgaWYoIXRoaXMuaW1hZ2VzW2luZGV4XS5wcmVsb2FkZWQpIHsNCiAgICAgICAgICB2YXIgaW1nID0gJChuZXcgSW1hZ2UoKSk7DQogICAgICAgICAgaW1nLmF0dHIoJ3NyYycsIGltYWdlLmltYWdlKTsNCiAgICAgICAgICBpZighdGhpcy5pc0ltYWdlTG9hZGVkKGltZ1swXSkpIHsNCiAgICAgICAgICAgIHRoaXMucHJlbG9hZHMuYXBwZW5kKGltZyk7DQogICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7DQogICAgICAgICAgICBpbWcubG9hZCgNCiAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgaW1hZ2UucHJlbG9hZGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpbWFnZS5zaXplID0geyB3aWR0aDogdGhpcy53aWR0aCwgaGVpZ2h0OiB0aGlzLmhlaWdodCB9Ow0KICAgICAgICAgICAgICAgIGNvbnRleHQuZmlyZUNhbGxiYWNrKGNhbGxiYWNrKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgKS5lcnJvcigNCiAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgaW1hZ2UuZXJyb3IgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGltYWdlLnByZWxvYWRlZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIGltYWdlLnNpemUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaW1hZ2UucHJlbG9hZGVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGltYWdlLnNpemUgPSB7IHdpZHRoOiBpbWdbMF0ud2lkdGgsIGhlaWdodDogaW1nWzBdLmhlaWdodCB9Ow0KICAgICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2soY2FsbGJhY2spOw0KICAgICAgICAgIH07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5maXJlQ2FsbGJhY2soY2FsbGJhY2spOw0KICAgICAgICB9Ow0KICAgICAgfTsNCiAgICB9LA0KICAgIGlzSW1hZ2VMb2FkZWQ6IGZ1bmN0aW9uKGltZykgew0KICAgICAgaWYodHlwZW9mIGltZy5jb21wbGV0ZSAhPSAndW5kZWZpbmVkJyAmJiAhaW1nLmNvbXBsZXRlKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH07DQogICAgICBpZih0eXBlb2YgaW1nLm5hdHVyYWxXaWR0aCAhPSAndW5kZWZpbmVkJyAmJiBpbWcubmF0dXJhbFdpZHRoID09IDApIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0sDQogICAgaGlnaExpZ2h0VGh1bWI6IGZ1bmN0aW9uKHRodW1iKSB7DQogICAgICB0aGlzLnRodW1ic193cmFwcGVyLmZpbmQoJy5hZS1hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWUtYWN0aXZlJyk7DQogICAgICB0aHVtYi5hZGRDbGFzcygnYWUtYWN0aXZlJyk7DQogICAgICBpZih0aGlzLnNldHRpbmdzLnRodW1iX29wYWNpdHkgPCAxKSB7DQogICAgICAgIHRoaXMudGh1bWJzX3dyYXBwZXIuZmluZCgnYTpub3QoLmFlLWFjdGl2ZSkgaW1nJykuZmFkZVRvKDMwMCwgdGhpcy5zZXR0aW5ncy50aHVtYl9vcGFjaXR5KTsNCiAgICAgICAgdGh1bWIuZmluZCgnaW1nJykuZmFkZVRvKDMwMCwgMSk7DQogICAgICB9Ow0KICAgICAgdmFyIGxlZnQgPSB0aHVtYlswXS5wYXJlbnROb2RlLm9mZnNldExlZnQ7DQogICAgICBsZWZ0IC09ICh0aGlzLm5hdl9kaXNwbGF5X3dpZHRoIC8gMikgLSAodGh1bWJbMF0ub2Zmc2V0V2lkdGggLyAyKTsNCiAgICAgIHRoaXMudGh1bWJzX3dyYXBwZXIuYW5pbWF0ZSh7c2Nyb2xsTGVmdDogbGVmdCArJ3B4J30pOw0KICAgIH0sDQogICAgZmlyZUNhbGxiYWNrOiBmdW5jdGlvbihmbikgew0KICAgICAgaWYoJC5pc0Z1bmN0aW9uKGZuKSkgew0KICAgICAgICBmbi5jYWxsKHRoaXMpOw0KICAgICAgfTsNCiAgICB9DQogIH07DQoNCiAgZnVuY3Rpb24gQWVHYWxsZXJ5U2xpZGVzaG93KG5leHRpbWFnZV9jYWxsYmFjaywgc2V0dGluZ3MpIHsNCiAgICB0aGlzLmluaXQobmV4dGltYWdlX2NhbGxiYWNrLCBzZXR0aW5ncyk7DQogIH07DQogIEFlR2FsbGVyeVNsaWRlc2hvdy5wcm90b3R5cGUgPSB7DQogICAgc3RhcnRfbGluazogZmFsc2UsDQogICAgc3RvcF9saW5rOiBmYWxzZSwNCiAgICBjb3VudGRvd246IGZhbHNlLA0KICAgIGNvbnRyb2xzOiBmYWxzZSwNCg0KICAgIHNldHRpbmdzOiBmYWxzZSwNCiAgICBuZXh0aW1hZ2VfY2FsbGJhY2s6IGZhbHNlLA0KICAgIGVuYWJsZWQ6IGZhbHNlLA0KICAgIHJ1bm5pbmc6IGZhbHNlLA0KICAgIGNvdW50ZG93bl9pbnRlcnZhbDogZmFsc2UsDQogICAgaW5pdDogZnVuY3Rpb24obmV4dGltYWdlX2NhbGxiYWNrLCBzZXR0aW5ncykgew0KICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgdGhpcy5uZXh0aW1hZ2VfY2FsbGJhY2sgPSBuZXh0aW1hZ2VfY2FsbGJhY2s7DQogICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7DQogICAgfSwNCiAgICBjcmVhdGU6IGZ1bmN0aW9uKCkgew0KICAgICAgdGhpcy5zdGFydF9saW5rID0gJCgnPHNwYW4gY2xhc3M9ImFlLXNsaWRlc2hvdy1zdGFydCI+JysgdGhpcy5zZXR0aW5ncy5zdGFydF9sYWJlbCArJzwvc3Bhbj4nKTsNCiAgICAgIHRoaXMuc3RvcF9saW5rID0gJCgnPHNwYW4gY2xhc3M9ImFlLXNsaWRlc2hvdy1zdG9wIj4nKyB0aGlzLnNldHRpbmdzLnN0b3BfbGFiZWwgKyc8L3NwYW4+Jyk7DQogICAgICB0aGlzLmNvdW50ZG93biA9ICQoJzxzcGFuIGNsYXNzPSJhZS1zbGlkZXNob3ctY291bnRkb3duIj48L3NwYW4+Jyk7DQogICAgICB0aGlzLmNvbnRyb2xzID0gJCgnPGRpdiBjbGFzcz0iYWUtc2xpZGVzaG93LWNvbnRyb2xzIj48L2Rpdj4nKTsNCiAgICAgIHRoaXMuY29udHJvbHMuYXBwZW5kKHRoaXMuc3RhcnRfbGluaykuYXBwZW5kKHRoaXMuc3RvcF9saW5rKS5hcHBlbmQodGhpcy5jb3VudGRvd24pOw0KICAgICAgdGhpcy5jb3VudGRvd24uaGlkZSgpOw0KDQogICAgICB2YXIgY29udGV4dCA9IHRoaXM7DQogICAgICB0aGlzLnN0YXJ0X2xpbmsuY2xpY2soDQogICAgICAgIGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGNvbnRleHQuc3RhcnQoKTsNCiAgICAgICAgfQ0KICAgICAgKTsNCiAgICAgIHRoaXMuc3RvcF9saW5rLmNsaWNrKA0KICAgICAgICBmdW5jdGlvbigpIHsNCiAgICAgICAgICBjb250ZXh0LnN0b3AoKTsNCiAgICAgICAgfQ0KICAgICAgKTsNCiAgICAgICQoZG9jdW1lbnQpLmtleWRvd24oDQogICAgICAgIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICBpZihlLmtleUNvZGUgPT0gODMpIHsNCiAgICAgICAgICAgIC8vICdzJw0KICAgICAgICAgICAgaWYoY29udGV4dC5ydW5uaW5nKSB7DQogICAgICAgICAgICAgIGNvbnRleHQuc3RvcCgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY29udGV4dC5zdGFydCgpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICApOw0KICAgICAgcmV0dXJuIHRoaXMuY29udHJvbHM7DQogICAgfSwNCiAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHsNCiAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlOw0KICAgICAgdGhpcy5zdG9wKCk7DQogICAgICB0aGlzLmNvbnRyb2xzLmhpZGUoKTsNCiAgICB9LA0KICAgIGVuYWJsZTogZnVuY3Rpb24oKSB7DQogICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOw0KICAgICAgdGhpcy5jb250cm9scy5zaG93KCk7DQogICAgfSwNCiAgICB0b2dnbGU6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYodGhpcy5lbmFibGVkKSB7DQogICAgICAgIHRoaXMuZGlzYWJsZSgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5lbmFibGUoKTsNCiAgICAgIH07DQogICAgfSwNCiAgICBzdGFydDogZnVuY3Rpb24oKSB7DQogICAgICBpZih0aGlzLnJ1bm5pbmcgfHwgIXRoaXMuZW5hYmxlZCkgcmV0dXJuIGZhbHNlOw0KICAgICAgdmFyIGNvbnRleHQgPSB0aGlzOw0KICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsNCiAgICAgIHRoaXMuY29udHJvbHMuYWRkQ2xhc3MoJ2FlLXNsaWRlc2hvdy1ydW5uaW5nJyk7DQogICAgICB0aGlzLl9uZXh0KCk7DQogICAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnNldHRpbmdzLm9uU3RhcnQpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICBzdG9wOiBmdW5jdGlvbigpIHsNCiAgICAgIGlmKCF0aGlzLnJ1bm5pbmcpIHJldHVybiBmYWxzZTsNCiAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOw0KICAgICAgdGhpcy5jb3VudGRvd24uaGlkZSgpOw0KICAgICAgdGhpcy5jb250cm9scy5yZW1vdmVDbGFzcygnYWUtc2xpZGVzaG93LXJ1bm5pbmcnKTsNCiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb3VudGRvd25faW50ZXJ2YWwpOw0KICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5zZXR0aW5ncy5vblN0b3ApOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfSwNCiAgICBfbmV4dDogZnVuY3Rpb24oKSB7DQogICAgICB2YXIgY29udGV4dCA9IHRoaXM7DQogICAgICB2YXIgcHJlID0gdGhpcy5zZXR0aW5ncy5jb3VudGRvd25fcHJlZml4Ow0KICAgICAgdmFyIHN1ID0gdGhpcy5zZXR0aW5ncy5jb3VudGRvd25fc3VmaXg7DQogICAgICBjbGVhckludGVydmFsKGNvbnRleHQuY291bnRkb3duX2ludGVydmFsKTsNCiAgICAgIHRoaXMuY291bnRkb3duLnNob3coKS5odG1sKHByZSArICh0aGlzLnNldHRpbmdzLnNwZWVkIC8gMTAwMCkgKyBzdSk7DQogICAgICB2YXIgc2xpZGVfdGltZXIgPSAwOw0KICAgICAgdGhpcy5jb3VudGRvd25faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgNCiAgICAgICAgZnVuY3Rpb24oKSB7DQogICAgICAgICAgc2xpZGVfdGltZXIgKz0gMTAwMDsNCiAgICAgICAgICBpZihzbGlkZV90aW1lciA+PSBjb250ZXh0LnNldHRpbmdzLnNwZWVkKSB7DQogICAgICAgICAgICB2YXIgd2hlbk5leHRJc1Nob3duID0gZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIC8vIEEgY2hlY2sgc28gdGhlIHVzZXIgaGFzbid0IHN0b3BlZCB0aGUgc2xpZGVzaG93IGR1cmluZyB0aGUNCiAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uDQogICAgICAgICAgICAgIGlmKGNvbnRleHQucnVubmluZykgew0KICAgICAgICAgICAgICAgIGNvbnRleHQuX25leHQoKTsNCiAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgc2xpZGVfdGltZXIgPSAwOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGlmKCFjb250ZXh0Lm5leHRpbWFnZV9jYWxsYmFjayh3aGVuTmV4dElzU2hvd24pKSB7DQogICAgICAgICAgICAgIGNvbnRleHQuc3RvcCgpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHNsaWRlX3RpbWVyID0gMDsNCiAgICAgICAgICB9Ow0KICAgICAgICAgIHZhciBzZWMgPSBwYXJzZUludChjb250ZXh0LmNvdW50ZG93bi50ZXh0KCkucmVwbGFjZSgvW14wLTldL2csICcnKSwgMTApOw0KICAgICAgICAgIHNlYy0tOw0KICAgICAgICAgIGlmKHNlYyA+IDApIHsNCiAgICAgICAgICAgIGNvbnRleHQuY291bnRkb3duLmh0bWwocHJlICsgc2VjICsgc3UpOw0KICAgICAgICAgIH07DQogICAgICAgIH0sDQogICAgICAgIDEwMDANCiAgICAgICk7DQogICAgfSwNCiAgICBmaXJlQ2FsbGJhY2s6IGZ1bmN0aW9uKGZuKSB7DQogICAgICBpZigkLmlzRnVuY3Rpb24oZm4pKSB7DQogICAgICAgIGZuLmNhbGwodGhpcyk7DQogICAgICB9Ow0KICAgIH0NCiAgfTsNCn0pKGpRdWVyeSk7]]></data>
</file>
<file>
<filename>/loader.gif</filename>
<isdir>0</isdir>
<data><![CDATA[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]]></data>
</file>
<file>
<filename>/opa75.png</filename>
<isdir>0</isdir>
<data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+P///36AAAMACbsDvSYutrAAAAAASUVORK5CYII=]]></data>
</file>
</gallerytpl>
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com