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 1ohpZ1-0004d5-9O for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Oct 2022 09:59:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ohpYz-0001Yc-7K for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Oct 2022 09:59:09 +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 1ohpYx-0001YT-Q4 for pgsql-hackers@lists.postgresql.org; Mon, 10 Oct 2022 09:59:08 +0000 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ohpYu-0003JL-6s for pgsql-hackers@lists.postgresql.org; Mon, 10 Oct 2022 09:59:06 +0000 Received: by mail-lj1-x236.google.com with SMTP id m14so12652508ljg.2 for ; Mon, 10 Oct 2022 02:59:03 -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:message-id:reply-to; bh=duR/MnbKYsrlMgZIys4RmxATb0IM6B+sKn4Y+iLFSDo=; b=n6lAe6PpdYTKN+RRIzsohk2+4ofvFf/8xUcxUYcfBHZcJ1q918/weESxpRCbu2sxUk JgX3XEdUp0rghILtO6fDbFsHNbVrP9M6Q1FOYGhfgP4iGsFioBh3qRt6ZJhuHrLw2B+L XF760HrRuRGnOcTIDeDJ0oykmnRFZV9Uca9blMdkzOwFuBjBl6RwOYuD9YPcETwetZfh PU6qNehp2tRAbJjtpCGugWfCuGz5yG1cFJeujXpolhahMRU4ifWFi9E5C82bOuKmSHfA v+nIfIKzqa8Ceew5pz2HLcpGBgXxUZx2n3VkIS2k/b+r7SqwH+QPVchQa8a8ahZMT4RM i9LA== 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:message-id :reply-to; bh=duR/MnbKYsrlMgZIys4RmxATb0IM6B+sKn4Y+iLFSDo=; b=kz00FBYnybjubjQV6fVVPmMHsC5jzdJwkEyuD/EeLNJZ0VIi7H6QZi0dNAaLDvBlqx Qs7g7DMdAmWp5zUYFt0lYeoLcXHHflm+CkBxpQMISo0xtARtHzrqfxYahjKzcWJPqYYA +cEPBHf2w4Wev6m4LmClgmPRkKXpFisdDe+IzNI8TuarLgEc2VFY8MZy0r+INn6nHhDG vlbwihz/4nz8D2/uk5fl/fa/ZhdIufTzMm+8GvekVMuQVeSczm/5hhkUlKO70YIgxc1J NKZaPa/xcgjTKPVemplA4kqnS86RDPqzVwgEsVIywC/SdP09NWuKtGeLb7Ze8vhN/GxG /Dxg== X-Gm-Message-State: ACrzQf2vIzte5ToxuFQMVP07qnO2UZ9gxT9VBorgaIiC4ZBUDxB51cO0 3llcmf70yqrG1tCvchcriLCNXsd+95lC5qxjyKU= X-Google-Smtp-Source: AMsMyM4VaTVRA7tL8ybDzQSQIKROj599MnPoFpagWMcFto0RhZZLTV19yxr0qUr6cJrk9zdrqHw5TyRO9WCr1ZYW/AM= X-Received: by 2002:a05:651c:110c:b0:26f:b07b:957f with SMTP id e12-20020a05651c110c00b0026fb07b957fmr378498ljo.261.1665395941187; Mon, 10 Oct 2022 02:59:01 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Mon, 10 Oct 2022 20:58:48 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: Zheng Li , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000007cc06905eaab354e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007cc06905eaab354e Content-Type: text/plain; charset="UTF-8" On Fri, Oct 7, 2022 at 4:07 PM vignesh C wrote: > > On Fri, 7 Oct 2022 at 08:10, Zheng Li wrote: > > > > > Thanks for the new patch-set. > > > Could you add the changes to patch 1 and patch 2, rather than adding a > > > new patch? > > > Otherwise, we'll have a separate patch for each command and it will > > > take double work to keep it updated > > > for each new command added. > > > > OK. Here is the consolidated patch set. TEXT SEARCH and TRANSFORM > > commands are consolidated into patch 1 and patch 2. > > I was wondering if keeping the changes for each command separate makes > > it easier to review. Maybe just for some commands that need special > > handling. > > I agree, let's keep the changes for the commands in patch 1 and patch > 2 if we are following the same parsing mechanism that is being > followed for the existing commands. If any command needs to be handled > in a more complex manner which is different from the existing parsing > mechanism then we can think of keeping it in a separate patch. > > CFBOT at [1] was failing as some additional changes were required to > handle the meson build errors and warnings. The attached patch has the > changes for the same. > [1] - https://cirrus-ci.com/task/5343002330660864 Adding support for ddl deparsing CREATE/ALTER/DROP USER MAPPING and changes from Vignesh C for CREATE/ALTER/DROP SERVER CREATE/ALTER/DROP COLLATION I had to change the object identity of the user mapping as part of the deparsing to make the DROP command work on user mapping. FROM: " on server " TO : "for server " regards, Ajin Cherian Fujitsu Australia --0000000000007cc06905eaab354e Content-Type: application/octet-stream; name="v26-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v26-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l92lm2373 RnJvbSBiODJlN2Y2Y2UwODk0ZjNlMDNiZGJkMTgxMjQ1OTNlMmJlZDU4NWVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTAgT2N0IDIwMjIgMDU6MDQ6NTYgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNiA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p 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== --0000000000007cc06905eaab354e Content-Type: application/octet-stream; name="v26-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v26-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l92lm2351 RnJvbSAzNDk5Njk1ODhkMmRiMDFkZDQxNjc2Y2NjOWNjZWRlMjExYWQyNWQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTAgT2N0IDIwMjIgMDQ6NDE6NDIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNiAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj 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 ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIHwgIDUyICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgfCAyNzQgKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgICAgfCAxNjUgKysrKysrKysr Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICAgIHwgIDg2 ICsrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8 ICA0MSArKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAg IHwgIDkzICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZCAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAg ICAgICAgfCAgNDggKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYyB8IDEzNiArKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93 b3JrZXIuYyAgICAgICAgfCAyMzIgKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICAgIHwgICA3ICstCiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAyNyArKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgICAgfCAgMzkgKysrCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0ICAgICAgICAgICAgICB8ICAgNiArLQog c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICAgICAgfCA0MjAgKysr KysrKysrKysrLS0tLS0tLS0tLS0tCiAzMyBmaWxlcyBjaGFuZ2VkLCAxNzE2IGluc2VydGlvbnMo KyksIDIyOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmYuLmI4ZTI5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5LDYgKzE5LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5v IFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNnZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVz Yy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVzYy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRlZTUyCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJl dHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21l c29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCmluZGV4 IGYzYTZlMGEuLjNhNzBjOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVp bGQKQEAgLTksNiArOSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0ZGVz Yy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRsbXNn ZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0 ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24u YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA1OTk2NzA5Li43 MjFkMDIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEw MDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0g cHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZv cm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJk ZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VT eXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ0MWYy OWQuLjc3NWEyOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDgg KzM3LDExIEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2Z1bmMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRj b3AvZGVwYXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVk ZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTE1Mzcs NiArMTU0MCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUp CiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsK IAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQt PmQuYWx0ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1 YmNtZHMgPSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUp OwogCkBAIC0xNTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lk IG9iamVjdElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBu ZWVkcyB0byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CitFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0 OwogCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQCBFdmVu dFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJl c3MgYWRkcmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0 cmVlID0gY29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9 CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5h bHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyNzAgQEAgc3Ry aW5naWZ5X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAi Pz8/IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21t YW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21t YW5kX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2Rh dGE7CisJY2hhcgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0YXJ0 Iik7CisJRHJvcFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFDQUxMRURf QVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2 ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAq KSBmY2luZm8tPmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNl dHJlZTsKKworCS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUgKi8KKwlm b3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0OworCQlO b2RlCSpvYmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJ CVJlbGF0aW9uIHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRy ZXNzKHN0bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxh dGlvbiwKKwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOwor CisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOwor CisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0 YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdp bGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2Vk CisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVw bGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRl IG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxw ZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0 aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERMTWVzc2Fn ZSgiZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJ CQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9uKQorCQkJ dGFibGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUK KyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBsb2cgaXQu CisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpj bWQ7CisJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RS SUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2Vy IG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQ7CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJ cmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3 aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dl ZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBt ZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNp c3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93 IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwg RENUX1RhYmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcp ICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwg Y29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxf Y29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlz dF9pdGVyICBpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVsaWQ7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQlyZWxwZXJz aXN0ID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5kICAgKmNt ZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0 ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYg KGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0 bXQgPSAoUmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1lU3RtdCAm JiByZW5hbWVTdG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVT dG10LT5yZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQu c2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlw ZSA9PSBTQ1RfQWx0ZXJUYWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJ CS8qIE9ubHkgU0NUX1NpbXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJaWYg KGdldF9yZWxfcmVsa2luZChyZWxpZCkpCisJCQlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0 ZW5jZShyZWxpZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNv bW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJ ICoKKwkJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVy ZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBpdAorCQkgKiBwb3NzaWJsZSB0 byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5n CisJCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkg Ki8KKwkJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJCWNvbnRpbnVl OworCisJCS8qCisJCSAqIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRv IGFsbG93IGRlY29kaW5nIG9mIHRoZQorCQkgKiBzYW1lLgorCQkgKi8KKwkJanNvbl9zdHJpbmcg PSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9zdHJp bmcgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBh cnNlIiwgcmVsaWQsIHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJp bmcpICsgMSk7CisJfQorCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmKGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+U1FMRHJvcExpc3QpKQorCXsKKwkJdm9sYXRpbGUgU1FMRHJvcE9iamVjdCAqb2Jq OworCQlEcm9wU3RtdAkJCSAgICpzdG10OworCQlFdmVudFRyaWdnZXJEYXRhIAkgICAqdHJpZ2Rh dGE7CisJCWNoYXIJCQkJICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUJCWNtZHR5 cGU7CisJCWNvbnN0IGNoYXIJCQkgICAqdG1wdHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVudFRy aWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwkJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJp Z2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVj dCwgbmV4dCwgaXRlci5jdXIpOworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFi bGUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgImluZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVu Y3Rpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJ0cmlnZ2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29udmVy c2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09 IDAJfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJleHRlbnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5 IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFy c2VyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2gg dGVtcGxhdGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zv cm0iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXJ2ZXIiKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjb2xsYXRpb24iKSA9PSAwIHx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmciKSA9PSAwKQorCQkJY21k dHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkg KiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWlnbiBkYXRhIHdyYXBwZXIuCisJ CSAqLworCQlpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBl ciIsIDIwKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1cCgiZm9yZWlnbiBkYXRhIHdy YXBwZXIiKTsKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmotPm9iamlkZW50 aXR5LCB0bXB0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCisgICAg ICAgIC8qCisgICAgICAgICAqIG9iamVjdCBpZGVudGl0eSBuZWVkcyB0byBiZSBtb2RpZmllZCB0 byBtYWtlIHRoZSBkcm9wIHdvcmsKKyAgICAgICAgICoKKyAgICAgICAgICogRlJPTTogPHJvbGU+ IG9uIHNlcnZlciA8c2VydmVybmFtZT4KKyAgICAgICAgICogVE8gIDogZm9yID5yb2xlPiBzZXJ2 ZXIgPHNlcnZlcm5hbWU+CisgICAgICAgICAqCisgICAgICAgICAqLworICAgICAgICBlbHNlIGlm IChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInVzZXIgbWFwcGluZyIsIDEyKSA9PSAwKQorICAg ICAgICB7CisgICAgICAgICAgICBjaGFyICpvbl9zZXJ2ZXI7CisKKyAgICAgICAgICAgIHRtcHR5 cGUgPSBwYWxsb2Moc3RybGVuKG9iai0+b2JqaWRlbnRpdHkpICsgMik7CisgICAgICAgICAgICBv bl9zZXJ2ZXIgPSBzdHJzdHIob2JqLT5vYmppZGVudGl0eSwgIm9uIHNlcnZlciIpOworCisgICAg ICAgICAgICBzcHJpbnRmKChjaGFyICopdG1wdHlwZSwgImZvciAiKTsKKyAgICAgICAgICAgIHN0 cm5jYXQoKGNoYXIgKil0bXB0eXBlLCBvYmotPm9iamlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmot Pm9iamlkZW50aXR5KTsKKyAgICAgICAgICAgIHN0cmNhdCgoY2hhciAqKXRtcHR5cGUsIG9uX3Nl cnZlciArIDMpOworICAgICAgICAgICAgY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKHRt cHR5cGUsIG9iai0+b2JqZWN0dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdG10LT5iZWhhdmlvcik7CisgICAgICAgIH0KKwkJZWxzZQorCQkJY29tbWFu ZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlw ZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxM KQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmot PmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21t YW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IGE4Yjc1ZWIuLmYxNTk1NzMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAK ICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBp LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Ns YXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0 aWxzL2FycmF5LmgiCkBAIC05Niw2ICs5OCw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHVi YWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRy dWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDMsNiArMTQ2LDgg QEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1 YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hf b3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRy dWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJ cHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1Is CiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzI4LDYgKzczMyw1 MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJs ZXMsCiB9CiAKIC8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBE REwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRU cmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGlu dCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9p ZCkKK3sKKwlpbnQJCQkJCWk7CisJTGlzdAkJCSAgICp0YWdzID0gTklMOworCU9pZAkJCQkJdHJp Z2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzCQlyZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0 bXQgKmRkbF90cmlnZ2VyOworCWNoYXIJCQkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwlj aGFyCQkJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVOXTsKKwlzdGF0aWMgY29uc3QgY2hh ciAgICp0cmlnZ2VyX25hbWVfcHJlZml4ID0gInBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3Rh dGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJwdWJsaWNhdGlvbl9kZXBh cnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRlRXZlbnRUcmlnU3RtdCk7 CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2VyX25hbWUpLCB0cmlnZ2Vy X25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2Vy X2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZp eCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0 cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRs X3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOwor CisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5nICp0YWcgPSBt YWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisJCXRh Z3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7CisJfQorCisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2Ug PSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJ dHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAq IFJlZ2lzdGVyIHRoZSBldmVudCB0cmlnZ2VycyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0 aGUKKwkgKiBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQs IEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lP bigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCisv KgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwogT2JqZWN0QWRkcmVzcwpAQCAtNzk3 LDYgKzg0OSw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl UHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxl dGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwp OwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xH ZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg1Nyw2ICs5MTEsMTE0 IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRp b25TdG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dl ciB0byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2Ug bmVlZCB0byBmaW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwK KwkgKiBzdGF0ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93 IHRoZSByZXBsaWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBX ZSBuZWVkIHRvIGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVw bGljYXRpb24gaXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7 CisJCUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJ CUNvbW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisK KwkJQ29tbWFuZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVVNFUl9N QVBQSU5HLAorCQkJQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywKKwkJCUNNRFRBR19DUkVBVEVf U0VSVkVSLAorCQkJQ01EVEFHX0FMVEVSX1NFUlZFUiwKKwkJCUNNRFRBR19EUk9QX1NFUlZFUiwK KwkJCUNNRFRBR19DUkVBVEVfQ09MTEFUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0NPTExBVElPTiwK KwkJCUNNRFRBR19EUk9QX0NPTExBVElPTiwKKwkJCUNNRFRBR19DUkVBVEVfVFJBTlNGT1JNLAor CQkJQ01EVEFHX0RST1BfVFJBTlNGT1JNLAorCQkJQ01EVEFHX0NSRUFURV9GT1JFSUdOX0RBVEFf V1JBUFBFUiwKKwkJCUNNRFRBR19BTFRFUl9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRB R19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0NSRUFURV9FWFRFTlNJT04s CisJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAorCQkJQ01EVEFHX0RST1BfRVhURU5TSU9OLAor CQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0FM VEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJD SF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9ESUNUSU9OQVJZ LAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdfRFJP UF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9Q QVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdfQ1JF QVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfVEVN UExBVEUsCisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJCUNNRFRBR19BTFRFUl9QT0xJQ1ks CisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sCisJ CQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwKKwkJCUNNRFRBR19EUk9QX0NPTlZFUlNJT04sCisJ CQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9ET01BSU4sCisJCQlDTURU QUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfSU5ERVgsCisJCQlDTURUQUdfQ1JFQVRF X1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01EVEFHX0FMVEVSX1RZUEUsCisJCQlD TURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ0FTVCwKKwkJCUNNRFRBR19EUk9Q X0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJQ01EVEFHX0NSRUFURV9PUEVS QVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFH X0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywK KwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SLAorCQkJ Q01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1J TFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURV UkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURVUkUsCisJCQlDTURUQUdfQ1JFQVRFX0ZVTkNUSU9O LAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJ CQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJCUNN RFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwKKwkJCUNNRFRBR19BTFRF Ul9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlDTURUQUdfQUxURVJfU0VR VUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRBR19DUkVBVEVfU0NIRU1B LAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9QX1NDSEVNQSwKKwkJCUNN RFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19BTFRF Ul9JTkRFWCwKKwkJCUNNRFRBR19HUkFOVCwKKwkJCUNNRFRBR19SRVZPS0UsCisJCQlDTURUQUdf Q1JFQVRFX1JVTEUsCisJCQlDTURUQUdfQUxURVJfUlVMRSwKKwkJCUNNRFRBR19EUk9QX1JVTEUs CisJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVworCQl9OworCisJCS8qIENyZWF0 ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJ IGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJ CQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBD cmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBs aWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJ CQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwog CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0 Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC05OTUsNiAr MTE1Nyw5IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25f cHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsK IAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1ZTsK KworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IEJvb2xHZXREYXR1 bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVi ZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9n aXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMjAxMzVlZi4uZTdjYzBhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUyNTMsNyArNTI1Myw3IEBAIEFURXhlY0NtZChM aXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJICogUmVwb3J0IHRoZSBzdWJj b21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJpZ2dlcnMuCiAJICovCiAJaWYgKGNtZCkKLQkJ RXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNz KTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBh ZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50 ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlLi5mM2VlYjY3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcg QEAgb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9 IFwKIAlkZWNvZGUubyBcCisJZGRsbWVzc2FnZS5vXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwu byBcCiAJbG9naWNhbGZ1bmNzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkzNTIz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKQEAgLTAsMCArMSw4NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRs bWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3Nh Z2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwgbWVzc2FnZXMgYWxsb3cgWExP RyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0IHBhc3NlZCB0byB0 aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHByb2Nlc3NpbmcgdGhl eQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJpYyBsb2dpY2FsIG1l c3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0aW9uYWwKKyAqIG1v ZGUuTm90ZSBieSBkZWZhdWx0IERETHMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4K KyAqCisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFu ZCB3aWxsIGJlIHNlbnQgdG8KKyAqIGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5 IGFzIERNTCBvcGVyYXRpb25zLgorICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXgg dG8gYXZvaWQgY29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5z LiBUaGUgcGx1Z2luIGF1dGhvcnMgbXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBw cmVmaXgsCisgKiBnb29kIG9wdGlvbnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRo ZSBuYW1lIG9mIHRoZSBleHRlbnNpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2Uu aCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0 ZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0 cgorTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNp emVfdCBzaXplKQoreworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkvKgorCSAq IEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuCisJICovCisJQXNzZXJ0KElz VHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOworCisJeGxy ZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiB0cmFpbGluZyB6ZXJvIGlzIGNyaXRpY2FsOyBz ZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJsZW4ocHJl Zml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxpZCA9IHJl bGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJ WExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExNZXNzYWdl KTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4bHJlYy5w cmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgbWVzc2Fn ZSksIHNpemUpOworCisJLyogYWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dTZXRSZWNv cmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0KFJNX0xP R0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8qCisgKiBS ZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRsIG1lc3Nh Z2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZP X01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2co UEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwor CisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5nLCBzZWUg ZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpp bmRleCAyY2MwYWM5Li4xZjJjNzUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v ZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MDQsNiArNjA1LDQ2IEBAIGxv Z2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmKQogfQogCiAvKgorICogSGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNv cmRzIGZvciBEZWNvZGVSZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dp Y2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWls ZGVyOworCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQg eGlkID0gWExvZ1JlY0dldFhpZChyKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIp ICYgflhMUl9JTkZPX01BU0s7CisJUmVwT3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9y aWdpbihyKTsKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8g IT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBS TV9MT0dJQ0FMRERMTVNHX0lEIHJlY29yZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1 ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdw dHIpOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0 IGZhc3QtZm9yd2FyZGluZywgdGhlcmUgaXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwg bWVzc2FnZXMuCisJICovCisJaWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNO QVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47 CisKKwltZXNzYWdlID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEo cik7CisKKwlpZiAobWVzc2FnZS0+ZGJJZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwK KwkJRmlsdGVyQnlPcmlnaW4oY3R4LCBvcmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25h cEJ1aWxkUHJvY2Vzc0NoYW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3Jk ZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAor CQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBw cmVmaXggKi8KKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVz c2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2Ut PnJlbGlkLCBtZXNzYWdlLT5jbWR0eXBlKTsKK30KKworLyoKICAqIENvbnNvbGlkYXRlZCBjb21t aXQgcmVjb3JkIGhhbmRsaW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAog ICogcmVjb3Jkcy4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j CmluZGV4IDYyNWE3ZjQuLjk4OTY5YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2lu LmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMgdm9pZCBt ZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9u YWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCSAgT2lkIHJl bGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6ZSBtZXNzYWdl X3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKiBzdHJlYW1pbmcgY2FsbGJhY2tzICov CiBzdGF0aWMgdm9pZCBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLApAQCAtOTAsNiArOTUsMTEgQEAgc3RhdGljIHZvaWQg c3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRl ckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBjb25zdCBj aGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0 YXRpYyB2b2lkIHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdl X3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApAQCAtMjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNv ZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+ YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29t bWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2Fn ZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+ZGRsbWVzc2FnZSA9IGRkbG1lc3NhZ2VfY2Jf d3JhcHBlcjsKIAogCS8qCiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3Rh cnQvc3RvcC9hYm9ydC9jb21taXQvY2hhbmdlCkBAIC0yMzQsNiArMjQ1LDcgQEAgU3RhcnR1cERl Y29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxi YWNrcy5zdHJlYW1fY29tbWl0X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJl YW1fY2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2Fn ZV9jYiAhPSBOVUxMKSB8fAorCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2Ig IT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxM KTsKIAogCS8qCkBAIC0yNTEsNiArMjYzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0 ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0g c3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9 IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdl ID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGxt ZXNzYWdlID0gc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0 cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAKQEAgLTEyMjEs NiArMTIzNCw0NCBAQCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK2RkbG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkg IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQg cmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vf c2l6ZSwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tT dGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2Vy dCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2Vf Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhl IGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJh Y2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdl X2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJh Y2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnBy ZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVy cmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRl cyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52 YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOwor CisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFj a3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNt ZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBl cnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNr LnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVv cmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQ dHIgZmlyc3RfbHNuKQogewpAQCAtMTUzNiw2ICsxNTg3LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0K IAogc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNz YWdlX2xzbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2Vk Q29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJ IGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0g Y2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOwor CUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3Rf Zm9yd2FyZCk7CisKKwkvKiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0 cmVhbWluZyBpcyBzdXBwb3J0ZWQuICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8q IHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFt X2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayAr IGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJ c3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0 X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRf cGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0 ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3Jf Y29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8K KwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5V TEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRp b24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFj ayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNz YWdlX2xzbiwgcHJlZml4LCByZWxpZCwKKwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUs IG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCitzdGF0aWMgdm9pZAog c3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAkJCQkJCSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlv bnNbXSwKIAkJCQkJCSAgIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4IDc3MzU4M2EuLmU3YzcwYWEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApAQCAtMSw0 ICsxLDUgQEAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKKyAgJ2RkbG1lc3NhZ2UuYycsCiAg ICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZS4uZjM1NDA2MiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYzLDYgKzY2Myw1MiBAQCBs b2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJl YW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGlu LCBYTG9nUmVjUHRyICpsc24sCisJCQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJ ICAgU2l6ZSAqc3opCit7CisJdWludDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRv dWJsZSBjaGVjayB3aGVuIGRvIHdlIG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFn cyA9IHBxX2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9 IHBxX2dldG1zZ2ludDY0KGluKTsKKwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkq c3ogPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVz KGluLCAqc3opOworCisJcmV0dXJuIG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdF IHRvIHN0cmVhbQorICovCit2b2lkCitsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25z dCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJ CWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NB R0UpOworCisJLyogdHJhbnNhY3Rpb24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVh bWluZykgKi8KKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMy KG91dCwgeGlkKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChv dXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91 dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKworLyoKICAqIFdy aXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCiB2b2lk CkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVw TXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01T R19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0df RERMTUVTU0FHRToKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVH SU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9S RVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jCmluZGV4IDZkZmY5OTEuLjNjMzc2OTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAj aW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2 LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4ICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXgpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0 YS5kZGxtc2cubWVzc2FnZSk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxM OworCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoK IAkJCWlmIChjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFu Z2UtPmRhdGEuaW52YWwuaW52YWxpZGF0aW9ucyk7CkBAIC04NzAsNiArODc5LDM2IEBAIFJlb3Jk ZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAogfQogCiAvKgorICogQSB0cmFuc2FjdGlvbmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBi ZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisgKi8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBY TG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vf c2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3Jk ZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKworCUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0 aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4 dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFj dGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5k ZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVmaXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVs aWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxvYyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1lc3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9y ZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhpZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKICAqIEFzc2VydFRYTkxz bk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRlcmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0 aGUgcmVvcmRlcmJ1ZmZlcgogICoKQEAgLTE5NjksNiArMjAwOCwyOSBAQCBSZW9yZGVyQnVmZmVy QXBwbHlNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiB9 CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOIGZv ciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVv cmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3Ry ZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRsbWVzc2FnZShyYiwg dHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4LAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwllbHNlCisJCXJi LT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEu ZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJ ICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsK K30KKworLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hv dCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1 c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzNDgs NiArMjQxMCwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJi LCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExN ZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUg dGhlIGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJF eGVjdXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBA IC0zNzczLDYgKzM4MzksNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkg ICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsg c2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJl c2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXpl b2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJl YWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdl ICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21k dHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXpl LCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShk YXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNt ZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNw eShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUp OworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBp bmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUp OworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAg IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCXsKIAkJCQljaGFyCSAgICpkYXRh OwpAQCAtNDA4Nyw2ICs0MTg3LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXplKFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0g c3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVm aXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9m KFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKworCQkJ CWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CiAJCQl7CiAJCQkJc3ogKz0gc2l6ZW9mKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UpICoKQEAg LTQzNjIsNiArNDQ3MSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJl Zml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgmcHJlZml4X3Np emUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJ bWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2YoT2lkKSk7CisJ CQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cu Y21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJ CQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNv bnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVm aXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXpl OworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXpl b2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5Q29udGV4dEFs bG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwgZGF0YSwKKwkJ CQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCVNpemUJCWludmFsX3Np emUgPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkgKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggMjA3YTU4MC4uMjFiODJmMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIK ICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAgQEAKICNp bmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNs dWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIK KyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNp bmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNDY0 LDYgKzI0NjgsMjMwIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5k X3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVsYXRpb24g ZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRlX3RhYmxl KFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJY29tbWFu ZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKiljb21tYW5kKTsKKworCXN3aXRjaCAoY29t bWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2FzZSBDTURU QUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3RtdCA9IChD cmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQkJCWlmIChjYXN0bXQtPm9ianR5 cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBp bmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4g RGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5z dGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0cnVlOworCQkJ CX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7CisJCQkJU2Vs ZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYg KHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Jj ZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNp c3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxp c2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2UtPnNraXBEYXRh ID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 Cit9CisKKy8qCisgKiBIYW5kbGUgQ1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFk ZFN1YnNjcmlwdGlvblJlbFN0YXRlIGZvciBDUkVBVEUgVEFCRUwgY29tbWFuZCB0byBzZXQgdGhl IHJlbHN0YXRlIHRvCisgKiBTVUJSRUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhp cyBuZXcgdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVh bGx5IHJ1biAiYWx0ZXIgc3Vic2NyaXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICov CitzdGF0aWMgdm9pZAoraGFuZGxlX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQorewor CUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwlSYW5nZVZhcgkgKnJ2ID0gTlVMTDsKKwlPaWQJCQly ZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNoYXIgCQkgKnNjaGVt YW5hbWUgPSBOVUxMOworCWNoYXIJCSAqcmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0g Q3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRjaCAoY29tbWFuZFRh ZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRToKKwkJCXsKKwkJCQlDcmVhdGVTdG10 ICpjc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJcnYgPSBjc3RtdC0+ cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKwor CWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwly ZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxu YW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAo cmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQo cmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlk KHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJeworCQlBZGRTdWJzY3Jp cHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwKKwkJCQkJCQkJU1VCUkVM X1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7CisJCWVyZXBvcnQoREVC VUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBhZGRlZCB0byBzdWJzY3Jp cHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2NyaXB0aW9uLT5uYW1lKSkp OworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQor eworCVhMb2dSZWNQdHIgbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhciAq bWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlz dAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVz dFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3Qg Y2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwlt ZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UocywgJmxzbiwgJnByZWZpeCwgJnN6 KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICovCisJ YmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZGxfZGVwYXJzZV9q c29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFu ZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2ZXIg PSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdfcGFy c2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFyc2V0 cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpxdWVy eXRyZWVfbGlzdDsKKwkJUmF3U3RtdAkgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJzdChw YXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29udGV4 dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJYm9v bAkJIHNuYXBzaG90X3NldCA9IGZhbHNlOworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5k VGFnKChOb2RlICopIGNvbW1hbmQpOworCisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwg aW4gcGFyc2luZyBvciBwcmlvciBjb21tYW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CisKKwkJLyogUmVtb3ZlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICov CisJCXByZXByb2Nlc3NfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1 cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFuYWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJ CSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJ UHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hv dF9zZXQgPSB0cnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2gg cGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1l bW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJlIG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJ ICovCisJCXBlcl9wYXJzZXRyZWVfY29udGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUo Q3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXIt c3RhdGVtZW50IGNvbnRleHQiLAorCQkJCQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4 dCk7CisKKwkJcXVlcnl0cmVlX2xpc3QgPSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFy YW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJ CU5VTEwsIDAsIE5VTEwpOworCisJCXBsYW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVl cnl0cmVlX2xpc3QsIGRkbF9jb21tYW5kLCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhl IHNuYXBzaG90IHVzZWQgZm9yIHBhcnNpbmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3Nl dCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJs b2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qg aGF2ZSB0byBjb3B5IGFueXRoaW5nIGludG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5n CisJCSAqIHdlIGFyZSBwYXNzaW5nIGhlcmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0 aGUKKwkJICogcGVyX3BhcnNldHJlZV9jb250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBw b3J0YWwgYW55d2F5LgorCQkgKi8KKwkJUG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJ ICBOVUxMLAorCQkJCQkJICBkZGxfY29tbWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJ CSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJCSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhl IHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMgaGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRh bCwgTlVMTCwgMCwgSW52YWxpZFNuYXBzaG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0 byB0cmFuc2FjdGlvbiBjb250ZXh0IGZvciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJ CQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJIHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNl aXZlciwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBv cnRhbCwgZmFsc2UpOworCisJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJ ICogVGFibGUgY3JlYXRlZCBieSBEREwgcmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBh dXRvbWF0aWNhbGx5CisJCSAqIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICov CisJCWhhbmRsZV9jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9w IHRoZSBwZXItcGFyc2V0cmVlIGNvbnRleHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVt b3J5Q29udGV4dERlbGV0ZShwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1 ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9z dGVwKCk7Cit9CisKIAogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2Fn ZSBkaXNwYXRjaGVyLgpAQCAtMjUyOSw2ICsyNzU3LDEwIEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmlu Z0luZm8gcykKIAkJCSAqLwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERM TUVTU0FHRToKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7CisJCQlicmVhazsKKwogCQljYXNlIExP R0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0 KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCAyZWNhYTViLi41ZTViMWNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUzLDYgKzUzLDExIEBAIHN0YXRpYyB2b2lkIHBnb3V0 cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wgdHJh bnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlk LAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUgc3os IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2ZpbHRl cihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklkIG9y aWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9wbHVn aW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBwZ291 dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJY2It Pm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxtZXNzYWdlX2NiID0gcGdv dXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29tbWl0X3R4bjsK IAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFyZV90eG47CkBA IC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxs YmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3RyZWFtX2NvbW1p dDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+c3RyZWFt X21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRsbWVzc2FnZV9j YiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPnN0cmVhbV90cnVuY2F0ZV9jYiA9IHBnb3V0 cHV0X3RydW5jYXRlOwogCS8qIHRyYW5zYWN0aW9uIHN0cmVhbWluZyAtIHR3by1waGFzZSBjb21t aXQgKi8KIAljYi0+c3RyZWFtX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9zdHJlYW1fcHJlcGFyZV90 eG47CkBAIC00MjYsNiArNDMzLDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCS8qIFRoaXMgcGx1Z2lu IHVzZXMgYmluYXJ5IHByb3RvY29sLiAqLwogCW9wdC0+b3V0cHV0X3R5cGUgPSBPVVRQVVRfUExV R0lOX0JJTkFSWV9PVVRQVVQ7CisJb3B0LT5yZWNlaXZlX3Jld3JpdGVzID0gdHJ1ZTsKIAogCS8q CiAJICogVGhpcyBpcyByZXBsaWNhdGlvbiBzdGFydCBhbmQgbm90IHNsb3QgaW5pdGlhbGl6YXRp b24uCkBAIC00OTksNiArNTA3LDcgQEAgcGdvdXRwdXRfc3RhcnR1cChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9wdCwKIAogCQkvKiBJbml0IHB1Ymxp Y2F0aW9uIHN0YXRlLiAqLwogCQlkYXRhLT5wdWJsaWNhdGlvbnMgPSBOSUw7CisJCWRhdGEtPmRl bGV0ZWRfcmVsaWRzID0gTklMOwogCQlwdWJsaWNhdGlvbnNfdmFsaWQgPSBmYWxzZTsKIAkJQ2Fj aGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJhY2soUFVCTElDQVRJT05PSUQsCiAJCQkJCQkJCQkgIHB1 YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYiwKQEAgLTEzNzcsOSArMTM4NiwyMiBAQCBwZ291dHB1 dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUgYWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJ VHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVMTDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Ns b3QgPSBOVUxMOworCWJvb2wJCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVw bGljYXRpb25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3Jp dGVzLCB3ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkg KiB0YWJsZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwg cmVsYXRpb24gaGVyZSBhbmQKKwkgKiBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLwor CWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9 IHRydWU7CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlz X3B1Ymxpc2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNDEzLDYg KzE0MzUsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAq IFdlIGRvbid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2gg dGhlIHJld3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAm JiAhcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBs ZWFraW5nIG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwog CW9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0Miw4 ICsxNDcxLDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICov Ci0JCQlpZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3Qs IHJlbGVudHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYm CisJCQkJIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJl bGVudHJ5LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NjMsOCArMTQ5Miwx OSBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRp b24sIHJlbGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7 Ci0JCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5l d19zbG90LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJ CS8qCisJCQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0 IHRoZSBzdWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBt YWtlIHN1cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVy IGlzIGNvbnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2lj YWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlO VUxMLCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5z KTsKKwkJCWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNv bHVtbnMpOwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk0LDYgKzE2MzQsOSBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkK KwkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpA QCAtMTY3MSw4ICsxNzE0LDggQEAgcGdvdXRwdXRfdHJ1bmNhdGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIHN0YXRpYyB2b2lkCiBwZ291dHB1 dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAotCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsIGNv bnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKLQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAorCQkJCSBjb25z dCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJUEdPdXRw dXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0 ZTsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwpAQCAtMTcxMiw2 ICsxNzU1LDEzNyBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7 CiB9CiAKK3N0YXRpYyB2b2lkCitwZ291dHB1dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRyIG1lc3Nh Z2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21t YW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQorewor CVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRfcGx1Z2lu X3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhuRGF0YSAq KSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7 CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlSZWxhdGlvblN5 bmNFbnRyeSAqcmVsZW50cnk7CisKKwkvKgorCSAqIFJlbWVtYmVyIHRoZSB4aWQgZm9yIHRoZSBt ZXNzYWdlIGluIHN0cmVhbWluZyBtb2RlLiBTZWUKKwkgKiBwZ291dHB1dF9jaGFuZ2UuCisJICov CisJaWYgKGluX3N0cmVhbWluZykKKwkJeGlkID0gdHhuLT54aWQ7CisKKwlzd2l0Y2ggKGNtZHR5 cGUpCisJeworCQljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJCS8qCisJCQkgKiBPbiBEUk9Q IHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJ ICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1Ymxp Y2F0aW9uLiBXZQorCQkJICogbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxp ZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJp ZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVs ZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2Uu CisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwor CQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRh dGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ CQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRz LCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJuOworCQlj YXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxl dGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxl dGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQp OworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCQkvKgorCQkJICogRm9yIHRh YmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBkZGwgbWVzc2FnZSB0 bworCQkJICogc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVCB0byBVUERBVEUgYW5kCisJCQkgKiBzZW5kIHRoZW0gdG8gc3Vic2NyaWJlciBzbyB0aGF0 IHRoZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZAorCQkJICogc3Vic2NyaWJlciBjYW4gYWx3 YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3YXkgYmVjYXVzZSBv ZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJsaXNoZXIg YW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVy CisJCQkgKiB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0 ZW4sIHdlIG5lZWQgdG8gbGV0CisJCQkgKiB0aGUgc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmln aW5hbCByZXdyaXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUKKwkJCSAqIGRhdGEgYXQgZmlyc3Qu CisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBj b3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlcihk dWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZAorCQkJICogZHVyaW5nIHJl d3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtl ZXAKKwkJCSAqIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogVE8gSU1QUk9WRTog V2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgb25seQorCQkJ ICogcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUg YW5kIHVzZSB0aGUKKwkJCSAqIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRo ZSByZXN0IGRhdGEuIEJlc2lkZXMsIHdlIG1heQorCQkJICogbm90IG5lZWQgdG8gc2VuZCByZXdy aXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUgZGRsLCBmb3IKKwkJCSAqIGV4YW1w bGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxU RVIKKwkJCSAqIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGRvZXNu J3QgYWN0dWFsbHkgYmUKKwkJCSAqIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVs YXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlvbik7CisKKwkJCXJl bGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJLyoKKwkJ CSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNoIGRkbCBtZXNzYWdl IG9yIHRoZSBkZGwKKwkJCSAqIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBpdHMgcm9vdCByZWxh dGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfHwKKwkJ CQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJCXsKKwkJCQlSZWxhdGlv bkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNl IERDVF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxp ZCk7CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxlbnRy eSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVsZW50 cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX09iamVjdERyb3A6 CisJCQkvKiBkbyBub3RoaW5nICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7CisJCQlicmVhazsKKwl9CisKKwkv KiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4bmRh dGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsKKwor CU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3JpdGVf ZGRsbWVzc2FnZShjdHgtPm91dCwKKwkJCQkJCQkJeGlkLAorCQkJCQkJCQltZXNzYWdlX2xzbiwK KwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0cHV0 UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25DbG9z ZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBhc3Nv Y2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0aGUg Y2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBAIC0x OTkzLDcgKzIxNjcsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBS ZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5 LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBl bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBO VUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0 ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTEsNiArMjIyNiw3IEBAIGdl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g ZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAq IFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCku CkBAIC0yMTY0LDYgKzIzNDAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkvKgog CQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5j ZXN0b3IKQEAgLTIzNDksNiArMjUyNiw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9uX2Ni KERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRyeS0+ cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRpb24g b3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCAwMGRjMGYyLi5mMWI0 ZDA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2ODMsNiArNTY4Myw3IEBA IFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0 aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHVi Zm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWJm b3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHVi Zm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9IHB1YmZv cm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVuY2Vk IGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYmQ5YjA2 Ni4uOTdmNDM0YSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zODk3LDYgKzM4OTcsNyBAQCBnZXRQdWJsaWNh dGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9wdWJ1 cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlpbnQJ CQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwKIAkJCQludHVwczsK QEAgLTM5MTIsMjMgKzM5MTMsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOwogCiAJLyogR2V0 IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMwMDAw KQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFt ZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAu cHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHVi dmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAucHVidmlhcm9vdCAi CiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1v dGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJ CQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5w dWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgor CQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJk ZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFy b290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UKIAkJYXBwZW5k UFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQs IHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVu Y2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAi RlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwg cXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTQ0LDYgKzM5NDUsNyBAQCBnZXRQ dWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1 cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZu dW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbCIpOwog CWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZv ID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtMzk2Nyw2 ICszOTY5LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGlj YXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAidCIp ID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1YmRk bCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCksICJ0IikgPT0gMCk7 CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBp LCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDQ2LDYgKzQwNTAsMTUgQEAgZHVt cFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5m bykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHViZGRsKQorCXsKKwkJ aWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9IGZhbHNlOworCX0K KwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAKIAlpZiAocHViaW5mby0+ cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQyN2Y1ZDQuLjY4NTY4M2UgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aApAQCAtNjIwLDYgKzYyMCw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAli b29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJYm9vbAkJcHVidmlhcm9vdDsK Kwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNj LmMKaW5kZXggNmI4YzE3Yi4uNzkyZjQzOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1w L3JtZ3JkZXNjLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYg KzI3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgogI2luY2x1ZGUgInJtZ3JkZXNjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5 ZGVmcy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYwppbmRleCBjNjQ1ZDY2Li4yZTk0ZmNhIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE1OSw3 ICs2MTU5LDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhw QnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQg PSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9Owor CXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAo cHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTk0LDYgKzYxOTQsMTAgQEAgbGlzdFB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRf bm9vcCgiVmlhIHJvb3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTQwMDAwKQorCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJ CQkJCSAgZ2V0dGV4dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjI4 NCw2ICs2Mjg4LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAlQR3Jlc3VsdCAgICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19w dWJ2aWFyb290OworCWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7 CiAJcHJpbnRUYWJsZUNvbnRlbnQgY29udDsKQEAgLTYzMDAsNiArNjMwNSw3IEBAIGRlc2NyaWJl UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAo cHNldC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNp b24gPj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE1MDAwMCk7 CiAKIAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYzMTMsNiArNjMxOSw5IEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290 KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7 CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJ ICIsIHB1YmRkbCIpOwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJP TSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjM2NCw2ICs2MzczLDggQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJ CWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJ bmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZm ZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzNzgsNiArNjM4 OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmlu dFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBh bGlnbik7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNv bnQsIGdldHRleHRfbm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1 YmRkbCkKKwkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIp LCB0cnVlLCBhbGlnbik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUo cmVzLCBpLCAyKSwgZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBR Z2V0dmFsdWUocmVzLCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAgLTYzODgsNiArNjQwMSw4IEBA IGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlp ZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDgpLCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50 VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7 CiAKIAkJaWYgKCFwdWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9ybWdybGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAw YmNiZi4uMzdkZmQ0NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdf Uk1HUihSTV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRf dHNfZGVzYywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0 aW9uT3JpZ2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5f aWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQs ICJHZW5lcmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnks IE5VTEwsIE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19J RCwgIkxvZ2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxv Z2ljYWxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQor UEdfUk1HUihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2Fs ZGRsbXNnX3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbGRkbG1zZ19kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdAppbmRleCAyYzg3MTA2Li5jZTFiMTdmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAg LTExODI5LDQgKzExODI5LDEzIEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQg anNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdk ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9h cmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQn IH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBk ZXBhcnNlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9l bmQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9p ZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0 YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFy dCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywg cHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBv aWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0 YWJsZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9y ZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKIF0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBlY2Y1YTI4Li5kYWZkNDgzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFM T0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVl IGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8K IAlib29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJsZSBjcmVhdGlvbnMgYXJlIHB1 Ymxpc2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVi bGljYXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAli b29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsK IAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmgKaW5kZXggMTAwOTFjMy4uZmQyZWU3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xs ZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZl bnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJ CQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRk cmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdn ZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0 R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGNhODYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKQEAgLTAsMCAr MSw2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNzYWdlLmgKKyAqCSAgIEV4cG9y dHMgZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIENvcHlyaWdo dCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorI2RlZmluZSBQR19MT0dJQ0FM X0RETF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNpbmNsdWRl ICJub2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZvciBrZWVwaW5nIHRyYWNrIG9m IGRlcGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0gRGVwYXJzZWRDb21tYW5kVHlw ZQoreworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0YXJ0LAorCURDVF9UYWJsZURy b3BFbmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENyZWF0ZSwKKwlEQ1RfT2JqZWN0 RHJvcAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICogR2VuZXJpYyBsb2dpY2FsIGRl Y29kaW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJCS8qIGRhdGFiYXNlIE9pZCBl bWl0dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJLyogbGVuZ3RoIG9mIHByZWZp eCAqLworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2Vk Q29tbWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJ CQkJbWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICog cGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZp eF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdl CShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhM b2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIg KmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExP R19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5m byBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxt c2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUu aAppbmRleCA3NDFiZjY1Li40MjdhN2I5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAt MjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNv ZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwog ZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJu IHZvaWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9j ZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApp bmRleCA3ZWFhNGM5Li41ZDYxNzQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJv dG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlM T0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAn WScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RE TE1FU1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJ TE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9Q UkVQQVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJl cF93cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRl cm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJ CQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBY TG9nUmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkJCQkJCQkgYm9vbCB0 cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkgU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3Nh Z2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJ CQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4s IFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQg eGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJu IExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCBiN2QyOGQ3Li43NjNl NDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC05MSw2ICs5 MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdl KTsKIAogLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Vz LgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0 IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJ CQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJ CQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1l c3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAq IEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwogdHlwZWRlZiBib29sICgqTG9naWNhbERl Y29kZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LApAQCAtMjAyLDYgKzIxNCwxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFt TWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWlu ZyBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFu c2FjdGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNz YWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQg cmVsaWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworCisvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1w cm9ncmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVT dHJlYW1UcnVuY2F0ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAg LTIyMSw2ICsyNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlM b2dpY2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0 Q0IgY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRl ckJ5T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdpbl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25D QiBzaHV0ZG93bl9jYjsKIApAQCAtMjM5LDYgKzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1 dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29t bWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwog CUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNh bERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2Fs RGVjb2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdp bkNhbGxiYWNrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRw dXQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NS4u ODNlMGIxZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBA IHR5cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsK IAlMaXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJ TGlzdAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWlu ZzsKIAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIu aAppbmRleCAwMmI1OWExLi4wYjFhOTE2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRh aWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z aW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs Y2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFu Z2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9D SEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0Us CiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9D SEFOR0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3Ry dWN0IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7 CiAKKwkJLyogRERMIE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVm aXg7CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lk CQkJcmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5cGU7CisJCX0JCQlkZGxtc2c7 CisKIAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQ U0hPVCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDM1LDYgKzQ0OCwxNiBAQCB0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJ CQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5 cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpy YiwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAq cmIsCiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNTAxLDYgKzUyNCwx NyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJ CQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0 dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAo CisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJ CQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6 ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRy dW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZl clN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBA IC01NTIsNiArNTg2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBw bHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21t aXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExN ZXNzYWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3 aGVuIHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTU3MSw2ICs2 MDYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRD QiBzdHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hh bmdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVv cmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZTsKIAlSZW9yZGVy QnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjUwLDYg KzY4Niw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBY TG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFy ICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1 ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgIGNvbnN0 IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICBjb25zdCBjaGFy ICptZXNzYWdlLCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSk7CiBleHRl cm4gdm9pZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVjUHRyIGVuZF9s c24sCiAJCQkJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5JZCBvcmlnaW5f aWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApp bmRleCBhN2Y1NzAwLi5iZmM3M2MyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BzcWwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAg LTU5NzAsOSArNTk3MCw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8u c3VjaC5wdWJsaWNhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCi0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2UuLjJiN2Nk MGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwy MCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElO RSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScs IHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAg ICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3Ry dW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAg IHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKICgyIHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBT RVQgKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z Ci0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRl c3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRkaW5nIHRhYmxl cwpAQCAtODcsMTAgKzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAtLSBzaG91 bGQgYmUgYWJsZSB0byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCAr OTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Ag c2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxF JyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTIzLDEw ICsxMjMsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEZPUiBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yX3Ri bF9zY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QsIFRBQkxFIHB1Yl90ZXN0LnRl c3RwdWJfbm9wazsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX2Zv cl90Ymxfc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yX3RibF9zY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsxMzUsMTAg QEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBhIHRhYmxl IG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3Br OwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTQ3LDEw ICsxNDcsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGRy b3AgdGhlIHRhYmxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBEUk9QIFRB QkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0x NjEsMTAgKzE2MSwxMCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBw YXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRv IHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEg U0VUIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgog CkBAIC0xODYsMTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxs dGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwpAQCAtMjAxLDE5ICsyMDEsMTkg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMyIKICAgICAicHVibGljLnRlc3RwdWJfdGJsM2Ei CiAKIFxkUnArIHRlc3RwdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWI0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4gcHVibGljYXRpb24s IG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBB REQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjUy LDEwICsyNTIsMTAgQEAgQUxURVIgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQgREVUQUNIIFBBUlRJVElP TiB0ZXN0cHViX3BhcnRlZDE7CiBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIFNFVCAocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlKTsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCB0ICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yODQsMTAgKzI4 NCwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1YjUgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90Ymwy IFdIRVJFIChjIDw+ICd0ZXN0JyBBTkQgZCA8IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMwMCwx MCArMzAwLDEwIEBAIFRhYmxlczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRB QkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDEwMDAgQU5EIGUgPCAyMDAwKTsKIFxkUnAr IHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkg QU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsg dGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAy MDAwKSkKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3Jm X3RibDEgYW5kIGFkZCB0ZXN0cHViX3JmX3RibDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVz c2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUgPCA1MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoKGUgPiAzMDApIEFO RCAoZSA8IDUwMCkpCiAKQEAgLTM2NiwxMCArMzY2LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDEgRk9SIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSwgT05MWSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPCA5OTkp IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChl IDwgOTk5KQpAQCAtMzc5LDEwICszNzksMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVz dHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFICho IDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDIKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1 Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCArNDk3LDEwIEBAIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVt YTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0 cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYg V0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90 Ymw2IiBXSEVSRSAoaSA8IDk5KQogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTcxNCwxMCArNzE0 LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNo ID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChh KTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBA QCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMg aW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2Zp bHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0 ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVSRSAoYyA8PiAxKQogCkBA IC0xMDk5LDEwICsxMDk5LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfdGJsMSIgaXMg YWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsCiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKIEVSUk9SOiAg cHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJlYWR5IGV4aXN0cwogXGRScCsgdGVzdHB1 Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YmwKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25v cGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMTQwLDEwICsxMTQwLDEwIEBAIFB1 YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3J0YmwiCiAKIFxkUnArIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1 bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAg ICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMjIxLDEwICsxMjIxLDEwIEBAIFJFVk9LRSBD UkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDE7 CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFp bCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAg RVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVT RVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVz dHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5hbWUgYmFjayB0byBrZWVwIHRo ZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb28gUkVOQU1FIFRPIHRl c3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBPV05FUiBU TyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0cHViX2RlZmF1bHQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGlj YXRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNjaGVtYXMgYW5kIHRh YmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNVUlJFTlRfU0NIRU1B Ii4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdF UlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEZPUiBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAg ICAicHViX3Rlc3QyIgpAQCAtMTI4OSw0NCArMTI4OSw0NCBAQCBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1YjZfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BICJDVVJSRU5UX1NDSEVNQSIs IENVUgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFICJDVVJS RU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIK IAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjZfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BLkNVUlJF TlRfU0NIRU1BIgogCkBAIC0xMzYwLDEwICsxMzYwLDEwIEBAIEVSUk9SOiAgc2NoZW1hICJ0ZXN0 cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1hIHNob3VsZCBy ZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1Yl90ZXN0MzsK IFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzcxLDIwICsx MzcxLDIwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5hbWluZyB0aGUgc2NoZW1hIHNo b3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIEFMVEVSIFNDSEVNQSBwdWJf dGVzdDEgUkVOQU1FIHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRScCsgdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxX3Jl bmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xMzkyLDEwICsxMzkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MDQsMTAgKzE0MDQsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBBREQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hl bWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlz IGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyNywxMCArMTQyNywx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBzY2hl bWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0MzgsMTAg KzE0MzgsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogRVJST1I6ICB0 YWJsZXMgZnJvbSBzY2hlbWEgInB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNh dGlvbgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE0NDksMjkgKzE0NDksMjkgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVt YSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2No ZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFf Zm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFsdGVyIHB1 YmxpY2F0aW9uIHNldCBtdWx0aXBsZSBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIx X2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgw LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAg VGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1 NzQsMTggKzE1NzQsMTggQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYTsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJv dykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTk1LDIw ICsxNTk1LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJs ZSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIFRBCiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJw KyB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZy b20gc2NoZW1hczoKLS0gCjEuOC4zLjEKCg== --0000000000007cc06905eaab354e Content-Type: application/octet-stream; name="v26-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v26-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l92lm2362 RnJvbSA1Mzk0MTMzZmJiNGI5M2VlYzk3YjM1ZmM4OWUyN2UxZjY0N2MwZjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTAgT2N0IDIwMjIgMDQ6NTU6MjQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNiAzLzRdIFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBp ZGVhIG9mIHJlcGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNl IHRoZSBDUkVBVEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBz dWJxdWVyeSkgY29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUg YW5kIGJlZm9yZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUg aW5jb21pbmcgd3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNo LCB3ZSBkb24ndCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9u J3QgbmVlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1 YnF1ZXJ5IGFsc28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtz CmZvciBhbGwga2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtF WEVDVVRFXVtWQUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2Vy ICJ0YWJsZV9pbml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJM RSBBUy9TRUxFQ1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkg b3RoZXIgbW9kaWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9p bml0X3dyaXRlIGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgd2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFu ZCBpbmNvbWluZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8ICAyMyArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jICAgfCAxNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2Jh Y2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAg IDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAx MCBmaWxlcyBjaGFuZ2VkLCAyMzEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY3JlYXRlYXMuYwppbmRleCAxNTJjMjliLi4wZDgwYzZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ny ZWF0ZWFzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVh dGVhcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJj b21tYW5kcy9tYXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rh c19pbnRlcm5hbChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3 UXVlcnkoaW50b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFu ZENvdW50ZXJJbmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUg dHJpZ2dlciBmb3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28K KwkJICogdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5 IGNyZWF0ZWQgdGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFk ZHIpOworCX0KIAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggMDY3ZDNlZS4uMGIwMGZlNiAxMDA3NTUKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jCkBAIC04MTIxLDYgKzgxMjEsMjYgQEAgZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1T dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCXJldHVybiBjcmVhdGVUcmFuc2Zv cm07CiB9CiAKKy8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAq IGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUg ZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlB c3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNt ZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5v YmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7Cit9CisKIAogLyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgpA QCAtODQyMyw2ICs4NDQzLDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29t bWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfR3JhbnQ6CiAJCQl0cmVl ID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVU YWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJy ZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJP cEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMK aW5kZXggNzc1YTI4ZC4uYmNkMGEwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdT dG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3Rh cnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQi KSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYK LQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJl Y29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENyZWF0ZUV2 ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBs aXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikg PT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJ IHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYg dGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBp ZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01ODUs NyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlk Ymd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRf RERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJ ZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZl bnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50 X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5k IHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2ICs4NzEs MTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJs ZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8q CisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byBy ZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91 dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsK KwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdn ZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21t YW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQg PSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSBT Q1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRl bnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsK Kwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJl ZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJ RmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4K KyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkg dGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJv YmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2Vycygp IHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2 b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBpZiBldmVu dCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlm ICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVudCA9IGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCXBmcmVl KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoKKyAqIHB1 YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRk bCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJ CQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJCQkgICAq anNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJ CWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlj bWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChj bWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgor CSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJl ZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8g ZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZwor CSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLwor CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxv ZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9 IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3Ry bGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK K30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lk CitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRk cmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0 cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZl bnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50 CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJ aWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5v dGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhl cmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQg b2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZv cmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVu dFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3Qg ZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBj b21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21t b25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0 ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEp OworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENy ZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rh cy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0g YWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tl KHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5s aXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBk aWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJp Z2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMwOSw4 IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50 Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERM Q29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRF bmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAh PSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6 CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoK KwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0 eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2ZW50X3Ry aWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5k LmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNl IGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5k LmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3Bw ZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCmluZGV4IGYxNTk1NzMuLjUyOTRiNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDA2LDYgKzEwMDYsMTEgQEAgQ3JlYXRlUHVibGljYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlD TURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVwogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5p dF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19T RUxFQ1RfSU5UTworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50 IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRf ZW5kIiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15 c2VsZiwgcHVib2lkKTsKQEAgLTEwMTcsNiArMTAyMiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3Jl YXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGlj YUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJ CQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBD cmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAog CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGJl YTM1YTYuLjUwODM5YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY2LDggKzE2NjYsMTAgQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2Fz ZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAo Q3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5 RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVh azsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCmluZGV4IGY3ZjcxNjUuLjdmYjhjYjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2Fj aGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJ CWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxl X3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlm IChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0g RVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggY2UxYjE3Zi4uODFmYmZkNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CkBAIC0xMTgzOCw0ICsxMTgzOCw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmln Z2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJp Z2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZl bnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaAppbmRleCBmZDJlZTdmLi5hOWUwZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExD b21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxE cm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3Jp dGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4g dm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9i amVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1 ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lk KTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiLi4zZDI5NGEwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3Rl ZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZp bGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0 ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsK IAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFu ZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1 Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0 ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0 Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNi4uMWU2 NDgzMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQog CUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3As Ci0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdy aXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMS44LjMuMQoK --0000000000007cc06905eaab354e Content-Type: application/octet-stream; name="v26-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v26-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l92lm22k0 RnJvbSA5MTUyN2U3ODU4ZWZhYTdiY2UwN2ZmNDMzOWMyZDc2YjNjOTJiYzZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTAgT2N0IDIwMjIgMDM6MzY6NDIgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNiAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRF L0FMVEVSL0RST1AgUlVMRQpDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKQ1JFQVRFL0FMVEVSL0RS T1AgQ09MTEFUSU9OCkdSQU5UClJFVk9LRQpSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXCkNSRUFU RS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VSL0RJQ1RJT05BUlkv VEVNUExBVEUKQ1JFQVRFL0RST1AgVFJBTlNGT1JNCkNSRUFURS9BTFRFUi9EUk9QIFVTRVIgTUFQ UElORwoKKE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhl LmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBX ZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVw bGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJ T04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUg dGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRB QkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRh YmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgoK KE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNpcmFibGUgJ29uJyBmcm9tIHRoZSBpZGVudGl0eSBz dHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRPYmplY3RJZGVudGl0eVBhcnRzLiBUaGlzIGlzIG5l ZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJPUApUUkFOU0ZPUk0gY29tbWFuZCB3b3JrIHNpbmNl ICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0gc3ludGF4 LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qgc3ludGF4IGlzCmRyb3AgdHJhbnNmb3JtIHRyZiBm b3IgaW50IGxhbmd1YWdlIHNxbDsKaW5zdGVhZCBvZgpkcm9wIHRyYW5zZm9ybSB0cmYgZm9yIGlu dCBvbiBsYW5ndWFnZSBzcWw7Ci0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAg ICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j ICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyAg ICAgICAgIHwgICAgOSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgICAg ICAgICAgfCA4NDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jICAgICAgICAgICAgICB8ICA3NjMgKysrCiBzcmMvYmFja2VuZC9jb21t YW5kcy9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VxdWVuY2UuYyAgICAgICAgICAgICAgfCAgIDMzICsKIHNyYy9iYWNrZW5kL3Rjb3AvdXRp bGl0eS5jICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdF90eXBlLmMgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv cmVncHJvYy5jICAgICAgICAgICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgICAgICAgICAgfCAgMjIwICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0ICAgICAgICAgICAgICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5oICAgICAgICAgfCAgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o ICAgICAgICAgICAgICAgfCAgIDIzICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmggICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwu aCAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAg ICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgIHwgICAxNiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNz Lm91dCB8ICAgIDIgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgIHwgICAgNCArCiAyMiBmaWxlcyBjaGFuZ2VkLCA5NTM2IGluc2VydGlvbnMoKyksIDc1IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvYWNsY2hrLmMKaW5kZXggYWE1YTJlZC4uN2RjMTkwZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j CkBAIC0zODUsNyArMzg1LDExIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAogCQkJCQkgZXJybXNnKCJncmFudG9yIG11c3QgYmUgY3VycmVudCB1c2VyIikpKTsK KworCQlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CiAJfQorCWVsc2UKKwkJaXN0bXQuZ3Jh bnRvcl91aWQgPSBJbnZhbGlkT2lkOwogCiAJLyoKIAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50 U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdyYW50IGZvcm0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jCmluZGV4IDI4NGNhNTUuLjA4NGFjZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jCkBAIC02MDAxLDcgKzYwMDEsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0 IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1UeXBlID0gZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJdHJhbnNmb3JtTGFuZyA9IGdl dF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFsc2UpOwogCi0JCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdlICVzIiwKKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMiLAogCQkJCQkJCQkgdHJhbnNm b3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJCWlmIChvYmpuYW1lKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4xNzFkZmIyIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmls ZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVhdGVhcy5vIFwK IAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8gXAogCWRlZmlu ZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0 aW9uY21kcy5jCmluZGV4IGZjZmMwMmQuLjAxMjFjMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xs YXRpb25jbWRzLmMKQEAgLTUwLDcgKzUwLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBD T0xMQVRJT04KICAqLwogT2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0 cykKK0RlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0 ICpwYXJhbWV0ZXJzLAorCSAgIAkJCWJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAq ZnJvbV9jb2xsaWQpCiB7CiAJY2hhcgkgICAqY29sbE5hbWU7CiAJT2lkCQkJY29sbE5hbWVzcGFj ZTsKQEAgLTEzNyw2ICsxMzgsMTIgQEAgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2UKIAkJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOwogCisJCS8qIG1ha2UgZnJvbSBleGlzdGluZyBj b2xsYXRpb25pZCBhdmFpbGFibGUgdG8gY2FsbGVycyAqLworCQlpZiAoZnJvbV9jb2xsaWQgJiYg T2lkSXNWYWxpZChjb2xsaWQpKQorCQkJCU9iamVjdEFkZHJlc3NTZXQoKmZyb21fY29sbGlkLAor CQkJCQkJCQkgQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJIGNvbGxpZCk7CisKIAkJY29s bHByb3ZpZGVyID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxwcm92 aWRlcjsKIAkJY29sbGlzZGV0ZXJtaW5pc3RpYyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNU UlVDVCh0cCkpLT5jb2xsaXNkZXRlcm1pbmlzdGljOwogCQljb2xsZW5jb2RpbmcgPSAoKEZvcm1f cGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGVuY29kaW5nOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDY3ZDNl ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMK QEAgLTAsMCArMSw4NDU5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJz ZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGlu ZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHBy b3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAq IGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVk IHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRl bmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5 IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNo IG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJv bSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBh cyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVj aWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICog ZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2Rk bF9kZXBhcnNlLmgiCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5o ZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHNfZGljdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdHlwZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNp bmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWdu LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1 ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2lu Y2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVI YW5kbGVyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9m bWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25i LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMu aCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9m IHRoZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9M RU4gMTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVz ZW50YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRy ZWUsIHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpU eXBlTnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwK KwlPYmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpU eXBlOworCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CisJ aW50CQkJbnVtUGFyYW1zOworCVN0cmluZ0luZm8JZm10aW5mbzsKKwlib29sCQlwcmVzZW50Owor fSBPYmpUcmVlOworCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkgICAqbmFtZTsK KwlPYmpUeXBlCQlvYmp0eXBlOworCisJdW5pb24KKwl7CisJCWJvb2wJCWJvb2xlYW47CisJCWNo YXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0OAkJZmx0OworCQlPYmpU cmVlCSAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0gdmFsdWU7CisJc2xpc3Rfbm9k ZQlub2RlOworfSBPYmpFbGVtOworCitib29sIHZlcmJvc2UgPSB0cnVlOworCitzdGF0aWMgdm9p ZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIExpc3QgKmFy cmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9vYmplY3QoT2Jq VHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgZmxvYXQ4IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVu ZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGFw cGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIE9ialRyZWUgKnZh bHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3Ry aW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CitzdGF0 aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2Qs CisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIs CisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rpb25HZXREZWZh dWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChP YmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpUcmVl ICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpOworc3RhdGljIE9iakVs ZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpu ZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgT2JqRWxl bSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3RhdGljIEpzb25iVmFsdWUgKm9i anRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUp Oworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAor CQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwK KwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJCSBjaGFyICoqdGFibGVzcGFj ZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3RhdGljIGNoYXIgKlJlbGF0aW9u R2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJ CQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpz dHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOworCitzdGF0aWMgT2JqVHJlZSAq ZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9v bCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIs IExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5JZGVudGl0eShP aWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9i alRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOwor c3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24oT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJCQkJCSBPYmplY3RBZGRyZXNzIGZyb21Db2xs aWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2Jq ZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZp bmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9i alRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSwgT2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShPaWQgb2Jq ZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZp bmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworCitz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVz ZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5k IGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNl X09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAq ZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3Bn X3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ug c2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFy c2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2 YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpw YXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2Vx dWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf U3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3Jh Z2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190 eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU2VuZChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9P dXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190 eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3Vic2Ny aXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlz dCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBh cnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMs IExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUp OworCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBBbHRlclBv bGljeSBkZXBhcnNlIG9iamVjdHMKKyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xpY3lfY2xhdXNl cyhPYmpUcmVlICpwb2xpY3lTdG10LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywKKwkJCQkg ICBib29sIGRvX3F1YWwsIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwg PSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1 cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3Bv bGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAoRm9ybV9wZ19w b2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogYWRkIHRoZSAiT04gdGFibGUiIGNsYXVz ZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBvbGljeVN0bXQsICJPTiAle3RhYmxlfUQiLAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgIlRP IHJvbGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENSRUFURSBjYXNlLCBpdCBhbHdheXMKKwkg KiBjb250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUgQUxURVIgY2FzZSBpdCBtaWdo dCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJeworCQlMaXN0ICAgKmxpc3QgPSBOSUw7 CisJCUxpc3RDZWxsICpjZWxsOworCisJCWZvcmVhY2ggKGNlbGwsIHJvbGVzKQorCQl7CisJCQlS b2xlU3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKworCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KG5ld19vYmp0cmVlX2Zv cl9yb2xlc3BlYyhzcGVjKSkpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QocG9saWN5U3Rt dCwiVE8gJXtyb2xlOiwgfVIiLCBsaXN0KTsKKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKworCS8qIGFkZCB0aGUg VVNJTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7CisJCURhdHVtCWRlcGFy c2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQlib29sCWlzbnVsbDsKKworCQlzdG9yZWRleHBy ID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9scXVhbCwKKwkJCQkJCQkJ ICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2xxdWFsIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1 IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9l eHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHBvbGljeVN0bXQsICJVU0lORyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgVGV4dERh dHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsKKworCS8qIGFkZCB0aGUgV0lUSCBDSEVD SyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRoX2NoZWNrKQorCXsKKwkJRGF0dW0JZGVw YXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJCXN0b3JlZGV4 cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2x3aXRoY2hlY2ssCisJ CQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVs bCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24g aW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNh bGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJXSVRIIENIRUNLICgle2V4cHJlc3Npb259cyki LAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmVs YXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKiBBcHBlbmQgYW4g YXJyYXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9hcnJheV9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlzdCAqYXJyYXkpCit7CisJT2Jq RWxlbQkqcGFyYW07CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisK KwlpZiAobGlzdF9sZW5ndGgoYXJyYXkpID09IDApCisJCXJldHVybjsKKworCWlmICghdmVyYm9z ZSkKKwl7CisJCUxpc3RDZWxsICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpFbGVtcyB3aG9z ZSBwcmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJ T2JqRWxlbSAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChlbGVt LT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09IE9i alR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAmJgor CQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVhY2hf ZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFy cmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwor LyogQXBwZW5kIGEgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAor YXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFs dWUpCit7CisJT2JqRWxlbSAgKnBhcmFtOworCWNoYXIJICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7 CisJYm9vbAkgIGlzX3ByZXNlbnRfZmxhZyA9IGZhbHNlOworCisJQXNzZXJ0KHN1Yl9mbXQpOwor CisJLyogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZyBh bmQgc3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUqLworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNl bnQiKSA9PSAwKQorCXsKKwkJaXNfcHJlc2VudF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2Vu dCA9IHZhbHVlOworCX0KKworCWlmICghdmVyYm9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0 dXJuOworCisJaWYgKCFpc19wcmVzZW50X2ZsYWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29i amVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVCb29sLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2 YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICog QXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCith cHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2 YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3Jt YXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVG bG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRf cHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIHRoZSBpbnB1 dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQkJ bGVuOworCWNoYXIJCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQly ZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCWxlbiA9IHRyZWUtPmZtdGlu Zm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobGVu ID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBlbmRTdHJpbmdJbmZvU3BhY2VzKHRy ZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyh0cmVlLT5mbXRpbmZv LCBzdWJfZm10KTsKK30KKworLyogQXBwZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlICovCitz dGF0aWMgdm9pZAorYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQpCit7CisJY2hhciAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAo IXZlcmJvc2UpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19m b3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIG5ld19vYmplY3QoT2JqVHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qIEFwcGVu ZCBhbiBvYmplY3QgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9v YmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVl KQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQo c3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47 CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFt ZSk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVj dCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNo IGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0 cmluZy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4K KyAqLworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRy ZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEJb2JqZWN0X25hbWU7 CisJY29uc3QgY2hhcgkgICAqZW5kX3B0cjsKKwljb25zdCBjaGFyCSAgICpjcDsKKwlib29sCQkJ c3RhcnRfY29weSA9IGZhbHNlOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0cmVlLT5mbXRp bmZvID09IE5VTEwpCisJCXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0luZm8oJm9iamVj dF9uYW1lKTsKKwllbmRfcHRyID0gc3ViX2ZtdCArIHN0cmxlbihzdWJfZm10KTsKKworCWZvciAo Y3AgPSBzdWJfZm10OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlpZiAoKmNwID09ICd7JykK KwkJeworCQkJc3RhcnRfY29weSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgh c3RhcnRfY29weSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgqY3AgPT0gJzonIHx8ICpjcCA9PSAn fScpCisJCQlicmVhazsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZvYmplY3RfbmFt ZSwgKmNwKTsKKwl9CisKKwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVsb2coRVJST1Is ICJvYmplY3QgbmFtZSBub3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUs IHN1Yl9mbXQpOworCisJcmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7Cit9CisKKy8qIEFwcGVuZCBh IHByZWFsbG9jYXRlZCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2FwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKQorewor CXNsaXN0X3B1c2hfaGVhZCgmdHJlZS0+cGFyYW1zLCAmZWxlbS0+bm9kZSk7CisJdHJlZS0+bnVt UGFyYW1zKys7Cit9CisKKy8qIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlICov CitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hhcgkgICAq b2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZh bHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCW9iamVjdF9u YW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJ cGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+ dmFsdWUuc3RyaW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFt KTsKK30KKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3 ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICog LSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBl cyB3aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRP aWQ7IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBu YW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAq IC0gdHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisg KiAtIHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5n IHdpdGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVz dCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0 aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2Yg dHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1h dF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAq bnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5 cGFycmF5KQoreworCUhlYXBUdXBsZQkJdHVwbGU7CisJRm9ybV9wZ190eXBlCXR5cGVmb3JtOwor CU9pZAkJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUi LCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBs ZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJsZSBsZW5ndGgp IGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkgdHlwZXMgc3Vj aCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLworCWFycmF5X2Jh c2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGFycmF5ID0gKElzVHJ1ZUFycmF5 VHlwZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9QTEFJ Tik7CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8g dGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jh c2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlw ZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFy cmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3IgdHlw ZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBtb2QgYXQg dGhlIG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSApLiBXZSBjYW5u b3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGlu IHRoZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9PSBJTlRFUlZBTE9JRCB8fAorCQl0 eXBlX29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QVFpPSUQg fHwKKwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FVFpPSUQpCisJ eworCQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNlIElOVEVSVkFMT0lEOgorCQkJCSp0 eXBuYW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNU QU1QVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAo IlRJTUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNl LCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJCSp0 eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVU Wk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElN RSBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRa IGlzIGFkZGVkIGJ5IHR5cG1vZGUuICovCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSIp OworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FT0lEOgorCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgi VElNRSIpOworCQkJCWJyZWFrOworCQl9CisJCSpuc3BpZCA9IEludmFsaWRPaWQ7CisJfQorCWVs c2UKKwl7CisJCS8qCisJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBm b3Igb3RoZXIgdHlwZXMsIHNvIGdldCB0aGUgdHlwZQorCQkgKiBuYW1lIGFuZCBzY2hlbWEgZGly ZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJICovCisJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBu YW1lc3BhY2U7CisJCSp0eXBuYW1lID0gcHN0cmR1cChOYW1lU3RyKHR5cGVmb3JtLT50eXBuYW1l KSk7CisJfQorCisJaWYgKHR5cGVtb2QgPj0gMCkKKwkJKnR5cGVtb2RzdHIgPSBwcmludFR5cG1v ZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJZWxzZQorCQkqdHlwZW1vZHN0 ciA9IHBzdHJkdXAoIiIpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKK30KKworLyoKKyAq IFJldHVybiB0aGUgZGVmYXVsdHMgdmFsdWVzIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uLCBh cyBhIGxpc3Qgb2YKKyAqIGRlcGFyc2VkIGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgTGlzdCAq CitGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKQoreworCUxpc3QgICAq bm9kZWRlZnM7CisJTGlzdCAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICpjZWxsOworCisJ bm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUodGV4dF90b19jc3RyaW5nKHByb2FyZ2Rl ZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9nKEVSUk9SLCAicHJv YXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlZGVmcykK Kwl7CisJCU5vZGUgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBw ZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNl KSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8K K3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sK Kwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgor CQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgor CQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgor CQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVy c2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCS8qIG1h a2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IHBhcmFtZXRl ciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5h bWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAoc2l6ZW9mKE9iakVs ZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJcGFyYW0tPm9ianR5cGUgPSB0eXBlOworCisJ cmV0dXJuIHBhcmFtOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyICov CitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sK KwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBO VUxMKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9 CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIg dmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShjaGFyICpmbXQpCit7 CisJT2JqVHJlZQkqcGFyYW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXplb2YoT2JqVHJlZSkp OworCXBhcmFtcy0+cHJlc2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFyYW1zLT5wYXJhbXMp OworCisJaWYgKGZtdCkKKwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VTdHJpbmdJbmZvKCk7 CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBmbXQpOworCX0KKwor CXJldHVybiBwYXJhbXM7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7 fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYW5hbWUiIGFuZCAi b2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBjb3JyZXNwb25kcyB0 byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAqCisgKiBUaGUgZGlm ZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9i am5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBp cyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0 aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUp Cit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChp c0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1w Iik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJ cXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICJzY2hlbWFuYW1l IiwgT2JqVHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgIm9iam5hbWUiLCBPYmpUeXBl U3RyaW5nLCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisg KiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGgg dGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9p ZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsK KwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0JCW9iam5hbWU7CisJ QXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRy TnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJ CWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1f b2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJIG9iamVjdElk LCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1lID0gZ2V0X29i amVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3Rf YXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihjYXRv YmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAm aXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5h bWVzcGFjZSIpOworCisJb2JqbmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwg UmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwpOworCWlmIChpc251 bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZSIpOworCisJcXVhbGlmaWVk ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJ CQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1lKG9iam5hbWUpKSk7CisJdGFibGVfY2xvc2Uo Y2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8q CisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVk IGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFzIFJPTEVTUEVDX0NV UlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5hbWVzLgorICovCitz dGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMp Cit7CisJT2JqVHJlZQkgICAqcm9sZTsKKwljaGFyCSAgICpyb2xldHlwZTsKKworCWlmIChzcGVj LT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVj X25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJcm9sZSA9 IG5ld19vYmp0cmVlX1ZBKE5VTEwsMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIsIE9ialR5cGVCb29s LCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkgICJyb2xlbmFtZSIs IE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEhl bHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgT0lE LiAgKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIikuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xlb2lkKQoreworCU9i alRyZWUgICAgKnJvbGU7CisKKwlyb2xlID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKHJvbGVv aWQgIT0gQUNMX0lEX1BVQkxJQykKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJICAg KnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJ ZEdldERhdHVtKHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1Qp LAorCQkJCQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0Iiwgcm9sZW9p ZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNU KHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9sZSwgIiV7cm9s ZW5hbWV9SSIsIHBzdHJkdXAocm9sZW5hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVw KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyb2xlLCAiJXtyb2xlbmFtZX1J IiwgInB1YmxpYyIpOworCisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0 aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19v Ymp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlPYmpUcmVlCSp0 eXBlUGFyYW07CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwbnNwOworCWNoYXIJICAg KnR5cGVuYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9vbAkJdHlwYXJyYXk7 CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNw aWQsICZ0eXBlbmFtZSwgJnR5cG1vZHN0ciwgJnR5cGFycmF5KTsKKworCWlmIChPaWRJc1ZhbGlk KHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAodHlwbnNw aWQpOworCWVsc2UKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7CisKKwl0eXBlUGFyYW0gPSBuZXdf b2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmlu ZywgdHlwbnNwLAorCQkJCQkJCSAgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVuYW1l LAorCQkJCQkJCSAgICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2RzdHIsCisJCQkJCQkJ ICAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGFycmF5KTsKKworCXJldHVybiB0eXBlUGFy YW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJh bWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KKyAqCisgKiBUaGUgImZtdCIgYXJndW1l bnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRoZSBvdXRwdXQgYmxv Yi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZXh0cmEgZWxlbWVudHMgdG8g YXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUgKHN0cmluZyksIHR5cGUgKGZyb20gdGhl IE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQuICBUaGUKKyAqIHZhbHVl IG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgT2JqVHlwZUludGVnZXIg cmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3RyaW5nIHJlcXVpcmVzIGEgY2hhciAqLCBP YmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgorICogT2JqRWxlbSksIE9ialR5cGVPYmpl Y3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9uLiAgRWFjaCBlbGVtZW50IHR5cGUgKgor ICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIgZ2l2ZW4gaW4gdGhlIGZvcm1h dCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQs IHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUgdGhlIGx1eHVyeSBvZiBzcHJpbnRmLWxp a2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxmb3JtZWQgYXJndW1lbnQgbGlzdHMuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9i anMsLi4uKQoreworCU9ialRyZWUJICAgKnRyZWU7CisJdmFfbGlzdAkJYXJnczsKKwlpbnQJCQlp OworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmplY3QgYW5kIGl0cyAiZm10IiAqLworCXRy ZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5kIHByb2Nlc3MgdGhlIGdpdmVuIHZhcmFy Z3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2Jq czsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJT2JqVHlwZQkJdHlwZTsKKwkJT2JqRWxl bQkgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCXR5cGUgPSB2 YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBuZXdfb2JqZWN0KHR5cGUsIE5VTEwpOwor CisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUgbXVzdCBiZSBhIHZh bHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRoZSBmdWxseSBmb3Jt ZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJc3dpdGNoICh0eXBl KQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxsOgorCQkJCS8qIE51bGwgcGFyYW1zIGRvbid0IGhh dmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQm9v bDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFuID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQkJZWxlbS0+dmFsdWUuc3RyaW5nID0gdmFf YXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVBcnJheToKKwkJ CQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdzLCBMaXN0ICopOworCQkJCWJyZWFrOwor CQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCQllbGVtLT52YWx1ZS5pbnRlZ2VyID0gdmFfYXJn KGFyZ3MsIGludDY0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJCWVs ZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZhX2FyZyhhcmdzLCBP YmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJZWxlbS0+bmFt ZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2 YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IHN0cmlu ZyBvYmplY3QgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZh bHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFt ID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5n ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUt YnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJz ZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVt ZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1 ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQor CQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0 cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0 cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRy ZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5k YXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoK KyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLwor c3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29u YlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVM TCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBl ciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJv bSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVs ZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3 aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50 eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpi dlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0 cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJ CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKwor CQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFs LnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0 aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdl cikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOwor CQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVj dEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1 ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9v bDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRo ZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0 LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5 OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ Zm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJCU9iakVsZW0gICAq ZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0 ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJy ZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9ianRyZWVfdG9fanNv bmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRyZWVfdG9fanNvbmJfcmVjKE9ialRy ZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7CisJc2xpc3RfaXRlcglpdGVyOwor CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fT0JKRUNULCBOVUxMKTsKKworCW9i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRyZWUpOworCisJc2xpc3RfZm9yZWFj aChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0ID0gc2xpc3RfY29u dGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJ LyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcu dmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZr ZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBl ICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUp OworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfT0JKRUNULCBO VUxMKTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRS9DUkVBVEUgRE9N QUlOIGRlcGFyc2luZy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBvciBkb21haW4gT0lELCBv YnRhaW4gaXRzIGNvbnN0cmFpbnRzIGFuZCBhcHBlbmQgdGhlbSB0bworICogdGhlIGdpdmVuIGVs ZW1lbnRzIGxpc3QuICBUaGUgdXBkYXRlZCBsaXN0IGlzIHJldHVybmVkLgorICoKKyAqIFRoaXMg d29ya3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0YWJsZXMsIGFuZCBkb21haW5zLgorICoK KyAqIE5vdGUgdGhhdCBDT05TVFJBSU5UX0ZPUkVJR04gY29uc3RyYWludHMgYXJlIGFsd2F5cyBp Z25vcmVkLgorICovCitzdGF0aWMgTGlzdCAqCitvYnRhaW5Db25zdHJhaW50cyhMaXN0ICplbGVt ZW50cywgT2lkIHJlbGF0aW9uSWQsIE9pZCBkb21haW5JZCkKK3sKKwlSZWxhdGlvbgljb25SZWw7 CisJU2NhbktleURhdGEga2V5OworCVN5c1NjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cGxl OworCU9ialRyZWUJKmNvbnN0cjsKKworCS8qIE9ubHkgb25lIG1heSBiZSB2YWxpZCAqLworCUFz c2VydChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpIF4gT2lkSXNWYWxpZChkb21haW5JZCkpOworCisJ LyoKKwkgKiBTY2FuIHBnX2NvbnN0cmFpbnQgdG8gZmV0Y2ggYWxsIGNvbnN0cmFpbnRzIGxpbmtl ZCB0byB0aGUgZ2l2ZW4KKwkgKiByZWxhdGlvbi4KKwkgKi8KKwljb25SZWwgPSB0YWJsZV9vcGVu KENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWlmIChPaWRJc1ZhbGlk KHJlbGF0aW9uSWQpKQorCXsKKwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJQW51bV9wZ19jb25z dHJhaW50X2NvbnJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJCU9iamVjdElkR2V0RGF0dW0ocmVsYXRpb25JZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJ ICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJQW51bV9wZ19jb25zdHJh aW50X2NvbnR5cGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ CU9iamVjdElkR2V0RGF0dW0oZG9tYWluSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nh bihjb25SZWwsIENvbnN0cmFpbnRUeXBpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJmtleSk7CisJfQorCisJLyoKKwkgKiBGb3IgZWFjaCBjb25zdHJhaW50LCBhZGQgYSBub2Rl IHRvIHRoZSBsaXN0IG9mIHRhYmxlIGVsZW1lbnRzLiAgSW4KKwkgKiB0aGVzZSBub2RlcyB3ZSBp bmNsdWRlIG5vdCBvbmx5IHRoZSBwcmludGFibGUgaW5mb3JtYXRpb24gKCJmbXQiKSwgYnV0CisJ ICogYWxzbyBzZXBhcmF0ZSBhdHRyaWJ1dGVzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGNvbnN0 cmFpbnQsIGZvcgorCSAqIGF1dG9tYXRpYyBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChIZWFw VHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3Jt X3BnX2NvbnN0cmFpbnQgY29uc3RyRm9ybTsKKwkJY2hhcgkgICAqY29udHlwZTsKKworCQljb25z dHJGb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlzd2l0 Y2ggKGNvbnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoK KwkJCQljb250eXBlID0gImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9G T1JFSUdOOgorCQkJCWNvbnRpbnVlOwkvKiBub3QgaGVyZSAqLworCQkJY2FzZSBDT05TVFJBSU5U X1BSSU1BUlk6CisJCQkJY29udHlwZSA9ICJwcmltYXJ5IGtleSI7CisJCQkJYnJlYWs7CisJCQlj YXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCWNvbnR5cGUgPSAidW5pcXVlIjsKKwkJCQlicmVh azsKKwkJCWNhc2UgQ09OU1RSQUlOVF9UUklHR0VSOgorCQkJCWNvbnR5cGUgPSAidHJpZ2dlciI7 CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUg PSAiZXhjbHVzaW9uIjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8qCisJCSAqICJ0eXBl IiBhbmQgImNvbnR5cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxlIG91dHB1dCwgYnV0 IGFyZQorCQkgKiB1c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5ndWlzaCB0aGVzZSBm cm9tIGNvbHVtbnMgYW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJhaW50IHR5cGVzLgor CQkgKgorCQkgKiBYWFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlzdCB0aGUgY29sdW1u IG5hbWVzIGluIGEgUEssIGV0Yy4KKwkJICovCisJCWNvbnN0ciA9IG5ld19vYmp0cmVlX1ZBKCJD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJNCwKKwkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29uc3RyYWludCIsCisJCQkJCQkJCSJjb250eXBlIiwg T2JqVHlwZVN0cmluZywgY29udHlwZSwKKwkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBO YW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpLAorCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShj b25zdHJGb3JtLT5vaWQpKTsKKwkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBuZXdfb2Jq ZWN0X29iamVjdChjb25zdHIpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRh YmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBlbGVtZW50czsK K30KKworLyoKKyAqIFJldHVybiBhbiBpbmRleCBkZWZpbml0aW9uLCBzcGxpdCBpbiBzZXZlcmFs IHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJv bSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVy ZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRv Z2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBp bmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5p dGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFj ZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlI ZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlk eHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUlu ZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwg ICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJ aW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1 bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAg KmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRv cHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKworCS8qCisJICogRmV0Y2gg dGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhlIGluZGV4CisJICovCisJaHRfaWR4 ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhyZWxp ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWMgPSAo Rm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+ aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRleHJlbGlkKTsKKwor CS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRvcHRpb24gdGhlIGhh cmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0 X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24sICZpc251bGwpOwor CUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAob2lkdmVjdG9yICopIERhdHVtR2V0 UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZGNsYXNzLCAm aXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xhc3MgPSAob2lkdmVjdG9yICopIERh dHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWluZG9wdGlvbkRhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2lu ZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZG9wdGlvbiA9IChpbnQy dmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25EYXR1bSk7CisKKwkvKgorCSAqIEZl dGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5kZXggcmVsYXRpb24KKwkgKi8KKwlodF9p ZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGluZGV4cmVs aWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4cmVsKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4 cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChodF9pZHhyZWwpOworCisJLyoKKwkg KiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0aG9kCisJICov CisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0oaWR4cmVs cmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBpZHhy ZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRfYW0pOwor CisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnkuICAoTk9URTogd2Ug ZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMg YW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiBub24tY29uc3Qt Zm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwg QW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJZXhwcnNEYXR1bTsK KwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywg JmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9k ZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRl eHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwlj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRy ZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQg aW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0 cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVj dCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOwor CisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVu cyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8gPSAw OyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVyCWF0 dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVlc1trZXlub107CisJCWludDE2CQlvcHQgPSBpbmRv cHRpb24tPnZhbHVlc1trZXlub107CisJCU9pZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtleWNv bGNvbGxhdGlvbjsKKwkJT2lkCQkJaW5kY29sbDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAwID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVt ICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBpbmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0 dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlwbW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5h bWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2UpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlw ZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtl eWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRleCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJ CQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChpbmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9n KEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGluIGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5 ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4 dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRl cGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJ LyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlm IChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIg KikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXlj b2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNv bGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBBZGQgY29sbGF0aW9uLCBldmVuIGlmIGRl ZmF1bHQgKi8KKwkJaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJaWYg KE9pZElzVmFsaWQoaW5kY29sbCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVm LCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29s bCkpKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVs dCAqLworCQlnZXRfb3BjbGFzc19uYW1lKGluZGNsYXNzLT52YWx1ZXNba2V5bm9dLCBJbnZhbGlk T2lkLCAmZGVmaW5pdGlvbkJ1Zik7CisKKwkJLyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8K KwkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJeworCQkJLyogSWYgaXQgc3VwcG9ydHMg c29ydCBvcmRlcmluZywgcmVwb3J0IERFU0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCWlmIChvcHQg JiBJTkRPUFRJT05fREVTQykKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZp bml0aW9uQnVmLCAiIERFU0MiKTsKKwkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBp biB0aGlzIGNhc2UgKi8KKwkJCQlpZiAoIShvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpKQor CQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1Qi KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJ UlNUKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExT IEZJUlNUIik7CisJCQl9CisJCX0KKworCQkvKiBYWFggZXhjbHVkZU9wcyB0aGluZ3kgd2FzIGhl cmU7IGRvIHdlIG5lZWQgYW55dGhpbmc/ICovCisJfQorCSpkZWZpbml0aW9uID0gZGVmaW5pdGlv bkJ1Zi5kYXRhOworCisJLyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZs YXR0ZW5fcmVsb3B0aW9ucyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICov CisJeworCQlPaWQJCQl0YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGlu ZGV4cmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBw c3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJ CWVsc2UKKwkJCSp0YWJsZXNwYWNlID0gTlVMTDsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJl ZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19p bmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVk RGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmlu ZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJ CUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJl ZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJ cGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQor CQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQor CWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFz ZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFz ZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICog Q2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3Rh dGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51 bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlO b2RlICpkZWZ2YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2Rl ZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBm b3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4 cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisv KgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3Ig dGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlv bkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0 dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJ CQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxl LAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxs KTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJ CQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0p KSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJl dHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9i anR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FU RSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVD VF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoK KwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJl dHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJE QVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJ Y2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJ CWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBP QkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JK RUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJ CQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxB TkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9C SkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBW SUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1Mi OworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNl IE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBP QkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgor CQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7 CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpF Q1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6 CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVy biAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdH RVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5H OgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLwor CQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJ T05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0gg UEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFS Q0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJ Y2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQlj YXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQor CisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2Vu dGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0 aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFy Y2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5D VElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5k ICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFu ZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkK KwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVU VVJOX05VTEwoKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJDb2xsYXRpb25TdG10IChB TFRFUiBDT0xMQVRJT04pCisgKgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lEIGFuZCB0aGUgcGFy c2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlckNvbGxhdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVl ICAgICpzdG10OworCUhlYXBUdXBsZQljb2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9y bTsKKworCWNvbFR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJY29sRm9ybSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7 CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTExBVElPTiAle2lkZW50aXR5fU8g UkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJUmVsZWFz ZVN5c0NhY2hlKGNvbFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFMVEVSIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVu Y3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBK U09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUFsdGVyRnVuY3Rpb25TdG10ICpub2RlID0gKEFsdGVyRnVuY3Rpb25TdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlckZ1bmM7CisJT2JqVHJlZQkgICAqc2ln bjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlzdAkg ICAqcGFyYW1zID0gTklMOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNl bGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBm dW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAor CSAqCisJICogQUxURVIgRlVOQ1RJT04gJXtzaWduYXR1cmV9cyAle2RlZmluaXRpb246IH1zCisJ ICovCisJYWx0ZXJGdW5jID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEZVTkNUSU9OIiwgMCk7CisK KwkvKgorCSAqIEFMVEVSIEZVTkNUSU9OIGRvZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28gd2Ug Y2FuIHVzZSBjYXRhbG9nCisJICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpUcmVlCSAgICp0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAwKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICJ0eXBlIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Y0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1zID0gbGFwcGVuZChw YXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCXNpZ24gPSBuZXdfb2Jq dHJlZSgiIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIo JXthcmd1bWVudHM6LCB9cykiLCBwYXJhbXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJGdW5jLCAiJXtzaWduYXR1cmV9cyIsIHNpZ24pOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5h Y3Rpb25zKQorCXsKKwkJRGVmRWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCU9ialRyZWUJICAgKnRtcG9iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInZvbGF0aWxpdHkiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QShzdHJWYWwoZGVmZWwtPmFyZyksIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5Q VVQiIDoKKwkJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIsIDApOworCQl9CisJCWVsc2Ug aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlY3VyaXR5IikgPT0gMCkKKwkJeworCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJTRUNV UklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVha3Byb29mIikgPT0gMCkKKwkJeworCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJMRUFLUFJP T0YiIDogIk5PVCBMRUFLUFJPT0YiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJjb3N0IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkgImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJ CQkJCSBkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAicm93cyIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJST1dTIiwgMCk7CisJCQlpZiAoZGVmR2V0TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRfZmxvYXRfb2JqZWN0KHRtcG9iaiwgIiV7cm93c31uIiwKKwkJCQkJCQkJCWRlZkdldE51 bWVyaWMoZGVmZWwpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz ZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0 U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVB cmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2lu ZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzdXBwb3J0IikgPT0gMCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUIik7CisKKwkJCUFzc2VydChwcm9jRm9ybS0+ cHJvc3VwcG9ydCk7CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9y dCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxv b2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0g PSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1z IiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQs IDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBO VUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJeworCQkJY2hhciAqZm10 ID0gcHNwcmludGYoIlBBUkFMTEVMICVzIiwgc3RyVmFsKGRlZmVsLT5hcmcpKTsKKwkJCXRtcG9i aiA9IG5ld19vYmp0cmVlKGZtdCk7CisJCX0KKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0 ZXJGdW5jLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShw cm9jVHVwKTsKKworCXJldHVybiBhbHRlckZ1bmM7Cit9CisKKy8qCisgKiBkZXBhcnNlIGFuIEFM VEVSIC4uLiBTRVQgU0NIRU1BIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFy c2V0cmVlLAorCQkJCQkJCSAgT2JqZWN0QWRkcmVzcyBvbGRzY2hlbWEpCit7CisJQWx0ZXJPYmpl Y3RTY2hlbWFTdG10ICpub2RlID0gKEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqYWx0ZXJTdG10OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICppZGVu dGl0eTsKKwljaGFyCSAgICpuZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkc2NobmFtZTsKKwljaGFy CSAgICppZGVudDsKKworCW5ld3NjaGVtYSA9IG5vZGUtPm5ld3NjaGVtYTsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1B ICV7bmV3c2NoZW1hfUkKKwkgKi8KKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBlKSk7CisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWUo Zm10KTsKKworCS8qCisJICogU2luY2UgdGhlIGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxh Y2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVu dGl0eSByZXR1cm5zIHRoZSBvYmplY3QgbmFtZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdl ZCBzY2hlbWEuICBUaGUgb3V0cHV0IG9mIG91ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9y aWdpbmFsCisJICogc2NoZW1hIG5hbWUgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5h bWUgb2ZmIHRoZSBpZGVudGl0eSBzdHJpbmcKKwkgKiBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90 ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4g d2UgZG8gYmV0dGVyPworCSAqLworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJl c3MsIGZhbHNlKTsKKwlvbGRzY2huYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKG9sZHNjaGVtYS5v YmplY3RJZCk7CisJaWYgKCFvbGRzY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRzY2hlbWEub2JqZWN0SWQp OworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1b3RlX2lkZW50aWZpZXIob2xkc2NobmFt ZSksCisJCQkJCSBpZGVudGl0eSArIHN0cmxlbihxdW90ZV9pZGVudGlmaWVyKG5ld3NjaGVtYSkp KTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlclN0bXQsICIle2lkZW50aXR5fXMiLCBpZGVu dCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlclN0bXQsICJTRVQgU0NIRU1BICV7bmV3 c2NoZW1hfUkiLCBuZXdzY2hlbWEpOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBHUkFOVC9SRVZPS0UgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9HcmFudFN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUludGVybmFsR3Jh bnQgKmlzdG10OworCU9ialRyZWUJICAgKmdyYW50U3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hh cgkgICAqb2JqdHlwZTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lk CQkJY2xhc3NJZDsKKwlPYmpUcmVlCSAgICp0bXA7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFudC5p c3RtdDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4uLiBJ TiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQsIHRoZW4KKwkgKiB3ZSBuZWVkIG5vdCBkbyBhbnl0aGlu Zy4KKwkgKi8KKwlpZiAoaXN0bXQtPm9iamVjdHMgPT0gTklMKQorCQlyZXR1cm4gTlVMTDsKKwor CXN3aXRjaCAoaXN0bXQtPm9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCWNh c2UgT0JKRUNUX1RBQkxFOgorCQkJb2JqdHlwZSA9ICJUQUJMRSI7CisJCQljbGFzc0lkID0gUmVs YXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJ b2JqdHlwZSA9ICJTRVFVRU5DRSI7CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCW9ianR5cGUgPSAiRE9NQUlOIjsK KwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9G RFc6CisJCQlvYmp0eXBlID0gIkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJCWNsYXNzSWQgPSBG b3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZP UkVJR05fU0VSVkVSOgorCQkJb2JqdHlwZSA9ICJGT1JFSUdOIFNFUlZFUiI7CisJCQljbGFzc0lk ID0gRm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVO Q1RJT046CisJCQlvYmp0eXBlID0gIkZVTkNUSU9OIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVS ZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJCW9ianR5 cGUgPSAiUFJPQ0VEVVJFIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJ YnJlYWs7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkUiOwor CQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpF Q1RfTEFOR1VBR0U6CisJCQlvYmp0eXBlID0gIkxBTkdVQUdFIjsKKwkJCWNsYXNzSWQgPSBMYW5n dWFnZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJ CQlvYmp0eXBlID0gIkxBUkdFIE9CSkVDVCI7CisJCQljbGFzc0lkID0gTGFyZ2VPYmplY3RSZWxh dGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCW9ianR5cGUgPSAi U0NIRU1BIjsKKwkJCWNsYXNzSWQgPSBOYW1lc3BhY2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0eXBlID0gIlRZUEUiOworCQkJY2xhc3NJZCA9IFR5 cGVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQljYXNl IE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJb2JqdHlwZSA9ICIiOworCQkJY2xhc3NJZCA9IEludmFs aWRPaWQ7CisJCQllbG9nKEVSUk9SLCAiZ2xvYmFsIG9iamVjdHMgbm90IHN1cHBvcnRlZCIpOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFs dWUgJWQiLCBpc3RtdC0+b2JqdHlwZSk7CisJfQorCisJLyogR1JBTlQgVE8gb3IgUkVWT0tFIEZS T00gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlmbXQgPSBwc3ByaW50ZigiR1JBTlQiKTsK KwllbHNlCisJCWZtdCA9IHBzcHJpbnRmKCJSRVZPS0UiKTsKKworCWdyYW50U3RtdCA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMCk7CisKKwkvKiBidWlsZCBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3Jh bnQvcmV2b2tlICovCisJaWYgKGlzdG10LT5hbGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiQUxMIFBSSVZJTEVHRVMiLCAwKTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2UKKwl7CisJCWxpc3QgPSBOSUw7CisKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lOU0VSVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAm IEFDTF9TRUxFQ1QpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgi U0VMRUNUIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJaWYgKGlz dG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFD TF9UUlVOQ0FURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJU UlVOQ0FURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiUkVGRVJFTkNFUyIpKTsK KwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSSUdHRVIpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVFJJR0dFUiIpKTsKKwkJaWYgKGlzdG10LT5wcml2 aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5n X29iamVjdCgiRVhFQ1VURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdF KQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlVTQUdFIikpOwor CQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNSRUFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxl Z2VzICYgQUNMX0NSRUFURV9URU1QKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QoIlRFTVBPUkFSWSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NP Tk5FQ1QpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ09OTkVD VCIpKTsKKworCQlpZiAoIWlzdG10LT5pc19ncmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJ CQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gICJHUkFOVCBPUFRJT04gRk9SIiA6ICIiKTsK KworCQlpZiAoaXN0bXQtPmNvbF9wcml2cyAhPSBOSUwpCisJCXsKKwkJCUxpc3RDZWxsICAgKm9j ZWxsOworCisJCQlmb3JlYWNoKG9jZWxsLCBpc3RtdC0+Y29sX3ByaXZzKQorCQkJeworCQkJCUFj Y2Vzc1ByaXYgKnByaXYgPSBsZmlyc3Qob2NlbGwpOworCQkJCUxpc3QgICAqY29scyA9IE5JTDsK KworCQkJCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNv bHMpCisJCQkJeworCQkJCQlTdHJpbmcgKmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNl bGwpOworCisJCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdf b2JqZWN0KHN0clZhbChjb2xuYW1lKSkpOworCQkJCX0KKwkJCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcCwgIigle2NvbHM6LCB9cykiLCBjb2xzKTsKKworCQkJCWlmIChwcml2LT5wcml2X25hbWUg PT0gTlVMTCkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMi LCAiQUxMIFBSSVZJTEVHRVMiKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwgcHJpdi0+cHJpdl9uYW1lKTsKKworCQkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFw cGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0 KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7b2JqdHlwZX1zIiwgb2Jq dHlwZSk7CisKKwkvKiB0YXJnZXQgb2JqZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBo ZXJlICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsK KwkJT2lkCQlvYmppZCA9IGxmaXJzdF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsK KworCQlhZGRyLmNsYXNzSWQgPSBjbGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJ CWFkZHIub2JqZWN0U3ViSWQgPSAwOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50 aXR5fXMiLCAxLAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ ICAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3Qo Z3JhbnRTdG10LCAiJXtwcml2dGFyZ2V0OiwgfXMiLCBsaXN0KTsKKworCWlmIChpc3RtdC0+aXNf Z3JhbnQpCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGdyYW50U3RtdCwgIlRPIik7CisJZWxzZQor CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFudFN0bXQsICJGUk9NIik7CisKKwkvKiBsaXN0IG9m IGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVl cykKKwl7CisJCU9pZAkJZ3JhbnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3 X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRT dG10LCAiJXtncmFudGVlczosIH1zIiwgbGlzdCk7CisKKwkvKiB0aGUgd29yZGluZyBvZiB0aGUg Z3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4uLiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJ CQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisK KwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hh cgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9i amVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5v dCBleGlzdCIsIGlzdG10LT5ncmFudG9yX3VpZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIo KChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xl bmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlz X2dyYW50KQorCXsKKwkJaWYgKGlzdG10LT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQlh cHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2Nhc2NhZGV9cyIsICJDQVNDQURFIik7 CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7Y2FzY2FkZX1z IiwgIiIpOworCX0KKworCXJldHVybiBncmFudFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9y U3RtdCAqbm9kZSA9IChBbHRlck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJ ICAgKmFsdGVyb3A7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpj ZWxsOworCUxpc3QJCSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVy YXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRf dHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w ckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3By bmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJs ZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwll bHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJO T05FIik7CisKKwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9 VCkiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkp OworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKwor CQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+ b3BycmVzdCkpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7 CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5v cHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOwor CQl9CisKKwkJQXNzZXJ0KHRtcG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwg IlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7 CisKKwlyZXR1cm4gYWx0ZXJvcDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFU T1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAq YWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBT ZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21k LT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWls eSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAo Rm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7 YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJ CQkJCQkiVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJ CQkJImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklM OworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5 TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJ LyoKKwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29w ZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0i LCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9y IG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5p c0Ryb3ApCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9 TyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRo ZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9S IFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJ CWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZh bGlkT2lkKQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwg IkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOwor CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVh Y2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAq cHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCki LCAzLAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJ CQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUo cHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8q IEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNu J3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJ cHJvY1R1cDsKKwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5 cGVzOworCQkJTGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmpl Y3QpKTsKKwkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsK KwkJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlw cm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAw OyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJn OworCisJCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsK KwkJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsK KwkJCX0KKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBvYmosICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQor CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0K KworCWlmIChzdG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0s ICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQURE Iik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBs aXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAu Li4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVj dEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpu b2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJT dG10OworCWNoYXIJCSAgICpmbXQ7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRl bnRpdHl9cyBPV05FUiBUTyAlJXtuZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5vYmplY3RUeXBlKSk7CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRP YmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIp KTsKKworCXJldHVybiBvd25lclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2Vx U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBt b2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9i alRyZWUJCSp0bXBvYmo7CisJUmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJ c2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICop IHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRw dXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1 cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJ CXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQp OworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2sp OworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2Nr KTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAg IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2Vx dHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ug JXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VU U1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVF TkNFIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1E IiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVl KS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisJCU9iakVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJj YWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2Vx Zm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikg PT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3Jt LCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0s IGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVs c2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxz ZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVm bmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3QoYWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxh dGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAq IERlcGFyc2UgYW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBh IHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyVHlwZVNldFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3Rt dCAqYWx0ZXJUeXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSph bHRlclR5cGU7CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVh cFR1cGxlICAgdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3Jt X3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUo IkFMVEVSIFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50 aXR5fUQgU0VUIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5 cGVTZXRTdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAq KSBsZmlyc3QocGwpOworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3Jh Z2UoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJl Y2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBl LCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1R5cGVfVHlwbW9kX0luKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAo ZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9UeXBtb2RfT3V0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFs eXplKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJz dWJzY3JpcHQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRl clR5cGUsIHR5cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9w dGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5l d2VsbSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0 aW9uOiB9cykiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVy biBhbHRlclR5cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENS RUFURSBUWVBFIEFTKQorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0 ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5 cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl CSAgICpjb21wb3NpdGU7CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9y bTsKKwlSZWxhdGlvbgl0eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0 YWJsZWVsdHMgPSBOSUw7CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRo ZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZ UEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHlwdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUg JXUiLCBvYmplY3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0 dXApOworCXR5cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NT aGFyZUxvY2spOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJl bCkpOworCisJY29tcG9zaXRlID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJl bCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5v dCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGNvbXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJs ZWVsdHMpOworCisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxl YXNlU3lzQ2FjaGUodHlwdHVwKTsKKworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlG b3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7 CisKKwljb252cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFu dW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNp b24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNp b24pIEdFVFNUUlVDVChjb25UdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJj ZX1MIFRPICV7ZGVzdH1MCisJICogRlJPTSAle2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBu ZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8K KwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3Jt LT5jb25kZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKGNvbkZvcm0tPmNvbm5hbWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25u YW1lKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50 aXR5fUQiLCB0bXBPYmopOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3Nv dXJjZX1MIiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNv bmZvcmVuY29kaW5nKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0 fUwiLCAoY2hhciAqKQorCQkJCQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9l bmNvZGluZykpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlv bn1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2Uo Y29udnJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICog R2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVl czsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF IFRZUEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJdmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwg bm9kZS0+dmFscykKKwl7CisJCVN0cmluZyAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNl bGwpOworCisJCXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJW YWwodmFsKSkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVN ICgle3ZhbHVlczosIH1MKSIsIHZhbHVlcyk7CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgor ICogZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10CisgKgkJZGVwYXJzZSBhIENyZWF0ZUV4dGVu c2lvblN0bXQKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0 aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVFeHRlbnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0 cmVlOworCVJlbGF0aW9uICAgIHBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJ Rm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlCSAgICpleHRTdG10OworCU9ialRy ZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4 aXN0c31zICV7aWRlbnRpdHl9SSAle29wdGlvbnM6IH1zCisJICovCisKKwlwZ19leHRlbnNpb24g PSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0 VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0 ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lE ICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VU U1RSVUNUKGV4dFR1cCk7CisKKwlleHRTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBFWFRFTlNJ T04iKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle2lmX25vdF9leGlzdHN9 cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle25hbWV9SSIsIG5vZGUtPmV4dG5h bWUpOworCisJLyogTGlzdCBvZiBvcHRpb25zICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNl bGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmly c3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQor CQl7CisJCQkvKiBza2lwIHRoaXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxv dyAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwg Im5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJ T04gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVy c2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhv cHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDAp CisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24i LCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9S LCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQg dGhlIFNDSEVNQSBvcHRpb24gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2No ZW1hfUkiLAorCQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJ CQkgInNjaGVtYSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4 dEZvcm0tPmV4dG5hbWVzcGFjZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogZG9uZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoZXh0U3Rt dCwgIiV7b3B0aW9uczogfXMiLCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBleHRTdG10OworfQorCisvKgorICogSWYgYSBj b2x1bW4gbmFtZSBpcyBzcGVjaWZpZWQsIGFkZCBhbiBlbGVtZW50IGZvciBpdDsgb3RoZXJ3aXNl IGl0J3MgYQorICogdGFibGUtbGV2ZWwgb3B0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0Zkd09wdGlvbnMoTGlzdCAqb3B0aW9ucywgY2hhciAqY29sbmFtZSkKK3sKKwlPYmpU cmVlCSAgICp0bXA7CisKKwlpZiAoY29sbmFtZSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIiwKKwkJCQkJCQkgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIGNvbG5hbWUpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk9QVElPTlMiLCAw KTsKKworCWlmIChvcHRpb25zICE9IE5JTCkKKwl7CisJCUxpc3QJICAgKm9wdG91dCA9IE5JTDsK KwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGwsIG9wdGlvbnMpCisJCXsKKwkJ CURlZkVsZW0JICAgKmVsZW07CisJCQlPYmpUcmVlCSAgICpvcHQ7CisKKwkJCWVsZW0gPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCXN3aXRjaCAoZWxlbS0+ZGVmYWN0aW9uKQorCQkJ eworCQkJCWNhc2UgREVGRUxFTV9VTlNQRUM6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCIl e2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmlu ZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVm R2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQlj YXNlIERFRkVMRU1fU0VUOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7bGFiZWx9 SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVt LT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29s ZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVG RUxFTV9BREQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXtsYWJlbH1JICV7dmFs dWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5h bWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0t PmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxl bSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0RS T1A6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7bGFiZWx9SSIsIDEsCisJCQkJ CQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUpOworCQkJCQlicmVh azsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBkZWYgYWN0aW9uICVk IiwgZWxlbS0+ZGVmYWN0aW9uKTsKKwkJCQkJb3B0ID0gTlVMTDsKKwkJCX0KKworCQkJb3B0b3V0 ID0gbGFwcGVuZChvcHRvdXQsIG5ld19vYmplY3Rfb2JqZWN0KG9wdCkpOworCQl9CisKKwkJYXBw ZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXtvcHRpb246ICx9cykiLCBvcHRvdXQpOworCX0KKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0 dXJuIHRtcDsKK30KKworLyoKKyAqIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdAorICogICBEZXBhcnNl IGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdp dmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICog cmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZkd1N0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRmR3U3RtdCAqbm9kZSA9IChDcmVhdGVGZHdTdG10 ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0 YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCisJT2JqVHJlZQkgICAqY3JlYXRl U3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRh V3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNo U3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgJXUiLCBv YmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdF VFNUUlVDVChmZHdUdXApOworCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg Rk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKiBhZGQg SEFORExFUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3aGFuZGxlciA9PSBJbnZhbGlkT2lk KQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCWVsc2UKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJ CSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3 aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtoYW5k bGVyfXMiLCB0bXApOworCisJLyogYWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9y bS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRPaWQpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJO TyBWQUxJREFUT1IiLCAwKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFM SURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAidmFsaWRhdG9yIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCisJ LyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdP cHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXAp OworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRl U3RtdDsKK30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJGZHdTdG10CisgKiAgRGVwYXJzZSBhbiBB bHRlckZkd1N0bXQgKEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGEg ZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gdGhl CisgKiBKU09OIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlBbHRlckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJGZHdTdG10ICopIHBhcnNl dHJlZTsKKwlIZWFwVHVwbGUJCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVy IGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOworCU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwlMaXN0 CSAgICpmZHdfb3B0aW9ucyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmVsID0gdGFi bGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJ CQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24t ZGF0YSB3cmFwcGVyICV1Iiwgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVp Z25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCWFsdGVyU3RtdCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAor CQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3 bmFtZSkpOworCisJLyoKKwkgKiBJdGVyYXRlIHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQg Y2hhbmdlZCwgYnV0IHVzZSBjYXRhbG9nIGFzIGJhc2lzCisJICogZm9yIG5ldyB2YWx1ZXMuCisJ ICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtCSAg ICplbGVtOworCQlPYmpUcmVlCSAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKwor CQlpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsK KwkJCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIg PT0gSW52YWxpZE9pZCkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDAp OworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQo ZmR3X29wdGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBn X3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8q IGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09 IEludmFsaWRPaWQpCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDAp OworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtw cm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBw ZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8q IEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBpZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KGFsdGVyU3RtdCwgIiV7ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisKKwkv KiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGFsdGVyU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsK Kwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGFsdGVyU3Rt dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQK KyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkgICAqcmFuZ2U7CisJT2JqVHJl ZQkgICAqdG1wOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFu Z2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOworCUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNj YW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJs ZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5p dCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFuZ2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0 cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmFuZ2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJ CQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3JtID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChy YW5nZVR1cCk7CisKKwlyYW5nZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOwor CXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0 SWQpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJhbmdlLCAiJXtpZGVudGl0eX1EIEFTIFJBTkdF IiwgdG1wKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7 CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEUgPSAle3R5cGV9RCIsCisJCQkJCQkgMiwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBl IiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9u LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlm IChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nc3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkg IHJhbmdlRm9ybS0+cm5nc3Vib3BjKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVf T1BDTEFTUyA9ICV7b3BjbGFzc31EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0 LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisKKwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5n ZUZvcm0tPnJuZ2NvbGxhdGlvbikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY29s bGF0aW9uKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9u fUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxh dGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZp bml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisKKwkvKiBDQU5PTklDQUwgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9u aWNhbCkpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKTsKKwkJdG1w ID0gbmV3X29ianRyZWVfVkEoIkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJ ICJjYW5vbmljYWwiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVu ZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBF X0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YmRpZmYpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU1VCVFlQRV9ESUZGID0gJXtzdWJ0eXBlX2RpZmZ9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5 cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRl ZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9v YmplY3QocmFuZ2UsICIoJXtkZWZpbml0aW9uOiwgfXMpIiwgZGVmaW5pdGlvbik7CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCXJldHVybiByYW5nZTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVt U3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlm aWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBl LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVu dW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICphbHRlckVudW07CisKKwlhbHRlckVu dW0gPQluZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJ aWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVudW0s ICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9u b3RfZXhpc3RzfXMiLAorCQkJCQkJCW5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle3Zh bHVlfUwiLCBub2RlLT5uZXdWYWwpOworCisJCWlmIChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJ eworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9 cyIsCisJCQkJCQkJCW5vZGUtPm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUt Pm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICJSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9k ZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1 ZX1MIiwKKwkJCQkJCQkgbm9kZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gYWx0ZXJFbnVtOwor fQorCisvKgorICogRGVwYXJzZSBBTFRFUiBFWFRFTlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0g KEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24gICAgcGdfZXh0ZW5z aW9uOworCUhlYXBUdXBsZSAgIGV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOwor CU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0 ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCAgb2Jq ZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7 CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQg VVBEQVRFIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFtZSkpKTsKKworCWZvcmVhY2goY2VsbCwgbm9k ZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJ eworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBP YmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAi dW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHN0bXQsICIle29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShw Z19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoK KyAqIEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0CisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUsCisJCQkJCQkJCSAgIE9iamVjdEFkZHJlc3Mgb2JqZWN0QWRkcmVzcykK K3sKKwlBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvbkNv bnRlbnRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqc3RtdDsKKwljaGFyCSAgICpm bXQ7CisKKwlBc3NlcnQobm9kZS0+YWN0aW9uID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7 CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgRVhURU5TSU9OICUle2V4dGlkZW50aXR5fUkgJXMg JXMgJSV7b2JqaWRlbnRpdHl9cyIsCisJCQkJICAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIg OiAiRFJPUCIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSkpOworCisJ c3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAgbm9kZS0+ZXh0bmFtZSwKKwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNl KSk7CisKKwlyZXR1cm4gc3RtdDsKK30KKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10 LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlm aWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0g KENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBU dXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVh dGVDYXN0OworCWNoYXIJICAgKmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0 UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3Jt X3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIENSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkg JXttZWNoYW5pc219cyAle2NvbnRleHR9cworCSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJ CQkJCQkJCTIsICJzb3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5 cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9y bS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVs c2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl Q2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJ CU9ialRyZWUJICAgKnRtcG9iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxl CWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5j VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1 bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJp bmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlx dW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnBy b25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkp OworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZp ZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5D VElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5 cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3Qs ICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7 CisJfQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBM SUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09F UkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVh azsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIs IG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwg Y29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIGNyZWF0ZUNhc3Q7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVk IHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBh bHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVT dG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxlU3Rt dDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0CSAg ICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlw ZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFz c2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3Bl bihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRl eHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJ CQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRf cmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOwor CQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoK KwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgor CQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRF X1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFr OworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBU QUJMRSI7CisJCQlicmVhazsKKworCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRh YmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQg JWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKwkg Ki8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRhYmxl U3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJsZVN0 bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0 ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0 ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9IChB bHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOworCisJ CUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJjbWQt PnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRDb2x1 bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21l d2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJ dHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJ CQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRzdHIg PSBwc3ByaW50ZigiQUREICVzICUle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10 c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAor CQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhT dG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0g c3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIElu ZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJ CQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJ aWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENP TlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkg KiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAq LworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUki LCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1 c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0 cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle2NvbnN0cmFpbnRfdHlwZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJ CSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiVVNJTkcgSU5ERVggJXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJCSBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtkZWZlcnJhYmxlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJ ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle2luaXRfZGVmZXJyZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPwor CQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7 CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ CX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFk ZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFj ZVJlbE9wdGlvbnM6CisJCQkJLyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9u czsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29s dW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBk byBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlp ZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJ CXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0X3JlbDsKKwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7 CisJCQkJCUF0dHJOdW1iZXIJYXR0bm87CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlkcGNvbnRleHRfcmVsID0gZGVw YXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJ CQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNo ZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRu byA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJ CQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJ CQkJCSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsLCBhdHRubywKKwkJCQkJCQkJCQkJCQkJ CQkgIGRwY29udGV4dF9yZWwsCisJCQkJCQkJCQkJCQkJCQkJICBOVUxMKSk7CisJCQkJCVJlbGVh c2VTeXNDYWNoZShhdHRydHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVs bDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg U0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg bm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJF U1NJT04iLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVz c2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAor CQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiOiAiIik7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJ c0Eoc3ViY21kLT5kZWYsIEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RB VElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNz IiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21k LT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTFVNTiAle2NvbHVtbn1uIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJ CQkJCQkJIDMsCisJCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlz dGljcyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVt LAorCQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJ IGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJ ICBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNF VCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgc3RvcmFnZSIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAic3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkgc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9TZXRDb21wcmVzc2lvbjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJp bmcpKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIENPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfXMiLAorCQkJCQkJCQkJIDMs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJ CQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJ ICJjb21wcmVzc2lvbl9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgo U3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cENvbHVtblJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BDb2x1bW46CisJCQkJZm10c3RyID0gcHNw cmludGYoIkRST1AgJXMgJSV7Y29sdW1ufUkiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJV VEUiIDogIkNPTFVNTiIpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJ CQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9 IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpU eXBlQm9vbCwgc3ViY21kLT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBvYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0FkZEluZGV4OgorCQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9i amVjdElkOworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJ CQljb25zdCBjaGFyICppZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3Rt dCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJ CQlicmVhazsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJ CQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJY21kLT5k LmFsdGVyVGFibGUub2JqZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAz LAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJ CQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkgImRl ZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2Uo aWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9B ZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50UmVjdXJzZToKKwkJCQl7CisJ CQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJ CQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJ aXNudWxsOworCQkJCQlIZWFwVHVwbGUJdHVwOworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25z dHJhaW50ICpjb25zdHI7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWlu dCkpOworCQkJCQljb25zdHIgPSAgY2FzdE5vZGUoQ29uc3RyYWludCwgc3ViY21kLT5kZWYpOwor CisJCQkJCWlmICghY29uc3RyLT5za2lwX3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJCQkJCXR1cCA9 IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29uc3RyT2lkKSk7 CisKKwkJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJCQkJCQkJY2hh cgkgICAqY29uYmluOworCisJCQkJCQkJLyogRmV0Y2ggY29uc3RyYWludCBleHByZXNzaW9uIGlu IHBhcnNldHJlZSBmb3JtICovCisJCQkJCQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRyKENPTlNUUk9J RCwgdHVwLAorCQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29uYmluLCAmaXNudWxs KTsKKworCQkJCQkJCWlmICghaXNudWxsKQorCQkJCQkJCXsKKwkJCQkJCQkJY29uYmluID0gVGV4 dERhdHVtR2V0Q1N0cmluZyh2YWwpOworCQkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHN0 cmluZ1RvTm9kZShjb25iaW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUo dHVwKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB REQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJ CQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlPaWQJCWNvbnN0 ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25z dHJhaW50ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFs dGVyZWQsIHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9p ZCkpCisJCQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtk ZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLAorCQkJCQkJCQkJCSA0LAorCQkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkg Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJ CQkJCQkJCQkJICJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+ZGVm ZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJCQkJICJp bml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgYy0+aW5pdGRlZmVycmVk ID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnRSZWN1cnNl OgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJ ICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNlIEFUX0Ryb3BD b25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQg JXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlw ZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwp OworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVmOwor CisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0g MV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQo SXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgK KwkJCQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1u fUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRS SUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBy ZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtj b2xsYXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQlmbXRzdHIgPSBwc3By aW50ZigiQUxURVIgJXMgJSV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSIsCisJCQkJCQkJCQkgIGlz dHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0 ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQkJLyogQWRkIHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICIle2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5 cG1vZCkpOworCisJCQkJCS8qIEFkZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJ CQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlk KGF0dC0+YXR0Y29sbGF0aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJlZSAqY29sbG5hbWU7CisK KwkJCQkJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50 IiwgZmFsc2UpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2NvbGxhdGlv bn1zIiwgdG1wb2JqMik7CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0 aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgor CQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0 bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUK KwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4g dXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRy ZWUoIlVTSU5HIik7CisJCQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJ CQlEYXR1bQlkZXBhcnNlZDsKKwkJCQkJCQljaGFyICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBy cyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIg PSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBE aXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5n R2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCQkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Np b259cyIsCisJCQkJCQkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCQkJ CQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJl c2VudCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dXNp bmd9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0 eXBlLCBhZGQgdGhlIENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsK KwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ0FTQ0FERSIpOworCQkJCQkJaWYgKHN1YmNt ZC0+YmVoYXZpb3IgIT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJ YnJlYWs7CisKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNP cHRpb25zOgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQt PmRlZiwKKwkJCQkJCQkJCQkgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgor CQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dO RVIgVE8gJXtvd25lcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJj aGFuZ2Ugb3duZXIiLAorCQkJCQkJCQkJICJvd25lciIsICBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJIGdldF9yb2xlc3BlY19uYW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9DbHVzdGVyT246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNM VVNURVIgT04gJXtpbmRleH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJjbHVzdGVyIG9uIiwKKwkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJTRVQgTE9HR0VEIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJz ZXQgbG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRHJvcE9pZHM6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBX SVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3 aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9k OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vz c19tZXRob2R9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFj Y2VzcyBtZXRob2QiLAorCQkJCQkJCQkJICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNl IiwKKwkJCQkJCQkJCSAidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRf UmVzZXRSZWxPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIi LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBBTFdBWVMgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlUmVwbGljYVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2Vy IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBU UklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxs OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUg VFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNh YmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1 bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwg MiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJ CQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBSRVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxl UnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAor CQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJO TyBJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJCQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7 dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2Yi LAorCQkJCQkJCQkJICJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1Qg T0YiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJREVOVElUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNh SWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJ CWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7aWRlbnR9cyIsICJGVUxMIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBM SUNBX0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2lkZW50fXMiLCAiTk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElD QV9JREVOVElUWV9JTkRFWDoKKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcg SU5ERVggJXtpbmRleH1JIiwgMSwKKwkJCQkJCQkJCQkJICAiaW5kZXgiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCQkgICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5h bWUpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgdG1w b2JqMik7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlUm93U2VjdXJpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBS T1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNh YmxlUm93U2VjdXJpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9X IExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk aXNhYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJ CQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9u cygoTGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJ CWNhc2UgQVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB VFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJICJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlv bkJvdW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNl IEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNI IFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9u X2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9u RmluYWxpemU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04g JXtwYXJ0aXRpb25faWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkgInBh cnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3Vi LT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50 aXR5OgorCQkJCXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxp ZDsKKwkJCQkJT2JqVHJlZQkqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29s dW1uRGVmICopIHN1YmNtZC0+ZGVmOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIDIsCisJCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9 IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlz ZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0 bnVtLCB0cnVlKTsKKwkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVs aWQsIGNvbGRlZi0+aWRlbnRpdHksIGZhbHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICJpZGVudGl0eV9jb2x1bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtCSpkZWZl bDsKKwkJCQkJY2hhcgkJaWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlCSAgICpzZXFkZWY7CisJ CQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAorCQkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAoc3Vi Y21kLT5kZWYpCisJCQkJCXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNtZC0+ ZGVmOworCisJCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJCWRl ZmVsID0gbGluaXRpYWxfbm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBkZWZH ZXRJbnQzMihkZWZlbCk7CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRl bnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJ CXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1 ZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMi LCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVu dGl0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgRFJPUCBJREVOVElUWSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25vdF9l eGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAi Iik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5z dXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUp OworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNh dGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMg YmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJ CSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcnRpb25zIHdpbGwgYmUgZXhlY3V0ZWQgdHdpY2UgYW5k IGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwgd2UgZG9uJ3Qga25vdyB3 aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkgdGhlc2UgRERML0RNTCBh cmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZworCQkgKiBzdWNoIGZ1bmN0 aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhlIHRhYmxlcyBhY2Nlc3Nl ZAorCQkgKiBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4aXN0IG9uIHRoZSBzdWJz Y3JpYmVyLXNpZGUuCisJCSAqLworCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoKE5v ZGUgKikgZXhwcnMpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJybXNnKCJBTFRFUiBUQUJMRSBjb21tYW5k IHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIikpKTsKKworCQkv KgorCQkgKiBDbGVhbiB0aGUgbGlzdCBhcyB3ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGVyZSBpcyBu byB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbi4KKwkJICovCisJCWxpc3RfZnJlZShleHBycyk7CisJ CWV4cHJzID0gTklMOworCX0KKworCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWlmIChsaXN0X2xlbmd0aChzdWJjbWRzKSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWFw cGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNt ZHMpOworCisJcmV0dXJuIGFsdGVyVGFibGVTdG10OworfQorCisvKgorICogU3Vicm91dGluZSBm b3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5v ZGUgd2l0aGluIGEgcmVndWxhciAobm9uIHR5cGVkKSB0YWJsZSBjcmVhdGlvbi4KKyAqCisgKiBO T1QgTlVMTCBjb25zdHJhaW50cyBpbiB0aGUgY29sdW1uIGRlZmluaXRpb24gYXJlIGVtaXR0ZWQg ZGlyZWN0bHkgaW4gdGhlCisgKiBjb2x1bW4gZGVmaW5pdGlvbiBieSB0aGlzIHJvdXRpbmU7IG90 aGVyIGNvbnN0cmFpbnRzIG11c3QgYmUgZW1pdHRlZAorICogZWxzZXdoZXJlICh0aGUgaW5mbyBp biB0aGUgcGFyc2Ugbm9kZSBpcyBpbmNvbXBsZXRlIGFueXdheS4pLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250 ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2Fs dGVyLCBMaXN0ICoqZXhwcnMpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAg KnRtcG9iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhl YXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5 cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19u b3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5z IHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAq IFhYWCBtYXliZSBpdCBpcyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxz ZSIgb3Igc29tZSBzdWNoPworCSAqLworCWlmICghY29sZGVmLT5pc19sb2NhbCkKKwkJcmV0dXJu IE5VTEw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYt PmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0 aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3Jt X3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rj b2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0 eXBjb2xsYXRpb24pOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1l fUkgJXtjb2x0eXBlfVQgJXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cwor CSAqICV7Y29sbGF0aW9ufXMKKwkgKi8KKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1l fUkgJXtjb2x0eXBlfVQiLCAzLAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVt biIsCisJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJ CQkJImNvbHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBl KHR5cGlkLCB0eXBtb2QpKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJDT01QUkVTU0lPTiIpOworCWlmIChjb2xkZWYtPmNvbXByZXNzaW9uKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgY29sZGVm LT5jb21wcmVzc2lvbik7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwg IiV7Y29tcHJlc3Npb25fbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7 Y29tcHJlc3Npb259cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFU RSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICpjb2xs bmFtZTsKKworCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgICB0eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjb2x1bW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCWlmICghY29t cG9zaXRlKQorCXsKKwkJT2lkCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBF bWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNh bm5vdCB0cnVzdAorCQkgKiBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRo YXQgYml0IGlzIGFsc28gc2V0IHdoZW4KKwkJICogcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7 IGFuZCB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwKKwkJICogY29uc3RyYWludCBpbiB0aGF0 IGNhc2UsIHVubGVzcyBleHBsaWNpdGVseSBzcGVjaWZpZWQuICBUaGVyZWZvcmUsCisJCSAqIHdl IHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8g ZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0IGFueXRoaW5nLgorCQkgKiAo Rm9ydHVuYXRlbHksIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGNhbm5vdCBiZSB0YWJsZSBjb25zdHJh aW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBjYXNlcywgd2UgYWxzbyBhZGQg YSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJ ICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25z dHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZp cnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQor CQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJfQorCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5p c19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjb2x1bW4sICIle25vdF9udWxsfXMiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1Qg TlVMTCIgOiAiIik7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYg KGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJCXsKKwkJCWNoYXIgKmRlZnN0cjsKKworCQkJZGVmc3Ry ID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAor CQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2RlZmF1bHR9cyIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCQkvKiBJREVOVElUWSBD T0xVTU4gKi8KKwkJaWYgKGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAlhdHRubyA9IGdl dF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJCQlzZXFyZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQl0bXBvYmogPSBkZXBh cnNlX0NvbHVtbklkZW50aXR5KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBpc19hbHRlcik7 CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0 bXBvYmopOworCisJCS8qIEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBvYmog PSBuZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5l cmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIgKmRlZnN0 cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLCBkZWZz dHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgdG1wb2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisK KwlyZXR1cm4gY29sdW1uOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRFIFRBQkxF IE9GIGRlcGFyc2luZy4KKyAqCisgKiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEg dHlwZWQgdGFibGUgY3JlYXRpb24uCVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxh ciBjYXNlLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlv biwKKyAqIGNvbGxhdGlvbiwgb3IgZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRo aW5nIGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAq IEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNz ZWQgZWxzZXdoZXJlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90 eXBlZChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRl ZikKK3sKKwlPYmpUcmVlCSpjb2x1bW4gPSBOVUxMOworCU9ialRyZWUJKnRtcG9iajsKKwlPaWQJ CQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVw OworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0 eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwlhdHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBj b2xkZWYtPmNvbG5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9m IHJlbGF0aW9uICV1IiwKKwkJCSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9 IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0 eXBtb2Rjb2xsKHJlbGlkLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBt b2QsICZ0eXBjb2xsYXRpb24pOworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVj bGFyYXRpb24uICBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRp bmcgYSBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4gcmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3Rf bnVsbC4KKwkgKiAoVGhpcyByb3V0aW5lIGlzIG5ldmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikK KwkgKi8KKwlzYXdfbm90bnVsbCA9IGZhbHNlOworCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25z dHJhaW50cykKKwl7CisJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJz dChjZWxsKTsKKworCQlpZiAoY29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7 CisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2F3 X25vdG51bGwgJiYgIWF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUo YXR0clR1cCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMu CisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyIs IDIsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChjb2x1bW4sICIle25vdF9udWxsfXMiLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBO VUxMIiA6ICIiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0 dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFyICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVs YXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJ CQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2RlZmF1bHR9cyIsIGRlZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1u LCAiJXtkZWZhdWx0fXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBHZW5lcmF0ZWQgY29sdW1ucyBh cmUgbm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFyZSBkb25lLgorCSAqLwor CisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5LgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBp ZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjb2x1bW47CisJT2Jq VHJlZQkgICAqaWRlbnRvYmo7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVs OworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkg ICAqb2JqZm10OworCisJY29sdW1uID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKCFPaWRJc1Zh bGlkKHNlcXJlbGlkKSkKKwl7CisJCWFwcGVuZF9ib29sX29iamVjdChjb2x1bW4sICJwcmVzZW50 IiwgZmFsc2UpOworCQlyZXR1cm4gY29sdW1uOworCX0KKworCWlmIChhbHRlcl90YWJsZSkKKwl7 CisJCWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMi OworCX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0g IiV7b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlkZW50b2JqID0gbmV3X29ianRyZWUo aWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJBTFdBWVMiKTsKKwll bHNlIGlmIChpZGVudGl0eSA9PSAgQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJCWSBERUZBVUxUIik7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QoaWRlbnRvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJ YXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV90eXBlfXMiLCBpZGVudG9i aik7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxp ZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlz ZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0 YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVt ZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoTlVMTCwg c2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX0N5Y2xlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJs ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoTlVMTCwg c2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2Vf U2VxX01heHZhbHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFi bGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoTlVMTCwg c2VxZGF0YSkpOworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJl ICovCisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29sdW1uLCAi JXtzZXFfZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2Jq ZWN0KGNvbHVtbiwgIiggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY29sdW1uOworfQorCisv KgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQp Cit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUJ ICAgKmNvbHNldDsKKwljaGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1 YnR5cGUgPT0gQVRfUmVzZXRPcHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAq CisJICogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykK KwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBS RVNFVCAiOworCWVsc2UKKwkJZm10ID0gIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAiOwor CisJY29sc2V0ID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYp CisJeworCQlEZWZFbGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7CisKKwkJZWxlbSA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0s IGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0 KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QoY29sc2V0LCAi KCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIGNvbHNldDsKK30KKworLyoKKyAq IERlcGFyc2UgdGhlIENSRUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBh bmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxv YiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCU9ialRyZWUJICAgKmNyZWF0ZURvbWFpbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJSGVh cFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwlMaXN0CSAgICpjb25zdHJh aW50czsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9 IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5 bnRheAorCSAqCisJICogQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtu b3RfbnVsbH1zICV7Y29uc3RyYWludHN9cworCSAqICV7Y29sbGF0aW9ufXMKKwkgKi8KKwljcmVh dGVEb21haW4gPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVEb21haW4sCisJCQkJCQkgIkRPTUFJTiAle2lkZW50aXR5fUQgQVMiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgb2JqZWN0SWQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sCisJCQkJ CQkgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBi YXNldHlwZSwgdHlwRm9ybS0+dHlwdHlwbW9kKSk7CisKKwlpZiAodHlwRm9ybS0+dHlwbm90bnVs bCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwg Ik5PVCBOVUxMIik7CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVEb21haW4s ICIle25vdF9udWxsfXMiLCAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRz KE5JTCwgSW52YWxpZE9pZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJ eworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwllbHNlCisJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCIle2VsZW1lbnRzOiwgfXMiLCAxLAorCQkJCQkJCSAiZWxlbWVudHMiLCBPYmpUeXBlQXJy YXksIGNvbnN0cmFpbnRzKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVEb21haW4sICIl e2NvbnN0cmFpbnRzfXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExB VEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCXsKKwkJT2Jq VHJlZSAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwRm9ybS0+dHlwY29sbGF0 aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFt ZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb2xsYXRpb259 cyIsIHRtcG9iaik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBjcmVh dGVEb21haW47Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVB VEUgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1 bmN0aW9uU3RtdCAqbm9kZSA9IChDcmVhdGVGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmNyZWF0ZUZ1bmM7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCURhdHVtCQl0bXBk YXR1bTsKKwljaGFyCSAgICpzb3VyY2U7CisJY2hhcgkgICAqcHJvYmluOworCUxpc3QJICAgKnBh cmFtczsKKwlMaXN0CSAgICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJ ICAgKnR5cGVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVm OworCUxpc3RDZWxsICAgKnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7 CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAg KnR5cGFycmF5OworCU9pZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zv cm07CisJaW50CQkJaTsKKwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWJvb2wJCWlz bnVsbDsKKwlib29sCQlpc2Z1bmN0aW9uOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICov CisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNv cnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKExBTkdPSUQsIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo bGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFuZ3Vh Z2Ugd2l0aCBPSUQgJXUiLAorCQkJIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChG b3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWlu ZSB1c2VmdWwgdmFsdWVzIGZvciBwcm9zcmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9i aW4KKwkgKiBiZWluZyBlaXRoZXIgTlVMTCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEg dmFsaWQgdmFsdWUuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwg cHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAo aXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQg JXUiLCBvYmplY3RJZCk7CisJc291cmNlID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7 CisKKwkvKiBEZXRlcm1pbmUgYSB1c2VmdWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19w cm9jX3Byb2JpbiwgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJcHJvYmluID0gTlVMTDsKKwll bHNlCisJeworCQlwcm9iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYg KHByb2JpblswXSA9PSAnXDAnIHx8IHN0cmNtcChwcm9iaW4sICItIikgPT0gMCkKKwkJCXByb2Jp biA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRF ICV7b3JfcmVwbGFjZX1zIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90 eXBlfXMKKwkgKiBMQU5HVUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2lu ZG93fXMgJXt2b2xhdGlsaXR5fXMKKwkgKiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29m fXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmluZXJ9cworCSAqICV7Y29zdH1zICV7cm93c31z ICV7c3VwcG9ydH1zICV7c2V0X29wdGlvbnM6IH1zIEFTICV7b2JqZmlsZX1MLAorCSAqICV7c3lt Ym9sfUwKKwkgKi8KKwljcmVhdGVGdW5jID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBu b2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1 Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJ ICogZnVuY3Rpb24ncyBwZ19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJh bWV0ZXIgbGlzdCBsZW5ndGgsCisJICogdGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0 aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlIE9JRCBmcm9tCisJICogcHJvYXJndHlwZXM7IG90 aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hpY2ggaXMKKwkgKiBh IGJpdCBtb3JlIGludm9sdmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9jKGxpc3RfbGVuZ3Ro KG5vZGUtPnBhcmFtZXRlcnMpICogc2l6ZW9mKE9pZCkpOworCWlmIChsaXN0X2xlbmd0aChub2Rl LT5wYXJhbWV0ZXJzKSA+IHByb2NGb3JtLT5wcm9uYXJncykKKwl7CisJCURhdHVtCWFsbHR5cGVz OworCQlEYXR1bSAgKnZhbHVlczsKKwkJYm9vbCAgICpudWxsczsKKwkJaW50CQluZWxlbXM7CisK KwkJYWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJ ICAgQW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVzLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkK KwkJCWVsb2coRVJST1IsICJOVUxMIHByb2FsbGFyZ3R5cGVzLCBidXQgbW9yZSBwYXJhbWV0ZXJz IHRoYW4gYXJncyIpOworCQlkZWNvbnN0cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxs dHlwZXMpLAorCQkJCQkJICBPSURPSUQsIDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAm bnVsbHMsICZuZWxlbXMpOworCQlpZiAobmVsZW1zICE9IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFt ZXRlcnMpKQorCQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJ CWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJ dHlwYXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkg PCBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsgaSsrKQorCQkJIHR5cGFycmF5W2ldID0g cHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJl IGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVwYXJzZWQgZXhwcmVz c2lvbiBhcworCSAqIGEgbGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhlbSB0byBlYWNoIGFy Z3VtZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NU dXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAmaXNudWxsKTsKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZhdWx0cyhEYXR1bUdl dFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZhdWx0cyk7CisJfQor CWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxMOworCX0KKworCS8q CisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUgcGFyc2V0cmVlIHRv IGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsK Kwl0eXBudW0gPSAwOworCWZvcmVhY2goY2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1 bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2Vs bCk7CisJCU9ialRyZWUJICAgKnBhcmFtb2JqOworCQlPYmpUcmVlCSAgICpkZWZhdWx0dmFsOwor CQlPYmpUcmVlCSAgICpuYW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVy IGluZGljYXRlcyBlbmQgb2YgaW5wdXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBh cmFtZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJ ICogaGVyZSwgYnV0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxp c3Qgc28gdGhhdAorCQkgKiB3ZSBjYW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJl bG93LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsK KwkJCXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZl cmJvc2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UICV7 ZGVmYXVsdH1zCisJCSAqCisJCSAqIE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJl LCBub3QgYW4gaWRlbnRpZmllcjsgdGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFu IGFic2VudCBwYXJhbWV0ZXIgbmFtZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5n LCBub3QgIiIsIHdoaWNoIGlzIHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJ CSAqICV7bmFtZX1JIGhlcmUuICBTbyB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlv biB0byBhbGxvdyB1cworCQkgKiB0byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkg Ki8KKwkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHBhcmFtb2JqLCAiJXttb2RlfXMiLAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFN X0lOID8gIklOIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9V VCIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6 CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMi IDoKKwkJCQkJCQkgIklOIik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9u IG9mICJuYW1lIiBvY2N1cnMgaGVyZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5u YW1lID8gcGFyYW0tPm5hbWUgOiAiTlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1l LCAicHJlc2VudCIsCisJCQkJCQkgICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRl ZmF1bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQo cGFyYW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFyICpleHByOworCisJCQlpZiAoY3VyZGVmID09 IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7 CisJCQlleHByID0gbGZpcnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRl ZmF1bHR2YWwsICIle3ZhbHVlfXMiLCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRz LCBjdXJkZWYpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFs LCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwg IiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVt KytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0 fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVj dF9vYmplY3QocGFyYW1vYmopKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtp ZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJICBvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAi KCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd1bWVudHM6LCB9cyIsIHBh cmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJaXNmdW5jdGlv biA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNm dW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7 c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlRnVuYywgIlBST0NFRFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKworCS8qCisJICog QSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9G XSBzb21lX3R5cGUsIG9yCisJICogYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxs IHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdyBhCisJICogdGFibGUgcGFyYW0gYWJvdmUg d2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFt cyA9PSBOVUxMKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJ ICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle3NldG9mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0c2V0 ID8gIlNFVE9GIiA6ICIiKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZXR0 eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlw ZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9i alRyZWUJICAgKnBhcmFtb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRSIs IDEsCisJCQkJCQkJICJyZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIpOworCQlm b3IgKDsgdGFibGVfcGFyYW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5vZGUtPnBh cmFtZXRlcnMsIHRhYmxlX3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJh bSA9IGxmaXJzdCh0YWJsZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIi KTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfUkiLCBwYXJhbS0+ bmFtZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKwkJ CXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmop KTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cmV0dHlwZXM6LCB9 cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZUZ1bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcG9iaik7CisK KwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVFJBTlNG T1JNIik7CisKKwludHlwZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMp OworCWZvciAoaSA9IDA7IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJ CXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wb2JqKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1w b2JqKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xh bmd1YWdlfUkiLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChp c2Z1bmN0aW9uKQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2lu ZG93fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJX SU5ET1ciIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xh dGlsaXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVf Vk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Zv bGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVU QUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3BhcmFsbGVs X3NhZmV0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVM X1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJv cGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBS RVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVj dChjcmVhdGVGdW5jLCAiJXtsZWFrcHJvb2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFr cHJvb2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl RnVuYywgIiV7c3RyaWN0fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJ CQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBO VUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c2Vj dXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJ ICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf VkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwK KwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiUk9XUyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ib29s X29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNlCisJCQlhcHBlbmRfZmxv YXRfb2JqZWN0KHRtcG9iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXBvYmopOworCisJCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+ cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBX ZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRu J3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0 aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9u X25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlw ZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRf Tk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1 cHBvcnR9cyIsIHRtcG9iaik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQor CXsKKwkJRGVmRWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0 U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyICp2 YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBvYmogPSBkZXBh cnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQkJc2V0 cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCX0KKwl9CisJ YXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZXRfb3B0aW9uczogfXMiLCBzZXRz KTsKKworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2b2lkKSBTeXNDYWNo ZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3NxbGJvZHksICZpc251 bGwpOworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlkICYmICFpc251bGwp CisJeworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJ CXByaW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlvbn1zIiwgYnVmLmRhdGEpOworCX0KKwll bHNlIGlmIChwcm9iaW4gPT0gTlVMTCkKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZUZ1bmMsICJBUyAle2RlZmluaXRpb259TCIsCisJCQkJCQkJIHNvdXJjZSk7CisJfQorCWVsc2UK Kwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle29iamZpbGV9TCIs IHByb2Jpbik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIsICV7c3ltYm9s fUwiLCBzb3VyY2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNl U3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gY3JlYXRlRnVuYzsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7 CisJT2lkCQkJb3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzLm9iamVjdElkOworCUhl YXBUdXBsZSAgIG9wY1R1cDsKKwlIZWFwVHVwbGUgICBvcGZUdXA7CisJRm9ybV9wZ19vcGZhbWls eSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCU9ialRyZWUJICAgKnN0bXQ7 CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2Vs bDsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVh dGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxM OworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShv cGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOwor CW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1 cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2Zh bWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsK KworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBPUEVSQVRPUiBDTEFT UyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKwkgKiAl e2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1zOiwgfXMKKwkgKi8KKworCXN0bXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCIsIDEsCisJ CQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3Ry KG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJ YXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVmYXVsdH1zIiwKKwkJCQkJCSBvcGNGb3Jt LT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJLyogQWRkIHRoZSBGT1IgVFlQRSBj bGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiRk9SIFRZUEUgJXt0eXBlfVQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwgLTEpKTsK KworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3Rt dCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsK KworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlOyBidXQgaWYgaXQgaGFzIHRoZSBzYW1l IG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhw YW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGEgZmFpbHVyZQorCSAqIGlmIHRo ZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5LgorCSAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJCSAib3BmYW1pbHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5v cGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpKTsK KworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwgTmFtZVN0cihvcGNGb3Jt LT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+ b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle29wZmFtaWx5fXMiLCAgdG1w b2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3 YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0 IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJT VE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2tleXR5cGUgIT0gSW52YWxpZE9p ZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlw ZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3Jl YWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1i ZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9Q RVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsCisJCQkJ CQkJIDQsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJ CQkJCSAib3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3Blci0+b2Jq ZWN0KSwKKwkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7 CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlp ZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJ CU9ialRyZWUJICAgKnRtcG9iajI7CisKKwkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9S IE9SREVSIEJZICV7b3BmYW1pbHl9RCIsIDApOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqMiwgIm9wZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChP cGVyYXRvckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWls eSkpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBv YmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCX0KKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8K Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFt aWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJ Rm9ybV9wZ19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJTGlzdAkg ICAqYXJnbGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jLT5vYmplY3QpOworCQlwcm9jRm9ybSA9IChGb3Jt X3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpICV7ZnVuY3Rpb259RCIs CisJCQkJCQkJIDQsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgcHJvYy0+bnVtYmVy LAorCQkJCQkJCSAibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSAicnR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdodHR5cGUsIC0xKSwK KwkJCQkJCQkgImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1l U3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnBy b2FyZ3R5cGVzLnZhbHVlczsKKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsg aSsrKQorCQl7CisJCQlPYmpUcmVlCSAgICphcmc7CisKKwkJCWFyZyA9IG5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJCQlhcmdsaXN0ID0gbGFwcGVuZChhcmdsaXN0 LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJfQorCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRtcG9iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3R5cGVz OiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOwor CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0 bXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXAp OworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBPUEVSQVRPUiBGQU1JTFkpCisgKgor ICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUhlYXBUdXBs ZSAgIGFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtICBhbUZv cm07CisJT2JqVHJlZQkgICAqY29wZlN0bXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEo T1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXND YWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJ YW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwljb3BmU3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAl e2FtbmFtZX1JIiwKKwkJCQkJCQkgIDIsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJ CQkgICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJ cmV0dXJuIGNvcGZTdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVBv bGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUG9saWN5 U3RtdCAqbm9kZSA9IChDcmVhdGVQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAg ICpwb2xpY3k7CisKKwlwb2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBPTElDWSAle2lk ZW50aXR5fUkiLCAxLAorCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBv bGljeV9uYW1lKTsKKworCS8qIGFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9s aWN5X2NsYXVzZXMocG9saWN5LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwK KwkJCQkJICAgISFub2RlLT53aXRoX2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJl c3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQs IG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7 CisKKwlyZXR1cm4gcG9saWN5OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0 bXQuCisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1h U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10 ICpub2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCQkgKmNy ZWF0ZVNjaGVtYTsKKwlPYmpUcmVlCQkJICphdXRoOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1 dGhvcml6YXRpb259cworCSAqLworCWNyZWF0ZVNjaGVtYSA9IG5ld19vYmp0cmVlKCJDUkVBVEUg U0NIRU1BIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle2lmX25v dF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RT IiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7bmFtZX1J Iiwgbm9kZS0+c2NoZW1hbmFtZSk7CisKKwlhdXRoID0gbmV3X29ianRyZWUoIkFVVEhPUklaQVRJ T04iKTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGF1dGgs ICIle2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9k ZS0+YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgIiV7 YXV0aG9yaXphdGlvbl9yb2xlfUkgIik7CisJCWFwcGVuZF9ib29sX29iamVjdChhdXRoLCAicHJl c2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2NoZW1hLCAi JXthdXRob3JpemF0aW9ufXMiLCBhdXRoKTsKKworCXJldHVybiBjcmVhdGVTY2hlbWE7Cit9CisK Ky8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBkb21haW4uCisgKi8KK3N0YXRp YyBjaGFyICoKK0RvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1cCkKK3sKKwlEYXR1bQlk ZWY7CisJTm9kZSAgICpkZWZ2YWw7CisJY2hhciAgICpkZWZzdHI7CisJYm9vbAlpc251bGw7CisK KwlkZWYgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgZG9tVHVwLCBBbnVtX3BnX3R5cGVfdHlw ZGVmYXVsdGJpbiwKKwkJCQkJCQkgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUiLAorCQkJIE5h bWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApKS0+dHlwbmFtZSkpOworCWRl ZnZhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIE5VTEwgLyogZHBjb250ZXh0PyAqLywKKwkJCQkJ CQkJCSAgIGZhbHNlLCBmYWxzZSk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogRGVw YXJzZSBhIEFsdGVyRG9tYWluU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlckRvbWFpblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQlPYmpl Y3RBZGRyZXNzIGNvbnN0cmFpbnRBZGRyKQoreworCUFsdGVyRG9tYWluU3RtdCAqbm9kZSA9IChB bHRlckRvbWFpblN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21UdXA7CisJRm9ybV9w Z190eXBlIGRvbUZvcm07CisJT2JqVHJlZQkgICAqYWx0ZXJEb207CisJY2hhcgkgICAqZm10Owor CWNvbnN0IGNoYXIgKnR5cGU7CisKKwkvKiBBTFRFUiBET01BSU4gRFJPUCBDT05TVFJBSU5UIGlz IGhhbmRsZWQgYnkgdGhlIERST1Agc3VwcG9ydCBjb2RlICovCisJaWYgKG5vZGUtPnN1YnR5cGUg PT0gJ1gnKQorCQlyZXR1cm4gTlVMTDsKKworCWRvbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRvbVR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLAorCQkJ IG9iamVjdElkKTsKKwlkb21Gb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCk7 CisKKwlzd2l0Y2ggKG5vZGUtPnN1YnR5cGUpCisJeworCQljYXNlICdUJzoKKwkJCS8qIFNFVCBE RUZBVUxUIC8gRFJPUCBERUZBVUxUICovCisJCQlpZiAobm9kZS0+ZGVmID09IE5VTEwpCisJCQl7 CisJCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQkJdHlwZSA9ICJkcm9wIGRlZmF1bHQiOwor CQkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJp bmcsIHR5cGUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0 eX1EIERST1AgREVGQVVMVCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRv bUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50 eXBuYW1lKSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4i OworCQkJCXR5cGUgPSAic2V0IGRlZmF1bHQiOworCQkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVf VkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUIiwKKwkJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJEb20sICIle2RlZmF1bHR9cyIsIERvbWFpbkdldERlZmF1bHQoZG9tVHVw KSk7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCS8qIERST1AgTk9UIE5VTEwg Ki8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJkcm9wIG5vdCBudWxsIjsK KwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJp bmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5 fUQgRFJPUCBOT1QgTlVMTCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9t Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLwor CQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gInNldCBub3QgbnVsbCI7CisJCQlh bHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0 eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIFNF VCBOT1QgTlVMTCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkp KTsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCS8qIEFERCBDT05TVFJBSU5ULiAgT25seSBD SEVDSyBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5IGRvbWFpbnMgKi8KKwkJCWZtdCA9ICJB TFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJhZGQgY29uc3RyYWludCI7CisJCQlhbHRlckRvbSA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJLyogYSBuZXcgY29uc3Ry YWludCBoYXMgYSBuYW1lIGFuZCBkZWZpbml0aW9uICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlckRvbSwgIkFERCBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLAorCQkJCQkJ CQkgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICIle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSBw Z19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJhaW50QWRkci5vYmplY3RJ ZCkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RSQUlOVCAq LworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gInZhbGlkYXRlIGNvbnN0cmFp bnQiOworCisJCQkvKgorCQkJICogUHJvY2VzcyBzdWJ0eXBlPXNwZWNpZmljIG9wdGlvbnMuIFZh bGlkYXRpb24gYSBjb25zdHJhaW50CisJCQkgKiByZXF1aXJlcyBpdHMgbmFtZS4KKwkJCSAqLwor CQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0 cmFpbnRfbmFtZX1zIiwgbm9kZS0+bmFtZSk7CisKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgc3VidHlwZSAlYyIsIG5vZGUtPnN1YnR5cGUpOworCX0KKwor CS8qIGRvbmUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoZG9tVHVwKTsKKworCXJldHVybiBhbHRlckRv bTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKENSRUFU RSBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUg YWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGb3Jl aWduU2VydmVyU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVG b3JlaWduU2VydmVyU3RtdCAqbm9kZSA9IChDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqY3JlYXRlU2VydmVyOworCU9ialRyZWUgICAgKnRtcDsKKwor CWNyZWF0ZVNlcnZlciA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU0VSVkVSICV7aWRlbnRpdHl9 SSIsIDEsCisJCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVy bmFtZSk7CisKKwkvKiBhZGQgYSBUWVBFIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIlRZUEUiLCAwKTsKKwlpZiAobm9kZS0+c2VydmVydHlwZSkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXt0eXBlfUwiLCBub2RlLT5zZXJ2ZXJ0eXBlKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVNlcnZlciwgIiV7dHlwZX1zIiwgdG1wKTsKKworCS8qIGFkZCBhIFZF UlNJT04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiIs IDApOworCWlmIChub2RlLT52ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIl e3ZlcnNpb259TCIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2Vy dmVyLCAiJXt2ZXJzaW9ufXMiLCB0bXApOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl U2VydmVyLCAiRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SSIsIG5vZGUtPmZkd25hbWUpOwor CS8qIGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU2VydmVyLCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9G ZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJldHVybiBjcmVhdGVTZXJ2ZXI7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKEFMVEVSIFNF UlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRl ciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRm9yZWlnblNl cnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGb3JlaWdu U2VydmVyU3RtdCAqbm9kZSA9IChBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICphbHRlclNlcnZlcjsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlhbHRlclNl cnZlciA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNlcnZlcm5hbWUpOworCisJ LyogYWRkIGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJWRVJTSU9OIiwgMCk7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24p CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgbm9kZS0+dmVyc2lv bik7CisJZWxzZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgInZlcnNpb24iLCAiTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTZXJ2ZXIs ICIle3ZlcnNpb259cyIsIHRtcCk7CisKKwkvKiBhZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55 ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04iLCAwKTsKKwlpZiAobm9kZS0+aGFz X3ZlcnNpb24gJiYgbm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXt2ZXJzaW9ufUwiLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lv bikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlclNlcnZlciwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCS8qIGFk ZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJTZXJ2ZXIsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlv bnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJcmV0dXJuIGFsdGVyU2VydmVyOworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBP SUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGUgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlPYmpUcmVlCSpjcmVhdGVTZXE7CisJT2JqVHJlZQkqdG1wb2JqOworCVJlbGF0aW9uCXJl bGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1z ID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVh cFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0ZVNlcVN0bXQgPSAoQ3JlYXRl U2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBD T0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRB QkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNyZWF0ZVNlcVN0bXQtPmZvcl9p ZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVl cyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwK KwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAor CSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lkZW50aXR5fUQKKwkg Ki8KKwljcmVhdGVTZXEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVTZXEsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0 ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCXRtcG9iaiA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2Us CisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiU0VRVUVOQ0UgJXtpZGVudGl0eX1EIiwgdG1wb2Jq KTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX0NhY2hlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFs c2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGNy ZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX01pbnZhbHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFs c2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChjcmVh dGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNl X1NlcV9SZXN0YXJ0KGNyZWF0ZVNlcSwgc2VxZGF0YSkpOworCisJLyogV2UgcHVycG9zZWZ1bGx5 IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0 ZVNlcSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIGNyZWF0ZVNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVT dG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFy c2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQg Km5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRwY29u dGV4dDsKKwlPYmpUcmVlCSpjcmVhdGVTdG10OworCU9ialRyZWUJKnRtcG9iajsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0 c31zICV7aWRlbnRpdHl9RCBbT0YKKwkgKiAle29mX3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3Bh cmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMKKwkgKiAle2luaGVyaXRzfXMgJXtw YXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMKKwkgKiAle29u X2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisJICovCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVl KCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BlcnNp c3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+ cmVscGVyc2lzdGVuY2UpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJU QUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4 aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDog IiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpZGVudGl0eX1E IiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0SWQpOworCisJLyoKKwkg KiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZv cm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxlX2VsZW1lbnRzIHdpdGggcGFy ZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBiZWNhdXNlIGlmIHRoZXJlIGFy ZSBubyBvcHRpb25zIHRoZSBwYXJlbnMgbXVzdCBub3QgYmUgZW1pdHRlZDsgYW5kCisJICogYWxz bywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBmb3IgaW5oZXJpdGFuY2UuCisJICovCisJaWYg KG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFydGJvdW5kKQorCXsKKwkJTGlzdCAgICAgICAq dGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFdlIGNhbid0IHB1dCB0YWJsZSBlbGVtZW50 cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBhcyBhbiBhcnJheQorCQkgKiBzdXJyb3VuZGVk IGJ5IHBhcmVucyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVzZSBhCisJ CSAqIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9uIGVsZW1l bnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRz LgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1wb2JqKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QgICAgICpwYXJlbnRzOworCQkJT2JqRWxlbSAgKmVs ZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCQll bGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisKKwkJCUFzc2VydChsaXN0X2xl bmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3Rt dCwgIlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10 LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOwor CQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2Rl LT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsICAgICAgLyogdHlwZWQg dGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsgICAgLyogbm90IGNvbXBvc2l0ZSAqLworCQl0 YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlk T2lkKTsKKworCQlpZiAodGFibGVlbHRzID09IE5JTCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29i anRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIigle2VsZW1lbnRz OiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgdGFibGVlbHRz KTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0YWJsZV9lbGVtZW50 c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdCAgICAgICAqdGFibGVlbHRzID0g TklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyBMSUtFIGNsYXVz ZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVlbiB0cmFuc2Zvcm1lZCBp bnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKworCQkvKgorCQkgKiBQcm9jZXNz IHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNvbnN0cmFpbnRzLiAgT25s eQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJz ZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJhaW50cyB3ZSByZWx5IG9uIHBnX2Nv bnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJICogbWlnaHQgYmUgbWlzc2luZyBz b21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50cy4KKwkJICovCisJ CXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVF bHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwgICAgIC8qIG5vdCB0eXBlZCB0YWJs ZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxl ZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQp OworCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU3RtdCwgIigle3RhYmxlX2VsZW1lbnRz OiwgfXMpIiwgdGFibGVlbHRzKTsKKworCQkvKgorCQkgKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lm aWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkgKiBwYXJlbnRz IGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNlIHRoYXQgbWF5IGxhY2sgdGhlIGFjdHVhbAor CQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhh biB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGlu IHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkgKiBtb3JlIGFjY3VyYXRlIGFuZCBjb252ZW5p ZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0cy4KKwkJICovCisJCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobGlzdF9sZW5ndGgobm9kZS0+aW5oUmVsYXRpb25z KSA+IDApCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCki LCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQllbHNlCisJCXsKKwkJCWFwcGVu ZF9udWxsX29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIik7CisJCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0c31zIiwgdG1wb2JqKTsKKwl9CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmIChub2RlLT50YWJsZXNwYWNlbmFt ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCBub2Rl LT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9i aiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0 YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSAgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5v bmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJv dW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90 IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBhcnNldHJlZSBkaXJlY3RseSBhcyBpdCdzIHRo ZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbgorCQkgKiB3aGljaCBoYXZlbid0IGJlZW4g dHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAi JXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQo b2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xhdXNlICovCisJdG1wb2JqID0g bmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKG9iamVj dElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5p dGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYnl9 cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIsIG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJ ZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1J Iik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0K KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0 bXBvYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lU SCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAq dG1wb2JqMjsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJ CXRtcG9iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iajIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dpdGhfY2xhdXNlfXMiLCB0bXBvYmop OworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10LgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2JqKQoreworCURlZmluZVN0bXQgKmRl ZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpkZWZTdG10ID0g TlVMTDsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFU SU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24ob2JqZWN0SWQs IGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRVJB VE9SOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwg ZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlkZWZTdG10ID0g ZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKwor CQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZp bmVTdG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisJCQlicmVh azsKKworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmlu ZVN0bXRfVFNQYXJzZXIob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9UU0RJQ1RJT05BUlk6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTRGlj dGlvbmFyeShvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RT VEVNUExBVEU6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUob2Jq ZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9iamVjdCBraW5kIik7CisJfQorCisJcmV0dXJuIGRlZlN0bXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIENPTExBVElPTikKKyAqCisgKiBH aXZlbiBhIGNvbGxhdGlvbiBPSUQsIHJldHVybiB0aGUgSlNPTiBibG9iIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVT dG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkg T2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlkKQoreworCU9ialRyZWUgICAgKnN0bXQ7CisJSGVhcFR1 cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1bTsK Kwlib29sCQlpc251bGw7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7 CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOwor CisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ09MTEFUSU9OIiwgMCk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoY29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFt ZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCWlmIChmcm9tQ29sbGlkLm9iamVjdElkICE9 IEludmFsaWRPaWQpCisJeworCQlPaWQJCQljb2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOwor CQlIZWFwVHVwbGUJdHA7CisJCUZvcm1fcGdfY29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8q CisJCSAqIENSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0 aW9uOworCQkgKi8KKwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXRE YXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOworCisJ CWZyb21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJGUk9NICV7ZnJvbV9pZGVudGl0eX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGZyb21Db2xGb3JtLT5jb2xsbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCSAgTmFtZVN0cihmcm9tQ29sRm9ybS0+Y29sbG5hbWUpKSk7CisKKworCQlS ZWxlYXNlU3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJcmV0dXJu IHN0bXQ7CisJfQorCisJLyogTE9DQUxFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsaWN1bG9jYWxlLCAmaXNudWxsKTsK KwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMT0NBTEU9IiwgMSwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUiKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtsb2NhbGV9TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRl eHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NPTExBVEUgKi8KKwlkYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxjb2xs YXRlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJMQ19DT0xMQVRFPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29s bGF0ZSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2NvbGxhdGV9TCIsCisJCQkJ CQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NU WVBFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3Bn X2NvbGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWVfVkEoIkxDX0NUWVBFPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiY3R5cGUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjdHlw ZX1MIiwKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkp KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJLyogUFJPVklERVIgKi8KKwlpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9W SURFUl9JQ1UpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJPVklERVI9IiwgMSwKKwkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm92aWRlciIpOworCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle3Byb3ZpZGVyfUwiLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAi aWN1IikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisJZWxzZSBpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJD KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSIsIDEsCisJCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXtwcm92aWRlcn1MIiwKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwor CS8qIERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSIsIDEsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGV0ZXJtaW5pc3RpYyIpOworCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle2RldGVybWluaXN0aWN9TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIl cyIsICJ0cnVlIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwl9CisKKwkvKiBWRVJTSU9OICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTj0iLCAxLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIo JXtlbGVtczosIH1zKSIsIGxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0 dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJB VE9SKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfT3Bl cmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAg b3ByVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCisJb3ByVHVwID0g U2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0g PSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlzdG10ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAorCQkJCQkJICAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo b3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcHJGb3JtLT5v cHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IlBST0NFRFVSRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInByb2NlZHVyZSIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJyaWdodGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0 KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQ09NTVVUQVRPUiAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3ByY29tKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE5FR0FUT1IgKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0ZSkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi cmVzdHJpY3QiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg b3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisKKwkvKiBKT0lOICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpP SU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBNRVJHRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+b3By Y2FubWVyZ2UpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJ LyogSEFTSEVTICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9w cmNhbmhhc2gpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJ YXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJl bGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sK KwlIZWFwVHVwbGUgICB0eXBUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0 bXA7CisJTGlzdAkgICAqbGlzdDsKKwljaGFyCSAgICpzdHI7CisJRGF0dW0JCWRmbHQ7CisJYm9v bAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5 cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJLyogU2hvcnRjdXQgcHJvY2Vzc2luZyBmb3Igc2hl bGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlzdG10ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo dHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3JtLT50 eXBuYW1lKSkpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVlKTsK KwkJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisJCXJldHVybiBzdG10OworCX0KKworCXN0bXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo dHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIodHlwRm9ybS0+dHlw bmFtZSkpKTsKKwlhcHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwgInByZXNlbnQiLCB0cnVlKTsKKwor CS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogSU5Q VVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJpbnB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VUUFVU ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAib3V0cHV0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVDRUlW RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz ZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwg ZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOwor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0Rf T1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6 ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlwRm9y bS0+dHlwbGVuID09IC0xKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVO R1RIPVZBUklBQkxFIiwgMCk7CisJfQorCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9ialR5 cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4pOworCX0KKworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUEFTU0VEQllWQUxVRSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJQQVNTRURCWVZBTFVFIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInBhc3NlZGJ5dmFsdWUiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGJ5dmFsKQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFMSUdOTUVOVCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTElHTk1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImFsaWdubWVudCIpOworCS8qIFhYWCBpdCdzIG9kZCB0byByZXByZXNl bnQgYWxpZ25tZW50IHdpdGggc2NoZW1hLXF1YWxpZmllZCB0eXBlIG5hbWVzICovCisJc3dpdGNo ICh0eXBGb3JtLT50eXBhbGlnbikKKwl7CisJCWNhc2UgJ2QnOgorCQkJc3RyID0gInBnX2NhdGFs b2cuZmxvYXQ4IjsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9n LmludDQiOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50 MiI7CisJCQlicmVhazsKKwkJY2FzZSAnYyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5icGNoYXIi OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhbGlnbm1l bnQgJWMiLCB0eXBGb3JtLT50eXBhbGlnbik7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgIiV7YWxpZ259cyIsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIpOworCXN3aXRjaCAodHlwRm9y bS0+dHlwc3RvcmFnZSkKKwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJy ZWFrOworCQljYXNlICdlJzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2Fz ZSAneCc6CisJCQlzdHIgPSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJ c3RyID0gIm1haW4iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKwlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3N0b3JhZ2V9cyIsIHN0cik7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDQVRFR09SWSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09SWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY2F0ZWdvcnkiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIl e2NhdGVnb3J5fXMiLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5 KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZv cm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5cFR1 cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVsbCk7 CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtkZWZhdWx0fXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRmbHQpKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxFTUVO VCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwZWxlbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImVsZW0iLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUxJTUlURVIgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiREVMSU1JVEVSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJkZWxpbWl0ZXIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2Rl bGltfUwiLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBDT0xMQVRB QkxFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElzVmFsaWQo dHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNl bnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle2VsZW1zOiwgfXMpIiwgbGlzdCk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBE ZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJT2JqZWN0QWRkcmVzcyBjb3BpZWQpCit7CisJSGVh cFR1cGxlICAgdHNjVHVwOworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpUcmVlCSAgICpzdG10 OworCU9ialRyZWUJICAgKnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0c2NGb3JtOworCUZvcm1f cGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlzdDsKKworCXRzY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiAldSIsCisJCQkgb2JqZWN0SWQp OworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVDVCh0c2NUdXApOworCisJ dHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKHRz Y0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyICV1 IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190c19wYXJz ZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1z OiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNmZ25hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1lKSkpOworCisJLyoKKwkg KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBDT1BZJ2VkIGFuIGV4aXN0 aW5nIGNvbmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3aXNlIGFkZCBhIFBBUlNF UiBjbGF1c2UuCisJICovCisJbGlzdCA9IE5JTDsKKwkvKiBDT1BZICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkNPUFk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNv cHkiKTsKKwlpZiAoY29waWVkLm9iamVjdElkICE9IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7dHNjb25maWd9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChUU0NvbmZpZ1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjb3BpZWQub2Jq ZWN0SWQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogUEFSU0VSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBUlNFUj0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFyc2VyIik7CisJaWYgKGNvcGllZC5vYmplY3RJ ZCA9PSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3BhcnNlcn1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BU dXApOworCVJlbGVhc2VTeXNDYWNoZSh0c2NUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3BUdXA7CisJT2JqVHJlZQkg ICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlGb3JtX3BnX3Rz X3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lE LCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRz cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJj aCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c3BGb3JtID0gKEZvcm1f cGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgle2Vs ZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7CisKKwkvKiBBZGQgdGhl IGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIFNUQVJUICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlNUQVJUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJzdGFydCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNzdGFydCkpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogR0VUVE9LRU4gKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiR0VUVE9LRU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImdldHRva2VuIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3Rva2VuKSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTkQgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJlbmQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzZW5kKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhUWVBFUyAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJMRVhUWVBFUz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAibGV4dHlwZXMiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzbGV4dHlwZSkpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSEVBRExJTkUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiSEVBRExJTkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImhlYWRsaW5lIik7CisJaWYgKE9pZElzVmFsaWQodHNwRm9ybS0+cHJzaGVhZGxp bmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNoZWFkbGluZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisKKwlyZXR1 cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTRGlj dGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUg ICB0c2RUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkg ICAqbGlzdDsKKwlEYXR1bQkJb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ190c19k aWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0 aW9uYXJ5ICIKKwkJCSAid2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3Jt X3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgl e2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRp dHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSk7CisKKwkv KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIFRFTVBM QVRFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFRTVGVtcGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0dGVtcGxh dGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qCisJICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVwcmVzZW50 YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNfY2FjaGUu YyBjb29wZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElD VE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAor CQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDApOworCWlmICgh aXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsIFRleHRE YXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1z KSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1cm4gc3RtdDsK K30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUoT2lk IG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHN0VHVwOwor CU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJ Rm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJdHN0VHVwID0gU2VhcmNoU3lzQ2FjaGUx KFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJ dHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBHRVRTVFJVQ1QodHN0VHVwKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFU RSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUo IkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRz dEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHN0Rm9ybS0+dG1w bG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5J TDsKKworCS8qIElOSVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5pdCIpOworCWlmIChPaWRJc1ZhbGlkKHRz dEZvcm0tPnRtcGxpbml0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGluaXQpKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYSVpFICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkxFWElaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibGV4aXplIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxsZXhpemUpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qo c3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHN0VHVw KTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVy VFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJQWx0ZXJUU0Nv bmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqKSBjbWQt PnBhcnNldHJlZTsKKwlPYmpUcmVlICpjb25maWc7CisJT2JqVHJlZSAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJICogQUxURVIg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUREIE1BUFBJTkcgRk9SICV7 dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisJICoKKwkgKiBjYXNlIEFM VEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdV UkFUSU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlzdHN9cyBGT1IgJXt0b2tl bnR5cGV9SQorCSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9U T0tFTjoKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBB TFRFUiBNQVBQSU5HIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9 RAorCSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJICogQUxURVIg VEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyBSRVBM QUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorCSAqCisJICog Y2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCSAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcgRk9SICV7 dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0 aW9uYXJ5fUQKKwkgKi8KKworCWNvbmZpZyA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIik7CisKKwkvKiBkZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBw cm9wcmlhdGUgdG8gZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJ CQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIERST1AgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJ CQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiSUYgRVhJU1RTIiwgMCk7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIG5vZGUtPm1pc3Npbmdfb2spOworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29uZmlnLCAiJXtpZl9leGlzdHN9cyIsIHRtcCk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVS X1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOOgorCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQs CisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQli cmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU46CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElO RyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5h ZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9i amVjdElkKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQgdGhlIGFmZmVjdGVkIHRva2VuIGxp c3QsIGZvciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICovCisJaWYgKG5vZGUtPmtpbmQgPT0g QUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NP TkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19EUk9QX01BUFBJTkcpCisJeworCQlsaXN0ID0gTklMOworCQlmb3JlYWNoKGNlbGws IG5vZGUtPnRva2VudHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29uZmln LCAiRk9SICV7dG9rZW50eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkvKiBhZGQgZnVydGhlciBz dWJjb21tYW5kLXNwZWNpZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJf VFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19B TFRFUl9NQVBQSU5HX0ZPUl9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQSU5HIGFuZCBBTFRFUiBN QVBQSU5HIEZPUiBuZWVkIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlzdCA9IE5JTDsK KwkJZm9yIChpID0gMDsgaSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJCXsKKwkJCU9i alRyZWUJKmRpY3RvYmo7CisKKwkJCWRpY3RvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCSAgY21kLT5kLmF0c2NmZy5k aWN0SWRzW2ldKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0 X29iamVjdChkaWN0b2JqKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChjb25maWcsICJX SVRIICV7ZGljdGlvbmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAobm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJeworCQkvKiB0aGUgUkVQTEFD RSBmb3JtcyB3YW50IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3NlcnQoY21kLT5k LmF0c2NmZy5uZGljdHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIlJF UExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRz Y2ZnLmRpY3RJZHNbMF0pKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAiV0lUSCAl e25ld19kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGlj dElkc1sxXSkpOworCX0KKworCXJldHVybiBjb25maWc7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCU9ialRyZWUgKmFsdGVyVFNEOworCU9ialRyZWUgKnRtcDsKKwlEYXR1bQkJb3B0 aW9uczsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVsbDsKKwlIZWFw VHVwbGUgICB0c2RUdXA7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5ICIKKwkJCSAid2l0aCBPSUQgJXUi LCBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RU dXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEFMVEVSIFRFWFQgU0VBUkNIIERJ Q1RJT05BUlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKwkgKi8KKworCWFsdGVy VFNEID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVFNELCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlv biBsaXN0IGFjY29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlvbiBjb2x1bW4g Ki8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJ CSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJ dG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDApOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9u cykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVFNELCAiKCV7ZGVmaW5pdGlvbjosIH1z KSIsIGRlZmluaXRpb24pOworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCisJcmV0dXJuIGFs dGVyVFNEOworfQorCisvKgorICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4p CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxl Q21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCU9ialRyZWUJICAgKnJlbHNldDsKKwljaGFyCSAgICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQg PSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxPcHRpb25zOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKwkgKi8KKwlp ZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJSRVNFVCAiOworCWVsc2UKKwkJZm10ID0gIlNFVCAiOwor CisJcmVsc2V0ID0gbmV3X29ianRyZWUoZm10KTsKKworCWZvcmVhY2goY2VsbCwgKExpc3QgKikg c3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtCSAgICplbGVtOworCQlPYmpUcmVlCSAgICpzZXQ7 CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9E ZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVj dF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmVsc2V0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJlbHNldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIFRSSUdHRVIpCisg KgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJpZ1N0bXQgKm5vZGUgPSAoQ3Jl YXRlVHJpZ1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisJSGVhcFR1 cGxlCXRyaWdUdXA7CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCU9ialRyZWUJICAgKnRy aWdnZXI7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCWludAkJCXRnbmFyZ3M7CisJTGlzdAkgICAq bGlzdDsKKwlMaXN0CSAgICpldmVudHM7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmln Z2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElk KTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2NvbnN0cmFpbnR9cyBU UklHR0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cworCSAqIE9OICV7cmVsYXRp b259RCAle2Zyb21fdGFibGV9cyAle2NvbnN0cmFpbnRfYXR0cnM6IH1zCisJICogRk9SIEVBQ0gg JXtmb3JfZWFjaH1zICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworCSAq LworCXRyaWdnZXIgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50fXMiLAorCQkJCQkJIG5vZGUtPmlzY29uc3RyYWlu dCA/ICJDT05TVFJBSU5UIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIs ICJUUklHR0VSICV7bmFtZX1JIiwgbm9kZS0+dHJpZ25hbWUpOworCisJaWYgKG5vZGUtPnRpbWlu ZyA9PSBUUklHR0VSX1RZUEVfQkVGT1JFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2Vy LCAiJXt0aW1lfXMiLCAiQkVGT1JFIik7CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdH RVJfVFlQRV9BRlRFUikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1z IiwgIkFGVEVSIik7CisJZWxzZSBpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9JTlNU RUFEKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiSU5TVEVB RCBPRiIpOworCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWlu ZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCS8qCisJICogRGVjb2RlIHRoZSBldmVudHMg dGhhdCB0aGUgdHJpZ2dlciBmaXJlcyBmb3IuICBUaGUgb3V0cHV0IGlzIGEgbGlzdDsKKwkgKiBp biBtb3N0IGNhc2VzIGl0IHdpbGwganVzdCBiZSBhIHN0cmluZyB3aXRoIHRoZSBldmVudCBuYW1l LCBidXQgd2hlbgorCSAqIHRoZXJlJ3MgYW4gVVBEQVRFIHdpdGggYSBsaXN0IG9mIGNvbHVtbnMs IHdlIHJldHVybiBhIEpTT04gb2JqZWN0LgorCSAqLworCWV2ZW50cyA9IE5JTDsKKwlpZiAobm9k ZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0lOU0VSVCkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVu dHMsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRS SUdHRVJfVFlQRV9ERUxFVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5n X29iamVjdCgiREVMRVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVFJV TkNBVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVFJV TkNBVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9VUERBVEUpCisJewor CQlpZiAobm9kZS0+Y29sdW1ucyA9PSBOSUwpCisJCXsKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZl bnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikpOworCQl9CisJCWVsc2UKKwkJeworCQkJ T2JqVHJlZQkgICAqdXBkYXRlOworCQkJTGlzdENlbGwgICAqY2VsbDsKKwkJCUxpc3QJICAgKmNv bHMgPSBOSUw7CisKKwkJCS8qCisJCQkgKiBDdXJyZW50bHkgb25seSBVUERBVEUgT0YgY2FuIGJl IG9iamVjdHMgaW4gdGhlIG91dHB1dCBKU09OLCBidXQKKwkJCSAqIHdlIGFkZCBhICJraW5kIiBl bGVtZW50IHNvIHRoYXQgdXNlciBjb2RlIGNhbiBkaXN0aW5ndWlzaAorCQkJICogcG9zc2libGUg ZnV0dXJlIG5ldyBldmVudCB0eXBlcy4KKwkJCSAqLworCQkJdXBkYXRlID0gbmV3X29ianRyZWVf VkEoIlVQREFURSBPRiIsIDEsCisJCQkJCQkJCQkia2luZCIsIE9ialR5cGVTdHJpbmcsICJ1cGRh dGVfb2YiKTsKKworCQkJZm9yZWFjaChjZWxsLCBub2RlLT5jb2x1bW5zKQorCQkJeworCQkJCWNo YXIgICAqY29sbmFtZSA9IHN0clZhbChsZmlyc3QoY2VsbCkpOworCisJCQkJY29scyA9IGxhcHBl bmQoY29scywgbmV3X3N0cmluZ19vYmplY3QoY29sbmFtZSkpOworCQkJfQorCisJCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHVwZGF0ZSwgIiV7Y29sdW1uczosIH1JIiwgY29scyk7CisKKwkJCWV2ZW50 cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfb2JqZWN0X29iamVjdCh1cGRhdGUpKTsKKwkJfQorCX0K KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRyaWdnZXIsICIle2V2ZW50czogT1IgfXMiLCBldmVudHMp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRp b25JZCwKKwkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRncmVsaWQpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRyaWdnZXIsICJPTiAle3JlbGF0aW9ufUQiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkZST00iLCAwKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJ eworCQlPYmpUcmVlCSAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJl bGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZWxhdGlvbn1EIiwgcmVs KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXtmcm9tX3RhYmxlfXMiLCB0 bXBvYmopOworCisJbGlzdCA9IE5JTDsKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwKKwkJCQkJICAgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7 CisJaWYgKG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwKKwkJCQkJ ICAgbmV3X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnRfYXR0cnM6IH1zIiwgbGlzdCk7CisKKwlh cHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiRk9SIEVBQ0ggJXtmb3JfZWFjaH1zIiwKKwkJ CQkJCSBub2RlLT5yb3cgPyAiUk9XIiA6ICJTVEFURU1FTlQiKTsKKworCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJXSEVOIiwgMCk7CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2Rl CSAgICp3aGVuQ2xhdXNlOworCQlEYXR1bQkJdmFsdWU7CisJCWJvb2wJCWlzbnVsbDsKKworCQl2 YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z3F1YWwsCisJCQkJ CQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwp CisJCQllbG9nKEVSUk9SLCAiYm9ndXMgTlVMTCB0Z3F1YWwiKTsKKworCQl3aGVuQ2xhdXNlID0g c3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiKCV7Y2xhdXNlfXMpIiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJf d2hlbmNsYXVzZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJ CQkJCQkJCSAgIGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7 d2hlbn1zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1l fUQiLCAxLAorCQkJCQkJICJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IHRyaWdGb3JtLT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+ dGduYXJnczsKKwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYSAgKnRnYXJnczsKKwkJY2hh ciAgICphcmdzdHI7CisJCWJvb2wJaXNudWxsOworCQlpbnQJCWZpbmR4OworCQlpbnQJCWxlbnRn YXJnczsKKwkJY2hhciAgICpwOworCisJCXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRh dHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJCUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJ CQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsK KwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgdGdhcmdzIik7CisJ CWFyZ3N0ciA9IChjaGFyICopIFZBUkRBVEEodGdhcmdzKTsKKwkJbGVudGdhcmdzID0gVkFSU0la RV9BTllfRVhIRFIodGdhcmdzKTsKKworCQlwID0gYXJnc3RyOworCQlmb3IgKGZpbmR4ID0gMDsg ZmluZHggPCB0Z25hcmdzOyBmaW5keCsrKQorCQl7CisJCQlzaXplX3QJdGxlbjsKKworCQkJLyog VmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4g PSBzdHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9y IHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkJCQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25h bWUpKSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7 CisKKwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3M6LCB9TCIs IGxpc3QpOwkJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2Jq LCAiKSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIkVYRUNVVEUgUFJPQ0VE VVJFICV7ZnVuY3Rpb259cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHRyaWdnZXI7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlVXNlck1hcHBpbmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdp dmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs CisgKiByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBVU0VSIE1BUFBJ TkcgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVVc2VyTWFw cGluZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVXNlck1h cHBpbmdTdG10ICpub2RlID0gKENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkgICAqY3JlYXRlU3RtdDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOwor CUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJ cmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJLyoKKwkgKiBMb29rdXAgdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24n dCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0 cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgJXUiLCBvYmplY3RJZCk7CisKKwlmb3Jt ID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0 Rm9yZWlnblNlcnZlcihmb3JtLT51bXNlcnZlcik7CisKKwljcmVhdGVTdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSBVU0VSIE1BUFBJTkcgIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVh dGVTdG10LCAiRk9SICV7cm9sZX1SIiwgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11 c2VyKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiU0VSVkVSICV7c2Vy dmVyfUkiLCBzZXJ2ZXItPnNlcnZlcm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNl LCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmlj X29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5V TEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNs dXNpdmVMb2NrKTsKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIGRlcGFyc2VfQWx0 ZXJVc2VyTWFwcGluZworICogCQorICogR2l2ZW4gYSBVc2VyIE1hcHBpbmcgT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiB0aGUgSlNPTiBibG9iIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlclVzZXJNYXBwaW5nU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlclVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChBbHRlclVzZXJNYXBwaW5nU3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJTdG10OworCVJlbGF0aW9uCXJlbDsKKwlIZWFw VHVwbGUJdHA7CisJRm9ybV9wZ191c2VyX21hcHBpbmcgZm9ybTsKKwlGb3JlaWduU2VydmVyICpz ZXJ2ZXI7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFVzZXJNYXBwaW5nUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwkvKgorCSAqIExvb2t1cCB1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2cs IHNvIHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRoCisJICogY3VycmVudF91c2VyIGFuZCBzdWNo LgorCSAqLworCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoVVNFUk1BUFBJTkdPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdXNlciBtYXBwaW5nICV1Iiwgb2JqZWN0 SWQpOworCisJZm9ybSA9IChGb3JtX3BnX3VzZXJfbWFwcGluZykgR0VUU1RSVUNUKHRwKTsKKwor CS8qCisJICogTG9va3VwIHVwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2 ZSB0byBkZWFsIHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisKKwl0cCA9 IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgJXUiLCBvYmplY3RJZCk7CisKKwlmb3JtID0g KEZvcm1fcGdfdXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisKKwlzZXJ2ZXIgPSBHZXRG b3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVl KCJBTFRFUiBVU0VSIE1BUFBJTkciKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3Rt dCwgIkZPUiAle3JvbGV9UiIsIG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGZvcm0tPnVtdXNlcikp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiU0VSVkVSICV7c2VydmVyfUki LCBzZXJ2ZXItPnNlcnZlcm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBh bnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclN0bXQsICIle2dlbmVyaWNfb3B0aW9u c31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOwor CisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUmVmcmVzaE1h dFZpZXdTdG10IChSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXKQorICoKKyAqIEdpdmVuIGEgbWF0 ZXJpYWxpemVkIHZpZXcgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgcmVmcmVzaCBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSZWZyZXNoTWF0Vmlld1N0bXQgKm5vZGUgPSAoUmVm cmVzaE1hdFZpZXdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZWZyZXNoU3RtdDsK KwlPYmpUcmVlCSAgICp0bXA7CisKKwlyZWZyZXNoU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZS RVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgMCk7CisKKwkvKiBhZGQgYSBDT05DVVJSRU5UTFkgY2xh dXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmVmcmVzaFN0bXQsICIle2NvbmN1cnJlbnRs eX1zIiwKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisJ LyogYWRkIHRoZSBtYXR2aWV3IG5hbWUgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZWZyZXNo U3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKwkvKiBhZGQg YSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8g REFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5z a2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmVmcmVzaFN0 bXQsICIle3dpdGhfbm9fZGF0YX1zIiwgdG1wKTsKKworCXJldHVybiByZWZyZXNoU3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgRGVmRWxlbXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4g Li4uIFNFVCwgaW50byBhIGxpc3Qgb2YgU0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29u dGVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICpl bGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUJICAgKnNldDsKKwlPYmpUcmVlCSAgICpv cHRuYW1lOworCisJc2V0ID0gbmV3X29ianRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJl ZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFt ZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsK KworCWlmICghaXNfcmVzZXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFs dWV9TCIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJ IGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7 Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIERST1AgY29tbWFuZHMuCisgKi8KK2No YXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0 IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3Ry aW5nSW5mb0RhdGEgIHN0cjsKKwljaGFyCQkgICAqY29tbWFuZDsKKwljaGFyCQkgICAqaWRlbnRp dHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwljaGFyCQkgICAqZm10OworCU9ialRyZWUJCSpz dG10LCAqc3RtdDI7CisJSnNvbmIJCSAgKmpzb25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7 CisKKwlmbXQgPSBwc3ByaW50ZigiRFJPUCAlcyBJRiBFWElTVFMgJSV7b2JqaWRlbnRpdHl9cyIs IG9iamVjdHR5cGUpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50 aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEo IkNBU0NBREUiLCAxLAorCQkJCQkJICAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZpb3Ig PT0gRFJPUF9DQVNDQURFKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2Nh ZGV9cyIsIHN0bXQyKTsKKworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihzdG10KTsKKwljb21t YW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURf TEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBz ZXR0aW5nIG9mIEZ1bmN0aW9uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rp b25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQorewor CU9ialRyZWUJICAgKm9iajsKKworCWlmIChraW5kID09IFZBUl9SRVNFVF9BTEwpCisJeworCQlv YmogPSBuZXdfb2JqdHJlZSgiUkVTRVQgQUxMIik7CisJfQorCWVsc2UgaWYgKHZhbHVlICE9IE5V TEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0X25hbWV9SSIsIDEsCisJ CQkJCQkgICAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKKworCQkvKgorCQkgKiBT b21lIEdVQyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90 IGJlCisJCSAqIHF1b3RlZC4KKwkJICovCisJCWlmIChHZXRDb25maWdPcHRpb25GbGFncyhuYW1l LCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAi VE8gJXtzZXRfdmFsdWV9cyIsIHZhbHVlKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJb2Jq ID0gbmV3X29ianRyZWUoIlJFU0VUIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIiV7 c2V0X25hbWV9SSIsIG5hbWUpOworCX0KKworCXJldHVybiBvYmo7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0 byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfSW5kZXhTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUlu ZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpp bmRleFN0bXQ7CisJT2JqVHJlZQkgICAqdG1wb2JqOworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxh dGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247 CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAg KndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50 KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0 cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJ CSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+ cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVm X2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVs b3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1 cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisJICogJXt0YWJsZX1EIFVT SU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICV7d2l0aH1zICV7dGFibGVzcGFjZX1z CisJICogJXt3aGVyZV9jbGF1c2V9cworCSAqLworCWluZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJD UkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMi LAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIpOworCisJYXBwZW5kX2Zvcm1h dF9zdHJpbmcoaW5kZXhTdG10LCAiSU5ERVgiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlu ZGV4U3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAi Q09OQ1VSUkVOVExZIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwg IiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5P VCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtu YW1lfUkiLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGluZGV4U3RtdCwgIlVTSU5HICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIigle2RlZmluaXRpb259cykiLCBkZWZpbml0 aW9uKTsKKworCS8qIHJlbG9wdGlvbnMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIp OworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtv cHRzfXMpIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIl e3dpdGh9cyIsIHRtcG9iaik7CisKKwkvKiB0YWJsZXNwYWNlICovCisJdG1wb2JqID0gbmV3X29i anRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKworCS8qIFdI RVJFIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVy ZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt3aGVyZX1zIiwgd2hl cmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aGVyZV9jbGF1 c2V9cyIsIHRtcG9iaik7CisKKwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisJdGFibGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBpbmRl eFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgor ICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVtYSBxdWFsaWZpZWQgdGFibGUgbGlz dCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVzLgorICovCitzdGF0aWMgTGlzdCAq CitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50 cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5 RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhl cml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleSwK KwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0g c3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJ CQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo dHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9ialRyZWUJKnBhcmVudDsK KwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVD VCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVu dHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQorCisvKgorICogRGVwYXJzZSB0aGUgT04g Q09NTU1JVCAuLi4gY2xhdXNlIGZvciBDUkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRp b24pCit7CisJT2JqVHJlZQkgICAqb25jb21taXQ7CisKKwlvbmNvbW1pdCA9IG5ld19vYmp0cmVl KCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNhc2UgT05DT01NSVRfRFJP UDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9 cyIsICJEUk9QIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgor CQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwg IkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JP V1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVl fXMiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9OT09Q OgorCQkJYXBwZW5kX251bGxfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIp OworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KG9uY29tbWl0LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJ CWJyZWFrOworCX0KKworCXJldHVybiBvbmNvbW1pdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBS ZW5hbWVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9k ZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVTdG10Owor CWNoYXIJICAgKmZtdHN0cjsKKwljb25zdCBjaGFyICpvYmp0eXBlOworCVJlbGF0aW9uCXJlbGF0 aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJLyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUg Y29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmpl Y3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNv bW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBU aGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3 ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0 IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3Np Ymx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFt ZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJ CWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJ CSAqCisJCQkgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8g JXtuZXduYW1lfUkKKwkJCSAqLworCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUt PnJlbmFtZVR5cGUpOworCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7 CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOwor CQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMCk7CisJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCSBub2RlLT5t aXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkp OworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25h bWV9SSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZ OgorCQkJeworCQkJCUhlYXBUdXBsZQlwb2xUdXA7CisJCQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9y bTsKKwkJCQlSZWxhdGlvbglwZ19wb2xpY3k7CisJCQkJU2NhbktleURhdGEJa2V5OworCQkJCVN5 c1NjYW5EZXNjCXNjYW47CisKKwkJCQlwZ19wb2xpY3kgPSByZWxhdGlvbl9vcGVuKFBvbGljeVJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJU2NhbktleUluaXQoJmtleSwgQW51bV9w Z19wb2xpY3lfb2lkLAorCQkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJ CQkJCQlPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKHBnX3BvbGljeSwgUG9saWN5T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJ CQkJCQkgIE5VTEwsIDEsICZrZXkpOworCQkJCXBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nh bik7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCQkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZIiwgMCk7CisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJ IG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZW5hbWVTdG10LCAiJXtwb2xpY3luYW1lfUkiLCBub2RlLT5zdWJuYW1lKTsKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiT04gJXtpZGVudGl0eX1EIiwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3 bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShw Z19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX0FUVFJJQlVURToKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hl bWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFZl cmJvc2Ugc3ludGF4CisJCQkgKgorCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiBvYmp0eXBl ICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklCVVRFCisJCQkgKiAle2NvbG5hbWV9SSBUTyAle25l d25hbWV9SSAle2Nhc2NhZGV9cworCQkJICoKKwkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgb2Jq dHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FCisJCQkgKiBDT0xVTU4gJXtj b2xuYW1lfUkgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlw ZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJeworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZSgiQUxURVIgVFlQRSIpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwg IiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1h SWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRz dHIgPSBwc3ByaW50ZigiUkVOQU1FIEFUVFJJQlVURSAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlvYmp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRp b25UeXBlKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJ CQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWUoZm10c3RyKTsKKworCQkJCS8qIENvbXBvc2l0ZSB0 eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8KKwkJCQlpZiAobm9kZS0+cmVuYW1lVHlw ZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10 LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkJbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElT VFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRl bnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAor CQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9 IHBzcHJpbnRmKCJSRU5BTUUgQ09MVU1OICUle2NvbG5hbWV9SSIpOworCQkJfQorCisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCBmbXRzdHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+ bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNl bnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NB U0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXsKKwkJCQljaGFyCSpp ZGVudDsKKwkJCQlIZWFwVHVwbGUgcHJvY3R1cDsKKwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07 CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlBc3NlcnQoSXNBKG5vZGUtPm9iamVjdCwg T2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9k ZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJP Q09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOwor CQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmpl Y3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7 CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsCisJCQkJCQkJCSBxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvY2Zvcm0tPnByb25hbWVzcGFjZSks CisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCSBmb3Jt YXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJZCwgdHJ1ZSkpOworCisJCQkJZm10c3Ry ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9 SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJCSJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXAp OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlI ZWFwVHVwbGUgICBvcGNUdXA7CisJCQkJRm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJCQkJTGlz dAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpv cGNuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAl cyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXdu YW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsK KworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0o YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQor CQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9J RCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQlvcGNGb3JtID0gKEZvcm1f cGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29w eV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0 aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAm c2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCQkJCQkJIG9wY25hbWUpLAorCQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQkJZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJ CQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJ CVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfT1BGQU1JTFk6CisJCQl7CisJCQkJSGVhcFR1cGxlICAgb3BmVHVwOworCQkJCUhlYXBUdXBs ZSAgIGFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwkJCQlGb3JtX3BnX2Ft ICBhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFt ZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJCWZtdCA9 IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1z IFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5v ZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlM WU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1 cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBm YW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZv cm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9 IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRo b2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkJCQkgb3Bm Rm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1Qo YW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5v YmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURl Y29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsK KworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwK KwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5h bWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlS ZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X1NDSEVNQToKKwkJCXJlbmFtZVN0bXQgPQorCQkJCW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hF TUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDIsCisJCQkJCQkJICAgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkgICAibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfRkRXOgorCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCXsKKwkJCQlTdHJp bmcgKmlkZW50aXR5ID0gY2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpOworCisJCQkJZm10 c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgUkVOQU1FIFRPICUle25ld25h bWV9SSIsCisJCQkJCQkJCQkJCQlzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7 CisJCQkJcmVuYW1lU3RtdCA9CisJCQkJCW5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJ CQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKGlkZW50aXR5KSwKKwkJCQkJ CQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCX0KKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCXJld3JU dXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9uCXBnX3Jld3Jp dGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29p ZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCAgYWRkcmVzcy5vYmplY3RJZCk7CisJ CQkJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJ CQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9O ICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJ CQkJCQkJCQkicnVsZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJ CQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJcmV3 ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXsK KwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJ CQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdnZXIgPSByZWxhdGlvbl9vcGVu KFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCXRyaWdUdXAgPSBnZXRf Y2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9vYmplY3RfYXR0bnVtX29pZChh ZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQl0cmlnRm9ybSA9IChGb3Jt X3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1E IFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJCSJ0cmln Z2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkJCSJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdy ZWxpZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFt ZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQljYXNlIE9CSkVD VF9UWVBFOgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46 CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJ CWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoK KwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJ RGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJQXR0ck51bWJlcglBbnVtX25h bWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9i amVjdCk7CisJCQkJY2hhcgkgICAqZm10c3RyaW5nOworCisJCQkJLyogb2J0YWluIG9iamVjdCB0 dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNh dGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9i amVjdElkKTsKKworCQkJCS8qIG9idGFpbiBuYW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFj ZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9i am5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJ CQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVzcGFjZSIpOworCisJCQkJb2JqdHlwZSA9 IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJCWZtdHN0cmluZyA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdHN0cmluZywKKwkJCQkJCQkJCQkwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZh bChsbGFzdChpZGVudGl0eSkpKSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVT dG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsK KwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJ YnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qg dHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiByZW5hbWVTdG10Owor fQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBE RVBFTkRTIE9OIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBl bmRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVw ZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkJICAgKmFsdGVyRGVwZW5kZVN0bXQgPSBOVUxMOworCisKKwlpZiAobm9kZS0+b2Jq ZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlSZWxhdGlvbiAgICAgICAgcmVsYXRpb24g PSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlPYmpUcmVlICpx dWFsaWZpZWQ7CisKKwkJYWx0ZXJEZXBlbmRlU3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBJTkRF WCIpOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFt ZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle2lkZW50aXR5 fUQiLCBxdWFsaWZpZWQpOworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtOT31z IiwKKwkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDogIiIpOworCisJCWFwcGVuZF9mb3JtYXRf c3RyaW5nKGFsdGVyRGVwZW5kZVN0bXQsICJERVBFTkRTIE9OIEVYVEVOU0lPTiIpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtuZXduYW1lfUkiLCBzdHJWYWwo bm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5v ZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAoaW50KSBub2RlVGFnKHBhcnNl dHJlZSkpOworCisJcmV0dXJuIGFsdGVyRGVwZW5kZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjYWNoZTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9S TUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJT RVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJDQUNIRSAle3ZhbHVlfXMiOwor CisJY2FjaGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBz dHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGNhY2hlKTsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmN5Y2xlOworCWNo YXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCAle25vfXMgQ1lD TEUiOworCWVsc2UKKwkJZm10ID0gIiV7bm99cyBDWUNMRSI7CisKKwljeWNsZSA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUi LAorCQkJCQkJICAgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgIHNlcWRhdGEtPnNlcWN5 Y2xlID8gIiIgOiAiTk8iKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY3ljbGUpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5DUkVNRU5UIEJZIG9wdGlvbi4KKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQorewor CU9ialRyZWUJICAgKmluY3JlbWVudGFsYnk7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAg KmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2 YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlp bmNyZW1lbnRhbGJ5ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCQkgICAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkJCSAgICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGluY3JlbWVu dGFsYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9u LgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqbWF4dmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAg KmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVl fXMiOworCWVsc2UKKwkJZm10ID0gIk1BWFZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBw c3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1heCk7CisJbWF4dmFsdWUgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1h eHZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1heHZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoK K2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBz ZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm1pbnZhbHVlOworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZt dCA9ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJNSU5WQUxVRSAl e3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5z ZXFtaW4pOworCW1pbnZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52YWx1ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpU eXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChtaW52YWx1ZSk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICov CitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwg T2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqb3duZWRi eSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2Nhbktl eURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUgICB0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29w ZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5 c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkp OworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNl cXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9v YmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMy R2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVu ZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxl IChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJewor CQlPaWQJCSBvd25lcklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0 bXBvYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVu ZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5j aWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lf QVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlv blJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9 IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNv bG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2Up OworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCW93 bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDIs CisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJv d25lciIsIE9ialR5cGVPYmplY3QsIHRtcG9iaik7CisJfQorCisJc3lzdGFibGVfZW5kc2Nhbihz Y2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgor CSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVs ZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQgd29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICov CisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLwor CQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJ CSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJ CSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2ws IGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChvd25lZGJ5KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQgb3B0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9ialRyZWUJICAgKnJlc3RhcnQ7CisJY2hh cgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRh LT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1 ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJ CQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBTVEFS VCBXSVRIIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2Vx X1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpzdGFydHdpdGg7CisJY2hhcgkgICAqdG1w c3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBT VEFSVCBXSVRIICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiU1RBUlQgV0lUSCAle3ZhbHVl fXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFy dCk7CisJc3RhcnR3aXRoID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0YXJ0d2l0aCk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNUT1JBR0Ugb3B0aW9uLgorICovCitzdGF0aWMg aW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICpzdG9yYWdlOworCWNoYXIJICAg KnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqc3RyOworCisJc3dpdGNoICh0eXBG b3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2FzZSAncCc6CisJCQlzdHIgPSAicGxhaW4iOworCQkJ YnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3RyID0gImV4dGVybmFsIjsKKwkJCWJyZWFrOworCQlj YXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRlZCI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJ CQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgdHlwRm9ybS0+dHlwc3RvcmFnZSk7CisJfQor CisJdG1wc3RyID0gcHNwcmludGYoIiVzIiwgc3RyKTsKKworCWZtdCA9ICJTVE9SQUdFID0gJXt2 YWx1ZX1zIjsKKworCXN0b3JhZ2UgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5 cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc3RvcmFnZSk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJFQ0VJVkUgb3B0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50 LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICpyZWNlaXZlOworCisJcmVj ZWl2ZSA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVj ZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlY2VpdmUsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QocmVjZWl2ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmVjZWl2ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQg b3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICpz ZW5kOworCisJc2VuZCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlw c2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNlbmQsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3Qoc2VuZCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmpl Y3Qoc2VuZCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlw bW9kaW47CisKKwl0eXBtb2RpbiA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kaW4s ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOwor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1vZGluLCAicHJlc2VudCIsIGZhbHNlKTsK KworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2Rpbik7Cit9CisKKworLyoKKyAqIERl cGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZG91dDsKKworCXR5cG1vZG91dCA9 IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9k b3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwbW9kb3V0LCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodHlwbW9kb3V0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdf b2JqZWN0X29iamVjdCh0eXBtb2RvdXQpOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IGFuYWx5emUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9U eXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlP YmpUcmVlCSAgICp0eXBhbmFseXplOworCisJdHlwYW5hbHl6ZSA9IG5ld19vYmp0cmVlX1ZBKCJB TkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHR5cGFuYWx5emUsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBG b3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwYW5hbHl6 ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwYW5h bHl6ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwc3Vi c2NyaXB0OworCisJdHlwc3Vic2NyaXB0ID0gbmV3X29ianRyZWVfVkEoIlNVQlNDUklQVD0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vic2NyaXB0Iik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dHlwc3Vic2NyaXB0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwc3Vic2NyaXB0 LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBzdWJz Y3JpcHQpOworfQorCisvKgorICogRGVwYXJzZSBhIFJ1bGVTdG10IChDUkVBVEUgUlVMRSkuCisg KgorICogR2l2ZW4gYSBydWxlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIHJ1bGUgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SdWxlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlSdWxlU3RtdCAqbm9kZSA9IChSdWxlU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkgICAqcnVsZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCVJlbGF0aW9uCXBn X3Jld3JpdGU7CisJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCUhlYXBUdXBsZQlyZXdyVHVw OworCVN5c1NjYW5EZXNjCXNjYW47CisJU2NhbktleURhdGEJa2V5OworCURhdHVtCQlldl9xdWFs OworCURhdHVtCQlldl9hY3Rpb25zOworCWJvb2wJCWlzbnVsbDsKKwljaGFyCSAgICpxdWFsOwor CUxpc3QJICAgKmFjdGlvbnM7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3Jp dGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9 IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdp dGggb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3Jp dGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCXJ1bGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFU RSBSVUxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7b3JfcmVwbGFj ZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICIle2lkZW50aXR5fUkiLAorCQkJCQkJIG5vZGUt PnJ1bGVuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiQVMgT04gJXtl dmVudH1zIiwKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfU0VMRUNUID8gIlNFTEVDVCIgOgor CQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJCQkJCQkgbm9k ZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxFVEUiIDoKKwkJCQkJCSBub2RlLT5ldmVudCA9 PSBDTURfSU5TRVJUID8gIklOU0VSVCIgOiAiWFhYIik7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo cnVsZVN0bXQsICJUTyAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFz cykpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICJETyAle2luc3RlYWR9cyIs CisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIik7CisKKwlldl9xdWFs ID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9xdWFsLAorCQkJCQkJ ICAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisJZXZfYWN0aW9ucyA9 IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfYWN0aW9uLAorCQkJCQkJ CSAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisKKwlwZ19nZXRfcnVs ZWRlZl9kZXRhaWxlZChldl9xdWFsLCBldl9hY3Rpb25zLCAmcXVhbCwgJmFjdGlvbnMpOworCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIldIRVJFICV7Y2xhdXNlfXMiLCAwKTsKKworCWlmIChxdWFs KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjbGF1c2UiLCBxdWFsKTsKKwllbHNlCisJ eworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiY2xhdXNlIik7CisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJ1bGVTdG10LCAid2hlcmVfY2xhdXNlIiwgdG1wKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFj aChjZWxsLCBhY3Rpb25zKQorCXsKKwkJY2hhciAqYWN0aW9uID0gbGZpcnN0KGNlbGwpOworCisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KGFjdGlvbikpOworCX0KKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJ1bGVTdG10LCAiJXthY3Rpb25zOiwgfXMiLCBsaXN0KTsKKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBydWxlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD cmVhdGVUcmFuc2Zvcm1TdG10IChDUkVBVEUgVFJBTlNGT1JNKS4KKyAqCisgKiBHaXZlbiBhIHRy YW5zZm9ybSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmFuc2Zvcm1TdG10ICpub2RlID0g KENyZWF0ZVRyYW5zZm9ybVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJKmNyZWF0ZVRyYW5z Zm9ybTsKKwlPYmpUcmVlICpzaWduOworCUhlYXBUdXBsZSB0cmZUdXA7CisJSGVhcFR1cGxlIGxh bmdUdXA7CisJSGVhcFR1cGxlIHByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9ybTsK KwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlp bnQgaTsKKworCS8qIEdldCB0aGUgcGdfdHJhbnNmb3JtIHR1cGxlICovCisJdHJmVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRSRk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0cmZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWx1cmUgZm9yIHRyYW5zZm9ybSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRyZkZv cm0gPSAoRm9ybV9wZ190cmFuc2Zvcm0pIEdFVFNUUlVDVCh0cmZUdXApOworCisJLyogR2V0IHRo ZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShMQU5HT0lELCB0cmZGb3JtLT50cmZsYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFu Z3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3JtID0g KEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJICogVmVyYm9z ZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7 dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKwkgKiAoIEZST00gU1FMIFdJVEggRlVO Q1RJT04gJXtzaWduYXR1cmV9cywgVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9m fXMgKQorCSAqLworCWNyZWF0ZVRyYW5zZm9ybSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIiV7b3JfcmVwbGFjZX1zIiwK KwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIlRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVUcmFuc2Zvcm0sICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLAorCQkJCQkJIE5hbWVTdHIobGFu Z0Zvcm0tPmxhbm5hbWUpKTsKKworCS8qIGRlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xp c3QgKi8KKwlpZiAodHJmRm9ybS0+dHJmZnJvbXNxbCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJTGlz dCAqcGFyYW1zID0gTklMOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAq IENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFH RSAle2xhbmd1YWdlfUkKKwkJICogKCBGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJl fXMgKQorCQkgKi8KKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZV TkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+ dHJmZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAor CQkJCXRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90 IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nCisJCSAqIHRv IGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0t PnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgKnBhcmFtb2JqID0gbmV3X29ianRyZWUo IiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNb aV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3Qo cGFyYW1vYmopKTsKKwkJfQorCisJCXNpZ24gPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJYXBwZW5k X29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAi KCV7YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVUcmFuc2Zvcm0sICIoRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwg c2lnbik7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKHRyZkZvcm0tPnRy ZnRvc3FsICE9IEludmFsaWRPaWQpCisJeworCQlMaXN0ICpwYXJhbXMgPSBOSUw7CisKKwkJLyoK KwkJICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRS QU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorCQkgKiAoIEZS T00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cywgVE8gU1FMIFdJVEggRlVOQ1RJT04g JXtzaWduYXR1cmVfdG9mfXMgKQorCQkgKgorCQkgKiBPUgorCQkgKgorCQkgKiBDUkVBVEUgJXtv cl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFn ZX1JCisJCSAqICggVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMgKQorCQkg Ki8KKworCQkvKiBBcHBlbmQgYSAnLCcgaWYgdHJmZnJvbXNxbCBpcyBwcmVzZW50LCBlbHNlIGFw cGVuZCAnKCcgKi8KKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiJXtj b21tYX1zIiwKKwkJCQkJCQkgdHJmRm9ybS0+dHJmZnJvbXNxbCAhPSBJbnZhbGlkT2lkID8gIiwi IDogIigiKTsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBUTyBGVU5DVElP TiAqLworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRyZkZvcm0tPnRyZnRv c3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJdHJm Rm9ybS0+dHJmdG9zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNoYW5nZSBm dW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nCisJCSAqIHRvIGdldCBpbnB1 dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdz OyBpKyspCisJCXsKKwkJCU9ialRyZWUgKnBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7 CisJCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmop KTsKKwkJfQorCisJCXNpZ24gPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5hbWVTdHIocHJvY0Zv cm0tPnByb25hbWUpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50 czosIH1zKSIsIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNm b3JtLCAiVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMiLCBzaWduKTsKKwkJ UmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVUcmFuc2Zvcm0sICIle2Nsb3NlX2JyYWNrZXR9cyIsICIpIik7CisKKwlSZWxlYXNlU3lzQ2Fj aGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRyZlR1cCk7CisJcmV0dXJuIGNyZWF0ZVRy YW5zZm9ybTsKK30KKworCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFu ZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQg aW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX3Np bXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsK KwlOb2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWFuZDsKKworCUFzc2VydChj bWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsK KwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQt PmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9u U3RtdCkpCisJCXJldHVybiBOVUxMOworCisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5k bGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChu b2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQWx0ZXJEb21haW5TdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCSAgY21k LT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0 ZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX1J1bGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQ3JlYXRlRmR3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0 ZUZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3Jl YXRlVXNlck1hcHBpbmdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlVXNlck1hcHBp bmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVy VXNlck1hcHBpbmdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGZHdT dG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9EZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfRGVmaW5lU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVj dCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUV4dGVu c2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0 ZXJFeHRlbnNpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5z aW9uQ29udGVudHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250 ZW50c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1w bGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZhbWls eVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9JbmRl eFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRl RnVuY3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyQ29sbGF0aW9uU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9SZW5hbWVTdG10 KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJEZXBl bmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVy T2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1h U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJcGFyc2V0cmVlLAorCQkJ CQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3duZXJT dG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyT3BlcmF0 b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVy UG9saWN5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGb3JlaWduU2VydmVyU3RtdDoKKwkJCWNvbW1h bmQgPSBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRm9yZWlnblNlcnZlclN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQ3JlYXRlRW51bVN0bXQ6CS8qIENSRUFURSBUWVBFIEFTIEVOVU0gKi8K KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVJhbmdlU3RtdDoJLyogQ1JFQVRFIFRZUEUg QVMgUkFOR0UgKi8KKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckVudW1TdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVFNE aWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlVHJhbnNm b3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ CQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBp biBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsK Kwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFU RSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVu dHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25z dHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQor ICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2Vf VGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlz dCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxp c3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywg dGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7 CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJ CQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJ CQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJ CQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9u LCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwK KwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5VTEwpCisJCQkJ CXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJY29sdW1uID0gbmV3X29iamVjdF9v YmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIGNvbHVtbik7 CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVk Iiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoK KyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAq CitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9y eUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1wY3h0OworCU9ialRyZWUJCSAgICp0 cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhICBzdHI7CisKKwkvKgor CSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGlu dG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0g d2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9jYXRlCisJICogdGhlIG91dHB1dCBT dHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7 CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01J TlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAg IEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9u ZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogaW4gb3JkZXIgdG8g b2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRz LAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQg cmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVu dCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291 bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0 aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQ YXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVy cmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFs c2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQ YXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNo IChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9z aW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJ CQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0dyYW50OgorCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRTdG10KGNtZCk7CisJCQlicmVhazsK KwkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1p bHkoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgorCQkJdHJlZSA9 IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9B bHRlclRTQ29uZmlnOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10 KGNtZCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVk IGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNl YXJjaFBhdGgoKTsKKworCWlmICh0cmVlKQorCXsKKwkJSnNvbmIgKmpzb25iOworCisJCWpzb25i ID0gb2JqdHJlZV90b19qc29uYih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZz dHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCWVsc2UKKwkJY29t bWFuZCA9IE5VTEw7CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNy ZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91 dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4g Y29tbWFuZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmZiOTcwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzYzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRl cGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi bGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyLCBpdCBkZXRl cm1pbmVzIGhvdyB3ZSBleHBhbmQgdGhlIGpzb24gZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisg Ki8KK3R5cGVkZWYgZW51bQoreworCVNwZWNUeXBlbmFtZSwKKwlTcGVjT3BlcmF0b3JuYW1lLAor CVNwZWNEb3R0ZWROYW1lLAorCVNwZWNTdHJpbmcsCisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5n TGl0ZXJhbCwKKwlTcGVjSWRlbnRpZmllciwKKwlTcGVjUm9sZQorfSBjb252U3BlY2lmaWVyOwor CisvKgorICogQSB0ZXJuYXJ5IHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUg SnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUs CisJdHZfZmFsc2UKK30ganNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9q c29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCSBKc29uYlZh bHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCSBjb25zdCBjaGFy ICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBj aGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwK KwkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRp YyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGRsX2RlcGFy c2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29uYkNv bnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBp dC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMg cmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBv dGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpz b25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAq Y29udGFpbmVyLCBjaGFyICprZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFs dWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJp bmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIo Y29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBO VUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xl YW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0 dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0 aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0 aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhp c3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVy biBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBw YWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxM LCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hh ciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFp bmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0 aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpz dHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJh eSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5 bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBm aW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpF Q1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJ CQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIl c1wiIGluIGpzb24gb2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlzdHIgPSBwbnN0cmR1cCh2 YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0 aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJ cmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9w dHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0 KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAor CX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBwZ19ldmVudF90cmln Z2VyX2V4cGFuZF9jb21tYW5kCisgKgorICogRmluZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUg Z2l2ZW4gY29udGFpbmVyLCBhbmQgZXhwYW5kIGl0IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJp bmdJbmZvLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250 YWluZXIgKmNvbnRhaW5lciwgU3RyaW5nSW5mbyBidWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJ SnNvbmJWYWx1ZSAqdmFsdWU7CisJY29uc3QgY2hhciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRf cHRyOworCWNvbnN0IGNoYXIgKmVuZF9wdHI7CisJaW50CQkJbGVuOworCisJc3RhcnRfcHRyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoY29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZs ZW4pOworCWVuZF9wdHIgPSBzdGFydF9wdHIgKyBsZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRy OyBjcCA8IGVuZF9wdHI7IGNwKyspCisJeworCQljb252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJ Ym9vbAkJaXNfYXJyYXkgPSBmYWxzZTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFy CSAgICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCisJ CUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAl JSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQkv KgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFy cmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJl IHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJ CQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsK KwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOwor CQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVu ZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAn OicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1p dGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5n IHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBi dWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVl OworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFS U0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9J TlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYg KGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAo cGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgY29udmVyc2lv biBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKworCQlzd2l0Y2ggKCpjcCkKKwkJ eworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lkZW50aWZpZXI7CisJCQkJYnJl YWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90dGVkTmFtZTsKKwkJCQli cmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmc7CisJCQkJYnJl YWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0ZXJhbDsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNUeXBlbmFtZTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9IFNwZWNPcGVyYXRvcm5hbWU7 CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjTnVtYmVyOwor CQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVyID0gU3BlY1JvbGU7CisJCQkJ YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQg Y29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9CisKKwkJLyoKKwkJICog T2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5LnR5cGUgPSBq YnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFtOworCQlrZXkudmFsLnN0cmlu Zy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29u dGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisKKwkJLyoKKwkJICogRXhwYW5k IHRoZSBkYXRhIChwb3NzaWJseSBhbiBhcnJheSkgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8u CisJCSAqLworCQlpZiAoaXNfYXJyYXkpCisJCQlleHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJh bSwgdmFsdWUsIGFycmF5c2VwLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4 cGFuZF9vbmVfanNvbmJfZWxlbWVudChidWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFy dF9wdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQg aWRlbnRpZmllci4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0 aWMgdm9pZAorZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlw ZSA9PSBqYnZTdHJpbmcpOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52 YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhw YW5kIGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0 IGJlIG9mIHR5cGUKKyAqIG9iamVjdCBhbmQgbWF5IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5h bWUiIChvcHRpb25hbCksICJvYmpuYW1lIgorICogKG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9w dGlvbmFsKS4gIERvdWJsZSBxdW90ZXMgYXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMg bmVjZXNzYXJ5LCBhbmQgZG90IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBk YXkgd2UgbWlnaHQgbmVlZCBhICJjYXRhbG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJy ZW50IHVzZSBjYXNlCisgKiBuZWVkcyB0aGF0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pz b252YWxfZG90dGVkbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sK KwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBO VUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90 ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3Ry aW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJhdHRybmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIi4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJ fQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29u YlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAq dHlwZW5hbWU7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUJaXNfYXJyYXk7 CisJY2hhcgkgICAqYXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxp ZnlpbmcgdGhlIG91dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhl ciB0aGUgZW1wdHkgc3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2Ug dHdvIGNhc2VzCisJICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5h bWUsIGluIHRoZSBmb3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdp dGggc3BlY2lhbCB0eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0 YW1wIChzZWUgZm9ybWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFs bG93aW5nCisJICogZm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBu YW1lcyB0aGF0IHJlcXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9t IGEgdXNlciBzY2hlbWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNv bnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZh bHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5V TEwpOworCWlzX2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2Fy cmF5KQorCXsKKwkJY2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJl YWs7CisKKwkJY2FzZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsK KworCQljYXNlIHR2X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVM TCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5h bWUpKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcyIsIHR5cGVuYW1lKTsgLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSks CisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5m byhidWYsICIlcyVzIiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsK K30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0b3IgbmFtZQorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpz b25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3Ig ZW1wdHkgKi8KKwlpZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVl KHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOwor CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlw ZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJp bmcuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBvYmpl Y3QuICBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3 aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVj dCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxz ZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFs c2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBm bGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9q c29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlp ZiAoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJ bmZvKGJ1ZiwganNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFs LnN0cmluZy5sZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkK Kwl7CisJCWpzb25fdHJpdmFsdWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAi cHJlc2VudCIpOworCQkvKgorCQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlz IGVsZW1lbnQgZXhwYW5kcyB0byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBv ciBhYnNlbnQpLCBmYWxsIHRocm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHBy ZXNlbnQgPT0gdHZfZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1 cnNpdmUoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwllbHNlCisJCXJldHVy biBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1 ZSBhcyBhIHN0cmluZyBsaXRlcmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf c3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIgICAq c3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZm aXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFyID0gMDsKKworCXN0 ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5n Lmxlbik7CisKKwkvKiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0 IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYm CisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3Ro ZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJ aW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVs aW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIr K10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAx KTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFk ZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFs IGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIl cyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGlt LmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFz IGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9u dW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3Ry ZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwx KG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZh bC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlz X3B1YmxpYyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChu byBxdW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVv dGluZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxf cm9sZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZh bHVlCWlzX3B1YmxpYzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5l cihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlp ZiAoaXNfcHVibGljID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAi UFVCTElDIik7CisJZWxzZQorCXsKKwkJY2hhciAqcm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJCQkgInJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJ CXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVu YW1lKSk7CisJCQlwZnJlZShyb2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg b25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8g dGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRh dGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQg d2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBm YWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50 IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFu c2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5n SW5mbyBidWYsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZT cGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0 cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3 ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2Fs bGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0 cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJ CXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOwor CisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRp ZmllcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X2RvdHRlZG5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmlu ZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFs X3N0cmluZyhidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0 ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wi LCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9q c29udmFsX3N0cmxpdChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlw ZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF90eXBlbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj T3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNh c2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYg KGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2Yg YSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJp bmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0 aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNv bmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNv bnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0Owor CUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpzb25i VmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZv RGF0YSBhcnJheWVsZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywg c2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJ c3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJy Y29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRl eHQ7CisJfQorCisJaWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsK KworCWNvbnRhaW5lciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250 YWluZXJJc0FycmF5KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBc IiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8o JmFycmF5ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hp bGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05F KQorCXsKKwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygm YXJyYXllbGVtKTsKKworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVt LCBwYXJhbSwgJnYsIHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJ CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJp bmFyeVN0cmluZ0luZm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJ Zmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hvcnNl IGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZGxfZGVwYXJz ZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkg ICAqanNvbmI7CisJU3RyaW5nSW5mbyBidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2Yo U3RyaW5nSW5mb0RhdGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0 RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CisJanNv bmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNp dmUoJmpzb25iLT5yb290LCBidWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0t LS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAq CisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNo IG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBjb250YWluIHpl cm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFt ZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2Rp ZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBj b252ZXJzaW9uIHNwZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwg JS4KKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisg KiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhw YW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICog TAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMp CisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhw YW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJv bGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxl bWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHBy ZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBl bGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBh cmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8K K0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQorewor CXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3Ry OworCisJanNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVY VF9QKGNzdHJpbmdfdG9fdGV4dChkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikp KTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0 cmluZyBleHBhbnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3Jl IGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZv cm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24u YnVpbGQKaW5kZXggOWIzNTBkMC4uYzFlMWEyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQK QEAgLTE1LDYgKzE1LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnY29weXRvLmMn LAogICAnY3JlYXRlYXMuYycsCiAgICdkYmNvbW1hbmRzLmMnLAorICAnZGRsX2RlcGFyc2UuYycs CisgICdkZGxfanNvbi5jJywKICAgJ2RlZmluZS5jJywKICAgJ2Rpc2NhcmQuYycsCiAgICdkcm9w Y21kcy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5YzlmOTEuLjQyMDVkZGEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDM5IEBAIHByb2Nlc3Nfb3du ZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRlbnRpdHkp CiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICogUmV0dXJu IHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVuY2VfZGF0 YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIgICAgICBi dWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFwVHVwbGVE YXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBzZXF1ZW5j ZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisKKwlpZiAo cGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xfU0VMRUNU IHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJ CSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2VxX3R1cGxl KHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9mKEZvcm1E YXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6ZW9mKEZv cm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsK KwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2VxOworfQog CiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRoZSBmb3Jt IGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRp bGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMjQ3ZDA4MS4uYmVhMzVh NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tl bmQvdGNvcC91dGlsaXR5LmMKQEAgLTE0NDYsNyArMTQ0Niw4IEBAIFByb2Nlc3NVdGlsaXR5U2xv dyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJYWRkcmVzcyA9IERlZmluZUNvbGxhdGlvbihw c3RhdGUsCiAJCQkJCQkJCQkJCQkJICBzdG10LT5kZWZuYW1lcywKIAkJCQkJCQkJCQkJCQkgIHN0 bXQtPmRlZmluaXRpb24sCi0JCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzKTsKKwkJ CQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMsCisJCQkJCQkJCQkJCQkJICAmc2Vjb25k YXJ5T2JqZWN0KTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWRlZmF1bHQ6CiAJCQkJCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBkZWZpbmUgc3RtdCB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXRfdHlwZS5jCmluZGV4IDI5MThmZGIuLmY2NGE3MjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAidXRpbHMvbnVtZXJp Yy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0YXRpYyBjaGFyICpwcmludFR5 cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwog CiAKIC8qCkBAIC0zNjMsNyArMzYyLDcgQEAgZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0 eXBlX29pZCwgaW50MzIgdHlwZW1vZCkKIC8qCiAgKiBBZGQgdHlwbW9kIGRlY29yYXRpb24gdG8g dGhlIGJhc2ljIHR5cGUgbmFtZQogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIHByaW50VHlw bW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCkKIHsK IAljaGFyCSAgICpyZXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJv Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwppbmRleCA2ZDRjMWMyLi42YjIz NmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKQEAgLTQ0LDYgKzQ0LDggQEAKIHN0YXRpYyB2 b2lkIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05v bmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3MsIE9pZCAqYXJndHlwZXMpOwog CitzdGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9j IHByb2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxp ZnkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJ CQkJCQkJCQkJICoKQEAgLTMzMiw2ICszMzQsMjkgQEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZp ZWQoT2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8qCisgKiBmb3JtYXRfcHJvY2VkdXJlX2FyZ3Mg ICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgorZm9ybWF0X3By b2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9ybV9wZ19wcm9j IHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJ ZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUi LCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9jZWR1cmVfYXJn c19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlSZWxlYXNlU3lz Q2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCiAgKiBmb3JtYXRf cHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAicHJvX25hbWUo YXJncykiCiAgKgogICogVGhpcyBleHBvcnRzIHRoZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBvZiBy ZWdwcm9jZWR1cmVvdXQgZm9yIHVzZQpAQCAtMjA2MCwzICsyMDg1LDMwIEBAIHBhcnNlTmFtZUFu ZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1l cywKIAogCXBmcmVlKHJhd25hbWUpOwogfQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoaXNl ZCBhcmd1bWVudHMgb2YgdGhlIGdpdmVuIHBnX3Byb2Mgcm93IGludG8gdGhlIG91dHB1dAorICog YnVmZmVyLiAgZm9yY2VfcXVhbGlmeSBpbmRpY2F0ZXMgd2hldGhlciB0byBzY2hlbWEtcXVhbGlm eSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuCisgKi8KK3N0YXRpYyB2 b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3Jt LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCQkgICBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJaW50 CQkJaTsKKwlpbnQJCQluYXJncyA9IHByb2Nmb3JtLT5wcm9uYXJnczsKKworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwl7CisJ CU9pZAkJCXRoaXNhcmd0eXBlID0gcHJvY2Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwor CQlpZiAoaSA+IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLAorCQkJCQkJCSAgIGZvcmNlX3F1YWxpZnkgPworCQkJCQkJ CSAgIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0aGlzYXJndHlwZSkgOgorCQkJCQkJCSAgIGZv cm1hdF90eXBlX2JlKHRoaXNhcmd0eXBlKSk7CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1 ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCA4NTVkNDgzLi4zMGI4 ZDkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0zNTgsNyArMzU4LDYgQEAgc3Rh dGljIGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVudHMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBs ZSBwcm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJpbnRfdGFibGVfYXJncywgYm9vbCBwcmludF9k ZWZhdWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9yZXR0eXBlKFN0cmluZ0luZm8g YnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl90cmZ0 eXBlcyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwotc3RhdGljIHZvaWQgcHJp bnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwog c3RhdGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTGlz dCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsKIHN0 YXRpYyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVyeShkZXBhcnNlX25hbWVzcGFjZSAqZHBucywg UXVlcnkgKnF1ZXJ5LApAQCAtNDgyLDIyICs0ODEsMTUgQEAgc3RhdGljIHZvaWQgZ2V0X2Zyb21f Y2xhdXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAogCQkJCQkJCQkJICAg ZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJsZXNhbXBsZV9k ZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLAogCQkJCQkJCQlkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywg T2lkIGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwogc3RhdGljIE5v ZGUgKnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQpOwogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3JpcHRzKFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVm LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGNoYXIgKmdldF9yZWxhdGlvbl9u YW1lKE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcmVsYXRpb25fbmFtZShPaWQg cmVsaWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmll ZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1zdGF0aWMgY2hhciAqZ2VuZXJhdGVfZnVuY3Rp b25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsCi0JCQkJCQkJCQlMaXN0ICphcmduYW1lcywg T2lkICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFy aWFkaWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBzdGF0 aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShPaWQgb3BlcmlkLCBPaWQgYXJnMSwgT2lk IGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8oU3RyaW5nSW5mbyBidWYsIE9pZCB0eXBp ZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShPaWQgdHlwaWQp Owogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7Ci1zdGF0aWMgY2hhciAq ZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9u cyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKICNkZWZpbmUgb25seV9tYXJr ZXIocnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCkBAIC01NDUsNiArNTM3LDc3IEBA IHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Ao c3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBhaXIgb2YgRGF0dW0g Y29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRlLmV2X3F1YWwgYW5kCisgKiBldl9h Y3Rpb24gY29sdW1ucywgcmV0dXJuIHRoZWlyIHRleHQgcmVwcmVzZW50YXRpb247IGV2X3F1YWwg YXMgYSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3aGVyZUNsYXVzZSBhbmQgZXZfYWN0aW9uIGFzIGEg TGlzdCBvZiBzdHJpbmdzICh3aGljaCBtaWdodCBiZQorICogTklMLCBzaWduYWxsaW5nIE5PVEhJ TkcpIGluIGFjdGlvbnMuCisgKi8KK3ZvaWQKK3BnX2dldF9ydWxlZGVmX2RldGFpbGVkKERhdHVt IGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlz dCAqKmFjdGlvbnMpCit7CisJaW50IHByZXR0eUZsYWdzID0gMDsKKwljaGFyICpxdWFsc3RyID0g VGV4dERhdHVtR2V0Q1N0cmluZyhldl9xdWFsKTsKKwljaGFyICphY3Rpb25zdHIgPSBUZXh0RGF0 dW1HZXRDU3RyaW5nKGV2X2FjdGlvbik7CisJTGlzdCAqYWN0aW9uTm9kZUxpc3QgPSAoTGlzdCAq KSBzdHJpbmdUb05vZGUoYWN0aW9uc3RyKTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKwlpZiAoc3RybGVuKHF1YWxzdHIpID4gMCAmJiBzdHJjbXAocXVh bHN0ciwgIjw+IikgIT0gMCkKKwl7CisJCU5vZGUJICAgKnF1YWw7CisJCVF1ZXJ5CSAgICpxdWVy eTsKKwkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7 CisKKwkJcXVhbCA9IHN0cmluZ1RvTm9kZShxdWFsc3RyKTsKKworCQlxdWVyeSA9IChRdWVyeSAq KSBsaW5pdGlhbChhY3Rpb25Ob2RlTGlzdCk7CisJCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVl cnkocXVlcnksIE5VTEwpOworCisJCUFjcXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNlLCBm YWxzZSk7CisKKwkJY29udGV4dC5idWYgPSAmYnVmOworCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBs aXN0X21ha2UxKCZkcG5zKTsKKwkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJCWNvbnRl eHQud2luZG93VExpc3QgPSBOSUw7CisJCWNvbnRleHQudmFycHJlZml4ID0gKGxpc3RfbGVuZ3Ro KHF1ZXJ5LT5ydGFibGUpICE9IDEpOworCQljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5Rmxh Z3M7CisJCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisJCWNvbnRl eHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCisJCXNldF9kZXBhcnNlX2Zvcl9x dWVyeSgmZHBucywgcXVlcnksIE5JTCk7CisKKwkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4 dCwgZmFsc2UpOworCisJCSp3aGVyZUNsYXVzZSA9IHBzdHJkdXAoYnVmLmRhdGEpOworCX0KKwll bHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9k ZUxpc3QpID09IDApCisJCSphY3Rpb25zID0gTklMOworCWVsc2UKKwl7CisJCUxpc3RDZWxsICpj ZWxsOworCQlMaXN0CSpvdXRwdXQgPSBOSUw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2Rl TGlzdCkKKwkJeworCQkJUXVlcnkJKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKwor CQkJaWYgKHF1ZXJ5LT5jb21tYW5kVHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250aW51ZTsK KworCQkJcmVzZXRTdHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1 ZiwgTklMLCBOVUxMLCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVG QVVMVCwgMCk7CisJCQlvdXRwdXQgPSBsYXBwZW5kKG91dHB1dCwgcHN0cmR1cChidWYuZGF0YSkp OworCQl9CisJCSphY3Rpb25zID0gb3V0cHV0OworCX0KK30KIAogc3RhdGljIGNoYXIgKgogcGdf Z2V0X3J1bGVkZWZfd29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE1 LDY1ICsxMDc4LDEyIEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29s IHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5vZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJl bGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OwotCQlkZXBhcnNlX25hbWVzcGFjZSBk cG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsK LQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICJXSEVOICgiKTsKKwkJY2hhciAgICAg ICAqcXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmco dmFsdWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ3JlYywg cXVhbCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRn cmVsaWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJl bCAqLwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVr aW5kID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsK LQkJb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFj Y2Vzc1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsK LQkJb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJb2xkcnRlLT5sYXRlcmFsID0gZmFs c2U7Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwot Ci0JCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQg PSBSVEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQlu ZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNz U2hhcmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOwotCQlu ZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsK LQkJbmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJ LyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1lbXNldCgmZHBucywgMCwgc2l6ZW9m KGRwbnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJ ZHBucy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0gTklMOwotCQlkcG5zLmFwcGVuZHJl bHMgPSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOwotCQlzZXRf c2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBv bmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4dC5idWYgPSAmYnVmOwotCQljb250 ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKLQkJY29udGV4dC53aW5kb3dDbGF1 c2UgPSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7Ci0JCWNvbnRleHQudmFycHJl Zml4ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJl dHR5KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29u dGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9l eHBya2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxM OwotCi0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKLQotCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJX SEVOICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhF Q1VURSBGVU5DVElPTiAlcygiLApAQCAtMTExNCw2ICsxMTI0LDY0IEBAIHBnX2dldF90cmlnZ2Vy ZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9 CiAKK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJp Z3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCWNoYXIgICAgICAgIHJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJ ZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRydGU7CisJUmFuZ2VU YmxFbnRyeSAqbmV3cnRlOworCisgICBpbml0U3RyaW5nSW5mbygmYnVmKTsKKworICAgcmVsa2lu ZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKKworICAgLyogQnVpbGQgbWlu aW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisgICBvbGRydGUgPSBtYWtlTm9k ZShSYW5nZVRibEVudHJ5KTsKKyAgIG9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAg IG9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgb2xkcnRlLT5yZWxraW5kID0g cmVsa2luZDsKKyAgIG9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7CisgICBv bGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOworICAgb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7 CisgICBvbGRydGUtPmluaCA9IGZhbHNlOworICAgb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisK KyAgIG5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworICAgbmV3cnRlLT5ydGVraW5k ID0gUlRFX1JFTEFUSU9OOworICAgbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Cisg ICBuZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworICAgbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlh cygibmV3IiwgTklMKTsKKyAgIG5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7CisgICBuZXdy dGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5oID0gZmFsc2U7CisgICBuZXdydGUt PmluRnJvbUNsID0gdHJ1ZTsKKworICAgLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisg ICBtZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7CisgICBkcG5zLnJ0YWJsZSA9IGxpc3Rf bWFrZTIob2xkcnRlLCBuZXdydGUpOworICAgZHBucy5jdGVzID0gTklMOworICAgc2V0X3J0YWJs ZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKyAgIHNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZk cG5zKTsKKworICAgLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3Rh Y2sgKi8KKyAgIGNvbnRleHQuYnVmID0gJmJ1ZjsKKyAgIGNvbnRleHQubmFtZXNwYWNlcyA9IGxp c3RfbWFrZTEoJmRwbnMpOworICAgY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisgICBjb250 ZXh0LndpbmRvd1RMaXN0ID0gTklMOworICAgY29udGV4dC52YXJwcmVmaXggPSB0cnVlOworICAg Y29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eSA/IFBSRVRUWUZMQUdfUEFSRU4gfCBQUkVUVFlG TEFHX0lOREVOVCA6IFBSRVRUWUZMQUdfSU5ERU5UOworICAgY29udGV4dC53cmFwQ29sdW1uID0g V1JBUF9DT0xVTU5fREVGQVVMVDsKKyAgIGNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRF TlRfU1REOworICAgY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7CisK KyAgIGdldF9ydWxlX2V4cHIod2hlbkNsYXVzZSwgJmNvbnRleHQsIGZhbHNlKTsKKworICAgcmV0 dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQkt IEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoKQEAgLTE4ODAsNiArMTk0OCwxMyBA QCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0 dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZh bHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFy dGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBs ZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwg MCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNv bXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAgKi8KQEAgLTIxMzIsNiArMjIwNywx NSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogLyoK KyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24gb2YgYSBDT05TVFJB SU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3Np bXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93 b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCisvKgogICogSW50ZXJu YWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RS QUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUwMSw3ICszNTg1LDcgQEAgcGdfZ2V0X2Z1 bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChz dHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIHByaW50X2Z1bmN0 aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKQogewogCWludAkJ CW51bWFyZ3M7CkBAIC0xMTM4NCw3ICsxMTQ2OCw3IEBAIGdldF90YWJsZXNhbXBsZV9kZWYoVGFi bGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAg KiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvciwganVz dCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUuKQogICovCi1zdGF0aWMg dm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRh dHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc3OCw3ICsxMTg2Miw3IEBAIGdl bmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkKICAqCiAgKiBUaGUgcmVz dWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2NoZW1hLXByZWZpeGluZy4K ICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBm dW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCiAJCQkJCSAg IGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwKIAkJCQkJICAgUGFyc2VF eHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxNjQsNyArMTIyNDgsNyBAQCBnZXRfcmVs b3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0 ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVM TCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9u cyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CmluZGV4IDY4YmIwMzIuLjJjODcxMDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtMTE4MjMsNCArMTE4MjMsMTAgQEAKICAgcHJvcmV0dHlwZSA9PiAnYnl0ZWEnLCBwcm9hcmd0 eXBlcyA9PiAncGdfYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeScsCiAgIHByb3NyYyA9PiAnYnJp bl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJyB9LAogCit7IG9pZCA9PiAnNDY0MicsIGRlc2Ny ID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGpzb24gZm9ybWF0IHN0cmluZycsCisg IHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywK KyAgcHJvYXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywgcHJvc3JjID0+ICdkZGxfZGVwYXJz ZV90b19qc29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIGpzb24gZm9y bWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFy c2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJvYXJndHlwZXMg PT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJyB9LAogXQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCmluZGV4IDIwMWIxOWYuLjJlOGQ5YjQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKQEAgLTE4LDcgKzE4LDggQEAKICNpbmNs dWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9k ZS5oIgogCi1leHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3Rz KTsKK2V4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCSAgIAkJCQkJCQkJIGJvb2wgaWZf bm90X2V4aXN0cywgT2JqZWN0QWRkcmVzcyAqZnJvbV9jb2xsaWQpOwogZXh0ZXJuIHZvaWQgSXNU aGVyZUNvbGxhdGlvbkluTmFtZXNwYWNlKGNvbnN0IGNoYXIgKmNvbGxuYW1lLCBPaWQgbnNwT2lk KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyQ29sbGF0aW9uKEFsdGVyQ29sbGF0aW9uU3Rt dCAqc3RtdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2MuLmMyYjFjYTMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0cnVj dCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQsIGJv b2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJT05f QVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJu IEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5jZUlk KTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1 ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9k ZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZGY0NwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApAQCAtMCwwICsx LDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5oCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3Rjb3AvZGRs X2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIERETF9ERVBB UlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0 aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIgKmRkbF9kZXBh cnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2Ry b3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlw ZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRpZgkJLyogRERM X0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOTRkZTEzZC4u YjUzMjk0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAor KysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02Miw2ICs2Miw3IEBA IHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7 CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNt ZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9h Y2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmlu ZGV4IDM2MTI4NGQuLjRlMDIwZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNo a19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBA IC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9v bAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9y X3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCA4MTYzMWYx Li43MTUwZmFiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVy biBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNk ZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRp b24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkv KiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVk KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFy ICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVh bGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0 ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJu IGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVt b2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMy IHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6 ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4 IDdkNDg5NzEuLjNjYmNhNDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBA CiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUg Im5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBAIC0yMywx MiArMjQsMTkgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2lu ZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4 ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpw Z19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJ CQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dl dF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBn X2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4g Y2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAq cGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNu YW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNv bnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9z aW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRh aWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCSAgIGNoYXIgKip3 aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHBy ZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXBy ZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9m b3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDgsMTYgQEAg ZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxl LAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVy YXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29w Y2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25f bmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lk ICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFk aWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4g Y2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4 dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5 cGUsCisJCQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxv cHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRl Zl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxi b2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkv KiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9v YmplY3RfYWRkcmVzcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRy ZXNzLm91dAppbmRleCAzNTQ5YjYzLi4zYzRjYjdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dApAQCAtNDkwLDcgKzQ5MCw3IEBAIFNFTEVDVCAocGdf aWRlbnRpZnlfb2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9iamlkLCBhZGRyMS5vYmpzdWJp ZCkpLiosCiAgcG9saWN5ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICB8IGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJsZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHN0YXRpc3RpY3Mgb2JqZWN0ICAgICAgICAg fCBhZGRyX25zcCAgIHwgZ2VudGFibGVfc3RhdCAgICAgfCBhZGRyX25zcC5nZW50YWJsZV9zdGF0 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBjb2xs YXRpb24gICAgICAgICAgICAgICAgIHwgcGdfY2F0YWxvZyB8ICJkZWZhdWx0IiAgICAgICAgIHwg cGdfY2F0YWxvZy4iZGVmYXVsdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCB0Ci0gdHJhbnNmb3JtICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICB8IGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAorIHRyYW5zZm9ybSAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3IgaW50ZWdlciBs YW5ndWFnZSBzcWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IHQKICB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5ICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfZGlj dCAgICAgIHwgYWRkcl9uc3AuYWRkcl90c19kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggcGFyc2VyICAgICAgICB8IGFk ZHJfbnNwICAgfCBhZGRyX3RzX3BycyAgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfcHJzICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2Vh cmNoIGNvbmZpZ3VyYXRpb24gfCBhZGRyX25zcCAgIHwgYWRkcl90c19jb25mICAgICAgfCBhZGRy X25zcC5hZGRyX3RzX2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8IHQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTdjOWJjMS4uZWYxNjg2 OSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5m bwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQor T2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBP YmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzYsNiArMzE3OSw3IEBAIGNvbG9ybWFwcmFuZ2UK IGNvbXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVs X2NvbnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9k YXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoxLjguMy4xCgo= --0000000000007cc06905eaab354e--