Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oVCwA-00044w-QL for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Sep 2022 14:18:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oVCw8-00046s-EG for pgsql-hackers@arkaria.postgresql.org; Mon, 05 Sep 2022 14:18:52 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oVCw7-00046j-Cn for pgsql-hackers@lists.postgresql.org; Mon, 05 Sep 2022 14:18:51 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oVCw0-0002VG-PY for pgsql-hackers@lists.postgresql.org; Mon, 05 Sep 2022 14:18:51 +0000 Received: by mail-lf1-x132.google.com with SMTP id u18so1035917lfo.8 for ; Mon, 05 Sep 2022 07:18:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=zDGAivNtCYAwtLBePb0K+ty8FzZlVjJKmEgun2RFddE=; b=dvz4HO1gNB0NJKj23mTRMEAc5cz6VJ9dXRbj4DcrhsP4/oz94a1fyqoUDaf78P3st4 rfyKKX9nbfepwgA22Nea3TyG9wZQASX5Od9VsIRudgdk/OV36m7LnDit4ct3Q4KBpjJd gsOLIB27YOEL9VaciA9eDQtJBriJ5V2Ls0Dxix+exThImhxXQiBeHJwKWf1e8NuJaScL FxukScORHFyKE4Ij+CQB14lIRqtbEorf3pi+8OCZqoLpCDH9KbGtnitf5XeIzaOcpdJf Tq9O2BbovM7FyoWjpRk/7jhW6Rw56pDPalW2O41WMHtXhwYUKhy0Qd2+XapW9U9kcUiv fsRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=zDGAivNtCYAwtLBePb0K+ty8FzZlVjJKmEgun2RFddE=; b=Nvk2ZpIFb7wwVy7R4KL03AhadNSZ3xZpoSFaTeslNiQpDf23nVcfT8u6PCT6bQPQFt qTmBGCRRi/4bFuuU0WiZf+D3Cw1/YzdQANaw5PuUTeEJLCdfaFnPOyw6MCO6jtVVAtaQ 3u+RDF2nskhiJ/bNHmHARkBYyVh321iEt+ZP5gUSimrei84EYQDDsOZyIVr+Wqvcr7Jb UOjeN+rkL5BpsO/Um77FUsViMxTHg/ExFPBYV0SULo0+SbANUj2apsl1crNl6WMKzwif Lvr5GU6eEVKyNABjZf0+fIa57jGZfSQSIyuX4P0Vl2PwUuaMjgn8BU3rhu6fSan4orjU VhKw== X-Gm-Message-State: ACgBeo0uBwd/eSmdY2WiuvvO6hGCFNG8w6z2nhY4IIUW+LxlV/VLMWPp nk6W1SSyaNeEqVj2u3tA+rDEYPPtLwRRHxBOtG4= X-Google-Smtp-Source: AA6agR5nJ070F4PKxEmpiqFCHfbF+ycBUHrxN3IB61tAMFgcArFIOgD/8B5vJd/n2pyEC3j03dYGgLvCpWAOdSpuiqo= X-Received: by 2002:a05:6512:3f0e:b0:48a:5edd:99b2 with SMTP id y14-20020a0565123f0e00b0048a5edd99b2mr15568564lfa.124.1662387523053; Mon, 05 Sep 2022 07:18:43 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Tue, 6 Sep 2022 00:18:30 +1000 Message-ID: Subject: Re: Support logical replication of DDLs To: "houzj.fnst@fujitsu.com" Cc: Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Content-Type: multipart/mixed; boundary="000000000000cad9e105e7eec1fd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cad9e105e7eec1fd Content-Type: text/plain; charset="UTF-8" On Mon, Aug 29, 2022 at 4:14 PM Ajin Cherian wrote: > > > Attaching a new version patchset which added support for > CREATE/ALTER/DROP CONVERSION. Adding support for CREATE/ALTER/DROP POLICY ddl deparsing regards, Ajin Cherian Fujitsu Australia --000000000000cad9e105e7eec1fd Content-Type: application/octet-stream; name="v20-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v20-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7oul7d02 RnJvbSBmZWUzMzE5MGE4ZTNkNWFlYmYzY2Q0ZWQzODE4OGEzNWM3YmQ2YTNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNSBTZXAgMjAyMiAwOTo0NzowNyAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIwIDMvNF0gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlk ZWEgb2YgcmVwbGljYXRpbmcgdGhlIENSRUFURSBUQUJMRSBBUyBpcyB0aGF0IHdlIGRlcHJhc2Ug dGhlIENSRUFURQpUQUJMRSBBUyBpbnRvIGEgc2ltcGxlIENSRUFURSBUQUJMRSh3aXRob3V0IHN1 YnF1ZXJ5KSBjb21tYW5kIGFuZCBXQUwgbG9nIGl0CmFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBh bmQgYmVmb3JlIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSB0YWJsZSBhbmQgcmVwbGljYXRlCnRoZSBp bmNvbWluZyB3cml0ZXMgbGF0ZXIgYXMgbm9ybWFsIElOU0VSVHMuIEluIHRoaXMgYXBwb3JhY2gs IHdlIGRvbid0IGV4ZWN1dGUKdGhlIHN1YnF1ZXJ5IG9uIHN1YnNjcmliZXIgc28gdGhhdCBkb24n dCBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG9iamVjdHMKcmVmZXJlbmNlZCBpbiB0aGUgc3Vi cXVlcnkgYWxzbyBleGlzdHMgaW4gc3Vic2NyaWJlci4gQW5kIFRoaXMgYXBwcm9hY2ggd29ya3MK Zm9yIGFsbCBraW5kIG9mIGNvbW1hbmRzKGUuZy4gQ1JBRVRFIFRBQkxFIEFTIFtTRUxFQ1RdW0VY RUNVVEVdW1ZBTFVFU10pCgpJbnRyb2R1Y2luZyBhIG5ldyB0eXBlIG9mIGV2ZW50IHRyaWdnZXIg InRhYmxlX2luaXRfd3JpdGUiLiB3aGljaCB3b3VsZCBiZSBmaXJlZApmb3IgQ1JFQVRFIFRBQkxF IEFTL1NFTEVDVCBJTlRPIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQKYmVmb3JlIGFueSBv dGhlciBtb2RpZmljYXRpb24uIHdlIGRlcGFyc2UgdGhlIGNvbW1hbmQgaW4gdGhlIHRhYmxlX2lu aXRfd3JpdGUgZXZlbnQKdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJp bmcuIFRoZSB3YWxzZW5kZXIgd2lsbCBzZW5kIHRoZQpzdHJpbmcgdG8gc3Vic2NyaWJlci4gQW5k IGluY29taW5nIElOU0VSVHMgd2lsbCBhbHNvIGJlIHJlcGxpY2F0ZWQuCi0tLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMgICAgIHwgIDI0ICsrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICB8IDE3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICA5ICsrCiBzcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91dGls cy9jYWNoZS9ldnRjYWNoZS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmggICB8ICAgNCArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICB8ICAg OSArLQogc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgfCAgIDMgKy0KIDEw IGZpbGVzIGNoYW5nZWQsIDIzMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jCmluZGV4IDE1MmMyOWIuLjBkODBjNmMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0 ZWFzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNv bW1hbmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFz X2ludGVybmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdR dWVyeShpbnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5k Q291bnRlckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0 cmlnZ2VyIGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbwor CQkgKiB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkg Y3JlYXRlZCB0YWJsZSBpbgorCQkgKiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2 ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRk cik7CisJfQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYwppbmRleCA1MjZiYzZhLi4xNGFlZDc4IDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTY0MTAsNiArNjQxMCwyNyBAQCBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCiB9CiAKIC8qCisgKiBEZXBhcnNl IENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAqIGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0 aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUgZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAq IENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmpl Y3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9D cmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOwor CW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKworCXJldHVybiBkZXBh cnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKworLyoKICAqIEhhbmRs ZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgogICoKICAqIFRoaXMgZnVuY3Rpb24gc2hv dWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KQEAgLTY2 NDYsNiArNjY2Nyw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQg KmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0FsdGVyVGFibGU6CiAJCQl0cmVl ID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0Ny ZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOwor CQkJYnJlYWs7CiAJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQl0cmVlID0gZGVwYXJzZV9B bHRlck9wRmFtaWx5KGNtZCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYwppbmRleCAwMmFkZTI2Li5kOWJjZjQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCkBAIC0xMzMsNyArMTMzLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50 VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9zdGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5k X2VuZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0g MCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJ CXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3Jl YXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUg dGFnIGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ry b3AiKSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8 fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQog CQkmJiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAll bHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAg LTU4NSw3ICs1ODcsOCBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUs CiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09 IEVWVF9ERExDb21tYW5kU3RhcnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8 Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJ CQlldmVudCA9PSBFVlRfVGFibGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdf ZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNv bW1hbmQgdGFnIFwiJXNcIiIsIEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYg Kzg3MSwxNjMgQEAgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lk IHRhYmxlT2lkLCBpbnQgcmVhc29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAK KworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJl IHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5k IGFib3V0CisgKiAgICAgdG8gYmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQg dHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29t bWFuZCA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlw ZSA9IFNDVF9DcmVhdGVUYWJsZUFzOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5n X2V4dGVuc2lvbjsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRy ZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFy c2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQK KyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21t YW5kLgorICoKKyAqIEZJWE1FIHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJp bGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2gu ICBQcm9iYWJseSBpdCdzIGJlc3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdn ZXJzKCkgdG8gZml4IHRoaXMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl RW5kKHZvaWQpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50 ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJ cGZyZWUoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgor ICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0 aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJs aWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlj aGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJ CSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZv KSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsK KworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNz ZXJ0KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxv ZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFi bGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJs ZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBh bHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJs ZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29t aW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJ ICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBv aW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBX QUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5n ID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJp bmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5n LCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5V TEwpOworfQorCisvKgorICogRmlyZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8K K3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmpl Y3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJE YXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNl ZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkg ZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkg Ki8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28g ZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBp ZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBz dGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRo ZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNl IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRp ZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICgh Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlm IG5vIGNvbW1hbmQgd2FzIGNvbGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQpCisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dl ckNvbW1vblNldHVwKGNvbW1hbmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5p dFdyaXRlLAorCQkJCQkJCQkJICAidGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmln ZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJl YWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJl c3MgPSBhZGRyZXNzOworCisJLyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJ bnZva2UocnVubGlzdCwgJnRyaWdkYXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVl KHJ1bmxpc3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdn ZXJzIGRpZCB3aWxsIGJlIHZpc2libGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLwor CUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVu dCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OSw3ICsx MzA5LDggQEAgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAo RXZlbnRDYWNoZUxvb2t1cChFVlRfU1FMRHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxv b2t1cChFVlRfVGFibGVSZXdyaXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVW VF9ERExDb21tYW5kRW5kKSAhPSBOSUwpOworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29t bWFuZEVuZCkgIT0gTklMKSB8fAorCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3Jp dGUpICE9IE5JTCk7CiB9CiAKIC8qCkBAIC0xODY4LDYgKzIwMjksNyBAQCBwZ19ldmVudF90cmln Z2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZh bWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29u ZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlk ZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg4NSw2ICsyMDQ3LDggQEAgcGdfZXZl bnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBj bWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJ CWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBj bWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMg ZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKaW5kZXggYjU4MTIxNi4uYzkzNzg3NCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk5OSw2ICs5OTksMTEgQEAgQ3JlYXRlUHVibGlj YXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJ CQlDTURUQUdfQUxURVJfSU5ERVgKIAkJfTsKIAorCQlDb21tYW5kVGFnCWluaXRfY29tbWFuZHNb XSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lOVE8K KwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICov CiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9j b21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9p ZCk7CkBAIC0xMDEwLDYgKzEwMTUsMTAgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCS8qIENyZWF0ZSB0aGUgdGFi bGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdn ZXIoInRhYmxlX3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9m KHJld3JpdGVfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0 YWJsZV9pbml0X3dyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfaW5pdF93cml0ZSIsIGluaXRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2YoaW5pdF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKIAl9CiAKIAl0YWJsZV9jbG9z ZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCBhYTAwODE1Li5mYjVl Njc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTY2NSw4ICsxNjY1LDEwIEBAIFByb2Nlc3NVdGlsaXR5 U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVU YWJsZUFzU3RtdDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJl ZSk7CiAJCQkJYWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxl QXNTdG10ICopIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOwor CQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNh c2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwppbmRl eCBmN2Y3MTY1Li43ZmI4Y2IyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9l dnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2 Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVW VF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikg PT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2 dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUlu aXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IGFiMjkwZGQuLjEzNjczNzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE5MDks NCArMTE5MDksNyBAQAogeyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKICAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcics CiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFi bGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5k ZXggZmQyZWU3Zi4uYTllMGY3MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApA QCAtNTUsNiArNTUsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZEVuZChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJvcChOb2RlICpw YXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBh cnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNz IGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQodm9p ZCk7CisKIGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lkKTsK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4g Ym9vbCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmgKaW5kZXggYjUzMjk0Yi4uM2QyOTRhMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oCkBAIC0yOSw3ICsyOSw4IEBAIHR5cGVkZWYgZW51bSBDb2xsZWN0ZWRDb21tYW5kVHlw ZQogCVNDVF9BbHRlck9wRmFtaWx5LAogCVNDVF9BbHRlckRlZmF1bHRQcml2aWxlZ2VzLAogCVND VF9DcmVhdGVPcENsYXNzLAotCVNDVF9BbHRlclRTQ29uZmlnCisJU0NUX0FsdGVyVFNDb25maWcs CisJU0NUX0NyZWF0ZVRhYmxlQXMKIH0gQ29sbGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8qCkBAIC0x MDEsNiArMTAyLDEyIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJ T2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJZGVmcHJpdnM7CisKKwkJc3RydWN0CisJCXsKKwkJ CU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0JCQlj dGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyogd2hl biBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggYi9z cmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCmluZGV4IGRkYjY3YTYuLjFlNjQ4MzEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvZXZ0Y2FjaGUuaApAQCAtMjIsNyArMjIsOCBAQCB0eXBlZGVmIGVudW0KIAlFVlRfRERMQ29t bWFuZFN0YXJ0LAogCUVWVF9ERExDb21tYW5kRW5kLAogCUVWVF9TUUxEcm9wLAotCUVWVF9UYWJs ZVJld3JpdGUKKwlFVlRfVGFibGVSZXdyaXRlLAorCUVWVF9UYWJsZUluaXRXcml0ZQogfSBFdmVu dFRyaWdnZXJFdmVudDsKIAogdHlwZWRlZiBzdHJ1Y3QKLS0gCjEuOC4zLjEKCg== --000000000000cad9e105e7eec1fd Content-Type: application/octet-stream; name="v20-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v20-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7oul7cn0 RnJvbSA0MTkxM2MxY2Q3MTM2YmVhZGJkY2ZiMzU5M2JjYWRlNjdlN2E3ZDBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMiBTZXAgMjAyMiAwNzo1NDo1MiAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIwIDEvNF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBw cm92aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgps YXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBz cHJpbnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRv IGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcg Y2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlv biBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3Ms IG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8g cmVsaWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5v dCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNl IG5vZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBE REwgc3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JF QVRFL0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJP UCBTRVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9O L1BST0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUv RFJPUCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFU RS9BTFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9E Uk9QIENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCgooTm90ZSAjMSkgTm90ZSB0 aGF0IHNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyByZWxhdGVkIHRvClBB UlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMgd2Ug bmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4KCihOb3RlICMyKSBO b3RlIHRoYXQsIGZvciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBl eHRyYSBsb2dpYyBvbgpzdWJzY3JpYmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFi bGUgb24gcHVibGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0 YWJsZSBvbiBzdWJjcmliZXIgc2lkZSBpcyBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVzZWFyY2gg dGhpcyBtb3JlIGFuZCBpbXByb3ZlIHRoaXMgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMgIHwgNjY3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAgfCAgNzYzICsrKysKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMgICAgIHwgICAzMyArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0X3R5cGUuYyB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAg IHwgICA1MiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICB8ICAxNDkgKy0K IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgIHwgICAgNiArCiBzcmMvaW5jbHVk ZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxf ZGVwYXJzZS5oICAgICAgfCAgIDIzICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmggIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICB8ICAgIDIg Kwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICAgfCAgIDEzICsKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgIHwgICAgNCArCiAxNCBmaWxlcyBjaGFuZ2VkLCA3 NjYxIGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4x NzFkZmIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAog CWNvcHl0by5vIFwKIAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNl Lm8gXAorCWRkbF9qc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRz Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uNTI2YmM2YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSw2Njc5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkg Y29tbWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlz IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1h bmRzLCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmlu Z3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNP TiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisg KiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2Jq ZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2Ig YWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29t bWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25z dHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBv biBzZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgi CisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Ft LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29w ZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0u aCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Rh Ymxlc3BhY2UuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2lsaXN0Lmgi CisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK KyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVz LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInJld3JpdGUv cmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRp bHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3J1 bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8qIEVzdGltYXRlZCBs ZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZpbmUgSlNPTkJfRVNU SU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50byBKU09O QiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBhcyBhbiBv YmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYgZW51bQor eworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJT2JqVHlw ZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBlT2JqZWN0 Cit9IE9ialR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFkCXBh cmFtczsKKwlpbnQJCQludW1QYXJhbXM7CisJU3RyaW5nSW5mbwlmbXRpbmZvOworCWJvb2wJCXBy ZXNlbnQ7Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAg ICpuYW1lOworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVh bjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7 CisJCU9ialRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfSB2YWx1ZTsKKwlz bGlzdF9ub2RlCW5vZGU7Cit9IE9iakVsZW07CisKK2Jvb2wgdmVyYm9zZSA9IHRydWU7CisKK3N0 YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwg TGlzdCAqYXJyYXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2Zsb2F0X29i amVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9hdDggdmFsdWUpOworc3RhdGljIHZv aWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3RhdGlj IHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2Jq VHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu ZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9wcmVt YWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0YXRpYyB2b2lkIGFw cGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVl KTsKK3N0YXRpYyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIg dHlwZW1vZCwKKwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlw ZW1vZHN0ciwKKwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBMaXN0ICpGdW5jdGlv bkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdf b2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGlj IE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYyk7CitzdGF0 aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIE9i alRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKTsKK3N0YXRp YyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7CitzdGF0aWMgSnNvbmJW YWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRl ICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4 cmVsaWQsCisJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJIGNoYXIgKipkZWZp bml0aW9uLAorCQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJCQkJIGNoYXIgKip0 YWJsZXNwYWNlLAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7CitzdGF0aWMgY2hhciAq UmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywK KwkJCQkJCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOworc3RhdGljIGNvbnN0 IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7CisKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250 ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBp c19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklk ZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1 YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBv YmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Rl ZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2lu ZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25D b21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9N aW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZhbHVl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVu dCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9TdGFy dHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUg dHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TZW5kKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5 cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX091dChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUg dHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CisKK3N0YXRpYyBMaXN0ICpk ZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOworc3RhdGljIExpc3QgKmRlcGFyc2Vf VGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlz dCAqZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7CisK Ky8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9saWN5 IGRlcGFyc2Ugb2JqZWN0cworICovCitzdGF0aWMgdm9pZAorYWRkX3BvbGljeV9jbGF1c2VzKE9i alRyZWUgKnBvbGljeVN0bXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVzLAorCQkJCSAgIGJv b2wgZG9fcXVhbCwgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9IHRh YmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJ cG9sVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9saWN5 X29pZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGlj eSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBhZGQgdGhlICJPTiB0YWJsZSIgY2xhdXNlICov CisJYXBwZW5kX29iamVjdF9vYmplY3QocG9saWN5U3RtdCwgIk9OICV7dGFibGV9RCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8gcm9s ZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAqIGNv bnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJl IGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QgICAqbGlzdCA9IE5JTDsKKwkJ TGlzdENlbGwgKmNlbGw7CisKKwkJZm9yZWFjaCAoY2VsbCwgcm9sZXMpCisJCXsKKwkJCVJvbGVT cGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QobmV3X29ianRyZWVfZm9yX3Jv bGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChwb2xpY3lTdG10LCJU TyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfYm9vbF9vYmpl Y3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJLyogYWRkIHRoZSBVU0lO RyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0dW0JZGVwYXJzZWQ7 CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBo ZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAorCQkJCQkJCQkgIFJl bGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBw b2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIs IHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cG9saWN5U3RtdCwgIlVTSU5HICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJCSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBv bGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJLyogYWRkIHRoZSBXSVRIIENIRUNLIGNs YXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQlkZXBhcnNl ZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9 IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJ CQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2x3aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBw b2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIo cGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QocG9saWN5U3RtdCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJ CQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZWxhdGlv bl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qIEFwcGVuZCBhbiBhcnJh eSBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVt CSpwYXJhbTsKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlm IChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCF2ZXJib3NlKQor CXsKKwkJTGlzdENlbGwgKmxjOworCisJCS8qIEV4dHJhY3QgdGhlIE9iakVsZW1zIHdob3NlIHBy ZXNlbnQgZmxhZyBpcyB0cnVlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpF bGVtICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9i anR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlw ZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJ ZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxl dGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwlvYmplY3RfbmFtZSA9IGFwcGVu ZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3 X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkg PSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKiBB cHBlbmQgYSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBl bmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkK K3sKKwlPYmpFbGVtICAqcGFyYW07CisJY2hhcgkgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwli b29sCSAgaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkv KiBDaGVjayBpZiB0aGUgcHJlc2VudCBpcyBwYXJ0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIGFuZCBz dG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSovCisJaWYgKHN0cmNtcChzdWJfZm10LCAicHJlc2VudCIp ID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVlLT5wcmVzZW50ID0g dmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50KQorCQlyZXR1cm47 CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9vbGVhbiA9IHZhbHVl OworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBl bmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVl KQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNz ZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9z dHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUZsb2F0 LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVlOworCWFwcGVuZF9wcmVt YWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQgdGhlIGlucHV0IGZv cm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZm9y bWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWludAkJCQlsZW47 CisJY2hhcgkJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVy bjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+ bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAw ICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+ Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1 Yl9mbXQpOworfQorCisvKiBBcHBlbmQgYSBOVUxMIG9iamVjdCB0byBhIHRyZWUgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkK K3sKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVy Ym9zZSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1h dF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg bmV3X29iamVjdChPYmpUeXBlTnVsbCwgb2JqZWN0X25hbWUpKTsKK30KKworLyogQXBwZW5kIGFu IG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVj dF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7 CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJf Zm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKwor CW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9m bXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsK KwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMg ZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5n LiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICov CitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YQlvYmplY3RfbmFtZTsKKwlj b25zdCBjaGFyCSAgICplbmRfcHRyOworCWNvbnN0IGNoYXIJICAgKmNwOworCWJvb2wJCQlzdGFy dF9jb3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8g PT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25h bWUpOworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVuKHN1Yl9mbXQpOworCisJZm9yIChjcCA9 IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWlmICgqY3AgPT0gJ3snKQorCQl7 CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdGFy dF9jb3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpjcCA9PSAnOicgfHwgKmNwID09ICd9JykK KwkJCWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9iamVjdF9uYW1lLCAq Y3ApOworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9i amVjdCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3Vi X2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKK30KKworLyogQXBwZW5kIGEgcHJl YWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBw ZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xp c3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJh bXMrKzsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0 YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmpl Y3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAodmFsdWUg PT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUg PSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJh bSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1 ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOwor fQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJl dHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICogc2VwYXJhdGVseToKKyAqCisgKiAtIG5z cGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRhaW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdo aWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVzLCB3ZSByZXR1cm4gSW52YWxpZE9pZDsg Y2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUg bm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0 eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0g dHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0 aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRlcyB3aGV0aGVyIFtdcyBtdXN0IGJl IGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5hbWVzIHRvIHRoZWly IHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAqIGluIHRoZSBjYXNlcyBvZiB0eXBl cyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3R5 cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lkICpuc3Bp ZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwYXJy YXkpCit7CisJSGVhcFR1cGxlCQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUJdHlwZWZvcm07CisJT2lk CQkJCWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQs IE9iamVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw bGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5 cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsK KworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0aCkgYXJy YXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBzdWNoIGFz ICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJYXJyYXlfYmFzZV90 eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwkqdHlwYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBl KHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsK KworCWlmICgqdHlwYXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVudGlvbiB0byB0aGUg YXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCXR1cGxl ID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0oYXJyYXlfYmFzZV90 eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCQl0eXBlZm9y bSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5cGVfb2lkID0gYXJyYXlf YmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3 aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAqIHR5cG1vZCBhdCB0aGUg bWlkZGxlIG9mIG5hbWUoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICkuIFdlIGNhbm5vdAor CSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhl c2UgY2FzZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCXR5cGVf b2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAor CQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVUWk9JRCkKKwl7CisJ CXN3aXRjaCAodHlwZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5h bWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBU Wk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElN RVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJ VEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJKnR5cG5h bWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVRaT0lE OgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJ VEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMg YWRkZWQgYnkgdHlwbW9kZS4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJ CQkJYnJlYWs7CisJCQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1F Iik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxpZE9pZDsKKwl9CisJZWxzZQor CXsKKwkJLyoKKwkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIGZvciBv dGhlciB0eXBlcywgc28gZ2V0IHRoZSB0eXBlCisJCSAqIG5hbWUgYW5kIHNjaGVtYSBkaXJlY3Rs eSBmcm9tIHRoZSBjYXRhbG9nLgorCQkgKi8KKwkJKm5zcGlkID0gdHlwZWZvcm0tPnR5cG5hbWVz cGFjZTsKKwkJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsK Kwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIi LCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0g cHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogUmV0 dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMgb2YgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24sIGFzIGEg bGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK0Z1 bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpCit7CisJTGlzdCAgICpub2Rl ZGVmczsKKwlMaXN0ICAgKnN0cmRlZnMgPSBOSUw7CisJTGlzdENlbGwgKmNlbGw7CisKKwlub2Rl ZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHByb2FyZ2Rl ZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9nKEVSUk9SLCAicHJv YXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlZGVmcykK Kwl7CisJCU5vZGUgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBw ZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNl KSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8K K3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sK Kwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgor CQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgor CQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgor CQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVy c2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCS8qIG1h a2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IHBhcmFtZXRl ciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5h bWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAoc2l6ZW9mKE9iakVs ZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJcGFyYW0tPm9ianR5cGUgPSB0eXBlOworCisJ cmV0dXJuIHBhcmFtOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyICov CitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sK KwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBO VUxMKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIg dmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShjaGFyICpmbXQpCit7 CisJT2JqVHJlZQkqcGFyYW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXplb2YoT2JqVHJlZSkp OworCXBhcmFtcy0+cHJlc2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFyYW1zLT5wYXJhbXMp OworCisJaWYgKGZtdCkKKwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VTdHJpbmdJbmZvKCk7 CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBmbXQpOworCX0KKwor CXJldHVybiBwYXJhbXM7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7 fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYW5hbWUiIGFuZCAi b2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBjb3JyZXNwb25kcyB0 byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAqCisgKiBUaGUgZGlm ZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9i am5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBp cyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0 aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUp Cit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChp c0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1w Iik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJ cXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICJzY2hlbWFuYW1l IiwgT2JqVHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgIm9iam5hbWUiLCBPYmpUeXBl U3RyaW5nLCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisg KiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGgg dGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9p ZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsK KwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0JCW9iam5hbWU7CisJ QXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRy TnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJ CWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1f b2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJIG9iamVjdElk LCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1lID0gZ2V0X29i amVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3Rf YXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihjYXRv YmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAm aXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5h bWVzcGFjZSIpOworCisJb2JqbmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwg UmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwpOworCWlmIChpc251 bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZSIpOworCisJcXVhbGlmaWVk ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJ CQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1lKG9iam5hbWUpKSk7CisJdGFibGVfY2xvc2Uo Y2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8q CisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVk IGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFzIFJPTEVTUEVDX0NV UlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5hbWVzLgorICovCitz dGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMp Cit7CisJT2JqVHJlZQkgICAqcm9sZTsKKwljaGFyCSAgICpyb2xldHlwZTsKKworCWlmIChzcGVj LT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVj X25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJcm9sZSA9 IG5ld19vYmp0cmVlX1ZBKE5VTEwsMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIsIE9ialR5cGVCb29s LCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkgICJyb2xlbmFtZSIs IE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEEg aGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQorewor CU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFyCSAgICp0eXBuc3A7 CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlib29s CQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwgdHlwbW9kLAorCQkJ CQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJyYXkpOworCisJaWYg KE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3Jf dGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIiKTsKKworCXR5cGVQ YXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNjaGVtYW5hbWUiLCBP YmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwgT2JqVHlwZVN0cmlu ZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0 ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJyYXkpOworCisJcmV0 dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRv IHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoKKyAqIFRoZSAi Zm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1lbnQgaW4gdGhl IG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBleHRyYSBl bGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3RyaW5nKSwgdHlw ZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBwbGllZC4gIFRo ZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3RhbmNlLCBPYmpU eXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcgcmVxdWlyZXMg YSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBPYmpFbGVtKSwg T2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBFYWNoIGVsZW1l bnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllciBnaXZlbiBp biB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVwYXJzZV9leHBh bmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUgbHV4dXJ5IG9m IHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1lZCBhcmd1bWVu dCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEoY2hhciAqZm10 LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2YV9saXN0CQlhcmdz OworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBhbmQgaXRzICJm bXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJvY2VzcyB0aGUg Z2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZvciAoaSA9IDA7 IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpUeXBlCQl0eXBl OworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywgY2hhciAqKTsK KwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19vYmplY3QodHlw ZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0eXBlcyB0aGVyZSBt dXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0IGFuZCBhZGQgdGhl IGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3QuCisJCSAqLworCQlz d2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBwYXJh bXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7CisJCQljYXNl IE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50 KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1ZS5z dHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlw ZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7CisJ CQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmludGVn ZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxv YXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFf YXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2co RVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKwor CQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0p OworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyogQWxsb2NhdGUg YSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0cmluZ19vYmpl Y3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQodmFsdWUp OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOworCXBhcmFtLT52 YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIFByb2Nl c3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0aGUg b3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfZm10X3Rv X2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAqdHJlZSkKK3sK KwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0cmVlLT5mbXRpbmZv ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWtleS50 eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQiOworCWtleS52YWwu c3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3MgdGhlIHByZS1idWls dCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJdmFsLnZhbC5zdHJp bmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5nLnZhbCA9IHRyZWUt PmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfVkFMVUUsICZ2YWwp OworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24gZnJvbSBhbiBPYmpU cmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihPYmpUcmVlICp0cmVl KQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVlX3RvX2pzb25iX3Jl Yyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisv KgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFuIGluZGl2aWR1YWwg ZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0aGUgb3V0cHV0IHBh cnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29uYl9lbGVtZW50KEpz b25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJCSBKc29uYkl0ZXJh dG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOworCUpzb25iVmFsdWUJ dmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNlIE9ialR5cGVOdWxs OgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVt X3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCXZh bC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVj dC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+dmFsdWUu c3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlwZSA9IGpidk51bWVy aWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdldE51bWVyaWMo RGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52 YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2YWwudHlwZSA9IGpi dk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1bUdldE51 bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlv YmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90 b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29sOgorCQkJdmFsLnR5 cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52YWx1ZS5ib29sZWFu OworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgb2Jq ZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0cmVlX3RvX2pzb25i X3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP YmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwg TlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkpCisJCQl7CisJCQkJ T2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJb2JqdHJlZV90b19qc29uYl9l bGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmplY3QtPm9ianR5 cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBlciBmb3Igb2Jq dHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19qc29u Yl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlzdF9p dGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5V TEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJlZSk7CisKKwlz bGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVtCSpvYmplY3Qg PSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlKc29uYlZhbHVl CWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJp bmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUpOworCQlrZXku dmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBhY2NvcmRpbmcg dG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBvYmplY3Qs IFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VO RF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxF L0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIG9yIGRv bWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVtIHRvCisgKiB0 aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0dXJuZWQuCisg KgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxlcywgYW5kIGRv bWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25zdHJhaW50cyBh cmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNvbnN0cmFpbnRz KExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQoreworCVJlbGF0 aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFw VHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyogT25seSBvbmUgbWF5IGJlIHZh bGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1ZhbGlkKGRvbWFp bklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBhbGwgY29uc3Ry YWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLworCWNvblJlbCA9 IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaWYg KE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlB bnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElk LAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJeworCQlBc3Nl cnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVt X3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9P SURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOworCQlzY2FuID0gc3lzdGFi bGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0 cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGNvbnN0cmFpbnQs IGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMuICBJbgorCSAqIHRoZXNl IG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBpbmZvcm1hdGlvbiAoImZt dCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhlIHR5 cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nlc3NpbmcuCisJICovCisJ d2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkK Kwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQljaGFyCSAgICpjb250eXBl OworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QodHVwbGUp OworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJeworCQkJY2FzZSBDT05TVFJB SU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJyZWFrOworCQkJY2FzZSBD T05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBoZXJlICovCisJCQljYXNl IENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQli cmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUi OworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9 ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJ CQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQll bG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoK KwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUg b3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1 aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFp bnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0 IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29i anRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQk0 LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJCQkJCQkJ ImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFtZSIsIE9ialR5 cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJCSJkZWZpbml0 aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1h bmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVu dHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4o c2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmluaXRpb24sIHNwbGl0 IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1vdW50IG9mIGNvZGUgaXMgZHVw bGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBidXQKKyAqIGNvbnRyb2wgZmxv dyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIGtlZXBpbmcg dGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19nZXRfaW5kZXhkZWZfZGV0 YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJIGNo YXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJIGNoYXIg Kip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSkKK3sKKwlIZWFwVHVwbGUJ aHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1cGxlCWh0X2FtOworCUZvcm1f cGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVscmVjOworCUZvcm1fcGdfYW0J YW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlMaXN0CSAgICppbmRleHByczsK KwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAqY29udGV4dDsKKwlPaWQJCQlp bmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29sbERhdHVtOworCURhdHVtCQlp bmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsKKwlib29sCQlpc251bGw7CisJ b2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWludDJ2 ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZpbml0aW9uQnVmOworCisJLyoK KwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0aGUgaW5kZXgKKwkg Ki8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2JqZWN0SWRHZXREYXR1 bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGluZGV4cmVsaWQpOwor CWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4KTsKKworCWluZHJlbGlk ID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9PSBpZHhyZWMtPmluZGV4 cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRjbGFzcywgYW5kIGluZG9w dGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5E RVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGNvbGxhdGlvbiwg JmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlvbiA9IChvaWR2ZWN0b3Ig KikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRjbGFzc0RhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhf aW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjbGFzcyA9IChvaWR2 ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOworCisJaW5kb3B0aW9uRGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJIEFudW1f cGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kb3B0 aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9wdGlvbkRhdHVtKTsKKwor CS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRleCByZWxhdGlvbgor CSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0 dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhyZWwpKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLCBpbmRleHJl bGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGh0X2lkeHJlbCk7 CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgnIGFjY2VzcyBt ZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXRE YXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2FtKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUi LAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVD VChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMsIGlmIGFueS4g IChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25zIG9mIHRoZSBl eHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheQorCSAq IG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVhcF9hdHRpc251 bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJCURhdHVtCQll eHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJ CWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJ CQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7 CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0RhdHVtKTsKKwkJaW5k ZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCQlwZnJlZShleHBy c1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlpbmRleHByX2l0ZW0g PSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3Io Z2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0cmluZ0luZm8oJmRl ZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmluZGV4X2FtID0gcHN0 cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkpKTsKKworCS8qIEZl dGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUgPSBHZXRJbmRleEFt Um91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0IGluZGV4IGRlZmlu aXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGllZCBieQorCSAqIGNh bGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBr ZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNb a2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJ CQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9pZAkJCWluZGNvbGw7 CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5k ZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1v ZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsK KwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZp ZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0s CisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNv bGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXgg Ki8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5k ZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBp bmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0 ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisJ CQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXksIGNv bnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEg YmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBG dW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBD T0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0 aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25C dWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsK KwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisKKwkJ LyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBpbmRjb2xs YXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2Vu ZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRv ciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFtZShpbmRj bGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJCS8q IEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3JkZXIp CisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBERVNDIGFu ZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7CisJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJLyog TlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYgKCEob3B0 ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ aWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisKKwkJLyog WFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLwor CX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91dHB1dCByZWxv cHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxpZCk7 CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOworCisJCXRi bHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElzVmFsaWQo dGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKGdldF90 YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFjZSA9IE5VTEw7 CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFw X2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlO b2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlpc251bGw7CisJCWNo YXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRy ZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwK KwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNu dWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJ bm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0 cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVwYXJzZV9l eHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJKndo ZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hlKGh0 X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0 X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBmb3Ig dGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11c3Qg aGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIgKgor UmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywg TGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlOb2RlICpkZWZ2YWw7 CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBh dHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0LCBm YWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVw bGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFwcGVu ZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0YWlu IHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRh YmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9pZCBy ZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJ aXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJF TE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkgcmVsaWQpOwor CisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJCQkg QW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRlcGFy c2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0cmlu Z0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJCQkJ ICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZ2l2ZW4gb2Jq ZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0cmluZ2lm eV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJewor CQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2Ug T0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJ CQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAi Q09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVS U0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJ CWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1Rf RVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNU X0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgor CQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05f U0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxF OgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJ CQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklO REVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJ Y2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNh c2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2Fz ZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9C SkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZB TUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZ OgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJS T0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JK RUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6 CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlyZXR1cm4g IlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAiVEFCTEVTUEFD RSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIiOworCQljYXNl IE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VS QVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgorCQkJcmV0dXJu ICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLworCQljYXNlIE9CSkVD VF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkiOworCQlj YXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggUEFSU0VSIjsKKwkJ Y2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggVEVNUExBVEUi OworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1Rf VVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQljYXNlIE9CSkVDVF9W SUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQorCisvKgorICogR2l2 ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0 LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0aGF0IHRoZXJlIGFy ZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFu Z2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQor eworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFS R19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFuZCA9IGRlcGFyc2Vf dXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJO X1RFWFRfUChDU3RyaW5nR2V0VGV4dERhdHVtKGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxM KCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5D VElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGFs dGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGdW5jdGlv bihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1bmN0aW9uU3RtdCAq bm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0 ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9w Z19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0CSAgICplbGVt cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBn X3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNUSU9OICV7c2lnbmF0 dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5DVElPTiBkb2VzIG5v dCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCSAqIHRvIGdldCBpbnB1 dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsg aSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1U IiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlwZSIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0x KSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5kX29iamVjdF9vYmpl Y3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBw ZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0JKmRlZmVsID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmogPSBOVUxMOwor CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcpLCAwKTsKKwkJfQor CQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQl7CisJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkg IlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwg SU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZWN1 cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZl bC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tF UiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9v ZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+ YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09GIiwgMCk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09IDApCisJCXsKKwkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJICJj b3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkgZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9 CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYgKGRlZkdldE51bWVy aWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIle3Jv d3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRT dG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIgKnZh bHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFy c2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIpID09IDApCisJCXsKKwkJ CU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIp OworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ug c2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0 IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGgu CisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9u YW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVz LAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05P TkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIp ID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9IHBzcHJpbnRmKCJQQVJBTExFTCAlcyIsIHN0clZh bChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZShmbXQpOworCQl9CisKKwkJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyRnVuYywgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVt cyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gYWx0ZXJGdW5jOwor fQorCisvKgorICogZGVwYXJzZSBhbiBBTFRFUiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mg b2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVj dFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwljaGFy CSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisJY2hhcgkgICAqbmV3c2NoZW1hOworCWNo YXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CisKKwluZXdzY2hlbWEgPSBub2Rl LT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiAl cyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisJICovCisJZm10ID0gcHNw cmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkpOwor CWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21t YW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkg KiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0 aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVw YXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBuYW1lIGhvd2V2ZXIs IHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUgaWRlbnRpdHkgc3RyaW5nCisJICog YW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRo aXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRlcj8KKwkgKi8KKwlpZGVudGl0eSA9 IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJb2xkc2NobmFtZSA9IGdldF9u YW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xkc2NobmFtZSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIs CisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBx dW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVv dGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJT dG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0 ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgbmV3c2NoZW1hKTsKKworCXJldHVy biBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChB TFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ SGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9w ZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyb3A7CisJRm9ybV9w Z19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxpc3QJCSAgICpsaXN0 ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1 cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiAl e2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAoJXtl bGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFU T1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRB UkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdIVEFS RyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBu b2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0 cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJq b2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRtcG9i aik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1zKSIs IGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJvcDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNv bW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZhbTsKKwlBbHRlck9w RmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsK KwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICps aXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1J TFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5kLm9w ZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VU U1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBP UEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AKKwkg KiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJTkcgJXthbW5hbWV9 SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFtZSIsIE9ialR5cGVT dHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgY21k LT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0 KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50 YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAl e3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi T1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Bl ci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNhc2Ug ZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ IG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+ cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBC WSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9wKQor CQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJCWVs c2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1wb2JqMiA9IG5ld19v Ymp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcGVyLT5z b3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3Nl fXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFt LnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsK KwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5D VElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCSAibnVtIiwg T2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwK KwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgZnVuY3Rpb24gbmFt ZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlm ICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdf cHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJn bGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVu ZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczos IH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisK KwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3Ap CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXND YWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg QWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNoYXIJCSAgICpmbXQ7 CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBPV05FUiBUTyAlJXtu ZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlKSk7 CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVz cywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ ICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJldHVybiBvd25lclN0 bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBh IHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXBvYmo7CisJUmVs YXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJ ICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBz ZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFT dG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJ ICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JF QVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8K KwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2Vx ZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxh dGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4o U2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJj aFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsK KworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKwor CWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAor CQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVh Y2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJCURl ZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0gKm5ld2Vs bTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf U2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5k ZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3duZWRC eShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJT ZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJUeXBl U3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlm aWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBl LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3RtdCA9 IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7CisJTGlzdENlbGwg ICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCUZv cm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlw VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0 eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VUIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25zKQor CXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlPYmpF bGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2UiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJUeXBlLCB0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9U eXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX0lu KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBt b2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KGFsdGVy VHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVyVHlwZSwgdHlwRm9y bSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5cEZvcm0pOworCQll bHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZu YW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBwZW5k X2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cykiLCBlbGVtcyk7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5cGU7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFTKQorICoKKyAq IEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBv c2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21wb3NpdGU7CisJSGVh cFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBlcmVs OworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkv KiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlbGF0 aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmplY3RJZCk7CisJdHlw Zm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSByZWxh dGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBjb250 ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBlcmVs KSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJY29tcG9zaXRlID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwl0YWJs ZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwg ZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJ ICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNv bXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJdGFibGVfY2xv c2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVwKTsK KworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVw bGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24gY29u Rm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7CisKKwljb252cmVsID0gdGFibGVf b3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAgPSBn ZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9vaWQs IG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25UdXAp OworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7ZGVmYXVsdH1z IENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MCisJICog RlJPTSAle2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7 CisKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVj dChjY1N0bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3JtLT5jb25kZWZhdWx0ID8gIkRFRkFV TFQiIDogIiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZvcm0t PmNvbm5hbWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50aXR5fUQiLCB0bXBPYmopOworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3NvdXJjZX1MIiwgKGNoYXIgKikKKwkJ CQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSk7CisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0fUwiLCAoY2hhciAqKQorCQkJCQkJ IHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZykpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlvbn1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkg Y29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRW51 bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQg dGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ Q3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkp OworCisJdmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwl7CisJCVN0 cmluZyAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCXZhbHVlcyA9IGxh cHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCX0KKworCWFw cGVuZF9hcnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVlczosIH1MKSIsIHZh bHVlcyk7CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBU WVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpU cmVlCSAgICpyYW5nZTsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9 IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9w Z19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNjIHNj YW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9ybmd0 eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5n ZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJ cmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByYW5n ZSB3aXRoIHR5cGUgb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9y bV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBUWVBFIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmFuZ2Us ICIle2lkZW50aXR5fUQgQVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQRSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCSAg cmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRSA9 ICV7dHlwZX1EIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCWRlZmluaXRp b24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog U1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJvcGMp KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xhc3NS ZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpOworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLAorCQkJCQkJCSAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJCSAi b3BjbGFzcyIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRl ZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExBVElPTiAq LworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCSAgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi Q09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9ialR5 cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJc1Zh bGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3Jt LT5ybmdjYW5vbmljYWwpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0gJXtj YW5vbmljYWx9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsIHRtcCk7 CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9y bS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3ViZGlmZik7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlmZn1E IiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBl X2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJ ZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmluaXRpb246LCB9cyki LCBkZWZpbml0aW9uKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2Uo cGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdlOworfQorCisvKgor ICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5k IGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckVu dW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAg KmFsdGVyRW51bTsKKworCWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFIiwg MCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGFsdGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJbm9kZS0+c2tpcElm TmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyRW51bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5v ZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVu dW0sICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3VmFsSXNBZnRlciA/ ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0s ICIle25laWdoYm91cn1MIiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UK Kwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAle3Zh bHVlfUwgVE8iLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlckVudW0sICIle25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOworCX0K KworCXJldHVybiBhbHRlckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RT dG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2Rl ID0gKENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhl YXBUdXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpj cmVhdGVDYXN0OworCWNoYXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihD YXN0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChG b3JtX3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9 VCkgJXttZWNoYW5pc219cyAle2NvbnRleHR9cworCSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIs CisJCQkJCQkJCTIsICJzb3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdl dHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0 Rm9ybS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOwor CWVsc2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7 CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1 cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlm dW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJ CWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRT dHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJ CQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0t PnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1l KSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFs aWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBG VU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9i alR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNh c3QsICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1 cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9J TVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2Ug Q09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQli cmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAl YyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1z IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIGNyZWF0ZUNhc3Q7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVj dGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisg KiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFi bGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxl U3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0 CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7 CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVs dHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKwor CUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCisJcmVsID0gcmVsYXRpb25f b3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNv bnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCks CisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+ cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFr OworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRF WDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVX OgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9T SVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlH TiBUQUJMRSI7CisJCQlicmVhazsKKworCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVk IHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtp bmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMK KwkgKi8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRh YmxlU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJs ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQu YWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xs ZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9 IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOwor CisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJj bWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRD b2x1bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBz b21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJ CQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJ CQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRz dHIgPSBwc3ByaW50ZigiQUREICVzICUle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBl ID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo Zm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4i LAorCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5k ZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lk ID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJ CQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQURE IENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJ CQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJ CSAqLworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1l fUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWlu dCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2Nv bnN0cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICIle2NvbnN0cmFpbnRfdHlwZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJ CQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJ CSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtkZWZlcnJhYmxlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJ CQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle2luaXRfZGVmZXJyZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQg PworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRF Iik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9S ZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVw bGFjZVJlbE9wdGlvbnM6CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0 aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk Q29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0 byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJ CQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAi Y29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQor CQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsK KwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWRwY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQlS ZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHRO YW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAo KEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkg UmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sIGRwY29udGV4dCwgTlVMTCkpOwor CQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lv bjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg RFJPUCBFWFBSRVNTSU9OIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4 aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJ CQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5h bWUpCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJ CQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAi c3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2Vy ICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9 biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBz dWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJ CQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0 aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgK KwkJCQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJ CQkJCQkJCSAzLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVz c2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwK KwkJCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Ryb3BDb2x1bW5SZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZt dHN0ciA9IHBzcHJpbnRmKCJEUk9QICVzICUle2NvbHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUg PyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShm bXRzdHIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4i LAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+ YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9u CWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOwor CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9 IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJh aW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShp ZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJ CQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5p dGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJ CQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2Nv bnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0 aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6 CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdo ZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJ CQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsK KwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0gIGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNt ZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJ CQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNv bnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJewor CQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhw cmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0 cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJp biwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNv bmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5k KGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFz ZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJ CQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQp LAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJ T2lkCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQg KmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJh aW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxp ZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJh aW50KSk7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwK KwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJ CQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25z dHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJIGMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJ CQkJCQkJCSAiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmlu aXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUi KTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJh aW50UmVjdXJzZToKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwK KwkJCQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2Fz ZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBD T05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRl ckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJ ICAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmpl Y3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJ CQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJv c2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlw ZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0 aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBl czogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRh dHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10 c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJ CQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAg YXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVl ZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAo T2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNv bGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChD b2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24p OworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5h bWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoy LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXtjb2xsYXRpb259cyIsIHRtcG9iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0 eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJewor CQkJCQkJLyoKKwkJCQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFs dGVyVGFibGVTdG10CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBz dG9yZWQgdGhlCisJCQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hp Y2ggd2UgY2FuIHVzZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9 IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJ CQl7CisJCQkJCQkJRGF0dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJ CQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJ CQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRl cGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJ ICAgQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRp b25HZXRSZWxpZChyZWwpKTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAi JXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJz ZWQpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3VzaW5nfXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBj b21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBl KQorCQkJCQl7CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJ CWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1 bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3Qg Kikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3Rl cjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVu TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFj Y2Vzc01ldGhvZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRI T0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRh YmxlU3BhY2U6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7 dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg dGFibGVzcGFjZSIsCisJCQkJCQkJCQkgInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJ CQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1 YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJ ICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkg InRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJ CSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkRJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg QUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dl ciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9FbmFibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAl e3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1 bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJ CQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVM RSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiYWRkIG9mIiwKKwkJCQkJCQkJCSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qg b2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2gg KCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJ CQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVh azsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJ CWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVf VkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21k LT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRl bnR9cyIsIHRtcG9iajIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJE SVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBU T0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNl X0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor I2VuZGlmCisJCQljYXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQVRUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJ CQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVs a2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25H ZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkg InBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkg c3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFj aFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0gg UEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJ CQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBB VF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJ CQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29s ZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMi LCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAor CQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJ CQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1l KTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlk KHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRp dHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVm RWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAq c2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOwor CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwK KwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJ CQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAq KSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOwor CisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50 aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0 dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxp ZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRy dWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRl bnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVm aW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBB VF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FS TklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21k LT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBv cnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICog ZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERM L0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVk IHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRv bid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNl IERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICog c3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJs ZXMgYWNjZXNzZWQKKwkJICogaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBv biB0aGUgc3Vic2NyaWJlci1zaWRlLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVu Y3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFC TEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIp KSk7CisKKwkJLyoKKwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQg dGhlcmUgaXMgbm8gdm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUo ZXhwcnMpOworCQlleHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5V TEw7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwg fXMiLCBzdWJjbWRzKTsKKworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1 YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENv bHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24u CisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFy ZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyBy b3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAo dGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwg Ym9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlP YmpUcmVlCSAgICp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0 aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsK KwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwli b29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0 ZWQgY29sdW1ucyB3aXRob3V0IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQu CisJICoKKwkgKiBYWFggbWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVz ZW50ID0gZmFsc2UiIG9yIHNvbWUgc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwp CisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxp ZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJ CWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNc IiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZv cm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0 eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAm dHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25v dF9udWxsfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVf VkEoIiV7bmFtZX1JICV7Y29sdHlwZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xu YW1lLAorCQkJCQkJCSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJl ZV9mb3JfdHlwZSh0eXBpZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lv bikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVj dCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChj b2x1bW4sICIle2NvbXByZXNzaW9ufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRy ZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2Jq VHJlZSAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisK KwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJ LyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUg dGhhdCB3ZSBjYW5ub3QgdHJ1c3QKKwkJICogcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwg YmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldCB3aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUg c3BlY2lmaWVkOyBhbmQgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFp bnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGljaXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3Jl LAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMg Y29sdW1uIHRvIGRldGVybWluZQorCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGlu Zy4KKwkJICogKEZvcnR1bmF0ZWx5LCBOT1QgTlVMTCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFi bGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdl IGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90 X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNv bGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJh aW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJf Tk9UTlVMTCkKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYm IGNvbGRlZi0+aXNfbm90X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51 bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxU Iik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisK KwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0t PmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UK KwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyog SURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJ YXR0bm8gPSBnZXRfYXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQg PSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJdG1w b2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwg aXNfYWx0ZXIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X2Nv bHVtbn1zIiwgdG1wb2JqKTsKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8K KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNv bGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQlj aGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxh dGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RP UkVEIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIl e2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0 dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENS RUFURSBUQUJMRSBPRiBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2Rl IHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4g dGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUg ZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0 dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVM TC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQg aXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1u RGVmICpjb2xkZWYpCit7CisJT2JqVHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBv Ymo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVw bGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsK KwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVs bDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFt ZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1 cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1u IFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJ YXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdl dF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5 cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5P VCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24K KwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRl Zi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRF UiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNv bGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWlu dCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9U TlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisK KwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFz ZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtu b3RfbnVsbH1zLgorCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRI IE9QVElPTlMiLCAyLAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJ CQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVs bCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIp OworCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRl ZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51 bSwKKwkJCQkJCQkJCQkgIGRwY29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbHVtbiwgIiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCS8qCisJICogR2VuZXJhdGVk IGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9u ZS4KKwkgKi8KKworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVs aWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY29s dW1uOworCU9ialRyZWUJICAgKmlkZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJl bGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFm b3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10 OworCWNoYXIJICAgKm9iamZtdDsKKworCWNvbHVtbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlm ICghT2lkSXNWYWxpZChzZXFyZWxpZCkpCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1u LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJcmV0dXJuIGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJf dGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIl e29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJ CW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5l d19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJ VFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxX QVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZB VUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVM VCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1z IiwgaWRlbnRvYmopOworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJ RCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVs aWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUp OworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmlu aXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0Nh Y2hlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwg YWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZh bHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0s IGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0 YXJ0KE5VTEwsIHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dO RUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KGNvbHVtbiwgIiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5k X2FycmF5X29iamVjdChjb2x1bW4sICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7 CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVt bjsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNt ZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwlPYmpUcmVlCSAgICpjb2xzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0g c3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKgorCSAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRp b25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBTRVQgIjsKKworCWNvbHNldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1 YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0Owor CisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVm RWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rf b2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KGNvbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5j dGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpT T04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpjcmVhdGVEb21haW47CisJT2JqVHJlZQkgICAqdG1w b2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkg ICAqY29uc3RyYWludHM7CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2Jq ZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7 dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJ ICovCisJY3JlYXRlRG9tYWluID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFT IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9t YWluLAorCQkJCQkJICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlw Rm9ybS0+dHlwYmFzZXR5cGUsIHR5cEZvcm0tPnR5cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0t PnR5cG5vdG51bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90 X251bGx9cyIsICJOT1QgTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3Jl YXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5D b25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMg PT0gTklMKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwg T2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl RG9tYWluLCAiJXtjb25zdHJhaW50c31zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkK Kwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0t PnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1E IiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7 Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwly ZXR1cm4gY3JlYXRlRG9tYWluOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9u U3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlCSAgICpjcmVhdGVGdW5jOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlE YXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlM aXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5J TDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxs ICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBs ZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsK KwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1 YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsK Kwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJv YyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQp OworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyog R2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNl YXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUg Zm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFu Z0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkg KiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3Bl IHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11 c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVs bCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmco dG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8K Kwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAg IEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwpOworCWlmIChpc251bGwpCisJCXByb2JpbiA9 IE5VTEw7CisJZWxzZQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1 bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDAp CisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMg JXtyZXR1cm5fdHlwZX1zCisJICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3Vh Z2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAl e2xlYWtwcm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9 cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwK KwkgKiAle3N5bWJvbH1MCisJICovCisJY3JlYXRlRnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIs CisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICog VG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBm cm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFs cyB0aGUgcGFyYW1ldGVyIGxpc3QgbGVuZ3RoLAorCSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1l dGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2Fy Z3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNo IGlzCisJICogYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhs aXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSAqIHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9s ZW5ndGgobm9kZS0+cGFyYW1ldGVycykgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlib29s CWlzbnVsbDsKKwkJRGF0dW0JYWxsdHlwZXM7CisJCURhdHVtICAqdmFsdWVzOworCQlib29sICAg Km51bGxzOworCQlpbnQJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQ Uk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMs ICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIk5VTEwgcHJvYWxsYXJn dHlwZXMsIGJ1dCBtb3JlIHBhcmFtZXRlcnMgdGhhbiBhcmdzIik7CisJCWRlY29uc3RydWN0X2Fy cmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3Qn LCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMg IT0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0 Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5v ZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJ ZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMp OyBpKyspCisJCQkgdHlwYXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ld OworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3 ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9uIGFzCisJICogYSBsaXN0IHNvIHRoYXQgd2Ug Y2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXND YWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJv YXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBG dW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0g bGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJ CWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFy YW1ldGVyIGluIHRoZSBwYXJzZXRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJy YXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBu b2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0 aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisJ CU9ialRyZWUJICAgKmRlZmF1bHR2YWw7CisJCU9ialRyZWUJICAgKm5hbWU7CisKKwkJLyoKKwkJ ICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIGVuZCBvZiBpbnB1dCBhcmd1bWVu dHM7IHRoZQorCQkgKiBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJu IHR5cGUuICBXZSBpZ25vcmUgdGhlbQorCQkgKiBoZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUg Y3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCBzbyB0aGF0CisJCSAqIHdlIGNhbiBlYXNpbHkg cHJvZHVjZSB0aGUgcmV0dXJuIHR5cGUgYmVsb3cuCisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUg PT0gRlVOQ19QQVJBTV9UQUJMRSkKKwkJeworCQkJdGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJy ZWFrOworCQl9CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXtt b2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQgJXtkZWZhdWx0fXMKKwkJICoKKwkJICogTm90ZSB0aGF0 ICV7bmFtZX1zIGlzIGEgc3RyaW5nIGhlcmUsIG5vdCBhbiBpZGVudGlmaWVyOyB0aGUgcmVhc29u CisJCSAqIGZvciB0aGlzIGlzIHRoYXQgYW4gYWJzZW50IHBhcmFtZXRlciBuYW1lIG11c3QgcHJv ZHVjZSBhbiBlbXB0eQorCQkgKiBzdHJpbmcsIG5vdCAiIiwgd2hpY2ggaXMgd2hhdCB3b3VsZCBo YXBwZW4gaWYgd2Ugd2VyZSB0byB1c2UKKwkJICogJXtuYW1lfUkgaGVyZS4gIFNvIHdlIGFkZCBh bm90aGVyIGxldmVsIG9mIGluZGlyZWN0aW9uIHRvIGFsbG93IHVzCisJCSAqIHRvIGluamVjdCBh ICJwcmVzZW50IiBwYXJhbWV0ZXIuCisJCSAqLworCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle21vZGV9cyIsCisJCQkJCQkJ IHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU4gPyAiSU4iIDoKKwkJCQkJCQkgcGFyYW0tPm1v ZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZV TkNfUEFSQU1fSU5PVVQgPyAiSU5PVVQiIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19Q QVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIgOgorCQkJCQkJCSAiSU4iKTsKKworCQkvKiBPcHRp b25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisKKwkJ bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7 bmFtZX1JIiwKKwkJCQkJCQkgcGFyYW0tPm5hbWUgPyBwYXJhbS0+bmFtZSA6ICJOVUxMIik7CisK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KG5hbWUsICJwcmVzZW50IiwKKwkJCQkJCSAgIHBhcmFtLT5u YW1lID8gdHJ1ZSA6IGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwg IiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxU Iik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIg KmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJn ZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsIGV4cHIpOwor CQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBw ZW5kX2Jvb2xfb2JqZWN0KGRlZmF1bHR2YWwsICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QocGFyYW1vYmosICIle2RlZmF1bHR9cyIsIGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9 IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCX0KKworCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIG9iamVjdElkKSk7CisKKwlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBv YmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJ TkRfUFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVGdW5jLCAiRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQor CQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJl fXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBBIHJldHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2Yg dHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNvbWVfdHlwZSwgb3IKKwkgKiBhIFRBQkxFKGxp c3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhlIHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3 IGEKKwkgKiB0YWJsZSBwYXJhbSBhYm92ZSB3aGlsZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlz dC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09IE5VTEwpCisJeworCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywg InBsYWluIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7c2V0b2Z9cyIsCisJ CQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0 CSAgICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2Jq VHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFi bGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJewor CQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJ CXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFy YW1vYmosICIle25hbWV9SSIsIHBhcmFtLT5uYW1lKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlw YXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBu ZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVj dCh0bXBvYmosICIoJXtyZXR0eXBlczosIH1zKSIsIHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNm dW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlJFVFVSTlMgJXty ZXR1cm5fdHlwZX1zIiwgdG1wb2JqKTsKKworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3Ry ZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsr KQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwK KwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmop OworCX0KKworCWlmICh0eXBlcykKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2Zv cl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMs ICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBvYmopOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlRnVuYywgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5n Rm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVGdW5jLCAiJXt3aW5kb3d9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9r aW5kID09IFBST0tJTkRfV0lORE9XID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle3ZvbGF0aWxpdHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5w cm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIg OgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8K KwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRBQkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlRnVuYywgIiV7cGFyYWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+ cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZF IiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklD VEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIp OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2xlYWtwcm9vZn1zIiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtzdHJpY3R9cyIsCisJCQkJCQkJIHBy b2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBV VCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZWN1cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSBwcm9j Rm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZ IElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtjb3N0 fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJ CQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkp OworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJv cm93cyA9PSAwKQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLCBw cm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIl e3Jvd3N9cyIsIHRtcG9iaik7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtu YW1lfXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9zdXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0 eXBlc1sxXTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1 bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3Vw IGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElO VEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAor CQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwK KwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEws CisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlRnVuYywgIiV7c3VwcG9ydH1zIiwgdG1wb2JqKTsKKwl9CisKKwlmb3Jl YWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVt ICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCWlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNz dG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBF eHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5j dGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBw ZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFwcGVuZF9h cnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkv KiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRy KFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlp ZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJ U3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9m dW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAo cHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi QVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJeworCQlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4p OworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291 cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hl KHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJ CW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUg ICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9y bTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRy ZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlv cGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY29pZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsIG9wY29pZCk7CisJb3BjRm9y bSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJb3BmVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb3BjRm9ybS0+b3BjZmFtaWx5KTsK KwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRl bnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworCSAqICV7YW1uYW1l fUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworCSAqLworCisJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BjRm9y bS0+b3BjbmFtZSkpKTsKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRf c3RyaW5nX29iamVjdChzdG10LCAiJXtkZWZhdWx0fXMiLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2Rl ZmF1bHQgPyAiREVGQVVMVCIgOiAiIik7CisKKwkvKiBBZGQgdGhlIEZPUiBUWVBFIGNsYXVzZSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJGT1IgVFlQRSAle3R5cGV9VCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSkpOworCisJLyog QWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChzdG10LCAiVVNJ TkcgJXthbW5hbWV9SSIsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoK KwkgKiBBZGQgdGhlIEZBTUlMWSBjbGF1c2U7IGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBh bmQgbmFtZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8g ZW1wdHksIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhlIG9wZmFt aWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJICovCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkZBTUlMWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJICJvcGZhbWlseSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSkpOworCisJaWYg KHN0cmNtcChOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9wY0Zvcm0tPm9wY25h bWUpKSA9PSAwICYmCisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNGb3JtLT5vcGNuYW1l c3BhY2UpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7b3BmYW1pbHl9cyIsICB0bXBvYmopOwor CisJLyoKKwkgKiBBZGQgdGhlIGluaXRpYWwgaXRlbSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRk IHRoZSBTVE9SQUdFIGNsYXVzZSwgZXZlbgorCSAqIHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhl IG9yaWdpbmFsIGNvbW1hbmQuCisJICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlNUT1JBR0Ui KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3Bja2V5dHlwZSAhPSBJbnZhbGlkT2lkID8KKwkJ CQkJCQkJCQkJICBvcGNGb3JtLT5vcGNrZXl0eXBlIDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJ CQkJCQkJCQkgIC0xKSk7CisJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIG9wZXJhdG9ycyAqLworCWZvcmVhY2goY2Vs bCwgY21kLT5kLmNyZWF0ZW9wYy5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3Bl ciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7 cnR5cGV9VCkiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIG9w ZXItPm51bWJlciwKKwkJCQkJCQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIG9wZXItPm9iamVjdCksCisJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSJy dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+ cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBC WSBjbGF1c2UgKi8KKwkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsK KwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQl0bXBvYmoyID0gbmV3 X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiLCAwKTsKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ IG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBv cnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVy ZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJl ZQkgICAqdG1wb2JqOworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2NG b3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsK KwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVj dElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j VHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUg JXUiLCBwcm9jLT5vYmplY3QpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChwcm9jVHVwKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19 biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7ZnVuY3Rpb259RCIsCisJCQkJCQkJIDQsCisJCQkJ CQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVyLAorCQkJCQkJCSAibHR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0 dHlwZSwgLTEpLAorCQkJCQkJCSAicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSwKKwkJCQkJCQkgImZ1bmN0aW9u IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NG b3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9u YW1lKSkpOworCisJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsK KwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpU cmVlCSAgICphcmc7CisKKwkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVz W2ldLCAtMSk7CisJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVj dChhcmcpKTsKKwkJfQorCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICJBUyAle2l0ZW1zOiwg fXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCVJlbGVhc2VTeXNDYWNo ZShvcGNUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl VHJpZ1N0bXQgKENSRUFURSBPUEVSQVRPUiBGQU1JTFkpCisgKgorICogR2l2ZW4gYSB0cmlnZ2Vy IE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVl CisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUhlYXBUdXBsZSAgIGFtVHVwOworCUZvcm1f cGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtICBhbUZvcm07CisJT2JqVHJlZQkgICAq Y29wZlN0bXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdF VFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVj dElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBt ZXRob2QgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwljb3BmU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwKKwkJCQkJ CQkgIDIsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkgICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkgICJhbW5hbWUiLCBPYmpU eXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo YW1UdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJcmV0dXJuIGNvcGZTdG10Owor fQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUG9saWN5U3RtdCAqbm9kZSA9IChDcmVh dGVQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xp Y3kgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJ CQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8q IGFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocG9saWN5 LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwKKwkJCQkJICAgISFub2RlLT53 aXRoX2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQ T0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICov CisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5v ZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5 OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisgKgorICogR2l2ZW4g YSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10ICpub2RlID0gKENyZWF0ZVNj aGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCQkgKmNyZWF0ZVNjaGVtYTsKKwlPYmpU cmVlCQkJICphdXRoOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRF IFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cworCSAq LworCWNyZWF0ZVNjaGVtYSA9IG5ld19vYmp0cmVlKCJDUkVBVEUgU0NIRU1BIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJ CQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7bmFtZX1JIiwgbm9kZS0+c2NoZW1hbmFt ZSk7CisKKwlhdXRoID0gbmV3X29ianRyZWUoIkFVVEhPUklaQVRJT04iKTsKKwlpZiAobm9kZS0+ YXV0aHJvbGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25f cm9sZX1JIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xl fUkgIik7CisJCWFwcGVuZF9ib29sX29iamVjdChhdXRoLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXthdXRob3JpemF0aW9ufXMi LCBhdXRoKTsKKworCXJldHVybiBjcmVhdGVTY2hlbWE7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhl IGRlZmF1bHQgdmFsdWUgb2YgYSBkb21haW4uCisgKi8KK3N0YXRpYyBjaGFyICoKK0RvbWFpbkdl dERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1cCkKK3sKKwlEYXR1bQlkZWY7CisJTm9kZSAgICpkZWZ2 YWw7CisJY2hhciAgICpkZWZzdHI7CisJYm9vbAlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNoZUdl dEF0dHIoVFlQRU9JRCwgZG9tVHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJCQkJ CQkgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIg ZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUiLAorCQkJIE5hbWVTdHIoKChGb3JtX3BnX3R5 cGUpIEdFVFNUUlVDVChkb21UdXApKS0+dHlwbmFtZSkpOworCWRlZnZhbCA9IHN0cmluZ1RvTm9k ZShUZXh0RGF0dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lv bihkZWZ2YWwsIE5VTEwgLyogZHBjb250ZXh0PyAqLywKKwkJCQkJCQkJCSAgIGZhbHNlLCBmYWxz ZSk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWlu U3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRvbWFpblN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQlPYmplY3RBZGRyZXNzIGNvbnN0cmFp bnRBZGRyKQoreworCUFsdGVyRG9tYWluU3RtdCAqbm9kZSA9IChBbHRlckRvbWFpblN0bXQgKikg cGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21UdXA7CisJRm9ybV9wZ190eXBlIGRvbUZvcm07CisJ T2JqVHJlZQkgICAqYWx0ZXJEb207CisJY2hhcgkgICAqZm10OworCWNvbnN0IGNoYXIgKnR5cGU7 CisKKwkvKiBBTFRFUiBET01BSU4gRFJPUCBDT05TVFJBSU5UIGlzIGhhbmRsZWQgYnkgdGhlIERS T1Agc3VwcG9ydCBjb2RlICovCisJaWYgKG5vZGUtPnN1YnR5cGUgPT0gJ1gnKQorCQlyZXR1cm4g TlVMTDsKKworCWRvbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRvbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlkb21G b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCk7CisKKwlzd2l0Y2ggKG5vZGUt PnN1YnR5cGUpCisJeworCQljYXNlICdUJzoKKwkJCS8qIFNFVCBERUZBVUxUIC8gRFJPUCBERUZB VUxUICovCisJCQlpZiAobm9kZS0+ZGVmID09IE5VTEwpCisJCQl7CisJCQkJZm10ID0gIkFMVEVS IERPTUFJTiI7CisJCQkJdHlwZSA9ICJkcm9wIGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIERST1AgREVGQVVMVCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAic2V0 IGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9t LCAiJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20s ICIle2RlZmF1bHR9cyIsIERvbWFpbkdldERlZmF1bHQoZG9tVHVwKSk7CisJCQl9CisKKwkJCWJy ZWFrOworCQljYXNlICdOJzoKKwkJCS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRF UiBET01BSU4iOworCQkJdHlwZSA9ICJkcm9wIG5vdCBudWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTCIs CisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFr OworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERP TUFJTiI7CisJCQl0eXBlID0gInNldCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQlj YXNlICdDJzoKKwkJCS8qIEFERCBDT05TVFJBSU5ULiAgT25seSBDSEVDSyBjb25zdHJhaW50cyBh cmUgc3VwcG9ydGVkIGJ5IGRvbWFpbnMgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJ dHlwZSA9ICJhZGQgY29uc3RyYWludCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZt dCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihk b21Gb3JtLT50eXBuYW1lKSkpOworCQkJLyogYSBuZXcgY29uc3RyYWludCBoYXMgYSBuYW1lIGFu ZCBkZWZpbml0aW9uICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIkFERCBD T05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRf bmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo YWx0ZXJEb20sICIle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJ CWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RSQUlOVCAqLworCQkJZm10ID0gIkFMVEVS IERPTUFJTiI7CisJCQl0eXBlID0gInZhbGlkYXRlIGNvbnN0cmFpbnQiOworCisJCQkvKgorCQkJ ICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmljIG9wdGlvbnMuIFZhbGlkYXRpb24gYSBjb25zdHJh aW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFtZS4KKwkJCSAqLworCQkJYWx0ZXJEb20gPSBuZXdf b2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGFsdGVyRG9tLCAiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwgbm9k ZS0+bmFtZSk7CisKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3VidHlwZSAlYyIsIG5vZGUtPnN1YnR5cGUpOworCX0KKworCS8qIGRvbmUgKi8KKwlSZWxl YXNlU3lzQ2FjaGUoZG9tVHVwKTsKKworCXJldHVybiBhbHRlckRvbTsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2Jq VHJlZQkqY3JlYXRlU2VxOworCU9ialRyZWUJKnRtcG9iajsKKwlSZWxhdGlvbglyZWxhdGlvbjsK KwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsK KwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlz ZXF0dXBsZTsKKwlDcmVhdGVTZXFTdG10ICpjcmVhdGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQg KikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91 dHB1dCBzZXBhcmF0ZWx5KHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJl dHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChjcmVhdGVTZXFTdG10LT5mb3JfaWRlbnRpdHkp CisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0 SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxv Y2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJ CSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo c2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVu Y2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkg R0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1ECisJICovCisJY3Jl YXRlU2VxID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlU2VxLCAiJXtwZXJzaXN0ZW5jZX1zIiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3Ry KHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSk7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJ CQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVNlcSwgIlNFUVVFTkNFICV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwkv KiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShjcmVhdGVTZXEs IHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9N aW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoY3JlYXRlU2VxLCBz ZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVz dGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3Qg ZW1pdCBPV05FRCBCWSBoZXJlICovCisJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTZXEsICIl e2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JF QVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpub2RlID0g KENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJ T2JqVHJlZQkqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJTGlzdAkgICAqbGlzdCA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lk ZW50aXR5fUQgW09GCisJICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRl bnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisJICogJXtpbmhlcml0c31zICV7cGFydGl0aW9u X2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisJICogJXtvbl9jb21taXR9 cyAle3RhYmxlc3BhY2V9cworCSAqLworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwZXJzaXN0ZW5jZX1z IiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNp c3RlbmNlKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiVEFCTEUiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIs CisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwor CXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxu YW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9i aik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsKKworCS8qCisJICogVHlwZWQg dGFibGVzIGFuZCBwYXJ0aXRpb25zIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3Ry aW5nOiB3ZQorCSAqIG11c3Qgbm90IHB1dCB0YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGly ZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsCisJICogYmVjYXVzZSBpZiB0aGVyZSBhcmUgbm8gb3B0 aW9ucyB0aGUgcGFyZW5zIG11c3Qgbm90IGJlIGVtaXR0ZWQ7IGFuZAorCSAqIGFsc28sIHR5cGVk IHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5v ZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QgICAgICAgKnRhYmxlZWx0 cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0 bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJl bnMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQgY2F1c2UgYQorCQkgKiBzeW50 YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVjdGlvbiBlbGVtZW50IGFuZCBz ZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cy4KKwkJICov CisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9m b3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsKKwkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICJPRiAle29mX3R5cGV9VCIsIHRtcG9iaik7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQlMaXN0ICAgICAqcGFyZW50czsKKwkJCU9iakVsZW0gICplbGVtOworCisJ CQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChP YmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFy ZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJU SVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFy ZW50X2lkZW50aXR5fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQorCisJ CXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVF bHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAgICAgIC8qIHR5cGVkIHRhYmxlICov CisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRz ID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisK KwkJaWYgKHRhYmxlZWx0cyA9PSBOSUwpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIi KTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9 CisJCWVsc2UKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIoJXtlbGVtZW50czosIH1zKSIs IDEsCisJCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7CisKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRt cG9iaik7CisJfQorCWVsc2UKKwl7CisJCUxpc3QgICAgICAgKnRhYmxlZWx0cyA9IE5JTDsKKwor CQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFy YXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1 bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJICovCisKKwkJLyoKKwkJICogUHJvY2VzcyB0YWJsZSBl bGVtZW50czogY29sdW1uIGRlZmluaXRpb25zIGFuZCBjb25zdHJhaW50cy4gIE9ubHkKKwkJICog dGhlIGNvbHVtbiBkZWZpbml0aW9ucyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgcGFyc2Ugbm9kZSBp dHNlbGYuICBUbworCQkgKiBnZXQgY29uc3RyYWludHMgd2UgcmVseSBvbiBwZ19jb25zdHJhaW50 LCBiZWNhdXNlIHRoZSBwYXJzZSBub2RlCisJCSAqIG1pZ2h0IGJlIG1pc3Npbmcgc29tZSB0aGlu Z3Mgc3VjaCBhcyB0aGUgbmFtZSBvZiB0aGUgY29uc3RyYWludHMuCisJCSAqLworCQl0YWJsZWVs dHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBj b250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsICAgICAvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJ CQkJCQkJCQkgIGZhbHNlKTsgICAgLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBv YnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlh cHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0bXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIs IHRhYmxlZWx0cyk7CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24u ICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRo ZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVh bGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5n IHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFy c2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBn cmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi SU5IRVJJVFMiKTsKKwkJaWYgKGxpc3RfbGVuZ3RoKG5vZGUtPmluaFJlbGF0aW9ucykgPiAwKQor CQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJz ZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7CisJfQorCisJdG1wb2JqID0gbmV3 X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAobm9kZS0+dGFibGVzcGFjZW5hbWUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIiwgbm9kZS0+dGFibGVz cGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle3Rh Ymxlc3BhY2V9SSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dGFibGVzcGFj ZX1zIiwgdG1wb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9j b21taXR9cyIsCisJCQkJCQkgIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+b25jb21taXQp KTsKKworCS8qIEZPUiBWQUxVRVMgY2xhdXNlICovCisJaWYgKG5vZGUtPnBhcnRib3VuZCkKKwl7 CisJCS8qCisJCSAqIEdldCBwZ19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFy dGJvdW5kIGluIHRoZQorCQkgKiBwYXJzZXRyZWUgZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2lu YWwgcGFydGJvdW5kIGV4cHJlc3Npb24KKwkJICogd2hpY2ggaGF2ZW4ndCBiZWVuIHRyYW5zZm9y bWVkLgorCQkgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0 aW9uX2JvdW5kfXMiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9iamVjdElk KSk7CisJfQorCisJLyogUEFSVElUSU9OIEJZIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJQQVJUSVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2RlZmluaXRpb259cyIsIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJZCkpOwor CWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2J5fXMiLCB0bXBv YmopOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlVTSU5H Iik7CisJaWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7 CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wb2JqKTsK KworCS8qIFdJVEggY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwor CWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRtcG9iajI7 CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXBvYmoy ID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmoyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFwcGVuZF9h cnJheV9vYmplY3QodG1wb2JqLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wb2JqKTsKKworCXJl bGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0 ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl LCBPYmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZpbmUgPSAo RGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqZGVmU3RtdCA9IE5VTEw7CisK Kwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJ ZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5kIik7CisJfQorCisJcmV0 dXJuIGRlZlN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9Q RVJBVE9SKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRf T3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxl ICAgb3ByVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZv cm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlzdG10ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcHJGb3Jt LT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlBST0NFRFVSRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInByb2NlZHVyZSIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJyaWdodGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJp Z2h0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQ09NTVVUQVRP UiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQo b3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVy fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0 ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAicmVzdHJpY3QiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisKKwkvKiBKT0lOICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkpPSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9p bikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisK KwkvKiBNRVJHRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+ b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CisJLyogSEFTSEVTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0t Pm9wcmNhbmhhc2gpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkK K3sKKwlIZWFwVHVwbGUgICB0eXBUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwljaGFyCSAgICpzdHI7CisJRGF0dW0JCWRmbHQ7CisJ Ym9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJLyogU2hvcnRjdXQgcHJvY2Vzc2luZyBmb3Ig c2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlzdG10 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3Jt LT50eXBuYW1lKSkpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVl KTsKKwkJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisJCXJldHVybiBzdG10OworCX0KKworCXN0 bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIodHlwRm9ybS0+ dHlwbmFtZSkpKTsKKwlhcHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVlKTsK KworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyog SU5QVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbnB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VU UFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAib3V0cHV0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVD RUlWRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2Rpbikp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBN T0RfT1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5h bHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlw Rm9ybS0+dHlwbGVuID09IC0xKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFM TEVOR1RIPVZBUklBQkxFIiwgMCk7CisJfQorCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9i alR5cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4pOworCX0KKworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUEFTU0VEQllWQUxVRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJQQVNTRURCWVZBTFVFIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInBhc3NlZGJ5dmFsdWUiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGJ5dmFs KQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFMSUdOTUVOVCAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTElHTk1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImFsaWdubWVudCIpOworCS8qIFhYWCBpdCdzIG9kZCB0byByZXBy ZXNlbnQgYWxpZ25tZW50IHdpdGggc2NoZW1hLXF1YWxpZmllZCB0eXBlIG5hbWVzICovCisJc3dp dGNoICh0eXBGb3JtLT50eXBhbGlnbikKKwl7CisJCWNhc2UgJ2QnOgorCQkJc3RyID0gInBnX2Nh dGFsb2cuZmxvYXQ4IjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCXN0ciA9ICJwZ19jYXRh bG9nLmludDQiOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cu aW50MiI7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5icGNo YXIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhbGln bm1lbnQgJWMiLCB0eXBGb3JtLT50eXBhbGlnbik7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7YWxpZ259cyIsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0iLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIpOworCXN3aXRjaCAodHlw Rm9ybS0+dHlwc3RvcmFnZSkKKwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJ CWJyZWFrOworCQljYXNlICdlJzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJ Y2FzZSAneCc6CisJCQlzdHIgPSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgor CQkJc3RyID0gIm1haW4iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi aW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0K KwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3N0b3JhZ2V9cyIsIHN0cik7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDQVRFR09SWSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09SWT0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiY2F0ZWdvcnkiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle2NhdGVnb3J5fXMiLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVn b3J5KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5 cEZvcm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5 cFR1cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVs bCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtkZWZhdWx0fXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRmbHQp KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxF TUVOVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwZWxlbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImVsZW0iLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUxJTUlURVIgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVMSU1JVEVSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJkZWxpbWl0ZXIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIl e2RlbGltfUwiLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDT0xM QVRBQkxFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElzVmFs aWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle2VsZW1zOiwgfXMpIiwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisv KgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7 CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJICAg KnJlbHNldDsKKwljaGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5 cGUgPT0gQVRfUmVzZXRSZWxPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJ CWZtdCA9ICJSRVNFVCAiOworCWVsc2UKKwkJZm10ID0gIlNFVCAiOworCisJcmVsc2V0ID0gbmV3 X29ianRyZWUoZm10KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJ eworCQlEZWZFbGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9IChE ZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlz X3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7 CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmVsc2V0LCAiKCV7 b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJlbHNldDsKK30KKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor CisKKworCisKKworCisKKworCisKKworCisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0 bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0 ZVRyaWdTdG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlv bglwZ190cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmln Rm9ybTsKKwlPYmpUcmVlCSAgICp0cmlnZ2VyOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJ CQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJp Z2dlciA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK Kwl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3Bn X3RyaWdnZXJfb2lkLCBvYmplY3RJZCk7CisJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBH RVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBD UkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czog T1IgfXMKKwkgKiBPTiAle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0 dHJzOiB9cworCSAqIEZPUiBFQUNIICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NF RFVSRSAle2Z1bmN0aW9ufXMKKwkgKi8KKwl0cmlnZ2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJ CQkJCSBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRf c3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiVFJJR0dFUiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1l KTsKKworCWlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYg KG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJBRlRFUiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWlu ZyA9PSBUUklHR0VSX1RZUEVfSU5TVEVBRCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dl ciwgIiV7dGltZX1zIiwgIklOU1RFQUQgT0YiKTsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAlZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgor CSAqIERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91 dHB1dCBpcyBhIGxpc3Q7CisJICogaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJp bmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3 aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwll dmVudHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJ CWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOwor CWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBw ZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZl bnRzICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywg bmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklH R0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJ CQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUJICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAg KmNlbGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5 IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJ CQkgKiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGlu Z3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJ CXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQi LCBPYmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+ Y29sdW1ucykKKwkJCXsKKwkJCQljaGFyICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwp KTsKKworCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUp KTsKKwkJCX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9 SSIsIGNvbHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmpl Y3QodXBkYXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtl dmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlk KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1w b2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdG b3JtLT50Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ ICB0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dl ciwgIiV7ZnJvbV90YWJsZX1zIiwgdG1wb2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUt PmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdf b2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVG RVJSRUQiKSk7CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0 dHJzOiB9cyIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBF QUNIICV7Zm9yX2VhY2h9cyIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5U Iik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2RlLT53 aGVuQ2xhdXNlKQorCXsKKwkJTm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOwor CQlib29sCQlpc251bGw7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3Bn X3RyaWdnZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZp c251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFs Iik7CisKKwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZh bHVlKSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJ CQkJCQkJIHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJ ICAgd2hlbkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRyaWdnZXIsICIle3doZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsK Kwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJ Ynl0ZWEgICp0Z2FyZ3M7CisJCWNoYXIgICAqYXJnc3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50 CQlmaW5keDsKKwkJaW50CQlsZW50Z2FyZ3M7CisJCWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBE YXR1bUdldEJ5dGVhUChmYXN0Z2V0YXR0cih0cmlnVHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3Ry aWdnZXJfdGdhcmdzLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAor CQkJCQkJCQkJCQkmaXNudWxsKSk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBOVUxMIHRnYXJncyIpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7 CisJCWxlbnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0 cjsKKwkJZm9yIChmaW5keCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJ c2l6ZV90CXRsZW47CisKKwkJCS8qIFZlcmlmeSB0aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBp cyBjb3JyZWN0ICovCisJCQl0bGVuID0gc3RybGVuKHApOworCQkJaWYgKHAgKyB0bGVuID49IGFy Z3N0ciArIGxlbnRnYXJncykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFy Z3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwg TmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSkpKTsKKworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QocCkpOworCisJCQlwICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJCS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRy aWdnZXIsICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFi bGVfY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2Vy OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENP TFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4u KSBjb250ZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVs ZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQpCit7CisJT2JqVHJlZQkgICAqc2V0OworCU9ialRyZWUJ ICAgKm9wdG5hbWU7CisKKwlzZXQgPSBuZXdfb2JqdHJlZSgiIik7CisJb3B0bmFtZSA9IG5ld19v Ymp0cmVlKCIiKTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7c2NoZW1hfUkuIiwgZWxlbS0+ZGVmbmFtZXNwYWNl KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCBlbGVtLT5k ZWZuYW1lKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNldCwgIiV7bGFiZWx9cyIsIG9wdG5h bWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qoc2V0LCAiID0g JXt2YWx1ZX1MIiwKKwkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJ CQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJu IHNldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAq LworY2hhciAqCitkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwg Y29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sK KwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCWNoYXIJCSAgICpp ZGVudGl0eSA9IChjaGFyICopIG9iamlkZW50aXR5OworCWNoYXIJCSAgICpmbXQ7CisJT2JqVHJl ZQkJKnN0bXQsICpzdG10MjsKKwlKc29uYgkJICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygm c3RyKTsKKworCWZtdCA9IHBzcHJpbnRmKCJEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0 eX1zIiwgb2JqZWN0dHlwZSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAib2Jq aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7CisJc3RtdDIgPSBuZXdfb2JqdHJl ZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkgICAicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhh dmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7 Y2FzY2FkZX1zIiwgc3RtdDIpOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOwor CWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElN QVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJz aW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9G dW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUp Cit7CisJT2JqVHJlZQkgICAqb2JqOworCisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7 CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwl9CisJZWxzZSBpZiAodmFsdWUg IT0gTlVMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwg MSwKKwkJCQkJCSAgICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOworCisJCS8qCisJ CSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQgaGVuY2UgbXVz dCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09wdGlvbkZsYWdz KG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv YmosICJUTyAle3NldF92YWx1ZX1zIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChvYmosICJUTyAle3NldF92YWx1ZX1MIiwgdmFsdWUpOworCX0KKwllbHNlCisJewor CQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2Jq LCAiJXtzZXRfbmFtZX1JIiwgbmFtZSk7CisJfQorCisJcmV0dXJuIG9iajsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gSW5kZXhTdG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhl IHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJlc3Bv bmRzIHRvIGEgY29uc3RyYWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmluZGV4U3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJUmVsYXRpb24JaWR4cmVsOwor CVJlbGF0aW9uCWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5p dGlvbjsKKwljaGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hh cgkgICAqd2hlcmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0 cmFpbnQpCisJeworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIg Y29uc3RyYWludHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVy ZS4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4o b2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4 cmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5k ZXhkZWZfZGV0YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24s ICZyZWxvcHRpb25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7 Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04KKwkgKiAle3RhYmxl fUQgVVNJTkcgJXtpbmRleF9hbX1zICgle2RlZmluaXRpb259cykgJXt3aXRofXMgJXt0YWJsZXNw YWNlfXMKKwkgKiAle3doZXJlX2NsYXVzZX1zCisJICovCisJaW5kZXhTdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXt1bmlx dWV9cyIsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8gIlVOSVFVRSIgOiAiIik7CisKKwlhcHBlbmRf Zm9ybWF0X3N0cmluZyhpbmRleFN0bXQsICJJTkRFWCIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoaW5kZXhTdG10LCAiJXtjb25jdXJyZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVu dCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhT dG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAi SUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQs ICIle25hbWV9SSIsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSk7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwK KwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSkpOworCisJYXBwZW5kX3N0 cmluZ19vYmplY3QoaW5kZXhTdG10LCAiVVNJTkcgJXtpbmRleF9hbX1zIiwgaW5kZXhfYW0pOwor CisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiKCV7ZGVmaW5pdGlvbn1zKSIsIGRl ZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJX SVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg Iigle29wdHN9cykiLCByZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3Rt dCwgIiV7d2l0aH1zIiwgdG1wb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9cyIsIHRhYmxlc3BhY2UpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCisJ LyogV0hFUkUgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYg KHdoZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3doZXJlfXMi LCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3doZXJl X2NsYXVzZX1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVM b2NrKTsKKwl0YWJsZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJu IGluZGV4U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4K KyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hIHF1YWxpZmllZCB0YWJs ZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBM aXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpw YXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNj YW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVu KEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElk LAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNW YWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZQkqcGFy ZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VU U1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJ cGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBPTiBDT01NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9u IG9wdGlvbikKK3sKKwlPYmpUcmVlCSAgICpvbmNvbW1pdDsKKworCW9uY29tbWl0ID0gbmV3X29i anRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1J VF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92 YWx1ZX1zIiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JP V1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVl fXMiLCAiREVMRVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VS VkVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlU X05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1 ZX1zIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qob25jb21taXQsICJwcmVzZW50IiwgZmFsc2Up OworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG9uY29tbWl0OworfQorCisvKgorICogRGVwYXJz ZSBhIFJlbmFtZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3Rt dChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10 ICpub2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnJlbmFtZVN0 bXQ7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKm9ianR5cGU7CisJUmVsYXRpb24J cmVsYXRpb247CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJF TkFNRSBjb21tYW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAq IG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0 aGUgY29tbWFuZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29u ZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBO b3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkg KiAoaXQgbWlnaHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3Qg cG9zc2libHkgaGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+ cmVuYW1lVHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRF WDoKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisKKwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRh eAorCQkJICoKKwkJCSAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFN RSBUTyAle25ld25hbWV9SQorCQkJICovCisJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+cmVuYW1lVHlwZSk7CisJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0 eXBlKTsKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CisJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5v ZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxu YW1lKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7 bmV3bmFtZX1JIiwKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2Uo cmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9Q T0xJQ1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBw b2xGb3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YQlrZXk7CisJ CQkJU3lzU2NhbkRlc2MJc2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9s aWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBB bnVtX3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAor CQkJCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4 dChzY2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIGFkZHJlc3Mub2JqZWN0 SWQpOworCQkJCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOwor CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kiLCAwKTsKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJ CQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle3BvbGljeW5hbWV9SSIsIG5vZGUtPnN1Ym5hbWUp OworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICJPTiAle2lkZW50aXR5fUQi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJIAkgbm9k ZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCQlyZWxhdGlvbl9j bG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCX0JCQkJCQkJCQkJCQkJCQkg IAorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9D T0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRp b24pOworCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBDb21wb3Np dGUgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUKKwkJ CSAqICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisJCQkgKgorCQkJICog Tm9ybWFsIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBS RU5BTUUKKwkJCSAqIENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorCQkJICovCisK KwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQl7CisJCQkJ cmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBUWVBFIik7CisJCQkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlv bi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQVRUUklCVVRFICUl e2NvbG5hbWV9SSIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9ianR5cGUgPSBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5yZWxhdGlvblR5cGUpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJB TFRFUiAlcyIsIG9ianR5cGUpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIp OworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLwor CQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQlub2Rl LT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5y ZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBDT0xVTU4gJSV7Y29sbmFt ZX1JIik7CisJCQl9CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsIGZtdHN0 ciwgbm9kZS0+c3VibmFtZSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAi VE8gJXtuZXduYW1lfUkiLCBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5 cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVT dG10LCAiJXtjYXNjYWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwg MSwKKwkJCQkJCQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5v ZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNU SU9OOgorCQkJeworCQkJCWNoYXIJKmlkZW50OworCQkJCUhlYXBUdXBsZSBwcm9jdHVwOworCQkJ CUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsKKworCQkJCUFz c2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlkZW50aXR5ID0g KChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJCQkJcHJvY3R1 cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXAp KQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1 IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3By b2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Ig b3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwK KwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShw cm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVu dGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElk LCB0cnVlKSk7CisKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9 cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShu b2RlLT5yZW5hbWVUeXBlKSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0 ciwgMiwKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJ CQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlS ZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwkJCQlGb3JtX3BnX29w Y2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hl bWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25hbWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJ Zm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0 aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENM QU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsK KworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKwor CQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsK KworCQkJCS8qIGRlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1 YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisKKwkJCQlyZW5h bWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9y bS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BjbmFtZSksCisJCQkJCQkJCQkJ CSJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlnZXRfYW1fbmFtZShv cGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUg ICBvcGZUdXA7CisJCQkJSGVhcFR1cGxlICAgYW1UdXA7CisJCQkJRm9ybV9wZ19vcGZhbWlseSBv cGZGb3JtOworCQkJCUZvcm1fcGdfYW0gIGFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsK KwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisJCQkJY2hh cgkgICAqZm10OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQg VVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJ ICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJb3BmVHVwID0g U2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVz cy5vYmplY3RJZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qo b3BmVHVwKTsKKworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdl dERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChh bVR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kICV1IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0g KEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29w eV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0 aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAm c2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJCQkJIG9wZm5hbWUpLAorCQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQkJTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkJ CSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNl U3lzQ2FjaGUoYW1UdXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJ YnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3 X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFt ZX1JIiwKKwkJCQkJCQkgICAxLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJ CQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJ CVJlbGF0aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihU cmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2Nh dGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRk cmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9w Z190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBS RU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkidHJpZ2dl cm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRncmVs aWQpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUp OworCisJCQkJcmVsYXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJ CX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCWNhc2UgT0JKRUNUX0NPTlZF UlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVw OworCQkJCVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlp c251bGw7CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVu dGl0eSA9IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisJCQkJY2hhcgkgICAqZm10c3Ry aW5nOworCisJCQkJLyogb2J0YWluIG9iamVjdCB0dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxh dGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAg PSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29p ZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCS8qIG9idGFpbiBu YW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVz cGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAs IEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAm aXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxM IG5hbWVzcGFjZSIpOworCisJCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJl bmFtZVR5cGUpOworCQkJCWZtdHN0cmluZyA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUp OworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0cmluZywKKwkJCQkJCQkJ CQkwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1E IiwKKwkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9i am5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChpZGVudGl0eSkpKSk7CisKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1J IiwKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9n LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUp OworCX0KKworCXJldHVybiByZW5hbWVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVy T2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJPYmpl Y3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyRGVwZW5kZVN0 bXQgPSBOVUxMOworCisKKwlpZiAobm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJ eworCQlSZWxhdGlvbiAgICAgICAgcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQlPYmpUcmVlICpxdWFsaWZpZWQ7CisKKwkJYWx0ZXJEZXBlbmRl U3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBJTkRFWCIpOworCisJCXF1YWxpZmllZCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGFsdGVyRGVwZW5kZVN0bXQsICIle2lkZW50aXR5fUQiLCBxdWFsaWZpZWQpOworCQlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtOT31zIiwKKwkJCQkJCSBub2RlLT5yZW1vdmUgPyAi Tk8iIDogIiIpOworCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyRGVwZW5kZVN0bXQsICJE RVBFTkRTIE9OIEVYVEVOU0lPTiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVu ZGVTdG10LCAiJXtuZXduYW1lfUkiLCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNl CisJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6 ICVkIiwKKwkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIGFsdGVyRGVw ZW5kZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlCSAgICpjYWNoZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10Owor CisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisK KwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNl CisJCWZtdCA9ICJDQUNIRSAle3ZhbHVlfXMiOworCisJY2FjaGUgPSBuZXdfb2JqdHJlZV9WQShm bXQsIDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJ ICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KGNhY2hlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9w dGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KQoreworCU9ialRyZWUJICAgKmN5Y2xlOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90 YWJsZSkKKwkJZm10ID0gIlNFVCAle25vfXMgQ1lDTEUiOworCWVsc2UKKwkJZm10ID0gIiV7bm99 cyBDWUNMRSI7CisKKwljeWNsZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICAgIm5vIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSAgIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKwlyZXR1cm4g bmV3X29iamVjdF9vYmplY3QoY3ljbGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVu Y2UgSU5DUkVNRU5UIEJZIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2Rl cGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmluY3JlbWVudGFsYnk7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkK KwkJZm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJ TkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1B VCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlpbmNyZW1lbnRhbGJ5ID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlcWluY3Jl bWVudCIsCisJCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KGluY3JlbWVudGFsYnkpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWF4dmFsdWU7 CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkK KwkJZm10ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1BWFZB TFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRh dGEtPnNlcW1heCk7CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJ ICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1heHZh bHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4K KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQor eworCU9ialRyZWUJICAgKm1pbnZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpm bXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1z IjsKKwllbHNlCisJCWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNw cmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCW1pbnZhbHVlID0gbmV3X29i anRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52 YWx1ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVy biBuZXdfb2JqZWN0X29iamVjdChtaW52YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBz ZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNl X1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZQkgICAqb3duZWRieSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVs OworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUg ICB0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9j bGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAor CQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9P SURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgm a2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJ CQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0g c3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOworCQlGb3JtX3Bn X2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0bXBvYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7 CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkv KiBPbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChk ZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAo ZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsK KwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25l cklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklk LCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQor CQkJY29udGludWU7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dO RUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcG9i aik7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBS ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29s dW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQg aXQgd29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFgg dGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEo Ik9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJ CQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChvd25lZGJ5KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJF U1RBUlQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFf UmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQor eworCU9ialRyZWUJICAgKnJlc3RhcnQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0g cHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0g bmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmlu ZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVl CSAgICpzdGFydHdpdGg7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlm IChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisJZWxz ZQorCQlmbXQgPSAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYo SU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJc3RhcnR3aXRoID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQi LAorCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHN0YXJ0d2l0aCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IFNUT1JBR0Ugb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9U eXBlX1N0b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlP YmpUcmVlCSAgICpzdG9yYWdlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisJ Y2hhcgkgICAqc3RyOworCisJc3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2Fz ZSAncCc6CisJCQlzdHIgPSAicGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3Ry ID0gImV4dGVybmFsIjsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRl ZCI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVj IiwgdHlwRm9ybS0+dHlwc3RvcmFnZSk7CisJfQorCisJdG1wc3RyID0gcHNwcmludGYoIiVzIiwg c3RyKTsKKworCWZtdCA9ICJTVE9SQUdFID0gJXt2YWx1ZX1zIjsKKworCXN0b3JhZ2UgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Rv cmFnZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3Qoc3RvcmFnZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0 eXBlIFJFQ0VJVkUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sK KwlPYmpUcmVlCSAgICpyZWNlaXZlOworCisJcmVjZWl2ZSA9IG5ld19vYmp0cmVlX1ZBKCJSRUNF SVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJ aWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJlY2VpdmUsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50 eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocmVjZWl2ZSwgInByZXNl bnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVjZWl2ZSk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5 cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICpzZW5kOworCisJc2VuZCA9IG5ld19vYmp0cmVl X1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHNlbmQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBz ZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qoc2VuZCwgInByZXNlbnQiLCBmYWxz ZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc2VuZCk7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9kaW47CisKKwl0eXBtb2RpbiA9IG5ld19v Ymp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kaW4sICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHR5cG1vZGluLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dCh0eXBtb2Rpbik7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBv cHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9k X091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJ ICAgKnR5cG1vZG91dDsKKworCXR5cG1vZG91dCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VU PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJ aWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodHlwbW9kb3V0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kb3V0LCAicHJl c2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQpOwor fQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBhbmFseXplOworCisJ dHlwYW5hbHl6ZSA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodHlwYW5hbHl6ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwYW5hbHl6ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5 cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwc3Vic2NyaXB0OworCisJdHlwc3Vic2NyaXB0ID0g bmV3X29ianRyZWVfVkEoIlNVQlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAic3Vic2NyaXB0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2Ny aXB0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0LCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodHlwc3Vic2NyaXB0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQpOworfQorCisvKgorICogSGFuZGxl IGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91 bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQg KmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJl ZQkgICAqY29tbWFuZDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlw YXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRk cmVzcy5vYmplY3RJZDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRo aW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFy c2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRv bWFpblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxl LnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVUcmlnU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9DcmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Rl ZmluZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5z ZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25T dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZVBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVQb2xpY3lT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0luZGV4U3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVy RnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUmVu YW1lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0RGVw ZW5kc1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPYmplY3RTY2hlbWFTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KGNtZC0+ZC5zaW1w bGUuYWRkcmVzcywKKwkJCQkJCQkJCQkJCQlwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJY21kLT5k LnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3du ZXJTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBs ZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0 b3JTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9BbHRlclR5cGVTZXRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ29tcG9zaXRl VHlwZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3Jl YXRlRW51bVN0bXQ6CS8qIENSRUFURSBUWVBFIEFTIEVOVU0gKi8KKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0NyZWF0ZUVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBUX0NyZWF0ZVJhbmdlU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9BbHRlckVudW1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf QWx0ZXJFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9DcmVhdGVDYXN0U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWNvbW1hbmQg PSBOVUxMOworCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2Ug Y29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCX0KKworCXJl dHVybiBjb21tYW5kOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxFIGRl cGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1u cyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGlu IHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0g Y2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9UYWJsZUVsZW1l bnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRl eHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpCit7CisJTGlzdAkgICAqZWxl bWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZUVsZW1l bnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZpcnN0KGxjKTsKKworCQlzd2l0 Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVtbkRlZjoKKwkJCQl7CisJCQkJ CU9ialRyZWUJICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVkID8KKwkJCQkJCWRlcGFyc2Vf Q29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCQkoQ29sdW1u RGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYocmVsYXRpb24sIGRwY29udGV4 dCwKKwkJCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJ CQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJeworCQkJCQkJ T2JqRWxlbQkqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVjdCh0cmVl KTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJCQkJfQor CQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFn KGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogV29ya2hv cnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2Vf dXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUp Cit7CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dAlv bGRjeHQ7CisJTWVtb3J5Q29udGV4dAl0bXBjeHQ7CisJT2JqVHJlZQkJICAgKnRyZWU7CisJY2hh cgkJICAgKmNvbW1hbmQ7CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKworCS8qCisJICogQWxsb2Nh dGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAg Y29udGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9y eSBoYW5kbGluZyBjb2RlOyBidXQgYWxsb2NhdGUKKwkgKiB0aGUgb3V0cHV0IFN0cmluZ0luZm8g YmVmb3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQg PSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAg ICJkZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJ CQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0 KTsKKworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52 b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiBpbiBvcmRlciB0byBvYnRhaW4gZGVw YXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsCisJICogd2Ug d2FudCBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFy ZSAicG9ydGFibGUiCisJICogdG8gZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9w YXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBl dGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBs YWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRP dmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+ c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVy cmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJp ZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlw ZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21t YW5kKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBk ZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJP cEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKKwkJCWJyZWFr OworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlT3BD bGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0KKworCVBvcE92 ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29uYiAqanNvbmI7CisK KwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21tYW5kID0gSnNvbmJUb0NT dHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKwl9CisJZWxz ZQorCQljb21tYW5kID0gTlVMTDsKKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2lu Y2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0 LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKKwor CXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNzgyZWIwNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNv bW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIs IGl0IGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50IGludG8KKyAqIHN0 cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRv cm5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNw ZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVj aWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50cyBhIGJvb2xl YW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9hYnNlbnQsCisJ dHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSBqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBh bmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJ IEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNv bnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5m byBidWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFy cmF5c2VwLAorCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQp Oworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpk ZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBh IEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBu YW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBl cnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0 dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitz dGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29u dGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJ SnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZQlyZXN1bHQ7CisKKwlrZXkudHlwZSA9 IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3Ry aW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNv bnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZh bHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpi dkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5 cGUgYm9vbGVhbiIsCisJCQkJCQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9v bGVhbiA/IHR2X3RydWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVz dWx0OworfQorCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJW YWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBl IG90aGVyIHRoYW4gamJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0 CisgKiBleGlzdCwgYW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndp c2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBm cmVzaGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMg bm90IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVy ICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGlu dCAqbGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNo YXIJICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90 IGFuIGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52 YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2 YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJ SkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2lu Z19vaykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxl bWVudCBcIiVzXCIgaW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBu c3RyZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlp ZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZh bHVlKTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihw dHIsZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJ CWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIi KSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2 ZW50X3RyaWdnZXJfZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50 IGluIHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3Zp ZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShK c29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVl CWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFy ICpzdGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFy dF9wdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBm YWxzZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBz dGFydF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lm aWVyOworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7 CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJ fQorCisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5 IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBm b3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmlu ZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpjcCA9PSAneycp CisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9EYXRhIGFycmF5 c2VwYnVmOworCQkJU3RyaW5nSW5mbwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmluZ0luZm8oJnBh cmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRF UihjcCwgZW5kX3B0cik7CisJCQlmb3IgKDsgY3AgPCBlbmRfcHRyOykKKwkJCXsKKwkJCQlpZiAo KmNwID09ICc6JykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvdW5kIGFycmF5IHNlcGFyYXRv ciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFtZSBpcyBub3cKKwkJCQkJICogY29tcGxldGUsIHN0YXJ0 IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4KKwkJCQkJICovCisJCQkJCWluaXRTdHJpbmdJbmZvKCZh cnJheXNlcGJ1Zik7CisJCQkJCWFwcGVuZFRvID0gJmFycmF5c2VwYnVmOworCQkJCQlpc19hcnJh eSA9IHRydWU7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJ CWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICgqY3AgPT0gJ30nKQorCQkJCXsKKwkJCQkJQURW QU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYXBwZW5kVG8sICpjcCk7CisJCQkJQURWQU5DRV9Q QVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCX0KKwkJCXBhcmFtID0gcGFyYnVmLmRhdGE7 CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJYXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5kYXRhOworCQl9 CisJCWlmIChwYXJhbSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygibWlzc2luZyBj b252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAo KmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1l OworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsK KwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRl cmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVu YW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJh dG9ybmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNO dW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9s ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygi aW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkv KgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXku dHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52 YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1 ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkg KiBFeHBhbmQgdGhlIGRhdGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3Ry aW5nSW5mby4KKwkJICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShi dWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxz ZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZp ZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBh IHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisg Ki8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVm LCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29u dmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwu c3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8q CisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZh bHVlIG11c3QgYmUgb2YgdHlwZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAi c2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJu YW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50 CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgor ICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0 IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIs IHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz LiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUo c3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgdHlwZSBuYW1l LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwlj aGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZQlp c19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hl bWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJ ICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhl IHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3Ig dHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkg KiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1l IHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJv bSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFp bmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAi c2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVu YW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwg dHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRj aCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7 CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJ CWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVt YSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmll cih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLwor CWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlf ZGVjb3IpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBu YW1lCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUg TlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsK KwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwg TlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0 cik7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBh cyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0 eXBlIG9iamVjdC4gIEluIHRoZSBsYXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBl bGVtZW50IHdoaWNoIHdpbGwKKyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0 aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0 IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0 dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInBy ZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAor ZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFs KQoreworCWlmIChqc29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFy eVN0cmluZ0luZm8oYnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29u dmFsLT52YWwuc3RyaW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2 QmluYXJ5KQorCXsKKwkJanNvbl90cml2YWx1ZQlwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5k X2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJ CQkJCQkgICJwcmVzZW50Iik7CisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFs c2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhl ciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLwor CQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRf Zm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UK KwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBq c29uIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhciAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hh ciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOworCWludCAgICAgICAgIGRxbmV4dGNoYXIgPSAw OworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZh bC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5v IFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cmNocihzdHIsICdcJycpID09 IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwgJ1xcJykgPT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVybjsKKwl9CisK KwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90ZSBkZWxpbWl0 ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5kYXRhKSAhPSBO VUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3VmZml4ZXNbZHFu ZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVvZihkcXN1ZmZp eGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0aGUgcXVvdGVk IGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEpOworCXBmcmVl KGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24g dmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9q c29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlj aGFyICpzdHJkYXR1bTsKKworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0 aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNv bnZhbC0+dmFsLm51bWVyaWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRh dHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSByb2xlIG5hbWUuICBJ ZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMgaXMgZXhw YW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xlIG5hbWUs CisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWpz b25fdHJpdmFsdWUJaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlzX3B1Ymxp YyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyICpyb2xlbmFtZTsKKworCQlyb2xl bmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJCWlmIChyb2xl bmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30KKworLyoKKyAq IEV4cGFuZCBvbmUganNvbiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvIGFjY29y ZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1lbnQgdHlwZSBp cyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRvZXNuJ3QgbWF0 Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAqCisgKiBS ZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1ZSB0byB0aGUg InByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1hdHRlZCBzdHJp bmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNvbmJfZWxlbWVu dChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252YWwsCisJCQkJ CQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlib29sIHJl c3VsdCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8q IElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29u dGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNr ID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICop IGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJ CWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252 YWwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFy YW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9pZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0 ZWROYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJUQgZWxlbWVudCBcIiVz XCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5k X2pzb252YWxfZG90dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjU3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNv bnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJpbmcgb3Igb2JqZWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAl ZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5k X2pzb252YWxfc3RyaW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNT dHJpbmdMaXRlcmFsOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IFNwZWNUeXBlbmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVUIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CWV4cGFuZF9qc29udmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNPcGVyYXRvcm5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUl TyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBTcGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJp YykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9y ICUlbiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5 cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFr OworCisJCWNhc2UgU3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkp CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUl UiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9 CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2 aW91czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVt ZW50cyBvZiBhIEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQK KyAqIFN0cmluZ0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJh dGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5k X2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZh bHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJ CQkJICAgY29uc3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNv bnRleHQ7CisJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICAqaXQ7 CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCVN0 cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQg c3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQp CisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOwor CQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2 aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3Fs ZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBh cmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRhOworCWlmICgh SnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJl bGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlpbml0U3Ry aW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoY29udGFpbmVy KTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0cnVlKSkgIT0g V0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJcmVzZXRTdHJp bmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KCZh cnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJCQlpZiAoIWZp cnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXApOworCisJCQkJ YXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJheWVsZW0ubGVu KTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZtdCkKKwkJZXJy b3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisKKy8qCisgKiBX b3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitjaGFyICoKK2Rk bF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURhdHVtCQlkOwor CUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZvKSBwYWxsb2Mw KHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVmKTsKKworCWQg PSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9zdHIp KTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwlleHBhbmRfZm10 X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5kYXRhOworfQor CisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhIEpTT04gb2Jq ZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBuYW1lZCAiZm10 IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJpbmcgbWF5IGNv bnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBhbgorICogZWxl bWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkgYSBjb252ZXJz aW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNpZmllci4gIFBv c3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhwYW5kIHRvIGEg bGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVkIGlkZW50 aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlmaWVyCisg KiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVyYXRvciBu YW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcgc2luZ2xl IHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3RpbmcpCisg KiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICogUgkJZXhwYW5k IGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQorICoKKyAq IFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNwZWNpZmlj YXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNhdGVzIHRo YXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUgc3BlY2lm aWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgorICotLS0t LS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hhcgkgICAq anNvbl9zdHI7CisKKwlqc29uX3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcoanNvbik7CisKKwlQ R19SRVRVUk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0RGF0dW0oZGRsX2RlcGFyc2VfanNvbl90b19z dHJpbmcoanNvbl9zdHIpKSk7Cit9CisKKy8qCisgKiBFcnJvciBjb250ZXh0IGNhbGxiYWNrIGZv ciBKU09OIGZvcm1hdCBzdHJpbmcgZXhwYW5zaW9uLgorICoKKyAqIFhYWDogaW5kaWNhdGUgd2hp Y2ggZWxlbWVudCB3ZSdyZSBleHBhbmRpbmcsIGlmIGFwcGxpY2FibGUuCisgKi8KK3N0YXRpYyB2 b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndo aWxlIGV4cGFuZGluZyBmb3JtYXQgc3RyaW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCA5OWM5ZjkxLi40MjA1ZGRhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNzX293bmVkX2J5KFJlbGF0 aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50aXR5KQogCQlyZWxhdGlv bl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJldHVybiBzZXF1ZW5jZSBw YXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNlX2RhdGEKK2dldF9zZXF1 ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAgICAgYnVmOworCVNlcVRh YmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBs ZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBy ZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2VxdWVuY2UgKi8KKwlpbml0 X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2NsYXNzX2Fj bGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NFTEVDVCB8IEFDTF9VUERB VEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCQkgZXJybXNnKCJw ZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90dXBsZShzZXFyZWwsICZi dWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihGb3JtRGF0YV9wZ19zZXF1 ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVvZihGb3JtRGF0YV9wZ19z ZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJcmVsYXRpb25f Y2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsKK30KIAogLyoKICAqIFJl dHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUgZm9ybSBjcmVhdGVkIGJ5 IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5 cGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDA2MGZkN2Uu LjZhZjIyNTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw3ICsyNyw2 IEBACiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hl LmgiCiAKLXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQz MiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwogCiAKIC8qCkBAIC0zNjcsNyArMzY2LDcgQEAgZm9y bWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCkKIC8qCiAg KiBBZGQgdHlwbW9kIGRlY29yYXRpb24gdG8gdGhlIGJhc2ljIHR5cGUgbmFtZQogICovCi1zdGF0 aWMgY2hhciAqCitjaGFyICoKIHByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMy IHR5cG1vZCwgT2lkIHR5cG1vZG91dCkKIHsKIAljaGFyCSAgICpyZXM7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jl Z3Byb2MuYwppbmRleCA2ZDRjMWMyLi42YjIzNmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcmVncHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMK QEAgLTQ0LDYgKzQ0LDggQEAKIHN0YXRpYyB2b2lkIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0 IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGlu dCAqbmFyZ3MsIE9pZCAqYXJndHlwZXMpOwogCitzdGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJl X2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmlu Z0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK ICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoKQEAgLTMzMiw2ICszMzQsMjkg QEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8q CisgKiBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJn cykiCisgKi8KK2NoYXIgKgorZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lk LCBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBs ZSAgIHByb2N0dXA7CisJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9 IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCWZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9y Y2VfcXVhbGlmeSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVm LmRhdGE7Cit9CisKKy8qCiAgKiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMg cHJvY2VkdXJlIE9JRCB0byAicHJvX25hbWUoYXJncykiCiAgKgogICogVGhpcyBleHBvcnRzIHRo ZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBvZiByZWdwcm9jZWR1cmVvdXQgZm9yIHVzZQpAQCAtMjA2 MCwzICsyMDg1LDMwIEBAIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywg Ym9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywKIAogCXBmcmVlKHJhd25hbWUpOwogfQorCisv KgorICogQXBwZW5kIHRoZSBwYXJlbnRoaXNlZCBhcmd1bWVudHMgb2YgdGhlIGdpdmVuIHBnX3By b2Mgcm93IGludG8gdGhlIG91dHB1dAorICogYnVmZmVyLiAgZm9yY2VfcXVhbGlmeSBpbmRpY2F0 ZXMgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNzIG9m IHZpc2liaWxpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50 ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBi b29sIGZvcmNlX3F1YWxpZnkpCit7CisJaW50CQkJaTsKKwlpbnQJCQluYXJncyA9IHByb2Nmb3Jt LT5wcm9uYXJnczsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3IgKGkg PSAwOyBpIDwgbmFyZ3M7IGkrKykKKwl7CisJCU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKworCQlpZiAoaSA+IDApCisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihidWYsICcsJyk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLAorCQkJCQkJ CSAgIGZvcmNlX3F1YWxpZnkgPworCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0 aGlzYXJndHlwZSkgOgorCQkJCQkJCSAgIGZvcm1hdF90eXBlX2JlKHRoaXNhcmd0eXBlKSk7CisJ fQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxl dXRpbHMuYwppbmRleCA5OTU5ZjY5Li5lZjM3ZTA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCkBAIC0zNTgsNyArMzU4LDYgQEAgc3RhdGljIGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVu dHMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJp bnRfdGFibGVfYXJncywgYm9vbCBwcmludF9kZWZhdWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9m dW5jdGlvbl9yZXR0eXBlKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0 aWMgdm9pZCBwcmludF9mdW5jdGlvbl90cmZ0eXBlcyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxl IHByb2N0dXApOwotc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZv IGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhk ZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJ IEJpdG1hcHNldCAqcmVsc191c2VkKTsKIHN0YXRpYyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVy eShkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgUXVlcnkgKnF1ZXJ5LApAQCAtNDg4LDIyICs0ODcs MTUgQEAgc3RhdGljIHZvaWQgZ2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5j dGlvbiAqcnRmdW5jLAogCQkJCQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0 YXRpYyB2b2lkIGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2Ft cGxlLAogCQkJCQkJCQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0 X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkg U3RyaW5nSW5mbyBidWYpOwogc3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpu b2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3Jp cHRzKFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwog c3RhdGljIGNoYXIgKmdldF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAq Z2VuZXJhdGVfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3Rh dGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1z dGF0aWMgY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3Ms Ci0JCQkJCQkJCQlMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wg aGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktp bmQgc3BlY2lhbF9leHBya2luZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFt ZShPaWQgb3BlcmlkLCBPaWQgYXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3Rf dG8oU3RyaW5nSW5mbyBidWYsIE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVh bGlmaWVkX3R5cGVfbmFtZShPaWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0 KGNoYXIgKnN0cik7Ci1zdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7 CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0 aW9ucyk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOwpA QCAtMTAyNSw2NSArMTAxNywxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdp ZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAgICpxdWFsOwotCQlj aGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJZGVwYXJzZV9uYW1l c3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5nZVRibEVudHJ5ICpu ZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hFTiAoIik7CisJCWNo YXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRD U3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRy aWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmln cmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9y IHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW9sZHJ0 ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRn cmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+cmVsbG9ja21v ZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIs IE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJh bCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmluRnJvbUNsID0g dHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJbmV3cnRlLT5y dGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxp ZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxsb2NrbW9kZSA9 IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklM KTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5sYXRlcmFsID0g ZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVl OwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQoJmRwbnMsIDAs IHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0 ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsKLQkJZHBucy5h cHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsK LQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1cCBjb250ZXh0 IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVmID0gJmJ1ZjsK LQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2lu ZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0 LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZM QUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7 Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQljb250ZXh0LnNw ZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBlbmRwYXJlbnRz ID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxzZSk7Ci0KLQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMjQsNiArMTA2Myw2NCBAQCBwZ19nZXRf dHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIGJ1Zi5k YXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmln Z2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KQoreworCVN0cmluZ0lu Zm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOworCWRlcGFyc2VfY29udGV4dCBjb250 ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwor CVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKyAg IHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7CisKKyAgIC8qIEJ1 aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworICAgb2xkcnRlID0g bWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJ T047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG9sZHJ0ZS0+cmVs a2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwp OworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKKyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9 IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAgIG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0 cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAgIG5ld3J0ZS0+ cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3Jl bGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG5ld3J0ZS0+YWxpYXMgPSBt YWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwor ICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdydGUtPmluaCA9IGZhbHNlOworICAg bmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJs ZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOworICAgZHBucy5ydGFibGUg PSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRwbnMuY3RlcyA9IE5JTDsKKyAgIHNl dF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisgICBzZXRfc2ltcGxlX2NvbHVtbl9u YW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNw YWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7CisgICBjb250ZXh0Lm5hbWVzcGFj ZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwor ICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNvbnRleHQudmFycHJlZml4ID0gdHJ1 ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwg UFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVOVDsKKyAgIGNvbnRleHQud3JhcENv bHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250ZXh0LmluZGVudExldmVsID0gUFJF VFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9O T05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisK KyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0tLS0tLQogICogcGdfZ2V0X2luZGV4 ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5kZXgKICAqCkBAIC0xODkwLDYgKzE4 ODcsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5 KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIHByZXR0eUZsYWdzLCB0 cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24gdGhhdCByZXBvcnRzIHRoZSBm dWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hhciAqCitwZ19nZXRfcGFydGtleWRl Zl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIo cmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2Ug dG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBAIC0yMTQyLDYg KzIxNDYsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiB9 CiAKIC8qCisgKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0aW9uIG9mIGEg Q09OU1RSQUlOVCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29t bWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFp bnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKworLyoKICAq IEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQURE IENPTlNUUkFJTlQgY29tbWFuZAogICovCiBjaGFyICoKQEAgLTM1MTEsNyArMzUyNCw3IEBAIHBn X2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9U RVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmlu dF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsK IAlpbnQJCQludW1hcmdzOwpAQCAtMTIwNTEsNyArMTIwNjQsNyBAQCBnZXRfdGFibGVzYW1wbGVf ZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZp b3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwot c3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1 YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTI0NDUsNyArMTI0NTgs NyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICog VGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVm aXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAog CQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAg IFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyODMxLDcgKzEyODQ0LDcgQEAg Z2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICog R2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMs IG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3Jl bG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAppbmRleCBiZTQ3NTgzLi4zZTdmMzY0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKQEAgLTExODk0LDQgKzExODk0LDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywg cHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMg PT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDIn LCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBzdHJp bmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAn dGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRs X2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBq c29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2Rk bF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2Fy Z3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcg fSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGQzOGMwZTIuLjRjYTg0YjIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCB4bF9z ZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hl Y2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7 CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIEZvcm1f cGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKTsKIAog ZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBD cmVhdGVTZXFTdG10ICpzdG10KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU2VxdWVuY2Uo UGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJz ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmRmNDcKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9I CisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5 LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21t YW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZGxfZGVwYXJzZV9q c29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2Nv bW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJ CQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCS8qIERETF9ERVBB UlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5Lmgg Yi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUxM2QuLmI1MzI5 NGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIv c3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiArNjIsNyBAQCB0eXBl ZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElkOwogCQkJ T2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJjbWRzOwog CQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRp bnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMjIxYzNlNi4uODEzZWFm ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBleHRlcm4gRGF0dW0g bnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZP Uk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5 cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBp ZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0 X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwog CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFy ICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4 dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5 cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcx Li4zZDY5YTYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRl ZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9w YXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgpAQCAtMjMsMTIgKzI0LDE2 IEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9z dHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1 bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3Ry aWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5v ZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlk ZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFy dGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBn X2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9w YXJ0Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAK IGV4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50 SWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9p ZCBjb25zdHJhaW50SWQpOwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpl eHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hv d2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIg KmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzQ1LDE2IEBAIGV4dGVybiBMaXN0ICpz ZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJ IEJpdG1hcHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25f bmFtZShPaWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lk IG9wY2xhc3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJv b2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJ CQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5n ZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRf b3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAg U3RyaW5nSW5mbyBidWYpOworZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVs aWQpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBz dGF0ZXh0aWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZv IGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGFkMTEyYy4uN2MyZmQ2NSAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MjMsNiArMTYyMyw5IEBAIE9TSW5mbwogT1NTTENp cGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQog T2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nl c3NQb3N0QWx0ZXIKQEAgLTMxOTAsNiArMzE5Myw3IEBAIGNvbG9ybWFwcmFuZ2UKIGNvbXBhcmVf Y29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQK K2NvbnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9kYXRhX3NvdXJj ZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoxLjguMy4xCgo= --000000000000cad9e105e7eec1fd Content-Type: application/octet-stream; name="v20-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v20-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7oul7d33 RnJvbSA1Y2IxNmRlOWQ0MGI3MGY3ODI2MTA0YzU2Mjg3NTMyM2I4NWI2YjhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNSBTZXAgMjAyMiAxMDoxMjozOCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIwIDQvNF0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWlj aGkgT3N1bWkKLS0tCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9u LnBsIHwgNDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NjUg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X2RkbF9yZXBsaWNhdGlvbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42 NmRjYjAxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbApAQCAtMCwwICsxLDQ2NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFJlZ3Jlc3Npb24gdGVzdHMg Zm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2YgRERMcworIwordXNlIHN0cmljdDsKK3VzZSB3YXJu aW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXIt PmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5z dGFydDsKKworbXkgJG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnc3Vic2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFt aW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJGRkbCA9 ICJDUkVBVEUgVEFCTEUgdGVzdF9yZXAoaWQgaW50IHByaW1hcnkga2V5LCBuYW1lIHZhcmNoYXIs IHZhbHVlIGludGVnZXIpOyI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAkZGRsKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDEsICdkYXRhMScsIDEpOyIpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICRkZGwpOworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIg PSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gbXlw dWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRl LCBkZGwnKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgU1VCU0NSSVBUSU9OIG15c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicg UFVCTElDQVRJT04gbXlwdWI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgc3luY2hyb25pemVkIHRoZSB0 YWJsZS4KKyMgVGhpcyBwcmV2ZW50cyBBTFRFUiBUQUJMRSBjb21tYW5kIGJlbG93IGZyb20gYmVp bmcgZXhlY3V0ZWQgZHVyaW5nIHRhYmxlIHN5bmNocm9uaXphdGlvbi4KKyRub2RlX3N1YnNjcmli ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICJTRUxFQ1QgQ09VTlQoMSkgPSAw IEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBzciBXSEVSRSBzci5zcnN1YnN0YXRlIE5PVCBJTiAo J3MnLCAncicpIEFORCBzci5zcnJlbGlkID0gJ3Rlc3RfcmVwJzo6cmVnY2xhc3MiCispOworCisj IFRlc3QgQUxURVIgVEFCTEUgQURECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUREIGM0IGludDsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDIs ICdkYXRhMicsIDIsIDIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworbXkgJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgYzQgPSAyOyIpOworaXMo JHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBBREQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgRFJPUAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIERST1AgYzQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF9yZXAgd2hlcmUgaWQgPSAyOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gdGVzdF9yZXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIERS T1AgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIHZhbHVlIFRZUEUgdmFyY2hhciIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMywgJ2RhdGEzJywgJzMnKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfcmVwIFdIRVJFIHZhbHVlID0gJzMnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gVFlQRSByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBoYXZlIHRoZSBk ZWZhdWx0IHZhbHVlIGFmdGVyIHRoZSBkaXJlY3QgaW5zZXJ0IHRvIHN1YnNjcmliZXIgbm9kZS4K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0 X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgU0VUIERFRkFVTFQgJ2ZvbyciKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg0LCAnZGF0YTQn KTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCB2YWx1ZSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNDsiKTsKK2lzKCRyZXN1bHQs ICdmb28nLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgU0VUIERFRkFVTFQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGRv bid0IGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgcHJldmlvdXNseSBkZWZpbmVkLgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVS IENPTFVNTiB2YWx1ZSBEUk9QIERFRkFVTFQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNSwgJ2RhdGE1Jyk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUg SVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKK2lzKCRyZXN1bHQsIHEodCks ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIERFRkFVTFQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMCisjIFJlbW92ZSB0aGUgZXhpc3Rpbmcg cmVjb3JkIHRoYXQgY29udGFpbnMgbnVsbCB2YWx1ZSBmaXJzdC4KK215ICgkc3Rkb3V0LCAkc3Rk ZXJyKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZS T00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIFNFVCBOT1QgTlVM TDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNiwgJ2RhdGE2Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBz dGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJy ID1+IC9FUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uIFwidmFsdWVcIiBvZiByZWxhdGlvbiBc InRlc3RfcmVwXCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWls ZWQgdG8gcmVwbGljYXRlIEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTCI7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIE5PVCBOVUxMCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgRFJPUCBO T1QgTlVMTDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyMgSW5zZXJ0IHNhbWUgZGF0YSB0aGF0IGhhcyBOVUxMIHZhbHVlLiBUaGlzIGZhaWxlZCBiZWZv cmUgYnV0IG5vdyBzaG91bGQgc3VjY2VlZC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA2OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgIkFMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgTk9UIE5VTEwgcmVwbGljYXRlZCIp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIFVOTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIFVOTE9HR0VEOycp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVF UyAoNywgJ2RhdGE3JywgJzcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNzsiKTsKK2lz KCRyZXN1bHQsIHFxKDApLCAnQUxURVIgdGVzdF9yZXAgU0VUIFVOTE9HR0VEIHJlcGxpY2F0ZWQn KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgTE9HR0VEOycpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAo OCwgJ2RhdGE4JywgJzgnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gODsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgU0VUIExPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBDUkVBVEUgVEFCTEUgYW5kIERNTCBjaGFuZ2VzCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoYSBpbnQsIGIgdmFyY2hhcik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSB0bXAgaXMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMgKDEsICdhJykiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg dmFsdWVzICgyLCAnYicpIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgyKSwgJ0RNTCBD aGFuZ2VzIHRvIHRtcCBhcmUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElO SEVSSVRTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcDIgKGMzIGludCkgSU5IRVJJVFMgKHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMiBWQUxVRVMgKDEsICdhJywgMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDInOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSU5IRVJJVFMgaXMgcmVwbGljYXRlZCcpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIHNvbWUgZGF0 YSB0byBpbmhlcml0ZWQgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMiIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIExJS0UKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wMyAoYzMgaW50LCBMSUtFIHRtcCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wMyBWQUxVRVMgKDEsIDEsICdhJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcDMnOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgTElLRSByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 bXAzOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnQgc29tZSBkYXRhIHRvIGEgdGFibGUg ZGVmaW5lZCB3aXRoIExJS0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wMyIpOworCisjIFRlc3QgRFJPUCBUQUJMRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwg cXEoMCksICdUQUJMRSB0bXAgaXMgZHJvcHBlZCcpOworCisjIFRlc3QgQ1JFQVRFIFVOTE9HR0VE IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFVO TE9HR0VEIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxl cyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFVOTE9HR0VEIFRBQkxFIGlzIHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ2luc2VydGluZyBkYXRhIHRvIHVubG9nZ2Vk IHRhYmxlIGlzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgZGF0YSB0 byBhIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBF WElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRlIGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZl IHRoZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlciBpbiBhZHZhbmNlLCBhbmQgaWYgd2Ugc3VjY2Vl ZAorIyBpbiByZXBsaWNhdGluZyBjaGFuZ2VzLikKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0 bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgKGNoZWNrIGlmIHdlIHNraXAgdG8gY3JlYXRl IGEgdGFibGUKKyMgd2hlbiB3ZSBoYXZlIHRoZSB0YWJsZSBvbiB0aGUgcHVibGlzaGVyLCBidXQg bm90IG9uIHRoZSBzdWJzY3JpYmVyLikKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQg aW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAobmFtZSB0ZXh0IENPTExBVEUgXCJDXCIpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJF IHRhYmxlX25hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKEMpLCAnQ1JFQVRFIFRBQkxF IHdpdGggY29sbGF0ZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRo IG5hbWVkIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgQ09OU1RSQUlOVCBcIm11c3QgYmUgYmlnZ2VyIHRo YW4gMTBcIiBDSEVDSyAoaWQgPiAxMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAor CQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7 Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IGNoZWNrIGNvbnN0cmFpbnQgIm11c3QgYmUgYmlnZ2VyIHRoYW4gMTAiLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgbmFtZWQgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIGNvbnN0cmFpbnRz LgorIyBOT1QgTlVMTCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgTk9UIE5VTEwpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG51bGwg dmFsdWUgaW4gY29sdW1uICJuYW1lIiBvZiByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBub3QtbnVs bCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgbm9uIG51bGwgY29u c3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTlVMTCBjb25zdHJhaW50Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50LCBuYW1lIHRleHQgTlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIG5hbWUgSVMgTlVMTCBGUk9NIHRtcDsiKTsK K2lzKCRyZXN1bHQsIHFxKHQpLCAiQ1JFQVRFIFRBQkxFIHdpdGggTlVMTCBjb25zdHJhaW50IHJl cGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRBQkxFIHRtcCIpOworCisjIENIRUNLIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIHByb2R1Y3RfYW1l IHRleHQsIHByaWNlIGludCBDSEVDSyAocHJpY2UgPiAwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJywgLTEwMCk7IiwKKwkJCQkJ ICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJ CSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9y IHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9wcmljZV9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBDSEVDSyBjb25zdHJhaW50IjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBERUZBVUxUCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50LCBuYW1lIHRleHQgREVGQVVMVCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IG5hbWUgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShmb28pLCAiQ1JFQVRFIFRBQkxFIHdp dGggZGVmYXVsdCB2YWx1ZSByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBVTklRVUUgY29uc3RyYWludAor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBVTklRVUUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMg dW5pcXVlIGNvbnN0cmFpbnQgInRtcF9pZF9rZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgY29uc3RyYWludCBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgUFJJTUFSWSBLRVkK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Jh cicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBwcmltYXJ5IGtleSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgRVhDTFVERQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSBjaXJjbGVzIChjIGNpcmNsZSwgRVhDTFVERSBVU0lORyBn aXN0IChjIFdJVEggJiYpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgn PCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJ CQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOwor JHN0ZGVyciA9fiAvRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVz aW9uIGNvbnN0cmFpbnQgImNpcmNsZXNfY19leGNsIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIEVYQ0xVREUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgY2lyY2xlcyIpOworCisjIFJFRkVSRU5DRVMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgcHJv ZHVjdCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gcHJvZHVjdCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJ TUFSWSBLRVksIHByb2R1Y3RfaWQgaW50IFJFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKSIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gb3JkZXJzIFZBTFVFUyAoMSwgMTApIiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgIm9yZGVycyIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3Ry YWludCAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBSRUZFUkVOQ0VTIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIG9yZGVycyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgcHJvZHVjdCIpOworCisjIERFRkVS UkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBkZWZlcnJhYmxl IGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUg dG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91 bGQgZmFpbCBmb3IgSU5JVElBTExZIElNTUVESUFURSh0aGUgZGVmYXVsdCkKKyRub2RlX3N1YnNj cmliZXItPnBzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlkID0g aWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRFIEZS T00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKyksIG9uX2Vycm9yX3N0b3AgPT4gMCwgc3Rk ZXJyID0+IFwkc3RkZXJyLCBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBERUZFUlJBQkxFIGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBOT1QgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBOT1Qg REVGRVJSQUJMRSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQg PSBpZCArIDE7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIg PT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9F UlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRt cF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIE5PVCBERUZFUlJBQkxFIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBERUZFUlJBQkxFIGFuZCBJTklUSUFMTFkgREVGRVJS RUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQsIG5h bWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hl Y2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUg YSB0ZXN0IHRoYXQgc2hvdWxkIHN1Y2NlZWQgZm9yIElOSVRJQUxMWSBERUZFUlJFRAorJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsK K0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSB3aXRoIHRhYmxlIGNvbnN0cmFpbnQKKyMgV2Ugd2lsbCBzZXQgdHdvIGNo ZWNrcyBhbmQgY29uZHVjdCB0d28gaW5zZXJ0cyB0aGF0IHNob3VsZCBmYWlsIHJlc3BlY3RpdmVs eS4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJM RSB0bXAgKHByaWNlIGludCwgZGlzY291bnRlZF9wcmljZSBpbnQsIENIRUNLIChkaXNjb3VudGVk X3ByaWNlID4gMCBBTkQgcHJpY2UgPiBkaXNjb3VudGVkX3ByaWNlKSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxMDAsIDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoZmlyc3QgY29uZGl0 aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICg1MCwgMTAwKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24g InRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKHNlY29uZCBjb25kaXRpb24pIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBXSVRIIHN0cm9yYWdl X3BhcmFtZXRlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDgwKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgcmVsbmFtZSA9ICd0bXAnOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4g MCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRv dXQpOworJHN0ZG91dCA9fiAve2ZpbGxmYWN0b3I9ODB9LworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgc3RvcmFnZSBvcHRpb24iOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgd2l0aCBzdG9yYWdlX3BhcmFtZXRlciByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgVEFCTEVTUEFDRSAoY3JlYXRpbmcgYSB0 YWJsZXNwYWNlIGlzIG5vdCByZXBsaWNhdGVkKQorIyBQcmVwYXJlIHRoZSBkaXJlY3RvcmllcyBm b3IgdGhlIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBmaXJzdC4KK215ICgkYmFzZWRpciwgJHRh Ymxlc3BhY2VfZGlyKTsKKworJGJhc2VkaXIgPSAkbm9kZV9wdWJsaXNoZXItPmJhc2VkaXI7Cisk dGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJsc3BjX3B1YiI7Citta2RpcigkdGFibGVzcGFj ZV9kaXIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRVNQQUNFIG15dGJsc3BjIExPQ0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworJGJhc2Vk aXIgPSAkbm9kZV9zdWJzY3JpYmVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRiYXNl ZGlyL3RibHNwY19zdWIiOworbWtkaXIgKCR0YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRVNQQUNFIG15dGJsc3BjIExP Q0FUSU9OICckdGFibGVzcGFjZV9kaXInOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBUQUJMRVNQQUNFIG15dGJs c3BjOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgVEFCTEVTUEFDRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUg VFlQRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBF IG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFnZSBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEs ICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBteXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBFTlVNIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteWVudW10eXBl IEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChzdGF0dXMgbXllbnVtdHlwZSk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ25ldycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShuZXcpLCAnQ1JFQVRFIFRBQkxFIE9G IHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVFlQRSBteWVudW10eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgUkFOR0UgVFlQRQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIGZsb2F0OF9y YW5nZSBBUyBSQU5HRSAoc3VidHlwZSA9IGZsb2F0OCwgc3VidHlwZV9kaWZmID0gZmxvYXQ4bWkp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHZhbCBm bG9hdDhfcmFuZ2UpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg Imluc2VydCBpbnRvIHRtcCB2YWx1ZXMoZmxvYXQ4X3JhbmdlKC0xMi4zNCwgJzEuMTExMTEzZTMn KSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKFstMTIuMzQsMTExMS4xMTNcKSksICdDUkVBVEUg VEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUWVBFIGZsb2F0OF9yYW5nZSIpOworCisjIFRlc3QgQ1JFQVRFIEJBU0Ug REFUQSBUWVBFIGFuZCB1c2UgaXQgaW4gdGFibGUgZGVmaW5pdGlvbgorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorQ1JFQVRFIFRZUEUgaW50NDI7CitDUkVBVEUgRlVO Q1RJT04gaW50NDJfaW4oY3N0cmluZykKKyAgIFJFVFVSTlMgaW50NDIKKyAgIEFTICdpbnQ0aW4n CisgICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX291dChpbnQ0MikKKyAgIFJFVFVSTlMgY3N0cmluZworICAgQVMgJ2ludDRvdXQnCisg ICBMQU5HVUFHRSBpbnRlcm5hbCBTVFJJQ1QgSU1NVVRBQkxFOworQ1JFQVRFIFRZUEUgaW50NDIg KAorICAgaW50ZXJuYWxsZW5ndGggPSA0LAorICAgaW5wdXQgPSBpbnQ0Ml9pbiwKKyAgIG91dHB1 dCA9IGludDQyX291dCwKKyAgIGFsaWdubWVudCA9IGludDQsCisgICBkZWZhdWx0ID0gNDIsCisg ICBwYXNzZWRieXZhbHVlCispOworQ1JFQVRFIFRBQkxFIHRtcCAoZjEgaW50NDIpOworSU5TRVJU IElOVE8gdG1wIERFRkFVTFQgVkFMVUVTOworIik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDQyKSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgaW50NDIgY2FzY2FkZSIpOworCitwYXNzICJEREwg cmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmliZXItPnN0b3A7Cisk bm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAKMS44LjMuMQoK --000000000000cad9e105e7eec1fd Content-Type: application/octet-stream; name="v20-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v20-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7oul7cw1 RnJvbSA4MGI0YjFiYzkxNjI2MTU5Y2I2YTkwZDA1MDg1ZGFjYTJjNDZjOWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNSBTZXAgMjAyMiAwOTo0MTo0NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djIwIDIvNF0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNh dGlvbiwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4g V2hpbGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0 cmlnZ2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dz IGl0LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRp bWUgb2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5k IHNlbmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBz dWJzY3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJp bmcKYW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5l d2x5IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFu Z2VzIG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8g bWFudWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04i LgoKVGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBh bmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0 aW9uLiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxF L0FMVEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRF UiBvYmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBh cnNlIHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwg bG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBX QUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJs ZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBl eGNlcHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4p IHRoYXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5 IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpO b3RlIHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxs IHVuZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcg ZXZlbnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0 YWJsZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQp IHN0b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRo YXQgaXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0 ZXIgdGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3Ag bWVzc2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5k cyBvdXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlk cyBtYXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBi ZWNhdXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVu ZCcgbWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFz IGl0IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZv ciB0aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVy aWZ5IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4g VG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8g dGhlIGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNv dWxkIGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMg d2VsbCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBm b3IgdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRh YmxlX3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQg Q09MVU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJz ZSB0aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFi bGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBh bmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNo ZWQuIFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRl IElOU0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0 aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNv bnNpc3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBt dXN0IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJs ZSB0byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMg d2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0 ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJz Y3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApk b2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8g bGV0IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJl d3JpdGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGlu ZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJz Y3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpy ZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBr ZWVwIHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxk IGJlIGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUg ZXh0cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQg dXNlIHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRh LiBUbyBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJp bmcgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxv Z2ljIGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBt YXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3Jp dGUKZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0 ZSBjaGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0 YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJz ZXIgYW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGlu ZyByZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgfCAgNTIgKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgfCAyMzEgKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAgICAgICAgIHwgMTMzICsrKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgICAgfCAgODYgKysr KysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8ICA0 MSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAgIHwg IDkzICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAg ICAgfCAgNDggKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYyB8IDEzNiArKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMgICAgICAgIHwgMjMyICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jICAgICB8IDE5MiArKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCAzODggKysr KysrKysrKysrLS0tLS0tLS0tLS0tCiAzMSBmaWxlcyBjaGFuZ2VkLCAxNjI5IGluc2VydGlvbnMo KyksIDIxMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5v IFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVz Yy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJl dHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDZhZjM1 NzAuLmJkZjQyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUs NiArMTAwNSw3IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMu cHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxl dGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g cHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZvcm0t PnB1YmRkbDsKIAlwdWItPnB1YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVs ZWFzZVN5c0NhY2hlKHR1cCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXgg NjM1ZDA1NC4uMDJhZGUyNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAt MzcsOCArMzcsMTEgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIv cGFyc2VfZnVuYy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVk ZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNp bmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAt MTUzNyw2ICsxNTQwLDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNl dHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlv bklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29t bWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFi bGUuc3ViY21kcyA9IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNl dHJlZSk7CiAKQEAgLTE1NzAsNyArMTU3NCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxp ZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBj b2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdn ZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRk cmVzcykKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwg T2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBv bGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1OTAsNiArMTU5NCw3IEBA IEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0 QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5w YXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJj bWRzID0KIAkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3NSwzICsyMTgwLDIyNyBA QCBzdHJpbmdpZnlfYWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJcmV0 dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBwdWJs aWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUgZGRs IGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRs X2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0 cmlnZGF0YTsKKwljaGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQg c3RhcnQiKTsKKwlEcm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7CisKKwlpZiAoIUNB TExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQg YnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJE YXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+ cGFyc2V0cmVlOworCisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAq LworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFyCXJlbHBlcnNpc3Q7 CisJCU5vZGUJKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVz czsKKwkJUmVsYXRpb24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0 X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkg JnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1 ZSk7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJ ZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdo b3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICog V2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5s b2dnZWQKKwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhl IHN1YnNjcmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3Rs eSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJl d3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYg KHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2Uo cmVsYXRpb24sIE5vTG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExN ZXNzYWdlKCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAor CQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24p CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3 cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxv ZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19G VU5DVElPTl9BUkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5k ICAgKmNtZDsKKwljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZF TlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRy aWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZDsKKworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7 CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5k cyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhl IHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5 IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdy aXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVs cGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8g YWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0 aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQor CQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVj dElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0 cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisg KiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2UgdGhl IGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOwor CXNsaXN0X2l0ZXIgIGl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZCByZWxp ZDsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJP UiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2gobGMs IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQkJCXJl bHBlcnNpc3QgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQg ICAqY21kID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBS ZXdyaXRlIERETCBoYXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLwor CQlpZiAoY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSkKKwkJeworCQkJUmVuYW1lU3RtdCAqcmVu YW1lU3RtdCA9IChSZW5hbWVTdG10ICopY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVT dG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVTdG10LT5yZWxh dGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNt ZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFk ZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsK KwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkg U0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5v YmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYgKGdldF9yZWxf cmVsa2luZChyZWxpZCkpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShyZWxp ZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdo b3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICog V2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5s b2dnZWQgdGFibGVzCisJCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhl IHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0byBkaXJlY3Rs eSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJCSAqIHJl d3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYg KHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVlOworCisJCS8q CisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRl Y29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcgPSBkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJpbmcgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVs aWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2JqOworCQlEcm9w U3RtdAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2RhdGE7CisJCWNo YXIJCQkJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CisKKwkJ dHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQJ ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkJb2JqID0gc2xpc3RfY29u dGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQsIGl0ZXIuY3VyKTsKKworCQlpZiAoc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9w RW5kOworCQllbHNlIGlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzY2hlbWEiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAib3BlcmF0b3IiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVy YXRvciBjbGFzcyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJh dG9yIGZhbWlseSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNhc3Qi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0eXBlIikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZG9tYWluIikgPT0gMCB8fAorCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgImNvbnZlcnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVj dHR5cGUsICJwb2xpY3kiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQll bHNlCisJCQljb250aW51ZTsKKworCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2Jq LT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZp b3IpOworCisJCWlmIChjb21tYW5kID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlMb2dMb2dp Y2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwK KwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBv aW50ZXJHZXREYXR1bShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmMKaW5kZXggOGI1NzRiOC4uYjU4MTIxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMKQEAgLTM3LDEwICszNywxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTk1LDYgKzk3LDcg QEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0 aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwog CXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGwgPSBm YWxzZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNl IG9wdGlvbnMgKi8KQEAgLTE0MSw2ICsxNDQsOCBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsK IAkJCQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJ0cnVuY2F0ZSIpID09IDApCiAJCQkJ CXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwkJCQllbHNlIGlmIChzdHJjbXAocHVi bGlzaF9vcHQsICJkZGwiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGwgPSB0cnVlOwog CQkJCWVsc2UKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCkBAIC03NDksNiArNzU0LDUzIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5M aXN0KExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiB9CiAKIC8qCisgKiBD cmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisg Ki8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50 bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVj dEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQkJCWk7 CisJTGlzdAkJCSAgICp0YWdzID0gTklMOworCU9pZAkJCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RB ZGRyZXNzCQlyZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOwor CWNoYXIJCQkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQkJCXRyaWdnZXJfZnVu Y19uYW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2VyX25hbWVf cHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgICAq dHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90 cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmln Z2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJ IGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9m KHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUp OworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRk bF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1l ID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8 IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5nICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAo R2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3Ms IHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VE ZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0 ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVu dCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0aGUKKwkgKiBwdWJsaWNhdGlv bi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0 aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1 YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCisvKgogICogQ3JlYXRlIG5ldyBw dWJsaWNhdGlvbi4KICAqLwogT2JqZWN0QWRkcmVzcwpAQCAtODIwLDYgKzg3Miw4IEBAIENyZWF0 ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVt X3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0 aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0g MV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOwogCXZhbHVlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg4Miw2ICs5MzYsODIgQEAgQ3JlYXRlUHVibGljYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCX0K IAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2VyIHRvIGFsbG93IGxvZ2dpbmcg b2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKiBUT0RPOiBXZSBuZWVkIHRvIGZpbmQgYSBiZXR0 ZXIgc3ludGF4IHRvIGFsbG93IHJlcGxpY2F0aW9uIG9mIERETAorCSAqIHN0YXRlbWVudHMuCisJ ICoKKwkgKiBYWFg6IFRoaXMgY29kZSBpcyBqdXN0IHRvIHNob3cgdGhlIHJlcGxpY2F0aW9uIG9m IENSRUFURS9BTFRFUi9EUk9QCisJICogVEFCTEUgd29ya3MuIFdlIG5lZWQgdG8gZW5oYW5jZSB0 aGlzIG9uY2UgdGhlIGFwcHJvYWNoIGZvciBEREwKKwkgKiByZXBsaWNhdGlvbiBpcyBmaW5hbGl6 ZWQuCisJICovCisJaWYgKHB1YmFjdGlvbnMucHViZGRsKQorCXsKKwkJQ29tbWFuZFRhZwlzdGFy dF9jb21tYW5kc1tdID0ge0NNRFRBR19EUk9QX1RBQkxFfTsKKwkJQ29tbWFuZFRhZwlyZXdyaXRl X2NvbW1hbmRzW10gPSB7Q01EVEFHX0FMVEVSX1RBQkxFfTsKKworCQlDb21tYW5kVGFnCWVuZF9j b21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCisJCQlDTURUQUdfQUxURVJf UE9MSUNZLAorCQkJQ01EVEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFHX0NSRUFURV9DT05WRVJT SU9OLAorCQkJQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfRFJPUF9DT05WRVJT SU9OLAorCQkJQ01EVEFHX0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfRE9NQUlOLAor CQkJQ01EVEFHX0RST1BfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFH X0NSRUFURV9UWVBFLAorCQkJQ01EVEFHX0RST1BfVFlQRSwKKwkJCUNNRFRBR19BTFRFUl9UWVBF LAorCQkJQ01EVEFHX0NSRUFURV9DQVNULAorCQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURU QUdfRFJPUF9DQVNULAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwKKwkJCUNNRFRBR19DUkVB VEVfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0ZBTUlMWSwKKwkJ CUNNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1Jf Q0xBU1MsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRP UiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0RST1BfT1BFUkFU T1JfRkFNSUxZLAorCQkJQ01EVEFHX0NSRUFURV9QUk9DRURVUkUsCisJCQlDTURUQUdfQUxURVJf UFJPQ0VEVVJFLAorCQkJQ01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0NSRUFURV9G VU5DVElPTiwKKwkJCUNNRFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNNRFRBR19EUk9QX0ZVTkNU SU9OLAorCQkJQ01EVEFHX0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFHX0FMVEVSX1RSSUdHRVIs CisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEUsCisJCQlDTURU QUdfQUxURVJfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0FM VEVSX1NFUVVFTkNFLAorCQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJCQlDTURUQUdfQ1JFQVRF X1NDSEVNQSwKKwkJCUNNRFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TQ0hFTUEs CisJCQlDTURUQUdfQ1JFQVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1BfSU5ERVgsCisJCQlDTURU QUdfQUxURVJfSU5ERVgKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21t YW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMp LCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21t YW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29t bWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRl IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVf cmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9j b21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25S ZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtMTAyMiw2ICsxMTUyLDkgQEAgQWx0ZXJQdWJsaWNh dGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3Rt dCwKIAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9v bEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsK KwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IHRydWU7CiAJfQog CiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwppbmRleCBkYWNjOTg5Li4yZDRmNDJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwpAQCAtNTI1Myw3ICs1MjUzLDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRU YWJsZUluZm8gKnRhYiwKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBl dmVudCB0cmlnZ2Vycy4KIAkgKi8KIAlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0 ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCQlFdmVudFRyaWdnZXJDb2xs ZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7 CiAKIAkvKgogCSAqIEJ1bXAgdGhlIGNvbW1hbmQgY291bnRlciB0byBlbnN1cmUgdGhlIG5leHQg c3ViY29tbWFuZCBpbiB0aGUgc2VxdWVuY2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCmluZGV4IGM0ZTJmZGUuLmYzZWViNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6 PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWRlY29kZS5vIFwKKwlkZGxt ZXNzYWdlLm9cCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKIAlsb2dpY2FsZnVuY3MubyBc CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTM1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpAQCAtMCwwICsxLDg2 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdlLmMKKyAqCSAgTG9naWNh bCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogTk9URVMKKyAq CisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcgb2YgRERMIGNvbW1h bmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2FsIGRlY29kaW5nIHBs dWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBhcmUgc2FtZSBhcyBOT09Q LgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRoZXNlIERETCBtZXNz YWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS5Ob3RlIGJ5IGRlZmF1bHQgRERM cyBpbiBQb3N0Z3JlU1FMIGFyZSB0cmFuc2FjdGlvbmFsLgorICoKKyAqIFRoZXNlIG1lc3NhZ2Vz IGFyZSBwYXJ0IG9mIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHdpbGwgYmUgc2VudCB0bworICog ZGVjb2RpbmcgcGx1Z2luIHVzaW5nIGluIGEgc2FtZSB3YXkgYXMgRE1MIG9wZXJhdGlvbnMuCisg KgorICogRXZlcnkgbWVzc2FnZSBjYXJyaWVzIHByZWZpeCB0byBhdm9pZCBjb25mbGljdHMgYmV0 d2VlbiBkaWZmZXJlbnQgZGVjb2RpbmcKKyAqIHBsdWdpbnMuIFRoZSBwbHVnaW4gYXV0aG9ycyBt dXN0IHRha2UgZXh0cmEgY2FyZSB0byB1c2UgdW5pcXVlIHByZWZpeCwKKyAqIGdvb2Qgb3B0aW9u cyBzZWVtcyB0byBiZSBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lv bi4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNl cnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKworLyoKKyAqIFdyaXRlIGxvZ2ljYWwgZGVjb2RpbmcgRERM IG1lc3NhZ2UgaW50byBYTG9nLgorICovCitYTG9nUmVjUHRyCitMb2dMb2dpY2FsRERMTWVzc2Fn ZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgc2l6ZV90IHNpemUpCit7CisJeGxfbG9n aWNhbF9kZGxfbWVzc2FnZSB4bHJlYzsKKworCS8qCisJICogRW5zdXJlIHdlIGhhdmUgYSB2YWxp ZCB0cmFuc2FjdGlvbiBpZC4KKwkgKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRlKCkpOwor CUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRhYmFzZUlk OworCS8qIHRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNnX2Rlc2Mg Ki8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJlYy5tZXNz YWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21kdHlwZSA9 IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKChjaGFy ICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3RlckRhdGEo dW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlYTG9nUmVn aXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkvKiBhbGxv dyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5DTFVERV9P UklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwgWExPR19M T0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5IGp1c3Qg bm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQKK2xvZ2lj YWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJaW5mbyA9 IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChpbmZvICE9 IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxkZGxtc2df cmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9ubHkgaW50 ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDE2NjdkNzIuLjY2NjZkNTcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtMzYsNiArMzYs NyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbnRyb2wuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9vcmlnaW4uaCIKQEAgLTYwNCw2ICs2MDUsNDYgQEAgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiB9CiAKIC8qCisg KiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMgZm9yIERlY29kZVJlY29yZElu dG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQoreworCVNuYXBC dWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CisJWExvZ1JlYWRlclN0YXRl ICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIp OworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExSX0lORk9fTUFTSzsKKwlS ZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxf ZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01F U1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xPR0lDQUxERExNU0dfSUQgcmVj b3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJl b3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgorCSAqIElmIHdl IGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVy ZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAo U25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExfU05BUFNIT1Qg fHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVybjsKKworCW1lc3NhZ2UgPSAoeGxfbG9n aWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKworCWlmIChtZXNzYWdlLT5k YklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgs IG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1 aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2Fn ZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVz c2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZpeCAqLworCQkJCQkJCQkJIG1l c3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2Fn ZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5 cGUpOworfQorCisvKgogICogQ29uc29saWRhdGVkIGNvbW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0 d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiByZWNvcmRzLgogICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggNjI1YTdmNC4uOTg5Njlj NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAgLTMzLDYg KzMzLDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2lj YWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYgKzc0LDEwIEBA IHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSAgIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkgICBjb25zdCBj aGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0 YXRpYyB2b2lkIGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNv bnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVz c2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9z dGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCkBAIC05MCw2ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdlX2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogc3RhdGljIHZv aWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3RyZWFtX2RkbG1l c3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSBjb25z dCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVz c2FnZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVm ZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAgaW50IG5yZWxh dGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2Up OwogCkBAIC0yMTgsNiArMjI4LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRw dXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5j YXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBl cjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5y ZW9yZGVyLT5kZGxtZXNzYWdlID0gZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCiAJLyoKIAkgKiBU byBzdXBwb3J0IHN0cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0L2NvbW1pdC9j aGFuZ2UKQEAgLTIzNCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91 dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jb21taXRfY2Ig IT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2IgIT0gTlVMTCkg fHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwpIHx8CisJCShj dHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1MSw2ICsy NjMsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9u cywKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2NiX3dyYXBw ZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9jYl93cmFw cGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2FnZV9jYl93 cmFwcGVyOworCWN0eC0+cmVvcmRlci0+c3RyZWFtX2RkbG1lc3NhZ2UgPSBzdHJlYW1fZGRsbWVz c2FnZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFt X3RydW5jYXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTIyMSw2ICsxMjM0LDQ0IEBAIG1lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog fQogCiBzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xz biwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkgIGNvbnN0IGNo YXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnBy aXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29u dGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7 CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47 CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAq LworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gImRkbG1lc3NhZ2Ui OworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNh bGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcg PSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0 X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQg b3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRl X3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlj dHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdv cms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiKGN0eCwg dHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJIG1lc3Nh Z2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8K KwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKK3N0YXRp YyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCiB7CkBAIC0x NTM2LDYgKzE1ODcsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMgdm9pZAorc3RyZWFt X2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25z dCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAor CQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkK K3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOwor CUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sg ZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3Jl IG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4g Ki8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRp b25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiA9PSBOVUxM KQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29u dGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0g InN0cmVhbV9kZGxtZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xz bjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7 CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZp b3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNh bGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9 IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJ LyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Mu c3RyZWFtX2RkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlk LAorCQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3Ag dGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2Fs bGJhY2sucHJldmlvdXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ ICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAogCQkJCQkJICAgUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jCmluZGV4IGZmODUxM2UuLmYzNTQwNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMKQEAgLTY2Myw2ICs2NjMsNTIgQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdl KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiB9CiAK IC8qCisgKiBSZWFkIERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNh bHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLAorCQkJ CQkJICAgY29uc3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6KQoreworCXVpbnQ4 IGZsYWdzOworCWNoYXIgKm1zZzsKKworCS8vVE9ETyBkb3VibGUgY2hlY2sgd2hlbiBkbyB3ZSBu ZWVkIHRvIGdldCBUcmFuc2FjdGlvbklkLgorCisJZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW4sIDEp OworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGZsYWdzICV1 IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCSpsc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJ KnByZWZpeCA9IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNnaW50KGluLCA0 KTsKKwltc2cgPSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKworCXJldHVybiBt c2c7Cit9CisKKy8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAqLwordm9pZAor bG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6 LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9zZW5k Ynl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFKTsKKworCS8qIHRyYW5zYWN0aW9u IElEIChpZiBub3QgdmFsaWQsIHdlJ3JlIG5vdCBzdHJlYW1pbmcpICovCisJaWYgKFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXBxX3NlbmRpbnQzMihvdXQsIHhpZCk7CisKKwlwcV9zZW5k aW50OChvdXQsIGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24pOworCXBxX3NlbmRzdHJp bmcob3V0LCBwcmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsKKwlwcV9zZW5kYnl0ZXMo b3V0LCBtZXNzYWdlLCBzeik7Cit9CisKKy8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlv biB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZApAQCAtMTIxOCw2ICsxMjY0LDggQEAg bG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0 dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJCXJldHVybiAi TUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlyZXR1cm4g IkRETCI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4g IkJFR0lOIFBSRVBBUkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA4OWNm OWY5Li5lYmNmZTE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl b3JkZXJidWZmZXIuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFw LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2lj YWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vc2xvdC5oIgpAQCAtNTE1LDYgKzUxNiwxNCBAQCBSZW9yZGVyQnVmZmVyUmV0 dXJuQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2Us CiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIAkJCWNoYW5nZS0+ZGF0YS5t c2cubWVzc2FnZSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfRERMTUVTU0FHRToKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCAhPSBOVUxM KQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCQkJ Y2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0gTlVMTDsKKwkJCWJyZWFrOwogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmlu dmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRh dGlvbnMpOwpAQCAtODcwLDYgKzg3OSwzNiBAQCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJl b3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIH0KIAogLyoKKyAqIEEgdHJhbnNh Y3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vzc2VkIHVwb24gY29tbWl0 LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKQorewor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2U7 CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0gUmVvcmRl ckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9IHBzdHJkdXAo cHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVsaWQ7CisJY2hhbmdlLT5k YXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBw YWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdl LCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKHJi LCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7Cit9CisKKy8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgogICoJCVZlcmlmeSBMU04g b3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3JkZXJidWZmZXIKICAqCkBA IC0xOTY5LDYgKzIwMDgsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0 aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNz YWdlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3Nh Z2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVv cmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlpZiAoc3RyZWFt aW5nKQorCQlyYi0+c3RyZWFtX2RkbG1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJ CQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5k ZGxtc2cucmVsaWQsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJ CQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRsbWVzc2FnZShyYiwgdHhuLCBj aGFuZ2UtPmxzbiwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCSAg IGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cu Y21kdHlwZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJCQkJ CSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7Cit9CisKKy8qCiAgKiBGdW5jdGlvbiB0 byBzdG9yZSB0aGUgY29tbWFuZCBpZCBhbmQgc25hcHNob3QgYXQgdGhlIGVuZCBvZiB0aGUgY3Vy cmVudAogICogc3RyZWFtIHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZSBzYW1lIHdoaWxlIHNlbmRp bmcgdGhlIG5leHQgc3RyZWFtLgogICovCkBAIC0yMzQ4LDYgKzI0MTAsMTAgQEAgUmVvcmRlckJ1 ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWlu Zyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVT U0FHRToKKwkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFuZ2Us IHN0cmVhbWluZyk7CisJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5WQUxJREFUSU9OOgogCQkJCQkvKiBFeGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVzc2Fn ZXMgbG9jYWxseSAqLwogCQkJCQlSZW9yZGVyQnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMoY2hh bmdlLT5kYXRhLmludmFsLm5pbnZhbGlkYXRpb25zLApAQCAtMzc3Myw2ICszODM5LDQwIEBAIFJl b3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCWNoYXIJICAgKmRhdGE7CisJCQkJU2l6ZQkJcHJl Zml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJ CXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKwor CQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpICsgc2l6ZW9mKFNp emUpOworCQkJCVJlb3JkZXJCdWZmZXJTZXJpYWxpemVSZXNlcnZlKHJiLCBzeik7CisKKwkJCQlk YXRhID0gKChjaGFyICopIHJiLT5vdXRidWYpICsgc2l6ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hh bmdlKTsKKworCQkJCS8qIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9jYXRlZCBhYm92ZSAqLworCQkJ CW9uZGlzayA9IChSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSAqKSByYi0+b3V0YnVmOworCisJCQkJ Lyogd3JpdGUgdGhlIHByZWZpeCwgcmVsaWQgYW5kIGNtZHR5cGUgaW5jbHVkaW5nIHRoZSBzaXpl ICovCisJCQkJbWVtY3B5KGRhdGEsICZwcmVmaXhfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlk YXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxt c2cucmVsaWQsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1l bWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBzaXplb2YoaW50KSk7CisJ CQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRk bG1zZy5wcmVmaXgsCisJCQkJCSAgIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9z aXplOworCisJCQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJ CQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9m KFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hh bmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6 ZTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZB TElEQVRJT046CiAJCQl7CiAJCQkJY2hhcgkgICAqZGF0YTsKQEAgLTQwODcsNiArNDE4NywxNSBA QCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAK IAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FH RToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKSAr IHNpemVvZihPaWQpICsgc2l6ZW9mKGludCk7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCXN6ICs9IHNpemVv ZihTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlKSAqCkBAIC00MzYyLDYgKzQ0NzEsMzMgQEAgUmVv cmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5H RV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVh ZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkp OworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRk bG1zZy5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7 CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihp bnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4ID0gTWVtb3J5Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJ CQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7 CisJCQkJQXNzZXJ0KGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0g PT0gJ1wwJyk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1l c3NhZ2UgKi8KKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRh LCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ ZGF0YS5tc2cubWVzc2FnZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJ CQkJCQkJCQkJCSAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShj aGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cu bWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXpl OworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFM SURBVElPTjoKIAkJCXsKIAkJCQlTaXplCQlpbnZhbF9zaXplID0gc2l6ZW9mKFNoYXJlZEludmFs aWRhdGlvbk1lc3NhZ2UpICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CmluZGV4IDVmOGM1NDEuLjQ0M2EzYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXpl ci5oIgorI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50 ZXJydXB0LmgiCkBAIC0xNzksNyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXku aCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnku aCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5Lmgi CiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNp bmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgpAQCAtMjQ2Myw2ICsyNDY3LDIzMCBAQCBhcHBseV9o YW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9 CiAKKy8qIFJlbW92ZSB0aGUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0 YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQorewor CUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFn KChOb2RlICopY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENN RFRBR19DUkVBVEVfVEFCTEVfQVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJewor CQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29t bWFuZC0+c3RtdDsKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBh dm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0 ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlj YXN0bXQtPmludG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBDTURUQUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVj dFN0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBO VUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0 aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUg cmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICov CisJCQkJCXNzdG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQor CQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENS RUFURSBUQUJMRSBjb21tYW5kCisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBm b3IgQ1JFQVRFIFRBQkVMIGNvbW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVM X1NUQVRFX1JFQURZIHNvIERNTCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBs aWNhdGVkIHdpdGhvdXQKKyAqIGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlw dGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9j cmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7 CisJUmFuZ2VWYXIJICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNw YWNlID0gSW52YWxpZE9pZDsKKwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkg KnJlbG5hbWUgPSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUg KikgY29tbWFuZCk7CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19D UkVBVEVfVEFCTEU6CisJCQl7CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAq KSBjb21tYW5kLT5zdG10OworCQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisK KwlzY2hlbWFuYW1lID0gcnYtPnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOwor CisJaWYgKHNjaGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFj ZV9vaWQoc2NoZW1hbmFtZSwgZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlk T2lkKQorCQlyZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7 CisJZWxzZQorCQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxp ZCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3Jp cHRpb24tPm9pZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJ SW52YWxpZFhMb2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVy bmFsKCJ0YWJsZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJ CSByZWxuYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwlj b25zdCBjaGFyICpwcmVmaXggPSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJ ICAgKmRkbF9jb21tYW5kOworCVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0Owor CUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlf c3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVh ZF9kZGxtZXNzYWdlKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2Ug YXJlIGluIGEgdHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKworCWRkbF9jb21tYW5kID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7 CisJZGVidWdfcXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3Ig bG9naWNhbCByZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERl c3ROb25lKTsKKwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsK KworCWZvcmVhY2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkg ICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJ ICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21t YW5kVGFnCWNvbW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0 ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxz ZTsKKworCQljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsK KworCQkvKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29t bWFuZCwgcXVpdCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBk YXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90 YWJsZShjb21tYW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBh bmFseXNpcy9wbGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVx dWlyZXNfc25hcHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJ CS8qCisJCSAqIFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxp dmVkIGNvbnRleHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFy ZSBtYW55IGNvbW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2Nv bnRleHQgPQorCQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkgICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJ CQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0 ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJ CQkJCQkJZGRsX2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlw bGFudHJlZV9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFu ZCwgMCwgTlVMTCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJz aW5nL3BsYW5uaW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hv dCgpOworCisJCXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRy dWUsIHRydWUpOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBp bnRvIHRoZSBwb3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBo ZXJlIGlzIGluIEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVf Y29udGV4dCwgYW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJ CVBvcnRhbERlZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2Nv bW1hbmQsCisJCQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJ CQkgIE5VTEwpOworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJz IGhlcmUuCisJCSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFw c2hvdCk7CisKKwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBm b3IgZXhlY3V0aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCisJCSh2b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJ CSB0cnVlLAorCQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIs CisJCQkJCQkgTlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERM IHJlcGxpY2F0aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRl ZCB0byB0aGUgc3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxl KGNvbW1hbmQpOworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250 ZXh0LCBpZiBvbmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3Bh cnNldHJlZV9jb250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVn X3F1ZXJ5X3N0cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBM b2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1Mjgs NiArMjc1NiwxMCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJy ZWFrOwogCisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5k bGVfZGRsKHMpOworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NU QVJUOgogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggNjJlMGZmZS4uNGUy NGFiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBA IC01Myw2ICs1MywxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVj UHRyIG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMg dm9pZCBwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJ CQkJCQkJUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJ CQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsK IHN0YXRpYyBib29sIHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LAogCQkJCQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQg cGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApA QCAtMjU2LDYgKzI2MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2Fs bGJhY2tzICpjYikKIAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVu Y2F0ZV9jYiA9IHBnb3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRf bWVzc2FnZTsKKwljYi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2It PmNvbW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9j YiA9IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19v dXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFt X2NvbW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2Vf Y2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRf bWVzc2FnZTsKKwljYi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdl OwogCWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFu c2FjdGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVw YXJlX2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBA IHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVn aW5PcHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4g Ki8KIAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9w dC0+cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRp b24gc3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBA IHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVn aW5PcHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0 YS0+cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJ cHVibGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxi YWNrKFBVQkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25f Y2IsCkBAIC0xMzgxLDkgKzEzOTAsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFu Z2VUeXBlIGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xv dCA9IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFi bGVfcmV3cml0ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwg ZmFsc2UpOwogCisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byBy ZXBsaWNhdGUgdGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3Jp dGUgZGRsIG1lc3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICog Y2hlY2sgdGhlIHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+ cmVscmV3cml0ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJl bGF0aW9uSWRHZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFy Z2V0cmVsID0gcmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihy ZWxhdGlvbikpCiAJCXJldHVybjsKIApAQCAtMTQxNyw2ICsxNDM5LDEzIEBAIHBnb3V0cHV0X2No YW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCUFzc2VydChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxl IHJld3JpdGUgY2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1l c3NhZ2UuCisJICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25z LnB1YmRkbCkKKwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcg YW5kIHJlc2V0dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oZGF0YS0+Y29udGV4dCk7CiAKQEAgLTE0NDYsOCArMTQ3NSw4IEBAIHBnb3V0cHV0X2No YW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCX0KIAogCQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3df ZmlsdGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAm YWN0aW9uKSkKKwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmls dGVyKHRhcmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJ YnJlYWs7CiAKIAkJCS8qCkBAIC0xNDY3LDggKzE0OTYsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5 YmVfc2VuZF9zY2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91 dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9p bnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEt PmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUg cmV3cml0ZSBpbnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICog Y2FuIHJlcGxheSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdl ZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICov CisJCQlpZiAodGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgt Pm91dCwgeGlkLCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJp bmFyeSwKKwkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNh bHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJ CQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdp bldyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfVVBEQVRFOgpAQCAtMTU5OCw2ICsxNjM4LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9 IE5VTEw7CiAJfQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworCiAJLyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1l bW9yeUNvbnRleHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzUsOCArMTcxOCw4IEBAIHBn b3V0cHV0X3RydW5jYXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBt ZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg c3osCi0JCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6 LCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1 dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKQEAgLTE3MTYsNiArMTc1OSwxMzcgQEAgcGdvdXRwdXRf bWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdv dXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ U2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAo UEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhu RGF0YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3By aXZhdGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJ LyoKKwkgKiBSZW1lbWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9k ZS4gU2VlCisJICogcGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJ CXhpZCA9IHR4bi0+eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFi bGVEcm9wU3RhcnQ6CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0 byBhIGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBw dWJsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQg dGhpcyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJ CSAqIHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9y IGEgcmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5 IHRoZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9 IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJ CQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlm IChyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMg PSBsYXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlv bkNsb3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgor CQkJaWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJ CQlyZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0 ZV9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERD VF9UYWJsZUFsdGVyOgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmly c3Qgc2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRo ZW4gY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJ ICogc2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxp c2hlciBhbmQKKwkJCSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJ ICoKKwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJ CQkgKiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJl IGRpZmZlcmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtl IHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBl eGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJ ICogdGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3 cml0ZSBhbGwgdGhlCisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUg ZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25n CisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlv bnMvb3BlcmF0b3JzIHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byBy ZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25z aXN0ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBi eSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRh dGEgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNv bWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3 ZSBtYXkKKwkJCSAqIG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlw ZSBvZiByZXdyaXRlIGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNr aXAgc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9H R0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBj aGFuZ2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxp ZCk7CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19l bnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBk ZGwgaWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVk IHRvIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICgh cmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNf cmVsaWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJ cmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVs YXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24g PT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnko ZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkK KwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisK KwkJCWJyZWFrOworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAl ZCIsIGNtZHR5cGUpOworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZl bid0IHlldCAqLworCWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJ cGdvdXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3Jp dGUoY3R4LCB0cnVlKTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJ CQkJCQkJCXhpZCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJ CQkJc3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7 CisKKwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgog ICogUmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBh bmQgdGhlIHVzZXIgaGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZl IGFuIG9yaWdpbiwgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMTk5Nyw3ICsyMTcxLDggQEAgZ2V0X3Jl bF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVu dHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsK IAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBk YXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25z LnB1YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBl bnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZGwgPSBmYWxzZTsKIAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90 ID0gTlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhw cnN0YXRlKSk7CkBAIC0yMDU1LDYgKzIyMzAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRw dXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVi dXBkYXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4g KFdpbGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2OCw2ICsyMzQ0LDcgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1 cGRhdGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBw dWItPnB1YmFjdGlvbnMucHViZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxp c2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzUzLDYgKzI1MzAs NyBAQCByZWxfc3luY19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlk LCB1aW50MzIgaGFzaHZhbHVlKQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNl OwogCX0KKwogfQogCiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3JlbGNhY2hlLmMKaW5kZXggMDBkYzBmMi4uZjFiNGQwOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jCkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRp b25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1 YmRlc2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJk ZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJ ICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Np b24gYXJlIHBhcnQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IGQyNTcwOWEuLjNkNmRjNTcgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YwpAQCAtMzg5Niw2ICszODk2LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVs ZXRlOwogCWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9w dWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTExLDIzICszOTEyLDI5IEBA IGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAly ZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwot CWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVy c2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAogCQkJCQkJICAiU0VM RUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCSAgInAucHVib3duZXIs ICIKLQkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAu cHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJh bGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1 bmNhdGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNh dGlvbiBwIik7CisJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJCWFw cGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAorCQkJCQkJICAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lk LCBwLnB1Ym5hbWUsICIKKwkJCQkJCSAgInAucHVib3duZXIsICIKKwkJCQkJCSAgInAucHViYWxs dGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5j YXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdf cHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAw KQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lk LCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkgICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkgICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg ZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBw Z19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJ CQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJw LnB1Ym93bmVyLCAiCi0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVi dXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZp YXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0 ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwg ZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsK IAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVT X09LKTsKQEAgLTM5NDMsNiArMzk1MCw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0 LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMsICJw dWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUiKTsK IAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9wdWJk ZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVy KHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXpl b2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTY2LDYgKzM5NzQsOCBAQCBnZXRQdWJsaWNhdGlv bnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVi dHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0ZSks ICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290 ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0g MCk7CiAKQEAgLTQwNDUsNiArNDA1NSwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91 dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0K IAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5 LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksICInIik7CiAKIAlpZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4 IDY5ZWU5MzkuLjZjNTVkZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVk ZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVi dHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlhcm9vdDsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0 aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5j IGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5k cy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNj LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCAzMjdhNjk0 Li43N2M0NzExIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE1OSw3ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0aW9u cyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQg ICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0 IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0 ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7 CkBAIC02MTk0LDYgKzYxOTQsMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0 ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290 IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBz ZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJ ICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikp OwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjI4NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJ aGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJk ZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsK QEAgLTYzMDAsNiArNjMwNSw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBh dHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwog CWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRs ID0gIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCk7CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7 CiAKQEAgLTYzMTMsNiArNjMxOSw5IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u XG4iKTsKIApAQCAtNjM2NCw2ICs2MzczLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5j b2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZm ZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAl cyIpLCBwdWJuYW1lKTsKQEAgLTYzNzgsNiArNjM4OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0 ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9v dCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3Qi KSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFk ZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRU YWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsK IAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2Us IGZhbHNlKTsKQEAgLTYzODgsNiArNjQwMSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0 IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShy ZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmlu dFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2Up OworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJ CXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAwYmNiZi4uMzdkZmQ0NSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jt Z3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21t aXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JN R1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRv LCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBn ZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywg TlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNh bG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5V TEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lE LCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2df ZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRk bG1zZ19kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAzZTdmMzY0Li5hYjI5MGRk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTAwLDQgKzExOTAwLDEzIEBACiB7IG9p ZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQganNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4g RERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcs IHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9 PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2Ny ID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlJywKKyAgcHJvbmFtZSA9PiAncHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90 cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVw YXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmln Z2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGlj YXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3Ry aWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJp Z2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9 PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b24uaAppbmRleCBjMjk4MzI3Li5hYTJiMGM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFMT0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJs aWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBw dWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OworCisJLyog dHJ1ZSBpZiB0YWJsZSBjcmVhdGlvbnMgYXJlIHB1Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsK IH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcy LDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVi dXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlw dWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRp b25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggMTAwOTFjMy4uZmQy ZWU3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBA QCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRy ZXNzIGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9k ZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChP aWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVT dWJjbWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsK KwkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3 cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmE4ZGNhODYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmgKQEAgLTAsMCArMSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBkZGxtZXNzYWdlLmgKKyAqCSAgIEV4cG9ydHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbG1lc3NhZ2UuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERM X01FU1NBR0VfSAorI2RlZmluZSBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUg ImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisg KiBTdXBwb3J0IGZvciBrZWVwaW5nIHRyYWNrIG9mIGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0 eXBlZGVmIGVudW0gRGVwYXJzZWRDb21tYW5kVHlwZQoreworCURDVF9TaW1wbGVDbWQsCisJRENU X1RhYmxlRHJvcFN0YXJ0LAorCURDVF9UYWJsZURyb3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJ RENUX09iamVjdENyZWF0ZSwKKwlEQ1RfT2JqZWN0RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBl OworCisvKgorICogR2VuZXJpYyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNv cmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJ CQkJCQlkYklkOwkJCS8qIGRhdGFiYXNlIE9pZCBlbWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlw cmVmaXhfc2l6ZTsJLyogbGVuZ3RoIG9mIHByZWZpeCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8q IGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0 eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJCQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUg b2YgdGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVy bWluYXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2Fn ZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisj ZGVmaW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9t ZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3Nh Z2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7 CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAK K3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lk CQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisK KyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCA3NDFiZjY1Li40MjdhN2I5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBo ZWFwMl9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVy ICpidWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0 ZXJuIHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBl eHRlcm4gdm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCBhNzcxYWI4Li4yYWJjY2I4IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBl ZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAn UicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NB R0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9S RVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAn UCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsy MzAsMTEgQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3Ry dW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJl c3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBi b29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hh ciAqbWVzc2FnZSk7CisJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpw cmVmaXgsCisJCQkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0 aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgs IFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBf cmVhZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hh ciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwo U3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVs LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNh bHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaAppbmRleCBiN2QyOGQ3Li43NjNlNDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vb3V0cHV0X3BsdWdpbi5oCkBAIC05MSw2ICs5MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK IAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxlZCBmb3IgdGhl IGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBj b25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4K ICAqLwogdHlwZWRlZiBib29sICgqTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1 Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjAyLDYgKzIxNCwxOSBAQCB0eXBl ZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog CiAvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNz YWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9p ZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAor CQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgogICogQ2FsbGJhY2sgZm9y IHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8K IHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0 cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVu Y2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNv ZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbG1l c3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdp bl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25DQiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5LDYg KzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxE ZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJl YW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdl Q0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBz dHJlYW1fZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJl YW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NS4uODNlMGIxZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0 YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1l czsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlzdAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJ Ym9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWluZzsKIAlib29sCQltZXNzYWdlczsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCA4Njk1OTAxLi4yYzRlZjliIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBA CiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0 LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9o c2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAg dHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVG RkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lO VkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBA IC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJ CWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAKKwkJLyogRERMIE1lc3NhZ2UuICovCisJ CXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7 CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1h bmRUeXBlCWNtZHR5cGU7CisJCX0JCQlkZGxtc2c7CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQg d2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hv dDsKIApAQCAtNDM1LDYgKzQ0OCwxNiBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVz c2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVz c2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJE RExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJ CQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJ CQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXpl IHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVw YXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJl Z2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVm ZmVyVFhOICp0eG4pOwpAQCAtNTAxLDYgKzUyNCwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVy QnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJl YW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZl ciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJ IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4 LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAq LwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJ CQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC01NTIsNiArNTg2LDcgQEAgc3RydWN0IFJl b3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRl OwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VD QiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8q CiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9u IGF0IHByZXBhcmUgdGltZS4KQEAgLTU3MSw2ICs2MDYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZl cgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJC dWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1N ZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VD QiBzdHJlYW1fZGRsbWVzc2FnZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJl YW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjQ2LDYgKzY4Miw5IEBAIGV4dGVybiB2b2lkIFJlb3Jk ZXJCdWZmZXJRdWV1ZUNoYW5nZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsCiBleHRl cm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNh Y3Rpb25JZCwgU25hcHNob3Qgc25hcHNob3QsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJICBi b29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBt ZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1 ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dS ZWNQdHIgbHNuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9z aXplLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBPaWQgcmVsaWQsIERlcGFyc2Vk Q29tbWFuZFR5cGUgY21kdHlwZSk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJl b3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRf bHNuLCBYTG9nUmVjUHRyIGVuZF9sc24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1l LCBSZXBPcmlnaW5JZCBvcmlnaW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBhN2Y1NzAwLi5iZmM3M2MyIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTU5NzAsOSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwog KDAgcm93cykKIAogXGRScCAibm8uc3VjaC5wdWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3Vj aC5zdWJzY3JpcHRpb24iCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CmluZGV4IGU2ZTA4MmQuLjZkMWI3NDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVi bGljYXRpb24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciBy ZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0g dGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZGVmYXVsdCBTRVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZScpOwogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2Rl ZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dz KQogCiAtLS0gYWRkaW5nIHRhYmxlcwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFC TEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBB TEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAt LSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0 aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgQUxMIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJs ZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsK IFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTM0LDEwICsxMzQsMTAgQEAgRVJST1I6ICByZWxh dGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIC0tIHNo b3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25v cGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTU5LDEwICsxNTksMTAgQEAgUHVibGlj YXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVzdHB1Yl9mb3Jh bGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsMjsKQEAgLTE3NCwxOSArMTc0LDE5IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi MyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZP UiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBc ZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMi CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIwNywxMCArMjA3LDEwIEBA IFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJlbnQgaXMgbGlz dGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogXGRS cCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTIyNSwxMCArMjI1LDEwIEBAIEFMVEVSIFRBQkxFIHRl c3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBh cnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0 cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3BhcnRlZCIKIApAQCAtMjU3LDEwICsyNTcsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0 cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1 KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6 dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0yNzMsMTAgKzI3MywxMCBAQCBUYWJsZXM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUg PiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIi IFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMjkyLDEwICsyOTIs MTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBEUk9QIFRB QkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIg V0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMDMsMTAgKzMwMywxMCBAQCBU YWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1Yl9yZl90Ymwz IGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFORCBlIDwgNTAw KTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zMzksMTAgKzMz OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVz dHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJs aWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM1MiwxMCArMzUyLDEwIEBA IFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hl bWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50 YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgy CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBA IC02NzgsMTAgKzY3OCwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMg V0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRl c3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAoYSkKIApAQCAtODIz LDEwICs4MjMsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBp bnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxURVIgVEFCTEUgdGVzdHB1 Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90 YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmls dGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9 IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUg KGMgPD4gMSkKIApAQCAtMTAzMSwxMCArMTAzMSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0 cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRi bAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGJsIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibCIgYWxyZWFkeSBleGlzdHMK IFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rl c3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTA3MiwxMCAr MTA3MiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0 ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVz dHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE1MywxMCArMTE1Mywx MCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJlZ3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIERST1AgVEFCTEUg dGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0xMTY2LDIw ICsxMTY2LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHVi X2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQg UkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28gfCByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFtZSAgICAgfCAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gcmVuYW1lIGJh Y2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9v IFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Rl ZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9k ZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGluZyBz Y2hlbWFzIGFuZCB0YWJsZXMKQEAgLTExOTUsMTkgKzExOTUsMTkgQEAgQ1JFQVRFIFRBQkxFICJD VVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9taW5f bWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJf dGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0 ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTIyMSw0NCArMTIyMSw0NCBA QCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBBTEwgVEFCTEVTIElO IFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgRk9SIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVz dHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJDVVJSRU5UX1NDSEVNQSIKIAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAg ICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMi CiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg IkNVUlJFTlRfU0NIRU1BLkNVUlJFTlRfU0NIRU1BIgogCkBAIC0xMjkyLDEwICsxMjkyLDEwIEBA IEVSUk9SOiAgc2NoZW1hICJ0ZXN0cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGlu ZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERS T1AgU0NIRU1BIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJf dGVzdDIiCkBAIC0xMzAzLDIwICsxMzAzLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBy ZW5hbWluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRp b24KIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwog XGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogICAgICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzI0LDEwICsxMzI0LDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIi CkBAIC0xMzM2LDEwICsxMzM2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9l eGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9l cyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBA IC0xMzQ4LDEwICsxMzQ4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1Ymxp Y2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTM1OSwxMCArMTM1OSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFz OgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xMzcwLDEwICsxMzcwLDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBB TEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9tIHNjaGVt YSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIApAQCAtMTM4MSwyOSArMTM4MSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hl bWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhp c3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK IC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlv biBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsg dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MTIsMTAgKzE0MTIsMTAg QEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MjQsMTAgKzE0MjQsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBA IC0xNTA2LDE4ICsxNTA2LDE4IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAo MSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTE1MjcsMjAgKzE1MjcsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h X2ZvcnRhYmxlIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRi bDEsIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50Ymwx IgogVGFibGVzIGZyb20gc2NoZW1hczoKLS0gCjEuOC4zLjEKCg== --000000000000cad9e105e7eec1fd--