From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 81C4A6EC40; Wed, 18 Aug 2021 13:31:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 81C4A6EC40 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1629282679; bh=Kcei6WFCdFKkYWj/I9f3v2AbY5BYWrLSZYurIOV4IAM=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=VUsTTA5yJDJIae9A/FGeMhUMrUVvaGttcy8XM7Eb4phJrkyV2d8XOthdFSLvwMlRL v9nNdq0f5VhzAqKFc64xapHTVM9T5F2bSvhG4G8/8ZqRQvxSBV3W/9ID212vazinDl biOYZeGR2qZSaf4910SlHGJfU/tMeC6OGxOtFtDE= Received: from f718.i.mail.ru (f718.i.mail.ru [128.140.172.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 2B94B6EC40 for ; Wed, 18 Aug 2021 13:31:18 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 2B94B6EC40 Received: by f718.i.mail.ru with local (envelope-from ) id 1mGIqp-0003Fk-RV; Wed, 18 Aug 2021 13:31:16 +0300 Received: by e.mail.ru with HTTP; Wed, 18 Aug 2021 13:31:15 +0300 To: imeevma@tarantool.org MIME-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-SenderField-ReMsg: 16292013880392580671 X-SenderField-Remind: 0 Date: Wed, 18 Aug 2021 13:31:15 +0300 X-Priority: 3 (Normal) Message-ID: <1629282675.590708695@f718.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--708d819A4C20Eb57c043c2B9c7913D2f1629282675" In-Reply-To: References: X-7564579A: B8F34718100C35BD X-77F55803: 119C1F4DF6A9251C771EFB8797C310D1CD1541311D4C47538B16FCF8B46D73858FD872164937FA4CD5940C49EC0A0B468E4B11B2E1E91019AA6AAC1E18D50B4D64A60420BC957EC6 X-7FA49CB5: 70AAF3C13DB7016878DA827A17800CE735AC339B9DA8CF35D82A6BABE6F325AC08BE7437D75B48FABCF491FFA38154B613377AFFFEAFD26923F8577A6DFFEA7C8E61D63CA3BB9856C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6778DA827A17800CE7C6A43EB42C8B28B9EA1F7E6F0F101C6723150C8DA25C47586E58E00D9D99D84E1BDDB23E98D2D38BBCA57AF85F7723F26AB4B2F3C011F31FDCD622B92585CDF1CC7F00164DA146DAFE8445B8C89999728AA50765F7900637F6B57BC7E64490618DEB871D839B7333395957E7521B51C2DFABB839C843B9C08941B15DA834481F8AA50765F7900637F6B57BC7E6449061A352F6E88A58FB86F5D81C698A659EA7E827F84554CEF5019E625A9149C048EE9ECD01F8117BC8BEE2021AF6380DFAD18AA50765F790063735872C767BF85DA227C277FBC8AE2E8B5D9D64F11F3A190A75ECD9A6C639B01B4E70A05D1297E1BBCB5012B2E24CD356 X-C1DE0DAB: 0D63561A33F958A5D87B694D09AA75122051EECFFD4F3252925B35BA675281F4BDC6A1CF3F042BAD6DF99611D93F60EFCE66FDB1904541E0699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D342F9EE325F82A28A8CF672844560C8D20A2C49634F78CD8B81B2829E7A4A49D794C55BB0118E4A4211D7E09C32AA3244C000F6F9825E7140D4AEF7732470386C5F2F5F14F68F1805BFACE5A9C96DEB163 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5+wYjsrrSY/u8Y3PrTqANeitKFiSd6Yd7yPpbiiZ/d5BsxIjK0jGQgCHUM3Ry2Lt2G3MDkMauH3h0dBdQGj+BB/iPzQYh7XS329fgu+/vnDhsXioSYzRPBtGz1QjW2d0Lg== X-Mailru-MI: 800 X-Mailru-Sender: 583F1D7ACE8F49BD7DB1CFEB4E5644DE12033B66F9154CF2266FAF3900A1BFBBAE79F284AA32226176E149BFDDB39AAE29380EAE0A631D0ECC8C667815EE47EB10A486D242DFEDA21E60DA90B68B17487B3F536FA1060A55867D54C4B3182E9F0D4ABDE8C577C2ED X-Mras: Ok X-Spam: undefined Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_v2_2/2=5D_sql=3A_define_e?= =?utf-8?q?phemeral_space_fields?= X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Vitaliia Ioffe via Tarantool-patches Reply-To: =?UTF-8?B?Vml0YWxpaWEgSW9mZmU=?= Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" ----ALT--708d819A4C20Eb57c043c2B9c7913D2f1629282675 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 ClFBIExHVE0KwqAKwqAKLS0KVml0YWxpaWEgSW9mZmUKwqAKwqAgCj7QktGC0L7RgNC90LjQuiwg MTcg0LDQstCz0YPRgdGC0LAgMjAyMSwgMTQ6NTYgKzAzOjAwINC+0YIgTWVyZ2VuIEltZWV2IHZp YSBUYXJhbnRvb2wtcGF0Y2hlcyA8dGFyYW50b29sLXBhdGNoZXNAZGV2LnRhcmFudG9vbC5vcmc+ Ogo+wqAKPlByaW9yIHRvIHRoaXMgcGF0Y2gsIG1vc3QgZXBoZW1lcmFsIHNwYWNlIGZpZWxkcyB3 ZXJlIGRlZmluZWQgdXNpbmcgdGhlCj5TQ0FMQVIgdHlwZS4gQWZ0ZXIgdGhpcyBwYXRjaCwgYWxt b3N0IGFsbCBmaWVsZHMgd2lsbCBiZSBwcm9wZXJseQo+ZGVmaW5lZC4gSG93ZXZlciwgdGhlcmUg YXJlIHN0aWxsIGNhc2VzIHdoZXJlIFNDQUxBUiB3aWxsIGJlIHNldCBieQo+ZGVmYXVsdC4gRm9y IGV4YW1wbGUsIGluIElOLCB3aGVyZSBydWxlcyBpcyBzdGlsbCBub3QgZGVmaW5lZCAoIzQ2OTIp Lgo+QW5vdGhlciBleGFtcGxlIGlzIHdoZW4gYSBmaWVsZCBpcyBub3QgcmVzb2x2ZWQgYmVjYXVz ZSBvZiBhIHRvbyBjb21wbGV4Cj5xdWVyeS4KPgo+UGFydCBvZiAjNjIxMwo+LS0tCj7CoHNyYy9i b3gvc3FsLmMgfCAyMTMgKysrKysrKysrKysrLS0tLS0tLS0KPsKgc3JjL2JveC9zcWwvZGVsZXRl LmMgfCAzNSArKy0tCj7CoHNyYy9ib3gvc3FsL2V4cHIuYyB8IDE5ICstCj7CoHNyYy9ib3gvc3Fs L2luc2VydC5jIHwgNTcgKysrKy0tCj7CoHNyYy9ib3gvc3FsL3NlbGVjdC5jIHwgNDAwICsrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPsKgc3JjL2JveC9zcWwvc3FsSW50Lmgg fCA2NiArKysrKy0KPsKgc3JjL2JveC9zcWwvdGFyYW50b29sSW50LmggfCAxNSAtLQo+wqBzcmMv Ym94L3NxbC91cGRhdGUuYyB8IDE1ICstCj7CoHNyYy9ib3gvc3FsL3ZkYmUuYyB8IDE3ICstCj7C oHNyYy9ib3gvc3FsL3ZkYmUuaCB8IDEzICstCj7CoHNyYy9ib3gvc3FsL3ZkYmVhdXguYyB8IDEy IC0tCj7CoHNyYy9ib3gvc3FsL3doZXJlLmMgfCAxMCArLQo+wqBzcmMvYm94L3NxbC93aGVyZWNv ZGUuYyB8IDE0ICstCj7CoDEzIGZpbGVzIGNoYW5nZWQsIDU5NSBpbnNlcnRpb25zKCspLCAyOTEg ZGVsZXRpb25zKC0pCj4KPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC5jIGIvc3JjL2JveC9zcWwu Ywo+aW5kZXggMGU5M2FhN2JiLi5kMTUxNTlkNmUgMTAwNjQ0Cj4tLS0gYS9zcmMvYm94L3NxbC5j Cj4rKysgYi9zcmMvYm94L3NxbC5jCj5AQCAtMjQzLDExNCArMjQzLDE2MSBAQCB0YXJhbnRvb2xz cWxDb3VudChzdHJ1Y3QgQnRDdXJzb3IgKnBDdXIpCj7CoCByZXR1cm4gaW5kZXhfY291bnQocEN1 ci0+aW5kZXgsIHBDdXItPml0ZXJfdHlwZSwgTlVMTCwgMCk7Cj7CoH0KPsKgCj4tc3RydWN0IHNw YWNlICoKPi1zcWxfZXBoZW1lcmFsX3NwYWNlX2NyZWF0ZSh1aW50MzJfdCBmaWVsZF9jb3VudCwg c3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8pCj4rc3RydWN0IHNxbF9zcGFjZV9pbmZvICoK PitzcWxfc3BhY2VfaW5mb19uZXcodWludDMyX3QgZmllbGRfY291bnQsIHVpbnQzMl90IHBhcnRf Y291bnQpCj7CoHsKPi0gc3RydWN0IGtleV9kZWYgKmRlZiA9IE5VTEw7Cj4tIHVpbnQzMl90IHBh cnRfY291bnQgPSBmaWVsZF9jb3VudDsKPi0gaWYgKGtleV9pbmZvICE9IE5VTEwpIHsKPi0gZGVm ID0gc3FsX2tleV9pbmZvX3RvX2tleV9kZWYoa2V5X2luZm8pOwo+LSBpZiAoZGVmID09IE5VTEwp Cj4tIHJldHVybiBOVUxMOwo+LSAvKgo+LSAqIEluIGNhc2UgaXNfcGtfcm93aWQgaXMgdHJ1ZSB3 ZSBjYW4gdXNlIHJvd2lkCj4tICogYXMgdGhlIG9ubHkgcGFydCBvZiB0aGUga2V5Lgo+LSAqLwo+ LSBpZiAoa2V5X2luZm8tPmlzX3BrX3Jvd2lkKQo+LSBwYXJ0X2NvdW50ID0gMTsKPisgYXNzZXJ0 KGZpZWxkX2NvdW50ID4gMCk7Cj4rIHVpbnQzMl90IGluZm9fc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg c3FsX3NwYWNlX2luZm8pOwo+KyB1aW50MzJfdCBmaWVsZF9zaXplID0gZmllbGRfY291bnQgKiBz aXplb2YoZW51bSBmaWVsZF90eXBlKTsKPisgdWludDMyX3QgY29sbHNfc2l6ZSA9IGZpZWxkX2Nv dW50ICogc2l6ZW9mKHVpbnQzMl90KTsKPisgdWludDMyX3QgcGFydHNfc2l6ZSA9IHBhcnRfY291 bnQgKiBzaXplb2YodWludDMyX3QpOwo+KyB1aW50MzJfdCBzb3J0X29yZGVyc19zaXplID0gcGFy dF9jb3VudCAqIHNpemVvZihlbnVtIHNvcnRfb3JkZXIpOwo+KyB1aW50MzJfdCBzaXplID0gaW5m b19zaXplICsgZmllbGRfc2l6ZSArIGNvbGxzX3NpemUgKyBwYXJ0c19zaXplICsKPisgc29ydF9v cmRlcnNfc2l6ZTsKPisKPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsRGJNYWxs b2NSYXdOTihzcWxfZ2V0KCksIHNpemUpOwo+KyBpZiAoaW5mbyA9PSBOVUxMKSB7Cj4rIGRpYWdf c2V0KE91dE9mTWVtb3J5LCBzaXplLCAic3FsRGJNYWxsb2NSYXdOTiIsICJpbmZvIik7Cj4rIHJl dHVybiBOVUxMOwo+wqAgfQo+KyBpbmZvLT50eXBlcyA9IChlbnVtIGZpZWxkX3R5cGUgKikoKGNo YXIgKilpbmZvICsgaW5mb19zaXplKTsKPisgaW5mby0+Y29sbF9pZHMgPSAodWludDMyX3QgKiko KGNoYXIgKilpbmZvLT50eXBlcyArIGZpZWxkX3NpemUpOwo+KyBpbmZvLT5wYXJ0cyA9IHBhcnRf Y291bnQgPT0gMCA/IE5VTEwgOgo+KyAodWludDMyX3QgKikoKGNoYXIgKilpbmZvLT5jb2xsX2lk cyArIGNvbGxzX3NpemUpOwo+KyBpbmZvLT5zb3J0X29yZGVycyA9IHBhcnRfY291bnQgPT0gMCA/ IE5VTEwgOgo+KyAodWludDMyX3QgKikoKGNoYXIgKilpbmZvLT5wYXJ0cyArIHBhcnRzX3NpemUp Owo+KyBpbmZvLT5maWVsZF9jb3VudCA9IGZpZWxkX2NvdW50Owo+KyBpbmZvLT5wYXJ0X2NvdW50 ID0gcGFydF9jb3VudDsKPsKgCj4tIHN0cnVjdCByZWdpb24gKnJlZ2lvbiA9ICZmaWJlcigpLT5n YzsKPisgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZpZWxkX2NvdW50OyArK2kpIHsKPisgaW5m by0+dHlwZXNbaV0gPSBGSUVMRF9UWVBFX1NDQUxBUjsKPisgaW5mby0+Y29sbF9pZHNbaV0gPSBD T0xMX05PTkU7Cj4rIH0KPisgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHBhcnRfY291bnQ7ICsr aSkgewo+KyBpbmZvLT5wYXJ0c1tpXSA9IGk7Cj4rIGluZm8tPnNvcnRfb3JkZXJzW2ldID0gU09S VF9PUkRFUl9BU0M7Cj4rCj4rIH0KPisgcmV0dXJuIGluZm87Cj4rfQo+Kwo+K3N0cnVjdCBzcWxf c3BhY2VfaW5mbyAqCj4rc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fc3BhY2VfZGVmKGNvbnN0IHN0 cnVjdCBzcGFjZV9kZWYgKmRlZikKPit7Cj4rIHVpbnQzMl90IGZpZWxkX2NvdW50ID0gZGVmLT5m aWVsZF9jb3VudCArIDE7Cj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9IHNxbF9zcGFj ZV9pbmZvX25ldyhmaWVsZF9jb3VudCwgMCk7Cj4rIGlmIChpbmZvID09IE5VTEwpCj4rIHJldHVy biBOVUxMOwo+KyBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZGVmLT5maWVsZF9jb3VudDsgKytp KSB7Cj4rIGluZm8tPnR5cGVzW2ldID0gZGVmLT5maWVsZHNbaV0udHlwZTsKPisgaW5mby0+Y29s bF9pZHNbaV0gPSBkZWYtPmZpZWxkc1tpXS5jb2xsX2lkOwo+KyB9Cj4rIC8qIEFkZCBvbmUgbW9y ZSBmaWVsZCBmb3Igcm93aWQuICovCj4rIGluZm8tPnR5cGVzW2RlZi0+ZmllbGRfY291bnRdID0g RklFTERfVFlQRV9JTlRFR0VSOwo+KyByZXR1cm4gaW5mbzsKPit9Cj4rCj4rc3RydWN0IHNxbF9z cGFjZV9pbmZvICoKPitzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRleF9kZWYoY29uc3Qgc3Ry dWN0IGluZGV4X2RlZiAqZGVmLCBib29sIGhhc19yb3dpZCkKPit7Cj4rIHVpbnQzMl90IGZpZWxk X2NvdW50ID0gZGVmLT5rZXlfZGVmLT5wYXJ0X2NvdW50Owo+KyBpZiAoaGFzX3Jvd2lkKQo+KyAr K2ZpZWxkX2NvdW50Owo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPSBzcWxfc3BhY2Vf aW5mb19uZXcoZmllbGRfY291bnQsIDApOwo+KyBpZiAoaW5mbyA9PSBOVUxMKQo+KyByZXR1cm4g TlVMTDsKPisgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGRlZi0+a2V5X2RlZi0+cGFydF9jb3Vu dDsgKytpKSB7Cj4rIGluZm8tPnR5cGVzW2ldID0gZGVmLT5rZXlfZGVmLT5wYXJ0c1tpXS50eXBl Owo+KyBpbmZvLT5jb2xsX2lkc1tpXSA9IGRlZi0+a2V5X2RlZi0+cGFydHNbaV0uY29sbF9pZDsK PisgfQo+KyBpZiAoaGFzX3Jvd2lkKQo+KyBpbmZvLT50eXBlc1tkZWYtPmtleV9kZWYtPnBhcnRf Y291bnRdID0gRklFTERfVFlQRV9JTlRFR0VSOwo+KyByZXR1cm4gaW5mbzsKPit9Cj4rCj4rc3Ry dWN0IHNwYWNlICoKPitzcWxfZXBoZW1lcmFsX3NwYWNlX25ldyhjb25zdCBzdHJ1Y3Qgc3FsX3Nw YWNlX2luZm8gKmluZm8pCj4rewo+KyB1aW50MzJfdCBmaWVsZF9jb3VudCA9IGluZm8tPmZpZWxk X2NvdW50Owo+KyB1aW50MzJfdCBwYXJ0X2NvdW50ID0gaW5mby0+cGFydHMgPT0gTlVMTCA/IGZp ZWxkX2NvdW50IDoKPisgaW5mby0+cGFydF9jb3VudDsKPisgdWludDMyX3QgcGFydHNfaW5kZW50 ID0gZmllbGRfY291bnQgKiBzaXplb2Yoc3RydWN0IGZpZWxkX2RlZik7Cj4rIHVpbnQzMl90IG5h bWVzX2luZGVudCA9IHBhcnRfY291bnQgKiBzaXplb2Yoc3RydWN0IGtleV9wYXJ0X2RlZikgKwo+ KyBwYXJ0c19pbmRlbnQ7Cj7CoCAvKgo+LSAqIE5hbWUgb2YgdGhlIGZpZWxkcyB3aWxsIGJlICJf Q09MVU1OXzEiLCAiX0NPTFVNTl8yIgo+LSAqIGFuZCBzbyBvbi4gRHVlIHRvIHRoaXMsIGxlbmd0 aCBvZiBlYWNoIG5hbWUgaXMgbm8gbW9yZQo+LSAqIHRoYW4gc3RybGVuKCJfQ09MVU1OXyIpIHBs dXMgbGVuZ3RoIG9mIFVJTlQzMl9NQVgKPi0gKiB0dXJuZWQgdG8gc3RyaW5nLCB3aGljaCBpcyAx MCBhbmQgcGx1cyAxIGZvciBcMC4KPisgKiBOYW1lIG9mIHRoZSBmaWVsZHMgd2lsbCBiZSAiX0NP TFVNTl8xIiwgIl9DT0xVTU5fMiIgYW5kIHNvIG9uLiBEdWUgdG8KPisgKiB0aGlzLCBsZW5ndGgg b2YgZWFjaCBuYW1lIGlzIG5vIG1vcmUgdGhhbiAxOSA9PSBzdHJsZW4oIl9DT0xVTU5fIikKPisg KiBwbHVzIGxlbmd0aCBvZiBVSU5UMzJfTUFYIHR1cm5lZCB0byBzdHJpbmcsIHdoaWNoIGlzIDEw IGFuZCBwbHVzIDEKPisgKiBmb3IgJ1wwJy4KPsKgICovCj4tIHVpbnQzMl90IG5hbWVfbGVuID0g c3RybGVuKCJfQ09MVU1OXyIpICsgMTE7Cj4tIHVpbnQzMl90IHNpemUgPSBmaWVsZF9jb3VudCAq IChzaXplb2Yoc3RydWN0IGZpZWxkX2RlZikgKyBuYW1lX2xlbikgKwo+LSBwYXJ0X2NvdW50ICog c2l6ZW9mKHN0cnVjdCBrZXlfcGFydF9kZWYpOwo+KyB1aW50MzJfdCBzaXplID0gbmFtZXNfaW5k ZW50ICsgZmllbGRfY291bnQgKiAxOTsKPisKPisgc3RydWN0IHJlZ2lvbiAqcmVnaW9uID0gJmZp YmVyKCktPmdjOwo+KyBzaXplX3Qgc3ZwID0gcmVnaW9uX3VzZWQocmVnaW9uKTsKPsKgIHN0cnVj dCBmaWVsZF9kZWYgKmZpZWxkcyA9IHJlZ2lvbl9hbGlnbmVkX2FsbG9jKHJlZ2lvbiwgc2l6ZSwK PsKgIGFsaWdub2YoZmllbGRzWzBdKSk7Cj7CoCBpZiAoZmllbGRzID09IE5VTEwpIHsKPsKgIGRp YWdfc2V0KE91dE9mTWVtb3J5LCBzaXplLCAicmVnaW9uX2FsaWduZWRfYWxsb2MiLCAiZmllbGRz Iik7Cj7CoCByZXR1cm4gTlVMTDsKPsKgIH0KPi0gc3RydWN0IGtleV9wYXJ0X2RlZiAqZXBoZW1l cl9rZXlfcGFydHMgPQo+LSAodm9pZCAqKWZpZWxkcyArIGZpZWxkX2NvdW50ICogc2l6ZW9mKHN0 cnVjdCBmaWVsZF9kZWYpOwo+LSBzdGF0aWNfYXNzZXJ0KGFsaWdub2YoKmZpZWxkcykgPT0gYWxp Z25vZigqZXBoZW1lcl9rZXlfcGFydHMpLAo+LSAiYWxsb2NhdGVkIGluIG9uZSBibG9jaywgYW5k IHNob3VsZCBoYXZlIHRoZSBzYW1lICIKPi0gImFsaWdubWVudCIpOwo+LSBjaGFyICpuYW1lcyA9 IChjaGFyICopZXBoZW1lcl9rZXlfcGFydHMgKwo+LSBwYXJ0X2NvdW50ICogc2l6ZW9mKHN0cnVj dCBrZXlfcGFydF9kZWYpOwo+LSBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgZmllbGRfY291bnQ7 ICsraSkgewo+LSBzdHJ1Y3QgZmllbGRfZGVmICpmaWVsZCA9ICZmaWVsZHNbaV07Cj4tIGZpZWxk LT5uYW1lID0gbmFtZXM7Cj4tIG5hbWVzICs9IG5hbWVfbGVuOwo+LSBzcHJpbnRmKGZpZWxkLT5u YW1lLCAiX0NPTFVNTl8lZCIsIGkpOwo+LSBmaWVsZC0+aXNfbnVsbGFibGUgPSB0cnVlOwo+LSBm aWVsZC0+bnVsbGFibGVfYWN0aW9uID0gT05fQ09ORkxJQ1RfQUNUSU9OX05PTkU7Cj4tIGZpZWxk LT5kZWZhdWx0X3ZhbHVlID0gTlVMTDsKPi0gZmllbGQtPmRlZmF1bHRfdmFsdWVfZXhwciA9IE5V TEw7Cj4tIGlmIChkZWYgIT0gTlVMTCAmJiBpIDwgZGVmLT5wYXJ0X2NvdW50KSB7Cj4tIGFzc2Vy dChkZWYtPnBhcnRzW2ldLnR5cGUgPCBmaWVsZF90eXBlX01BWCk7Cj4tIGZpZWxkLT50eXBlID0g ZGVmLT5wYXJ0c1tpXS50eXBlOwo+LSBmaWVsZC0+Y29sbF9pZCA9IGRlZi0+cGFydHNbaV0uY29s bF9pZDsKPi0gfSBlbHNlIHsKPi0gZmllbGQtPmNvbGxfaWQgPSBDT0xMX05PTkU7Cj4tIGZpZWxk LT50eXBlID0gRklFTERfVFlQRV9TQ0FMQVI7Cj4tIH0KPisgc3RydWN0IGtleV9wYXJ0X2RlZiAq cGFydHMgPSAoc3RydWN0IGtleV9wYXJ0X2RlZiAqKSgoY2hhciAqKWZpZWxkcyArCj4rIHBhcnRz X2luZGVudCk7Cj4rIHN0YXRpY19hc3NlcnQoYWxpZ25vZigqZmllbGRzKSA9PSBhbGlnbm9mKCpw YXJ0cyksICJhbGxvY2F0ZWQgaW4gb25lICIKPisgImJsb2NrLCBhbmQgc2hvdWxkIGhhdmUgdGhl IHNhbWUgYWxpZ25tZW50Iik7Cj4rIGNoYXIgKm5hbWVzID0gKGNoYXIgKilmaWVsZHMgKyBuYW1l c19pbmRlbnQ7Cj4rCj4rIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBpbmZvLT5maWVsZF9jb3Vu dDsgKytpKSB7Cj4rIGZpZWxkc1tpXS5uYW1lID0gbmFtZXM7Cj4rIHNwcmludGYobmFtZXMsICJf Q09MVU1OXyVkIiwgaSk7Cj4rIG5hbWVzICs9IHN0cmxlbihmaWVsZHNbaV0ubmFtZSkgKyAxOwo+ KyBmaWVsZHNbaV0uaXNfbnVsbGFibGUgPSB0cnVlOwo+KyBmaWVsZHNbaV0ubnVsbGFibGVfYWN0 aW9uID0gT05fQ09ORkxJQ1RfQUNUSU9OX05PTkU7Cj4rIGZpZWxkc1tpXS5kZWZhdWx0X3ZhbHVl ID0gTlVMTDsKPisgZmllbGRzW2ldLmRlZmF1bHRfdmFsdWVfZXhwciA9IE5VTEw7Cj4rIGZpZWxk c1tpXS50eXBlID0gaW5mby0+dHlwZXNbaV07Cj4rIGZpZWxkc1tpXS5jb2xsX2lkID0gaW5mby0+ Y29sbF9pZHNbaV07Cj7CoCB9Cj4tCj7CoCBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcGFydF9j b3VudDsgKytpKSB7Cj4tIHN0cnVjdCBrZXlfcGFydF9kZWYgKnBhcnQgPSAmZXBoZW1lcl9rZXlf cGFydHNbaV07Cj4tIC8qCj4tICogSW4gY2FzZSB3ZSBuZWVkIHRvIHNhdmUgaW5pdGlhbCBvcmRl ciBvZgo+LSAqIGluc2VydGVkIGludG8gZXBoZW1lcmFsIHNwYWNlIHJvd3Mgd2UgdXNlIHJvd2lk Cj4tICogYXMgdGhlIG9ubHkgcGFydCBvZiBQSy4gSWYgZXBoZW1lcmFsIHNwYWNlIGhhcwo+LSAq IGEgcm93aWQsIGl0IGlzIGFsd2F5cyB0aGUgbGFzdCBjb2x1bW4uCj4tICovCj4tIHVpbnQzMl90 IGogPSBpOwo+LSBpZiAoa2V5X2luZm8gIT0gTlVMTCAmJiBrZXlfaW5mby0+aXNfcGtfcm93aWQp Cj4tIGogPSBmaWVsZF9jb3VudCAtIDE7Cj4tIHBhcnQtPmZpZWxkbm8gPSBqOwo+LSBwYXJ0LT5u dWxsYWJsZV9hY3Rpb24gPSBPTl9DT05GTElDVF9BQ1RJT05fTk9ORTsKPi0gcGFydC0+aXNfbnVs bGFibGUgPSB0cnVlOwo+LSBwYXJ0LT5leGNsdWRlX251bGwgPSBmYWxzZTsKPi0gcGFydC0+c29y dF9vcmRlciA9IFNPUlRfT1JERVJfQVNDOwo+LSBwYXJ0LT5wYXRoID0gTlVMTDsKPi0gcGFydC0+ dHlwZSA9IGZpZWxkc1tqXS50eXBlOwo+LSBwYXJ0LT5jb2xsX2lkID0gZmllbGRzW2pdLmNvbGxf aWQ7Cj4rIHVpbnQzMl90IGogPSBpbmZvLT5wYXJ0cyA9PSBOVUxMID8gaSA6IGluZm8tPnBhcnRz W2ldOwo+KyBwYXJ0c1tpXS5maWVsZG5vID0gajsKPisgcGFydHNbaV0ubnVsbGFibGVfYWN0aW9u ID0gT05fQ09ORkxJQ1RfQUNUSU9OX05PTkU7Cj4rIHBhcnRzW2ldLmlzX251bGxhYmxlID0gdHJ1 ZTsKPisgcGFydHNbaV0uZXhjbHVkZV9udWxsID0gZmFsc2U7Cj4rIHBhcnRzW2ldLnNvcnRfb3Jk ZXIgPSBTT1JUX09SREVSX0FTQzsKPisgcGFydHNbaV0ucGF0aCA9IE5VTEw7Cj4rIHBhcnRzW2ld LnR5cGUgPSBpbmZvLT50eXBlc1tqXTsKPisgcGFydHNbaV0uY29sbF9pZCA9IGluZm8tPmNvbGxf aWRzW2pdOwo+wqAgfQo+LSBzdHJ1Y3Qga2V5X2RlZiAqZXBoZW1lcl9rZXlfZGVmID0ga2V5X2Rl Zl9uZXcoZXBoZW1lcl9rZXlfcGFydHMsCj4tIHBhcnRfY291bnQsIGZhbHNlKTsKPi0gaWYgKGVw aGVtZXJfa2V5X2RlZiA9PSBOVUxMKQo+Kwo+KyBzdHJ1Y3Qga2V5X2RlZiAqa2V5X2RlZiA9IGtl eV9kZWZfbmV3KHBhcnRzLCBwYXJ0X2NvdW50LCBmYWxzZSk7Cj4rIGlmIChrZXlfZGVmID09IE5V TEwpCj7CoCByZXR1cm4gTlVMTDsKPsKgCj4tIHN0cnVjdCBpbmRleF9kZWYgKmVwaGVtZXJfaW5k ZXhfZGVmID0KPi0gaW5kZXhfZGVmX25ldygwLCAwLCAiZXBoZW1lcl9pZHgiLCBzdHJsZW4oImVw aGVtZXJfaWR4IiksIFRSRUUsCj4tICZpbmRleF9vcHRzX2RlZmF1bHQsIGVwaGVtZXJfa2V5X2Rl ZiwgTlVMTCk7Cj4tIGtleV9kZWZfZGVsZXRlKGVwaGVtZXJfa2V5X2RlZik7Cj4tIGlmIChlcGhl bWVyX2luZGV4X2RlZiA9PSBOVUxMKQo+KyBjb25zdCBjaGFyICpuYW1lID0gImVwaGVtZXJfaWR4 IjsKPisgc3RydWN0IGluZGV4X2RlZiAqaW5kZXhfZGVmID0gaW5kZXhfZGVmX25ldygwLCAwLCBu YW1lLCBzdHJsZW4obmFtZSksCj4rIFRSRUUsICZpbmRleF9vcHRzX2RlZmF1bHQsCj4rIGtleV9k ZWYsIE5VTEwpOwo+KyBrZXlfZGVmX2RlbGV0ZShrZXlfZGVmKTsKPisgaWYgKGluZGV4X2RlZiA9 PSBOVUxMKQo+wqAgcmV0dXJuIE5VTEw7Cj7CoAo+wqAgc3RydWN0IHJsaXN0IGtleV9saXN0Owo+ wqAgcmxpc3RfY3JlYXRlKCZrZXlfbGlzdCk7Cj4tIHJsaXN0X2FkZF9lbnRyeSgma2V5X2xpc3Qs IGVwaGVtZXJfaW5kZXhfZGVmLCBsaW5rKTsKPisgcmxpc3RfYWRkX2VudHJ5KCZrZXlfbGlzdCwg aW5kZXhfZGVmLCBsaW5rKTsKPsKgCj4tIHN0cnVjdCBzcGFjZV9kZWYgKmVwaGVtZXJfc3BhY2Vf ZGVmID0KPi0gc3BhY2VfZGVmX25ld19lcGhlbWVyYWwoZmllbGRfY291bnQsIGZpZWxkcyk7Cj4t IGlmIChlcGhlbWVyX3NwYWNlX2RlZiA9PSBOVUxMKSB7Cj4tIGluZGV4X2RlZl9kZWxldGUoZXBo ZW1lcl9pbmRleF9kZWYpOwo+KyBzdHJ1Y3Qgc3BhY2VfZGVmICpzcGFjZV9kZWYgPSBzcGFjZV9k ZWZfbmV3X2VwaGVtZXJhbChmaWVsZF9jb3VudCwKPisgZmllbGRzKTsKPisgaWYgKHNwYWNlX2Rl ZiA9PSBOVUxMKSB7Cj4rIGluZGV4X2RlZl9kZWxldGUoaW5kZXhfZGVmKTsKPsKgIHJldHVybiBO VUxMOwo+wqAgfQo+wqAKPi0gc3RydWN0IHNwYWNlICplcGhlbWVyX25ld19zcGFjZSA9IHNwYWNl X25ld19lcGhlbWVyYWwoZXBoZW1lcl9zcGFjZV9kZWYsCj4tICZrZXlfbGlzdCk7Cj4tIGluZGV4 X2RlZl9kZWxldGUoZXBoZW1lcl9pbmRleF9kZWYpOwo+LSBzcGFjZV9kZWZfZGVsZXRlKGVwaGVt ZXJfc3BhY2VfZGVmKTsKPisgc3RydWN0IHNwYWNlICpzcGFjZSA9IHNwYWNlX25ld19lcGhlbWVy YWwoc3BhY2VfZGVmLCAma2V5X2xpc3QpOwo+KyBpbmRleF9kZWZfZGVsZXRlKGluZGV4X2RlZik7 Cj4rIHNwYWNlX2RlZl9kZWxldGUoc3BhY2VfZGVmKTsKPisgcmVnaW9uX3RydW5jYXRlKHJlZ2lv biwgc3ZwKTsKPsKgCj4tIHJldHVybiBlcGhlbWVyX25ld19zcGFjZTsKPisgcmV0dXJuIHNwYWNl Owo+wqB9Cj7CoAo+wqBpbnQgdGFyYW50b29sc3FsRXBoZW1lcmFsSW5zZXJ0KHN0cnVjdCBzcGFj ZSAqc3BhY2UsIGNvbnN0IGNoYXIgKnR1cGxlLAo+ZGlmZiAtLWdpdCBhL3NyYy9ib3gvc3FsL2Rl bGV0ZS5jIGIvc3JjL2JveC9zcWwvZGVsZXRlLmMKPmluZGV4IDUyMjZkZDZlYS4uYjgyYTY4NzRl IDEwMDY0NAo+LS0tIGEvc3JjL2JveC9zcWwvZGVsZXRlLmMKPisrKyBiL3NyYy9ib3gvc3FsL2Rl bGV0ZS5jCj5AQCAtMjI0LDEyICsyMjQsMTMgQEAgc3FsX3RhYmxlX2RlbGV0ZV9mcm9tKHN0cnVj dCBQYXJzZSAqcGFyc2UsIHN0cnVjdCBTcmNMaXN0ICp0YWJfbGlzdCwKPsKgICogaXMgaGVsZCBp biBlcGhlbWVyYWwgdGFibGUsIHRoZXJlIGlzIG5vIFBLIGZvcgo+wqAgKiBpdCwgc28gY29sdW1u cyBzaG91bGQgYmUgbG9hZGVkIG1hbnVhbGx5Lgo+wqAgKi8KPi0gc3RydWN0IHNxbF9rZXlfaW5m byAqcGtfaW5mbyA9IE5VTEw7Cj7CoCBpbnQgcmVnX2VwaCA9ICsrcGFyc2UtPm5NZW07Cj7CoCBp bnQgcmVnX3BrID0gcGFyc2UtPm5NZW0gKyAxOwo+LSBpbnQgcGtfbGVuOwo+KyBpbnQgcGtfbGVu ID0gaXNfdmlldyA/IHNwYWNlLT5kZWYtPmZpZWxkX2NvdW50ICsgMSA6Cj4rIHNwYWNlLT5pbmRl eFswXS0+ZGVmLT5rZXlfZGVmLT5wYXJ0X2NvdW50Owo+wqAgaW50IGVwaF9jdXJzb3IgPSBwYXJz ZS0+blRhYisrOwo+wqAgaW50IGFkZHJfZXBoX29wZW4gPSBzcWxWZGJlQ3VycmVudEFkZHIodik7 Cj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbzsKPsKgIGlmIChpc192aWV3KSB7Cj7CoCAv Kgo+wqAgKiBBdCB0aGlzIHN0YWdlIFNFTEVDVCBpcyBhbHJlYWR5IG1hdGVyaWFsaXplZAo+QEAg LTI0OSwyMiArMjUwLDIwIEBAIHNxbF90YWJsZV9kZWxldGVfZnJvbShzdHJ1Y3QgUGFyc2UgKnBh cnNlLCBzdHJ1Y3QgU3JjTGlzdCAqdGFiX2xpc3QsCj7CoCAqIGFjY291bnQgdGhhdCBpZCBmaWVs ZCBhcyB3ZWxsLiBUaGF0J3Mgd2h5IHBrX2xlbgo+wqAgKiBoYXMgb25lIGZpZWxkIG1vcmUgdGhh biB2aWV3IGZvcm1hdC4KPsKgICovCj4tIHBrX2xlbiA9IHNwYWNlLT5kZWYtPmZpZWxkX2NvdW50 ICsgMTsKPi0gcGFyc2UtPm5NZW0gKz0gcGtfbGVuOwo+LSBzcWxWZGJlQWRkT3AyKHYsIE9QX09w ZW5URXBoZW1lcmFsLCByZWdfZXBoLAo+LSBwa19sZW4pOwo+KyBpbmZvID0gc3FsX3NwYWNlX2lu Zm9fbmV3X2Zyb21fc3BhY2VfZGVmKHNwYWNlLT5kZWYpOwo+wqAgfSBlbHNlIHsKPsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXNzZXJ0KHNwYWNlLT5p bmRleF9jb3VudCA+IDApOwo+LSBwa19pbmZvID0gc3FsX2tleV9pbmZvX25ld19mcm9tX2tleV9k ZWYoZGIsCj4tIHNwYWNlLT5pbmRleFswXS0+ZGVmLT5rZXlfZGVmKTsKPi0gaWYgKHBrX2luZm8g PT0gTlVMTCkKPi0gZ290byBkZWxldGVfZnJvbV9jbGVhbnVwOwo+LSBwa19sZW4gPSBwa19pbmZv LT5wYXJ0X2NvdW50Owo+LSBwYXJzZS0+bk1lbSArPSBwa19sZW47Cj4tIHNxbFZkYmVBZGRPcDQo diwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19lcGgsCj4tIHBrX2xlbiwgMCwKPi0gKGNoYXIgKilw a19pbmZvLCBQNF9LRVlJTkZPKTsKPisgc3RydWN0IGluZGV4X2RlZiAqaW5kZXhfZGVmID0gc3Bh Y2UtPmluZGV4WzBdLT5kZWY7Cj4rIGluZm8gPSBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRl eF9kZWYoaW5kZXhfZGVmLAo+KyBmYWxzZSk7Cj7CoCB9Cj4rIGlmIChpbmZvID09IE5VTEwpIHsK PisgcGFyc2UtPmlzX2Fib3J0ZWQgPSB0cnVlOwo+KyBnb3RvIGRlbGV0ZV9mcm9tX2NsZWFudXA7 Cj4rIH0KPisgcGFyc2UtPm5NZW0gKz0gcGtfbGVuOwo+KyBzcWxWZGJlQWRkT3A0KHYsIE9QX09w ZW5URXBoZW1lcmFsLCByZWdfZXBoLCAwLCAwLCAoY2hhciAqKWluZm8sCj4rIFA0X0RZTkFNSUMp Owo+wqAKPsKgIC8qIENvbnN0cnVjdCBhIHF1ZXJ5IHRvIGZpbmQgdGhlIHByaW1hcnkga2V5IGZv cgo+wqAgKiBldmVyeSByb3cgdG8gYmUgZGVsZXRlZCwgYmFzZWQgb24gdGhlIFdIRVJFCj5AQCAt Mjk1LDggKzI5NCw5IEBAIHNxbF90YWJsZV9kZWxldGVfZnJvbShzdHJ1Y3QgUGFyc2UgKnBhcnNl LCBzdHJ1Y3QgU3JjTGlzdCAqdGFiX2xpc3QsCj7CoAo+wqAgLyogRXh0cmFjdCB0aGUgcHJpbWFy eSBrZXkgZm9yIHRoZSBjdXJyZW50IHJvdyAqLwo+wqAgaWYgKCFpc192aWV3KSB7Cj4tIHN0cnVj dCBrZXlfcGFydF9kZWYgKnBhcnQgPSBwa19pbmZvLT5wYXJ0czsKPi0gZm9yIChpbnQgaSA9IDA7 IGkgPCBwa19sZW47IGkrKywgcGFydCsrKSB7Cj4rIHN0cnVjdCBrZXlfZGVmICpkZWYgPSBzcGFj ZS0+aW5kZXhbMF0tPmRlZi0+a2V5X2RlZjsKPisgZm9yIChpbnQgaSA9IDA7IGkgPCBwa19sZW47 IGkrKykgewo+KyBzdHJ1Y3Qga2V5X3BhcnQgKnBhcnQgPSAmZGVmLT5wYXJ0c1tpXTsKPsKgIHNx bFZkYmVBZGRPcDModiwgT1BfQ29sdW1uLCB0YWJfY3Vyc29yLAo+wqAgcGFydC0+ZmllbGRubywg cmVnX3BrICsgaSk7Cj7CoCB9Cj5AQCAtMzczLDcgKzM3Myw2IEBAIHNxbF90YWJsZV9kZWxldGVf ZnJvbShzdHJ1Y3QgUGFyc2UgKnBhcnNlLCBzdHJ1Y3QgU3JjTGlzdCAqdGFiX2xpc3QsCj7CoCBp ZiAob25lX3Bhc3MgIT0gT05FUEFTU19PRkYpIHsKPsKgIC8qIE9QX0ZvdW5kIHdpbGwgdXNlIGFu IHVucGFja2VkIGtleS4gKi8KPsKgIGFzc2VydChrZXlfbGVuID09IHBrX2xlbik7Cj4tIGFzc2Vy dChwa19pbmZvICE9IE5VTEwgfHwgc3BhY2UtPmRlZi0+b3B0cy5pc192aWV3KTsKPsKgIHNxbFZk YmVBZGRPcDRJbnQodiwgT1BfTm90Rm91bmQsIHRhYl9jdXJzb3IsCj7CoCBhZGRyX2J5cGFzcywg cmVnX2tleSwga2V5X2xlbik7Cj7CoAo+ZGlmZiAtLWdpdCBhL3NyYy9ib3gvc3FsL2V4cHIuYyBi L3NyYy9ib3gvc3FsL2V4cHIuYwo+aW5kZXggNmY0MDE4M2FjLi44OTAyYzY0OGYgMTAwNjQ0Cj4t LS0gYS9zcmMvYm94L3NxbC9leHByLmMKPisrKyBiL3NyYy9ib3gvc3FsL2V4cHIuYwo+QEAgLTI3 NDAsNyArMjc0MCw2IEBAIHNxbENvZGVTdWJzZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNp bmcgY29udGV4dCAqLwo+wqAKPsKgIHN3aXRjaCAocEV4cHItPm9wKSB7Cj7CoCBjYXNlIFRLX0lO OnsKPi0gaW50IGFkZHI7IC8qIEFkZHJlc3Mgb2YgT1BfT3BlbkVwaGVtZXJhbCBpbnN0cnVjdGlv biAqLwo+wqAgRXhwciAqcExlZnQgPSBwRXhwci0+cExlZnQ7IC8qIHRoZSBMSFMgb2YgdGhlIElO IG9wZXJhdG9yICovCj7CoCBpbnQgblZhbDsgLyogU2l6ZSBvZiB2ZWN0b3IgcExlZnQgKi8KPsKg Cj5AQCAtMjc2MSwxMyArMjc2MCwxNCBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICogcFBhcnNl LCAvKiBQYXJzaW5nIGNvbnRleHQgKi8KPsKgICovCj7CoCBwRXhwci0+aVRhYmxlID0gcFBhcnNl LT5uVGFiKys7Cj7CoCBpbnQgcmVnX2VwaCA9ICsrcFBhcnNlLT5uTWVtOwo+LSBhZGRyID0gc3Fs VmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCwKPi0gcmVnX2VwaCwgblZhbCk7Cj4rIHN0 cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9Cj4rIHNxbF9zcGFjZV9pbmZvX25ldyhuVmFsLCAw KTsKPisgaWYgKGluZm8gPT0gTlVMTCkKPisgcmV0dXJuIDA7Cj4rIHNxbFZkYmVBZGRPcDQodiwg T1BfT3BlblRFcGhlbWVyYWwsIHJlZ19lcGgsIDAsIDAsCj4rIChjaGFyICopaW5mbywgUDRfRFlO QU1JQyk7Cj7CoCBzcWxWZGJlQWRkT3AzKHYsIE9QX0l0ZXJhdG9yT3BlbiwgcEV4cHItPmlUYWJs ZSwgMCwKPsKgIHJlZ19lcGgpOwo+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9IHNx bF9rZXlfaW5mb19uZXcocFBhcnNlLT5kYiwgblZhbCk7Cj4tIGlmIChrZXlfaW5mbyA9PSBOVUxM KQo+LSByZXR1cm4gMDsKPsKgCj7CoCBpZiAoRXhwckhhc1Byb3BlcnR5KHBFeHByLCBFUF94SXNT ZWxlY3QpKSB7Cj7CoCAvKiBDYXNlIDE6IGV4cHIgSU4gKFNFTEVDVCAuLi4pCj5AQCAtMjc5Nyw3 ICsyNzk3LDYgQEAgc3FsQ29kZVN1YnNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2luZyBj b250ZXh0ICovCj7CoCAocFBhcnNlLCBwU2VsZWN0LCAmZGVzdCkpIHsKPsKgIHNxbERiRnJlZShw UGFyc2UtPmRiLAo+wqAgZGVzdC5kZXN0X3R5cGUpOwo+LSBzcWxfa2V5X2luZm9fdW5yZWYoa2V5 X2luZm8pOwo+wqAgcmV0dXJuIDA7Cj7CoCB9Cj7CoCBzcWxEYkZyZWUocFBhcnNlLT5kYiwKPkBA IC0yODA5LDcgKzI4MDgsNyBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICogcFBhcnNlLCAvKiBQ YXJzaW5nIGNvbnRleHQgKi8KPsKgIHNxbFZlY3RvckZpZWxkU3ViZXhwcgo+wqAgKHBMZWZ0LCBp KTsKPsKgIGlmIChzcWxfYmluYXJ5X2NvbXBhcmVfY29sbF9zZXEocFBhcnNlLCBwLCBwRUxpc3Qt PmFbaV0ucEV4cHIsCj4tICZrZXlfaW5mby0+cGFydHNbaV0uY29sbF9pZCkgIT0gMCkKPisgJmlu Zm8tPmNvbGxfaWRzW2ldKSAhPSAwKQo+wqAgcmV0dXJuIDA7Cj7CoCB9Cj7CoCB9Cj5AQCAtMjgy OSw3ICsyODI4LDcgQEAgc3FsQ29kZVN1YnNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2lu ZyBjb250ZXh0ICovCj7CoCBib29sIHVudXNlZDsKPsKgIHN0cnVjdCBjb2xsICp1bnVzZWRfY29s bDsKPsKgIGlmIChzcWxfZXhwcl9jb2xsKHBQYXJzZSwgcEV4cHItPnBMZWZ0LCAmdW51c2VkLAo+ LSAma2V5X2luZm8tPnBhcnRzWzBdLmNvbGxfaWQsCj4rICZpbmZvLT5jb2xsX2lkc1swXSwKPsKg ICZ1bnVzZWRfY29sbCkgIT0gMCkKPsKgIHJldHVybiAwOwo+wqAKPkBAIC0yODYxLDggKzI4NjAs NiBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICogcFBhcnNlLCAvKiBQYXJzaW5nIGNvbnRleHQg Ki8KPsKgIHNxbFJlbGVhc2VUZW1wUmVnKHBQYXJzZSwgcjEpOwo+wqAgc3FsUmVsZWFzZVRlbXBS ZWcocFBhcnNlLCByMik7Cj7CoCB9Cj4tIHNxbFZkYmVDaGFuZ2VQNCh2LCBhZGRyLCAodm9pZCAq KWtleV9pbmZvLAo+LSBQNF9LRVlJTkZPKTsKPsKgIGJyZWFrOwo+wqAgfQo+wqAKPmRpZmYgLS1n aXQgYS9zcmMvYm94L3NxbC9pbnNlcnQuYyBiL3NyYy9ib3gvc3FsL2luc2VydC5jCj5pbmRleCAy MWI0ZjI0MDcuLjM0MWMyMDJhMiAxMDA2NDQKPi0tLSBhL3NyYy9ib3gvc3FsL2luc2VydC5jCj4r KysgYi9zcmMvYm94L3NxbC9pbnNlcnQuYwo+QEAgLTYwLDYgKzYwLDI3IEBAIHNxbF9lbWl0X3Rh YmxlX3R5cGVzKHN0cnVjdCBWZGJlICp2LCBzdHJ1Y3Qgc3BhY2VfZGVmICpkZWYsIGludCByZWcp Cj7CoCAoY2hhciAqKWNvbGxzX3R5cGUsIFA0X0RZTkFNSUMpOwo+wqB9Cj7CoAo+K3N0YXRpYyBz dHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKgo+K3NxbF9zcGFjZV9pbmZvX25ld19mcm9tX2lkX2xpc3Qo Y29uc3Qgc3RydWN0IHNwYWNlX2RlZiAqZGVmLCBpbnQgbGVuLAo+KyBjb25zdCBzdHJ1Y3QgSWRM aXN0ICpsaXN0KQo+K3sKPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsX3NwYWNl X2luZm9fbmV3KGxlbiArIDEsIDEpOwo+KyBpZiAoaW5mbyA9PSBOVUxMKQo+KyByZXR1cm4gTlVM TDsKPisgYXNzZXJ0KGxlbiA+IDAgJiYgbGVuIDw9IChpbnQpZGVmLT5maWVsZF9jb3VudCk7Cj4r IHN0cnVjdCBmaWVsZF9kZWYgKmZpZWxkcyA9IGRlZi0+ZmllbGRzOwo+KyBmb3IgKGludCBpID0g MDsgaSA8IGxlbjsgKytpKSB7Cj4rIGludCBqID0gbGlzdCA9PSBOVUxMID8gaSA6IGxpc3QtPmFb aV0uaWR4Owo+KyBpbmZvLT50eXBlc1tpXSA9IGZpZWxkc1tqXS50eXBlOwo+KyBpbmZvLT5jb2xs X2lkc1tpXSA9IGZpZWxkc1tqXS5jb2xsX2lkOwo+KyB9Cj4rIC8qIEFkZCBvbmUgbW9yZSBmaWVs ZCBmb3Igcm93aWQuICovCj4rIGluZm8tPnR5cGVzW2xlbl0gPSBGSUVMRF9UWVBFX0lOVEVHRVI7 Cj4rIC8qIFNldCByb3dpZCBhcyB0aGUgb25seSBwYXJ0IG9mIHByaW1hcnkgaW5kZXguICovCj4r IGluZm8tPnBhcnRzWzBdID0gbGVuOwo+KyByZXR1cm4gaW5mbzsKPit9Cj4rCj7CoC8qKgo+wqDC oCogSW4gU1FMIHRhYmxlIGNhbiBiZSBjcmVhdGVkIHdpdGggQVVUT0lOQ1JFTUVOVC4KPsKgwqAq IEluIFRhcmFudG9vbCBpdCBjYW4gYmUgZGV0ZWN0ZWQgYXMgcHJpbWFyeSBrZXkgd2hpY2ggY29u c2lzdHMKPkBAIC00NDIsMzQgKzQ2MywzMCBAQCBzcWxJbnNlcnQoUGFyc2UgKiBwUGFyc2UsIC8q IFBhcnNlciBjb250ZXh0ICovCj7CoCByZWdfZXBoID0gKytwUGFyc2UtPm5NZW07Cj7CoCByZWdS ZWMgPSBzcWxHZXRUZW1wUmVnKHBQYXJzZSk7Cj7CoCByZWdDb3B5ID0gc3FsR2V0VGVtcFJhbmdl KHBQYXJzZSwgbkNvbHVtbiArIDEpOwo+LSBzcWxWZGJlQWRkT3AyKHYsIE9QX09wZW5URXBoZW1l cmFsLCByZWdfZXBoLAo+LSBuQ29sdW1uICsgMSk7Cj7CoCAvKgo+LSAqIFRoaXMga2V5X2luZm8g aXMgdXNlZCB0byBzaG93IHRoYXQKPi0gKiByb3dpZCBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcnQg b2YgUEsgaW4KPi0gKiBjYXNlIHdlIHVzZWQgQVVUT0lOQ1JFTUVOVCBmZWF0dXJlLgo+LSAqIFRo aXMgd2F5IHdlIHdpbGwgc2F2ZSBpbml0aWFsIG9yZGVyIG9mCj4tICogdGhlIGluc2VydGVkIHZh bHVlcy4gVGhlIG9yZGVyIGlzCj4tICogaW1wb3J0YW50IGlmIHdlIHVzZSB0aGUgQVVUT0lOQ1JF TUVOVAo+LSAqIGZlYXR1cmUsIHNpbmNlIGNoYW5naW5nIHRoZSBvcmRlciBjYW4KPi0gKiBjaGFu Z2UgdGhlIG51bWJlciBpbnNlcnRlZCBpbnN0ZWFkIG9mCj4tICogTlVMTC4KPisgKiBPcmRlciBv ZiBpbnNlcnRlZCB2YWx1ZXMgaXMgaW1wb3J0YW50IHNpbmNlIGl0IGlzCj4rICogcG9zc2libGUs IHRoYXQgTlVMTCB3aWxsIGJlIGluc2VydGVkIGluIGZpZWxkIHdpdGgKPisgKiBBVVRPSU5DUkVN RU5ULiBTbywgdGhlIGZpcnN0IHBhcnQgb2Yga2V5IHNob3VsZCBiZQo+KyAqIHJvd2lkLiBTaW5j ZSBlYWNoIHJvd2lkIGlzIHVuaXF1ZSwgd2UgZG8gbm90IG5lZWQgYW55Cj4rICogb3RoZXIgcGFy dHMuCj7CoCAqLwo+LSBpZiAoc3BhY2UtPnNlcXVlbmNlICE9IE5VTEwpIHsKPi0gc3RydWN0IHNx bF9rZXlfaW5mbyAqa2V5X2luZm8gPQo+LSBzcWxfa2V5X2luZm9fbmV3KHBQYXJzZS0+ZGIsCj4t IG5Db2x1bW4gKyAxKTsKPi0ga2V5X2luZm8tPnBhcnRzW25Db2x1bW5dLnR5cGUgPQo+LSBGSUVM RF9UWVBFX1VOU0lHTkVEOwo+LSBrZXlfaW5mby0+aXNfcGtfcm93aWQgPSB0cnVlOwo+LSBzcWxW ZGJlQ2hhbmdlUDQodiwgLTEsICh2b2lkICopa2V5X2luZm8sCj4tIFA0X0tFWUlORk8pOwo+KyBz dHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPQo+KyBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9p ZF9saXN0KHNwYWNlX2RlZiwKPisgbkNvbHVtbiwKPisgcENvbHVtbik7Cj4rIGlmIChpbmZvID09 IE5VTEwpIHsKPisgcFBhcnNlLT5pc19hYm9ydGVkID0gdHJ1ZTsKPisgZ290byBpbnNlcnRfY2xl YW51cDsKPsKgIH0KPisgc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2Vw aCwgMCwgMCwKPisgKGNoYXIgKilpbmZvLCBQNF9EWU5BTUlDKTsKPsKgIGFkZHJMID0gc3FsVmRi ZUFkZE9wMSh2LCBPUF9ZaWVsZCwgZGVzdC5pU0RQYXJtKTsKPsKgIFZkYmVDb3ZlcmFnZSh2KTsK PsKgIHNxbFZkYmVBZGRPcDIodiwgT1BfTmV4dElkRXBoZW1lcmFsLCByZWdfZXBoLAo+wqAgcmVn Q29weSArIG5Db2x1bW4pOwo+wqAgc3FsVmRiZUFkZE9wMyh2LCBPUF9Db3B5LCByZWdGcm9tU2Vs ZWN0LCByZWdDb3B5LCBuQ29sdW1uLTEpOwo+KyBzcWxWZGJlQWRkT3A0KHYsIE9QX0FwcGx5VHlw ZSwgcmVnQ29weSwgbkNvbHVtbiArIDEsIDAsCj4rIChjaGFyICopaW5mby0+dHlwZXMsIFA0X1NU QVRJQyk7Cj7CoCBzcWxWZGJlQWRkT3AzKHYsIE9QX01ha2VSZWNvcmQsIHJlZ0NvcHksCj7CoCBu Q29sdW1uICsgMSwgcmVnUmVjKTsKPsKgIC8qIFNldCBmbGFnIHRvIHNhdmUgbWVtb3J5IGFsbG9j YXRpbmcgb25lIGJ5IG1hbGxvYy4gKi8KPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC9zZWxlY3Qu YyBiL3NyYy9ib3gvc3FsL3NlbGVjdC5jCj5pbmRleCA3Y2ZlNjBkYjYuLjAyMWUwZWJkNSAxMDA2 NDQKPi0tLSBhL3NyYy9ib3gvc3FsL3NlbGVjdC5jCj4rKysgYi9zcmMvYm94L3NxbC9zZWxlY3Qu Ywo+QEAgLTk5LDYgKzk5LDE3NyBAQCBzdHJ1Y3QgU29ydEN0eCB7Cj7CoCNkZWZpbmUgU09SVEZM QUdfVXNlU29ydGVyIDB4MDEgLyogVXNlIFNvcnRlck9wZW4gaW5zdGVhZCBvZiBPcGVuRXBoZW1l cmFsICovCj7CoCNkZWZpbmUgU09SVEZMQUdfREVTQyAweEYwCj7CoAo+K3N0YXRpYyBpbmxpbmUg dWludDMyX3QKPittdWx0aV9zZWxlY3RfY29sbF9zZXEoc3RydWN0IFBhcnNlICpwYXJzZXIsIHN0 cnVjdCBTZWxlY3QgKnAsIGludCBuKTsKPisKPitzdGF0aWMgc3RydWN0IHNxbF9zcGFjZV9pbmZv ICoKPitzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9leHByX2xpc3Qoc3RydWN0IFBhcnNlICpwYXJz ZXIsIHN0cnVjdCBFeHByTGlzdCAqbGlzdCwKPisgYm9vbCBoYXNfcm93aWQpCj4rewo+KyBpbnQg biA9IGxpc3QtPm5FeHByOwo+KyBpZiAoaGFzX3Jvd2lkKQo+KyArK247Cj4rIHN0cnVjdCBzcWxf c3BhY2VfaW5mbyAqaW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ldyhuLCAwKTsKPisgaWYgKGluZm8g PT0gTlVMTCkKPisgcmV0dXJuIE5VTEw7Cj4rIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC0+bkV4 cHI7ICsraSkgewo+KyBib29sIGI7Cj4rIHN0cnVjdCBjb2xsICpjb2xsOwo+KyBzdHJ1Y3QgRXhw ciAqZXhwciA9IGxpc3QtPmFbaV0ucEV4cHI7Cj4rIGVudW0gZmllbGRfdHlwZSB0eXBlID0gc3Fs X2V4cHJfdHlwZShleHByKTsKPisgLyoKPisgKiBUeXBlIEFOWSBjb3VsZCBtZWFuIHRoYXQgZmll bGQgd2FzIHVucmVzb2x2ZWQuIFdlIGhhdmUgbm8gd2F5Cj4rICogYnV0IHRvIHNldCBpdCBhcyBT Q0FMQVIsIGhvd2V2ZXIgdGhpcyBjb3VsZCBsZWFkIHRvCj4rICogdW5leHBlY3RlZCBjaGFuZ2Ug b2YgdHlwZS4KPisgKi8KPisgaWYgKHR5cGUgPT0gRklFTERfVFlQRV9BTlkpCj4rIHR5cGUgPSBG SUVMRF9UWVBFX1NDQUxBUjsKPisgdWludDMyX3QgY29sbF9pZDsKPisgaWYgKHNxbF9leHByX2Nv bGwocGFyc2VyLCBleHByLCAmYiwgJmNvbGxfaWQsICZjb2xsKSAhPSAwKQo+KyByZXR1cm4gTlVM TDsKPisgaW5mby0+dHlwZXNbaV0gPSB0eXBlOwo+KyBpbmZvLT5jb2xsX2lkc1tpXSA9IGNvbGxf aWQ7Cj4rIH0KPisgaWYgKGhhc19yb3dpZCkKPisgaW5mby0+dHlwZXNbbGlzdC0+bkV4cHJdID0g RklFTERfVFlQRV9JTlRFR0VSOwo+KyByZXR1cm4gaW5mbzsKPit9Cj4rCj4rc3RhdGljIHN0cnVj dCBzcWxfc3BhY2VfaW5mbyAqCj4rc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fb3JkZXJfYnkoc3Ry dWN0IFBhcnNlICpwYXJzZXIsIHN0cnVjdCBTZWxlY3QgKnNlbGVjdCwKPisgc3RydWN0IEV4cHJM aXN0ICpvcmRlcl9ieSkKPit7Cj4rIGludCBuID0gb3JkZXJfYnktPm5FeHByICsgMjsKPisgc3Ry dWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsX3NwYWNlX2luZm9fbmV3KG4sIDApOwo+KyBp ZiAoaW5mbyA9PSBOVUxMKQo+KyByZXR1cm4gTlVMTDsKPisgZm9yIChpbnQgaSA9IDA7IGkgPCBv cmRlcl9ieS0+bkV4cHI7ICsraSkgewo+KyBzdHJ1Y3QgRXhwciAqZXhwciA9IG9yZGVyX2J5LT5h W2ldLnBFeHByOwo+KyBlbnVtIGZpZWxkX3R5cGUgdHlwZSA9IHNxbF9leHByX3R5cGUoZXhwcik7 Cj4rIC8qCj4rICogVHlwZSBBTlkgY291bGQgbWVhbiB0aGF0IGZpZWxkIHdhcyB1bnJlc29sdmVk LiBXZSBoYXZlIG5vIHdheQo+KyAqIGJ1dCB0byBzZXQgaXQgYXMgU0NBTEFSLCBob3dldmVyIHRo aXMgY291bGQgbGVhZCB0bwo+KyAqIHVuZXhwZWN0ZWQgY2hhbmdlIG9mIHR5cGUuCj4rICovCj4r IGlmICh0eXBlID09IEZJRUxEX1RZUEVfQU5ZKQo+KyB0eXBlID0gRklFTERfVFlQRV9TQ0FMQVI7 Cj4rIGluZm8tPnR5cGVzW2ldID0gdHlwZTsKPisgdWludDMyX3QgKmlkID0gJmluZm8tPmNvbGxf aWRzW2ldOwo+KyBpZiAoKGV4cHItPmZsYWdzICYgRVBfQ29sbGF0ZSkgIT0gMCkgewo+KyBib29s IGI7Cj4rIHN0cnVjdCBjb2xsICpjb2xsOwo+KyBpZiAoc3FsX2V4cHJfY29sbChwYXJzZXIsIGV4 cHIsICZiLCBpZCwgJmNvbGwpICE9IDApCj4rIHJldHVybiBOVUxMOwo+KyBjb250aW51ZTsKPisg fQo+KyB1aW50MzJfdCBmaWVsZG5vID0gb3JkZXJfYnktPmFbaV0udS54LmlPcmRlckJ5Q29sIC0g MTsKPisgaW5mby0+Y29sbF9pZHNbaV0gPSBtdWx0aV9zZWxlY3RfY29sbF9zZXEocGFyc2VyLCBz ZWxlY3QsCj4rIGZpZWxkbm8pOwo+KyBpZiAoaW5mby0+Y29sbF9pZHNbaV0gIT0gQ09MTF9OT05F KSB7Cj4rIGNvbnN0IGNoYXIgKm5hbWUgPSBjb2xsX2J5X2lkKGluZm8tPmNvbGxfaWRzW2ldKS0+ bmFtZTsKPisgb3JkZXJfYnktPmFbaV0ucEV4cHIgPQo+KyBzcWxFeHByQWRkQ29sbGF0ZVN0cmlu ZyhwYXJzZXIsIGV4cHIsIG5hbWUpOwo+KyB9Cj4rIH0KPisgaW5mby0+dHlwZXNbb3JkZXJfYnkt Pm5FeHByXSA9IEZJRUxEX1RZUEVfSU5URUdFUjsKPisgaW5mby0+dHlwZXNbb3JkZXJfYnktPm5F eHByICsgMV0gPSBGSUVMRF9UWVBFX1ZBUkJJTkFSWTsKPisgcmV0dXJuIGluZm87Cj4rfQo+Kwo+ K3N0YXRpYyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKgo+K3NxbF9zcGFjZV9pbmZvX25ld19mb3Jf c29ydGluZyhzdHJ1Y3QgUGFyc2UgKnBhcnNlciwgc3RydWN0IEV4cHJMaXN0ICpvcmRlcl9ieSwK Pisgc3RydWN0IEV4cHJMaXN0ICpsaXN0LCBpbnQgc3RhcnQsIGJvb2wgaGFzX3Jvd2lkKQo+K3sK PisgLyoKPisgKiBJbmRleCBjb25zaXN0IG9mIGZpZWxkcyB0aGF0IHdlcmUgbm90IGluY2x1ZGVk IGludG8gaW5kZXggcGx1cyByb3dpZCwKPisgKiBpcyBoYXNfcm93aWQgaXMgVFJVRS4KPisgKi8K PisgdWludDMyX3QgcGFydF9jb3VudCA9IG9yZGVyX2J5LT5uRXhwciAtIHN0YXJ0Owo+KyBpZiAo aGFzX3Jvd2lkKQo+KyArK3BhcnRfY291bnQ7Cj4rIC8qCj4rICogTnVtYmVyIG9mIGZpZWxkcyBp cyBudW1iZXIgb2YgcGFydHMgaW4gaW5kZXggcGx1cyBudW1iZXIgb2YgZmllbGRzCj4rICogdGhh dCBpcyBub3QgYXBwZWFyIGluIE9SREVSIEJZLCBidXQgd2VyZSBpbiBTRUxFQ1QuCj4rICovCj4r IHVpbnQzMl90IGZpZWxkX2NvdW50ID0gcGFydF9jb3VudDsKPisgLyogSWYgaU9yZGVyQnlDb2wg IT0gMCB0aGFuIGZpZWxkcyBhcHBlYXIgaW4gT1JERVIgQlkuICovCj4rIGZvciAoaW50IGkgPSAw OyBpIDwgbGlzdC0+bkV4cHI7ICsraSkKPisgZmllbGRfY291bnQgKz0gbGlzdC0+YVtpXS51Lngu aU9yZGVyQnlDb2wgPT0gMCA/IDEgOiAwOwo+Kwo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmlu Zm8gPQo+KyBzcWxfc3BhY2VfaW5mb19uZXcoZmllbGRfY291bnQsIHBhcnRfY291bnQpOwo+KyBp ZiAoaW5mbyA9PSBOVUxMKQo+KyByZXR1cm4gTlVMTDsKPisgaW50IGs7Cj4rIGZvciAoayA9IDA7 IGsgPCBvcmRlcl9ieS0+bkV4cHIgLSBzdGFydDsgKytrKSB7Cj4rIGJvb2wgYjsKPisgc3RydWN0 IGNvbGwgKmNvbGw7Cj4rIHN0cnVjdCBFeHByICpleHByID0gb3JkZXJfYnktPmFbayArIHN0YXJ0 XS5wRXhwcjsKPisgZW51bSBmaWVsZF90eXBlIHR5cGUgPSBzcWxfZXhwcl90eXBlKGV4cHIpOwo+ KyAvKgo+KyAqIFR5cGUgQU5ZIGNvdWxkIG1lYW4gdGhhdCBmaWVsZCB3YXMgdW5yZXNvbHZlZC4g V2UgaGF2ZSBubyB3YXkKPisgKiBidXQgdG8gc2V0IGl0IGFzIFNDQUxBUiwgaG93ZXZlciB0aGlz IGNvdWxkIGxlYWQgdG8KPisgKiB1bmV4cGVjdGVkIGNoYW5nZSBvZiB0eXBlLgo+KyAqLwo+KyBp ZiAodHlwZSA9PSBGSUVMRF9UWVBFX0FOWSkKPisgdHlwZSA9IEZJRUxEX1RZUEVfU0NBTEFSOwo+ KyB1aW50MzJfdCBjb2xsX2lkOwo+KyBpZiAoc3FsX2V4cHJfY29sbChwYXJzZXIsIGV4cHIsICZi LCAmY29sbF9pZCwgJmNvbGwpICE9IDApCj4rIHJldHVybiBOVUxMOwo+KyBpbmZvLT50eXBlc1tr XSA9IHR5cGU7Cj4rIGluZm8tPmNvbGxfaWRzW2tdID0gY29sbF9pZDsKPisgaW5mby0+c29ydF9v cmRlcnNba10gPSBvcmRlcl9ieS0+YVtrICsgc3RhcnRdLnNvcnRfb3JkZXI7Cj4rIH0KPisgaWYg KGhhc19yb3dpZCkKPisgaW5mby0+dHlwZXNbaysrXSA9IEZJRUxEX1RZUEVfSU5URUdFUjsKPisg YXNzZXJ0KGsgPT0gKGludClwYXJ0X2NvdW50KTsKPisgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0 LT5uRXhwcjsgKytpKSB7Cj4rIGlmIChsaXN0LT5hW2ldLnUueC5pT3JkZXJCeUNvbCAhPSAwKQo+ KyBjb250aW51ZTsKPisgYm9vbCBiOwo+KyBzdHJ1Y3QgRXhwciAqZXhwciA9IGxpc3QtPmFbaV0u cEV4cHI7Cj4rIGVudW0gZmllbGRfdHlwZSB0eXBlID0gc3FsX2V4cHJfdHlwZShleHByKTsKPisg aWYgKHR5cGUgPT0gRklFTERfVFlQRV9BTlkpCj4rIHR5cGUgPSBGSUVMRF9UWVBFX1NDQUxBUjsK PisgdWludDMyX3QgaWQ7Cj4rIHN0cnVjdCBjb2xsICpjb2xsOwo+KyBpZiAoc3FsX2V4cHJfY29s bChwYXJzZXIsIGV4cHIsICZiLCAmaWQsICZjb2xsKSAhPSAwKQo+KyByZXR1cm4gTlVMTDsKPisg aW5mby0+dHlwZXNba10gPSB0eXBlOwo+KyBpbmZvLT5jb2xsX2lkc1trXSA9IGlkOwo+KyArK2s7 Cj4rIH0KPisgYXNzZXJ0KGsgPT0gKGludClmaWVsZF9jb3VudCk7Cj4rIHJldHVybiBpbmZvOwo+ K30KPisKPitzdGF0aWMgc3RydWN0IHNxbF9rZXlfaW5mbyAqCj4rc3FsX2tleV9pbmZvX25ld19m cm9tX3NwYWNlX2luZm8oY29uc3Qgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvKQo+K3sKPisg dWludDMyX3QgcGFydF9jb3VudCA9IGluZm8tPnBhcnRfY291bnQgLSAxOwo+KyBhc3NlcnQocGFy dF9jb3VudCA+IDApOwo+KyB1aW50MzJfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBzcWxfa2V5X2lu Zm8pICsKPisgcGFydF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qga2V5X3BhcnRfZGVmKTsKPisgc3Ry dWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8gPSBzcWxEYk1hbGxvY1Jhd05OKHNxbF9nZXQoKSwg c2l6ZSk7Cj4rIGlmIChrZXlfaW5mbyA9PSBOVUxMKQo+KyByZXR1cm4gTlVMTDsKPisga2V5X2lu Zm8tPmRiID0gc3FsX2dldCgpOwo+KyBrZXlfaW5mby0+a2V5X2RlZiA9IE5VTEw7Cj4rIGtleV9p bmZvLT5yZWZzID0gMTsKPisga2V5X2luZm8tPnBhcnRfY291bnQgPSBwYXJ0X2NvdW50Owo+KyBm b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcGFydF9jb3VudDsgKytpKSB7Cj4rIGtleV9pbmZvLT5w YXJ0c1tpXS5maWVsZG5vID0gaTsKPisga2V5X2luZm8tPnBhcnRzW2ldLm51bGxhYmxlX2FjdGlv biA9IE9OX0NPTkZMSUNUX0FDVElPTl9BQk9SVDsKPisga2V5X2luZm8tPnBhcnRzW2ldLmlzX251 bGxhYmxlID0gZmFsc2U7Cj4rIGtleV9pbmZvLT5wYXJ0c1tpXS5leGNsdWRlX251bGwgPSBmYWxz ZTsKPisga2V5X2luZm8tPnBhcnRzW2ldLnNvcnRfb3JkZXIgPSBpbmZvLT5zb3J0X29yZGVyc1tp XTsKPisga2V5X2luZm8tPnBhcnRzW2ldLnBhdGggPSBOVUxMOwo+KyBrZXlfaW5mby0+cGFydHNb aV0udHlwZSA9IGluZm8tPnR5cGVzW2ldOwo+KyBrZXlfaW5mby0+cGFydHNbaV0uY29sbF9pZCA9 IGluZm8tPmNvbGxfaWRzW2ldOwo+KyB9Cj4rIHJldHVybiBrZXlfaW5mbzsKPit9Cj4rCj7CoC8q Cj7CoMKgKiBEZWxldGUgYWxsIHRoZSBjb250ZW50IG9mIGEgU2VsZWN0IHN0cnVjdHVyZS4gRGVh bGxvY2F0ZSB0aGUgc3RydWN0dXJlCj7CoMKgKiBpdHNlbGYgb25seSBpZiBiRnJlZSBpcyB0cnVl Lgo+QEAgLTgxOSwxMyArOTkwLDMyIEBAIHB1c2hPbnRvU29ydGVyKFBhcnNlICogcFBhcnNlLCAv KiBQYXJzZXIgY29udGV4dCAqLwo+wqAgaWYgKHBQYXJzZS0+ZGItPm1hbGxvY0ZhaWxlZCkKPsKg IHJldHVybjsKPsKgIHBPcC0+cDIgPSBuS2V5ICsgbkRhdGE7Cj4tIHN0cnVjdCBzcWxfa2V5X2lu Zm8gKmtleV9pbmZvID0gcE9wLT5wNC5rZXlfaW5mbzsKPisgYXNzZXJ0KHBPcC0+b3Bjb2RlID09 IE9QX09wZW5URXBoZW1lcmFsIHx8Cj4rIHBPcC0+b3Bjb2RlID09IE9QX1NvcnRlck9wZW4pOwo+ KyBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9Cj4rIHBPcC0+b3Bjb2RlID09IE9QX1Nv cnRlck9wZW4gPyBwT3AtPnA0LmtleV9pbmZvIDoKPisgc3FsX2tleV9pbmZvX25ld19mcm9tX3Nw YWNlX2luZm8ocE9wLT5wNC5zcGFjZV9pbmZvKTsKPsKgIGZvciAodWludDMyX3QgaSA9IDA7IGkg PCBrZXlfaW5mby0+cGFydF9jb3VudDsgaSsrKQo+wqAga2V5X2luZm8tPnBhcnRzW2ldLnNvcnRf b3JkZXIgPSBTT1JUX09SREVSX0FTQzsKPsKgIHNxbFZkYmVDaGFuZ2VQNCh2LCAtMSwgKGNoYXIg KilrZXlfaW5mbywgUDRfS0VZSU5GTyk7Cj4tIHBPcC0+cDQua2V5X2luZm8gPSBzcWxfZXhwcl9s aXN0X3RvX2tleV9pbmZvKHBQYXJzZSwKPi0gcFNvcnQtPnBPcmRlckJ5LAo+LSBuT0JTYXQpOwo+ KyBpZiAocE9wLT5vcGNvZGUgPT0gT1BfU29ydGVyT3Blbikgewo+KyBwT3AtPnA0LmtleV9pbmZv ID0KPisgc3FsX2V4cHJfbGlzdF90b19rZXlfaW5mbyhwUGFyc2UsCj4rIHBTb3J0LT5wT3JkZXJC eSwKPisgbk9CU2F0KTsKPisgfSBlbHNlIHsKPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZv ID0KPisgc3FsX3NwYWNlX2luZm9fbmV3X2Zvcl9zb3J0aW5nKHBQYXJzZSwKPisgcFNvcnQtPnBP cmRlckJ5LAo+KyBwU2VsZWN0LT5wRUxpc3QsCj4rIG5PQlNhdCwgYlNlcSk7Cj4rIGlmIChpbmZv ID09IE5VTEwpIHsKPisgcFBhcnNlLT5pc19hYm9ydGVkID0gdHJ1ZTsKPisgcmV0dXJuOwo+KyB9 Cj4rIHNxbFZkYmVDaGFuZ2VQNCh2LCBwU29ydC0+YWRkclNvcnRJbmRleCwgKGNoYXIgKilpbmZv LAo+KyBQNF9EWU5BTUlDKTsKPisgfQo+wqAgYWRkckptcCA9IHNxbFZkYmVDdXJyZW50QWRkcih2 KTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSnVtcCwgYWRkckptcCArIDEsIDAsIGFkZHJKbXAg KyAxKTsKPsKgIFZkYmVDb3ZlcmFnZSh2KTsKPkBAIC0xMDQ0LDIxICsxMjM0LDMzIEBAIHNlbGVj dElubmVyTG9vcChQYXJzZSAqIHBQYXJzZSwgLyogVGhlIHBhcnNlciBjb250ZXh0ICovCj7CoCAq IHNwYWNlIGZvcm1hdC4KPsKgICovCj7CoCB1aW50MzJfdCBleGNlc3NfZmllbGRfY291bnQgPSAw Owo+KyBzdHJ1Y3QgVmRiZU9wICpvcCA9IHNxbFZkYmVHZXRPcCh2LAo+KyBwU29ydC0+YWRkclNv cnRJbmRleCk7Cj7CoCBmb3IgKGkgPSBwU29ydC0+bk9CU2F0OyBpIDwgcFNvcnQtPnBPcmRlckJ5 LT5uRXhwcjsKPsKgIGkrKykgewo+wqAgaW50IGogPSBwU29ydC0+cE9yZGVyQnktPmFbaV0udS54 LmlPcmRlckJ5Q29sOwo+LSBpZiAoaiA+IDApIHsKPi0gZXhjZXNzX2ZpZWxkX2NvdW50Kys7Cj4t IHBFTGlzdC0+YVtqIC0gMV0udS54LmlPcmRlckJ5Q29sID0KPi0gKHUxNikgKGkgKyAxIC0gcFNv cnQtPm5PQlNhdCk7Cj4rIGlmIChqID09IDApCj4rIGNvbnRpbnVlOwo+KyBhc3NlcnQoaiA+IDAp Owo+KyBleGNlc3NfZmllbGRfY291bnQrKzsKPisgcEVMaXN0LT5hW2ogLSAxXS51LnguaU9yZGVy QnlDb2wgPQo+KyAodWludDE2X3QpKGkgKyAxIC0gcFNvcnQtPm5PQlNhdCk7Cj4rIGlmIChvcC0+ b3Bjb2RlICE9IE9QX09wZW5URXBoZW1lcmFsKQo+KyBjb250aW51ZTsKPisgc3RydWN0IHNxbF9z cGFjZV9pbmZvICppbmZvID0gb3AtPnA0LnNwYWNlX2luZm87Cj4rIC0taW5mby0+ZmllbGRfY291 bnQ7Cj4rIGZvciAoaW50IGsgPSBqOyBrIDwgcEVMaXN0LT5uRXhwcjsgKytrKSB7Cj4rIGludCBu ID0gayArIHBTb3J0LT5wT3JkZXJCeS0+bkV4cHIgKyAxOwo+KyBpbmZvLT50eXBlc1tuIC0gMV0g PSBpbmZvLT50eXBlc1tuXTsKPisgaW5mby0+Y29sbF9pZHNbbiAtIDFdID0KPisgaW5mby0+Y29s bF9pZHNbbl07Cj7CoCB9Cj7CoCB9Cj4tIHN0cnVjdCBWZGJlT3AgKm9wZW5fZXBoX29wID0KPi0g c3FsVmRiZUdldE9wKHYsIHBTb3J0LT5hZGRyU29ydEluZGV4KTsKPi0gYXNzZXJ0KG9wZW5fZXBo X29wLT5wMiAtIGV4Y2Vzc19maWVsZF9jb3VudCA+IDApOwo+LSBzcWxWZGJlQ2hhbmdlUDIodiwg cFNvcnQtPmFkZHJTb3J0SW5kZXgsCj4tIG9wZW5fZXBoX29wLT5wMiAtCj4tIGV4Y2Vzc19maWVs ZF9jb3VudCk7Cj4rIGlmIChvcC0+b3Bjb2RlICE9IE9QX09wZW5URXBoZW1lcmFsKSB7Cj4rIGFz c2VydChvcC0+cDIgLSBleGNlc3NfZmllbGRfY291bnQgPiAwKTsKPisgc3FsVmRiZUNoYW5nZVAy KHYsIHBTb3J0LT5hZGRyU29ydEluZGV4LAo+KyBvcC0+cDIgLSBleGNlc3NfZmllbGRfY291bnQp Owo+KyB9Cj7CoCByZWdPcmlnID0gMDsKPsKgIGFzc2VydChlRGVzdCA9PSBTUlRfU2V0IHx8IGVE ZXN0ID09IFNSVF9NZW0KPsKgIHx8IGVEZXN0ID09IFNSVF9Db3JvdXRpbmUKPkBAIC0xNDE5LDcg KzE2MjEsNiBAQCBzcWxfa2V5X2luZm9fbmV3KHNxbCAqZGIsIHVpbnQzMl90IHBhcnRfY291bnQp Cj7CoCBrZXlfaW5mby0+a2V5X2RlZiA9IE5VTEw7Cj7CoCBrZXlfaW5mby0+cmVmcyA9IDE7Cj7C oCBrZXlfaW5mby0+cGFydF9jb3VudCA9IHBhcnRfY291bnQ7Cj4tIGtleV9pbmZvLT5pc19wa19y b3dpZCA9IGZhbHNlOwo+wqAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHBhcnRfY291bnQ7IGkr Kykgewo+wqAgc3RydWN0IGtleV9wYXJ0X2RlZiAqcGFydCA9ICZrZXlfaW5mby0+cGFydHNbaV07 Cj7CoCBwYXJ0LT5maWVsZG5vID0gaTsKPkBAIC0xNDM0LDI0ICsxNjM1LDYgQEAgc3FsX2tleV9p bmZvX25ldyhzcWwgKmRiLCB1aW50MzJfdCBwYXJ0X2NvdW50KQo+wqAgcmV0dXJuIGtleV9pbmZv Owo+wqB9Cj7CoAo+LXN0cnVjdCBzcWxfa2V5X2luZm8gKgo+LXNxbF9rZXlfaW5mb19uZXdfZnJv bV9rZXlfZGVmKHNxbCAqZGIsIGNvbnN0IHN0cnVjdCBrZXlfZGVmICprZXlfZGVmKQo+LXsKPi0g c3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8gPSBzcWxEYk1hbGxvY1Jhd05OKGRiLAo+LSBz cWxfa2V5X2luZm9fc2l6ZW9mKGtleV9kZWYtPnBhcnRfY291bnQpKTsKPi0gaWYgKGtleV9pbmZv ID09IE5VTEwpIHsKPi0gc3FsT29tRmF1bHQoZGIpOwo+LSByZXR1cm4gTlVMTDsKPi0gfQo+LSBr ZXlfaW5mby0+ZGIgPSBkYjsKPi0ga2V5X2luZm8tPmtleV9kZWYgPSBOVUxMOwo+LSBrZXlfaW5m by0+cmVmcyA9IDE7Cj4tIGtleV9pbmZvLT5wYXJ0X2NvdW50ID0ga2V5X2RlZi0+cGFydF9jb3Vu dDsKPi0ga2V5X2luZm8tPmlzX3BrX3Jvd2lkID0gZmFsc2U7Cj4tIGtleV9kZWZfZHVtcF9wYXJ0 cyhrZXlfZGVmLCBrZXlfaW5mby0+cGFydHMsIE5VTEwpOwo+LSByZXR1cm4ga2V5X2luZm87Cj4t fQo+LQo+wqBzdHJ1Y3Qgc3FsX2tleV9pbmZvICoKPsKgc3FsX2tleV9pbmZvX3JlZihzdHJ1Y3Qg c3FsX2tleV9pbmZvICprZXlfaW5mbykKPsKgewo+QEAgLTI0NTMsMjIgKzI2MzYsMjYgQEAgZ2Vu ZXJhdGVXaXRoUmVjdXJzaXZlUXVlcnkoUGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNpbmcgY29udGV4 dCAqLwo+wqAgLyogQWxsb2NhdGUgY3Vyc29ycyBmb3IgQ3VycmVudCwgUXVldWUsIGFuZCBEaXN0 aW5jdC4gKi8KPsKgIHJlZ0N1cnJlbnQgPSArK3BQYXJzZS0+bk1lbTsKPsKgIHNxbFZkYmVBZGRP cDModiwgT1BfT3BlblBzZXVkbywgaUN1cnJlbnQsIHJlZ0N1cnJlbnQsIG5Db2wpOwo+KyBzdHJ1 Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm87Cj7CoCBpZiAocE9yZGVyQnkpIHsKPi0gc3RydWN0IHNx bF9rZXlfaW5mbyAqa2V5X2luZm8gPQo+LSBzcWxfbXVsdGlzZWxlY3Rfb3JkZXJieV90b19rZXlf aW5mbyhwUGFyc2UsIHAsIDEpOwo+LSBzcWxWZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFs LCByZWdfcXVldWUsCj4tIHBPcmRlckJ5LT5uRXhwciArIDIsIDAsIChjaGFyICopa2V5X2luZm8s Cj4tIFA0X0tFWUlORk8pOwo+wqAgVmRiZUNvbW1lbnQoKHYsICJPcmRlcmJ5IHRhYmxlIikpOwo+ KyBpbmZvID0gc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fb3JkZXJfYnkocFBhcnNlLCBwLCBwT3Jk ZXJCeSk7Cj7CoCBkZXN0UXVldWUucE9yZGVyQnkgPSBwT3JkZXJCeTsKPsKgIH0gZWxzZSB7Cj4t IHNxbFZkYmVBZGRPcDIodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19xdWV1ZSwgbkNvbCArIDEp Owo+wqAgVmRiZUNvbW1lbnQoKHYsICJRdWV1ZSB0YWJsZSIpKTsKPisgaW5mbyA9IHNxbF9zcGFj ZV9pbmZvX25ld19mcm9tX2V4cHJfbGlzdChwUGFyc2UsIHAtPnBFTGlzdCwKPisgdHJ1ZSk7Cj4r IH0KPisgaWYgKGluZm8gPT0gTlVMTCkgewo+KyBwUGFyc2UtPmlzX2Fib3J0ZWQgPSB0cnVlOwo+ KyBnb3RvIGVuZF9vZl9yZWN1cnNpdmVfcXVlcnk7Cj7CoCB9Cj4rIHNxbFZkYmVBZGRPcDQodiwg T1BfT3BlblRFcGhlbWVyYWwsIHJlZ19xdWV1ZSwgMCwgMCwgKGNoYXIgKilpbmZvLAo+KyBQNF9E WU5BTUlDKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCBpUXVldWUsIDAs IHJlZ19xdWV1ZSk7Cj7CoCBpZiAoaURpc3RpbmN0KSB7Cj7CoCBwLT5hZGRyT3BlbkVwaG1bMF0g PQo+LSBzcWxWZGJlQWRkT3AyKHYsIE9QX09wZW5URXBoZW1lcmFsLCByZWdfZGlzdCwgMSk7Cj4r IHNxbFZkYmVBZGRPcDEodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19kaXN0KTsKPsKgIHNxbFZk YmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCBpRGlzdGluY3QsIDAsIHJlZ19kaXN0KTsKPsKg IHAtPnNlbEZsYWdzIHw9IFNGX1VzZXNFcGhlbWVyYWw7Cj7CoCBWZGJlQ29tbWVudCgodiwgIkRp c3RpbmN0IHRhYmxlIikpOwo+QEAgLTI2NzIsOCArMjg1OSwxNiBAQCBtdWx0aVNlbGVjdChQYXJz ZSAqIHBQYXJzZSwgLyogUGFyc2luZyBjb250ZXh0ICovCj7CoCAqLwo+wqAgaWYgKGRlc3QuZURl c3QgPT0gU1JUX0VwaGVtVGFiKSB7Cj7CoCBhc3NlcnQocC0+cEVMaXN0KTsKPi0gaW50IG5Db2xz ID0gcC0+cEVMaXN0LT5uRXhwcjsKPi0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJh bCwgZGVzdC5yZWdfZXBoLCBuQ29scyArIDEpOwo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmlu Zm8gPQo+KyBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9leHByX2xpc3QocFBhcnNlLCBwLT5wRUxp c3QsCj4rIHRydWUpOwo+KyBpZiAoaW5mbyA9PSBOVUxMKSB7Cj4rIHBQYXJzZS0+aXNfYWJvcnRl ZCA9IHRydWU7Cj4rIHJjID0gMTsKPisgZ290byBtdWx0aV9zZWxlY3RfZW5kOwo+KyB9Cj4rIHNx bFZkYmVBZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWwsIGRlc3QucmVnX2VwaCwgMCwgMCwKPisg KGNoYXIgKilpbmZvLCBQNF9EWU5BTUlDKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0 b3JPcGVuLCBkZXN0LmlTRFBhcm0sIDAsIGRlc3QucmVnX2VwaCk7Cj7CoCBWZGJlQ29tbWVudCgo diwgIkRlc3RpbmF0aW9uIHRlbXAiKSk7Cj7CoCBkZXN0LmVEZXN0ID0gU1JUX1RhYmxlOwo+QEAg LTI3ODksMTAgKzI5ODQsOSBAQCBtdWx0aVNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2lu ZyBjb250ZXh0ICovCj7CoCB1bmlvblRhYiA9IHBQYXJzZS0+blRhYisrOwo+wqAgcmVnX3VuaW9u ID0gKytwUGFyc2UtPm5NZW07Cj7CoCBhc3NlcnQocC0+cE9yZGVyQnkgPT0gMCk7Cj4tIGFkZHIg PQo+LSBzcWxWZGJlQWRkT3AyKHYsCj4tIE9QX09wZW5URXBoZW1lcmFsLAo+LSByZWdfdW5pb24s IDApOwo+KyBhZGRyID0gc3FsVmRiZUFkZE9wMSh2LAo+KyBPUF9PcGVuVEVwaGVtZXJhbCwKPisg cmVnX3VuaW9uKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCB1bmlvblRh YiwgMCwgcmVnX3VuaW9uKTsKPsKgIGFzc2VydChwLT5hZGRyT3BlbkVwaG1bMF0gPT0gLTEpOwo+ wqAgcC0+YWRkck9wZW5FcGhtWzBdID0gYWRkcjsKPkBAIC0yOTA1LDkgKzMwOTksOCBAQCBtdWx0 aVNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2luZyBjb250ZXh0ICovCj7CoCByZWdfZXBo MiA9ICsrcFBhcnNlLT5uTWVtOwo+wqAgYXNzZXJ0KHAtPnBPcmRlckJ5ID09IDApOwo+wqAKPi0g YWRkciA9Cj4tIHNxbFZkYmVBZGRPcDIodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19lcGgxLAo+ LSAwKTsKPisgYWRkciA9IHNxbFZkYmVBZGRPcDEodiwgT1BfT3BlblRFcGhlbWVyYWwsCj4rIHJl Z19lcGgxKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCB0YWIxLCAwLCBy ZWdfZXBoMSk7Cj7CoCBhc3NlcnQocC0+YWRkck9wZW5FcGhtWzBdID09IC0xKTsKPsKgIHAtPmFk ZHJPcGVuRXBobVswXSA9IGFkZHI7Cj5AQCAtMjkyNyw5ICszMTIwLDggQEAgbXVsdGlTZWxlY3Qo UGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNpbmcgY29udGV4dCAqLwo+wqAKPsKgIC8qIENvZGUgdGhl IGN1cnJlbnQgU0VMRUNUIGludG8gdGVtcG9yYXJ5IHRhYmxlICJ0YWIyIgo+wqAgKi8KPi0gYWRk ciA9Cj4tIHNxbFZkYmVBZGRPcDIodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19lcGgyLAo+LSAw KTsKPisgYWRkciA9IHNxbFZkYmVBZGRPcDEodiwgT1BfT3BlblRFcGhlbWVyYWwsCj4rIHJlZ19l cGgyKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCB0YWIyLCAwLCByZWdf ZXBoMik7Cj7CoCBhc3NlcnQocC0+YWRkck9wZW5FcGhtWzFdID09IC0xKTsKPsKgIHAtPmFkZHJP cGVuRXBobVsxXSA9IGFkZHI7Cj5AQCAtMzAwMSwxNCArMzE5MywxNCBAQCBtdWx0aVNlbGVjdChQ YXJzZSAqIHBQYXJzZSwgLyogUGFyc2luZyBjb250ZXh0ICovCj7CoCBpZiAocC0+c2VsRmxhZ3Mg JiBTRl9Vc2VzRXBoZW1lcmFsKSB7Cj7CoCBhc3NlcnQocC0+cE5leHQgPT0gTlVMTCk7Cj7CoCBp bnQgbkNvbCA9IHAtPnBFTGlzdC0+bkV4cHI7Cj4tIHN0cnVjdCBzcWxfa2V5X2luZm8gKmtleV9p bmZvID0gc3FsX2tleV9pbmZvX25ldyhkYiwgbkNvbCk7Cj4tIGlmIChrZXlfaW5mbyA9PSBOVUxM KQo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPSBzcWxfc3BhY2VfaW5mb19uZXcobkNv bCwgMCk7Cj4rIGlmIChpbmZvID09IE5VTEwpIHsKPisgcFBhcnNlLT5pc19hYm9ydGVkID0gdHJ1 ZTsKPsKgIGdvdG8gbXVsdGlfc2VsZWN0X2VuZDsKPi0gZm9yIChpbnQgaSA9IDA7IGkgPCBuQ29s OyBpKyspIHsKPi0ga2V5X2luZm8tPnBhcnRzW2ldLmNvbGxfaWQgPQo+LSBtdWx0aV9zZWxlY3Rf Y29sbF9zZXEocFBhcnNlLCBwLCBpKTsKPsKgIH0KPi0KPisgZm9yIChpbnQgaSA9IDA7IGkgPCBu Q29sOyArK2kpCj4rIGluZm8tPmNvbGxfaWRzW2ldID0gbXVsdGlfc2VsZWN0X2NvbGxfc2VxKHBQ YXJzZSwgcCwgaSk7Cj4rIGJvb2wgaXNfaW5mb191c2VkID0gZmFsc2U7Cj7CoCBmb3IgKHN0cnVj dCBTZWxlY3QgKnBMb29wID0gcDsgcExvb3A7IHBMb29wID0gcExvb3AtPnBQcmlvcikgewo+wqAg Zm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKPsKgIGludCBhZGRyID0gcExvb3AtPmFkZHJP cGVuRXBobVtpXTsKPkBAIC0zMDIwLDEzICszMjEyLDE1IEBAIG11bHRpU2VsZWN0KFBhcnNlICog cFBhcnNlLCAvKiBQYXJzaW5nIGNvbnRleHQgKi8KPsKgIGJyZWFrOwo+wqAgfQo+wqAgc3FsVmRi ZUNoYW5nZVAyKHYsIGFkZHIsIG5Db2wpOwo+LSBzcWxWZGJlQ2hhbmdlUDQodiwgYWRkciwKPi0g KGNoYXIgKilzcWxfa2V5X2luZm9fcmVmKGtleV9pbmZvKSwKPi0gUDRfS0VZSU5GTyk7Cj4rIHNx bFZkYmVDaGFuZ2VQNCh2LCBhZGRyLCAoY2hhciAqKWluZm8sCj4rIGlzX2luZm9fdXNlZCA/Cj4r IFA0X1NUQVRJQyA6IFA0X0RZTkFNSUMpOwo+KyBpc19pbmZvX3VzZWQgPSB0cnVlOwo+wqAgcExv b3AtPmFkZHJPcGVuRXBobVtpXSA9IC0xOwo+wqAgfQo+wqAgfQo+LSBzcWxfa2V5X2luZm9fdW5y ZWYoa2V5X2luZm8pOwo+KyBpZiAoIWlzX2luZm9fdXNlZCkKPisgc3FsRGJGcmVlKHBQYXJzZS0+ ZGIsIGluZm8pOwo+wqAgfQo+wqAKPsKgwqBtdWx0aV9zZWxlY3RfZW5kOgo+QEAgLTUzNDcsMTcg KzU1NDEsMjIgQEAgcmVzZXRBY2N1bXVsYXRvcihQYXJzZSAqIHBQYXJzZSwgQWdnSW5mbyAqIHBB Z2dJbmZvKQo+wqAgImV4YWN0bHkgb25lIGFyZ3VtZW50Iik7Cj7CoCBwUGFyc2UtPmlzX2Fib3J0 ZWQgPSB0cnVlOwo+wqAgcEZ1bmMtPmlEaXN0aW5jdCA9IC0xOwo+LSB9IGVsc2Ugewo+LSBzdHJ1 Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9Cj4tIHNxbF9leHByX2xpc3RfdG9fa2V5X2luZm8o cFBhcnNlLAo+KyByZXR1cm47Cj4rIH0KPisgYXNzZXJ0KHBFLT54LnBMaXN0LT5uRXhwciA9PSAx KTsKPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0KPisgc3FsX3NwYWNlX2luZm9fbmV3 X2Zyb21fZXhwcl9saXN0KHBQYXJzZSwKPsKgIHBFLT54LnBMaXN0LAo+LSAwKTsKPi0gc3FsVmRi ZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwKPi0gcEZ1bmMtPnJlZ19lcGgsIDEsIDAsCj4t IChjaGFyICopa2V5X2luZm8sIFA0X0tFWUlORk8pOwo+LSBzcWxWZGJlQWRkT3AzKHYsIE9QX0l0 ZXJhdG9yT3BlbiwKPi0gcEZ1bmMtPmlEaXN0aW5jdCwgMCwgcEZ1bmMtPnJlZ19lcGgpOwo+KyBm YWxzZSk7Cj4rIGlmIChpbmZvID09IE5VTEwpIHsKPisgcFBhcnNlLT5pc19hYm9ydGVkID0gdHJ1 ZTsKPisgcEZ1bmMtPmlEaXN0aW5jdCA9IC0xOwo+KyByZXR1cm47Cj7CoCB9Cj4rIHNxbFZkYmVB ZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWwsIHBGdW5jLT5yZWdfZXBoLCAwLAo+KyAwLCAoY2hh ciAqKWluZm8sIFA0X0RZTkFNSUMpOwo+KyBzcWxWZGJlQWRkT3AzKHYsIE9QX0l0ZXJhdG9yT3Bl biwgcEZ1bmMtPmlEaXN0aW5jdCwgMCwKPisgcEZ1bmMtPnJlZ19lcGgpOwo+wqAgfQo+wqAgfQo+ wqB9Cj5AQCAtNTg2MiwyMyArNjA2MSwyMSBAQCBzcWxTZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8q IFRoZSBwYXJzZXIgY29udGV4dCAqLwo+wqAgKiB0aGF0IGNoYW5nZS4KPsKgICovCj7CoCBpZiAo c1NvcnQucE9yZGVyQnkpIHsKPi0gc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8gPQo+LSBz cWxfZXhwcl9saXN0X3RvX2tleV9pbmZvKHBQYXJzZSwgc1NvcnQucE9yZGVyQnksIDApOwo+wqAg c1NvcnQucmVnX2VwaCA9ICsrcFBhcnNlLT5uTWVtOwo+wqAgc1NvcnQuaUVDdXJzb3IgPSBwUGFy c2UtPm5UYWIrKzsKPi0gLyogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdHJhbnNpZW50IHRhYmxlIGVx dWFscyB0byBudW1iZXIgb2YgY29sdW1ucyBpbgo+LSAqIFNFTEVDVCBzdGF0ZW1lbnQgcGx1cyBu dW1iZXIgb2YgY29sdW1ucyBpbiBPUkRFUiBCWSBzdGF0ZW1lbnQKPi0gKiBhbmQgcGx1cyBvbmUg Y29sdW1uIGZvciBJRC4KPi0gKi8KPi0gaW50IG5Db2xzID0gcEVMaXN0LT5uRXhwciArIHNTb3J0 LnBPcmRlckJ5LT5uRXhwciArIDE7Cj4tIGlmIChrZXlfaW5mby0+cGFydHNbMF0uc29ydF9vcmRl ciA9PSBTT1JUX09SREVSX0RFU0MpIHsKPi0gc1NvcnQuc29ydEZsYWdzIHw9IFNPUlRGTEFHX0RF U0M7Cj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9Cj4rIHNxbF9zcGFjZV9pbmZvX25l d19mb3Jfc29ydGluZyhwUGFyc2UsIHNTb3J0LnBPcmRlckJ5LAo+KyBwRUxpc3QsIDAsIHRydWUp Owo+KyBpZiAoaW5mbyA9PSBOVUxMKSB7Cj4rIHBQYXJzZS0+aXNfYWJvcnRlZCA9IHRydWU7Cj4r IGdvdG8gc2VsZWN0X2VuZDsKPsKgIH0KPisgaWYgKGluZm8tPnNvcnRfb3JkZXJzWzBdID09IFNP UlRfT1JERVJfREVTQykKPisgc1NvcnQuc29ydEZsYWdzIHw9IFNPUlRGTEFHX0RFU0M7Cj7CoCBz U29ydC5hZGRyU29ydEluZGV4ID0KPi0gc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJh bCwKPi0gc1NvcnQucmVnX2VwaCwKPi0gbkNvbHMsCj4tIDAsIChjaGFyICopa2V5X2luZm8sIFA0 X0tFWUlORk8pOwo+KyBzcWxWZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCBzU29ydC5y ZWdfZXBoLCAwLCAwLAo+KyAoY2hhciAqKWluZm8sIFA0X0RZTkFNSUMpOwo+Kwo+wqAgc3FsVmRi ZUFkZE9wMyh2LCBPUF9JdGVyYXRvck9wZW4sIHNTb3J0LmlFQ3Vyc29yLCAwLCBzU29ydC5yZWdf ZXBoKTsKPsKgIFZkYmVDb21tZW50KCh2LCAiU29ydCB0YWJsZSIpKTsKPsKgIH0gZWxzZSB7Cj5A QCAtNTg4OCwxMSArNjA4NSwxNCBAQCBzcWxTZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8qIFRoZSBw YXJzZXIgY29udGV4dCAqLwo+wqAgLyogSWYgdGhlIG91dHB1dCBpcyBkZXN0aW5lZCBmb3IgYSB0 ZW1wb3JhcnkgdGFibGUsIG9wZW4gdGhhdCB0YWJsZS4KPsKgICovCj7CoCBpZiAocERlc3QtPmVE ZXN0ID09IFNSVF9FcGhlbVRhYikgewo+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9 Cj4tIHNxbF9leHByX2xpc3RfdG9fa2V5X2luZm8ocFBhcnNlLCBwRUxpc3QsIDApOwo+LSBzcWxW ZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCBwRGVzdC0+cmVnX2VwaCwKPi0gcEVMaXN0 LT5uRXhwciArIDEsIDAsIChjaGFyICopa2V5X2luZm8sCj4tIFA0X0tFWUlORk8pOwo+KyBzdHJ1 Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPQo+KyBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9leHBy X2xpc3QocFBhcnNlLCBwRUxpc3QsIHRydWUpOwo+KyBpZiAoaW5mbyA9PSBOVUxMKSB7Cj4rIHBQ YXJzZS0+aXNfYWJvcnRlZCA9IHRydWU7Cj4rIGdvdG8gc2VsZWN0X2VuZDsKPisgfQo+KyBzcWxW ZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCBwRGVzdC0+cmVnX2VwaCwgMCwgMCwKPisg KGNoYXIgKilpbmZvLCBQNF9EWU5BTUlDKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0 b3JPcGVuLCBwRGVzdC0+aVNEUGFybSwgMCwKPsKgIHBEZXN0LT5yZWdfZXBoKTsKPsKgCj5AQCAt NTkwNyw4ICs2MTA3LDE1IEBAIHNxbFNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogVGhlIHBhcnNl ciBjb250ZXh0ICovCj7CoCB9Cj7CoCBjb21wdXRlTGltaXRSZWdpc3RlcnMocFBhcnNlLCBwLCBp RW5kKTsKPsKgIGlmIChwLT5pTGltaXQgPT0gMCAmJiBzU29ydC5hZGRyU29ydEluZGV4ID49IDAp IHsKPisgc3RydWN0IFZkYmVPcCAqb3AgPSBzcWxWZGJlR2V0T3Aodiwgc1NvcnQuYWRkclNvcnRJ bmRleCk7Cj4rIHN0cnVjdCBzcWxfa2V5X2luZm8gKmtleV9pbmZvID0KPisgc3FsX2tleV9pbmZv X25ld19mcm9tX3NwYWNlX2luZm8ob3AtPnA0LnNwYWNlX2luZm8pOwo+wqAgc3FsVmRiZUNoYW5n ZU9wY29kZSh2LCBzU29ydC5hZGRyU29ydEluZGV4LCBPUF9Tb3J0ZXJPcGVuKTsKPsKgIHNxbFZk YmVDaGFuZ2VQMSh2LCBzU29ydC5hZGRyU29ydEluZGV4LCBzU29ydC5pRUN1cnNvcik7Cj4rIHNx bFZkYmVDaGFuZ2VQMih2LCBzU29ydC5hZGRyU29ydEluZGV4LAo+KyBvcC0+cDQuc3BhY2VfaW5m by0+ZmllbGRfY291bnQpOwo+KyBzcWxWZGJlQ2hhbmdlUDQodiwgc1NvcnQuYWRkclNvcnRJbmRl eCwgKGNoYXIgKilrZXlfaW5mbywKPisgUDRfS0VZSU5GTyk7Cj7CoCBzcWxWZGJlQ2hhbmdlVG9O b29wKHYsIHNTb3J0LmFkZHJTb3J0SW5kZXggKyAxKTsKPsKgIHNTb3J0LnNvcnRGbGFncyB8PSBT T1JURkxBR19Vc2VTb3J0ZXI7Cj7CoCB9Cj5AQCAtNTkxOCwxMyArNjEyNSwxNiBAQCBzcWxTZWxl Y3QoUGFyc2UgKiBwUGFyc2UsIC8qIFRoZSBwYXJzZXIgY29udGV4dCAqLwo+wqAgaWYgKHAtPnNl bEZsYWdzICYgU0ZfRGlzdGluY3QpIHsKPsKgIHNEaXN0aW5jdC5jdXJfZXBoID0gcFBhcnNlLT5u VGFiKys7Cj7CoCBzRGlzdGluY3QucmVnX2VwaCA9ICsrcFBhcnNlLT5uTWVtOwo+LSBzdHJ1Y3Qg c3FsX2tleV9pbmZvICprZXlfaW5mbyA9Cj4tIHNxbF9leHByX2xpc3RfdG9fa2V5X2luZm8ocFBh cnNlLCBwLT5wRUxpc3QsIDApOwo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPQo+KyBz cWxfc3BhY2VfaW5mb19uZXdfZnJvbV9leHByX2xpc3QocFBhcnNlLCBwRUxpc3QsCj4rIGZhbHNl KTsKPisgaWYgKGluZm8gPT0gTlVMTCkgewo+KyBwUGFyc2UtPmlzX2Fib3J0ZWQgPSB0cnVlOwo+ KyBnb3RvIHNlbGVjdF9lbmQ7Cj4rIH0KPsKgIHNEaXN0aW5jdC5hZGRyVG5jdCA9IHNxbFZkYmVB ZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWwsCj4tIHNEaXN0aW5jdC5yZWdfZXBoLAo+LSBrZXlf aW5mby0+cGFydF9jb3VudCwKPi0gMCwgKGNoYXIgKilrZXlfaW5mbywKPi0gUDRfS0VZSU5GTyk7 Cj4rIHNEaXN0aW5jdC5yZWdfZXBoLCAwLCAwLAo+KyAoY2hhciAqKWluZm8sIFA0X0RZTkFNSUMp Owo+wqAgc3FsVmRiZUFkZE9wMyh2LCBPUF9JdGVyYXRvck9wZW4sIHNEaXN0aW5jdC5jdXJfZXBo LCAwLAo+wqAgc0Rpc3RpbmN0LnJlZ19lcGgpOwo+wqAgVmRiZUNvbW1lbnQoKHYsICJEaXN0aW5j dCB0YWJsZSIpKTsKPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC9zcWxJbnQuaCBiL3NyYy9ib3gv c3FsL3NxbEludC5oCj5pbmRleCAxZjg3ZTY4MjMuLjU0MGMzYTJmZiAxMDA2NDQKPi0tLSBhL3Ny Yy9ib3gvc3FsL3NxbEludC5oCj4rKysgYi9zcmMvYm94L3NxbC9zcWxJbnQuaAo+QEAgLTQwMTMs OCArNDAxMyw2IEBAIHN0cnVjdCBzcWxfa2V5X2luZm8gewo+wqAgc3RydWN0IGtleV9kZWYgKmtl eV9kZWY7Cj7CoCAvKiogUmVmZXJlbmNlIGNvdW50ZXIuICovCj7CoCB1aW50MzJfdCByZWZzOwo+ LSAvKiogUm93aWQgc2hvdWxkIGJlIHRoZSBvbmx5IHBhcnQgb2YgUEssIGlmIHRydWUuICovCj4t IGJvb2wgaXNfcGtfcm93aWQ7Cj7CoCAvKiogTnVtYmVyIG9mIHBhcnRzIGluIHRoZSBrZXkuICov Cj7CoCB1aW50MzJfdCBwYXJ0X2NvdW50Owo+wqAgLyoqIERlZmluaXRpb24gb2YgdGhlIGtleSBw YXJ0cy4gKi8KPkBAIC00MDI4LDEyICs0MDI2LDYgQEAgc3RydWN0IHNxbF9rZXlfaW5mbyB7Cj7C oHN0cnVjdCBzcWxfa2V5X2luZm8gKgo+wqBzcWxfa2V5X2luZm9fbmV3KHNxbCAqZGIsIHVpbnQz Ml90IHBhcnRfY291bnQpOwo+wqAKPi0vKioKPi0gKiBBbGxvY2F0ZSBhIGtleV9pbmZvIG9iamVj dCBmcm9tIHRoZSBnaXZlbiBrZXkgZGVmaW5pdGlvbi4KPi0gKi8KPi1zdHJ1Y3Qgc3FsX2tleV9p bmZvICoKPi1zcWxfa2V5X2luZm9fbmV3X2Zyb21fa2V5X2RlZihzcWwgKmRiLCBjb25zdCBzdHJ1 Y3Qga2V5X2RlZiAqa2V5X2RlZik7Cj4tCj7CoC8qKgo+wqDCoCogSW5jcmVtZW50IHRoZSByZWZl cmVuY2UgY291bnRlciBvZiBhIGtleV9pbmZvIG9iamVjdC4KPsKgwqAqLwo+QEAgLTQwNTUsNiAr NDA0Nyw2NCBAQCBzcWxfa2V5X2luZm9fdW5yZWYoc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2lu Zm8pOwo+wqBzdHJ1Y3Qga2V5X2RlZiAqCj7CoHNxbF9rZXlfaW5mb190b19rZXlfZGVmKHN0cnVj dCBzcWxfa2V5X2luZm8gKmtleV9pbmZvKTsKPsKgCj4rLyoqCj4rICogU3RydWN0dXJlIHRoYXQg aXMgdXNlZCB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBlcGhlbWVyYWwgc3BhY2UgZmllbGQg dHlwZXMKPisgKiBhbmQgZmllbGRubyBvZiBrZXkgcGFydHMuCj4rICovCj4rc3RydWN0IHNxbF9z cGFjZV9pbmZvIHsKPisgLyoqIEZpZWxkIHR5cGVzIG9mIGFsbCBmaWVsZHMgb2YgZXBoZW1lcmFs IHNwYWNlLiAqLwo+KyBlbnVtIGZpZWxkX3R5cGUgKnR5cGVzOwo+KyAvKiogQ29sbGF0aW9uIGlk cyBvZiBhbGwgZmllbGRzIG9mIGVwaGVtZXJhbCBzcGFjZS4gKi8KPisgdWludDMyX3QgKmNvbGxf aWRzOwo+KyAvKioKPisgKiBGaWVsZG5vIGtleSBwYXJ0cyBvZiB0aGUgZXBoZW1lcmFsIHNwYWNl LiBJZiBOVUxMLCB0aGVuIHRoZSBpbmRleAo+KyAqIGNvbnNpc3RzIG9mIGFsbCBmaWVsZHMgaW4g c2VxdWVudGlhbCBvcmRlci4KPisgKi8KPisgdWludDMyX3QgKnBhcnRzOwo+KyAvKiogU29ydCBv cmRlciBvZiBpbmRleC4gKi8KPisgZW51bSBzb3J0X29yZGVyICpzb3J0X29yZGVyczsKPisgLyoq IE51bWJlciBvZiBmaWVsZHMgb2YgZXBoZW1ldGFsIHNwYWNlLiAqLwo+KyB1aW50MzJfdCBmaWVs ZF9jb3VudDsKPisgLyoqCj4rICogTnVtYmVyIG9mIHBhcnRzIGluIHByaW1hcnkgaW5kZXggb2Yg ZXBoZW1ldGFsIHNwYWNlLiBJZiAwIHRoZW4gcGFydHMKPisgKiBpcyBhbHNvIE5VTEwuCj4rICov Cj4rIHVpbnQzMl90IHBhcnRfY291bnQ7Cj4rfTsKPisKPisvKioKPisgKiBBbGxvY2F0ZSBhbmQg aW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmFsdWVzIGEgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSB1 c2VkIHRvCj4rICogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZXBoZW1lcmFsIHNwYWNlIGZpZWxk IHR5cGVzIGFuZCBrZXkgcGFydHMuCj4rICovCj4rc3RydWN0IHNxbF9zcGFjZV9pbmZvICoKPitz cWxfc3BhY2VfaW5mb19uZXcodWludDMyX3QgZmllbGRfY291bnQsIHVpbnQzMl90IHBhcnRfY291 bnQpOwo+Kwo+Ky8qKgo+KyAqIEluaXRpYWxpemUgdGhlIGZpZWxkIHR5cGVzIGFuZCBrZXkgcGFy dHMgb2Ygc3BhY2VfaW5mbyB3aXRoIHNwYWNlX2RlZi4KPisgKiBBZGRpdGlvbmFsbHkgYWRkZWQg b25lIG1vcmUgZmllbGQgdHlwZSBhbmQga2V5IHBhcnQgZm9yIHJvd2lkLiBSb3dpZCBpcwo+KyAq IGFsd2F5cyBJTlRFR0VSLiBLZXkgcGFydHMgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBz YW1lIHZhbHVlcyBhcyB0aGUKPisgKiBmaWVsZCB0eXBlcy4gVGhlIG51bWJlciBvZiBpbml0aWFs aXplZCBmaWVsZCB0eXBlcyBhbmQga2V5IHBhcnRzIHdpbGwgYmUgdGhlCj4rICogc2FtZSBhcyB0 aGUgZmllbGRfY291bnQgaW4gc3BhY2VfZGVmIHBsdXMgb25lLgo+KyAqLwo+K3N0cnVjdCBzcWxf c3BhY2VfaW5mbyAqCj4rc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fc3BhY2VfZGVmKGNvbnN0IHN0 cnVjdCBzcGFjZV9kZWYgKmRlZik7Cj4rCj4rLyoqCj4rICogSW5pdGlhbGl6ZSB0aGUgZmllbGQg dHlwZXMgYW5kIGtleSBwYXJ0cyBvZiBzcGFjZV9pbmZvIHdpdGggaW5kZXhfZGVmLgo+KyAqIEtl eSBwYXJ0cyB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBm aWVsZCB0eXBlcy4gVGhlCj4rICogbnVtYmVyIG9mIGluaXRpYWxpemVkIGZpZWxkIHR5cGVzIGFu ZCBrZXkgcGFydHMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUKPisgKiBwYXJ0X2NvdW50IGluIGlu ZGV4X2RlZi4KPisgKi8KPitzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKgo+K3NxbF9zcGFjZV9pbmZv X25ld19mcm9tX2luZGV4X2RlZihjb25zdCBzdHJ1Y3QgaW5kZXhfZGVmICpkZWYsIGJvb2wgaGFz X3Jvd2lkKTsKPisKPisvKioKPisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBlcGhlbWVy YWwgc3BhY2UuIEluZm9ybWF0aW9uIGFib3V0IGZpZWxkIHR5cGVzIGFuZAo+KyAqIGtleSBwYXJ0 cyBpcyB0YWtlbiBmcm9tIHRoZSBzcGFjZV9pbmZvIHN0cnVjdHVyZS4KPisgKi8KPitzdHJ1Y3Qg c3BhY2UgKgo+K3NxbF9lcGhlbWVyYWxfc3BhY2VfbmV3KGNvbnN0IHN0cnVjdCBzcWxfc3BhY2Vf aW5mbyAqaW5mbyk7Cj4rCj7CoC8qKgo+wqDCoCogQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGltcGxl bWVudHMgTElLRS1zdHlsZSBjb21wYXJpc29uICYgaWYgaXQKPsKgwqAqIGlzIGFwcHJvcHJpYXRl IHRvIGFwcGx5IGEgTElLRSBxdWVyeSBvcHRpbWl6YXRpb24uCj5kaWZmIC0tZ2l0IGEvc3JjL2Jv eC9zcWwvdGFyYW50b29sSW50LmggYi9zcmMvYm94L3NxbC90YXJhbnRvb2xJbnQuaAo+aW5kZXgg OGZkYzUwNDMyLi5hZGI3YjVmOWYgMTAwNjQ0Cj4tLS0gYS9zcmMvYm94L3NxbC90YXJhbnRvb2xJ bnQuaAo+KysrIGIvc3JjL2JveC9zcWwvdGFyYW50b29sSW50LmgKPkBAIC02MSwyMSArNjEsNiBA QCBzcWxfcmVuYW1lX3RhYmxlKHVpbnQzMl90IHNwYWNlX2lkLCBjb25zdCBjaGFyICpuZXdfbmFt ZSk7Cj7CoGludCB0YXJhbnRvb2xzcWxSZW5hbWVUcmlnZ2VyKGNvbnN0IGNoYXIgKnpUcmlnZ2Vy TmFtZSwKPsKgIGNvbnN0IGNoYXIgKnpPbGROYW1lLCBjb25zdCBjaGFyICp6TmV3TmFtZSk7Cj7C oAo+LS8qKgo+LSAqIENyZWF0ZSBlcGhlbWVyYWwgc3BhY2UuIEZlYXR1cmVzIG9mIGVwaGVtZXJh bCBzcGFjZXM6IGlkID09IDAsCj4tICogbmFtZSA9PSAiZXBoZW1lcmFsIiwgbWVtdHggZW5naW5l IChpbiBmdXR1cmUgaXQgY2FuIGJlIGNoYW5nZWQsCj4tICogYnV0IG5vdyBvbmx5IG1lbXR4IGVu Z2luZSBpcyBzdXBwb3J0ZWQpLCBwcmltYXJ5IGluZGV4IHdoaWNoCj4tICogY292ZXJzIGFsbCBm aWVsZHMgYW5kIG5vIHNlY29uZGFyeSBpbmRleGVzLCBnaXZlbiBmaWVsZCBudW1iZXIKPi0gKiBh bmQgY29sbGF0aW9uIHNlcXVlbmNlLiBBbGwgZmllbGRzIGFyZSBzY2FsYXIgYW5kIG51bGxhYmxl Lgo+LSAqCj4tICogQHBhcmFtIGZpZWxkX2NvdW50IE51bWJlciBvZiBmaWVsZHMgaW4gZXBoZW1l cmFsIHNwYWNlLgo+LSAqIEBwYXJhbSBrZXlfaW5mbyBLZXlzIGRlc2NyaXB0aW9uIGZvciBuZXcg ZXBoZW1lcmFsIHNwYWNlLgo+LSAqCj4tICogQHJldHZhbCBQb2ludGVyIHRvIGNyZWF0ZWQgc3Bh Y2UsIE5VTEwgaWYgZXJyb3IuCj4tICovCj4tc3RydWN0IHNwYWNlICoKPi1zcWxfZXBoZW1lcmFs X3NwYWNlX2NyZWF0ZSh1aW50MzJfdCBmaWxlZF9jb3VudCwgc3RydWN0IHNxbF9rZXlfaW5mbyAq a2V5X2luZm8pOwo+LQo+wqAvKioKPsKgwqAqIEluc2VydCB0dXBsZSBpbnRvIGVwaGVtZXJhbCBz cGFjZS4KPsKgwqAqIEluIGNvbnRyYXN0IHRvIG9yZGluYXJ5IHNwYWNlcywgdGhlcmUgaXMgbm8g bmVlZCB0byBjcmVhdGUgYW5kCj5kaWZmIC0tZ2l0IGEvc3JjL2JveC9zcWwvdXBkYXRlLmMgYi9z cmMvYm94L3NxbC91cGRhdGUuYwo+aW5kZXggMjJmODIzOTBjLi5iNDgyN2YyNDIgMTAwNjQ0Cj4t LS0gYS9zcmMvYm94L3NxbC91cGRhdGUuYwo+KysrIGIvc3JjL2JveC9zcWwvdXBkYXRlLmMKPkBA IC0yMjYsOSArMjI2LDIwIEBAIHNxbFVwZGF0ZShQYXJzZSAqIHBQYXJzZSwgLyogVGhlIHBhcnNl ciBjb250ZXh0ICovCj7CoCBpRXBoID0gcFBhcnNlLT5uVGFiKys7Cj7CoCBzcWxWZGJlQWRkT3Ay KHYsIE9QX051bGwsIDAsIGlQayk7Cj7CoAo+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm87 Cj4rIGFzc2VydChzcGFjZS0+aW5kZXhfY291bnQgPiAwIHx8IGlzX3ZpZXcpOwo+KyBpZiAoaXNf dmlldykKPisgaW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ld19mcm9tX3NwYWNlX2RlZihkZWYpOwo+ KyBlbHNlCj4rIGluZm8gPSBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRleF9kZWYocFBrLT5k ZWYsIGZhbHNlKTsKPisgaWYgKGluZm8gPT0gTlVMTCkgewo+KyBwUGFyc2UtPmlzX2Fib3J0ZWQg PSB0cnVlOwo+KyBnb3RvIHVwZGF0ZV9jbGVhbnVwOwo+KyB9Cj7CoCAvKiBBZGRyZXNzIG9mIHRo ZSBPcGVuRXBoZW1lcmFsIGluc3RydWN0aW9uLiAqLwo+LSBpbnQgYWRkck9wZW4gPSBzcWxWZGJl QWRkT3AyKHYsIE9QX09wZW5URXBoZW1lcmFsLCByZWdfZXBoLAo+LSBwa19wYXJ0X2NvdW50KTsK PisgaW50IGFkZHJPcGVuID0gc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVn X2VwaCwgMCwgMCwKPisgKGNoYXIgKilpbmZvLCBQNF9EWU5BTUlDKTsKPisKPsKgIHBXSW5mbyA9 IHNxbFdoZXJlQmVnaW4ocFBhcnNlLCBwVGFiTGlzdCwgcFdoZXJlLCAwLCAwLAo+wqAgV0hFUkVf T05FUEFTU19ERVNJUkVELCBwa19jdXJzb3IpOwo+wqAgaWYgKHBXSW5mbyA9PSAwKQo+ZGlmZiAt LWdpdCBhL3NyYy9ib3gvc3FsL3ZkYmUuYyBiL3NyYy9ib3gvc3FsL3ZkYmUuYwo+aW5kZXggZmNl YTllZWZlLi5jZTMwYWZjNWEgMTAwNjQ0Cj4tLS0gYS9zcmMvYm94L3NxbC92ZGJlLmMKPisrKyBi L3NyYy9ib3gvc3FsL3ZkYmUuYwo+QEAgLTIwMzMsMTAgKzIwMzMsOSBAQCBjYXNlIE9QX0ZldGNo OiB7Cj7CoGNhc2UgT1BfQXBwbHlUeXBlOiB7Cj7CoCBlbnVtIGZpZWxkX3R5cGUgKnR5cGVzID0g cE9wLT5wNC50eXBlczsKPsKgIGFzc2VydCh0eXBlcyAhPSBOVUxMKTsKPi0gYXNzZXJ0KHR5cGVz W3BPcC0+cDJdID09IGZpZWxkX3R5cGVfTUFYKTsKPsKgIHBJbjEgPSAmYU1lbVtwT3AtPnAxXTsK Pi0gZW51bSBmaWVsZF90eXBlIHR5cGU7Cj4tIHdoaWxlKCh0eXBlID0gKih0eXBlcysrKSkgIT0g ZmllbGRfdHlwZV9NQVgpIHsKPisgZm9yIChpbnQgaSA9IDA7IGkgPCBwT3AtPnAyOyArK2ksICsr cEluMSkgewo+KyBlbnVtIGZpZWxkX3R5cGUgdHlwZSA9IHR5cGVzW2ldOwo+wqAgYXNzZXJ0KHBJ bjEgPD0gJnAtPmFNZW1bKHAtPm5NZW0rMSAtIHAtPm5DdXJzb3IpXSk7Cj7CoCBhc3NlcnQobWVt SXNWYWxpZChwSW4xKSk7Cj7CoCBpZiAobWVtX2Nhc3RfaW1wbGljaXQocEluMSwgdHlwZSkgIT0g MCkgewo+QEAgLTIwNDQsNyArMjA0Myw2IEBAIGNhc2UgT1BfQXBwbHlUeXBlOiB7Cj7CoCBtZW1f c3RyKHBJbjEpLCBmaWVsZF90eXBlX3N0cnNbdHlwZV0pOwo+wqAgZ290byBhYm9ydF9kdWVfdG9f ZXJyb3I7Cj7CoCB9Cj4tIHBJbjErKzsKPsKgIH0KPsKgIGJyZWFrOwo+wqB9Cj5AQCAtMjM4MCwx MCArMjM3OCw5IEBAIG9wZW5fY3Vyc29yX3NldF9oaW50czoKPsKgfQo+wqAKPsKgLyoqCj4tICog T3Bjb2RlOiBPcGVuVEVwaGVtZXJhbCBQMSBQMiAqIFA0ICoKPisgKiBPcGNvZGU6IE9wZW5URXBo ZW1lcmFsIFAxICogKiBQNCAqCj7CoMKgKiBTeW5vcHNpczoKPsKgwqAqIEBwYXJhbSBQMSByZWdp c3Rlciwgd2hlcmUgcG9pbnRlciB0byBuZXcgc3BhY2UgaXMgc3RvcmVkLgo+LSAqIEBwYXJhbSBQ MiBudW1iZXIgb2YgY29sdW1ucyBpbiBhIG5ldyB0YWJsZS4KPsKgwqAqIEBwYXJhbSBQNCBrZXkg ZGVmIGZvciBuZXcgdGFibGUsIE5VTEwgaXMgYWxsb3dlZC4KPsKgwqAqCj7CoMKgKiBUaGlzIG9w Y29kZSBjcmVhdGVzIFRhcmFudG9vbCdzIGVwaGVtZXJhbCB0YWJsZSBhbmQgc3RvcmVzIHBvaW50 ZXIKPkBAIC0yMzkxLDExICsyMzg4LDExIEBAIG9wZW5fY3Vyc29yX3NldF9oaW50czoKPsKgwqAq Lwo+wqBjYXNlIE9QX09wZW5URXBoZW1lcmFsOiB7Cj7CoCBhc3NlcnQocE9wLT5wMSA+PSAwKTsK Pi0gYXNzZXJ0KHBPcC0+cDIgPiAwKTsKPi0gYXNzZXJ0KHBPcC0+cDR0eXBlICE9IFA0X0tFWUlO Rk8gfHwgcE9wLT5wNC5rZXlfaW5mbyAhPSBOVUxMKTsKPsKgCj4tIHN0cnVjdCBzcGFjZSAqc3Bh Y2UgPSBzcWxfZXBoZW1lcmFsX3NwYWNlX2NyZWF0ZShwT3AtPnAyLAo+LSBwT3AtPnA0LmtleV9p bmZvKTsKPisgYXNzZXJ0KHBPcC0+cDR0eXBlID09IFA0X0RZTkFNSUMgfHwgcE9wLT5wNHR5cGUg PT0gUDRfU1RBVElDKTsKPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gcE9wLT5wNC5z cGFjZV9pbmZvOwo+KyBhc3NlcnQoaW5mbyAhPSBOVUxMKTsKPisgc3RydWN0IHNwYWNlICpzcGFj ZSA9IHNxbF9lcGhlbWVyYWxfc3BhY2VfbmV3KGluZm8pOwo+wqAKPsKgIGlmIChzcGFjZSA9PSBO VUxMKQo+wqAgZ290byBhYm9ydF9kdWVfdG9fZXJyb3I7Cj5kaWZmIC0tZ2l0IGEvc3JjL2JveC9z cWwvdmRiZS5oIGIvc3JjL2JveC9zcWwvdmRiZS5oCj5pbmRleCBiZTExMmM3MmQuLmU0MGExYTBi MyAxMDA2NDQKPi0tLSBhL3NyYy9ib3gvc3FsL3ZkYmUuaAo+KysrIGIvc3JjL2JveC9zcWwvdmRi ZS5oCj5AQCAtOTMsNiArOTMsMTAgQEAgc3RydWN0IFZkYmVPcCB7Cj7CoCAqIGRvaW5nIGEgY2Fz dC4KPsKgICovCj7CoCBlbnVtIGZpZWxkX3R5cGUgKnR5cGVzOwo+KyAvKioKPisgKiBJbmZvcm1h dGlvbiBhYm91dCBlcGhlbWVyYWwgc3BhY2UgZmllbGQgdHlwZXMgYW5kIGtleSBwYXJ0cy4KPisg Ki8KPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwo+wqAgfSBwNDsKPsKgI2lm ZGVmIFNRTF9FTkFCTEVfRVhQTEFJTl9DT01NRU5UUwo+wqAgY2hhciAqekNvbW1lbnQ7IC8qIENv bW1lbnQgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSAqLwo+QEAgLTIxMCwxNSArMjE0LDYgQEAgaW50 IHNxbFZkYmVEZWxldGVQcmlvck9wY29kZShWZGJlICosIHU4IG9wKTsKPsKgdm9pZCBzcWxWZGJl Q2hhbmdlUDQoVmRiZSAqLCBpbnQgYWRkciwgY29uc3QgY2hhciAqelA0LCBpbnQgTik7Cj7CoHZv aWQgc3FsVmRiZUFwcGVuZFA0KFZkYmUgKiwgdm9pZCAqcFA0LCBpbnQgcDR0eXBlKTsKPsKgCj4t LyoqCj4tICogU2V0IHRoZSBQNCBvbiB0aGUgbW9zdCByZWNlbnRseSBhZGRlZCBvcGNvZGUgdG8g dGhlIGtleV9kZWYgZm9yIHRoZQo+LSAqIGluZGV4IGdpdmVuLgo+LSAqIEBwYXJhbSBQYXJzZSBj b250ZXh0LCBmb3IgZXJyb3IgcmVwb3J0aW5nLgo+LSAqIEBwYXJhbSBrZXlfZGVmIERlZmluaXRp b24gb2YgYSBrZXkgdG8gc2V0Lgo+LSAqLwo+LXZvaWQKPi1zcWxfdmRiZV9zZXRfcDRfa2V5X2Rl ZihzdHJ1Y3QgUGFyc2UgKnBhcnNlLCBzdHJ1Y3Qga2V5X2RlZiAqa2V5X2RlZik7Cj4tCj7CoFZk YmVPcCAqc3FsVmRiZUdldE9wKFZkYmUgKiwgaW50KTsKPsKgaW50IHNxbFZkYmVNYWtlTGFiZWwo VmRiZSAqKTsKPsKgdm9pZCBzcWxWZGJlUnVuT25seU9uY2UoVmRiZSAqKTsKPmRpZmYgLS1naXQg YS9zcmMvYm94L3NxbC92ZGJlYXV4LmMgYi9zcmMvYm94L3NxbC92ZGJlYXV4LmMKPmluZGV4IDYx YmU3YjQ4OS4uMmQ3ODAwYjE3IDEwMDY0NAo+LS0tIGEvc3JjL2JveC9zcWwvdmRiZWF1eC5jCj4r KysgYi9zcmMvYm94L3NxbC92ZGJlYXV4LmMKPkBAIC03ODcsMTggKzc4Nyw2IEBAIHNxbFZkYmVB cHBlbmRQNChWZGJlICogcCwgdm9pZCAqcFA0LCBpbnQgbikKPsKgIH0KPsKgfQo+wqAKPi12b2lk Cj4tc3FsX3ZkYmVfc2V0X3A0X2tleV9kZWYoc3RydWN0IFBhcnNlICpwYXJzZSwgc3RydWN0IGtl eV9kZWYgKmtleV9kZWYpCj4tewo+LSBzdHJ1Y3QgVmRiZSAqdiA9IHBhcnNlLT5wVmRiZTsKPi0g YXNzZXJ0KHYgIT0gTlVMTCk7Cj4tIGFzc2VydChrZXlfZGVmICE9IE5VTEwpOwo+LSBzdHJ1Y3Qg c3FsX2tleV9pbmZvICprZXlfaW5mbyA9Cj4tIHNxbF9rZXlfaW5mb19uZXdfZnJvbV9rZXlfZGVm KHBhcnNlLT5kYiwga2V5X2RlZik7Cj4tIGlmIChrZXlfaW5mbyAhPSBOVUxMKQo+LSBzcWxWZGJl QXBwZW5kUDQodiwga2V5X2luZm8sIFA0X0tFWUlORk8pOwo+LX0KPi0KPsKgI2lmZGVmIFNRTF9F TkFCTEVfRVhQTEFJTl9DT01NRU5UUwo+wqAvKgo+wqDCoCogQ2hhbmdlIHRoZSBjb21tZW50IG9u IHRoZSBtb3N0IHJlY2VudGx5IGNvZGVkIGluc3RydWN0aW9uLiBPcgo+ZGlmZiAtLWdpdCBhL3Ny Yy9ib3gvc3FsL3doZXJlLmMgYi9zcmMvYm94L3NxbC93aGVyZS5jCj5pbmRleCAxNjc2NmYyZjgu LmQ4ZDIzMTYxYiAxMDA2NDQKPi0tLSBhL3NyYy9ib3gvc3FsL3doZXJlLmMKPisrKyBiL3NyYy9i b3gvc3FsL3doZXJlLmMKPkBAIC05MTksMTUgKzkxOSwxNSBAQCBjb25zdHJ1Y3RBdXRvbWF0aWNJ bmRleChQYXJzZSAqIHBQYXJzZSwgLyogVGhlIHBhcnNpbmcgY29udGV4dCAqLwo+wqAgLyogQ3Jl YXRlIHRoZSBhdXRvbWF0aWMgaW5kZXggKi8KPsKgIGFzc2VydChwTGV2ZWwtPmlJZHhDdXIgPj0g MCk7Cj7CoCBwTGV2ZWwtPmlJZHhDdXIgPSBwUGFyc2UtPm5UYWIrKzsKPi0gc3RydWN0IHNxbF9r ZXlfaW5mbyAqcGtfaW5mbyA9Cj4tIHNxbF9rZXlfaW5mb19uZXdfZnJvbV9rZXlfZGVmKHBQYXJz ZS0+ZGIsIGlkeF9kZWYtPmtleV9kZWYpOwo+LSBpZiAocGtfaW5mbyA9PSBOVUxMKSB7Cj4rIHN0 cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ld19mcm9tX2luZGV4 X2RlZihpZHhfZGVmLAo+KyB0cnVlKTsKPisgaWYgKGluZm8gPT0gTlVMTCkgewo+wqAgcFBhcnNl LT5pc19hYm9ydGVkID0gdHJ1ZTsKPsKgIHJldHVybjsKPsKgIH0KPsKgIGludCByZWdfZXBoID0g c3FsR2V0VGVtcFJlZyhwUGFyc2UpOwo+LSBzcWxWZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1l cmFsLCByZWdfZXBoLCBuS2V5Q29sICsgMSwgMCwKPi0gKGNoYXIgKilwa19pbmZvLCBQNF9LRVlJ TkZPKTsKPisgc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2VwaCwgMCwg MCwgKGNoYXIgKilpbmZvLAo+KyBQNF9EWU5BTUlDKTsKPsKgIHNxbFZkYmVBZGRPcDModiwgT1Bf SXRlcmF0b3JPcGVuLCBwTGV2ZWwtPmlJZHhDdXIsIDAsIHJlZ19lcGgpOwo+wqAgVmRiZUNvbW1l bnQoKHYsICJmb3IgJXMiLCBzcGFjZS0+ZGVmLT5uYW1lKSk7Cj7CoAo+ZGlmZiAtLWdpdCBhL3Ny Yy9ib3gvc3FsL3doZXJlY29kZS5jIGIvc3JjL2JveC9zcWwvd2hlcmVjb2RlLmMKPmluZGV4IGRm NmNjOTJlMS4uMGQwY2IwNTRkIDEwMDY0NAo+LS0tIGEvc3JjL2JveC9zcWwvd2hlcmVjb2RlLmMK PisrKyBiL3NyYy9ib3gvc3FsL3doZXJlY29kZS5jCj5AQCAtMTEzNCwxMSArMTEzNCwxOSBAQCBz cWxXaGVyZUNvZGVPbmVMb29wU3RhcnQoV2hlcmVJbmZvICogcFdJbmZvLCAvKiBDb21wbGV0ZSBp bmZvcm1hdGlvbiBhYm91dCB0aGUgVwo+wqAgaWYgKChwV0luZm8tPndjdHJsRmxhZ3MgJiBXSEVS RV9EVVBMSUNBVEVTX09LKSA9PSAwKSB7Cj7CoCBjdXJfcm93X3NldCA9IHBQYXJzZS0+blRhYisr Owo+wqAgcmVnX3Jvd19zZXQgPSArK3BQYXJzZS0+bk1lbTsKPi0gc3FsVmRiZUFkZE9wMih2LCBP UF9PcGVuVEVwaGVtZXJhbCwKPi0gcmVnX3Jvd19zZXQsIHBrX3BhcnRfY291bnQpOwo+KyBzdHJ1 Y3QgaW5kZXhfZGVmICppbmRleF9kZWYgPSBzcGFjZS0+aW5kZXhbMF0tPmRlZjsKPisgc3RydWN0 IHNxbF9zcGFjZV9pbmZvICppbmZvID0KPisgc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21faW5kZXhf ZGVmKGluZGV4X2RlZiwKPisgZmFsc2UpOwo+KyBpZiAoaW5mbyA9PSBOVUxMKSB7Cj4rIHBQYXJz ZS0+aXNfYWJvcnRlZCA9IHRydWU7Cj4rIHJldHVybiBub3RSZWFkeTsKPisgfQo+KyBzcWxWZGJl QWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCByZWdfcm93X3NldCwKPisgcGtfcGFydF9jb3Vu dCwgMCwgKGNoYXIgKilpbmZvLAo+KyBQNF9EWU5BTUlDKTsKPsKgIHNxbFZkYmVBZGRPcDModiwg T1BfSXRlcmF0b3JPcGVuLCBjdXJfcm93X3NldCwgMCwKPsKgIHJlZ19yb3dfc2V0KTsKPi0gc3Fs X3ZkYmVfc2V0X3A0X2tleV9kZWYocFBhcnNlLCBwa19rZXlfZGVmKTsKPsKgIHJlZ1BrID0gKytw UGFyc2UtPm5NZW07Cj7CoCB9Cj7CoCBpUmV0SW5pdCA9IHNxbFZkYmVBZGRPcDIodiwgT1BfSW50 ZWdlciwgMCwgcmVnUmV0dXJuKTsKPi0tCj4yLjI1LjEKwqA= ----ALT--708d819A4C20Eb57c043c2B9c7913D2f1629282675 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+UUEgTEdUTTwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGRpdj4mbmJz cDs8L2Rpdj48ZGl2IGRhdGEtc2lnbmF0dXJlLXdpZGdldD0iY29udGFpbmVyIj48ZGl2IGRhdGEt c2lnbmF0dXJlLXdpZGdldD0iY29udGVudCI+PGRpdj4tLTxicj5WaXRhbGlpYSBJb2ZmZTwvZGl2 PjwvZGl2PjwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48YmxvY2txdW90 ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRk aW5nOjAgMCAwIDEwcHg7Ij7QktGC0L7RgNC90LjQuiwgMTcg0LDQstCz0YPRgdGC0LAgMjAyMSwg MTQ6NTYgKzAzOjAwINC+0YIgTWVyZ2VuIEltZWV2IHZpYSBUYXJhbnRvb2wtcGF0Y2hlcyAmbHQ7 dGFyYW50b29sLXBhdGNoZXNAZGV2LnRhcmFudG9vbC5vcmcmZ3Q7Ojxicj4mbmJzcDs8ZGl2IGlk PSIiPjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2IGlkPSJz dHlsZV8xNjI5MjAxMzg4MDM5MjU4MDY3MV9CT0RZIj5QcmlvciB0byB0aGlzIHBhdGNoLCBtb3N0 IGVwaGVtZXJhbCBzcGFjZSBmaWVsZHMgd2VyZSBkZWZpbmVkIHVzaW5nIHRoZTxicj5TQ0FMQVIg dHlwZS4gQWZ0ZXIgdGhpcyBwYXRjaCwgYWxtb3N0IGFsbCBmaWVsZHMgd2lsbCBiZSBwcm9wZXJs eTxicj5kZWZpbmVkLiBIb3dldmVyLCB0aGVyZSBhcmUgc3RpbGwgY2FzZXMgd2hlcmUgU0NBTEFS IHdpbGwgYmUgc2V0IGJ5PGJyPmRlZmF1bHQuIEZvciBleGFtcGxlLCBpbiBJTiwgd2hlcmUgcnVs ZXMgaXMgc3RpbGwgbm90IGRlZmluZWQgKCM0NjkyKS48YnI+QW5vdGhlciBleGFtcGxlIGlzIHdo ZW4gYSBmaWVsZCBpcyBub3QgcmVzb2x2ZWQgYmVjYXVzZSBvZiBhIHRvbyBjb21wbGV4PGJyPnF1 ZXJ5Ljxicj48YnI+UGFydCBvZiAjNjIxMzxicj4tLS08YnI+Jm5ic3A7c3JjL2JveC9zcWwuYyB8 IDIxMyArKysrKysrKysrKystLS0tLS0tLTxicj4mbmJzcDtzcmMvYm94L3NxbC9kZWxldGUuYyB8 IDM1ICsrLS08YnI+Jm5ic3A7c3JjL2JveC9zcWwvZXhwci5jIHwgMTkgKy08YnI+Jm5ic3A7c3Jj L2JveC9zcWwvaW5zZXJ0LmMgfCA1NyArKysrLS08YnI+Jm5ic3A7c3JjL2JveC9zcWwvc2VsZWN0 LmMgfCA0MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLTxicj4mbmJzcDtz cmMvYm94L3NxbC9zcWxJbnQuaCB8IDY2ICsrKysrLTxicj4mbmJzcDtzcmMvYm94L3NxbC90YXJh bnRvb2xJbnQuaCB8IDE1IC0tPGJyPiZuYnNwO3NyYy9ib3gvc3FsL3VwZGF0ZS5jIHwgMTUgKy08 YnI+Jm5ic3A7c3JjL2JveC9zcWwvdmRiZS5jIHwgMTcgKy08YnI+Jm5ic3A7c3JjL2JveC9zcWwv dmRiZS5oIHwgMTMgKy08YnI+Jm5ic3A7c3JjL2JveC9zcWwvdmRiZWF1eC5jIHwgMTIgLS08YnI+ Jm5ic3A7c3JjL2JveC9zcWwvd2hlcmUuYyB8IDEwICstPGJyPiZuYnNwO3NyYy9ib3gvc3FsL3do ZXJlY29kZS5jIHwgMTQgKy08YnI+Jm5ic3A7MTMgZmlsZXMgY2hhbmdlZCwgNTk1IGluc2VydGlv bnMoKyksIDI5MSBkZWxldGlvbnMoLSk8YnI+PGJyPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC5j IGIvc3JjL2JveC9zcWwuYzxicj5pbmRleCAwZTkzYWE3YmIuLmQxNTE1OWQ2ZSAxMDA2NDQ8YnI+ LS0tIGEvc3JjL2JveC9zcWwuYzxicj4rKysgYi9zcmMvYm94L3NxbC5jPGJyPkBAIC0yNDMsMTE0 ICsyNDMsMTYxIEBAIHRhcmFudG9vbHNxbENvdW50KHN0cnVjdCBCdEN1cnNvciAqcEN1cik8YnI+ Jm5ic3A7IHJldHVybiBpbmRleF9jb3VudChwQ3VyLSZndDtpbmRleCwgcEN1ci0mZ3Q7aXRlcl90 eXBlLCBOVUxMLCAwKTs8YnI+Jm5ic3A7fTxicj4mbmJzcDs8YnI+LXN0cnVjdCBzcGFjZSAqPGJy Pi1zcWxfZXBoZW1lcmFsX3NwYWNlX2NyZWF0ZSh1aW50MzJfdCBmaWVsZF9jb3VudCwgc3RydWN0 IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8pPGJyPitzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKjxicj4r c3FsX3NwYWNlX2luZm9fbmV3KHVpbnQzMl90IGZpZWxkX2NvdW50LCB1aW50MzJfdCBwYXJ0X2Nv dW50KTxicj4mbmJzcDt7PGJyPi0gc3RydWN0IGtleV9kZWYgKmRlZiA9IE5VTEw7PGJyPi0gdWlu dDMyX3QgcGFydF9jb3VudCA9IGZpZWxkX2NvdW50Ozxicj4tIGlmIChrZXlfaW5mbyAhPSBOVUxM KSB7PGJyPi0gZGVmID0gc3FsX2tleV9pbmZvX3RvX2tleV9kZWYoa2V5X2luZm8pOzxicj4tIGlm IChkZWYgPT0gTlVMTCk8YnI+LSByZXR1cm4gTlVMTDs8YnI+LSAvKjxicj4tICogSW4gY2FzZSBp c19wa19yb3dpZCBpcyB0cnVlIHdlIGNhbiB1c2Ugcm93aWQ8YnI+LSAqIGFzIHRoZSBvbmx5IHBh cnQgb2YgdGhlIGtleS48YnI+LSAqLzxicj4tIGlmIChrZXlfaW5mby0mZ3Q7aXNfcGtfcm93aWQp PGJyPi0gcGFydF9jb3VudCA9IDE7PGJyPisgYXNzZXJ0KGZpZWxkX2NvdW50ICZndDsgMCk7PGJy PisgdWludDMyX3QgaW5mb19zaXplID0gc2l6ZW9mKHN0cnVjdCBzcWxfc3BhY2VfaW5mbyk7PGJy PisgdWludDMyX3QgZmllbGRfc2l6ZSA9IGZpZWxkX2NvdW50ICogc2l6ZW9mKGVudW0gZmllbGRf dHlwZSk7PGJyPisgdWludDMyX3QgY29sbHNfc2l6ZSA9IGZpZWxkX2NvdW50ICogc2l6ZW9mKHVp bnQzMl90KTs8YnI+KyB1aW50MzJfdCBwYXJ0c19zaXplID0gcGFydF9jb3VudCAqIHNpemVvZih1 aW50MzJfdCk7PGJyPisgdWludDMyX3Qgc29ydF9vcmRlcnNfc2l6ZSA9IHBhcnRfY291bnQgKiBz aXplb2YoZW51bSBzb3J0X29yZGVyKTs8YnI+KyB1aW50MzJfdCBzaXplID0gaW5mb19zaXplICsg ZmllbGRfc2l6ZSArIGNvbGxzX3NpemUgKyBwYXJ0c19zaXplICs8YnI+KyBzb3J0X29yZGVyc19z aXplOzxicj4rPGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsRGJNYWxsb2NS YXdOTihzcWxfZ2V0KCksIHNpemUpOzxicj4rIGlmIChpbmZvID09IE5VTEwpIHs8YnI+KyBkaWFn X3NldChPdXRPZk1lbW9yeSwgc2l6ZSwgInNxbERiTWFsbG9jUmF3Tk4iLCAiaW5mbyIpOzxicj4r IHJldHVybiBOVUxMOzxicj4mbmJzcDsgfTxicj4rIGluZm8tJmd0O3R5cGVzID0gKGVudW0gZmll bGRfdHlwZSAqKSgoY2hhciAqKWluZm8gKyBpbmZvX3NpemUpOzxicj4rIGluZm8tJmd0O2NvbGxf aWRzID0gKHVpbnQzMl90ICopKChjaGFyICopaW5mby0mZ3Q7dHlwZXMgKyBmaWVsZF9zaXplKTs8 YnI+KyBpbmZvLSZndDtwYXJ0cyA9IHBhcnRfY291bnQgPT0gMCA/IE5VTEwgOjxicj4rICh1aW50 MzJfdCAqKSgoY2hhciAqKWluZm8tJmd0O2NvbGxfaWRzICsgY29sbHNfc2l6ZSk7PGJyPisgaW5m by0mZ3Q7c29ydF9vcmRlcnMgPSBwYXJ0X2NvdW50ID09IDAgPyBOVUxMIDo8YnI+KyAodWludDMy X3QgKikoKGNoYXIgKilpbmZvLSZndDtwYXJ0cyArIHBhcnRzX3NpemUpOzxicj4rIGluZm8tJmd0 O2ZpZWxkX2NvdW50ID0gZmllbGRfY291bnQ7PGJyPisgaW5mby0mZ3Q7cGFydF9jb3VudCA9IHBh cnRfY291bnQ7PGJyPiZuYnNwOzxicj4tIHN0cnVjdCByZWdpb24gKnJlZ2lvbiA9ICZhbXA7Zmli ZXIoKS0mZ3Q7Z2M7PGJyPisgZm9yICh1aW50MzJfdCBpID0gMDsgaSAmbHQ7IGZpZWxkX2NvdW50 OyArK2kpIHs8YnI+KyBpbmZvLSZndDt0eXBlc1tpXSA9IEZJRUxEX1RZUEVfU0NBTEFSOzxicj4r IGluZm8tJmd0O2NvbGxfaWRzW2ldID0gQ09MTF9OT05FOzxicj4rIH08YnI+KyBmb3IgKHVpbnQz Ml90IGkgPSAwOyBpICZsdDsgcGFydF9jb3VudDsgKytpKSB7PGJyPisgaW5mby0mZ3Q7cGFydHNb aV0gPSBpOzxicj4rIGluZm8tJmd0O3NvcnRfb3JkZXJzW2ldID0gU09SVF9PUkRFUl9BU0M7PGJy Pis8YnI+KyB9PGJyPisgcmV0dXJuIGluZm87PGJyPit9PGJyPis8YnI+K3N0cnVjdCBzcWxfc3Bh Y2VfaW5mbyAqPGJyPitzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9zcGFjZV9kZWYoY29uc3Qgc3Ry dWN0IHNwYWNlX2RlZiAqZGVmKTxicj4rezxicj4rIHVpbnQzMl90IGZpZWxkX2NvdW50ID0gZGVm LSZndDtmaWVsZF9jb3VudCArIDE7PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0g c3FsX3NwYWNlX2luZm9fbmV3KGZpZWxkX2NvdW50LCAwKTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxM KTxicj4rIHJldHVybiBOVUxMOzxicj4rIGZvciAodWludDMyX3QgaSA9IDA7IGkgJmx0OyBkZWYt Jmd0O2ZpZWxkX2NvdW50OyArK2kpIHs8YnI+KyBpbmZvLSZndDt0eXBlc1tpXSA9IGRlZi0mZ3Q7 ZmllbGRzW2ldLnR5cGU7PGJyPisgaW5mby0mZ3Q7Y29sbF9pZHNbaV0gPSBkZWYtJmd0O2ZpZWxk c1tpXS5jb2xsX2lkOzxicj4rIH08YnI+KyAvKiBBZGQgb25lIG1vcmUgZmllbGQgZm9yIHJvd2lk LiAqLzxicj4rIGluZm8tJmd0O3R5cGVzW2RlZi0mZ3Q7ZmllbGRfY291bnRdID0gRklFTERfVFlQ RV9JTlRFR0VSOzxicj4rIHJldHVybiBpbmZvOzxicj4rfTxicj4rPGJyPitzdHJ1Y3Qgc3FsX3Nw YWNlX2luZm8gKjxicj4rc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21faW5kZXhfZGVmKGNvbnN0IHN0 cnVjdCBpbmRleF9kZWYgKmRlZiwgYm9vbCBoYXNfcm93aWQpPGJyPit7PGJyPisgdWludDMyX3Qg ZmllbGRfY291bnQgPSBkZWYtJmd0O2tleV9kZWYtJmd0O3BhcnRfY291bnQ7PGJyPisgaWYgKGhh c19yb3dpZCk8YnI+KyArK2ZpZWxkX2NvdW50Ozxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAq aW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ldyhmaWVsZF9jb3VudCwgMCk7PGJyPisgaWYgKGluZm8g PT0gTlVMTCk8YnI+KyByZXR1cm4gTlVMTDs8YnI+KyBmb3IgKHVpbnQzMl90IGkgPSAwOyBpICZs dDsgZGVmLSZndDtrZXlfZGVmLSZndDtwYXJ0X2NvdW50OyArK2kpIHs8YnI+KyBpbmZvLSZndDt0 eXBlc1tpXSA9IGRlZi0mZ3Q7a2V5X2RlZi0mZ3Q7cGFydHNbaV0udHlwZTs8YnI+KyBpbmZvLSZn dDtjb2xsX2lkc1tpXSA9IGRlZi0mZ3Q7a2V5X2RlZi0mZ3Q7cGFydHNbaV0uY29sbF9pZDs8YnI+ KyB9PGJyPisgaWYgKGhhc19yb3dpZCk8YnI+KyBpbmZvLSZndDt0eXBlc1tkZWYtJmd0O2tleV9k ZWYtJmd0O3BhcnRfY291bnRdID0gRklFTERfVFlQRV9JTlRFR0VSOzxicj4rIHJldHVybiBpbmZv Ozxicj4rfTxicj4rPGJyPitzdHJ1Y3Qgc3BhY2UgKjxicj4rc3FsX2VwaGVtZXJhbF9zcGFjZV9u ZXcoY29uc3Qgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvKTxicj4rezxicj4rIHVpbnQzMl90 IGZpZWxkX2NvdW50ID0gaW5mby0mZ3Q7ZmllbGRfY291bnQ7PGJyPisgdWludDMyX3QgcGFydF9j b3VudCA9IGluZm8tJmd0O3BhcnRzID09IE5VTEwgPyBmaWVsZF9jb3VudCA6PGJyPisgaW5mby0m Z3Q7cGFydF9jb3VudDs8YnI+KyB1aW50MzJfdCBwYXJ0c19pbmRlbnQgPSBmaWVsZF9jb3VudCAq IHNpemVvZihzdHJ1Y3QgZmllbGRfZGVmKTs8YnI+KyB1aW50MzJfdCBuYW1lc19pbmRlbnQgPSBw YXJ0X2NvdW50ICogc2l6ZW9mKHN0cnVjdCBrZXlfcGFydF9kZWYpICs8YnI+KyBwYXJ0c19pbmRl bnQ7PGJyPiZuYnNwOyAvKjxicj4tICogTmFtZSBvZiB0aGUgZmllbGRzIHdpbGwgYmUgIl9DT0xV TU5fMSIsICJfQ09MVU1OXzIiPGJyPi0gKiBhbmQgc28gb24uIER1ZSB0byB0aGlzLCBsZW5ndGgg b2YgZWFjaCBuYW1lIGlzIG5vIG1vcmU8YnI+LSAqIHRoYW4gc3RybGVuKCJfQ09MVU1OXyIpIHBs dXMgbGVuZ3RoIG9mIFVJTlQzMl9NQVg8YnI+LSAqIHR1cm5lZCB0byBzdHJpbmcsIHdoaWNoIGlz IDEwIGFuZCBwbHVzIDEgZm9yIFwwLjxicj4rICogTmFtZSBvZiB0aGUgZmllbGRzIHdpbGwgYmUg Il9DT0xVTU5fMSIsICJfQ09MVU1OXzIiIGFuZCBzbyBvbi4gRHVlIHRvPGJyPisgKiB0aGlzLCBs ZW5ndGggb2YgZWFjaCBuYW1lIGlzIG5vIG1vcmUgdGhhbiAxOSA9PSBzdHJsZW4oIl9DT0xVTU5f Iik8YnI+KyAqIHBsdXMgbGVuZ3RoIG9mIFVJTlQzMl9NQVggdHVybmVkIHRvIHN0cmluZywgd2hp Y2ggaXMgMTAgYW5kIHBsdXMgMTxicj4rICogZm9yICdcMCcuPGJyPiZuYnNwOyAqLzxicj4tIHVp bnQzMl90IG5hbWVfbGVuID0gc3RybGVuKCJfQ09MVU1OXyIpICsgMTE7PGJyPi0gdWludDMyX3Qg c2l6ZSA9IGZpZWxkX2NvdW50ICogKHNpemVvZihzdHJ1Y3QgZmllbGRfZGVmKSArIG5hbWVfbGVu KSArPGJyPi0gcGFydF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qga2V5X3BhcnRfZGVmKTs8YnI+KyB1 aW50MzJfdCBzaXplID0gbmFtZXNfaW5kZW50ICsgZmllbGRfY291bnQgKiAxOTs8YnI+Kzxicj4r IHN0cnVjdCByZWdpb24gKnJlZ2lvbiA9ICZhbXA7ZmliZXIoKS0mZ3Q7Z2M7PGJyPisgc2l6ZV90 IHN2cCA9IHJlZ2lvbl91c2VkKHJlZ2lvbik7PGJyPiZuYnNwOyBzdHJ1Y3QgZmllbGRfZGVmICpm aWVsZHMgPSByZWdpb25fYWxpZ25lZF9hbGxvYyhyZWdpb24sIHNpemUsPGJyPiZuYnNwOyBhbGln bm9mKGZpZWxkc1swXSkpOzxicj4mbmJzcDsgaWYgKGZpZWxkcyA9PSBOVUxMKSB7PGJyPiZuYnNw OyBkaWFnX3NldChPdXRPZk1lbW9yeSwgc2l6ZSwgInJlZ2lvbl9hbGlnbmVkX2FsbG9jIiwgImZp ZWxkcyIpOzxicj4mbmJzcDsgcmV0dXJuIE5VTEw7PGJyPiZuYnNwOyB9PGJyPi0gc3RydWN0IGtl eV9wYXJ0X2RlZiAqZXBoZW1lcl9rZXlfcGFydHMgPTxicj4tICh2b2lkICopZmllbGRzICsgZmll bGRfY291bnQgKiBzaXplb2Yoc3RydWN0IGZpZWxkX2RlZik7PGJyPi0gc3RhdGljX2Fzc2VydChh bGlnbm9mKCpmaWVsZHMpID09IGFsaWdub2YoKmVwaGVtZXJfa2V5X3BhcnRzKSw8YnI+LSAiYWxs b2NhdGVkIGluIG9uZSBibG9jaywgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lICI8YnI+LSAiYWxp Z25tZW50Iik7PGJyPi0gY2hhciAqbmFtZXMgPSAoY2hhciAqKWVwaGVtZXJfa2V5X3BhcnRzICs8 YnI+LSBwYXJ0X2NvdW50ICogc2l6ZW9mKHN0cnVjdCBrZXlfcGFydF9kZWYpOzxicj4tIGZvciAo dWludDMyX3QgaSA9IDA7IGkgJmx0OyBmaWVsZF9jb3VudDsgKytpKSB7PGJyPi0gc3RydWN0IGZp ZWxkX2RlZiAqZmllbGQgPSAmYW1wO2ZpZWxkc1tpXTs8YnI+LSBmaWVsZC0mZ3Q7bmFtZSA9IG5h bWVzOzxicj4tIG5hbWVzICs9IG5hbWVfbGVuOzxicj4tIHNwcmludGYoZmllbGQtJmd0O25hbWUs ICJfQ09MVU1OXyVkIiwgaSk7PGJyPi0gZmllbGQtJmd0O2lzX251bGxhYmxlID0gdHJ1ZTs8YnI+ LSBmaWVsZC0mZ3Q7bnVsbGFibGVfYWN0aW9uID0gT05fQ09ORkxJQ1RfQUNUSU9OX05PTkU7PGJy Pi0gZmllbGQtJmd0O2RlZmF1bHRfdmFsdWUgPSBOVUxMOzxicj4tIGZpZWxkLSZndDtkZWZhdWx0 X3ZhbHVlX2V4cHIgPSBOVUxMOzxicj4tIGlmIChkZWYgIT0gTlVMTCAmYW1wOyZhbXA7IGkgJmx0 OyBkZWYtJmd0O3BhcnRfY291bnQpIHs8YnI+LSBhc3NlcnQoZGVmLSZndDtwYXJ0c1tpXS50eXBl ICZsdDsgZmllbGRfdHlwZV9NQVgpOzxicj4tIGZpZWxkLSZndDt0eXBlID0gZGVmLSZndDtwYXJ0 c1tpXS50eXBlOzxicj4tIGZpZWxkLSZndDtjb2xsX2lkID0gZGVmLSZndDtwYXJ0c1tpXS5jb2xs X2lkOzxicj4tIH0gZWxzZSB7PGJyPi0gZmllbGQtJmd0O2NvbGxfaWQgPSBDT0xMX05PTkU7PGJy Pi0gZmllbGQtJmd0O3R5cGUgPSBGSUVMRF9UWVBFX1NDQUxBUjs8YnI+LSB9PGJyPisgc3RydWN0 IGtleV9wYXJ0X2RlZiAqcGFydHMgPSAoc3RydWN0IGtleV9wYXJ0X2RlZiAqKSgoY2hhciAqKWZp ZWxkcyArPGJyPisgcGFydHNfaW5kZW50KTs8YnI+KyBzdGF0aWNfYXNzZXJ0KGFsaWdub2YoKmZp ZWxkcykgPT0gYWxpZ25vZigqcGFydHMpLCAiYWxsb2NhdGVkIGluIG9uZSAiPGJyPisgImJsb2Nr LCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50Iik7PGJyPisgY2hhciAqbmFtZXMg PSAoY2hhciAqKWZpZWxkcyArIG5hbWVzX2luZGVudDs8YnI+Kzxicj4rIGZvciAodWludDMyX3Qg aSA9IDA7IGkgJmx0OyBpbmZvLSZndDtmaWVsZF9jb3VudDsgKytpKSB7PGJyPisgZmllbGRzW2ld Lm5hbWUgPSBuYW1lczs8YnI+KyBzcHJpbnRmKG5hbWVzLCAiX0NPTFVNTl8lZCIsIGkpOzxicj4r IG5hbWVzICs9IHN0cmxlbihmaWVsZHNbaV0ubmFtZSkgKyAxOzxicj4rIGZpZWxkc1tpXS5pc19u dWxsYWJsZSA9IHRydWU7PGJyPisgZmllbGRzW2ldLm51bGxhYmxlX2FjdGlvbiA9IE9OX0NPTkZM SUNUX0FDVElPTl9OT05FOzxicj4rIGZpZWxkc1tpXS5kZWZhdWx0X3ZhbHVlID0gTlVMTDs8YnI+ KyBmaWVsZHNbaV0uZGVmYXVsdF92YWx1ZV9leHByID0gTlVMTDs8YnI+KyBmaWVsZHNbaV0udHlw ZSA9IGluZm8tJmd0O3R5cGVzW2ldOzxicj4rIGZpZWxkc1tpXS5jb2xsX2lkID0gaW5mby0mZ3Q7 Y29sbF9pZHNbaV07PGJyPiZuYnNwOyB9PGJyPi08YnI+Jm5ic3A7IGZvciAodWludDMyX3QgaSA9 IDA7IGkgJmx0OyBwYXJ0X2NvdW50OyArK2kpIHs8YnI+LSBzdHJ1Y3Qga2V5X3BhcnRfZGVmICpw YXJ0ID0gJmFtcDtlcGhlbWVyX2tleV9wYXJ0c1tpXTs8YnI+LSAvKjxicj4tICogSW4gY2FzZSB3 ZSBuZWVkIHRvIHNhdmUgaW5pdGlhbCBvcmRlciBvZjxicj4tICogaW5zZXJ0ZWQgaW50byBlcGhl bWVyYWwgc3BhY2Ugcm93cyB3ZSB1c2Ugcm93aWQ8YnI+LSAqIGFzIHRoZSBvbmx5IHBhcnQgb2Yg UEsuIElmIGVwaGVtZXJhbCBzcGFjZSBoYXM8YnI+LSAqIGEgcm93aWQsIGl0IGlzIGFsd2F5cyB0 aGUgbGFzdCBjb2x1bW4uPGJyPi0gKi88YnI+LSB1aW50MzJfdCBqID0gaTs8YnI+LSBpZiAoa2V5 X2luZm8gIT0gTlVMTCAmYW1wOyZhbXA7IGtleV9pbmZvLSZndDtpc19wa19yb3dpZCk8YnI+LSBq ID0gZmllbGRfY291bnQgLSAxOzxicj4tIHBhcnQtJmd0O2ZpZWxkbm8gPSBqOzxicj4tIHBhcnQt Jmd0O251bGxhYmxlX2FjdGlvbiA9IE9OX0NPTkZMSUNUX0FDVElPTl9OT05FOzxicj4tIHBhcnQt Jmd0O2lzX251bGxhYmxlID0gdHJ1ZTs8YnI+LSBwYXJ0LSZndDtleGNsdWRlX251bGwgPSBmYWxz ZTs8YnI+LSBwYXJ0LSZndDtzb3J0X29yZGVyID0gU09SVF9PUkRFUl9BU0M7PGJyPi0gcGFydC0m Z3Q7cGF0aCA9IE5VTEw7PGJyPi0gcGFydC0mZ3Q7dHlwZSA9IGZpZWxkc1tqXS50eXBlOzxicj4t IHBhcnQtJmd0O2NvbGxfaWQgPSBmaWVsZHNbal0uY29sbF9pZDs8YnI+KyB1aW50MzJfdCBqID0g aW5mby0mZ3Q7cGFydHMgPT0gTlVMTCA/IGkgOiBpbmZvLSZndDtwYXJ0c1tpXTs8YnI+KyBwYXJ0 c1tpXS5maWVsZG5vID0gajs8YnI+KyBwYXJ0c1tpXS5udWxsYWJsZV9hY3Rpb24gPSBPTl9DT05G TElDVF9BQ1RJT05fTk9ORTs8YnI+KyBwYXJ0c1tpXS5pc19udWxsYWJsZSA9IHRydWU7PGJyPisg cGFydHNbaV0uZXhjbHVkZV9udWxsID0gZmFsc2U7PGJyPisgcGFydHNbaV0uc29ydF9vcmRlciA9 IFNPUlRfT1JERVJfQVNDOzxicj4rIHBhcnRzW2ldLnBhdGggPSBOVUxMOzxicj4rIHBhcnRzW2ld LnR5cGUgPSBpbmZvLSZndDt0eXBlc1tqXTs8YnI+KyBwYXJ0c1tpXS5jb2xsX2lkID0gaW5mby0m Z3Q7Y29sbF9pZHNbal07PGJyPiZuYnNwOyB9PGJyPi0gc3RydWN0IGtleV9kZWYgKmVwaGVtZXJf a2V5X2RlZiA9IGtleV9kZWZfbmV3KGVwaGVtZXJfa2V5X3BhcnRzLDxicj4tIHBhcnRfY291bnQs IGZhbHNlKTs8YnI+LSBpZiAoZXBoZW1lcl9rZXlfZGVmID09IE5VTEwpPGJyPis8YnI+KyBzdHJ1 Y3Qga2V5X2RlZiAqa2V5X2RlZiA9IGtleV9kZWZfbmV3KHBhcnRzLCBwYXJ0X2NvdW50LCBmYWxz ZSk7PGJyPisgaWYgKGtleV9kZWYgPT0gTlVMTCk8YnI+Jm5ic3A7IHJldHVybiBOVUxMOzxicj4m bmJzcDs8YnI+LSBzdHJ1Y3QgaW5kZXhfZGVmICplcGhlbWVyX2luZGV4X2RlZiA9PGJyPi0gaW5k ZXhfZGVmX25ldygwLCAwLCAiZXBoZW1lcl9pZHgiLCBzdHJsZW4oImVwaGVtZXJfaWR4IiksIFRS RUUsPGJyPi0gJmFtcDtpbmRleF9vcHRzX2RlZmF1bHQsIGVwaGVtZXJfa2V5X2RlZiwgTlVMTCk7 PGJyPi0ga2V5X2RlZl9kZWxldGUoZXBoZW1lcl9rZXlfZGVmKTs8YnI+LSBpZiAoZXBoZW1lcl9p bmRleF9kZWYgPT0gTlVMTCk8YnI+KyBjb25zdCBjaGFyICpuYW1lID0gImVwaGVtZXJfaWR4Ijs8 YnI+KyBzdHJ1Y3QgaW5kZXhfZGVmICppbmRleF9kZWYgPSBpbmRleF9kZWZfbmV3KDAsIDAsIG5h bWUsIHN0cmxlbihuYW1lKSw8YnI+KyBUUkVFLCAmYW1wO2luZGV4X29wdHNfZGVmYXVsdCw8YnI+ KyBrZXlfZGVmLCBOVUxMKTs8YnI+KyBrZXlfZGVmX2RlbGV0ZShrZXlfZGVmKTs8YnI+KyBpZiAo aW5kZXhfZGVmID09IE5VTEwpPGJyPiZuYnNwOyByZXR1cm4gTlVMTDs8YnI+Jm5ic3A7PGJyPiZu YnNwOyBzdHJ1Y3Qgcmxpc3Qga2V5X2xpc3Q7PGJyPiZuYnNwOyBybGlzdF9jcmVhdGUoJmFtcDtr ZXlfbGlzdCk7PGJyPi0gcmxpc3RfYWRkX2VudHJ5KCZhbXA7a2V5X2xpc3QsIGVwaGVtZXJfaW5k ZXhfZGVmLCBsaW5rKTs8YnI+KyBybGlzdF9hZGRfZW50cnkoJmFtcDtrZXlfbGlzdCwgaW5kZXhf ZGVmLCBsaW5rKTs8YnI+Jm5ic3A7PGJyPi0gc3RydWN0IHNwYWNlX2RlZiAqZXBoZW1lcl9zcGFj ZV9kZWYgPTxicj4tIHNwYWNlX2RlZl9uZXdfZXBoZW1lcmFsKGZpZWxkX2NvdW50LCBmaWVsZHMp Ozxicj4tIGlmIChlcGhlbWVyX3NwYWNlX2RlZiA9PSBOVUxMKSB7PGJyPi0gaW5kZXhfZGVmX2Rl bGV0ZShlcGhlbWVyX2luZGV4X2RlZik7PGJyPisgc3RydWN0IHNwYWNlX2RlZiAqc3BhY2VfZGVm ID0gc3BhY2VfZGVmX25ld19lcGhlbWVyYWwoZmllbGRfY291bnQsPGJyPisgZmllbGRzKTs8YnI+ KyBpZiAoc3BhY2VfZGVmID09IE5VTEwpIHs8YnI+KyBpbmRleF9kZWZfZGVsZXRlKGluZGV4X2Rl Zik7PGJyPiZuYnNwOyByZXR1cm4gTlVMTDs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7PGJyPi0gc3Ry dWN0IHNwYWNlICplcGhlbWVyX25ld19zcGFjZSA9IHNwYWNlX25ld19lcGhlbWVyYWwoZXBoZW1l cl9zcGFjZV9kZWYsPGJyPi0gJmFtcDtrZXlfbGlzdCk7PGJyPi0gaW5kZXhfZGVmX2RlbGV0ZShl cGhlbWVyX2luZGV4X2RlZik7PGJyPi0gc3BhY2VfZGVmX2RlbGV0ZShlcGhlbWVyX3NwYWNlX2Rl Zik7PGJyPisgc3RydWN0IHNwYWNlICpzcGFjZSA9IHNwYWNlX25ld19lcGhlbWVyYWwoc3BhY2Vf ZGVmLCAmYW1wO2tleV9saXN0KTs8YnI+KyBpbmRleF9kZWZfZGVsZXRlKGluZGV4X2RlZik7PGJy Pisgc3BhY2VfZGVmX2RlbGV0ZShzcGFjZV9kZWYpOzxicj4rIHJlZ2lvbl90cnVuY2F0ZShyZWdp b24sIHN2cCk7PGJyPiZuYnNwOzxicj4tIHJldHVybiBlcGhlbWVyX25ld19zcGFjZTs8YnI+KyBy ZXR1cm4gc3BhY2U7PGJyPiZuYnNwO308YnI+Jm5ic3A7PGJyPiZuYnNwO2ludCB0YXJhbnRvb2xz cWxFcGhlbWVyYWxJbnNlcnQoc3RydWN0IHNwYWNlICpzcGFjZSwgY29uc3QgY2hhciAqdHVwbGUs PGJyPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC9kZWxldGUuYyBiL3NyYy9ib3gvc3FsL2RlbGV0 ZS5jPGJyPmluZGV4IDUyMjZkZDZlYS4uYjgyYTY4NzRlIDEwMDY0NDxicj4tLS0gYS9zcmMvYm94 L3NxbC9kZWxldGUuYzxicj4rKysgYi9zcmMvYm94L3NxbC9kZWxldGUuYzxicj5AQCAtMjI0LDEy ICsyMjQsMTMgQEAgc3FsX3RhYmxlX2RlbGV0ZV9mcm9tKHN0cnVjdCBQYXJzZSAqcGFyc2UsIHN0 cnVjdCBTcmNMaXN0ICp0YWJfbGlzdCw8YnI+Jm5ic3A7ICogaXMgaGVsZCBpbiBlcGhlbWVyYWwg dGFibGUsIHRoZXJlIGlzIG5vIFBLIGZvcjxicj4mbmJzcDsgKiBpdCwgc28gY29sdW1ucyBzaG91 bGQgYmUgbG9hZGVkIG1hbnVhbGx5Ljxicj4mbmJzcDsgKi88YnI+LSBzdHJ1Y3Qgc3FsX2tleV9p bmZvICpwa19pbmZvID0gTlVMTDs8YnI+Jm5ic3A7IGludCByZWdfZXBoID0gKytwYXJzZS0mZ3Q7 bk1lbTs8YnI+Jm5ic3A7IGludCByZWdfcGsgPSBwYXJzZS0mZ3Q7bk1lbSArIDE7PGJyPi0gaW50 IHBrX2xlbjs8YnI+KyBpbnQgcGtfbGVuID0gaXNfdmlldyA/IHNwYWNlLSZndDtkZWYtJmd0O2Zp ZWxkX2NvdW50ICsgMSA6PGJyPisgc3BhY2UtJmd0O2luZGV4WzBdLSZndDtkZWYtJmd0O2tleV9k ZWYtJmd0O3BhcnRfY291bnQ7PGJyPiZuYnNwOyBpbnQgZXBoX2N1cnNvciA9IHBhcnNlLSZndDtu VGFiKys7PGJyPiZuYnNwOyBpbnQgYWRkcl9lcGhfb3BlbiA9IHNxbFZkYmVDdXJyZW50QWRkcih2 KTs8YnI+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm87PGJyPiZuYnNwOyBpZiAoaXNfdmll dykgezxicj4mbmJzcDsgLyo8YnI+Jm5ic3A7ICogQXQgdGhpcyBzdGFnZSBTRUxFQ1QgaXMgYWxy ZWFkeSBtYXRlcmlhbGl6ZWQ8YnI+QEAgLTI0OSwyMiArMjUwLDIwIEBAIHNxbF90YWJsZV9kZWxl dGVfZnJvbShzdHJ1Y3QgUGFyc2UgKnBhcnNlLCBzdHJ1Y3QgU3JjTGlzdCAqdGFiX2xpc3QsPGJy PiZuYnNwOyAqIGFjY291bnQgdGhhdCBpZCBmaWVsZCBhcyB3ZWxsLiBUaGF0J3Mgd2h5IHBrX2xl bjxicj4mbmJzcDsgKiBoYXMgb25lIGZpZWxkIG1vcmUgdGhhbiB2aWV3IGZvcm1hdC48YnI+Jm5i c3A7ICovPGJyPi0gcGtfbGVuID0gc3BhY2UtJmd0O2RlZi0mZ3Q7ZmllbGRfY291bnQgKyAxOzxi cj4tIHBhcnNlLSZndDtuTWVtICs9IHBrX2xlbjs8YnI+LSBzcWxWZGJlQWRkT3AyKHYsIE9QX09w ZW5URXBoZW1lcmFsLCByZWdfZXBoLDxicj4tIHBrX2xlbik7PGJyPisgaW5mbyA9IHNxbF9zcGFj ZV9pbmZvX25ld19mcm9tX3NwYWNlX2RlZihzcGFjZS0mZ3Q7ZGVmKTs8YnI+Jm5ic3A7IH0gZWxz ZSB7PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2Fzc2VydChzcGFjZS0m Z3Q7aW5kZXhfY291bnQgJmd0OyAwKTs8YnI+LSBwa19pbmZvID0gc3FsX2tleV9pbmZvX25ld19m cm9tX2tleV9kZWYoZGIsPGJyPi0gc3BhY2UtJmd0O2luZGV4WzBdLSZndDtkZWYtJmd0O2tleV9k ZWYpOzxicj4tIGlmIChwa19pbmZvID09IE5VTEwpPGJyPi0gZ290byBkZWxldGVfZnJvbV9jbGVh bnVwOzxicj4tIHBrX2xlbiA9IHBrX2luZm8tJmd0O3BhcnRfY291bnQ7PGJyPi0gcGFyc2UtJmd0 O25NZW0gKz0gcGtfbGVuOzxicj4tIHNxbFZkYmVBZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWws IHJlZ19lcGgsPGJyPi0gcGtfbGVuLCAwLDxicj4tIChjaGFyICopcGtfaW5mbywgUDRfS0VZSU5G Tyk7PGJyPisgc3RydWN0IGluZGV4X2RlZiAqaW5kZXhfZGVmID0gc3BhY2UtJmd0O2luZGV4WzBd LSZndDtkZWY7PGJyPisgaW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ld19mcm9tX2luZGV4X2RlZihp bmRleF9kZWYsPGJyPisgZmFsc2UpOzxicj4mbmJzcDsgfTxicj4rIGlmIChpbmZvID09IE5VTEwp IHs8YnI+KyBwYXJzZS0mZ3Q7aXNfYWJvcnRlZCA9IHRydWU7PGJyPisgZ290byBkZWxldGVfZnJv bV9jbGVhbnVwOzxicj4rIH08YnI+KyBwYXJzZS0mZ3Q7bk1lbSArPSBwa19sZW47PGJyPisgc3Fs VmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2VwaCwgMCwgMCwgKGNoYXIgKilp bmZvLDxicj4rIFA0X0RZTkFNSUMpOzxicj4mbmJzcDs8YnI+Jm5ic3A7IC8qIENvbnN0cnVjdCBh IHF1ZXJ5IHRvIGZpbmQgdGhlIHByaW1hcnkga2V5IGZvcjxicj4mbmJzcDsgKiBldmVyeSByb3cg dG8gYmUgZGVsZXRlZCwgYmFzZWQgb24gdGhlIFdIRVJFPGJyPkBAIC0yOTUsOCArMjk0LDkgQEAg c3FsX3RhYmxlX2RlbGV0ZV9mcm9tKHN0cnVjdCBQYXJzZSAqcGFyc2UsIHN0cnVjdCBTcmNMaXN0 ICp0YWJfbGlzdCw8YnI+Jm5ic3A7PGJyPiZuYnNwOyAvKiBFeHRyYWN0IHRoZSBwcmltYXJ5IGtl eSBmb3IgdGhlIGN1cnJlbnQgcm93ICovPGJyPiZuYnNwOyBpZiAoIWlzX3ZpZXcpIHs8YnI+LSBz dHJ1Y3Qga2V5X3BhcnRfZGVmICpwYXJ0ID0gcGtfaW5mby0mZ3Q7cGFydHM7PGJyPi0gZm9yIChp bnQgaSA9IDA7IGkgJmx0OyBwa19sZW47IGkrKywgcGFydCsrKSB7PGJyPisgc3RydWN0IGtleV9k ZWYgKmRlZiA9IHNwYWNlLSZndDtpbmRleFswXS0mZ3Q7ZGVmLSZndDtrZXlfZGVmOzxicj4rIGZv ciAoaW50IGkgPSAwOyBpICZsdDsgcGtfbGVuOyBpKyspIHs8YnI+KyBzdHJ1Y3Qga2V5X3BhcnQg KnBhcnQgPSAmYW1wO2RlZi0mZ3Q7cGFydHNbaV07PGJyPiZuYnNwOyBzcWxWZGJlQWRkT3AzKHYs IE9QX0NvbHVtbiwgdGFiX2N1cnNvciw8YnI+Jm5ic3A7IHBhcnQtJmd0O2ZpZWxkbm8sIHJlZ19w ayArIGkpOzxicj4mbmJzcDsgfTxicj5AQCAtMzczLDcgKzM3Myw2IEBAIHNxbF90YWJsZV9kZWxl dGVfZnJvbShzdHJ1Y3QgUGFyc2UgKnBhcnNlLCBzdHJ1Y3QgU3JjTGlzdCAqdGFiX2xpc3QsPGJy PiZuYnNwOyBpZiAob25lX3Bhc3MgIT0gT05FUEFTU19PRkYpIHs8YnI+Jm5ic3A7IC8qIE9QX0Zv dW5kIHdpbGwgdXNlIGFuIHVucGFja2VkIGtleS4gKi88YnI+Jm5ic3A7IGFzc2VydChrZXlfbGVu ID09IHBrX2xlbik7PGJyPi0gYXNzZXJ0KHBrX2luZm8gIT0gTlVMTCB8fCBzcGFjZS0mZ3Q7ZGVm LSZndDtvcHRzLmlzX3ZpZXcpOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wNEludCh2LCBPUF9Ob3RG b3VuZCwgdGFiX2N1cnNvciw8YnI+Jm5ic3A7IGFkZHJfYnlwYXNzLCByZWdfa2V5LCBrZXlfbGVu KTs8YnI+Jm5ic3A7PGJyPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC9leHByLmMgYi9zcmMvYm94 L3NxbC9leHByLmM8YnI+aW5kZXggNmY0MDE4M2FjLi44OTAyYzY0OGYgMTAwNjQ0PGJyPi0tLSBh L3NyYy9ib3gvc3FsL2V4cHIuYzxicj4rKysgYi9zcmMvYm94L3NxbC9leHByLmM8YnI+QEAgLTI3 NDAsNyArMjc0MCw2IEBAIHNxbENvZGVTdWJzZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNp bmcgY29udGV4dCAqLzxicj4mbmJzcDs8YnI+Jm5ic3A7IHN3aXRjaCAocEV4cHItJmd0O29wKSB7 PGJyPiZuYnNwOyBjYXNlIFRLX0lOOns8YnI+LSBpbnQgYWRkcjsgLyogQWRkcmVzcyBvZiBPUF9P cGVuRXBoZW1lcmFsIGluc3RydWN0aW9uICovPGJyPiZuYnNwOyBFeHByICpwTGVmdCA9IHBFeHBy LSZndDtwTGVmdDsgLyogdGhlIExIUyBvZiB0aGUgSU4gb3BlcmF0b3IgKi88YnI+Jm5ic3A7IGlu dCBuVmFsOyAvKiBTaXplIG9mIHZlY3RvciBwTGVmdCAqLzxicj4mbmJzcDs8YnI+QEAgLTI3NjEs MTMgKzI3NjAsMTQgQEAgc3FsQ29kZVN1YnNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2lu ZyBjb250ZXh0ICovPGJyPiZuYnNwOyAqLzxicj4mbmJzcDsgcEV4cHItJmd0O2lUYWJsZSA9IHBQ YXJzZS0mZ3Q7blRhYisrOzxicj4mbmJzcDsgaW50IHJlZ19lcGggPSArK3BQYXJzZS0mZ3Q7bk1l bTs8YnI+LSBhZGRyID0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCw8YnI+LSBy ZWdfZXBoLCBuVmFsKTs8YnI+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPTxicj4rIHNx bF9zcGFjZV9pbmZvX25ldyhuVmFsLCAwKTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxMKTxicj4rIHJl dHVybiAwOzxicj4rIHNxbFZkYmVBZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19lcGgs IDAsIDAsPGJyPisgKGNoYXIgKilpbmZvLCBQNF9EWU5BTUlDKTs8YnI+Jm5ic3A7IHNxbFZkYmVB ZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLCBwRXhwci0mZ3Q7aVRhYmxlLCAwLDxicj4mbmJzcDsg cmVnX2VwaCk7PGJyPi0gc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8gPSBzcWxfa2V5X2lu Zm9fbmV3KHBQYXJzZS0mZ3Q7ZGIsIG5WYWwpOzxicj4tIGlmIChrZXlfaW5mbyA9PSBOVUxMKTxi cj4tIHJldHVybiAwOzxicj4mbmJzcDs8YnI+Jm5ic3A7IGlmIChFeHBySGFzUHJvcGVydHkocEV4 cHIsIEVQX3hJc1NlbGVjdCkpIHs8YnI+Jm5ic3A7IC8qIENhc2UgMTogZXhwciBJTiAoU0VMRUNU IC4uLik8YnI+QEAgLTI3OTcsNyArMjc5Nyw2IEBAIHNxbENvZGVTdWJzZWxlY3QoUGFyc2UgKiBw UGFyc2UsIC8qIFBhcnNpbmcgY29udGV4dCAqLzxicj4mbmJzcDsgKHBQYXJzZSwgcFNlbGVjdCwg JmFtcDtkZXN0KSkgezxicj4mbmJzcDsgc3FsRGJGcmVlKHBQYXJzZS0mZ3Q7ZGIsPGJyPiZuYnNw OyBkZXN0LmRlc3RfdHlwZSk7PGJyPi0gc3FsX2tleV9pbmZvX3VucmVmKGtleV9pbmZvKTs8YnI+ Jm5ic3A7IHJldHVybiAwOzxicj4mbmJzcDsgfTxicj4mbmJzcDsgc3FsRGJGcmVlKHBQYXJzZS0m Z3Q7ZGIsPGJyPkBAIC0yODA5LDcgKzI4MDgsNyBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICog cFBhcnNlLCAvKiBQYXJzaW5nIGNvbnRleHQgKi88YnI+Jm5ic3A7IHNxbFZlY3RvckZpZWxkU3Vi ZXhwcjxicj4mbmJzcDsgKHBMZWZ0LCBpKTs8YnI+Jm5ic3A7IGlmIChzcWxfYmluYXJ5X2NvbXBh cmVfY29sbF9zZXEocFBhcnNlLCBwLCBwRUxpc3QtJmd0O2FbaV0ucEV4cHIsPGJyPi0gJmFtcDtr ZXlfaW5mby0mZ3Q7cGFydHNbaV0uY29sbF9pZCkgIT0gMCk8YnI+KyAmYW1wO2luZm8tJmd0O2Nv bGxfaWRzW2ldKSAhPSAwKTxicj4mbmJzcDsgcmV0dXJuIDA7PGJyPiZuYnNwOyB9PGJyPiZuYnNw OyB9PGJyPkBAIC0yODI5LDcgKzI4MjgsNyBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICogcFBh cnNlLCAvKiBQYXJzaW5nIGNvbnRleHQgKi88YnI+Jm5ic3A7IGJvb2wgdW51c2VkOzxicj4mbmJz cDsgc3RydWN0IGNvbGwgKnVudXNlZF9jb2xsOzxicj4mbmJzcDsgaWYgKHNxbF9leHByX2NvbGwo cFBhcnNlLCBwRXhwci0mZ3Q7cExlZnQsICZhbXA7dW51c2VkLDxicj4tICZhbXA7a2V5X2luZm8t Jmd0O3BhcnRzWzBdLmNvbGxfaWQsPGJyPisgJmFtcDtpbmZvLSZndDtjb2xsX2lkc1swXSw8YnI+ Jm5ic3A7ICZhbXA7dW51c2VkX2NvbGwpICE9IDApPGJyPiZuYnNwOyByZXR1cm4gMDs8YnI+Jm5i c3A7PGJyPkBAIC0yODYxLDggKzI4NjAsNiBAQCBzcWxDb2RlU3Vic2VsZWN0KFBhcnNlICogcFBh cnNlLCAvKiBQYXJzaW5nIGNvbnRleHQgKi88YnI+Jm5ic3A7IHNxbFJlbGVhc2VUZW1wUmVnKHBQ YXJzZSwgcjEpOzxicj4mbmJzcDsgc3FsUmVsZWFzZVRlbXBSZWcocFBhcnNlLCByMik7PGJyPiZu YnNwOyB9PGJyPi0gc3FsVmRiZUNoYW5nZVA0KHYsIGFkZHIsICh2b2lkICopa2V5X2luZm8sPGJy Pi0gUDRfS0VZSU5GTyk7PGJyPiZuYnNwOyBicmVhazs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7PGJy PmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC9pbnNlcnQuYyBiL3NyYy9ib3gvc3FsL2luc2VydC5j PGJyPmluZGV4IDIxYjRmMjQwNy4uMzQxYzIwMmEyIDEwMDY0NDxicj4tLS0gYS9zcmMvYm94L3Nx bC9pbnNlcnQuYzxicj4rKysgYi9zcmMvYm94L3NxbC9pbnNlcnQuYzxicj5AQCAtNjAsNiArNjAs MjcgQEAgc3FsX2VtaXRfdGFibGVfdHlwZXMoc3RydWN0IFZkYmUgKnYsIHN0cnVjdCBzcGFjZV9k ZWYgKmRlZiwgaW50IHJlZyk8YnI+Jm5ic3A7IChjaGFyICopY29sbHNfdHlwZSwgUDRfRFlOQU1J Qyk7PGJyPiZuYnNwO308YnI+Jm5ic3A7PGJyPitzdGF0aWMgc3RydWN0IHNxbF9zcGFjZV9pbmZv ICo8YnI+K3NxbF9zcGFjZV9pbmZvX25ld19mcm9tX2lkX2xpc3QoY29uc3Qgc3RydWN0IHNwYWNl X2RlZiAqZGVmLCBpbnQgbGVuLDxicj4rIGNvbnN0IHN0cnVjdCBJZExpc3QgKmxpc3QpPGJyPit7 PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsX3NwYWNlX2luZm9fbmV3KGxl biArIDEsIDEpOzxicj4rIGlmIChpbmZvID09IE5VTEwpPGJyPisgcmV0dXJuIE5VTEw7PGJyPisg YXNzZXJ0KGxlbiAmZ3Q7IDAgJmFtcDsmYW1wOyBsZW4gJmx0Oz0gKGludClkZWYtJmd0O2ZpZWxk X2NvdW50KTs8YnI+KyBzdHJ1Y3QgZmllbGRfZGVmICpmaWVsZHMgPSBkZWYtJmd0O2ZpZWxkczs8 YnI+KyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGxlbjsgKytpKSB7PGJyPisgaW50IGogPSBsaXN0 ID09IE5VTEwgPyBpIDogbGlzdC0mZ3Q7YVtpXS5pZHg7PGJyPisgaW5mby0mZ3Q7dHlwZXNbaV0g PSBmaWVsZHNbal0udHlwZTs8YnI+KyBpbmZvLSZndDtjb2xsX2lkc1tpXSA9IGZpZWxkc1tqXS5j b2xsX2lkOzxicj4rIH08YnI+KyAvKiBBZGQgb25lIG1vcmUgZmllbGQgZm9yIHJvd2lkLiAqLzxi cj4rIGluZm8tJmd0O3R5cGVzW2xlbl0gPSBGSUVMRF9UWVBFX0lOVEVHRVI7PGJyPisgLyogU2V0 IHJvd2lkIGFzIHRoZSBvbmx5IHBhcnQgb2YgcHJpbWFyeSBpbmRleC4gKi88YnI+KyBpbmZvLSZn dDtwYXJ0c1swXSA9IGxlbjs8YnI+KyByZXR1cm4gaW5mbzs8YnI+K308YnI+Kzxicj4mbmJzcDsv Kio8YnI+Jm5ic3A7Jm5ic3A7KiBJbiBTUUwgdGFibGUgY2FuIGJlIGNyZWF0ZWQgd2l0aCBBVVRP SU5DUkVNRU5ULjxicj4mbmJzcDsmbmJzcDsqIEluIFRhcmFudG9vbCBpdCBjYW4gYmUgZGV0ZWN0 ZWQgYXMgcHJpbWFyeSBrZXkgd2hpY2ggY29uc2lzdHM8YnI+QEAgLTQ0MiwzNCArNDYzLDMwIEBA IHNxbEluc2VydChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2VyIGNvbnRleHQgKi88YnI+Jm5ic3A7 IHJlZ19lcGggPSArK3BQYXJzZS0mZ3Q7bk1lbTs8YnI+Jm5ic3A7IHJlZ1JlYyA9IHNxbEdldFRl bXBSZWcocFBhcnNlKTs8YnI+Jm5ic3A7IHJlZ0NvcHkgPSBzcWxHZXRUZW1wUmFuZ2UocFBhcnNl LCBuQ29sdW1uICsgMSk7PGJyPi0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCwg cmVnX2VwaCw8YnI+LSBuQ29sdW1uICsgMSk7PGJyPiZuYnNwOyAvKjxicj4tICogVGhpcyBrZXlf aW5mbyBpcyB1c2VkIHRvIHNob3cgdGhhdDxicj4tICogcm93aWQgc2hvdWxkIGJlIHRoZSBmaXJz dCBwYXJ0IG9mIFBLIGluPGJyPi0gKiBjYXNlIHdlIHVzZWQgQVVUT0lOQ1JFTUVOVCBmZWF0dXJl Ljxicj4tICogVGhpcyB3YXkgd2Ugd2lsbCBzYXZlIGluaXRpYWwgb3JkZXIgb2Y8YnI+LSAqIHRo ZSBpbnNlcnRlZCB2YWx1ZXMuIFRoZSBvcmRlciBpczxicj4tICogaW1wb3J0YW50IGlmIHdlIHVz ZSB0aGUgQVVUT0lOQ1JFTUVOVDxicj4tICogZmVhdHVyZSwgc2luY2UgY2hhbmdpbmcgdGhlIG9y ZGVyIGNhbjxicj4tICogY2hhbmdlIHRoZSBudW1iZXIgaW5zZXJ0ZWQgaW5zdGVhZCBvZjxicj4t ICogTlVMTC48YnI+KyAqIE9yZGVyIG9mIGluc2VydGVkIHZhbHVlcyBpcyBpbXBvcnRhbnQgc2lu Y2UgaXQgaXM8YnI+KyAqIHBvc3NpYmxlLCB0aGF0IE5VTEwgd2lsbCBiZSBpbnNlcnRlZCBpbiBm aWVsZCB3aXRoPGJyPisgKiBBVVRPSU5DUkVNRU5ULiBTbywgdGhlIGZpcnN0IHBhcnQgb2Yga2V5 IHNob3VsZCBiZTxicj4rICogcm93aWQuIFNpbmNlIGVhY2ggcm93aWQgaXMgdW5pcXVlLCB3ZSBk byBub3QgbmVlZCBhbnk8YnI+KyAqIG90aGVyIHBhcnRzLjxicj4mbmJzcDsgKi88YnI+LSBpZiAo c3BhY2UtJmd0O3NlcXVlbmNlICE9IE5VTEwpIHs8YnI+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICpr ZXlfaW5mbyA9PGJyPi0gc3FsX2tleV9pbmZvX25ldyhwUGFyc2UtJmd0O2RiLDxicj4tIG5Db2x1 bW4gKyAxKTs8YnI+LSBrZXlfaW5mby0mZ3Q7cGFydHNbbkNvbHVtbl0udHlwZSA9PGJyPi0gRklF TERfVFlQRV9VTlNJR05FRDs8YnI+LSBrZXlfaW5mby0mZ3Q7aXNfcGtfcm93aWQgPSB0cnVlOzxi cj4tIHNxbFZkYmVDaGFuZ2VQNCh2LCAtMSwgKHZvaWQgKilrZXlfaW5mbyw8YnI+LSBQNF9LRVlJ TkZPKTs8YnI+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPTxicj4rIHNxbF9zcGFjZV9p bmZvX25ld19mcm9tX2lkX2xpc3Qoc3BhY2VfZGVmLDxicj4rIG5Db2x1bW4sPGJyPisgcENvbHVt bik7PGJyPisgaWYgKGluZm8gPT0gTlVMTCkgezxicj4rIHBQYXJzZS0mZ3Q7aXNfYWJvcnRlZCA9 IHRydWU7PGJyPisgZ290byBpbnNlcnRfY2xlYW51cDs8YnI+Jm5ic3A7IH08YnI+KyBzcWxWZGJl QWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCByZWdfZXBoLCAwLCAwLDxicj4rIChjaGFyICop aW5mbywgUDRfRFlOQU1JQyk7PGJyPiZuYnNwOyBhZGRyTCA9IHNxbFZkYmVBZGRPcDEodiwgT1Bf WWllbGQsIGRlc3QuaVNEUGFybSk7PGJyPiZuYnNwOyBWZGJlQ292ZXJhZ2Uodik7PGJyPiZuYnNw OyBzcWxWZGJlQWRkT3AyKHYsIE9QX05leHRJZEVwaGVtZXJhbCwgcmVnX2VwaCw8YnI+Jm5ic3A7 IHJlZ0NvcHkgKyBuQ29sdW1uKTs8YnI+Jm5ic3A7IHNxbFZkYmVBZGRPcDModiwgT1BfQ29weSwg cmVnRnJvbVNlbGVjdCwgcmVnQ29weSwgbkNvbHVtbi0xKTs8YnI+KyBzcWxWZGJlQWRkT3A0KHYs IE9QX0FwcGx5VHlwZSwgcmVnQ29weSwgbkNvbHVtbiArIDEsIDAsPGJyPisgKGNoYXIgKilpbmZv LSZndDt0eXBlcywgUDRfU1RBVElDKTs8YnI+Jm5ic3A7IHNxbFZkYmVBZGRPcDModiwgT1BfTWFr ZVJlY29yZCwgcmVnQ29weSw8YnI+Jm5ic3A7IG5Db2x1bW4gKyAxLCByZWdSZWMpOzxicj4mbmJz cDsgLyogU2V0IGZsYWcgdG8gc2F2ZSBtZW1vcnkgYWxsb2NhdGluZyBvbmUgYnkgbWFsbG9jLiAq Lzxicj5kaWZmIC0tZ2l0IGEvc3JjL2JveC9zcWwvc2VsZWN0LmMgYi9zcmMvYm94L3NxbC9zZWxl Y3QuYzxicj5pbmRleCA3Y2ZlNjBkYjYuLjAyMWUwZWJkNSAxMDA2NDQ8YnI+LS0tIGEvc3JjL2Jv eC9zcWwvc2VsZWN0LmM8YnI+KysrIGIvc3JjL2JveC9zcWwvc2VsZWN0LmM8YnI+QEAgLTk5LDYg Kzk5LDE3NyBAQCBzdHJ1Y3QgU29ydEN0eCB7PGJyPiZuYnNwOyNkZWZpbmUgU09SVEZMQUdfVXNl U29ydGVyIDB4MDEgLyogVXNlIFNvcnRlck9wZW4gaW5zdGVhZCBvZiBPcGVuRXBoZW1lcmFsICov PGJyPiZuYnNwOyNkZWZpbmUgU09SVEZMQUdfREVTQyAweEYwPGJyPiZuYnNwOzxicj4rc3RhdGlj IGlubGluZSB1aW50MzJfdDxicj4rbXVsdGlfc2VsZWN0X2NvbGxfc2VxKHN0cnVjdCBQYXJzZSAq cGFyc2VyLCBzdHJ1Y3QgU2VsZWN0ICpwLCBpbnQgbik7PGJyPis8YnI+K3N0YXRpYyBzdHJ1Y3Qg c3FsX3NwYWNlX2luZm8gKjxicj4rc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fZXhwcl9saXN0KHN0 cnVjdCBQYXJzZSAqcGFyc2VyLCBzdHJ1Y3QgRXhwckxpc3QgKmxpc3QsPGJyPisgYm9vbCBoYXNf cm93aWQpPGJyPit7PGJyPisgaW50IG4gPSBsaXN0LSZndDtuRXhwcjs8YnI+KyBpZiAoaGFzX3Jv d2lkKTxicj4rICsrbjs8YnI+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPSBzcWxfc3Bh Y2VfaW5mb19uZXcobiwgMCk7PGJyPisgaWYgKGluZm8gPT0gTlVMTCk8YnI+KyByZXR1cm4gTlVM TDs8YnI+KyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGxpc3QtJmd0O25FeHByOyArK2kpIHs8YnI+ KyBib29sIGI7PGJyPisgc3RydWN0IGNvbGwgKmNvbGw7PGJyPisgc3RydWN0IEV4cHIgKmV4cHIg PSBsaXN0LSZndDthW2ldLnBFeHByOzxicj4rIGVudW0gZmllbGRfdHlwZSB0eXBlID0gc3FsX2V4 cHJfdHlwZShleHByKTs8YnI+KyAvKjxicj4rICogVHlwZSBBTlkgY291bGQgbWVhbiB0aGF0IGZp ZWxkIHdhcyB1bnJlc29sdmVkLiBXZSBoYXZlIG5vIHdheTxicj4rICogYnV0IHRvIHNldCBpdCBh cyBTQ0FMQVIsIGhvd2V2ZXIgdGhpcyBjb3VsZCBsZWFkIHRvPGJyPisgKiB1bmV4cGVjdGVkIGNo YW5nZSBvZiB0eXBlLjxicj4rICovPGJyPisgaWYgKHR5cGUgPT0gRklFTERfVFlQRV9BTlkpPGJy PisgdHlwZSA9IEZJRUxEX1RZUEVfU0NBTEFSOzxicj4rIHVpbnQzMl90IGNvbGxfaWQ7PGJyPisg aWYgKHNxbF9leHByX2NvbGwocGFyc2VyLCBleHByLCAmYW1wO2IsICZhbXA7Y29sbF9pZCwgJmFt cDtjb2xsKSAhPSAwKTxicj4rIHJldHVybiBOVUxMOzxicj4rIGluZm8tJmd0O3R5cGVzW2ldID0g dHlwZTs8YnI+KyBpbmZvLSZndDtjb2xsX2lkc1tpXSA9IGNvbGxfaWQ7PGJyPisgfTxicj4rIGlm IChoYXNfcm93aWQpPGJyPisgaW5mby0mZ3Q7dHlwZXNbbGlzdC0mZ3Q7bkV4cHJdID0gRklFTERf VFlQRV9JTlRFR0VSOzxicj4rIHJldHVybiBpbmZvOzxicj4rfTxicj4rPGJyPitzdGF0aWMgc3Ry dWN0IHNxbF9zcGFjZV9pbmZvICo8YnI+K3NxbF9zcGFjZV9pbmZvX25ld19mcm9tX29yZGVyX2J5 KHN0cnVjdCBQYXJzZSAqcGFyc2VyLCBzdHJ1Y3QgU2VsZWN0ICpzZWxlY3QsPGJyPisgc3RydWN0 IEV4cHJMaXN0ICpvcmRlcl9ieSk8YnI+K3s8YnI+KyBpbnQgbiA9IG9yZGVyX2J5LSZndDtuRXhw ciArIDI7PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsX3NwYWNlX2luZm9f bmV3KG4sIDApOzxicj4rIGlmIChpbmZvID09IE5VTEwpPGJyPisgcmV0dXJuIE5VTEw7PGJyPisg Zm9yIChpbnQgaSA9IDA7IGkgJmx0OyBvcmRlcl9ieS0mZ3Q7bkV4cHI7ICsraSkgezxicj4rIHN0 cnVjdCBFeHByICpleHByID0gb3JkZXJfYnktJmd0O2FbaV0ucEV4cHI7PGJyPisgZW51bSBmaWVs ZF90eXBlIHR5cGUgPSBzcWxfZXhwcl90eXBlKGV4cHIpOzxicj4rIC8qPGJyPisgKiBUeXBlIEFO WSBjb3VsZCBtZWFuIHRoYXQgZmllbGQgd2FzIHVucmVzb2x2ZWQuIFdlIGhhdmUgbm8gd2F5PGJy PisgKiBidXQgdG8gc2V0IGl0IGFzIFNDQUxBUiwgaG93ZXZlciB0aGlzIGNvdWxkIGxlYWQgdG88 YnI+KyAqIHVuZXhwZWN0ZWQgY2hhbmdlIG9mIHR5cGUuPGJyPisgKi88YnI+KyBpZiAodHlwZSA9 PSBGSUVMRF9UWVBFX0FOWSk8YnI+KyB0eXBlID0gRklFTERfVFlQRV9TQ0FMQVI7PGJyPisgaW5m by0mZ3Q7dHlwZXNbaV0gPSB0eXBlOzxicj4rIHVpbnQzMl90ICppZCA9ICZhbXA7aW5mby0mZ3Q7 Y29sbF9pZHNbaV07PGJyPisgaWYgKChleHByLSZndDtmbGFncyAmYW1wOyBFUF9Db2xsYXRlKSAh PSAwKSB7PGJyPisgYm9vbCBiOzxicj4rIHN0cnVjdCBjb2xsICpjb2xsOzxicj4rIGlmIChzcWxf ZXhwcl9jb2xsKHBhcnNlciwgZXhwciwgJmFtcDtiLCBpZCwgJmFtcDtjb2xsKSAhPSAwKTxicj4r IHJldHVybiBOVUxMOzxicj4rIGNvbnRpbnVlOzxicj4rIH08YnI+KyB1aW50MzJfdCBmaWVsZG5v ID0gb3JkZXJfYnktJmd0O2FbaV0udS54LmlPcmRlckJ5Q29sIC0gMTs8YnI+KyBpbmZvLSZndDtj b2xsX2lkc1tpXSA9IG11bHRpX3NlbGVjdF9jb2xsX3NlcShwYXJzZXIsIHNlbGVjdCw8YnI+KyBm aWVsZG5vKTs8YnI+KyBpZiAoaW5mby0mZ3Q7Y29sbF9pZHNbaV0gIT0gQ09MTF9OT05FKSB7PGJy PisgY29uc3QgY2hhciAqbmFtZSA9IGNvbGxfYnlfaWQoaW5mby0mZ3Q7Y29sbF9pZHNbaV0pLSZn dDtuYW1lOzxicj4rIG9yZGVyX2J5LSZndDthW2ldLnBFeHByID08YnI+KyBzcWxFeHByQWRkQ29s bGF0ZVN0cmluZyhwYXJzZXIsIGV4cHIsIG5hbWUpOzxicj4rIH08YnI+KyB9PGJyPisgaW5mby0m Z3Q7dHlwZXNbb3JkZXJfYnktJmd0O25FeHByXSA9IEZJRUxEX1RZUEVfSU5URUdFUjs8YnI+KyBp bmZvLSZndDt0eXBlc1tvcmRlcl9ieS0mZ3Q7bkV4cHIgKyAxXSA9IEZJRUxEX1RZUEVfVkFSQklO QVJZOzxicj4rIHJldHVybiBpbmZvOzxicj4rfTxicj4rPGJyPitzdGF0aWMgc3RydWN0IHNxbF9z cGFjZV9pbmZvICo8YnI+K3NxbF9zcGFjZV9pbmZvX25ld19mb3Jfc29ydGluZyhzdHJ1Y3QgUGFy c2UgKnBhcnNlciwgc3RydWN0IEV4cHJMaXN0ICpvcmRlcl9ieSw8YnI+KyBzdHJ1Y3QgRXhwckxp c3QgKmxpc3QsIGludCBzdGFydCwgYm9vbCBoYXNfcm93aWQpPGJyPit7PGJyPisgLyo8YnI+KyAq IEluZGV4IGNvbnNpc3Qgb2YgZmllbGRzIHRoYXQgd2VyZSBub3QgaW5jbHVkZWQgaW50byBpbmRl eCBwbHVzIHJvd2lkLDxicj4rICogaXMgaGFzX3Jvd2lkIGlzIFRSVUUuPGJyPisgKi88YnI+KyB1 aW50MzJfdCBwYXJ0X2NvdW50ID0gb3JkZXJfYnktJmd0O25FeHByIC0gc3RhcnQ7PGJyPisgaWYg KGhhc19yb3dpZCk8YnI+KyArK3BhcnRfY291bnQ7PGJyPisgLyo8YnI+KyAqIE51bWJlciBvZiBm aWVsZHMgaXMgbnVtYmVyIG9mIHBhcnRzIGluIGluZGV4IHBsdXMgbnVtYmVyIG9mIGZpZWxkczxi cj4rICogdGhhdCBpcyBub3QgYXBwZWFyIGluIE9SREVSIEJZLCBidXQgd2VyZSBpbiBTRUxFQ1Qu PGJyPisgKi88YnI+KyB1aW50MzJfdCBmaWVsZF9jb3VudCA9IHBhcnRfY291bnQ7PGJyPisgLyog SWYgaU9yZGVyQnlDb2wgIT0gMCB0aGFuIGZpZWxkcyBhcHBlYXIgaW4gT1JERVIgQlkuICovPGJy PisgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtuRXhwcjsgKytpKTxicj4rIGZpZWxk X2NvdW50ICs9IGxpc3QtJmd0O2FbaV0udS54LmlPcmRlckJ5Q29sID09IDAgPyAxIDogMDs8YnI+ Kzxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9PGJyPisgc3FsX3NwYWNlX2luZm9f bmV3KGZpZWxkX2NvdW50LCBwYXJ0X2NvdW50KTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxMKTxicj4r IHJldHVybiBOVUxMOzxicj4rIGludCBrOzxicj4rIGZvciAoayA9IDA7IGsgJmx0OyBvcmRlcl9i eS0mZ3Q7bkV4cHIgLSBzdGFydDsgKytrKSB7PGJyPisgYm9vbCBiOzxicj4rIHN0cnVjdCBjb2xs ICpjb2xsOzxicj4rIHN0cnVjdCBFeHByICpleHByID0gb3JkZXJfYnktJmd0O2FbayArIHN0YXJ0 XS5wRXhwcjs8YnI+KyBlbnVtIGZpZWxkX3R5cGUgdHlwZSA9IHNxbF9leHByX3R5cGUoZXhwcik7 PGJyPisgLyo8YnI+KyAqIFR5cGUgQU5ZIGNvdWxkIG1lYW4gdGhhdCBmaWVsZCB3YXMgdW5yZXNv bHZlZC4gV2UgaGF2ZSBubyB3YXk8YnI+KyAqIGJ1dCB0byBzZXQgaXQgYXMgU0NBTEFSLCBob3dl dmVyIHRoaXMgY291bGQgbGVhZCB0bzxicj4rICogdW5leHBlY3RlZCBjaGFuZ2Ugb2YgdHlwZS48 YnI+KyAqLzxicj4rIGlmICh0eXBlID09IEZJRUxEX1RZUEVfQU5ZKTxicj4rIHR5cGUgPSBGSUVM RF9UWVBFX1NDQUxBUjs8YnI+KyB1aW50MzJfdCBjb2xsX2lkOzxicj4rIGlmIChzcWxfZXhwcl9j b2xsKHBhcnNlciwgZXhwciwgJmFtcDtiLCAmYW1wO2NvbGxfaWQsICZhbXA7Y29sbCkgIT0gMCk8 YnI+KyByZXR1cm4gTlVMTDs8YnI+KyBpbmZvLSZndDt0eXBlc1trXSA9IHR5cGU7PGJyPisgaW5m by0mZ3Q7Y29sbF9pZHNba10gPSBjb2xsX2lkOzxicj4rIGluZm8tJmd0O3NvcnRfb3JkZXJzW2td ID0gb3JkZXJfYnktJmd0O2FbayArIHN0YXJ0XS5zb3J0X29yZGVyOzxicj4rIH08YnI+KyBpZiAo aGFzX3Jvd2lkKTxicj4rIGluZm8tJmd0O3R5cGVzW2srK10gPSBGSUVMRF9UWVBFX0lOVEVHRVI7 PGJyPisgYXNzZXJ0KGsgPT0gKGludClwYXJ0X2NvdW50KTs8YnI+KyBmb3IgKGludCBpID0gMDsg aSAmbHQ7IGxpc3QtJmd0O25FeHByOyArK2kpIHs8YnI+KyBpZiAobGlzdC0mZ3Q7YVtpXS51Lngu aU9yZGVyQnlDb2wgIT0gMCk8YnI+KyBjb250aW51ZTs8YnI+KyBib29sIGI7PGJyPisgc3RydWN0 IEV4cHIgKmV4cHIgPSBsaXN0LSZndDthW2ldLnBFeHByOzxicj4rIGVudW0gZmllbGRfdHlwZSB0 eXBlID0gc3FsX2V4cHJfdHlwZShleHByKTs8YnI+KyBpZiAodHlwZSA9PSBGSUVMRF9UWVBFX0FO WSk8YnI+KyB0eXBlID0gRklFTERfVFlQRV9TQ0FMQVI7PGJyPisgdWludDMyX3QgaWQ7PGJyPisg c3RydWN0IGNvbGwgKmNvbGw7PGJyPisgaWYgKHNxbF9leHByX2NvbGwocGFyc2VyLCBleHByLCAm YW1wO2IsICZhbXA7aWQsICZhbXA7Y29sbCkgIT0gMCk8YnI+KyByZXR1cm4gTlVMTDs8YnI+KyBp bmZvLSZndDt0eXBlc1trXSA9IHR5cGU7PGJyPisgaW5mby0mZ3Q7Y29sbF9pZHNba10gPSBpZDs8 YnI+KyArK2s7PGJyPisgfTxicj4rIGFzc2VydChrID09IChpbnQpZmllbGRfY291bnQpOzxicj4r IHJldHVybiBpbmZvOzxicj4rfTxicj4rPGJyPitzdGF0aWMgc3RydWN0IHNxbF9rZXlfaW5mbyAq PGJyPitzcWxfa2V5X2luZm9fbmV3X2Zyb21fc3BhY2VfaW5mbyhjb25zdCBzdHJ1Y3Qgc3FsX3Nw YWNlX2luZm8gKmluZm8pPGJyPit7PGJyPisgdWludDMyX3QgcGFydF9jb3VudCA9IGluZm8tJmd0 O3BhcnRfY291bnQgLSAxOzxicj4rIGFzc2VydChwYXJ0X2NvdW50ICZndDsgMCk7PGJyPisgdWlu dDMyX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3FsX2tleV9pbmZvKSArPGJyPisgcGFydF9jb3Vu dCAqIHNpemVvZihzdHJ1Y3Qga2V5X3BhcnRfZGVmKTs8YnI+KyBzdHJ1Y3Qgc3FsX2tleV9pbmZv ICprZXlfaW5mbyA9IHNxbERiTWFsbG9jUmF3Tk4oc3FsX2dldCgpLCBzaXplKTs8YnI+KyBpZiAo a2V5X2luZm8gPT0gTlVMTCk8YnI+KyByZXR1cm4gTlVMTDs8YnI+KyBrZXlfaW5mby0mZ3Q7ZGIg PSBzcWxfZ2V0KCk7PGJyPisga2V5X2luZm8tJmd0O2tleV9kZWYgPSBOVUxMOzxicj4rIGtleV9p bmZvLSZndDtyZWZzID0gMTs8YnI+KyBrZXlfaW5mby0mZ3Q7cGFydF9jb3VudCA9IHBhcnRfY291 bnQ7PGJyPisgZm9yICh1aW50MzJfdCBpID0gMDsgaSAmbHQ7IHBhcnRfY291bnQ7ICsraSkgezxi cj4rIGtleV9pbmZvLSZndDtwYXJ0c1tpXS5maWVsZG5vID0gaTs8YnI+KyBrZXlfaW5mby0mZ3Q7 cGFydHNbaV0ubnVsbGFibGVfYWN0aW9uID0gT05fQ09ORkxJQ1RfQUNUSU9OX0FCT1JUOzxicj4r IGtleV9pbmZvLSZndDtwYXJ0c1tpXS5pc19udWxsYWJsZSA9IGZhbHNlOzxicj4rIGtleV9pbmZv LSZndDtwYXJ0c1tpXS5leGNsdWRlX251bGwgPSBmYWxzZTs8YnI+KyBrZXlfaW5mby0mZ3Q7cGFy dHNbaV0uc29ydF9vcmRlciA9IGluZm8tJmd0O3NvcnRfb3JkZXJzW2ldOzxicj4rIGtleV9pbmZv LSZndDtwYXJ0c1tpXS5wYXRoID0gTlVMTDs8YnI+KyBrZXlfaW5mby0mZ3Q7cGFydHNbaV0udHlw ZSA9IGluZm8tJmd0O3R5cGVzW2ldOzxicj4rIGtleV9pbmZvLSZndDtwYXJ0c1tpXS5jb2xsX2lk ID0gaW5mby0mZ3Q7Y29sbF9pZHNbaV07PGJyPisgfTxicj4rIHJldHVybiBrZXlfaW5mbzs8YnI+ K308YnI+Kzxicj4mbmJzcDsvKjxicj4mbmJzcDsmbmJzcDsqIERlbGV0ZSBhbGwgdGhlIGNvbnRl bnQgb2YgYSBTZWxlY3Qgc3RydWN0dXJlLiBEZWFsbG9jYXRlIHRoZSBzdHJ1Y3R1cmU8YnI+Jm5i c3A7Jm5ic3A7KiBpdHNlbGYgb25seSBpZiBiRnJlZSBpcyB0cnVlLjxicj5AQCAtODE5LDEzICs5 OTAsMzIgQEAgcHVzaE9udG9Tb3J0ZXIoUGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNlciBjb250ZXh0 ICovPGJyPiZuYnNwOyBpZiAocFBhcnNlLSZndDtkYi0mZ3Q7bWFsbG9jRmFpbGVkKTxicj4mbmJz cDsgcmV0dXJuOzxicj4mbmJzcDsgcE9wLSZndDtwMiA9IG5LZXkgKyBuRGF0YTs8YnI+LSBzdHJ1 Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9IHBPcC0mZ3Q7cDQua2V5X2luZm87PGJyPisgYXNz ZXJ0KHBPcC0mZ3Q7b3Bjb2RlID09IE9QX09wZW5URXBoZW1lcmFsIHx8PGJyPisgcE9wLSZndDtv cGNvZGUgPT0gT1BfU29ydGVyT3Blbik7PGJyPisgc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2lu Zm8gPTxicj4rIHBPcC0mZ3Q7b3Bjb2RlID09IE9QX1NvcnRlck9wZW4gPyBwT3AtJmd0O3A0Lmtl eV9pbmZvIDo8YnI+KyBzcWxfa2V5X2luZm9fbmV3X2Zyb21fc3BhY2VfaW5mbyhwT3AtJmd0O3A0 LnNwYWNlX2luZm8pOzxicj4mbmJzcDsgZm9yICh1aW50MzJfdCBpID0gMDsgaSAmbHQ7IGtleV9p bmZvLSZndDtwYXJ0X2NvdW50OyBpKyspPGJyPiZuYnNwOyBrZXlfaW5mby0mZ3Q7cGFydHNbaV0u c29ydF9vcmRlciA9IFNPUlRfT1JERVJfQVNDOzxicj4mbmJzcDsgc3FsVmRiZUNoYW5nZVA0KHYs IC0xLCAoY2hhciAqKWtleV9pbmZvLCBQNF9LRVlJTkZPKTs8YnI+LSBwT3AtJmd0O3A0LmtleV9p bmZvID0gc3FsX2V4cHJfbGlzdF90b19rZXlfaW5mbyhwUGFyc2UsPGJyPi0gcFNvcnQtJmd0O3BP cmRlckJ5LDxicj4tIG5PQlNhdCk7PGJyPisgaWYgKHBPcC0mZ3Q7b3Bjb2RlID09IE9QX1NvcnRl ck9wZW4pIHs8YnI+KyBwT3AtJmd0O3A0LmtleV9pbmZvID08YnI+KyBzcWxfZXhwcl9saXN0X3Rv X2tleV9pbmZvKHBQYXJzZSw8YnI+KyBwU29ydC0mZ3Q7cE9yZGVyQnksPGJyPisgbk9CU2F0KTs8 YnI+KyB9IGVsc2Ugezxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9PGJyPisgc3Fs X3NwYWNlX2luZm9fbmV3X2Zvcl9zb3J0aW5nKHBQYXJzZSw8YnI+KyBwU29ydC0mZ3Q7cE9yZGVy QnksPGJyPisgcFNlbGVjdC0mZ3Q7cEVMaXN0LDxicj4rIG5PQlNhdCwgYlNlcSk7PGJyPisgaWYg KGluZm8gPT0gTlVMTCkgezxicj4rIHBQYXJzZS0mZ3Q7aXNfYWJvcnRlZCA9IHRydWU7PGJyPisg cmV0dXJuOzxicj4rIH08YnI+KyBzcWxWZGJlQ2hhbmdlUDQodiwgcFNvcnQtJmd0O2FkZHJTb3J0 SW5kZXgsIChjaGFyICopaW5mbyw8YnI+KyBQNF9EWU5BTUlDKTs8YnI+KyB9PGJyPiZuYnNwOyBh ZGRySm1wID0gc3FsVmRiZUN1cnJlbnRBZGRyKHYpOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wMyh2 LCBPUF9KdW1wLCBhZGRySm1wICsgMSwgMCwgYWRkckptcCArIDEpOzxicj4mbmJzcDsgVmRiZUNv dmVyYWdlKHYpOzxicj5AQCAtMTA0NCwyMSArMTIzNCwzMyBAQCBzZWxlY3RJbm5lckxvb3AoUGFy c2UgKiBwUGFyc2UsIC8qIFRoZSBwYXJzZXIgY29udGV4dCAqLzxicj4mbmJzcDsgKiBzcGFjZSBm b3JtYXQuPGJyPiZuYnNwOyAqLzxicj4mbmJzcDsgdWludDMyX3QgZXhjZXNzX2ZpZWxkX2NvdW50 ID0gMDs8YnI+KyBzdHJ1Y3QgVmRiZU9wICpvcCA9IHNxbFZkYmVHZXRPcCh2LDxicj4rIHBTb3J0 LSZndDthZGRyU29ydEluZGV4KTs8YnI+Jm5ic3A7IGZvciAoaSA9IHBTb3J0LSZndDtuT0JTYXQ7 IGkgJmx0OyBwU29ydC0mZ3Q7cE9yZGVyQnktJmd0O25FeHByOzxicj4mbmJzcDsgaSsrKSB7PGJy PiZuYnNwOyBpbnQgaiA9IHBTb3J0LSZndDtwT3JkZXJCeS0mZ3Q7YVtpXS51LnguaU9yZGVyQnlD b2w7PGJyPi0gaWYgKGogJmd0OyAwKSB7PGJyPi0gZXhjZXNzX2ZpZWxkX2NvdW50Kys7PGJyPi0g cEVMaXN0LSZndDthW2ogLSAxXS51LnguaU9yZGVyQnlDb2wgPTxicj4tICh1MTYpIChpICsgMSAt IHBTb3J0LSZndDtuT0JTYXQpOzxicj4rIGlmIChqID09IDApPGJyPisgY29udGludWU7PGJyPisg YXNzZXJ0KGogJmd0OyAwKTs8YnI+KyBleGNlc3NfZmllbGRfY291bnQrKzs8YnI+KyBwRUxpc3Qt Jmd0O2FbaiAtIDFdLnUueC5pT3JkZXJCeUNvbCA9PGJyPisgKHVpbnQxNl90KShpICsgMSAtIHBT b3J0LSZndDtuT0JTYXQpOzxicj4rIGlmIChvcC0mZ3Q7b3Bjb2RlICE9IE9QX09wZW5URXBoZW1l cmFsKTxicj4rIGNvbnRpbnVlOzxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbyA9IG9w LSZndDtwNC5zcGFjZV9pbmZvOzxicj4rIC0taW5mby0mZ3Q7ZmllbGRfY291bnQ7PGJyPisgZm9y IChpbnQgayA9IGo7IGsgJmx0OyBwRUxpc3QtJmd0O25FeHByOyArK2spIHs8YnI+KyBpbnQgbiA9 IGsgKyBwU29ydC0mZ3Q7cE9yZGVyQnktJmd0O25FeHByICsgMTs8YnI+KyBpbmZvLSZndDt0eXBl c1tuIC0gMV0gPSBpbmZvLSZndDt0eXBlc1tuXTs8YnI+KyBpbmZvLSZndDtjb2xsX2lkc1tuIC0g MV0gPTxicj4rIGluZm8tJmd0O2NvbGxfaWRzW25dOzxicj4mbmJzcDsgfTxicj4mbmJzcDsgfTxi cj4tIHN0cnVjdCBWZGJlT3AgKm9wZW5fZXBoX29wID08YnI+LSBzcWxWZGJlR2V0T3AodiwgcFNv cnQtJmd0O2FkZHJTb3J0SW5kZXgpOzxicj4tIGFzc2VydChvcGVuX2VwaF9vcC0mZ3Q7cDIgLSBl eGNlc3NfZmllbGRfY291bnQgJmd0OyAwKTs8YnI+LSBzcWxWZGJlQ2hhbmdlUDIodiwgcFNvcnQt Jmd0O2FkZHJTb3J0SW5kZXgsPGJyPi0gb3Blbl9lcGhfb3AtJmd0O3AyIC08YnI+LSBleGNlc3Nf ZmllbGRfY291bnQpOzxicj4rIGlmIChvcC0mZ3Q7b3Bjb2RlICE9IE9QX09wZW5URXBoZW1lcmFs KSB7PGJyPisgYXNzZXJ0KG9wLSZndDtwMiAtIGV4Y2Vzc19maWVsZF9jb3VudCAmZ3Q7IDApOzxi cj4rIHNxbFZkYmVDaGFuZ2VQMih2LCBwU29ydC0mZ3Q7YWRkclNvcnRJbmRleCw8YnI+KyBvcC0m Z3Q7cDIgLSBleGNlc3NfZmllbGRfY291bnQpOzxicj4rIH08YnI+Jm5ic3A7IHJlZ09yaWcgPSAw Ozxicj4mbmJzcDsgYXNzZXJ0KGVEZXN0ID09IFNSVF9TZXQgfHwgZURlc3QgPT0gU1JUX01lbTxi cj4mbmJzcDsgfHwgZURlc3QgPT0gU1JUX0Nvcm91dGluZTxicj5AQCAtMTQxOSw3ICsxNjIxLDYg QEAgc3FsX2tleV9pbmZvX25ldyhzcWwgKmRiLCB1aW50MzJfdCBwYXJ0X2NvdW50KTxicj4mbmJz cDsga2V5X2luZm8tJmd0O2tleV9kZWYgPSBOVUxMOzxicj4mbmJzcDsga2V5X2luZm8tJmd0O3Jl ZnMgPSAxOzxicj4mbmJzcDsga2V5X2luZm8tJmd0O3BhcnRfY291bnQgPSBwYXJ0X2NvdW50Ozxi cj4tIGtleV9pbmZvLSZndDtpc19wa19yb3dpZCA9IGZhbHNlOzxicj4mbmJzcDsgZm9yICh1aW50 MzJfdCBpID0gMDsgaSAmbHQ7IHBhcnRfY291bnQ7IGkrKykgezxicj4mbmJzcDsgc3RydWN0IGtl eV9wYXJ0X2RlZiAqcGFydCA9ICZhbXA7a2V5X2luZm8tJmd0O3BhcnRzW2ldOzxicj4mbmJzcDsg cGFydC0mZ3Q7ZmllbGRubyA9IGk7PGJyPkBAIC0xNDM0LDI0ICsxNjM1LDYgQEAgc3FsX2tleV9p bmZvX25ldyhzcWwgKmRiLCB1aW50MzJfdCBwYXJ0X2NvdW50KTxicj4mbmJzcDsgcmV0dXJuIGtl eV9pbmZvOzxicj4mbmJzcDt9PGJyPiZuYnNwOzxicj4tc3RydWN0IHNxbF9rZXlfaW5mbyAqPGJy Pi1zcWxfa2V5X2luZm9fbmV3X2Zyb21fa2V5X2RlZihzcWwgKmRiLCBjb25zdCBzdHJ1Y3Qga2V5 X2RlZiAqa2V5X2RlZik8YnI+LXs8YnI+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9 IHNxbERiTWFsbG9jUmF3Tk4oZGIsPGJyPi0gc3FsX2tleV9pbmZvX3NpemVvZihrZXlfZGVmLSZn dDtwYXJ0X2NvdW50KSk7PGJyPi0gaWYgKGtleV9pbmZvID09IE5VTEwpIHs8YnI+LSBzcWxPb21G YXVsdChkYik7PGJyPi0gcmV0dXJuIE5VTEw7PGJyPi0gfTxicj4tIGtleV9pbmZvLSZndDtkYiA9 IGRiOzxicj4tIGtleV9pbmZvLSZndDtrZXlfZGVmID0gTlVMTDs8YnI+LSBrZXlfaW5mby0mZ3Q7 cmVmcyA9IDE7PGJyPi0ga2V5X2luZm8tJmd0O3BhcnRfY291bnQgPSBrZXlfZGVmLSZndDtwYXJ0 X2NvdW50Ozxicj4tIGtleV9pbmZvLSZndDtpc19wa19yb3dpZCA9IGZhbHNlOzxicj4tIGtleV9k ZWZfZHVtcF9wYXJ0cyhrZXlfZGVmLCBrZXlfaW5mby0mZ3Q7cGFydHMsIE5VTEwpOzxicj4tIHJl dHVybiBrZXlfaW5mbzs8YnI+LX08YnI+LTxicj4mbmJzcDtzdHJ1Y3Qgc3FsX2tleV9pbmZvICo8 YnI+Jm5ic3A7c3FsX2tleV9pbmZvX3JlZihzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyk8 YnI+Jm5ic3A7ezxicj5AQCAtMjQ1MywyMiArMjYzNiwyNiBAQCBnZW5lcmF0ZVdpdGhSZWN1cnNp dmVRdWVyeShQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2luZyBjb250ZXh0ICovPGJyPiZuYnNwOyAv KiBBbGxvY2F0ZSBjdXJzb3JzIGZvciBDdXJyZW50LCBRdWV1ZSwgYW5kIERpc3RpbmN0LiAqLzxi cj4mbmJzcDsgcmVnQ3VycmVudCA9ICsrcFBhcnNlLSZndDtuTWVtOzxicj4mbmJzcDsgc3FsVmRi ZUFkZE9wMyh2LCBPUF9PcGVuUHNldWRvLCBpQ3VycmVudCwgcmVnQ3VycmVudCwgbkNvbCk7PGJy Pisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvOzxicj4mbmJzcDsgaWYgKHBPcmRlckJ5KSB7 PGJyPi0gc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8gPTxicj4tIHNxbF9tdWx0aXNlbGVj dF9vcmRlcmJ5X3RvX2tleV9pbmZvKHBQYXJzZSwgcCwgMSk7PGJyPi0gc3FsVmRiZUFkZE9wNCh2 LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX3F1ZXVlLDxicj4tIHBPcmRlckJ5LSZndDtuRXhwciAr IDIsIDAsIChjaGFyICopa2V5X2luZm8sPGJyPi0gUDRfS0VZSU5GTyk7PGJyPiZuYnNwOyBWZGJl Q29tbWVudCgodiwgIk9yZGVyYnkgdGFibGUiKSk7PGJyPisgaW5mbyA9IHNxbF9zcGFjZV9pbmZv X25ld19mcm9tX29yZGVyX2J5KHBQYXJzZSwgcCwgcE9yZGVyQnkpOzxicj4mbmJzcDsgZGVzdFF1 ZXVlLnBPcmRlckJ5ID0gcE9yZGVyQnk7PGJyPiZuYnNwOyB9IGVsc2Ugezxicj4tIHNxbFZkYmVB ZGRPcDIodiwgT1BfT3BlblRFcGhlbWVyYWwsIHJlZ19xdWV1ZSwgbkNvbCArIDEpOzxicj4mbmJz cDsgVmRiZUNvbW1lbnQoKHYsICJRdWV1ZSB0YWJsZSIpKTs8YnI+KyBpbmZvID0gc3FsX3NwYWNl X2luZm9fbmV3X2Zyb21fZXhwcl9saXN0KHBQYXJzZSwgcC0mZ3Q7cEVMaXN0LDxicj4rIHRydWUp Ozxicj4rIH08YnI+KyBpZiAoaW5mbyA9PSBOVUxMKSB7PGJyPisgcFBhcnNlLSZndDtpc19hYm9y dGVkID0gdHJ1ZTs8YnI+KyBnb3RvIGVuZF9vZl9yZWN1cnNpdmVfcXVlcnk7PGJyPiZuYnNwOyB9 PGJyPisgc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX3F1ZXVlLCAwLCAw LCAoY2hhciAqKWluZm8sPGJyPisgUDRfRFlOQU1JQyk7PGJyPiZuYnNwOyBzcWxWZGJlQWRkT3Az KHYsIE9QX0l0ZXJhdG9yT3BlbiwgaVF1ZXVlLCAwLCByZWdfcXVldWUpOzxicj4mbmJzcDsgaWYg KGlEaXN0aW5jdCkgezxicj4mbmJzcDsgcC0mZ3Q7YWRkck9wZW5FcGhtWzBdID08YnI+LSBzcWxW ZGJlQWRkT3AyKHYsIE9QX09wZW5URXBoZW1lcmFsLCByZWdfZGlzdCwgMSk7PGJyPisgc3FsVmRi ZUFkZE9wMSh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2Rpc3QpOzxicj4mbmJzcDsgc3FsVmRi ZUFkZE9wMyh2LCBPUF9JdGVyYXRvck9wZW4sIGlEaXN0aW5jdCwgMCwgcmVnX2Rpc3QpOzxicj4m bmJzcDsgcC0mZ3Q7c2VsRmxhZ3MgfD0gU0ZfVXNlc0VwaGVtZXJhbDs8YnI+Jm5ic3A7IFZkYmVD b21tZW50KCh2LCAiRGlzdGluY3QgdGFibGUiKSk7PGJyPkBAIC0yNjcyLDggKzI4NTksMTYgQEAg bXVsdGlTZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8qIFBhcnNpbmcgY29udGV4dCAqLzxicj4mbmJz cDsgKi88YnI+Jm5ic3A7IGlmIChkZXN0LmVEZXN0ID09IFNSVF9FcGhlbVRhYikgezxicj4mbmJz cDsgYXNzZXJ0KHAtJmd0O3BFTGlzdCk7PGJyPi0gaW50IG5Db2xzID0gcC0mZ3Q7cEVMaXN0LSZn dDtuRXhwcjs8YnI+LSBzcWxWZGJlQWRkT3AyKHYsIE9QX09wZW5URXBoZW1lcmFsLCBkZXN0LnJl Z19lcGgsIG5Db2xzICsgMSk7PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID08YnI+ KyBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9leHByX2xpc3QocFBhcnNlLCBwLSZndDtwRUxpc3Qs PGJyPisgdHJ1ZSk7PGJyPisgaWYgKGluZm8gPT0gTlVMTCkgezxicj4rIHBQYXJzZS0mZ3Q7aXNf YWJvcnRlZCA9IHRydWU7PGJyPisgcmMgPSAxOzxicj4rIGdvdG8gbXVsdGlfc2VsZWN0X2VuZDs8 YnI+KyB9PGJyPisgc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgZGVzdC5yZWdf ZXBoLCAwLCAwLDxicj4rIChjaGFyICopaW5mbywgUDRfRFlOQU1JQyk7PGJyPiZuYnNwOyBzcWxW ZGJlQWRkT3AzKHYsIE9QX0l0ZXJhdG9yT3BlbiwgZGVzdC5pU0RQYXJtLCAwLCBkZXN0LnJlZ19l cGgpOzxicj4mbmJzcDsgVmRiZUNvbW1lbnQoKHYsICJEZXN0aW5hdGlvbiB0ZW1wIikpOzxicj4m bmJzcDsgZGVzdC5lRGVzdCA9IFNSVF9UYWJsZTs8YnI+QEAgLTI3ODksMTAgKzI5ODQsOSBAQCBt dWx0aVNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogUGFyc2luZyBjb250ZXh0ICovPGJyPiZuYnNw OyB1bmlvblRhYiA9IHBQYXJzZS0mZ3Q7blRhYisrOzxicj4mbmJzcDsgcmVnX3VuaW9uID0gKytw UGFyc2UtJmd0O25NZW07PGJyPiZuYnNwOyBhc3NlcnQocC0mZ3Q7cE9yZGVyQnkgPT0gMCk7PGJy Pi0gYWRkciA9PGJyPi0gc3FsVmRiZUFkZE9wMih2LDxicj4tIE9QX09wZW5URXBoZW1lcmFsLDxi cj4tIHJlZ191bmlvbiwgMCk7PGJyPisgYWRkciA9IHNxbFZkYmVBZGRPcDEodiw8YnI+KyBPUF9P cGVuVEVwaGVtZXJhbCw8YnI+KyByZWdfdW5pb24pOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wMyh2 LCBPUF9JdGVyYXRvck9wZW4sIHVuaW9uVGFiLCAwLCByZWdfdW5pb24pOzxicj4mbmJzcDsgYXNz ZXJ0KHAtJmd0O2FkZHJPcGVuRXBobVswXSA9PSAtMSk7PGJyPiZuYnNwOyBwLSZndDthZGRyT3Bl bkVwaG1bMF0gPSBhZGRyOzxicj5AQCAtMjkwNSw5ICszMDk5LDggQEAgbXVsdGlTZWxlY3QoUGFy c2UgKiBwUGFyc2UsIC8qIFBhcnNpbmcgY29udGV4dCAqLzxicj4mbmJzcDsgcmVnX2VwaDIgPSAr K3BQYXJzZS0mZ3Q7bk1lbTs8YnI+Jm5ic3A7IGFzc2VydChwLSZndDtwT3JkZXJCeSA9PSAwKTs8 YnI+Jm5ic3A7PGJyPi0gYWRkciA9PGJyPi0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVt ZXJhbCwgcmVnX2VwaDEsPGJyPi0gMCk7PGJyPisgYWRkciA9IHNxbFZkYmVBZGRPcDEodiwgT1Bf T3BlblRFcGhlbWVyYWwsPGJyPisgcmVnX2VwaDEpOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wMyh2 LCBPUF9JdGVyYXRvck9wZW4sIHRhYjEsIDAsIHJlZ19lcGgxKTs8YnI+Jm5ic3A7IGFzc2VydChw LSZndDthZGRyT3BlbkVwaG1bMF0gPT0gLTEpOzxicj4mbmJzcDsgcC0mZ3Q7YWRkck9wZW5FcGht WzBdID0gYWRkcjs8YnI+QEAgLTI5MjcsOSArMzEyMCw4IEBAIG11bHRpU2VsZWN0KFBhcnNlICog cFBhcnNlLCAvKiBQYXJzaW5nIGNvbnRleHQgKi88YnI+Jm5ic3A7PGJyPiZuYnNwOyAvKiBDb2Rl IHRoZSBjdXJyZW50IFNFTEVDVCBpbnRvIHRlbXBvcmFyeSB0YWJsZSAidGFiMiI8YnI+Jm5ic3A7 ICovPGJyPi0gYWRkciA9PGJyPi0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCwg cmVnX2VwaDIsPGJyPi0gMCk7PGJyPisgYWRkciA9IHNxbFZkYmVBZGRPcDEodiwgT1BfT3BlblRF cGhlbWVyYWwsPGJyPisgcmVnX2VwaDIpOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wMyh2LCBPUF9J dGVyYXRvck9wZW4sIHRhYjIsIDAsIHJlZ19lcGgyKTs8YnI+Jm5ic3A7IGFzc2VydChwLSZndDth ZGRyT3BlbkVwaG1bMV0gPT0gLTEpOzxicj4mbmJzcDsgcC0mZ3Q7YWRkck9wZW5FcGhtWzFdID0g YWRkcjs8YnI+QEAgLTMwMDEsMTQgKzMxOTMsMTQgQEAgbXVsdGlTZWxlY3QoUGFyc2UgKiBwUGFy c2UsIC8qIFBhcnNpbmcgY29udGV4dCAqLzxicj4mbmJzcDsgaWYgKHAtJmd0O3NlbEZsYWdzICZh bXA7IFNGX1VzZXNFcGhlbWVyYWwpIHs8YnI+Jm5ic3A7IGFzc2VydChwLSZndDtwTmV4dCA9PSBO VUxMKTs8YnI+Jm5ic3A7IGludCBuQ29sID0gcC0mZ3Q7cEVMaXN0LSZndDtuRXhwcjs8YnI+LSBz dHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9IHNxbF9rZXlfaW5mb19uZXcoZGIsIG5Db2wp Ozxicj4tIGlmIChrZXlfaW5mbyA9PSBOVUxMKTxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAq aW5mbyA9IHNxbF9zcGFjZV9pbmZvX25ldyhuQ29sLCAwKTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxM KSB7PGJyPisgcFBhcnNlLSZndDtpc19hYm9ydGVkID0gdHJ1ZTs8YnI+Jm5ic3A7IGdvdG8gbXVs dGlfc2VsZWN0X2VuZDs8YnI+LSBmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5Db2w7IGkrKykgezxi cj4tIGtleV9pbmZvLSZndDtwYXJ0c1tpXS5jb2xsX2lkID08YnI+LSBtdWx0aV9zZWxlY3RfY29s bF9zZXEocFBhcnNlLCBwLCBpKTs8YnI+Jm5ic3A7IH08YnI+LTxicj4rIGZvciAoaW50IGkgPSAw OyBpICZsdDsgbkNvbDsgKytpKTxicj4rIGluZm8tJmd0O2NvbGxfaWRzW2ldID0gbXVsdGlfc2Vs ZWN0X2NvbGxfc2VxKHBQYXJzZSwgcCwgaSk7PGJyPisgYm9vbCBpc19pbmZvX3VzZWQgPSBmYWxz ZTs8YnI+Jm5ic3A7IGZvciAoc3RydWN0IFNlbGVjdCAqcExvb3AgPSBwOyBwTG9vcDsgcExvb3Ag PSBwTG9vcC0mZ3Q7cFByaW9yKSB7PGJyPiZuYnNwOyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IDI7 IGkrKykgezxicj4mbmJzcDsgaW50IGFkZHIgPSBwTG9vcC0mZ3Q7YWRkck9wZW5FcGhtW2ldOzxi cj5AQCAtMzAyMCwxMyArMzIxMiwxNSBAQCBtdWx0aVNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyog UGFyc2luZyBjb250ZXh0ICovPGJyPiZuYnNwOyBicmVhazs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7 IHNxbFZkYmVDaGFuZ2VQMih2LCBhZGRyLCBuQ29sKTs8YnI+LSBzcWxWZGJlQ2hhbmdlUDQodiwg YWRkciw8YnI+LSAoY2hhciAqKXNxbF9rZXlfaW5mb19yZWYoa2V5X2luZm8pLDxicj4tIFA0X0tF WUlORk8pOzxicj4rIHNxbFZkYmVDaGFuZ2VQNCh2LCBhZGRyLCAoY2hhciAqKWluZm8sPGJyPisg aXNfaW5mb191c2VkID88YnI+KyBQNF9TVEFUSUMgOiBQNF9EWU5BTUlDKTs8YnI+KyBpc19pbmZv X3VzZWQgPSB0cnVlOzxicj4mbmJzcDsgcExvb3AtJmd0O2FkZHJPcGVuRXBobVtpXSA9IC0xOzxi cj4mbmJzcDsgfTxicj4mbmJzcDsgfTxicj4tIHNxbF9rZXlfaW5mb191bnJlZihrZXlfaW5mbyk7 PGJyPisgaWYgKCFpc19pbmZvX3VzZWQpPGJyPisgc3FsRGJGcmVlKHBQYXJzZS0mZ3Q7ZGIsIGlu Zm8pOzxicj4mbmJzcDsgfTxicj4mbmJzcDs8YnI+Jm5ic3A7Jm5ic3A7bXVsdGlfc2VsZWN0X2Vu ZDo8YnI+QEAgLTUzNDcsMTcgKzU1NDEsMjIgQEAgcmVzZXRBY2N1bXVsYXRvcihQYXJzZSAqIHBQ YXJzZSwgQWdnSW5mbyAqIHBBZ2dJbmZvKTxicj4mbmJzcDsgImV4YWN0bHkgb25lIGFyZ3VtZW50 Iik7PGJyPiZuYnNwOyBwUGFyc2UtJmd0O2lzX2Fib3J0ZWQgPSB0cnVlOzxicj4mbmJzcDsgcEZ1 bmMtJmd0O2lEaXN0aW5jdCA9IC0xOzxicj4tIH0gZWxzZSB7PGJyPi0gc3RydWN0IHNxbF9rZXlf aW5mbyAqa2V5X2luZm8gPTxicj4tIHNxbF9leHByX2xpc3RfdG9fa2V5X2luZm8ocFBhcnNlLDxi cj4rIHJldHVybjs8YnI+KyB9PGJyPisgYXNzZXJ0KHBFLSZndDt4LnBMaXN0LSZndDtuRXhwciA9 PSAxKTs8YnI+KyBzdHJ1Y3Qgc3FsX3NwYWNlX2luZm8gKmluZm8gPTxicj4rIHNxbF9zcGFjZV9p bmZvX25ld19mcm9tX2V4cHJfbGlzdChwUGFyc2UsPGJyPiZuYnNwOyBwRS0mZ3Q7eC5wTGlzdCw8 YnI+LSAwKTs8YnI+LSBzcWxWZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLDxicj4tIHBG dW5jLSZndDtyZWdfZXBoLCAxLCAwLDxicj4tIChjaGFyICopa2V5X2luZm8sIFA0X0tFWUlORk8p Ozxicj4tIHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0b3JPcGVuLDxicj4tIHBGdW5jLSZndDtp RGlzdGluY3QsIDAsIHBGdW5jLSZndDtyZWdfZXBoKTs8YnI+KyBmYWxzZSk7PGJyPisgaWYgKGlu Zm8gPT0gTlVMTCkgezxicj4rIHBQYXJzZS0mZ3Q7aXNfYWJvcnRlZCA9IHRydWU7PGJyPisgcEZ1 bmMtJmd0O2lEaXN0aW5jdCA9IC0xOzxicj4rIHJldHVybjs8YnI+Jm5ic3A7IH08YnI+KyBzcWxW ZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLCBwRnVuYy0mZ3Q7cmVnX2VwaCwgMCw8YnI+ KyAwLCAoY2hhciAqKWluZm8sIFA0X0RZTkFNSUMpOzxicj4rIHNxbFZkYmVBZGRPcDModiwgT1Bf SXRlcmF0b3JPcGVuLCBwRnVuYy0mZ3Q7aURpc3RpbmN0LCAwLDxicj4rIHBGdW5jLSZndDtyZWdf ZXBoKTs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7IH08YnI+Jm5ic3A7fTxicj5AQCAtNTg2MiwyMyAr NjA2MSwyMSBAQCBzcWxTZWxlY3QoUGFyc2UgKiBwUGFyc2UsIC8qIFRoZSBwYXJzZXIgY29udGV4 dCAqLzxicj4mbmJzcDsgKiB0aGF0IGNoYW5nZS48YnI+Jm5ic3A7ICovPGJyPiZuYnNwOyBpZiAo c1NvcnQucE9yZGVyQnkpIHs8YnI+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9PGJy Pi0gc3FsX2V4cHJfbGlzdF90b19rZXlfaW5mbyhwUGFyc2UsIHNTb3J0LnBPcmRlckJ5LCAwKTs8 YnI+Jm5ic3A7IHNTb3J0LnJlZ19lcGggPSArK3BQYXJzZS0mZ3Q7bk1lbTs8YnI+Jm5ic3A7IHNT b3J0LmlFQ3Vyc29yID0gcFBhcnNlLSZndDtuVGFiKys7PGJyPi0gLyogTnVtYmVyIG9mIGNvbHVt bnMgaW4gdHJhbnNpZW50IHRhYmxlIGVxdWFscyB0byBudW1iZXIgb2YgY29sdW1ucyBpbjxicj4t ICogU0VMRUNUIHN0YXRlbWVudCBwbHVzIG51bWJlciBvZiBjb2x1bW5zIGluIE9SREVSIEJZIHN0 YXRlbWVudDxicj4tICogYW5kIHBsdXMgb25lIGNvbHVtbiBmb3IgSUQuPGJyPi0gKi88YnI+LSBp bnQgbkNvbHMgPSBwRUxpc3QtJmd0O25FeHByICsgc1NvcnQucE9yZGVyQnktJmd0O25FeHByICsg MTs8YnI+LSBpZiAoa2V5X2luZm8tJmd0O3BhcnRzWzBdLnNvcnRfb3JkZXIgPT0gU09SVF9PUkRF Ul9ERVNDKSB7PGJyPi0gc1NvcnQuc29ydEZsYWdzIHw9IFNPUlRGTEFHX0RFU0M7PGJyPisgc3Ry dWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID08YnI+KyBzcWxfc3BhY2VfaW5mb19uZXdfZm9yX3Nv cnRpbmcocFBhcnNlLCBzU29ydC5wT3JkZXJCeSw8YnI+KyBwRUxpc3QsIDAsIHRydWUpOzxicj4r IGlmIChpbmZvID09IE5VTEwpIHs8YnI+KyBwUGFyc2UtJmd0O2lzX2Fib3J0ZWQgPSB0cnVlOzxi cj4rIGdvdG8gc2VsZWN0X2VuZDs8YnI+Jm5ic3A7IH08YnI+KyBpZiAoaW5mby0mZ3Q7c29ydF9v cmRlcnNbMF0gPT0gU09SVF9PUkRFUl9ERVNDKTxicj4rIHNTb3J0LnNvcnRGbGFncyB8PSBTT1JU RkxBR19ERVNDOzxicj4mbmJzcDsgc1NvcnQuYWRkclNvcnRJbmRleCA9PGJyPi0gc3FsVmRiZUFk ZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCw8YnI+LSBzU29ydC5yZWdfZXBoLDxicj4tIG5Db2xz LDxicj4tIDAsIChjaGFyICopa2V5X2luZm8sIFA0X0tFWUlORk8pOzxicj4rIHNxbFZkYmVBZGRP cDQodiwgT1BfT3BlblRFcGhlbWVyYWwsIHNTb3J0LnJlZ19lcGgsIDAsIDAsPGJyPisgKGNoYXIg KilpbmZvLCBQNF9EWU5BTUlDKTs8YnI+Kzxicj4mbmJzcDsgc3FsVmRiZUFkZE9wMyh2LCBPUF9J dGVyYXRvck9wZW4sIHNTb3J0LmlFQ3Vyc29yLCAwLCBzU29ydC5yZWdfZXBoKTs8YnI+Jm5ic3A7 IFZkYmVDb21tZW50KCh2LCAiU29ydCB0YWJsZSIpKTs8YnI+Jm5ic3A7IH0gZWxzZSB7PGJyPkBA IC01ODg4LDExICs2MDg1LDE0IEBAIHNxbFNlbGVjdChQYXJzZSAqIHBQYXJzZSwgLyogVGhlIHBh cnNlciBjb250ZXh0ICovPGJyPiZuYnNwOyAvKiBJZiB0aGUgb3V0cHV0IGlzIGRlc3RpbmVkIGZv ciBhIHRlbXBvcmFyeSB0YWJsZSwgb3BlbiB0aGF0IHRhYmxlLjxicj4mbmJzcDsgKi88YnI+Jm5i c3A7IGlmIChwRGVzdC0mZ3Q7ZURlc3QgPT0gU1JUX0VwaGVtVGFiKSB7PGJyPi0gc3RydWN0IHNx bF9rZXlfaW5mbyAqa2V5X2luZm8gPTxicj4tIHNxbF9leHByX2xpc3RfdG9fa2V5X2luZm8ocFBh cnNlLCBwRUxpc3QsIDApOzxicj4tIHNxbFZkYmVBZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWws IHBEZXN0LSZndDtyZWdfZXBoLDxicj4tIHBFTGlzdC0mZ3Q7bkV4cHIgKyAxLCAwLCAoY2hhciAq KWtleV9pbmZvLDxicj4tIFA0X0tFWUlORk8pOzxicj4rIHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAq aW5mbyA9PGJyPisgc3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fZXhwcl9saXN0KHBQYXJzZSwgcEVM aXN0LCB0cnVlKTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxMKSB7PGJyPisgcFBhcnNlLSZndDtpc19h Ym9ydGVkID0gdHJ1ZTs8YnI+KyBnb3RvIHNlbGVjdF9lbmQ7PGJyPisgfTxicj4rIHNxbFZkYmVB ZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWwsIHBEZXN0LSZndDtyZWdfZXBoLCAwLCAwLDxicj4r IChjaGFyICopaW5mbywgUDRfRFlOQU1JQyk7PGJyPiZuYnNwOyBzcWxWZGJlQWRkT3AzKHYsIE9Q X0l0ZXJhdG9yT3BlbiwgcERlc3QtJmd0O2lTRFBhcm0sIDAsPGJyPiZuYnNwOyBwRGVzdC0mZ3Q7 cmVnX2VwaCk7PGJyPiZuYnNwOzxicj5AQCAtNTkwNyw4ICs2MTA3LDE1IEBAIHNxbFNlbGVjdChQ YXJzZSAqIHBQYXJzZSwgLyogVGhlIHBhcnNlciBjb250ZXh0ICovPGJyPiZuYnNwOyB9PGJyPiZu YnNwOyBjb21wdXRlTGltaXRSZWdpc3RlcnMocFBhcnNlLCBwLCBpRW5kKTs8YnI+Jm5ic3A7IGlm IChwLSZndDtpTGltaXQgPT0gMCAmYW1wOyZhbXA7IHNTb3J0LmFkZHJTb3J0SW5kZXggJmd0Oz0g MCkgezxicj4rIHN0cnVjdCBWZGJlT3AgKm9wID0gc3FsVmRiZUdldE9wKHYsIHNTb3J0LmFkZHJT b3J0SW5kZXgpOzxicj4rIHN0cnVjdCBzcWxfa2V5X2luZm8gKmtleV9pbmZvID08YnI+KyBzcWxf a2V5X2luZm9fbmV3X2Zyb21fc3BhY2VfaW5mbyhvcC0mZ3Q7cDQuc3BhY2VfaW5mbyk7PGJyPiZu YnNwOyBzcWxWZGJlQ2hhbmdlT3Bjb2RlKHYsIHNTb3J0LmFkZHJTb3J0SW5kZXgsIE9QX1NvcnRl ck9wZW4pOzxicj4mbmJzcDsgc3FsVmRiZUNoYW5nZVAxKHYsIHNTb3J0LmFkZHJTb3J0SW5kZXgs IHNTb3J0LmlFQ3Vyc29yKTs8YnI+KyBzcWxWZGJlQ2hhbmdlUDIodiwgc1NvcnQuYWRkclNvcnRJ bmRleCw8YnI+KyBvcC0mZ3Q7cDQuc3BhY2VfaW5mby0mZ3Q7ZmllbGRfY291bnQpOzxicj4rIHNx bFZkYmVDaGFuZ2VQNCh2LCBzU29ydC5hZGRyU29ydEluZGV4LCAoY2hhciAqKWtleV9pbmZvLDxi cj4rIFA0X0tFWUlORk8pOzxicj4mbmJzcDsgc3FsVmRiZUNoYW5nZVRvTm9vcCh2LCBzU29ydC5h ZGRyU29ydEluZGV4ICsgMSk7PGJyPiZuYnNwOyBzU29ydC5zb3J0RmxhZ3MgfD0gU09SVEZMQUdf VXNlU29ydGVyOzxicj4mbmJzcDsgfTxicj5AQCAtNTkxOCwxMyArNjEyNSwxNiBAQCBzcWxTZWxl Y3QoUGFyc2UgKiBwUGFyc2UsIC8qIFRoZSBwYXJzZXIgY29udGV4dCAqLzxicj4mbmJzcDsgaWYg KHAtJmd0O3NlbEZsYWdzICZhbXA7IFNGX0Rpc3RpbmN0KSB7PGJyPiZuYnNwOyBzRGlzdGluY3Qu Y3VyX2VwaCA9IHBQYXJzZS0mZ3Q7blRhYisrOzxicj4mbmJzcDsgc0Rpc3RpbmN0LnJlZ19lcGgg PSArK3BQYXJzZS0mZ3Q7bk1lbTs8YnI+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZvICprZXlfaW5mbyA9 PGJyPi0gc3FsX2V4cHJfbGlzdF90b19rZXlfaW5mbyhwUGFyc2UsIHAtJmd0O3BFTGlzdCwgMCk7 PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID08YnI+KyBzcWxfc3BhY2VfaW5mb19u ZXdfZnJvbV9leHByX2xpc3QocFBhcnNlLCBwRUxpc3QsPGJyPisgZmFsc2UpOzxicj4rIGlmIChp bmZvID09IE5VTEwpIHs8YnI+KyBwUGFyc2UtJmd0O2lzX2Fib3J0ZWQgPSB0cnVlOzxicj4rIGdv dG8gc2VsZWN0X2VuZDs8YnI+KyB9PGJyPiZuYnNwOyBzRGlzdGluY3QuYWRkclRuY3QgPSBzcWxW ZGJlQWRkT3A0KHYsIE9QX09wZW5URXBoZW1lcmFsLDxicj4tIHNEaXN0aW5jdC5yZWdfZXBoLDxi cj4tIGtleV9pbmZvLSZndDtwYXJ0X2NvdW50LDxicj4tIDAsIChjaGFyICopa2V5X2luZm8sPGJy Pi0gUDRfS0VZSU5GTyk7PGJyPisgc0Rpc3RpbmN0LnJlZ19lcGgsIDAsIDAsPGJyPisgKGNoYXIg KilpbmZvLCBQNF9EWU5BTUlDKTs8YnI+Jm5ic3A7IHNxbFZkYmVBZGRPcDModiwgT1BfSXRlcmF0 b3JPcGVuLCBzRGlzdGluY3QuY3VyX2VwaCwgMCw8YnI+Jm5ic3A7IHNEaXN0aW5jdC5yZWdfZXBo KTs8YnI+Jm5ic3A7IFZkYmVDb21tZW50KCh2LCAiRGlzdGluY3QgdGFibGUiKSk7PGJyPmRpZmYg LS1naXQgYS9zcmMvYm94L3NxbC9zcWxJbnQuaCBiL3NyYy9ib3gvc3FsL3NxbEludC5oPGJyPmlu ZGV4IDFmODdlNjgyMy4uNTQwYzNhMmZmIDEwMDY0NDxicj4tLS0gYS9zcmMvYm94L3NxbC9zcWxJ bnQuaDxicj4rKysgYi9zcmMvYm94L3NxbC9zcWxJbnQuaDxicj5AQCAtNDAxMyw4ICs0MDEzLDYg QEAgc3RydWN0IHNxbF9rZXlfaW5mbyB7PGJyPiZuYnNwOyBzdHJ1Y3Qga2V5X2RlZiAqa2V5X2Rl Zjs8YnI+Jm5ic3A7IC8qKiBSZWZlcmVuY2UgY291bnRlci4gKi88YnI+Jm5ic3A7IHVpbnQzMl90 IHJlZnM7PGJyPi0gLyoqIFJvd2lkIHNob3VsZCBiZSB0aGUgb25seSBwYXJ0IG9mIFBLLCBpZiB0 cnVlLiAqLzxicj4tIGJvb2wgaXNfcGtfcm93aWQ7PGJyPiZuYnNwOyAvKiogTnVtYmVyIG9mIHBh cnRzIGluIHRoZSBrZXkuICovPGJyPiZuYnNwOyB1aW50MzJfdCBwYXJ0X2NvdW50Ozxicj4mbmJz cDsgLyoqIERlZmluaXRpb24gb2YgdGhlIGtleSBwYXJ0cy4gKi88YnI+QEAgLTQwMjgsMTIgKzQw MjYsNiBAQCBzdHJ1Y3Qgc3FsX2tleV9pbmZvIHs8YnI+Jm5ic3A7c3RydWN0IHNxbF9rZXlfaW5m byAqPGJyPiZuYnNwO3NxbF9rZXlfaW5mb19uZXcoc3FsICpkYiwgdWludDMyX3QgcGFydF9jb3Vu dCk7PGJyPiZuYnNwOzxicj4tLyoqPGJyPi0gKiBBbGxvY2F0ZSBhIGtleV9pbmZvIG9iamVjdCBm cm9tIHRoZSBnaXZlbiBrZXkgZGVmaW5pdGlvbi48YnI+LSAqLzxicj4tc3RydWN0IHNxbF9rZXlf aW5mbyAqPGJyPi1zcWxfa2V5X2luZm9fbmV3X2Zyb21fa2V5X2RlZihzcWwgKmRiLCBjb25zdCBz dHJ1Y3Qga2V5X2RlZiAqa2V5X2RlZik7PGJyPi08YnI+Jm5ic3A7LyoqPGJyPiZuYnNwOyZuYnNw OyogSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciBvZiBhIGtleV9pbmZvIG9iamVjdC48 YnI+Jm5ic3A7Jm5ic3A7Ki88YnI+QEAgLTQwNTUsNiArNDA0Nyw2NCBAQCBzcWxfa2V5X2luZm9f dW5yZWYoc3RydWN0IHNxbF9rZXlfaW5mbyAqa2V5X2luZm8pOzxicj4mbmJzcDtzdHJ1Y3Qga2V5 X2RlZiAqPGJyPiZuYnNwO3NxbF9rZXlfaW5mb190b19rZXlfZGVmKHN0cnVjdCBzcWxfa2V5X2lu Zm8gKmtleV9pbmZvKTs8YnI+Jm5ic3A7PGJyPisvKio8YnI+KyAqIFN0cnVjdHVyZSB0aGF0IGlz IHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZXBoZW1lcmFsIHNwYWNlIGZpZWxkIHR5 cGVzPGJyPisgKiBhbmQgZmllbGRubyBvZiBrZXkgcGFydHMuPGJyPisgKi88YnI+K3N0cnVjdCBz cWxfc3BhY2VfaW5mbyB7PGJyPisgLyoqIEZpZWxkIHR5cGVzIG9mIGFsbCBmaWVsZHMgb2YgZXBo ZW1lcmFsIHNwYWNlLiAqLzxicj4rIGVudW0gZmllbGRfdHlwZSAqdHlwZXM7PGJyPisgLyoqIENv bGxhdGlvbiBpZHMgb2YgYWxsIGZpZWxkcyBvZiBlcGhlbWVyYWwgc3BhY2UuICovPGJyPisgdWlu dDMyX3QgKmNvbGxfaWRzOzxicj4rIC8qKjxicj4rICogRmllbGRubyBrZXkgcGFydHMgb2YgdGhl IGVwaGVtZXJhbCBzcGFjZS4gSWYgTlVMTCwgdGhlbiB0aGUgaW5kZXg8YnI+KyAqIGNvbnNpc3Rz IG9mIGFsbCBmaWVsZHMgaW4gc2VxdWVudGlhbCBvcmRlci48YnI+KyAqLzxicj4rIHVpbnQzMl90 ICpwYXJ0czs8YnI+KyAvKiogU29ydCBvcmRlciBvZiBpbmRleC4gKi88YnI+KyBlbnVtIHNvcnRf b3JkZXIgKnNvcnRfb3JkZXJzOzxicj4rIC8qKiBOdW1iZXIgb2YgZmllbGRzIG9mIGVwaGVtZXRh bCBzcGFjZS4gKi88YnI+KyB1aW50MzJfdCBmaWVsZF9jb3VudDs8YnI+KyAvKio8YnI+KyAqIE51 bWJlciBvZiBwYXJ0cyBpbiBwcmltYXJ5IGluZGV4IG9mIGVwaGVtZXRhbCBzcGFjZS4gSWYgMCB0 aGVuIHBhcnRzPGJyPisgKiBpcyBhbHNvIE5VTEwuPGJyPisgKi88YnI+KyB1aW50MzJfdCBwYXJ0 X2NvdW50Ozxicj4rfTs8YnI+Kzxicj4rLyoqPGJyPisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6 ZSB3aXRoIGRlZmF1bHQgdmFsdWVzIGEgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIHRvPGJy PisgKiBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBlcGhlbWVyYWwgc3BhY2UgZmllbGQgdHlwZXMg YW5kIGtleSBwYXJ0cy48YnI+KyAqLzxicj4rc3RydWN0IHNxbF9zcGFjZV9pbmZvICo8YnI+K3Nx bF9zcGFjZV9pbmZvX25ldyh1aW50MzJfdCBmaWVsZF9jb3VudCwgdWludDMyX3QgcGFydF9jb3Vu dCk7PGJyPis8YnI+Ky8qKjxicj4rICogSW5pdGlhbGl6ZSB0aGUgZmllbGQgdHlwZXMgYW5kIGtl eSBwYXJ0cyBvZiBzcGFjZV9pbmZvIHdpdGggc3BhY2VfZGVmLjxicj4rICogQWRkaXRpb25hbGx5 IGFkZGVkIG9uZSBtb3JlIGZpZWxkIHR5cGUgYW5kIGtleSBwYXJ0IGZvciByb3dpZC4gUm93aWQg aXM8YnI+KyAqIGFsd2F5cyBJTlRFR0VSLiBLZXkgcGFydHMgd2lsbCBiZSBpbml0aWFsaXplZCB3 aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGU8YnI+KyAqIGZpZWxkIHR5cGVzLiBUaGUgbnVtYmVy IG9mIGluaXRpYWxpemVkIGZpZWxkIHR5cGVzIGFuZCBrZXkgcGFydHMgd2lsbCBiZSB0aGU8YnI+ KyAqIHNhbWUgYXMgdGhlIGZpZWxkX2NvdW50IGluIHNwYWNlX2RlZiBwbHVzIG9uZS48YnI+KyAq Lzxicj4rc3RydWN0IHNxbF9zcGFjZV9pbmZvICo8YnI+K3NxbF9zcGFjZV9pbmZvX25ld19mcm9t X3NwYWNlX2RlZihjb25zdCBzdHJ1Y3Qgc3BhY2VfZGVmICpkZWYpOzxicj4rPGJyPisvKio8YnI+ KyAqIEluaXRpYWxpemUgdGhlIGZpZWxkIHR5cGVzIGFuZCBrZXkgcGFydHMgb2Ygc3BhY2VfaW5m byB3aXRoIGluZGV4X2RlZi48YnI+KyAqIEtleSBwYXJ0cyB3aWxsIGJlIGluaXRpYWxpemVkIHdp dGggdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBmaWVsZCB0eXBlcy4gVGhlPGJyPisgKiBudW1iZXIg b2YgaW5pdGlhbGl6ZWQgZmllbGQgdHlwZXMgYW5kIGtleSBwYXJ0cyB3aWxsIGJlIHRoZSBzYW1l IGFzIHRoZTxicj4rICogcGFydF9jb3VudCBpbiBpbmRleF9kZWYuPGJyPisgKi88YnI+K3N0cnVj dCBzcWxfc3BhY2VfaW5mbyAqPGJyPitzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRleF9kZWYo Y29uc3Qgc3RydWN0IGluZGV4X2RlZiAqZGVmLCBib29sIGhhc19yb3dpZCk7PGJyPis8YnI+Ky8q Kjxicj4rICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gZXBoZW1lcmFsIHNwYWNlLiBJbmZv cm1hdGlvbiBhYm91dCBmaWVsZCB0eXBlcyBhbmQ8YnI+KyAqIGtleSBwYXJ0cyBpcyB0YWtlbiBm cm9tIHRoZSBzcGFjZV9pbmZvIHN0cnVjdHVyZS48YnI+KyAqLzxicj4rc3RydWN0IHNwYWNlICo8 YnI+K3NxbF9lcGhlbWVyYWxfc3BhY2VfbmV3KGNvbnN0IHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAq aW5mbyk7PGJyPis8YnI+Jm5ic3A7LyoqPGJyPiZuYnNwOyZuYnNwOyogQ2hlY2sgaWYgdGhlIGZ1 bmN0aW9uIGltcGxlbWVudHMgTElLRS1zdHlsZSBjb21wYXJpc29uICZhbXA7IGlmIGl0PGJyPiZu YnNwOyZuYnNwOyogaXMgYXBwcm9wcmlhdGUgdG8gYXBwbHkgYSBMSUtFIHF1ZXJ5IG9wdGltaXph dGlvbi48YnI+ZGlmZiAtLWdpdCBhL3NyYy9ib3gvc3FsL3RhcmFudG9vbEludC5oIGIvc3JjL2Jv eC9zcWwvdGFyYW50b29sSW50Lmg8YnI+aW5kZXggOGZkYzUwNDMyLi5hZGI3YjVmOWYgMTAwNjQ0 PGJyPi0tLSBhL3NyYy9ib3gvc3FsL3RhcmFudG9vbEludC5oPGJyPisrKyBiL3NyYy9ib3gvc3Fs L3RhcmFudG9vbEludC5oPGJyPkBAIC02MSwyMSArNjEsNiBAQCBzcWxfcmVuYW1lX3RhYmxlKHVp bnQzMl90IHNwYWNlX2lkLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7PGJyPiZuYnNwO2ludCB0YXJh bnRvb2xzcWxSZW5hbWVUcmlnZ2VyKGNvbnN0IGNoYXIgKnpUcmlnZ2VyTmFtZSw8YnI+Jm5ic3A7 IGNvbnN0IGNoYXIgKnpPbGROYW1lLCBjb25zdCBjaGFyICp6TmV3TmFtZSk7PGJyPiZuYnNwOzxi cj4tLyoqPGJyPi0gKiBDcmVhdGUgZXBoZW1lcmFsIHNwYWNlLiBGZWF0dXJlcyBvZiBlcGhlbWVy YWwgc3BhY2VzOiBpZCA9PSAwLDxicj4tICogbmFtZSA9PSAiZXBoZW1lcmFsIiwgbWVtdHggZW5n aW5lIChpbiBmdXR1cmUgaXQgY2FuIGJlIGNoYW5nZWQsPGJyPi0gKiBidXQgbm93IG9ubHkgbWVt dHggZW5naW5lIGlzIHN1cHBvcnRlZCksIHByaW1hcnkgaW5kZXggd2hpY2g8YnI+LSAqIGNvdmVy cyBhbGwgZmllbGRzIGFuZCBubyBzZWNvbmRhcnkgaW5kZXhlcywgZ2l2ZW4gZmllbGQgbnVtYmVy PGJyPi0gKiBhbmQgY29sbGF0aW9uIHNlcXVlbmNlLiBBbGwgZmllbGRzIGFyZSBzY2FsYXIgYW5k IG51bGxhYmxlLjxicj4tICo8YnI+LSAqIEBwYXJhbSBmaWVsZF9jb3VudCBOdW1iZXIgb2YgZmll bGRzIGluIGVwaGVtZXJhbCBzcGFjZS48YnI+LSAqIEBwYXJhbSBrZXlfaW5mbyBLZXlzIGRlc2Ny aXB0aW9uIGZvciBuZXcgZXBoZW1lcmFsIHNwYWNlLjxicj4tICo8YnI+LSAqIEByZXR2YWwgUG9p bnRlciB0byBjcmVhdGVkIHNwYWNlLCBOVUxMIGlmIGVycm9yLjxicj4tICovPGJyPi1zdHJ1Y3Qg c3BhY2UgKjxicj4tc3FsX2VwaGVtZXJhbF9zcGFjZV9jcmVhdGUodWludDMyX3QgZmlsZWRfY291 bnQsIHN0cnVjdCBzcWxfa2V5X2luZm8gKmtleV9pbmZvKTs8YnI+LTxicj4mbmJzcDsvKio8YnI+ Jm5ic3A7Jm5ic3A7KiBJbnNlcnQgdHVwbGUgaW50byBlcGhlbWVyYWwgc3BhY2UuPGJyPiZuYnNw OyZuYnNwOyogSW4gY29udHJhc3QgdG8gb3JkaW5hcnkgc3BhY2VzLCB0aGVyZSBpcyBubyBuZWVk IHRvIGNyZWF0ZSBhbmQ8YnI+ZGlmZiAtLWdpdCBhL3NyYy9ib3gvc3FsL3VwZGF0ZS5jIGIvc3Jj L2JveC9zcWwvdXBkYXRlLmM8YnI+aW5kZXggMjJmODIzOTBjLi5iNDgyN2YyNDIgMTAwNjQ0PGJy Pi0tLSBhL3NyYy9ib3gvc3FsL3VwZGF0ZS5jPGJyPisrKyBiL3NyYy9ib3gvc3FsL3VwZGF0ZS5j PGJyPkBAIC0yMjYsOSArMjI2LDIwIEBAIHNxbFVwZGF0ZShQYXJzZSAqIHBQYXJzZSwgLyogVGhl IHBhcnNlciBjb250ZXh0ICovPGJyPiZuYnNwOyBpRXBoID0gcFBhcnNlLSZndDtuVGFiKys7PGJy PiZuYnNwOyBzcWxWZGJlQWRkT3AyKHYsIE9QX051bGwsIDAsIGlQayk7PGJyPiZuYnNwOzxicj4r IHN0cnVjdCBzcWxfc3BhY2VfaW5mbyAqaW5mbzs8YnI+KyBhc3NlcnQoc3BhY2UtJmd0O2luZGV4 X2NvdW50ICZndDsgMCB8fCBpc192aWV3KTs8YnI+KyBpZiAoaXNfdmlldyk8YnI+KyBpbmZvID0g c3FsX3NwYWNlX2luZm9fbmV3X2Zyb21fc3BhY2VfZGVmKGRlZik7PGJyPisgZWxzZTxicj4rIGlu Zm8gPSBzcWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRleF9kZWYocFBrLSZndDtkZWYsIGZhbHNl KTs8YnI+KyBpZiAoaW5mbyA9PSBOVUxMKSB7PGJyPisgcFBhcnNlLSZndDtpc19hYm9ydGVkID0g dHJ1ZTs8YnI+KyBnb3RvIHVwZGF0ZV9jbGVhbnVwOzxicj4rIH08YnI+Jm5ic3A7IC8qIEFkZHJl c3Mgb2YgdGhlIE9wZW5FcGhlbWVyYWwgaW5zdHJ1Y3Rpb24uICovPGJyPi0gaW50IGFkZHJPcGVu ID0gc3FsVmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2VwaCw8YnI+LSBwa19w YXJ0X2NvdW50KTs8YnI+KyBpbnQgYWRkck9wZW4gPSBzcWxWZGJlQWRkT3A0KHYsIE9QX09wZW5U RXBoZW1lcmFsLCByZWdfZXBoLCAwLCAwLDxicj4rIChjaGFyICopaW5mbywgUDRfRFlOQU1JQyk7 PGJyPis8YnI+Jm5ic3A7IHBXSW5mbyA9IHNxbFdoZXJlQmVnaW4ocFBhcnNlLCBwVGFiTGlzdCwg cFdoZXJlLCAwLCAwLDxicj4mbmJzcDsgV0hFUkVfT05FUEFTU19ERVNJUkVELCBwa19jdXJzb3Ip Ozxicj4mbmJzcDsgaWYgKHBXSW5mbyA9PSAwKTxicj5kaWZmIC0tZ2l0IGEvc3JjL2JveC9zcWwv dmRiZS5jIGIvc3JjL2JveC9zcWwvdmRiZS5jPGJyPmluZGV4IGZjZWE5ZWVmZS4uY2UzMGFmYzVh IDEwMDY0NDxicj4tLS0gYS9zcmMvYm94L3NxbC92ZGJlLmM8YnI+KysrIGIvc3JjL2JveC9zcWwv dmRiZS5jPGJyPkBAIC0yMDMzLDEwICsyMDMzLDkgQEAgY2FzZSBPUF9GZXRjaDogezxicj4mbmJz cDtjYXNlIE9QX0FwcGx5VHlwZTogezxicj4mbmJzcDsgZW51bSBmaWVsZF90eXBlICp0eXBlcyA9 IHBPcC0mZ3Q7cDQudHlwZXM7PGJyPiZuYnNwOyBhc3NlcnQodHlwZXMgIT0gTlVMTCk7PGJyPi0g YXNzZXJ0KHR5cGVzW3BPcC0mZ3Q7cDJdID09IGZpZWxkX3R5cGVfTUFYKTs8YnI+Jm5ic3A7IHBJ bjEgPSAmYW1wO2FNZW1bcE9wLSZndDtwMV07PGJyPi0gZW51bSBmaWVsZF90eXBlIHR5cGU7PGJy Pi0gd2hpbGUoKHR5cGUgPSAqKHR5cGVzKyspKSAhPSBmaWVsZF90eXBlX01BWCkgezxicj4rIGZv ciAoaW50IGkgPSAwOyBpICZsdDsgcE9wLSZndDtwMjsgKytpLCArK3BJbjEpIHs8YnI+KyBlbnVt IGZpZWxkX3R5cGUgdHlwZSA9IHR5cGVzW2ldOzxicj4mbmJzcDsgYXNzZXJ0KHBJbjEgJmx0Oz0g JmFtcDtwLSZndDthTWVtWyhwLSZndDtuTWVtKzEgLSBwLSZndDtuQ3Vyc29yKV0pOzxicj4mbmJz cDsgYXNzZXJ0KG1lbUlzVmFsaWQocEluMSkpOzxicj4mbmJzcDsgaWYgKG1lbV9jYXN0X2ltcGxp Y2l0KHBJbjEsIHR5cGUpICE9IDApIHs8YnI+QEAgLTIwNDQsNyArMjA0Myw2IEBAIGNhc2UgT1Bf QXBwbHlUeXBlOiB7PGJyPiZuYnNwOyBtZW1fc3RyKHBJbjEpLCBmaWVsZF90eXBlX3N0cnNbdHlw ZV0pOzxicj4mbmJzcDsgZ290byBhYm9ydF9kdWVfdG9fZXJyb3I7PGJyPiZuYnNwOyB9PGJyPi0g cEluMSsrOzxicj4mbmJzcDsgfTxicj4mbmJzcDsgYnJlYWs7PGJyPiZuYnNwO308YnI+QEAgLTIz ODAsMTAgKzIzNzgsOSBAQCBvcGVuX2N1cnNvcl9zZXRfaGludHM6PGJyPiZuYnNwO308YnI+Jm5i c3A7PGJyPiZuYnNwOy8qKjxicj4tICogT3Bjb2RlOiBPcGVuVEVwaGVtZXJhbCBQMSBQMiAqIFA0 ICo8YnI+KyAqIE9wY29kZTogT3BlblRFcGhlbWVyYWwgUDEgKiAqIFA0ICo8YnI+Jm5ic3A7Jm5i c3A7KiBTeW5vcHNpczo8YnI+Jm5ic3A7Jm5ic3A7KiBAcGFyYW0gUDEgcmVnaXN0ZXIsIHdoZXJl IHBvaW50ZXIgdG8gbmV3IHNwYWNlIGlzIHN0b3JlZC48YnI+LSAqIEBwYXJhbSBQMiBudW1iZXIg b2YgY29sdW1ucyBpbiBhIG5ldyB0YWJsZS48YnI+Jm5ic3A7Jm5ic3A7KiBAcGFyYW0gUDQga2V5 IGRlZiBmb3IgbmV3IHRhYmxlLCBOVUxMIGlzIGFsbG93ZWQuPGJyPiZuYnNwOyZuYnNwOyo8YnI+ Jm5ic3A7Jm5ic3A7KiBUaGlzIG9wY29kZSBjcmVhdGVzIFRhcmFudG9vbCdzIGVwaGVtZXJhbCB0 YWJsZSBhbmQgc3RvcmVzIHBvaW50ZXI8YnI+QEAgLTIzOTEsMTEgKzIzODgsMTEgQEAgb3Blbl9j dXJzb3Jfc2V0X2hpbnRzOjxicj4mbmJzcDsmbmJzcDsqLzxicj4mbmJzcDtjYXNlIE9QX09wZW5U RXBoZW1lcmFsOiB7PGJyPiZuYnNwOyBhc3NlcnQocE9wLSZndDtwMSAmZ3Q7PSAwKTs8YnI+LSBh c3NlcnQocE9wLSZndDtwMiAmZ3Q7IDApOzxicj4tIGFzc2VydChwT3AtJmd0O3A0dHlwZSAhPSBQ NF9LRVlJTkZPIHx8IHBPcC0mZ3Q7cDQua2V5X2luZm8gIT0gTlVMTCk7PGJyPiZuYnNwOzxicj4t IHN0cnVjdCBzcGFjZSAqc3BhY2UgPSBzcWxfZXBoZW1lcmFsX3NwYWNlX2NyZWF0ZShwT3AtJmd0 O3AyLDxicj4tIHBPcC0mZ3Q7cDQua2V5X2luZm8pOzxicj4rIGFzc2VydChwT3AtJmd0O3A0dHlw ZSA9PSBQNF9EWU5BTUlDIHx8IHBPcC0mZ3Q7cDR0eXBlID09IFA0X1NUQVRJQyk7PGJyPisgc3Ry dWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gcE9wLSZndDtwNC5zcGFjZV9pbmZvOzxicj4rIGFz c2VydChpbmZvICE9IE5VTEwpOzxicj4rIHN0cnVjdCBzcGFjZSAqc3BhY2UgPSBzcWxfZXBoZW1l cmFsX3NwYWNlX25ldyhpbmZvKTs8YnI+Jm5ic3A7PGJyPiZuYnNwOyBpZiAoc3BhY2UgPT0gTlVM TCk8YnI+Jm5ic3A7IGdvdG8gYWJvcnRfZHVlX3RvX2Vycm9yOzxicj5kaWZmIC0tZ2l0IGEvc3Jj L2JveC9zcWwvdmRiZS5oIGIvc3JjL2JveC9zcWwvdmRiZS5oPGJyPmluZGV4IGJlMTEyYzcyZC4u ZTQwYTFhMGIzIDEwMDY0NDxicj4tLS0gYS9zcmMvYm94L3NxbC92ZGJlLmg8YnI+KysrIGIvc3Jj L2JveC9zcWwvdmRiZS5oPGJyPkBAIC05Myw2ICs5MywxMCBAQCBzdHJ1Y3QgVmRiZU9wIHs8YnI+ Jm5ic3A7ICogZG9pbmcgYSBjYXN0Ljxicj4mbmJzcDsgKi88YnI+Jm5ic3A7IGVudW0gZmllbGRf dHlwZSAqdHlwZXM7PGJyPisgLyoqPGJyPisgKiBJbmZvcm1hdGlvbiBhYm91dCBlcGhlbWVyYWwg c3BhY2UgZmllbGQgdHlwZXMgYW5kIGtleSBwYXJ0cy48YnI+KyAqLzxicj4rIHN0cnVjdCBzcWxf c3BhY2VfaW5mbyAqc3BhY2VfaW5mbzs8YnI+Jm5ic3A7IH0gcDQ7PGJyPiZuYnNwOyNpZmRlZiBT UUxfRU5BQkxFX0VYUExBSU5fQ09NTUVOVFM8YnI+Jm5ic3A7IGNoYXIgKnpDb21tZW50OyAvKiBD b21tZW50IHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgKi88YnI+QEAgLTIxMCwxNSArMjE0LDYgQEAg aW50IHNxbFZkYmVEZWxldGVQcmlvck9wY29kZShWZGJlICosIHU4IG9wKTs8YnI+Jm5ic3A7dm9p ZCBzcWxWZGJlQ2hhbmdlUDQoVmRiZSAqLCBpbnQgYWRkciwgY29uc3QgY2hhciAqelA0LCBpbnQg Tik7PGJyPiZuYnNwO3ZvaWQgc3FsVmRiZUFwcGVuZFA0KFZkYmUgKiwgdm9pZCAqcFA0LCBpbnQg cDR0eXBlKTs8YnI+Jm5ic3A7PGJyPi0vKio8YnI+LSAqIFNldCB0aGUgUDQgb24gdGhlIG1vc3Qg cmVjZW50bHkgYWRkZWQgb3Bjb2RlIHRvIHRoZSBrZXlfZGVmIGZvciB0aGU8YnI+LSAqIGluZGV4 IGdpdmVuLjxicj4tICogQHBhcmFtIFBhcnNlIGNvbnRleHQsIGZvciBlcnJvciByZXBvcnRpbmcu PGJyPi0gKiBAcGFyYW0ga2V5X2RlZiBEZWZpbml0aW9uIG9mIGEga2V5IHRvIHNldC48YnI+LSAq Lzxicj4tdm9pZDxicj4tc3FsX3ZkYmVfc2V0X3A0X2tleV9kZWYoc3RydWN0IFBhcnNlICpwYXJz ZSwgc3RydWN0IGtleV9kZWYgKmtleV9kZWYpOzxicj4tPGJyPiZuYnNwO1ZkYmVPcCAqc3FsVmRi ZUdldE9wKFZkYmUgKiwgaW50KTs8YnI+Jm5ic3A7aW50IHNxbFZkYmVNYWtlTGFiZWwoVmRiZSAq KTs8YnI+Jm5ic3A7dm9pZCBzcWxWZGJlUnVuT25seU9uY2UoVmRiZSAqKTs8YnI+ZGlmZiAtLWdp dCBhL3NyYy9ib3gvc3FsL3ZkYmVhdXguYyBiL3NyYy9ib3gvc3FsL3ZkYmVhdXguYzxicj5pbmRl eCA2MWJlN2I0ODkuLjJkNzgwMGIxNyAxMDA2NDQ8YnI+LS0tIGEvc3JjL2JveC9zcWwvdmRiZWF1 eC5jPGJyPisrKyBiL3NyYy9ib3gvc3FsL3ZkYmVhdXguYzxicj5AQCAtNzg3LDE4ICs3ODcsNiBA QCBzcWxWZGJlQXBwZW5kUDQoVmRiZSAqIHAsIHZvaWQgKnBQNCwgaW50IG4pPGJyPiZuYnNwOyB9 PGJyPiZuYnNwO308YnI+Jm5ic3A7PGJyPi12b2lkPGJyPi1zcWxfdmRiZV9zZXRfcDRfa2V5X2Rl ZihzdHJ1Y3QgUGFyc2UgKnBhcnNlLCBzdHJ1Y3Qga2V5X2RlZiAqa2V5X2RlZik8YnI+LXs8YnI+ LSBzdHJ1Y3QgVmRiZSAqdiA9IHBhcnNlLSZndDtwVmRiZTs8YnI+LSBhc3NlcnQodiAhPSBOVUxM KTs8YnI+LSBhc3NlcnQoa2V5X2RlZiAhPSBOVUxMKTs8YnI+LSBzdHJ1Y3Qgc3FsX2tleV9pbmZv ICprZXlfaW5mbyA9PGJyPi0gc3FsX2tleV9pbmZvX25ld19mcm9tX2tleV9kZWYocGFyc2UtJmd0 O2RiLCBrZXlfZGVmKTs8YnI+LSBpZiAoa2V5X2luZm8gIT0gTlVMTCk8YnI+LSBzcWxWZGJlQXBw ZW5kUDQodiwga2V5X2luZm8sIFA0X0tFWUlORk8pOzxicj4tfTxicj4tPGJyPiZuYnNwOyNpZmRl ZiBTUUxfRU5BQkxFX0VYUExBSU5fQ09NTUVOVFM8YnI+Jm5ic3A7Lyo8YnI+Jm5ic3A7Jm5ic3A7 KiBDaGFuZ2UgdGhlIGNvbW1lbnQgb24gdGhlIG1vc3QgcmVjZW50bHkgY29kZWQgaW5zdHJ1Y3Rp b24uIE9yPGJyPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC93aGVyZS5jIGIvc3JjL2JveC9zcWwv d2hlcmUuYzxicj5pbmRleCAxNjc2NmYyZjguLmQ4ZDIzMTYxYiAxMDA2NDQ8YnI+LS0tIGEvc3Jj L2JveC9zcWwvd2hlcmUuYzxicj4rKysgYi9zcmMvYm94L3NxbC93aGVyZS5jPGJyPkBAIC05MTks MTUgKzkxOSwxNSBAQCBjb25zdHJ1Y3RBdXRvbWF0aWNJbmRleChQYXJzZSAqIHBQYXJzZSwgLyog VGhlIHBhcnNpbmcgY29udGV4dCAqLzxicj4mbmJzcDsgLyogQ3JlYXRlIHRoZSBhdXRvbWF0aWMg aW5kZXggKi88YnI+Jm5ic3A7IGFzc2VydChwTGV2ZWwtJmd0O2lJZHhDdXIgJmd0Oz0gMCk7PGJy PiZuYnNwOyBwTGV2ZWwtJmd0O2lJZHhDdXIgPSBwUGFyc2UtJmd0O25UYWIrKzs8YnI+LSBzdHJ1 Y3Qgc3FsX2tleV9pbmZvICpwa19pbmZvID08YnI+LSBzcWxfa2V5X2luZm9fbmV3X2Zyb21fa2V5 X2RlZihwUGFyc2UtJmd0O2RiLCBpZHhfZGVmLSZndDtrZXlfZGVmKTs8YnI+LSBpZiAocGtfaW5m byA9PSBOVUxMKSB7PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID0gc3FsX3NwYWNl X2luZm9fbmV3X2Zyb21faW5kZXhfZGVmKGlkeF9kZWYsPGJyPisgdHJ1ZSk7PGJyPisgaWYgKGlu Zm8gPT0gTlVMTCkgezxicj4mbmJzcDsgcFBhcnNlLSZndDtpc19hYm9ydGVkID0gdHJ1ZTs8YnI+ Jm5ic3A7IHJldHVybjs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7IGludCByZWdfZXBoID0gc3FsR2V0 VGVtcFJlZyhwUGFyc2UpOzxicj4tIHNxbFZkYmVBZGRPcDQodiwgT1BfT3BlblRFcGhlbWVyYWws IHJlZ19lcGgsIG5LZXlDb2wgKyAxLCAwLDxicj4tIChjaGFyICopcGtfaW5mbywgUDRfS0VZSU5G Tyk7PGJyPisgc3FsVmRiZUFkZE9wNCh2LCBPUF9PcGVuVEVwaGVtZXJhbCwgcmVnX2VwaCwgMCwg MCwgKGNoYXIgKilpbmZvLDxicj4rIFA0X0RZTkFNSUMpOzxicj4mbmJzcDsgc3FsVmRiZUFkZE9w Myh2LCBPUF9JdGVyYXRvck9wZW4sIHBMZXZlbC0mZ3Q7aUlkeEN1ciwgMCwgcmVnX2VwaCk7PGJy PiZuYnNwOyBWZGJlQ29tbWVudCgodiwgImZvciAlcyIsIHNwYWNlLSZndDtkZWYtJmd0O25hbWUp KTs8YnI+Jm5ic3A7PGJyPmRpZmYgLS1naXQgYS9zcmMvYm94L3NxbC93aGVyZWNvZGUuYyBiL3Ny Yy9ib3gvc3FsL3doZXJlY29kZS5jPGJyPmluZGV4IGRmNmNjOTJlMS4uMGQwY2IwNTRkIDEwMDY0 NDxicj4tLS0gYS9zcmMvYm94L3NxbC93aGVyZWNvZGUuYzxicj4rKysgYi9zcmMvYm94L3NxbC93 aGVyZWNvZGUuYzxicj5AQCAtMTEzNCwxMSArMTEzNCwxOSBAQCBzcWxXaGVyZUNvZGVPbmVMb29w U3RhcnQoV2hlcmVJbmZvICogcFdJbmZvLCAvKiBDb21wbGV0ZSBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgVzxicj4mbmJzcDsgaWYgKChwV0luZm8tJmd0O3djdHJsRmxhZ3MgJmFtcDsgV0hFUkVfRFVQ TElDQVRFU19PSykgPT0gMCkgezxicj4mbmJzcDsgY3VyX3Jvd19zZXQgPSBwUGFyc2UtJmd0O25U YWIrKzs8YnI+Jm5ic3A7IHJlZ19yb3dfc2V0ID0gKytwUGFyc2UtJmd0O25NZW07PGJyPi0gc3Fs VmRiZUFkZE9wMih2LCBPUF9PcGVuVEVwaGVtZXJhbCw8YnI+LSByZWdfcm93X3NldCwgcGtfcGFy dF9jb3VudCk7PGJyPisgc3RydWN0IGluZGV4X2RlZiAqaW5kZXhfZGVmID0gc3BhY2UtJmd0O2lu ZGV4WzBdLSZndDtkZWY7PGJyPisgc3RydWN0IHNxbF9zcGFjZV9pbmZvICppbmZvID08YnI+KyBz cWxfc3BhY2VfaW5mb19uZXdfZnJvbV9pbmRleF9kZWYoaW5kZXhfZGVmLDxicj4rIGZhbHNlKTs8 YnI+KyBpZiAoaW5mbyA9PSBOVUxMKSB7PGJyPisgcFBhcnNlLSZndDtpc19hYm9ydGVkID0gdHJ1 ZTs8YnI+KyByZXR1cm4gbm90UmVhZHk7PGJyPisgfTxicj4rIHNxbFZkYmVBZGRPcDQodiwgT1Bf T3BlblRFcGhlbWVyYWwsIHJlZ19yb3dfc2V0LDxicj4rIHBrX3BhcnRfY291bnQsIDAsIChjaGFy ICopaW5mbyw8YnI+KyBQNF9EWU5BTUlDKTs8YnI+Jm5ic3A7IHNxbFZkYmVBZGRPcDModiwgT1Bf SXRlcmF0b3JPcGVuLCBjdXJfcm93X3NldCwgMCw8YnI+Jm5ic3A7IHJlZ19yb3dfc2V0KTs8YnI+ LSBzcWxfdmRiZV9zZXRfcDRfa2V5X2RlZihwUGFyc2UsIHBrX2tleV9kZWYpOzxicj4mbmJzcDsg cmVnUGsgPSArK3BQYXJzZS0mZ3Q7bk1lbTs8YnI+Jm5ic3A7IH08YnI+Jm5ic3A7IGlSZXRJbml0 ID0gc3FsVmRiZUFkZE9wMih2LCBPUF9JbnRlZ2VyLCAwLCByZWdSZXR1cm4pOzxicj4tLTxicj4y LjI1LjE8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj4mbmJzcDs8L2Rp dj48L0JPRFk+PC9IVE1MPgo= ----ALT--708d819A4C20Eb57c043c2B9c7913D2f1629282675--