Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAS7f-002OiN-32 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 12:35:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAS7c-0071KW-1S for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 12:35:04 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wAS7b-0071KM-0P for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 12:35:04 +0000 Received: from forward102d.mail.yandex.net ([2a02:6b8:c41:1300:1:45:d181:d102]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wAS7O-00000001DSs-2oSw for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 12:35:02 +0000 Received: from mail-nwsmtp-smtp-production-main-95.klg.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-95.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:2a21:0:640:9c41:0]) by forward102d.mail.yandex.net (Yandex) with ESMTPS id 6C38DC01DA; Wed, 08 Apr 2026 15:34:45 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-95.klg.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id gYEHKaIRv0U0-UQU0gvSt; Wed, 08 Apr 2026 15:34:44 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1775651684; bh=yDFbk/4xDb1gG6dEQ+9EhF2IAsgoJ0yIOaGN9MFjLT4=; h=In-Reply-To:References:To:Subject:Message-ID:Date:From; b=HuQfuPK050MNqzNrVnvu3IGJ9BqSHX5HY13kdgVRwsGj1NSLxA+LK2sl5cz4gUKVC X/NegqVbnfDA7S8yg6/ypuF0PRW7+JpoQ+dnX2CHFWZGqR7EmF5kvp1Tj9502U8ihr IWC6vLMFznRiQ1zK2ReyTf7EvXQuUG+O6lHznSlw= Authentication-Results: mail-nwsmtp-smtp-production-main-95.klg.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------q3GH2mb63ygMChYtU0Dca0vu" Message-ID: <3fc9f40b-2c4f-49c7-bf1c-570c5b9e6e9e@tantorlabs.com> Date: Wed, 8 Apr 2026 20:34:42 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Compress prune/freeze records with Delta Frame of Reference algorithm To: Tomas Vondra , Andres Freund , PostgreSQL Hackers , Andrey Borodin References: <5a2f3df2-a736-4ada-8aa3-aa6e20b2e067@vondra.me> Content-Language: en-US From: Evgeny Voropaev In-Reply-To: <5a2f3df2-a736-4ada-8aa3-aa6e20b2e067@vondra.me> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------q3GH2mb63ygMChYtU0Dca0vu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Tomas, Andreus, Andrey, hello! > A ~170kB patch really should present some numbers > quantifying the expected benefit. It doesn't need to be a real workload > from production, but something plausible enough. Even some basic > back-of-the-envelope calculations might be enough to show the promise. The patch results in reduction of WAL total size by: 81% during vacuuming a table having no index, and by 55% during vacuuming a table having an index. The numbers are the next: === VACUUM (table with no index) === -------------------- ----------------- ----------------- ----------- DFOR off, bytes DFOR on, bytes Reduction -------------------- ----------------- ----------------- ----------- WAL total size 6743149 1184446 82% Prune records size 6710185 1159723 5.8x -------------------- ----------------- ----------------- ----------- === VACUUM (table with index) === -------------------- ----------------- ----------------- ----------- DFOR off, bytes DFOR on, bytes Reduction -------------------- ----------------- ----------------- ----------- WAL total size 20394208 8907090 56% Prune records size 6812850 1225944 5.6x -------------------- ----------------- ----------------- ----------- The logic of the tests is based on the technique from [1] and is the next: -- SQL CREATE TABLE t_prune ( id int, val text ) WITH (fillfactor = 100, autovacuum_enabled = false); INSERT INTO t_prune SELECT g, 'x' FROM generate_series(1,3000000) g; CREATE INDEX ON t_prune(id); -- for the test using an indexed table DELETE FROM t_prune WHERE id % 500 <> 0; SELECT pg_current_wal_flush_lsn(); -- get start_lsn here VACUUM FREEZE t_prune; -- 3 times SELECT pg_current_wal_flush_lsn(); -- get end_lsn here # BASH # stop cluster pg_waldump -p $wal_dir -s $start_lsn -e $end_lsn 2>/dev/null; The test is implemented in 052_prune_dfor_compression.pl, therefore the presented results can be refetched by restarting this test script. > Also, I find it somewhat unlikely we'd import a GPLv3 library like > this, even if it's just a testing framework. Even ignoring the > question of having a different license for some of the code, it'd mean > maintenance burden (maybe libtap is stable/mature, no idea). I don't > see why this would be better than "write a SQL callable test module". I am ready to rework it once there is consensus on the core of the patch. Best regards, Evgeny. P.s. rebased onto a1643d40b30. [1] https://www.postgresql.org/message-id/flat/CAAKRu_ZMw6Npd_qm2KM%2BFwQ3cMOMx1Dh3VMhp8-V7SOLxdK9-g%40mail.gmail.com --------------q3GH2mb63ygMChYtU0Dca0vu Content-Type: text/x-patch; charset=UTF-8; name="v08-0001-Implement-vect-and-uniqsortvect-containers-and-b.patch" Content-Disposition: attachment; filename*0="v08-0001-Implement-vect-and-uniqsortvect-containers-and-b.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyYTI2OTczMTY1ZGMwYTg0ZDI3YTc4NDEyNDk1Mzg4YTVlYjAxNDM2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTc6MzA6MjIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYwOCAxLzNdIEltcGxlbWVudCB2ZWN0IGFuZCB1bmlxc29ydHZlY3QgY29udGFpbmVy cyBhbmQKIGJpdHBhY2sgYWxnb3JpdGhtcy4KClRoZSB2ZWN0IGNvbnRhaW5lciBzdG9yZXMg YXJyYXlzIG9mIGludGVnZXJzIGFuZCBwcm92aWRlcyBhIHNldCBvZgphbGdvcml0aG1zIGlt cGxlbWVudGluZyBlc3NlbnRpYWwgb3BlcmF0aW9ucyBvbiB0aGUgY29udGFpbmVkIGFycmF5 LApzdWNoIGFzIGluaXRpYWxpemF0aW9uLCBhcHBlbmRpbmcsIGluc2VydGluZywgYW5kIGNs ZWFyaW5nLgoKVGhlIHVuaXFzb3J0dmVjdCBjb250YWluZXIgaXMgYmFzZWQgb24gdGhlIHZl Y3QgdHlwZSBidXQgYXNzdW1lcyB0aGF0Cml0cyBlbGVtZW50cyBhcmUgc29ydGVkIGFuZCB1 bmlxdWUuIEluIGFkZGl0aW9uIHRvIHRoZSBhbGdvcml0aG1zCnByb3ZpZGVkIGJ5IHZlY3Qs IHVuaXFzb3J0dmVjdCBpbXBsZW1lbnRzIGJpbmFyeSBzZWFyY2ggYW5kIHRoZQpzcGVjaWFs aXplZCBpbnNlcnRpb24gcm91dGluZS4KClRoZSBjb250YWluZXJzIHN1cHBvcnQgYm90aCBl eHRlcm5hbCBtZW1vcnkgcHJvdmlkZWQgYnkgYSBjYWxsZXIgYW5kCmF1dG9tYXRpY2FsbHkg bWFuYWdlZCBtZW1vcnkgdXNpbmcgbWFsbG9jLCBQb3N0Z3JlcydzIHBhbGxvYywgb3Igc2lt aWxhcgphbGxvY2F0aW9uIGZ1bmN0aW9ucy4gQSBjb250YWluZXIncyBzdHJhdGVneSByZWdh cmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQKbXVzdCBiZSBzZXQgYXQgY29udGFpbmVyIGluaXRp YWxpemF0aW9uLCBhbmQgYWxsIHN1YnNlcXVlbnQgb3BlcmF0aW9ucwpob25vciB0aGlzIGNv bmZpZ3VyYXRpb24uIEZvciBleGFtcGxlLCBhIGNhbGxlciBjYW4gcGxhY2UgYSBidWZmZXIg b24KdGhlIHN0YWNrIHRvIGF2b2lkIGhlYXAgYWxsb2NhdGlvbiBhbmQgcGFzcyB0aGUgYnVm ZmVyIHRvIGEgdmVjdG9yCmluc3RhbmNlLCB3aGljaCByZXN1bHRzIGluIHRoZSB2ZWN0b3Ig cGVyZm9ybXMgbm8gZHluYW1pYyBhbGxvY2F0aW9uLgoKVGhpcyBjb21taXQgYWxzbyBpbnRy b2R1Y2VzIHRoZSBiaXRwYWNrIHVuaXQsIHdoaWNoIHByb3ZpZGVzIGFsZ29yaXRobXMKZm9y IGRlbnNlIGJpdC1sZXZlbCBwYWNraW5nIGFuZCB1bnBhY2tpbmcuIFRoZSBiaXRwYWNrIHVu aXQgZG9lcyBub3QKdXNlIGR5bmFtaWMgbWVtb3J5LgoKRWFjaCB1bml0ICh2ZWN0LCBiaXRw YWNrKSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNldCBvZiB0ZW1wbGF0ZXMgdGhhdAphbGxvdyBk ZXZlbG9wZXJzIHRvIGdlbmVyYXRlIHNwZWNpYWxpemVkIHNvbHV0aW9ucyBmb3IgYW55IGlu dGVnZXIgdHlwZQoodWludDgsIGludDgsIHVpbnQxNiwgaW50MTYsIGFuZCBzbyBvbikuIFRo ZSB1bml0cyBiaXRwYWNrX3UxNiBhbmQKdmVjdF91MTYgc3VwcG9ydGluZyB0aGUgdWludDE2 X3QgdHlwZSBhcmUgYWxzbyBwcm92aWRlZCBieSB0aGlzIGNvbW1pdC4KClVuaXQgdGVzdHMg Zm9yIHRoZSBwcm92aWRlZCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluY2x1ZGVkLiBVbml0IHRl c3RzIGFyZQppbXBsZW1lbnRlZCBhcyBiaW5hcnkgYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4g QyBsYW5ndWFnZQooRUxGIGV4ZWN1dGFibGVzKSB0aGF0IHN1cHBvcnQgdGhlIFRBUCBwcm90 b2NvbCBhbmQgYXJlIHJ1biB1c2luZyB0aGUKUHJvdmUgdXRpbGl0eS4KClRoZSBuZXcgTWFr ZWZpbGUgdGFyZ2V0LCBjaGVjay11bml0LCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFBvc3Rn cmVTUUwKYnVpbGQgc3lzdGVtIGFuZCBhbGxvd3MgcnVubmluZyB0aGUgdW5pdCB0ZXN0cyB1 c2luZyB0aGUgY29tbWFuZCAnbWFrZQpjaGVjay11bml0Jy4KCkF1dGhvcjogRXZnZW55IFZv cm9wYWV2IDxldmdlbnkudm9yb3BhZXZAdGFudG9ybGFicy5jb20+IDxldm9yb3BAZ21haWwu Y29tPgpSZXZpZXdlZCBieTogQW5kcmV5IEJvcm9kaW4gPHg0bW1tQHlhbmRleC10ZWFtLnJ1 PgotLS0KIEdOVW1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9NYWtlZmlsZS5nbG9iYWwuaW4gICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmFja2VuZC9saWIvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2Vu ZC9saWIvTWFrZWZpbGUuZGZvciAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9saWIv Yml0cGFja190ZW1wbC5jICAgICAgICB8IDE1NiArKysrKysrKysKIHNyYy9iYWNrZW5kL2xp Yi9iaXRwYWNrX3UxNi5jICAgICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL2xpYi9tZXNv bi5idWlsZCAgICAgICAgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL2xpYi92ZWN0X3RlbXBs LmMgICAgICAgICAgIHwgMzAxICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvbGli L3ZlY3RfdTE2LmMgICAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUvYy5oICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfc3Rh cGxlX3RlbXBsLmggfCAgNTcgKysrKwogc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGwu aCAgICAgICAgfCAgMTQgKwogc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGxfdW5kZWYu aCAgfCAgIDUgKwogc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2LmggICAgICAgICAgfCAg MTIgKwogc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2X2NvbmZpZy5oICAgfCAgIDYgKwog c3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGwuaCAgICAgICAgICAgfCAgMjcgKysKIHNyYy9p bmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0YXBsZS5oICAgIHwgMTQwICsrKysrKysrCiBzcmMv aW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRlZi5oICAgICB8ICAyNSArKwogc3JjL2luY2x1 ZGUvbGliL3ZlY3RfdTE2LmggICAgICAgICAgICAgfCAgMzQgKysKIHNyYy9pbmNsdWRlL2xp Yi92ZWN0X3UxNl9jb25maWcuaCAgICAgIHwgIDEwICsKIHNyYy90ZXN0L01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZSAg ICAgICAgICAgICAgIHwgICAzICsKIHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUgICAgICAgICAg ICAgICAgIHwgIDUzICsrKysKIHNyYy90ZXN0L2Rmb3IvbWVzb24uYnVpbGQgICAgICAgICAg ICAgIHwgIDYyICsrKysKIHNyYy90ZXN0L2Rmb3IvdGVzdC5oICAgICAgICAgICAgICAgICAg IHwgIDMxICsrCiBzcmMvdGVzdC9kZm9yL3Rlc3RfYml0cGFja191MTYuYyAgICAgICB8IDM1 NyArKysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L2Rmb3IvdGVzdF91bmlxc29ydHZl Y3RfdTE2LmMgIHwgMjYzICsrKysrKysrKysrKysrKwogc3JjL3Rlc3QvZGZvci90ZXN0X3Zl Y3RfdTE2LmMgICAgICAgICAgfCAxNjggKysrKysrKysrKwogc3JjL3Rlc3QvbGlidGFwLy5n aXRpZ25vcmUgICAgICAgICAgICAgfCAgMTMgKwogc3JjL3Rlc3QvbGlidGFwLy50cmF2aXMu eW1sICAgICAgICAgICAgfCAgMTMgKwogc3JjL3Rlc3QvbGlidGFwL0NPUFlJTkcgICAgICAg ICAgICAgICAgfCAxNjUgKysrKysrKysrKwogc3JjL3Rlc3QvbGlidGFwL0lOU1RBTEwgICAg ICAgICAgICAgICAgfCAgNDEgKysrCiBzcmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUgICAgICAg ICAgICAgICB8ICA3MyArKysrKwogc3JjL3Rlc3QvbGlidGFwL01ha2VmaWxlLndpbiAgICAg ICAgICAgfCAgMzcgKysrCiBzcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1kICAgICAgICAgICAg ICB8IDI2OCArKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9saWJ0YXAvdGFwLmMgICAgICAg ICAgICAgICAgICB8IDQyMSArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9s aWJ0YXAvdGFwLmggICAgICAgICAgICAgICAgICB8IDExNSArKysrKysrCiBzcmMvdGVzdC9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICB8ICAgMSArCiAzOCBmaWxlcyBjaGFuZ2Vk LCAyOTExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC9saWIvTWFrZWZpbGUuZGZvcgogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iYWNrZW5kL2xpYi9iaXRwYWNrX3RlbXBsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9saWIvYml0cGFja191MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNr ZW5kL2xpYi92ZWN0X3RlbXBsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9s aWIvdmVjdF91MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi9iaXRw YWNrX3N0YXBsZV90ZW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGli L2JpdHBhY2tfdGVtcGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi9i aXRwYWNrX3RlbXBsX3VuZGVmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9s aWIvYml0cGFja191MTYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi9i aXRwYWNrX3UxNl9jb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xp Yi92ZWN0X3RlbXBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIvdmVj dF90ZW1wbF9zdGFwbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi92 ZWN0X3RlbXBsX3VuZGVmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9saWIv dmVjdF91MTYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi92ZWN0X3Ux Nl9jb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rmb3IvLmdpdGlnbm9y ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvZGZvci90ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9k Zm9yL3Rlc3RfYml0cGFja191MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2Rm b3IvdGVzdF91bmlxc29ydHZlY3RfdTE2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9kZm9yL3Rlc3RfdmVjdF91MTYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2xp YnRhcC8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbGlidGFwLy50 cmF2aXMueW1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbGlidGFwL0NPUFlJTkcK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9saWJ0YXAvSU5TVEFMTAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZS53aW4KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv dGVzdC9saWJ0YXAvUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbGli dGFwL3RhcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbGlidGFwL3RhcC5oCgpk aWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuaW4gYi9HTlVtYWtlZmlsZS5pbgppbmRleCBjZjZl NzU5NDg2ZS4uM2Q5YTQyZDZhZDQgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmluCisrKyBi L0dOVW1ha2VmaWxlLmluCkBAIC02OSw2ICs2OSw3IEBAIGNoZWNrIGNoZWNrLXRlc3RzIGlu c3RhbGxjaGVjayBpbnN0YWxsY2hlY2stcGFyYWxsZWwgaW5zdGFsbGNoZWNrLXRlc3RzOiBz dWJtYWtlCiAJJChNQUtFKSAtQyBzcmMvdGVzdC9yZWdyZXNzICRACiAKICQoY2FsbCByZWN1 cnNlLGNoZWNrLXdvcmxkLHNyYy90ZXN0IHNyYy9wbCBzcmMvaW50ZXJmYWNlcyBjb250cmli IHNyYy9iaW4gc3JjL3Rvb2xzL3BnX2JzZF9pbmRlbnQsY2hlY2spCiskKGNhbGwgcmVjdXJz ZSxjaGVjay11bml0LHNyYy90ZXN0LGNoZWNrLXVuaXQpCiAkKGNhbGwgcmVjdXJzZSxjaGVj a3ByZXAsICBzcmMvdGVzdCBzcmMvcGwgc3JjL2ludGVyZmFjZXMgY29udHJpYiBzcmMvYmlu KQogCiAkKGNhbGwgcmVjdXJzZSxpbnN0YWxsY2hlY2std29ybGQsc3JjL3Rlc3Qgc3JjL3Bs IHNyYy9pbnRlcmZhY2VzIGNvbnRyaWIgc3JjL2JpbixpbnN0YWxsY2hlY2spCmRpZmYgLS1n aXQgYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgpp bmRleCBhNzY5OWIwMjZiYi4uYTM3MTQyZjgxNjAgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmls ZS5nbG9iYWwuaW4KKysrIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgpAQCAtMTksNyArMTks NyBAQAogIwogIyBNZXRhIGNvbmZpZ3VyYXRpb24KIAotc3RhbmRhcmRfdGFyZ2V0cyA9IGFs bCBpbnN0YWxsIGluc3RhbGxkaXJzIHVuaW5zdGFsbCBjbGVhbiBkaXN0Y2xlYW4gY292ZXJh Z2UgY2hlY2sgY2hlY2twcmVwIGluc3RhbGxjaGVjayBpbml0LXBvIHVwZGF0ZS1wbworc3Rh bmRhcmRfdGFyZ2V0cyA9IGFsbCBpbnN0YWxsIGluc3RhbGxkaXJzIHVuaW5zdGFsbCBjbGVh biBkaXN0Y2xlYW4gY292ZXJhZ2UgY2hlY2sgY2hlY2twcmVwIGluc3RhbGxjaGVjayBjaGVj ay11bml0IGluaXQtcG8gdXBkYXRlLXBvCiAjIHRoZXNlIHRhcmdldHMgc2hvdWxkIHJlY3Vy c2UgZXZlbiBpbnRvIHN1YmRpcmVjdG9yaWVzIG5vdCBiZWluZyBidWlsdDoKIHN0YW5kYXJk X2Fsd2F5c190YXJnZXRzID0gY2xlYW4gZGlzdGNsZWFuCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2xpYi9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZQppbmRleCBi NmNlZmQ5Y2NhMC4uNzQxNjdiYzllNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYi9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9saWIvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDgg QEAgc3ViZGlyID0gc3JjL2JhY2tlbmQvbGliCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgog aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCitpbmNsdWRl IE1ha2VmaWxlLmRmb3IKKwogT0JKUyA9IFwKIAliaXBhcnRpdGVfbWF0Y2gubyBcCiAJYmxv b21maWx0ZXIubyBcCkBAIC0yMiw1ICsyNCw4IEBAIE9CSlMgPSBcCiAJa25hcHNhY2subyBc CiAJcGFpcmluZ2hlYXAubyBcCiAJcmJ0cmVlLm8gXAorCSQoT0JKU19ERk9SKSBcCisKK0NQ UEZMQUdTIDo9IC1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIgJChDUFBGTEFHUykK IAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxlLmRmb3IgYi9zcmMvYmFja2VuZC9saWIv TWFrZWZpbGUuZGZvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YjkzYzZlNzg2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9saWIvTWFrZWZp bGUuZGZvcgpAQCAtMCwwICsxLDUgQEAKKyMgTWFrZWZpbGUuZGZvcgorCitPQkpTX0RGT1Ig Oj0gXAorCWJpdHBhY2tfdTE2Lm8gXAorCXZlY3RfdTE2Lm8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2xpYi9iaXRwYWNrX3RlbXBsLmMgYi9zcmMvYmFja2VuZC9saWIvYml0cGFja190 ZW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZjcyMWVh MWViYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYi9iaXRwYWNrX3RlbXBs LmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBiaXRwYWNrX3RlbXBsLmMKKyAqCisgKiBU aGUgQklUUEFDSyB1bml0IGltcGxlbWVudHMgcm91dGluZXMgcGVydGFpbmluZyB0byBiaXQt cGFja2luZy4gVGhlIGJpdHBhY2sKKyAqIHVuaXQgYWxsb3cgaGlnaGVyLWxldmVsIGZ1bmN0 aW9ucyB0byBjcmVhdGUgaGlnaC1kZW5zaXR5IGFycmF5cyBwYWNrZWQKKyAqIGJpdC1ieS1i aXQuIEluIGdlbmVyYWwsIHdpZHRoIG9mIGVhY2ggaXRlbSBpbiBhIGJpdHBhY2tlZCBhcnJh eSBjYW4gdmFyeSBhbmQKKyAqIGhhdmUgbm90IHRvIGJlIG9mIGZpeGVkIHNpemUsIGl0ZW1z IGNhbiBoYXZlIGRpZmZlcmVudCBsZW5ndGguCisgKi8KKworI2luY2x1ZGUgImxpYi9iaXRw YWNrX3N0YXBsZV90ZW1wbC5oIgorCitpdGVtX3Qgd2lkdGhfZnJvbV92YWwoaXRlbV90IHZh bCk7CitpdGVtX3Qgd2lkdGhfdG9fbWFzayhzaXplX3Qgd2lkdGgpOworc2l6ZV90IGJpdHBh Y2tfcGFjayh1aW50OF90ICpwYWNrLCBzaXplX3QgY2FyZXQsIGl0ZW1fdCBpdGVtLAorCQkJ CQlzaXplX3Qgc3pJdGVtV2lkdGgpOworaXRlbV90IGJpdHBhY2tfdW5wYWNrKGNvbnN0IHVp bnQ4X3QgKnBhY2ssIHNpemVfdCAqY2FyZXQsIHNpemVfdCBzekl0ZW1XaWR0aCk7CisKKy8q CisgKiBTaW5jZSB3aWR0aCBvZiBpdGVtX3QgY2Fubm90IGJlIG1vcmUgdGhhbiBsZW5ndGgg b2YgaXRlbV90CisgKiBsZyhNQVgoaXRlbV90KSkrMSwgd2UgdXNlIHRoZSBpdGVtX3QgdHlw ZSBmb3IgcmV0dXJuZWQgdmFsdWUKKyAqLworaXRlbV90Cit3aWR0aF9mcm9tX3ZhbChpdGVt X3QgdmFsKQoreworCWl0ZW1fdCB3aWR0aCA9IDA7CisKKwl3aGlsZSAodmFsKSB7CisJCXdp ZHRoKys7CisJCXZhbCA9IHZhbCA+PiAxOworCX0KKworCXJldHVybiB3aWR0aCA9PSAwID8g MSA6IHdpZHRoOworfQorCitpdGVtX3QKK3dpZHRoX3RvX21hc2soc2l6ZV90IHdpZHRoKQor eworCXNpemVfdCBtYXNrID0gMDsKKworCUFzc2VydCh3aWR0aCAhPSAwKTsKKwlBc3NlcnQo d2lkdGggPD0gc2l6ZW9mKGl0ZW1fdCkgKiA4KTsKKworCWlmIChsaWtlbHkod2lkdGggPCBz aXplb2Yoc2l6ZV90KSkpCisJCW1hc2sgPSAoMSA8PCB3aWR0aCkgLSAxOworCWVsc2UKKwkJ d2hpbGUgKHdpZHRoLS0pCisJCQltYXNrID0gKG1hc2sgPDwgMSkgfCAxOworCisJcmV0dXJu IChpdGVtX3QpbWFzazsKK30KKworc2l6ZV90CitiaXRwYWNrX3BhY2sodWludDhfdCAqcGFj aywgc2l6ZV90IGNhcmV0LCBpdGVtX3QgaXRlbSwgc2l6ZV90IHN6SXRlbVdpZHRoKQorewor CXNpemVfdCBzekl0ZW1XaWR0aFRvR28gPSBzekl0ZW1XaWR0aDsKKwlpdGVtX3QgaXRtTWFz a1RvR28gPSB3aWR0aF90b19tYXNrKHN6SXRlbVdpZHRoKTsKKworCXdoaWxlIChzekl0ZW1X aWR0aFRvR28gPiAwKSB7CisJCXNpemVfdCBjbnRTYXZlZEJpdHM7CisJCXNpemVfdCBieXRl ID0gY2FyZXQgLyA4OworCQlzaXplX3Qgb2ZmID0gY2FyZXQgJSA4OworCQl1aW50OF90IHVi Q2h1bmsgPSAodWludDhfdClpdGVtIDw8IG9mZjsKKwkJaXRlbV90IGl0bUNodW5rTWFzayA9 IGl0bU1hc2tUb0dvIDw8IG9mZjsKKwkJLyoKKwkJICogQXBwbHlpbmcgY2h1bmsgdXNpbmcg dGhlIG1hc2suIFNldHRpbmcgYml0cyB0byBvbmUgYW5kIHJlc2V0dGluZyBiaXRzCisJCSAq IHRvIHplcm8gaXMgb25seSBpbiBzY29wZXMgZGVmaW5lZCBieSB0aGUgbWFzay4gWmVyb2lu ZyBvZiBiaXRzCisJCSAqIGFjY29yZGluZyB0byBhIG1hc2ssIHdlIGNhbiB1c2UgZXZlbiBh IHBhY2sgbm90IGJlZW4gbnVsbGVkIGluCisJCSAqIGFkdmFuY2UuCisJCSAqLworCQlwYWNr W2J5dGVdIHw9ICh1YkNodW5rICYgaXRtQ2h1bmtNYXNrKTsKKwkJcGFja1tieXRlXSAmPSAo dWJDaHVuayB8IH5pdG1DaHVua01hc2spOworCQljbnRTYXZlZEJpdHMgPSAoOCAtIG9mZiA+ IHN6SXRlbVdpZHRoVG9HbykgPworCQkJc3pJdGVtV2lkdGhUb0dvIDoKKwkJCTggLSBvZmY7 IC8vIG51bWJlciBvZiBzYXZlZCBiaXRzCisJCXN6SXRlbVdpZHRoVG9HbyAtPSBjbnRTYXZl ZEJpdHM7CisJCWNhcmV0ICs9IGNudFNhdmVkQml0czsKKwkJaXRlbSA9IGl0ZW0gPj4gY250 U2F2ZWRCaXRzOworCQlpdG1NYXNrVG9HbyA9IGl0bU1hc2tUb0dvID4+IGNudFNhdmVkQml0 czsKKwl9CisJcmV0dXJuIGNhcmV0OworfQorCitpdGVtX3QKK2JpdHBhY2tfdW5wYWNrKGNv bnN0IHVpbnQ4X3QgKnBhY2ssIHNpemVfdCAqY2FyZXQsIHNpemVfdCB3aWRJdGVtKQorewor CXNpemVfdCBzekl0ZW1DYXJldDsKKwlzaXplX3Qgc3pJdGVtV2lkdGhUb0dvOworCXVpbnQ4 X3QgaXRlbVtzaXplb2YoaXRlbV90KV07IC8qIHNpemUgb2YgaXRlbSBhcnJheSAqLworCisJ c2l6ZV90IHN6UGFja0J5dGU7CisJc2l6ZV90IHN6UGFja09mZjsKKwlzaXplX3Qgc3pJdGVt Qnl0ZTsKKwlzaXplX3Qgc3pJdGVtT2ZmOworCXVpbnQ4X3QgdWJDaHVuazsKKworCXN6SXRl bUNhcmV0ID0gMDsKKwlzekl0ZW1XaWR0aFRvR28gPSB3aWRJdGVtOworCW1lbXNldChpdGVt LCAwLCBzaXplb2YoaXRlbV90KSk7CisKKwl3aGlsZSAoc3pJdGVtV2lkdGhUb0dvID4gMCkg eworCQlzaXplX3Qgc3pDaHVua1NpemU7CisJCXNpemVfdCBzekNodW5rTG93U2l6ZSwgc3pD aHVua0hpZ2hTaXplOworCisJCXN6UGFja0J5dGUgPSAqY2FyZXQgLyA4OworCQlzelBhY2tP ZmYgPSAqY2FyZXQgJSA4OworCQlzekl0ZW1CeXRlID0gc3pJdGVtQ2FyZXQgLyA4OworCQlz ekl0ZW1PZmYgPSBzekl0ZW1DYXJldCAlIDg7CisKKwkJdWJDaHVuayA9IHBhY2tbc3pQYWNr Qnl0ZV0gPj4gc3pQYWNrT2ZmOworCisJCXN6Q2h1bmtTaXplID0gOCAtIHN6UGFja09mZjsK KwkJaWYgKHN6SXRlbVdpZHRoVG9HbyA8IHN6Q2h1bmtTaXplKSB7CisJCQlzekNodW5rU2l6 ZSA9IHN6SXRlbVdpZHRoVG9HbzsKKwkJCXViQ2h1bmsgPSB1YkNodW5rICYgKHVpbnQ4X3Qp d2lkdGhfdG9fbWFzayhzekl0ZW1XaWR0aFRvR28pOworCQl9CisKKwkJaWYgKHN6Q2h1bmtT aXplID4gKDggLSBzekl0ZW1PZmYpKSAvKiBGcmVlIHNwYWNlIG9mIGl0ZW1bc3pJdGVtQnl0 ZV0gKi8KKwkJeworCQkJc3pDaHVua0xvd1NpemUgPSA4IC0gc3pJdGVtT2ZmOworCQkJc3pD aHVua0hpZ2hTaXplID0gc3pDaHVua1NpemUgLSBzekNodW5rTG93U2l6ZTsKKwkJfSBlbHNl IHsKKwkJCXN6Q2h1bmtMb3dTaXplID0gc3pDaHVua1NpemU7CisJCQlzekNodW5rSGlnaFNp emUgPSAwOworCQl9CisKKwkJaXRlbVtzekl0ZW1CeXRlXSB8PSB1YkNodW5rIDw8IHN6SXRl bU9mZjsgLyogY2h1bmtfbG93ICovCisKKwkJaWYgKHN6Q2h1bmtIaWdoU2l6ZSAhPSAwKSB7 CisJCQlBc3NlcnQoKHN6SXRlbUJ5dGUgKyAxKSA8IHNpemVvZihpdGVtX3QpKTsgLyogc2l6 ZSBvZiBpdGVtIGFycmF5ICovCisJCQlpdGVtW3N6SXRlbUJ5dGUgKyAxXSB8PSB1YkNodW5r ID4+IHN6Q2h1bmtMb3dTaXplOyAvKiBjaHVua19oaWdoICovCisJCX0KKworCQkqY2FyZXQg Kz0gc3pDaHVua1NpemU7CisJCXN6SXRlbUNhcmV0ICs9IHN6Q2h1bmtTaXplOworCQlzekl0 ZW1XaWR0aFRvR28gLT0gc3pDaHVua1NpemU7CisJfQorCisJLyoKKwkgKiBSZW9yZGVyaW5n IGJ5dGVzIGluIGFjY29yZGFuY2Ugd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBzeXN0ZW0uCisJ ICoKKwkgKiBIZXJlIGZvciBhIExpdHRsZS1lbmRpYW4gc3lzdGVtIHdlIGNhbiBhdm9pZCBy ZW9yZGVyaW5nLCBidXQgaW4gc3VjaCBhCisJICogY2FzZSB3ZSBuZWVkIHRvIGtlZXAgdGhl IGl0ZW0gYXJyYXkgYWxpZ25lZCB3aXRoIGl0ZW1fdCB0eXBlLCBidXQgd2UgZG8KKwkgKiBu b3Qga2VlcC4KKwkgKi8KKwl7CisJCXNpemVfdCBqID0gMTsKKwkJaXRlbV90IHZhbCA9IGl0 ZW1bc2l6ZW9mKGl0ZW1fdCkgLSBqXTsKKwkJd2hpbGUgKCsraiA8PSBzaXplb2YoaXRlbV90 KSkgeworCQkJdmFsID0gdmFsIDw8IDg7CisJCQl2YWwgfD0gaXRlbVtzaXplb2YoaXRlbV90 KSAtIGpdOworCQl9CisJCXJldHVybiB2YWw7CisJfQorfQorCisjaW5jbHVkZSAibGliL2Jp dHBhY2tfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9iaXRw YWNrX3UxNi5jIGIvc3JjL2JhY2tlbmQvbGliL2JpdHBhY2tfdTE2LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFlMmVlNmQ2YmIyCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2JhY2tlbmQvbGliL2JpdHBhY2tfdTE2LmMKQEAgLTAsMCArMSw4IEBACisv KgorICogRmlsZTogYml0cGFja191MTYuYworICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYg Ki8KKyNpbmNsdWRlICJsaWIvYml0cGFja191MTZfY29uZmlnLmgiCisjaW5jbHVkZSAiYml0 cGFja190ZW1wbC5jIgorLyogY2xhbmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9saWIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9saWIvbWVzb24uYnVpbGQK aW5kZXggOGUzOGZiMjBmMTcuLjA5ODRiZDBlM2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9saWIvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvbGliL21lc29uLmJ1aWxkCkBA IC0xLDUgKzEsMTAgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjYsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAKK2Rmb3Jfc291cmNlcyA9IGZpbGVzKAorICAn Yml0cGFja191MTYuYycsCisgICd2ZWN0X3UxNi5jJworKQorCiBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdiaXBhcnRpdGVfbWF0Y2guYycsCiAgICdibG9vbWZpbHRlci5jJywK QEAgLTExLDMgKzE2LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAncGFpcmlu Z2hlYXAuYycsCiAgICdyYnRyZWUuYycsCiApCisKK2JhY2tlbmRfc291cmNlcyArPSBkZm9y X3NvdXJjZXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi92ZWN0X3RlbXBsLmMgYi9z cmMvYmFja2VuZC9saWIvdmVjdF90ZW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi41MjcxM2MzOWQzYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL2xpYi92ZWN0X3RlbXBsLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBGaWxlOiB2 ZWN0X3RlbXBsLmMKKyAqLworCisjaW5jbHVkZSAibGliL3ZlY3RfdGVtcGxfc3RhcGxlLmgi CisKKy8qCisgKiBWZWN0b3IncyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhpcyBzZWN0aW9uIGVx dWFsIHRvIHRoZSBzYW1lIHNlY3Rpb24gaW4gdmVjdF90ZW1wbC5oCisgKi8KKy8qCisgKiBD YWxsZXIgaGFzIHRvIGNvbnRyb2wgd2hldGhlciB2ZWN0b3IgdXNlIG91dGVyIG1lbW9yeSBw cm92aWRlZCBieSBjYWxsZXIgb3IKKyAqIG1hbmFnZSBtZW1vcnkgYWxsb2NhdGlvbiBhdXRv bWF0aWNhbGx5LCB3aGljaCBkZWZpbmVzIHdoZXRoZXIgdmVjdF9pbnNlcnQsCisgKiB2ZWN0 X2FwcGVuZCBhbmQgb3RoZXIgZnVuY3Rpb25zIG9mIHRoZSB2ZWN0b3IgY29udGFpbmVyIGF1 dG9tYXRpY2FsbHkgbWFuZ2UKKyAqIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gb3Igbm90 LgorICovCisKK2ludCB2ZWN0X2luaXQodmVjdF90ICp2LCBzaXplX3QgY2FwLCBpdGVtX3Qg b3V0ZXJfbWVtW10pOworaW50IHZlY3RfZmlsbCh2ZWN0X3QgKnYsIHNpemVfdCBjbnQsIGNv bnN0IGl0ZW1fdCBpbltdKTsKK2ludCB2ZWN0X3Jlc2VydmUodmVjdF90ICp2LCBzaXplX3Qg c3pOZXdDYXApOworaW50IHZlY3RfYXBwZW5kKHZlY3RfdCAqdmVjdCwgaXRlbV90IHZhbCk7 Cit2b2lkIHZlY3RfcHJpbnQoY29uc3QgdmVjdF90ICphKTsKK2ludCB2ZWN0X2NvbXBhcmUo Y29uc3QgdmVjdF90ICphLCBjb25zdCB2ZWN0X3QgKmIpOworaW50IHZlY3RfaW5zZXJ0KHZl Y3RfdCAqdiwgc2l6ZV90IHBvcywgaXRlbV90IHZhbCk7Cit2b2lkIHZlY3RfY2xlYXIodmVj dF90ICp2KTsKKworLyoKKyAqIFVuaXF1ZSBzb3J0ZWQgdmVjdG9yJ3MgZnVuY3Rpb25zCisg KiBLZWVwIHRoaXMgc2VjdGlvbiBlcXVhbCB0byB0aGUgc2FtZSBzZWN0aW9uIGluIHZlY3Rf dGVtcGwuaAorICovCit1c3ZfaW5zX3Jlc190IHVzdl9pbnNlcnQodW5pcXNvcnR2ZWN0X3Qg KmEsIGl0ZW1fdCB2YWwpOwordXN2X3NyY2hfcmVzX3QgdXN2X3NlYXJjaChjb25zdCB1bmlx c29ydHZlY3RfdCAqdXN2LCBpdGVtX3QgdmFsKTsKKworaW50Cit2ZWN0X2luaXQodmVjdF90 ICp2LCBzaXplX3QgY2FwLCBpdGVtX3Qgb3V0ZXJfbWVtW10pCit7CisJaWYgKHYgPT0gTlVM TCkKKwkJZ290byB2ZWN0X2luaXRfZXJyb3I7CisKKwl2LT5jYXAgPSBjYXA7CisJdi0+Y250 ID0gMDsKKworCWlmIChvdXRlcl9tZW0gIT0gTlVMTCkKKwl7CisJCXYtPm1lbV9pc19vdXRl ciA9IHRydWU7CisJCXYtPm0gPSBvdXRlcl9tZW07CisJfQorCWVsc2UKKwl7CisJCXYtPm1l bV9pc19vdXRlciA9IGZhbHNlOworCQlpZiAoY2FwID09IDApCisJCQl2LT5tID0gTlVMTDsK KwkJZWxzZQorCQl7CisJCQl2LT5tID0gKGl0ZW1fdCAqKVZFQ1RfTUFMTE9DKGNhcCAqIHNp emVvZihpdGVtX3QpKTsKKwkJCWlmICh2LT5tID09IE5VTEwpCisJCQkJZ290byB2ZWN0X2lu aXRfZXJyb3I7CisJCX0KKwl9CisKKwkvKiB2ZWN0X2luaXRfb2s6ICovCisJcmV0dXJuIDA7 Cit2ZWN0X2luaXRfZXJyb3I6CisJbWVtc2V0KHYsIDAsIHNpemVvZih2ZWN0X3QpKTsKKwly ZXR1cm4gLTE7Cit9CisKK2ludAordmVjdF9maWxsKHZlY3RfdCAqdiwgc2l6ZV90IGNudCwg Y29uc3QgaXRlbV90IGluW10pCit7CisJaWYgKHYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOwor CisJaWYgKGNudCA9PSAwKQorCXsKKwkJdmVjdF9jbGVhcih2KTsKKwkJcmV0dXJuIDA7CisJ fQorCisJZm9yIChzaXplX3QgaiA9IDA7IGogPCBjbnQ7IGorKykKKwl7CisJCWlmICh2ZWN0 X2FwcGVuZCh2LCBpbltqXSkgIT0gMCkKKwkJeworCQkJdmVjdF9jbGVhcih2KTsKKwkJCXJl dHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50Cit2ZWN0X3Jlc2VydmUo dmVjdF90ICp2LCBzaXplX3Qgc3pOZXdDYXApCit7CisJaXRlbV90ICptTmV3OworCisJaWYg KHYgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHYtPm1lbV9pc19vdXRlcikKKwkJ cmV0dXJuIC0xOworCisJaWYgKHN6TmV3Q2FwIDw9IHYtPmNhcCkKKwkJcmV0dXJuIDA7CisK KwltTmV3ID0gKGl0ZW1fdCAqKSBWRUNUX01BTExPQyhzaXplb2YoaXRlbV90KSAqIHN6TmV3 Q2FwKTsKKworCWlmIChtTmV3ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmKHYtPm0g PT0gTlVMTCAmJiB2LT5jbnQgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJaWYodi0+bSAhPSBO VUxMICYmIHYtPmNudCAhPSAwKQorCQltZW1jcHkobU5ldywgdi0+bSwgdi0+Y250ICogc2l6 ZW9mKGl0ZW1fdCkpOworCisJVkVDVF9GUkVFKHYtPm0pOworCXYtPm0gPSBtTmV3OworCXYt PmNhcCA9IHN6TmV3Q2FwOworCXJldHVybiAwOworfQorCitpbnQKK3ZlY3RfYXBwZW5kKHZl Y3RfdCAqdmVjdCwgaXRlbV90IHZhbCkKK3sKKwlpZiAodmVjdCA9PSBOVUxMKQorCQlyZXR1 cm4gLTE7CisKKwlpZiAodmVjdC0+Y250ICsgMSA+IHZlY3QtPmNhcCkKKwl7CisJCWlmICh2 ZWN0LT5tZW1faXNfb3V0ZXIpCisJCQlyZXR1cm4gLTE7CisJCWVsc2UKKwkJCXZlY3RfcmVz ZXJ2ZSh2ZWN0LCB2ZWN0LT5jYXAgKyBWRUNUX01FTUFMTE9DU1RFUCk7CisJfQorCisJdmVj dC0+bVt2ZWN0LT5jbnRdID0gdmFsOworCXZlY3QtPmNudCsrOworCXJldHVybiAwOworfQor Cit2b2lkCit2ZWN0X3ByaW50KGNvbnN0IHZlY3RfdCAqYSkKK3sKKwlmb3IgKHNpemVfdCBq ID0gMDsgaiA8IGEtPmNudDsgaisrKQorCQlwcmludGYoIiUiIFZFQ1RfSVRFTV9GT1JNQVRf U1BFQ0lGSUVSICIgIiwgYS0+bVtqXSk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK2ludAor dmVjdF9jb21wYXJlKGNvbnN0IHZlY3RfdCAqYSwgY29uc3QgdmVjdF90ICpiKQoreworCWlm IChhID09IE5VTEwgfHwgYiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYS0+Y250 ICE9IGItPmNudCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChzaXplX3QgaiA9IDA7IGogPCBh LT5jbnQ7IGorKykKKwkJaWYgKGEtPm1bal0gIT0gYi0+bVtqXSkKKwkJCXJldHVybiAtMTsK KworCXJldHVybiAwOworfQorCitpbnQKK3ZlY3RfaW5zZXJ0KHZlY3RfdCAqdiwgc2l6ZV90 IHBvcywgaXRlbV90IHZhbCkKK3sKKwlpZiAodi0+Y2FwIDwgdi0+Y250ICsgMSAmJgorCQko di0+bWVtX2lzX291dGVyIHx8IHZlY3RfcmVzZXJ2ZSh2LCB2LT5jYXAgKyBWRUNUX01FTUFM TE9DU1RFUCkgIT0gMCkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogSWYgbmVlZCwgbW92 ZSByaWdodCBmcm9tIHBvcyBpbmNsdWRpbmcgcG9zLiBCZWNhdXNlCisJICogbmVpdGhlciBz dGRsaWIncyBub3IgUE9TSVgncyBkb2N1bWVudGF0aW9uIGRlZmluZXMgdGhlCisJICogYmVo YXZpb3VyIG9mIG1lbW1vdmUgaW4gY2FzZSBvZiBjb3VudD0wLCB3ZSBjaGVjayBpdCBieQor CSAqIG91cnNlbHZlcy4KKwkgKi8KKwlpZiAodi0+Y250IC0gcG9zID4gMCkKKwkJbWVtbW92 ZSgmdi0+bVtwb3MgKyAxXSwgJnYtPm1bcG9zXSwgKHYtPmNudCAtIHBvcykgKiBzaXplb2Yo aXRlbV90KSk7CisKKwl2LT5tW3Bvc10gPSB2YWw7CisJdi0+Y250Kys7CisJcmV0dXJuIDA7 Cit9CisKK3ZvaWQKK3ZlY3RfY2xlYXIodmVjdF90ICp2KQoreworCWlmICh2ID09IE5VTEwp CisJCXJldHVybjsKKworCWlmICghdi0+bWVtX2lzX291dGVyKQorCQlWRUNUX0ZSRUUodi0+ bSk7CisKKwltZW1zZXQodiwgMCwgc2l6ZW9mKHZlY3RfdCkpOworfQorCit1c3Zfc3JjaF9y ZXNfdAordXN2X3NlYXJjaChjb25zdCB1bmlxc29ydHZlY3RfdCAqdXN2LCBpdGVtX3QgdmFs KQoreworCXNpemVfdCBpLCBsLCBnOworCXVzdl9zcmNoX3Jlc190IHJlczsKKworCWlmICh1 c3YgPT0gTlVMTCB8fCAodXN2LT5tID09IE5VTEwgJiYgKCh1c3YtPmNudCAhPSAwKSB8fCB1 c3YtPmNhcCAhPSAwKSkpIHsKKwkJcmVzLnN0ID0gVVNWX1NSQ0hfRVJST1I7CisJCXJldHVy biByZXM7CisJfQorCisJaWYgKHVzdi0+Y250ID09IDApIHsKKwkJcmVzLnBvcyA9IDA7CisJ CXJlcy5zdCA9IFVTVl9TUkNIX0VNUFRZOworCQlyZXR1cm4gcmVzOworCX0KKworCWlmICh2 YWwgPCB1c3YtPm1bMF0pIHsKKwkJcmVzLnBvcyA9IDA7CisJCXJlcy5zdCA9IFVTVl9TUkNI X05PVF9GT1VORF9TTUFMTEVTVDsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAodmFsID4g dXN2LT5tW3Vzdi0+Y250IC0gMV0pIHsKKwkJcmVzLnBvcyA9IHVzdi0+Y250IC0gMTsKKwkJ cmVzLnN0ID0gVVNWX1NSQ0hfTk9UX0ZPVU5EX0xBUkdFU1Q7CisJCXJldHVybiByZXM7CisJ fQorCisJbCA9IDA7CisJZyA9IHVzdi0+Y250IC0gMTsKKworCXdoaWxlIChnIC0gbCA+IDEp IHsKKwkJaSA9IGwgKyAoZyAtIGwpIC8gMjsKKwkJaWYgKHZhbCA9PSB1c3YtPm1baV0pIHsK KwkJCXJlcy5wb3MgPSBpOworCQkJcmVzLnN0ID0gVVNWX1NSQ0hfRk9VTkQ7CisJCQlyZXR1 cm4gcmVzOworCQl9IGVsc2UgaWYgKHZhbCA+IHVzdi0+bVtpXSkgeworCQkJbCA9IGk7CisJ CX0gZWxzZSAvLyB2YWwgPD0gdXN2LT5tW2ldCisJCXsKKwkJCWcgPSBpOworCQl9CisJfQor CS8qCisJICogV2hlbiBzY29wZXMgbCBhbmQgZyBhcmUgbmVpZ2hib3VycyAoICBnLWwgPSAx KQorCSAqLworCWlmICh2YWwgPT0gdXN2LT5tW2ddKSB7CisJCXJlcy5wb3MgPSBnOworCQly ZXMuc3QgPSBVU1ZfU1JDSF9GT1VORDsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHZh bCA9PSB1c3YtPm1bbF0pIHsKKwkJcmVzLnBvcyA9IGw7CisJCXJlcy5zdCA9IFVTVl9TUkNI X0ZPVU5EOworCQlyZXR1cm4gcmVzOworCX0KKworCXJlcy5wb3MgPSBnOworCXJlcy5zdCA9 IFVTVl9TUkNIX05PVF9GT1VORDsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogSU5TRVJU CisgKiByZWNlaXZlcyBhIHZhbHVlLCBjaGVja3Mgd2hldGhlciBhbiB1bmlxdWUgc29ydGVk IHZhbHVlcyB2ZWN0b3IgY29udGFpbnMKKyAqIHRoaXMgdmFsdWUuIElmIG5vdCwgaW5zZXJ0 cyBuZXcgdmFsdWUsIHJldGFpbmluZyBzb3J0ZWQgb3JkZXIuCisgKi8KK3Vzdl9pbnNfcmVz X3QKK3Vzdl9pbnNlcnQodW5pcXNvcnR2ZWN0X3QgKmEsIGl0ZW1fdCB2YWwpCit7CisJdXN2 X3NyY2hfcmVzX3Qgc2VhcmNoOworCXVzdl9pbnNfcmVzX3QgaW5zZXJ0OworCisJQXNzZXJ0 KGEgIT0gTlVMTCk7CisKKwlzZWFyY2ggPSB1c3Zfc2VhcmNoKGEsIHZhbCk7CisJaWYgKHNl YXJjaC5zdCA9PSBVU1ZfU1JDSF9GT1VORCkgeworCQlpbnNlcnQuc3QgPSBVU1ZfSU5TX0VY SVNUUzsKKwkJaW5zZXJ0LnBvcyA9IHNlYXJjaC5wb3M7CisJCXJldHVybiBpbnNlcnQ7CisJ fSBlbHNlIGlmIChzZWFyY2guc3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxMRVNUIHx8 CisJCQkgICBzZWFyY2guc3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EKSB7CisJCWluc2VydC5w b3MgPSBzZWFyY2gucG9zOworCX0gZWxzZSBpZiAoc2VhcmNoLnN0ID09IFVTVl9TUkNIX0VN UFRZIHx8CisJCQkgICBzZWFyY2guc3QgPT0gVVNWX1NSQ0hfTk9UX0ZPVU5EX0xBUkdFU1Qp IHsKKwkJLyogSW4gY2FzZSB3aGVuIHZhbHVlIGlzIG1vcmUgdGhhbiBsYXJnZXN0OiBwb3Mg PSBhLT5jbnQgPSBzZWFyY2guZyArIDEuCisJCSAqLworCQkvKiBJbiBjYXNlIG9mIGVtcHR5 IHZlY3RvcjogcG9zID0gYS0+Y250ID0gMC4gKi8KKwkJaW5zZXJ0LnBvcyA9IGEtPmNudDsK Kwl9IGVsc2UgLyogVVNWX1NSQ0hfRVJST1Igb3IgdW5rbm93biByZXN1bHQgKi8KKwl7CisJ CWluc2VydC5zdCA9IFVTVl9JTlNfRVJST1I7CisJCXJldHVybiBpbnNlcnQ7CisJfQorCisJ aW5zZXJ0LnN0ID0gdmVjdF9pbnNlcnQoYSwgaW5zZXJ0LnBvcywgdmFsKQorCT09IDAgPyBV U1ZfSU5TX05FVyA6IFVTVl9JTlNfRVJST1I7CisKKwlyZXR1cm4gaW5zZXJ0OworfQorCisj aW5jbHVkZSAibGliL3ZlY3RfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2xpYi92ZWN0X3UxNi5jIGIvc3JjL2JhY2tlbmQvbGliL3ZlY3RfdTE2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBhYjhlMjI0YzdhCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbGliL3ZlY3RfdTE2LmMKQEAgLTAsMCArMSw4IEBA CisvKgorICogRmlsZTogdmVjdF91MTYuYworICovCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYg Ki8KKyNpbmNsdWRlICJsaWIvdmVjdF91MTZfY29uZmlnLmgiCisjaW5jbHVkZSAidmVjdF90 ZW1wbC5jIgorLyogY2xhbmctZm9ybWF0IG9uICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXggODhkMTNlYzk5OTMuLjFlNDhhNTJhZTkw IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgKKysrIGIvc3JjL2luY2x1ZGUvYy5oCkBA IC01MDUsNiArNTA1LDEwIEBAIGV4dGVybiAiQysrIgogI2RlZmluZSBDcHBBc1N0cmluZyhp ZGVudGlmaWVyKSAjaWRlbnRpZmllcgogI2RlZmluZSBDcHBBc1N0cmluZzIoeCkJCQlDcHBB c1N0cmluZyh4KQogI2RlZmluZSBDcHBDb25jYXQoeCwgeSkJCQl4IyN5CisjZGVmaW5lIENw cENvbmNhdDIoeCwgeSkJCUNwcENvbmNhdCh4LCB5KQorCisjZGVmaW5lIENwcENvbmNhdFRy aXBsZSh4LCB5LCB6KQl4IyN5IyN6CisjZGVmaW5lIENwcENvbmNhdFRyaXBsZTIoYSwgYiwg YykJQ3BwQ29uY2F0VHJpcGxlKGEsIGIsIGMpCiAKIC8qCiAgKiBWQV9BUkdTX05BUkdTCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvYml0cGFja19zdGFwbGVfdGVtcGwuaCBiL3Ny Yy9pbmNsdWRlL2xpYi9iaXRwYWNrX3N0YXBsZV90ZW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Yzk5NzJlMDhjYgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL2xpYi9iaXRwYWNrX3N0YXBsZV90ZW1wbC5oCkBAIC0wLDAgKzEsNTcg QEAKKy8qCisgKiBGaWxlOiBiaXRwYWNrX3N0YXBsZV90ZW1wbC5oLmgKKyAqLworCisjaW5j bHVkZSAiYy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT05SRVVTQUJM RSBDT0RFLCBhbGxvd2VkIHRvIGJlIGluY2x1ZGVkIG9ubHkgb25jZQorICoKKyAqIFRoaXMg Y29kZSBzaG91bGQgYXBwZWFyIG9ubHkgb25jZSBpbiBhIGZpbGUgKG9yIGluIGEgY2hhaW4g b2YgZmlsZXMpCisgKiBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgd2l0aCAjaW5jbHVkZS4gU28s IHdlIHByb3RlY3QgaXQgZnJvbSBkdXBsaWNhdGVzIGJ5CisgKiBtZWFucyBvZiBtYWNybwor ICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0JJVFBBQ0tfU1RBUExF X1RFTVBMX0hfVU5JUVVFX0NPREVfCisjZGVmaW5lIF9CSVRQQUNLX1NUQVBMRV9URU1QTF9I X1VOSVFVRV9DT0RFXworCisvKiBObyBjb2RlIGhlcmUgeWV0ICovCisKKyNlbmRpZiAvKiBf QklUUEFDS19TVEFQTEVfVEVNUExfSF9VTklRVUVfQ09ERV8gKi8KKworLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogRW5kIG9mIENvZGUsIGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQg b25seSBvbmNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIFJFVVNBQkxFIENPREUKKyAqCisgKiBUaGlzIGNvZGUgY2FuIGJl IHJldXNlZCB3aXRoICNpbmNsdWRlIGRpcmVjdGl2ZSBpbiBhIGZpbGUgaWYgQklUUEFDS19N QVJLRVIKKyAqIHJlZGVmaW5lZC4gVGhpcyBhbGxvdyBjcmVhdGlvbiBvZiBzZXZlcmFsIHR5 cGVzIG9mIHZlY3RvcnMgd2l0aCBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1lbWJlcnMuCisg KgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEJJVFBBQ0tfSVRFTV9U WVBFCisjZXJyb3IgIkJJVFBBQ0tfSVRFTV9UWVBFIG1hY3JvIGlzIGluZGVmaW5lZC4iCisj ZW5kaWYKKyNpZm5kZWYgQklUUEFDS19NQVJLRVIKKyNlcnJvciAiQklUUEFDS19NQVJLRVIg bWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgorCisjZGVmaW5lIGl0ZW1fdAkJICAgQklU UEFDS19JVEVNX1RZUEUKKyNkZWZpbmUgd2lkdGhfZnJvbV92YWwgQ3BwQ29uY2F0VHJpcGxl Mih3aWR0aF8sIEJJVFBBQ0tfTUFSS0VSLCBfZnJvbV92YWwpCisjZGVmaW5lIHdpZHRoX3Rv X21hc2sgIENwcENvbmNhdFRyaXBsZTIod2lkdGhfLCBCSVRQQUNLX01BUktFUiwgX3RvX21h c2spCisjZGVmaW5lIGJpdHBhY2tfcGFjayAgIENwcENvbmNhdFRyaXBsZTIoYml0cGFja18s IEJJVFBBQ0tfTUFSS0VSLCBfcGFjaykKKyNkZWZpbmUgYml0cGFja191bnBhY2sgQ3BwQ29u Y2F0VHJpcGxlMihiaXRwYWNrXywgQklUUEFDS19NQVJLRVIsIF91bnBhY2spCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKyAqIEVuZCBvZiBSZXVzYWJsZSBDb2RlCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBEb24ndCBmb3JnZXQgdG8gaW5jbHVkZSB0 aGlzIGNvZGUgaW4geW91ciBmaWxlIHRoYXQgdXNlcyB0aGlzIGhlYWRlcgorICoKKyAqICNp bmNsdWRlICJsaWIvYml0cGFja190ZW1wbF91bmRlZi5oIgorICoKKyAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdGVtcGwuaCBiL3NyYy9pbmNsdWRlL2xpYi9i aXRwYWNrX3RlbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmIzYTZlMDZjMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBh Y2tfdGVtcGwuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogYml0cGFja190ZW1wbC5oCisg KgorICovCisKKyNpbmNsdWRlICJiaXRwYWNrX3N0YXBsZV90ZW1wbC5oIgorCitleHRlcm4g aXRlbV90IHdpZHRoX2Zyb21fdmFsKGl0ZW1fdCB2YWwpOworZXh0ZXJuIGl0ZW1fdCB3aWR0 aF90b19tYXNrKHNpemVfdCB3aWR0aCk7CitleHRlcm4gc2l6ZV90IGJpdHBhY2tfcGFjayh1 aW50OF90ICpwYWNrLCBzaXplX3QgY2FyZXQsIGl0ZW1fdCBpdGVtLAorCQkJCQkJICAgc2l6 ZV90IHN6SXRlbVdpZHRoKTsKK2V4dGVybiBpdGVtX3QgYml0cGFja191bnBhY2soY29uc3Qg dWludDhfdCAqcGFjaywgc2l6ZV90ICpjYXJldCwgc2l6ZV90IHN6SXRlbVdpZHRoKTsKKwor I2luY2x1ZGUgImJpdHBhY2tfdGVtcGxfdW5kZWYuaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2xpYi9iaXRwYWNrX3RlbXBsX3VuZGVmLmggYi9zcmMvaW5jbHVkZS9saWIvYml0cGFj a190ZW1wbF91bmRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li41YmY4NjRmZmExNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9iaXRw YWNrX3RlbXBsX3VuZGVmLmgKQEAgLTAsMCArMSw1IEBACisjdW5kZWYgaXRlbV90CisjdW5k ZWYgd2lkdGhfZnJvbV92YWwKKyN1bmRlZiB3aWR0aF90b19tYXNrCisjdW5kZWYgYml0cGFj a19wYWNrCisjdW5kZWYgYml0cGFja191bnBhY2sKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2xpYi9iaXRwYWNrX3UxNi5oIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ1ZmI2YzRiMTdiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2LmgKQEAgLTAsMCAr MSwxMiBAQAorLyoKKyAqIGJpdHBhY2suaAorICovCisjaWZuZGVmIF9CSVRQQUNLX1UxNl9I XworI2RlZmluZSBfQklUUEFDS19VMTZfSF8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLwor I2luY2x1ZGUgImJpdHBhY2tfdTE2X2NvbmZpZy5oIgorI2luY2x1ZGUgImJpdHBhY2tfdGVt cGwuaCIKKy8qIGNsYW5nLWZvcm1hdCBvbiAqLworCisjZW5kaWYgLyogX0JJVFBBQ0tfVTE2 X0hfICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvYml0cGFja191MTZfY29uZmln LmggYi9zcmMvaW5jbHVkZS9saWIvYml0cGFja191MTZfY29uZmlnLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllNmM2NGQ0ZmVlCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2luY2x1ZGUvbGliL2JpdHBhY2tfdTE2X2NvbmZpZy5oCkBAIC0wLDAgKzEs NiBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdTE2X2NvbmZpZy5oCisgKi8KKworI2RlZmluZSBC SVRQQUNLX0lURU1fVFlQRSB1aW50MTZfdAorI2RlZmluZSBCSVRQQUNLX01BUktFUgkgIHUx NgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGliL3ZlY3RfdGVtcGwuaCBiL3NyYy9pbmNs dWRlL2xpYi92ZWN0X3RlbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjhlZWM2ZjA2NGIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbGli L3ZlY3RfdGVtcGwuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogRmlsZTogdmVjdF90ZW1w bC5oCisgKi8KKworI2luY2x1ZGUgInZlY3RfdGVtcGxfc3RhcGxlLmgiCisKKy8qCisgKiBW ZWN0b3IncyBmdW5jdGlvbnMKKyAqIEtlZXAgdGhpcyBzZWN0aW9uIGVxdWFsIHRvIHRoZSBz YW1lIHNlY3Rpb24gaW4gdmVjdF90ZW1wbC5jCisgKi8KK2V4dGVybiBpbnQgdmVjdF9pbml0 KHZlY3RfdCAqdiwgc2l6ZV90IGNhcCwgaXRlbV90IGV4dGVybmFsX21lbW9yeVtdKTsKK2V4 dGVybiBpbnQgdmVjdF9maWxsKHZlY3RfdCAqdiwgc2l6ZV90IGNudCwgY29uc3QgaXRlbV90 ICppbik7CitleHRlcm4gaW50IHZlY3RfcmVzZXJ2ZSh2ZWN0X3QgKnYsIHNpemVfdCBzek5l d0NhcCk7CitleHRlcm4gaW50IHZlY3RfYXBwZW5kKHZlY3RfdCAqdmVjdCwgaXRlbV90IHZh bCk7CitleHRlcm4gdm9pZCB2ZWN0X3ByaW50KGNvbnN0IHZlY3RfdCAqYSk7CitleHRlcm4g aW50IHZlY3RfY29tcGFyZShjb25zdCB2ZWN0X3QgKmEsIGNvbnN0IHZlY3RfdCAqYik7Citl eHRlcm4gaW50IHZlY3RfaW5zZXJ0KHZlY3RfdCAqdiwgc2l6ZV90IHBvcywgaXRlbV90IHZh bCk7CitleHRlcm4gdm9pZCB2ZWN0X2NsZWFyKHZlY3RfdCAqdik7CisKKy8qCisgKiBVbmlx dWUgc29ydGVkIHZlY3RvcidzIGZ1bmN0aW9ucworICogS2VlcCB0aGlzIHNlY3Rpb24gZXF1 YWwgdG8gdGhlIHNhbWUgc2VjdGlvbiBpbiB2ZWN0X3RlbXBsLmMKKyAqLworZXh0ZXJuIHVz dl9pbnNfcmVzX3QgdXN2X2luc2VydCh1bmlxc29ydHZlY3RfdCAqYSwgaXRlbV90IHZhbCk7 CitleHRlcm4gdXN2X3NyY2hfcmVzX3QgdXN2X3NlYXJjaChjb25zdCB1bmlxc29ydHZlY3Rf dCAqdXN2LCBpdGVtX3QgdmFsKTsKKworI2luY2x1ZGUgInZlY3RfdGVtcGxfdW5kZWYuaCIK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9s aWIvdmVjdF90ZW1wbF9zdGFwbGUuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0 YXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTkyYzZk ODJhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3RlbXBsX3N0 YXBsZS5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogRmlsZTogdmVjdF9zdGFwbGVfdGVt cGwuaAorICovCisKKyNpbmNsdWRlICJjLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqIE5PTlJFVVNBQkxFIENPREUsIGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQgb25seSBv bmNlCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBhcHBlYXIgb25seSBvbmNlIGluIGEgZmls ZSAob3IgaW4gYSBjaGFpbiBvZiBmaWxlcykKKyAqIGluY2x1ZGluZyB0aGlzIGhlYWRlciB3 aXRoICNpbmNsdWRlLiBTbywgd2UgcHJvdGVjdCBpdCBmcm9tIGR1cGxpY2F0ZXMgYnkKKyAq IG1lYW5zIG9mIG1hY3JvCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRl ZiBfVkVDVF9TVEFQTEVfVEVNUExfSF9VTklRVUVfQ09ERV8KKyNkZWZpbmUgX1ZFQ1RfU1RB UExFX1RFTVBMX0hfVU5JUVVFX0NPREVfCisKKy8qCisgKiBTRUFSQ0ggaW4gVmVjdG9yIG9m IFVuaXF1ZSBTb3J0ZWQgbWVtYmVycworICovCit0eXBlZGVmIGVudW0KK3sKKwlVU1ZfU1JD SF9FUlJPUiA9IC0xLAorCVVTVl9TUkNIX0ZPVU5EID0gMCwKKwlVU1ZfU1JDSF9FTVBUWSwK KwlVU1ZfU1JDSF9OT1RfRk9VTkQsCisJVVNWX1NSQ0hfTk9UX0ZPVU5EX1NNQUxMRVNULAor CVVTVl9TUkNIX05PVF9GT1VORF9MQVJHRVNUCit9IHVzdl9zcmNoX3N0YXRfdDsKKwordHlw ZWRlZiBzdHJ1Y3QKK3sKKwl1c3Zfc3JjaF9zdGF0X3Qgc3Q7CisJc2l6ZV90IHBvczsgLyog cG9zaXRpb24gKGluZGV4KSBvZiBhIG1lbWJlciB0aGF0IGlzIGVxdWFsIHRvIHNlYXJjaGVk IHZhbHVlCisJCQkJICogb3IgdGhhdCBpcyBuZWFyZXN0IGdyZWF0ZXIgbWVtYmVyICovCit9 IHVzdl9zcmNoX3Jlc190OworCisvKgorICogSU5TRVJUICBpbiBWZWN0b3Igb2YgVW5pcXVl IFNvcnRlZCBtZW1iZXJzCisgKi8KK3R5cGVkZWYgZW51bQoreworCVVTVl9JTlNfRVJST1Ig PSAtMSwKKwlVU1ZfSU5TX0VYSVNUUyA9IDAsCisJVVNWX0lOU19ORVcKK30gdXN2X2luc19z dGF0X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJdXN2X2luc19zdGF0X3Qgc3Q7CisJc2l6 ZV90IHBvczsgLyogcG9zaXRpb24gKGluZGV4KSBvZiBhIG1lbWJlciB0aGF0IHdhcyBpbnNl cnRlZCBvciB0aGF0IHByb3ZlZAorCQkJCSAqIHRvIGJlIGVxdWFsIHRvIGluc2VydGVkIHZh bHVlCisJCQkJICovCit9IHVzdl9pbnNfcmVzX3Q7CisKKyNlbmRpZiAvKiBfVkVDVF9TVEFQ TEVfVEVNUExfSF9VTklRVUVfQ09ERV8gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogRW5kIG9mIENvZGUsIGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQgb25seSBvbmNlCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIFJFVVNBQkxFIENPREUKKyAqCisgKiBUaGlzIGNvZGUgY2FuIGJlIHJldXNlZCB3aXRo ICNpbmNsdWRlIGRpcmVjdGl2ZSBpbiBhIGZpbGUgaWYgVkVDVF9NQVJLRVIKKyAqIHJlZGVm aW5lZC4gVGhpcyBhbGxvdyBjcmVhdGlvbiBvZiBzZXZlcmFsIHR5cGVzIG9mIHZlY3RvcnMg d2l0aCBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1lbWJlcnMuCisgKgorICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworCisjaWZuZGVmIFZFQ1RfSVRFTV9UWVBFCisjZXJyb3IgIlZFQ1Rf SVRFTV9UWVBFIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBWRUNU X0lURU1fRk9STUFUX1NQRUNJRklFUgorI2Vycm9yICJWRUNUX0lURU1fRk9STUFUX1NQRUNJ RklFUiBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNpZm5kZWYgVkVDVF9NQVJL RVIKKyNlcnJvciAiVkVDVF9NQVJLRVIgbWFjcm8gaXMgaW5kZWZpbmVkLiIKKyNlbmRpZgor CisjaWZuZGVmIFZFQ1RfTUVNQUxMT0NTVEVQCisjZXJyb3IgIlZFQ1RfTUVNQUxMT0NTVEVQ IG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBWRUNUX01BTExPQwor I2Vycm9yICJWRUNUX01BTExPQyBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisKKyNp Zm5kZWYgVkVDVF9GUkVFCisjZXJyb3IgIlZFQ1RfRlJFRSBtYWNybyBpcyBpbmRlZmluZWQu IgorI2VuZGlmCisKKy8qCisgKiBUaGUgVmVjdG9yIHR5cGUgaXRzZWxmLAorICogVGhlIFZl Y3RvciBvZiBVbmlxdWUgU29ydGVkIEl0ZW1zIHR5cGUKKyAqIGFuZCB0aGUgSXRlbSB0eXBl CisgKgorICogSW4gZmFjdCwgdmVjdG9ycydzIG5hbWVzIGxvb2tzIGxpa2UgdmVjdF91MTZf dCB3aGVyZToKKyAqICAgICB2ZWN0XyAtIGNvbW1vbiBwcmVmaXgsCisgKiAgICAgdTE2IC0g bWFya2VyLAorICogICAgIF90IC0gc3VmZml4CisgKi8KKyNkZWZpbmUgdmVjdF90CQkgICBD cHBDb25jYXRUcmlwbGUyKHZlY3RfLCBWRUNUX01BUktFUiwgX3QpCisjZGVmaW5lIHVuaXFz b3J0dmVjdF90IENwcENvbmNhdFRyaXBsZTIodW5pcXNvcnR2ZWN0XywgVkVDVF9NQVJLRVIs IF90KQorI2RlZmluZSBpdGVtX3QJCSAgIFZFQ1RfSVRFTV9UWVBFCisKK3R5cGVkZWYgc3Ry dWN0Cit7CisJc2l6ZV90IGNudDsJCSAgIC8qIG51bWJlciBvZiBpdGVtcyAqLworCXNpemVf dCBjYXA7CQkgICAvKiBjYXBhY2l0eSAqLworCWJvb2wgbWVtX2lzX291dGVyOyAvKiBmbGFn IGFib3V0IGFuIGV4dGVybmFsIG1lbW9yeSBpcyB1c2VkICovCisJaXRlbV90ICptOwkJICAg LyogaXRlbXMgKG1lbWJlcnMpICovCit9IHZlY3RfdDsKKwordHlwZWRlZiB2ZWN0X3QgdW5p cXNvcnR2ZWN0X3Q7CisKKyNkZWZpbmUgdmVjdF9pbml0CQkgICBDcHBDb25jYXRUcmlwbGUy KHZlY3RfLCBWRUNUX01BUktFUiwgX2luaXQpCisjZGVmaW5lIHZlY3RfZmlsbAkJICAgQ3Bw Q29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9maWxsKQorI2RlZmluZSB2ZWN0 X3Jlc2VydmUJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9yZXNl cnZlKQorI2RlZmluZSB2ZWN0X2FwcGVuZAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0Xywg VkVDVF9NQVJLRVIsIF9hcHBlbmQpCisjZGVmaW5lIHZlY3RfcHJpbnQJCSAgIENwcENvbmNh dFRyaXBsZTIodmVjdF8sIFZFQ1RfTUFSS0VSLCBfcHJpbnQpCisjZGVmaW5lIHZlY3RfY29t cGFyZQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBWRUNUX01BUktFUiwgX2NvbXBhcmUp CisjZGVmaW5lIHZlY3RfaW5zZXJ0CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBWRUNU X01BUktFUiwgX2luc2VydCkKKyNkZWZpbmUgdmVjdF9jbGVhcgkJICAgQ3BwQ29uY2F0VHJp cGxlMih2ZWN0XywgVkVDVF9NQVJLRVIsIF9jbGVhcikKKworI2RlZmluZSB1c3ZfaW5zZXJ0 IENwcENvbmNhdFRyaXBsZTIodXN2XywgVkVDVF9NQVJLRVIsIF9pbnNlcnQpCisjZGVmaW5l IHVzdl9zZWFyY2ggQ3BwQ29uY2F0VHJpcGxlMih1c3ZfLCBWRUNUX01BUktFUiwgX3NlYXJj aCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5kIG9mIFJldXNhYmxlIENv ZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERvbid0IGZvcmdldCB0 byBpbmNsdWRlCisgKiAJCSNpbmNsdWRlICJ2ZWN0X3RlbXBsX3VuZGVmLmgiCisgKiBpbiB5 b3VyIGZpbGUgdGhhdCB1c2VzIHRoaXMgaGVhZGVyCisgKgorICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9saWIvdmVjdF90ZW1wbF91bmRlZi5oIGIvc3JjL2luY2x1ZGUvbGliL3Zl Y3RfdGVtcGxfdW5kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNTliNjlmMThiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvdmVj dF90ZW1wbF91bmRlZi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBGaWxlOiB2ZWN0X3Vu ZGVmLmgKKyAqLworCisjdW5kZWYgdmVjdF90CisjdW5kZWYgdW5pcXNvcnR2ZWN0X3QKKyN1 bmRlZiBpdGVtX3QKKworI3VuZGVmIFZFQ1RfSVRFTV9UWVBFCisjdW5kZWYgVkVDVF9NQVJL RVIKKyN1bmRlZiBWRUNUX0NwcENvbmNhdFRyaXBsZTIKKworI3VuZGVmIHZlY3RfaW5pdAor I3VuZGVmIHZlY3RfZmlsbAorI3VuZGVmIHZlY3RfcmVzZXJ2ZQorI3VuZGVmIHZlY3RfYXBw ZW5kCisjdW5kZWYgdmVjdF9wcmludAorI3VuZGVmIHZlY3RfY29tcGFyZQorI3VuZGVmIHZl Y3RfaW5zZXJ0CisjdW5kZWYgdmVjdF9jbGVhcgorCisjdW5kZWYgdXN2X2luc2VydAorI3Vu ZGVmIHVzdl9zZWFyY2gKKworI3VuZGVmIFZFQ1RfUFJJX0ZPUk1BVF9TUEVDSUZJRVIKXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIv dmVjdF91MTYuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGY4MWE0MTdmNAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisg KiBGaWxlOiB2ZWN0X3UxNi5oCisgKi8KKworI2lmbmRlZiBfVkVDVF9VMTZfSF8KKyNkZWZp bmUgX1ZFQ1RfVTE2X0hfCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJ2 ZWN0X3UxNl9jb25maWcuaCIKKyNpbmNsdWRlICJ2ZWN0X3RlbXBsLmgiCisvKiBjbGFuZy1m b3JtYXQgb24gKi8KKworLyoKKyAqIFR5cGVzIGFyZSBzdXBwb3NlZCB0byBiZSBjcmVhdGVk IGNyZWF0ZWQgYnkgdGhpcyBmaWxlCisgKiAgICAgdmVjdF91MTZfdAorICogICAgIGl0ZW1f dTE2X3QKKyAqICAgICB1bmlxc29ydHZlY3RfdTE2X3QKKyAqLworLyoKKyAqIEZ1bmN0aW9u cyBhcmUgc3VwcG9zZWQgdG8gYmUgY3JlYXRlZCBieSB0aGlzIGZpbGUKKyAqICAgICB2ZWN0 X3UxNl9jcmVhdGUKKyAqICAgICB2ZWN0X3UxNl9jcmVhdGVfZmlsbGVkCisgKiAgICAgdmVj dF91MTZfcmVzZXJ2ZQorICogICAgIHZlY3RfdTE2X2FwcGVuZAorICogICAgIHZlY3RfdTE2 X2Rlc3Ryb3kKKyAqICAgICB2ZWN0X3UxNl9wcmludAorICogICAgIHZlY3RfdTE2X2NvbXBh cmUKKyAqICAgICB2ZWN0X3UxNl9pbnNlcnQKKyAqICAgICB2ZWN0X3UxNl9jbGVhcgorICog ICAgIHVzdl91MTZfaW5zZXJ0CisgKiAgICAgdXN2X3UxNl9zZWFyY2gKKyAqLworCisjZW5k aWYgLy9fVkVDVF9VMTZfSF8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3Ux Nl9jb25maWcuaCBiL3NyYy9pbmNsdWRlL2xpYi92ZWN0X3UxNl9jb25maWcuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTNhOTMyODRlOGYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvdmVjdF91MTZfY29uZmlnLmgKQEAgLTAsMCAr MSwxMCBAQAorLyoKKyAqIEZpbGU6IHZlY3RfdTE2X2NvbmZpZy5oCisgKi8KKworI2RlZmlu ZSBWRUNUX0lURU1fVFlQRQkJCSAgIHVpbnQxNl90CisjZGVmaW5lIFZFQ1RfSVRFTV9GT1JN QVRfU1BFQ0lGSUVSIFBSSXUxNgorI2RlZmluZSBWRUNUX01BUktFUgkJCQkgICB1MTYKKyNk ZWZpbmUgVkVDVF9NRU1BTExPQ1NURVAJCSAgIDUKKyNkZWZpbmUgVkVDVF9NQUxMT0MJCQkJ ICAgbWFsbG9jCisjZGVmaW5lIFZFQ1RfRlJFRQkJCQkgICBmcmVlCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9NYWtlZmlsZSBiL3NyYy90ZXN0L01ha2VmaWxlCmluZGV4IDNlYjBhMDZhYmI0 Li5hYmE4ZGIxZjQ4MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvTWFrZWZpbGUKKysrIGIvc3Jj L3Rlc3QvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBTVUJESVJTID0gXAogCWF1dGhlbnRpY2F0aW9u IFwKKwlkZm9yIFwKIAlpc29sYXRpb24gXAogCW1vZHVsZXMgXAogCXBlcmwgXApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvZGZvci8uZ2l0aWdu b3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZDc3YTUxMjE2 YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZQpAQCAtMCww ICsxLDMgQEAKK3Rlc3RfYml0cGFja191MTYKK3Rlc3RfdW5pcXNvcnR2ZWN0X3UxNgordGVz dF92ZWN0X3UxNgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSBiL3NyYy90 ZXN0L2Rmb3IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjNiMmMwMzU5MjdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvZGZvci9NYWtl ZmlsZQpAQCAtMCwwICsxLDUzIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWxlOiBz cmMvdGVzdC9kZm9yL01ha2VmaWxlCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdWJkaXIg PSBzcmMvdGVzdC9kZm9yCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgorZGZvcl9kaXIgOj0g JCh0b3BfYnVpbGRkaXIpL3NyYy9iYWNrZW5kL2xpYgorCitpbmNsdWRlICQoZGZvcl9kaXIp L01ha2VmaWxlLmRmb3IKKworIyBFbnN1cmUgZGVwZW5kZW5jeSB0cmFja2luZyB3b3Jrcwor T0JKUyArPSAkKE9CSlNfREZPUikKKworaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01h a2VmaWxlLmdsb2JhbAorCitERVBESVIgPz0gLmRlcHMgIyBUaGlzIGZpeGVzIGEgcHJvYmxl bSBpbiBzb21lIENJIGpvYnMKKworIyBPYmplY3QgZmlsZXMgb2YgdmVjdCwgYml0cGFjayBh bmQgZGZvciB1c2VkIGJ5IHRoZXNlIHVuaXQtdGVzdHMgYXJlIGluIHRoZSBzYW1lCisjIGRp cmVjdG9yeSBhcyB0aGlzIE1ha2VmaWxlLiBUZXN0cyBkb24ndCB1c2Ugb25lcyBmcm9tIHNy Yy9iYWNrZW5kL2xpYiBhbmQgY29tcGlsZQorIyBkaWZmZXJlbnQgb25lcyBmb3IgdGhlbXNl bHZlcy4KKyQoaW5mbyBVc2UgT0JKU19ERk9SPSQoT0JKU19ERk9SKSBmcm9tIGN1cnJlbnQg ZGlyZWN0b3J5ICQoc3ViZGlyKS4gXAorICAgICAgIFRoZXkgYXJlIGJ1aWx0IG9uIHNvdXJj ZXMgZnJvbSAkKGRmb3JfZGlyKSkKKworJChPQkpTX0RGT1IpOiAlLm86ICQoZGZvcl9kaXIp LyUuYworCUBpZiB0ZXN0ICEgLWQgJChERVBESVIpOyB0aGVuIG1rZGlyIC1wICQoREVQRElS KTsgZmkKKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgLURGUk9OVEVORCBcCisJCS1j ICQ8IFwKKwkJLU1NRCAtTVAgLU1GICQoREVQRElSKS8kKG5vdGRpciAkPDouYz0uUG8pIFwK KwkJLW8gJEAKKworTElCVEFQX09CSlMgPSAkKHRvcF9idWlsZGRpcikvc3JjL3Rlc3QvbGli dGFwL3RhcC5vCisKK1RFU1RTPSB0ZXN0X3ZlY3RfdTE2IFwKKyAgICAgICB0ZXN0X3VuaXFz b3J0dmVjdF91MTYgXAorICAgICAgIHRlc3RfYml0cGFja191MTYKKworJChURVNUUzolPSUu byk6IENQUEZMQUdTICs9IC1JJCh0b3BfYnVpbGRkaXIpL3NyYy90ZXN0IC1ERlJPTlRFTkQK KworYWxsOiAkKFRFU1RTKQorCiskKFRFU1RTKTogJTogJS5vICQoTElCVEFQX09CSlMpICQo T0JKU19ERk9SKQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkXiAkKExERkxBR1Mp ICQoTElCUykgLW8gJEAkKFgpCisKK2NoZWNrLXVuaXQ6ICQoVEVTVFMpCisJZWNobyAiIyAr KysgVW5pdCB0ZXN0cyBpbiAkKHN1YmRpcikgKysrIiAmJiBcCisJY2QgJCh0b3BfYnVpbGRk aXIpLyQoc3ViZGlyKSAmJiBcCisJICAgJChQUk9WRSkgJChQUk9WRV9GTEFHUykgXAorCSAg ICAtdiAkKGFkZHByZWZpeCAuLywkKGlmICQoUFJPVkVfVEVTVFMpLCAkKFBST1ZFX1RFU1RT KSwgJChURVNUUykpKQorCitjaGVjazogY2hlY2stdW5pdAorCitjbGVhbiBkaXN0Y2xlYW46 CisJcm0gLXJmICQoVEVTVFMpICoubwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci9tZXNv bi5idWlsZCBiL3NyYy90ZXN0L2Rmb3IvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlNzYyYzUyNDMwCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvZGZvci9tZXNvbi5idWlsZApAQCAtMCwwICsxLDYyIEBACitkZm9yX2RpciA9 IGpvaW5fcGF0aHMobWVzb24ucHJvamVjdF9zb3VyY2Vfcm9vdCgpLCAnc3JjL2JhY2tlbmQv bGliJykKKworIyBPYmplY3QgZmlsZXMgb2YgdmVjdCwgYml0cGFjayBhbmQgZGZvciB1c2Vk IGJ5IHRoZXNlIHVuaXQtdGVzdHMgYXJlIGluIHRoZSBzYW1lCisjIGRpcmVjdG9yeSBhcyB0 aGlzIG1lc29uLmJ1aWxkLiBUZXN0cyBkb24ndCB1c2Ugb25lcyBmcm9tIHNyYy9iYWNrZW5k L2xpYiBhbmQKKyMgY29tcGlsZSBkaWZmZXJlbnQgb25lcyBmb3IgdGhlbXNlbHZlcy4gSW4g TWVzb24vTmluamEgYnVpbGQgc3lzdGVtIHdlIHVuaXRlCisjIHRoZW0gaW50byBhIHN0YXRp YyBsaWJyYXJ5LgorCitkZm9yX3NvdXJjZXMgPSBmaWxlcygKKyAgam9pbl9wYXRocyhkZm9y X2RpciwgJ3ZlY3RfdTE2LmMnKSwKKyAgam9pbl9wYXRocyhkZm9yX2RpciwgJ2JpdHBhY2tf dTE2LmMnKSwKKykKKworZGZvcl90ZXN0X2xpYiA9IHN0YXRpY19saWJyYXJ5KAorICAnZGZv cl90ZXN0X2xpYicsCisgIGRmb3Jfc291cmNlcywKKyAgaW5jbHVkZV9kaXJlY3Rvcmllczog WworICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4uLy4uLy4uJyksICMgdG9wX2J1aWxkZGly CisgICAgaW5jbHVkZV9kaXJlY3RvcmllcygnLi4vJyksICAgICAgIyBzcmMvdGVzdAorICAg IHBvc3RncmVzX2luYywgICAgICAgICAgICAgICAgICAgICMgc3JjL2luY2x1ZGUgaGVyZQor ICBdLAorICBjX2FyZ3M6IFsnLURGUk9OVEVORCddLAorKQorCisjIFdlIGFsc28gYnVpbGQg bGlidGFwIGFzIGEgc3RhdGljIGxpYnJhcnkKKworbGlidGFwID0gc3RhdGljX2xpYnJhcnko CisgICd0YXAnLAorICAnLi4vLi4vdGVzdC9saWJ0YXAvdGFwLmMnLAorICBpbmNsdWRlX2Rp cmVjdG9yaWVzOgorICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4uLy4uLy4uJyksICMgdG9w X2J1aWxkZGlyCispCisKKyMgRWFjaCB0ZXN0IGlzIGFuIEVMRiBleGVjdXRhYmxlCisKK3Rl c3RfbmFtZXMgPSBbCisgICd0ZXN0X3ZlY3RfdTE2JywKKyAgJ3Rlc3RfdW5pcXNvcnR2ZWN0 X3UxNicsCisgICd0ZXN0X2JpdHBhY2tfdTE2JywKK10KKworZm9yZWFjaCB0IDogdGVzdF9u YW1lcworICBleGUgPSBleGVjdXRhYmxlKAorICAgIHQsCisgICAgdCArICcuYycsCisgICAg bGlua193aXRoOiBbCisgICAgICBkZm9yX3Rlc3RfbGliLAorICAgICAgbGlidGFwLAorICAg ICAgY29tbW9uX3N0YXRpYywgIyBQcm92aWRlcyBwZ19wcmludGYgYW5kIG90aGVyIGNvbW1v biB1dGlsaXRpZXMKKyAgICAgIHBncG9ydF9zdGF0aWMsICAgICMgUHJvdmlkZXMgT1MtcG9y dGFiaWxpdHkgZnVuY3Rpb25zCisgICAgXSwKKwlkZXBlbmRlbmNpZXM6IFtvc19kZXBzLCBs aWJpbnRsXSwKKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbCisgICAgICBpbmNsdWRlX2Rp cmVjdG9yaWVzKCcuLi8uLi8uLicpLCAjIHRvcF9idWlsZGRpcgorICAgICAgaW5jbHVkZV9k aXJlY3RvcmllcygnLi4vJyksICAgICAgIyBzcmMvdGVzdAorICAgICAgcG9zdGdyZXNfaW5j LCAgICAgICAgICAgICAgICAgICAgIyBzcmMvaW5jbHVkZSBoZXJlCisgICAgXSwKKyAgICAj IEJhY2tlbmQgY29kZSBvZnRlbiByZXF1aXJlcyB0aGVzZSBhcmd1bWVudHMgdG8gaWRlbnRp ZnkgYXMgYmFja2VuZAorICAgIGNfYXJnczogWyctREZST05URU5EJ10sCisgICkKKworICB0 ZXN0KHQsIGV4ZSwgc3VpdGU6ICdkZm9yJykKK2VuZGZvcmVhY2gKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L2Rmb3IvdGVzdC5oIGIvc3JjL3Rlc3QvZGZvci90ZXN0LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2YzU0YWFkOTVmCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvZGZvci90ZXN0LmgKQEAgLTAsMCArMSwzMSBAQAorCisvKgorICog dGVzdC5oCisgKi8KKyNpZm5kZWYgX1RFU1RfSF8KKyNkZWZpbmUgX1RFU1RfSF8KKworI2lu Y2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RhdGljIGlubGlu ZSB2b2lkCit0ZXN0X3ByaW50X3U4X2FycmF5KHNpemVfdCBjbnQsIHVpbnQ4X3QgYXJyW10s IGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcHJpbnRmKCIlcyhoZXgpOiB7ICIsIG5hbWUpOwor CWZvciAoc2l6ZV90IGogPSAwOyBqIDwgY250IC0gMTsgaisrKQorCQlwcmludGYoIiUwMiIg UFJJeDggIiwgIiwgYXJyW2pdKTsKKworCXByaW50ZigiJTAyIiBQUkl4OCAiIH1cbiIsIGFy cltjbnQgLSAxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGVzdF9wcmludF91MTZf YXJyYXkoc2l6ZV90IGNudCwgdWludDE2X3QgYXJyW10sIGNvbnN0IGNoYXIgKm5hbWUpCit7 CisJcHJpbnRmKCIlcyhoZXgpOiB7ICIsIG5hbWUpOworCWZvciAoc2l6ZV90IGogPSAwOyBq IDwgY250IC0gMTsgaisrKQorCQlwcmludGYoIiUwNCIgUFJJeDE2ICIsICIsIGFycltqXSk7 CisKKwlwcmludGYoIiUwNCIgUFJJeDE2ICJ9XG4iLCBhcnJbY250IC0gMV0pOworfQorCisj ZW5kaWYgLyogX1RFU1RfSF8gKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9kZm9yL3Rlc3RfYml0cGFja191MTYuYyBiL3NyYy90ZXN0L2Rm b3IvdGVzdF9iaXRwYWNrX3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5kYTg0YmIyZjIyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2Rmb3Iv dGVzdF9iaXRwYWNrX3UxNi5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogdGVzdF9iaXRw YWNrLmMKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K KworI2luY2x1ZGUgImxpYi9iaXRwYWNrX3UxNi5oIgorI2luY2x1ZGUgImxpYi92ZWN0X3Ux Ni5oIgorI2luY2x1ZGUgImxpYnRhcC90YXAuaCIKKworaW50CittYWluKHZvaWQpCit7CisJ cGxhbigxOTUpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IE1BU0sgQU5EIFdJRFRIIENBTENVTEFUSU9O XG4iKTsKKwl7CisJCWNtcF9vaygxLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21f dmFsKDB4MDApLAorCQkJICAgIldpZHRoIG9mIDAwIGlzIGVxdWFsIHRvIDEgYml0LiIpOwor CQljbXBfb2soMiwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDAyKSwK KwkJCSAgICJXaWR0aCBvZiAwMiBpcyBlcXVhbCB0byAyIGJpdHMuIik7CisJCWNtcF9vaygy LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MDIpLAorCQkJICAgIldp ZHRoIG9mIDAyIGlzIGVxdWFsIHRvIDIgYml0cy4iKTsKKwkJY21wX29rKDIsICI9PSIsICh1 aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgwMyksCisJCQkgICAiV2lkdGggb2YgMDMg aXMgZXF1YWwgdG8gMiBiaXRzLiIpOworCQljbXBfb2soMywgIj09IiwgKHVpbnQxNl90KXdp ZHRoX3UxNl9mcm9tX3ZhbCgweDA0KSwKKwkJCSAgICJXaWR0aCBvZiAwNCBpcyBlcXVhbCB0 byAzIGJpdHMuIik7CisJCWNtcF9vaygzLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zy b21fdmFsKDB4MDUpLAorCQkJICAgIldpZHRoIG9mIDA1IGlzIGVxdWFsIHRvIDMgYml0cy4i KTsKKwkJY21wX29rKDQsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgw OCksCisJCQkgICAiV2lkdGggb2YgMDggaXMgZXF1YWwgdG8gNCBiaXRzLiIpOworCQljbXBf b2soNCwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDBBKSwKKwkJCSAg ICJXaWR0aCBvZiAxMCBpcyBlcXVhbCB0byA0IGJpdHMuIik7CisJCWNtcF9vayg0LCAiPT0i LCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFsKDB4MEYpLAorCQkJICAgIldpZHRoIG9m IDE1IGlzIGVxdWFsIHRvIDQgYml0cy4iKTsKKwkJY21wX29rKDUsICI9PSIsICh1aW50MTZf dCl3aWR0aF91MTZfZnJvbV92YWwoMHgxMCksCisJCQkgICAiV2lkdGggb2YgMTYgaXMgZXF1 YWwgdG8gNSBiaXRzLiIpOworCQljbXBfb2soNSwgIj09IiwgKHVpbnQxNl90KXdpZHRoX3Ux Nl9mcm9tX3ZhbCgweDFGKSwKKwkJCSAgICJXaWR0aCBvZiAzMSBpcyBlcXVhbCB0byA1IGJp dHMuIik7CisJCWNtcF9vayg2LCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X2Zyb21fdmFs KDB4MjApLAorCQkJICAgIldpZHRoIG9mIDMyIGlzIGVxdWFsIHRvIDYgYml0cy4iKTsKKwkJ Y21wX29rKDcsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHg0MCksCisJ CQkgICAiV2lkdGggb2YgNjQgaXMgZXF1YWwgdG8gNyBiaXRzLiIpOworCQljbXBfb2soOCwg Ij09IiwgKHVpbnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDgwKSwKKwkJCSAgICJXaWR0 aCBvZiAxMjggaXMgZXF1YWwgdG8gOCBiaXRzLiIpOworCQljbXBfb2soMTMsICI9PSIsICh1 aW50MTZfdCl3aWR0aF91MTZfZnJvbV92YWwoMHgxMDAwKSwKKwkJCSAgICJXaWR0aCBvZiAw eDAxMDAwIGlzIGVxdWFsIHRvIDEzIGJpdHMuIik7CisJCWNtcF9vaygxNiwgIj09IiwgKHVp bnQxNl90KXdpZHRoX3UxNl9mcm9tX3ZhbCgweDhBQkMpLAorCQkJICAgIldpZHRoIG9mIDB4 MDhBQkMgaXMgZXF1YWwgdG8gMTUgYml0cy4iKTsKKworCQljbXBfb2soMHgxLCAiPT0iLCAo dWludDE2X3Qpd2lkdGhfdTE2X3RvX21hc2soMSksCisJCQkgICAiTWFzayBmcm9tIHdpZHRo IDEgaXMgMDAwMDAwMDEoYmluKS4iKTsKKwkJY21wX29rKDB4MywgIj09IiwgKHVpbnQxNl90 KXdpZHRoX3UxNl90b19tYXNrKDIpLAorCQkJICAgIk1hc2sgZnJvbSB3aWR0aCAyIGlzIDAw MDAwMDExKGJpbikuIik7CisJCWNtcF9vaygweDcsICI9PSIsICh1aW50MTZfdCl3aWR0aF91 MTZfdG9fbWFzaygzKSwKKwkJCSAgICJNYXNrIGZyb20gd2lkdGggMyBpcyAwMDAwMDExMShi aW4pLiIpOworCQljbXBfb2soMHgzRkYsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfdG9f bWFzaygxMCksCisJCQkgICAiTWFzayBmcm9tIHdpZHRoIDEwIGlzIDB4M0ZGKGJpbikuIik7 CisJCWNtcF9vaygweDdGRkYsICI9PSIsICh1aW50MTZfdCl3aWR0aF91MTZfdG9fbWFzaygx NSksCisJCQkgICAiTWFzayBmcm9tIHdpZHRoIDE1IGlzIDB4N0ZGRihiaW4pLiIpOworCQlj bXBfb2soMHhGRkZGLCAiPT0iLCAodWludDE2X3Qpd2lkdGhfdTE2X3RvX21hc2soMTYpLAor CQkJICAgIk1hc2sgZnJvbSB3aWR0aCAxNiBpcyAweEZGRkYoYmluKS4iKTsKKwl9CisJcHJp bnRmKCJUZXN0IE1BU0sgQU5EIFdJRFRIIENBTENVTEFUSU9OIFBBU1NFRFxuIik7CisJcHJp bnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOwor CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4i KTsKKwlwcmludGYoIlRlc3QgQklUUEFDSyBQQUNLSU5HXG4iKTsKKwl7CisjZGVmaW5lIFNJ WkVPRlBBQ0sgNjBVCisJCXVpbnQ4X3QgcGFja1tTSVpFT0ZQQUNLXTsKKwkJc2l6ZV90IGNh cmV0ID0gMDsKKwkJbWVtc2V0KHBhY2ssIDAsIFNJWkVPRlBBQ0spOworCQkvKgorCQkgKiBT aW5jZSB3ZSBpbXBsZW1lbnRlZCB0aGUgbnVsaWZ5aW5nIG9mIGJpdHMgYWNjb3JkaW5nIHRv IGEgbWFzayAoc2VlCisJCSAqIHRoZSBiaXRwYWNrIGZ1bmN0aW9uKSwgd2UgY2FuIHVzZSBl dmVuIGEgcGFjayBub3QgcHJlcGFyZWQgaW4gYWR2YW5jZQorCQkgKiBhbmQgY29tcHJpc2lu ZyBnYXJiYWdlLiBCdXQgd2Ugd2FudCB0byBjaGVjayB2YWx1ZSBvZiBlYWNoIGJ5dGUgb2YK KwkJICogdGhlIHBhY2sgaW4gdGhpcyB0ZXN0IGFuZCB3ZSBzaW1wbGlmeSB0aGlzIHRhc2sg YnkgdXNpbmcgYSB6ZXJvZWQKKwkJICogcGFjay4KKwkJICovCisKKwkJZm9yIChpbnQgaiA9 IDA7IGogPCA4OyBqKyspIHsKKwkJCWNhcmV0ID0gYml0cGFja191MTZfcGFjayhwYWNrLCBj YXJldCwgMSwgMSk7CisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQs IDAsIDEpOworCQl9CisJCWNtcF9vaygxNiwgIj09IiwgY2FyZXQsICJDYXJldCA9IDE2LiIp OworCQljbXBfb2soMHg1NSwgIj09IiwgcGFja1swXSwgIlNhdmVkIGJpdC1ieS1iaXQ6IGZp cnN0IGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBhY2tbMV0sICJT YXZlZCBiaXQtYnktYml0OiBzZWNvbmQgYnl0ZSBpcyAweDU1LiIpOworCisJCWZvciAoaW50 IGogPSAwOyBqIDwgODsgaisrKSB7CisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFj aywgY2FyZXQsIDB4MDIgLyogMTAoYmluKSAqLywgMik7CisJCX0KKworCQljbXBfb2soMzIs ICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAzMi4iKTsKKwkJY21wX29rKDB4QUEsICI9PSIsIHBh Y2tbMl0sCisJCQkgICAiU2F2ZWQgd2l0aCB0d28tYml0IHdpZHRoOiBmaXJzdCBieXRlIGlz IDB4QUEuIik7CisJCWNtcF9vaygweEFBLCAiPT0iLCBwYWNrWzNdLAorCQkJICAgIlNhdmVk IHdpdGggdHdvLWJpdCB3aWR0aDogc2Vjb25kIGJ5dGUgaXMgMHhBQS4iKTsKKworCQlmb3Ig KGludCBqID0gMDsgaiA8IDg7IGorKykgeworCQkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNr KHBhY2ssIGNhcmV0LCAweDA1IC8qIDEwMShiaW4pICovLCAzKTsKKwkJCWNhcmV0ID0gYml0 cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgwMiAvKiAwMTAoYmluKSAqLywgMyk7CisJ CX0KKworCQljbXBfb2soODAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA4MC4iKTsKKwkJY21w X29rKDB4NTUsICI9PSIsIHBhY2tbNF0sCisJCQkgICAiU2F2ZWQgd2l0aCB0aHJlZS1iaXQg d2lkdGg6IGZpcnN0IGJ5dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBh Y2tbNV0sCisJCQkgICAiU2F2ZWQgd2l0aCB0aHJlZS1iaXQgd2lkdGg6IHNlY29uZCBieXRl IGlzIDB4NTUuIik7CisJCWNtcF9vaygweDU1LCAiPT0iLCBwYWNrWzZdLAorCQkJICAgIlNh dmVkIHdpdGggdGhyZWUtYml0IHdpZHRoOiBzZWNvbmQgYnl0ZSBpcyAweDU1LiIpOworCQlj bXBfb2soMHg1NSwgIj09IiwgcGFja1s3XSwKKwkJCSAgICJTYXZlZCB3aXRoIHRocmVlLWJp dCB3aWR0aDogZmlyc3QgYnl0ZSBpcyAweDU1LiIpOworCQljbXBfb2soMHg1NSwgIj09Iiwg cGFja1s4XSwKKwkJCSAgICJTYXZlZCB3aXRoIHRocmVlLWJpdCB3aWR0aDogc2Vjb25kIGJ5 dGUgaXMgMHg1NS4iKTsKKwkJY21wX29rKDB4NTUsICI9PSIsIHBhY2tbOV0sCisJCQkgICAi U2F2ZWQgd2l0aCB0aHJlZS1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlzIDB4NTUuIik7CisK KwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBCLCA0KTsKKwkJ Y2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBDLCA0KTsKKwkJY2Fy ZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBELCA0KTsKKwkJY2FyZXQg PSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDBFLCA0KTsKKworCQljbXBfb2so OTYsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA5Ni4iKTsKKwkJY21wX29rKDB4Q0IsICI9PSIs IHBhY2tbMTBdLAorCQkJICAgIlNhdmVkIHdpdGggZm91ci1iaXQgd2lkdGg6IGZpcnN0IGJ5 dGUgaXMgMHhDQi4iKTsKKwkJY21wX29rKDB4RUQsICI9PSIsIHBhY2tbMTFdLAorCQkJICAg IlNhdmVkIHdpdGggZm91ci1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlzIDB4RUQuIik7CisK KwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWNhcmV0ID0gYml0cGFja191 MTZfcGFjayhwYWNrLCBjYXJldCwgMHgwNyAvKiAwMDExMWIgKi8sIDUpOworCQl9CisKKwkJ Y21wX29rKDEzNiwgIj09IiwgY2FyZXQsICJDYXJldCA9IDEzNi4iKTsKKwkJY21wX29rKDB4 RTcsICI9PSIsIHBhY2tbMTJdLAorCQkJICAgIlNhdmVkIHdpdGggZml2ZS1iaXQgd2lkdGg6 IGZpcnN0IGJ5dGUgaXMgMHhFNy4iKTsKKwkJY21wX29rKDB4OUMsICI9PSIsIHBhY2tbMTNd LAorCQkJICAgIlNhdmVkIHdpdGggZml2ZS1iaXQgd2lkdGg6IHNlY29uZCBieXRlIGlzIDB4 OUMuIik7CisJCWNtcF9vaygweDczLCAiPT0iLCBwYWNrWzE0XSwKKwkJCSAgICJTYXZlZCB3 aXRoIGZpdmUtYml0IHdpZHRoOiB0aGlyZCBieXRlIGlzIDB4NzMuIik7CisJCWNtcF9vaygw eENFLCAiPT0iLCBwYWNrWzE1XSwKKwkJCSAgICJTYXZlZCB3aXRoIGZpdmUtYml0IHdpZHRo OiBmb3VydGggYnl0ZSBpcyAweENFLiIpOworCQljbXBfb2soMHgzOSwgIj09IiwgcGFja1sx Nl0sCisJCQkgICAiU2F2ZWQgd2l0aCBmaXZlLWJpdCB3aWR0aDogZmlmdGggYnl0ZSBpcyAw eDM5LiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorCQkJY2FyZXQgPSBi aXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweDA3IC8qIDAwMDExMWIgKi8sIDYpOwor CisJCWNtcF9vaygxNjAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAxNjAuIik7CisJCWNtcF9v aygweEM3LCAiPT0iLCBwYWNrWzE3XSwKKwkJCSAgICJTYXZlZCB3aXRoIHNpeC1iaXQgd2lk dGg6IGZpcnN0IGJ5dGUgaXMgMHhDNy4iKTsKKwkJY21wX29rKDB4NzEsICI9PSIsIHBhY2tb MThdLAorCQkJICAgIlNhdmVkIHdpdGggc2l4LWJpdCB3aWR0aDogc2Vjb25kIGJ5dGUgaXMg MHg3MS4iKTsKKwkJY21wX29rKDB4MUMsICI9PSIsIHBhY2tbMTldLAorCQkJICAgIlNhdmVk IHdpdGggc2l4LWJpdCB3aWR0aDogdGhpcmQgYnl0ZSBpcyAweDFDLiIpOworCisJCWZvciAo aW50IGogPSAwOyBqIDwgODsgaisrKQorCQkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBh Y2ssIGNhcmV0LCAweDU3IC8qIDEwMTAxMTFiICovLCA3KTsKKworCQljbXBfb2soMjE2LCAi PT0iLCBjYXJldCwgIkNhcmV0ID0gMjE2LiIpOworCQljbXBfb2soMHhENywgIj09IiwgcGFj a1syMF0sCisJCQkgICAiU2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6IGJ5dGUxIGlzIDB4 RDcuIik7CisJCWNtcF9vaygweEVCLCAiPT0iLCBwYWNrWzIxXSwKKwkJCSAgICJTYXZlZCB3 aXRoIHNldmVuLWJpdCB3aWR0aDogYnl0ZTIgaXMgMHhFQi4iKTsKKwkJY21wX29rKDB4RjUs ICI9PSIsIHBhY2tbMjJdLAorCQkJICAgIlNhdmVkIHdpdGggc2V2ZW4tYml0IHdpZHRoOiBi eXRlMyBpcyAweEY1LiIpOworCQljbXBfb2soMHg3QSwgIj09IiwgcGFja1syM10sCisJCQkg ICAiU2F2ZWQgd2l0aCBzZXZlbi1iaXQgd2lkdGg6IGJ5dGU0IGlzIDB4N0EuIik7CisJCWNt cF9vaygweEJELCAiPT0iLCBwYWNrWzI0XSwKKwkJCSAgICJTYXZlZCB3aXRoIHNldmVuLWJp dCB3aWR0aDogYnl0ZTUgaXMgMHhCRC4iKTsKKwkJY21wX29rKDB4NUUsICI9PSIsIHBhY2tb MjVdLAorCQkJICAgIlNhdmVkIHdpdGggc2V2ZW4tYml0IHdpZHRoOiBieXRlNiBpcyAweDVF LiIpOworCQljbXBfb2soMHhBRiwgIj09IiwgcGFja1syNl0sCisJCQkgICAiU2F2ZWQgd2l0 aCBzZXZlbi1iaXQgd2lkdGg6IGJ5dGU3IGlzIDB4QUYuIik7CisKKwkJY2FyZXQgPSBiaXRw YWNrX3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweEJBLCA4KTsKKwkJY2FyZXQgPSBiaXRwYWNr X3UxNl9wYWNrKHBhY2ssIGNhcmV0LCAweERDLCA4KTsKKwkJY2FyZXQgPSBiaXRwYWNrX3Ux Nl9wYWNrKHBhY2ssIGNhcmV0LCAweEZFLCA4KTsKKworCQljbXBfb2soMjQwLCAiPT0iLCBj YXJldCwgIkNhcmV0ID0gMjQwLiIpOworCQljbXBfb2soMHhCQSwgIj09IiwgcGFja1syN10s CisJCQkgICAiU2F2ZWQgd2l0aCBlaWdodC1iaXQgd2lkdGg6IGJ5dGUxIGlzIDB4QkEuIik7 CisJCWNtcF9vaygweERDLCAiPT0iLCBwYWNrWzI4XSwKKwkJCSAgICJTYXZlZCB3aXRoIGVp Z2h0LWJpdCB3aWR0aDogYnl0ZTIgaXMgMHhEQy4iKTsKKwkJY21wX29rKDB4RkUsICI9PSIs IHBhY2tbMjldLAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQtYml0IHdpZHRoOiBieXRlMyBp cyAweEZFLiIpOworCisJCWNhcmV0ID0gYml0cGFja191MTZfcGFjaygKKwkJCXBhY2ssIGNh cmV0LCAweDAwLAorCQkJNCk7IC8qIG1vdmUgdG8gNCBiaXQgZm9yIGZ1biBhbmQgYWdhaW4g Y29udGludWUgd2l0aCA4LWJpdCB3aWR0aCAqLworCQljYXJldCA9IGJpdHBhY2tfdTE2X3Bh Y2socGFjaywgY2FyZXQsIDB4MzIsIDgpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2so cGFjaywgY2FyZXQsIDB4NTQsIDgpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFj aywgY2FyZXQsIDB4NzYsIDgpOworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywg Y2FyZXQsIDB4OTgsIDgpOworCisJCWNtcF9vaygyNzYsICI9PSIsIGNhcmV0LCAiQ2FyZXQg PSAyNzYuIik7CisJCWNtcF9vaygweDIwLCAiPT0iLCBwYWNrWzMwXSwKKwkJCSAgICJTYXZl ZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBidXQgc2hpZnRlZCBieSA0OiBpcyAweDIwLiIpOwor CQljbXBfb2soMHg0MywgIj09IiwgcGFja1szMV0sCisJCQkgICAiU2F2ZWQgd2l0aCBlaWdo dC1iaXQgd2lkdGggYnV0IHNoaWZ0ZWQgYnkgNDogaXMgMHg0My4iKTsKKwkJY21wX29rKDB4 NjUsICI9PSIsIHBhY2tbMzJdLAorCQkJICAgIlNhdmVkIHdpdGggZWlnaHQtYml0IHdpZHRo IGJ1dCBzaGlmdGVkIGJ5IDQ6IGlzIDB4NjUuIik7CisJCWNtcF9vaygweDg3LCAiPT0iLCBw YWNrWzMzXSwKKwkJCSAgICJTYXZlZCB3aXRoIGVpZ2h0LWJpdCB3aWR0aCBidXQgc2hpZnRl ZCBieSA0OiBpcyAweDg3LiIpOworCQljbXBfb2soMHgwOSwgIj09IiwgcGFja1szNF0sCisJ CQkgICAiU2F2ZWQgd2l0aCBlaWdodC1iaXQgd2lkdGggYnV0IHNoaWZ0ZWQgYnkgNDogaXMg MHgwOS4iKTsKKworCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2soCisJCQlwYWNrLCBjYXJl dCwgMHgwMCwKKwkJCTQpOyAvKiBtb3ZlIHRvIDQgYml0IGZvciBmdW4gYW5kIGFnYWluIGNv bnRpbnVlIHdpdGggOC1iaXQgd2lkdGggKi8KKwkJY21wX29rKDI4MCwgIj09IiwgY2FyZXQs ICJDYXJldCA9IDI4MC4iKTsKKwkJY21wX29rKDB4MDksICI9PSIsIHBhY2tbMzRdLAorCQkJ ICAgIkFkZGVkIHBhZGRpbmcgMHgwLCB3aWR0aD00LiBCeXRlIGluIHBhY2sgaXMgc3RpbGwg MHgwOS4iKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKKwkJCWNhcmV0ID0g Yml0cGFja191MTZfcGFjayhwYWNrLCBjYXJldCwgMHgxNjcxIC8qIDEwMTEwMDExMTAwMDFi ICovLAorCQkJCQkJCQkJIDEzKTsKKworCQljbXBfb2soMzE5LCAiPT0iLCBjYXJldCwgIkNh cmV0ID0gMzE5LiIpOworCQljbXBfb2soMHg3MSwgIj09IiwgcGFja1szNV0sICJTYXZlZCB3 aXRoIHRoaXJ0ZWVuLWJpdCB3aWR0aDogaXMgMHg3MS4iKTsKKwkJY21wX29rKDB4MzYsICI9 PSIsIHBhY2tbMzZdLCAiU2F2ZWQgd2l0aCB0aGlydGVlbi1iaXQgd2lkdGg6IGlzIDB4MzYu Iik7CisJCWNtcF9vaygweENFLCAiPT0iLCBwYWNrWzM3XSwgIlNhdmVkIHdpdGggdGhpcnRl ZW4tYml0IHdpZHRoOiBpcyAweENFLiIpOworCQljbXBfb2soMHhDNiwgIj09IiwgcGFja1sz OF0sICJTYXZlZCB3aXRoIHRoaXJ0ZWVuLWJpdCB3aWR0aDogaXMgMHhDNi4iKTsKKwkJY21w X29rKDB4NTksICI9PSIsIHBhY2tbMzldLCAiU2F2ZWQgd2l0aCB0aGlydGVlbi1iaXQgd2lk dGg6IGlzIDB4NTkuIik7CisKKwkJY2FyZXQgPSBiaXRwYWNrX3UxNl9wYWNrKHBhY2ssIGNh cmV0LCAweDEgLyogUEFERElORyAqLywgMSk7CisJCWNtcF9vaygzMjAsICI9PSIsIGNhcmV0 LCAiQ2FyZXQgPSAzMjAuIik7CisJCWNtcF9vaygweEQ5LCAiPT0iLCBwYWNrWzM5XSwKKwkJ CSAgICJBZnRlciBwYWRkaW5nIHdpdGggMHgwMSwgdz0xOiAweDU5IC0+IDB4RDkuIik7CisK KwkJZm9yIChpbnQgaiA9IDA7IGogPCA1OyBqKyspCisJCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2socGFjaywgY2FyZXQsIDB4Q0RFRiwgMTYpOworCisJCWNtcF9vayg0MDAsICI9PSIs IGNhcmV0LCAiQ2FyZXQgPSA0MDAuIik7CisJCWZvciAoaW50IGkgPSA0MDsgaSA8IDUwOykg eworCQkJY21wX29rKDB4RUYsICI9PSIsIHBhY2tbaSsrXSwgIlBhY2tlZCB3aXRoIHdpZHRo PTE2LiAweEVGLiIpOworCQkJY21wX29rKDB4Q0QsICI9PSIsIHBhY2tbaSsrXSwgIlBhY2tl ZCB3aXRoIHdpZHRoPTE2LiAweEMuIik7CisJCX0KKworCQljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2socGFjaywgY2FyZXQsCisJCQkJCQkJCSAweDAgLyogUEFERElORyBpbiBvcmRlciB0 byBzaGlmdCBieSAxIGJpdCovLAorCQkJCQkJCQkgMSk7CisJCWNtcF9vayg0MDEsICI9PSIs IGNhcmV0LCAiQ2FyZXQgPSA0MDEuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCAzOyBq KyspCisJCQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2socGFjaywgY2FyZXQsIDB4NTU1NSwg MTYpOworCisJCWNtcF9vayg0NDksICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSA0MDEuIik7CisJ CWZvciAoaW50IGkgPSA1MDsgaSA8IDU2OykKKwkJCWNtcF9vaygweEFBLCAiPT0iLCBwYWNr W2krK10sCisJCQkJICAgIjE2LWJpdCB2YWx1ZSBzYXZlZCB3aXRoIHNoaWZ0IGJ5IDEgYml0 IDB4NTUtPjB4QUEuIik7CisKKwkJY21wX29rKDB4MCwgIj09IiwgcGFja1s1Nl0sICIxIGhp Z2hlciBiaXQgaXMgYWxvbmUgLiIpOworCisJCXByaW50ZigiVGVzdCBCSVRQQUNLIFBBQ0tJ TkcgUEFTU0VEXG4iKTsKKwkJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG5cbiIpOworCisJCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PVxuIik7CisJCXByaW50ZigiVGVzdCBCSVRQQUNLIFVOUEFD S0lOR1xuIik7CisKKwkJY2FyZXQgPSAwOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgODsg aisrKSB7CisJCQljbXBfb2soMHgwMSwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ss ICZjYXJldCwgMSkpOworCQkJY21wX29rKDB4MDAsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFj ayhwYWNrLCAmY2FyZXQsIDEpKTsKKwkJfQorCQljbXBfb2soY2FyZXQsICI9PSIsIDE2KTsK KworCQlmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykKKwkJCWNtcF9vaygweDAyLCAiPT0i LCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCAyKSk7CisKKwkJY21wX29rKDMy LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMzIuIik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGog PCA4OyBqKyspIHsKKwkJCWNtcF9vaygweDA1LCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2so cGFjaywgJmNhcmV0LCAzKSk7CisJCQljbXBfb2soMHgwMiwgIj09IiwgYml0cGFja191MTZf dW5wYWNrKHBhY2ssICZjYXJldCwgMykpOworCQl9CisJCWNtcF9vayg4MCwgIj09IiwgY2Fy ZXQsICJDYXJldCA9IDgwLiIpOworCisJCWNtcF9vaygweDBCLCAiPT0iLCBiaXRwYWNrX3Ux Nl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNtcF9vaygweDBDLCAiPT0iLCBiaXRw YWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNtcF9vaygweDBELCAiPT0i LCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisJCWNtcF9vaygweDBF LCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA0KSk7CisKKwkJY21w X29rKDk2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gOTYuIik7CisKKwkJZm9yIChpbnQgaiA9 IDA7IGogPCA4OyBqKyspCisJCQljbXBfb2soMHgwNywgIj09IiwgYml0cGFja191MTZfdW5w YWNrKHBhY2ssICZjYXJldCwgNSksCisJCQkJICAgIndpZHRoPTUsIHZhbD0wMDExMWIiKTsK KworCQljbXBfb2soMTM2LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gMTM2LiIpOworCisJCWZv ciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorCQkJY21wX29rKDB4MDcsICI9PSIsIGJpdHBh Y2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDYpLAorCQkJCSAgICJ3aWR0aD02LCB2YWw9 MDAwMTExYiIpOworCisJCWNtcF9vaygxNjAsICI9PSIsIGNhcmV0LCAiQ2FyZXQgPSAxNjAu Iik7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCA4OyBqKyspCisJCQljbXBfb2soMHg1Nywg Ij09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNyksCisJCQkJICAgIndp ZHRoPTcsIHZhbD0xMDEwMTExYiAoMHg1NykiKTsKKworCQljbXBfb2soMjE2LCAiPT0iLCBj YXJldCwgIkNhcmV0ID0gMjE2LiIpOworCisJCWNtcF9vaygweEJBLCAiPT0iLCBiaXRwYWNr X3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJCSAgICJ3aWR0aD04LCB2YWw9MHhC QSIpOworCQljbXBfb2soMHhEQywgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZj YXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4REMiKTsKKwkJY21wX29rKDB4RkUs ICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDgpLAorCQkJICAgIndp ZHRoPTgsIHZhbD0weEZFIik7CisKKwkJY21wX29rKDI0MCwgIj09IiwgY2FyZXQsICJDYXJl dCA9IDI0MC4iKTsKKworCQljbXBfb2soMHgwLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBhY2so cGFjaywgJmNhcmV0LCA0KSwKKwkJCSAgICJ3aWR0aD00LCB2YWw9MHgwLCBmb3IgZnVuIik7 CisKKwkJY21wX29rKDB4MzIsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2Fy ZXQsIDgpLAorCQkJICAgIndpZHRoPTgsIHZhbD0weDMyIik7CisJCWNtcF9vaygweDU0LCAi PT0iLCBiaXRwYWNrX3UxNl91bnBhY2socGFjaywgJmNhcmV0LCA4KSwKKwkJCSAgICJ3aWR0 aD04LCB2YWw9MHg1NCIpOworCQljbXBfb2soMHg3NiwgIj09IiwgYml0cGFja191MTZfdW5w YWNrKHBhY2ssICZjYXJldCwgOCksCisJCQkgICAid2lkdGg9OCwgdmFsPTB4NzYiKTsKKwkJ Y21wX29rKDB4OTgsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhwYWNrLCAmY2FyZXQsIDgp LAorCQkJICAgIndpZHRoPTgsIHZhbD0weDk4Iik7CisKKwkJY21wX29rKDB4MCwgIj09Iiwg Yml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgNCksCisJCQkgICAid2lkdGg9NCwg dmFsPTB4MCwgZm9yIGZ1biBwYWRkaW5nIGFnYWluIik7CisKKwkJZm9yIChpbnQgaiA9IDA7 IGogPCAzOyBqKyspCisJCQljbXBfb2soMHgxNjcxLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBh Y2socGFjaywgJmNhcmV0LCAxMyksCisJCQkJICAgIndpZHRoPTEzLCB2YWw9MHgxNjcxICgx MDExMDAxMTEwMDAxYikiKTsKKworCQljbXBfb2soMzE5LCAiPT0iLCBjYXJldCwgIkNhcmV0 ID0gMzE5LiIpOworCisJCWNtcF9vaygweDEsICI9PSIsIGJpdHBhY2tfdTE2X3VucGFjayhw YWNrLCAmY2FyZXQsIDEpLAorCQkJICAgIndpZHRoPTEsIHZhbD0weDEiKTsKKwkJY21wX29r KDMyMCwgIj09IiwgY2FyZXQsICJDYXJldCA9IDMyMC4iKTsKKworCQlmb3IgKGludCBqID0g MDsgaiA8IDU7IGorKykKKwkJCWNtcF9vaygweENERUYsICI9PSIsIGJpdHBhY2tfdTE2X3Vu cGFjayhwYWNrLCAmY2FyZXQsIDE2KSwKKwkJCQkgICAiMTgtYml0IHZhbHVlIGFsbGlnbmVk IHdpdGggYnl0ZXMgaW4gcGFjay4iKTsKKworCQljbXBfb2soNDAwLCAiPT0iLCBjYXJldCwg IkNhcmV0ID0gNDAwLiIpOworCQljbXBfb2soMHgwLCAiPT0iLCBiaXRwYWNrX3UxNl91bnBh Y2socGFjaywgJmNhcmV0LCAxKSwKKwkJCSAgICIxLWJpdCB3aWR0aCB2YWx1ZSAocGFkZGlu ZyBmb3Igc2hpZnQpLiIpOworCQljbXBfb2soNDAxLCAiPT0iLCBjYXJldCwgIkNhcmV0ID0g NDAxLiIpOworCisJCWZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQorCQkJY21wX29rKDB4 NTU1NSwgIj09IiwgYml0cGFja191MTZfdW5wYWNrKHBhY2ssICZjYXJldCwgMTYpLAorCQkJ CSAgICIxNi1iaXQgd2lkdGggdmFsdWUgc2hpZnRlZCBieSAxIGJpdC4iKTsKKworCQljbXBf b2soNDQ5LCAiPT0iLCBjYXJldCwgIkNhcmV0ID0gNDQ5LiIpOworCX0KKworCWRvbmVfdGVz dGluZygpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci90ZXN0X3VuaXFzb3J0dmVj dF91MTYuYyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF91bmlxc29ydHZlY3RfdTE2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRkZGNlOGIwYjNkCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvZGZvci90ZXN0X3VuaXFzb3J0dmVjdF91MTYuYwpAQCAt MCwwICsxLDI2MyBAQAorLyoKKyAqIHRlc3RfdW5pcXNvcnR2ZWN0LmMKKyAqLworCisjaW5j bHVkZSAibGliL3ZlY3RfdTE2LmgiCisjaW5jbHVkZSAibGlidGFwL3RhcC5oIgorCitpbnQg dGVzdF91c3Yoc2l6ZV90IHNyY19jbnQsIHVpbnQxNl90ICpzcmNfaW4sIHNpemVfdCBleHBl Y3RlZF9jbnQsCisJCQkgdWludDE2X3QgKmV4cGVjdGVkX2luKTsKKworaW50Cit0ZXN0X3Vz dihzaXplX3Qgc3JjX2NudCwgdWludDE2X3QgKnNyY19pbiwgc2l6ZV90IGV4cGVjdGVkX2Nu dCwKKwkJIHVpbnQxNl90ICpleHBlY3RlZF9pbikKK3sKKwlpbnQgcmVzdWx0ID0gLTE7CisJ dmVjdF91MTZfdCBzcmM7CisJdmVjdF91MTZfdCBleHBlY3RlZDsKKwl1bmlxc29ydHZlY3Rf dTE2X3QgeDsKKworCXZlY3RfdTE2X2luaXQoJnNyYywgc3JjX2NudCwgTlVMTCk7CisJdmVj dF91MTZfZmlsbCgmc3JjLCBzcmNfY250LCBzcmNfaW4pOworCisJdmVjdF91MTZfaW5pdCgm ZXhwZWN0ZWQsIDAsIE5VTEwpOworCXZlY3RfdTE2X2ZpbGwoJmV4cGVjdGVkLCBleHBlY3Rl ZF9jbnQsIGV4cGVjdGVkX2luKTsKKworCXZlY3RfdTE2X2luaXQoJngsIDAsIE5VTEwpOwor CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCisJCXVzdl91MTZfaW5z ZXJ0KCZ4LCBzcmMubVtpXSk7CisKKwlyZXN1bHQgPSB2ZWN0X3UxNl9jb21wYXJlKCZ4LCAm ZXhwZWN0ZWQpOworCisJdmVjdF91MTZfY2xlYXIoJngpOworCXZlY3RfdTE2X2NsZWFyKCZl eHBlY3RlZCk7CisJdmVjdF91MTZfY2xlYXIoJnNyYyk7CisJcmV0dXJuIHJlc3VsdDsKK30K KworaW50CittYWluKHZvaWQpCit7CisJcGxhbig1Nik7CisKKwlwcmludGYoIj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBD UkVBVEUgQU5EIERFU1RST1kgU09SVEVEIFVOSVFVRSBWRUNUT1IgKEVNUFRZKVxuIik7CisJ eworCQl1bmlxc29ydHZlY3RfdTE2X3QgdXN2OworCQlzaXplX3QgY2FwYWNpdHkgPSAxMDsK KwkJdmVjdF91MTZfaW5pdCgmdXN2LCBjYXBhY2l0eSwgTlVMTCk7CisJCWNtcF9vayh1c3Yu Y2FwLCAiPT0iLCBjYXBhY2l0eSwKKwkJCSAgICJWZWN0b3JzIGNhcGFjaXR5IGlzIGVxdWFs IHRvIHJlcXVlc3RlZCBvbmUiKTsKKwkJY21wX29rKHVzdi5jbnQsICI9PSIsIDAsICJObyBt ZW1iZXJzIGluIHZlY3RvciIpOworCQlvayh1c3YubSAhPSBOVUxMLCAiQXJyYXkgZm9yIG1l bWJlcnMgaXMgcmVzZXJ2ZWQiKTsKKworCQl2ZWN0X3UxNl9jbGVhcigmdXN2KTsKKwl9CisJ cHJpbnRmKCJUZXN0IENSRUFURSBBTkQgREVTVFJPWSBTT1JURUQgVU5JUVVFIFZFQ1RPUiAo RU1QVFkpIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgU0VBUkNIIElOIFVO SVFVRSBTT1JUIFZFQ1RcbiIpOworCXsKKwkJdW5pcXNvcnR2ZWN0X3UxNl90IHVzdjsKKwkJ dXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwkJdWludDE2X3QgaW5wdXRbNF0gPSB7IDUsIDEwLCAy MCwgMzAgfTsKKworCQl2ZWN0X3UxNl9pbml0KCZ1c3YsIDAsIE5VTEwpOworCisJCWZvciAo c2l6ZV90IGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJdXN2X3UxNl9pbnNlcnQoJnVzdiwgaW5w dXRbaV0pOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAwKTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCwKKwkJCSAgICJO b3QgZm91bmQsIHNtYWxsZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMCwgIlBv cyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAxKTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORF9TTUFMTEVTVCwKKwkJCSAgICJO b3QgZm91bmQsIHNtYWxsZXN0Iik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMCwgIlBv cyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCA1KTsKKwkJY21wX29r KHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNy Y2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNo KCZ1c3YsIDYpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5E LCAiTm90IGZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMSwgIlBvcyA9MSIp OworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAxMCk7CisJCWNtcF9vayhzcmNo LnN0LCAiPT0iLCBVU1ZfU1JDSF9GT1VORCwgIkZvdW5kIik7CisJCWNtcF9vayhzcmNoLnBv cywgIj09IiwgMSwgIlBvcyA9MSIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2 LCAxNSk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkQsICJO b3QgZm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAyLCAiUG9zID0yIik7CisK KwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDIwKTsKKwkJY21wX29rKHNyY2guc3Qs ICI9PSIsIFVTVl9TUkNIX0ZPVU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAi PT0iLCAyLCAiUG9zID0yIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDI1 KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORCwgIk5vdCBm b3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDMsICJQb3MgPTMiKTsKKworCQlz cmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMzApOworCQljbXBfb2soc3JjaC5zdCwgIj09 IiwgVVNWX1NSQ0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIs IDMsICJQb3MgPTIiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNDUpOwor CQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5EX0xBUkdFU1QsICJO b3QgZm91bmQsIGxhcmdlc3QiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAzLCAiUG9z ID0zIik7CisKKwkJdmVjdF91MTZfY2xlYXIoJnVzdik7CisJfQorCXsKKwkJdW5pcXNvcnR2 ZWN0X3UxNl90IHVzdjsKKwkJdXN2X3NyY2hfcmVzX3Qgc3JjaDsKKwkJdWludDE2X3QgaW5w dXRbM10gPSB7IDUsIDEwLCAyMCB9OworCQl1aW50MTZfdCBidWZbM107IC8qIG92ZXJpbmR1 bGdlIGluIHRlc3RpbmcgdGhlIG91dGVyIG1lbW9yeSB2ZWN0b3IgKi8KKworCQl2ZWN0X3Ux Nl9pbml0KCZ1c3YsIDMsIGJ1Zik7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyBp KyspCisJCQl1c3ZfdTE2X2luc2VydCgmdXN2LCBpbnB1dFtpXSk7CisKKwkJc3JjaCA9IHVz dl91MTZfc2VhcmNoKCZ1c3YsIDApOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NS Q0hfTk9UX0ZPVU5EX1NNQUxMRVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21hbGxlc3QiKTsK KwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVz dl91MTZfc2VhcmNoKCZ1c3YsIDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NS Q0hfRk9VTkQsICJGb3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3Mg PTAiKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNtcF9vayhz cmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9OT1RfRk9VTkQsICJOb3QgZm91bmQiKTsKKwkJY21w X29rKHNyY2gucG9zLCAiPT0iLCAxLCAiUG9zID0xIik7CisKKwkJc3JjaCA9IHVzdl91MTZf c2VhcmNoKCZ1c3YsIDEwKTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0ZP VU5ELCAiRm91bmQiKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAxLCAiUG9zID0xIik7 CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDE1KTsKKwkJY21wX29rKHNyY2gu c3QsICI9PSIsIFVTVl9TUkNIX05PVF9GT1VORCwgIk5vdCBmb3VuZCIpOworCQljbXBfb2so c3JjaC5wb3MsICI9PSIsIDIsICJQb3MgPTIiKTsKKworCQkvKgorCQkgKiBXaGVuIHNjb3Bl cyBsIGFuZCBnIGFyZSBuZWlnaGJvdXJzIChnLWw9MSkgYnV0CisJCSAqIHZhbD09bVtnXSBp bnN0ZWFkIG9mIHZhbD09bVtsXS4KKwkJICovCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgm dXN2LCAyMCk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9GT1VORCwgIkZv dW5kIik7CisJCWNtcF9vayhzcmNoLnBvcywgIj09IiwgMiwgIlBvcyA9MiIpOworCisJCXNy Y2ggPSB1c3ZfdTE2X3NlYXJjaCgmdXN2LCAyMSk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0i LCBVU1ZfU1JDSF9OT1RfRk9VTkRfTEFSR0VTVCwgIk5vdCBmb3VuZCwgbGFyZ2VzdCIpOwor CQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDIsICJQb3MgPTIiKTsKKworCQl2ZWN0X3UxNl9j bGVhcigmdXN2KTsKKwl9CisJeyAvKiBzaW5nbGUgbWVtYmVyKi8KKworCQl1bmlxc29ydHZl Y3RfdTE2X3QgdXN2OworCQl1c3Zfc3JjaF9yZXNfdCBzcmNoOworCisJCXZlY3RfdTE2X2lu aXQoJnVzdiwgMywgTlVMTCk7CisKKwkJdXN2X3UxNl9pbnNlcnQoJnVzdiwgNSk7IC8qIFRo ZSBvbmx5IGl0ZW0gaW4gbGlzdCBpcyA1ICovCisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNo KCZ1c3YsIDApOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfTk9UX0ZPVU5E X1NNQUxMRVNULAorCQkJICAgIk5vdCBmb3VuZCwgc21hbGxlc3QiKTsKKwkJY21wX29rKHNy Y2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNo KCZ1c3YsIDUpOworCQljbXBfb2soc3JjaC5zdCwgIj09IiwgVVNWX1NSQ0hfRk9VTkQsICJG b3VuZCIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAiKTsKKworCQlz cmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0i LCBVU1ZfU1JDSF9OT1RfRk9VTkRfTEFSR0VTVCwgIk5vdCBmb3VuZCwgbGFyZ2VzdCIpOwor CQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTIiKTsKKworCQl2ZWN0X3UxNl9j bGVhcigmdXN2KTsKKwl9CisJeyAvKiBlbXB0eSB2ZWN0b3IqLworCisJCXVuaXFzb3J0dmVj dF91MTZfdCB1c3Y7CisJCXVzdl9zcmNoX3Jlc190IHNyY2g7CisKKwkJdmVjdF91MTZfaW5p dCgmdXN2LCAxLCBOVUxMKTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgMCk7 CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwgIlZlY3RvciBpcyBl bXB0eS4iKTsKKwkJY21wX29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJ c3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDQpOworCQljbXBfb2soc3JjaC5zdCwgIj09 IiwgVVNWX1NSQ0hfRU1QVFksICJWZWN0b3IgaXMgZW1wdHkuIik7CisJCWNtcF9vayhzcmNo LnBvcywgIj09IiwgMCwgIlBvcyA9MCIpOworCisJCXNyY2ggPSB1c3ZfdTE2X3NlYXJjaCgm dXN2LCA1KTsKKwkJY21wX29rKHNyY2guc3QsICI9PSIsIFVTVl9TUkNIX0VNUFRZLCAiVmVj dG9yIGlzIGVtcHR5LiIpOworCQljbXBfb2soc3JjaC5wb3MsICI9PSIsIDAsICJQb3MgPTAi KTsKKworCQlzcmNoID0gdXN2X3UxNl9zZWFyY2goJnVzdiwgNik7CisJCWNtcF9vayhzcmNo LnN0LCAiPT0iLCBVU1ZfU1JDSF9FTVBUWSwgIlZlY3RvciBpcyBlbXB0eS4iKTsKKwkJY21w X29rKHNyY2gucG9zLCAiPT0iLCAwLCAiUG9zID0wIik7CisKKwkJdmVjdF91MTZfY2xlYXIo JnVzdik7CisJfQorCXByaW50ZigiVGVzdCBTRUFSQ0ggSU4gVU5JUVVFIFNPUlQgVkVDVCBQ QVNTRUQuXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBFUlJPUiBPTiBOTyBWRUNUT1Ig Rk9SIFNFQVJDSElOR1xuIik7CisJeworCQl1c3Zfc3JjaF9yZXNfdCBzcmNoOworCQlzcmNo ID0gdXN2X3UxNl9zZWFyY2goTlVMTCwgMCk7CisJCWNtcF9vayhzcmNoLnN0LCAiPT0iLCBV U1ZfU1JDSF9FUlJPUiwKKwkJCSAgICJFcnJvcjogbm8gdmVjdG9yIChlbXB0eSBwb2ludGVy IG9uIHZlY3Ryb3IpLiIpOworCX0KKwl7CisJCXVuaXFzb3J0dmVjdF91MTZfdCB1c3Y7CisJ CXVzdl9zcmNoX3Jlc190IHNyY2g7CisJCXZlY3RfdTE2X2luaXQoJnVzdiwgMCwgTlVMTCk7 CisKKwkJc3JjaCA9IHVzdl91MTZfc2VhcmNoKCZ1c3YsIDApOworCQljbXBfb2soc3JjaC5z dCwgIj09IiwgVVNWX1NSQ0hfRU1QVFksCisJCQkgICAiU2VhcmNoIGluIGVtcHR5IHZlY3Rv ciBpcyBub3QgYW4gZXJyb3IuIik7CisKKwkJdmVjdF91MTZfY2xlYXIoJnVzdik7CisJfQor CXByaW50ZigiVGVzdCBFUlJPUiBPTiBOTyBWRUNUT1IgRk9SIFNFQVJDSElORyBQQVNTRURc biIpOworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PVxuXG4iKTsKKworCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IENSRUFURUQgVkVDVE9SUyBBUkUgU09SVEVE IEFORCBVTklRVUVcbiIpOworCXsKKwkJY21wX29rKAorCQkJMCwgIj09IiwKKwkJCXRlc3Rf dXN2KDEwLCAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0s IC8vIHNyYworCQkJCQkgMTAsCisJCQkJCSAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0 LCA1LCA2LCA3LCA4LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJIlVuaXF1ZSBzb3J0ZWQgdmVj dG9yIHJlbWFpbnMgdGhlIHNhbWUuIik7CisKKwkJY21wX29rKDAsICI9PSIsCisJCQkgICB0 ZXN0X3VzdigxMCwKKwkJCQkJCSh1aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMsIDQsIDUsIDMs IDcsIDUsIDkgfSwgLy8gc3JjCisJCQkJCQk4LCAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAz LCA0LCA1LCA3LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJICAgIkR1cGxpY2F0ZXMgYXJlIHJl bW92ZWQuIik7CisKKwkJY21wX29rKAorCQkJMCwgIj09IiwKKwkJCXRlc3RfdXN2KDEwLCAo dWludDE2X3RbXSkgeyA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwIH0sIC8vIHNyYwor CQkJCQkgMTAsCisJCQkJCSAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3 LCA4LCA5IH0pLCAvLyBleHBlY3RlZAorCQkJIlVuc29ydGVkIGJlY2FtZSBzb3J0ZWQuIik7 CisJfQorCXByaW50ZigiVGVzdCBDUkVBVEVEIFZFQ1RPUlMgQVJFIFNPUlRFRCBBTkQgVU5J UVVFIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG5cbiIpOworCisJZG9uZV90ZXN0aW5nKCk7Cit9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9kZm9yL3Rlc3RfdmVjdF91MTYuYyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF92 ZWN0X3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMGVm ZTdkY2NiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2Rmb3IvdGVzdF92ZWN0X3Ux Ni5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogdGVzdF92ZWN0X3UxNi5jCisgKi8KKwor I2luY2x1ZGUgImxpYnRhcC90YXAuaCIKKyNpbmNsdWRlICJsaWIvdmVjdF91MTYuaCIKKwor aW50CittYWluKHZvaWQpCit7CisJcGxhbigzNSk7CisKKwlwcmludGYoIj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVzdCBJTklU IEFORCBDTEVBUiBWRUNUT1JcbiIpOworCXsKKwkJdmVjdF91MTZfdCB2OworCQlzaXplX3Qg Y2FwYWNpdHkgPSAxMDsKKwkJY21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2luaXQoJnYsIGNh cGFjaXR5LCBOVUxMKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9pbml0IGlzIDAiKTsKKwor CQljbXBfb2sodi5jYXAsICI9PSIsIGNhcGFjaXR5LAorCQkJICAgIlZlY3RvcnMgY2FwYWNp dHkgaXMgZXF1YWwgdG8gcmVxdWVzdGVkIG9uZSIpOworCQljbXBfb2sodi5jbnQsICI9PSIs IDAsICJObyBtZW1iZXJzIGluIHZlY3RvciIpOworCQlvayh2Lm0gIT0gTlVMTCwgIkFycmF5 IGZvciBtZW1iZXJzIGlzIHJlc2VydmVkIik7CisJCWNtcF9vayh2Lm1lbV9pc19vdXRlciwg Ij09IiwgZmFsc2UsICJWZWN0b3IgZG9lcyBub3QgdXNlIG91dGVyIG1lbW9yeSIpOworCisJ CXZlY3RfdTE2X2NsZWFyKCZ2KTsKKworCQljbXBfb2sodi5jYXAsICI9PSIsIDAsICJWZWN0 b3JzIGNhcGFjaXR5IGlzIDAgYWZ0ZXIgY2xlYW51cCIpOworCQljbXBfb2sodi5jbnQsICI9 PSIsIDAsICJObyBtZW1iZXJzIGluIHZlY3RvciBhZnRlciBjbGVhbnVwIik7CisJCW9rKHYu bSA9PSBOVUxMLCAiQXJyYXkgZm9yIG1lbWJlcnMgaXMgYWJzZW50Iik7CisJCWNtcF9vayh2 Lm1lbV9pc19vdXRlciwgIj09IiwgZmFsc2UsICJWZWN0b3IgZG9lcyBub3QgdXNlIG91dGVy IG1lbW9yeSIpOworCX0KKwlwcmludGYoIlRlc3QgSU5JVCBBTkQgQ0xFQVIgVkVDVE9SIFBB U1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgSU5JVCBBTkQgRklMTCBWRUNUT1Jc biIpOworCXsKKwkJdmVjdF91MTZfdCB2OworCQlzaXplX3QgY2FwYWNpdHkgPSAxMDsKKwkJ Y29uc3QgdWludDE2X3QgdmFsc1tdID0geyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5 IH07CisKKwkJY21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2luaXQoJnYsIGNhcGFjaXR5LCBO VUxMKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9pbml0IGlzIDAiKTsKKwkJY21wX29rKDAs ICI9PSIsIHZlY3RfdTE2X2ZpbGwoJnYsIGNhcGFjaXR5LCB2YWxzKSwKKwkJCSAgICJSZXN1 bHQgb2YgdmVjdF9maWxsIGlzIDAiKTsKKworCQljbXBfb2sodi5jYXAsICI9PSIsIGNhcGFj aXR5LAorCQkJICAgIlZlY3RvcnMgY2FwYWNpdHkgaXMgZXF1YWwgdG8gcmVxdWVzdGVkIG9u ZSIpOworCQlvayh2Lm0gIT0gTlVMTCwgIkFycmF5IGZvciBtZW1iZXJzIGlzIHJlc2VydmVk Iik7CisJCWNtcF9vayh2LmNudCwgIj09IiwgY2FwYWNpdHksICJNZW1iZXJzIGFyZSBpbiB2 ZWN0b3IuIik7CisJCXsKKwkJCWludCBlcXVhbCA9IDA7CisJCQlmb3IgKHNpemVfdCBpID0g MDsgaSA8IGNhcGFjaXR5OyBpKyspIHsKKwkJCQlpZiAodi5tW2ldID09IGkpCisJCQkJCWVx dWFsID0gZXF1YWwgKyAxOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCQljbXBf b2soZXF1YWwsICI9PSIsIDEwLCAiTWVtYmVycyBhcmUgY29ycmVjdCIpOworCQl9CisJCXZl Y3RfdTE2X2NsZWFyKCZ2KTsKKwl9CisJcHJpbnRmKCJUZXN0IElOSVQgQU5EIEZJTEwgVkVD VE9SIFBBU1NFRFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3QgSU5JVCBBTkQgRklMTCBW RUNUT1Igd2l0aCB6ZXJvIGNhcGNhaXR5XG4iKTsKKwl7CisJCXZlY3RfdTE2X3QgdjsKKwkJ c2l6ZV90IGNhcGFjaXR5ID0gMDsKKworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfaW5p dCgmdiwgY2FwYWNpdHksIE5VTEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2luaXQgaXMg MCIpOworCQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfZmlsbCgmdiwgY2FwYWNpdHksIE5V TEwpLAorCQkJICAgIlJlc3VsdCBvZiB2ZWN0X2ZpbGwgaXMgMCIpOworCisJCWNtcF9vayh2 LmNhcCwgIj09IiwgMCwgIlZlY3RvcidzIGNhcGFjaXR5IGlzIHplcm8iKTsKKwkJb2sodi5t ID09IE5VTEwsCisJCSAgICJQb2ludGVyIHRvIG1lbWJlcnMgaXMgTlVMTCAoYXJyYXkgZm9y IG1lbWJlcnMgaXMgbm90IHJlc2VydmVkKSIpOworCQlvayh2LmNudCA9PSAwLCAiQ291bnRl ciBvZiBtZW1iZXJzIGlzIHplcm8uIik7CisJCXZlY3RfdTE2X2NsZWFyKCZ2KTsKKwl9CisJ eworCQl2ZWN0X3UxNl90IHY7CisJCXNpemVfdCBjYXBhY2l0eSA9IDEwOworCQljb25zdCB1 aW50MTZfdCB2YWxzW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKKwor CQljbXBfb2soMCwgIj09IiwgdmVjdF91MTZfaW5pdCgmdiwgMCwgTlVMTCksICJSZXN1bHQg b2YgdmVjdF9pbml0IGlzIDAiKTsKKwkJY21wX29rKDAsICI9PSIsIHZlY3RfdTE2X2ZpbGwo JnYsIGNhcGFjaXR5LCB2YWxzKSwKKwkJCSAgICJSZXN1bHQgb2YgdmVjdF9maWxsIGlzIDAi KTsKKworCQljbXBfb2sodi5jYXAsICI9PSIsIGNhcGFjaXR5LAorCQkJICAgIlZlY3Rvcidz IGNhcGFjaXR5IGlzIG5vdCB6ZXJvIGFmdGVyIGZpbGxpbmciKTsKKwkJb2sodi5tICE9IE5V TEwsCisJCSAgICJQb2ludGVyIHRvIG1lbWJlcnMgaXMgbm90IE5VTEwgZmF0ZXIgZmlsbGlu ZyAoYXJyYXkgZm9yIG1lbWJlcnMgaGFzIGJlZW4gcmVzZXJ2ZWQpIik7CisJCW9rKHYuY250 ID09IGNhcGFjaXR5LCAiQ291bnRlciBvZiBtZW1iZXJzIGlzIG5vdCB6ZXJvIGFmdGVyIGZp bGxpbmcuIik7CisJCXZlY3RfdTE2X2NsZWFyKCZ2KTsKKwl9CisJcHJpbnRmKCJUZXN0IElO SVQgQU5EIEZJTEwgVkVDVE9SIHdpdGggemVybyBjYXBjYWl0eSBpcyBmaW5pc2hlZFxuIik7 CisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5c biIpOworCisJcHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09XG4iKTsKKwlwcmludGYoIlRlc3QgQ09NUEFSRSBWRUNUT1JTXG4iKTsKKwl7CisJCXZl Y3RfdTE2X3QgYSwgYiwgYywgZDsKKworCQl1aW50MTZfdCBhdmFsc1tdID0geyAwLCAxLCAy LCAzLCA0LCA1LCA2LCA3LCA4LCA5IH07CisJCXVpbnQxNl90IGJ2YWxzW10gPSB7IDAsIDEs IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKKwkJdWludDE2X3QgY3ZhbHNbXSA9IHsgMSwg MSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9OworCQl1aW50MTZfdCBkdmFsc1tdID0geyAw LCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4IH07CisKKwkJdmVjdF91MTZfaW5pdCgmYSwgMCwg TlVMTCk7CisJCXZlY3RfdTE2X2luaXQoJmIsIDAsIE5VTEwpOworCQl2ZWN0X3UxNl9pbml0 KCZjLCAwLCBOVUxMKTsKKwkJdmVjdF91MTZfaW5pdCgmZCwgMCwgTlVMTCk7CisKKwkJdmVj dF91MTZfZmlsbCgmYSwgMTAsIGF2YWxzKTsKKwkJdmVjdF91MTZfZmlsbCgmYiwgMTAsIGJ2 YWxzKTsKKwkJdmVjdF91MTZfZmlsbCgmYywgMTAsIGN2YWxzKTsKKwkJdmVjdF91MTZfZmls bCgmZCwgOSwgZHZhbHMpOworCisJCWNtcF9vaygwLCAiPT0iLCB2ZWN0X3UxNl9jb21wYXJl KCZhLCAmYiksICJWZWN0b3JzIGFyZSBlcXVhbCIpOworCQljbXBfb2soLTEsICI9PSIsIHZl Y3RfdTE2X2NvbXBhcmUoJmEsICZjKSwKKwkJCSAgICJWZWN0b3JzIGFyZSBub3QgZXF1YWwg YmVjYXVzZSBvZiB2YWx1ZSBvZiBtZW1iZXJzIik7CisJCWNtcF9vaygtMSwgIj09IiwgdmVj dF91MTZfY29tcGFyZSgmYSwgJmQpLAorCQkJICAgIlZlY3RvcnMgYXJlIG5vdCBlcXVhbCBi ZWNhdXNlIG9mIG51bWJlciBvZiBtZW1iZXJzIik7CisJfQorCXByaW50ZigiVGVzdCBDT01Q QVJFIFZFQ1RPUlMgaXMgZmluaXNoZWQuIFxuIik7CisJcHJpbnRmKCI9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpOworCisJcHJpbnRmKCI9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcmludGYoIlRlc3Qg VkVDVE9SIFdJVEggT1VURVIgTUVNT1JZXG4iKTsKKwl7CisjZGVmaW5lIFZFQ1RfQ0FQIDEw MAorCQl2ZWN0X3UxNl90IHZlY3Q7CisJCXVpbnQxNl90IGJ1ZltWRUNUX0NBUF07IC8qIHVp bnQxNl90IGlzIHRoZSBpdGVtJ3MgdHlwZSAqLworCQl2ZWN0X3UxNl9pbml0KCZ2ZWN0LCBW RUNUX0NBUCwgYnVmKTsKKwkJY21wX29rKAorCQkJdmVjdC5jYXAsICI9PSIsIFZFQ1RfQ0FQ LAorCQkJIkluaXRpYWxpc2F0aW9uIG9mIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwgbWVtb3J5 IHJlc3VsdGVkIGluIHByb3BlciBjYXBhY2l0eS4iKTsKKwkJY21wX29rKAorCQkJdmVjdC5j bnQsICI9PSIsIDAsCisJCQkiSW5pdGlhbGlzYXRpb24gb2YgdmVjdG9yIGhhdmluZyBleHRl cm5hbCBtZW1vcnkgcmVzdWx0ZWQgaW4gcHJvcGVyIG51bWJlciBvZiBpdGVtcy4iKTsKKwkJ b2soKCh2b2lkICopdmVjdC5tID09ICh2b2lkICopYnVmKSwKKwkJICAgIkluaXRpYWxpc2F0 aW9uIG9mIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwgbWVtb3J5IHNldCBidWYgdG8gdmVjdC0+ bS4iKTsKKwkJb2sodmVjdC5tZW1faXNfb3V0ZXIsCisJCSAgICJJbml0aWFsaXNhdGlvbiBv ZiB2ZWN0b3IgaGF2aW5nIGV4dGVybmFsIG1lbW9yeSBzZXQgbWVtX2lzX291dGVyIGZsYWcu Iik7CisKKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWRUNUX0NBUDsgaSsrKQorCQl7CisJ CQlpZiAodmVjdF91MTZfYXBwZW5kKCZ2ZWN0LCBpKSAhPSAwKQorCQkJCWZhaWwoCisJCQkJ CSJFUlJPUjogTmV3IHZhbHVlIGNhbid0IGJlIGFwcGVuZGVkIGludG8gdmVjdG9yIGhhdmlu ZyBleHRlcm5hbCBtZW1vcnkuIik7CisJCX0KKwkJcGFzcygKKwkJCSJBbGwgdmFsdWVzIGhh dmUgYmVlbiBhcHBlbmRlZCBpbnRvIHZlY3RvciBoYXZpbmcgZXh0ZXJuYWwgbWVtb3J5LiIp OworCisJCWNtcF9vayh2ZWN0LmNudCwgIj09IiwgVkVDVF9DQVAsICJWZWN0b3IgaXMgZnVs bC4iKTsKKwkJY21wX29rKHZlY3RfdTE2X2FwcGVuZCgmdmVjdCwgVkVDVF9DQVApLCAiPT0i LCAtMSwKKwkJCSAgICJPbmNlIHZlY3RvciBpcyBmdWxsLCBleHRyYSBpdGVtIGNhbid0IGJl IGFwcGVuZGVkLiIpOworCX0KKwlwcmludGYoIlRlc3QgVkVDVE9SIFdJVEggT1VURVIgTUVN T1JZIGlzIGZpbmlzaGVkXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT1cbiIpOworCisJZG9uZV90ZXN0aW5nKCk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9saWJ0YXAvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L2xpYnRhcC8uZ2l0 aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYzk1ZDA0 NmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2xpYnRhcC8uZ2l0aWdub3JlCkBA IC0wLDAgKzEsMTMgQEAKKy90LyoKKyEvdC8qLioKKy90LyouZXhlCisvdC8qLmdvdAorKi5h CisqLmxvCisqLm8KKyouc28KKyoucGMKK3Vzci8KKyouc3c/CisvLmRlcHMKKy8uZGlyc3Rh bXAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC8udHJhdmlzLnltbCBiL3NyYy90ZXN0 L2xpYnRhcC8udHJhdmlzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uNmY5ODA5ZTFiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9saWJ0YXAv LnRyYXZpcy55bWwKQEAgLTAsMCArMSwxMyBAQAorbGFuZ3VhZ2U6IGMKKworY29tcGlsZXI6 CisgIC0gZ2NjCisgIC0gY2xhbmcKKworYmVmb3JlX2luc3RhbGw6IHN1ZG8gYXB0LWdldCBp bnN0YWxsIC15IGxpYnRlc3QtZGlmZmVyZW5jZXMtcGVybAorCitpbnN0YWxsOiBtYWtlIEND PSRDQyBpbnN0YWxsCisKK3NjcmlwdDogbWFrZSBDQz0kQ0MgdGVzdAorCithZnRlcl9zY3Jp cHQ6IG1ha2UgdW5pbnN0YWxsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvQ09QWUlO RyBiL3NyYy90ZXN0L2xpYnRhcC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi42NWM1Y2E4OGE2NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L2xpYnRhcC9DT1BZSU5HCkBAIC0wLDAgKzEsMTY1IEBACisgICAgICAgICAgICAgICAgICAg R05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAg ICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlv bmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVz Cisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFs bG93ZWQuCisKKworICBUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSwgc3VwcGxl bWVudGVkIGJ5IHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGxpc3RlZCBiZWxvdy4KKwor ICAwLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLgorCisgIEFzIHVzZWQgaGVyZWluLCAidGhp cyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgTGVzc2VyCitHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlICJHTlUgR1BMIiByZWZlcnMgdG8gdmVyc2lv biAzIG9mIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIlRoZSBMaWJy YXJ5IiByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNl LAorb3RoZXIgdGhhbiBhbiBBcHBsaWNhdGlvbiBvciBhIENvbWJpbmVkIFdvcmsgYXMgZGVm aW5lZCBiZWxvdy4KKworICBBbiAiQXBwbGljYXRpb24iIGlzIGFueSB3b3JrIHRoYXQgbWFr ZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZAorYnkgdGhlIExpYnJhcnksIGJ1dCB3 aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorRGVmaW5pbmcg YSBzdWJjbGFzcyBvZiBhIGNsYXNzIGRlZmluZWQgYnkgdGhlIExpYnJhcnkgaXMgZGVlbWVk IGEgbW9kZQorb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5 LgorCisgIEEgIkNvbWJpbmVkIFdvcmsiIGlzIGEgd29yayBwcm9kdWNlZCBieSBjb21iaW5p bmcgb3IgbGlua2luZyBhbgorQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gIFRoZSBw YXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkKK3dpdGggd2hpY2ggdGhlIENvbWJp bmVkIFdvcmsgd2FzIG1hZGUgaXMgYWxzbyBjYWxsZWQgdGhlICJMaW5rZWQKK1ZlcnNpb24i LgorCisgIFRoZSAiTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgQ29tYmlu ZWQgV29yayBtZWFucyB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGZvciB0aGUgQ29tYmlu ZWQgV29yaywgZXhjbHVkaW5nIGFueSBzb3VyY2UgY29kZQorZm9yIHBvcnRpb25zIG9mIHRo ZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUKK2Jh c2VkIG9uIHRoZSBBcHBsaWNhdGlvbiwgYW5kIG5vdCBvbiB0aGUgTGlua2VkIFZlcnNpb24u CisKKyAgVGhlICJDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUiIGZvciBhIENvbWJp bmVkIFdvcmsgbWVhbnMgdGhlCitvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUgZm9y IHRoZSBBcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBkYXRhCithbmQgdXRpbGl0eSBwcm9n cmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBDb21iaW5lZCBXb3JrIGZyb20gdGhl CitBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJhcmllcyBvZiB0 aGUgQ29tYmluZWQgV29yay4KKworICAxLiBFeGNlcHRpb24gdG8gU2VjdGlvbiAzIG9mIHRo ZSBHTlUgR1BMLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIHVuZGVyIHNl Y3Rpb25zIDMgYW5kIDQgb2YgdGhpcyBMaWNlbnNlCit3aXRob3V0IGJlaW5nIGJvdW5kIGJ5 IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKworICAyLiBDb252ZXlpbmcgTW9kaWZpZWQg VmVyc2lvbnMuCisKKyAgSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFu ZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhCitmYWNpbGl0eSByZWZlcnMgdG8gYSBmdW5j dGlvbiBvciBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIEFwcGxpY2F0aW9uCit0aGF0IHVz ZXMgdGhlIGZhY2lsaXR5IChvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVu IHRoZQorZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5 IG9mIHRoZSBtb2RpZmllZAordmVyc2lvbjoKKworICAgYSkgdW5kZXIgdGhpcyBMaWNlbnNl LCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8KKyAgIGVu c3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gQXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5 IHRoZQorICAgZnVuY3Rpb24gb3IgZGF0YSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVz LCBhbmQgcGVyZm9ybXMKKyAgIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlu cyBtZWFuaW5nZnVsLCBvcgorCisgICBiKSB1bmRlciB0aGUgR05VIEdQTCwgd2l0aCBub25l IG9mIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9mCisgICB0aGlzIExpY2Vuc2UgYXBw bGljYWJsZSB0byB0aGF0IGNvcHkuCisKKyAgMy4gT2JqZWN0IENvZGUgSW5jb3Jwb3JhdGlu ZyBNYXRlcmlhbCBmcm9tIExpYnJhcnkgSGVhZGVyIEZpbGVzLgorCisgIFRoZSBvYmplY3Qg Y29kZSBmb3JtIG9mIGFuIEFwcGxpY2F0aW9uIG1heSBpbmNvcnBvcmF0ZSBtYXRlcmlhbCBm cm9tCithIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeS4gIFlvdSBt YXkgY29udmV5IHN1Y2ggb2JqZWN0Citjb2RlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNl LCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkCittYXRlcmlhbCBpcyBub3Qg bGltaXRlZCB0byBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUKK2xheW91 dHMgYW5kIGFjY2Vzc29ycywgb3Igc21hbGwgbWFjcm9zLCBpbmxpbmUgZnVuY3Rpb25zIGFu ZCB0ZW1wbGF0ZXMKKyh0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwgeW91IGRvIGJv dGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdp dGggZWFjaCBjb3B5IG9mIHRoZSBvYmplY3QgY29kZSB0aGF0IHRoZQorICAgTGlicmFyeSBp cyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQorICAg Y292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0 IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZQorICAg ZG9jdW1lbnQuCisKKyAgNC4gQ29tYmluZWQgV29ya3MuCisKKyAgWW91IG1heSBjb252ZXkg YSBDb21iaW5lZCBXb3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlIHRoYXQsCit0YWtl biB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBv ZiB0aGUKK3BvcnRpb25zIG9mIHRoZSBMaWJyYXJ5IGNvbnRhaW5lZCBpbiB0aGUgQ29tYmlu ZWQgV29yayBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1v ZGlmaWNhdGlvbnMsIGlmIHlvdSBhbHNvIGRvIGVhY2ggb2YKK3RoZSBmb2xsb3dpbmc6CisK KyAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ29t YmluZWQgV29yayB0aGF0CisgICB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0 IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQorICAgY292ZXJlZCBieSB0aGlzIExpY2Vu c2UuCisKKyAgIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBv ZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCisgICBkb2N1bWVudC4KKworICAgYykg Rm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1 cmluZworICAgZXhlY3V0aW9uLCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0 aGUgTGlicmFyeSBhbW9uZworICAgdGhlc2Ugbm90aWNlcywgYXMgd2VsbCBhcyBhIHJlZmVy ZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlCisgICBjb3BpZXMgb2YgdGhlIEdOVSBH UEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKworICAgZCkgRG8gb25lIG9mIHRoZSBm b2xsb3dpbmc6CisKKyAgICAgICAwKSBDb252ZXkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGlu ZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlLCBhbmQg dGhlIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSBpbiBhIGZvcm0KKyAgICAgICBz dWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8K KyAgICAgICByZWNvbWJpbmUgb3IgcmVsaW5rIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9k aWZpZWQgdmVyc2lvbiBvZgorICAgICAgIHRoZSBMaW5rZWQgVmVyc2lvbiB0byBwcm9kdWNl IGEgbW9kaWZpZWQgQ29tYmluZWQgV29yaywgaW4gdGhlCisgICAgICAgbWFubmVyIHNwZWNp ZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZworICAgICAg IENvcnJlc3BvbmRpbmcgU291cmNlLgorCisgICAgICAgMSkgVXNlIGEgc3VpdGFibGUgc2hh cmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCisgICAgICAgTGli cmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0IChhKSB1c2VzIGF0IHJ1 biB0aW1lCisgICAgICAgYSBjb3B5IG9mIHRoZSBMaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBv biB0aGUgdXNlcidzIGNvbXB1dGVyCisgICAgICAgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3Bl cmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbgorICAgICAgIG9mIHRoZSBM aWJyYXJ5IHRoYXQgaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgTGlua2VkCisg ICAgICAgVmVyc2lvbi4KKworICAgZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRp b24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UKKyAgIGJlIHJlcXVpcmVkIHRv IHByb3ZpZGUgc3VjaCBpbmZvcm1hdGlvbiB1bmRlciBzZWN0aW9uIDYgb2YgdGhlCisgICBH TlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBp cworICAgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJz aW9uIG9mIHRoZQorICAgQ29tYmluZWQgV29yayBwcm9kdWNlZCBieSByZWNvbWJpbmluZyBv ciByZWxpbmtpbmcgdGhlCisgICBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lv biBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZgorICAgeW91IHVzZSBvcHRpb24gNGQwLCB0 aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55CisgICB0aGUgTWlu aW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbmQgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlv bgorICAgQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRo ZSBJbnN0YWxsYXRpb24KKyAgIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVk IGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTAorICAgZm9yIGNvbnZleWluZyBDb3JyZXNw b25kaW5nIFNvdXJjZS4pCisKKyAgNS4gQ29tYmluZWQgTGlicmFyaWVzLgorCisgIFlvdSBt YXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0 aGUKK0xpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIg d2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIHRoYXQgYXJlIG5vdCBBcHBsaWNhdGlv bnMgYW5kIGFyZSBub3QgY292ZXJlZCBieSB0aGlzCitMaWNlbnNlLCBhbmQgY29udmV5IHN1 Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIKK2Nob2ljZSwgaWYg eW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgQWNjb21wYW55IHRoZSBj b21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQKKyAg IG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFj aWxpdGllcywKKyAgIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Uu CisKKyAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJy YXJ5IHRoYXQgcGFydCBvZiBpdAorICAgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5 LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgYWNjb21wYW55aW5nIHVu Y29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDYuIFJldmlzZWQgVmVyc2lv bnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBUaGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5l dyB2ZXJzaW9ucworb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm cm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBp biBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRl dGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworICBFYWNoIHZl cnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhl CitMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4g bnVtYmVyZWQgdmVyc2lvbgorb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iCithcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0 aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhl ciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uCitw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJh cnkgYXMgeW91CityZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1i ZXIgb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkg Y2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisKKyAgSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0 IGEgcHJveHkgY2FuIGRlY2lkZQord2hldGhlciBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaGFsbAorYXBwbHksIHRoYXQgcHJv eHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMK K3Blcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lv biBmb3IgdGhlCitMaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbGlidGFwL0lOU1RB TEwgYi9zcmMvdGVzdC9saWJ0YXAvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNWIyYzc2ZGYzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9saWJ0YXAvSU5TVEFMTApAQCAtMCwwICsxLDQxIEBACitUbyBpbnN0YWxsIGxpYnRhcCBv biBhIFVuaXgtbGlrZSBzeXN0ZW06CisKKyAgICAkIG1ha2UKKyAgICAkIG1ha2UgY2hlY2sK KyAgICAkIG1ha2UgaW5zdGFsbAorCitUbyBjb21waWxlIHdpdGggZ2NjIC1hbnNpLCBydW46 CisKKyAgICAkIEFOU0k9MSBtYWtlCisKK1RvIGluc3RhbGwgdG8gYSBkaWZmZXJlbnQgZGly ZWN0b3J5IHRoYW4gL3Vzci9sb2NhbCwgc3VwcGx5IHRoZQorUFJFRklYIHZhcmlhYmxlIHRv IG1ha2U6CisKKyAgICAkIFBSRUZJWD0vdXNyIG1ha2UgaW5zdGFsbAorCitPbiBXaW5kb3dz LCB0aGUgbGlicmFyeSBjYW4gYmUgY3JlYXRlZCBieSBmaXJzdCBzZXR0aW5nIHVwIHRoZQor Y29ycmVjdCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFVzdWFsbHkgdGhp cyBpcyBkb25lIGJ5CitydW5uaW5nIHZjdmFyczMyLmJhdCBpbmNsdWRlZCBpbiB0aGUgVmlz dWFsIFN0dWRpbyBkaXN0cmlidXRpb24uCitZb3Ugc2hvdWxkIGFsc28gaW5zdGFsbCBnbnUg bWFrZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3Jn ZS5uZXQvcGFja2FnZXMvbWFrZS5odG0uIE9uY2UgdGhpcyBpcworZG9uZSwgeW91IHNob3Vs ZCBiZSBhYmxlIHRvIHJ1biB0aGUgZm9sbG93aW5nOgorCisgICAgPiBtYWtlIC1mIE1ha2Vm aWxlLndpbgorCitJZiB5b3Ugd2FudCB0byB1c2UgaXQgZGlyZWN0bHkgaW4gYW5vdGhlciBw cm9qZWN0LCB5b3UgY2FuIGNvcHkgdGFwLmMKK2FuZCB0YXAuaCB0aGVyZSBhbmQgaXQgc2hv dWxkbid0IGhhdmUgYSBwcm9ibGVtIGNvbXBpbGluZy4KKworICAgICQgbHMKKyAgICB0YXAu YyB0YXAuaCB0ZXN0LmMKKyAgICAkIGNhdCB0ZXN0LmMKKyAgICAjaW5jbHVkZSAidGFwLmgi CisgICAgaW50IG1haW4gKCkgeworICAgICAgICBwbGFuKDEpOworICAgICAgICBvayg1MCAr IDUsICJmb28gJXMiLCAiYmFyIik7CisgICAgICAgIGRvbmVfdGVzdGluZygpOworICAgIH0K KyAgICAkIGdjYyB0ZXN0LmMgdGFwLmMKKyAgICAkIGEub3V0CisgICAgMS4uMQorICAgIG9r IDEgLSBmb28gYmFyCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZSBi L3NyYy90ZXN0L2xpYnRhcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZjAyMGMyODM5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9s aWJ0YXAvTWFrZWZpbGUKQEAgLTAsMCArMSw3MyBAQAorQ0MgPz0gZ2NjCitDRkxBR1MgKz0g LVdhbGwgLUkuIC1mUElDCitQUkVGSVggPz0gJChERVNURElSKS91c3IvbG9jYWwKK1RFU1RT ID0gJChwYXRzdWJzdCAlLmMsICUsICQod2lsZGNhcmQgdC8qLmMpKQorCitpZmRlZiBBTlNJ CisJIyAtRF9CU0RfU09VUkNFIGZvciBNQVBfQU5PTllNT1VTCisJQ0ZMQUdTICs9IC1hbnNp IC1EX0JTRF9TT1VSQ0UKKwlMRExJQlMgKz0gLWxic2QtY29tcGF0CitlbmRpZgorCislOgor CSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJChmaWx0ZXIgJS5vICUuYSAlLnNv LCAkXikgJChMRExJQlMpIC1vICRACisKKyUubzoKKwkkKENDKSAkKENGTEFHUykgJChDUFBG TEFHUykgJChUQVJHRVRfQVJDSCkgLWMgJChmaWx0ZXIgJS5jLCAkXikgJChMRExJQlMpIC1v ICRACisKKyUuYToKKwkkKEFSKSByY3MgJEAgJChmaWx0ZXIgJS5vLCAkXikKKworJS5zbzoK KwkkKENDKSAtc2hhcmVkICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJChmaWx0ZXIgJS5v LCAkXikgJChMRExJQlMpIC1vICRACisKK2FsbDogbGlidGFwLmEgbGlidGFwLnNvIHRhcC5w YyB0ZXN0cworCit0YXAucGM6CisJQGVjaG8gZ2VuZXJhdGluZyB0YXAucGMKKwlAZWNobyAn cHJlZml4PSckKFBSRUZJWCkgPiB0YXAucGMKKwlAZWNobyAnZXhlY19wcmVmaXg9JCR7cHJl Zml4fScgPj4gdGFwLnBjCisJQGVjaG8gJ2xpYmRpcj0kJHtwcmVmaXh9L2xpYicgPj4gdGFw LnBjCisJQGVjaG8gJ2luY2x1ZGVkaXI9JCR7cHJlZml4fS9pbmNsdWRlJyA+PiB0YXAucGMK KwlAZWNobyAnJyA+PiB0YXAucGMKKwlAZWNobyAnTmFtZTogbGlidGFwJyA+PiB0YXAucGMK KwlAZWNobyAnRGVzY3JpcHRpb246IFdyaXRlIHRlc3RzIGluIEMnID4+IHRhcC5wYworCUBl Y2hvICdWZXJzaW9uOiAwLjEuMCcgPj4gdGFwLnBjCisJQGVjaG8gJ1VSTDogaHR0cHM6Ly9n aXRodWIuY29tL3pvcmduYXgvbGlidGFwJyA+PiB0YXAucGMKKwlAZWNobyAnTGliczogLUwk JHtsaWJkaXJ9IC1sdGFwJyA+PiB0YXAucGMKKwlAZWNobyAnQ2ZsYWdzOiAtSSQke2luY2x1 ZGVkaXJ9JyA+PiB0YXAucGMKKworbGlidGFwLmE6IHRhcC5vCisKK2xpYnRhcC5zbzogdGFw Lm8KKwordGFwLm86IHRhcC5jIHRhcC5oCisKK3Rlc3RzOiAkKFRFU1RTKQorCiskKFRFU1RT KTogJTogJS5vIGxpYnRhcC5hCisKKyQocGF0c3Vic3QgJSwgJS5vLCAkKFRFU1RTKSk6ICUu bzogJS5jIHRhcC5oCisJJChDQykgJChDRkxBR1MpIC1PMCAkKENQUEZMQUdTKSAkKFRBUkdF VF9BUkNIKSAtYyAkKGZpbHRlciAlLmMsICReKSAkKExETElCUykgLW8gJEAKKworY2xlYW46 CisJcm0gLXJmICoubyB0LyoubyB0YXAucGMgbGlidGFwLmEgbGlidGFwLnNvICQoVEVTVFMp CisKK2luc3RhbGw6IGxpYnRhcC5hIHRhcC5oIGxpYnRhcC5zbyB0YXAucGMKKwlta2RpciAt cCAkKFBSRUZJWCkvbGliICQoUFJFRklYKS9pbmNsdWRlICQoUFJFRklYKS9saWIvcGtnY29u ZmlnCisJaW5zdGFsbCAtYyBsaWJ0YXAuYSAkKFBSRUZJWCkvbGliCisJaW5zdGFsbCAtYyBs aWJ0YXAuc28gJChQUkVGSVgpL2xpYgorCWluc3RhbGwgLWMgdGFwLnBjICQoUFJFRklYKS9s aWIvcGtnY29uZmlnCisJaW5zdGFsbCAtYyB0YXAuaCAkKFBSRUZJWCkvaW5jbHVkZQorCit1 bmluc3RhbGw6CisJcm0gJChQUkVGSVgpL2xpYi9saWJ0YXAuYSAkKFBSRUZJWCkvbGliL2xp YnRhcC5zbyAkKFBSRUZJWCkvaW5jbHVkZS90YXAuaAorCitkaXN0OgorCXJtIGxpYnRhcC56 aXAKKwl6aXAgLXIgbGlidGFwICoKKworY2hlY2sgdGVzdDogYWxsCisJLi90L3Rlc3QKKwor LlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbCB1bmluc3RhbGwgZGlzdCBjaGVjayB0ZXN0IHRl c3RzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvTWFrZWZpbGUud2luIGIvc3JjL3Rl c3QvbGlidGFwL01ha2VmaWxlLndpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNjk0ZDY3OWExYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9saWJ0 YXAvTWFrZWZpbGUud2luCkBAIC0wLDAgKzEsMzcgQEAKK0NGTEFHUyA9IC9aaSAvV2FsbCAv d2Q0MjU1IC93ZDQ5OTYgL3dkNDEyNyAvd2Q0ODIwIC93ZDQxMDAgL3dkNDYxOSBcCisJCSAv d2Q0NTE0IC93ZDQ2NjggL0kuCitDQyA9IGNsIC9ub2xvZ28KK1RFU1RTID0gJChwYXRzdWJz dCAlLmMsICUuZXhlLCAkKHdpbGRjYXJkIHQvKi5jKSkKKworJS5leGU6CisJJChDQykgJChM REZMQUdTKSAkKGZpbHRlciAlLm9iaiAlLmxpYiAlLmRsbCwgJF4pICQoTERMSUJTKSAvRmUg JEAKKworJS5vOgorCSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAvYyAkKGZpbHRlciAl LmMsICReKSAkKExETElCUykgL0ZvICRACisKKyUubGliOgorCWxpYiAvbm9sb2dvIC9vdXQ6 JEAgJChmaWx0ZXIgJS5vYmosICReKQorCislLmRsbDoKKwlsaWIgL25vbG9nbyAvb3V0OiRA ICQoZmlsdGVyICUub2JqLCAkXikKKworYWxsOiB0YXAubGliIHRlc3RzCisKK3RhcC5saWI6 IHRhcC5vYmoKKwordGFwLm9iajogdGFwLmMgdGFwLmgKKwordGVzdHM6ICQoVEVTVFMpCisK KyQoVEVTVFMpOiAlLmV4ZTogJS5vYmogdGFwLmxpYgorCiskKHBhdHN1YnN0ICUuZXhlLCAl Lm9iaiwgJChURVNUUykpOiAlLm9iajogJS5jIHRhcC5oCisKK2NsZWFuOgorCXJtIC1yZiAq Lm9iaiB0Lyoub2JqIHRhcC5saWIgJChURVNUUykKKworY2hlY2sgdGVzdDogYWxsCisJcHJv dmUKKworLlBIT05ZOiBhbGwgY2xlYW4gY2hlY2sgdGVzdCB0ZXN0cworCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1kIGIvc3JjL3Rlc3QvbGlidGFwL1JFQURNRS5t ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMzMmQ1MjZjMDgK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9saWJ0YXAvUkVBRE1FLm1kCkBAIC0wLDAg KzEsMjY4IEBACitOQU1FCis9PT09CisKK2xpYnRhcCAtIFdyaXRlIHRlc3RzIGluIEMKKwor U1lOT1BTSVMKKz09PT09PT09CisKKyAgICAjaW5jbHVkZSA8dGFwLmg+CisKKyAgICBpbnQg bWFpbiAoKSB7CisgICAgICAgIHBsYW4oNSk7CisgICAgICAgIGludCBicm9uemUgPSAxLCBz aWx2ZXIgPSAyLCBnb2xkID0gMzsKKyAgICAgICAgb2soYnJvbnplIDwgc2lsdmVyLCAiYnJv bnplIGlzIGxlc3MgdGhhbiBzaWx2ZXIiKTsKKyAgICAgICAgb2soYnJvbnplID4gc2lsdmVy LCAibm90IHF1aXRlIik7CisgICAgICAgIGlzKCJnb2xkIiwgImdvbGQiLCAiZ29sZCBpcyBn b2xkIik7CisgICAgICAgIGNtcF9vayhzaWx2ZXIsICI8IiwgZ29sZCwgIiVkIDw9ICVkIiwg c2lsdmVyLCBnb2xkKTsKKyAgICAgICAgbGlrZSgicGxhdGludW0iLCAiLippbnVtIiwgInBs YXRpbnVtIG1hdGNoZXMgLippbnVtIik7CisgICAgICAgIGRvbmVfdGVzdGluZygpOworICAg IH0KKworcmVzdWx0cyBpbjoKKworICAgIDEuLjUKKyAgICBvayAxIC0gYnJvbnplIGlzIGxl c3MgdGhhbiBzaWx2ZXIKKyAgICBub3Qgb2sgMiAtIG5vdCBxdWl0ZQorICAgICMgICBGYWls ZWQgdGVzdCAnbm90IHF1aXRlJworICAgICMgICBhdCB0L3N5bm9wc2lzLmMgbGluZSA3Lgor ICAgIG9rIDMgLSBnb2xkIGlzIGdvbGQKKyAgICBvayA0IC0gMiA8PSAzCisgICAgb2sgNSAt IHBsYXRpbnVtIG1hdGNoZXMgLippbnVtCisgICAgIyBMb29rcyBsaWtlIHlvdSBmYWlsZWQg MSB0ZXN0IG9mIDUgcnVuLgorCitERVNDUklQVElPTgorPT09PT09PT09PT0KKwordGFwIGlz IGFuIGVhc3kgdG8gcmVhZCBhbmQgZWFzeSB0byB3cml0ZSB3YXkgb2YgY3JlYXRpbmcgdGVz dHMgZm9yCit5b3VyIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgY3JlYXRlcyBmdW5jdGlvbnMg dGhhdCBjYW4gYmUgdXNlZCB0bworZ2VuZXJhdGUgaXQgZm9yIHlvdXIgQyBwcm9ncmFtcy4g SXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgbWFjcm9zCit0aGF0IGluY2x1ZGUgZmlsZSBhbmQg bGluZSBpbmZvIGF1dG9tYXRpY2FsbHksIGFuZCBtYWtlcyBpdCBzbyB0aGF0Cit0aGUgZm9y bWF0IG1lc3NhZ2Ugb2YgZWFjaCB0ZXN0IGlzIG9wdGlvbmFsLiBJdCBpcyBtb3N0bHkgYmFz ZWQgb24KK3RoZSBUZXN0OjpNb3JlIFBlcmwgbW9kdWxlLgorCitJTlNUQUxMCis9PT09PT09 CisKK09uICoqVW5peCoqIHN5c3RlbXM6CisKKyAgICAkIG1ha2UKKyAgICAkIG1ha2UgaW5z dGFsbAorCitGb3IgbW9yZSBkZXRhaWxlZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIChl ZywgZm9yICoqV2luZG93cyoqKSwgc2VlIGBJTlNUQUxMYC4KKworRlVOQ1RJT05TCis9PT09 PT09PT0KKworLSAgIHBsYW4odGVzdHMpCistICAgcGxhbihOT19QTEFOKQorLSAgIHBsYW4o U0tJUF9BTEwpOworLSAgIHBsYW4oU0tJUF9BTEwsIGZtdCwgLi4uKQorCisgICAgVXNlIHRo aXMgdG8gc3RhcnQgYSBzZXJpZXMgb2YgdGVzdHMuIFdoZW4geW91IGtub3cgaG93IG1hbnkg dGVzdHMgdGhlcmUKKyAgICB3aWxsIGJlLCB5b3UgY2FuIHB1dCBhIG51bWJlciBhcyBhIG51 bWJlciBvZiB0ZXN0cyB5b3UgZXhwZWN0IHRvIHJ1bi4gSWYKKyAgICB5b3UgZG8gbm90IGtu b3cgaG93IG1hbnkgdGVzdHMgdGhlcmUgd2lsbCBiZSwgeW91IGNhbiB1c2UgcGxhbihOT19Q TEFOKQorICAgIG9yIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24uIFdoZW4geW91IHBhc3MgaXQg YSBudW1iZXIgb2YgdGVzdHMgdG8gcnVuLCBhCisgICAgbWVzc2FnZSBzaW1pbGFyIHRvIHRo ZSBmb2xsb3dpbmcgd2lsbCBhcHBlYXIgaW4gdGhlIG91dHB1dDoKKworICAgICAgICAxLi41 CisKKyAgICBJZiB5b3UgcGFzcyBpdCBTS0lQX0FMTCwgdGhlIHdob2xlIHRlc3Qgd2lsbCBi ZSBza2lwcGVkLgorCistICAgb2sodGVzdCkKKy0gICBvayh0ZXN0LCBmbXQsIC4uLikKKwor ICAgIFNwZWNpZnkgYSB0ZXN0LiB0aGUgdGVzdCBjYW4gYmUgYW55IHN0YXRlbWVudCByZXR1 cm5pbmcgYSB0cnVlIG9yIGZhbHNlCisgICAgdmFsdWUuIFlvdSBtYXkgb3B0aW9uYWxseSBw YXNzIGEgZm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIHRoZSB0ZXN0LgorCisgICAgICAgIG9r KHIgPSByZWFkZXJfbmV3KCJPZiBNaWNlIGFuZCBNZW4iKSwgImNyZWF0ZSBhIG5ldyByZWFk ZXIiKTsKKyAgICAgICAgb2socmVhZGVyX2dvX3RvX3BhZ2UociwgNTUpLCAiY2FuIHR1cm4g dGhlIHBhZ2UiKTsKKyAgICAgICAgb2soci0+cGFnZSA9PSA1NSwgInBhZ2UgdHVybmVkIHRv IHRoZSByaWdodCBvbmUiKTsKKworICAgIFNob3VsZCBwcmludCBvdXQ6CisKKyAgICAgICAg b2sgMSAtIGNyZWF0ZSBhIG5ldyByZWFkZXIKKyAgICAgICAgb2sgMiAtIGNhbiB0dXJuIHRo ZSBwYWdlCisgICAgICAgIG9rIDMgLSBwYWdlIHR1cm5lZCB0byB0aGUgcmlnaHQgb25lCisK KyAgICBPbiBmYWlsdXJlLCBhIGRpYWdub3N0aWMgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQg b3V0LgorCisgICAgICAgIG5vdCBvayAzIC0gcGFnZSB0dXJuZWQgdG8gdGhlIHJpZ2h0IG9u ZQorICAgICAgICAjICAgRmFpbGVkIHRlc3QgJ3BhZ2UgdHVybmVkIHRvIHRoZSByaWdodCBv bmUnCisgICAgICAgICMgICBhdCByZWFkZXIuYyBsaW5lIDEzLgorCistICAgaXMoZ290LCBl eHBlY3RlZCkKKy0gICBpcyhnb3QsIGV4cGVjdGVkLCBmbXQsIC4uLikKKy0gICBpc250KGdv dCwgdW5leHBlY3RlZCkKKy0gICBpc250KGdvdCwgdW5leHBlY3RlZCwgZm10LCAuLi4pCisK KyAgICBUZXN0cyB0aGF0IHRoZSBzdHJpbmcgeW91IGdvdCBpcyB3aGF0IHlvdSBleHBlY3Rl ZC4gd2l0aCBpc250LCBpdCBpcyB0aGUKKyAgICByZXZlcnNlLgorCisgICAgICAgIGlzKCJ0 aGlzIiwgInRoYXQiLCAidGhpcyBpcyB0aGF0Iik7CisKKyAgICBwcmludHM6CisKKyAgICAg ICAgbm90IG9rIDEgLSB0aGlzIGlzIHRoYXQKKyAgICAgICAgIyAgIEZhaWxlZCB0ZXN0ICd0 aGlzIGlzIHRoYXQnCisgICAgICAgICMgICBhdCBpcy5jIGxpbmUgNi4KKyAgICAgICAgIyAg ICAgICAgICBnb3Q6ICd0aGlzJworICAgICAgICAjICAgICBleHBlY3RlZDogJ3RoYXQnCisK Ky0gICBjbXBfb2soYSwgb3AsIGIpCistICAgY21wX29rKGEsIG9wLCBiLCBmbXQsIC4uLikK KworICAgIENvbXBhcmVzIHR3byBpbnRzIHdpdGggYW55IGJpbmFyeSBvcGVyYXRvciB0aGF0 IGRvZXNuJ3QgcmVxdWlyZSBhbiBsdmFsdWUuCisgICAgVGhpcyBpcyBuaWNlIHRvIHVzZSBz aW5jZSBpdCBwcm92aWRlcyBhIGJldHRlciBlcnJvciBtZXNzYWdlIHRoYW4gYW4KKyAgICBl cXVpdmFsZW50IG9rLgorCisgICAgICAgIGNtcF9vayg0MjAsICI+IiwgNjY2KTsKKworICAg IHByaW50czoKKworICAgICAgICBub3Qgb2sgMQorICAgICAgICAjICAgRmFpbGVkIHRlc3Qg YXQgY21wb2suYyBsaW5lIDUuCisgICAgICAgICMgICAgIDQyMAorICAgICAgICAjICAgICAg ICAgPgorICAgICAgICAjICAgICA2NjYKKworLSAgIGNtcF9tZW0oZ290LCBleHBlY3RlZCwg bikKKy0gICBjbXBfbWVtKGdvdCwgZXhwZWN0ZWQsIG4sIGZtdCwgLi4uKQorCisgICAgVGVz dHMgdGhhdCB0aGUgZmlyc3QgbiBieXRlcyBvZiB0aGUgbWVtb3J5IHlvdSBnb3QgaXMgd2hh dCB5b3UgZXhwZWN0ZWQuCisgICAgTlVMTCBwb2ludGVycyBmb3IgZ290IGFuZCBleHBlY3Rl ZCBhcmUgaGFuZGxlZCAoaWYgZWl0aGVyIGlzIE5VTEwsCisgICAgdGhlIHRlc3QgZmFpbHMp LCBidXQgeW91IG5lZWQgdG8gZW5zdXJlIG4gaXMgbm90IHRvbyBsYXJnZS4KKworICAgICAg ICBjaGFyICphID0gImZvbyI7CisgICAgICAgIGNoYXIgKmIgPSAiYmFyIjsKKyAgICAgICAg Y21wX21lbShhLCBiLCAzKQorCisgICAgcHJpbnRzCisKKyAgICAgICAgbm90IG9rIDEKKyAg ICAgICAgIyAgIEZhaWxlZCB0ZXN0IGF0IHQvY21wX21lbS5jIGxpbmUgOS4KKyAgICAgICAg IyAgICAgRGlmZmVyZW5jZSBzdGFydHMgYXQgb2Zmc2V0IDAKKyAgICAgICAgIyAgICAgICAg ICBnb3Q6IDB4NjYKKyAgICAgICAgIyAgICAgZXhwZWN0ZWQ6IDB4NjIKKworLSAgIGxpa2Uo Z290LCBleHBlY3RlZCkKKy0gICBsaWtlKGdvdCwgZXhwZWN0ZWQsIGZtdCwgLi4uKQorLSAg IHVubGlrZShnb3QsIHVuZXhwZWN0ZWQpCistICAgdW5saWtlKGdvdCwgdW5leHBlY3RlZCwg Zm10LCAuLi4pCisKKyAgICBUZXN0cyB0aGF0IHRoZSBzdHJpbmcgeW91IGdvdCBtYXRjaGVz IHRoZSBleHBlY3RlZCBleHRlbmRlZCBQT1NJWCByZWdleC4KKyAgICB1bmxpa2UgaXMgdGhl IHJldmVyc2UuIFRoZXNlIG1hY3JvcyBhcmUgdGhlIGVxdWl2YWxlbnQgb2YgYSBza2lwIG9u CisgICAgV2luZG93cy4KKworICAgICAgICBsaWtlKCJzdHJhbmdlciIsICJecy4ocikuKlxc MSQiLCAibWF0Y2hlcyB0aGUgcmVnZXgiKTsKKworICAgIHByaW50czoKKworICAgICAgICBv ayAxIC0gbWF0Y2hlcyB0aGUgcmVnZXgKKworLSAgIHBhc3MoKQorLSAgIHBhc3MoZm10LCAu Li4pCistICAgZmFpbCgpCistICAgZmFpbChmbXQsIC4uLikKKworICAgIFNwZWNpeSB0aGF0 IGEgdGVzdCBzdWNjZWVkZWQgb3IgZmFpbGVkLiBVc2UgdGhlc2Ugd2hlbiB0aGUgc3RhdGVt ZW50IGlzCisgICAgbG9uZ2VyIHRoYW4geW91IGNhbiBmaXQgaW50byB0aGUgYXJndW1lbnQg Z2l2ZW4gdG8gYW4gb2soKSB0ZXN0LgorCistICAgZGllc19vayhjb2RlKQorLSAgIGRpZXNf b2soY29kZSwgZm10LCAuLi4pCistICAgbGl2ZXNfb2soY29kZSkKKy0gICBsaXZlc19vayhj b2RlLCBmbXQsIC4uLikKKworICAgIFRlc3RzIHdoZXRoZXIgdGhlIGdpdmVuIGNvZGUgY2F1 c2VzIHlvdXIgcHJvZ3JhbSB0byBleGl0LiBUaGUgY29kZSBnZXRzCisgICAgcGFzc2VkIHRv IGEgbWFjcm8gdGhhdCB3aWxsIHRlc3QgaXQgaW4gYSBmb3JrZWQgcHJvY2Vzcy4gSWYgdGhl IGNvZGUKKyAgICBzdWNjZWVkcyBpdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBwYXJlbnQg cHJvY2Vzcy4gWW91IGNhbiB0ZXN0IHRoaW5ncworICAgIGxpa2UgcGFzc2luZyBhIGZ1bmN0 aW9uIGEgbnVsbCBwb2ludGVyIGFuZCBtYWtlIHN1cmUgaXQgZG9lc250CisgICAgZGVyZWZl cmVuY2UgaXQgYW5kIGNyYXNoLgorCisgICAgICAgIGRpZXNfb2soe2Fib3J0KCk7fSwgImFi b3J0IGRvZXMgY2xvc2UgeW91ciBwcm9ncmFtIik7CisgICAgICAgIGRpZXNfb2soe2ludCB4 ID0gMC8wO30sICJkaXZpZGUgYnkgemVybyBjcmFzaCIpOworICAgICAgICBsaXZlc19vayh7 cG93KDMuMCwgNS4wKTt9LCAibm90aGluZyB3cm9uZyB3aXRoIHRha2luZyAzKio1Iik7CisK KyAgICBPbiBXaW5kb3dzLCB0aGVzZSBtYWNyb3MgYXJlIHRoZSBlcXVpdmFsZW50IG9mIGEg c2tpcC4KKworLSAgIGRvbmVfdGVzdGluZygpCisKKyAgICBTdW1tYXJpemVzIHRoZSB0ZXN0 cyB0aGF0IG9jY3VycmVkIGFuZCBleGl0cyB0aGUgbWFpbiBmdW5jdGlvbi4gSWYKKyAgICB0 aGVyZSB3YXMgbm8gcGxhbiwgaXQgd2lsbCBwcmludCBvdXQgdGhlIG51bWJlciBvZiB0ZXN0 cyBhcy4KKworICAgICAgICAxLi41CisKKyAgICBJdCB3aWxsIGFsc28gcHJpbnQgYSBkaWFn bm9zdGljIG1lc3NhZ2UgYWJvdXQgaG93IG1hbnkKKyAgICBmYWlsdXJlcyB0aGVyZSB3ZXJl LgorCisgICAgICAgICMgTG9va3MgbGlrZSB5b3UgZmFpbGVkIDIgdGVzdHMgb2YgMyBydW4u CisKKyAgICBJZiBhbGwgcGxhbm5lZCB0ZXN0cyB3ZXJlIHN1Y2Nlc3NmdWwsIGl0IHdpbGwg cmV0dXJuIDAuIElmIGFueQorICAgIHRlc3QgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIDEuIElm IHRoZXkgYWxsIHBhc3NlZCwgYnV0IHRoZXJlCisgICAgd2VyZSBtaXNzaW5nIHRlc3RzLCBp dCB3aWxsIHJldHVybiAyLgorCistICAgZGlhZyhmbXQsIC4uLikKKworICAgIHByaW50IG91 dCBhIG1lc3NhZ2UgdG8gdGhlIHRhcCBvdXRwdXQgb24gc3Rkb3V0LiBFYWNoIGxpbmUgaXMK KyAgICBwcmVjZWVkZWQgYnkgYSAiIyAiIHNvIHRoYXQgeW91IGtub3cgaXRzIGEgZGlhZ25v c3RpYyBtZXNzYWdlLgorCisgICAgICAgIGRpYWcoIlRoaXMgaXNcbmEgZGlhZ1xudG8gZGVz Y3JpYmVcbnNvbWV0aGluZy4iKTsKKworICAgIHByaW50czoKKworICAgICAgICAjIFRoaXMg aXMKKyAgICAgICAgIyBhIGRpYWcKKyAgICAgICAgIyB0byBkZXNjcmliZQorICAgICAgICAj IHNvbWV0aGluZworCisgICAgb2soKSBhbmQgdGhpcyBmdW5jdGlvbiByZXR1cm4gYW4gaW50 IHNvIHlvdSBjYW4gdXNlIGl0IGxpa2U6CisKKyAgICAgICAgb2soMCkgfHwgZGlhZygiZG9o ISIpOworCistICAgc2tpcCh0ZXN0LCBuKQorLSAgIHNraXAodGVzdCwgbiwgZm10LCAuLi4p CistICAgZW5kX3NraXAKKworICAgIFNraXAgYSBzZXJpZXMgb2YgbiB0ZXN0cyBpZiB0ZXN0 IGlzIHRydWUuIFlvdSBtYXkgZ2l2ZSBhIHJlYXNvbiB3aHkgeW91IGFyZQorICAgIHNraXBw aW5nIHRoZW0gb3Igbm90LiBUaGUgKHBvc3NpYmx5KSBza2lwcGVkIHRlc3RzIG11c3Qgb2Nj dXIgYmV0d2VlbiB0aGUKKyAgICBza2lwIGFuZCBlbmRfc2tpcCBtYWNyb3MuCisKKyAgICAg ICAgc2tpcChUUlVFLCAyKTsKKyAgICAgICAgb2soMSk7CisgICAgICAgIG9rKDApOworICAg ICAgICBlbmRfc2tpcDsKKworICAgIHByaW50czoKKworICAgICAgICBvayAxICMgc2tpcAor ICAgICAgICBvayAyICMgc2tpcAorCistICAgdG9kbygpCistICAgdG9kbyhmbXQsIC4uLikK Ky0gICBlbmRfdG9kbworCisgICAgU3BlY2lmaWVzIGEgc2VyaWVzIG9mIHRlc3RzIHRoYXQg eW91IGV4cGVjdCB0byBmYWlsIGJlY2F1c2UgdGhleSBhcmUgbm90CisgICAgeWV0IGltcGxl bWVudGVkLgorCisgICAgICAgIHRvZG8oKQorICAgICAgICBvaygwKTsKKyAgICAgICAgZW5k X3RvZG87CisKKyAgICBwcmludHM6CisKKyAgICAgICAgbm90IG9rIDEgIyBUT0RPCisgICAg ICAgICMgICBGYWlsZWQgKFRPRE8pIHRlc3QgYXQgdG9kby5jIGxpbmUgNworCistICAgQkFJ TF9PVVQoKQorLSAgIEJBSUxfT1VUKGZtdCwgLi4uKQorCisgICAgSW1tZWRpYXRlbHkgc3Rv cHMgYWxsIHRlc3RpbmcuCisKKyAgICAgICAgQkFJTF9PVVQoIkNhbid0IGdvIG5vIGZ1cnRo ZXIiKTsKKworICAgIHByaW50cworCisgICAgICAgIEJhaWwgb3V0ISAgQ2FuJ3QgZ28gbm8g ZnVydGhlcgorCisgICAgYW5kIGV4aXRzIHdpdGggMjU1LgorCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9saWJ0YXAvdGFwLmMgYi9zcmMvdGVzdC9saWJ0YXAvdGFwLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwNmU0MDAwMTU2Ci0tLSAvZGV2L251bGwK KysrIGIvc3JjL3Rlc3QvbGlidGFwL3RhcC5jCkBAIC0wLDAgKzEsNDIxIEBACisvKgorbGli dGFwIC0gV3JpdGUgdGVzdHMgaW4gQworQ29weXJpZ2h0IDIwMTIgSmFrZSBHZWxibWFuIDxn ZWxibWFuQGdtYWlsLmNvbT4KK1RoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQ TAorKi8KKworI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UgMQorCisjaW5jbHVkZSA8c3RkYXJn Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInRhcC5oIgorCisjaWZuZGVmIF9XSU4zMgorI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg PHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxyZWdleC5oPgorCisjaWZuZGVmIE1BUF9BTk9O WU1PVVMKKyNpZmRlZiBNQVBfQU5PTgorI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9O CisjZWxzZQorI2Vycm9yICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBtYXBwaW5nIGFub255 bW91cyBwYWdlcyIKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19H TlVDX18pIHx8IGRlZmluZWQoX19jbGFuZ19fKQorI2RlZmluZSBQUklOVEZfQVRUUihmbXRh cmcsIGZpcnN0dmFyYXJnKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCBmbXRhcmcs IGZpcnN0dmFyYXJnKSkpCisjZWxzZQorI2RlZmluZSBQUklOVEZfQVRUUihmbXRhcmcsIGZp cnN0dmFyYXJnKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZXhwZWN0ZWRfdGVzdHMgPSBOT19Q TEFOOworc3RhdGljIGludCBmYWlsZWRfdGVzdHM7CitzdGF0aWMgaW50IGN1cnJlbnRfdGVz dDsKK3N0YXRpYyBjaGFyICp0b2RvX21lc2c7CisKK3N0YXRpYyBjaGFyICp2c3RyZHVwZihj b25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykgUFJJTlRGX0FUVFIoMSwwKTsKKwordm9p ZCB0YXBfcGxhbihpbnQgdGVzdHMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBQUklOVEZfQVRU UigyLCAzKTsKKworaW50IHZva19hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUs IGludCB0ZXN0LCBjb25zdCBjaGFyICpmbXQsCisJCQkgICB2YV9saXN0IGFyZ3MpIFBSSU5U Rl9BVFRSKDQsMCk7CisKK2ludCBva19hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50IGxp bmUsIGludCB0ZXN0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlQUklOVEZfQVRUUig0LCA1 KTsKKworaW50IGlzX2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3Qg Y2hhciAqZ290LCBjb25zdCBjaGFyICpleHBlY3RlZCwKKwkJCSAgY29uc3QgY2hhciAqZm10 LCAuLi4pIFBSSU5URl9BVFRSKDUsIDYpOworCitpbnQgaXNudF9hdF9sb2MoY29uc3QgY2hh ciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwKKwkJCQljb25zdCBjaGFyICpl eHBlY3RlZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJUFJJTlRGX0FUVFIoNSwgNik7CisK K2ludCBjbXBfb2tfYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgYSwg Y29uc3QgY2hhciAqb3AsIGludCBiLAorCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJ UFJJTlRGX0FUVFIoNiwgNyk7CisKK2ludCBjbXBfbWVtX2F0X2xvYyhjb25zdCBjaGFyICpm aWxlLCBpbnQgbGluZSwgY29uc3Qgdm9pZCAqZ290LAorCQkJCSAgIGNvbnN0IHZvaWQgKmV4 cGVjdGVkLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJUFJJTlRGX0FUVFIo NiwgNyk7CisKK2ludCBkaWFnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBQUklOVEZfQVRUUigx LCAyKTsKKworaW50IGJhaWxfb3V0KGludCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4u KQorCVBSSU5URl9BVFRSKDIsIDMpOworCit2b2lkIHRhcF9za2lwKGludCBuLCBjb25zdCBj aGFyICpmbXQsIC4uLikKKwlQUklOVEZfQVRUUigyLCAzKTsKKwordm9pZCB0YXBfdG9kbyhp bnQgaWdub3JlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlQUklOVEZfQVRUUigyLCAzKTsK KworaW50IGxpa2VfYXRfbG9jKGludCBmb3JfbWF0Y2gsIGNvbnN0IGNoYXIgKmZpbGUsIGlu dCBsaW5lLCBjb25zdCBjaGFyICpnb3QsCisJCQkJY29uc3QgY2hhciAqZXhwZWN0ZWQsIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQorCVBSSU5URl9BVFRSKDYsIDcpOworCitzdGF0aWMgY2hh ciAqCit2c3RyZHVwZihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwljaGFy ICpzdHI7CisJaW50IHNpemU7CisJdmFfbGlzdCBhcmdzMjsKKwl2YV9jb3B5KGFyZ3MyLCBh cmdzKTsKKwlpZiAoIWZtdCkKKwkJZm10ID0gIiI7CisJc2l6ZSA9IHZzbnByaW50ZihOVUxM LCAwLCBmbXQsIGFyZ3MyKSArIDI7CisJc3RyID0gbWFsbG9jKHNpemUpOworCWlmICghc3Ry KSB7CisJCXBlcnJvcigibWFsbG9jIGVycm9yIik7CisJCWV4aXQoMSk7CisJfQorCXZzcHJp bnRmKHN0ciwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJnczIpOworCXJldHVybiBzdHI7Cit9 CisKK3ZvaWQKK3RhcF9wbGFuKGludCB0ZXN0cywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7 CisJZXhwZWN0ZWRfdGVzdHMgPSB0ZXN0czsKKwlpZiAodGVzdHMgPT0gU0tJUF9BTEwpIHsK KwkJY2hhciAqd2h5OworCQl2YV9saXN0IGFyZ3M7CisJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7 CisJCXdoeSA9IHZzdHJkdXBmKGZtdCwgYXJncyk7CisJCXZhX2VuZChhcmdzKTsKKwkJcHJp bnRmKCIxLi4wICIpOworCQlkaWFnKCJTS0lQICVzXG4iLCB3aHkpOworCQlleGl0KDApOwor CX0KKwlpZiAodGVzdHMgIT0gTk9fUExBTikgeworCQlwcmludGYoIjEuLiVkXG4iLCB0ZXN0 cyk7CisJfQorfQorCitpbnQKK3Zva19hdF9sb2MoY29uc3QgY2hhciAqZmlsZSwgaW50IGxp bmUsIGludCB0ZXN0LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwljaGFy ICpuYW1lID0gdnN0cmR1cGYoZm10LCBhcmdzKTsKKwlpZiAoIXRlc3QpIHsKKwkJcHJpbnRm KCJub3QgIik7CisJfQorCXByaW50Zigib2sgJWQiLCArK2N1cnJlbnRfdGVzdCk7CisJaWYg KCpuYW1lKQorCQlwcmludGYoIiAtICVzIiwgbmFtZSk7CisJaWYgKHRvZG9fbWVzZykgewor CQlwcmludGYoIiAjIFRPRE8iKTsKKwkJaWYgKCp0b2RvX21lc2cpCisJCQlwcmludGYoIiAl cyIsIHRvZG9fbWVzZyk7CisJfQorCXByaW50ZigiXG4iKTsKKwlpZiAoIXRlc3QpIHsKKwkJ cHJpbnRmKCIjICAgRmFpbGVkICIpOworCQlpZiAodG9kb19tZXNnKQorCQkJcHJpbnRmKCIo VE9ETykgIik7CisJCXByaW50ZigidGVzdCAiKTsKKwkJaWYgKCpuYW1lKQorCQkJcHJpbnRm KCInJXMnXG4jICAgIiwgbmFtZSk7CisJCXByaW50ZigiYXQgJXMgbGluZSAlZC5cbiIsIGZp bGUsIGxpbmUpOworCQlpZiAoIXRvZG9fbWVzZykKKwkJCWZhaWxlZF90ZXN0cysrOworCX0K KwlmcmVlKG5hbWUpOworCXJldHVybiB0ZXN0OworfQorCitpbnQKK29rX2F0X2xvYyhjb25z dCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IHRlc3QsIGNvbnN0IGNoYXIgKmZtdCwgLi4u KQoreworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZva19hdF9s b2MoZmlsZSwgbGluZSwgdGVzdCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0 dXJuIHRlc3Q7Cit9CisKK3N0YXRpYyBpbnQKK215c3RyY21wKGNvbnN0IGNoYXIgKmEsIGNv bnN0IGNoYXIgKmIpCit7CisJcmV0dXJuIGEgPT0gYiA/IDAgOiAhYSA/IC0xIDogIWIgPyAx IDogc3RyY21wKGEsIGIpOworfQorCisjZGVmaW5lIGVxKGEsIGIpICghbXlzdHJjbXAoYSwg YikpCisjZGVmaW5lIG5lKGEsIGIpIChteXN0cmNtcChhLCBiKSkKKworaW50Citpc19hdF9s b2MoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwgY29uc3Qg Y2hhciAqZXhwZWN0ZWQsCisJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHRl c3QgPSBlcShnb3QsIGV4cGVjdGVkKTsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJn cywgZm10KTsKKwl2b2tfYXRfbG9jKGZpbGUsIGxpbmUsIHRlc3QsIGZtdCwgYXJncyk7CisJ dmFfZW5kKGFyZ3MpOworCWlmICghdGVzdCkgeworCQlkaWFnKCIgICAgICAgICBnb3Q6ICcl cyciLCBnb3QpOworCQlkaWFnKCIgICAgZXhwZWN0ZWQ6ICclcyciLCBleHBlY3RlZCk7CisJ fQorCXJldHVybiB0ZXN0OworfQorCitpbnQKK2lzbnRfYXRfbG9jKGNvbnN0IGNoYXIgKmZp bGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpnb3QsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAor CQkJY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHRlc3QgPSBuZShnb3QsIGV4cGVj dGVkKTsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2b2tfYXRf bG9jKGZpbGUsIGxpbmUsIHRlc3QsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlm ICghdGVzdCkgeworCQlkaWFnKCIgICAgICAgICBnb3Q6ICclcyciLCBnb3QpOworCQlkaWFn KCIgICAgZXhwZWN0ZWQ6IGFueXRoaW5nIGVsc2UiKTsKKwl9CisJcmV0dXJuIHRlc3Q7Cit9 CisKK2ludAorY21wX29rX2F0X2xvYyhjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50 IGEsIGNvbnN0IGNoYXIgKm9wLCBpbnQgYiwKKwkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4p Cit7CisJaW50IHRlc3QgPSBlcShvcCwgInx8IikgPyBhIHx8IGIgOgorCQllcShvcCwgIiYm IikJCT8gYSAmJiBiIDoKKwkJZXEob3AsICJ8IikJCQk/IGEgfCBiIDoKKwkJZXEob3AsICJe IikJCQk/IGEgXiBiIDoKKwkJZXEob3AsICImIikJCQk/IGEgJiBiIDoKKwkJZXEob3AsICI9 PSIpCQk/IGEgPT0gYiA6CisJCWVxKG9wLCAiIT0iKQkJPyBhICE9IGIgOgorCQllcShvcCwg IjwiKQkJCT8gYSA8IGIgOgorCQllcShvcCwgIj4iKQkJCT8gYSA+IGIgOgorCQllcShvcCwg Ijw9IikJCT8gYSA8PSBiIDoKKwkJZXEob3AsICI+PSIpCQk/IGEgPj0gYiA6CisJCWVxKG9w LCAiPDwiKQkJPyBhIDw8IGIgOgorCQllcShvcCwgIj4+IikJCT8gYSA+PiBiIDoKKwkJZXEo b3AsICIrIikJCQk/IGEgKyBiIDoKKwkJZXEob3AsICItIikJCQk/IGEgLSBiIDoKKwkJZXEo b3AsICIqIikJCQk/IGEgKiBiIDoKKwkJZXEob3AsICIvIikJCQk/IGEgLyBiIDoKKwkJZXEo b3AsICIlIikJCQk/IGEgJSBiIDoKKwkJCQkJCQkgIGRpYWcoInVucmVjb2duaXplZCBvcGVy YXRvciAnJXMnIiwgb3ApOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQp OworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgdGVzdCwgZm10LCBhcmdzKTsKKwl2YV9lbmQo YXJncyk7CisJaWYgKCF0ZXN0KSB7CisJCWRpYWcoIiAgICAlZCIsIGEpOworCQlkaWFnKCIg ICAgICAgICVzIiwgb3ApOworCQlkaWFnKCIgICAgJWQiLCBiKTsKKwl9CisJcmV0dXJuIHRl c3Q7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfbWVtX2RpZmYoY29uc3QgY2hhciAqYSwgY29u c3QgY2hhciAqYiwgc2l6ZV90IG4sIHNpemVfdCAqb2Zmc2V0KQoreworCXNpemVfdCBpOwor CWlmIChhID09IGIpCisJCXJldHVybiAwOworCWlmICghYSB8fCAhYikKKwkJcmV0dXJuIDI7 CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoYVtpXSAhPSBiW2ldKSB7CisJ CQkqb2Zmc2V0ID0gaTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQor CitpbnQKK2NtcF9tZW1fYXRfbG9jKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25z dCB2b2lkICpnb3QsCisJCQkgICBjb25zdCB2b2lkICpleHBlY3RlZCwgc2l6ZV90IG4sIGNv bnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXNpemVfdCBvZmZzZXQ7CisJaW50IGRpZmYgPSBm aW5kX21lbV9kaWZmKGdvdCwgZXhwZWN0ZWQsIG4sICZvZmZzZXQpOworCXZhX2xpc3QgYXJn czsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZva19hdF9sb2MoZmlsZSwgbGluZSwgIWRp ZmYsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlmIChkaWZmID09IDEpIHsKKwkJ ZGlhZygiICAgIERpZmZlcmVuY2Ugc3RhcnRzIGF0IG9mZnNldCAlbHUiLCBvZmZzZXQpOwor CQlkaWFnKCIgICAgICAgICBnb3Q6IDB4JTAyeCIsICgoY29uc3QgdW5zaWduZWQgY2hhciAq KWdvdClbb2Zmc2V0XSk7CisJCWRpYWcoIiAgICBleHBlY3RlZDogMHglMDJ4IiwgKChjb25z dCB1bnNpZ25lZCBjaGFyICopZXhwZWN0ZWQpW29mZnNldF0pOworCX0gZWxzZSBpZiAoZGlm ZiA9PSAyKSB7CisJCWRpYWcoIiAgICAgICAgIGdvdDogJXMiLCBnb3QgPyAibm90IE5VTEwi IDogIk5VTEwiKTsKKwkJZGlhZygiICAgIGV4cGVjdGVkOiAlcyIsIGV4cGVjdGVkID8gIm5v dCBOVUxMIiA6ICJOVUxMIik7CisJfQorCXJldHVybiAhZGlmZjsKK30KKworaW50CitkaWFn KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwljaGFyICptZXNn LCAqbGluZTsKKwlpbnQgaTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWlmICghZm10KSB7 CisJCXZhX2VuZChhcmdzKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lc2cgPSB2c3RyZHVwZihm bXQsIGFyZ3MpOworCWxpbmUgPSBtZXNnOworCWZvciAoaSA9IDA7ICpsaW5lOyBpKyspIHsK KwkJY2hhciBjID0gbWVzZ1tpXTsKKwkJaWYgKCFjIHx8IGMgPT0gJ1xuJykgeworCQkJbWVz Z1tpXSA9ICdcMCc7CisJCQlwcmludGYoIiMgJXNcbiIsIGxpbmUpOworCQkJaWYgKCFjKQor CQkJCWJyZWFrOworCQkJbWVzZ1tpXSA9IGM7CisJCQlsaW5lID0gbWVzZyArIGkgKyAxOwor CQl9CisJfQorCWZyZWUobWVzZyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiAwOworfQor CitpbnQKK2V4aXRfc3RhdHVzKHZvaWQpCit7CisJaW50IHJldHZhbCA9IDA7CisJaWYgKGV4 cGVjdGVkX3Rlc3RzID09IE5PX1BMQU4pIHsKKwkJcHJpbnRmKCIxLi4lZFxuIiwgY3VycmVu dF90ZXN0KTsKKwl9IGVsc2UgaWYgKGN1cnJlbnRfdGVzdCAhPSBleHBlY3RlZF90ZXN0cykg eworCQlkaWFnKCJMb29rcyBsaWtlIHlvdSBwbGFubmVkICVkIHRlc3QlcyBidXQgcmFuICVk LiIsIGV4cGVjdGVkX3Rlc3RzLAorCQkJIGV4cGVjdGVkX3Rlc3RzID4gMSA/ICJzIiA6ICIi LCBjdXJyZW50X3Rlc3QpOworCQlyZXR2YWwgPSAyOworCX0KKwlpZiAoZmFpbGVkX3Rlc3Rz KSB7CisJCWRpYWcoIkxvb2tzIGxpa2UgeW91IGZhaWxlZCAlZCB0ZXN0JXMgb2YgJWQgcnVu LiIsIGZhaWxlZF90ZXN0cywKKwkJCSBmYWlsZWRfdGVzdHMgPiAxID8gInMiIDogIiIsIGN1 cnJlbnRfdGVzdCk7CisJCXJldHZhbCA9IDE7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisK K2ludAorYmFpbF9vdXQoaW50IGlnbm9yZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJ dmFfbGlzdCBhcmdzOworCSh2b2lkKWlnbm9yZTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOwor CXByaW50ZigiQmFpbCBvdXQhICAiKTsKKwl2cHJpbnRmKGZtdCwgYXJncyk7CisJcHJpbnRm KCJcbiIpOworCXZhX2VuZChhcmdzKTsKKwlleGl0KDI1NSk7CisJcmV0dXJuIDA7Cit9CisK K3ZvaWQKK3RhcF9za2lwKGludCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljaGFy ICp3aHk7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJd2h5ID0g dnN0cmR1cGYoZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJd2hpbGUgKG4tLSA+IDAp IHsKKwkJcHJpbnRmKCJvayAlZCAiLCArK2N1cnJlbnRfdGVzdCk7CisJCWRpYWcoInNraXAg JXNcbiIsIHdoeSk7CisJfQorCWZyZWUod2h5KTsKK30KKwordm9pZAordGFwX3RvZG8oaW50 IGlnbm9yZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCSh2 b2lkKWlnbm9yZTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXRvZG9fbWVzZyA9IHZzdHJk dXBmKGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCit2b2lkCit0YXBfZW5kX3Rv ZG8odm9pZCkKK3sKKwlmcmVlKHRvZG9fbWVzZyk7CisJdG9kb19tZXNnID0gTlVMTDsKK30K KworI2lmbmRlZiBfV0lOMzIKKy8qIENyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgaW50IHRvIGtl ZXAgdHJhY2sgb2Ygd2hldGhlciBhIHBpZWNlIG9mIGNvZGUgZXhlY3V0ZWQKK2RpZXMuIHRv IGJlIHVzZWQgaW4gdGhlIGRpZXNfb2sgYW5kIGxpdmVzX29rIG1hY3Jvcy4gICovCitpbnQK K3RhcF90ZXN0X2RpZWQoaW50IHN0YXR1cykKK3sKKwlzdGF0aWMgaW50ICp0ZXN0X2RpZWQg PSBOVUxMOworCWludCBwcmV2OworCWlmICghdGVzdF9kaWVkKSB7CisJCXRlc3RfZGllZCA9 IG1tYXAoMCwgc2l6ZW9mKGludCksIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkJCQkg TUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKwkJKnRlc3RfZGllZCA9IDA7 CisJfQorCXByZXYgPSAqdGVzdF9kaWVkOworCSp0ZXN0X2RpZWQgPSBzdGF0dXM7CisJcmV0 dXJuIHByZXY7Cit9CisKK2ludAorbGlrZV9hdF9sb2MoaW50IGZvcl9tYXRjaCwgY29uc3Qg Y2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwKKwkJCWNvbnN0IGNoYXIg KmV4cGVjdGVkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgdGVzdDsKKwlyZWdl eF90IHJlOworCXZhX2xpc3QgYXJnczsKKwlpbnQgZXJyID0gcmVnY29tcCgmcmUsIGV4cGVj dGVkLCBSRUdfRVhURU5ERUQpOworCWlmIChlcnIpIHsKKwkJY2hhciBlcnJidWZbMjU2XTsK KwkJcmVnZXJyb3IoZXJyLCAmcmUsIGVycmJ1Ziwgc2l6ZW9mIGVycmJ1Zik7CisJCWZwcmlu dGYoc3RkZXJyLCAiVW5hYmxlIHRvIGNvbXBpbGUgcmVnZXggJyVzJzogJXMgYXQgJXMgbGlu ZSAlZFxuIiwKKwkJCQlleHBlY3RlZCwgZXJyYnVmLCBmaWxlLCBsaW5lKTsKKwkJZXhpdCgy NTUpOworCX0KKwllcnIgPSByZWdleGVjKCZyZSwgZ290LCAwLCBOVUxMLCAwKTsKKwlyZWdm cmVlKCZyZSk7CisJdGVzdCA9IGZvcl9tYXRjaCA/ICFlcnIgOiBlcnI7CisJdmFfc3RhcnQo YXJncywgZm10KTsKKwl2b2tfYXRfbG9jKGZpbGUsIGxpbmUsIHRlc3QsIGZtdCwgYXJncyk7 CisJdmFfZW5kKGFyZ3MpOworCWlmICghdGVzdCkgeworCQlpZiAoZm9yX21hdGNoKSB7CisJ CQlkaWFnKCIgICAgICAgICAgICAgICAgICAgJyVzJyIsIGdvdCk7CisJCQlkaWFnKCIgICAg ZG9lc24ndCBtYXRjaDogJyVzJyIsIGV4cGVjdGVkKTsKKwkJfSBlbHNlIHsKKwkJCWRpYWco IiAgICAgICAgICAgICAgICAgICAnJXMnIiwgZ290KTsKKwkJCWRpYWcoIiAgICAgICAgICBt YXRjaGVzOiAnJXMnIiwgZXhwZWN0ZWQpOworCQl9CisJfQorCXJldHVybiB0ZXN0OworfQor I2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9saWJ0YXAvdGFwLmggYi9zcmMvdGVzdC9s aWJ0YXAvdGFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUz NjZhNmFmZmRjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbGlidGFwL3RhcC5oCkBA IC0wLDAgKzEsMTE1IEBACisvKgorbGlidGFwIC0gV3JpdGUgdGVzdHMgaW4gQworQ29weXJp Z2h0IDIwMTIgSmFrZSBHZWxibWFuIDxnZWxibWFuQGdtYWlsLmNvbT4KK1RoaXMgZmlsZSBp cyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTAorKi8KKworI2lmbmRlZiBfX1RBUF9IX18KKyNk ZWZpbmUgX19UQVBfSF9fCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cisj ZW5kaWYKKworI2lmbmRlZiB2YV9jb3B5CisjaWZkZWYgX192YV9jb3B5CisjZGVmaW5lIHZh X2NvcHkgX192YV9jb3B5CisjZWxzZQorI2RlZmluZSB2YV9jb3B5KGQsIHMpICgoZCkgPSAo cykpCisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50ICAgICB2b2tfYXRfbG9jICAg ICAgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgdGVzdCwgY29uc3QgY2hhciAq Zm10LAorICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncyk7CitpbnQgICAg IG9rX2F0X2xvYyAgICAgICAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGludCB0ZXN0 LCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKK2lu dCAgICAgaXNfYXRfbG9jICAgICAgIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29u c3QgY2hhciAqZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4 cGVjdGVkLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAgIGlzbnRfYXRfbG9jICAg ICAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmdvdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleHBlY3RlZCwgY29uc3QgY2hhciAq Zm10LCAuLi4pOworaW50ICAgICBjbXBfb2tfYXRfbG9jICAgKGNvbnN0IGNoYXIgKmZpbGUs IGludCBsaW5lLCBpbnQgYSwgY29uc3QgY2hhciAqb3AsCisgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCAgICAgY21wX21lbV9h dF9sb2MgIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3Qgdm9pZCAqZ290LAor ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmV4cGVjdGVkLCBzaXplX3Qg biwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50ICAgICBiYWlsX291dCAgICAgICAgKGlu dCBpZ25vcmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgICAgdGFwX3BsYW4gICAg ICAgIChpbnQgdGVzdHMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2ludCAgICAgZGlhZyAg ICAgICAgICAgIChjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgICAgIGV4aXRfc3RhdHVz ICAgICAodm9pZCk7Cit2b2lkICAgIHRhcF9za2lwICAgICAgICAoaW50IG4sIGNvbnN0IGNo YXIgKmZtdCwgLi4uKTsKK3ZvaWQgICAgdGFwX3RvZG8gICAgICAgIChpbnQgaWdub3JlLCBj b25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkICAgIHRhcF9lbmRfdG9kbyAgICAodm9pZCk7 CisKKyNkZWZpbmUgTk9fUExBTiAgICAgICAgICAtMQorI2RlZmluZSBTS0lQX0FMTCAgICAg ICAgIC0yCisjZGVmaW5lIG9rKC4uLikgICAgICAgICAgb2tfYXRfbG9jKF9fRklMRV9fLCBf X0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIGlzKC4uLikgICAgICAgICAg aXNfYXRfbG9jKF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCisjZGVm aW5lIGlzbnQoLi4uKSAgICAgICAgaXNudF9hdF9sb2MoX19GSUxFX18sIF9fTElORV9fLCBf X1ZBX0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgY21wX29rKC4uLikgICAgICBjbXBfb2tfYXRf bG9jKF9fRklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCisjZGVmaW5lIGNt cF9tZW0oLi4uKSAgICAgY21wX21lbV9hdF9sb2MoX19GSUxFX18sIF9fTElORV9fLCBfX1ZB X0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgcGxhbiguLi4pICAgICAgICB0YXBfcGxhbihfX1ZB X0FSR1NfXywgTlVMTCkKKyNkZWZpbmUgZG9uZV90ZXN0aW5nKCkgICByZXR1cm4gZXhpdF9z dGF0dXMoKQorI2RlZmluZSBCQUlMX09VVCguLi4pICAgIGJhaWxfb3V0KDAsICIiIF9fVkFf QVJHU19fLCBOVUxMKQorI2RlZmluZSBwYXNzKC4uLikgICAgICAgIG9rKDEsICIiIF9fVkFf QVJHU19fKQorI2RlZmluZSBmYWlsKC4uLikgICAgICAgIG9rKDAsICIiIF9fVkFfQVJHU19f KQorCisjZGVmaW5lIHNraXAodGVzdCwgLi4uKSAgZG8ge2lmICh0ZXN0KSB7dGFwX3NraXAo X19WQV9BUkdTX18sIE5VTEwpOyBicmVhazt9CisjZGVmaW5lIGVuZF9za2lwICAgICAgICAg fSB3aGlsZSAoMCkKKworI2RlZmluZSB0b2RvKC4uLikgICAgICAgIHRhcF90b2RvKDAsICIi IF9fVkFfQVJHU19fLCBOVUxMKQorI2RlZmluZSBlbmRfdG9kbyAgICAgICAgIHRhcF9lbmRf dG9kbygpCisKKyNkZWZpbmUgZGllc19vayguLi4pICAgICBkaWVzX29rX2NvbW1vbigxLCBf X1ZBX0FSR1NfXykKKyNkZWZpbmUgbGl2ZXNfb2soLi4uKSAgICBkaWVzX29rX2NvbW1vbigw LCBfX1ZBX0FSR1NfXykKKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBsaWtlKC4uLikgICAg ICAgIHRhcF9za2lwKDEsICJsaWtlIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIikK KyNkZWZpbmUgdW5saWtlKC4uLikgICAgICB0YXBfc2tpcCgxLCAidW5saWtlIGlzIG5vdCBp bXBsZW1lbnRlZCBvbiBXaW5kb3dzIikKKyNkZWZpbmUgZGllc19va19jb21tb24oLi4uKSBc CisgICAgICAgICAgICAgICAgICAgICAgICAgdGFwX3NraXAoMSwgIkRlYXRoIGRldGVjdGlv biBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MiKQorI2Vsc2UKKyNkZWZpbmUgbGlrZSgu Li4pICAgICAgICBsaWtlX2F0X2xvYygxLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fVkFfQVJH U19fLCBOVUxMKQorI2RlZmluZSB1bmxpa2UoLi4uKSAgICAgIGxpa2VfYXRfbG9jKDAsIF9f RklMRV9fLCBfX0xJTkVfXywgX19WQV9BUkdTX18sIE5VTEwpCitpbnQgICAgIGxpa2VfYXRf bG9jICAgICAoaW50IGZvcl9tYXRjaCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZ290LCBjb25zdCBjaGFyICpl eHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4u Lik7CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j bHVkZSA8c3lzL3dhaXQuaD4KK2ludCB0YXBfdGVzdF9kaWVkIChpbnQgc3RhdHVzKTsKKyNk ZWZpbmUgZGllc19va19jb21tb24oZm9yX2RlYXRoLCBjb2RlLCAuLi4pICAgICAgICAgICAg ICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGNwaWQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGl0X2RpZWQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFwX3Rlc3RfZGll ZCgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Bp ZCA9IGZvcmsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgc3dpdGNoIChjcGlkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgY2FzZSAtMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBlcnJvcigiZm9yayBlcnJvciIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGV4aXQoMSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY2FzZSAwOiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IGNsb3NlKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgIGNsb3NlKDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRhcF90ZXN0X2RpZWQoMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGV4aXQoMCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYg KHdhaXRwaWQoY3BpZCwgTlVMTCwgMCkgPCAwKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgIHBlcnJvcigid2FpdHBpZCBlcnJvciIpOyAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgIGV4aXQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaXRfZGllZCA9IHRhcF90ZXN0X2Rp ZWQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFpdF9kaWVk KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IHtjb2RlfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgb2soZm9yX2RlYXRoID8gaXRfZGllZCA6ICFpdF9kaWVkLCAiIiBfX1ZBX0FSR1Nf Xyk7IFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cwor fQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9tZXNvbi5idWlsZAppbmRleCBjZDQ1Y2JmNTdmYi4uNjRmYTc1MWE1YTUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21lc29u LmJ1aWxkCkBAIC04LDYgKzgsNyBAQCBzdWJkaXIoJ3Bvc3RtYXN0ZXInKQogc3ViZGlyKCdy ZWNvdmVyeScpCiBzdWJkaXIoJ3N1YnNjcmlwdGlvbicpCiBzdWJkaXIoJ21vZHVsZXMnKQor c3ViZGlyKCdkZm9yJykKIAogaWYgc3NsLmZvdW5kKCkKICAgc3ViZGlyKCdzc2wnKQotLSAK Mi41My4wCgo= --------------q3GH2mb63ygMChYtU0Dca0vu Content-Type: text/x-patch; charset=UTF-8; name="v08-0002-Implement-Delta-Frame-of-Reference-compression.patch" Content-Disposition: attachment; filename*0="v08-0002-Implement-Delta-Frame-of-Reference-compression.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAxMzVjNmU3YmZkZWMzZDcxNzc0YTI4YWU4MWRlMDM4YjdhNDJhNzlhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTc6MzA6MjIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYwOCAyLzNdIEltcGxlbWVudCBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgY29tcHJl c3Npb24uCgpJbXBsZW1lbnQgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0 aGUgRGVsdGEgRnJhbWUgb2YKUmVmZXJlbmNlIHRlY2huaXF1ZSAoREZPUikuCgpERm9SIHN1 cHBvcnRzIGJvdGggZXh0ZXJuYWwgbWVtb3J5IChvdXRlciBtZW1vcnkpIHByb3ZpZGVkIGJ5 IGEgY2FsbGVyCmFuZCBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgbWVtb3J5LCBhbGxvY2F0ZWQg YnkgbWVhbnMgb2YgbWFsbG9jLCBwYWxsb2MKb3Igc2ltaWxhciBmdW5jdGlvbnMuIE1lbW9y eSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBkZWZpbmVkCmR1cmluZyBpbml0 aWFsaXphdGlvbi4gQWxsIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBmb2xsb3cgdGhpcwpjb25m aWd1cmF0aW9uLiBGb3IgZXhhbXBsZSwgYSBjYWxsZXIgY2FuIHBsYWNlIGEgYnVmZmVyIG9u IHRoZSBzdGFjayB0bwphdm9pZCBoZWFwIGFsbG9jYXRpb24gYW5kIHBhc3MgdGhlIGJ1ZmZl ciB0byBhIERGb1IgdW5pdC4gQXMgYSByZXN1bHQsCnRoZSBwYWNraW5nIGFuZCB1bnBhY2tp bmcgcHJvY2Vzc2VzIGV4Y2x1ZGUgZHluYW1pYyBhbGxvY2F0aW9uLgoKVGhlIERGb1IgdW5p dCBpcyBpbXBsZW1lbnRlZCBhcyBhIHNldCBvZiB0ZW1wbGF0ZXMuIERldmVsb3BlcnMgY2Fu CmdlbmVyYXRlIERGb1IgaW1wbGVtZW50YXRpb25zIGZvciBhbnkgdW5zaWduZWQgaW50ZWdl ciB0eXBlICh1aW50OF90LAp1aW50MTZfdCwgdWludDMyX3QsIHVpbnQ2NF90KS4gVGhlIGRm b3JfdTE2IHVuaXQgaXMgaW1wbGVtZW50ZWQuCgpUaGUgdW5pdCB0ZXN0IGlzIGltcGxlbWVu dGVkIGFzIGEgQyBwcm9ncmFtIChFTEYgZXhlY3V0YWJsZSkuIFRoZSB0ZXN0CmNhbiBiZSBy dW4gd2l0aCB0aGUgJ21ha2UgY2hlY2stdW5pdCcuIFRlc3RzIHN1cHBvcnQgdGhlIFRBUCBw cm90b2NvbAphbmQgYXJlIGV4ZWN1dGVkIHVzaW5nIHRoZSBQcm92ZSB1dGlsaXR5LgoKQXV0 aG9yOiBFdmdlbnkgVm9yb3BhZXYgPGV2Z2VueS52b3JvcGFldkB0YW50b3JsYWJzLmNvbT4g PGV2b3JvcEBnbWFpbC5jb20+ClJldmlld2VkIGJ5OiBBbmRyZXkgQm9yb2RpbiA8eDRtbW1A eWFuZGV4LXRlYW0ucnU+Ci0tLQogc3JjL2JhY2tlbmQvbGliL01ha2VmaWxlLmRmb3IgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvbGliL2Rmb3JfdGVtcGwuYyAgICAgICAgfCA2MTgg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvbGliL2Rmb3JfdTE2 LmMgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvbGliL21lc29uLmJ1aWxkICAgICAg ICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGwuaCAgICAgICAgfCAgMjcg KysKIHNyYy9pbmNsdWRlL2xpYi9kZm9yX3RlbXBsX3N0YXBsZS5oIHwgMTI1ICsrKysrKwog c3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfdW5kZWYuaCAgfCAgMjkgKysKIHNyYy9pbmNs dWRlL2xpYi9kZm9yX3UxNi5oICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2xpYi9k Zm9yX3UxNl9jb25maWcuaCAgIHwgICA0ICsKIHNyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZSAg ICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L2Rmb3IvTWFrZWZpbGUgICAgICAgICAgICAg IHwgICAzICstCiBzcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMiAr CiBzcmMvdGVzdC9kZm9yL3Rlc3RfZGZvcl91MTYuYyAgICAgICB8IDM3MSArKysrKysrKysr KysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMTIwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvbGliL2Rmb3JfdGVtcGwu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2xpYi9kZm9yX3UxNi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGwuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi9kZm9yX3RlbXBsX3N0YXBsZS5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfdW5kZWYuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvZGZvci90ZXN0X2Rmb3JfdTE2LmMKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9saWIvTWFrZWZpbGUuZGZvciBiL3NyYy9iYWNrZW5kL2xpYi9NYWtlZmlsZS5k Zm9yCmluZGV4IGI5M2M2ZTc4NjQ0Li5iZWI3MDM1ZjE1NSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbGliL01ha2VmaWxlLmRmb3IKKysrIGIvc3JjL2JhY2tlbmQvbGliL01ha2VmaWxl LmRmb3IKQEAgLTIsNCArMiw1IEBACiAKIE9CSlNfREZPUiA6PSBcCiAJYml0cGFja191MTYu byBcCisJZGZvcl91MTYubyBcCiAJdmVjdF91MTYubwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGliL2Rmb3JfdGVtcGwuYyBiL3NyYy9iYWNrZW5kL2xpYi9kZm9yX3RlbXBsLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhZTc5YWRmYjY2Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbGliL2Rmb3JfdGVtcGwuYwpAQCAtMCwwICsx LDYxOCBAQAorLyoKKyAqIGRmb3IuYworICoKKyAqIERGT1JfVEVNUEwgaW1wbGVtZW50cyB0 aGUgdmFyaWFudCBvZiB0aGUgRnJhbWUgb2YgUmVmZXJlbmNlIHdpdGggRGVsdGEKKyAqIGNv bnRhaW5lciBhbmQgY29ycmVzcG9uZGluZyBhbGdvcml0aG1zLgorICoKKyAqIFRoZSB0eXBl IG9mIG9yaWdpbmFsIGl0ZW1zIGlzIGRlZmluZWQgd2l0aCB0aGUgaXRlbV90IG1hY3JvLiBp dGVtX3QgbXVzdCBiZQorICogYW4gdW5zaWduZWQgaW50ZWdlciAodWludDhfdCwgdWludDE2 X3QsIC4uLiB1aW50NjRfdCkKKyAqCisgKiBFYWNoIGJpdCB2ZWN0b3IsIGhhdmluZyBiZWVu IHNlcmlhbGlzZWQsIHJlcHJlc2VudHMgbmV4dCBzdHJ1Y3R1cmU6CisgKgorICogfCBkZWx0 YXMgfCBleGNlcHRpb25zIHwgZXhjZXB0aW9ucyBwb3NpdGlvbnMgfAorICoKKyAqIFRoZSBk ZWx0YSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBpdGVtIGFuZCB0aGUg cHJldmlvdXMgb25lLgorICogVGhlIGRlbHRhIG9mIHRoZSBmaXJzdCBpdGVtICh0aGUgbWVt YmVyIGhhdmluZyB0aGUgemVybyBpbmRleCkgaXMgaXRzIGFjdHVhbAorICogdmFsdWU6IGRl bHRhWzBdID0gbVswXS0wID0gbVswXS4gQSBoYXZpbmcgc2VyaWFsaXNlZCBkZWx0YSBpcyBh IHNlcXVlbmNlIG9mCisgKiBiaXRzLiBFYWNoIHNlcmlhbGlzZWQgZGVsdGEgaW4gJ2RlbHRh cycgaGFzIGEgZml4ZWQgYml0IHdpZHRoLiBJZiB0aGUgZGVsdGEncworICogd2lkdGggZXhj ZWVkcyB0aGUgYWxsb3dlZCBzaXplIG9mIGEgZGVsdGEgaW4gJ2RlbHRhcycsIHRoZSBoaWdo ZXIgYml0cyBvZiB0aGlzCisgKiBkZWx0YSBpcyBwdXQgaW50byBleGNlcHRpb25zLgorICov CisKKyNpbmNsdWRlICJsaWIvZGZvcl90ZW1wbF9zdGFwbGUuaCIKKworaW50IGRmb3JfY2Fs Y19kZWx0YXMoc2l6ZV90IGNudCwgY29uc3QgaXRlbV90IGFycltdLCB2ZWN0X3QgKnZEZWx0 YXMsCisJCQkJCSB1bmlxc29ydHZlY3RfdCAqdXN2RGVsdGFXaWR0aHMsCisJCQkJCSB2ZWN0 X3QgKnZXaWR0aENvdW50ZXJzKTsKKworaW50IGRmb3JfY2FsY193aWR0aChzaXplX3QgY250 RGVsdGEsCisJCQkJCWNvbnN0IHVuaXFzb3J0dmVjdF90ICp1c3ZEZWx0YVdpZHRocywKKwkJ CQkJY29uc3QgdmVjdF90ICp2V2lkdGhDb3VudGVycywgc2l6ZV90ICp3aWR0aCwKKwkJCQkJ c2l6ZV90ICpjbnRFeGNlcHRpb25zKTsKKworaW50IGRmb3JfYW5hbHl6ZShzaXplX3QgY250 LCBjb25zdCBpdGVtX3QgYXJyW10sCisJCQkgZGZvcl9tZXRhX3QgKmRmb3IsIHZlY3RfdCAq dkRlbHRhcywKKwkJCSB1bmlxc29ydHZlY3RfdCAqdXN2RXhjUG9zKTsKKworaW50IGRmb3Jf cGFjayhzaXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNh Z2UsCisJCQkgIGRmb3JfbWV0YV90ICpkZm9yLCBzaXplX3QgYnVmU2l6ZSwgdWludDhfdCBi dWZbXSk7CisKK2ludCBkZm9yX3VucGFjayhjb25zdCBkZm9yX21ldGFfdCAqZGZvciwgdW5p cXNvcnR2ZWN0X3QgKnZWYWxzLCBzaXplX3QgYnVmU2l6ZSwKKwkJCQl1aW50OF90IGJ1Zltd KTsKKwordm9pZCBkZm9yX2NsZWFyX21ldGEoZGZvcl9tZXRhX3QgKmRmb3IpOworCitkZm9y X3N0YXRzX3QgZGZvcl9jYWxjX3N0YXRzKGRmb3JfbWV0YV90IGRmb3IpOworCitzaXplX3Qg ZGZvcl9jYWxjX25ieXRlcyhkZm9yX21ldGFfdCBkZm9yKTsKKworLyoKKyAqIENhbGN1bGF0 ZSBkZWx0YXMKKyAqCisgKiB2V2lkdGhDb3VudGVycyBiZWluZyBlcXVhbCB0byBOVUxMIG1l YW5zICdEb24ndCBjYWxjdWxhdGUgY291bnRzIG9mIHdpZHRocycuCisgKiBJbiB0aGlzIGNh c2UgdXN2RGVsdGFXaWR0aCBjb21wcmlzZSBvbmx5IG9uZSBtZW1iZXIgbVswXSB3aGljaCBz YXZlcyBtYXgKKyAqIHdpZHRoIG9mIGRlbHRhLCB3aGljaCBjYW4gYmUgdXNlZCBieSBjYWxs ZXIuCisgKgorICovCitpbnQKK2Rmb3JfY2FsY19kZWx0YXMoc2l6ZV90IGNudCwgY29uc3Qg aXRlbV90IGFycltdLCB2ZWN0X3QgKnZEZWx0YXMsCisJCQkJIHVuaXFzb3J0dmVjdF90ICp1 c3ZEZWx0YVdpZHRocywgdmVjdF90ICp2V2lkdGhDb3VudGVycykKK3sKKwlpdGVtX3QgZGVs dGE7CisJaXRlbV90IHByZXY7IC8qIHZhbHVlIG9mIHByZXZpb3VzIG51bWJlciovCisJc2l6 ZV90IHdpZHRoOworCXVzdl9pbnNfcmVzX3QgaW5zV2lkdGhJbnNlcnQ7CisKKwlpZiAodkRl bHRhcyA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodldpZHRoQ291bnRlcnMgPT0g TlVMTCkKKwkJdXN2X2luc2VydCh1c3ZEZWx0YVdpZHRocywgMCk7CisKKwlwcmV2ID0gMDsK Kwlmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNudDsgaisrKSB7CisJCWRlbHRhID0gYXJyW2pd IC0gcHJldjsKKwkJdmVjdF9hcHBlbmQodkRlbHRhcywgZGVsdGEpOworCQlwcmV2ID0gYXJy W2pdOworCQl3aWR0aCA9IHdpZHRoX2Zyb21fdmFsKGRlbHRhKTsKKworCQlpZiAodldpZHRo Q291bnRlcnMgPT0gTlVMTCkgeworCQkJaWYgKHVzdkRlbHRhV2lkdGhzLT5tWzBdIDwgd2lk dGgpCisJCQkJdXN2RGVsdGFXaWR0aHMtPm1bMF0gPSB3aWR0aDsKKwkJfSBlbHNlIHsKKwkJ CWluc1dpZHRoSW5zZXJ0ID0gdXN2X2luc2VydCh1c3ZEZWx0YVdpZHRocywgd2lkdGhfZnJv bV92YWwoZGVsdGEpKTsKKworCQkJaWYgKGluc1dpZHRoSW5zZXJ0LnN0ID09IFVTVl9JTlNf TkVXKQorCQkJCXZlY3RfaW5zZXJ0KHZXaWR0aENvdW50ZXJzLCBpbnNXaWR0aEluc2VydC5w b3MsIChpdGVtX3QpMSk7CisJCQllbHNlIGlmIChpbnNXaWR0aEluc2VydC5zdCA9PSBVU1Zf SU5TX0VYSVNUUykKKwkJCQl2V2lkdGhDb3VudGVycy0+bVtpbnNXaWR0aEluc2VydC5wb3Nd Kys7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQor CisvKgorICogQ2FsY3VsYXRlIHdpZHRoIG9mIHNob3J0IGRlbHRhcywgd2lkdGggb2YgZXhj ZXB0aW9ucywgYW5kIG51bWJlciBvZgorICogZXhjZXB0aW9ucworICovCitpbnQKK2Rmb3Jf Y2FsY193aWR0aChzaXplX3QgY250RGVsdGEsIGNvbnN0IHVuaXFzb3J0dmVjdF90ICp1c3ZE ZWx0YVdpZHRocywKKwkJCQljb25zdCB2ZWN0X3QgKnZXaWR0aENvdW50ZXJzLCBzaXplX3Qg KndpZHRoLAorCQkJCXNpemVfdCAqY250RXhjZXB0aW9ucykKK3sKKyNkZWZpbmUgTUlOX0RF TFRBU19RVUFOVElUWV9BTExPV0lOR19FWENFUFRJT05TIDQKKworCXNpemVfdCBjbnRTaG9y dERlbHRhczsgLyogbnVtYmVyIG9mIGRlbHRhcyBwcmVzZW50ZWQgd2l0aG91dCBleGNlcHRp b25zICovCisJc2l6ZV90IGluZHhXaWR0aDsJLyogdGhlIHdpZHRoIG9mIHNob3J0IGRlbHRh cyAoaW5kZXggZnJvbSB2V2lkdGhDb3VudGVycworCQkJCQkJICogKGFuZCBmcm9tIHZEZWx0 YVdpZHRoIGFjY29yZGluZ2x5KQorCQkJCQkJICovCisJaWYgKHVzdkRlbHRhV2lkdGhzID09 IE5VTEwgfHwgdldpZHRoQ291bnRlcnMgPT0gTlVMTCB8fCB3aWR0aCA9PSBOVUxMIHx8CisJ CWNudEV4Y2VwdGlvbnMgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJY250U2hvcnREZWx0 YXMgPSBjbnREZWx0YTsKKwlpbmR4V2lkdGggPSB1c3ZEZWx0YVdpZHRocy0+Y250IC0gMTsg LyogY291bnRlciBpbnRvIGluZGV4ICovCisJKmNudEV4Y2VwdGlvbnMgPSAwOworCisJLyoK KwkgKiBIZXJlIHdlIHRyeSB0byBkZWNyZWFzZSB0aGUgd2lkdGggb2Ygc2hvcnQgZGVsdGFz IGluIG9yZGVyIHRvIGNvbXByZXNzCisJICogdGhlIGFycmF5IG9mIGRlbHRhcyBpbiB0aGUg bWVhbnRpbWUgd2UgYXJlIGVhZ2VyIHRvIGNvdmVyIG5vIGxlc3MgdGhhbgorCSAqIDkwJSBv ZiBkZWx0YXMgd2UgaGF2ZS4gSXQgaXMgYW4gaGV1cmlzdGljIGFuYWx5c2lzIGJhc2VkIG9u IHRoZQorCSAqIHN1Z2dlc3Rpb24gIm5vIGxlc3MgdGhhbiA5MCUgb2YgZGVsdGFzIHdlIGhh dmUiLgorCSAqCisJICogVE9ETzogYW5hbHl6aW5nIHdlIG1pZ2h0IHdhbnQgY2FsdWxhdGUg dGhlIGZ1bGwgc2l6ZSBvZiB0aGUgcGFjayBmb3IgZWFjaAorCSAqIHZhcmlhbnQgb2YgdGhl IHdpZHRoLgorCSAqLworCWlmIChjbnREZWx0YSA+PSBNSU5fREVMVEFTX1FVQU5USVRZX0FM TE9XSU5HX0VYQ0VQVElPTlMpIHsKKwkJc2l6ZV90IHN6TWluQ292ZXJhZ2U7IC8qIHRocmVz aG9sZCAqLworCQlzaXplX3QgajsKKworCQlpZiAoY250RGVsdGEgPj0gMTApCisJCQlzek1p bkNvdmVyYWdlID0gY250RGVsdGEgLSBjbnREZWx0YSAvIDEwOworCQllbHNlCisJCQlzek1p bkNvdmVyYWdlID0gY250RGVsdGEgLSAxOworCisJCWogPSBpbmR4V2lkdGg7CisKKwkJd2hp bGUgKGogPiAwKSB7CisJCQlpZiAoY250U2hvcnREZWx0YXMgLSB2V2lkdGhDb3VudGVycy0+ bVtqXSA8IHN6TWluQ292ZXJhZ2UpCisJCQkJYnJlYWs7CisKKwkJCWNudFNob3J0RGVsdGFz IC09IHZXaWR0aENvdW50ZXJzLT5tW2pdOworCQkJai0tOworCQkJaW5keFdpZHRoID0gajsK KwkJfQorCQkqY250RXhjZXB0aW9ucyA9IGNudERlbHRhIC0gY250U2hvcnREZWx0YXM7CisJ fQorCisJKndpZHRoID0gdXN2RGVsdGFXaWR0aHMtPm1baW5keFdpZHRoXTsKKwlyZXR1cm4g MDsKK30KKworLyoKKyAqIGRmb3JfYW5hbHl6ZQorICogQW5hbHl6ZSBpbnB1dCBhcnJheSwg Y2FsY3VsYXRlIGRlbHRhcyBhbmQgdGhlaXIgd2lkdGgsIGRlZmluZSBleGNlcHRpb25zIGFu ZAorICogdGhlaXIgcG9zaXRpb25zLiBSZXR1cm5zIHRoZW0gdGhyb3VnaCB0aGUgZGZvciwg dkRlbHRhcywgdXN2RXhjUG9zLiBJZgorICogdXN2RXhjUG9zID09IE5VTEwgLSBkb24ndCBj YWxjdWxhdGUgZXhjZXB0aW9ucy4KKyAqCisgKiBkZm9yX2FuYWx5emUgZnVuY3Rpb24gZG9l cyBub3QgdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGl0cworICogbG9jYWwg Y29udGFpbmVycy4KKyAqCisgKiBBIGNhbGxlciBoYXMgdG8gY29udHJvbCB3aGV0aGVyIHZE ZWx0YXMgYW5kIHVzdkV4Y1BvcyB1c2Ugb3V0ZXIgbWVtb3J5CisgKiBwcm92aWRlZCBieSBj YWxsZXIgb3IgbWFuYWdlIG1lbW9yeSBhbGxvY2F0aW9uIGF1dG9tYXRpY2FsbHksIHdoaWNo IGRlZmluZXMKKyAqIHdoZXRoZXIgdmVjdF9pbnNlcnQgYW5kIHZlY3RfYXBwZW5kIGZ1bmN0 aW9ucywgaW52b2tlZCBmcm9tIGhlcmUsIHVzZSBkeW5hbWljCisgKiBtZW1vcnkgb3Igbm90 LgorICoKKyAqIEEgY2FsbGVyIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCB0aGF0IGRmb3Jf bWV0YV90IGRmb3IgYXJlIGdvaW5nIHRvIGJlCisgKiBudWxsaWZpZWQgaW4gdGhpcyBmdW5j dGlvbiwgc28gaXQgc2hvdWxkIG5vdCBoYXZlIGFueSBtZWFuaW5nZnVsbCBkYXRhIGJ5Cisg KiBzdGFydCBvZiBkZm9yX2FuYWx5emUsIGVzcGVjaWFsbHkgaXRzIHBhY2sgZmllbGQgc2hv dWxkIG5vdCBiZSB1c2VkIGFzIGEKKyAqIHBvaW50ZXIgb24gZHluYW1pYyBtZW1vcnksIG90 aGVyd2lzZSBtZW1vcnkgbGVha2FnZSBpcyBwb3NzaWJsZS4KKyAqCisgKi8KK2ludAorZGZv cl9hbmFseXplKHNpemVfdCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgLyogaW5wdXQgKi8K KwkJCSBkZm9yX21ldGFfdCAqZGZvciwgdmVjdF90ICp2RGVsdGFzLAorCQkJIHVuaXFzb3J0 dmVjdF90ICp1c3ZFeGNQb3MpIC8qIG91dHB1dCAqLworeworI2RlZmluZSBERUxUQV9XSURU SF9NQVhfTlVNQkVSIChzaXplb2YoaXRlbV90KSAqIDgpCisJdW5pcXNvcnR2ZWN0X3QgdXN2 RGVsdGFXaWR0aHM7CisJaXRlbV90IGJ1ZkRlbHRhV2lkdGhbREVMVEFfV0lEVEhfTUFYX05V TUJFUl07CisJdmVjdF90IHZXaWR0aENvdW50ZXJzOworCWl0ZW1fdCBidWZXaWR0aENvdW50 ZXJzW0RFTFRBX1dJRFRIX01BWF9OVU1CRVJdOworCWl0ZW1fdCBtYXNrOworCWludCByZXMg PSAtMTsKKworCWV4Y2FsZ190IGlzRXhjVXNhZ2UgPSAodXN2RXhjUG9zID09IE5VTEwpID8g REZPUl9FWENfRE9OVF9VU0UgOgorCQkJCQkJCQkJCQkJREZPUl9FWENfVVNFOworCisJaWYg KGRmb3IgPT0gTlVMTCkKKwkJZ290byBkZm9yX2FuYWx5emVfZXJyb3I7CisKKwltZW1zZXQo ZGZvciwgMCwgc2l6ZW9mKGRmb3JfbWV0YV90KSk7CisKKwlpZiAoY250ID09IDApCisJCS8q IGRmb3ItPml0ZW1fY250ID0gMDsgKi8gLyogaXQncyBiZWVuIGFscmVhZHkgZG9uZSB3aXRo IG1lbXNldCAqLworCQlnb3RvIGRmb3JfYW5hbHl6ZV9yZXQ7CisJZWxzZSBpZiAoYXJyID09 IE5VTEwpCisJCWdvdG8gZGZvcl9hbmFseXplX2Vycm9yOworCisJaWYgKDAgIT0gdmVjdF9p bml0KCZ1c3ZEZWx0YVdpZHRocywgREVMVEFfV0lEVEhfTUFYX05VTUJFUiwgYnVmRGVsdGFX aWR0aCkpCisJCWdvdG8gZGZvcl9hbmFseXplX2Vycm9yOworCisJaWYgKGlzRXhjVXNhZ2Ug PT0gREZPUl9FWENfVVNFKQorCXsKKwkJaWYgKDAgIT0KKwkJCXZlY3RfaW5pdCgmdldpZHRo Q291bnRlcnMsIERFTFRBX1dJRFRIX01BWF9OVU1CRVIsCisJCQkJCSAgYnVmV2lkdGhDb3Vu dGVycykpCisJCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKwl9CisKKwlkZm9yLT5pdGVt X2NudCA9IGNudDsKKworCWlmICgwICE9CisJCWRmb3JfY2FsY19kZWx0YXMoZGZvci0+aXRl bV9jbnQsIGFyciwgdkRlbHRhcywgJnVzdkRlbHRhV2lkdGhzLAorCQkJCQkJIChpc0V4Y1Vz YWdlID09IERGT1JfRVhDX1VTRSkgPyAmdldpZHRoQ291bnRlcnMgOiBOVUxMKSkKKwkJZ290 byBkZm9yX2FuYWx5emVfZXJyb3I7CisKKwlBc3NlcnQoY250ID09IHZEZWx0YXMtPmNudCk7 CisJQXNzZXJ0KHVzdkRlbHRhV2lkdGhzLmNudCA+IDApOworCisJaWYgKGlzRXhjVXNhZ2Ug PT0gREZPUl9FWENfVVNFKQorCXsKKwkJaWYgKDAgIT0KKwkJCWRmb3JfY2FsY193aWR0aCh2 RGVsdGFzLT5jbnQsICZ1c3ZEZWx0YVdpZHRocywgJnZXaWR0aENvdW50ZXJzLAorCQkJCQkJ CSZkZm9yLT5kZWx0YV93aWQsICZkZm9yLT5leGNfY250KSkKKwkJCWdvdG8gZGZvcl9hbmFs eXplX2Vycm9yOworCX0KKwllbHNlCisJeworCQlkZm9yLT5kZWx0YV93aWQgPQorCQkJdXN2 RGVsdGFXaWR0aHMubVt1c3ZEZWx0YVdpZHRocy5jbnQgLSAxXTsgLyogbWF4IHdpZHRoICov CisJCWRmb3ItPmV4Y19jbnQgPSAwOworCX0KKworCWRmb3ItPmV4Y193aWQgPSB1c3ZEZWx0 YVdpZHRocy5tW3VzdkRlbHRhV2lkdGhzLmNudCAtIDFdIC0gZGZvci0+ZGVsdGFfd2lkOwor CisJLyogQSBtYXNrIGxvb2tzIGxpa2UgMDAwMTExMS4gSXQgaXMgYWxzbyB0aGUgbWF4IHZh bHVlIG9mIGEgc2hvcnQgZGVsdGEgKi8KKwltYXNrID0gd2lkdGhfdG9fbWFzayhkZm9yLT5k ZWx0YV93aWQpOworCisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2RGVsdGFzLT5jbnQ7IGkr KykKKwl7CisJCWlmICh2RGVsdGFzLT5tW2ldID4gbWFzaykKKwkJeworCQkJQXNzZXJ0KGlz RXhjVXNhZ2UgPT0gREZPUl9FWENfVVNFKTsKKwkJCWlmICgwICE9IHZlY3RfYXBwZW5kKHVz dkV4Y1BvcywgKGl0ZW1fdClpKSkKKwkJCQlnb3RvIGRmb3JfYW5hbHl6ZV9lcnJvcjsKKwkJ fQorCX0KKwlBc3NlcnQoZGZvci0+ZGVsdGFfd2lkICsgZGZvci0+ZXhjX3dpZCA8PSBzaXpl b2YoaXRlbV90KSAqIDgpOworCXJlcyA9IDA7CitkZm9yX2FuYWx5emVfcmV0OgorCXJldHVy biByZXM7CitkZm9yX2FuYWx5emVfZXJyb3I6CisJLyogZGZvcl9hbmFseXplIGRvZXNuJ3Qg YWZmZWN0IHRoZSBwYWNrIGZpZWxkIChkb2Vzbid0IGFsbG9jYXRlLCBkZWxldGUgb3IKKwkg KiBvdGhlcndpc2UpLCBzbyB3ZSBjYW4gbnVsbGlmeSB0aGUgd2hvbGUgZGZvciBhbmQgaXQK KwkgKiBpcyBzYWZlLCBubyBsZWFrYWdlICovCisJbWVtc2V0KGRmb3IsIDAsIHNpemVvZihk Zm9yX21ldGFfdCkpOworCXJlcyA9IC0xOworCWdvdG8gZGZvcl9hbmFseXplX3JldDsKK30K KworLyoKKyAqIGRmb3JfcGFjaworICoKKyAqIFRoZSBpbnB1dCBhcnJheSBhcnIgaGFzIHRv IGJlIHNvcnRlZC4KKyAqCisgKiBJZiBhIGNhbGxlciBuZWVkcyB0byBhdm9pZCB1c2luZyBk eW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGV5IGhhdmUgdG8KKyAqIHByb3ZpZGUgdGhl IGV4dGVybmFsIG1lbW9yeSBidWZmZXIuIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIHNob3Vs ZCBiZSBub3QKKyAqIGxlc3MgdGhhbiA0ICogY250ICogc2l6ZW9mKGl0ZW1fdCkuIEl0IHdp bGwgYmUgdXNlZCBmb3IgYXJyYXlzIHBvaW50ZWQgYnkKKyAqICooZGZvci0+cGFjayksICoo dkRlbHRhcy0+bSksICoodkV4Y1Bvc0RlbHRhcy0+bSksICoodXN2RXhjUG9zLT5tKS4KKyAq CisgKiBJZiBkeW5hbWljIGFsbG9jYXRpb24gaGFzIGJlZW4gdXNlZCBieSB0aGUgZGZvcl9w YWNrLCBhIGNhbGxlciBoYXMgdG8gZnJlZQorICogdGhlIHBpZWNlIG9mIG1lbW9yeSBwb2lu dGVkIGJ5IGRmb3ItPnBhY2ssIHNpbmNlIGl0IGlzIGFsb2NhdGVkIGJ5IHRoZQorICogZGZv cl9wYWNrIHdpdGggREZPUl9NQUxMT0MuIEZyZWVpbmcgaGFzIHRvIGJlIHBlcmZvcm1lZCBi eSBmdW5jdGlvbgorICogY29uZm9ybWluZyB0byBERk9SX01BTExPQyAocGFpcmVkIHdpdGgg aXQpLiBGb3IgaW5zdGFuY2UsIGlmIERGT1JfTUFMTE9DIGlzCisgKiBtYWxsb2MsIHRoYW4g bWVtb3J5IHNob3VsZCBiZSBmcmVlZCBieSBmcmVlLgorICovCitpbnQKK2Rmb3JfcGFjayhz aXplX3QgY250LCBjb25zdCBpdGVtX3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJ CSAgZGZvcl9tZXRhX3QgKmRmb3IsIHNpemVfdCBidWZTaXplLCB1aW50OF90IGJ1ZltdKQor eworCWludCByZXM7CisJdmVjdF90IHZEZWx0YXMgPSB7IDAgfTsKKwl2ZWN0X3QgdkV4Y1Bv c0RlbHRhcyA9IHsgMCB9OworCXVuaXFzb3J0dmVjdF90IHVzdkV4Y1BvcyA9IHsgMCB9Owor CisJaWYgKGRmb3IgPT0gTlVMTCB8fAorCQkoYnVmU2l6ZSAhPSAwICYmIGJ1ZlNpemUgPCA0 ICogY250ICogc2l6ZW9mKGl0ZW1fdCkpKQorCXsKKwkJZ290byBkZm9yX3BhY2tfZXJyb3I7 CisJfQorCisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIGl0IGhlcmU6CisJICogCQkJbWVtc2V0 KGRmb3IsIDAsIHNpemVvZihkZm9yX21ldGFfdCkpLgorCSAqIEl0IGlzIGdvaW5nIHRvIGJl IGRvbmUgaW4gZGZvcl9hbmFseXplLgorCSAqLworCisJeworCQlpdGVtX3QgKmRlbHRhQnVm ID0gTlVMTDsKKwkJaXRlbV90ICpleGNQb3NEZWx0YXNCdWYgPSBOVUxMOworCQlpdGVtX3Qg KmV4Y1Bvc0J1ZiA9IE5VTEw7CisKKwkJaW50IHJlczEgPSAwOworCQlpbnQgcmVzMiA9IDA7 CisJCWludCByZXMzID0gMDsKKworCQlpZiAoYnVmU2l6ZSAhPSAwKQorCQl7CisJCQkvKiBT dGVwIG92ZXIgdGhlIG1heGltYWwgYWxsb3dlZCBERm9SIHBhY2sgc2l6ZSAqLworCQkJZGVs dGFCdWYgICAgICAgID0gKGl0ZW1fdCopKGJ1ZiArIGNudCAqIHNpemVvZihpdGVtX3QpKTsK KwkJCWV4Y1Bvc0RlbHRhc0J1ZiA9IChpdGVtX3QqKShidWYgKyBjbnQgKiBzaXplb2YoaXRl bV90KSAqIDIpOworCQkJZXhjUG9zQnVmICAgICAgID0gKGl0ZW1fdCopKGJ1ZiArIGNudCAq IHNpemVvZihpdGVtX3QpICogMyk7CisJCX0KKworCQkvKiBTZXR1cCBjb250YWluZXJzIHdp dGggb3V0ZXIgbWVtb3J5ICovCisJCXJlczEgPSB2ZWN0X2luaXQoJnZEZWx0YXMsIGNudCwg ZGVsdGFCdWYpOworCisJCWlmIChpc0V4Y1VzYWdlKQorCQl7CisJCQlyZXMyID0gdmVjdF9p bml0KCZ2RXhjUG9zRGVsdGFzLCBjbnQsIGV4Y1Bvc0RlbHRhc0J1Zik7CisJCQlyZXMzID0g dmVjdF9pbml0KCZ1c3ZFeGNQb3MsIGNudCwgZXhjUG9zQnVmKTsKKwkJfQorCisJCWlmIChy ZXMxICE9IDAgfHwgcmVzMiAhPSAwIHx8IHJlczMgIT0gMCkKKwkJCWdvdG8gZGZvcl9wYWNr X2Vycm9yOworCX0KKworCWlmICgwICE9CisJCWRmb3JfYW5hbHl6ZShjbnQsIGFyciwgZGZv ciwgJnZEZWx0YXMsCisJCQkJCSAoaXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UpID8gJnVz dkV4Y1BvcyA6IE5VTEwpKQorCQlnb3RvIGRmb3JfcGFja19lcnJvcjsKKworCWlmIChkZm9y LT5leGNfY250ICE9IDApCisJeworCQkvKiBXZSB0cmVhdCBleGNlcHRpb24gcG9zaXRpb25z IGFzIGEgc29ydGVkIHNlcXVlbmNlLCBhcHBseSB0aGUKKwkJICogREZvUiBhbGdvcml0aG0g dG8gaXQsIGFuZCBzYXZlIG5vdCB0aGVpciBhYnNvbHV0ZSB2YWx1ZXMgYnV0IHRoZWlyCisJ CSAqIGRlbHRhcy4gKi8KKwkJZGZvcl9tZXRhX3QgZGZvckV4Y1BvczsKKwkJQXNzZXJ0KGRm b3ItPmV4Y19jbnQgPT0gdXN2RXhjUG9zLmNudCk7CisJCWlmICgwICE9CisJCQlkZm9yX2Fu YWx5emUodXN2RXhjUG9zLmNudCwgdXN2RXhjUG9zLm0sICZkZm9yRXhjUG9zLAorCQkJCQkJ ICZ2RXhjUG9zRGVsdGFzLCBOVUxMKSkKKwkJCWdvdG8gZGZvcl9wYWNrX2Vycm9yOworCisJ CUFzc2VydChkZm9yLT5leGNfY250ID09IHZFeGNQb3NEZWx0YXMuY250KTsKKwkJQXNzZXJ0 KGRmb3ItPmV4Y19jbnQgPT0gZGZvckV4Y1Bvcy5pdGVtX2NudCk7CisKKwkJZGZvci0+ZXhj X3Bvc193aWQgPSBkZm9yRXhjUG9zLmRlbHRhX3dpZDsKKwl9CisJZWxzZQorCXsKKwkJQXNz ZXJ0KHVzdkV4Y1Bvcy5jbnQgPT0gMCk7IC8qIHVzdkV4Y1BvcyBoYXMgdG8gcmVtYWluIHpl cm9lZC4gKi8KKwkJQXNzZXJ0KGRmb3ItPmV4Y193aWQgPT0gMCk7IC8qIE5vIGV4Y2VwdGlv bnMsIG5vIGV4Y2VwdGlvbnMnIHdpZHRoLiAqLworCQlBc3NlcnQoZGZvci0+ZXhjX3Bvc193 aWQgPT0gMCk7IC8qIE5vIGV4Y2VwdGlvbnMnIHBvc2l0aW9ucyB3aWR0aCB0b28uICovCisJ fQorCisJLyogZGZvcl9wYWNrIHNlcmlhbGlzYXRpb24gcGFja2luZyAqLworCXsKKwkJLyog aW5kZXggb2YgdGhlIG5leHQgZnJlZSBiaXQgdG8gYmUgdXNlZDogKi8KKwkJc2l6ZV90IGQ7 IC8qIC0gYnkgYSBkZWx0YSAqLworCQlzaXplX3QgZTsgLyogLSBieSBhbiBleGNlcHRpb24g Ki8KKwkJc2l6ZV90IHA7IC8qIC0gYnkgYW4gZXhjZXB0aW9uIHBvc2l0aW9uICovCisJCWl0 ZW1fdCBtYXNrOworCQlkZm9yX3N0YXRzX3Qgc3RhdHM7CisJCXNpemVfdCBqOworCisJCXN0 YXRzID0gZGZvcl9jYWxjX3N0YXRzKCpkZm9yKTsKKwkJZGZvci0+bmJ5dGVzID0gZGZvcl9j YWxjX25ieXRlcygqZGZvcik7CisKKwkJaWYgKGJ1ZlNpemUgIT0gMCkKKwkJeworCQkJLyog TWF4IHNpemUgb2YgdGhlIGRmb3ItPnBhY2sgaXMgY250ICogc2l6ZW9mKHNpemVfdCkgKi8K KwkJCWRmb3ItPnBhY2sgPSBidWY7CisJCQlkZm9yLT5vdXRlcl9tZW0gPSB0cnVlOworCQkJ aWYgKGRmb3ItPm5ieXRlcyA+IGNudCAqIHNpemVvZihzaXplX3QpKQorCQkJCWdvdG8gZGZv cl9wYWNrX2Vycm9yOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogSWYgYSBidWZmZXIgd2Fz IG5vdCBwcm92aWRlZCBieSBjYWxsZXIgd2UgYWxsb2NhdGUgaXQgYnkKKwkJCSAqIG91cnNl bHZlcworCQkJICovCisJCQlkZm9yLT5wYWNrID0gKHVpbnQ4X3QgKilERk9SX01BTExPQygo ZGZvci0+bmJ5dGVzKSk7CisKKwkJCWRmb3ItPm91dGVyX21lbSA9IGZhbHNlOworCQl9CisK KwkJaWYgKGRmb3ItPnBhY2sgPT0gTlVMTCkKKwkJCWdvdG8gZGZvcl9wYWNrX2Vycm9yOwor CisJCW1lbXNldChkZm9yLT5wYWNrLCAwLCBkZm9yLT5uYnl0ZXMpOworCisJCS8qIGluZGV4 IG9mIHRoZSBuZXh0IGZyZWUgYml0IHRvIGJlIHVzZWQ6ICovCisJCWQgPSAwOwkJCSAgIC8q IC0gYnkgYSBkZWx0YSAqLworCQllID0gc3RhdHMuZGVsdGFfcGFja19uYml0czsgICAvKiAt IGJ5IGFuIGV4Y2VwdGlvbiAqLworCQlwID0gZSArIHN0YXRzLmV4Y19wYWNrX25iaXRzOyAv KiAtIGJ5IGFuIGV4Y2VwdGlvbiBwb3NpdGlvbiBpbmRleCAqLworCQkvKiBBIG1hc2sgbG9v a3MgbGlrZSAwMDAxMTExLiBJdCBpcyBhbHNvIHRoZQorCQkgKiBtYXggdmFsdWUgb2YgYSBz aG9ydCBkZWx0YSAqLworCQltYXNrID0gd2lkdGhfdG9fbWFzayhkZm9yLT5kZWx0YV93aWQp OworCisJCWogPSAwOworCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZEZWx0YXMuY250OyBp KyspCisJCXsKKwkJCWQgPSBiaXRwYWNrX3BhY2soZGZvci0+cGFjaywgZCwgdkRlbHRhcy5t W2ldICYgbWFzaywKKwkJCQkJCQkgZGZvci0+ZGVsdGFfd2lkKTsKKworCQkJaWYgKHZEZWx0 YXMubVtpXSA+IG1hc2spCisJCQl7CisJCQkJQXNzZXJ0KGlzRXhjVXNhZ2UgPT0gREZPUl9F WENfVVNFKTsKKwkJCQlBc3NlcnQodXN2RXhjUG9zLm1bal0gPT0gaSk7CisJCQkJQXNzZXJ0 KGogPCB1c3ZFeGNQb3MuY250KTsKKwkJCQlBc3NlcnQoaiA8IHZFeGNQb3NEZWx0YXMuY250 KTsKKwkJCQlBc3NlcnQoZGZvci0+ZXhjX3dpZCAhPSAwKTsKKwkJCQlBc3NlcnQoZGZvci0+ ZXhjX3Bvc193aWQgIT0gMCk7CisKKwkJCQllID0gYml0cGFja19wYWNrKGRmb3ItPnBhY2ss IGUsIHZEZWx0YXMubVtpXSA+PiBkZm9yLT5kZWx0YV93aWQsCisJCQkJCQkJCSBkZm9yLT5l eGNfd2lkKTsKKwkJCQlwID0gYml0cGFja19wYWNrKGRmb3ItPnBhY2ssIHAsIHZFeGNQb3NE ZWx0YXMubVtqXSwgZGZvci0+ZXhjX3Bvc193aWQpOworCQkJCWorKzsKKwkJCX0KKwkJfQor CisJCWlmIChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VTRSkKKwkJCUFzc2VydChqID09IHVz dkV4Y1Bvcy5jbnQpOworCQllbHNlCisJCQlBc3NlcnQoaiA9PSAwKTsKKworCQlBc3NlcnQo ZCA9PSBzdGF0cy5kZWx0YV9wYWNrX25iaXRzKTsKKwkJQXNzZXJ0KGUgPT0gc3RhdHMuZGVs dGFfcGFja19uYml0cyArIHN0YXRzLmV4Y19wYWNrX25iaXRzKTsKKwkJQXNzZXJ0KHAgPT0K KwkJCSAgIHN0YXRzLmRlbHRhX3BhY2tfbmJpdHMgKyBzdGF0cy5leGNfcGFja19uYml0cyAr CisJCQkJICAgc3RhdHMuZXhjX3Bvc19wYWNrX25iaXRzKTsKKwkJcmVzID0gMDsKKwl9Citk Zm9yX3BhY2tfcmV0OgorCXZlY3RfY2xlYXIoJnVzdkV4Y1Bvcyk7CisJdmVjdF9jbGVhcigm dkV4Y1Bvc0RlbHRhcyk7CisJdmVjdF9jbGVhcigmdkRlbHRhcyk7CisJcmV0dXJuIHJlczsK K2Rmb3JfcGFja19lcnJvcjoKKwlpZiAoZGZvciAhPSBOVUxMKQorCQlkZm9yX2NsZWFyX21l dGEoZGZvcik7CisJcmVzID0gLTE7CisJZ290byBkZm9yX3BhY2tfcmV0OworfQorCisvKgor ICogZGZvcl91bnBhY2sKKyAqCisgKiBJZiBhIGNhbGxlciBuZWVkcyB0byBhdm9pZCB1c2lu ZyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGV5IGhhdmUgdG86CisgKiAxKSBwcm92 aWRlIHRoZSBleHRlcm5hbCBtZW1vcnkgYnVmZmVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZl ciBzaG91bGQgYmUgbm90CisgKiAgICBsZXNzIHRoYW46CisgKiAgICAgICAgCTIgKiBkZm9y Lml0ZW1fY250ICogc2l6ZW9mKGl0ZW1fdCkgKyAyICogZGZvci5leGNfY250ICogc2l6ZW9m KGl0ZW1fdCkKKyAqCisgKiAyKSB0aGUgdlZhbHMgdmVjdG9yIGhhcyB0byBiZSBjcmVhdGVk IGJ1dCBtdXN0IG5vdCBiZSBpbml0aWFsaXNlZC4gVGhlCisgKiAgICBkZm9yX3VucGFjayBz ZXRzIHZWYWxzIGluIHRoZSAnb3V0ZXIgbWVtb3J5JyByZWdpbWVuIGFuZCB3aWxsIHNldCB2 VmFsLT5tCisgKiAgICB0byBidWYuCisgKgorICogUHJvdmlkZWQgZHluYW1pYyBhbGxvY2F0 aW9uIGlzIHVzZWQgYnkgdGhlIGRmb3JfdW5wYWNrLCBhIGNhbGxlciB3aWxsIGhhdmUgdG8K KyAqIGZyZWUgdGhlIHBpZWNlIG9mIG1lbW9yeSBwb2ludGVkIGJ5IHZWYWxzLT5tLCB1c2lu ZyB2ZWN0X2NsZWFyKCZ2VmFscykuCisgKgorICogQXJlIHRoZSBvdXRlciBtZW1vcnkgaXMg dXNlZAorICovCitpbnQKK2Rmb3JfdW5wYWNrKGNvbnN0IGRmb3JfbWV0YV90ICpkZm9yLCB1 bmlxc29ydHZlY3RfdCAqdlZhbHMsIHNpemVfdCBidWZTaXplLAorCQkJdWludDhfdCBidWZb XSkKK3sKKwlpbnQgcmVzID0gLTE7CisJc2l6ZV90IHN6RGVsdGFQYWNrOworCXZlY3RfdCB2 RXhjcyA9IHsgMCB9OworCXZlY3RfdCB2RXhjUG9zcyA9IHsgMCB9OworCWV4Y2FsZ190IGlz RXhjVXNhZ2UgPSAoZGZvci0+ZXhjX2NudCA9PSAwKSA/IERGT1JfRVhDX0RPTlRfVVNFIDoK KwkJCQkJCQkJCQkJCSBERk9SX0VYQ19VU0U7CisKKwlpZiAodlZhbHMgPT0gTlVMTCkKKwkJ Z290byBkZm9yX3VucGFja19lcnJvcjsKKworCWlmIChidWZTaXplICE9IDAgJiYKKwkJYnVm U2l6ZSA8ICgyICogZGZvci0+aXRlbV9jbnQgKiBzaXplb2YoaXRlbV90KSArCisJCQkJICAg MiAqIGRmb3ItPmV4Y19jbnQgKiBzaXplb2YoaXRlbV90KSkpCisJCWdvdG8gZGZvcl91bnBh Y2tfZXJyb3I7CisKKwlzekRlbHRhUGFjayA9IGRmb3ItPmRlbHRhX3dpZCAqIGRmb3ItPml0 ZW1fY250OworCisJeworCQl1aW50OF90ICp2YWxzQnVmID0gTlVMTDsKKwkJaWYgKGJ1ZlNp emUgIT0gMCkKKwkJCXZhbHNCdWYgPSBidWY7CisKKwkJaWYgKHZlY3RfaW5pdCh2VmFscywg ZGZvci0+aXRlbV9jbnQsIChpdGVtX3QgKil2YWxzQnVmKSAhPSAwKQorCQkJZ290byBkZm9y X3VucGFja19lcnJvcjsKKwl9CisKKwkvKiBDYWxjdWxhdGUgZXhjZXB0aW9ucyAqLworCWlm IChpc0V4Y1VzYWdlID09IERGT1JfRVhDX1VTRSkKKwl7CisJCXNpemVfdCBzekV4Y1BhY2s7 CisJCXNpemVfdCBjckV4YzsgLyogY2FyZXQgKGN1cnNvcikgKi8KKwkJc2l6ZV90IGNyUG9z OyAvKiBjYXJldCAoY3Vyc29yKSAqLworCisJCXVpbnQ4X3QgKmV4Y0J1ZiA9IE5VTEw7CisJ CXVpbnQ4X3QgKmV4Y1Bvc3NCdWYgPSBOVUxMOworCisJCWludCByZXMxID0gMDsKKwkJaW50 IHJlczIgPSAwOworCisJCXN6RXhjUGFjayA9IGRmb3ItPmV4Y19jbnQgKiBkZm9yLT5leGNf d2lkOworCQljckV4YyA9IHN6RGVsdGFQYWNrOworCQljclBvcyA9IGNyRXhjICsgc3pFeGNQ YWNrOworCisJCWlmIChidWZTaXplICE9IDApCisJCXsKKwkJCS8qIHN0ZXAgb3ZlciB0aGUg bWVtb3J5IG9jY3VwaWVkIGJ5IHZWYWxzICovCisJCQlleGNCdWYgPSBidWYgKyBkZm9yLT5p dGVtX2NudCAqIHNpemVvZihpdGVtX3QpOworCQkJZXhjUG9zc0J1ZiA9IGV4Y0J1ZiArIGRm b3ItPmV4Y19jbnQgKiBzaXplb2YoaXRlbV90KTsKKwkJfQorCisJCXJlczEgPSB2ZWN0X2lu aXQoJnZFeGNzLCBkZm9yLT5leGNfY250LCAoaXRlbV90ICopZXhjQnVmKTsKKwkJcmVzMiA9 IHZlY3RfaW5pdCgmdkV4Y1Bvc3MsIGRmb3ItPmV4Y19jbnQsIChpdGVtX3QgKilleGNQb3Nz QnVmKTsKKworCQlpZiAocmVzMSAhPSAwIHx8IHJlczIgIT0gMCkKKwkJCWdvdG8gZGZvcl91 bnBhY2tfZXJyb3I7CisKKworCQlmb3IgKHNpemVfdCBwb3NFeGMgPSAwLCBqID0gMDsgaiA8 IGRmb3ItPmV4Y19jbnQ7IGorKykKKwkJeworCQkJaXRlbV90IGRlbHRhUG9zOworCQkJcmVz MSA9IHZlY3RfYXBwZW5kKCZ2RXhjcywKKwkJCQkJCQkgICBiaXRwYWNrX3VucGFjayhkZm9y LT5wYWNrLCAmY3JFeGMsCisJCQkJCQkJCQkJCSAgZGZvci0+ZXhjX3dpZCkpOworCQkJLyog Q2FsY3VsYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXhjZXB0aW9uIGZyb20gdGhlIGRlbHRh IG9mIHRoZQorCQkJICogcG9zaXRpb24gb2YgdGhlIGV4Y2VwdGlvbiAqLworCQkJZGVsdGFQ b3MgPSBiaXRwYWNrX3VucGFjayhkZm9yLT5wYWNrLCAmY3JQb3MsIGRmb3ItPmV4Y19wb3Nf d2lkKTsKKwkJCXBvc0V4YyArPSBkZWx0YVBvczsKKwkJCXJlczIgPSB2ZWN0X2FwcGVuZCgm dkV4Y1Bvc3MsIHBvc0V4Yyk7CisJCQlpZiAocmVzMSAhPSAwIHx8IHJlczIgIT0gMCkKKwkJ CQlnb3RvIGRmb3JfdW5wYWNrX2Vycm9yOworCQl9CisJCUFzc2VydChjckV4YyA9PSBzekRl bHRhUGFjayArIHN6RXhjUGFjayk7CisJCUFzc2VydChjclBvcyA9PQorCQkJICAgc3pEZWx0 YVBhY2sgKyBzekV4Y1BhY2sgKyBkZm9yLT5leGNfcG9zX3dpZCAqIGRmb3ItPmV4Y19jbnQp OworCX0KKworCXsgLyogVW5wYWNrIGRlbHRhcyBhbmQgY2FsY3VsYXRlIHRhcmdldCB2YWx1 ZXMgKi8KKwkJaXRlbV90IG1EZWx0YTsKKwkJaXRlbV90IG1TdW0gPSAwOworCQlzaXplX3Qg aiA9IDA7IC8qIGluZGV4IG9mIGFuIGV4Y2VwdGlvbiBhbmQgaXRzIHBvc2l0aW9uIGluIHZl Y3RvcnMgKi8KKwkJc2l6ZV90IGNyRGVsdGEgPSAwOworCQlmb3IgKHNpemVfdCBpID0gMDsg aSA8IGRmb3ItPml0ZW1fY250OyBpKyspCisJCXsKKwkJCW1EZWx0YSA9IGJpdHBhY2tfdW5w YWNrKGRmb3ItPnBhY2ssICZjckRlbHRhLCBkZm9yLT5kZWx0YV93aWQpOworCisJCQlpZiAo aXNFeGNVc2FnZSA9PSBERk9SX0VYQ19VU0UgJiYKKwkJCQlqIDwgdkV4Y3MuY250ICYmCisJ CQkJaSA9PSB2RXhjUG9zcy5tW2pdKQorCQkJeworCQkJCUFzc2VydChqIDwgZGZvci0+ZXhj X2NudCk7CisJCQkJbURlbHRhIHw9IHZFeGNzLm1bal0gPDwgZGZvci0+ZGVsdGFfd2lkOwor CQkJCWorKzsKKwkJCX0KKwkJCW1TdW0gKz0gbURlbHRhOworCQkJdmVjdF9hcHBlbmQodlZh bHMsIG1TdW0pOworCQl9CisJCUFzc2VydChjckRlbHRhID09IHN6RGVsdGFQYWNrKTsKKwkJ cmVzID0gMDsKKwl9CisKK2Rmb3JfdW5wYWNrX3JldDoKKwl2ZWN0X2NsZWFyKCZ2RXhjUG9z cyk7CisJdmVjdF9jbGVhcigmdkV4Y3MpOworCXJldHVybiByZXM7CitkZm9yX3VucGFja19l cnJvcjoKKwl2ZWN0X2NsZWFyKHZWYWxzKTsKKwlyZXMgPSAtMTsKKwlnb3RvIGRmb3JfdW5w YWNrX3JldDsKK30KKwordm9pZAorZGZvcl9jbGVhcl9tZXRhKGRmb3JfbWV0YV90ICptZXRh KQoreworCWlmIChtZXRhID09IE5VTEwpCisJCXJldHVybjsKKworCWlmIChtZXRhLT5wYWNr ICE9IE5VTEwgJiYgIW1ldGEtPm91dGVyX21lbSkKKwkJREZPUl9GUkVFKG1ldGEtPnBhY2sp OworCisJbWVtc2V0KG1ldGEsIDAsIHNpemVvZihkZm9yX21ldGFfdCkpOworfQorCitkZm9y X3N0YXRzX3QKK2Rmb3JfY2FsY19zdGF0cyhkZm9yX21ldGFfdCBkZm9yKQoreworCWRmb3Jf c3RhdHNfdCBzdGF0OworCXNpemVfdCBuYnl0ZXM7CisJc3RhdC5kZWx0YV9wYWNrX25iaXRz ID0gZGZvci5kZWx0YV93aWQgKiBkZm9yLml0ZW1fY250OworCXN0YXQuZXhjX3BhY2tfbmJp dHMgPSBkZm9yLmV4Y193aWQgKiBkZm9yLmV4Y19jbnQ7CisJc3RhdC5leGNfcG9zX3BhY2tf bmJpdHMgPSBkZm9yLmV4Y19wb3Nfd2lkICogZGZvci5leGNfY250OworCisJc3RhdC5uYml0 cyA9IHN0YXQuZGVsdGFfcGFja19uYml0cyArIHN0YXQuZXhjX3BhY2tfbmJpdHMgKyBzdGF0 LmV4Y19wb3NfcGFja19uYml0czsKKworCS8qIElmIHRoZSBkaXZpc2lvbiByZXN1bHRzIGlu IHRoZSByZW1haW5kZXIsIHdlIHVzZSBhbiBhZGRpdGlvbmFsCisJICogYnl0ZSAqLworCW5i eXRlcyA9IChzdGF0Lm5iaXRzICsgNykgLyA4OworCXN0YXQucmF0aW8gPSAoZmxvYXQpKHNp emVvZihpdGVtX3QpICogZGZvci5pdGVtX2NudCkgLyAoZmxvYXQpbmJ5dGVzOworCisJcmV0 dXJuIHN0YXQ7Cit9CisKK3NpemVfdCBkZm9yX2NhbGNfbmJ5dGVzKGRmb3JfbWV0YV90IGRm b3IpCit7CisJZGZvcl9zdGF0c190IHN0YXQ7CisJc3RhdCA9IGRmb3JfY2FsY19zdGF0cyhk Zm9yKTsKKwlyZXR1cm4gKHN0YXQubmJpdHMgKyA3KSAvIDg7Cit9CisKKyNpbmNsdWRlICJs aWIvZGZvcl90ZW1wbF91bmRlZi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGliL2Rm b3JfdTE2LmMgYi9zcmMvYmFja2VuZC9saWIvZGZvcl91MTYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjcwNTFmNTU5MjUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9saWIvZGZvcl91MTYuYwpAQCAtMCwwICsxLDggQEAKKy8qCisgKiBG aWxlOiBkZm9yX3UxNi5jCisgKi8KKworLyogY2xhbmctZm9ybWF0IG9mZiAqLworI2luY2x1 ZGUgImxpYi9kZm9yX3UxNl9jb25maWcuaCIKKyNpbmNsdWRlICJkZm9yX3RlbXBsLmMiCisv KiBjbGFuZy1mb3JtYXQgb24gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYi9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL2xpYi9tZXNvbi5idWlsZAppbmRleCAwOTg0YmQwZTNm Ni4uN2Y2NzMwZWZiYTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYi9tZXNvbi5idWls ZAorKysgYi9zcmMvYmFja2VuZC9saWIvbWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAK IGRmb3Jfc291cmNlcyA9IGZpbGVzKAogICAnYml0cGFja191MTYuYycsCisgICdkZm9yX3Ux Ni5jJywKICAgJ3ZlY3RfdTE2LmMnCiApCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xp Yi9kZm9yX3RlbXBsLmggYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1wbC5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNGMxZDQxYzFkMwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3RlbXBsLmgKQEAgLTAsMCArMSwyNyBA QAorLyoKKyAqIEZpbGU6IGRmb3JfdGVtcGwuaAorICovCisjaW5jbHVkZSAiZGZvcl90ZW1w bF9zdGFwbGUuaCIKKworZXh0ZXJuIGludCBkZm9yX2NhbGNfZGVsdGFzKHNpemVfdCBjbnQs IGNvbnN0IGl0ZW1fdCBhcnJbXSwgdmVjdF90ICp2RGVsdGFzLAorCQkJCQkJCXVuaXFzb3J0 dmVjdF90ICp1c3ZEZWx0YVdpZHRocywKKwkJCQkJCQl2ZWN0X3QgKnZXaWR0aENvdW50ZXJz KTsKKworZXh0ZXJuIGludCBkZm9yX2NhbGNfd2lkdGgoc2l6ZV90IGNudERlbHRhLAorCQkJ CQkJICAgY29uc3QgdW5pcXNvcnR2ZWN0X3QgKnVzdkRlbHRhV2lkdGhzLAorCQkJCQkJICAg Y29uc3QgdmVjdF90ICp2V2lkdGhDb3VudGVycywgc2l6ZV90ICp3aWR0aCwKKwkJCQkJCSAg IHNpemVfdCAqY250RXhjZXB0aW9ucyk7CisKK2V4dGVybiBpbnQgZGZvcl9wYWNrKHNpemVf dCBjbnQsIGNvbnN0IGl0ZW1fdCBhcnJbXSwgZXhjYWxnX3QgaXNFeGNVc2FnZSwKKwkJCQkJ IGRmb3JfbWV0YV90ICpkZm9yLCBzaXplX3QgYnVmU2l6ZSwgdWludDhfdCBidWZbXSk7CisK K2V4dGVybiBpbnQgZGZvcl91bnBhY2soY29uc3QgZGZvcl9tZXRhX3QgKmRmb3IsIHVuaXFz b3J0dmVjdF90ICp2VmFscywKKwkJCQkJICAgc2l6ZV90IGJ1ZlNpemUsIHVpbnQ4X3QgYnVm W10pOworCitleHRlcm4gdm9pZCBkZm9yX2NsZWFyX21ldGEoZGZvcl9tZXRhX3QgKmRmb3Ip OworCitleHRlcm4gZGZvcl9zdGF0c190IGRmb3JfY2FsY19zdGF0cyhkZm9yX21ldGFfdCBk Zm9yKTsKKworZXh0ZXJuIHNpemVfdCBkZm9yX2NhbGNfbmJ5dGVzKGRmb3JfbWV0YV90IGRm b3IpOworCisjaW5jbHVkZSAiZGZvcl90ZW1wbF91bmRlZi5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGliL2Rmb3JfdGVtcGxfc3RhcGxlLmggYi9zcmMvaW5jbHVkZS9saWIvZGZv cl90ZW1wbF9zdGFwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZTkzYzQwYWMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9saWIvZGZv cl90ZW1wbF9zdGFwbGUuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIEZpbGU6IGRmb3Jf c3RhcGxlX3RlbXBsLmgKKyAqLworCisjaW5jbHVkZSAiYy5oIgorCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBOT05SRVVTQUJMRSBDT0RFLCBhbGxvd2VkIHRvIGJlIGluY2x1 ZGVkIG9ubHkgb25jZQorICoKKyAqIFRoaXMgY29kZSBzaG91bGQgYXBwZWFyIG9ubHkgb25j ZSBpbiBhIGZpbGUgKG9yIGluIGEgY2hhaW4gb2YgZmlsZXMpCisgKiBpbmNsdWRpbmcgdGhp cyBoZWFkZXIgd2l0aCAjaW5jbHVkZS4gU28sIHdlIHByb3RlY3QgaXQgZnJvbSBkdXBsaWNh dGVzIGJ5CisgKiBtZWFucyBvZiBtYWNybworICoKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKyNpZm5kZWYgX0RGT1JfU1RBUExFX1RFTVBMX0hfVU5JUVVFX0NPREVfCisjZGVmaW5l IF9ERk9SX1NUQVBMRV9URU1QTF9IX1VOSVFVRV9DT0RFXworCit0eXBlZGVmIHN0cnVjdCB7 CisJc2l6ZV90IGl0ZW1fY250OworCXNpemVfdCBkZWx0YV93aWQ7CisJc2l6ZV90IGV4Y19j bnQ7CisJc2l6ZV90IGV4Y193aWQ7CisJc2l6ZV90IGV4Y19wb3Nfd2lkOworCXNpemVfdCBu Ynl0ZXM7IC8qIHNpemUgb2YgcGFjayBpbiBieXRlcyAqLworCXVpbnQ4X3QgKnBhY2s7CisJ Ym9vbCBvdXRlcl9tZW07Cit9IGRmb3JfbWV0YV90OworCit0eXBlZGVmIHN0cnVjdCB7CisJ c2l6ZV90IG5iaXRzOyAgLyogc2l6ZSBvZiBwYWNrIGluIGJpdHMgdXNlZCBpbiBmYWN0ICov CisJc2l6ZV90IGRlbHRhX3BhY2tfbmJpdHM7IC8qIGluIGJpdHMgKi8KKwlzaXplX3QgZXhj X3BhY2tfbmJpdHM7IC8qIGluIGJpdHMgKi8KKwlzaXplX3QgZXhjX3Bvc19wYWNrX25iaXRz OyAvKiBpbiBiaXRzICovCisJZmxvYXQgcmF0aW87ICAvKiBjb21wcmVzc2lvbiByYXRpbyAq LworfSBkZm9yX3N0YXRzX3Q7CisKK3R5cGVkZWYgZW51bSB7CisJREZPUl9FWENfRE9OVF9V U0UgPSAwLAorCURGT1JfRVhDX1VTRSA9IDEKK30gZXhjYWxnX3Q7CisKKyNlbmRpZiAvKiBf REZPUl9TVEFQTEVfVEVNUExfSF9VTklRVUVfQ09ERV8gKi8KKworLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICogRW5kIG9mIENvZGUsIGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQgb25s eSBvbmNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIFJFVVNBQkxFIENPREUKKyAqCisgKiBUaGlzIGNvZGUgY2FuIGJlIHJl dXNlZCB3aXRoICNpbmNsdWRlIGRpcmVjdGl2ZSBpbiBhIGZpbGUgaWYgREZPUl9NQVJLRVIg aXMKKyAqIHJlZGVmaW5lZC4gVGhpcyBhbGxvd3MgY3JlYXRpb24gb2Ygc2V2ZXJhbCB0eXBl cyBvZiB2ZWN0b3JzIHdpdGggZGlmZmVyZW50CisgKiB0eXBlcyBvZiBtZW1iZXJzLgorICoK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBERk9SX0lURU1fVFlQRQor I2Vycm9yICJERk9SX0lURU1fVFlQRSBtYWNybyBpcyBpbmRlZmluZWQuIgorI2VuZGlmCisK KyNpZm5kZWYgREZPUl9NQVJLRVIKKyNlcnJvciAiREZPUl9NQVJLRVIgbWFjcm8gaXMgaW5k ZWZpbmVkLiIKKyNlbmRpZgorCisjaWZuZGVmIERGT1JfTUFMTE9DCisjZXJyb3IgIkRGT1Jf TUFMTE9DIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKworI2lmbmRlZiBERk9SX0ZS RUUKKyNlcnJvciAiREZPUl9GUkVFIG1hY3JvIGlzIGluZGVmaW5lZC4iCisjZW5kaWYKKwor I2RlZmluZSBNQUtFX0hFQURFUl9OQU1FKHYsIG0pIENwcEFzU3RyaW5nMihDcHBDb25jYXQy KHYsIG0pLmgpCisKKy8qCisgKiBIZWFkZXJzIGZyb20gdmVjdCBhbmQgYml0cGFjayB1bml0 cworICoKKyAqIEV4YW1wbGU6IGRmb3JfdTE2LmMgYW5kIGRmb3JfdTE2LmggbmVlZCB2ZWN0 X3UxNi5oIGFuZCBiaXRwYWNrX3UxNi5oCisgKi8KKyNpbmNsdWRlIE1BS0VfSEVBREVSX05B TUUobGliL3ZlY3RfLCBERk9SX01BUktFUikKKyNpbmNsdWRlIE1BS0VfSEVBREVSX05BTUUo bGliL2JpdHBhY2tfLCBERk9SX01BUktFUikKKworLyogVHlwZXMgKi8KKyNkZWZpbmUgaXRl bV90CQkgICBERk9SX0lURU1fVFlQRQorI2RlZmluZSB2ZWN0X3QJCSAgIENwcENvbmNhdFRy aXBsZTIodmVjdF8sIERGT1JfTUFSS0VSLCBfdCkKKyNkZWZpbmUgdW5pcXNvcnR2ZWN0X3Qg Q3BwQ29uY2F0VHJpcGxlMih1bmlxc29ydHZlY3RfLCBERk9SX01BUktFUiwgX3QpCisKKy8q IEZ1bmN0aW9ucyAqLworI2RlZmluZSBkZm9yX2NhbGNfZGVsdGFzIENwcENvbmNhdFRyaXBs ZTIoZGZvcl8sIERGT1JfTUFSS0VSLCBfY2FsY19kZWx0YXMpCisjZGVmaW5lIGRmb3JfY2Fs Y193aWR0aAkgQ3BwQ29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9jYWxjX3dp ZHRoKQorI2RlZmluZSBkZm9yX3BhY2sJCSBDcHBDb25jYXRUcmlwbGUyKGRmb3JfLCBERk9S X01BUktFUiwgX3BhY2spCisjZGVmaW5lIGRmb3JfdW5wYWNrCQkgQ3BwQ29uY2F0VHJpcGxl MihkZm9yXywgREZPUl9NQVJLRVIsIF91bnBhY2spCisjZGVmaW5lIGRmb3JfYW5hbHl6ZQkg Q3BwQ29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9hbmFseXplKQorI2RlZmlu ZSBkZm9yX2NsZWFyX21ldGEJIENwcENvbmNhdFRyaXBsZTIoZGZvcl8sIERGT1JfTUFSS0VS LCBfY2xlYXJfbWV0YSkKKyNkZWZpbmUgZGZvcl9jYWxjX3N0YXRzCSBDcHBDb25jYXRUcmlw bGUyKGRmb3JfLCBERk9SX01BUktFUiwgX2NhbGNfc3RhdHMpCisjZGVmaW5lIGRmb3JfY2Fs Y19uYnl0ZXMgQ3BwQ29uY2F0VHJpcGxlMihkZm9yXywgREZPUl9NQVJLRVIsIF9jYWxjX25i eXRlcykKKworLyogRnVuY3Rpb25zIG9mIHRoZSB2ZWN0IHVuaXQgKi8KKyNkZWZpbmUgdmVj dF9pbml0CQkgICBDcHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwgX2luaXQp CisjZGVmaW5lIHZlY3RfZmlsbAkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9N QVJLRVIsIF9maWxsKQorI2RlZmluZSB2ZWN0X3Jlc2VydmUJICAgQ3BwQ29uY2F0VHJpcGxl Mih2ZWN0XywgREZPUl9NQVJLRVIsIF9yZXNlcnZlKQorI2RlZmluZSB2ZWN0X2FwcGVuZAkJ ICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9hcHBlbmQpCisjZGVm aW5lIHZlY3RfcHJpbnQJCSAgIENwcENvbmNhdFRyaXBsZTIodmVjdF8sIERGT1JfTUFSS0VS LCBfcHJpbnQpCisjZGVmaW5lIHZlY3RfY29tcGFyZQkgICBDcHBDb25jYXRUcmlwbGUyKHZl Y3RfLCBERk9SX01BUktFUiwgX2NvbXBhcmUpCisjZGVmaW5lIHZlY3RfaW5zZXJ0CQkgICBD cHBDb25jYXRUcmlwbGUyKHZlY3RfLCBERk9SX01BUktFUiwgX2luc2VydCkKKyNkZWZpbmUg dmVjdF9jbGVhcgkJICAgQ3BwQ29uY2F0VHJpcGxlMih2ZWN0XywgREZPUl9NQVJLRVIsIF9j bGVhcikKKworI2RlZmluZSB1c3ZfaW5zZXJ0CQkgICBDcHBDb25jYXRUcmlwbGUyKHVzdl8s IERGT1JfTUFSS0VSLCBfaW5zZXJ0KQorI2RlZmluZSB1c3Zfc2VhcmNoCQkgICBDcHBDb25j YXRUcmlwbGUyKHVzdl8sIERGT1JfTUFSS0VSLCBfc2VhcmNoKQorCisvKiBGdW5jdGlvbnMg b2YgdGhlIGJpdHBhY2sgdW5pdCAqLworI2RlZmluZSB3aWR0aF9mcm9tX3ZhbCBDcHBDb25j YXRUcmlwbGUyKHdpZHRoXywgREZPUl9NQVJLRVIsIF9mcm9tX3ZhbCkKKyNkZWZpbmUgd2lk dGhfdG9fbWFzayAgQ3BwQ29uY2F0VHJpcGxlMih3aWR0aF8sIERGT1JfTUFSS0VSLCBfdG9f bWFzaykKKyNkZWZpbmUgYml0cGFja19wYWNrICAgQ3BwQ29uY2F0VHJpcGxlMihiaXRwYWNr XywgREZPUl9NQVJLRVIsIF9wYWNrKQorI2RlZmluZSBiaXRwYWNrX3VucGFjayBDcHBDb25j YXRUcmlwbGUyKGJpdHBhY2tfLCBERk9SX01BUktFUiwgX3VucGFjaykKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogRW5kIG9mIFJldXNhYmxlIENvZGUKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworLyoKKyAqIERvbid0IGZvcmdldCB0byBpbmNsdWRlIHRoaXMg Y29kZSBpbiB5b3VyIGZpbGUgdGhhdCB1c2VzIHRoaXMgaGVhZGVyCisgKiAgICAgI2luY2x1 ZGUgImRmb3JfdGVtcGxfdW5kZWYuaCIKKyAqCisgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2xpYi9kZm9yX3RlbXBsX3VuZGVmLmggYi9zcmMvaW5jbHVkZS9saWIvZGZvcl90ZW1w bF91bmRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNjBk MzYxOTMwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3RlbXBs X3VuZGVmLmgKQEAgLTAsMCArMSwyOSBAQAorI3VuZGVmIGl0ZW1fdAorI3VuZGVmIHZlY3Rf dAorI3VuZGVmIHVuaXFzb3J0dmVjdF90CisKKyN1bmRlZiBkZm9yX2NhbGNfZGVsdGFzCisj dW5kZWYgZGZvcl9jYWxjX3dpZHRoCisjdW5kZWYgZGZvcl9wYWNrCisjdW5kZWYgZGZvcl91 bnBhY2sKKyN1bmRlZiBkZm9yX2FuYWx5emUKKyN1bmRlZiBkZm9yX2NhbGNfc3RhdHMKKyN1 bmRlZiBkZm9yX2NhbGNfbmJ5dGVzCisKKyN1bmRlZiB2ZWN0X2NyZWF0ZQorI3VuZGVmIHZl Y3RfY3JlYXRlX2ZpbGxlZAorI3VuZGVmIHZlY3RfcmVzZXJ2ZQorI3VuZGVmIHZlY3RfYXBw ZW5kCisjdW5kZWYgdmVjdF9kZXN0cm95CisjdW5kZWYgdmVjdF9wcmludAorI3VuZGVmIHZl Y3RfY29tcGFyZQorI3VuZGVmIHZlY3RfaW5zZXJ0CisjdW5kZWYgdmVjdF9jbGVhcgorCisj dW5kZWYgdXN2X2luc2VydAorI3VuZGVmIHVzdl9zZWFyY2gKKworI3VuZGVmIHdpZHRoX2Zy b21fdmFsCisjdW5kZWYgd2lkdGhfdG9fbWFzaworI3VuZGVmIGJpdHBhY2tfcGFjaworI3Vu ZGVmIGJpdHBhY2tfdW5wYWNrCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvZGZvcl91 MTYuaCBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43MTZjOTlkYmM1NQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2xpYi9kZm9yX3UxNi5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBGaWxl OiBkZm9yX3UxNi5oCisgKi8KKworI2lmbmRlZiBfREZPUl9VMTZfSF8KKyNkZWZpbmUgX0RG T1JfVTE2X0hfCisKKy8qIGNsYW5nLWZvcm1hdCBvZmYgKi8KKyNpbmNsdWRlICJkZm9yX3Ux Nl9jb25maWcuaCIKKyNpbmNsdWRlICJkZm9yX3RlbXBsLmgiCisvKiBjbGFuZy1mb3JtYXQg b24gKi8KKworI2VuZGlmIC8qIF9ERk9SX1UxNl9IXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGliL2Rmb3JfdTE2X2NvbmZpZy5oIGIvc3JjL2luY2x1ZGUvbGliL2Rmb3JfdTE2 X2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NTE5 MzdhYzUxMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9kZm9yX3UxNl9j b25maWcuaApAQCAtMCwwICsxLDQgQEAKKyNkZWZpbmUgREZPUl9JVEVNX1RZUEUgdWludDE2 X3QKKyNkZWZpbmUgREZPUl9NQVJLRVIJICAgdTE2CisjZGVmaW5lIERGT1JfTUFMTE9DCSAg IG1hbGxvYworI2RlZmluZSBERk9SX0ZSRUUJICAgZnJlZQpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvZGZvci8uZ2l0aWdub3JlIGIvc3JjL3Rlc3QvZGZvci8uZ2l0aWdub3JlCmluZGV4IDBk NzdhNTEyMTZiLi40NDdlOTVjMGMwOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvZGZvci8uZ2l0 aWdub3JlCisrKyBiL3NyYy90ZXN0L2Rmb3IvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDQgQEAK IHRlc3RfYml0cGFja191MTYKK3Rlc3RfZGZvcl91MTYKIHRlc3RfdW5pcXNvcnR2ZWN0X3Ux NgogdGVzdF92ZWN0X3UxNgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSBi L3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKaW5kZXggM2IyYzAzNTkyN2YuLjQzZjBkNTFmYjcw IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9kZm9yL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L2Rm b3IvTWFrZWZpbGUKQEAgLTMyLDcgKzMyLDggQEAgTElCVEFQX09CSlMgPSAkKHRvcF9idWls ZGRpcikvc3JjL3Rlc3QvbGlidGFwL3RhcC5vCiAKIFRFU1RTPSB0ZXN0X3ZlY3RfdTE2IFwK ICAgICAgICB0ZXN0X3VuaXFzb3J0dmVjdF91MTYgXAotICAgICAgIHRlc3RfYml0cGFja191 MTYKKyAgICAgICB0ZXN0X2JpdHBhY2tfdTE2IFwKKyAgICAgICB0ZXN0X2Rmb3JfdTE2CiAK ICQoVEVTVFM6JT0lLm8pOiBDUFBGTEFHUyArPSAtSSQodG9wX2J1aWxkZGlyKS9zcmMvdGVz dCAtREZST05URU5ECiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2Rmb3IvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9kZm9yL21lc29uLmJ1aWxkCmluZGV4IGNlNzYyYzUyNDMwLi40YTc2MGFi NjhmYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvZGZvci9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9kZm9yL21lc29uLmJ1aWxkCkBAIC04LDYgKzgsNyBAQCBkZm9yX2RpciA9IGpvaW5f cGF0aHMobWVzb24ucHJvamVjdF9zb3VyY2Vfcm9vdCgpLCAnc3JjL2JhY2tlbmQvbGliJykK IGRmb3Jfc291cmNlcyA9IGZpbGVzKAogICBqb2luX3BhdGhzKGRmb3JfZGlyLCAndmVjdF91 MTYuYycpLAogICBqb2luX3BhdGhzKGRmb3JfZGlyLCAnYml0cGFja191MTYuYycpLAorICBq b2luX3BhdGhzKGRmb3JfZGlyLCAnZGZvcl91MTYuYycpLAogKQogCiBkZm9yX3Rlc3RfbGli ID0gc3RhdGljX2xpYnJhcnkoCkBAIC0zNiw2ICszNyw3IEBAIHRlc3RfbmFtZXMgPSBbCiAg ICd0ZXN0X3ZlY3RfdTE2JywKICAgJ3Rlc3RfdW5pcXNvcnR2ZWN0X3UxNicsCiAgICd0ZXN0 X2JpdHBhY2tfdTE2JywKKyAgJ3Rlc3RfZGZvcl91MTYnLAogXQogCiBmb3JlYWNoIHQgOiB0 ZXN0X25hbWVzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9kZm9yL3Rlc3RfZGZvcl91MTYuYyBi L3NyYy90ZXN0L2Rmb3IvdGVzdF9kZm9yX3UxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4zMjJiNzE0YmEzOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L2Rmb3IvdGVzdF9kZm9yX3UxNi5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogdGVz dF9kZm9yLmMKKyAqLworCisjaW5jbHVkZSAibGliL2JpdHBhY2tfdTE2LmgiCisjaW5jbHVk ZSAibGliL2Rmb3JfdTE2LmgiCisjaW5jbHVkZSAibGliL3ZlY3RfdTE2LmgiCisjaW5jbHVk ZSAibGlidGFwL3RhcC5oIgorI2luY2x1ZGUgInRlc3QuaCIKKwordm9pZCB0ZXN0X2RlbHRh X2NhbGN1bGF0aW9uKHNpemVfdCBjbnQsIHVpbnQxNl90IGluQXJyW10sIHNpemVfdCBjbnRE ZWx0YSwKKwkJCQkJCQl1aW50MTZfdCBtYXJEZWx0YXNFeHBlY3RlZFtdLCBzaXplX3QgY250 V2lkdGgsCisJCQkJCQkJdWludDE2X3QgbWFyV2lkdGhzRXhwZWN0ZWRbXSwgc2l6ZV90IGNu dFN0YXQsCisJCQkJCQkJdWludDE2X3QgbWFyV2lkdGhzU3RhdEV4cGVjdGVkW10pOworCit2 b2lkIHRlc3RfY2FsY19leGNlcHRpb25zKHNpemVfdCBudW1EZWx0YXMsIHNpemVfdCBudW1X aWR0aHMsCisJCQkJCQkgIHVpbnQxNl90IG1hcldpZHRoc1tdLCBzaXplX3QgbnVtQ291bnRz LAorCQkJCQkJICB1aW50MTZfdCBtYXJDb3VudHNbXSwgc2l6ZV90IHN6QXdhaXRlZFdpZHRo LAorCQkJCQkJICBzaXplX3QgY250QXdhaXRlZEV4Y0NvdW50KTsKKwordm9pZCB0ZXN0X2Rm b3Ioc2l6ZV90IGNudCwgdWludDE2X3QgYXJyW10sIGV4Y2FsZ190IGlzRXhjVXNhZ2UsCisJ CQkgICBzaXplX3Qgd2lkRGVsdGFBd2FpdGVkLCBzaXplX3QgY250RXhjQ250QXdhaXRlZCwK KwkJCSAgIHNpemVfdCB3aWRFeGNXaWRBd2FpdGVkLCBzaXplX3Qgd2lkRXhjUG9zV2lkQXdh aXRlZCwKKwkJCSAgIHNpemVfdCBjbnRCaXRzQ291bnRBd2FpdGVkLCBzaXplX3QgY250Qnl0 ZUNvdW50QXdhaXRlZCwKKwkJCSAgIGZsb2F0IGZsTWluUmF0aW9Bd2FpdGVkLCB1aW50OF90 IHU4YXJQYWNrQXdhaXRlZFtdKTsKKwordm9pZAordGVzdF9kZWx0YV9jYWxjdWxhdGlvbihz aXplX3QgY250LCB1aW50MTZfdCBpbkFycltdLCBzaXplX3QgY250RGVsdGEsCisJCQkJCSAg IHVpbnQxNl90IG1hckRlbHRhc0V4cGVjdGVkW10sIHNpemVfdCBjbnRXaWR0aCwKKwkJCQkJ ICAgdWludDE2X3QgbWFyV2lkdGhzRXhwZWN0ZWRbXSwgc2l6ZV90IGNudFN0YXQsCisJCQkJ CSAgIHVpbnQxNl90IG1hcldpZHRoc1N0YXRFeHBlY3RlZFtdKQoreworCXZlY3RfdTE2X3Qg dkRlbHRhczsKKwl2ZWN0X3UxNl90IHZXaWR0aENvdW50ZXJzOworCXVuaXFzb3J0dmVjdF91 MTZfdCB1c3ZEZWx0YVdpZHRoczsKKwl2ZWN0X3UxNl90IGF3YWl0ZWQ7CisJaW50IHJlczsK KworCXByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tXG4iKTsKKwlwcmludGYoIlRlc3RcbiIpOworCXByaW50ZigiLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCXByaW50Zigi ICBpbkFycjoiKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNudDsgaSsrKQorCQlwcmlu dGYoIiAldSIsICh1aW50MzJfdClpbkFycltpXSk7CisJcHJpbnRmKCJcbiIpOworCisJdmVj dF91MTZfaW5pdCgmdkRlbHRhcywgMCwgTlVMTCk7CisJdmVjdF91MTZfaW5pdCgmdXN2RGVs dGFXaWR0aHMsIDAsIE5VTEwpOworCXZlY3RfdTE2X2luaXQoJnZXaWR0aENvdW50ZXJzLCAw LCBOVUxMKTsKKworCS8qIFRlc3RlZCBmdW5jdGlvbiAqLworCXJlcyA9IGRmb3JfdTE2X2Nh bGNfZGVsdGFzKGNudCwgaW5BcnIsICZ2RGVsdGFzLCAmdXN2RGVsdGFXaWR0aHMsCisJCQkJ CQkJICAgJnZXaWR0aENvdW50ZXJzKTsKKwljbXBfb2socmVzLCAiPT0iLCAwKTsKKworCXBy aW50ZigiICBEZWx0YSBleHBlY3RlZDoiKTsKKwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNu dERlbHRhOyBpKyspCisJCXByaW50ZigiICV1IiwgKHVpbnQzMl90KW1hckRlbHRhc0V4cGVj dGVkW2ldKTsKKwlwcmludGYoIlxuIik7CisKKwlwcmludGYoIiAgRGVsdGEgZmFjdDogICAg Iik7CisJdmVjdF91MTZfcHJpbnQoJnZEZWx0YXMpOworCisJY21wX29rKHZEZWx0YXMuY250 LCAiPT0iLCBjbnQsICJUaGUgRGVsdGEgY291bnQgaXMgT0suIik7CisJdmVjdF91MTZfaW5p dCgmYXdhaXRlZCwgMCwgTlVMTCk7CisJdmVjdF91MTZfZmlsbCgmYXdhaXRlZCwgY250LCBt YXJEZWx0YXNFeHBlY3RlZCk7CisJY21wX29rKHZlY3RfdTE2X2NvbXBhcmUoJnZEZWx0YXMs ICZhd2FpdGVkKSwgIj09IiwgMCwKKwkJICAgIkFsbCBkZWx0YXMgYXJlIGNhbGN1bGF0ZWQg cHJvcGVybHkiKTsKKwl2ZWN0X3UxNl9jbGVhcigmYXdhaXRlZCk7CisKKwlwcmludGYoIiAg V2lkdGggZXhwZWN0ZWQ6Iik7CisJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbnRXaWR0aDsg aSsrKQorCQlwcmludGYoIiAldSIsICh1aW50MzJfdCltYXJXaWR0aHNFeHBlY3RlZFtpXSk7 CisJcHJpbnRmKCJcbiIpOworCisJcHJpbnRmKCIgIFdpZHRoIGZhY3Q6ICAgICIpOworCXZl Y3RfdTE2X3ByaW50KCZ1c3ZEZWx0YVdpZHRocyk7CisKKwljbXBfb2sodXN2RGVsdGFXaWR0 aHMuY250LCAiPT0iLCBjbnRXaWR0aCwgIlRoZSBXaWR0aCBjb3VudCBpcyBPSy4iKTsKKwor CS8qIGRvbid0IHJlYWxseSBuZWVkIGluaXRpYWxpc2F0aW9uIGFmdGVyIHZlY3RfY2xlYW4g aGF2aW5nIGJlZW4gZG9uZQorCSAqIGFib3ZlKi8KKwkvKiB2ZWN0X3UxNl9pbml0KCZhd2Fp dGVkLCAwLCBOVUxMKTsgKi8KKworCXZlY3RfdTE2X2ZpbGwoJmF3YWl0ZWQsIGNudFdpZHRo LCBtYXJXaWR0aHNFeHBlY3RlZCk7CisJY21wX29rKHZlY3RfdTE2X2NvbXBhcmUoJnVzdkRl bHRhV2lkdGhzLCAmYXdhaXRlZCksICI9PSIsIDAsCisJCSAgICJBbGwgZGVsdGEgd2lkdGhz IGlzIE9LLiIpOworCXZlY3RfdTE2X2NsZWFyKCZhd2FpdGVkKTsKKworCXByaW50ZigiICBT dGF0aXN0aWNzIGV4cGVjdGVkOiIpOworCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY250U3Rh dDsgaSsrKQorCQlwcmludGYoIiAldSIsICh1aW50MzJfdCltYXJXaWR0aHNTdGF0RXhwZWN0 ZWRbaV0pOworCXByaW50ZigiXG4iKTsKKworCXByaW50ZigiICBTdGF0aXN0aWNzIGZhY3Q6 ICAgICIpOworCXZlY3RfdTE2X3ByaW50KCZ2V2lkdGhDb3VudGVycyk7CisKKwljbXBfb2so CisJCXVzdkRlbHRhV2lkdGhzLmNudCwgIj09IiwgdldpZHRoQ291bnRlcnMuY250LAorCQki VGhlIGNvdW50IG9mIHN0YXRpc3RpY3Mgb2Ygd2lkdGhzIGlzIGVxdWFsIHRvIHRoZSBjb3Vu dCBvZiB3aWR0aHMuIik7CisKKwkvKiBkb24ndCByZWFsbHkgbmVlZCBpbml0aWFsaXNhdGlv biBhZnRlciB2ZWN0X2NsZWFuIGhhdmluZyBiZWVuIGRvbmUKKwkgKiBhYm92ZSovCisJdmVj dF91MTZfZmlsbCgmYXdhaXRlZCwgY250U3RhdCwgbWFyV2lkdGhzU3RhdEV4cGVjdGVkKTsK KwljbXBfb2sodmVjdF91MTZfY29tcGFyZSgmdldpZHRoQ291bnRlcnMsICZhd2FpdGVkKSwg Ij09IiwgMCwKKwkJICAgIldpZHRoIHN0YXRpc3RpY3MgaXMgT0suIik7CisJdmVjdF91MTZf Y2xlYXIoJmF3YWl0ZWQpOworCisJdmVjdF91MTZfY2xlYXIoJnZEZWx0YXMpOworCXZlY3Rf dTE2X2NsZWFyKCZ1c3ZEZWx0YVdpZHRocyk7CisJdmVjdF91MTZfY2xlYXIoJnZXaWR0aENv dW50ZXJzKTsKK30KKwordm9pZAordGVzdF9jYWxjX2V4Y2VwdGlvbnMoc2l6ZV90IG51bURl bHRhcywgc2l6ZV90IG51bVdpZHRocywgdWludDE2X3QgbWFyV2lkdGhzW10sCisJCQkJCSBz aXplX3QgbnVtQ291bnRzLCB1aW50MTZfdCBtYXJDb3VudHNbXSwKKwkJCQkJIHNpemVfdCBz ekF3YWl0ZWRXaWR0aCwgc2l6ZV90IGNudEF3YWl0ZWRFeGNDb3VudCkKK3sKKwlpbnQgcmVz OworCXZlY3RfdTE2X3QgdldpZHRoQ291bnRlcnM7CisJdW5pcXNvcnR2ZWN0X3UxNl90IHVz dkRlbHRhV2lkdGhzOworCXNpemVfdCB3aWR0aCwgY250RXhjZXB0aW9uczsKKworCXZlY3Rf dTE2X2luaXQoJnVzdkRlbHRhV2lkdGhzLCAwLCBOVUxMKTsKKwl2ZWN0X3UxNl9maWxsKCZ1 c3ZEZWx0YVdpZHRocywgbnVtV2lkdGhzLCBtYXJXaWR0aHMpOworCisJdmVjdF91MTZfaW5p dCgmdldpZHRoQ291bnRlcnMsIDAsIE5VTEwpOworCXZlY3RfdTE2X2ZpbGwoJnZXaWR0aENv dW50ZXJzLCBudW1Db3VudHMsIG1hckNvdW50cyk7CisKKwlyZXMgPSBkZm9yX3UxNl9jYWxj X3dpZHRoKG51bURlbHRhcywgJnVzdkRlbHRhV2lkdGhzLCAmdldpZHRoQ291bnRlcnMsCisJ CQkJCQkJICAmd2lkdGgsICZjbnRFeGNlcHRpb25zKTsKKwljbXBfb2socmVzLCAiPT0iLCAw KTsKKwljbXBfb2sod2lkdGgsICI9PSIsIHN6QXdhaXRlZFdpZHRoLCAiV2lkdGggaXMgT0su Iik7CisJY21wX29rKGNudEV4Y2VwdGlvbnMsICI9PSIsIGNudEF3YWl0ZWRFeGNDb3VudCwg IkV4Y2VwdGlvbnMgbnVtIGlzIE9LIik7CisKKwl2ZWN0X3UxNl9jbGVhcigmdXN2RGVsdGFX aWR0aHMpOworCXZlY3RfdTE2X2NsZWFyKCZ2V2lkdGhDb3VudGVycyk7Cit9CisKK3ZvaWQK K3Rlc3RfZGZvcihzaXplX3QgY250LCB1aW50MTZfdCBhcnJbXSwgZXhjYWxnX3QgaXNFeGNV c2FnZSwKKwkJICBzaXplX3Qgd2lkRGVsdGFXaWR0aEF3YWl0ZWQsIHNpemVfdCBjbnRFeGND bnRBd2FpdGVkLAorCQkgIHNpemVfdCB3aWRFeGNXaWRBd2FpdGVkLCBzaXplX3Qgd2lkRXhj UG9zV2lkQXdhaXRlZCwKKwkJICBzaXplX3QgY250Qml0c0NvdW50QXdhaXRlZCwgc2l6ZV90 IGNudEJ5dGVDb3VudEF3YWl0ZWQsCisJCSAgZmxvYXQgZmxNaW5SYXRpb0F3YWl0ZWQsIHVp bnQ4X3QgdThhclBhY2tBd2FpdGVkW10pCit7CisJaW50IHJlczsKKwlkZm9yX21ldGFfdCBk Zm9yOworCWRmb3Jfc3RhdHNfdCBzdGF0czsKKwl1bmlxc29ydHZlY3RfdTE2X3QgZXh0cmFj dGVkOworCisJcmVzID0gZGZvcl91MTZfcGFjayhjbnQsIGFyciwgaXNFeGNVc2FnZSwgJmRm b3IsIDAsIE5VTEwpOworCWNtcF9vayhyZXMsICI9PSIsIDAsICJkZm9yX3BhY2sgZnVuYyBo YXMgcHJvY2Vzc2VkIE9LLiIpOworCWNtcF9vayhkZm9yLml0ZW1fY250LCAiPT0iLCBjbnQs ICJDb3VudCBvZiBkZWx0YXMgaXMgT0suIik7CisJY21wX29rKGRmb3IuZGVsdGFfd2lkLCAi PT0iLCB3aWREZWx0YVdpZHRoQXdhaXRlZCwgIkRlbHRhIHdpZHRoIGlzIE9LLiIpOworCWNt cF9vayhkZm9yLmV4Y19jbnQsICI9PSIsIGNudEV4Y0NudEF3YWl0ZWQsICJFeGNlcHRpb24g Y291bnQgaXMgT0suIik7CisJY21wX29rKGRmb3IuZXhjX3dpZCwgIj09Iiwgd2lkRXhjV2lk QXdhaXRlZCwgIkV4Y2VwdGlvbiB3aWR0aCBpcyBPSy4iKTsKKwljbXBfb2soZGZvci5leGNf cG9zX3dpZCwgIj09Iiwgd2lkRXhjUG9zV2lkQXdhaXRlZCwKKwkJICAgIkV4Y2VwdGlvbiBw b3NpdGlvbiB3aWR0aCBpcyBPSy4iKTsKKwlvayhkZm9yLnBhY2sgIT0gTlVMTCwgIlBhY2sg aXMgY3JlYXRlZCAobm90IE5VTEwpLiIpOworCisJc3RhdHMgPSBkZm9yX3UxNl9jYWxjX3N0 YXRzKGRmb3IpOworCWNtcF9vayhzdGF0cy5uYml0cywgIj09IiwgY250Qml0c0NvdW50QXdh aXRlZCwgIkJpdHMgY291bnQgaXMgT0suIik7CisJY21wX29rKGRmb3IubmJ5dGVzLCAiPT0i LCBjbnRCeXRlQ291bnRBd2FpdGVkLCAiQnl0ZXMgY291bnQgaXMgT0suIik7CisJb2soc3Rh dHMucmF0aW8gPiBmbE1pblJhdGlvQXdhaXRlZCwgIkNvbXByZXNzaW9uIHJhdGlvIGlzIE9L LiIpOworCisJaWYgKHU4YXJQYWNrQXdhaXRlZCAhPSBOVUxMKQorCQlvaygwID09IG1lbWNt cChkZm9yLnBhY2ssIHU4YXJQYWNrQXdhaXRlZCwgY250Qnl0ZUNvdW50QXdhaXRlZCksCisJ CSAgICJQYWNrIGNvbnRlbnQgaXMgT0suIik7CisJZWxzZQorCQlvaygwID09IDAsICJQYWNr IGNvbnRlbnQgY2hlY2sgaXMgc2tpcHBlZC4iKTsKKworCXRlc3RfcHJpbnRfdTE2X2FycmF5 KGNudCwgKHVpbnQxNl90ICopYXJyLCAiXG5cbk9yaWdpbmFsIGludGVnZXIgYXJyYXkiKTsK Kwl0ZXN0X3ByaW50X3U4X2FycmF5KGRmb3IubmJ5dGVzLCBkZm9yLnBhY2ssICJDb21wcmVz c2VkIGludGVnZXIgYXJyYXkiKTsKKwlwcmludGYoIkNvbXByZXNzaW9uIHJhdGlvOiVmXG5c biIsIHN0YXRzLnJhdGlvKTsKKworCXZlY3RfdTE2X2luaXQoJmV4dHJhY3RlZCwgMCwgTlVM TCk7CisKKwlkZm9yX3UxNl91bnBhY2soJmRmb3IsICZleHRyYWN0ZWQsIDAsIE5VTEwpOwor CWNtcF9vayhleHRyYWN0ZWQuY250LCAiPT0iLCBjbnQsICJFeHRyYWN0ZWQgY291bnQgaXMg T0siKTsKKwljbXBfb2soMCwgIj09IiwgbWVtY21wKGFyciwgZXh0cmFjdGVkLm0sIGNudCks CisJCSAgICJFeHRyYWN0ZWQgYXJyYXkgaXMgZXF1YWwgdG8gb3JpZ2luYWwiKTsKKworCWZy ZWUoZGZvci5wYWNrKTsKKwl2ZWN0X3UxNl9jbGVhcigmZXh0cmFjdGVkKTsKK30KKworaW50 CittYWluKHZvaWQpCit7CisJcGxhbigxMzApOworCXByaW50ZigiPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJpbnRmKCJUZXN0IERFTFRBIENB TENVTEFUSU9OXG4iKTsKKwl7CisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oCisJCQkxMCwg KHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9LCAvKiBpbkFy ciAqLworCQkJMTAsCisJCQkodWludDE2X3RbXSkgeyAwLCAxLCAxLCAxLCAxLCAxLCAxLCAx LCAxLAorCQkJCQkJICAgMSB9LAkgICAvKiBtYXJEZWx0YXNFeHBlY3RlZCovCisJCQkxLCAo dWludDE2X3RbXSkgeyAxIH0sIC8qIG1hcldpZHRoc0V4cGVjdGVkICovCisJCQkxLCAodWlu dDE2X3RbXSkgeyAxMCB9IC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLyk7CisKKwkJdGVz dF9kZWx0YV9jYWxjdWxhdGlvbigKKwkJCTEwLCAodWludDE2X3RbXSkgeyAxLCAzLCA1LCA3 LCA5LCAxMSwgMTMsIDE1LCAxNywgMTkgfSwgLyogaW5BcnIgKi8KKwkJCTEwLAorCQkJKHVp bnQxNl90W10pIHsgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKwkJCQkJCSAgIDIgfSwJ CSAgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJMiwgKHVpbnQxNl90W10pIHsgMSwgMiB9 LCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMiwgKHVpbnQxNl90W10pIHsgMSwgOSB9 IC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLyk7CisKKwkJdGVzdF9kZWx0YV9jYWxjdWxh dGlvbigKKwkJCTE0LAorCQkJKHVpbnQxNl90W10pIHsgMTAwLCAyMDAsIDMwMCwgNDAwLCA0 MDEsIDQwMiwgNDAzLCA0MDQsIDQwNiwgNDA4LAorCQkJCQkJICAgNDEwLCA0MTIsIDQxNCwg NDE2IH0sIC8qIGluQXJyICovCisJCQkxNCwKKwkJCSh1aW50MTZfdFtdKSB7IDEwMCwgMTAw LCAxMDAsIDEwMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwKKwkJCQkJCSAgIDIgfSwJ CQkgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLworCQkJMywgKHVpbnQxNl90W10pIHsgMSwgMiwg NyB9LCAvKiBtYXJXaWR0aHNFeHBlY3RlZCAqLworCQkJMywgKHVpbnQxNl90W10pIHsgNCwg NiwgNCB9IC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLyk7CisKKwkJdGVzdF9kZWx0YV9j YWxjdWxhdGlvbigxLCAodWludDE2X3RbXSkgeyAxMjMgfSwgLyogaW5BcnIgKi8KKwkJCQkJ CQkgICAxLCAodWludDE2X3RbXSkgeyAxMjMgfSwgLyogbWFyRGVsdGFzRXhwZWN0ZWQqLwor CQkJCQkJCSAgIDEsICh1aW50MTZfdFtdKSB7IDcgfSwJLyogbWFyV2lkdGhzRXhwZWN0ZWQg Ki8KKwkJCQkJCQkgICAxLAorCQkJCQkJCSAgICh1aW50MTZfdFtdKSB7IDEgfSAvKiBtYXJX aWR0aHNTdGF0RXhwZWN0ZWQgKi8pOworCisJCXRlc3RfZGVsdGFfY2FsY3VsYXRpb24oMCwg TlVMTCwgLyogaW5BcnIgKi8KKwkJCQkJCQkgICAwLCBOVUxMLCAvKiBtYXJEZWx0YXNFeHBl Y3RlZCovCisJCQkJCQkJICAgMCwgTlVMTCwgLyogbWFyV2lkdGhzRXhwZWN0ZWQgKi8KKwkJ CQkJCQkgICAwLCBOVUxMIC8qIG1hcldpZHRoc1N0YXRFeHBlY3RlZCAqLyk7CisJfQorCXBy aW50ZigiVGVzdCBERUxUQSBDQUxDVUxBVElPTiBQQVNTRURcbiIpOworCXByaW50ZigiPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKKworCXByaW50 ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJp bnRmKCJUZXN0IEVYQ0VQVElPTlMgQ0FMQ1VMQVRJT05cbiIpOworCXsKKwkJaW50IHJlczsK KwkJdmVjdF91MTZfdCB2V2lkdGhDb3VudGVyczsKKwkJdW5pcXNvcnR2ZWN0X3UxNl90IHVz dkRlbHRhV2lkdGhzOworCQlzaXplX3Qgd2lkdGgsIGNudEV4Y2VwdGlvbnM7CisKKwkJdmVj dF91MTZfaW5pdCgmdXN2RGVsdGFXaWR0aHMsIDAsIE5VTEwpOworCQl2ZWN0X3UxNl9maWxs KCZ1c3ZEZWx0YVdpZHRocywgMywgKHVpbnQxNl90W10pIHsgMSwgMiwgNyB9KTsKKworCQl2 ZWN0X3UxNl9pbml0KCZ2V2lkdGhDb3VudGVycywgMCwgTlVMTCk7CisJCXZlY3RfdTE2X2Zp bGwoJnZXaWR0aENvdW50ZXJzLCAzLCAodWludDE2X3RbXSkgeyA0LCA2LCA0IH0pOyAvLyA0 KzYrND0xNAorCisJCXJlcyA9IGRmb3JfdTE2X2NhbGNfd2lkdGgoMTQsICZ1c3ZEZWx0YVdp ZHRocywgJnZXaWR0aENvdW50ZXJzLCAmd2lkdGgsCisJCQkJCQkJCSAgJmNudEV4Y2VwdGlv bnMpOworCQljbXBfb2socmVzLCAiPT0iLCAwKTsKKwkJY21wX29rKHdpZHRoLCAiPT0iLCA3 LCAiV2lkdGhzPXsxLDIsN30sIENvdW50ZXJzPXs0LDYsNH0gPT4gd2lkdGg9NyIpOworCQlj bXBfb2soY250RXhjZXB0aW9ucywgIj09IiwgMCwKKwkJCSAgICJXaWR0aHM9ezEsMiw3fSwg Q291bnRlcnM9ezQsNiw0fSA9PiBleGNwdGlvbnNfbnVtPTAiKTsKKwl9CisKKwl0ZXN0X2Nh bGNfZXhjZXB0aW9ucygxNCwgMywgKHVpbnQxNl90W10pIHsgMSwgMiwgNyB9LCAvKiB3aWR0 aHMgb2YgZGVsdGFzKi8KKwkJCQkJCSAzLCAodWludDE2X3RbXSkgeyA0LCA2LCA0IH0sCSAg Lyogc3RhdGlzdGljcyAqLworCQkJCQkJIDcsCSAvKiB3aWR0aCBvZiBzaG9ydCBkZWx0YXMg Ki8KKwkJCQkJCSAwKTsgLyogbnVtYmVyIG9mIGV4Y2VwdGlvbnMqLworCisJdGVzdF9jYWxj X2V4Y2VwdGlvbnMoMTQsIDMsICh1aW50MTZfdFtdKSB7IDEsIDIsIDcgfSwgLyogd2lkdGhz ICovCisJCQkJCQkgMywgKHVpbnQxNl90W10pIHsgNiwgNywgMSB9LAkgIC8qIHN0YXQgKi8K KwkJCQkJCSAyLCAxKTsgLyogc2hvcnQgZGVsdGFzIHdpZHRoLCBleGNlcHRpb25zIGNvdW50 Ki8KKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCAzLCAodWludDE2X3RbXSkgeyA1LCA2 LCAxMiB9LCAvKiB3aWR0aHMgKi8KKwkJCQkJCSAzLCAodWludDE2X3RbXSkgeyAzNiwgMiwg MiB9LAkgICAvKiBzdGF0ICovCisJCQkJCQkgNSwgNCk7IC8qIHNob3J0IGRlbHRhcyB3aWR0 aCwgZXhjZXB0aW9ucyBjb3VudCovCisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0MCwgNCwg KHVpbnQxNl90W10pIHsgNSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2X3RbXSkg eyAzNiwgMSwgMSwgMiB9LCA1LCA0KTsKKworCXRlc3RfY2FsY19leGNlcHRpb25zKDQwLCA0 LCAodWludDE2X3RbXSkgeyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50MTZfdFtd KSB7IDM1LCAxLCAyLCAyIH0sIDYsIDQpOworCisJdGVzdF9jYWxjX2V4Y2VwdGlvbnMoNDAs IDQsICh1aW50MTZfdFtdKSB7IDUsIDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVpbnQxNl90 W10pIHsgMzQsIDEsIDIsIDMgfSwgNywgMyk7CisKKwl0ZXN0X2NhbGNfZXhjZXB0aW9ucyg0 MCwgNCwgKHVpbnQxNl90W10pIHsgNSwgNiwgNywgMTIgfSwgNCwKKwkJCQkJCSAodWludDE2 X3RbXSkgeyAxLCAzNCwgMiwgMyB9LCA3LCAzKTsKKworCXRlc3RfY2FsY19leGNlcHRpb25z KDQwLCA0LCAodWludDE2X3RbXSkgeyA1LCA2LCA3LCAxMiB9LCA0LAorCQkJCQkJICh1aW50 MTZfdFtdKSB7IDEsIDMzLCAyLCA0IH0sIDcsIDQpOworCisJdGVzdF9jYWxjX2V4Y2VwdGlv bnMoNDAsIDQsICh1aW50MTZfdFtdKSB7IDUsIDYsIDcsIDEyIH0sIDQsCisJCQkJCQkgKHVp bnQxNl90W10pIHsgMSwgMzIsIDIsIDUgfSwgMTIsIDApOworCisJcHJpbnRmKCJUZXN0IEVY Q0VQVElPTlMgQ0FMQ1VMQVRJT04gUEFTU0VEXG4iKTsKKwlwcmludGYoIj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIik7CisKKwlwcmludGYoIj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByaW50ZigiVGVz dCBERUxUQSBGUkFNRSBPRiBSRUZFUkVOQ0VTIFBBQ0tJTkdcbiIpOworCisJdGVzdF9kZm9y KDE2LAorCQkJICAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5 LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJCQkJCQkJIDE1IH0sIC8qIGNudCwgYXJyYXkgKi8K KwkJCSAgREZPUl9FWENfRE9OVF9VU0UsICAgLyogZmxhZyBvbiB1c2Ugb2YgZXhjZXB0aW9u cyAqLworCQkJICAxLAkJCQkgICAvKiBhd2FpdGVkIHdpZHRoIG9mIHNob3J0IGRlbHRhcyAq LworCQkJICAwLAkJCQkgICAvKiBhd2FpdGVkIGNvdW50IG9mIGV4Y2VwdGlvbnMgKi8KKwkJ CSAgMCwJCQkJICAgLyogYXdhaXRlZCBleGNlcHRpb24gd2lkdGgqLworCQkJICAwLAkJCQkg ICAvKiBhd2FpdGVkIGV4Y2VwdGlvbiBwb3NpdGlvbiB3aWR0aCovCisJCQkgIDE2LAkJCQkg ICAvKiBhd2FpdGVkIGJpdHMgY291bnQgKi8KKwkJCSAgMiwJCQkJICAgLyogY250Qnl0ZUNv dW50QXdhaXRlZCAqLworCQkJICAxNS45OSwgLyogYXdhaXRlZCByYXRpbyBtaW4gdmFsdWUg KHJhdGlvID49IDE1Ljk5KSAqLworCQkJICAodWludDhfdFtdKSB7IDB4RkUsIDB4RkYgfSk7 CisKKwl0ZXN0X2Rmb3IoMTYsCisJCQkgICh1aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMsIDQs IDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwKKwkJCQkJCQkgMTUgfSwgLyog Y250LCBhcnJheSAqLworCQkJICBERk9SX0VYQ19VU0UsIC8qIGZsYWcgb24gdXNlIG9mIGV4 Y2VwdGlvbnMgKi8KKwkJCSAgMSwJCQkvKiBhd2FpdGVkIHdpZHRoIG9mIHNob3J0IGRlbHRh cyAqLworCQkJICAwLAkJCS8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0aW9ucyAqLworCQkJ ICAwLAkJCS8qIGF3YWl0ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJCSAgMCwJCQkvKiBhd2Fp dGVkIGV4Y2VwdGlvbiBwb3NpdGlvbiB3aWR0aCovCisJCQkgIDE2LAkJCS8qIGF3YWl0ZWQg Yml0cyBjb3VudCAqLworCQkJICAyLAkJCS8qIGNudEJ5dGVDb3VudEF3YWl0ZWQgKi8KKwkJ CSAgMTUuOTksCQkvKiBhd2FpdGVkIHJhdGlvIG1pbiB2YWx1ZSAocmF0aW8gPj0gMTUuOTkp ICovCisJCQkgICh1aW50OF90W10pIHsgMHhGRSwgMHhGRiB9KTsKKworCXRlc3RfZGZvcigx NiwKKwkJCSAgKHVpbnQxNl90W10pIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwg MTAsIDExLCAxMiwgMTMsIDE0LAorCQkJCQkJCSAxMDIzIH0sIC8qIGNudCwgYXJyYXkgKi8K KwkJCSAgREZPUl9FWENfRE9OVF9VU0UsCSAvKiBmbGFnIG9uIHVzZSBvZiBleGNlcHRpb25z ICovCisJCQkgIDEwLAkJCQkJIC8qIGF3YWl0ZWQgd2lkdGggb2Ygc2hvcnQgZGVsdGFzICov CisJCQkgIDAsCQkJCQkgLyogYXdhaXRlZCBjb3VudCBvZiBleGNlcHRpb25zICovCisJCQkg IDAsCQkJCQkgLyogYXdhaXRlZCBleGNlcHRpb24gd2lkdGgqLworCQkJICAwLAkJCQkJIC8q IGF3YWl0ZWQgZXhjZXB0aW9uIHBvc2l0aW9uIHdpZHRoKi8KKwkJCSAgMTAgKiAxNiwJCQkJ IC8qIGF3YWl0ZWQgYml0cyBjb3VudCAqLworCQkJICAyMCwJCQkJCSAvKiBhd2FpdGVkIGJ5 dGVzIGNvdW50ICovCisJCQkgIDEuNSwJCQkJCSAvKiBhd2FpdGVkIHJhdGlvIG1pbiB2YWx1 ZSAqLworCQkJICAodWludDhfdFtdKSB7IDB4MDAsIDB4MDQsIDB4MTAsIDB4NDAsIDB4MDAs IDB4MDEsIDB4MDQsCisJCQkJCQkJMHgxMCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgx MCwgMHg0MCwKKwkJCQkJCQkweDAwLCAweDAxLCAweDA0LCAweDEwLCAweDQwLCAweEZDIH0p OworCisJdGVzdF9kZm9yKDE2LAorCQkJICAodWludDE2X3RbXSkgeyAwLCAxLCAyLCAzLCA0 LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisJCQkJCQkJIDEwMjMgfSwg LyogY250LCBhcnJheSAqLworCQkJICBERk9SX0VYQ19VU0UsCQkJIC8qIGZsYWcgb24gdXNl IG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMSwJCQkJCSAvKiBhd2FpdGVkIHdpZHRoIG9mIHNo b3J0IGRlbHRhcyAqLworCQkJICAxLAkJCQkJIC8qIGF3YWl0ZWQgY291bnQgb2YgZXhjZXB0 aW9ucyAqLworCQkJICA5LAkJCQkJIC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHdpZHRoKi8KKwkJ CSAgNCwJCQkJCSAvKiBhd2FpdGVkIGV4Y2VwdGlvbiBwb3NpdGlvbiB3aWR0aCovCisJCQkg IDE2ICogMSArIDkgKyA0LAkJIC8qIGF3YWl0ZWQgYml0cyBjb3VudCAqLworCQkJICA0LAkJ CQkJIC8qIGF3YWl0ZWQgYnl0ZXMgY291bnQgKi8KKwkJCSAgNy45OSwJCQkJCSAvKiBhd2Fp dGVkIHJhdGlvIG1pbiB2YWx1ZSAqLworCQkJICAodWludDhfdFtdKSB7IDB4RkUsIDB4RkYs IDB4RjgsIDB4MUYgfSk7CisKKwl0ZXN0X2Rmb3IoMzAsIC8qIGNudCAqLworCQkJCQkgICh1 aW50MTZfdFtdKSB7IDAsIDEsIDIsIDMsIDQsCisJCQkJCQkJCQkgNSwgNiwgNywgOCwgOSwK KyAgLyogZGVsdGE9MiwgcG9zPTEwLCBkZWx0YXBvcz0xMCAqLyAxMSwgMTIsIDEzLCAxNCwg MTUsCisJCQkJCQkJCQkgMTYsIDE3LCAxOCwgMTksIDIwLAorCQkJCQkJCQkJIDIxLCAyMiwg MjMsIDI0LCAyNSwKKyAgLyogZGVsdGE9MywgcG9zPTI1LCBkZWx0YXBvcz0xNSAqLyAyOCwg MjksIDMwLCAzMSwKKyAgLyogZGVsdGE9MywgcG9zPTI5LCBkZWx0YXBvcz00ICovCSAzNCB9 LCAgCQkJCS8qIGFycmF5ICovCisJCQkgIERGT1JfRVhDX1VTRSwJCQkgIC8qIGZsYWcgb24g dXNlIG9mIGV4Y2VwdGlvbnMgKi8KKwkJCSAgMSwJCQkJCSAgLyogYXdhaXRlZCB3aWR0aCBv ZiBzaG9ydCBkZWx0YXMgKi8KKwkJCSAgMywJCQkJCSAgLyogYXdhaXRlZCBjb3VudCBvZiBl eGNlcHRpb25zICovCisJCQkgIDEsCQkJCQkgIC8qIGF3YWl0ZWQgZXhjZXB0aW9uIHdpZHRo Ki8KKwkJCSAgNCwJCQkJCSAgLyogYXdhaXRlZCBleGNlcHRpb24gcG9zaXRpb24gd2lkdGgq LworCQkJICAzMCAqIDEgKyAzICogMSArIDMgKiA0LCAvKiBhd2FpdGVkIGJpdHMgY291bnQg Ki8KKwkJCSAgNiwJCQkJCSAgLyogYXdhaXRlZCBieXRlcyBjb3VudCAqLworCQkJICA5Ljk5 LAkJCQkJICAvKiBhd2FpdGVkIHJhdGlvIG1pbiB2YWx1ZSAqLworCQkJICAodWludDhfdFtd KSB7IDB4RkUsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RjUsIDB4MDkgfSk7CisKKwlwcmludGYo IlRlc3QgREVMVEEgRlJBTUUgT0YgUkVGRVJFTkNFUyBQQUNLSU5HIFBBU1NFRFxuIik7CisJ cHJpbnRmKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIp OworCisJZG9uZV90ZXN0aW5nKCk7Cit9Ci0tIAoyLjUzLjAKCg== --------------q3GH2mb63ygMChYtU0Dca0vu Content-Type: text/x-patch; charset=UTF-8; name="v08-0003-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.patch" Content-Disposition: attachment; filename*0="v08-0003-Use-Delta-Frame-of-Reference-DFoR-to-compress-pr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2ZDE2YjY0ZTJmYWQ4MDE4OTk5YzYwNDczMWVkM2NjMjM5YWI4OWUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBFdmdlbnkgVm9yb3BhZXYgPGV2b3JvcEBnbWFpbC5j b20+CkRhdGU6IEZyaSwgMjAgTWFyIDIwMjYgMTc6MzA6MjIgKzA4MDAKU3ViamVjdDogW1BB VENIIHYwOCAzLzNdIFVzZSBEZWx0YSBGcmFtZSBvZiBSZWZlcmVuY2UgKERGb1IpIHRvIGNv bXByZXNzCiBwcnVuZS9mcmVlemUgcmVjb3Jkcy4KCkEgcHJ1bmUvZnJlZXplIHJlY29yZCBj b250YWlucyBmb3VyIHNlcXVlbmNlcyBvZiBpbnRlZ2VycyByZXByZXNlbnRpbmcKZnJvemVu LCByZWRpcmVjdGVkLCB1bnVzZWQsIGFuZCBkZWFkIHR1cGxlcy4gVXNpbmcgREZvUiBhbGdv cml0aG1zLCB0aGUKYHVudXNlZGAgYW5kIGBkZWFkYCBzZXF1ZW5jZXMgYXJlIG5vdyBjb21w cmVzc2VkLiBUaGUgYGZyb3plbmAKYW5kIGByZWRpcmVjdGVkYCBzZXF1ZW5jZXMgY2Fubm90 IGJlIGNvbXByZXNzZWQgYmVjYXVzZSB0aGUgb3JkZXIgb2YKdGhlaXIgZWxlbWVudHMgaXMg c2lnbmlmaWNhbnQsIGFuZCBERm9SIGRvZXMgbm90IHN1cHBvcnQgdW5zb3J0ZWQKc2VxdWVu Y2VzIHlldC4gVGhlIHRoZW9yZXRpY2FsIGNvbXByZXNzaW9uIHJhdGlvIGZvciBkZm9yX3Ux NiBjYW4gcmVhY2gKdXAgdG8gMTYuCgpUaGUgbmV3IEdVQyB3YWxfcHJ1bmVfZGZvcl9jb21w cmVzc2lvbiBjb250cm9scyAoZW5hYmxlcyBvcgpkaXNhYmxlcykgY29tcHJlc3Npb24gZm9y IHBydW5lL2ZyZWV6ZSByZWNvcmRzLgoKQW4gaW50ZWdyYWwgVEFQIHRlc3QsIDA1Ml9wcnVu ZV9kZm9yX2NvbXByZXNzaW9uLnBsLCBoYXMgYmVlbgppbXBsZW1lbnRlZC4gSXQgZGVtb25z dHJhdGVzIGFuIGF2ZXJhZ2UgY29tcHJlc3Npb24gcmF0aW8gb2YgYXQgbGVhc3QgNQp3aGVu IGFuYWx5emluZyBwcnVuZS9mcmVlemUgcmVjb3JkcyBpbiBwcmFjdGljZS4KCkF1dGhvcjog RXZnZW55IFZvcm9wYWV2IDxldmdlbnkudm9yb3BhZXZAdGFudG9ybGFicy5jb20+IDxldm9y b3BAZ21haWwuY29tPgpSZXZpZXdlZCBieTogQW5kcmV5IEJvcm9kaW4gPHg0bW1tQHlhbmRl eC10ZWFtLnJ1PgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV94bG9nLmMg ICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMg ICAgICAgICAgIHwgMTQxICsrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGFt X3hsb2dfZGZvci5jICAgICAgICB8IDEwOSArKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvaGVhcGRlc2MuYyAgICAgICAgfCAgNDkgKystCiBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2Jpbi9wZ193 YWxkdW1wLy5naXRpZ25vcmUgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9iaW4vcGdf d2FsZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAyNiArLQogc3JjL2Jpbi9w Z193YWxkdW1wL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaCAgICAgICAgIHwgMTM3ICsrKysrKysr Kwogc3JjL3Rlc3QvZGZvci9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy ICsKIC4uLi9yZWNvdmVyeS90LzA1Ml9wcnVuZV9kZm9yX2NvbXByZXNzaW9uLnBsICB8IDI4 MyArKysrKysrKysrKysrKysrKysKIDE2IGZpbGVzIGNoYW5nZWQsIDc1NSBpbnNlcnRpb25z KCspLCAzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvaGVhcGFtX3hsb2dfZGZvci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L3JlY292ZXJ5L3QvMDUyX3BydW5lX2Rmb3JfY29tcHJlc3Npb24ucGwK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1feGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hsb2cuYwppbmRleCBmM2Y0MTlkM2Rj MS4uMmVjYmQyNzdjMDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3hsb2cu YwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2J1Zm1hc2suaCIKICNp bmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94bG9n X2Rmb3IuaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgpAQCAtMTA1 LDExICsxMDYsMjAgQEAgaGVhcF94bG9nX3BydW5lX2ZyZWV6ZShYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAkJY2hhcgkgICAqZGF0YXB0ciA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVj b3JkLCAwLCAmZGF0YWxlbik7CiAJCWJvb2wJCWRvX3BydW5lOwogCisJCS8qCisJCSAqIERG b1IgdW5wYWNraW5nIG5lZWRzIG91dGVyIGJ1ZmZlcnMgZm9yIHNhdmluZyByZXN1bHRzIGFu ZCBmb3IKKwkJICogYWxsb2NhdGluZyBjb250YWluZXJzIHVzZWQgZHVyaW5nIGRlY29tcHJl c3Npb24uIDIgYnVmZmVyIHBhcnRzIGFyZQorCQkgKiBpbnRlbmRlZCBmb3Igc2F2aW5nIHNl cXVlbmNlcyBvZiBvZmZzZXRzIG9mIGRlYWQgYW5kIHVudXNlZCB0dXBsZXMuCisJCSAqIEFk ZGl0aW9uYWwgdGhyZWUgY2h1bmtzIGFyZSBuZWVkZWQgZm9yIGludGVybmFsIG5lZWRzIG9m IHRoZQorCQkgKiBkZm9yX3VucGFjayBmdW5jdGlvbi4KKwkJICovCisJCXVpbnQ4IGRmb3Jf YnVmWzUgKiBERk9SX0JVRl9QQVJUX1NJWkVdOworCiAJCWhlYXBfeGxvZ19kZXNlcmlhbGl6 ZV9wcnVuZV9hbmRfZnJlZXplKGRhdGFwdHIsIHhscmVjLmZsYWdzLAogCQkJCQkJCQkJCQkg ICAmbnBsYW5zLCAmcGxhbnMsICZmcnpfb2Zmc2V0cywKIAkJCQkJCQkJCQkJICAgJm5yZWRp cmVjdGVkLCAmcmVkaXJlY3RlZCwKIAkJCQkJCQkJCQkJICAgJm5kZWFkLCAmbm93ZGVhZCwK LQkJCQkJCQkJCQkJICAgJm51bnVzZWQsICZub3d1bnVzZWQpOworCQkJCQkJCQkJCQkgICAm bnVudXNlZCwgJm5vd3VudXNlZCwgZGZvcl9idWYpOwogCiAJCWRvX3BydW5lID0gbnJlZGly ZWN0ZWQgPiAwIHx8IG5kZWFkID4gMCB8fCBudW51c2VkID4gMDsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9wcnVuZWhlYXAuYwppbmRleCA3NGMzNTViZTIxOS4uYTdkZTllYTdiMDUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3BydW5laGVhcC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3BydW5laGVhcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94 bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbV94bG9nX2Rmb3IuaCIKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCkBAIC0yMzgsNyArMjM5LDYgQEAgc3Rh dGljIGJvb2wgaGVhcF9wYWdlX3dpbGxfZnJlZXplKGJvb2wgZGlkX3R1cGxlX2hpbnRfZnBp LCBib29sIGRvX3BydW5lLCBib29sIGQKIHN0YXRpYyBib29sIGhlYXBfcGFnZV93aWxsX3Nl dF92bShQcnVuZVN0YXRlICpwcnN0YXRlLCBQcnVuZVJlYXNvbiByZWFzb24sCiAJCQkJCQkJ CSAgYm9vbCBkb19wcnVuZSwgYm9vbCBkb19mcmVlemUpOwogCi0KIC8qCiAgKiBPcHRpb25h bGx5IHBydW5lIGFuZCByZXBhaXIgZnJhZ21lbnRhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHBh Z2UuCiAgKgpAQCAtMjUyOSw2ICsyNTI5LDI0IEBAIGhlYXBfbG9nX2ZyZWV6ZV9wbGFuKEhl YXBUdXBsZUZyZWV6ZSAqdHVwbGVzLCBpbnQgbnR1cGxlcywKIAlyZXR1cm4gbnBsYW5zOwog fQogCisvKgorICogQ29tcGFyYXRvciBmb3Igb2Zmc2V0cy4KKyAqLworc3RhdGljIGludAor b2Zmc2V0X2NtcChjb25zdCB2b2lkICphcmcxLCBjb25zdCB2b2lkICphcmcyKQoreworCWNv bnN0IE9mZnNldE51bWJlciAqb2Zmc2V0MSA9IGFyZzE7CisJY29uc3QgT2Zmc2V0TnVtYmVy ICpvZmZzZXQyID0gYXJnMjsKKwlyZXR1cm4gKCpvZmZzZXQxID4gKm9mZnNldDIpIC0gKCpv ZmZzZXQxIDwgKm9mZnNldDIpOworfQorCisjZGVmaW5lIFNUX1NPUlQgc29ydF9vZmZzZXRz CisjZGVmaW5lIFNUX0VMRU1FTlRfVFlQRV9WT0lECisjZGVmaW5lIFNUX0NPTVBBUkUoYSwg Yikgb2Zmc2V0X2NtcChhLCBiKQorI2RlZmluZSBTVF9TQ09QRSBzdGF0aWMKKyNkZWZpbmUg U1RfREVGSU5FCisjaW5jbHVkZSAibGliL3NvcnRfdGVtcGxhdGUuaCIKKwogLyoKICAqIFdy aXRlIGFuIFhMT0dfSEVBUDJfUFJVTkUqIFdBTCByZWNvcmQKICAqCkBAIC0yNTg2LDExICsy NjA0LDM0IEBAIGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemUoUmVsYXRpb24gcmVsYXRpb24s IEJ1ZmZlciBidWZmZXIsCiAJYm9vbAkJZG9fc2V0X3ZtID0gdm1mbGFncyAmIFZJU0lCSUxJ VFlNQVBfVkFMSURfQklUUzsKIAlib29sCQloZWFwX2ZwaV9hbGxvd2VkID0gdHJ1ZTsKIAor CWRmb3JfbWV0YV90IGRlYWRfbWV0YSA9IHsgMCB9OworCWRmb3JfbWV0YV90IHVudXNlZF9t ZXRhID0geyAwIH07CisKKwl1aW50OCBkZWFkX21ldGFfcGFja1tNQVhfUEFDS0VEX01FVEFf U0laRV07CisJdWludDggdW51c2VkX21ldGFfcGFja1tNQVhfUEFDS0VEX01FVEFfU0laRV07 CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY29kZSBpcyBydW4gaW4gYSBjcml0aWNhbCBzZWN0 aW9uIHdlIGNhbid0IHVzZSBkeW5hbWljCisJICogYWxsb2NhdGlvbiBkdXJpbmcgREZvUiBw YWNraW5nLCBidXQgd2UgY2FuIHVzZSBidWZmZXJzIGFsbG9jYXRlZCBpbiB0aGUKKwkgKiBz dGFjay4gV2UgbmVlZCBhdCBtYXhpbXVtOgorCSAqIDEpIDIgKiBERk9SX0JVRl9QQVJUX1NJ WkUKKwkgKiAgICAgICAgLSBmb3IgMiBwYWNrZWQgc2VxdWVuY2VzOiBkZWFkLCB1bnVzZWQK KwkgKiAyKSAzICogREZPUl9CVUZfUEFSVF9TSVpFCisJICogCQkgIC0gZm9yIGludGVybmFs IG5lZWRzIG9mIHRoZSBkZm9yX3BhY2sgZnVuY3Rpb24uCisJICoKKwkgKiBPdmVyYWxsLCA1 ICogREZPUl9CVUZfUEFSVF9TSVpFCisJICovCisJdWludDggZGZvcl9idWZbNSAqIERGT1Jf QlVGX1BBUlRfU0laRV07CisKIAlBc3NlcnQoKHZtZmxhZ3MgJiBWSVNJQklMSVRZTUFQX1ZB TElEX0JJVFMpID09IHZtZmxhZ3MpOwogCiAJeGxyZWMuZmxhZ3MgPSAwOwogCXJlZ2J1Zl9m bGFnc19oZWFwID0gUkVHQlVGX1NUQU5EQVJEOwogCisJLyogSGV1cmlzdGljYWxseSBlc3Rp bWF0ZWQgdGhyZXNob2xkIGZvciB0dXJuaW5nIG9uIERGb1IgY29tcHJlc3Npb24gKi8KKwlp ZiAod2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb24gJiYgKG5kZWFkID4gOSB8fCBudW51c2Vk ID4gOSkpCisJCXhscmVjLmZsYWdzIHw9IFhMSFBfREZPUl9DT01QUkVTU0VEOworCiAJLyoK IAkgKiBXZSBjYW4gYXZvaWQgYW4gRlBJIG9mIHRoZSBoZWFwIHBhZ2UgaWYgdGhlIG9ubHkg bW9kaWZpY2F0aW9uIHdlIGFyZQogCSAqIG1ha2luZyB0byBpdCBpcyB0byBzZXQgUERfQUxM X1ZJU0lCTEUgYW5kIGNoZWNrc3Vtcy93YWxfbG9nX2hpbnRzIGFyZQpAQCAtMjYyMiw2ICsy NjYzLDEwIEBAIGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemUoUmVsYXRpb24gcmVsYXRpb24s IEJ1ZmZlciBidWZmZXIsCiAJaWYgKGRvX3NldF92bSkKIAkJWExvZ1JlZ2lzdGVyQnVmZmVy KDEsIHZtYnVmZmVyLCAwKTsKIAorCS8qCisJICogeGxocF9mcmVlemVfcGxhbnMgaXMgYXJy YXkgb2Ygc3RydWN0dXJlcyBhbmQgaXMgbm90IGEgc2VxdWVuY2UKKwkgKiBvZiBpbnRlZ2Vy cywgdGhhdCBpcyB3aHkgd2UgY2Fubm90IHVzZSBERm9SIGNvbXByZXNzaW9uIGhlcmUuCisJ ICovCiAJaWYgKG5mcm96ZW4gPiAwKQogCXsKIAkJaW50CQkJbnBsYW5zOwpAQCAtMjY1MCwy NiArMjY5NSw5MiBAQCBsb2dfaGVhcF9wcnVuZV9hbmRfZnJlZXplKFJlbGF0aW9uIHJlbGF0 aW9uLCBCdWZmZXIgYnVmZmVyLAogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIHJlZGlyZWN0 ZWQsCiAJCQkJCQkJc2l6ZW9mKE9mZnNldE51bWJlclsyXSkgKiBucmVkaXJlY3RlZCk7CiAJ fQotCWlmIChuZGVhZCA+IDApCisJaWYgKCh4bHJlYy5mbGFncyAmIFhMSFBfREZPUl9DT01Q UkVTU0VEKSAhPSAwKQogCXsKLQkJeGxyZWMuZmxhZ3MgfD0gWExIUF9IQVNfREVBRF9JVEVN UzsKKwkJaW50IGRlYWRfcGFja19yZXMgPSAwOworCQlpbnQgdW51c2VkX3BhY2tfcmVzID0g MDsKIAotCQlkZWFkX2l0ZW1zLm50YXJnZXRzID0gbmRlYWQ7Ci0JCVhMb2dSZWdpc3RlckJ1 ZkRhdGEoMCwgJmRlYWRfaXRlbXMsCi0JCQkJCQkJb2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVt cywgZGF0YSkpOwotCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIGRlYWQsCi0JCQkJCQkJc2l6 ZW9mKE9mZnNldE51bWJlcikgKiBuZGVhZCk7CisJCS8qCisJCSAqIERlYWQgdHVwbGUgb2Zm c2V0cyBhcmUgc3ViamVjdCB0byBiZSBwYWNrZWQgd2l0aCBERm9SLgorCQkgKiBBZnRlciB0 aGF0IHdlIGhhdmU6CisJCSAqIAkJZGVhZF9tZXRhLnBhY2sgPSBkZm9yX2J1ZiArIERGT1Jf QlVGX1BBUlRfU0laRTsKKwkJICovCisJCWlmIChuZGVhZCA+IDApCisJCXsKKwkJCXNvcnRf b2Zmc2V0cyhkZWFkLCBuZGVhZCwgc2l6ZW9mKE9mZnNldE51bWJlcikpOworCQkJZGVhZF9w YWNrX3JlcyA9IGRmb3JfdTE2X3BhY2sobmRlYWQsIGRlYWQsIERGT1JfRVhDX1VTRSwgJmRl YWRfbWV0YSwKKwkJCQkJCQkJCQkgIDQgKiBERk9SX0JVRl9QQVJUX1NJWkUsIGRmb3JfYnVm KTsKKwkJfQorCisJCS8qCisJCSAqIFVudXNlZCB0dXBsZSBvZmZzZXRzIGFyZSBzdWJqZWN0 IHRvIGJlIHBhY2tlZCB3aXRoIERGb1IuCisJCSAqIEFmdGVyIHRoYXQgd2UgaGF2ZToKKwkJ ICogCQl1bnVzZWRfbWV0YS5wYWNrID0gZGZvcl9idWYgKyAyICogREZPUl9CVUZfUEFSVF9T SVpFOworCQkgKi8KKwkJaWYgKG51bnVzZWQgPiAwKQorCQl7CisJCQlzb3J0X29mZnNldHMo dW51c2VkLCBudW51c2VkLCBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CisJCQl1bnVzZWRfcGFj a19yZXMgPSBkZm9yX3UxNl9wYWNrKG51bnVzZWQsIHVudXNlZCwgREZPUl9FWENfVVNFLAor CQkJCQkJCQkJCQkmdW51c2VkX21ldGEsCisJCQkJCQkJCQkJCTQgKiBERk9SX0JVRl9QQVJU X1NJWkUsCisJCQkJCQkJCQkJCWRmb3JfYnVmICsgREZPUl9CVUZfUEFSVF9TSVpFKTsKKwkJ fQorCisJCWlmIChkZWFkX3BhY2tfcmVzID09IDAgJiYgdW51c2VkX3BhY2tfcmVzID09IDAp CisJCXsKKwkJCS8qIEFsbCBzdGFnZXMgb2YgcGFja2luZyBoYXZlIHN1Y2NlZWRlZC4gV2Ug Y2FuIHNhdmUgREZvUiBwYWNrZXRzCisJCQkgKiBpbnRvIGxvZyAqLworCQkJc2l6ZV90IG1l dGFfcGFja19zejsKKwkJCWlmIChuZGVhZCA+IDApCisJCQl7CisJCQkJeGxyZWMuZmxhZ3Mg fD0gWExIUF9IQVNfREVBRF9JVEVNUzsKKworCQkJCW1ldGFfcGFja19zeiA9IGxvZ19oZWFw X3BydW5lX2FuZF9mcmVlemVfcGFja19tZXRhKAorCQkJCQkmZGVhZF9tZXRhLCBkZWFkX21l dGFfcGFjayk7CisKKwkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZkZWFkX21ldGFfcGFj aywgbWV0YV9wYWNrX3N6KTsKKwkJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsIGRlYWRfbWV0 YS5wYWNrLCBkZWFkX21ldGEubmJ5dGVzKTsKKwkJCX0KKwkJCWlmIChudW51c2VkID4gMCkK KwkJCXsKKwkJCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19OT1dfVU5VU0VEX0lURU1TOwor CisJCQkJbWV0YV9wYWNrX3N6ID0gbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV9wYWNrX21l dGEoCisJCQkJCSZ1bnVzZWRfbWV0YSwgdW51c2VkX21ldGFfcGFjayk7CisKKwkJCQlYTG9n UmVnaXN0ZXJCdWZEYXRhKDAsICZ1bnVzZWRfbWV0YV9wYWNrLCBtZXRhX3BhY2tfc3opOwor CQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgdW51c2VkX21ldGEucGFjaywgdW51c2VkX21l dGEubmJ5dGVzKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE90aGVyd2lzZSwg d2UgY2FuJ3QgdXNlIERGb1IgY29tcHJlc3Npb24gKi8KKwkJCXhscmVjLmZsYWdzICY9IH5Y TEhQX0RGT1JfQ09NUFJFU1NFRDsKKwkJfQogCX0KLQlpZiAobnVudXNlZCA+IDApCisKKwlp ZiAoKHhscmVjLmZsYWdzICYgWExIUF9ERk9SX0NPTVBSRVNTRUQpID09IDApCiAJewotCQl4 bHJlYy5mbGFncyB8PSBYTEhQX0hBU19OT1dfVU5VU0VEX0lURU1TOworCQlpZiAobmRlYWQg PiAwKQorCQl7CisJCQl4bHJlYy5mbGFncyB8PSBYTEhQX0hBU19ERUFEX0lURU1TOwogCi0J CXVudXNlZF9pdGVtcy5udGFyZ2V0cyA9IG51bnVzZWQ7Ci0JCVhMb2dSZWdpc3RlckJ1ZkRh dGEoMCwgJnVudXNlZF9pdGVtcywKLQkJCQkJCQlvZmZzZXRvZih4bGhwX3BydW5lX2l0ZW1z LCBkYXRhKSk7Ci0JCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgdW51c2VkLAotCQkJCQkJCXNp emVvZihPZmZzZXROdW1iZXIpICogbnVudXNlZCk7CisJCQlkZWFkX2l0ZW1zLm50YXJnZXRz ID0gbmRlYWQ7CisJCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZkZWFkX2l0ZW1zLAorCQkJ CQkJCQlvZmZzZXRvZih4bGhwX3BydW5lX2l0ZW1zLCBkYXRhKSk7CisJCQlYTG9nUmVnaXN0 ZXJCdWZEYXRhKDAsIGRlYWQsIHNpemVvZihPZmZzZXROdW1iZXIpICogbmRlYWQpOworCQl9 CisJCWlmIChudW51c2VkID4gMCkKKwkJeworCQkJeGxyZWMuZmxhZ3MgfD0gWExIUF9IQVNf Tk9XX1VOVVNFRF9JVEVNUzsKKworCQkJdW51c2VkX2l0ZW1zLm50YXJnZXRzID0gbnVudXNl ZDsKKwkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgJnVudXNlZF9pdGVtcywKKwkJCQkJCQkJ b2Zmc2V0b2YoeGxocF9wcnVuZV9pdGVtcywgZGF0YSkpOworCQkJWExvZ1JlZ2lzdGVyQnVm RGF0YSgwLCB1bnVzZWQsIHNpemVvZihPZmZzZXROdW1iZXIpICogbnVudXNlZCk7CisJCX0K IAl9CisKIAlpZiAobmZyb3plbiA+IDApCiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgZnJ6 X29mZnNldHMsCiAJCQkJCQkJc2l6ZW9mKE9mZnNldE51bWJlcikgKiBuZnJvemVuKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBjZDk1ZWVjMzdmMS4uNDll OWM0NjE0NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE3 LDYgKzE3LDcgQEAgT0JKUyA9IFwKIAlnaW5kZXNjLm8gXAogCWdpc3RkZXNjLm8gXAogCWhh c2hkZXNjLm8gXAorCWhlYXBhbV94bG9nX2Rmb3IubyBcCiAJaGVhcGRlc2MubyBcCiAJbG9n aWNhbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBhbV94bG9nX2Rmb3IuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9oZWFwYW1feGxvZ19kZm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQ3ZmEwMDBlMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBhbV94bG9nX2Rmb3IuYwpAQCAtMCwwICsx LDEwOSBAQAorI2luY2x1ZGUgImxpYi9iaXRwYWNrX3UxNi5oIgorI2luY2x1ZGUgImFjY2Vz cy9oZWFwYW1feGxvZ19kZm9yLmgiCisKK2Jvb2wgd2FsX3BydW5lX2Rmb3JfY29tcHJlc3Np b24gPSB0cnVlOworCitzaXplX3QKK2xvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfcGFja19t ZXRhKGNvbnN0IGRmb3JfbWV0YV90ICptZXRhLCB1aW50OCBidWZbXSkKK3sKKwlzaXplX3Qg Y2FyZXQgPSAwOworCWNhcmV0ID0gYml0cGFja191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRh LT5pdGVtX2NudCwKKwkJCQkJCQkgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaKTsKKwljYXJl dCA9IGJpdHBhY2tfdTE2X3BhY2soYnVmLCBjYXJldCwgbWV0YS0+ZGVsdGFfd2lkLAorCQkJ CQkJCSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaKTsKKwljYXJldCA9IGJpdHBhY2tfdTE2 X3BhY2soYnVmLCBjYXJldCwgKG1ldGEtPmV4Y19jbnQgPT0gMCkgPyAwIDogMSwKKwkJCQkJ CQkgWExIUEZfTUVUQV9FWENFUFRJT05fRkxBR19TWik7CisJaWYgKG1ldGEtPmV4Y19jbnQg IT0gMCkKKwl7CisJCWNhcmV0ID0gYml0cGFja191MTZfcGFjayhidWYsIGNhcmV0LCBtZXRh LT5leGNfY250LAorCQkJCQkJCQkgWExIUEZfTUVUQV9FWENFUFRJT05fQ09VTlRfU1opOwor CQljYXJldCA9IGJpdHBhY2tfdTE2X3BhY2soYnVmLCBjYXJldCwgbWV0YS0+ZXhjX3dpZCwK KwkJCQkJCQkJIFhMSFBGX01FVEFfRVhDRVBUSU9OX1dJRFRIX1NaKTsKKwkJY2FyZXQgPSBi aXRwYWNrX3UxNl9wYWNrKGJ1ZiwgY2FyZXQsIG1ldGEtPmV4Y19wb3Nfd2lkLAorCQkJCQkJ CQkgWExIUEZfTUVUQV9FWENFUFRJT05fUE9TSVRJT05fV0lEVEhfU1opOworCX0KKwlBc3Nl cnQobWV0YS0+aXRlbV9jbnQgIT0gMCk7CisJQXNzZXJ0KG1ldGEtPmRlbHRhX3dpZCAhPSAw KTsKKwlBc3NlcnQobWV0YS0+bmJ5dGVzICE9IDApOworCisjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORworCXsKKwkJZGZvcl9tZXRhX3QgY2hlY2tlcjsKKwkJbG9nX2hlYXBfcHJ1bmVf YW5kX2ZyZWV6ZV91bnBhY2tfbWV0YSgmY2hlY2tlciwgYnVmKTsKKwkJQXNzZXJ0KG1ldGEt Pml0ZW1fY250ID09IGNoZWNrZXIuaXRlbV9jbnQpOworCQlBc3NlcnQobWV0YS0+ZGVsdGFf d2lkID09IGNoZWNrZXIuZGVsdGFfd2lkKTsKKwkJQXNzZXJ0KG1ldGEtPmV4Y19jbnQgPT0g Y2hlY2tlci5leGNfY250KTsKKwkJQXNzZXJ0KG1ldGEtPmV4Y193aWQgPT0gY2hlY2tlci5l eGNfd2lkKTsKKwkJQXNzZXJ0KG1ldGEtPmV4Y19wb3Nfd2lkID09IGNoZWNrZXIuZXhjX3Bv c193aWQpOworCX0KKyNlbmRpZgorCXJldHVybiAoY2FyZXQgKyA3KSAvIDg7IC8qIHRoZSBs ZW5ndGggb2YgcGFja2VkIGRmb3JfbWV0YSwgaW4gYnl0ZXMqLworfQorCitzaXplX3QKK2xv Z19oZWFwX3BydW5lX2FuZF9mcmVlemVfdW5wYWNrX21ldGEoZGZvcl9tZXRhX3QgKm1ldGEs CisJCQkJCQkJCQkgIGNvbnN0IHVpbnQ4IHBhY2tlZF9tZXRhW10pCit7CisJc2l6ZV90IGNh cmV0ID0gMDsKKwlib29sIGV4YzsKKworCW1ldGEtPml0ZW1fY250ID0gYml0cGFja191MTZf dW5wYWNrKHBhY2tlZF9tZXRhLCAmY2FyZXQsCisJCQkJCQkJCQkJWExIUEZfTUVUQV9JVEVN X0NPVU5UX1NaKTsKKwltZXRhLT5kZWx0YV93aWQgPSBiaXRwYWNrX3UxNl91bnBhY2socGFj a2VkX21ldGEsICZjYXJldCwKKwkJCQkJCQkJCQkgWExIUEZfTUVUQV9ERUxUQV9XSURUSF9T Wik7CisJZXhjID0gYml0cGFja191MTZfdW5wYWNrKHBhY2tlZF9tZXRhLCAmY2FyZXQsIFhM SFBGX01FVEFfRVhDRVBUSU9OX0ZMQUdfU1opOworCisJaWYgKGV4YykKKwl7CisJCW1ldGEt PmV4Y19jbnQgPSBiaXRwYWNrX3UxNl91bnBhY2socGFja2VkX21ldGEsICZjYXJldCwKKwkJ CQkJCQkJCQkgWExIUEZfTUVUQV9FWENFUFRJT05fQ09VTlRfU1opOworCQltZXRhLT5leGNf d2lkID0gYml0cGFja191MTZfdW5wYWNrKHBhY2tlZF9tZXRhLCAmY2FyZXQsCisJCQkJCQkJ CQkJIFhMSFBGX01FVEFfRVhDRVBUSU9OX1dJRFRIX1NaKTsKKwkJbWV0YS0+ZXhjX3Bvc193 aWQgPQorCQkJYml0cGFja191MTZfdW5wYWNrKHBhY2tlZF9tZXRhLCAmY2FyZXQsCisJCQkJ CQkJICAgWExIUEZfTUVUQV9FWENFUFRJT05fUE9TSVRJT05fV0lEVEhfU1opOworCX0KKwll bHNlCisJeworCQltZXRhLT5leGNfY250ID0gMDsKKwkJbWV0YS0+ZXhjX3dpZCA9IDA7CisJ CW1ldGEtPmV4Y19wb3Nfd2lkID0gMDsKKwl9CisJbWV0YS0+bmJ5dGVzID0gZGZvcl91MTZf Y2FsY19uYnl0ZXMoKm1ldGEpOworCisJQXNzZXJ0KG1ldGEtPml0ZW1fY250ICE9IDApOwor CUFzc2VydChtZXRhLT5kZWx0YV93aWQgIT0gMCk7CisJQXNzZXJ0KG1ldGEtPm5ieXRlcyAh PSAwKTsKKworCXJldHVybiAoY2FyZXQgKyA3KSAvIDg7Cit9CisKK3ZvaWQKK2hlYXBfeGxv Z19kZXNlcmlhbGl6ZV9kZm9yKGNoYXIgKipjdXJzb3IsIGludCAqbml0ZW1zLAorCQkJCQkJ ICAgT2Zmc2V0TnVtYmVyICoqaXRlbXMsCisJCQkJCQkgICB1aW50OCBkZm9yX2J1ZltdKQor eworCWRmb3JfbWV0YV90IGRmb3IgPSB7MH07CisJc2l6ZV90IHBhY2tlZF9tZXRhX25ieXRl czsKKwl1bmlxc29ydHZlY3RfdTE2X3QgdmVjdDsKKworCXBhY2tlZF9tZXRhX25ieXRlcyA9 CisJCWxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfdW5wYWNrX21ldGEoJmRmb3IsICh1aW50 OCopICpjdXJzb3IpOworCisJKmN1cnNvciArPSBwYWNrZWRfbWV0YV9uYnl0ZXM7CisKKwlk Zm9yLnBhY2sgPSAodWludDggKikqY3Vyc29yOworCWRmb3JfdTE2X3VucGFjaygmZGZvciwg JnZlY3QsIDQgKiBERk9SX0JVRl9QQVJUX1NJWkUsCisJCQkJCWRmb3JfYnVmKTsKKworCSpj dXJzb3IgKz0gZGZvci5uYnl0ZXM7CisKKwlBc3NlcnQoZGZvci5uYnl0ZXMgIT0gMCk7CisK KwlBc3NlcnQodmVjdC5jbnQgIT0gMCk7CisJQXNzZXJ0KHZlY3QubWVtX2lzX291dGVyID09 IHRydWUpOworCUFzc2VydCgodm9pZCopdmVjdC5tID09ICh2b2lkKilkZm9yX2J1Zik7CisK Kwkqbml0ZW1zID0gdmVjdC5jbnQ7CisJKml0ZW1zID0gdmVjdC5tOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2hlYXBkZXNjLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvaGVhcGRlc2MuYwppbmRleCA3NWFlNmY5ZDM3NS4uMjQ0NmYx NTg3MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9oZWFwZGVz Yy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9oZWFwZGVzYy5jCkBAIC0x NSw2ICsxNSw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vz cy9oZWFwYW1feGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW1feGxvZ19kZm9yLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JtZ3JkZXNjX3V0aWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3Zpc2liaWxpdHltYXBkZWZzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5o IgpAQCAtMTA4LDcgKzEwOSw4IEBAIGhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRf ZnJlZXplKGNoYXIgKmN1cnNvciwgdWludDE2IGZsYWdzLAogCQkJCQkJCQkJICAgT2Zmc2V0 TnVtYmVyICoqZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkgICBpbnQgKm5yZWRpcmVjdGVkLCBP ZmZzZXROdW1iZXIgKipyZWRpcmVjdGVkLAogCQkJCQkJCQkJICAgaW50ICpuZGVhZCwgT2Zm c2V0TnVtYmVyICoqbm93ZGVhZCwKLQkJCQkJCQkJCSAgIGludCAqbnVudXNlZCwgT2Zmc2V0 TnVtYmVyICoqbm93dW51c2VkKQorCQkJCQkJCQkJICAgaW50ICpudW51c2VkLCBPZmZzZXRO dW1iZXIgKipub3d1bnVzZWQsCisJCQkJCQkJCQkgICB1aW50OCBkZm9yX2J1ZltdKQogewog CWlmIChmbGFncyAmIFhMSFBfSEFTX0ZSRUVaRV9QTEFOUykKIAl7CkBAIC0xNDYsMTQgKzE0 OCwyMiBAQCBoZWFwX3hsb2dfZGVzZXJpYWxpemVfcHJ1bmVfYW5kX2ZyZWV6ZShjaGFyICpj dXJzb3IsIHVpbnQxNiBmbGFncywKIAogCWlmIChmbGFncyAmIFhMSFBfSEFTX0RFQURfSVRF TVMpCiAJewotCQl4bGhwX3BydW5lX2l0ZW1zICpzdWJyZWNvcmQgPSAoeGxocF9wcnVuZV9p dGVtcyAqKSBjdXJzb3I7CisJCWlmKCEoZmxhZ3MgJiBYTEhQX0RGT1JfQ09NUFJFU1NFRCkp CisJCXsKKwkJCXhsaHBfcHJ1bmVfaXRlbXMgKnN1YnJlY29yZCA9ICh4bGhwX3BydW5lX2l0 ZW1zICopIGN1cnNvcjsKIAotCQkqbmRlYWQgPSBzdWJyZWNvcmQtPm50YXJnZXRzOwotCQlB c3NlcnQoKm5kZWFkID4gMCk7Ci0JCSpub3dkZWFkID0gc3VicmVjb3JkLT5kYXRhOworCQkJ Km5kZWFkID0gc3VicmVjb3JkLT5udGFyZ2V0czsKKwkJCUFzc2VydCgqbmRlYWQgPiAwKTsK KwkJCSpub3dkZWFkID0gc3VicmVjb3JkLT5kYXRhOwogCi0JCWN1cnNvciArPSBvZmZzZXRv Zih4bGhwX3BydW5lX2l0ZW1zLCBkYXRhKTsKLQkJY3Vyc29yICs9IHNpemVvZihPZmZzZXRO dW1iZXIpICogKm5kZWFkOworCQkJY3Vyc29yICs9IG9mZnNldG9mKHhsaHBfcHJ1bmVfaXRl bXMsIGRhdGEpOworCQkJY3Vyc29yICs9IHNpemVvZihPZmZzZXROdW1iZXIpICogKm5kZWFk OworCQl9CisJCWVsc2UKKwkJeworCQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoJmN1 cnNvciwgbmRlYWQsIG5vd2RlYWQsCisJCQkJCQkJCQkgICBkZm9yX2J1Zik7CisJCX0KIAl9 CiAJZWxzZQogCXsKQEAgLTE2MywxNCArMTczLDIyIEBAIGhlYXBfeGxvZ19kZXNlcmlhbGl6 ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1cnNvciwgdWludDE2IGZsYWdzLAogCiAJaWYg KGZsYWdzICYgWExIUF9IQVNfTk9XX1VOVVNFRF9JVEVNUykKIAl7Ci0JCXhsaHBfcHJ1bmVf aXRlbXMgKnN1YnJlY29yZCA9ICh4bGhwX3BydW5lX2l0ZW1zICopIGN1cnNvcjsKKwkJaWYo IShmbGFncyAmIFhMSFBfREZPUl9DT01QUkVTU0VEKSkKKwkJeworCQkJeGxocF9wcnVuZV9p dGVtcyAqc3VicmVjb3JkID0gKHhsaHBfcHJ1bmVfaXRlbXMgKikgY3Vyc29yOwogCi0JCSpu dW51c2VkID0gc3VicmVjb3JkLT5udGFyZ2V0czsKLQkJQXNzZXJ0KCpudW51c2VkID4gMCk7 Ci0JCSpub3d1bnVzZWQgPSBzdWJyZWNvcmQtPmRhdGE7CisJCQkqbnVudXNlZCA9IHN1YnJl Y29yZC0+bnRhcmdldHM7CisJCQlBc3NlcnQoKm51bnVzZWQgPiAwKTsKKwkJCSpub3d1bnVz ZWQgPSBzdWJyZWNvcmQtPmRhdGE7CiAKLQkJY3Vyc29yICs9IG9mZnNldG9mKHhsaHBfcHJ1 bmVfaXRlbXMsIGRhdGEpOwotCQljdXJzb3IgKz0gc2l6ZW9mKE9mZnNldE51bWJlcikgKiAq bnVudXNlZDsKKwkJCWN1cnNvciArPSBvZmZzZXRvZih4bGhwX3BydW5lX2l0ZW1zLCBkYXRh KTsKKwkJCWN1cnNvciArPSBzaXplb2YoT2Zmc2V0TnVtYmVyKSAqICpudW51c2VkOworCQl9 CisJCWVsc2UKKwkJeworCQkJaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoJmN1cnNvciwg bnVudXNlZCwgbm93dW51c2VkLAorCQkJCQkJCQkJICAgZGZvcl9idWYgKyBERk9SX0JVRl9Q QVJUX1NJWkUpOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC0zMDksMTMgKzMyNywxNiBAQCBo ZWFwMl9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJ CXhsaHBfZnJlZXplX3BsYW4gKnBsYW5zOwogCQkJT2Zmc2V0TnVtYmVyICpmcnpfb2Zmc2V0 czsKIAorCQkJdWludDggZGZvcl9idWZbNSAqIERGT1JfQlVGX1BBUlRfU0laRV07CisKIAkJ CWNoYXIJICAgKmN1cnNvciA9IFhMb2dSZWNHZXRCbG9ja0RhdGEocmVjb3JkLCAwLCAmZGF0 YWxlbik7CiAKIAkJCWhlYXBfeGxvZ19kZXNlcmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGN1 cnNvciwgeGxyZWMtPmZsYWdzLAogCQkJCQkJCQkJCQkJICAgJm5wbGFucywgJnBsYW5zLCAm ZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkJCQkgICAmbnJlZGlyZWN0ZWQsICZyZWRpcmVjdGVk LAogCQkJCQkJCQkJCQkJICAgJm5kZWFkLCAmbm93ZGVhZCwKLQkJCQkJCQkJCQkJCSAgICZu dW51c2VkLCAmbm93dW51c2VkKTsKKwkJCQkJCQkJCQkJCSAgICZudW51c2VkLCAmbm93dW51 c2VkLAorCQkJCQkJCQkJCQkJICAgZGZvcl9idWYpOwogCiAJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiwgbnBsYW5zOiAldSwgbnJlZGlyZWN0ZWQ6ICV1LCBuZGVhZDogJXUsIG51bnVz ZWQ6ICV1IiwKIAkJCQkJCQkgbnBsYW5zLCBucmVkaXJlY3RlZCwgbmRlYWQsIG51bnVzZWQp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCmluZGV4IGQ5MDAw Y2NkOWZkLi42Y2VlYTQ1MTRlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9t ZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBybWdyX2Rlc2Nfc291cmNlcyA9IGZpbGVz KAogICAnZ2lzdGRlc2MuYycsCiAgICdoYXNoZGVzYy5jJywKICAgJ2hlYXBkZXNjLmMnLAor ICAnaGVhcGFtX3hsb2dfZGZvci5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhh Y3RkZXNjLmMnLAogICAnbmJ0ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQKaW5kZXggODNhZjU5NGQ0YWYuLmM1M2UyOTIxYzAxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtMzUwNyw2 ICszNTA3LDEzIEBACiAgIGJvb3RfdmFsID0+ICdmYWxzZScsCiB9LAogCit7IG5hbWUgPT4g J3dhbF9wcnVuZV9kZm9yX2NvbXByZXNzaW9uJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQg PT4gJ1BHQ19TVVNFVCcsIGdyb3VwID0+ICdXQUxfU0VUVElOR1MnLAorICBzaG9ydF9kZXNj ID0+ICdDb21wcmVzcyBkZWFkIGFuZCB1bnVzZWQgb2Zmc2V0IGFycmF5cyBhdCBQUlVORS9G UkVFWkUgV0FMIHJlY29yZHMgdXNpbmcgREZPUi4nLAorICBsb25nX2Rlc2MgPT4gJ0VuYWJs ZXMgY29tcHJlc3Npb24gb2YgZGVhZCBhbmQgdW51c2VkIE9mZnNldE51bWJlciBhcnJheXMg c3RvcmVkIGluIGhlYXAgUFJVTkUvRlJFRVpFIFdBTCByZWNvcmRzIHVzaW5nIGN1c3RvbWlz ZWQgZGVsdGEgZnJhbWUtb2YtcmVmZXJlbmNlIGVuY29kaW5nLicsCisgIHZhcmlhYmxlID0+ ICd3YWxfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbicsCisgIGJvb3RfdmFsID0+ICd0cnVlJwor fSwKKwogeyBuYW1lID0+ICd3YWxfcmVjZWl2ZXJfY3JlYXRlX3RlbXBfc2xvdCcsIHR5cGUg PT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4gJ1JFUExJQ0FU SU9OX1NUQU5EQlknLAogICBzaG9ydF9kZXNjID0+ICdTZXRzIHdoZXRoZXIgYSBXQUwgcmVj ZWl2ZXIgc2hvdWxkIGNyZWF0ZSBhIHRlbXBvcmFyeSByZXBsaWNhdGlvbiBzbG90IGlmIG5v IHBlcm1hbmVudCBzbG90IGlzIGNvbmZpZ3VyZWQuJywKICAgdmFyaWFibGUgPT4gJ3dhbF9y ZWNlaXZlcl9jcmVhdGVfdGVtcF9zbG90JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMKaW5kZXggMjkwY2NiYzU0M2UuLmJlZTYwYjJlYmNkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL2NvbW1pdF90cy5oIgogI2luY2x1ZGUgImFjY2Vzcy9naW4uaCIKKyNpbmNsdWRlICJh Y2Nlc3MvaGVhcGFtX3hsb2dfZGZvci5oIgogI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3R3b3BoYXNlLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKaW5kZXggYWMzOGNkZGFhZjkuLjQxNTJlNzg5ZWUxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yNjMs NiArMjYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IChjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkKICN3YWxfY29tcHJlc3Npb24gPSBvZmYgICAg ICAgICAgICAgICAgICAjIGVuYWJsZXMgY29tcHJlc3Npb24gb2YgZnVsbC1wYWdlIHdyaXRl czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9mZiwgcGds eiwgbHo0LCB6c3RkLCBvciBvbgorI3dhbF9wcnVuZV9kZm9yX2NvbXByZXNzaW9uID0gdHJ1 ZSAgICAgICMgQ29tcHJlc3MgZGVhZCBhbmQgdW51c2VkIG9mZnNldCBhcnJheXMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGF0IFBSVU5FL0ZSRUVaRSBX QUwgcmVjb3JkcyB1c2luZyBERk9SLgogI3dhbF9pbml0X3plcm8gPSBvbiAgICAgICAgICAg ICAgICAgICAgICMgemVyby1maWxsIG5ldyBXQUwgZmlsZXMKICN3YWxfcmVjeWNsZSA9IG9u ICAgICAgICAgICAgICAgICAgICAgICAjIHJlY3ljbGUgV0FMIGZpbGVzCiAjd2FsX2J1ZmZl cnMgPSAtMSAgICAgICAgICAgICAgICAgICAgICAgIyBtaW4gMzJrQiwgLTEgc2V0cyBiYXNl ZCBvbiBzaGFyZWRfYnVmZmVycwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wLy5n aXRpZ25vcmUgYi9zcmMvYmluL3BnX3dhbGR1bXAvLmdpdGlnbm9yZQppbmRleCBlYzUxZjQx Yzc2Ny4uYTNjMDI0NDZiOWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC8uZ2l0 aWdub3JlCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC8uZ2l0aWdub3JlCkBAIC0xMCw2ICsx MCw3IEBACiAvZ2lzdGRlc2MuYwogL2hhc2hkZXNjLmMKIC9oZWFwZGVzYy5jCisvaGVhcGFt X3hsb2dfZGZvci5jCiAvbG9naWNhbG1zZ2Rlc2MuYwogL214YWN0ZGVzYy5jCiAvbmJ0ZGVz Yy5jCkBAIC0yOCw1ICsyOSwxMyBAQAogL3hsb2dyZWFkZXIuYwogL3hsb2dzdGF0cy5jCiAK KyMgU291cmNlIGZpbGVzIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL2xpYgorL2JpdHBhY2tf dGVtcGwuYworL2JpdHBhY2tfdTE2LmMKKy9kZm9yX3RlbXBsLmMKKy9kZm9yX3UxNi5jCisv dmVjdF90ZW1wbC5jCisvdmVjdF91MTYuYworCiAjIEdlbmVyYXRlZCBieSB0ZXN0IHN1aXRl CiAvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxl IGIvc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlCmluZGV4IGFhYmI4NzU2NmEyLi41ZTUy MWMxZTgyMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL01ha2VmaWxlCisrKyBi L3NyYy9iaW4vcGdfd2FsZHVtcC9NYWtlZmlsZQpAQCAtOCw4ICs4LDkgQEAgZXhwb3J0IFRB UgogCiBzdWJkaXIgPSBzcmMvYmluL3BnX3dhbGR1bXAKIHRvcF9idWlsZGRpciA9IC4uLy4u Ly4uCi1pbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitkZm9y X2RpciA6PSAkKHRvcF9idWlsZGRpcikvc3JjL2JhY2tlbmQvbGliCiAKK2luY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIE9CSlMgPSBcCiAJJChSTUdSREVT Q09CSlMpIFwKIAkkKFdJTjMyUkVTKSBcCkBAIC0yMCwxMCArMjEsMTMgQEAgT0JKUyA9IFwK IAl4bG9ncmVhZGVyLm8gXAogCXhsb2dzdGF0cy5vCiAKK2luY2x1ZGUgJChkZm9yX2Rpcikv TWFrZWZpbGUuZGZvcgorT0JKUyArPSAkKE9CSlNfREZPUikKKwogb3ZlcnJpZGUgQ1BQRkxB R1MgOj0gLURGUk9OVEVORCAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQogTERGTEFH U19JTlRFUk5BTCArPSAtTCQodG9wX2J1aWxkZGlyKS9zcmMvZmVfdXRpbHMgLWxwZ2ZldXRp bHMKIAotUk1HUkRFU0NTT1VSQ0VTID0gJChzb3J0ICQobm90ZGlyICQod2lsZGNhcmQgJCh0 b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvKmRlc2MqLmMpKSkKK1JN R1JERVNDU09VUkNFUyA9ICQoc29ydCAkKG5vdGRpciAkKHdpbGRjYXJkICQodG9wX3NyY2Rp cikvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjLypkZXNjKi5jKSkpIGhlYXBhbV94bG9n X2Rmb3IuYwogUk1HUkRFU0NPQkpTID0gJChwYXRzdWJzdCAlLmMsJS5vLCQoUk1HUkRFU0NT T1VSQ0VTKSkKIAogCkBAIC0zMiw2ICszNiwyNCBAQCBhbGw6IHBnX3dhbGR1bXAKIHBnX3dh bGR1bXA6ICQoT0JKUykgfCBzdWJtYWtlLWxpYnBncG9ydAogCSQoQ0MpICQoQ0ZMQUdTKSAk XiAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAorYml0cGFj a190ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJQorCXJtIC1m ICRAICYmICQoTE5fUykgJDwgLgorCitiaXRwYWNrX3UxNi5jOiAlIDogJCh0b3Bfc3JjZGly KS9zcmMvYmFja2VuZC9saWIvJSBiaXRwYWNrX3RlbXBsLmMKKwlybSAtZiAkQCAmJiAkKExO X1MpICQ8IC4KKworZGZvcl90ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9saWIvJQorCXJtIC1mICRAICYmICQoTE5fUykgJDwgLgorCitkZm9yX3UxNi5jOiAlIDog JCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJSBkZm9yX3RlbXBsLmMKKwlybSAtZiAk QCAmJiAkKExOX1MpICQ8IC4KKwordmVjdF90ZW1wbC5jOiAlIDogJCh0b3Bfc3JjZGlyKS9z cmMvYmFja2VuZC9saWIvJQorCXJtIC1mICRAICYmICQoTE5fUykgJDwgLgorCit2ZWN0X3Ux Ni5jOiAlIDogJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9saWIvJSB2ZWN0X3RlbXBsLmMK KwlybSAtZiAkQCAmJiAkKExOX1MpICQ8IC4KKwogeGxvZ3JlYWRlci5jOiAlIDogJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS8lCiAJcm0gLWYgJEAgJiYgJChM Tl9TKSAkPCAuCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWls ZCBiL3NyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWlsZAppbmRleCA1Mjk2ZjIxYjgyYy4u YzMzYmU4ODcxMmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvbWVzb24uYnVpbGQKQEAgLTEwLDYgKzEwLDcg QEAgcGdfd2FsZHVtcF9zb3VyY2VzID0gZmlsZXMoCiBwZ193YWxkdW1wX3NvdXJjZXMgKz0g cm1ncl9kZXNjX3NvdXJjZXMKIHBnX3dhbGR1bXBfc291cmNlcyArPSB4bG9ncmVhZGVyX3Nv dXJjZXMKIHBnX3dhbGR1bXBfc291cmNlcyArPSBmaWxlcygnLi4vLi4vYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nc3RhdHMuYycpCitwZ193YWxkdW1wX3NvdXJjZXMgKz0gZGZvcl9z b3VyY2VzCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwogICBwZ193YWxkdW1wX3Nv dXJjZXMgKz0gcmNfYmluX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBb CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCmluZGV4IGZkY2E3ZDgyMWM4Li41Y2U4ODVl NjMyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKQEAgLTE1LDYgKzE1LDcgQEAK ICNkZWZpbmUgSEVBUEFNX1hMT0dfSAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXAuaCIKKyNp bmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWFkZXIuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmLmgiCkBAIC0zNDEsNiArMzQyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfaGVhcF9w cnVuZQogI2RlZmluZQkJWExIUF9WTV9BTExfVklTSUJMRQkJCSgxIDw8IDgpCiAjZGVmaW5l CQlYTEhQX1ZNX0FMTF9GUk9aRU4JCQkoMSA8PCA5KQogCisjZGVmaW5lCQlYTEhQX0RGT1Jf Q09NUFJFU1NFRAkJKDEgPDwgMTApCisKIC8qCiAgKiB4bGhwX2ZyZWV6ZV9wbGFuIGRlc2Ny aWJlcyBob3cgdG8gZnJlZXplIGEgZ3JvdXAgb2Ygb25lIG9yIG1vcmUgaGVhcCB0dXBsZXMK ICAqIChhcHBlYXJzIGluIHhsX2hlYXBfcHJ1bmUncyB4bGhwX2ZyZWV6ZV9wbGFucyBzdWIt cmVjb3JkKQpAQCAtNDk0LDYgKzQ5Nyw3IEBAIGV4dGVybiB2b2lkIGhlYXBfeGxvZ19kZXNl cmlhbGl6ZV9wcnVuZV9hbmRfZnJlZXplKGNoYXIgKmN1cnNvciwgdWludDE2IGZsYWdzLAog CQkJCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyICoqZnJ6X29mZnNldHMsCiAJCQkJCQkJCQkJ CQkgICBpbnQgKm5yZWRpcmVjdGVkLCBPZmZzZXROdW1iZXIgKipyZWRpcmVjdGVkLAogCQkJ CQkJCQkJCQkJICAgaW50ICpuZGVhZCwgT2Zmc2V0TnVtYmVyICoqbm93ZGVhZCwKLQkJCQkJ CQkJCQkJCSAgIGludCAqbnVudXNlZCwgT2Zmc2V0TnVtYmVyICoqbm93dW51c2VkKTsKKwkJ CQkJCQkJCQkJCSAgIGludCAqbnVudXNlZCwgT2Zmc2V0TnVtYmVyICoqbm93dW51c2VkLAor CQkJCQkJCQkJCQkJICAgdWludDggZGZvcl9idWZbXSk7CiAKLSNlbmRpZgkJCQkJCQkvKiBI RUFQQU1fWExPR19IICovCisjZW5kaWYJCQkJCQkJLyogSEVBUEFNX1hMT0dfSCAqLwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW1feGxvZ19kZm9yLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2df ZGZvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNzRiMTRl ODkxZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxv Z19kZm9yLmgKQEAgLTAsMCArMSwxMzcgQEAKKyNpZm5kZWYgSEVBUEFNX1hMT0dfREZPUl9I CisjZGVmaW5lIEhFQVBBTV9YTE9HX0RGT1JfSAorCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJsaWIvZGZv cl91MTYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKKworLyoKKyAqIERGb1In cyBtZXRhIGJsb2NrIGZvciBQUlVORS9GUkVFWkUgcmVjb3JkCisgKgorICogQSBtZXRhIGJs b2NrIGNvbnRhaW5zIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIGRlY29tcHJlc3Npb24gb2Yg dGhlIGZvbGxvd2luZworICogREZvUiBwYWNrLiBJdCBpcyBkZW5zZWx5IGJpdC1wYWNrZWQu IElmIHRoZSBleGNlcHRpb24gZmxhZyBpcyB6ZXJvLCBmaWVsZHMKKyAqIHBlcnRhaW5pbmcg dG8gZXhjZXB0aW9ucyBpcyBhYnNlbnQsIHdoaWNoIG1lYW5zIHRoYXQgREZvUiBwYWNrIGRv ZXMgbm90CisgKiBjb250YWluIGV4Y2VwdGlvbnMuIENhbGN1bGF0aW9uIG9mIGZpZWxkIHdp ZHRocyB0YWtlcyBpbnRvIGFjY291bnQKKyAqIG5leHQgY29uc2lkZXJhdGlvbnM6CisgKgor ICogTWF4IEl0ZW0gQ291bnQgc2hvdWxkIGJlIG1vcmUgb3IgZXF1YWwgdG8gTWF4SGVhcFR1 cGxlc1BlclBhZ2UuIFNpbmNlIHdlCisgY2FuJ3QgY2FsY3VsYXRlCisgKiBNYXhIZWFwVHVw bGVzUGVyUGFnZSBvbiBwcmVwcm9jZXNzb3Igc3RhZ2UsIHdlIGludGVudGlvbmFsbHkgb3Zl cmVzdGltYXRlIGl0CisgKiBhczoKKyAqICAgICAgIE1heCBJdGVtIENvdW50ID4gQkxDS1Na IC8gTWluIFR1cGxlIFNpemUgPSBCTENLU1ogLyAyNAorICogdG8gcHJvdmlkZSBhIG1hcmdp bi4gSW4gZ2VuZXJhbCwgZGVwZW5kaW5nIG9uIEJMQ0tTWiwgaXQgc2hvdWxkIG5vdCByZXN1 bHQgaW4KKyAqIERGb1IgbWV0YSBibG9jayBvdmVyaGVhZC4KKyAqIEZvciBpbnN0YW5jZSwg Zm9yIGEgYmxvY2sgc2l6ZSBvZiAzMjc2OCwgd2UgaGF2ZSBNYXggSXRlbSBDb3VudCA9IDEz NjYsIGFuZAorICogaXQgbmVlZHMgMTEgYml0cyB3aWR0aCBmaWVsZC4KKyAqCisgKiBTaXpl IG9mIGZpZWxkIEl0ZW0gQ291bnQ6CisgKiAgICAgICBJVEVNX0NPVU5UX1NaID0gbG9nMihN YXhJdGVtQ291bnQpLgorICoKKyAqIE1heGltdW0gRGVsdGEgV2lkdGggaXMgZXF1YWwgdG8g SVRFTV9DT1VOVF9TWi4gU28gREVMVEFfV0lEVEhfU1ogaW4gYSBERm9SCisgKiBtZXRhIGJs b2NrIGNhbiBiZSBjYWxjdWxhdGVkIGFzOgorICogICAgICBERUxUQV9XSURUSF9TWiA+PSBs b2cyKE1heCBEZWx0YSBXaWR0aCkgPSBsb2cyKElURU1fQ09VTlRfU1opCisgKgorICogTWF4 IEV4Y2VwdGlvbiBDb3VudCA9IDAuMSAqIE1heEl0ZW1Db3VudCwgYWNjb3JkaW5nIHRvIERG b1IgYWxnb3JpdGhtIHdoaWNoCisgKiBndWFyYW50ZWVzIHRoYXQgbm90IGxlc3MgdGhhbiA5 MCUgb2YgaXRlbXMgd2lsbCBiZSBjb3ZlcmVkIHdpdGhvdXQgdXNpbmcKKyAqIGV4Y2VwdGlv bnMuIFNvOgorICogICAgICBFWENFUFRJT05fQ09VTlRfU1ogPj0gbG9nMigwLjEgKiBNYXhJ dGVtQ291bnQpLgorICoKKyAqIEFuIGV4Y2VwdGlvbiBpcyBwYXJ0IG9mIGEgZGVsdGEsIGV4 Y2VlZGluZyBjaG9vc2VuIGRlbHRhIHdpZHRoLiBFeGNlcHRpb24gaXMKKyAqIHNhdmVkIGlu IHNlcGFyYXRlZCBwYXJ0IG9mIERGb1IgcGFjayBhbmQsIHNpbmNlIGRlbHRhIHdpZHRoIGlz IG5vdCBsZXNzCisgKiB0aGFuIDE6CisgKiAgICBFWENFUFRJT05fV0lEVEhfU1ogPj0gbG9n MihNYXggRGVsdGEgV2lkdGggLSAxKSA9IGxvZzIoSVRFTV9DT1VOVF9TWiAtIDEpLgorICoK KyAqIEFuIGV4Y2VwdGlvbidzIHBvc2l0aW9uIHNob3dzIHRoZSBwb3NpdGlvbiBvZiBvZiBh IGRlbHRhIHRvIHdpY2ggdGhlCisgKiBleGNlcHRpb24gaGFzIHRvIGJlIGFwcGxpZWQuIFZh bHVlcyBvZiBhbiBleGNlcHRpb24gcG9zaXRpb24gbXVzdCBjb3ZlciB0aGUKKyAqIHNhbWUg dmFsdWUgcmFuZ2UgYXMgYW4gSXRlbSBDb3VudCwgc28gdGhlIE1heCBXaWR0aCBvZiBhbiBF eGNlcHRpb24gUG9zaXRpb24KKyAqIGlzIGVxdWFsIHRvIHdpZHRoIG9mIERlbHRhLiBDb25z ZXF1ZW50bHksIHRoZSBzaXplIG9mIEV4Y2VwdGlvbiBQb3NpdGlvbgorICogV2lkdGggY2Fs Y3VsYXRlZCBhczoKKyAqICAgICBFWENFUFRJT05fUE9TSVRJT05fV0lEVEhfU0laRSA9IGxv ZzIoTWF4IERlbHRhIFdpZHRoKSA9IERFTFRBX1dJRFRIX1NaCisgKgorICogRm9yIGV4YW1w bGUsIE1ldGEgZm9yIEJMQ0tTWiBlcXVhbCB0byAzMjc2OCBoYXMgbmV4dCBzaXplcyBvZiBm aWVsZAorICogfCBzZWN0LiB8IGJ5dGUgfCBiaXRzICAgICAgfCAgIHBhcmFtICAgICAgICAg ICB8ICBzaXplICB8IHJhbmdlIG9mIHZhbHVlcyB8CisgKiB8LS0tLS0tLXwtLS0tLS18LS0t LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0t LXwKKyAqIHwgIG1haW4gfCAwLCAxIHwgMC0xMCAgICAgIHwgaXRlbSBjb3VudCAgICAgICAg fCAxMSBiaXQgfCAxLi4uMTM2NSAgICAgICAgfAorICogfCAgbWFpbiB8ICAgIDEgfCAxMS0x NCAgICAgfCBkZWx0YSB3aWR0aCAgICAgICB8ICA0IGJpdCB8IDEuLi4xMSAgICAgICAgICB8 CisgKiB8ICBtYWluIHwgICAgMSB8IDE1ICAgICAgICB8IGV4dHJhIHNlY3QuIGZsYWcgIHwg IDEgYml0IHwgMC4uLjEgICAgICAgICAgIHwKKyAqIHwgZXh0cmEgfCAgICAyIHwgMTYtMjMg ICAgIHwgZXhjZXB0aW9uIGNvdW50ICAgfCAgOCBiaXQgfCAwLi4uMTM3ICAgICAgICAgfAor ICogfCBleHRyYSB8ICAgIDMgfCAyNC0yNyAgICAgfCBleGNlcHRpb24gd2lkdGggICB8ICA0 IGJpdCB8IDAuLi4xMCAgICAgICAgICB8CisgKiB8IGV4dHJhIHwgMywgNCB8IDI4LTM1ICAg ICB8IGV4Y2VwdCBwb3MuIHdpZHRoIHwgIDQgYml0IHwgMS4uLjExICAgICAgICAgIHwKKyAq LworCisvKgorICogVGhlIHNpemVzIG9mIGZpZWxkcyBpbiB0aGUgY29tcHJlc3NlZCBERm9S IE1ldGEgc3RydWN0dXJlIG9mIGFuCisgKiBYTE9HX0hFQVAyX1BSVU5FKiByZWNvcmQuCisg Ki8KKyNpZiBCTENLU1ogPT0gMzI3NjgKKyNkZWZpbmUgWExIUEZfTUVUQV9JVEVNX0NPVU5U X1NaICAxMQorI2RlZmluZSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDQKKyNlbGlmIEJM Q0tTWiA9PSAxNjM4NAorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogIDEwCisj ZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1ogNAorI2VsaWYgQkxDS1NaID09IDgx OTIKKyNkZWZpbmUgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaICA5CisjZGVmaW5lIFhMSFBG X01FVEFfREVMVEFfV0lEVEhfU1ogNAorI2VsaWYgQkxDS1NaID09IDQwOTYKKyNkZWZpbmUg WExIUEZfTUVUQV9JVEVNX0NPVU5UX1NaICA4CisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFf V0lEVEhfU1ogNAorI2VsaWYgQkxDS1NaID09IDIwNDgKKyNkZWZpbmUgWExIUEZfTUVUQV9J VEVNX0NPVU5UX1NaICA3CisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1ogMwor I2VsaWYgQkxDS1NaID09IDEwMjQKKyNkZWZpbmUgWExIUEZfTUVUQV9JVEVNX0NPVU5UX1Na ICA2CisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1ogMworI2VsaWYgQkxDS1Na ID09IDUxMgorI2RlZmluZSBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogIDUKKyNkZWZpbmUg WExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAzCisjZWxpZiBCTENLU1ogPT0gMjU2CisjZGVm aW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAgNAorI2RlZmluZSBYTEhQRl9NRVRBX0RF TFRBX1dJRFRIX1NaIDMKKyNlbGlmIEJMQ0tTWiA9PSAxMjgKKyNkZWZpbmUgWExIUEZfTUVU QV9JVEVNX0NPVU5UX1NaICAzCisjZGVmaW5lIFhMSFBGX01FVEFfREVMVEFfV0lEVEhfU1og MgorI2VsaWYgQkxDS1NaID09IDY0CisjZGVmaW5lIFhMSFBGX01FVEFfSVRFTV9DT1VOVF9T WiAgMgorI2RlZmluZSBYTEhQRl9NRVRBX0RFTFRBX1dJRFRIX1NaIDIKKyNlbHNlCisjZXJy b3IgIlVuc3VwcG9ydGVkIEJMQ0tTWiBpbiBYTG9nIEhlYXAgQW5kIFBydW5lLiIKKyNlbmRp ZgorCisjZGVmaW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0ZMQUdfU1ogMSAvKiBGbGFnIGFi b3V0IEV4dHJhIFNlY3Rpb24gcHJlc2VuY2UgKi8KKworLyogU2l6ZSBvZiBFeGNlcHRpb24g Q291bnQgZmllbGQgKi8KKyNpZiBYTEhQRl9NRVRBX0lURU1fQ09VTlRfU1ogPiA2CisjZGVm aW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5UX1NaIFhMSFBGX01FVEFfSVRFTV9DT1VO VF9TWiAtIDMKKyNlbHNlCisjZGVmaW5lIFhMSFBGX01FVEFfRVhDRVBUSU9OX0NPVU5UX1Na IFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiAzCisjZW5kaWYKKworI2RlZmluZSBYTEhQRl9N RVRBX0VYQ0VQVElPTl9XSURUSF9TWiBcCisJWExIUEZfTUVUQV9ERUxUQV9XSURUSF9TWiAv KiBTaXplIG9mIEV4Y2VwdGlvbiBXaWR0aCBmaWVsZCAqLworCisjZGVmaW5lIFhMSFBGX01F VEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1NaIFwKKwlYTEhQRl9NRVRBX0RFTFRBX1dJ RFRIX1NaIC8qIFNpemUgb2YgRXhjZXB0aW9uIFBvc2l0aW9uIHdpZHRoIGZpZWxkICovCisK Ky8qIE1heGltYWwgc2l6ZSBvZiBwYWNrZWQgbWV0YSAqLworI2RlZmluZSBNQVhfUEFDS0VE X01FVEFfU0laRSBcCisJKFhMSFBGX01FVEFfSVRFTV9DT1VOVF9TWiArIFhMSFBGX01FVEFf REVMVEFfV0lEVEhfU1ogKyAgICAgICAgICAgICAgICAgIFwKKwkgWExIUEZfTUVUQV9FWENF UFRJT05fRkxBR19TWiArIFhMSFBGX01FVEFfRVhDRVBUSU9OX1BPU0lUSU9OX1dJRFRIX1Na ICsgXAorCSBYTEhQRl9NRVRBX0VYQ0VQVElPTl9XSURUSF9TWiArIFhMSFBGX01FVEFfRVhD RVBUSU9OX0NPVU5UX1NaICsgNykgLyA4CisKKy8qIFRoZSBzaXplIG9mIGEgdHlwaWNhbCBj aHVuayBvZiBtZW1vcnkgdXNlZCBieSBkZm9yX3BhY2sgKi8KKyNkZWZpbmUgREZPUl9CVUZf UEFSVF9TSVpFIE1heEhlYXBUdXBsZXNQZXJQYWdlICogc2l6ZW9mKHVpbnQxNikKKworZXh0 ZXJuIGJvb2wgd2FsX3BydW5lX2Rmb3JfY29tcHJlc3Npb247IC8qIEdVQyAqLworCitleHRl cm4gc2l6ZV90IGxvZ19oZWFwX3BydW5lX2FuZF9mcmVlemVfcGFja19tZXRhKGNvbnN0IGRm b3JfbWV0YV90ICptZXRhLAorCQkJCQkJCQkJCQkJICB1aW50OCBidWZbXSk7CisKK2V4dGVy biBzaXplX3QgbG9nX2hlYXBfcHJ1bmVfYW5kX2ZyZWV6ZV91bnBhY2tfbWV0YShkZm9yX21l dGFfdCAqbWV0YSwKKwkJCQkJCQkJCQkJCQljb25zdCB1aW50OCBwYWNrZWRfbWV0YVtdKTsK KworZXh0ZXJuIHZvaWQgaGVhcF94bG9nX2Rlc2VyaWFsaXplX2Rmb3IoY2hhciAqKmN1cnNv ciwgaW50ICpuaXRlbXMsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgKippdGVtcywgdWlu dDggZGZvcl9idWZbXSk7CisKKyNlbmRpZgkJCQkJCQkvKiBIRUFQQU1fWExPR19ERk9SX0gg Ki8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9k Zm9yL01ha2VmaWxlIGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQppbmRleCA0M2YwZDUxZmI3 MC4uZWU4OGY4Yjc3Y2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L2Rmb3IvTWFrZWZpbGUKKysr IGIvc3JjL3Rlc3QvZGZvci9NYWtlZmlsZQpAQCAtNDcsNiArNDcsOCBAQCBjaGVjay11bml0 OiAkKFRFU1RTKQogCWNkICQodG9wX2J1aWxkZGlyKS8kKHN1YmRpcikgJiYgXAogCSAgICQo UFJPVkUpICQoUFJPVkVfRkxBR1MpIFwKIAkgICAgLXYgJChhZGRwcmVmaXggLi8sJChpZiAk KFBST1ZFX1RFU1RTKSwgJChQUk9WRV9URVNUUyksICQoVEVTVFMpKSkKKyMgVGhlIGV4YW1w bGUgb2YgdXNpbmcgdGhlIGNoZWNrLXVuaXQgcnVsZToKKyMJCW1ha2UgY2hlY2stdW5pdCBQ Uk9WRV9URVNUUz0ndGVzdF9kZm9yX3UxNicgUFJPVkVfRkxBR1M9Jy0tdmVyYm9zZScKIAog Y2hlY2s6IGNoZWNrLXVuaXQKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8w NTJfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDUy X3BydW5lX2Rmb3JfY29tcHJlc3Npb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjk1MTQ3OGZiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv cmVjb3ZlcnkvdC8wNTJfcHJ1bmVfZGZvcl9jb21wcmVzc2lvbi5wbApAQCAtMCwwICsxLDI4 MyBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1v cmU7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisjIFdvcmtsb2FkIGdlbmVyYXRpbmcgZGVhZCB0dXBsZXMgYW5k IFBSVU5FIFdBTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBnZW5lcmF0ZV9wcnVuZV93b3JrbG9hZAorewor CW15ICgkbm9kZSwgJHdvcmtsb2FkKSA9IEBfOworCisKKwlteSAkc3RhcnRfbHNuOworCW15 ICRlbmRfbHNuOworCisJaWYgKCR3b3JrbG9hZCBlcSAidmFjdXVtX3dpdGhfaW5kZXgiCisJ CXx8ICR3b3JrbG9hZCBlcSAidmFjdXVtX25vX2luZGV4IikKKwl7CisJCSRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXsKKwkJCUNSRUFURSBUQUJMRSB0X3BydW5lICgKKwkJCQlp ZCBpbnQsCisJCQkJdmFsIHRleHQKKwkJCSkgV0lUSCAoZmlsbGZhY3RvciA9IDEwMCwgYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworCQl9KTsKKworCQkkbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHF7CisJCQlTRVQgdmFjdXVtX2ZyZWV6ZV9taW5fYWdlID0gMDsKKwkJ CVNFVCB2YWN1dW1fZnJlZXplX3RhYmxlX2FnZSA9IDA7CisJCX0pOworCisJCSMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCQkjIFBoYXNlIDE6IElOU0VSVAorCQkjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKwkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxewor CQkJSU5TRVJUIElOVE8gdF9wcnVuZQorCQkJU0VMRUNUIGcsICd4JworCQkJRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwzMDAwMDAwKSBnOworCQl9KTsKKworCQkjIE9wdGlvbmFsIGluZGV4 CisJCWlmICgkd29ya2xvYWQgZXEgInZhY3V1bV93aXRoX2luZGV4IikKKwkJeworCQkJJG5v ZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQkJCUNSRUFURSBJTkRFWCBPTiB0X3By dW5lKGlkKTsKKwkJCX0pOworCQl9CisJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor CQkjIFBoYXNlIDI6IERFTEVURSArIFZBQ1VVTQorCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKwkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQkJREVMRVRFIEZS T00gdF9wcnVuZQorCQkJV0hFUkUgaWQgJSA1MDAgPD4gMDsKKwkJfSk7CisKKwkJIyBGb3Jj ZSBXQUwgZmx1c2ggYW5kIGNhcHR1cmUgTFNOCisJCSRzdGFydF9sc24gPSAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJCQlTRUxFQ1QgcGdfY3VycmVudF93YWxfZmx1c2hf bHNuKCk7CisJCX0pOworCisJCSMgVkFDVVVNIGN5Y2xlcyB0byB0cmlnZ2VyIFBSVU5FCisJ CWZvciBteSAkaSAoMS4uMykKKwkJeworCQkJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxeyBWQUNVVU0gRlJFRVpFIHRfcHJ1bmU7IH0pOworCQl9CisKKwkJJGVuZF9sc24gPSAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJCQlTRUxFQ1QgcGdfY3VycmVudF93 YWxfZmx1c2hfbHNuKCk7CisJCX0pOworCX0KKwllbHNlCisJeworCQlkaWUgIldvcmtsb2Fk IGlzIG5vdCBkZWZpbmVkOiB3b3JrbG9hZD0kd29ya2xvYWQiOworCX0KKworCWNob21wKCRz dGFydF9sc24pOworCXByaW50ICJDYXB0dXJlZCBzdGFydCBMU046ICRzdGFydF9sc25cbiI7 CisJY2hvbXAoJGVuZF9sc24pOworCXByaW50ICJDYXB0dXJlZCBlbmQgTFNOOiAkZW5kX2xz blxuIjsKKworCXJldHVybiAoJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworfQorCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIyBXQUwgYW5hbHl6ZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgY29sbGVjdF93YWxfc3RhdHMKK3sK KwlteSAoJG5vZGUsICRzdGFydF9sc24sICRlbmRfbHNuKSA9IEBfOworCisJbXkgJHdhbF9k aXIgPSAkbm9kZS0+ZGF0YV9kaXIgLiAiL3BnX3dhbCI7CisKKwlwcmludCAid2FsX2Rpcj0i IC4gJHdhbF9kaXIgLiAiXG4iOworCXByaW50ICJjb2xsZWN0X3dhbF9zdGF0czogc3RhcnRf bHNuPSRzdGFydF9sc25cbiI7CisJcHJpbnQgImNvbGxlY3Rfd2FsX3N0YXRzOiBlbmRfbHNu PSRlbmRfbHNuXG4iOworCisJbXkgJGNtZDsKKworCWlmIChkZWZpbmVkICRlbmRfbHNuICYm ICRlbmRfbHNuIG5lICcnKQorCXsKKwkJJGNtZCA9ICJwZ193YWxkdW1wIC1wICR3YWxfZGly IC1zICRzdGFydF9sc24gLWUgJGVuZF9sc24gMj4vZGV2L251bGwiOworCX0KKwllbHNlCisJ eworCQkkY21kID0gInBnX3dhbGR1bXAgLXAgJHdhbF9kaXIgLXMgJHN0YXJ0X2xzbiAyPi9k ZXYvbnVsbCI7CisJfQorCisJbXkgQGxpbmVzID0gYCRjbWRgOworCisJIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisJIyBDb3VudGVycworCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCW15ICR0b3RhbF9yZWNvcmRzID0gMDsKKwlteSAkdG90YWxfYnl0ZXMgICA9IDA7 CisKKwlteSAkcHJ1bmVfcmVjb3JkcyA9IDA7CisJbXkgJHBydW5lX2J5dGVzICAgPSAwOwor CisJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKQorCXsKKwkJIyBFeHRyYWN0IHRvdGFsIHJl Y29yZCBzaXplCisJCWlmICgkbGluZSA9fiAvbGVuIFwocmVjXC90b3RcKTpccypcZCtcL1xz KihcZCspLykKKwkJeworCQkJbXkgJHNpemUgPSAkMTsKKworCQkJJHRvdGFsX3JlY29yZHMr KzsKKwkJCSR0b3RhbF9ieXRlcyArPSAkc2l6ZTsKKworCQkJIyBQUlVORS1zcGVjaWZpYyB0 cmFja2luZworCQkJaWYgKCRsaW5lID1+IC9QUlVORV9WQUNVVU1fU0NBTi8pCisJCQl7CisJ CQkJJHBydW5lX3JlY29yZHMrKzsKKwkJCQkkcHJ1bmVfYnl0ZXMgKz0gJHNpemU7CisJCQl9 CisJCX0KKwl9CisKKwlpZiAoJHRvdGFsX3JlY29yZHMgPT0gMCkKKwl7CisJCWRpZSAiTm8g V0FMIHJlY29yZHMgZm91bmQgaW4gcmFuZ2UgJHN0YXJ0X2xzbiDihpIgJGVuZF9sc24iOwor CX0KKworCXByaW50ICJUT1RBTDogcmVjb3Jkcz0kdG90YWxfcmVjb3JkczsgYnl0ZXM9JHRv dGFsX2J5dGVzXG4iOworCXByaW50ICJQUlVORTogcmVjb3Jkcz0kcHJ1bmVfcmVjb3Jkczsg Ynl0ZXM9JHBydW5lX2J5dGVzXG4iOworCisJcmV0dXJuIHsKKwkJdG90YWxfcmVjb3JkcyA9 PiAkdG90YWxfcmVjb3JkcywKKwkJdG90YWxfYnl0ZXMgICA9PiAkdG90YWxfYnl0ZXMsCisJ CXBydW5lX3JlY29yZHMgPT4gJHBydW5lX3JlY29yZHMsCisJCXBydW5lX2J5dGVzICAgPT4g JHBydW5lX2J5dGVzLAorCX07Cit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biB0ZXN0IG9uIGEgZnJl c2ggY2x1c3RlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBydW5fY2x1c3Rlcl90ZXN0Cit7CisJbXkgKCRu YW1lLCAkY29tcHJlc3Npb24sICR3b3JrbG9hZCkgPSBAXzsKKworCW15ICRub2RlID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCRuYW1lKTsKKworCSRub2RlLT5pbml0Owor CisJJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCBxcXsKKwkJd2FsX2xl dmVsID0gcmVwbGljYQorCQlhdXRvdmFjdXVtID0gb2ZmCisJCXdhbF9wcnVuZV9kZm9yX2Nv bXByZXNzaW9uID0gJGNvbXByZXNzaW9uCisgCQl3YWxfa2VlcF9zaXplID0gJzFHQicKKwkJ bWF4X3dhbF9zaXplID0gJzIwR0InCisJfSk7CisKKwkkbm9kZS0+c3RhcnQ7CisKKwlteSAo JHN0YXJ0X2xzbiwgJGVuZF9sc24pID0gZ2VuZXJhdGVfcHJ1bmVfd29ya2xvYWQoJG5vZGUs ICR3b3JrbG9hZCk7CisKKwkkbm9kZS0+c3RvcDsKKworCXJldHVybiBjb2xsZWN0X3dhbF9z dGF0cygkbm9kZSwgJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworfQorCisjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBG b3JtYXR0aW5nIGhlbHBlcnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N1YiBfcGN0X3JlZHVjdGlvbgorewor CW15ICgkYmVmb3JlLCAkYWZ0ZXIpID0gQF87CisJcmV0dXJuICJOL0EiIGlmICRiZWZvcmUg PT0gMDsKKworCW15ICRwY3QgPSAxMDAgKiAoJGJlZm9yZSAtICRhZnRlcikgLyAkYmVmb3Jl OworCXJldHVybiBzcHJpbnRmKCIlZCUlIiwgaW50KCRwY3QgKyAwLjUpKTsKK30KKworc3Vi IF9yYXRpbworeworCW15ICgkYmVmb3JlLCAkYWZ0ZXIpID0gQF87CisJcmV0dXJuICJOL0Ei IGlmICRhZnRlciA9PSAwOworCisJbXkgJHIgPSAkYmVmb3JlIC8gJGFmdGVyOworCXJldHVy biBzcHJpbnRmKCIlLjFmeCIsICRyKTsKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwb3J0OiB0b3Rh bCBXQUwgc3RhdHMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdWIgcmVwb3J0X3dhbF9kaWZmCit7CisJbXkgKCRv ZmYsICRvbikgPSBAXzsKKworCW15ICRiX2J5dGVzID0gJG9mZi0+e3RvdGFsX2J5dGVzfTsK KwlteSAkYV9ieXRlcyA9ICRvbi0+e3RvdGFsX2J5dGVzfTsKKworCXByaW50ZiAiJS0yMHMg JTE3cyAlMTdzICUxMXNcbiIsCisJCSItIiB4IDIwLCAiLSIgeCAxNywgIi0iIHggMTcsICIt IiB4IDExOworCisJcHJpbnRmICIlLTIwcyAlMTdzICUxN3MgJTExc1xuIiwKKwkJIiIsICJE Rk9SIG9mZiwgYnl0ZXMiLCAiREZPUiBvbiwgYnl0ZXMiLCAiUmVkdWN0aW9uIjsKKworCXBy aW50ZiAiJS0yMHMgJTE3cyAlMTdzICUxMXNcbiIsCisJCSItIiB4IDIwLCAiLSIgeCAxNywg Ii0iIHggMTcsICItIiB4IDExOworCisJcHJpbnRmICIlLTIwcyAlMTdkICUxN2QgJTExc1xu IiwKKwkJIldBTCB0b3RhbCBzaXplIiwKKwkJJG9mZi0+e3RvdGFsX2J5dGVzfSwKKwkJJG9u LT57dG90YWxfYnl0ZXN9LAorCQlfcGN0X3JlZHVjdGlvbigkb2ZmLT57dG90YWxfYnl0ZXN9 LCAkb24tPnt0b3RhbF9ieXRlc30pOworCisJcHJpbnRmICIlLTIwcyAlMTdkICUxN2QgJTEx c1xuXG4iLAorCQkiUHJ1bmUgcmVjb3JkcyBzaXplIiwKKwkJJG9mZi0+e3BydW5lX2J5dGVz fSwKKwkJJG9uLT57cHJ1bmVfYnl0ZXN9LAorCQlfcmF0aW8oJG9mZi0+e3BydW5lX2J5dGVz fSwgJG9uLT57cHJ1bmVfYnl0ZXN9KTsKK30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2NlbmFyaW8gMTog VkFDVVVNIHdpdGhvdXQgaW5kZXgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitteSAkb2ZmX25vaWR4ID0gcnVuX2Ns dXN0ZXJfdGVzdCgicHJ1bmVfb2ZmX25vaWR4IiwgIm9mZiIsICJ2YWN1dW1fbm9faW5kZXgi KTsKK215ICRvbl9ub2lkeCAgPSBydW5fY2x1c3Rlcl90ZXN0KCJwcnVuZV9vbl9ub2lkeCIs ICAib24iLCAgInZhY3V1bV9ub19pbmRleCIpOworCitjbXBfb2soCisJJG9mZl9ub2lkeC0+ e3BydW5lX2J5dGVzfSwKKwknPicsCisJJG9uX25vaWR4LT57cHJ1bmVfYnl0ZXN9LAorCSdE Rk9SIHJlZHVjZXMgdGhlIFBSVU5FIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRhYmxlIGhh dmluZyBubyBpbmRleC4nCispOworCitjbXBfb2soCisJJG9mZl9ub2lkeC0+e3RvdGFsX2J5 dGVzfSwKKwknPicsCisJJG9uX25vaWR4LT57dG90YWxfYnl0ZXN9LAorCSdERk9SIHJlZHVj ZXMgdGhlIHRvdGFsIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRhYmxlIGhhdmluZyBubyBp bmRleC4nCispOworCitwcmludCAiXG5cbj09PSBWQUNVVU0gKHRhYmxlIHdpdGggbm8gaW5k ZXgpID09PVxuIjsKK3JlcG9ydF93YWxfZGlmZigkb2ZmX25vaWR4LCAkb25fbm9pZHgpOwor CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyBTY2VuYXJpbyAyOiBWQUNVVU0gd2l0aCBpbmRleAorIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K K215ICRvZmZfaWR4ID0gcnVuX2NsdXN0ZXJfdGVzdCgicHJ1bmVfb2ZmX2lkeCIsICJvZmYi LCAidmFjdXVtX3dpdGhfaW5kZXgiKTsKK215ICRvbl9pZHggID0gcnVuX2NsdXN0ZXJfdGVz dCgicHJ1bmVfb25faWR4IiwgICJvbiIsICAidmFjdXVtX3dpdGhfaW5kZXgiKTsKKworY21w X29rKAorCSRvZmZfaWR4LT57cHJ1bmVfYnl0ZXN9LAorCSc+JywKKwkkb25faWR4LT57cHJ1 bmVfYnl0ZXN9LAorCSdERk9SIHJlZHVjZXMgdGhlIFBSVU5FIFdBTCBzaXplIG9uIHZhY3V1 bWluZyBhIHRhYmxlIGhhdmluZyBhbiBpbmRleC4nCispOworCitjbXBfb2soCisJJG9mZl9p ZHgtPnt0b3RhbF9ieXRlc30sCisJJz49JywKKwkkb25faWR4LT57dG90YWxfYnl0ZXN9LAor CSdERk9SIHJlZHVjZXMgdGhlIHRvdGFsIFdBTCBzaXplIG9uIHZhY3V1bWluZyBhIHRhYmxl IGhhdmluZyBhbiBpbmRleC4nCispOworCitwcmludCAiXG5cbj09PSBWQUNVVU0gKHRhYmxl IHdpdGggaW5kZXgpID09PVxuIjsKK3JlcG9ydF93YWxfZGlmZigkb2ZmX2lkeCwgJG9uX2lk eCk7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMi41My4wCgo= --------------q3GH2mb63ygMChYtU0Dca0vu--