ZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2NTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9KYW1maWxlCkBAIC0wLDAgKzEsMTkgQEAKKworIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKKyMKKyMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKwordXNpbmcgcXVpY2tib29rIDsKKworeG1sIGZvcndhcmQgOiBmb3J3YXJkLnFiayA7Citib29zdGJvb2sgc3RhbmRhbG9uZSA6IGZvcndhcmQKKyAgOgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LnJvb3Q9Li4vLi4vLi4vLi4vLi4KKyAgICAgICAgPHhzbDpwYXJhbT5ib29zdC5saWJyYXJpZXM9Li4vLi4vLi4vLi4vbGlicmFyaWVzLmh0bQorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLnNlY3Rpb24uZGVwdGg9MAorICAgICAgICA8eHNsOnBhcmFtPmNodW5rLmZpcnN0LnNlY3Rpb25zPTAKKyAgICAgICAgPHhzbDpwYXJhbT5nZW5lcmF0ZS5zZWN0aW9uLnRvYy5sZXZlbD0yCisgICAgICAgIDx4c2w6cGFyYW0+dG9jLm1heC5kZXB0aD0xCisgIDsKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2ZvcndhcmQucWJrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2ZvcndhcmQucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjIyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsKQEAgLTAsMCArMSwzMTYgQEAKK1tsaWJyYXJ5IEJvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZAorICBbcXVpY2tib29rIDEuM10KKyAgW3ZlcnNpb24gMS4wXQorICBbYXV0aG9ycyBbU2Nod2luZ2VyLCBUb2JpYXNdXQorICBbY29weXJpZ2h0IDIwMDcgMjAwOCBUb2JpYXMgU2Nod2luZ2VyXQorICBbbGljZW5zZQorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisgICAgICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgCisgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0XSkKKyAgXQorICBbcHVycG9zZSBGdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgZm9yIGdlbmVyaWMgYXJndW1lbnQgZm9yd2FyZGluZy5dCisgIFtjYXRlZ29yeSBoaWdoZXItb3JkZXJdCisgIFtjYXRlZ29yeSBnZW5lcmljXQorICBbbGFzdC1yZXZpc2lvbiAkRGF0ZTogMjAwOC8xMS8wMSAxOTo1ODo1MCAkXQorXQorCitbZGVmIF9fdW5zcGVjaWZpZWRfXyAgICAgICAgICAgIC91bnNwZWNpZmllZC9dCitbZGVmIF9fYm9vc3RfcmVmX18gICAgICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwgQm9vc3QuUmVmXV0KK1tkZWYgX19ib29zdF9yZXN1bHRfb2ZfXyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIEJvb3N0LlJlc3VsdE9mXV0KK1tkZWYgX19ib29zdF9fcmVzdWx0X29mX18gICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIGBib29zdDo6cmVzdWx0X29mYF1dCitbZGVmIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0gVGhlIEZvcndhcmRpbmcgUHJvYmxlbV1dCitbZGVmIF9fYm9vc3RfZnVzaW9uX18gICAgICAgICAgIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdXNpb24vZG9jL2h0bWwvaW5kZXguaHRtbCBCb29zdC5GdXNpb25dXQorCitbc2VjdGlvbiBCcmllZiBEZXNjcmlwdGlvbl0KKworYGJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXJgIHByb3ZpZGVzIGEgcmV1c2FibGUgYWRhcHRlciB0ZW1wbGF0ZSBmb3IgZnVuY3Rpb24KK29iamVjdHMuIEl0IGZvcndhcmRzIFJWYWx1ZXMgYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgd2hpbGUgbGVhdmluZyBMVmFsdWVzCithcy1pcy4KKworICAgIHN0cnVjdCBnIC8vIGZ1bmN0aW9uIG9iamVjdCB0aGF0IG9ubHkgYWNjZXB0IExWYWx1ZXMKKyAgICB7CisgICAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyID4KKyAgICAgICAgdm9pZCBvcGVyYXRvcigpKFQwICYgdDAsIFQxICYgdDEsIFQyICYgdDIpIGNvbnN0OworCisgICAgICAgIHR5cGVkZWYgdm9pZCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgICAgLy8gQWRhcHRlZCB2ZXJzaW9uIGFsc28gYWNjZXB0cyBSVmFsdWVzIGFuZCBmb3J3YXJkcworICAgIC8vIHRoZW0gYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgTFZhbHVlcyBhcy1pcworICAgIHR5cGVkZWYgYm9vc3Q6OmZvcndhcmRfYWRhcHRlcjxnPiBmOworCitBbm90aGVyIGFkYXB0ZXIsIGBib29zdDo6bGlnaHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJgIGFsbG93cyBmb3J3YXJkaW5nIHdpdGggCitzb21lIGhlbHAgZnJvbSB0aGUgdXNlciBhY2NlcHRpbmcgYW5kIHVud3JhcHBpbmcgcmVmZXJlbmNlIHdyYXBwZXJzIChzZWUgCitfX2Jvb3N0X3JlZl9fKSBmb3IgcmVmZXJlbmNlIGFyZ3VtZW50cywgY29uc3QgcXVhbGlmeWluZyBhbGwgb3RoZXIgYXJndW1lbnRzLiAKKworVGhlIHRhcmdldCBmdW5jdGlvbnMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggX19ib29zdF9yZXN1bHRfb2ZfXywgYW5kIHNvIGFyZQordGhlIGFkYXB0ZXJzLgorCitbZW5kc2VjdF0KKworW3NlY3Rpb24gQmFja2dyb3VuZF0KKworTGV0J3Mgc3VwcG9zZSB3ZSBoYXZlIHNvbWUgZnVuY3Rpb24gYGZgIHRoYXQgd2UgY2FuIGNhbGwgbGlrZSB0aGlzOgorCisgICAgZigxMjMsYV92YXJpYWJsZSk7CisKK05vdyB3ZSB3YW50IHRvIHdyaXRlIGFub3RoZXIsIGdlbmVyaWMgZnVuY3Rpb24gYGdgIHRoYXQgY2FuIGJlIGNhbGxlZCB0aGUKK3NhbWUgd2F5IGFuZCByZXR1cm5zIHNvbWUgb2JqZWN0IHRoYXQgY2FsbHMgYGZgIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgorCisgICAgZigxMjMsYV92YXJpYWJsZSkgPT0gZyhmLDEyMyxhX3ZhcmlhYmxlKS5jYWxsX2YoKQorCitbaGVhZGluZyBXaHkgd291bGQgd2Ugd2FudCB0byBkbyBpdCwgYW55d2F5P10KKworTWF5YmUgd2Ugd2FudCB0byBydW4gYGZgIHNldmVyYWwgdGltZXMuIE9yIG1heWJlIHdlIHdhbnQgdG8gcnVuIGl0IHdpdGhpbgorYW5vdGhlciB0aHJlYWQuIE1heWJlIHdlIGp1c3Qgd2FudCB0byBlbmNhcHN1bGF0ZSB0aGUgY2FsbCBleHByZXNzaW9uIGZvciBub3csIAorYW5kIHRoZW4gdXNlIGl0IHdpdGggb3RoZXIgY29kZSB0aGF0IGFsbG93cyB0byBjb21wb3NlIG1vcmUgY29tcGxleCBleHByZXNzaW9ucworaW4gb3JkZXIgdG8gZGVjb21wb3NlIGl0IHdpdGggQysrIHRlbXBsYXRlcyBhbmQgaGF2ZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgc29tZSAKK21hY2hpbmVyeSB0aGF0IGV2ZW50dWFsbHkgY2FsbHMgYGZgIGF0IHJ1bnRpbWUgKGluIG90aGVyIHdvcmRzOyBhcHBseSBhCit0ZWNobmlxdWUgdGhhdCBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBFeHByZXNzaW9uIFRlbXBsYXRlcykuIAorCitbaGVhZGluZyBOb3csIGhvdyBkbyB3ZSBkbyBpdD9dCisKK1RoZSBiYWQgbmV3cyBpczogSXQncyBpbXBvc3NpYmxlLiAKKworVGhhdCBpcyBzbyBiZWNhdXNlIHRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBhIHZhcmlhYmxlIGFuZCBhbgorZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBpdHMgdmFsdWU6IEdpdmVuCisKKyAgICBpbnQgeTsKKyAgICBpbnQgY29uc3QgeiA9IDA7CisKK2FuZAorCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMxKFQgJiB4KTsKKword2UgY2FuIGNhbGwKKworICAgIGZ1bmMxKHkpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdAorICAgIGZ1bmMxKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0CisKK3doZXJlCisKKyAgICBmdW5jMSgxKTsgLy8gZmFpbHMgdG8gY29tcGlsZS4KKworVGhpcyB3YXkgd2UgY2FuIHNhZmVseSBoYXZlIGBmdW5jMWAgc3RvcmUgaXRzIHJlZmVyZW5jZSBhcmd1bWVudCBhbmQgdGhlIAorY29tcGlsZXIga2VlcHMgdXMgZnJvbSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB3aXRoIHRlbXBvcmFyeSBsaWZldGltZS4KKworSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBub24tY29uc3RuZXNzIGFuZCB3aGV0aGVyIGFuIG9iamVjdCBiaW5kcyB0byBhCitub24tY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlciBhcmUgdHdvIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBUaGUgbGF0dGVyIGlzIHRoZQorZGlzdGluY3Rpb24gYmV0d2VlbiBMVmFsdWVzIGFuZCBSVmFsdWVzLiBUaGUgbmFtZXMgc3RlbSBmcm9tIHRoZSBsZWZ0IGhhbmQgc2lkZQorYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9ucywgdGh1cyBMVmFsdWVzIGFyZSB0eXBpY2FsbHkKK3RoZSBvbmVzIHlvdSBjYW4gYXNzaWduIHRvLCBhbmQgUlZhbHVlcyB0aGUgdGVtcG9yYXJ5IHJlc3VsdHMgZnJvbSB0aGUgcmlnaHQKK2hhbmQgc2lkZSBleHByZXNzaW9uLiAKKworICAgIHkgPSAxKzI7ICAgICAgICAvLyBhIGlzIExWYWx1ZSwgMSsyIGlzIHRoZSBleHByZXNzaW9uIHByb2R1Y2luZyB0aGUgUlZhbHVlLAorICAgIC8vIDErMiA9IGE7ICAgICAvLyB1c3VhbGx5IG1ha2VzIG5vIHNlbnNlLiAKKworICAgIGZ1bmMxKHkpOyAgICAgICAvLyB3b3JrcywgYmVjYXVzZSB5IGlzIGFuIExWYWx1ZQorICAgIC8vIGZ1bmMxKDErMik7ICAvLyBmYWlscyB0byBjb21waWxlLCBiZWNhdXNlIHdlIG9ubHkgZ290IGFuIFJWYWx1ZS4KKworSWYgd2UgYWRkIGNvbnN0IHF1YWxpZmljYXRpb24gb24gdGhlIHBhcmFtZXRlciwgb3VyIGZ1bmN0aW9uIGFsc28gYWNjZXB0cworUlZhbHVlczogCisKKyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHZvaWQgZnVuYzIoVCBjb25zdCAmIHgpOworCisgICAgLy8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6CisgICAgZnVuYzIoMSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCB0ZW1wb3JhcnksIG9iamVjdCwKKyAgICBmdW5jMih5KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwgd2hpbGUgeSBpcyBub3QgY29uc3QsIGFuZAorICAgIGZ1bmMyKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCBqdXN0IGxpa2Ugei4KKworSW4gYWxsIGNhc2VzLCB0aGUgYXJndW1lbnQgYHhgIGluIGBmdW5jMmAgaXMgYSBjb25zdC1xdWFsaWZpZWQgTFZhbHVlLgorV2UgY2FuIHVzZSBmdW5jdGlvbiBvdmVybG9hZGluZyB0byBpZGVudGlmeSBub24tY29uc3QgTFZhbHVlczoKKworICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gdm9pZCBmdW5jMyhUIGNvbnN0ICYgeCk7IC8vICMxCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMzKFQgJiB4KTsgICAgICAgLy8gIzIKKworICAgIC8vIFsuLi5dIGZ1bmN0aW9uIHNjb3BlOgorICAgIGZ1bmMzKDEpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QsIHRlbXBvcmFyeSBvYmplY3QgaW4gIzEsCisgICAgZnVuYzMoeSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0IGluICMyLCBhbmQKKyAgICBmdW5jMyh6KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCBpbiAjMS4KKworTm90ZSB0aGF0IGFsbCBhcmd1bWVudHMgYHhgIGluIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIGBmdW5jM2AgYXJlIExWYWx1ZXMuCitJbiBmYWN0LCB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNwb3J0IFJWYWx1ZXMgaW50byBhIGZ1bmN0aW9uIGFzLWlzIGluIEMrKzk4LgorQWxzbyBub3RlIHRoYXQgd2UgY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB3aGF0IHVzZWQgdG8gYmUgYSBjb25zdCBxdWFsaWZpZWQKK0xWYWx1ZSBhbmQgYW4gUlZhbHVlLiAKKworVGhhdCdzIGFzIGNsb3NlIGFzIHdlIGNhbiBnZXQgdG8gYSBnZW5lcmljIGZvcndhcmRpbmcgZnVuY3Rpb24gYGdgIGFzCitkZXNjcmliZWQgYWJvdmUgYnkgdGhlIG1lYW5zIG9mIEMrKyA5OC4gU2VlIF9fdGhlX2ZvcndhcmRpbmdfcHJvYmxlbV9fIGZvciBhCit2ZXJ5IGRldGFpbGVkIGRpc2N1c3Npb24gaW5jbHVkaW5nIHNvbHV0aW9ucyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgY2hhbmdlcy4KKworTm93LCBmb3IgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGl0LCB3ZSBuZWVkIDJeTiBvdmVybG9hZHMgZm9yIE4gcGFyYW1ldGVycworKGVhY2ggd2l0aCBhbmQgd2l0aG91dCBjb25zdCBxdWFsaWZpZXIpIGZvciBlYWNoIG51bWJlciBvZiBhcmd1bWVudHMgCisodGhhdCBpcyAyXihObWF4KzEpIC0gMl5ObWluKS4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNvbXBpbGUtdGltZSBjb21wbGV4aXR5IAoraXMgTygyXk4pLCBob3dldmVyIHRoZSBmYWN0b3IgaXMgbG93IHNvIGl0IHdvcmtzIHF1aXRlIHdlbGwgZm9yIGEgcmVhc29uYWJsZQorbnVtYmVyICg8IDEwKSBvZiBhcmd1bWVudHMuCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbjpyZWZlcmVuY2UgUmVmZXJlbmNlXQorCitbc2VjdGlvbiBmb3J3YXJkX2FkYXB0ZXJdCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAorUlZhbHVlIGFyZ3VtZW50cy4gUlZhbHVlIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAorTFZhbHVlcy4KKworQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgorSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKK3RlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KK1NwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYworbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKworX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCitleHByZXNzaW9ucy4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZvcndhcmRfYWRhcHRlci5ocHA+CisKK1toZWFkaW5nIFN5bm9wc2lzXQorCisgICAgbmFtZXNwYWNlIGJvb3N0CisgICAgeworICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCisgICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+CisgICAgICAgIGNsYXNzIGZvcndhcmRfYWRhcHRlcjsKKyAgICB9CisKK1t2YXJpYWJsZWxpc3QgTm90YXRpb24KKyAgICBbW2BGYF0gICAgICAgICAgICBbYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZl1dCisgICAgW1tgZmBdICAgICAgICAgICAgW2FuIG9iamVjdCBjb252ZXJ0aWJsZSB0byBgRmBdXQorICAgIFtbYEZBYF0gICAgICAgICAgIFt0aGUgdHlwZSBgZm9yd2FyZF9hZGFwdGVyPEY+YF1dCisgICAgW1tgZmFgXSAgICAgICAgICAgW2FuIGluc3RhbmNlIG9iamVjdCBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCisgICAgW1tgYTBgLi4uYGFOYF0gICAgW2FyZ3VtZW50cyB0byBgZmFgXV0KK10KKworVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQorCisgIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQorCit3aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCisgICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KKyAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KKyAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggYXJndW1lbnRzIGBhMGAuLi5gYU5gLl1dCitdCisKK1toZWFkaW5nIExpbWl0c10KKworVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQgdGhlCittYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDYuCisKK1toZWFkaW5nIENvbXBsZXhpdHldCisKK1ByZXByb2Nlc3NpbmcgdGltZTogTygyXk4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4KK0NvbXBpbGUgdGltZTogTygyXk4pLCB3aGVyZSBOIGRlcGVuZHMgb24gdGhlIGFyaXR5IHJhbmdlLgorUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMsIE8oMSkgb3RoZXJ3aXNlLgorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbiBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXJdCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlIGFuZAorUlZhbHVlIGFyZ3VtZW50cy4gQWxsIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAorTFZhbHVlcywgZXhjZXB0IGZvciByZWZlcmVuY2Ugd3JhcHBlcnMgd2hpY2ggYXJlIHVud3JhcHBlZCBhbmQgbWF5IHlpZWxkCitub24tY29uc3QgTFZhbHVlcy4KKworQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LgorSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCAKK3RlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0gYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4KK1NwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZSB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYworbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKworX19ib29zdF9yZXN1bHRfb2ZfXyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsCitleHByZXNzaW9ucy4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+CisKK1toZWFkaW5nIFN5bm9wc2lzXQorCisgICAgbmFtZXNwYWNlIGJvb3N0CisgICAgeworICAgICAgICB0ZW1wbGF0ZTwgY2xhc3MgRnVuY3Rpb24sCisgICAgICAgICAgICBpbnQgQXJpdHlfT3JfTWluQXJpdHkgPSBfX3Vuc3BlY2lmaWVkX18sIGludCBNYXhBcml0eSA9IF9fdW5zcGVjaWZpZWRfXyA+CisgICAgICAgIHN0cnVjdCBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI7CisgICAgfQorCitbdmFyaWFibGVsaXN0IE5vdGF0aW9uCisgICAgW1tgRmBdICAgICAgICAgW2EgcG9zc2libHkgY29uc3QgcXVhbGlmaWVkIGZ1bmN0aW9uIG9iamVjdCB0eXBlIG9yIHJlZmVyZW5jZSB0eXBlIHRoZXJlb2ZdXQorICAgIFtbYGZgXSAgICAgICAgIFthbiBvYmplY3QgY29udmVydGlibGUgdG8gYEZgXV0KKyAgICBbW2BGQWBdICAgICAgICBbdGhlIHR5cGUgYGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjxGPmBdXQorICAgIFtbYGZhYF0gICAgICAgIFthbiBpbnN0YW5jZSBvZiBgRkFgLCBpbml0aWFsaXplZCB3aXRoIGBmYF1dCisgICAgW1tgYTBgLi4uYGFOYF0gW2FyZ3VtZW50cyB0byBgZmFgXV0KK10KKworVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQorCisgIF9fYm9vc3RfX3Jlc3VsdF9vZl9fPEYqKFRBMCBbY29uc3RdJi4uLlRBTiBbY29uc3RdJl0pPjo6dHlwZQorCit3aGVyZSBgVEEwYC4uLmBUQU5gIGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgYGEwYC4uLmBhTmAuCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgW1NlbWFudGljc11dCisgICAgW1tgRkEoZilgXSAgICAgICAgIFtjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCBgZmAuXV0KKyAgICBbW2BGQSgpYF0gICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIGBGYCdzIGRlZmF1bHQgY29uc3RydWN0b3IuXV0KKyAgICBbW2BmYShhMGAuLi5gYU4pYF0gW2NhbGxzIGBmYCB3aXRoIHdpdGggY29uc3QgYXJndW1lbnRzIGBhMGAuLi5gYU5gLiBJZiBgYUlgIGlzIGEgCisgICAgICByZWZlcmVuY2Ugd3JhcHBlciBpdCBpcyB1bndyYXBwZWQuXV0KK10KKworW2hlYWRpbmcgTGltaXRzXQorCitUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9MSUdIVFdFSUdIVF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkCit0byBzZXQgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisKK1toZWFkaW5nIENvbXBsZXhpdHldCisKK1ByZXByb2Nlc3NpbmcgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuCitDb21waWxlIHRpbWU6IE8oTiksIHdoZXJlIE4gaXMgdGhlIGVmZmVjdGl2ZSBhcml0eSBvZiBhIGNhbGwuCitSdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcywgTygxKSBvdGhlcndpc2UuCisKK1tlbmRzZWN0XQorCitbZW5kc2VjdF0KKworCitbc2VjdGlvbiBBY2tub3dsZWRnZW1lbnRzXQorCitBcyB0aGVzZSB1dGlsaXRpZXMgYXJlIGZhY3RvcmVkIG91dCBvZiB0aGUgX19ib29zdF9mdXNpb25fXyBmdW5jdGlvbmFsIG1vZHVsZSwgCitJIHdhbnQgdG8gdGhhbmsgRGFuIE1hcnNkZW4gYW5kIEpvZWwgZGUgR3V6bWFuIGZvciBsZXR0aW5nIG1lIHBhcnRpY2lwYXRlIGluIHRoZQorZGV2ZWxvcG1lbnQgb2YgdGhhdCBncmVhdCBsaWJyYXJ5IGluIHRoZSBmaXJzdCBwbGFjZS4KKworRnVydGhlciwgSSB3YW50IHRvIGNyZWRpdCB0aGUgYXV0aG9ycyBvZiB0aGUgcmVmZXJlbmNlcyBiZWxvdywgZm9yIHRoZWlyCitpbi1kZXB0aCBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaGVyZS4KKworTGFzdCBidXQgbm90IGxlYXN0IEkgd2FudCB0byB0aGFuayBWZXNhIEthcm5vdmVuIGFuZCBQYXVsIE1lbnNvbmlkZXMgZm9yIHRoZQorQm9vc3QgUHJlcHJvY2Vzc29yIGxpYnJhcnkuIFdpdGhvdXQgaXQsIEkgd291bGQgaGF2ZSBlbmRlZCB1cCB3aXRoIGFuIGV4dGVybmFsCitjb2RlIGdlbmVyYXRvciBmb3IgdGhpcyBvbmUuCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uIFJlZmVyZW5jZXNdCisKKyMgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSBUaGUgRm9yd2FyZGluZyBQcm9ibGVtXSwKKyAgUGV0ZXIgRGltb3YsIEhvd2FyZCBFLiBIaW5uYW50LCBEYXZpZCBBYnJhaGFtcywgMjAwMgorCisjIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiBCb29zdC5SZXN1bHRPZl0sCisgIERvdWdsYXMgR3JlZ29yLCAyMDA0CisKKyMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCBCb29zdC5SZWZdLCAKKyAgSmFha2tvIEphcnZpLCBQZXRlciBEaW1vdiwgRG91Z2xhcyBHcmVnb3IsIERhdmlkIEFicmFoYW1zLCAxOTk5LTIwMDIKKworW2VuZHNlY3RdCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDUyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNTcxIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZCAxLjA8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzguMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZvcndhcmQgMS4wIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImNoYXB0ZXIiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PgorPGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZCI+PC9hPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZCAxLjA8L2gyPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj4KKzxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPlRvYmlhczwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPlNjaHdpbmdlcjwvc3Bhbj4KKzwvaDM+PC9kaXY+PC9kaXY+Cis8ZGl2PjxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCAmIzE2OTsgMjAwNywgMjAwOCBUb2JpYXMgU2Nod2luZ2VyPC9wPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJsZWdhbG5vdGljZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQubGVnYWwiPjwvYT48cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC9kaXY+Cis8L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+Cis8cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Cis8ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJyaWVmX2Rlc2NyaXB0aW9uIj5CcmllZiBEZXNjcmlwdGlvbjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZCI+QmFja2dyb3VuZDwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYnJpZWZfZGVzY3JpcHRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYnJpZWZfZGVzY3JpcHRpb24iIHRpdGxlPSJCcmllZiBEZXNjcmlwdGlvbiI+QnJpZWYgRGVzY3JpcHRpb248L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48L2NvZGU+IHByb3ZpZGVzIGEgcmV1c2FibGUgYWRhcHRlcgorICAgICAgdGVtcGxhdGUgZm9yIGZ1bmN0aW9uIG9iamVjdHMuIEl0IGZvcndhcmRzIFJWYWx1ZXMgYXMgcmVmZXJlbmNlcyB0byBjb25zdCwKKyAgICAgIHdoaWxlIGxlYXZpbmcgTFZhbHVlcyBhcy1pcy4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmdW5jdGlvbiBvYmplY3QgdGhhdCBvbmx5IGFjY2VwdCBMVmFsdWVzPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm9wZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSg8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQwPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50MDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50Mjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBBZGFwdGVkIHZlcnNpb24gYWxzbyBhY2NlcHRzIFJWYWx1ZXMgYW5kIGZvcndhcmRzPC9zcGFuPgorPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHRoZW0gYXMgcmVmZXJlbmNlcyB0byBjb25zdCwgTFZhbHVlcyBhcy1pczwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlZGVmPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEFub3RoZXIgYWRhcHRlciwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5saWdod2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48L2NvZGU+IGFsbG93cyBmb3J3YXJkaW5nCisgICAgICB3aXRoIHNvbWUgaGVscCBmcm9tIHRoZSB1c2VyIGFjY2VwdGluZyBhbmQgdW53cmFwcGluZyByZWZlcmVuY2Ugd3JhcHBlcnMgKHNlZQorICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVmPC9hPikgZm9yCisgICAgICByZWZlcmVuY2UgYXJndW1lbnRzLCBjb25zdCBxdWFsaWZ5aW5nIGFsbCBvdGhlciBhcmd1bWVudHMuCisgICAgPC9wPgorPHA+CisgICAgICBUaGUgdGFyZ2V0IGZ1bmN0aW9ucyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPiwKKyAgICAgIGFuZCBzbyBhcmUgdGhlIGFkYXB0ZXJzLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZCIgdGl0bGU9IkJhY2tncm91bmQiPkJhY2tncm91bmQ8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBMZXQncyBzdXBwb3NlIHdlIGhhdmUgc29tZSBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4KKyAgICAgIHRoYXQgd2UgY2FuIGNhbGwgbGlrZSB0aGlzOgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfdmFyaWFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE5vdyB3ZSB3YW50IHRvIHdyaXRlIGFub3RoZXIsIGdlbmVyaWMgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj48L2NvZGU+CisgICAgICB0aGF0IGNhbiBiZSBjYWxsZWQgdGhlIHNhbWUgd2F5IGFuZCByZXR1cm5zIHNvbWUgb2JqZWN0IHRoYXQgY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfdmFyaWFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX3ZhcmlhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y2FsbF9mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KKzwvcHJlPgorPGg0PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQuaDAiPjwvYT4KKyAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLndoeV93b3VsZF93ZV93YW50X3RvX2RvX2l0X19hbnl3YXlfIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLndoeV93b3VsZF93ZV93YW50X3RvX2RvX2l0X19hbnl3YXlfIj5XaHkKKyAgICAgIHdvdWxkIHdlIHdhbnQgdG8gZG8gaXQsIGFueXdheT88L2E+CisgICAgPC9oND4KKzxwPgorICAgICAgTWF5YmUgd2Ugd2FudCB0byBydW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHNldmVyYWwKKyAgICAgIHRpbWVzLiBPciBtYXliZSB3ZSB3YW50IHRvIHJ1biBpdCB3aXRoaW4gYW5vdGhlciB0aHJlYWQuIE1heWJlIHdlIGp1c3Qgd2FudAorICAgICAgdG8gZW5jYXBzdWxhdGUgdGhlIGNhbGwgZXhwcmVzc2lvbiBmb3Igbm93LCBhbmQgdGhlbiB1c2UgaXQgd2l0aCBvdGhlciBjb2RlCisgICAgICB0aGF0IGFsbG93cyB0byBjb21wb3NlIG1vcmUgY29tcGxleCBleHByZXNzaW9ucyBpbiBvcmRlciB0byBkZWNvbXBvc2UgaXQgd2l0aAorICAgICAgQysrIHRlbXBsYXRlcyBhbmQgaGF2ZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgc29tZSBtYWNoaW5lcnkgdGhhdCBldmVudHVhbGx5CisgICAgICBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gYXQgcnVudGltZSAoaW4gb3RoZXIKKyAgICAgIHdvcmRzOyBhcHBseSBhIHRlY2huaXF1ZSB0aGF0IGlzIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzIEV4cHJlc3Npb24gVGVtcGxhdGVzKS4KKyAgICA8L3A+Cis8aDQ+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC5oMSI+PC9hPgorICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQubm93X19ob3dfZG9fd2VfZG9faXRfIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLm5vd19faG93X2RvX3dlX2RvX2l0XyI+Tm93LCBob3cKKyAgICAgIGRvIHdlIGRvIGl0PzwvYT4KKyAgICA8L2g0PgorPHA+CisgICAgICBUaGUgYmFkIG5ld3MgaXM6IEl0J3MgaW1wb3NzaWJsZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYXQgaXMgc28gYmVjYXVzZSB0aGVyZSBpcyBhIHNsaWdodCBkaWZmZXJlbmNlIGJldHdlZW4gYSB2YXJpYWJsZSBhbmQgYW4gZXhwcmVzc2lvbgorICAgICAgdGhhdCBldmFsdWF0ZXMgdG8gaXRzIHZhbHVlOiBHaXZlbgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIGFuZAorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICB3ZSBjYW4gY2FsbAorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1jb25zdCBvYmplY3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdDwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICB3aGVyZQorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmYWlscyB0byBjb21waWxlLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBUaGlzIHdheSB3ZSBjYW4gc2FmZWx5IGhhdmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PC9jb2RlPgorICAgICAgc3RvcmUgaXRzIHJlZmVyZW5jZSBhcmd1bWVudCBhbmQgdGhlIGNvbXBpbGVyIGtlZXBzIHVzIGZyb20gc3RvcmluZyBhIHJlZmVyZW5jZQorICAgICAgdG8gYW4gb2JqZWN0IHdpdGggdGVtcG9yYXJ5IGxpZmV0aW1lLgorICAgIDwvcD4KKzxwPgorICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIHJlYWxpemUgdGhhdCBub24tY29uc3RuZXNzIGFuZCB3aGV0aGVyIGFuIG9iamVjdCBiaW5kcyB0bworICAgICAgYSBub24tY29uc3QgcmVmZXJlbmNlIHBhcmFtZXRlciBhcmUgdHdvIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBUaGUgbGF0dGVyIGlzCisgICAgICB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBMVmFsdWVzIGFuZCBSVmFsdWVzLiBUaGUgbmFtZXMgc3RlbSBmcm9tIHRoZSBsZWZ0IGhhbmQKKyAgICAgIHNpZGUgYW5kIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBleHByZXNzaW9ucywgdGh1cyBMVmFsdWVzIGFyZSB0eXBpY2FsbHkKKyAgICAgIHRoZSBvbmVzIHlvdSBjYW4gYXNzaWduIHRvLCBhbmQgUlZhbHVlcyB0aGUgdGVtcG9yYXJ5IHJlc3VsdHMgZnJvbSB0aGUgcmlnaHQKKyAgICAgIGhhbmQgc2lkZSBleHByZXNzaW9uLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPis8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gICAgICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBhIGlzIExWYWx1ZSwgMSsyIGlzIHRoZSBleHByZXNzaW9uIHByb2R1Y2luZyB0aGUgUlZhbHVlLDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAxKzIgPSBhOyAgICAgLy8gdXN1YWxseSBtYWtlcyBubyBzZW5zZS4gPC9zcGFuPgorCis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gd29ya3MsIGJlY2F1c2UgeSBpcyBhbiBMVmFsdWU8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnVuYzEoMSsyKTsgIC8vIGZhaWxzIHRvIGNvbXBpbGUsIGJlY2F1c2Ugd2Ugb25seSBnb3QgYW4gUlZhbHVlLjwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBJZiB3ZSBhZGQgY29uc3QgcXVhbGlmaWNhdGlvbiBvbiB0aGUgcGFyYW1ldGVyLCBvdXIgZnVuY3Rpb24gYWxzbyBhY2NlcHRzIFJWYWx1ZXM6CisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXSBmdW5jdGlvbiBzY29wZTo8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QgdGVtcG9yYXJ5LCBvYmplY3QsPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QsIHdoaWxlIHkgaXMgbm90IGNvbnN0LCBhbmQ8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwganVzdCBsaWtlIHouPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEluIGFsbCBjYXNlcywgdGhlIGFyZ3VtZW50IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPgorICAgICAgaW4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PC9jb2RlPiBpcyBhIGNvbnN0LXF1YWxpZmllZAorICAgICAgTFZhbHVlLiBXZSBjYW4gdXNlIGZ1bmN0aW9uIG92ZXJsb2FkaW5nIHRvIGlkZW50aWZ5IG5vbi1jb25zdCBMVmFsdWVzOgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gIzE8L3NwYW4+Cis8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dm9pZDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gICAgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vICMyPC9zcGFuPgorCis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0LCB0ZW1wb3Jhcnkgb2JqZWN0IGluICMxLDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdCBpbiAjMiwgYW5kPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj56PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QgaW4gIzEuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIE5vdGUgdGhhdCBhbGwgYXJndW1lbnRzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PC9jb2RlPiBpbgorICAgICAgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PC9jb2RlPgorICAgICAgYXJlIExWYWx1ZXMuIEluIGZhY3QsIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc3BvcnQgUlZhbHVlcyBpbnRvIGEgZnVuY3Rpb24KKyAgICAgIGFzLWlzIGluIEMrKzk4LiBBbHNvIG5vdGUgdGhhdCB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdoYXQgdXNlZCB0byBiZQorICAgICAgYSBjb25zdCBxdWFsaWZpZWQgTFZhbHVlIGFuZCBhbiBSVmFsdWUuCisgICAgPC9wPgorPHA+CisgICAgICBUaGF0J3MgYXMgY2xvc2UgYXMgd2UgY2FuIGdldCB0byBhIGdlbmVyaWMgZm9yd2FyZGluZyBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPjwvY29kZT4gYXMgZGVzY3JpYmVkIGFib3ZlIGJ5IHRoZSBtZWFucyBvZiBDKysKKyAgICAgIDk4LiBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0iIHRhcmdldD0iX3RvcCI+VGhlCisgICAgICBGb3J3YXJkaW5nIFByb2JsZW08L2E+IGZvciBhIHZlcnkgZGV0YWlsZWQgZGlzY3Vzc2lvbiBpbmNsdWRpbmcgc29sdXRpb25zCisgICAgICB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgY2hhbmdlcy4KKyAgICA8L3A+Cis8cD4KKyAgICAgIE5vdywgZm9yIGFjdHVhbGx5IGltcGxlbWVudGluZyBpdCwgd2UgbmVlZCAyXk4gb3ZlcmxvYWRzIGZvciBOIHBhcmFtZXRlcnMgKGVhY2gKKyAgICAgIHdpdGggYW5kIHdpdGhvdXQgY29uc3QgcXVhbGlmaWVyKSBmb3IgZWFjaCBudW1iZXIgb2YgYXJndW1lbnRzICh0aGF0IGlzIDJeKE5tYXgrMSkKKyAgICAgIC0gMl5ObWluKS4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGNvbXBpbGUtdGltZSBjb21wbGV4aXR5IGlzIE8oMl5OKSwgaG93ZXZlcgorICAgICAgdGhlIGZhY3RvciBpcyBsb3cgc28gaXQgd29ya3MgcXVpdGUgd2VsbCBmb3IgYSByZWFzb25hYmxlIG51bWJlciAoJmx0OyAxMCkKKyAgICAgIG9mIGFyZ3VtZW50cy4KKyAgICA8L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlIiB0aXRsZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIiPmZvcndhcmRfYWRhcHRlcjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlciI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyIiB0aXRsZT0iZm9yd2FyZF9hZGFwdGVyIj5mb3J3YXJkX2FkYXB0ZXI8L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDAiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuZGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uPC9hPgorICAgICAgPC9oNT4KKzxwPgorICAgICAgICBGdW5jdGlvbiBvYmplY3QgYWRhcHRlciB0ZW1wbGF0ZSB3aG9zZSBpbnN0YW5jZXMgYXJlIGNhbGxhYmxlIHdpdGggTFZhbHVlCisgICAgICAgIGFuZCBSVmFsdWUgYXJndW1lbnRzLiBSVmFsdWUgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgcmVmZXJlbmNlLXRvLWNvbnN0CisgICAgICAgIHR5cGVkIExWYWx1ZXMuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorICAgICAgICBmb3J3YXJkaW5nIHRvIGEgc3BlY2lmaWMgYXJpdHkuIElmIGEgdGhpcmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQKKyAgICAgICAgaXMgcHJlc2VudCwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdGVtcGxhdGUgYXJndW1lbnQgYXJlIHRyZWF0ZWQgYXMgbWluaW11bQorICAgICAgICBhbmQgbWF4aW11bSBhcml0eSwgcmVzcGVjdGl2ZWx5LiBTcGVjaWZ5aW5nIGFuIGFyaXR5IGNhbiBiZSBoZWxwZnVsIHRvIGltcHJvdmUKKyAgICAgICAgdGhlIHJlYWRhYmlsaXR5IG9mIGRpYWdub3N0aWMgbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPgorICAgICAgICBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsIGV4cHJlc3Npb25zLgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDEiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaGVhZGVyIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+SGVhZGVyPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzwvcHJlPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaDIiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPlN5bm9wc2lzPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+QXJpdHlfT3JfTWluQXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+TWF4QXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzwvcHJlPgorPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKzxwIGNsYXNzPSJ0aXRsZSI+PGI+Tm90YXRpb248L2I+PC9wPgorPGRsIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBvYmplY3QgY29udmVydGlibGUgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjwvY29kZT4sCisgICAgICAgICAgICAgIGluaXRpYWxpemVkIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYXJndW1lbnRzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPC9kbD4KKzwvZGl2PgorPHA+CisgICAgICAgIFRoZSByZXN1bHQgdHlwZSBvZiBhIHRhcmdldCBmdW5jdGlvbiBpbnZvY2F0aW9uIG11c3QgYmUKKyAgICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X29mPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiooPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7XSkmZ3Q7Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnR5cGU8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgICB3aGVyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBTjwvc3Bhbj48L2NvZGU+IGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oMyI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+RXhwcmVzc2lvbgorICAgICAgICBTZW1hbnRpY3M8L2E+CisgICAgICA8L2g1PgorPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Cis8Y29sZ3JvdXA+Cis8Y29sPgorPGNvbD4KKzwvY29sZ3JvdXA+Cis8dGhlYWQ+PHRyPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIFNlbWFudGljcworICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzwvdHI+PC90aGVhZD4KKzx0Ym9keT4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBhdHRlbXB0cyB0byB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+J3MKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiB3aXRoIHdpdGgKKyAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oNCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5saW1pdHMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIubGltaXRzIj5MaW1pdHM8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0ZPUldBUkRfQURBUFRFUl9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQgdG8gc2V0CisgICAgICAgIHRoZSBtYXhpbXVtIGNhbGwgYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDYuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oNSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPkNvbXBsZXhpdHk8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFByZXByb2Nlc3NpbmcgdGltZTogTygyXk4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4gQ29tcGlsZSB0aW1lOiBPKDJeTiksCisgICAgICAgIHdoZXJlIE4gZGVwZW5kcyBvbiB0aGUgYXJpdHkgcmFuZ2UuIFJ1biB0aW1lOiBPKDApIGlmIHRoZSBjb21waWxlciBpbmxpbmVzLAorICAgICAgICBPKDEpIG90aGVyd2lzZS4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiIHRpdGxlPSJsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oMCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIEZ1bmN0aW9uIG9iamVjdCBhZGFwdGVyIHRlbXBsYXRlIHdob3NlIGluc3RhbmNlcyBhcmUgY2FsbGFibGUgd2l0aCBMVmFsdWUKKyAgICAgICAgYW5kIFJWYWx1ZSBhcmd1bWVudHMuIEFsbCBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCBhcyByZWZlcmVuY2UtdG8tY29uc3QgdHlwZWQKKyAgICAgICAgTFZhbHVlcywgZXhjZXB0IGZvciByZWZlcmVuY2Ugd3JhcHBlcnMgd2hpY2ggYXJlIHVud3JhcHBlZCBhbmQgbWF5IHlpZWxkCisgICAgICAgIG5vbi1jb25zdCBMVmFsdWVzLgorICAgICAgPC9wPgorPHA+CisgICAgICAgIEFuIGFyaXR5IGNhbiBiZSBnaXZlbiBhcyBzZWNvbmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQgdG8gcmVzdHJpY3QKKyAgICAgICAgZm9yd2FyZGluZyB0byBhIHNwZWNpZmljIGFyaXR5LiBJZiBhIHRoaXJkLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50CisgICAgICAgIGlzIHByZXNlbnQsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIHRlbXBsYXRlIGFyZ3VtZW50IGFyZSB0cmVhdGVkIGFzIG1pbmltdW0KKyAgICAgICAgYW5kIG1heGltdW0gYXJpdHksIHJlc3BlY3RpdmVseS4gU3BlY2lmeWluZyBhbiBhcml0eSBjYW4gYmUgaGVscGZ1bCB0byBpbXByb3ZlCisgICAgICAgIHRoZSByZWFkYWJpbGl0eSBvZiBkaWFnbm9zdGljIG1lc3NhZ2VzIGFuZCBjb21waWxlIHRpbWUgcGVyZm9ybWFuY2UuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZXN1bHRPZjwvYT4KKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZXN1bHQgdHlwZXMgb2Ygc3BlY2lmaWMgY2FsbCBleHByZXNzaW9ucy4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgxIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oZWFkZXIiPkhlYWRlcjwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Cis8L3ByZT4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgyIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLnN5bm9wc2lzIj5TeW5vcHNpczwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkFyaXR5X09yX01pbkFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPk1heEFyaXR5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+dW5zcGVjaWZpZWQ8L2VtPjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3RhdGlvbjwvYj48L3A+Cis8ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhIHBvc3NpYmx5IGNvbnN0IHF1YWxpZmllZCBmdW5jdGlvbiBvYmplY3QgdHlwZSBvciByZWZlcmVuY2UgdHlwZSB0aGVyZW9mCisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIG9iamVjdCBjb252ZXJ0aWJsZSB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+LAorICAgICAgICAgICAgICBpbml0aWFsaXplZCB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFyZ3VtZW50cyB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxwPgorICAgICAgICBUaGUgcmVzdWx0IHR5cGUgb2YgYSB0YXJnZXQgZnVuY3Rpb24gaW52b2NhdGlvbiBtdXN0IGJlCisgICAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy91dGlsaXR5L3V0aWxpdHkuaHRtI3Jlc3VsdF9vZiIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF9vZjwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wOy4uLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEFOPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPl0mYW1wO10pJmd0Ozo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj50eXBlPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgICAgd2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+PC9jb2RlPiBkZW5vdGUgdGhlIGFyZ3VtZW50IHR5cGVzIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+LgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDMiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPkV4cHJlc3Npb24KKyAgICAgICAgU2VtYW50aWNzPC9hPgorICAgICAgPC9oNT4KKzxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRoZWFkPjx0cj4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBTZW1hbnRpY3MKKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8L3RyPjwvdGhlYWQ+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBpbml0aWFsaXplcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYWRhcHRlciwgYXR0ZW1wdHMgdG8gdXNlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPidzCisgICAgICAgICAgICAgICAgICBkZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gd2l0aCB3aXRoCisgICAgICAgICAgICAgICAgICBjb25zdCBhcmd1bWVudHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uIElmIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFJPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICAgIGlzIGEgcmVmZXJlbmNlIHdyYXBwZXIgaXQgaXMgdW53cmFwcGVkLgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmg0Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmxpbWl0cyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5saW1pdHMiPkxpbWl0czwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfTElHSFRXRUlHSFRfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZAorICAgICAgICB0byBzZXQgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oNSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jb21wbGV4aXR5Ij48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPkNvbXBsZXhpdHk8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFByZXByb2Nlc3NpbmcgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgYXJpdHkgbGltaXQuIENvbXBpbGUgdGltZTogTyhOKSwKKyAgICAgICAgd2hlcmUgTiBpcyB0aGUgZWZmZWN0aXZlIGFyaXR5IG9mIGEgY2FsbC4gUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyCisgICAgICAgIGlubGluZXMsIE8oMSkgb3RoZXJ3aXNlLgorICAgICAgPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5hY2tub3dsZWRnZW1lbnRzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmFja25vd2xlZGdlbWVudHMiIHRpdGxlPSJBY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPgorPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgQXMgdGhlc2UgdXRpbGl0aWVzIGFyZSBmYWN0b3JlZCBvdXQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVzaW9uL2RvYy9odG1sL2luZGV4Lmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuRnVzaW9uPC9hPgorICAgICAgZnVuY3Rpb25hbCBtb2R1bGUsIEkgd2FudCB0byB0aGFuayBEYW4gTWFyc2RlbiBhbmQgSm9lbCBkZSBHdXptYW4gZm9yIGxldHRpbmcKKyAgICAgIG1lIHBhcnRpY2lwYXRlIGluIHRoZSBkZXZlbG9wbWVudCBvZiB0aGF0IGdyZWF0IGxpYnJhcnkgaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgIDwvcD4KKzxwPgorICAgICAgRnVydGhlciwgSSB3YW50IHRvIGNyZWRpdCB0aGUgYXV0aG9ycyBvZiB0aGUgcmVmZXJlbmNlcyBiZWxvdywgZm9yIHRoZWlyIGluLWRlcHRoCisgICAgICBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBwcm9ibGVtIGFuZCB0aGUgc29sdXRpb24gaW1wbGVtZW50ZWQgaGVyZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIExhc3QgYnV0IG5vdCBsZWFzdCBJIHdhbnQgdG8gdGhhbmsgVmVzYSBLYXJub3ZlbiBhbmQgUGF1bCBNZW5zb25pZGVzIGZvciB0aGUKKyAgICAgIEJvb3N0IFByZXByb2Nlc3NvciBsaWJyYXJ5LiBXaXRob3V0IGl0LCBJIHdvdWxkIGhhdmUgZW5kZWQgdXAgd2l0aCBhbiBleHRlcm5hbAorICAgICAgY29kZSBnZW5lcmF0b3IgZm9yIHRoaXMgb25lLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZXMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlcyIgdGl0bGU9IlJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwMi9uMTM4NS5odG0iIHRhcmdldD0iX3RvcCI+VGhlCisgICAgICAgICAgRm9yd2FyZGluZyBQcm9ibGVtPC9hPiwgUGV0ZXIgRGltb3YsIEhvd2FyZCBFLiBIaW5uYW50LCBEYXZpZCBBYnJhaGFtcywKKyAgICAgICAgICAyMDAyCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPiwKKyAgICAgICAgICBEb3VnbGFzIEdyZWdvciwgMjAwNAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2h0bWwvcmVmLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVmPC9hPiwKKyAgICAgICAgICBKYWFra28gSmFydmksIFBldGVyIERpbW92LCBEb3VnbGFzIEdyZWdvciwgRGF2aWQgQWJyYWhhbXMsIDE5OTktMjAwMgorICAgICAgICA8L2xpPgorPC9vbD48L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8dGFibGUgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgYWxpZ249ImxlZnQiPjxwPjxzbWFsbD5MYXN0IHJldmlzZWQ6IE5vdmVtYmVyIDAxLCAyMDA4IGF0IDE5OjU4OjUwIEdNVDwvc21hbGw+PC9wPjwvdGQ+Cis8dGQgYWxpZ249InJpZ2h0Ij48ZGl2IGNsYXNzPSJjb3B5cmlnaHQtZm9vdGVyIj48L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhZjcxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdApAQCAtMCwwICsxIEBACitpbmRleC5odG1sCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODAzMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9ZG9jL2h0bWwvaW5kZXguaHRtbCI+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgY2xpY2sgdGhpcyAKKyAgICA8YSBocmVmPSJkb2MvaHRtbC9pbmRleC5odG1sIj5saW5rPC9hPiAmbmJzcDs8aHI+CisgICAgPHA+qSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlciwgMjAwOTwvcD4KKyAgICA8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgCisgICAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij4KKyAgICBMSUNFTlNFXzFfMC50eHQ8L2E+IG9yIGNvcHkgYXQKKyAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3A+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZSBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY5NDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9KYW1maWxlCkBAIC0wLDAgKzEsMTcgQEAKKworIyAoQykgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIKKyMKKyMgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBib29zdCBTb2Z0d2FyZSBMaWNlbnNlLAorIyBWZXJzaW9uIDEuMC4gKFNlZSBodHRwOi9cL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKworaW1wb3J0IHRlc3RpbmcgOworCitwcm9qZWN0IGZvcndhcmQtdGVzdHMKKyAgICA7CisKK3Rlc3Qtc3VpdGUgZnVuY3Rpb25hbC9mb3J3YXJkCisgICAgOgorICAgICAgWyBydW4gZm9yd2FyZF9hZGFwdGVyLmNwcCBdCisgICAgICBbIHJ1biBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuY3BwIF0KKyAgICA7CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvZm9yd2FyZF9hZGFwdGVyLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvZm9yd2FyZF9hZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNjNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9mb3J3YXJkX2FkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKKyAgCisgICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKyAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKworI2lmZGVmIEJPT1NUX01TVkMKKyMgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KSAvLyBubyBjb252ZXJzaW9uIHdhcm5pbmdzLCBwbGVhc2UKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvZm9yd2FyZF9hZGFwdGVyLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgorCisjaW5jbHVkZSA8Ym9vc3QvYmxhbmsuaHBwPgorI2luY2x1ZGUgPGJvb3N0L25vbmNvcHlhYmxlLmhwcD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKwordGVtcGxhdGUgPGNsYXNzIEJhc2UgPSBuZG5ib29zdDo6Ymxhbms+CitjbGFzcyB0ZXN0X2Z1bmMgOiBwdWJsaWMgQmFzZSAKK3sKKyAgICBpbnQgdmFsOworcHVibGljOgorICAgIHRlc3RfZnVuYyhpbnQgdikgOiB2YWwodikgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPgorICAgIHRlc3RfZnVuYyh0ZXN0X2Z1bmM8Qj4gY29uc3QgJiB0aGF0KQorICAgICAgOiB2YWwodGhhdC52YWwpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPiBmcmllbmQgY2xhc3MgdGVzdF9mdW5jOworCisgICAgaW50IG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsPXIrdmFsOworICAgIH0KKyAgICBsb25nIG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgCisgICAgeworICAgICAgICByZXR1cm4gLShsPXIrdmFsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2lnPgorICAgIHN0cnVjdCByZXN1bHQKKyAgICB7CisgICAgICAgIHR5cGVkZWYgdm9pZCB0eXBlOworICAgIH07CisKKyAgICAvLyBlbnN1cmUgcmVzdWx0X29mIGFyZ3VtZW50IHR5cGVzIGFyZSB3aGF0J3MgZXhwZWN0ZWQKKyAgICAvLyBub3RlOiB0aGlzIGlzICpub3QqIGhvdyBjbGllbnQgY29kZSBzaG91bGQgbG9vayBsaWtlIAorICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYgY29uc3QoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBpbnQgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBsb25nIHR5cGU7IH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50JikgPiB7IHR5cGVkZWYgY2hhciB0eXBlOyB9OworfTsKKworZW51bSB7IGludF8sIGxvbmdfLCBjaGFyXyB9OworCitpbnQgdHlwZV9vZihpbnQpICB7IHJldHVybiBpbnRfOyB9CitpbnQgdHlwZV9vZihsb25nKSB7IHJldHVybiBsb25nXzsgfQoraW50IHR5cGVfb2YoY2hhcikgeyByZXR1cm4gY2hhcl87IH0KKworaW50IG1haW4oKQoreworICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmlzX3NhbWU7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0OjpyZXN1bHRfb2Y7CisgICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OmZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBmOworCisgICAgICAgIC8vIGx2YWx1ZSxydmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50KSA+Ojp0eXBlLCBsb25nID46OnZhbHVlICkpOworICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAoaW50JiwgaW50KSA+Ojp0eXBlLCBpbnQgPjo6dmFsdWUgKSk7CisgICAgICAgIC8vIGx2YWx1ZSxjb25zdCBsdmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50IGNvbnN0ICYpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQgY29uc3QgJikgPjo6dHlwZSwgaW50ID46OnZhbHVlICkpOworICAgICAgICAvLyBsdmFsdWUsbHZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKGludCYsIGludCYpID46OnR5cGUsIGNoYXIgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6Om5vbmNvcHlhYmxlOworICAgICAgICB1c2luZyBuZG5ib29zdDo6Zm9yd2FyZF9hZGFwdGVyOworCisgICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBmKDcpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZnVuYyhmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBmdW5jX3JlZihmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBjb25zdCBmdW5jX3JlZl9jKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+IGNvbnN0ID4gZnVuY19jKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gY29uc3QgZnVuY19jMihmKTsKKyAgICAgICAgZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+IGNvbnN0ICYgPiBmdW5jX2NfcmVmKGYpOworCisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCwxKSApID09IGxvbmdfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfcmVmKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZl9jKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2MoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jMih4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2NfcmVmKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCx4KSApID09IGNoYXJfICk7CisKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmKHgsMSkgPT0gLTggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19yZWZfYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYyh4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jMih4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jX3JlZih4LDEpID09IDggKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMjA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIENvcHlyaWdodCAoYykgMjAwNyBUb2JpYXMgU2Nod2luZ2VyCisgIAorICAgIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCisgICAgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisKKyNpZmRlZiBCT09TVF9NU1ZDCisjICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkgLy8gbm8gY29udmVyc2lvbiB3YXJuaW5ncywgcGxlYXNlCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2xpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5ocHA+CisKKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L2JsYW5rLmhwcD4KKyNpbmNsdWRlIDxib29zdC9ub25jb3B5YWJsZS5ocHA+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK3RlbXBsYXRlIDxjbGFzcyBCYXNlID0gbmRuYm9vc3Q6OmJsYW5rPgorY2xhc3MgdGVzdF9mdW5jIDogcHVibGljIEJhc2UgCit7CisgICAgaW50IHZhbDsKK3B1YmxpYzoKKyAgICB0ZXN0X2Z1bmMoaW50IHYpIDogdmFsKHYpIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgQj4KKyAgICB0ZXN0X2Z1bmModGVzdF9mdW5jPEI+IGNvbnN0ICYgdGhhdCkKKyAgICAgIDogdmFsKHRoYXQudmFsKQorICAgIHsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgQj4gZnJpZW5kIGNsYXNzIHRlc3RfZnVuYzsKKworICAgIGludCBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbD1yK3ZhbDsKKyAgICB9CisgICAgbG9uZyBvcGVyYXRvcigpKGludCAmIGwsIGludCBjb25zdCAmIHIpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIC0obD1yK3ZhbCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNpZz4KKyAgICBzdHJ1Y3QgcmVzdWx0CisgICAgeworICAgICAgICB0eXBlZGVmIHZvaWQgdHlwZTsKKyAgICB9OworCisgICAgLy8gZW5zdXJlIHJlc3VsdF9vZiBhcmd1bWVudCB0eXBlcyBhcmUgd2hhdCdzIGV4cGVjdGVkCisgICAgLy8gbm90ZTogdGhpcyBpcyAqbm90KiBob3cgY2xpZW50IGNvZGUgc2hvdWxkIGxvb2sgbGlrZSAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmIGNvbnN0KGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgaW50IHR5cGU7IH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50IGNvbnN0JikgPiB7IHR5cGVkZWYgbG9uZyB0eXBlOyB9OworCisgICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+CisgICAgc3RydWN0IHJlc3VsdDwgU2VsZihpbnQmLGludCYpID4geyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsKK307CisKK2VudW0geyBpbnRfLCBsb25nXywgY2hhcl8gfTsKKworaW50IHR5cGVfb2YoaW50KSAgeyByZXR1cm4gaW50XzsgfQoraW50IHR5cGVfb2YobG9uZykgeyByZXR1cm4gbG9uZ187IH0KK2ludCB0eXBlX29mKGNoYXIpIHsgcmV0dXJuIGNoYXJfOyB9CisKK2ludCBtYWluKCkKK3sKKyAgICB7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0Ojppc19zYW1lOworICAgICAgICB1c2luZyBuZG5ib29zdDo6cmVzdWx0X29mOworICAgICAgICB0eXBlZGVmIG5kbmJvb3N0OjpsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZjsKKyAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6cmVmZXJlbmNlX3dyYXBwZXI8aW50PiByZWY7CisgICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OnJlZmVyZW5jZV93cmFwcGVyPGludCBjb25zdD4gY3JlZjsKKworICAgICAgICAvLyBsdmFsdWUscnZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKHJlZiwgaW50KSA+Ojp0eXBlLCBsb25nID46OnZhbHVlICkpOworICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAocmVmLCBpbnQpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKKyAgICAgICAgLy8gbHZhbHVlLGNvbnN0IGx2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIGNyZWYpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChyZWYsIGNyZWYpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKKyAgICAgICAgLy8gbHZhbHVlLGx2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihyZWYsIHJlZikgPjo6dHlwZSwgY2hhciA+Ojp2YWx1ZSApKTsKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKHJlZiwgcmVmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOworICAgIH0KKyAgICB7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0Ojpub25jb3B5YWJsZTsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjsKKworICAgICAgICBpbnQgdiA9IDA7IG5kbmJvb3N0OjpyZWZlcmVuY2Vfd3JhcHBlcjxpbnQ+IHgodik7CisgICAgICAgIHRlc3RfZnVuYzxub25jb3B5YWJsZT4gZig3KTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGZ1bmMoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gZnVuY19yZWYoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiAmID4gY29uc3QgZnVuY19yZWZfYyhmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiBjb25zdCA+IGZ1bmNfYyhmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGNvbnN0IGZ1bmNfYzIoZik7CisgICAgICAgIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBjb25zdCAmID4gZnVuY19jX3JlZihmKTsKKworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZih4LDEpICkgPT0gbG9uZ18gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19yZWZfYyh4LDEpICkgPT0gbG9uZ18gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfYzIoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jX3JlZih4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jKHgseCkgKSA9PSBjaGFyXyApOworCisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmMoeCwxKSA9PSAtOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX3JlZih4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmX2MoeCwxKSA9PSAtOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX2MoeCwxKSA9PSA4ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYzIoeCwxKSA9PSA4ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfY19yZWYoeCwxKSA9PSA4ICk7CisgICAgfQorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisK