PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KPGh0bWw+CjxoZWFkPgo8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSIvZmF2aWNvbi5pY28iPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KVEQge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYX0KQk9EWSB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhOyBtYXJnaW4tdG9wOiAyZW07IG1hcmdpbi1sZWZ0OiAwZW07IG1hcmdpbi1yaWdodDogMGVtfQpIMSB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpIMiB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpIMyB7Zm9udC1mYW1pbHk6IFZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhfQpBOmxpbmssIEE6dmlzaXRlZCwgQTphY3RpdmUgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9Ci0tPjwvc3R5bGU+Cjx0aXRsZT5JL08gSW50ZXJmYWNlczwvdGl0bGU+CjwvaGVhZD4KPGJvZHkgYmdjb2xvcj0iIzhiNzc2NSIgdGV4dD0iIzAwMDAwMCIgbGluaz0iIzAwMDAwMCIgdmxpbms9IiMwMDAwMDAiPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0iY2VudGVyIj48dHI+Cjx0ZCB3aWR0aD0iMTgwIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5nbm9tZS5vcmcvIj48aW1nIHNyYz0ic21hbGxmb290b25seS5naWYiIGFsdD0iR25vbWUgTG9nbyI+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1N0YXR1cyI+PGltZyBzcmM9InczYy5wbmciIGFsdD0iVzNDIExvZ28iPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LnJlZGhhdC5jb20vIj48aW1nIHNyYz0icmVkaGF0LmdpZiIgYWx0PSJSZWQgSGF0IExvZ28iPjwvYT4KPC90ZD4KPHRkPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI5MCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iIzAwMDAwMCI+PHRyPjx0ZD48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIiBiZ2NvbG9yPSIjZmZmYWNkIj48dHI+PHRkIGFsaWduPSJjZW50ZXIiPgo8aDE+VGhlIFhNTCBDIGxpYnJhcnkgZm9yIEdub21lPC9oMT4KPGgyPkkvTyBJbnRlcmZhY2VzPC9oMj4KPC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PC90ZD4KPC90cj48L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj48dHI+PHRkIGJnY29sb3I9IiM4Yjc3NjUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KPHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAwIiBiZ2NvbG9yPSIjOGI3NzY1Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjMDAwMDAwIj48dHI+PHRkPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIj4KPHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPk1haW4gTWVudTwvYj48L2NlbnRlcj48L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0iI2ZmZmFjZCI+PHVsPgo8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCI+SG9tZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaW50cm8uaHRtbCI+SW50cm9kdWN0aW9uPC9hPjwvbGk+CjxsaT48YSBocmVmPSJGQVEuaHRtbCI+RkFRPC9hPjwvbGk+CjxsaT48YSBocmVmPSJkb2NzLmh0bWwiPkRvY3VtZW50YXRpb248L2E+PC9saT4KPGxpPjxhIGhyZWY9ImJ1Z3MuaHRtbCI+UmVwb3J0aW5nIGJ1Z3MgYW5kIGdldHRpbmcgaGVscDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaGVscC5odG1sIj5Ib3cgdG8gaGVscDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iZG93bmxvYWRzLmh0bWwiPkRvd25sb2FkczwvYT48L2xpPgo8bGk+PGEgaHJlZj0ibmV3cy5odG1sIj5OZXdzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJYTUxpbmZvLmh0bWwiPlhNTDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iWFNMVC5odG1sIj5YU0xUPC9hPjwvbGk+CjxsaT48YSBocmVmPSJweXRob24uaHRtbCI+UHl0aG9uIGFuZCBiaW5kaW5nczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iYXJjaGl0ZWN0dXJlLmh0bWwiPmxpYnhtbCBhcmNoaXRlY3R1cmU8L2E+PC9saT4KPGxpPjxhIGhyZWY9InRyZWUuaHRtbCI+VGhlIHRyZWUgb3V0cHV0PC9hPjwvbGk+CjxsaT48YSBocmVmPSJpbnRlcmZhY2UuaHRtbCI+VGhlIFNBWCBpbnRlcmZhY2U8L2E+PC9saT4KPGxpPjxhIGhyZWY9InhtbGR0ZC5odG1sIj5WYWxpZGF0aW9uICZhbXA7IERURHM8L2E+PC9saT4KPGxpPjxhIGhyZWY9InhtbG1lbS5odG1sIj5NZW1vcnkgTWFuYWdlbWVudDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iZW5jb2RpbmcuaHRtbCI+RW5jb2RpbmdzIHN1cHBvcnQ8L2E+PC9saT4KPGxpPjxhIGhyZWY9InhtbGlvLmh0bWwiPkkvTyBJbnRlcmZhY2VzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJjYXRhbG9nLmh0bWwiPkNhdGFsb2cgc3VwcG9ydDwvYT48L2xpPgo8bGk+PGEgaHJlZj0ibGlicmFyeS5odG1sIj5UaGUgcGFyc2VyIGludGVyZmFjZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9ImVudGl0aWVzLmh0bWwiPkVudGl0aWVzIG9yIG5vIGVudGl0aWVzPC9hPjwvbGk+CjxsaT48YSBocmVmPSJuYW1lc3BhY2VzLmh0bWwiPk5hbWVzcGFjZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9InVwZ3JhZGUuaHRtbCI+VXBncmFkaW5nIDEueCBjb2RlPC9hPjwvbGk+CjxsaT48YSBocmVmPSJ0aHJlYWRzLmh0bWwiPlRocmVhZCBzYWZldHk8L2E+PC9saT4KPGxpPjxhIGhyZWY9IkRPTS5odG1sIj5ET00gUHJpbmNpcGxlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iZXhhbXBsZS5odG1sIj5BIHJlYWwgZXhhbXBsZTwvYT48L2xpPgo8bGk+PGEgaHJlZj0iY29udHJpYnMuaHRtbCI+Q29udHJpYnV0aW9uczwvYT48L2xpPgo8bGk+PGEgaHJlZj0idHV0b3JpYWwvaW5kZXguaHRtbCI+VHV0b3JpYWw8L2E+PC9saT4KPGxpPgo8YSBocmVmPSJ4bWwuaHRtbCI+ZmxhdCBwYWdlPC9hPiwgPGEgaHJlZj0ic2l0ZS54c2wiPnN0eWxlc2hlZXQ8L2E+CjwvbGk+CjwvdWw+PC90ZD48L3RyPgo8L3RhYmxlPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIj4KPHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPkFQSSBJbmRleGVzPC9iPjwvY2VudGVyPjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPSIjZmZmYWNkIj48dWw+CjxsaT48YSBocmVmPSJBUEljaHVuazAuaHRtbCI+QWxwaGFiZXRpYzwvYT48L2xpPgo8bGk+PGEgaHJlZj0iQVBJY29uc3RydWN0b3JzLmh0bWwiPkNvbnN0cnVjdG9yczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iQVBJZnVuY3Rpb25zLmh0bWwiPkZ1bmN0aW9ucy9UeXBlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iQVBJZmlsZXMuaHRtbCI+TW9kdWxlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iQVBJc3ltYm9scy5odG1sIj5TeW1ib2xzPC9hPjwvbGk+CjwvdWw+PC90ZD48L3RyPgo8L3RhYmxlPgo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIj4KPHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPlJlbGF0ZWQgbGlua3M8L2I+PC9jZW50ZXI+PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPjx1bD4KPGxpPjxhIGhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvIj5NYWlsIGFyY2hpdmU8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9YU0xULyI+WFNMVCBsaWJ4c2x0PC9hPjwvbGk+CjxsaT48YSBocmVmPSJodHRwOi8vcGhkLmNzLnVuaWJvLml0L2dkb21lMi8iPkRPTSBnZG9tZTI8L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYWxla3NleS5jb20veG1sc2VjLyI+WE1MLURTaWcgeG1sc2VjPC9hPjwvbGk+CjxsaT48YSBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy8iPkZUUDwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5maC1mcmFua2Z1cnQuZGUvfmlnb3IvcHJvamVjdHMvbGlieG1sLyI+V2luZG93cyBiaW5hcmllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL2dhcnlwZW5uaW5ndG9uLm5ldC9saWJ4bWwyLyI+U29sYXJpcyBiaW5hcmllczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ4bWwyLXBhcy8iPlBhc2NhbCBiaW5kaW5nczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PWxpYnhtbCZhbXA7cHJvZHVjdD1saWJ4bWwyIj5CdWcgVHJhY2tlcjwvYT48L2xpPgo8L3VsPjwvdGQ+PC90cj4KPC90YWJsZT4KPC90ZD48L3RyPjwvdGFibGU+PC90ZD4KPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjOGI3NzY1Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiIHdpZHRoPSIxMDAlIj48dHI+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiMwMDAwMDAiPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCBiZ2NvbG9yPSIjZmZmYWNkIj4KPHA+VGFibGUgb2YgQ29udGVudDo8L3A+CjxvbD4KPGxpPjxhIGhyZWY9IiNHZW5lcmFsMSI+R2VuZXJhbCBvdmVydmlldzwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI2Jhc2ljIj5UaGUgYmFzaWMgYnVmZmVyIHR5cGU8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNJbnB1dCI+SW5wdXQgSS9PIGhhbmRsZXJzPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjT3V0cHV0Ij5PdXRwdXQgSS9PIGhhbmRsZXJzPC9hPjwvbGk+CjxsaT48YSBocmVmPSIjZW50aXRpZXMiPlRoZSBlbnRpdGllcyBsb2FkZXI8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNFeGFtcGxlMiI+RXhhbXBsZSBvZiBjdXN0b21pemVkIEkvTzwvYT48L2xpPgo8L29sPgo8aDM+PGEgbmFtZT0iR2VuZXJhbDEiPkdlbmVyYWwgb3ZlcnZpZXc8L2E+PC9oMz4KPHA+VGhlIG1vZHVsZSA8Y29kZT48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwteG1saW8uaHRtbCI+eG1sSU8uaDwvYT48L2NvZGU+IHByb3ZpZGVzCnRoZSBpbnRlcmZhY2VzIHRvIHRoZSBsaWJ4bWwgSS9PIHN5c3RlbS4gVGhpcyBjb25zaXN0cyBvZiA0IG1haW4gcGFydHM6PC9wPgo8dWw+CjxsaT5FbnRpdGllcyBsb2FkZXIsIHRoaXMgaXMgYSByb3V0aW5lIHdoaWNoIHRyaWVzIHRvIGZldGNoIHRoZSBlbnRpdGllcwogICAgKGZpbGVzKSBiYXNlZCBvbiB0aGVpciBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVycy4gVGhlIGRlZmF1bHQgbG9hZGVyCiAgICBkb24ndCBsb29rIGF0IHRoZSBwdWJsaWMgaWRlbnRpZmllciBzaW5jZSBsaWJ4bWwgZG8gbm90IG1haW50YWluIGEKICAgIGNhdGFsb2cuIFlvdSBjYW4gcmVkZWZpbmUgeW91IG93biBlbnRpdHkgbG9hZGVyIGJ5IHVzaW5nCiAgICA8Y29kZT54bWxHZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpPC9jb2RlPiBhbmQKICAgIDxjb2RlPnhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyKCk8L2NvZGU+LiA8YSBocmVmPSIjZW50aXRpZXMiPkNoZWNrIHRoZQogICAgZXhhbXBsZTwvYT4uPC9saT4KPGxpPklucHV0IEkvTyBidWZmZXJzIHdoaWNoIGFyZSBhIGNvbW1vZGl0eSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgcGFyc2VyKHMpCiAgICBpbnB1dCBsYXllciB0byBoYW5kbGUgZmV0Y2hpbmcgdGhlIGluZm9ybWF0aW9ucyB0byBmZWVkIHRoZSBwYXJzZXIuIFRoaXMKICAgIHByb3ZpZGVzIGJ1ZmZlcmluZyBhbmQgaXMgYWxzbyBhIHBsYWNlaG9sZGVyIHdoZXJlIHRoZSBlbmNvZGluZwogICAgY29udmVydGVycyB0byBVVEY4IGFyZSBwaWdneS1iYWNrZWQuPC9saT4KPGxpPk91dHB1dCBJL08gYnVmZmVycyBhcmUgc2ltaWxhciB0byB0aGUgSW5wdXQgb25lcyBhbmQgZnVsZmlsbCBzaW1pbGFyCiAgICB0YXNrIGJ1dCB3aGVuIGdlbmVyYXRpbmcgYSBzZXJpYWxpemF0aW9uIGZyb20gYSB0cmVlLjwvbGk+CjxsaT5BIG1lY2hhbmlzbSB0byByZWdpc3RlciBzZXRzIG9mIEkvTyBjYWxsYmFja3MgYW5kIGFzc29jaWF0ZSB0aGVtIHdpdGgKICAgIHNwZWNpZmljIG5hbWluZyBzY2hlbWVzIGxpa2UgdGhlIHByb3RvY29sIHBhcnQgb2YgdGhlIFVSSXMuCiAgICA8cD5UaGlzIGFmZmVjdCB0aGUgZGVmYXVsdCBJL08gb3BlcmF0aW9ucyBhbmQgYWxsb3dzIHRvIHVzZSBzcGVjaWZpYyBJL08KICAgIGhhbmRsZXJzIGZvciBjZXJ0YWluIG5hbWVzLjwvcD4KPC9saT4KPC91bD4KPHA+VGhlIGdlbmVyYWwgbWVjaGFuaXNtIHVzZWQgd2hlbiBsb2FkaW5nIGh0dHA6Ly9ycG1maW5kLm5ldC94bWwuaHRtbCBmb3IKZXhhbXBsZSBpbiB0aGUgSFRNTCBwYXJzZXIgaXMgdGhlIGZvbGxvd2luZzo8L3A+CjxvbD4KPGxpPlRoZSBkZWZhdWx0IGVudGl0eSBsb2FkZXIgY2FsbHMgPGNvZGU+eG1sTmV3SW5wdXRGcm9tRmlsZSgpPC9jb2RlPiB3aXRoCiAgICB0aGUgcGFyc2luZyBjb250ZXh0IGFuZCB0aGUgVVJJIHN0cmluZy48L2xpPgo8bGk+dGhlIFVSSSBzdHJpbmcgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBleGlzdGluZyByZWdpc3RlcmVkIGhhbmRsZXJzCiAgICB1c2luZyB0aGVpciBtYXRjaCgpIGNhbGxiYWNrIGZ1bmN0aW9uLCBpZiB0aGUgSFRUUCBtb2R1bGUgd2FzIGNvbXBpbGVkCiAgICBpbiwgaXQgaXMgcmVnaXN0ZXJlZCBhbmQgaXRzIG1hdGNoKCkgZnVuY3Rpb24gd2lsbCBzdWNjZWVkczwvbGk+CjxsaT50aGUgb3BlbigpIGZ1bmN0aW9uIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhbmQgaWYgc3VjY2Vzc2Z1bCB3aWxsCiAgICByZXR1cm4gYW4gSS9PIElucHV0IGJ1ZmZlcjwvbGk+CjxsaT50aGUgcGFyc2VyIHdpbGwgdGhlIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGlzIGJ1ZmZlciBhbmQgcHJvZ3Jlc3NpdmVseQogICAgZmV0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzb3VyY2UsIGNhbGxpbmcgdGhlIHJlYWQoKSBmdW5jdGlvbiBvZiB0aGUKICAgIGhhbmRsZXIgdW50aWwgdGhlIHJlc291cmNlIGlzIGV4aGF1c3RlZDwvbGk+CjxsaT5pZiBhbiBlbmNvZGluZyBjaGFuZ2UgaXMgZGV0ZWN0ZWQgaXQgd2lsbCBiZSBpbnN0YWxsZWQgb24gdGhlIGlucHV0CiAgICBidWZmZXIsIHByb3ZpZGluZyBidWZmZXJpbmcgYW5kIGVmZmljaWVudCB1c2Ugb2YgdGhlIGNvbnZlcnNpb24KICByb3V0aW5lczwvbGk+CjxsaT5vbmNlIHRoZSBwYXJzZXIgaGFzIGZpbmlzaGVkLCB0aGUgY2xvc2UoKSBmdW5jdGlvbiBvZiB0aGUgaGFuZGxlciBpcwogICAgY2FsbGVkIG9uY2UgYW5kIHRoZSBJbnB1dCBidWZmZXIgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGFyZQogIGRlYWxsb2NhdGVkLjwvbGk+Cjwvb2w+CjxwPlRoZSB1c2VyIGRlZmluZWQgY2FsbGJhY2tzIGFyZSBjaGVja2VkIGZpcnN0IHRvIGFsbG93IG92ZXJyaWRpbmcgb2YgdGhlCmRlZmF1bHQgbGlieG1sIEkvTyByb3V0aW5lcy48L3A+CjxoMz48YSBuYW1lPSJiYXNpYyI+VGhlIGJhc2ljIGJ1ZmZlciB0eXBlPC9hPjwvaDM+CjxwPkFsbCB0aGUgYnVmZmVyIG1hbmlwdWxhdGlvbiBoYW5kbGluZyBpcyBkb25lIHVzaW5nIHRoZQo8Y29kZT54bWxCdWZmZXI8L2NvZGU+IHR5cGUgZGVmaW5lIGluIDxjb2RlPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC10cmVlLmh0bWwiPnRyZWUuaDwvYT48L2NvZGU+d2hpY2ggaXMgYQpyZXNpemFibGUgbWVtb3J5IGJ1ZmZlci4gVGhlIGJ1ZmZlciBhbGxvY2F0aW9uIHN0cmF0ZWd5IGNhbiBiZSBzZWxlY3RlZCB0byBiZQplaXRoZXIgYmVzdC1maXQgb3IgdXNlIGFuIGV4cG9uZW50aWFsIGRvdWJsaW5nIG9uZSAoQ1BVIHZzLiBtZW1vcnkgdXNlCnRyYWRlLW9mZikuIFRoZSB2YWx1ZXMgYXJlIDxjb2RlPlhNTF9CVUZGRVJfQUxMT0NfRVhBQ1Q8L2NvZGU+IGFuZAo8Y29kZT5YTUxfQlVGRkVSX0FMTE9DX0RPVUJMRUlUPC9jb2RlPiwgYW5kIGNhbiBiZSBzZXQgaW5kaXZpZHVhbGx5IG9yIG9uIGEKc3lzdGVtIHdpZGUgYmFzaXMgdXNpbmcgPGNvZGU+eG1sQnVmZmVyU2V0QWxsb2NhdGlvblNjaGVtZSgpPC9jb2RlPi4gQSBudW1iZXIKb2YgZnVuY3Rpb25zIGFsbG93cyB0byBtYW5pcHVsYXRlIGJ1ZmZlcnMgd2l0aCBuYW1lcyBzdGFydGluZyB3aXRoIHRoZQo8Y29kZT54bWxCdWZmZXIuLi48L2NvZGU+IHByZWZpeC48L3A+CjxoMz48YSBuYW1lPSJJbnB1dCI+SW5wdXQgSS9PIGhhbmRsZXJzPC9hPjwvaDM+CjxwPkFuIElucHV0IEkvTyBoYW5kbGVyIGlzIGEgc2ltcGxlIHN0cnVjdHVyZQo8Y29kZT54bWxQYXJzZXJJbnB1dEJ1ZmZlcjwvY29kZT4gY29udGFpbmluZyBhIGNvbnRleHQgYXNzb2NpYXRlZCB0byB0aGUKcmVzb3VyY2UgKGZpbGUgZGVzY3JpcHRvciwgb3IgcG9pbnRlciB0byBhIHByb3RvY29sIGhhbmRsZXIpLCB0aGUgcmVhZCgpIGFuZApjbG9zZSgpIGNhbGxiYWNrcyB0byB1c2UgYW5kIGFuIHhtbEJ1ZmZlci4gQW5kIGV4dHJhIHhtbEJ1ZmZlciBhbmQgYSBjaGFyc2V0CmVuY29kaW5nIGhhbmRsZXIgYXJlIGFsc28gcHJlc2VudCB0byBzdXBwb3J0IGNoYXJzZXQgY29udmVyc2lvbiB3aGVuCm5lZWRlZC48L3A+CjxoMz48YSBuYW1lPSJPdXRwdXQiPk91dHB1dCBJL08gaGFuZGxlcnM8L2E+PC9oMz4KPHA+QW4gT3V0cHV0IGhhbmRsZXIgPGNvZGU+eG1sT3V0cHV0QnVmZmVyPC9jb2RlPiBpcyBjb21wbGV0ZWx5IHNpbWlsYXIgdG8gYW4KSW5wdXQgb25lIGV4Y2VwdCB0aGUgY2FsbGJhY2tzIGFyZSB3cml0ZSgpIGFuZCBjbG9zZSgpLjwvcD4KPGgzPjxhIG5hbWU9ImVudGl0aWVzIj5UaGUgZW50aXRpZXMgbG9hZGVyPC9hPjwvaDM+CjxwPlRoZSBlbnRpdHkgbG9hZGVyIHJlc29sdmVzIHJlcXVlc3RzIGZvciBuZXcgZW50aXRpZXMgYW5kIGNyZWF0ZSBpbnB1dHMgZm9yCnRoZSBwYXJzZXIuIENyZWF0aW5nIGFuIGlucHV0IGZyb20gYSBmaWxlbmFtZSBvciBhbiBVUkkgc3RyaW5nIGlzIGRvbmUKdGhyb3VnaCB0aGUgeG1sTmV3SW5wdXRGcm9tRmlsZSgpIHJvdXRpbmUuICBUaGUgZGVmYXVsdCBlbnRpdHkgbG9hZGVyIGRvIG5vdApoYW5kbGUgdGhlIFBVQkxJQyBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCBhbiBlbnRpdHkgKGlmIGFueSkuIFNvIGl0IGp1c3QKY2FsbHMgeG1sTmV3SW5wdXRGcm9tRmlsZSgpIHdpdGggdGhlIFNZU1RFTSBpZGVudGlmaWVyICh3aGljaCBpcyBtYW5kYXRvcnkgaW4KWE1MKS48L3A+CjxwPklmIHlvdSB3YW50IHRvIGhvb2sgdXAgYSBjYXRhbG9nIG1lY2hhbmlzbSB0aGVuIHlvdSBzaW1wbHkgbmVlZCB0bwpvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnRpdHkgbG9hZGVyLCBoZXJlIGlzIGFuIGV4YW1wbGU6PC9wPgo8cHJlPiNpbmNsdWRlICZsdDtsaWJ4bWwveG1sSU8uaCZndDsKCnhtbEV4dGVybmFsRW50aXR5TG9hZGVyIGRlZmF1bHRMb2FkZXIgPSBOVUxMOwoKeG1sUGFyc2VySW5wdXRQdHIKeG1sTXlFeHRlcm5hbEVudGl0eUxvYWRlcihjb25zdCBjaGFyICpVUkwsIGNvbnN0IGNoYXIgKklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CiAgICB4bWxQYXJzZXJJbnB1dFB0ciByZXQ7CiAgICBjb25zdCBjaGFyICpmaWxlSUQgPSBOVUxMOwogICAgLyogbG9va3VwIGZvciB0aGUgZmlsZUlEIGRlcGVuZGluZyBvbiBJRCAqLwoKICAgIHJldCA9IHhtbE5ld0lucHV0RnJvbUZpbGUoY3R4dCwgZmlsZUlEKTsKICAgIGlmIChyZXQgIT0gTlVMTCkKICAgICAgICByZXR1cm4ocmV0KTsKICAgIGlmIChkZWZhdWx0TG9hZGVyICE9IE5VTEwpCiAgICAgICAgcmV0ID0gZGVmYXVsdExvYWRlcihVUkwsIElELCBjdHh0KTsKICAgIHJldHVybihyZXQpOwp9CgppbnQgbWFpbiguLikgewogICAgLi4uCgogICAgLyoKICAgICAqIEluc3RhbGwgb3VyIG93biBlbnRpdHkgbG9hZGVyCiAgICAgKi8KICAgIGRlZmF1bHRMb2FkZXIgPSB4bWxHZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpOwogICAgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoeG1sTXlFeHRlcm5hbEVudGl0eUxvYWRlcik7CgogICAgLi4uCn08L3ByZT4KPGgzPjxhIG5hbWU9IkV4YW1wbGUyIj5FeGFtcGxlIG9mIGN1c3RvbWl6ZWQgSS9PPC9hPjwvaDM+CjxwPlRoaXMgZXhhbXBsZSBjb21lIGZyb20gPGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL21lc3NhZ2VzLzA3MDguaHRtbCI+YQpyZWFsIHVzZSBjYXNlPC9hPiwgIHhtbERvY0R1bXAoKSBjbG9zZXMgdGhlIEZJTEUgKiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uCmFuZCB0aGlzIHdhcyBhIHByb2JsZW0uIFRoZSA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvbWVzc2FnZXMvMDcxMS5odG1sIj5zb2x1dGlvbjwvYT4gd2FzIHRvIHJlZGVmaW5lIGEKbmV3IG91dHB1dCBoYW5kbGVyIHdpdGggdGhlIGNsb3NpbmcgY2FsbCBkZWFjdGl2YXRlZDo8L3A+CjxvbD4KPGxpPkZpcnN0IGRlZmluZSBhIG5ldyBJL08gb3V0cHV0IGFsbG9jYXRvciB3aGVyZSB0aGUgb3V0cHV0IGRvbid0IGNsb3NlCiAgICB0aGUgZmlsZToKICAgIDxwcmU+eG1sT3V0cHV0QnVmZmVyUHRyCnhtbE91dHB1dEJ1ZmZlckNyZWF0ZU93bihGSUxFICpmaWxlLCB4bWxDaGFyRW5jb2RpbmdIYW5kbGVyUHRyIGVuY29kZXIpIHsKoKCgoHhtbE91dHB1dEJ1ZmZlclB0ciByZXQ7CqCgoKAKoKCgoGlmICh4bWxPdXRwdXRDYWxsYmFja0luaXRpYWxpemVkID09IDApCqCgoKCgoKCgeG1sUmVnaXN0ZXJEZWZhdWx0T3V0cHV0Q2FsbGJhY2tzKCk7CgqgoKCgaWYgKGZpbGUgPT0gTlVMTCkgcmV0dXJuKE5VTEwpOwqgoKCgcmV0ID0geG1sQWxsb2NPdXRwdXRCdWZmZXIoZW5jb2Rlcik7CqCgoKBpZiAocmV0ICE9IE5VTEwpIHsKoKCgoKCgoKByZXQtJmd0O2NvbnRleHQgPSBmaWxlOwqgoKCgoKCgoHJldC0mZ3Q7d3JpdGVjYWxsYmFjayA9IHhtbEZpbGVXcml0ZTsKoKCgoKCgoKByZXQtJmd0O2Nsb3NlY2FsbGJhY2sgPSBOVUxMOyAgLyogTm8gY2xvc2UgY2FsbGJhY2sgKi8KoKCgoH0KoKCgoHJldHVybihyZXQpOyA8YnI+CgoKCgoKCgoKCgoKCgoKfSA8L3ByZT4KPC9saT4KPGxpPkFuZCB0aGVuIHVzZSBpdCB0byBzYXZlIHRoZSBkb2N1bWVudDoKICAgIDxwcmU+RklMRSAqZjsKeG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dDsKeG1sRG9jUHRyIGRvYzsKaW50IHJlczsKCmYgPSAuLi4KZG9jID0gLi4uLgoKb3V0cHV0ID0geG1sT3V0cHV0QnVmZmVyQ3JlYXRlT3duKGYsIE5VTEwpOwpyZXMgPSB4bWxTYXZlRmlsZVRvKG91dHB1dCwgZG9jLCBOVUxMKTsKICAgIDwvcHJlPgo8L2xpPgo8L29sPgo8cD48YSBocmVmPSJidWdzLmh0bWwiPkRhbmllbCBWZWlsbGFyZDwvYT48L3A+CjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+CjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+Cg==