PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSIvZmF2aWNvbi5pY28iPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KVEQge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYX0KQk9EWSB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhOyBtYXJnaW4tdG9wOiAyZW07IG1hcmdpbi1sZWZ0OiAwZW07IG1hcmdpbi1yaWdodDogMGVtfQpIMSB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpIMiB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpIMyB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpBOmxpbmssIEE6dmlzaXRlZCwgQTphY3RpdmUgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9Ci0tPjwvc3R5bGU+Cjx0aXRsZT5QeXRob24gYW5kIGJpbmRpbmdzPC90aXRsZT4KPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSIjOGI3NzY1IiB0ZXh0PSIjMDAwMDAwIiBsaW5rPSIjMDAwMDAwIiB2bGluaz0iIzAwMDAwMCI+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiPjx0cj4KPHRkIHdpZHRoPSIxODAiPgo8YSBocmVmPSJodHRwOi8vd3d3Lmdub21lLm9yZy8iPjxpbWcgc3JjPSJnbm9tZTIucG5nIiBhbHQ9Ikdub21lMiBMb2dvIj48L2E+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU3RhdHVzIj48aW1nIHNyYz0idzNjLnBuZyIgYWx0PSJXM0MgTG9nbyI+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cucmVkaGF0LmNvbS8iPjxpbWcgc3JjPSJyZWRoYXQuZ2lmIiBhbHQ9IlJlZCBIYXQgTG9nbyI+PC9hPjxkaXYgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy8iPjxpbWcgc3JjPSJMaWJ4bWwyLUxvZ28tMTgweDE2OC5naWYiIGFsdD0iTWFkZSB3aXRoIExpYnhtbDIgTG9nbyI+PC9hPjwvZGl2Pgo8L3RkPgo8dGQ+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjkwJSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjMDAwMDAwIj48dHI+PHRkPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjMiIGJnY29sb3I9IiNmZmZhY2QiPjx0cj48dGQgYWxpZ249ImNlbnRlciI+CjxoMT5UaGUgWE1MIEMgbGlicmFyeSBmb3IgR25vbWU8L2gxPgo8aDI+UHl0aG9uIGFuZCBiaW5kaW5nczwvaDI+CjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+CjwvdHI+PC90YWJsZT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciI+PHRyPjx0ZCBiZ2NvbG9yPSIjOGI3NzY1Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwMCIgYmdjb2xvcj0iIzhiNzc2NSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iIzAwMDAwMCI+PHRyPjx0ZD4KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMyI+Cjx0cj48dGQgY29sc3Bhbj0iMSIgYmdjb2xvcj0iI2VlY2ZhMSIgYWxpZ249ImNlbnRlciI+PGNlbnRlcj48Yj5NYWluIE1lbnU8L2I+PC9jZW50ZXI+PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPjx1bD4KPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkhvbWU8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImludHJvLmh0bWwiPkludHJvZHVjdGlvbjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iRkFRLmh0bWwiPkZBUTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iZG9jcy5odG1sIj5Eb2N1bWVudGF0aW9uPC9hPjwvbGk+CjxsaT48YSBocmVmPSJidWdzLmh0bWwiPlJlcG9ydGluZyBidWdzIGFuZCBnZXR0aW5nIGhlbHA8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImhlbHAuaHRtbCI+SG93IHRvIGhlbHA8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImRvd25sb2Fkcy5odG1sIj5Eb3dubG9hZHM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Im5ld3MuaHRtbCI+TmV3czwvYT48L2xpPgo8bGk+PGEgaHJlZj0iWE1MaW5mby5odG1sIj5YTUw8L2E+PC9saT4KPGxpPjxhIGhyZWY9IlhTTFQuaHRtbCI+WFNMVDwvYT48L2xpPgo8bGk+PGEgaHJlZj0icHl0aG9uLmh0bWwiPlB5dGhvbiBhbmQgYmluZGluZ3M8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImFyY2hpdGVjdHVyZS5odG1sIj5saWJ4bWwgYXJjaGl0ZWN0dXJlPC9hPjwvbGk+CjxsaT48YSBocmVmPSJ0cmVlLmh0bWwiPlRoZSB0cmVlIG91dHB1dDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaW50ZXJmYWNlLmh0bWwiPlRoZSBTQVggaW50ZXJmYWNlPC9hPjwvbGk+CjxsaT48YSBocmVmPSJ4bWxkdGQuaHRtbCI+VmFsaWRhdGlvbiAmYW1wOyBEVERzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJ4bWxtZW0uaHRtbCI+TWVtb3J5IE1hbmFnZW1lbnQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImVuY29kaW5nLmh0bWwiPkVuY29kaW5ncyBzdXBwb3J0PC9hPjwvbGk+CjxsaT48YSBocmVmPSJ4bWxpby5odG1sIj5JL08gSW50ZXJmYWNlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iY2F0YWxvZy5odG1sIj5DYXRhbG9nIHN1cHBvcnQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImxpYnJhcnkuaHRtbCI+VGhlIHBhcnNlciBpbnRlcmZhY2VzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJlbnRpdGllcy5odG1sIj5FbnRpdGllcyBvciBubyBlbnRpdGllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0ibmFtZXNwYWNlcy5odG1sIj5OYW1lc3BhY2VzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJ1cGdyYWRlLmh0bWwiPlVwZ3JhZGluZyAxLnggY29kZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0idGhyZWFkcy5odG1sIj5UaHJlYWQgc2FmZXR5PC9hPjwvbGk+CjxsaT48YSBocmVmPSJET00uaHRtbCI+RE9NIFByaW5jaXBsZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImV4YW1wbGUuaHRtbCI+QSByZWFsIGV4YW1wbGU8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImNvbnRyaWJzLmh0bWwiPkNvbnRyaWJ1dGlvbnM8L2E+PC9saT4KPGxpPjxhIGhyZWY9InhtbHJlYWRlci5odG1sIj5UaGUgUmVhZGVyIEludGVyZmFjZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imd1aWRlbGluZXMuaHRtbCI+WE1MIEd1aWRlbGluZXM8L2E+PC9saT4KPGxpPgo8YSBocmVmPSJ4bWwuaHRtbCI+ZmxhdCBwYWdlPC9hPiwgPGEgaHJlZj0ic2l0ZS54c2wiPnN0eWxlc2hlZXQ8L2E+CjwvbGk+CjwvdWw+PC90ZD48L3RyPgo8L3RhYmxlPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIj4KPHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPkFQSSBJbmRleGVzPC9iPjwvY2VudGVyPjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPSIjZmZmYWNkIj4KPGZvcm0gYWN0aW9uPSJzZWFyY2gucGhwIiBlbmN0eXBlPSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIG1ldGhvZD0iR0VUIj4KPGlucHV0IG5hbWU9InF1ZXJ5IiB0eXBlPSJURVhUIiBzaXplPSIyMCIgdmFsdWU9IiI+PGlucHV0IG5hbWU9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIC4uLiI+CjwvZm9ybT4KPHVsPgo8bGk+PGEgaHJlZj0iQVBJY2h1bmswLmh0bWwiPkFscGhhYmV0aWM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IkFQSWNvbnN0cnVjdG9ycy5odG1sIj5Db25zdHJ1Y3RvcnM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IkFQSWZ1bmN0aW9ucy5odG1sIj5GdW5jdGlvbnMvVHlwZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IkFQSWZpbGVzLmh0bWwiPk1vZHVsZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IkFQSXN5bWJvbHMuaHRtbCI+U3ltYm9sczwvYT48L2xpPgo8L3VsPgo8L3RkPjwvdHI+CjwvdGFibGU+Cjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjMiPgo8dHI+PHRkIGNvbHNwYW49IjEiIGJnY29sb3I9IiNlZWNmYTEiIGFsaWduPSJjZW50ZXIiPjxjZW50ZXI+PGI+UmVsYXRlZCBsaW5rczwvYj48L2NlbnRlcj48L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0iI2ZmZmFjZCI+PHVsPgo8bGk+PGEgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8iPk1haWwgYXJjaGl2ZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIj5YU0xUIGxpYnhzbHQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly9waGQuY3MudW5pYm8uaXQvZ2RvbWUyLyI+RE9NIGdkb21lMjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5hbGVrc2V5LmNvbS94bWxzZWMvIj5YTUwtRFNpZyB4bWxzZWM8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnLyI+RlRQPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnpsYXRrb3ZpYy5jb20vcHJvamVjdHMvbGlieG1sLyI+V2luZG93cyBiaW5hcmllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL2dhcnlwZW5uaW5ndG9uLm5ldC9saWJ4bWwyLyI+U29sYXJpcyBiaW5hcmllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy56dmVuby5jb20vb3Blbl9zb3VyY2UvbGlieG1sMnhzbHQuaHRtbCI+TWFjT3NYIGJpbmFyaWVzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnhtbDItcGFzLyI+UGFzY2FsIGJpbmRpbmdzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sJmFtcDtwcm9kdWN0PWxpYnhtbDIiPkJ1ZyBUcmFja2VyPC9hPjwvbGk+CjwvdWw+PC90ZD48L3RyPgo8L3RhYmxlPgo8L3RkPjwvdHI+PC90YWJsZT48L3RkPgo8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiM4Yjc3NjUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSIgd2lkdGg9IjEwMCUiPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iIzAwMDAwMCI+PHRyPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj48dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPgo8cD5UaGVyZSBhcmUgYSBudW1iZXIgb2YgbGFuZ3VhZ2UgYmluZGluZ3MgYW5kIHdyYXBwZXJzIGF2YWlsYWJsZSBmb3IKbGlieG1sMiwgdGhlIGxpc3QgYmVsb3cgaXMgbm90IGV4aGF1c3RpdmUuIFBsZWFzZSBjb250YWN0IHRoZSA8YSBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvbWFpbG1hbi9saXN0aW5mby94bWwtYmluZGluZ3MiPnhtbC1iaW5kaW5nc0Bnbm9tZS5vcmc8L2E+Cig8YSBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLWJpbmRpbmdzLyI+YXJjaGl2ZXM8L2E+KSBpbgpvcmRlciB0byBnZXQgdXBkYXRlcyB0byB0aGlzIGxpc3Qgb3IgdG8gZGlzY3VzcyB0aGUgc3BlY2lmaWMgdG9waWMgb2YgbGlieG1sMgpvciBsaWJ4c2x0IHdyYXBwZXJzIG9yIGJpbmRpbmdzOjwvcD4KPHVsPgo8bGk+CjxhIGhyZWY9Imh0dHA6Ly9saWJ4bWxwbHVzcGx1cy5zb3VyY2Vmb3JnZS5uZXQvIj5MaWJ4bWwrKzwvYT4gc2VlbXMgdGhlCiAgICBtb3N0IHVwLXRvLWRhdGUgQysrIGJpbmRpbmdzIGZvciBsaWJ4bWwyLCBjaGVjayB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYnhtbHBsdXNwbHVzLnNvdXJjZWZvcmdlLm5ldC9yZWZlcmVuY2UvaHRtbC9oaWVyYXJjaHkuaHRtbCI+ZG9jdW1lbnRhdGlvbjwvYT4KICAgIGFuZCB0aGUgPGEgaHJlZj0iaHR0cDovL2N2cy5zb3VyY2Vmb3JnZS5uZXQvY2dpLWJpbi92aWV3Y3ZzLmNnaS9saWJ4bWxwbHVzcGx1cy9saWJ4bWwlMmIlMmIvZXhhbXBsZXMvIj5leGFtcGxlczwvYT4uPC9saT4KICA8bGk+VGhlcmUgaXMgYW5vdGhlciA8YSBocmVmPSJodHRwOi8vbGliZ2RvbWUtY3BwLmJlcmxpb3MuZGUvIj5DKysgd3JhcHBlcgogICAgYmFzZWQgb24gdGhlIGdkb21lMiBiaW5kaW5nczwvYT4gbWFpbnRhaW5lZCBieSBUb2JpYXMgUGV0ZXJzLjwvbGk+CiAgPGxpPmFuZCBhIHRoaXJkIEMrKyB3cmFwcGVyIGJ5IFBldGVyIEpvbmVzICZsdDtwam9uZXNAcG1hZGUub3JnJmd0OwogICAgPHA+V2Vic2l0ZTogPGEgaHJlZj0iaHR0cDovL3BtYWRlLm9yZy9wam9uZXMvc29mdHdhcmUveG1sd3JhcHAvIj5odHRwOi8vcG1hZGUub3JnL3Bqb25lcy9zb2Z0d2FyZS94bWx3cmFwcC88L2E+CjwvcD4KICA8L2xpPgogIDxsaT4KPGEgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAxLU1hcmNoL21zZzAwMDE0Lmh0bWwiPk1hdHQKICAgIFNlcmdlYW50PC9hPiBkZXZlbG9wZWQgPGEgaHJlZj0iaHR0cDovL2F4a2l0Lm9yZy9kb3dubG9hZC8iPlhNTDo6TGliWFNMVDwvYT4sIGEgUGVybCB3cmFwcGVyIGZvcgogICAgbGlieG1sMi9saWJ4c2x0IGFzIHBhcnQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9heGtpdC5jb20vIj5BeEtpdCBYTUwKICAgIGFwcGxpY2F0aW9uIHNlcnZlcjwvYT4uPC9saT4KICA8bGk+CjxhIGhyZWY9Im1haWx0bzpka3VobG1hbkBjdXR0ZXIucmV4eC5jb20iPkRhdmUgS3VobG1hbjwvYT4gcHJvdmlkZXMgYW4KICAgIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgbGlieG1sL2xpYnhzbHQgPGEgaHJlZj0iaHR0cDovL3d3dy5yZXh4LmNvbS9+ZGt1aGxtYW4iPndyYXBwZXJzIGZvciBQeXRob248L2E+LjwvbGk+CiAgPGxpPkdvcGFsLlYgYW5kIFBldGVyIE1pbnRlbiBkZXZlbG9wIDxhIGhyZWY9Imh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2xpYnhtbHNoYXJwIj5saWJ4bWwjPC9hPiwgYSBzZXQgb2YKICAgIEMjIGxpYnhtbDIgYmluZGluZ3MuPC9saT4KICA8bGk+UGV0ciBLb3plbGthIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlieG1sMi1wYXMiPlBhc2NhbCB1bml0cyB0byBnbHVlCiAgICBsaWJ4bWwyPC9hPiB3aXRoIEt5bGl4LCBEZWxwaGkgYW5kIG90aGVyIFBhc2NhbCBjb21waWxlcnMuPC9saT4KICA8bGk+VXdlIEZlY2huZXIgYWxzbyBwcm92aWRlcyA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2lkb20yLXBhcy8iPmlkb20yPC9hPiwgYSBET00yCiAgICBpbXBsZW1lbnRhdGlvbiBmb3IgS3lsaXgyL0Q1L0Q2IGZyb20gQm9ybGFuZC48L2xpPgogIDxsaT5XYWktU3VuICZxdW90O1NxdWlkc3RlciZxdW90OyBDaGlhIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cucnVieWNvbG9yLm9yZy9hcmMvcmVkaXN0LyI+YmluZGluZ3MgZm9yIFJ1Ynk8L2E+ICBhbmQKICAgIGxpYnhtbDIgYmluZGluZ3MgYXJlIGFsc28gYXZhaWxhYmxlIGluIFJ1YnkgdGhyb3VnaCB0aGUgPGEgaHJlZj0iaHR0cDovL2xpYmdkb21lLXJ1YnkuYmVybGlvcy5kZS8iPmxpYmdkb21lLXJ1Ynk8L2E+IG1vZHVsZQogICAgbWFpbnRhaW5lZCBieSBUb2JpYXMgUGV0ZXJzLjwvbGk+CiAgPGxpPlN0ZXZlIEJhbGwgYW5kIGNvbnRyaWJ1dG9ycyBtYWludGFpbnMgPGEgaHJlZj0iaHR0cDovL3RjbHhtbC5zb3VyY2Vmb3JnZS5uZXQvIj5saWJ4bWwyIGFuZCBsaWJ4c2x0IGJpbmRpbmdzIGZvcgogICAgVGNsPC9hPi48L2xpPgogIDxsaT5UaGVyZSBpcyBzdXBwb3J0IGZvciBsaWJ4bWwyIGluIHRoZSBET00gbW9kdWxlIG9mIFBIUC48L2xpPgo8L3VsPgo8cD5UaGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgc2V0IG9mIFB5dGhvbiBiaW5kaW5ncywgd2hpY2ggYXJlIGd1YXJhbnRlZWQKdG8gYmUgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIHRoZSBsaWJyYXJ5IGluIHRoZSBmdXR1cmUsIHRob3VnaCB0aGUgUHl0aG9uCmludGVyZmFjZSBoYXZlIG5vdCB5ZXQgcmVhY2hlZCB0aGUgbWF0dXJpdHkgb2YgdGhlIEMgQVBJLjwvcD4KPHA+CjxhIGhyZWY9Im1haWx0bzpzdGVwaGFuZS5iaWRvdWxAc29mdHdhcmVhZy5jb20iPlN06XBoYW5lIEJpZG91bDwvYT4KbWFpbnRhaW5zIDxhIGhyZWY9Imh0dHA6Ly91c2Vycy5za3luZXQuYmUvc2JpL2xpYnhtbC1weXRob24vIj5hIFdpbmRvd3MgcG9ydApvZiB0aGUgUHl0aG9uIGJpbmRpbmdzPC9hPi48L3A+CjxwPk5vdGUgdG8gcGVvcGxlIGludGVyZXN0ZWQgaW4gYnVpbGRpbmcgYmluZGluZ3MsIHRoZSBBUEkgaXMgZm9ybWFsaXplZCBhcwo8YSBocmVmPSJsaWJ4bWwyLWFwaS54bWwiPmFuIFhNTCBBUEkgZGVzY3JpcHRpb24gZmlsZTwvYT4gd2hpY2ggYWxsb3dzIHRvCmF1dG9tYXRlIGEgbGFyZ2UgcGFydCBvZiB0aGUgUHl0aG9uIGJpbmRpbmdzLCB0aGlzIGluY2x1ZGVzIGZ1bmN0aW9uCmRlc2NyaXB0aW9ucywgZW51bXMsIHN0cnVjdHVyZXMsIHR5cGVkZWZzLCBldGMuLi4gVGhlIFB5dGhvbiBzY3JpcHQgdXNlZCB0bwpidWlsZCB0aGUgYmluZGluZ3MgaXMgcHl0aG9uL2dlbmVyYXRvci5weSBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi48L3A+CjxwPlRvIGluc3RhbGwgdGhlIFB5dGhvbiBiaW5kaW5ncyB0aGVyZSBhcmUgMiBvcHRpb25zOjwvcD4KPHVsPgo8bGk+SWYgeW91IHVzZSBhbiBSUE0gYmFzZWQgZGlzdHJpYnV0aW9uLCBzaW1wbHkgaW5zdGFsbCB0aGUgPGEgaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L2xpbnV4L3JwbTJodG1sL3NlYXJjaC5waHA/cXVlcnk9bGlieG1sMi1weXRob24iPmxpYnhtbDItcHl0aG9uCiAgICBSUE08L2E+IChhbmQgaWYgbmVlZGVkIHRoZSA8YSBocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvcnBtMmh0bWwvc2VhcmNoLnBocD9xdWVyeT1saWJ4c2x0LXB5dGhvbiI+bGlieHNsdC1weXRob24KICAgIFJQTTwvYT4pLjwvbGk+CiAgPGxpPk90aGVyd2lzZSB1c2UgdGhlIDxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnL3B5dGhvbi8iPmxpYnhtbDItcHl0aG9uCiAgICBtb2R1bGUgZGlzdHJpYnV0aW9uPC9hPiBjb3JyZXNwb25kaW5nIHRvIHlvdXIgaW5zdGFsbGVkIHZlcnNpb24gb2YKICAgIGxpYnhtbDIgYW5kIGxpYnhzbHQuIE5vdGUgdGhhdCB0byBpbnN0YWxsIGl0IHlvdSB3aWxsIG5lZWQgYm90aCBsaWJ4bWwyCiAgICBhbmQgbGlieHNsdCBpbnN0YWxsZWQgYW5kIHJ1biAmcXVvdDtweXRob24gc2V0dXAucHkgYnVpbGQgaW5zdGFsbCZxdW90OyBpbiB0aGUKICAgIG1vZHVsZSB0cmVlLjwvbGk+CjwvdWw+CjxwPlRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBzZXQgb2YgZXhhbXBsZXMgYW5kIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZQpweXRob24gYmluZGluZ3MgaW4gdGhlIDxjb2RlPnB5dGhvbi90ZXN0czwvY29kZT4gZGlyZWN0b3J5LiBIZXJlIGFyZSBzb21lCmV4Y2VycHRzIGZyb20gdGhvc2UgdGVzdHM6PC9wPgo8aDM+dHN0LnB5OjwvaDM+CjxwPlRoaXMgaXMgYSBiYXNpYyB0ZXN0IG9mIHRoZSBmaWxlIGludGVyZmFjZSBhbmQgRE9NIG5hdmlnYXRpb246PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCgpkb2MgPSBsaWJ4bWwyLnBhcnNlRmlsZSgmcXVvdDt0c3QueG1sJnF1b3Q7KQppZiBkb2MubmFtZSAhPSAmcXVvdDt0c3QueG1sJnF1b3Q7OgogICAgcHJpbnQgJnF1b3Q7ZG9jLm5hbWUgZmFpbGVkJnF1b3Q7CiAgICBzeXMuZXhpdCgxKQpyb290ID0gZG9jLmNoaWxkcmVuCmlmIHJvb3QubmFtZSAhPSAmcXVvdDtkb2MmcXVvdDs6CiAgICBwcmludCAmcXVvdDtyb290Lm5hbWUgZmFpbGVkJnF1b3Q7CiAgICBzeXMuZXhpdCgxKQpjaGlsZCA9IHJvb3QuY2hpbGRyZW4KaWYgY2hpbGQubmFtZSAhPSAmcXVvdDtmb28mcXVvdDs6CiAgICBwcmludCAmcXVvdDtjaGlsZC5uYW1lIGZhaWxlZCZxdW90OwogICAgc3lzLmV4aXQoMSkKZG9jLmZyZWVEb2MoKTwvcHJlPgo8cD5UaGUgUHl0aG9uIG1vZHVsZSBpcyBjYWxsZWQgbGlieG1sMjsgcGFyc2VGaWxlIGlzIHRoZSBlcXVpdmFsZW50IG9mCnhtbFBhcnNlRmlsZSAobW9zdCBvZiB0aGUgYmluZGluZ3MgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBhbmQgdGhlIHhtbApwcmVmaXggaXMgcmVtb3ZlZCBhbmQgdGhlIGNhc2luZyBjb252ZW50aW9uIGFyZSBrZXB0KS4gQWxsIG5vZGUgc2VlbiBhdCB0aGUKYmluZGluZyBsZXZlbCBzaGFyZSB0aGUgc2FtZSBzdWJzZXQgb2YgYWNjZXNzb3JzOjwvcD4KPHVsPgo8bGk+Cjxjb2RlPm5hbWU8L2NvZGU+IDogcmV0dXJucyB0aGUgbm9kZSBuYW1lPC9saT4KICA8bGk+Cjxjb2RlPnR5cGU8L2NvZGU+IDogcmV0dXJucyBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBub2RlIHR5cGU8L2xpPgogIDxsaT4KPGNvZGU+Y29udGVudDwvY29kZT4gOiByZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub2RlLCBpdCBpcyBiYXNlZCBvbgogICAgeG1sTm9kZUdldENvbnRlbnQoKSBhbmQgaGVuY2UgaXMgcmVjdXJzaXZlLjwvbGk+CiAgPGxpPgo8Y29kZT5wYXJlbnQ8L2NvZGU+ICwgPGNvZGU+Y2hpbGRyZW48L2NvZGU+LCA8Y29kZT5sYXN0PC9jb2RlPiwKICAgIDxjb2RlPm5leHQ8L2NvZGU+LCA8Y29kZT5wcmV2PC9jb2RlPiwgPGNvZGU+ZG9jPC9jb2RlPiwKICAgIDxjb2RlPnByb3BlcnRpZXM8L2NvZGU+OiBwb2ludGluZyB0byB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IGluIHRoZSB0cmVlLAogICAgdGhvc2UgbWF5IHJldHVybiBOb25lIGluIGNhc2Ugbm8gc3VjaCBsaW5rIGV4aXN0cy48L2xpPgo8L3VsPgo8cD5BbHNvIG5vdGUgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBkZWFsbG9jYXRlIGRvY3VtZW50cyB3aXRoIGZyZWVEb2MoKSAuClJlZmVyZW5jZSBjb3VudGluZyBmb3IgbGlieG1sMiB0cmVlcyB3b3VsZCBuZWVkIHF1aXRlIGEgbG90IG9mIHdvcmsgdG8KZnVuY3Rpb24gcHJvcGVybHksIGFuZCByYXRoZXIgdGhhbiByaXNrIG1lbW9yeSBsZWFrcyBpZiBub3QgaW1wbGVtZW50ZWQKY29ycmVjdGx5IGl0IHNvdW5kcyBzYWZlciB0byBoYXZlIGFuIGV4cGxpY2l0IGZ1bmN0aW9uIHRvIGZyZWUgYSB0cmVlLiBUaGUKd3JhcHBlciBweXRob24gb2JqZWN0cyBsaWtlIGRvYywgcm9vdCBvciBjaGlsZCBhcmUgdGhlbSBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UKY29sbGVjdGVkLjwvcD4KPGgzPnZhbGlkYXRlLnB5OjwvaDM+CjxwPlRoaXMgdGVzdCBjaGVjayB0aGUgdmFsaWRhdGlvbiBpbnRlcmZhY2VzIGFuZCByZWRpcmVjdGlvbiBvZiBlcnJvcgptZXNzYWdlczo8L3A+CjxwcmU+aW1wb3J0IGxpYnhtbDIKCiNkZWFjdGl2YXRlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIHZhbGlkYXRpb24KZGVmIG5vZXJyKGN0eCwgc3RyKToKICAgIHBhc3MKCmxpYnhtbDIucmVnaXN0ZXJFcnJvckhhbmRsZXIobm9lcnIsIE5vbmUpCgpjdHh0ID0gbGlieG1sMi5jcmVhdGVGaWxlUGFyc2VyQ3R4dCgmcXVvdDtpbnZhbGlkLnhtbCZxdW90OykKY3R4dC52YWxpZGF0ZSgxKQpjdHh0LnBhcnNlRG9jdW1lbnQoKQpkb2MgPSBjdHh0LmRvYygpCnZhbGlkID0gY3R4dC5pc1ZhbGlkKCkKZG9jLmZyZWVEb2MoKQppZiB2YWxpZCAhPSAwOgogICAgcHJpbnQgJnF1b3Q7dmFsaWRpdHkgY2hlY2sgZmFpbGVkJnF1b3Q7PC9wcmU+CjxwPlRoZSBmaXJzdCB0aGluZyB0byBub3RpY2UgaXMgdGhlIGNhbGwgdG8gcmVnaXN0ZXJFcnJvckhhbmRsZXIoKSwgaXQKZGVmaW5lcyBhIG5ldyBlcnJvciBoYW5kbGVyIGdsb2JhbCB0byB0aGUgbGlicmFyeS4gSXQgaXMgdXNlZCB0byBhdm9pZCBzZWVpbmcKdGhlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdHJ5aW5nIHRvIHZhbGlkYXRlIHRoZSBpbnZhbGlkIGRvY3VtZW50LjwvcD4KPHA+VGhlIG1haW4gaW50ZXJlc3Qgb2YgdGhhdCB0ZXN0IGlzIHRoZSBjcmVhdGlvbiBvZiBhIHBhcnNlciBjb250ZXh0IHdpdGgKY3JlYXRlRmlsZVBhcnNlckN0eHQoKSBhbmQgaG93IHRoZSBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQgYmVmb3JlIGNhbGxpbmcKcGFyc2VEb2N1bWVudCgpIC4gU2ltaWxhcmx5IHRoZSBpbmZvcm1hdGlvbnMgcmVzdWx0aW5nIGZyb20gdGhlIHBhcnNpbmcgcGhhc2UKYXJlIGFsc28gYXZhaWxhYmxlIHVzaW5nIGNvbnRleHQgbWV0aG9kcy48L3A+CjxwPkNvbnRleHRzIGxpa2Ugbm9kZXMgYXJlIGRlZmluZWQgYXMgY2xhc3MgYW5kIHRoZSBsaWJ4bWwyIHdyYXBwZXJzIG1hcHMgdGhlCkMgZnVuY3Rpb24gaW50ZXJmYWNlcyBpbiB0ZXJtcyBvZiBvYmplY3RzIG1ldGhvZCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGUKYmVzdCB0byBnZXQgYSBjb21wbGV0ZSB2aWV3IG9mIHdoYXQgbWV0aG9kcyBhcmUgc3VwcG9ydGVkIGlzIHRvIGxvb2sgYXQgdGhlCmxpYnhtbDIucHkgbW9kdWxlIGNvbnRhaW5pbmcgYWxsIHRoZSB3cmFwcGVycy48L3A+CjxoMz5wdXNoLnB5OjwvaDM+CjxwPlRoaXMgdGVzdCBzaG93IGhvdyB0byBhY3RpdmF0ZSB0aGUgcHVzaCBwYXJzZXIgaW50ZXJmYWNlOjwvcD4KPHByZT5pbXBvcnQgbGlieG1sMgoKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihOb25lLCAmcXVvdDsmbHQ7Zm9vJnF1b3Q7LCA0LCAmcXVvdDt0ZXN0LnhtbCZxdW90OykKY3R4dC5wYXJzZUNodW5rKCZxdW90Oy8mZ3Q7JnF1b3Q7LCAyLCAxKQpkb2MgPSBjdHh0LmRvYygpCgpkb2MuZnJlZURvYygpPC9wcmU+CjxwPlRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgd2l0aCBhIHNwZWNpYWwgY2FsbCBiYXNlZCBvbiB0aGUKeG1sQ3JlYXRlUHVzaFBhcnNlcigpIGZyb20gdGhlIEMgbGlicmFyeS4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsClNBWCBjYWxsYmFjayBvYmplY3QsIHRoZW4gdGhlIGluaXRpYWwgc2V0IG9mIGRhdGEsIHRoZSBsZW5ndGggYW5kIHRoZSBuYW1lIG9mCnRoZSByZXNvdXJjZSBpbiBjYXNlIFVSSS1SZWZlcmVuY2VzIG5lZWQgdG8gYmUgY29tcHV0ZWQgYnkgdGhlIHBhcnNlci48L3A+CjxwPlRoZW4gdGhlIGRhdGEgYXJlIHB1c2hlZCB1c2luZyB0aGUgcGFyc2VDaHVuaygpIG1ldGhvZCwgdGhlIGxhc3QgY2FsbApzZXR0aW5nIHRoZSB0aGlyZCBhcmd1bWVudCB0ZXJtaW5hdGUgdG8gMS48L3A+CjxoMz5wdXNoU0FYLnB5OjwvaDM+CjxwPnRoaXMgdGVzdCBzaG93IHRoZSB1c2Ugb2YgdGhlIGV2ZW50IGJhc2VkIHBhcnNpbmcgaW50ZXJmYWNlcy4gSW4gdGhpcyBjYXNlCnRoZSBwYXJzZXIgZG9lcyBub3QgYnVpbGQgYSBkb2N1bWVudCwgYnV0IHByb3ZpZGVzIGNhbGxiYWNrIGluZm9ybWF0aW9uIGFzCnRoZSBwYXJzZXIgbWFrZXMgcHJvZ3Jlc3NlcyBhbmFseXppbmcgdGhlIGRhdGEgYmVpbmcgcHJvdmlkZWQ6PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCmxvZyA9ICZxdW90OyZxdW90OwoKY2xhc3MgY2FsbGJhY2s6CiAgICBkZWYgc3RhcnREb2N1bWVudChzZWxmKToKICAgICAgICBnbG9iYWwgbG9nCiAgICAgICAgbG9nID0gbG9nICsgJnF1b3Q7c3RhcnREb2N1bWVudDomcXVvdDsKCiAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O2VuZERvY3VtZW50OiZxdW90OwoKICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgdGFnLCBhdHRycyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O3N0YXJ0RWxlbWVudCAlcyAlczomcXVvdDsgJSAodGFnLCBhdHRycykKCiAgICBkZWYgZW5kRWxlbWVudChzZWxmLCB0YWcpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAmcXVvdDtlbmRFbGVtZW50ICVzOiZxdW90OyAlICh0YWcpCgogICAgZGVmIGNoYXJhY3RlcnMoc2VsZiwgZGF0YSk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O2NoYXJhY3RlcnM6ICVzOiZxdW90OyAlIChkYXRhKQoKICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O3dhcm5pbmc6ICVzOiZxdW90OyAlIChtc2cpCgogICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O2Vycm9yOiAlczomcXVvdDsgJSAobXNnKQoKICAgIGRlZiBmYXRhbEVycm9yKHNlbGYsIG1zZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICZxdW90O2ZhdGFsRXJyb3I6ICVzOiZxdW90OyAlIChtc2cpCgpoYW5kbGVyID0gY2FsbGJhY2soKQoKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihoYW5kbGVyLCAmcXVvdDsmbHQ7Zm9vJnF1b3Q7LCA0LCAmcXVvdDt0ZXN0LnhtbCZxdW90OykKY2h1bmsgPSAmcXVvdDsgdXJsPSd0c3QnJmd0O2ImcXVvdDsKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAwKQpjaHVuayA9ICZxdW90O2FyJmx0Oy9mb28mZ3Q7JnF1b3Q7CmN0eHQucGFyc2VDaHVuayhjaHVuaywgbGVuKGNodW5rKSwgMSkKCnJlZmVyZW5jZSA9ICZxdW90O3N0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyB7J3VybCc6ICd0c3QnfTomcXVvdDsgKyBcIAogICAgICAgICAgICAmcXVvdDtjaGFyYWN0ZXJzOiBiYXI6ZW5kRWxlbWVudCBmb286ZW5kRG9jdW1lbnQ6JnF1b3Q7CmlmIGxvZyAhPSByZWZlcmVuY2U6CiAgICBwcmludCAmcXVvdDtFcnJvciBnb3Q6ICVzJnF1b3Q7ICUgbG9nCiAgICBwcmludCAmcXVvdDtFeHBlY3RlZDogJXMmcXVvdDsgJSByZWZlcmVuY2U8L3ByZT4KPHA+VGhlIGtleSBvYmplY3QgaW4gdGhhdCB0ZXN0IGlzIHRoZSBoYW5kbGVyLCBpdCBwcm92aWRlcyBhIG51bWJlciBvZiBlbnRyeQpwb2ludHMgd2hpY2ggY2FuIGJlIGNhbGxlZCBieSB0aGUgcGFyc2VyIGFzIGl0IG1ha2VzIHByb2dyZXNzZXMgdG8gaW5kaWNhdGUKdGhlIGluZm9ybWF0aW9uIHNldCBvYnRhaW5lZC4gVGhlIGZ1bGwgc2V0IG9mIGNhbGxiYWNrIGlzIGxhcmdlciB0aGFuIHdoYXQKdGhlIGNhbGxiYWNrIGNsYXNzIGluIHRoYXQgc3BlY2lmaWMgZXhhbXBsZSBpbXBsZW1lbnRzIChzZWUgdGhlIFNBWApkZWZpbml0aW9uIGZvciBhIGNvbXBsZXRlIGxpc3QpLiBUaGUgd3JhcHBlciB3aWxsIG9ubHkgY2FsbCB0aG9zZSBzdXBwbGllZCBieQp0aGUgb2JqZWN0IHdoZW4gYWN0aXZhdGVkLiBUaGUgc3RhcnRFbGVtZW50IHJlY2VpdmVzIHRoZSBuYW1lcyBvZiB0aGUgZWxlbWVudAphbmQgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZXMgY2FycmllZCBieSB0aGlzIGVsZW1lbnQuPC9wPgo8cD5BbHNvIG5vdGUgdGhhdCB0aGUgcmVmZXJlbmNlIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSB0aGUgY2FsbGJhY2sgc2hvd3MgYQpzaW5nbGUgY2hhcmFjdGVyIGNhbGwgZXZlbiB0aG91Z2ggdGhlIHN0cmluZyAmcXVvdDtiYXImcXVvdDsgaXMgcGFzc2VkIHRvIHRoZSBwYXJzZXIKZnJvbSAyIGRpZmZlcmVudCBjYWxsIHRvIHBhcnNlQ2h1bmsoKTwvcD4KPGgzPnhwYXRoLnB5OjwvaDM+CjxwPlRoaXMgaXMgYSBiYXNpYyB0ZXN0IG9mIFhQYXRoIHdyYXBwZXJzIHN1cHBvcnQ8L3A+CjxwcmU+aW1wb3J0IGxpYnhtbDIKCmRvYyA9IGxpYnhtbDIucGFyc2VGaWxlKCZxdW90O3RzdC54bWwmcXVvdDspCmN0eHQgPSBkb2MueHBhdGhOZXdDb250ZXh0KCkKcmVzID0gY3R4dC54cGF0aEV2YWwoJnF1b3Q7Ly8qJnF1b3Q7KQppZiBsZW4ocmVzKSAhPSAyOgogICAgcHJpbnQgJnF1b3Q7eHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHNpemUmcXVvdDsKICAgIHN5cy5leGl0KDEpCmlmIHJlc1swXS5uYW1lICE9ICZxdW90O2RvYyZxdW90OyBvciByZXNbMV0ubmFtZSAhPSAmcXVvdDtmb28mcXVvdDs6CiAgICBwcmludCAmcXVvdDt4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUmcXVvdDsKICAgIHN5cy5leGl0KDEpCmRvYy5mcmVlRG9jKCkKY3R4dC54cGF0aEZyZWVDb250ZXh0KCk8L3ByZT4KPHA+VGhpcyB0ZXN0IHBhcnNlcyBhIGZpbGUsIHRoZW4gY3JlYXRlIGFuIFhQYXRoIGNvbnRleHQgdG8gZXZhbHVhdGUgWFBhdGgKZXhwcmVzc2lvbiBvbiBpdC4gVGhlIHhwYXRoRXZhbCgpIG1ldGhvZCBleGVjdXRlIGFuIFhQYXRoIHF1ZXJ5IGFuZCByZXR1cm5zCnRoZSByZXN1bHQgbWFwcGVkIGluIGEgUHl0aG9uIHdheS4gU3RyaW5nIGFuZCBudW1iZXJzIGFyZSBuYXRpdmVseSBjb252ZXJ0ZWQsCmFuZCBub2RlIHNldHMgYXJlIHJldHVybmVkIGFzIGEgdHVwbGUgb2YgbGlieG1sMiBQeXRob24gbm9kZXMgd3JhcHBlcnMuIExpa2UKdGhlIGRvY3VtZW50LCB0aGUgWFBhdGggY29udGV4dCBuZWVkIHRvIGJlIGZyZWVkIGV4cGxpY2l0bHksIGFsc28gbm90IHRoYXQKdGhlIHJlc3VsdCBvZiB0aGUgWFBhdGggcXVlcnkgbWF5IHBvaW50IGJhY2sgdG8gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGhlbmNlCnRoZSBkb2N1bWVudCBtdXN0IGJlIGZyZWVkIGFmdGVyIHRoZSByZXN1bHQgb2YgdGhlIHF1ZXJ5IGlzIHVzZWQuPC9wPgo8aDM+eHBhdGhleHQucHk6PC9oMz4KPHA+VGhpcyB0ZXN0IHNob3dzIGhvdyB0byBleHRlbmQgdGhlIFhQYXRoIGVuZ2luZSB3aXRoIGZ1bmN0aW9ucyB3cml0dGVuIGluCnB5dGhvbjo8L3A+CjxwcmU+aW1wb3J0IGxpYnhtbDIKCmRlZiBmb28oY3R4LCB4KToKICAgIHJldHVybiB4ICsgMQoKZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoJnF1b3Q7dHN0LnhtbCZxdW90OykKY3R4dCA9IGRvYy54cGF0aE5ld0NvbnRleHQoKQpsaWJ4bWwyLnJlZ2lzdGVyWFBhdGhGdW5jdGlvbihjdHh0Ll9vLCAmcXVvdDtmb28mcXVvdDssIE5vbmUsIGZvbykKcmVzID0gY3R4dC54cGF0aEV2YWwoJnF1b3Q7Zm9vKDEpJnF1b3Q7KQppZiByZXMgIT0gMjoKICAgIHByaW50ICZxdW90O3hwYXRoIGV4dGVuc2lvbiBmYWlsdXJlJnF1b3Q7CmRvYy5mcmVlRG9jKCkKY3R4dC54cGF0aEZyZWVDb250ZXh0KCk8L3ByZT4KPHA+Tm90ZSBob3cgdGhlIGV4dGVuc2lvbiBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGNvbnRleHQgKGJ1dCB0aGF0CnBhcnQgaXMgbm90IHlldCBmaW5hbGl6ZWQsIHRoaXMgbWF5IGNoYW5nZSBzbGlnaHRseSBpbiB0aGUgZnV0dXJlKS48L3A+CjxoMz50c3R4cGF0aC5weTo8L2gzPgo8cD5UaGlzIHRlc3QgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgb25lIGJ1dCBzaG93cyBob3cgdGhlIGV4dGVuc2lvbgpmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBYUGF0aCBldmFsdWF0aW9uIGNvbnRleHQ6PC9wPgo8cHJlPmRlZiBmb28oY3R4LCB4KToKICAgIGdsb2JhbCBjYWxsZWQKCiAgICAjCiAgICAjIHRlc3QgdGhhdCBhY2Nlc3MgdG8gdGhlIFhQYXRoIGV2YWx1YXRpb24gY29udGV4dHMKICAgICMKICAgIHBjdHh0ID0gbGlieG1sMi54cGF0aFBhcnNlckNvbnRleHQoX29iaj1jdHgpCiAgICBjdHh0ID0gcGN0eHQuY29udGV4dCgpCiAgICBjYWxsZWQgPSBjdHh0LmZ1bmN0aW9uKCkKICAgIHJldHVybiB4ICsgMTwvcHJlPgo8cD5BbGwgdGhlIGludGVyZmFjZXMgYXJvdW5kIHRoZSBYUGF0aCBwYXJzZXIob3IgcmF0aGVyIGV2YWx1YXRpb24pIGNvbnRleHQKYXJlIG5vdCBmaW5hbGl6ZWQsIGJ1dCBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBkbyBjb250ZXh0dWFsIHdvcmsgYXQgdGhlCmV2YWx1YXRpb24gcG9pbnQuPC9wPgo8aDM+TWVtb3J5IGRlYnVnZ2luZzo8L2gzPgo8cD5sYXN0IGJ1dCBub3QgbGVhc3QsIGFsbCB0ZXN0cyBzdGFydHMgd2l0aCB0aGUgZm9sbG93aW5nIHByb2xvZ3VlOjwvcD4KPHByZT4jbWVtb3J5IGRlYnVnIHNwZWNpZmljCmxpYnhtbDIuZGVidWdNZW1vcnkoMSk8L3ByZT4KPHA+YW5kIGVuZHMgd2l0aCB0aGUgZm9sbG93aW5nIGVwaWxvZ3VlOjwvcD4KPHByZT4jbWVtb3J5IGRlYnVnIHNwZWNpZmljCmxpYnhtbDIuY2xlYW51cFBhcnNlcigpCmlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKICAgIHByaW50ICZxdW90O09LJnF1b3Q7CmVsc2U6CiAgICBwcmludCAmcXVvdDtNZW1vcnkgbGVhayAlZCBieXRlcyZxdW90OyAlIChsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpKQogICAgbGlieG1sMi5kdW1wTWVtb3J5KCk8L3ByZT4KPHA+VGhvc2UgYWN0aXZhdGUgdGhlIG1lbW9yeSBkZWJ1Z2dpbmcgaW50ZXJmYWNlIG9mIGxpYnhtbDIgd2hlcmUgYWxsCmFsbG9jYXRlZCBibG9jayBpbiB0aGUgbGlicmFyeSBhcmUgdHJhY2tlZC4gVGhlIHByb2xvZ3VlIHRoZW4gY2xlYW5zIHVwIHRoZQpsaWJyYXJ5IHN0YXRlIGFuZCBjaGVja3MgdGhhdCBhbGwgYWxsb2NhdGVkIG1lbW9yeSBoYXMgYmVlbiBmcmVlZC4gSWYgbm90IGl0CmNhbGxzIGR1bXBNZW1vcnkoKSB3aGljaCBzYXZlcyB0aGF0IGxpc3QgaW4gYSA8Y29kZT4ubWVtZHVtcDwvY29kZT4gZmlsZS48L3A+CjxwPjxhIGhyZWY9ImJ1Z3MuaHRtbCI+RGFuaWVsIFZlaWxsYXJkPC9hPjwvcD4KPC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PC90ZD4KPC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPgo8L2JvZHk+CjwvaHRtbD4K