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 2BC286ECDB; Sat, 19 Mar 2022 16:08:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 2BC286ECDB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1647695319; bh=PYaDGik1scU6je5rhQkzkmbjI0ra07kqZWDkdN8CSgg=; 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=g+HfVaoGIsW5whwz5dBqk4ACS9miNvF0mGO7qec8BAmsiWXK906T/yI81O9pwWK9D mpjwuFPjnW5+wlEYXXG35daCyFkAikeqanvXVQRgvwoLyYWwEZaDsIQBQlSv/3rgPO uZCwYNG7Puo+arbdpJy8Z7WjLOkIROXD1dYK5e/E= Received: from f709.i.mail.ru (f709.i.mail.ru [45.84.129.76]) (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 4CA256ECDB for ; Sat, 19 Mar 2022 16:08:37 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4CA256ECDB Received: by f709.i.mail.ru with local (envelope-from ) id 1nVYot-000134-8d; Sat, 19 Mar 2022 16:08:35 +0300 Received: by e.mail.ru with HTTP; Sat, 19 Mar 2022 16:08:35 +0300 To: =?UTF-8?B?U2VyZ2V5IEthcGx1bg==?= MIME-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-SenderField-ReMsg: 16475862161426697876 X-SenderField-Remind: 0 Date: Sat, 19 Mar 2022 16:08:35 +0300 X-Priority: 3 (Normal) Message-ID: <1647695315.194810494@f709.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--dCe0Cd191f793d81aF54A9c5Db16E0771647695315" In-Reply-To: References: <20220304192219.1266071-1-m.kokryashkin@tarantool.org> <20220304192219.1266071-2-m.kokryashkin@tarantool.org> X-4EC0790: 10 X-7564579A: EEAE043A70213CC8 X-77F55803: 119C1F4DF6A9251CAF9F8853D868A259AB71DF6F98748EE0C1099B2EDB0DE52F8FD872164937FA4C26C5FA4C9301C99121EA6C22391DD793F9E49F89DDC8C2D2CDF912748740AD86 X-7FA49CB5: 70AAF3C13DB7016878DA827A17800CE7688F5DCD136F5E8FD82A6BABE6F325AC08BE7437D75B48FABCF491FFA38154B613377AFFFEAFD2690E30A4C9C8E338DAE30E47A50CB819D6C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6778DA827A17800CE73FF03EEFC7AB5FB4EA1F7E6F0F101C6723150C8DA25C47586E58E00D9D99D84E1BDDB23E98D2D38BEBC5CAB6D411FFA6B6BA9589A45AFBD6389905B130CABADCCC7F00164DA146DAFE8445B8C89999728AA50765F7900637F6B57BC7E64490618DEB871D839B7333395957E7521B51C2DFABB839C843B9C08941B15DA834481F8AA50765F7900637F6B57BC7E6449061A352F6E88A58FB86F5D81C698A659EA7E827F84554CEF5019E625A9149C048EE9ECD01F8117BC8BEE2021AF6380DFAD18AA50765F790063735872C767BF85DA227C277FBC8AE2E8BDAE3FA6833AEA0C275ECD9A6C639B01B4E70A05D1297E1BBCB5012B2E24CD356 X-8FC586DF: 7088FE8F28191859 X-C1DE0DAB: 0D63561A33F958A57DBE08543D0149D3FF141229B36877CFC460EB55AF99CE43BDC6A1CF3F042BAD6DF99611D93F60EFAEEA5BB16A939343699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D343DCFC3BEDFB0242DC85B4A11CDD325E403E83CE85159DE6C610A9A6D836794F50B7A83E5C5DD4E1F1D7E09C32AA3244C0E4D48C125BC96BB3C560004756C8328D9ADFF0C0BDB8D1F927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5+wYjsrrSY/u8Y3PrTqANeitKFiSd6Yd7yPpbiiZ/d5BsxIjK0jGQgCHUM3Ry2Lt2G3MDkMauH3h0dBdQGj+BB/iPzQYh7XS329fgu+/vnDhViA3KssVbPh5hfWNyN3XGw== X-Mailru-MI: 10000000000400800 X-Mailru-Sender: EFA0F3A8419EF21689D6D9D711D6B278B1EA58F39E61319397CCF5972F55205DF138BC4B8027D4F106CD02445D2D9C8FA2BFD6D8330F0C2D563E610FBBDBB4C842051EA7CBBFB509093DA5C00B83CE8412EB40C6FA10D71EFD657A8799238ED55FEEDEB644C299C0ED14614B50AE0675 X-Mras: Ok X-Spam: undefined Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_luajit_v5_1/2=5D_memprof?= =?utf-8?q?=3A_extend_symtab_with_C-symbols?= 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: Maxim Kokryashkin via Tarantool-patches Reply-To: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= Cc: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= , tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" ----ALT--dCe0Cd191f793d81aF54A9c5Db16E0771647695315 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpIQrCoApUaGFua3MgZm9yIHRoZSBjb21tZW50cyEKwqAKSSBoYXZlIGEgcXVlc3Rpb24gcmVn YXJkaW5nIHRlc3RzOiBpcyBpdCBPSyB0byBicmluZyBhIHRlc3TCoC5zbyBmaWxlIGZvciBlYWNo IGNhc2UKb3Igc2hvdWxkIEkgZG8gaXQgaW4gYSBkaWZmZXJlbnQgd2F5PwotLQpCZXN0IHJlZ2Fy ZHMsCk1heGltIEtva3J5YXNoa2luCsKgCsKgCj7CoAo+PkhpLCBNYXhpbSEKPj4KPj5UaGFua3Mg Zm9yIHRoZSBmaXhlcyEKPj4KPj5QbGVhc2UgY29uc2lkZXIgbXkgY29tbWVudHMgYmVsb3cuCj4+ Cj4+TkI6IFBsZWFzZSBhZGQgdGVzdHMgZm9yIHRoaXMgcGF0Y2guIEkgc3VnZ2VzdCB0ZXN0cyB0 aGF0IHdpbGwgY292ZXIgMwo+PmJyYW5jaGVzOgo+PiogRUxGIHJlYWRpbmcgYW5kIHBhcnNpbmcK Pj4qIER1bXBpbmcgZnVuY3Rpb25zIG9ubHkgZnJvbSBQVF9EWU5BTUlDIHNlZ21lbnQgKGluY2x1 ZGVzIDIgdHlwZXMgb2YKPj7CoMKgaGFzaGVzKQo+PiogRHVtcGluZyBvbmx5IC5zbyBuYW1lLCBh cyBsYXN0IGZhbGxiYWNrCj4+Cj4+QWxzbywgcmVnYXJkaW5nIGNvZGUgc3R5bGU6IHBsZWFzZSwg dXNlIHF1YXRlci1oYWxmIHRhYnMgKDggd2hpdGVzcGFjc2VzCj4+c2hvdWxkIGJlIHJlcGxhY2Vk IHdpdGggMSB0YWIsIGFuZCBpbmRlbnRhdGlvbiBsZXZlbCBpcyAyKSBmb3IgYWxsCj4+THVhSklU IEMgc291cmNlcy4KPj4KPj5PbiAwNC4wMy4yMiwgTWF4aW0gS29rcnlhc2hraW4gd3JvdGU6Cj4+ PiBUaGlzIGNvbW1pdCBlbnJpY2hlcyBtZW1wcm9mJ3Mgc3ltYm9sIHRhYmxlIHdpdGggaW5mb3Jt YXRpb24KPj4KPj48c25pcHBlZD4KPj4KPj4+Cj4+PiBNYWtlZmlsZS5vcmlnaW5hbCB8IDIgKy0K Pj4+IHNyYy9sal9tZW1wcm9mLmMgfCAzMzAgKysrKysrKysrKysrKysrKysrCj4+PiBzcmMvbGpf bWVtcHJvZi5oIHwgNyArLQo+Pj4gdGVzdC90YXJhbnRvb2wtdGVzdHMvdG9vbHMtdXRpbHMtYXZs LnRlc3QubHVhIHwgNTkgKysrKwo+Pj4gdG9vbHMvQ01ha2VMaXN0cy50eHQgfCAyICsKPj4+IHRv b2xzL3V0aWxzL2F2bC5sdWEgfCAxMTggKysrKysrKwo+Pgo+Pk1heSBiZSB3ZSBjYW4gYWRkIGF2 bC5sdWEgdXRpbHMgbW9kdWxlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdGVzdHMgaW4KPj50aGUg c2VwYXJhdGUgY29tbWl0IGFuZCBtYXJrIHRoaXMgY29tbWl0IGFzICJOZWVkZWQgZm9yIj8KPj5K dXN0IHRyeWluZyB0byB1c2UgdGhlIG1vc3QgYXRvbWljIGNvbW1pdCB3YXkuCj4+RmVlbCBmcmVl IHRvIGlnbm9yZS4KPj4KPj4+IHRvb2xzL3V0aWxzL3N5bXRhYi5sdWEgfCAyNCArLQo+Pj4gNyBm aWxlcyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPj4+IGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0L3RhcmFudG9vbC10ZXN0cy90b29scy11dGlscy1hdmwudGVzdC5s dWEKPj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy91dGlscy9hdmwubHVhCj4+Pgo+Pj4gZGlm ZiAtLWdpdCBhL01ha2VmaWxlLm9yaWdpbmFsIGIvTWFrZWZpbGUub3JpZ2luYWwKPj4+IGluZGV4 IDMzZGMyZWQ1Li4wYzkyZGY5ZSAxMDA2NDQKPj4+IC0tLSBhL01ha2VmaWxlLm9yaWdpbmFsCj4+ PiArKysgYi9NYWtlZmlsZS5vcmlnaW5hbAo+Pgo+PjxzbmlwcGVkPgo+Pgo+Pj4gZGlmZiAtLWdp dCBhL3NyYy9sal9tZW1wcm9mLmMgYi9zcmMvbGpfbWVtcHJvZi5jCj4+PiBpbmRleCAyZDc3OTk4 My4uNzFjMWRhN2YgMTAwNjQ0Cj4+PiAtLS0gYS9zcmMvbGpfbWVtcHJvZi5jCj4+PiArKysgYi9z cmMvbGpfbWVtcHJvZi5jCj4+PiBAQCAtOCwxMSArOCwyMiBAQAo+Pj4gI2RlZmluZSBsal9tZW1w cm9mX2MKPj4+ICNkZWZpbmUgTFVBX0NPUkUKPj4+Cj4+PiArI2RlZmluZSBfR05VX1NPVVJDRQo+ Pj4gKwo+Pj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPj4KPj5UaGlzIGluY2x1ZGUgaXMgZXhjZXNz Lgo+Pgo+Pj4gI2luY2x1ZGUgPGVycm5vLmg+Cj4+PiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4+PiAr I2luY2x1ZGUgPHN0ZGxpYi5oPgo+Pj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPj4KPj48c3RyaW5n Lmg+IGFuZCA8c3RkbGliLmg+IGFyZSBpbmNsdWRlZCBpbnNpZGUgbGpfZGVmLmgsIHNvIHRoaXMg aW5jbHVkZSBpcyBleGNlc3MuCj4+Cj4+Pgo+Pj4gI2luY2x1ZGUgImxqX2FyY2guaCIKPj4+ICNp bmNsdWRlICJsal9tZW1wcm9mLmgiCj4+Pgo+Pj4gKyNpZiBMVUFKSVRfT1MgIT0gTFVBSklUX09T X09TWAo+Pj4gKyNpbmNsdWRlIDxlbGYuaD4KPj4+ICsjaW5jbHVkZSA8bGluay5oPgo+Pj4gKyNp bmNsdWRlIDxzeXMvYXV4di5oPgo+Pj4gKyNlbmRpZgo+Pj4gI2lmIExKX0hBU01FTVBST0YKPj4+ Cj4+PiAjaW5jbHVkZSAibGpfb2JqLmgiCj4+PiBAQCAtNjYsMTIgKzc3LDMyNyBAQCBzdGF0aWMg dm9pZCBkdW1wX3N5bXRhYl90cmFjZShzdHJ1Y3QgbGpfd2J1ZiAqb3V0LCBjb25zdCBHQ3RyYWNl ICp0cmFjZSkKPj4+Cj4+PiAjZW5kaWYKPj4+Cj4+PiArI2lmIExVQUpJVF9PUyAhPSBMVUFKSVRf T1NfT1NYCj4+PiArCj4+PiArc3RydWN0IGdoYXNodGFiX2hlYWRlciB7Cj4+PiArIHVpbnQzMl90 IG5idWNrZXRzOwo+Pj4gKyB1aW50MzJfdCBzeW1vZmZzZXQ7Cj4+PiArIHVpbnQzMl90IGJsb29t X3NpemU7Cj4+PiArIHVpbnQzMl90IGJsb29tX3NoaWZ0Owo+Pj4gK307Cj4+PiArCj4+PiArdWlu dDMyX3QgZ2hhc2h0YWJfc2l6ZShFbGZXKEFkZHIpIGdoYXNodGFiKQo+Pgo+PlBsZWFzZSB1c2Ug YHN0YXRpY2AgYXMgZmFyIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIHB1YmxpYy4KPj5I ZXJlIGFuZCBiZWxvdy4KPj4KPj4+ICt7Cj4+PiArIC8qCj4+PiArICoqIFRoZXJlIGlzIG5vIGVh c3kgd2F5IHRvIGdldCBjb3VudCBvZiBzeW1ib2xzIGluIEdOVSBoYXNodGFibGUsIHNvIHRoZQo+ Pj4gKyAqKiBvbmx5IHdheSB0byBkbyB0aGlzIGlzIHRvIHRha2UgaGlnaGVzdCBwb3NzaWJsZSBu b24tZW1wdHkgYnVja2V0IGFuZAo+Pj4gKyAqKiBpdGVyYXRlIHRocm91Z2ggaXRzIHN5bWJvbHMg dW50aWwgdGhlIGxhc3QgY2hhaW4gaXMgb3Zlci4KPj4+ICsgKi8KPj4+ICsgdWludDMyX3QgbGFz dF9lbnRyeSA9IDA7Cj4+PiArIHVpbnQzMl90ICpjdXJfYnVja2V0ID0gTlVMTDsKPj4+ICsKPj4+ ICsgY29uc3QgdWludDMyX3QgKmNoYWluID0gTlVMTDsKPj4+ICsgc3RydWN0IGdoYXNodGFiX2hl YWRlciAqaGVhZGVyID0gKHN0cnVjdCBnaGFzaHRhYl9oZWFkZXIqKWdoYXNodGFiOwo+Pj4gKyAv Kgo+Pj4gKyAqKiBzaXplb2Yoc2l6ZV90KSByZXR1cm5zIDgsIGlmIGNvbXBpbGVkIHdpdGggNjQt Yml0IGNvbXBpbGVyLCBhbmQgNCBpZgo+Pj4gKyAqKiBjb21waWxlZCB3aXRoIDMyLWJpdCBjb21w aWxlci4gSXQgaXMgdGhlIGJlc3Qgb3B0aW9uIHRvIGRldGVybWluZSB3aGljaAo+Pj4gKyAqKiBr aW5kIG9mIENQVSB3ZSBhcmUgcnVubmluZyBvbi4KPj4+ICsgKi8KPj4+ICsgY29uc3QgY2hhciAq YnVja2V0cyA9IChjaGFyKilnaGFzaHRhYiArIHNpemVvZihzdHJ1Y3QgZ2hhc2h0YWJfaGVhZGVy KSArCj4+Cj4+Tml0OiBQbGVhc2UsIHVzZSBgY2hhciAqYCBpbnN0ZWFkIGBjaGFyKmAuCj4+SGVy ZSBhbmQgYmVsb3cgZm9yIGFsbCBjYXN0cy4KPj4KPj4+ICsgc2l6ZW9mKHNpemVfdCkgKiBoZWFk ZXItPmJsb29tX3NpemU7Cj4+PiArCj4+PiArIGN1cl9idWNrZXQgPSAodWludDMyX3QqKWJ1Y2tl dHM7Cj4+Cj4+QUZBSUNTLCBgY3VyX2J1Y2tldGAgY2FuIGJlIGRlY2xhcmVkIGhlcmUuCj4+Cj4+ PiArIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBoZWFkZXItPm5idWNrZXRzOyArK2kpIHsKPj4+ ICsgaWYgKGxhc3RfZW50cnkgPCAqY3VyX2J1Y2tldCkKPj4+ICsgbGFzdF9lbnRyeSA9ICpjdXJf YnVja2V0Owo+Pj4gKyBjdXJfYnVja2V0Kys7Cj4+PiArIH0KPj4+ICsKPj4+ICsgaWYgKGxhc3Rf ZW50cnkgPCBoZWFkZXItPnN5bW9mZnNldCkKPj4+ICsgcmV0dXJuIGhlYWRlci0+c3ltb2Zmc2V0 Owo+Pj4gKwo+Pj4gKyBjaGFpbiA9ICh1aW50MzJfdCopKGJ1Y2tldHMgKyBzaXplb2YodWludDMy X3QpICogaGVhZGVyLT5uYnVja2V0cyk7Cj4+PiArIC8qIFRoZSBjaGFpbiBlbmRzIHdpdGggdGhl IGxvd2VzdCBiaXQgc2V0IHRvIDEuICovCj4+PiArIHdoaWxlICghKGNoYWluW2xhc3RfZW50cnkg LSBoZWFkZXItPnN5bW9mZnNldF0gJiAxKSkgewo+Pj4gKyBsYXN0X2VudHJ5Kys7Cj4+PiArIH0K Pj4KPj5OaXQ6IHsgfSBhcmUgZXhjZXNzLgo+Pgo+Pj4gKwo+Pj4gKyByZXR1cm4gKytsYXN0X2Vu dHJ5Owo+Pj4gK30KPj4+ICsKPj4+ICtzdHJ1Y3Qgc3ltYm9sX3Jlc29sdmVyX2NvbmYgewo+Pj4g KyBzdHJ1Y3QgbGpfd2J1ZiAqYnVmOwo+Pj4gKyBjb25zdCB1aW50OF90IGhlYWRlcjsKPj4KPj5J J20gYSBsaXR0bGUgYml0IGNvbmZ1c2VkIGFib3V0IHRoaXMgZmllbGQ6IGRvIHdlIG5lZWQgaXQ/ Cj4+QUZBSUNTIGJlbG93LCBpdCBpcyBhbHdheXMgU1lNVEFCX0NGVU5DLiBTbyB3ZSBjYW4ganVz dCB1c2UgdGhpcwo+PmNvbnN0YW50IGluIHRoZSBkdW1wLiBBbHNvLCBpdCByZWR1Y2VzIGFtb3Vu dCBvZiBwYXJhbWV0ZXJzIGluIGFsbCB0aGVzZQo+PmZ1bmN0aW9ucywgZG9lc24ndCBpdD8KPj4K Pj4+ICt9Owo+Pgo+Pk5pdDogcGxlYXNlIG1vdmUgdGhpcyBkZWNsYXJhdGlvbiBiZWxvdyAobmVh cmJ5IGl0cyB1c2FnZSkuCj4+Cj4+PiArCj4+PiArdm9pZCB3cml0ZV9jX3N5bXRhYihFbGZXKFN5 bSopIHN5bSwgY2hhciAqc3RydGFiLCBFbGZXKEFkZHIpIHNvX2FkZHIsCj4+PiArIHNpemVfdCBz eW1fY250LCBjb25zdCB1aW50OF90IGhlYWRlciwgc3RydWN0IGxqX3didWYgKmJ1Zikgewo+Pgo+ Pk5pdDogcGxlYXNlIHRvIGZvcm1hdCB0aGlzIGxpbmUgKGl0IHNob3VsZCBzdGFydHMgYWZ0ZXIg b3BlbmluZwo+PiIoIiB3aXRoIHBhcmFtZXRlcnMgZGVjbGFyYXRpb25zLgo+PkFsc28sIHBsZWFz ZSBtb3ZlIGB7YCB0byB0aGUgbmV4dCBsaW5lLgo+Pgo+Pnwgc3RhdGljIHZvaWQgd3JpdGVfY19z eW10YWIoRWxmVyhTeW0qKSBzeW0sIGNoYXIgKnN0cnRhYiwgRWxmVyhBZGRyKSBzb19hZGRyLAo+ Pnwgc2l6ZV90IHN5bV9jbnQsIGNvbnN0IHVpbnQ4X3QgaGVhZGVyLAo+Pnwgc3RydWN0IGxqX3di dWYgKmJ1ZikKPj58IHsKPj4KPj5IZXJlIGFuZCBiZWxvdyBmb3Igb3RoZXIgZnVuY3Rpb25zLgo+ Pgo+Pj4gKyBjaGFyICpzeW1fbmFtZSA9IE5VTEw7Cj4+PiArCj4+PiArIC8qCj4+PiArICoqIElu ZGV4IDAgaW4gRUxGIHN5bXRhYiBpcyB1c2VkIHRvCj4+Cj4+Tml0OiBzb21ldGhpbmcgc3RyYW5n ZSB3aXRoIGxpbmUgYnJlYWsgaGVyZS4KPj4KPj4+ICsgKiogcmVwcmVzZW50IHVuZGVmaW5lZCBz eW1ib2xzLiBIZW5jZSwgd2UgY2FuIGp1c3QKPj4+ICsgKiogc3RhcnQgd2l0aCBpbmRleCAxLgo+ Pj4gKyAqKgo+Pj4gKyAqKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgo+Pj4gKyAqKiAgaHR0 cHM6Ly9kb2NzLm9yYWNsZS5jb20vY2QvRTIzODI0XzAxL2h0bWwvODE5LTA2OTAvY2hhcHRlcjYt Nzk3OTcuaHRtbAo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyBmb3IgKEVsZlcoV29yZCkgc3ltX2luZGV4 ID0gMTsgc3ltX2luZGV4IDwgc3ltX2NudDsgc3ltX2luZGV4KyspIHsKPj4+ICsgLyoKPj4+ICsg KiogRUxGMzJfU1RfVFlQRSBhbmQgRUxGNjRfU1RfVFlQRSBhcmUgdGhlIHNhbWUsIHNvIHdlIGNh biB1c2UKPj4+ICsgKiogRUxGMzJfU1RfVFlQRSBmb3IgYm90aCA2NC1iaXQgYW5kIDMyLWJpdCBF TEZzLgo+Pj4gKyAqKgo+Pj4gKyAqKiBGb3IgbW9yZSwgc2VlICBodHRwczovL2dpdGh1Yi5jb20v dG9ydmFsZHMvbGludXgvYmxvYi85MTM3ZWRhNTM3NTJlZjczMTQ4ZTQyYjBkNzY0MGEwMGYxYmM5 NmIxL2luY2x1ZGUvdWFwaS9saW51eC9lbGYuaCNMMTM1Cj4+PiArICovCj4+PiArIGlmIChFTEYz Ml9TVF9UWVBFKHN5bVtzeW1faW5kZXhdLnN0X2luZm8pID09IFNUVF9GVU5DKSB7Cj4+PiArIGlm IChzeW1bc3ltX2luZGV4XS5zdF9uYW1lID09IDApCj4+Cj4+Tml0OiBJIHN1cHBvc2UgdGhhdCB0 aGVzZSBjb25kaXRpb25zIGNhbiBiZSBqb2luZWQgdmlhICYmLgo+Pgo+Pj4gKyAvKiBTeW1ib2wg aGFzIG5vIG5hbWUuICovCj4+PiArIGNvbnRpbnVlOwo+Pj4gKyBzeW1fbmFtZSA9ICZzdHJ0YWJb c3ltW3N5bV9pbmRleF0uc3RfbmFtZV07Cj4+Cj4+Tml0OiBBbHNvLCBhZnRlciBmaXhpbmcgdGhl IHByZXZpb3VzIGNvbW1lbnQgeW91IGNhbiBtb3ZlIGRlY2xhcmF0aW9uIGZvcgo+PmBzeW1fbmFt ZWAgaGVyZS4KPj4KPj4+ICsgbGpfd2J1Zl9hZGRieXRlKGJ1ZiwgaGVhZGVyKTsKPj4+ICsgbGpf d2J1Zl9hZGR1NjQoYnVmLCBzeW1bc3ltX2luZGV4XS5zdF92YWx1ZSArIHNvX2FkZHIpOwo+Pj4g KyBsal93YnVmX2FkZHN0cmluZyhidWYsIHN5bV9uYW1lKTsKPj4+ICsgfQo+Pj4gKyB9Cj4+PiAr fQo+Pj4gKwo+Pj4gK2ludCBkdW1wX3NodF9zeW10YWIoY29uc3QgY2hhciAqZWxmX25hbWUsIHN0 cnVjdCBsal93YnVmICpidWYsCj4+PiArIGNvbnN0IHVpbnQ4X3QgaGVhZGVyLCBjb25zdCBFbGZX KEFkZHIpIHNvX2FkZHIpIHsKPj4+ICsgaW50IHN0YXR1cyA9IDA7Cj4+PiArCj4+PiArIGNoYXIg KnN0cnRhYiA9IE5VTEw7Cj4+PiArIEVsZlcoU2hkciopIHNlY3Rpb25faGVhZGVycyA9IE5VTEw7 Cj4+PiArIEVsZlcoU3ltKikgc3ltID0gTlVMTDsKPj4+ICsgRWxmVyhFaGRyKSBlbGZfaGVhZGVy ID0ge307Cj4+PiArCj4+PiArIEVsZlcoT2ZmKSBzeW1fb2ZmID0gMDsKPj4+ICsgRWxmVyhPZmYp IHN0cnRhYl9vZmYgPSAwOwo+Pj4gKwo+Pj4gKyBzaXplX3Qgc3ltX2NudCA9IDA7Cj4+PiArIHNp emVfdCBzeW10YWJfc2l6ZSA9IDA7Cj4+PiArIHNpemVfdCBzdHJ0YWJfc2l6ZSA9IDA7Cj4+PiAr IHNpemVfdCBzdHJ0YWJfaW5kZXggPSAwOwo+Pj4gKwo+Pj4gKyBzaXplX3Qgc2hvZmYgPSAwOyAv KiBTZWN0aW9uIGhlYWRlcnMgb2Zmc2V0LiAqLwo+Pj4gKyBzaXplX3Qgc2hudW0gPSAwOyAvKiBT ZWN0aW9uIGhlYWRlcnMgbnVtYmVyLiAqLwo+Pj4gKyBzaXplX3Qgc2hlbnRzaXplID0gMDsgLyog U2VjdGlvbiBoZWFkZXIgZW50cnkgc2l6ZS4gKi8KPj4+ICsKPj4+ICsgRklMRSAqZWxmX2ZpbGUg PSBmb3BlbihlbGZfbmFtZSwgInJiIik7Cj4+PiArCj4+PiArIGlmIChlbGZfZmlsZSA9PSBOVUxM KQo+Pj4gKyByZXR1cm4gLTE7Cj4+PiArCj4+PiArIGZyZWFkKCZlbGZfaGVhZGVyLCBzaXplb2Yo ZWxmX2hlYWRlciksIDEsIGVsZl9maWxlKTsKPj4+ICsgaWYgKGZlcnJvcihlbGZfZmlsZSkgIT0g MCkKPj4KPj5OaXQ6IEkgc3VwcG9zZSB3ZSBzaG91bGQgY2hlY2sgYW1vdW50IG9mIHJlYWRlbiBi eXRlcyBhbmQgY2FsbAo+PmBmZXJycm9yKClgIG9ubHkgaWYgd2UgcmVhZCBub3QgZW5vdWdoIGJ5 dGVzLgo+PkhlcmUgYW5kIGJlbG93Lgo+Pgo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4gKyBpZiAobWVt Y21wKGVsZl9oZWFkZXIuZV9pZGVudCwgRUxGTUFHLCBTRUxGTUFHKSAhPSAwKQo+Pj4gKyAvKiBO b3QgYSB2YWxpZCBFTEYgZmlsZS4gKi8KPj4+ICsgZ290byBlcnJvcjsKPj4+ICsKPj4+ICsgc2hv ZmYgPSBlbGZfaGVhZGVyLmVfc2hvZmY7Cj4+PiArIHNobnVtID0gZWxmX2hlYWRlci5lX3NobnVt Owo+Pj4gKyBzaGVudHNpemUgPSBlbGZfaGVhZGVyLmVfc2hlbnRzaXplOwo+Pj4gKwo+Pj4gKyBp ZiAoc2hvZmYgPT0gMCB8fCBzaG51bSA9PSAwIHx8IHNoZW50c2l6ZSA9PSAwKQo+Pj4gKyAvKiBO byBzZWN0aW9ucyBpbiBFTEYuICovCj4+PiArIGdvdG8gZXJyb3I7Cj4+PiArCj4+PiArIC8qCj4+ PiArICoqIE1lbW9yeSBvY2N1cGllZCBieSBzZWN0aW9uIGhlYWRlcnMgaXMgdW5saWtlbHkgdG8g YmUgbW9yZSB0aGFuIDE2MEIsIGJ1dAo+Pj4gKyAqKiAzMi1iaXQgYW5kIDY0LWJpdCBFTEYgZmls ZXMgbWF5IGhhdmUgc2VjdGlvbnMgb2YgZGlmZmVyZW50IHNpemVzIGFuZCBzb21lCj4+PiArICoq IG9mIHRoZSBzZWN0aW9ucyBtYXkgZHVpcGxpY2F0ZSwgc28gd2UgbmVlZCB0byB0YWtlIHRoYXQg aW50byBhY2NvdW50Lgo+Pj4gKyAqLwo+Pj4gKyBzZWN0aW9uX2hlYWRlcnMgPSBjYWxsb2Moc2hu dW0sIHNoZW50c2l6ZSk7Cj4+Cj4+SXQncyBiZXR0ZXIgdG8gdXNlIEx1YUpJVCBhbGxvY2F0b3Ig aGVyZSBhbmQgYmVsb3cuCj4+Cj4+PiArIGlmIChzZWN0aW9uX2hlYWRlcnMgPT0gTlVMTCkKPj4+ ICsgZ290byBlcnJvcjsKPj4+ICsKPj4+ICsgaWYgKGZzZWVrKGVsZl9maWxlLCBzaG9mZiwgU0VF S19TRVQpICE9IDApCj4+PiArIGdvdG8gZXJyb3I7Cj4+PiArCj4+PiArIGZyZWFkKHNlY3Rpb25f aGVhZGVycywgc2hlbnRzaXplLCBzaG51bSwgZWxmX2ZpbGUpOwo+Pj4gKyBpZiAoZmVycm9yKGVs Zl9maWxlKSAhPSAwKQo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4gKwo+Pj4gKyBmb3IgKHNpemVfdCBo ZWFkZXJfaW5kZXggPSAwOyBoZWFkZXJfaW5kZXggPCBzaG51bTsgKytoZWFkZXJfaW5kZXgpIHsK Pj4+ICsgaWYoc2VjdGlvbl9oZWFkZXJzW2hlYWRlcl9pbmRleF0uc2hfdHlwZSA9PSBTSFRfU1lN VEFCKSB7Cj4+Cj4+Tml0OiBQYXR0ZXJuIGBzZWN0aW9uX2hlYWRlcnNbaGVhZGVyX2luZGV4XWAg aXMgcmVwZWF0ZW4gb2Z0ZW4gYmVsb3cuIEkKPj5zdWdnZXN0IHRvIHVzZSBhZGRpdGlvbmFsIHZh cmlhYmxlIGZvciBpdC4KPj4KPj4+ICsgc3ltX29mZiA9IHNlY3Rpb25faGVhZGVyc1toZWFkZXJf aW5kZXhdLnNoX29mZnNldDsKPj4+ICsgc3ltdGFiX3NpemUgPSBzZWN0aW9uX2hlYWRlcnNbaGVh ZGVyX2luZGV4XS5zaF9zaXplOwo+Pj4gKyBzeW1fY250ID0gc3ltdGFiX3NpemUgLyBzZWN0aW9u X2hlYWRlcnNbaGVhZGVyX2luZGV4XS5zaF9lbnRzaXplOwo+Pj4gKwo+Pj4gKyBzdHJ0YWJfaW5k ZXggPSBzZWN0aW9uX2hlYWRlcnNbaGVhZGVyX2luZGV4XS5zaF9saW5rOwo+Pj4gKwo+Pj4gKyBz dHJ0YWJfb2ZmID0gc2VjdGlvbl9oZWFkZXJzW3N0cnRhYl9pbmRleF0uc2hfb2Zmc2V0Owo+Pj4g KyBzdHJ0YWJfc2l6ZSA9IHNlY3Rpb25faGVhZGVyc1tzdHJ0YWJfaW5kZXhdLnNoX3NpemU7Cj4+ PiArIGJyZWFrOwo+Pj4gKyB9Cj4+PiArIH0KPj4+ICsKPj4+ICsgaWYgKHN5bV9vZmYgPT0gMCB8 fCBzdHJ0YWJfb2ZmID09IDAgfHwgc3ltX2NudCA9PSAwKQo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4g Kwo+Pj4gKyAvKiBMb2FkIHN0cnRhYiBhbmQgc3ltdGFiIGludG8gbWVtb3J5LiAqLwo+Pgo+Pk5p dDogSSB3b3VsZCBsaWtlIHRvIHNlZSB0aGlzIGNvbW1lbnRzIHNlcGFyYXRlZCAtLSBjdXJyZW50 IGZvcm1hdCBpcwo+PnRvbyBoYXJkLXJlYWRhYmxlIGR1ZSB0byBzaW1pbGFyIHN0cnVjdHVyZS4g SXQgd2lsbCBiZSBuaWNlIHRvIGpvaW4gaW50bwo+Pm9uZSBibG9jayBsb2FkaW5nIG9mIHN5bXRh YiBhbmQgaW4gdGhlIG90aGVyIG9uZSBsb2FkaW5nIG9mIHN0cnRhYi4KPj4KPj4+ICsgc3ltID0g Y2FsbG9jKHN5bV9jbnQsIHNpemVvZihFbGZXKFN5bSkpKTsKPj4+ICsgaWYgKHN5bSA9PSBOVUxM KQo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4gKwo+Pj4gKyBzdHJ0YWIgPSBjYWxsb2Moc3RydGFiX3Np emUsIHNpemVvZihjaGFyKSk7Cj4+PiArIGlmIChzdHJ0YWIgPT0gTlVMTCkKPj4+ICsgZ290byBl cnJvcjsKPj4+ICsKPj4+ICsgaWYgKGZzZWVrKGVsZl9maWxlLCBzeW1fb2ZmLCBTRUVLX1NFVCkg IT0gMCkKPj4+ICsgZ290byBlcnJvcjsKPj4+ICsKPj4+ICsgZnJlYWQoc3ltLCBzaXplb2YoRWxm VyhTeW0pKSwgc3ltX2NudCwgZWxmX2ZpbGUpOwo+Pj4gKyBpZiAoZmVycm9yKGVsZl9maWxlKSAh PSAwKQo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4gKwo+Pj4gKyBpZiAoZnNlZWsoZWxmX2ZpbGUsIHN0 cnRhYl9vZmYsIFNFRUtfU0VUKSAhPSAwKQo+Pj4gKyBnb3RvIGVycm9yOwo+Pj4gKwo+Pj4gKyBm cmVhZChzdHJ0YWIsIHNpemVvZihjaGFyKSwgc3RydGFiX3NpemUsIGVsZl9maWxlKTsKPj4+ICsg aWYgKGZlcnJvcihlbGZfZmlsZSkgIT0gMCkKPj4+ICsgZ290byBlcnJvcjsKPj4+ICsKPj4+ICsg d3JpdGVfY19zeW10YWIoc3ltLCBzdHJ0YWIsIHNvX2FkZHIsIHN5bV9jbnQsIGhlYWRlciwgYnVm KTsKPj4+ICsKPj4+ICsgZ290byBlbmQ7Cj4+PiArCj4+PiArIGVycm9yOgo+Pj4gKyBzdGF0dXMg PSAtMTsKPj4+ICsKPj4+ICsgZW5kOgo+Pj4gKyBmcmVlKHN5bSk7Cj4+Cj4+YHN5bWAgbWF5IGJl IG5vdCBhbGxvY2F0ZWQgd2hlbiB0aGlzIGxpbmUgaXMgcmVhY2hlZCAoZm9yIGV4YW1wbGUgb24K Pj5mcmVhZCBlcnJvciBlYXJsaWVyKS4gU2FtZSBmb3IgYHN0cnRhYmAuCj4+Cj4+PiArIGZyZWUo c3RydGFiKTsKPj4+ICsgZnJlZShzZWN0aW9uX2hlYWRlcnMpOwo+Pj4gKyBmY2xvc2UoZWxmX2Zp bGUpOwo+Pj4gKwo+Pj4gKyByZXR1cm4gc3RhdHVzOwo+Pj4gK30KPj4+ICsKPj4+ICtpbnQgZHVt cF9keW5fc3ltdGFiKHN0cnVjdCBkbF9waGRyX2luZm8gKmluZm8sIGNvbnN0IHVpbnQ4X3QgaGVh ZGVyLAo+Pj4gKyBzdHJ1Y3QgbGpfd2J1ZiAqYnVmKSB7Cj4+PiArIGZvciAoc2l6ZV90IGhlYWRl cl9pbmRleCA9IDA7IGhlYWRlcl9pbmRleCA8IGluZm8tPmRscGlfcGhudW07ICsraGVhZGVyX2lu ZGV4KSB7Cj4+Cj4+Tml0OiBsaW5ld2lkdGggc2hvdWxkIGJlIDEyMCBzeW1ib2xzIG1heC4KPj4K Pj4+ICsgaWYgKGluZm8tPmRscGlfcGhkcltoZWFkZXJfaW5kZXhdLnBfdHlwZSA9PSBQVF9EWU5B TUlDKSB7Cj4+PiArIEVsZlcoRHluKikgZHluID0gTlVMTDsKPj4+ICsgRWxmVyhTeW0qKSBzeW0g PSBOVUxMOwo+Pj4gKyBFbGZXKFdvcmQqKSBoYXNodGFiID0gTlVMTDsKPj4+ICsgRWxmVyhBZGRy KSBnaGFzaHRhYiA9IDA7Cj4+PiArIEVsZlcoV29yZCkgc3ltX2NudCA9IDA7Cj4+PiArCj4+PiAr IGNoYXIgKnN0cnRhYiA9IDA7Cj4+PiArCj4+PiArIGR5biA9IChFbGZXKER5bikqKShpbmZvLT5k bHBpX2FkZHIgKyBpbmZvLT5kbHBpX3BoZHJbaGVhZGVyX2luZGV4XS5wX3ZhZGRyKTsKPj4KPj5E aXR0by4KPj4KPj4+ICsKPj4+ICsgZm9yKDsgZHluLT5kX3RhZyAhPSBEVF9OVUxMOyBkeW4rKykg ewo+Pj4gKyBzd2l0Y2goZHluLT5kX3RhZykgewo+Pj4gKyBjYXNlIERUX0hBU0g6Cj4+Cj4+Tml0 OiBzd2ljaCBjYXNlIHNob3VsZCBoYXZlIHNhbWUgaW5kZW50Lgo+Pgo+Pj4gKyBoYXNodGFiID0g KEVsZlcoV29yZCopKWR5bi0+ZF91bi5kX3B0cjsKPj4+ICsgYnJlYWs7Cj4+PiArIGNhc2UgRFRf R05VX0hBU0g6Cj4+PiArIGdoYXNodGFiID0gZHluLT5kX3VuLmRfcHRyOwo+Pj4gKyBicmVhazsK Pj4+ICsgY2FzZSBEVF9TVFJUQUI6Cj4+PiArIHN0cnRhYiA9IChjaGFyKilkeW4tPmRfdW4uZF9w dHI7Cj4+PiArIGJyZWFrOwo+Pj4gKyBjYXNlIERUX1NZTVRBQjoKPj4+ICsgc3ltID0gKEVsZlco U3ltKikpZHluLT5kX3VuLmRfcHRyOwo+Pj4gKyBicmVhazsKPj4+ICsgZGVmYXVsdDoKPj4+ICsg YnJlYWs7Cj4+PiArIH0KPj4+ICsgfQo+Pj4gKwo+Pj4gKyBpZiAoKGhhc2h0YWIgPT0gTlVMTCAm JiBnaGFzaHRhYiA9PSAwKQo+Pj4gKyB8fCBzdHJ0YWIgPT0gTlVMTCB8fCBzeW0gPT0gTlVMTCkK Pj4KPj5OaXQ6IExvb2tzIGxpa2UgdGhlc2UgbGluZXMgbWF5IGJlIGpvaW5lZC4KPj4KPj4+ICsg LyogTm90IGVub3VnaCBkYXRhIHRvIHJlc29sdmUgc3ltYm9scy4gKi8KPj4+ICsgcmV0dXJuIDE7 Cj4+PiArCj4+PiArIC8qCj4+PiArICoqIEEgaGFzaCB0YWJsZSBjb25zaXN0cyBvZiBFbGYzMl9X b3JkIG9yIEVsZjY0X1dvcmQgb2JqZWN0cyB0aGF0IHByb3ZpZGUgZm9yCj4+PiArICoqIHN5bWJv bCB0YWJsZSBhY2Nlc3MuIEhhc2ggdGFibGUgaGFzIHRoZSBmb2xsb3dpbmcgb3JnYW5pemF0aW9u Ogo+Pj4gKyAqKiArLS0tLS0tLS0tLS0tLS0tLS0tLSsKPj4KPj5OaXQ6IHNvbWV0aGluZyBzdHJh bmdlIHdpdGggZm9ybWF0aW5nIG9mIHRhYmxlOikuCj4+Cj4+PiArICoqIHwgbmJ1Y2tldCB8Cj4+ PiArICoqICstLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gKyAqKiB8IG5jaGFpbiB8Cj4+PiArICoq ICstLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4gKyAqKiB8IGJ1Y2tldFswXSB8Cj4+PiArICoqIHwg Li4uIHwKPj4+ICsgKiogfCBidWNrZXRbbmJ1Y2tldC0xXSB8Cj4+PiArICoqICstLS0tLS0tLS0t LS0tLS0tLS0tKwo+Pj4gKyAqKiB8IGNoYWluWzBdIHwKPj4+ICsgKiogfCAuLi4gfAo+Pj4gKyAq KiB8IGNoYWluW25jaGFpbi0xXSB8Cj4+PiArICoqICstLS0tLS0tLS0tLS0tLS0tLS0tKwo+Pj4g KyAqKiBDaGFpbiB0YWJsZSBlbnRyaWVzIHBhcmFsbGVsIHRoZSBzeW1ib2wgdGFibGUuIFRoZSBu dW1iZXIgb2Ygc3ltYm9sCj4+PiArICoqIHRhYmxlIGVudHJpZXMgc2hvdWxkIGVxdWFsIG5jaGFp biwgc28gc3ltYm9sIHRhYmxlIGluZGV4ZXMgYWxzbyBzZWxlY3QKPj4+ICsgKiogY2hhaW4gdGFi bGUgZW50cmllcy4gU2luY2UgdGhlIGNoYWluIGFycmF5IHZhbHVlcyBhcmUgaW5kZXhlcyBmb3Ig bm90IG9ubHkKPj4+ICsgKiogdGhlIGNoYWluIGFycmF5IGl0c2VsZiwgYnV0IGFsc28gZm9yIHRo ZSBzeW1ib2wgdGFibGUsIHRoZSBjaGFpbiBhcnJheSBtdXN0Cj4+PiArICoqIGJlIHRoZSBzYW1l IHNpemUgYXMgdGhlIHN5bWJvbCB0YWJsZS4gVGhpcyBtYWtlcyBuY2hhaW4gZXF1YWwgdG8gdGhl IGxlbmd0aAo+Pj4gKyAqKiBvZiB0aGUgc3ltYm9sIHRhYmxlLgo+Pgo+Pk5pdDogUGxlYXNlIGZv cm1hdCB0aGlzIGNvbW1lbnQgdG8gZml0IGxpbmV3aWR0aCAxMjAgc3ltYm9scy4KPj4KPj4+ICsg KioKPj4+ICsgKiogRm9yIG1vcmUsIHNlZSAgaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vY2QvRTIz ODI0XzAxL2h0bWwvODE5LTA2OTAvY2hhcHRlcjYtNDgwMzEuaHRtbAo+Pj4gKyAqLwo+Pj4gKyBz eW1fY250ID0gZ2hhc2h0YWIgPT0gMCA/IGhhc2h0YWJbMV0gOiBnaGFzaHRhYl9zaXplKGdoYXNo dGFiKTsKPj4+ICsgd3JpdGVfY19zeW10YWIoc3ltLCBzdHJ0YWIsIGluZm8tPmRscGlfYWRkciwg c3ltX2NudCwgaGVhZGVyLCBidWYpOwo+Pj4gKyByZXR1cm4gMDsKPj4+ICsgfQo+Pj4gKyB9Cj4+ PiArCj4+PiArIHJldHVybiAxOwo+Pj4gK30KPj4+ICsKPj4+ICtpbnQgcmVzb2x2ZV9zeW1ib2xu YW1lcyhzdHJ1Y3QgZGxfcGhkcl9pbmZvICppbmZvLCBzaXplX3QgaW5mb19zaXplLCB2b2lkICpk YXRhKQo+Pj4gK3sKPj4+ICsgc3RydWN0IHN5bWJvbF9yZXNvbHZlcl9jb25mICpjb25mID0gZGF0 YTsKPj4+ICsgY29uc3QgdWludDhfdCBoZWFkZXIgPSBjb25mLT5oZWFkZXI7Cj4+PiArIHN0cnVj dCBsal93YnVmICpidWYgPSBjb25mLT5idWY7Cj4+PiArCj4+PiArIFVOVVNFRChpbmZvX3NpemUp Owo+Pj4gKwo+Pj4gKyAvKiBTa2lwIHZEU08gbGlicmFyeS4gKi8KPj4KPj5OaXQ6IHNvbWV0aGlu ZyBzdHJhbmdlIHdpdGggaW5kZW50YXRpb24gaGVyZS4KPj4KPj4+ICsgaWYgKGluZm8tPmRscGlf YWRkciA9PSBnZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKSkKPj4+ICsgcmV0dXJuIDA7Cj4+PiAr Cj4+PiArIC8qCj4+PiArICoqIE1haW4gd2F5OiB0cnkgdG8gb3BlbiBFTEYgYW5kIHJlYWQgU0hU X1NZTVRBQiwgU0hUX1NUUlRBQiBhbmQgU0hUX0hBU0gKPj4+ICsgKiogc2VjdGlvbnMgZnJvbSBp dC4KPj4+ICsgKi8KPj4+ICsgaWYgKGR1bXBfc2h0X3N5bXRhYihpbmZvLT5kbHBpX25hbWUsIGJ1 ZiwgaGVhZGVyLCBpbmZvLT5kbHBpX2FkZHIpID09IDApIHsKPj4+ICsgcmV0dXJuIDA7Cj4+PiAr IH0KPj4+ICsKPj4+ICsgLyogRmlyc3QgZmFsbGJhY2s6IGR1bXAgZnVuY3Rpb25zIG9ubHkgZnJv bSBQVF9EWU5BTUlDIHNlZ21lbnQuICovCj4+PiArIGlmKGR1bXBfZHluX3N5bXRhYihpbmZvLCBo ZWFkZXIsIGJ1ZikgPT0gMCkgewo+Pj4gKyByZXR1cm4gMDsKPj4+ICsgfQo+Pgo+Pk5pdDogSSBz dWdnZXN0IHRvIHJlZmFjdG9yIHRoaXMgc2VjdGlvbiBsaWtlIHRoZSBmb2xsb3dpbmc6Cj4+fCBp ZiAoKSB7Cj4+fCAvKiAuLi4gKi8KPj58IH0gZWxzZWlmICgpIHsKPj58IC8qIC4uLiAqLwo+Pnwg fSBlbHNlIHsKPj58IC8qIC4uLiAqLwo+PnwgfQo+PnwgcmV0dXJuIDA7Cj4+Cj4+RmVlbCBmcmVl IHRvIGlnbm9yZS4KPj4KPj4+ICsKPj4+ICsgLyoKPj4+ICsgKiogTGFzdCByZXNvcnQ6IGR1bXAg RUxGIHNpemUgYW5kIGFkZHJlc3MgdG8gc2hvdyAuc28gbmFtZSBmb3IgaXRzIGZ1bmN0aW9ucwo+ Pj4gKyAqKiBpbiBtZW1wcm9mIG91dHB1dC4KPj4+ICsgKi8KPj4+ICsgbGpfd2J1Zl9hZGRieXRl KGJ1ZiwgaGVhZGVyKTsKPj4+ICsgbGpfd2J1Zl9hZGR1NjQoYnVmLCBpbmZvLT5kbHBpX2FkZHIp Owo+Pj4gKyBsal93YnVmX2FkZHN0cmluZyhidWYsIGluZm8tPmRscGlfbmFtZSk7Cj4+PiArCj4+ PiArIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICsjZW5kaWYKPj4KPj5OaXQ6IFBsZWFzZSwg YWRkIGlubGluZSBjb21tZW50IHRoYXQgdGhpcyBpcyBgTFVBSklUX09TICE9IExVQUpJVF9PU19P U1hgCj4+Cj4+PiArCj4+PiBzdGF0aWMgdm9pZCBkdW1wX3N5bXRhYihzdHJ1Y3QgbGpfd2J1ZiAq b3V0LCBjb25zdCBzdHJ1Y3QgZ2xvYmFsX1N0YXRlICpnKQo+Pj4gewo+Pj4gY29uc3QgR0NSZWYg Kml0ZXIgPSAmZy0+Z2Mucm9vdDsKPj4+IGNvbnN0IEdDb2JqICpvOwo+Pj4gY29uc3Qgc2l6ZV90 IGxqc19oZWFkZXJfbGVuID0gc2l6ZW9mKGxqc19oZWFkZXIpIC8gc2l6ZW9mKGxqc19oZWFkZXJb MF0pOwo+Pj4KPj4+ICsjaWYgTFVBSklUX09TICE9IExVQUpJVF9PU19PU1gKPj4+ICsgc3RydWN0 IHN5bWJvbF9yZXNvbHZlcl9jb25mIGNvbmYgPSB7Cj4+PiArIG91dCwKPj4+ICsgU1lNVEFCX0NG VU5DLAo+Pj4gKyB9Owo+Pj4gKyNlbmRpZgo+Pj4gKwo+Pj4gLyogV3JpdGUgcHJvbG9ndWUuICov Cj4+PiBsal93YnVmX2FkZG4ob3V0LCBsanNfaGVhZGVyLCBsanNfaGVhZGVyX2xlbik7Cj4+Pgo+ Pj4gQEAgLTk1LDYgKzQyMSwxMCBAQCBzdGF0aWMgdm9pZCBkdW1wX3N5bXRhYihzdHJ1Y3QgbGpf d2J1ZiAqb3V0LCBjb25zdCBzdHJ1Y3QgZ2xvYmFsX1N0YXRlICpnKQo+Pj4gaXRlciA9ICZvLT5n Y2gubmV4dGdjOwo+Pj4gfQo+Pj4KPj4+ICsjaWYgTFVBSklUX09TICE9IExVQUpJVF9PU19PU1gK Pj4+ICsgLyogV3JpdGUgc3ltYm9scy4gKi8KPj4KPj5UeXBvPyBEbyB5b3UgbWVhbiBDIHN5bWJv bHM/Cj4+Cj4+PiArIGRsX2l0ZXJhdGVfcGhkcihyZXNvbHZlX3N5bWJvbG5hbWVzLCAmY29uZik7 Cj4+PiArI2VuZGlmCj4+PiBsal93YnVmX2FkZGJ5dGUob3V0LCBTWU1UQUJfRklOQUwpOwo+Pj4g fQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9zcmMvbGpfbWVtcHJvZi5oIGIvc3JjL2xqX21lbXByb2Yu aAo+Pj4gaW5kZXggMzk1ZmI0MjkuLjAzMjdhMjA1IDEwMDY0NAo+Pj4gLS0tIGEvc3JjL2xqX21l bXByb2YuaAo+Pj4gKysrIGIvc3JjL2xqX21lbXByb2YuaAo+Pgo+PjxzbmlwcGVkPgo+Pgo+Pj4g ZGlmZiAtLWdpdCBhL3Rlc3QvdGFyYW50b29sLXRlc3RzL3Rvb2xzLXV0aWxzLWF2bC50ZXN0Lmx1 YSBiL3Rlc3QvdGFyYW50b29sLXRlc3RzL3Rvb2xzLXV0aWxzLWF2bC50ZXN0Lmx1YQo+Pj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwLi4xN2NjN2E4NQo+Pj4gLS0tIC9k ZXYvbnVsbAo+Pj4gKysrIGIvdGVzdC90YXJhbnRvb2wtdGVzdHMvdG9vbHMtdXRpbHMtYXZsLnRl c3QubHVhCj4+PiBAQCAtMCwwICsxLDU5IEBACj4+PiArbG9jYWwgYXZsID0gcmVxdWlyZSAidXRp bHMuYXZsIgo+Pgo+Pk5pdDogUGxlYXNlLCB1c2UgcmVxdWlyZSgibW9kdWxlbmFtZSIpIGZvciBj b25zaXN0ZW5jeS4KPj5BbHNvLCBmb3Igb3VyIHRlc3RzIHdlIGFyZSB1c2luZyAnJyBpbnN0ZWFk ICIiIGZvciBzdHJpbmdzLgo+Pgo+Pj4gK2xvY2FsIHRhcCA9IHJlcXVpcmUoInRhcCIpCj4+PiAr Cj4+PiArbG9jYWwgdGVzdCA9IHRhcC50ZXN0KCJ0b29scy11dGlscy1hdmwiKQo+Pj4gK3Rlc3Q6 cGxhbig3KQo+Pj4gKwo+Pj4gK2xvY2FsIGZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUsIHJlc3VsdCkK Pj4+ICsgaWYgbm9kZSB+PSBuaWwgdGhlbgo+Pj4gKyB0YWJsZS5pbnNlcnQocmVzdWx0LCBub2Rl LmtleSkKPj4+ICsgdHJhdmVyc2Uobm9kZS5sZWZ0LCByZXN1bHQpCj4+PiArIHRyYXZlcnNlKG5v ZGUucmlnaHQsIHJlc3VsdCkKPj4+ICsgZW5kCj4+PiArIHJldHVybiByZXN1bHQKPj4+ICtlbmQK Pj4+ICsKPj4+ICtsb2NhbCBmdW5jdGlvbiBiYXRjaF9pbnNlcnQocm9vdCwgdmFsdWVzKQo+Pj4g KyBmb3IgaSA9IDEsICN2YWx1ZXMgZG8KPj4+ICsgcm9vdCA9IGF2bC5pbnNlcnQocm9vdCwgdmFs dWVzW2ldKQo+Pj4gKyBlbmQKPj4+ICsKPj4+ICsgcmV0dXJuIHJvb3QKPj4+ICtlbmQKPj4+ICsK Pj4+ICtsb2NhbCBmdW5jdGlvbiBjb21wYXJlKGFycjEsIGFycjIpCj4+PiArIGZvciBpLCB2IGlu IHBhaXJzKGFycjEpIGRvCj4+Cj4+Tml0OiB0aGlzIHRhYiBsb29rcyBjb25mdXNpbmcuCj4+Cj4+ PiArIGlmIHYgfj0gYXJyMltpXSB0aGVuCj4+PiArIHJldHVybiBmYWxzZQo+Pj4gKyBlbmQKPj4+ ICsgZW5kCj4+PiArIHJldHVybiB0cnVlCj4+PiArZW5kCj4+PiArCj4+PiArLS0gMUwgcm90YXRp b24gdGVzdC4KPj4+ICtsb2NhbCByb290ID0gYmF0Y2hfaW5zZXJ0KG5pbCwgezEsIDIsIDN9KQo+ Pj4gK3Rlc3Q6b2soY29tcGFyZSh0cmF2ZXJzZShyb290LCB7fSksIHsyLCAxLCAzfSkpCj4+PiAr Cj4+PiArLS0gMVIgcm90YXRpb24gdGVzdC4KPj4+ICtyb290ID0gYmF0Y2hfaW5zZXJ0KG5pbCwg ezMsIDIsIDF9KQo+Pj4gK3Rlc3Q6b2soY29tcGFyZSh0cmF2ZXJzZShyb290LCB7fSksIHsyLCAx LCAzfSkpCj4+PiArCj4+PiArLS0gMkwgcm90YXRpb24gdGVzdC4KPj4+ICtyb290ID0gYmF0Y2hf aW5zZXJ0KG5pbCwgezEsIDMsIDJ9KQo+Pj4gK3Rlc3Q6b2soY29tcGFyZSh0cmF2ZXJzZShyb290 LCB7fSksIHsyLCAxLCAzfSkpCj4+PiArCj4+PiArLS0gMlIgcm90YXRpb24gdGVzdC4KPj4+ICty b290ID0gYmF0Y2hfaW5zZXJ0KG5pbCwgezMsIDEsIDJ9KQo+Pj4gK3Rlc3Q6b2soY29tcGFyZSh0 cmF2ZXJzZShyb290LCB7fSksIHsyLCAxLCAzfSkpCj4+PiArCj4+PiArLS0gRXhhY3QgdXBwZXIg Ym91bmQuCj4+PiArdGVzdDpvayhhdmwudXBwZXJfYm91bmQocm9vdCwgMSkgPT0gMSkKPj4+ICsK Pj4+ICstLSBObyB1cHBlciBib3VuZC4KPj4+ICt0ZXN0Om9rKGF2bC51cHBlcl9ib3VuZChyb290 LCAtMTApID09IG5pbCkKPj4+ICsKPj4+ICstLSBOb3QgZXhhY3QgdXBwZXIgYm91bmQuCj4+PiAr dGVzdDpvayhhdmwudXBwZXJfYm91bmQocm9vdCwgMi43NSkgPT0gMikKPj4+ICsKPj4+ICsKPj4+ ICsKPj4KPj5OaXQ6IFBsZWFzZSwgcmVtb3ZlIHVubmVjZXNzYXJ5IGVtcHR5IGxpbmVzLgo+Pk5p dDogUGxlYXNlLCBhbmQgb3MuZXhpdCgpIGxpa2UgaXQgaXMgZG9uZSBpbiBvdGhlciB0ZXN0cy4K Pj4KPj4+IGRpZmYgLS1naXQgYS90b29scy9DTWFrZUxpc3RzLnR4dCBiL3Rvb2xzL0NNYWtlTGlz dHMudHh0Cj4+PiBpbmRleCA2MTgzMGU0NC4uYzY4MDNkMDAgMTAwNjQ0Cj4+PiAtLS0gYS90b29s cy9DTWFrZUxpc3RzLnR4dAo+Pj4gKysrIGIvdG9vbHMvQ01ha2VMaXN0cy50eHQKPj4+IEBAIC0z MCw2ICszMCw3IEBAIGVsc2UoKQo+Pj4gbWVtcHJvZi9odW1hbml6ZS5sdWEKPj4+IG1lbXByb2Yv cGFyc2UubHVhCj4+PiBtZW1wcm9mLmx1YQo+Pj4gKyB1dGlscy9hdmwubHVhCj4+PiB1dGlscy9i dWZyZWFkLmx1YQo+Pj4gdXRpbHMvc3ltdGFiLmx1YQo+Pj4gKQo+Pj4gQEAgLTQ2LDYgKzQ3LDcg QEAgZWxzZSgpCj4+PiBDT01QT05FTlQgdG9vbHMtcGFyc2UtbWVtcHJvZgo+Pj4gKQo+Pj4gaW5z dGFsbChGSUxFUwo+Pj4gKyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdXRpbHMvYXZsLmx1 YQo+Pj4gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3V0aWxzL2J1ZnJlYWQubHVhCj4+PiAk e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdXRpbHMvc3ltdGFiLmx1YQo+Pj4gREVTVElOQVRJ T04gJHtMVUFKSVRfREFUQVJPT1RESVJ9L3V0aWxzCj4+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvdXRp bHMvYXZsLmx1YSBiL3Rvb2xzL3V0aWxzL2F2bC5sdWEKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwMC4uOThjMTViZDcKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBi L3Rvb2xzL3V0aWxzL2F2bC5sdWEKPj4+IEBAIC0wLDAgKzEsMTE4IEBACj4+PiArbG9jYWwgbWF0 aCA9IHJlcXVpcmUnbWF0aCcKPj4KPj5OaXQ6IHRoaXMgcmVxdWlyZSBpcyBleGNlc3MuCj4+Cj4+ PiArCj4+PiArbG9jYWwgTSA9IHt9Cj4+PiArbG9jYWwgbWF4ID0gbWF0aC5tYXgKPj4KPj48c25p cHBlZD4KPj4KPj4+ICtmdW5jdGlvbiBNLnVwcGVyX2JvdW5kKG5vZGUsIGtleSkKPj4+ICsgaWYg bm9kZSA9PSBuaWwgdGhlbgo+Pj4gKyByZXR1cm4gbmlsLCBuaWwKPj4+ICsgZW5kCj4+PiArIC0t IEV4cGxpY2l0IG1hdGNoLgo+Pj4gKyBpZiBrZXkgPT0gbm9kZS5rZXkgdGhlbgo+Pj4gKyByZXR1 cm4gbm9kZS5rZXksIG5vZGUudmFsdWUKPj4+ICsgZWxzZWlmIGtleSA8IG5vZGUua2V5IHRoZW4K Pj4+ICsgcmV0dXJuIE0udXBwZXJfYm91bmQobm9kZS5sZWZ0LCBrZXkpCj4+PiArIGVsc2VpZiBr ZXkgPiBub2RlLmtleSB0aGVuCj4+PiArIGxvY2FsIHJpZ2h0X2tleSwgdmFsdWUgPSBNLnVwcGVy X2JvdW5kKG5vZGUucmlnaHQsIGtleSkKPj4+ICsgcmlnaHRfa2V5ID0gcmlnaHRfa2V5IG9yIG5v ZGUua2V5Cj4+PiArIHZhbHVlID0gdmFsdWUgb3Igbm9kZS52YWx1ZQo+Pj4gKwo+Pj4gKyByZXR1 cm4gcmlnaHRfa2V5LCB2YWx1ZQo+Pj4gKyBlbmQKPj4+ICtlbmQKPj4+ICsKPj4KPj5OaXQ6IFRo aXMgZW1wdHkgbGluZSBpcyBleGNlc3MuCj4+Cj4+PiArCj4+PiArcmV0dXJuIE0KPj4+ICsKPj4K Pj5OaXQ6IFRoaXMgZW1wdHkgbGluZSBpcyBleGNlc3MuCj4+Cj4+PiBkaWZmIC0tZ2l0IGEvdG9v bHMvdXRpbHMvc3ltdGFiLmx1YSBiL3Rvb2xzL3V0aWxzL3N5bXRhYi5sdWEKPj4+IGluZGV4IGM3 ZmNmNzdjLi5hYTY2MjY5YyAxMDA2NDQKPj4+IC0tLSBhL3Rvb2xzL3V0aWxzL3N5bXRhYi5sdWEK Pj4+ICsrKyBiL3Rvb2xzL3V0aWxzL3N5bXRhYi5sdWEKPj4+IEBAIC02LDYgKzYsOCBAQAo+Pj4K Pj4+IGxvY2FsIGJpdCA9IHJlcXVpcmUgImJpdCIKPj4+Cj4+PiArbG9jYWwgYXZsID0gcmVxdWly ZSAidXRpbHMuYXZsIgo+Pj4gKwo+Pj4gbG9jYWwgYmFuZCA9IGJpdC5iYW5kCj4+PiBsb2NhbCBz dHJpbmdfZm9ybWF0ID0gc3RyaW5nLmZvcm1hdAo+Pj4KPj4+IEBAIC0xNSw3ICsxNyw4IEBAIGxv Y2FsIExKU19FUElMT0dVRV9IRUFERVIgPSAweDgwCj4+PiBsb2NhbCBMSlNfU1lNVFlQRV9NQVNL ID0gMHgwMwo+Pj4KPj4+IGxvY2FsIFNZTVRBQl9MRlVOQyA9IDAKPj4+IC1sb2NhbCBTWU1UQUJf VFJBQ0UgPSAxCj4+PiArbG9jYWwgU1lNVEFCX0NGVU5DID0gMQo+Pj4gK2xvY2FsIFNZTVRBQl9U UkFDRSA9IDIKPj4+Cj4+PiBsb2NhbCBNID0ge30KPj4+Cj4+PiBAQCAtNTAsMTUgKzUzLDI3IEBA IGxvY2FsIGZ1bmN0aW9uIHBhcnNlX3N5bV90cmFjZShyZWFkZXIsIHN5bXRhYikKPj4+IH0KPj4+ IGVuZAo+Pj4KPj4+ICstLSBQYXJzZSBhIHNpbmdsZSBlbnRyeSBpbiBhIHN5bXRhYjogLnNvIGxp YnJhcnkKPj4+ICtsb2NhbCBmdW5jdGlvbiBwYXJzZV9zeW1fY2Z1bmMocmVhZGVyLCBzeW10YWIp Cj4+PiArIGxvY2FsIGFkZHIgPSByZWFkZXI6cmVhZF91bGViMTI4KCkKPj4+ICsgbG9jYWwgbmFt ZSA9IHJlYWRlcjpyZWFkX3N0cmluZygpCj4+PiArCj4+PiArIHN5bXRhYi5jZnVuYyA9IGF2bC5p bnNlcnQoc3ltdGFiLmNmdW5jLCBhZGRyLCB7Cj4+PiArIG5hbWUgPSBuYW1lCj4+PiArIH0pCj4+ PiArZW5kCj4+Cj4+U2lkZSBub3RlOiBEb2VzIGl0IHN1ZmZpY2llbnQgZm9yIGFsbCAzIGNhc2Vz IG1lbnRpb25lZCBhYm92ZSBhcyBmYXIgYXMKPj5mb3JtYXQgaXMgdGhlIHNhbWU/Cj4+Cj4+PiAr Cj4+PiBsb2NhbCBwYXJzZXJzID0gewo+Pj4gW1NZTVRBQl9MRlVOQ10gPSBwYXJzZV9zeW1fbGZ1 bmMsCj4+PiBbU1lNVEFCX1RSQUNFXSA9IHBhcnNlX3N5bV90cmFjZSwKPj4+ICsgW1NZTVRBQl9D RlVOQ10gPSBwYXJzZV9zeW1fY2Z1bmMKPj4+IH0KPj4+Cj4+PiBmdW5jdGlvbiBNLnBhcnNlKHJl YWRlcikKPj4+IGxvY2FsIHN5bXRhYiA9IHsKPj4+IGxmdW5jID0ge30sCj4+PiB0cmFjZSA9IHt9 LAo+Pj4gKyBjZnVuYyA9IG5pbCwKPj4+IH0KPj4+IGxvY2FsIG1hZ2ljID0gcmVhZGVyOnJlYWRf b2N0ZXRzKDMpCj4+PiBsb2NhbCB2ZXJzaW9uID0gcmVhZGVyOnJlYWRfb2N0ZXRzKDEpCj4+PiBA QCAtOTMsNyArMTA4LDYgQEAgZnVuY3Rpb24gTS5wYXJzZShyZWFkZXIpCj4+PiBwYXJzZXJzW3N5 bV90eXBlXShyZWFkZXIsIHN5bXRhYikKPj4+IGVuZAo+Pj4gZW5kCj4+PiAtCj4+Cj4+Tml0OiBU aGlzIGNoYW5nZSBpcyB1bm5lY2Vzc2FyeS4KPj4KPj4+IHJldHVybiBzeW10YWIKPj4+IGVuZAo+ Pj4KPj4+IEBAIC0xMzUsNiArMTQ5LDEyIEBAIGZ1bmN0aW9uIE0uZGVtYW5nbGUoc3ltdGFiLCBs b2MpCj4+PiByZXR1cm4gc3RyaW5nX2Zvcm1hdCgiJXM6JWQiLCBzeW10YWIubGZ1bmNbYWRkcl0u c291cmNlLCBsb2MubGluZSkKPj4+IGVuZAo+Pj4KPj4+ICsgbG9jYWwga2V5LCB2YWx1ZSA9IGF2 bC51cHBlcl9ib3VuZChzeW10YWIuY2Z1bmMsIGFkZHIpCj4+PiArCj4+PiArIGlmIGtleSB0aGVu Cj4+PiArIHJldHVybiBzdHJpbmdfZm9ybWF0KCIlczolI3giLCB2YWx1ZS5uYW1lLCBrZXkpCj4+ PiArIGVuZAo+Pj4gKwo+Pj4gcmV0dXJuIHN0cmluZ19mb3JtYXQoIkNGVU5DICUjeCIsIGFkZHIp Cj4+PiBlbmQKPj4+Cj4+PiAtLQo+Pj4gMi4zNS4xCj4+Pgo+Pgo+Pi0tCj4+QmVzdCByZWdhcmRz LAo+PlNlcmdleSBLYXBsdW4KPsKg ----ALT--dCe0Cd191f793d81aF54A9c5Db16E0771647695315 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+SGkhPC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48ZGl2PlRoYW5rcyBm b3IgdGhlIGNvbW1lbnRzITwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGRpdj5JIGhhdmUgYSBxdWVz dGlvbiByZWdhcmRpbmcgdGVzdHM6IGlzIGl0IE9LIHRvIGJyaW5nIGEgdGVzdCZuYnNwOy5zbyBm aWxlIGZvciBlYWNoIGNhc2U8L2Rpdj48ZGl2Pm9yIHNob3VsZCBJIGRvIGl0IGluIGEgZGlmZmVy ZW50IHdheT88L2Rpdj48ZGl2IGRhdGEtc2lnbmF0dXJlLXdpZGdldD0iY29udGFpbmVyIj48ZGl2 IHNwZWxsY2hlY2s9ImZhbHNlIiBkYXRhLXNpZ25hdHVyZS13aWRnZXQ9ImNvbnRlbnQiPjxkaXY+ LS08YnI+QmVzdCByZWdhcmRzLDwvZGl2PjxkaXY+TWF4aW0gS29rcnlhc2hraW48L2Rpdj48L2Rp dj48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGJsb2NrcXVvdGUgc3R5 bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2OyBtYXJnaW46MTBweDsgcGFkZGluZzow IDAgMCAxMHB4OyI+PGRpdj4mbmJzcDs8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6MXB4 IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRkaW5nOjAgMCAwIDEwcHg7Ij48ZGl2IGlk PSIiPjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48ZGl2IGlkPSJz dHlsZV8xNjQ3NTg2MjE2MTQyNjY5Nzg3Nl9CT0RZIj5IaSwgTWF4aW0hPGJyPjxicj5UaGFua3Mg Zm9yIHRoZSBmaXhlcyE8YnI+PGJyPlBsZWFzZSBjb25zaWRlciBteSBjb21tZW50cyBiZWxvdy48 YnI+PGJyPk5COiBQbGVhc2UgYWRkIHRlc3RzIGZvciB0aGlzIHBhdGNoLiBJIHN1Z2dlc3QgdGVz dHMgdGhhdCB3aWxsIGNvdmVyIDM8YnI+YnJhbmNoZXM6PGJyPiogRUxGIHJlYWRpbmcgYW5kIHBh cnNpbmc8YnI+KiBEdW1waW5nIGZ1bmN0aW9ucyBvbmx5IGZyb20gUFRfRFlOQU1JQyBzZWdtZW50 IChpbmNsdWRlcyAyIHR5cGVzIG9mPGJyPiZuYnNwOyZuYnNwO2hhc2hlcyk8YnI+KiBEdW1waW5n IG9ubHkgLnNvIG5hbWUsIGFzIGxhc3QgZmFsbGJhY2s8YnI+PGJyPkFsc28sIHJlZ2FyZGluZyBj b2RlIHN0eWxlOiBwbGVhc2UsIHVzZSBxdWF0ZXItaGFsZiB0YWJzICg4IHdoaXRlc3BhY3Nlczxi cj5zaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAxIHRhYiwgYW5kIGluZGVudGF0aW9uIGxldmVsIGlz IDIpIGZvciBhbGw8YnI+THVhSklUIEMgc291cmNlcy48YnI+PGJyPk9uIDA0LjAzLjIyLCBNYXhp bSBLb2tyeWFzaGtpbiB3cm90ZTo8YnI+Jmd0OyBUaGlzIGNvbW1pdCBlbnJpY2hlcyBtZW1wcm9m J3Mgc3ltYm9sIHRhYmxlIHdpdGggaW5mb3JtYXRpb248YnI+PGJyPiZsdDtzbmlwcGVkJmd0Ozxi cj48YnI+Jmd0Ozxicj4mZ3Q7IE1ha2VmaWxlLm9yaWdpbmFsIHwgMiArLTxicj4mZ3Q7IHNyYy9s al9tZW1wcm9mLmMgfCAzMzAgKysrKysrKysrKysrKysrKysrPGJyPiZndDsgc3JjL2xqX21lbXBy b2YuaCB8IDcgKy08YnI+Jmd0OyB0ZXN0L3RhcmFudG9vbC10ZXN0cy90b29scy11dGlscy1hdmwu dGVzdC5sdWEgfCA1OSArKysrPGJyPiZndDsgdG9vbHMvQ01ha2VMaXN0cy50eHQgfCAyICs8YnI+ Jmd0OyB0b29scy91dGlscy9hdmwubHVhIHwgMTE4ICsrKysrKys8YnI+PGJyPk1heSBiZSB3ZSBj YW4gYWRkIGF2bC5sdWEgdXRpbHMgbW9kdWxlIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdGVzdHMg aW48YnI+dGhlIHNlcGFyYXRlIGNvbW1pdCBhbmQgbWFyayB0aGlzIGNvbW1pdCBhcyAiTmVlZGVk IGZvciI/PGJyPkp1c3QgdHJ5aW5nIHRvIHVzZSB0aGUgbW9zdCBhdG9taWMgY29tbWl0IHdheS48 YnI+RmVlbCBmcmVlIHRvIGlnbm9yZS48YnI+PGJyPiZndDsgdG9vbHMvdXRpbHMvc3ltdGFiLmx1 YSB8IDI0ICstPGJyPiZndDsgNyBmaWxlcyBjaGFuZ2VkLCA1MzcgaW5zZXJ0aW9ucygrKSwgNSBk ZWxldGlvbnMoLSk8YnI+Jmd0OyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC90YXJhbnRvb2wtdGVz dHMvdG9vbHMtdXRpbHMtYXZsLnRlc3QubHVhPGJyPiZndDsgY3JlYXRlIG1vZGUgMTAwNjQ0IHRv b2xzL3V0aWxzL2F2bC5sdWE8YnI+Jmd0Ozxicj4mZ3Q7IGRpZmYgLS1naXQgYS9NYWtlZmlsZS5v cmlnaW5hbCBiL01ha2VmaWxlLm9yaWdpbmFsPGJyPiZndDsgaW5kZXggMzNkYzJlZDUuLjBjOTJk ZjllIDEwMDY0NDxicj4mZ3Q7IC0tLSBhL01ha2VmaWxlLm9yaWdpbmFsPGJyPiZndDsgKysrIGIv TWFrZWZpbGUub3JpZ2luYWw8YnI+PGJyPiZsdDtzbmlwcGVkJmd0Ozxicj48YnI+Jmd0OyBkaWZm IC0tZ2l0IGEvc3JjL2xqX21lbXByb2YuYyBiL3NyYy9sal9tZW1wcm9mLmM8YnI+Jmd0OyBpbmRl eCAyZDc3OTk4My4uNzFjMWRhN2YgMTAwNjQ0PGJyPiZndDsgLS0tIGEvc3JjL2xqX21lbXByb2Yu Yzxicj4mZ3Q7ICsrKyBiL3NyYy9sal9tZW1wcm9mLmM8YnI+Jmd0OyBAQCAtOCwxMSArOCwyMiBA QDxicj4mZ3Q7ICNkZWZpbmUgbGpfbWVtcHJvZl9jPGJyPiZndDsgI2RlZmluZSBMVUFfQ09SRTxi cj4mZ3Q7PGJyPiZndDsgKyNkZWZpbmUgX0dOVV9TT1VSQ0U8YnI+Jmd0OyArPGJyPiZndDsgKyNp bmNsdWRlICZsdDthc3NlcnQuaCZndDs8YnI+PGJyPlRoaXMgaW5jbHVkZSBpcyBleGNlc3MuPGJy Pjxicj4mZ3Q7ICNpbmNsdWRlICZsdDtlcnJuby5oJmd0Ozxicj4mZ3Q7ICsjaW5jbHVkZSAmbHQ7 c3RkaW8uaCZndDs8YnI+Jmd0OyArI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0Ozxicj4mZ3Q7ICsj aW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7PGJyPjxicj4mbHQ7c3RyaW5nLmgmZ3Q7IGFuZCAmbHQ7 c3RkbGliLmgmZ3Q7IGFyZSBpbmNsdWRlZCBpbnNpZGUgbGpfZGVmLmgsIHNvIHRoaXMgaW5jbHVk ZSBpcyBleGNlc3MuPGJyPjxicj4mZ3Q7PGJyPiZndDsgI2luY2x1ZGUgImxqX2FyY2guaCI8YnI+ Jmd0OyAjaW5jbHVkZSAibGpfbWVtcHJvZi5oIjxicj4mZ3Q7PGJyPiZndDsgKyNpZiBMVUFKSVRf T1MgIT0gTFVBSklUX09TX09TWDxicj4mZ3Q7ICsjaW5jbHVkZSAmbHQ7ZWxmLmgmZ3Q7PGJyPiZn dDsgKyNpbmNsdWRlICZsdDtsaW5rLmgmZ3Q7PGJyPiZndDsgKyNpbmNsdWRlICZsdDtzeXMvYXV4 di5oJmd0Ozxicj4mZ3Q7ICsjZW5kaWY8YnI+Jmd0OyAjaWYgTEpfSEFTTUVNUFJPRjxicj4mZ3Q7 PGJyPiZndDsgI2luY2x1ZGUgImxqX29iai5oIjxicj4mZ3Q7IEBAIC02NiwxMiArNzcsMzI3IEBA IHN0YXRpYyB2b2lkIGR1bXBfc3ltdGFiX3RyYWNlKHN0cnVjdCBsal93YnVmICpvdXQsIGNvbnN0 IEdDdHJhY2UgKnRyYWNlKTxicj4mZ3Q7PGJyPiZndDsgI2VuZGlmPGJyPiZndDs8YnI+Jmd0OyAr I2lmIExVQUpJVF9PUyAhPSBMVUFKSVRfT1NfT1NYPGJyPiZndDsgKzxicj4mZ3Q7ICtzdHJ1Y3Qg Z2hhc2h0YWJfaGVhZGVyIHs8YnI+Jmd0OyArIHVpbnQzMl90IG5idWNrZXRzOzxicj4mZ3Q7ICsg dWludDMyX3Qgc3ltb2Zmc2V0Ozxicj4mZ3Q7ICsgdWludDMyX3QgYmxvb21fc2l6ZTs8YnI+Jmd0 OyArIHVpbnQzMl90IGJsb29tX3NoaWZ0Ozxicj4mZ3Q7ICt9Ozxicj4mZ3Q7ICs8YnI+Jmd0OyAr dWludDMyX3QgZ2hhc2h0YWJfc2l6ZShFbGZXKEFkZHIpIGdoYXNodGFiKTxicj48YnI+UGxlYXNl IHVzZSBgc3RhdGljYCBhcyBmYXIgYXMgdGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgcHVibGlj Ljxicj5IZXJlIGFuZCBiZWxvdy48YnI+PGJyPiZndDsgK3s8YnI+Jmd0OyArIC8qPGJyPiZndDsg KyAqKiBUaGVyZSBpcyBubyBlYXN5IHdheSB0byBnZXQgY291bnQgb2Ygc3ltYm9scyBpbiBHTlUg aGFzaHRhYmxlLCBzbyB0aGU8YnI+Jmd0OyArICoqIG9ubHkgd2F5IHRvIGRvIHRoaXMgaXMgdG8g dGFrZSBoaWdoZXN0IHBvc3NpYmxlIG5vbi1lbXB0eSBidWNrZXQgYW5kPGJyPiZndDsgKyAqKiBp dGVyYXRlIHRocm91Z2ggaXRzIHN5bWJvbHMgdW50aWwgdGhlIGxhc3QgY2hhaW4gaXMgb3Zlci48 YnI+Jmd0OyArICovPGJyPiZndDsgKyB1aW50MzJfdCBsYXN0X2VudHJ5ID0gMDs8YnI+Jmd0OyAr IHVpbnQzMl90ICpjdXJfYnVja2V0ID0gTlVMTDs8YnI+Jmd0OyArPGJyPiZndDsgKyBjb25zdCB1 aW50MzJfdCAqY2hhaW4gPSBOVUxMOzxicj4mZ3Q7ICsgc3RydWN0IGdoYXNodGFiX2hlYWRlciAq aGVhZGVyID0gKHN0cnVjdCBnaGFzaHRhYl9oZWFkZXIqKWdoYXNodGFiOzxicj4mZ3Q7ICsgLyo8 YnI+Jmd0OyArICoqIHNpemVvZihzaXplX3QpIHJldHVybnMgOCwgaWYgY29tcGlsZWQgd2l0aCA2 NC1iaXQgY29tcGlsZXIsIGFuZCA0IGlmPGJyPiZndDsgKyAqKiBjb21waWxlZCB3aXRoIDMyLWJp dCBjb21waWxlci4gSXQgaXMgdGhlIGJlc3Qgb3B0aW9uIHRvIGRldGVybWluZSB3aGljaDxicj4m Z3Q7ICsgKioga2luZCBvZiBDUFUgd2UgYXJlIHJ1bm5pbmcgb24uPGJyPiZndDsgKyAqLzxicj4m Z3Q7ICsgY29uc3QgY2hhciAqYnVja2V0cyA9IChjaGFyKilnaGFzaHRhYiArIHNpemVvZihzdHJ1 Y3QgZ2hhc2h0YWJfaGVhZGVyKSArPGJyPjxicj5OaXQ6IFBsZWFzZSwgdXNlIGBjaGFyICpgIGlu c3RlYWQgYGNoYXIqYC48YnI+SGVyZSBhbmQgYmVsb3cgZm9yIGFsbCBjYXN0cy48YnI+PGJyPiZn dDsgKyBzaXplb2Yoc2l6ZV90KSAqIGhlYWRlci0mZ3Q7Ymxvb21fc2l6ZTs8YnI+Jmd0OyArPGJy PiZndDsgKyBjdXJfYnVja2V0ID0gKHVpbnQzMl90KilidWNrZXRzOzxicj48YnI+QUZBSUNTLCBg Y3VyX2J1Y2tldGAgY2FuIGJlIGRlY2xhcmVkIGhlcmUuPGJyPjxicj4mZ3Q7ICsgZm9yICh1aW50 MzJfdCBpID0gMDsgaSAmbHQ7IGhlYWRlci0mZ3Q7bmJ1Y2tldHM7ICsraSkgezxicj4mZ3Q7ICsg aWYgKGxhc3RfZW50cnkgJmx0OyAqY3VyX2J1Y2tldCk8YnI+Jmd0OyArIGxhc3RfZW50cnkgPSAq Y3VyX2J1Y2tldDs8YnI+Jmd0OyArIGN1cl9idWNrZXQrKzs8YnI+Jmd0OyArIH08YnI+Jmd0OyAr PGJyPiZndDsgKyBpZiAobGFzdF9lbnRyeSAmbHQ7IGhlYWRlci0mZ3Q7c3ltb2Zmc2V0KTxicj4m Z3Q7ICsgcmV0dXJuIGhlYWRlci0mZ3Q7c3ltb2Zmc2V0Ozxicj4mZ3Q7ICs8YnI+Jmd0OyArIGNo YWluID0gKHVpbnQzMl90KikoYnVja2V0cyArIHNpemVvZih1aW50MzJfdCkgKiBoZWFkZXItJmd0 O25idWNrZXRzKTs8YnI+Jmd0OyArIC8qIFRoZSBjaGFpbiBlbmRzIHdpdGggdGhlIGxvd2VzdCBi aXQgc2V0IHRvIDEuICovPGJyPiZndDsgKyB3aGlsZSAoIShjaGFpbltsYXN0X2VudHJ5IC0gaGVh ZGVyLSZndDtzeW1vZmZzZXRdICZhbXA7IDEpKSB7PGJyPiZndDsgKyBsYXN0X2VudHJ5Kys7PGJy PiZndDsgKyB9PGJyPjxicj5OaXQ6IHsgfSBhcmUgZXhjZXNzLjxicj48YnI+Jmd0OyArPGJyPiZn dDsgKyByZXR1cm4gKytsYXN0X2VudHJ5Ozxicj4mZ3Q7ICt9PGJyPiZndDsgKzxicj4mZ3Q7ICtz dHJ1Y3Qgc3ltYm9sX3Jlc29sdmVyX2NvbmYgezxicj4mZ3Q7ICsgc3RydWN0IGxqX3didWYgKmJ1 Zjs8YnI+Jmd0OyArIGNvbnN0IHVpbnQ4X3QgaGVhZGVyOzxicj48YnI+SSdtIGEgbGl0dGxlIGJp dCBjb25mdXNlZCBhYm91dCB0aGlzIGZpZWxkOiBkbyB3ZSBuZWVkIGl0Pzxicj5BRkFJQ1MgYmVs b3csIGl0IGlzIGFsd2F5cyBTWU1UQUJfQ0ZVTkMuIFNvIHdlIGNhbiBqdXN0IHVzZSB0aGlzPGJy PmNvbnN0YW50IGluIHRoZSBkdW1wLiBBbHNvLCBpdCByZWR1Y2VzIGFtb3VudCBvZiBwYXJhbWV0 ZXJzIGluIGFsbCB0aGVzZTxicj5mdW5jdGlvbnMsIGRvZXNuJ3QgaXQ/PGJyPjxicj4mZ3Q7ICt9 Ozxicj48YnI+Tml0OiBwbGVhc2UgbW92ZSB0aGlzIGRlY2xhcmF0aW9uIGJlbG93IChuZWFyYnkg aXRzIHVzYWdlKS48YnI+PGJyPiZndDsgKzxicj4mZ3Q7ICt2b2lkIHdyaXRlX2Nfc3ltdGFiKEVs ZlcoU3ltKikgc3ltLCBjaGFyICpzdHJ0YWIsIEVsZlcoQWRkcikgc29fYWRkciw8YnI+Jmd0OyAr IHNpemVfdCBzeW1fY250LCBjb25zdCB1aW50OF90IGhlYWRlciwgc3RydWN0IGxqX3didWYgKmJ1 Zikgezxicj48YnI+Tml0OiBwbGVhc2UgdG8gZm9ybWF0IHRoaXMgbGluZSAoaXQgc2hvdWxkIHN0 YXJ0cyBhZnRlciBvcGVuaW5nPGJyPiIoIiB3aXRoIHBhcmFtZXRlcnMgZGVjbGFyYXRpb25zLjxi cj5BbHNvLCBwbGVhc2UgbW92ZSBge2AgdG8gdGhlIG5leHQgbGluZS48YnI+PGJyPnwgc3RhdGlj IHZvaWQgd3JpdGVfY19zeW10YWIoRWxmVyhTeW0qKSBzeW0sIGNoYXIgKnN0cnRhYiwgRWxmVyhB ZGRyKSBzb19hZGRyLDxicj58IHNpemVfdCBzeW1fY250LCBjb25zdCB1aW50OF90IGhlYWRlciw8 YnI+fCBzdHJ1Y3QgbGpfd2J1ZiAqYnVmKTxicj58IHs8YnI+PGJyPkhlcmUgYW5kIGJlbG93IGZv ciBvdGhlciBmdW5jdGlvbnMuPGJyPjxicj4mZ3Q7ICsgY2hhciAqc3ltX25hbWUgPSBOVUxMOzxi cj4mZ3Q7ICs8YnI+Jmd0OyArIC8qPGJyPiZndDsgKyAqKiBJbmRleCAwIGluIEVMRiBzeW10YWIg aXMgdXNlZCB0bzxicj48YnI+Tml0OiBzb21ldGhpbmcgc3RyYW5nZSB3aXRoIGxpbmUgYnJlYWsg aGVyZS48YnI+PGJyPiZndDsgKyAqKiByZXByZXNlbnQgdW5kZWZpbmVkIHN5bWJvbHMuIEhlbmNl LCB3ZSBjYW4ganVzdDxicj4mZ3Q7ICsgKiogc3RhcnQgd2l0aCBpbmRleCAxLjxicj4mZ3Q7ICsg Kio8YnI+Jmd0OyArICoqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6PGJyPiZndDsgKyAqKiA8 YSBocmVmPSJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9jZC9FMjM4MjRfMDEvaHRtbC84MTktMDY5 MC9jaGFwdGVyNi03OTc5Ny5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9kb2NzLm9yYWNs ZS5jb20vY2QvRTIzODI0XzAxL2h0bWwvODE5LTA2OTAvY2hhcHRlcjYtNzk3OTcuaHRtbDwvYT48 YnI+Jmd0OyArICovPGJyPiZndDsgKzxicj4mZ3Q7ICsgZm9yIChFbGZXKFdvcmQpIHN5bV9pbmRl eCA9IDE7IHN5bV9pbmRleCAmbHQ7IHN5bV9jbnQ7IHN5bV9pbmRleCsrKSB7PGJyPiZndDsgKyAv Kjxicj4mZ3Q7ICsgKiogRUxGMzJfU1RfVFlQRSBhbmQgRUxGNjRfU1RfVFlQRSBhcmUgdGhlIHNh bWUsIHNvIHdlIGNhbiB1c2U8YnI+Jmd0OyArICoqIEVMRjMyX1NUX1RZUEUgZm9yIGJvdGggNjQt Yml0IGFuZCAzMi1iaXQgRUxGcy48YnI+Jmd0OyArICoqPGJyPiZndDsgKyAqKiBGb3IgbW9yZSwg c2VlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iLzkxMzdl ZGE1Mzc1MmVmNzMxNDhlNDJiMGQ3NjQwYTAwZjFiYzk2YjEvaW5jbHVkZS91YXBpL2xpbnV4L2Vs Zi5oI0wxMzUiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vdG9ydmFsZHMvbGlu dXgvYmxvYi85MTM3ZWRhNTM3NTJlZjczMTQ4ZTQyYjBkNzY0MGEwMGYxYmM5NmIxL2luY2x1ZGUv dWFwaS9saW51eC9lbGYuaCNMMTM1PC9hPjxicj4mZ3Q7ICsgKi88YnI+Jmd0OyArIGlmIChFTEYz Ml9TVF9UWVBFKHN5bVtzeW1faW5kZXhdLnN0X2luZm8pID09IFNUVF9GVU5DKSB7PGJyPiZndDsg KyBpZiAoc3ltW3N5bV9pbmRleF0uc3RfbmFtZSA9PSAwKTxicj48YnI+Tml0OiBJIHN1cHBvc2Ug dGhhdCB0aGVzZSBjb25kaXRpb25zIGNhbiBiZSBqb2luZWQgdmlhICZhbXA7JmFtcDsuPGJyPjxi cj4mZ3Q7ICsgLyogU3ltYm9sIGhhcyBubyBuYW1lLiAqLzxicj4mZ3Q7ICsgY29udGludWU7PGJy PiZndDsgKyBzeW1fbmFtZSA9ICZhbXA7c3RydGFiW3N5bVtzeW1faW5kZXhdLnN0X25hbWVdOzxi cj48YnI+Tml0OiBBbHNvLCBhZnRlciBmaXhpbmcgdGhlIHByZXZpb3VzIGNvbW1lbnQgeW91IGNh biBtb3ZlIGRlY2xhcmF0aW9uIGZvcjxicj5gc3ltX25hbWVgIGhlcmUuPGJyPjxicj4mZ3Q7ICsg bGpfd2J1Zl9hZGRieXRlKGJ1ZiwgaGVhZGVyKTs8YnI+Jmd0OyArIGxqX3didWZfYWRkdTY0KGJ1 Ziwgc3ltW3N5bV9pbmRleF0uc3RfdmFsdWUgKyBzb19hZGRyKTs8YnI+Jmd0OyArIGxqX3didWZf YWRkc3RyaW5nKGJ1Ziwgc3ltX25hbWUpOzxicj4mZ3Q7ICsgfTxicj4mZ3Q7ICsgfTxicj4mZ3Q7 ICt9PGJyPiZndDsgKzxicj4mZ3Q7ICtpbnQgZHVtcF9zaHRfc3ltdGFiKGNvbnN0IGNoYXIgKmVs Zl9uYW1lLCBzdHJ1Y3QgbGpfd2J1ZiAqYnVmLDxicj4mZ3Q7ICsgY29uc3QgdWludDhfdCBoZWFk ZXIsIGNvbnN0IEVsZlcoQWRkcikgc29fYWRkcikgezxicj4mZ3Q7ICsgaW50IHN0YXR1cyA9IDA7 PGJyPiZndDsgKzxicj4mZ3Q7ICsgY2hhciAqc3RydGFiID0gTlVMTDs8YnI+Jmd0OyArIEVsZlco U2hkciopIHNlY3Rpb25faGVhZGVycyA9IE5VTEw7PGJyPiZndDsgKyBFbGZXKFN5bSopIHN5bSA9 IE5VTEw7PGJyPiZndDsgKyBFbGZXKEVoZHIpIGVsZl9oZWFkZXIgPSB7fTs8YnI+Jmd0OyArPGJy PiZndDsgKyBFbGZXKE9mZikgc3ltX29mZiA9IDA7PGJyPiZndDsgKyBFbGZXKE9mZikgc3RydGFi X29mZiA9IDA7PGJyPiZndDsgKzxicj4mZ3Q7ICsgc2l6ZV90IHN5bV9jbnQgPSAwOzxicj4mZ3Q7 ICsgc2l6ZV90IHN5bXRhYl9zaXplID0gMDs8YnI+Jmd0OyArIHNpemVfdCBzdHJ0YWJfc2l6ZSA9 IDA7PGJyPiZndDsgKyBzaXplX3Qgc3RydGFiX2luZGV4ID0gMDs8YnI+Jmd0OyArPGJyPiZndDsg KyBzaXplX3Qgc2hvZmYgPSAwOyAvKiBTZWN0aW9uIGhlYWRlcnMgb2Zmc2V0LiAqLzxicj4mZ3Q7 ICsgc2l6ZV90IHNobnVtID0gMDsgLyogU2VjdGlvbiBoZWFkZXJzIG51bWJlci4gKi88YnI+Jmd0 OyArIHNpemVfdCBzaGVudHNpemUgPSAwOyAvKiBTZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplLiAq Lzxicj4mZ3Q7ICs8YnI+Jmd0OyArIEZJTEUgKmVsZl9maWxlID0gZm9wZW4oZWxmX25hbWUsICJy YiIpOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGlmIChlbGZfZmlsZSA9PSBOVUxMKTxicj4mZ3Q7ICsg cmV0dXJuIC0xOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGZyZWFkKCZhbXA7ZWxmX2hlYWRlciwgc2l6 ZW9mKGVsZl9oZWFkZXIpLCAxLCBlbGZfZmlsZSk7PGJyPiZndDsgKyBpZiAoZmVycm9yKGVsZl9m aWxlKSAhPSAwKTxicj48YnI+Tml0OiBJIHN1cHBvc2Ugd2Ugc2hvdWxkIGNoZWNrIGFtb3VudCBv ZiByZWFkZW4gYnl0ZXMgYW5kIGNhbGw8YnI+YGZlcnJyb3IoKWAgb25seSBpZiB3ZSByZWFkIG5v dCBlbm91Z2ggYnl0ZXMuPGJyPkhlcmUgYW5kIGJlbG93Ljxicj48YnI+Jmd0OyArIGdvdG8gZXJy b3I7PGJyPiZndDsgKyBpZiAobWVtY21wKGVsZl9oZWFkZXIuZV9pZGVudCwgRUxGTUFHLCBTRUxG TUFHKSAhPSAwKTxicj4mZ3Q7ICsgLyogTm90IGEgdmFsaWQgRUxGIGZpbGUuICovPGJyPiZndDsg KyBnb3RvIGVycm9yOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIHNob2ZmID0gZWxmX2hlYWRlci5lX3No b2ZmOzxicj4mZ3Q7ICsgc2hudW0gPSBlbGZfaGVhZGVyLmVfc2hudW07PGJyPiZndDsgKyBzaGVu dHNpemUgPSBlbGZfaGVhZGVyLmVfc2hlbnRzaXplOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGlmIChz aG9mZiA9PSAwIHx8IHNobnVtID09IDAgfHwgc2hlbnRzaXplID09IDApPGJyPiZndDsgKyAvKiBO byBzZWN0aW9ucyBpbiBFTEYuICovPGJyPiZndDsgKyBnb3RvIGVycm9yOzxicj4mZ3Q7ICs8YnI+ Jmd0OyArIC8qPGJyPiZndDsgKyAqKiBNZW1vcnkgb2NjdXBpZWQgYnkgc2VjdGlvbiBoZWFkZXJz IGlzIHVubGlrZWx5IHRvIGJlIG1vcmUgdGhhbiAxNjBCLCBidXQ8YnI+Jmd0OyArICoqIDMyLWJp dCBhbmQgNjQtYml0IEVMRiBmaWxlcyBtYXkgaGF2ZSBzZWN0aW9ucyBvZiBkaWZmZXJlbnQgc2l6 ZXMgYW5kIHNvbWU8YnI+Jmd0OyArICoqIG9mIHRoZSBzZWN0aW9ucyBtYXkgZHVpcGxpY2F0ZSwg c28gd2UgbmVlZCB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50Ljxicj4mZ3Q7ICsgKi88YnI+Jmd0 OyArIHNlY3Rpb25faGVhZGVycyA9IGNhbGxvYyhzaG51bSwgc2hlbnRzaXplKTs8YnI+PGJyPkl0 J3MgYmV0dGVyIHRvIHVzZSBMdWFKSVQgYWxsb2NhdG9yIGhlcmUgYW5kIGJlbG93Ljxicj48YnI+ Jmd0OyArIGlmIChzZWN0aW9uX2hlYWRlcnMgPT0gTlVMTCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7 PGJyPiZndDsgKzxicj4mZ3Q7ICsgaWYgKGZzZWVrKGVsZl9maWxlLCBzaG9mZiwgU0VFS19TRVQp ICE9IDApPGJyPiZndDsgKyBnb3RvIGVycm9yOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGZyZWFkKHNl Y3Rpb25faGVhZGVycywgc2hlbnRzaXplLCBzaG51bSwgZWxmX2ZpbGUpOzxicj4mZ3Q7ICsgaWYg KGZlcnJvcihlbGZfZmlsZSkgIT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJyPiZndDsgKzxi cj4mZ3Q7ICsgZm9yIChzaXplX3QgaGVhZGVyX2luZGV4ID0gMDsgaGVhZGVyX2luZGV4ICZsdDsg c2hudW07ICsraGVhZGVyX2luZGV4KSB7PGJyPiZndDsgKyBpZihzZWN0aW9uX2hlYWRlcnNbaGVh ZGVyX2luZGV4XS5zaF90eXBlID09IFNIVF9TWU1UQUIpIHs8YnI+PGJyPk5pdDogUGF0dGVybiBg c2VjdGlvbl9oZWFkZXJzW2hlYWRlcl9pbmRleF1gIGlzIHJlcGVhdGVuIG9mdGVuIGJlbG93LiBJ PGJyPnN1Z2dlc3QgdG8gdXNlIGFkZGl0aW9uYWwgdmFyaWFibGUgZm9yIGl0Ljxicj48YnI+Jmd0 OyArIHN5bV9vZmYgPSBzZWN0aW9uX2hlYWRlcnNbaGVhZGVyX2luZGV4XS5zaF9vZmZzZXQ7PGJy PiZndDsgKyBzeW10YWJfc2l6ZSA9IHNlY3Rpb25faGVhZGVyc1toZWFkZXJfaW5kZXhdLnNoX3Np emU7PGJyPiZndDsgKyBzeW1fY250ID0gc3ltdGFiX3NpemUgLyBzZWN0aW9uX2hlYWRlcnNbaGVh ZGVyX2luZGV4XS5zaF9lbnRzaXplOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIHN0cnRhYl9pbmRleCA9 IHNlY3Rpb25faGVhZGVyc1toZWFkZXJfaW5kZXhdLnNoX2xpbms7PGJyPiZndDsgKzxicj4mZ3Q7 ICsgc3RydGFiX29mZiA9IHNlY3Rpb25faGVhZGVyc1tzdHJ0YWJfaW5kZXhdLnNoX29mZnNldDs8 YnI+Jmd0OyArIHN0cnRhYl9zaXplID0gc2VjdGlvbl9oZWFkZXJzW3N0cnRhYl9pbmRleF0uc2hf c2l6ZTs8YnI+Jmd0OyArIGJyZWFrOzxicj4mZ3Q7ICsgfTxicj4mZ3Q7ICsgfTxicj4mZ3Q7ICs8 YnI+Jmd0OyArIGlmIChzeW1fb2ZmID09IDAgfHwgc3RydGFiX29mZiA9PSAwIHx8IHN5bV9jbnQg PT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJyPiZndDsgKzxicj4mZ3Q7ICsgLyogTG9hZCBz dHJ0YWIgYW5kIHN5bXRhYiBpbnRvIG1lbW9yeS4gKi88YnI+PGJyPk5pdDogSSB3b3VsZCBsaWtl IHRvIHNlZSB0aGlzIGNvbW1lbnRzIHNlcGFyYXRlZCAtLSBjdXJyZW50IGZvcm1hdCBpczxicj50 b28gaGFyZC1yZWFkYWJsZSBkdWUgdG8gc2ltaWxhciBzdHJ1Y3R1cmUuIEl0IHdpbGwgYmUgbmlj ZSB0byBqb2luIGludG88YnI+b25lIGJsb2NrIGxvYWRpbmcgb2Ygc3ltdGFiIGFuZCBpbiB0aGUg b3RoZXIgb25lIGxvYWRpbmcgb2Ygc3RydGFiLjxicj48YnI+Jmd0OyArIHN5bSA9IGNhbGxvYyhz eW1fY250LCBzaXplb2YoRWxmVyhTeW0pKSk7PGJyPiZndDsgKyBpZiAoc3ltID09IE5VTEwpPGJy PiZndDsgKyBnb3RvIGVycm9yOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIHN0cnRhYiA9IGNhbGxvYyhz dHJ0YWJfc2l6ZSwgc2l6ZW9mKGNoYXIpKTs8YnI+Jmd0OyArIGlmIChzdHJ0YWIgPT0gTlVMTCk8 YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJyPiZndDsgKzxicj4mZ3Q7ICsgaWYgKGZzZWVrKGVsZl9m aWxlLCBzeW1fb2ZmLCBTRUVLX1NFVCkgIT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJyPiZn dDsgKzxicj4mZ3Q7ICsgZnJlYWQoc3ltLCBzaXplb2YoRWxmVyhTeW0pKSwgc3ltX2NudCwgZWxm X2ZpbGUpOzxicj4mZ3Q7ICsgaWYgKGZlcnJvcihlbGZfZmlsZSkgIT0gMCk8YnI+Jmd0OyArIGdv dG8gZXJyb3I7PGJyPiZndDsgKzxicj4mZ3Q7ICsgaWYgKGZzZWVrKGVsZl9maWxlLCBzdHJ0YWJf b2ZmLCBTRUVLX1NFVCkgIT0gMCk8YnI+Jmd0OyArIGdvdG8gZXJyb3I7PGJyPiZndDsgKzxicj4m Z3Q7ICsgZnJlYWQoc3RydGFiLCBzaXplb2YoY2hhciksIHN0cnRhYl9zaXplLCBlbGZfZmlsZSk7 PGJyPiZndDsgKyBpZiAoZmVycm9yKGVsZl9maWxlKSAhPSAwKTxicj4mZ3Q7ICsgZ290byBlcnJv cjs8YnI+Jmd0OyArPGJyPiZndDsgKyB3cml0ZV9jX3N5bXRhYihzeW0sIHN0cnRhYiwgc29fYWRk ciwgc3ltX2NudCwgaGVhZGVyLCBidWYpOzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGdvdG8gZW5kOzxi cj4mZ3Q7ICs8YnI+Jmd0OyArIGVycm9yOjxicj4mZ3Q7ICsgc3RhdHVzID0gLTE7PGJyPiZndDsg Kzxicj4mZ3Q7ICsgZW5kOjxicj4mZ3Q7ICsgZnJlZShzeW0pOzxicj48YnI+YHN5bWAgbWF5IGJl IG5vdCBhbGxvY2F0ZWQgd2hlbiB0aGlzIGxpbmUgaXMgcmVhY2hlZCAoZm9yIGV4YW1wbGUgb248 YnI+ZnJlYWQgZXJyb3IgZWFybGllcikuIFNhbWUgZm9yIGBzdHJ0YWJgLjxicj48YnI+Jmd0OyAr IGZyZWUoc3RydGFiKTs8YnI+Jmd0OyArIGZyZWUoc2VjdGlvbl9oZWFkZXJzKTs8YnI+Jmd0OyAr IGZjbG9zZShlbGZfZmlsZSk7PGJyPiZndDsgKzxicj4mZ3Q7ICsgcmV0dXJuIHN0YXR1czs8YnI+ Jmd0OyArfTxicj4mZ3Q7ICs8YnI+Jmd0OyAraW50IGR1bXBfZHluX3N5bXRhYihzdHJ1Y3QgZGxf cGhkcl9pbmZvICppbmZvLCBjb25zdCB1aW50OF90IGhlYWRlciw8YnI+Jmd0OyArIHN0cnVjdCBs al93YnVmICpidWYpIHs8YnI+Jmd0OyArIGZvciAoc2l6ZV90IGhlYWRlcl9pbmRleCA9IDA7IGhl YWRlcl9pbmRleCAmbHQ7IGluZm8tJmd0O2RscGlfcGhudW07ICsraGVhZGVyX2luZGV4KSB7PGJy Pjxicj5OaXQ6IGxpbmV3aWR0aCBzaG91bGQgYmUgMTIwIHN5bWJvbHMgbWF4Ljxicj48YnI+Jmd0 OyArIGlmIChpbmZvLSZndDtkbHBpX3BoZHJbaGVhZGVyX2luZGV4XS5wX3R5cGUgPT0gUFRfRFlO QU1JQykgezxicj4mZ3Q7ICsgRWxmVyhEeW4qKSBkeW4gPSBOVUxMOzxicj4mZ3Q7ICsgRWxmVyhT eW0qKSBzeW0gPSBOVUxMOzxicj4mZ3Q7ICsgRWxmVyhXb3JkKikgaGFzaHRhYiA9IE5VTEw7PGJy PiZndDsgKyBFbGZXKEFkZHIpIGdoYXNodGFiID0gMDs8YnI+Jmd0OyArIEVsZlcoV29yZCkgc3lt X2NudCA9IDA7PGJyPiZndDsgKzxicj4mZ3Q7ICsgY2hhciAqc3RydGFiID0gMDs8YnI+Jmd0OyAr PGJyPiZndDsgKyBkeW4gPSAoRWxmVyhEeW4pKikoaW5mby0mZ3Q7ZGxwaV9hZGRyICsgaW5mby0m Z3Q7ZGxwaV9waGRyW2hlYWRlcl9pbmRleF0ucF92YWRkcik7PGJyPjxicj5EaXR0by48YnI+PGJy PiZndDsgKzxicj4mZ3Q7ICsgZm9yKDsgZHluLSZndDtkX3RhZyAhPSBEVF9OVUxMOyBkeW4rKykg ezxicj4mZ3Q7ICsgc3dpdGNoKGR5bi0mZ3Q7ZF90YWcpIHs8YnI+Jmd0OyArIGNhc2UgRFRfSEFT SDo8YnI+PGJyPk5pdDogc3dpY2ggY2FzZSBzaG91bGQgaGF2ZSBzYW1lIGluZGVudC48YnI+PGJy PiZndDsgKyBoYXNodGFiID0gKEVsZlcoV29yZCopKWR5bi0mZ3Q7ZF91bi5kX3B0cjs8YnI+Jmd0 OyArIGJyZWFrOzxicj4mZ3Q7ICsgY2FzZSBEVF9HTlVfSEFTSDo8YnI+Jmd0OyArIGdoYXNodGFi ID0gZHluLSZndDtkX3VuLmRfcHRyOzxicj4mZ3Q7ICsgYnJlYWs7PGJyPiZndDsgKyBjYXNlIERU X1NUUlRBQjo8YnI+Jmd0OyArIHN0cnRhYiA9IChjaGFyKilkeW4tJmd0O2RfdW4uZF9wdHI7PGJy PiZndDsgKyBicmVhazs8YnI+Jmd0OyArIGNhc2UgRFRfU1lNVEFCOjxicj4mZ3Q7ICsgc3ltID0g KEVsZlcoU3ltKikpZHluLSZndDtkX3VuLmRfcHRyOzxicj4mZ3Q7ICsgYnJlYWs7PGJyPiZndDsg KyBkZWZhdWx0Ojxicj4mZ3Q7ICsgYnJlYWs7PGJyPiZndDsgKyB9PGJyPiZndDsgKyB9PGJyPiZn dDsgKzxicj4mZ3Q7ICsgaWYgKChoYXNodGFiID09IE5VTEwgJmFtcDsmYW1wOyBnaGFzaHRhYiA9 PSAwKTxicj4mZ3Q7ICsgfHwgc3RydGFiID09IE5VTEwgfHwgc3ltID09IE5VTEwpPGJyPjxicj5O aXQ6IExvb2tzIGxpa2UgdGhlc2UgbGluZXMgbWF5IGJlIGpvaW5lZC48YnI+PGJyPiZndDsgKyAv KiBOb3QgZW5vdWdoIGRhdGEgdG8gcmVzb2x2ZSBzeW1ib2xzLiAqLzxicj4mZ3Q7ICsgcmV0dXJu IDE7PGJyPiZndDsgKzxicj4mZ3Q7ICsgLyo8YnI+Jmd0OyArICoqIEEgaGFzaCB0YWJsZSBjb25z aXN0cyBvZiBFbGYzMl9Xb3JkIG9yIEVsZjY0X1dvcmQgb2JqZWN0cyB0aGF0IHByb3ZpZGUgZm9y PGJyPiZndDsgKyAqKiBzeW1ib2wgdGFibGUgYWNjZXNzLiBIYXNoIHRhYmxlIGhhcyB0aGUgZm9s bG93aW5nIG9yZ2FuaXphdGlvbjo8YnI+Jmd0OyArICoqICstLS0tLS0tLS0tLS0tLS0tLS0tKzxi cj48YnI+Tml0OiBzb21ldGhpbmcgc3RyYW5nZSB3aXRoIGZvcm1hdGluZyBvZiB0YWJsZTopLjxi cj48YnI+Jmd0OyArICoqIHwgbmJ1Y2tldCB8PGJyPiZndDsgKyAqKiArLS0tLS0tLS0tLS0tLS0t LS0tLSs8YnI+Jmd0OyArICoqIHwgbmNoYWluIHw8YnI+Jmd0OyArICoqICstLS0tLS0tLS0tLS0t LS0tLS0tKzxicj4mZ3Q7ICsgKiogfCBidWNrZXRbMF0gfDxicj4mZ3Q7ICsgKiogfCAuLi4gfDxi cj4mZ3Q7ICsgKiogfCBidWNrZXRbbmJ1Y2tldC0xXSB8PGJyPiZndDsgKyAqKiArLS0tLS0tLS0t LS0tLS0tLS0tLSs8YnI+Jmd0OyArICoqIHwgY2hhaW5bMF0gfDxicj4mZ3Q7ICsgKiogfCAuLi4g fDxicj4mZ3Q7ICsgKiogfCBjaGFpbltuY2hhaW4tMV0gfDxicj4mZ3Q7ICsgKiogKy0tLS0tLS0t LS0tLS0tLS0tLS0rPGJyPiZndDsgKyAqKiBDaGFpbiB0YWJsZSBlbnRyaWVzIHBhcmFsbGVsIHRo ZSBzeW1ib2wgdGFibGUuIFRoZSBudW1iZXIgb2Ygc3ltYm9sPGJyPiZndDsgKyAqKiB0YWJsZSBl bnRyaWVzIHNob3VsZCBlcXVhbCBuY2hhaW4sIHNvIHN5bWJvbCB0YWJsZSBpbmRleGVzIGFsc28g c2VsZWN0PGJyPiZndDsgKyAqKiBjaGFpbiB0YWJsZSBlbnRyaWVzLiBTaW5jZSB0aGUgY2hhaW4g YXJyYXkgdmFsdWVzIGFyZSBpbmRleGVzIGZvciBub3Qgb25seTxicj4mZ3Q7ICsgKiogdGhlIGNo YWluIGFycmF5IGl0c2VsZiwgYnV0IGFsc28gZm9yIHRoZSBzeW1ib2wgdGFibGUsIHRoZSBjaGFp biBhcnJheSBtdXN0PGJyPiZndDsgKyAqKiBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBzeW1ib2wg dGFibGUuIFRoaXMgbWFrZXMgbmNoYWluIGVxdWFsIHRvIHRoZSBsZW5ndGg8YnI+Jmd0OyArICoq IG9mIHRoZSBzeW1ib2wgdGFibGUuPGJyPjxicj5OaXQ6IFBsZWFzZSBmb3JtYXQgdGhpcyBjb21t ZW50IHRvIGZpdCBsaW5ld2lkdGggMTIwIHN5bWJvbHMuPGJyPjxicj4mZ3Q7ICsgKio8YnI+Jmd0 OyArICoqIEZvciBtb3JlLCBzZWUgPGEgaHJlZj0iaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vY2Qv RTIzODI0XzAxL2h0bWwvODE5LTA2OTAvY2hhcHRlcjYtNDgwMzEuaHRtbCIgdGFyZ2V0PSJfYmxh bmsiPmh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2NkL0UyMzgyNF8wMS9odG1sLzgxOS0wNjkwL2No YXB0ZXI2LTQ4MDMxLmh0bWw8L2E+PGJyPiZndDsgKyAqLzxicj4mZ3Q7ICsgc3ltX2NudCA9IGdo YXNodGFiID09IDAgPyBoYXNodGFiWzFdIDogZ2hhc2h0YWJfc2l6ZShnaGFzaHRhYik7PGJyPiZn dDsgKyB3cml0ZV9jX3N5bXRhYihzeW0sIHN0cnRhYiwgaW5mby0mZ3Q7ZGxwaV9hZGRyLCBzeW1f Y250LCBoZWFkZXIsIGJ1Zik7PGJyPiZndDsgKyByZXR1cm4gMDs8YnI+Jmd0OyArIH08YnI+Jmd0 OyArIH08YnI+Jmd0OyArPGJyPiZndDsgKyByZXR1cm4gMTs8YnI+Jmd0OyArfTxicj4mZ3Q7ICs8 YnI+Jmd0OyAraW50IHJlc29sdmVfc3ltYm9sbmFtZXMoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5m bywgc2l6ZV90IGluZm9fc2l6ZSwgdm9pZCAqZGF0YSk8YnI+Jmd0OyArezxicj4mZ3Q7ICsgc3Ry dWN0IHN5bWJvbF9yZXNvbHZlcl9jb25mICpjb25mID0gZGF0YTs8YnI+Jmd0OyArIGNvbnN0IHVp bnQ4X3QgaGVhZGVyID0gY29uZi0mZ3Q7aGVhZGVyOzxicj4mZ3Q7ICsgc3RydWN0IGxqX3didWYg KmJ1ZiA9IGNvbmYtJmd0O2J1Zjs8YnI+Jmd0OyArPGJyPiZndDsgKyBVTlVTRUQoaW5mb19zaXpl KTs8YnI+Jmd0OyArPGJyPiZndDsgKyAvKiBTa2lwIHZEU08gbGlicmFyeS4gKi88YnI+PGJyPk5p dDogc29tZXRoaW5nIHN0cmFuZ2Ugd2l0aCBpbmRlbnRhdGlvbiBoZXJlLjxicj48YnI+Jmd0OyAr IGlmIChpbmZvLSZndDtkbHBpX2FkZHIgPT0gZ2V0YXV4dmFsKEFUX1NZU0lORk9fRUhEUikpPGJy PiZndDsgKyByZXR1cm4gMDs8YnI+Jmd0OyArPGJyPiZndDsgKyAvKjxicj4mZ3Q7ICsgKiogTWFp biB3YXk6IHRyeSB0byBvcGVuIEVMRiBhbmQgcmVhZCBTSFRfU1lNVEFCLCBTSFRfU1RSVEFCIGFu ZCBTSFRfSEFTSDxicj4mZ3Q7ICsgKiogc2VjdGlvbnMgZnJvbSBpdC48YnI+Jmd0OyArICovPGJy PiZndDsgKyBpZiAoZHVtcF9zaHRfc3ltdGFiKGluZm8tJmd0O2RscGlfbmFtZSwgYnVmLCBoZWFk ZXIsIGluZm8tJmd0O2RscGlfYWRkcikgPT0gMCkgezxicj4mZ3Q7ICsgcmV0dXJuIDA7PGJyPiZn dDsgKyB9PGJyPiZndDsgKzxicj4mZ3Q7ICsgLyogRmlyc3QgZmFsbGJhY2s6IGR1bXAgZnVuY3Rp b25zIG9ubHkgZnJvbSBQVF9EWU5BTUlDIHNlZ21lbnQuICovPGJyPiZndDsgKyBpZihkdW1wX2R5 bl9zeW10YWIoaW5mbywgaGVhZGVyLCBidWYpID09IDApIHs8YnI+Jmd0OyArIHJldHVybiAwOzxi cj4mZ3Q7ICsgfTxicj48YnI+Tml0OiBJIHN1Z2dlc3QgdG8gcmVmYWN0b3IgdGhpcyBzZWN0aW9u IGxpa2UgdGhlIGZvbGxvd2luZzo8YnI+fCBpZiAoKSB7PGJyPnwgLyogLi4uICovPGJyPnwgfSBl bHNlaWYgKCkgezxicj58IC8qIC4uLiAqLzxicj58IH0gZWxzZSB7PGJyPnwgLyogLi4uICovPGJy PnwgfTxicj58IHJldHVybiAwOzxicj48YnI+RmVlbCBmcmVlIHRvIGlnbm9yZS48YnI+PGJyPiZn dDsgKzxicj4mZ3Q7ICsgLyo8YnI+Jmd0OyArICoqIExhc3QgcmVzb3J0OiBkdW1wIEVMRiBzaXpl IGFuZCBhZGRyZXNzIHRvIHNob3cgLnNvIG5hbWUgZm9yIGl0cyBmdW5jdGlvbnM8YnI+Jmd0OyAr ICoqIGluIG1lbXByb2Ygb3V0cHV0Ljxicj4mZ3Q7ICsgKi88YnI+Jmd0OyArIGxqX3didWZfYWRk Ynl0ZShidWYsIGhlYWRlcik7PGJyPiZndDsgKyBsal93YnVmX2FkZHU2NChidWYsIGluZm8tJmd0 O2RscGlfYWRkcik7PGJyPiZndDsgKyBsal93YnVmX2FkZHN0cmluZyhidWYsIGluZm8tJmd0O2Rs cGlfbmFtZSk7PGJyPiZndDsgKzxicj4mZ3Q7ICsgcmV0dXJuIDA7PGJyPiZndDsgK308YnI+Jmd0 OyArPGJyPiZndDsgKyNlbmRpZjxicj48YnI+Tml0OiBQbGVhc2UsIGFkZCBpbmxpbmUgY29tbWVu dCB0aGF0IHRoaXMgaXMgYExVQUpJVF9PUyAhPSBMVUFKSVRfT1NfT1NYYDxicj48YnI+Jmd0OyAr PGJyPiZndDsgc3RhdGljIHZvaWQgZHVtcF9zeW10YWIoc3RydWN0IGxqX3didWYgKm91dCwgY29u c3Qgc3RydWN0IGdsb2JhbF9TdGF0ZSAqZyk8YnI+Jmd0OyB7PGJyPiZndDsgY29uc3QgR0NSZWYg Kml0ZXIgPSAmYW1wO2ctJmd0O2djLnJvb3Q7PGJyPiZndDsgY29uc3QgR0NvYmogKm87PGJyPiZn dDsgY29uc3Qgc2l6ZV90IGxqc19oZWFkZXJfbGVuID0gc2l6ZW9mKGxqc19oZWFkZXIpIC8gc2l6 ZW9mKGxqc19oZWFkZXJbMF0pOzxicj4mZ3Q7PGJyPiZndDsgKyNpZiBMVUFKSVRfT1MgIT0gTFVB SklUX09TX09TWDxicj4mZ3Q7ICsgc3RydWN0IHN5bWJvbF9yZXNvbHZlcl9jb25mIGNvbmYgPSB7 PGJyPiZndDsgKyBvdXQsPGJyPiZndDsgKyBTWU1UQUJfQ0ZVTkMsPGJyPiZndDsgKyB9Ozxicj4m Z3Q7ICsjZW5kaWY8YnI+Jmd0OyArPGJyPiZndDsgLyogV3JpdGUgcHJvbG9ndWUuICovPGJyPiZn dDsgbGpfd2J1Zl9hZGRuKG91dCwgbGpzX2hlYWRlciwgbGpzX2hlYWRlcl9sZW4pOzxicj4mZ3Q7 PGJyPiZndDsgQEAgLTk1LDYgKzQyMSwxMCBAQCBzdGF0aWMgdm9pZCBkdW1wX3N5bXRhYihzdHJ1 Y3QgbGpfd2J1ZiAqb3V0LCBjb25zdCBzdHJ1Y3QgZ2xvYmFsX1N0YXRlICpnKTxicj4mZ3Q7IGl0 ZXIgPSAmYW1wO28tJmd0O2djaC5uZXh0Z2M7PGJyPiZndDsgfTxicj4mZ3Q7PGJyPiZndDsgKyNp ZiBMVUFKSVRfT1MgIT0gTFVBSklUX09TX09TWDxicj4mZ3Q7ICsgLyogV3JpdGUgc3ltYm9scy4g Ki88YnI+PGJyPlR5cG8/IERvIHlvdSBtZWFuIEMgc3ltYm9scz88YnI+PGJyPiZndDsgKyBkbF9p dGVyYXRlX3BoZHIocmVzb2x2ZV9zeW1ib2xuYW1lcywgJmFtcDtjb25mKTs8YnI+Jmd0OyArI2Vu ZGlmPGJyPiZndDsgbGpfd2J1Zl9hZGRieXRlKG91dCwgU1lNVEFCX0ZJTkFMKTs8YnI+Jmd0OyB9 PGJyPiZndDs8YnI+Jmd0OyBkaWZmIC0tZ2l0IGEvc3JjL2xqX21lbXByb2YuaCBiL3NyYy9sal9t ZW1wcm9mLmg8YnI+Jmd0OyBpbmRleCAzOTVmYjQyOS4uMDMyN2EyMDUgMTAwNjQ0PGJyPiZndDsg LS0tIGEvc3JjL2xqX21lbXByb2YuaDxicj4mZ3Q7ICsrKyBiL3NyYy9sal9tZW1wcm9mLmg8YnI+ PGJyPiZsdDtzbmlwcGVkJmd0Ozxicj48YnI+Jmd0OyBkaWZmIC0tZ2l0IGEvdGVzdC90YXJhbnRv b2wtdGVzdHMvdG9vbHMtdXRpbHMtYXZsLnRlc3QubHVhIGIvdGVzdC90YXJhbnRvb2wtdGVzdHMv dG9vbHMtdXRpbHMtYXZsLnRlc3QubHVhPGJyPiZndDsgbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnI+ Jmd0OyBpbmRleCAwMDAwMDAwMC4uMTdjYzdhODU8YnI+Jmd0OyAtLS0gL2Rldi9udWxsPGJyPiZn dDsgKysrIGIvdGVzdC90YXJhbnRvb2wtdGVzdHMvdG9vbHMtdXRpbHMtYXZsLnRlc3QubHVhPGJy PiZndDsgQEAgLTAsMCArMSw1OSBAQDxicj4mZ3Q7ICtsb2NhbCBhdmwgPSByZXF1aXJlICJ1dGls cy5hdmwiPGJyPjxicj5OaXQ6IFBsZWFzZSwgdXNlIHJlcXVpcmUoIm1vZHVsZW5hbWUiKSBmb3Ig Y29uc2lzdGVuY3kuPGJyPkFsc28sIGZvciBvdXIgdGVzdHMgd2UgYXJlIHVzaW5nICcnIGluc3Rl YWQgIiIgZm9yIHN0cmluZ3MuPGJyPjxicj4mZ3Q7ICtsb2NhbCB0YXAgPSByZXF1aXJlKCJ0YXAi KTxicj4mZ3Q7ICs8YnI+Jmd0OyArbG9jYWwgdGVzdCA9IHRhcC50ZXN0KCJ0b29scy11dGlscy1h dmwiKTxicj4mZ3Q7ICt0ZXN0OnBsYW4oNyk8YnI+Jmd0OyArPGJyPiZndDsgK2xvY2FsIGZ1bmN0 aW9uIHRyYXZlcnNlKG5vZGUsIHJlc3VsdCk8YnI+Jmd0OyArIGlmIG5vZGUgfj0gbmlsIHRoZW48 YnI+Jmd0OyArIHRhYmxlLmluc2VydChyZXN1bHQsIG5vZGUua2V5KTxicj4mZ3Q7ICsgdHJhdmVy c2Uobm9kZS5sZWZ0LCByZXN1bHQpPGJyPiZndDsgKyB0cmF2ZXJzZShub2RlLnJpZ2h0LCByZXN1 bHQpPGJyPiZndDsgKyBlbmQ8YnI+Jmd0OyArIHJldHVybiByZXN1bHQ8YnI+Jmd0OyArZW5kPGJy PiZndDsgKzxicj4mZ3Q7ICtsb2NhbCBmdW5jdGlvbiBiYXRjaF9pbnNlcnQocm9vdCwgdmFsdWVz KTxicj4mZ3Q7ICsgZm9yIGkgPSAxLCAjdmFsdWVzIGRvPGJyPiZndDsgKyByb290ID0gYXZsLmlu c2VydChyb290LCB2YWx1ZXNbaV0pPGJyPiZndDsgKyBlbmQ8YnI+Jmd0OyArPGJyPiZndDsgKyBy ZXR1cm4gcm9vdDxicj4mZ3Q7ICtlbmQ8YnI+Jmd0OyArPGJyPiZndDsgK2xvY2FsIGZ1bmN0aW9u IGNvbXBhcmUoYXJyMSwgYXJyMik8YnI+Jmd0OyArIGZvciBpLCB2IGluIHBhaXJzKGFycjEpIGRv PGJyPjxicj5OaXQ6IHRoaXMgdGFiIGxvb2tzIGNvbmZ1c2luZy48YnI+PGJyPiZndDsgKyBpZiB2 IH49IGFycjJbaV0gdGhlbjxicj4mZ3Q7ICsgcmV0dXJuIGZhbHNlPGJyPiZndDsgKyBlbmQ8YnI+ Jmd0OyArIGVuZDxicj4mZ3Q7ICsgcmV0dXJuIHRydWU8YnI+Jmd0OyArZW5kPGJyPiZndDsgKzxi cj4mZ3Q7ICstLSAxTCByb3RhdGlvbiB0ZXN0Ljxicj4mZ3Q7ICtsb2NhbCByb290ID0gYmF0Y2hf aW5zZXJ0KG5pbCwgezEsIDIsIDN9KTxicj4mZ3Q7ICt0ZXN0Om9rKGNvbXBhcmUodHJhdmVyc2Uo cm9vdCwge30pLCB7MiwgMSwgM30pKTxicj4mZ3Q7ICs8YnI+Jmd0OyArLS0gMVIgcm90YXRpb24g dGVzdC48YnI+Jmd0OyArcm9vdCA9IGJhdGNoX2luc2VydChuaWwsIHszLCAyLCAxfSk8YnI+Jmd0 OyArdGVzdDpvayhjb21wYXJlKHRyYXZlcnNlKHJvb3QsIHt9KSwgezIsIDEsIDN9KSk8YnI+Jmd0 OyArPGJyPiZndDsgKy0tIDJMIHJvdGF0aW9uIHRlc3QuPGJyPiZndDsgK3Jvb3QgPSBiYXRjaF9p bnNlcnQobmlsLCB7MSwgMywgMn0pPGJyPiZndDsgK3Rlc3Q6b2soY29tcGFyZSh0cmF2ZXJzZShy b290LCB7fSksIHsyLCAxLCAzfSkpPGJyPiZndDsgKzxicj4mZ3Q7ICstLSAyUiByb3RhdGlvbiB0 ZXN0Ljxicj4mZ3Q7ICtyb290ID0gYmF0Y2hfaW5zZXJ0KG5pbCwgezMsIDEsIDJ9KTxicj4mZ3Q7 ICt0ZXN0Om9rKGNvbXBhcmUodHJhdmVyc2Uocm9vdCwge30pLCB7MiwgMSwgM30pKTxicj4mZ3Q7 ICs8YnI+Jmd0OyArLS0gRXhhY3QgdXBwZXIgYm91bmQuPGJyPiZndDsgK3Rlc3Q6b2soYXZsLnVw cGVyX2JvdW5kKHJvb3QsIDEpID09IDEpPGJyPiZndDsgKzxicj4mZ3Q7ICstLSBObyB1cHBlciBi b3VuZC48YnI+Jmd0OyArdGVzdDpvayhhdmwudXBwZXJfYm91bmQocm9vdCwgLTEwKSA9PSBuaWwp PGJyPiZndDsgKzxicj4mZ3Q7ICstLSBOb3QgZXhhY3QgdXBwZXIgYm91bmQuPGJyPiZndDsgK3Rl c3Q6b2soYXZsLnVwcGVyX2JvdW5kKHJvb3QsIDIuNzUpID09IDIpPGJyPiZndDsgKzxicj4mZ3Q7 ICs8YnI+Jmd0OyArPGJyPjxicj5OaXQ6IFBsZWFzZSwgcmVtb3ZlIHVubmVjZXNzYXJ5IGVtcHR5 IGxpbmVzLjxicj5OaXQ6IFBsZWFzZSwgYW5kIG9zLmV4aXQoKSBsaWtlIGl0IGlzIGRvbmUgaW4g b3RoZXIgdGVzdHMuPGJyPjxicj4mZ3Q7IGRpZmYgLS1naXQgYS90b29scy9DTWFrZUxpc3RzLnR4 dCBiL3Rvb2xzL0NNYWtlTGlzdHMudHh0PGJyPiZndDsgaW5kZXggNjE4MzBlNDQuLmM2ODAzZDAw IDEwMDY0NDxicj4mZ3Q7IC0tLSBhL3Rvb2xzL0NNYWtlTGlzdHMudHh0PGJyPiZndDsgKysrIGIv dG9vbHMvQ01ha2VMaXN0cy50eHQ8YnI+Jmd0OyBAQCAtMzAsNiArMzAsNyBAQCBlbHNlKCk8YnI+ Jmd0OyBtZW1wcm9mL2h1bWFuaXplLmx1YTxicj4mZ3Q7IG1lbXByb2YvcGFyc2UubHVhPGJyPiZn dDsgbWVtcHJvZi5sdWE8YnI+Jmd0OyArIHV0aWxzL2F2bC5sdWE8YnI+Jmd0OyB1dGlscy9idWZy ZWFkLmx1YTxicj4mZ3Q7IHV0aWxzL3N5bXRhYi5sdWE8YnI+Jmd0OyApPGJyPiZndDsgQEAgLTQ2 LDYgKzQ3LDcgQEAgZWxzZSgpPGJyPiZndDsgQ09NUE9ORU5UIHRvb2xzLXBhcnNlLW1lbXByb2Y8 YnI+Jmd0OyApPGJyPiZndDsgaW5zdGFsbChGSUxFUzxicj4mZ3Q7ICsgJHtDTUFLRV9DVVJSRU5U X1NPVVJDRV9ESVJ9L3V0aWxzL2F2bC5sdWE8YnI+Jmd0OyAke0NNQUtFX0NVUlJFTlRfU09VUkNF X0RJUn0vdXRpbHMvYnVmcmVhZC5sdWE8YnI+Jmd0OyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ Un0vdXRpbHMvc3ltdGFiLmx1YTxicj4mZ3Q7IERFU1RJTkFUSU9OICR7TFVBSklUX0RBVEFST09U RElSfS91dGlsczxicj4mZ3Q7IGRpZmYgLS1naXQgYS90b29scy91dGlscy9hdmwubHVhIGIvdG9v bHMvdXRpbHMvYXZsLmx1YTxicj4mZ3Q7IG5ldyBmaWxlIG1vZGUgMTAwNjQ0PGJyPiZndDsgaW5k ZXggMDAwMDAwMDAuLjk4YzE1YmQ3PGJyPiZndDsgLS0tIC9kZXYvbnVsbDxicj4mZ3Q7ICsrKyBi L3Rvb2xzL3V0aWxzL2F2bC5sdWE8YnI+Jmd0OyBAQCAtMCwwICsxLDExOCBAQDxicj4mZ3Q7ICts b2NhbCBtYXRoID0gcmVxdWlyZSdtYXRoJzxicj48YnI+Tml0OiB0aGlzIHJlcXVpcmUgaXMgZXhj ZXNzLjxicj48YnI+Jmd0OyArPGJyPiZndDsgK2xvY2FsIE0gPSB7fTxicj4mZ3Q7ICtsb2NhbCBt YXggPSBtYXRoLm1heDxicj48YnI+Jmx0O3NuaXBwZWQmZ3Q7PGJyPjxicj4mZ3Q7ICtmdW5jdGlv biBNLnVwcGVyX2JvdW5kKG5vZGUsIGtleSk8YnI+Jmd0OyArIGlmIG5vZGUgPT0gbmlsIHRoZW48 YnI+Jmd0OyArIHJldHVybiBuaWwsIG5pbDxicj4mZ3Q7ICsgZW5kPGJyPiZndDsgKyAtLSBFeHBs aWNpdCBtYXRjaC48YnI+Jmd0OyArIGlmIGtleSA9PSBub2RlLmtleSB0aGVuPGJyPiZndDsgKyBy ZXR1cm4gbm9kZS5rZXksIG5vZGUudmFsdWU8YnI+Jmd0OyArIGVsc2VpZiBrZXkgJmx0OyBub2Rl LmtleSB0aGVuPGJyPiZndDsgKyByZXR1cm4gTS51cHBlcl9ib3VuZChub2RlLmxlZnQsIGtleSk8 YnI+Jmd0OyArIGVsc2VpZiBrZXkgJmd0OyBub2RlLmtleSB0aGVuPGJyPiZndDsgKyBsb2NhbCBy aWdodF9rZXksIHZhbHVlID0gTS51cHBlcl9ib3VuZChub2RlLnJpZ2h0LCBrZXkpPGJyPiZndDsg KyByaWdodF9rZXkgPSByaWdodF9rZXkgb3Igbm9kZS5rZXk8YnI+Jmd0OyArIHZhbHVlID0gdmFs dWUgb3Igbm9kZS52YWx1ZTxicj4mZ3Q7ICs8YnI+Jmd0OyArIHJldHVybiByaWdodF9rZXksIHZh bHVlPGJyPiZndDsgKyBlbmQ8YnI+Jmd0OyArZW5kPGJyPiZndDsgKzxicj48YnI+Tml0OiBUaGlz IGVtcHR5IGxpbmUgaXMgZXhjZXNzLjxicj48YnI+Jmd0OyArPGJyPiZndDsgK3JldHVybiBNPGJy PiZndDsgKzxicj48YnI+Tml0OiBUaGlzIGVtcHR5IGxpbmUgaXMgZXhjZXNzLjxicj48YnI+Jmd0 OyBkaWZmIC0tZ2l0IGEvdG9vbHMvdXRpbHMvc3ltdGFiLmx1YSBiL3Rvb2xzL3V0aWxzL3N5bXRh Yi5sdWE8YnI+Jmd0OyBpbmRleCBjN2ZjZjc3Yy4uYWE2NjI2OWMgMTAwNjQ0PGJyPiZndDsgLS0t IGEvdG9vbHMvdXRpbHMvc3ltdGFiLmx1YTxicj4mZ3Q7ICsrKyBiL3Rvb2xzL3V0aWxzL3N5bXRh Yi5sdWE8YnI+Jmd0OyBAQCAtNiw2ICs2LDggQEA8YnI+Jmd0Ozxicj4mZ3Q7IGxvY2FsIGJpdCA9 IHJlcXVpcmUgImJpdCI8YnI+Jmd0Ozxicj4mZ3Q7ICtsb2NhbCBhdmwgPSByZXF1aXJlICJ1dGls cy5hdmwiPGJyPiZndDsgKzxicj4mZ3Q7IGxvY2FsIGJhbmQgPSBiaXQuYmFuZDxicj4mZ3Q7IGxv Y2FsIHN0cmluZ19mb3JtYXQgPSBzdHJpbmcuZm9ybWF0PGJyPiZndDs8YnI+Jmd0OyBAQCAtMTUs NyArMTcsOCBAQCBsb2NhbCBMSlNfRVBJTE9HVUVfSEVBREVSID0gMHg4MDxicj4mZ3Q7IGxvY2Fs IExKU19TWU1UWVBFX01BU0sgPSAweDAzPGJyPiZndDs8YnI+Jmd0OyBsb2NhbCBTWU1UQUJfTEZV TkMgPSAwPGJyPiZndDsgLWxvY2FsIFNZTVRBQl9UUkFDRSA9IDE8YnI+Jmd0OyArbG9jYWwgU1lN VEFCX0NGVU5DID0gMTxicj4mZ3Q7ICtsb2NhbCBTWU1UQUJfVFJBQ0UgPSAyPGJyPiZndDs8YnI+ Jmd0OyBsb2NhbCBNID0ge308YnI+Jmd0Ozxicj4mZ3Q7IEBAIC01MCwxNSArNTMsMjcgQEAgbG9j YWwgZnVuY3Rpb24gcGFyc2Vfc3ltX3RyYWNlKHJlYWRlciwgc3ltdGFiKTxicj4mZ3Q7IH08YnI+ Jmd0OyBlbmQ8YnI+Jmd0Ozxicj4mZ3Q7ICstLSBQYXJzZSBhIHNpbmdsZSBlbnRyeSBpbiBhIHN5 bXRhYjogLnNvIGxpYnJhcnk8YnI+Jmd0OyArbG9jYWwgZnVuY3Rpb24gcGFyc2Vfc3ltX2NmdW5j KHJlYWRlciwgc3ltdGFiKTxicj4mZ3Q7ICsgbG9jYWwgYWRkciA9IHJlYWRlcjpyZWFkX3VsZWIx MjgoKTxicj4mZ3Q7ICsgbG9jYWwgbmFtZSA9IHJlYWRlcjpyZWFkX3N0cmluZygpPGJyPiZndDsg Kzxicj4mZ3Q7ICsgc3ltdGFiLmNmdW5jID0gYXZsLmluc2VydChzeW10YWIuY2Z1bmMsIGFkZHIs IHs8YnI+Jmd0OyArIG5hbWUgPSBuYW1lPGJyPiZndDsgKyB9KTxicj4mZ3Q7ICtlbmQ8YnI+PGJy PlNpZGUgbm90ZTogRG9lcyBpdCBzdWZmaWNpZW50IGZvciBhbGwgMyBjYXNlcyBtZW50aW9uZWQg YWJvdmUgYXMgZmFyIGFzPGJyPmZvcm1hdCBpcyB0aGUgc2FtZT88YnI+PGJyPiZndDsgKzxicj4m Z3Q7IGxvY2FsIHBhcnNlcnMgPSB7PGJyPiZndDsgW1NZTVRBQl9MRlVOQ10gPSBwYXJzZV9zeW1f bGZ1bmMsPGJyPiZndDsgW1NZTVRBQl9UUkFDRV0gPSBwYXJzZV9zeW1fdHJhY2UsPGJyPiZndDsg KyBbU1lNVEFCX0NGVU5DXSA9IHBhcnNlX3N5bV9jZnVuYzxicj4mZ3Q7IH08YnI+Jmd0Ozxicj4m Z3Q7IGZ1bmN0aW9uIE0ucGFyc2UocmVhZGVyKTxicj4mZ3Q7IGxvY2FsIHN5bXRhYiA9IHs8YnI+ Jmd0OyBsZnVuYyA9IHt9LDxicj4mZ3Q7IHRyYWNlID0ge30sPGJyPiZndDsgKyBjZnVuYyA9IG5p bCw8YnI+Jmd0OyB9PGJyPiZndDsgbG9jYWwgbWFnaWMgPSByZWFkZXI6cmVhZF9vY3RldHMoMyk8 YnI+Jmd0OyBsb2NhbCB2ZXJzaW9uID0gcmVhZGVyOnJlYWRfb2N0ZXRzKDEpPGJyPiZndDsgQEAg LTkzLDcgKzEwOCw2IEBAIGZ1bmN0aW9uIE0ucGFyc2UocmVhZGVyKTxicj4mZ3Q7IHBhcnNlcnNb c3ltX3R5cGVdKHJlYWRlciwgc3ltdGFiKTxicj4mZ3Q7IGVuZDxicj4mZ3Q7IGVuZDxicj4mZ3Q7 IC08YnI+PGJyPk5pdDogVGhpcyBjaGFuZ2UgaXMgdW5uZWNlc3NhcnkuPGJyPjxicj4mZ3Q7IHJl dHVybiBzeW10YWI8YnI+Jmd0OyBlbmQ8YnI+Jmd0Ozxicj4mZ3Q7IEBAIC0xMzUsNiArMTQ5LDEy IEBAIGZ1bmN0aW9uIE0uZGVtYW5nbGUoc3ltdGFiLCBsb2MpPGJyPiZndDsgcmV0dXJuIHN0cmlu Z19mb3JtYXQoIiVzOiVkIiwgc3ltdGFiLmxmdW5jW2FkZHJdLnNvdXJjZSwgbG9jLmxpbmUpPGJy PiZndDsgZW5kPGJyPiZndDs8YnI+Jmd0OyArIGxvY2FsIGtleSwgdmFsdWUgPSBhdmwudXBwZXJf Ym91bmQoc3ltdGFiLmNmdW5jLCBhZGRyKTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGlmIGtleSB0aGVu PGJyPiZndDsgKyByZXR1cm4gc3RyaW5nX2Zvcm1hdCgiJXM6JSN4IiwgdmFsdWUubmFtZSwga2V5 KTxicj4mZ3Q7ICsgZW5kPGJyPiZndDsgKzxicj4mZ3Q7IHJldHVybiBzdHJpbmdfZm9ybWF0KCJD RlVOQyAlI3giLCBhZGRyKTxicj4mZ3Q7IGVuZDxicj4mZ3Q7PGJyPiZndDsgLS08YnI+Jmd0OyAy LjM1LjE8YnI+Jmd0Ozxicj48YnI+LS08YnI+QmVzdCByZWdhcmRzLDxicj5TZXJnZXkgS2FwbHVu PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+Jm5ic3A7PC9kaXY+PC9k aXY+PC9ibG9ja3F1b3RlPjwvQk9EWT48L0hUTUw+Cg== ----ALT--dCe0Cd191f793d81aF54A9c5Db16E0771647695315--