PCFkb2N0eXBlIGh0bWwgcHVibGljICItLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvL2VuIj4KPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vZGV2LmVjbGlwc2Uub3JnL2RlZmF1bHRfc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cjx0aXRsZT5XVFAgYXV0b21hdGVkIHRlc3Rpbmc8L3RpdGxlPgo8L2hlYWQ+Cgo8Ym9keT4KPHRhYmxlIEJPUkRFUj0wIENFTExTUEFDSU5HPTUgQ0VMTFBBRERJTkc9MiBXSURUSD0iMTAwJSIgPgogPHRyPgogIDx0ZCBBTElHTj1MRUZUIHdpZHRoPSI4MCUiPiAKICAgPHA+PGI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iKzMiPldUUCBhdXRvbWF0ZWQgdGVzdGluZzwvZm9udD48L2I+PGJyPgogICBMYXN0IFVwZGF0ZWQ6IE5vdi4gMjksIDIwMDQ8L3A+CiAgIDxwPlRoaXMgZG9jdW1lbnQgb3V0bGluZXMgdGhlIHByaW5jaXBsZXMgb2YgV1RQIGF1dG9tYXRlZCB0ZXN0aW5nLiBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgZ3VpZGVsaW5lcyAKICAgZm9yIGNyZWF0aW5nIGFuZCBydW5uaW5nIHRlc3QgY2FzZXMuIElmIGFueW9uZSBoYXMgc3VnZ2VzdGlvbnMgZm9yIHRoaXMgZG9jdW1lbnQsIAogICBwbGVhc2UgcG9zdCBhIG1lc3NhZ2UgdG8gdGhlIHd0cC1kZXYgbWFpbGluZyBsaXN0LjwvcD4KICA8L3RkPgogPC90cj4gCjwvdGFibGU+Cgo8dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9NSBjZWxscGFkZGluZz0yIHdpZHRoPSIxMDAlIiA+CiA8dHI+CiAgPHRkIGFsaWduPUxFRlQgdmFsaWduPVRPUCBjb2xzcGFuPSIzIiBiZ2NvbG9yPSIjMDA4MEMwIj4gPGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIiBjb2xvcj0iI0ZGRkZGRiI+VGVzdGluZzwvZm9udD48L2I+PC90ZD4KIDwvdHI+CiA8VFI+CiAgPFREIGFsaWduPSJMRUZUIiB2YWxpZ249IlRPUCI+CiAgPHA+VGhlIGdvYWwgb2YgdW5pdCB0ZXN0aW5nIGlzIHRvIGFjaGlldmU6CiAgPG9sPgogICA8bGk+Q29udGludW91cyBpbnRlZ3JhdGlvbi4gVW5pdCB0ZXN0cyBhcmUgcnVuIGFzIHBhcnQgb2YgdGhlIFdUUCBidWlsZHMuIFRoZXkgZ2l2ZSBhbiBlYXJseSBpbmRpY2F0aW9uIG9uCiAgIHdoYXQgaXMgZmFpbGluZy4gVW5pdCB0ZXN0IGZhaWx1cmVzIHNob3VsZCBiZSBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlIChiZWZvcmUgdGhlIG5leHQgaW50ZWdyYXRpb24gYnVpbGQpLjwvbGk+CiAgIDxsaT5BUEkgY29tcGF0aWJpbGl0eS4gQ29tcG9uZW50IHRlYW1zIHNob3VsZCBwcm92aWRlIHVuaXQgdGVzdHMgZm9yIHRoZWlyIHB1YmxpYyBBUElzLiBUaGlzIGVuc3VyZXMgZGV2ZWxvcGVycwogICBkbyBub3QgYnJlYWsgZXhpc3RpbmcgY2xpZW50cy48L2xpPgogIDwvb2w+CiAgPC9wPgogICA8UD5UaGUgZ29hbCBvZiBwZXJmb3JtYW5jZSB0ZXN0aW5nIGlzIHRvIGFjaGlldmUgdW5pZm9ybSBvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgV1RQIG1vdmVzIAogICBmb3J3YXJkcy4gQXMgYSBkZXZlbG9wZXIsIHlvdXIgZGVkaWNhdGlvbiB0byBXVFAgcGVyZm9ybWFuY2UgaXMgc3Ryb25nbHkgZGVzaXJlZC4gVG8gZW5zdXJlIHRoZSAKICAgcGVyZm9ybWFuY2Ugb2YgV1RQIGRvZXMgbm90IHJlZ3Jlc3Mgb3ZlciB0aW1lLCBkZXZlbG9wZXJzIHNob3VsZCBwcm92aWRlIHBlcmZvcm1hbmNlIHRlc3QgY2FzZXMgCiAgIGFsb25nIHNpZGUgd2l0aCB0aGVpciBmZWF0dXJlcywgZXRjLiBEZXZlbG9wZXJzIGFyZSBhbHNvIGV4cGVjdGVkIHRvIHZlcmlmeSB0aGVpciAKICAgYnVnIGZpeGVzIGFuZCBmZWF0dXJlcyBjb250cmlidXRpb24gYWdhaW5zdCBleGlzdGluZyBwZXJmb3JtYW5jZSB0ZXN0IGNhc2VzLiBJZiBzb21ldGhpbmcgaXMgbm90IHBlcmZvcm1pbmcgCiAgIHdlbGwsIG9wZW4gYSBidWcuIFVzZSBwZXJmb3JtYW5jZSBhcyB0aGUga2V5d29yZC4gQ2xpY2sgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3MvYnVnbGlzdC5jZ2k/c2hvcnRfZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJnNob3J0X2Rlc2M9JnByb2R1Y3Q9V2ViK1Rvb2xzJmxvbmdfZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJmxvbmdfZGVzYz0mYnVnX2ZpbGVfbG9jX3R5cGU9YWxsd29yZHNzdWJzdHImYnVnX2ZpbGVfbG9jPSZrZXl3b3Jkc190eXBlPWFsbHdvcmRzJmtleXdvcmRzPXBlcmZvcm1hbmNlJmJ1Z19zdGF0dXM9TkVXJmJ1Z19zdGF0dXM9QVNTSUdORUQmYnVnX3N0YXR1cz1SRU9QRU5FRCZlbWFpbHR5cGUxPXN1YnN0cmluZyZlbWFpbDE9JmVtYWlsdHlwZTI9c3Vic3RyaW5nJmVtYWlsMj0mYnVnaWR0eXBlPWluY2x1ZGUmYnVnX2lkPSZ2b3Rlcz0mY2hhbmdlZGluPSZjaGZpZWxkZnJvbT0mY2hmaWVsZHRvPU5vdyZjaGZpZWxkdmFsdWU9JmNtZHR5cGU9ZG9pdCZvcmRlcj1SZXVzZStzYW1lK3NvcnQrYXMrbGFzdCt0aW1lJmZpZWxkMC0wLTA9bm9vcCZ0eXBlMC0wLTA9bm9vcCZ2YWx1ZTAtMC0wPSI+aGVyZTwvYT4gdG8gc2VlIGEgbGlzdCBvZiBhbGwgdGhlIAogICBjdXJyZW50bHkgb3BlbiBwZXJmb3JtYW5jZSBidWdzIGluIFdUUC48L1A+CiAgIDxwPkVjbGlwc2UgaGFzIGEgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy90ZXN0LWFuZC1wZXJmb3JtYW5jZS9pbmRleC5odG1sIj5wZXJmb3JtYW5jZSBpbmZyYXN0cnVjdHVyZTwvYT4gaW4gcGxhY2UgZm9yIG1lYXN1cmluZyBhbmQgdHJhY2tpbmcgCiAgIHBlcmZvcm1hbmNlLiBUaGUgcGVyZm9ybWFuY2UgcHJvY2Vzc2VzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGFyZSBtb2RlbGVkIGFyb3VuZCB0aGUgc2FtZSAKICAgaW5mcmFzdHJ1Y3R1cmUuIFRvIGNyZWF0ZSBhbmQgcnVuIHRlc3RzIHVuZGVyIHRoaXMgaW5mcmFzdHJ1Y3R1cmUsIHBsZWFzZSByZWZlciB0byB0aGUKICAgPGEgaHJlZj0iaHR0cDovL2Rldi5lY2xpcHNlLm9yZy92aWV3Y3ZzL2luZGV4LmNnaS8lN0VjaGVja291dCU3RS9vcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlL2RvYy9QZXJmb3JtYW5jZSUyMFRlc3RzJTIwSG93VG8uaHRtbCI+RWNsaXBzZSBUZXN0cyBIb3ctVG8gZG9jdW1lbnQ8L2E+LgogICBFY2xpcHNlIGFsc28gaGFzIHRpcHMgYW5kIHRvb2xzIHRvIGFpZCBkZXZlbG9wZXJzIHRvIGRlYnVnIAogICBhbmQgdHJhY2sgZG93biBwZXJmb3JtYW5jZSBwcm9ibGVtcy4gVGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgIDxvbD4KICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VjbGlwc2UvZGV2ZWxvcG1lbnQvcGVyZm9ybWFuY2UvYmxvb3BlcnMuaHRtbCI+UGVyZm9ybWFuY2UgYmxvb3BlcnM8L2E+PC9saT4KICAgIDxsaT48YSBocmVmPSJodHRwOi8vZGV2LmVjbGlwc2Uub3JnL3ZpZXdjdnMvaW5kZXguY2dpL35jaGVja291dH4vcGxhdGZvcm0tY29yZS1ob21lL2Rldi5odG1sI3Rvb2xzIj5Db3JlIHRvb2xzPC9hPjwvbGk+CiAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2Rldi5lY2xpcHNlLm9yZy92aWV3Y3ZzL2luZGV4LmNnaS9+Y2hlY2tvdXR+L3BsYXRmb3JtLXN3dC1ob21lL2Rldi5odG1sI3Rvb2xzIj5TV1QgdG9vbHM8L2E+PC9saT4KICAgPC9vbD4KICAgPC9wPgogICA8cD5Db21wb25lbnRzIG1heSBoYXZlIHRoZWlyIG93biB0ZXN0aW5nIHJlcXVpcmVtZW50cy4gRm9yIGV4YW1wbGUsIAogICB0aGUgc2VydmVyIHRvb2xzIGZyYW1ld29yayBvZnRlbiBjYWxsIEFQSXMgb24gc2VydmVyIGV4dGVuc2lvbnMgdG8gcmV0cmlldmUgZGF0YSBhYm91dCB0aGUgCiAgIGV4dGVuc2lvbi4gU29tZSBvZiB0aGVzZSBBUElzIG11c3QgYmUgc2hvcnQgcnVubmluZyBhcyB0aGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgVUkuIFRoZSBzZXJ2ZXIgCiAgIHRvb2xzIGZyYW1ld29yayBwcm92aWRlcyBhYnN0cmFjdCBwZXJmb3JtYW5jZSB0ZXN0IGNhc2VzIHRoYXQgZXh0ZW5zaW9ucyBzaG91bGQgZXh0ZW5kIHRvIHZlcmlmeSAKICAgdGhhdCBjb2RlIGNvbnRyaWJ1dGVkIGJ5IHRoZSBleHRlbnNpb24gZG9lcyBub3QgcmVncmVzcyBwZXJmb3JtYW5jZSBpbiB0aGUgYmFzZSBmcmFtZXdvcmsuIAogICBQZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgZnJvbSBjb21wb25lbnQgdGVhbXMgYXJlIGxpc3RlZCBpbiBhIGRvY3VtZW50IHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhhdCAKICAgY29tcG9uZW50knMgk2RldmVsb3BtZW50lCBkaXJlY3RvcnkgaW4gQ1ZTLiBQbGVhc2UgcmVmZXIgdG8gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvZGV2ZWxvcG1lbnQvV1RQRGV2ZWxvcG1lbnRQcmFjdGljZS5odG1sIj5XVFAgRGV2ZWxvcG1lbnQgUHJhY3RpY2VzPC9hPgogICBkb2N1bWVudCByZWdhcmRpbmcgYW55IGRldmVsb3BtZW50IHJlbGF0ZWQgaXNzdWVzLgogICA8L3A+CiAgPC9URD4KIDwvVFI+CjwvdGFibGU+Cgo8dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9NSBjZWxscGFkZGluZz0yIHdpZHRoPSIxMDAlIiA+CiA8dHI+CiAgPHRkIGFsaWduPUxFRlQgdmFsaWduPVRPUCBjb2xzcGFuPSIzIiBiZ2NvbG9yPSIjMDA4MEMwIj4gPGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIiBjb2xvcj0iI0ZGRkZGRiI+PGEgbmFtZT0icG9saWN5Ij48L2E+Q3JlYXRpbmcganVuaXQgdGVzdCBjYXNlczwvZm9udD48L2I+PC90ZD4KIDwvdHI+CiA8dHI+CiAgPHRkIGFsaWduPSJMRUZUIiB2YWxpZ249IlRPUCI+CiAgIDxwPkhlcmUncyBhIGxhdW5kcnkgbGlzdCBmb3IgaW50ZWdyYXRpbmcgdGVzdCBwbHVnaW5zIGludG8gdGhlIFdUUCBidWlsZDoKICAgPG9sPgogICAgPGxpPkNvbW1pdCB0aGUgcGx1Z2luIGludG8gQ1ZTLCB1c2UgdGhlIGNvbXBvbmVudCdzICJwZXJmb3JtYW5jZS10ZXN0cyIgZm9sZGVyLiBGb3IgZXhhbXBsZSwKICAgIHRoZSBvcmcuZWNsaXBzZS53c3Qud3NkbC50ZXN0cy5wZXJmb3JtYW5jZSBwbHVnaW4gc2hvdWxkIGJlIHBsYWNlZCBpbnRvCiAgICAvaG9tZS93ZWJ0b29scy93c3QvY29tcG9uZW50cy93c2RsL3BlcmZvcm1hbmNlLXRlc3RzLjwvbGk+CiAgICA8bGk+QWRkIHRoZSBwbHVnaW4gdG8gdGhlIGNvbXBvbmVudCdzIHRlc3RzIG1hcCBmaWxlLiBUaGlzIG1hcCBmaWxlIGNhbiBiZSBmb3VuZCBpbnNpZGUKICAgIHRoZSAvaG9tZS93ZWJ0b29scy9vcmcuZWNsaXBzZS53dHAucmVsZW5nL21hcHMgZGlyZWN0b3J5LjwvbGk+CiAgICA8bGk+QWRkIHRoZSBwbHVnaW4gdG8gdGhlIGZlYXR1cmUueG1sIGZpbGUuIFRoaXMgZmlsZSBjYW4gYmUgZm91bmQgaW5zaWRlIHRoZQogICAgL2hvbWUvd2VidG9vbHMvJmx0O3N1Yi1wcm9qZWN0Jmd0Oy9hc3NlbWJseS9mZWF0dXJlcy8mbHQ7cGVyZm9ybWFuY2UgZmVhdHVyZSZndDsgZGlyZWN0b3J5LjwvbGk+CiAgICA8bGk+VXBkYXRlIHRlc3QucHJvcGVydGllcyBhbmQgdGVzdC54bWwgaW5zaWRlIC9ob21lL3dlYnRvb2xzL29yZy5lY2xpcHNlLnd0cC5yZWxlbmcvdGVzdFNjcmlwdHMgdG8gaW5jbHVkZQogICAgdGhlIG5ldyBwZXJmb3JtYW5jZSBwbHVnaW5zLjwvbGk+CiAgIDwvb2w+CiAgIFRoZSA8YSBocmVmPSJodHRwOi8vZGV2LmVjbGlwc2Uub3JnL3ZpZXdjdnMvaW5kZXguY2dpLyU3RWNoZWNrb3V0JTdFL29yZy5lY2xpcHNlLnRlc3QucGVyZm9ybWFuY2UvZG9jL1BlcmZvcm1hbmNlJTIwVGVzdHMlMjBIb3dUby5odG1sIj5FY2xpcHNlIFRlc3RzIEhvdy1UbyBkb2N1bWVudDwvYT4KICAgaGFzIGEgdmVyeSB0aG9yb3VnaCBleHBsYWluYXRpb24gb24gaG93IHRvIGNyZWF0ZSBhbmQgcnVuIHBlcmZvcm1hbmNlIHRlc3QgY2FzZXMgdXNpbmcgdGhlIEVjbGlwc2UKICAgcGVyZm9ybWFuY2UgaW5mcmFzdHJ1Y3R1cmUuIAogICA8L3A+CiAgPC90ZD4KIDwvdHI+CjwvdGFibGU+Cgo8dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9NSBjZWxscGFkZGluZz0yIHdpZHRoPSIxMDAlIiA+CiA8dHI+CiAgPHRkIGFsaWduPUxFRlQgdmFsaWduPVRPUCBjb2xzcGFuPSIzIiBiZ2NvbG9yPSIjMDA4MEMwIj4gPGI+PGZvbnQgZmFjZT0iQXJpYWwsSGVsdmV0aWNhIiBjb2xvcj0iI0ZGRkZGRiI+V1RQIHBlcmZvcm1hbmNlIHByb2Nlc3M8L2ZvbnQ+PC9iPjwvdGQ+CiA8L3RyPgogPHRyPgogIDx0ZCBhbGlnbj0iTEVGVCIgdmFsaWduPSJUT1AiPgogICA8cD5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwcm9jZXNzIGZvciB0cmFja2luZyBwZXJmb3JtYW5jZSBpbiBXVFAuIEl0IGlzIGJhc2VkIG9uIHRoZSAKICAgcHJvY2VzcyB1c2VkIGJ5IHRoZSBFY2xpcHNlIFBsYXRmb3JtIFByb2plY3QuIEFsbCBwZXJmb3JtYW5jZSB0ZXN0cyBtdXN0IGJlIGF1dG9tYXRlZC4KICAgUGVyZm9ybWFuY2UgdGVzdHMgYXJlIHJ1biBldmVyeSB3ZWVrIHVzaW5nIFRodXJzZGF5J3MKICAgaW50ZWdyYXRpb24gYnVpbGRzLiBQZXJmb3JtYW5jZSB0ZXN0cyBzaG91bGQ6CiAgIDxvbD4KICAgIDxsaT5uZXZlciBoYXZlIGNvbXBpbGUgZXJyb3JzPC9saT4KICAgIDxsaT5hbHdheXMgcnVuIHRvIGNvbXBsZXRpb248L2xpPgogICA8L29sPgogICA8L3A+CiAgIDxwPklmIGVpdGhlciBjb25kaXRpb24gZmFpbHMsIGZhaWx1cmVzIHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5IGFjY29yZGluZyB0byB0aGUKICAgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9kZXZlbG9wbWVudC9XVFBEZXZlbG9wbWVudFByYWN0aWNlLmh0bWwiPldUUCBEZXZlbG9wbWVudCBQcmFjdGljZXMgZG9jdW1lbnQ8L2E+LgogICBQZXJmb3JtYW5jZSByZXN1bHRzIGFyZSBzdG9yZSBpbiBhIENsb3Vkc2NhcGUgZGF0YWJhc2UgYW5kIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHJlc3VsdHMgZnJvbSAKICAgdGhlIHByZXZpb3VzIHJlbGVhc2UuIEluIGNhc2Ugb2YgYSByZWdyZXNzaW9uLCBhIG5vdGUgd2lsbCBiZSBwb3N0ZWQgdG8gdGhlIG1haWxpbmcgbGlzdAogICBpbmRpY2F0aW5nIHRoZSBwcm9ibGVtLgogICA8b2w+CiAgICA8bGk+dGhlIGRldmVsb3BlciB3aG8gaW50cm9kdWNlZCB0aGUgcmVncmVzc2lvbiBzaG91bGQgZml4IHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtPC9saT4KICAgIDxsaT5pZiB0aGUgcmVncmVzc2lvbiBjYW4gYmUganVzdGlmaWVkIGJ5IGEgbmV3IGZlYXR1cmUsIHRoZW4gdGhlIFBNQyBtdXN0IGdldCBpbnZvbHZlZCAKICAgIGFuZCBkZWNpZGUgaG93IGltcG9ydGFudCB0aGF0IGZlYXR1cmUgaXMgKGV4LiBhbnkgY29tcGV0aXRpb24sIGV0YykuIFNvbHV0aW9ucyBtYXkgCiAgICBpbmNsdWRlLCBidXQgbm90IGxpbWl0ZWQgdG8sIG1ha2luZyB0aGUgZmVhdHVyZSBvcHRpb25hbCAoZXguIGNyZWF0ZSBhIHByZWZlcmVuY2UgYW5kIHR1cm4gCiAgICBpdCBvZmYgYnkgZGVmYXVsdCksIHNvIG9ubHkgdXNlcnMgd2hvIHdpc2ggdG8gdXNlIGl0IGhhdmUgdG8gcGF5IGZvciBpdC48L2xpPgogICA8L29sPgogICA8L3A+CiAgIDxwPlBlcmZvcm1hbmNlIHJlc3VsdHMgZnJvbSB0aGUgd2Vla2x5IGludGVncmF0aW9uIGJ1aWxkIGFyZSByZW5kZXJlZCBpbnRvIGEgZ3JhcGgsIGFuZCBpcwogICBsaW5rZWQgdG8gb24gdGhlIGJ1aWxkIHBhZ2UuIFRoaXMgZ3JhcGggcHJvdmlkZXMgYSBzaW1wbGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSBpbnRlZ3JhdGlvbgogICBidWlsZCBhbmQgdGhlIHJlZmVyZW5jZSBidWlsZC4KICAgPC9wPgogICA8cD5UbyBydW4gcGVyZm9ybWFuY2UgdGVzdHMgZm9yIGEgYnVpbGQgdGhhdCdzIGF2YWlsYWJsZSBmcm9tIHRoZSBFY2xpcHNlIGRvd25sb2FkIFdlYiBzaXRlOgogICA8b2w+CiAgICA8bGk+Q2hlY2sgb3V0IC9ob21lL3dlYnRvb2xzL29yZy5lY2xpcHNlLnd0cC5yZWxlbmc8L2xpPgogICAgPGxpPkNoYW5nZSB0aGUgcHJvcGVydGllcyBmaWxlcyB0byBmaXQgeW91ciBzeXN0ZW0gKGJ1aWxkQWxsLnByb3BlcnRpZXMsIHRlc3RzLnByb3BlcnRpZXMsIGJ1aWxkLmNmZyBhbmQgZXRjKTwvbGk+CiAgICA8bGk+T3BlbiBhIGNvbW1hbmQgcHJvbXB0IGFuZCBuYXZpZ2F0ZSB0byB0aGUgb3JnLmVjbGlwc2Uud3RwLnJlbGVuZyBkaXJlY3Rvcnk8L2xpPgogICAgPGxpPlJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CiAgICAgPHA+YW50IC1mIGNydWlzZS54bWwgLURidWlsZFR5cGU9PGJ1aWxkVHlwZT4gLURidWlsZElkPTxidWlsZElkPiAtRHRpbWVzdGFtcD08dGltZXN0YW1wPiBwZXJmb3JtYW5jZTwvcD4KICAgICA8cD5Gb3IgZXhhbXBsZTo8L3A+CiAgICAgPHA+YW50IC1mIGNydWlzZS54bWwgLURidWlsZFR5cGU9TiAtRGJ1aWxkSWQ9TjIwMDQxMTI3IC1EdGltZXN0YW1wPTIwMDQxMTI3MTQ1OCBwZXJmb3JtYW5jZTwvcD4KICAgIDwvbGk+CiAgIDwvb2w+CiAgIFJ1bm5pbmcgcGVyZm9ybWFuY2UgdGVzdHMgZm9yIGEgbG9jYWwgYnVpbGQgaXMgc2ltaWxhci4gR28gdG8geW91ciAke2J1aWxkRGlyZWN0b3J5fSBkaXJlY3RvcnkgYW5kIGNoZWNrIHRoZQogICBidWlsZFR5cGUsIGJ1aWxkSWQgYW5kIHRpbWVzdGFtcCBmb3IgeW91ciBsb2NhbCBidWlsZC4gR28gdGhyb3VnaCB0aGUgc2FtZSBzdGVwcyBhcyBhYm92ZS4gSWYgeW91IGhhdmUgYSBDbG91ZHNjYXBlCiAgIGRhdGFiYXNlIHNldHVwIChyZWZlciB0byB0aGUgPGEgaHJlZj0iaHR0cDovL2Rldi5lY2xpcHNlLm9yZy92aWV3Y3ZzL2luZGV4LmNnaS8lN0VjaGVja291dCU3RS9vcmcuZWNsaXBzZS50ZXN0LnBlcmZvcm1hbmNlL2RvYy9QZXJmb3JtYW5jZSUyMFRlc3RzJTIwSG93VG8uaHRtbCI+RWNsaXBzZSBUZXN0cyBIb3ctVG8gZG9jdW1lbnQ8L2E+KSwKICAgdGhlbiB0aGUgcGVyZm9ybWFuY2UgcmVzdWx0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlICR7dGVzdERpcn0vcmVzdWx0cyBkaXJlY3RvcnksIGVsc2UgdGhlIHBlcmZvcm1hbmNlIHJlc3VsdHMKICAgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGUuCiAgIDwvcD4KICA8L3RkPgogPC90cj4KPC90YWJsZT4KCjwvaHRtbD4K