PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC4xIFRyYW5zaXRpb25hbC8vRU4iPgoKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KPHRpdGxlPkJvb3N0Lk11bHRpSW5kZXggRG9jdW1lbnRhdGlvbiAtIEluZGV4IHJlZmVyZW5jZTwvdGl0bGU+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPgo8bGluayByZWw9InByZXYiIGhyZWY9Im11bHRpX2luZGV4X2NvbnRhaW5lci5odG1sIj4KPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaW5kZXguaHRtbCI+CjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ib3JkX2luZGljZXMuaHRtbCI+CjwvaGVhZD4KCjxib2R5Pgo8aDE+PGltZyBzcmM9Ii4uLy4uLy4uLy4uL2Jvb3N0LnBuZyIgYWx0PSJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiBhbGlnbj0KIm1pZGRsZSIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiI+Qm9vc3QuTXVsdGlJbmRleCBJbmRleCByZWZlcmVuY2U8L2gxPgoKPGRpdiBjbGFzcz0icHJldl9saW5rIj48YSBocmVmPSJtdWx0aV9pbmRleF9jb250YWluZXIuaHRtbCI+PGltZyBzcmM9Ii4uL3ByZXYuZ2lmIiBhbHQ9Im11bHRpX2luZGV4X2NvbnRhaW5lciByZWZlcmVuY2UiIGJvcmRlcj0iMCI+PGJyPgo8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+IHJlZmVyZW5jZQo8L2E+PC9kaXY+CjxkaXYgY2xhc3M9InVwX2xpbmsiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi91cC5naWYiIGFsdD0iQm9vc3QuTXVsdGlJbmRleCByZWZlcmVuY2UiIGJvcmRlcj0iMCI+PGJyPgpCb29zdC5NdWx0aUluZGV4IHJlZmVyZW5jZQo8L2E+PC9kaXY+CjxkaXYgY2xhc3M9Im5leHRfbGluayI+PGEgaHJlZj0ib3JkX2luZGljZXMuaHRtbCI+PGltZyBzcmM9Ii4uL25leHQuZ2lmIiBhbHQ9Im9yZGVyZWQgaW5kaWNlcyIgYm9yZGVyPSIwIj48YnI+Ck9yZGVyZWQgaW5kaWNlcwo8L2E+PC9kaXY+PGJyIGNsZWFyPSJhbGwiIHN0eWxlPSJjbGVhcjogYWxsOyI+Cgo8aHI+Cgo8aDI+Q29udGVudHM8L2gyPgoKPHVsPgogIDxsaT48YSBocmVmPSIjaW5kZXhfY29uY2VwdHMiPkluZGV4IGNvbmNlcHRzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNjb21wbGV4aXR5X3NpZ25hdHVyZSI+Q29tcGxleGl0eSBzaWduYXR1cmU8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI2luZGV4X3NwZWNpZmljYXRpb24iPkluZGV4IHNwZWNpZmljYXRpb248L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI2luZGV4ZWRfYnlfc3lub3BzaXMiPkhlYWRlcgogICAgPGNvZGU+ImJvb3N0L211bHRpX2luZGV4L2luZGV4ZWRfYnkuaHBwIjwvY29kZT4gc3lub3BzaXM8L2E+CiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjaW5kZXhlZF9ieSI+Q2xhc3MgdGVtcGxhdGUgPGNvZGU+aW5kZXhlZF9ieTwvY29kZT48L2E+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+PGEgaHJlZj0iI3RhZ3MiPlRhZ3M8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3RhZ19zeW5vcHNpcyI+SGVhZGVyCiAgICA8Y29kZT4iYm9vc3QvbXVsdGlfaW5kZXgvdGFnLmhwcCI8L2NvZGU+IHN5bm9wc2lzPC9hPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI3RhZyI+Q2xhc3MgdGVtcGxhdGUgPGNvZGU+dGFnPC9jb2RlPjwvYT48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48YSBocmVmPSIjaW5kZXhfY2F0YWxvZyI+SW5kaWNlcyBwcm92aWRlZCBieSBCb29zdC5NdWx0aUluZGV4PC9hPgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2tleV9iYXNlZF9pbmRpY2VzIj5LZXktYmFzZWQgaW5kaWNlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI290aGVyX2luZGljZXMiPk90aGVyIHR5cGVzPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxhIGhyZWY9IiN2aWV3cyI+SW5kZXggdmlld3M8L2E+PC9saT4KPC91bD4KCjxoMj48YSBuYW1lPSJpbmRleF9jb25jZXB0cyI+SW5kZXggY29uY2VwdHM8L2E+PC9oMj4KCjxwPgo8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+IGluc3RhbnRpYXRpb25zIGNvbXByaXNlIG9uZSBvciBtb3JlIGluZGljZXMKc3BlY2lmaWVkIGF0IGNvbXBpbGUgdGltZS4gRWFjaCBpbmRleCBhbGxvd3MgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIGVsZW1lbnRzCmNvbnRhaW5lZCBpbiBhIGRlZmluaXRlIG1hbm5lci4gRm9yIGluc3RhbmNlLAo8YSBocmVmPSJvcmRfaW5kaWNlcy5odG1sIj5vcmRlcmVkIGluZGljZXM8L2E+CnByb3ZpZGUgYSBzZXQtbGlrZSBpbnRlcmZhY2UgdG8gdGhlIGVsZW1lbnRzLCB3aGVyZWFzCjxhIGhyZWY9InNlcV9pbmRpY2VzLmh0bWwiPnNlcXVlbmNlZCBpbmRpY2VzPC9hPiBtaW1pYyB0aGUgZnVuY3Rpb25hbGl0eQpvZiA8Y29kZT5zdGQ6Omxpc3Q8L2NvZGU+Lgo8L3A+Cgo8cD4KSW5kaWNlcyBhcmUgbm90IGlzb2xhdGVkIG9iamVjdHMsIGFuZCBzbyBjYW5ub3QgYmUgY29uc3RydWN0ZWQgb24gdGhlaXIKb3duLiBSYXRoZXIgdGhleSBhcmUgZW1iZWRkZWQgaW50byBhIDxjb2RlPm11bHRpX2luZGV4X2NvbnRhaW5lcjwvY29kZT4gYXMgc3BlY2lmaWVkIGJ5Cm1lYW5zIG9mIGFuIDxhIGhyZWY9IiNpbmRleF9zcGVjaWZpY2F0aW9uIj5pbmRleCBzcGVjaWZpZXI8L2E+LiBUaGUgbmFtZSBvZgp0aGUgaW5kZXggY2xhc3MgaW1wbGVtZW50YXRpb24gcHJvcGVyIGlzIG5ldmVyIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHVzZXIsIHdobwpoYXMgb25seSBhY2Nlc3MgdG8gdGhlIGFzc29jaWF0ZWQgaW5kZXggc3BlY2lmaWVyLgo8L3A+Cgo8cD4KSW5zZXJ0aW9uIGFuZCBlcmFzaW5nIG9mIGVsZW1lbnRzIGFyZSBhbHdheXMgcGVyZm9ybWVkIHRocm91Z2ggdGhlCmFwcHJvcHJpYXRlIGludGVyZmFjZSBvZiBzb21lIGluZGV4IG9mIHRoZSA8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+Owp0aGVzZSBvcGVyYXRpb25zLCBob3dldmVyLCBkbyBoYXZlIGFuIGltcGFjdCBvbiBhbGwgb3RoZXIgaW5kaWNlcyBhcwp3ZWxsOiBmb3IgaW5zdGFuY2UsIGluc2VydGlvbiB0aHJvdWdoIGEgZ2l2ZW4gaW5kZXggbWF5IGZhaWwgYmVjYXVzZQp0aGVyZSBleGlzdHMgYW5vdGhlciBpbmRleCB3aGljaCBiYW5zIHRoZSBvcGVyYXRpb24gaW4gb3JkZXIgdG8gcHJlc2VydmUKaXRzIGludmFyaWFudCAobGlrZSB1bmlxdWVuZXNzIG9mIGVsZW1lbnRzLikgVGhpcyBjaXJjdW1zdGFuY2UsIHJhdGhlcgp0aGFuIGJlaW5nIGFuIG9ic3RhY2xlLCB5aWVsZHMgbXVjaCBvZiB0aGUgcG93ZXIgb2YgQm9vc3QuTXVsdGlJbmRleDoKZXF1aXZhbGVudCBjb25zdHJ1Y3Rpb25zIGJhc2VkIG9uIG1hbnVhbCBjb21wb3NpdGlvbiBvZiBzdGFuZGFyZApjb250YWluZXJzIHdvdWxkIGhhdmUgdG8gYWRkIGEgZmFpciBhbW91bnQgb2YgY29kZSBpbiBvcmRlciB0bwpnbG9iYWxseSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBvZiBlYWNoIGNvbnRhaW5lciB3aGlsZSBndWFyYW50ZWVpbmcKdGhhdCBhbGwgb2YgdGhlbSBhcmUgc3luY2hyb25pemVkLiBUaGUgZ2xvYmFsIG9wZXJhdGlvbnMgcGVyZm9ybWVkCmluIGEgam9pbnQgbWFubmVyIGFtb25nIHRoZSB2YXJpb3VzIGluZGljZXMgY2FuIGJlIHJlZHVjZWQgdG8Kc2l4IHByaW1pdGl2ZXM6Cjx1bD4KICA8bGk+Q29weWluZyw8L2xpPgogIDxsaT5pbnNlcnRpb24gb2YgYW4gZWxlbWVudCw8L2xpPgogIDxsaT5oaW50ZWQgaW5zZXJ0aW9uLCB3aGVyZSBhIHByZWV4aXN0aW5nIGVsZW1lbnQgaXMgc3VnZ2VzdGVkIGluCiAgICBvcmRlciB0byBpbXByb3ZlIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBvcGVyYXRpb24sPC9saT4KICA8bGk+ZGVsZXRpb24gb2YgYW4gZWxlbWVudCw8L2xpPgogIDxsaT5yZXBsYWNlbWVudCBvZiB0aGUgdmFsdWUgb2YgYW4gZWxlbWVudCwKICAgIHdoaWNoIG1heSB0cmlnZ2VyIHRoZSByZWFycmFuZ2VtZW50IG9mIHRoaXMgZWxlbWVudCBpbiBvbmUgb3IKICAgIG1vcmUgaW5kaWNlcywgb3IgdGhlIGJhbm5pbmcgb2YgdGhlIHJlcGxhY2VtZW50LDwvbGk+CiAgPGxpPm1vZGlmaWNhdGlvbiBvZiBhbiBlbGVtZW50LCBhbmQgaXRzIHN1YnNlcXVlbnQKICAgIHJlYXJyYW5nZW1lbnQvYmFubmluZyBieSB0aGUgdmFyaW91cyBpbmRpY2VzLgo8L3VsPgpUaGUgbGFzdCB0d28gcHJpbWl0aXZlcyBkZXNlcnZlIHNvbWUgZnVydGhlciBleHBsYW5hdGlvbjogaW4gb3JkZXIgdG8KZ3VhcmFudGVlIHRoZSBpbnZhcmlhbnRzIGFzc29jaWF0ZWQgdG8gZWFjaCBpbmRleCAoZS5nLiBzb21lIGRlZmluaXRlCm9yZGVyaW5nLCkgZWxlbWVudHMgb2YgYSA8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+IGFyZSBub3QgbXV0YWJsZS4KVG8gb3ZlcmNvbWUgdGhpcyByZXN0cmljdGlvbiwgaW5kaWNlcyBleHBvc2UgbWVtYmVyIGZ1bmN0aW9ucwpmb3IgdXBkYXRpbmcgYW5kIG1vZGlmeWluZywgd2hpY2ggYWxsb3cgZm9yIHRoZSBtdXRhdGlvbiBvZiBlbGVtZW50cwppbiBhIGNvbnRyb2xsZWQgZmFzaGlvbi4gSW1tdXRhYmlsaXR5IG9mIGVsZW1lbnRzIGRvZXMgbm90IHNpZ25pZmljYW50bHkKaW1wYWN0IHRoZSBpbnRlcmZhY2Ugb2Ygb3JkZXJlZCBpbmRpY2VzLCBhcyBpdCBpcyBiYXNlZCB1cG9uICB0aGF0IG9mCjxjb2RlPnN0ZDo6c2V0PC9jb2RlPiBhbmQgPGNvZGU+c3RkOm11bHRpc2V0PC9jb2RlPiwgYW5kIHRoZXNlIGNvbnRhaW5lcnMKYWxzbyBoYXZlIG5vbi1tdXRhYmxlIGVsZW1lbnRzOyBidXQgaXQgbWF5IGNvbWUgYXMgYSBzdXJwcmlzZSB3aGVuIGRlYWxpbmcKd2l0aCBzZXF1ZW5jZWQgaW5kaWNlcywgd2hpY2ggYXJlIGRlc2lnbmVkIHVwb24gdGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQKYnkgPGNvZGU+c3RkOjpsaXN0PC9jb2RlPi4gCjwvcD4KCjxwPgpUaGVzZSBnbG9iYWwgb3BlcmF0aW9ucyBhcmUgbm90IGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHVzZXIsIGJ1dCByYXRoZXIKdGhleSBhcmUgd3JhcHBlZCBhcyBhcHByb3ByaWF0ZSBieSBlYWNoIGluZGV4IChmb3IgaW5zdGFuY2UsIG9yZGVyZWQgaW5kaWNlcwpwcm92aWRlIGEgc2V0LWxpa2Ugc3VpdGUgb2YgaW5zZXJ0aW9uIG1lbWJlciBmdW5jdGlvbnMsIHdoZXJlYXMgc2VxdWVuY2VkCmFuZCByYW5kb20gYWNjZXNzIGluZGljZXMgaGF2ZSA8Y29kZT5wdXNoX2JhY2s8L2NvZGU+IGFuZCA8Y29kZT5wdXNoX2Zyb250PC9jb2RlPgpvcGVyYXRpb25zLikgQm9vc3QuTXVsdGlJbmRleCBwb3NlcyBubyBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgb24KdGhlIGludGVyZmFjZSBvZiBpbmRpY2VzLCBzYXZlIHRoYXQgdGhleSBtdXN0IG1vZGVsCjxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9Db250YWluZXIuaHRtbCI+Cjxjb2RlPkNvbnRhaW5lcjwvY29kZT48L2E+ICh3aXRob3V0IHRoZSByZXF1aXJlbWVudCBvZiBiZWluZwo8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvQXNzaWduYWJsZS5odG1sIj4KPGNvZGU+QXNzaWduYWJsZTwvY29kZT48L2E+LikKPC9wPgoKPGgyPjxhIG5hbWU9ImNvbXBsZXhpdHlfc2lnbmF0dXJlIj5Db21wbGV4aXR5IHNpZ25hdHVyZTwvYT48L2gyPgoKPHA+ClNvbWUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBhbiBpbmRleCBpbnRlcmZhY2UgYXJlIGltcGxlbWVudGVkIGJ5Cmdsb2JhbCBwcmltaXRpdmVzIGZyb20gdGhlIGxpc3QgYWJvdmUuIENvbXBsZXhpdHkgb2YgdGhlc2Ugb3BlcmF0aW9ucwp0aHVzIGRlcGVuZHMgb24gYWxsIGluZGljZXMgb2YgYSBnaXZlbiA8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+LCBub3QganVzdAp0aGUgY3VycmVudGx5IHVzZWQgaW5kZXguCjwvcD4KCjxwPgpJbiBvcmRlciB0byBlc3RhYmxpc2ggY29tcGxleGl0eSBlc3RpbWF0ZXMsIGFuIGluZGV4IGlzIGNoYXJhY3Rlcml6ZWQKYnkgaXRzIDxpPmNvbXBsZXhpdHkgc2lnbmF0dXJlPC9pPiwgY29uc2lzdGluZyBvZiB0aGUgZm9sbG93aW5nCmFzc29jaWF0ZWQgZnVuY3Rpb25zIG9uIHRoZSBudW1iZXIgb2YgZWxlbWVudHM6Cjx1bD4KICA8bGk+PGNvZGU+YyhuKTwvY29kZT46IGNvcHlpbmcsCiAgPGxpPjxjb2RlPmkobik8L2NvZGU+OiBpbnNlcnRpb24sCiAgPGxpPjxjb2RlPmgobik8L2NvZGU+OiBoaW50ZWQgaW5zZXJ0aW9uLAogIDxsaT48Y29kZT5kKG4pPC9jb2RlPjogZGVsZXRpb24sCiAgPGxpPjxjb2RlPnIobik8L2NvZGU+OiByZXBsYWNlbWVudCwKICA8bGk+PGNvZGU+bShuKTwvY29kZT46IG1vZGlmeWluZy4KPC91bD4KCjwvcD4KRWFjaCBmdW5jdGlvbiB5aWVsZHMgdGhlIGNvbXBsZXhpdHkgZXN0aW1hdGUgb2YgdGhlIGNvbnRyaWJ1dGlvbiBvZiB0aGUgaW5kZXgKdG8gdGhlIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIHByaW1pdGl2ZS4gTGV0IHVzIGNvbnNpZGVyCmFuIGluc3RhbnRpYXRpb24gb2YgPGNvZGU+bXVsdGlfaW5kZXhfY29udGFpbmVyPC9jb2RlPgp3aXRoIDxjb2RlPk48L2NvZGU+IGluZGljZXMgbGFiZWxsZWQgPGNvZGU+MDwvY29kZT4sLi4uLDxjb2RlPk4tMTwvY29kZT4Kd2hvc2UgY29tcGxleGl0eSBzaWduYXR1cmVzIGFyZQooPGNvZGU+YzxzdWI+aTwvc3ViPjwvY29kZT4sPGNvZGU+aTxzdWI+aTwvc3ViPjwvY29kZT4sPGNvZGU+aDxzdWI+aTwvc3ViPjwvY29kZT4sPGNvZGU+ZDxzdWI+aTwvc3ViPjwvY29kZT4sPGNvZGU+cjxzdWI+aTwvc3ViPjwvY29kZT4sPGNvZGU+bTxzdWI+aTwvc3ViPjwvY29kZT4pOwp0aGUgaW5zZXJ0aW9uIG9mIGFuIGVsZW1lbnQgaW4gc3VjaCBhIGNvbnRhaW5lciBpcyB0aGVuIG9mIGNvbXBsZXhpdHkKPGNvZGU+TyhpPHN1Yj4wPC9zdWI+KG4pK7e3tytpPHN1Yj5OLTE8L3N1Yj4obikpPC9jb2RlPiB3aGVyZSA8Y29kZT5uPC9jb2RlPgppcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLiBUbyBhYmJyZXZpYXRlIG5vdGF0aW9uLCB3ZSBhZG9wdCB0aGUKZm9sbG93aW5nIGRlZmluaXRpb25zOgo8dWw+CiAgPGxpPjxjb2RlPkMobik9YzxzdWI+MDwvc3ViPihuKSu3t7crYzxzdWI+Ti0xPC9zdWI+KG4pPC9jb2RlPiw8L2xpPgogIDxsaT48Y29kZT5JKG4pPWk8c3ViPjA8L3N1Yj4obikrt7e3K2k8c3ViPk4tMTwvc3ViPihuKTwvY29kZT4sPC9saT4KICA8bGk+PGNvZGU+SChuKT1oPHN1Yj4wPC9zdWI+KG4pK7e3tytoPHN1Yj5OLTE8L3N1Yj4obik8L2NvZGU+LDwvbGk+CiAgPGxpPjxjb2RlPkQobik9ZDxzdWI+MDwvc3ViPihuKSu3t7crZDxzdWI+Ti0xPC9zdWI+KG4pPC9jb2RlPiw8L2xpPgogIDxsaT48Y29kZT5SKG4pPXI8c3ViPjA8L3N1Yj4obikrt7e3K3I8c3ViPk4tMTwvc3ViPihuKTwvY29kZT4sPC9saT4KICA8bGk+PGNvZGU+TShuKT1tPHN1Yj4wPC9zdWI+KG4pK7e3tyttPHN1Yj5OLTE8L3N1Yj4obik8L2NvZGU+LjwvbGk+CjwvdWw+CkZvciBpbnN0YW5jZSwgY29uc2lkZXIgYSA8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+IHdpdGggdHdvIG9yZGVyZWQgaW5kaWNlcywKZm9yIHdoaWNoIDxjb2RlPmkobik9bG9nKG4pPC9jb2RlPiwgYW5kIGEgc2VxdWVuY2VkIGluZGV4IHdpdGggPGNvZGU+aShuKT0xPC9jb2RlPgooY29uc3RhbnQgdGltZSBpbnNlcnRpb24pLiBJbnNlcnRpb24gb2YgYW4gZWxlbWVudCBpbnRvIHRoaXMgPGNvZGU+bXVsdGlfaW5kZXhfY29udGFpbmVyPC9jb2RlPgppcyB0aGVuIG9mIGNvbXBsZXhpdHkKPGJsb2NrcXVvdGU+Cjxjb2RlPk8oSShuKSk9TygyKmxvZyhuKSsxKT1PKGxvZyhuKSk8L2NvZGU+Lgo8L2Jsb2NrcXVvdGU+CjwvcD4KCjxoMj48YSBuYW1lPSJpbmRleF9zcGVjaWZpY2F0aW9uIj5JbmRleCBzcGVjaWZpY2F0aW9uPC9hPjwvaDI+Cgo8cD4KSW5kZXggc3BlY2lmaWVycyBhcmUgcGFzc2VkIGFzIGluc3RhbnRpYXRpb24gYXJndW1lbnRzIHRvCjxjb2RlPm11bHRpX2luZGV4X2NvbnRhaW5lcjwvY29kZT4gYW5kIHByb3ZpZGUgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBpbmNvcnBvcmF0ZQp0aGUgY29ycmVzcG9uZGluZyBpbmRpY2VzLiBGdXR1cmUgcmVsZWFzZXMgb2YgQm9vc3QuTXVsdGlJbmRleCBtYXkgYWxsb3cgZm9yCnNwZWNpZmljYXRpb24gb2YgdXNlci1kZWZpbmVkIGluZGljZXMuIE1lYW53aGlsZSwgdGhlIHJlcXVpcmVtZW50cyBmb3IgYW4gaW5kZXgKc3BlY2lmaWVyIHJlbWFpbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiBDdXJyZW50bHksIEJvb3N0Lk11bHRpSW5kZXggcHJvdmlkZXMgdGhlCmluZGV4IHNwZWNpZmllcnMKPHVsPgogIDxsaT48YSBocmVmPSJvcmRfaW5kaWNlcy5odG1sI3VuaXF1ZV9ub25fdW5pcXVlIj48Y29kZT5vcmRlcmVkX3VuaXF1ZTwvY29kZT4gYW5kCiAgICA8Y29kZT5vcmRlcmVkX25vbl91bmlxdWU8L2NvZGU+PC9hPiBmb3IKICAgIDxhIGhyZWY9Im9yZF9pbmRpY2VzLmh0bWwiPm9yZGVyZWQgaW5kaWNlczwvYT4sPC9saT4KICA8bGk+PGEgaHJlZj0iaGFzaF9pbmRpY2VzLmh0bWwjdW5pcXVlX25vbl91bmlxdWUiPjxjb2RlPmhhc2hlZF91bmlxdWU8L2NvZGU+IGFuZAogICAgPGNvZGU+aGFzaGVkX25vbl91bmlxdWU8L2NvZGU+PC9hPiBmb3IKICAgIDxhIGhyZWY9Imhhc2hfaW5kaWNlcy5odG1sIj5oYXNoZWQgaW5kaWNlczwvYT4sPC9saT4KICA8bGk+PGEgaHJlZj0ic2VxX2luZGljZXMuaHRtbCNzZXF1ZW5jZWQiPjxjb2RlPnNlcXVlbmNlZDwvY29kZT48L2E+IGZvcgogICAgPGEgaHJlZj0ic2VxX2luZGljZXMuaHRtbCI+c2VxdWVuY2VkIGluZGljZXM8L2E+PC9saT4KICA8bGk+YW5kIDxhIGhyZWY9InJuZF9pbmRpY2VzLmh0bWwjcmFuZG9tX2FjY2VzcyI+PGNvZGU+cmFuZG9tX2FjY2VzczwvY29kZT48L2E+IGZvcgogICAgPGEgaHJlZj0icm5kX2luZGljZXMuaHRtbCI+cmFuZG9tIGFjY2VzcyBpbmRpY2VzPC9hPi48L2xpPgo8L3VsPgo8L3A+Cgo8aDI+CjxhIG5hbWU9ImluZGV4ZWRfYnlfc3lub3BzaXMiPkhlYWRlcgo8YSBocmVmPSIuLi8uLi8uLi8uLi9ib29zdC9tdWx0aV9pbmRleC9pbmRleGVkX2J5LmhwcCI+Cjxjb2RlPiJib29zdC9tdWx0aV9pbmRleC9pbmRleGVkX2J5LmhwcCI8L2NvZGU+PC9hPiBzeW5vcHNpczwvYT48L2gyPgoKPGJsb2NrcXVvdGU+PHByZT4KPHNwYW4gY2xhc3M9a2V5d29yZD5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD57PC9zcGFuPgoKPHNwYW4gY2xhc3M9a2V5d29yZD5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+bXVsdGlfaW5kZXg8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD57PC9zcGFuPgoKPHNwYW4gY2xhc3M9a2V5d29yZD50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9a2V5d29yZD50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj5UMDwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiwuLi4sPC9zcGFuPjxzcGFuIGNsYXNzPWtleXdvcmQ+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+VG48L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD4mZ3Q7PC9zcGFuPgo8c3BhbiBjbGFzcz1rZXl3b3JkPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj5pbmRleGVkX2J5PC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+Ozwvc3Bhbj4KCjxzcGFuIGNsYXNzPXNwZWNpYWw+fTwvc3Bhbj4gPHNwYW4gY2xhc3M9Y29tbWVudD4vLyBuYW1lc3BhY2UgYm9vc3Q6Om11bHRpX2luZGV4PC9zcGFuPiAKCjxzcGFuIGNsYXNzPXNwZWNpYWw+fTwvc3Bhbj4gPHNwYW4gY2xhc3M9Y29tbWVudD4vLyBuYW1lc3BhY2UgYm9vc3Q8L3NwYW4+CjwvcHJlPjwvYmxvY2txdW90ZT4KCjxoMz48YSBuYW1lPSJpbmRleGVkX2J5Ij5DbGFzcyB0ZW1wbGF0ZSA8Y29kZT5pbmRleGVkX2J5PC9jb2RlPjwvYT48L2gzPgoKPHA+Cjxjb2RlPmluZGV4ZWRfYnk8L2NvZGU+IGlzIGEgbW9kZWwgb2YKPGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicy9tcGwvZG9jL3JlZm1hbnVhbC9yYW5kb20tYWNjZXNzLXNlcXVlbmNlLmh0bWwiPgo8Y29kZT5NUEwgUmFuZG9tIEFjY2VzcyBTZXF1ZW5jZTwvY29kZT48L2E+IGFuZAo8YSBocmVmPSIuLi8uLi8uLi8uLi9saWJzL21wbC9kb2MvcmVmbWFudWFsL2V4dGVuc2libGUtc2VxdWVuY2UuaHRtbCI+Cjxjb2RlPk1QTCBFeHRlbnNpYmxlIFNlcXVlbmNlPC9jb2RlPjwvYT4gbWVhbnQgdG8gYmUgdXNlZCB0byBzcGVjaWZ5IGEKY29tcGlsZS10aW1lIGxpc3Qgb2YgaW5kaWNlcyBhcyB0aGUgPGNvZGU+SW5kZXhTcGVjaWZpZXJMaXN0PC9jb2RlPiBvZgo8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+Lgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPgo8c3BhbiBjbGFzcz1rZXl3b3JkPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1rZXl3b3JkPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz1pZGVudGlmaWVyPlQwPC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+LC4uLiw8L3NwYW4+PHNwYW4gY2xhc3M9a2V5d29yZD50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj5Ubjwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiZndDs8L3NwYW4+CjxzcGFuIGNsYXNzPWtleXdvcmQ+c3RydWN0PC9zcGFuPiA8c3BhbiBjbGFzcz1pZGVudGlmaWVyPmluZGV4ZWRfYnk8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD47PC9zcGFuPgo8L3ByZT48L2Jsb2NrcXVvdGU+Cgo8cD4KRWFjaCB1c2VyLXByb3ZpZGVkIGVsZW1lbnQgb2YgPGNvZGU+aW5kZXhlZF9saXN0PC9jb2RlPiBtdXN0IGJlIGFuIGluZGV4CnNwZWNpZmllci4gQXQgbGVhc3QgYW4gZWxlbWVudCBtdXN0IGJlIHByb3ZpZGVkLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMKb2YgYW4gPGNvZGU+aW5kZXhlZF9ieTwvY29kZT4gc2VxdWVuY2UgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KPC9wPgoKPGgyPjxhIG5hbWU9InRhZ3MiPlRhZ3M8L2E+PC9oMj4KCjxwPgpUYWdzIGFyZSBqdXN0IGNvbnZlbnRpb25hbCB0eXBlcyB1c2VkIGFzIG1uZW1vbmljcyBmb3IgaW5kaWNlcyBvZiBhbgo8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+LCBhcyBmb3IgaW5zdGFuY2UgaW4gbWVtYmVyIGZ1bmN0aW9uIDxjb2RlPmdldDwvY29kZT4uCkVhY2ggaW5kZXggY2FuIGhhdmUgbm9uZSwgb25lIG9yIG1vcmUgdGFncyBhc3NvY2lhdGVkLiBUaGUgd2F5IHRhZ3MgYXJlIGFzc2lnbmVkCnRvIGEgZ2l2ZW4gaW5kZXggaXMgZGVwZW5kZW50IG9uIHRoZSBwYXJ0aWN1bGFyIGluZGV4IHNwZWNpZmllci4gSG93ZXZlciwKZm9yIGNvbnZlbmllbmNlIGFsbCBpbmRpY2VzIG9mIEJvb3N0Lk11bHRpSW5kZXggc3VwcG9ydCB0YWdnaW5nIHRocm91Z2ggdGhlCmNsYXNzIHRlbXBsYXRlIDxhIGhyZWY9IiN0YWciPjxjb2RlPnRhZzwvY29kZT48L2E+Lgo8L3A+Cgo8aDI+CjxhIG5hbWU9InRhZ19zeW5vcHNpcyI+SGVhZGVyCjxhIGhyZWY9Ii4uLy4uLy4uLy4uL2Jvb3N0L211bHRpX2luZGV4L3RhZy5ocHAiPgo8Y29kZT4iYm9vc3QvbXVsdGlfaW5kZXgvdGFnLmhwcCI8L2NvZGU+PC9hPiBzeW5vcHNpczwvYT48L2gyPgoKPGJsb2NrcXVvdGU+PHByZT4KPHNwYW4gY2xhc3M9a2V5d29yZD5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD57PC9zcGFuPgoKPHNwYW4gY2xhc3M9a2V5d29yZD5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+bXVsdGlfaW5kZXg8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD57PC9zcGFuPgoKPHNwYW4gY2xhc3M9a2V5d29yZD50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9a2V5d29yZD50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj5UMDwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiwuLi4sPC9zcGFuPjxzcGFuIGNsYXNzPWtleXdvcmQ+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPWlkZW50aWZpZXI+VG48L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD4mZ3Q7PC9zcGFuPgo8c3BhbiBjbGFzcz1rZXl3b3JkPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj50YWc8L3NwYW4+PHNwYW4gY2xhc3M9c3BlY2lhbD47PC9zcGFuPgoKPHNwYW4gY2xhc3M9c3BlY2lhbD59PC9zcGFuPiA8c3BhbiBjbGFzcz1jb21tZW50Pi8vIG5hbWVzcGFjZSBib29zdDo6bXVsdGlfaW5kZXg8L3NwYW4+IAoKPHNwYW4gY2xhc3M9c3BlY2lhbD59PC9zcGFuPiA8c3BhbiBjbGFzcz1jb21tZW50Pi8vIG5hbWVzcGFjZSBib29zdDwvc3Bhbj4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPGgzPjxhIG5hbWU9InRhZyI+Q2xhc3MgdGVtcGxhdGUgPGNvZGU+dGFnPC9jb2RlPjwvYT48L2gzPgoKPHA+Cjxjb2RlPnRhZzwvY29kZT4gaXMgYSB0eXBlbGlzdCBjb25zdHJ1Y3QgdXNlZCB0byBzcGVjaWZ5IGEgY29tcGlsZS10aW1lCnNlcXVlbmNlIG9mIHRhZ3MgdG8gYmUgYXNzaWduZWQgdG8gYW4gaW5kZXggaW4gaW5zdGFudGlhdGlvbiB0aW1lLgo8L3A+Cgo8YmxvY2txdW90ZT48cHJlPgo8c3BhbiBjbGFzcz1rZXl3b3JkPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1rZXl3b3JkPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz1pZGVudGlmaWVyPlQwPC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+LC4uLiw8L3NwYW4+PHNwYW4gY2xhc3M9a2V5d29yZD50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj5Ubjwvc3Bhbj48c3BhbiBjbGFzcz1zcGVjaWFsPiZndDs8L3NwYW4+CjxzcGFuIGNsYXNzPWtleXdvcmQ+c3RydWN0PC9zcGFuPiA8c3BhbiBjbGFzcz1pZGVudGlmaWVyPnRhZzwvc3Bhbj4KPHNwYW4gY2xhc3M9c3BlY2lhbD57PC9zcGFuPgogIDxzcGFuIGNsYXNzPWtleXdvcmQ+dHlwZWRlZjwvc3Bhbj4gPGI+aW1wbGVtZW50YXRpb24gZGVmaW5lZDwvYj4gPHNwYW4gY2xhc3M9aWRlbnRpZmllcj50eXBlPC9zcGFuPjxzcGFuIGNsYXNzPXNwZWNpYWw+Ozwvc3Bhbj4KPHNwYW4gY2xhc3M9c3BlY2lhbD59Ozwvc3Bhbj4KPC9wcmU+PC9ibG9ja3F1b3RlPgoKPHA+CkVsZW1lbnRzIG9mIDxjb2RlPnRhZzwvY29kZT4gY2FuIGJlIGFueSB0eXBlLCB0aG91Z2ggdGhlIHVzZXIgaXMgZXhwZWN0ZWQKdG8gcHJvdmlkZSBjbGFzc2VzIHdpdGggbW5lbW9uaWMgbmFtZXMuIER1cGxpY2F0ZSBlbGVtZW50cyBhcmUgbm90IGFsbG93ZWQuClRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIDxjb2RlPnRhZzwvY29kZT4gaW5zdGFudGlhdGlvbiBpcwppbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgpUaGUgbmVzdGVkCjxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgbW9kZWwgb2YKPGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicy9tcGwvZG9jL3JlZm1hbnVhbC9yYW5kb20tYWNjZXNzLXNlcXVlbmNlLmh0bWwiPgo8Y29kZT5NUEwgUmFuZG9tIEFjY2VzcyBTZXF1ZW5jZTwvY29kZT48L2E+IGFuZAo8YSBocmVmPSIuLi8uLi8uLi8uLi9saWJzL21wbC9kb2MvcmVmbWFudWFsL2V4dGVuc2libGUtc2VxdWVuY2UuaHRtbCI+Cjxjb2RlPk1QTCBFeHRlbnNpYmxlIFNlcXVlbmNlPC9jb2RlPjwvYT4gY29udGFpbmluZyB0aGUgdHlwZXMgPGNvZGU+VDA8L2NvZGU+LCAuLi4gLAo8Y29kZT5UbjwvY29kZT4gaW4gdGhlIHNhbWUgb3JkZXIgYXMgc3BlY2lmaWVkLgo8L3A+Cgo8aDI+PGEgbmFtZT0iaW5kZXhfY2F0YWxvZyI+SW5kaWNlcyBwcm92aWRlZCBieSBCb29zdC5NdWx0aUluZGV4PC9hPjwvaDI+CgoKPGgzPjxhIG5hbWU9ImtleV9iYXNlZF9pbmRpY2VzIj5LZXktYmFzZWQgaW5kaWNlczwvYT48L2gzPgoKPHA+CkluZGljZXMgb2YgdGhpcyB0eXBlIGFyZSBvcmdhbml6ZWQgYXJvdW5kIDxpPmtleXM8L2k+IG9idGFpbmVkIGZyb20gdGhlCmVsZW1lbnRzLCBhcyBkZXNjcmliZWQgaW4gdGhlIDxhIGhyZWY9ImtleV9leHRyYWN0aW9uLmh0bWwiPmtleSBleHRyYWN0aW9uCnJlZmVyZW5jZTwvYT4uCjx1bD4KICA8bGk+PGEgaHJlZj0ib3JkX2luZGljZXMuaHRtbCI+T3JkZXJlZCBpbmRpY2VzPC9hPiBzb3J0IHRoZSBlbGVtZW50cwogICAgb24gdGhlIGtleSBhbmQgcHJvdmlkZSBmYXN0IGxvb2t1cCBjYXBhYmlsaXRlcy48L2xpPgogIDxsaT48YSBocmVmPSJoYXNoX2luZGljZXMuaHRtbCI+SGFzaGVkIGluZGljZXM8L2E+IG9mZmVyIGhpZ2gKICAgIGVmZmljaWVuY3kgYWNjZXNzIHRocm91Z2ggaGFzaGluZyB0ZWNobmlxdWVzLjwvbGk+CjwvdWw+CjwvcD4KCjxoMz48YSBuYW1lPSJvdGhlcl9pbmRpY2VzIj5PdGhlciB0eXBlczwvYT48L2gzPgoKPHA+Cjx1bD4KICA8bGk+PGEgaHJlZj0ic2VxX2luZGljZXMuaHRtbCI+U2VxdWVuY2VkIGluZGljZXM8L2E+IGFsbG93IHRvIGFycmFuZ2UKICAgIGVsZW1lbnRzIGFzIGluIGEgYmlkaXJlY3Rpb25hbCBsaXN0LjwvbGk+CiAgPGxpPjxhIGhyZWY9InJuZF9pbmRpY2VzLmh0bWwiPlJhbmRvbSBhY2Nlc3MgaW5kaWNlczwvYT4gcHJvdmlkZQogICAgY29uc3RhbnQgdGltZSBwb3NpdGlvbmFsIGFjY2VzcyBhbmQgZnJlZSBvcmRlcmluZyBvZiBlbGVtZW50cy48L2xpPgo8L3VsPgo8L3A+Cgo8aDI+PGEgbmFtZT0idmlld3MiPkluZGV4IHZpZXdzPC9hPjwvaDI+Cgo8cD4KVGhlIGZvbGxvd2luZyBjb25jZXB0IGlzIHVzZWQgYnkgdGhlIHJlYXJyYW5nZSBmYWNpbGl0aWVzIG9mIG5vbiBrZXktYmFzZWQKaW5kaWNlcy4gR2l2ZW4gYW4gaW5kZXggPGNvZGU+aTwvY29kZT4gb2YgdHlwZSA8Y29kZT5JbmRleDwvY29kZT4sIGEgPGk+dmlldwpvZiA8Y29kZT5pPC9jb2RlPjwvaT4gaXMgYW55IHJhbmdlIFs8Y29kZT5maXJzdDwvY29kZT4sPGNvZGU+bGFzdDwvY29kZT4pCndoZXJlIDxjb2RlPmZpcnN0PC9jb2RlPiBhbmQgPGNvZGU+bGFzdDwvY29kZT4gYXJlIG9iamVjdHMgb2YgYSB0eXBlCjxjb2RlPkl0ZXJhdG9yPC9jb2RlPiBtb2RlbGxpbmcKPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL0lucHV0SXRlcmF0b3IuaHRtbCI+Cjxjb2RlPklucHV0IEl0ZXJhdG9yPC9jb2RlPjwvYT4gc3VjaCB0aGF0CjxvbD4KICA8bGk+dGhlIGFzc29jaWF0ZWQgdmFsdWUgdHlwZSBvZiA8Y29kZT5JdGVyYXRvcjwvY29kZT4gaXMgY29udmVydGlibGUKICAgIHRvIDxjb2RlPmNvbnN0IEluZGV4Ojp2YWx1ZV90eXBlJmFtcDs8L2NvZGU+CiAgPC9saT4KICA8bGk+YW5kIGVhY2ggb2YgdGhlIGVsZW1lbnRzIG9mIDxjb2RlPmk8L2NvZGU+IGFwcGVhcnMgZXhhY3RseSBvbmNlIGluCiAgICBbPGNvZGU+Zmlyc3Q8L2NvZGU+LDxjb2RlPmxhc3Q8L2NvZGU+KS4KICA8L2xpPgo8L29sPgpOb3RlIHRoYXQgdGhlIHZpZXcgcmVmZXJzIHRvIHRoZSBhY3R1YWwgZWxlbWVudHMgb2YgPGNvZGU+aTwvY29kZT4sIG5vdCB0bwpjb3BpZXMgb2YgdGhlbS4gQWRkaXRpb25hbGx5LCBhIHZpZXcgaXMgc2FpZCB0byBiZSA8aT5mcmVlPC9pPiBpZiBpdHMgdHJhdmVyc2FsCm9yZGVyIGlzIG5vdCBhZmZlY3RlZCBieSBjaGFuZ2VzIGluIHRoZSB0cmF2ZXJzYWwgb3JkZXIgb2YgPGNvZGU+aTwvY29kZT4uCkV4YW1wbGVzIG9mIGZyZWUgdmlld3MgYXJlOgo8dWw+CiAgPGxpPls8Y29kZT5jLmJlZ2luKCk8L2NvZGU+LDxjb2RlPmMuZW5kKCk8L2NvZGU+KSwgd2hlcmUgPGNvZGU+YzwvY29kZT4gaXMKICAgIGFueSBjb250YWluZXIgb2YgcmVmZXJlbmNlIHdyYXBwZXJzIChmcm9tCiAgICA8YSBocmVmPSIuLi8uLi8uLi8uLi9kb2MvaHRtbC9yZWYuaHRtbCI+Qm9vc3QuUmVmPC9hPikgdG8gdGhlIGVsZW1lbnRzCiAgICBvZiA8Y29kZT5pPC9jb2RlPiBjb250YWluaW5nIGV4YWN0bHkgb25lIHJlZmVyZW5jZSB0byBldmVyeSBlbGVtZW50LgogIDwvbGk+CiAgPGxpPls8Y29kZT5pJy5iZWdpbigpPC9jb2RlPiw8Y29kZT5pJy5lbmQoKTwvY29kZT4pLCB3aGVyZSA8Y29kZT5pJzwvY29kZT4gaXMKICAgIGFueSBpbmRleCBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgPGNvZGU+bXVsdGlfaW5kZXhfY29udGFpbmVyPC9jb2RlPgogICAgYXMgPGNvZGU+aTwvY29kZT4sIGV4Y2VwdCA8Y29kZT5pPC9jb2RlPiBpdHNlbGYuCiAgPC9saT4KICA8bGk+CiAgICBBbnkgcmFuZ2Ugd2hpY2ggaXMgYSBwZXJtdXRhdGlvbiBvZiB0aGUgb25lcyBkZXNjcmliZWQgYWJvdmUsIGFzIGZvcgogICAgaW5zdGFuY2UgWzxjb2RlPmMucmJlZ2luKCk8L2NvZGU+LDxjb2RlPmMucmVuZCgpPC9jb2RlPiksIG9yCiAgICByYW5nZXMgb2J0YWluZWQgZnJvbSB0aGUgZm9ybWVyIHdpdGggdGhlIGFpZCBvZgogICAgPGEgaHJlZj0iLi4vLi4vLi4vLi4vbGlicy9pdGVyYXRvci9kb2MvcGVybXV0YXRpb25faXRlcmF0b3IuaHRtbCI+CiAgICA8Y29kZT5wZXJtdXRhdGlvbl9pdGVyYXRvcjwvY29kZT48L2E+IGZyb20gQm9vc3QuSXRlcmF0b3IuCiAgPC9saT4KPC91bD4KPC9wPgoKPGhyPgoKPGRpdiBjbGFzcz0icHJldl9saW5rIj48YSBocmVmPSJtdWx0aV9pbmRleF9jb250YWluZXIuaHRtbCI+PGltZyBzcmM9Ii4uL3ByZXYuZ2lmIiBhbHQ9Im11bHRpX2luZGV4X2NvbnRhaW5lciByZWZlcmVuY2UiIGJvcmRlcj0iMCI+PGJyPgo8Y29kZT5tdWx0aV9pbmRleF9jb250YWluZXI8L2NvZGU+IHJlZmVyZW5jZQo8L2E+PC9kaXY+CjxkaXYgY2xhc3M9InVwX2xpbmsiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi91cC5naWYiIGFsdD0iQm9vc3QuTXVsdGlJbmRleCByZWZlcmVuY2UiIGJvcmRlcj0iMCI+PGJyPgpCb29zdC5NdWx0aUluZGV4IHJlZmVyZW5jZQo8L2E+PC9kaXY+CjxkaXYgY2xhc3M9Im5leHRfbGluayI+PGEgaHJlZj0ib3JkX2luZGljZXMuaHRtbCI+PGltZyBzcmM9Ii4uL25leHQuZ2lmIiBhbHQ9Im9yZGVyZWQgaW5kaWNlcyIgYm9yZGVyPSIwIj48YnI+Ck9yZGVyZWQgaW5kaWNlcwo8L2E+PC9kaXY+PGJyIGNsZWFyPSJhbGwiIHN0eWxlPSJjbGVhcjogYWxsOyI+Cgo8YnI+Cgo8cD5SZXZpc2VkIEp1bHkgMjFzdCAyMDA5PC9wPgoKPHA+JmNvcHk7IENvcHlyaWdodCAyMDAzLTIwMDkgSm9hcXUmaWFjdXRlO24gTSBMJm9hY3V0ZTtwZXogTXUmbnRpbGRlO296LgpEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgCkxpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+CkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgY29weSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPgpodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQo8L3A+Cgo8L2JvZHk+CjwvaHRtbD4K