PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgo8aHRtbD4KPGhlYWQ+CiAgPHRpdGxlPlRoZSBYTUwgQyBsaWJyYXJ5IGZvciBHbm9tZTwvdGl0bGU+CiAgPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJhbWF5YSA1LjEiPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KPC9oZWFkPgoKPGJvZHkgYmdjb2xvcj0iI2ZmZmZmZiI+CjxoMSBhbGlnbj0iY2VudGVyIj5UaGUgWE1MIEMgbGlicmFyeSBmb3IgR25vbWU8L2gxPgoKPGgxPk5vdGU6IHRoaXMgaXMgdGhlIGZsYXQgY29udGVudCBvZiB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+d2ViCnNpdGU8L2E+PC9oMT4KCjxoMSBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj5saWJ4bWwsIGEuay5hLiBnbm9tZS14bWw8L2gxPgoKPHA+PC9wPgoKPHA+TGlieG1sIGlzIHRoZSBYTUwgQyBsaWJyYXJ5IGRldmVsb3BlZCBmb3IgdGhlIEdub21lIHByb2plY3QuICBYTUwgaXRzZWxmCmlzIGEgbWV0YWxhbmd1YWdlIHRvIGRlc2lnbiBtYXJrdXAgbGFuZ3VhZ2VzLCBpLmUuIHRleHQgbGFuZ3VhZ2Ugd2hlcmUKc2VtYW50aWMgYW5kIHN0cnVjdHVyZSBhcmUgYWRkZWQgdG8gdGhlIGNvbnRlbnQgdXNpbmcgZXh0cmEgIm1hcmt1cCIKaW5mb3JtYXRpb24gZW5jbG9zZWQgYmV0d2VlbiBhbmdsZSBicmFja2V0cy4gSFRNTCBpcyB0aGUgbW9zdCB3ZWxsLWtub3duCm1hcmt1cCBsYW5ndWFnZS4gVGhvdWdoIHRoZSBsaWJyYXJ5IGlzIHdyaXR0ZW4gaW4gQyA8YSBocmVmPSJweXRob24uaHRtbCI+YQp2YXJpZXR5IG9mIGxhbmd1YWdlIGJpbmRpbmdzPC9hPiBtYWtlIGl0IGF2YWlsYWJsZSBpbiBvdGhlciBlbnZpcm9ubWVudHMuPC9wPgoKPHA+TGlieG1sMiBpbXBsZW1lbnRzIGEgbnVtYmVyIG9mIGV4aXN0aW5nIHN0YW5kYXJkcyByZWxhdGVkIHRvIG1hcmt1cApsYW5ndWFnZXM6PC9wPgo8dWw+CiAgPGxpPnRoZSBYTUwgc3RhbmRhcmQ6IDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIj5odHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sPC9hPjwvbGk+CiAgPGxpPk5hbWVzcGFjZXMgaW4gWE1MOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8iPmh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvPC9hPjwvbGk+CiAgPGxpPlhNTCBCYXNlOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sYmFzZS8iPmh0dHA6Ly93d3cudzMub3JnL1RSL3htbGJhc2UvPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2lzLm9oaW8tc3RhdGUuZWR1L3JmYy9yZmMyMzk2LnR4dCI+UkZDIDIzOTY8L2E+IDoKICAgIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIzOTYudHh0Ij5odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMzk2LnR4dDwvYT48L2xpPgogIDxsaT5YTUwgUGF0aCBMYW5ndWFnZSAoWFBhdGgpIDEuMDogPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoIj5odHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aDwvYT48L2xpPgogIDxsaT5IVE1MNCBwYXJzZXI6IDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxLyI+aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS88L2E+PC9saT4KICA8bGk+bW9zdCBvZiBYTUwgUG9pbnRlciBMYW5ndWFnZSAoWFBvaW50ZXIpIFZlcnNpb24gMS4wOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHB0ciI+aHR0cDovL3d3dy53My5vcmcvVFIveHB0cjwvYT48L2xpPgogIDxsaT5YTUwgSW5jbHVzaW9ucyAoWEluY2x1ZGUpIFZlcnNpb24gMS4wOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveGluY2x1ZGUvIj5odHRwOi8vd3d3LnczLm9yZy9UUi94aW5jbHVkZS88L2E+PC9saT4KICA8bGk+W0lTTy04ODU5LTFdLCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5jaXMub2hpby1zdGF0ZS5lZHUvcmZjL3JmYzIwNDQudHh0Ij5yZmMyMDQ0PC9hPiBbVVRGLThdCiAgICBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5jaXMub2hpby1zdGF0ZS5lZHUvcmZjL3JmYzI3ODEudHh0Ij5yZmMyNzgxPC9hPgogICAgW1VURi0xNl0gY29yZSBlbmNvZGluZ3M8L2xpPgogIDxsaT5wYXJ0IG9mIFNHTUwgT3BlbiBUZWNobmljYWwgUmVzb2x1dGlvbiBUUjk0MDE6MTk5NzwvbGk+CiAgPGxpPlhNTCBDYXRhbG9ncyBXb3JraW5nIERyYWZ0IDA2IEF1Z3VzdCAyMDAxOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9zcGVjLTIwMDEtMDgtMDYuaHRtbCI+aHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9zcGVjLTIwMDEtMDgtMDYuaHRtbDwvYT48L2xpPgogIDxsaT5DYW5vbmljYWwgWE1MIFZlcnNpb24gMS4wOiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLWMxNG4iPmh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1jMTRuPC9hPgogICAgYW5kIHRoZSBFeGNsdXNpdmUgWE1MIENhbm9uaWNhbGl6YXRpb24gQ1IgZHJhZnQgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1leGMtYzE0biI+aHR0cDovL3d3dy53My5vcmcvVFIveG1sLWV4Yy1jMTRuPC9hPjwvbGk+CjwvdWw+Cgo8cD5JbiBtb3N0IGNhc2VzIGxpYnhtbCB0cmllcyB0byBpbXBsZW1lbnQgdGhlIHNwZWNpZmljYXRpb25zIGluIGEgcmVsYXRpdmVseQpzdHJpY3RseSBjb21wbGlhbnQgd2F5LiBBcyBvZiByZWxlYXNlIDIuNC4xNiwgbGlieG1sMiBwYXNzZXMgYWxsIDE4MDArIHRlc3RzCmZyb20gdGhlIDxhCmhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy94bWwtY29uZm9ybWFuY2UvIj5PQVNJUyBYTUwgVGVzdHMKU3VpdGU8L2E+LjwvcD4KCjxwPlRvIHNvbWUgZXh0ZW50IGxpYnhtbDIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCnNwZWNpZmljYXRpb25zIGJ1dCBkb2Vzbid0IGNsYWltIHRvIGltcGxlbWVudCB0aGVtIGNvbXBsZXRlbHk6PC9wPgo8dWw+CiAgPGxpPkRvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItQ29yZS8iPmh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUNvcmUvPC9hPgogICAgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlIEFQSSBpdHNlbGYsIGdkb21lMiBkb2VzIHRoaXMgb24gdG9wIG9mCiAgbGlieG1sMjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2lzLm9oaW8tc3RhdGUuZWR1L3JmYy9yZmM5NTkudHh0Ij5SRkMgOTU5PC9hPiA6CiAgICBsaWJ4bWwgaW1wbGVtZW50cyBhIGJhc2ljIEZUUCBjbGllbnQgY29kZTwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuY2lzLm9oaW8tc3RhdGUuZWR1L3JmYy9yZmMxOTQ1LnR4dCI+UkZDIDE5NDU8L2E+IDoKICAgIEhUVFAvMS4wLCBhZ2FpbiBhIGJhc2ljIEhUVFAgY2xpZW50IGNvZGU8L2xpPgogIDxsaT5TQVg6IGEgbWluaW1hbCBTQVggaW1wbGVtZW50YXRpb24gY29tcGF0aWJsZSB3aXRoIGVhcmx5IGV4cGF0CiAgdmVyc2lvbnM8L2xpPgogIDxsaT5Eb2NCb29rIFNHTUwgdjQ6IGxpYnhtbDIgaW5jbHVkZXMgYSBoYWNraXNoIHBhcnNlciB0byB0cmFuc2l0aW9uIHRvCiAgWE1MPC9saT4KPC91bD4KCjxwPlhNTCBTY2hlbWFzIGlzIGJlaW5nIHdvcmtlZCBvbiBidXQgaXQgd291bGQgYmUgZmFyIHRvbyBlYXJseSB0byBtYWtlIGFueQpjb25mb3JtYW5jZSBzdGF0ZW1lbnQgYWJvdXQgaXQgYXQgdGhlIG1vbWVudC48L3A+Cgo8cD5MaWJ4bWwyIGlzIGtub3duIHRvIGJlIHZlcnkgcG9ydGFibGUsIHRoZSBsaWJyYXJ5IHNob3VsZCBidWlsZCBhbmQgd29yawp3aXRob3V0IHNlcmlvdXMgdHJvdWJsZXMgb24gYSB2YXJpZXR5IG9mIHN5c3RlbXMgKExpbnV4LCBVbml4LCBXaW5kb3dzLApDeWdXaW4sIE1hY09TLCBNYWNPUyBYLCBSSVNDIE9zLCBPUy8yLCBWTVMsIFFOWCwgTVZTLCAuLi4pPC9wPgoKPHA+U2VwYXJhdGUgZG9jdW1lbnRzOjwvcD4KPHVsPgogIDxsaT48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvWFNMVC8iPnRoZSBsaWJ4c2x0IHBhZ2U8L2E+IHByb3ZpZGluZyBhbgogICAgaW1wbGVtZW50YXRpb24gb2YgWFNMVCAxLjAgYW5kIGNvbW1vbiBleHRlbnNpb25zIGxpa2UgRVhTTFQgZm9yCiAgbGlieG1sMjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuY3MudW5pYm8uaXQvfmNhc2FyaW5pL2dkb21lMi8iPnRoZSBnZG9tZTIgcGFnZTwvYT4KICAgIDogYSBzdGFuZGFyZCBET00yIGltcGxlbWVudGF0aW9uIGZvciBsaWJ4bWwyPC9saT4KICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5hbGVrc2V5LmNvbS94bWxzZWMvIj50aGUgWE1MU2VjIHBhZ2U8L2E+OiBhbgogICAgaW1wbGVtZW50YXRpb24gb2YgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sZHNpZy1jb3JlLyI+VzNDIFhNTAogICAgRGlnaXRhbCBTaWduYXR1cmU8L2E+IGZvciBsaWJ4bWwyPC9saT4KICA8bGk+YWxzbyBjaGVjayB0aGUgcmVsYXRlZCBsaW5rcyBzZWN0aW9uIGJlbG93IGZvciBtb3JlIHJlbGF0ZWQgYW5kIGFjdGl2ZQogICAgcHJvamVjdHMuPC9saT4KPC91bD4KCjxwPkxvZ28gZGVzaWduZWQgYnkgPGEgaHJlZj0ibWFpbHRvOmxpeWFuYWdlQGFjY2Vzcy5jaCI+TWFyYyBMaXlhbmFnZTwvYT4uPC9wPgoKPGgyPjxhIG5hbWU9IkludHJvZHVjdGkiPkludHJvZHVjdGlvbjwvYT48L2gyPgoKPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgbGlieG1sLCB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1MLyI+WE1MPC9hPiBDIGxpYnJhcnkgZGV2ZWxvcGVkIGZvciB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5nbm9tZS5vcmcvIj5Hbm9tZTwvYT4gcHJvamVjdC4gPGEKaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1MLyI+WE1MIGlzIGEgc3RhbmRhcmQ8L2E+IGZvciBidWlsZGluZyB0YWctYmFzZWQKc3RydWN0dXJlZCBkb2N1bWVudHMvZGF0YS48L3A+Cgo8cD5IZXJlIGFyZSBzb21lIGtleSBwb2ludHMgYWJvdXQgbGlieG1sOjwvcD4KPHVsPgogIDxsaT5MaWJ4bWwgZXhwb3J0cyBQdXNoIChwcm9ncmVzc2l2ZSkgYW5kIFB1bGwgKGJsb2NraW5nKSB0eXBlIHBhcnNlcgogICAgaW50ZXJmYWNlcyBmb3IgYm90aCBYTUwgYW5kIEhUTUwuPC9saT4KICA8bGk+TGlieG1sIGNhbiBkbyBEVEQgdmFsaWRhdGlvbiBhdCBwYXJzZSB0aW1lLCB1c2luZyBhIHBhcnNlZCBkb2N1bWVudAogICAgaW5zdGFuY2UsIG9yIHdpdGggYW4gYXJiaXRyYXJ5IERURC48L2xpPgogIDxsaT5MaWJ4bWwgaW5jbHVkZXMgY29tcGxldGUgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoIj5YUGF0aDwvYT4sIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cHRyIj5YUG9pbnRlcjwvYT4gYW5kIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94aW5jbHVkZSI+WEluY2x1ZGU8L2E+IGltcGxlbWVudGF0aW9ucy48L2xpPgogIDxsaT5JdCBpcyB3cml0dGVuIGluIHBsYWluIEMsIG1ha2luZyBhcyBmZXcgYXNzdW1wdGlvbnMgYXMgcG9zc2libGUsIGFuZAogICAgc3RpY2tpbmcgY2xvc2VseSB0byBBTlNJIEMvUE9TSVggZm9yIGVhc3kgZW1iZWRkaW5nLiBXb3JrcyBvbgogICAgTGludXgvVW5peC9XaW5kb3dzLCBwb3J0ZWQgdG8gYSBudW1iZXIgb2Ygb3RoZXIgcGxhdGZvcm1zLjwvbGk+CiAgPGxpPkJhc2ljIHN1cHBvcnQgZm9yIEhUVFAgYW5kIEZUUCBjbGllbnQgYWxsb3dpbmcgYXBwbGljYXRpb25zIHRvIGZldGNoCiAgICByZW1vdGUgcmVzb3VyY2VzLjwvbGk+CiAgPGxpPlRoZSBkZXNpZ24gaXMgbW9kdWxhciwgbW9zdCBvZiB0aGUgZXh0ZW5zaW9ucyBjYW4gYmUgY29tcGlsZWQgb3V0LjwvbGk+CiAgPGxpPlRoZSBpbnRlcm5hbCBkb2N1bWVudCByZXByZXNlbnRhdGlvbiBpcyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGUgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL0RPTS8iPkRPTTwvYT4gaW50ZXJmYWNlcy48L2xpPgogIDxsaT5MaWJ4bWwgYWxzbyBoYXMgYSA8YSBocmVmPSJodHRwOi8vd3d3Lm1lZ2dpbnNvbi5jb20vU0FYL2luZGV4Lmh0bWwiPlNBWAogICAgbGlrZSBpbnRlcmZhY2U8L2E+OyB0aGUgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5qY2xhcmsuY29tL3htbC9leHBhdC5odG1sIj5FeHBhdDwvYT4uPC9saT4KICA8bGk+VGhpcyBsaWJyYXJ5IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5odG1sIj5NSVQKICAgIExpY2Vuc2U8L2E+LiBTZWUgdGhlIENvcHlyaWdodCBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIHRoZSBwcmVjaXNlCiAgICB3b3JkaW5nLjwvbGk+CjwvdWw+Cgo8cD5XYXJuaW5nOiB1bmxlc3MgeW91IGFyZSBmb3JjZWQgdG8gYmVjYXVzZSB5b3VyIGFwcGxpY2F0aW9uIGxpbmtzIHdpdGggYQpHbm9tZS0xLlggbGlicmFyeSByZXF1aXJpbmcgaXQsICA8c3Ryb25nPjxzcGFuCnN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkYwMDAwIj5EbyBOb3QgVXNlIGxpYnhtbDE8L3NwYW4+PC9zdHJvbmc+LCB1c2UKbGlieG1sMjwvcD4KCjxoMj48YSBuYW1lPSJGQVEiPkZBUTwvYT48L2gyPgoKPHA+VGFibGUgb2YgQ29udGVudHM6PC9wPgo8dWw+CiAgPGxpPjxhIGhyZWY9IkZBUS5odG1sI0xpY2Vuc2UiPkxpY2Vuc2Uocyk8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iRkFRLmh0bWwjSW5zdGFsbGF0aSI+SW5zdGFsbGF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IkZBUS5odG1sI0NvbXBpbGF0aW8iPkNvbXBpbGF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IkZBUS5odG1sI0RldmVsb3BlciI+RGV2ZWxvcGVyIGNvcm5lcjwvYT48L2xpPgo8L3VsPgoKPGgzPjxhIG5hbWU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+KHMpPC9oMz4KPG9sPgogIDxsaT48ZW0+TGljZW5zaW5nIFRlcm1zIGZvciBsaWJ4bWw8L2VtPgogICAgPHA+bGlieG1sIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5odG1sIj5NSVQKICAgIExpY2Vuc2U8L2E+OyBzZWUgdGhlIGZpbGUgQ29weXJpZ2h0IGluIHRoZSBkaXN0cmlidXRpb24gZm9yIHRoZSBwcmVjaXNlCiAgICB3b3JkaW5nPC9wPgogIDwvbGk+CiAgPGxpPjxlbT5DYW4gSSBlbWJlZCBsaWJ4bWwgaW4gYSBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbiA/PC9lbT4KICAgIDxwPlllcy4gVGhlIE1JVCBMaWNlbnNlIGFsbG93cyB5b3UgdG8ga2VlcCBwcm9wcmlldGFyeSB0aGUgY2hhbmdlcyB5b3UKICAgIG1hZGUgdG8gbGlieG1sLCBidXQgaXQgd291bGQgYmUgZ3JhY2VmdWwgdG8gc2VuZC1iYWNrIGJ1ZyBmaXhlcyBhbmQKICAgIGltcHJvdmVtZW50cyBhcyBwYXRjaGVzIGZvciBwb3NzaWJsZSBpbmNvcnBvcmF0aW9uIGluIHRoZSBtYWluCiAgICBkZXZlbG9wbWVudCB0cmVlLjwvcD4KICA8L2xpPgo8L29sPgoKPGgzPjxhIG5hbWU9Ikluc3RhbGxhdGkiPkluc3RhbGxhdGlvbjwvYT48L2gzPgo8b2w+CiAgPGxpPlVubGVzcyB5b3UgYXJlIGZvcmNlZCB0byBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gbGlua3Mgd2l0aCBhIEdub21lCiAgICBsaWJyYXJ5IHJlcXVpcmluZyBpdCwgIDxzdHJvbmc+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRjAwMDAiPkRvCiAgICBOb3QgVXNlIGxpYnhtbDE8L3NwYW4+PC9zdHJvbmc+LCB1c2UgbGlieG1sMjwvbGk+CiAgPGxpPjxlbT5XaGVyZSBjYW4gSSBnZXQgbGlieG1sPC9lbT4gPwogICAgPHA+VGhlIG9yaWdpbmFsIGRpc3RyaWJ1dGlvbiBjb21lcyBmcm9tIDxhCiAgICBocmVmPSJmdHA6Ly9ycG1maW5kLm5ldC9wdWIvbGlieG1sLyI+cnBtZmluZC5uZXQ8L2E+IG9yIDxhCiAgICBocmVmPSJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYnhtbDIvMi40LyI+Z25vbWUub3JnPC9hPjwvcD4KICAgIDxwPk1vc3QgTGludXggYW5kIEJTRCBkaXN0cmlidXRpb25zIGluY2x1ZGUgbGlieG1sLCB0aGlzIGlzIHByb2JhYmx5IHRoZQogICAgc2FmZXIgd2F5IGZvciBlbmQtdXNlcnMgdG8gdXNlIGxpYnhtbC48L3A+CiAgICA8cD5EYXZpZCBEb29saW4gcHJvdmlkZXMgcHJlY29tcGlsZWQgV2luZG93cyB2ZXJzaW9ucyBhdCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5jZS5iZXJrZWxleS5lZHUvfmRvb2xpbi9jb2RlL2xpYnhtbHdpbjMyLyAgICAgICAgICI+aHR0cDovL3d3dy5jZS5iZXJrZWxleS5lZHUvfmRvb2xpbi9jb2RlL2xpYnhtbHdpbjMyLzwvYT48L3A+CiAgPC9saT4KICA8bGk+PGVtPkkgc2VlIGxpYnhtbCBhbmQgbGlieG1sMiByZWxlYXNlcywgd2hpY2ggb25lIHNob3VsZCBJIGluc3RhbGwgPzwvZW0+CiAgICA8dWw+CiAgICAgIDxsaT5JZiB5b3UgYXJlIG5vdCBjb25zdHJhaW5lZCBieSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoCiAgICAgICAgZXhpc3RpbmcgYXBwbGljYXRpb25zLCBpbnN0YWxsIGxpYnhtbDIgb25seTwvbGk+CiAgICAgIDxsaT5JZiB5b3UgYXJlIG5vdCBkb2luZyBkZXZlbG9wbWVudCwgeW91IGNhbiBzYWZlbHkgaW5zdGFsbCBib3RoLgogICAgICAgIFVzdWFsbHkgdGhlIHBhY2thZ2VzIDxhCiAgICAgICAgaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L2xpbnV4L1JQTS9saWJ4bWwuaHRtbCI+bGlieG1sPC9hPiBhbmQgPGEKICAgICAgICBocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvUlBNL2xpYnhtbDIuaHRtbCI+bGlieG1sMjwvYT4gYXJlCiAgICAgICAgY29tcGF0aWJsZSAodGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGRldmVsb3BtZW50IHBhY2thZ2VzKS48L2xpPgogICAgICA8bGk+SWYgeW91IGFyZSBhIGRldmVsb3BlciBhbmQgeW91ciBzeXN0ZW0gcHJvdmlkZXMgc2VwYXJhdGUgcGFja2FnaW5nCiAgICAgICAgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHRoZSBkZXZlbG9wbWVudCBjb21wb25lbnRzLCBpdCBpcyBwb3NzaWJsZQogICAgICAgIHRvIGluc3RhbGwgbGlieG1sIGFuZCBsaWJ4bWwyLCBhbmQgYWxzbyA8YQogICAgICAgIGhyZWY9Imh0dHA6Ly9ycG1maW5kLm5ldC9saW51eC9SUE0vbGlieG1sLWRldmVsLmh0bWwiPmxpYnhtbC1kZXZlbDwvYT4KICAgICAgICBhbmQgPGEKICAgICAgICBocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvUlBNL2xpYnhtbDItZGV2ZWwuaHRtbCI+bGlieG1sMi1kZXZlbDwvYT4KICAgICAgICB0b28gZm9yIGxpYnhtbDIgJmd0Oz0gMi4zLjA8L2xpPgogICAgICA8bGk+SWYgeW91IGFyZSBkZXZlbG9waW5nIGEgbmV3IGFwcGxpY2F0aW9uLCBwbGVhc2UgZGV2ZWxvcCBhZ2FpbnN0CiAgICAgICAgbGlieG1sMigtZGV2ZWwpPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+PGVtPkkgY2FuJ3QgaW5zdGFsbCB0aGUgbGlieG1sIHBhY2thZ2UsIGl0IGNvbmZsaWN0cyB3aXRoIGxpYnhtbDA8L2VtPgogICAgPHA+WW91IHByb2JhYmx5IGhhdmUgYW4gb2xkIGxpYnhtbDAgcGFja2FnZSB1c2VkIHRvIHByb3ZpZGUgdGhlIHNoYXJlZAogICAgbGlicmFyeSBmb3IgbGlieG1sLnNvLjAsIHlvdSBjYW4gcHJvYmFibHkgc2FmZWx5IHJlbW92ZSBpdC4gVGhlIGxpYnhtbAogICAgcGFja2FnZXMgcHJvdmlkZWQgb24gPGEKICAgIGhyZWY9ImZ0cDovL3JwbWZpbmQubmV0L3B1Yi9saWJ4bWwvIj5ycG1maW5kLm5ldDwvYT4gcHJvdmlkZQogICAgbGlieG1sLnNvLjA8L3A+CiAgPC9saT4KICA8bGk+PGVtPkkgY2FuJ3QgaW5zdGFsbCB0aGUgbGlieG1sKDIpIFJQTSBwYWNrYWdlIGR1ZSB0byBmYWlsZWQKICAgIGRlcGVuZGVuY2llczwvZW0+CiAgICA8cD5UaGUgbW9zdCBnZW5lcmljIHNvbHV0aW9uIGlzIHRvIHJlLWZldGNoIHRoZSBsYXRlc3Qgc3JjLnJwbSAsIGFuZAogICAgcmVidWlsZCBpdCBsb2NhbGx5IHdpdGg8L3A+CiAgICA8cD48Y29kZT5ycG0gLS1yZWJ1aWxkIGxpYnhtbCgyKS14eHguc3JjLnJwbTwvY29kZT4uPC9wPgogICAgPHA+SWYgZXZlcnl0aGluZyBnb2VzIHdlbGwgaXQgd2lsbCBnZW5lcmF0ZSB0d28gYmluYXJ5IHJwbSBwYWNrYWdlcyAob25lCiAgICBwcm92aWRpbmcgdGhlIHNoYXJlZCBsaWJzIGFuZCB4bWxsaW50LCBhbmQgdGhlIG90aGVyIG9uZSwgdGhlIC1kZXZlbAogICAgcGFja2FnZSwgcHJvdmlkaW5nIGluY2x1ZGVzLCBzdGF0aWMgbGlicmFyaWVzIGFuZCBzY3JpcHRzIG5lZWRlZCB0byBidWlsZAogICAgYXBwbGljYXRpb25zIHdpdGggbGlieG1sKDIpKSB0aGF0IHlvdSBjYW4gaW5zdGFsbCBsb2NhbGx5LjwvcD4KICA8L2xpPgo8L29sPgoKPGgzPjxhIG5hbWU9IkNvbXBpbGF0aW8iPkNvbXBpbGF0aW9uPC9hPjwvaDM+CjxvbD4KICA8bGk+PGVtPldoYXQgaXMgdGhlIHByb2Nlc3MgdG8gY29tcGlsZSBsaWJ4bWwgPzwvZW0+CiAgICA8cD5BcyBtb3N0IFVOSVggbGlicmFyaWVzIGxpYnhtbCBmb2xsb3dzIHRoZSAic3RhbmRhcmQiOjwvcD4KICAgIDxwPjxjb2RlPmd1bnppcCAtYyB4eHgudGFyLmd6IHwgdGFyIHh2ZiAtPC9jb2RlPjwvcD4KICAgIDxwPjxjb2RlPmNkIGxpYnhtbC14eHh4PC9jb2RlPjwvcD4KICAgIDxwPjxjb2RlPi4vY29uZmlndXJlIC0taGVscDwvY29kZT48L3A+CiAgICA8cD50byBzZWUgdGhlIG9wdGlvbnMsIHRoZW4gdGhlIGNvbXBpbGF0aW9uL2luc3RhbGxhdGlvbiBwcm9wZXI8L3A+CiAgICA8cD48Y29kZT4uL2NvbmZpZ3VyZSBbcG9zc2libGUgb3B0aW9uc108L2NvZGU+PC9wPgogICAgPHA+PGNvZGU+bWFrZTwvY29kZT48L3A+CiAgICA8cD48Y29kZT5tYWtlIGluc3RhbGw8L2NvZGU+PC9wPgogICAgPHA+QXQgdGhhdCBwb2ludCB5b3UgbWF5IGhhdmUgdG8gcmVydW4gbGRjb25maWcgb3IgYSBzaW1pbGFyIHV0aWxpdHkgdG8KICAgIHVwZGF0ZSB5b3VyIGxpc3Qgb2YgaW5zdGFsbGVkIHNoYXJlZCBsaWJzLjwvcD4KICA8L2xpPgogIDxsaT48ZW0+V2hhdCBvdGhlciBsaWJyYXJpZXMgYXJlIG5lZWRlZCB0byBjb21waWxlL2luc3RhbGwgbGlieG1sID88L2VtPgogICAgPHA+TGlieG1sIGRvZXMgbm90IHJlcXVpcmUgYW55IG90aGVyIGxpYnJhcnksIHRoZSBub3JtYWwgQyBBTlNJIEFQSQogICAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgKHBsZWFzZSByZXBvcnQgYW55IHZpb2xhdGlvbiB0byB0aGlzIHJ1bGUgeW91IG1heQogICAgZmluZCkuPC9wPgogICAgPHA+SG93ZXZlciBpZiBmb3VuZCBhdCBjb25maWd1cmF0aW9uIHRpbWUgbGlieG1sIHdpbGwgZGV0ZWN0IGFuZCB1c2UgdGhlCiAgICBmb2xsb3dpbmcgbGliczo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC96bGliLyI+bGliejwvYT4gOiBhCiAgICAgICAgaGlnaGx5IHBvcnRhYmxlIGFuZCBhdmFpbGFibGUgd2lkZWx5IGNvbXByZXNzaW9uIGxpYnJhcnkuPC9saT4KICAgICAgPGxpPmljb252OiBhIHBvd2VyZnVsIGNoYXJhY3RlciBlbmNvZGluZyBjb252ZXJzaW9uIGxpYnJhcnkuIEl0IGlzCiAgICAgICAgaW5jbHVkZWQgYnkgZGVmYXVsdCBpbiByZWNlbnQgZ2xpYmMgbGlicmFyaWVzLCBzbyBpdCBkb2Vzbid0IG5lZWQgdG8KICAgICAgICBiZSBpbnN0YWxsZWQgc3BlY2lmaWNhbGx5IG9uIExpbnV4LiBJdCBub3cgc2VlbXMgYSA8YQogICAgICAgIGhyZWY9Imh0dHA6Ly93d3cub3Blbm5jLm9yZy9vbmxpbmVwdWJzLzc5MDg3OTkveHNoL2ljb252Lmh0bWwiPnBhcnQKICAgICAgICBvZiB0aGUgb2ZmaWNpYWwgVU5JWDwvYT4gc3BlY2lmaWNhdGlvbi4gSGVyZSBpcyBvbmUgPGEKICAgICAgICBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWNvbnYvIj5pbXBsZW1lbnRhdGlvbiBvZiB0aGUKICAgICAgICBsaWJyYXJ5PC9hPiB3aGljaCBzb3VyY2UgY2FuIGJlIGZvdW5kIDxhCiAgICAgICAgaHJlZj0iZnRwOi8vZnRwLmlsb2cuZnIvcHViL1VzZXJzL2hhaWJsZS9nbnUvIj5oZXJlPC9hPi48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48ZW0+TWFrZSBjaGVjayBmYWlscyBvbiBzb21lIHBsYXRmb3JtczwvZW0+CiAgICA8cD5Tb21ldGltZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMnIHJlc3VsdHMgZG9uJ3QgY29tcGxldGVseSBtYXRjaCB0aGUKICAgIHZhbHVlIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIsIGFuZCB0aGUgbWFrZWZpbGUgdXNlcyBkaWZmIHRvIHByaW50IHRoZQogICAgZGVsdGEuIE9uIHNvbWUgcGxhdGZvcm1zIHRoZSBkaWZmIHJldHVybiBicmVha3MgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3M7CiAgICBpZiB0aGUgZGlmZiBpcyBzbWFsbCB0aGlzIGlzIHByb2JhYmx5IG5vdCBhIHNlcmlvdXMgcHJvYmxlbS48L3A+CiAgICA8cD5Tb21ldGltZXMgKGVzcGVjaWFsbHkgb24gU29sYXJpcykgbWFrZSBjaGVja3MgZmFpbCBkdWUgdG8gbGltaXRhdGlvbnMKICAgIGluIG1ha2UuIFRyeSB1c2luZyBHTlUtbWFrZSBpbnN0ZWFkLjwvcD4KICA8L2xpPgogIDxsaT48ZW0+SSB1c2UgdGhlIENWUyB2ZXJzaW9uIGFuZCB0aGVyZSBpcyBubyBjb25maWd1cmUgc2NyaXB0PC9lbT4KICAgIDxwPlRoZSBjb25maWd1cmUgc2NyaXB0IChhbmQgb3RoZXIgTWFrZWZpbGVzKSBhcmUgZ2VuZXJhdGVkLiBVc2UgdGhlCiAgICBhdXRvZ2VuLnNoIHNjcmlwdCB0byByZWdlbmVyYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZCBNYWtlZmlsZXMsCiAgICBsaWtlOjwvcD4KICAgIDxwPjxjb2RlPi4vYXV0b2dlbi5zaCAtLXByZWZpeD0vdXNyIC0tZGlzYWJsZS1zaGFyZWQ8L2NvZGU+PC9wPgogIDwvbGk+CiAgPGxpPjxlbT5JIGhhdmUgdHJvdWJsZXMgd2hlbiBydW5uaW5nIG1ha2UgdGVzdHMgd2l0aCBnY2MtMy4wPC9lbT4KICAgIDxwPkl0IHNlZW1zIHRoZSBpbml0aWFsIHJlbGVhc2Ugb2YgZ2NjLTMuMCBoYXMgYSBwcm9ibGVtIHdpdGggdGhlCiAgICBvcHRpbWl6ZXIgd2hpY2ggbWlzY29tcGlsZXMgdGhlIFVSSSBtb2R1bGUuIFBsZWFzZSB1c2UgYW5vdGhlcgogICAgY29tcGlsZXIuPC9wPgogIDwvbGk+Cjwvb2w+Cgo8aDM+PGEgbmFtZT0iRGV2ZWxvcGVyIj5EZXZlbG9wZXI8L2E+IGNvcm5lcjwvaDM+CjxvbD4KICA8bGk+PGVtPnhtbERvY0R1bXAoKSBnZW5lcmF0ZXMgb3V0cHV0IG9uIG9uZSBsaW5lLjwvZW0+CiAgICA8cD5MaWJ4bWwgd2lsbCBub3QgPHN0cm9uZz5pbnZlbnQ8L3N0cm9uZz4gc3BhY2VzIGluIHRoZSBjb250ZW50IG9mIGEKICAgIGRvY3VtZW50IHNpbmNlIDxzdHJvbmc+YWxsIHNwYWNlcyBpbiB0aGUgY29udGVudCBvZiBhIGRvY3VtZW50IGFyZQogICAgc2lnbmlmaWNhbnQ8L3N0cm9uZz4uIElmIHlvdSBidWlsZCBhIHRyZWUgZnJvbSB0aGUgQVBJIGFuZCB3YW50CiAgICBpbmRlbnRhdGlvbjo8L3A+CiAgICA8b2w+CiAgICAgIDxsaT50aGUgY29ycmVjdCB3YXkgaXMgdG8gZ2VuZXJhdGUgdGhvc2UgeW91cnNlbGYgdG9vLjwvbGk+CiAgICAgIDxsaT50aGUgZGFuZ2Vyb3VzIHdheSBpcyB0byBhc2sgbGlieG1sIHRvIGFkZCB0aG9zZSBibGFua3MgdG8geW91cgogICAgICAgIGNvbnRlbnQgPHN0cm9uZz5tb2RpZnlpbmcgdGhlIGNvbnRlbnQgb2YgeW91ciBkb2N1bWVudCBpbiB0aGUKICAgICAgICBwcm9jZXNzPC9zdHJvbmc+LiBUaGUgcmVzdWx0IG1heSBub3QgYmUgd2hhdCB5b3UgZXhwZWN0LiBUaGVyZSBpcwogICAgICAgIDxzdHJvbmc+Tk88L3N0cm9uZz4gd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHN1Y2ggYSBtb2RpZmljYXRpb24gd29uJ3QKICAgICAgICBhZmZlY3Qgb3RoZXIgcGFydHMgb2YgdGhlIGNvbnRlbnQgb2YgeW91ciBkb2N1bWVudC4gU2VlIDxhCiAgICAgICAgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXBhcnNlci5odG1sI1hNTEtFRVBCTEFOS1NERUZBVUxUIj54bWxLZWVwQmxhbmtzRGVmYXVsdAogICAgICAgICgpPC9hPiBhbmQgPGEKICAgICAgICBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwtdHJlZS5odG1sI1hNTFNBVkVGT1JNQVRGSUxFIj54bWxTYXZlRm9ybWF0RmlsZQogICAgICAgICgpPC9hPjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGxpPkV4dHJhIG5vZGVzIGluIHRoZSBkb2N1bWVudDoKICAgIDxwPjxlbT5Gb3IgYSBYTUwgZmlsZSBhcyBiZWxvdzo8L2VtPjwvcD4KICAgIDxwcmU+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CiZsdDtQTEFOIHhtbG5zPSJodHRwOi8vd3d3LmFyZ3VzLmNhL2F1dG90ZXN0LzEuMC8iJmd0OwombHQ7Tk9ERSBDb21tRmxhZz0iMCIvJmd0OwombHQ7Tk9ERSBDb21tRmxhZz0iMSIvJmd0OwombHQ7L1BMQU4mZ3Q7PC9wcmU+CiAgICA8cD48ZW0+YWZ0ZXIgcGFyc2luZyBpdCB3aXRoIHRoZSBmdW5jdGlvbgogICAgcHhtbERvYz14bWxQYXJzZUZpbGUoLi4uKTs8L2VtPjwvcD4KICAgIDxwPjxlbT5JIHdhbnQgdG8gdGhlIGdldCB0aGUgY29udGVudCBvZiB0aGUgZmlyc3Qgbm9kZSAobm9kZSB3aXRoIHRoZQogICAgQ29tbUZsYWc9IjAiKTwvZW0+PC9wPgogICAgPHA+PGVtPnNvIEkgZGlkIGl0IGFzIGZvbGxvd2luZzs8L2VtPjwvcD4KICAgIDxwcmU+eG1sTm9kZVB0ciBwbm9kZTsKcG5vZGU9cHhtbERvYy0mZ3Q7Y2hpbGRyZW4tJmd0O2NoaWxkcmVuOzwvcHJlPgogICAgPHA+PGVtPmJ1dCBpdCBkb2VzIG5vdCB3b3JrLiBJZiBJIGNoYW5nZSBpdCB0bzwvZW0+PC9wPgogICAgPHByZT5wbm9kZT1weG1sRG9jLSZndDtjaGlsZHJlbi0mZ3Q7Y2hpbGRyZW4tJmd0O25leHQ7PC9wcmU+CiAgICA8cD48ZW0+dGhlbiBpdCB3b3Jrcy4gIENhbiBzb21lb25lIGV4cGxhaW4gaXQgdG8gbWUuPC9lbT48L3A+CiAgICA8cD48L3A+CiAgICA8cD5JbiBYTUwgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbnRlbnQgb2YgdGhlIGRvY3VtZW50IGFyZSBzaWduaWZpY2FudAogICAgPHN0cm9uZz5pbmNsdWRpbmcgYmxhbmtzIGFuZCBmb3JtYXR0aW5nIGxpbmUgYnJlYWtzPC9zdHJvbmc+LjwvcD4KICAgIDxwPlRoZSBleHRyYSBub2RlcyB5b3UgYXJlIHdvbmRlcmluZyBhYm91dCBhcmUganVzdCB0aGF0LCB0ZXh0IG5vZGVzIHdpdGgKICAgIHRoZSBmb3JtYXR0aW5nIHNwYWNlcyB3aGljaCBhcmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgYnV0IHRoYXQgcGVvcGxlIHRlbmQKICAgIHRvIGZvcmdldC4gVGhlcmUgaXMgYSBmdW5jdGlvbiA8YQogICAgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXBhcnNlci5odG1sIj54bWxLZWVwQmxhbmtzRGVmYXVsdAogICAgKCk8L2E+ICB0byByZW1vdmUgdGhvc2UgYXQgcGFyc2UgdGltZSwgYnV0IHRoYXQncyBhbiBoZXVyaXN0aWMsIGFuZCBpdHMKICAgIHVzZSBzaG91bGQgYmUgbGltaXRlZCB0byBjYXNlcyB3aGVyZSB5b3UgYXJlIGNlcnRhaW4gdGhlcmUgaXMgbm8KICAgIG1peGVkLWNvbnRlbnQgaW4gdGhlIGRvY3VtZW50LjwvcD4KICA8L2xpPgogIDxsaT48ZW0+SSBnZXQgY29tcGlsYXRpb24gZXJyb3JzIG9mIGV4aXN0aW5nIGNvZGUgbGlrZSB3aGVuIGFjY2Vzc2luZwogICAgPHN0cm9uZz5yb290PC9zdHJvbmc+IG9yIDxzdHJvbmc+Y2hpbGQgZmllbGRzPC9zdHJvbmc+IG9mIG5vZGVzLjwvZW0+CiAgICA8cD5Zb3UgYXJlIGNvbXBpbGluZyBjb2RlIGRldmVsb3BlZCBmb3IgbGlieG1sIHZlcnNpb24gMSBhbmQgdXNpbmcgYQogICAgbGlieG1sMiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gRWl0aGVyIHN3aXRjaCBiYWNrIHRvIGxpYnhtbCB2MSBkZXZlbCBvcgogICAgZXZlbiBiZXR0ZXIgZml4IHRoZSBjb2RlIHRvIGNvbXBpbGUgd2l0aCBsaWJ4bWwyIChvciBib3RoKSBieSA8YQogICAgaHJlZj0idXBncmFkZS5odG1sIj5mb2xsb3dpbmcgdGhlIGluc3RydWN0aW9uczwvYT4uPC9wPgogIDwvbGk+CiAgPGxpPjxlbT5JIGdldCBjb21waWxhdGlvbiBlcnJvcnMgYWJvdXQgbm9uIGV4aXN0aW5nCiAgICA8c3Ryb25nPnhtbFJvb3ROb2RlPC9zdHJvbmc+IG9yIDxzdHJvbmc+eG1sQ2hpbGRyZW5Ob2RlPC9zdHJvbmc+CiAgICBmaWVsZHMuPC9lbT4KICAgIDxwPlRoZSBzb3VyY2UgY29kZSB5b3UgYXJlIHVzaW5nIGhhcyBiZWVuIDxhCiAgICBocmVmPSJ1cGdyYWRlLmh0bWwiPnVwZ3JhZGVkPC9hPiB0byBiZSBhYmxlIHRvIGNvbXBpbGUgd2l0aCBib3RoIGxpYnhtbAogICAgYW5kIGxpYnhtbDIsIGJ1dCB5b3UgbmVlZCB0byBpbnN0YWxsIGEgbW9yZSByZWNlbnQgdmVyc2lvbjoKICAgIGxpYnhtbCgtZGV2ZWwpICZndDs9IDEuOC44IG9yIGxpYnhtbDIoLWRldmVsKSAmZ3Q7PSAyLjEuMDwvcD4KICA8L2xpPgogIDxsaT48ZW0+WFBhdGggaW1wbGVtZW50YXRpb24gbG9va3Mgc2VyaW91c2x5IGJyb2tlbjwvZW0+CiAgICA8cD5YUGF0aCBpbXBsZW1lbnRhdGlvbiBwcmlvciB0byAyLjMuMCB3YXMgcmVhbGx5IGluY29tcGxldGUuIFVwZ3JhZGUgdG8KICAgIGEgcmVjZW50IHZlcnNpb24sIHRoZXJlIGFyZSBubyBrbm93biBidWdzIGluIHRoZSBjdXJyZW50IHZlcnNpb24uPC9wPgogIDwvbGk+CiAgPGxpPjxlbT5UaGUgZXhhbXBsZSBwcm92aWRlZCBpbiB0aGUgd2ViIHBhZ2UgZG9lcyBub3QgY29tcGlsZS48L2VtPgogICAgPHA+SXQncyBoYXJkIHRvIG1haW50YWluIHRoZSBkb2N1bWVudGF0aW9uIGluIHN5bmMgd2l0aCB0aGUgY29kZQogICAgJmx0O2dyaW4vJmd0OyAuLi48L3A+CiAgICA8cD5DaGVjayB0aGUgcHJldmlvdXMgcG9pbnRzIDEvIGFuZCAyLyByYWlzZWQgYmVmb3JlLCBhbmQgcGxlYXNlIHNlbmQKICAgIHBhdGNoZXMuPC9wPgogIDwvbGk+CiAgPGxpPjxlbT5XaGVyZSBjYW4gSSBnZXQgbW9yZSBleGFtcGxlcyBhbmQgaW5mb3JtYXRpb24gdGhhbiBwcml2b2RlZCBvbiB0aGUKICAgIHdlYiBwYWdlPzwvZW0+CiAgICA8cD5JZGVhbGx5IGEgbGlieG1sIGJvb2sgd291bGQgYmUgbmljZS4gSSBoYXZlIG5vIHN1Y2ggcGxhbiAuLi4gQnV0IHlvdQogICAgY2FuOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPmNoZWNrIG1vcmUgZGVlcGx5IHRoZSA8YSBocmVmPSJodG1sL2xpYnhtbC1saWIuaHRtbCI+ZXhpc3RpbmcKICAgICAgICBnZW5lcmF0ZWQgZG9jPC9hPjwvbGk+CiAgICAgIDxsaT5sb29rIGZvciBleGFtcGxlcyBvZiB1c2UgZm9yIGxpYnhtbCBmdW5jdGlvbiB1c2luZyB0aGUgR25vbWUgY29kZS4KICAgICAgICBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIHdpbGwgcXVlcnkgdGhlIGZ1bGwgR25vbWUgQ1ZTIGJhc2UgZm9yIHRoZQogICAgICAgIHVzZSBvZiB0aGUgPHN0cm9uZz54bWxBZGRDaGlsZCgpPC9zdHJvbmc+IGZ1bmN0aW9uOgogICAgICAgIDxwPjxhCiAgICAgICAgaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NlYXJjaD9zdHJpbmc9eG1sQWRkQ2hpbGQiPmh0dHA6Ly9jdnMuZ25vbWUub3JnL2x4ci9zZWFyY2g/c3RyaW5nPXhtbEFkZENoaWxkPC9hPjwvcD4KICAgICAgICA8cD5UaGlzIG1heSBiZSBzbG93LCBhIGxhcmdlIGhhcmR3YXJlIGRvbmF0aW9uIHRvIHRoZSBnbm9tZSBwcm9qZWN0CiAgICAgICAgY291bGQgY3VyZSB0aGlzIDotKTwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPjxhCiAgICAgICAgaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvYm9uc2FpL3J2aWV3LmNnaT9jdnNyb290PS9jdnMvZ25vbWUmYW1wO2Rpcj1nbm9tZS14bWwiPkJyb3dzZQogICAgICAgIHRoZSBsaWJ4bWwgc291cmNlPC9hPiAsIEkgdHJ5IHRvIHdyaXRlIGNvZGUgYXMgY2xlYW4gYW5kIGRvY3VtZW50ZWQKICAgICAgICBhcyBwb3NzaWJsZSwgc28gbG9va2luZyBhdCBpdCBtYXkgYmUgaGVscGZ1bC4gSW4gcGFydGljdWxhciB0aGUgY29kZQogICAgICAgIG9mIHhtbGxpbnQuYyBhbmQgb2YgdGhlIHZhcmlvdXMgdGVzdFhYWC5jIHRlc3QgcHJvZ3JhbXMgc2hvdWxkCiAgICAgICAgcHJvdmlkZSBnb29kIGV4YW1wbGVzIG9mIGhvdyB0byBkbyB0aGluZ3Mgd2l0aCB0aGUgbGlicmFyeS48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5XaGF0IGFib3V0IEMrKyA/CiAgICA8cD5saWJ4bWwgaXMgd3JpdHRlbiBpbiBwdXJlIEMgaW4gb3JkZXIgdG8gYWxsb3cgZWFzeSByZXVzZSBvbiBhIG51bWJlcgogICAgb2YgcGxhdGZvcm1zLCBpbmNsdWRpbmcgZW1iZWRkZWQgc3lzdGVtcy4gSSBkb24ndCBpbnRlbmQgdG8gY29udmVydCB0bwogICAgQysrLjwvcD4KICAgIDxwPlRoZXJlIGFyZSBob3dldmVyIGEgZmV3IEMrKyB3cmFwcGVycyB3aGljaCBtYXkgZnVsZmlsbCB5b3VyIG5lZWRzOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPmJ5IEFyaSBKb2huc29uICZsdDthcmlAYnRpZ2F0ZS5jb20mZ3Q7OgogICAgICAgIDxwPldlYnNpdGU6IDxhCiAgICAgICAgaHJlZj0iaHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLyI+aHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLzwvYT48L3A+CiAgICAgICAgPHA+RG93bmxvYWQ6IDxhCiAgICAgICAgaHJlZj0iaHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrL2xpYnhtbCsrLnRhci5neiI+aHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrL2xpYnhtbCsrLnRhci5nejwvYT48L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT5ieSBQZXRlciBKb25lcyAmbHQ7cGpvbmVzQHBtYWRlLm9yZyZndDsKICAgICAgICA8cD5XZWJzaXRlOiA8YQogICAgICAgIGhyZWY9Imh0dHA6Ly9wbWFkZS5vcmcvcGpvbmVzL3NvZnR3YXJlL3htbHdyYXBwLyI+aHR0cDovL3BtYWRlLm9yZy9wam9uZXMvc29mdHdhcmUveG1sd3JhcHAvPC9hPjwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+SG93IHRvIHZhbGlkYXRlIGEgZG9jdW1lbnQgYSBwb3N0ZXJpb3JpID8KICAgIDxwPkl0IGlzIHBvc3NpYmxlIHRvIHZhbGlkYXRlIGRvY3VtZW50cyB3aGljaCBoYWQgbm90IGJlZW4gdmFsaWRhdGVkIGF0CiAgICBpbml0aWFsIHBhcnNpbmcgdGltZSBvciBkb2N1bWVudHMgd2hpY2ggaGF2ZSBiZWVuIGJ1aWx0IGZyb20gc2NyYXRjaAogICAgdXNpbmcgdGhlIEFQSS4gVXNlIHRoZSA8YQogICAgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXZhbGlkLmh0bWwjWE1MVkFMSURBVEVEVEQiPnhtbFZhbGlkYXRlRHRkKCk8L2E+CiAgICBmdW5jdGlvbi4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzaW1wbHkgYWRkIGEgRFREIHRvIGFuIGV4aXN0aW5nCiAgICBkb2N1bWVudDo8L3A+CiAgICA8cHJlPnhtbERvY1B0ciBkb2M7IC8qIHlvdXIgZXhpc3RpbmcgZG9jdW1lbnQgKi8KeG1sRHRkUHRyIGR0ZCA9IHhtbFBhcnNlRFREKE5VTEwsIGZpbGVuYW1lX29mX2R0ZCk7IC8qIHBhcnNlIHRoZSBEVEQgKi8KCiAgICAgICAgZHRkLSZndDtuYW1lID0geG1sU3RyRHVwKCh4bWxDaGFyKikicm9vdF9uYW1lIik7IC8qIHVzZSB0aGUgZ2l2ZW4gcm9vdCAqLwoKICAgICAgICBkb2MtJmd0O2ludFN1YnNldCA9IGR0ZDsKICAgICAgICBpZiAoZG9jLSZndDtjaGlsZHJlbiA9PSBOVUxMKSB4bWxBZGRDaGlsZCgoeG1sTm9kZVB0cilkb2MsICh4bWxOb2RlUHRyKWR0ZCk7CiAgICAgICAgZWxzZSB4bWxBZGRQcmV2U2libGluZyhkb2MtJmd0O2NoaWxkcmVuLCAoeG1sTm9kZVB0cilkdGQpOwogICAgICAgICAgPC9wcmU+CiAgPC9saT4KICA8bGk+U28gd2hhdCBpcyB0aGlzIGZ1bmt5ICJ4bWxDaGFyIiB1c2VkIGFsbCB0aGUgdGltZT8KICAgIDxwPkl0IGlzIGEgbnVsbCB0ZXJtaW5hdGVkIHNlcXVlbmNlIG9mIHV0Zi04IGNoYXJhY3RlcnMuIEFuZCBvbmx5IHV0Zi04IQogICAgWW91IG5lZWQgdG8gY29udmVydCBzdHJpbmdzIGVuY29kZWQgaW4gZGlmZmVyZW50IHdheXMgdG8gdXRmLTggYmVmb3JlCiAgICBwYXNzaW5nIHRoZW0gdG8gdGhlIEFQSS4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCB3aXRoIHRoZSBpY29udiBsaWJyYXJ5CiAgICBmb3IgaW5zdGFuY2UuPC9wPgogIDwvbGk+CiAgPGxpPmV0YyAuLi48L2xpPgo8L29sPgoKPHA+PC9wPgoKPGgyPjxhIG5hbWU9IkRvY3VtZW50YXQiPkRvY3VtZW50YXRpb248L2E+PC9oMj4KCjxwPlRoZXJlIGFyZSBzZXZlcmFsIG9uLWxpbmUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdXNpbmcgbGlieG1sOjwvcD4KPG9sPgogIDxsaT5Vc2UgdGhlIDxhIGhyZWY9InNlYXJjaC5waHAiPnNlYXJjaCBlbmdpbmU8L2E+IHRvIGxvb2t1cAogIGluZm9ybWF0aW9ucy48L2xpPgogIDxsaT5DaGVjayB0aGUgPGEgaHJlZj0iRkFRLmh0bWwiPkZBUS48L2E+PC9saT4KICA8bGk+Q2hlY2sgdGhlIDxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC1saWIuaHRtbCI+ZXh0ZW5zaXZlCiAgICBkb2N1bWVudGF0aW9uPC9hPiBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBmcm9tIGNvZGUgY29tbWVudHMgKHVzaW5nIDxhCiAgICBocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9ib25zYWkvcnZpZXcuY2dpP2N2c3Jvb3Q9L2N2cy9nbm9tZSZhbXA7ZGlyPWd0ay1kb2MiPmd0awogICAgZG9jPC9hPikuPC9saT4KICA8bGk+TG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBhYm91dCA8YSBocmVmPSJlbmNvZGluZy5odG1sIj5saWJ4bWwKICAgIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQ8L2E+LjwvbGk+CiAgPGxpPlRoaXMgcGFnZSBwcm92aWRlcyBhIGdsb2JhbCBvdmVydmlldyBhbmQgPGEgaHJlZj0iZXhhbXBsZS5odG1sIj5zb21lCiAgICBleGFtcGxlczwvYT4gb24gaG93IHRvIHVzZSBsaWJ4bWwuPC9saT4KICA8bGk+Sm9obiBGbGVjaydzIGxpYnhtbCB0dXRvcmlhbDogPGEgaHJlZj0idHV0b3JpYWwvaW5kZXguaHRtbCI+aHRtbDwvYT4gb3IKICAgIDxhIGhyZWY9InR1dG9yaWFsL3htbHR1dG9yaWFsLnBkZiI+cGRmPC9hPi48L2xpPgogIDxsaT48YSBocmVmPSJtYWlsdG86amFtZXNAZGFhLmNvbS5hdSI+SmFtZXMgSGVuc3RyaWRnZTwvYT4gd3JvdGUgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cuZGFhLmNvbS5hdS9+amFtZXMvZ25vbWUveG1sLXNheC94bWwtc2F4Lmh0bWwiPnNvbWUgbmljZQogICAgZG9jdW1lbnRhdGlvbjwvYT4gZXhwbGFpbmluZyBob3cgdG8gdXNlIHRoZSBsaWJ4bWwgU0FYIGludGVyZmFjZS48L2xpPgogIDxsaT5HZW9yZ2UgTGVibCB3cm90ZSA8YQogICAgaHJlZj0iaHR0cDovL3d3dy00LmlibS5jb20vc29mdHdhcmUvZGV2ZWxvcGVyL2xpYnJhcnkvZ25vbWUzLyI+YW4gYXJ0aWNsZQogICAgZm9yIElCTSBkZXZlbG9wZXJXb3JrczwvYT4gYWJvdXQgdXNpbmcgbGlieG1sLjwvbGk+CiAgPGxpPkNoZWNrIDxhIGhyZWY9Imh0dHA6Ly9jdnMuZ25vbWUub3JnL2x4ci9zb3VyY2UvZ25vbWUteG1sL1RPRE8iPnRoZSBUT0RPCiAgICBmaWxlPC9hPi48L2xpPgogIDxsaT5SZWFkIHRoZSA8YSBocmVmPSJ1cGdyYWRlLmh0bWwiPjEueCB0byAyLnggdXBncmFkZSBwYXRoPC9hPgogICAgZGVzY3JpcHRpb24uIElmIHlvdSBhcmUgc3RhcnRpbmcgYSBuZXcgcHJvamVjdCB1c2luZyBsaWJ4bWwgeW91IHNob3VsZAogICAgcmVhbGx5IHVzZSB0aGUgMi54IHZlcnNpb24uPC9saT4KICA8bGk+QW5kIGRvbid0IGZvcmdldCB0byBsb29rIGF0IHRoZSA8YQogICAgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8iPm1haWxpbmctbGlzdCBhcmNoaXZlPC9hPi48L2xpPgo8L29sPgoKPGgyPjxhIG5hbWU9IlJlcG9ydGluZyI+UmVwb3J0aW5nIGJ1Z3MgYW5kIGdldHRpbmcgaGVscDwvYT48L2gyPgoKPHA+V2VsbCwgYnVncyBvciBtaXNzaW5nIGZlYXR1cmVzIGFyZSBhbHdheXMgcG9zc2libGUsIGFuZCBJIHdpbGwgbWFrZSBhCnBvaW50IG9mIGZpeGluZyB0aGVtIGluIGEgdGltZWx5IGZhc2hpb24uIFRoZSBiZXN0IHdheSB0byByZXBvcnQgYSBidWcgaXMgdG8KdXNlIHRoZSA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sIj5Hbm9tZQpidWcgdHJhY2tpbmcgZGF0YWJhc2U8L2E+IChtYWtlIHN1cmUgdG8gdXNlIHRoZSAibGlieG1sMiIgbW9kdWxlIG5hbWUpLiBJCmxvb2sgYXQgcmVwb3J0cyB0aGVyZSByZWd1bGFybHkgYW5kIGl0J3MgZ29vZCB0byBoYXZlIGEgcmVtaW5kZXIgd2hlbiBhIGJ1ZwppcyBzdGlsbCBvcGVuLiBCZSBzdXJlIHRvIHNwZWNpZnkgdGhhdCB0aGUgYnVnIGlzIGZvciB0aGUgcGFja2FnZSBsaWJ4bWwyLjwvcD4KCjxwPlRoZXJlIGlzIGFsc28gYSBtYWlsaW5nLWxpc3QgPGEKaHJlZj0ibWFpbHRvOnhtbEBnbm9tZS5vcmciPnhtbEBnbm9tZS5vcmc8L2E+IGZvciBsaWJ4bWwsIHdpdGggYW4gIDxhCmhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvIj5vbi1saW5lIGFyY2hpdmU8L2E+ICg8YQpocmVmPSJodHRwOi8veG1sc29mdC5vcmcvbWVzc2FnZXMiPm9sZDwvYT4pLiBUbyBzdWJzY3JpYmUgdG8gdGhpcyBsaXN0LApwbGVhc2UgdmlzaXQgdGhlIDxhCmhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3htbCI+YXNzb2NpYXRlZCBXZWI8L2E+IHBhZ2UgYW5kCmZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zLiA8c3Ryb25nPkRvIG5vdCBzZW5kIGNvZGUsIEkgd29uJ3QgZGVidWcgaXQ8L3N0cm9uZz4KKGJ1dCBwYXRjaGVzIGFyZSByZWFsbHkgYXBwcmVjaWF0ZWQhKS48L3A+Cgo8cD5DaGVjayB0aGUgZm9sbG93aW5nIDxzdHJvbmc+PHNwYW4gc3R5bGU9ImNvbG9yOiAjRkYwMDAwIj5iZWZvcmUKcG9zdGluZzwvc3Bhbj48L3N0cm9uZz46PC9wPgo8dWw+CiAgPGxpPlJlYWQgdGhlIDxhIGhyZWY9IkZBUS5odG1sIj5GQVE8L2E+IGFuZCA8YSBocmVmPSJzZWFyY2gucGhwIj51c2UgdGhlCiAgICBzZWFyY2ggZW5naW5lPC9hPiB0byBnZXQgaW5mb3JtYXRpb25zIHJlbGF0ZWQgdG8geW91ciBwcm9ibGVtLjwvbGk+CiAgPGxpPk1ha2Ugc3VyZSB5b3UgYXJlIDxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnLyI+dXNpbmcgYSByZWNlbnQKICAgIHZlcnNpb248L2E+LCBhbmQgdGhhdCB0aGUgcHJvYmxlbSBzdGlsbCBzaG93cyB1cCBpbiBhIHJlY2VudCB2ZXJzaW9uLjwvbGk+CiAgPGxpPkNoZWNrIHRoZSA8YSBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLyI+bGlzdAogICAgYXJjaGl2ZXM8L2E+IHRvIHNlZSBpZiB0aGUgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgYWxyZWFkeS4gSW4gdGhpcyBjYXNlCiAgICB0aGVyZSBpcyBwcm9iYWJseSBhIGZpeCBhdmFpbGFibGUsIHNpbWlsYXJseSBjaGVjayB0aGUgPGEKICAgIGhyZWY9Imh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1saWJ4bWwiPnJlZ2lzdGVyZWQKICAgIG9wZW4gYnVnczwvYT4uPC9saT4KICA8bGk+TWFrZSBzdXJlIHlvdSBjYW4gcmVwcm9kdWNlIHRoZSBidWcgd2l0aCB4bWxsaW50IG9yIG9uZSBvZiB0aGUgdGVzdAogICAgcHJvZ3JhbXMgZm91bmQgaW4gc291cmNlIGluIHRoZSBkaXN0cmlidXRpb24uPC9saT4KICA8bGk+UGxlYXNlIHNlbmQgdGhlIGNvbW1hbmQgc2hvd2luZyB0aGUgZXJyb3IgYXMgd2VsbCBhcyB0aGUgaW5wdXQgKGFzIGFuCiAgICBhdHRhY2htZW50KTwvbGk+CjwvdWw+Cgo8cD5UaGVuIHNlbmQgdGhlIGJ1ZyB3aXRoIGFzc29jaWF0ZWQgaW5mb3JtYXRpb25zIHRvIHJlcHJvZHVjZSBpdCB0byB0aGUgPGEKaHJlZj0ibWFpbHRvOnhtbEBnbm9tZS5vcmciPnhtbEBnbm9tZS5vcmc8L2E+IGxpc3Q7IGlmIGl0J3MgcmVhbGx5IGxpYnhtbApyZWxhdGVkIEkgd2lsbCBhcHByb3ZlIGl0Li4gUGxlYXNlIGRvIG5vdCBzZW5kIG1haWwgdG8gbWUgZGlyZWN0bHksIGl0IG1ha2VzCnRoaW5ncyByZWFsbHkgaGFyZCB0byB0cmFjayBhbmQgaW4gc29tZSBjYXNlcyBJIGFtIG5vdCB0aGUgYmVzdCBwZXJzb24gdG8KYW5zd2VyIGEgZ2l2ZW4gcXVlc3Rpb24uIEFzayB0aGUgbGlzdCBpbnN0ZWFkLjwvcD4KCjxwPk9mIGNvdXJzZSwgYnVncyByZXBvcnRlZCB3aXRoIGEgc3VnZ2VzdGVkIHBhdGNoIGZvciBmaXhpbmcgdGhlbSB3aWxsCnByb2JhYmx5IGJlIHByb2Nlc3NlZCBmYXN0ZXIgdGhhbiB0aG9zZSB3aXRob3V0LjwvcD4KCjxwPklmIHlvdSdyZSBsb29raW5nIGZvciBoZWxwLCBhIHF1aWNrIGxvb2sgYXQgPGEKaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8iPnRoZSBsaXN0IGFyY2hpdmU8L2E+IG1heSBhY3R1YWxseQpwcm92aWRlIHRoZSBhbnN3ZXIuIEkgdXN1YWxseSBzZW5kIHNvdXJjZSBzYW1wbGVzIHdoZW4gYW5zd2VyaW5nIGxpYnhtbCB1c2FnZQpxdWVzdGlvbnMuIFRoZSA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9ib29rMS5odG1sIj5hdXRvLWdlbmVyYXRlZApkb2N1bWVudGF0aW9uPC9hPiBpcyBub3QgYXMgcG9saXNoZWQgYXMgSSB3b3VsZCBsaWtlIChpIG5lZWQgdG8gbGVhcm4gbW9yZQphYm91dCBEb2NCb29rKSwgYnV0IGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LjwvcD4KCjxoMj48YSBuYW1lPSJoZWxwIj5Ib3cgdG8gaGVscDwvYT48L2gyPgoKPHA+WW91IGNhbiBoZWxwIHRoZSBwcm9qZWN0IGluIHZhcmlvdXMgd2F5cywgdGhlIGJlc3QgdGhpbmcgdG8gZG8gZmlyc3QgaXMgdG8Kc3Vic2NyaWJlIHRvIHRoZSBtYWlsaW5nLWxpc3QgYXMgZXhwbGFpbmVkIGJlZm9yZSwgY2hlY2sgdGhlIDxhCmhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvIj5hcmNoaXZlcyA8L2E+YW5kIHRoZSA8YQpocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sIj5Hbm9tZSBidWcKZGF0YWJhc2U8L2E+OjwvcD4KPG9sPgogIDxsaT5Qcm92aWRlIHBhdGNoZXMgd2hlbiB5b3UgZmluZCBwcm9ibGVtcy48L2xpPgogIDxsaT5Qcm92aWRlIHRoZSBkaWZmcyB3aGVuIHlvdSBwb3J0IGxpYnhtbCB0byBhIG5ldyBwbGF0Zm9ybS4gVGhleSBtYXkgbm90CiAgICBiZSBpbnRlZ3JhdGVkIGluIGFsbCBjYXNlcyBidXQgaGVscCBwaW5wb2ludGluZyBwb3J0YWJpbGl0eSBwcm9ibGVtcwogIGFuZDwvbGk+CiAgPGxpPlByb3ZpZGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoZWl0aGVyIGFzIHBhdGNoZXMgdG8gdGhlIGNvZGUgY29tbWVudHMgb3IKICAgIGFzIEhUTUwgZGlmZnMpLjwvbGk+CiAgPGxpPlByb3ZpZGUgbmV3IGRvY3VtZW50YXRpb25zIHBpZWNlcyAodHJhbnNsYXRpb25zLCBleGFtcGxlcywgZXRjCiAgLi4uKS48L2xpPgogIDxsaT5DaGVjayB0aGUgVE9ETyBmaWxlIGFuZCB0cnkgdG8gY2xvc2Ugb25lIG9mIHRoZSBpdGVtcy48L2xpPgogIDxsaT5UYWtlIG9uZSBvZiB0aGUgcG9pbnRzIHJhaXNlZCBpbiB0aGUgYXJjaGl2ZSBvciB0aGUgYnVnIGRhdGFiYXNlIGFuZAogICAgcHJvdmlkZSBhIGZpeC4gPGEgaHJlZj0ibWFpbHRvOmRhbmllbEB2ZWlsbGFyZC5jb20iPkdldCBpbiB0b3VjaCB3aXRoIG1lCiAgICA8L2E+YmVmb3JlIHRvIGF2b2lkIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBhbmQgY2hlY2sgdGhhdCB0aGUgc3VnZ2VzdGVkCiAgICBmaXggd2lsbCBmaXQgaW4gbmljZWx5IDotKTwvbGk+Cjwvb2w+Cgo8aDI+PGEgbmFtZT0iRG93bmxvYWRzIj5Eb3dubG9hZHM8L2E+PC9oMj4KCjxwPlRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgbGlieG1sIGNhbiBiZSBmb3VuZCBvbiA8YQpocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy8iPnhtbHNvZnQub3JnPC9hPiAoPGEKaHJlZj0iZnRwOi8vc3BlYWtlYXN5LnJwbWZpbmQubmV0L3B1Yi9saWJ4bWwvIj5TZWF0dGxlPC9hPiwgPGEKaHJlZj0iZnRwOi8vZnIucnBtZmluZC5uZXQvcHViL2xpYnhtbC8iPkZyYW5jZTwvYT4pIG9yIG9uIHRoZSA8YQpocmVmPSJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9NSVJST1JTLmh0bWwiPkdub21lIEZUUCBzZXJ2ZXI8L2E+IGVpdGhlcgphcyBhIDxhIGhyZWY9ImZ0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3NvdXJjZXMvbGlieG1sMi8yLjQvIj5zb3VyY2UKYXJjaGl2ZTwvYT48IS0tIGNvbW1lbnRpbmcgdGhpcyBvdXQgYmVjYXVzZSB0aGV5IHNlZW0gdG8gaGF2ZSBkaXNhcHBlYXJlZCBvciA8YQpocmVmPSJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zdGFibGUvcmVkaGF0L2kzODYvbGlieG1sLyI+UlBNCnBhY2thZ2VzPC9hPiAtLT4KICwgQW50b25pbiBTcHJpbnpsIGFsc28gcHJvdmlkZSA8YSBocmVmPSJmdHA6Ly9nZC50dXdpZW4uYWMuYXQvcHViL2xpYnhtbC8iPmEKbWlycm9yIGluIEF1c3RyaWE8L2E+LiAoTk9URSB0aGF0IHlvdSBuZWVkIGJvdGggdGhlIDxhCmhyZWY9Imh0dHA6Ly9ycG1maW5kLm5ldC9saW51eC9SUE0vbGlieG1sMi5odG1sIj5saWJ4bWwoMik8L2E+IGFuZCA8YQpocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvUlBNL2xpYnhtbDItZGV2ZWwuaHRtbCI+bGlieG1sKDIpLWRldmVsPC9hPgpwYWNrYWdlcyBpbnN0YWxsZWQgdG8gY29tcGlsZSBhcHBsaWNhdGlvbnMgdXNpbmcgbGlieG1sLikgPGEKaHJlZj0ibWFpbHRvOmlnb3JAc3R1ZC5maC1mcmFua2Z1cnQuZGUiPklnb3IgIFpsYXRrb3ZpYzwvYT4gaXMgbm93IHRoZQptYWludGFpbmVyIG9mIHRoZSBXaW5kb3dzIHBvcnQsIDxhCmhyZWY9Imh0dHA6Ly93d3cuZmgtZnJhbmtmdXJ0LmRlL35pZ29yL3Byb2plY3RzL2xpYnhtbC9pbmRleC5odG1sIj5oZQpwcm92aWRlcyBiaW5hcmllczwvYT4uIDxhIGhyZWY9Im1haWx0bzpHYXJ5LlBlbm5pbmd0b25Ac3VuLmNvbSI+R2FyeQpQZW5uaW5ndG9uPC9hPiBwcm92aWRlcyA8YSBocmVmPSJodHRwOi8vZ2FyeXBlbm5pbmd0b24ubmV0L2xpYnhtbDIvIj5Tb2xhcmlzCmJpbmFyaWVzPC9hPi4gPGEgaHJlZj0ibWFpbHRvOlN0ZXZlLkJhbGxAenZlbm8uY29tIj5TdGV2ZSBCYWxsPC9hPiBwcm92aWRlcwo8YSBocmVmPSJodHRwOi8vd3d3Lnp2ZW5vLmNvbS9vcGVuX3NvdXJjZS9saWJ4bWwyeHNsdC5odG1sIj5NYWMgT3MgWApiaW5hcmllczwvYT4uPC9wPgoKPHA+PGEgbmFtZT0iU25hcHNob3QiPlNuYXBzaG90OjwvYT48L3A+Cjx1bD4KICA8bGk+Q29kZSBmcm9tIHRoZSBXM0MgY3ZzIGJhc2UgbGlieG1sIDxhCiAgICBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy9jdnMtc25hcHNob3QudGFyLmd6Ij5jdnMtc25hcHNob3QudGFyLmd6PC9hPi48L2xpPgogIDxsaT5Eb2NzLCBjb250ZW50IG9mIHRoZSB3ZWIgc2l0ZSwgdGhlIGxpc3QgYXJjaGl2ZSBpbmNsdWRlZCA8YQogICAgaHJlZj0iZnRwOi8veG1sc29mdC5vcmcvbGlieG1sLWRvY3MudGFyLmd6Ij5saWJ4bWwtZG9jcy50YXIuZ3o8L2E+LjwvbGk+CjwvdWw+Cgo8cD48YSBuYW1lPSJDb250cmlicyI+Q29udHJpYnV0aW9uczo8L2E+PC9wPgoKPHA+SSBkbyBhY2NlcHQgZXh0ZXJuYWwgY29udHJpYnV0aW9ucywgZXNwZWNpYWxseSBpZiBjb21waWxpbmcgb24gYW5vdGhlcgpwbGF0Zm9ybSwgIGdldCBpbiB0b3VjaCB3aXRoIG1lIHRvIHVwbG9hZCB0aGUgcGFja2FnZSwgd3JhcHBlcnMgZm9yIHZhcmlvdXMKbGFuZ3VhZ2VzIGhhdmUgYmVlbiBwcm92aWRlZCwgYW5kIGNhbiBiZSBmb3VuZCBpbiB0aGUgPGEKaHJlZj0iY29udHJpYnMuaHRtbCI+Y29udHJpYiBzZWN0aW9uPC9hPjwvcD4KCjxwPkxpYnhtbCBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIENWUzo8L3A+Cjx1bD4KICA8bGk+PHA+VGhlIDxhCiAgICBocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9ib25zYWkvcnZpZXcuY2dpP2N2c3Jvb3Q9L2N2cy9nbm9tZSZhbXA7ZGlyPWdub21lLXhtbCI+R25vbWUKICAgIENWUyBiYXNlPC9hPi4gQ2hlY2sgdGhlIDxhCiAgICBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy90b29scy9jdnMuaHRtbCI+R25vbWUgQ1ZTIFRvb2xzPC9hPgogICAgcGFnZTsgdGhlIENWUyBtb2R1bGUgaXMgPGI+Z25vbWUteG1sPC9iPi48L3A+CiAgPC9saT4KICA8bGk+VGhlIDxzdHJvbmc+bGlieHNsdDwvc3Ryb25nPiBtb2R1bGUgaXMgYWxzbyBwcmVzZW50IHRoZXJlPC9saT4KPC91bD4KCjxoMj48YSBuYW1lPSJOZXdzIj5OZXdzPC9hPjwvaDI+Cgo8aDM+Q1ZTIG9ubHkgOiBjaGVjayB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9nbm9tZS14bWwvQ2hhbmdlTG9nIj5DaGFuZ2Vsb2c8L2E+IGZpbGUKZm9yIGEgcmVhbGx5IGFjY3VyYXRlIGRlc2NyaXB0aW9uPC9oMz4KCjxwPkl0ZW1zIG5vdCBmaW5pc2hlZCBhbmQgd29ya2VkIG9uLCBnZXQgaW4gdG91Y2ggd2l0aCB0aGUgbGlzdCBpZiB5b3Ugd2FudAp0byB0ZXN0IHRob3NlPC9wPgo8dWw+CiAgPGxpPkZpbmlzaGluZyB1cCA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8iPlhNTAogICAgU2NoZW1hczwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlIj5YSW5jbHVkZTwvYT48L2xpPgo8L3VsPgoKPGgzPjIuNC4yNzogTm92IDE3IDIwMDI8L2gzPgo8dWw+CiAgPGxpPmZpeGVzIGZvciB0aGUgUHl0aG9uIGJpbmRpbmdzPC9saT4KICA8bGk+YSBudW1iZXIgb2YgYnVnIGZpeGVzOiBTR01MIGNhdGFsb2dzLCB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoKSwKICAgIEhUTUwgcGFyc2VyLCAgU2NoZW1hcyAoQ2hhcmxlcyBCb3plbWFuKSwgZG9jdW1lbnQgZnJhZ21lbnQgc3VwcG9ydAogICAgKENocmlzdGlhbiBHbGFobiksIHhtbFJlY29uY2lsaWF0ZU5zIChCcmlhbiBTdGFmZm9yZCksIFhQb2ludGVyLAogICAgeG1sRnJlZU5vZGUoKSwgeG1sU0FYUGFyc2VNZW1vcnkgKFBldGVyIEpvbmVzKSwgeG1sR2V0Tm9kZVBhdGggKFBldHIKICAgIFBhamFzKSwgZW50aXRpZXMgcHJvY2Vzc2luZzwvbGk+CiAgPGxpPmFkZGVkIGdyZXAgdG8geG1sbGludCAtLXNoZWxsPC9saT4KICA8bGk+Vk1TIHVwZGF0ZSBwYXRjaCBmcm9tIENyYWlnIEEuIEJlcnJ5PC9saT4KICA8bGk+Y2xlYW51cCBvZiB0aGUgV2luZG93cyBidWlsZCB3aXRoIHN1cHBvcnQgZm9yIG1vcmUgY29tcGlsZXJzIChJZ29yKSwKICAgIGJldHRlciB0aHJlYWQgc3VwcG9ydCBvbiBXaW5kb3dzPC9saT4KICA8bGk+Y2xlYW51cCBvZiBVbml4IE1ha2VmaWxlcyBhbmQgc3BlYyBmaWxlPC9saT4KICA8bGk+SW1wcm92ZW1lbnRzIHRvIHRoZSBkb2N1bWVudGF0aW9uIChKb2huIEZsZWNrKTwvbGk+CjwvdWw+Cgo8aDM+Mi40LjI2OiBPY3QgMTggMjAwMjwvaDM+Cjx1bD4KICA8bGk+UGF0Y2hlcyBmb3IgV2luZG93cyBDRSBwb3J0LCBpbXByb3ZlbWVudHMgb24gV2luZG93cyBwYXRocyBoYW5kbGluZzwvbGk+CiAgPGxpPkZpeGVzIHRvIHRoZSB2YWxpZGF0aW9uICBjb2RlIChEVEQgYW5kIFNjaGVtYXMpLCB4bWxOb2RlR2V0UGF0aCgpICwKICAgIEhUTUwgc2VyaWFsaXphdGlvbiwgTmFtZXNwYWNlIGNvbXBsaWFuY2UsICBhbmQgYSBudW1iZXIgb2Ygc21hbGwKICBwcm9ibGVtczwvbGk+CjwvdWw+Cgo8aDM+Mi40LjI1OiBTZXAgMjYgMjAwMjwvaDM+Cjx1bD4KICA8bGk+QSBudW1iZXIgb2YgYnVnIGZpeGVzOiBYUGF0aCwgdmFsaWRhdGlvbiwgUHl0aG9uIGJpbmRpbmdzLCBET00gYW5kCiAgICB0cmVlLCB4bWxJL08sICBIdG1sPC9saT4KICA8bGk+U2VyaW91cyByZXdyaXRlIG9mIFhJbmNsdWRlPC9saT4KICA8bGk+TWFkZSBYTUwgU2NoZW1hcyByZWdleHAgcGFydCBvZiB0aGUgZGVmYXVsdCBidWlsZCBhbmQgQVBJcywgc21hbGwgZml4CiAgICBhbmQgaW1wcm92ZW1lbnQgb2YgdGhlIHJlZ2V4cCBjb3JlPC9saT4KICA8bGk+Q2hhbmdlZCB0aGUgdmFsaWRhdGlvbiBjb2RlIHRvIHJldXNlIFhNTCBTY2hlbWFzIHJlZ2V4cCBBUElzPC9saT4KICA8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIFdpbmRvd3MgZmlsZSBwYXRocywgaW1wcm92ZW1lbnQgb2YgTWFrZWZpbGVzIChJZ29yLAogICAgRGFuaWVsIEdlaHJpZ2VyLCBNYXJrIFZha29jKTwvbGk+CiAgPGxpPkltcHJvdmVkIHRoZSBweXRob24gSS9PIGJpbmRpbmdzLCB0aGUgdGVzdHMsIGFkZGVkIHJlc29sdmVyIGFuZCByZWdleHAKICAgIEFQSXM8L2xpPgogIDxsaT5OZXcgbG9nb3MgZnJvbSBNYXJjIExpeWFuYWdlPC9saT4KICA8bGk+VHV0b3JpYWwgaW1wcm92ZW1lbnRzOiBKb2huIEZsZWNrLCBDaHJpc3RvcGhlciBIYXJyaXM8L2xpPgogIDxsaT5NYWtlZmlsZTogRml4ZXMgZm9yIEFNRCB4ODZfNjQgKE1hbmRyYWtlKSwgREVTVERJUiAoQ2hyaXN0b3BoZQogIE1lcmxldCk8L2xpPgogIDxsaT5yZW1vdmFsIG9mIGFsbCBzdGRlcnIvcGVycm9yIHVzZSBmb3IgZXJyb3IgcmVwb3J0aW5nPC9saT4KICA8bGk+QmV0dGVyIGVycm9yIHJlcG9ydGluZzogWFBhdGggYW5kIERURCB2YWxpZGF0aW9uPC9saT4KICA8bGk+dXBkYXRlIG9mIHRoZSB0cmlvIHBvcnRhYmlsaXR5IGxheWVyIChCam9ybiBSZWVzZSk8L2xpPgo8L3VsPgoKPHA+PHN0cm9uZz4yLjQuMjQ6IEF1ZyAyMiAyMDAyPC9zdHJvbmc+PC9wPgo8dWw+CiAgPGxpPlhQYXRoIGZpeGVzIChXaWxsaWFtKSwgeGY6ZXNjYXBlLXVyaSgpIChXZXNsZXkgVGVycHN0cmEpPC9saT4KICA8bGk+UHl0aG9uIGJpbmRpbmcgZml4ZXM6IG1ha2VmaWxlcyAoV2lsbGlhbSksIGdlbmVyYXRvciwgcnBtIGJ1aWxkLCB4ODYtNjQKICAgIChmY3JvemF0KTwvbGk+CiAgPGxpPkhUTUwgJmx0O3N0eWxlJmd0OyBhbmQgYm9vbGVhbiBhdHRyaWJ1dGVzIHNlcmlhbGl6ZXIgZml4ZXM8L2xpPgogIDxsaT5DMTROIGltcHJvdmVtZW50cyBieSBBbGVrc2V5PC9saT4KICA8bGk+ZG9jIGNsZWFudXBzOiBSaWNrIEpvbmVzPC9saT4KICA8bGk+V2luZG93cyBjb21waWxlciBtYWtlZmlsZSB1cGRhdGVzOiBJZ29yIGFuZCBFbGl6YWJldGggQmFyaGFtPC9saT4KICA8bGk+WEluY2x1ZGU6IGltcGxlbWVudGF0aW9uIG9mIGZhbGxiYWNrIGFuZCB4bWw6YmFzZSBmaXh1cCBhZGRlZDwvbGk+CjwvdWw+Cgo8aDM+Mi40LjIzOiBKdWx5IDYgMjAwMjwvaDM+Cjx1bD4KICA8bGk+cGVyZm9ybWFuY2VzIHBhdGNoZXM6IFBldGVyIEphY29iaTwvbGk+CiAgPGxpPmMxNG4gZml4ZXMsIHRlc3RzdWl0ZSBhbmQgcGVyZm9ybWFuY2VzOiBBbGVrc2V5IFNhbmluPC9saT4KICA8bGk+YWRkZWQgeG1sRG9jRm9ybWF0RHVtcDogQ2hlbWEgQ2Vsb3JpbzwvbGk+CiAgPGxpPm5ldyB0dXRvcmlhbDogSm9obiBGbGVjazwvbGk+CiAgPGxpPm5ldyBoYXNoIGZ1bmN0aW9ucyBhbmQgcGVyZm9ybWFuY2VzOiBTYW5kZXIgVmVzaWssIHBvcnRhYmlsaXR5IGZpeCBmcm9tCiAgICBQZXRlciBKYWNvYmk8L2xpPgogIDxsaT5hIG51bWJlciBvZiBidWcgZml4ZXM6IFhQYXRoIChXaWxsaWFtIEJyYWNrLCBSaWNoYXJkIEppbmtzKSwgWE1MIGFuZAogICAgSFRNTCBwYXJzZXJzLCBJRCBsb29rdXAgZnVuY3Rpb248L2xpPgogIDxsaT5yZW1vdmFsIG9mIGFsbCByZW1haW5pbmcgc3ByaW50ZjogQWxla3NleSBTYW5pbjwvbGk+CjwvdWw+Cgo8aDM+Mi40LjIyOiBNYXkgMjcgMjAwMjwvaDM+Cjx1bD4KICA8bGk+YSBudW1iZXIgb2YgYnVnIGZpeGVzOiBjb25maWd1cmUgc2NyaXB0cywgYmFzZSBoYW5kbGluZywgcGFyc2VyLCBtZW1vcnkKICAgIHVzYWdlLCBIVE1MIHBhcnNlciwgWFBhdGgsIGRvY3VtZW50YXRpb24gKENocmlzdGlhbiBDb3JuZWxzc2VuKSwKICAgIGluZGVudGF0aW9uLCBVUkkgcGFyc2luZzwvbGk+CiAgPGxpPk9wdGltaXphdGlvbnMgZm9yIFhNTFNlYywgZml4aW5nIGFuZCBtYWtpbmcgcHVibGljIHNvbWUgb2YgdGhlIG5ldHdvcmsKICAgIHByb3RvY29sIGhhbmRsZXJzIChBbGVrc2V5KTwvbGk+CiAgPGxpPnBlcmZvcm1hbmNlIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uPC9saT4KICA8bGk+Q2hhcmxlcyBCb3plbWFuIHByb3ZpZGVkIGRhdGUgYW5kIHRpbWUgc3VwcG9ydCBmb3IgWE1MIFNjaGVtYXMKICBkYXRhdHlwZXM8L2xpPgo8L3VsPgoKPGgzPjIuNC4yMTogQXByIDI5IDIwMDI8L2gzPgoKPHA+VGhpcyByZWxlYXNlIGlzIGJvdGggYSBidWcgZml4IHJlbGVhc2UgYW5kIGFsc28gY29udGFpbnMgdGhlIGVhcmx5IFhNTApTY2hlbWFzIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyI+c3RydWN0dXJlczwvYT4gYW5kIDxhCmhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyI+ZGF0YXR5cGVzPC9hPiBjb2RlLCBiZXdhcmUsIGFsbAppbnRlcmZhY2VzIGFyZSBsaWtlbHkgdG8gY2hhbmdlLCB0aGVyZSBpcyBodWdlIGhvbGVzLCBpdCBpcyBjbGVhcmx5IGEgd29yayBpbgpwcm9ncmVzcyBhbmQgZG9uJ3QgZXZlbiB0aGluayBvZiBwdXR0aW5nIHRoaXMgY29kZSBpbiBhIHByb2R1Y3Rpb24gc3lzdGVtLAppdCdzIGFjdHVhbGx5IG5vdCBjb21waWxlZCBpbiBieSBkZWZhdWx0LiBUaGUgcmVhbCBmaXhlcyBhcmU6PC9wPgo8dWw+CiAgPGxpPmEgY291cGxlIG9mIGJ1Z3Mgb3IgbGltaXRhdGlvbnMgaW50cm9kdWNlZCBpbiAyLjQuMjA8L2xpPgogIDxsaT5wYXRjaGVzIGZvciBCb3JsYW5kIEMrKyBhbmQgTVNDIGJ5IElnb3I8L2xpPgogIDxsaT5zb21lIGZpeGVzIG9uIFhQYXRoIHN0cmluZ3MgYW5kIGNvbmZvcm1hbmNlIHBhdGNoZXMgYnkgUmljaGFyZAogIEppbmtzPC9saT4KICA8bGk+cGF0Y2ggZnJvbSBBbGVrc2V5IGZvciB0aGUgRXhjQzE0TiBzcGVjaWZpY2F0aW9uPC9saT4KICA8bGk+T1NGLzEgYnVnIGZpeCBieSBCam9ybjwvbGk+CjwvdWw+Cgo8aDM+Mi40LjIwOiBBcHIgMTUgMjAwMjwvaDM+Cjx1bD4KICA8bGk+YnVnIGZpeGVzOiBmaWxlIGRlc2NyaXB0b3IgbGVhaywgWFBhdGgsIEhUTUwgb3V0cHV0LCBEVEQgdmFsaWRhdGlvbjwvbGk+CiAgPGxpPlhQYXRoIGNvbmZvcm1hbmNlIHRlc3RpbmcgYnkgUmljaGFyZCBKaW5rczwvbGk+CiAgPGxpPlBvcnRhYmlsaXR5IGZpeGVzOiBTb2xhcmlzLCBNUEUvaVgsIFdpbmRvd3MsIE9TRi8xLCBweXRob24gYmluZGluZ3MsCiAgICBsaWJ4bWwubTQ8L2xpPgo8L3VsPgoKPGgzPjIuNC4xOTogTWFyIDI1IDIwMDI8L2gzPgo8dWw+CiAgPGxpPmJ1ZyBmaXhlczogaGFsZiBhIGRvemVuIFhQYXRoIGJ1Z3MsIFZhbGlkYXRpb24sIElTTy1MYXRpbiB0byBVVEY4CiAgICBlbmNvZGVyPC9saT4KICA8bGk+cG9ydGFiaWxpdHkgZml4ZXMgaW4gdGhlIEhUVFAgY29kZTwvbGk+CiAgPGxpPm1lbW9yeSBhbGxvY2F0aW9uIGNoZWNrcyB1c2luZyB2YWxncmluZCwgYW5kIHByb2ZpbGluZyB0ZXN0czwvbGk+CiAgPGxpPnJldmFtcCBvZiB0aGUgV2luZG93cyBidWlsZCBhbmQgTWFrZWZpbGVzPC9saT4KPC91bD4KCjxoMz4yLjQuMTg6IE1hciAxOCAyMDAyPC9oMz4KPHVsPgogIDxsaT5idWcgZml4ZXM6IHRyZWUsIFNBWCwgY2Fub25pY2FsaXphdGlvbiwgdmFsaWRhdGlvbiwgcG9ydGFiaWxpdHksCiAgWFBhdGg8L2xpPgogIDxsaT5yZW1vdmVkIHRoZSAtLXdpdGgtYnVmZmVyIG9wdGlvbiBpdCB3YXMgYmVjb21pbmcgdW5tYWludGFpbmFibGU8L2xpPgogIDxsaT5zZXJpb3VzIGNsZWFudXAgb2YgdGhlIFB5dGhvbiBtYWtlZmlsZXM8L2xpPgogIDxsaT5zcGVlZHVwIHBhdGNoIHRvIFhQYXRoIHZlcnkgZWZmZWN0aXZlIGZvciBEb2NCb29rIHN0eWxlc2hlZXRzPC9saT4KICA8bGk+Rml4ZXMgZm9yIFdpbmRvd3MgYnVpbGQsIGNsZWFudXAgb2YgdGhlIGRvY3VtZW50YXRpb248L2xpPgo8L3VsPgoKPGgzPjIuNC4xNzogTWFyIDggMjAwMjwvaDM+Cjx1bD4KICA8bGk+YSBsb3Qgb2YgYnVnIGZpeGVzLCBpbmNsdWRpbmcgIm5hbWVzcGFjZSBub2RlcyBoYXZlIG5vIHBhcmVudHMgaW4KICBYUGF0aCI8L2xpPgogIDxsaT5maXhlZC9pbXByb3ZlZCB0aGUgUHl0aG9uIHdyYXBwZXJzLCBhZGRlZCBtb3JlIGV4YW1wbGVzIGFuZCBtb3JlCiAgICByZWdyZXNzaW9uIHRlc3RzLCBYUGF0aCBleHRlbnNpb24gZnVuY3Rpb25zIGNhbiBub3cgcmV0dXJuIG5vZGUtc2V0czwvbGk+CiAgPGxpPmFkZGVkIHRoZSBYTUwgQ2Fub25pY2FsaXphdGlvbiBzdXBwb3J0IGZyb20gQWxla3NleSBTYW5pbjwvbGk+CjwvdWw+Cgo8aDM+Mi40LjE2OiBGZWIgMjAgMjAwMjwvaDM+Cjx1bD4KICA8bGk+YSBsb3Qgb2YgYnVnIGZpeGVzLCBtb3N0IG9mIHRoZW0gd2VyZSB0cmlnZ2VyZWQgYnkgdGhlIFhNTCBUZXN0c3VpdGUKICAgIGZyb20gT0FTSVMgYW5kIFczQy4gQ29tcGxpYW5jZSBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGltcHJvdmVkLjwvbGk+CiAgPGxpPmEgY291cGxlIG9mIHBvcnRhYmlsaXR5IGZpeGVzIHRvby48L2xpPgo8L3VsPgoKPGgzPjIuNC4xNTogRmViIDExIDIwMDI8L2gzPgo8dWw+CiAgPGxpPkZpeGVkIHRoZSBNYWtlZmlsZXMsIGVzcGVjaWFsbHkgdGhlIHB5dGhvbiBtb2R1bGUgb25lczwvbGk+CiAgPGxpPkEgZmV3IGJ1ZyBmaXhlcyBhbmQgY2xlYW51cDwvbGk+CiAgPGxpPkluY2x1ZGVzIGNsZWFudXA8L2xpPgo8L3VsPgoKPGgzPjIuNC4xNDogRmViIDggMjAwMjwvaDM+Cjx1bD4KICA8bGk+Q2hhbmdlIG9mIExpY2Vuc2UgdG8gdGhlIDxhCiAgICBocmVmPSJodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLmh0bWwiPk1JVAogICAgTGljZW5zZTwvYT4gYmFzaWNhbGx5IGZvciBpbnRlZ3JhdGlvbiBpbiBYRnJlZTg2IGNvZGViYXNlLCBhbmQgcmVtb3ZpbmcKICAgIGNvbmZ1c2lvbiBhcm91bmQgdGhlIHByZXZpb3VzIGR1YWwtbGljZW5zaW5nPC9saT4KICA8bGk+YWRkZWQgUHl0aG9uIGJpbmRpbmdzLCBiZXRhIHNvZnR3YXJlIGJ1dCBzaG91bGQgYWxyZWFkeSBiZSBxdWl0ZQogICAgY29tcGxldGU8L2xpPgogIDxsaT5hIGxhcmdlIG51bWJlciBvZiBmaXhlcyBhbmQgY2xlYW51cHMsIGVzcGVjaWFsbHkgZm9yIGFsbCB0cmVlCiAgICBtYW5pcHVsYXRpb25zPC9saT4KICA8bGk+Y2xlYW51cCBvZiB0aGUgaGVhZGVycywgZ2VuZXJhdGlvbiBvZiBhIHJlZmVyZW5jZSBBUEkgZGVmaW5pdGlvbiBpbgogIFhNTDwvbGk+CjwvdWw+Cgo8aDM+Mi40LjEzOiBKYW4gMTQgMjAwMjwvaDM+Cjx1bD4KICA8bGk+dXBkYXRlIG9mIHRoZSBkb2N1bWVudGF0aW9uOiBKb2huIEZsZWNrIGFuZCBDaGFybGllIEJvemVtYW48L2xpPgogIDxsaT5jbGVhbnVwIG9mIHRpbWluZyBjb2RlIGZyb20gSnVzdGluIEZsZXRjaGVyPC9saT4KICA8bGk+Zml4ZXMgZm9yIFdpbmRvd3MgYW5kIGluaXRpYWwgdGhyZWFkIHN1cHBvcnQgb24gV2luMzI6IElnb3IgYW5kIFNlcmd1ZWkKICAgIE5hcm9qbnlpPC9saT4KICA8bGk+Q3lnd2luIHBhdGNoIGZyb20gUm9iZXJ0IENvbGxpbnM8L2xpPgogIDxsaT5hZGRlZCB4bWxTZXRFbnRpdHlSZWZlcmVuY2VGdW5jKCkgZm9yIEtlaXRoIElzZGFsZSB3b3JrIG9uIHhzbGRiZzwvbGk+CjwvdWw+Cgo8aDM+Mi40LjEyOiBEZWMgNyAyMDAxPC9oMz4KPHVsPgogIDxsaT5hIGZldyBidWcgZml4ZXM6IHRocmVhZCAoR2FyeSBQZW5uaW5ndG9uKSwgeG1sbGludCAoR2VlcnQgS2xvb3N0ZXJtYW4pLAogICAgWE1MIHBhcnNlciAoUm9iaW4gQmVyam9uKSwgWFBvaW50ZXIgKERhbm55IEphbXNoeSksIEkvTyBjbGVhbnVwcwogIChyb2JlcnQpPC9saT4KICA8bGk+RXJpYyBMYXZpZ25lIGNvbnRyaWJ1dGVkIHByb2plY3QgZmlsZXMgZm9yIE1hY09TPC9saT4KICA8bGk+c29tZSBtYWtlZmlsZXMgY2xlYW51cHM8L2xpPgo8L3VsPgoKPGgzPjIuNC4xMTogTm92IDI2IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIGEgY291cGxlIG9mIGVycm9ycyBpbiB0aGUgaW5jbHVkZXMsIGZpeGVkIGEgZmV3IGJ1Z3MsIHNvbWUgY29kZQogICAgY2xlYW51cHM8L2xpPgogIDxsaT54bWxsaW50IG1hbiBwYWdlcyBpbXByb3ZlbWVudCBieSBIZWlrbyBSdXBwPC9saT4KICA8bGk+dXBkYXRlZCBWTVMgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZyb20gSm9obiBBIEZvdGhlcmluZ2hhbTwvbGk+CiAgPGxpPldpbmRvd3MgTWFrZWZpbGVzIHVwZGF0ZXMgZnJvbSBJZ29yPC9saT4KPC91bD4KCjxoMz4yLjQuMTA6IE5vdiAxMCAyMDAxPC9oMz4KPHVsPgogIDxsaT5VUkkgZXNjYXBpbmcgZml4IChKb2VsIFlvdW5nKTwvbGk+CiAgPGxpPmFkZGVkIHhtbEdldE5vZGVQYXRoKCkgKGZvciBwYXRocyBvciBYUG9pbnRlcnMgZ2VuZXJhdGlvbik8L2xpPgogIDxsaT5GaXhlcyBuYW1lc3BhY2UgaGFuZGxpbmcgcHJvYmxlbXMgd2hlbiB1c2luZyBEVEQgYW5kIHZhbGlkYXRpb248L2xpPgogIDxsaT5pbXByb3ZlbWVudHMgb24geG1sbGludDogTW9ydXMgV2FsdGVyIHBhdGNoZXMgZm9yIC0tZm9ybWF0IGFuZAogICAgLS1lbmNvZGUsIFN0ZWZhbiBLb3N0IGFuZCBIZWlrbyBSdXBwIGltcHJvdmVtZW50cyBvbiB0aGUgLS1zaGVsbDwvbGk+CiAgPGxpPmZpeGVzIGZvciB4bWxjYXRhbG9nIGxpbmtpbmcgcG9pbnRlZCBieSBXZWlxaSBHYW88L2xpPgogIDxsaT5maXhlcyB0byB0aGUgSFRNTCBwYXJzZXI8L2xpPgo8L3VsPgoKPGgzPjIuNC45OiBOb3YgNiAyMDAxPC9oMz4KPHVsPgogIDxsaT5maXhlcyBtb3JlIGNhdGFsb2cgYnVnczwvbGk+CiAgPGxpPmF2b2lkIGEgY29tcGlsYXRpb24gcHJvYmxlbSwgaW1wcm92ZSB4bWxHZXRMaW5lTm8oKTwvbGk+CjwvdWw+Cgo8aDM+Mi40Ljg6IE5vdiA0IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIFNHTUwgY2F0YWxvZ3MgYnJva2VuIGluIHByZXZpb3VzIHJlbGVhc2UsIHVwZGF0ZWQgeG1sY2F0YWxvZwogIHRvb2w8L2xpPgogIDxsaT5maXhlZCBhIGNvbXBpbGUgZXJyb3JzIGFuZCBzb21lIGluY2x1ZGVzIHRyb3VibGVzLjwvbGk+CjwvdWw+Cgo8aDM+Mi40Ljc6IE9jdCAzMCAyMDAxPC9oMz4KPHVsPgogIDxsaT5leHBvcnRlZCBzb21lIGRlYnVnZ2luZyBpbnRlcmZhY2VzPC9saT4KICA8bGk+c2VyaW91cyByZXdyaXRlIG9mIHRoZSBjYXRhbG9nIGNvZGU8L2xpPgogIDxsaT5pbnRlZ3JhdGVkIEdhcnkgUGVubmluZ3RvbiB0aHJlYWQgc2FmZXR5IHBhdGNoLCBhZGRlZCBjb25maWd1cmUgb3B0aW9uCiAgICBhbmQgcmVncmVzc2lvbiB0ZXN0czwvbGk+CiAgPGxpPnJlbW92ZWQgYW4gSFRNTCBwYXJzZXIgYnVnPC9saT4KICA8bGk+Zml4ZWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsbHkgc2VyaW91cyB2YWxpZGF0aW9uIGJ1Z3M8L2xpPgogIDxsaT5pbnRlZ3JhdGVkIHRoZSBTR01MIERvY0Jvb2sgc3VwcG9ydCBpbiB4bWxsaW50PC9saT4KICA8bGk+Y2hhbmdlZCB0aGUgbmFub2Z0cCBhbm9ueW1vdXMgbG9naW4gcGFzc3dkPC9saT4KICA8bGk+c29tZSBJL08gY2xlYW51cCBhbmQgYSBjb3VwbGUgb2YgaW50ZXJmYWNlcyBmb3IgUGVybCB3cmFwcGVyPC9saT4KICA8bGk+Z2VuZXJhbCBidWcgZml4ZXM8L2xpPgogIDxsaT51cGRhdGVkIHhtbGxpbnQgbWFuIHBhZ2UgYnkgSm9obiBGbGVjazwvbGk+CiAgPGxpPnNvbWUgVk1TIGFuZCBXaW5kb3dzIHVwZGF0ZXM8L2xpPgo8L3VsPgoKPGgzPjIuNC42OiBPY3QgMTAgMjAwMTwvaDM+Cjx1bD4KICA8bGk+YWRkZWQgYW4gdXBkYXRlZCBtYW4gcGFnZXMgYnkgSm9obiBGbGVjazwvbGk+CiAgPGxpPnBvcnRhYmlsaXR5IGFuZCBjb25maWd1cmUgZml4ZXM8L2xpPgogIDxsaT5hbiBpbmZpbml0ZSBsb29wIG9uIHRoZSBIVE1MIHBhcnNlciB3YXMgcmVtb3ZlZCAoV2lsbGlhbSk8L2xpPgogIDxsaT5XaW5kb3dzIG1ha2VmaWxlIHBhdGNoZXMgZnJvbSBJZ29yPC9saT4KICA8bGk+Zml4ZWQgaGFsZiBhIGRvemVuIGJ1Z3MgcmVwb3J0ZWQgZm9yIGxpYnhtbCBvciBsaWJ4c2x0PC9saT4KICA8bGk+dXBkYXRlZCB4bWxjYXRhbG9nIHRvIGJlIGFibGUgdG8gbW9kaWZ5IFNHTUwgc3VwZXIgY2F0YWxvZ3M8L2xpPgo8L3VsPgoKPGgzPjIuNC41OiBTZXAgMTQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+UmVtb3ZlIGEgZmV3IGFubm95aW5nIGJ1Z3MgaW4gMi40LjQ8L2xpPgogIDxsaT5mb3JjZXMgdGhlIEhUTUwgc2VyaWFsaXplciB0byBvdXRwdXQgZGVjaW1hbCBjaGFycmVmcyBzaW5jZSBzb21lCiAgICB2ZXJzaW9uIG9mIE5ldHNjYXBlIGNhbid0IGhhbmRsZSBoZXhhZGVjaW1hbCBvbmVzPC9saT4KPC91bD4KCjxoMz4xLjguMTY6IFNlcCAxNCAyMDAxPC9oMz4KPHVsPgogIDxsaT5tYWludGVuYW5jZSByZWxlYXNlIG9mIHRoZSBvbGQgbGlieG1sMSBicmFuY2gsIGNvdXBsZSBvZiBidWcgYW5kCiAgICBwb3J0YWJpbGl0eSBmaXhlczwvbGk+CjwvdWw+Cgo8aDM+Mi40LjQ6IFNlcCAxMiAyMDAxPC9oMz4KPHVsPgogIDxsaT5hZGRlZCAtLWNvbnZlcnQgdG8geG1sY2F0YWxvZywgYnVnIGZpeGVzIGFuZCBjbGVhbnVwcyBvZiBYTUwKICBDYXRhbG9nPC9saT4KICA8bGk+YSBmZXcgYnVnIGZpeGVzIGFuZCBzb21lIHBvcnRhYmlsaXR5IGNoYW5nZXM8L2xpPgogIDxsaT5zb21lIGRvY3VtZW50YXRpb24gY2xlYW51cHM8L2xpPgo8L3VsPgoKPGgzPjIuNC4zOiAgQXVnIDIzIDIwMDE8L2gzPgo8dWw+CiAgPGxpPlhNTCBDYXRhbG9nIHN1cHBvcnQgc2VlIHRoZSBkb2M8L2xpPgogIDxsaT5OZXcgTmFOL0luZmluaXR5IGZsb2F0aW5nIHBvaW50IGNvZGU8L2xpPgogIDxsaT5BIGZldyBidWcgZml4ZXM8L2xpPgo8L3VsPgoKPGgzPjIuNC4yOiAgQXVnIDE1IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmFkZHMgeG1sTGluZU51bWJlcnNEZWZhdWx0KCkgdG8gY29udHJvbCBsaW5lIG51bWJlciBnZW5lcmF0aW9uPC9saT4KICA8bGk+bG90IG9mIGJ1ZyBmaXhlczwvbGk+CiAgPGxpPnRoZSBNaWNyb3NvZnQgTVNDIHByb2plY3RzIGZpbGVzIHNob3VsZCBub3cgYmUgdXAgdG8gZGF0ZTwvbGk+CiAgPGxpPmluaGVyaXRhbmNlIG9mIG5hbWVzcGFjZXMgZnJvbSBEVEQgZGVmYXVsdGVkIGF0dHJpYnV0ZXM8L2xpPgogIDxsaT5maXhlcyBhIHNlcmlvdXMgcG90ZW50aWFsIHNlY3VyaXR5IGJ1ZzwvbGk+CiAgPGxpPmFkZGVkIGEgLS1mb3JtYXQgb3B0aW9uIHRvIHhtbGxpbnQ8L2xpPgo8L3VsPgoKPGgzPjIuNC4xOiAgSnVseSAyNCAyMDAxPC9oMz4KPHVsPgogIDxsaT5wb3NzaWJpbGl0eSB0byBrZWVwIGxpbmUgbnVtYmVycyBpbiB0aGUgdHJlZTwvbGk+CiAgPGxpPnNvbWUgY29tcHV0YXRpb24gTmFOIGZpeGVzPC9saT4KICA8bGk+ZXh0ZW5zaW9uIG9mIHRoZSBYUGF0aCBBUEk8L2xpPgogIDxsaT5jbGVhbnVwIGZvciBhbHBoYSBhbmQgaWE2NCB0YXJnZXRzPC9saT4KICA8bGk+cGF0Y2ggdG8gYWxsb3cgc2F2aW5nIHRocm91Z2ggSFRUUCBQVVQgb3IgUE9TVDwvbGk+CjwvdWw+Cgo8aDM+Mi40LjA6IEp1bHkgMTAgMjAwMTwvaDM+Cjx1bD4KICA8bGk+Rml4ZWQgYSBmZXcgYnVncyBpbiBYUGF0aCwgdmFsaWRhdGlvbiwgYW5kIHRyZWUgaGFuZGxpbmcuPC9saT4KICA8bGk+Rml4ZWQgWE1MIEJhc2UgaW1wbGVtZW50YXRpb24sIGFkZGVkIGEgY291cGxlIG9mIGV4YW1wbGVzIHRvIHRoZQogICAgcmVncmVzc2lvbiB0ZXN0czwvbGk+CiAgPGxpPkEgYml0IG9mIGNsZWFudXA8L2xpPgo8L3VsPgoKPGgzPjIuMy4xNDogSnVseSA1IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIHNvbWUgZW50aXRpZXMgcHJvYmxlbXMgYW5kIHJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnQgd2hlbgogICAgc3Vic3RpdHV0aW5nIHRoZW08L2xpPgogIDxsaT5sb3RzIG9mIGltcHJvdmVtZW50cyBpbiB0aGUgWFBhdGggcXVlcmllcyBpbnRlcnByZXRlciBjYW4gYmUKICAgIHN1YnN0YW50aWFsbHkgZmFzdGVyPC9saT4KICA8bGk+TWFrZWZpbGVzIGFuZCBjb25maWd1cmUgY2xlYW51cHM8L2xpPgogIDxsaT5GaXhlcyB0byBYUGF0aCB2YXJpYWJsZSBldmFsLCBhbmQgY29tcGFyZSBvbiBlbXB0eSBub2RlIHNldDwvbGk+CiAgPGxpPkhUTUwgdGFnIGNsb3NpbmcgYnVnIGZpeGVkPC9saT4KICA8bGk+Rml4ZWQgYW4gVVJJIHJlZmVyZW5jZSBjb21wdXRhdGlvbiBwcm9ibGVtIHdoZW4gdmFsaWRhdGluZzwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjEzOiBKdW5lIDI4IDIwMDE8L2gzPgo8dWw+CiAgPGxpPjIuMy4xMiBjb25maWd1cmUuaW4gd2FzIGJyb2tlbiBhcyB3ZWxsIGFzIHRoZSBwdXNoIG1vZGUgWE1MIHBhcnNlcjwvbGk+CiAgPGxpPmEgZmV3IG1vcmUgZml4ZXMgZm9yIGNvbXBpbGF0aW9uIG9uIFdpbmRvd3MgTVNDIGJ5IFlvbiBEZXJlazwvbGk+CjwvdWw+Cgo8aDM+MS44LjE0OiBKdW5lIDI4IDIwMDE8L2gzPgo8dWw+CiAgPGxpPlpiaWduaWV3IENoeWxhIGdhdmUgYSBwYXRjaCB0byB1c2UgdGhlIG9sZCBYTUwgcGFyc2VyIGluIHB1c2ggbW9kZTwvbGk+CiAgPGxpPlNtYWxsIE1ha2VmaWxlIGZpeDwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjEyOiBKdW5lIDI2IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmxvdHMgb2YgY2xlYW51cDwvbGk+CiAgPGxpPmEgY291cGxlIG9mIHZhbGlkYXRpb24gZml4PC9saT4KICA8bGk+Zml4ZWQgbGluZSBudW1iZXIgY291bnRpbmc8L2xpPgogIDxsaT5maXhlZCBzZXJpb3VzIHByb2JsZW1zIGluIHRoZSBYSW5jbHVkZSBwcm9jZXNzaW5nPC9saT4KICA8bGk+YWRkZWQgc3VwcG9ydCBmb3IgVVRGOCBCT00gYXQgYmVnaW5uaW5nIG9mIGVudGl0aWVzPC9saT4KICA8bGk+Zml4ZWQgYSBzdHJhbmdlIGdjYyBvcHRpbWl6ZXIgYnVncyBpbiB4cGF0aCBoYW5kbGluZyBvZiBmbG9hdCwgZ2NjLTMuMAogICAgbWlzY29tcGlsZSB1cmkuYyAoV2lsbGlhbSksIFRob21hcyBMZWl0bmVyIHByb3ZpZGVkIGEgZml4IGZvciB0aGUKICAgIG9wdGltaXplciBvbiBUcnU2NDwvbGk+CiAgPGxpPmluY29ycG9yYXRlZCBZb24gRGVyZWsgYW5kIElnb3IgWmxhdGtvdmljICBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGZvcgogICAgY29tcGlsYXRpb24gb24gV2luZG93cyBNU0M8L2xpPgogIDxsaT51cGRhdGUgb2YgbGlieG1sLWRvYy5lbCAoRmVsaXggTmF0dGVyKTwvbGk+CiAgPGxpPmZpeGVkIDIgYnVncyBpbiBVUkkgbm9ybWFsaXphdGlvbiBjb2RlPC9saT4KPC91bD4KCjxoMz4yLjMuMTE6IEp1bmUgMTcgMjAwMTwvaDM+Cjx1bD4KICA8bGk+dXBkYXRlcyB0byB0cmlvLCBNYWtlZmlsZXMgYW5kIGNvbmZpZ3VyZSBzaG91bGQgZml4IHNvbWUgcG9ydGFiaWxpdHkKICAgIHByb2JsZW1zIChhbHBoYSk8L2xpPgogIDxsaT5maXhlZCBzb21lIEhUTUwgc2VyaWFsaXphdGlvbiBwcm9ibGVtcyAocHJlLCBzY3JpcHQsIGFuZCBibG9jay9pbmxpbmUKICAgIGhhbmRsaW5nKSwgYWRkZWQgZW5jb2RpbmcgYXdhcmUgQVBJcywgY2xlYW51cCBvZiB0aGlzIGNvZGU8L2xpPgogIDxsaT5hZGRlZCB4bWxIYXNOc1Byb3AoKTwvbGk+CiAgPGxpPmltcGxlbWVudGVkIGEgc3BlY2lmaWMgUEkgZm9yIGVuY29kaW5nIHN1cHBvcnQgaW4gdGhlIERvY0Jvb2sgU0dNTAogICAgcGFyc2VyPC9saT4KICA8bGk+c29tZSBYUGF0aCBmaXhlcyAoLUluZmluaXR5LCAvIGFzIGEgZnVuY3Rpb24gcGFyYW1ldGVyIGFuZCBuYW1lc3BhY2VzCiAgICBub2RlIHNlbGVjdGlvbik8L2xpPgogIDxsaT5maXhlZCBhIHBlcmZvcm1hbmNlIHByb2JsZW0gYW5kIGFuIGVycm9yIGluIHRoZSB2YWxpZGF0aW9uIGNvZGU8L2xpPgogIDxsaT5maXhlZCBYSW5jbHVkZSByb3V0aW5lIHRvIGltcGxlbWVudCB0aGUgcmVjdXJzaXZlIGJlaGF2aW91cjwvbGk+CiAgPGxpPmZpeGVkIHhtbEZyZWVOb2RlIHByb2JsZW0gd2hlbiBsaWJ4bWwgaXMgaW5jbHVkZWQgc3RhdGljYWxseSB0d2ljZTwvbGk+CiAgPGxpPmFkZGVkIC0tdmVyc2lvbiB0byB4bWxsaW50IGZvciBidWcgcmVwb3J0czwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjEwOiBKdW5lIDEgMjAwMTwvaDM+Cjx1bD4KICA8bGk+Zml4ZWQgdGhlIFNHTUwgY2F0YWxvZyBzdXBwb3J0PC9saT4KICA8bGk+YSBudW1iZXIgb2YgcmVwb3J0ZWQgYnVncyBnb3QgZml4ZWQsIGluIFhQYXRoLCBpY29udiBkZXRlY3Rpb24sCiAgICBYSW5jbHVkZSBwcm9jZXNzaW5nPC9saT4KICA8bGk+WFBhdGggc3RyaW5nIGZ1bmN0aW9uIHNob3VsZCBub3cgaGFuZGxlIHVuaWNvZGUgY29ycmVjdGx5PC9saT4KPC91bD4KCjxoMz4yLjMuOTogTWF5IDE5IDIwMDE8L2gzPgoKPHA+TG90cyBvZiBidWdmaXhlcywgYW5kIGFkZGVkIGEgYmFzaWMgU0dNTCBjYXRhbG9nIHN1cHBvcnQ6PC9wPgo8dWw+CiAgPGxpPkhUTUwgcHVzaCBidWdmaXggIzU0ODkxIGFuZCBhbm90aGVyIHBhdGNoIGZyb20gSm9uYXMgQm9yZ3N0cvZtPC9saT4KICA8bGk+c29tZSBzZXJpb3VzIHNwZWVkIG9wdGltaXphdGlvbiBhZ2FpbjwvbGk+CiAgPGxpPnNvbWUgZG9jdW1lbnRhdGlvbiBjbGVhbnVwczwvbGk+CiAgPGxpPnRyeWluZyB0byBnZXQgYmV0dGVyIGxpbmtpbmcgb24gU29sYXJpcyAoLVIpPC9saT4KICA8bGk+WFBhdGggQVBJIGNsZWFudXAgZnJvbSBUaG9tYXMgQnJveWVyPC9saT4KICA8bGk+VmFsaWRhdGlvbiBidWcgZml4ZWQgIzU0NjMxLCBhZGRlZCBhIHBhdGNoIGZyb20gR2FyeSBQZW5uaW5ndG9uLCBmaXhlZAogICAgeG1sVmFsaWRHZXRWYWxpZEVsZW1lbnRzKCk8L2xpPgogIDxsaT5BZGRlZCBhbiBJTlNUQUxMIGZpbGU8L2xpPgogIDxsaT5BdHRyaWJ1dGUgcmVtb3ZhbCBhZGRlZCB0byBBUEk6ICM1NDQzMzwvbGk+CiAgPGxpPmFkZGVkIGEgYmFzaWMgc3VwcG9ydCBmb3IgU0dNTCBjYXRhbG9nczwvbGk+CiAgPGxpPmZpeGVkIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIEFQSTwvbGk+CiAgPGxpPmJ1Z2ZpeCBpbiB4bWxOb2RlR2V0TGFuZygpPC9saT4KICA8bGk+Zml4ZWQgYSBzbWFsbCBjb25maWd1cmUgcG9ydGFiaWxpdHkgcHJvYmxlbTwvbGk+CiAgPGxpPmZpeGVkIGFuIGludmVyc2lvbiBvZiBTWVNURU0gYW5kIFBVQkxJQyBpZGVudGlmaWVyIGluIEhUTUwgZG9jdW1lbnQ8L2xpPgo8L3VsPgoKPGgzPjEuOC4xMzogTWF5IDE0IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmJ1Z2ZpeGVzIHJlbGVhc2Ugb2YgdGhlIG9sZCBsaWJ4bWwxIGJyYW5jaCB1c2VkIGJ5IEdub21lPC9saT4KPC91bD4KCjxoMz4yLjMuODogTWF5IDMgMjAwMTwvaDM+Cjx1bD4KICA8bGk+SW50ZWdyYXRlZCBhbiBTR01MIERvY0Jvb2sgcGFyc2VyIGZvciB0aGUgR25vbWUgcHJvamVjdDwvbGk+CiAgPGxpPkZpeGVkIGEgZmV3IHRoaW5ncyBpbiB0aGUgSFRNTCBwYXJzZXI8L2xpPgogIDxsaT5GaXhlZCBzb21lIFhQYXRoIGJ1Z3MgcmFpc2VkIGJ5IFhTTFQgdXNlLCB0cmllZCB0byBmaXggdGhlIGZsb2F0aW5nCiAgICBwb2ludCBwb3J0YWJpbGl0eSBpc3N1ZTwvbGk+CiAgPGxpPlNwZWVkIGltcHJvdmVtZW50ICg4TS9zIGZvciBTQVgsIDNNL3MgZm9yIERPTSwgMS41TS9zIGZvcgogICAgRE9NK3ZhbGlkYXRpb24gdXNpbmcgdGhlIFhNTCBSRUMgYXMgaW5wdXQgYW5kIGEgNzAwTUh6IGNlbGVyb24pLjwvbGk+CiAgPGxpPmluY29ycG9yYXRlZCBtb3JlIFdpbmRvd3MgY2xlYW51cDwvbGk+CiAgPGxpPmFkZGVkIHhtbFNhdmVGb3JtYXRGaWxlKCk8L2xpPgogIDxsaT5maXhlZCBwcm9ibGVtcyBpbiBjb3B5aW5nIG5vZGVzIHdpdGggZW50aXRpZXMgcmVmZXJlbmNlcyAoZ2RvbWUpPC9saT4KICA8bGk+cmVtb3ZlZCBzb21lIHRyb3VibGVzIHN1cnJvdW5kaW5nIHRoZSBuZXcgdmFsaWRhdGlvbiBtb2R1bGU8L2xpPgo8L3VsPgoKPGgzPjIuMy43OiBBcHJpbCAyMiAyMDAxPC9oMz4KPHVsPgogIDxsaT5sb3RzIG9mIHNtYWxsIGJ1ZyBmaXhlcywgY29ycmVjdGVkIFhQb2ludGVyPC9saT4KICA8bGk+Tm9uIGRldGVybWluaXN0aWMgY29udGVudCBtb2RlbCB2YWxpZGF0aW9uIHN1cHBvcnQ8L2xpPgogIDxsaT5hZGRlZCB4bWxEb2NDb3B5Tm9kZSBmb3IgZ2RvbWUyPC9saT4KICA8bGk+cmV2YW1wZWQgdGhlIHdheSB0aGUgSFRNTCBwYXJzZXIgaGFuZGxlcyBlbmQgb2YgdGFnczwvbGk+CiAgPGxpPlhQYXRoOiBjb3JyZWN0aW9ucyBvZiBuYW1lc3BhY2VzIHN1cHBvcnQgYW5kIG51bWJlciBmb3JtYXR0aW5nPC9saT4KICA8bGk+V2luZG93czogSWdvciBabGF0a292aWMgcGF0Y2hlcyBmb3IgTVNDIGNvbXBpbGF0aW9uPC9saT4KICA8bGk+SFRNTCBvdXRwdXQgZml4ZXMgZnJvbSBQIEMgQ2hvdyBhbmQgV2lsbGlhbSBNLiBCcmFjazwvbGk+CiAgPGxpPkltcHJvdmVkIHZhbGlkYXRpb24gc3BlZWQgc2Vuc2libGUgZm9yIERvY0Jvb2s8L2xpPgogIDxsaT5maXhlZCBhIGJpZyBidWcgd2l0aCBJRCBkZWNsYXJlZCBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXM8L2xpPgogIDxsaT5wb3J0YWJpbGl0eSBmaXhlcywgdXBkYXRlIG9mIFRyaW8gZnJvbSBCam9ybiBSZWVzZTwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjY6IEFwcmlsIDggMjAwMTwvaDM+Cjx1bD4KICA8bGk+Q29kZSBjbGVhbnVwIHVzaW5nIGV4dHJlbWUgZ2NjIGNvbXBpbGVyIHdhcm5pbmcgb3B0aW9ucywgZm91bmQgYW5kCiAgICBjbGVhcmVkIGhhbGYgYSBkb3plbiBwb3RlbnRpYWwgcHJvYmxlbTwvbGk+CiAgPGxpPnRoZSBFYXplbCB0ZWFtIGZvdW5kIGFuIFhNTCBwYXJzZXIgYnVnPC9saT4KICA8bGk+Y2xlYW5lZCB1cCB0aGUgdXNlciBvZiBzb21lIG9mIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBmdW5jdGlvbi4gdXNlZCB0aGUKICAgIHRyaW8gbGlicmFyeSBjb2RlIHRvIHByb3ZpZGUgdGhlIG9uZSBuZWVkZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgbWlzc2luZwogICAgdGhlbTwvbGk+CiAgPGxpPnhwYXRoOiByZW1vdmVkIGEgbWVtb3J5IGxlYWsgYW5kIGZpeGVkIHRoZSBwcmVkaWNhdGUgZXZhbHVhdGlvbgogICAgcHJvYmxlbSwgZXh0ZW5kZWQgdGhlIHRlc3RzdWl0ZSBhbmQgY2xlYW5lZCB1cCB0aGUgcmVzdWx0LiBYUG9pbnRlciBzZWVtcwogICAgYnJva2VuIC4uLjwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjU6IE1hciAyMyAyMDAxPC9oMz4KPHVsPgogIDxsaT5CaWdnZXN0IGNoYW5nZSBpcyBzZXBhcmF0ZSBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIG9mIFhQYXRoIGV4cHJlc3Npb25zLAogICAgdGhlcmUgaXMgc29tZSBuZXcgQVBJcyBmb3IgdGhpcyB0b288L2xpPgogIDxsaT5pbmNsdWRlZCBhIG51bWJlciBvZiBidWcgZml4ZXMoWE1MIHB1c2ggcGFyc2VyLCA1MTg3Niwgbm90YXRpb25zLAogIDUyMjk5KTwvbGk+CiAgPGxpPkZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzPC9saT4KPC91bD4KCjxoMz4yLjMuNDogTWFyIDEwIDIwMDE8L2gzPgo8dWw+CiAgPGxpPkZpeGVkIGJ1Z3MgIzUxODYwIGFuZCAjNTE4NjE8L2xpPgogIDxsaT5BZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSB4bWxEZWZhdWx0QnVmZmVyU2l6ZSB0byBhbGxvdyBkZWZhdWx0IGJ1ZmZlcgogICAgc2l6ZSB0byBiZSBhcHBsaWNhdGlvbiB0dW5hYmxlLjwvbGk+CiAgPGxpPlNvbWUgY2xlYW51cCBpbiB0aGUgdmFsaWRhdGlvbiBjb2RlLCBzdGlsbCBhIGJ1ZyBsZWZ0IGFuZCB0aGlzIHBhcnQKICAgIHNob3VsZCBwcm9iYWJseSBiZSByZXdyaXR0ZW4gdG8gc3VwcG9ydCBhbWJpZ3VvdXMgY29udGVudCBtb2RlbCA6LVw8L2xpPgogIDxsaT5GaXggYSBjb3VwbGUgb2Ygc2VyaW91cyBidWdzIGludHJvZHVjZWQgb3IgcmFpc2VkIGJ5IGNoYW5nZXMgaW4gMi4zLjMKICAgIHBhcnNlcjwvbGk+CiAgPGxpPkZpeGVkIGFub3RoZXIgYnVnIGluIHhtbE5vZGVHZXRDb250ZW50KCk8L2xpPgogIDxsaT5Cam9ybiBmaXhlZCBYUGF0aCBub2RlIGNvbGxlY3Rpb24gYW5kIE51bWJlciBmb3JtYXR0aW5nPC9saT4KICA8bGk+Rml4ZWQgYSBsb29wIHJlcG9ydGVkIGluIHRoZSBIVE1MIHBhcnNpbmc8L2xpPgogIDxsaT5ibGFuayBzcGFjZSBhcmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgRHRkIGNvbnRlbnQgbW9kZWwgcHJvdmVzIHRoYXQgdGhleQogICAgYXJlIGZvcm1hdHRpbmcgc3BhY2VzLCB0aGlzIGlzIGZvciBYTUwgY29uZm9ybWFuY2U8L2xpPgo8L3VsPgoKPGgzPjIuMy4zOiBNYXIgMSAyMDAxPC9oMz4KPHVsPgogIDxsaT5zbWFsbCBjaGFuZ2UgaW4gWFBhdGggZm9yIFhTTFQ8L2xpPgogIDxsaT5kb2N1bWVudGF0aW9uIGNsZWFudXBzPC9saT4KICA8bGk+Zml4IGluIHZhbGlkYXRpb24gYnkgR2FyeSBQZW5uaW5ndG9uPC9saT4KICA8bGk+c2VyaW91cyBwYXJzaW5nIHBlcmZvcm1hbmNlcyBpbXByb3ZlbWVudHM8L2xpPgo8L3VsPgoKPGgzPjIuMy4yOiBGZWIgMjQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+Y2hhc2luZyBYUGF0aCBidWdzLCBmb3VuZCBhIGJ1bmNoLCBjb21wbGV0ZWQgc29tZSBUT0RPPC9saT4KICA8bGk+Zml4ZWQgYSBEdGQgcGFyc2luZyBidWc8L2xpPgogIDxsaT5maXhlZCBhIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudDwvbGk+CiAgPGxpPklEL0lEUkVGIHN1cHBvcnQgcGFydGx5IHJld3JpdHRlbiBieSBHYXJ5IFBlbm5pbmd0b248L2xpPgo8L3VsPgoKPGgzPjIuMy4xOiBGZWIgMTUgMjAwMTwvaDM+Cjx1bD4KICA8bGk+c29tZSBYUGF0aCBhbmQgSFRNTCBidWcgZml4ZXMgZm9yIFhTTFQ8L2xpPgogIDxsaT5zbWFsbCBleHRlbnNpb24gb2YgdGhlIGhhc2ggdGFibGUgaW50ZXJmYWNlcyBmb3IgRE9NIGdkb21lMgogICAgaW1wbGVtZW50YXRpb248L2xpPgogIDxsaT5BIGZldyBidWcgZml4ZXM8L2xpPgo8L3VsPgoKPGgzPjIuMy4wOiBGZWIgOCAyMDAxICgyLjIuMTIgd2FzIG9uIDI1IEphbiBidXQgSSBkaWRuJ3Qga2VwdCB0cmFjayk8L2gzPgo8dWw+CiAgPGxpPkxvdHMgb2YgWFBhdGggYnVnIGZpeGVzPC9saT4KICA8bGk+QWRkIGEgbW9kZSB3aXRoIER0ZCBsb29rdXAgYnV0IHdpdGhvdXQgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRpbmcgZm9yCiAgICBYU0xUPC9saT4KICA8bGk+QWRkIHN1cHBvcnQgZm9yIHRleHQgbm9kZSB3aXRob3V0IGVzY2FwaW5nIChYU0xUKTwvbGk+CiAgPGxpPmJ1ZyBmaXhlcyBmb3IgeG1sQ2hlY2tGaWxlbmFtZTwvbGk+CiAgPGxpPnZhbGlkYXRpb24gY29kZSBidWcgZml4ZXMgZnJvbSBHYXJ5IFBlbm5pbmd0b248L2xpPgogIDxsaT5QYXRjaCBmcm9tIFBhdWwgRC4gU21pdGggY29ycmVjdGluZyBVUkkgcGF0aCBub3JtYWxpemF0aW9uPC9saT4KICA8bGk+UGF0Y2ggdG8gYWxsb3cgc2ltdWx0YW5lb3VzIGluc3RhbGwgb2YgbGlieG1sLWRldmVsIGFuZAogIGxpYnhtbDItZGV2ZWw8L2xpPgogIDxsaT50aGUgZXhhbXBsZSBNYWtlZmlsZSBpcyBub3cgZml4ZWQ8L2xpPgogIDxsaT5hZGRlZCBIVE1MIHRvIHRoZSBSUE0gcGFja2FnZXM8L2xpPgogIDxsaT50cmVlIGNvcHlpbmcgYnVnZml4ZXM8L2xpPgogIDxsaT51cGRhdGVzIHRvIFdpbmRvd3MgbWFrZWZpbGVzPC9saT4KICA8bGk+b3B0aW1pemF0aW9uIHBhdGNoIGZyb20gQmpvcm4gUmVlc2U8L2xpPgo8L3VsPgoKPGgzPjIuMi4xMTogSmFuIDQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+YnVuY2ggb2YgYnVnIGZpeGVzIChtZW1vcnkgSS9PLCB4cGF0aCwgZnRwL2h0dHAsIC4uLik8L2xpPgogIDxsaT5hZGRlZCBodG1sSGFuZGxlT21pdHRlZEVsZW0oKTwvbGk+CiAgPGxpPkFwcGxpZWQgQmpvcm4gUmVlc2UncyBJUFY2IGZpcnN0IHBhdGNoPC9saT4KICA8bGk+QXBwbGllZCBQYXVsIEQuIFNtaXRoIHBhdGNoZXMgZm9yIHZhbGlkYXRpb24gb2YgWEluY2x1ZGUgcmVzdWx0czwvbGk+CiAgPGxpPmFkZGVkIFhQb2ludGVyIHhtbG5zKCkgbmV3IHNjaGVtZSBzdXBwb3J0PC9saT4KPC91bD4KCjxoMz4yLjIuMTA6IE5vdiAyNSAyMDAwPC9oMz4KPHVsPgogIDxsaT5GaXggdGhlIFdpbmRvd3MgcHJvYmxlbXMgb2YgMi4yLjg8L2xpPgogIDxsaT5pbnRlZ3JhdGUgT3BlblZNUyBwYXRjaGVzPC9saT4KICA8bGk+YmV0dGVyIGhhbmRsaW5nIG9mIHNvbWUgbmFzdHkgSFRNTCBpbnB1dDwvbGk+CiAgPGxpPkltcHJvdmVkIHRoZSBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbjwvbGk+CiAgPGxpPmludGVncmF0ZSBhIG51bWJlciBvZiBwcm92aWRlZCBwYXRjaGVzPC9saT4KPC91bD4KCjxoMz4yLjIuOTogTm92IDI1IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmVycm9uZW91cyByZWxlYXNlIDotKDwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjg6IE5vdiAxMyAyMDAwPC9oMz4KPHVsPgogIDxsaT5GaXJzdCB2ZXJzaW9uIG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlIj5YSW5jbHVkZTwvYT4KICAgIHN1cHBvcnQ8L2xpPgogIDxsaT5QYXRjaCBpbiBjb25kaXRpb25hbCBzZWN0aW9uIGhhbmRsaW5nPC9saT4KICA8bGk+dXBkYXRlZCBNUyBjb21waWxlciBwcm9qZWN0PC9saT4KICA8bGk+Zml4ZWQgc29tZSBYUGF0aCBwcm9ibGVtczwvbGk+CiAgPGxpPmFkZGVkIGFuIFVSSSBlc2NhcGluZyBmdW5jdGlvbjwvbGk+CiAgPGxpPnNvbWUgb3RoZXIgYnVnIGZpeGVzPC9saT4KPC91bD4KCjxoMz4yLjIuNzogT2N0IDMxIDIwMDA8L2gzPgo8dWw+CiAgPGxpPmFkZGVkIG1lc3NhZ2UgcmVkaXJlY3Rpb248L2xpPgogIDxsaT5YUGF0aCBpbXByb3ZlbWVudHMgKHRoYW5rcyBUT00gISk8L2xpPgogIDxsaT54bWxJT1BhcnNlRFREKCkgYWRkZWQ8L2xpPgogIDxsaT52YXJpb3VzIHNtYWxsIGZpeGVzIGluIHRoZSBIVE1MLCBVUkksIEhUVFAgYW5kIFhQb2ludGVyIHN1cHBvcnQ8L2xpPgogIDxsaT5zb21lIGNsZWFudXAgb2YgdGhlIE1ha2VmaWxlLCBhdXRvY29uZiBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBjb250ZW50PC9saT4KPC91bD4KCjxoMz4yLjIuNjogT2N0IDI1IDIwMDA6PC9oMz4KPHVsPgogIDxsaT5BZGRlZCBhbiBoYXNoIHRhYmxlIG1vZHVsZSwgbWlncmF0ZWQgYSBudW1iZXIgb2YgaW50ZXJuYWwgc3RydWN0dXJlIHRvCiAgICB0aG9zZTwvbGk+CiAgPGxpPkZpeGVkIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uIHByb2JsZW1zPC9saT4KICA8bGk+SFRUUCBtb2R1bGUgY2xlYW51cHM8L2xpPgogIDxsaT5IVE1MIHBhcnNlciBpbXByb3ZlbWVudHMgKHRhZyBlcnJvcnMsIHNjcmlwdC9zdHlsZSBoYW5kbGluZywgYXR0cmlidXRlCiAgICBub3JtYWxpemF0aW9uKTwvbGk+CiAgPGxpPmNvYWxlc2Npbmcgb2YgYWRqYWNlbnQgdGV4dCBub2RlczwvbGk+CiAgPGxpPmNvdXBsZSBvZiBYUGF0aCBidWcgZml4ZXMsIGV4cG9ydGVkIHRoZSBpbnRlcm5hbCBBUEk8L2xpPgo8L3VsPgoKPGgzPjIuMi41OiBPY3QgMTUgMjAwMDo8L2gzPgo8dWw+CiAgPGxpPlhQb2ludGVyIGltcGxlbWVudGF0aW9uIGFuZCB0ZXN0c3VpdGU8L2xpPgogIDxsaT5Mb3Qgb2YgWFBhdGggZml4ZXMsIGFkZGVkIHZhcmlhYmxlIGFuZCBmdW5jdGlvbnMgcmVnaXN0cmF0aW9uLCBtb3JlCiAgICB0ZXN0czwvbGk+CiAgPGxpPlBvcnRhYmlsaXR5IGZpeGVzLCBsb3RzIG9mIGVuaGFuY2VtZW50cyB0b3dhcmQgYW4gZWFzeSBXaW5kb3dzIGJ1aWxkCiAgICBhbmQgcmVsZWFzZTwvbGk+CiAgPGxpPkxhdGUgdmFsaWRhdGlvbiBmaXhlczwvbGk+CiAgPGxpPkludGVncmF0ZWQgYSBsb3Qgb2YgY29udHJpYnV0ZWQgcGF0Y2hlczwvbGk+CiAgPGxpPmFkZGVkIG1lbW9yeSBtYW5hZ2VtZW50IGRvY3M8L2xpPgogIDxsaT5hIHBlcmZvcm1hbmNlIHByb2JsZW0gd2hlbiB1c2luZyBsYXJnZSBidWZmZXIgc2VlbXMgZml4ZWQ8L2xpPgo8L3VsPgoKPGgzPjIuMi40OiBPY3QgMSAyMDAwOjwvaDM+Cjx1bD4KICA8bGk+bWFpbiBYUGF0aCBwcm9ibGVtIGZpeGVkPC9saT4KICA8bGk+SW50ZWdyYXRlZCBwb3J0YWJpbGl0eSBwYXRjaGVzIGZvciBXaW5kb3dzPC9saT4KICA8bGk+U2VyaW91cyBidWcgZml4ZXMgb24gdGhlIFVSSSBhbmQgSFRNTCBjb2RlPC9saT4KPC91bD4KCjxoMz4yLjIuMzogU2VwIDE3IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmJ1ZyBmaXhlczwvbGk+CiAgPGxpPmNsZWFudXAgb2YgZW50aXR5IGhhbmRsaW5nIGNvZGU8L2xpPgogIDxsaT5vdmVyYWxsIHJldmlldyBvZiBhbGwgbG9vcHMgaW4gdGhlIHBhcnNlcnMsIGFsbCBzcHJpbnRmIHVzYWdlIGhhcyBiZWVuCiAgICBjaGVja2VkIHRvbzwvbGk+CiAgPGxpPkZhciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGFyZ2VzIER0ZC4gVmFsaWRhdGluZyBhZ2FpbnN0IERvY0Jvb2sgWE1MIER0ZAogICAgd29ya3Mgc21vb3RobHkgbm93LjwvbGk+CjwvdWw+Cgo8aDM+MS44LjEwOiBTZXAgNiAyMDAwPC9oMz4KPHVsPgogIDxsaT5idWcgZml4IHJlbGVhc2UgZm9yIHNvbWUgR25vbWUgcHJvamVjdHM8L2xpPgo8L3VsPgoKPGgzPjIuMi4yOiBBdWd1c3QgMTIgMjAwMDwvaDM+Cjx1bD4KICA8bGk+bW9zdGx5IGJ1ZyBmaXhlczwvbGk+CiAgPGxpPnN0YXJ0ZWQgYWRkaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB4bWwgcGFyc2VyIGNvbnRleHQgb3B0aW9uczwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjE6IEp1bHkgMjEgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YSBwdXJlbHkgYnVnIGZpeGVzIHJlbGVhc2U8L2xpPgogIDxsaT5maXhlZCBhbiBlbmNvZGluZyBzdXBwb3J0IHByb2JsZW0gd2hlbiBwYXJzaW5nIGZyb20gYSBtZW1vcnkgYmxvY2s8L2xpPgogIDxsaT5maXhlZCBhIERPQ1RZUEUgcGFyc2luZyBwcm9ibGVtPC9saT4KICA8bGk+cmVtb3ZlZCBhIGJ1ZyBpbiB0aGUgZnVuY3Rpb24gYWxsb3dpbmcgdG8gb3ZlcnJpZGUgdGhlIG1lbW9yeQogICAgYWxsb2NhdGlvbiByb3V0aW5lczwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjA6IEp1bHkgMTQgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YXBwbGllZCBhIGxvdCBvZiBwb3J0YWJpbGl0eSBmaXhlczwvbGk+CiAgPGxpPmJldHRlciBlbmNvZGluZyBzdXBwb3J0L2NsZWFudXAgYW5kIHNhdmluZyAoY29udGVudCBpcyBub3cgYWx3YXlzCiAgICBlbmNvZGVkIGluIFVURi04KTwvbGk+CiAgPGxpPnRoZSBIVE1MIHBhcnNlciBub3cgY29ycmVjdGx5IGhhbmRsZXMgZW5jb2RpbmdzPC9saT4KICA8bGk+YWRkZWQgeG1sSGFzUHJvcCgpPC9saT4KICA8bGk+Zml4ZWQgYSBzZXJpb3VzIHByb2JsZW0gd2l0aCAmYW1wOyMzODs8L2xpPgogIDxsaT5wcm9wYWdhdGVkIHRoZSBmaXggdG8gRlRQIGNsaWVudDwvbGk+CiAgPGxpPmNsZWFudXAsIGJ1Z2ZpeGVzLCBldGMgLi4uPC9saT4KICA8bGk+QWRkZWQgYSBwYWdlIGFib3V0IDxhIGhyZWY9ImVuY29kaW5nLmh0bWwiPmxpYnhtbCBJbnRlcm5hdGlvbmFsaXphdGlvbgogICAgc3VwcG9ydDwvYT48L2xpPgo8L3VsPgoKPGgzPjEuOC45OiAgSnVseSA5IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIHRoZSBzcGVjIHRoZSBSUE1zIHNob3VsZCBiZSBiZXR0ZXI8L2xpPgogIDxsaT5maXhlZCBhIHNlcmlvdXMgYnVnIGluIHRoZSBGVFAgaW1wbGVtZW50YXRpb24sIHJlbGVhc2VkIDEuOC45IHRvIHNvbHZlCiAgICBycG1maW5kIHVzZXJzIHByb2JsZW08L2xpPgo8L3VsPgoKPGgzPjIuMS4xOiBKdWx5IDEgMjAwMDwvaDM+Cjx1bD4KICA8bGk+Zml4ZXMgYSBjb3VwbGUgb2YgYnVncyBpbiB0aGUgMi4xLjAgcGFja2FnaW5nPC9saT4KICA8bGk+aW1wcm92ZW1lbnRzIG9uIHRoZSBIVE1MIHBhcnNlcjwvbGk+CjwvdWw+Cgo8aDM+Mi4xLjAgYW5kIDEuOC44OiBKdW5lIDI5IDIwMDA8L2gzPgo8dWw+CiAgPGxpPjEuOC44IGlzIG1vc3RseSBhIGNvbW1vZGl0eSBwYWNrYWdlIGZvciB1cGdyYWRpbmcgdG8gbGlieG1sMiBhY2NvcmRpbmcKICAgIHRvIDxhIGhyZWY9InVwZ3JhZGUuaHRtbCI+bmV3IGluc3RydWN0aW9uczwvYT4uIEl0IGZpeGVzIGEgbmFzdHkgcHJvYmxlbQogICAgYWJvdXQgJmFtcDsjMzg7IGNoYXJyZWYgcGFyc2luZzwvbGk+CiAgPGxpPjIuMS4wIGFsc28gZWFzZSB0aGUgdXBncmFkZSBmcm9tIGxpYnhtbCB2MSB0byB0aGUgcmVjZW50IHZlcnNpb24uIGl0CiAgICBhbHNvIGNvbnRhaW5zIG51bWVyb3VzIGZpeGVzIGFuZCBlbmhhbmNlbWVudHM6CiAgICA8dWw+CiAgICAgIDxsaT5hZGRlZCB4bWxTdG9wUGFyc2VyKCkgdG8gc3RvcCBwYXJzaW5nPC9saT4KICAgICAgPGxpPmltcHJvdmVkIGEgbG90IHBhcnNpbmcgc3BlZWQgd2hlbiB0aGVyZSBpcyBsYXJnZSBDREFUQSBibG9jczwvbGk+CiAgICAgIDxsaT5pbmNsdWRlcyBYUGF0aCBwYXRjaGVzIHByb3ZpZGVkIGJ5IFBpY2RhciBUZWNobm9sb2d5PC9saT4KICAgICAgPGxpPnRyaWVkIHRvIGZpeCBhcyBtdWNoIGFzIHBvc3NpYmxlIERURCB2YWxpZGF0aW9uIGFuZCBuYW1lc3BhY2UKICAgICAgICByZWxhdGVkIHByb2JsZW1zPC9saT4KICAgICAgPGxpPm91dHB1dCB0byBhIGdpdmVuIGVuY29kaW5nIGhhcyBiZWVuIGFkZGVkL3Rlc3RlZDwvbGk+CiAgICAgIDxsaT5sb3Qgb2YgdmFyaW91cyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+Cgo8aDM+Mi4wLjA6IEFwciAxMiAyMDAwPC9oMz4KPHVsPgogIDxsaT5GaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiBsaWJ4bWwyLiBJZiB5b3UgYXJlIHVzaW5nIGxpYnhtbCwgaXQncyBhIGdvb2QKICAgIGlkZWEgdG8gY2hlY2sgdGhlIDEueCB0byAyLnggdXBncmFkZSBpbnN0cnVjdGlvbnMuIE5PVEU6IHdoaWxlIGluaXRpYWxseQogICAgc2NoZWR1bGVkIGZvciBBcHIgMyB0aGUgcmVsZWFzZSBvY2N1cnJlZCBvbmx5IG9uIEFwciAxMiBkdWUgdG8gbWFzc2l2ZQogICAgd29ya2xvYWQuPC9saT4KICA8bGk+VGhlIGluY2x1ZGUgYXJlIG5vdyBsb2NhdGVkIHVuZGVyICRwcmVmaXgvaW5jbHVkZS9saWJ4bWwgKGluc3RlYWQgb2YKICAgICRwcmVmaXgvaW5jbHVkZS9nbm9tZS14bWwpLCB0aGV5IGFsc28gYXJlIHJlZmVyZW5jZWQgYnkKICAgIDxwcmU+I2luY2x1ZGUgJmx0O2xpYnhtbC94eHguaCZndDs8L3ByZT4KICAgIDxwPmluc3RlYWQgb2Y8L3A+CiAgICA8cHJlPiNpbmNsdWRlICJ4eHguaCI8L3ByZT4KICA8L2xpPgogIDxsaT5hIG5ldyBVUkkgbW9kdWxlIGZvciBwYXJzaW5nIFVSSXMgYW5kIGZvbGxvd2luZyBzdHJpY3RseSBSRkMgMjM5NjwvbGk+CiAgPGxpPnRoZSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyB1c2VkIGJ5IGxpYnhtbCBjYW4gbm93IGJlIG92ZXJsb2FkZWQKICAgIGR5bmFtaWNhbGx5IGJ5IHVzaW5nIHhtbE1lbVNldHVwKCk8L2xpPgogIDxsaT5UaGUgcHJldmlvdXNseSBDVlMgb25seSB0b29sIHRlc3RlciBoYXMgYmVlbiByZW5hbWVkCiAgICA8c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz4gYW5kIGlzIG5vdyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgbGlieG1sMgogICAgcGFja2FnZTwvbGk+CiAgPGxpPlRoZSBJL08gaW50ZXJmYWNlIGhhcyBiZWVuIHJldmFtcGVkLiBUaGVyZSBpcyBub3cgd2F5cyB0byBwbHVnIGluCiAgICBzcGVjaWZpYyBJL08gbW9kdWxlcywgZWl0aGVyIGF0IHRoZSBVUkkgc2NoZW1lIGRldGVjdGlvbiBsZXZlbCB1c2luZwogICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcygpICBvciBieSBwYXNzaW5nIEkvTyBmdW5jdGlvbnMgd2hlbiBjcmVhdGluZyBhCiAgICBwYXJzZXIgY29udGV4dCB1c2luZyB4bWxDcmVhdGVJT1BhcnNlckN0eHQoKTwvbGk+CiAgPGxpPnRoZXJlIGlzIGEgQyBwcmVwcm9jZXNzb3IgbWFjcm8gTElCWE1MX1ZFUlNJT04gcHJvdmlkaW5nIHRoZSB2ZXJzaW9uCiAgICBudW1iZXIgb2YgdGhlIGxpYnhtbCBtb2R1bGUgaW4gdXNlPC9saT4KICA8bGk+YSBudW1iZXIgb2Ygb3B0aW9uYWwgZmVhdHVyZXMgb2YgbGlieG1sIGNhbiBub3cgYmUgZXhjbHVkZWQgYXQKICAgIGNvbmZpZ3VyZSB0aW1lIChGVFAvSFRUUC9IVE1ML1hQYXRoL0RlYnVnKTwvbGk+CjwvdWw+Cgo8aDM+Mi4wLjBiZXRhOiBNYXIgMTQgMjAwMDwvaDM+Cjx1bD4KICA8bGk+VGhpcyBpcyBhIGZpcnN0IEJldGEgcmVsZWFzZSBvZiBsaWJ4bWwgdmVyc2lvbiAyPC9saT4KICA8bGk+SXQncyBhdmFpbGFibGUgb25seSBmcm9tPGEgaHJlZj0iZnRwOi8veG1sc29mdC5vcmcvIj54bWxzb2Z0Lm9yZwogICAgRlRQPC9hPiwgaXQncyBwYWNrYWdlZCBhcyBsaWJ4bWwyLTIuMC4wYmV0YSBhbmQgYXZhaWxhYmxlIGFzIHRhciBhbmQKICBSUE1zPC9saT4KICA8bGk+VGhpcyB2ZXJzaW9uIGlzIG5vdyB0aGUgaGVhZCBpbiB0aGUgR25vbWUgQ1ZTIGJhc2UsIHRoZSBvbGQgb25lIGlzCiAgICBhdmFpbGFibGUgdW5kZXIgdGhlIHRhZyBMSUJfWE1MXzFfWDwvbGk+CiAgPGxpPlRoaXMgaW5jbHVkZXMgYSB2ZXJ5IGxhcmdlIHNldCBvZiBjaGFuZ2VzLiBGcm9tIGEgIHByb2dyYW1tYXRpYyBwb2ludAogICAgb2YgdmlldyBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIG1vZGlmaWVkIHRvbyBtdWNoLCBjaGVjayB0aGUKICAgIDxhIGhyZWY9InVwZ3JhZGUuaHRtbCI+dXBncmFkZSBwYWdlPC9hPjwvbGk+CiAgPGxpPlNvbWUgaW50ZXJmYWNlcyBtYXkgY2hhbmdlcyAoZXNwZWNpYWxseSBhIGJpdCBhYm91dCBlbmNvZGluZykuPC9saT4KICA8bGk+dGhlIHVwZGF0ZXMgaW5jbHVkZXM6CiAgICA8dWw+CiAgICAgIDxsaT5maXggSTE4TiBzdXBwb3J0LiBJU08tTGF0aW4teC9VVEYtOC9VVEYtMTYgKG5lYXJseSkgc2VlbXMgY29ycmVjdGx5CiAgICAgICAgaGFuZGxlZCBub3c8L2xpPgogICAgICA8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIGVudGl0aWVzLCBlc3BlY2lhbGx5IHdlbGwtZm9ybWVkbmVzcyBjaGVja2luZwogICAgICAgIGFuZCBwcm9wZXIgUEVyZWYgZXh0ZW5zaW9ucyBpbiBleHRlcm5hbCBzdWJzZXRzPC9saT4KICAgICAgPGxpPkRURCBjb25kaXRpb25hbCBzZWN0aW9uczwvbGk+CiAgICAgIDxsaT5WYWxpZGF0aW9uIG5vdyBjb3JyZWN0bHkgaGFuZGxlIGVudGl0aWVzIGNvbnRlbnQ8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L3Rvb2xzL2dkb21lL21lc3NhZ2VzLzAwMzkuaHRtbCI+Y2hhbmdlCiAgICAgICAgc3RydWN0dXJlcyB0byBhY2NvbW1vZGF0ZSBET008L2E+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+U2VyaW91cyBwcm9ncmVzcyB3ZXJlIG1hZGUgdG93YXJkIGNvbXBsaWFuY2UsIDxhCiAgICBocmVmPSJjb25mL3Jlc3VsdC5odG1sIj5oZXJlIGFyZSB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0PC9hPiBhZ2FpbnN0IHRoZQogICAgT0FTSVMgdGVzdHN1aXRlIChleGNlcHQgdGhlIEphcGFuZXNlIHRlc3RzIHNpbmNlIEkgZG9uJ3Qgc3VwcG9ydCB0aGF0CiAgICBlbmNvZGluZyB5ZXQpLiBUaGlzIFVSTCBpcyByZWJ1aWx0IGV2ZXJ5IGNvdXBsZSBvZiBob3VycyB1c2luZyB0aGUgQ1ZTCiAgICBoZWFkIHZlcnNpb24uPC9saT4KPC91bD4KCjxoMz4xLjguNzogTWFyIDYgMjAwMDwvaDM+Cjx1bD4KICA8bGk+VGhpcyBpcyBhIGJ1ZyBmaXggcmVsZWFzZTo8L2xpPgogIDxsaT5JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSBpZ25vcmFibGUgYmxhbmtzIGhldXJpc3RpYyB1c2VkIGJ5CiAgICBsaWJ4bWwtMS54LCBhIG5ldyBmdW5jdGlvbiAgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgd2lsbCBhbGxvdyB0aGlzLiBOb3RlCiAgICB0aGF0IGZvciBhZGhlcmVuY2UgdG8gWE1MIHNwZWMsIHRoaXMgYmVoYXZpb3VyIHdpbGwgYmUgZGlzYWJsZWQgYnkKICAgIGRlZmF1bHQgaW4gMi54IC4gVGhlIHNhbWUgZnVuY3Rpb24gd2lsbCBhbGxvdyB0byBrZWVwIGNvbXBhdGliaWxpdHkgZm9yCiAgICBvbGQgY29kZS48L2xpPgogIDxsaT5CbGFua3MgaW4gJmx0O2EmZ3Q7ICAmbHQ7L2EmZ3Q7IGNvbnN0cnVjdHMgYXJlIG5vdCBpZ25vcmVkIGFueW1vcmUsCiAgICBhdm9pZGluZyBoZXVyaXN0aWMgaXMgcmVhbGx5IHRoZSBSaWdodCBXYXkgOi1cPC9saT4KICA8bGk+VGhlIHVuY2hlY2tlZCB1c2Ugb2Ygc25wcmludGYgd2hpY2ggd2FzIGJyZWFraW5nIGxpYnhtbC0xLjguNgogICAgY29tcGlsYXRpb24gb24gc29tZSBwbGF0Zm9ybXMgaGFzIGJlZW4gZml4ZWQ8L2xpPgogIDxsaT5uYW5vZnRwLmMgbmFub2h0dHAuYzogRml4ZWQgJyMnIGFuZCAnPycgc3RyaXBwaW5nIHdoZW4gcHJvY2Vzc2luZwogIFVSSXM8L2xpPgo8L3VsPgoKPGgzPjEuOC42OiBKYW4gMzEgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YWRkZWQgYSBuYW5vRlRQIHRyYW5zcG9ydCBtb2R1bGUsIGRlYnVnZ2VkIHVudGlsIHRoZSBuZXcgdmVyc2lvbiBvZiA8YQogICAgaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L2xpbnV4L3JwbTJodG1sL3JwbWZpbmQuaHRtbCI+cnBtZmluZDwvYT4gY2FuIHVzZQogICAgaXQgd2l0aG91dCB0cm91YmxlczwvbGk+CjwvdWw+Cgo8aDM+MS44LjU6IEphbiAyMSAyMDAwPC9oMz4KPHVsPgogIDxsaT5hZGRpbmcgQVBJcyB0byBwYXJzZSBhIHdlbGwgYmFsYW5jZWQgY2h1bmsgb2YgWE1MIChwcm9kdWN0aW9uIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULWNvbnRlbnQiPls0M10gY29udGVudDwvYT4gb2YgdGhlCiAgICBYTUwgc3BlYyk8L2xpPgogIDxsaT5maXhlZCBhIGhpZGVvdXMgYnVnIGluIHhtbEdldFByb3AgcG9pbnRlZCBieSBSdW5lLkRqdXJodXVzQGZhc3Qubm88L2xpPgogIDxsaT5Kb2R5IEdvbGRiZXJnICZsdDtqZ29sZGJlcmdAaG9tZS5jb20mZ3Q7IHByb3ZpZGVkIGFub3RoZXIgcGF0Y2ggdHJ5aW5nCiAgICB0byBzb2x2ZSB0aGUgemxpYiBjaGVja3MgcHJvYmxlbXM8L2xpPgogIDxsaT5UaGUgY3VycmVudCBzdGF0ZSBpbiBnbm9tZSBDVlMgYmFzZSBpcyBleHBlY3RlZCB0byBzaGlwIGFzIDEuOC41IHdpdGgKICAgIGdudW1lcmljIHNvb248L2xpPgo8L3VsPgoKPGgzPjEuOC40OiBKYW4gMTMgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YnVnIGZpeGVzLCByZWludHJvZHVjZWQgeG1sTmV3R2xvYmFsTnMoKSwgZml4ZWQgeG1sTmV3TnMoKTwvbGk+CiAgPGxpPmFsbCBleGl0KCkgY2FsbCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBsaWJ4bWw8L2xpPgogIDxsaT5maXhlZCBhIHByb2JsZW0gd2l0aCBJTkNMVURFX1dJTlNPQ0sgb24gV0lOMzIgcGxhdGZvcm08L2xpPgogIDxsaT5hZGRlZCBuZXdEb2NGcmFnbWVudCgpPC9saT4KPC91bD4KCjxoMz4xLjguMzogSmFuIDUgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YSBQdXNoIGludGVyZmFjZSBmb3IgdGhlIFhNTCBhbmQgSFRNTCBwYXJzZXJzPC9saT4KICA8bGk+YSBzaGVsbC1saWtlIGludGVyZmFjZSB0byB0aGUgZG9jdW1lbnQgdHJlZSAodHJ5IHRlc3RlciAtLXNoZWxsIDotKTwvbGk+CiAgPGxpPmxvdHMgb2YgYnVnIGZpeGVzIGFuZCBpbXByb3ZlbWVudCBhZGRlZCBvdmVyIFhNYXMgaG9saWRheXM8L2xpPgogIDxsaT5maXhlZCB0aGUgRFREIHBhcnNpbmcgY29kZSB0byB3b3JrIHdpdGggdGhlIHhodG1sIERURDwvbGk+CiAgPGxpPmFkZGVkIHhtbFJlbW92ZVByb3AoKSwgeG1sUmVtb3ZlSUQoKSBhbmQgeG1sUmVtb3ZlUmVmKCk8L2xpPgogIDxsaT5GaXhlZCBidWdzIGluIHhtbE5ld05zKCk8L2xpPgogIDxsaT5FeHRlcm5hbCBlbnRpdHkgbG9hZGluZyBjb2RlIGhhcyBiZWVuIHJldmFtcGVkLCBub3cgaXQgdXNlcwogICAgeG1sTG9hZEV4dGVybmFsRW50aXR5KCksIHNvbWUgZml4IG9uIGVudGl0aWVzIHByb2Nlc3Npbmcgd2VyZSBhZGRlZDwvbGk+CiAgPGxpPmNsZWFuZWQgdXAgV0lOMzIgaW5jbHVkZXMgb2Ygc29ja2V0IHN0dWZmPC9saT4KPC91bD4KCjxoMz4xLjguMjogRGVjIDIxIDE5OTk8L2gzPgo8dWw+CiAgPGxpPkkgZ290IGFub3RoZXIgcHJvYmxlbSB3aXRoIGluY2x1ZGVzIGFuZCBDKyssIEkgaG9wZSB0aGlzIGlzc3VlIGlzIGZpeGVkCiAgICBmb3IgZ29vZCB0aGlzIHRpbWU8L2xpPgogIDxsaT5BZGRlZCBhIGZldyB0cmVlIG1vZGlmaWNhdGlvbiBmdW5jdGlvbnM6IHhtbFJlcGxhY2VOb2RlLAogICAgeG1sQWRkUHJldlNpYmxpbmcsIHhtbEFkZE5leHRTaWJsaW5nLCB4bWxOb2RlU2V0TmFtZSBhbmQKICAgIHhtbERvY1NldFJvb3RFbGVtZW50PC9saT4KICA8bGk+VHJpZWQgdG8gaW1wcm92ZSB0aGUgSFRNTCBvdXRwdXQgd2l0aCBoZWxwIGZyb20gPGEKICAgIGhyZWY9Im1haWx0bzpjbGFoZXlAdW1pY2guZWR1Ij5DaHJpcyBMYWhleTwvYT48L2xpPgo8L3VsPgoKPGgzPjEuOC4xOiBEZWMgMTggMTk5OTwvaDM+Cjx1bD4KICA8bGk+dmFyaW91cyBwYXRjaGVzIHRvIGF2b2lkIHRyb3VibGVzIHdoZW4gdXNpbmcgbGlieG1sIHdpdGggQysrIGNvbXBpbGVycwogICAgdGhlICJuYW1lc3BhY2UiIGtleXdvcmQgYW5kIEMgZXNjYXBpbmcgaW4gaW5jbHVkZSBmaWxlczwvbGk+CiAgPGxpPmEgcHJvYmxlbSBpbiBvbmUgb2YgdGhlIGNvcmUgbWFjcm9zIElTX0NIQVIgd2FzIGNvcnJlY3RlZDwvbGk+CiAgPGxpPmZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS44LjAgYnJlYWtpbmcgZGVmYXVsdCBuYW1lc3BhY2UgcHJvY2Vzc2luZywKICAgIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0aGUgRGlhIGFwcGxpY2F0aW9uPC9saT4KICA8bGk+Zml4ZWQgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24gKHZhbGlkYXRpb24gYWZ0ZXIgcGFyc2luZywgb3IgYnkgdXNpbmcgYQogICAgRHRkIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG9yaWdpbmFsIGRvY3VtZW50KTwvbGk+CiAgPGxpPmZpeGVkIGEgYnVnIGluPC9saT4KPC91bD4KCjxoMz4xLjguMDogRGVjIDEyIDE5OTk8L2gzPgo8dWw+CiAgPGxpPmNsZWFudXAsIGVzcGVjaWFsbHkgbWVtb3J5IHdpc2U8L2xpPgogIDxsaT50aGUgcGFyc2VyIHNob3VsZCBiZSBtb3JlIHJlbGlhYmxlLCBlc3BlY2lhbGx5IHRoZSBIVE1MIG9uZSwgaXQgc2hvdWxkCiAgICBub3QgY3Jhc2gsIHdoYXRldmVyIHRoZSBpbnB1dCAhPC9saT4KICA8bGk+SW50ZWdyYXRlZCB2YXJpb3VzIHBhdGNoZXMsIGVzcGVjaWFsbHkgYSBzcGVlZHVwIGltcHJvdmVtZW50IGZvciBsYXJnZQogICAgZGF0YXNldCBmcm9tIDxhIGhyZWY9Im1haWx0bzpjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQiPkNhcmwgTnlnYXJkPC9hPiwKICAgIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1idWZmZXJzIHRvIGVuYWJsZSB0aGVtLjwvbGk+CiAgPGxpPmF0dHJpYnV0ZSBub3JtYWxpemF0aW9uLCBvb3BzIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgbG9uZyBhZ28gITwvbGk+CiAgPGxpPmF0dHJpYnV0ZXMgZGVmYXVsdGVkIGZyb20gRFREcyBzaG91bGQgYmUgYXZhaWxhYmxlLCB4bWxTZXRQcm9wKCkgbm93CiAgICBkb2VzIGVudGl0aWVzIGVzY2FwaW5nIGJ5IGRlZmF1bHQuPC9saT4KPC91bD4KCjxoMz4xLjcuNDogT2N0IDI1IDE5OTk8L2gzPgo8dWw+CiAgPGxpPkxvdHMgb2YgSFRNTCBpbXByb3ZlbWVudDwvbGk+CiAgPGxpPkZpeGVkIHNvbWUgZXJyb3JzIHdoZW4gc2F2aW5nIGJvdGggWE1MIGFuZCBIVE1MPC9saT4KICA8bGk+TW9yZSBleGFtcGxlcywgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgc2hvdWxkIG5vdyBsb29rIGNsZWFuPC9saT4KICA8bGk+Rml4ZWQgYSBidWcgd2l0aCBjb250aWd1b3VzIGNoYXJyZWY8L2xpPgo8L3VsPgoKPGgzPjEuNy4zOiBTZXAgMjkgMTk5OTwvaDM+Cjx1bD4KICA8bGk+cG9ydGFiaWxpdHkgcHJvYmxlbXMgZml4ZWQ8L2xpPgogIDxsaT5zbnByaW50ZiB3YXMgdXNlZCB1bmNvbmRpdGlvbmFsbHksIGxlYWRpbmcgdG8gbGluayBwcm9ibGVtcyBvbiBzeXN0ZW0KICAgIHdlcmUgaXQncyBub3QgYXZhaWxhYmxlLCBmaXhlZDwvbGk+CjwvdWw+Cgo8aDM+MS43LjE6IFNlcCAyNCAxOTk5PC9oMz4KPHVsPgogIDxsaT5UaGUgYmFzaWMgdHlwZSBmb3Igc3RyaW5ncyBtYW5pcHVsYXRlZCBieSBsaWJ4bWwgaGFzIGJlZW4gcmVuYW1lZCBpbgogICAgMS43LjEgZnJvbSA8c3Ryb25nPkNIQVI8L3N0cm9uZz4gdG8gPHN0cm9uZz54bWxDaGFyPC9zdHJvbmc+LiBUaGUgcmVhc29uCiAgICBpcyB0aGF0IENIQVIgd2FzIGNvbmZsaWN0aW5nIHdpdGggYSBwcmVkZWZpbmVkIHR5cGUgb24gV2luZG93cy4gSG93ZXZlcgogICAgb24gbm9uIFdJTjMyIGVudmlyb25tZW50LCBjb21wYXRpYmlsaXR5IGlzIHByb3ZpZGVkIGJ5IHRoZSB3YXkgb2YgIGEKICAgIDxzdHJvbmc+I2RlZmluZSA8L3N0cm9uZz4uPC9saT4KICA8bGk+Q2hhbmdlZCBhbm90aGVyIGVycm9yIDogdGhlIHVzZSBvZiBhIHN0cnVjdHVyZSBmaWVsZCBjYWxsZWQgZXJybm8sIGFuZAogICAgbGVhZGluZyB0byB0cm91YmxlcyBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQncyBhIG1hY3JvPC9saT4KPC91bD4KCjxoMz4xLjcuMDogU2VwIDIzIDE5OTk8L2gzPgo8dWw+CiAgPGxpPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGZldGNoIHJlbW90ZSBEVEQgb3IgcGFyc2VkIGVudGl0aWVzLCBzZWUgdGhlIDxhCiAgICBocmVmPSJodG1sL2xpYnhtbC1uYW5vaHR0cC5odG1sIj5uYW5vaHR0cDwvYT4gbW9kdWxlLjwvbGk+CiAgPGxpPkFkZGVkIGFuIGVycm5vIHRvIHJlcG9ydCBlcnJvcnMgYnkgYW5vdGhlciBtZWFuIHRoYW4gYSBzaW1wbGUgcHJpbnRmCiAgICBsaWtlIGNhbGxiYWNrPC9saT4KICA8bGk+RmluaXNoZWQgSUQvSURSRUYgc3VwcG9ydCBhbmQgY2hlY2tpbmcgd2hlbiB2YWxpZGF0aW9uPC9saT4KICA8bGk+U2VyaW91cyBtZW1vcnkgbGVha3MgZml4ZWQgKHRoZXJlIGlzIG5vdyBhIDxhCiAgICBocmVmPSJodG1sL2xpYnhtbC14bWxtZW1vcnkuaHRtbCI+bWVtb3J5IHdyYXBwZXI8L2E+IG1vZHVsZSk8L2xpPgogIDxsaT5JbXByb3ZlbWVudCBvZiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCI+WFBhdGg8L2E+CiAgICBpbXBsZW1lbnRhdGlvbjwvbGk+CiAgPGxpPkFkZGVkIGFuIEhUTUwgcGFyc2VyIGZyb250LWVuZDwvbGk+CjwvdWw+Cgo8aDI+PGEgbmFtZT0iWE1MIj5YTUw8L2E+PC9oMj4KCjxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwiPlhNTCBpcyBhIHN0YW5kYXJkPC9hPiBmb3IKbWFya3VwLWJhc2VkIHN0cnVjdHVyZWQgZG9jdW1lbnRzLiBIZXJlIGlzIDxhIG5hbWU9ImV4YW1wbGUiPmFuIGV4YW1wbGUgWE1MCmRvY3VtZW50PC9hPjo8L3A+CjxwcmU+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CiZsdDtFWEFNUExFIHByb3AxPSJnbm9tZSBpcyBncmVhdCIgcHJvcDI9IiZhbXA7YW1wOyBsaW51eCB0b28iJmd0OwogICZsdDtoZWFkJmd0OwogICAmbHQ7dGl0bGUmZ3Q7V2VsY29tZSB0byBHbm9tZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtjaGFwdGVyJmd0OwogICAmbHQ7dGl0bGUmZ3Q7VGhlIExpbnV4IGFkdmVudHVyZSZsdDsvdGl0bGUmZ3Q7CiAgICZsdDtwJmd0O2JsYSBibGEgYmxhIC4uLiZsdDsvcCZndDsKICAgJmx0O2ltYWdlIGhyZWY9ImxpbnVzLmdpZiIvJmd0OwogICAmbHQ7cCZndDsuLi4mbHQ7L3AmZ3Q7CiAgJmx0Oy9jaGFwdGVyJmd0OwombHQ7L0VYQU1QTEUmZ3Q7PC9wcmU+Cgo8cD5UaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhhdCBpdCBpcyBhbiBYTUwgZG9jdW1lbnQgYW5kIGdpdmVzIHVzZWZ1bAppbmZvcm1hdGlvbiBhYm91dCBpdHMgZW5jb2RpbmcuICBUaGVuIHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudCBpcyBhIHRleHQKZm9ybWF0IHdob3NlIHN0cnVjdHVyZSBpcyBzcGVjaWZpZWQgYnkgdGFncyBiZXR3ZWVuIGJyYWNrZXRzLiA8c3Ryb25nPkVhY2gKdGFnIG9wZW5lZCBoYXMgdG8gYmUgY2xvc2VkPC9zdHJvbmc+LiBYTUwgaXMgcGVkYW50aWMgYWJvdXQgdGhpcy4gSG93ZXZlciwgaWYKYSB0YWcgaXMgZW1wdHkgKG5vIGNvbnRlbnQpLCBhIHNpbmdsZSB0YWcgY2FuIHNlcnZlIGFzIGJvdGggdGhlIG9wZW5pbmcgYW5kCmNsb3NpbmcgdGFnIGlmIGl0IGVuZHMgd2l0aCA8Y29kZT4vJmd0OzwvY29kZT4gcmF0aGVyIHRoYW4gd2l0aAo8Y29kZT4mZ3Q7PC9jb2RlPi4gTm90ZSB0aGF0LCBmb3IgZXhhbXBsZSwgdGhlIGltYWdlIHRhZyBoYXMgbm8gY29udGVudCAoanVzdAphbiBhdHRyaWJ1dGUpIGFuZCBpcyBjbG9zZWQgYnkgZW5kaW5nIHRoZSB0YWcgd2l0aCA8Y29kZT4vJmd0OzwvY29kZT4uPC9wPgoKPHA+WE1MIGNhbiBiZSBhcHBsaWVkIHN1Y2Nlc3NmdWxseSB0byBhIHdpZGUgcmFuZ2Ugb2YgdGFza3MsIHJhbmdpbmcgZnJvbQpsb25nIHRlcm0gc3RydWN0dXJlZCBkb2N1bWVudCBtYWludGVuYW5jZSAod2hlcmUgaXQgZm9sbG93cyB0aGUgc3RlcHMgb2YKU0dNTCkgdG8gc2ltcGxlIGRhdGEgZW5jb2RpbmcgbWVjaGFuaXNtcyBsaWtlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXR0aW5nCihnbGFkZSksIHNwcmVhZHNoZWV0cyAoZ251bWVyaWMpLCBvciBldmVuIHNob3J0ZXIgbGl2ZWQgZG9jdW1lbnRzIHN1Y2ggYXMKV2ViREFWIHdoZXJlIGl0IGlzIHVzZWQgdG8gZW5jb2RlIHJlbW90ZSBjYWxscyBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhCnNlcnZlci48L3A+Cgo8aDI+PGEgbmFtZT0iWFNMVCI+WFNMVDwvYT48L2gyPgoKPHA+Q2hlY2sgPGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL1hTTFQiPnRoZSBzZXBhcmF0ZSBsaWJ4c2x0IHBhZ2U8L2E+PC9wPgoKPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHNsdCI+WFNMIFRyYW5zZm9ybWF0aW9uczwvYT4sICBpcyBhCmxhbmd1YWdlIGZvciB0cmFuc2Zvcm1pbmcgWE1MIGRvY3VtZW50cyBpbnRvIG90aGVyIFhNTCBkb2N1bWVudHMgKG9yCkhUTUwvdGV4dHVhbCBvdXRwdXQpLjwvcD4KCjxwPkEgc2VwYXJhdGUgbGlicmFyeSBjYWxsZWQgbGlieHNsdCBpcyBiZWluZyBkZXZlbG9wZWQgb24gdG9wIG9mIGxpYnhtbDIuClRoaXMgbW9kdWxlICJsaWJ4c2x0IiB0b28gY2FuIGJlIGZvdW5kIGluIHRoZSBHbm9tZSBDVlMgYmFzZS48L3A+Cgo8cD5Zb3UgY2FuIGNoZWNrIHRoZSA8YQpocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9seHIvc291cmNlL2xpYnhzbHQvRkVBVFVSRVMiPmZlYXR1cmVzPC9hPgpzdXBwb3J0ZWQgYW5kIHRoZSBwcm9ncmVzc2VzIG9uIHRoZSA8YQpocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9seHIvc291cmNlL2xpYnhzbHQvQ2hhbmdlTG9nIgpuYW1lPSJDaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvYT4uPC9wPgoKPGgyPjxhIG5hbWU9IlB5dGhvbiI+UHl0aG9uIGFuZCBiaW5kaW5nczwvYT48L2gyPgoKPHA+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIGxhbmd1YWdlIGJpbmRpbmdzIGFuZCB3cmFwcGVycyBhdmFpbGFibGUgZm9yCmxpYnhtbDIsIHRoZSBsaXN0IGJlbG93IGlzIG5vdCBleGhhdXN0aXZlLiBQbGVhc2UgY29udGFjdCB0aGUgPGEKaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL21haWxtYW4vbGlzdGluZm8veG1sLWJpbmRpbmdzIj54bWwtYmluZGluZ3NAZ25vbWUub3JnPC9hPgooPGEgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC1iaW5kaW5ncy8iPmFyY2hpdmVzPC9hPikgaW4Kb3JkZXIgdG8gZ2V0IHVwZGF0ZXMgdG8gdGhpcyBsaXN0IG9yIHRvIGRpc2N1c3MgdGhlIHNwZWNpZmljIHRvcGljIG9mIGxpYnhtbDIKb3IgbGlieHNsdCB3cmFwcGVycyBvciBiaW5kaW5nczo8L3A+Cjx1bD4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOmFyaUBsdXNpcy5vcmciPkFyaSBKb2huc29uPC9hPiBwcm92aWRlcyBhICBDKysgd3JhcHBlcgogICAgZm9yIGxpYnhtbDo8YnI+CiAgICBXZWJzaXRlOiA8YQogICAgaHJlZj0iaHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLyI+aHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLzwvYT48YnI+CiAgICBEb3dubG9hZDogPGEKICAgIGhyZWY9Imh0dHA6Ly9sdXNpcy5vcmcvfmFyaS94bWwrKy9saWJ4bWwrKy50YXIuZ3oiPmh0dHA6Ly9sdXNpcy5vcmcvfmFyaS94bWwrKy9saWJ4bWwrKy50YXIuZ3o8L2E+PC9saT4KICA8bGk+VGhlcmUgaXMgYW5vdGhlciA8YSBocmVmPSJodHRwOi8vbGliZ2RvbWUtY3BwLmJlcmxpb3MuZGUvIj5DKysgd3JhcHBlcgogICAgYmFzZWQgb24gdGhlIGdkb21lMiBiaW5kaW5nczwvYT4gbWFpbnRhaW5lZCBieSBUb2JpYXMgUGV0ZXJzLjwvbGk+CiAgPGxpPmFuZCBhIHRoaXJkIEMrKyB3cmFwcGVyIGJ5IFBldGVyIEpvbmVzICZsdDtwam9uZXNAcG1hZGUub3JnJmd0OwogICAgPHA+V2Vic2l0ZTogPGEKICAgIGhyZWY9Imh0dHA6Ly9wbWFkZS5vcmcvcGpvbmVzL3NvZnR3YXJlL3htbHdyYXBwLyI+aHR0cDovL3BtYWRlLm9yZy9wam9uZXMvc29mdHdhcmUveG1sd3JhcHAvPC9hPjwvcD4KICA8L2xpPgogIDxsaT48YQogICAgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAxLU1hcmNoL21zZzAwMDE0Lmh0bWwiPk1hdHQKICAgIFNlcmdlYW50PC9hPiBkZXZlbG9wZWQgPGEKICAgIGhyZWY9Imh0dHA6Ly9heGtpdC5vcmcvZG93bmxvYWQvIj5YTUw6OkxpYlhTTFQ8L2E+LCBhIFBlcmwgd3JhcHBlciBmb3IKICAgIGxpYnhtbDIvbGlieHNsdCBhcyBwYXJ0IG9mIHRoZSA8YSBocmVmPSJodHRwOi8vYXhraXQuY29tLyI+QXhLaXQgWE1MCiAgICBhcHBsaWNhdGlvbiBzZXJ2ZXI8L2E+LjwvbGk+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzpka3VobG1hbkBjdXR0ZXIucmV4eC5jb20iPkRhdmUgS3VobG1hbjwvYT4gcHJvdmlkZXMgYW4KICAgIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgbGlieG1sL2xpYnhzbHQgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cucmV4eC5jb20vfmRrdWhsbWFuIj53cmFwcGVycyBmb3IgUHl0aG9uPC9hPi48L2xpPgogIDxsaT5Hb3BhbC5WIGFuZCBQZXRlciBNaW50ZW4gZGV2ZWxvcCA8YQogICAgaHJlZj0iaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvbGlieG1sc2hhcnAiPmxpYnhtbCM8L2E+LCBhIHNldCBvZgogICAgQyMgbGlieG1sMiBiaW5kaW5ncy48L2xpPgogIDxsaT5QZXRyIEtvemVsa2EgcHJvdmlkZXMgPGEKICAgIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlieG1sMi1wYXMiPlBhc2NhbCB1bml0cyB0byBnbHVlCiAgICBsaWJ4bWwyPC9hPiB3aXRoIEt5bGl4LCBEZWxwaGkgYW5kIG90aGVyIFBhc2NhbCBjb21waWxlcnMuPC9saT4KICA8bGk+VXdlIEZlY2huZXIgYWxzbyBwcm92aWRlcyA8YQogICAgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9pZG9tMi1wYXMvIj5pZG9tMjwvYT4sIGEgRE9NMgogICAgaW1wbGVtZW50YXRpb24gZm9yIEt5bGl4Mi9ENS9ENiBmcm9tIEJvcmxhbmQuPC9saT4KICA8bGk+V2FpLVN1biAiU3F1aWRzdGVyIiBDaGlhIHByb3ZpZGVzIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnJ1Ynljb2xvci5vcmcvYXJjL3JlZGlzdC8iPmJpbmRpbmdzIGZvciBSdWJ5PC9hPiAgYW5kCiAgICBsaWJ4bWwyIGJpbmRpbmdzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBSdWJ5IHRocm91Z2ggdGhlIDxhCiAgICBocmVmPSJodHRwOi8vbGliZ2RvbWUtcnVieS5iZXJsaW9zLmRlLyI+bGliZ2RvbWUtcnVieTwvYT4gbW9kdWxlCiAgICBtYWludGFpbmVkIGJ5IFRvYmlhcyBQZXRlcnMuPC9saT4KICA8bGk+U3RldmUgQmFsbCBhbmQgY29udHJpYnV0b3JzIG1haW50YWlucyA8YQogICAgaHJlZj0iaHR0cDovL3RjbHhtbC5zb3VyY2Vmb3JnZS5uZXQvIj5saWJ4bWwyIGFuZCBsaWJ4c2x0IGJpbmRpbmdzIGZvcgogICAgVGNsPC9hPi48L2xpPgogIDxsaT5UaGVyZSBpcyBzdXBwb3J0IGZvciBsaWJ4bWwyIGluIHRoZSBET00gbW9kdWxlIG9mIFBIUC48L2xpPgo8L3VsPgoKPHA+VGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNldCBvZiBQeXRob24gYmluZGluZ3MsIHdoaWNoIGFyZSBndWFyYW50ZWVkCnRvIGJlIG1haW50YWluZWQgYXMgcGFydCBvZiB0aGUgbGlicmFyeSBpbiB0aGUgZnV0dXJlLCB0aG91Z2ggdGhlIFB5dGhvbgppbnRlcmZhY2UgaGF2ZSBub3QgeWV0IHJlYWNoZWQgdGhlIG1hdHVyaXR5IG9mIHRoZSBDIEFQSS48L3A+Cgo8cD5UbyBpbnN0YWxsIHRoZSBQeXRob24gYmluZGluZ3MgdGhlcmUgYXJlIDIgb3B0aW9uczo8L3A+Cjx1bD4KICA8bGk+SWYgeW91IHVzZSBhbiBSUE0gYmFzZWQgZGlzdHJpYnV0aW9uLCBzaW1wbHkgaW5zdGFsbCB0aGUgPGEKICAgIGhyZWY9Imh0dHA6Ly9ycG1maW5kLm5ldC9saW51eC9ycG0yaHRtbC9zZWFyY2gucGhwP3F1ZXJ5PWxpYnhtbDItcHl0aG9uIj5saWJ4bWwyLXB5dGhvbgogICAgUlBNPC9hPiAoYW5kIGlmIG5lZWRlZCB0aGUgPGEKICAgIGhyZWY9Imh0dHA6Ly9ycG1maW5kLm5ldC9saW51eC9ycG0yaHRtbC9zZWFyY2gucGhwP3F1ZXJ5PWxpYnhzbHQtcHl0aG9uIj5saWJ4c2x0LXB5dGhvbgogICAgUlBNPC9hPikuPC9saT4KICA8bGk+T3RoZXJ3aXNlIHVzZSB0aGUgPGEgaHJlZj0iZnRwOi8veG1sc29mdC5vcmcvcHl0aG9uLyI+bGlieG1sMi1weXRob24KICAgIG1vZHVsZSBkaXN0cmlidXRpb248L2E+IGNvcnJlc3BvbmRpbmcgdG8geW91ciBpbnN0YWxsZWQgdmVyc2lvbiBvZgogICAgbGlieG1sMiBhbmQgbGlieHNsdC4gTm90ZSB0aGF0IHRvIGluc3RhbGwgaXQgeW91IHdpbGwgbmVlZCBib3RoIGxpYnhtbDIKICAgIGFuZCBsaWJ4c2x0IGluc3RhbGxlZCBhbmQgcnVuICJweXRob24gc2V0dXAucHkgYnVpbGQgaW5zdGFsbCIgaW4gdGhlCiAgICBtb2R1bGUgdHJlZS48L2xpPgo8L3VsPgoKPHA+VGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNldCBvZiBleGFtcGxlcyBhbmQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlCnB5dGhvbiBiaW5kaW5ncyBpbiB0aGUgPGNvZGU+cHl0aG9uL3Rlc3RzPC9jb2RlPiBkaXJlY3RvcnkuIEhlcmUgYXJlIHNvbWUKZXhjZXJwdHMgZnJvbSB0aG9zZSB0ZXN0czo8L3A+Cgo8aDM+dHN0LnB5OjwvaDM+Cgo8cD5UaGlzIGlzIGEgYmFzaWMgdGVzdCBvZiB0aGUgZmlsZSBpbnRlcmZhY2UgYW5kIERPTSBuYXZpZ2F0aW9uOjwvcD4KPHByZT5pbXBvcnQgbGlieG1sMgoKZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoInRzdC54bWwiKQppZiBkb2MubmFtZSAhPSAidHN0LnhtbCI6CiAgICBwcmludCAiZG9jLm5hbWUgZmFpbGVkIgogICAgc3lzLmV4aXQoMSkKcm9vdCA9IGRvYy5jaGlsZHJlbgppZiByb290Lm5hbWUgIT0gImRvYyI6CiAgICBwcmludCAicm9vdC5uYW1lIGZhaWxlZCIKICAgIHN5cy5leGl0KDEpCmNoaWxkID0gcm9vdC5jaGlsZHJlbgppZiBjaGlsZC5uYW1lICE9ICJmb28iOgogICAgcHJpbnQgImNoaWxkLm5hbWUgZmFpbGVkIgogICAgc3lzLmV4aXQoMSkKZG9jLmZyZWVEb2MoKTwvcHJlPgoKPHA+VGhlIFB5dGhvbiBtb2R1bGUgaXMgY2FsbGVkIGxpYnhtbDI7IHBhcnNlRmlsZSBpcyB0aGUgZXF1aXZhbGVudCBvZgp4bWxQYXJzZUZpbGUgKG1vc3Qgb2YgdGhlIGJpbmRpbmdzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgYW5kIHRoZSB4bWwKcHJlZml4IGlzIHJlbW92ZWQgYW5kIHRoZSBjYXNpbmcgY29udmVudGlvbiBhcmUga2VwdCkuIEFsbCBub2RlIHNlZW4gYXQgdGhlCmJpbmRpbmcgbGV2ZWwgc2hhcmUgdGhlIHNhbWUgc3Vic2V0IG9mIGFjY2Vzc29yczo8L3A+Cjx1bD4KICA8bGk+PGNvZGU+bmFtZTwvY29kZT4gOiByZXR1cm5zIHRoZSBub2RlIG5hbWU8L2xpPgogIDxsaT48Y29kZT50eXBlPC9jb2RlPiA6IHJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbm9kZSB0eXBlPC9saT4KICA8bGk+PGNvZGU+Y29udGVudDwvY29kZT4gOiByZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub2RlLCBpdCBpcyBiYXNlZCBvbgogICAgeG1sTm9kZUdldENvbnRlbnQoKSBhbmQgaGVuY2UgaXMgcmVjdXJzaXZlLjwvbGk+CiAgPGxpPjxjb2RlPnBhcmVudDwvY29kZT4gLCA8Y29kZT5jaGlsZHJlbjwvY29kZT4sIDxjb2RlPmxhc3Q8L2NvZGU+LAogICAgPGNvZGU+bmV4dDwvY29kZT4sIDxjb2RlPnByZXY8L2NvZGU+LCA8Y29kZT5kb2M8L2NvZGU+LAogICAgPGNvZGU+cHJvcGVydGllczwvY29kZT46IHBvaW50aW5nIHRvIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgaW4gdGhlIHRyZWUsCiAgICB0aG9zZSBtYXkgcmV0dXJuIE5vbmUgaW4gY2FzZSBubyBzdWNoIGxpbmsgZXhpc3RzLjwvbGk+CjwvdWw+Cgo8cD5BbHNvIG5vdGUgdGhlIG5lZWQgdG8gZXhwbGljaXRseSBkZWFsbG9jYXRlIGRvY3VtZW50cyB3aXRoIGZyZWVEb2MoKSAuClJlZmVyZW5jZSBjb3VudGluZyBmb3IgbGlieG1sMiB0cmVlcyB3b3VsZCBuZWVkIHF1aXRlIGEgbG90IG9mIHdvcmsgdG8KZnVuY3Rpb24gcHJvcGVybHksIGFuZCByYXRoZXIgdGhhbiByaXNrIG1lbW9yeSBsZWFrcyBpZiBub3QgaW1wbGVtZW50ZWQKY29ycmVjdGx5IGl0IHNvdW5kcyBzYWZlciB0byBoYXZlIGFuIGV4cGxpY2l0IGZ1bmN0aW9uIHRvIGZyZWUgYSB0cmVlLiBUaGUKd3JhcHBlciBweXRob24gb2JqZWN0cyBsaWtlIGRvYywgcm9vdCBvciBjaGlsZCBhcmUgdGhlbSBhdXRvbWF0aWNhbGx5IGdhcmJhZ2UKY29sbGVjdGVkLjwvcD4KCjxoMz52YWxpZGF0ZS5weTo8L2gzPgoKPHA+VGhpcyB0ZXN0IGNoZWNrIHRoZSB2YWxpZGF0aW9uIGludGVyZmFjZXMgYW5kIHJlZGlyZWN0aW9uIG9mIGVycm9yCm1lc3NhZ2VzOjwvcD4KPHByZT5pbXBvcnQgbGlieG1sMgoKI2RlYWN0aXZhdGUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgdmFsaWRhdGlvbgpkZWYgbm9lcnIoY3R4LCBzdHIpOgogICAgcGFzcwoKbGlieG1sMi5yZWdpc3RlckVycm9ySGFuZGxlcihub2VyciwgTm9uZSkKCmN0eHQgPSBsaWJ4bWwyLmNyZWF0ZUZpbGVQYXJzZXJDdHh0KCJpbnZhbGlkLnhtbCIpCmN0eHQudmFsaWRhdGUoMSkKY3R4dC5wYXJzZURvY3VtZW50KCkKZG9jID0gY3R4dC5kb2MoKQp2YWxpZCA9IGN0eHQuaXNWYWxpZCgpCmRvYy5mcmVlRG9jKCkKaWYgdmFsaWQgIT0gMDoKICAgIHByaW50ICJ2YWxpZGl0eSBjaGVjayBmYWlsZWQiPC9wcmU+Cgo8cD5UaGUgZmlyc3QgdGhpbmcgdG8gbm90aWNlIGlzIHRoZSBjYWxsIHRvIHJlZ2lzdGVyRXJyb3JIYW5kbGVyKCksIGl0CmRlZmluZXMgYSBuZXcgZXJyb3IgaGFuZGxlciBnbG9iYWwgdG8gdGhlIGxpYnJhcnkuIEl0IGlzIHVzZWQgdG8gYXZvaWQgc2VlaW5nCnRoZSBlcnJvciBtZXNzYWdlcyB3aGVuIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgaW52YWxpZCBkb2N1bWVudC48L3A+Cgo8cD5UaGUgbWFpbiBpbnRlcmVzdCBvZiB0aGF0IHRlc3QgaXMgdGhlIGNyZWF0aW9uIG9mIGEgcGFyc2VyIGNvbnRleHQgd2l0aApjcmVhdGVGaWxlUGFyc2VyQ3R4dCgpIGFuZCBob3cgdGhlIGJlaGF2aW91ciBjYW4gYmUgY2hhbmdlZCBiZWZvcmUgY2FsbGluZwpwYXJzZURvY3VtZW50KCkgLiBTaW1pbGFybHkgdGhlIGluZm9ybWF0aW9ucyByZXN1bHRpbmcgZnJvbSB0aGUgcGFyc2luZyBwaGFzZQphcmUgYWxzbyBhdmFpbGFibGUgdXNpbmcgY29udGV4dCBtZXRob2RzLjwvcD4KCjxwPkNvbnRleHRzIGxpa2Ugbm9kZXMgYXJlIGRlZmluZWQgYXMgY2xhc3MgYW5kIHRoZSBsaWJ4bWwyIHdyYXBwZXJzIG1hcHMgdGhlCkMgZnVuY3Rpb24gaW50ZXJmYWNlcyBpbiB0ZXJtcyBvZiBvYmplY3RzIG1ldGhvZCBhcyBtdWNoIGFzIHBvc3NpYmxlLiBUaGUKYmVzdCB0byBnZXQgYSBjb21wbGV0ZSB2aWV3IG9mIHdoYXQgbWV0aG9kcyBhcmUgc3VwcG9ydGVkIGlzIHRvIGxvb2sgYXQgdGhlCmxpYnhtbDIucHkgbW9kdWxlIGNvbnRhaW5pbmcgYWxsIHRoZSB3cmFwcGVycy48L3A+Cgo8aDM+cHVzaC5weTo8L2gzPgoKPHA+VGhpcyB0ZXN0IHNob3cgaG93IHRvIGFjdGl2YXRlIHRoZSBwdXNoIHBhcnNlciBpbnRlcmZhY2U6PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCgpjdHh0ID0gbGlieG1sMi5jcmVhdGVQdXNoUGFyc2VyKE5vbmUsICImbHQ7Zm9vIiwgNCwgInRlc3QueG1sIikKY3R4dC5wYXJzZUNodW5rKCIvJmd0OyIsIDIsIDEpCmRvYyA9IGN0eHQuZG9jKCkKCmRvYy5mcmVlRG9jKCk8L3ByZT4KCjxwPlRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgd2l0aCBhIHNwZWNpYWwgY2FsbCBiYXNlZCBvbiB0aGUKeG1sQ3JlYXRlUHVzaFBhcnNlcigpIGZyb20gdGhlIEMgbGlicmFyeS4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsClNBWCBjYWxsYmFjayBvYmplY3QsIHRoZW4gdGhlIGluaXRpYWwgc2V0IG9mIGRhdGEsIHRoZSBsZW5ndGggYW5kIHRoZSBuYW1lIG9mCnRoZSByZXNvdXJjZSBpbiBjYXNlIFVSSS1SZWZlcmVuY2VzIG5lZWQgdG8gYmUgY29tcHV0ZWQgYnkgdGhlIHBhcnNlci48L3A+Cgo8cD5UaGVuIHRoZSBkYXRhIGFyZSBwdXNoZWQgdXNpbmcgdGhlIHBhcnNlQ2h1bmsoKSBtZXRob2QsIHRoZSBsYXN0IGNhbGwKc2V0dGluZyB0aGUgdGhpcmQgYXJndW1lbnQgdGVybWluYXRlIHRvIDEuPC9wPgoKPGgzPnB1c2hTQVgucHk6PC9oMz4KCjxwPnRoaXMgdGVzdCBzaG93IHRoZSB1c2Ugb2YgdGhlIGV2ZW50IGJhc2VkIHBhcnNpbmcgaW50ZXJmYWNlcy4gSW4gdGhpcyBjYXNlCnRoZSBwYXJzZXIgZG9lcyBub3QgYnVpbGQgYSBkb2N1bWVudCwgYnV0IHByb3ZpZGVzIGNhbGxiYWNrIGluZm9ybWF0aW9uIGFzCnRoZSBwYXJzZXIgbWFrZXMgcHJvZ3Jlc3NlcyBhbmFseXppbmcgdGhlIGRhdGEgYmVpbmcgcHJvdmlkZWQ6PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCmxvZyA9ICIiCgpjbGFzcyBjYWxsYmFjazoKICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAic3RhcnREb2N1bWVudDoiCgogICAgZGVmIGVuZERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiZW5kRG9jdW1lbnQ6IgoKICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgdGFnLCBhdHRycyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJzdGFydEVsZW1lbnQgJXMgJXM6IiAlICh0YWcsIGF0dHJzKQoKICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIHRhZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJlbmRFbGVtZW50ICVzOiIgJSAodGFnKQoKICAgIGRlZiBjaGFyYWN0ZXJzKHNlbGYsIGRhdGEpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiY2hhcmFjdGVyczogJXM6IiAlIChkYXRhKQoKICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJ3YXJuaW5nOiAlczoiICUgKG1zZykKCiAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKICAgICAgICBnbG9iYWwgbG9nCiAgICAgICAgbG9nID0gbG9nICsgImVycm9yOiAlczoiICUgKG1zZykKCiAgICBkZWYgZmF0YWxFcnJvcihzZWxmLCBtc2cpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiZmF0YWxFcnJvcjogJXM6IiAlIChtc2cpCgpoYW5kbGVyID0gY2FsbGJhY2soKQoKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihoYW5kbGVyLCAiJmx0O2ZvbyIsIDQsICJ0ZXN0LnhtbCIpCmNodW5rID0gIiB1cmw9J3RzdCcmZ3Q7YiIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAwKQpjaHVuayA9ICJhciZsdDsvZm9vJmd0OyIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAxKQoKcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyB7J3VybCc6ICd0c3QnfToiICsgXCAKICAgICAgICAgICAgImNoYXJhY3RlcnM6IGJhcjplbmRFbGVtZW50IGZvbzplbmREb2N1bWVudDoiCmlmIGxvZyAhPSByZWZlcmVuY2U6CiAgICBwcmludCAiRXJyb3IgZ290OiAlcyIgJSBsb2cKICAgIHByaW50ICJFeHBlY3RlZDogJXMiICUgcmVmZXJlbmNlPC9wcmU+Cgo8cD5UaGUga2V5IG9iamVjdCBpbiB0aGF0IHRlc3QgaXMgdGhlIGhhbmRsZXIsIGl0IHByb3ZpZGVzIGEgbnVtYmVyIG9mIGVudHJ5CnBvaW50cyB3aGljaCBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBwYXJzZXIgYXMgaXQgbWFrZXMgcHJvZ3Jlc3NlcyB0byBpbmRpY2F0ZQp0aGUgaW5mb3JtYXRpb24gc2V0IG9idGFpbmVkLiBUaGUgZnVsbCBzZXQgb2YgY2FsbGJhY2sgaXMgbGFyZ2VyIHRoYW4gd2hhdAp0aGUgY2FsbGJhY2sgY2xhc3MgaW4gdGhhdCBzcGVjaWZpYyBleGFtcGxlIGltcGxlbWVudHMgKHNlZSB0aGUgU0FYCmRlZmluaXRpb24gZm9yIGEgY29tcGxldGUgbGlzdCkuIFRoZSB3cmFwcGVyIHdpbGwgb25seSBjYWxsIHRob3NlIHN1cHBsaWVkIGJ5CnRoZSBvYmplY3Qgd2hlbiBhY3RpdmF0ZWQuIFRoZSBzdGFydEVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5hbWVzIG9mIHRoZSBlbGVtZW50CmFuZCBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgYXR0cmlidXRlcyBjYXJyaWVkIGJ5IHRoaXMgZWxlbWVudC48L3A+Cgo8cD5BbHNvIG5vdGUgdGhhdCB0aGUgcmVmZXJlbmNlIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSB0aGUgY2FsbGJhY2sgc2hvd3MgYQpzaW5nbGUgY2hhcmFjdGVyIGNhbGwgZXZlbiB0aG91Z2ggdGhlIHN0cmluZyAiYmFyIiBpcyBwYXNzZWQgdG8gdGhlIHBhcnNlcgpmcm9tIDIgZGlmZmVyZW50IGNhbGwgdG8gcGFyc2VDaHVuaygpPC9wPgoKPGgzPnhwYXRoLnB5OjwvaDM+Cgo8cD5UaGlzIGlzIGEgYmFzaWMgdGVzdCBvZiBYUGF0aCB3cmFwcGVycyBzdXBwb3J0PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCgpkb2MgPSBsaWJ4bWwyLnBhcnNlRmlsZSgidHN0LnhtbCIpCmN0eHQgPSBkb2MueHBhdGhOZXdDb250ZXh0KCkKcmVzID0gY3R4dC54cGF0aEV2YWwoIi8vKiIpCmlmIGxlbihyZXMpICE9IDI6CiAgICBwcmludCAieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHNpemUiCiAgICBzeXMuZXhpdCgxKQppZiByZXNbMF0ubmFtZSAhPSAiZG9jIiBvciByZXNbMV0ubmFtZSAhPSAiZm9vIjoKICAgIHByaW50ICJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUiCiAgICBzeXMuZXhpdCgxKQpkb2MuZnJlZURvYygpCmN0eHQueHBhdGhGcmVlQ29udGV4dCgpPC9wcmU+Cgo8cD5UaGlzIHRlc3QgcGFyc2VzIGEgZmlsZSwgdGhlbiBjcmVhdGUgYW4gWFBhdGggY29udGV4dCB0byBldmFsdWF0ZSBYUGF0aApleHByZXNzaW9uIG9uIGl0LiBUaGUgeHBhdGhFdmFsKCkgbWV0aG9kIGV4ZWN1dGUgYW4gWFBhdGggcXVlcnkgYW5kIHJldHVybnMKdGhlIHJlc3VsdCBtYXBwZWQgaW4gYSBQeXRob24gd2F5LiBTdHJpbmcgYW5kIG51bWJlcnMgYXJlIG5hdGl2ZWx5IGNvbnZlcnRlZCwKYW5kIG5vZGUgc2V0cyBhcmUgcmV0dXJuZWQgYXMgYSB0dXBsZSBvZiBsaWJ4bWwyIFB5dGhvbiBub2RlcyB3cmFwcGVycy4gTGlrZQp0aGUgZG9jdW1lbnQsIHRoZSBYUGF0aCBjb250ZXh0IG5lZWQgdG8gYmUgZnJlZWQgZXhwbGljaXRseSwgYWxzbyBub3QgdGhhdAp0aGUgcmVzdWx0IG9mIHRoZSBYUGF0aCBxdWVyeSBtYXkgcG9pbnQgYmFjayB0byB0aGUgZG9jdW1lbnQgdHJlZSBhbmQgaGVuY2UKdGhlIGRvY3VtZW50IG11c3QgYmUgZnJlZWQgYWZ0ZXIgdGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkgaXMgdXNlZC48L3A+Cgo8aDM+eHBhdGhleHQucHk6PC9oMz4KCjxwPlRoaXMgdGVzdCBzaG93cyBob3cgdG8gZXh0ZW5kIHRoZSBYUGF0aCBlbmdpbmUgd2l0aCBmdW5jdGlvbnMgd3JpdHRlbiBpbgpweXRob246PC9wPgo8cHJlPmltcG9ydCBsaWJ4bWwyCgpkZWYgZm9vKGN0eCwgeCk6CiAgICByZXR1cm4geCArIDEKCmRvYyA9IGxpYnhtbDIucGFyc2VGaWxlKCJ0c3QueG1sIikKY3R4dCA9IGRvYy54cGF0aE5ld0NvbnRleHQoKQpsaWJ4bWwyLnJlZ2lzdGVyWFBhdGhGdW5jdGlvbihjdHh0Ll9vLCAiZm9vIiwgTm9uZSwgZm9vKQpyZXMgPSBjdHh0LnhwYXRoRXZhbCgiZm9vKDEpIikKaWYgcmVzICE9IDI6CiAgICBwcmludCAieHBhdGggZXh0ZW5zaW9uIGZhaWx1cmUiCmRvYy5mcmVlRG9jKCkKY3R4dC54cGF0aEZyZWVDb250ZXh0KCk8L3ByZT4KCjxwPk5vdGUgaG93IHRoZSBleHRlbnNpb24gZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb250ZXh0IChidXQgdGhhdApwYXJ0IGlzIG5vdCB5ZXQgZmluYWxpemVkLCB0aGlzIG1heSBjaGFuZ2Ugc2xpZ2h0bHkgaW4gdGhlIGZ1dHVyZSkuPC9wPgoKPGgzPnRzdHhwYXRoLnB5OjwvaDM+Cgo8cD5UaGlzIHRlc3QgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgb25lIGJ1dCBzaG93cyBob3cgdGhlIGV4dGVuc2lvbgpmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBYUGF0aCBldmFsdWF0aW9uIGNvbnRleHQ6PC9wPgo8cHJlPmRlZiBmb28oY3R4LCB4KToKICAgIGdsb2JhbCBjYWxsZWQKCiAgICAjCiAgICAjIHRlc3QgdGhhdCBhY2Nlc3MgdG8gdGhlIFhQYXRoIGV2YWx1YXRpb24gY29udGV4dHMKICAgICMKICAgIHBjdHh0ID0gbGlieG1sMi54cGF0aFBhcnNlckNvbnRleHQoX29iaj1jdHgpCiAgICBjdHh0ID0gcGN0eHQuY29udGV4dCgpCiAgICBjYWxsZWQgPSBjdHh0LmZ1bmN0aW9uKCkKICAgIHJldHVybiB4ICsgMTwvcHJlPgoKPHA+QWxsIHRoZSBpbnRlcmZhY2VzIGFyb3VuZCB0aGUgWFBhdGggcGFyc2VyKG9yIHJhdGhlciBldmFsdWF0aW9uKSBjb250ZXh0CmFyZSBub3QgZmluYWxpemVkLCBidXQgaXQgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZG8gY29udGV4dHVhbCB3b3JrIGF0IHRoZQpldmFsdWF0aW9uIHBvaW50LjwvcD4KCjxoMz5NZW1vcnkgZGVidWdnaW5nOjwvaDM+Cgo8cD5sYXN0IGJ1dCBub3QgbGVhc3QsIGFsbCB0ZXN0cyBzdGFydHMgd2l0aCB0aGUgZm9sbG93aW5nIHByb2xvZ3VlOjwvcD4KPHByZT4jbWVtb3J5IGRlYnVnIHNwZWNpZmljCmxpYnhtbDIuZGVidWdNZW1vcnkoMSk8L3ByZT4KCjxwPmFuZCBlbmRzIHdpdGggdGhlIGZvbGxvd2luZyBlcGlsb2d1ZTo8L3A+CjxwcmU+I21lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQppZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6CiAgICBwcmludCAiT0siCmVsc2U6CiAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCiAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKTwvcHJlPgoKPHA+VGhvc2UgYWN0aXZhdGUgdGhlIG1lbW9yeSBkZWJ1Z2dpbmcgaW50ZXJmYWNlIG9mIGxpYnhtbDIgd2hlcmUgYWxsCmFsbG9jYXRlZCBibG9jayBpbiB0aGUgbGlicmFyeSBhcmUgdHJhY2tlZC4gVGhlIHByb2xvZ3VlIHRoZW4gY2xlYW5zIHVwIHRoZQpsaWJyYXJ5IHN0YXRlIGFuZCBjaGVja3MgdGhhdCBhbGwgYWxsb2NhdGVkIG1lbW9yeSBoYXMgYmVlbiBmcmVlZC4gSWYgbm90IGl0CmNhbGxzIGR1bXBNZW1vcnkoKSB3aGljaCBzYXZlcyB0aGF0IGxpc3QgaW4gYSA8Y29kZT4ubWVtZHVtcDwvY29kZT4gZmlsZS48L3A+Cgo8aDI+PGEgbmFtZT0iYXJjaGl0ZWN0dXJlIj5saWJ4bWwgYXJjaGl0ZWN0dXJlPC9hPjwvaDI+Cgo8cD5MaWJ4bWwgaXMgbWFkZSBvZiBtdWx0aXBsZSBjb21wb25lbnRzOyBzb21lIG9mIHRoZW0gYXJlIG9wdGlvbmFsLCBhbmQgbW9zdApvZiB0aGUgYmxvY2sgaW50ZXJmYWNlcyBhcmUgcHVibGljLiBUaGUgbWFpbiBjb21wb25lbnRzIGFyZTo8L3A+Cjx1bD4KICA8bGk+YW4gSW5wdXQvT3V0cHV0IGxheWVyPC9saT4KICA8bGk+RlRQIGFuZCBIVFRQIGNsaWVudCBsYXllcnMgKG9wdGlvbmFsKTwvbGk+CiAgPGxpPmFuIEludGVybmF0aW9uYWxpemF0aW9uIGxheWVyIG1hbmFnaW5nIHRoZSBlbmNvZGluZ3Mgc3VwcG9ydDwvbGk+CiAgPGxpPmEgVVJJIG1vZHVsZTwvbGk+CiAgPGxpPnRoZSBYTUwgcGFyc2VyIGFuZCBpdHMgYmFzaWMgU0FYIGludGVyZmFjZTwvbGk+CiAgPGxpPmFuIEhUTUwgcGFyc2VyIHVzaW5nIHRoZSBzYW1lIFNBWCBpbnRlcmZhY2UgKG9wdGlvbmFsKTwvbGk+CiAgPGxpPmEgU0FYIHRyZWUgbW9kdWxlIHRvIGJ1aWxkIGFuIGluLW1lbW9yeSBET00gcmVwcmVzZW50YXRpb248L2xpPgogIDxsaT5hIHRyZWUgbW9kdWxlIHRvIG1hbmlwdWxhdGUgdGhlIERPTSByZXByZXNlbnRhdGlvbjwvbGk+CiAgPGxpPmEgdmFsaWRhdGlvbiBtb2R1bGUgdXNpbmcgdGhlIERPTSByZXByZXNlbnRhdGlvbiAob3B0aW9uYWwpPC9saT4KICA8bGk+YW4gWFBhdGggbW9kdWxlIGZvciBnbG9iYWwgbG9va3VwIGluIGEgRE9NIHJlcHJlc2VudGF0aW9uCiAgKG9wdGlvbmFsKTwvbGk+CiAgPGxpPmEgZGVidWcgbW9kdWxlIChvcHRpb25hbCk8L2xpPgo8L3VsPgoKPHA+R3JhcGhpY2FsbHkgdGhpcyBnaXZlcyB0aGUgZm9sbG93aW5nOjwvcD4KCjxwPjxpbWcgc3JjPSJsaWJ4bWwuZ2lmIiBhbHQ9ImEgZ3JhcGhpY2FsIHZpZXcgb2YgdGhlIHZhcmlvdXMiPjwvcD4KCjxwPjwvcD4KCjxoMj48YSBuYW1lPSJ0cmVlIj5UaGUgdHJlZSBvdXRwdXQ8L2E+PC9oMj4KCjxwPlRoZSBwYXJzZXIgcmV0dXJucyBhIHRyZWUgYnVpbHQgZHVyaW5nIHRoZSBkb2N1bWVudCBhbmFseXNpcy4gVGhlIHZhbHVlCnJldHVybmVkIGlzIGFuIDxzdHJvbmc+eG1sRG9jUHRyPC9zdHJvbmc+IChpLmUuLCBhIHBvaW50ZXIgdG8gYW4KPHN0cm9uZz54bWxEb2M8L3N0cm9uZz4gc3RydWN0dXJlKS4gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gc3VjaAphcyB0aGUgZmlsZSBuYW1lLCB0aGUgZG9jdW1lbnQgdHlwZSwgYW5kIGEgPHN0cm9uZz5jaGlsZHJlbjwvc3Ryb25nPiBwb2ludGVyCndoaWNoIGlzIHRoZSByb290IG9mIHRoZSBkb2N1bWVudCAob3IgbW9yZSBleGFjdGx5IHRoZSBmaXJzdCBjaGlsZCB1bmRlciB0aGUKcm9vdCB3aGljaCBpcyB0aGUgZG9jdW1lbnQpLiBUaGUgdHJlZSBpcyBtYWRlIG9mIDxzdHJvbmc+eG1sTm9kZTwvc3Ryb25nPnMsCmNoYWluZWQgaW4gZG91YmxlLWxpbmtlZCBsaXN0cyBvZiBzaWJsaW5ncyBhbmQgd2l0aCBhIGNoaWxkcmVuJmx0Oy0mZ3Q7cGFyZW50CnJlbGF0aW9uc2hpcC4gQW4geG1sTm9kZSBjYW4gYWxzbyBjYXJyeSBwcm9wZXJ0aWVzIChhIGNoYWluIG9mIHhtbEF0dHIKc3RydWN0dXJlcykuIEFuIGF0dHJpYnV0ZSBtYXkgaGF2ZSBhIHZhbHVlIHdoaWNoIGlzIGEgbGlzdCBvZiBURVhUIG9yCkVOVElUWV9SRUYgbm9kZXMuPC9wPgoKPHA+SGVyZSBpcyBhbiBleGFtcGxlIChlcnJvbmVvdXMgd2l0aCByZXNwZWN0IHRvIHRoZSBYTUwgc3BlYyBzaW5jZSB0aGVyZQpzaG91bGQgYmUgb25seSBvbmUgRUxFTUVOVCB1bmRlciB0aGUgcm9vdCk6PC9wPgoKPHA+PGltZyBzcmM9InN0cnVjdHVyZS5naWYiIGFsdD0iIHN0cnVjdHVyZS5naWYgIj48L3A+Cgo8cD5JbiB0aGUgc291cmNlIHBhY2thZ2UgdGhlcmUgaXMgYSBzbWFsbCBwcm9ncmFtIChub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQpCmNhbGxlZCA8c3Ryb25nPnhtbGxpbnQ8L3N0cm9uZz4gd2hpY2ggcGFyc2VzIFhNTCBmaWxlcyBnaXZlbiBhcyBhcmd1bWVudCBhbmQKcHJpbnRzIHRoZW0gYmFjayBhcyBwYXJzZWQuIFRoaXMgaXMgdXNlZnVsIGZvciBkZXRlY3RpbmcgZXJyb3JzIGJvdGggaW4gWE1MCmNvZGUgYW5kIGluIHRoZSBYTUwgcGFyc2VyIGl0c2VsZi4gSXQgaGFzIGFuIG9wdGlvbiA8c3Ryb25nPi0tZGVidWc8L3N0cm9uZz4Kd2hpY2ggcHJpbnRzIHRoZSBhY3R1YWwgaW4tbWVtb3J5IHN0cnVjdHVyZSBvZiB0aGUgZG9jdW1lbnQ7IGhlcmUgaXMgdGhlCnJlc3VsdCB3aXRoIHRoZSA8YSBocmVmPSIjZXhhbXBsZSI+ZXhhbXBsZTwvYT4gZ2l2ZW4gYmVmb3JlOjwvcD4KPHByZT5ET0NVTUVOVAp2ZXJzaW9uPTEuMApzdGFuZGFsb25lPXRydWUKICBFTEVNRU5UIEVYQU1QTEUKICAgIEFUVFJJQlVURSBwcm9wMQogICAgICBURVhUCiAgICAgIGNvbnRlbnQ9Z25vbWUgaXMgZ3JlYXQKICAgIEFUVFJJQlVURSBwcm9wMgogICAgICBFTlRJVFlfUkVGCiAgICAgIFRFWFQKICAgICAgY29udGVudD0gbGludXggdG9vIAogICAgRUxFTUVOVCBoZWFkCiAgICAgIEVMRU1FTlQgdGl0bGUKICAgICAgICBURVhUCiAgICAgICAgY29udGVudD1XZWxjb21lIHRvIEdub21lCiAgICBFTEVNRU5UIGNoYXB0ZXIKICAgICAgRUxFTUVOVCB0aXRsZQogICAgICAgIFRFWFQKICAgICAgICBjb250ZW50PVRoZSBMaW51eCBhZHZlbnR1cmUKICAgICAgRUxFTUVOVCBwCiAgICAgICAgVEVYVAogICAgICAgIGNvbnRlbnQ9YmxhIGJsYSBibGEgLi4uCiAgICAgIEVMRU1FTlQgaW1hZ2UKICAgICAgICBBVFRSSUJVVEUgaHJlZgogICAgICAgICAgVEVYVAogICAgICAgICAgY29udGVudD1saW51cy5naWYKICAgICAgRUxFTUVOVCBwCiAgICAgICAgVEVYVAogICAgICAgIGNvbnRlbnQ9Li4uPC9wcmU+Cgo8cD5UaGlzIHNob3VsZCBiZSB1c2VmdWwgZm9yIGxlYXJuaW5nIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBtb2RlbC48L3A+Cgo8aDI+PGEgbmFtZT0iaW50ZXJmYWNlIj5UaGUgU0FYIGludGVyZmFjZTwvYT48L2gyPgoKPHA+U29tZXRpbWVzIHRoZSBET00gdHJlZSBvdXRwdXQgaXMganVzdCB0b28gbGFyZ2UgdG8gZml0IHJlYXNvbmFibHkgaW50bwptZW1vcnkuIEluIHRoYXQgY2FzZSAoYW5kIGlmIHlvdSBkb24ndCBleHBlY3QgdG8gc2F2ZSBiYWNrIHRoZSBYTUwgZG9jdW1lbnQKbG9hZGVkIHVzaW5nIGxpYnhtbCksIGl0J3MgYmV0dGVyIHRvIHVzZSB0aGUgU0FYIGludGVyZmFjZSBvZiBsaWJ4bWwuIFNBWCBpcwphIDxzdHJvbmc+Y2FsbGJhY2stYmFzZWQgaW50ZXJmYWNlPC9zdHJvbmc+IHRvIHRoZSBwYXJzZXIuIEJlZm9yZSBwYXJzaW5nLAp0aGUgYXBwbGljYXRpb24gbGF5ZXIgcmVnaXN0ZXJzIGEgY3VzdG9taXplZCBzZXQgb2YgY2FsbGJhY2tzIHdoaWNoIGFyZQpjYWxsZWQgYnkgdGhlIGxpYnJhcnkgYXMgaXQgcHJvZ3Jlc3NlcyB0aHJvdWdoIHRoZSBYTUwgaW5wdXQuPC9wPgoKPHA+VG8gZ2V0IG1vcmUgZGV0YWlsZWQgc3RlcC1ieS1zdGVwIGd1aWRhbmNlIG9uIHVzaW5nIHRoZSBTQVggaW50ZXJmYWNlIG9mCmxpYnhtbCwgc2VlIHRoZSA8YQpocmVmPSJodHRwOi8vd3d3LmRhYS5jb20uYXUvfmphbWVzL2dub21lL3htbC1zYXgveG1sLXNheC5odG1sIj5uaWNlCmRvY3VtZW50YXRpb248L2E+LndyaXR0ZW4gYnkgPGEgaHJlZj0ibWFpbHRvOmphbWVzQGRhYS5jb20uYXUiPkphbWVzCkhlbnN0cmlkZ2U8L2E+LjwvcD4KCjxwPllvdSBjYW4gZGVidWcgdGhlIFNBWCBiZWhhdmlvdXIgYnkgdXNpbmcgdGhlIDxzdHJvbmc+dGVzdFNBWDwvc3Ryb25nPgpwcm9ncmFtIGxvY2F0ZWQgaW4gdGhlIGdub21lLXhtbCBtb2R1bGUgKGl0J3MgdXN1YWxseSBub3Qgc2hpcHBlZCBpbiB0aGUKYmluYXJ5IHBhY2thZ2VzIG9mIGxpYnhtbCwgYnV0IHlvdSBjYW4gZmluZCBpdCBpbiB0aGUgdGFyIHNvdXJjZQpkaXN0cmlidXRpb24pLiBIZXJlIGlzIHRoZSBzZXF1ZW5jZSBvZiBjYWxsYmFja3MgdGhhdCB3b3VsZCBiZSByZXBvcnRlZCBieQp0ZXN0U0FYIHdoZW4gcGFyc2luZyB0aGUgZXhhbXBsZSBYTUwgZG9jdW1lbnQgc2hvd24gZWFybGllcjo8L3A+CjxwcmU+U0FYLnNldERvY3VtZW50TG9jYXRvcigpClNBWC5zdGFydERvY3VtZW50KCkKU0FYLmdldEVudGl0eShhbXApClNBWC5zdGFydEVsZW1lbnQoRVhBTVBMRSwgcHJvcDE9J2dub21lIGlzIGdyZWF0JywgcHJvcDI9JyZhbXA7YW1wOyBsaW51eCB0b28nKQpTQVguY2hhcmFjdGVycyggICAsIDMpClNBWC5zdGFydEVsZW1lbnQoaGVhZCkKU0FYLmNoYXJhY3RlcnMoICAgICwgNCkKU0FYLnN0YXJ0RWxlbWVudCh0aXRsZSkKU0FYLmNoYXJhY3RlcnMoV2VsY29tZSB0byBHbm9tZSwgMTYpClNBWC5lbmRFbGVtZW50KHRpdGxlKQpTQVguY2hhcmFjdGVycyggICAsIDMpClNBWC5lbmRFbGVtZW50KGhlYWQpClNBWC5jaGFyYWN0ZXJzKCAgICwgMykKU0FYLnN0YXJ0RWxlbWVudChjaGFwdGVyKQpTQVguY2hhcmFjdGVycyggICAgLCA0KQpTQVguc3RhcnRFbGVtZW50KHRpdGxlKQpTQVguY2hhcmFjdGVycyhUaGUgTGludXggYWR2ZW50dXJlLCAxOSkKU0FYLmVuZEVsZW1lbnQodGl0bGUpClNBWC5jaGFyYWN0ZXJzKCAgICAsIDQpClNBWC5zdGFydEVsZW1lbnQocCkKU0FYLmNoYXJhY3RlcnMoYmxhIGJsYSBibGEgLi4uLCAxNSkKU0FYLmVuZEVsZW1lbnQocCkKU0FYLmNoYXJhY3RlcnMoICAgICwgNCkKU0FYLnN0YXJ0RWxlbWVudChpbWFnZSwgaHJlZj0nbGludXMuZ2lmJykKU0FYLmVuZEVsZW1lbnQoaW1hZ2UpClNBWC5jaGFyYWN0ZXJzKCAgICAsIDQpClNBWC5zdGFydEVsZW1lbnQocCkKU0FYLmNoYXJhY3RlcnMoLi4uLCAzKQpTQVguZW5kRWxlbWVudChwKQpTQVguY2hhcmFjdGVycyggICAsIDMpClNBWC5lbmRFbGVtZW50KGNoYXB0ZXIpClNBWC5jaGFyYWN0ZXJzKCAsIDEpClNBWC5lbmRFbGVtZW50KEVYQU1QTEUpClNBWC5lbmREb2N1bWVudCgpPC9wcmU+Cgo8cD5Nb3N0IG9mIHRoZSBvdGhlciBpbnRlcmZhY2VzIG9mIGxpYnhtbCBhcmUgYmFzZWQgb24gdGhlIERPTSB0cmVlLWJ1aWxkaW5nCmZhY2lsaXR5LCBzbyBuZWFybHkgZXZlcnl0aGluZyB1cCB0byB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQgcHJlc3VwcG9zZXMgdGhlCnVzZSBvZiB0aGUgc3RhbmRhcmQgRE9NIHRyZWUgYnVpbGQuIE5vdGUgdGhhdCB0aGUgRE9NIHRyZWUgaXRzZWxmIGlzIGJ1aWx0IGJ5CmEgc2V0IG9mIHJlZ2lzdGVyZWQgZGVmYXVsdCBjYWxsYmFja3MsIHdpdGhvdXQgaW50ZXJuYWwgc3BlY2lmaWMKaW50ZXJmYWNlLjwvcD4KCjxoMj48YSBuYW1lPSJWYWxpZGF0aW9uIj5WYWxpZGF0aW9uICZhbXA7IERURHM8L2E+PC9oMj4KCjxwPlRhYmxlIG9mIENvbnRlbnQ6PC9wPgo8b2w+CiAgPGxpPjxhIGhyZWY9IiNHZW5lcmFsNSI+R2VuZXJhbCBvdmVydmlldzwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjZGVmaW5pdGlvbiI+VGhlIGRlZmluaXRpb248L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1NpbXBsZSI+U2ltcGxlIHJ1bGVzPC9hPgogICAgPG9sPgogICAgICA8bGk+PGEgaHJlZj0iI3JlZmVyZW5jZSI+SG93IHRvIHJlZmVyZW5jZSBhIERURCBmcm9tIGEgZG9jdW1lbnQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNEZWNsYXJpbmciPkRlY2xhcmluZyBlbGVtZW50czwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI0RlY2xhcmluZzEiPkRlY2xhcmluZyBhdHRyaWJ1dGVzPC9hPjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGxpPjxhIGhyZWY9IiNTb21lIj5Tb21lIGV4YW1wbGVzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiN2YWxpZGF0ZSI+SG93IHRvIHZhbGlkYXRlPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNPdGhlciI+T3RoZXIgcmVzb3VyY2VzPC9hPjwvbGk+Cjwvb2w+Cgo8aDM+PGEgbmFtZT0iR2VuZXJhbDUiPkdlbmVyYWwgb3ZlcnZpZXc8L2E+PC9oMz4KCjxwPldlbGwgd2hhdCBpcyB2YWxpZGF0aW9uIGFuZCB3aGF0IGlzIGEgRFREID88L3A+Cgo8cD5EVEQgaXMgdGhlIGFjcm9ueW0gZm9yIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4gVGhpcyBpcyBhIGRlc2NyaXB0aW9uIG9mCnRoZSBjb250ZW50IGZvciBhIGZhbWlseSBvZiBYTUwgZmlsZXMuIFRoaXMgaXMgcGFydCBvZiB0aGUgWE1MIDEuMApzcGVjaWZpY2F0aW9uLCBhbmQgYWxsb3dzIG9uZSB0byBkZXNjcmliZSBhbmQgdmVyaWZ5IHRoYXQgYSBnaXZlbiBkb2N1bWVudAppbnN0YW5jZSBjb25mb3JtcyB0byB0aGUgc2V0IG9mIHJ1bGVzIGRldGFpbGluZyBpdHMgc3RydWN0dXJlIGFuZCBjb250ZW50LjwvcD4KCjxwPlZhbGlkYXRpb24gaXMgdGhlIHByb2Nlc3Mgb2YgY2hlY2tpbmcgYSBkb2N1bWVudCBhZ2FpbnN0IGEgRFREIChtb3JlCmdlbmVyYWxseSBhZ2FpbnN0IGEgc2V0IG9mIGNvbnN0cnVjdGlvbiBydWxlcykuPC9wPgoKPHA+VGhlIHZhbGlkYXRpb24gcHJvY2VzcyBhbmQgYnVpbGRpbmcgRFREcyBhcmUgdGhlIHR3byBtb3N0IGRpZmZpY3VsdCBwYXJ0cwpvZiB0aGUgWE1MIGxpZmUgY3ljbGUuIEJyaWVmbHkgYSBEVEQgZGVmaW5lcyBhbGwgdGhlIHBvc3NpYmxlIGVsZW1lbnRzIHRvIGJlCmZvdW5kIHdpdGhpbiB5b3VyIGRvY3VtZW50LCB3aGF0IGlzIHRoZSBmb3JtYWwgc2hhcGUgb2YgeW91ciBkb2N1bWVudCB0cmVlCihieSBkZWZpbmluZyB0aGUgYWxsb3dlZCBjb250ZW50IG9mIGFuIGVsZW1lbnQ7IGVpdGhlciB0ZXh0LCBhIHJlZ3VsYXIKZXhwcmVzc2lvbiBmb3IgdGhlIGFsbG93ZWQgbGlzdCBvZiBjaGlsZHJlbiwgb3IgbWl4ZWQgY29udGVudCBpLmUuIGJvdGggdGV4dAphbmQgY2hpbGRyZW4pLiBUaGUgRFREIGFsc28gZGVmaW5lcyB0aGUgdmFsaWQgYXR0cmlidXRlcyBmb3IgYWxsIGVsZW1lbnRzIGFuZAp0aGUgdHlwZXMgb2YgdGhvc2UgYXR0cmlidXRlcy48L3A+Cgo8aDM+PGEgbmFtZT0iZGVmaW5pdGlvbjEiPlRoZSBkZWZpbml0aW9uPC9hPjwvaDM+Cgo8cD5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCI+VzNDIFhNTCBSZWNvbW1lbmRhdGlvbjwvYT4gKDxhCmhyZWY9Imh0dHA6Ly93d3cueG1sLmNvbS9heG1sL2F4bWwuaHRtbCI+VGltIEJyYXkncyBhbm5vdGF0ZWQgdmVyc2lvbiBvZgpSZXYxPC9hPik6PC9wPgo8dWw+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjZWxlbWRlY2xzIj5EZWNsYXJpbmcKICBlbGVtZW50czwvYT48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI2F0dGRlY2xzIj5EZWNsYXJpbmcKICBhdHRyaWJ1dGVzPC9hPjwvbGk+CjwvdWw+Cgo8cD4odW5mb3J0dW5hdGVseSkgYWxsIHRoaXMgaXMgaW5oZXJpdGVkIGZyb20gdGhlIFNHTUwgd29ybGQsIHRoZSBzeW50YXggaXMKYW5jaWVudC4uLjwvcD4KCjxoMz48YSBuYW1lPSJTaW1wbGUxIj5TaW1wbGUgcnVsZXM8L2E+PC9oMz4KCjxwPldyaXRpbmcgRFREcyBjYW4gYmUgZG9uZSBpbiBtYW55IHdheXMuIFRoZSBydWxlcyB0byBidWlsZCB0aGVtIGlmIHlvdSBuZWVkCnNvbWV0aGluZyBwZXJtYW5lbnQgb3Igc29tZXRoaW5nIHdoaWNoIGNhbiBldm9sdmUgb3ZlciB0aW1lIGNhbiBiZSByYWRpY2FsbHkKZGlmZmVyZW50LiBSZWFsbHkgY29tcGxleCBEVERzIGxpa2UgRG9jQm9vayBvbmVzIGFyZSBmbGV4aWJsZSBidXQgcXVpdGUKaGFyZGVyIHRvIGRlc2lnbi4gSSB3aWxsIGp1c3QgZm9jdXMgb24gRFREcyBmb3IgYSBmb3JtYXRzIHdpdGggYSBmaXhlZCBzaW1wbGUKc3RydWN0dXJlLiBJdCBpcyBqdXN0IGEgc2V0IG9mIGJhc2ljIHJ1bGVzLCBhbmQgZGVmaW5pdGVseSBub3QgZXhoYXVzdGl2ZSBub3IKdXNhYmxlIGZvciBjb21wbGV4IERURCBkZXNpZ24uPC9wPgoKPGg0PjxhIG5hbWU9InJlZmVyZW5jZTEiPkhvdyB0byByZWZlcmVuY2UgYSBEVEQgZnJvbSBhIGRvY3VtZW50PC9hPjo8L2g0PgoKPHA+QXNzdW1pbmcgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBkb2N1bWVudCBpcyA8Y29kZT5zcGVjPC9jb2RlPiBhbmQgdGhlIGR0ZAppcyBwbGFjZWQgaW4gdGhlIGZpbGUgPGNvZGU+bXlkdGQ8L2NvZGU+IGluIHRoZSBzdWJkaXJlY3RvcnkKPGNvZGU+ZHRkczwvY29kZT4gb2YgdGhlIGRpcmVjdG9yeSBmcm9tIHdoZXJlIHRoZSBkb2N1bWVudCB3ZXJlIGxvYWRlZDo8L3A+Cgo8cD48Y29kZT4mbHQ7IURPQ1RZUEUgc3BlYyBTWVNURU0gImR0ZHMvbXlkdGQiJmd0OzwvY29kZT48L3A+Cgo8cD5Ob3Rlczo8L3A+Cjx1bD4KICA8bGk+VGhlIHN5c3RlbSBzdHJpbmcgaXMgYWN0dWFsbHkgYW4gVVJJLVJlZmVyZW5jZSAoYXMgZGVmaW5lZCBpbiA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM5Ni50eHQiPlJGQyAyMzk2PC9hPikgc28geW91IGNhbiB1c2UgYQogICAgZnVsbCBVUkwgc3RyaW5nIGluZGljYXRpbmcgdGhlIGxvY2F0aW9uIG9mIHlvdXIgRFREIG9uIHRoZSBXZWIuIFRoaXMgaXMgYQogICAgcmVhbGx5IGdvb2QgdGhpbmcgdG8gZG8gaWYgeW91IHdhbnQgb3RoZXJzIHRvIHZhbGlkYXRlIHlvdXIgZG9jdW1lbnQuPC9saT4KICA8bGk+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhc3NvY2lhdGUgYSA8Y29kZT5QVUJMSUM8L2NvZGU+IGlkZW50aWZpZXIgKGEKICAgIG1hZ2ljIHN0cmluZykgc28gdGhhdCB0aGUgRFREIGlzIGxvb2tlZCB1cCBpbiBjYXRhbG9ncyBvbiB0aGUgY2xpZW50IHNpZGUKICAgIHdpdGhvdXQgaGF2aW5nIHRvIGxvY2F0ZSBpdCBvbiB0aGUgd2ViLjwvbGk+CiAgPGxpPkEgRFREIGNvbnRhaW5zIGEgc2V0IG9mIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMsIGJ1dCB0aGV5CiAgICBkb24ndCBkZWZpbmUgd2hhdCB0aGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlLiBUaGlzIGlzIGV4cGxpY2l0bHkKICAgIHRvbGQgdG8gdGhlIHBhcnNlci92YWxpZGF0b3IgYXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlCiAgICA8Y29kZT5ET0NUWVBFPC9jb2RlPiBkZWNsYXJhdGlvbi48L2xpPgo8L3VsPgoKPGg0PjxhIG5hbWU9IkRlY2xhcmluZzIiPkRlY2xhcmluZyBlbGVtZW50czwvYT46PC9oND4KCjxwPlRoZSBmb2xsb3dpbmcgZGVjbGFyZXMgYW4gZWxlbWVudCA8Y29kZT5zcGVjPC9jb2RlPjo8L3A+Cgo8cD48Y29kZT4mbHQ7IUVMRU1FTlQgc3BlYyAoZnJvbnQsIGJvZHksIGJhY2s/KSZndDs8L2NvZGU+PC9wPgoKPHA+SXQgYWxzbyBleHByZXNzZXMgdGhhdCB0aGUgc3BlYyBlbGVtZW50IGNvbnRhaW5zIG9uZSA8Y29kZT5mcm9udDwvY29kZT4sCm9uZSA8Y29kZT5ib2R5PC9jb2RlPiBhbmQgb25lIG9wdGlvbmFsIDxjb2RlPmJhY2s8L2NvZGU+IGNoaWxkcmVuIGVsZW1lbnRzIGluCnRoaXMgb3JkZXIuIFRoZSBkZWNsYXJhdGlvbiBvZiBvbmUgZWxlbWVudCBvZiB0aGUgc3RydWN0dXJlIGFuZCBpdHMgY29udGVudAphcmUgZG9uZSBpbiBhIHNpbmdsZSBkZWNsYXJhdGlvbi4gU2ltaWxhcmx5IHRoZSBmb2xsb3dpbmcgZGVjbGFyZXMKPGNvZGU+ZGl2MTwvY29kZT4gZWxlbWVudHM6PC9wPgoKPHA+PGNvZGU+Jmx0OyFFTEVNRU5UIGRpdjEgKGhlYWQsIChwIHwgbGlzdCB8IG5vdGUpKiwgZGl2Mj8pJmd0OzwvY29kZT48L3A+Cgo8cD53aGljaCBtZWFucyBkaXYxIGNvbnRhaW5zIG9uZSA8Y29kZT5oZWFkPC9jb2RlPiB0aGVuIGEgc2VyaWVzIG9mIG9wdGlvbmFsCjxjb2RlPnA8L2NvZGU+LCA8Y29kZT5saXN0PC9jb2RlPnMgYW5kIDxjb2RlPm5vdGU8L2NvZGU+cyBhbmQgdGhlbiBhbgpvcHRpb25hbCA8Y29kZT5kaXYyPC9jb2RlPi4gQW5kIGxhc3QgYnV0IG5vdCBsZWFzdCBhbiBlbGVtZW50IGNhbiBjb250YWluCnRleHQ6PC9wPgoKPHA+PGNvZGU+Jmx0OyFFTEVNRU5UIGIgKCNQQ0RBVEEpJmd0OzwvY29kZT48L3A+Cgo8cD48Y29kZT5iPC9jb2RlPiBjb250YWlucyB0ZXh0IG9yIGJlaW5nIG9mIG1peGVkIGNvbnRlbnQgKHRleHQgYW5kIGVsZW1lbnRzCmluIG5vIHBhcnRpY3VsYXIgb3JkZXIpOjwvcD4KCjxwPjxjb2RlPiZsdDshRUxFTUVOVCBwICgjUENEQVRBfGF8dWx8YnxpfGVtKSomZ3Q7PC9jb2RlPjwvcD4KCjxwPjxjb2RlPnAgPC9jb2RlPmNhbiBjb250YWluIHRleHQgb3IgPGNvZGU+YTwvY29kZT4sIDxjb2RlPnVsPC9jb2RlPiwKPGNvZGU+YjwvY29kZT4sIDxjb2RlPmkgPC9jb2RlPm9yIDxjb2RlPmVtPC9jb2RlPiBlbGVtZW50cyBpbiBubyBwYXJ0aWN1bGFyCm9yZGVyLjwvcD4KCjxoND48YSBuYW1lPSJEZWNsYXJpbmcxIj5EZWNsYXJpbmcgYXR0cmlidXRlczwvYT46PC9oND4KCjxwPkFnYWluIHRoZSBhdHRyaWJ1dGVzIGRlY2xhcmF0aW9uIGluY2x1ZGVzIHRoZWlyIGNvbnRlbnQgZGVmaW5pdGlvbjo8L3A+Cgo8cD48Y29kZT4mbHQ7IUFUVExJU1QgdGVybWRlZiBuYW1lIENEQVRBICNJTVBMSUVEJmd0OzwvY29kZT48L3A+Cgo8cD5tZWFucyB0aGF0IHRoZSBlbGVtZW50IDxjb2RlPnRlcm1kZWY8L2NvZGU+IGNhbiBoYXZlIGEgPGNvZGU+bmFtZTwvY29kZT4KYXR0cmlidXRlIGNvbnRhaW5pbmcgdGV4dCAoPGNvZGU+Q0RBVEE8L2NvZGU+KSBhbmQgd2hpY2ggaXMgb3B0aW9uYWwKKDxjb2RlPiNJTVBMSUVEPC9jb2RlPikuIFRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGFsc28gYmUgZGVmaW5lZCB3aXRoaW4gYQpzZXQ6PC9wPgoKPHA+PGNvZGU+Jmx0OyFBVFRMSVNUIGxpc3QgdHlwZSAoYnVsbGV0c3xvcmRlcmVkfGdsb3NzYXJ5KQoib3JkZXJlZCImZ3Q7PC9jb2RlPjwvcD4KCjxwPm1lYW5zIDxjb2RlPmxpc3Q8L2NvZGU+IGVsZW1lbnQgaGF2ZSBhIDxjb2RlPnR5cGU8L2NvZGU+IGF0dHJpYnV0ZSB3aXRoIDMKYWxsb3dlZCB2YWx1ZXMgImJ1bGxldHMiLCAib3JkZXJlZCIgb3IgImdsb3NzYXJ5IiBhbmQgd2hpY2ggZGVmYXVsdCB0bwoib3JkZXJlZCIgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQuPC9wPgoKPHA+VGhlIGNvbnRlbnQgdHlwZSBvZiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHRleHQgKDxjb2RlPkNEQVRBPC9jb2RlPiksCmFuY2hvci9yZWZlcmVuY2UvcmVmZXJlbmNlcwooPGNvZGU+SUQ8L2NvZGU+Lzxjb2RlPklEUkVGPC9jb2RlPi88Y29kZT5JRFJFRlM8L2NvZGU+KSwgZW50aXR5KGllcykKKDxjb2RlPkVOVElUWTwvY29kZT4vPGNvZGU+RU5USVRJRVM8L2NvZGU+KSBvciBuYW1lKHMpCig8Y29kZT5OTVRPS0VOPC9jb2RlPi88Y29kZT5OTVRPS0VOUzwvY29kZT4pLiBUaGUgZm9sbG93aW5nIGRlZmluZXMgdGhhdCBhCjxjb2RlPmNoYXB0ZXI8L2NvZGU+IGVsZW1lbnQgY2FuIGhhdmUgYW4gb3B0aW9uYWwgPGNvZGU+aWQ8L2NvZGU+IGF0dHJpYnV0ZQpvZiB0eXBlIDxjb2RlPklEPC9jb2RlPiwgdXNhYmxlIGZvciByZWZlcmVuY2UgZnJvbSBhdHRyaWJ1dGUgb2YgdHlwZQpJRFJFRjo8L3A+Cgo8cD48Y29kZT4mbHQ7IUFUVExJU1QgY2hhcHRlciBpZCBJRCAjSU1QTElFRCZndDs8L2NvZGU+PC9wPgoKPHA+VGhlIGxhc3QgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGRlZmluaXRpb24gY2FuIGJlIDxjb2RlPiNSRVFVSVJFRAo8L2NvZGU+bWVhbmluZyB0aGF0IHRoZSBhdHRyaWJ1dGUgaGFzIHRvIGJlIGdpdmVuLCA8Y29kZT4jSU1QTElFRDwvY29kZT4KbWVhbmluZyB0aGF0IGl0IGlzIG9wdGlvbmFsLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSAocG9zc2libHkgcHJlZml4ZWQgYnkKPGNvZGU+I0ZJWEVEPC9jb2RlPiBpZiBpdCBpcyB0aGUgb25seSBhbGxvd2VkKS48L3A+Cgo8cD5Ob3Rlczo8L3A+Cjx1bD4KICA8bGk+VXN1YWxseSB0aGUgYXR0cmlidXRlcyBwZXJ0YWluaW5nIHRvIGEgZ2l2ZW4gZWxlbWVudCBhcmUgZGVjbGFyZWQgaW4gYQogICAgc2luZ2xlIGV4cHJlc3Npb24sIGJ1dCBpdCBpcyBqdXN0IGEgY29udmVudGlvbiBhZG9wdGVkIGJ5IGEgbG90IG9mIERURAogICAgd3JpdGVyczoKICAgIDxwcmU+Jmx0OyFBVFRMSVNUIHRlcm1kZWYKICAgICAgICAgIGlkICAgICAgSUQgICAgICAjUkVRVUlSRUQKICAgICAgICAgIG5hbWUgICAgQ0RBVEEgICAjSU1QTElFRCZndDs8L3ByZT4KICAgIDxwPlRoZSBwcmV2aW91cyBjb25zdHJ1Y3QgZGVmaW5lcyBib3RoIDxjb2RlPmlkPC9jb2RlPiBhbmQKICAgIDxjb2RlPm5hbWU8L2NvZGU+IGF0dHJpYnV0ZXMgZm9yIHRoZSBlbGVtZW50IDxjb2RlPnRlcm1kZWY8L2NvZGU+LjwvcD4KICA8L2xpPgo8L3VsPgoKPGgzPjxhIG5hbWU9IlNvbWUxIj5Tb21lIGV4YW1wbGVzPC9hPjwvaDM+Cgo8cD5UaGUgZGlyZWN0b3J5IDxjb2RlPnRlc3QvdmFsaWQvZHRkcy88L2NvZGU+IGluIHRoZSBsaWJ4bWwgZGlzdHJpYnV0aW9uCmNvbnRhaW5zIHNvbWUgY29tcGxleCBEVEQgZXhhbXBsZXMuIFRoZSBleGFtcGxlIGluIHRoZSBmaWxlCjxjb2RlPnRlc3QvdmFsaWQvZGlhLnhtbDwvY29kZT4gc2hvd3MgYW4gWE1MIGZpbGUgd2hlcmUgdGhlIHNpbXBsZSBEVEQgaXMKZGlyZWN0bHkgaW5jbHVkZWQgd2l0aGluIHRoZSBkb2N1bWVudC48L3A+Cgo8aDM+PGEgbmFtZT0idmFsaWRhdGUxIj5Ib3cgdG8gdmFsaWRhdGU8L2E+PC9oMz4KCjxwPlRoZSBzaW1wbGVzdCB3YXkgaXMgdG8gdXNlIHRoZSB4bWxsaW50IHByb2dyYW0gaW5jbHVkZWQgd2l0aCBsaWJ4bWwuIFRoZQo8Y29kZT4tLXZhbGlkPC9jb2RlPiBvcHRpb24gdHVybnMtb24gdmFsaWRhdGlvbiBvZiB0aGUgZmlsZXMgZ2l2ZW4gYXMgaW5wdXQuCkZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgdmFsaWRhdGVzIGEgY29weSBvZiB0aGUgZmlyc3QgcmV2aXNpb24gb2YgdGhlIFhNTAoxLjAgc3BlY2lmaWNhdGlvbjo8L3A+Cgo8cD48Y29kZT54bWxsaW50IC0tdmFsaWQgLS1ub291dCB0ZXN0L3ZhbGlkL1JFQy14bWwtMTk5ODAyMTAueG1sPC9jb2RlPjwvcD4KCjxwPnRoZSAtLSBub291dCBpcyB1c2VkIHRvIGRpc2FibGUgb3V0cHV0IG9mIHRoZSByZXN1bHRpbmcgdHJlZS48L3A+Cgo8cD5UaGUgPGNvZGU+LS1kdGR2YWxpZCBkdGQ8L2NvZGU+IGFsbG93cyB2YWxpZGF0aW9uIG9mIHRoZSBkb2N1bWVudChzKQphZ2FpbnN0IGEgZ2l2ZW4gRFRELjwvcD4KCjxwPkxpYnhtbCBleHBvcnRzIGFuIEFQSSB0byBoYW5kbGUgRFREcyBhbmQgdmFsaWRhdGlvbiwgY2hlY2sgdGhlIDxhCmhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC12YWxpZC5odG1sIj5hc3NvY2lhdGVkCmRlc2NyaXB0aW9uPC9hPi48L3A+Cgo8aDM+PGEgbmFtZT0iT3RoZXIxIj5PdGhlciByZXNvdXJjZXM8L2E+PC9oMz4KCjxwPkRURHMgYXJlIGFzIG9sZCBhcyBTR01MLiBTbyB0aGVyZSBtYXkgYmUgYSBudW1iZXIgb2YgZXhhbXBsZXMgb24tbGluZSwgSQp3aWxsIGp1c3QgbGlzdCBvbmUgZm9yIG5vdywgb3RoZXJzIHBvaW50ZXJzIHdlbGNvbWU6PC9wPgo8dWw+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cueG1sMTAxLmNvbTo4MDgxL2R0ZC8iPlhNTC0xMDEgRFREPC9hPjwvbGk+CjwvdWw+Cgo8cD5JIHN1Z2dlc3QgbG9va2luZyBhdCB0aGUgZXhhbXBsZXMgZm91bmQgdW5kZXIgdGVzdC92YWxpZC9kdGQgYW5kIGFueSBvZgp0aGUgbGFyZ2UgbnVtYmVyIG9mIGJvb2tzIGF2YWlsYWJsZSBvbiBYTUwuIFRoZSBkaWEgZXhhbXBsZSBpbiB0ZXN0L3ZhbGlkCnNob3VsZCBiZSBib3RoIHNpbXBsZSBhbmQgY29tcGxldGUgZW5vdWdoIHRvIGFsbG93IHlvdSB0byBidWlsZCB5b3VyIG93bi48L3A+Cgo8cD48L3A+Cgo8aDI+PGEgbmFtZT0iTWVtb3J5Ij5NZW1vcnkgTWFuYWdlbWVudDwvYT48L2gyPgoKPHA+VGFibGUgb2YgQ29udGVudDo8L3A+CjxvbD4KICA8bGk+PGEgaHJlZj0iI0dlbmVyYWwzIj5HZW5lcmFsIG92ZXJ2aWV3PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNzZXR0aW5nIj5TZXR0aW5nIGxpYnhtbCBzZXQgb2YgbWVtb3J5IHJvdXRpbmVzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNjbGVhbnVwIj5DbGVhbmluZyB1cCBhZnRlciBwYXJzaW5nPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNEZWJ1Z2dpbmciPkRlYnVnZ2luZyByb3V0aW5lczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjR2VuZXJhbDQiPkdlbmVyYWwgbWVtb3J5IHJlcXVpcmVtZW50czwvYT48L2xpPgo8L29sPgoKPGgzPjxhIG5hbWU9IkdlbmVyYWwzIj5HZW5lcmFsIG92ZXJ2aWV3PC9hPjwvaDM+Cgo8cD5UaGUgbW9kdWxlIDxjb2RlPjxhCmhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC14bWxtZW1vcnkuaHRtbCI+eG1sbWVtb3J5Lmg8L2E+PC9jb2RlPgpwcm92aWRlcyB0aGUgaW50ZXJmYWNlcyB0byB0aGUgbGlieG1sIG1lbW9yeSBzeXN0ZW06PC9wPgo8dWw+CiAgPGxpPmxpYnhtbCBkb2VzIG5vdCB1c2UgdGhlIGxpYmMgbWVtb3J5IGFsbG9jYXRvciBkaXJlY3RseSBidXQgeG1sRnJlZSgpLAogICAgeG1sTWFsbG9jKCkgYW5kIHhtbFJlYWxsb2MoKTwvbGk+CiAgPGxpPnRob3NlIHJvdXRpbmVzIGNhbiBiZSByZWFsbG9jYXRlZCB0byBhIHNwZWNpZmljIHNldCBvZiByb3V0aW5lLCBieQogICAgZGVmYXVsdCB0aGUgbGliYyBvbmVzIGkuZS4gZnJlZSgpLCBtYWxsb2MoKSBhbmQgcmVhbGxvYygpPC9saT4KICA8bGk+dGhlIHhtbG1lbW9yeS5jIG1vZHVsZSBpbmNsdWRlcyBhIHNldCBvZiBkZWJ1Z2dpbmcgcm91dGluZTwvbGk+CjwvdWw+Cgo8aDM+PGEgbmFtZT0ic2V0dGluZyI+U2V0dGluZyBsaWJ4bWwgc2V0IG9mIG1lbW9yeSByb3V0aW5lczwvYT48L2gzPgoKPHA+SXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBub3QgdXNlIHRoZSBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IsIGVpdGhlciBmb3IKZGVidWdnaW5nLCBhbmFseXNpcyBvciB0byBpbXBsZW1lbnQgYSBzcGVjaWZpYyBiZWhhdmlvdXIgb24gbWVtb3J5IG1hbmFnZW1lbnQKKGxpa2Ugb24gZW1iZWRkZWQgc3lzdGVtcykuIFR3byBmdW5jdGlvbiBjYWxscyBhcmUgYXZhaWxhYmxlIHRvIGRvIHNvOjwvcD4KPHVsPgogIDxsaT48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwteG1sbWVtb3J5Lmh0bWwiPnhtbE1lbUdldAogICAgKCk8L2E+IHdoaWNoIHJldHVybiB0aGUgY3VycmVudCBzZXQgb2YgZnVuY3Rpb25zIGluIHVzZSBieSB0aGUgcGFyc2VyPC9saT4KICA8bGk+PGEKICAgIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC14bWxtZW1vcnkuaHRtbCI+eG1sTWVtU2V0dXAoKTwvYT4KICAgIHdoaWNoIGFsbG93IHRvIHNldCB1cCBhIG5ldyBzZXQgb2YgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zPC9saT4KPC91bD4KCjxwPk9mIGNvdXJzZSBhIGNhbGwgdG8geG1sTWVtU2V0dXAoKSBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBiZWZvcmUgY2FsbGluZwphbnkgb3RoZXIgbGlieG1sIHJvdXRpbmVzICh1bmxlc3MgeW91IGFyZSBzdXJlIHlvdXIgYWxsb2NhdGlvbnMgcm91dGluZXMgYXJlCmNvbXBhdGlibGVzKS48L3A+Cgo8aDM+PGEgbmFtZT0iY2xlYW51cCI+Q2xlYW5pbmcgdXAgYWZ0ZXIgcGFyc2luZzwvYT48L2gzPgoKPHA+TGlieG1sIGlzIG5vdCBzdGF0ZWxlc3MsIHRoZXJlIGlzIGEgZmV3IHNldCBvZiBtZW1vcnkgc3RydWN0dXJlcyBuZWVkaW5nCmFsbG9jYXRpb24gYmVmb3JlIHRoZSBwYXJzZXIgaXMgZnVsbHkgZnVuY3Rpb25hbCAoc29tZSBlbmNvZGluZyBzdHJ1Y3R1cmVzCmZvciBleGFtcGxlKS4gVGhpcyBhbHNvIG1lYW4gdGhhdCBvbmNlIHBhcnNpbmcgaXMgZmluaXNoZWQgdGhlcmUgaXMgYSB0aW55CmFtb3VudCBvZiBtZW1vcnkgKGEgZmV3IGh1bmRyZWQgYnl0ZXMpIHdoaWNoIGNhbiBiZSByZWNvbGxlY3RlZCBpZiB5b3UgZG9uJ3QKcmV1c2UgdGhlIHBhcnNlciBpbW1lZGlhdGVseTo8L3A+Cjx1bD4KICA8bGk+PGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLXBhcnNlci5odG1sIj54bWxDbGVhbnVwUGFyc2VyCiAgICAoKTwvYT4gaXMgYSBjZW50cmFsaXplZCByb3V0aW5lIHRvIGZyZWUgdGhlIHBhcnNpbmcgc3RhdGVzLiBOb3RlIHRoYXQgaXQKICAgIHdvbid0IGRlYWxsb2NhdGUgYW55IHByb2R1Y2VkIHRyZWUgaWYgYW55ICh1c2UgdGhlIHhtbEZyZWVEb2MoKSBhbmQKICAgIHJlbGF0ZWQgcm91dGluZXMgZm9yIHRoaXMpLjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC1wYXJzZXIuaHRtbCI+eG1sSW5pdFBhcnNlcgogICAgKCk8L2E+IGlzIHRoZSBkdWFsIHJvdXRpbmUgYWxsb3dpbmcgdG8gcHJlYWxsb2NhdGUgdGhlIHBhcnNpbmcgc3RhdGUKICAgIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGV4YW1wbGUgdG8gYXZvaWQgaW5pdGlhbGl6YXRpb24gcmVlbnRyYW5jeQogICAgcHJvYmxlbXMgd2hlbiB1c2luZyBsaWJ4bWwgaW4gbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnM8L2xpPgo8L3VsPgoKPHA+R2VuZXJhbGx5IHhtbENsZWFudXBQYXJzZXIoKSBpcyBzYWZlLCBpZiBuZWVkZWQgdGhlIHN0YXRlIHdpbGwgYmUgcmVidWlsZAphdCB0aGUgbmV4dCBpbnZvY2F0aW9uIG9mIHBhcnNlciByb3V0aW5lcywgYnV0IGJlIGNhcmVmdWwgb2YgdGhlIGNvbnNlcXVlbmNlcwppbiBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucy48L3A+Cgo8aDM+PGEgbmFtZT0iRGVidWdnaW5nIj5EZWJ1Z2dpbmcgcm91dGluZXM8L2E+PC9oMz4KCjxwPldoZW4gY29uZmlndXJlZCB1c2luZyAtLXdpdGgtbWVtLWRlYnVnIGZsYWcgKG9mZiBieSBkZWZhdWx0KSwgbGlieG1sIHVzZXMKYSBzZXQgb2YgbWVtb3J5IGFsbG9jYXRpb24gZGVidWdnaW5nIHJvdXRpbmVzIGtlZXBpbmcgdHJhY2sgb2YgYWxsIGFsbG9jYXRlZApibG9ja3MgYW5kIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29kZSB3aGVyZSB0aGUgcm91dGluZSB3YXMgY2FsbGVkLiBBIGNvdXBsZSBvZgpvdGhlciBkZWJ1Z2dpbmcgcm91dGluZXMgYWxsb3cgdG8gZHVtcCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBpbmZvcyB0byBhIGZpbGUKb3IgY2FsbCBhIHNwZWNpZmljIHJvdXRpbmUgd2hlbiBhIGdpdmVuIGJsb2NrIG51bWJlciBpcyBhbGxvY2F0ZWQ6PC9wPgo8dWw+CiAgPGxpPjxhCiAgICBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwteG1sbWVtb3J5Lmh0bWwiPnhtbE1hbGxvY0xvYygpPC9hPgogICAgPGEKICAgIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC14bWxtZW1vcnkuaHRtbCI+eG1sUmVhbGxvY0xvYygpPC9hPgogICAgYW5kIDxhCiAgICBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwteG1sbWVtb3J5Lmh0bWwiPnhtbE1lbVN0cmR1cExvYygpPC9hPgogICAgYXJlIHRoZSBtZW1vcnkgZGVidWdnaW5nIHJlcGxhY2VtZW50IGFsbG9jYXRpb24gcm91dGluZXM8L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwteG1sbWVtb3J5Lmh0bWwiPnhtbE1lbW9yeUR1bXAKICAgICgpPC9hPiBkdW1wcyBhbGwgdGhlIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBibG9jayBsZWZ0cwogICAgaW4gdGhlIDxjb2RlPi5tZW1kdW1wPC9jb2RlPiBmaWxlPC9saT4KPC91bD4KCjxwPldoZW4gZGV2ZWxvcGluZyBsaWJ4bWwgbWVtb3J5IGRlYnVnIGlzIGVuYWJsZWQsIHRoZSB0ZXN0cyBwcm9ncmFtcyBjYWxsCnhtbE1lbW9yeUR1bXAgKCkgYW5kIHRoZSAibWFrZSB0ZXN0IiByZWdyZXNzaW9uIHRlc3RzIHdpbGwgY2hlY2sgZm9yIGFueQptZW1vcnkgbGVhayBkdXJpbmcgdGhlIGZ1bGwgcmVncmVzc2lvbiB0ZXN0IHNlcXVlbmNlLCB0aGlzIGhlbHBzIGEgbG90CmVuc3VyaW5nIHRoYXQgbGlieG1sICBkb2VzIG5vdCBsZWFrIG1lbW9yeSBhbmQgYnVsbGV0IHByb29mIG1lbW9yeQphbGxvY2F0aW9ucyB1c2UgKHNvbWUgbGliYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGtub3duIHRvIGJlIGZhciB0b28gcGVybWlzc2l2ZQpyZXN1bHRpbmcgaW4gbWFqb3IgcG9ydGFiaWxpdHkgcHJvYmxlbXMhKS48L3A+Cgo8cD5JZiB0aGUgLm1lbWR1bXAgcmVwb3J0cyBhIGxlYWssIGl0IGRpc3BsYXlzIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIGFuZAphbHNvIHRyaWVzIHRvIGdpdmUgc29tZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGNvbnRlbnQgYW5kIHN0cnVjdHVyZSBvZiB0aGUKYWxsb2NhdGVkIGJsb2NrcyBsZWZ0LiBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gbW9zdCBjYXNlcyB0byBmaW5kIHRoZSBjdWxwcml0LApidXQgbm90IGFsd2F5cy4gQXNzdW1pbmcgdGhlIGFsbG9jYXRpb24gcHJvYmxlbSBpcyByZXByb2R1Y2libGUsIGl0IGlzCnBvc3NpYmxlIHRvIGZpbmQgbW9yZSBlYXNpbHk6PC9wPgo8b2w+CiAgPGxpPndyaXRlIGRvd24gdGhlIGJsb2NrIG51bWJlciB4eHh4IG5vdCBhbGxvY2F0ZWQ8L2xpPgogIDxsaT5leHBvcnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFhNTF9NRU1fQlJFQUtQT0lOVD14eHh4ICwgdGhlIGVhc2llc3QKICAgIHdoZW4gdXNpbmcgR0RCIGlzIHRvIHNpbXBseSBnaXZlIHRoZSBjb21tYW5kCiAgICA8cD48Y29kZT5zZXQgZW52aXJvbm1lbnQgWE1MX01FTV9CUkVBS1BPSU5UIHh4eHg8L2NvZGU+PC9wPgogICAgPHA+YmVmb3JlIHJ1bm5pbmcgdGhlIHByb2dyYW0uPC9wPgogIDwvbGk+CiAgPGxpPnJ1biB0aGUgcHJvZ3JhbSB1bmRlciBhIGRlYnVnZ2VyIGFuZCBzZXQgYSBicmVha3BvaW50IG9uCiAgICB4bWxNYWxsb2NCcmVha3BvaW50KCkgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGlzIHByZWNpc2UgYmxvY2sKICAgIGlzIGFsbG9jYXRlZDwvbGk+CiAgPGxpPndoZW4gdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCB5b3UgY2FuIHRoZW4gZG8gYSBmaW5lIGFuYWx5c2lzIG9mIHRoZQogICAgYWxsb2NhdGlvbiBhbiBzdGVwICB0byBzZWUgdGhlIGNvbmRpdGlvbiByZXN1bHRpbmcgaW4gdGhlIG1pc3NpbmcKICAgIGRlYWxsb2NhdGlvbi48L2xpPgo8L29sPgoKPHA+SSB1c2VkIHRvIHVzZSBhIGNvbW1lcmNpYWwgdG9vbCB0byBkZWJ1ZyBsaWJ4bWwgbWVtb3J5IHByb2JsZW1zIGJ1dCBhZnRlcgpub3RpY2luZyB0aGF0IGl0IHdhcyBub3QgZGV0ZWN0aW5nIG1lbW9yeSBsZWFrcyB0aGF0IHNpbXBsZSBtZWNoYW5pc20gd2FzCnVzZWQgYW5kIHByb3ZlZCBleHRyZW1lbHkgZWZmaWNpZW50IHVudGlsIG5vdy4gTGF0ZWx5IEkgaGF2ZSBhbHNvIHVzZWQgPGEKaHJlZj0iaHR0cDovL2RldmVsb3Blci5rZGUub3JnL35zZXdhcmRqLyI+dmFsZ3JpbmQ8L2E+IHdpdGggcXVpdGUgc29tZQpzdWNjZXNzLCBpdCBpcyB0aWVkIHRvIHRoZSBpMzg2IGFyY2hpdGVjdHVyZSBzaW5jZSBpdCB3b3JrcyBieSBlbXVsYXRpbmcgdGhlCnByb2Nlc3NvciBhbmQgaW5zdHJ1Y3Rpb24gc2V0LCBpdCBpcyBzbG93IGJ1dCAgZXh0cmVtZWx5IGVmZmljaWVudCwgaS5lLiBpdApzcG90IG1lbW9yeSB1c2FnZSBlcnJvcnMgaW4gYSB2ZXJ5IHByZWNpc2Ugd2F5LjwvcD4KCjxoMz48YSBuYW1lPSJHZW5lcmFsNCI+R2VuZXJhbCBtZW1vcnkgcmVxdWlyZW1lbnRzPC9hPjwvaDM+Cgo8cD5Ib3cgbXVjaCBsaWJ4bWwgbWVtb3J5IHJlcXVpcmUgPyBJdCdzIGhhcmQgdG8gdGVsbCBpbiBhdmVyYWdlIGl0IGRlcGVuZHMKb2YgYSBudW1iZXIgb2YgdGhpbmdzOjwvcD4KPHVsPgogIDxsaT50aGUgcGFyc2VyIGl0c2VsZiBzaG91bGQgd29yayAgaW4gYSBmaXhlZCBhbW91bnQgb2YgbWVtb3J5LCBleGNlcHQgZm9yCiAgICBpbmZvcm1hdGlvbiBtYWludGFpbmVkIGFib3V0IHRoZSBzdGFja3Mgb2YgbmFtZXMgYW5kICBlbnRpdGllcyBsb2NhdGlvbnMuCiAgICBUaGUgSS9PIGFuZCBlbmNvZGluZyBoYW5kbGVycyB3aWxsIHByb2JhYmx5IGFjY291bnQgZm9yIGEgZmV3IEtCeXRlcy4KICAgIFRoaXMgaXMgdHJ1ZSBmb3IgYm90aCB0aGUgWE1MIGFuZCBIVE1MIHBhcnNlciAodGhvdWdoIHRoZSBIVE1MIHBhcnNlcgogICAgbmVlZCBtb3JlIHN0YXRlKS48L2xpPgogIDxsaT5JZiB5b3UgYXJlIGdlbmVyYXRpbmcgdGhlIERPTSB0cmVlIHRoZW4gbWVtb3J5IHJlcXVpcmVtZW50cyB3aWxsIGdyb3cKICAgIG5lYXJseSBsaW5lYXIgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgZGF0YS4gSW4gZ2VuZXJhbCBmb3IgYSBiYWxhbmNlZAogICAgdGV4dHVhbCBkb2N1bWVudCB0aGUgaW50ZXJuYWwgbWVtb3J5IHJlcXVpcmVtZW50IGlzIGFib3V0IDQgdGltZXMgdGhlCiAgICBzaXplIG9mIHRoZSBVVEY4IHNlcmlhbGl6YXRpb24gb2YgdGhpcyBkb2N1bWVudCAoZXhhbXBsZSB0aGUgWE1MLTEuMAogICAgcmVjb21tZW5kYXRpb24gaXMgYSBiaXQgbW9yZSBvZiAxNTBLQnl0ZXMgYW5kIHRha2VzIDY1MEtCeXRlcyBvZiBtYWluCiAgICBtZW1vcnkgd2hlbiBwYXJzZWQpLiBWYWxpZGF0aW9uIHdpbGwgYWRkIGEgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZCBmb3IKICAgIG1haW50YWluaW5nIHRoZSBleHRlcm5hbCBEdGQgc3RhdGUgd2hpY2ggc2hvdWxkIGJlIGxpbmVhciB3aXRoIHRoZQogICAgY29tcGxleGl0eSBvZiB0aGUgY29udGVudCBtb2RlbCBkZWZpbmVkIGJ5IHRoZSBEdGQ8L2xpPgogIDxsaT5JZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWR2YW5jZWQgZmVhdHVyZXMgb2YgbGlieG1sIGxpa2UKICAgIHZhbGlkYXRpb24sIERPTSwgWFBhdGggb3IgWFBvaW50ZXIsIGJ1dCByZWFsbHkgbmVlZCB0byB3b3JrIGZpeGVkIG1lbW9yeQogICAgcmVxdWlyZW1lbnRzLCB0aGVuIHRoZSBTQVggaW50ZXJmYWNlIHNob3VsZCBiZSB1c2VkLjwvbGk+CjwvdWw+Cgo8cD48L3A+Cgo8aDI+PGEgbmFtZT0iRW5jb2RpbmdzIj5FbmNvZGluZ3Mgc3VwcG9ydDwvYT48L2gyPgoKPHA+VGFibGUgb2YgQ29udGVudDo8L3A+CjxvbD4KICA8bGk+PGEgaHJlZj0iZW5jb2RpbmcuaHRtbCNXaGF0Ij5XaGF0IGRvZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydAogICAgbWVhbiA/PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9ImVuY29kaW5nLmh0bWwjaW50ZXJuYWwiPlRoZSBpbnRlcm5hbCBlbmNvZGluZywgaG93IGFuZAogIHdoeTwvYT48L2xpPgogIDxsaT48YSBocmVmPSJlbmNvZGluZy5odG1sI2ltcGxlbWVudGUiPkhvdyBpcyBpdCBpbXBsZW1lbnRlZCA/PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9ImVuY29kaW5nLmh0bWwjRGVmYXVsdCI+RGVmYXVsdCBzdXBwb3J0ZWQgZW5jb2RpbmdzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9ImVuY29kaW5nLmh0bWwjZXh0ZW5kIj5Ib3cgdG8gZXh0ZW5kIHRoZSBleGlzdGluZwogIHN1cHBvcnQ8L2E+PC9saT4KPC9vbD4KCjxoMz48YSBuYW1lPSJXaGF0Ij5XaGF0IGRvZXMgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCBtZWFuID88L2E+PC9oMz4KCjxwPlhNTCB3YXMgZGVzaWduZWQgZnJvbSB0aGUgc3RhcnQgdG8gYWxsb3cgdGhlIHN1cHBvcnQgb2YgYW55IGNoYXJhY3RlciBzZXQKYnkgdXNpbmcgVW5pY29kZS4gQW55IGNvbmZvcm1hbnQgWE1MIHBhcnNlciBoYXMgdG8gc3VwcG9ydCB0aGUgVVRGLTggYW5kClVURi0xNiBkZWZhdWx0IGVuY29kaW5ncyB3aGljaCBjYW4gYm90aCBleHByZXNzIHRoZSBmdWxsIHVuaWNvZGUgcmFuZ2VzLiBVVEY4CmlzIGEgdmFyaWFibGUgbGVuZ3RoIGVuY29kaW5nIHdob3NlIGdyZWF0ZXN0IHBvaW50cyBhcmUgdG8gcmV1c2UgdGhlIHNhbWUKZW5jb2RpbmcgZm9yIEFTQ0lJIGFuZCB0byBzYXZlIHNwYWNlIGZvciBXZXN0ZXJuIGVuY29kaW5ncywgYnV0IGl0IGlzIGEgYml0Cm1vcmUgY29tcGxleCB0byBoYW5kbGUgaW4gcHJhY3RpY2UuIFVURi0xNiB1c2UgMiBieXRlcyBwZXIgY2hhcmFjdGVycyAoYW5kCnNvbWV0aW1lcyBjb21iaW5lcyB0d28gcGFpcnMpLCBpdCBtYWtlcyBpbXBsZW1lbnRhdGlvbiBlYXNpZXIsIGJ1dCBsb29rcyBhCmJpdCBvdmVya2lsbCBmb3IgV2VzdGVybiBsYW5ndWFnZXMgZW5jb2RpbmcuIE1vcmVvdmVyIHRoZSBYTUwgc3BlY2lmaWNhdGlvbgphbGxvd3MgZG9jdW1lbnQgdG8gYmUgZW5jb2RlZCBpbiBvdGhlciBlbmNvZGluZ3MgYXQgdGhlIGNvbmRpdGlvbiB0aGF0IHRoZXkKYXJlIGNsZWFybHkgbGFiZWxlZCBhcyBzdWNoLiBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGlzIGEgd2VsbGZvcm1lZCBYTUwKZG9jdW1lbnQgZW5jb2RlZCBpbiBJU08tODg1OSAxIGFuZCB1c2luZyBhY2NlbnR1YXRlZCBsZXR0ZXIgdGhhdCB3ZSBGcmVuY2gKbGlrZXMgZm9yIGJvdGggbWFya3VwIGFuZCBjb250ZW50OjwvcD4KPHByZT4mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8mZ3Q7CiZsdDt0cuhzJmd0O2zgJmx0Oy90cuhzJmd0OzwvcHJlPgoKPHA+SGF2aW5nIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgaW4gbGlieG1sIG1lYW5zIHRoZSBmb2xsb3dpbmc6PC9wPgo8dWw+CiAgPGxpPnRoZSBkb2N1bWVudCBpcyBwcm9wZXJseSBwYXJzZWQ8L2xpPgogIDxsaT5pbmZvcm1hdGlvbnMgYWJvdXQgaXQncyBlbmNvZGluZyBhcmUgc2F2ZWQ8L2xpPgogIDxsaT5pdCBjYW4gYmUgbW9kaWZpZWQ8L2xpPgogIDxsaT5pdCBjYW4gYmUgc2F2ZWQgaW4gaXRzIG9yaWdpbmFsIGVuY29kaW5nPC9saT4KICA8bGk+aXQgY2FuIGFsc28gYmUgc2F2ZWQgaW4gYW5vdGhlciBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgbGlieG1sIChmb3IKICAgIGV4YW1wbGUgc3RyYWlnaHQgVVRGOCBvciBldmVuIGFuIEFTQ0lJIGZvcm0pPC9saT4KPC91bD4KCjxwPkFub3RoZXIgdmVyeSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGUgd2hvbGUgbGlieG1sIEFQSSwgd2l0aCB0aGUKZXhjZXB0aW9uIG9mIGEgZmV3IHJvdXRpbmVzIHRvIHJlYWQgd2l0aCBhIHNwZWNpZmljIGVuY29kaW5nIG9yIHNhdmUgdG8gYQpzcGVjaWZpYyBlbmNvZGluZywgaXMgY29tcGxldGVseSBhZ25vc3RpYyBhYm91dCB0aGUgb3JpZ2luYWwgZW5jb2Rpbmcgb2YgdGhlCmRvY3VtZW50LjwvcD4KCjxwPkl0IHNob3VsZCBiZSBub3RlZCB0b28gdGhhdCB0aGUgSFRNTCBwYXJzZXIgZW1iZWRkZWQgaW4gbGlieG1sIG5vdyBvYmV5CnRoZSBzYW1lIHJ1bGVzIHRvbywgdGhlIGZvbGxvd2luZyBkb2N1bWVudCB3aWxsIGJlIChhcyBvZiAyLjIuMikgaGFuZGxlZCAgaW4KYW4gaW50ZXJuYXRpb25hbGl6ZWQgZmFzaGlvbiBieSBsaWJ4bWwgdG9vOjwvcD4KPHByZT4mbHQ7IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iCiAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiJmd0OwombHQ7aHRtbCBsYW5nPSJmciImZ3Q7CiZsdDtoZWFkJmd0OwogICZsdDtNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiJmd0OwombHQ7L2hlYWQmZ3Q7CiZsdDtib2R5Jmd0OwombHQ7cCZndDtXM0MgY3LpZSBkZXMgc3RhbmRhcmRzIHBvdXIgbGUgV2ViLiZsdDsvYm9keSZndDsKJmx0Oy9odG1sJmd0OzwvcHJlPgoKPGgzPjxhIG5hbWU9ImludGVybmFsIj5UaGUgaW50ZXJuYWwgZW5jb2RpbmcsIGhvdyBhbmQgd2h5PC9hPjwvaDM+Cgo8cD5PbmUgb2YgdGhlIGNvcmUgZGVjaXNpb24gd2FzIHRvIGZvcmNlIGFsbCBkb2N1bWVudHMgdG8gYmUgY29udmVydGVkIHRvIGEKZGVmYXVsdCBpbnRlcm5hbCBlbmNvZGluZywgYW5kIHRoYXQgZW5jb2RpbmcgdG8gYmUgVVRGLTgsIGhlcmUgYXJlIHRoZQpyYXRpb25hbGUgZm9yIHRob3NlIGNob2ljZXM6PC9wPgo8dWw+CiAgPGxpPmtlZXBpbmcgdGhlIG5hdGl2ZSBlbmNvZGluZyBpbiB0aGUgaW50ZXJuYWwgZm9ybSB3b3VsZCBmb3JjZSB0aGUgbGlieG1sCiAgICB1c2VycyAob3IgdGhlIGNvZGUgYXNzb2NpYXRlZCkgdG8gYmUgZnVsbHkgYXdhcmUgb2YgdGhlIGVuY29kaW5nIG9mIHRoZQogICAgb3JpZ2luYWwgZG9jdW1lbnQsIGZvciBleGFtcGxlcyB3aGVuIGFkZGluZyBhIHRleHQgbm9kZSB0byBhIGRvY3VtZW50LAogICAgdGhlIGNvbnRlbnQgd291bGQgaGF2ZSB0byBiZSBwcm92aWRlZCBpbiB0aGUgZG9jdW1lbnQgZW5jb2RpbmcsIGkuZS4gdGhlCiAgICBjbGllbnQgY29kZSB3b3VsZCBoYXZlIHRvIGNoZWNrIGl0IGJlZm9yZSBoYW5kLCBtYWtlIHN1cmUgaXQncyBjb25mb3JtYW50CiAgICB0byB0aGUgZW5jb2RpbmcsIGV0YyAuLi4gVmVyeSBoYXJkIGluIHByYWN0aWNlLCB0aG91Z2ggaW4gc29tZSBzcGVjaWZpYwogICAgY2FzZXMgdGhpcyBtYXkgbWFrZSBzZW5zZS48L2xpPgogIDxsaT50aGUgc2Vjb25kIGRlY2lzaW9uIHdhcyB3aGljaCBlbmNvZGluZy4gRnJvbSB0aGUgWE1MIHNwZWMgb25seSBVVEY4IGFuZAogICAgVVRGMTYgcmVhbGx5IG1ha2VzIHNlbnNlIGFzIGJlaW5nIHRoZSB0d28gb25seSBlbmNvZGluZ3MgZm9yIHdoaWNoIHRoZXJlCiAgICBpcyBtYW5kYXRvcnkgc3VwcG9ydC4gVUNTLTQgKDMyIGJpdHMgZml4ZWQgc2l6ZSBlbmNvZGluZykgY291bGQgYmUKICAgIGNvbnNpZGVyZWQgYW4gaW50ZWxsaWdlbnQgY2hvaWNlIHRvbyBzaW5jZSBpdCdzIGEgZGlyZWN0IFVuaWNvZGUgbWFwcGluZwogICAgc3VwcG9ydC4gSSBzZWxlY3RlZCBVVEYtOCBvbiB0aGUgYmFzaXMgb2YgZWZmaWNpZW5jeSBhbmQgY29tcGF0aWJpbGl0eQogICAgd2l0aCBzdXJyb3VuZGluZyBzb2Z0d2FyZToKICAgIDx1bD4KICAgICAgPGxpPlVURi04IHdoaWxlIGEgYml0IG1vcmUgY29tcGxleCB0byBjb252ZXJ0IGZyb20vdG8gKGkuZS4gc2xpZ2h0bHkKICAgICAgICBtb3JlIGNvc3RseSB0byBpbXBvcnQgYW5kIGV4cG9ydCBDUFUgd2lzZSkgaXMgYWxzbyBmYXIgbW9yZSBjb21wYWN0CiAgICAgICAgdGhhbiBVVEYtMTYgKGFuZCBVQ1MtNCkgZm9yIGEgbWFqb3JpdHkgb2YgdGhlIGRvY3VtZW50cyBJIHNlZSBpdCB1c2VkCiAgICAgICAgZm9yIHJpZ2h0IG5vdyAoUlBNIFJERiBjYXRhbG9ncywgYWR2b2dhdG8gZGF0YSwgdmFyaW91cyBjb25maWd1cmF0aW9uCiAgICAgICAgZmlsZSBmb3JtYXRzLCBldGMuKSBhbmQgdGhlIGtleSBwb2ludCBmb3IgdG9kYXkncyBjb21wdXRlcgogICAgICAgIGFyY2hpdGVjdHVyZSBpcyBlZmZpY2llbnQgdXNlcyBvZiBjYWNoZXMuIElmIG9uZSBuZWFybHkgZG91YmxlIHRoZQogICAgICAgIG1lbW9yeSByZXF1aXJlbWVudCB0byBzdG9yZSB0aGUgc2FtZSBhbW91bnQgb2YgZGF0YSwgdGhpcyB3aWxsIHRyYXNoCiAgICAgICAgY2FjaGVzIChtYWluIG1lbW9yeS9leHRlcm5hbCBjYWNoZXMvaW50ZXJuYWwgY2FjaGVzKSBhbmQgbXkgdGFrZSBpcwogICAgICAgIHRoYXQgdGhpcyBoYXJtcyB0aGUgc3lzdGVtIGZhciBtb3JlIHRoYW4gdGhlIENQVSByZXF1aXJlbWVudHMgbmVlZGVkCiAgICAgICAgZm9yIHRoZSBjb252ZXJzaW9uIHRvIFVURi04PC9saT4KICAgICAgPGxpPk1vc3Qgb2YgbGlieG1sIHZlcnNpb24gMSB1c2VycyB3ZXJlIHVzaW5nIGl0IHdpdGggc3RyYWlnaHQgQVNDSUkKICAgICAgICBtb3N0IG9mIHRoZSB0aW1lLCBkb2luZyB0aGUgY29udmVyc2lvbiB3aXRoIGFuIGludGVybmFsIGVuY29kaW5nCiAgICAgICAgcmVxdWlyaW5nIGFsbCB0aGVpciBjb2RlIHRvIGJlIHJld3JpdHRlbiB3YXMgYSBzZXJpb3VzIHNob3ctc3RvcHBlcgogICAgICAgIGZvciB1c2luZyBVVEYtMTYgb3IgVUNTLTQuPC9saT4KICAgICAgPGxpPlVURi04IGlzIGJlaW5nIHVzZWQgYXMgdGhlIGRlLWZhY3RvIGludGVybmFsIGVuY29kaW5nIHN0YW5kYXJkIGZvcgogICAgICAgIHJlbGF0ZWQgY29kZSBsaWtlIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnBhbmdvLm9yZy8iPnBhbmdvPC9hPgogICAgICAgIHVwY29taW5nIEdub21lIHRleHQgd2lkZ2V0LCBhbmQgYSBsb3Qgb2YgVW5peCBjb2RlICh5ZXAgYW5vdGhlciBwbGFjZQogICAgICAgIHdoZXJlIFVuaXggcHJvZ3JhbW1lciBiYXNlIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoIGZyb20gTWljcm9zb2Z0CiAgICAgICAgLSB0aGV5IGFyZSB1c2luZyBVVEYtMTYpPC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4KCjxwPldoYXQgZG9lcyB0aGlzIG1lYW4gaW4gcHJhY3RpY2UgZm9yIHRoZSBsaWJ4bWwgdXNlcjo8L3A+Cjx1bD4KICA8bGk+eG1sQ2hhciwgdGhlIGxpYnhtbCBkYXRhIHR5cGUgaXMgYSBieXRlLCB0aG9zZSBieXRlcyBtdXN0IGJlIGFzc2VtYmxlZAogICAgYXMgVVRGLTggdmFsaWQgc3RyaW5ncy4gVGhlIHByb3BlciB3YXkgdG8gdGVybWluYXRlIGFuIHhtbENoYXIgKiBzdHJpbmcKICAgIGlzIHNpbXBseSB0byBhcHBlbmQgMCBieXRlLCBhcyB1c3VhbC48L2xpPgogIDxsaT5PbmUganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gdXNpbmcgY2hhcnMgb3V0c2lkZSB0aGUgQVNDSUkgc2V0LAogICAgdGhlIHZhbHVlcyBoYXMgYmVlbiBwcm9wZXJseSBjb252ZXJ0ZWQgdG8gVVRGLTg8L2xpPgo8L3VsPgoKPGgzPjxhIG5hbWU9ImltcGxlbWVudGUiPkhvdyBpcyBpdCBpbXBsZW1lbnRlZCA/PC9hPjwvaDM+Cgo8cD5MZXQncyBkZXNjcmliZSBob3cgYWxsIHRoaXMgd29ya3Mgd2l0aGluIGxpYnhtbCwgYmFzaWNhbGx5IHRoZSBJMThOCihpbnRlcm5hdGlvbmFsaXphdGlvbikgc3VwcG9ydCBnZXQgdHJpZ2dlcmVkIG9ubHkgZHVyaW5nIEkvTyBvcGVyYXRpb24sIGkuZS4Kd2hlbiByZWFkaW5nIGEgZG9jdW1lbnQgb3Igc2F2aW5nIG9uZS4gTGV0J3MgbG9vayBmaXJzdCBhdCB0aGUgcmVhZGluZwpzZXF1ZW5jZTo8L3A+CjxvbD4KICA8bGk+d2hlbiBhIGRvY3VtZW50IGlzIHByb2Nlc3NlZCwgd2UgdXN1YWxseSBkb24ndCBrbm93IHRoZSBlbmNvZGluZywgYQogICAgc2ltcGxlIGhldXJpc3RpYyBhbGxvd3MgdG8gZGV0ZWN0IFVURi0xOCBhbmQgVUNTLTQgZnJvbSB3aG9zZSB3aGVyZSB0aGUKICAgIEFTQ0lJIHJhbmdlICgwLTB4N0YpIG1hcHMgd2l0aCBBU0NJSTwvbGk+CiAgPGxpPnRoZSB4bWwgZGVjbGFyYXRpb24gaWYgYXZhaWxhYmxlIGlzIHBhcnNlZCwgaW5jbHVkaW5nIHRoZSBlbmNvZGluZwogICAgZGVjbGFyYXRpb24uIEF0IHRoYXQgcG9pbnQsIGlmIHRoZSBhdXRvZGV0ZWN0ZWQgZW5jb2RpbmcgaXMgZGlmZmVyZW50CiAgICBmcm9tIHRoZSBvbmUgZGVjbGFyZWQgYSBjYWxsIHRvIHhtbFN3aXRjaEVuY29kaW5nKCkgaXMgaXNzdWVkLjwvbGk+CiAgPGxpPklmIHRoZXJlIGlzIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uLCB0aGVuIHRoZSBpbnB1dCBoYXMgdG8gYmUgaW4gZWl0aGVyCiAgICBVVEYtOCBvciBVVEYtMTYsIGlmIGl0IGlzIG5vdCB0aGVuIGF0IHNvbWUgcG9pbnQgd2hlbiBwcm9jZXNzaW5nIHRoZQogICAgaW5wdXQsIHRoZSBjb252ZXJ0ZXIvY2hlY2tlciBvZiBVVEYtOCBmb3JtIHdpbGwgcmFpc2UgYW4gZW5jb2RpbmcgZXJyb3IuCiAgICBZb3UgbWF5IGVuZC11cCB3aXRoIGEgZ2FyYmxlZCBkb2N1bWVudCwgb3Igbm8gZG9jdW1lbnQgYXQgYWxsICEgRXhhbXBsZToKICAgIDxwcmU+fi9YTUwgLSZndDsgLi94bWxsaW50IGVyci54bWwgCmVyci54bWw6MTogZXJyb3I6IElucHV0IGlzIG5vdCBwcm9wZXIgVVRGLTgsIGluZGljYXRlIGVuY29kaW5nICEKJmx0O3Ry6HMmZ3Q7bOAmbHQ7L3Ry6HMmZ3Q7CiAgIF4KZXJyLnhtbDoxOiBlcnJvcjogQnl0ZXM6IDB4RTggMHg3MyAweDNFIDB4NkMKJmx0O3Ry6HMmZ3Q7bOAmbHQ7L3Ry6HMmZ3Q7CiAgIF48L3ByZT4KICA8L2xpPgogIDxsaT54bWxTd2l0Y2hFbmNvZGluZygpIGRvZXMgYW4gZW5jb2RpbmcgbmFtZSBsb29rdXAsIGNhbm9uaWNhbGl6ZSBpdCwgYW5kCiAgICB0aGVuIHNlYXJjaCB0aGUgZGVmYXVsdCByZWdpc3RlcmVkIGVuY29kaW5nIGNvbnZlcnRlcnMgZm9yIHRoYXQgZW5jb2RpbmcuCiAgICBJZiBpdCdzIG5vdCB3aXRoaW4gdGhlIGRlZmF1bHQgc2V0IGFuZCBpY29udigpIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQKICAgIGl0LCBpdCB3aWxsIGFzayBpY29udiBmb3Igc3VjaCBhbiBlbmNvZGVyLiBJZiB0aGlzIGZhaWxzIHRoZW4gdGhlIHBhcnNlcgogICAgd2lsbCByZXBvcnQgYW4gZXJyb3IgYW5kIHN0b3BzIHByb2Nlc3Npbmc6CiAgICA8cHJlPn4vWE1MIC0mZ3Q7IC4veG1sbGludCBlcnIyLnhtbCAKZXJyMi54bWw6MTogZXJyb3I6IFVuc3VwcG9ydGVkIGVuY29kaW5nIFVuc3VwcG9ydGVkRW5jCiZsdDs/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVuc3VwcG9ydGVkRW5jIj8mZ3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF48L3ByZT4KICA8L2xpPgogIDxsaT5Gcm9tIHRoYXQgcG9pbnQgdGhlIGVuY29kZXIgcHJvY2Vzc2VzIHByb2dyZXNzaXZlbHkgdGhlIGlucHV0IChpdCBpcwogICAgcGx1Z2dlZCBhcyBhIGZyb250LWVuZCB0byB0aGUgSS9PIG1vZHVsZSkgZm9yIHRoYXQgZW50aXR5LiBJdCBjYXB0dXJlcwogICAgYW5kIGNvbnZlcnQgb24tdGhlLWZseSB0aGUgZG9jdW1lbnQgdG8gYmUgcGFyc2VkIHRvIFVURi04LiBUaGUgcGFyc2VyCiAgICBpdHNlbGYganVzdCBkb2VzIFVURi04IGNoZWNraW5nIG9mIHRoaXMgaW5wdXQgYW5kIHByb2Nlc3MgaXQKICAgIHRyYW5zcGFyZW50bHkuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgZW5jb2RpbmcgaW5mb3JtYXRpb24gaGFzCiAgICBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzaW5nIGNvbnRleHQgKG1vcmUgcHJlY2lzZWx5IHRvIHRoZSBpbnB1dAogICAgY29ycmVzcG9uZGluZyB0byB0aGlzIGVudGl0eSkuPC9saT4KICA8bGk+VGhlIHJlc3VsdCAod2hlbiB1c2luZyBET00pIGlzIGFuIGludGVybmFsIGZvcm0gY29tcGxldGVseSBpbiBVVEYtOAogICAgd2l0aCBqdXN0IGFuIGVuY29kaW5nIGluZm9ybWF0aW9uIG9uIHRoZSBkb2N1bWVudCBub2RlLjwvbGk+Cjwvb2w+Cgo8cD5PayB0aGVuIHdoYXQgaGFwcGVucyB3aGVuIHNhdmluZyB0aGUgZG9jdW1lbnQgKGFzc3VtaW5nIHlvdQpjb2xsZWN0ZWQvYnVpbHQgYW4geG1sRG9jIERPTSBsaWtlIHN0cnVjdHVyZSkgPyBJdCBkZXBlbmRzIG9uIHRoZSBmdW5jdGlvbgpjYWxsZWQsIHhtbFNhdmVGaWxlKCkgd2lsbCBqdXN0IHRyeSB0byBzYXZlIGluIHRoZSBvcmlnaW5hbCBlbmNvZGluZywgd2hpbGUKeG1sU2F2ZUZpbGVUbygpIGFuZCB4bWxTYXZlRmlsZUVuYygpIGNhbiBvcHRpb25hbGx5IHNhdmUgdG8gYSBnaXZlbgplbmNvZGluZzo8L3A+CjxvbD4KICA8bGk+aWYgbm8gZW5jb2RpbmcgaXMgZ2l2ZW4sIGxpYnhtbCB3aWxsIGxvb2sgZm9yIGFuIGVuY29kaW5nIHZhbHVlCiAgICBhc3NvY2lhdGVkIHRvIHRoZSBkb2N1bWVudCBhbmQgaWYgaXQgZXhpc3RzIHdpbGwgdHJ5IHRvIHNhdmUgdG8gdGhhdAogICAgZW5jb2RpbmcsCiAgICA8cD5vdGhlcndpc2UgZXZlcnl0aGluZyBpcyB3cml0dGVuIGluIHRoZSBpbnRlcm5hbCBmb3JtLCBpLmUuIFVURi04PC9wPgogIDwvbGk+CiAgPGxpPnNvIGlmIGFuIGVuY29kaW5nIHdhcyBzcGVjaWZpZWQsIGVpdGhlciBhdCB0aGUgQVBJIGxldmVsIG9yIG9uIHRoZQogICAgZG9jdW1lbnQsIGxpYnhtbCB3aWxsIGFnYWluIGNhbm9uaWNhbGl6ZSB0aGUgZW5jb2RpbmcgbmFtZSwgbG9va3VwIGZvciBhCiAgICBjb252ZXJ0ZXIgaW4gdGhlIHJlZ2lzdGVyZWQgc2V0IG9yIHRocm91Z2ggaWNvbnYuIElmIG5vdCBmb3VuZCB0aGUKICAgIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGNvZGU8L2xpPgogIDxsaT50aGUgY29udmVydGVyIGlzIHBsYWNlZCBiZWZvcmUgdGhlIEkvTyBidWZmZXIgbGF5ZXIsIGFzIGFub3RoZXIga2luZCBvZgogICAgYnVmZmVyLCB0aGVuIGxpYnhtbCB3aWxsIHNpbXBseSBwdXNoIHRoZSBVVEYtOCBzZXJpYWxpemF0aW9uIHRvIHRocm91Z2gKICAgIHRoYXQgYnVmZmVyLCB3aGljaCB3aWxsIHRoZW4gcHJvZ3Jlc3NpdmVseSBiZSBjb252ZXJ0ZWQgYW5kIHB1c2hlZCBvbnRvCiAgICB0aGUgSS9PIGxheWVyLjwvbGk+CiAgPGxpPkl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNvbnZlcnRlciBjb2RlIGZhaWxzIG9uIHNvbWUgaW5wdXQsIGZvciBleGFtcGxlCiAgICB0cnlpbmcgdG8gcHVzaCBhbiBVVEYtOCBlbmNvZGVkIENoaW5lc2UgY2hhcmFjdGVyIHRocm91Z2ggdGhlIFVURi04IHRvCiAgICBJU08tODg1OS0xIGNvbnZlcnRlciB3b24ndCB3b3JrLiBTaW5jZSB0aGUgZW5jb2RlcnMgYXJlIHByb2dyZXNzaXZlIHRoZXkKICAgIHdpbGwganVzdCByZXBvcnQgdGhlIGVycm9yIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnZlcnRlZCwgYXQgdGhhdAogICAgcG9pbnQgbGlieG1sIHdpbGwgZGVjb2RlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVyLCByZW1vdmUgaXQgZnJvbSB0aGUKICAgIGJ1ZmZlciBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBhc3NvY2lhdGVkIGNoYXJSZWYgZW5jb2RpbmcgJmFtcDsjMTIzOyBhbmQKICAgIHJlc3VtZSB0aGUgY29udmVyc2lvbi4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYW55IGRvY3VtZW50IHdpbGwgYmUgc2F2ZWQKICAgIHdpdGhvdXQgbG9zc2VzIChleGNlcHQgZm9yIG1hcmt1cCBuYW1lcyB3aGVyZSB0aGlzIGlzIG5vdCBsZWdhbCwgdGhpcyBpcwogICAgYSBwcm9ibGVtIGluIHRoZSBjdXJyZW50IHZlcnNpb24sIGluIHByYWN0aWNlIGF2b2lkIHVzaW5nIG5vbi1hc2NpaQogICAgY2hhcmFjdGVycyBmb3IgdGFncyBvciBhdHRyaWJ1dGVzIG5hbWVzICBAQCkuIEEgc3BlY2lhbCAiYXNjaWkiIGVuY29kaW5nCiAgICBuYW1lIGlzIHVzZWQgdG8gc2F2ZSBkb2N1bWVudHMgdG8gYSBwdXJlIGFzY2lpIGZvcm0gY2FuIGJlIHVzZWQgd2hlbgogICAgcG9ydGFiaWxpdHkgaXMgcmVhbGx5IGNydWNpYWw8L2xpPgo8L29sPgoKPHA+SGVyZSBpcyBhIGZldyBleGFtcGxlcyBiYXNlZCBvbiB0aGUgc2FtZSB0ZXN0IGRvY3VtZW50OjwvcD4KPHByZT5+L1hNTCAtJmd0OyAuL3htbGxpbnQgaXNvbGF0MSAKJmx0Oz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Jmd0OwombHQ7dHLocyZndDts4CZsdDsvdHLocyZndDsKfi9YTUwgLSZndDsgLi94bWxsaW50IC0tZW5jb2RlIFVURi04IGlzb2xhdDEgCiZsdDs/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8mZ3Q7CiZsdDt0csOocyZndDtswyCgJmx0Oy90csOocyZndDsKfi9YTUwgLSZndDsgPC9wcmU+Cgo8cD5UaGUgc2FtZSBwcm9jZXNzaW5nIGlzIGFwcGxpZWQgKGFuZCByZXVzZSBtb3N0IG9mIHRoZSBjb2RlKSBmb3IgSFRNTCBJMThOCnByb2Nlc3NpbmcuIExvb2tpbmcgdXAgYW5kIG1vZGlmeWluZyB0aGUgY29udGVudCBlbmNvZGluZyBpcyBhIGJpdCBtb3JlCmRpZmZpY3VsdCBzaW5jZSBpdCBpcyBsb2NhdGVkIGluIGEgJmx0O21ldGEmZ3Q7IHRhZyB1bmRlciB0aGUgJmx0O2hlYWQmZ3Q7LApzbyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgaHRtbEdldE1ldGFFbmNvZGluZygpIGFuZCBodG1sU2V0TWV0YUVuY29kaW5nKCkgaGF2ZQpiZWVuIHByb3ZpZGVkLiBUaGUgcGFyc2VyIGFsc28gYXR0ZW1wdHMgdG8gc3dpdGNoIGVuY29kaW5nIG9uIHRoZSBmbHkgd2hlbgpkZXRlY3Rpbmcgc3VjaCBhIHRhZyBvbiBpbnB1dC4gRXhjZXB0IGZvciB0aGF0IHRoZSBwcm9jZXNzaW5nIGlzIHRoZSBzYW1lCihhbmQgYWdhaW4gcmV1c2VzIHRoZSBzYW1lIGNvZGUpLjwvcD4KCjxoMz48YSBuYW1lPSJEZWZhdWx0Ij5EZWZhdWx0IHN1cHBvcnRlZCBlbmNvZGluZ3M8L2E+PC9oMz4KCjxwPmxpYnhtbCBoYXMgYSBzZXQgb2YgZGVmYXVsdCBjb252ZXJ0ZXJzIGZvciB0aGUgZm9sbG93aW5nIGVuY29kaW5ncwoobG9jYXRlZCBpbiBlbmNvZGluZy5jKTo8L3A+CjxvbD4KICA8bGk+VVRGLTggaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgKG51bGwgaGFuZGxlcnMpPC9saT4KICA8bGk+VVRGLTE2LCBib3RoIGxpdHRsZSBhbmQgYmlnIGVuZGlhbjwvbGk+CiAgPGxpPklTTy1MYXRpbi0xIChJU08tODg1OS0xKSBjb3ZlcmluZyBtb3N0IHdlc3Rlcm4gbGFuZ3VhZ2VzPC9saT4KICA8bGk+QVNDSUksIHVzZWZ1bCBtb3N0bHkgZm9yIHNhdmluZzwvbGk+CiAgPGxpPkhUTUwsIGEgc3BlY2lmaWMgaGFuZGxlciBmb3IgdGhlIGNvbnZlcnNpb24gb2YgVVRGLTggdG8gQVNDSUkgd2l0aCBIVE1MCiAgICBwcmVkZWZpbmVkIGVudGl0aWVzIGxpa2UgJmFtcDtjb3B5OyBmb3IgdGhlIENvcHlyaWdodCBzaWduLjwvbGk+Cjwvb2w+Cgo8cD5Nb3JlIG92ZXIgd2hlbiBjb21waWxlZCBvbiBhbiBVbml4IHBsYXRmb3JtIHdpdGggaWNvbnYgc3VwcG9ydCB0aGUgZnVsbApzZXQgb2YgZW5jb2RpbmdzIHN1cHBvcnRlZCBieSBpY29udiBjYW4gYmUgaW5zdGFudGx5IGJlIHVzZWQgYnkgbGlieG1sLiBPbiBhCmxpbnV4IG1hY2hpbmUgd2l0aCBnbGliYy0yLjEgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncyBhbmQgYWxpYXNlcyBmaWxsCjMgZnVsbCBwYWdlcywgYW5kIGluY2x1ZGUgVUNTLTQsIHRoZSBmdWxsIHNldCBvZiBJU08tTGF0aW4gZW5jb2RpbmdzLCBhbmQgdGhlCnZhcmlvdXMgSmFwYW5lc2Ugb25lcy48L3A+Cgo8aDQ+RW5jb2RpbmcgYWxpYXNlczwvaDQ+Cgo8cD5Gcm9tIDIuMi4zLCBsaWJ4bWwgaGFzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgZW5jb2RpbmcgbmFtZXMgYWxpYXNlcy4gVGhlCmdvYWwgaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBkb2N1bWVudCB3aG9zZSBlbmNvZGluZyBpcyBzdXBwb3J0ZWQgYnV0IHdoZXJlCnRoZSBuYW1lIGRpZmZlcnMgKGZvciBleGFtcGxlIGZyb20gdGhlIGRlZmF1bHQgc2V0IG9mIG5hbWVzIGFjY2VwdGVkIGJ5Cmljb252KS4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYWxsb3cgdG8gcmVnaXN0ZXIgYW5kIGhhbmRsZSBuZXcgYWxpYXNlcyBmb3IKZXhpc3RpbmcgZW5jb2RpbmdzLiBPbmNlIHJlZ2lzdGVyZWQgbGlieG1sIHdpbGwgYXV0b21hdGljYWxseSBsb29rdXAgdGhlCmFsaWFzZXMgd2hlbiBoYW5kbGluZyBhIGRvY3VtZW50OjwvcD4KPHVsPgogIDxsaT5pbnQgeG1sQWRkRW5jb2RpbmdBbGlhcyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphbGlhcyk7PC9saT4KICA8bGk+aW50IHhtbERlbEVuY29kaW5nQWxpYXMoY29uc3QgY2hhciAqYWxpYXMpOzwvbGk+CiAgPGxpPmNvbnN0IGNoYXIgKiB4bWxHZXRFbmNvZGluZ0FsaWFzKGNvbnN0IGNoYXIgKmFsaWFzKTs8L2xpPgogIDxsaT52b2lkIHhtbENsZWFudXBFbmNvZGluZ0FsaWFzZXModm9pZCk7PC9saT4KPC91bD4KCjxoMz48YSBuYW1lPSJleHRlbmQiPkhvdyB0byBleHRlbmQgdGhlIGV4aXN0aW5nIHN1cHBvcnQ8L2E+PC9oMz4KCjxwPldlbGwgYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBlbmNvZGluZywgb3Igb3ZlcnJpZGluZyBvbmUgb2YgdGhlIGVuY29kZXJzCihhc3N1bWluZyBpdCBpcyBidWdneSkgc2hvdWxkIG5vdCBiZSBoYXJkLCBqdXN0IHdyaXRlIGFuIGlucHV0IGFuZCBvdXRwdXQKY29udmVyc2lvbiByb3V0aW5lcyB0by9mcm9tIFVURi04LCBhbmQgcmVnaXN0ZXIgdGhlbSB1c2luZwp4bWxOZXdDaGFyRW5jb2RpbmdIYW5kbGVyKG5hbWUsIHh4eFRvVVRGOCwgVVRGOFRveHh4KSwgIGFuZCB0aGV5IHdpbGwgYmUKY2FsbGVkIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHBhcnNlcihzKSBlbmNvdW50ZXIgc3VjaCBhbiBlbmNvZGluZyBuYW1lCihyZWdpc3RlciBpdCB1cHBlcmNhc2UsIHRoaXMgd2lsbCBoZWxwKS4gVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlbmNvZGVycywKdGhlaXIgYXJndW1lbnRzIGFuZCBleHBlY3RlZCByZXR1cm4gdmFsdWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGVuY29kaW5nLmgKaGVhZGVyLjwvcD4KCjxwPkEgcXVpY2sgbm90ZSBvbiB0aGUgdG9waWMgb2Ygc3VidmVydGluZyB0aGUgcGFyc2VyIHRvIHVzZSBhIGRpZmZlcmVudAppbnRlcm5hbCBlbmNvZGluZyB0aGFuIFVURi04LCBpbiBzb21lIGNhc2UgcGVvcGxlIHdpbGwgYWJzb2x1dGVseSB3YW50IHRvCmtlZXAgdGhlIGludGVybmFsIGVuY29kaW5nIGRpZmZlcmVudCwgSSB0aGluayBpdCdzIHN0aWxsIHBvc3NpYmxlIChidXQgdGhlCmVuY29kaW5nIG11c3QgYmUgY29tcGxpYW50IHdpdGggQVNDSUkgb24gdGhlIHNhbWUgc3VicmFuZ2UpIHRob3VnaCBJIGRpZG4ndAp0cmllZCBpdC4gVGhlIGtleSBpcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb252ZXJzaW9uIHJvdXRpbmVzIChieQpyZWdpc3RlcmluZyBudWxsIGVuY29kZXJzL2RlY29kZXJzIGZvciB5b3VyIGNoYXJzZXRzKSwgYW5kIGJ5cGFzcyB0aGUgVVRGLTgKY2hlY2tpbmcgb2YgdGhlIHBhcnNlciBieSBzZXR0aW5nIHRoZSBwYXJzZXIgY29udGV4dCBjaGFyc2V0CihjdHh0LSZndDtjaGFyc2V0KSB0byBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gWE1MX0NIQVJfRU5DT0RJTkdfVVRGOCwgYnV0CnRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoaXMgd2lsbCB3b3JrLiBZb3UgbWF5IGFsc28gaGF2ZSBzb21lIHRyb3VibGVzCnNhdmluZyBiYWNrLjwvcD4KCjxwPkJhc2ljYWxseSBwcm9wZXIgSTE4TiBzdXBwb3J0IGlzIGltcG9ydGFudCwgdGhpcyByZXF1aXJlcyBhdCBsZWFzdApsaWJ4bWwtMi4wLjAsIGJ1dCBhIGxvdCBvZiBmZWF0dXJlcyBhbmQgY29ycmVjdGlvbnMgYXJlIHJlYWxseSBhdmFpbGFibGUgb25seQpzdGFydGluZyAyLjIuPC9wPgoKPGgyPjxhIG5hbWU9IklPIj5JL08gSW50ZXJmYWNlczwvYT48L2gyPgoKPHA+VGFibGUgb2YgQ29udGVudDo8L3A+CjxvbD4KICA8bGk+PGEgaHJlZj0iI0dlbmVyYWwxIj5HZW5lcmFsIG92ZXJ2aWV3PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNiYXNpYyI+VGhlIGJhc2ljIGJ1ZmZlciB0eXBlPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNJbnB1dCI+SW5wdXQgSS9PIGhhbmRsZXJzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNPdXRwdXQiPk91dHB1dCBJL08gaGFuZGxlcnM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI2VudGl0aWVzIj5UaGUgZW50aXRpZXMgbG9hZGVyPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNFeGFtcGxlMiI+RXhhbXBsZSBvZiBjdXN0b21pemVkIEkvTzwvYT48L2xpPgo8L29sPgoKPGgzPjxhIG5hbWU9IkdlbmVyYWwxIj5HZW5lcmFsIG92ZXJ2aWV3PC9hPjwvaDM+Cgo8cD5UaGUgbW9kdWxlIDxjb2RlPjxhCmhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9odG1sL2xpYnhtbC14bWxpby5odG1sIj54bWxJTy5oPC9hPjwvY29kZT4gcHJvdmlkZXMKdGhlIGludGVyZmFjZXMgdG8gdGhlIGxpYnhtbCBJL08gc3lzdGVtLiBUaGlzIGNvbnNpc3RzIG9mIDQgbWFpbiBwYXJ0czo8L3A+Cjx1bD4KICA8bGk+RW50aXRpZXMgbG9hZGVyLCB0aGlzIGlzIGEgcm91dGluZSB3aGljaCB0cmllcyB0byBmZXRjaCB0aGUgZW50aXRpZXMKICAgIChmaWxlcykgYmFzZWQgb24gdGhlaXIgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnMuIFRoZSBkZWZhdWx0IGxvYWRlcgogICAgZG9uJ3QgbG9vayBhdCB0aGUgcHVibGljIGlkZW50aWZpZXIgc2luY2UgbGlieG1sIGRvIG5vdCBtYWludGFpbiBhCiAgICBjYXRhbG9nLiBZb3UgY2FuIHJlZGVmaW5lIHlvdSBvd24gZW50aXR5IGxvYWRlciBieSB1c2luZwogICAgPGNvZGU+eG1sR2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoKTwvY29kZT4gYW5kCiAgICA8Y29kZT54bWxTZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpPC9jb2RlPi4gPGEgaHJlZj0iI2VudGl0aWVzIj5DaGVjayB0aGUKICAgIGV4YW1wbGU8L2E+LjwvbGk+CiAgPGxpPklucHV0IEkvTyBidWZmZXJzIHdoaWNoIGFyZSBhIGNvbW1vZGl0eSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgcGFyc2VyKHMpCiAgICBpbnB1dCBsYXllciB0byBoYW5kbGUgZmV0Y2hpbmcgdGhlIGluZm9ybWF0aW9ucyB0byBmZWVkIHRoZSBwYXJzZXIuIFRoaXMKICAgIHByb3ZpZGVzIGJ1ZmZlcmluZyBhbmQgaXMgYWxzbyBhIHBsYWNlaG9sZGVyIHdoZXJlIHRoZSBlbmNvZGluZwogICAgY29udmVydGVycyB0byBVVEY4IGFyZSBwaWdneS1iYWNrZWQuPC9saT4KICA8bGk+T3V0cHV0IEkvTyBidWZmZXJzIGFyZSBzaW1pbGFyIHRvIHRoZSBJbnB1dCBvbmVzIGFuZCBmdWxmaWxsIHNpbWlsYXIKICAgIHRhc2sgYnV0IHdoZW4gZ2VuZXJhdGluZyBhIHNlcmlhbGl6YXRpb24gZnJvbSBhIHRyZWUuPC9saT4KICA8bGk+QSBtZWNoYW5pc20gdG8gcmVnaXN0ZXIgc2V0cyBvZiBJL08gY2FsbGJhY2tzIGFuZCBhc3NvY2lhdGUgdGhlbSB3aXRoCiAgICBzcGVjaWZpYyBuYW1pbmcgc2NoZW1lcyBsaWtlIHRoZSBwcm90b2NvbCBwYXJ0IG9mIHRoZSBVUklzLgogICAgPHA+VGhpcyBhZmZlY3QgdGhlIGRlZmF1bHQgSS9PIG9wZXJhdGlvbnMgYW5kIGFsbG93cyB0byB1c2Ugc3BlY2lmaWMgSS9PCiAgICBoYW5kbGVycyBmb3IgY2VydGFpbiBuYW1lcy48L3A+CiAgPC9saT4KPC91bD4KCjxwPlRoZSBnZW5lcmFsIG1lY2hhbmlzbSB1c2VkIHdoZW4gbG9hZGluZyBodHRwOi8vcnBtZmluZC5uZXQveG1sLmh0bWwgZm9yCmV4YW1wbGUgaW4gdGhlIEhUTUwgcGFyc2VyIGlzIHRoZSBmb2xsb3dpbmc6PC9wPgo8b2w+CiAgPGxpPlRoZSBkZWZhdWx0IGVudGl0eSBsb2FkZXIgY2FsbHMgPGNvZGU+eG1sTmV3SW5wdXRGcm9tRmlsZSgpPC9jb2RlPiB3aXRoCiAgICB0aGUgcGFyc2luZyBjb250ZXh0IGFuZCB0aGUgVVJJIHN0cmluZy48L2xpPgogIDxsaT50aGUgVVJJIHN0cmluZyBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGV4aXN0aW5nIHJlZ2lzdGVyZWQgaGFuZGxlcnMKICAgIHVzaW5nIHRoZWlyIG1hdGNoKCkgY2FsbGJhY2sgZnVuY3Rpb24sIGlmIHRoZSBIVFRQIG1vZHVsZSB3YXMgY29tcGlsZWQKICAgIGluLCBpdCBpcyByZWdpc3RlcmVkIGFuZCBpdHMgbWF0Y2goKSBmdW5jdGlvbiB3aWxsIHN1Y2NlZWRzPC9saT4KICA8bGk+dGhlIG9wZW4oKSBmdW5jdGlvbiBvZiB0aGUgaGFuZGxlciBpcyBjYWxsZWQgYW5kIGlmIHN1Y2Nlc3NmdWwgd2lsbAogICAgcmV0dXJuIGFuIEkvTyBJbnB1dCBidWZmZXI8L2xpPgogIDxsaT50aGUgcGFyc2VyIHdpbGwgdGhlIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGlzIGJ1ZmZlciBhbmQgcHJvZ3Jlc3NpdmVseQogICAgZmV0Y2ggaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzb3VyY2UsIGNhbGxpbmcgdGhlIHJlYWQoKSBmdW5jdGlvbiBvZiB0aGUKICAgIGhhbmRsZXIgdW50aWwgdGhlIHJlc291cmNlIGlzIGV4aGF1c3RlZDwvbGk+CiAgPGxpPmlmIGFuIGVuY29kaW5nIGNoYW5nZSBpcyBkZXRlY3RlZCBpdCB3aWxsIGJlIGluc3RhbGxlZCBvbiB0aGUgaW5wdXQKICAgIGJ1ZmZlciwgcHJvdmlkaW5nIGJ1ZmZlcmluZyBhbmQgZWZmaWNpZW50IHVzZSBvZiB0aGUgY29udmVyc2lvbgogIHJvdXRpbmVzPC9saT4KICA8bGk+b25jZSB0aGUgcGFyc2VyIGhhcyBmaW5pc2hlZCwgdGhlIGNsb3NlKCkgZnVuY3Rpb24gb2YgdGhlIGhhbmRsZXIgaXMKICAgIGNhbGxlZCBvbmNlIGFuZCB0aGUgSW5wdXQgYnVmZmVyIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyBhcmUKICBkZWFsbG9jYXRlZC48L2xpPgo8L29sPgoKPHA+VGhlIHVzZXIgZGVmaW5lZCBjYWxsYmFja3MgYXJlIGNoZWNrZWQgZmlyc3QgdG8gYWxsb3cgb3ZlcnJpZGluZyBvZiB0aGUKZGVmYXVsdCBsaWJ4bWwgSS9PIHJvdXRpbmVzLjwvcD4KCjxoMz48YSBuYW1lPSJiYXNpYyI+VGhlIGJhc2ljIGJ1ZmZlciB0eXBlPC9hPjwvaDM+Cgo8cD5BbGwgdGhlIGJ1ZmZlciBtYW5pcHVsYXRpb24gaGFuZGxpbmcgaXMgZG9uZSB1c2luZyB0aGUKPGNvZGU+eG1sQnVmZmVyPC9jb2RlPiB0eXBlIGRlZmluZSBpbiA8Y29kZT48YQpocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9saWJ4bWwtdHJlZS5odG1sIj50cmVlLmg8L2E+IDwvY29kZT53aGljaCBpcyBhCnJlc2l6YWJsZSBtZW1vcnkgYnVmZmVyLiBUaGUgYnVmZmVyIGFsbG9jYXRpb24gc3RyYXRlZ3kgY2FuIGJlIHNlbGVjdGVkIHRvIGJlCmVpdGhlciBiZXN0LWZpdCBvciB1c2UgYW4gZXhwb25lbnRpYWwgZG91Ymxpbmcgb25lIChDUFUgdnMuIG1lbW9yeSB1c2UKdHJhZGUtb2ZmKS4gVGhlIHZhbHVlcyBhcmUgPGNvZGU+WE1MX0JVRkZFUl9BTExPQ19FWEFDVDwvY29kZT4gYW5kCjxjb2RlPlhNTF9CVUZGRVJfQUxMT0NfRE9VQkxFSVQ8L2NvZGU+LCBhbmQgY2FuIGJlIHNldCBpbmRpdmlkdWFsbHkgb3Igb24gYQpzeXN0ZW0gd2lkZSBiYXNpcyB1c2luZyA8Y29kZT54bWxCdWZmZXJTZXRBbGxvY2F0aW9uU2NoZW1lKCk8L2NvZGU+LiBBIG51bWJlcgpvZiBmdW5jdGlvbnMgYWxsb3dzIHRvIG1hbmlwdWxhdGUgYnVmZmVycyB3aXRoIG5hbWVzIHN0YXJ0aW5nIHdpdGggdGhlCjxjb2RlPnhtbEJ1ZmZlci4uLjwvY29kZT4gcHJlZml4LjwvcD4KCjxoMz48YSBuYW1lPSJJbnB1dCI+SW5wdXQgSS9PIGhhbmRsZXJzPC9hPjwvaDM+Cgo8cD5BbiBJbnB1dCBJL08gaGFuZGxlciBpcyBhIHNpbXBsZSBzdHJ1Y3R1cmUKPGNvZGU+eG1sUGFyc2VySW5wdXRCdWZmZXI8L2NvZGU+IGNvbnRhaW5pbmcgYSBjb250ZXh0IGFzc29jaWF0ZWQgdG8gdGhlCnJlc291cmNlIChmaWxlIGRlc2NyaXB0b3IsIG9yIHBvaW50ZXIgdG8gYSBwcm90b2NvbCBoYW5kbGVyKSwgdGhlIHJlYWQoKSBhbmQKY2xvc2UoKSBjYWxsYmFja3MgdG8gdXNlIGFuZCBhbiB4bWxCdWZmZXIuIEFuZCBleHRyYSB4bWxCdWZmZXIgYW5kIGEgY2hhcnNldAplbmNvZGluZyBoYW5kbGVyIGFyZSBhbHNvIHByZXNlbnQgdG8gc3VwcG9ydCBjaGFyc2V0IGNvbnZlcnNpb24gd2hlbgpuZWVkZWQuPC9wPgoKPGgzPjxhIG5hbWU9Ik91dHB1dCI+T3V0cHV0IEkvTyBoYW5kbGVyczwvYT48L2gzPgoKPHA+QW4gT3V0cHV0IGhhbmRsZXIgPGNvZGU+eG1sT3V0cHV0QnVmZmVyPC9jb2RlPiBpcyBjb21wbGV0ZWx5IHNpbWlsYXIgdG8gYW4KSW5wdXQgb25lIGV4Y2VwdCB0aGUgY2FsbGJhY2tzIGFyZSB3cml0ZSgpIGFuZCBjbG9zZSgpLjwvcD4KCjxoMz48YSBuYW1lPSJlbnRpdGllcyI+VGhlIGVudGl0aWVzIGxvYWRlcjwvYT48L2gzPgoKPHA+VGhlIGVudGl0eSBsb2FkZXIgcmVzb2x2ZXMgcmVxdWVzdHMgZm9yIG5ldyBlbnRpdGllcyBhbmQgY3JlYXRlIGlucHV0cyBmb3IKdGhlIHBhcnNlci4gQ3JlYXRpbmcgYW4gaW5wdXQgZnJvbSBhIGZpbGVuYW1lIG9yIGFuIFVSSSBzdHJpbmcgaXMgZG9uZQp0aHJvdWdoIHRoZSB4bWxOZXdJbnB1dEZyb21GaWxlKCkgcm91dGluZS4gIFRoZSBkZWZhdWx0IGVudGl0eSBsb2FkZXIgZG8gbm90CmhhbmRsZSB0aGUgUFVCTElDIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIGFuIGVudGl0eSAoaWYgYW55KS4gU28gaXQganVzdApjYWxscyB4bWxOZXdJbnB1dEZyb21GaWxlKCkgd2l0aCB0aGUgU1lTVEVNIGlkZW50aWZpZXIgKHdoaWNoIGlzIG1hbmRhdG9yeSBpbgpYTUwpLjwvcD4KCjxwPklmIHlvdSB3YW50IHRvIGhvb2sgdXAgYSBjYXRhbG9nIG1lY2hhbmlzbSB0aGVuIHlvdSBzaW1wbHkgbmVlZCB0bwpvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnRpdHkgbG9hZGVyLCBoZXJlIGlzIGFuIGV4YW1wbGU6PC9wPgo8cHJlPiNpbmNsdWRlICZsdDtsaWJ4bWwveG1sSU8uaCZndDsKCnhtbEV4dGVybmFsRW50aXR5TG9hZGVyIGRlZmF1bHRMb2FkZXIgPSBOVUxMOwoKeG1sUGFyc2VySW5wdXRQdHIKeG1sTXlFeHRlcm5hbEVudGl0eUxvYWRlcihjb25zdCBjaGFyICpVUkwsIGNvbnN0IGNoYXIgKklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyc2VyQ3R4dFB0ciBjdHh0KSB7CiAgICB4bWxQYXJzZXJJbnB1dFB0ciByZXQ7CiAgICBjb25zdCBjaGFyICpmaWxlSUQgPSBOVUxMOwogICAgLyogbG9va3VwIGZvciB0aGUgZmlsZUlEIGRlcGVuZGluZyBvbiBJRCAqLwoKICAgIHJldCA9IHhtbE5ld0lucHV0RnJvbUZpbGUoY3R4dCwgZmlsZUlEKTsKICAgIGlmIChyZXQgIT0gTlVMTCkKICAgICAgICByZXR1cm4ocmV0KTsKICAgIGlmIChkZWZhdWx0TG9hZGVyICE9IE5VTEwpCiAgICAgICAgcmV0ID0gZGVmYXVsdExvYWRlcihVUkwsIElELCBjdHh0KTsKICAgIHJldHVybihyZXQpOwp9CgppbnQgbWFpbiguLikgewogICAgLi4uCgogICAgLyoKICAgICAqIEluc3RhbGwgb3VyIG93biBlbnRpdHkgbG9hZGVyCiAgICAgKi8KICAgIGRlZmF1bHRMb2FkZXIgPSB4bWxHZXRFeHRlcm5hbEVudGl0eUxvYWRlcigpOwogICAgeG1sU2V0RXh0ZXJuYWxFbnRpdHlMb2FkZXIoeG1sTXlFeHRlcm5hbEVudGl0eUxvYWRlcik7CgogICAgLi4uCn08L3ByZT4KCjxoMz48YSBuYW1lPSJFeGFtcGxlMiI+RXhhbXBsZSBvZiBjdXN0b21pemVkIEkvTzwvYT48L2gzPgoKPHA+VGhpcyBleGFtcGxlIGNvbWUgZnJvbSA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvbWVzc2FnZXMvMDcwOC5odG1sIj5hCnJlYWwgdXNlIGNhc2U8L2E+LCAgeG1sRG9jRHVtcCgpIGNsb3NlcyB0aGUgRklMRSAqIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24KYW5kIHRoaXMgd2FzIGEgcHJvYmxlbS4gVGhlIDxhCmhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9tZXNzYWdlcy8wNzExLmh0bWwiPnNvbHV0aW9uPC9hPiB3YXMgdG8gcmVkZWZpbmUgYQpuZXcgb3V0cHV0IGhhbmRsZXIgd2l0aCB0aGUgY2xvc2luZyBjYWxsIGRlYWN0aXZhdGVkOjwvcD4KPG9sPgogIDxsaT5GaXJzdCBkZWZpbmUgYSBuZXcgSS9PIG91dHB1dCBhbGxvY2F0b3Igd2hlcmUgdGhlIG91dHB1dCBkb24ndCBjbG9zZQogICAgdGhlIGZpbGU6CiAgICA8cHJlPnhtbE91dHB1dEJ1ZmZlclB0cgp4bWxPdXRwdXRCdWZmZXJDcmVhdGVPd24oRklMRSAqZmlsZSwgeG1sQ2hhckVuY29kaW5nSGFuZGxlclB0ciBlbmNvZGVyKSB7CqCgoKB4bWxPdXRwdXRCdWZmZXJQdHIgcmV0OwqgoKCgCqCgoKBpZiAoeG1sT3V0cHV0Q2FsbGJhY2tJbml0aWFsaXplZCA9PSAwKQqgoKCgoKCgoHhtbFJlZ2lzdGVyRGVmYXVsdE91dHB1dENhbGxiYWNrcygpOwoKoKCgoGlmIChmaWxlID09IE5VTEwpIHJldHVybihOVUxMKTsKoKCgoHJldCA9IHhtbEFsbG9jT3V0cHV0QnVmZmVyKGVuY29kZXIpOwqgoKCgaWYgKHJldCAhPSBOVUxMKSB7CqCgoKCgoKCgcmV0LSZndDtjb250ZXh0ID0gZmlsZTsKoKCgoKCgoKByZXQtJmd0O3dyaXRlY2FsbGJhY2sgPSB4bWxGaWxlV3JpdGU7CqCgoKCgoKCgcmV0LSZndDtjbG9zZWNhbGxiYWNrID0gTlVMTDsgIC8qIE5vIGNsb3NlIGNhbGxiYWNrICovCqCgoKB9CqCgoKByZXR1cm4ocmV0KTsgPGJyPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9IDwvcHJlPgogIDwvbGk+CiAgPGxpPkFuZCB0aGVuIHVzZSBpdCB0byBzYXZlIHRoZSBkb2N1bWVudDoKICAgIDxwcmU+RklMRSAqZjsKeG1sT3V0cHV0QnVmZmVyUHRyIG91dHB1dDsKeG1sRG9jUHRyIGRvYzsKaW50IHJlczsKCmYgPSAuLi4KZG9jID0gLi4uLgoKb3V0cHV0ID0geG1sT3V0cHV0QnVmZmVyQ3JlYXRlT3duKGYsIE5VTEwpOwpyZXMgPSB4bWxTYXZlRmlsZVRvKG91dHB1dCwgZG9jLCBOVUxMKTsKICAgIDwvcHJlPgogIDwvbGk+Cjwvb2w+Cgo8aDI+PGEgbmFtZT0iQ2F0YWxvZyI+Q2F0YWxvZyBzdXBwb3J0PC9hPjwvaDI+Cgo8cD5UYWJsZSBvZiBDb250ZW50OjwvcD4KPG9sPgogIDxsaT48YSBocmVmPSJHZW5lcmFsMiI+R2VuZXJhbCBvdmVydmlldzwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjZGVmaW5pdGlvbiI+VGhlIGRlZmluaXRpb248L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1NpbXBsZSI+VXNpbmcgY2F0YWxvZ3M8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1NvbWUiPlNvbWUgZXhhbXBsZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3JlZmVyZW5jZSI+SG93IHRvIHR1bmUgIGNhdGFsb2cgdXNhZ2U8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3ZhbGlkYXRlIj5Ib3cgdG8gZGVidWcgY2F0YWxvZyBwcm9jZXNzaW5nPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNEZWNsYXJpbmciPkhvdyB0byBjcmVhdGUgYW5kIG1haW50YWluIGNhdGFsb2dzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNpbXBsZW1lbnRvIj5UaGUgaW1wbGVtZW50b3IgY29ybmVyIHF1aWNrIHJldmlldyBvZiB0aGUKICBBUEk8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI090aGVyIj5PdGhlciByZXNvdXJjZXM8L2E+PC9saT4KPC9vbD4KCjxoMz48YSBuYW1lPSJHZW5lcmFsMiI+R2VuZXJhbCBvdmVydmlldzwvYT48L2gzPgoKPHA+V2hhdCBpcyBhIGNhdGFsb2c/IEJhc2ljYWxseSBpdCdzIGEgbG9va3VwIG1lY2hhbmlzbSB1c2VkIHdoZW4gYW4gZW50aXR5CihhIGZpbGUgb3IgYSByZW1vdGUgcmVzb3VyY2UpIHJlZmVyZW5jZXMgYW5vdGhlciBlbnRpdHkuIFRoZSBjYXRhbG9nIGxvb2t1cAppcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZSBtb21lbnQgdGhlIHJlZmVyZW5jZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzb2Z0d2FyZQooWE1MIHBhcnNlciwgc3R5bGVzaGVldCBwcm9jZXNzaW5nLCBvciBldmVuIGltYWdlcyByZWZlcmVuY2VkIGZvciBpbmNsdXNpb24KaW4gYSByZW5kZXJpbmcpIGFuZCB0aGUgdGltZSB3aGVyZSBsb2FkaW5nIHRoYXQgcmVzb3VyY2UgaXMgYWN0dWFsbHkKc3RhcnRlZC48L3A+Cgo8cD5JdCBpcyBiYXNpY2FsbHkgdXNlZCBmb3IgMyB0aGluZ3M6PC9wPgo8dWw+CiAgPGxpPm1hcHBpbmcgZnJvbSAibG9naWNhbCIgbmFtZXMsIHRoZSBwdWJsaWMgaWRlbnRpZmllcnMgYW5kIGEgbW9yZQogICAgY29uY3JldGUgbmFtZSB1c2FibGUgZm9yIGRvd25sb2FkIChhbmQgVVJJKS4gRm9yIGV4YW1wbGUgaXQgY2FuIGFzc29jaWF0ZQogICAgdGhlIGxvZ2ljYWwgbmFtZQogICAgPHA+Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiI8L3A+CiAgICA8cD5vZiB0aGUgRG9jQm9vayA0LjEuMiBYTUwgRFREIHdpdGggdGhlIGFjdHVhbCBVUkwgd2hlcmUgaXQgY2FuIGJlCiAgICBkb3dubG9hZGVkPC9wPgogICAgPHA+aHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQ8L3A+CiAgPC9saT4KICA8bGk+cmVtYXBwaW5nIGZyb20gYSBnaXZlbiBVUkwgdG8gYW5vdGhlciBvbmUsIGxpa2UgYW4gSFRUUCBpbmRpcmVjdGlvbgogICAgc2F5aW5nIHRoYXQKICAgIDxwPiJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlcy90ci54c2wiPC9wPgogICAgPHA+c2hvdWxkIHJlYWxseSBiZSBsb29rZWQgYXQ8L3A+CiAgICA8cD4iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZXMvZW50aXR5L3N0eWxlc2hlZXRzL2Jhc2UvdHIueHNsIjwvcD4KICA8L2xpPgogIDxsaT5wcm92aWRpbmcgYSBsb2NhbCBjYWNoZSBtZWNoYW5pc20gYWxsb3dpbmcgdG8gbG9hZCB0aGUgZW50aXRpZXMKICAgIGFzc29jaWF0ZWQgdG8gcHVibGljIGlkZW50aWZpZXJzIG9yIHJlbW90ZSByZXNvdXJjZXMsIHRoaXMgaXMgYSByZWFsbHkKICAgIGltcG9ydGFudCBmZWF0dXJlIGZvciBhbnkgc2lnbmlmaWNhbnQgZGVwbG95bWVudCBvZiBYTUwgb3IgU0dNTCBzaW5jZSBpdAogICAgYWxsb3dzIHRvIGF2b2lkIHRoZSBhbGVhcyBhbmQgZGVsYXlzIGFzc29jaWF0ZWQgdG8gZmV0Y2hpbmcgcmVtb3RlCiAgICByZXNvdXJjZXMuPC9saT4KPC91bD4KCjxoMz48YSBuYW1lPSJkZWZpbml0aW9uIj5UaGUgZGVmaW5pdGlvbnM8L2E+PC9oMz4KCjxwPkxpYnhtbCwgYXMgb2YgMi40LjMgaW1wbGVtZW50cyAyIGtpbmQgb2YgY2F0YWxvZ3M6PC9wPgo8dWw+CiAgPGxpPnRoZSBvbGRlciBTR01MIGNhdGFsb2dzLCB0aGUgb2ZmaWNpYWwgc3BlYyBpcyAgU0dNTCBPcGVuIFRlY2huaWNhbAogICAgUmVzb2x1dGlvbiBUUjk0MDE6MTk5NywgYnV0IGlzIGJldHRlciB1bmRlcnN0b29kIGJ5IHJlYWRpbmcgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cuamNsYXJrLmNvbS9zcC9jYXRhbG9nLmh0bSI+dGhlIFNQIENhdGFsb2cgcGFnZTwvYT4gZnJvbQogICAgSmFtZXMgQ2xhcmsuIFRoaXMgaXMgcmVsYXRpdmVseSBvbGQgYW5kIG5vdCB0aGUgcHJlZmVycmVkIG1vZGUgb2YKICAgIG9wZXJhdGlvbiBvZiBsaWJ4bWwuPC9saT4KICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9zcGVjLmh0bWwiPlhNTAogICAgQ2F0YWxvZ3M8L2E+IGlzIGZhciBtb3JlIGZsZXhpYmxlLCBtb3JlIHJlY2VudCwgdXNlcyBhbiBYTUwgc3ludGF4IGFuZAogICAgc2hvdWxkIHNjYWxlIHF1aXRlIGJldHRlci4gVGhpcyBpcyB0aGUgZGVmYXVsdCBvcHRpb24gb2YgbGlieG1sLjwvbGk+CjwvdWw+Cgo8cD48L3A+Cgo8aDM+PGEgbmFtZT0iU2ltcGxlIj5Vc2luZyBjYXRhbG9nPC9hPjwvaDM+Cgo8cD5JbiBhIG5vcm1hbCBlbnZpcm9ubWVudCBsaWJ4bWwgd2lsbCBieSBkZWZhdWx0IGNoZWNrIHRoZSBwcmVzZW5jZSBvZiBhCmNhdGFsb2cgaW4gL2V0Yy94bWwvY2F0YWxvZywgYW5kIGFzc3VtaW5nIGl0IGhhcyBiZWVuIGNvcnJlY3RseSBwb3B1bGF0ZWQsCnRoZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgdG8gdGhlIGRvY3VtZW50IHVzZXIuIFRvIHRha2UgYQpjb25jcmV0ZSBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgYXV0aG9yaW5nIGEgRG9jQm9vayBkb2N1bWVudCwgdGhpcyBvbmUKc3RhcnRzIHdpdGggdGhlIGZvbGxvd2luZyBET0NUWVBFIGRlZmluaXRpb246PC9wPgo8cHJlPiZsdDs/eG1sIHZlcnNpb249JzEuMCc/Jmd0OwombHQ7IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL05vcm1hbiBXYWxzaC8vRFREIERvY0JrIFhNTCBWMy4xLjQvL0VOIgogICAgICAgICAgImh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2sveG1sLzMuMS40L2RiM3htbC5kdGQiJmd0OzwvcHJlPgoKPHA+V2hlbiB2YWxpZGF0aW5nIHRoZSBkb2N1bWVudCB3aXRoIGxpYnhtbCwgdGhlIGNhdGFsb2cgd2lsbCBiZQphdXRvbWF0aWNhbGx5IGNvbnN1bHRlZCB0byBsb29rdXAgdGhlIHB1YmxpYyBpZGVudGlmaWVyICItLy9Ob3JtYW4gV2Fsc2gvL0RURApEb2NCayBYTUwgVjMuMS40Ly9FTiIgYW5kIHRoZSBzeXN0ZW0gaWRlbnRpZmllcgoiaHR0cDovL253YWxzaC5jb20vZG9jYm9vay94bWwvMy4xLjQvZGIzeG1sLmR0ZCIsIGFuZCBpZiB0aGVzZSBlbnRpdGllcyBoYXZlCmJlZW4gaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFuZCB0aGUgY2F0YWxvZ3MgYWN0dWFsbHkgcG9pbnQgdG8gdGhlbSwgbGlieG1sCndpbGwgZmV0Y2ggdGhlbSBmcm9tIHRoZSBsb2NhbCBkaXNrLjwvcD4KCjxwIHN0eWxlPSJmb250LXNpemU6IDEwcHQiPjxzdHJvbmc+Tm90ZTwvc3Ryb25nPjogUmVhbGx5IGRvbid0IHVzZSB0aGlzCkRPQ1RZUEUgZXhhbXBsZSBpdCdzIGEgcmVhbGx5IG9sZCB2ZXJzaW9uLCBidXQgaXMgZmluZSBhcyBhbiBleGFtcGxlLjwvcD4KCjxwPkxpYnhtbCB3aWxsIGNoZWNrIHRoZSBjYXRhbG9nIGVhY2ggdGltZSB0aGF0IGl0IGlzIHJlcXVlc3RlZCB0byBsb2FkIGFuCmVudGl0eSwgdGhpcyBpbmNsdWRlcyBEVEQsIGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcywgc3R5bGVzaGVldHMsIGV0YyAuLi4gSWYKeW91ciBzeXN0ZW0gaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYWxsIHRoZSBhdXRob3JpbmcgcGhhc2UgYW5kIHByb2Nlc3NpbmcKc2hvdWxkIHVzZSBvbmx5IGxvY2FsIGZpbGVzLCBldmVuIGlmIHlvdXIgZG9jdW1lbnQgc3RheXMgcG9ydGFibGUgYmVjYXVzZSBpdAp1c2VzIHRoZSBjYW5vbmljYWwgcHVibGljIGFuZCBzeXN0ZW0gSUQsIHJlZmVyZW5jaW5nIHRoZSByZW1vdGUgZG9jdW1lbnQuPC9wPgoKPGgzPjxhIG5hbWU9IlNvbWUiPlNvbWUgZXhhbXBsZXM6PC9hPjwvaDM+Cgo8cD5IZXJlIGlzIGEgY291cGxlIG9mIGZyYWdtZW50cyBmcm9tIFhNTCBDYXRhbG9ncyB1c2VkIGluIGxpYnhtbCBlYXJseQpyZWdyZXNzaW9uIHRlc3RzIGluIDxjb2RlPnRlc3QvY2F0YWxvZ3M8L2NvZGU+IDo8L3A+CjxwcmU+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CiZsdDshRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAKICAgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCiAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIiZndDsKJmx0O2NhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciJmd0OwogICZsdDtwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKICAgdXJpPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIvJmd0OwouLi48L3ByZT4KCjxwPlRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBhIGNhdGFsb2cgZm9yIERvY0Jvb2sgNC4xLjIsIFhNTCBDYXRhbG9ncyBhcmUKd3JpdHRlbiBpbiBYTUwsICB0aGVyZSBpcyBhIHNwZWNpZmljIG5hbWVzcGFjZSBmb3IgY2F0YWxvZyBlbGVtZW50cwoidXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIuIFRoZSBmaXJzdCBlbnRyeSBpbiB0aGlzCmNhdGFsb2cgaXMgYSA8Y29kZT5wdWJsaWM8L2NvZGU+IG1hcHBpbmcgaXQgYWxsb3dzIHRvIGFzc29jaWF0ZSBhIFB1YmxpYwpJZGVudGlmaWVyIHdpdGggYW4gVVJJLjwvcD4KPHByZT4uLi4KICAgICZsdDtyZXdyaXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8iCiAgICAgICAgICAgICAgICAgICByZXdyaXRlUHJlZml4PSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay8iLyZndDsKLi4uPC9wcmU+Cgo8cD5BIDxjb2RlPnJld3JpdGVTeXN0ZW08L2NvZGU+IGlzIGEgdmVyeSBwb3dlcmZ1bCBpbnN0cnVjdGlvbiwgaXQgc2F5cyB0aGF0CmFueSBVUkkgc3RhcnRpbmcgd2l0aCBhIGdpdmVuIHByZWZpeCBzaG91bGQgYmUgbG9va2VkIGF0IGFub3RoZXIgIFVSSQpjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgdGhlIHByZWZpeCB3aXRoIGFuIG5ldyBvbmUuIEluIGVmZmVjdCB0aGlzIGFjdHMgbGlrZQphIGNhY2hlIHN5c3RlbSBmb3IgYSBmdWxsIGFyZWEgb2YgdGhlIFdlYi4gSW4gcHJhY3RpY2UgaXQgaXMgZXh0cmVtZWx5IHVzZWZ1bAp3aXRoIGEgZmlsZSBwcmVmaXggaWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgY29weSBvZiB0aG9zZSByZXNvdXJjZXMgb24geW91cgpsb2NhbCBzeXN0ZW0uPC9wPgo8cHJlPi4uLgombHQ7ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBYTUwgQ2F0YWxvZyAvLyIKICAgICAgICAgICAgICAgIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rLnhtbCIvJmd0OwombHQ7ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIgogICAgICAgICAgICAgICAgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sueG1sIi8mZ3Q7CiZsdDtkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIgogICAgICAgICAgICAgICAgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sueG1sIi8mZ3Q7CiZsdDtkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svIgogICAgICAgICAgICAgICAgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sueG1sIi8mZ3Q7CiZsdDtkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIKICAgICAgICAgICAgICAgIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rLnhtbCIvJmd0OwouLi48L3ByZT4KCjxwPkRlbGVnYXRpb24gaXMgdGhlIGNvcmUgZmVhdHVyZXMgd2hpY2ggYWxsb3dzIHRvIGJ1aWxkIGEgdHJlZSBvZiBjYXRhbG9ncywKZWFzaWVyIHRvIG1haW50YWluIHRoYW4gYSBzaW5nbGUgY2F0YWxvZywgYmFzZWQgb24gUHVibGljIElkZW50aWZpZXIsIFN5c3RlbQpJZGVudGlmaWVyIG9yIFVSSSBwcmVmaXhlcyBpdCBpbnN0cnVjdHMgdGhlIGNhdGFsb2cgc29mdHdhcmUgdG8gbG9vayB1cAplbnRyaWVzIGluIGFub3RoZXIgcmVzb3VyY2UuIFRoaXMgZmVhdHVyZSBhbGxvdyB0byBidWlsZCBoaWVyYXJjaGllcyBvZgpjYXRhbG9ncywgdGhlIHNldCBvZiBlbnRyaWVzIHByZXNlbnRlZCBzaG91bGQgYmUgc3VmZmljaWVudCB0byByZWRpcmVjdCB0aGUKcmVzb2x1dGlvbiBvZiBhbGwgRG9jQm9vayByZWZlcmVuY2VzIHRvIHRoZSBzcGVjaWZpYyBjYXRhbG9nIGluCjxjb2RlPi91c3Ivc2hhcmUveG1sL2RvY2Jvb2sueG1sPC9jb2RlPiB0aGlzIG9uZSBpbiB0dXJuIGNvdWxkIGRlbGVnYXRlIGFsbApyZWZlcmVuY2VzIGZvciBEb2NCb29rIDQuMi4xIHRvIGEgc3BlY2lmaWMgY2F0YWxvZyBpbnN0YWxsZWQgYXQgdGhlIHNhbWUgdGltZQphcyB0aGUgRG9jQm9vayByZXNvdXJjZXMgb24gdGhlIGxvY2FsIG1hY2hpbmUuPC9wPgoKPGgzPjxhIG5hbWU9InJlZmVyZW5jZSI+SG93IHRvIHR1bmUgY2F0YWxvZyB1c2FnZTo8L2E+PC9oMz4KCjxwPlRoZSB1c2VyIGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgY2F0YWxvZyBiZWhhdmlvdXIgYnkgcmVkaXJlY3RpbmcgcXVlcmllcwp0byBpdHMgb3duIHNldCBvZiBjYXRhbG9ncywgdGhpcyBjYW4gYmUgZG9uZSBieSBzZXR0aW5nIHRoZQo8Y29kZT5YTUxfQ0FUQUxPR19GSUxFUzwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBsaXN0IG9mIGNhdGFsb2dzLCBhbgplbXB0eSBvbmUgc2hvdWxkIGRlYWN0aXZhdGUgbG9hZGluZyB0aGUgZGVmYXVsdCA8Y29kZT4vZXRjL3htbC9jYXRhbG9nPC9jb2RlPgpkZWZhdWx0IGNhdGFsb2c8L3A+Cgo8aDM+PGEgbmFtZT0idmFsaWRhdGUiPkhvdyB0byBkZWJ1ZyBjYXRhbG9nIHByb2Nlc3Npbmc6PC9hPjwvaDM+Cgo8cD5TZXR0aW5nIHVwIHRoZSA8Y29kZT5YTUxfREVCVUdfQ0FUQUxPRzwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbAptYWtlIGxpYnhtbCBvdXRwdXQgZGVidWdnaW5nIGluZm9ybWF0aW9ucyBmb3IgZWFjaCBjYXRhbG9nIG9wZXJhdGlvbnMsIGZvcgpleGFtcGxlOjwvcD4KPHByZT5vcmNoaXM6fi9YTUwgLSZndDsgeG1sbGludCAtLW1lbW9yeSAtLW5vb3V0IHRlc3QvZW50Mgp3YXJuaW5nOiBmYWlsZWQgdG8gbG9hZCBleHRlcm5hbCBlbnRpdHkgInRpdGxlLnhtbCIKb3JjaGlzOn4vWE1MIC0mZ3Q7IGV4cG9ydCBYTUxfREVCVUdfQ0FUQUxPRz0Kb3JjaGlzOn4vWE1MIC0mZ3Q7IHhtbGxpbnQgLS1tZW1vcnkgLS1ub291dCB0ZXN0L2VudDIKRmFpbGVkIHRvIHBhcnNlIGNhdGFsb2cgL2V0Yy94bWwvY2F0YWxvZwpGYWlsZWQgdG8gcGFyc2UgY2F0YWxvZyAvZXRjL3htbC9jYXRhbG9nCndhcm5pbmc6IGZhaWxlZCB0byBsb2FkIGV4dGVybmFsIGVudGl0eSAidGl0bGUueG1sIgpDYXRhbG9ncyBjbGVhbnVwCm9yY2hpczp+L1hNTCAtJmd0OyA8L3ByZT4KCjxwPlRoZSB0ZXN0L2VudDIgcmVmZXJlbmNlcyBhbiBlbnRpdHksIHJ1bm5pbmcgdGhlIHBhcnNlciBmcm9tIG1lbW9yeSBtYWtlcwp0aGUgYmFzZSBVUkkgdW5hdmFpbGFibGUgYW5kIHRoZSB0aGUgInRpdGxlLnhtbCIgZW50aXR5IGNhbm5vdCBiZSBsb2FkZWQuClNldHRpbmcgdXAgdGhlIGRlYnVnIGVudmlyb25tZW50IHZhcmlhYmxlIGFsbG93cyB0byBkZXRlY3QgdGhhdCBhbiBhdHRlbXB0IGlzCm1hZGUgdG8gbG9hZCB0aGUgPGNvZGU+L2V0Yy94bWwvY2F0YWxvZzwvY29kZT4gYnV0IHNpbmNlIGl0J3Mgbm90IHByZXNlbnQgdGhlCnJlc29sdXRpb24gZmFpbHMuPC9wPgoKPHA+QnV0IHRoZSBtb3N0IGFkdmFuY2VkIHdheSB0byBkZWJ1ZyBYTUwgY2F0YWxvZyBwcm9jZXNzaW5nIGlzIHRvIHVzZSB0aGUKPHN0cm9uZz54bWxjYXRhbG9nPC9zdHJvbmc+IGNvbW1hbmQgc2hpcHBlZCB3aXRoIGxpYnhtbDIsIGl0IGFsbG93cyB0byBsb2FkCmNhdGFsb2dzIGFuZCBtYWtlIHJlc29sdXRpb24gcXVlcmllcyB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi4gVGhpcyBpcyBhbHNvCnVzZWQgZm9yIHRoZSByZWdyZXNzaW9uIHRlc3RzOjwvcD4KPHByZT5vcmNoaXM6fi9YTUwgLSZndDsgLi94bWxjYXRhbG9nIHRlc3QvY2F0YWxvZ3MvZG9jYm9vay54bWwgXAogICAgICAgICAgICAgICAgICAgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQKb3JjaGlzOn4vWE1MIC0mZ3Q7IDwvcHJlPgoKPHA+Rm9yIGRlYnVnZ2luZyB3aGF0IGlzIGdvaW5nIG9uLCBhZGRpbmcgb25lIC12IGZsYWdzIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkKbGV2ZWwgdG8gaW5kaWNhdGUgdGhlIHByb2Nlc3NpbmcgZG9uZSAoYWRkaW5nIGEgc2Vjb25kIGZsYWcgYWxzbyBpbmRpY2F0ZQp3aGF0IGVsZW1lbnRzIGFyZSByZWNvZ25pemVkIGF0IHBhcnNpbmcpOjwvcD4KPHByZT5vcmNoaXM6fi9YTUwgLSZndDsgLi94bWxjYXRhbG9nIC12IHRlc3QvY2F0YWxvZ3MvZG9jYm9vay54bWwgXAogICAgICAgICAgICAgICAgICAgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKUGFyc2luZyBjYXRhbG9nIHRlc3QvY2F0YWxvZ3MvZG9jYm9vay54bWwncyBjb250ZW50CkZvdW5kIHB1YmxpYyBtYXRjaCAtLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4KaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQKQ2F0YWxvZ3MgY2xlYW51cApvcmNoaXM6fi9YTUwgLSZndDsgPC9wcmU+Cgo8cD5BIHNoZWxsIGludGVyZmFjZSBpcyBhbHNvIGF2YWlsYWJsZSB0byBkZWJ1ZyBhbmQgcHJvY2VzcyBtdWx0aXBsZSBxdWVyaWVzCihhbmQgZm9yIHJlZ3Jlc3Npb24gdGVzdHMpOjwvcD4KPHByZT5vcmNoaXM6fi9YTUwgLSZndDsgLi94bWxjYXRhbG9nIC1zaGVsbCB0ZXN0L2NhdGFsb2dzL2RvY2Jvb2sueG1sIFwKICAgICAgICAgICAgICAgICAgICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCiZndDsgaGVscCAgIApDb21tYW5kcyBhdmFpbGFibGU6CnB1YmxpYyBQdWJsaWNJRDogbWFrZSBhIFBVQkxJQyBpZGVudGlmaWVyIGxvb2t1cApzeXN0ZW0gU3lzdGVtSUQ6IG1ha2UgYSBTWVNURU0gaWRlbnRpZmllciBsb29rdXAKcmVzb2x2ZSBQdWJsaWNJRCBTeXN0ZW1JRDogZG8gYSBmdWxsIHJlc29sdmVyIGxvb2t1cAphZGQgJ3R5cGUnICdvcmlnJyAncmVwbGFjZScgOiBhZGQgYW4gZW50cnkKZGVsICd2YWx1ZXMnIDogcmVtb3ZlIHZhbHVlcwpkdW1wOiBwcmludCB0aGUgY3VycmVudCBjYXRhbG9nIHN0YXRlCmRlYnVnOiBpbmNyZWFzZSB0aGUgdmVyYm9zaXR5IGxldmVsCnF1aWV0OiBkZWNyZWFzZSB0aGUgdmVyYm9zaXR5IGxldmVsCmV4aXQ6ICBxdWl0IHRoZSBzaGVsbAomZ3Q7IHB1YmxpYyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgpodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZAomZ3Q7IHF1aXQKb3JjaGlzOn4vWE1MIC0mZ3Q7IDwvcHJlPgoKPHA+VGhpcyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCBkZWJ1Z2dpbmcgcHVycG9zZSwgdGhpcyB3YXMgYWN0dWFsbHkKdXNlZCBoZWF2aWx5IHRvIGRlYnVnIHRoZSBYTUwgQ2F0YWxvZyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuPC9wPgoKPGgzPjxhIG5hbWU9IkRlY2xhcmluZyI+SG93IHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW48L2E+IGNhdGFsb2dzOjwvaDM+Cgo8cD5CYXNpY2FsbHkgWE1MIENhdGFsb2dzIGFyZSBYTUwgZmlsZXMsIHlvdSBjYW4gZWl0aGVyIHVzZSBYTUwgdG9vbHMgdG8KbWFuYWdlIHRoZW0gb3IgdXNlICA8c3Ryb25nPnhtbGNhdGFsb2c8L3N0cm9uZz4gZm9yIHRoaXMuIFRoZSBiYXNpYyBzdGVwIGlzCnRvIGNyZWF0ZSBhIGNhdGFsb2cgdGhlIC1jcmVhdGUgb3B0aW9uIHByb3ZpZGUgdGhpcyBmYWNpbGl0eTo8L3A+CjxwcmU+b3JjaGlzOn4vWE1MIC0mZ3Q7IC4veG1sY2F0YWxvZyAtLWNyZWF0ZSB0c3QueG1sCiZsdDs/eG1sIHZlcnNpb249IjEuMCI/Jmd0OwombHQ7IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCiAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIiZndDsKJmx0O2NhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciLyZndDsKb3JjaGlzOn4vWE1MIC0mZ3Q7IDwvcHJlPgoKPHA+QnkgZGVmYXVsdCB4bWxjYXRhbG9nIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgY2F0YWxvZyBhbmQgc2F2ZSB0aGUKcmVzdWx0IG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQsIHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIC1ub291dApvcHRpb24uIFRoZSA8Y29kZT4tYWRkPC9jb2RlPiBjb21tYW5kIGFsbG93cyB0byBhZGQgZW50cmllcyBpbiB0aGUKY2F0YWxvZzo8L3A+CjxwcmU+b3JjaGlzOn4vWE1MIC0mZ3Q7IC4veG1sY2F0YWxvZyAtLW5vb3V0IC0tY3JlYXRlIC0tYWRkICJwdWJsaWMiIFwKICAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiBcCiAgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQgdHN0LnhtbApvcmNoaXM6fi9YTUwgLSZndDsgY2F0IHRzdC54bWwKJmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CiZsdDshRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgXAogICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIiZndDsKJmx0O2NhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciJmd0OwombHQ7cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCiAgICAgICAgdXJpPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIvJmd0OwombHQ7L2NhdGFsb2cmZ3Q7Cm9yY2hpczp+L1hNTCAtJmd0OyA8L3ByZT4KCjxwPlRoZSA8Y29kZT4tYWRkPC9jb2RlPiBvcHRpb24gd2lsbCBhbHdheXMgdGFrZSAzIHBhcmFtZXRlcnMgZXZlbiBpZiBzb21lIG9mCnRoZSBYTUwgQ2F0YWxvZyBjb25zdHJ1Y3RzIChsaWtlIG5leHRDYXRhbG9nKSB3aWxsIGhhdmUgb25seSBhIHNpbmdsZQphcmd1bWVudCwganVzdCBwYXNzIGEgdGhpcmQgZW1wdHkgc3RyaW5nLCBpdCB3aWxsIGJlIGlnbm9yZWQuPC9wPgoKPHA+U2ltaWxhcmx5IHRoZSA8Y29kZT4tZGVsPC9jb2RlPiBvcHRpb24gcmVtb3ZlIG1hdGNoaW5nIGVudHJpZXMgZnJvbSB0aGUKY2F0YWxvZzo8L3A+CjxwcmU+b3JjaGlzOn4vWE1MIC0mZ3Q7IC4veG1sY2F0YWxvZyAtLWRlbCBcCiAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiB0c3QueG1sCiZsdDs/eG1sIHZlcnNpb249IjEuMCI/Jmd0OwombHQ7IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCiAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCImZ3Q7CiZsdDtjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIi8mZ3Q7Cm9yY2hpczp+L1hNTCAtJmd0OyA8L3ByZT4KCjxwPlRoZSBjYXRhbG9nIGlzIG5vdyBlbXB0eS4gTm90ZSB0aGF0IHRoZSBtYXRjaGluZyBvZiA8Y29kZT4tZGVsPC9jb2RlPiBpcwpleGFjdCBhbmQgd291bGQgaGF2ZSB3b3JrZWQgaW4gYSBzaW1pbGFyIGZhc2hpb24gd2l0aCB0aGUgUHVibGljIElECnN0cmluZy48L3A+Cgo8cD5UaGlzIGlzIHJ1ZGltZW50YXJ5IGJ1dCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBtYW5hZ2UgYSBub3QgdG9vIGNvbXBsZXgKY2F0YWxvZyB0cmVlIG9mIHJlc291cmNlcy48L3A+Cgo8aDM+PGEgbmFtZT0iaW1wbGVtZW50byI+VGhlIGltcGxlbWVudG9yIGNvcm5lciBxdWljayByZXZpZXcgb2YgdGhlCkFQSTo8L2E+PC9oMz4KCjxwPkZpcnN0LCBhbmQgbGlrZSBmb3IgZXZlcnkgb3RoZXIgbW9kdWxlIG9mIGxpYnhtbCwgdGhlcmUgaXMgYW4KYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgPGEgaHJlZj0iaHRtbC9saWJ4bWwtY2F0YWxvZy5odG1sIj5BUEkgcGFnZSBmb3IKY2F0YWxvZyBzdXBwb3J0PC9hPi48L3A+Cgo8cD5UaGUgaGVhZGVyIGZvciB0aGUgY2F0YWxvZyBpbnRlcmZhY2VzIHNob3VsZCBiZSBpbmNsdWRlZCBhczo8L3A+CjxwcmU+I2luY2x1ZGUgJmx0O2xpYnhtbC9jYXRhbG9nLmgmZ3Q7PC9wcmU+Cgo8cD5UaGUgQVBJIGlzIHZvbHVudGFyaWx5IGtlcHQgdmVyeSBzaW1wbGUuIEZpcnN0IGl0IGlzIG5vdCBvYnZpb3VzIHRoYXQKYXBwbGljYXRpb25zIHJlYWxseSBuZWVkIGFjY2VzcyB0byBpdCBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YKbGlieG1sIChOb3RlOiBpdCBpcyBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IG92ZXJyaWRlIGxpYnhtbCBkZWZhdWx0IGNhdGFsb2cgYnkKdXNpbmcgPGEgaHJlZj0iaHRtbC9saWJ4bWwtcGFyc2VyLmh0bWwiPnhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyPC9hPiB0bwpwbHVnIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIHJlc29sdmVyKS48L3A+Cgo8cD5CYXNpY2FsbHkgbGlieG1sIHN1cHBvcnQgMiBjYXRhbG9nIGxpc3RzOjwvcD4KPHVsPgogIDxsaT50aGUgZGVmYXVsdCBvbmUsIGdsb2JhbCBzaGFyZWQgYnkgYWxsIHRoZSBhcHBsaWNhdGlvbjwvbGk+CiAgPGxpPmEgcGVyLWRvY3VtZW50IGNhdGFsb2csIHRoaXMgb25lIGlzIGJ1aWx0IGlmIHRoZSBkb2N1bWVudCB1c2VzIHRoZQogICAgPGNvZGU+b2FzaXMteG1sLWNhdGFsb2c8L2NvZGU+IFBJcyB0byBzcGVjaWZ5IGl0cyBvd24gY2F0YWxvZyBsaXN0LCBpdCBpcwogICAgYXNzb2NpYXRlZCB0byB0aGUgcGFyc2VyIGNvbnRleHQgYW5kIGRlc3Ryb3llZCB3aGVuIHRoZSBwYXJzaW5nIGNvbnRleHQKICAgIGlzIGRlc3Ryb3llZC48L2xpPgo8L3VsPgoKPHA+dGhlIGRvY3VtZW50IG9uZSB3aWxsIGJlIHVzZWQgZmlyc3QgaWYgaXQgZXhpc3RzLjwvcD4KCjxoND5Jbml0aWFsaXphdGlvbiByb3V0aW5lczo8L2g0PgoKPHA+eG1sSW5pdGlhbGl6ZUNhdGFsb2coKSwgeG1sTG9hZENhdGFsb2coKSBhbmQgeG1sTG9hZENhdGFsb2dzKCkgc2hvdWxkIGJlCnVzZWQgYXQgc3RhcnR1cCB0byBpbml0aWFsaXplIHRoZSBjYXRhbG9nLCBpZiB0aGUgY2F0YWxvZyBzaG91bGQgYmUKaW5pdGlhbGl6ZWQgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgeG1sTG9hZENhdGFsb2coKSAgb3IgeG1sTG9hZENhdGFsb2dzKCkKc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgeG1sSW5pdGlhbGl6ZUNhdGFsb2coKSB3aGljaCB3b3VsZCBvdGhlcndpc2UgZG8gYQpkZWZhdWx0IGluaXRpYWxpemF0aW9uIGZpcnN0LjwvcD4KCjxwPlRoZSB4bWxDYXRhbG9nQWRkTG9jYWwoKSBjYWxsIGlzIHVzZWQgYnkgdGhlIHBhcnNlciB0byBncm93IHRoZSBkb2N1bWVudApvd24gY2F0YWxvZyBsaXN0IGlmIG5lZWRlZC48L3A+Cgo8aDQ+UHJlZmVyZW5jZXMgc2V0dXA6PC9oND4KCjxwPlRoZSBYTUwgQ2F0YWxvZyBzcGVjIHJlcXVpcmVzIHRoZSBwb3NzaWJpbGl0eSB0byBzZWxlY3QgZGVmYXVsdApwcmVmZXJlbmNlcyBiZXR3ZWVuICBwdWJsaWMgYW5kIHN5c3RlbSBkZWxlZ2F0aW9uLAp4bWxDYXRhbG9nU2V0RGVmYXVsdFByZWZlcigpIGFsbG93cyB0aGlzLCB4bWxDYXRhbG9nU2V0RGVmYXVsdHMoKSBhbmQKeG1sQ2F0YWxvZ0dldERlZmF1bHRzKCkgYWxsb3cgdG8gY29udHJvbCAgaWYgWE1MIENhdGFsb2dzIHJlc29sdXRpb24gc2hvdWxkCmJlIGZvcmJpZGRlbiwgYWxsb3dlZCBmb3IgZ2xvYmFsIGNhdGFsb2csIGZvciBkb2N1bWVudCBjYXRhbG9nIG9yIGJvdGgsIHRoZQpkZWZhdWx0IGlzIHRvIGFsbG93IGJvdGguPC9wPgoKPHA+QW5kIG9mIGNvdXJzZSB4bWxDYXRhbG9nU2V0RGVidWcoKSBhbGxvd3MgdG8gZ2VuZXJhdGUgZGVidWcgbWVzc2FnZXMKKHRocm91Z2ggdGhlIHhtbEdlbmVyaWNFcnJvcigpIG1lY2hhbmlzbSkuPC9wPgoKPGg0PlF1ZXJ5aW5nIHJvdXRpbmVzOjwvaDQ+Cgo8cD54bWxDYXRhbG9nUmVzb2x2ZSgpLCB4bWxDYXRhbG9nUmVzb2x2ZVN5c3RlbSgpLCB4bWxDYXRhbG9nUmVzb2x2ZVB1YmxpYygpCmFuZCB4bWxDYXRhbG9nUmVzb2x2ZVVSSSgpIGFyZSByZWxhdGl2ZWx5IGV4cGxpY2l0IGlmIHlvdSByZWFkIHRoZSBYTUwKQ2F0YWxvZyBzcGVjaWZpY2F0aW9uIHRoZXkgY29ycmVzcG9uZCB0byBzZWN0aW9uIDcgYWxnb3JpdGhtcywgdGhleSBzaG91bGQKYWxzbyB3b3JrIGlmIHlvdSBoYXZlIGxvYWRlZCBhbiBTR01MIGNhdGFsb2cgd2l0aCBhIHNpbXBsaWZpZWQgc2VtYW50aWMuPC9wPgoKPHA+eG1sQ2F0YWxvZ0xvY2FsUmVzb2x2ZSgpIGFuZCB4bWxDYXRhbG9nTG9jYWxSZXNvbHZlVVJJKCkgYXJlIHRoZSBzYW1lIGJ1dApvcGVyYXRlIG9uIHRoZSBkb2N1bWVudCBjYXRhbG9nIGxpc3Q8L3A+Cgo8aDQ+Q2xlYW51cCBhbmQgTWlzY2VsbGFuZW91czo8L2g0PgoKPHA+eG1sQ2F0YWxvZ0NsZWFudXAoKSBmcmVlLXVwIHRoZSBnbG9iYWwgY2F0YWxvZywgeG1sQ2F0YWxvZ0ZyZWVMb2NhbCgpIGlzCnRoZSBwZXItZG9jdW1lbnQgZXF1aXZhbGVudC48L3A+Cgo8cD54bWxDYXRhbG9nQWRkKCkgYW5kIHhtbENhdGFsb2dSZW1vdmUoKSBhcmUgdXNlZCB0byBkeW5hbWljYWxseSBtb2RpZnkgdGhlCmZpcnN0IGNhdGFsb2cgaW4gdGhlIGdsb2JhbCBsaXN0LCBhbmQgeG1sQ2F0YWxvZ0R1bXAoKSBhbGxvd3MgdG8gZHVtcCBhCmNhdGFsb2cgc3RhdGUsIHRob3NlIHJvdXRpbmVzIGFyZSBwcmltYXJpbHkgZGVzaWduZWQgZm9yIHhtbGNhdGFsb2csIEknbSBub3QKc3VyZSB0aGF0IGV4cG9zaW5nIG1vcmUgY29tcGxleCBpbnRlcmZhY2VzIChsaWtlIG5hdmlnYXRpb24gb25lcykgd291bGQgYmUKcmVhbGx5IHVzZWZ1bC48L3A+Cgo8cD5UaGUgeG1sUGFyc2VDYXRhbG9nRmlsZSgpIGlzIGEgZnVuY3Rpb24gdXNlZCB0byBsb2FkIFhNTCBDYXRhbG9nIGZpbGVzLAppdCdzIHNpbWlsYXIgYXMgeG1sUGFyc2VGaWxlKCkgZXhjZXB0IGl0IGJ5cGFzcyBhbGwgY2F0YWxvZyBsb29rdXBzLCBpdCdzCnByb3ZpZGVkIGJlY2F1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IG1heSBiZSB1c2VmdWwgZm9yIGNsaWVudCB0b29scy48L3A+Cgo8aDQ+dGhyZWFkZWQgZW52aXJvbm1lbnRzOjwvaDQ+Cgo8cD5TaW5jZSB0aGUgY2F0YWxvZyB0cmVlIGlzIGJ1aWx0IHByb2dyZXNzaXZlbHksIHNvbWUgY2FyZSBoYXMgYmVlbiB0YWtlbiB0bwp0cnkgdG8gYXZvaWQgdHJvdWJsZXMgaW4gbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudHMuIFRoZSBjb2RlIGlzIG5vdyB0aHJlYWQKc2FmZSBhc3N1bWluZyB0aGF0IHRoZSBsaWJ4bWwgbGlicmFyeSBoYXMgYmVlbiBjb21waWxlZCB3aXRoIHRocmVhZHMKc3VwcG9ydC48L3A+Cgo8cD48L3A+Cgo8aDM+PGEgbmFtZT0iT3RoZXIiPk90aGVyIHJlc291cmNlczwvYT48L2gzPgoKPHA+VGhlIFhNTCBDYXRhbG9nIHNwZWNpZmljYXRpb24gaXMgcmVsYXRpdmVseSByZWNlbnQgc28gdGhlcmUgaXNuJ3QgbXVjaApsaXRlcmF0dXJlIHRvIHBvaW50IGF0OjwvcD4KPHVsPgogIDxsaT5Zb3UgY2FuIGZpbmQgYSBnb29kIHJhbnQgZnJvbSBOb3JtIFdhbHNoIGFib3V0IDxhCiAgICBocmVmPSJodHRwOi8vd3d3LmFyYm9ydGV4dC5jb20vVGhpbmtfVGFuay9YTUxfUmVzb3VyY2VzL0lzc3VlX1RocmVlL2lzc3VlX3RocmVlLmh0bWwiPnRoZQogICAgbmVlZCBmb3IgY2F0YWxvZ3M8L2E+LCBpdCBwcm92aWRlcyBhIGxvdCBvZiBjb250ZXh0IGluZm9ybWF0aW9ucyBldmVuIGlmCiAgICBJIGRvbid0IGFncmVlIHdpdGggZXZlcnl0aGluZyBwcmVzZW50ZWQuIE5vcm0gYWxzbyB3cm90ZSBhIG1vcmUgcmVjZW50CiAgICBhcnRpY2xlIDxhCiAgICBocmVmPSJodHRwOi8vd3d3cy5zdW4uY29tL3NvZnR3YXJlL3htbC9kZXZlbG9wZXJzL3Jlc29sdmVyL2FydGljbGUvIj5YTUwKICAgIGVudGl0aWVzIGFuZCBVUkkgcmVzb2x2ZXJzPC9hPiBkZXNjcmliaW5nIHRoZW0uPC9saT4KICA8bGk+QW4gPGEgaHJlZj0iaHR0cDovL2hvbWUuY2NpbC5vcmcvfmNvd2FuL1hNTC9YQ2F0YWxvZy5odG1sIj5vbGQgWE1MCiAgICBjYXRhbG9nIHByb3Bvc2FsPC9hPiBmcm9tIEpvaG4gQ293YW48L2xpPgogIDxsaT5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy5yZGRsLm9yZy8iPlJlc291cmNlIERpcmVjdG9yeSBEZXNjcmlwdGlvbgogICAgTGFuZ3VhZ2U8L2E+IChSRERMKSBhbm90aGVyIGNhdGFsb2cgc3lzdGVtIGJ1dCBtb3JlIG9yaWVudGVkIHRvd2FyZAogICAgcHJvdmlkaW5nIG1ldGFkYXRhIGZvciBYTUwgbmFtZXNwYWNlcy48L2xpPgogIDxsaT50aGUgcGFnZSBmcm9tIHRoZSBPQVNJUyBUZWNobmljYWwgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIj5Db21taXR0ZWUgb24gRW50aXR5CiAgICBSZXNvbHV0aW9uPC9hPiB3aG8gbWFpbnRhaW5zIFhNTCBDYXRhbG9nLCB5b3Ugd2lsbCBmaW5kIHBvaW50ZXJzIHRvIHRoZQogICAgc3BlY2lmaWNhdGlvbiB1cGRhdGUsIHNvbWUgYmFja2dyb3VuZCBhbmQgcG9pbnRlcnMgdG8gb3RoZXJzIHRvb2xzCiAgICBwcm92aWRpbmcgWE1MIENhdGFsb2cgc3VwcG9ydDwvbGk+CiAgPGxpPkhlcmUgaXMgYSA8YSBocmVmPSJidWlsZERvY0Jvb2tDYXRhbG9nIj5zaGVsbCBzY3JpcHQ8L2E+IHRvIGdlbmVyYXRlCiAgICBYTUwgQ2F0YWxvZ3MgZm9yIERvY0Jvb2sgNC4xLjIgLiBJZiBpdCBjYW4gd3JpdGUgdG8gdGhlIC9ldGMveG1sLwogICAgZGlyZWN0b3J5LCBpdCB3aWxsIHNldC11cCAvZXRjL3htbC9jYXRhbG9nIGFuZCAvZXRjL3htbC9kb2Nib29rIGJhc2VkIG9uCiAgICB0aGUgcmVzb3VyY2VzIGZvdW5kIG9uIHRoZSBzeXN0ZW0uIE90aGVyd2lzZSBpdCB3aWxsIGp1c3QgY3JlYXRlCiAgICB+L3htbGNhdGFsb2cgYW5kIH4vZGJreG1sY2F0YWxvZyBhbmQgZG9pbmc6CiAgICA8cD48Y29kZT5leHBvcnQgWE1MQ0FUQUxPRz0kSE9NRS94bWxjYXRhbG9nPC9jb2RlPjwvcD4KICAgIDxwPnNob3VsZCBhbGxvdyB0byBwcm9jZXNzIERvY0Jvb2sgZG9jdW1lbnRhdGlvbnMgd2l0aG91dCByZXF1aXJpbmcKICAgIG5ldHdvcmsgYWNjZXNzZXMgZm9yIHRoZSBEVEQgb3Igc3R5bGVzaGVldHM8L3A+CiAgPC9saT4KICA8bGk+SSBoYXZlIHVwbG9hZGVkIDxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnL3Rlc3QvZGJrNDEyY2F0YWxvZy50YXIuZ3oiPmEKICAgIHNtYWxsIHRhcmJhbGw8L2E+IGNvbnRhaW5pbmcgWE1MIENhdGFsb2dzIGZvciBEb2NCb29rIDQuMS4yIHdoaWNoIHNlZW1zCiAgICB0byB3b3JrIGZpbmUgZm9yIG1lIHRvbzwvbGk+CiAgPGxpPlRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnhtbHNvZnQub3JnL3htbGNhdGFsb2dfbWFuLmh0bWwiPnhtbGNhdGFsb2cKICAgIG1hbnVhbCBwYWdlPC9hPjwvbGk+CjwvdWw+Cgo8cD5JZiB5b3UgaGF2ZSBzdWdnZXN0aW9ucyBmb3IgY29ycmVjdGlvbnMgb3IgYWRkaXRpb25zLCBzaW1wbHkgY29udGFjdAptZTo8L3A+Cgo8aDI+PGEgbmFtZT0ibGlicmFyeSI+VGhlIHBhcnNlciBpbnRlcmZhY2VzPC9hPjwvaDI+Cgo8cD5UaGlzIHNlY3Rpb24gaXMgZGlyZWN0bHkgaW50ZW5kZWQgdG8gaGVscCBwcm9ncmFtbWVycyBnZXR0aW5nIGJvb3RzdHJhcHBlZAp1c2luZyB0aGUgWE1MIGxpYnJhcnkgZnJvbSB0aGUgQyBsYW5ndWFnZS4gSXQgaXMgbm90IGludGVuZGVkIHRvIGJlCmV4dGVuc2l2ZS4gSSBob3BlIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkb2N1bWVudHMgd2lsbCBwcm92aWRlIHRoZQpjb21wbGV0ZW5lc3MgcmVxdWlyZWQsIGJ1dCBhcyBhIHNlcGFyYXRlIHNldCBvZiBkb2N1bWVudHMuIFRoZSBpbnRlcmZhY2VzIG9mCnRoZSBYTUwgbGlicmFyeSBhcmUgYnkgcHJpbmNpcGxlIGxvdyBsZXZlbCwgdGhlcmUgaXMgbmVhcmx5IHplcm8gYWJzdHJhY3Rpb24uClRob3NlIGludGVyZXN0ZWQgaW4gYSBoaWdoZXIgbGV2ZWwgQVBJIHNob3VsZCA8YSBocmVmPSIjRE9NIj5sb29rIGF0CkRPTTwvYT4uPC9wPgoKPHA+VGhlIDxhIGhyZWY9Imh0bWwvbGlieG1sLXBhcnNlci5odG1sIj5wYXJzZXIgaW50ZXJmYWNlcyBmb3IgWE1MPC9hPiBhcmUKc2VwYXJhdGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0bWwvbGlieG1sLWh0bWxwYXJzZXIuaHRtbCI+SFRNTCBwYXJzZXIKaW50ZXJmYWNlczwvYT4uICBMZXQncyBoYXZlIGEgbG9vayBhdCBob3cgdGhlIFhNTCBwYXJzZXIgY2FuIGJlIGNhbGxlZDo8L3A+Cgo8aDM+PGEgbmFtZT0iSW52b2tpbmciPkludm9raW5nIHRoZSBwYXJzZXIgOiB0aGUgcHVsbCBtZXRob2Q8L2E+PC9oMz4KCjxwPlVzdWFsbHksIHRoZSBmaXJzdCB0aGluZyB0byBkbyBpcyB0byByZWFkIGFuIFhNTCBpbnB1dC4gVGhlIHBhcnNlciBhY2NlcHRzCmRvY3VtZW50cyBlaXRoZXIgZnJvbSBpbi1tZW1vcnkgc3RyaW5ncyBvciBmcm9tIGZpbGVzLiAgVGhlIGZ1bmN0aW9ucyBhcmUKZGVmaW5lZCBpbiAicGFyc2VyLmgiOjwvcD4KPGRsPgogIDxkdD48Y29kZT54bWxEb2NQdHIgeG1sUGFyc2VNZW1vcnkoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+UGFyc2UgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50LjwvcD4KICAgIDwvZGQ+CjwvZGw+CjxkbD4KICA8ZHQ+PGNvZGU+eG1sRG9jUHRyIHhtbFBhcnNlRmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+UGFyc2UgYW4gWE1MIGRvY3VtZW50IGNvbnRhaW5lZCBpbiBhIChwb3NzaWJseSBjb21wcmVzc2VkKQogICAgICBmaWxlLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8cD5UaGUgcGFyc2VyIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkb2N1bWVudCBzdHJ1Y3R1cmUgKG9yIE5VTEwgaW4gY2FzZSBvZgpmYWlsdXJlKS48L3A+Cgo8aDMgaWQ9Ikludm9raW5nMSI+SW52b2tpbmcgdGhlIHBhcnNlcjogdGhlIHB1c2ggbWV0aG9kPC9oMz4KCjxwPkluIG9yZGVyIGZvciB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB0aGUgY29udHJvbCB3aGVuIHRoZSBkb2N1bWVudCBpcwpiZWluZyBmZXRjaGVkICh3aGljaCBpcyBjb21tb24gZm9yIEdVSSBiYXNlZCBwcm9ncmFtcykgbGlieG1sIHByb3ZpZGVzIGEgcHVzaAppbnRlcmZhY2UsIHRvbywgYXMgb2YgdmVyc2lvbiAxLjguMy4gSGVyZSBhcmUgdGhlIGludGVyZmFjZSBmdW5jdGlvbnM6PC9wPgo8cHJlPnhtbFBhcnNlckN0eHRQdHIgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoeG1sU0FYSGFuZGxlclB0ciBzYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNodW5rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKaW50ICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rICAgICAgICAgICh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2h1bmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlcm1pbmF0ZSk7PC9wcmU+Cgo8cD5hbmQgaGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGUgaW50ZXJmYWNlOjwvcD4KPHByZT4gICAgICAgICAgICBGSUxFICpmOwoKICAgICAgICAgICAgZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogICAgICAgICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICBpbnQgcmVzLCBzaXplID0gMTAyNDsKICAgICAgICAgICAgICAgIGNoYXIgY2hhcnNbMTAyNF07CiAgICAgICAgICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CgogICAgICAgICAgICAgICAgcmVzID0gZnJlYWQoY2hhcnMsIDEsIDQsIGYpOwogICAgICAgICAgICAgICAgaWYgKHJlcyAmZ3Q7IDApIHsKICAgICAgICAgICAgICAgICAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycywgcmVzLCBmaWxlbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXMgPSBmcmVhZChjaGFycywgMSwgc2l6ZSwgZikpICZndDsgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCByZXMsIDApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCAwLCAxKTsKICAgICAgICAgICAgICAgICAgICBkb2MgPSBjdHh0LSZndDtteURvYzsKICAgICAgICAgICAgICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTwvcHJlPgoKPHA+VGhlIEhUTUwgcGFyc2VyIGVtYmVkZGVkIGludG8gbGlieG1sIGFsc28gaGFzIGEgcHVzaCBpbnRlcmZhY2U7IHRoZQpmdW5jdGlvbnMgYXJlIGp1c3QgcHJlZml4ZWQgYnkgImh0bWwiIHJhdGhlciB0aGFuICJ4bWwiLjwvcD4KCjxoMyBpZD0iSW52b2tpbmcyIj5JbnZva2luZyB0aGUgcGFyc2VyOiB0aGUgU0FYIGludGVyZmFjZTwvaDM+Cgo8cD5UaGUgdHJlZS1idWlsZGluZyBpbnRlcmZhY2UgbWFrZXMgdGhlIHBhcnNlciBtZW1vcnktaHVuZ3J5LCBmaXJzdCBsb2FkaW5nCnRoZSBkb2N1bWVudCBpbiBtZW1vcnkgYW5kIHRoZW4gYnVpbGRpbmcgdGhlIHRyZWUgaXRzZWxmLiBSZWFkaW5nIGEgZG9jdW1lbnQKd2l0aG91dCBidWlsZGluZyB0aGUgdHJlZSBpcyBwb3NzaWJsZSB1c2luZyB0aGUgU0FYIGludGVyZmFjZXMgKHNlZSBTQVguaCBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5kYWEuY29tLmF1L35qYW1lcy9nbm9tZS94bWwtc2F4L3htbC1zYXguaHRtbCI+SmFtZXMKSGVuc3RyaWRnZSdzIGRvY3VtZW50YXRpb248L2E+KS4gTm90ZSBhbHNvIHRoYXQgdGhlIHB1c2ggaW50ZXJmYWNlIGNhbiBiZQpsaW1pdGVkIHRvIFNBWDoganVzdCB1c2UgdGhlIHR3byBmaXJzdCBhcmd1bWVudHMgb2YKPGNvZGU+eG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKTwvY29kZT4uPC9wPgoKPGgzPjxhIG5hbWU9IkJ1aWxkaW5nIj5CdWlsZGluZyBhIHRyZWUgZnJvbSBzY3JhdGNoPC9hPjwvaDM+Cgo8cD5UaGUgb3RoZXIgd2F5IHRvIGdldCBhbiBYTUwgdHJlZSBpbiBtZW1vcnkgaXMgYnkgYnVpbGRpbmcgaXQuIEJhc2ljYWxseQp0aGVyZSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgZGVkaWNhdGVkIHRvIGJ1aWxkaW5nIG5ldyBlbGVtZW50cy4gKFRoZXNlIGFyZQphbHNvIGRlc2NyaWJlZCBpbiAmbHQ7bGlieG1sL3RyZWUuaCZndDsuKSBGb3IgZXhhbXBsZSwgaGVyZSBpcyBhIHBpZWNlIG9mCmNvZGUgdGhhdCBwcm9kdWNlcyB0aGUgWE1MIGRvY3VtZW50IHVzZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGVzOjwvcD4KPHByZT4gICAgI2luY2x1ZGUgJmx0O2xpYnhtbC90cmVlLmgmZ3Q7CiAgICB4bWxEb2NQdHIgZG9jOwogICAgeG1sTm9kZVB0ciB0cmVlLCBzdWJ0cmVlOwoKICAgIGRvYyA9IHhtbE5ld0RvYygiMS4wIik7CiAgICBkb2MtJmd0O2NoaWxkcmVuID0geG1sTmV3RG9jTm9kZShkb2MsIE5VTEwsICJFWEFNUExFIiwgTlVMTCk7CiAgICB4bWxTZXRQcm9wKGRvYy0mZ3Q7Y2hpbGRyZW4sICJwcm9wMSIsICJnbm9tZSBpcyBncmVhdCIpOwogICAgeG1sU2V0UHJvcChkb2MtJmd0O2NoaWxkcmVuLCAicHJvcDIiLCAiJmFtcDsgbGludXggdG9vIik7CiAgICB0cmVlID0geG1sTmV3Q2hpbGQoZG9jLSZndDtjaGlsZHJlbiwgTlVMTCwgImhlYWQiLCBOVUxMKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAidGl0bGUiLCAiV2VsY29tZSB0byBHbm9tZSIpOwogICAgdHJlZSA9IHhtbE5ld0NoaWxkKGRvYy0mZ3Q7Y2hpbGRyZW4sIE5VTEwsICJjaGFwdGVyIiwgTlVMTCk7CiAgICBzdWJ0cmVlID0geG1sTmV3Q2hpbGQodHJlZSwgTlVMTCwgInRpdGxlIiwgIlRoZSBMaW51eCBhZHZlbnR1cmUiKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAicCIsICJibGEgYmxhIGJsYSAuLi4iKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAiaW1hZ2UiLCBOVUxMKTsKICAgIHhtbFNldFByb3Aoc3VidHJlZSwgImhyZWYiLCAibGludXMuZ2lmIik7PC9wcmU+Cgo8cD5Ob3QgcmVhbGx5IHJvY2tldCBzY2llbmNlIC4uLjwvcD4KCjxoMz48YSBuYW1lPSJUcmF2ZXJzaW5nIj5UcmF2ZXJzaW5nIHRoZSB0cmVlPC9hPjwvaDM+Cgo8cD5CYXNpY2FsbHkgYnkgPGEgaHJlZj0iaHRtbC9saWJ4bWwtdHJlZS5odG1sIj5pbmNsdWRpbmcgInRyZWUuaCI8L2E+IHlvdXIKY29kZSBoYXMgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgdHJlZS4KVGhlIG5hbWVzIHNob3VsZCBiZSBzb21ld2hhdCBzaW1wbGUgbGlrZSA8c3Ryb25nPnBhcmVudDwvc3Ryb25nPiwKPHN0cm9uZz5jaGlsZHJlbjwvc3Ryb25nPiwgPHN0cm9uZz5uZXh0PC9zdHJvbmc+LCA8c3Ryb25nPnByZXY8L3N0cm9uZz4sCjxzdHJvbmc+cHJvcGVydGllczwvc3Ryb25nPiwgZXRjLi4uIEZvciBleGFtcGxlLCBzdGlsbCB3aXRoIHRoZSBwcmV2aW91cwpleGFtcGxlOjwvcD4KPHByZT48Y29kZT5kb2MtJmd0O2NoaWxkcmVuLSZndDtjaGlsZHJlbi0mZ3Q7Y2hpbGRyZW48L2NvZGU+PC9wcmU+Cgo8cD5wb2ludHMgdG8gdGhlIHRpdGxlIGVsZW1lbnQsPC9wPgo8cHJlPmRvYy0mZ3Q7Y2hpbGRyZW4tJmd0O2NoaWxkcmVuLSZndDtuZXh0LSZndDtjaGlsZHJlbi0mZ3Q7Y2hpbGRyZW48L3ByZT4KCjxwPnBvaW50cyB0byB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGNoYXB0ZXIgdGl0bGUgIlRoZSBMaW51eAphZHZlbnR1cmUiLjwvcD4KCjxwPjxzdHJvbmc+Tk9URTwvc3Ryb25nPjogWE1MIGFsbG93cyA8ZW0+UEk8L2VtPnMgYW5kIDxlbT5jb21tZW50czwvZW0+IHRvIGJlCnByZXNlbnQgYmVmb3JlIHRoZSBkb2N1bWVudCByb290LCBzbyA8Y29kZT5kb2MtJmd0O2NoaWxkcmVuPC9jb2RlPiBtYXkgcG9pbnQKdG8gYW4gZWxlbWVudCB3aGljaCBpcyBub3QgdGhlIGRvY3VtZW50IFJvb3QgRWxlbWVudDsgYSBmdW5jdGlvbgo8Y29kZT54bWxEb2NHZXRSb290RWxlbWVudCgpPC9jb2RlPiB3YXMgYWRkZWQgZm9yIHRoaXMgcHVycG9zZS48L3A+Cgo8aDM+PGEgbmFtZT0iTW9kaWZ5aW5nIj5Nb2RpZnlpbmcgdGhlIHRyZWU8L2E+PC9oMz4KCjxwPkZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGRvY3VtZW50IGNvbnRlbnQuIEhlcmUKaXMgYW4gZXhjZXJwdCBmcm9tIHRoZSA8YSBocmVmPSJodG1sL2xpYnhtbC10cmVlLmh0bWwiPnRyZWUgQVBJPC9hPjo8L3A+CjxkbD4KICA8ZHQ+PGNvZGU+eG1sQXR0clB0ciB4bWxTZXRQcm9wKHhtbE5vZGVQdHIgbm9kZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwgY29uc3QKICB4bWxDaGFyICp2YWx1ZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+VGhpcyBzZXRzIChvciBjaGFuZ2VzKSBhbiBhdHRyaWJ1dGUgY2FycmllZCBieSBhbiBFTEVNRU5UIG5vZGUuCiAgICAgIFRoZSB2YWx1ZSBjYW4gYmUgTlVMTC48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPmNvbnN0IHhtbENoYXIgKnhtbEdldFByb3AoeG1sTm9kZVB0ciBub2RlLCBjb25zdCB4bWxDaGFyCiAgKm5hbWUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IGNvcHkgb2YgdGhlIHByb3BlcnR5CiAgICAgIGNvbnRlbnQuIE5vdGUgdGhhdCB0aGUgdXNlciBtdXN0IGRlYWxsb2NhdGUgdGhlIHJlc3VsdC48L3A+CiAgICA8L2RkPgo8L2RsPgoKPHA+VHdvIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHRleHQgYXNzb2NpYXRlZAp3aXRoIGVsZW1lbnRzOjwvcD4KPGRsPgogIDxkdD48Y29kZT54bWxOb2RlUHRyIHhtbFN0cmluZ0dldE5vZGVMaXN0KHhtbERvY1B0ciBkb2MsIGNvbnN0IHhtbENoYXIKICAqdmFsdWUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gImV4dGVybmFsIiBzdHJpbmcgYW5kIGNvbnZlcnRzIGl0IHRvIG9uZQogICAgICB0ZXh0IG5vZGUgb3IgcG9zc2libHkgdG8gYSBsaXN0IG9mIGVudGl0eSBhbmQgdGV4dCBub2Rlcy4gQWxsCiAgICAgIG5vbi1wcmVkZWZpbmVkIGVudGl0eSByZWZlcmVuY2VzIGxpa2UgJmFtcDtHbm9tZTsgd2lsbCBiZSBzdG9yZWQKICAgICAgaW50ZXJuYWxseSBhcyBlbnRpdHkgbm9kZXMsIGhlbmNlIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIG1heSBub3QgYmUKICAgICAgYSBzaW5nbGUgbm9kZS48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPnhtbENoYXIgKnhtbE5vZGVMaXN0R2V0U3RyaW5nKHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgbGlzdCwgaW50CiAgaW5MaW5lKTs8L2NvZGU+PC9kdD4KICAgIDxkZD48cD5UaGlzIGZ1bmN0aW9uIGlzIHRoZSBpbnZlcnNlIG9mCiAgICAgIDxjb2RlPnhtbFN0cmluZ0dldE5vZGVMaXN0KCk8L2NvZGU+LiBJdCBnZW5lcmF0ZXMgYSBuZXcgc3RyaW5nCiAgICAgIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHRleHQgYW5kIGVudGl0eSBub2Rlcy4gTm90ZSB0aGUgZXh0cmEKICAgICAgYXJndW1lbnQgaW5MaW5lLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHNldCB0byAxLCB0aGUgZnVuY3Rpb24gd2lsbCBleHBhbmQKICAgICAgZW50aXR5IHJlZmVyZW5jZXMuICBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlICZhbXA7R25vbWU7CiAgICAgIFhNTCBlbmNvZGluZyBpbiB0aGUgc3RyaW5nLCBpdCB3aWxsIHN1YnN0aXR1dGUgaXQgd2l0aCBpdHMgdmFsdWUgKHNheSwKICAgICAgIkdOVSBOZXR3b3JrIE9iamVjdCBNb2RlbCBFbnZpcm9ubWVudCIpLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDM+PGEgbmFtZT0iU2F2aW5nIj5TYXZpbmcgYSB0cmVlPC9hPjwvaDM+Cgo8cD5CYXNpY2FsbHkgMyBvcHRpb25zIGFyZSBwb3NzaWJsZTo8L3A+CjxkbD4KICA8ZHQ+PGNvZGU+dm9pZCB4bWxEb2NEdW1wTWVtb3J5KHhtbERvY1B0ciBjdXIsIHhtbENoYXIqKm1lbSwgaW50CiAgKnNpemUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlJldHVybnMgYSBidWZmZXIgaW50byB3aGljaCB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gc2F2ZWQuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT5leHRlcm4gdm9pZCB4bWxEb2NEdW1wKEZJTEUgKmYsIHhtbERvY1B0ciBkb2MpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPkR1bXBzIGEgZG9jdW1lbnQgdG8gYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT5pbnQgeG1sU2F2ZUZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHhtbERvY1B0ciBjdXIpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlNhdmVzIHRoZSBkb2N1bWVudCB0byBhIGZpbGUuIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uCiAgICAgIGludGVyZmFjZSBpcyB0cmlnZ2VyZWQgaWYgaXQgaGFzIGJlZW4gdHVybmVkIG9uLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDM+PGEgbmFtZT0iQ29tcHJlc3NpbyI+Q29tcHJlc3Npb248L2E+PC9oMz4KCjxwPlRoZSBsaWJyYXJ5IHRyYW5zcGFyZW50bHkgaGFuZGxlcyBjb21wcmVzc2lvbiB3aGVuIGRvaW5nIGZpbGUtYmFzZWQKYWNjZXNzZXMuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbiBvbiBzYXZlcyBjYW4gYmUgdHVybmVkIG9uIGVpdGhlciBnbG9iYWxseQpvciBpbmRpdmlkdWFsbHkgZm9yIG9uZSBmaWxlOjwvcD4KPGRsPgogIDxkdD48Y29kZT5pbnQgIHhtbEdldERvY0NvbXByZXNzTW9kZSAoeG1sRG9jUHRyIGRvYyk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+R2V0cyB0aGUgZG9jdW1lbnQgY29tcHJlc3Npb24gcmF0aW8gKDAtOSkuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT52b2lkIHhtbFNldERvY0NvbXByZXNzTW9kZSAoeG1sRG9jUHRyIGRvYywgaW50IG1vZGUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlNldHMgdGhlIGRvY3VtZW50IGNvbXByZXNzaW9uIHJhdGlvLjwvcD4KICAgIDwvZGQ+CjwvZGw+CjxkbD4KICA8ZHQ+PGNvZGU+aW50ICB4bWxHZXRDb21wcmVzc01vZGUodm9pZCk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+R2V0cyB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiByYXRpby48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPnZvaWQgeG1sU2V0Q29tcHJlc3NNb2RlKGludCBtb2RlKTs8L2NvZGU+PC9kdD4KICAgIDxkZD48cD5TZXRzIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIHJhdGlvLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDI+PGEgbmFtZT0iRW50aXRpZXMiPkVudGl0aWVzIG9yIG5vIGVudGl0aWVzPC9hPjwvaDI+Cgo8cD5FbnRpdGllcyBpbiBwcmluY2lwbGUgYXJlIHNpbWlsYXIgdG8gc2ltcGxlIEMgbWFjcm9zLiBBbiBlbnRpdHkgZGVmaW5lcyBhbgphYmJyZXZpYXRpb24gZm9yIGEgZ2l2ZW4gc3RyaW5nIHRoYXQgeW91IGNhbiByZXVzZSBtYW55IHRpbWVzIHRocm91Z2hvdXQgdGhlCmNvbnRlbnQgb2YgeW91ciBkb2N1bWVudC4gRW50aXRpZXMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gYSBnaXZlbiBzdHJpbmcKbWF5IG9jY3VyIGZyZXF1ZW50bHkgd2l0aGluIGEgZG9jdW1lbnQsIG9yIHRvIGNvbmZpbmUgdGhlIGNoYW5nZSBuZWVkZWQgdG8gYQpkb2N1bWVudCB0byBhIHJlc3RyaWN0ZWQgYXJlYSBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0IG9mIHRoZSBkb2N1bWVudCAoYXQgdGhlCmJlZ2lubmluZykuIEV4YW1wbGU6PC9wPgo8cHJlPjEgJmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CjIgJmx0OyFET0NUWVBFIEVYQU1QTEUgU1lTVEVNICJleGFtcGxlLmR0ZCIgWwozICZsdDshRU5USVRZIHhtbCAiRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UiJmd0Owo0IF0mZ3Q7CjUgJmx0O0VYQU1QTEUmZ3Q7CjYgICAgJmFtcDt4bWw7CjcgJmx0Oy9FWEFNUExFJmd0OzwvcHJlPgoKPHA+TGluZSAzIGRlY2xhcmVzIHRoZSB4bWwgZW50aXR5LiBMaW5lIDYgdXNlcyB0aGUgeG1sIGVudGl0eSwgYnkgcHJlZml4aW5nCml0cyBuYW1lIHdpdGggJyZhbXA7JyBhbmQgZm9sbG93aW5nIGl0IGJ5ICc7JyB3aXRob3V0IGFueSBzcGFjZXMgYWRkZWQuIFRoZXJlCmFyZSA1IHByZWRlZmluZWQgZW50aXRpZXMgaW4gbGlieG1sIGFsbG93aW5nIHlvdSB0byBlc2NhcGUgY2hhcmFjdGVycyB3aXRoCnByZWRlZmluZWQgbWVhbmluZyBpbiBzb21lIHBhcnRzIG9mIHRoZSB4bWwgZG9jdW1lbnQgY29udGVudDoKPHN0cm9uZz4mYW1wO2x0Ozwvc3Ryb25nPiBmb3IgdGhlIGNoYXJhY3RlciAnJmx0OycsIDxzdHJvbmc+JmFtcDtndDs8L3N0cm9uZz4KZm9yIHRoZSBjaGFyYWN0ZXIgJyZndDsnLCAgPHN0cm9uZz4mYW1wO2Fwb3M7PC9zdHJvbmc+IGZvciB0aGUgY2hhcmFjdGVyICcnJywKPHN0cm9uZz4mYW1wO3F1b3Q7PC9zdHJvbmc+IGZvciB0aGUgY2hhcmFjdGVyICciJywgYW5kCjxzdHJvbmc+JmFtcDthbXA7PC9zdHJvbmc+IGZvciB0aGUgY2hhcmFjdGVyICcmYW1wOycuPC9wPgoKPHA+T25lIG9mIHRoZSBwcm9ibGVtcyByZWxhdGVkIHRvIGVudGl0aWVzIGlzIHRoYXQgeW91IG1heSB3YW50IHRoZSBwYXJzZXIgdG8Kc3Vic3RpdHV0ZSBhbiBlbnRpdHkncyBjb250ZW50IHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlIHJlcGxhY2VtZW50IHRleHQgaW4KeW91ciBhcHBsaWNhdGlvbi4gT3IgeW91IG1heSBwcmVmZXIgdG8ga2VlcCBlbnRpdHkgcmVmZXJlbmNlcyBhcyBzdWNoIGluIHRoZQpjb250ZW50IHRvIGJlIGFibGUgdG8gc2F2ZSB0aGUgZG9jdW1lbnQgYmFjayB3aXRob3V0IGxvc2luZyB0aGlzIHVzdWFsbHkKcHJlY2lvdXMgaW5mb3JtYXRpb24gKGlmIHRoZSB1c2VyIHdlbnQgdGhyb3VnaCB0aGUgcGFpbiBvZiBleHBsaWNpdGx5CmRlZmluaW5nIGVudGl0aWVzLCBoZSBtYXkgaGF2ZSBhIGEgcmF0aGVyIG5lZ2F0aXZlIGF0dGl0dWRlIGlmIHlvdSBibGluZGx5CnN1YnN0aXR1dGUgdGhlbSBhcyBzYXZpbmcgdGltZSkuIFRoZSA8YQpocmVmPSJodG1sL2xpYnhtbC1wYXJzZXIuaHRtbCNYTUxTVUJTVElUVVRFRU5USVRJRVNERUZBVUxUIj54bWxTdWJzdGl0dXRlRW50aXRpZXNEZWZhdWx0KCk8L2E+CmZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gY2hlY2sgYW5kIGNoYW5nZSB0aGUgYmVoYXZpb3VyLCB3aGljaCBpcyB0byBub3QKc3Vic3RpdHV0ZSBlbnRpdGllcyBieSBkZWZhdWx0LjwvcD4KCjxwPkhlcmUgaXMgdGhlIERPTSB0cmVlIGJ1aWx0IGJ5IGxpYnhtbCBmb3IgdGhlIHByZXZpb3VzIGRvY3VtZW50IGluIHRoZQpkZWZhdWx0IGNhc2U6PC9wPgo8cHJlPi9nbm9tZS9zcmMvZ25vbWUteG1sIC0mZ3Q7IC4veG1sbGludCAtLWRlYnVnIHRlc3QvZW50MQpET0NVTUVOVAp2ZXJzaW9uPTEuMAogICBFTEVNRU5UIEVYQU1QTEUKICAgICBURVhUCiAgICAgY29udGVudD0KICAgICBFTlRJVFlfUkVGCiAgICAgICBJTlRFUk5BTF9HRU5FUkFMX0VOVElUWSB4bWwKICAgICAgIGNvbnRlbnQ9RXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UKICAgICBURVhUCiAgICAgY29udGVudD08L3ByZT4KCjxwPkFuZCBoZXJlIGlzIHRoZSByZXN1bHQgd2hlbiBzdWJzdGl0dXRpbmcgZW50aXRpZXM6PC9wPgo8cHJlPi9nbm9tZS9zcmMvZ25vbWUteG1sIC0mZ3Q7IC4vdGVzdGVyIC0tZGVidWcgLS1ub2VudCB0ZXN0L2VudDEKRE9DVU1FTlQKdmVyc2lvbj0xLjAKICAgRUxFTUVOVCBFWEFNUExFCiAgICAgVEVYVAogICAgIGNvbnRlbnQ9ICAgICBFeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZTwvcHJlPgoKPHA+U28sIGVudGl0aWVzIG9yIG5vIGVudGl0aWVzPyBCYXNpY2FsbHksIGl0IGRlcGVuZHMgb24geW91ciB1c2UgY2FzZS4gSQpzdWdnZXN0IHRoYXQgeW91IGtlZXAgdGhlIG5vbi1zdWJzdGl0dXRpbmcgZGVmYXVsdCBiZWhhdmlvdXIgYW5kIGF2b2lkIHVzaW5nCmVudGl0aWVzIGluIHlvdXIgWE1MIGRvY3VtZW50IG9yIGRhdGEgaWYgeW91IGFyZSBub3Qgd2lsbGluZyB0byBoYW5kbGUgdGhlCmVudGl0eSByZWZlcmVuY2VzIGVsZW1lbnRzIGluIHRoZSBET00gdHJlZS48L3A+Cgo8cD5Ob3RlIHRoYXQgYXQgc2F2ZSB0aW1lIGxpYnhtbCBlbmZvcmNlcyB0aGUgY29udmVyc2lvbiBvZiB0aGUgcHJlZGVmaW5lZAplbnRpdGllcyB3aGVyZSBuZWNlc3NhcnkgdG8gcHJldmVudCB3ZWxsLWZvcm1lZG5lc3MgcHJvYmxlbXMsIGFuZCB3aWxsIGFsc28KdHJhbnNwYXJlbnRseSByZXBsYWNlIHRob3NlIHdpdGggY2hhcnMgKGkuZS4gaXQgd2lsbCBub3QgZ2VuZXJhdGUgZW50aXR5CnJlZmVyZW5jZSBlbGVtZW50cyBpbiB0aGUgRE9NIHRyZWUgb3IgY2FsbCB0aGUgcmVmZXJlbmNlKCkgU0FYIGNhbGxiYWNrIHdoZW4KZmluZGluZyB0aGVtIGluIHRoZSBpbnB1dCkuPC9wPgoKPHA+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGRjAwMDAiPldBUk5JTkc8L3NwYW4+OiBoYW5kbGluZyBlbnRpdGllcwpvbiB0b3Agb2YgdGhlIGxpYnhtbCBTQVggaW50ZXJmYWNlIGlzIGRpZmZpY3VsdCEhISBJZiB5b3UgcGxhbiB0byB1c2UKbm9uLXByZWRlZmluZWQgZW50aXRpZXMgaW4geW91ciBkb2N1bWVudHMsIHRoZW4gdGhlIGxlYXJuaW5nIGN1cnZlIHRvIGhhbmRsZQp0aGVuIHVzaW5nIHRoZSBTQVggQVBJIG1heSBiZSBsb25nLiBJZiB5b3UgcGxhbiB0byB1c2UgY29tcGxleCBkb2N1bWVudHMsIEkKc3Ryb25nbHkgc3VnZ2VzdCB5b3UgY29uc2lkZXIgdXNpbmcgdGhlIERPTSBpbnRlcmZhY2UgaW5zdGVhZCBhbmQgbGV0IGxpYnhtbApkZWFsIHdpdGggdGhlIGNvbXBsZXhpdHkgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGRvIGl0IHlvdXJzZWxmLjwvcD4KCjxoMj48YSBuYW1lPSJOYW1lc3BhY2VzIj5OYW1lc3BhY2VzPC9hPjwvaDI+Cgo8cD5UaGUgbGlieG1sIGxpYnJhcnkgaW1wbGVtZW50cyA8YQpocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyI+WE1MIG5hbWVzcGFjZXM8L2E+IHN1cHBvcnQgYnkKcmVjb2duaXppbmcgbmFtZXNwYWNlIGNvbnN0cnVjdHMgaW4gdGhlIGlucHV0LCBhbmQgZG9lcyBuYW1lc3BhY2UgbG9va3VwCmF1dG9tYXRpY2FsbHkgd2hlbiBidWlsZGluZyB0aGUgRE9NIHRyZWUuIEEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGlzCmFzc29jaWF0ZWQgd2l0aCBhbiBpbi1tZW1vcnkgc3RydWN0dXJlIGFuZCBhbGwgZWxlbWVudHMgb3IgYXR0cmlidXRlcyB3aXRoaW4KdGhhdCBuYW1lc3BhY2UgcG9pbnQgdG8gaXQuIEhlbmNlIHRlc3RpbmcgdGhlIG5hbWVzcGFjZSBpcyBhIHNpbXBsZSBhbmQgZmFzdAplcXVhbGl0eSBvcGVyYXRpb24gYXQgdGhlIHVzZXIgbGV2ZWwuPC9wPgoKPHA+SSBzdWdnZXN0IHRoYXQgcGVvcGxlIHVzaW5nIGxpYnhtbCB1c2UgYSBuYW1lc3BhY2UsIGFuZCBkZWNsYXJlIGl0IGluIHRoZQpyb290IGVsZW1lbnQgb2YgdGhlaXIgZG9jdW1lbnQgYXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLiBUaGVuIHRoZXkgZG9uJ3QgbmVlZAp0byB1c2UgdGhlIHByZWZpeCBpbiB0aGUgY29udGVudCBidXQgd2Ugd2lsbCBoYXZlIGEgYmFzaXMgZm9yIGZ1dHVyZSBzZW1hbnRpYwpyZWZpbmVtZW50IGFuZCAgbWVyZ2luZyBvZiBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMuIFRoaXMgZG9lc24ndCBpbmNyZWFzZQp0aGUgc2l6ZSBvZiB0aGUgWE1MIG91dHB1dCBzaWduaWZpY2FudGx5LCBidXQgc2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgaXRzCnZhbHVlIGluIHRoZSBsb25nLXRlcm0uIEV4YW1wbGU6PC9wPgo8cHJlPiZsdDtteWRvYyB4bWxucz0iaHR0cDovL215ZG9jLmV4YW1wbGUub3JnL3NjaGVtYXMvIiZndDsKICAgJmx0O2VsZW0xJmd0Oy4uLiZsdDsvZWxlbTEmZ3Q7CiAgICZsdDtlbGVtMiZndDsuLi4mbHQ7L2VsZW0yJmd0OwombHQ7L215ZG9jJmd0OzwvcHJlPgoKPHA+VGhlIG5hbWVzcGFjZSB2YWx1ZSBoYXMgdG8gYmUgYW4gYWJzb2x1dGUgVVJMLCBidXQgdGhlIFVSTCBkb2Vzbid0IGhhdmUgdG8KcG9pbnQgdG8gYW55IGV4aXN0aW5nIHJlc291cmNlIG9uIHRoZSBXZWIuIEl0IHdpbGwgYmluZCBhbGwgdGhlIGVsZW1lbnQgYW5kCmF0dHJpYnV0ZXMgd2l0aCB0aGF0IFVSTC4gSSBzdWdnZXN0IHRvIHVzZSBhbiBVUkwgd2l0aGluIGEgZG9tYWluIHlvdQpjb250cm9sLCBhbmQgdGhhdCB0aGUgVVJMIHNob3VsZCBjb250YWluIHNvbWUga2luZCBvZiB2ZXJzaW9uIGluZm9ybWF0aW9uIGlmCnBvc3NpYmxlLiBGb3IgZXhhbXBsZSwgPGNvZGU+Imh0dHA6Ly93d3cuZ25vbWUub3JnL2dudW1lcmljLzEuMC8iPC9jb2RlPiBpcyBhCmdvb2QgbmFtZXNwYWNlIHNjaGVtZS48L3A+Cgo8cD5UaGVuIHdoZW4geW91IGxvYWQgYSBmaWxlLCBtYWtlIHN1cmUgdGhhdCBhIG5hbWVzcGFjZSBjYXJyeWluZyB0aGUKdmVyc2lvbi1pbmRlcGVuZGVudCBwcmVmaXggaXMgaW5zdGFsbGVkIG9uIHRoZSByb290IGVsZW1lbnQgb2YgeW91ciBkb2N1bWVudCwKYW5kIGlmIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGRvbid0IG1hdGNoIHNvbWV0aGluZyB5b3Uga25vdywgd2FybiB0aGUgdXNlcgphbmQgYmUgbGliZXJhbCBpbiB3aGF0IHlvdSBhY2NlcHQgYXMgdGhlIGlucHV0LiBBbHNvIGRvICpub3QqIHRyeSB0byBiYXNlCm5hbWVzcGFjZSBjaGVja2luZyBvbiB0aGUgcHJlZml4IHZhbHVlLiAmbHQ7Zm9vOnRleHQmZ3Q7IG1heSBiZSBleGFjdGx5IHRoZQpzYW1lIGFzICZsdDtiYXI6dGV4dCZndDsgaW4gYW5vdGhlciBkb2N1bWVudC4gV2hhdCByZWFsbHkgbWF0dGVycyBpcyB0aGUgVVJJCmFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCBvciB0aGUgYXR0cmlidXRlLCBub3QgdGhlIHByZWZpeCBzdHJpbmcgKHdoaWNoIGlzCmp1c3QgYSBzaG9ydGN1dCBmb3IgdGhlIGZ1bGwgVVJJKS4gSW4gbGlieG1sLCBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIGhhdmUgYW4KPGNvZGU+bnM8L2NvZGU+IGZpZWxkIHBvaW50aW5nIHRvIGFuIHhtbE5zIHN0cnVjdHVyZSBkZXRhaWxpbmcgdGhlIG5hbWVzcGFjZQpwcmVmaXggYW5kIGl0cyBVUkkuPC9wPgoKPHA+QEBJbnRlcmZhY2VzQEA8L3A+Cgo8cD5AQEV4YW1wbGVzQEA8L3A+Cgo8cD5Vc3VhbGx5IHBlb3BsZSBvYmplY3QgdG8gdXNpbmcgbmFtZXNwYWNlcyB0b2dldGhlciB3aXRoIHZhbGlkaXR5IGNoZWNraW5nLgpJIHdpbGwgdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHVzaW5nIG5hbWVzcGFjZXMgd29uJ3QgYnJlYWsgdmFsaWRpdHkgY2hlY2tpbmcsCnNvIGV2ZW4gaWYgeW91IHBsYW4gdG8gdXNlIG9yIGN1cnJlbnRseSBhcmUgdXNpbmcgdmFsaWRhdGlvbiBJIHN0cm9uZ2x5CnN1Z2dlc3QgYWRkaW5nIG5hbWVzcGFjZXMgdG8geW91ciBkb2N1bWVudC4gQSBkZWZhdWx0IG5hbWVzcGFjZSBzY2hlbWUKPGNvZGU+eG1sbnM9Imh0dHA6Ly8uLi4uIjwvY29kZT4gc2hvdWxkIG5vdCBicmVhayB2YWxpZGl0eSBldmVuIG9uIGxlc3MKZmxleGlibGUgcGFyc2Vycy4gVXNpbmcgbmFtZXNwYWNlcyB0byBtaXggYW5kIGRpZmZlcmVudGlhdGUgY29udGVudCBjb21pbmcKZnJvbSBtdWx0aXBsZSBEVERzIHdpbGwgY2VydGFpbmx5IGJyZWFrIGN1cnJlbnQgdmFsaWRhdGlvbiBzY2hlbWVzLiBJIHdpbGwKdHJ5IHRvIHByb3ZpZGUgd2F5cyB0byBkbyB0aGlzLCBidXQgdGhpcyBtYXkgbm90IGJlIHBvcnRhYmxlIG9yCnN0YW5kYXJkaXplZC48L3A+Cgo8aDI+PGEgbmFtZT0iVXBncmFkaW5nIj5VcGdyYWRpbmcgMS54IGNvZGU8L2E+PC9oMj4KCjxwPkluY29tcGF0aWJsZSBjaGFuZ2VzOjwvcD4KCjxwPlZlcnNpb24gMiBvZiBsaWJ4bWwgaXMgdGhlIGZpcnN0IHZlcnNpb24gaW50cm9kdWNpbmcgc2VyaW91cyBiYWNrd2FyZAppbmNvbXBhdGlibGUgY2hhbmdlcy4gVGhlIG1haW4gZ29hbHMgd2VyZTo8L3A+Cjx1bD4KICA8bGk+YSBnZW5lcmFsIGNsZWFudXAuIEEgbnVtYmVyIG9mIG1pc3Rha2VzIGluaGVyaXRlZCBmcm9tIHRoZSB2ZXJ5IGVhcmx5CiAgICB2ZXJzaW9ucyBjb3VsZG4ndCBiZSBjaGFuZ2VkIGR1ZSB0byBjb21wYXRpYmlsaXR5IGNvbnN0cmFpbnRzLiBFeGFtcGxlCiAgICB0aGUgImNoaWxkcyIgZWxlbWVudCBpbiB0aGUgbm9kZXMuPC9saT4KICA8bGk+VW5pZm9ybWl6YXRpb24gb2YgdGhlIHZhcmlvdXMgbm9kZXMsIGF0IGxlYXN0IGZvciB0aGVpciBoZWFkZXIgYW5kIGxpbmsKICAgIHBhcnRzIChkb2MsIHBhcmVudCwgY2hpbGRyZW4sIHByZXYsIG5leHQpLCB0aGUgZ29hbCBpcyBhIHNpbXBsZXIKICAgIHByb2dyYW1taW5nIG1vZGVsIGFuZCBzaW1wbGlmeWluZyB0aGUgdGFzayBvZiB0aGUgRE9NIGltcGxlbWVudG9ycy48L2xpPgogIDxsaT5iZXR0ZXIgY29uZm9ybWFuY2VzIHRvIHRoZSBYTUwgc3BlY2lmaWNhdGlvbiwgZm9yIGV4YW1wbGUgdmVyc2lvbiAxLngKICAgIGhhZCBhbiBoZXVyaXN0aWMgdG8gdHJ5IHRvIGRldGVjdCBpZ25vcmFibGUgd2hpdGUgc3BhY2VzLiBBcyBhIHJlc3VsdCB0aGUKICAgIFNBWCBldmVudCBnZW5lcmF0ZWQgd2VyZSBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgd2hpbGUgdGhlIHNwZWMgcmVxdWlyZXMKICAgIGNoYXJhY3RlcigpIGluIHRoYXQgY2FzZS4gVGhpcyBhbHNvIG1lYW4gdGhhdCBhIG51bWJlciBvZiBET00gbm9kZQogICAgY29udGFpbmluZyBibGFuayB0ZXh0IG1heSBwb3B1bGF0ZSB0aGUgRE9NIHRyZWUgd2hpY2ggd2VyZSBub3QgcHJlc2VudAogICAgYmVmb3JlLjwvbGk+CjwvdWw+Cgo8aDM+SG93IHRvIGZpeCBsaWJ4bWwtMS54IGNvZGU6PC9oMz4KCjxwPlNvIGNsaWVudCBjb2RlIG9mIGxpYnhtbCBkZXNpZ25lZCB0byBydW4gd2l0aCB2ZXJzaW9uIDEueCBtYXkgaGF2ZSB0byBiZQpjaGFuZ2VkIHRvIGNvbXBpbGUgYWdhaW5zdCB2ZXJzaW9uIDIueCBvZiBsaWJ4bWwuIEhlcmUgaXMgYSBsaXN0IG9mIGNoYW5nZXMKdGhhdCBJIGhhdmUgY29sbGVjdGVkLCB0aGV5IG1heSBub3QgYmUgc3VmZmljaWVudCwgc28gaW4gY2FzZSB5b3UgZmluZCBvdGhlcgpjaGFuZ2Ugd2hpY2ggYXJlIHJlcXVpcmVkLCA8YSBocmVmPSJtYWlsdG86RGFuaWVsLs9laWxsYXJkdzMub3JnIj5kcm9wIG1lIGEKbWFpbDwvYT46PC9wPgo8b2w+CiAgPGxpPlRoZSBwYWNrYWdlIG5hbWUgaGF2ZSBjaGFuZ2VkIGZyb20gbGlieG1sIHRvIGxpYnhtbDIsIHRoZSBsaWJyYXJ5IG5hbWUKICAgIGlzIG5vdyAtbHhtbDIgLiBUaGVyZSBpcyBhIG5ldyB4bWwyLWNvbmZpZyBzY3JpcHQgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8KICAgIHNlbGVjdCB0aGUgcmlnaHQgcGFyYW1ldGVycyBsaWJ4bWwyPC9saT4KICA8bGk+Tm9kZSA8c3Ryb25nPmNoaWxkczwvc3Ryb25nPiBmaWVsZCBoYXMgYmVlbiByZW5hbWVkCiAgICA8c3Ryb25nPmNoaWxkcmVuPC9zdHJvbmc+IHNvIHMvY2hpbGRzL2NoaWxkcmVuL2cgc2hvdWxkIGJlICBhcHBsaWVkCiAgICAocHJvYmFiaWxpdHkgb2YgaGF2aW5nICJjaGlsZHMiIGFueXdoZXJlIGVsc2UgaXMgY2xvc2UgdG8gMCs8L2xpPgogIDxsaT5UaGUgZG9jdW1lbnQgZG9uJ3QgaGF2ZSBhbnltb3JlIGEgPHN0cm9uZz5yb290PC9zdHJvbmc+IGVsZW1lbnQgaXQgaGFzCiAgICBiZWVuIHJlcGxhY2VkIGJ5IDxzdHJvbmc+Y2hpbGRyZW48L3N0cm9uZz4gYW5kIHVzdWFsbHkgeW91IHdpbGwgZ2V0IGEKICAgIGxpc3Qgb2YgZWxlbWVudCBoZXJlLiBGb3IgZXhhbXBsZSBhIER0ZCBlbGVtZW50IGZvciB0aGUgaW50ZXJuYWwgc3Vic2V0CiAgICBhbmQgaXQncyBkZWNsYXJhdGlvbiBtYXkgYmUgZm91bmQgaW4gdGhhdCBsaXN0LCBhcyB3ZWxsIGFzIHByb2Nlc3NpbmcKICAgIGluc3RydWN0aW9ucyBvciBjb21tZW50cyBmb3VuZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4KICAgIFVzZSA8c3Ryb25nPnhtbERvY0dldFJvb3RFbGVtZW50KGRvYyk8L3N0cm9uZz4gdG8gZ2V0IHRoZSByb290IGVsZW1lbnQgb2YKICAgIGEgZG9jdW1lbnQuIEFsdGVybmF0aXZlbHkgaWYgeW91IGFyZSBzdXJlIHRvIG5vdCByZWZlcmVuY2UgRFREcyBub3IgaGF2ZQogICAgUElzIG9yIGNvbW1lbnRzIGJlZm9yZSBvciBhZnRlciB0aGUgcm9vdCBlbGVtZW50CiAgICBzLy0mZ3Q7cm9vdC8tJmd0O2NoaWxkcmVuL2cgd2lsbCBwcm9iYWJseSBkbyBpdC48L2xpPgogIDxsaT5UaGUgd2hpdGUgc3BhY2UgaXNzdWUsIHRoaXMgb25lIGlzIG1vcmUgY29tcGxleCwgdW5sZXNzIHNwZWNpYWwgY2FzZSBvZgogICAgdmFsaWRhdGluZyBwYXJzaW5nLCB0aGUgbGluZSBicmVha3MgYW5kIHNwYWNlcyB1c3VhbGx5IHVzZWQgZm9yIGluZGVudGluZwogICAgYW5kIGZvcm1hdHRpbmcgdGhlIGRvY3VtZW50IGNvbnRlbnQgYmVjb21lcyBzaWduaWZpY2FudC4gU28gdGhleSBhcmUKICAgIHJlcG9ydGVkIGJ5IFNBWCBhbmQgaWYgeW91ciB1c2luZyB0aGUgRE9NIHRyZWUsIGNvcnJlc3BvbmRpbmcgbm9kZXMgYXJlCiAgICBnZW5lcmF0ZWQuIFRvbyBhcHByb2FjaCBjYW4gYmUgdGFrZW46CiAgICA8b2w+CiAgICAgIDxsaT5sYXp5IG9uZSwgdXNlIHRoZSBjb21wYXRpYmlsaXR5IGNhbGwKICAgICAgICA8c3Ryb25nPnhtbEtlZXBCbGFua3NEZWZhdWx0KDApPC9zdHJvbmc+IGJ1dCBiZSBhd2FyZSB0aGF0IHlvdSBhcmUKICAgICAgICByZWx5aW5nIG9uIGEgc3BlY2lhbCAoYW5kIHBvc3NpYmx5IGJyb2tlbikgc2V0IG9mIGhldXJpc3RpY3Mgb2YKICAgICAgICBsaWJ4bWwgdG8gZGV0ZWN0IGlnbm9yYWJsZSBibGFua3MuIERvbid0IGNvbXBsYWluIGlmIGl0IGJyZWFrcyBvcgogICAgICAgIG1ha2UgeW91ciBhcHBsaWNhdGlvbiBub3QgMTAwJSBjbGVhbiB3LnIudC4gdG8gaXQncyBpbnB1dC48L2xpPgogICAgICA8bGk+dGhlIFJpZ2h0IFdheTogY2hhbmdlIHlvdSBjb2RlIHRvIGFjY2VwdCBwb3NzaWJseSBpbnNpZ25pZmljYW50CiAgICAgICAgYmxhbmtzIGNoYXJhY3RlcnMsIG9yIGhhdmUgeW91ciB0cmVlIHBvcHVsYXRlZCB3aXRoIHdlaXJkIGJsYW5rIHRleHQKICAgICAgICBub2Rlcy4gWW91IGNhbiBzcG90IHRoZW0gdXNpbmcgdGhlIGNvbW1vZGl0eSBmdW5jdGlvbgogICAgICAgIDxzdHJvbmc+eG1sSXNCbGFua05vZGUobm9kZSk8L3N0cm9uZz4gcmV0dXJuaW5nIDEgZm9yIHN1Y2ggYmxhbmsKICAgICAgICBub2Rlcy48L2xpPgogICAgPC9vbD4KICAgIDxwPk5vdGUgYWxzbyB0aGF0IHdpdGggdGhlIG5ldyBkZWZhdWx0IHRoZSBvdXRwdXQgZnVuY3Rpb25zIGRvbid0IGFkZCBhbnkKICAgIGV4dHJhIGluZGVudGF0aW9uIHdoZW4gc2F2aW5nIGEgdHJlZSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJvdW5kIHRyaXAKICAgIChyZWFkIGFuZCBzYXZlKSB3aXRob3V0IGluZmxhdGluZyB0aGUgZG9jdW1lbnQgd2l0aCBleHRyYSBmb3JtYXR0aW5nCiAgICBjaGFycy48L3A+CiAgPC9saT4KICA8bGk+VGhlIGluY2x1ZGUgcGF0aCBoYXMgY2hhbmdlZCB0byAkcHJlZml4L2xpYnhtbC8gYW5kIHRoZSBpbmNsdWRlcwogICAgdGhlbXNlbHZlcyB1c2VzIHRoaXMgbmV3IHByZWZpeCBpbiBpbmNsdWRlcyBpbnN0cnVjdGlvbnMuLi4gSWYgeW91IGFyZQogICAgdXNpbmcgKGFzIGV4cGVjdGVkKSB0aGUKICAgIDxwcmU+eG1sMi1jb25maWcgLS1jZmxhZ3M8L3ByZT4KICAgIDxwPm91dHB1dCB0byBnZW5lcmF0ZSB5b3UgY29tcGlsZSBjb21tYW5kcyB0aGlzIHdpbGwgcHJvYmFibHkgd29yayBvdXQgb2YKICAgIHRoZSBib3g8L3A+CiAgPC9saT4KICA8bGk+eG1sRGV0ZWN0Q2hhckVuY29kaW5nIHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50IGluZGljYXRpbmcgdGhlIGxlbmd0aCBpbgogICAgYnl0ZSBvZiB0aGUgaGVhZCBvZiB0aGUgZG9jdW1lbnQgYXZhaWxhYmxlIGZvciBjaGFyYWN0ZXIgZGV0ZWN0aW9uLjwvbGk+Cjwvb2w+Cgo8aDM+RW5zdXJpbmcgYm90aCBsaWJ4bWwtMS54IGFuZCBsaWJ4bWwtMi54IGNvbXBhdGliaWxpdHk8L2gzPgoKPHA+VHdvIG5ldyB2ZXJzaW9uIG9mIGxpYnhtbCAoMS44LjExKSBhbmQgbGlieG1sMiAoMi4zLjQpIGhhdmUgYmVlbiByZWxlYXNlZAp0byBhbGxvdyBzbW9vdGggdXBncmFkZSBvZiBleGlzdGluZyBsaWJ4bWwgdjFjb2RlIHdoaWxlIHJldGFpbmluZwpjb21wYXRpYmlsaXR5LiBUaGV5IG9mZmVycyB0aGUgZm9sbG93aW5nOjwvcD4KPG9sPgogIDxsaT5zaW1pbGFyIGluY2x1ZGUgbmFtaW5nLCBvbmUgc2hvdWxkIHVzZQogICAgPHN0cm9uZz4jaW5jbHVkZSZsdDtsaWJ4bWwvLi4uJmd0Ozwvc3Ryb25nPiBpbiBib3RoIGNhc2VzLjwvbGk+CiAgPGxpPnNpbWlsYXIgaWRlbnRpZmllcnMgZGVmaW5lZCB2aWEgbWFjcm9zIGZvciB0aGUgY2hpbGQgYW5kIHJvb3QgZmllbGRzOgogICAgcmVzcGVjdGl2ZWx5IDxzdHJvbmc+eG1sQ2hpbGRyZW5Ob2RlPC9zdHJvbmc+IGFuZAogICAgPHN0cm9uZz54bWxSb290Tm9kZTwvc3Ryb25nPjwvbGk+CiAgPGxpPmEgbmV3IG1hY3JvIDxzdHJvbmc+TElCWE1MX1RFU1RfVkVSU0lPTjwvc3Ryb25nPiB3aGljaCBzaG91bGQgYmUKICAgIGluc2VydGVkIG9uY2UgaW4gdGhlIGNsaWVudCBjb2RlPC9saT4KPC9vbD4KCjxwPlNvIHRoZSByb2FkbWFwIHRvIHVwZ3JhZGUgeW91ciBleGlzdGluZyBsaWJ4bWwgYXBwbGljYXRpb25zIGlzIHRoZQpmb2xsb3dpbmc6PC9wPgo8b2w+CiAgPGxpPmluc3RhbGwgdGhlICBsaWJ4bWwtMS44LjggKGFuZCBsaWJ4bWwtZGV2ZWwtMS44LjgpIHBhY2thZ2VzPC9saT4KICA8bGk+ZmluZCBhbGwgb2NjdXJyZW5jZXMgd2hlcmUgdGhlIHhtbERvYyA8c3Ryb25nPnJvb3Q8L3N0cm9uZz4gZmllbGQgaXMKICAgIHVzZWQgYW5kIGNoYW5nZSBpdCB0byA8c3Ryb25nPnhtbFJvb3ROb2RlPC9zdHJvbmc+PC9saT4KICA8bGk+c2ltaWxhcmx5IGZpbmQgYWxsIG9jY3VycmVuY2VzIHdoZXJlIHRoZSB4bWxOb2RlCiAgICA8c3Ryb25nPmNoaWxkczwvc3Ryb25nPiBmaWVsZCBpcyB1c2VkIGFuZCBjaGFuZ2UgaXQgdG8KICAgIDxzdHJvbmc+eG1sQ2hpbGRyZW5Ob2RlPC9zdHJvbmc+PC9saT4KICA8bGk+YWRkIGEgPHN0cm9uZz5MSUJYTUxfVEVTVF9WRVJTSU9OPC9zdHJvbmc+IG1hY3JvIHNvbWV3aGVyZSBpbiB5b3VyCiAgICA8c3Ryb25nPm1haW4oKTwvc3Ryb25nPiBvciBpbiB0aGUgbGlicmFyeSBpbml0IGVudHJ5IHBvaW50PC9saT4KICA8bGk+UmVjb21waWxlLCBjaGVjayBjb21wYXRpYmlsaXR5LCBpdCBzaG91bGQgc3RpbGwgd29yazwvbGk+CiAgPGxpPkNoYW5nZSB5b3VyIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbG9vayBmaXJzdCBmb3IgeG1sMi1jb25maWcgYW5kIGZhbGwKICAgIGJhY2sgdXNpbmcgeG1sLWNvbmZpZyAuIFVzZSB0aGUgLS1jZmxhZ3MgYW5kIC0tbGlicyBvdXRwdXQgb2YgdGhlIGNvbW1hbmQKICAgIGFzIHRoZSBJbmNsdWRlIGFuZCBMaW5raW5nIHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBsaWJ4bWwuPC9saT4KICA8bGk+aW5zdGFsbCBsaWJ4bWwyLTIuMy54IGFuZCAgbGlieG1sMi1kZXZlbC0yLjMueCAobGlieG1sLTEuOC55IGFuZAogICAgbGlieG1sLWRldmVsLTEuOC55IGNhbiBiZSBrZXB0IHNpbXVsdGFuZW91c2x5KTwvbGk+CiAgPGxpPnJlbW92ZSB5b3VyIGNvbmZpZy5jYWNoZSwgcmVsYXVuY2ggeW91ciBjb25maWd1cmF0aW9uIG1lY2hhbmlzbSwgYW5kCiAgICByZWNvbXBpbGUsIGlmIHN0ZXBzIDIgYW5kIDMgd2VyZSBkb25lIHJpZ2h0IGl0IHNob3VsZCBjb21waWxlIGFzLWlzPC9saT4KICA8bGk+VGVzdCB0aGF0IHlvdXIgYXBwbGljYXRpb24gaXMgc3RpbGwgcnVubmluZyBjb3JyZWN0bHksIGlmIG5vdCB0aGlzIG1heQogICAgYmUgZHVlIHRvIGV4dHJhIGVtcHR5IG5vZGVzIGR1ZSB0byBmb3JtYXRpbmcgc3BhY2VzIGJlaW5nIGtlcHQgaW4gbGlieG1sMgogICAgY29udHJhcnkgdG8gbGlieG1sMSwgaW4gdGhhdCBjYXNlIGluc2VydCB4bWxLZWVwQmxhbmtzRGVmYXVsdCgxKSBpbiB5b3VyCiAgICBjb2RlIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgKG5leHQgdG8KICAgIDxzdHJvbmc+TElCWE1MX1RFU1RfVkVSU0lPTjwvc3Ryb25nPiBpcyBhIGZpbmUgcGxhY2UpLjwvbGk+Cjwvb2w+Cgo8cD5Gb2xsb3dpbmcgdGhvc2Ugc3RlcHMgc2hvdWxkIHdvcmsuIEl0IHdvcmtlZCBmb3Igc29tZSBvZiBteSBvd24gY29kZS48L3A+Cgo8cD5MZXQgbWUgcHV0IHNvbWUgZW1waGFzaXMgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBmYXIgbW9yZSBjaGFuZ2VzIGZyb20KbGlieG1sIDEueCB0byAyLnggdGhhbiB0aGUgb25lcyB5b3UgbWF5IGhhdmUgdG8gcGF0Y2ggZm9yLiBUaGUgb3ZlcmFsbCBjb2RlCmhhcyBiZWVuIGNvbnNpZGVyYWJseSBjbGVhbmVkIHVwIGFuZCB0aGUgY29uZm9ybWFuY2UgdG8gdGhlIFhNTCBzcGVjaWZpY2F0aW9uCmhhcyBiZWVuIGRyYXN0aWNhbGx5IGltcHJvdmVkIHRvby4gRG9uJ3QgdGFrZSB0aG9zZSBjaGFuZ2VzIGFzIGFuIGV4Y3VzZSB0bwpub3QgdXBncmFkZSwgaXQgbWF5IGNvc3QgYSBsb3Qgb24gdGhlIGxvbmcgdGVybSAuLi48L3A+Cgo8aDI+PGEgbmFtZT0iVGhyZWFkIj5UaHJlYWQgc2FmZXR5PC9hPjwvaDI+Cgo8cD5TdGFydGluZyB3aXRoIDIuNC43LCBsaWJ4bWwgbWFrZXMgcHJvdmlzaW9ucyB0byBlbnN1cmUgdGhhdCBjb25jdXJyZW50CnRocmVhZHMgY2FuIHNhZmVseSB3b3JrIGluIHBhcmFsbGVsIHBhcnNpbmcgZGlmZmVyZW50IGRvY3VtZW50cy4gVGhlcmUgaXMKaG93ZXZlciBhIGNvdXBsZSBvZiB0aGluZ3MgdG8gZG8gdG8gZW5zdXJlIGl0OjwvcD4KPHVsPgogIDxsaT5jb25maWd1cmUgdGhlIGxpYnJhcnkgYWNjb3JkaW5nbHkgdXNpbmcgdGhlIC0td2l0aC10aHJlYWRzIG9wdGlvbnM8L2xpPgogIDxsaT5jYWxsIHhtbEluaXRQYXJzZXIoKSBpbiB0aGUgIm1haW4iIHRocmVhZCBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZQogICAgbGlieG1sIEFQSSAoZXhjZXB0IHBvc3NpYmx5IHNlbGVjdGluZyBhIGRpZmZlcmVudCBtZW1vcnkgYWxsb2NhdG9yKTwvbGk+CjwvdWw+Cgo8cD5Ob3RlIHRoYXQgdGhlIHRocmVhZCBzYWZldHkgY2Fubm90IGJlIGVuc3VyZWQgZm9yIG11bHRpcGxlIHRocmVhZHMgc2hhcmluZwp0aGUgc2FtZSBkb2N1bWVudCwgdGhlIGxvY2tpbmcgbXVzdCBiZSBkb25lIGF0IHRoZSBhcHBsaWNhdGlvbiBsZXZlbCwgbGlieG1sCmV4cG9ydHMgYSBiYXNpYyBtdXRleCBhbmQgcmVlbnRyYW50IG11dGV4ZXMgQVBJIGluICZsdDtsaWJ4bWwvdGhyZWFkcy5oJmd0Oy4KVGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IGNoZWNrZWQgZm9yIHRocmVhZCBzYWZldHkgYXJlOjwvcD4KPHVsPgogIDxsaT5jb25jdXJyZW50IGxvYWRpbmc8L2xpPgogIDxsaT5maWxlIGFjY2VzcyByZXNvbHV0aW9uPC9saT4KICA8bGk+Y2F0YWxvZyBhY2Nlc3M8L2xpPgogIDxsaT5jYXRhbG9nIGJ1aWxkaW5nPC9saT4KICA8bGk+ZW50aXRpZXMgbG9va3VwL2FjY2Vzc2VzPC9saT4KICA8bGk+dmFsaWRhdGlvbjwvbGk+CiAgPGxpPmdsb2JhbCB2YXJpYWJsZXMgcGVyLXRocmVhZCBvdmVycmlkZTwvbGk+CiAgPGxpPm1lbW9yeSBoYW5kbGluZzwvbGk+CjwvdWw+Cgo8cD5YUGF0aCBpcyBzdXBwb3NlZCB0byBiZSB0aHJlYWQgc2FmZSBub3csIGJ1dCB0aGlzIHdhc24ndCB0ZXN0ZWQKc2VyaW91c2x5LjwvcD4KCjxoMj48YSBuYW1lPSJET00iPjwvYT48YSBuYW1lPSJQcmluY2lwbGVzIj5ET00gUHJpbmNpcGxlczwvYT48L2gyPgoKPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvRE9NLyI+RE9NPC9hPiBzdGFuZHMgZm9yIHRoZSA8ZW0+RG9jdW1lbnQKT2JqZWN0IE1vZGVsPC9lbT47IHRoaXMgaXMgYW4gQVBJIGZvciBhY2Nlc3NpbmcgWE1MIG9yIEhUTUwgc3RydWN0dXJlZApkb2N1bWVudHMuIE5hdGl2ZSBzdXBwb3J0IGZvciBET00gaW4gR25vbWUgaXMgb24gdGhlIHdheSAobW9kdWxlIGdub21lLWRvbSksCmFuZCB3aWxsIGJlIGJhc2VkIG9uIGdub21lLXhtbC4gVGhpcyB3aWxsIGJlIGEgZmFyIGNsZWFuZXIgaW50ZXJmYWNlIHRvCm1hbmlwdWxhdGUgWE1MIGZpbGVzIHdpdGhpbiBHbm9tZSBzaW5jZSBpdCB3b24ndCBleHBvc2UgdGhlIGludGVybmFsCnN0cnVjdHVyZS48L3A+Cgo8cD5UaGUgY3VycmVudCBET00gaW1wbGVtZW50YXRpb24gb24gdG9wIG9mIGxpYnhtbCBpcyB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9nZG9tZTIvIj5nZG9tZTIgR25vbWUgbW9kdWxlPC9hPiwgdGhpcwppcyBhIGZ1bGwgRE9NIGludGVyZmFjZSwgdGhhbmtzIHRvIFBhb2xvIENhc2FyaW5pLCBjaGVjayB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5jcy51bmliby5pdC9+Y2FzYXJpbmkvZ2RvbWUyLyI+R2RvbWUyIGhvbWVwYWdlPC9hPiBmb3IgbW9yZQppbmZvcm1hdGlvbnMuPC9wPgoKPGgyPjxhIG5hbWU9IkV4YW1wbGUiPjwvYT48YSBuYW1lPSJyZWFsIj5BIHJlYWwgZXhhbXBsZTwvYT48L2gyPgoKPHA+SGVyZSBpcyBhIHJlYWwgc2l6ZSBleGFtcGxlLCB3aGVyZSB0aGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uCmRhdGEgaXMgbm90IGtlcHQgaW4gdGhlIERPTSB0cmVlIGJ1dCB1c2VzIGludGVybmFsIHN0cnVjdHVyZXMuIEl0IGlzIGJhc2VkIG9uCmEgcHJvcG9zYWwgdG8ga2VlcCBhIGRhdGFiYXNlIG9mIGpvYnMgcmVsYXRlZCB0byBHbm9tZSwgd2l0aCBhbiBYTUwgYmFzZWQKc3RvcmFnZSBzdHJ1Y3R1cmUuIEhlcmUgaXMgYW4gPGEgaHJlZj0iZ2pvYnMueG1sIj5YTUwgZW5jb2RlZCBqb2JzCmJhc2U8L2E+OjwvcD4KPHByZT4mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKJmx0O2dqb2I6SGVscGluZyB4bWxuczpnam9iPSJodHRwOi8vd3d3Lmdub21lLm9yZy9zb21lLWxvY2F0aW9uIiZndDsKICAmbHQ7Z2pvYjpKb2JzJmd0OwoKICAgICZsdDtnam9iOkpvYiZndDsKICAgICAgJmx0O2dqb2I6UHJvamVjdCBJRD0iMyIvJmd0OwogICAgICAmbHQ7Z2pvYjpBcHBsaWNhdGlvbiZndDtHQmFja3VwJmx0Oy9nam9iOkFwcGxpY2F0aW9uJmd0OwogICAgICAmbHQ7Z2pvYjpDYXRlZ29yeSZndDtEZXZlbG9wbWVudCZsdDsvZ2pvYjpDYXRlZ29yeSZndDsKCiAgICAgICZsdDtnam9iOlVwZGF0ZSZndDsKICAgICAgICAmbHQ7Z2pvYjpTdGF0dXMmZ3Q7T3BlbiZsdDsvZ2pvYjpTdGF0dXMmZ3Q7CiAgICAgICAgJmx0O2dqb2I6TW9kaWZpZWQmZ3Q7TW9uLCAwNyBKdW4gMTk5OSAyMDoyNzo0NSAtMDQwMCBNRVQgRFNUJmx0Oy9nam9iOk1vZGlmaWVkJmd0OwogICAgICAgICZsdDtnam9iOlNhbGFyeSZndDtVU0QgMC4wMCZsdDsvZ2pvYjpTYWxhcnkmZ3Q7CiAgICAgICZsdDsvZ2pvYjpVcGRhdGUmZ3Q7CgogICAgICAmbHQ7Z2pvYjpEZXZlbG9wZXJzJmd0OwogICAgICAgICZsdDtnam9iOkRldmVsb3BlciZndDsKICAgICAgICAmbHQ7L2dqb2I6RGV2ZWxvcGVyJmd0OwogICAgICAmbHQ7L2dqb2I6RGV2ZWxvcGVycyZndDsKCiAgICAgICZsdDtnam9iOkNvbnRhY3QmZ3Q7CiAgICAgICAgJmx0O2dqb2I6UGVyc29uJmd0O05hdGhhbiBDbGVtb25zJmx0Oy9nam9iOlBlcnNvbiZndDsKICAgICAgICAmbHQ7Z2pvYjpFbWFpbCZndDtuYXRoYW5Ad2luZHNvZnN0b3JtLm5ldCZsdDsvZ2pvYjpFbWFpbCZndDsKICAgICAgICAmbHQ7Z2pvYjpDb21wYW55Jmd0OwogICAgICAgICZsdDsvZ2pvYjpDb21wYW55Jmd0OwogICAgICAgICZsdDtnam9iOk9yZ2FuaXNhdGlvbiZndDsKICAgICAgICAmbHQ7L2dqb2I6T3JnYW5pc2F0aW9uJmd0OwogICAgICAgICZsdDtnam9iOldlYnBhZ2UmZ3Q7CiAgICAgICAgJmx0Oy9nam9iOldlYnBhZ2UmZ3Q7CiAgICAgICAgJmx0O2dqb2I6U25haWxtYWlsJmd0OwogICAgICAgICZsdDsvZ2pvYjpTbmFpbG1haWwmZ3Q7CiAgICAgICAgJmx0O2dqb2I6UGhvbmUmZ3Q7CiAgICAgICAgJmx0Oy9nam9iOlBob25lJmd0OwogICAgICAmbHQ7L2dqb2I6Q29udGFjdCZndDsKCiAgICAgICZsdDtnam9iOlJlcXVpcmVtZW50cyZndDsKICAgICAgVGhlIHByb2dyYW0gc2hvdWxkIGJlIHJlbGVhc2VkIGFzIGZyZWUgc29mdHdhcmUsIHVuZGVyIHRoZSBHUEwuCiAgICAgICZsdDsvZ2pvYjpSZXF1aXJlbWVudHMmZ3Q7CgogICAgICAmbHQ7Z2pvYjpTa2lsbHMmZ3Q7CiAgICAgICZsdDsvZ2pvYjpTa2lsbHMmZ3Q7CgogICAgICAmbHQ7Z2pvYjpEZXRhaWxzJmd0OwogICAgICBBIEdOT01FIGJhc2VkIHN5c3RlbSB0aGF0IHdpbGwgYWxsb3cgYSBzdXBlcnVzZXIgdG8gY29uZmlndXJlIAogICAgICBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMgYW5kL29yIGZpbGUgc3lzdGVtcyB0byBiZSBiYWNrZWQgCiAgICAgIHVwIHdpdGggYSBzdXBwb3J0ZWQgbWVkaWEgaW4gdGhlIHN5c3RlbS4gIFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gCiAgICAgIHBlcmZvcm0gdmlhIGZpbmQgY29tbWFuZHMgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBhcmUgcGFzc2VkIAogICAgICB0byB0YXIsIGRkLCBjcGlvLCBjcCwgZ3ppcCwgZXRjLiwgdG8gYmUgZGlyZWN0ZWQgdG8gdGhlIHRhcGUgbWFjaGluZSAKICAgICAgb3IgdmlhIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4gRW1haWwgCiAgICAgIG5vdGlmaWNhdGlvbiBhbmQgR1VJIHN0YXR1cyBkaXNwbGF5IHZlcnkgaW1wb3J0YW50LgogICAgICAmbHQ7L2dqb2I6RGV0YWlscyZndDsKCiAgICAmbHQ7L2dqb2I6Sm9iJmd0OwoKICAmbHQ7L2dqb2I6Sm9icyZndDsKJmx0Oy9nam9iOkhlbHBpbmcmZ3Q7PC9wcmU+Cgo8cD5XaGlsZSBsb2FkaW5nIHRoZSBYTUwgZmlsZSBpbnRvIGFuIGludGVybmFsIERPTSB0cmVlIGlzIGEgbWF0dGVyIG9mCmNhbGxpbmcgb25seSBhIGNvdXBsZSBvZiBmdW5jdGlvbnMsIGJyb3dzaW5nIHRoZSB0cmVlIHRvIGdhdGhlciB0aGUgZGF0YSBhbmQKZ2VuZXJhdGUgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgaXMgaGFyZGVyLCBhbmQgbW9yZSBlcnJvciBwcm9uZS48L3A+Cgo8cD5UaGUgc3VnZ2VzdGVkIHByaW5jaXBsZSBpcyB0byBiZSB0b2xlcmFudCB3aXRoIHJlc3BlY3QgdG8gdGhlIGlucHV0CnN0cnVjdHVyZS4gRm9yIGV4YW1wbGUsIHRoZSBvcmRlcmluZyBvZiB0aGUgYXR0cmlidXRlcyBpcyBub3Qgc2lnbmlmaWNhbnQsCnRoZSBYTUwgc3BlY2lmaWNhdGlvbiBpcyBjbGVhciBhYm91dCBpdC4gSXQncyBhbHNvIHVzdWFsbHkgYSBnb29kIGlkZWEgbm90IHRvCmRlcGVuZCBvbiB0aGUgb3JkZXIgb2YgdGhlIGNoaWxkcmVuIG9mIGEgZ2l2ZW4gbm9kZSwgdW5sZXNzIGl0IHJlYWxseSBtYWtlcwp0aGluZ3MgaGFyZGVyLiBIZXJlIGlzIHNvbWUgY29kZSB0byBwYXJzZSB0aGUgaW5mb3JtYXRpb24gZm9yIGEgcGVyc29uOjwvcD4KPHByZT4vKgogKiBBIHBlcnNvbiByZWNvcmQKICovCnR5cGVkZWYgc3RydWN0IHBlcnNvbiB7CiAgICBjaGFyICpuYW1lOwogICAgY2hhciAqZW1haWw7CiAgICBjaGFyICpjb21wYW55OwogICAgY2hhciAqb3JnYW5pc2F0aW9uOwogICAgY2hhciAqc21haWw7CiAgICBjaGFyICp3ZWJQYWdlOwogICAgY2hhciAqcGhvbmU7Cn0gcGVyc29uLCAqcGVyc29uUHRyOwoKLyoKICogQW5kIHRoZSBjb2RlIG5lZWRlZCB0byBwYXJzZSBpdAogKi8KcGVyc29uUHRyIHBhcnNlUGVyc29uKHhtbERvY1B0ciBkb2MsIHhtbE5zUHRyIG5zLCB4bWxOb2RlUHRyIGN1cikgewogICAgcGVyc29uUHRyIHJldCA9IE5VTEw7CgpERUJVRygicGFyc2VQZXJzb25cbiIpOwogICAgLyoKICAgICAqIGFsbG9jYXRlIHRoZSBzdHJ1Y3QKICAgICAqLwogICAgcmV0ID0gKHBlcnNvblB0cikgbWFsbG9jKHNpemVvZihwZXJzb24pKTsKICAgIGlmIChyZXQgPT0gTlVMTCkgewogICAgICAgIGZwcmludGYoc3RkZXJyLCJvdXQgb2YgbWVtb3J5XG4iKTsKICAgICAgICByZXR1cm4oTlVMTCk7CiAgICB9CiAgICBtZW1zZXQocmV0LCAwLCBzaXplb2YocGVyc29uKSk7CgogICAgLyogV2UgZG9uJ3QgY2FyZSB3aGF0IHRoZSB0b3AgbGV2ZWwgZWxlbWVudCBuYW1lIGlzICovCiAgICBjdXIgPSBjdXItJmd0O3htbENoaWxkcmVuTm9kZTsKICAgIHdoaWxlIChjdXIgIT0gTlVMTCkgewogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJQZXJzb24iKSkgJmFtcDsmYW1wOyAoY3VyLSZndDtucyA9PSBucykpCiAgICAgICAgICAgIHJldC0mZ3Q7bmFtZSA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJFbWFpbCIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDtlbWFpbCA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGN1ciA9IGN1ci0mZ3Q7bmV4dDsKICAgIH0KCiAgICByZXR1cm4ocmV0KTsKfTwvcHJlPgoKPHA+SGVyZSBhcmUgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGljZTo8L3A+Cjx1bD4KICA8bGk+VXN1YWxseSBhIHJlY3Vyc2l2ZSBwYXJzaW5nIHN0eWxlIGlzIHRoZSBtb3JlIGNvbnZlbmllbnQgb25lOiBYTUwgZGF0YQogICAgaXMgYnkgbmF0dXJlIHN1YmplY3QgdG8gcmVwZXRpdGl2ZSBjb25zdHJ1Y3RzIGFuZCB1c3VhbGx5IGV4aGliaXRzIGhpZ2hseQogICAgc3RydWN0dXJlZCBwYXR0ZXJucy48L2xpPgogIDxsaT5UaGUgdHdvIGFyZ3VtZW50cyBvZiB0eXBlIDxlbT54bWxEb2NQdHI8L2VtPiBhbmQgPGVtPnhtbE5zUHRyPC9lbT4sCiAgICBpLmUuIHRoZSBwb2ludGVyIHRvIHRoZSBnbG9iYWwgWE1MIGRvY3VtZW50IGFuZCB0aGUgbmFtZXNwYWNlIHJlc2VydmVkIHRvCiAgICB0aGUgYXBwbGljYXRpb24uIERvY3VtZW50IHdpZGUgaW5mb3JtYXRpb24gYXJlIG5lZWRlZCBmb3IgZXhhbXBsZSB0bwogICAgZGVjb2RlIGVudGl0aWVzIGFuZCBpdCdzIGEgZ29vZCBjb2RpbmcgcHJhY3RpY2UgdG8gZGVmaW5lIGEgbmFtZXNwYWNlIGZvcgogICAgeW91ciBhcHBsaWNhdGlvbiBzZXQgb2YgZGF0YSBhbmQgdGVzdCB0aGF0IHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzCiAgICB5b3UncmUgYW5hbHl6aW5nIGFjdHVhbGx5IHBlcnRhaW5zIHRvIHlvdXIgYXBwbGljYXRpb24gc3BhY2UuIFRoaXMgaXMKICAgIGRvbmUgYnkgYSBzaW1wbGUgZXF1YWxpdHkgdGVzdCAoY3VyLSZndDtucyA9PSBucykuPC9saT4KICA8bGk+VG8gcmV0cmlldmUgdGV4dCBhbmQgYXR0cmlidXRlcyB2YWx1ZSwgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uCiAgICA8ZW0+eG1sTm9kZUxpc3RHZXRTdHJpbmc8L2VtPiB0byBnYXRoZXIgYWxsIHRoZSB0ZXh0IGFuZCBlbnRpdHkgcmVmZXJlbmNlCiAgICBub2RlcyBnZW5lcmF0ZWQgYnkgdGhlIERPTSBvdXRwdXQgYW5kIHByb2R1Y2UgYW4gc2luZ2xlIHRleHQgc3RyaW5nLjwvbGk+CjwvdWw+Cgo8cD5IZXJlIGlzIGFub3RoZXIgcGllY2Ugb2YgY29kZSB1c2VkIHRvIHBhcnNlIGFub3RoZXIgbGV2ZWwgb2YgdGhlCnN0cnVjdHVyZTo8L3A+CjxwcmU+I2luY2x1ZGUgJmx0O2xpYnhtbC90cmVlLmgmZ3Q7Ci8qCiAqIGEgRGVzY3JpcHRpb24gZm9yIGEgSm9iCiAqLwp0eXBlZGVmIHN0cnVjdCBqb2IgewogICAgY2hhciAqcHJvamVjdElEOwogICAgY2hhciAqYXBwbGljYXRpb247CiAgICBjaGFyICpjYXRlZ29yeTsKICAgIHBlcnNvblB0ciBjb250YWN0OwogICAgaW50IG5iRGV2ZWxvcGVyczsKICAgIHBlcnNvblB0ciBkZXZlbG9wZXJzWzEwMF07IC8qIHVzaW5nIGR5bmFtaWMgYWxsb2MgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSAqLwp9IGpvYiwgKmpvYlB0cjsKCi8qCiAqIEFuZCB0aGUgY29kZSBuZWVkZWQgdG8gcGFyc2UgaXQKICovCmpvYlB0ciBwYXJzZUpvYih4bWxEb2NQdHIgZG9jLCB4bWxOc1B0ciBucywgeG1sTm9kZVB0ciBjdXIpIHsKICAgIGpvYlB0ciByZXQgPSBOVUxMOwoKREVCVUcoInBhcnNlSm9iXG4iKTsKICAgIC8qCiAgICAgKiBhbGxvY2F0ZSB0aGUgc3RydWN0CiAgICAgKi8KICAgIHJldCA9IChqb2JQdHIpIG1hbGxvYyhzaXplb2Yoam9iKSk7CiAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgfQogICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKGpvYikpOwoKICAgIC8qIFdlIGRvbid0IGNhcmUgd2hhdCB0aGUgdG9wIGxldmVsIGVsZW1lbnQgbmFtZSBpcyAqLwogICAgY3VyID0gY3VyLSZndDt4bWxDaGlsZHJlbk5vZGU7CiAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKICAgICAgICAKICAgICAgICBpZiAoKCFzdHJjbXAoY3VyLSZndDtuYW1lLCAiUHJvamVjdCIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkgewogICAgICAgICAgICByZXQtJmd0O3Byb2plY3RJRCA9IHhtbEdldFByb3AoY3VyLCAiSUQiKTsKICAgICAgICAgICAgaWYgKHJldC0mZ3Q7cHJvamVjdElEID09IE5VTEwpIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJvamVjdCBoYXMgbm8gSURcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJBcHBsaWNhdGlvbiIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDthcHBsaWNhdGlvbiA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJDYXRlZ29yeSIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDtjYXRlZ29yeSA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJDb250YWN0IikpICZhbXA7JmFtcDsgKGN1ci0mZ3Q7bnMgPT0gbnMpKQogICAgICAgICAgICByZXQtJmd0O2NvbnRhY3QgPSBwYXJzZVBlcnNvbihkb2MsIG5zLCBjdXIpOwogICAgICAgIGN1ciA9IGN1ci0mZ3Q7bmV4dDsKICAgIH0KCiAgICByZXR1cm4ocmV0KTsKfTwvcHJlPgoKPHA+T25jZSB5b3UgYXJlIHVzZWQgdG8gaXQsIHdyaXRpbmcgdGhpcyBraW5kIG9mIGNvZGUgaXMgcXVpdGUgc2ltcGxlLCBidXQKYm9yaW5nLiBVbHRpbWF0ZWx5LCBpdCBjb3VsZCBiZSBwb3NzaWJsZSB0byB3cml0ZSBzdHViYmVycyB0YWtpbmcgZWl0aGVyIEMKZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIGEgc2V0IG9mIFhNTCBleGFtcGxlcyBvciBhbiBYTUwgRFREIGFuZCBwcm9kdWNlCnRoZSBjb2RlIG5lZWRlZCB0byBpbXBvcnQgYW5kIGV4cG9ydCB0aGUgY29udGVudCBiZXR3ZWVuIEMgZGF0YSBhbmQgWE1MCnN0b3JhZ2UuIFRoaXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSB0byB0aGUgcmVhZGVyIDotKTwvcD4KCjxwPkZlZWwgZnJlZSB0byB1c2UgPGEgaHJlZj0iZXhhbXBsZS9nam9icmVhZC5jIj50aGUgY29kZSBmb3IgdGhlIGZ1bGwgQwpwYXJzaW5nIGV4YW1wbGU8L2E+IGFzIGEgdGVtcGxhdGUsIGl0IGlzIGFsc28gYXZhaWxhYmxlIHdpdGggTWFrZWZpbGUgaW4gdGhlCkdub21lIENWUyBiYXNlIHVuZGVyIGdub21lLXhtbC9leGFtcGxlPC9wPgoKPGgyPjxhIG5hbWU9IkNvbnRyaWJ1dGkiPkNvbnRyaWJ1dGlvbnM8L2E+PC9oMj4KPHVsPgogIDxsaT5Cam9ybiBSZWVzZSwgV2lsbGlhbSBCcmFjayBhbmQgVGhvbWFzIEJyb3llciBoYXZlIHByb3ZpZGVkIGEgbnVtYmVyIG9mCiAgICBwYXRjaGVzLCBHYXJ5IFBlbm5pbmd0b24gd29ya2VkIG9uIHRoZSB2YWxpZGF0aW9uIEFQSSwgdGhyZWFkaW5nIHN1cHBvcnQKICAgIGFuZCBTb2xhcmlzIHBvcnQuPC9saT4KICA8bGk+Sm9obiBGbGVjayBoZWxwcyBtYWludGFpbmluZyB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgbWFuIHBhZ2VzLjwvbGk+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzppZ29yQHN0dWQuZmgtZnJhbmtmdXJ0LmRlIj5JZ29yICBabGF0a292aWM8L2E+IGlzIG5vdwogICAgdGhlIG1haW50YWluZXIgb2YgdGhlIFdpbmRvd3MgcG9ydCwgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cuZmgtZnJhbmtmdXJ0LmRlL35pZ29yL3Byb2plY3RzL2xpYnhtbC9pbmRleC5odG1sIj5oZQogICAgcHJvdmlkZXMgYmluYXJpZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOkdhcnkuUGVubmluZ3RvbkBzdW4uY29tIj5HYXJ5IFBlbm5pbmd0b248L2E+IHByb3ZpZGVzCiAgICA8YSBocmVmPSJodHRwOi8vZ2FyeXBlbm5pbmd0b24ubmV0L2xpYnhtbDIvIj5Tb2xhcmlzIGJpbmFyaWVzPC9hPjwvbGk+CiAgPGxpPjxhCiAgICBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLzIwMDEtTWFyY2gvbXNnMDAwMTQuaHRtbCI+TWF0dAogICAgU2VyZ2VhbnQ8L2E+IGRldmVsb3BlZCA8YQogICAgaHJlZj0iaHR0cDovL2F4a2l0Lm9yZy9kb3dubG9hZC8iPlhNTDo6TGliWFNMVDwvYT4sIGEgUGVybCB3cmFwcGVyIGZvcgogICAgbGlieG1sMi9saWJ4c2x0IGFzIHBhcnQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9heGtpdC5jb20vIj5BeEtpdCBYTUwKICAgIGFwcGxpY2F0aW9uIHNlcnZlcjwvYT48L2xpPgogIDxsaT48YSBocmVmPSJtYWlsdG86Zm5hdHRlckBnbXgubmV0Ij5GZWxpeCBOYXR0ZXI8L2E+IGFuZCA8YQogICAgaHJlZj0ibWFpbHRvOmdlZXJ0a0BhaS5ydWcubmwiPkdlZXJ0IEtsb29zdGVybWFuPC9hPiBwcm92aWRlIDxhCiAgICBocmVmPSJsaWJ4bWwtZG9jLmVsIj5hbiBlbWFjcyBtb2R1bGU8L2E+IHRvIGxvb2t1cCBsaWJ4bWwoMikgZnVuY3Rpb25zCiAgICBkb2N1bWVudGF0aW9uPC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOnNoZXJ3aW5AbmxtLm5paC5nb3YiPlppeWluZyBTaGVyd2luPC9hPiBwcm92aWRlZCA8YQogICAgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL21lc3NhZ2VzLzA0ODguaHRtbCI+bWFuIHBhZ2VzPC9hPjwvbGk+CiAgPGxpPnRoZXJlIGlzIGEgbW9kdWxlIGZvciA8YQogICAgaHJlZj0iaHR0cDovL2Fjcy1taXNjLnNvdXJjZWZvcmdlLm5ldC9uc3htbC5odG1sIj5saWJ4bWwvbGlieHNsdCBzdXBwb3J0CiAgICBpbiBPcGVuTlNEL0FPTFNlcnZlcjwvYT48L2xpPgogIDxsaT48YSBocmVmPSJtYWlsdG86ZGt1aGxtYW5AY3V0dGVyLnJleHguY29tIj5EYXZlIEt1aGxtYW48L2E+IHByb3ZpZGVkIHRoZQogICAgZmlyc3QgdmVyc2lvbiBvZiBsaWJ4bWwvbGlieHNsdCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy5yZXh4LmNvbS9+ZGt1aGxtYW4iPndyYXBwZXJzIGZvciBQeXRob248L2E+PC9saT4KICA8bGk+UGV0ciBLb3plbGthIHByb3ZpZGVzIDxhCiAgICBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnhtbDItcGFzIj5QYXNjYWwgdW5pdHMgdG8gZ2x1ZQogICAgbGlieG1sMjwvYT4gd2l0aCBLeWxpeCBhbmQgRGVscGhpIGFuZCBvdGhlciBQYXNjYWwgY29tcGlsZXJzPC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOmFsZWtzZXlAYWxla3NleS5jb20iPkFsZWtzZXkgU2FuaW48L2E+IGltcGxlbWVudGVkIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU2lnbmF0dXJlLyI+WE1MIENhbm9uaWNhbGl6YXRpb24gYW5kIFhNTAogICAgRGlnaXRhbCBTaWduYXR1cmU8L2E+IDxhCiAgICBocmVmPSJodHRwOi8vd3d3LmFsZWtzZXkuY29tL3htbHNlYy8iPmltcGxlbWVudGF0aW9ucyBmb3IgbGlieG1sMjwvYT48L2xpPgo8L3VsPgoKPHA+PC9wPgo8L2JvZHk+CjwvaHRtbD4K