PGh0bWw+CjxoZWFkPgo8dGl0bGU+QnVpbGRpbmcgYW4gTVBJIHByb2dyYW0gd2l0aCBNYW5hZ2VkIEJ1aWxkPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPGgxPkJ1aWxkaW5nIGFuIE1QSSBwcm9ncmFtIHdpdGggTWFuYWdlZCBCdWlsZDwvaDE+CjxwPlRvcGljcyBpbmNsdWRlOgo8dWw+CjxsaT48YSBocmVmPSIjY3JlYXRlIj5DcmVhdGluZyBhbiBNUEkgcHJvamVjdCA8L2E+Cgo8bGk+PGEgaHJlZj0iI2luY2x1ZGUiPkluY2x1ZGUgcGF0aHM8L2E+CjxsaT48YSBocmVmPSIjbXBpY2MiPnNwZWNpZnlpbmcgdGhlIG1waWNjIHRvb2xjaGFpbjwvYT4KPGxpPjxhIGhyZWY9IiNsYXVuY2giPmxhdW5jaGluZyBhbiBNUEkgcHJvZ3JhbSA8L2E+IGxvY2FsbHkgdXNpbmcgJ0V4dGVybmFsICBUb29scy4uLicgCihieSBzcGVjaWZ5aW5nIHRoZSBtcGlydW4gY29tbWFuZCk/CjwvdWw+CgoKCjxoMiBpZD0iY3JlYXRlIj5DcmVhdGUgYW4gTVBJIFByb2plY3Q8L2gyPgo8cD5UbyBjcmVhdGUgYSBuZXcgTVBJIHByb2plY3QgaW4gQyB1c2luZyB0aGUgbWFuYWdlZCBidWlsZCBmYWNpbGl0eSwKU2VsZWN0IEZpbGUgLT4gTmV3IC0+IFByb2plY3QgLi4uICBUaGUgTmV3IFByb2plY3QgZGlhbG9nIG9wZW5zLgo8YnI+U2VsZWN0IEMgLT4gTWFuYWdlZCBNYWtlIEMgUHJvamVjdC4KPHA+PGI+Tm90ZTogPC9iPiBmb3IgYXV0b21hdGljIHNldHVwIG9mIE1QSSBwcm9qZWN0IGluZm9ybWF0aW9uLApzZWUgdGhlIFBMRFQncwo8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5wdHAucGxkdC5oZWxwL2h0bWwvc2V0dXAuaHRtbCI+IE1QSSBQcm9qZWN0IHNldHVwIGluZm9ybWF0aW9uPC9hPgppbiB0aGUgCjxhIGhyZWY9Ii4uLy4uL29yZy5lY2xpcHNlLnB0cC5wbGR0LmhlbHAvaHRtbC90b2MuaHRtbCI+ClBUUCBQTERUIChQYXJhbGxlbCBMYW5ndWFnZSBEZXZlbG9wbWVudCBUb29scykgaGVscC4KPC9hPgoKSWYgeW91IGhhdmUgc2V0IHVwIHRoZSBNUEkgcHJvamVjdCBpbmZvcm1hdGlvbiB0aGlzIHdheSwgCnlvdSBjYW4gY2hlY2sgYSBzaW5nbGUgYm94IG9uIHRoZSBhZGRpdGlvbmFsIHdpemFyZCBwYWdlIGVudGl0bGVkICJNUEkgUHJvamVjdCBTZXR0aW5ncywiCnNraXAgdGhlIHJlc3QKb2YgdGhpcyBzZWN0aW9uIGFuZCBwcm9jZWVkIHRvIDxhIGhyZWY9IjAycExhdW5jaENvbmZpZy5odG1sIj5sYXVuY2ggdGhlIHBhcmFsbGVsIHByb2dyYW0uPC9hPgo8cD5JZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgUExEVCBpbnN0YWxsZWQsIHlvdSBtdXN0IHNldCB1cCB0aGUgcHJvamVjdAppbmZvcm1hdGlvbiBtYW51YWxseSwgYXMgZm9sbG93cy4KPHA+PGltZyBzcmM9ImltYWdlcy9uZXdQcm9qZWN0LmdpZiI+Cjxicj5DbGljayBOZXh0Lgo8YnI+VHlwZSB0aGUgbmFtZSBvZiB5b3VyIHByb2plY3QsIGUuZy4gTXlDUHJvamVjdAo8YnI+PGltZyBzcmM9ImltYWdlcy9uZXdQcm9qZWN0Mi5naWYiPgo8YnI+Q2xpY2sgRmluaXNoLgo8cD5BIGRpYWxvZyBwcm9tcHRzIHlvdSB0byBzd2l0Y2ggdG8gdGhlIEMvQysrIFBlcnNwZWN0aXZlLiBIaXQgT0suClRoZSBDL0MrKyBQZXJzcGVjdGl2ZSBhcHBlYXJzLgo8cD5Zb3VyIG5ldyBwcm9qZWN0IGlzIHNob3duIGluIHRoZSBDL0MrKyBQcm9qZWN0cyB2aWV3Lgo8YnI+PGltZyBzcmM9ImltYWdlcy9jUGVyc3AuZ2lmIj4KPHA+Tm93IGNyZWF0ZSBhIHNvdXJjZSBmaWxlLgpDbGljayBGaWxlIC0+IE5ldyAtPiBTb3VyY2UgRmlsZS4gIAo8YnI+VHlwZSBhIG5hbWUgZm9yIHRoZSBzb3VyY2UgZmlsZSwgZS5nLiAidGVzdC5jIgo8YnI+PGltZyBzcmM9ImltYWdlcy9uZXdTb3VyY2VGaWxlLmdpZiI+Cjxicj5DbGljayBGaW5pc2guCjxwPkEgbmV3IGVkaXRvciBhcHBlYXJzLCBpbiB3aGljaCB5b3UgY2FuIGVudGVyIHlvdXIgcHJvZ3JhbS4KPGJyPjxpbWcgc3JjPSJpbWFnZXMvbmV3RWRpdG9yLmdpZiI+CjxwPlNpbmNlIHRoaXMgaXMgYSBtYW5hZ2VkIGJ1aWxkIHByb2plY3QsIEVjbGlwc2UgY3JlYXRlcyBhIG1ha2VmaWxlCmFuZCB0cmllcyB0byBidWlsZCB3aXRoIHRoZSBuZXcgZmlsZS4gIFNpbmNlIHRoZSBmaWxlIGlzIGVtcHR5LAp5b3Ugd2lsbCBzZWUgZXJyb3JzIGluIHRoZSBQcm9ibGVtcyB2aWV3LCBhbmQgaW4gdGhlIENvbnNvbGUgdmlldy4KPGJyPjxpbWcgc3JjPSJpbWFnZXMvbmV3RmlsZUVycm9ycy5naWYiPgo8cD5FbnRlciBhIHByb2dyYW0gaW4gdGhlIGVkaXRvci4KKElmIHlvdSBoYXZlIHRoZSBQVFAgUExEVCBpbnN0YWxsZWQsIGEgc2FtcGxlIHByb2dyYW0gaXMgYXZhaWxhYmxlIAppbiB0aGUgUFRQIE1QSSB0b29scyBoZWxwLCBhdmFpbGFibGUgYXM6IAo8YSBocmVmPSIuLi8uLi9vcmcuZWNsaXBzZS5wdHAucGxkdC5oZWxwL2h0bWwvdGVzdE1QSS5jIj50ZXN0TVBJLmM8L2E+KQo8IS0tICBUT0RPIEkgZG9uJ3QgdGhpbmsgdGhhdCByZWxhdGl2ZSBVUkwgd2lsbCB3b3JrIGluIGluc3RhbGxlZCBwbHVnLWluIC0tPiAKPHA+QSBzYW1wbGUgImhlbGxvIHdvcmxkIiB0eXBlIE1QSSBwcm9ncmFtIGlzIGFsc28gYSBnb29kCmZpcnN0IHRlc3QgcHJvZ3JhbToKPHByZT4KI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDttcGkuaCZndDsKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewogICAgaW50IHJhbms7CiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwogICAgcHJpbnRmKJNteSByYW5rPSVkXG6ULCByYW5rKTsKICAgIE1QSV9GaW5hbGl6ZSgpOwogICAgcmV0dXJuIDA7Cn0KCjwvcHJlPgo8cD5TYXZlIHlvdXIgcHJvZ3JhbS4gIFRoZSBwcm9ncmFtIHdpbGwgYmUgY29tcGlsZWQgYXV0b21hdGljYWxseSBieQp0aGUgbWFuYWdlZCBidWlsZCBzeXN0ZW0uCjxwPllvdSBtYXkgc2VlIHNldmVyYWwgZXJyb3JzLCBpZiB5b3UgaGF2ZW4ndCBzZXQgdXAgdGhlCk1QSSBpbmZvcm1hdGlvbiBmb3IgeW91ciBwcm9qZWN0LgpUaGUgZmlyc3QgZXJyb3IgbWF5IGJlIHRoYXQgYW4gaW5jbHVkZSBmaWxlIGlzbid0IGZvdW5kLgo8YnI+PGltZyBzcmM9ImltYWdlcy9lcnJvckluY2x1ZGUuZ2lmIj4KPGJyPihJZiB5b3UgaG92ZXIgdGhlIG1vdXNlIGN1cnNvciBvdmVyIHRoZSByZWQgIlgiCnlvdSB3aWxsIHNlZSB0aGUgcmVhc29uIGZvciB0aGUgZXJyb3IpCjxoMiBpZD0iaW5jbHVkZSI+SW5jbHVkZSBQYXRoczwvaDI+CjxwPkluIG9yZGVyIHRvIGxvY2F0ZSBuZWVkZWQgaW5jbHVkZSBmaWxlcywgYnJpbmcgdXAgdGhlIFByb2plY3QgUHJvcGVydGllcyBvbiB0aGlzIEMvQysrIHByb2plY3QuCgo8YnI+VG8gYnJpbmcgdXAgdGhlIFByb2plY3QgUHJvcGVydGllcyBkaWFsb2csCmFjdGl2YXRlIHRoZSBjb250ZXh0IG1lbnUgIG9uIHRoZSBQcm9qZWN0LCBhbmQgc2VsZWN0ICJQcm9wZXJ0aWVzLiIKPGJyPjxpbWcgc3JjPSJpbWFnZXMvcHJvalByb3BzLmdpZiI+CjxwPgpUaGUgcHJvamVjdCBwcm9wZXJ0aWVzIHdpbmRvdyBpcyBkaXNwbGF5ZWQgZm9yIHRoaXMgQyBwcm9qZWN0LgpTZWxlY3QgIkMvQysrIEJ1aWxkIiBvbiB0aGUgbGVmdCwgYW5kIHVuZGVyICJDb25maWd1cmF0aW9uIHNldHRpbmdzIiAKb24gdGhlICJUb29sIFNldHRpbmdzIiB0YWIsIHNlbGVjdCAiRGlyZWN0b3JpZXMiIHVuZGVyICJHQ0MgQ29tcGlsZXIuIgpUaGlzIGxpc3RzIHRoZSBJbmNsdWRlIHBhdGhzIHVzZWQgdG8gYnVpbGQgdGhlIHByb2plY3QsIHdoaWNoIGFyZSBub3cKZW1wdHkuCiAKPGJyPjxpbWcgc3JjPSJpbWFnZXMvcHJvcHNCdWlsZC5naWYiPgo8cD5UbyBhZGQgYW4gaW5jbHVkZSBwYXRoLCBjbGljayB0aGUgYWRkIGJ1dHRvbiBmb3IgSW5jbHVkZSBQYXRocy4KPGJyPjxpbWcgc3JjPSJpbWFnZXMvaW5jbHVkZVBhdGhzQWRkLmdpZiI+CjxwPlRoZW4gZW50ZXIgb3IgYnJvd3NlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBNUEkgaW5jbHVkZXMsIGFuZApzZWxlY3QgIk9LLiIKPGJyPjxpbWcgc3JjPSJpbWFnZXMvaW5jbHVkZVBhdGhzQWRkRGxnLmdpZiI+CjxwPk5vdyB5b3UgYWxzbyBuZWVkIHRvIGFkZCB0aGUgcGF0aCB0byB0aGUgbGlicmFyeTogVW5kZXIgR0NDIExpbmtlciwKTGlicmFyaWVzLCBzZWxlY3QgdGhlIGFkZCBidXR0b24gZm9yICJMaWJyYXJpZXMgKC1sKSIgCgo8YnI+PGltZyBzcmM9ImltYWdlcy9wcm9qUHJvcHNMbmtMaWIuZ2lmIj4KPHA+Rm9yIHRoZSBsaWJyYXJ5IHZhbHVlLCBlbnRlciAnbXBpJyBhbmQgc2VsZWN0ICdPSycKPGJyPjxpbWcgc3JjPSJpbWFnZXMvbGlua2VyRGxnLmdpZiI+CjxwPlRoZW4gc2VsZWN0IHRoZSBhZGQgYnV0dG9uIGZvciAgIkxpYnJhcnkgU2VhcmNoIFBhdGggKC1MKSIgCmFuZCBlbnRlciB0aGUgcGF0aCB0byB0aGUgbGliIGRpcmVjdG9yeS4gIFNlbGVjdCAnT0snCjxicj48aW1nIHNyYz0iaW1hZ2VzL2xpYkRsZy5naWYiPgo8cD5Ob3cgc2VsZWN0ICJPSyIgaW4gdGhlIHByb2plY3QgcHJvcGVydGllcyBkaWFsb2cgdG8gY2xvc2UgdGhpcyBkaWFsb2cuCk5vdyB5b3VyIHByb2plY3Qgc2hvdWxkIHJlYnVpbGQgd2l0aG91dCBlcnJvcnMgcmVsYXRpbmcgdG8gZmluZGluZwp0aGUgaW5jbHVkZSBmaWxlcy4KPHA+CjxoMiBpZD0ibXBpY2MiPlNwZWNpZnlpbmcgdGhlIG1waWNjIHRvb2xjaGFpbjwvaDI+Cgo8cD5Ob3cgc3BlY2lmeSB0aGUgYnVpbGQvbGluayBjb21tYW5kLgpBZ2FpbiBpbiBQcm9qZWN0IHByb3BlcnRpZXMsIEMvQysrIGJ1aWxkIHBhZ2UsIFRvb2wgU2V0dGluZ3MgdGFiLApjbGljayBvbiAiR0NDIEMgY29tcGlsZXIiCmFuZCBjaGFuZ2UgdGhlIGRlZmF1bHQgImdjYyIgdmFsdWUgdG8gIm1waWNjIgoob3Igd2hhdGV2ZXIgdGhlIGJ1aWxkIGNvbW1hbmQgaXMgZm9yIHlvdXIgTVBJIGVudmlyb25tZW50KS4KPGJyPjxpbWcgc3JjPSJpbWFnZXMvcHJvalByb3BzTXBpY2MuZ2lmIj4KPHA+VGhlbiBkbyB0aGUgc2FtZSBmb3IgdGhlICJHQ0MgQyBMaW5rZXIuIgo8YnI+PGltZyBzcmM9ImltYWdlcy9wcm9qUHJvcHNNcGljYzIuZ2lmIj4KPHA+Tm93IHByb2NlZWQgdG8gPGEgaHJlZj0iMDJwTGF1bmNoQ29uZmlnLmh0bWwiPmxhdW5jaCB0aGUgcGFyYWxsZWwgcHJvZ3JhbS48L2E+CjxwPiZuYnNwOwoKPHA+Jm5ic3A7CgoKPHA+PGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+IHwgPGEgaHJlZj0idG9jLmh0bWwiPkJhY2sgdG8gVGFibGUgb2YgQ29udGVudHM8L2E+CjwvYm9keT4KCjwvaHRtbD4K