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 1oYo8e-00031X-SB for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Sep 2022 12:38:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oYo8d-0005zk-1X for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Sep 2022 12:38:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oYo8b-0005zZ-MX for pgsql-hackers@lists.postgresql.org; Thu, 15 Sep 2022 12:38:38 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oYo8X-0001Nb-TA for pgsql-hackers@lists.postgresql.org; Thu, 15 Sep 2022 12:38:36 +0000 Received: by mail-lj1-x22f.google.com with SMTP id q17so8155038lji.11 for ; Thu, 15 Sep 2022 05:38:33 -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=2tkmqmw/3bxlF4+3nKIKMqAsc7Oc/S4YhWVAulEJUQQ=; b=dDfrpDZ9wyg973J4UbDvP1rCjg/sLOj6oBV953K8ER2Zal1v8caAj75dFrEp0XqiLL dPpp4LJg2TYZ73sU9qAOoIPmuHfvutpi1kxz9nL/n4tZXdOzJzsNXmyPs7oT9o2i9njF Olorp1tF5i8WgHPFsbLQOrNsWMHq1gaxY8BidnU01tL1MobaA17A7b31kcv3kZFnhBoQ Y03LHPoFf0SoSpI75Zi3DAGwyP/dM8NOBVH8IgVMYAIGAreCqaEXzhoMHY3s3xaqr9+s YdKJCnjrp1+dsDIViZ08zlRfpYnwysNc7fPqBFTdXNR9gzy//dmnWiSx6fBVsJ6JhtPe hDPA== 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=2tkmqmw/3bxlF4+3nKIKMqAsc7Oc/S4YhWVAulEJUQQ=; b=ZkAK1g5UpIHD60sc/pUqk6glB8drR71B7XUlwmPLcDw7miouVBv+cBVF7lckmK5dW9 cUaBBiqtsCt9ITfKtcLRPSSmjYHNW0UOyA6qhTMcTsoIW48kwWYUIYpppQ+2wzqtDWqN gCyLKM6h7OCrB7c1meGllwvldX3l1WcHhInvfpIGO3jIS9sEaEHYetiDu1BCCpw9Vf9a nLH0465JCxwGHXh2Y+jSMYuQ8jK53f5Iwjj8euk5XDRotSoPIKiUhXh3T6Evydyv/sbv xOu9jSDdFBGAbg2YnQzGr6QGUGsNamtO85tZSHZOJ2hOBaaTFiVajZdN5tR4+RcMDbRf nq1g== X-Gm-Message-State: ACgBeo05X7baZ06S6Pk7pK90C0D8gRkaFA/3VYwhwPN1W3nDXhQr6W5F eDnX0lRV+KIxNhF0WXAfh0gxa13g/VjM1Ik5kbWEUtosxsI= X-Google-Smtp-Source: AA6agR7LIO7CKrMH4uUyBVQQcjA4j29iaqL/oNewJcNWB2bvUGpT53QsnLxIe7Czd+qNPFY1c8qYJRtkdXLvR8Gnunw= X-Received: by 2002:a2e:a7d5:0:b0:26c:27c3:14d9 with SMTP id x21-20020a2ea7d5000000b0026c27c314d9mr2468757ljp.480.1663245511714; Thu, 15 Sep 2022 05:38:31 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Thu, 15 Sep 2022 22:38:19 +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="000000000000e6ea7105e8b68536" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e6ea7105e8b68536 Content-Type: text/plain; charset="UTF-8" On Tue, Sep 6, 2022 at 12:18 AM Ajin Cherian wrote: > > 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 > Rebasing as the patch no longer applies. regards, Ajin Cherian Fujitsu Australia --000000000000e6ea7105e8b68536 Content-Type: application/octet-stream; name="v21-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v21-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l831eupi3 RnJvbSA0MTk3OWFkNDcyYTFiNzI0ZTlhNjA5YWI3MWNjZDc4NTVmZTk0N2Q4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMTUgU2VwIDIwMjIgMDg6MTU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMSA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQ2NSArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NjZkY2IwMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQ RSBteXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgx LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJM RSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlw ZSBBUyBFTlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKCduZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBP RiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhf cmFuZ2UgQVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1p KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwg ZmxvYXQ4X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJpbnNlcnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2Uz JykpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICog ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRF IFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNF IERBVEEgVFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZV TkNUSU9OIGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGlu JworICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElP TiBpbnQ0Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0Jwor ICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQy ICgKKyAgIGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRw dXQgPSBpbnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAor ICAgcGFzc2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VS VCBJTlRPIHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0Miks ICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERM IHJlcGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwor JG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjEuOC4zLjEKCg== --000000000000e6ea7105e8b68536 Content-Type: application/octet-stream; name="v21-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v21-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l831eupg2 RnJvbSA3MjVlY2U4NThjZjM0ZjUxOTZjNGU5YzAyMmY5ZThlYjliMTcwNmYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMTUgU2VwIDIwMjIgMDc6NTk6MjcgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMSAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyNCArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggNTI2YmM2YS4uMTRhZWQ3OCAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC02NDEwLDYgKzY0MTAsMjcgQEAgZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogfQogCiAvKgorICogRGVwYXJz ZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8g dGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisg KiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2Jq ZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf Q3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisKKy8qCiAgKiBIYW5k bGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNo b3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCkBAIC02 NjQ2LDYgKzY2NjcsOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9BbHRlclRhYmxlOgogCQkJdHJl ZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9D cmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsK KwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2Vf QWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggMDJhZGUyNi4uZDliY2Y0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVu dFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9 IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQor CQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNn KCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENy ZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRl IHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9k cm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAg fHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkK IAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJ ZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBA IC01ODUsNyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVl LAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9 PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8 fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAor CQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFn X2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBj b21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2 ICs4NzEsMTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9p ZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQog CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFy ZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFu ZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9s ZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50 IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYg KCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNv bW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5 cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGlu Z19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRk cmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBh cnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5k CisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29t bWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2li aWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdo LiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmln Z2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBp ZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAq LworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKwor CXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2Ug dGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVi bGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ Y2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJ CQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5m bykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7 CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFz c2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBs b2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRh YmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFi bGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQg YWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2li bGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNv bWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgor CSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQg V0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmlu ZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3Ry aW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNp bXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmlu Zywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICov Cit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2Vy RGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBT ZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5 IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJ ICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNv IGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUg aWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUg c3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0 aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVz ZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBk aWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBp ZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdn ZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUlu aXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJp Z2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSBy ZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQt PmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRy ZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2Vy SW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJl ZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmln Z2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8K KwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZl bnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyAr MTMwOSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4g KEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVM b29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChF VlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENv bW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdy aXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJp Z2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BG YW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0Nv bmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICpp ZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2 ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0g Y21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJ CQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0g Y21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2Fz IGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGI1ODEyMTYuLmM5Mzc4NzQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05OTksNiArOTk5LDExIEBAIENyZWF0ZVB1Ymxp Y2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQog CQkJQ01EVEFHX0FMVEVSX0lOREVYCiAJCX07CiAKKwkJQ29tbWFuZFRhZwlpbml0X2NvbW1hbmRz W10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01EVEFHX1NFTEVDVF9JTlRP CisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAq LwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQiLCBlbmRf Y29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJv aWQpOwpAQCAtMTAxMCw2ICsxMDE1LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkvKiBDcmVhdGUgdGhlIHRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmln Z2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhv ZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUg dGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVu dFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxl bmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJfQogCiAJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYWEwMDgxNS4uZmI1 ZTY3OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2NSwxMCBAQCBQcm9jZXNzVXRpbGl0 eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfQ3JlYXRl VGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChwYXJzZXRy ZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVhdGVUYWJs ZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYsIHFjKTsK KwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgpOwogCQkJCWJyZWFrOwogCiAJCQlj YXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKaW5k ZXggZjdmNzE2NS4uN2ZiOGNiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0x NjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBF VlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIp ID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChl dnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJ bml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCAyZmIzNjU0Li40N2EzOTNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODM1 LDQgKzExODM1LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlv bl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmlu ZGV4IGZkMmVlN2YuLmE5ZTBmNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQo Tm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAq cGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpw YXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lk IEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVz cyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZv aWQpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7 CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJu IGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2Vf dXRpbGl0eS5oCmluZGV4IGI1MzI5NGIuLjNkMjk0YTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0 aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5 cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlT Q1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmln LAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAt MTAxLDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJ CU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJ CQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJ Y3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdo ZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2Li4xZTY0ODMxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENv bW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFi bGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZl bnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0tIAoxLjguMy4xCgo= --000000000000e6ea7105e8b68536 Content-Type: application/octet-stream; name="v21-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v21-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l831eupf1 RnJvbSBlNDc5Y2Q2ZGUwNTk2YjBmYmFmOTAxZDNkMTEzYWQ1NzgyMmQyNTUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMTUgU2VwIDIwMjIgMDc6NTE6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMSAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FM IGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQg ZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4u KSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoK Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBmb3IgQUxURVIgSU5ERVggY29tbWFuZCBpcyBzdGls bCB1bmRlcgpwcm9ncmVzcy4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2NvbW1hbmQgc3RhcnQn IGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUg dGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0 KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0 aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExh dGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9w IG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2Vu ZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxp ZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMg YmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBl bmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBh cyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBm b3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZl cmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3Qu IFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRv IHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBj b3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFz IHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMg Zm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0 YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQURE IENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFy c2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlz aGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0 ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQg dGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpj b25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwg bXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlz IHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gK ZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRv IGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcK cmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8g a2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhl IGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5k IHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBs b2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdy aXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFy c2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYyAgICAgICAgICAgIHwgMjMxICsrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgICB8IDEzMyArKysrKysrKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2ICsr KysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgICAgfCAg NDEgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8 ICA5MyArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAg ICAgIHwgIDQ4ICsrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMgfCAxMzYgKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsr KysrKysrKysrKy0tLS0tLS0tLS0tLQogMzEgZmlsZXMgY2hhbmdlZCwgMTYyMyBpbnNlcnRpb25z KCspLCAyMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmLi5iOGUyOWU4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2Mu byBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCisJbG9naWNhbGRkbG1zZ2Rl c2MubyBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2MubyBcCiAJcmVsbWFwZGVzYy5vIFwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkZWU1MgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAg KzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMK KyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2Rk bG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAg ICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dl dEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJ Q0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAo eGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVj LT5tZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+ cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxy ZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInBy ZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJl Yy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0 eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3Nh Z2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0g MDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsK KwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNn X2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09 IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwly ZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA2YWYz NTcwLi5iZGY0MmE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1 LDYgKzEwMDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9 IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3Jt LT5wdWJkZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJl bGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4 IDYzNWQwNTQuLjAyYWRlMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAg LTM3LDggKzM3LDExIEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2Vy L3BhcnNlX2Z1bmMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1 ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisj aW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAg LTE1MzcsNiArMTU0MCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJz ZXRyZWUpCiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRp b25JZDsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRh YmxlLnN1YmNtZHMgPSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJz ZXRyZWUpOwogCkBAIC0xNTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVs aWQoT2lkIG9iamVjdElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMg Y29kZSBuZWVkcyB0byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MpCitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQs IE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQg b2xkY3h0OwogCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBA QCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+ cGFyc2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3Vi Y21kcyA9CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyMjcg QEAgc3RyaW5naWZ5X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJl dHVybiAiPz8/IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRk bCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAq dHJpZ2RhdGE7CisJY2hhcgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5k IHN0YXJ0Iik7CisJRHJvcFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFD QUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVk IGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2Vy RGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEt PnBhcnNldHJlZTsKKworCS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUg Ki8KKwlmb3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0 OworCQlOb2RlCSpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJl c3M7CisJCVJlbGF0aW9uIHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVj dF9hZGRyZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJ ICZyZWxhdGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRy dWUpOworCisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0 SWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3 aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlm IChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3Nl KHJlbGF0aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERM TWVzc2FnZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwK KwkJCQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9u KQorCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jl d3JpdGUKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBs b2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFu ZCAgICpjbWQ7CisJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VW RU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0 cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3Vy cmVudENvbW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUp OworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUu b2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFu ZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkg KiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1 bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3Rs eSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3 cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJl bHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRv IGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkK KwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmpl Y3RJZCwgRENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9z dHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgor ICogcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRo ZSBkZGwgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsK KwlzbGlzdF9pdGVyICBpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVs aWQ7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJS T1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxj LCBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQly ZWxwZXJzaXN0ID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5k ICAgKmNtZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyog UmV3cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8K KwkJaWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJl bmFtZVN0bXQgPSAoUmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1l U3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVs YXRpb25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChj bWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7 CisJCQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5 IFNDVF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mu b2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVs X3JlbGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVs aWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3 aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlm IChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkv KgorCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJz ZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5V TEwpCisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJl bGlkLCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEp OworCX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PlNRTERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJv cFN0bXQJCQkgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQlj aGFyCQkJCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCisJ CXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10 CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2Nv bnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJv cEVuZDsKKwkJZWxzZSBpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgIm9wZXJhdG9yIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3Bl cmF0b3IgY2xhc3MiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVy YXRvciBmYW1pbHkiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjYXN0 IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHlwZSIpID09IDAgfHwK KwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImRvbWFpbiIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInRyaWdnZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJjb252ZXJzaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAicG9saWN5IikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJ ZWxzZQorCQkJY29udGludWU7CisKKwkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9i ai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2 aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9n aWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUs CisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCmluZGV4IDhiNTc0YjguLmI1ODEyMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNz LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9w YXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05NSw2ICs5Nyw3 IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFj dGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsK IAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0g ZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJz ZSBvcHRpb25zICovCkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9u cyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7 CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJ CQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1 Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsK IAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLApAQCAtNzQ5LDYgKzc1NCw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1u TGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogfQogCiAvKgorICog Q3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgor ICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVu dG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmpl Y3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJCQlp OworCUxpc3QJCQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0 QWRkcmVzcwkJcmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsK KwljaGFyCQkJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0cmlnZ2VyX2Z1 bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9uYW1l X3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICAg KnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxf dHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJp Z2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJ CSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVv Zih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1l KTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlk ZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFt ZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkg PCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVw KEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFwcGVuZCh0YWdz LCB0YWcpOworCX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtl RGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVh dGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZl bnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICogcHVibGljYXRp b24uCisJICovCisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxh dGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZw dWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKworLyoKICAqIENyZWF0ZSBuZXcg cHVibGljYXRpb24uCiAgKi8KIE9iamVjdEFkZHJlc3MKQEAgLTgyMCw2ICs4NzIsOCBAQCBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNbQW51 bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAt IDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1ZXNbQW51bV9w Z19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04ODIsNiArOTM2LDgyIEBAIENyZWF0ZVB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQl9 CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0byBhbGxvdyBsb2dnaW5n IG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVlZCB0byBmaW5kIGEgYmV0 dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkgKiBzdGF0ZW1lbnRzLgor CSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRoZSByZXBsaWNhdGlvbiBv ZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBuZWVkIHRvIGVuaGFuY2Ug dGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGljYXRpb24gaXMgZmluYWxp emVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJCUNvbW1hbmRUYWcJc3Rh cnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNvbW1hbmRUYWcJcmV3cml0 ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJQ29tbWFuZFRhZwllbmRf Y29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfUE9MSUNZLAorCQkJQ01EVEFHX0FMVEVS X1BPTElDWSwKKwkJCUNNRFRBR19EUk9QX1BPTElDWSwKKwkJCUNNRFRBR19DUkVBVEVfQ09OVkVS U0lPTiwKKwkJCUNNRFRBR19BTFRFUl9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0RST1BfQ09OVkVS U0lPTiwKKwkJCUNNRFRBR19DUkVBVEVfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwK KwkJCUNNRFRBR19EUk9QX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRB R19DUkVBVEVfVFlQRSwKKwkJCUNNRFRBR19EUk9QX1RZUEUsCisJCQlDTURUQUdfQUxURVJfVFlQ RSwKKwkJCUNNRFRBR19DUkVBVEVfQ0FTVCwKKwkJCUNNRFRBR19BTFRFUl9DQVNULAorCQkJQ01E VEFHX0RST1BfQ0FTVCwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1IsCisJCQlDTURUQUdfQ1JF QVRFX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksCisJ CQlDTURUQUdfQUxURVJfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9S X0NMQVNTLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFU T1IsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19EUk9QX09QRVJB VE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0FMVEVS X1BST0NFRFVSRSwKKwkJCUNNRFRBR19EUk9QX1BST0NFRFVSRSwKKwkJCUNNRFRBR19DUkVBVEVf RlVOQ1RJT04sCisJCQlDTURUQUdfQUxURVJfRlVOQ1RJT04sCisJCQlDTURUQUdfRFJPUF9GVU5D VElPTiwKKwkJCUNNRFRBR19DUkVBVEVfVFJJR0dFUiwKKwkJCUNNRFRBR19BTFRFUl9UUklHR0VS LAorCQkJQ01EVEFHX0RST1BfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFLAorCQkJQ01E VEFHX0FMVEVSX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwKKwkJCUNNRFRBR19B TFRFUl9TRVFVRU5DRSwKKwkJCUNNRFRBR19EUk9QX1NFUVVFTkNFLAorCQkJQ01EVEFHX0NSRUFU RV9TQ0hFTUEsCisJCQlDTURUQUdfQUxURVJfU0NIRU1BLAorCQkJQ01EVEFHX0RST1BfU0NIRU1B LAorCQkJQ01EVEFHX0NSRUFURV9JTkRFWCwKKwkJCUNNRFRBR19EUk9QX0lOREVYLAorCQkJQ01E VEFHX0FMVEVSX0lOREVYCisJCX07CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfc3RhcnQg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9zdGFydCIsIHN0YXJ0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHN0YXJ0X2Nv bW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfcmV3cml0 ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxl X3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHJld3JpdGVf Y29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9u UmVsYXRpb25JZCwgcHVib2lkLCAwKTsKQEAgLTEwMjIsNiArMTE1Miw5IEBAIEFsdGVyUHVibGlj YXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQsCiAKIAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IEJv b2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKIAkJcmVwbGFjZXNbQW51bV9wZ19w dWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19w dWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7 CisJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSB0cnVlOwogCX0K IAogCWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbikKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKaW5kZXggZTMyMzNhOC4uYTZjNzM4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKQEAgLTUyNTMsNyArNTI1Myw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVk VGFibGVJbmZvICp0YWIsCiAJICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQg ZXZlbnQgdHJpZ2dlcnMuCiAJICovCiAJaWYgKGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFs dGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUp OwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0 IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9NYWtlZmlsZQppbmRleCBjNGUyZmRlLi5mM2VlYjY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUgQ1BQRkxBR1Mg Oj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlkZWNvZGUubyBcCisJZGRs bWVzc2FnZS5vXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBcCiAJbG9naWNhbGZ1bmNzLm8g XApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkzNTIzCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4 NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2lj YWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisg KgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21t YW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBw bHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9P UC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVz c2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1vZGUuTm90ZSBieSBkZWZhdWx0IERE THMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBUaGVzZSBtZXNzYWdl cyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJlIHNlbnQgdG8KKyAq IGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBvcGVyYXRpb25zLgor ICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQgY29uZmxpY3RzIGJl dHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1Z2luIGF1dGhvcnMg bXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisgKiBnb29kIG9wdGlv bnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNp b24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9naW5z ZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2FsIGRlY29kaW5nIERE TCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9naWNhbERETE1lc3Nh Z2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXplKQoreworCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkvKgorCSAqIEVuc3VyZSB3ZSBoYXZlIGEgdmFs aWQgdHJhbnNhY3Rpb24gaWQuCisJICovCisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsK KwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJ ZDsKKwkvKiB0cmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNj ICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVz c2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUg PSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hh ciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRh KHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1Jl Z2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogYWxs b3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVf T1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0df TE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0 IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dp Y2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8g PSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAh PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNn X3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGlu dGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAxNjY3ZDcyLi42NjY2ZDU3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2 LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vb3JpZ2luLmgiCkBAIC02MDQsNiArNjA1LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogfQogCiAvKgor ICogSGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJ bnRvUmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFw QnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJTdGF0 ZSAqciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhpZChy KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7CisJ UmVwT3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dpY2Fs X2RkbF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9N RVNTQUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lEIHJl Y29yZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5y ZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJZiB3 ZSBkb24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywgdGhl cmUgaXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJaWYg KFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9U IHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2FnZS0+ ZGJJZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4oY3R4 LCBvcmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5nZShi dWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3Nh Z2UoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1l c3NhZ2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJCSBt ZXNzYWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3Nh Z2UtPnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5jbWR0 eXBlKTsKK30KKworLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5nIGJl dHdlZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KICAqCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCmluZGV4IDYyNWE3ZjQuLjk4OTY5 YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2 ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBA QCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3Qg Y2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7Citz dGF0aWMgdm9pZCBkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBj b25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICovCiBzdGF0aWMgdm9pZCBzdHJlYW1f c3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLApAQCAtOTAsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRpYyB2 b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9v bCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9kZGxt ZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1 ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVs YXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl KTsKIApAQCAtMjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0 cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0cnVu Y2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dyYXBw ZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+ cmVvcmRlci0+ZGRsbWVzc2FnZSA9IGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAogCS8qCiAJICog VG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9jb21taXQv Y2hhbmdlCkBAIC0yMzQsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpv dXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY29tbWl0X2Ni ICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fY2hhbmdlX2NiICE9IE5VTEwp IHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAorCQko Y3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+ Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNTEsNiAr MjYzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlv bnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFw cGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3Jh cHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jf d3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGxtZXNzYWdlID0gc3RyZWFtX2RkbG1l c3NhZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVh bV90cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAKQEAgLTEyMjEsNiArMTIzNCw0NCBAQCBtZXNzYWdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IH0KIAogc3RhdGljIHZvaWQKK2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sCisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBj aGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5w cml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNv bnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQp OworCisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJu OworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sg Ki8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdl IjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5j YWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJn ID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4 dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0 IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0 ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJ Y3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3 b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgs IHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNz YWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICov CisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0 aWMgdm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQogewpAQCAt MTUzNiw2ICsxNTg3LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK3N0cmVh bV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwK KwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Cit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsK KwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNr IGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdy ZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQu ICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVM TCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9 ICJzdHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9s c247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNr OworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2 aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJj YWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMg PSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFs aWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwor CS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tz LnN0cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxp ZCwKKwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNh bGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ CSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKIAkJCQkJCSAgIFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJv dG8uYwppbmRleCBmZjg1MTNlLi5mMzU0MDYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9wcm90by5jCkBAIC02NjMsNiArNjYzLDUyIEBAIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2Fn ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogfQog CiAvKgorICogUmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2lj YWxyZXBfcmVhZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJ CQkJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50 OCBmbGFnczsKKwljaGFyICptc2c7CisKKwkvL1RPRE8gZG91YmxlIGNoZWNrIHdoZW4gZG8gd2Ug bmVlZCB0byBnZXQgVHJhbnNhY3Rpb25JZC4KKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAx KTsKKwlpZiAoZmxhZ3MgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAl dSBpbiBkZGwgbWVzc2FnZSIsIGZsYWdzKTsKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOwor CSpwcmVmaXggPSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwg NCk7CisJbXNnID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4g bXNnOworfQorCisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQK K2xvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2Vu ZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSk7CisKKwkvKiB0cmFuc2FjdGlv biBJRCAoaWYgbm90IHZhbGlkLCB3ZSdyZSBub3Qgc3RyZWFtaW5nKSAqLworCWlmIChUcmFuc2Fj dGlvbklkSXNWYWxpZCh4aWQpKQorCQlwcV9zZW5kaW50MzIob3V0LCB4aWQpOworCisJcHFfc2Vu ZGludDgob3V0LCBmbGFncyk7CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3Ry aW5nKG91dCwgcHJlZml4KTsKKwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVz KG91dCwgbWVzc2FnZSwgc3opOworfQorCisvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRp b24gdG8gdGhlIG91dHB1dCBzdHJlYW0uCiAgKi8KIHZvaWQKQEAgLTEyMTgsNiArMTI2NCw4IEBA IGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJl dHVybiAiVFlQRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4g Ik1FU1NBR0UiOworCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJcmV0dXJu ICJEREwiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJu ICJCRUdJTiBQUkVQQVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggODlj ZjlmOS4uZWJjZmUxNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZW9yZGVyYnVmZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVh cC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Nsb3QuaCIKQEAgLTUxNSw2ICs1MTYsMTQgQEAgUmVvcmRlckJ1ZmZlclJl dHVybkNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl LAogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0RETE1FU1NBR0U6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggIT0gTlVM TCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCk7CisJCQljaGFuZ2UtPmRh dGEuZGRsbXNnLnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNz YWdlICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwkJ CWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5p bnZhbC5pbnZhbGlkYXRpb25zKQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlk YXRpb25zKTsKQEAgLTg3MCw2ICs4NzksMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShS ZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiB9CiAKIC8qCisgKiBBIHRyYW5z YWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1p dC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sK KwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl OworCisJQXNzZXJ0KHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisKKwlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJiLT5jb250ZXh0KTsKKworCWNoYW5nZSA9IFJlb3Jk ZXJCdWZmZXJHZXRDaGFuZ2UocmIpOworCWNoYW5nZS0+YWN0aW9uID0gUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX0RETE1FU1NBR0U7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBwc3RyZHVw KHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCA9IHJlbGlkOworCWNoYW5nZS0+ ZGF0YS5kZGxtc2cuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNz YWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0g cGFsbG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZSwgbWVzc2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShy YiwgeGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworfQorCisvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNO IG9yZGVyaW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCiAgKgpA QCAtMTk2OSw2ICsyMDA4LDI5IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogLyoKKyAqIEhlbHBlciBmdW5j dGlvbiBmb3IgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVz c2FnZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNz YWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJaWYgKHN0cmVh bWluZykKKwkJcmItPnN0cmVhbV9kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJ CQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEu ZGRsbXNnLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJ CQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJCQkJCQkJICBjaGFuZ2Ut PmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCWVsc2UKKwkJcmItPmRkbG1lc3NhZ2UocmIsIHR4biwg Y2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNn LmNtZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworfQorCisvKgogICogRnVuY3Rpb24g dG8gc3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1 cnJlbnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5k aW5nIHRoZSBuZXh0IHN0cmVhbS4KICAqLwpAQCAtMjM0OCw2ICsyNDEwLDEwIEBAIFJlb3JkZXJC dWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQkJCVJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1p bmcpOwogCQkJCQlicmVhazsKIAorCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1F U1NBR0U6CisJCQkJCVJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdl LCBzdHJlYW1pbmcpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOVkFMSURBVElPTjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3Nh Z2VzIGxvY2FsbHkgKi8KIAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNo YW5nZS0+ZGF0YS5pbnZhbC5uaW52YWxpZGF0aW9ucywKQEAgLTM3NzMsNiArMzgzOSw0MCBAQCBS ZW9yZGVyQnVmZmVyU2VyaWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJ CQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsK KwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihT aXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJ ZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0No YW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJ CQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJ CS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6 ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJ ZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRs bXNnLnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQlt ZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9mKGludCkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5k ZGxtc2cucHJlZml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSArPSBwcmVmaXhf c2l6ZTsKKworCQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsIHNpemVv ZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsIGNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5W QUxJREFUSU9OOgogCQkJewogCQkJCWNoYXIJICAgKmRhdGE7CkBAIC00MDg3LDYgKzQxODcsMTUg QEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQog CiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NB R0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRk bG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkg KyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQlzeiArPSBzaXpl b2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpAQCAtNDM2Miw2ICs0NDcxLDMzIEBAIFJl b3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJl YWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUp KTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5k ZGxtc2cucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQp OworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBkYXRhLCBzaXplb2Yo aW50KSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOwor CQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUp OworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFd ID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBt ZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0 YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJ CQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHko Y2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6 ZTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZB TElEQVRJT046CiAJCQl7CiAJCQkJU2l6ZQkJaW52YWxfc2l6ZSA9IHNpemVvZihTaGFyZWRJbnZh bGlkYXRpb25NZXNzYWdlKSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwppbmRleCBlYWNhNDA2Li5mNGMyYjczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6 ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2lu dGVycnVwdC5oIgpAQCAtMTc5LDcgKzE4MCwxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5 LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTI0NjMsNiArMjQ2NywyMzAgQEAgYXBwbHlf aGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwog fQogCisvKiBSZW1vdmUgdGhlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCitz dGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sK KwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRh ZygoTm9kZSAqKWNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBD TURUQUdfQ1JFQVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsK KwkJCQlDcmVhdGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNv bW1hbmQtPnN0bXQ7CisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJ CQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8g YXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNh dGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJ Y2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJ CWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxl Y3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0g TlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxh dGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJl IHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAq LworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0K KwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBD UkVBVEUgVEFCTEUgY29tbWFuZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUg Zm9yIENSRUFURSBUQUJFTCBjb21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJF TF9TVEFURV9SRUFEWSBzbyBETUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVw bGljYXRlZCB3aXRob3V0CisgKiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3Jp cHRpb24gLi4uIHJlZnJlc2ggcHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVf Y3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFn OworCVJhbmdlVmFyCSAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVz cGFjZSA9IEludmFsaWRPaWQ7CisJY2hhciAJCSAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkJ ICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2Rl ICopIGNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdf Q1JFQVRFX1RBQkxFOgorCQkJeworCQkJCUNyZWF0ZVN0bXQgKmNzdG10ID0gKENyZWF0ZVN0bXQg KikgY29tbWFuZC0+c3RtdDsKKwkJCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwkJCX0KKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOwor CisJc2NoZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsK KworCWlmIChzY2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3Bh Y2Vfb2lkKHNjaGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxp ZE9pZCkKKwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2Up OworCWVsc2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAocmVs aWQgIT0gSW52YWxpZE9pZCkKKwl7CisJCUFkZFN1YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2Ny aXB0aW9uLT5vaWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxfU1RBVEVfUkVBRFksCisJCQkJCQkJ CUludmFsaWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRl cm5hbCgidGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAorCQkJCQkJ CQkgcmVsbmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJfQorfQorCitzdGF0aWMgdm9p ZAorYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0ciBsc247CisJ Y29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwljaGFyICptZXNzYWdlID0gTlVMTDsKKwljaGFy CSAgICpkZGxfY29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsK KwlMaXN0Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOwor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5 X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3Jl YWRfZGRsbWVzc2FnZShzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFrZSBzdXJlIHdl IGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVw KCk7CisKKwlkZGxfY29tbWFuZCA9IGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKG1lc3NhZ2Up OworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVzdE5vbmUgZm9y IGxvZ2ljYWwgcmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNlaXZlcihE ZXN0Tm9uZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29tbWFuZCk7 CisKKwlmb3JlYWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7CisJCUxpc3QJ ICAgKnBsYW50cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCQlSYXdTdG10 CSAgICpjb21tYW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVtKTsKKwkJQ29t bWFuZFRhZwljb21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4 dCA9IE5VTEw7CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQkgc25hcHNob3Rfc2V0ID0gZmFs c2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7 CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNv bW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUg ZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2Ug YW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3Jl cXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKwor CQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1s aXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBh cmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9j b250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJ CQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlz dCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJ CQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJ cGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1h bmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFy c2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNo b3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0 cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcg aW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3Npbmcg aGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVl X2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLwor CQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9j b21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJ CQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVy cyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25h cHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQg Zm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJ CQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVy LAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29t bWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERE TCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRk ZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJs ZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29u dGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9w YXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1 Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwogCiAvKgogICog TG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0yNTI4 LDYgKzI3NTYsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQli cmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJYXBwbHlfaGFu ZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9T VEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDYyZTBmZmUuLjRl MjRhYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpA QCAtNTMsNiArNTMsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFy ICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGlj IHZvaWQgcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lk IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK QEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNh bGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1 bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0 X21lc3NhZ2U7CisJY2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNi LT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVf Y2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdf b3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVh bV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdl X2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0 X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2Fn ZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJh bnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJl cGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBA QCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1 Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wu ICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlv cHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0 aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBA QCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1 Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRh dGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJ CXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxs YmFjayhQVUJMSUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9u X2NiLApAQCAtMTM4MSw5ICsxMzkwLDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hh bmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Ns b3QgPSBOVUxMOwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJCXRh YmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgs IGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8g cmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdy aXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlIGFuZAorCSAq IGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwt PnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBS ZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRh cmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24o cmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTE0MTcsNiArMTQzOSwxMyBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJs ZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBt ZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5n IGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDQ2LDggKzE0NzUsOCBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93 X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkg JmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2Zp bHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJ CWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ2Nyw4ICsxNDk2LDE5IEBAIHBnb3V0cHV0X2NoYW5nZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1h eWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlP dXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVf aW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhl IHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAq IGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3 ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAq LworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4 LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5i aW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2lj YWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJ CQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVn aW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX1VQREFURToKQEAgLTE1OTgsNiArMTYzOCw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3Ig PSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlN ZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNjc1LDggKzE3MTgsOCBAQCBw Z291dHB1dF90cnVuY2F0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAogc3RhdGljIHZvaWQKIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCi0JCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHN6LAotCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCisJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRw dXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOwogCVRyYW5zYWN0aW9uSWQgeGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CkBAIC0xNzE2LDYgKzE3NTksMTM3IEBAIHBnb3V0cHV0 X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorc3RhdGljIHZvaWQKK3Bn b3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0g KFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4 bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9w cml2YXRlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKwor CS8qCisJICogUmVtZW1iZXIgdGhlIHhpZCBmb3IgdGhlIG1lc3NhZ2UgaW4gc3RyZWFtaW5nIG1v ZGUuIFNlZQorCSAqIHBnb3V0cHV0X2NoYW5nZS4KKwkgKi8KKwlpZiAoaW5fc3RyZWFtaW5nKQor CQl4aWQgPSB0eG4tPnhpZDsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1Rh YmxlRHJvcFN0YXJ0OgorCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQg dG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEg cHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uIFdlCisJCQkgKiBuZWVk IHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJ CQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZv ciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25s eSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24g PSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOwor CQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlp ZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRz ID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRp b25DbG9zZShyZWxhdGlvbik7CisJCQlyZXR1cm47CisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoK KwkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJ CQkJcmV0dXJuOworCQkJZWxzZQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxl dGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisJCQlicmVhazsKKwkJY2FzZSBE Q1RfVGFibGVBbHRlcjoKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZp cnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlIHRvCisJCQkgKiBzdWJzY3JpYmVyLCB0 aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvIFVQREFURSBhbmQKKwkJ CSAqIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJs aXNoZXIgYW5kCisJCQkgKiBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJ CSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgor CQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBi ZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFr ZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIKKwkJCSAqIHdoaWNoIGRvZXNuJ3Qg ZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQKKwkJ CSAqIHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJl d3JpdGUgYWxsIHRoZQorCQkJICogZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhl IGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9u ZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rp b25zL29wZXJhdG9ycyB1c2VkCisJCQkgKiBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8g cmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcAorCQkJICogdGhlIGRhdGEgY29u c2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMg YnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciBvbmx5CisJCQkgKiByZXdyaXRlIHRoZSBleHRyYSBk YXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQgdXNlIHRoZQorCQkJICogdXBj b21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gQmVzaWRlcywg d2UgbWF5CisJCQkgKiBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5 cGUgb2YgcmV3cml0ZSBkZGwsIGZvcgorCQkJICogZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBz a2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgorCQkJICogVEFCTEUgU0VUIExP R0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZQorCQkJICog Y2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVs aWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNf ZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMg ZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlIGRkbAorCQkJICogbmVl ZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAo IXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2Fz X3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJ CXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJl bGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9u ID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5 KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwp CisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQor CisJCQlicmVhazsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8K KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUg JWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2 ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJ CXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdy aXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0eC0+b3V0LAor CQkJCQkJCQl4aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJ CQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUp OworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoK ICAqIFJldHVybiB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4g YW5kIHRoZSB1c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2 ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTcsNyArMjE3MSw4IEBAIGdldF9y ZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQll bnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7 CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0g ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xv dCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4 cHJzdGF0ZSkpOwpAQCAtMjA1NSw2ICsyMjMwLDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFj dGlvbnMucHViZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMu IChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjgsNiArMjM0NCw3IEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9u KQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVi dXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlv bnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+ cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0g cHViLT5wdWJhY3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJs aXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAtMjM1Myw2ICsyNTMw LDcgQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwgdWludDMyIGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxz ZTsKIAl9CisKIH0KIAogLyogU2VuZCBSZXBsaWNhdGlvbiBvcmlnaW4gKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCmluZGV4IDAwZGMwZjIuLmYxYjRkMDkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcmVsY2FjaGUuYwpAQCAtNTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0 aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1 YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJCS8qCiAJ CSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBleHByZXNz aW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA2N2I2ZDkwLi45YjM4YTdjIDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKQEAgLTM4OTYsNiArMzg5Niw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBp bnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRl bGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsOwogCWludAkJCWlf cHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMSwyMyArMzkxMiwyMyBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ cmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8K LQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZvdXQtPnJlbW90ZVZl cnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkg IlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93 bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRl LCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCQkgInAu cHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1 YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVi bGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQog CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lk LCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg ZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBw Z19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwK IAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJ ICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAu cHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRk bCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAi KTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQ TEVTX09LKTsKQEAgLTM5NDMsNiArMzk0NCw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpm b3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUi KTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9w dWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVt YmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBz aXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTY2LDYgKzM5NjgsOCBAQCBnZXRQdWJsaWNh dGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBR Z2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0u cHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0 ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2 YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFy b290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0Iikg PT0gMCk7CiAKQEAgLTQwNDUsNiArNDA0OSwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAq Zm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwog CX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJD aGFyKHF1ZXJ5LCAnXCcnKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFyb290KQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK aW5kZXggNjllZTkzOS4uNmM1NWRlMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MjAsNiArNjIwLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29s CQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290OworCWJvb2wJCXB1YmRkbDsKIH0gUHVi bGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3Jk ZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2YjhjMTdiLi43OTJm NDM4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMv YmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNv bW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5jbHVkZSAicm1n cmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgiCmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGM2 NDVkNjYuLjJlOTRmY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBi L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MTU5LDcgKzYxNTksNyBAQCBsaXN0UHVibGlj YXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKIAlQR3Jl c3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9wdDsKLQlzdGF0aWMg Y29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJc3RhdGljIGNvbnN0IGJvb2wgdHJh bnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJzaW9uIDwgMTAwMDAw KQogCXsKQEAgLTYxOTQsNiArNjE5NCwxMCBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIg KnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICIsXG4gIHB1YnZp YXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpKTsKKwlp ZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJ CQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIkRE THMiKSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdf Y2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CkBAIC02Mjg0LDYgKzYyODgsNyBAQCBkZXNjcmli ZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBHcmVzdWx0ICAgKnJlczsKIAli b29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZpYXJvb3Q7CisJYm9vbAkJaGFz X3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlwcmludFRhYmxlQ29udGVudCBj b250OwpAQCAtNjMwMCw2ICs2MzA1LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hh ciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChwc2V0LnN2ZXJzaW9uID49IDExMDAw MCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lvbiA+PSAxMzAwMDApOworCWhhc19w dWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKTsKIAogCWluaXRQUUV4cEJ1ZmZlcigm YnVmKTsKIApAQCAtNjMxMyw2ICs2MzE5LDkgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnZpYXJvb3QiKTsKKwlpZiAoaGFzX3B1YmRkbCkKKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiwgcHViZGRsIik7CiAJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25cbiIpOwogCkBAIC02MzY0LDYgKzYzNzMsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNvbHMrKzsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQog CQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQluY29scysrOwogCiAJCWluaXRQUUV4 cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQUUV4cEJ1ZmZlcigmdGl0bGUsIF8oIlB1YmxpY2F0 aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM3OCw2ICs2Mzg5LDggQEAgZGVzY3JpYmVQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQs IGdldHRleHRfbm9vcCgiVHJ1bmNhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJaWYgKGhhc19wdWJ2 aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJWaWEg cm9vdCIpLCB0cnVlLCBhbGlnbik7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFk ZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJERExzIiksIHRydWUsIGFsaWduKTsKIAogCQlw cmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDIpLCBmYWxzZSwgZmFs c2UpOwogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDMpLCBm YWxzZSwgZmFsc2UpOwpAQCAtNjM4OCw2ICs2NDAxLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJ CXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOCksIGZhbHNlLCBm YWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBR Z2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2UsIGZhbHNlKTsKIAogCQlpZiAoIXB1YmFsbHRhYmxl cykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCAwMDBiY2JmLi4zN2RmZDQ1IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1JVF9UU19JRCwg IkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21taXRfdHNfaQog UEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCByZXBsb3JpZ2lu X3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBnZW5lcmljX3Jl ZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJpY19t YXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1lc3NhZ2UiLCBs b2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVudGlmeSwgTlVM TCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xPR0lDQUxERExN U0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywgbG9naWNhbGRk bG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dp Y2FsZGRsbXNnX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDBiZmFlYjkuLjJm YjM2NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4MjYsNCArMTE4MjYsMTMgQEAK IHsgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBqc29uIGZvcm1hdCBEREwgdG8gYSBw bGFpbiBEREwgY29tbWFuZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21t YW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJv c3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0Jywg ZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UnLAorICBwcm9uYW1lID0+ ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2 ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlv bl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4g J3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdw dWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9u YW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGlj YXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5oCmluZGV4IGMyOTgzMjcuLmFhMmIwYzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0 LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMg YXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisK KwkvKiB0cnVlIGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHVi ZGRsOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpA QCAtNzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFjdGlvbnMKIAlib29s CQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJv b2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJs aWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCAxMDA5MWMz Li5mZDJlZTdmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3 MSw4IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVj dEFkZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFy dChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJl bGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJl c3MpOworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9v bCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7 CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICpp c3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYThkY2E4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNB TF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5j bHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNs dWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKwor LyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisg Ki8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwK KwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRl ciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFu ZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2Fs IHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQorewor CU9pZAkJCQkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJ CQkJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJCQkJcmVsaWQ7 CQkJLyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsJ CS8qIHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXplCQkJCQltZXNzYWdlX3NpemU7CSAgLyog c2l6ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVs bC10ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQlt ZXNzYWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7 CisKKyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxf ZGRsX21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERM TWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBz aXplKTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJ MHgwMAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsK K3ZvaWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZv KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDc0MWJmNjUuLjQyN2E3 YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2 b2lkIGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2Rl Y29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7 CiBleHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsbXNnX2Rl Y29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7 CiAKIGV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IGE3NzFhYjguLjJhYmNjYjgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBi L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC02MSw2ICs2MSw3IEBA IHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxfUkVQX01TR19SRUxBVElP TiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0df TUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSA9ICdMJywKIAlMT0dJ Q0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFS RSA9ICdQJywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjI5 LDcgKzIzMCwxMSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3RydW5jYXRlKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3Jl YWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9v bCAqcmVzdGFydF9zZXFzKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShT dHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAotCQkJCQkJ CQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25z dCBjaGFyICptZXNzYWdlKTsKKwkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJh bnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnBy ZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gY2hhciAqbG9naWNh bHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLCBjb25z dCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRl X3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCSBSZWxhdGlv biByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbGF0aW9uICps b2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v b3V0cHV0X3BsdWdpbi5oCmluZGV4IGI3ZDI4ZDcuLjc2M2U0M2YgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTkxLDYgKzkxLDE4IEBAIHR5cGVkZWYgdm9pZCAo KkxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2FsbGVkIGZv ciB0aGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAo KkxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkg ICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZp eCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCisvKgogICogRmlsdGVyIGNoYW5nZXMgYnkgb3Jp Z2luLgogICovCiB0eXBlZGVmIGJvb2wgKCpMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQikg KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yMDIsNiArMjE0LDE5IEBA IHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CiAKIC8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERM IG1lc3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRl ZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3Np emUsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKKy8qCiAgKiBDYWxsYmFj ayBmb3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4K ICAqLwogdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbVRydW5jYXRlQ0IpIChzdHJ1 Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjIxLDYgKzI0Niw3IEBAIHR5cGVk ZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNC IHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNh bERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0Ig ZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlf b3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNodXRkb3duX2NiOwogCkBAIC0y MzksNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9n aWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXRfY2I7CiAJTG9naWNhbERlY29k ZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbU1l c3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2Fn ZUNCIHN0cmVhbV9kZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNC IHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1Li44M2UwYjFlIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRw dXREYXRhCiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9uOwogCUxpc3QJICAgKnB1YmxpY2F0aW9u X25hbWVzOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsKKwlMaXN0CSAgICpkZWxldGVkX3JlbGlk czsKIAlib29sCQliaW5hcnk7CiAJYm9vbAkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IDg2OTU5MDEuLjJjNGVm OWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTExLDYgKzEx LDggQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJsaWIv aWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgogI2luY2x1ZGUgInV0 aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtNTYsNiArNTgs NyBAQCB0eXBlZGVmIGVudW0gUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUKIAlSRU9SREVSX0JVRkZF Ul9DSEFOR0VfSU5TRVJULAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEUsCiAJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0RFTEVURSwKKwlSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FH RSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hP VCwKQEAgLTEzMCw2ICsxMzMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5n ZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAorCQkvKiBEREwgTWVzc2FnZS4g Ki8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vf c2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJCURlcGFyc2Vk Q29tbWFuZFR5cGUJY21kdHlwZTsKKwkJfQkJCWRkbG1zZzsKKwogCQkvKiBOZXcgc25hcHNob3Qs IHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBzaG90CXNu YXBzaG90OwogCkBAIC00MzUsNiArNDQ4LDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZm ZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICpw cmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIERE TCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1 ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAgIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQs CisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAg IFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIGJlZ2lu IHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVm ZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01MDEsNiArNTI0LDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJl b3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpw cmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8q IHN0cmVhbSBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAo KlJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVy QnVmZmVyICpyYiwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJ CQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpw cmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0 dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAog CQkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyICpyYiwKQEAgLTU1Miw2ICs1ODYsNyBAQCBzdHJ1 Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJBcHBseVRydW5jYXRlQ0IgYXBwbHlfdHJ1 bmNhdGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsKIAlSZW9yZGVyQnVmZmVyTWVz c2FnZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQiBkZGxtZXNzYWdlOwog CiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNh Y3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTcxLDYgKzYwNiw3IEBAIHN0cnVjdCBSZW9yZGVy QnVmZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVv cmRlckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0 cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVz c2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNC IHN0cmVhbV90cnVuY2F0ZTsKIAogCS8qCkBAIC02NDYsNiArNjgyLDkgQEAgZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlclF1ZXVlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwK IGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBU cmFuc2FjdGlvbklkLCBTbmFwc2hvdCBzbmFwc2hvdCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJ CQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBT aXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwg WExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21t aXQoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNv bW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0 X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IGE3ZjU3MDAuLmJmYzczYzIgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTk3MCw5ICs1OTcwLDkgQEAgTGlzdCBvZiBzY2hl bWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJzICJu by5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKaW5kZXggZTZlMDgyZC4uNmQxYjc0MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZsaWN0aW5n IG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxkUnAKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1Ymxp Y2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwg ZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9p bnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3Rw dWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgy IHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZP UiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUg QUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJs ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVi bGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3VsZCBi ZSBhYmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMzQsMTAgKzEzNCwxMCBAQCBFUlJPUjog IHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgog LS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRvIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgU0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3Rw dWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xNTksMTAgKzE1OSwxMCBAQCBQ dWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0ZXN0cHVi X2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIERST1AgVEFCTEUg dGVzdHB1Yl90YmwyOwpAQCAtMTc0LDE5ICsxNzQsMTkgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCiAKIFxkUnArIHRlc3RwdWI0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0CisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjA3LDEwICsyMDcs MTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBp cyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7 CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjI1LDEwICsyMjUsMTAgQEAgQUxURVIgVEFC TEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElPTiB0ZXN0cHViX3BhcnRlZDE7CiBVUERB VEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnAr IHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTcsMTAgKzI1NywxMCBAQCBTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRBQkxF IHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQg ZCA8IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1 Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rl c3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI3MywxMCArMjczLDEwIEBAIFRhYmxlczoKIAog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVS RSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0yOTIsMTAg KzI5MiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERS T1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKQEAgLTMwMywxMCArMzAzLDEw IEBAIFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3Jm X3RibDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVzc2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUg PCA1MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFORCAoZSA8IDUwMCkpCiAKQEAgLTMzOSwx MCArMzM5LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgT05M WSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgxCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4 MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChlIDwgOTk5KQpAQCAtMzUyLDEwICszNTIs MTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3Jm X3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFIChoIDwgOTk5KSBXSVRIIChwdWJsaXNoID0g J2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3lu dGF4MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X3N5bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90Ymwx IgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5 OSkKQEAgLTY3OCwxMCArNjc4LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxl X2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5z Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucwor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBA IC04MjMsMTAgKzgyMywxMCBAQCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJz IChhIGludCwgYiBpbnQsIGMgaW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0 ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0 cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90 aF9maWx0ZXJzIEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUg KGMgIT0gMSk7CiBcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBX SEVSRSAoYyA8PiAxKQogCkBAIC0xMDMxLDEwICsxMDMxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24g InRlc3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJf Zm9ydGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4 aXN0cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJfdGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMDcy LDEwICsxMDcyLDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxk UnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMTUzLDEwICsx MTUzLDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBU QUJMRSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK ICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEx NjYsMjAgKzExNjYsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRl c3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVm YXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAg ICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8 IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZm9vIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5h bWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb28gUkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZGVmYXVsdCBPV05FUiBUTyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0 cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRk aW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTE5NSwxOSArMTE5NSwxOSBAQCBDUkVBVEUgVEFC TEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNjaGVtYSBGT1Ig QUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxk UnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjIxLDQ0ICsxMjIx LDQ0IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJM RVMgSU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJw KyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1B IgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1 YmxpYyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEyOTIsMTAgKzEyOTIs MTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRy b3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlv bgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEzMDMsMjAgKzEzMDMsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJs aWNhdGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFt ZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAK IEFMVEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRS cCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzMjQsMTAgKzEzMjQs MTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hl bWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90 ZXN0MiIKQEAgLTEzMzYsMTAgKzEzMzYsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg bm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1h IiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTEzNDgsMTAgKzEzNDgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHVi X3Rlc3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2Yg cHVibGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzU5LDEwICsxMzU5LDEwIEBAIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qy OwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTEzNzAsMTAgKzEzNzAsMTAgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBE Uk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20g c2NoZW1hICJwdWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnAr IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xMzgxLDI5ICsxMzgxLDI5IEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwg VEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5v bl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFsdGVyIHB1Ymxp Y2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2Zv cnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxMiwxMCArMTQx MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwog RVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyNCwxMCArMTQyNCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hl bWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAKQEAgLTE1MDYsMTggKzE1MDYsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVu dF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBB TEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IApAQCAtMTUyNywyMCArMTUyNywyMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jz Y2hlbWFfZm9ydGFibGUgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MQogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVz dDIudGJsMSwgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxl CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3Qy LnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgotLSAKMS44LjMuMQoK --000000000000e6ea7105e8b68536 Content-Type: application/octet-stream; name="v21-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v21-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l831eup60 RnJvbSA3YzhkOWEwMGZhMTZlOGE2M2NkY2M0NGE1YTlhNDU3NGY4MWFkYTgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMTUgU2VwIDIwMjIgMDc6Mzk6MjIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyMSAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQoKKE5vdGUgIzEpIE5vdGUg dGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQ QVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdl IG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikg Tm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQg ZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRh YmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQg dGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNo IHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL01ha2VmaWxlICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVw YXJzZS5jICB8IDY2NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgIHwgIDc2MyArKysrCiBzcmMvYmFja2VuZC9j b21tYW5kcy9zZXF1ZW5jZS5jICAgICB8ICAgMzMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zv cm1hdF90eXBlLmMgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jICAg ICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgfCAgMTQ5ICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICB8ICAgIDYgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGRs X2RlcGFyc2UuaCAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0 eS5oICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAgfCAgICAy ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgIHwgICAxMyArCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8ICAgIDQgKwogMTQgZmlsZXMgY2hhbmdlZCwg NzY2MSBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBz cmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNs dWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggNDhmNzM0OC4u MTcxZGZiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwK IAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJz ZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21k cy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu ZGV4IDAwMDAwMDAuLjUyNmJjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEsNjY3OSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogZGRsX2RlcGFyc2UuYworICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5 IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhp cyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21t YW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJp bmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpT T04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgor ICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9i amVjdHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9i IGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNv bW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29u c3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQg b24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgi CisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5o IgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5o IgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19h bS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVt LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90 YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5o IgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRl L3Jld3JpdGVIYW5kbGVyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0 aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9y dWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQg bGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VT VElNQVRFRF9MRU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNP TkIgcmVwcmVzZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4g b2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0K K3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5 cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVj dAorfSBPYmpUeXBlOworCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlw YXJhbXM7CisJaW50CQkJbnVtUGFyYW1zOworCVN0cmluZ0luZm8JZm10aW5mbzsKKwlib29sCQlw cmVzZW50OworfSBPYmpUcmVlOworCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkg ICAqbmFtZTsKKwlPYmpUeXBlCQlvYmp0eXBlOworCisJdW5pb24KKwl7CisJCWJvb2wJCWJvb2xl YW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0OAkJZmx0 OworCQlPYmpUcmVlCSAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0gdmFsdWU7CisJ c2xpc3Rfbm9kZQlub2RlOworfSBPYmpFbGVtOworCitib29sIHZlcmJvc2UgPSB0cnVlOworCitz dGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUs IExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgZmxvYXQ4IHZhbHVlKTsKK3N0YXRpYyB2 b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lKTsKK3N0YXRp YyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIE9i alRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJl bWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMgdm9pZCBh cHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1 ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5 cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rp b25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3 X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9ialRyZWUgKm5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRp YyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpOworc3Rh dGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBP YmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0 aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3RhdGljIEpzb25i VmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0 ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRl eHJlbGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFyICoqZGVm aW5pdGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBjaGFyICoq dGFibGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGljIGNoYXIg KlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8s CisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBjb25z dCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOworCitzdGF0aWMg T2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29u dGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wg aXNfYWx0ZXIsIExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5J ZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpOwor c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpz dWJjbWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworCitzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQp Oworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtp bmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX09u Q29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAqZGVw YXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf U2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf TWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1 ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJl bnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3Rh cnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFs dGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU2VuZChPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0 eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3Vic2NyaXB0 KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAq ZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNl X1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExp c3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOwor CisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBBbHRlclBvbGlj eSBkZXBhcnNlIG9iamVjdHMKKyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xpY3lfY2xhdXNlcyhP YmpUcmVlICpwb2xpY3lTdG10LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywKKwkJCQkgICBi b29sIGRvX3F1YWwsIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwgPSB0 YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1cGxl CXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3BvbGlj eV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xp Y3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogYWRkIHRoZSAiT04gdGFibGUiIGNsYXVzZSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBvbGljeVN0bXQsICJPTiAle3RhYmxlfUQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgIlRPIHJv bGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENSRUFURSBjYXNlLCBpdCBhbHdheXMKKwkgKiBj b250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUgQUxURVIgY2FzZSBpdCBtaWdodCBi ZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJeworCQlMaXN0ICAgKmxpc3QgPSBOSUw7CisJ CUxpc3RDZWxsICpjZWxsOworCisJCWZvcmVhY2ggKGNlbGwsIHJvbGVzKQorCQl7CisJCQlSb2xl U3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KG5ld19vYmp0cmVlX2Zvcl9y b2xlc3BlYyhzcGVjKSkpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QocG9saWN5U3RtdCwi VE8gJXtyb2xlOiwgfVIiLCBsaXN0KTsKKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKworCS8qIGFkZCB0aGUgVVNJ TkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7CisJCURhdHVtCWRlcGFyc2Vk OworCQlEYXR1bQlzdG9yZWRleHByOworCQlib29sCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0g aGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9scXVhbCwKKwkJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2xxdWFsIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1Iiwg cG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHBy LCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHBvbGljeVN0bXQsICJVU0lORyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgVGV4dERhdHVt R2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChw b2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsKKworCS8qIGFkZCB0aGUgV0lUSCBDSEVDSyBj bGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRoX2NoZWNrKQorCXsKKwkJRGF0dW0JZGVwYXJz ZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJCXN0b3JlZGV4cHIg PSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2x3aXRoY2hlY2ssCisJCQkJ CQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4g cG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwy KHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJXSVRIIENIRUNLICgle2V4cHJlc3Npb259cykiLAor CQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmVsYXRp b25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKiBBcHBlbmQgYW4gYXJy YXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9hcnJheV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpCit7CisJT2JqRWxl bQkqcGFyYW07CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlp ZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJldHVybjsKKworCWlmICghdmVyYm9zZSkK Kwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpFbGVtcyB3aG9zZSBw cmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJT2Jq RWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChlbGVtLT5v Ymp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09IE9ialR5 cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAmJgorCQkJ CWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVhY2hfZGVs ZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJb2JqZWN0X25hbWUgPSBhcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5l d19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5 ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyog QXBwZW5kIGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUp Cit7CisJT2JqRWxlbSAgKnBhcmFtOworCWNoYXIJICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJ Ym9vbAkgIGlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJ LyogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQg c3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUqLworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNlbnQi KSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9 IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0dXJu OworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVj dF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1 ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBw ZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBl bmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1 ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFz c2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRf c3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9h dCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJl bWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIHRoZSBpbnB1dCBm b3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zv cm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQkJbGVu OworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCWxlbiA9IHRyZWUtPmZtdGluZm8t PmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobGVuID4g MCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUt PmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyh0cmVlLT5mbXRpbmZvLCBz dWJfZm10KTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQp Cit7CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZl cmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3Jt YXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qIEFwcGVuZCBh biBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9vYmpl Y3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKQor eworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3Vi X2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47CisK KwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJf Zm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7 CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0 cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNoIGlz IGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmlu Zy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAq Lworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEJb2JqZWN0X25hbWU7CisJ Y29uc3QgY2hhcgkgICAqZW5kX3B0cjsKKwljb25zdCBjaGFyCSAgICpjcDsKKwlib29sCQkJc3Rh cnRfY29weSA9IGZhbHNlOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0cmVlLT5mbXRpbmZv ID09IE5VTEwpCisJCXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0luZm8oJm9iamVjdF9u YW1lKTsKKwllbmRfcHRyID0gc3ViX2ZtdCArIHN0cmxlbihzdWJfZm10KTsKKworCWZvciAoY3Ag PSBzdWJfZm10OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlpZiAoKmNwID09ICd7JykKKwkJ eworCQkJc3RhcnRfY29weSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3Rh cnRfY29weSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqY3AgPT0gJzonIHx8ICpjcCA9PSAnfScp CisJCQlicmVhazsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZvYmplY3RfbmFtZSwg KmNwKTsKKwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVsb2coRVJST1IsICJv YmplY3QgbmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1 Yl9mbXQpOworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7Cit9CisKKy8qIEFwcGVuZCBhIHBy ZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2Fw cGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKQoreworCXNs aXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJdHJlZS0+bnVtUGFy YW1zKys7Cit9CisKKy8qIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitz dGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hhcgkgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZhbHVl ID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1l ID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFy YW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFs dWUuc3RyaW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSBy ZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICogLSBu c3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3 aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRPaWQ7 IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBuYW1l IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAqIC0g dHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisgKiAt IHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5nIHdp dGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVzdCBi ZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0aGVp ciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2YgdHlw ZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF90 eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNw aWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGFy cmF5KQoreworCUhlYXBUdXBsZQkJdHVwbGU7CisJRm9ybV9wZ190eXBlCXR5cGVmb3JtOworCU9p ZAkJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lE LCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0 eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7 CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJsZSBsZW5ndGgpIGFy cmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkgdHlwZXMgc3VjaCBh cyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLworCWFycmF5X2Jhc2Vf dHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGFycmF5ID0gKElzVHJ1ZUFycmF5VHlw ZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9QTEFJTik7 CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhl IGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2Vf dHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZv cm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5 X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlwZXMg d2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBtb2QgYXQgdGhl IG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSApLiBXZSBjYW5ub3QK KwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRo ZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9PSBJTlRFUlZBTE9JRCB8fAorCQl0eXBl X29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QVFpPSUQgfHwK KwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FVFpPSUQpCisJewor CQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNlIElOVEVSVkFMT0lEOgorCQkJCSp0eXBu YW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1Q VFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJ TUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBX SVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJU SU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCSp0eXBu YW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVUWk9J RDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSBX SVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlz IGFkZGVkIGJ5IHR5cG1vZGUuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIpOwor CQkJCWJyZWFrOworCQkJY2FzZSBUSU1FT0lEOgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElN RSIpOworCQkJCWJyZWFrOworCQl9CisJCSpuc3BpZCA9IEludmFsaWRPaWQ7CisJfQorCWVsc2UK Kwl7CisJCS8qCisJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Ig b3RoZXIgdHlwZXMsIHNvIGdldCB0aGUgdHlwZQorCQkgKiBuYW1lIGFuZCBzY2hlbWEgZGlyZWN0 bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJICovCisJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1l c3BhY2U7CisJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3JtLT50eXBuYW1lKSk7 CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2RzdHIgPSBwcmludFR5cG1vZCgi IiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxzZQorCQkqdHlwZW1vZHN0ciA9 IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgZGVmYXVsdHMgdmFsdWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLCBhcyBh IGxpc3Qgb2YKKyAqIGRlcGFyc2VkIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgTGlzdCAqCitG dW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKQoreworCUxpc3QgICAqbm9k ZWRlZnM7CisJTGlzdCAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICpjZWxsOworCisJbm9k ZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhwcm9hcmdk ZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0KSkKKwkJZWxvZyhFUlJPUiwgInBy b2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZWRlZnMp CisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlzdHJkZWZzID0gbGFw cGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUwsIGZhbHNlLCBmYWxz ZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlLgorICov CitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7 CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoK KwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoK KwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoK KwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBl cnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkvKiBt YWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0 ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpu YW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpF bGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKwor CXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFtZXRlciAq Lworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpCit7 CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwg TlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOwor fQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVy IHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWUoY2hhciAqZm10KQor eworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYzAoc2l6ZW9mKE9ialRyZWUp KTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0X2luaXQoJnBhcmFtcy0+cGFyYW1z KTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGluZm8gPSBtYWtlU3RyaW5nSW5mbygp OworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+Zm10aW5mbywgZm10KTsKKwl9CisK KwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAl e31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFuYW1lIiBhbmQg Im9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNlIE9JRAorICogY29ycmVzcG9uZHMg dG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAicGdfdGVtcCIuCisgKgorICogVGhlIGRp ZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0eXBlcyBpcyB3aGV0aGVyIHRoZSBv YmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9yIG5vdCwgd2hpY2gg aXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2VybnMgaXRzZWxmIHdp dGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgorICovCitzdGF0aWMg T2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlkLCBjaGFyICpuYW1l KQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAo aXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVt cCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKwor CXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJICAic2NoZW1hbmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICJvYmpuYW1lIiwgT2JqVHlw ZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisvKgor ICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRo IHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgorICoKKyAqLworc3Rh dGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBP aWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCVJlbGF0aW9uCWNhdGFsb2c7 CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqbnNwOworCURhdHVtCQlvYmpuYW1lOwor CUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0 ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29s CQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVt X29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJ ZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9v YmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0 X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpuc3AgPSBoZWFwX2dldGF0dHIoY2F0 b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAg JmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgTlVMTCBu YW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUs IFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNu dWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsKKworCXF1YWxpZmll ZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJ CQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOworCXRhYmxlX2Nsb3Nl KGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOworfQorCisv KgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmll ZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2YWx1ZXMgc3VjaCBhcyBST0xFU1BFQ19D VVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWlyIGZpbmFsCisgKiBuYW1lcy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVj KQoreworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkgICAqcm9sZXR5cGU7CisKKwlpZiAoc3Bl Yy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQlyb2xldHlwZSA9IGdldF9yb2xlc3Bl Y19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVwKCIiKTsKKworCXJvbGUg PSBuZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9v bCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUi LCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCisgKiBB IGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sK KwlPYmpUcmVlCSp0eXBlUGFyYW07CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwbnNw OworCWNoYXIJICAgKnR5cGVuYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9v bAkJdHlwYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJ CQkJCSAmdHlwbnNwaWQsICZ0eXBlbmFtZSwgJnR5cG1vZHN0ciwgJnR5cGFycmF5KTsKKworCWlm IChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29y X3RlbXAodHlwbnNwaWQpOworCWVsc2UKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7CisKKwl0eXBl UGFyYW0gPSBuZXdfb2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwbnNwLAorCQkJCQkJCSAgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJp bmcsIHR5cGVuYW1lLAorCQkJCQkJCSAgICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2Rz dHIsCisJCQkJCQkJICAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGFycmF5KTsKKworCXJl dHVybiB0eXBlUGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0 byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KKyAqCisgKiBUaGUg ImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRo ZSBvdXRwdXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZXh0cmEg ZWxlbWVudHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUgKHN0cmluZyksIHR5 cGUgKGZyb20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQuICBU aGUKKyAqIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgT2Jq VHlwZUludGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3RyaW5nIHJlcXVpcmVz IGEgY2hhciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgorICogT2JqRWxlbSks IE9ialR5cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9uLiAgRWFjaCBlbGVt ZW50IHR5cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIgZ2l2ZW4g aW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUgdGhlIGx1eHVyeSBv ZiBzcHJpbnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxmb3JtZWQgYXJndW1l bnQgbGlzdHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX1ZBKGNoYXIgKmZt dCwgaW50IG51bW9ianMsLi4uKQoreworCU9ialRyZWUJICAgKnRyZWU7CisJdmFfbGlzdAkJYXJn czsKKwlpbnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmplY3QgYW5kIGl0cyAi Zm10IiAqLworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5kIHByb2Nlc3MgdGhl IGdpdmVuIHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsKKwlmb3IgKGkgPSAw OyBpIDwgbnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJT2JqVHlwZQkJdHlw ZTsKKwkJT2JqRWxlbQkgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7 CisJCXR5cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBuZXdfb2JqZWN0KHR5 cGUsIE5VTEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUg bXVzdCBiZSBhIHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRo ZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJ c3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxsOgorCQkJCS8qIE51bGwgcGFy YW1zIGRvbid0IGhhdmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlQm9vbDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFuID0gdmFfYXJnKGFyZ3MsIGlu dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQkJZWxlbS0+dmFsdWUu c3RyaW5nID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5 cGVBcnJheToKKwkJCQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdzLCBMaXN0ICopOwor CQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCQllbGVtLT52YWx1ZS5pbnRl Z2VyID0gdmFfYXJnKGFyZ3MsIGludDY0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZs b2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJy ZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZh X2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisK KwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVt KTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRl IGEgbmV3IHN0cmluZyBvYmplY3QgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2Jq ZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVl KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+ dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9j ZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhl IG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90 b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7 CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5m byA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXku dHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFs LnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVp bHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3Ry aW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVl LT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFs KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2Jq VHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJl ZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9y ZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKwor LyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFs IGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBw YXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVy YXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVl CXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVs bDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxl bV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2 YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmpl Y3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVl LnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1l cmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmlj KERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+ dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBq YnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXRO dW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJ b2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50 eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVh bjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVseSBhZGQgdGhlIG9i amVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29u Yl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T2JqVHlwZUFycmF5OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVks IE5VTEwpOworCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJ CU9iakVsZW0gICAqZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJf ZWxlbWVudChzdGF0ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0 eXBlKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9i anRyZWVfdG9fanNvbmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRyZWVfdG9fanNv bmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7CisJc2xpc3Rf aXRlcglpdGVyOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBO VUxMKTsKKworCW9ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRyZWUpOworCisJ c2xpc3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0 ID0gc2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1 ZQlrZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3Ry aW5nOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5 LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5n IHRvIGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0 LCBXSkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9F TkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJM RS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBvciBk b21haW4gT0lELCBvYnRhaW4gaXRzIGNvbnN0cmFpbnRzIGFuZCBhcHBlbmQgdGhlbSB0bworICog dGhlIGdpdmVuIGVsZW1lbnRzIGxpc3QuICBUaGUgdXBkYXRlZCBsaXN0IGlzIHJldHVybmVkLgor ICoKKyAqIFRoaXMgd29ya3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0YWJsZXMsIGFuZCBk b21haW5zLgorICoKKyAqIE5vdGUgdGhhdCBDT05TVFJBSU5UX0ZPUkVJR04gY29uc3RyYWludHMg YXJlIGFsd2F5cyBpZ25vcmVkLgorICovCitzdGF0aWMgTGlzdCAqCitvYnRhaW5Db25zdHJhaW50 cyhMaXN0ICplbGVtZW50cywgT2lkIHJlbGF0aW9uSWQsIE9pZCBkb21haW5JZCkKK3sKKwlSZWxh dGlvbgljb25SZWw7CisJU2NhbktleURhdGEga2V5OworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVh cFR1cGxlCXR1cGxlOworCU9ialRyZWUJKmNvbnN0cjsKKworCS8qIE9ubHkgb25lIG1heSBiZSB2 YWxpZCAqLworCUFzc2VydChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpIF4gT2lkSXNWYWxpZChkb21h aW5JZCkpOworCisJLyoKKwkgKiBTY2FuIHBnX2NvbnN0cmFpbnQgdG8gZmV0Y2ggYWxsIGNvbnN0 cmFpbnRzIGxpbmtlZCB0byB0aGUgZ2l2ZW4KKwkgKiByZWxhdGlvbi4KKwkgKi8KKwljb25SZWwg PSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWlm IChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpKQorCXsKKwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJ QW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsYXRpb25JZCkpOworCQlzY2FuID0g c3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJ ZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisJZWxzZQorCXsKKwkJQXNz ZXJ0KE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJQW51 bV9wZ19jb25zdHJhaW50X2NvbnR5cGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oZG9tYWluSWQpKTsKKwkJc2NhbiA9IHN5c3Rh YmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRUeXBpZEluZGV4SWQsCisJCQkJCQkJCSAg dHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCisJLyoKKwkgKiBGb3IgZWFjaCBjb25zdHJhaW50 LCBhZGQgYSBub2RlIHRvIHRoZSBsaXN0IG9mIHRhYmxlIGVsZW1lbnRzLiAgSW4KKwkgKiB0aGVz ZSBub2RlcyB3ZSBpbmNsdWRlIG5vdCBvbmx5IHRoZSBwcmludGFibGUgaW5mb3JtYXRpb24gKCJm bXQiKSwgYnV0CisJICogYWxzbyBzZXBhcmF0ZSBhdHRyaWJ1dGVzIHRvIGluZGljYXRlIHRoZSB0 eXBlIG9mIGNvbnN0cmFpbnQsIGZvcgorCSAqIGF1dG9tYXRpYyBwcm9jZXNzaW5nLgorCSAqLwor CXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkp CisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uc3RyRm9ybTsKKwkJY2hhcgkgICAqY29udHlw ZTsKKworCQljb25zdHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxl KTsKKworCQlzd2l0Y2ggKGNvbnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RS QUlOVF9DSEVDSzoKKwkJCQljb250eXBlID0gImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2Ug Q09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWNvbnRpbnVlOwkvKiBub3QgaGVyZSAqLworCQkJY2Fz ZSBDT05TVFJBSU5UX1BSSU1BUlk6CisJCQkJY29udHlwZSA9ICJwcmltYXJ5IGtleSI7CisJCQkJ YnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCWNvbnR5cGUgPSAidW5pcXVl IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9UUklHR0VSOgorCQkJCWNvbnR5cGUg PSAidHJpZ2dlciI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgor CQkJCWNvbnR5cGUgPSAiZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ ZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8q CisJCSAqICJ0eXBlIiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxl IG91dHB1dCwgYnV0IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5n dWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJh aW50IHR5cGVzLgorCQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlz dCB0aGUgY29sdW1uIG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJCWNvbnN0ciA9IG5ld19v Ymp0cmVlX1ZBKCJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJ NCwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29uc3RyYWludCIsCisJCQkJCQkJ CSJjb250eXBlIiwgT2JqVHlwZVN0cmluZywgY29udHlwZSwKKwkJCQkJCQkJIm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpLAorCQkJCQkJCQkiZGVmaW5p dGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21t YW5kX3NpbXBsZShjb25zdHJGb3JtLT5vaWQpKTsKKwkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1l bnRzLCBuZXdfb2JqZWN0X29iamVjdChjb25zdHIpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2Fu KHNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBlbGVtZW50czsKK30KKworLyoKKyAqIFJldHVybiBhbiBpbmRleCBkZWZpbml0aW9uLCBzcGxp dCBpbiBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1 cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZs b3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5n IHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2Rl dGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBj aGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFy ICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxl CWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3Jt X3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2Ft CWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7 CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJ aW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJ aW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOwor CW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQy dmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKworCS8q CisJICogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhlIGluZGV4CisJ ICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0 dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBpbmRleHJlbGlkKTsK KwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisKKwlpbmRyZWxp ZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRl eHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRv cHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElO REVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24s ICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAob2lkdmVjdG9y ICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NEYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4 X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xhc3MgPSAob2lk dmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWluZG9wdGlvbkRh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVt X3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZG9w dGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25EYXR1bSk7CisK KwkvKgorCSAqIEZldGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5kZXggcmVsYXRpb24K KwkgKi8KKwlodF9pZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERh dHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4cmVsKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwgaW5kZXhy ZWxpZCk7CisJaWR4cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChodF9pZHhyZWwp OworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3Mg bWV0aG9kCisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0 RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1 IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJV Q1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnku ICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUg ZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkg KiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNu dWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJ ZXhwcnNEYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKwor CQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwp OworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWlu ZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhw cnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVt ID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9y KGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZk ZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBz dHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBG ZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhB bVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZp bml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBj YWxsZXIuCisJICovCisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsg a2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVz W2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lk CQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlPaWQJCQlpbmRjb2xs OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIGtleW5vID09IDAg PyAiIiA6ICIsICIpOworCisJCWlmIChhdHRudW0gIT0gMCkKKwkJeworCQkJLyogU2ltcGxlIGlu ZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAqYXR0bmFtZTsKKwkJCWludDMyCQlrZXljb2x0eXBt b2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShpbmRyZWxpZCwgYXR0bnVtLCBmYWxzZSk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBxdW90ZV9pZGVudGlm aWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0eXBldHlwbW9kY29sbChpbmRyZWxpZCwgYXR0bnVt LAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAma2V5Y29sdHlwbW9kLAorCQkJCQkJCQkgICZrZXlj b2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogRXhwcmVzc2lvbmFsIGluZGV4 ICovCisJCQlOb2RlCSAgICppbmRleGtleTsKKwkJCWNoYXIJICAgKnN0cjsKKworCQkJaWYgKGlu ZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJ0b28gZmV3IGVudHJpZXMgaW4g aW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhrZXkgPSAoTm9kZSAqKSBsZmlyc3QoaW5kZXhwcl9p dGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4cHJzLCBpbmRleHByX2l0ZW0pOwor CQkJLyogRGVwYXJzZSAqLworCQkJc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGluZGV4a2V5LCBj b250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJCQkvKiBOZWVkIHBhcmVucyBpZiBpdCdzIG5vdCBh IGJhcmUgZnVuY3Rpb24gY2FsbCAqLworCQkJaWYgKGluZGV4a2V5ICYmIElzQShpbmRleGtleSwg RnVuY0V4cHIpICYmCisJCQkJKChGdW5jRXhwciAqKSBpbmRleGtleSktPmZ1bmNmb3JtYXQgPT0g Q09FUkNFX0VYUExJQ0lUX0NBTEwpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5p dGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9u QnVmLCAiKCVzKSIsIHN0cik7CisKKwkJCWtleWNvbHR5cGUgPSBleHByVHlwZShpbmRleGtleSk7 CisJCQlrZXljb2xjb2xsYXRpb24gPSBleHByQ29sbGF0aW9uKGluZGV4a2V5KTsKKwkJfQorCisJ CS8qIEFkZCBjb2xsYXRpb24sIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlpbmRjb2xsID0gaW5kY29s bGF0aW9uLT52YWx1ZXNba2V5bm9dOworCQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJCWFw cGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJIGdl bmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0 b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWdldF9vcGNsYXNzX25hbWUoaW5k Y2xhc3MtPnZhbHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKworCQkv KiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQlpZiAoYW1yb3V0aW5lLT5hbWNhbm9yZGVy KQorCQl7CisJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVTQyBh bmQgTlVMTFMgb3B0cyAqLworCQkJaWYgKG9wdCAmIElORE9QVElPTl9ERVNDKQorCQkJeworCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJCS8q IE5VTExTIEZJUlNUIGlzIHRoZSBkZWZhdWx0IGluIHRoaXMgY2FzZSAqLworCQkJCWlmICghKG9w dCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWlmIChvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklSU1QiKTsKKwkJCX0KKwkJfQorCisJCS8q IFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVyZTsgZG8gd2UgbmVlZCBhbnl0aGluZz8gKi8K Kwl9CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQgcmVs b3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVsaWQp OworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKworCQl0 YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1ZhbGlk KHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihnZXRf dGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwkJZWxzZQorCQkJKnRhYmxlc3BhY2UgPSBOVUxM OworCX0KKworCS8qIFJlcG9ydCBpbmRleCBwcmVkaWNhdGUsIGlmIGFueSAqLworCWlmICghaGVh cF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCXsKKwkJ Tm9kZQkgICAqbm9kZTsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQlj aGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8qIENvbnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0 cmVlICovCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgs CisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZHByZWQsICZpc251bGwpOworCQlBc3NlcnQoIWlz bnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJ CW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUocHJlZFN0cmluZyk7CisJCXBmcmVlKHByZWRT dHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8KKwkJKndoZXJlQ2xhdXNlID0KKwkJCWRlcGFyc2Vf ZXhwcmVzc2lvbihub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0KKwllbHNlCisJCSp3 aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZSho dF9pZHgpOworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZSho dF9hbSk7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9y IHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0 IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoK K1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8s IExpc3QgKmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZSAqZGVmdmFs OworCWNoYXIgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwg YXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJl cGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBl bmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFp biB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0 YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQg cmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLAorCQkJIHJlbGlkKTsK KworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCB0dXBsZSwKKwkJCQkJCQkJ IEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJCQkgJmlzbnVsbCk7CisKKwlkZXBh cnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCSAgIENTdHJp bmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhib3VuZERhdHVtKSksCisJCQkJCQkJ CSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gVGV4dERh dHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9i amVjdCB0eXBlIGFzIGEgc3RyaW5nLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzdHJpbmdp Znlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCit7CisJc3dpdGNoIChvYmp0eXBlKQorCXsK KwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQkJcmV0dXJuICJBR0dSRUdBVEUiOworCQljYXNl IE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJDQVNUIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgor CQkJcmV0dXJuICJDT0xVTU4iOworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4g IkNPTExBVElPTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4gIkNPTlZF UlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJBU0UiOwor CQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2UgT0JKRUNU X0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNlIE9CSkVD VF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNUX0ZEVzoK KwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdO X1NFUlZFUjoKKwkJCXJldHVybiAiU0VSVkVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9UQUJM RToKKwkJCXJldHVybiAiRk9SRUlHTiBUQUJMRSI7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgor CQkJcmV0dXJuICJGVU5DVElPTiI7CisJCWNhc2UgT0JKRUNUX0lOREVYOgorCQkJcmV0dXJuICJJ TkRFWCI7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJcmV0dXJuICJMQU5HVUFHRSI7CisJ CWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJcmV0dXJuICJMQVJHRSBPQkpFQ1QiOworCQlj YXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmV0dXJuICJNQVRFUklBTElaRUQgVklFVyI7CisJCWNh c2UgT0JKRUNUX09QQ0xBU1M6CisJCQlyZXR1cm4gIk9QRVJBVE9SIENMQVNTIjsKKwkJY2FzZSBP QkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gIk9QRVJBVE9SIjsKKwkJY2FzZSBPQkpFQ1RfT1BG QU1JTFk6CisJCQlyZXR1cm4gIk9QRVJBVE9SIEZBTUlMWSI7CisJCWNhc2UgT0JKRUNUX1BPTElD WToKKwkJCXJldHVybiAiUE9MSUNZIjsKKwkJY2FzZSBPQkpFQ1RfUk9MRToKKwkJCXJldHVybiAi Uk9MRSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1cm4gIlJVTEUiOworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNF OgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJu ICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BB Q0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2Fz ZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdV UkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdfTUFQUElORzoKKwkJCXJldHVy biAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBNQVBQSU5HIjsKKwkJKi8KKwkJY2FzZSBPQkpF Q1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJ Y2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJ CWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRF IjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNU X1VTRVJfTUFQUElORzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1Rf VklFVzoKKwkJCXJldHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30KKworLyoKKyAqIEdp dmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBp dC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSwgc28gdGhhdCB0aGVyZSBh cmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hh bmdlcy4KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykK K3sKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAqKSBQR19HRVRB UkdfUE9JTlRFUigwKTsKKwljaGFyCQkgICAqY29tbWFuZDsKKworCWNvbW1hbmQgPSBkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JFVFVS Tl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShjb21tYW5kKSk7CisKKwlQR19SRVRVUk5fTlVM TCgpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVO Q1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRnVuY3Rp b24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGdW5jdGlvblN0bXQg Km5vZGUgPSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFs dGVyRnVuYzsKKwlPYmpUcmVlCSAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1f cGdfcHJvYyBwcm9jRm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlzdAkgICAqZWxl bXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBw Z19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmpl Y3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBGVU5DVElPTiAle3NpZ25h dHVyZX1zICV7ZGVmaW5pdGlvbjogfXMKKwkgKi8KKwlhbHRlckZ1bmMgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgRlVOQ1RJT04iLCAwKTsKKworCS8qCisJICogQUxURVIgRlVOQ1RJT04gZG9lcyBu b3QgY2hhbmdlIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlIGNhdGFsb2cKKwkgKiB0byBnZXQgaW5w dXQgdHlwZSBPaWRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7 IGkrKykKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9 VCIsIDApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgInR5cGUiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAt MSkpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJfQorCisJc2lnbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFw cGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIsIHBhcmFtcyk7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckZ1bmMsICIle3NpZ25hdHVyZX1zIiwgc2lnbik7 CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqID0gTlVMTDsK KworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJCXsK KwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKHN0clZhbChkZWZlbC0+YXJnKSwgMCk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RyaWN0IikgPT0gMCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJ ICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBPTiBOVUxM IElOUFVUIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2Vj dXJpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVm ZWwtPmFyZykgPworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9L RVIiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFrcHJv b2YiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwt PmFyZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIsIDApOworCQl9 CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQl7CisJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCSAi Y29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJIGRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dzIikgPT0gMCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJPV1MiLCAwKTsKKwkJCWlmIChkZWZHZXROdW1l cmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wb2JqLCAiJXty b3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0 U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyICp2 YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBvYmogPSBkZXBh cnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQl9CisJ CWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAwKQorCQl7CisJ CQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQi KTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJLyoKKwkJCSAqIFdl IHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4n dCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRo LgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25f bmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBl cywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9O T05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicGFyYWxsZWwi KSA9PSAwKQorCQl7CisJCQljaGFyICpmbXQgPSBwc3ByaW50ZigiUEFSQUxMRUwgJXMiLCBzdHJW YWwoZGVmZWwtPmFyZykpOworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoZm10KTsKKwkJfQorCisJ CWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQor CisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlckZ1bmMsICIle2RlZmluaXRpb246IH1zIiwgZWxl bXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGFsdGVyRnVuYzsK K30KKworLyoKKyAqIGRlcGFyc2UgYW4gQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoT2JqZWN0 QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmplY3RBZGRyZXNz IG9sZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmpl Y3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlclN0bXQ7CisJY2hh cgkgICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld3NjaGVtYTsKKwlj aGFyCSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3c2NoZW1hID0gbm9k ZS0+bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIg JXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAqLworCWZtdCA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsK KwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgY29t bWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisJ ICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVjdCBuYW1lIHdp dGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQgb2Ygb3VyIGRl cGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFtZSBob3dldmVy LCBzbyB3ZSBjaG9wIHRoZSBzY2hlbWEgbmFtZSBvZmYgdGhlIGlkZW50aXR5IHN0cmluZworCSAq IGFuZCB0aGVuIHByZXBlbmQgdGhlIHF1b3RlZCBzY2hlbWEgbmFtZS4KKwkgKgorCSAqIFhYWCBU aGlzIGlzIHByZXR0eSBjbHVua3kuIENhbiB3ZSBkbyBiZXR0ZXI/CisJICovCisJaWRlbnRpdHkg PSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCW9sZHNjaG5hbWUgPSBnZXRf bmFtZXNwYWNlX25hbWUob2xkc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZHNjaG5hbWUpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzY2hlbWEgd2l0aCBPSUQgJXUi LAorCQkJIG9sZHNjaGVtYS5vYmplY3RJZCk7CisKKwlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwg cXVvdGVfaWRlbnRpZmllcihvbGRzY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsgc3RybGVuKHF1 b3RlX2lkZW50aWZpZXIobmV3c2NoZW1hKSkpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVy U3RtdCwgIiV7aWRlbnRpdHl9cyIsIGlkZW50KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFs dGVyU3RtdCwgIlNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIG5ld3NjaGVtYSk7CisKKwlyZXR1 cm4gYWx0ZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9wZXJhdG9yU3RtdCAo QUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQgKm5vZGUgPSAoQWx0ZXJP cGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICphbHRlcm9wOworCUZvcm1f cGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAqY2VsbDsKKwlMaXN0CQkgICAqbGlz dCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJU dXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgT1BFUkFUT1Ig JXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9VCkgU0VUCisJICogKCV7 ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJB VE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBMRUZU QVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAiTk9ORSIpOworCisJLyogUklHSFRB UkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2VsbCwg bm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCU9ialRyZWUgKnRtcG9iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChlbGVtLT5k ZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVz dHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJCX0KKwkJZWxzZSBpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi am9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCisJCUFzc2VydCh0bXBv YmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK Kwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJTRVQgKCV7ZWxlbXM6LCB9cyki LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIGFsdGVyb3A7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9SIEZBTUlMWSBBREQvRFJPUCBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BGYW1pbHkoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFsdGVyT3BGYW07CisJQWx0ZXJP cEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQgKikgY21kLT5wYXJzZXRyZWU7 CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJTGlzdAkgICAq bGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFN SUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgJXUiLAorCQkJIGNtZC0+ZC5v cGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdF VFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIg T1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIEFERC9EUk9QCisJ ICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJCQkJCQkJIlVTSU5HICV7YW1uYW1l fUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJCSJhbW5hbWUiLCBPYmpUeXBl U3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGNt ZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJz dChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3lu dGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwg JXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo Ik9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIG9w ZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1lOyB0aGUgRFJPUCBjYXNl IGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUgdHlwZXMgKi8KKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiKCV7bHR5cGV9VCwiLAorCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXIt PnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIg QlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkK KwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJCQll bHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKworCQkJCXRtcG9iajIgPSBuZXdf b2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqMiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3Blci0+ c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9z ZX1zIiwgdG1wb2JqMik7CisJCQl9CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZh bS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7 CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVO Q1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgMywKKwkJCQkJCQkgIm51bSIs IE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSks CisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIGZ1bmN0aW9uIG5h bWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhpcyAqLworCQlp ZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3Bn X3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFy Z2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUx KFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJCQlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJvYXJndHlwZXMgPSBwcm9jRm9y bS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9u YXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJCWFyZyA9IG5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQkJYXJnbGlzdCA9IGxhcHBl bmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCQl9CisKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZnVuY3Rpb259RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBO YW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndHlwZXM6 LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOwor CisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlpZiAoc3RtdC0+aXNEcm9w KQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiRFJPUCIpOworCWVsc2UKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkFERCIpOworCisJYXBwZW5kX2FycmF5 X29iamVjdChhbHRlck9wRmFtLCAiJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUoZnRwKTsKKworCXJldHVybiBhbHRlck9wRmFtOworfQorCisvKgorICogRGVwYXJzZSBh IEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChBbHRlck93bmVyU3Rt dCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKm93bmVyU3RtdDsKKwljaGFyCQkgICAqZm10 OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgT1dORVIgVE8gJSV7 bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkp OworCisJb3duZXJTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJl c3MsIGZhbHNlKSwKKwkJCQkJCQkgICAibmV3b3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CSAgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7CisKKwlyZXR1cm4gb3duZXJT dG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgorICogR2l2ZW4g YSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsKKwlPYmpUcmVlCQkqdG1wb2JqOworCVJl bGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUZvcm1fcGdfc2VxdWVuY2Ug c2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUFsdGVyU2Vx U3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgor CSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENS RUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICov CisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNl cWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVu KFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7 CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisK KwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFVRU5DRSIpOworCisJdG1wb2JqID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwK KwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwlmb3Jl YWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpFbGVtICpuZXdl bG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxz ZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAo c3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf U2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX093bmVk QnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCisJCWVsZW1zID0g bGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVy U2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyVHlw ZVN0bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2Rp ZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlw ZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQgKmFsdGVyVHlwZVNldFN0bXQg PSAoQWx0ZXJUeXBlU3RtdCAqKWNtZDsKKwlPYmpUcmVlCQkqYWx0ZXJUeXBlOworCUxpc3RDZWxs ICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUhlYXBUdXBsZSAgIHR5cFR1cDsKKwlG b3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5 cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGgg T0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1Qo dHlwVHVwKTsKKworCWFsdGVyVHlwZSA9IG5ld19vYmp0cmVlKCJBTFRFUiBUWVBFIik7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUeXBlLCAiJXtpZGVudGl0eX1EIFNFVCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CSBvYmplY3RJZCkpOworCisJZm9yZWFjaChwbCwgYWx0ZXJUeXBlU2V0U3RtdC0+b3B0aW9ucykK Kwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KHBsKTsKKwkJT2Jq RWxlbSAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdG9yYWdlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdlKGFsdGVyVHlwZSwgdHlwRm9y bSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNlaXZlIikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9TZW5kKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9J bihhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlw bW9kX291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9kX091dChhbHRl clR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiYW5hbHl6ZSIp ID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6ZShhbHRlclR5cGUsIHR5cEZv cm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vic2NyaXB0IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJ ZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRpb24gJXMiLCBkZWZlbC0+ZGVm bmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QoYWx0ZXJUeXBlLCAiKCV7ZGVmaW5pdGlvbjogfXMpIiwgZWxlbXMpOwor CisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gYWx0ZXJUeXBlOworfQorCisv KgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVBVEUgVFlQRSBBUykKKyAqCisg KiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21w b3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tcG9zaXRlOworCUhl YXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07CisJUmVsYXRpb24JdHlwZXJl bDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJ LyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxh dGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1Iiwgb2JqZWN0SWQpOworCXR5 cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0eXBlcmVsID0gcmVs YXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWRwY29u dGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodHlwZXJl bCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwpKTsKKworCWNvbXBvc2l0ZSA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbXBvc2l0ZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJdGFi bGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxpc3Qs IGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3QgdHlwZWQgKi8KKwkJCQkJCQkJ CSAgdHJ1ZSk7CQkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJYXBwZW5kX2FycmF5X29iamVjdChj b21wb3NpdGUsICJBUyAoJXtjb2x1bW5zOiwgfXMpIiwgdGFibGVlbHRzKTsKKworCXRhYmxlX2Ns b3NlKHR5cGVyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKHR5cHR1cCk7 CisKKwlyZXR1cm4gY29tcG9zaXRlOworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1 cGxlICAgY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9ybV9wZ19jb252ZXJzaW9uIGNv bkZvcm07CisJT2JqVHJlZQkgICAqY2NTdG10LCAqdG1wT2JqOworCisJY29udnJlbCA9IHRhYmxl X29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29uVHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNpb25fb2lk LCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QoY29uVHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2RlZmF1bHR9 cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorCSAq IEZST00gJXtmdW5jdGlvbn1ECisJICovCisJY2NTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIp OworCisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY2NTdG10LCAiZGVmYXVsdCIsCisJCQkJCQkgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZB VUxUIiA6ICIiKTsKKworCXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb25Gb3Jt LT5jb25uYW1lc3BhY2UsIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNjU3RtdCwgIkNPTlZFUlNJT04gJXtpZGVudGl0eX1EIiwgdG1wT2JqKTsKKwlh cHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJGT1IgJXtzb3VyY2V9TCIsIChjaGFyICopCisJ CQkJCQkgcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNvZGluZykpOworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1MIiwgKGNoYXIgKikKKwkJCQkJ CSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2RpbmcpKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChjY1N0bXQsICJGUk9NICV7ZnVuY3Rpb259RCIsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNvbnZyZWwsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gY2NTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUVu dW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5k IHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7CisJTGlzdENlbGwgICAqY2Vs bDsKKworCWVudW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBUWVBFIik7CisJYXBwZW5kX29i amVjdF9vYmplY3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQp KTsKKworCXZhbHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnZhbHMpCisJeworCQlT dHJpbmcgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQl2YWx1ZXMgPSBs YXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKHZhbCkpKTsKKwl9CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGVudW10eXBlLCAiQVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkiLCB2 YWx1ZXMpOworCXJldHVybiBlbnVtdHlwZTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUg VFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2Jq VHJlZQkgICAqcmFuZ2U7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmRlZmluaXRpb24g PSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOworCUZvcm1f cGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFuZ2Vfcm5n dHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmFu Z2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKwor CXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmFu Z2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3JtID0gKEZv cm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisKKwlyYW5nZSA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJhbmdl LCAiJXtpZGVudGl0eX1EIEFTIFJBTkdFIiwgdG1wKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkg IHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEUg PSAle3R5cGV9RCIsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwlkZWZpbml0 aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3Vib3Bj KSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNsYXNz UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3Vib3BjKTsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwKKwkJCQkJCQkg MiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJCQkg Im9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDT0xMQVRJT04g Ki8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkgIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24iLCBPYmpU eXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAoT2lkSXNW YWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9y bS0+cm5nY2Fub25pY2FsKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNBTk9OSUNBTCA9ICV7 Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0LCB0bXAp OworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZv cm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YmRpZmYp OworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBlX2RpZmZ9 RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlw ZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJ CWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmFuZ2UsICIoJXtkZWZpbml0aW9uOiwgfXMp IiwgZGVmaW5pdGlvbik7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3Nl KHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByYW5nZTsKK30KKworLyoK KyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFu ZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJF bnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAg ICphbHRlckVudW07CisKKwlhbHRlckVudW0gPQluZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSIs IDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhhbHRlckVudW0sICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCW5vZGUtPnNraXBJ Zk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3RyaW5n X29iamVjdChhbHRlckVudW0sICIle3ZhbHVlfUwiLCBub2RlLT5uZXdWYWwpOworCisJCWlmIChu b2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJF bnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCW5vZGUtPm5ld1ZhbElzQWZ0ZXIg PyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVt LCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUtPm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwllbHNl CisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICJSRU5BTUUgVkFMVUUgJXt2 YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1ZX1MIiwKKwkJCQkJCQkgbm9kZS0+bmV3VmFsKTsKKwl9 CisKKwlyZXR1cm4gYWx0ZXJFbnVtOworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0 U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBt b2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9k ZSA9IChDcmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlI ZWFwVHVwbGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2FzdEZvcm07CisJT2JqVHJlZQkgICAq Y3JlYXRlQ2FzdDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4o Q2FzdFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9n X29iamVjdF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAo Rm9ybV9wZ19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBl fVQpICV7bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKwkgKi8KKwljcmVhdGVDYXN0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCki LAorCQkJCQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkJCSJ0YXJn ZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2Fz dEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9kZS0+aW5vdXQpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEggSU5PVVQiKTsK KwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJ eworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBU dXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJ ZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOwor CQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0 U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJ CQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3Jt LT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFt ZSkpKTsKKwkJZm9yIChpID0gMDsgaSA8IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVh bGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsKKwkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldJVEgg RlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJCQkJICJjYXN0ZnVuY3Rpb24iLCBP YmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVD YXN0LCAiJXttZWNoYW5pc219cyIsIHRtcG9iaik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNU dXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05f SU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNl IENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJ YnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUg JWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkvKiBrZWVwIGNvbXBpbGVyIHF1 aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle2NvbnRleHR9 cyIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBjcmVhdGVDYXN0OworfQorCisvKgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxl Y3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQor ICogYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRh YmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJUYWJs ZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9ialRyZWUJICAgKnRtcG9iajI7CisJTGlz dAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKnJl bHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisK KwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKworCXJlbCA9IHJlbGF0aW9u X29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp LAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJc3dpdGNoIChyZWwt PnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlicmVh azsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5E RVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklF VzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBP U0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQli cmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJ R04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25l ZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxr aW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0KKworCS8qCisJICogVmVyYm9zZSBz eW50YXgKKwkgKgorCSAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1z CisJICovCisJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgcmVsdHlwZSk7CisJYWx0ZXJU YWJsZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVGFi bGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5k LmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29s bGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQg PSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsK KworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3Vi Y21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRk Q29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQg c29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOwor CQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJ CQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10 c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlw ZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1u IiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUlu ZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9p ZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOwor CisJCQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJ CQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFE RCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJ CQkJICogJWluZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJ CQkgKi8KKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFt ZX1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9j b25zdHJhaW50X25hbWUoY29uc3RyT2lkKSk7CisKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtjb25zdHJhaW50X3R5cGV9cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJ CQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcG9iaiwgIlVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JIiwKKwkJCQkJCQkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJ CQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtpbml0X2RlZmVycmVkfXMiLCBpc3RtdC0+aW5pdGRlZmVycmVk ID8KKwkJCQkJCQkJCQkgIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFU RSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRf UmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1Jl cGxhY2VSZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJh dGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Fk ZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcg dG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJ CQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJeworCQkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJfQorCQkJCWVsc2UK KwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29udGV4dDsKKwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7 CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlkcGNvbnRleHQgPSBkZXBhcnNl X2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJ UmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0cnR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0 TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0g KChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0dXApKS0+YXR0bnVtOworCQkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJ IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWwsIGF0dG5vLCBkcGNvbnRleHQsIE5VTEwpKTsK KwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJCX0KKworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9TZXROb3ROdWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEV4cHJlc3Np b246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgRVhQUkVTU0lPTiIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25vdF9l eGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyI6ICIi KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdGF0aXN0aWNzOgorCQkJCXsKKwkJ CQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOworCQkJCQlpZiAoc3ViY21kLT5u YW1lKQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJCQkJCQkJIDMsCisJCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJ CQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkg InN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJIGludFZhbCgoSW50ZWdl ciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNz fW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlSW50ZWdlciwg c3ViY21kLT5udW0sCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAor CQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0K KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldE9w dGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo CisJCQkJCQkJCQkgIGRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAzLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJICJzdG9yYWdlIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJ CQkJCQkJCQkgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJl c3Npb24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUs CisJCQkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJCWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlm bXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtjb2x1bW59SSIsCisJCQkJCQkJCSAgaXN0eXBl ID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo Zm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29sdW1u IiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJICAicHJl c2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJlaGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWIt PmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsK KworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQg PSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCWlmICghaXN0bXQtPmlzY29uc3Ry YWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo aWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJ CQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFsc2UpOworCisJCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmlu aXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25z dHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJ CQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9j b25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxh dGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnRSZWN1cnNl OgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3 aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOwor CQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7 CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0Tm9kZShDb25zdHJhaW50LCBzdWJj bWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFsaWRhdGlvbikKKwkJCQkJewor CQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgT2JqZWN0SWRHZXREYXR1bShj b25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCQkJCXsK KwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBGZXRjaCBjb25zdHJhaW50IGV4 cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2YWwgPSBTeXNDYWNoZUdldEF0 dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1fcGdfY29uc3RyYWludF9jb25i aW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJCQkJCQkJeworCQkJCQkJCQlj b25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJCQkJCWV4cHJzID0gbGFwcGVu ZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJCX0KKworCQkJCQkJCVJlbGVh c2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lk KSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBw Z19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ fQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJ CU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50 ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3Ry YWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFs aWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3Ry YWludCkpOworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAl e25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJCQkJCQkJIDQs CisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAor CQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29u c3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJCSBjLT5kZWZlcnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJ CQkJCQkJCQkgImluaXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBjLT5p bml0ZGVmZXJyZWQgPyAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRF Iik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3Ry YWludFJlY3Vyc2U6CisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludDoKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIs CisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50UmVjdXJzZToKKwkJCWNh c2UgQVRfRHJvcENvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1Ag Q09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0 ZXJDb2x1bW5UeXBlOgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjIHR1cGRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCk7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVm CSAgICpkZWY7CisKKwkJCQkJYXR0ID0gJih0dXBkZXNjLT5hdHRyc1tzdWItPmFkZHJlc3Mub2Jq ZWN0U3ViSWQgLSAxXSk7CisJCQkJCWRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisJ CQkJCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJi b3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIHJlbHR5 cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxh dGlvbn1zIEFUVFJJQlVURSAle2Nhc2NhZGV9cworCQkJCQkgKgorCQkJCQkgKiBOb3JtYWwgdHlw ZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0 YXR5cGV9VCAle2NvbGxhdGlvbn1zIENPTFVNTiAle3VzaW5nfXMKKwkJCQkJICovCisJCQkJCWZt dHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFIiwKKwkJ CQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisKKwkJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCQkvKiBBZGQgdGhlIFRZUEUgY2xhdXNlICovCisJ CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGF0YXR5cGV9VCIsCisJCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGF0dC0+YXR0dHlwaWQsCisJCQkJCQkJCQkJCQkJCQkg IGF0dC0+YXR0dHlwbW9kKSk7CisKKwkJCQkJLyogQWRkIGEgQ09MTEFURSBjbGF1c2UsIGlmIG5l ZWRlZCAqLworCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYg KE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQorCQkJCQl7CisJCQkJCQlPYmpUcmVlICpj b2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo Q29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9u KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICIle25hbWV9RCIsIGNvbGxu YW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq MiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7Y29sbGF0aW9ufXMiLCB0bXBvYmoyKTsKKworCQkJCQkvKiBJZiBub3QgYSBjb21wb3NpdGUg dHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsK KwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1B bHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQg c3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5nIG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdo aWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJCXRtcG9iajIg PSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwkJCQkJCWlmIChkZWYtPnJhd19kZWZhdWx0KQorCQkJ CQkJeworCQkJCQkJCURhdHVtCWRlcGFyc2VkOworCQkJCQkJCWNoYXIgICAqZGVmZXhwcjsKKwor CQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJ CQkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlk ZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJ CSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCSAgIFJlbGF0 aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqMiwg IiV7ZXhwcmVzc2lvbn1zIiwKKwkJCQkJCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFy c2VkKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXt1c2luZ31zIiwgdG1wb2JqMik7CisJCQkJCX0KKworCQkJCQkvKiBJZiBpdCdzIGEg Y29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgQ0FTQ0FERSBjbGF1c2UgKi8KKwkJCQkJaWYgKGlzdHlw ZSkKKwkJCQkJeworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJ CQlpZiAoc3ViY21kLT5iZWhhdmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0FsdGVyQ29s dW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0 ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkgIm93bmVyIiwgIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoKKwkJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0 ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIi KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRV bkxvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHdpdGhvdXQgb2lkcyIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRB Y2Nlc3NNZXRob2Q6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVU SE9EICV7YWNjZXNzX21ldGhvZH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgYWNjZXNzIG1ldGhvZCIsCisJCQkJCQkJCQkgImFjY2Vzc19tZXRob2QiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRU YWJsZVNwYWNlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVEFCTEVTUEFDRSAl e3RhYmxlc3BhY2V9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHRhYmxlc3BhY2UiLAorCQkJCQkJCQkJICJ0YWJsZXNwYWNlIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgor CQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkgIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhz dWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJ CSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRU5BQkxFIEFMV0FZUyBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJ ICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRU5BQkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJ CQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VS IEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdn ZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Rpc2FibGVUcmlnVXNlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRElTQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRpc2FibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJVTEUg JXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBy dWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzUnVsZToKKwkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJ CQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRU5BQkxFIFJFUExJQ0EgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUi LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJV TEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2Fi bGUgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIk5PIElOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImFkZCBvZiIsCisJCQkJCQkJCQkgInR5cGVfb2YiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90 IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50aXR5OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVBMSUNBIElERU5USVRZIiwgMSwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJyZXBsaWNhIGlkZW50aXR5Iik7CisJCQkJc3dpdGNo ICgoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5pZGVudGl0eV90eXBlKQor CQkJCXsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQ6CisJCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAiREVGQVVMVCIpOworCQkJCQkJYnJl YWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJ CQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJOT1RISU5HIik7CisJCQkJCQlicmVhazsKKwkJCQkJ Y2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVYOgorCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl X1ZBKCJVU0lORyBJTkRFWCAle2luZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkgICJpbmRleCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCSAgKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNt ZC0+ZGVmKS0+bmFtZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2lk ZW50fXMiLCB0bXBvYmoyKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Rpc2FibGVSb3dTZWN1cml0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi RElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYg VE9ET0xJU1QKKwkJCWNhc2UgQVRfR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wb2JqID0gZGVwYXJz ZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KyNlbmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkFUVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJ CQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJl bGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJCQkJIFJlbGF0aW9u R2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJ CQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJ ICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJ IHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRh Y2hQYXJ0aXRpb25GaW5hbGl6ZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNI IFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIEZJTkFMSVpFIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIiwKKwkJ CQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug QVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lk CQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlCSpzZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAgKmNv bGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIEFERCAle2lkZW50aXR5X2NvbHVtbn1z IiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGlkZW50aXR5IiwK KwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJ CQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFt ZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50 aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgZmFsc2UpOworCisJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgImlkZW50aXR5X2NvbHVtbiIsIHNlcWRlZik7CisKKwkJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRJZGVudGl0eToKKwkJCQl7CisJCQkJCURl ZkVsZW0JKmRlZmVsOworCQkJCQljaGFyCQlpZGVudGl0eSA9IDA7CisJCQkJCU9ialRyZWUJICAg KnNlcWRlZjsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsK KworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBpZGVudGl0eSIs CisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJ CQkJCWlmIChzdWJjbWQtPmRlZikKKwkJCQkJeworCQkJCQkJTGlzdAkgICAqZGVmID0gKExpc3Qg Kikgc3ViY21kLT5kZWY7CisKKwkJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIExpc3QpKTsK KworCQkJCQkJZGVmZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVsZW0sIGRlZik7CisJCQkJCQlpZGVu dGl0eSA9IGRlZkdldEludDMyKGRlZmVsKTsKKwkJCQkJfQorCisJCQkJCWF0dG51bSA9IGdldF9h dHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVs aWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0 cnVlKTsKKwkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVsaWQsIGlk ZW50aXR5LCB0cnVlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Rl ZmluaXRpb259cyIsIHNlcWRlZik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2Ug QVRfRHJvcElkZW50aXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBEUk9QIElERU5USVRZIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkcm9wIGlkZW50aXR5IiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg IiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYg RVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKFdB Uk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJCQkJIHN1YmNt ZC0+c3VidHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBzdXBw b3J0IHJlcGxpY2F0aW5nIEFMVEVSIFRBQkxFIHdoaWNoIGNvbnRhaW5zIHZvbGF0aWxlCisJCSAq IGZ1bmN0aW9ucyBiZWNhdXNlIEl0J3MgcG9zc2libGUgdGhlIGZ1bmN0aW9ucyBjb250YWluIERE TC9ETUwgaW4KKwkJICogd2hpY2ggY2FzZSB0aGVzZSBvcGVydGlvbnMgd2lsbCBiZSBleGVjdXRl ZCB0d2ljZSBhbmQgY2F1c2UKKwkJICogZHVwbGljYXRlIGRhdGEuIEluIGFkZGl0aW9uLCB3ZSBk b24ndCBrbm93IHdoZXRoZXIgdGhlIHRhYmxlcyBiZWluZworCQkgKiBhY2Nlc3NlZCBieSB0aGVz ZSBEREwvRE1MIGFyZSBwdWJsaXNoZWQgb3Igbm90LiBTbyBibGluZGx5IGFsbG93aW5nCisJCSAq IHN1Y2ggZnVuY3Rpb25zIGNhbiBhbGxvdyB1bmludGVuZGVkIGNsYXVzZXMgbGlrZSB0aGUgdGFi bGVzIGFjY2Vzc2VkCisJCSAqIGluIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGV2ZW4gZXhpc3Qg b24gdGhlIHN1YnNjcmliZXItc2lkZS4KKwkJICovCisJCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1 bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coIkFMVEVSIFRB QkxFIGNvbW1hbmQgdXNpbmcgdm9sYXRpbGUgZnVuY3Rpb24gY2Fubm90IGJlIHJlcGxpY2F0ZWQi KSkpOworCisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVk IHRoZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVl KGV4cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNtZHMpID09IDApCisJCXJldHVybiBO VUxMOworCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7c3ViY21kczos IH1zIiwgc3ViY21kcyk7CisKKwlyZXR1cm4gYWx0ZXJUYWJsZVN0bXQ7Cit9CisKKy8qCisgKiBT dWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBD b2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24gdHlwZWQpIHRhYmxlIGNyZWF0aW9u LgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBh cmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMg cm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUg KHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5LikuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBM aXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYs IGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJ T2JqVHJlZQkgICAqdG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxh dGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07 CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJ Ym9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJp dGVkIGNvbHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVk LgorCSAqCisJICogWFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJl c2VudCA9IGZhbHNlIiBvciBzb21lIHN1Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2Fs KQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVs aWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQor CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVz XCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJG b3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0 dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwg JnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiAle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtkZWZhdWx0fXMgJXtu b3RfbnVsbH1zCisJICogJXtjb2xsYXRpb259cworCSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVl X1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29s bmFtZSwKKwkJCQkJCQkiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1vZCkpOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1w b2JqID0gbmV3X29ianRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Np b24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Y29tcHJlc3Npb25fbWV0aG9k fUkiLCBjb2xkZWYtPmNvbXByZXNzaW9uKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29sdW1uLCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwl7CisJCU9i alRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cGNvbGxhdGlvbik7CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0K KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOwor CisJaWYgKCFjb21wb3NpdGUpCisJeworCQlPaWQJc2VxcmVsaWQgPSBJbnZhbGlkT2lkOworCisJ CS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNlc3NhcnkuICBOb3Rl IHRoYXQgd2UgY2Fubm90IHRydXN0CisJCSAqIHBnX2F0dHJpYnV0ZS5hdHRub3RudWxsIGhlcmUs IGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQgd2hlbgorCQkgKiBwcmltYXJ5IGtleXMgYXJl IHNwZWNpZmllZDsgYW5kIHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJh aW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0ZWx5IHNwZWNpZmllZC4gIFRoZXJlZm9y ZSwKKwkJICogd2Ugc2NhbiB0aGUgbGlzdCBvZiBjb25zdHJhaW50cyBhdHRhY2hlZCB0byB0aGlz IGNvbHVtbiB0byBkZXRlcm1pbmUKKwkJICogd2hldGhlciB3ZSBuZWVkIHRvIGVtaXQgYW55dGhp bmcuCisJCSAqIChGb3J0dW5hdGVseSwgTk9UIE5VTEwgY29uc3RyYWludHMgY2Fubm90IGJlIHRh YmxlIGNvbnN0cmFpbnRzLikKKwkJICoKKwkJICogSW4gdGhlIEFMVEVSIFRBQkxFIGNhc2VzLCB3 ZSBhbHNvIGFkZCBhIE5PVCBOVUxMIGlmIHRoZSBjb2xEZWYgaXMKKwkJICogbWFya2VkIGlzX25v dF9udWxsLgorCQkgKi8KKwkJc2F3X25vdG51bGwgPSBmYWxzZTsKKwkJZm9yZWFjaChjZWxsLCBj b2xkZWYtPmNvbnN0cmFpbnRzKQorCQl7CisJCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3Ry YWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RS X05PVE5VTEwpCisJCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQl9CisJCWlmIChpc19hbHRlciAm JiBjb2xkZWYtPmlzX25vdF9udWxsKQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkJIHNhd19ub3Ru dWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVM VCIpOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJeworCQkJY2hhciAqZGVmc3RyOwor CisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3Jt LT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtkZWZhdWx0fXMiLCB0bXBvYmopOworCisJCS8q IElERU5USVRZIENPTFVNTiAqLworCQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lk CWF0dG5vID0gZ2V0X2F0dG51bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwkJCXNlcXJlbGlk ID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCXRt cG9iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHks IGlzX2FsdGVyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV9j b2x1bW59cyIsIHRtcG9iaik7CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICov CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJHRU5FUkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChj b2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJ Y2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVs YXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2dlbmVyYXRpb25fZXhwcn1zIFNU T1JFRCIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAi JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBvYmopOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShh dHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBD UkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9k ZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFu IHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBl IGRlY2xhcmF0aW9uLAorICogY29sbGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJl dHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5V TEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50 IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVt bkRlZiAqY29sZGVmKQoreworCU9ialRyZWUJKmNvbHVtbiA9IE5VTEw7CisJT2JqVHJlZQkqdG1w b2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1 cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7 CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51 bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5h bWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJU dXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVt biBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOwor CWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwln ZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0 eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBO T1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9u CisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xk ZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxU RVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBj b2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFp bnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05P VE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVh c2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7 bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lU SCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAor CQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkgc2F3X25vdG51 bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQi KTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNoYXIgKmRlZnN0cjsKKworCQlk ZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRu dW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwl9CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEdlbmVyYXRl ZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVkIHRhYmxlcywgc28gd2UgYXJlIGRv bmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gY29sdW1u OworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRpdHku CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJl bGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmNv bHVtbjsKKwlPYmpUcmVlCSAgICppZGVudG9iajsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlS ZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Ugc2Vx Zm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwljaGFyCSAgICppZGVudGZt dDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwljb2x1bW4gPSBuZXdfb2JqdHJlZSgiIik7CisKKwlp ZiAoIU9pZElzVmFsaWQoc2VxcmVsaWQpKQorCXsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGNvbHVt biwgInByZXNlbnQiLCBmYWxzZSk7CisJCXJldHVybiBjb2x1bW47CisJfQorCisJaWYgKGFsdGVy X3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAi JXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOwor CQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7CisJfQorCisJaWRlbnRvYmogPSBu ZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5U SVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRvYmosIG9iamZtdCwgIkFM V0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09ICBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVG QVVMVCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRvYmosIG9iamZtdCwgIkJZIERFRkFV TFQiKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChpZGVudG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X3R5cGV9 cyIsIGlkZW50b2JqKTsKKworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVM SUQsIHNlcXJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIHNlcXJl bGlkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxl KTsKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisKKwkvKiBEZWZp bml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9D YWNoZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfQ3ljbGUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE5VTEwsIHNlcWZvcm0s IGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52 YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChOVUxMLCBzZXFmb3Jt LCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVz dGFydChOVUxMLCBzZXFkYXRhKSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9X TkVEIEJZIGhlcmUgKi8KKworCWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2FycmF5X29iamVj dChjb2x1bW4sICIle3NlcV9kZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNlCisJCWFwcGVu ZF9hcnJheV9vYmplY3QoY29sdW1uLCAiKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIiwgZWxlbXMp OworCisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBjb2x1 bW47Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVD bWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisJT2JqVHJlZQkgICAqY29sc2V0OworCWNoYXIJICAgKmZtdDsKKwlib29sCQlpc19yZXNldCA9 IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldE9wdGlvbnM7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0 aW9uczosIH1zKQorCSAqLworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFJFU0VUICI7CisJZWxzZQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUICI7CisKKwljb2xzZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBz dWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsK KworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0Rl ZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0 X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVj dChjb2xzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gY29sc2V0Owor fQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJTgorICoKKyAqIEdpdmVuIGEgZnVu Y3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBK U09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21haW4oT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZQkgICAqY3JlYXRlRG9tYWluOworCU9ialRyZWUJICAgKnRt cG9iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCUxpc3QJ ICAgKmNvbnN0cmFpbnRzOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9i amVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK Kwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAl e3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJhaW50c31zCisJICogJXtjb2xsYXRpb259cwor CSAqLworCWNyZWF0ZURvbWFpbiA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAiRE9NQUlOICV7aWRlbnRpdHl9RCBB UyIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURv bWFpbiwKKwkJCQkJCSAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5 cEZvcm0tPnR5cGJhc2V0eXBlLCB0eXBGb3JtLT50eXB0eXBtb2QpKTsKKworCWlmICh0eXBGb3Jt LT50eXBub3RudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVEb21haW4sICIle25v dF9udWxsfXMiLCAiTk9UIE5VTEwiKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICIiKTsKKworCWNvbnN0cmFpbnRzID0gb2J0YWlu Q29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBvYmplY3RJZCk7CisJaWYgKGNvbnN0cmFpbnRz ID09IE5JTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEsCisJCQkJCQkJICJlbGVtZW50cyIs IE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZURvbWFpbiwgIiV7Y29uc3RyYWludHN9cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikp CisJeworCQlPYmpUcmVlICpjb2xsbmFtZTsKKworCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgICB0eXBGb3Jt LT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle25hbWV9 RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sICIl e2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJ cmV0dXJuIGNyZWF0ZURvbWFpbjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGdW5jdGlv blN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQg dGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlRnVuYzsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJ RGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsKKwljaGFyCSAgICpwcm9iaW47CisJ TGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRzOworCUxpc3QJICAgKnNldHMgPSBO SUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0Q2Vs bCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFyYW1zID0gTlVMTDsKKwlIZWFwVHVw bGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJSGVhcFR1cGxlCWxhbmdUdXA7 CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJmdHlwZXM7CisJRm9ybV9wZ19sYW5n dWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5cG51bTsKKwlpbnQJCQludHlwZXM7 CisJYm9vbAkJaXNudWxsOworCWJvb2wJCWlzZnVuY3Rpb247CisKKwkvKiBHZXQgdGhlIHBnX3By b2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElk KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8q IEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnByb2xhbmcpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJl IGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJvY0Zvcm0tPnByb2xhbmcpOworCWxh bmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJ ICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3NyYyBhbmQgcHJvYmluLiAgV2UgY29w ZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxMIG9yICItIiwgYnV0IHByb3NyYyBt dXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9zcmMsICZpc251 bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxsIHByb3NyYyBpbiBmdW5jdGlv biB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2UgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgcHJvYmluICov CisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkg ICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQlwcm9iaW4g PSBOVUxMOworCWVsc2UKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0 dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHByb2JpbiwgIi0iKSA9PSAw KQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1cmV9cyBSRVRVUk5T ICV7cmV0dXJuX3R5cGV9cworCSAqIExBTkdVQUdFICV7dHJhbnNmb3JtX3R5cGV9cyAle2xhbmd1 YWdlfUkgJXt3aW5kb3d9cyAle3ZvbGF0aWxpdHl9cworCSAqICV7cGFyYWxsZWxfc2FmZXR5fXMg JXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisJICogJXtjb3N0 fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtvYmpmaWxlfUws CisJICogJXtzeW1ib2x9TAorCSAqLworCWNyZWF0ZUZ1bmMgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtvcl9yZXBsYWNlfXMi LAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisKKwkvKgorCSAq IFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0IHRoZSB0eXBlIE9JRHMg ZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJZiBwcm9uYXJncyBlcXVh bHMgdGhlIHBhcmFtZXRlciBsaXN0IGxlbmd0aCwKKwkgKiB0aGVyZSBhcmUgbm8gT1VUIHBhcmFt ZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUgT0lEIGZyb20KKwkgKiBwcm9h cmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2FsbGFyZ3R5cGVzLCB3aGlj aCBpcworCSAqIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlwYXJyYXkgPSBwYWxsb2Mo bGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgKiBzaXplb2YoT2lkKSk7CisJaWYgKGxpc3Rf bGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpID4gcHJvY0Zvcm0tPnByb25hcmdzKQorCXsKKwkJYm9v bAlpc251bGw7CisJCURhdHVtCWFsbHR5cGVzOworCQlEYXR1bSAgKnZhbHVlczsKKwkJYm9vbCAg ICpudWxsczsKKwkJaW50CQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIo UFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVz LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJOVUxMIHByb2FsbGFy Z3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJzIHRoYW4gYXJncyIpOworCQlkZWNvbnN0cnVjdF9h cnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0 JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1z ICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpKQorCQkJZWxvZyhFUlJPUiwgIm1pc21h dGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChu b2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQor CWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJz KTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tp XTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywg d2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVzc2lvbiBhcworCSAqIGEgbGlzdCBzbyB0aGF0IHdl IGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3By b2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0g RnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9 IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklMOwor CQljdXJkZWYgPSBOVUxMOworCX0KKworCS8qCisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBh cmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFy cmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwg bm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5j dGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOwor CQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlCSAgICpuYW1lOworCisJCS8qCisJ CSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyBlbmQgb2YgaW5wdXQgYXJndW1l bnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJldHVy biB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJhY2sgb2YgdGhl IGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdAorCQkgKiB3ZSBjYW4gZWFzaWx5 IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5tb2Rl ID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJCQli cmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6ICV7 bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7ZGVmYXVsdH1zCisJCSAqCisJCSAqIE5vdGUgdGhh dCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBub3QgYW4gaWRlbnRpZmllcjsgdGhlIHJlYXNv bgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFic2VudCBwYXJhbWV0ZXIgbmFtZSBtdXN0IHBy b2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBub3QgIiIsIHdoaWNoIGlzIHdoYXQgd291bGQg aGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAqICV7bmFtZX1JIGhlcmUuICBTbyB3ZSBhZGQg YW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhbGxvdyB1cworCQkgKiB0byBpbmplY3Qg YSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8KKwkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXttb2RlfXMiLAorCQkJCQkJ CSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOID8gIklOIiA6CisJCQkJCQkJIHBhcmFtLT5t b2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBG VU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNf UEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkgIklOIik7CisKKwkJLyogT3B0 aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9mICJuYW1lIiBvY2N1cnMgaGVyZSAqLworCisJ CW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIl e25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1lID8gcGFyYW0tPm5hbWUgOiAiTlVMTCIpOwor CisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAicHJlc2VudCIsCisJCQkJCQkgICBwYXJhbS0+ bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmos ICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVM VCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFy ICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2Fy Z2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0gbGZpcnN0KGN1cmRlZik7CisK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIle3ZhbHVlfXMiLCBleHByKTsK KwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9CisJCWVsc2UKKwkJCWFw cGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMg PSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwl9CisKKwl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBvYmplY3RJZCkpOworCisJYXBw ZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1w b2JqLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9L SU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCWVsc2UK KwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlBST0NFRFVSRSAle3NpZ25hdHVy ZX1zIiwgdG1wb2JqKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9m IHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsIG9yCisJICogYSBUQUJMRShs aXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNh dyBhCisJICogdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxp c3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcs ICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3NldG9mfXMiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0c2V0ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlz dAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOworCisJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRSIsIDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9i alR5cGVTdHJpbmcsICJ0YWJsZSIpOworCQlmb3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRh YmxlX3BhcmFtcyA9IGxuZXh0KG5vZGUtPnBhcmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsK KwkJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJ CQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBh cmFtb2JqLCAiJXtuYW1lfUkiLCBwYXJhbS0+bmFtZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVj dChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5 cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywg bmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wb2JqLCAiKCV7cmV0dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlz ZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJSRVRVUk5TICV7 cmV0dXJuX3R5cGV9cyIsIHRtcG9iaik7CisKKwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiVFJBTlNGT1JNIik7CisKKwludHlwZXMgPSBnZXRfZnVuY190 cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMpOworCWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkr KykKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEs CisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wb2Jq KTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXtm b3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5j LCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wb2JqKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLAorCQkJCQkJIE5hbWVTdHIobGFu Z0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCXsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJv a2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDogIiIpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGlsaXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+ cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUi IDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/ CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNyZWF0ZUZ1bmMsICIle3BhcmFsbGVsX3NhZmV0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FG RSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJ Q1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUi KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtsZWFrcHJvb2Z9cyIs CisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c3RyaWN0fXMiLAorCQkJCQkJCSBw cm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5Q VVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlRnVuYywgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgcHJv Y0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklU WSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7Y29z dH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJ CQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3Qp KTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnBy b3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcG9iaiwgIiV7cm93c31uIiwg cHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAi JXtyb3dzfXMiLCB0bXBvYmopOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7 bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJn dHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBm dW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1 cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJ TlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1zIiwK KwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEs CisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxM LAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1cHBvcnR9cyIsIHRtcG9iaik7CisJfQorCisJZm9y ZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbQkqZGVmZWwgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQlpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpz c3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0g RXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVu Y3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCQlzZXRzID0gbGFw cGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJfQorCX0KKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NldF9vcHRpb25zOiB9cyIsIHNldHMpOworCisJ LyogQWRkIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uICovCisJKHZvaWQpIFN5c0NhY2hlR2V0QXR0 cihQUk9DT0lELCBwcm9jVHVwLCBBbnVtX3BnX3Byb2NfcHJvc3FsYm9keSwgJmlzbnVsbCk7CisJ aWYgKHByb2NGb3JtLT5wcm9sYW5nID09IFNRTGxhbmd1YWdlSWQgJiYgIWlzbnVsbCkKKwl7CisJ CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwkJcHJpbnRf ZnVuY3Rpb25fc3FsYm9keSgmYnVmLCBwcm9jVHVwKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVj dChjcmVhdGVGdW5jLCAiJXtkZWZpbml0aW9ufXMiLCBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYg KHByb2JpbiA9PSBOVUxMKQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywg IkFTICV7ZGVmaW5pdGlvbn1MIiwKKwkJCQkJCQkgc291cmNlKTsKKwl9CisJZWxzZQorCXsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkFTICV7b2JqZmlsZX1MIiwgcHJvYmlu KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiwgJXtzeW1ib2x9TCIsIHNv dXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKworCXJldHVybiBjcmVhdGVGdW5jOworfQorCisvKgorICogRGVwYXJzZSBh IENSRUFURSBPUEVSQVRPUiBDTEFTUyBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJ CQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0SWQ7CisJSGVhcFR1cGxl ICAgb3BjVHVwOworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZv cm07CisJRm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpU cmVlCSAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJ b3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQp KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zv cm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNl YXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7 CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lk ZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKwkgKiAle2FtbmFt ZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1zOiwgfXMKKwkgKi8KKworCXN0bXQgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkg ICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wY0Zv cm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5k X3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVmYXVsdH1zIiwKKwkJCQkJCSBvcGNGb3JtLT5vcGNk ZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJLyogQWRkIHRoZSBGT1IgVFlQRSBjbGF1c2Ug Ki8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiRk9SIFRZUEUgJXt0eXBlfVQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwgLTEpKTsKKworCS8q IEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIlVT SU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8q CisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlOyBidXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUg YW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRv IGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFpbHVyZQorCSAqIGlmIHRoZSBvcGZh bWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJCSAib3BmYW1pbHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlm IChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNu YW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFt ZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle29wZmFtaWx5fXMiLCAgdG1wb2JqKTsK KworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFk ZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRo ZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdF Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2tleXR5cGUgIT0gSW52YWxpZE9pZCA/CisJ CQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJ CQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9w ZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAl e3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBv cGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVyYXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQki cnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXIt PnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIg QlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7 CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKworCQkJdG1wb2JqMiA9IG5l d19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIiwgMCk7CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3BmYW1pbHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBw b3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2goY2VsbCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1 cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7 CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmpl Y3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJl ICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVt fW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLAorCQkJCQkJCSA0LAorCQkJ CQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJCQkJCQkJICJmdW5jdGlv biIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9j Rm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJv bmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7 CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2Jq VHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBl c1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmpl Y3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJ CWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7 CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2Fj aGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiQVMgJXtpdGVtczos IH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2Fj aGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0 ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dl ciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlIZWFwVHVwbGUgICBhbVR1cDsKKwlGb3Jt X3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbSAgYW1Gb3JtOworCU9ialRyZWUJICAg KmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg d2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBH RVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmpl Y3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3Bn X2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsCisJCQkJ CQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJICAiYW1uYW1lIiwgT2Jq VHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hl KGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiBjb3BmU3RtdDsK K30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3Jl YXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcG9saWN5OworCisJcG9s aWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkv KiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGlj eSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+ d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg UE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAq LworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBub2RlLT5yb2xlcywgISFu b2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOworCisJcmV0dXJuIHBvbGlj eTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVu IGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVT Y2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkJICpjcmVhdGVTY2hlbWE7CisJT2Jq VHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKwkg Ki8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25hbWV9SSIsIG5vZGUtPnNjaGVtYW5h bWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUt PmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9u X3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJ ZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9s ZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlvbn1z IiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCisvKgorICogUmV0dXJuIHRo ZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMgY2hhciAqCitEb21haW5H ZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0dW0JZGVmOworCU5vZGUgICAqZGVm dmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVH ZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJ CQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJkb21haW4gXCIlc1wi IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJCSBOYW1lU3RyKCgoRm9ybV9wZ190 eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsKKwlkZWZ2YWwgPSBzdHJpbmdUb05v ZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Np b24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8sCisJCQkJCQkJCQkgICBmYWxzZSwgZmFs c2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFp blN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEb21haW5TdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2JqZWN0QWRkcmVzcyBjb25zdHJh aW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAoQWx0ZXJEb21haW5TdG10ICop IHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1fcGdfdHlwZSBkb21Gb3JtOwor CU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJICAgKmZtdDsKKwljb25zdCBjaGFyICp0eXBl OworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09OU1RSQUlOVCBpcyBoYW5kbGVkIGJ5IHRoZSBE Uk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2RlLT5zdWJ0eXBlID09ICdYJykKKwkJcmV0dXJu IE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZG9t Rm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApOworCisJc3dpdGNoIChub2Rl LT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVG QVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJeworCQkJCWZtdCA9ICJBTFRF UiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gInNl dCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRv bSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0 cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9t LCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZhdWx0KGRvbVR1cCkpOworCQkJfQorCisJCQli cmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxU RVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBub3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVh azsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRFUiBE T01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2Jq dHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJ Y2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlOVC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMg YXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJ CXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShm bXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo ZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEgbmV3IGNvbnN0cmFpbnQgaGFzIGEgbmFtZSBh bmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJBREQg Q09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50 X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOwor CQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8KKwkJCWZtdCA9ICJBTFRF UiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0ZSBjb25zdHJhaW50IjsKKworCQkJLyoKKwkJ CSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3Ry YWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8KKwkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIG5v ZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkvKiBkb25lICovCisJUmVs ZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gYWx0ZXJEb207Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQg dGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9i alRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXBvYmo7CisJUmVsYXRpb24JcmVsYXRpb247 CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7 CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJ c2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10 ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBv dXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyBy ZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5 KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVj dElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJ CQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVl bmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2Up IEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRpdHl9RAorCSAqLworCWNy ZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0 cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJdG1wb2JqID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJ CQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJ LyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoY3JlYXRlU2Vx LCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf TWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwg c2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jl c3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90 IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU2VxLCAi JXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENS RUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9 IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0Owor CU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZQkqdG1wb2JqOworCUxpc3QJICAgKmxpc3Qg PSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1UIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lk ZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworCSAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlv bl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cworCSAqICV7b25fY29tbWl0 fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFU RSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGVyc2lzdGVuY2V9 cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlRBQkxFIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMi LAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBv YmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVk IHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0 cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRp cmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9w dGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBlbWl0dGVkOyBhbmQKKwkgKiBhbHNvLCB0eXBl ZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+ b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlMaXN0ICAgICAgICp0YWJsZWVs dHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVj dGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFy ZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxkIGNhdXNlIGEKKwkJICogc3lu dGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQg c2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAq LworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVf Zm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBlLCAtMSk7CisJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtvZl90eXBlfVQiLCB0bXBvYmopOworCQl9CisJ CWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAqZWxlbTsKKwor CQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAo T2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBh cmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFS VElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3Bh cmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKwor CQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxl RWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgICAgICAvKiB0eXBlZCB0YWJsZSAq LworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0 cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOwor CisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJ fQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiKCV7ZWxlbWVudHM6LCB9cyki LCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0 bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisK KwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBh cmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29s dW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUg ZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAq IHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUg aXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWlu dCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhp bmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVl bHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRw Y29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAgICAgLyogbm90IHR5cGVkIHRhYmxlICovCisJ CQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0g b2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJ YXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cyki LCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9u LiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0 aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1 YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWlu ZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBh cnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8g Z3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUo IklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkK KwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFy c2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxf b2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0KKworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxl c3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXt0 YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3Bh Y2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7b25f Y29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0 KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJ eworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBh cnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVlIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdp bmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAqIHdoaWNoIGhhdmVuJ3QgYmVlbiB0cmFuc2Zv cm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRp dGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJ ZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0g UkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUob2JqZWN0SWQpKTsK KwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMi KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ieX1zIiwgdG1w b2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJVU0lO RyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9kZS0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJ eworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2FjY2Vzc19tZXRob2R9cyIsIHRtcG9iaik7 CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisK Kwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAgICp0bXBvYmoy OworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2Jq MiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwly ZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVh dGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0g KERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmRlZlN0bXQgPSBOVUxMOwor CisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJ CWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2Vf RGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVs dDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJl dHVybiBkZWZTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBP UEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10 X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBs ZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlM aXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1 cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJG b3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJc3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9y bS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJy aWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFU T1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlk KG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Bl cn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdh dGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCisJLyogSk9JTiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpv aW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CisJLyogTUVSR0VTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0t Pm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3Jt LT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICog RGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUp Cit7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkg ICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0Owor CWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9w Z190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9y IHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3Rt dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9y bS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1 ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlz dG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9v YmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0t PnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7 CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8q IElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9V VFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJF Q0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4p KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQ TU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFu YWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5 cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5B TExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0KKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBP YmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZh bCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiKTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVw cmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3 aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19j YXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0 YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9n LmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBj aGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxp Z25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXAsICIle2FsaWdufXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5 cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJ CQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJ CWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoK KwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9 CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5Iik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRl Z29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0 eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0 eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251 bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0 KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVM RU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09M TEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxp c3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKwor LyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQor eworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAg ICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0 eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQor CQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJTRVQgIjsKKworCXJlbHNldCA9IG5l d19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQor CXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBp c19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkp OworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJlbHNldCwgIigl e29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiByZWxzZXQ7Cit9CisKKworCisKKwor CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK KworCisKKworCisKKworCisKKworCisKKworCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdT dG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRp b24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJp Z0Zvcm07CisJT2JqVHJlZQkgICAqdHJpZ2dlcjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJaW50 CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3QJICAgKmV2ZW50czsKKworCXBnX3Ry aWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9w Z190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikg R0VUU1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICog Q1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6 IE9SIH1zCisJICogT04gJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9h dHRyczogfXMKKwkgKiBGT1IgRUFDSCAle2Zvcl9lYWNofXMgJXt3aGVufXMgRVhFQ1VURSBQUk9D RURVUkUgJXtmdW5jdGlvbn1zCisJICovCisJdHJpZ2dlciA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnR9cyIsCisJ CQkJCQkgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJTlQiIDogIiIpOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QodHJpZ2dlciwgIlRSSUdHRVIgJXtuYW1lfUkiLCBub2RlLT50cmlnbmFt ZSk7CisKKwlpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJCRUZPUkUiKTsKKwllbHNlIGlm IChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVSKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQUZURVIiKTsKKwllbHNlIGlmIChub2RlLT50aW1p bmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdn ZXIsICIle3RpbWV9cyIsICJJTlNURUFEIE9GIik7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIHRyaWdnZXIgdGltaW5nIHR5cGUgJWQiLCBub2RlLT50aW1pbmcpOworCisJLyoK KwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBv dXRwdXQgaXMgYSBsaXN0OworCSAqIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3Ry aW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUg d2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJ ZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQor CQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsK KwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFw cGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2 ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMs IG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJ R0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5JTCkKKwkJewor CQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAg ICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRs eSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAor CQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rp bmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJ CQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5k IiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUt PmNvbHVtbnMpCisJCQl7CisJCQkJY2hhciAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxs KSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1l KSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwg fUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7 ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdyZWxp ZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIk9OICV7cmVsYXRpb259RCIsIHRt cG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSIsIDApOworCWlmICh0cmln Rm9ybS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUJICAgKnJlbDsKKworCQlyZWwgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CSAgdHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdn ZXIsICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwlsaXN0ID0gTklMOworCWlmIChub2Rl LT5kZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5n X29iamVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQlsaXN0 ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiSU5JVElBTExZIERF RkVSUkVEIikpOworCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludF9h dHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJGT1Ig RUFDSCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVO VCIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldIRU4iLCAwKTsKKwlpZiAobm9kZS0+ d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsK KwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9w Z190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAm aXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJib2d1cyBOVUxMIHRncXVh bCIpOworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2 YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtjbGF1c2V9cykiLAor CQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJ CSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkgImZ1bmNuYW1lIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7 CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJ CWJ5dGVhICAqdGdhcmdzOworCQljaGFyICAgKmFyZ3N0cjsKKwkJYm9vbAlpc251bGw7CisJCWlu dAkJZmluZHg7CisJCWludAkJbGVudGdhcmdzOworCQljaGFyICAgKnA7CisKKwkJdGdhcmdzID0g RGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190 cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwK KwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3Mp OworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdz dHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJ CXNpemVfdAl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2Rpbmcg aXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBh cmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBh cmd1bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCQkJCQlhcmdzdHIs IE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpKSk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVuICsgMTsKKwkJfQorCX0KKwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcG9iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CQkvKiBtaWdodCBiZSBOSUwgKi8KKwlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0 cmlnZ2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zIiwgdG1wb2JqKTsKKworCXRh YmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gdHJpZ2dl cjsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBD T0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4u LikgY29udGVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZF bGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUJICAgKnNldDsKKwlPYmpUcmVl CSAgICpvcHRuYW1lOworCisJc2V0ID0gbmV3X29ianRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdf b2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFj ZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ ZGVmbmFtZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRu YW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9 ICV7dmFsdWV9TCIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJ CQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVy biBzZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIERST1AgY29tbWFuZHMuCisg Ki8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHks IGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7 CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKwljaGFyCQkgICAqY29tbWFuZDsKKwljaGFyCQkgICAq aWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwljaGFyCQkgICAqZm10OworCU9ialRy ZWUJCSpzdG10LCAqc3RtdDI7CisJSnNvbmIJCSAgKmpzb25iOworCisJaW5pdFN0cmluZ0luZm8o JnN0cik7CisKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCAlcyBJRiBFWElTVFMgJSV7b2JqaWRlbnRp dHl9cyIsIG9iamVjdHR5cGUpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgIm9i amlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCXN0bXQyID0gbmV3X29ianRy ZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJICAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVo YXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIl e2Nhc2NhZGV9cyIsIHN0bXQyKTsKKworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihzdG10KTsK Kwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJ TUFURURfTEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFy c2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf RnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVl KQoreworCU9ialRyZWUJICAgKm9iajsKKworCWlmIChraW5kID09IFZBUl9SRVNFVF9BTEwpCisJ eworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxMIik7CisJfQorCWVsc2UgaWYgKHZhbHVl ICE9IE5VTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0X25hbWV9SSIs IDEsCisJCQkJCQkgICAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKKworCQkvKgor CQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11 c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlmIChHZXRDb25maWdPcHRpb25GbGFn cyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo b2JqLCAiVE8gJXtzZXRfdmFsdWV9cyIsIHZhbHVlKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmlu Z19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZhbHVlKTsKKwl9CisJZWxzZQorCXsK KwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9i aiwgIiV7c2V0X25hbWV9SSIsIG5hbWUpOworCX0KKworCXJldHVybiBvYmo7Cit9CisKKy8qCisg KiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNw b25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl CSAgICppbmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCVJlbGF0aW9uCWlkeHJlbDsK KwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmlu aXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNo YXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25z dHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVy IGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhl cmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVu KG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlk eHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2lu ZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9u LCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAl e2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisJICogJXt0YWJs ZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICV7d2l0aH1zICV7dGFibGVz cGFjZX1zCisJICogJXt3aGVyZV9jbGF1c2V9cworCSAqLworCWluZGV4U3RtdCA9IG5ld19vYmp0 cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7dW5p cXVlfXMiLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIpOworCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGluZGV4U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJl bnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4 U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8g IklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10 LCAiJXtuYW1lfUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2Us CisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigle2RlZmluaXRpb259cykiLCBk ZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgi V0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIoJXtvcHRzfXMpIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0 bXQsICIle3dpdGh9cyIsIHRtcG9iaik7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wb2JqID0g bmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKwor CS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlm ICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt3aGVyZX1z Iiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aGVy ZV9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJl TG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVy biBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhFUklUUyByZWxhdGlvbnMu CisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVtYSBxdWFsaWZpZWQgdGFi bGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVzLgorICovCitzdGF0aWMg TGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpCit7CisJTGlzdAkgICAq cGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlT Y2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5oUmVsID0gdGFibGVfb3Bl bihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQo JmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJ ZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlz VmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9ialRyZWUJKnBh cmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJ CXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQorCisvKgorICogRGVwYXJzZSB0 aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlv biBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7CisKKwlvbmNvbW1pdCA9IG5ld19v Ymp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05DT01N SVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVURV9S T1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1 ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNF UlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0 X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1J VF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFs dWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29tbWl0LCAicHJlc2VudCIsIGZhbHNl KTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1pdDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBSZW5hbWVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3Rt dCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVT dG10OworCWNoYXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpvYmp0eXBlOworCVJlbGF0aW9u CXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJLyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBS RU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkg KiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIg dGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdv bmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAg Tm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJ ICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90 IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUt PnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5E RVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50 YXgKKwkJCSAqCisJCQkgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5B TUUgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBl KG5vZGUtPnJlbmFtZVR5cGUpOworCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2Jq dHlwZSk7CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRp b24pOworCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMCk7CisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCSBu b2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVs bmFtZSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1Rf UE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlwb2xUdXA7CisJCQkJRm9ybV9wZ19wb2xpY3kg cG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xpY3k7CisJCQkJU2NhbktleURhdGEJa2V5Owor CQkJCVN5c1NjYW5EZXNjCXNjYW47CisKKwkJCQlwZ19wb2xpY3kgPSByZWxhdGlvbl9vcGVuKFBv bGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJU2NhbktleUluaXQoJmtleSwg QW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGljeSwgUG9saWN5T2lkSW5kZXhJZCwgdHJ1ZSwK KwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCQkJCXBvbFR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCQkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBhZGRyZXNzLm9iamVj dElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsK KworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZIiwgMCk7CisJ CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJ CQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtwb2xpY3luYW1lfUkiLCBub2RlLT5zdWJuYW1l KTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiT04gJXtpZGVudGl0eX1E IiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSAJIG5v ZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25f Y2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQl9CQkJCQkJCQkJCQkJCQkJ ICAKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJY2FzZSBPQkpFQ1Rf Q09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0 aW9uKTsKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQ29tcG9z aXRlIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFCisJ CQkgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworCQkJICoKKwkJCSAq IE5vcm1hbCB0eXBlczogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQg UkVOQU1FCisJCQkgKiBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKwkJCSAqLwor CisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJeworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgVFlQRSIpOworCQkJCQkJYXBwZW5kX29i amVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRp b24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIEFUVFJJQlVURSAl JXtjb2xuYW1lfUkiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlvYmp0eXBlID0gc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50Zigi QUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoZm10c3Ry KTsKKworCQkJCS8qIENvbXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8K KwkJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkJbm9k ZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9v YmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+ cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQ09MVU1OICUle2NvbG5h bWV9SSIpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCBmbXRz dHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg IlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVU eXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1l U3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIs IDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlu b2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2UocmVs YXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5D VElPTjoKKwkJCXsKKwkJCQljaGFyCSppZGVudDsKKwkJCQlIZWFwVHVwbGUgcHJvY3R1cDsKKwkJ CQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlB c3NlcnQoSXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9 ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0 dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0 dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVw KSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAl dSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9y IG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIs CisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo cHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRl bnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJ ZCwgdHJ1ZSkpOworCisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5 fXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+cmVuYW1lVHlwZSkpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRz dHIsIDIsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJ CQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJ UmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGNUdXA7CisJCQkJRm9ybV9wZ19v cGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2No ZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJ CWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21l dGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0 eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShD TEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVh cFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7 CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisK KwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7 CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RR dWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmVu YW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zv cm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wY25hbWUpLAorCQkJCQkJCQkJ CQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJZ2V0X2FtX25hbWUo b3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJCQkJSGVhcFR1cGxl ICAgb3BmVHVwOworCQkJCUhlYXBUdXBsZSAgIGFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtICBhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7 CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCQkJCWNo YXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1E IFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJ CSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJl c3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNU KG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo YW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNz IG1ldGhvZCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9ybSA9 IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2Nv cHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3Qg dGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywg JnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJ CQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFz ZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJCX0KKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJlbmFtZVN0bXQgPQorCQkJCW5l d19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25h bWV9SSIsCisJCQkJCQkJICAgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJewor CQkJCUhlYXBUdXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJ CQlSZWxhdGlvbglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4o VHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9j YXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFk ZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1f cGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5fUQg UkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJInRyaWdn ZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdGb3JtLT50Z3Jl bGlkKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9CSkVDVF9DT05W RVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQl7CisJCQkJSGVhcFR1cGxlCW9ialR1 cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpuc3A7CisJCQkJYm9vbAkJ aXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJCQkJTGlzdAkgICAqaWRl bnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCQkJCWNoYXIJICAgKmZtdHN0 cmluZzsKKworCQkJCS8qIG9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0gcmVs YXRpb25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2JqVHVw ID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51bV9v aWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBvYnRhaW4g bmFtZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1l c3BhY2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2JqVHVw LCBBbnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwg JmlzbnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVM TCBuYW1lc3BhY2UiKTsKKworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5y ZW5hbWVUeXBlKTsKKwkJCQlmbXRzdHJpbmcgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBl KTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHJpbmcsCisJCQkJCQkJ CQkJMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChv Ympuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSkpOworCisJ CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9 SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UoY2F0YWxv ZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5yZW5hbWVUeXBl KTsKKwl9CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRl ck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQRU5EUyBPTiAuLi4pLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0gKEFsdGVyT2Jq ZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICphbHRlckRlcGVuZGVT dG10ID0gTlVMTDsKKworCisJaWYgKG5vZGUtPm9iamVjdFR5cGUgPT0gT0JKRUNUX0lOREVYKQor CXsKKwkJUmVsYXRpb24gICAgICAgIHJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJT2JqVHJlZSAqcXVhbGlmaWVkOworCisJCWFsdGVyRGVwZW5k ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgSU5ERVgiKTsKKworCQlxdWFsaWZpZWQgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlhcHBlbmRfb2JqZWN0X29iamVj dChhbHRlckRlcGVuZGVTdG10LCAiJXtpZGVudGl0eX1EIiwgcXVhbGlmaWVkKTsKKwkJcmVsYXRp b25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7Tk99cyIsCisJCQkJCQkgbm9kZS0+cmVtb3ZlID8g Ik5PIiA6ICIiKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckRlcGVuZGVTdG10LCAi REVQRU5EUyBPTiBFWFRFTlNJT04iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEZXBl bmRlU3RtdCwgIiV7bmV3bmFtZX1JIiwgc3RyVmFsKG5vZGUtPmV4dG5hbWUpKTsKKwl9CisJZWxz ZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5k OiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJldHVybiBhbHRlckRl cGVuZGVTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9u LgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7 CisJT2JqVHJlZQkgICAqY2FjaGU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxY2FjaGUpOwor CisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIENBQ0hFICV7dmFsdWV9cyI7CisJZWxz ZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCWNhY2hlID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhY2hlIiwKKwkJCQkJ CSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBv cHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlCSAgICpjeWNsZTsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJf dGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31zIENZQ0xFIjsKKwllbHNlCisJCWZtdCA9ICIle25v fXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgICAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAgICJubyIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVl bmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ug c2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICppbmNyZW1lbnRhbGJ5 OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUp CisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAi SU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JN QVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJaW5jcmVtZW50YWxieSA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFpbmNy ZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNyZW1lbnRhbGJ5KTsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm1heHZhbHVl OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUp CisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJNQVhW QUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFk YXRhLT5zZXFtYXgpOworCW1heHZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJ CSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkJICAidmFsdWUi LCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChtYXh2 YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkK K3sKKwlPYmpUcmVlCSAgICptaW52YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAq Zm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1JTlZBTFVFICV7dmFsdWV9 cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBz cHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwltaW52YWx1ZSA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWlu dmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVy X3RhYmxlKQoreworCU9ialRyZWUJICAgKm93bmVkYnkgPSBOVUxMOworCVJlbGF0aW9uCWRlcFJl bDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1cGxl ICAgdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9wZ19kZXBlbmRf Y2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sxXSwK KwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2NhbktleUluaXQo JmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKworCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQsIHRydWUsCisJ CQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9 IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkgb3duZXJJZDsKKwkJRm9ybV9w Z19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZQkqdG1wb2JqOworCQljaGFyCSAgICpjb2xuYW1l OworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJ LyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAqLworCQlpZiAo ZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51ZTsKKwkJaWYg KGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJY29udGludWU7 CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7CisKKwkJb3du ZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5hbWUob3duZXJJ ZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9X TkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0bXBv YmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25fY2xvc2UoZGVw UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5vIG93bmVyIGNv bHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28KKwkgKiB0aGF0 IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlmICghb3duZWRieSkKKwkJLyogWFhY IHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJb3duZWRieSA9IG5ld19vYmp0cmVlX1ZB KCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMywKKwkJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlwZU51bGwsCisJ CQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBS RVNUQVJUIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2Vx X1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSkK K3sKKwlPYmpUcmVlCSAgICpyZXN0YXJ0OworCWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9 IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJcmVzdGFydCA9 IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIsIDIsCisJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJp bmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlc3RhcnQpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24uCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJl ZQkgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlp ZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCWVs c2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRm KElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXN0YXJ0d2l0aCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0YXJ0 IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlw ZSBTVE9SQUdFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf VHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJ T2JqVHJlZQkgICAqc3RvcmFnZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10Owor CWNoYXIJICAgKnN0cjsKKworCXN3aXRjaCAodHlwRm9ybS0+dHlwc3RvcmFnZSkKKwl7CisJCWNh c2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCXN0 ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlzdHIgPSAiZXh0ZW5k ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3RyID0gIm1haW4iOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAl YyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKworCXRtcHN0ciA9IHBzcHJpbnRmKCIlcyIs IHN0cik7CisKKwlmbXQgPSAiU1RPUkFHRSA9ICV7dmFsdWV9cyI7CisKKwlzdG9yYWdlID0gbmV3 X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0 b3JhZ2UiLAorCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0b3JhZ2UpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg dHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7 CisJT2JqVHJlZQkgICAqcmVjZWl2ZTsKKworCXJlY2VpdmUgPSBuZXdfb2JqdHJlZV9WQSgiUkVD RUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZWNlaXZlLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHJlY2VpdmUsICJwcmVz ZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlY2VpdmUpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190 eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqc2VuZDsKKworCXNlbmQgPSBuZXdfb2JqdHJl ZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIp OworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChzZW5kLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlw c2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHNlbmQsICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHNlbmQpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZGluOworCisJdHlwbW9kaW4gPSBuZXdf b2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cG1vZGluLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dCh0eXBtb2RpbiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3QodHlwbW9kaW4pOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9vdXQg b3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1v ZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVl CSAgICp0eXBtb2RvdXQ7CisKKwl0eXBtb2RvdXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09V VD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHR5cG1vZG91dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1vZG91dCwgInBy ZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwbW9kb3V0KTsK K30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9wdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwYW5hbHl6ZTsKKwor CXR5cGFuYWx5emUgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBhbmFseXplLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cGFuYWx5emUsICJwcmVzZW50IiwgZmFsc2UpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0 eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cHN1YnNjcmlwdDsKKworCXR5cHN1YnNjcmlwdCA9 IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNj cmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHR5cHN1YnNjcmlwdCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0KTsKK30KKworLyoKKyAqIEhhbmRs ZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hv dWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5k ICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCU9ialRy ZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOworCisJ cGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFk ZHJlc3Mub2JqZWN0SWQ7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0 aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBh cnNldHJlZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfQWx0ZXJEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJE b21haW5TdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCSAgY21kLT5kLnNpbXBs ZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlVHJpZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJTZXFTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0RlZmluZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9E ZWZpbmVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUu c2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDb252ZXJzaW9u U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRG9tYWluU3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0NyZWF0ZURvbWFpbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWlseVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUG9saWN5 U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9JbmRleFN0 bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rpb25TdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1Jl bmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUu YWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck9iamVjdERl cGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2lt cGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCWNtZC0+ ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck93 bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1w bGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck9wZXJh dG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJ CWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NvbXBvc2l0 ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICovCisJCQljb21tYW5kID0gZGVw YXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6CS8qIENSRUFURSBUWVBFIEFTIFJBTkdFICovCisJCQlj b21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQljb21tYW5k ID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNl IGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwly ZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBk ZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVt bnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBp biB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVt IGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVt ZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250 ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVs ZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVt ZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dp dGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJ CQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNl X0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVt bkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRl eHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJ CQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5VTEwpCisJCQkJCXsKKwkJCQkJ CU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJY29sdW1uID0gbmV3X29iamVjdF9vYmplY3QodHJl ZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIGNvbHVtbik7CisJCQkJCX0K KwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRh ZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIFdvcmto b3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2Rl KQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQJ b2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0OworCU9ialRyZWUJCSAgICp0cmVlOworCWNo YXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhICBzdHI7CisKKwkvKgorCSAqIEFsbG9j YXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1w IGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1v cnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJICogdGhlIG91dHB1dCBTdHJpbmdJbmZv IGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4 dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGlu dm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogaW4gb3JkZXIgdG8gb2J0YWluIGRl cGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLAorCSAqIHdl IHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBh cmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hf cGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVw ZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBw bGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0 T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgt PnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3Zl cnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJy aWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5 cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29t bWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0g ZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVy T3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVh azsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9w Q2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BP dmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmICh0cmVlKQorCXsKKwkJSnNvbmIgKmpzb25iOwor CisJCWpzb25iID0gb2JqdHJlZV90b19qc29uYih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9D U3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCWVs c2UKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNp bmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4 dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisK KwlyZXR1cm4gY29tbWFuZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MmViMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzYzIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBj b21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVy LCBpdCBkZXRlcm1pbmVzIGhvdyB3ZSBleHBhbmQgdGhlIGpzb24gZWxlbWVudCBpbnRvCisgKiBz dHJpbmcuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVNwZWNUeXBlbmFtZSwKKwlTcGVjT3BlcmF0 b3JuYW1lLAorCVNwZWNEb3R0ZWROYW1lLAorCVNwZWNTdHJpbmcsCisJU3BlY051bWJlciwKKwlT cGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjSWRlbnRpZmllciwKKwlTcGVjUm9sZQorfSBjb252U3Bl Y2lmaWVyOworCisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSBib29s ZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAor CXR2X3RydWUsCisJdHZfZmFsc2UKK30ganNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhw YW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJ CSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCSBj b25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0lu Zm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICph cnJheXNlcCwKKwkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10 KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAq ZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4g YSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkg bmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4g ZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJl dHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLwor c3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNv bnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5Owor CUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21D b250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2 YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBq YnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0 eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJv b2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25i VmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlw ZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24n dAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3 aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEg ZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlz IG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitz dGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5l ciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBp bnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwlj aGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5v dCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcu dmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJ dmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJ CUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Np bmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVs ZW1lbnQgXCIlc1wiIGluIGpzb24gb2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlzdHIgPSBw bnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJ aWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2 YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIo cHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJ CQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVy IikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBwZ19l dmVudF90cmlnZ2VyX2V4cGFuZF9jb21tYW5kCisgKgorICogRmluZCB0aGUgImZtdCIgZWxlbWVu dCBpbiB0aGUgZ2l2ZW4gY29udGFpbmVyLCBhbmQgZXhwYW5kIGl0IGludG8gdGhlCisgKiBwcm92 aWRlZCBTdHJpbmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1cnNpdmUo SnNvbmJDb250YWluZXIgKmNvbnRhaW5lciwgU3RyaW5nSW5mbyBidWYpCit7CisJSnNvbmJWYWx1 ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJY29uc3QgY2hhciAqY3A7CisJY29uc3QgY2hh ciAqc3RhcnRfcHRyOworCWNvbnN0IGNoYXIgKmVuZF9wdHI7CisJaW50CQkJbGVuOworCisJc3Rh cnRfcHRyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoY29udGFpbmVyLCAiZm10Iiwg ZmFsc2UsICZsZW4pOworCWVuZF9wdHIgPSBzdGFydF9wdHIgKyBsZW47CisKKwlmb3IgKGNwID0g c3RhcnRfcHRyOyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQljb252U3BlY2lmaWVyIHNwZWNp ZmllcjsKKwkJYm9vbAkJaXNfYXJyYXkgPSBmYWxzZTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxM OworCQljaGFyCSAgICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJ CX0KKworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFz eSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJ CX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cg Zm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJp bmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3sn KQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJh eXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZw YXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5U RVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYg KCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0 b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFy dCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygm YXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJy YXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJ CQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFE VkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0Vf UEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRh OworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJ fQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3Npbmcg Y29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKworCQlzd2l0Y2gg KCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lkZW50aWZpZXI7 CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90dGVkTmFt ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmc7 CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0 ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNUeXBl bmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9IFNwZWNPcGVy YXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj TnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVyID0gU3BlY1Jv bGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9CisKKwkJ LyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5 LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFtOworCQlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmluZEpzb25iVmFs dWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisKKwkJLyoKKwkJ ICogRXhwYW5kIHRoZSBkYXRhIChwb3NzaWJseSBhbiBhcnJheSkgaW50byB0aGUgb3V0cHV0IFN0 cmluZ0luZm8uCisJCSAqLworCQlpZiAoaXNfYXJyYXkpCisJCQlleHBhbmRfanNvbmJfYXJyYXko YnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5c2VwLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJCWVs c2UKKwkJCWV4cGFuZF9vbmVfanNvbmJfZWxlbWVudChidWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lm aWVyLCBzdGFydF9wdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMg YSBxdW90ZWQgaWRlbnRpZmllci4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLgor ICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1 ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3NlcnQoanNv bnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFs LnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisv KgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2 YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAqIG9iamVjdCBhbmQgbWF5IGNvbnRhaW4gZWxlbWVudHMg InNjaGVtYW5hbWUiIChvcHRpb25hbCksICJvYmpuYW1lIgorICogKG1hbmRhdG9yeSksICJhdHRy bmFtZSIgKG9wdGlvbmFsKS4gIERvdWJsZSBxdW90ZXMgYXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVu dAorICogYXMgbmVjZXNzYXJ5LCBhbmQgZG90IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVkLgorICoK KyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVlZCBhICJjYXRhbG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1 dCBubyBjdXJyZW50IHVzZSBjYXNlCisgKiBuZWVkcyB0aGF0LgorICovCitzdGF0aWMgdm9pZAor ZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNv bnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNv bnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUi LCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9 IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwK KwkJCQkJCQkJCQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHR5cGUgbmFt ZS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8g YnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJ Y2hhcgkgICAqdHlwZW5hbWU7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUJ aXNfYXJyYXk7CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2No ZW1hLXF1YWxpZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcwor CSAqIGVpdGhlciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gdGhvc2UgdHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRo ZSB0eXBlIG5hbWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9y IHR5cGVzIHdpdGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJ ICogdGltZXN0YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2Ft ZSB0aW1lIGFsbG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZy b20gdHlwZSBuYW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRh aW5lZCBmcm9tIGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAg InNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pz b25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBl bmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNv bnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIs IHRydWUsIE5VTEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0 Y2ggKGlzX2FycmF5KQorCXsKKwkJY2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10i OworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJ CQlicmVhazsKKworCQljYXNlIHR2X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkgZXJybXNnKCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hl bWEgPT0gTlVMTCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZp ZXIodHlwZW5hbWUpKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcyIsIHR5cGVuYW1lKTsgLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8K KwllbHNlCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVy KHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcyVzIiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5 X2RlY29yKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0b3Ig bmFtZQorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJl IE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJ eworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7 CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2Us IE5VTEwpOworCisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBz dHIpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUg YXMgYSBzdHJpbmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICog dHlwZSBvYmplY3QuICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIg ZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYg dGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNl dCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJl dHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJw cmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wK K2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwlpZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5h cnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNv bnZhbC0+dmFsLnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpi dkJpbmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmlu ZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJ CQkJCQkJICAicHJlc2VudCIpOworCQkvKgorCQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZh bHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRo ZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRocm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8K KwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5k X2ZtdF9yZWN1cnNpdmUoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwllbHNl CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEg anNvbiB2YWx1ZSBhcyBhIHN0cmluZyBsaXRlcmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5k X2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQorewor CWNoYXIgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNo YXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFyID0g MDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52 YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBu byBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9 PSBOVUxMICYmCisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQor CisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1p dGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0g TlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2Rx bmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZm aXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZv Q2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3Rl ZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJl ZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29u IHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRf anNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhciAqc3RyZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5j dGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpz b252YWwtPnZhbC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJk YXR1bSk7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAg SWYgdGhlIGlzX3B1YmxpYyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4 cGFuZGVkIChubyBxdW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1l LAorICogcXVvdGluZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5k X2pzb252YWxfcm9sZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlq c29uX3RyaXZhbHVlCWlzX3B1YmxpYzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJs aWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQorCXsKKwkJY2hhciAqcm9sZW5hbWU7CisKKwkJcm9s ZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9s ZW5hbWUpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlm aWVyKHJvbGVuYW1lKSk7CisJCQlwZnJlZShyb2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisg KiBFeHBhbmQgb25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2Nv cmRpbmcgdG8gdGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUg aXMgdmFsaWRhdGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1h dGNoIHdoYXQgd2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICog UmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhl ICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3Ry aW5nIGV4cGFuc2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1l bnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJ CQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCBy ZXN1bHQgPSB0cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkv KiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNv bnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFj ayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAq KSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOwor CQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29u dmFsKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBh cmFtKSkpOworCisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVy OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfaWRlbnRpZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90 dGVkTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIl c1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFu ZF9qc29udmFsX2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug U3BlY1N0cmluZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpz b252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4 cGVjdGVkIEpTT04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFu ZF9qc29udmFsX3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj U3RyaW5nTGl0ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1l bnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJ CWV4cGFuZF9qc29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBTcGVjVHlwZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVt ZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJ CQlleHBhbmRfanNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBTcGVjT3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5 KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAl JU8gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBl KSkpOworCQkJZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFr OworCisJCWNhc2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVy aWMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZv ciAlJW4gZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50 eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5 KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAl JVIgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBl KSkpOworCQkJZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJ fQorCisJaWYgKGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJl dmlvdXM7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxl bWVudHMgb2YgYSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0 CisgKiBTdHJpbmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFy YXRlZCBieSB0aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFu ZF9qc29uYl9hcnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJW YWx1ZSAqanNvbmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAor CQkJCSAgIGNvbnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJj b250ZXh0OworCUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0 OworCUpzb25iVmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlT dHJpbmdJbmZvRGF0YSBhcnJheWVsZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0 IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10 KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsK KwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJl dmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNx bGVycmNvbnRleHQ7CisJfQorCisJaWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBw YXJhbSkpKTsKKworCWNvbnRhaW5lciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAo IUpzb25Db250YWluZXJJc0FycmF5KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi ZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0 cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5l cik7CisJd2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9 IFdKQl9ET05FKQorCXsKKwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3Ry aW5nSW5mbygmYXJyYXllbGVtKTsKKworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgm YXJyYXllbGVtLCBwYXJhbSwgJnYsIHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFm aXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJ CWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxl bik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVy cm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisvKgorICog V29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitk ZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsK KwlKc29uYgkgICAqanNvbmI7CisJU3RyaW5nSW5mbyBidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9j MChzaXplb2YoU3RyaW5nSW5mb0RhdGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlk ID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3Ry KSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2Zt dF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBidWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30K KworLyotLS0tLS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9i amVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZt dCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBj b250YWluIHplcm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVs ZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVy c2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQ b3NzaWJsZSBjb252ZXJzaW9uIHNwZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBh IGxpdGVyYWwgJS4KKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVu dGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgor ICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3Ig bmFtZQorICogTAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmds ZSBxdW90ZXMpCisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQor ICogbgkJZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFu ZCBhcyBhIHJvbGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisg KiBUaGUgZWxlbWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZp Y2F0aW9uIHByZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0 aGF0IHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNp ZmllZCBzZXBhcmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0t LS0tCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9B UkdTKQoreworCXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAg Kmpzb25fc3RyOworCisJanNvbl9zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGpzb24pOworCisJ UEdfUkVUVVJOX1RFWFRfUChDU3RyaW5nR2V0VGV4dERhdHVtKGRkbF9kZXBhcnNlX2pzb25fdG9f c3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBm b3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdo aWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMg dm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3 aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggOTljOWY5MS4uNDIwNWRkYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCkBAIC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxh dGlvbiBzZXFyZWwsIExpc3QgKm93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRp b25fY2xvc2UodGFibGVyZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2Ug cGFyYW1ldGVycywgZGV0YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2Vx dWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFU YWJsZSAgICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVw bGU7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEg cmV0U2VxOworCisJLyogT3BlbiBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5p dF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19h Y2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBE QVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygi cGVybWlzc2lvbiBkZW5pZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShzZXFyZWwpKSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAm YnVmLCAmc2VxdHVwbGUpOworCXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2Vx dWVuY2VfZGF0YSkpOworCisJbWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdf c2VxdWVuY2VfZGF0YSkpOworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9u X2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBS ZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBi eSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90 eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRi Li5mNjRhNzIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcs NiBAQAogI2luY2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNo ZS5oIgogCi1zdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50 MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZv cm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgog ICogQWRkIHR5cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3Rh dGljIGNoYXIgKgorY2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQz MiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y ZWdwcm9jLmMKaW5kZXggNmQ0YzFjMi4uNmIyMzZlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5j CkBAIC00NCw2ICs0NCw4IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25z dCBjaGFyICpzdHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBp bnQgKm5hcmdzLCBPaWQgKmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVy ZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJp bmdJbmZvIGJ1ZiwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiAgKgkgVVNFUiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzIsNiArMzM0LDI5 IEBAIGZvcm1hdF9wcm9jZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogfQogCiAv KgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9jIE9JRCB0byAiKGFy Z3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2VkdXJlX29p ZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlIZWFwVHVw bGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXByb2N0dXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1cmVfb2lkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7CisJcHJvY2Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zvcm0sICZidWYsIGZv cmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJcmV0dXJuIGJ1 Zi5kYXRhOworfQorCisvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZCAtIGNvbnZlcnRz IHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKICAqIFRoaXMgZXhwb3J0cyB0 aGUgdXNlZnVsIGZ1bmN0aW9uYWxpdHkgb2YgcmVncHJvY2VkdXJlb3V0IGZvciB1c2UKQEAgLTIw NjAsMyArMjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcs IGJvb2wgYWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0KKwor LyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19w cm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkgaW5kaWNh dGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVzcyBv ZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2lu dGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJICAg Ym9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBwcm9jZm9y bS0+cHJvbmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChp ID0gMDsgaSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nmb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJ CQkgICBmb3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQo dGhpc2FyZ3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlwZSkpOwor CX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKaW5kZXggMmI3YjFiMC4uNTQwNGQ1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1l bnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHBy aW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRf ZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3Rh dGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5m byBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMo ZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJ CSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVl cnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4MiwyMiArNDgx LDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVu Y3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBz dGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNh bXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdl dF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJ IFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAq bm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2Ny aXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsK IHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIg KmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0 YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwot c3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdz LAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29s IGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJL aW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25h bWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0 X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1 YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4 dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQp Owogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9w dGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAi T05MWSAiKQpAQCAtMTAxNSw2NSArMTAwNywxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIo T2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAgICpx dWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJZGVw YXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5nZVRi bEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hFTiAo Iik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0 RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVu Y2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVs a2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVX IFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+ cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0 ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmlu RnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJ bmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3Jl Yy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxs b2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygi bmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5s YXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9t Q2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQo JmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRy dGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsK LQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklM LCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1 cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVm ID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNv bnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwot CQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRf UFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1O X0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQlj b250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBl bmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxz ZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTA1Myw2NCBA QCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0 dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9y bV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KQorewor CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOworCWRlcGFyc2VfY29u dGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRyeSAq b2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7CisK KyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworICAg b2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUtPnJ0ZWtpbmQgPSBS VEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG9s ZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJv bGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKKyAgIG9sZHJ0ZS0+ bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAgIG9sZHJ0ZS0+aW5G cm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAg IG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+cmVsaWQgPSB0cmln cmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKyAgIG5ld3J0ZS0+ YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVyZWYgPSBuZXdydGUt PmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdydGUtPmluaCA9IGZh bHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1aWxkIHR3by1lbGVt ZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOworICAgZHBu cy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRwbnMuY3RlcyA9IE5J TDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisgICBzZXRfc2ltcGxl X2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRl ZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7CisgICBjb250ZXh0 Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQud2luZG93Q2xhdXNl ID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNvbnRleHQudmFycHJl Zml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFH X1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVOVDsKKyAgIGNvbnRl eHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250ZXh0LmluZGVudExl dmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVY UFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2UsICZjb250ZXh0LCBm YWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0tLS0tLQogICogcGdf Z2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5kZXgKICAqCkBAIC0x ODgwLDYgKzE4NzcsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJv b2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIHByZXR0 eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24gdGhhdCByZXBv cnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hhciAqCitwZ19nZXRf cGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfcGFydGtleWRl Zl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3 b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBA IC0yMTMyLDYgKzIxMzYsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9O X0FSR1MpCiB9CiAKIC8qCisgKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0 aW9uIG9mIGEgQ09OU1RSQUlOVCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFp bnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30K KworLyoKICAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJM RSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFuZAogICovCiBjaGFyICoKQEAgLTM1MDEsNyArMzUx NCw3IEBAIHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBH X1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2 b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJv Y3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtMTEzODAsNyArMTEzOTMsNyBAQCBnZXRfdGFi bGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250 ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRo aXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBl LikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3Ms IE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzQs NyArMTE3ODcsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQp CiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNj aGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVu Y3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFy Z3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3As CiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTYwLDcgKzEy MTczLDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMp CiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJl bG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBhMDdlNzM3Li4wYmZhZWI5IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKQEAgLTExODIwLDQgKzExODIwLDEwIEBACiAgIHByb3JldHR5cGUgPT4g J2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAog ICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQg PT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZv cm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0 dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3Ny YyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4g J2V4cGFuZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNl LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGQzOGMwZTIuLjRjYTg0 YjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0 cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQs IGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0 ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5j ZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzdG10KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVy U2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9k ZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZmRmNDcK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAs MCArMSwyMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuaAorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29w L2RkbF9kZXBhcnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBERExf REVQQVJTRV9ICisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJz ZV91dGlsaXR5LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKK2V4dGVybiBjaGFyICpkZGxf ZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CitleHRlcm4gY2hhciAqZGVwYXJz ZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVj dHR5cGUsCisJCQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKKworCisjZW5kaWYJCS8q IERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUx M2QuLmI1MzI5NGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiArNjIs NyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVj dElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpz dWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMjIxYzNl Ni4uODEzZWFmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBleHRl cm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAj ZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0 aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJ LyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRl ZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hh ciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1 YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVy biBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBl bW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQz MiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3Np emUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRl eCA3ZDQ4OTcxLi4zZDY5YTYwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRp bHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsNiArMTMsNyBA QAogI2lmbmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRl ICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgpAQCAtMjMs MTIgKzI0LDE2IEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9p bmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRl eGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAq cGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJ CQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19n ZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpw Z19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJu IGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIg KnBnX2dldF9wYXJ0Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFz bmFtZSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBj b25zdHJhaW50SWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRf c2ltcGxlKE9pZCBjb25zdHJhaW50SWQpOwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lv bihOb2RlICpleHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgs IGJvb2wgc2hvd2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNv bnN0IGNoYXIgKmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzQ1LDE2IEBAIGV4dGVy biBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJ CQkJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9j b2xsYXRpb25fbmFtZShPaWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNz X25hbWUoT2lkIG9wY2xhc3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUo T2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJn dHlwZXMsIGJvb2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3As CisJCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIg KmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4g dm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAor CQkJCQkJCSAgU3RyaW5nSW5mbyBidWYpOworZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9u cyhPaWQgcmVsaWQpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3Ry aW5nKE9pZCBzdGF0ZXh0aWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShT dHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVM RVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNWIzYjMwNS4uNDMxNjYz YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MDksNiArMTYwOSw5IEBAIE9TSW5m bwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQor T2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBP YmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzUsNiArMzE3OCw3IEBAIGNvbG9ybWFwcmFuZ2UK IGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVs X2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9k YXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoxLjguMy4xCgo= --000000000000e6ea7105e8b68536--