From: Tor Didriksen Date: January 11 2011 8:15am Subject: bzr commit into mysql-next-mr-bugfixing branch (tor.didriksen:3243) WL#5257 List-Archive: http://lists.mysql.com/commits/128388 Message-Id: <20110111081558.96B9C3127@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4459908244926809298==" --===============4459908244926809298== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline I0F0IGZpbGU6Ly8vZXhwb3J0L2hvbWUvZGlkcmlrL3JlcG8vbmV4dC1tci1vcHQtYmFja3BvcnRp bmctd2w0ODAwLyBiYXNlZCBvbiByZXZpZDpqb3JnZW4ubG9sYW5kQG9yYWNsZS5jb20tMjAxMDEy MjEwNzM0MzMtbnFnOWE2MHpkd2JiMHRteQoKIDMyNDMgVG9yIERpZHJpa3NlbgkyMDExLTAxLTEx CiAgICAgIFdMIzUyNTcgUmV2aWV3IGNvbW1lbnRzLgogICAgICAKICAgICAgTW9yZSBjb21tZW50 cyBpbiBmb2xsb3d1cCBlbWFpbCAuLi4KICAgICBAIHNxbC9vcHRfcmFuZ2UuY2MKICAgICAgICAK ICAgICBAIHNxbC9vcHRfdHJhY2UuY2MKICAgICAgICAKCiAgICBhZGRlZDoKICAgICAgdW5pdHRl c3QvZ3VuaXQvb3B0X25vdHJhY2UtdC5jYwogICAgbW9kaWZpZWQ6CiAgICAgIHNxbC9vcHRfcmFu Z2UuY2MKICAgICAgc3FsL29wdF90cmFjZS5jYwogICAgICBzcWwvb3B0X3RyYWNlLmgKICAgICAg c3FsL29wdF90cmFjZTJzZXJ2ZXIuY2MKICAgICAgc3FsL3N5c192YXJzLmNjCiAgICAgIHVuaXR0 ZXN0L2d1bml0L0NNYWtlTGlzdHMudHh0CiAgICAgIHVuaXR0ZXN0L2d1bml0L29wdF90cmFjZS10 LmNjCj09PSBtb2RpZmllZCBmaWxlICdzcWwvb3B0X3JhbmdlLmNjJwotLS0gYS9zcWwvb3B0X3Jh bmdlLmNjCTIwMTAtMTItMjEgMDc6MzQ6MzMgKzAwMDAKKysrIGIvc3FsL29wdF9yYW5nZS5jYwky MDExLTAxLTExIDA4OjE1OjQ2ICswMDAwCkBAIC03OTMsOCArNzkzLDEwIEBAIHN0YXRpYwogVFJQ X0dST1VQX01JTl9NQVggKmdldF9iZXN0X2dyb3VwX21pbl9tYXgoUEFSQU0gKnBhcmFtLCBTRUxf VFJFRSAqdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSByZWFkX3RpbWUpOwogI2lmICFkZWZpbmVkKERCVUdfT0ZGKSB8fCBkZWZpbmVkKE9QVElN SVpFUl9UUkFDRSkKKy8vIHByaW50X3NlbF90cmVlIGRlY2xhcmVkICdzdGF0aWMnIGJ1dCBuZXZl ciBkZWZpbmVkCiBzdGF0aWMgdm9pZCBwcmludF9zZWxfdHJlZShQQVJBTSAqcGFyYW0sIFNFTF9U UkVFICp0cmVlLCBrZXlfbWFwICp0cmVlX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm1zZyk7CisvLyBwcmludF9yb3Jfc2NhbnNfYXJyIGRlY2xhcmVkICdzdGF0 aWMnIGJ1dCBuZXZlciBkZWZpbmVkCiBzdGF0aWMgdm9pZCBwcmludF9yb3Jfc2NhbnNfYXJyKFRB QkxFICp0YWJsZSwgY29uc3QgY2hhciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc3Rfcm9yX3NjYW5faW5mbyAqKnN0YXJ0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rfcm9yX3NjYW5faW5mbyAqKmVuZCk7CkBAIC0xMjM5Myw2 ICsxMjM5NSw3IEBAIHByaW50X211bHRpcGxlX2tleV92YWx1ZXMoS0VZX1BBUlQgKmtleV8KICAg ZGJ1Z190bXBfcmVzdG9yZV9jb2x1bW5fbWFwcyh0YWJsZS0+cmVhZF9zZXQsIHRhYmxlLT53cml0 ZV9zZXQsIG9sZF9zZXRzKTsKIH0KIAorLy8gcHJpbnRfcXVpY2sgZGVmaW5lZCBidXQgbm90IHVz ZWQuCiBzdGF0aWMgdm9pZCBwcmludF9xdWljayhRVUlDS19TRUxFQ1RfSSAqcXVpY2ssIGNvbnN0 IGtleV9tYXAgKm5lZWRlZF9yZWcpCiB7CiAgIGNoYXIgYnVmW01BWF9LRVkvOCsxXTsKCj09PSBt b2RpZmllZCBmaWxlICdzcWwvb3B0X3RyYWNlLmNjJwotLS0gYS9zcWwvb3B0X3RyYWNlLmNjCTIw MTAtMTEtMjQgMTg6NTQ6MjYgKzAwMDAKKysrIGIvc3FsL29wdF90cmFjZS5jYwkyMDExLTAxLTEx IDA4OjE1OjQ2ICswMDAwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgT3B0X3RyYWNlX3N0cnVjdDo6 ZG9fY29uc3RydWN0KE9wdF8KIHsKICAgc2F2ZWRfa2V5PSBrZXk7CiAgIHJlcXVpcmVzX2tleT0g cmVxdWlyZXNfa2V5X2FyZzsKLSAgLyogREJVR19QUklOVCBzdXBwb3J0cyBOVUxMIGluICVzICov CisKICAgREJVR19QUklOVCgib3B0X3RyYWNlIiwgKCIlczogc3RhcnRpbmcgJXMiLCBrZXksIHR5 cGVzW3JlcXVpcmVzX2tleV0pKTsKICAgc3RtdD0gc3RtdF9hcmc7CiAgIHBhcmVudD0gcGFyZW50 X2FyZzsKQEAgLTc0LDggKzc0LDcgQEAgdm9pZCBPcHRfdHJhY2Vfc3RydWN0Ojpkb19jb25zdHJ1 Y3QoT3B0XwogI2lmbmRlZiBEQlVHX09GRgogICBwcmV2aW91c19rZXlbMF09IDA7CiAjZW5kaWYK LSAgc2F2ZV9zdG10X3N1cHBvcnRfSV9TPQotICAgIHN0bXQtPnN1cHBvcnRfSV9TOworICBzYXZl X3N0bXRfc3VwcG9ydF9JX1M9IHN0bXQtPnN1cHBvcnRfSV9TOwogICBpZiAoc2F2ZV9zdG10X3N1 cHBvcnRfSV9TICYmCiAgICAgICAoZmVhdHVyZSAmIHN0bXQtPmN0eC0+ZmVhdHVyZXMpID09IDAp CiAgIHsKQEAgLTEyMiw5ICsxMjEsOSBAQCB2b2lkIE9wdF90cmFjZV9zdHJ1Y3Q6OmRvX2NvbnN0 cnVjdChPcHRfCiAgICAgICBpZiAobWF4X3NpemUgPj0gc2FmZXR5X21hcmdpbikKICAgICAgIHsK ICAgICAgICAgbWF4X3NpemUtPSBzYWZldHlfbWFyZ2luOwotICAgICAgICBpZiAobmV3X3NpemUg PiBtYXhfc2l6ZSkgLy8gZG9uJ3QgcHJlLWFsbG9jYXRlIG1vcmUgdGhhbiB0aGUgbGltaXQKKyAg ICAgICAgaWYgKG5ld19zaXplID4gbWF4X3NpemUpIC8vIERvbid0IHByZS1hbGxvY2F0ZSBtb3Jl IHRoYW4gdGhlIGxpbWl0LgogICAgICAgICAgIG5ld19zaXplPSBtYXhfc2l6ZTsKLSAgICAgICAg aWYgKG5ld19zaXplID49IGFsbG9jZWQpIC8vIG5ldmVyIHNocmluayBzdHJpbmcKKyAgICAgICAg aWYgKG5ld19zaXplID49IGFsbG9jZWQpIC8vIE5ldmVyIHNocmluayBzdHJpbmcuCiAgICAgICAg ICAgc3RtdC0+YnVmZmVyLnJlYWxsb2MobmV3X3NpemUpOwogICAgICAgfQogICAgIH0KQEAgLTE0 MSw3ICsxNDAsNyBAQCB2b2lkIE9wdF90cmFjZV9zdHJ1Y3Q6OmRvX2NvbnN0cnVjdChPcHRfCiAK IHZvaWQgT3B0X3RyYWNlX3N0cnVjdDo6YWRkX2tleV9uYW1lKGNvbnN0IGNoYXIgKmtleSkKIHsK LSAgLyogdXNlciBzaG91bGQgYWx3YXlzIGFkZCB0byB0aGUgaW5uZXJtb3N0IG9wZW4gb2JqZWN0 LCBub3Qgb3V0c2lkZSAqLworICAvLyBVc2VyIHNob3VsZCBhbHdheXMgYWRkIHRvIHRoZSBpbm5l cm1vc3Qgb3BlbiBvYmplY3QsIG5vdCBvdXRzaWRlLgogICBEQlVHX0FTU0VSVChzdG10LT5jdXJy ZW50X3N0cnVjdCA9PSB0aGlzKTsKICAgYm9vbCBoYXNfa2V5PSBrZXkgIT0gTlVMTDsKICAgaWYg KHVubGlrZWx5KGhhc19rZXkgIT0gcmVxdWlyZXNfa2V5KSkKQEAgLTE3OCwxOCArMTc3LDE4IEBA IHZvaWQgT3B0X3RyYWNlX3N0cnVjdDo6YWRkX3N0cnVjdChjb25zdCAKIH0KIAogCi12b2lkIE9w dF90cmFjZV9zdHJ1Y3Q6OmRvX2Rlc3RydWN0KHZvaWQpCit2b2lkIE9wdF90cmFjZV9zdHJ1Y3Q6 OmRvX2Rlc3RydWN0KCkKIHsKICAgREJVR19QUklOVCgib3B0X3RyYWNlIiwgKCIlczogZW5kaW5n ICVzIiwgc2F2ZWRfa2V5LCB0eXBlc1tyZXF1aXJlc19rZXldKSk7CiAgIERCVUdfQVNTRVJUKHN0 YXJ0ZWQpOwogICAvKgogICAgIE5vdGU6CiAgICAgLSB0aGUgU2VydmVyIGNvZGUgaW52b2tlcyBP cHRfdHJhY2Vfc3RydWN0J3MgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciwgYW5kIHNvCi0gICAgc3Rt dCdzIGN1cnJlbnRfc3RydWN0IGlzIG5lY2Vzc2FyaWx5IHNldCBieSBPcHRfdHJhY2Vfc3RydWN0 J3MKLSAgICBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yCisgICAgICBzdG10J3MgY3VycmVudF9zdHJ1 Y3QgaXMgbmVjZXNzYXJpbHkgc2V0IGJ5IE9wdF90cmFjZV9zdHJ1Y3QncworICAgICAgY29uc3Ry dWN0b3IvZGVzdHJ1Y3RvcgogICAgIC0gdGhlIFNlcnZlciBjb2RlIGludm9rZXMgT3B0X3RyYWNl X2NvbnRleHQgc3RhcnQvZW5kKCkgZnVuY3Rpb25zLCBhbmQgc28KLSAgICBjb250ZXh0J3MgY3Vy cmVudF9zdG10X2luX2dlbiBpcyBzZXQgaW4gc3RhcnQoKS9lbmQoKSAod2hpY2ggaXMgY2xlYW46 IG9iamVjdAotICAgIHNldHMgX2l0c18gdmFyaWFibGVzLCBkb2VzIG5vdCBsZXQgaXRzIGNoaWxk IGRvIGl0KS4KKyAgICAgIGNvbnRleHQncyBjdXJyZW50X3N0bXRfaW5fZ2VuIGlzIHNldCBpbiBz dGFydCgpL2VuZCgpICh3aGljaCBpcyBjbGVhbjoKKyAgICAgIG9iamVjdCBzZXRzIF9pdHNfIHZh cmlhYmxlcywgZG9lcyBub3QgbGV0IGl0cyBjaGlsZCBkbyBpdCkuCiAgICovCiAgIHN0bXQtPmN1 cnJlbnRfc3RydWN0PSBwYXJlbnQ7CiAgIERCVUdfQVNTRVJUKHBhcmVudCA9PSBOVUxMIHx8IHN0 bXQgPT0gcGFyZW50LT5zdG10KTsKQEAgLTIzNiw3ICsyMzUsNyBAQCBPcHRfdHJhY2Vfc3RydWN0 JiBPcHRfdHJhY2Vfc3RydWN0Ojpkb19hCiAgICAgICAoInNlbGVjdCIgYW5kIG90aGVyIGxhbmd1 YWdlIGtleXdvcmRzKS4gSWYgd2UgZGlyZWN0bHkgc3RvcmUgdGhhdCBtaXggaW4gYQogICAgICAg VVRGOCBjb2x1bW4sIHRoZSBxdWVyeV9jaGFyc2V0IHBpZWNlIGNhdXNlcyBhbiBpc3N1ZToKICAg ICAgIEZpZWxkX2Jsb2I6OnN0b3JlKCkgd2lsbCB0cnVuY2F0ZSB0aGUgdHJhY2UgYXQgZmlyc3Qg dW5yZWNvZ25pemVkCi0gICAgICBjaGFyYWN0ZXIuIEF0IHdvcnNlLCBhIHNpbmdsZSBiYWQgY2hh cmFjdGVyIGluIHRoZSBleHBhbmRlZCBxdWVyeSBtYWtlcworICAgICAgY2hhcmFjdGVyLiBFdmVu IHdvcnNlLCBhIHNpbmdsZSBiYWQgY2hhcmFjdGVyIGluIHRoZSBleHBhbmRlZCBxdWVyeSBtYWtl cwogICAgICAgYWxsIHRoZSByZXN0IG9mIHRoZSB0cmFjZSBiZSBsb3N0LgogICAgICAgVG8gd29y ayBhcm91bmQgdGhlIGJ1Zywgd2UgZm9yY2UgYSBjb252ZXJzaW9uIGZyb20gVVRGOCB0byBVVEY4 LCB3aGljaAogICAgICAgd2lsbCByZXBsYWNlIGFueSBub24tVVRGOCBjaGFyYWN0ZXJzIHdpdGgg Jz8nLiBTb21lIHF1ZXJ5X2NoYXJzZXQKQEAgLTI1MCw3ICsyNDksNiBAQCBPcHRfdHJhY2Vfc3Ry dWN0JiBPcHRfdHJhY2Vfc3RydWN0Ojpkb19hCiAgICAgICBzdG10LT5idWZmZXIuYXBwZW5kX2Vz Y2FwZWQodmFsLCB2YWxfbGVuZ3RoKTsKICAgICBlbHNlCiAgICAgewotCiAgICAgICB1aW50MzIg bmV3X2xlbmd0aD0gc3lzdGVtX2NoYXJzZXRfaW5mby0+bWJtYXhsZW4gKiB2YWxfbGVuZ3RoOwog ICAgICAgY2hhciAqdXRmOF9zdHI9IChjaGFyICopbXlfbWFsbG9jKG5ld19sZW5ndGgsIE1ZRigw KSk7CiAgICAgICBpZiAodXRmOF9zdHIgPT0gTlVMTCkKQEAgLTI4MSw2ICsyNzksMTAgQEAgT3B0 X3RyYWNlX3N0cnVjdCYgT3B0X3RyYWNlX3N0cnVjdDo6ZG9fYQogICByZXR1cm4gKnRoaXM7CiB9 CiAKK25hbWVzcGFjZSB7CitMRVhfQ1NUUklORyByZWFkYWJsZXNbXT0geyB7IFNUUklOR19XSVRI X0xFTigiZmFsc2UiKSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTVFJJTkdfV0lU SF9MRU4oInRydWUiKSB9IH07Cit9CiAKIE9wdF90cmFjZV9zdHJ1Y3QmIE9wdF90cmFjZV9zdHJ1 Y3Q6OmRvX2FkZChjb25zdCBjaGFyICprZXksIGJvb2wgdmFsKQogewpAQCAtMjkwLDggKzI5Miw2 IEBAIE9wdF90cmFjZV9zdHJ1Y3QmIE9wdF90cmFjZV9zdHJ1Y3Q6OmRvX2EKICAgICByZXR1cm4g KnRoaXM7CiAgIHN0bXQtPnNlcGFyYXRvcigpOwogICBhZGRfa2V5X25hbWUoa2V5KTsKLSAgTEVY X0NTVFJJTkcgcmVhZGFibGVzW109IHsgeyBTVFJJTkdfV0lUSF9MRU4oImZhbHNlIikgfSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBTVFJJTkdfV0lUSF9MRU4oInRydWUiKSB9IH07 CiAgIGNvbnN0IExFWF9DU1RSSU5HICpyZWFkYWJsZT0gJnJlYWRhYmxlc1soaW50KXZhbF07CiAg IHN0bXQtPmJ1ZmZlci5hcHBlbmQocmVhZGFibGUtPnN0ciwgcmVhZGFibGUtPmxlbmd0aCk7CiAg IHJldHVybiAqdGhpczsKQEAgLTMwMSw3ICszMDEsNyBAQCBPcHRfdHJhY2Vfc3RydWN0JiBPcHRf dHJhY2Vfc3RydWN0Ojpkb19hCiBPcHRfdHJhY2Vfc3RydWN0JiBPcHRfdHJhY2Vfc3RydWN0Ojpk b19hZGQoY29uc3QgY2hhciAqa2V5LCBsb25nbG9uZyB2YWwpCiB7CiAgIERCVUdfQVNTRVJUKHN0 YXJ0ZWQpOwotICBjaGFyIGJ1ZlsyMl07CisgIGNoYXIgYnVmWzIyXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBtYWdpYyBjb25zdGFudAogICBsbHN0cih2YWwsIGJ1Zik7CiAg IERCVUdfUFJJTlQoIm9wdF90cmFjZSIsICgiJXM6ICVzIiwga2V5LCBidWYpKTsKICAgaWYgKCFz dG10LT5zdXBwb3J0X0lfUykKQEAgLTMzMSw3ICszMzEsNyBAQCBPcHRfdHJhY2Vfc3RydWN0JiBP cHRfdHJhY2Vfc3RydWN0Ojpkb19hCiBPcHRfdHJhY2Vfc3RydWN0JiBPcHRfdHJhY2Vfc3RydWN0 Ojpkb19hZGQoY29uc3QgY2hhciAqa2V5LCBkb3VibGUgdmFsKQogewogICBEQlVHX0FTU0VSVChz dGFydGVkKTsKLSAgY2hhciBidWZbMzJdOworICBjaGFyIGJ1ZlszMl07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gbWFnaWMgY29uc3RhbnQKICAgbXlfc25wcmludGYoYnVmLCBz aXplb2YoYnVmKSwgIiVnIiwgdmFsKTsKICAgREJVR19QUklOVCgib3B0X3RyYWNlIiwgKCIlczog JXMiLCBrZXksIGJ1ZikpOwogICBpZiAoIXN0bXQtPnN1cHBvcnRfSV9TKQpAQCAtMzg0LDE3ICsz ODQsMTggQEAgY29uc3QgY2hhciAqT3B0X3RyYWNlX2NvbnRleHQ6OmZlYXR1cmVfbgogICAiZ3Jl ZWR5X3NlYXJjaCIsICJyYW5nZV9vcHRpbWl6ZXIiLCAiZGVmYXVsdCIsIE51bGxTCiB9OwogCi1j b25zdCBPcHRfdHJhY2VfY29udGV4dDo6ZmVhdHVyZV92YWx1ZSBPcHRfdHJhY2VfY29udGV4dDo6 RkVBVFVSRVNfREVGQVVMVD0KK2NvbnN0IE9wdF90cmFjZV9jb250ZXh0OjpmZWF0dXJlX3ZhbHVl IAorT3B0X3RyYWNlX2NvbnRleHQ6OmRlZmF1bHRfZmVhdHVyZXM9CiAgIE9wdF90cmFjZV9jb250 ZXh0OjpmZWF0dXJlX3ZhbHVlKE9wdF90cmFjZV9jb250ZXh0OjpHUkVFRFlfU0VBUkNIIHwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6OlJBTkdF X09QVElNSVpFUik7CiAKLU9wdF90cmFjZV9jb250ZXh0OjpPcHRfdHJhY2VfY29udGV4dCh2b2lk KToKK09wdF90cmFjZV9jb250ZXh0OjpPcHRfdHJhY2VfY29udGV4dCgpOgogICBvbGRlc3Rfc3Rt dF90b19zaG93KE5VTEwpLCBuZXdlc3Rfc3RtdF90b19zaG93KE5VTEwpLCBzdG10X3RvX2RlbChO VUxMKSwKICAgc2luY2Vfb2Zmc2V0XzAoMCksIGN1cnJlbnRfc3RtdF9pbl9nZW4oTlVMTCksIGNh bm5vdF9jaGFuZ2Vfc2V0dGluZ3MoZmFsc2UpCiB7fQogCiAKLU9wdF90cmFjZV9jb250ZXh0Ojp+ T3B0X3RyYWNlX2NvbnRleHQodm9pZCkKK09wdF90cmFjZV9jb250ZXh0Ojp+T3B0X3RyYWNlX2Nv bnRleHQoKQogewogICAvKiBUaGVyZSBtYXkgd2VsbCBiZSBzb21lIGZldyBlbmRlZCB0cmFjZXMg bGVmdDogKi8KICAgcHVyZ2UodHJ1ZSk7CkBAIC00MDUsNyArNDA2LDcgQEAgT3B0X3RyYWNlX2Nv bnRleHQ6On5PcHRfdHJhY2VfY29udGV4dCh2bwogfQogCiAKLU9wdF90cmFjZV9zdHJ1Y3QgKk9w dF90cmFjZV9jb250ZXh0OjpnZXRfY3VycmVudF9zdHJ1Y3Qodm9pZCkgY29uc3QKK09wdF90cmFj ZV9zdHJ1Y3QgKk9wdF90cmFjZV9jb250ZXh0OjpnZXRfY3VycmVudF9zdHJ1Y3QoKSBjb25zdAog ewogICByZXR1cm4gY3VycmVudF9zdG10X2luX2dlbi0+Y3VycmVudF9zdHJ1Y3Q7CiB9CkBAIC00 NzYsMTMgKzQ3NywxMyBAQCB2b2lkIE9wdF90cmFjZV9jb250ZXh0OjpwdXJnZShib29sIHB1cmdl CiAgICAgLyogVGhpcyBjYXNlIGlzIG1hbmFnZWQgaW4gQGMgT3B0X3RyYWNlX2NvbnRleHQ6OnN0 YXJ0KCkgKi8KICAgICBEQlVHX1ZPSURfUkVUVVJOOwogICB9Ci0gIHVsb25nIGk9IDA7IC8vIGRp c3RhbmNlIHRvIHRoZSBuZXdlc3QgdHJhY2UgKHVuaXQ6ICdsaXN0IGVsZW1lbnRzJykKKyAgbG9u ZyBpPSAwOyAvLyBkaXN0YW5jZSB0byB0aGUgbmV3ZXN0IHRyYWNlICh1bml0OiAnbGlzdCBlbGVt ZW50cycpCiAgIE9wdF90cmFjZV9zdG10ICpzdG10OwogICAvKiBTdGFydCBmcm9tIHRoZSBuZXdl c3QgdHJhY2VzLCBzY3JvbGwgYmFjayBpbiB0aW1lICovCiAgIGZvciAoc3RtdD0gbmV3ZXN0X3N0 bXRfdG9fc2hvdyA7IHN0bXQgIT0gTlVMTCA7ICkKICAgewogICAgIGkrKzsKLSAgICBpZiAoIXB1 cmdlX2FsbCAmJiBpIDw9ICh1bG9uZykoLW9mZnNldCkpCisgICAgaWYgKCFwdXJnZV9hbGwgJiYg aSA8PSAoLW9mZnNldCkpCiAgICAgewogICAgICAgLyogT0ZGU0VUIG1hbmRhdGVzIHRoYXQgdGhp cyB0cmFjZSBzaG91bGQgYmUga2VwdDsgbW92ZSB0byBwcmV2aW91cyAqLwogICAgICAgc3RtdD0g c3RtdC0+cHJldjsKQEAgLTYwNiw2ICs2MDcsNyBAQCBib29sIE9wdF90cmFjZV9jb250ZXh0Ojpz dGFydChib29sIHN1cHBvCiAgICAgewogICAgICAgREJVR19QUklOVCgib3B0X3RyYWNlIiwgKCJk aXNhYmxlZDogc2luY2Vfb2Zmc2V0XzAoJWxsdSkgPj0iCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiBvZmZzZXQoJWx1KSArIGxpbWl0KCVsdSkiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIEJvdGggb2Zmc2V0IGFuZCBsaW1pdCBhcmUgc2lnbmVkLgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1bG9uZ2xvbmcpc2luY2Vfb2Zmc2V0XzAsIG9mZnNl dCwgbGltaXQpKTsKICAgICAgIG5ld19zdG10X3N1cHBvcnRfSV9TPSBmYWxzZTsKICAgICB9CkBA IC02MTYsNiArNjE4LDcgQEAgYm9vbCBPcHRfdHJhY2VfY29udGV4dDo6c3RhcnQoYm9vbCBzdXBw bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdG10X3N1 cHBvcnRfSV9TKTsKICAgREJVR19QUklOVCgib3B0X3RyYWNlIiwoIm5ldyBzdG10ICVwIHN1cHBv cnRfSV9TICVkIiwgc3RtdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCluZXdfc3Rt dF9zdXBwb3J0X0lfUykpOworICAvLyBuZXcgY2Fubm90IHJldHVybiBOVUxMLgogICBpZiAoc3Rt dCA9PSBOVUxMKQogICAgIERCVUdfUkVUVVJOKHRydWUpOwogCkBAIC02NDUsNyArNjQ4LDcgQEAg Ym9vbCBPcHRfdHJhY2VfY29udGV4dDo6c3RhcnQoYm9vbCBzdXBwbwogfQogCiAKLXZvaWQgT3B0 X3RyYWNlX2NvbnRleHQ6OmVuZCh2b2lkKQordm9pZCBPcHRfdHJhY2VfY29udGV4dDo6ZW5kKCkK IHsKICAgaWYgKGN1cnJlbnRfc3RtdF9pbl9nZW4gIT0gTlVMTCkKICAgewpAQCAtNjgzLDI2ICs2 ODYsMzAgQEAgdm9pZCBPcHRfdHJhY2VfY29udGV4dDo6ZW5kKHZvaWQpCiB9CiAKIAotc2l6ZV90 IE9wdF90cmFjZV9jb250ZXh0OjphbGxvd2VkX21lbV9zaXplKGNvbnN0IE9wdF90cmFjZV9zdG10 ICpmb3Jfc3RtdCkKLSAgY29uc3QKK25hbWVzcGFjZSB7CitzaXplX3QgYWxsb3dlZF9tZW1fc2l6 ZShjb25zdCBPcHRfdHJhY2Vfc3RtdCAqc3RtdF9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IE9wdF90cmFjZV9zdG10ICpmb3Jfc3RtdCkKIHsKLSAgREJVR19FTlRFUigiT3B0 X3RyYWNlX2NvbnRleHQ6OmFsbG93ZWRfbWVtX3NpemUiKTsKICAgc2l6ZV90IG1lbV9zaXplPSAw OwotICAvKiBFdmVuIHRvLWJlLWRlbGV0ZWQgdHJhY2VzIHVzZSBtZW1vcnksIHNvIGNvbnNpZGVy IHRoZW0gaW4gc3VtICovCi0gIGZvciAoT3B0X3RyYWNlX3N0bXQgKnN0bXRfc3RhcnQ9IG5ld2Vz dF9zdG10X3RvX3Nob3cgOwotICAgICAgIDsKLSAgICAgICBzdG10X3N0YXJ0PSBzdG10X3RvX2Rl bCkKKyAgZm9yIChjb25zdCBPcHRfdHJhY2Vfc3RtdCAqc3RtdD0gc3RtdF9zdGFydCA7CisgICAg ICAgc3RtdCAhPSBOVUxMIDsgc3RtdD0gc3RtdC0+cHJldl8oKSkKICAgewotICAgIGZvciAoT3B0 X3RyYWNlX3N0bXQgKnN0bXQ9IHN0bXRfc3RhcnQgOyBzdG10ICE9IE5VTEwgOyApCi0gICAgewot ICAgICAgaWYgKHN0bXQgIT0gZm9yX3N0bXQpCi0gICAgICAgIG1lbV9zaXplKz0gc3RtdC0+YnVm ZmVyLmFsbG9jZWRfbGVuZ3RoKCkgKwotICAgICAgICAgIHN0bXQtPnF1ZXJ5X2J1ZmZlci5hbGxv Y2VkX2xlbmd0aCgpOwotICAgICAgc3RtdD0gc3RtdC0+cHJldjsKLSAgICB9Ci0gICAgaWYgKHN0 bXRfc3RhcnQgPT0gc3RtdF90b19kZWwpCi0gICAgICBicmVhazsKKyAgICBpZiAoc3RtdCAhPSBm b3Jfc3RtdCkKKyAgICAgIG1lbV9zaXplKz0gc3RtdC0+YWxsb2NlZF9sZW5ndGgoKTsKICAgfQor ICByZXR1cm4gbWVtX3NpemU7Cit9Cit9CisKKworc2l6ZV90IE9wdF90cmFjZV9jb250ZXh0Ojph bGxvd2VkX21lbV9zaXplKGNvbnN0IE9wdF90cmFjZV9zdG10ICpmb3Jfc3RtdCkgY29uc3QKK3sK KyAgREJVR19FTlRFUigiT3B0X3RyYWNlX2NvbnRleHQ6OmFsbG93ZWRfbWVtX3NpemUiKTsKKyAg LyogRXZlbiB0by1iZS1kZWxldGVkIHRyYWNlcyB1c2UgbWVtb3J5LCBzbyBjb25zaWRlciB0aGVt IGluIHN1bSAqLworICBzaXplX3QgbWVtX3NpemU9IAorICAgIDo6YWxsb3dlZF9tZW1fc2l6ZShu ZXdlc3Rfc3RtdF90b19zaG93LCBmb3Jfc3RtdCkgKworICAgIDo6YWxsb3dlZF9tZW1fc2l6ZShz dG10X3RvX2RlbCwgZm9yX3N0bXQpOworCiAgIHNpemVfdCByYz0gKG1lbV9zaXplIDw9IG1heF9t ZW1fc2l6ZSkgPyAobWF4X21lbV9zaXplIC0gbWVtX3NpemUpIDogMDsKICAgREJVR19QUklOVCgi b3B0X3RyYWNlIiwgKCJyYyAlbGx1IG1heF9tZW1fc2l6ZSAlbGx1IiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1bG9uZ2xvbmcpcmMsICh1bG9uZ2xvbmcpbWF4X21lbV9zaXplKSk7CkBA IC03MjMsNyArNzMwLDcgQEAgY29uc3QgY2hhciAqT3B0X3RyYWNlX2NvbnRleHQ6OmdldF90YWls KAogfQogCiAKLXZvaWQgT3B0X3RyYWNlX2NvbnRleHQ6OnJlc2V0KHZvaWQpCit2b2lkIE9wdF90 cmFjZV9jb250ZXh0OjpyZXNldCgpCiB7CiAgIHB1cmdlKHRydWUpOwogICBzaW5jZV9vZmZzZXRf MD0gMDsKQEAgLTc1MCwyMCArNzU3LDIwIEBAIHZvaWQgT3B0X3RyYWNlX2l0ZXJhdG9yOjpvcGVy YXRvcisrKGludCkKICAgICAgICdsaW1pdCc7IGlmIG9mZnNldD49MCwgd2Ugc3RvcHBlZCBwcm9k dWNpbmcgdHJhY2VzIHdoZW4gJ2xpbWl0JyB3YXMKICAgICAgIHJlYWNoZWQuCiAgICAgKi8KLSAg ICBjdXJzb3I9IE5VTEw7IC8vIGxpa2UgdGhlICdlbmQnIGl0ZXJhdG9yIGhhcworICAgIGN1cnNv cj0gTlVMTDsKICAgfQogICByb3dfY291bnQrKzsKIH0KIAogCiAvKioKLSAgIEBub3RlIGJlY2F1 c2UgYWxsb2NhdGlvbiBpcyBkb25lIGluIGJpZyBjaHVua3MsIGJ1ZmZlci0+UHRyW3N0cl9sZW5n dGhdCisgICBAbm90ZSBCZWNhdXNlIGFsbG9jYXRpb24gaXMgZG9uZSBpbiBiaWcgY2h1bmtzLCBi dWZmZXItPlB0cltzdHJfbGVuZ3RoXQogICAgbWF5IGJlIHVuaW5pdGlhbGl6ZWQgd2hpbGUgYnVm ZmVyLT5QdHJbYWxsb2NhdGVkIGxlbmd0aF0gaXMgMCwgc28gd2UKICAgIG11c3QgdXNlIGNfcHRy X3NhZmUoKSBhcyB3ZSB3YW50IGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nICh3aGljaCBpcyBlYXNp ZXIKICAgIHRvIG1hbmlwdWxhdGUgaW4gYSBkZWJ1Z2dlciwgb3IgdG8gY29tcGFyZSBpbiB1bml0 IHRlc3RzIHdpdGgKLSAgIEFTU0VSVF9TVFJFUSkuCisgICBFWFBFQ1RfU1RSRVEpLgogICAgY19w dHJfc2FmZSgpIG1heSByZWFsbG9jIGFuIGVtcHR5IFN0cmluZyBmcm9tIDAgYnl0ZXMgdG8gOCBi eXRlcywKLSAgIHdoZW4gaXQgYWRkcyB0aGUgY2xvc2luZyBOVUwuCisgICB3aGVuIGl0IGFkZHMg dGhlIGNsb3NpbmcgTlVMTC4KICovCiBPcHRfdHJhY2VfaW5mbyBPcHRfdHJhY2VfaXRlcmF0b3I6 Om9wZXJhdG9yKigpCiB7CkBAIC03ODAsMTIgKzc4Nyw5IEBAIE9wdF90cmFjZV9pbmZvIE9wdF90 cmFjZV9pdGVyYXRvcjo6b3BlcmEKIH0KIAogCi1PcHRfdHJhY2VfaXRlcmF0b3IgT3B0X3RyYWNl X2l0ZXJhdG9yOjplbmQ7Ci0KLQogLyogT3B0X3RyYWNlX3N0bXQgY2xhc3MgKi8KIAotY29uc3Qg c2l6ZV90IE9wdF90cmFjZV9zdG10OjplbXB0eV90cmFjZV9sZW49IDQ7Citjb25zdCBzaXplX3Qg T3B0X3RyYWNlX3N0bXQ6OmVtcHR5X3RyYWNlX2xlbj0gNDsgLy8gbWFnaWMgbnVtYmVyCiBjb25z dCBzaXplX3QgT3B0X3RyYWNlX3N0bXQ6OmJ1ZmZlcl9hbGxvY19pbmNyZW1lbnQ9IDEwMjQ7CiAK IApAQCAtODAzLDcgKzgwNyw3IEBAIE9wdF90cmFjZV9zdG10OjpPcHRfdHJhY2Vfc3RtdChPcHRf dHJhY2UKIH0KIAogCi12b2lkIE9wdF90cmFjZV9zdG10OjplbmQodm9pZCkKK3ZvaWQgT3B0X3Ry YWNlX3N0bXQ6OmVuZCgpCiB7CiAgIERCVUdfQVNTRVJUKGRlcHRoID09IDApOwogICBkZXB0aD0g MDsKQEAgLTgyNSwyMiArODI5LDMwIEBAIHZvaWQgT3B0X3RyYWNlX3N0bXQ6OmVuZCh2b2lkKQog fQogCiAKLXZvaWQgT3B0X3RyYWNlX3N0bXQ6Om5leHRfbGluZSh2b2lkKQorc3RhdGljIGNvbnN0 IGNoYXIgbXlfc3BhY2VzW10gPQorICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IgorICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIKKyAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAg OyAvLyBFeHRlbmQgYXMgZGVzaXJlZCwgdG8gbWF4IHN1cHBvcnRlZCBpbmRlbnRhdGlvbiBsZXZl bC4KK3ZvaWQgT3B0X3RyYWNlX3N0bXQ6Om5leHRfbGluZSgpCiB7CiAgIGlmIChjdHgtPm9uZV9s aW5lKQogICAgIHJldHVybjsKICAgYnVmZmVyLmFwcGVuZCgnXG4nKTsKLSAgY2hhciBzcGFjZXNb XT0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotICAvLyAyIHNwYWNlcyBwZXIg bmVzdGluZyBsZXZlbAotICBjb25zdCBpbnQgbmI9IGRlcHRoICogMiwgc3BhY2VzX2xlbj0gc2l6 ZW9mKHNwYWNlcykgLSAxOwotICAvLyBhZGQgc3BhY2VzIGluIGNodW5rcyBvZiBzcGFjZXNfbGVu LCBiZXR0ZXIgdGhhbiBtYW55IGFwcGVuZCgnICcpCi0gIGZvciAoaW50IGk9IDA7IGkgPCBuYi9z cGFjZXNfbGVuOyBpKyspCi0gICAgYnVmZmVyLmFwcGVuZChzcGFjZXMsIHNwYWNlc19sZW4pOwot ICBidWZmZXIuYXBwZW5kKHNwYWNlcywgKG5iICUgc3BhY2VzX2xlbikpOworCisgIC8vIFlvdSBj YW4gZ2V0IGF3YXkgd2l0aCBhIHNpbmdsZSBhcHBlbmQgaGVyZToKKyAgaW50IGl4PSBzaXplb2Yo bXlfc3BhY2VzKSAtIDIqZGVwdGggLSAxOworICBpZiAoaXggPCAwKQorICAgIGl4PSAwOworICBi dWZmZXIuYXBwZW5kKCZteV9zcGFjZXNbaXhdKTsKIH0KIAogCi12b2lkIE9wdF90cmFjZV9zdG10 OjpwdXNoKHZvaWQpCit2b2lkIE9wdF90cmFjZV9zdG10OjpwdXNoKCkKIHsKICAgREJVR19BU1NF UlQoc3VwcG9ydF9JX1MpOwogICBkZXB0aCsrOwpAQCAtODU0LDE5ICs4NjYsMTYgQEAgdm9pZCBP cHRfdHJhY2Vfc3RtdDo6cHVzaCh2b2lkKQogfQogCiAKLXZvaWQgT3B0X3RyYWNlX3N0bXQ6OnBv cCh2b2lkKQordm9pZCBPcHRfdHJhY2Vfc3RtdDo6cG9wKCkKIHsKICAgREJVR19BU1NFUlQoc3Vw cG9ydF9JX1MpOwogICBkZXB0aC0tOwogfQogCiAKLXZvaWQgT3B0X3RyYWNlX3N0bXQ6OnNlcGFy YXRvcih2b2lkKQordm9pZCBPcHRfdHJhY2Vfc3RtdDo6c2VwYXJhdG9yKCkKIHsKLSAgLyoKLSAg ICBJZiB3ZSd2ZSBhbHJlYWR5IHdyaXR0ZW4gYW4gb2JqZWN0IGF0IHRoaXMgbGV2ZWwsIGZpcnN0 IHB1dCBhCi0gICAgY29tbWEuCi0gICovCisgIC8vIFB1dCBhIGNvbW1hIGZpcnN0LCBpZiB3ZSBo YXZlIGFscmVhZHkgd3JpdHRlbiBhbiBvYmplY3QgYXQgdGhpcyBsZXZlbC4KICAgaWYgKCFsZXZl bF9lbXB0eS5hdChkZXB0aCkpCiAgICAgYnVmZmVyLmFwcGVuZCgnLCcpOwogICBuZXh0X2xpbmUo KTsKQEAgLTg3NywxOSArODg2LDE5IEBAIHZvaWQgT3B0X3RyYWNlX3N0bXQ6OnNlcGFyYXRvcih2 b2lkKQogYm9vbCBPcHRfdHJhY2Vfc3RtdDo6c2V0X3F1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBz aXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQVJTRVRfSU5G TyAqY2hhcnNldCkKIHsKLSAgLyogU2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UgcGVyIHN0YXRl bWVudCAqLworICAvLyBTaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc3RhdGVtZW50Lgog ICBEQlVHX0FTU0VSVChxdWVyeV9idWZmZXIucHRyKCkgPT0gTlVMTCk7CiAgIHF1ZXJ5X2J1ZmZl ci5zZXRfY2hhcnNldChjaGFyc2V0KTsKLSAgLyogV2UncmUgdGFraW5nIGEgYml0IG9mIHNwYWNl IGZyb20gJ2J1ZmZlcicgKi8KKyAgLy8gV2UgYXJlIHRha2luZyBhIGJpdCBvZiBzcGFjZSBmcm9t ICdidWZmZXInLgogICBpZiAoYnVmZmVyLmFsbG9jZWRfbGVuZ3RoKCkgPj0gYnVmZmVyLmFsbG93 ZWRfbWVtX3NpemUpCiAgIHsKLSAgICAvKiB0cmFjZSBidWZmZXIgYWxyZWFkeSBvY2N1cGllcyBh bGwgc3BhY2UgKi8KKyAgICAvLyBUcmFjZSBidWZmZXIgYWxyZWFkeSBvY2N1cGllcyBhbGwgc3Bh Y2UuCiAgICAgYnVmZmVyLm1pc3NpbmdfYnl0ZXMrPSBsZW5ndGg7CiAgICAgcmV0dXJuIHRydWU7 CiAgIH0KICAgY29uc3Qgc2l6ZV90IGF2YWlsYWJsZT0gYnVmZmVyLmFsbG93ZWRfbWVtX3NpemUg LSBidWZmZXIuYWxsb2NlZF9sZW5ndGgoKTsKICAgcXVlcnlfYnVmZmVyLmFsbG93ZWRfbWVtX3Np emU9IGF2YWlsYWJsZTsKLSAgLyogTm8gbmVlZCB0byBlc2NhcGUgcXVlcnksIHRoaXMgaXMgbm90 IGZvciBKU09OICovCisgIC8qIE5vIG5lZWQgdG8gZXNjYXBlIHF1ZXJ5LCB0aGlzIGlzIG5vdCBm b3IgSlNPTi4gKi8KICAgY29uc3QgYm9vbCByYz0gcXVlcnlfYnVmZmVyLmFwcGVuZChxdWVyeSwg bGVuZ3RoKTsKICAgLyogU3BhY2Ugd2hpY2ggcXVlcnkgdG9vayBpcyB0YWtlbiBvdXQgb2YgdGhl IHRyYWNlOiAqLwogICBpZiAocXVlcnlfYnVmZmVyLmFsbG9jZWRfbGVuZ3RoKCkgPj0gYnVmZmVy LmFsbG93ZWRfbWVtX3NpemUpCkBAIC05MDQsNyArOTEzLDcgQEAgYm9vbCBPcHRfdHJhY2Vfc3Rt dDo6c2V0X3F1ZXJ5KGNvbnN0IGNoYQogCiBib29sIE9wdF90cmFjZV9zdG10OjpCdWZmZXI6OnJl YWxsb2ModWludDMyIGFyZ19sZW5ndGgpCiB7Ci0gIGJvb2wgcmM9IFN0cmluZzo6cmVhbGxvYyhh cmdfbGVuZ3RoKTsKKyAgYm9vbCByYz0gc3RyaW5nX2J1Zi5yZWFsbG9jKGFyZ19sZW5ndGgpOwog ICBtYWxsb2NfZXJyb3J8PSByYzsKICAgcmV0dXJuIHJjOwogfQpAQCAtOTMxLDcgKzk0MCw4IEBA IGJvb2wgT3B0X3RyYWNlX3N0bXQ6OkJ1ZmZlcjo6YXBwZW5kX2VzY2EKICAgICB7CiAgICAgICBy Yz0gZmFsc2U7CiAgICAgICBjb25zdCBjaGFyICpwc3RyLCAqcHN0cl9lbmQ7Ci0gICAgICBjaGFy IGJ1ZlsxMjhdIC8qIHRlbXBvcmFyeSBvdXRwdXQgYnVmZmVyKi8sICpwYnVmPSBidWY7CisgICAg ICBjaGFyIGJ1ZlsxMjhdOyAgICAgICAgICAgICAgICAgICAgIC8vIFRlbXBvcmFyeSBvdXRwdXQg YnVmZmVyLgorICAgICAgY2hhciAqcGJ1Zj0gYnVmOwogICAgICAgZm9yIChwc3RyPSBzdHIsIHBz dHJfZW5kPSAoc3RyICsgbGVuZ3RoKSA7IHBzdHIgPCBwc3RyX2VuZCA7IHBzdHIrKykKICAgICAg IHsKICAgICAgICAgY2hhciBlc2M7CkBAIC05MzksOCArOTQ5LDggQEAgYm9vbCBPcHRfdHJhY2Vf c3RtdDo6QnVmZmVyOjphcHBlbmRfZXNjYQogICAgICAgICAvKgogICAgICAgICAgIEpTT04gc3lu dGF4IHNheXMgdGhhdCBjb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiBFeHBlcmll bmNlCiAgICAgICAgICAgY29uZmlybXMgdGhhdCB0aGlzIG1lYW5zIEFTQ0lJIDAtPjMxIGFuZCAi IGFuZCBcIC4gQSBmZXcgb2YKLSAgICAgICAgICB0aGVtIGFyZSBhY2NlcHRlZCB3aXRoIGEgc2hv cnQgZXNjYXBpbmcgc3ludGF4ICh1c2luZyBcIDogbGlrZQotICAgICAgICAgIFxuKSBidXQgZm9y IG1vc3Qgb2YgdGhlbSwgb25seSBcdVhYWFggd29ya3MsIHdoZXJlIFhYWFggaXMgYW4KKyAgICAg ICAgICB0aGVtIGFyZSBhY2NlcHRlZCB3aXRoIGEgc2hvcnQgZXNjYXBpbmcgc3ludGF4ICh1c2lu ZyBcIDogbGlrZSBcbikKKyAgICAgICAgICBidXQgZm9yIG1vc3Qgb2YgdGhlbSwgb25seSBcdVhY WFggd29ya3MsIHdoZXJlIFhYWFggaXMgYQogICAgICAgICAgIGhleGFkZWNpbWFsIHZhbHVlIGZv ciB0aGUgY29kZSBwb2ludC4KICAgICAgICAgICBSdWxlcyBhbHNvIG1lbnRpb24gZXNjYXBpbmcg LyAsIGJ1dCBQeXRob24ncyBhbmQgUGVybCdzIGpzb24gbW9kdWxlcwogICAgICAgICAgIGRvIG5v dCByZXF1aXJlIGl0LCBhbmQgc29tZXdoZXJlIG9uIEludGVybmV0IHNvbWVvbmUgc2FpZCBKU09O CkBAIC05NDgsNyArOTU4LDcgQEAgYm9vbCBPcHRfdHJhY2Vfc3RtdDo6QnVmZmVyOjphcHBlbmRf ZXNjYQogICAgICAgICAqLwogICAgICAgICBzd2l0Y2ggKGMpCiAgICAgICAgIHsKLSAgICAgICAg ICAvLyBkb24ndCB1c2UgXHUgd2hlbiBwb3NzaWJsZSBmb3IgY29tbW9uIGNoYXJzLCBcIGlzIGVh c2llciB0byByZWFkOgorICAgICAgICAgIC8vIERvbid0IHVzZSBcdSB3aGVuIHBvc3NpYmxlIGZv ciBjb21tb24gY2hhcnMsIFwgaXMgZWFzaWVyIHRvIHJlYWQ6CiAgICAgICAgIGNhc2UgJ1xcJzoK ICAgICAgICAgICBlc2M9ICdcXCc7CiAgICAgICAgICAgYnJlYWs7CkBAIC05NjgsNyArOTc4LDcg QEAgYm9vbCBPcHRfdHJhY2Vfc3RtdDo6QnVmZmVyOjphcHBlbmRfZXNjYQogICAgICAgICAgIGVz Yz0gMDsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoZXNjICE9IDAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBpbmcgd2l0aCBiYWNrc2xhc2gKKyAg ICAgICAgaWYgKGVzYyAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwaW5n IHdpdGggYmFja3NsYXNoLgogICAgICAgICB7CiAgICAgICAgICAgKnBidWYrKz0gJ1xcJzsKICAg ICAgICAgICAqcGJ1ZisrPSBlc2M7CkBAIC05NzYsNyArOTg2LDcgQEAgYm9vbCBPcHRfdHJhY2Vf c3RtdDo6QnVmZmVyOjphcHBlbmRfZXNjYQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAg ICAgICB1aW50IGFzY2lpX2NvZGU9ICh1aW50KWM7Ci0gICAgICAgICAgaWYgKGFzY2lpX2NvZGUg PCAzMikgICAgICAgICAgICAgICAgICAvLyBlc2NhcGluZyB3aXRoIFx1CisgICAgICAgICAgaWYg KGFzY2lpX2NvZGUgPCAzMikgICAgICAgICAgICAgICAgICAvLyBFc2NhcGluZyB3aXRoIFx1CiAg ICAgICAgICAgewogICAgICAgICAgICAgKnBidWYrKz0gJ1xcJzsKICAgICAgICAgICAgICpwYnVm Kys9ICd1JzsKQEAgLTk5NCwxNyArMTAwNCwxNyBAQCBib29sIE9wdF90cmFjZV9zdG10OjpCdWZm ZXI6OmFwcGVuZF9lc2NhCiAgICAgICAgICAgICAqcGJ1ZisrPSBfZGlnX3ZlY19sb3dlclthc2Np aV9jb2RlXTsKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgKnBidWYr Kz0gYzsgLy8gbm9ybWFsIGNoYXJhY3Rlciwgbm8gZXNjYXBpbmcgbmVlZGVkCisgICAgICAgICAg ICAqcGJ1ZisrPSBjOyAvLyBOb3JtYWwgY2hhcmFjdGVyLCBubyBlc2NhcGluZyBuZWVkZWQuCiAg ICAgICAgIH0KLSAgICAgICAgaWYgKHBidWYgPiBidWYgKyAoc2l6ZW9mKGJ1ZikgLSA2KSkKKyAg ICAgICAgaWYgKHBidWYgPiBidWYgKyAoc2l6ZW9mKGJ1ZikgLSA2KSkgICAgIC8vIG1hZ2ljIG51 bWJlcgogICAgICAgICB7Ci0gICAgICAgICAgLyogbm8gcm9vbSBpbiAnYnVmJyBmb3IgbmV4dCBj aGFyLCBzbyBmbHVzaCBpdCAqLwotICAgICAgICAgIHJjfD0gU3RyaW5nOjphcHBlbmQoYnVmLCBw YnVmIC0gYnVmKTsKKyAgICAgICAgICAvLyBObyByb29tIGluICdidWYnIGZvciBuZXh0IGNoYXIs IHNvIGZsdXNoIGl0LgorICAgICAgICAgIHJjfD0gc3RyaW5nX2J1Zi5hcHBlbmQoYnVmLCBwYnVm IC0gYnVmKTsKICAgICAgICAgICBwYnVmPSBidWY7IC8vIGJhY2sgdG8gYnVmJ3Mgc3RhcnQKICAg ICAgICAgfQogICAgICAgfQotICAgICAgLyogZmx1c2ggYW55IGNoYXJzIGxlZnQgaW4gJ2J1Zicg Ki8KLSAgICAgIHJjfD0gU3RyaW5nOjphcHBlbmQoYnVmLCBwYnVmIC0gYnVmKTsKKyAgICAgIC8v IEZsdXNoIGFueSBjaGFycyBsZWZ0IGluICdidWYnLgorICAgICAgcmN8PSBzdHJpbmdfYnVmLmFw cGVuZChidWYsIHBidWYgLSBidWYpOwogICAgIH0KICAgICBtYWxsb2NfZXJyb3J8PSByYzsKICAg fQpAQCAtMTAyNyw3ICsxMDM3LDcgQEAgYm9vbCBPcHRfdHJhY2Vfc3RtdDo6QnVmZmVyOjphcHBl bmQoY29ucwogICAgICAgcmM9IHRydWU7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICByYz0gU3Ry aW5nOjphcHBlbmQoc3RyLCBsZW5ndGgpOworICAgICAgcmM9IHN0cmluZ19idWYuYXBwZW5kKHN0 ciwgbGVuZ3RoKTsKICAgICBtYWxsb2NfZXJyb3J8PSByYzsKICAgfQogICByZXR1cm4gcmM7CkBA IC0xMDQ0LDggKzEwNTQsOCBAQCBib29sIE9wdF90cmFjZV9zdG10OjpCdWZmZXI6OmFwcGVuZChj aGFyCiAgIH0KICAgZWxzZQogICB7Ci0gICAgLy8gbm8gbmVlZCBmb3IgZXNjYXBpbmcgY2hyLCBn aXZlbiBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkICovCi0gICAgcmM9IFN0cmluZzo6YXBwZW5k KGNocik7CisgICAgLy8gTm8gbmVlZCBmb3IgZXNjYXBpbmcgY2hyLCBnaXZlbiBob3cgdGhpcyBm dW5jdGlvbiBpcyB1c2VkLgorICAgIHJjPSBzdHJpbmdfYnVmLmFwcGVuZChjaHIpOwogICAgIG1h bGxvY19lcnJvcnw9IHJjOwogICB9CiAgIHJldHVybiByYzsKQEAgLTEwNTYsMTEgKzEwNjYsMTMg QEAgYm9vbCBPcHRfdHJhY2Vfc3RtdDo6QnVmZmVyOjphcHBlbmQoY2hhcgogCiBPcHRfdHJhY2Vf ZGlzYWJsZV9JX1M6Ok9wdF90cmFjZV9kaXNhYmxlX0lfUyhPcHRfdHJhY2VfY29udGV4dCAqY3R4 X2FyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg ZGlzYWJsZV9hcmcpIDoKKyAgY3R4KGN0eF9hcmcpLAorICBzdG10KGN0eCA/IGN0eC0+Y3VycmVu dF9zdG10X2luX2dlbiA6IE5VTEwpLAogICBkaXNhYmxlKGRpc2FibGVfYXJnKQogewogICBpZiAo bGlrZWx5KCFkaXNhYmxlKSkKICAgICByZXR1cm47Ci0gIGN0eD0gY3R4X2FyZzsKKwogICBpZiAo Y3R4ICE9IE5VTEwpCiAgIHsKICAgICAvKiBEaXNhYmxlIGluIHRvLWJlLWNyZWF0ZWQgZnV0dXJl IHRyYWNlcyAqLwpAQCAtMTA2OSw3ICsxMDgxLDYgQEAgT3B0X3RyYWNlX2Rpc2FibGVfSV9TOjpP cHRfdHJhY2VfZGlzYWJsZQogICAgIHNhdmVkX2N0eF9jYW5ub3RfY2hhbmdlX3NldHRpbmdzPSBj dHgtPmNhbm5vdF9jaGFuZ2Vfc2V0dGluZ3M7CiAgICAgLyogTWFyayB0aGF0IHRoaXMgZGlzYWJs aW5nIGlzIG1hbmRhdG9yeSBmb3IgYWxsOiAqLwogICAgIGN0eC0+Y2Fubm90X2NoYW5nZV9zZXR0 aW5ncz0gdHJ1ZTsKLSAgICBzdG10PSBjdHgtPmN1cnJlbnRfc3RtdF9pbl9nZW47CiAgICAgaWYg KHN0bXQgIT0gTlVMTCkKICAgICB7CiAgICAgICAvKiBEaXNhYmxlIGFsc28gaW4gdGhlIGN1cnJl bnQgdHJhY2UgKi8KQEAgLTEwODAsNyArMTA5MSw3IEBAIE9wdF90cmFjZV9kaXNhYmxlX0lfUzo6 T3B0X3RyYWNlX2Rpc2FibGUKIH0KIAogCi1PcHRfdHJhY2VfZGlzYWJsZV9JX1M6On5PcHRfdHJh Y2VfZGlzYWJsZV9JX1Modm9pZCkKK09wdF90cmFjZV9kaXNhYmxlX0lfUzo6fk9wdF90cmFjZV9k aXNhYmxlX0lfUygpCiB7CiAgIGlmIChsaWtlbHkoIWRpc2FibGUpKQogICAgIHJldHVybjsKCj09 PSBtb2RpZmllZCBmaWxlICdzcWwvb3B0X3RyYWNlLmgnCi0tLSBhL3NxbC9vcHRfdHJhY2UuaAky MDEwLTEyLTE5IDE0OjI0OjAzICswMDAwCisrKyBiL3NxbC9vcHRfdHJhY2UuaAkyMDExLTAxLTEx IDA4OjE1OjQ2ICswMDAwCkBAIC0xOCwxMiArMTgsMTQgQEAKIAogI2luY2x1ZGUgIm15X2NvbmZp Zy5oIiAgLy8gT1BUSU1JWkVSX1RSQUNFCiAjaW5jbHVkZSAic3FsX2FycmF5LmgiICAvLyBEeW5h bWljX2FycmF5Ci1jbGFzcyBUSEQ7CiAjaW5jbHVkZSAibXlfYmFzZS5oIiAgICAvLyBoYV9yb3dz CiAjaW5jbHVkZSAic3FsX3N0cmluZy5oIiAvLyBTdHJpbmcKICNpbmNsdWRlICJzcWxfbGlzdC5o IiAgIC8vIGJlY2F1c2Ugc3FsX2NtZC5oIG5lZWRzIGl0CiAjaW5jbHVkZSAic3FsX2NtZC5oIiAg ICAvLyBmb3IgZW51bV9zcWxfY29tbWFuZAogCitzdHJ1Y3Qgc3Rfc2NoZW1hX3RhYmxlOworc3Ry dWN0IFRBQkxFX0xJU1Q7CisKIC8qKgogICAgQGZpbGUKICAgIEFQSSBmb3IgdGhlIE9wdGltaXpl ciB0cmFjZSAoV0wjNTI1NykKQEAgLTU2LDE3ICs1OCwxNyBAQCBjbGFzcyBUSEQ7CiAgIGRpY3Rp b25hcnkgb3IgUGVybCdzIGFzc29jaWF0aXZlIGFycmF5IG9yIGhhc2ggb3IgU1RMJ3MgaGFzaF9t YXAuCiAgIEBsaSAiYXJyYXlzIiAob3JkZXJlZCBzZXQgb2YgdmFsdWVzKTsgZXF1aXZhbGVudCB0 byBQeXRob24ncyBhbmQgUGVybCdzIGxpc3QKICAgb3IgU1RMJ3MgdmVjdG9yLgotICBAbGkgInZh bHVlcyI6IGEgdmFsdWUgY2FuIGJlIGEgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsIHdo aWNoIHdlIGFsbCBjYWxsCi0gICJzY2FsYXJzIiwgb3IgYmUgYW4gb2JqZWN0LCBhcnJheS4KKyAg QGxpICJ2YWx1ZXMiOiBhIHZhbHVlIGNhbiBiZSBhIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBu dWxsLAorICB3aGljaCB3ZSBhbGwgY2FsbCAic2NhbGFycyIsIG9yIGJlIGFuIG9iamVjdCwgYXJy YXkuCiAKLSAgRm9yIGV4YW1wbGUgKGFmdGVyICI8PCIgYXJlIGV4cGxhbmF0aW9ucyB3aGljaCBh cmUgbm90IHBhcnQgb2Ygb3V0cHV0KToKKyAgRm9yIGV4YW1wbGUgKGV4cGxhbmF0aW9ucyBhZnRl ciAiPDwiIGFyZSBub3QgcGFydCBvZiBvdXRwdXQpOgogQHZlcmJhdGltCiAgIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICA8PCBzdGFydCBvZiB0b3Agb2JqZWN0CiAgICAgImZpcnN0X25hbWUi OiAiR3VzdGF2ZSIsICA8PCBrZXkvdmFsdWUgcGFpciAodmFsdWUgaXMgc3RyaW5nKQogICAgICJs YXN0X25hbWUiOiAiRWlmZmVsIiwgICAgPDwga2V5L3ZhbHVlIHBhaXIgKHZhbHVlIGlzIHN0cmlu ZykKICAgICAiYm9ybiI6IDE4MzIsICAgICAgICAgICAgIDw8IGtleS92YWx1ZSBwYWlyICh2YWx1 ZSBpcyBpbnRlZ2VyKQogICAgICJjb250cmlidXRpb25zX3RvIjogWyAgICAgPDwga2V5L3ZhbHVl IHBhaXIgKHZhbHVlIGlzIGFycmF5KQotICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgPDwg MXN0IGl0ZW0gb2YgYXJyYXkgaXMgYW4gb2JqZWN0IChoZXJlIGEgYnVpbGRpbmcpCisgICAgICAg eyAgICAgICAgICAgICAgICAgICAgICA8PCAxc3QgaXRlbSBvZiBhcnJheSBpcyBhbiBvYmplY3Qg KGEgYnVpbGRpbmcpCiAgICAgICAgICAibmFtZSI6ICJFaWZmZWwgdG93ZXIiLAogICAgICAgICAg ImxvY2F0aW9uIjogUGFyaXMKICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgIDw8IGVuZCBv ZiAxc3QgaXRlbSBvZiBhcnJheQpAQCAtMTkwLDIxICsxOTIsMjEgQEAgY2xhc3MgVEhEOwogICBP cHRfdHJhY2VfYXJyYXkgb3RhKHRyYWNlLCAic2VtaWpvaW5fc3RyYXRlZ3lfY2hvaWNlIik7CiBA ZW5kdmVyYmF0aW0KIAotICB0aGlzIGNyZWF0ZXMgYW4gYXJyYXkgZm9yIGtleSAic2VtaWpvaW5f c3RyYXRlZ3lfY2hvaWNlIi4gV2UgYXJlIGdvaW5nIHRvCisgIFRoaXMgY3JlYXRlcyBhbiBhcnJh eSBmb3Iga2V5ICJzZW1pam9pbl9zdHJhdGVneV9jaG9pY2UiLiBXZSBhcmUgZ29pbmcgdG8KICAg bGlzdCBwb3NzaWJsZSBzZW1pam9pbiBzdHJhdGVneSBjaG9pY2VzLgogCiBAdmVyYmF0aW0KICAg T3B0X3RyYWNlX29iamVjdCBvdG8odHJhY2UpOwogQGVuZHZlcmJhdGltCiAKLSAgdGhpcyBjcmVh dGVzIGFuIG9iamVjdCB3aXRob3V0IGtleSAobm9ybWFsLCBpdCdzIGluIGFuIGFycmF5KS4gVGhp cworICBUaGlzIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGhvdXQga2V5IChub3JtYWwsIGl0J3MgaW4g YW4gYXJyYXkpLiBUaGlzCiAgIG9iamVjdCB3aWxsIGRlc2NyaWJlIG9uZSBzaW5nbGUgc3RyYXRl Z3kgY2hvaWNlLgogCiBAdmVyYmF0aW0KICAgb3RvLmFkZCgic3RyYXRlZ3kiLCAiRmlyc3RNYXRj aCIpOwogQGVuZHZlcmJhdGltCiAKLSAgdGhpcyBhZGRzIGEga2V5L3ZhbHVlIHBhaXIgdG8gdGhl IGp1c3QtY3JlYXRlZCBvYmplY3Q6IGtleSBpcyAic3RyYXRlZ3kiLAorICBUaGlzIGFkZHMgYSBr ZXkvdmFsdWUgcGFpciB0byB0aGUganVzdC1jcmVhdGVkIG9iamVjdDoga2V5IGlzICJzdHJhdGVn eSIsCiAgIHZhbHVlIGlzICJGaXJzdE1hdGNoIi4gVGhpcyBpcyB0aGUgc3RyYXRlZ3kgdG8gYmUg ZGVzY3JpYmVkIGluIHRoZQogICBqdXN0LWNyZWF0ZWQgb2JqZWN0LgogCkBAIC0yMTQsNyArMjE2 LDcgQEAgY2xhc3MgVEhEOwogICBvdG8uYWRkKCJjaG9zZW4iLCAocG9zLT5zal9zdHJhdGVneSA9 PSBTSl9PUFRfRklSU1RfTUFUQ0gpKTsKIEBlbmR2ZXJiYXRpbQogCi0gIHRoaXMgYWRkcyAzIGtl eS92YWx1ZSBwYWlyczogY29zdCBvZiBzdHJhdGVneSwgbnVtYmVyIG9mIHJlY29yZHMgcHJvZHVj ZWQKKyAgVGhpcyBhZGRzIDMga2V5L3ZhbHVlIHBhaXJzOiBjb3N0IG9mIHN0cmF0ZWd5LCBudW1i ZXIgb2YgcmVjb3JkcyBwcm9kdWNlZAogICBieSB0aGlzIHN0cmF0ZWd5LCBhbmQgd2hldGhlciB0 aGlzIHN0cmF0ZWd5IGlzIGNob3Nlbi4KIAogICBBZnRlciB0aGF0LCB0aGVyZSBpcyBzaW1pbGFy IGNvZGUgZm9yIG90aGVyIHNlbWlqb2luIHN0cmF0ZWdpZXMuCkBAIC0yOTAsOCArMjkyLDEwIEBA IGNsYXNzIFRIRDsKICAgQGxpIFVzZSBvbmx5IHNpbXBsZSBjaGFyYWN0ZXJzIGZvciBrZXkgbmFt ZXM6IGEtWkEtWl8jICh0byBkZW5vdGUgYQogICBudW1iZXIpLCBhbmQgbm8gc3BhY2UuCiAKKz8/ PyB0byBkZW5vdGUgYSBudW1iZXIgPz8/CisKICAgQGxpIEtlZXAgaW4gbWluZCB0aGFuIGluIGFu IG9iamVjdCwga2V5cyBhcmUgbm90IG9yZGVyZWQ7IGFuIGFwcGxpY2F0aW9uIG1heQotICBwYXJz ZSB0aGUgSlNPTiBvdXRwdXQgYW5kIG91dHB1dCBpdCBhZ2FpbiB3aXRoIGtleXMnIG9yZGVyIGNo YW5nZWQ7IHRodXMKKyAgcGFyc2UgdGhlIEpTT04gb3V0cHV0IGFuZCBvdXRwdXQgaXQgYWdhaW4g d2l0aCBrZXlzIG9yZGVyIGNoYW5nZWQ7IHRodXMKICAgd2hlbiBvcmRlciBtYXR0ZXJzLCB1c2Ug YW4gYXJyYXkgKHdoaWNoIG1heSBpbXBseSBoYXZpbmcgYW5vbnltb3VzIG9iamVjdHMKICAgYXMg aXRlbXMgb2YgdGhlIGFycmF5LCB3aXRoIGtleXMgaW5zaWRlIHRoZSBhbm9ueW1vdXMgb2JqZWN0 cywgc2VlIGhvdyBpdCdzCiAgIGRvbmUgaW4gSk9JTjo6b3B0aW1pemVfc3RlcHMoKSkuIEtlZXAg aW4gbWluZCB0aGF0IGluIGFuIG9iamVjdCBrZXlzIHNob3VsZApAQCAtMzIxLDggKzMyNSw4IEBA IGNsYXNzIE9wdF90cmFjZV9zdG10OwogCiAgIEBsaSBXaGVuIGFkZGluZyBhIHZhbHVlIChzY2Fs YXIgb3IgYXJyYXkgb3Igb2JqZWN0KSB0byBhbiBhcnJheSwgb3IgYWRkaW5nIGEKICAga2V5L3Zh bHVlIHBhaXIgdG8gYW4gb2JqZWN0LCB3ZSBuZWVkIHRoaXMgb3V0ZXIgb2JqZWN0IG9yIGFycmF5 IChmcm9tIG5vdwotICBvbiwgd2Ugd2lsbCBjYWxsICJzdHJ1Y3R1cmUiIGFuICJvYmplY3Qgb3Ig YXJyYXkiLCBhcyBib3RoIGFyZSBzdHJ1Y3R1cmVkCi0gIHR5cGVzKS4KKyAgb24sIHdlIHdpbGwg dXNlIHRoZSB0ZXJtICJzdHJ1Y3R1cmUiIGZvciAib2JqZWN0IG9yIGFycmF5IiwKKyAgYXMgYm90 aCBhcmUgc3RydWN0dXJlZCB0eXBlcykuCiAKICAgQGxpIFRoZSBtb3N0IG5hdHVyYWwgd2F5IHdv dWxkIGJlIHRoYXQgdGhlIG91dGVyIG9iamVjdCB3b3VsZCBiZSBwYXNzZWQgaW4KICAgYXJndW1l bnQgdG8gdGhlIGFkZGVyICh0aGUgZnVuY3Rpb24gd2hpY2ggd2FudHMgdG8gYWRkIHRoZSB2YWx1 ZSBvcgpAQCAtMzM0LDcgKzMzOCw4IEBAIGNsYXNzIE9wdF90cmFjZV9zdG10OwogICBtb2RpZnlp bmcgbWFueSBmdW5jdGlvbiBwcm90b3R5cGVzLgogICBFeGFtcGxlIChpbiBnZGIgImJhY2t0cmFj ZSIgbm90YXRpb246IGlubmVyIGZyYW1lcyBmaXJzdCk6CiBAdmVyYmF0aW0KLSAgICAjMCAgSXRl bV9pbl9zdWJzZWxlY3Q6OnNpbmdsZV92YWx1ZV90cmFuc2Zvcm1lciAtIG9wZW5zIGFuIG9iamVj dCBmb3Iga2V5ICJ0cmFuc2Zvcm1hdGlvbiIKKyAgICAjMCAgSXRlbV9pbl9zdWJzZWxlY3Q6OnNp bmdsZV92YWx1ZV90cmFuc2Zvcm1lcgorICAgICAgICAtIG9wZW5zIGFuIG9iamVjdCBmb3Iga2V5 ICJ0cmFuc2Zvcm1hdGlvbiIKICAgICAjMSAgSXRlbV9pbl9zdWJzZWxlY3Q6OnNlbGVjdF9pbl9s aWtlX3RyYW5zZm9ybWVyIC0gZG9lcyBubyB0cmFjaW5nCiAgICAgIzIgIEl0ZW1fYWxsYW55X3N1 YnNlbGVjdDo6c2VsZWN0X3RyYW5zZm9ybWVyIC0gZG9lcyBubyB0cmFjaW5nCiAgICAgIzMgIEpP SU46OnByZXBhcmUgLSBvcGVucyBhbiBvYmplY3QgZm9yIGtleSAiam9pbl9wcmVwYXJhdGlvbiIK QEAgLTM0NCwyOCArMzQ5LDMyIEBAIGNsYXNzIE9wdF90cmFjZV9zdG10OwogCiAgIEBsaSBTbywg YXMgd2UgY2Fubm90IHByYWN0aWNhbGx5IHBhc3MgdGhlIG9iamVjdCBkb3duLCB3ZSByYXRoZXIg bWFpbnRhaW4gYQogICAiY3VycmVudCBvYmplY3Qgb3IgYXJyYXkiIGluIHRoZSBPcHRfdHJhY2Vf Y29udGV4dCBjb250ZXh0OyBpdCdzIGEgcG9pbnRlcgotICB0byBhbiBpbnN0YW5jZSBvZiBPcHRf dHJhY2Vfc3RydWN0LCBhbmQgdGhlIGZ1bmN0aW9uIGRlZXAgZG93biAoZnJhbWUgIzApIGdyYWJz Ci0gIGl0IGZyb20gdGhlIGNvbnRleHQsIHdoZXJlIGl0IHdhcyBkZXBvc2l0dGVkIGJ5IHRoZSBm dW5jdGlvbiBoaWdoIHVwIChmcmFtZQotICAjMTMgaW4gdGhlIGxhc3QgZXhhbXBsZSkuCisgIHRv IGFuIGluc3RhbmNlIG9mIE9wdF90cmFjZV9zdHJ1Y3QsIGFuZCB0aGUgZnVuY3Rpb24gZGVlcCBk b3duIChmcmFtZSAjMCkKKyAgZ3JhYnMgaXQgZnJvbSB0aGUgY29udGV4dCwgd2hlcmUgaXQgd2Fz IGRlcG9zaXR0ZWQgYnkgdGhlIGZ1bmN0aW9uIGhpZ2ggdXAKKyAgKGZyYW1lICMxMyBpbiB0aGUg bGFzdCBleGFtcGxlKS4KICovCiBjbGFzcyBPcHRfdHJhY2VfY29udGV4dAogewogcHVibGljOgot ICBPcHRfdHJhY2VfY29udGV4dCh2b2lkKTsKLSAgfk9wdF90cmFjZV9jb250ZXh0KHZvaWQpOwor ICBPcHRfdHJhY2VfY29udGV4dCgpOworICB+T3B0X3RyYWNlX2NvbnRleHQoKTsKIAogICAvKioK LSAgICAgRmxhZ3MnIG5hbWVzIGZvciBAQEBAb3B0aW1pemVyX3RyYWNlIHZhcmlhYmxlIG9mIEBj IHN5c192YXJzLmNjIDoKKyAgICAgTmFtZXMgb2YgZmxhZ3MgZm9yIEBAQEBvcHRpbWl6ZXJfdHJh Y2UgdmFyaWFibGUgb2YgQGMgc3lzX3ZhcnMuY2MgOgogICAgICBAbGkgImVuYWJsZWQiID0gdHJh Y2luZyBlbmFibGVkCiAgICAgIEBsaSAiZW5kX21hcmtlciIgPSBzZWUgcGFyYW1ldGVyIG9mIEBy ZWYgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CiAgICAgIEBsaSAib25lX2xpbmUiPSBzZWUgcGFy YW1ldGVyIG9mIEByZWYgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CiAgICAgIEBsaSAiZGVmYXVs dCIuCiAgICovCiAgIHN0YXRpYyBjb25zdCBjaGFyICpmbGFnX25hbWVzW107CisKICAgLyoqIEZs YWdzJyBudW1lcmljIHZhbHVlcyBmb3IgQEBAQG9wdGltaXplcl90cmFjZSB2YXJpYWJsZSAqLwor ICAvLyB0aGUgc3R5bGUgZ3VpZGUgc2F5cyBlbnVtIGVudW1fZmxhZ192YWx1ZSB7IC4uLiB9Cisg IC8vIHRoZSBzdHlsZSBndWlkZSBkb2VzICpub3QqIG1hbmRhdGUgdXBwZXJjYXNlIGVudW0gdmFs dWVzIC4uLi4uCiAgIGVudW0gZmxhZ192YWx1ZSB7CiAgICAgRkxBR19ERUZBVUxUPSAwLCBGTEFH X0VOQUJMRUQ9IDEsIEZMQUdfRU5EX01BUktFUj0gMiwgRkxBR19PTkVfTElORT0gNAogICB9Owor CiAgIC8qKgogICAgICBGZWF0dXJlcycgbmFtZXMgZm9yIEBAQEBvcHRpbWl6ZXJfdHJhY2VfZmVh dHVyZXMgdmFyaWFibGUgb2YKICAgICAgQGMgc3lzX3ZhcnMuY2M6CkBAIC0zNzUsMTMgKzM4NCwx NiBAQCBwdWJsaWM6CiAgICAgIEBsaSAiZGVmYXVsdCIuCiAgICovCiAgIHN0YXRpYyBjb25zdCBj aGFyICpmZWF0dXJlX25hbWVzW107CisKICAgLyoqIEZlYXR1cmVzJyBudW1lcmljIHZhbHVlcyBm b3IgQEBAQG9wdGltaXplcl90cmFjZV9mZWF0dXJlcyB2YXJpYWJsZSAqLworICAvLyBUaGVzZSBh cmUgYWN0dWFsbHkgZGVjaW1hbCBiaXQgdmFsdWVzKD8pCisgIC8vIHNvIG1heWJlIHdyaXRlIDEg PDwgMCwgMSA8PCAxLCBhbmQgc28gb24/Pz8KICAgZW51bSBmZWF0dXJlX3ZhbHVlIHsKICAgICBH UkVFRFlfU0VBUkNIPSAxLAogICAgIFJBTkdFX09QVElNSVpFUj0gMiwgLy8vQHRvZG8gam9pbiBj YWNoZSwgc2VtaWpvaW4uLi4KICAgICAvKgotICAgICAgaWYgeW91IGFkZCBoZXJlLCB1cGRhdGUg ZmVhdHVyZV92YWx1ZSBvZiBlbXB0eSBpbXBsZW1lbnRhdGlvbgotICAgICAgYW5kIEZFQVRVUkVT X0RFRkFVTFQhCisgICAgICBJZiB5b3UgYWRkIGhlcmUsIHVwZGF0ZSBmZWF0dXJlX3ZhbHVlIG9m IGVtcHR5IGltcGxlbWVudGF0aW9uCisgICAgICBhbmQgZGVmYXVsdF9mZWF0dXJlcyEKICAgICAq LwogICAgIC8qKgogICAgICAgIEFueXRoaW5nIHVuY2xhc3NpZmllZCwgaW5jbHVkaW5nIHRoZSB0 b3Agb2JqZWN0ICh0aHVzLCBieSAiaW5oZXJpdGFuY2UKQEAgLTM5MSwxNSArNDAzLDE1IEBAIHB1 YmxpYzoKICAgICAqLwogICAgIE1JU0M9IDEyOAogICB9OwotICBzdGF0aWMgY29uc3QgZmVhdHVy ZV92YWx1ZSBGRUFUVVJFU19ERUZBVUxUOworICBzdGF0aWMgY29uc3QgZmVhdHVyZV92YWx1ZSBk ZWZhdWx0X2ZlYXR1cmVzOwogCiAgIC8qKgogICAgICBTdGFydHMgYSBuZXcgdHJhY2UuCi0gICAg IEBwYXJhbSAgbmVlZF9pdF9mb3JfSV9TICBzaG91bGQgdHJhY2UgcHJvZHVjZSBvdXRwdXQgc3Vp dGFibGUgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbl9zY2hl bWEsIG9yIG9ubHkgc2VuZCB0byBEQlVHCi0gICAgIEBwYXJhbSAgZW5kX21hcmtlciAgICAgICBm b3IgYSBrZXkvKG9iamVjdHxhcnJheSkgcGFpciwgc2hvdWxkIHRoZSBrZXkgYmUKKyAgICAgQHBh cmFtICBuZWVkX2l0X2Zvcl9JX1MgIFNob3VsZCB0cmFjZSBwcm9kdWNlIG91dHB1dCBzdWl0YWJs ZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uX3NjaGVtYSwg b3Igb25seSBzZW5kIHRvIERCVUc/CisgICAgIEBwYXJhbSAgZW5kX21hcmtlciAgICAgICBGb3Ig YSBrZXkvKG9iamVjdHxhcnJheSkgcGFpciwgc2hvdWxkIHRoZSBrZXkgYmUKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkIGluIGEgY29tbWVudCB3aGVuIHRoZSBvYmplY3R8 YXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlcywgbGlrZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VzPyBsaWtlCiBAdmVyYmF0aW0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJrZXlfZm9vIjogewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG11bHRpLWxpbmUgYmxhaApAQCAtNDA5LDE0ICs0MjEsMTQg QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi4gTm90ZSB0aGF0 IFlBTUwgc3VwcG9ydHMgIy1wcmVmaXhlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29tbWVudHMgKHdlIHdvdWxkIGp1c3QgbmVlZCB0byBwdXQgdGhlIG5leHQKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGl0ZW0ncyAiLCIgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0ncyAi IyIpLgotICAgICBAcGFyYW0gIG9uZV9saW5lICAgICAgICAgc2hvdWxkIHRoZSB0cmFjZSBiZSBv biBhIHNpbmdsZSBsaW5lIHdpdGhvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu ZGVudGF0aW9uIChtb3JlIGNvbXBhY3QgZm9yIG5ldHdvcmsgdHJhbnNmZXIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRvIHByb2dyYW1zLCBsZXNzIGh1bWFuLXJlYWRhYmxlKQotICAg ICBAcGFyYW0gIG9mZnNldCAgICAgICAgICAgb2Zmc2V0IGZvciByZXN0cmljdGluZyB0cmFjZSBw cm9kdWN0aW9uCi0gICAgIEBwYXJhbSAgbGltaXQgICAgICAgICAgICBsaW1pdCBmb3IgcmVzdHJp Y3RpbmcgdHJhY2UgcHJvZHVjdGlvbgotICAgICBAcGFyYW0gIG1heF9tZW1fc2l6ZSAgICAgbWF4 aW11bSBhbGxvd2VkIGZvciBjdW11bGF0ZWQgc2l6ZSBvZiBhbGwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbWVtYmVyZWQgdHJhY2VzCi0gICAgIEBwYXJhbSAgZmVhdHVyZXMgICAg ICAgICBvbmx5IHRob3NlIG9wdGltaXplciBmZWF0dXJlcyBzaG91bGQgYmUgdHJhY2VkCisgICAg IEBwYXJhbSAgb25lX2xpbmUgICAgICAgICBTaG91bGQgdGhlIHRyYWNlIGJlIG9uIGEgc2luZ2xl IGxpbmUgd2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb24/ IChNb3JlIGNvbXBhY3QgZm9yIG5ldHdvcmsgdHJhbnNmZXIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRvIHByb2dyYW1zLCBsZXNzIGh1bWFuLXJlYWRhYmxlLikKKyAgICAgQHBhcmFt ICBvZmZzZXQgICAgICAgICAgIE9mZnNldCBmb3IgcmVzdHJpY3RpbmcgdHJhY2UgcHJvZHVjdGlv bi4KKyAgICAgQHBhcmFtICBsaW1pdCAgICAgICAgICAgIExpbWl0IGZvciByZXN0cmljdGluZyB0 cmFjZSBwcm9kdWN0aW9uLgorICAgICBAcGFyYW0gIG1heF9tZW1fc2l6ZSAgICAgTWF4aW11bSBh bGxvd2VkIGZvciBjdW11bGF0ZWQgc2l6ZSBvZiBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlbWVtYmVyZWQgdHJhY2VzLgorICAgICBAcGFyYW0gIGZlYXR1cmVzICAgICAgICAg T25seSB0aGVzZSBvcHRpbWl6ZXIgZmVhdHVyZXMgc2hvdWxkIGJlIHRyYWNlZC4KIAogICAgICBA cmV0dmFsIGZhbHNlICAgICAgICAgICAgb2sKICAgICAgQHJldHZhbCB0cnVlICAgICAgICAgICAg IGVycm9yIChPT00pCkBAIC00MjUsMjIgKzQzNywyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg bG9uZyBvZmZzZXQsIGxvbmcgbGltaXQsIHVsb25nIG1heF9tZW1fc2l6ZSwKICAgICAgICAgICAg ICB1bG9uZ2xvbmcgZmVhdHVyZXMpOwogICAvKiogRW5kcyB0aGUgY3VycmVudCB0cmFjZSAqLwot ICB2b2lkIGVuZCh2b2lkKTsKKyAgdm9pZCBlbmQoKTsKKwogICAvKiogUmV0dXJucyB3aGV0aGVy IHRoZXJlIGlzIGEgY3VycmVudCB0cmFjZSAqLwotICBib29sIGlzX3N0YXJ0ZWQodm9pZCkgY29u c3QgeyByZXR1cm4gY3VycmVudF9zdG10X2luX2dlbiAhPSBOVUxMOyB9CisgIGJvb2wgaXNfc3Rh cnRlZCgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRfc3RtdF9pbl9nZW4gIT0gTlVMTDsgfQorCiAg IC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50IG9wZW4gT2JqZWN0IE9yIEFycmF5ICovCi0gIE9wdF90 cmFjZV9zdHJ1Y3QgKmdldF9jdXJyZW50X3N0cnVjdCh2b2lkKSBjb25zdDsKKyAgT3B0X3RyYWNl X3N0cnVjdCAqZ2V0X2N1cnJlbnRfc3RydWN0KCkgY29uc3Q7CisKICAgLyoqCiAgICAgIFJldHVy bnMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IGJ5dGVzIG9mIHRoZSBjdXJyZW50IHRyYWNlLCAwLXRl cm1pbmF0ZWQuCiAgICAgIEBwYXJhbSAgc2l6ZSAgaG93IG1hbnkgbGFzdCBieXRlcyBhcmUgd2Fu dGVkCiAgICovCiAgIGNvbnN0IGNoYXIgKmdldF90YWlsKHNpemVfdCBzaXplKTsKKwogICAvKioK ICAgICAgQnJhaW53YXNoOiBkZWxldGVzIGFsbCByZW1lbWJlcmVkIHRyYWNlcyBhbmQgcmVzZXRz IGNvdW50ZXJzIHJlZ2FyZGluZwotICAgICBPRkZTRVQvTElNSVQgKHNvIHRoYXQgdGhlIG5leHQg c3RhdGVtZW50IGlzIGNvbnNpZGVyZWQgYXMgImF0IG9mZnNldAotICAgICAwIikuCisgICAgIE9G RlNFVC9MSU1JVCAoc28gdGhhdCB0aGUgbmV4dCBzdGF0ZW1lbnQgaXMgY29uc2lkZXJlZCBhcyAi YXQgb2Zmc2V0IDAiKS4KICAgKi8KLSAgdm9pZCByZXNldCh2b2lkKTsKKyAgdm9pZCByZXNldCgp OwogCiAgIC8qKgogICAgICBTZXQgdGhlICJvcmlnaW5hbCBxdWVyeSIgZm9yIHRoZSBjdXJyZW50 IHN0YXRlbWVudC4KQEAgLTQ2Miw3ICs0NzcsNyBAQCBwcml2YXRlOgogICAgICAtIHRvIG91dHB1 dCB0cmFjZXMgIm9sZGVzdCBmaXJzdCIgaW4gT1BUSU1JWkVSX1RSQUNFCiAgICAgIC0gdG8gcHJl c2VydmUgdHJhY2VzICJuZXdlc3QgZmlyc3QiIHdoZW4gb3B0aW1pemVyLXRyYWNlLW9mZnNldDww CiAgICAgIC0gdG8gZGVsZXRlIGEgdHJhY2UgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdCB3aGVu IGl0IGlzIHBlcm1hbmVudGx5IG91dAotICAgICBvZiB0aGUgb2Zmc2V0L2xpbWl0IHNob3dhYmxl IHdpbmRvdy4KKyAgICAgICBvZiB0aGUgb2Zmc2V0L2xpbWl0IHNob3dhYmxlIHdpbmRvdy4KICAg Ki8KICAgT3B0X3RyYWNlX3N0bXQgKm9sZGVzdF9zdG10X3RvX3Nob3c7CiAgIE9wdF90cmFjZV9z dG10ICpuZXdlc3Rfc3RtdF90b19zaG93OyAvLy88IE5ld2VzdCByZW1lbWJlcmVkIHN0YXRlbWVu dCB0cmFjZQpAQCAtNDczLDYgKzQ4OCw3IEBAIHByaXZhdGU6CiAgICAgIE9GRlNFVC9MSU1JVAog ICAqLwogICBoYV9yb3dzIHNpbmNlX29mZnNldF8wOworICAvLyBoYV9yb3dzIHNlZW1zIHN0cmFu Z2UsIHdoeSBub3QgaW50L2xvbmc/CiAKICAgLyoqCiAgICAgIFRyYWNlIHdoaWNoIGlzIGN1cnJl bnRseSBiZWluZyBnZW5lcmF0ZWQsIHdoZXJlIHN0cnVjdHVyZXMgYXJlIGJlaW5nCkBAIC01MDYs MTUgKzUyMiwxNyBAQCBwcml2YXRlOgogICAgICBmYWxzZTogdGhleSBzaG91bGQgc3VwcG9ydCBv bmx5IERCVUcgKG9yIG5vdGhpbmcsIGlmIG5vbi1kZWJ1ZyBiaW5hcnkpCiAgICovCiAgIGJvb2wg c3VwcG9ydF9JX1M7Ci0gIGJvb2wgZW5kX21hcmtlcjsgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIg b2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0Ci0gIGJvb2wgb25lX2xpbmU7ICAgIC8vLzwgY29w eSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0Ci0gIGxvbmcgb2Zmc2V0 OyAgICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0 Ci0gIGxvbmcgbGltaXQ7ICAgICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNl X2NvbnRleHQ6OnN0YXJ0Ci0gIHNpemVfdCBtYXhfbWVtX3NpemU7IC8vLzwgY29weSBvZiBwYXJh bWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CisgIGJvb2wgZW5kX21hcmtlcjsgICAg ICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0Cisg IGJvb2wgb25lX2xpbmU7ICAgICAgICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3Ry YWNlX2NvbnRleHQ6OnN0YXJ0CisgIGxvbmcgb2Zmc2V0OyAgICAgICAgICAgIC8vLzwgY29weSBv ZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CisgIGxvbmcgbGltaXQ7ICAg ICAgICAgICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0 YXJ0CisgIHNpemVfdCBtYXhfbWVtX3NpemU7ICAgIC8vLzwgY29weSBvZiBwYXJhbWV0ZXIgb2Yg T3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CiAgIGZlYXR1cmVfdmFsdWUgZmVhdHVyZXM7IC8vLzwg Y29weSBvZiBwYXJhbWV0ZXIgb2YgT3B0X3RyYWNlX2NvbnRleHQ6OnN0YXJ0CiAKLSAgLyoqIFdo ZXRoZXIgdGhlIHNldHRpbmdzIGFib3ZlIG1heSBiZSBjaGFuZ2VkIGZvciBhIG5ldyB0cmFjZSAq LworICAvKiogV2hldGhlciB0aGUgc2V0dGluZ3MgYWJvdmUgbWF5IGJlIGNoYW5nZWQgZm9yIGEg bmV3IHRyYWNlLiAqLworICAvLyBjb21tZW50IGlzIHBvc2l0aXZlLCB2YXJpYWJsZSBuYW1lIGlz IG5lZ2F0aXZlLgogICBib29sIGNhbm5vdF9jaGFuZ2Vfc2V0dGluZ3M7CisKICAgLyoqCiAgICAg IEZpbmQgYW5kIGRlbGV0ZSB1bm5lZWRlZCB0cmFjZXMuCiAgICAgIEZvciBleGFtcGxlIGlmIE9G RlNFVD0tMSxMSU1JVD0xLCBvbmx5IHRoZSBsYXN0IHRyYWNlIGlzIG5lZWRlZC4gV2hlbiBhCkBA IC01MjMsMjIgKzU0MSwzNCBAQCBwcml2YXRlOgogICAgICBAcGFyYW0gIGFsbCAgaWYgdHJ1ZSwg aWdub3JlIE9GRlNFVCBhbmQgdGh1cyBkZWxldGUgZXZlcnl0aGluZwogICAqLwogICB2b2lkIHB1 cmdlKGJvb2wgcHVyZ2VfYWxsKTsgLy8vPCBmaW5kIGFuZCBkZWxldGUgdW5uZWVkZWQgdHJhY2Vz Ci0gIC8qKiBwdXQgdHJhY2UgaW4gbGlzdCBvZiB0cmFjZXMgdG8gc2hvdyBpbiBPUFRJTUlaRVJf VFJBQ0UgKi8KKworICAvKiogUHV0IHRyYWNlIGluIGxpc3Qgb2YgdHJhY2VzIHRvIHNob3cgaW4g T1BUSU1JWkVSX1RSQUNFLiAqLwogICB2b2lkIGxpbmtfdG9fc2hvd24oT3B0X3RyYWNlX3N0bXQg KnN0bXQpOwotICAvKiogcmVtb3ZlIHRyYWNlIGZyb20gbGlzdCBvZiB0cmFjZXMgdG8gc2hvdyBp biBPUFRJTUlaRVJfVFJBQ0UgKi8KKworICAvKiogUmVtb3ZlIHRyYWNlIGZyb20gbGlzdCBvZiB0 cmFjZXMgdG8gc2hvdyBpbiBPUFRJTUlaRVJfVFJBQ0UuICovCiAgIHZvaWQgdW5saW5rX2Zyb21f c2hvd24oT3B0X3RyYWNlX3N0bXQgKnN0bXQpOwotICAvKiogcHV0IHRyYWNlIGluIGxpc3Qgb2Yg dW5uZWVkZWQgdHJhY2VzICovCisKKyAgLyoqIFB1dCB0cmFjZSBpbiBsaXN0IG9mIHVubmVlZGVk IHRyYWNlcy4gKi8KICAgdm9pZCBsaW5rX3RvX2RlbChPcHRfdHJhY2Vfc3RtdCAqc3RtdCk7Ci0g IC8qKiByZW1vdmUgdHJhY2UgZnJvbSBsaXN0IG9mIHVubmVlZGVkIHRyYWNlcyAqLworCisgIC8q KiBSZW1vdmUgdHJhY2UgZnJvbSBsaXN0IG9mIHVubmVlZGVkIHRyYWNlcy4gKi8KICAgdm9pZCB1 bmxpbmtfZnJvbV9kZWwoT3B0X3RyYWNlX3N0bXQgKnN0bXQpOworCiAgIC8qKiBjb21wdXRlIG1h eGltdW0gYWxsb3dlZCBtZW1vcnkgc2l6ZSBmb3IgdHJhY2UgJ2Zvcl9zdG10JyovCiAgIHNpemVf dCBhbGxvd2VkX21lbV9zaXplKGNvbnN0IE9wdF90cmFjZV9zdG10ICpmb3Jfc3RtdCkgY29uc3Q7 CiAKKyAgLy8gSGF2aW5nIHRvbyBtYW55IGZyaWVuZHMgaXMgYXNraW5nIGZvciB0cm91YmxlIC4u Li4KKyAgLy8gT3B0X3RyYWNlX3N0bXQgICBuZWVkcyBvbmx5IGEgY29uc3QgZ2V0dGVyIGZvciBv bmVfbGluZS4KKyAgLy8gT3B0X3RyYWNlX3N0cnVjdCBuZWVkcyBhIGNvdXBsZSBvZiBjb25zdCBn ZXR0ZXJzLCBwbHVzIGN1cnJlbnRfc3RtdF9pbl9nZW4KKyAgLy8gT3B0X3RyYWNlX2Rpc2FibGVf SV9TIGFjdHVhbGx5IGNoYW5nZXMgdGhlIHN0YXRlIG9mIHRoZSBjb250ZXh0IG9iamVjdCEKKyAg Ly8gT3B0X3RyYWNlX2l0ZXJhdG9yIG5lZWRzIG9ubHkgb2xkZXN0X3N0bXRfdG9fc2hvdyBhbmQg bGltaXQKKyAgLy8gYW5kIGZpbmFsbHk6IHRoZSBmcmVlIGZ1bmN0aW9uIGRvZXMgbm90IG5lZWQg ZnJpZW5kc2hpcC4KKwogICBmcmllbmQgY2xhc3MgT3B0X3RyYWNlX3N0bXQ7CiAgIGZyaWVuZCBj bGFzcyBPcHRfdHJhY2Vfc3RydWN0OwogICBmcmllbmQgY2xhc3MgT3B0X3RyYWNlX2Rpc2FibGVf SV9TOwogICBmcmllbmQgY2xhc3MgT3B0X3RyYWNlX2l0ZXJhdG9yOwotICBmcmllbmQgdm9pZCBv cHRfdHJhY2VfcHJpbnRfZXhwYW5kZWRfcXVlcnkoVEhEICp0aGQpOworICAvL2ZyaWVuZCB2b2lk IG9wdF90cmFjZV9wcmludF9leHBhbmRlZF9xdWVyeShUSEQgKnRoZCk7CiB9OwogCiAKQEAgLTU2 NSw3ICs1OTUsOCBAQCBwcml2YXRlOiAvLyBFeGNlcHQgb3RoZXIgY2xhc3NlcyBpbiB0aGlzCiAg IE9wdF90cmFjZV9zdG10KE9wdF90cmFjZV9jb250ZXh0ICpjdHhfYXJnLCBPcHRfdHJhY2Vfc3Rt dCAqcGFyZW50LAogICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRfSV9TX2FyZyk7CiAgIC8q KiBFbmRzIGEgdHJhY2U7IGRlc3RydWN0aW9uIG1heSBub3QgYmUgcG9zc2libGUgaW1tZWRpYXRl bHkgdGhvdWdoICovCi0gIHZvaWQgZW5kKHZvaWQpOworICB2b2lkIGVuZCgpOworCiAgIGJvb2wg c3RhcnRlZDsKICAgT3B0X3RyYWNlX2NvbnRleHQgKmN0eDsgICAgIC8vLzwgY29udGV4dAogICBP cHRfdHJhY2Vfc3RtdCAqcGFyZW50OyAgICAgLy8vPCBwYXJlbnQgdHJhY2UKQEAgLTU3NywzMCAr NjA4LDMwIEBAIHByaXZhdGU6IC8vIEV4Y2VwdCBvdGhlciBjbGFzc2VzIGluIHRoaXMKICAgYm9v bCBzdXBwb3J0X0lfUzsKIAogICAvKioKLSAgICAgRXh0ZW5zaW9uIG9mIGNsYXNzIFN0cmluZywg Zm9yIHN0b3JpbmcgcXVlcnkgb3IgdHJhY2UuCi0KLSAgICAgV2Ugd2FudCB0byBwcmV2ZW50IHVz ZXJzIGZyb20gY2FsbGluZyBTdHJpbmcgZnVuY3Rpb25zIHdoaWNoIGFsbG9jYXRlCi0gICAgIG1l bW9yeSwgYmVjYXVzZSB3ZSB3YW50IHRvIHJlY29yZCB0aGVpciBtYWxsb2MgZXJyb3Igc3RhdHVz LiBTbyB3ZSBtYWtlCi0gICAgIHRoZW0gYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggb3VyIHdyYXBw ZXJzLCB0aGFua3MgdG8gcHJpdmF0ZQotICAgICBpbmhlcml0YW5jZS4KKyAgICAgQSB3cmFwcGVy IG9mIGNsYXNzIFN0cmluZywgZm9yIHN0b3JpbmcgcXVlcnkgb3IgdHJhY2UuCiAgICovCi0gIGNs YXNzIEJ1ZmZlcjogcHJpdmF0ZSBTdHJpbmcKKyAgY2xhc3MgQnVmZmVyCiAgIHsKLXByaXZhdGU6 CisgIHByaXZhdGU6CiAgICAgc2l6ZV90IGFsbG93ZWRfbWVtX3NpemU7IC8vLzwgYWxsb3dlZCBt ZW1vcnkgc2l6ZSBmb3IgdGhpcyBTdHJpbmcKICAgICBzaXplX3QgbWlzc2luZ19ieXRlczsgICAg Ly8vPCBob3cgbWFueSBieXRlcyBjb3VsZCBub3QgYmUgYWRkZWQKICAgICBib29sICAgbWFsbG9j X2Vycm9yOyAgICAgLy8vPCB3aGV0aGVyIHRoZXJlIHdhcyBhIG1hbGxvYy9yZWFsbG9jKCkgZXJy b3IKLXB1YmxpYzoKKyAgICBTdHJpbmcgc3RyaW5nX2J1ZjsKKyAgcHVibGljOgogICAgIEJ1ZmZl cigpIDogYWxsb3dlZF9tZW1fc2l6ZSgwKSwgbWlzc2luZ19ieXRlcygwKSwgbWFsbG9jX2Vycm9y KGZhbHNlKSB7fQotICAgIHVpbnQzMiBhbGxvY2VkX2xlbmd0aCh2b2lkKSBjb25zdCB7IHJldHVy biBTdHJpbmc6OmFsbG9jZWRfbGVuZ3RoKCk7IH0KLSAgICB1aW50MzIgbGVuZ3RoKHZvaWQpIGNv bnN0IHsgcmV0dXJuIFN0cmluZzo6bGVuZ3RoKCk7IH0KKyAgICB1aW50MzIgYWxsb2NlZF9sZW5n dGgoKSBjb25zdCB7IHJldHVybiBzdHJpbmdfYnVmLmFsbG9jZWRfbGVuZ3RoKCk7IH0KKyAgICB1 aW50MzIgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nX2J1Zi5sZW5ndGgoKTsgfQogICAg IGJvb2wgcmVhbGxvYyh1aW50MzIgYXJnX2xlbmd0aCk7Ci0gICAgY2hhciAqY19wdHJfc2FmZSh2 b2lkKQorICAgIGNoYXIgKmNfcHRyX3NhZmUoKQogICAgIHsKICAgICAgIC8qIEFsYXMsIFN0cmlu Zzo6Y19wdHJfc2FmZSgpIGRvZXMgbm8gcmVhbGxvYyBlcnJvciBjaGVja2luZyAqLwotICAgICAg cmV0dXJuIFN0cmluZzo6Y19wdHJfc2FmZSgpOworICAgICAgcmV0dXJuIHN0cmluZ19idWYuY19w dHJfc2FmZSgpOwogICAgIH0KLSAgICBpbmxpbmUgY29uc3QgY2hhciAqcHRyKHZvaWQpIGNvbnN0 IHsgcmV0dXJuIFN0cmluZzo6cHRyKCk7IH0KKyAgICBjb25zdCBjaGFyICpwdHIoKSBjb25zdCB7 IHJldHVybiBzdHJpbmdfYnVmLnB0cigpOyB9CisKKyAgICBDSEFSU0VUX0lORk8gKmNoYXJzZXQo KSB7IHJldHVybiBzdHJpbmdfYnVmLmNoYXJzZXQoKTsgfQorICAgIHZvaWQgc2V0X2NoYXJzZXQo Q0hBUlNFVF9JTkZPICpjaGFyc2V0KSB7IHN0cmluZ19idWYuc2V0X2NoYXJzZXQoY2hhcnNldCk7 IH0KKwogICAgIC8qKgogICAgICAgIEBwYXJhbSAgc3RyICBTdHJpbmcsIGluIHRoaXMgaW5zdGFu Y2UncyBjaGFyc2V0CiAgICAgICAgQHBhcmFtICBsZW5ndGggIGxlbmd0aCBvZiBzdHJpbmcKQEAg LTYyMiw2ICs2NTMsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIE9wdF90cmFjZV9pdGVy YXRvcjsKICAgfTsKIAorICAvLyBTdWdnZXN0IHJlbmFtaW5nIHRvIHRyYWNlX2J1ZmZlcjogbXVj aCBlYXNpZXIgdG8gc2VhcmNoIGZvciBpdC4KICAgQnVmZmVyIGJ1ZmZlcjsgICAgICAgICAvLy88 IFdoZXJlIHRoZSB0cmFjZSBpcyBhY2N1bXVsYXRlZAogICBCdWZmZXIgcXVlcnlfYnVmZmVyOyAg IC8vLzwgV2hlcmUgdGhlIHF1ZXJ5IGlzIHB1dAogCkBAIC02MjksMTkgKzY2MSwyMSBAQCBwdWJs aWM6CiAgICAgIE5lc3RpbmcgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgc3RydWN0dXJlLgogICAgICBU aGUgbW9yZSBuZXN0ZWQgKCJkZWVwIiksIHRoZSBtb3JlIGluZGVudGF0aW9uIHNwYWNlcyB3ZSBh ZGQgb24gdGhlIGxlZnQuCiAgICovCisgIC8vIGhvdyBhYm91dCBjdXJyZW50X2RlcHRoOiBtdWNo IGVhc2llciB0byBzZWFyY2ggZm9yIGl0LgogICBpbnQgZGVwdGg7CiAgIC8qKiBtYXhpbXVtIG5l c3RpbmcgbGV2ZWwgc28gZmFyICovCiAgIGludCBtYXhfZGVwdGg7CiAgIC8qKiB3aGV0aGVyIGN1 cnJlbnQgc3RydWN0dXJlIGlzIGVtcHR5OyBvbmUgc3VjaCBpbmZvIHBlciBuZXN0aW5nIGxldmVs ICovCiAgIER5bmFtaWNfYXJyYXk8aW50PiBsZXZlbF9lbXB0eTsKKwogICAvKiogZW50ZXIgYSBk ZWVwZXIgbmVzdGluZyBsZXZlbCAqLwotICB2b2lkIHB1c2godm9pZCk7CisgIHZvaWQgcHVzaCgp OwogICAvKiogbGVhdmUgY3VycmVudCBuZXN0aW5nIGxldmVsIGFuZCBnbyBiYWNrIG9uZSBsZXZl bCB1cCAqLwotICB2b2lkIHBvcCh2b2lkKTsKKyAgdm9pZCBwb3AoKTsKICAgLyoqIHB1dCBjb21t YSwgbmV3bGluZSBhbmQgaW5kZW50YXRpb24gKi8KLSAgdm9pZCBzZXBhcmF0b3Iodm9pZCk7Cisg IHZvaWQgc2VwYXJhdG9yKCk7CiAgIC8qKiBwdXQgbmV3bGluZSBhbmQgaW5kZW50YXRpb24gKi8K LSAgdm9pZCBuZXh0X2xpbmUodm9pZCk7CisgIHZvaWQgbmV4dF9saW5lKCk7CiAKICAgLyoqIEBz YSBPcHRfdHJhY2VfY29udGV4dDo6c2V0X3F1ZXJ5KCkgKi8KICAgYm9vbCBzZXRfcXVlcnkoY29u c3QgY2hhciogcXVlcnksIHNpemVfdCBsZW5ndGgsIENIQVJTRVRfSU5GTyAqY2hhcnNldCk7CkBA IC02NDksMTEgKzY4MywxOCBAQCBwdWJsaWM6CiAgIE9wdF90cmFjZV9zdG10ICpwcmV2LCAqbmV4 dDsgLy8vPCBsaXN0IG1hbmFnZW1lbnQKIAogICAvKiogQnkgaG93IG11Y2ggd2Ugc2hvdWxkIGlu Y3JlYXNlIGJ1ZmZlcidzIHNpemUgd2hlbiBpdCdzIGJlY29taW5nIGZ1bGwgKi8KKyAgLy8gQXQg Zmlyc3Qgc2lnaHQgaXQgbG9va3Mgc3RyYW5nZSB0aGF0IEJ1ZmZlciBkb2Vzbid0IGhhbmRsZSB0 aGlzIGl0c2VsZi4KKyAgLy8gRG8gd2UgYWRkIHRvIHRoZSBsZW5ndGgsIG9yIGRvIHdlIG11bHRp cGx5ICh3aGljaCBpcyBtb3JlIGNvbW1vbiBJIHRoaW5rKQogICBzdGF0aWMgY29uc3Qgc2l6ZV90 IGJ1ZmZlcl9hbGxvY19pbmNyZW1lbnQ7CiAgIC8qKiBMZW5ndGggb2YgYW4gZW1wdHkgdHJhY2Ug Ki8KICAgc3RhdGljIGNvbnN0IHNpemVfdCBlbXB0eV90cmFjZV9sZW47CiAKIHB1YmxpYzoKKyAg Y29uc3QgT3B0X3RyYWNlX3N0bXQgKnByZXZfKCkgY29uc3QgeyByZXR1cm4gcHJldjsgfQorCisg IHNpemVfdCBhbGxvY2VkX2xlbmd0aCgpIGNvbnN0CisgIHsgcmV0dXJuIGJ1ZmZlci5hbGxvY2Vk X2xlbmd0aCgpICsgcXVlcnlfYnVmZmVyLmFsbG9jZWRfbGVuZ3RoKCk7IH0KKwogICAvKiogVHVy biB0aGlzIG9uIG9ubHkgaW4gdW5pdCB0ZXN0cyBmb3Igb3V0LW9mLW1lbW9yeSB0ZXN0aW5nICov CiAgIHN0YXRpYyBib29sIHNpbXVsYXRlX29vbTsKIApAQCAtNjYxLDcgKzcwMiw3IEBAIHB1Ymxp YzoKICAgZnJpZW5kIGNsYXNzIE9wdF90cmFjZV9zdHJ1Y3Q7CiAgIGZyaWVuZCBjbGFzcyBPcHRf dHJhY2VfZGlzYWJsZV9JX1M7CiAgIGZyaWVuZCBjbGFzcyBPcHRfdHJhY2VfaXRlcmF0b3I7Ci0g IGZyaWVuZCB2b2lkIG9wdF90cmFjZV9wcmludF9leHBhbmRlZF9xdWVyeShUSEQgKnRoZCk7Cisv LyAgZnJpZW5kIHZvaWQgb3B0X3RyYWNlX3ByaW50X2V4cGFuZGVkX3F1ZXJ5KFRIRCAqdGhkKTsK IH07CiAKIApAQCAtNjcxLDcgKzcxMiw3IEBAIHB1YmxpYzoKIHN0cnVjdCBPcHRfdHJhY2VfaW5m bwogewogICAvKioKLSAgICAgU3RyaW5nIGNvbnRhaW5pbmcgdHJhY2UuIEl0IGlzIE5VTC10ZXJt aW5hdGVkLCBvbmx5IHRvIGFpZCBkZWJ1Z2dpbmcgb3IKKyAgICAgU3RyaW5nIGNvbnRhaW5pbmcg dHJhY2UuIEl0IGlzIE5VTEwtdGVybWluYXRlZCwgb25seSB0byBhaWQgZGVidWdnaW5nIG9yCiAg ICAgIHVuaXQgdGVzdGluZzsgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcmVsaWVkIHVwb24gaW4gbm9y bWFsIHNlcnZlciB1c2FnZS4KICAgKi8KICAgY29uc3QgY2hhciAqdHJhY2VfcHRyOwpAQCAtNzA4 LDIwICs3NDksMjMgQEAgcHVibGljOgogICAgJyonIG9wZXJhdG9yLgogICAqLwogICBPcHRfdHJh Y2VfaXRlcmF0b3IoT3B0X3RyYWNlX2NvbnRleHQgKmN0eCkgOgotICAgIGN1cnNvcihjdHgtPm9s ZGVzdF9zdG10X3RvX3Nob3cpLCByb3dfY291bnQoMSksIGxpbWl0KGN0eC0+bGltaXQpIHt9Ci0g IHZvaWQgb3BlcmF0b3IrKyhpbnQpOyAvLy88IGFkdmFuY2VzIGl0ZXJhdG9yIHRvIG5leHQgdHJh Y2UKKyAgICBjdXJzb3IoY3R4LT5vbGRlc3Rfc3RtdF90b19zaG93KSwgcm93X2NvdW50KDEpLCBs aW1pdChjdHgtPmxpbWl0KQorICB7fQorCisgIC8vLzwgQWR2YW5jZXMgaXRlcmF0b3IgdG8gbmV4 dCB0cmFjZS4KKyAgLy8gQSBiaXQgc3RyYW5nZSB0byBpbXBsZW1lbnQgcG9zdGZpeCBpdGVyYXRv ciwgcmF0aGVyIHRoYW4gcHJlZml4LgorICB2b2lkIG9wZXJhdG9yKysoaW50KTsKKwogICAvKioK ICAgICAgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJhY2Ugb24gd2hpY2ggdGhlIGl0 ZXJhdG9yIGlzCiAgICAgIHBvc2l0aW9uZWQuCisgICAgIEBub3RlIFJldHVybnMgb2JqZWN0IGJ5 IHZhbHVlISEhCiAgICovCiAgIE9wdF90cmFjZV9pbmZvIG9wZXJhdG9yKigpOwotICAvKiogTmVl ZGVkIHRvIGNvbXBhcmUgdGhlIGl0ZXJhdG9yIHdpdGggdGhlIGxpc3QncyBlbmQgKi8KLSAgYm9v bCBvcGVyYXRvciE9KGNvbnN0IE9wdF90cmFjZV9pdGVyYXRvciAmb3RoZXIpIGNvbnN0Ci0gIHsg cmV0dXJuIGN1cnNvciAhPSBvdGhlci5jdXJzb3I7IH0KLSAgc3RhdGljIE9wdF90cmFjZV9pdGVy YXRvciBlbmQ7ICAgLy8vPCBMaXN0J3MgZW5kCisKKyAgYm9vbCBhdF9lbmQoKSBjb25zdCB7IHJl dHVybiBjdXJzb3IgPT0gTlVMTDsgfQorCiBwcml2YXRlOgotICAvKiogT25seSB0byBjb25zdHJ1 Y3QgdGhlICdlbmQnIGl0ZXJhdG9yICovCi0gIE9wdF90cmFjZV9pdGVyYXRvcih2b2lkKSA6IGN1 cnNvcihOVUxMKSB7fQogICBPcHRfdHJhY2Vfc3RtdCAqY3Vyc29yOyAvLy88IHRyYWNlIHdoaWNo IHRoZSBpdGVyYXRvciBpcyBwb3NpdGlvbmVkIG9uCiAgIGhhX3Jvd3Mgcm93X2NvdW50OyAgICAg IC8vLzwgaG93IG1hbnkgdHJhY2VzIHlpZWxkZWQgc28gZmFyCiAgIGhhX3Jvd3MgbGltaXQ7ICAg ICAgICAgIC8vLzwgeWllbGQgImVtcHR5IiBhZnRlciB5aWVsZGluZyB0aGF0IG1hbnkgdHJhY2Vz CkBAIC03MzQsMTMgKzc3OCwxMyBAQCBwcml2YXRlOgogICAgV2hlbiB5b3Ugd2FudCB0byBhZGQg YSBzdHJ1Y3R1cmUgdG8gdGhlIHRyYWNlLCB5b3UgY3JlYXRlIGFuIGluc3RhbmNlIG9mCiAgICBP cHRfdHJhY2Vfb2JqZWN0IG9yIE9wdF90cmFjZV9hcnJheSwgdGhlbiB5b3UgYWRkIGluZm9ybWF0 aW9uIHRvIGl0IHdpdGgKICAgIGFkZCgpLCB0aGVuIHRoZSBkZXN0cnVjdG9yIGNsb3NlcyB0aGUg T09BICh3ZSB1c2UgUkFJSSwgUmVzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXl5eID8/PwogICAgQWNxdWlzaXRpb24gSXMgSW5pdGlhbGl6YXRpb24pLgog Ki8KIGNsYXNzIE9wdF90cmFjZV9zdHJ1Y3QKIHsKIHByb3RlY3RlZDoKICAgLyoqCi0gICAgIENv bnN0cnVjdG9yLgogICAgICBAcGFyYW0gIGN0eF9hcmcgIE9wdGltaXplciB0cmFjZSBjb250ZXh0 IGZvciB0aGlzIHN0cnVjdHVyZQogICAgICBAcGFyYW0gIHJlcXVpcmVzX2tleV9hcmcgIHdoZXRo ZXIgdGhpcyBzdHJ1Y3R1cmUgcmVxdWlyZXMvZm9yYmlkcyBrZXlzCiAgICAgICAgICAgICAgICAg ICAgICAgZm9yIHZhbHVlcyBwdXQgaW5zaWRlIGl0IChhbiBvYmplY3QgcmVxdWlyZXMgdGhlbSwg YW4KQEAgLTc2MSw3ICs4MDUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLyogQSBmaXJzdCBpbmxpbmVk IHRlc3QgKi8KICAgICBpZiAodW5saWtlbHkoY3R4X2FyZyAhPSBOVUxMKSAmJiBjdHhfYXJnLT5p c19zdGFydGVkKCkpCiAgICAgewotICAgICAgLyogdHJhY2luZyBlbmFibGVkOiBtdXN0IGZ1bGx5 IGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSAqLworICAgICAgLy8gVHJhY2luZyBlbmFibGVkOiBt dXN0IGZ1bGx5IGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4KICAgICAgIGRvX2NvbnN0cnVjdChj dHhfYXJnLT5jdXJyZW50X3N0bXRfaW5fZ2VuLAogICAgICAgICAgICAgICAgICAgIGN0eF9hcmct PmN1cnJlbnRfc3RtdF9pbl9nZW4tPmN1cnJlbnRfc3RydWN0LAogICAgICAgICAgICAgICAgICAg IHJlcXVpcmVzX2tleV9hcmcsIGtleSwgZmVhdHVyZSk7CkBAIC03NzEsNyArODE1LDcgQEAgcHJv dGVjdGVkOgogICAgICAgZHVtbXkuCiAgICAgKi8KICAgfQotICB+T3B0X3RyYWNlX3N0cnVjdCh2 b2lkKSB7IGlmICh1bmxpa2VseShzdGFydGVkKSkgZG9fZGVzdHJ1Y3QoKTsgfQorICB+T3B0X3Ry YWNlX3N0cnVjdCgpIHsgaWYgKHVubGlrZWx5KHN0YXJ0ZWQpKSBkb19kZXN0cnVjdCgpOyB9CiAK IHB1YmxpYzoKIApAQCAtNzk5LDcgKzg0Myw3IEBAIHB1YmxpYzoKIAogICAgICBJbiB0aGUgbW9z dCBwZXJmb3JtYW5jZS1jcml0aWNhbCBjYXNlIChyZWxlYXNlIGJpbmFyeSB3aXRoCiAgICAgIHRy YWNpbmcgY29tcGlsZWQgaW4gYnV0IG5vdCBlbmFibGVkIGF0IHJ1bnRpbWUpLCB3ZSBkb24ndCB3 YW50IGZ1bmN0aW9uCi0gICAgIGNhbGxzLCB3aGljaCBpcyB3aHkgd2UgaGF2ZSBhbiBpbmxpbmUg aWYoKSBpbiBlYWNoIGFkZCgpIG1ldGhvZCBiZWxvdy4KKyAgICAgY2FsbHMsIHdoaWNoIGlzIHdo eSB3ZSBoYXZlIGFuIGlubGluZSBpZigpIGluIGVhY2ggYWRkKCkgZnVuY3Rpb24gYmVsb3cuCiAg ICAgIEluIGFuIG9wdGltaXplci1pbnRlbnNpdmUgdGVzdCAoYXMgaW4gQlVHIzUwNTk1IHdpdGgg YSAyMC10YWJsZSBwbGFuCiAgICAgIHNlYXJjaCwgc2VlIG15c3FsLXRlc3QvdC9idWc1MDU5NS50 ZXN0KSwgdGhpcyBpbmxpbmluZyB0b29rCiAgICAgIEBjIGdyZWVkeV9zZWFyY2goKSdzIGNsb2Nr IHRpbWUgZnJvbSAyLjYgc2VjcyBkb3duIHRvIDIuMCBzZWNzLgpAQCAtODA3LDEzICs4NTEsMTgg QEAgcHVibGljOgogICAgICBAdmVyYmF0aW0gPHNvbWUgT3B0X3RyYWNlX3N0cnVjdD4uYWRkKCku YWRkKCkuYWRkKCkgQGVuZHZlcmJhdGltCiAgICAgIHdoaWNoIGhhdmUgMyBpZigpcyAob25lIHBl ciBAYyBhZGQoKSksIGl0IGhhcyBiZWVuIG1lYXN1cmVkIHRoYXQgd3JhcHBpbmcKICAgICAgdGhh dCBpbnNpZGUgYSBzaW5nbGUgaWYoKSwgbGlrZQotICAgICBAdmVyYmF0aW0gaWYoc3RhcnRlZCkg eyA8c29tZSBPcHRfdHJhY2Vfc3RydWN0Pi5hZGQoKS5hZGQoKS5hZGQoKSB9IEBlbmR2ZXJiYXRp bQorICAgICBAdmVyYmF0aW0gaWYoc3RhcnRlZCkgeyA8c29tZSBPcHRfdHJhY2Vfc3RydWN0Pi5h ZGQoKS5hZGQoKS5hZGQoKSB9CisgICAgIEBlbmR2ZXJiYXRpbQogICAgICBkZWdyYWRlZCBwZXJm b3JtYW5jZSAoZnJvbSAyLjAgdG8gMi4xIHNlY3MpLiBBZGRpbmcgaWYoKSBpbiBvbmUgc2luZ2xl Ci0gICAgIGNvZGUgbGluZSBjYXVzZWQgZGUtaW5saW5pbmcgb2YgYWRkKCkgbWV0aG9kcyBpbiBz ZXZlcmFsIHVucmVsYXRlZCBwbGFjZXMKKyAgICAgY29kZSBsaW5lIGNhdXNlZCBkZS1pbmxpbmlu ZyBvZiBhZGQoKSBmdW5jdGlvbnMgaW4gc2V2ZXJhbCB1bnJlbGF0ZWQgcGxhY2VzCiAgICAgIGFu ZCB0aGUgcGVyZm9ybWFuY2UgZGVncmFkZWQuIFNvIHdlIGRvbid0IGRvIGl0LiBUaGUgcGVyZm9y bWFuY2UgaW1wYWN0IG9mCiAgICAgIG11bHRpcGxlIGNoYWluZWQgYWRkKCkgc2VlbXMgY29tcGFy YWJsZSB0byBhIHNpbmdsZSBhZGQoKSBhbnl3YXkuCiAgICAgIFJlbW92aW5nIEBjIGxpa2VseSgp IGFsc28gaW5jcmVhc2VzIGZyb20gMi4wIHRvIDIuMSwgc28gd2UgbGVhdmUKICAgICAgdGhlbS4K KworICAgICAvLyBJIGRvbid0IG5lZWQgdG8ga25vdyBhbGwgdGhlc2UgZGV0YWlscyBhYm91dCBt aWxsaXNlY29uZHMgaGVyZSAuLi4uCisgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGEgZG9jdW1lbnRh dGlvbiBhYm91dCB0aGUgaW50ZXJmYWNlLgorCiAgICAgIFRoZSBzYW1lIHRlc3QgYWdhaW5zdCBh IHZhbmlsbGEgdHJlZSB3aXRob3V0IHRoaXMgV0wsIHRvb2sgMS45IHNlY3M7IHNvCiAgICAgIGRv ZXMgdGhlIFdMIHRyZWUgd2l0aCBvcHRpbWl6ZXIgdHJhY2UgY29tcGlsZWQgb3V0LgogICAgICBT byB0aGUgaW1wb3J0YW50IGZpZ3VyZSBpcyB0aGF0IHRoaXMgV0wgdGFrZXMgdGhlIGNvbW1vbiBj YXNlIGZyb20gMS45IHRvCkBAIC04MzgsNiArODg3LDcgQEAgcHVibGljOgogICAgICAgcmV0dXJu ICp0aGlzOwogICAgIHJldHVybiBkb19hZGQoa2V5LCB2YWx1ZSwgc3RybGVuKHZhbHVlKSwgZmFs c2UpOwogICB9CisKICAgLyoqCiAgICAgIEFkZHMgYSB2YWx1ZSAob2Ygc3RyaW5nIHR5cGUpIHRv IHRoZSBzdHJ1Y3R1cmUuIE5vIGtleSBpcyBzcGVjaWZpZWQsIHNvCiAgICAgIGl0IGFkZHMgb25s eSB0aGUgdmFsdWUgKHRoZSBzdHJ1Y3R1cmUgbXVzdCB0aHVzIGJlIGFuIGFycmF5KS4KQEAgLTg1 MCw2ICs5MDAsNyBAQCBwdWJsaWM6CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgcmV0dXJuIGRv X2FkZChOVUxMLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSwgZmFsc2UpOwogICB9CisKICAgLyoqCiAg ICAgIExpa2UgYWRkX2FsbnVtKCkgYnV0IHN1cHBvcnRzIGFueSBVVEY4IGNoYXJhY3RlcnMgaW4g J3ZhbHVlJy4KICAgICAgV2lsbCAiZXNjYXBlIiAndmFsdWUnIHRvIGJlIEpTT04tY29tcGxpYW50 LgpAQCAtODY0LDYgKzkxNSw3IEBAIHB1YmxpYzoKICAgICAgIHJldHVybiAqdGhpczsKICAgICBy ZXR1cm4gZG9fYWRkKGtleSwgdmFsdWUsIHZhbF9sZW5ndGgsIHRydWUpOwogICB9CisKICAgLyoq IFZhcmlhbnQgb2YgYWRkX3V0ZjgoKSBmb3IgYWRkaW5nIHRvIGFuIGFycmF5IChubyBrZXkpICov CiAgIE9wdF90cmFjZV9zdHJ1Y3QmIGFkZF91dGY4KGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3Qg dmFsX2xlbmd0aCkKICAgewpAQCAtODcxLDYgKzkyMyw3IEBAIHB1YmxpYzoKICAgICAgIHJldHVy biAqdGhpczsKICAgICByZXR1cm4gZG9fYWRkKE5VTEwsIHZhbHVlLCB2YWxfbGVuZ3RoLCB0cnVl KTsKICAgfQorCiAgIC8qKiBWYXJpYW50IG9mIGFkZF91dGY4KCkgd2hlcmUgJ3ZhbHVlJyBpcyAw LXRlcm1pbmF0ZWQgKi8KICAgT3B0X3RyYWNlX3N0cnVjdCYgYWRkX3V0ZjgoY29uc3QgY2hhciAq a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkKQEAg LTg3OSw2ICs5MzIsNyBAQCBwdWJsaWM6CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgcmV0dXJu IGRvX2FkZChrZXksIHZhbHVlLCBzdHJsZW4odmFsdWUpLCB0cnVlKTsKICAgfQorCiAgIC8qKiBW YXJpYW50IG9mIGFkZF91dGY4KCkgd2hlcmUgJ3ZhbHVlJyBpcyAwLXRlcm1pbmF0ZWQgKi8KICAg T3B0X3RyYWNlX3N0cnVjdCYgYWRkX3V0ZjgoY29uc3QgY2hhciAqdmFsdWUpCiAgIHsKQEAgLTg4 Niw2ICs5NDAsNyBAQCBwdWJsaWM6CiAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgcmV0dXJuIGRv X2FkZChOVUxMLCB2YWx1ZSwgc3RybGVuKHZhbHVlKSwgdHJ1ZSk7CiAgIH0KKwogICAvKioKICAg ICAgQWRkIGEgdmFsdWUgKG9mIEl0ZW0gdHlwZSkgdG8gdGhlIHN0cnVjdHVyZS4gVGhlIEl0ZW0g c2hvdWxkIGJlIGEKICAgICAgY29uZGl0aW9uIChsaWtlIGEgV0hFUkUgY2xhdXNlKSB3aGljaCB3 aWxsIGJlIHByZXR0eS1wcmludGVkIGludG8gdGhlCkBAIC05OTAsNyArMTA0NSw3IEBAIHB1Ymxp YzoKICAgICBzdHJ1Y3R1cmUgYmVmb3JlIGl0IGdvZXMgb3V0IG9mIHNjb3BlLiBEb24ndCB1c2Ug aXQgdW5sZXNzIFJBSUkgbWFuZGF0ZXMKICAgICBhIG5ldyBzY29wZSB3aGljaCBtYW5kYXRlcyBy ZS1pbmRlbnRpbmcgbG90cyBvZiBjb2RlIGxpbmVzLgogICAqLwotICB2b2lkIGVuZCh2b2lkKSB7 IGlmICh1bmxpa2VseShzdGFydGVkKSkgZG9fZGVzdHJ1Y3QoKTsgfQorICB2b2lkIGVuZCgpIHsg aWYgKHVubGlrZWx5KHN0YXJ0ZWQpKSBkb19kZXN0cnVjdCgpOyB9CiAKIHByaXZhdGU6CiAgIC8q KiBGdWxsIGluaXRpYWxpemF0aW9uLiBAc2EgT3B0X3RyYWNlX3N0cnVjdDo6T3B0X3RyYWNlX3N0 cnVjdCAqLwpAQCAtMTAwMCw3ICsxMDU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgICAgICBPcHRfdHJhY2VfY29udGV4 dDo6ZmVhdHVyZV92YWx1ZSBmZWF0dXJlKTsKICAgLyoqIFJlYWxseSBkb2VzIGRlc3RydWN0aW9u ICovCi0gIHZvaWQgZG9fZGVzdHJ1Y3Qodm9pZCk7CisgIHZvaWQgZG9fZGVzdHJ1Y3QoKTsKICAg LyoqCiAgICAgIFJlYWxseSBhZGRzIHRvIHRoZSBvYmplY3QuIEBzYSBhZGQoKS4KICAgICAgQHBh cmFtICBlc2NhcGUgIGRvIEpTT04tY29tcGxpYW50IGVzY2FwaW5nIG9mICd2YWx1ZScuCkBAIC0x MDIyLDYgKzEwNzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICBOVUxMIG90aGVyd2lz ZS4KICAgKi8KICAgdm9pZCBhZGRfc3RydWN0KGNvbnN0IGNoYXIgKmtleSk7CisKICAgLyoqCiAg ICAgIEVtaXRzIGEgSlNPTiBzeW50YXggZXJyb3IuCiAgICAgIEBwYXJhbSBrZXkgIGtleSBpbnZv bHZlZCBpbiB0aGUgZXJyb3IsIE5VTEwgaWYgdGhlcmUgaXMgbm8ga2V5LgpAQCAtMTAyOSw2ICsx MDg1LDcgQEAgcHJpdmF0ZToKICAgICAgV2hlbiBhZGRpbmcgYSB2YWx1ZSAob3IgYXJyYXkgb3Ig b2JqZWN0KSB0byBhbiBhcnJheSwgb3IgYSBrZXkvdmFsdWUgcGFpcgogICAgICB0byBhbiBvYmpl Y3QsIHdlIG5lZWQgdGhpcyBvdXRlciBhcnJheSBvciBvYmplY3QuCiAKK1NlbnRlbmNlIGJlbG93 IGlzIHZlcnkgaGFyZCB0byByZWFkLCB0b28gbWFueSAoKSgpKCkKICAgICAgSXQgd291bGQgYmUg cG9zc2libGUsIHdoZW4gdHJ5aW5nIHRvIGFkZCBhIGtleSB0byBhbiBhcnJheSAod2hpY2ggaXMg d3JvbmcKICAgICAgaW4gSlNPTikgKG9yIHNpbWlsYXJseSB3aGVuIHRyeWluZyB0byBhZGQgYSB2 YWx1ZSB3aXRob3V0IGFueSBrZXkgdG8gYW4KICAgICAgb2JqZWN0KSwgdG8gY2F0Y2ggaXQgYXQg Y29tcGlsYXRpb24gdGltZSwgaWYgdGhlIG91dGVyIG9iamVjdCB3YXMgcGFzc2VkIGFuCkBAIC0x MDQxLDEzICsxMDk4LDEzIEBAIHByaXZhdGU6CiAgICAgIE9wdF90cmFjZV9zdHJ1Y3QpLCBhbmQg dGhlIGFkZGVyIGdyYWJzIGl0IGZyb20gdGhlIGNvbnRleHQuCiAKICAgICAgQXMgdGhpcyBjdXJy ZW50IHN0cnVjdHVyZSBpcyBvZiB0eXBlICJvYmplY3Qgb3IgYXJyYXkiLCB3ZSBjYW5ub3QgZG8K LSAgICAgY29tcGlsZS10aW1lIGNoZWNrcyB0aGF0IG9ubHkgc3VpdGFibGUgbWV0aG9kcyBhcmUg dXNlZC4gQSBjYWxsIHRvIEBjCisgICAgIGNvbXBpbGUtdGltZSBjaGVja3MgdGhhdCBvbmx5IHN1 aXRhYmxlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gQSBjYWxsIHRvIEBjCiAgICAgIGFkZChrZXksdmFs dWUpIGlzIG5lY2Vzc2FyaWx5IGxlZ2FsIGZvciB0aGUgY29tcGlsZXIgYXMgdGhlIHN0cnVjdHVy ZSBtYXkKICAgICAgYmUgYW4gb2JqZWN0LCB0aG91Z2ggaXQgd2lsbCBiZSB3cm9uZyBpbiBjYXNl IHRoZSBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkKICAgICAgYW4gYXJyYXkgYXQgcnVuLXRpbWUuIFRo dXMgd2UgaGF2ZSB0aGUgcmlzayBvZiBhbiB1bnRlc3RlZCBwYXJ0aWN1bGFyCiAgICAgIHNpdHVh dGlvbiB3aGVyZSB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgaXMgbm90IGFuIG9iamVjdCAoYnV0IGFu IGFycmF5KQogICAgICB0aG91Z2ggdGhlIGNvZGUgZXhwZWN0ZWQgaXQgdG8gYmUgb25lLiBXZSBj YXRjaCB0aGF0IGF0IHJ1bi10aW1lOgotICAgICBPcHRfdHJhY2Vfc3RydWN0IG1ldGhvZHMgZGV0 ZWN0IHdyb25nIHVzYWdlLCBsaWtlIGFkZGluZyBhIHZhbHVlIHRvIGFuCisgICAgIE9wdF90cmFj ZV9zdHJ1Y3QgZnVuY3Rpb25zIGRldGVjdCB3cm9uZyB1c2FnZSwgbGlrZSBhZGRpbmcgYSB2YWx1 ZSB0byBhbgogICAgICBvYmplY3Qgd2l0aG91dCBzcGVjaWZ5aW5nIGEga2V5LCBhbmQgdGhlbiB0 aGV5OgogICAgICBAbGkgaW4gZGVidWcgYnVpbGQsIGFzc2VydAogICAgICBAbGkgaW4gcmVsZWFz ZSBidWlsZHMsIGVtaXQgYSB3YXJuaW5nIHN0cmluZyBpbiB0aGUgdHJhY2UgYW5kIHNob3VsZCBu b3QKQEAgLTEwNjMsMjIgKzExMjAsMzQgQEAgcHJpdmF0ZToKICAgT3B0X3RyYWNlX3N0cnVjdCYg b3BlcmF0b3I9KGNvbnN0IE9wdF90cmFjZV9zdHJ1Y3QmKTsKIAogICBib29sIHN0YXJ0ZWQ7IC8v LzwgV2hldGhlciB0aGUgc3RydWN0dXJlIGRvZXMgdHJhY2luZworCiAgIC8qKgogICAgICBXaGV0 aGVyIHRoZSBzdHJ1Y3R1cmUgcmVxdWlyZXMvZm9yYmlkcyBrZXlzIGZvciB2YWx1ZXMgaW5zaWRl IGl0LgogICAgICAxOiB0aGlzIGlzIGFuIG9iamVjdC4gMDogdGhpcyBpcyBhbiBhcnJheS4gT3Ro ZXI6IGluY29ycmVjdC4KIAorICAgICBpdCBpcyB1bmNsZWFyIGF0IHRoaXMgcG9pbnQgd2h5IGl0 IGlzIGludDggcmF0aGVyIHRoYW4gYm9vbAorCiAgICAgIEBub3RlIFRoZSBjYW5vbmljYWwgd2F5 IHdvdWxkIGJlIHRvIG5vdCBoYXZlIHN1Y2ggaW50OCBwZXIgaW5zdGFuY2UsIGJ1dAogICAgICBy YXRoZXIgaGF2ZSBhIHB1cmUgdmlydHVhbCBtZXRob2QgT3B0X3RyYWNlX3N0cnVjdDo6cmVxdWly ZXNfa2V5KCksCitDKysgaGFzIG1lbWJlciBmdW5jdGlvbnMsIG5vdCBtZXRob2RzLgogICAgICBv dmVybG9hZGVkIGJ5IE9wdF90cmFjZV9vYmplY3QgKHJldHVybmluZyAxKSBhbmQgYnkgT3B0X3Ry YWNlX2FycmF5CiAgICAgIChyZXR1cm5pbmcgMCkuIEJ1dCB0aGlzIHdvdWxkIGhhdmUgZHJhd2Jh Y2tzOgogICAgICBAbGkgaXQgd291bGQgYWRkIGEgdnRibCBwb2ludGVyIHRvIGVhY2ggaW5zdGFu Y2Ugd2hpY2ggdGFrZXMgZXZlbiBtb3JlCiAgICAgIHNwYWNlIHRoYW4gaW50OAorLS0gdGhpcyBk ZXBlbmRzIG9uIGFsaWdubWVudCAoeW91IGhhcHBlbiB0byBoYXZlIGEgYm9vbCBhcyBhIG5laWdo Ym91ci4uKQogICAgICBAbGkgaXQgd291bGQgYWRkIHJlcXVpcmVzX2tleSgpIGZ1bmN0aW9uIGNh bGxzIHdoaWNoIGNvc3QgbW9yZSB0aGFuCiAgICAgIHJlYWRpbmcgb25lIGludDgKKy0tIHlvdSBk b24ndCBrbm93IHRoYXQsIHVudGlsIG1lYXN1cmVkIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuCist LSByZWFkaW5nIGFuIGludDggbWF5IHJlcXVpcmUgbWFza2luZyBvcGVyYXRpb25zLCB1bmxlc3MK Ky0tIHlvdXIgcGxhdGZvcm0gaXMgYnl0ZSBhZGRyZXNzYWJsZQogICAgICBAbGkgT3B0X3RyYWNl X29iamVjdDo6cmVxdWlyZXNfa2V5KCkgd291bGQgbm90IGJlIGFjY2Vzc2libGUgZnJvbQogICAg ICBPcHRfdHJhY2Vfc3RydWN0Ojpjb25zdHJ1Y3QoKSAod2hpY2ggd291bGQgY29tcGxpY2F0ZSBj b2RpbmcpLCB3aGVyZWFzIHRoZQogICAgICBpbnQ4IGlzLgorLS0gdmlydHVhbCBmdW5jdGlvbiBu b3QgYWNjZXNzaWJsZSB0byBDVE9SL0RUT1I6IHRydWUKKy0tIE9LLCBzbyBJIGJ1eSB0aGlzIGFy Z3VtZW50LCBidXQgbm90IHRoZSBvdGhlcnMgOi0pCiAgICovCisgIC8vIEhhbmQtY29kZWQgdHlw ZWNoZWNraW5nIGlzIGdlbmVyYWxseSBhIGJhZCBpZGVhLAorICAvLyBidXQgc2luY2UgeW91IG5l ZWQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBiYXNlIENUT1IvRFRPUjogT0suCiAgIGludDggcmVx dWlyZXNfa2V5OwogICBPcHRfdHJhY2Vfc3RtdCAqc3RtdDsgIC8vLzwgVHJhY2Ugb3duaW5nIHRo ZSBzdHJ1Y3R1cmUKICAgLyoqIFBhcmVudCBzdHJ1Y3R1cmUgKCJvdXRlciBzdHJ1Y3R1cmUiIG9m IHRoZSBzdHJ1Y3R1cmUpICovCkBAIC0xMTI5LDggKzExOTgsOSBAQCBwdWJsaWM6CiAgICovCiAg IE9wdF90cmFjZV9vYmplY3QoT3B0X3RyYWNlX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqa2V5 LAogICAgICAgICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpmZWF0dXJlX3ZhbHVlIGZl YXR1cmU9Ci0gICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpIDoKLSAg T3B0X3RyYWNlX3N0cnVjdChjdHgsIHRydWUsIGtleSwgZmVhdHVyZSkge30KKyAgICAgICAgICAg ICAgICAgICBPcHRfdHJhY2VfY29udGV4dDo6TUlTQykKKyAgICA6IE9wdF90cmFjZV9zdHJ1Y3Qo Y3R4LCB0cnVlLCBrZXksIGZlYXR1cmUpCisgIHt9CiAgIC8qKgogICAgICBDb25zdHJ1Y3RzIGFu IG9iamVjdC4gTm8ga2V5IGlzIHNwZWNpZmllZCwgc28gdGhlIG9iamVjdCBpcyBqdXN0IGEgdmFs dWUKICAgICAgKHNlcnZlcyBmb3IgdGhlIHNpbmdsZSByb290IG9iamVjdCwgb3IgZm9yIGFkZGlu ZyB0aGUgb2JqZWN0IHRvIGFuIGFycmF5KS4KQEAgLTExMzgsOCArMTIwOCw5IEBAIHB1YmxpYzoK ICAgKi8KICAgT3B0X3RyYWNlX29iamVjdChPcHRfdHJhY2VfY29udGV4dCAqY3R4LAogICAgICAg ICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpmZWF0dXJlX3ZhbHVlIGZlYXR1cmU9Ci0g ICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpIDoKLSAgT3B0X3RyYWNl X3N0cnVjdChjdHgsIHRydWUsIE5VTEwsIGZlYXR1cmUpIHt9CisgICAgICAgICAgICAgICAgICAg T3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpCisgICAgOiBPcHRfdHJhY2Vfc3RydWN0KGN0eCwgdHJ1 ZSwgTlVMTCwgZmVhdHVyZSkKKyAge30KIAogfTsKIApAQCAtMTE1OSw4ICsxMjMwLDkgQEAgcHVi bGljOgogICAqLwogICBPcHRfdHJhY2VfYXJyYXkoT3B0X3RyYWNlX2NvbnRleHQgKmN0eCwgY29u c3QgY2hhciAqa2V5LAogICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6OmZlYXR1 cmVfdmFsdWUgZmVhdHVyZT0KLSAgICAgICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpN SVNDKSA6Ci0gIE9wdF90cmFjZV9zdHJ1Y3QoY3R4LCBmYWxzZSwga2V5LCBmZWF0dXJlKSB7fQor ICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpCisgICAgOiBPcHRfdHJh Y2Vfc3RydWN0KGN0eCwgZmFsc2UsIGtleSwgZmVhdHVyZSkKKyAge30KICAgLyoqCiAgICAgIENv bnN0cnVjdHMgYW4gYXJyYXkuIE5vIGtleSBpcyBzcGVjaWZpZWQsIHNvIHRoZSBhcnJheSBpcyBq dXN0IGEgdmFsdWUKICAgICAgKHNlcnZlcyBmb3IgYWRkaW5nIHRoZSBvYmplY3QgdG8gYW4gYXJy YXkpLgpAQCAtMTE2OCwxNiArMTI0MCwxNyBAQCBwdWJsaWM6CiAgICovCiAgIE9wdF90cmFjZV9h cnJheShPcHRfdHJhY2VfY29udGV4dCAqY3R4LAogICAgICAgICAgICAgICAgICAgT3B0X3RyYWNl X2NvbnRleHQ6OmZlYXR1cmVfdmFsdWUgZmVhdHVyZT0KLSAgICAgICAgICAgICAgICAgIE9wdF90 cmFjZV9jb250ZXh0OjpNSVNDKSA6Ci0gIE9wdF90cmFjZV9zdHJ1Y3QoY3R4LCBmYWxzZSwgTlVM TCwgZmVhdHVyZSkge30KKyAgICAgICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpNSVND KQorICAgIDogT3B0X3RyYWNlX3N0cnVjdChjdHgsIGZhbHNlLCBOVUxMLCBmZWF0dXJlKQorICB7 fQogfTsKIAogCiAvKioKICAgIEluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mg Zm9yIHNwZWNpZmljLCBwdW5jdHVhbCBjYXNlcyB3aGVyZQogICAgb3B0aW1pemVyIHRyYWNlIHNo b3VsZCB3cml0ZSBvbmx5IHRvIERCVUcgYW5kIG5vdCBJX1MuIEV4YW1wbGU6Ci0gICBAYyBRVUlD S19SQU5HRV9TRUxFQ1Q6OmRidWdfZHVtcCgpIHdyaXRlcyB0byB0aGUgSV9TIHRyYWNlIGFuZCBE QlVHIGEKLSAgICJyYW5nZV9zZWxlY3QiIG9iamVjdC4gVGhpcyBpcyBnb29kIHdoZW4gY2FsbGVk IGZyb20KKyAgIEBjIFFVSUNLX1JBTkdFX1NFTEVDVDo6ZGJ1Z19kdW1wKCkgd3JpdGVzIGEgInJh bmdlX3NlbGVjdCIgb2JqZWN0IAorICAgdG8gdGhlIElfUyB0cmFjZSBhbmQgREJVRy4gVGhpcyBp cyBnb29kIHdoZW4gY2FsbGVkIGZyb20KICAgIEBjIFNRTF9TRUxFQ1Q6OnRlc3RfcXVpY2tfc2Vs ZWN0KCkuIEJ1dCBpdCBpcyBhbHNvIGNhbGxlZCBieSBAYyBURVNUX2pvaW4oKQogICAgKGZyb20g QGMgSk9JTjo6b3B0aW1pemUoKSksIGFuZCB0aGVyZSB0aGUgcHJvZHVjZWQgSV9TIHRyYWNlIGlz CiAgICB1bmRlc2lyYWJsZSwgc28gaXQgaXMgc2lsZW5jZWQgd2l0aCBzdWNoIG9iamVjdCBiZWxv dyAodHJhY2Ugb25seSBnb2VzIHRvCkBAIC0xMTkxLDEyICsxMjY0LDEyIEBAIGNsYXNzIE9wdF90 cmFjZV9kaXNhYmxlX0lfUwogcHVibGljOgogICAvKioKICAgICAgQ29uc3RydWN0b3IKLSAgICAg QHBhcmFtICBjdHhfYXJnICBjb250ZXh0Ci0gICAgIEBwYXJhbSAgZGlzYWJsZV9hcmcgIHdoZXRo ZXIgdGhlIGluc3RhbmNlIHNob3VsZCByZWFsbHkgZGlzYWJsZQorICAgICBAcGFyYW0gIGN0eF9h cmcgICAgICBDb250ZXh0LgorICAgICBAcGFyYW0gIGRpc2FibGVfYXJnICBXaGV0aGVyIHRoZSBp bnN0YW5jZSBzaG91bGQgcmVhbGx5IGRpc2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg YW55dGhpbmcuIElmIGZhbHNlLCB0aGUgb2JqZWN0IGlzIGR1bW15LiBJZiB0cnVlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICB0cmFjaW5nLXRvLUlfUyBpcyBkaXNhYmxlZCBhdCBjb25zdHJ1 Y3Rpb24gYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLWVuYWJsZWQgYXQgZGVzdHJ1 Y3Rpb24uCi0gICAgIEBkZXRhaWxzIGEgZHVtbXkgaW5zdGFuY2UgaXMgdGhlcmUgb25seSBmb3Ig UkFJSSByZWFzb25zLiBJbWFnaW5lIHdlIHdhbnQKKyAgICAgQGRldGFpbHMgQSBkdW1teSBpbnN0 YW5jZSBpcyB0aGVyZSBvbmx5IGZvciBSQUlJIHJlYXNvbnMuIEltYWdpbmUgd2Ugd2FudAogICAg ICB0byBkbyB0aGlzOgogQHZlcmJhdGltCiAgICAgIHsKQEAgLTEyMjQsNiArMTI5Nyw3IEBAIHB1 YmxpYzoKICAgT3B0X3RyYWNlX2Rpc2FibGVfSV9TKE9wdF90cmFjZV9jb250ZXh0ICpjdHhfYXJn LCBib29sIGRpc2FibGVfYXJnKTsKICAgLyoqIERlc3RydWN0b3IuIFJlLWVuYWJsZXMgdHJhY2lu Zy4gKi8KICAgfk9wdF90cmFjZV9kaXNhYmxlX0lfUygpOworCiBwcml2YXRlOgogICBPcHRfdHJh Y2VfY29udGV4dCAqY3R4OyAvLy88IGNvbnRleHQgdG8gZGlzYWJsZS9yZS1lbmFibGUKICAgT3B0 X3RyYWNlX3N0bXQgKnN0bXQ7ICAgLy8vPCB0cmFjZSB0byBkaXNhYmxlL3JlLWVuYWJsZQpAQCAt MTIzNiwxMyArMTMxMCwxOCBAQCBwcml2YXRlOgogfTsKIAogCisvLyBJIGJlbGlldmUgdGhlIG1h Y3JvcyBiZWxvdyBhcmUgZ29uZSBpbiBuZXdlciB2ZXJzaW9ucyBvZiB0aGUgY29kZS4KKy8vIEFu eXdheXM6IHRoZSBuYW1lcyBhcmVuJ3QgdmVyeSBnb29kLCBhbmQgdGhlIGZvcm1hdHRpbmcgd2Fz IGJhZCAuLi4KKwogLyoqCiAgICBHcmFicyB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgZnJvbSB0aGUg Y29udGV4dCBhbmQgY2FsbCBpdHMgbWV0aG9kcy4KICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZXJl IGlzIGEgZGlyZWN0IHJlZmVyZW5jZSB0byB0aGlzIHN0cnVjdHVyZSBhdmFpbGFibGUKICAgIChi ZWNhdXNlIGl0IGhhcyBiZWVuIGluc3RhbnRpYW50ZWQgYSBmZXcgbGluZXMgZWFybGllciksIHRo ZW4gcHJlZmVyIHVzaW5nCiAgICBpdCB0aGFuIHRoaXMgbWFjcm8uCiAqLwotI2RlZmluZSBPUFRf VFJBQ0UodHJhY2UsIGFjdGlvbikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisjZGVmaW5lIE9QVF9UUkFDRSh0cmFjZSwgYWN0aW9uKSBcCisgIGRvIFwKKyAgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAogICAgIGlmICh1bmxpa2VseSgodHJhY2UpICE9IE5VTEwpKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBpZiAodW5saWtlbHkoKHRyYWNlKS0+aXNf c3RhcnRlZCgpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKHRyYWNl KS0+Z2V0X2N1cnJlbnRfc3RydWN0KCktPmFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAg XApAQCAtMTI1Miw3ICsxMzMxLDkgQEAgcHJpdmF0ZToKIC8qKgogICAgRXhlY3V0ZXMgYW4gYWN0 aW9uIG9ubHkgaWYgdHJhY2luZyBpcyBzdGFydGVkLgogKi8KLSNkZWZpbmUgT1BUX1RSQUNFMih0 cmFjZSwgYWN0aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNk ZWZpbmUgT1BUX1RSQUNFMih0cmFjZSwgYWN0aW9uKSBcCisgIGRvIFwKKyAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKICAgICBpZiAodW5saWtlbHkoKHRyYWNlKSAhPSBOVUxMKSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmICh1bmxpa2VseSgodHJhY2UpLT5pc19zdGFy dGVkKCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgYWN0aW9uOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK QEAgLTEyNjYsNyArMTM0Nyw2IEBAIHByaXZhdGU6CiAKIC8vQHsKIAotc3RydWN0IFRBQkxFX0xJ U1Q7CiAvKioKICAgU3RhcnQgdHJhY2luZyBhIFRIRCdzIGFjdGlvbnMgKGdlbmVyYWxseSBhdCBh IHN0YXRlbWVudCdzIHN0YXJ0KS4KICAgQHBhcmFtICB0aGQgIHRoZSBUSEQKQEAgLTEyNzgsNiAr MTM1OCw3IEBAIHN0cnVjdCBUQUJMRV9MSVNUOwogICBzdWItc3RhdGVtZW50IGluIHRoZSBjYWxs IGNoYWluKSwgYW5kIHRoaXMgZnVuY3Rpb24gZGVjaWRlcyB0byB0cmFjZQogICAocmVzcGVjdGl2 ZWx5IG5vdCB0cmFjZSkgdGhlIHN1Yi1zdGF0ZW1lbnQsIGl0IHJldHVybnMgInRydWUiCiAgIChy ZXNwLiBmYWxzZSkuIEVhY2ggc3ViLXN0YXRlbWVudCBpcyByZXNwb25zaWJsZSBmb3IgZW5kaW5n IHRoZSB0cmFjZSB3aGljaCBpdAorKCkoKSgpKCkoKQogICBoYXMgc3RhcnRlZC4KICovCiBib29s IG9wdF90cmFjZV9zdGFydChUSEQgKnRoZCwgY29uc3QgVEFCTEVfTElTVCAqdGJsLApAQCAtMTMy OCw3ICsxNDA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG9wdF90cmFjZV9zZXRfcXVlcnkoTwog Ki8KIGludCBmaWxsX29wdGltaXplcl90cmFjZV9pbmZvKFRIRCAqdGhkLCBUQUJMRV9MSVNUICp0 YWJsZXMsIEl0ZW0gKmNvbmQpOwogCi1zdHJ1Y3Qgc3Rfc2NoZW1hX3RhYmxlOwogLyoqCiAgICBD cmVhdGUgZmllbGRzJyBkZXNjcmlwdGlvbnMgb2YgaW5mb3JtYXRpb25fc2NoZW1hLk9QVElNSVpF Ul9UUkFDRQogICAgQHJldHZhbCAwIG9rCkBAIC0xMzYxLDEwICsxNDQxLDEyIEBAIGNsYXNzIE9w dF90cmFjZV9vYmplY3QKIHB1YmxpYzoKICAgT3B0X3RyYWNlX29iamVjdChPcHRfdHJhY2VfY29u dGV4dCAqY3R4LCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgT3B0X3RyYWNl X2NvbnRleHQ6OmZlYXR1cmVfdmFsdWUgZmVhdHVyZT0KLSAgICAgICAgICAgICAgICAgICBPcHRf dHJhY2VfY29udGV4dDo6TUlTQykge30KKyAgICAgICAgICAgICAgICAgICBPcHRfdHJhY2VfY29u dGV4dDo6TUlTQykKKyAge30KICAgT3B0X3RyYWNlX29iamVjdChPcHRfdHJhY2VfY29udGV4dCAq Y3R4LAogICAgICAgICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpmZWF0dXJlX3ZhbHVl IGZlYXR1cmU9Ci0gICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpIHt9 CisgICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpCisgIHt9CiAgIE9w dF90cmFjZV9vYmplY3QmIGFkZF9hbG51bShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZh bHVlKQogICB7IHJldHVybiAqdGhpczsgfQogICBPcHRfdHJhY2Vfb2JqZWN0JiBhZGRfdXRmOChj b25zdCBjaGFyICprZXksCkBAIC0xMzc5LDcgKzE0NjEsNyBAQCBwdWJsaWM6CiAgIE9wdF90cmFj ZV9vYmplY3QmIGFkZChjb25zdCBjaGFyICprZXksIGxvbmdsb25nIHZhbHVlKSB7IHJldHVybiAq dGhpczsgfQogICBPcHRfdHJhY2Vfb2JqZWN0JiBhZGQoY29uc3QgY2hhciAqa2V5LCB1bG9uZ2xv bmcgdmFsdWUpIHsgcmV0dXJuICp0aGlzOyB9CiAgIE9wdF90cmFjZV9vYmplY3QmIGFkZChjb25z dCBjaGFyICprZXksIGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gKnRoaXM7IH0KLSAgdm9pZCBlbmQo dm9pZCkge30KKyAgdm9pZCBlbmQoKSB7fQogfTsKIAogLyoqIEVtcHR5IGltcGxlbWVudGF0aW9u IHVzZWQgd2hlbiBvcHRpbWl6ZXIgdHJhY2UgaXMgbm90IGNvbXBpbGVkIGluICovCkBAIC0xMzg4 LDEwICsxNDcwLDEyIEBAIGNsYXNzIE9wdF90cmFjZV9hcnJheQogcHVibGljOgogICBPcHRfdHJh Y2VfYXJyYXkoT3B0X3RyYWNlX2NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqa2V5LAogICAgICAg ICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6OmZlYXR1cmVfdmFsdWUgZmVhdHVyZT0KLSAg ICAgICAgICAgICAgICAgIE9wdF90cmFjZV9jb250ZXh0OjpNSVNDKSB7fQorICAgICAgICAgICAg ICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpCisgIHt9CiAgIE9wdF90cmFjZV9hcnJheShP cHRfdHJhY2VfY29udGV4dCAqY3R4LAogICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRl eHQ6OmZlYXR1cmVfdmFsdWUgZmVhdHVyZT0KLSAgICAgICAgICAgICAgICAgIE9wdF90cmFjZV9j b250ZXh0OjpNSVNDKSB7fQorICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1J U0MpCisgIHt9CiAgIE9wdF90cmFjZV9hcnJheSYgYWRkX2FsbnVtKGNvbnN0IGNoYXIgKnZhbHVl KSB7IHJldHVybiAqdGhpczsgfQogICBPcHRfdHJhY2VfYXJyYXkmIGFkZF91dGY4KGNvbnN0IGNo YXIgKnZhbHVlLCBzaXplX3QgdmFsX2xlbmd0aCkKICAgeyByZXR1cm4gKnRoaXM7IH0KQEAgLTE0 MDQsNyArMTQ4OCw3IEBAIHB1YmxpYzoKICAgT3B0X3RyYWNlX2FycmF5JiBhZGQobG9uZ2xvbmcg dmFsdWUpIHsgcmV0dXJuICp0aGlzOyB9CiAgIE9wdF90cmFjZV9hcnJheSYgYWRkKHVsb25nbG9u ZyB2YWx1ZSkgeyByZXR1cm4gKnRoaXM7IH0KICAgT3B0X3RyYWNlX2FycmF5JiBhZGQoZG91Ymxl IHZhbHVlKSB7IHJldHVybiAqdGhpczsgfQotICB2b2lkIGVuZCh2b2lkKSB7fQorICB2b2lkIGVu ZCgpIHt9CiB9OwogCiAvKiogRW1wdHkgaW1wbGVtZW50YXRpb24gdXNlZCB3aGVuIG9wdGltaXpl ciB0cmFjZSBpcyBub3QgY29tcGlsZWQgaW4gKi8KQEAgLTE0NTIsMTIgKzE1MzYsMTQgQEAgcHVi bGljOgogLyoqCiAgICBIZWxwZXIgdG8gcHV0IHRoZSBkYXRhYmFzZS90YWJsZSBuYW1lIGluIHRo ZSB0cmFjZQogICAgQHBhcmFtICB0ICBUQUJMRSogcG9pbnRlcgord2h5IG1hY3JvLCB3aHkgbm90 IGFuIG9yZGluYXJ5IGZ1bmN0aW9uPwogKi8KICNkZWZpbmUgYWRkX3V0ZjhfdGFibGUodCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgYWRkX3V0Zjgo ImRhdGFiYXNlIiwgKHQpLT5zLT5kYi5zdHIsICh0KS0+cy0+ZGIubGVuZ3RoKS4gICAgICAgICAg ICAgIFwKICAgYWRkX3V0ZjgoInRhYmxlIiwgKHQpLT5hbGlhcykKIAotI2lmICFkZWZpbmVkKERC VUdfT0ZGKSAmJiAhZGVmaW5lZChPUFRJTUlaRVJfVFJBQ0UpCisjaWYgIWRlZmluZWQoREJVR19P RkYpICYmICFkZWZpbmVkKE9QVElNSVpFUl9UUkFDRSkgXAorICYmICFkZWZpbmVkKE9QVElNSVpF Ul9UUkFDRV9VTklUVEVTVCkKIAogLyoKICAgQSBkZWJ1ZyBiaW5hcnkgd2l0aG91dCBvcHRpbWl6 ZXIgdHJhY2UgY29tcGlsZWQgaW4sIHdpbGwgbWlzcyBzb21lCgo9PT0gbW9kaWZpZWQgZmlsZSAn c3FsL29wdF90cmFjZTJzZXJ2ZXIuY2MnCi0tLSBhL3NxbC9vcHRfdHJhY2Uyc2VydmVyLmNjCTIw MTAtMTItMTkgMTQ6MjQ6MDMgKzAwMDAKKysrIGIvc3FsL29wdF90cmFjZTJzZXJ2ZXIuY2MJMjAx MS0wMS0xMSAwODoxNTo0NiArMDAwMApAQCAtMTksMTQgKzE5LDEwIEBACiAgICBIZWxwZXJzIGNv bm5lY3RpbmcgdGhlIG9wdGltaXplciB0cmFjZSB0byBUSEQgb3IgSW5mb3JtYXRpb24gU2NoZW1h LiBUaGV5CiAgICBhcmUgZGVkaWNhdGVkICJ0byB0aGUgc2VydmVyIiAoaGVuY2UgdGhlIGZpbGUn cyBuYW1lKS4KICAgIEluIG9yZGVyIHRvIGNyZWF0ZSBhIHVuaXQgdGVzdCBvZiB0aGUgb3B0aW1p emVyIHRyYWNlIHdpdGhvdXQgZGVmaW5pbmcKLSAgIEl0ZW1fZmllbGQgKGFuZCBhbGwgaXRzIHBh cmVudCBjbGFzc2VzKSwgc3Rfc2VsZWN0X2xleC4uLiwgdGhvc2UgaGVscGVycwotICAgYXJlIGRl ZmluZWQgb3V0IG9mIG9wdF90cmFjZS5jYy4KKyAgIEl0ZW1fZmllbGQgKGFuZCBhbGwgaXRzIHBh cmVudCBjbGFzc2VzKSwgc3Rfc2VsZWN0X2xleC4uLiwgdGhlc2UgaGVscGVycworICAgYXJlIGRl ZmluZWQgaW4gb3B0X3RyYWNlLmNjLgogKi8KIAotI2lmZGVmIFVTRV9QUkFHTUFfSU1QTEVNRU5U QVRJT04KLSNwcmFnbWEgaW1wbGVtZW50YXRpb24JCQkJLy8gZ2NjOiBDbGFzcyBpbXBsZW1lbnRh dGlvbgotI2VuZGlmCi0KICNpbmNsdWRlICJvcHRfdHJhY2UuaCIKICNpbmNsdWRlICJzcWxfc2hv dy5oIiAgLy8gc2NoZW1hX3RhYmxlX3N0b3JlZF9yZWNvcmQoKQogI2luY2x1ZGUgInNxbF9wYXJz ZS5oIiAvLyBzcWxfY29tbWFuZF9mbGFncwpAQCAtNjAsOCArNTYsOCBAQCBzdGF0aWMgYm9vbCBs aXN0X2hhc19vcHRpbWl6ZXJfdHJhY2VfdGFiCiAgICBXaGV0aGVyIGEgU1FMIGNvbW1hbmQgcXVh bGlmaWVzIGZvciBvcHRpbWl6ZXIgdHJhY2luZy4KICAgIEBwYXJhbSAgc3FsX2NvbW1hbmQgIHRo ZSBjb21tYW5kCiAqLwotc3RhdGljIGlubGluZSBib29sIHNxbF9jb21tYW5kX2Nhbl9iZV90cmFj ZWQKLShlbnVtIGVudW1fc3FsX2NvbW1hbmQgc3FsX2NvbW1hbmQpCitzdGF0aWMgaW5saW5lIGJv b2wKK3NxbF9jb21tYW5kX2Nhbl9iZV90cmFjZWQoZW51bSBlbnVtX3NxbF9jb21tYW5kIHNxbF9j b21tYW5kKQogewogICAvKgogICAgIFRyYWNpbmcgaXMgbGltaXRlZCB0byBhIGZldyBTUUwgY29t bWFuZHMgb25seS4KQEAgLTcxLDcgKzY3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNxbF9jb21t YW5kX2Nhbl9iZV90cgogICAgIC0gdGhleSBwcm9iYWJseSBkb24ndCBoYXZlIGFueXRoaW5nIGlu dGVyZXN0aW5nIG9wdGltaXplci1yZWxhdGVkCiAgICAgLSBzZWxlY3RfbGV4IGZvciB0aGVtIG1p Z2h0IGJlIHVuaW5pdGlhbGl6ZWQgYW5kIHVucHJpbnRhYmxlLgogICAgIC0gU0hPVyBXQVJOSU5H UyB3b3VsZCBjcmVhdGUgYW4gdW5pbnRlcmVzdGluZyB0cmFjZSBhbmQgdGh1cyBvdmVyd3JpdGUg dGhlCi0gICAgcHJldmlvdXMgaW50ZXJlc3Rpbmcgb25lLgorICAgICAgcHJldmlvdXMgaW50ZXJl c3Rpbmcgb25lLgogCiAgICAgQWJvdXQgcHJlcGFyZWQgc3RhdGVtZW50czogbm90ZSB0aGF0IHdl IGRvbid0IHR1cm4gb24gdHJhY2luZyBmb3IKICAgICBTUUxDT01fUFJFUEFSRSAocmVzcGVjdGl2 ZWx5IFNRTENPTV9FWEVDVVRFKSwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHlldCB3aGF0CkBAIC05 NiwxNSArOTIsMTcgQEAgYm9vbCBvcHRfdHJhY2Vfc3RhcnQoVEhEICp0aGQsIGNvbnN0IFRBQgog ICAgIFdlIG5lZWQgYW4gb3B0aW1pemVyIHRyYWNlOgogICAgICogaWYgdGhlIHVzZXIgYXNrZWQg Zm9yIGl0IG9yCiAgICAgKiBpZiB3ZSBhcmUgdXNpbmcgLS1kZWJ1ZyAoYmVjYXVzZSB0aGUgdHJh Y2Ugc2VydmVzIGFzIGEgcmVsYXkgZm9yIGl0LCBmb3IKLSAgICBvcHRpbWl6ZXIgZGVidWcgcHJp bnRvdXRzKS4KLSAgICBBZGRpdGlvbmFsbHksIHdlIHNob3VsZCBub3QgYmUgdHJhY2luZyBpZjoK KyAgICAgIG9wdGltaXplciBkZWJ1ZyBwcmludG91dHMpLgorICAgIEFkZGl0aW9uYWxseSwgd2Ug c2hvdWxkICpub3QqIGJlIHRyYWNpbmcgaWY6CiAgICAgKiBjb21tYW5kIGlzIG5vdCBpbnRlcmVz dGluZyAob3B0aW1pemVyLXdpc2UpCiAgICAgKiBxdWVyeSBpbnZvbHZlcyBJX1MuT1BUSU1JWkVS X1RSQUNFICh3ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlCi0gICAgdHJhY2Ugd2hpbGUg cmVhZGluZyBpdCB3aXRoIFNFTEVDVCkuCisgICAgICB0cmFjZSB3aGlsZSByZWFkaW5nIGl0IHdp dGggU0VMRUNUKS4KICAgKi8KLSAgdWxvbmdsb25nIHZhcj0gdGhkLT52YXJpYWJsZXMub3B0aW1p emVyX3RyYWNlOworICBjb25zdCB1bG9uZ2xvbmcgdmFyPSB0aGQtPnZhcmlhYmxlcy5vcHRpbWl6 ZXJfdHJhY2U7CiAgIGJvb2wgbmVlZF9pdF9mb3JfSV9TPSAodmFyICYgT3B0X3RyYWNlX2NvbnRl eHQ6OkZMQUdfRU5BQkxFRCk7Ci0gIGJvb2wgbmVlZF9pdF9mb3JfZGJ1Zz0gZmFsc2UsIGFsbG9j YXRlZF9oZXJlPSBmYWxzZTsKKyAgYm9vbCBuZWVkX2l0X2Zvcl9kYnVnPSBmYWxzZTsKKyAgYm9v bCBhbGxvY2F0ZWRfaGVyZT0gZmFsc2U7CisKICAgLyogVGhpcyB3aWxsIGJlIHRyaWdnZXJlZCBp ZiAtLWRlYnVnIG9yIC0tZGVidWc9ZDpvcHRfdHJhY2UgaXMgdXNlZCAqLwogICBEQlVHX0VYRUNV VEUoIm9wdF90cmFjZSIsIG5lZWRfaXRfZm9yX2RidWc9IHRydWU7KTsKICAgaWYgKCEobmVlZF9p dF9mb3JfSV9TIHx8IG5lZWRfaXRfZm9yX2RidWcpKQpAQCAtMTEzLDE2ICsxMTEsMTkgQEAgYm9v bCBvcHRfdHJhY2Vfc3RhcnQoVEhEICp0aGQsIGNvbnN0IFRBQgogICAgIGdvdG8gZGlzYWJsZTsK ICAgaWYgKGxpc3RfaGFzX29wdGltaXplcl90cmFjZV90YWJsZSh0YmwpKQogICAgIGdvdG8gZGlz YWJsZTsKKwogICAvKgogICAgIFdlIGRvbid0IGFsbG9jYXRlIGl0IGluIFRIRCdzIE1FTV9ST09U IGFzIGl0IG11c3Qgc3Vydml2ZSB1bnRpbCBhIG5leHQKICAgICBzdGF0ZW1lbnQgKFNFTEVDVCkg cmVhZHMgdGhlIHRyYWNlLgogICAqLwogICBpZiAodGhkLT5vcHRfdHJhY2UgPT0gTlVMTCkKICAg ewotICAgIGlmICgodGhkLT5vcHRfdHJhY2U9IG5ldyBPcHRfdHJhY2VfY29udGV4dCgpKSA9PSBO VUxMKQorICAgIC8vICh0aGlzIHZlcnNpb24gb2YpIG9wZXJhdG9yIG5ldyBjYW4gbmV2ZXIgcmV0 dXJuIE5VTEwuCisgICAgaWYgKCh0aGQtPm9wdF90cmFjZT0gbmV3IE9wdF90cmFjZV9jb250ZXh0 KSA9PSBOVUxMKQogICAgICAgZ290byBkaXNhYmxlOwogICAgIGFsbG9jYXRlZF9oZXJlPSB0cnVl OwogICB9CisKIHN0YXJ0X3RyYWNlOgogICBpZiAodGhkLT5vcHRfdHJhY2UtPnN0YXJ0KG5lZWRf aXRfZm9yX0lfUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFyICYgT3B0X3RyYWNl X2NvbnRleHQ6OkZMQUdfRU5EX01BUktFUiksCkBAIC0xNDAsNiArMTQxLDcgQEAgc3RhcnRfdHJh Y2U6CiAgICAgZ290byBkaXNhYmxlOwogICB9CiAgIERCVUdfUkVUVVJOKHRydWUpOyAvLyBzdGFy dGVkIGFsbCBvaworCiBkaXNhYmxlOgogICAvKgogICAgIE5vIG5lZWQgdG8gY3JlYXRlIGEgdHJh Y2UgZm9yIHRoaXMgc3RhdGVtZW50LgpAQCAtMTU2LDcgKzE1OCw3IEBAIGRpc2FibGU6CiAgIGlm IChuZWVkX2l0X2Zvcl9JX1MgJiYgdGhkLT5vcHRfdHJhY2UgIT0gTlVMTCAmJiB0aGQtPm9wdF90 cmFjZS0+aXNfc3RhcnRlZCgpKQogICB7CiAgICAgbmVlZF9pdF9mb3JfSV9TPSBmYWxzZTsKLSAg ICBnb3RvIHN0YXJ0X3RyYWNlOworICAgIGdvdG8gc3RhcnRfdHJhY2U7IC8vIE91Y2gsIGNyaXNz LWNyb3NzIGdvdG8hCiAgIH0KICAgREJVR19SRVRVUk4oZmFsc2UpOwogfQpAQCAtMTc2LDYgKzE3 OCw3IEBAIHZvaWQgb3B0X3RyYWNlX3ByaW50X2V4cGFuZGVkX3F1ZXJ5KFRIRCAKICAgT3B0X3Ry YWNlX2NvbnRleHQgKiBjb25zdCB0cmFjZT0gdGhkLT5vcHRfdHJhY2U7CiAgIGlmICh0cmFjZSA9 PSBOVUxMIHx8ICF0cmFjZS0+aXNfc3RhcnRlZCgpKQogICAgIHJldHVybjsKKwogICAvKgogICAg IEluICJTRUxFQ1Qgc3RvcmVkX2Z1bmMoKSIgLCBleGVjdXRpb24gb2YgYQogICAgIHN1Yi1zdGF0 ZW1lbnQgb2Ygc3RvcmVkX2Z1bmMoKSBtYXkgc3RhcnQgYnkgb3BlbmluZyB0YWJsZXMgKHRoYXQn cyB0aGUgY2FzZQpAQCAtMTg4LDE1ICsxOTEsMTYgQEAgdm9pZCBvcHRfdHJhY2VfcHJpbnRfZXhw YW5kZWRfcXVlcnkoVEhEIAogICAgIHRoZC0+bGV4LT5zcWxfY29tbWFuZCBpcyBTUUxDT01fRU5E IGluIHRoaXMgY2FzZS4gU28gd2UgZG8gYSBjaGVjayBvZiB0aGUKICAgICBjb21tYW5kOgogICAq LworLy8gVG9vIG1hbnkgcGFyZW5zICgoKSkgaW4gY29tbWVudCBhYm92ZSwgaGFyZCB0byByZWFk LgogICBpZiAoIXNxbF9jb21tYW5kX2Nhbl9iZV90cmFjZWQodGhkLT5sZXgtPnNxbF9jb21tYW5k KSkKICAgICByZXR1cm47CisKICAgY2hhciBidWZmWzEwMjRdOwogICBTdHJpbmcgc3RyKGJ1ZmYs KHVpbnQzMikgc2l6ZW9mKGJ1ZmYpLCBzeXN0ZW1fY2hhcnNldF9pbmZvKTsKICAgc3RyLmxlbmd0 aCgwKTsKICAgLyoqCi0gICAgIElmIHRoaXMgc3RhdGVtZW50IGlzIG5vdCBTRUxFQ1QsIHdoYXQg aXMgc2hvd24gaGVyZSBjYW4gYmUKLSAgICAgaW5leGFjdC4gSU5TRVJUIFNFTEVDVCBpcyBzaG93 biBhcyBTRUxFQ1QuIERFTEVURSBXSEVSRSBpcyBzaG93bgotICAgICBhcyBTRUxFQ1QgV0hFUkUu CisgICAgIElmIHRoaXMgc3RhdGVtZW50IGlzIG5vdCBTRUxFQ1QsIHdoYXQgaXMgc2hvd24gaGVy ZSBjYW4gYmUgaW5leGFjdC4KKyAgICAgSU5TRVJUIFNFTEVDVCBpcyBzaG93biBhcyBTRUxFQ1Qu IERFTEVURSBXSEVSRSBpcyBzaG93biBhcyBTRUxFQ1QgV0hFUkUuCiAgICAgIFRoaXMgaXMgYWNj ZXB0YWJsZSBnaXZlbiB0aGUgYXVkaWVuY2UgKGRldmVsb3BlcnMpIGFuZCB0aGUgZ29hbCAodGhl CiAgICAgIGluZXhhY3QgcGFydHMgYXJlIGlycmVsZXZhbnQgZm9yIHRoZSBvcHRpbWl6ZXIpLgog ICAqLwpAQCAtMjExLDcgKzIxNSw3IEBAIHZvaWQgb3B0X3RyYWNlX2FkZF9zZWxlY3RfbnVtYmVy KE9wdF90cmEKIHsKICAgaWYgKHVubGlrZWx5KHNlbGVjdF9udW1iZXIgPj0gSU5UX01BWCkpCiAg IHsKLSAgICAvKiBjbGVhcmVyIHRoYW4gYW55IGh1Z2UgbnVtYmVyICovCisgICAgLy8gQ2xlYXJl ciB0aGFuIGFueSBodWdlIG51bWJlci4KICAgICBzLT5hZGRfYWxudW0oInNlbGVjdCMiLCAiZmFr ZSIpOwogICB9CiAgIGVsc2UKQEAgLTIzMCw5ICsyMzQsNyBAQCBpbnQgZmlsbF9vcHRpbWl6ZXJf dHJhY2VfaW5mbyhUSEQgKnRoZCwgCiAgICAgICBUaGUgbGlzdCBtdXN0IG5vdCBjaGFuZ2UgZHVy aW5nIHRoZSBpdGVyYXRvcidzIGxpZmUgdGltZS4gVGhpcyBpcyBvayBhcwogICAgICAgdGhlIGxp ZmUgdGltZSBpcyBvbmx5IHRoZSBwcmVzZW50IGJsb2NrIHdoaWNoIGNhbm5vdCBjaGFuZ2UgdGhl IGxpc3QuCiAgICAgKi8KLSAgICBmb3IgKE9wdF90cmFjZV9pdGVyYXRvciBpdCh0aGQtPm9wdF90 cmFjZSkgOwotICAgICAgICAgaXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQgOwotICAgICAg ICAgaXQrKykKKyAgICBmb3IgKE9wdF90cmFjZV9pdGVyYXRvciBpdCh0aGQtPm9wdF90cmFjZSkg OyAhaXQuYXRfZW5kKCkgOyBpdCsrKQogICAgIHsKICAgICAgIGNvbnN0IE9wdF90cmFjZV9pbmZv IGluZm89ICppdDsKICAgICAgIHJlc3RvcmVfcmVjb3JkKHRhYmxlLCBzLT5kZWZhdWx0X3ZhbHVl cyk7CkBAIC0yNDIsOCArMjQ0LDEwIEBAIGludCBmaWxsX29wdGltaXplcl90cmFjZV9pbmZvKFRI RCAqdGhkLCAKICAgICAgICAgV2hlbiBsaXRlcmFscyB3aXRoIGludHJvZHVjZXJzIGFyZSB1c2Vk LCBzZWUgIkxpdGVyYWxzV2l0aEludHJvZHVjZXJzIgogICAgICAgICBpbiB0aGlzIGZpbGUuCiAg ICAgICAqLwotICAgICAgdGFibGUtPmZpZWxkWzBdLT5zdG9yZShpbmZvLnF1ZXJ5X3B0ciwgaW5m by5xdWVyeV9sZW5ndGgsIGluZm8ucXVlcnlfY2hhcnNldCk7Ci0gICAgICB0YWJsZS0+ZmllbGRb MV0tPnN0b3JlKGluZm8udHJhY2VfcHRyLCBpbmZvLnRyYWNlX2xlbmd0aCwgc3lzdGVtX2NoYXJz ZXRfaW5mbyk7CisgICAgICB0YWJsZS0+ZmllbGRbMF0tPnN0b3JlKGluZm8ucXVlcnlfcHRyLCBp bmZvLnF1ZXJ5X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5xdWVy eV9jaGFyc2V0KTsKKyAgICAgIHRhYmxlLT5maWVsZFsxXS0+c3RvcmUoaW5mby50cmFjZV9wdHIs IGluZm8udHJhY2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1f Y2hhcnNldF9pbmZvKTsKICAgICAgIHRhYmxlLT5maWVsZFsyXS0+c3RvcmUoaW5mby5taXNzaW5n X2J5dGVzLCB0cnVlKTsKICAgICAgIHRhYmxlLT5maWVsZFszXS0+c3RvcmUoaW5mby5tYWxsb2Nf ZXJyb3IsIHRydWUpOwogICAgICAgaWYgKHNjaGVtYV90YWJsZV9zdG9yZV9yZWNvcmQodGhkLCB0 YWJsZSkpCkBAIC0yNjUsNiArMjY5LDcgQEAgU1RfRklFTERfSU5GTyBvcHRpbWl6ZXJfdHJhY2Vf aW5mb1tdPQogICAvKiBuYW1lLCBsZW5ndGgsIHR5cGUsIHZhbHVlLCBtYXliZV9udWxsLCBvbGRf bmFtZSwgb3Blbl9tZXRob2QgKi8KICAgeyJRVUVSWSIsIDY1NTM1LCBNWVNRTF9UWVBFX1NUUklO RywgMCwgZmFsc2UsICIiLCBTS0lQX09QRU5fVEFCTEV9LAogICB7IlRSQUNFIiwgNjU1MzUsIE1Z U1FMX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgMCwgU0tJUF9PUEVOX1RBQkxFfSwKKyAgLy8gd2h5 IGlzIHRoaXMgemVybywgb3RoZXJzIGFyZSAiIiAgICAgICAgICAgIF4KICAgeyJNSVNTSU5HX0JZ VEVTX0JFWU9ORF9NQVhfTUVNX1NJWkUiLCAyMCwgTVlTUUxfVFlQRV9MT05HLAogICAgMCwgZmFs c2UsICIiLCBTS0lQX09QRU5fVEFCTEV9LAogICB7Ik9TX01BTExPQ19FUlJPUiIsIDEsIE1ZU1FM X1RZUEVfVElOWSwgMCwgZmFsc2UsICIiLCBTS0lQX09QRU5fVEFCTEV9LApAQCAtMjc0LDEzICsy NzksMTEgQEAgU1RfRklFTERfSU5GTyBvcHRpbWl6ZXJfdHJhY2VfaW5mb1tdPQogCiBpbnQgbWFr ZV9vcHRpbWl6ZXJfdHJhY2VfdGFibGVfZm9yX3Nob3coVEhEICp0aGQsIFNUX1NDSEVNQV9UQUJM RSAqc2NoZW1hX3RhYmxlKQogewotICBTVF9GSUVMRF9JTkZPICpmaWVsZF9pbmZvOwogICBOYW1l X3Jlc29sdXRpb25fY29udGV4dCAqY29udGV4dD0gJnRoZC0+bGV4LT5zZWxlY3RfbGV4LmNvbnRl eHQ7Ci0gIGludCBpOwogCi0gIGZvciAoaT0gMDsgc2NoZW1hX3RhYmxlLT5maWVsZHNfaW5mb1tp XS5maWVsZF9uYW1lICE9IE5VTEw7IGkrKykKKyAgZm9yIChpbnQgaT0gMDsgc2NoZW1hX3RhYmxl LT5maWVsZHNfaW5mb1tpXS5maWVsZF9uYW1lICE9IE5VTEw7IGkrKykKICAgewotICAgIGZpZWxk X2luZm89ICZzY2hlbWFfdGFibGUtPmZpZWxkc19pbmZvW2ldOworICAgIFNUX0ZJRUxEX0lORk8g KmZpZWxkX2luZm89ICZzY2hlbWFfdGFibGUtPmZpZWxkc19pbmZvW2ldOwogICAgIEl0ZW1fZmll bGQgKmZpZWxkPSBuZXcgSXRlbV9maWVsZChjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOdWxsUywgTnVsbFMsIGZpZWxkX2luZm8tPmZpZWxkX25hbWUpOwog ICAgIGlmIChmaWVsZCkKCj09PSBtb2RpZmllZCBmaWxlICdzcWwvc3lzX3ZhcnMuY2MnCi0tLSBh L3NxbC9zeXNfdmFycy5jYwkyMDEwLTExLTIzIDEwOjIxOjUzICswMDAwCisrKyBiL3NxbC9zeXNf dmFycy5jYwkyMDExLTAxLTExIDA4OjE1OjQ2ICswMDAwCkBAIC0xNDM3LDcgKzE0MzcsNyBAQCBz dGF0aWMgU3lzX3Zhcl9mbGFnc2V0IFN5c19vcHRpbWl6ZXJfdHJhCiAgICAgICAgIiBhbmQgdmFs IGlzIG9uZSBvZiB7b24sIG9mZiwgZGVmYXVsdH0iLAogICAgICAgIFNFU1NJT05fVkFSKG9wdGlt aXplcl90cmFjZV9mZWF0dXJlcyksIENNRF9MSU5FKFJFUVVJUkVEX0FSRyksCiAgICAgICAgT3B0 X3RyYWNlX2NvbnRleHQ6OmZlYXR1cmVfbmFtZXMsCi0gICAgICAgREVGQVVMVChPcHRfdHJhY2Vf Y29udGV4dDo6RkVBVFVSRVNfREVGQVVMVCkpOworICAgICAgIERFRkFVTFQoT3B0X3RyYWNlX2Nv bnRleHQ6OmRlZmF1bHRfZmVhdHVyZXMpKTsKIAogLyoqIERlbGV0ZSBhbGwgb2xkIG9wdGltaXpl ciB0cmFjZXMgKi8KIHN0YXRpYyBib29sIG9wdGltaXplcl90cmFjZV91cGRhdGUoc3lzX3ZhciAq c2VsZiwgVEhEICp0aGQsCgo9PT0gbW9kaWZpZWQgZmlsZSAndW5pdHRlc3QvZ3VuaXQvQ01ha2VM aXN0cy50eHQnCi0tLSBhL3VuaXR0ZXN0L2d1bml0L0NNYWtlTGlzdHMudHh0CTIwMTAtMDktMTgg MTY6MjU6NDMgKzAwMDAKKysrIGIvdW5pdHRlc3QvZ3VuaXQvQ01ha2VMaXN0cy50eHQJMjAxMS0w MS0xMSAwODoxNTo0NiArMDAwMApAQCAtMjA3LDcgKzIwNyw3IEBAIElGIChDTUFLRV9DWFhfQ09N UElMRVJfSUQgU1RSRVFVQUwgIlN1blAKIEVORElGKCkKIAogIyBBZGQgdGVzdHMgKGxpbmsgdGhl bSB3aXRoIHNxbCBsaWJyYXJ5KSAKLVNFVChURVNUUyBzcWxfbGlzdCBtZGwgbWRsX215dGFwIG15 X3JlZ2V4IHRocmVhZF91dGlscyBvcHRfdHJhY2UpCitTRVQoVEVTVFMgc3FsX2xpc3QgbWRsIG1k bF9teXRhcCBteV9yZWdleCB0aHJlYWRfdXRpbHMgb3B0X3RyYWNlIG9wdF9ub3RyYWNlKQogRk9S RUFDSCh0ZXN0ICR7VEVTVFN9KQogICBBRERfRVhFQ1VUQUJMRSgke3Rlc3R9LXQgJHt0ZXN0fS10 LmNjKQogICBUQVJHRVRfTElOS19MSUJSQVJJRVMoJHt0ZXN0fS10IGd1bml0IHNxbGd1bml0bGli IHN0cmluZ3MgZGJ1ZyByZWdleCkKCj09PSBhZGRlZCBmaWxlICd1bml0dGVzdC9ndW5pdC9vcHRf bm90cmFjZS10LmNjJwotLS0gYS91bml0dGVzdC9ndW5pdC9vcHRfbm90cmFjZS10LmNjCTE5NzAt MDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvdW5pdHRlc3QvZ3VuaXQvb3B0X25vdHJhY2UtdC5j YwkyMDExLTAxLTExIDA4OjE1OjQ2ICswMDAwCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJt eV9jb25maWcuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChPUFRJ TUlaRVJfVFJBQ0UpCisjdW5kZWYgT1BUSU1JWkVSX1RSQUNFCisjZW5kaWYKKyNkZWZpbmUgT1BU SU1JWkVSX1RSQUNFX1VOSVRURVNUCisKKyNpbmNsdWRlIDxvcHRfdHJhY2UuaD4KKworbmFtZXNw YWNlIHsKKworVEVTVChGb28sIEJhcikKK3sKKyAgLy8gRmlsbCBpbiBtb3JlIGhlcmUsIHRvIHZl cmlmeSB0aGF0IGltcGxlbWVudGF0aW9ucyBhcmUgaW4gc3luYyEhIQorICBPcHRfdHJhY2VfY29u dGV4dCB0cmFjZTsKKyAgT3B0X3RyYWNlX29iamVjdCBvdG8oJnRyYWNlKTsKKyAgT3B0X3RyYWNl X2FycmF5ICBvdGEoJnRyYWNlKTsKK30KKworfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3VuaXR0ZXN0 L2d1bml0L29wdF90cmFjZS10LmNjJwotLS0gYS91bml0dGVzdC9ndW5pdC9vcHRfdHJhY2UtdC5j YwkyMDEwLTExLTI0IDE4OjU0OjI2ICswMDAwCisrKyBiL3VuaXR0ZXN0L2d1bml0L29wdF90cmFj ZS10LmNjCTIwMTEtMDEtMTEgMDg6MTU6NDYgKzAwMDAKQEAgLTI4LDggKzI4LDExIEBACiAvKiBT b21lIG1pbmltYWwgd29ya2luZyBpbXBsZW1lbnRhdGlvbnMgdG8gaGF2ZSBhIHdvcmtpbmcgdHJh Y2UuLi4gKi8KIENIQVJTRVRfSU5GTyAqc3lzdGVtX2NoYXJzZXRfaW5mbz0gJm15X2NoYXJzZXRf dXRmOF9nZW5lcmFsX2NpOwogLyogLi4uIGVuZCBoZXJlLiAqLworLy8gSSBkaWRuJ3QgcXVpdGUg dW5kZXJzdGFuZCB0aGUgY29tbWVudHMgYWJvdmUgLi4uCiAKLWNvbnN0IHVsb25nbG9uZyBhbGxf ZmVhdHVyZXM9IE9wdF90cmFjZV9jb250ZXh0OjpGRUFUVVJFU19ERUZBVUxUOworbmFtZXNwYWNl IHsKKworY29uc3QgdWxvbmdsb25nIGFsbF9mZWF0dXJlcz0gT3B0X3RyYWNlX2NvbnRleHQ6OmRl ZmF1bHRfZmVhdHVyZXM7CiAKIAogLyoqCkBAIC00MywxMSArNDYsMTIgQEAgY29uc3QgdWxvbmds b25nIGFsbF9mZWF0dXJlcz0gT3B0X3RyYWNlXwogKi8KIHZvaWQgY2hlY2tfanNvbl9jb21wbGlh bmNlKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbmd0aCkKIHsKLSNpZiAwCisgIHJldHVybjsK ICAgLyoKICAgICBSZWFkIGZyb20gc3RkaW4sIGVsaW1pbmF0ZSBjb21tZW50cywgcGFyc2UgYXMg SlNPTi4gSWYgaW52YWxpZCwgYW4gZXhjZXB0aW9uCiAgICAgaXMgdGhyb3duIGJ5IFB5dGhvbiwg dW5jYXVnaHQsIHdoaWNoIHByb2R1Y2VzIGEgbm9uLXplcm8gZXJyb3IgY29kZS4KICAgKi8KKyNp Zm5kZWYgX19XSU5fXwogICBjb25zdCBjaGFyIHB5dGhvbl9jbWRbXT0KICAgICAicHl0aG9uIC1j IFwiIgogICAgICJpbXBvcnQganNvbiwgcmUsIHN5czsiCkBAIC01NiwyMiArNjAsMzQgQEAgdm9p ZCBjaGVja19qc29uX2NvbXBsaWFuY2UoY29uc3QgY2hhciAqcwogICAgICJqc29uLmxvYWRzKHMs ICd1dGYtOCcpXCIiOwogICAvLyBTZW5kIHRoZSB0cmFjZSB0byB0aGlzIG5ldyBwcm9jZXNzJyBz dGRpbjoKICAgRklMRSAqZmQ9IHBvcGVuKHB5dGhvbl9jbWQsICJ3Iik7Ci0gIEFTU0VSVF9ORSgo dm9pZCopTlVMTCwgZmQpOwotICBBU1NFUlRfRVEoKHNpemVfdCkxLCBmd3JpdGUoc3RyLCBsZW5n dGgsIDEsIGZkKSk7CisvLyBBU1NFUlQgbWFrZXMgc2Vuc2UgaGVyZTogaWYgd2UgZmFpbCB0byBy dW4gcHl0aG9uIHdlIG11c3QgYWJvcnQuCisvLyBNb3N0IG9mIHRoZSBvdGhlciB1c2VzIG9mIEFT U0VSVCBzaG91bGQgYmUgY2hhbmdlZCB0byBFWFBFQ1QsCisvLyBzbyB0aGF0IHdlIGNvbnRpbnVl IHRvIHJ1biB0aGUgcmVzdCBvZiB0aGUgdGVzdCBldmVuIGlmIHRoZXJlCisvLyBpcyBhIGZhaWxl ZCBhc3N1bXB0aW9uLgorICBBU1NFUlRfVFJVRShOVUxMICE9IGZkKTsKKyAgQVNTRVJUX0VRKDFV LCBmd3JpdGUoc3RyLCBsZW5ndGgsIDEsIGZkKSk7CiAgIGludCByYz0gcGNsb3NlKGZkKTsKICAg cmM9IFdFWElUU1RBVFVTKHJjKTsKICAgQVNTRVJUX0VRKDAsIHJjKTsKICNlbmRpZgogfQogCitj bGFzcyBUcmFjZUNvbnRlbnRUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdAoreworcHVibGlj OgorICBPcHRfdHJhY2VfY29udGV4dCB0cmFjZTsKK307CisKKworVEVTVF9GKFRyYWNlQ29udGVu dFRlc3QsIENvbnN0cnVjdEFuZERlc3RydWN0KQoreworfQorCiAKIC8qKiBUZXN0IGVtcHR5IHRy YWNlICovCi1URVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgZW1wdHkpCitURVNUX0YoVHJhY2VDb250 ZW50VGVzdCwgZW1wdHkpCiB7Ci0gIC8qIENyZWF0ZSBhIHRyYWNlICovCi0gIE9wdF90cmFjZV9j b250ZXh0IHRyYWNlOwotICBBU1NFUlRfRVEoZmFsc2UsIHRyYWNlLnN0YXJ0KHRydWUsIGZhbHNl LCBmYWxzZSwgLTEsIDEsIFVMT05HX01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbGxfZmVhdHVyZXMpKTsKKyAgQVNTRVJUX0ZBTFNFKHRyYWNlLnN0YXJ0KHRydWUsIGZhbHNl LCBmYWxzZSwgLTEsIDEsIFVMT05HX01BWCwgYWxsX2ZlYXR1cmVzKSk7CiAgIC8qCiAgICAgQWRk IGF0IGxlYXN0IGFuIG9iamVjdCB0byBpdC4gQSByZWFsbHkgZW1wdHkgdHJhY2UgKCIiKSBpcyBu b3QKICAgICBKU09OLWNvbXBsaWFudCwgYXQgbGVhc3QgUHl0aG9uJ3MgSlNPTiBtb2R1bGUgcmFp c2VzIGFuIGV4Y2VwdGlvbi4KQEAgLTgzLDI2ICs5OSwyNCBAQCBURVNUKFRyYWNlX2NvbnRlbnRf dGVzdCwgZW1wdHkpCiAgIHRyYWNlLmVuZCgpOwogICAvKiBBbmQgdmVyaWZ5IHRyYWNlJ3MgY29u dGVudCAqLwogICBPcHRfdHJhY2VfaXRlcmF0b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VRKHRy dWUsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0LmF0 X2VuZCgpKTsKICAgY29uc3QgT3B0X3RyYWNlX2luZm8gaW5mbz0gKml0OwogICBjb25zdCBjaGFy IGV4cGVjdGVkW109ICJ7XG59IjsKLSAgQVNTRVJUX1NUUkVRKGV4cGVjdGVkLCBpbmZvLnRyYWNl X3B0cik7Ci0gIEFTU0VSVF9FUShzaXplb2YoZXhwZWN0ZWQpIC0gMSwgaW5mby50cmFjZV9sZW5n dGgpOworICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWQsIGluZm8udHJhY2VfcHRyKTsKKyAgRVhQRUNU X0VRKHNpemVvZihleHBlY3RlZCkgLSAxLCBpbmZvLnRyYWNlX2xlbmd0aCk7CiAgIGNoZWNrX2pz b25fY29tcGxpYW5jZShpbmZvLnRyYWNlX3B0ciwgaW5mby50cmFjZV9sZW5ndGgpOwotICBBU1NF UlRfRVEoKHNpemVfdCkwLCBpbmZvLm1pc3NpbmdfYnl0ZXMpOwotICBBU1NFUlRfRVEoZmFsc2Us IGluZm8ubWFsbG9jX2Vycm9yKTsKKyAgRVhQRUNUX0VRKDBVLCBpbmZvLm1pc3NpbmdfYnl0ZXMp OworICBFWFBFQ1RfRkFMU0UoaW5mby5tYWxsb2NfZXJyb3IpOwogICAvKiBTaG91bGQgYmUgbm8g bW9yZSB0cmFjZXMgKi8KICAgaXQrKzsKLSAgQVNTRVJUX0VRKGZhbHNlLCBpdCAhPSBPcHRfdHJh Y2VfaXRlcmF0b3I6OmVuZCk7CisgIEVYUEVDVF9UUlVFKGl0LmF0X2VuZCgpKTsKIH0KIAogCiAv KiogVGVzdCBub3JtYWwgdXNhZ2UgKi8KLVRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBub3JtYWxf dXNhZ2UpCitURVNUX0YoVHJhY2VDb250ZW50VGVzdCwgTm9ybWFsVXNhZ2UpCiB7Ci0gIE9wdF90 cmFjZV9jb250ZXh0IHRyYWNlOwotICBBU1NFUlRfRVEoZmFsc2UsIHRyYWNlLnN0YXJ0KHRydWUs IHRydWUsIGZhbHNlLCAtMSwgMSwgVUxPTkdfTUFYLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFsbF9mZWF0dXJlcykpOworICBBU1NFUlRfRkFMU0UodHJhY2Uuc3RhcnQodHJ1ZSwg dHJ1ZSwgZmFsc2UsIC0xLCAxLCBVTE9OR19NQVgsIGFsbF9mZWF0dXJlcykpOwogICB7CiAgICAg T3B0X3RyYWNlX29iamVjdCBvdG8oJnRyYWNlKTsKICAgICB7CkBAIC0xMjUsNyArMTM5LDcgQEAg VEVTVChUcmFjZV9jb250ZW50X3Rlc3QsIG5vcm1hbF91c2FnZSkKICAgfQogICB0cmFjZS5lbmQo KTsKICAgT3B0X3RyYWNlX2l0ZXJhdG9yIGl0KCZ0cmFjZSk7Ci0gIEFTU0VSVF9FUSh0cnVlLCBp dCAhPSBPcHRfdHJhY2VfaXRlcmF0b3I6OmVuZCk7CisgIEVYUEVDVF9GQUxTRShpdC5hdF9lbmQo KSk7CiAgIGNvbnN0IE9wdF90cmFjZV9pbmZvIGluZm89ICppdDsKICAgY29uc3QgY2hhciBleHBl Y3RlZFtdPQogICAgICJ7XG4iCkBAIC0xNTIsMTkgKzE2NiwxNyBAQCBURVNUKFRyYWNlX2NvbnRl bnRfdGVzdCwgbm9ybWFsX3VzYWdlKQogICBBU1NFUlRfRVEoKHNpemVfdCkwLCBpbmZvLm1pc3Np bmdfYnl0ZXMpOwogICBBU1NFUlRfRVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9yKTsKICAgaXQr KzsKLSAgQVNTRVJUX0VRKGZhbHNlLCBpdCAhPSBPcHRfdHJhY2VfaXRlcmF0b3I6OmVuZCk7Cisg IEVYUEVDVF9UUlVFKGl0LmF0X2VuZCgpKTsKIH0KIAogCiAvKioKLSAgIFRlc3QgT3B0X3RyYWNl X2NvbnRleHQ6OmdldF90YWlsKCkuIFNhbWUgYXMgVHJhY2VfY29udGVudF90ZXN0Lm5vcm1hbF91 c2FnZQorICAgVGVzdCBPcHRfdHJhY2VfY29udGV4dDo6Z2V0X3RhaWwoKS4gU2FtZSBhcyBUcmFj ZUNvbnRlbnRUZXN0Lk5vcm1hbFVzYWdlCiAgICBidXQgd2l0aCBhIGdldF90YWlsKCkgaW4gdGhl IG1pZGRsZS4KICovCi1URVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgdGFpbCkKK1RFU1RfRihUcmFj ZUNvbnRlbnRUZXN0LCB0YWlsKQogewotICBPcHRfdHJhY2VfY29udGV4dCB0cmFjZTsKLSAgQVNT RVJUX0VRKGZhbHNlLCB0cmFjZS5zdGFydCh0cnVlLCB0cnVlLCBmYWxzZSwgLTEsIDEsIFVMT05H X01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmVhdHVyZXMpKTsKKyAg QVNTRVJUX0ZBTFNFKHRyYWNlLnN0YXJ0KHRydWUsIHRydWUsIGZhbHNlLCAtMSwgMSwgVUxPTkdf TUFYLCBhbGxfZmVhdHVyZXMpKTsKICAgewogICAgIE9wdF90cmFjZV9vYmplY3Qgb3RvKCZ0cmFj ZSk7CiAgICAgewpAQCAtMTg3LDcgKzE5OSw3IEBAIFRFU1QoVHJhY2VfY29udGVudF90ZXN0LCB0 YWlsKQogICBjb25zdCBjaGFyICp0YWlsPSB0cmFjZS5nZXRfdGFpbCg0MCk7CiAgIHRyYWNlLmVu ZCgpOwogICBPcHRfdHJhY2VfaXRlcmF0b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VRKHRydWUs IGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0LmF0X2Vu ZCgpKTsKICAgY29uc3QgT3B0X3RyYWNlX2luZm8gaW5mbz0gKml0OwogICBjb25zdCBjaGFyIGV4 cGVjdGVkW109CiAgICAgIntcbiIKQEAgLTIxNiwxNiArMjI4LDE0IEBAIFRFU1QoVHJhY2VfY29u dGVudF90ZXN0LCB0YWlsKQogICBBU1NFUlRfRVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9yKTsK ICAgQVNTRVJUX0VRKDAsIHN0cmNtcChleHBlY3RlZCArIHNpemVvZihleHBlY3RlZCkgLSAxIC0g NDAsIHRhaWwpKTsKICAgaXQrKzsKLSAgQVNTRVJUX0VRKGZhbHNlLCBpdCAhPSBPcHRfdHJhY2Vf aXRlcmF0b3I6OmVuZCk7CisgIEVYUEVDVF9UUlVFKGl0LmF0X2VuZCgpKTsKIH0KIAogCiAvKiog VGVzdCByZWFjdGlvbiB0byBtYWxmb3JtZWQgSlNPTiAob2JqZWN0IHdpdGggdmFsdWUgd2l0aG91 dCBrZXkpICovCi1URVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgYnVnZ3lfb2JqZWN0KQorVEVTVF9G KFRyYWNlQ29udGVudFRlc3QsIEJ1Z2d5T2JqZWN0KQogewotICBPcHRfdHJhY2VfY29udGV4dCB0 cmFjZTsKLSAgQVNTRVJUX0VRKGZhbHNlLCB0cmFjZS5zdGFydCh0cnVlLCB0cnVlLCBmYWxzZSwg LTEsIDEsIFVMT05HX01BWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmVh dHVyZXMpKTsKKyAgQVNTRVJUX0ZBTFNFKHRyYWNlLnN0YXJ0KHRydWUsIHRydWUsIGZhbHNlLCAt MSwgMSwgVUxPTkdfTUFYLCBhbGxfZmVhdHVyZXMpKTsKICAgewogICAgIE9wdF90cmFjZV9vYmpl Y3Qgb3RvKCZ0cmFjZSk7CiAgICAgewpAQCAtMjQ4LDcgKzI1OCw3IEBAIFRFU1QoVHJhY2VfY29u dGVudF90ZXN0LCBidWdneV9vYmplY3QpCiAgIH0KICAgdHJhY2UuZW5kKCk7CiAgIE9wdF90cmFj ZV9pdGVyYXRvciBpdCgmdHJhY2UpOwotICBBU1NFUlRfRVEodHJ1ZSwgaXQgIT0gT3B0X3RyYWNl X2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfRkFMU0UoaXQuYXRfZW5kKCkpOwogICBjb25zdCBP cHRfdHJhY2VfaW5mbyBpbmZvPSAqaXQ7CiAgIGNvbnN0IGNoYXIgZXhwZWN0ZWRbXT0KICAgICAi e1xuIgpAQCAtMjczLDE0ICsyODMsMTMgQEAgVEVTVChUcmFjZV9jb250ZW50X3Rlc3QsIGJ1Z2d5 X29iamVjdCkKICAgQVNTRVJUX0VRKChzaXplX3QpMCwgaW5mby5taXNzaW5nX2J5dGVzKTsKICAg QVNTRVJUX0VRKGZhbHNlLCBpbmZvLm1hbGxvY19lcnJvcik7CiAgIGl0Kys7Ci0gIEFTU0VSVF9F UShmYWxzZSwgaXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfVFJVRShp dC5hdF9lbmQoKSk7CiB9CiAKIAogLyoqIFRlc3QgcmVhY3Rpb24gdG8gbWFsZm9ybWVkIEpTT04g KGFycmF5IHdpdGggdmFsdWUgd2l0aCBrZXkpICovCi1URVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwg YnVnZ3lfYXJyYXkpCitURVNUX0YoVHJhY2VDb250ZW50VGVzdCwgQnVnZ3lBcnJheSkKIHsKLSAg T3B0X3RyYWNlX2NvbnRleHQgdHJhY2U7CiAgIEFTU0VSVF9FUShmYWxzZSwgdHJhY2Uuc3RhcnQo dHJ1ZSwgdHJ1ZSwgZmFsc2UsIC0xLCAxLCBVTE9OR19NQVgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWxsX2ZlYXR1cmVzKSk7CiAgIHsKQEAgLTI5OSw3ICszMDgsNyBAQCBURVNU KFRyYWNlX2NvbnRlbnRfdGVzdCwgYnVnZ3lfYXJyYXkpCiAgIH0KICAgdHJhY2UuZW5kKCk7CiAg IE9wdF90cmFjZV9pdGVyYXRvciBpdCgmdHJhY2UpOwotICBBU1NFUlRfRVEodHJ1ZSwgaXQgIT0g T3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfRkFMU0UoaXQuYXRfZW5kKCkpOwog ICBjb25zdCBPcHRfdHJhY2VfaW5mbyBpbmZvPSAqaXQ7CiAgIGNvbnN0IGNoYXIgZXhwZWN0ZWRb XT0KICAgICAie1xuIgpAQCAtMzE5LDE2ICszMjgsMTQgQEAgVEVTVChUcmFjZV9jb250ZW50X3Rl c3QsIGJ1Z2d5X2FycmF5KQogICBBU1NFUlRfRVEoKHNpemVfdCkwLCBpbmZvLm1pc3NpbmdfYnl0 ZXMpOwogICBBU1NFUlRfRVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9yKTsKICAgaXQrKzsKLSAg QVNTRVJUX0VRKGZhbHNlLCBpdCAhPSBPcHRfdHJhY2VfaXRlcmF0b3I6OmVuZCk7CisgIEVYUEVD VF9UUlVFKGl0LmF0X2VuZCgpKTsKIH0KIAogCiAvKiogVGVzdCBPcHRfdHJhY2VfZGlzYWJsZV9J X1MgKi8KLVRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBkaXNhYmxlX0lfUykKK1RFU1RfRihUcmFj ZUNvbnRlbnRUZXN0LCBEaXNhYmxlSVMpCiB7Ci0gIE9wdF90cmFjZV9jb250ZXh0IHRyYWNlOwot ICBBU1NFUlRfRVEoZmFsc2UsIHRyYWNlLnN0YXJ0KHRydWUsIHRydWUsIGZhbHNlLCAtMSwgMSwg VUxPTkdfTUFYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9mZWF0dXJlcykp OworICBBU1NFUlRfRkFMU0UodHJhY2Uuc3RhcnQodHJ1ZSwgdHJ1ZSwgZmFsc2UsIC0xLCAxLCBV TE9OR19NQVgsIGFsbF9mZWF0dXJlcykpOwogICB7CiAgICAgT3B0X3RyYWNlX29iamVjdCBvdG8o JnRyYWNlKTsKICAgICB7CkBAIC0zNjAsNyArMzY3LDcgQEAgVEVTVChUcmFjZV9jb250ZW50X3Rl c3QsIGRpc2FibGVfSV9TKQogICB9CiAgIHRyYWNlLmVuZCgpOwogICBPcHRfdHJhY2VfaXRlcmF0 b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VRKHRydWUsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRv cjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0LmF0X2VuZCgpKTsKICAgY29uc3QgT3B0X3RyYWNl X2luZm8gaW5mbz0gKml0OwogICBjb25zdCBjaGFyIGV4cGVjdGVkW109CiAgICAgIntcbiIKQEAg LTM4NywxNSArMzk0LDE2IEBAIFRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBkaXNhYmxlX0lfUykK ICAgQVNTRVJUX0VRKChzaXplX3QpMCwgaW5mby5taXNzaW5nX2J5dGVzKTsKICAgQVNTRVJUX0VR KGZhbHNlLCBpbmZvLm1hbGxvY19lcnJvcik7CiAgIGl0Kys7Ci0gIEFTU0VSVF9FUShmYWxzZSwg aXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfVFJVRShpdC5hdF9lbmQo KSk7CiB9CiAKIC8qKiBIZWxwZXIgZm9yIFRyYWNlX3NldHRpbmdzX3Rlc3Qub2Zmc2V0ICovCisv LyBPdXIgc3R5bGUgZ3VpZGUgc2F5cyAiZG8gbm90IHRyYW5zZmVyIGJ5IHJlZmVyZW5jZSIuCiBz dGF0aWMgdm9pZCBtYWtlX29uZV90cmFjZShPcHRfdHJhY2VfY29udGV4dCAmdHJhY2UsIGNvbnN0 IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwgbG9u ZyBsaW1pdCkKIHsKLSAgQVNTRVJUX0VRKGZhbHNlLCB0cmFjZS5zdGFydCh0cnVlLCB0cnVlLCBm YWxzZSwgb2Zmc2V0LCBsaW1pdCwgVUxPTkdfTUFYLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFsbF9mZWF0dXJlcykpOworICBBU1NFUlRfRkFMU0UodHJhY2Uuc3RhcnQodHJ1ZSwg dHJ1ZSwgZmFsc2UsIG9mZnNldCwgbGltaXQsIFVMT05HX01BWCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFsbF9mZWF0dXJlcykpOwogICB7CiAgICAgT3B0X3RyYWNlX29iamVjdCBvdG8o JnRyYWNlKTsKICAgICBvdG8uYWRkKG5hbWUsIDBMTCk7CkBAIC00MDcsMzggKzQxNSw0MCBAQCBz dGF0aWMgdm9pZCBtYWtlX29uZV90cmFjZShPcHRfdHJhY2VfY29uCiAvKioKICAgIEhlbHBlciBm b3IgVHJhY2Vfc2V0dGluZ3NfdGVzdC5vZmZzZXQKIAotICAgQHBhcmFtICBuYW1lcyAgYSBOVUxM LXRlcm1pbmF0ZWQgYXJyYXkgb2YgIm5hbWVzIgorICAgQHBhcmFtICB0cmFjZSAgVGhlIHRyYWNl IGNvbnRleHQuCisgICBAcGFyYW0gIG5hbWVzICBBIE5VTEwtdGVybWluYXRlZCBhcnJheSBvZiAi bmFtZXMiLgogCiAgICBDaGVja3MgdGhhdCB0aGUgbGlzdCBvZiB0cmFjZXMgaXMgYXMgZXhwZWN0 ZWQuCiAgICBUaGlzIG1hY3JvIGNoZWNrcyB0aGF0IHRoZSBmaXJzdCB0cmFjZSBjb250YWlucyBu YW1lc1swXSwgdGhhdCB0aGUgc2Vjb25kCiAgICB0cmFjZSBjb250YWlucyBuYW1lc1sxXSwgZXRj LiBUaGF0IHRoZSBudW1iZXIgb2YgdHJhY2VzIGlzIHRoZSBzYW1lIGFzCiAgICB0aGUgbnVtYmVy IG9mIGVsZW1lbnRzIGluICJuYW1lcyIuCiAKLSAgIEBub3RlIGl0IGlzIGEgbWFjcm8sIGZvciBw cm9wZXIgcmVwb3J0aW5nIG9mIGxpbmUgbnVtYmVycyBpbiBjYXNlIG9mCi0gICBhc3NlcnRpb24g ZmFpbHVyZSAoaWYgaXQgd2VyZSBhIGZ1bmN0aW9uLCB0aGUgbGluZSBudW1iZXIgaW4gdGhlIGZ1 bmN0aW9uCi0gICB3b3VsZCBiZSByZXBvcnRlZCwgd2hpY2ggaXMgbm90IHVzZWZ1bCkuCisgICBA bm90ZSBJdCBpcyBhIG1hY3JvLCBmb3IgcHJvcGVyIHJlcG9ydGluZyBvZiBsaW5lIG51bWJlcnMg aW4gY2FzZSBvZgorICAgYXNzZXJ0aW9uIGZhaWx1cmUuIFNDT1BFRF9UUkFDRSB3aWxsIHJlcG9y dCBsaW5lIG51bWJlciBhdCB0aGUKKyAgIG1hY3JvIGV4cGFuc2lvbiBzaXRlLgogKi8KLSNkZWZp bmUgY2hlY2sodHJhY2UsIG5hbWVzKSBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICBPcHRfdHJhY2VfaXRlcmF0b3IgaXQoJnRyYWNlKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE9wdF90cmFjZV9pbmZvIGluZm87 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZm9yIChj b25zdCBjaGFyICoqbmFtZT0gbmFtZXMgOyAqbmFtZSAhPSBOVUxMIDsgbmFtZSsrKSAgICAgICBc Ci0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICBBU1NFUlRfRVEodHJ1ZSwgaXQgIT0gT3B0X3RyYWNlX2l0ZXJh dG9yOjplbmQpOyAgICAgICAgICAgICAgICAgXAotICAgICAgaW5mbz0gKml0OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBjb25zdCBz aXplX3QgbmFtZV9sZW49IHN0cmxlbigqbmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgIEFTU0VSVF9FUShuYW1lX2xlbiArIDExLCBpbmZvLnRyYWNlX2xlbmd0aCk7ICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgIEFTU0VSVF9FUSgwLCBzdHJuY21wKGluZm8udHJhY2VfcHRy ICsgNSwgKm5hbWUsIG5hbWVfbGVuKSk7ICAgICAgICAgXAotICAgICAgQVNTRVJUX0VRKChzaXpl X3QpMCwgaW5mby5taXNzaW5nX2J5dGVzKTsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBB U1NFUlRfRVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9yKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgIGl0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFTU0VSVF9FUShmYWxzZSwgaXQg IT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOyAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAo MCkKKyNkZWZpbmUgY2hlY2sodHJhY2UsIG5hbWVzKSB7IFNDT1BFRF9UUkFDRSgiIik7IGRvX2No ZWNrKCZ0cmFjZSwgbmFtZXMpOyB9CisKK3ZvaWQgZG9fY2hlY2soT3B0X3RyYWNlX2NvbnRleHQg KnRyYWNlLCBjb25zdCBjaGFyKipuYW1lcykKK3sKKyAgT3B0X3RyYWNlX2l0ZXJhdG9yIGl0KHRy YWNlKTsKKyAgZm9yIChjb25zdCBjaGFyICoqbmFtZT0gbmFtZXMgOyAqbmFtZSAhPSBOVUxMIDsg bmFtZSsrKQorICB7CisgICAgRVhQRUNUX0ZBTFNFKGl0LmF0X2VuZCgpKTsKKyAgICBPcHRfdHJh Y2VfaW5mbyBpbmZvPSAqaXQ7CisgICAgY29uc3Qgc2l6ZV90IG5hbWVfbGVuPSBzdHJsZW4oKm5h bWUpOworICAgIEFTU0VSVF9FUShuYW1lX2xlbiArIDExLCBpbmZvLnRyYWNlX2xlbmd0aCk7Cisg ICAgQVNTRVJUX0VRKDAsIHN0cm5jbXAoaW5mby50cmFjZV9wdHIgKyA1LCAqbmFtZSwgbmFtZV9s ZW4pKTsKKyAgICBBU1NFUlRfRVEoKHNpemVfdCkwLCBpbmZvLm1pc3NpbmdfYnl0ZXMpOworICAg IEFTU0VSVF9FUShmYWxzZSwgaW5mby5tYWxsb2NfZXJyb3IpOworICAgIGl0Kys7CisgIH0KKyAg RVhQRUNUX1RSVUUoaXQuYXRfZW5kKCkpOworfQogCiAKIC8qKiBUZXN0IG9mZnNldC9saW1pdCB2 YXJpYWJsZXMgKi8KLVRFU1QoVHJhY2Vfc2V0dGluZ3NfdGVzdCwgb2Zmc2V0KQorVEVTVChUcmFj ZVNldHRpbmdzVGVzdCwgb2Zmc2V0KQogewogICBPcHRfdHJhY2VfY29udGV4dCB0cmFjZTsKICAg bWFrZV9vbmVfdHJhY2UodHJhY2UsICIxMDAiLCAtMSAvKiBvZmZzZXQgKi8sIDEgLyogbGltaXQg Ki8pOwpAQCAtNDkyLDcgKzUwMiw3IEBAIFRFU1QoVHJhY2Vfc2V0dGluZ3NfdGVzdCwgb2Zmc2V0 KQogCiAKIC8qKiBUZXN0IHRydW5jYXRpb24gYnkgbWF4X21lbV9zaXplICovCi1URVNUKFRyYWNl X3NldHRpbmdzX3Rlc3QsIG1heF9tZW1fc2l6ZSkKK1RFU1QoVHJhY2VTZXR0aW5nc1Rlc3QsIE1h eE1lbVNpemUpCiB7CiAgIE9wdF90cmFjZV9jb250ZXh0IHRyYWNlOwogICBBU1NFUlRfRVEoZmFs c2UsIHRyYWNlLnN0YXJ0KHRydWUsIGZhbHNlLCBmYWxzZSwgLTEsIDEsCkBAIC01MDgsNyArNTE4 LDcgQEAgVEVTVChUcmFjZV9zZXR0aW5nc190ZXN0LCBtYXhfbWVtX3NpemUpCiAgIH0KICAgdHJh Y2UuZW5kKCk7CiAgIE9wdF90cmFjZV9pdGVyYXRvciBpdCgmdHJhY2UpOwotICBBU1NFUlRfRVEo dHJ1ZSwgaXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfRkFMU0UoaXQu YXRfZW5kKCkpOwogICBjb25zdCBPcHRfdHJhY2VfaW5mbyBpbmZvPSAqaXQ7CiAgIGNvbnN0IGNo YXIgZXhwZWN0ZWRbXT0KICAgICAie1xuIgpAQCAtNTI1LDEzICs1MzUsMTMgQEAgVEVTVChUcmFj ZV9zZXR0aW5nc190ZXN0LCBtYXhfbWVtX3NpemUpCiAgIEFTU0VSVF9FUShmYWxzZSwgaW5mby5t YWxsb2NfZXJyb3IpOwogICBBU1NFUlRfRVEoMCwgc3RybmNtcChleHBlY3RlZCwgaW5mby50cmFj ZV9wdHIsIHNpemVvZihleHBlY3RlZCkgLSAxKSk7CiAgIGl0Kys7Ci0gIEFTU0VSVF9FUShmYWxz ZSwgaXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBFQ1RfVFJVRShpdC5hdF9l bmQoKSk7CiB9CiAKIAogCiAvKiogVGVzdCBob3cgdHJ1bmNhdGlvbiBieSBtYXhfbWVtX3NpemUg YWZmZWN0cyBuZXh0IHRyYWNlcyAqLwotVEVTVChUcmFjZV9zZXR0aW5nc190ZXN0LCBtYXhfbWVt X3NpemUyKQorVEVTVChUcmFjZVNldHRpbmdzVGVzdCwgTWF4TWVtU2l6ZTIpCiB7CiAgIE9wdF90 cmFjZV9jb250ZXh0IHRyYWNlOwogICBBU1NFUlRfRVEoZmFsc2UsIHRyYWNlLnN0YXJ0KHRydWUs IGZhbHNlLCBmYWxzZSwgLTIsIDIsCkBAIC01NTAsNyArNTYwLDcgQEAgVEVTVChUcmFjZV9zZXR0 aW5nc190ZXN0LCBtYXhfbWVtX3NpemUyKQogICB9CiAgIHRyYWNlLmVuZCgpOwogICBPcHRfdHJh Y2VfaXRlcmF0b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VRKHRydWUsIGl0ICE9IE9wdF90cmFj ZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0LmF0X2VuZCgpKTsKICAgT3B0X3Ry YWNlX2luZm8gaW5mbz0gKml0OwogICBBU1NFUlRfRVEoKHNpemVfdCkxNywgaW5mby50cmFjZV9s ZW5ndGgpOwogICBBU1NFUlRfRVEoKHNpemVfdCkxNiwgaW5mby5taXNzaW5nX2J5dGVzKTsKQEAg LTU2Miw3ICs1NzIsNyBAQCBURVNUKFRyYWNlX3NldHRpbmdzX3Rlc3QsIG1heF9tZW1fc2l6ZTIp CiAgIEFTU0VSVF9FUSgoc2l6ZV90KTMzLCBpbmZvLm1pc3NpbmdfYnl0ZXMpOwogICBBU1NFUlRf RVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9yKTsKICAgaXQrKzsKLSAgQVNTRVJUX0VRKGZhbHNl LCBpdCAhPSBPcHRfdHJhY2VfaXRlcmF0b3I6OmVuZCk7CisgIEVYUEVDVF9UUlVFKGl0LmF0X2Vu ZCgpKTsKICAgLyoKICAgICAzcmQgdHJhY2U7IHRoZSBmaXJzdCBvbmUgc2hvdWxkIGF1dG9tYXRp Y2FsbHkgYmUgcHVyZ2VkLCB0aHVzIHRoZSAzcmQKICAgICBzaG91bGQgaGF2ZSBhIGJpdCBvZiBy b29tLgpAQCAtNTc0LDcgKzU4NCw3IEBAIFRFU1QoVHJhY2Vfc2V0dGluZ3NfdGVzdCwgbWF4X21l bV9zaXplMikKICAgfQogICB0cmFjZS5lbmQoKTsKICAgT3B0X3RyYWNlX2l0ZXJhdG9yIGl0Migm dHJhY2UpOwotICBBU1NFUlRfRVEodHJ1ZSwgaXQyICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5k KTsKKyAgRVhQRUNUX0ZBTFNFKGl0Mi5hdF9lbmQoKSk7CiAgIGluZm89ICppdDI7CiAgIEFTU0VS VF9FUSgoc2l6ZV90KTAsIGluZm8udHJhY2VfbGVuZ3RoKTsKICAgQVNTRVJUX0VRKChzaXplX3Qp MzMsIGluZm8ubWlzc2luZ19ieXRlcyk7CkBAIC01ODksMTUgKzU5OSwxNCBAQCBURVNUKFRyYWNl X3NldHRpbmdzX3Rlc3QsIG1heF9tZW1fc2l6ZTIpCiAgIEFTU0VSVF9FUSgoc2l6ZV90KTE5LCBp bmZvLm1pc3NpbmdfYnl0ZXMpOwogICBBU1NFUlRfRVEoZmFsc2UsIGluZm8ubWFsbG9jX2Vycm9y KTsKICAgaXQyKys7Ci0gIEFTU0VSVF9FUShmYWxzZSwgaXQyICE9IE9wdF90cmFjZV9pdGVyYXRv cjo6ZW5kKTsKKyAgRVhQRUNUX1RSVUUoaXQyLmF0X2VuZCgpKTsKIH0KIAogCiAvKiogVGVzdCBy ZWFjdGlvbiB0byBvdXQtb2YtbWVtb3J5IGNvbmRpdGlvbiAqLwogI2lmbmRlZiBEQlVHX09GRgot VEVTVChUcmFjZV9jb250ZW50X3Rlc3QsIG91dF9vZl9tZW1vcnkpCitURVNUX0YoVHJhY2VDb250 ZW50VGVzdCwgT3V0T2ZNZW1vcnkpCiB7Ci0gIE9wdF90cmFjZV9jb250ZXh0IHRyYWNlOwogICBB U1NFUlRfRVEoZmFsc2UsIHRyYWNlLnN0YXJ0KHRydWUsIGZhbHNlLCBmYWxzZSwgLTEsIDEsIFVM T05HX01BWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmVhdHVyZXMpKTsK ICAgewpAQCAtNjExLDcgKzYyMCw3IEBAIFRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBvdXRfb2Zf bWVtb3J5KQogICB9CiAgIHRyYWNlLmVuZCgpOwogICBPcHRfdHJhY2VfaXRlcmF0b3IgaXQoJnRy YWNlKTsKLSAgQVNTRVJUX0VRKHRydWUsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsK KyAgRVhQRUNUX0ZBTFNFKGl0LmF0X2VuZCgpKTsKICAgY29uc3QgT3B0X3RyYWNlX2luZm8gaW5m bz0gKml0OwogICBjb25zdCBjaGFyIGV4cGVjdGVkW109CiAgICAgIntcbiIKQEAgLTYyNCwxNSAr NjMzLDE0IEBAIFRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBvdXRfb2ZfbWVtb3J5KQogICBBU1NF UlRfRVEoKHNpemVfdCkwLCBpbmZvLm1pc3NpbmdfYnl0ZXMpOwogICBBU1NFUlRfRVEodHJ1ZSwg aW5mby5tYWxsb2NfZXJyb3IpOyAgIC8vIG1hbGxvYyBlcnJvciByZXBvcnRlZAogICBpdCsrOwot ICBBU1NFUlRfRVEoZmFsc2UsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQ RUNUX1RSVUUoaXQuYXRfZW5kKCkpOwogfQogI2VuZGlmIC8vICFEQlVHX09GRgogCiAKIC8qKiBU ZXN0IGZpbHRlcmluZyBieSBmZWF0dXJlICovCi1URVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgZmls dGVyaW5nX2J5X2ZlYXR1cmUpCitURVNUX0YoVHJhY2VDb250ZW50VGVzdCwgRmlsdGVyaW5nQnlG ZWF0dXJlKQogewotICBPcHRfdHJhY2VfY29udGV4dCB0cmFjZTsKICAgQVNTRVJUX0VRKGZhbHNl LCB0cmFjZS5zdGFydCh0cnVlLCBmYWxzZSwgZmFsc2UsIC0xLCAxLCBVTE9OR19NQVgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0X3RyYWNlX2NvbnRleHQ6Ok1JU0MpKTsKICAg ewpAQCAtNjYzLDcgKzY3MSw3IEBAIFRFU1QoVHJhY2VfY29udGVudF90ZXN0LCBmaWx0ZXJpbmdf YnlfZmUKICAgfQogICB0cmFjZS5lbmQoKTsKICAgT3B0X3RyYWNlX2l0ZXJhdG9yIGl0KCZ0cmFj ZSk7Ci0gIEFTU0VSVF9FUSh0cnVlLCBpdCAhPSBPcHRfdHJhY2VfaXRlcmF0b3I6OmVuZCk7Cisg IEVYUEVDVF9GQUxTRShpdC5hdF9lbmQoKSk7CiAgIGNvbnN0IE9wdF90cmFjZV9pbmZvIGluZm89 ICppdDsKICAgY29uc3QgY2hhciBleHBlY3RlZFtdPQogICAgICJ7XG4iCkBAIC02ODcsMTQgKzY5 NSwxMyBAQCBURVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgZmlsdGVyaW5nX2J5X2ZlCiAgIEFTU0VS VF9FUSgoc2l6ZV90KTAsIGluZm8ubWlzc2luZ19ieXRlcyk7CiAgIEFTU0VSVF9FUShmYWxzZSwg aW5mby5tYWxsb2NfZXJyb3IpOwogICBpdCsrOwotICBBU1NFUlRfRVEoZmFsc2UsIGl0ICE9IE9w dF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX1RSVUUoaXQuYXRfZW5kKCkpOwogfQog CiAKIC8qKiBUZXN0IGVzY2FwaW5nIG9mIGNoYXJhY3RlcnMgKi8KLVRFU1QoVHJhY2VfY29udGVu dF90ZXN0LCBlc2NhcGluZykKK1RFU1RfRihUcmFjZUNvbnRlbnRUZXN0LCBlc2NhcGluZykKIHsK LSAgT3B0X3RyYWNlX2NvbnRleHQgdHJhY2U7CiAgIEFTU0VSVF9FUShmYWxzZSwgdHJhY2Uuc3Rh cnQodHJ1ZSwgdHJ1ZSwgZmFsc2UsIC0xLCAxLCBVTE9OR19NQVgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWxsX2ZlYXR1cmVzKSk7CiAgIC8vIEFsbCBBU0NJSSAwLTEyNyBjaGFy cyBhcmUgdmFsaWQgVVRGOCBlbmNvZGluZ3MKQEAgLTcwMiw4ICs3MDksOCBAQCBURVNUKFRyYWNl X2NvbnRlbnRfdGVzdCwgZXNjYXBpbmcpCiAgIGZvciAodWludCBjPSAwOyBjIDwgc2l6ZW9mKGFs bF9jaGFycykgLSAyIDsgYysrKQogICAgIGFsbF9jaGFyc1tjXT0gYzsKICAgLy8gTm93IGEgY2hh cmFjdGVyIHdpdGggYSB0d28tYnl0ZSBjb2RlIGluIHV0Zjg6IMOkCi0gIGFsbF9jaGFyc1sxMjhd PSAweGMzOwotICBhbGxfY2hhcnNbMTI5XT0gMHhhNDsKKyAgYWxsX2NoYXJzWzEyOF09IDB4YzM7 IC8vIHdhcm5pbmcgb24gd2luZG93czogdHJ1bmNhdGlvbiBvZiBjb25zdGFudCB2YWx1ZQorICBh bGxfY2hhcnNbMTI5XT0gMHhhNDsgLy8gd2FybmluZyBvbiB3aW5kb3dzOiB0cnVuY2F0aW9uIG9m IGNvbnN0YW50IHZhbHVlCiAgIC8vIGFsbF9jaGFycyBpcyB1c2VkIGJvdGggYXMgcXVlcnkuLi4K ICAgdHJhY2Uuc2V0X3F1ZXJ5KGFsbF9jaGFycywgc2l6ZW9mKGFsbF9jaGFycyksIHN5c3RlbV9j aGFyc2V0X2luZm8pOwogICB7CkBAIC03MTMsNyArNzIwLDcgQEAgVEVTVChUcmFjZV9jb250ZW50 X3Rlc3QsIGVzY2FwaW5nKQogICB9CiAgIHRyYWNlLmVuZCgpOwogICBPcHRfdHJhY2VfaXRlcmF0 b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VRKHRydWUsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRv cjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0LmF0X2VuZCgpKTsKICAgY29uc3QgT3B0X3RyYWNl X2luZm8gaW5mbz0gKml0OwogICAvLyB3ZSBnZXQgdGhlIHRyYWNlIGVzY2FwZWQsIEpTT04tY29t cGxpYW50OgogICBjb25zdCBjaGFyIGV4cGVjdGVkW109CkBAIC03MzAsMTQgKzczNywxMyBAQCBU RVNUKFRyYWNlX2NvbnRlbnRfdGVzdCwgZXNjYXBpbmcpCiAgIEFTU0VSVF9FUSgwLCBtZW1jbXAo YWxsX2NoYXJzLCBpbmZvLnF1ZXJ5X3B0ciwgc2l6ZW9mKGFsbF9jaGFycykpKTsKICAgQVNTRVJU X0VRKHN5c3RlbV9jaGFyc2V0X2luZm8sIGluZm8ucXVlcnlfY2hhcnNldCk7CiAgIGl0Kys7Ci0g IEFTU0VSVF9FUShmYWxzZSwgaXQgIT0gT3B0X3RyYWNlX2l0ZXJhdG9yOjplbmQpOworICBFWFBF Q1RfVFJVRShpdC5hdF9lbmQoKSk7CiB9CiAKIAogLyoqIFRlc3QgaG93IHRoZSBzeXN0ZW0gaGFu ZGxlcyBub24tVVRGOCBjaGFyYWN0ZXJzLCBhIHZpb2xhdGlvbiBvZiBpdHMgQVBJICovCi1URVNU KFRyYWNlX2NvbnRlbnRfdGVzdCwgbm9uX3V0ZjgpCitURVNUX0YoVHJhY2VDb250ZW50VGVzdCwg Tm9uVXRmOCkKIHsKLSAgT3B0X3RyYWNlX2NvbnRleHQgdHJhY2U7CiAgIEFTU0VSVF9FUShmYWxz ZSwgdHJhY2Uuc3RhcnQodHJ1ZSwgdHJ1ZSwgZmFsc2UsIC0xLCAxLCBVTE9OR19NQVgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZlYXR1cmVzKSk7CiAgIC8qCkBAIC03NzUs NyArNzgxLDcgQEAgVEVTVChUcmFjZV9jb250ZW50X3Rlc3QsIG5vbl91dGY4KQogICB9CiAgIHRy YWNlLmVuZCgpOwogICBPcHRfdHJhY2VfaXRlcmF0b3IgaXQoJnRyYWNlKTsKLSAgQVNTRVJUX0VR KHRydWUsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX0ZBTFNFKGl0 LmF0X2VuZCgpKTsKICAgY29uc3QgT3B0X3RyYWNlX2luZm8gaW5mbz0gKml0OwogICAvLyBUaGlz IGlzIFVURjggYW5kIHRodXMgSlNPTi1jb21wbGlhbnQ7IEFCQyBpcyBwcmVzZW50CiAgIGNvbnN0 IGNoYXIgZXhwZWN0ZWRbXT0KQEAgLTc5MSw3ICs3OTcsOSBAQCBURVNUKFRyYWNlX2NvbnRlbnRf dGVzdCwgbm9uX3V0ZjgpCiAgIC8vIHdlIGdldCB0aGUgcXVlcnkgdW5lc2NhcGVkLCB2ZXJiYXRp bSwgbm90IDAtdGVybWluYXRlZDoKICAgQVNTRVJUX0VRKDAsIG1lbWNtcChhbGxfY2hhcnMsIGlu Zm8ucXVlcnlfcHRyLCBzaXplb2YoYWxsX2NoYXJzKSkpOwogICBpdCsrOwotICBBU1NFUlRfRVEo ZmFsc2UsIGl0ICE9IE9wdF90cmFjZV9pdGVyYXRvcjo6ZW5kKTsKKyAgRVhQRUNUX1RSVUUoaXQu YXRfZW5kKCkpOwogfQogCit9ICAvLyBuYW1lc3BhY2UKKwogI2VuZGlmIC8vIE9QVElNSVpFUl9U UkFDRQoK --===============4459908244926809298== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # uee7eww1v6whym0h # target_branch: file:///export/home/didrik/repo/next-mr-opt-\ # backporting-wl4800/ # testament_sha1: 488e18501188ff07c02c01acb17989de366e507b # timestamp: 2011-01-11 09:15:58 +0100 # base_revision_id: jorgen.loland@stripped\ # nqg9a60zdwbb0tmy # # Begin bundle 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 G5TfJPTKoSFApERfuq//i7kinChIdyWrO4A= --===============4459908244926809298==--