PCFkb2N0eXBlIGh0bWwgcHVibGljICItLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvL2VuIj4KPGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CjxtZXRhIG5hbWU9IlRlbXBsYXRlIiBjb250ZW50PSJGOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBPZmZpY2VcT2ZmaWNlXGh0bWwuZG90Ij4KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDMuMCI+Cjx0aXRsZT5SZWFkTWUgZm9yIElDVTwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiNGRkZGRkYiIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODAwMDgwIj4KCjxoMj5SZWFkTWU6IElCTSdzIEludGVybmF0aW9uYWwgQ2xhc3NlcyBGb3IgVW5pY29kZTwvaDI+Cgo8cD5WZXJzaW9uOiAwNy8yMi8xOTk5IDxicj4KPC9wPgoKPGhyPgoKPHA+Q09QWVJJR0hUOiA8YnI+CqkgQ29weXJpZ2h0IFRhbGlnZW50LCBJbmMuLCAxOTk3IDxicj4KqSBDb3B5cmlnaHQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgMTk5NyAtIDE5OTkgPGJyPgpMaWNlbnNlZCBNYXRlcmlhbCAtIFByb2dyYW0tUHJvcGVydHkgb2YgSUJNIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gPGJyPgpVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSByZXN0cmljdGVkIGJ5IEdTQQpBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCBJQk0gQ29ycC4gPGJyPgo8L3A+Cgo8aHI+Cgo8cD48YnI+CiZuYnNwOyAmbmJzcDsgPC9wPgoKPGgzPjx1PkNvbnRlbnRzPC91PjwvaDM+Cgo8dWw+CiAgPGxpPjxhIGhyZWY9IiNpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjV2hhdENvbnRhaW4iPldoYXQgdGhlIEludGVybmF0aW9uYWwgQ2xhc3NlcyBmb3IgVW5pY29kZSBDb250YWluPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNBUEkiPkFQSSBvdmVydmlldzwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjUGxhdGZvcm1EZXBlbmRlbmNpZXMiPlBsYXRmb3JtIERlcGVuZGVuY2llczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjSW1wb3J0YW50Tm90ZXMiPkltcG9ydGFudCBOb3RlcyByZWdhcmRpbmcgV2luMzI8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI0hvd1RvSW5zdGFsbCI+SG93IHRvIEluc3RhbGwvQnVpbGQ8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI2FkZGxvY2FsZWRhdGFmaWxlIj5Ib3cgdG8gYWRkIGEgbG9jYWxlIGRhdGEgZmlsZTwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjYWRkcmJkYXRhdG9hcHAiPkhvdyB0byBhZGQgcmVzb3VyY2UgYnVuZGxlIGRhdGEgdG8geW91ciBhcHBsaWNhdGlvbjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjV2hlcmVDb2xsYXRpb24iPldoZXJlIENvbGxhdGlvbiBEYXRhIGlzIFN0b3JlZDwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjQ2hhcnNldENvbnZlcnQiPkNoYXJhY3RlciBTZXQgQ29udmVyc2lvbiBJbmZvcm1hdGlvbjwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjUHJvZ3JhbW1pbmdOb3RlcyI+UHJvZ3JhbW1pbmcgTm90ZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1doZXJlVG9GaW5kTW9yZSI+V2hlcmUgdG8gRmluZCBNb3JlIEluZm9ybWF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNTdWJtaXR0aW5nQ29tbWVudHMiPlN1Ym1pdHRpbmcgQ29tbWVudHMsIFJlcXVlc3RpbmcgRmVhdHVyZXMgYW5kIFJlcG9ydGluZwogICAgQnVnczwvYT48L2xpPgo8L3VsPgoKPGgzPjxhIE5BTUU9ImludHJvZHVjdGlvbiI+PC9hPjx1PkludHJvZHVjdGlvbjwvdT48L2gzPgoKPHA+VG9kYXkncyBzb2Z0d2FyZSBtYXJrZXQgaXMgYSBnbG9iYWwgb25lIGluIHdoaWNoIGl0IGlzIGRlc2lyYWJsZSB0byBkZXZlbG9wIGFuZAptYWludGFpbiBvbmUgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyBhIHdpZGUgdmFyaWV0eSBvZiBuYXRpb25hbCBsYW5ndWFnZXMuIElCTSdzCkludGVybmF0aW9uYWwgQ2xhc3NlcyBmb3IgVW5pY29kZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIHRvb2xzIHRvIGhlbHAgeW91IHdyaXRlIGxhbmd1YWdlCmluZGVwZW5kZW50IGFwcGxpY2F0aW9uczogCgo8dWw+CiAgPGxpPlVuaWNvZGVTdHJpbmcgc3VwcG9ydGluZyB0aGUgVW5pY29kZSAzLjAgc3RhbmRhcmQ8L2xpPgogIDxsaT5SZXNvdXJjZSBidW5kbGVzIGZvciBzdG9yaW5nIGFuZCBhY2Nlc3NpbmcgbG9jYWxpemVkIGluZm9ybWF0aW9uPC9saT4KICA8bGk+TnVtYmVyIGZvcm1hdHRlcnMgZm9yIGNvbnZlcnRpbmcgYmluYXJ5IG51bWJlcnMgaW50byB0ZXh0IHN0cmluZ3MgZm9yIG1lYW5pbmdmdWwgZGlzcGxheTwvbGk+CiAgPGxpPkRhdGUgYW5kIHRpbWUgZm9ybWF0dGVycyBmb3IgY29udmVydGluZyBpbnRlcm5hbCB0aW1lIGRhdGEgaW50byB0ZXh0IHN0cmluZ3MgZm9yCiAgICBtZWFuaW5nZnVsIGRpc3BsYXk8L2xpPgogIDxsaT5NZXNzYWdlIGZvcm1hdHRlcnMgZm9yIHB1dHRpbmcgdG9nZXRoZXIgc2VxdWVuY2VzIG9mIHN0cmluZ3MsIG51bWJlcnMgZGF0ZXMgYW5kIG90aGVyCiAgICBmb3JtYXQgdG8gY3JlYXRlIG1lc3NhZ2VzPC9saT4KICA8bGk+VGV4dCBjb2xsYXRpb24gc3VwcG9ydGluZyBsYW5ndWFnZSBzZW5zaXRpdmUgY29tcGFyaXNvbiBvZiBzdHJpbmdzPC9saT4KICA8bGk+VGV4dCBib3VuZGFyeSBhbmFseXNpcyBmb3IgZmluZGluZyBjaGFyYWN0ZXJzLCB3b3JkIGFuZCBzZW50ZW5jZSBib3VuZGFyaWVzPC9saT4KICA8bGk+Q2hhbmdpbmcgc2ltcGxlIGRhdGEgZmlsZXMgcmF0aGVyIHRoYW4gbW9kaWZ5aW5nIHByb2dyYW0gY29kZSBlYXNpbHkgbG9jYWxpemVzCiAgICBhcHBsaWNhdGlvbnMgd3JpdHRlbiB1c2luZyB0aGVzZSB0b29sczwvbGk+CiAgPGxpPk92ZXIgMTUwIGxvY2FsZXMgc3VwcG9ydGVkLiBWaXNpdCA8YQogICAgaHJlZj0iaHR0cDovL3d3dzEwLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9pY3UvbG9jYWxlZXhwbG9yZXIiPkxvY2FsZUV4cGxvcmVyPC9hPgogICAgc2l0ZSBmb3IgYSBkZW1vbnN0cmF0aW9uIGFuZCBhIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgbG9jYWxlczwvbGk+CjwvdWw+Cgo8cD5JdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0IGFkZGl0aW9uYWwgbG9jYWxlcyBieSBhZGRpbmcgbW9yZSBsb2NhbGUgZGF0YSBmaWxlcywgd2l0aCBubwpjb2RlIGNoYW5nZXMuIDwvcD4KCjxwPlBsZWFzZSByZWZlciB0byBQT1NJWCBwcm9ncmFtbWVyJ3MgR3VpZGUgZm9yIGRldGFpbHMgb24gd2hhdCB0aGUgSVNPIGxvY2FsZSBJRCBtZWFucy4gPC9wPgoKPHA+WW91ciBjb21tZW50cyBhcmUgaW1wb3J0YW50IHRvIG1ha2luZyB0aGlzIHJlbGVhc2Ugc3VjY2Vzc2Z1bC4mbmJzcDsgV2UgYXJlIGNvbW1pdHRlZAp0byBmaXhpbmcgYW55IGJ1Z3MsIGFuZCB3aWxsIGFsc28gdXNlIHlvdXIgZmVlZGJhY2sgdG8gaGVscCBwbGFuIGZ1dHVyZSByZWxlYXNlcy4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPGI+PHU+PHA+SU1QT1JUQU5UPC91PjogUGxlYXNlIG1ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCB0aGUgPGEgaHJlZj0ibGljZW5zZS5odG1sIj5Db3B5cmlnaHQKICBhbmQgTGljZW5zZSBpbmZvcm1hdGlvbjwvYT4uPC9iPjwvcD4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CiAgPHA+Jm5ic3A7PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8aDM+PGEgTkFNRT0iV2hhdENvbnRhaW4iPjwvYT48dT5XaGF0IHRoZSBJbnRlcm5hdGlvbmFsIENsYXNzZXMgRm9yIFVuaWNvZGUgQ29udGFpbjwvdT48L2gzPgoKPHA+QWxsIGZpbGVzIGFyZSBjb250YWluZWQgaW4gPGI+aWN1LVhYWFhYWC56aXAuPC9iPiA8YnI+ClBsZWFzZSB1bnppcCB0aGlzIGZpbGUuJm5ic3A7IEl0IHdpbGwgcmUtY29uc3RydWN0IHRoZSBzb3VyY2UgZGlyZWN0b3J5LiBQbGVhc2UgYmUgc3VyZSB0bwpkbyAmcXVvdDs8c3Ryb25nPnVuemlwIC1hIGljdS1YWFhYWFguemlwIC1kIGRyaXZlOlxkaXJlY3Rvcnk8L3N0cm9uZz4mcXVvdDsgb3IgdXNlIFdpblppcApvbiBXaW4zMiBwbGF0Zm9ybXMuICZuYnNwOyBUaGlzIHdpbGwgY29udmVydCB0aGUgbGluZSBmZWVkL2NhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXJzCmNvcnJlY3RseSBvbiB3aW5kb3dzLiAmbmJzcDsgPC9wPgoKPHA+QmVsb3csIDxiPiRSb290PC9iPiBpcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBpY3UgZGlyZWN0b3J5IGluIHlvdXIgZmlsZSBzeXN0ZW0sIGxpa2UKJnF1b3Q7ZHJpdmU6XC4uLlxpY3UmcXVvdDsgaW4geW91ciBlbnZpcm9ubWVudC4gJnF1b3Q7ZHJpdmU6XC4uLiZxdW90OyBzdGFuZHMgZm9yIGFueQpkcml2ZSBhbmQgYW55IGRpcmVjdG9yeSBvbiB0aGF0IGRyaXZlIHRoYXQgeW91IGNob3NlIHRvIGluc3RhbGwgaWN1IGludG8uPC9wPgoKPHA+PGI+VGhlIGZvbGxvd2luZyBmaWxlcyBkZXNjcmliZSB0aGUgY29kZSBkcm9wOjwvYj4gPGJyPgombmJzcDsgPGJyPgombmJzcDsgPC9wPgoKPHRhYmxlIEJPUkRFUj0iMSI+CiAgPHRyPgogICAgPHRkPnJlYWRtZS5odG1sICh0aGlzIGZpbGUpPC90ZD4KICAgIDx0ZD5kZXNjcmliZXMgdGhlIElCTSdzIEludGVybmF0aW9uYWwgQ2xhc3NlcyBmb3IgVW5pY29kZTwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+bGljZW5zZS5odG1sPC90ZD4KICAgIDx0ZD5jb250YWlucyBJQk0ncyBwdWJsaWMgbGljZW5zZTwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxwPjxiPlRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgY29udGFpbiBzb3VyY2UgY29kZSBhbmQgZGF0YSBmaWxlczo8L2I+IDxicj4KJm5ic3A7IDxicj4KJm5ic3A7IDwvcD4KCjx0YWJsZSBCT1JERVI9IjEiIFdJRFRIPSI2MjMiPgogIDx0cj4KICAgIDx0ZCBXSURUSD0iMjAlIj4kUm9vdFxzb3VyY2VcY29tbW9uXDwvdGQ+CiAgICA8dGQgV0lEVEg9IjgwJSI+VGhlIHV0aWxpdHkgY2xhc3Nlcywgc3VjaCBhcyBSZXNvdXJjZUJ1bmRsZSwgVW5pY29kZSwgTG9jYWxlLAogICAgVW5pY29kZVN0cmluZy4gVGhlIGNvZGVwYWdlIGNvbnZlcnNpb24gbGlicmFyeSBBUEksIFVuaWNvZGVDb252ZXJ0ZXIuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBXSURUSD0iMjAlIj4kUm9vdFxzb3VyY2VcaTE4blw8L3RkPgogICAgPHRkIFdJRFRIPSI4MCUiPlRoZSBjb2xsYXRpb24gc291cmNlIGZpbGVzLCBDb2xsYXRvciwgUnVsZUJhc2VkQ29sbGF0b3IgYW5kCiAgICBDb2xsYXRpb25LZXkuJm5ic3A7IDxicj4KICAgIFRoZSB0ZXh0IGJvdW5kYXJ5IEFQSSwgd2hpY2ggbG9jYXRlcyBjaGFyYWN0ZXIsIHdvcmQsIHNlbnRlbmNlLCBhbmQmbmJzcDsgPGJyPgogICAgbGluZSBicmVha3MuJm5ic3A7IDxicj4KICAgIFRoZSBmb3JtYXQgQVBJLCB3aGljaCBmb3JtYXRzIGFuZCBwYXJzZXMgZGF0YSBpbiBudW1lcmljIG9yIGRhdGUgZm9ybWF0IHRvIGFuZCBmcm9tIHRleHQuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBXSURUSD0iMjAlIj4kUm9vdFxzb3VyY2VcdGVzdFxpbnRsdGVzdFw8L3RkPgogICAgPHRkIFdJRFRIPSI4MCUiPkEgdGVzdCBzdWl0ZSBpbmNsdWRpbmcgYWxsIEMrKyBBUElzLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyB0aGUKICAgIHRlc3Qgc3VpdGUsIHNlZSA8YSBocmVmPSJkb2NzL2ludGx0ZXN0Lmh0bWwiPmRvY3NcaW50bHRlc3QuaHRtbDwvYT4uPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBXSURUSD0iMjAlIj4kUm9vdFxzb3VyY2VcdGVzdFxjaW50bHRzdFw8L3RkPgogICAgPHRkIFdJRFRIPSI4MCUiPkEgdGVzdCBzdWl0ZSBpbmNsdWRpbmcgYWxsIEMgQVBJcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgdGhlIHRlc3QKICAgIHN1aXRlLCBzZWUmbmJzcDsgPGEgaHJlZj0iZG9jcy9jaW50bHRzdC5odG1sIj5kb2NzXGNpbnRsdHN0Lmh0bWwuPC9hPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgV0lEVEg9IjIwJSI+JFJvb3RcZGF0YVw8L3RkPgogICAgPHRkIFdJRFRIPSI4MCUiPlRoZSBVbmljb2RlIDMuMCBkYXRhIGZpbGUuJm5ic3A7IFBsZWFzZSBzZWUgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvIj5odHRwOi8vd3d3LnVuaWNvZGUub3JnLzwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uJm5ic3A7IDxicj4KICAgIFRoaXMgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgdGhlIHJlc291cmNlIGZpbGVzIGZvciBhbGwgaW50ZXJuYXRpb25hbCBvYmplY3RzLiZuYnNwOyBUaGVzZQogICAgZmlsZXMgYXJlIG9mIHRocmVlIHR5cGVzOiZuYnNwOyA8dWw+CiAgICAgIDxsaT5UWFQgZmlsZXMgY29udGFpbiBnZW5lcmFsIGxvY2FsZSBkYXRhLiZuYnNwOzwvbGk+CiAgICAgIDxsaT5SRVMgZmlsZXMgY29udGFpbiBub24tcG9ydGFibGUgbG9jYWxlIGRhdGEgZmlsZXMgd2hpY2ggYXJlIGdlbmVyYXRlZCBieSB0aGUgPHN0cm9uZz5nZW5yYjwvc3Ryb25nPgogICAgICAgIHRvb2wuPC9saT4KICAgICAgPGxpPkNPTCBmaWxlcyBhcmUgbm9uLXBvcnRhYmxlIHBhY2tlZCBiaW5hcnkgY29sbGF0aW9uIGRhdGEgZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgYnkgdGhlIDxzdHJvbmc+Z2VuY29sPC9zdHJvbmc+CiAgICAgICAgdG9vbC4mbmJzcDs8L2xpPgogICAgICA8bGk+VUNNIGZpbGVzIHdoaWNoIGNvbnRhaW4gbWFwcGluZyB0YWJsZXMge2Zyb20sdG99IFVuaWNvZGUgaW4gdGV4dCBmb3JtYXQ8L2xpPgogICAgICA8bGk+Q05WIGZpbGVzIGFyZSBub24tcG9ydGFibGUgcGFja2VkIGJpbmFyeSBjb252ZXJzaW9uIGRhdGEgZ2VuZXJhdGVkIGJ5IHRoZSA8c3Ryb25nPm1ha2Vjb252PC9zdHJvbmc+CiAgICAgICAgdG9vbC48L2xpPgogICAgPC91bD4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgV0lEVEg9IjIwJSI+JFJvb3Rcc291cmNlXHRvb2xzXGdlbnJiPC90ZD4KICAgIDx0ZCBXSURUSD0iODAlIj5UaGlzIHRvb2wgY29udmVydHMgdGhlIHBvcnRhYmxlIGxvY2FsZSBkYXRhIGZpbGVzIGluIHRleHQgZm9ybWF0IHRvCiAgICBtYWNoaW5lLXNwZWNpZmljIGJpbmFyeSBmb3JtYXQgZm9yIHJlc291cmNlIGJ1bmRsZSBwZXJmb3JtYW5jZSBlZmZpY2llbmN5LjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgV0lEVEg9IjIwJSI+JFJvb3Rcc291cmNlXHRvb2xzXGdlbmNvbDwvdGQ+CiAgICA8dGQgV0lEVEg9IjgwJSI+VGhpcyB0b29sIGNvbnZlcnRzIHRoZSBjb2xsYXRpb24gcnVsZXMgaW4gdGhlIHBvcnRhYmxlIGxvY2FsZSBkYXRhIGZpbGVzCiAgICBpbiB0ZXh0IGZvcm1hdCB0byBtYWNoaW5lLXNwZWNpZmljIGJpbmFyeSBjb2xsYXRpb24gZGF0YS48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIFdJRFRIPSIyMCUiPiRSb290XHNvdXJjZVx0b29sc1xtYWtlY29udjwvdGQ+CiAgICA8dGQgV0lEVEg9IjgwJSI+VGhpcyB0b29sIGNvbnZlcnRzIHRoZSBuYXRpdmUgZW5jb2RpbmcgdG8vZnJvbSBVQ1MtMiBtYXBwaW5nIHRhYmxlIGluIHRleHQKICAgIGZvcm1hdCB0byBtYWNoaW5lLXNwZWNpZmljIGJpbmFyeSBmb3JtYXQuPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPHA+Jm5ic3A7PGI+VGhlIGZvbGxvd2luZyBkaXJlY3RvcmllcyBhcmUgcG9wdWxhdGVkIHdoZW4geW91J3ZlIGJ1aWx0IHRoZSBmcmFtZXdvcms6PC9iPiA8YnI+CiZuYnNwOyAob24gVW5peCwgcmVwbGFjZSAkUm9vdCB3aXRoIHRoZSB2YWx1ZSBnaXZlbiB0byB0aGUgZmlsZSAmcXVvdDtjb25maWd1cmUmcXVvdDspIDxicj4KJm5ic3A7IDwvcD4KCjx0YWJsZSBCT1JERVI9IjEiPgogIDx0cj4KICAgIDx0ZD4kUm9vdFxpbmNsdWRlXDwvdGQ+CiAgICA8dGQ+Y29udGFpbnMgYWxsIHRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+JG91dHB1dDwvdGQ+CiAgICA8dGQ+Y29udGFpbnMgdGhlIGxpYnJhcmllcyBmb3Igc3RhdGljL2R5bmFtaWMgbGlua2luZyBvciBleGVjdXRhYmxlIHByb2dyYW1zLjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxwPjxiPlRoZSBmb2xsb3dpbmcgZGlhZ3JhbSBzaG93cyB0aGUgbWFpbiBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSBJQk0ncyBJbnRlcm5hdGlvbmFsCkNsYXNzZXMgZm9yIFVuaWNvZGU6PC9iPiA8L3A+Cgo8cHJlPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpY3UtTk5OTgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtvdXRwdXQmbmJzcDsmbmJzcDsgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAgICBpY3UKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IF9fX19ffF9fX19fICAgICAgIF9fX19fX19fX19fX19ffF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwombmJzcDsmbmJzcDsmbmJzcDsgfCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgICB8Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICB8ICZuYnNwOyAgICZuYnNwOyB8Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHwmbmJzcDsgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCAgICAgICAgICB8CiBsaWJyYXJpZXMgICBwcm9ncmFtcyAmbmJzcDtpbmNsdWRlJm5ic3A7ZGF0YSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzb3VyY2UmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCAgICAgICAgICB8CiAoYnVpbHQpICAgIChidWlsdCkgICAoYnVpbHQpJm5ic3A7ICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3JlYWRtZS5odG1sIGxpY2Vuc2UuaHRtbAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB8ICAgICAgICAgICAgICAgICAgICAgICAgIAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX3xfX19fX19fX19fX19fX19fX19fX19fX19fXwombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHwmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCAgICAgICAgIHwgICAgICAgIHwKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICAgICAgICAgICAgICAgICAgIGNvbW1vbiAgaTE4biZuYnNwOyZuYnNwOyAgICB0ZXN0ICAgICBleHRyYSAgICAgdG9vbHMgICBzYW1wbGVzCiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAgJm5ic3A7ICZuYnNwOyAgfCAgICAgICAgICAgICAgICAgfCAgIAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBfX198X19fJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICBfX198X19fX19fX19fX19fX19fX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICB8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGx0ZXN0IGNpbnRsdHN0IG1ha2Vjb252IGN0ZXN0ZncgZ2VucmIgIC4uLi48L3ByZT4KCjxoMz48YSBOQU1FPSJBUEkiPjwvYT48dT5BUEkgT3ZlcnZpZXc8L3U+PC9oMz4KCjxwPkluIHRoZSBJbnRlcm5hdGlvbmFsIENsYXNzZXMgZm9yIFVuaWNvZGUsIHRoZXJlIGFyZSB0d28gY2F0ZWdvcmllczogCgo8dWw+CiAgPGxpPkxvdy1sZXZlbCBVbmljb2RlL1Jlc291cmNlIEF0dHJpYnV0ZXM6ICg8c3Ryb25nPmljdXVjPC9zdHJvbmc+IGxpYnJhcnkpPHVsPgogICAgICA8bGk+PGEgaHJlZj0iZG9jcy91dGlsQ0wuaHRtbCI+VXRpbGl0eSBDbGFzc2VzPC9hPjwvbGk+CiAgICAgIDxsaT5Db252ZXJzaW9uIEludGVyZmFjZTwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPkhpZ2gtbGV2ZWwgVW5pY29kZSBJbnRlcm5hdGlvbmFsaXphdGlvbjogKDxzdHJvbmc+aWN1aTE4bjwvc3Ryb25nPiBsaWJyYXJ5KTx1bD4KICAgICAgPGxpPjxhIGhyZWY9ImRvY3MvYm91bmRDTC5odG1sIj5UZXh0IEJvdW5kYXJ5IENsYXNzZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRvY3MvY29sbGF0ZUNMLmh0bWwiPkNvbGxhdGlvbiBDbGFzc2VzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkb2NzL2Zvcm1hdENMLmh0bWwiPkZvcm1hdHRpbmcgQ2xhc3NlczwvYT48L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgoKPHA+U2VlIElCTSdzPGEgaHJlZj0iZG9jcy9jb2RlQ29udi5odG1sIj4gSW50ZXJuYXRpb25hbCBDbGFzc2VzIGZvciBVbmljb2RlIENvZGUKQ29udmVudGlvbnM8L2E+IGZvciBhIGRpc2N1c3Npb24gb2YgY29kZSBjb252ZW50aW9ucyBjb21tb24gdG8gYWxsIGxpYnJhcnkgY2xhc3Nlcy4gPC9wPgoKPHA+U2VlIGFsc28gPGEgaHJlZj0iaHRtbC9haW5kZXguaHRtbCI+aHRtbC9haW5kZXguaHRtbDwvYT4gZm9yIGFuIGFscGhhYmV0aWNhbCBpbmRleCwgYW5kCjxhIGhyZWY9Imh0bWwvSElFUmphdmEuaHRtbCI+aHRtbC9ISUVSamF2YS5odG1sPC9hPiBmb3IgYSBoaWVyYXJjaGljYWwgaW5kZXggdG8gZGV0YWlsZWQKQVBJIGRvY3VtZW50YXRpb24uIDxicj4KJm5ic3A7IDxicj4KJm5ic3A7IDwvcD4KCjxoMz48YSBOQU1FPSJQbGF0Zm9ybURlcGVuZGVuY2llcyI+PC9hPjx1PlBsYXRmb3JtIERlcGVuZGVuY2llczwvdT48L2gzPgoKPHA+VGhlIHBsYXRmb3JtIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaXNvbGF0ZWQgaW50byB0aGUgZm9sbG93aW5nIDQgZmlsZXM6IAoKPHVsPgogIDxsaT48dT5wbGF0Zm9ybS5oLmluOjwvdT4gUGxhdGZvcm0tZGVwZW5kZW50IHR5cGVkZWZzIGFuZCBkZWZpbmVzOjwvbGk+CjwvdWw+Cgo8YmxvY2txdW90ZT4KICA8dWw+CiAgICA8bGk+WFBfQ1BMVVNQTFVTIGlzIGRlZmluZWQgZm9yIEMrKzwvbGk+CiAgICA8bGk+Ym9vbF90LCBUUlVFIGFuZCBGQUxTRSwgaW50OF90LCBpbnQxNl90IGV0Yy48L2xpPgogICAgPGxpPlVfRVhQT1JUIGFuZCBVX0lNUE9SVCBmb3Igc3BlY2lmeWluZyBkeW5hbWljIGxpYnJhcnkgaW1wb3J0IGFuZCBleHBvcnQ8L2xpPgogIDwvdWw+CjwvYmxvY2txdW90ZT4KCjx1bD4KICA8bGk+PHU+cHV0aWwuYzo8L3U+IHBsYXRmb3JtLWRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBhcmUKICAgIHBsYXRmb3JtIGRlcGVuZGVudDogKGRlY2xhcmVkIGluIHB1dGlsLmgpPC9saT4KPC91bD4KCjxibG9ja3F1b3RlPgogIDx1bD4KICAgIDxsaT5pY3VfaXNOYU4sIGljdV9pc0luZmluaXRlKGRvdWJsZSksIGljdV9nZXROYU4oKTsgaWN1X2dldEluZmluaXR5IGZvciBoYW5kbGluZyBzcGVjaWFsCiAgICAgIGZsb2F0aW5nIHBvaW50IHZhbHVlczwvbGk+CiAgICA8bGk+aWN1X3R6c2V0LCBpY3VfdGltZXpvbmUsIGljdV90em5hbWUgYW5kIHRpbWUgZm9yIHJlYWRpbmcgcGxhdGZvcm0gc3BlY2lmaWMgdGltZSBhbmQKICAgICAgdGltZXpvbmUgaW5mb3JtYXRpb248L2xpPgogICAgPGxpPmljdV9nZXREZWZhdWx0RGF0YURpcmVjdG9yeSwgaWN1X2dldERlZmF1bHRMb2NhbGVJRCBmb3IgcmVhZGluZyB0aGUgbG9jYWxlIHNldHRpbmcgYW5kCiAgICAgIGRhdGEgZGlyZWN0b3J5PC9saT4KICAgIDxsaT5pY3VfaXNCaWdFbmRpYW4gZm9yIGZpbmRpbmcgdGhlIGVuZGlhbmVzcyBvZiB0aGUgcGxhdGZvcm08L2xpPgogICAgPGxpPmljdV9uZXh0RG91YmxlIGlzIHVzZWQgc3BlY2lmaWNhbGx5IGJ5IHRoZSBDaG9pY2VGb3JtYXQgQVBJLjwvbGk+CiAgPC91bD4KPC9ibG9ja3F1b3RlPgoKPHVsPgogIDxsaT48dT5tdXRleC5oIGFuZCBtdXRleC5jcHA8L3U+OiBDb2RlIGZvciBkb2luZyBzeW5jaHJvbml6YXRpb24gaW4gbXVsdGl0aHJlYWRlZAogICAgYXBwbGljYXRpb25zLiBJZiB5b3Ugd2lzaCB0byB1c2UgSUJNJ3MgSW50ZXJuYXRpb25hbCBDbGFzc2VzIGZvciBVbmljb2RlIGluIGEKICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24sIHlvdSBtdXN0IHByb3ZpZGUgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHRoYXQgdGhlIGNsYXNzZXMKICAgIGNhbiB1c2UgdG8gcHJvdGVjdCB0aGVpciBnbG9iYWwgZGF0YSBhZ2FpbnN0IHNpbXVsdGFuZW91cyBtb2RpZmljYXRpb25zLiBTZWUgPGEKICAgIGhyZWY9ImRvY3MvbXV0ZXguaHRtbCI+ZG9jc1xtdXRleC5odG1sPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L2xpPgogIDx1bD4KICAgIDxsaT5XZSBzdXBwbHkgc2FtcGxlIGltcGxlbWVudGF0aW9ucyBmb3IgV2luTlQsIFdpbjk1LCBTdW4sIExpbnV4IGFuZCBmb3IgQUlYIG9uIGFuIFJTLzYwMDAuPC9saT4KICAgIDxsaT5JZiB5b3UgYXJlIGNoYW5naW5nIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgZmlsZXMsIHB0eXBlcy5oIGFuZCBwdXRpbC5oIG1heSBhbHNvIGJlCiAgICAgIGludGVyZXN0aW5nLCBidXQgc2hvdWxkbid0IGhhdmUgdG8gYmUgY2hhbmdlZC4gSWYgeW91IHRoaW5rIGFueSBvdGhlciBmaWxlcyB0aGFuIHRoZSBvbmVzCiAgICAgIG1lbnRpb25lZCBhYm92ZSBoYXZlIHBsYXRmb3JtIGRlcGVuZGVuY2llcywgcGxlYXNlIGNvbnRhY3QgdXMuPC9saT4KICAgIDxsaT5Gb3IgdGhlIEludGx0ZXN0IHRlc3Qgc3VpdGUsIGludGx0ZXN0LmNwcCBpbiAmcXVvdDtpY3Vcc291cmNlXHRlc3RcaW50bHRlc3RcJnF1b3Q7CiAgICAgIGNvbnRhaW5zIHRoZSBtZXRob2QgcGF0aG5hbWVJbkNvbnRleHQsIHdoaWNoIG11c3QgYWxzbyBiZSBhZGFwdGVkIHRvIGFueSBuZXcgcGxhdGZvcm0uPC9saT4KICA8L3VsPgo8L3VsPgoKPGgzPjxhIE5BTUU9IkltcG9ydGFudE5vdGVzIj48L2E+PGI+PHU+SW1wb3J0YW50IE5vdGVzIFJlZ2FyZGluZyBXaW4zMjwvdT48L2I+PC9oMz4KCjxwPklmIHlvdSBhcmUgYnVpbGRpbmcgb24gdGhlIFdpbjMyIHBsYXRmb3JtLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgdW5kZXJzdGFuZCBhIGZldwpidWlsZCBkZXRhaWxzOiA8L3A+Cgo8cD48dT5ETEwgZGlyZWN0b3JpZXMgYW5kIHRoZSBQQVRIIHNldHRpbmc6PC91PiBBcyBkZWxpdmVyZWQsIHRoZSBJQk0ncyBJbnRlcm5hdGlvbmFsCkNsYXNzZXMgZm9yIFVuaWNvZGUgYnVpbGQgYXMgc2V2ZXJhbCBETExzLiBUaGVzZSBETExzIGFyZSBwbGFjZWQgaW4gdGhlIGRpcmVjdG9yaWVzCiZxdW90O2ljdVxiaW5cRGVidWcmcXVvdDsgYW5kICZxdW90O2ljdVxiaW5cUmVsZWFzZSZxdW90Oy4mbmJzcDsgWW91IG11c3QgYWRkIGVpdGhlciBvZgp0aGVzZSBkaXJlY3RvcmllcyB0byB0aGUgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiB5b3VyIHN5c3RlbSwgb3IgYW55IGV4ZWN1dGFibGVzIHlvdQpidWlsZCB3aWxsIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBJQk0ncyBJbnRlcm5hdGlvbmFsIENsYXNzZXMgZm9yIFVuaWNvZGUgbGlicmFyaWVzLgpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNvcHkgdGhlIERMTCBmaWxlcyBpbnRvIGEgZGlyZWN0b3J5IGFscmVhZHkgaW4geW91ciBQQVRILCBidXQgd2UgZG8Kbm90IHJlY29tbWVuZCB0aGlzIC0tIHlvdSBjYW4gd2luZCB1cCB3aXRoIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgRExMLCBhbmQgd2luZCB1cCB1c2luZwp0aGUgd3Jvbmcgb25lLiA8L3A+Cgo8cD48dT5UbyBjaGFuZ2UgeW91ciBQQVRIOjwvdT4mbmJzcDsgRG8gdGhpcyB1bmRlciBOVCBieSB1c2luZyB0aGUgU3lzdGVtIGNvbnRyb2wgcGFuZWwuClBpY2sgdGhlICZxdW90O0Vudmlyb25tZW50JnF1b3Q7IHRhYiwgc2VsZWN0IHRoZSB2YXJpYWJsZSBQQVRIIGluIHRoZSBsb3dlciBib3guJm5ic3A7IEluCnRoZSAmcXVvdDt2YWx1ZSZxdW90OyBib3gsIGFwcGVuZCB0aGUgc3RyaW5nICZxdW90Oztkcml2ZTpcLi4uXGljdVxiaW5cRGVidWcmcXVvdDsgYXQgdGhlCmVuZCBvZiB0aGUgcGF0aCBzdHJpbmcuJm5ic3A7IElmIHRoZXJlIGlzIG5vdGhpbmcgdGhlcmUsIGp1c3QgdHlwZSBpbgomcXVvdDtkcml2ZTpcLi4uXGljdVxiaW5cRGVidWcmcXVvdDsuIENsaWNrIHRoZSBTZXQgYnV0dG9uLCB0aGVuIHRoZSBPayBidXR0b24uIDwvcD4KCjxwPjx1Pkxpbmsgd2l0aCBSdW50aW1lIGxpYnJhcmllczo8L3U+IEFsbCB0aGUgRExMcyBsaW5rIHdpdGggdGhlIEMgcnVudGltZSBsaWJyYXJ5CiZxdW90O0RlYnVnIE11bHRpdGhyZWFkZWQgRExMJnF1b3Q7IG9yICZxdW90O011bHRpdGhyZWFkZWQgRExMLiZxdW90OyAoVGhpcyBpcyBjaGFuZ2VkCnRocm91Z2ggdGhlIFByb2plY3QgU2V0dGluZ3MgZGlhbG9nLCBvbiB0aGUgQy9DKysgdGFiLCB1bmRlciBDb2RlIEdlbmVyYXRpb24uKSBJdCBpcwppbXBvcnRhbnQgdGhhdCBhbnkgZXhlY3V0YWJsZSBvciBvdGhlciBETEwgeW91IGJ1aWxkIHdoaWNoIHVzZXMgdGhlIElCTSdzIEludGVybmF0aW9uYWwKQ2xhc3NlcyBmb3IgVW5pY29kZSBETExzIGxpbmtzIHdpdGggdGhlc2UgcnVudGltZSBsaWJyYXJpZXMgYXMgd2VsbC4gSWYgeW91IGRvIG5vdCBkbwp0aGlzLCB5b3Ugd2lsbCBzZWVtaW5nbHkgZ2V0IG1lbW9yeSBlcnJvcnMgd2hlbiB5b3UgcnVuIHRoZSBleGVjdXRhYmxlLiA8YnI+CiZuYnNwOyA8YnI+CiZuYnNwOyA8L3A+Cgo8aDM+PGEgTkFNRT0iSG93VG9JbnN0YWxsIj48L2E+PHU+SG93IHRvIEluc3RhbGwvQnVpbGQgb24gV2luIE5UPC91PjwvaDM+Cgo8cD5CdWlsZGluZyBJQk0ncyBJbnRlcm5hdGlvbmFsIENsYXNzZXMgZm9yIFVuaWNvZGUgcmVxdWlyZXM6IAoKPHVsPgogIDxsaT5NaWNyb3NvZnQgTlQgMy41MSBvciBhYm92ZTwvbGk+CiAgPGxpPk1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCAoU2VydmljZSBQYWNrIDIgaXMgcmVxdWlyZWQgdG8gd29yayB3aXRoIHRoZSByZWxlYXNlIGJ1aWxkIG9mCiAgICBtYXggc3BlZWQgb3B0aW1pemF0aW9uKS48L2xpPgo8L3VsPgoKPHA+VGhlIHN0ZXBzIGFyZTogCgo8b2w+CiAgPGxpPlVuemlwIHRoZSBpY3UtWFhYWC56aXAgZmlsZSwgdHlwZSAmcXVvdDt1bnppcCAtYSBpY3UtWFhYWC56aXAgLWQgZHJpdmU6XGRpcmVjdG9yeSZxdW90OwogICAgdW5kZXIgY29tbWFuZCBwcm9tcHQgb3IgdXNlIFdpblppcC4mbmJzcDsgZHJpdmU6XGRpcmVjdG9yeVxpY3UgaXMgdGhlIHJvb3QgKCRSb290KQogICAgZGlyZWN0b3J5ICh5b3UgbWF5IGJ1dCBkb24ndCBuZWVkIHRvIHBsYWNlICZxdW90O2ljdSZxdW90OyBpbnRvIGFub3RoZXIgZGlyZWN0b3J5KS4gSWYgeW91CiAgICBjaGFuZ2UgdGhlIHJvb3QsIHlvdSB3aWxsIGNoYW5nZSB0aGUgcHJvamVjdCBzZXR0aW5ncyBhY2NvcmRpbmdseSBpbiBFQUNIIG1ha2VmaWxlIGluIHRoZQogICAgcHJvamVjdCwgdXBkYXRpbmcgdGhlIGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMuPC9saT4KICA8bGk+U2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8c3Ryb25nPklDVV9EQVRBPC9zdHJvbmc+LCB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgZGF0YQogICAgZGlyZWN0b3J5LCB0byBpbmRpY2F0ZSB3aGVyZSB0aGUgbG9jYWxlIGRhdGEgZmlsZXMgYW5kIGNvbnZlcnNpb24gbWFwcGluZyB0YWJsZXMgYXJlLjwvbGk+CiAgPGxpPlN0YXJ0IE1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMC48L2xpPgogIDxsaT5DaG9vc2UgJnF1b3Q7RmlsZSZxdW90OyBtZW51IGFuZCBzZWxlY3QgJnF1b3Q7T3BlbiBXb3JrU3BhY2UmcXVvdDsuPC9saT4KICA8bGk+SW4gdGhlIGZpbGUgY2hvb3NlciwgY2hvb3NlIGljdVxzb3VyY2VcYWxsaW5vbmVcYWxsaW5vbmUuZHN3LiBPcGVuIHRoaXMgd29ya3NwYWNlLjwvbGk+CiAgPGxpPlRoaXMgd29ya3NwYWNlIGluY2x1ZGVzIGFsbCB0aGUgSUJNJ3MgSW50ZXJuYXRpb25hbCBDbGFzc2VzIGZvciBVbmljb2RlIGxpYnJhcmllcywKICAgIG5lY2Vzc2FyeSB0b29scyBhcyB3ZWxsIGFzIGludGx0ZXN0IGFuZCBjaW50bHRlc3QgdGVzdCBzdWl0ZSBwcm9qZWN0cy48L2xpPgogIDxsaT5TZXQgdGhlIGFjdGl2ZSBQcm9qZWN0LiBDaG9vc2UgJnF1b3Q7UHJvamVjdCZxdW90OyBtZW51IGFuZCBzZWxlY3QgJnF1b3Q7U2V0IGFjdGl2ZQogICAgcHJvamVjdCZxdW90Oy4gSW4gdGhlIHN1Ym1lbnUsIHNlbGVjdCAmcXVvdDtpbnRsdGVzdCZxdW90Oy48L2xpPgogIDxsaT5TZXQgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uICgmcXVvdDtXaW4zMiBEZWJ1ZyZxdW90OyBvciAmcXVvdDtXaW4zMiBSZWxlYXNlJnF1b3Q7KSBhbmQKICAgIG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgeW91ciBQQVRIIHNldHRpbmcgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBjaGFwdGVyLiAoU2VlIG5vdGUKICAgIGJlbG93Lik8L2xpPgogIDxsaT5DaG9vc2UgJnF1b3Q7QnVpbGQmcXVvdDsgbWVudSBhbmQgc2VsZWN0ICZxdW90O1JlYnVpbGQgQWxsJnF1b3Q7LiBJZiB5b3Ugd2FudCB0byBidWlsZAogICAgdGhlIERlYnVnIGFuZCBSZWxlYXNlIGNvbmZpZ3VyYXRpb25zIGF0IHRoZSBzYW1lIHRpbWUsIGNob29zZSAmcXVvdDtCdWlsZCZxdW90OyBtZW51IGFuZAogICAgc2VsZWN0ICZxdW90O0JhdGNoIEJ1aWxkLi4uJnF1b3Q7IGluc3RlYWQgKGFuZCBtYXJrIGFsbCBjb25maWd1cmF0aW9ucyBhcyBjaGVja2VkKSwgdGhlbgogICAgY2xpY2sgdGhlIGJ1dHRvbiBuYW1lZCAmcXVvdDtSZWJ1aWxkIEFsbCZxdW90Oy48L2xpPgogIDxsaT5SZXBlYXQgc3RlcHMgNy05IGZvciBtYWtlY29udiAoc2V0IGFjdGl2ZSBwcm9qZWN0IHRvICZxdW90O21ha2Vjb252JnF1b3Q7KSwgZ2VucmIKICAgICgmcXVvdDtnZW5yYiZxdW90OykgYW5kIGdlbmNvbCAoJnF1b3Q7Z2VuY29sJnF1b3Q7KSB0b29scy48L2xpPgogIDxsaT5SdW4gdGhlIG1rY252ZmxlLmJhdCBzY3JpcHQgdG8gY3JlYXRlIHRoZSBjb252ZXJ0ZXIgZGF0YSBmaWxlcyBpbiBiaW5hcnkgZm9ybWF0LiBUaGUKICAgIHNjcmlwdCByZXF1aXJlcyB0d28gYXJndW1lbnRzLCB3aGVyZSBmaXJzdCBpcyBlaXRoZXIgJnF1b3Q7UmVsZWFzZSZxdW90OyBvcgogICAgJnF1b3Q7RGVidWcmcXVvdDsgcmVmbGVjdGluZyB0aGUgdHlwZSBvZiBidWlsZCBhbmQgdGhlIHNlY29uZCBpcyBwYXRoIHRvIHRoZSBpY3UKICAgIGRpcmVjdG9yeS48L2xpPgogIDxsaT5SdW4gdGhlIGdlbnJiLmJhdCBzY3JpcHQgdG8gY3JlYXRlIHRoZSBsb2NhbGUgZGF0YSBmaWxlcyBpbiBiaW5hcnkgZm9ybWF0LiBUaGUgc2NyaXB0CiAgICByZXF1aXJlcyB0d28gYXJndW1lbnRzLCB3aGVyZSBmaXJzdCBpcyBlaXRoZXIgJnF1b3Q7UmVsZWFzZSZxdW90OyBvciAmcXVvdDtEZWJ1ZyZxdW90OwogICAgcmVmbGVjdGluZyB0aGUgdHlwZSBvZiBidWlsZCBhbmQgdGhlIHNlY29uZCBpcyBwYXRoIHRvIHRoZSBpY3UgZGlyZWN0b3J5PC9saT4KICA8bGk+UnVuIHRoZSBnZW5jb2wuZXhlIHByb2dyYW0gdG8gcHJlLWxvYWQgdGhlIGNvbGxhdGlvbiBkYXRhIGFuZCBjcmVhdGUgdGhlIGNvbGxhdGlvbiBkYXRhCiAgICBpbiBiaW5hcnkgZm9ybWF0LjwvbGk+CiAgPGxpPlNhdmUgdGhlIHZhbHVlIG9mIHRoZSA8c3Ryb25nPlRaPC9zdHJvbmc+IGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCB0aGVuIHNldCBpdCB0byA8c3Ryb25nPlBTVDhQRFQ8L3N0cm9uZz4uJm5ic3A7CiAgPC9saT4KICA8bGk+UmVvcGVuIHRoZSAmcXVvdDthbGxpbm9uZSZxdW90OyBwcm9qZWN0IGZpbGUgYW5kIHJ1biB0aGUgJnF1b3Q7aW50bHRlc3QmcXVvdDsgdGVzdC4KICAgICZuYnNwOyBSZXNldCB0aGUgPHN0cm9uZz5UWjwvc3Ryb25nPiB2YWx1ZS48L2xpPgogIDxsaT5UbyBydW4gdGhlIEMgdGVzdCBzdWl0ZSwgc2V0ICZxdW90O2NpbnRsdHN0JnF1b3Q7IGFzIHRoZSBhY3RpdmUgcHJvamVjdCwgcmVwZWF0IHN0ZXBzIDgsCiAgICA5IGFuZCB0aGVuIHJ1biB0aGUgJnF1b3Q7Y2ludGx0c3QmcXVvdDsgdGVzdC4uPC9saT4KICA8bGk+QnVpbGQgYW5kIHJ1biBhcyBvdXRsaW5lZCBhYm92ZS48L2xpPgo8L29sPgo8Yj4KCjxwPk5vdGU6IDwvYj5UbyBzZXQgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uLCB0d28gZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgYXJlOiAKCjx1bD4KICA8bGk+Q2hvb3NlICZxdW90O0J1aWxkJnF1b3Q7IG1lbnUsIHNlbGVjdCAmcXVvdDtTZXQgQWN0aXZlIENvbmZpZ3VyYXRpb24mcXVvdDssIGFuZCBzZWxlY3QKICAgICZxdW90O1dpbjMyIFJlbGVhc2UmcXVvdDsgb3IgJnF1b3Q7V2luMzIgRGVidWcmcXVvdDsuPC9saT4KICA8bGk+QW5vdGhlciB3YXkgaXMgdG8gc2VsZWN0ICZxdW90O0N1c3RvbWl6ZSZxdW90OyBpbiB0aGUgJnF1b3Q7VG9vbHMmcXVvdDsgbWVudSwgc2VsZWN0IHRoZQogICAgJnF1b3Q7VG9vbGJhcnMmcXVvdDsgdGFiLCBlbmFibGUgJnF1b3Q7QnVpbGQmcXVvdDsgaW5zdGVhZCBvZiAmcXVvdDtCdWlsZCBNaW5pYmFyJnF1b3Q7LAogICAgYW5kIGNsaWNrIG9uICZxdW90O0Nsb3NlJnF1b3Q7LiBUaGlzIHdpbGwgYnJpbmcgdXAgYSB0b29sYmFyIHdoaWNoIHlvdSBjYW4gbW92ZSBhc2lkZSB0aGUKICAgIG90aGVyIHBlcm1hbmVudCB0b29sYmFycyBhdCB0aGUgdG9wIG9mIHRoZSBNU1ZDIHdpbmRvdy4gVGhlIGFkdmFudGFnZSBpcyB0aGF0IHlvdSBub3cgaGF2ZQogICAgYW4gZWFzeS10by1yZWFjaCBwb3AtdXAgbWVudSB3aGljaCB3aWxsIGFsd2F5cyBzaG93IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYWN0aXZlCiAgICBjb25maWd1cmF0aW9uLiZuYnNwOyBPciwgeW91IGNhbiBkcmFnIHRoZSBwcm9qZWN0IGFuZCBjb25maWd1cmF0aW9uIHNlbGVjdGlvcnMgYW5kIGRyb3AKICAgIHRoZW0gb24gdGhlIG1lbnUgYmFyIGZvciBsYXRlciBzZWxlY3Rpb24uPC9saT4KPC91bD4KCjxwPkl0IGlzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgZWFjaCBsaWJyYXJ5IGluZGl2aWR1YWxseSwgdXNpbmcgdGhlIHdvcmtzcGFjZXMgaW4gZWFjaApyZXNwZWN0aXZlIGRpcmVjdG9yeS4gVGhleSBoYXZlIHRvIGJlIGJ1aWx0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDEuIGNvbW1vbiA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAyLiBpMThuIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDMuIG1ha2Vjb252PGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgNC4gZ2VucmI8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA1LiBnZW5jb2w8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA2LiBjdGVzdGZ3IDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDcuIGludGx0ZXN0IGFuZCBjaW50bHRzdCwgaWYgeW91IHdhbnQgdG8gcnVuCnRoZSB0ZXN0IHN1aXRlLiA8YnI+ClJlZ2FyZGluZyB0aGUgdGVzdCBzdWl0ZSwgcGxlYXNlIHJlYWQgdGhlIGRpcmVjdGlvbnMgaW4gPGEgaHJlZj0iZG9jcy9pbnRsdGVzdC5odG1sIj5kb2NzL2ludGx0ZXN0Lmh0bWw8L2E+CmFuZCA8YSBocmVmPSJkb2NzL2NpbnRsdHN0Lmh0bWwiPmRvY3MvY2ludGx0c3QuaHRtbDwvYT4gPC9wPgoKPGgzPkhvdyB0byBJbnN0YWxsL0J1aWxkIG9uIFVuaXg8L2gzPgoKPHA+VGhlcmUgaXMgYSBzZXQgb2YgTWFrZWZpbGVzIGZvciBVbml4IHdoaWNoIHN1cHBvcnRzIExpbnV4IHcvZ2NjLCBTb2xhcmlzIHcvZ2NjIGFuZApXb3Jrc2hvcCBDQy4gYW5kIEFJWCB3L3hsYy4gPC9wPgoKPHA+QnVpbGRpbmcgSUJNJ3MgSW50ZXJuYXRpb25hbCBDbGFzc2VzIGZvciBVbmljb2RlIG9uIFVuaXggcmVxdWlyZXM6IDwvcD4KCjxwPkEgVU5JWCBDKysgY29tcGlsZXIsIChnY2MsIGNjLCB4bGNfciwgZXRjLi4uKSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBtYWNoaW5lLiBBIHJlY2VudAp2ZXJzaW9uIG9mIEdOVSBtYWtlICgzLjcrKS4gPC9wPgoKPHA+VGhlIHN0ZXBzIGFyZTogCgo8b2w+CiAgPGxpPlVuemlwIHRoZSBpY3UtWFhYWC56aXAgZmlsZSB3aXRoIHRoZSAmcXVvdDstYSZxdW90OyBvcHRpb24uPC9saT4KICA8bGk+QmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3QgcHJvZ3JhbXMgb3Igc2FtcGxlcywgcGxlYXNlIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPHN0cm9uZz5JQ1VfREFUQTwvc3Ryb25nPiwKICAgIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBkYXRhIGRpcmVjdG9yeSwgdG8gaW5kaWNhdGUgd2hlcmUgdGhlIGxvY2FsZSBkYXRhIGZpbGVzIGFuZAogICAgY29udmVyc2lvbiBtYXBwaW5nIHRhYmxlcyBhcmUuJm5ic3A7IElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIGRlZmF1bHQgdXNlciBkYXRhCiAgICBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLjwvbGk+CiAgPGxpPkNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlICZxdW90O2ljdS9zb3VyY2UmcXVvdDsuPC9saT4KICA8bGk+SWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LCBwbGVhc2Ugc2V0IHRoZSBleGVjdXRhYmxlIGZsYWcgZm9yIHRoZSBmb2xsb3dpbmcgZmlsZXMgKGJ5CiAgICBleGVjdXRpbmcgJ2NobW9kICt4JyBjb21tYW5kKTogY29uZmlndXJlLCBpbnN0YWxsLnNoIGFuZCBjb25maWcuKiwgPC9saT4KICA8bGk+VHlwZSAmcXVvdDsuL2NvbmZpZ3VyZSZxdW90OyBvciB0eXBlICZxdW90Oy4vY29uZmlndXJlIC0taGVscCZxdW90OyB0byBwcmludCB0aGUKICAgIGF2aWFsYWJsZSBvcHRpb25zLjwvbGk+CiAgPGxpPlR5cGUgJnF1b3Q7bWFrZSZxdW90OyB0byBjb21waWxlIHRoZSBsaWJyYXJpZXMgYW5kIGFsbCB0aGUgZGF0YSBmaWxlcy48L2xpPgogIDxsaT5PcHRpb25hbGx5LCB0eXBlICZxdW90O21ha2UgY2hlY2smcXVvdDsgdG8gdmVyaWZ5IHRoZSB0ZXN0IHN1aXRlLjwvbGk+CiAgPGxpPlR5cGUgJnF1b3Q7TWFrZSBpbnN0YWxsJnF1b3Q7IHRvIGluc3RhbGwuPC9saT4KPC9vbD4KCjxwPkl0IGlzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgZWFjaCBsaWJyYXJ5IGluZGl2aWR1YWxseSwgdXNpbmcgdGhlIE1ha2VmaWxlcyBpbiBlYWNoCnJlc3BlY3RpdmUgZGlyZWN0b3J5LiBUaGV5IGhhdmUgdG8gYmUgYnVpbHQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgMS4gY29tbW9uIDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDIuIGkxOG4gPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgMy4gbWFrZWNvbnYgPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgNC4gZ2VucmI8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA1LiBnZW5jb2w8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA2LiBjdGVzdGZ3IDxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDcuIGludGx0ZXN0IGFuZCBjaW50bHRzdCwgaWYgeW91IHdhbnQgdG8gcnVuCnRoZSB0ZXN0IHN1aXRlLiA8YnI+ClJlZ2FyZGluZyB0aGUgdGVzdCBzdWl0ZSwgcGxlYXNlIHJlYWQgdGhlIGRpcmVjdGlvbnMgaW4gPGEgaHJlZj0iZG9jcy9pbnRsdGVzdC5odG1sIj5kb2NzL2ludGx0ZXN0Lmh0bWw8L2E+CmFuZCA8YSBocmVmPSJkb2NzL2NpbnRsdHN0Lmh0bWwiPmRvY3MvY2ludGx0c3QuaHRtbDwvYT4gPC9wPgoKPHA+PGEgTkFNRT0iYWRkbG9jYWxlZGF0YWZpbGUiPjwvYT4gPC9wPgoKPGgzPjx1PkhvdyB0byBhZGQgYSBsb2NhbGUgZGF0YSBmaWxlPC91PjwvaDM+Cgo8cD5UbyBhZGQgbG9jYWxlIGRhdGEgZmlsZXMgdG8gSUJNJ3MgSW50ZXJuYXRpb25hbCBDbGFzc2VzIGZvciBVbmljb2RlIGRvIHRoZSBmb2xsb3dpbmc6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjEuIENyZWF0ZSBhIGZpbGUgY29udGFpbmluZyB0aGUga2V5LXZhbHVlIHBhaXJzIHdoaWNoIHZhbHVlIHlvdSBhcmUgb3ZlcnJpZGluZyBmcm9tIHRoZQogIHBhcmVudCBsb2NhbGUgZGF0YSBmaWxlLiA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7IE1ha2Ugc3VyZSB0aGUgZmlsZW5hbWUgaXMgdGhlIGxvY2FsZSBJRCB3aXRoIHRoZSBleHRlbnNpb24KICAmcXVvdDsudHh0JnF1b3Q7LiBXZSByZWNvbW1lbmQgeW91IGNvcHkgcGFyZW50IGZpbGUgYW5kIGNoYW5nZSB0aGUgdmFsdWVzIDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsgdGhhdCBuZWVkIHRvIGJlIGNoYW5nZWQsIHJlbW92ZSBhbGwgb3RoZXIga2V5LXBhaXJzLiBCZSBzdXJlIHRvIHVwZGF0ZQogIHRoZSBsb2NhbGUgSUQga2V5ICh0aGUgb3V0bW9zdCBicmFjZSkgd2l0aCA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7IHRoZSBuYW1lIG9mIHRoZSBsb2NhbGUgaWQgeW91ciBhIGNyZWF0aW5nLjwvcD4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CiAgPHA+Mi4gTmFtZSB0aGUgZmlsZSB3aXRoIGxvY2FsZSBJRCB5b3UgYXJlIGNyZWF0aW5nIHdpdGggYSAmcXVvdDsudHh0JnF1b3Q7IGF0IHRoZSBlbmQuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8YmxvY2txdW90ZT4KICA8YmxvY2txdW90ZT4KICAgIDxwPmUuZy4mbmJzcDsmbmJzcDsmbmJzcDsgZnJfQkYudHh0IDxicj4KICAgIFdvdWxkIGNyZWF0ZSBhIGxvY2FsZSB0aGF0IGluaGVyaXRzIGFsbCB0aGUga2V5LXZhbHVlIHBhaXJzIGZyb20gZnIudHh0LjwvcD4KICA8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgogIDxwPjMuIEFkZCB0aGUgbmFtZSBvZiB0aGF0IGZpbGUgKHdpdGhvdXQgdGhlICZxdW90Oy50eHQmcXVvdDsgZXh0ZW5zaW9uKSBhcyBhIHNpbmdsZSBsaW5lCiAgaW4gJnF1b3Q7aW5kZXgudHh0JnF1b3Q7IGZpbGUgaW4gdGhlIGRlZmF1bHQgbG9jYWxlIGRpcmVjdG9yeSAoaWN1L2RhdGEvKS48L3A+CiAgPHA+NC4gUnVuIHRoZSBnZW5yYiB0b29sIHRvIGNvbnZlcnQgdGhlIGZpbGUgaW50byBiaW5hcnkgZm9ybWF0LiZuYnNwOyBVbmRlciB0aGUgY29tbWFuZAogIHByb21wdCwgdHlwZTo8L3A+CiAgPGJsb2NrcXVvdGU+CiAgICA8cD48Zm9udCBmYWNlPSJDb3VyaWVyIE5ldyI+Jmd0OyBnZW5yYiBcRnVsbCBQYXRoXGZyX0JGLnR4dDwvZm9udD48L3A+CiAgPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48YSBOQU1FPSJhZGRyYmRhdGF0b2FwcCI+PC9hPjwvcD4KPGI+PHU+PGZvbnQgc2l6ZT0iKzEiPgoKPHA+SG93IHRvIGFkZCByZXNvdXJjZSBidW5kbGUgZGF0YSB0byB5b3VyIGFwcGxpY2F0aW9uPC9mb250PjwvdT48L2I+IDwvcD4KCjxwPkFkZGluZyByZXNvdXJjZSBidW5kbGUgZGF0YSB0byB5b3VyIGFwcGxpY2F0aW9uIGlzIHF1aXRlIHNpbXBsZTogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Q3JlYXRlIHJlc291cmNlIGJ1bmRsZSBmaWxlcyB3aXRoIHRoZSByaWdodCBmb3JtYXQgYW5kIG5hbWVzIGluIGEgZGlyZWN0b3J5IGZvcgogIHJlc291cmNlIGJ1bmRsZXMgeW91IGNyZWF0ZSBpbiB5b3VyIGFwcGxpY2F0aW9uIGRpcmVjdG9yeSB0cmVlLihmb3IgbW9yZSBpbmZvcm1hdGlvbiBvZgogIHRoYXQgZm9ybWF0IG9mIHRoZXNlIGZpbGVzIHNlZSA8YQogIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9qYXZhL2VkdWNhdGlvbi9pbnRlcm5hdGlvbmFsLXVuaWNvZGUvdW5pY29kZWMuaHRtbCI+cmVzb3VyY2UKICBidW5kbGUgZm9ybWF0KTwvYT4gPGJyPgogIFVzZSB0aGF0IHNhbWUgZGlyZWN0b3J5IG5hbWUgKGFic29sdXRlIHBhdGgpIHdoZW4gaW5zdGFudGlhdGluZyBhIHJlc291cmNlIGJ1bmRsZSBhdCBydW4KICB0aW1lLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGEgTkFNRT0iV2hlcmVDb2xsYXRpb24iPjwvYT48L3A+Cgo8aDM+PHU+V2hlcmUgQ29sbGF0aW9uIERhdGEgaXMgc3RvcmVkPC91PjwvaDM+Cgo8cD5Db2xsYXRpb24gZGF0YSBpcyBzdG9yZWQgaW4gYSBzaW5nbGUgZGlyZWN0b3J5IG9uIGEgbG9jYWwgZGlzay4gRWFjaCBsb2NhbGUncyBkYXRhIGlzCnN0b3JlZCBpbiBhIGNvcnJlc3BvbmRpbmcgQVNDSUkgdGV4dCBmaWxlIGluZGljYXRlZCBieSBhICZxdW90O0NvbGxhdGlvbkVsZW1lbnRzJnF1b3Q7IHRhZwouIEZvciBpbnN0YW5jZSwgdGhlIGRhdGEgZm9yIGRlX0NIIGlzIHN0b3JlZCB3aXRoIGEgdGFnICZxdW90O0NvbGxhdGlvbkVsZW1lbnRzJnF1b3Q7IGluIGEKZmlsZSBuYW1lZCAmcXVvdDtkZV9DSC50eHQmcXVvdDsuIFJlYWRpbmcgdGhlIGNvbGxhdGlvbiBkYXRhIGZyb20gdGhlc2UgZmlsZXMgY2FuIGJlCnRpbWUtY29uc3VtaW5nLCBlc3BlY2lhbGx5IGZvciBsYXJnZSBwaWVjZXMgb2YgZGF0YSB0aGF0IG9jY3VyIGluIGxhbmd1YWdlcyBzdWNoIGFzCkphcGFuZXNlLiBGb3IgdGhpcyByZWFzb24sIHRoZSBDb2xsYXRpb24gRnJhbWV3b3JrIGltcGxlbWVudHMgYSBzZWNvbmQgZmlsZSBmb3JtYXQsIGEKcGVyZm9ybWFuY2Utb3B0aW1pemVkLCBub24tcG9ydGFibGUsIGJpbmFyeSBmb3JtYXQuIFRoZXNlIGJpbmFyeSBmaWxlcyBhcmUgZ2VuZXJhdGVkCmF1dG9tYXRpY2FsbHkgYnkgdGhlIGZyYW1ld29yayB0aGUgZmlyc3QgdGltZSBhIGNvbGxhdGlvbiB0YWJsZSBpcyBwYXJzZWQuIFRoZXkgaGF2ZSBuYW1lcwpvZiB0aGUgZm9ybSAmcXVvdDtkZV9DSC5jb2wmcXVvdDsuIE9uY2UgdGhlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGZyYW1ld29yaywgZnV0dXJlCmxvYWRpbmcgb2YgdGhvc2UgY29sbGF0aW9ucyBvY2N1ciBmcm9tIHRoZSBiaW5hcnkgZmlsZSwgcmF0aGVyIHRoYW4gdGhlIHRleHQgZmlsZSwgYXQgbXVjaApoaWdoZXIgc3BlZWQuIDwvcD4KCjxwPkluIGdlbmVyYWwsIHlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgd2l0aCB0aGVzZSBmaWxlcy4gVGhleSBjYW4gYmUKZ2VuZXJhdGVkIGRpcmVjdGx5IGJ5IHVzaW5nIHRoZSAmcXVvdDtnZW5jb2wmcXVvdDsgdG9vbC4mbmJzcDsgSW4gYWRkaXRpb24sIHRoZXkgY2FuIGFsc28KYmUgZ2VuZXJhdGVkIGFuZCB1c2VkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGZyYW1ld29yaywgd2l0aG91dCBpbnRlcnZlbnRpb24gb24geW91ciBwYXJ0LgpIb3dldmVyLCB0aGVyZSBhcmUgc2l0dWF0aW9ucyBpbiB3aGljaCB5b3Ugd2lsbCBoYXZlIHRvIHJlZ2VuZXJhdGUgdGhlbS4gVG8gZG8gc28sIHlvdQptdXN0IG1hbnVhbGx5IGRlbGV0ZSB0aGUgJnF1b3Q7LmNvbCZxdW90OyBmaWxlcyBmcm9tIHlvdXIgY29sbGF0aW9uIGRhdGEgZGlyZWN0b3J5IGFuZApyZS1ydW4gdGhlIGdlbmNvbCB0b29sLjwvcD4KCjxwPllvdSB3aWxsIG5lZWQgdG8gcmVnZW5lcmF0ZSB5b3VyICZxdW90Oy5jb2wmcXVvdDsgZmlsZXMgaW4gdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFuY2VzOgoKPG9sPgogIDxsaT5Zb3UgYXJlIG1vdmluZyB5b3VyIGRhdGEgdG8gYW5vdGhlciBwbGF0Zm9ybS4mbmJzcDsgU2luY2UgdGhlICZxdW90Oy5jb2wmcXVvdDsgZmlsZXMgYXJlCiAgICBub24tcG9ydGFibGUsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGV5IGFyZSByZWdlbmVyYXRlZC48L2xpPgogIDxsaT48Yj5ETyBOT1QgPC9iPmNvcHkgdGhlbSBmcm9tIG9uZSBwbGF0Zm9ybSB0byBhbm90aGVyLjwvbGk+CiAgPGxpPllvdSBoYXZlIGNoYW5nZWQgdGhlICZxdW90O0NvbGxhdGlvbkVsZW1lbnRzJnF1b3Q7IGRhdGEgaW4gdGhlIGxvY2FsZSdzICZxdW90Oy50eHQmcXVvdDsKICAgIGZpbGUuJm5ic3A7IE5vdGUgdGhhdCBpZiB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0IHJ1bGVzIGZvciBzb21lIHJlYXNvbiwgd2hpY2ggdW5kZXJsaWUgYWxsCiAgICBjb2xsYXRpb25zLCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gcmVidWlsZCBBTEwgeW91ciAmcXVvdDsuY29sJnF1b3Q7IGZpbGVzLCBzaW5jZSB0aGV5IGFsbAogICAgYXJlIG1lcmdlZCB3aXRoIHRoZSBkZWZhdWx0IHJ1bGUgc2V0LjwvbGk+Cjwvb2w+Cgo8aDM+PGEgTkFNRT0iQ2hhcnNldENvbnZlcnQiPjwvYT48dT5DaGFyYWN0ZXIgU2V0IENvbnZlcnNpb24gSW5mb3JtYXRpb248L3U+PC9oMz4KCjxwPlRoZSBjaGFyc2V0IGNvbnZlcnNpb24gbGlicmFyeSBwcm92aWRlcyB3YXlzIHRvIGNvbnZlcnQgc2ltcGxlIHRleHQgc3RyaW5ncyAoZS5nLiwKY2hhciopIHN1Y2ggYXMgSVNPIDg4NTktMSB0byBhbmQgZnJvbSBVbmljb2RlLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHByb3ZpZGUgY2xlYW4sIHNpbXBsZSwKcmVsaWFibGUsIHBvcnRhYmxlIGFuZCBhZGFwdGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHRvIHN1cHBvcnQgdGhlIElCTSdzCkludGVybmF0aW9uYWwgQ2xhc3NlcyBmb3IgVW5pY29kZSdzIGNoYXJhY3RlciBjb2Rlc2V0IENvbnZlcnNpb24gQVBJcy4gVGhlIGNvbnZlcnNpb24gZGF0YQppbiB0aGUgbGlicmFyeSBvcmlnaW5hdGVkIGZyb20gdGhlIE5MVEMgbGFiIGluIElCTS4gVGhlIElCTSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24KdGFibGVzIGFyZSBwdWJsaWNseSBhdmFpbGFibGUgaW4gdGhlIHB1Ymxpc2hlZCBJQk0gZG9jdW1lbnQgY2FsbGVkICZxdW90O0NIQVJBQ1RFUiBEQVRBClJFUFJFU0VOVEFUSU9OIEFSQ0hJVEVDVFVSRSAtIFJFRkVSRU5DRSBBTkQgUkVHSVNUUlkmcXVvdDsuIFRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24KbGlicmFyeSBpbmNsdWRlcyBzaW5nbGUtYnl0ZSwgZG91YmxlLWJ5dGUgYW5kIHNvbWUgVUNTIGVuY29kaW5ncyB0byBhbmQgZnJvbSBVbmljb2RlLiBUaGlzCmRvY3VtZW50IGNhbiBiZSBvcmRlcmVkIHRocm91Z2ggTWVjaGFuaWNzYmVyZyBhbmQgaXQgY29tZXMgd2l0aCAyIENEIFJPTXMgd2hpY2ggaGF2ZQptYWNoaW5lIHJlYWRhYmxlIGNvbnZlcnNpb24gdGFibGVzIG9uIHRoZW0uIFRoZSBsaWNlbnNlIGFncmVlbWVudCBpcyBpbmNsdWRlZCBpbiBJQk0ncwpJbnRlcm5hdGlvbmFsIENsYXNzZXMgZm9yIFVuaWNvZGUgYWdyZWVtZW50LiA8L3A+Cgo8cD5UbyBvcmRlciB0aGUgZG9jdW1lbnQgaW4gdGhlIFVTIHlvdSBjYW4gY2FsbCAxLTgwMC04NzktMjc1NSBhbmQgcmVxdWVzdCBkb2N1bWVudCBudW1iZXIKU0MwOS0yMTkwLTAwLiBUaGUgY29zdCBvZiB0aGlzIHB1YmxpY2F0aW9uIGlzICQ3NS4wMCBVUyBub3QgaW5jbHVkaW5nIHRheC4gPC9wPgoKPHA+Q3VycmVudGx5LCB0aGUgc3VwcG9ydCBjb2RlIHBhZ2VzIGFyZTogPC9wPgoKPHA+PGZvbnQgZmFjZT0iQ291cmllciBOZXciPmlibS0xMDA0OiBQQyBEYXRhIExhdGluLTE8YnI+CmlibS0xMDA4OiBBcmFiaWMgOGJpdCBJU08vQVNDSUk8YnI+CmlibS0xMDM4OiBBZG9iZSBTeW1ib2wgU2V0PGJyPgppYm0tMTA4OTogSVNPLTg4NTktNjxicj4KaWJtLTExMTI6IE1TIFdpbmRvd3MgQmFsdGljIFJpbTxicj4KaWJtLTExMTY6IFBDIERhdGEgRXN0b25pYTxicj4KaWJtLTExMTc6IFBDIERhdGEgTGF0dmlhPGJyPgppYm0tMTExODogUEMgRGF0YSBMaXRodWFuaWE8YnI+CmlibS0xMTE5OiBQQyBEYXRhIFJ1c3NpYW48YnI+CmlibS0xMTIzOiBDeXJpbGxpYyBVa3JhaW5lIEVCQ0RJQzxicj4KaWJtLTExNDA6IDwvZm9udD48Zm9udCBDT0xPUj0iIzAwMDAwMCIgc2l6ZT0iMyIgZmFjZT0iQ291cmllciBOZXciPkVCQ0RJQyBVU0EsIENhbmFkYSwKTmV0aGVybGFuZHMsIFBvcnR1Z2FsLCBCcmF6aWwsIEF1c3RyYWxpYSwgTmV3IFplYWxhbmQgLSBFQkNESUM6IEl0YWx5PC9mb250Pjxmb250CmZhY2U9IkNvdXJpZXIgTmV3Ij48YnI+CmlibS0xMTQxOiBFQkNESUMgR2VybWFueSwgQXVzdHJpYTxicj4KaWJtLTExNDI6IEVCQ0RJQyBEZW5tYXJrIGV0Yy48YnI+CmlibS0xMTQzOiBFQkNESUMgU3dlZGVuPGJyPgppYm0tMTE0NDogRUJDRElDIEl0YWx5PGJyPgppYm0tMTE0NTogRUJDRElDIFNwYWluPGJyPgppYm0tMTE0NjogRUJDRElDIFVLIElybGFuZDxicj4KaWJtLTExNDc6IEVCQ0RJQyBGcmFuY2U8YnI+CmlibS0xMTQ4OiBFQkNESUMgSW50ZXJuYXRpb25hbCBMYXRpbi0xPGJyPgppYm0tMTI1MDogTVMtV2luZG93cyBMYXRpbi0yPGJyPgppYm0tMTI1MTogTVMtV2luZG93cyBDeXJpbGxpYzxicj4KaWJtLTEyNTI6IE1TLVdpbmRvd3MgTGF0aW4tMTxicj4KaWJtLTEyNTM6IE1TLVdpbmRvd3MgR3JlZWs8YnI+CmlibS0xMjU0OiBNUy1XaW5kb3dzIFR1cmtleTxicj4KaWJtLTEyNTU6IE1TLVdpbmRvd3MgSGVicmV3PGJyPgppYm0tMTI1NjogTVMtV2luZG93cyBBcmFiaWM8YnI+CmlibS0xMjU3OiBNUy1XaW5kb3dzIEJhbHRpYyBSaW08YnI+CmlibS0xMjU4OiBNUy1XaW5kb3dzIFZpZXRuYW1lc2U8YnI+CmlibS0xMjc1OiBBcHBsZSBMYXRpbi0xPGJyPgppYm0tMTI3NjogQWRvYmUgKFBvc3RzY3JpcHQpIFN0YW5kYXJkIEVuY29kaW5nPGJyPgppYm0tMTI3NzogQWRvYmUgKFBvc3RzY3JpcHQpIExhdGluLTE8YnI+CmlibS0xMjgwOiBBcHBsZSBHcmVlazxicj4KaWJtLTEyODE6IEFwcGxlIFR1cmtleTxicj4KaWJtLTEyODI6IEFwcGxlIENlbnRyYWwgRXVyb3BlYW48YnI+CmlibS0xMjgzOiBBcHBsZSBDeXJpbGxpYzxicj4KaWJtLTEzNjE6IEtvcmVhbiBFVUMgV2luZG93cyBjcDk0OTxicj4KaWJtLTEzODM6IFNpbXBsaWZpZWQgQ2hpbmVzZSBFVUM8YnI+CmlibS0xMzg2OiBTaW1wbGlmaWVkIENoaW5lc2UgR0JLPGJyPgppYm0tMjkwOiBKYXBhbmVzZSBLYXRha2FuYSBTQkNTPGJyPgppYm0tMzcgOiA8L2ZvbnQ+PGZvbnQgQ09MT1I9IiMwMDAwMDAiIHNpemU9IjMiIGZhY2U9IkNvdXJpZXIgTmV3Ij5DRUNQOiBVU0EsIENhbmFkYQooRVNBKiksIE5ldGhlcmxhbmRzLCBQb3J0dWdhbCwgQnJhemlsLCBBdXN0cmFsaWEsIE5ldyBaZWFsYW5kIC0gTVMgV2luZG93cywgSGVicmV3PC9mb250Pjxmb250CmZhY2U9IkNvdXJpZXIgTmV3Ij48YnI+CmlibS00MjA6IEFyYWJpYyAod2l0aCBwcmVzZW50YXRpb24gZm9ybXMpPGJyPgppYm0tNDI0OiBIZWJyZXc8YnI+CmlibS00Mzc6IFBDIERhdGEgUEMgQmFzZSBVU0E8YnI+CmlibS04MTM6IElTTy04ODU5LTc8YnI+CmlibS04MzM6IEtvcmVhbiBIb3N0IEV4dGVuZGVkIFNCQ1M8YnI+CmlibS04NTI6IFBDIERhdGEgTGF0aW4tMiBNdWx0aWxpbmd1YWw8YnI+CmlibS04NTU6IFBDIERhdGEgQ3lyaWxsaWM8YnI+CmlibS04NTY6IFBDIERhdGEgSGVicmV3PGJyPgppYm0tODU3OiBQQyBEYXRhIFR1cmtleTxicj4KaWJtLTg1ODogUEMgRGF0YSB3aXRoIEVVUk88YnI+CmlibS04NTk6IFBDIExhdGluLTk8YnI+CmlibS04NjA6IFBDIERhdGEgUG9ydHVnYWw8YnI+CmlibS04NjE6IFBDIERhdGEgSWNlbGFuZDxicj4KaWJtLTg2MzogUEMgRGF0YSBDYW5hZGE8YnI+CmlibS04NjQ6IFBDIERhdGEgQXJhYmljPGJyPgppYm0tODY1OiBQQyBEYXRhIERlbm1hcms8YnI+CmlibS04NjY6IFBDIERhdGEgUnVzc2lhbjxicj4KaWJtLTg2NzogUEMgRGF0YSBIZWJyZXc8YnI+CmlibS04Njg6IFBDIERhdGEgVXJkdTxicj4KaWJtLTg2OTogUEMgRGF0YSBHcmVlazxicj4KaWJtLTg3NDogUEMgRGF0YSBUaGFpPGJyPgppYm0tODc4OiBSdXNzaWFuIEludGVybmV0IGtvaTgtcjxicj4KaWJtLTkxMjogSVNPLTg4NTktMjxicj4KaWJtLTkxMzogSVNPLTg4NTktMzxicj4KaWJtLTkxNDogSVNPLTg4NTktNDxicj4KaWJtLTkxNTogSVNPLTg4NTktNTxicj4KaWJtLTkxNjogSVNPLTg4NTktODxicj4KaWJtLTkyMDogSVNPLTg4NTktOTxicj4KaWJtLTkyMTogQmFsdGljIDhiaXQ8YnI+CmlibS05MjI6IEVzdG9uaWEgOGJpdDxicj4KaWJtLTkyMzogSVNPLTg4NTktMTU8YnI+CmlibS05MzA6IEphcGFuZXNlIEthdGFrYW5hLUthbmppIEhvc3Q8YnI+CmlibS05MzM6IEtvcmVhbiBIb3N0IE1peGVkPGJyPgppYm0tOTM1OiBTaW1wbGlmaWVkIENoaW5lc2UgSG9zdCBNaXhlZDxicj4KaWJtLTkzNzogVHJhZGl0aW9uYWwgQ2hpbmVzZSBIb3N0IE1peGVkPGJyPgppYm0tOTQyOiBKYXBhbmVzZSBQQyBEYXRhIE1peGVkPGJyPgppYm0tOTQzOiBKYXBhbmVzZSBQQyBEYXRhIGZvciBPcGVuIEVudmlyb25tZW50PGJyPgppYm0tOTQ5OiBLUyBDb2RlIFBDIERhdGEgTWl4ZWQ8YnI+CmlibS05NTA6IEJJRy01PGJyPgppYm0tOTcwOiBLb3JlYW4gRVVDPC9mb250PjwvcD4KCjxoMz48YSBOQU1FPSJQcm9ncmFtbWluZ05vdGVzIj48L2E+PHU+UHJvZ3JhbW1pbmcgTm90ZXM8L3U+PC9oMz4KCjxoND48Yj48dT5SZXBvcnRpbmcgRXJyb3JzPC91PjwvYj48L2g0PgoKPHA+SW4gb3JkZXIgZm9yIHRoZSBjb2RlIHRvIGJlIHBvcnRhYmxlLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBDKysgbGFuZ3VhZ2UgdGhhdCB3aWxsCmNvbXBpbGUgY29ycmVjdGx5IG9uIGV2ZW4gdGhlIG9sZGVzdCBvZiBDKysgY29tcGlsZXJzIChhbmQgYWxzbyB0byBwcm92aWRlIGEgdXNhYmxlIEMKaW50ZXJmYWNlKSBjYW4gYmUgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24sIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUncyBubyB1c2UgdGhlIEMrKwpleGNlcHRpb24gbWVjaGFuaXNtIGluIHRoZSBjb2RlLiA8L3A+Cgo8cD5BZnRlciBjb25zaWRlcmluZyBtYW55IGFsdGVybmF0aXZlcywgdGhlIGRlY2lzaW9uIHdhcyB0aGF0IGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgY2FuIGZhaWwKdGFrZXMgYW4gZXJyb3ItY29kZSBwYXJhbWV0ZXIgYnkgcmVmZXJlbmNlLiBUaGlzIGlzIGFsd2F5cyB0aGUgbGFzdCBwYXJhbWV0ZXIgaW4gdGhlCmZ1bmN0aW9uJiMxNDY7cyBwYXJhbWV0ZXIgbGlzdC4gVGhlIEVycm9yQ29kZSB0eXBlIGlzIGRlZmluZWQgYXMgYSBlbnVtZXJhdGVkIHR5cGUuIFplcm8KcmVwcmVzZW50cyBubyBlcnJvciwgcG9zaXRpdmUgdmFsdWVzIHJlcHJlc2VudCBlcnJvcnMsIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgcmVwcmVzZW50Cm5vbi1lcnJvciBzdGF0dXMgY29kZXMuIE1hY3JvcyB3ZXJlIHByb3ZpZGVkLCBTVUNDRVNTIGFuZCBGQUlMVVJFLCB0byBjaGVjayB0aGUgZXJyb3IKY29kZS4gPC9wPgoKPHA+VGhlIEVycm9yQ29kZSBwYXJhbWV0ZXIgaXMgYW4gaW5wdXQtb3V0cHV0IHBhcmFtZXRlci4gRXZlcnkgZnVuY3Rpb24gdGVzdHMgdGhlIGVycm9yCmNvZGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIGFuZCBpbW1lZGlhdGVseSBleGl0cyBpZiBpdCYjMTQ2O3MgYSBGQUlMVVJFIGVycm9yIGNvZGUuCklmIHRoZSBmdW5jdGlvbiBmYWlscyBsYXRlciBvbiwgaXQgc2V0cyB0aGUgZXJyb3IgY29kZSBhcHByb3ByaWF0ZWx5IGFuZCBleGl0cyB3aXRob3V0CmRvaW5nIGFueSBvdGhlciB3b3JrIChleGNlcHQsIG9mIGNvdXJzZSwgYW55IGNsZWFudXAgaXQgaGFzIHRvIGRvKS4gSWYgdGhlIGZ1bmN0aW9uCmVuY291bnRlcnMgYSBub24tZXJyb3IgY29uZGl0aW9uIGl0IHdhbnRzIHRvIHNpZ25hbCAoc3VjaCBhcyAmcXVvdDtlbmNvdW50ZXJlZCBhbgp1bm1hcHBhYmxlIGNoYXJhY3RlciZxdW90OyBpbiB0cmFuc2NvZGluZyksIGl0IHNldHMgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseSBhbmQKY29udGludWVzLiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiBsZWF2ZXMgdGhlIGVycm9yIGNvZGUgdW5jaGFuZ2VkLiA8L3A+Cgo8cD5HZW5lcmFsbHksIG9ubHkgZnVuY3Rpb25zIHRoYXQgZG9uJiMxNDY7dCB0YWtlIGFuIEVycm9yQ29kZSBwYXJhbWV0ZXIsIGJ1dCBjYWxsCmZ1bmN0aW9ucyB0aGF0IGRvLCBoYXZlIHRvIGRlY2xhcmUgb25lLiBBbG1vc3QgYWxsIGZ1bmN0aW9ucyB0aGF0IHRha2UgYW4gRXJyb3JDb2RlCnBhcmFtZXRlciBhbmQgYWxzbyBjYWxsIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGRvIG1lcmVseSBoYXZlIHRvIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29kZQp0aGV5IHdlcmUgcGFzc2VkIGRvd24gdG8gdGhlIGZ1bmN0aW9ucyB0aGV5IGNhbGwuIEZ1bmN0aW9ucyB0aGF0IGRlY2xhcmUgYSBuZXcgRXJyb3JDb2RlCnBhcmFtZXRlciBtdXN0IGluaXRpYWxpemUgaXQgdG8gWkVST19FUlJPUiBiZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgZnVuY3Rpb25zLiA8L3A+Cgo8cD5UaGUgcmF0aW9uYWxlIGhlcmUgaXMgdG8gYWxsb3cgYSBmdW5jdGlvbiB0byBjYWxsIHNldmVyYWwgZnVuY3Rpb25zICh0aGF0IHRha2UgZXJyb3IKY29kZXMpIGluIGEgcm93IHdpdGhvdXQgaGF2aW5nIHRvIGNoZWNrIHRoZSBlcnJvciBjb2RlIGFmdGVyIGVhY2ggb25lLiBbQSBmdW5jdGlvbiB1c3VhbGx5CndpbGwgaGF2ZSB0byBjaGVjayB0aGUgZXJyb3IgY29kZSBiZWZvcmUgZG9pbmcgYW55IG90aGVyIHByb2Nlc3NpbmcsIGhvd2V2ZXIsIHNpbmNlIGl0IGlzCnN1cHBvc2VkIHRvIHN0b3AgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVjZWl2aW5nIGFuIGVycm9yIGNvZGUuXSBQcm9wYWdhdGluZyB0aGUgZXJyb3ItY29kZQpwYXJhbWV0ZXIgZG93biB0aGUgY2FsbCBjaGFpbiBzYXZlcyB0aGUgcHJvZ3JhbW1lciBmcm9tIGhhdmluZyB0byBkZWNsYXJlIG9uZSBldmVyeXdoZXJlLAphbmQgYWxzbyBhbGxvd3MgdXMgdG8gbW9yZSBjbG9zZWx5IG1pbWljIHRoZSBDKysgZXhjZXB0aW9uIHByb3RvY29sLiA8L3A+Cgo8aDQ+PGI+PHU+QyBGdW5jdGlvbiBhbmQgRGF0YSBUeXBlIE5hbWluZzwvdT48L2I+PC9oND4KPGI+Cgo8cD5GdW5jdGlvbiBuYW1lcy48L2I+IElmIGEgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIChvciBhbG1vc3QgaWRlbnRpY2FsKSB0byBhbiBBTlNJIG9yClBPU0lYIGZ1bmN0aW9uLCB3ZSBnaXZlIGl0IHRoZSBzYW1lIG5hbWUgYW5kIChhcyBtdWNoIGFzIHBvc3NpYmxlKSB0aGUgc2FtZSBwYXJhbWV0ZXIKbGlzdC4gQSAmcXVvdDt1JnF1b3Q7IGlzIHByZXBlbmRlZCBvbnRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5hbWUuIDwvcD4KCjxwPkZvciBmdW5jdGlvbnMgdGhhdCBleGlzdCBwcmlvciB0byB2ZXJzaW9uIDEuMi4xLCB0aGF0IHRoZSBmdW5jdGlvbiBuYW1lIHNob3VsZCBiZWdpbgp3aXRoIGEgbG93ZXItY2FzZSAmcXVvdDt1JnF1b3Q7LiBBZnRlciB0aGUgJnF1b3Q7dSZxdW90OyBpcyBhIHNob3J0IGNvZGUgaWRlbnRpZnlpbmcgdGhlCnN1YnN5c3RlbSBpdCBiZWxvbmdzIHRvIChlLmcuLCAmcXVvdDtsb2MmcXVvdDssICZxdW90O3JiJnF1b3Q7LCAmcXVvdDtjbnYmcXVvdDssCiZxdW90O2NvbGwmcXVvdDssIGV0Yy4pLiBUaGlzIGNvZGUgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lIGJ5IGFuCnVuZGVyc2NvcmUsIGFuZCB0aGUgYWN0dWFsIGZ1bmN0aW9uIG5hbWUgY2FuIGJlIGFueXRoaW5nLiBGb3IgZXhhbXBsZSwgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT48Zm9udCBzaXplPSItMSI+VUNoYXIqIHVsb2NfZ2V0TGFuZ3VhZ2UoLi4uKTsKdm9pZCB1bG9jX3NldERlZmF1bHRMb2NhbGUoLi4uKTsKVUNoYXIqIHVyZXNfZ2V0U3RyaW5nKC4uLik7PC9mb250PjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5TdHJ1Y3QgYW5kIGVudW0gdHlwZSBuYW1lcy48L2I+IEZvciBzdHJ1Y3RzIGFuZCBlbnVtIHR5cGVzLCB0aGUgcnVsZSBpcyB0aGF0IHRoZWlyCm5hbWVzIGJlZ2luIHdpdGggYSBjYXBpdGFsICZxdW90O1UuJnF1b3Q7IFRoZXJlIGlzIG5vIHVuZGVyc2NvcmUgZm9yIHN0cnVjdCBuYW1lcy48L3A+Cgo8cHJlPjxmb250IHNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVSZXNvdXJjZUJ1bmRsZTsKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVDb2xsYXRvcjsKICAgICAgIFVDb2xsYXRpb25SZXN1bHQ7PC9mb250PjwvcHJlPgo8Yj4KCjxwPkVudW0gdmFsdWUgbmFtZXMuPC9iPiBFbnVtZXJhdGlvbiB2YWx1ZXMgaGF2ZSBuYW1lcyB0aGF0IGJlZ2luIHdpdGggJnF1b3Q7VVhYWCZxdW90Owp3aGVyZSBYWFggc3RhbmRzIGZvciB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25hbCBjYXRlZ29yeS48L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPjxmb250IHNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+VU5VTV9ERUNJTUFMOwpVQ09MX0dSRUFURVI7PC9mb250PjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxiPgoKPHA+TWFjcm8gbmFtZXMuPC9iPiBNYWNybyBuYW1lcyBhcmUgaW4gYWxsIGNhcHMsIGJ1dCB0aGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyCnJlcXVpcmVtZW50cy4gPC9wPgoKPHA+PGI+Q29uc3RhbnQgbmFtZXMuPC9iPiBNYW55IGNvbnN0YW50IG5hbWVzIChjb25zdGFudHMgZGVmaW5lZCB3aXRoICZxdW90O2NvbnN0JnF1b3Q7LApub3QgbWFjcm9zIGRlZmluZWQgd2l0aCAmcXVvdDsjZGVmaW5lJnF1b3Q7IHRoYXQgYXJlIHVzZWQgYXMgY29uc3RhbnRzKSBiZWdpbiB3aXRoIGEKbG93ZXJjYXNlIGssIGJ1dCB0aGlzIGlzbiYjMTQ2O3QgdW5pdmVyc2FsbHkgZW5mb3JjZWQuIDwvcD4KCjxoND48Yj48dT5QcmVmbGlnaHRpbmcgYW5kIE92ZXJmbG93IEhhbmRsaW5nPC91PjwvYj48L2g0PgoKPHA+SW4gSUNVJ3MgQyBBUElzLCB0aGUgdXNlciBuZWVkcyB0byBhZGhlcmUgdG8gdGhlIGZvbGxvd2luZyBwcmluY2lwbGVzIGZvciBjb25zaXN0ZW5jeQphY3Jvc3MgYWxsIGZ1bmN0aW9uYWwgY2F0ZWdvcmllczogCgo8b2w+CiAgPGxpPkFsbCB0aGUgVW5pY29kZSBzdHJpbmcgcHJvY2Vzc2luZyBzaG91bGQgYmUgZXhwcmVzc2VkIGluIHRlcm1zIG9mIGEgVUNoYXIqIGJ1ZmZlciB0aGF0CiAgICBpcyBhbHdheXMgbnVsbCB0ZXJtaW5hdGVkLjwvbGk+CiAgPGxpPlRoZSBBUElzIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBzdHJpbmcgcGFyYW1ldGVycyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgZml4LXNpemVkCiAgICBjaGFyYWN0ZXIgYnVmZmVycy48L2xpPgogIDxsaT5XaGVuIHRoZSB2YWx1ZSBhIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHJldHVybiBpcyBhbHJlYWR5IHN0b3JlZCBhcyBhIGNvbnN0YW50IHZhbHVlIGluCiAgICBzdGF0aWMgc3BhY2UgKGUuZy4sIGl0JiMxNDY7cyBjb21pbmcgZnJvbSBhIGZpeGVkIHRhYmxlLCBvciBpcyBzdG9yZWQgaW4gYSBjYWNoZSksIHRoZQogICAgZnVuY3Rpb24gd2lsbCBqdXN0IHJldHVybiB0aGUgY29uc3QgVUNoYXIqIHBvaW50ZXIuPC9saT4KICA8bGk+V2hlbiB0aGUgZnVuY3Rpb24gY2FuJiMxNDY7dCByZXR1cm4gYSBVQ2hhciogdG8gc3RvcmFnZSB0aGUgdXNlciBkb2VzbiYjMTQ2O3QgaGF2ZSB0bwogICAgZGVsZXRlLCB0aGUgY2FsbGVyIG5lZWRzIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIGEgY2hhcmFjdGVyIGJ1ZmZlciB0aGF0IHRoZSBmdW5jdGlvbiBjYW4KICAgIGZpbGwgd2l0aCB0aGUgcmVzdWx0LiBUaGlzIHBvaW50ZXIgbmVlZHMgdG8gYmUgYWNjb21wYW5pZWQgYnkgYSBpbnQzMl90IHBhcmFtZXRlciB0aGF0CiAgICBnaXZlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLjwvbGk+Cjwvb2w+Cgo8cD5UbyBmaW5kIG91dCBob3cgbGFyZ2UgdGhlIHJlc3VsdCBidWZmZXIgc2hvdWxkIGJlLCBJQ1UgcHJvdmlkZXMgYSA8c3Ryb25nPnByZWZsaWdodGluZzwvc3Ryb25nPgpDIGludGVyZmFjZS4mbmJzcDsgVGhlIGludGVyZmFjZSB3b3JrcyBsaWtlIHRoaXM6IAoKPG9sPgogIDxsaT5XaGVuIHVzaW5nIHRoZSAmcXVvdDs8Yj5wcmVmbGlnaHRpbmc8L2I+JnF1b3Q7IG9wdGlvbjogeW91IG5lZWQgdG8gcGFzcyB0aGUgZnVuY3Rpb24gYQogICAgTlVMTCBwb2ludGVyIGZvciB0aGUgYnVmZmVyIHBvaW50ZXIsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgICByZXN1bHQuIFlvdSBjYW4gdGhlbiBjaG9vc2UgdG8gYWxsb2NhdGUgYSBidWZmZXIgb2YgdGhlIGNvcnJlY3Qgc2l6ZSBhbmQgcmUtcnVuIHRoZQogICAgb3BlcmF0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvLjwvbGk+CiAgPGxpPkFmdGVyIGFsbG9jYXRpbmcgYSBidWZmZXIgb2Ygc29tZSByZWFzb25hYmxlIHNpemUgb24gdGhlIHN0YWNrIGFuZCBwYXNzZXMgdGhhdCB0byB0aGUKICAgIGZ1bmN0aW9uLCBpZiB0aGUgcmVzdWx0IGNhbiBmaXQgaW4gdGhhdCBidWZmZXIsIGV2ZXJ5dGhpbmcmbmJzcDsgd29ya3MgZmluZS4gSWYgdGhlIHJlc3VsdAogICAgZG9lc24mIzE0Njt0IGZpdCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBhY3R1YWwgc2l6ZSBuZWVkZWQuJm5ic3A7IFlvdSBjYW4gdGhlbgogICAgYWxsb2NhdGUgYSBidWZmZXIgb2YgdGhlIGNvcnJlY3Qgc2l6ZSBvbiB0aGUgaGVhcCBhbmQgdHJ5IGNhbGxpbmcgdGhlIHNhbWUgZnVuY3Rpb24gYWdhaW4uPC9saT4KICA8bGk+Tm93IHlvdSBoYXZlIGNyZWF0ZWQgYSBidWZmZXIgb2Ygc29tZSByZWFzb25hYmxlIHNpemUgb24gdGhlIHN0YWNrIGFuZCBwYXNzZXMgaXQgdG8gdGhlCiAgICBmdW5jdGlvbi4mbmJzcDsgSWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGUgcmVzdWx0IGFuZCB0aGUgYWxsb2NhdGVkCiAgICBidWZmZXIgaXMgdG9vIHNtYWxsLCB5b3UgY2FuIGNvbnRpbnVlIG9uIHVzaW5nIHRoZSB0cnVuY2F0ZWQgcmVzdWx0LjwvbGk+Cjwvb2w+Cgo8cD5UaGUgZm9sbG93aW5nIHRocmVlIG9wdGlvbnMgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIHByZWZsaWdodGluZyBpbnRlcmZhY2UsIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+PGZvbnQgc2l6ZT0iLTEiPjxmb250IGZhY2U9IkNvdXJpZXIgTmV3Ij4vKiombmJzcDsKPC9mb250PiZuYnNwOyogQHBhcmFtIHJlc3VsdCBpcyBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGFjdHVhbCByZXN1bHQgd2lsbCBiZS4KJm5ic3A7KiBAcGFyYW0gbWF4UmVzdWx0U2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJlIHJlc3VsdCBoYXMgcm9vbSBmb3IuJm5ic3A7CiZuYnNwOyogQHJldHVybiBUaGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgcmVzdWx0IChjb3VudGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCkKJm5ic3A7Ki8KaW50MzJfdCBkb1NvbWV0aGluZyggLyogaW5wdXQgcGFyYW1zICovLCBVQ2hhciogcmVzdWx0LAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50MzJfdCBtYXhSZXN1bHRTaXplLDxmb250CmZhY2U9IkNvdXJpZXIgTmV3Ij4gVUVycm9yQ29kZSogZXJyKTs8L2ZvbnQ+PC9mb250PjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiB0aGlzIHNhbXBsZSwgaWYgdGhlIGFjdHVhbCByZXN1bHQgZG9lc24mIzE0Njt0IGZpdCBpbiB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIDxmb250CnNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+bWF4UmVzdWx0U2l6ZTwvZm9udD4sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mCnNwYWNlIG5lY2Vzc2FyeSB0byBob2xkIHRoZSByZXN1bHQsIGFuZCByZXN1bHQgaG9sZHMgYXMgbWFueSBjaGFyYWN0ZXJzIG9mIHRoZSBhY3R1YWwKcmVzdWx0IGFzIHBvc3NpYmxlLiBJZiB5b3UgZG9uJiMxNDY7dCBjYXJlIGFib3V0IHRoaXMsIG5vIGZ1cnRoZXIgYWN0aW9uIGlzIG5lY2Vzc2FyeS4gSWYKeW91IDxpPmRvIDwvaT5jYXJlIGFib3V0IHRoZSB0cnVuY2F0ZWQgY2hhcmFjdGVycywgeW91IGNhbiB0aGVuIGFsbG9jYXRlIGEgYnVmZmVyIG9uIHRoZQpoZWFwIG9mIHRoZSBzaXplIHNwZWNpZmllZCBieSB0aGUgcmV0dXJuIHZhbHVlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBhZ2FpbiwgcGFzc2luZyA8aT50aGF0CjwvaT5idWZmZXImIzE0NjtzIGFkZHJlc3MgZm9yIHJlc3VsdC4gPC9wPgoKPHA+QWxsIHByZWZsaWdodGluZyBmdW5jdGlvbnMgaGF2ZSBhIGZpbGwtaW4gPGZvbnQgc2l6ZT0iLTEiIGZhY2U9IkNvdXJpZXIgTmV3Ij5FcnJvckNvZGU8L2ZvbnQ+CnBhcmFtZXRlciAoYW5kIGZvbGxvdyB0aGUgbm9ybWFsIDxmb250IHNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+RXJyb3JDb2RlPC9mb250PgpydWxlcyksIGV2ZW4gaWYgdGhleSBhcmUgbm90IGN1cnJlbnRseSBkb2luZyBzby4gQnVmZmVyIG92ZXJmbG93IHdvdWxkIGJlIHRyZWF0ZWQgYXMgYQpGQUlMVVJFIGVycm9yIGNvbmRpdGlvbiwgYnV0IHdvdWxkIDxpPm5vdDwvaT4gYmUgcmVwb3J0ZWQgd2hlbiB0aGUgY2FsbGVyIHBhc3NlcyBpbiBOVUxMCmZvciA8Zm9udCBzaXplPSItMSIgZmFjZT0iQ291cmllciBOZXciPmFjdHVhbFJlc3VsdFNpemU8L2ZvbnQ+IChwcmVzdW1hYmx5LCBhIE5VTEwgZm9yCnRoaXMgcGFyYW1ldGVyIG1lYW5zIHRoZSBjbGllbnQgZG9lc24mIzE0Njt0IGNhcmUgaWYgaGUgZ290IGEgYnVmZmVyIG92ZXJmbG93KS4gQWxsIG90aGVyCmZhaWxpbmcgZXJyb3IgY29uZGl0aW9ucyB3aWxsIG92ZXJ3cml0ZSB0aGUgJnF1b3Q7YnVmZmVyIG92ZXJmbG93JnF1b3Q7IGVycm9yLCBlLmcuIDxmb250CmZhY2U9IkNvdXJpZXIgTmV3Ij5NSVNTSU5HX1JFU09VUkNFX0VSUk9SPC9mb250PiBldGMuLjwvcD4KCjxoND48Yj48dT5BcnJheXMgYXMgcmV0dXJuIHR5cGVzPC91PjwvYj48L2g0PgoKPHA+UmV0dXJuaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgaXMgZmFpcmx5IGVhc3kgaW4gQysrLCBidXQgdmVyeSBoYXJkIGluIEMuIEluc3RlYWQgb2YKcmV0dXJuaW5nIHRoZSBhcnJheSBwb2ludGVyIGRpcmVjdGx5LCB3ZSBvcHRlZCBmb3IgYW4gaXRlcmF0aXZlIGludGVyZmFjZSBpbnN0ZWFkOiBzcGxpdAp0aGUgZnVuY3Rpb24gaW50byB0d28gZnVuY3Rpb25zLiZuYnNwOyBPbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSwKYW5kIHRoZSBvdGhlciBvbmUgcmV0dXJucyBhIHNpbmdsZSBzcGVjaWZpZWQgZWxlbWVudCBmcm9tIHRoZSBhcnJheS48L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPjxmb250IHNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+aW50MzJfdCBjb3VudEFycmF5SXRlbXMoLyogcGFyYW1zICovKTsKaW50MzJfdCBnZXRBcnJheUVsZW1lbnQoaW50MzJfdCBlbGVtZW50SW5kZXgsIC8qIG90aGVyIHBhcmFtcyAqLywKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVDaGFyKiByZXN1bHQsIGludDMyX3QgbWF4UmVzdWx0U2l6ZSwgVUVycm9yQ29kZSogZXJyKTs8L2ZvbnQ+PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPkluIHRoaXMgY2FzZSwgaXRlcmF0aW5nIGFjcm9zcyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSB3b3VsZCBhbW91bnQgdG8gYSBjYWxsIHRvCnRoZSBjb3VudCgpIGZ1bmN0aW9uIGZvbGxvd2VkIGJ5IG11bHRpcGxlIGNhbGxzIHRvIHRoZSBnZXRFbGVtZW50KCkgZnVuY3Rpb24uIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+PGZvbnQgc2l6ZT0iLTEiIGZhY2U9IkNvdXJpZXIgTmV3Ij5mb3IgKGkgPSAwOyBpICZsdDsgY291bnRBcnJheUl0ZW1zKC4uLik7IGkrKykgewombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVUNoYXIgZWxlbWVudFs1MF07CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBnZXRBcnJheUl0ZW0oaSwgLi4uLCBlbGVtZW50LCA1MCwgJmFtcDtlcnIpOwombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLyogZG8gc29tZXRoaW5nIHdpdGggZWxlbWVudCAqLwp9PC9mb250PjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiB0aGUgY2FzZSBvZiB0aGUgcmVzb3VyY2UgYnVuZGxlIDxmb250IGZhY2U9IkNvdXJpZXIgTmV3Ij51cmVzX1hYWFg8L2ZvbnQ+IGZ1bmN0aW9ucwpyZXR1cm5pbmcgMi1kaW1lbnNpb25hbCBhcnJheXMsIHRoZSBnZXRFbGVtZW50KCkgZnVuY3Rpb24gdGFrZXMgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGVzCmZvciB0aGUgZGVzaXJlZCBlbGVtZW50LCBhbmQgdGhlIGNvdW50KCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFycmF5cyAoeCBheGlzKS4KJm5ic3A7IFNpbmNlIHRoZSBzaXplIG9mIGVhY2ggYXJyYXkgZWxlbWVudCBpbiB0aGUgcmVzb3VyY2UgMi1EIGFycmF5cyBzaG91bGQgYWx3YXlzIGJlCnRoZSBzYW1lLCB0aGlzIHByb3ZpZGVzIGFuIGVhc3ktdG8tdXNlIEMgaW50ZXJmYWNlLiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPjxmb250IHNpemU9Ii0xIiBmYWNlPSJDb3VyaWVyIE5ldyI+dm9pZCBjb3VudEFycmF5SXRlbXMoaW50MzJfdCogcm93cywgaW50MzJfdCogY29sdW1ucywKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8qIG90aGVyIHBhcmFtcyAqLyk7CgppbnQzMl90IGdldDJkQXJyYXlFbGVtZW50KGludDMyX3Qgcm93SW5kZXgsJm5ic3A7CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpbnQzMl90IGNvbEluZGV4LAombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgLyogb3RoZXIgcGFyYW1zICovLCZuYnNwOwombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVUNoYXIqIHJlc3VsdCwmbmJzcDsKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGludDMyX3QgbWF4UmVzdWx0U2l6ZSwKJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IFVFcnJvckNvZGUqIGVycik7PC9mb250PjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8aDM+PGEgTkFNRT0iV2hlcmVUb0ZpbmRNb3JlIj48L2E+PHU+V2hlcmUgdG8gRmluZCBNb3JlIEluZm9ybWF0aW9uPC91PjwvaDM+CjxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9qYXZhL3Rvb2xzL2ludGVybmF0aW9uYWwtY2xhc3Nlcy8iPgoKPHA+aHR0cDovL3d3dy5pYm0uY29tL2phdmEvdG9vbHMvaW50ZXJuYXRpb25hbC1jbGFzc2VzLzwvYT4gaXMgYSBwb2ludGVyIHRvIGdlbmVyYWwKaW5mb3JtYXRpb24gYWJvdXQgdGhlIEludGVybmF0aW9uYWwgQ2xhc3NlcyBGb3IgVW5pY29kZS4gPC9wPgoKPHA+PGEgaHJlZj0iaHRtbC9haW5kZXguaHRtbCI+aHRtbC9haW5kZXguaHRtbDwvYT4gaXMgYW4gYWxwaGFiZXRpY2FsIGluZGV4IHRvIGRldGFpbGVkCkFQSSBkb2N1bWVudGF0aW9uLiA8YnI+CjxhIGhyZWY9Imh0bWwvSElFUmphdmEuaHRtbCI+aHRtbC9ISUVSamF2YS5odG1sPC9hPiBpcyBhIGhpZXJhcmNoaWNhbCBpbmRleCB0byBkZXRhaWxlZApBUEkgZG9jdW1lbnRhdGlvbi4gPC9wPgoKPHA+PGEgaHJlZj0iZG9jcy9jb2xsYXRlLmh0bWwiPmRvY3NcY29sbGF0ZS5odG1sPC9hPiBpcyBhbiBvdmVydmlldyB0byBDb2xsYXRpb24uIDwvcD4KCjxwPjxhIGhyZWY9ImRvY3MvQnJlYWtJdGVyYXRvci5odG1sIj5kb2NzXEJyZWFrSXRlcmF0b3IuaHRtbDwvYT4gaXMgYSBkaWFncmFtIHNob3dpbmcgaG93CkJyZWFrSXRlcmF0b3IgcHJvY2Vzc2VzIHRleHQgZWxlbWVudHMuIDwvcD4KCjxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS9qYXZhL2VkdWNhdGlvbi9pbnRlcm5hdGlvbmFsLXVuaWNvZGUvdW5pY29kZTEuaHRtbCI+aHR0cDovL3d3dy5pYm0uY29tL2phdmEvZWR1Y2F0aW9uL2ludGVybmF0aW9uYWwtdW5pY29kZS91bmljb2RlMS5odG1sPC9hPgppcyBhIHBvaW50ZXIgdG8gaW5mb3JtYXRpb24gb24gaG93IHRvIG1ha2UgYXBwbGljYXRpb25zIGdsb2JhbC4gPGJyPgombmJzcDsgPC9wPgoKPGgzPjxhIE5BTUU9IlN1Ym1pdHRpbmdDb21tZW50cyI+PC9hPjx1PlN1Ym1pdHRpbmcgQ29tbWVudHMsIFJlcXVlc3RpbmcgRmVhdHVyZXMgYW5kClJlcG9ydGluZyBCdWdzPC91PjwvaDM+Cgo8cD5UbyBzdWJtaXQgY29tbWVudHMsIHJlcXVlc3QgZmVhdHVyZXMgYW5kIHJlcG9ydCBidWdzLCBwbGVhc2UgY29udGFjdCB1cy4mbmJzcDsgV2hpbGUgd2UKYXJlIG5vdCBhYmxlIHRvIHJlc3BvbmQgaW5kaXZpZHVhbGx5IHRvIGVhY2ggY29tbWVudCwgd2UgZG8gcmV2aWV3IGFsbCBjb21tZW50cy4gU2VuZApJbnRlcm5ldCBlbWFpbCB0byA8YSBocmVmPSJtYWlsdG86aWN1NGNAdXMuaWJtLmNvbSI+aWN1NGNAdXMuaWJtLmNvbS48L2E+IDxicj4KPC9wPgoKPGhyPgoKPHA+qSBDb3B5cmlnaHQgMTk5NyBUYWxpZ2VudCwgSW5jLiA8YnI+CqkgQ29weXJpZ2h0IDE5OTctMTk5OSBJQk0gQ29ycG9yYXRpb24gPGJyPgpJQk0gQ2VudGVyIGZvciBKYXZhIFRlY2hub2xvZ3kgU2lsaWNvbiBWYWxsZXksIDxicj4KMTAyNzUgTiBEZSBBbnphIEJsdmQuLCBDdXBlcnRpbm8sIENBIDk1MDE0IDxicj4KQWxsIHJpZ2h0cyByZXNlcnZlZC4gPC9wPgoKPGhyPgo8L2JvZHk+CjwvaHRtbD4K