PCEtLQogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgo8aHRtbD4KPGhlYWQ+CiAgPG1ldGEgaHR0cC1lcXVpdj0iQ09OVEVOVC1UWVBFIgogY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CiAgPHRpdGxlPnJlYWRtZS5odG08L3RpdGxlPgogIDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iT3Blbk9mZmljZS5vcmcgMS4xLjQgIChXaW4zMikiPgogIDxtZXRhIG5hbWU9IkNSRUFURUQiIGNvbnRlbnQ9IjIwMDUxMDMxOzkwOTUyNzUiPgogIDxtZXRhIG5hbWU9IkNIQU5HRUQiIGNvbnRlbnQ9IjIwMDUxMDMxOzkyNzQwODYiPgo8L2hlYWQ+Cjxib2R5IGRpcj0ibHRyIiBsYW5nPSJlbi1VUyI+CjxoMT48YSBuYW1lPSJtb3pUb2NJZDkzNDkyOCI+PC9hPkRlcmJ5IEZ1bmN0aW9uYWwgVGVzdHM8L2gxPgo8aDI+PGEgbmFtZT0ibW96VG9jSWQ1MDQwMDAiPjwvYT5QYWNrYWdlOiBvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZzwhLS1tb3pUb2MgaDEgMSBoMiAyIGgzIDMgaDQgNCBoNSA1IGg2IDYtLT48L2gyPgo8cD48Zm9udCBzaXplPSIyIj48YnI+CjwvZm9udD48L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI21pZ3JhdGUiPjAuIE1pZ3JhdGlvbiB0byBKVW5pdDwvYT4KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjaW50cm8iPjEuIEludHJvZHVjdGlvbjwvYT4KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjcXVpY2tzdGFydCI+Mi4gUXVpY2tzdGFydDwvYT4KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YQogaHJlZj0iIzIuMV9ydW5uaW5nX3dpdGhfZGVyYnlfY2xhc3Nlc18iPjIuMSBydW5uaW5nIHRlc3RzPC9hPjwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YQogaHJlZj0iI2J1aWxkaW5nX2RlcmJ5VGVzdGluZ19fcnVubmluZ193aXRoIj4yLjIgYnVpbGRpbmcgZGVyYnlUZXN0aW5nCnBhY2thZ2U8L2E+PC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxhIGhyZWY9IiNydW4iPjMuIE1vcmUgZGV0YWlscyBvbgpydW5uaW5nIHRoZSBkZXJieSBmdW5jdGlvbmFsIHRlc3RzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI3J1bjEiPjMuMSBSdW5uaW5nIDEgdGVzdDwvYT4KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjcnVuMiI+My4yIFJ1bm5pbmcgc3VpdGVzCm9mIHRlc3RzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI292ZXJ2aWV3Ij40LiBIYXJuZXNzCmludGVybmFscyBmb3IgZGV2ZWxvcGVyczwvYT4gPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxhIGhyZWY9IiNvdjEiPjQuMSBUZXN0IHR5cGVzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI292MiI+NC4yIFN1cHBvcnRpbmcgZmlsZXMKZm9yIHRlc3RzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI292MyI+NC4zCiZsdDt0ZXN0bmFtZSZndDtfYXBwLnByb3BlcnRpZXM8L2E+IDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjb3Y0Ij40LjQKJmx0O3Rlc3RuYW1lJmd0O19kZXJieS5wcm9wZXJ0aWVzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI292NSI+NC41IHRtcCBmaWxlcywgb3V0CmZpbGVzLCBtYXN0ZXIgZmlsZXMsIGFuZCBjYW5vbnM8L2E+IDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjb3Y2Ij40LjYgTWFza2luZyBhbmQKY29tcGFyaW5nPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI0FkZGluZ19hX25ld190ZXN0Ij40LjcKQWRkaW5nIGEgbmV3IHRlc3Q8L2E+IDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YQogaHJlZj0iIzQuOF9TdWl0ZXNfYW5kX0FkZGluZ19hX25ld19zdWl0ZSI+NC44IFN1aXRlcyBhbmQgYWRkaW5nIGEgbmV3CnN1aXRlPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI292OSI+NC45IFJ1bm5pbmcgd2l0aCBhCm5ldyBqdm08L2E+IDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBocmVmPSIjc2tpcHBpbmciPjQuMTAgU2tpcHBpbmcgYQp0ZXN0PC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGEgaHJlZj0iI2ZyYW1ld29ya3MiPjQuMTEgRnJhbWV3b3JrczwvYT4KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwPjxhIGhyZWY9IiNwcm9wcyI+NC4xMiBTb21lIHRlc3QgaGFybmVzcyBwcm9wZXJ0aWVzPC9hPiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD48YSBocmVmPSIjc2VjdXJpdHkiPjQuMTMgU2VjdXJpdHlNYW5hZ2VyIHRlc3RpbmcgYnkgZGVmYXVsdDwvYT48L3A+CiAgPC9saT4KICA8bGk+PGEgaHJlZj0iI2hvc3ROYW1lIj40LjE0IFRlc3Rpbmcgd2l0aCBOZXR3b3JrIFNlcnZlciBvbiBhIHJlbW90ZQpob3N0PC9hPjwvbGk+CiAgPGxpPgogICAgPHA+PGEgaHJlZj0iIzQuMTVfRW5jb2RpbmdfaXNzdWVzIj40LjE1IEVuY29kaW5nIElzc3VlczwvYT48L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD48YQogaHJlZj0iLi9vcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdGlvblRlc3RzL3Rlc3RzL2p1bml0VGVzdHMvY29tcGF0aWJpbGl0eS9SRUFETUUuaHRtbCI+NS4KQ29tcGF0aWJpbGl0eSBUZXN0czwvYT48L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD48YQogaHJlZj0iLi9vcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdGlvblRlc3RzL3Rlc3RzL2pkYmM0L1JFQURNRS5odG1sIj42LgpKREJDNCBUZXN0czwvYT48L3A+CiAgPC9saT4KPC91bD4KPHA+PGJyPgo8YnI+CjwvcD4KPGgyPjxhIG5hbWU9Im1pZ3JhdGUiPjAuIE1pZ3JhdGlvbiB0byBKVW5pdDwvaDI+CkluIHRoZSB0cnVuayBjb2RlbGluZSAoMTAuMyBhbmQgbGF0ZXIpIERlcmJ5IGlzIG1pZ3JhdGluZyB0ZXN0aW5nIHVzaW5nIEpVbml0LgpBbGwgbmV3IHRlc3RzIGFyZSBiZWluZyB3cml0dGVuIHVzaW5nIEpVbml0IGFuZCBhIG51bWJlciBvZiB0aGUgb2xkZXIKaGFybmVzcyBiYXNlZCB0ZXN0cyBoYXZlIGJlZW4gY29udmVydGVkLgo8UD4KU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgb25nb2luZyB0aGUgY3VycmVudCBKVW5pdCBzdGF0ZSBpcyBub3QgcmVwcmVzZW50ZWQKaW4gdGhpcyBmaWxlLCBzZWN0aW9ucyAxIG9ud2FyZHMgYXBwbHkgdG8gcnVubmluZyB0ZXN0cyB1c2luZyB0aGUKb2xkIGhhcm5lc3Mgd2hpY2ggc3RpbGwgYXBwbGllcyB0byBhIHNpZ25pZmljYW50IG51bWJlciBvZiB0ZXN0cy4KQ3VycmVudGx5IHRvIHJ1biB0aGUgY29tcGxldGUgc2V0IG9mIHRlc3RzIHR3byBydW5zIGFyZSByZXF1aXJlZCwKcnVuIHRoZSBoYXJuZXNzIGJhc2VkIHRlc3RzIGRlY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQgYW5kIHRoZW4KcnVubmluZyBhbGwgdGhlIEpVbml0IGJhc2VzIHRlc3RzLgo8UD4KSG93IHRvIHJ1biB0aGUgSlVuaXQgYmFzZWQgdGVzdHMgaXMgY3VycmVudGx5IGJlaW5nIG1haW50YWluZWQKb24gRGVyYnkncyB3aWtpIGF0Ogo8QlI+CiA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2RiLWRlcmJ5L0RlcmJ5SlVuaXRUZXN0aW5nIj5odHRwOi8vd2lraS5hcGFjaGUub3JnL2RiLWRlcmJ5L0RlcmJ5SlVuaXRUZXN0aW5nPC9hPgo8QlI+ClRoZSB3aWtpIGFsc28gaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQgd3JpdGluZyBuZXcgSlVuaXQgdGVzdHMKYW5kIGNvbnZlcnNpb24gb2YgZXhpc3RpbmcgdGVzdHMuCjxQPgpQbGVhc2UgYWxzbyBjb25zdWx0IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvZGItZGVyYnkvRGVyYnlUZXN0aW5nIj5odHRwOi8vd2lraS5hcGFjaGUub3JnL2RiLWRlcmJ5L0RlcmJ5VGVzdGluZzwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRGVyYnkgdGVzdGluZy4KPGgyPjxhIG5hbWU9ImludHJvIj48L2E+MS4gSW50cm9kdWN0aW9uPC9oMj4KPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGVyYnkgZnVuY3Rpb25hbAp0ZXN0aW5nIHBhY2thZ2Ugb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuIFRoaXMgcGFja2FnZSBpcyBiYXNlZCBvbiB0aGUKZnVuY3Rpb25hbCB0ZXN0cyBpbiB1c2UgYXQgSUJNIGZvciB0ZXN0aW5nIHRoZSBDbG91ZHNjYXBlIHByb2R1Y3QKYmVmb3JlIGl0cyBjb250cmlidXRpb24gdG8gQVNGLjwvcD4KPHA+SW4gdGhlIGZvbGxvd2luZywgaW5zdHJ1Y3Rpb25zIGFyZSBnZWFyZWQgdG93YXJkcyBhIHVuaXgKZW52aXJvbm1lbnQuIEZvciBvdGhlciBlbnZpcm9ubWVudHMsIHNvbWUgZGV0YWlscyBtYXkgbmVlZCB0byBiZQphZGp1c3RlZC4gRm9yIGluc3RhbmNlLCB0aGUgZG9jdW1lbnQgbWF5IHJlZmVyIHRvICRBTlRfSE9NRSwgZm9yIERPUywKdGhpcyB3b3VsZCBiZSAlQU5UX0hPTUUlLjwvcD4KPHA+SW4gdGhlIGZvbGxvd2luZyB0aGUgdG9wIGRpcmVjdG9yeSB1bmRlciB3aGljaCB0aGUgc3VidmVyc2lvbiB0cmVlCmlzIHBsYWNlZCBpcyByZWZlcnJlZCB0byBhcyAke2RlcmJ5LnNvdXJjZX0gLSBzZWUgYWxzbyB0aGUgZGVyYnkKPGEKIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvZGIvZGVyYnkvY29kZS90cnVuay9CVUlMRElORy5odG1sIj5CVUlMRElORy5odG1sPC9hPi48L3A+CjxwPlRoZSB2ZXJzaW9uIG9mIHRoZSBjbGFzc2VzIGFuZCBzdXBwb3J0aW5nIGZpbGVzIG9mIHRoZQpkZXJieVRlc3RpbmcgcGFja2FnZSBoYXZlIHRvIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBjbGFzc2VzIG9mIHRoZQpkZXJieSBwYWNrYWdlLiBUaHVzIHlvdSBlaXRoZXIgbmVlZCB0byBidWlsZCBhbGwgamFycyB5b3Vyc2VsZiwgb3IKZ2V0IGFsbCBqYXIgZmlsZXMgZnJvbSB0aGUgRGVyYnkgc2l0ZSBhdCB0aGUgc2FtZSB0aW1lIHdoZW4KYXZhaWxhYmxlLiA8L3A+CjxoMj48YSBuYW1lPSJtb3pUb2NJZDE5MTU4OSI+PC9hPjxhIG5hbWU9InF1aWNrc3RhcnQiPjwvYT4yLgpRdWlja1N0YXJ0PC9oMj4KPGgzPjxhIG5hbWU9IjIuMV9ydW5uaW5nX3dpdGhfZGVyYnlfY2xhc3Nlc18iPjwvYT4yLjEgcnVubmluZyB0ZXN0czwvaDM+CjxwPlRoZSBkZXJieVRlc3RpbmcgcGFja2FnZSBlbmFibGVzIHlvdSB0byBydW4gMSB0ZXN0IG9yIGEgc3VpdGUgb2YKdGVzdHMuIEJlZm9yZSB5b3UgY2FuIHJ1biwgeW91IG5lZWQgdG8gc2V0dXAgeW91ciBlbnZpcm9ubWVudDo8L3A+Cjx1bD4KICA8bGk+CiAgICA8cD5PYnRhaW4gYSBqZGsgb3IganJlIChiYXNlZCBvbiBqZGsgMS40IHNwZWNpZmljYXRpb24gb3IgaGlnaGVyKS4gQWRkIHRoZQpiaW4gZGlyZWN0b3J5IHRvIHlvdXIgJFBBVEguIEN1cnJlbnRseSBzdXBwb3J0ZWQgd2l0aCByZWdhcmRzIHRvIHRoZSB0ZXN0cyBhcmU6PC9wPgogIDwvbGk+CjwvdWw+Cjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgIDxwPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTQxIC0gU3VuIEhvdFNwb3QgamRrMS40LjE8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTQyIC0gU3VuIEhvdFNwb3QgamRrMS40LjI8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTUgLSBTdW4gSG90U3BvdCBqZGsxLjU8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTYgLSBTdW4gSG90U3BvdCBqZGsxLjY8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTcgLSBTdW4gSG90U3BvdCBqZGsxLjc8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+aWJtMTQxIC0gSUJNIENsYXNzaWMgamRrMS40LjE8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+aWJtMTQyIC0gSUJNIENsYXNzaWMgamRrMS40LjI8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+aWJtMTUgLSBJQk0gQ2xhc3NpYyBqZGsxLjU8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+aWJtMTYgLSBJQk0gSjkgVk0gamRrMS42PC9mb250Pjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPmlibTE3IC0gSUJNIEo5IFZNIGpkazEuNzwvZm9udD48YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyA8Zm9udCBzaXplPSIyIj5qOV9mb3VuZGF0aW9uMTEgLSBJQk0gd2VtZSBqdm0gKGF2YWlsYWJsZQp3aXRoIElCTSBXZWJzcGhlcmUgRXZlcnlQbGFjZSBNaWNybyBFZGl0aW9uLCA2LjIpLCB2ZXJzaW9uIDIuNCwgajJNRSAxLjEgPC9mb250PiA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Y2QgaW50byBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90CmhhdmUgYW55IGNvbG9ucyBvciBzcGFjZXMgaW4gaXQuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnNldCAkQ0xBU1NQQVRIIHRvIGluY2x1ZGUgdGhlCmZvbGxvd2luZyBqYXJzOiA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGZvbnQgc2l6ZT0iMiI+ZGVyYnlUZXN0aW5nLmphcjxicj4KICAgICAgICA8L2ZvbnQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPnRlc3QgZmlsZXMgYW5kCmNsYXNzZXM8L2ZvbnQ+PC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPjxmb250IHNpemU9IjIiPmRlcmJ5cnVuLmphcjxicj4KICAgICAgICA8L2ZvbnQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPmV4ZWN1dGFibGUgamFyIGZpbGUKZm9yIHRvb2xzIGxpa2UgaWogYW5kIGRibG9vayAodGhpcyBqYXIgZmlsZSB3aWxsIGF1dG9tYXRpY2FsbHkgcHVsbApvdGhlciByZXF1aXJlZCBqYXIgZmlsZXMgLSBkZXJieS5qYXIsIGRlcmJ5bmV0LmphciwgZGVyYnljbGllbnQuamFyCmFuZCBkZXJieUxvY2FsZV8qLmphciAtIGludG8geW91ciBjbGFzc3BhdGgpIDwvZm9udD48L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGZvbnQgc2l6ZT0iMiI+IGRiMmpjYy5qYXIgYW5kCmRiMmpjY19saWNlbnNlX2MuamFyIDxicj4KICAgICAgICA8Zm9udCBzaXplPSIyIj5JQk0gVW5pdmVyc2FsIEpEQkMgRHJpdmVyIGNsYXNzZXMuIChTZWUgSUJNIDxhCiBocmVmPSJodHRwOi8vd3d3LTEwNi5pYm0uY29tL2RldmVsb3BlcndvcmtzL2RiMi9kb3dubG9hZHMvamNjLyI+ZGV2ZWxvcGVyd29ya3M8L2E+CmZvciBkb3dubG9hZCk8L2ZvbnQ+IDxicj4KICAgICAgICA8Yj5UaGVzZSBqYXJzIGFyZSBvcHRpb25hbC4gVGhlIHRlc3RzIHVzaW5nIHRoZSBJQk0gVW5pdmVyc2FsCkpEQkMgZHJpdmVyIGFyZSBub3QgcnVuIGlmIHRoZXNlIGphciBmaWxlcyBhcmUgbm90IHByZXNlbnQgaW4geW91cgpjbGFzc3BhdGg8L2I+IDwvZm9udD4mbmJzcDsmbmJzcDsmbmJzcDsgPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHA+PGZvbnQgc2l6ZT0iMiI+anVuaXQuamFyICZuYnNwOyZuYnNwOyZuYnNwOyA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBhc3NlcnRpb24tYmFzZWQgdGVzdCBtYWNoaW5lcnkuPC9mb250PjwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4KPHA+Rm9yIGV4YW1wbGU6PC9wPgo8ZGw+CiAgPGRkPgogICAgPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICAgICAgPHRib2R5PgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgIDxwPjxmb250IHNpemU9IjIiPihub3RlIHRoYXQgJGphcmRpciBpcyBvbmx5IGEgY29udmVuaWVuY2UKdmFyaWFibGUgdGhhdCBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBEZXJieSBqYXIgZmlsZXMsCmFuZCAkdHN0amFyZGlyIGlhIGEgY29udmVuaWVuY2UgdmFyaWFibGUgdGhhdCBwb2ludHMgdG8gdGhlIGRpcmVjdG9yeQpjb250YWluaW5nIHRoZSBqYXIgZmlsZSBmb3IgSlVuaXQpOjxicj4Kc2V0IGphcmRpcj0vbG9jYWwvZGVyYnlqYXI8YnI+CnNldCB0c3RqYXJkaXI9L2xvY2FsL3Rlc3RpbmdqYXJzPGJyPgpzZXQKQ0xBU1NQQVRIPSIkamFyZGlyL2RlcmJ5cnVuLmphcjokamFyZGlyL2RlcmJ5VGVzdGluZy5qYXI6JHRzdGphcmRpci9qdW5pdC5qYXIiPC9mb250Pjxicj4KICAgICAgICAgIDxmb250IHNpemU9IjIiPnNldCBQQVRIPS9sb2NhbC9qZGsxNDEvYmluOiRQQVRIPC9mb250PjwvcD4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CiAgPC9kZD4KPC9kbD4KPHA+VG8gcnVuIDEgdGVzdDogPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICA8cD5zeW50YXg6PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amF2YSAtRCZsdDt0ZXN0cHJvcGVydHkmZ3Q7Cm9yZy5hcGFjaGUuZGVyYnlUZXN0aW5nLmZ1bmN0aW9uVGVzdHMuaGFybmVzcy5SdW5UZXN0CiZsdDt0ZXN0ZGlyJmd0Oy8mbHQ7dGVzdG5hbWUmZ3Q7PC9mb250Pjxicj4KICAgICAgPGZvbnQgc2l6ZT0iMiI+d2hlcmUgPC9mb250PiA8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPiZsdDt0ZXN0cHJvcGVydHkmZ3Q7CmFyZSB0ZXN0IHNwZWNpZmljIHByb3BlcnRpZXMsIHN1Y2ggYXMgJ2ZyYW1ld29yaycgZm9yIHRoZSBSdW5UZXN0CmNsYXNzLiA8L2ZvbnQ+IDwvcD4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij4mbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+Jmx0O3Rlc3RkaXImZ3Q7CmlzIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgdW5kZXIgZnVuY3Rpb25UZXN0cy90ZXN0cyB3aGVyZSB0aGUgYWN0dWFsCnRlc3QgaXMgbG9jYXRlZDwvZm9udD4gPC9wPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHA+Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPiZsdDt0ZXN0bmFtZSZndDsgaXMgdGhlCmFjdHVhbCBuYW1lIG9mIHRoZSB0ZXN0PC9mb250PiA8L3A+CiAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+PGZvbnQgc2l6ZT0iMiI+ZXhhbXBsZXM6PGJyPgp0byBydW4gdGhlIHRlc3Qgc3VwZXJzaW1wbGUgYWdhaW5zdCB0aGUgZW1iZWRkZWQgZHJpdmVyOjxicj4KICAgICAgPC9mb250PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8Zm9udCBzaXplPSIyIj5qYXZhCm9yZy5hcGFjaGUuZGVyYnlUZXN0aW5nLmZ1bmN0aW9uVGVzdHMuaGFybmVzcy5SdW5UZXN0Cmxhbmcvc3VwZXJzaW1wbGUuc3FsPGJyPgogICAgICA8YnI+ClRvIHJ1biBhIHRlc3Qgd2l0aCBuZXR3b3JrIHNlcnZlciwgdXNpbmcgdGhlIGRlcmJ5Y2xpZW50IGRyaXZlciwgYWRkCi1EZnJhbWV3b3JrPURlcmJ5TmV0Q2xpZW50IHRvIHRoZSBydW4uIFRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB0byBzdGFydApuZXR3b3JrIHNlcnZlciBhdCBwb3J0IDE1Mjcgb3IgY29ubmVjdCB0byBhIHJ1bm5pbmcgb25lLCBydW4gdGhlIHRlc3QsCmFuZCBzdG9wIG5ldHdvcmsgc2VydmVyIHRoZXJlYWZ0ZXIuPGJyPgpmb3IgZXhhbXBsZTo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgamF2YSAtRGZyYW1ld29yaz1EZXJieU5ldENsaWVudApvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdApsYW5nL3N1cGVyc2ltcGxlLnNxbDwvZm9udD48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPkEgc3VjY2Vzc2Z1bCBydW4gd2lsbCBoYXZlIGEgLnBhc3MgZmlsZSwgYW5kIHRoZSBvdXRwdXQgdG8gdGhlCmNvbnNvbGUgd2lsbCBzaG93IG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBleHBlY3RlZCBhbmQgYWN0dWFsIHRlc3QKcmVzdWx0LiBBIGZhaWxlZCB0ZXN0IHJ1biB3aWxsIGhhdmUgYXQgbGVhc3QgYSAuZmFpbCBmaWxlIGFuZCB0aGUKb3V0cHV0IHRvIHRoZSBjb25zb2xlIHdpbGwgc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGV4cGVjdGVkIGFuZAphY3R1YWwgcmVzdWx0LjwvcD4KPHA+VG8gcnVuIGEgc3VpdGU6IDwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+c3ludGF4Ojxicj4KJm5ic3A7IDxmb250IHNpemU9IjIiPmphdmEgLUQmbHQ7dGVzdHByb3BlcnR5Jmd0OwpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuU3VpdGUmbmJzcDsKJmx0O3Rlc3RzdWl0ZSZndDs8L2ZvbnQ+PGJyPgogICAgICA8Zm9udCBzaXplPSIyIj53aGVyZSA8L2ZvbnQ+IDwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij4mbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+Jmx0O3Rlc3Rwcm9wZXJ0eSZndDsKYXJlIHRlc3Qgc3BlY2lmaWMgcHJvcGVydGllcywgc3VjaCBhcyAndmVyYm9zZScgZm9yIHRoZSBSdW5TdWl0ZSBjbGFzcy4KICAgICAgICAgIDwvZm9udD4gPC9wPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHA+Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPiZsdDt0ZXN0c3VpdGUmZ3Q7IGlzIG9uZSBvZgp0aGUgc3VpdGVzIHVuZGVyIG9yZy9hcGFjaGUvZGVyYnlUZXN0aW5nL2Z1bmN0aW9uVGVzdHMvc3VpdGVzPC9mb250PiA8L3A+CiAgICAgICAgPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+PGZvbnQgc2l6ZT0iMiI+Zm9yIGV4YW1wbGUgZm9yIHJ1bm5pbmcmbmJzcDsgdGhlIHN1aXRlCmRlcmJ5bGFuZzo8YnI+CiAgICAgIDwvZm9udD4mbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amF2YSAtRHZlcmJvc2U9dHJ1ZQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuU3VpdGUgZGVyYnlsYW5nPC9mb250PjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHA+RWFjaCBzdWl0ZSBydW4gc2hvdWxkIGJlIHN0YXJ0ZWQgaW4gYSBjbGVhbiBkaXJlY3RvcnkuIFRoZSB0ZXN0Cm91dHB1dCBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgZW1wdGllZCBvdXQgYmVmb3JlIHRlc3RpbmcgaXMgYmVndW4sCmFsdGhvdWdoIGluZGl2aWR1YWwgdGVzdCBmaWxlcyBhbmQgcmVzdWx0IGZpbGVzIHdpbGwgYmUgY2xlYW5lZCBvdXQKYW5kIG92ZXJ3cml0dGVuLiZuYnNwOyA8L3A+CjxwPlRoZSBzdWl0ZXMgcHJvdmlkZWQgYXJlOiA8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZGVyYnlsYW5nOiA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YmFzaWMgZnVuY3Rpb25hbGl0eSBvZiZuYnNwOwpsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbiBpbiBkZXJieS4gPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPk1vc3RseSAuc3FsIHR5cGUgdGVzdHMuIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0ZWQgb24gYSB2YXJpZXR5IG9mIGhhcmR3YXJlCnRha2VzIGZyb20gMS4xNW0gdG8gMi4wMCBob3VyczwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZGVyYnluZXRjbGllbnRtYXRzIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5iYXNpYyBuZXR3b3JrIHNlcnZlciB0ZXN0cyB1c2luZwp0aGUgZGVyYnkgY2xpZW50PC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnZhcmlldHkgb2YgdGVzdHMsIGluY2x1ZGluZyBzb21lCmZyb20gZGVyYnlsYW5nIHN1aXRlIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0ZWQgb24gYSB2YXJpZXR5IG9mIGhhcmR3YXJlCnRha2VzIGZyb20gMTUgdG8gMzAgbWludXRlcyA8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmRlcmJ5bmV0bWF0cyA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YmFzaWMgbmV0d29yayBzZXJ2ZXIgdGVzdHMgdXNpbmcKdGhlIElCTSBVbml2ZXJzYWwgSkRCQyBkcml2ZXI8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dmFyaWV0eSBvZiB0ZXN0cywgaW5jbHVkaW5nIHNvbWUKZnJvbSBkZXJieWxhbmcgc3VpdGUgPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnRlc3RlZCBvbiBhIHZhcmlldHkgb2YgaGFyZHdhcmUKdGFrZXMgZnJvbSAxNSB0byAzMCBtaW51dGVzIDwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+cHJvcGVydHlpbmZvIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5ydW5zIHRlc3QgdG8gZ2V0IHByb3BlcnR5CmluZm9ybWF0aW9uPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5zdG9yZWFsbCA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdHMgZm9yIHN0b3JhZ2UgYXJlYSA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aW5jbHVkZXM6IDwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5zdG9yZW1hdHM6IG1vc3QgYmFzaWMgcXVpY2sKdmVyaWZpY2F0aW9uIHRlc3RzLjwvcD4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5zdG9yZW1vcmU6IG1vcmUgZXh0ZW5zaXZlCnN0b3JhZ2UgdGVzdHMgPC9wPgogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnN0b3JldGVzdHM6IHNldCBvZiBzdG9yZQp0ZXN0cyBncm91cGVkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBkbyBub3QgZWFjaCBuZWVkIHRvIGNyZWF0ZSBhIG5ldwpkYXRhYmFzZSA8L3A+CiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdGVkIG9uIGEgdmFyaWV0eSBvZiBoYXJkd2FyZQp0YWtlcyBmcm9tIDI1IHRvIDUwIG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnhhIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyB0aGUgeGEgaW1wbGVtZW50YXRpb24uClRoZXJlIGlzIGJvdGggYSBzdG9yYWdlIGFuZCBsYW5ndWFnZSBlbGVtZW50IHRvIHRoZXNlIHRlc3RzIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0ZWQgb24gYSB2YXJpZXR5IG9mIGhhcmR3YXJlCnRha2VzIGZyb20gMiB0byA0IG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnN0b3JldW5pdCA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdHMgc3RvcmUtcmVsYXRlZCB1bml0IHRlc3RzLgpSdW5zIGZyb20gOCB0byAxNSBtaW51dGVzPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij51bml0IDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyA0IGdlbmVyYWwgZnVuY3Rpb25hbGl0eQp1bml0IHRlc3RzLiBydW5zIGZyb20gNSB0byAxMCBtaW51dGVzPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5qZGJjYXBpIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyBpbXBsZW1lbnRhdGlvbiBvZiBqZGJjIGFwaQpzdWNoIGFzIENvbm5lY3Rpb24gY2xhc3MgaW1wbGVtZW50YXRpb24sIE1ldGFkYXRhIGV0Yy4gPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnRha2VzIGZyb20gMjAgdG8gNDAgbWludXRlczwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+amRiYzIwPC9wPgogICAgPHVsPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnRlc3RzIGltcGxlbWVudGF0aW9uIG9mIGZlYXR1cmVzCmZyb20gdGhlIGpkYmMgMjAgc3BlY2lmaWNhdGlvbiA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGFrZXMgMiB0byA1IG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmpkYmM0IDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyBpbXBsZW1lbnRhdGlvbiBvZiBqZGJjIDQuMAogPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5qZGsxNCA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdHMgaW1wbGVtZW50YXRpb24gb2YgZmVhdHVyZXMKZnJvbSB0aGUgamRrMTQgc3BlY2lmaWNhdGlvbiA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGFrZXMgMiB0byA1IG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmRlbW8sIHNpbXBsZWRlbW88L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdHMgdGhlIFNpbXBsZUFwcCBleGFtcGxlIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5zaW1wbGVkZW1vIHJ1bnMgU2ltcGxlQXBwIGl0c2VsZgotIGFuZCB0aHVzIGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0IHJlc291cmNlIHBhY2thZ2UgbmFtZSAobmFtZWx5LCBubwpwYWNrYWdlKSB0aGFuIGFsbCB0aGUgb3RoZXIgdGVzdHMuIEhlbmNlIGl0IG5lZWRlZCBpdHMgb3duCnN1aXRlLnByb3BlcnRpZXMgZmlsZS4gPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnRha2VzIDMwIHRvIDEgbWludXRlIDwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+bmlzdCA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGVzdCBvYnRhaW5lZCBmcm9tIHRoZSBOSVNUIFNRTApzdWl0ZSB2IDYuMCA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+dGFrZXMgNSB0byAxMCBtaW51dGVzPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5lbmNyeXB0aW9uQWxsIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50YWtlcyAzMCB0byA1NSBtaW51dGVzIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5ydW5zIGEgZmV3IGVuY3J5cHRpb24gdGVzdHMgcGx1cwp0aGUgZm9sbG93aW5nIGVuY3J5cHRpb24gdGVzdHMgc3VpdGVzPC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmVuY3J5cHRpb24gPC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnJ1bnMgdGhlIHN0b3JlbWF0cywKc3lzaW5mbyBhbmQgbXVsdGkgc3VpdGVzIGluIGVuY3J5cHRpb24gc2NoZW1lIERFU2VkZTwvcD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50YWtlcyAyNSB0byA0MCBtaW51dGVzIDwvcD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmVuY3J5cHRpb25BRVMgLSB0ZXN0cyBBRVMKZW5jcnlwdGlvbiBzY2hlbWU8L3A+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZW5jcnlwdGlvbkJsb3dmaXNoIC0gdGVzdHMKQmxvd2Zpc2ggZW5jcnlwdGlvbiBzY2hlbWU8L3A+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZW5jcnlwdGlvbkNGQiAtIHRlc3RzIENGQgplbmNyeXB0aW9uIHNjaGVtZTwvcD4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5lbmNyeXB0aW9uREVTIC0gdGVzdHMgREVTCmVuY3J5cHRpb24gc2NoZW1lPC9wPgogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmVuY3J5cHRpb25FQ0IgLSB0ZXN0cyBFQ0IKZW5jcnlwdGlvbiBzY2hlbWU8L3A+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZW5jcnlwdGlvbk9GQiAtIHRlc3RzIE9GQgplbmNyeXB0aW9uIHNjaGVtZSA8L3A+CiAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPm11bHRpIDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5ydW5zIGEgc2ltcGxlIHRlc3QgY2FzZSB3aXRoIDEwCnRocmVhZHMgPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnJ1bnMgZm9yIDEwIG1pbnV0ZXMsIHRoZW4gc2h1dHMKZG93biBhbGwgdGhyZWFkczwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZGVyYnl0b29sczwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyBmb3IgZGJsb29rLCBpaiwgYW5kCmltcG9ydC9leHBvcnQgdXRpbGl0aWVzIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50YWtlcyA1IHRvIDEwIG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmkxOG5UZXN0IDwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50ZXN0cyB0aGF0IGNoYXJhY3RlcnMgb3V0c2lkZQpzaW1wbGUgYXNjaWkgc2NvcGUgZG8gbm90IHJlc3VsdCBpbiBlcnJvcnMuIDwvcD4KICAgICAgPC9saT4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij50YWtlcyA1IHRvIDEwIG1pbnV0ZXM8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHA+ZW5jb2RpbmdUZXN0czwvcD4KICA8L2xpPgogIDx1bD4KICAgIDxsaT4KICAgICAgPHA+cnVucyB0ZXN0cyB3aXRoIGRlcmJ5VGVzdGluZz1VVEYtMTYuIDwvcD4KICAgIDwvbGk+CiAgICA8bGk+CiAgICAgIDxwPnRha2VzIDIgdG8gNSBtaW51dGVzPC9wPgogICAgPC9saT4KICA8L3VsPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5kZXJieWFsbCA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Y29udGFpbnMgYWxsIHN1aXRlcyB0eXBpY2FsbHkKcnVuIGJ5IGFsbCBkZXZlbG9wZXJzPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnRlc3RlZCBvbiBhIHZhcmlldHkgb2YgaGFyZHdhcmUKdGFrZXMgZnJvbSAzLjAwIC0gNi4wMCBob3VycyA8L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmxhcmdlRGF0YTwvcD4KICAgIDx1bD4KICAgICAgPGxpPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5Db250YWlucyB0ZXN0cyB0aGF0IGRlYWwgd2l0aApsYXJnZSBhbW91bnRzIG9mIGRhdGEgYW5kIHRodXMgcmVxdWlyZSBtb3JlIG1hY2hpbmUgcmVzb3VyY2VzLiZuYnNwOwpUaGlzIHN1aXRlIGlzIE5PVCBydW4gYXMgcGFydCBvZiAnZGVyYnlhbGwnIGJlY2F1c2UgdGhlIHRlc3RzIGl0CmNvbnRhaW5zIHJlcXVpcmUgZWl0aGVyIDEpIG1vcmUgbWFjaGluZSByZXNvdXJjZXMgdGhhbiB3aGF0IHRoZSB0eXBpY2FsCkRlcmJ5IGRldmVsb3BlciBtaWdodCBoYXZlLCBhbmQvb3IgMikgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGltZSB0bwpydW4sIGFuZCB0aHVzIHNob3VsZG4ndCBiZSBydW4gZXZlcnkgbmlnaHQuPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPkFzIHRlc3RzIGFyZSBhZGRlZCB0byB0aGlzCnF1aXRlLCBpdCBjb3VsZCByZXF1aXJlIG1vcmUgYW5kIG1vcmUgdGltZSB0byBydW4gKHNldmVyYWwgbWludXRlcyB0bwpzZXZlcmFsIGhvdXJzIHRvIHNldmVyYWwgZGF5cyksIHdoaWNoIGlzIHdoeSBpdCBpcyBOT1QgaW5jbHVkZWQgYXMgcGFydApvZiB0aGUgZGVyYnlhbGwgc3VpdGUuIEN1cnJlbnRseSB0aGUgbGFyZ2VkYXRhL0xvYkxpbWl0cy5qYXZhIHRlc3QKdGFrZXMgYWJvdXQgMTdHYiBvZiBkaXNrIHNwYWNlLiBPbiBhIGxpbnV4IG1hY2hpbmUgd2l0aCAyLjhHaHogSW50ZWwKWGVvbiBDUFUsIDRHYiBSQU0gLCBMaW51eCBtYWNoaW5lIGFuZCBJQk0gMS40LjIgSlZNIHdpdGggZGVmYXVsdCBtZW1vcnkKaGVhcCBzaXplLCB0aGUgdGVzdCByYW4gZm9yIGFib3V0IDQuNSBocnMuIElmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsCml0IHdpbGwgY2xlYW51cCB0aGUgZGF0YWJhc2UgYW5kIG90aGVyIGZpbGVzLjwvcD4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+CiAgICA8cD48YSBocmVmPSIjTm90ZTI6Ij48Zm9udCBzaXplPSIyIj5TZWUgTm90ZTI8L2ZvbnQ+PC9hPjwvcD4KICA8L2xpPgo8L3VsPgo8cD5BIHN1Y2Nlc3NmdWwgcnVuIHdpdGggYWxsIHRlc3RzIHBhc3Npbmcgd2lsbCBoYXZlIG5vICouZmFpbCBmaWxlcwpjcmVhdGVkLCB0aGUgJmx0O3Rlc3RzdWl0ZSZndDtfZmFpbC50eHQgZmlsZSB3aWxsIGJlIGVtcHR5LCBhbmQgdGhlCiZsdDt0ZXN0c3VpdGUmZ3Q7X3JlcG9ydC50eHQgZmlsZSB3aWxsIHNob3cgbm8gZmFpbHVyZXMgaW4gdGhlClN1bW1hcnkgcmVzdWx0cyBzZWN0aW9uLiA8L3A+Cjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgIDxwPjxmb250IHNpemU9IjIiPi0tLS0tLS1zbmlwcGV0IGZyb20gZGVyYnlsYW5nX3JlcG9ydC50eHQgLS0tLS08YnI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPgpTdW1tYXJ5IHJlc3VsdHM6PGJyPgogICAgICA8YnI+ClRlc3QgUnVuIFN0YXJ0ZWQ6IDIwMDQtMTEtMTAgMTE6Mjc6NTUuMDxicj4KVGVzdCBSdW4gRHVyYXRpb246IDAwOjA0OjA5PGJyPgogICAgICA8YnI+CjEyOSBUZXN0cyBSdW48YnI+CjEwMCUgUGFzcyAoMTI5IHRlc3RzIHBhc3NlZCk8YnI+CiZuYnNwOzAlIEZhaWwgKDAgdGVzdHMgZmFpbGVkKTxicj4KMCBTdWl0ZXMgc2tpcHBlZDwvZm9udD48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPjxicj4KPGJyPgo8L3A+CjxoMz48YSBuYW1lPSJidWlsZGluZ19kZXJieVRlc3RpbmdfX3J1bm5pbmdfd2l0aCI+PC9hPjIuMiBidWlsZGluZwpkZXJieVRlc3RpbmcgcGFja2FnZTwvaDM+CjxwPlRvIGJ1aWxkIHRoZSBkZXJieVRlc3RpbmcgcGFja2FnZTo8L3A+Cjx1bD4KICA8bGk+CiAgICA8cD5mb2xsb3cgYWxsIHRoZSBzdGVwcyBpbiB0aGUgZGVyYnkgPGEKIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvZGIvZGVyYnkvY29kZS90cnVuay9CVUlMRElORy5odG1sIj5CVUlMRElORy5odG1sPC9hPi4KICAgIDwvcD4KICA8L2xpPgo8L3VsPgo8cD5UaGlzIGlzIHNvbWUgdHlwaWNhbCBvdXRwdXQgZm9yIHRoZSBhbnQgYnVpbGQgcHJvY2Vzcy48L3A+Cjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgIDxwPjxmb250IHNpemU9IjIiPiZndDsgY2QgL2xvY2FsL2RlcmJ5L2phdmEvdGVzdGluZzxicj4KJmd0OyBhbnQua3NoPGJyPgpTZWFyY2hpbmcgZm9yIGJ1aWxkLnhtbCAuLi48YnI+CkJ1aWxkZmlsZTogL2xvY2FsL2RlcmJ5L2phdmEvdGVzdGluZy9idWlsZC54bWw8YnI+CiAgICAgIDxicj4KY29tcGlsZTo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyBbamF2YWNdIENvbXBpbGluZyAzMCBzb3VyY2UgZmlsZXMgdG8KL2xvY2FsL2RlcmJ5L2NsYXNzZXM8YnI+Ci4uLjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFtjb3B5XSBDb3B5aW5nIDEgZmlsZSB0bwovbG9jYWwvZGVyYnkvY2xhc3Nlcy9vcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdDxicj4KaW9uVGVzdHM8YnI+CiAgICAgIDxicj4KQlVJTEQgU1VDQ0VTU0ZVTDxicj4KVG90YWwgdGltZTogMTAgbWludXRlcyAzIHNlY29uZHM8L2ZvbnQ+PC9wPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgo8cD5CdWlsZGluZyB1c2luZyB0aGUgYW50IGFsbCB0YXJnZXQgcGxhY2VzIGFsbCBmaWxlcywgdGhhdCBpcywKY2xhc3NlcywgYnV0IGFsc28gc3VwcG9ydGluZyBmaWxlcyBzdWNoIGFzIGV4cGVjdGVkIG91dHB1dCAoKi5vdXQpLApzcWwgdGVzdCBmaWxlcyAoKi5zcWwpLCBwcm9wZXJ0aWVzIGZpbGVzIGFuZCBhbnkgZGF0YSBmaWxlcyB1c2VkIGluCmluZGl2aWR1YWwgdGVzdHMgaW50byB0aGUgY2xhc3NlcyBkaXJlY3Rvcnkgc28gdGhleSBjYW4gYWxsIGJlIGZvdW5kCnVzaW5nIHRoZSBDTEFTU1BBVEguIDwvcD4KPHA+T25jZSB5b3UgaGF2ZSBidWlsdCB0aGUgZGVyYnlUZXN0aW5nIHBhY2thZ2UsIHlvdSBjYW4gbWFrZSBhCmRlcmJ5VGVzdGluZy5qYXIgdXNpbmcgdGhlIGphciBidWlsZCB0YXJnZXQgYXQgdGhlCiR7ZGVyYnkuc291cmNlfWxldmVsLiA8L3A+CjxwPlRoaXMgd2lsbCBsb29rIHNvbWV0aGluZyBsaWtlOiA8L3A+Cjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgIDxwPjxmb250IHNpemU9IjIiPmM6Jmd0OyBhbnQgZGVyYnl0ZXN0aW5namFyPGJyPgpTZWFyY2hpbmcgZm9yIGJ1aWxkLnhtbCAuLi48YnI+CkJ1aWxkZmlsZTogQzpcZGVyYnlcYnVpbGQueG1sPGJyPgogICAgICA8YnI+CmluaXRqYXJzOjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IFtta2Rpcl0gQ3JlYXRlZCBkaXI6IEM6XGRlcmJ5XGphcnNcPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgW21rZGlyXSBDcmVhdGVkIGRpcjogQzpcZGVyYnlcamFyc1xsaXN0czxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFtlY2hvXSBSZXZpc2lvbiBudW1iZXIgc2V0IHRvIGV4cG9ydGVkPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgW2VjaG9dIC48YnI+CiAgICAgIDxicj4KZGVyYnl0ZXN0aW5namFyOjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFtlY2hvXSBCZWdpbm5pbmcgZGVyYnl0ZXN0aW5nLmphciBidWlsZDxicj4KLi4uLi48YnI+CkJVSUxEIFNVQ0NFU1NGVUxMPC9mb250PjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHA+PGJyPgo8YnI+CjwvcD4KPGgyPjxhIG5hbWU9Im1velRvY0lkNTgyMjk5Ij48L2E+PGEgbmFtZT0icnVuIj48L2E+My4gTW9yZSBkZXRhaWxzIG9uCnJ1bm5pbmcgdGhlIGRlcmJ5IGZ1bmN0aW9uYWwgdGVzdHM8L2gyPgo8cD5UaGUgZnVuY3Rpb25hbCB0ZXN0cyBhcmUgcnVuIHVzaW5nIGEgY2xhc3MgY2FsbGVkICdSdW5UZXN0Jy4gVGhpcwpjbGFzcyBjYWxscyBhIG51bWJlciBvZiBvdGhlciBjbGFzc2VzLiBBIGdyb3VwIG9mIHRlc3RzLCBjYWxsZWQgYQonc3VpdGUnIGlzIGV4ZWN1dGVkIHVzaW5nIGEgY2xhc3MgY2FsbGVkICdSdW5TdWl0ZScuPC9wPgo8aDM+PGEgbmFtZT0ibW96VG9jSWQ1OTU5NDUiPjwvYT48YSBuYW1lPSJydW4xIj48L2E+My4xIFJ1bm5pbmcgMQp0ZXN0PC9oMz4KPHA+U2VlIHNlY3Rpb24gMi4xIGZvciB0aGUgYmFzaWMgc3RlcHMgdG8gcnVuIDEgdGVzdC4gPC9wPgo8cD5UbyBwYXNzIG9uIHN5c3RlbSBsZXZlbCBwcm9wZXJ0aWVzIHRvIHRoZSB0ZXN0IGhhcm5lc3MsIHVzZSB0aGUKdGVzdCBoYXJuZXNzIHByb3BlcnR5IC1EdGVzdFNwZWNpYWxQcm9wcy4gRm9yIGV4YW1wbGUsIHRvIGVuc3VyZQpleHRyYSBpbmZvcm1hdGlvbiBpcyBhcHBlbmRlZCB0byB0aGUgbG9nOiZuYnNwOzwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+PGZvbnQgc2l6ZT0iMiI+amF2YSAtRGZyYW1ld29yaz1EZXJieU5ldENsaWVudAotRHRlc3RTcGVjaWFsUHJvcHM9ZGVyYnkuaW5mb2xvZy5hcHBlbmQ9dHJ1ZSZuYnNwOwpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdApsYW5nL3N1cGVyc2ltcGxlLnNxbDwvZm9udD48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPjxicj4KVGVzdHMgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIFdoZW4gcnVubmluZwphIHRlc3QgdXNpbmcgdGhlIG5ldHdvcmsgc2VydmVyIGFuZCBkZXJieSBjbGllbnQsIGkuZS4KLURmcmFtZXdvcms9RGVyYnlOZXRDbGllbnQsIHRoZSB0ZXN0IHdpbGwgcnVuIGluIGEgc3ViZGlyZWN0b3J5CihhdXRvbWF0aWNhbGx5IGNyZWF0ZWQpICdEZXJieU5ldENsaWVudCcuIDwvcD4KPHA+VGhlIHRlc3Qgd2lsbCBub3JtYWxseSBjcmVhdGUgdGhlIGZvbGxvd2luZzo8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YSBkYXRhYmFzZS4gVGhlIGRlZmF1bHQgbmFtZSBpcwond29tYmF0Jy4gSG93ZXZlciwgdGhlIG5hbWUgbWF5IGJlIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gY2VydGFpbgpwcm9wZXJ0aWVzIHBhc3NlZCBpbiB0byB0aGUgdGVzdCBoYXJuZXNzLiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YSAub3V0IGZpbGU6IHRoZSBmaW5hbCByZXN1bHQgZmlsZSA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YSAudG1wIGZpbGU7IHRoZSBpbml0aWFsIHJlc3VsdApmaWxlLCBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbiB0byBwcmV2ZW50IGlycmVsZXZhbnQgZGlmZmVyZW5jZXMgaGFzCmJlZW4gYXBwbGllZCAoYmVmb3JlICdtYXNraW5nJykuIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5hIC5kaWZmIGZpbGU7IHRoZSBkaWZmZXJlbmNlcwpiZXR3ZWVuIHRoZSAub3V0IGFuZCB0aGUgbWFzdGVyIGZpbGUgd2l0aCBleHBlY3RlZCBvdXRwdXQgaXQgaXMKY29tcGFyZWQgdG8uIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwPmEgLnBhc3Mgb3IgLmZhaWwgZmlsZS4gVGhpcyBmaWxlIGxpc3RzIHRoZSB0ZXN0IGlmIGl0IHBhc3Nlcwp1bmRlciAucGFzcywgYW5kIHVuZGVyIC5mYWlsIGlmIHRoZSBvdXRwdXQgaW4gLm91dCBpcyBkaWZmZXJlbnQgZnJvbQp0aGUgZXhwZWN0ZWQgb3V0cHV0IGluIHRoZSBtYXN0ZXIuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+LnRtcG1zdHIgZmlsZS4gVGhpcyBmaWxlIGlzIGEgY29weSBvZiB0aGUgbWFzdGVyIGZpbGUgY3JlYXRlZCBpbgpsb2NhbCBlbmNvZGluZywgYW5kIGluIHRoZSBjYXNlIG9mIG5ldHdvcmtzZXJ2ZXIsIG1hc3NhZ2VkIHRvIGVsaW1pbmF0ZQppcnJlbGV2YW50IGRpZmZlcmVuY2VzLiBUaGlzIGlzIHRoZSBmaWxlIHRoZSAub3V0IGZpbGUgaXMgY29tcGFyZWQgd2l0aC48L3A+CiAgPC9saT4KPC91bD4KPHA+cG9zc2libHkgY3JlYXRlZDo8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+YWRkaXRpb25hbCBmaWxlcyB1c2VkIGluIGEgc3BlY2lmaWMKdGVzdCBtYXkgZ2V0IGNvcGllZCBvdmVyIHRvIHRoZSB0ZXN0IGRpcmVjdG9yeS4gVGhlc2Ugbm9ybWFsbHkgZG8gbm90CmdldCBjbGVhbmVkIHVwLiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD4uZXJyIGFuZCAub3V0IGZpbGVzIGluIG5ldHdvcmsgc2VydmVyIGRhdGFiYXNlIGZpbGVzIGZvciBhbnkKYWRkaXRpb25hbCBlcnJvciBvdXRwdXQuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+b25lIG9yIG1vcmUgZGF0YWJhc2UgZGlyZWN0b3JpZXM8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD4udXRmOG91dCBmaWxlIC0gc2VlIHNlY3Rpb24gb24gPGEgaHJlZj0iIzQuMTVfRW5jb2RpbmdfaXNzdWVzIj5FbmNvZGluZzwvYT4KSXNzdWVzLjxicj4KICAgIDwvcD4KICA8L2xpPgo8L3VsPgo8cD5XaGVuIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIGNsZWFudXAgd2lsbCBvY2N1ciB1bmxlc3MgdGhlIHRlc3QKaGFybmVzcyBwcm9wZXJ0eSAtRGtlZXBmaWxlcz10cnVlIGlzIHVzZWQuIENsZWFudXAgd2lsbCBhdHRlbXB0IHRvCmNsZWFudXAgYWxsIGZpbGVzIGV4Y2VwdCBmb3IgLnBhc3MuIDxmb250IHNpemU9IjIiPjxicj4KPGEgaHJlZj0iI05vdGUyOiI+U2VlCk5vdGUyLjwvYT48L2ZvbnQ+IDwvcD4KPHA+QSBzdWNjZXNzZnVsIHJ1biAodGhpcyBleGFtcGxlIGlzIGZyb20gYSBkb3MgZW52aXJvbm1lbnQpIHdvdWxkCmxvb2sgZm9yIGluc3RhbmNlIGxpa2U6IDwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+PGZvbnQgc2l6ZT0iMiI+YzomZ3Q7CmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCBsYW5nL3N1cGVyc2ltcGxlLnNxbDxicj4KQzpcZGVyYnlccnVuMjxicj4Kc3VwZXJzaW1wbGU8YnI+Ci0tIGxpc3RpbmcgcHJvcGVydGllcyAtLTxicj4KZGVyYnkubG9ja3MuZGVhZGxvY2tUaW1lb3V0PTM8YnI+CmRlcmJ5LmxvY2tzLndhaXRUaW1lb3V0PTM8YnI+CioqKiBTdGFydDogc3VwZXJzaW1wbGUgamRrMS40LjJfMDMgMjAwNC0xMS0xMCAxNjo1MTowMiAqKio8YnI+ClRoZSB0ZXN0IHNob3VsZCBiZSBydW5uaW5nLi4uPGJyPgpNYXN0ZXJGaWxlTmFtZSA9IG1hc3Rlci9zdXBlcnNpbXBsZS5vdXQ8YnI+CioqKiBFbmQ6Jm5ic3A7Jm5ic3A7IHN1cGVyc2ltcGxlIGpkazEuNC4yXzAzIDIwMDQtMTEtMTAgMTY6NTE6MjUgKioqPC9mb250PjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHA+PGJyPgo8YnI+CjwvcD4KPHA+QSBUZXN0IEZhaWx1cmUgc2hvd3MgdGhlIGRpZmYsIGNyZWF0ZXMgYSAuZmFpbCBmaWxlLCBkb2VzIG5vdApjcmVhdGUgYSAucGFzcyBmaWxlLCBhbmQgZG9lcyBub3QgY2xlYW51cCBhbnkgZmlsZXMgdXBvbiBjb21wbGV0aW9uLgpUaGUgb3V0cHV0IG1pZ2h0IGxvb2sgbGlrZSB0aGlzOjwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+Jm5ic3A7PGZvbnQgc2l6ZT0iMiI+YzomZ3Q7CmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCBsYW5nL3N1cGVyc2ltcGxlLnNxbDxicj4KQzpcZGVyYnlccnVuMjxicj4Kc3VwZXJzaW1wbGU8YnI+Ci0tIGxpc3RpbmcgcHJvcGVydGllcyAtLTxicj4KZGVyYnkubG9ja3MuZGVhZGxvY2tUaW1lb3V0PTM8YnI+CmRlcmJ5LmxvY2tzLndhaXRUaW1lb3V0PTM8YnI+CioqKiBTdGFydDogc3VwZXJzaW1wbGUgamRrMS40LjJfMDMgMjAwNC0xMS0xMCAxNjo1NDozOSAqKio8YnI+ClRoZSB0ZXN0IHNob3VsZCBiZSBydW5uaW5nLi4uPGJyPgpNYXN0ZXJGaWxlTmFtZSA9IG1hc3Rlci9zdXBlcnNpbXBsZS5vdXQ8YnI+CjEwIGRlbDxicj4KJmx0OyAxMDxicj4KMTBhMTA8YnI+CiZndDsgMTxicj4KVGVzdCBGYWlsZWQuPGJyPgoqKiogRW5kOiZuYnNwOyZuYnNwOyBzdXBlcnNpbXBsZSBqZGsxLjQuMl8wMyAyMDA0LTExLTEwIDE2OjU1OjAyICoqKjwvZm9udD48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPjxicj4KPGJyPgo8L3A+CjxoMz48YSBuYW1lPSJtb3pUb2NJZDM2ODU2NiI+PC9hPjxhIG5hbWU9InJ1bjIiPjwvYT4zLjIgUnVubmluZyBhCnN1aXRlIG9mIHRlc3RzPC9oMz4KPHA+U2VlIHNlY3Rpb24gMi4xIGZvciBhIGJhc2ljIGV4cGxhbmF0aW9uIG9uIGhvdyB0byBydW4gYSBzdWl0ZSBvZgp0ZXN0cy48L3A+CjxwPlRlc3RzIHdpbGwgYmUgcnVuIGluIGEgc3ViZGlyZWN0b3J5IHdpdGggdGhlIG5hbWUgb2YgdGhlIHRlc3QKc3VpdGUgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBFZy4gZm9yIGRlcmJ5bGFuZyBzdWl0ZSwgYQpkaXJlY3RvcnkgZGVyYnlsYW5nIHdpbGwgYmUgY3JlYXRlZC4gV2hpbGUgdGhlIHRlc3RzIGFyZSBydW4sCmluZm9ybWF0aW9uIGFib3V0IHRoZSBydW4gaXMgaW5zZXJ0ZWQgaW50byBhICZsdDt0ZXN0c3VpdGUmZ3Q7LnN1bQpmaWxlLiBXaGVuIGFsbCB0ZXN0cyBoYXZlIGNvbXBsZXRlZCBzdW1tYXJ5IGZpbGVzIGFyZSBjcmVhdGVkCiZsdDt0ZXN0c3VpdGUmZ3Q7X3Bhc3MudHh0LCBfZmFpbC50eHQsIGFuZCBfZGlmZi50eHQgZmlsZXMgYXJlCmNyZWF0ZWQgYXMgd2VsbCBhcyBhICZsdDt0ZXN0c3VpdGUmZ3Q7X3JlcG9ydC50eHQgd2l0aCBhZGRpdGlvbmFsCmRldGFpbHMuIFNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGlzIGR1cGxpY2F0ZS4gQWxzbywgYSAuc2tpcCBmaWxlCndpbGwgYmUgY3JlYXRlZCBob2xkaW5nIGEgbGlzdCBvZiB0aGUgdGVzdHMgdGhhdCB3ZXJlIHNraXBwZWQgKGZvcgptb3JlIGRldGFpbHMgb24gdGhpcywgc2VlIHRoZSBzZWN0aW9uIG9uIDxhIGhyZWY9IiNza2lwcGluZyI+c2tpcHBpbmcKdGVzdHM8L2E+KS4gPC9wPgo8cD5SdW5TdWl0ZSBkb2VzIG5vdCBlbXB0eSB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBiZWZvcmUgcnVubmluZy4KVGh1cywgaWYgYW5vdGhlciBzdWl0ZSB3YXMgcnVuIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhdCBhbiBlYXJsaWVyCnRpbWUsIHRoZSByZXN1bHRpbmcgc3VtbWFyeSBmaWxlcyBtaWdodCBjb250YWluIHJlc3VsdHMgZm9yIG1vcmUgdGhhbgp0aGUgY3VycmVudCBydW4uIFRoZXJlZm9yZSBpdCBpcyBpbXBvcnRhbnQgdG8gcnVuIGVhY2ggc3VpdGUgaW4gYQpjbGVhbiBkaXJlY3RvcnkuIDwvcD4KPHA+U2FtcGxlIG91dHB1dCBmcm9tIFJ1blN1aXRlOjwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+PGZvbnQgc2l6ZT0iMSI+YzomZ3Q7ICQgamF2YQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuU3VpdGUgZGVyYnlsYW5nPGJyPgpUb3Agc3VpdGU6IGRlcmJ5bGFuZzxicj4KU3VpdGUgdG8gcnVuOiBkZXJieWxhbmc6ZGVyYnlsYW5nPGJyPgpOb3cgZG8gUnVuTGlzdDxicj4KTm93IHJ1biB0aGUgc3VpdGUncyB0ZXN0czxicj4KUnVuIHRoZSB0ZXN0cy4uLjxicj4KRXhlY3V0ZSBjb21tYW5kOiBqYXZhIC1EamF2YUNtZD1qYXZhCi1Eb3V0cHV0ZGlyPUM6XGRlcmJ5dDFcZGVyYnlsYW5nXGRlcmJ5bGFuZwotRHRvcHN1aXRlZGlyPUM6XGRlcmJ5dDFcZGVyYnlsYW5nIC1EdG9wcmVwb3J0ZGlyPUM6XGRlcmJ5dDFcZGVyYnlsYW5nCi1EcnVuZGlyPUM6XGRlcmJ5dDEgLURzdWl0ZW5hbWU9ZGVyYnlsYW5nOmRlcmJ5bGFuZwotRHRvcHN1aXRlbmFtZT1kZXJieWxhbmcKb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy5oYXJuZXNzLlJ1blRlc3QKbGFuZy9hcml0aG1ldGljLnNxbDxicj4KLi4uKC5tb3JlIHRlc3RzKS4uLi48YnI+CkdlbmVyYXRlZCByZXBvcnQ6IGRlcmJ5bGFuZ19yZXBvcnQudHh0PC9mb250PjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHA+VGhpcyBvdXRwdXQgZG9lcyBub3Qgc2hvdyB3aGV0aGVyIHRoZSB0ZXN0cyBwYXNzZWQgb3IgZmFpbGVkLiBUaGUKU3VtbWFyeSBzZWN0aW9uIGluICZsdDt0ZXN0c3VpdGUmZ3Q7X3JlcG9ydC50eHQgc2hvd3MgdGhlIHN0YXRpc3RpY3MKb2YgdGhlIHBhc3NlZCB2cy4gZmFpbGVkIHRlc3RzLCB0aGUgc3VtbWFyeSAmbHQ7dGVzdHN1aXRlJmd0O18qLnR4dApmaWxlcyBsaXN0IHRoZSB0ZXN0cyB0aGF0IHBhc3NlZCBhbmQgZmFpbGVkLiA8L3A+CjxwPjxicj4KPGJyPgo8L3A+CjxoMj48YSBuYW1lPSJtb3pUb2NJZDYzNTM1NSI+PC9hPjxhIG5hbWU9Im92ZXJ2aWV3Ij48L2E+NC4gSGFybmVzcwppbnRlcm5hbHMgZm9yIGRldmVsb3BlcnM8L2gyPgo8cD5UaGUgZm9sbG93aW5nIGlzIGludGVuZGVkIGZvciBwZW9wbGUgd2hvIGhhdmUgdGhlIHN1YnZlcnNpb24gdHJlZQphdmFpbGFibGUgYW5kIHdhbnQgdG8gYWRkIG9yIG1vZGlmeSB0ZXN0cy4gPC9wPgo8cD5UaGUgdGVzdCBoYXJuZXNzIGV4ZWN1dGluZyBvbmUgdGVzdCBiYXNpY2FsbHkgZG9lcyB0aGUgZm9sbG93aW5nCmluIHNlcXVlbmNlOiA8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aWRlbnRpZnkgdGVzdCB0byBydW4gPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmlkZW50aWZ5IHByb3BlcnRpZXMgdG8gcnVuIHdpdGggPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmNvcHkgbmVlZGVkIHN1cHBvcnQgZmlsZXMgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmZpbmQgdGhlIGV4cGVjdGVkIG91dHB1dCA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aWYgbmV0d29yayBzZXJ2ZXIsIHN0YXJ0IG5ldHdvcmsKc2VydmVyIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5ydW4gdGhlIHRlc3QsIGNyZWF0aW5nIHRoZSBkYXRhYmFzZSA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aWYgbmV0d29yayBzZXJ2ZXIsIHNodXRkb3duIHRoZQpzZXJ2ZXIgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPm1vZGlmeSB0aGUgb3V0cHV0IGJhc2VkIG9uIFNlZCBjbGFzcwphbmQgX3NlZC5wcm9wZXJ0aWVzIGZpbGUgZm9yIHRoZSB0ZXN0IDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5jb21wYXJlIGV4cGVjdGVkIG91dHB1dCB3aXRoIGFjdHVhbApvdXRwdXQgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+aWYgcGFzcywgY2xlYW51cC4gPC9wPgogIDwvbGk+CjwvdWw+CjxwPjxicj4KPGJyPgo8L3A+CjxoMz48YSBuYW1lPSJtb3pUb2NJZDM0NDQ5OSI+PC9hPjxhIG5hbWU9Im92MSI+PC9hPjQuMSBUZXN0IHR5cGVzPC9oMz4KPHA+VGhlIHRlc3QgaGFybmVzcyByZWNvZ25pemVzLCBvciB3aWxsIHJlY29nbml6ZSB0ZXN0cyB3aXRoIHRoZQpmb2xsb3dpbmcgZXh0ZW5zaW9uczo8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Jm5ic3A7LmphdmEmbmJzcDsmbmJzcDsmbmJzcDsgdGVzdHMKdGhhdCBydW4gaW4gYSBzZXBhcmF0ZSBqdm0uIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij4mbmJzcDsuc3FsICZuYnNwOyZuYnNwOyZuYnNwOyB0ZXN0cwp0aGF0IHJ1biB1c2luZyBpaiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Jm5ic3A7LnNxbDIgJm5ic3A7Jm5ic3A7Jm5ic3A7CnJlbGF0ZWQgdG8gLnNxbCA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Jm5ic3A7Lm11bHRpICZuYnNwOyZuYnNwOyZuYnNwOwptdWx0aSB0aHJlYWRlZCB0ZXN0cy4gVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgMSB0ZXN0IGJlaW5nIHJ1bi4gVGhlCm11bHRpIHRlc3QgZnVuY3Rpb25zIGEgbGl0dGxlIGRpZmZlcmVudGx5IGZyb20gLmphdmEgYW5kIC5zcWwqIHRlc3RzIGluCnRoYXQgUnVuVGVzdCBzdGFydHMgYSBzZXBhcmF0ZSBoYXJuZXNzIGNsYXNzIGNhbGxlZCBNdWx0aVRlc3QgdG8KY29udHJvbCB0aGUgZGV0YWlscyBvZiB0aGUgcnVuLiBBbHNvLCB0aGUgYWN0dWFsIHRlc3QgZmlsZXMgbGl2ZSB1bmRlcgpvcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdGlvblRlc3RzL211bHRpL3N0cmVzcywgcmF0aGVyIHRoYW4Kb3JnL2FwYWNoZS9kZXJieVRlc3RpbmcvZnVuY3Rpb25UZXN0cy90ZXN0cy4gPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+Jm5ic3A7LnVuaXQgJm5ic3A7Jm5ic3A7Jm5ic3A7IHVuaXQgdGVzdHMuIFRoZSB1bml0IHRlc3RzCmFjdHVhbGx5IHJlZmVyIHRvICZsdDt0ZXN0bmFtZSZndDtfZGVyYnkucHJvcGVydGllcyBmaWxlcyB1bmRlcgpvcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdGlvblRlc3RzL3Rlc3RzL3VuaXQgdGhhdCBhY3RpdmF0ZSB0aGUKYWN0dWFsIHVuaXQgdGVzdCBoYXJuZXNzIGFuZCB0ZXN0cyB1bmRlcgpvcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy91bml0VGVzdHMuIFRoZXNlIHRlc3RzIHRlc3QgbW9yZSB1bmRlcmx5aW5nCmZ1bmN0aW9uYWxpdHkgdGhhbiB0aGUgKHJlc3Qgb2YgdGhlKSBmdW5jdGlvblRlc3RzLCB3aGljaCBhcmUgbW9yZQpnZWFyZWQgdG93YXJkIGhvdyBlbmQtdXNlcnMgbWlnaHQgdXNlIGZ1bmN0aW9uYWxpdHkuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+Lmp1bml0Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGp1bml0IHRlc3RzLiBUaGVzZSByZXF1aXJlCmp1bml0LmphciB0byBydW4gYW5kIGFyZSBhY3R1YWxseSBydW4gd2l0aCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci4gVGhlCmFjdHVhbCB0ZXN0cyBhcmUgLmphdmEgZmlsZXMuPGJyPgogICAgPC9wPgogIDwvbGk+CjwvdWw+CjxoMz48YSBuYW1lPSJtb3pUb2NJZDgwOTc3MCI+PC9hPjxhIG5hbWU9Im92MiI+PC9hPjQuMiBTdXBwb3J0aW5nCmZpbGVzIGZvciB0ZXN0czwvaDM+CjxwPlZhcmlvdXMgYWRkaXRpb25hbCBmaWxlcyBtYXkgYmUgdXNlZCBieSBhIHRlc3QsIGZvciBpbnN0YW5jZSwgdG8KY3JlYXRlIGxhcmdlIGRhdGEgdmFsdWVzLCB0byB0ZXN0IHVzaW5nIG9mIGphciBmaWxlcyBhbmQgdGhlIGxpa2UuCkFueSBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgYWNjZXNzZWQgYnkgYSBwYXJ0aWN1bGFyIHRlc3QgdGhhdCBhcmUgbm90CmFjY2Vzc2VkIGZyb20gdGhlIGNsYXNzcGF0aCBuZWVkIHRvIGJlIGxpc3RlZCB1bmRlciBzdXBwb3J0ZmlsZXM9IGluCnRoZSAmbHQ7dGVzdG5hbWUmZ3Q7X2FwcC5wcm9wZXJ0aWVzIGZpbGUuPGJyPgpUZXN0cyBjYW4gcmVmZXIgdG8KY2xhc3NlcyB3aXRob3V0IGJlaW5nIGluIHRoZSBjbGFzc3BhdGgsIGFuZCBzcWwgdGVzdHMgY2FuIHVzZSB0aGUgaWoKY29tbWFuZCAncnVuIHJlc291cmNlICcgdG8gZXhlY3V0ZSBhZGRpdGlvbmFsIC5zcWwgZmlsZXMgd2l0aG91dApjaGFuZ2VzIHRvIHRoZSBfYXBwLnByb3BlcnRpZXMgZmlsZXMuIDwvcD4KPHA+Rm9yIGV4YW1wbGUsIGluIHRoZSBmaWxlCihvcmcvYXBhY2hlL2RlcmJ5VGVzdGluZy9mdW5jdGlvblRlc3RzL3Rlc3RzLyl0b29scy9kYmxvb2tfdGVzdF9hcHAucHJvcGVydGllczo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOwo8Zm9udCBzaXplPSIyIj5zdXBwb3J0ZmlsZXM9dG9vbHMvZGJsb29rX21ha2VEQi5zcWwsdG9vbHMvZGJsb29rX3Rlc3QuamFyPGJyPgo8L2ZvbnQ+PC9wPgo8cD5UbyBzdXBwb3J0IHJ1bm5pbmcgb24gbm9uLUlTTy04ODU5IHN5c3RlbXMsIHRoZSBoYXJuZXNzIGNvcGllcyBmaWxlcwplbmRpbmcgaW4gc3FsLCAudmlldywgLm11bHRpLCAucHJvcGVydGllcywgLnR4dCBhbmQgLnBvbGljeSBpbnRvIGxvY2FsCmVuY29kaW5nOyBhbGwgb3RoZXIgZmlsZXMgYXJlIGNvcGllZCBpbnRvIFVURi04IGVuY29kaW5nLjwvcD4KPGgzPjxhIG5hbWU9Im1velRvY0lkNDI3NTc3Ij48L2E+PGEgbmFtZT0ib3YzIj48L2E+NC4zCiZsdDt0ZXN0bmFtZSZndDtfYXBwLnByb3BlcnRpZXM8L2gzPgo8cD5FdmVyeSB0ZXN0IGRpcmVjdG9yeSBoYXMgYSBkZWZhdWx0X2FwcC5wcm9wZXJ0aWVzLiBUaGlzIGZpbGUgaXMKZm9yIHN5c3RlbSBsZXZlbCBwcm9wZXJ0aWVzIGdlbmVyaWMgdG8gYWxsIHRoZSB0ZXN0cyBpbiB0aGF0IHRlc3QKZGlyZWN0b3J5LiA8L3A+CjxwPklmIGEgdGVzdCByZXF1aXJlcyBkaWZmZXJlbnQgc3lzdGVtIGxldmVsIHByb3BlcnRpZXMsIGEgdGVzdApzcGVjaWZpYyBwcm9wZXJ0aWVzIGZpbGUgY2FuIGJlIGNyZWF0ZWQgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0cy4KVGhlIHRlc3Qgc3BlY2lmaWMgcHJvcGVydGllcyBmaWxlIG5lZWRzIHRvIGhhdmUgYSBuYW1lIHN0YXJ0aW5nIHdpdGgKdGhlIHRlc3QgZmlsZSBuYW1lLCBmb2xsb3dlZCB3aXRoIF9hcHAucHJvcGVydGllczwvcD4KPHA+Rm9yIGV4YW1wbGUsIGZvciB0aGUgdGVzdCB0b29scy9kYmxvb2tfdGVzdC5qYXZhLCB0aGVyZSBpcyBhCnByb3BlcnRpZXMgZmlsZSBjYWxsZWQgdG9vbHMvZGJsb29rX3Rlc3RfYXBwLnByb3BlcnRpZXM8L3A+CjxoMz48YSBuYW1lPSJtb3pUb2NJZDcxNTU2NiI+PC9hPjxhIG5hbWU9Im92NCI+PC9hPjQuNAombHQ7dGVzdG5hbWUmZ3Q7X2RlcmJ5LnByb3BlcnRpZXM8L2gzPgo8cD5FdmVyeSB0ZXN0IGRpcmVjdG9yeSBoYXMgYSBkZWZhdWx0X2RlcmJ5LnByb3BlcnRpZXMuIFRoaXMgZmlsZSBpcwpmb3IgZGVyYnkgc3BlY2lmaWMgcHJvcGVydGllcyBjb21tb24gdG8gYWxsIHRoZSB0ZXN0cyBpbiB0aGF0IHRlc3QKZGlyZWN0b3J5Ljxicj4KSWYgYSB0ZXN0IHJlcXVpcmVzIGRpZmZlcmVudCBkZXJieSBwcm9wZXJ0aWVzLCBhIHRlc3QKc3BlY2lmaWMgcHJvcGVydGllcyBmaWxlIGNhbiBiZSBjcmVhdGVkIHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdHMuClRoZSB0ZXN0IHNwZWNpZmljIHByb3BlcnRpZXMgZmlsZSBuZWVkcyB0byBoYXZlIGEgbmFtZSBzdGFydGluZyB3aXRoCnRoZSB0ZXN0IGZpbGUgbmFtZSwgZm9sbG93ZWQgd2l0aCBfZGVyYnkucHJvcGVydGllczwvcD4KPGgzPjxhIG5hbWU9Im1velRvY0lkODc0MDk2Ij48L2E+PGEgbmFtZT0ib3Y1Ij48L2E+NC41IHRtcCBmaWxlcywgb3V0CmZpbGVzLCBtYXN0ZXIgZmlsZXMsIGFuZCBjYW5vbnM8L2gzPgo8cD5UaGUgdGVzdCdzIG91dHB1dCB3aWxsIGJlIHB1dCBpbnRvIGEgZmlsZSB0ZXN0bmFtZS50bXAuIFRoZW4gdGhlCm91dHB1dCBpcyBtb2RpZmllZCBpZiBtYXNraW5nIGlzIHJlcXVpcmVkIGFuZCB0aGUgcmVzdWx0IGlzIHB1dCBpbnRvCmEgLm91dCBmaWxlLjxicj4KVGhlIGV4cGVjdGVkIG91dHB1dCBpcyBmb3VuZCBieSBleGFtaW5pbmcgdGhlCmZvbGxvd2luZyBkaXJlY3RvcmllcywgYmFzZWQgb24gY2VydGFpbiBpbnB1dDwvcD4KPHVsPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5mdW5jdGlvblRlc3RzL21hc3Rlci9mcmFtZXdvcmsvamNjX3ZlcnNpb24vanZtY29kZQogICAgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmZ1bmN0aW9uVGVzdHMvbWFzdGVyL2ZyYW1ld29yay9qY2NfdmVyc2lvbi9lYXJsaWVyX2p2bWNvZGUKICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5mdW5jdGlvblRlc3RzL21hc3Rlci9mcmFtZXdvcmsvamNjX3ZlcnNpb24KICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5mdW5jdGlvblRlc3RzL21hc3Rlci9mcmFtZXdvcmsvanZtY29kZQogICAgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmZ1bmN0aW9uVGVzdHMvbWFzdGVyL2ZyYW1ld29yay9lYXJsaWVyX2p2bWNvZGUKICAgIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5mdW5jdGlvblRlc3RzL21hc3Rlci9qdm1jb2RlIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwPmZ1bmN0aW9uVGVzdHMvbWFzdGVyIDwvcD4KICA8L2xpPgo8L3VsPgo8cD5Gb3IgZXhhbXBsZSwgaWYgd2UgYXJlIHJ1bm5pbmcgYSB0ZXN0IGFuZCB0aGUgZmxhZwotRGZyYW1ld29yaz1EZXJieU5ldCBpcyB1c2VkLCB0byB1c2UgbmV0d29yayBzZXJ2ZXIgYW5kIHRoZSBJQk0KVW5pdmVyc2FsIEpEQkMgRHJpdmVyICgnamNjJyksIGFuZCB0aGUganZtIHdlIGFyZSB1c2luZyBpcyBTdW4ncyBqZGsKMTQyLCBhbmQgdGhlIGpjYyB2ZXJzaW9uIGlzIDIuNCAobm90IGF2YWlsYWJsZSBhdCB0aW1lIG9mIHdyaXRpbmcpCnRoZW4gdGhlIHNlYXJjaCBmb3IgdGhlIG1hc3RlciB0byBjb21wYXJlIHdpdGggc3RhcnRzIGluIHRoZQpmdW5jdGlvblRlc3RzL2RlcmJ5bmV0L2pjYzIuNC9qZGsxNCBkaXJlY3RvcnkuIElmIGEgLm91dCBmaWxlIHdpdGgKdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGVzdCBpcyBmb3VuZCBpbiB0aGF0IGRpcmVjdG9yeSwgdGhhdCBtYXN0ZXIgaXMKdGFrZW4uIElmIHRoZXJlIGlzIG5vIHN1Y2ggZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSwgc2VhcmNoIGNvbnRpbnVlcwppbiB0aGUgZGlyZWN0b3J5IGZ1bmN0aW9uVGVzdHMvZGVyYnluZXQvamNjMi40L2pkazE0IGlmIGl0IGV4aXN0cy48L3A+CjxwPklmIHRoZXJlIGlzIG5vIGZpbGUgdGhlcmUsIG5vciBmb3IgYW55IG90aGVyIGpjYyBkaXJlY3RvcnksIGl0CndpbGwgY29udGludWUgdG8gZGVyYnluZXQvamRrMTQsIGFuZCB0aGUgc2VhcmNoIGlzIGNvbnRpbnVlZCBmb3IKZWFybGllciBqdm0gdmVyc2lvbnMuPGJyPgpJZiB3ZSBhcmUgbm90IHJ1bm5pbmcgbmV0d29yayBzZXJ2ZXIsIHRoZQpEZXJieU5ldCBhbmQgamNjX3ZlcnNpb24gZGlyZWN0b3JpZXMgYXJlIG5vdCB0cmF2ZXJzZWQuPC9wPgo8cD5UaGUgdmVyc2lvbiBkZXRhaWxzIGRvIG5vdCBnbyBpbnRvIHRoZSBzdWJ2ZXJzaW9uIGxldmVsLCBpLmUuCnJ1bm5pbmcgd2l0aCBqZGsxNDEgb3IgamRrMTQyIGlzIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IuIDwvcD4KPHA+VGhpcyBmdW5jdGlvbmFsaXR5IHN1cHBvcnRzIGRlYWxpbmcgd2l0aCBtaW5vciBkaWZmZXJlbmNlcyBpbgpiZWhhdmlvciBjYXVzZWQgYnkgbWlub3IgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgaW4gdGhlIHVuZGVybHlpbmcKanZtcywgamNjIHZlcnNpb25zLCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlc3VsdHMgcmV0dXJuZWQgdGhyb3VnaApuZXR3b3JrIHNlcnZlciB2cy4gZW1iZWRkZWQgYW5kIG1pbm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gYSBkZWJ1ZyBhbmQKbm9uIGRlYnVnIChqYXIpIGJ1aWxkLiA8L3A+CjxwPkhvd2V2ZXIsIGhhdmluZyBhIGxhcmdlIG51bWJlciBvZiB0aGVzZSBmaWxlcyBtZWFucyBhIG1haW50ZW5hbmNlCnByb2JsZW0uIEV2ZXJ5IHRpbWUgdGVzdCBvdXRwdXQgY2hhbmdlcyBkdWUgdG8gbW9kaWZpY2F0aW9ucyB0byBkZXJieQpvciB0byB0aGUgdGVzdCwgYWxsIG91dHB1dCBmaWxlcyBpbiBhbGwgZGlyZWN0b3JpZXMgbmVlZCB0byBiZQp1cGRhdGVkIGFjY29yZGluZ2x5LiBJZiBhdCBhbGwgcG9zc2libGUsIGlycmVsZXZhbnQgZGlmZmVyZW5jZXMKc2hvdWxkIGJlIG1hc2tlZCBvdXQsIG9yIHRoZSB0ZXN0IHNob3VsZCBiZSB3cml0dGVuIHNvIHRoYXQgdGhlCm91dHB1dCBkb2VzIG5vdCByZWZsZWN0IHN1Y2ggaXRlbXMuIDwvcD4KPHA+U3VnZ2VzdGlvbnMgdG8gbWluaW1pemUgY2Fub25zOiA8L3A+Cjx1bD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Y3JlYXRlIHRlc3Qgc3BlY2lmaWMgbWFza2luZyA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+ZW5zdXJlIHRlc3QgZGF0YSBoYXMgYSBzcGVjaWZpYwpjb3JyZWN0IHJldHVybmVkIG9yZGVyOyBvciBhbiBvcmRlciBieSBzaG91bGQgYmUgYWRkZWQgdG8gYSBxdWVyeSA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cD53aGVuIHdyaXRpbmcgamF2YSB0ZXN0cywgZW5zdXJlIG9ubHkgcGVydGluZW50IG91dHB1dCBpcwpyZWZsZWN0ZWQuIDwvcD4KICA8L2xpPgo8L3VsPgo8cD48YnI+Cjxicj4KPC9wPgo8aDM+PGEgbmFtZT0ibW96VG9jSWQ2ODEwNyI+PC9hPjxhIG5hbWU9Im92NiI+PC9hPjQuNiBNYXNraW5nIGFuZApjb21wYXJpbmc8L2gzPgo8cD5UZXN0cyBvZnRlbiBmYWlsIGJlY2F1c2Ugb2YgdW5pbXBvcnRhbnQgZGlmZmVyZW5jZXMsIHN1Y2ggYXMKcHJvY2VzcyBpZHMsIHN0YXRlbWVudCBpZHMsIHRpbWVzdGFtcHMuIFRoZSBkZXJieSBmdW5jdGlvbmFsIHRlc3QKaGFybmVzcyBwcm92aWRlcyBmb3IgbWFza2luZyBvZiB0aGVzZSBkaWZmZXJlbmNlcyBhdCAyIGxldmVsczo8L3A+CjxvbD4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+b3ZlcmFsbCBsZXZlbC4gTWFza2luZyByZXF1aXJlZCBpbgphbGwsIG9yIG1hbnkgdGVzdHMgY2FuIGJlIGFjaGlldmVkIHVzaW5nIHRoZSBjbGFzcyBTZWQgaW4gdGhlIHRlc3QKaGFybmVzcyBkaXJlY3RvcnkuIFRoaXMgY2xhc3MgY2FuIGVpdGhlciBkZWxldGUgYSByZWZlcmVuY2UgcHJlc2VudCBpbgp0aGUgLnRtcCBmaWxlIGZyb20gdGhlIC5vdXQgZmlsZSwgb3IgcmVwbGFjZSBpdCB3aXRoIGEgZ2VuZXJpYyBzdHJpbmcuIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwPnRlc3Qgc3BlY2lmaWMgbGV2ZWwuIFRvIG1ha2UgbWFza2luZyBmb3Igb25seSBvbmUgdGVzdCwgYQoodGVzdG5hbWUpX3NlZC5wcm9wZXJ0aWVzIGZpbGUgY2FuIGJlIGNyZWF0ZWQgd2hpY2ggYWxsb3dzIHRvIGVpdGhlcgpyZW1vdmUgYSBzdHJpbmcgZnJvbSB0aGUgb3V0cHV0IG9yIHRvIHJlcGxhY2UgaXQuIDwvcD4KICA8L2xpPgo8L29sPgo8cD5UaGUgZGlmZiBpcyBleGVjdXRlZCBiZXR3ZWVuIHRoZSBmaW5hbCByZXN1bHRpbmcgb3V0cHV0IGFuZCB0aGUKbWFzdGVyIGZpbGUgZm91bmQgY29waWVkIGludG8gbG9jYWwgZW5jb2RpbmcgYXMgLnRtcG1zdHIuPC9wPgo8aDM+PGEgbmFtZT0iQWRkaW5nX2FfbmV3X3Rlc3QiPjwvYT40LjcmbmJzcDsgQWRkaW5nIGEgbmV3IHRlc3Q8L2gzPgo8cD5UbyBhZGQgYSBuZXcgdGVzdDogPC9wPgo8dWw+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmNyZWF0ZSB0aGUgdGVzdCBmaWxlIChlLmcuCm5ld2Z1bmN0ZXN0LmphdmEgb3IgbmV3ZnVuY3Rlc3Quc3FsKSBpbiB0aGUgYXBwcm9wcmlhdGUgdGVzdHMKc3ViZGlyZWN0b3J5PC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmxpc3QgYW55IGZpbGVzIG5lZWRlZCB0aGF0IGFyZSBub3QKLnNxbCBvciAuamF2YSBmaWxlcyBpbiBhIHN1cHBvcnRmaWxlcyBlbnRyeSBpbiBhIHRlc3Qgc3BlY2lmaWMKX2FwcC5wcm9wZXJ0aWVzIGZpbGUuIGUuZy4gbmV3ZnVuY3Rlc3RfYXBwLnByb3BlcnRpZXM6Jm5ic3A7CnN1cHBvcnRmaWxlcz14eXouamFyPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmxpc3QgYW55IHNwZWNpZmljIGRlcmJ5IHByb3BlcnRpZXMKaW4gYSB0ZXN0IHNwZWNpZmljIF9kZXJieS5wcm9wZXJ0aWVzIGZpbGUuIDwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5hZGQgdGhlIHByb3BlcnRpZXMgZmlsZXMgdG8gdGhlCmNvcHlmaWxlcy5hbnQgZmlsZSBpbiB0aGUgdGVzdCBzcGVjaWZpYyBkaXJlY3RvcnkgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPnJ1biB0aGUgdGVzdC4gVGhlIGZpcnN0IHRpbWUgYXJvdW5kLAp0aGUgdGVzdCB3aWxsIGZhaWwgYmVjYXVzZSBubyBtYXN0ZXIgZmlsZSB3aWxsIGJlIGZvdW5kLiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aWYgdGhlIG91dHB1dCBpcyBjb3JyZWN0LCBjb3B5IGl0IHRvCnRoZSBtYXN0ZXIgZGlyZWN0b3J5LiZuYnNwOyBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhlIHRlc3Qgb24gYSBub24tSVNPODg1OQplbmNvZGVkIHN5c3RlbSwgcnVuIHRoZSB0ZXN0IHdpdGggLURnZW5lcmF0ZVVURjhPdXQ9dHJ1ZS4gVGhpcyB3aWxsCmNyZWF0ZSBhIC51dGY4b3V0IGZpbGUgaW4gZml4ZWQgVVRGLTggZW5jb2RpbmcgLSB1c2UgdGhhdCBmaWxlIHRvIGNvcHkKaW50byBzdm4uPGJyPgogICAgPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPkJ1aWxkLiBUaGlzIHdpbGwgY29weSB0aGUgbmV3bHkKY3JlYXRlZCBtYXN0ZXIgaW50byBhIG1hdGNoaW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gdGhlIGNsYXNzZXMKZGlyZWN0b3J5IGFuZCwgd2hlbiBidWlsZGluZyBqYXJzLCB0aGUgbWFzdGVyIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgaW4KdGhlCmRlcmJ5VGVzdGluZy5qYXIsIHNvIGl0IGNhbiBiZSBmb3VuZCBieSB0aGUgaGFybmVzcyBhdCBydW4gdGltZS4gTm90ZQp0aGF0IHRoZXJlIGlzIG5vIGNvcHlmaWxlcy5hbnQgZmlsZSBuZWVkZWQKZm9yIHRoZSBtYXN0ZXIgZGlyZWN0b3J5LCBhbGwgLm91dCBmaWxlcyBhcmUgYXV0b21hdGljYWxseSBjb3BpZWQgdG8KdGhlIGNsYXNzZXMgZGlyZWN0b3J5IG9uIGJ1aWxkLiA8L3A+CiAgPC9saT4KICA8bGk+CiAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+cnVuIHRoZSB0ZXN0IGFnYWluLiBJbnZlc3RpZ2F0ZSBpZgphbnkgZGlmZmVyZW5jZXMgbmVlZCB0byBiZSBtYXNrZWQgb3V0IHVzaW5nIGEgdGVzdCBzcGVjaWZpYwpzZWQucHJvcGVydGllcyBmaWxlIChlLmcuIG5ld2Z1bmN0ZXN0X3NlZC5wcm9wZXJ0aWVzKS4gSWYgc28sIGVuc3VyZQp0aGlzIGlzIGFkZGVkIHRvIGNvcHlmaWxlcy5hbnQuPC9wPgogIDwvbGk+CjwvdWw+Cjx1bD4KICA8bGk+CiAgICA8cD5lbnN1cmUgdGhlIHRlc3QgY2xlYW5zIHVwIGFueSB0ZXN0b2JqZWN0cyBjcmVhdGVkLiBUaGlzIGlzCmltcG9ydGFudCBmb3IgcnVubmluZyB0aGUgdGVzdHMgaW4gc3VpdGVzIHdpdGggYSByZW1vdGUgc2VydmVyLCBvciB3aXRoCnVzZXByb2Nlc3M9ZmFsc2UsIGJlY2F1c2UKaW4gdGhvc2UgY2FzZXMsIHRlc3RzIHJ1biBhZ2FpbnN0IGRhdGFiYXNlcyBpbiB0aGUgc2FtZQpkaXJlY3RvcnkuJm5ic3A7IEV2ZW4gaWYgeW91IGRvIG5vdCBhbnRpY2lwYXRlIHlvdXIgdGVzdCB0byBydW4gaW4KdGhvc2UgY29uZmlndXJhdGlvbnMsIGl0IG1ha2VzIGdvb2QgcHJhY3RpY2UuJm5ic3A7WW91IG1heSBhbHNvIHdhbnQgdG8KcHJvdGVjdCB5b3VyIHRlc3QgZnJvbSBvdGhlciB0ZXN0cyBsZWF2aW5nIHRoaW5ncyBiZWhpbmQgYnkgcmVtb3ZpbmcKdGhlbSBiZWZvcmUgcnVubmluZyBhbHNvLiBUaGUgY2xhc3MKb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy51dGlsLlRlc3RVdGlsIGhhcyBhIGNsZWFuVXBUZXN0Cm1ldGhvZCB0aGF0IG1heSBiZSB1c2VmdWwuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+ZW5zdXJlIHRoYXQgY29ubmVjdGlvbnMgY2FuIGJlIG1hZGUgd2l0aCBhbGwgc3VwcG9ydGVkIGp2bXMuClRoaXMKaW5jbHVkZXMgdGhlIEoyTUUvQ0RDL0pTUjE2OSBjb25maWd1cmF0aW9uLCB3aGljaCBvbmx5IGhhcwpqYXZhLnNxbC5EYXRhc291cmNlIGF2YWlsYWJsZSwgbm8gamF2YS5zcWwuRHJpdmVyTWFuYWdlci4gT25lIGNhbiB1c2UKdGhlIG1ldGhvZCBpai5zdGFydEpCTVMoKSB0byBnZXQgYW4gYXBwcm9wcmlhdGUgY29ubmVjdGlvbiwgb3IKVGVzdFV0aWwuZ2V0Q29ubmVjdGlvbigpIGlmIG9uZSBuZWVkcyB0byBzcGVjaWZ5IGNvbm5lY3Rpb24gcHJvcGVydGllcwpkaWZmZXJlbnQgZnJvbSB3aGF0IGlzIGRlZmluZWQgaW4gdGhlICZsdDt0ZXN0Jmd0O19hcHAucHJvcGVydGllcyBmaWxlLgpGb3IgaW5zdGFuY2UsIHRvIHNodXRkb3duIGEgZGF0YWJhc2Ugb25lIGNhbiB1c2U6PC9wPgogIDwvbGk+CjwvdWw+CjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiA4MHB4OyI+CjxwPlRlc3RVdGlsLmdldENvbm5lY3Rpb24oIndvbWJhdCIsInNodXRkb3duPXRydWUiKTs8L3A+CjwvZGl2Pgo8dWw+CiAgPHVsPgogIDwvdWw+CiAgPGxpPgogICAgPHA+ZW5zdXJlIHRoYXQgdGhlIHRlc3QgZG9lcyBub3QgY2F1c2UgYW55IHByb2JsZW1zIG9uIG5vbi1JU08tODg1OQpzeXN0ZW1zLiBTZWUgc2VjdGlvbiA8YSBocmVmPSIjNC4xNV9FbmNvZGluZ19pc3N1ZXMiPjQuMTUuPC9hPjwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5lbnN1cmUgdGhlIHRlc3QgZG9lcyBub3QgaGF2ZSBoYXJkCmNvZGVkICdsb2NhbGhvc3QnIGZvciBuZXR3b3JrCmNvbm5lY3Rpb25zLiBJbnN0ZWFkLCB1c2UgdGhlIG1ldGhvZCBUZXN0VXRpbC5nZXRIb3N0TmFtZSgpIHRvIGZpbmQgaWYKYSBob3N0TmFtZSB3YXMgc3BlY2lmaWVkIGZvciByZW1vdGUgc2VydmVyIHRlc3RpbmcuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmFkZCB0aGUgdGVzdCB0byBhIHNwZWNpZmljCnN1aXRlcy8qLnhtbCBmaWxlLCBtYWludGFpbmluZyBwcm9wZXIgeG1sIHN5bnRheC4gPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+cnVuIHRoZSBzdWl0ZSwgYW5kIGNvcnJlY3QgYW55IHByb2JsZW1zIGZvdW5kLjwvcD4KICA8L2xpPgogIDxsaT5tYWtlIHN1cmUgeW91IHN2biBhZGQgYWxsIG5ldyBmaWxlcywgYW5kIHRoYXQgdGhlIHN2bjplb2wtc3R5bGUKaXMgbmF0aXZlIGZvciBhbGwgdGV4dCBmaWxlcywgYW5kIG5vdCBmb3IgYW55IGJpbmFyeSBmaWxlcy48YnI+CiAgPC9saT4KPC91bD4KPHA+PGJyPgo8YnI+CjwvcD4KPGgzPjxhIG5hbWU9IjQuOF9TdWl0ZXNfYW5kX0FkZGluZ19hX25ld19zdWl0ZSI+PC9hPjQuOCBTdWl0ZXMgYW5kCkFkZGluZyBhIG5ldyBzdWl0ZTwvaDM+CjxwPkEgc3VpdGUgY29uc3RpdHV0ZXMgb2YgYSAmbHQ7c3VpdGVuYW1lJmd0Oy5wcm9wZXJ0aWVzIGZpbGUgYW5kL29yCmEgJmx0O3N1aXRlbmFtZSZndDsucnVuYWxsIGZpbGUgaW4gdGhlCm9yZy9hcGFjaGUvZGVyYnlUZXN0aW5nL2Z1bmN0aW9uVGVzdHMvc3VpdGVzIGRpcmVjdG9yeS4gVGhlCi5wcm9wZXJ0aWVzIGZpbGVzIGhvbGQgcmVmZXJlbmNlcyB0byBvdGhlciAucHJvcGVydGllcyBmaWxlcywgb3IKLnJ1bmFsbCBmaWxlcywgdGhlIC5ydW5hbGwgZmlsZXMgYXJlIHRoZSBhY3R1YWwgbGlzdHMgb2YgdGVzdHMuIDwvcD4KPHA+VGhlIGxvd2VzdCBsZXZlbCBzdWl0ZSBhbHdheXMgbmVlZHMgdG8gaGF2ZSBhIC5ydW5hbGwgZmlsZS4gPC9wPgo8cD5Gb3IgZXhhbXBsZSwgdGhlIGRlcmJ5YWxsIHN1aXRlIGlzIG9ubHkgYSBkZXJieWFsbC5wcm9wZXJ0aWVzIGZpbGUKdGhhdCByZWZlcnMgdG8gb3RoZXIgc3VpdGVzIGluIHRoZSAnc3VpdGVzJyBwcm9wZXJ0eTogPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICA8cD48Zm9udCBzaXplPSIyIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWRlcmJ5YWxsLnByb3BlcnRpZXMtLS0tLS0tLS0tLS0tLS08YnI+CnN1aXRlcz1kZXJieWxhbmcgZGVyYnluZXRjbGllbnRtYXRzIGRlcmJ5bmV0bWF0cyBzdG9yZWFsbCB4YSBkZXJieXRvb2xzPGJyPgpkZXJieS5kZWJ1Zy50cnVlPWVuYWJsZUJ0cmVlQ29uc2lzdGVuY3lDaGVjazxicj4KZGVyYnkuc3RyZWFtLmVycm9yLmxvZ1NldmVyaXR5TGV2ZWw9MDwvZm9udD48L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPlRoZSBkZXJieWxhbmcgc3VpdGUgaXMgb25seSBhIGRlcmJ5bGFuZy5ydW5hbGwsIHdoaWNoIGxpc3RzIHRoZQp0ZXN0cy4gVGhlIGRlcmJ5bmV0Y2xpZW50bWF0cyBzdWl0ZSBoYXMgYm90aCBhIC5ydW5hbGwgYW5kIGEKLnByb3BlcnRpZXMgZmlsZSwgc28gc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgY2FuIGJlIHNwZWNpZmllZCB0aGF0CmFyZSB0cnVlIGZvciBhbGwgdGVzdHMgaW4gdGhhdCBzdWl0ZS4gPC9wPgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICA8cD48Zm9udCBzaXplPSIyIj4tLS0tLS0tLS0tLS0tLS0tLS1kZXJieW5ldGNsaWVudG1hdHMucHJvcGVydGllcy0tLS0tLS0tLS0tLS0tLS0tPGJyPgpmcmFtZXdvcms9RGVyYnlOZXRDbGllbnQ8YnI+CnN1aXRlcz1kZXJieW5ldGNsaWVudG1hdHMgZGVyYnluZXRtYXRzPGJyPgpqZGsxMnRlc3Q9dHJ1ZTxicj4KcnVud2l0aGo5PWZhbHNlPGJyPgp0aW1lb3V0PTYwPC9mb250PjwvcD4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHA+VG8gYWRkIGEgc3VpdGUsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhdCBsZWFzdCBhICZsdDtzdWl0ZSZndDsucnVuYWxsCmZpbGUsIHdoaWNoIGxpc3RzIHRoZSBhY3R1YWwgdGVzdHMsIG9yIGEgcHJvcGVydGllcyBmaWxlIHRoYXQgcmVmZXJzCnRvIG90aGVyIHN1aXRlcyB0aGF0IGRvIGhhdmUgYSAucnVuYWxsIGZpbGUuIFRoZSBzdWl0ZSBzaG91bGQgYmUKYWRkZWQgaW50byB0aGUgZGlyZWN0b3J5CiR7ZGVyYnkuc291cmNlfS9qYXZhL3Rlc3Rpbmcvb3JnL2FwYWNoZS9kZXJieVRlc3RpbmcvZnVuY3Rpb25UZXN0cy9zdWl0ZXMuPC9wPgo8aDM+PGEgbmFtZT0iNC45X1J1bm5pbmdfd2l0aF9hX25ld19qdm1fIj48L2E+PGEgbmFtZT0ib3Y5Ij48L2E+NC45ClJ1bm5pbmcgd2l0aCBhIG5ldyBqdm08L2gzPgo8cD5DdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQganZtcyBhcmU6IDwvcD4KPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgPHA+CiZuYnNwOyZuYnNwOyZuYnNwOyA8Zm9udCBzaXplPSIyIj5qZGsxNDEgLSBTdW4gSG90U3BvdCBqZGsxLjQuMSAtCmNsYXNzIGpkazE0PC9mb250Pjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPmpkazE0MiAtIFN1biBIb3RTcG90IGpkazEuNC4yIC0KY2xhc3MgamRrMTQ8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+amRrMTUgLSBTdW4gSG90U3BvdCBqZGsxLjUgLSBjbGFzcwpqZGsxNTwvZm9udD48YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyA8Zm9udCBzaXplPSIyIj5qZGsxNiAtIFN1biBIb3RTcG90IGpkazEuNiAtIGNsYXNzCmpkazE2PC9mb250Pjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPmpkazE3IC0gU3VuIEhvdFNwb3QgamRrMS43IC0gY2xhc3MKamRrMTc8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+aWJtMTQxIC0gSUJNIENsYXNzaWMgamRrMS40LjEgLQpjbGFzcyBpYm0xNDwvZm9udD48YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyA8Zm9udCBzaXplPSIyIj5pYm0xNDIgLSBJQk0gQ2xhc3NpYyBqZGsxLjQuMSAtCmNsYXNzIGlibTE0PC9mb250Pjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IDxmb250IHNpemU9IjIiPmlibTE1IC0gSUJNIENsYXNzaWMgamRrMS41IC0KY2xhc3MgaWJtMTU8L2ZvbnQ+PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgPGZvbnQgc2l6ZT0iMiI+ajlfZm91bmRhdGlvbjExIC0gV0VNRSBqdm0gKGF2YWlsYWJsZQp3aXRoIElCTSBXZWJzcGhlcmUgRXZlcnlwbGFjZSBNaWNybyBFZGl0aW9uLCA2LjEuMSksIHZlcnNpb24gMi4zLCBqMk1FIDEuMSAtIApjbGFzcyBqOV9mb3VuZGF0aW9uMTE8L2ZvbnQ+PC9wPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgo8cD5UaGUgY2xhc3NlcyBhYm92ZSBhcmUgc3ViY2xhc3NlcyBvZgpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuanZtLiBUaGUgbmFtZSBhdCB0aGUKZnJvbnQgaXMganVzdCBhIGNvbnZlbnRpb24uPC9wPgo8cD5UbyBydW4gYSB0ZXN0IHdpdGggYSBqdm0gdGhhdCBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgY2xhc3MgdW5kZXIKb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy5oYXJuZXNzLCBkbyB0aGUgZm9sbG93aW5nOjwvcD4KPHVsPgogIDxsaT4KICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij5qdXN0IHJ1biB0aGUgdGVzdHMgYXMgaWYgdGhlcmUgaXMgYQpqdm0gY2xhc3MuIFRoZSBoYXJuZXNzIHdpbGwgZGVmYXVsdCB0byB1c2luZyB0aGUgamRrMTYgY2xhc3MuIFVubGlrZWx5LApidXQgcG9zc2libHkgdGhlcmUgYXJlIG5vIGRpZmZlcmVuY2VzPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmlmIHRoZXJlIGFyZSBmYWlsdXJlcyBzaG93aW5nIHRoYXQKY2Fubm90IGJlIGV4cGxhaW5lZCBhbnkgb3RoZXIgd2F5IGJ1dCBnZW51aW5lLCBhY2NlcHRhYmxlIGp2bQpkaWZmZXJlbmNlcywgZG8gdGhlIGZvbGxvd2luZzogPC9wPgogICAgPHVsPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmNyZWF0ZSBhIHN1YmNsYXNzIG9mCm9yZy5hcGFjaGUuZGVyYnlUZXN0aW5nLmZ1bmN0aW9uVGVzdHMuaGFybmVzcy5qdm0uIEluIHRoaXMgY2xhc3MsCnNwZWNpZnkgYW55IGp2bSBzcGVjaWZpYyBwcm9wZXJ0eSBzZXR0aW5ncyByZXF1aXJlZCA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Y29tcGlsZSB0aGUgbmV3IGp2bSBjbGFzcyBhbmQKcnVuIHRoZSB0ZXN0cyA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+Y3JlYXRlIGEgbmV3IGNhbm9uIGRpcmVjdG9yeSBmb3IKYW55IGFkZGl0aW9uYWwgY2Fub25zIHRoYXQgbmVlZCB0byBiZSBjcmVhdGVkLiA8L3A+CiAgICAgIDwvbGk+CiAgICAgIDxsaT4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+aW4gcmFyZSBvY2Nhc2lvbnMsIG90aGVyIGhhcm5lc3MKY2hhbmdlcyBtYXkgYmUgcmVxdWlyZWQgPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbjsiPmZvciBhbnkgdGVzdHMgdGhhdCBzaG91bGQgbm90CnJ1biB3aXRoIHRoaXMgZW52aXJvbm1lbnQsIGFkZCBhIGxpbmUgaW4gdGhlIHRlc3RuYW1lX2FwcC5wcm9wZXJ0aWVzCmZpbGUgaW5kaWNhdGluZyB0aGlzLiBGb3IgaW5zdGFuY2UgdG8gYWRkIGEgbGluZSBmb3IgYSBqdm0gY2FsbGVkCmpkazI5LCBpdCB3b3VsZCBiZSBsaWtlIHRoaXM6IHJ1bndpdGhqZGsyOT1mYWxzZS4gTm90ZSB0aGF0IHRoZQp2ZXJzaW9uaW5nIGRvZXMgbm90IGN1cnJlbnRseSBleHRlbmQgcGFzdCAyIGRpZ2l0cy4gRm9yIGo5IGp2bXMsCnZlcnNpb25pbmcgZG9lcyBub3QgYXBwbHkgY3VycmVudGx5LiBGb3IgYWxsIGo5IHZlcnNpb25zLCB1c2UKcnVud2l0aGo5PWZhbHNlLiBGb3IgajlfZm91bmRhdGlvbiosIHVzZSBydW53aXRoZm91bmRhdGlvbj1mYWxzZS4gPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+CiAgICAgICAgPHA+QWRkIGNvZGUgaW4gUnVuVGVzdC5qYXZhIHRvIHN3aXRjaCB0byB0aGUgbmV3IGp2bSBiYXNlZCBvbgp2YWx1ZXMgZm9yIHN5c3RlbSBhbmQgdmVuZG9yIHByb3BlcnRpZXMgPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgo8cD48YnI+Cjxicj4KPC9wPgo8aDM+PGEgbmFtZT0ic2tpcHBpbmciPjwvYT40LjEwIFNraXBwaW5nIGEgdGVzdDwvaDM+CjxwPlRoZXJlIGFyZSAyIHNraXBwaW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UgZm9yIGRpZmZlcmVudCBraW5kcyBvZgpza2lwcGluZyBvZiBhIHRlc3QuPC9wPgo8cD5Tb21lIHRlc3RzIGFyZSB3cml0dGVuIHRvIHRlc3Qgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvbmx5CmF2YWlsYWJsZSB3aXRoIGZvciBpbnN0YW5jZSBjZXJ0YWluIGp2bXMsIG9yLCB3aXRoIG5ldHdvcmsgc2VydmVyLApjZXJ0YWluIHZlcnNpb25zIG9mIHRoZSBJQk0gVW5pdmVyc2FsIERyaXZlci4gVG8gY29udHJvbCB0aGlzLApwcm9wZXJ0aWVzIGNhbiBiZSBzZXQgZm9yIGVhY2ggdGVzdCwgZm9yIGluc3RhbmNlLCBpZiBhIHRlc3Qgc2hvdWxkCm5vdCBiZSBydW4gd2hlbiB1c2luZyBhbiBpYm0ganZtLCBzZXQgcnVud2l0aGlibWp2bT1mYWxzZS4gSWYgYSB0ZXN0CnNob3VsZCBiZSBydW4gd2l0aCBTdW4gSG90c3BvdCBqdm0gdmVyc2lvbiAxNCwgdGhlbiBzZXQKcnVud2l0aGpkazE0PXRydWUuPGJyPgpUaGUgc2tpcCBzZXR0aW5nIGRvZXMgbm90IGdvIGludG8gdGhlCnN1YnZlcnNpb24gbGV2ZWwsIGkuZS4gc2V0dGluZyBydW53aXRoamRrMTQxPWZhbHNlIGhhcyBubyBlZmZlY3QsIGFuZApzZXR0aW5nIHJ1bndpdGhqZGsxNCBhZmZlY3RzIHJ1bnMgd2l0aCBqZGsxNDEgYXMgd2VsbCBhcwpqZGsxNDIuPGJyPgpPdGhlciBza2lwIHJlYXNvbnMgYXJlIGVuY3J5cHRpb24gcHJvdG9jb2xzIHNwZWNpZmljIHRvIGEKY2VydGFpbiBqdm0uIDwvcD4KPHA+VGhlIHByb3BlcnR5IGZvciBza2lwcGluZyBhIHRlc3QgYmFzZWQgb24gdGhlIHZlcnNpb24gb2YgdGhlIElCTQpVbml2ZXJzYWwgRHJpdmVyIGlzICJleGNsdWRlSkNDIi4mbmJzcDsgVGhlIGtleXdvcmRzCiI8Yj5hdC1vci1iZWZvcmU8L2I+IiBhbmQgIjxiPmF0LW9yLWFmdGVyPC9iPiIKY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB3aGljaCByYW5nZSBvZiBKQ0MgdmVyc2lvbnMgc2hvdWxkIGJlCmV4Y2x1ZGVkLiZuYnNwOyBJZiBuZWl0aGVyIG9mIHRoZXNlIGtleXdvcmRzIGlzIHByb3ZpZGVkLCB0aGUgZGVmYXVsdAppcyAiPGI+YXQtb3ItYmVmb3JlPC9iPiIuJm5ic3A7IEZvciBleGFtcGxlOjwvcD4KPHA+VG8gc2tpcCBhIHRlc3Qgd2hlbiBydW5uaW5nIHdpdGggYW55IHZlcnNpb24gb2YgdGhlIElCTSBVbml2ZXJzYWwKRHJpdmVyIHRoYXQgaXMgMi40IG9yIGVhcmxpZXI6PGJyPgpleGNsdWRlSkNDPWF0LW9yLWJlZm9yZToyLjQ8YnI+Cjxicj4KVG8Kc2tpcCBhIHRlc3Qgd2hlbiBydW5uaW5nIHdpdGggYW55IHZlcnNpb24gb2YgdGhlIElCTSBVbml2ZXJzYWwgRHJpdmVyCnRoYXQgaXMgMi4wIG9yIGxhdGVyOjxicj4KZXhjbHVkZUpDQz1hdC1vci1hZnRlcjoyLjA8L3A+CjxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIChvcHRpb25hbCkganZtIGNsYXVzZSB0byBmdXJ0aGVyIHR1bmUgdGhlCmV4Y2x1c2lvbiBjcml0ZXJpYS4mbmJzcDsgVGhpcyBjbGF1c2Ugc3RhcnRzIHdpdGggdGhlICI8Yj4sd2hlbjwvYj4iCnRhZyBhbmQgaXMgZm9sbG93ZWQgYnkgYSB0aHJlZS1wYXJ0IGp2bSB2ZXJzaW9uLiZuYnNwOyBJbiB0aGlzIGNhc2UsCmEgdGVzdCB3aWxsIG9ubHkgYmUgc2tpcHBlZCBpZiBCT1RIIHRoZSBKQ0MgY2xhdXNlIEFORCB0aGUganZtIGNsYXVzZQphcmUgdHJ1ZS4gRm9yIGV4YW1wbGU6PC9wPgo8cD5UbyBza2lwIGEgdGVzdCB3aGVuIHJ1bm5pbmcgd2l0aCBhbnkgdmVyc2lvbiBvZiB0aGUgSUJNIFVuaXZlcnNhbApEcml2ZXIgdGhhdCBpcyAyLjQgb3IgbGF0ZXIsIGJ1dCBPTkxZIGlmIHRoZSBqdm0gaXMgMS4zIG9yCmVhcmxpZXI6PGJyPgpleGNsdWRlSkNDPWF0LW9yLWFmdGVyOjIuNCx3aGVuLWF0LW9yLWJlZm9yZTpqZGsxLjMuMTwvcD4KPHA+VG8gc2tpcCBhIHRlc3Qgd2hlbiBydW5uaW5nIHdpdGggYW55IHZlcnNpb24gb2YgdGhlIElCTSBVbml2ZXJzYWwKRHJpdmVyIHRoYXQgaXMgMi4wIG9yIGVhcmxpZXIsIGJ1dCBPTkxZIGlmIHRoZSBqdm0gaXMgMS41IG9yCmxhdGVyOjxicj4KZXhjbHVkZUpDQz1hdC1vci1iZWZvcmU6Mi4wLHdoZW4tYXQtb3ItYWZ0ZXI6amRrMS41LjE8L3A+CjxwPkFub3RoZXIgc2tpcHBpbmcgbWVjaGFuaXNtIHdvcmtzIG9uIGVudGlyZSAnZnJhbWV3b3JrcycuIEN1cnJlbnRseQp0aGVyZSBhcmUgb25seSAzIHN1cHBvcnRlZCBpbiB0aGUgaGFybmVzcywgZW1iZWRkZWQsIG5ldHdvcmsgc2VydmVyCndpdGggdGhlIGRlcmJ5Y2xpZW50IGRyaXZlciAoJ0RlcmJ5TmV0Q2xpZW50JykgYW5kIG5ldHdvcmsgc2VydmVyCndpdGggdGhlIElCTSBVbml2ZXJzYWwgSkRCQyBEcml2ZXIgKCdEZXJieU5ldCcpLiBJbiB0aGUgc3VpdGVzCmRpcmVjdG9yeSB0aGVyZSBhcmUgLmV4Y2x1ZGUgZmlsZXMgZm9yIGVhY2ggb2YgdGhlIGZyYW1ld29ya3MgLSBpZgpmb3Igc29tZSByZWFzb24gYW4gZXhjbHVkZSBmaWxlIHdlcmUgbm90IHRoZXJlLCB5b3Ugd291bGQgc2VlIGEKd2FybmluZyBtZXNzYWdlIHNob3cgdXAgZm9yIGV2ZXJ5IHRlc3QgcnVuLiBJbiB0aGlzCidmcmFtZXdvcmsnLmV4Y2x1ZGUgZmlsZSB0ZXN0cyBjYW4gYmUgcGxhY2VkIHRoYXQgZm9yIHNvbWUgcmVhc29uCm5lZWQgdG8gYmUgZXhjbHVkZWQgZnJvbSBydW5uaW5nIHdpdGggdGhhdCBmcmFtZXdvcmsuIFRoaXMgbWVjaGFuaXNtCmVuYWJsZXMgYWRkaW5nIG9mIHN1aXRlcyB0byBhIGZyYW1ld29yayBydW4gZXZlbiBpZiBhIGZldyBvZiB0aGUKdGVzdHMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGZyYW1ld29yay48L3A+CjxwPk5vdGUgdGhhdCBhdCB0aGlzIHRpbWUsIG9ubHkgc2tpcHBlZCBzdWl0ZXMgc2hvdyB1cCBpbiB0aGUgLnNraXAKcmVzdWx0IGZpbGUuIFRoaXMgc3RpbGwgbmVlZHMgdG8gYmUgY29ycmVjdGVkLjwvcD4KPHA+PGJyPgo8YnI+CjwvcD4KPGgzPjxhIG5hbWU9ImZyYW1ld29ya3MiPjwvYT40LjExIEZyYW1ld29ya3M8L2gzPgo8cD5DdXJyZW50bHksIHRoZXJlIGFyZSB0d28gZnJhbWV3b3JrcyB1c2VkIGZvciBuZXR3b3JrCnNlcnZlciwmbmJzcDtEZXJieU5ldENsaWVudCwgd2hpY2ggdXNlcyB0aGUgZGVyYnkgQ2xpZW50IGRyaXZlciwgYW5kCkRlcmJ5TmV0LCB3aGljaCB1c2VzIHRoZSBJQk0gVW5pdmVyc2FsIEpEQkMgRHJpdmVyLiA8YnI+ClNldHRpbmcgdGhlCmZyYW1ld29yayBwcm9wZXJ0eSB3aWxsIGludm9rZSB0aGUgdGVzdCBoYXJuZXNzIGNsYXNzIE5ldFNlcnZlciB3aGljaApoYXMgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIChkcml2ZXIgbmFtZSwgcG9ydG51bWJlciBldGMuKSB1c2VkIGZvcgp0aGUgaW5kaXZpZHVhbCBmcmFtZXdvcmtzLiA8YSBocmVmPSIjTm90ZTM6Ij48Zm9udCBzaXplPSIyIj5TZWUKTm90ZTMuPC9mb250PjwvYT48YnI+ClNldHRpbmcgdGhpcyBmcmFtZXdvcmsgYWxzbyBjYXVzZXMgdGhlIHNlYXJjaApmb3IgZXhwZWN0ZWQgb3V0cHV0IHRvIGluY2x1ZGUgYXBwcm9wcmlhdGUgRGVyYnlOZXRDbGllbnQgb3ImbmJzcDsKRGVyYnlOZXQgYW5kIGpjYyB2ZXJzaW9uIHNwZWNpZmljIHN1YmRpcmVjdG9yaWVzIHVuZGVyIHRoZSBtYXN0ZXIKZGlyZWN0b3J5LjwvcD4KPHA+PGJyPgo8YnI+CjwvcD4KPGgzPjxhIG5hbWU9InByb3BzIj48L2E+NC4xMiBTb21lIHRlc3QgaGFybmVzcyBwcm9wZXJ0aWVzPC9oMz4KPHA+Rm9yIGEgY29tcGxldGUgc2V0LCByZWZlciB0byBjb21tZW50cyBpbiBSdW5UZXN0LmphdmEsIGJ1dCBoZXJlCmFyZSBzb21lIHZhbHVhYmxlIHRlc3QgcHJvcGVydGllcyB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBSdW5UZXN0CmNsYXNzOiA8L3A+Cjx0YWJsZSBzdHlsZT0id2lkdGg6IDc5MXB4OyBoZWlnaHQ6IDYzMnB4OyIgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIKIGNlbGxzcGFjaW5nPSIzIj4KICA8Y29sIHdpZHRoPSI5OTQiPiA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iOTk0Ij4KICAgICAgPHVsPgogICAgICAgIDxsaT5ydW53aXRoJmx0O2p2bSZndDsgLSBTZWUgYWJvdmUgc2VjdGlvbiA8YSBocmVmPSIjc2tpcHBpbmciPjQuMTA8L2E+PGJyPgogICAgICAgICAgPGJyPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPmZyYW1ld29yayAtIHNwZWNpZmllcyB3aGljaCBmcmFtZXdvcmsgdG8gcnVuIHdpdGguIEZvcgpleGFtcGxlOjxicj4KamF2YSAtRGZyYW1ld29yaz1EZXJieU5ldENsaWVudApvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCA8YnI+CiAgICAgICAgICA8YnI+Cmxhbmcvc3VwZXJzaW1wbGUuc3FsPGJyPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPnZlcmJvc2UgLSBTaG93cyBtb3JlIGRldGFpbGVkIG91dHB1dCBpZiBzZXQgdG8gInRydWUiLiBGb3IKZXhhbXBsZTo8YnI+CiAgICAgICAgICA8c21hbGw+amF2YSAtRHZlcmJvc2U9dHJ1ZQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCBsYW5nL2FyaXRobWV0aWMuc3FsPC9zbWFsbD48YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+a2VlcGZpbGVzIC0gSW5kaWNhdGVzIHRvIG5vdCBjbGVhbiB1cCBhbnkgb2YgdGhlIGZpbGVzIGlmCnRoZSB0ZXN0CnBhc3NlZCBpZiBzZXQgdG8gInRydWUiLjxicj4KICAgICAgICAgIDxicj4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT50ZXN0U3BlY2lhbFByb3BzIC0gc2V0cyBhZGRpdGlvbmFsIHByb3BlcnRpZXMuIFNldmVyYWwgY2FuCmJlIHNldCB1c2luZwonXicgYXMgc2VwYXJhdG9yOiA8YnI+Ci1EdGVzdFNwZWNpYWxQcm9wcz0mbHQ7cHJvcC0xJmd0Oz0mbHQ7dmFsdWUtMSZndDteCi4uLiBeJmx0O3Byb3AtbiZndDs9Jmx0O3ZhbHVlLW4mZ3Q7LiBGb3IgZXhhbXBsZTo8YnI+CiAgICAgICAgICA8c21hbGw+amF2YSAtRFRlc3RTcGVjaWFsUHJvcHM9ZGVyYnkuaW5mb2xvZy5hcHBlbmQ9dHJ1ZQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCBsYW5nL2FyaXRobWV0aWMuc3FsPC9zbWFsbD4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT5qdm1mbGFncyAtIHNldHMgc3BlY2lmaWMganZtIHByb3BlcnRpZXMgZm9yIGVhY2gganZtIGluc3RhbnRpYXRlZCBieSB0aGUKdGVzdCBoYXJuZXNzLCBmb3IgaW5zdGFuY2UgZm9yIHNldHRpbmcgaW5pdGlhbCBhbmQgbWF4aW11bSBoZWFwIHNpemUgKG5vdGUgdGhhdCBzZXR0aW5nIApvbmx5IGluaXRpYWwgc2l6ZSBvciBvbmx5IG1heCBzaXplIG1heSBjYXVzZSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIGhlYXAgc2V0dGluZ3MgcGlja2VkCnVwIGZyb20gaGFybmVzcyBwcm9wZXJ0eSBmaWxlcyBvciBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLCBvciBvdGhlciBwcm9wZXJ0aWVzCnRoYXQgbmVlZCB0byBiZSBwYXNzZWQgb24gdG8gdGhlIGp2bSwgc2VwYXJhdGVkIGJ5ICdeJy4gVGhpcyBwcm9wZXJ0eQpjYW4gYmUgc2V0IG9uIHRoZSBjb21tYW5kbGluZSBmb3IgZWl0aGVyIFJ1blRlc3Qgb3IgUnVuU3VpdGUsIG9yIGluIG9uZQpvZiB0aGUgcHJvcGVydGllcyBmaWxlcyB1c2VkIGJ5IHRoZSB0ZXN0cy4gVGhlIHByb3BlcnR5IGp2bWZsYWdzCndoZW4gcGFzc2VkIG9uIGF0IHRoZSBjb21tYW5kIGxpbmUgc3VwZXJjZWRlcyB0aGUgcHJvcGVydGllcyBzZXQgaW4gYSBzdWl0ZSdzIHByb3BlcnR5ZmlsZSwgCmFuZCB0aG9zZSBzdXBlcmNlZGUganZtZmxhZ3MgcHJvcGVydGllcyBzZXQgaW4gYSBzdWJzdWl0ZSdzIG9yIHRlc3QncyBwcm9wZXJ0eWZpbGUsCmJlY2F1c2UgdGhlICdoaWdoZXN0JyBsZXZlbCBwcm9wZXJ0aWVzIGFyZSBwYXNzZWQgdG8gdGhlIGp2bSBsYXN0LiBTZXR0aW5nIHRoaXMgcHJvcGVydHkKZm9yIGEgdGVzdCB0aGF0IHJ1bnMgd2l0aCB1c2Vwcm9jZXNzPWZhbHNlIGNhbm5vdCBoYXZlIGFueSBlZmZlY3QuCkV4YW1wbGU6IDxicj4KICAgICAgICAgIDxzbWFsbD5qYXZhIC1EanZtZmxhZ3M9LVhtczMyTV4tWG14MTI4TQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdCBsYW5nL2NvbmNhdGVUZXN0cy5qYXZhPC9zbWFsbD48YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+ZXhjbHVkZUpDQyAtCiZuYnNwOyZuYnNwOyZuYnNwOyBTZWUgYWJvdmUgc2VjdGlvbiA8YSBocmVmPSIjc2tpcHBpbmciPjQuMTA8L2E+PGJyPgogICAgICAgICAgPGJyPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPnVzZXByb2Nlc3MgLSAoZGVmYXVsdD10cnVlKSBDb250cm9scyB3aGV0aGVyIFJ1blRlc3QgcnVucwp0aGUgdGVzdCBpbiBhIHNlcGFyYXRlIFZNIG9yIGluIGEgdGhyZWFkIGluIGhhcm5lc3MgVk0uIEFsc28gZG9lcyBub3QKY3JlYXRlCnN1YmRpcmVjdG9yaWVzIGZvciBlYWNoIHRlc3QgYW5kIHRodXMgd2lsbAphdHRlbXB0IHRvIHJldXNlIGRhdGFiYXNlcyB3aXRoIHRoZSBzYW1lIG5hbWUuIEl0IGlzCnBvdGVudGlhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRlc3RzLiBVbml0IHRlc3RzIGFyZSBub3QgKHlldCkKcnVubmFibGUgd2l0aAoidXNlcHJvY2Vzcz1mYWxzZSIuIDxicj4KICAgICAgICAgIDxicj4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT5zdGFydFNlcnZlciAtIGFsbG93cyBmb3IgTmV0d29yayBTZXJ2ZXIgdGVzdHMgdG8gc3RhcnQgYW5kCnNodXRkb3duCk5ldHdvcmsgU2VydmVyIGZyb20gdGhlIHRlc3QgaXRzZWxmLiBEZWZhdWx0IGlzIHRydWUgLSBpLmUuIHRoZQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdGVzdCBoYXJuZXNzIHdpbGwgc3RhcnQgTmV0d29yayBTZXJ2ZXIuPGJyPgogICAgICAgICAgPGJyPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPm5vU2VjdXJpdHlNYW5hZ2VyIJYgZGlzYWJsZSB0aGUgY2xpZW50IEpWTSBmcm9tIGluc3RhbGxpbmcKYQpTZWN1cml0eU1hbmFnZXIuIFNlZSBzZWN0aW9uIDxhIGhyZWY9IiNzZWN1cml0eSI+NC4xMzwvYT48L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxwPmRlcmJ5VGVzdGluZy5yZXBsYWNlUG9saWN5RmlsZSAtIHJlcGxhY2Ugb3IgYXBwZW5kIHRoZQpjb250ZW50cyBvZiB0aGUgZGVmYXVsdCBwb2xpY3kgZmlsZSBkZXJieV90ZXN0cy5wb2xpY3kuIGRlZmF1bHQgaXMKZmFsc2UsIGkuZS4gYXBwZW5kLiBTZWUgc2VjdGlvbiA8YSBocmVmPSJSRUFETUUuaHRtI3NlY3VyaXR5Ij40LjEzPC9hPgogICAgICAgICAgPC9wPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHA+aG9zdE5hbWUgLSBhbGxvd3MgZm9yIHJ1bm5pbmcgTmV0d29yayBTZXJ2ZXIgb24gYSByZW1vdGUKaG9zdC4gU2VlCnNlY3Rpb24gPGEgaHJlZj0iI2hvc3ROYW1lIj40LjE0PC9hPi48L3A+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+ZGVyYnlUZXN0aW5nLmVuY29kaW5nIC0gYWxsb3dzIGZvciBydW5uaW5nIHRoZSBoYXJuZXNzIHdpdGgKYSBkaWZmZXJlbnQKZW5jb2RpbmcuIE9ubHkgc3VwcG9ydGVkIHdpdGggamRrMTUuIEV4YW1wbGU6IDxicj4KICAgICAgICAgIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHNtYWxsPiBqYXZhCi1EZGVyYnlUZXN0aW5nLmVuY29kaW5nPVVURi0xNgpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuVGVzdApqZGJjYXBpL3Jlc3VsdHNldC5qYXZhPC9zbWFsbD48YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+Z2VuZXJhdGVVVEY4T3V0IC0gY29waWVzIHRoZSB0ZXN0IC5vdXQgaW50byBVVEYtOCBlbmNvZGluZy4KU2VlIHNlY3Rpb24gPGEgaHJlZj0iIzQuMTVfRW5jb2RpbmdfaXNzdWVzIj40LjE1PC9hPi48YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+ZGVyYnlUZXN0aW5nLmphci5wYXRoIC0gVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBydW4KdXBncmFkZSB0ZXN0cy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gcG9pbnQgdG8gdGhlIGxvY2F0aW9uIG9mIGphciBmaWxlcwpmcm9tIGEgcHJldmlvdXMgcmVsZWFzZSBmcm9tIHdoaWNoIHdlIG5lZWQgdG8gdGVzdCB1cGdyYWRlLiBUaGlzCnByb3BlcnR5IG5lZWRzIHRvIGJlIHNldCBvbmx5IGlmIHRoZSBzb3VyY2UgZmlsZXMgd2lsbCBub3QgYmUgYXZhaWxhYmxlCndoZW4gcnVubmluZyB0ZXN0cy4gSW4gdGhpcyBjYXNlLCB0aGUgamFycyBjYW4gYmUgY29waWVkIHRvIGFueQpsb2NhdGlvbiB3aXRoIHRoZSBmb2xsb3dpbmcgcmVsYXRpdmUgcGF0aAoke2phcl9sb2NhdGlvbn0ve21ham9ydmVyc2lvbi5taW5vcnZlcnNpb259LiBUaGUgcHJvcGVydHkgc2hvdWxkIGJlIHNldAphcyBmb2xsb3dzOjxicj4KICAgICAgICAgIDxicj4KZGVyYnlUZXN0aW5nLmphci5wYXRoPSR7amFyX2xvY2F0aW9ufTxicj4KICAgICAgICAgIDxicj4KSWYgdGhlIHRlc3QgaXMgcnVuIG9uIHRoZSBtYWNoaW5lIHdoZXJlIHRoZSBzb3VyY2UgZmlsZXMgZnJvbSBzdm4gaGF2ZQpiZWVuIGJ1aWx0LCB0aGVuIGl0IGlzIG5vdCByZXF1aXJlZCB0byBzZXQgdGhpcyBwcm9wZXJ0eS4gVGhlIGphcnMKY2hlY2tlZCBpbnRvIHN2biB3aWxsIGJlIHVzZWQuIElmIHRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuIGluIGEgbG9jYXRpb24Kd2hlcmUgdGhlIGphcnMgZnJvbSB0aGUgcHJldmlvdXMgcmVsZWFzZSBhcmUgYXZhaWxhYmxlIGluIGEgZGlmZmVyZW50CmxvY2F0aW9uIHRoYW4gd2hlcmUgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHVwZ3JhZGUgdGVzdHMgaGF2ZSBiZWVuCmJ1aWx0LCB0aGUgZm9sbG93aW5nIHByb3BlcnR5IG5lZWRzIHRvIGJlIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lIGZvcgpSdW5TdWl0ZSBvciBSdW5UZXN0IHdoZXJlIHRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuOjxicj4KICAgICAgICAgIDxicj4KLURqdm1mbGFncz0tRGRlcmJ5VGVzdGluZy5qYXIucGF0aD17cGF0aF90b19kZXJieV9qYXJzfTxicj4KICAgICAgICAgIDxicj4Kd2hlcmUge3BhdGhfdG9fZGVyYnlfamFyc30gcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdoZXJlIHRoZSBqYXJzIGZvciB0aGUKcHJldmlvdXMgRGVyYnkgcmVsZWFzZSBiZWluZyB0ZXN0ZWQgZm9yIHVwZ3JhZGUgcmVzaWRlIGluIGEKc3ViZGlyZWN0b3J5IG5hbWVkIGFjY29yZGluZyB0byB0aGUgbWFqb3IubWlub3IgdmVyc2lvbi4gRm9yIGV4YW1wbGU6PGJyPgogICAgICAgICAgPGJyPgpJZiB0aGUgRGVyYnkgMTAuMSBqYXJzIGZvciB1cGdyYWRlIHRlc3RpbmcgcmVzaWRlIGluCi9vcHQvdGVzdGluZy9kZXJieS8xMC4xIHRoZW4gdGhlIGNvbW1hbmQgbGluZSBuZWVkZWQgZm9yIHRoZSB1cGdyYWRlCnRlc3RzIHRvIGNvbXBsZXRlIHdvdWxkIGluY2x1ZGUgdGhlIGZvbGxvd2luZzo8YnI+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8c21hbGw+amF2YQotRGp2bWZsYWdzPS1EZGVyYnlUZXN0aW5nLmphci5wYXRoPS9vcHQvdGVzdGluZy9kZXJieQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuU3VpdGUgdXBncmFkZTwvc21hbGw+PGJyPgogICAgICAgICAgPGJyPgpQbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGRlcmJ5VGVzdGluZy5qYXIucGF0aCB5b3UKd2lsbCBuZWVkIHRvIHJlbW92ZSB0aGUgZmlsZSA8c21hbGw+b3JnL2FwYWNoZS9kZXJieVRlc3RpbmcvZnVuY3Rpb25UZXN0cy90ZXN0cy91cGdyYWRlVGVzdHMvVXBncmFkZV8xMF8xXzEwXzIucHJvcGVydGllczwvc21hbGw+CmZyb20geW91ciBvdXRwdXQgZGlyZWN0b3J5IGFuZCBydW4gJ2FudCBhbGwnIGZvciB0aGUgdXBkYXRlZCB2YWx1ZSBvZgp0aGUgcHJvcGVydHkgdG8gYmUgd3JpdHRlbiBpbnRvIHRoYXQgZ2VuZXJhdGVkIGZpbGUuPGJyPgogICAgICAgIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxoMz48YSBuYW1lPSJzZWN1cml0eSI+PC9hPjxicj4KNC4xMyBTZWN1cml0eU1hbmFnZXIgdGVzdGluZyBieQpkZWZhdWx0PC9oMz4KPHA+QnkgZGVmYXVsdCB0aGUgdGVzdHMgaW5zdGFsbCB0aGUgc3RhbmRhcmQgSmF2YSBTZWN1cml0eU1hbmFnZXIKdXNpbmcgdGhlIHN5c3RlbSBwcm9wZXJ0eSBqYXZhLnNlY3VyaXR5Lm1hbmFnZXIgYW5kIHVzZSBhIHBvbGljeSBmaWxlCmRlcmJ5X3Rlc3RzLnBvbGljeS4gVGhlIGRlZmF1bHQgZmlsZSBpcyBzb3VyY2VkCmF0PGJyPgoke2RlcmJ5LnNvdXJjZX0vamF2YS90ZXN0aW5nL29yZy9hcGFjaGUvZGVyYnlUZXN0aW5nL2Z1bmN0aW9uVGVzdHMvdXRpbC9kZXJieV90ZXN0cy5wb2xpY3k8L3A+CjxwPkR1cmluZyBhIHRlc3QgcnVuIHRoaXMgcG9saWN5IGZpbGUgaXMgY29waWVkIGludG8gJHt1c2VyLmRpcn0gYW5kCnVzZWQgZnJvbSB0aGVyZS48YnI+Ck9wdGlvbmFsbHkgYSB0ZXN0LXNwZWNpZmljIG9yIHN1aXRlLXNwZWNpZmljIHBvbGljeSBmaWxlIG1heSBiZQphcHBlbmRlZCBvciB1c2VkIGluc3RlYWQuIFRoZSBuYW1lIG9mIHRoZSBwb2xpY3kgZmlsZSByZW1haW5zCmRlcmJ5X3Rlc3RzLnBvbGljeS4gPGJyPgo8L3A+CjxwPkEgdGVzdF9zcGVjaWZpYyBwb2xpY3kgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgdGVzdCwgaGFzCmV4dGVuc2lvbiAucG9saWN5LCBhbmQgaXMgbG9jYXRlZCBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyB0aGUgdGVzdC4gRm9yCmluc3RhbmNlLAoke2RlcmJ5LnNvdXJjZX0vamF2YS90ZXN0aW5nL29yZy9hcGFjaGUvZGVyYnlUZXN0aW5nL2Z1bmN0aW9uVGVzdHMvdGVzdHMvbGFuZy9lcnJvclN0cmVhbS5wb2xpY3kKaXMgdGhlIHRlc3Qtc3BlY2lmaWMgcG9saWN5IGZpbGUgZm9yIHRoZSB0ZXN0IGVycm9yU3RyZWFtLmphdmEuIEEKc3VpdGUtc3BlY2lmaWMgcG9saWN5IGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHN1aXRlLCBoYXMKZXh0ZW5zaW9uIC5wb2xpY3ksIGFuZCBpcyBsb2NhdGVkIGluIHRoZQoke2RlcmJ5LnNvdXJjZX0vamF2YS90ZXN0aW5nL29yZy9hcGFjaGUvZGVyYnlUZXN0aW5nL2Z1bmN0aW9uVGVzdHMvc3VpdGVzCmRpcmVjdG9yeS48YnI+CjwvcD4KPHA+QnkgZGVmYXVsdCwgYSB0ZXN0LXNwZWNpZmljIGFuZC9vciBzdWl0ZS1zcGVjaWZpYyBwb2xpY3kgZmlsZSBpcwphcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBwb2xpY3kgZmlsZSAoZGVyYnlfdGVzdHMucG9saWN5KS4gSG93ZXZlciwgaWYgYQp0ZXN0J3MgX2FwcC5wcm9wZXJ0aWVzIG9yIHN1aXRlJ3MgLnByb3BlcnRpZXMgZmlsZSBjb250YWlucyB0aGUKcHJvcGVydHkgZGVyYnlUZXN0aW5nLnJlcGxhY2VQb2xpY3lGaWxlPXRydWUsIHRoZW4gdGhlIGZpbGUKZGVyYnlfdGVzdHMucG9saWN5IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHRlc3QtCm9yIHN1aXRlLXNwZWNpZmljIHBvbGljeSBmaWxlLjxicj4KPC9wPgo8cD5UaGVyZSBhcmUgdHdvIGVudmlyb25tZW50cyBmb3IgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUKU2VjdXJpdHlNYW5hZ2VyLjwvcD4KPHVsPgogIDxsaT4KICAgIDxwPlNlcnZlciBKVk0gZm9yIHRoZSBuZXR3b3JrIGNsaWVudCB0ZXN0cy4gQWx3YXlzIHVzZXMgYQpTZWN1cml0eU1hbmFnZXIuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgPHA+Q2xpZW50IHNpZGUgSlZNLCB0aGlzIGlzIHRoZSBKVk0gZXhlY3V0aW5nIHRoZSBKREJDIGNhbGxzCmFnYWluc3QgYW55IERlcmJ5IGRyaXZlci4KSW5zdGFsbHMgYSBTZWN1cml0eU1hbmFnZXIgdW5sZXNzOjwvcD4KICA8L2xpPgogIDx1bD4KICAgIDxsaT4KICAgICAgPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciPjxmb250IHNpemU9IjIiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5ub1NlY3VyaXR5TWFuYWdlcj08L2ZvbnQ+PGZvbnQKIGNvbG9yPSIjMmEwMGZmIj50cnVlIDwvZm9udD48Zm9udCBzaXplPSIzIj48Zm9udAogZmFjZT0iVGltZXMgTmV3IFJvbWFuLCBzZXJpZiI+PGZvbnQgY29sb3I9IiMwMDAwMDAiPmluIHRoZSB0ZXN0J3MKX2FwcC5wcm9wZXJ0aWVzIGZpbGUuVXNlZCB0byBkaXNhYmxlIGluZGl2aWR1YWwgdGVzdHMgdGhhdCBjYW5ub3QgcnVuCnVuZGVyIHRoZSBzZWN1cml0eSBtYW5hZ2VyLCBvciBpZiB0aGUgdGVzdCBoYXMgYSBmdW5jdGlvbmFsIHJlcXVpcmVtZW50Cm5vdCB0byBydW4gd2l0aCB0aGUgU2VjdXJpdHlNYW5hZ2VyLiBJZGVhbGx5LCBmZXcgdGVzdHMgd2lsbCBoYXZlIHRoaXMKcHJvcGVydHkgc2V0LiBBbnkgZGlzYWJsaW5nIG9mIHRoZSBTZWN1cml0eU1hbmFnZXIgZm9yIGEgdGVzdCByZXF1aXJlcwphIGNvbW1lbnQgaW4gdGhlIHRlc3QncyBfYXBwLnByb3BlcnRpZXMgZmlsZSBpbmRpY2F0aW5nIHdoeSB0aGUgdGVzdApjYW5ub3QgcnVuIHVuZGVyIHRoZSBTZWN1cml0eU1hbmFnZXIuIDwvZm9udD48L2ZvbnQ+PC9mb250PjwvZm9udD48L2ZvbnQ+PC9wPgogICAgPC9saT4KICAgIDxsaT4KICAgICAgPHA+PGZvbnQgY29sb3I9IiMwMDAwMDAiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiwgc2VyaWYiPjxmb250CiBzaXplPSIzIj5DbGllbnQgSkRCQyBkcml2ZXIgaXMgREIyJ3MgVW5pdmVyc2FsIGRyaXZlciBmb3IgSkRCQy4KQ3VycmVudGx5IGRvZXMgbm90IGluc3RhbGwgYSBTZWN1cml0eU1hbmFnZXIsIG5vIHRlY2huaWNhbCByZWFzb25zLApqdXN0IGhhcyBub3QgYmVlbiBkb25lLjwvZm9udD48L2ZvbnQ+PC9mb250PjwvcD4KICAgIDwvbGk+CiAgPC91bD4KPC91bD4KPGgzPjxhIG5hbWU9Imhvc3ROYW1lIj48L2E+PGJyPgo0LjE0IFRlc3Rpbmcgd2l0aCBOZXR3b3JrIFNlcnZlciBvbiBhIHJlbW90ZSBob3N0PC9oMz4KVG8gZW5hYmxlIHRlc3RpbmcgYWdhaW5zdCBhIE5ldHdvcmsKU2VydmVyIHJ1bm5pbmcgb24gYSByZW1vdGUKbWFjaGluZSAtIHdoaWNoIGlzIGZvciBpbnN0YW5jZSBuZWVkZWQgdG8gdGVzdCBvbiBJUFY2IG1hY2hpbmVzIC0gb25lCmNhbiB1c2UgdGhlIHByb3BlcnR5IGhvc3ROYW1lLiA8YnI+CkJ5IGRlZmF1bHQgdGhlIG5ldHdvcmsgc2VydmVyIGlzIGFzc3VtZWQgbm90IHRvIGJlIHJ1bm5pbmcsIGFuZCB0aGUKdGVzdCBoYXJuZXNzIHdpbGwgc3RhcnQgTmV0d29yayBTZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUgZm9yIGVhY2gKdGVzdCAtIHVubGVzcyB0aGUgdGVzdApoYXMgYmVlbiBxdWFsaWZpZWQgZXhwbGljaXRseSB3aXRoIHRoZSBwcm9wZXJ0eSBzdGFydFNlcnZlciB0bwpmYWxzZS4gSW4gdGhhdCBjYXNlLCB0aGUgdGVzdCBpdHNlbGYgaXMgYXNzdW1lZCB0byBiZSBzdGFydGluZyBOZXR3b3JrClNlcnZlci4KKFRoaXMgY2FuIGJlIHNldCBlaXRoZXIgaW4gYSB0ZXN0J3MgcHJvcGVydHkgZmlsZSBvciB3aXRoIHRoZSAtRCBvbiB0aGUKY29tbWFuZGxpbmUpLiBUaHVzLCBieSBkZWZhdWx0IE5ldHdvcmsgU2VydmVyIGlzIHN0YXJ0ZWQgYW5kIHNodXRkb3duCmluIHRoZSBzdWJkaXJlY3RvcnkgZm9yIHRoZSBmcmFtZXdvcmsgY3JlYXRlZCBmb3IgZWFjaCB0ZXN0LCBhbmQgbmV3CmRhdGFiYXNlcyBhcmUgY3JlYXRlZCBpbiBlYWNoIHRlc3QgZGlyZWN0b3J5IChlLmcuCi4vZ2V0Q3VyQ29ubkpkYmMyMC93b21iYXQpLiBUaGUgdGVzdCBwb2xpY3kgZmlsZSBhbHNvIGdldHMgY29waWVkIHRvCnRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbi4gPGJyPgpXaGVuIG9uZSB3YW50cyB0byBydW4gYWdhaW5zdCBhIE5ldHdvcmsgU2VydmVyIHJ1bm5pbmcgb24gYSByZW1vdGUKbWFjaGluZSwgdGhlIHRlc3QgaGFybmVzcyBjYW5ub3Qgc3RhcnQgb3Igc3RvcCBpdCBiZWNhdXNlIG9mIHNlY3VyaXR5CnJlYXNvbnMuIFRodXMsIHRoZSBzZXR0aW5nIG9mIHRoZSBwcm9wZXJ0eSBob3N0TmFtZSBhdXRvbWF0aWNhbGx5IHNldHMKc3RhcnRTZXJ2ZXIgdG8gZmFsc2UuIFRoZSBob3N0TmFtZSBpcyBhdXRvbWF0aWNhbGx5IHBhc3NlZCBvbiB0byB0aGUKYWN0dWFsIHRlc3QgcnVuIGFzIHRoZSBwcm9wZXJ0eSAke2RlcmJ5VGVzdGluZy5zZXJ2ZXJob3N0fSB3aGljaCBpcwp1c2VkIGluIHRoZSBkZXJieV90ZXN0cy5wb2xpY3kgZmlsZSBvbiB0aGUgY2xpZW50IG1hY2hpbmUuPGJyPgpUaGUgaG9zdE5hbWUgcHJvcGVydHkgaXMgbm90IGEgcHJlLXNldCB2YWx1ZSBpbgphbnkKc3VpdGUsIHNvbWUgbWFudWFsIHN0ZXBzIGFyZSByZXF1aXJlZCB0byBydW4gdGVzdHMgdGhpcyB3YXk6PGJyPgo8b2w+CiAgPGxpPkV4dHJhY3QgYW5kL29yIGNvcHkgdGhlCihqYXZhL3Rlc3Rpbmcvb3JnL2FwYWNoZS9kZXJieVRlc3RpbmcvZnVuY3Rpb25UZXN0cy91dGlsKWRlcmJ5X3Rlc3RzLnBvbGljeQpmcm9tIHRoZQpkZXJieVRlc3RpbmcuamFyIG9yIGZyb20gdGhlIHN2biBzb3VyY2UgdG8gYSBsb2NhdGlvbiBvbgp0aGUgaG9zdCBvbiB3aGljaCB5b3Ugd2FudCB0byBydW4gdGhlIE5ldHdvcmtTZXJ2ZXI8L2xpPgogIDxsaT5TZXQgdXAgdGhlIGNsYXNzcGF0aCBmb3IgTmV0d29yayBTZXJ2ZXIgdG8gaW5jbHVkZSBkZXJieW5ldC5qYXIKYW5kIGRlcmJ5VGVzdGluZy5qYXIgKG9yIGVxdWl2YWxlbnQgY2xhc3NlcykuIFlvdSBuZWVkIHRvIGhhdmUKZGVyYnkuamFyIGF2YWlsYWJsZSBhbHNvLCBhbHRob3VnaCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluIHRoZQpjbGFzc3BhdGguPGJyPgogIDwvbGk+CiAgPGxpPlN0YXJ0IE5ldHdvcmsgU2VydmVyIGxpa2Ugc28gd2hlbiB1c2luZyBjb21waWxlZCBjbGFzc2VzIGZvciBpdDo8L2xpPgo8L29sPgo8dGFibGUKIHN0eWxlPSJ3aWR0aDogNzUxcHg7IGhlaWdodDogNzJweDsgdGV4dC1hbGlnbjogbGVmdDsgbWFyZ2luLXJpZ2h0OiBhdXRvOyBtYXJnaW4tbGVmdDogNDBweDsiCiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5qYXZhIC1EamF2YS5zZWN1cml0eS5tYW5hZ2VyCi1EamF2YS5zZWN1cml0eS5wb2xpY3k9Y29waWVkX2RlcmJ5X3Rlc3RzLnBvbGljeQotRGRlcmJ5VGVzdGluZy5jb2RlY2xhc3Nlcz1maWxlOi9kZXJieS9jbGFzc2VzLwotRGRlcmJ5VGVzdGluZy5jb2RlZGlyPS9kZXJieS9jbGFzc2VzCi1EZGVyYnlUZXN0aW5nLnNlcnZlcmhvc3Q9bG9jYWxob3N0Ci1EZGVyYnlUZXN0aW5nLmNsaWVudGhvc3Q9Y2xpZW50SVBhZGRyZXNzCi1EZGVyYnlUZXN0aW5nLmNvZGVqYXI9ZmlsZTovL3VudXNlZC8Kb3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIC1oIDAuMC4wLjAgc3RhcnQ8YnI+CiAgICAgIDxzbWFsbD53aGVyZSAvZGVyYnl0L2NsYXNzZXMgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUKY2xhc3NlcyBjYW4gYmUgZm91bmQsIDwvc21hbGw+PHNtYWxsPmFuZCBjbGllbnRJUGFkZHJlc3MgaXMgeW91cgpjbGllbnQgbWFjaGluZSdzIElQCmFkZHJlc3Mgb3IgbmFtZS4gSW4gdGhpcyBleGFtcGxlLCBkZXJieS5zeXN0ZW0uaG9tZSBpcyBpbiB0aGUgZGlyZWN0b3J5CndoZXJlIE5ldHdvcmsgU2VydmVyIGlzIHN0YXJ0ZWQsIGFuZCB0aGUgZGVyYnlfdGVzdHMucG9saWN5IGZpbGUgaXMgaW4KdGhhdCBkaXJlY3RvcnkgdG9vLjwvc21hbGw+PGJyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Cm9yIGxpa2Ugc28gd2hlbiB1c2luZyBqYXJzOjxicj4KPHRhYmxlCiBzdHlsZT0id2lkdGg6IDc1MXB4OyBoZWlnaHQ6IDcycHg7IHRleHQtYWxpZ246IGxlZnQ7IG1hcmdpbi1yaWdodDogYXV0bzsgbWFyZ2luLWxlZnQ6IDQwcHg7IgogYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+amF2YQotRGRlcmJ5LnN5c3RlbS5ob21lPS9ob21lL2RlcmJ5dHN0L25zIC1EamF2YS5zZWN1cml0eS5tYW5hZ2VyCi1EamF2YS5zZWN1cml0eS5wb2xpY3k9L2hvbWUvZGVyYnl0c3QvbnMvY29waWVkX2RlcmJ5X3Rlc3RzLnBvbGljeQotRGRlcmJ5VGVzdGluZy5jbGllbnRob3N0PWNsaWVudElQYWRkcmVzcwotRGRlcmJ5VGVzdGluZy5jb2RlamFyPWZpbGU6L2RlcmJ5L3RzdGJsZC8KLURkZXJieVRlc3RpbmcuY29kZWRpcj0vZGVyYnkvdHN0YmxkCi1EZGVyYnlUZXN0aW5nLnNlcnZlcmhvc3Q9bG9jYWxob3N0Ci1EZGVyYnlUZXN0aW5nLmNvZGVjbGFzc2VzPWZpbGU6Ly91bnVzZWQvCm9yZy5hcGFjaGUuZGVyYnkuZHJkYS5OZXR3b3JrU2VydmVyQ29udHJvbCAtaCAwLjAuMC4wIHN0YXJ0PGJyPgogICAgICA8c21hbGw+d2hlcmUgL2RlcmJ5dC90c3RibGQmbmJzcDsgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZQpkZXJieW5ldC5qYXIgaXMgZm91bmQgYW5kIGRlcmJ5LnN5c3RlbS5ob21lIHBvaW50cyB0byB0aGUgZGlyZWN0b3J5CndoZXJlIHlvdXIKZGVyYnkucHJvcGVydGllcyBhcmUgYW5kIHdoZXJlIHlvdSB3YW50IHRvCmhhdmUgZGVyYnkubG9nIGFuZCBhbnkgZGF0YWJhc2VzIGdvLCA8L3NtYWxsPjxzbWFsbD5hbmQKY2xpZW50SVBhZGRyZXNzIGlzIHlvdXIgY2xpZW50IG1hY2hpbmUncyBJUCBhZGRyZXNzIG9yIG5hbWU8L3NtYWxsPjxzbWFsbD4uCiAgICAgIDwvc21hbGw+PGJyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgo8b2wgc3RhcnQ9IjQiPgogIDxsaT5PbiB0aGUgY2xpZW50IG1hY2hpbmUsIHN0YXJ0IHRoZSB0ZXN0cyBhcyB1c3VhbCwgYnV0IHNwZWNpZnlpbmcKaG9zdE5hbWUsIGxpa2Ugc286PC9saT4KPC9vbD4KPC9kaXY+Cjx0YWJsZQogc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IG1hcmdpbi1yaWdodDogYXV0bzsgbWFyZ2luLWxlZnQ6IDQwcHg7IGhlaWdodDogMzFweDsgd2lkdGg6IDc4NnB4OyIKIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIyIj4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPmphdmEKLURob3N0TmFtZT1mYXZvcml0ZS5yZW1vdGVob3N0LmNvbQpvcmcuYXBhY2hlLmRlcmJ5VGVzdGluZy5mdW5jdGlvblRlc3RzLmhhcm5lc3MuUnVuU3VpdGUKZGVyYnluZXRjbGllbnRtYXRzPGJyPgogICAgICA8c21hbGw+d2hlcmUgZmF2b3JpdGUucmVtb3RlaG9zdC5jb20gaXMgdGhlIGhvc3QgbmFtZSBvciBpcAphZGRyZXNzLjwvc21hbGw+PGJyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgo8YnI+ClJ1blRlc3QgY2FuIHBpY2sgdXAgdGhlIHByb3BlcnR5IGluIGEgc2ltaWxhciB3YXkuIFlvdSBjYW4gc2V0Ci1EZnJhbWV3b3JrIGFzIHVzdWFsLiBZb3UgY2FuIGFsc28gcnVuIGRlcmJ5bmV0bWF0cyB3aXRoIGpjYyB1c2luZwotRGhvc3ROYW1lIGZsYWc7IGluIHRoYXQgY2FzZSB5b3UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgcnVubmluZwp3aXRoIGEgcG9saWN5CmZpbGUgLSBhdCB0aGUgbW9tZW50LCB0ZXN0cyBydW4gd2l0aCBEZXJieU5ldCBmcmFtZXdvcmsgZG8gbm90IHJ1biB3aXRoClNlY3VyaXR5TWFuYWdlci4gVGVzdHMgaW4KdGhlIGRlcmJ5bmV0KGNsaWVudCltYXRzIHN1aXRlIGhhdmUgYmVlbiBtb2RpZmllZCB0byBydW4gYWdhaW5zdCBhCnJlbW90ZSBzZXJ2ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gPGJyPgo8YnI+CldoZW4gdGhlIHRlc3QgaGFybmVzcyBlbmNvdW50ZXJzIHRoZSAtRGhvc3ROYW1lLCBhbmQgdGhlIHZhbHVlIGlzIG5vdApudWxsIGFuZCBub3QgbG9jYWxob3N0LCBpdCBzd2l0Y2hlcyB0byBzdGFydFNlcnZlcj1mYWxzZS4gQWxzbywgYWdhaW5zdAphIHJlbW90ZSBob3N0LCBvbmx5IHRoZSBwaW5nIG9wZXJhdGlvbnMgb2YgdGhlIE5ldHdvcmtTZXJ2ZXJDb250cm9sIGlzCnN1cHBvcnRlZC4gRmluYWxseSwgYmVjYXVzZSBvbiB0aGUgcmVtb3RlIHNlcnZlciBubyBuZXcgZGlyZWN0b3JpZXMgY2FuCmJlIGNyZWF0ZWQgYnkgdGhlIHRlc3QgaGFybmVzcyBiZWNhdXNlIG9mIHNlY3VyaXR5LCBkYXRhYmFzZXMgd2lsbCBiZQpyZXVzZWQuIFRoaXMKaGFzIGEgbnVtYmVyIG9mIGltcGxpY2F0aW9uczo8YnI+CjxvbD4KICA8bGk+dGhlIHRlc3QgaGFybmVzcywgb3IgaW5kaXZpZHVhbCB0ZXN0cyBjYW5ub3Qgc3RhcnQgYW5kIHN0b3AKTmV0d29yayBTZXJ2ZXIuIDxicj4KICA8L2xpPgogIDxsaT50aGUgdGVzdHMgY2Fubm90IGNoZWNrIGRlcmJ5LmxvZywgbm9yIGRhdGEgZmlsZXMgY3JlYXRlZCBvbiB0aGUKc2VydmVyIGJ5IGltcG9ydC9leHBvcnQgb3IgZGJsb29rIHV0aWxpdGllcy48YnI+CiAgPC9saT4KICA8bGk+YXMgdGhlIGRhdGFiYXNlIGxvY2F0aW9uIGlzIHRoZSBzYW1lIGZvciBlYWNoIHRlc3QsIHRlc3RzCnJ1biB0aGlzIHdheSBuZWVkIHRvIGJlIGRpbGlnZW50CmFib3V0IGNsZWFuaW5nIHVwIGFmdGVyIG9yIHdpbGwgY2F1c2UgZmFpbHVyZXMgaW4gbGF0ZXIgdGVzdHMuIFRoZQouamF2YQp0ZXN0cyBjYW4gdXNlIHRoZSBUZXN0VXRpbC5jbGVhblVwIG1ldGhvZCB0byBkcm9wIGFueSBkYXRhYmFzZSBvYmplY3QKd2l0aG91dCBhbnkgb3V0cHV0IGJlaW5nIHJlZmxlY3RlZC4gVGVzdCB3cml0ZXJzIG5lZWQgdG8gZW5zdXJlIHRoYXQKdGhlIG9iamVjdHMgYXJlIGluIGZhY3QgZ2V0dGluZyBkcm9wcGVkIG9yIHRoZSB0ZXN0IG5lZWRzIHRvIGJlCmV4Y2x1ZGVkIGZyb20gcnVubmluZyByZW1vdGVseS4gVG8gZmFjaWxpdGF0ZSBjbGVhbnVwLCBhIG1ldGhvZCB3YXMKYWRkZWQgdG8gb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy51dGlsLlRlc3RVdGlsLApjbGVhblVwVGVzdChTdGF0ZW1lbnQsIHRlc3RPYmplY3RzW10pLiBUaGlzIG1ldGhvZCBkcm9wcyBhbnl0aGluZwpwYXNzZWQgaW4gdGhlIGFycmF5IG9mIHN0cmluZ3MgYW5kIGRpc3JlZ2FyZHMgYW55IFNRTEV4Y2VwdGlvbnMuIFRoZQpiZW5lZml0IG9mIHRoaXMgaXMgdGhhdCBhIHBvc3NpYmxlIGZhaWx1cmUgb2YgZHJvcCBkb2VzIG5vdCBzdG9wIHRoZQp0ZXN0LCBhbmQgZG9lcyBub3QgcHJldmVudCBvdGhlciBvYmplY3RzIHBhc3NlZCBpbiB0aGUgc3RyaW5nIHRvIGJlCmRyb3BwZWQuIEFuIGV4YW1wbGUgb2YgdXNhZ2Ugb2YgdGhpcyBtZXRob2Q6PGJyPgogICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiIGJvcmRlcj0iMSIKIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgICAgIDx0Ym9keT4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4mbmJzcDsmbmJzcDsmbmJzcDsgc3RhdGljCnZvaWQgdGVhcmRvd24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgU3RhdGVtZW50IHN0bXQgPQpjb25uLmNyZWF0ZVN0YXRlbWVudCgpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFN0cmluZ1tdIHRlc3RPYmplY3RzID0gewoidGFibGUgdDEiLCAidGFibGUgdDIiLCAicHJvY2VkdXJlIHAxIiwgInNjaGVtYSBzIHJlc3RyaWN0In07PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVGVzdFV0aWwuY2xlYW5VcFRlc3Qoc3RtdCwKdGVzdE9iamVjdHMpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbm4uY29tbWl0KCk7PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc3RtdC5jbG9zZSgpOzxicj4KJm5ic3A7ICZuYnNwOyB9Jm5ic3A7IDxicj4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+Ck5vdGUgdGhhdCBpZiBzb21ldGhpbmcgcHJvaGliaXRzIGFuIG9iamVjdCBmcm9tIGJlaW5nIGRyb3BwZWQsIGUuZy4gaWYKdGhlcmUgc3RpbGwgYXJlIGxvY2tzIG9uIGl0LCB0aGlzIHdpbGwgbm90IGJlIG5vdGljZWQgd2l0aCB0aGlzIG1ldGhvZAotIHRoZSB0ZXN0IHdyaXRlciBzaG91bGQgc3RpbGwgdmVyaWZ5IHRoYXQgdGhlIHRlc3Qgb2JqZWN0cyBnZXQgY2xlYW5lZAp1cCBhcHByb3ByaWF0ZWx5Ljxicj4KICA8L2xpPgogIDxsaT50ZXN0cyBjYW5ub3QgdXNlIGEgbWl4IG9mIE5ldHdvcmsgU2VydmVyIGFuZCBsb2NhbCBjb25uZWN0aW9ucyB0bwp0aGUgc2FtZSBkYXRhYmFzZS48L2xpPgogIDxsaT50ZXN0cyBzaG91bGQgbm90IGhhcmRjb2RlIHRoZSBzdHJpbmcgJ2xvY2FsaG9zdCcgb3IgdGhleSBjYW5ub3QKYmUgcnVuIGluIHRoaXMKZmFzaGlvbi4gVGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiB0aGlzIGZhc2hpb24gY2FuIHVzZSB0aGUgcmVzdWx0Cm9mCnRoZSBUZXN0VXRpbC5nZXRIb3N0TmFtZSgpIG1ldGhvZCBpbnN0ZWFkLjwvbGk+CiAgPGxpPlRlc3RzIGNhbiBvbmx5IHVzZSB0aGUgcGluZyBvcHRpb24gb2YgdGhlIE5ldHdvcmtTZXJ2ZXJDb250cm9sCmNsYXNzLjwvbGk+CiAgPGxpPlRlc3RzIGNhbm5vdCBiZSBkZXBlbmRlbnQgb24gdGVzdC0gb3Igc3VpdGUtc3BlY2lmaWMgcG9saWN5IGZpbGVzLjxicj4KICA8L2xpPgo8L29sPgpOZXcgLmV4Y2x1ZGUgZmlsZXMgZm9yIHRoZSBjdXJyZW50IGZyYW1ld29ya3MgKGkuZS4KRGVyYnlOZXRSZW1vdGUuZXhjbHVkZSBhbmQgRGVyYnlOZXRDbGllbnRSZW1vdGUuZXhjbHVkZSkgaGF2ZSBiZWVuCmNyZWF0ZWQgdG8gc2tpcCBzb21lIHRlc3RzIHRoYXQgY2Fubm90IGJlIHJ1biBhZ2FpbnN0IGEgcmVtb3RlIHNlcnZlcgpiZWNhdXNlIG9mIHRob3NlIGltcGxpY2F0aW9ucy4gPGJyPgo8aDM+PGEgbmFtZT0iZW5jb2RpbmciPjwvYT48L2gzPgo8aDM+PGEgbmFtZT0iNC4xNV9FbmNvZGluZ19pc3N1ZXMiPjwvYT40LjE1IEVuY29kaW5nIGlzc3VlczwvaDM+CjxwPlRoZXJlIGFyZSB0aHJlZSBhc3BlY3RzIHRvIGRlYWxpbmcgd2l0aCBlbmNvZGluZyBpc3N1ZXMsIGhvdyB0byBydW4KYSB0ZXN0IHdpdGggc3BlY2lmaWMgZW5jb2RpbmcsIHdoYXQgdG8gZG8gdG8gZW5zdXJlIGEgdGVzdCBjYW4gYmUgcnVuCndpdGhvdXQgcmVseWluZyBvbiBhIGNlcnRhaW4gZW5jb2RpbmcsIGFuZCBob3cgdG8gZ2VuZXJhdGUgdGVzdCBvdXRwdXQKaW4gZml4ZWQgZW5jb2RpbmcuPGJyPgo8L3A+Cjx1bD4KICA8bGk+CiAgICA8aDQ+UnVuIGEgdGVzdCB3aXRoIGEgc3BlY2lmaWMgZW5jb2Rpbmc8L2g0PgogIDwvbGk+CjwvdWw+CjxwIHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPlRvIGZvcmNlIGEgc3BlY2lmaWMgdGVzdCB0byBydW4gd2l0aCBhCnNwZWNpZmljCmVuY29kaW5nIG9uZSBjYW4gdXNlIHRoZSBwcm9wZXJ0eSBkZXJieVRlc3RpbmcuZW5jb2RpbmcuIFRoaXMgaXMKY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdpdGggamRrMTUuIEZvciBpbnN0YW5jZSwKdG8gcnVuIGEgc3BlY2lmaWMgLmphdmEgdGVzdCBvbmUgdGltZSBvbmx5IHdpdGgKLURkZXJieVRlc3RpbmcuZW5jb2Rpbmc6CjwvcD4KPHRhYmxlCiBzdHlsZT0ibWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgdGV4dC1hbGlnbjogbGVmdDsgaGVpZ2h0OiAzMnB4OyB3aWR0aDogNzYwcHg7IgogYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+amF2YQotRGRlcmJ5VGVzdGluZy5lbmNvZGluZz1VVEYtMTYKb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy5oYXJuZXNzLlJ1blRlc3QKamRiY2FwaS9sb2JTdHJlYW1zLmphdmE8c21hbGw+PGJyPgogICAgICA8L3NtYWxsPjwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+CjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsmbmJzcDsmbmJzcDsgVGhlIHRlc3QKZW5jb2RpbmdUZXN0cyBjb250YWlucyB0ZXN0cyB0aGF0IHJ1biB3aXRoIGRlcmJ5VGVzdGluZy5lbmNvZGluZz1VVEYtMTYKaW4gdGhlIGVuY29kaW5nVGVzdHMucHJvcGVydGllcyBmaWxlOjwvcD4KPHRhYmxlIHN0eWxlPSJ3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBsZWZ0OyBtYXJnaW4tbGVmdDogNDBweDsiCiBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5kZXJieVRlc3RpbmcuZW5jb2Rpbmc9VVRGLTE2PC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KPHVsPgogIDxsaT4KICAgIDxoND5lbnN1cmUgcnVubmluZyBvbiBub24tSVNPLTg4NTkgc3lzdGVtcyBpcyBwb3NzaWJsZTwvaDQ+CiAgPC9saT4KPC91bD4KPHAgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0MHB4OyI+U3BlY2lhbCBjYXJlIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSB0aGF0CmluZGl2aWR1YWwgdGVzdHMgY2FuIGJlIHJ1biBzdWNjZXNzZnVsbHkgb24gbm9uLUlTTy04ODU5IHN5c3RlbXMuIFRoaXMKaW5jbHVkZXM6PGJyPgo8L3A+Cjx1bCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDQwcHg7Ij4KICA8bGk+CiAgICA8cD5FbnN1cmUgcmVhZGluZyBvZiBmaWxlcyBpcyBkb25lIGluIGFuIGFwcHJvcHJpYXRlIG1hbm5lci4gVGhlCnRlc3QgaGFybmVzcyB3aWxsIGNvcHkgc3VwcG9ydGZpbGVzIHdpdGggZXh0ZW5zaW9uIC4qc3FsLCAubXVsdGksCi52aWV3LCAudHh0LCAucHJvcGVydGllcywgYW5kIC5wb2xpY3kgaW4gbG9jYWwgZW5jb2RpbmcuIFRoaXMgbWVhbnMsCnRoYXQgYWNjZXNzaW5nIHN1Y2ggYSBmaWxlIHNob3VsZCBiZSBkb25lIHdpdGggYW4gYXBwcm9wcmlhdGUKbWVjaGFuaXNtOyBpLmUuIGZyb20gd2l0aGluIGlqIChpLmUuIGEgLnNxbCB0ZXN0KSB1c2UgJ3J1bicsIGFuZCBmcm9tCndpdGhpbiBhIC5qYXZhIHRlc3QgdXNlIEZpbGVSZWFkZXIuIFRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCBjb3B5IG90aGVyCnN1cHBvcnRmaWxlcyBpbiBmaXhlZCBlbmNvZGluZywgaS5lLiB1c2luZyBVVEYtOC4gVG8gYWNjZXNzIHRoZXNlIGZpbGVzCmFuZCB5b3Ugd2lsbCBoYXZlIHRvIHVzZSBhbiBpbnB1dCBtZWNoYW5pc20gdGhhdCBzdXBwb3J0cyBzcGVjaWZ5aW5nCm9mJm5ic3A7IHRoZSBlbmNvZGluZywgc3VjaCBhcyBGaWxlSW5wdXRTdHJlYW0gYW5kIEJ1ZmZlcmVkUmVhZGVyLgpWYXJpb3VzIC5zcWwgdGVzdHMgdGhhdCBydW4gb3RoZXIgLnNxbCBzY3JpcHRzIHVzZSB0aGUgdGVzdC1zcGVjaWZpYwptZWNoYW5pc21uIGluIGlqIHRvIGFjY2VzcyBmaWxlcyBmcm9tIHRoZSBjbGFzc3BhdGg6ICdydW4gcmVzb3VyY2UnLgpUaGlzIGNvbnN0cnVjdCBhc3N1bWVzIHRoZSBmaWxlcyBsaXN0ZWQgYXJlIGluIHRoZSBjbGFzc3BhdGggLSB0aGUKY2xhc3NlcyBkaXIgb3IgZGVyYnlUZXN0aW5nLmphciAtIGFuZCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIGluIFVURi04LjwvcD4KICA8L2xpPgogIDxsaT4KICAgIDxwPkF2b2lkIHVzYWdlIG9mIG5vbi1lbmNvZGluZyBzYWZlIGNvbnN0cnVjdG9ycyBmb3IgU3RyaW5ncy4gaS5lLgpBdm9pZCBTdHJpbmcoYnl0ZVtdKSBhbmQgU3RyaW5nKGJ5dGVbXSxpbnQsaW50KSB0byBjcmVhdGUgYSBzdHJpbmcuPC9wPgogIDwvbGk+CjwvdWw+CjxwIHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPiA8L3A+Cjx1bD4KICA8bGk+CiAgICA8aDQ+R2VuZXJhdGluZyBtYXN0ZXIgZmlsZXMgb24gbm9uLUlTTy04ODU5IHN5c3RlbXM8L2g0PgogIDwvbGk+CjwvdWw+Cjx1bCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDQwcHg7Ij4KICA8bGk+CiAgICA8cD5TcGVjaWFsIGNhcmUgaXMgcmVxdWlyZWQgd2hlbiBkZXZlbG9waW5nIHRlc3RzIGFuZCBydW5uaW5nIHRoZW0Kb24gbm9uLUlTTy04ODU5IHN5c3RlbXMuIFRoZSBvdXRwdXQgZmlsZXMgY2Fubm90IGJlIGNoZWNrZWQgaW50byBhIHN2bgp0cmVlIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgSVNPLTg4NTkgY29tcGF0aWJsZS4gVG8gYXZvaWQgc3VycHJpc2VzLAp1c2UgdGhlIHByb3BlcnR5IC1EZ2VuZXJhdGVVVEY4T3V0IHdoaWNoIHdpbGwgY3JlYXRlIGEgLnV0ZjhvdXQgZmlsZQp3aGljaCBpcyBhIGNvcHkgb2YgdGhlIHRlc3Qgb3V0cHV0IGNvbnZlcnRlZCBpbnRvIFVURi04LiBCZSBjYXJlZnVsIG5vdAp0byBsZXQgYSBmaWxlIHRyYW5zZmVyIHByb2dyYW0gbW9kaWZ5IHRoaXMgZmlsZSAoZm9yIGluc3RhbmNlLiBmdHAgaW4KYXNjaWkgbW9kZSBtYXkgdHJ5IHRvIGNvbnZlcnQgdGhlIGZpbGUpLjxicj4KICAgIDwvcD4KICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6IDkwJTsgdGV4dC1hbGlnbjogbGVmdDsiIGJvcmRlcj0iMSIKIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMiI+CiAgICAgIDx0Ym9keT4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5qYXZhCi1EZ2VuZXJhdGVVVEY4T3V0PXRydWUKb3JnLmFwYWNoZS5kZXJieVRlc3RpbmcuZnVuY3Rpb25UZXN0cy5oYXJuZXNzLlJ1blRlc3QKbGFuZy9zdXBlcnNpbXBsZS5zcWw8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgogIDwvbGk+CjwvdWw+CjxoMj5Ob3RlczwvaDI+CjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBuYW1lPSJOb3RlMToiPjwvYT48Zm9udCBzaXplPSIyIj48YnI+Ck5vdGUxOjwvZm9udD48L3A+CjxwIHN0eWxlPSJtYXJnaW4tbGVmdDogMC40MmluOyBtYXJnaW4tYm90dG9tOiAwaW47Ij48Zm9udCBzaXplPSIyIj5UaGVyZQppcyBvbmUgbW9yZSBzdWl0ZSBpbmNsdWRlZDogdGhlIGo5ZGVyYnluZXRtYXRzIHN1aXRlIGlzIGEKbW9kaWZpY2F0aW9uIG9mIHRoZSBkZXJieW5ldG1hdHMgc3VpdGUuIEl0IHdhcyBpbnRlbmRlZCB0byB0ZXN0IHRoZQpuZXR3b3JrIHNlcnZlciB3aXRoIHRoZSBqdm0gYXZhaWxhYmxlIHdpdGggSUJNJ3MgV0NUTUUgKFdvcmtwbGFjZQpDbGllbnQgVGVjaG5vbG9neSwgTWljcm8gRWRpdGlvbjsgZm9ybWVybHkgV1NERCkuCkl0cyB1c2UgaGFzIGJlZW4gZGlzY29udGludWVkLgpOb3RlIHRoYXQgdGhlIHNldHVwIGZvciBydW5uaW5nIHRoZSBqOWRlcmJ5bmV0bWF0cyB0ZXN0cyBpcyB2ZXJ5CnNwZWNpZmljIHRvIHRoZSB0ZXN0IGhhcm5lc3MsIG5vdCBldmVuIHVzaW5nIHRoZSBXQ1RNRSBmaWxlcyBpbiB0aGVpcgpub3JtYWwgbG9jYXRpb24uPC9mb250PiA8Zm9udCBzaXplPSIyIj48YnI+ClRoZSBqOWRlcmJ5bmV0bWF0cyBzdWl0ZSBpcwppbmNsdWRlZCB0byBzZXJ2ZSBhcyBhbiBleGFtcGxlIG9mIHNwbGl0dGluZyB0aGUgbmV0d29yayBzZXJ2ZXIKcHJvY2VzcyB0byBydW4gd2l0aCBhIGRpZmZlcmVudCBqdm0gdGhhbiB0aGUgdGVzdCBjbGllbnQuIFRoZQpqOWRlcmJ5bmV0bWF0cyBzdWl0ZSB3aWxsIHJ1biB3aXRoIGFub3RoZXIganZtIGFzIGNsaWVudCAoYXMgZGVmaW5lZAppbiB0aGUgc3VpdGUgcHJvcGVydGllcyksIGJ1dCBzdGFydCB1cCBuZXR3b3JrIHNlcnZlciB3aXRoIHRoZSAnajknCmp2bSBmaWxlcyAodGhlIHJlZmVyZW5jZSB0byAnajknIGlzIGJhc2VkIG9uIHRoZSBleGVjdXRhYmxlLCBqOS5leGUpLApiYXNlZCBvbiB0aGUgcHJvcGVydHkgJ3NlcnZlckp2bScuIFJ1bm5pbmcgdGhpcyBzdWl0ZSByZXF1aXJlcwpwcm92aWRpbmcgdGhlIHByb3BlcnR5Jm5ic3A7IGJvb3RjcCwgd2hpY2ggaXMmbmJzcDsgaW50ZXJwcmV0ZWQgZnJvbQp0aGUgdGVzdCBoYXJuZXNzIGNsYXNzIGo5XzEzLiBTZWUgYWxzbyBzZWN0aW9uIG9uIGFkZGluZyBhIG5ldyA8YQogaHJlZj0iI292OSI+anZtCnNldHVwPC9hPi4gPC9mb250Pgo8L3A+CjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBuYW1lPSJOb3RlMjoiPjwvYT48YnI+Cjxmb250IHNpemU9IjIiPk5vdGUyOjwvZm9udD48L3A+CjxwIHN0eWxlPSJtYXJnaW4tbGVmdDogMC40MmluOyBtYXJnaW4tYm90dG9tOiAwaW47Ij5PPGZvbnQgc2l6ZT0iMiI+Y2Nhc2lvbmFsbHksCmNsZWFudXAgaXMgdW5zdWNjZXNzZnVsLiBUaGlzIGRvZXMgbm90IGNvbnN0aXR1dGUgYSBwcm9ibGVtIGluIGFueQp3YXksIGFzIHRoZSBoYXJuZXNzIGZvciBtb3N0IHN1aXRlcyBzdGFydHMgd2l0aCBhIGNsZWFuIGRhdGFiYXNlLCBhbmQKY2xlYW4gY29waWVzIG9mIGFsbCBmaWxlcy4gSG93ZXZlciwgeW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXMKaW4gdGhlIG91dHB1dDo8L2ZvbnQ+PGJyPgo8Zm9udCBzaXplPSIyIj5XYXJuaW5nOiBDbGVhbnVwIGZhaWxlZCBvbgpiYXNlRGlyOiAvbG9jYWwvbXlydW4xL0RlcmJ5TmV0L3N1cGVyc2ltcGxlLjwvZm9udD48L3A+CjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW47Ij48YSBuYW1lPSJOb3RlMzpfIj48L2E+PGJyPgo8Zm9udCBzaXplPSIyIj5Ob3RlMzoKPC9mb250PjwvcD4KPHAgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjQyaW47IG1hcmdpbi1ib3R0b206IDBpbjsiPjxmb250IHNpemU9IjIiPk5ldFNlcnZlcgphbHNvIGhhcyBhIGNvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gREIyIHZpYSBqY2MgLSB0aGUgSUJNClVuaXZlcnNhbCBEcml2ZXIgLSBhbmQgdmlhIHRoZSBvbGRlciBEQjIgZHJpdmVyLiBCdXQgdGhlcmUgYXJlCmN1cnJlbnRseSBubyB0ZXN0cyB0byBleGVyY2lzZSB0aGVzZSBzZXR0aW5ncy48L2ZvbnQ+PC9wPgo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluOyI+PGJyPgo8L3A+CjwvYm9keT4KPC9odG1sPgo=