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 1onnCg-0001ov-4D for pgsql-hackers@arkaria.postgresql.org; Wed, 26 Oct 2022 20:40:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1onnBe-0007pG-NB for pgsql-hackers@arkaria.postgresql.org; Wed, 26 Oct 2022 20:39:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1onnBd-0007p4-Rs for pgsql-hackers@lists.postgresql.org; Wed, 26 Oct 2022 20:39:42 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1onnBa-0001As-Mm for pgsql-hackers@lists.postgresql.org; Wed, 26 Oct 2022 20:39:41 +0000 Received: by mail-pl1-x633.google.com with SMTP id p3so14403124pld.10 for ; Wed, 26 Oct 2022 13:39:38 -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=jizdwa39OpMGU0OeXZe3ZDgLVR7qYmMH/cUgvpYskGk=; b=gm0ZRgdEbCcP5vdev9uP3D9d797AHAPTlwRlhrMLph/rn79V1WBUOPzMzLqrEkrZqy 1ryoOK8sAt4sMiKUCZthlHZf1YHUCRpERMHzJ4YNi0/INO74Gtd++BXPaYFN2kDcCIhm QLSrWffq2VFFEuj94vC8AwaRNmFzOjAO3ESy5nO1ndaFADVgRUsPxVMFAJJe5K9Yha5d 1aMvKmmdIGAEjV587R/7LeKL0IpcgxtlWD4Td4+7NpMSVS5KP3w4X+ecxMYbfAetlZEp GKT6gFyUCXg1eMOGs2w6sMSgOYFXy0D1wXZ8ZqIsmHJsQJ17kk12vw2ogeN/pMP1OJCu omFg== 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=jizdwa39OpMGU0OeXZe3ZDgLVR7qYmMH/cUgvpYskGk=; b=YuGGUEWPtZZ3aVY3EqQrLxUAISEXkJj+gMI8KJX3SlCXLrEsUdITgdCJ1/wG/PzZep A8LxBsfx+vsMlBJcejNMqiLbEe/xabr/mx3Nh6rogvv78N3NGEQ1KIwXjzSUmxqCF6qC AAzc/hZavGHvyQymN5q0GPeb/IsCSA/ZPVEIxMPNzJX6UT9CB99btw+1xJqCRVbBURKR NKMmodCQy3rJGGPfdB2LcycgOhvl5MnsAtjLlSDzeqkea7I4rn3BTsJWaCwo0P4TZIC3 AX9UEq9SgNqlr2nQvQo5hKFFvHbu0P1X2RT9gwOJnhiqF+/KsL+M+/9nDNJocPX44TqM uPZA== X-Gm-Message-State: ACrzQf0gQRjH4CLbgWw3O7be6pRrgXaVfkCXBryvECvxk8XcaK41+Bos bxPYi34xJnZLL9kLqUw+MGgvXznhlQMHyBMFLDA= X-Google-Smtp-Source: AMsMyM6zIzpAcPQ2PjOqWSNw4KcSAsdNYm/qvefk4tCZjdwbDQFm/q5yGbqtBy3foSLytxCzOGY6yhDDQhinNSuJLdM= X-Received: by 2002:a17:903:4ca:b0:179:d21f:f04b with SMTP id jm10-20020a17090304ca00b00179d21ff04bmr46419342plb.7.1666816776394; Wed, 26 Oct 2022 13:39:36 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Wed, 26 Oct 2022 16:39:24 -0400 Message-ID: Subject: Re: Support logical replication of DDLs To: Ajin Cherian Cc: vignesh C , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000dd2b4805ebf605cf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000dd2b4805ebf605cf Content-Type: text/plain; charset="UTF-8" > Adding support for deparsing of CREATE/ALTER/DROP LANGUAGE for ddl replication. Adding support for deparsing of: COMMENT ALTER DEFAULT PRIVILEGES CREATE/DROP ACCESS METHOD Regards, Zheng --000000000000dd2b4805ebf605cf Content-Type: application/octet-stream; name="v32-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v32-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9q3gzdg2 RnJvbSA3N2FjNDNhMGM5N2YyY2M1Yjg0OTVkMjk2ODQ4MGIyMWEwODhlMjBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDU6NTY6MjcgLTA0MDAKU3ViamVjdDogW1BBVENI IDMvNF0gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlkZWEg b2YgcmVwbGljYXRpbmcgdGhlIENSRUFURSBUQUJMRSBBUyBpcyB0aGF0IHdlIGRlcHJhc2UgdGhl IENSRUFURQpUQUJMRSBBUyBpbnRvIGEgc2ltcGxlIENSRUFURSBUQUJMRSh3aXRob3V0IHN1YnF1 ZXJ5KSBjb21tYW5kIGFuZCBXQUwgbG9nIGl0CmFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQg YmVmb3JlIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSB0YWJsZSBhbmQgcmVwbGljYXRlCnRoZSBpbmNv bWluZyB3cml0ZXMgbGF0ZXIgYXMgbm9ybWFsIElOU0VSVHMuIEluIHRoaXMgYXBwb3JhY2gsIHdl IGRvbid0IGV4ZWN1dGUKdGhlIHN1YnF1ZXJ5IG9uIHN1YnNjcmliZXIgc28gdGhhdCBkb24ndCBu ZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG9iamVjdHMKcmVmZXJlbmNlZCBpbiB0aGUgc3VicXVl cnkgYWxzbyBleGlzdHMgaW4gc3Vic2NyaWJlci4gQW5kIFRoaXMgYXBwcm9hY2ggd29ya3MKZm9y IGFsbCBraW5kIG9mIGNvbW1hbmRzKGUuZy4gQ1JBRVRFIFRBQkxFIEFTIFtTRUxFQ1RdW0VYRUNV VEVdW1ZBTFVFU10pCgpJbnRyb2R1Y2luZyBhIG5ldyB0eXBlIG9mIGV2ZW50IHRyaWdnZXIgInRh YmxlX2luaXRfd3JpdGUiLiB3aGljaCB3b3VsZCBiZSBmaXJlZApmb3IgQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQKYmVmb3JlIGFueSBvdGhl ciBtb2RpZmljYXRpb24uIHdlIGRlcGFyc2UgdGhlIGNvbW1hbmQgaW4gdGhlIHRhYmxlX2luaXRf d3JpdGUgZXZlbnQKdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcu IFRoZSB3YWxzZW5kZXIgd2lsbCBzZW5kIHRoZQpzdHJpbmcgdG8gc3Vic2NyaWJlci4gQW5kIGlu Y29taW5nIElOU0VSVHMgd2lsbCBhbHNvIGJlIHJlcGxpY2F0ZWQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgIDIzICsrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYyAgIHwgMTcyICsrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICA5ICsrCiBzcmMvYmFja2VuZC90Y29wL3V0 aWxpdHkuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICB8ICAgNCAr CiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICB8ICAgOSArLQogc3JjL2lu Y2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgfCAgIDMgKy0KIDEwIGZpbGVzIGNoYW5n ZWQsIDIzMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jCmluZGV4IDE1MmMyOWI1NTEuLmI3Nzk1ZGE4N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRz L21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVy bmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVyeShp bnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmlnZ2Vy IGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0 aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3JlYXRl ZCB0YWJsZQorCQkgKiBpbiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJ fQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwppbmRleCA0ODllMGFlNjhkLi5jOTU0ZDZiYWE1IDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTg0NTQsNiArODQ1NCwyNiBAQCBkZXBhcnNlX1R5cGVfVHlwbW9kX091dChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQogCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdCh0eXBtb2RvdXQpOwogfQogCisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMg Y29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFz IHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMg Y29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3Rt dChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAq cGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisK KwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworfQorCiAKIC8qCiAgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5 emUgb3B0aW9uLgpAQCAtOTI0NCw2ICs5MjY0LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Q29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfR3Jh bnQ6CiAJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNl IFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQo Y21kKTsKKwkJCWJyZWFrOwogCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRl cGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKaW5kZXggMTI1NjVkODY4My4uODlmZmNmZTY5MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dl cihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUs ICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJz cWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3Jp dGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9 IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAw KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK IAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcg KzE2MCw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQog CS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxf ZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dy aXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFn IiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3Jp dGUiKSA9PSAwCkBAIC01ODUsNyArNTg3LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9k ZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJ CWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERM Q29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRf U1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAo IWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcp KTsKQEAgLTg2OCw2ICs4NzEsMTYzIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpw YXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0Cisg KiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVU IElOVE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitF dmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1v cnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdu b3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2Fi bGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJ b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKwor CWNvbW1hbmQtPnR5cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNp b24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZh bGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOwor CWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQt PnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxl SW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmlu ZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFy dHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1Ylhh Y3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKwor CS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlv biBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVy bjsKKworCXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQt PnBhcmVudDsKKworCXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQpOworCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVu dDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoK KyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICov CitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJ Y2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZj aW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2Vy Iik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CUFzc2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5k LnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdh bCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAq IHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQg dGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBh bmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9z c2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBp bmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxl LgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBh bmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0 cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25f c3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5k LnNpbXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0 cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKK30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgor ICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwg T2JqZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmln Z2VyRGF0YSB0cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkg KiBTZWUgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQg d2h5IGV2ZW50CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUu CisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBB bHNvIGRvIG5vdGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3Qg YmUgaWYgdGhlcmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0 aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdo dCB0aGVyZWZvcmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVj YXVzZSBFdmVudFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkg KiBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlp ZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGlu ZyBpZiBubyBjb21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRy aWdnZXJDb21tb25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJs ZUluaXRXcml0ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAm dHJpZ2RhdGEpOworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRo ZSByZWFsIENyZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1h bmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5h ZGRyZXNzID0gYWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmln Z2VySW52b2tlKHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3Rf ZnJlZShydW5saXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0 cmlnZ2VycyBkaWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkg Ki8KKwlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2gg ZXZlbnQgdHJpZ2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDks NyArMTMwOSw4IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1 cm4gKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2Fj aGVMb29rdXAoRVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1 cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RE TENvbW1hbmRFbmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5p dFdyaXRlKSAhPSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRf dHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVy T3BGYW1pbHk6CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJU U0NvbmZpZzoKKwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAg ICppZGVudGl0eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBn X2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRy ID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0g U0NUX0FsdGVyVFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOwor CQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRy ID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qg d2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDc5MzVjMjYyODAuLjI5ZjUzZDQxOTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDIyLDYgKzEwMjIsMTEgQEAg Q3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0 bXQgKnN0bXQpCiAJCQlDTURUQUdfRFJPUF9TVEFUSVNUSUNTCiAJCX07CiAKKwkJQ29tbWFuZFRh Zwlpbml0X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQkJQ01E VEFHX1NFTEVDVF9JTlRPCisJCX07CisKIAkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQg ZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29t bWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOwpAQCAtMTAzMyw2ICsxMDM4LDEwIEBAIENyZWF0ZVB1YmxpY2F0 aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkv KiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKIAkJ CQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJ CS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0 ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2NvbW1hbmRz LAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CiAJ fQogCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5k ZXggYmVhMzVhNjI4MS4uNTA4MzljMGQ5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjYsOCArMTY2 NiwxMCBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFr OwogCiAJCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVTdGFydChwYXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVB cyhwc3RhdGUsIChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBh cmFtcywgcXVlcnlFbnYsIHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgp OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2V2dGNhY2hlLmMKaW5kZXggZjdmNzE2NWY3Zi4uN2ZiOGNiMjkxZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdn ZXJDYWNoZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21w KGV2dGV2ZW50LCAidGFibGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJl d3JpdGU7CisJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9 PSAwKQorCQkJZXZlbnQgPSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVl OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA0ODEzM2JkNjIwLi41YzQ2ZWZmOTVhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODQzLDQgKzExODQzLDcgQEAKIHsgb2lkID0+ ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUg cmV3cml0ZScsCiAgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0 ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAogICBwcm9hcmd0eXBlcyA9PiAnJywg cHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9 PiAnNDY0NycsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxl IGluaXQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3Jp dGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IGZkMmVlN2ZmZTQuLmE5ZTBmNzFm NmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTU1LDYgKzU1LDEwIEBA IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJs ZU9pZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxl SW5pdFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVy biB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpOworCiBleHRlcm4gYm9v bCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVk T2JqZWN0c05lZWRlZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1 MzI5NGJmNTcuLjNkMjk0YTAzNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAt MjksNyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0 ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BD bGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVh dGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAxLDYgKzEwMiwx MiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJ b2JqdHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRy ZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJ ZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkZGI2N2E2OGZhLi4xZTY0ODMxN2FlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2 dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRT dGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdy aXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmln Z2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0tIAoyLjM3LjEKCg== --000000000000dd2b4805ebf605cf Content-Type: application/octet-stream; name="v32-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v32-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9q3gzdg3 RnJvbSA2ZTlmYzZiODhiZDhjNDI3OTgyNzM0ZDM3YTc5NjBjY2NmNTJjYWNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDY6MDA6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IDQvNF0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzcuMQoK --000000000000dd2b4805ebf605cf Content-Type: application/octet-stream; name="v32-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v32-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9q3gzdf1 RnJvbSA5MWNiNWQzZDQ4MzAzY2IyMmE3YjkzNzZiMDNjNTZhZmUxZWNlNjZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDU6NTM6MjkgLTA0MDAKU3ViamVjdDogW1BBVENI IDIvNF0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gV2hp bGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0cmln Z2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK VGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBhbmQg RERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0aW9u LiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxFL0FM VEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBv YmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9n IHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBp cyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNl cHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRo YXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRo ZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3Rl IHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVu ZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZl bnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJs ZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0 b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQg aXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIg dGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVz c2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBv dXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBt YXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNh dXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcg bWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0 IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0 aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5 IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8g bWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhl IGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxk IGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2Vs bCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3Ig dGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxl X3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09M VU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0 aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVf cmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQg c2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQu IFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUg ZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNp c3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0 IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0 byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5 IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vz bid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0 IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdy aXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJl IGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0 cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNl IHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBU byBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcg dG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2lj IGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkg bm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUK ZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBj aGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJs ZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIg YW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9t ZXNvbi5idWlsZCAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5jICAgICAgICAgIHwgMjg2ICsrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgICAgICAgIHwgMTgxICsrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyAgfCAgODYgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgfCAgOTMgKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9tZXNvbi5idWlsZCAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0OCArKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjM0ICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE5NCArKysrKysrLQogc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfd2Fs ZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVz Y3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oICAgICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v ZGVjb2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWxwcm90by5oICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgIHwgIDI3ICsrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291 dHB1dC5oICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oICAgICAgIHwgIDM5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0ICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0KIDMzIGZpbGVzIGNoYW5nZWQs IDE3NDggaW5zZXJ0aW9ucygrKSwgMjI5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uYjhlMjll OGRmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBA QCBPQkpTID0gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNj Lm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8g XAogCXJlbG1hcGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dp Y2FsZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjgx ZGVlNTI5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBsb2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5l cyBmb3IgcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisKK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3Jk KTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFT SzsKKworCWlmIChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVj OworCQljaGFyCSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2Fn ZSA9IHhscmVjLT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAg PSAiIjsKKworCQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0 ZXMpOiAiLAorCQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMt PmNtZHR5cGUpOworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4 IGJ5dGVzICovCisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7 IGNudCsrKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVu c2lnbmVkIGNoYXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisK K2NvbnN0IGNoYXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlm ICgoaW5mbyAmIH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CXJldHVybiAiRERMIE1FU1NBR0UiOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKaW5kZXggZjNhNmUwYTU3MS4uM2E3MGM5NzRkZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZApAQCAtOSw2ICs5LDcgQEAgcm1n cl9kZXNjX3NvdXJjZXMgPSBmaWxlcygKICAgJ2dpc3RkZXNjLmMnLAogICAnaGFzaGRlc2MuYycs CiAgICdoZWFwZGVzYy5jJywKKyAgJ2xvZ2ljYWxkZGxtc2dkZXNjLmMnLAogICAnbG9naWNhbG1z Z2Rlc2MuYycsCiAgICdteGFjdGRlc2MuYycsCiAgICduYnRkZXNjLmMnLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDU5OTY3MDk4YjMuLjcyMWQwMjNhYTUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw3IEBAIEdldFB1Ymxp Y2F0aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+ cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxl dGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7 CisJcHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlwdWItPnB1YnZp YXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggOGQzNmI2NjQ4OC4uMTI1NjVkODY4 MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsOCArMzcsMTEgQEAK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgog I2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNl X3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL2Rk bF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAtMTUzNyw2ICsxNTQwLDcg QEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQt PmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRh YmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5J TDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1 NzAsNyArMTU3NCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQp CiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhh bmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJU YWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJp Z2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVj dGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1OTAsNiArMTU5NCw3IEBAIEV2ZW50VHJpZ2dlckNv bGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNz KQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5 T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21t YW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFwcGVu ZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUu c3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3NSwzICsyMTgwLDI4MiBAQCBzdHJpbmdpZnlfYWRl ZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJCQkv KiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNl X2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxv ZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFy CSAgICpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURy b3BTdG10ICAgKnN0bXQ7CisJTGlzdENlbGwgICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19F VkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQg dHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZj aW5mby0+Y29udGV4dDsKKwlzdG10ID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7 CisKKwkvKiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFj aChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJ ICAgKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJ UmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJl c3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0 aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisK KwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJZCk7CisK KwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRh cmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2ls bCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQK KwkJICogdGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNj cmliZXIgc2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBs YXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUg bWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBl cnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsYXRp b24sIE5vTG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdl KCJkZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJ CSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0 YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQor ICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4K KyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElP Tl9BUkdTKQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOwor CWNoYXIJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisK KwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJ LyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rp bmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFu ZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2Fs RERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFi bGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsK KworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlv bl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5k IGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIJ aXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkCQkJcmVsaWQ7CisKKwlpZiAo IUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmly ZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0 KGxjKTsKKwkJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJl ZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRl clRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1l U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3Rt dC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRp b25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQt PnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRy ZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0Fs dGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFND VF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2Jq ZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3Jl bGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQp OworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9z ZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdl IHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9n Z2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBz dWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkg cmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdy aXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChy ZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgor CQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNv ZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91 dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlk LCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOwor CX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNR TERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0 bXQgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJCWNoYXIJICAgKmNv bW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJY29uc3QgY2hhciAqdG1w dHlwZTsKKworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4 dDsKKwkJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9 IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisKKwkJaWYg KHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0gRENU X1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVl bmNlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiaW5kZXgiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgIm9wZXJhdG9yIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0 eXBlLCAib3BlcmF0b3IgY2xhc3MiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJvcGVyYXRvciBmYW1pbHkiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJjYXN0IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHlwZSIp ID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImRvbWFpbiIpID09IDAgfHwK KwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRyaWdnZXIiKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJjb252ZXJzaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAo b2JqLT5vYmplY3R0eXBlLCAicG9saWN5IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAicnVsZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImV4 dGVuc2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24t ZGF0YSB3cmFwcGVyIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4 dCBzZWFyY2ggY29uZmlndXJhdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgInRleHQgc2VhcmNoIGRpY3Rpb25hcnkiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBwYXJzZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInRyYW5zZm9ybSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNlcnZlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgImNvbGxhdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InVzZXIgbWFwcGluZyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImxh bmd1YWdlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidmlldyIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm1hdGVyaWFsaXplZCB2aWV3Iikg PT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAic3RhdGlzdGljcyBvYmplY3Qi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJhY2Nlc3MgbWV0aG9kIikg PT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7 CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24gZGF0YSB3cmFw cGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24tZGF0YSB3cmFw cGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJmb3JlaWduIGRhdGEg d3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRl bnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJ LyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8KKwkJZWxzZSBpZiAo c3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIsCisJCQkJCQkgc3Ry bGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0eXBlID0gcHN0cmR1 cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+ b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOworCQl9 CisKKwkJLyoKKwkJICogb2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1vZGlmaWVkIHRvIG1h a2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24gc2VydmVyIDxzZXJ2 ZXJuYW1lPiBUTyAgOiBmb3IgPnJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVybmFtZT4KKwkJICoK KwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidXNlciBtYXBwaW5n IiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKworCQkJdG1wdHlwZSA9 IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9uX3NlcnZlciA9IHN0 cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNwcmludGYoKGNoYXIg KikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1wdHlwZSwgb2JqLT5v YmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJCQlzdHJjYXQoKGNo YXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9w X2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJl aGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQo b2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAgIHN0bXQtPmJl aGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9n TG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5 cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jCmluZGV4IGE4Yjc1ZWIxYmUuLjc5MzVjMjYyODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMv bm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5o IgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05 Niw2ICs5OCw3IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRl LAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRl ID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+ cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAK IAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDMsNiArMTQ2LDggQEAgcGFyc2VfcHVibGljYXRp b25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0 ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9 PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAo c3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRs ID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzI3LDYgKzczMiw1MyBAQCBDaGVja1B1YlJlbGF0 aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgor ICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9u LgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpl dmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBP YmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJ aTsKKwlMaXN0CSAgICp0YWdzID0gTklMOworCU9pZAkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRk cmVzcyByZWZlcmVuY2VkOworCUNyZWF0ZUV2ZW50VHJpZ1N0bXQgKmRkbF90cmlnZ2VyOworCWNo YXIJCXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJdHJpZ2dlcl9mdW5jX25hbWVb TkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX25hbWVfcHJlZml4ID0g InBnX2RlcGFyc2VfdHJpZ18lc18ldSI7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVu Y19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1h a2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBz aXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5hbWUs IHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1 bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRkbF90 cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dlci0+ ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3RlbUZ1 bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFuZHM7 IGkrKykKKwl7CisJCVN0cmluZwkgICAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1h bmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCisJCXRhZ3MgPSBsYXBwZW5kKHRhZ3MsIHRhZyk7 CisJfQorCisJZGRsX3RyaWdnZXItPndoZW5jbGF1c2UgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVt KCJ0YWciLCAoTm9kZSAqKSB0YWdzLCAtMSkpOworCisJdHJpZ2dlcl9pZCA9IENyZWF0ZUV2ZW50 VHJpZ2dlcihkZGxfdHJpZ2dlcik7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBldmVudCB0cmln Z2VycyBhcyBpbnRlcm5hbGx5IGRlcGVuZGVudCBvbiB0aGUgcHVibGljYXRpb24uCisJICovCisJ T2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0cmln Z2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNzLCBE RVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24u CiAgKi8KQEAgLTc5Nyw2ICs4NDksOCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpw c3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0 ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVl c1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHViZGRsKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0g MV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04 NTcsNiArOTExLDEzMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENy ZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFu IGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgor CSAqIFRPRE86IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciBzeW50YXggdG8gYWxsb3cgcmVwbGlj YXRpb24gb2YgRERMCisJICogc3RhdGVtZW50cy4KKwkgKgorCSAqIFhYWDogVGhpcyBjb2RlIGlz IGp1c3QgdG8gc2hvdyB0aGUgcmVwbGljYXRpb24gb2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkgKiBU QUJMRSB3b3Jrcy4gV2UgbmVlZCB0byBlbmhhbmNlIHRoaXMgb25jZSB0aGUgYXBwcm9hY2ggZm9y IERETAorCSAqIHJlcGxpY2F0aW9uIGlzIGZpbmFsaXplZC4KKwkgKi8KKwlpZiAocHViYWN0aW9u cy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RS T1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxU RVJfVEFCTEV9OworCisJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdf Q1JFQVRFX0FDQ0VTU19NRVRIT0QsCisJCQlDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELAorCQkJ Q01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywKKwkJCUNNRFRBR19DT01NRU5ULAorCQkJ Q01EVEFHX0NSRUFURV9MQU5HVUFHRSwKKwkJCUNNRFRBR19BTFRFUl9MQU5HVUFHRSwKKwkJCUNN RFRBR19EUk9QX0xBTkdVQUdFLAorCQkJQ01EVEFHX0NSRUFURV9WSUVXLAorCQkJQ01EVEFHX0FM VEVSX1ZJRVcsCisJCQlDTURUQUdfRFJPUF9WSUVXLAorCQkJQ01EVEFHX0NSRUFURV9NQVRFUklB TElaRURfVklFVywKKwkJCUNNRFRBR19BTFRFUl9NQVRFUklBTElaRURfVklFVywKKwkJCUNNRFRB R19EUk9QX01BVEVSSUFMSVpFRF9WSUVXLAorCQkJQ01EVEFHX0NSRUFURV9VU0VSX01BUFBJTkcs CisJCQlDTURUQUdfQUxURVJfVVNFUl9NQVBQSU5HLAorCQkJQ01EVEFHX0NSRUFURV9TRVJWRVIs CisJCQlDTURUQUdfQUxURVJfU0VSVkVSLAorCQkJQ01EVEFHX0RST1BfU0VSVkVSLAorCQkJQ01E VEFHX0NSRUFURV9DT0xMQVRJT04sCisJCQlDTURUQUdfQUxURVJfQ09MTEFUSU9OLAorCQkJQ01E VEFHX0RST1BfQ09MTEFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9UUkFOU0ZPUk0sCisJCQlDTURU QUdfRFJPUF9UUkFOU0ZPUk0sCisJCQlDTURUQUdfQ1JFQVRFX0ZPUkVJR05fREFUQV9XUkFQUEVS LAorCQkJQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0RST1Bf Rk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwKKwkJCUNN RFRBR19BTFRFUl9FWFRFTlNJT04sCisJCQlDTURUQUdfRFJPUF9FWFRFTlNJT04sCisJCQlDTURU QUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfQUxURVJfVEVY VF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJ R1VSQVRJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlD TURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19EUk9QX1RFWFRf U0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwK KwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwKKwkJCUNNRFRBR19DUkVBVEVfVEVY VF9TRUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwK KwkJCUNNRFRBR19DUkVBVEVfUE9MSUNZLAorCQkJQ01EVEFHX0FMVEVSX1BPTElDWSwKKwkJCUNN RFRBR19EUk9QX1BPTElDWSwKKwkJCUNNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwKKwkJCUNNRFRB R19BTFRFUl9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwKKwkJCUNNRFRB R19DUkVBVEVfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwKKwkJCUNNRFRBR19EUk9Q X0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19DUkVBVEVfVFlQRSwK KwkJCUNNRFRBR19EUk9QX1RZUEUsCisJCQlDTURUQUdfQUxURVJfVFlQRSwKKwkJCUNNRFRBR19D UkVBVEVfQ0FTVCwKKwkJCUNNRFRBR19BTFRFUl9DQVNULAorCQkJQ01EVEFHX0RST1BfQ0FTVCwK KwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1IsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NM QVNTLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxURVJf T1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLAorCQkJQ01E VEFHX0FMVEVSX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1IsCisJCQlDTURUQUdf RFJPUF9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlMWSwKKwkJ CUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwKKwkJ CUNNRFRBR19EUk9QX1BST0NFRFVSRSwKKwkJCUNNRFRBR19DUkVBVEVfRlVOQ1RJT04sCisJCQlD TURUQUdfQUxURVJfRlVOQ1RJT04sCisJCQlDTURUQUdfRFJPUF9GVU5DVElPTiwKKwkJCUNNRFRB R19DUkVBVEVfVFJJR0dFUiwKKwkJCUNNRFRBR19BTFRFUl9UUklHR0VSLAorCQkJQ01EVEFHX0RS T1BfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFLAorCQkJQ01EVEFHX0FMVEVSX1RBQkxF LAorCQkJQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwKKwkJCUNNRFRBR19BTFRFUl9TRVFVRU5DRSwK KwkJCUNNRFRBR19EUk9QX1NFUVVFTkNFLAorCQkJQ01EVEFHX0NSRUFURV9TQ0hFTUEsCisJCQlD TURUQUdfQUxURVJfU0NIRU1BLAorCQkJQ01EVEFHX0RST1BfU0NIRU1BLAorCQkJQ01EVEFHX0NS RUFURV9JTkRFWCwKKwkJCUNNRFRBR19EUk9QX0lOREVYLAorCQkJQ01EVEFHX0FMVEVSX0lOREVY LAorCQkJQ01EVEFHX0dSQU5ULAorCQkJQ01EVEFHX1JFVk9LRSwKKwkJCUNNRFRBR19DUkVBVEVf UlVMRSwKKwkJCUNNRFRBR19BTFRFUl9SVUxFLAorCQkJQ01EVEFHX0RST1BfUlVMRSwKKwkJCUNN RFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLAorCQkJQ01EVEFHX0NSRUFURV9TVEFUSVNU SUNTLAorCQkJQ01EVEFHX0FMVEVSX1NUQVRJU1RJQ1MsCisJCQlDTURUQUdfRFJPUF9TVEFUSVNU SUNTCisJCX07CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dl ciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQiLCBl bmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxmLCBw dWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfc3RhcnQgZXZlbnQgdHJpZ2dl ciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9zdGFydCIs IHN0YXJ0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHN0YXJ0X2NvbW1hbmRzKSwgbXlz ZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfcmV3cml0ZSBldmVudCB0cmln Z2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX3Jld3JpdGUiLCBy ZXdyaXRlX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKHJld3JpdGVfY29tbWFuZHMpLCBt eXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2Nr KTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwg cHVib2lkLCAwKTsKQEAgLTk5NSw2ICsxMTczLDkgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1 ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1 YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKKwkJcmVwbGFjZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRl eCAyMDEzNWVmMWIwLi5lN2NjMGFkMzQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAt NTI1Myw3ICs1MjUzLDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0 cmlnZ2Vycy4KIAkgKi8KIAlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJs ZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0 ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CiAKIAkv KgogCSAqIEJ1bXAgdGhlIGNvbW1hbmQgY291bnRlciB0byBlbnN1cmUgdGhlIG5leHQgc3ViY29t bWFuZCBpbiB0aGUgc2VxdWVuY2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2Vm aWxlCmluZGV4IGM0ZTJmZGViNzEuLmYzZWViNjczMTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6 PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWRlY29kZS5vIFwKKwlkZGxt ZXNzYWdlLm9cCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKIAlsb2dpY2FsZnVuY3MubyBc CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjUwOTM1MjNlOWEKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpAQCAtMCww ICsxLDg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdlLmMKKyAqCSAg TG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkg IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogTk9U RVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcgb2YgRERM IGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2FsIGRlY29k aW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBhcmUgc2FtZSBh cyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRoZXNlIERE TCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS5Ob3RlIGJ5IGRlZmF1 bHQgRERMcyBpbiBQb3N0Z3JlU1FMIGFyZSB0cmFuc2FjdGlvbmFsLgorICoKKyAqIFRoZXNlIG1l c3NhZ2VzIGFyZSBwYXJ0IG9mIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHdpbGwgYmUgc2VudCB0 bworICogZGVjb2RpbmcgcGx1Z2luIHVzaW5nIGluIGEgc2FtZSB3YXkgYXMgRE1MIG9wZXJhdGlv bnMuCisgKgorICogRXZlcnkgbWVzc2FnZSBjYXJyaWVzIHByZWZpeCB0byBhdm9pZCBjb25mbGlj dHMgYmV0d2VlbiBkaWZmZXJlbnQgZGVjb2RpbmcKKyAqIHBsdWdpbnMuIFRoZSBwbHVnaW4gYXV0 aG9ycyBtdXN0IHRha2UgZXh0cmEgY2FyZSB0byB1c2UgdW5pcXVlIHByZWZpeCwKKyAqIGdvb2Qg b3B0aW9ucyBzZWVtcyB0byBiZSBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIGV4 dGVuc2lvbi4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9z dGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKworLyoKKyAqIFdyaXRlIGxvZ2ljYWwgZGVjb2Rp bmcgRERMIG1lc3NhZ2UgaW50byBYTG9nLgorICovCitYTG9nUmVjUHRyCitMb2dMb2dpY2FsRERM TWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgc2l6ZV90IHNpemUpCit7CisJ eGxfbG9naWNhbF9kZGxfbWVzc2FnZSB4bHJlYzsKKworCS8qCisJICogRW5zdXJlIHdlIGhhdmUg YSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4KKwkgKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRl KCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRh YmFzZUlkOworCS8qIHRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNn X2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJl Yy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21k dHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRh KChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3Rl ckRhdGEodW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlY TG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkv KiBhbGxvdyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5D TFVERV9PUklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwg WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5 IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQK K2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJ aW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChp bmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxk ZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9u bHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDJjYzBhYzllYjAu LjFmMmM3NTE3NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpA QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTYwMyw2ICs2MDQsNDYgQEAgbG9naWNhbG1zZ19k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAJCQkJCQkJICBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUpOwogfQog CisvKgorICogSGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVS ZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29k ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sK KwlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFk ZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dl dFhpZChyKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01B U0s7CisJUmVwT3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9s b2dpY2FsX2RkbF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FM X0RETF9NRVNTQUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNH X0lEIHJlY29yZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQo Y3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkg KiBJZiB3ZSBkb24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGlu ZywgdGhlcmUgaXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICov CisJaWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NO QVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0g KHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVz c2FnZS0+ZGJJZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmln aW4oY3R4LCBvcmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0No YW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3Nh Z2UtPm1lc3NhZ2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJ CQkJCSBtZXNzYWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSAr IG1lc3NhZ2UtPnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdl LT5jbWR0eXBlKTsKK30KKwogLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRs aW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggNjI1YTdmNDI3My4u OTg5NjljN2FlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s b2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMK QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYg Kzc0LDEwIEBAIHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ CSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkg ICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKK3N0YXRpYyB2b2lkIGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2Vk Q29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lk IHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCkBAIC05MCw2ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgog c3RhdGljIHZvaWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwg U2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3Ry ZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJ CQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAg aW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UpOwogCkBAIC0yMTgsNiArMjI4LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChM aXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVuY2F0 ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21taXRf Y2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBwZXI7 CisJY3R4LT5yZW9yZGVyLT5kZGxtZXNzYWdlID0gZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCiAJ LyoKIAkgKiBUbyBzdXBwb3J0IHN0cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0 L2NvbW1pdC9jaGFuZ2UKQEAgLTIzNCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0 KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9j b21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2Ig IT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwp IHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAog CQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAg LTI1MSw2ICsyNjMsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVn aW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0 X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5n ZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVz c2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+c3RyZWFtX2RkbG1lc3NhZ2UgPSBzdHJl YW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRl ID0gc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTIyMCw2ICsxMjMzLDQ0IEBA IG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0K IAorc3RhdGljIHZvaWQKK2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2 YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOwor CisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8K KwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsK KwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxs YmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0g KHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9z dGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91 dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94 aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4 LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3Jr OiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4 biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdl X3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJ ZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMg dm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhMb2dSZWNQdHIgZmlyc3RfbHNuKQpAQCAtMTUzNSw2 ICsxNTg2LDQ4IEBAIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2Fs bGJhY2sucHJldmlvdXM7CiB9CiAKK3N0YXRpYyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJ CQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVz c2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2Fs bGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKwor CUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0 byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgt PnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0 eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKwor CS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJ c3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3Nh Z2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNr LmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5h cmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250 ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBz ZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndy aXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsK KwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFs IHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2Fn ZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21k dHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK K30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZm ZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9u cywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZAppbmRleCA3NzM1ODNhMTJiLi5lN2M3MGFhMjYxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBACiBiYWNr ZW5kX3NvdXJjZXMgKz0gZmlsZXMoCisgICdkZGxtZXNzYWdlLmMnLAogICAnZGVjb2RlLmMnLAog ICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9wcm90by5jCmluZGV4IGZmODUxM2UyZDIuLmYzNTQwNjI3NWIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY2Miw2ICs2NjIsNTIgQEAgbG9naWNhbHJl cF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1Jl Y1B0ciBsc24sCiAJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOwogfQogCisvKgorICog UmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2ljYWxyZXBfcmVh ZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwKKwkJCQkJCSAgIGNv bnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkgICBTaXplICpzeikKK3sKKwl1aW50OCBmbGFnczsK KwljaGFyICptc2c7CisKKwkvL1RPRE8gZG91YmxlIGNoZWNrIHdoZW4gZG8gd2UgbmVlZCB0byBn ZXQgVHJhbnNhY3Rpb25JZC4KKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAxKTsKKwlpZiAo ZmxhZ3MgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAldSBpbiBkZGwg bWVzc2FnZSIsIGZsYWdzKTsKKwkqbHNuID0gcHFfZ2V0bXNnaW50NjQoaW4pOworCSpwcmVmaXgg PSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9IHBxX2dldG1zZ2ludChpbiwgNCk7CisJbXNn ID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4sICpzeik7CisKKwlyZXR1cm4gbXNnOworfQor CisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8gc3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxy ZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgbHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3Qg Y2hhciAqbWVzc2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0 LCBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSk7CisKKwkvKiB0cmFuc2FjdGlvbiBJRCAoaWYg bm90IHZhbGlkLCB3ZSdyZSBub3Qgc3RyZWFtaW5nKSAqLworCWlmIChUcmFuc2FjdGlvbklkSXNW YWxpZCh4aWQpKQorCQlwcV9zZW5kaW50MzIob3V0LCB4aWQpOworCisJcHFfc2VuZGludDgob3V0 LCBmbGFncyk7CisJcHFfc2VuZGludDY0KG91dCwgbHNuKTsKKwlwcV9zZW5kc3RyaW5nKG91dCwg cHJlZml4KTsKKwlwcV9zZW5kaW50MzIob3V0LCBzeik7CisJcHFfc2VuZGJ5dGVzKG91dCwgbWVz c2FnZSwgc3opOworfQorCiAvKgogICogV3JpdGUgcmVsYXRpb24gZGVzY3JpcHRpb24gdG8gdGhl IG91dHB1dCBzdHJlYW0uCiAgKi8KQEAgLTEyMTgsNiArMTI2NCw4IEBAIGxvZ2ljYWxyZXBfbWVz c2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbikKIAkJCXJldHVybiAiVFlQRSI7CiAJ CWNhc2UgTE9HSUNBTF9SRVBfTVNHX01FU1NBR0U6CiAJCQlyZXR1cm4gIk1FU1NBR0UiOworCQlj YXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJcmV0dXJuICJEREwiOwogCQljYXNl IExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJuICJCRUdJTiBQUkVQQVJF IjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggYzI5ODk0MDQxZS4uNDc0NWE0 YmJmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVy YnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL3Nsb3QuaCIKQEAgLTUxNSw2ICs1MTYsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBm cmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1F U1NBR0U6CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggIT0gTlVMTCkKKwkJCQlw ZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlICE9IE5V TEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsKKwkJCWNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZh bGlkYXRpb25zKQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKTsK QEAgLTg2OSw2ICs4NzgsMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogfQogCisvKgorICogQSB0cmFuc2FjdGlv bmFsIERETCBtZXNzYWdlIGlzIHF1ZXVlZCB0byBiZSBwcm9jZXNzZWQgdXBvbiBjb21taXQuCisg Ki8KK3ZvaWQKK1Jlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSwK KwkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpCit7CisJTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OworCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZTsKKwor CUFzc2VydCh4aWQgIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVm ZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5H RV9ERExNRVNTQUdFOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gcHN0cmR1cChwcmVm aXgpOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQgPSByZWxpZDsKKwljaGFuZ2UtPmRhdGEu ZGRsbXNnLmNtZHR5cGUgPSBjbWR0eXBlOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9z aXplID0gbWVzc2FnZV9zaXplOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSA9IHBhbGxv YyhtZXNzYWdlX3NpemUpOworCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsIG1l c3NhZ2UsIG1lc3NhZ2Vfc2l6ZSk7CisKKwlSZW9yZGVyQnVmZmVyUXVldWVDaGFuZ2UocmIsIHhp ZCwgbHNuLCBjaGFuZ2UsIGZhbHNlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKK30KKwogLyoKICAqIEFzc2VydFRYTkxzbk9yZGVyCiAgKgkJVmVyaWZ5IExTTiBvcmRl cmluZyBvZiB0cmFuc2FjdGlvbiBsaXN0cyBpbiB0aGUgcmVvcmRlcmJ1ZmZlcgpAQCAtMTk4Miw2 ICsyMDIxLDI5IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsK IH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4g Zm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitS ZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwgYm9vbCBz dHJlYW1pbmcpCit7CisJaWYgKHN0cmVhbWluZykKKwkJcmItPnN0cmVhbV9kZGxtZXNzYWdlKHJi LCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgs CisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJCQkJCSAgY2hhbmdlLT5k YXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdl X3NpemUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCWVsc2UKKwkJ cmItPmRkbG1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0 YS5kZGxtc2cucHJlZml4LAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZV9zaXplLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Up OworfQorCiAvKgogICogRnVuY3Rpb24gdG8gc3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBz aG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiBy ZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBuZXh0IHN0cmVhbS4KQEAgLTIzNjIsNiAr MjQyNCwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0 eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNz YWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKKwkJCQkJYnJlYWs7CisKIAkJCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQkJCS8qIEV4ZWN1dGUgdGhl IGludmFsaWRhdGlvbiBtZXNzYWdlcyBsb2NhbGx5ICovCiAJCQkJCVJlb3JkZXJCdWZmZXJFeGVj dXRlSW52YWxpZGF0aW9ucyhjaGFuZ2UtPmRhdGEuaW52YWwubmludmFsaWRhdGlvbnMsCkBAIC0z Nzg1LDYgKzM4NTEsNDAgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6 ZTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExN RVNTQUdFOgorCQkJeworCQkJCWNoYXIJICAgKmRhdGE7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUg PSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHBy ZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXpl b2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpICsgc2l6ZW9mKFNpemUpOworCQkJ CVJlb3JkZXJCdWZmZXJTZXJpYWxpemVSZXNlcnZlKHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChj aGFyICopIHJiLT5vdXRidWYpICsgc2l6ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKwor CQkJCS8qIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9jYXRlZCBhYm92ZSAqLworCQkJCW9uZGlzayA9 IChSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSAqKSByYi0+b3V0YnVmOworCisJCQkJLyogd3JpdGUg dGhlIHByZWZpeCwgcmVsaWQgYW5kIGNtZHR5cGUgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJ bWVtY3B5KGRhdGEsICZwcmVmaXhfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNp emVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQs IHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweShkYXRh LCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSAr PSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVm aXgsCisJCQkJCSAgIHByZWZpeF9zaXplKTsKKwkJCQlkYXRhICs9IHByZWZpeF9zaXplOworCisJ CQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5 KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsK KwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6 ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJ CWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CkBAIC00MDk5LDYgKzQxOTksMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUoUmVvcmRlckJ1 ZmZlckNoYW5nZSAqY2hhbmdlKQogCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUgKwogCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSk7CiAK KwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FH RToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKSAr IHNpemVvZihPaWQpICsgc2l6ZW9mKGludCk7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpAQCAtNDM3Niw2ICs0NDg1LDMzIEBA IFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJ CQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJ U2l6ZQkJcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHByZWZpeCAqLworCQkJCW1lbWNweSgm cHJlZml4X3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6 ZSk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkLCBkYXRhLCBzaXplb2Yo T2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0 YS5kZGxtc2cuY21kdHlwZSwgZGF0YSwgc2l6ZW9mKGludCkpOworCQkJCWRhdGEgKz0gc2l6ZW9m KGludCk7CisJCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxs b2MocmItPmNvbnRleHQsIHByZWZpeF9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLmRk bG1zZy5wcmVmaXgsIGRhdGEsIHByZWZpeF9zaXplKTsKKwkJCQlBc3NlcnQoY2hhbmdlLT5kYXRh LmRkbG1zZy5wcmVmaXhbcHJlZml4X3NpemUgLSAxXSA9PSAnXDAnKTsKKwkJCQlkYXRhICs9IHBy ZWZpeF9zaXplOworCisJCQkJLyogcmVhZCB0aGUgbWVzc2FnZSAqLworCQkJCW1lbWNweSgmY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUsIGRhdGEsIHNpemVvZihTaXplKSk7CisJCQkJZGF0 YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTWVtb3J5 Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJICBjaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSwg ZGF0YSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEg Kz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNTI1MGFlN2Y1NC4uYmU3NjJiOTNiYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0xNTYsNiArMTU2LDcg QEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicGFyc2VyL2FuYWx5 emUuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2Vy LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKQEAgLTE3OSw3ICsxODAsMTAg QEAKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFy c2UuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3Qu aCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBA IC0yNDg4LDYgKzI0OTIsMjMyIEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMp CiAJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIH0KIAorLyogUmVtb3ZlIHRoZSBkYXRhIHBvcHVs YXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3JlYXRl X3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCisJ Y29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0 Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVfQVM6CisJCWNh c2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpjYXN0 bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChjYXN0 bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9y Y2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25z aXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJs aXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEgPSB0 cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJCQl7 CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10Owor CisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgorCQkJ CQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkg KiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJ CSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1c2Ut PnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUgVEFCTEUgY29tbWFuZAorICoK KyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENSRUFURSBUQUJFTCBjb21tYW5k IHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFURV9SRUFEWSBzbyBETUwgY2hh bmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRob3V0CisgKiBoYXZp bmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24gLi4uIHJlZnJlc2ggcHVibGlj YXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNv bW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJhbmdlVmFyICAgKnJ2ID0gTlVM TDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOworCWNo YXIJICAgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnJlbG5hbWUgPSBOVUxMOworCisJ Y29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlzd2l0 Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6CisJCQl7CisJ CQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJ CQkJcnYgPSBjc3RtdC0+cmVsYXRpb247CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CWJyZWFrOworCX0KKworCWlmICghcnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+ c2NoZW1hbmFtZTsKKwlyZWxuYW1lID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAh PSBOVUxMKQorCQlyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBm YWxzZSk7CisKKwlpZiAocmVsbmFtZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0 X3JlbG5hbWVfcmVsaWQocmVsbmFtZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0g UmVsbmFtZUdldFJlbGlkKHJlbG5hbWUpOworCisJaWYgKHJlbGlkICE9IEludmFsaWRPaWQpCisJ eworCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxpZCwK KwkJCQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0cik7 CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNcIiBh ZGRlZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vic2Ny aXB0aW9uLT5uYW1lKSkpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwo U3RyaW5nSW5mbyBzKQoreworCVhMb2dSZWNQdHIJbHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9 IE5VTEw7CisJY2hhcgkgICAqbWVzc2FnZSA9IE5VTEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7 CisJU2l6ZQkJc3o7CisJTGlzdAkgICAqcGFyc2V0cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFy c2V0cmVlX2l0ZW07CisJRGVzdFJlY2VpdmVyICpyZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJY29uc3QgY2hhciAqc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19x dWVyeV9zdHJpbmc7CisKKwltZXNzYWdlID0gbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2Uocywg JmxzbiwgJnByZWZpeCwgJnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2Fj dGlvbiBjb21tYW5kICovCisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1h bmQgPSBkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9z dHJpbmcgPSBkZGxfY29tbWFuZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uICovCisJcmVjZWl2ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNl dHJlZV9saXN0ID0gcGdfcGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJz ZXRyZWVfaXRlbSwgcGFyc2V0cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0 OworCQlMaXN0CSAgICpxdWVyeXRyZWVfbGlzdDsKKwkJUmF3U3RtdCAgICAqY29tbWFuZCA9IChS YXdTdG10ICopIGxmaXJzdChwYXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRh ZzsKKwkJTWVtb3J5Q29udGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0 YWwJCXBvcnRhbDsKKwkJYm9vbAkJc25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRh ZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290 IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZy b20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisK KwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcg d2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNv bW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hv dCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0 aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bwor CQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBp biB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0 ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVy X3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5k X3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5k LAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBn X3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJ CS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLwor CQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwg PSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkv KgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBi ZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1l c3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3 aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVy eShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBj b21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkv KgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJ UG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOworCisJCS8qCisJ CSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJ ICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9y dGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0 cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOwor CisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1l bnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0 YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlw dGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkv KiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBj cmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7 CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJ ZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwogCiAvKgogICogTG9naWNhbCByZXBsaWNhdGlv biBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0yNTUzLDYgKzI3ODMsMTAgQEAgYXBw bHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlicmVhazsKIAorCQljYXNlIExP R0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJYXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJy ZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hh bmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDJlY2FhNWI5MDcuLmIxY2RhNmY2MzAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtNTMsNiArNTMs MTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJ CQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdvdXRw dXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9v bCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJ CQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2Jl Z2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2ICsy NjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2Ip CiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBw Z291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJ Y2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5jb21taXRfY2Ig PSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1 dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdfb3V0cHV0X3BsdWdp bl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2Ig PSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRw dXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJ Y2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+c3Ry ZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24gc3Ry ZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9IHBn b3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBAQCBwZ291dHB1dF9z dGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAq b3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wuICovCiAJb3B0LT5v dXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlvcHQtPnJlY2VpdmVf cmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0IGFu ZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBAQCBwZ291dHB1dF9z dGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAq b3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRhdGEtPnB1YmxpY2F0 aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0aW9u c192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhQVUJMSUNB VElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9uX2NiLApAQCAtMTM3 Nyw5ICsxMzg2LDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZSBhY3Rp b24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3QgPSBOVUxMOwog CVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJdGFibGVfcmV3cml0ZSA9 IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJ LyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhl bSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3Nh Z2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUKKwkgKiBhbmQgY2hlY2sgdGhlIHB1 YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkK Kwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVs YXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJ CXJldHVybjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChm YWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hh bmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICov CisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ cmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGlu ZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+ Y29udGV4dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJ LyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdl dHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJ CWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJl bCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJ CS8qCkBAIC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hl bWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblBy ZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5v dXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVs ZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNl cnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBp dC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1 Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFi bGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJ CQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9p bnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpA QCAtMTU5NCw2ICsxNjM0LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQog CisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyog Q2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRS ZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzEsOCArMTcxNCw4IEBAIHBnb3V0cHV0X3RydW5j YXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJh bnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKQEAgLTE3MTIsNiArMTc1NSwxMzkgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQ bHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRh ICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0 YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVs YXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1l bWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICog cGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+ eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6 CisKKwkJCS8qCisJCQkgKiBPbiBEUk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRl ZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9u IHRoYXQgc3VwcG9ydHMgZGRsIHB1YmxpY2F0aW9uLgorCQkJICogV2UgbmVlZCB0aGlzIGJlY2F1 c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQu IExhdGVyIG9uIERyb3AgZW5kLCB2ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAor CQkJICogdGhhdCBpcyBvbiB0aGUgZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5k IHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25J ZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5 ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRf b2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVs YXRpb24pOworCQkJcmV0dXJuOworCQljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCQlpZiAoIWxp c3RfbWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpKQorCQkJCXJldHVybjsK KwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxpc3RfZGVsZXRlX29pZChkYXRh LT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisJCWNhc2UgRENUX1RhYmxlQWx0 ZXI6CisKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQg dGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBzdWJzY3JpYmVyLCB0aGVuIGNvbnZl cnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJCQkgKiBVUERBVEUgYW5kIHNlbmQg dGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlz aGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkg KiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICogKDEp IFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJl bnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRo ZSBleHRyYSBkYXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4g cHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAqIHdlIG5lZWQgdG8gbGV0IHRoZSBz dWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsCisJCQkgKiB0byByZXdy aXRlIGFsbCB0aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0 ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcg cHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQKKwkJCSAqIGZ1bmN0aW9u cy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8KKwkJCSAqIHJl cGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRhdGEgY29uc2lzdGVudC4K KwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGlu ZyB0aGUgc3Vic2NyaWJlcgorCQkJICogb25seSByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3Rl YWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAqIHVzZSB0aGUgdXBjb21pbmcgcmV3 cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4KKwkJCSAqIEJlc2lkZXMsIHdl IG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUKKwkJCSAq IG9mIHJld3JpdGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRp bmcKKwkJCSAqIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIgVEFCTEUgU0VUIExPR0dFRCBhcyB0 aGUgZGF0YSBpbiB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4K KwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJ QXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0 YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdl IGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJCQkgKiBkZGwgbmVlZCB0byBiZSBw dWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9 IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsK KwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJlbGF0aW9uID0g UmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9uID09IE5VTEwp CisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJl bGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQl7CisJ CQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVh azsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUgJWQiLCBjbWR0 eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2ZW4ndCB5ZXQg Ki8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJCXBnb3V0cHV0 X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwg dHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0eC0+b3V0LAorCQkJCQkJCQl4 aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAor CQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYg KHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVy biB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1 c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmln aW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTMsNyArMjE2OSw4IEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2No ZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0J CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFs c2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7 CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkp OwpAQCAtMjA1MSw2ICsyMjI4LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9 IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnkt PnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJl IHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjQsNiArMjM0Miw3IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwog CQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBj aGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAtMjM0OSw2ICsyNTI4LDcgQEAgcmVs X3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMy IGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxzZTsKIAl9CisK IH0KIAogLyogU2VuZCBSZXBsaWNhdGlvbiBvcmlnaW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCmluZGV4IDAwZGMwZjI0MDMuLmYxYjRkMDkzY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYwpAQCAtNTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9u RGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJk ZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRl c2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVz Yy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJCS8qCiAJCSAq IENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9u IGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBiZDliMDY2ZTRlLi45N2Y0MzRhN2U4IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKQEAgLTM4OTcsNiArMzg5Nyw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0 LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1 YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsOwogCWludAkJ CWlfcHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMiwyMyArMzkxMywy MyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMp CiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4g Ki8KLQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZvdXQtPnJlbW90 ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJ CQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1 Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCQkg InAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBw LnB1YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdf cHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAw KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxl b2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJ ICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwg cC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRh YmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0 ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJP TSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJ CQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFT IHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1 YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1 YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9u IHAiKTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNf VFVQTEVTX09LKTsKQEAgLTM5NDQsNiArMzk0NSw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZl ICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihy ZXMsICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxl dGUiKTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJ aV9wdWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFm bnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMg KiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTY3LDYgKzM5NjksOCBAQCBnZXRQdWJs aWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21w KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9b aV0ucHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVu Y2F0ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFn ZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2 aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0 IikgPT0gMCk7CiAKQEAgLTQwNDYsNiArNDA1MCwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2 ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNl OwogCX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFyb290KQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmgKaW5kZXggNDI3ZjVkNDVmNi4uNjg1NjgzZWViMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MjAsNiAr NjIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YmRlbGV0 ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290OworCWJvb2wJCXB1YmRk bDsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxk dW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2Yjhj MTdiYjRjLi43OTJmNDM4OTU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRl c2MuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjcsNiArMjcsNyBA QAogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFi bGVzcGFjZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKKyNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgi CiAjaW5jbHVkZSAicm1ncmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgi CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCmluZGV4IGM2NDVkNjY0MTguLjJlOTRmY2E3NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MTU5LDcg KzYxNTksNyBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUFFFeHBC dWZmZXJEYXRhIGJ1ZjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9wdCBteW9wdCA9 IHBzZXQucG9wdDsKLQlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2Zh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJ c3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChw c2V0LnN2ZXJzaW9uIDwgMTAwMDAwKQogCXsKQEAgLTYxOTQsNiArNjE5NCwxMCBAQCBsaXN0UHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYs CiAJCQkJCQkgICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9u b29wKCJWaWEgcm9vdCIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCWFwcGVu ZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVzXCIiLAorCQkJ CQkJICBnZXR0ZXh0X25vb3AoIkRETHMiKSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CkBAIC02Mjg0 LDYgKzYyODgsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CVBHcmVzdWx0ICAgKnJlczsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1 YnZpYXJvb3Q7CisJYm9vbAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsK IAlwcmludFRhYmxlQ29udGVudCBjb250OwpAQCAtNjMwMCw2ICs2MzA1LDcgQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChw c2V0LnN2ZXJzaW9uID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lv biA+PSAxMzAwMDApOworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKTsK IAogCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKIApAQCAtNjMxMyw2ICs2MzE5LDkgQEAgZGVzY3Jp YmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlpZiAoaGFzX3B1YnZpYXJvb3Qp CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnZpYXJvb3QiKTsK KwlpZiAoaGFzX3B1YmRkbCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkg IiwgcHViZGRsIik7CiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9N IHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02MzY0LDYgKzYzNzMsOCBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNvbHMrKzsKIAkJ aWYgKGhhc19wdWJ2aWFyb290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlu Y29scysrOwogCiAJCWluaXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQUUV4cEJ1ZmZl cigmdGl0bGUsIF8oIlB1YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM3OCw2ICs2Mzg5 LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50 VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVHJ1bmNhdGVzIiksIHRydWUsIGFs aWduKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29u dCwgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpLCB0cnVlLCBhbGlnbik7CisJCWlmIChoYXNfcHVi ZGRsKQorCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJERExzIiks IHRydWUsIGFsaWduKTsKIAogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShy ZXMsIGksIDIpLCBmYWxzZSwgZmFsc2UpOwogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFn ZXR2YWx1ZShyZXMsIGksIDMpLCBmYWxzZSwgZmFsc2UpOwpAQCAtNjM4OCw2ICs2NDAxLDggQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVB ZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJCWlm IChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVl KHJlcywgaSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRU YWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2UsIGZhbHNlKTsK IAogCQlpZiAoIXB1YmFsbHRhYmxlcykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3JsaXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCAwMDBi Y2JmZGFmLi4zN2RmZDQ1MWY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxp c3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBA QCBQR19STUdSKFJNX0NPTU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNv bW1pdF90c19kZXNjLCBjb21taXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVw bGljYXRpb25PcmlnaW4iLCByZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9y aWdpbl9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJ Q19JRCwgIkdlbmVyaWMiLCBnZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVu dGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FM TVNHX0lELCAiTG9naWNhbE1lc3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVz YywgbG9naWNhbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNv ZGUpCitQR19STUdSKFJNX0xPR0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxv Z2ljYWxkZGxtc2dfcmVkbywgbG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50 aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsZGRsbXNnX2RlY29kZSkKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IGMzZDllNThiZjMuLjQ4MTMzYmQ2MjAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtMTE4MzQsNCArMTE4MzQsMTMgQEAKIHsgb2lkID0+ICc0NjQzJywgZGVzY3Ig PT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCiAgIHBy b25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4 dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBh bmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2Rk bF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0 eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2Vu ZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5k IGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9j b21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5 cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFu ZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJv YXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdy aXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IGVjZjVhMjhl MDAuLmRhZmQ0ODM3NmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0 LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRp b25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIHB1Ymxpc2hlZCB1c2lu ZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkvKiB0cnVlIGlmIHRhYmxl IGNyZWF0aW9ucyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHViZGRsOwogfSBGb3JtRGF0YV9w Z19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArNzUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9v bAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIH0gUHVi bGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCAxMDA5MWMzYWFmLi5mZDJlZTdmZmU0IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4IEBAIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRk cmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJz ZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmpl Y3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChO b2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJ CQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMzFhNzY2ZmVlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwv ZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExf TUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAi YWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAq IFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5 cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1Rf VGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlE Q1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7 CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29y ZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJ CWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9z aXplOwkvKiBsZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJcmVsaWQ7CQkJLyogaWQgb2YgdGhl IHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOwkvKiB0eXBlIG9mIHNxbCBj b21tYW5kICovCisJU2l6ZQkJbWVzc2FnZV9zaXplOwkvKiBzaXplIG9mIHRoZSBtZXNzYWdlICov CisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0ZWQgcHJlZml4IG9m IGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxFWElCTEVfQVJSQVlf TUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmluZSBTaXplT2ZMb2dp Y2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSwgbWVzc2FnZSkp CisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkg ICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisvKiBSTUdSIEFQSSov CisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lkCQlsb2dpY2FsZGRs bXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9naWNhbGRkbG1zZ19k ZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Citjb25zdCBjaGFy ICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uNDI3YTdiOTk3ZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQgaGVhcDJfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4 dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1Jl Y29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1 ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQg TG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOTdlZC4uNWQ2MTc0ODRmYiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBl bnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAog CUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0g J00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxPR0lDQUxfUkVQX01T R19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAog CUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yMjksNyArMjMwLDEx IEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0 ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0 X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJCQkJCQkgYm9vbCB0 cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4 LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQg bG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRf ZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNvbnN0IGNoYXIgKipw cmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0cmlu Z0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgQml0 bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24gKmxvZ2ljYWxyZXBf cmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1 Z2luLmgKaW5kZXggYjdkMjhkNzA0NS4uNzYzZTQzZjZiZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTAsNiArOTAsMTggQEAgdHlwZWRlZiB2b2lkICgqTG9n aWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVz c2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29kaW5nIERETCBtZXNz YWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1lc3NhZ2VDQikgKHN0 cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJ CQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6 ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8q CiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KQEAgLTIwMSw2ICsyMTMsMTkgQEAg dHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwK IAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxiYWNrIGZv ciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVz cworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3Ry ZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJ CQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ CQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICptZXNzYWdlKTsKKwogLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVz IGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCkBAIC0yMjEsNiArMjQ2LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVRydW5j YXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNvbW1pdF9jYjsKIAlM b2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZURETE1lc3Nh Z2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRl cl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAK QEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MK IAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9jYjsKIAlMb2dpY2Fs RGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dpY2FsRGVjb2RlU3Ry ZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVTdHJlYW1ERExN ZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbVRydW5j YXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxsYmFja3M7CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUwZTIuLjgzZTBiMWUyZTUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0eXBlZGVmIHN0 cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJTGlzdAkgICAq cHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxpc3QJICAgKmRl bGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1pbmc7CiAJYm9vbAkJ bWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggMDJi NTlhMTkzMS4uYTlhMjAwZjgwMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v cmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5o IgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFs LmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hl LmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlw ZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJFT1JERVJfQlVGRkVS X0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9NRVNTQUdFLAogCVJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBS ZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNzYWdlOwogCQl9CQkJbXNnOwogCisJ CS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJeworCQkJY2hhcgkgICAqcHJlZml4Owor CQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAqbWVzc2FnZTsKKwkJCU9pZAkJCXJl bGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlOworCQl9CQkJZGRsbXNnOworCiAJ CS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09ICpfSU5URVJOQUxfU05BUFNIT1Qg Ki8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2ICs0NDgsMTYgQEAgdHlwZWRlZiB2 b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAogCQkJCQkJ CQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICpt ZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVm IHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCisJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNz YWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAog CQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKQEAgLTUwMSw2ICs1MjQsMTcgQEAg dHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAogCQkJCQkJCQkJ CQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFy ICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAq LwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQikgKAorCQkJ CQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQsCisJCQkJCQkJ CQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJIFNpemUgc3os CisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVhbSB0cnVuY2F0 ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJl YW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJiLApAQCAtNTUy LDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlckFwcGx5VHJ1 bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0Q0IgY29tbWl0Owog CVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyRERMTWVzc2Fn ZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiBz dHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NzEsNiArNjA2LDcg QEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3Ry ZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsK IAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJC dWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2U7CiAJUmVvcmRlckJ1ZmZl clN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKQEAgLTY1MCw2ICs2ODYs OSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1Jl Y1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJl Zml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIg KnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3Nh Z2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lk IFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlk LAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJ CQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExv Z1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IGE3 ZjU3MDBlZGMuLmJmYzczYzIzMjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAt NTk3MCw5ICs1OTcwLDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5z dWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4uMmI3 Y2QwZDU5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAg LTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25z CiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0 cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1l ICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9p bnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQg ICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBO YW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAg ICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZh dWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm Ci0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcg dGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0t IHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24K IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5 LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8g ZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJw KyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1Ig VEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNF VCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0x MjMsMTAgKzEyMywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9S IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3JfdGJsX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rl c3QudGVzdHB1Yl9ub3BrOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3Rw dWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEz NSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEg dGFibGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRoZSBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0cHVi X25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0x NDcsMTAgKzE0NywxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUg dG8gZHJvcCB0aGUgdGFibGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIERS T1AgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hl bWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAK QEAgLTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMg bm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFi bGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNj aGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25v cGsiCiAKQEAgLTE4NiwxMCArMTg2LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9m b3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAg ICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIw MSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJs MzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3Ri bDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90 YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl90YmwzIgogCkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQx IFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNh dGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFy dGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0 ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVk CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBA IC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFS VElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAx OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwx MCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3Jm X3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAt MzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBB REQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDApOwog XGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0 ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMxOSwxMCArMzE5LDEwIEBAIFB1YmxpY2F0aW9uczoKIAog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBc ZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3Ri bDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAo ZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3Rw dWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBl eHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJf cmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDMw MCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEwICszNjYsMTAgQEAgU0VUIGNsaWVudF9taW5f bWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MSBG T1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8 IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hF UkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJM RSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hF UkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50 ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JF QVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZf c2NoZW1hMjsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1B IHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFCTEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZf dGJsNiBXSEVSRSAoaSA8IDk5KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0 ZXN0cHViNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjYKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHVi X3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEw ICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1 Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3Ri bDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTg5MSwxMCArODkx LDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGlu dCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQURE IFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxk UnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEp CiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90Ymwx IiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJS T1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0 ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3Rw dWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNDAsMTAgKzExNDAsMTAg QEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9k ZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf ZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9w ayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVW T0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJf dGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAt LSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTIzNCwyMCArMTIzNCwy MCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0 CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBU TyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtl ZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUg VE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9X TkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBh bmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9T Q0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2Vz ID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0ICsxMjg5LDQ0IEBAIENSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NI RU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUg IkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNF9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxk UnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEu Q1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEg InRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hv dWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rl c3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNzEs MjAgKzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBzY2hl bWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NIRU1B IHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVSIFNDSEVNQSBwdWJfdGVz dDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2No ZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQwNCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjog IHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDE2LDEwICsxNDE2LDEwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEg QUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0 MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIK IFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsx NDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9w IHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQz OCwxMCArMTQzOCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJP UjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1 YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQ0OSwyOSArMTQ0OSwy OSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6 ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0 ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3Qy OwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0ODAsMTAg KzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwog RVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5Miwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hl bWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApA QCAtMTU3NCwxOCArMTU3NCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgog KDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1 OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2Zv cnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEs IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNj aGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgotLSAKMi4zNy4xCgo= --000000000000dd2b4805ebf605cf Content-Type: application/octet-stream; name="v32-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v32-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l9q3gzd50 RnJvbSAyOGQyMzk5NTQzZjljZmIwNWQ5Zjk5NDY1ZDI4NTM4M2Y2ZTFmZDJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjAgT2N0IDIwMjIgMDA6MDg6NTAgLTA0MDAKU3ViamVjdDogW1BBVENI IDEvNF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpDUkVBVEUvQUxURVIvRFJPUCBGT1JFSUdOIERBVEEgV1JBUFBFUgpDUkVBVEUvQUxU RVIvRFJPUCBSVUxFCkNSRUFURS9BTFRFUi9EUk9QIFNFUlZFUgpDUkVBVEUvQUxURVIvRFJPUCBD T0xMQVRJT04KR1JBTlQKUkVWT0tFClJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKQ1JFQVRFL0FM VEVSL0RST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIvRElDVElPTkFSWS9URU1Q TEFURQpDUkVBVEUvRFJPUCBUUkFOU0ZPUk0KQ1JFQVRFL0FMVEVSL0RST1AgVVNFUiBNQVBQSU5H CkNSRUFURS9BTFRFUi9EUk9QIFZJRVcgLS0gTm90ZSAjNApDUkVBVEUvQUxURVIvRFJPUCBNQVRF UklBTElaRUQgVklFVwpDUkVBVEUvQUxURVIvRFJPUCBTVEFUSVNUSUNTCkNSRUFURS9BTFRFUi9E Uk9QIExBTkdVQUdFCkNPTU1FTlQKQUxURVIgREVGQVVMVCBQUklWSUxFR0VTCkNSRUFURS9EUk9Q IEFDQ0VTUyBNRVRIT0QKCihOb3RlICMxKSBOb3RlIHRoYXQgc29tZSByZWNlbnRseSBpbnRyb2R1 Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9ORUQgVEFCTEUpIGFyZSB1bnN1 cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1vcmUKZnVuY3Rpb25hbGl0eSBm b3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIE5vdGUgdGhhdCwgZm9yIEFUVEFDSC9ERVRB Q0ggUEFSVElUSU9OLCB3ZSBoYXZlbid0IGFkZGVkIGV4dHJhIGxvZ2ljIG9uCnRoZSBzdWJzY3Jp YmVyIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciBp cyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gdGhlIHN1YmNy aWJlciBzaWRlIGlzIGEgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBh bmQgaW1wcm92ZSBpdCBsYXRlci4KCihOb3RlICMzKSBSZW1vdmVkIGFuIHVuZGVzaXJhYmxlICdv bicgZnJvbSB0aGUgaWRlbnRpdHkgc3RyaW5nIGZvciBUUkFOU0ZPUk0KaW4gZ2V0T2JqZWN0SWRl bnRpdHlQYXJ0cy4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBkZXBhcnNlIG9mIERST1AKVFJBTlNG T1JNIGNvbW1hbmQgd29yayBzaW5jZSAnb24nIGlzIG5vdCBwcmVzZW50IGluIHRoZSBjdXJyZW50 CkRST1AgVFJBTlNGT1JNIHN5bnRheC4gRm9yIGV4YW1wbGUsIHRoZSBjb3JyZWN0IHN5bnRheCBp cwpkcm9wIHRyYW5zZm9ybSB0cmYgZm9yIGludCBsYW5ndWFnZSBzcWw7Cmluc3RlYWQgb2YKZHJv cCB0cmFuc2Zvcm0gdHJmIGZvciBpbnQgb24gbGFuZ3VhZ2Ugc3FsOwoKKE5vdGUgIzQpIE5vdGUg dGhhdCwgZm9yIFZJRVdTVE1ULCBXZSBjcmVhdGVkIHBnX2dldF92aWV3ZGVmX2ludGVybmFsIHRv IGdldCB0aGUKU0VMRUNUIHF1ZXJ5IG9mIHRoZSBwZW5kaW5nIFZJRVdTVE1ULiBJbiB0aGUgY2Fz ZSB0aGF0IHRoZSBDUkVBVEUgVklFVyBjb21tYW5kCmlzIHN0aWxsIGluIHByb2dyZXNzLCB3ZSB3 b3VsZCBuZWVkIHRvIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0 aGUKcmV3cml0ZSBydWxlIG9mIHRoZSB2aWV3IGFzIG9wcG9zZSB0byBxdWVyeWluZyBwZ19yZXdy aXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dvcmtlcigpLAp0aGUgbGF0dGVyIHdpbGwgcmV0dXJu IGVtcHR5IHJlc3VsdC4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jICAgICAgICAg ICAgICAgICB8ICAgIDQgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgICAg ICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAgICAgICAg ICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jICAgICAg ICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAgICAgICAg ICB8IDkyODMgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jICAgICAgICAgICAgICB8ICA3NjQgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1 aWxkICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j ICAgICAgICAgICAgICB8ICAgMzMgKwogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgICAgICAg ICAgICAgICAgICAgfCAgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUu YyAgICAgICAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAg ICAgICAgICAgIHwgICA1MiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAg ICAgICAgICB8ICAyNTIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAg ICAgICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggICAg ICAgICB8ICAgIDMgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggICAgICAgICAg ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgICAgICAg ICB8ICAgMjMgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgICAgICAg fCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oICAgICAgICAgIHwg ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICAgICAgICAgICB8ICAg IDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICAgICAgICAgICAgfCAgIDE5 ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0IHwgICAgMiAr LQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgfCAgICA0ICsK IDIyIGZpbGVzIGNoYW5nZWQsIDEwMzk2IGluc2VydGlvbnMoKyksIDc1IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hr LmMKaW5kZXggYWE1YTJlZDk0OC4uN2RjMTkwZGRlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCkBAIC0z ODUsNyArMzg1LDExIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCQkJZXJl cG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAogCQkJCQkgZXJybXNnKCJncmFudG9yIG11c3QgYmUgY3VycmVudCB1c2VyIikpKTsKKworCQlp c3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CiAJfQorCWVsc2UKKwkJaXN0bXQuZ3JhbnRvcl91 aWQgPSBJbnZhbGlkT2lkOwogCiAJLyoKIAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50U3RtdCBp bnRvIHRoZSBJbnRlcm5hbEdyYW50IGZvcm0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRh bG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j CmluZGV4IDI4NGNhNTU0NjkuLjA4NGFjZWJiZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRk cmVzcy5jCkBAIC02MDAxLDcgKzYwMDEsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0 IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1UeXBlID0gZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJdHJhbnNmb3JtTGFuZyA9IGdl dF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFsc2UpOwogCi0JCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdlICVzIiwKKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMiLAogCQkJCQkJCQkgdHJhbnNm b3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJCWlmIChvYmpuYW1lKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4ZjkxLi4xNzFkZmIyODAwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9N YWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVhdGVh cy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8gXAog CWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29sbGF0aW9uY21kcy5jCmluZGV4IGZjZmMwMmQyYWUuLmJiMjFjY2QzZjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAgLTUwLDcgKzUwLDggQEAgdHlwZWRlZiBzdHJ1Y3QK ICAqIENSRUFURSBDT0xMQVRJT04KICAqLwogT2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wg aWZfbm90X2V4aXN0cykKK0RlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVj dEFkZHJlc3MgKmZyb21fY29sbGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNv bGxOYW1lc3BhY2U7CkBAIC0xMzcsNiArMTM4LDEyIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9l CiAJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKiBtYWtlIGZyb20g ZXhpc3RpbmcgY29sbGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgKi8KKwkJaWYgKGZyb21f Y29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJCQlPYmplY3RBZGRyZXNzU2V0KCpmcm9t X2NvbGxpZCwKKwkJCQkJCQkJIENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCSBjb2xsaWQp OworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkp LT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVuY29kaW5n ID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGluZzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw MDAwMDAuLjQ4OWUwYWU2OGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEsOTI4MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogZGRsX2RlcGFyc2UuYworICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNv bW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBp cyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5k cywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdz IGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04g b2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICog dGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVj dHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFj dHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1h bmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3Ry dWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24g c2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisj aW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgor I2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgor I2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnZl cnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2RlcGVuZC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfZXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2RhdGFfd3Jh cHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZmFtaWx5 LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3JhbmdlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19yZXdyaXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJh bnNmb3JtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19jb25maWcuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3RzX2RpY3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3BhcnNlci5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfdGVtcGxhdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3R5cGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3VzZXJfbWFwcGluZy5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZvcmVpZ24vZm9yZWlnbi5o IgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFu ZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1n cm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5o IgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0 aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVO IDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2Vu dGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVl LCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlw ZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJ T2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlw ZTsKKworLyoKKyAqIFJlcHJlc2VudCB0aGUgY29tbWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9i amVjdCB0cmVlIHBhcmFtZXRlcnMgKi8KKwlpbnQJCQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2Yg cGFyYW1ldGVycyBpbiB0aGUgb2JqZWN0IHRyZWUgKi8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkv KiBGb3JtYXQgc3RyaW5nIG9mIHRoZSBPYmpUcmVlICovCisJYm9vbAkJcHJlc2VudDsJCS8qIElu ZGljYXRlcyBpZiBib29sZWFuIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsK KworLyoKKyAqIEFuIGVsZW1lbnQgb2YgYW4gb2JqZWN0IHRyZWUoT2JqVHJlZSkuCisgKi8KK3R5 cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1lOwkJCS8qIE5hbWUgb2Ygb2Jq ZWN0IGVsZW1lbnQgKi8KKwlPYmpUeXBlCQlvYmp0eXBlOwkJLyogT2JqZWN0IHR5cGUgKi8KKwor CXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0 CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZSAgICAqb2JqZWN0OworCQlMaXN0 CSAgICphcnJheTsKKwl9CQkJdmFsdWU7CQkJLyogU3RvcmUgdGhlIG9iamVjdCB2YWx1ZSBiYXNl ZCBvbiB0aGUgb2JqZWN0CisJCQkJCQkJCSAqIHR5cGUgKi8KKwlzbGlzdF9ub2RlCW5vZGU7CQkJ LyogVXNlZCBpbiBjb252ZXJ0aW5nIGJhY2sgdG8gT2JqRWxlbQorCQkJCQkJCQkgKiBzdHJ1Y3R1 cmUgKi8KK30gT2JqRWxlbTsKKworLyoKKyAqIFJlZHVjZSBzb21lIHVubmNlc3Nhcnkgc3RyaW5n IGZyb20gdGhlIG91dHB1dCBqc29uIHN0dWZmIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50 IiBtZW1iZXIgaXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJn ZWQgaW50bworICogdGhlIGxhc3QgRERMIGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0 cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKm5hbWUsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVu ZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgZmxvYXQ4IHZhbHVlKTsK K3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1l KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg Km5hbWUsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zv cm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBh cHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0 aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBj aGFyICp2YWx1ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwg Y2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMgTGlz dCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cyk7CitzdGF0aWMgT2Jq RWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9ialRy ZWUgKm5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElk KTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNw ZWMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsK K3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4u Lik7CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOworc3Rh dGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25i UGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVk KE9pZCBpbmRleHJlbGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCQkJCSBj aGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCQkJ CSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpOworc3Rh dGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1i ZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4cHJzKTsKK3N0 YXRpYyBjb25zdCBjaGFyICpzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpOwor CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJCQkJCSAgQ29sdW1uRGVmICpjb2xk ZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycyk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJf dGFibGUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRh YmxlQ21kICpzdWJjbWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9Db2xs YXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJCQkJCSBPYmpl Y3RBZGRyZXNzIGZyb21Db2xsaWQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3Rt dF9PcGVyYXRvcihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwgT2JqZWN0QWRkcmVzcyBjb3BpZWQpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RT RGljdGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpOworCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0g KmVsZW0sIGJvb2wgaXNfcmVzZXQpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRnVuY3Rpb25T ZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRp YyBPYmpUcmVlICpkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7 CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1 YmNtZCk7CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOwor c3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVt ICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ug c2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFf T3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxl KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9UeXBlX1N0b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9y bSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpk ZXBhcnNlX1R5cGVfU2VuZChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9UeXBlX1R5cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9y bSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9BbmFseXplKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpk ZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZv cm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsK K3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBl ZCwgYm9vbCBjb21wb3NpdGUpOworCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0 ZVBvbGljeSBvciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVjdHMKKyAqLworc3RhdGljIHZvaWQK K2FkZF9wb2xpY3lfY2xhdXNlcyhPYmpUcmVlICpwb2xpY3lTdG10LCBPaWQgcG9saWN5T2lkLCBM aXN0ICpyb2xlcywKKwkJCQkgICBib29sIGRvX3F1YWwsIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sK KwlSZWxhdGlvbglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQo cG9sUmVsLCBBbnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kg cG9sRm9ybTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKworCXBv bEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogYWRkIHRo ZSAiT04gdGFibGUiIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBvbGljeVN0bXQs ICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7CisKKwkv KgorCSAqIEFkZCB0aGUgIlRPIHJvbGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENSRUFURSBj YXNlLCBpdCBhbHdheXMKKwkgKiBjb250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBpbiB0aGUg QUxURVIgY2FzZSBpdCBtaWdodCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJeworCQlM aXN0CSAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2Vs bCwgcm9sZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0 KGNlbGwpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9v YmplY3QobmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2Fy cmF5X29iamVjdChwb2xpY3lTdG10LCAiVE8gJXtyb2xlOiwgfVIiLCBsaXN0KTsKKwl9CisJZWxz ZQorCXsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2Up OworCX0KKworCS8qIGFkZCB0aGUgVVNJTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVh bCkKKwl7CisJCURhdHVtCQlkZXBhcnNlZDsKKwkJRGF0dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJ CWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19w b2xpY3lfcG9scXVhbCwKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251 bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2xxdWFs IGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJl Y3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxp ZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJVU0lORyAoJXtleHByZXNz aW9ufXMpIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNlKTsK KworCS8qIGFkZCB0aGUgV0lUSCBDSEVDSyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRo X2NoZWNrKQorCXsKKwkJRGF0dW0JCWRlcGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhwcjsKKwkJ Ym9vbAkJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVt X3BnX3BvbGljeV9wb2x3aXRoY2hlY2ssCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xS ZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5V TEwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBw b2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBvbGljeVN0bXQsICJX SVRIIENIRUNLICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5n KGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQs ICJwcmVzZW50IiwgZmFsc2UpOworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworfQorCisvKiBBcHBlbmQgYW4gYXJyYXkgcGFyYW1ldGVyIHRvIGEgdHJlZSAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCwgTGlzdCAqYXJyYXkpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAobGlzdF9sZW5ndGgoYXJyYXkp ID09IDApCisJCXJldHVybjsKKworCWlmICghdmVyYm9zZSkKKwl7CisJCUxpc3RDZWxsICAgKmxj OworCisJCS8qIEV4dHJhY3QgdGhlIE9iakVsZW1zIHdob3NlIHByZXNlbnQgZmxhZyBpcyB0cnVl ICovCisJCWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICAgICplbGVtID0gKE9i akVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlw ZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJ CWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9 PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJh eSwgbGMpOworCQl9CisKKwl9CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9y bWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBl QXJyYXksIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBl bmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKiBBcHBlbmQgYSBib29sZWFu IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYm9vbF9vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAg ICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJYm9vbAkJaXNfcHJl c2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkvKgorCSAqIENoZWNr IGlmIHRoZSBwcmVzZW50IGlzIHBhcnQgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHN0b3JlIHRo ZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50 IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQg PSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVy bjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmpl Y3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFw cGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFs dWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlB c3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0 X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxv YXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQg Zm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9m b3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVu OworCWNoYXIJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVy bjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+ bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAw ICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+ Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1 Yl9mbXQpOworfQorCisvKiBBcHBlbmQgYSBOVUxMIG9iamVjdCB0byBhIHRyZWUgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkK K3sKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICgh dmVyYm9zZSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zv cm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJl ZSwgbmV3X29iamVjdChPYmpUeXBlTnVsbCwgb2JqZWN0X25hbWUpKTsKK30KKworLyogQXBwZW5k IGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29i amVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUp Cit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3Nl cnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1 cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVl LCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3Rf bmFtZSk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29i amVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdo aWNoIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxl IHN0cmluZy4gQW5kIGFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJl ZS4KKyAqLworc3RhdGljIGNoYXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9i alRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEgb2JqZWN0X25h bWU7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwljb25zdCBjaGFyICpjcDsKKwlib29sCQlzdGFy dF9jb3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8g PT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25h bWUpOworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVuKHN1Yl9mbXQpOworCisJZm9yIChjcCA9 IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWlmICgqY3AgPT0gJ3snKQorCQl7 CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdGFy dF9jb3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpjcCA9PSAnOicgfHwgKmNwID09ICd9JykK KwkJCWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9iamVjdF9uYW1lLCAq Y3ApOworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9i amVjdCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3Vi X2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKK30KKworLyogQXBwZW5kIGEgcHJl YWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBw ZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xp c3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJh bXMrKzsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0 YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmpl Y3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAodmFsdWUg PT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUg PSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJh bSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1 ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOwor fQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJl dHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICogc2VwYXJhdGVseToKKyAqCisgKiAtIG5z cGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRhaW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdo aWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVzLCB3ZSByZXR1cm4gSW52YWxpZE9pZDsg dGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBxdWFsaWZ5IHRoZSBu YW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBjYXNlLgorICoKKyAq IC0gdHlwbmFtZSBpcyBzZXQgdG8gdGhlIHR5cGUgbmFtZSwgd2l0aG91dCBxdW90ZXMKKyAqCisg KiAtIHR5cGVtb2RzdHIgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFzIGEgc3RyaW5n IHdpdGggcGFyZW50aGVzZXMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRlcyB3aGV0aGVyIFtd cyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5hbWVz IHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAqIGluIHRoZSBjYXNl cyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitzdGF0aWMgdm9pZAor Zm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkg T2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9v bCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCXR1cGxlOworCUZvcm1fcGdfdHlwZSB0eXBlZm9y bTsKKwlPaWQJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShU WVBFT0lELCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUg JXUiLCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0 dXBsZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJsZSBsZW5n dGgpIGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkgdHlwZXMg c3VjaCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLworCWFycmF5 X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGFycmF5ID0gKElzVHJ1ZUFy cmF5VHlwZSh0eXBlZm9ybSkgJiYgdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gVFlQU1RPUkFHRV9Q TEFJTik7CisKKwlpZiAoKnR5cGFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24g dG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwor CQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5 X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJ dHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9 IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3Ig dHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBtb2Qg YXQgdGhlIG1pZGRsZSBvZiBuYW1lKGUuZy4gVElNRSg2KSB3aXRoIHRpbWUgem9uZSApLiBXZSBj YW5ub3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1l IGluIHRoZXNlIGNhc2VzLgorCSAqLworCWlmICh0eXBlX29pZCA9PSBJTlRFUlZBTE9JRCB8fAor CQl0eXBlX29pZCA9PSBUSU1FU1RBTVBPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QVFpP SUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRU9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FVFpPSUQp CisJeworCQlzd2l0Y2ggKHR5cGVfb2lkKQorCQl7CisJCQljYXNlIElOVEVSVkFMT0lEOgorCQkJ CSp0eXBuYW1lID0gcHN0cmR1cCgiSU5URVJWQUwiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElN RVNUQU1QVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkqdHlwbmFtZSA9IHBzdHJk dXAoIlRJTUVTVEFNUCBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3 aXNlLCBXSVRIIFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3Ry ZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJ CSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJ TUVUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgi VElNRSBXSVRIIFRJTUUgWk9ORSIpOworCQkJCWVsc2UKKwkJCQkJLyogb3RoZXJ3aXNlLCBXSVRI IFRaIGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1F Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxpZE9pZDsKKwl9CisJ ZWxzZQorCXsKKwkJLyoKKwkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVk IGZvciBvdGhlciB0eXBlcywgc28gZ2V0IHRoZQorCQkgKiB0eXBlIG5hbWUgYW5kIHNjaGVtYSBk aXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkgKi8KKwkJKm5zcGlkID0gdHlwZWZvcm0tPnR5 cG5hbWVzcGFjZTsKKwkJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5h bWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlw bW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9k c3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisvKgor ICogUmV0dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMgb2YgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24s IGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpCit7CisJTGlzdAkg ICAqbm9kZWRlZnM7CisJTGlzdAkgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUodGV4dF90b19jc3RyaW5nKHBy b2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9nKEVSUk9S LCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxsLCBub2Rl ZGVmcykKKwl7CisJCU5vZGUJICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsKKworCQlzdHJkZWZz ID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVmLCBOSUwsIGZhbHNl LCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgorICogUmV0dXJuIHRo ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVl LgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVu Y2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0Vf VEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9VTkxP R0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1B TkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVj dGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7 CQkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0KK30KKworLyogQWxsb2NhdGUgYSBuZXcg cGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwg Y2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChz aXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlwYXJhbS0+b2JqdHlwZSA9 IHR5cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBw YXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUg KnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9i alR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJl dHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0 b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVl KGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAgICpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2Mw KHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0 KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0g bWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGlu Zm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVyIHJv dXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMg InNjaGVtYW5hbWUiIGFuZCAib2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lE CisgKiBjb3JyZXNwb25kcyB0byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1w Ii4KKyAqCisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVz IGlzIHdoZXRoZXIgdGhlIG9iam5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZp ZXIgb3Igbm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBj b25jZXJucyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rp b24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQg bnNwaWQsIGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAg Km5hbWVzcGFjZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3Bh Y2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNw YWNlX25hbWUobnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwK KwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJ CQkgICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJu IHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQg YW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNz SWQvb2JqSWQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlICAgICpxdWFs aWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlv Ympuc3A7CisJRGF0dW0JCW9iam5hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51 bWJlcglBbnVtX25hbWVzcGFjZTsKKwlBdHRyTnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9h dHRudW1fb2lkKGNsYXNzSWQpOworCWJvb2wJCWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9v cGVuKGNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19v YmplY3RfYnlfb2lkKGNhdGFsb2csIEFudW1fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmop CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0 YWxvZyBcIiVzXCIiLAorCQkJIG9iamVjdElkLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRh bG9nKSk7CisJQW51bV9uYW1lID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlB bnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKwor CW9iam5zcCA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdl dERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWVzcGFjZSIpOworCisJb2JqbmFtZSA9IGhlYXBf Z2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJ CQkJCSAgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVk IE5VTEwgbmFtZSIpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERh dHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1l KG9iam5hbWUpKSk7CisJdGFibGVfY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBv YmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IG5hbWUuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlKGNoYXIgKnJvbGVuYW1lKQoreworCU9ialRyZWUJICAg KnJvbGU7CisKKwlyb2xlID0gbmV3X29ianRyZWVfVkEoTlVMTCwyLAorCQkJCQkJICAiaXNfcHVi bGljIiwgT2JqVHlwZUJvb2wsIHN0cmNtcChyb2xlbmFtZSwgInB1YmxpYyIpID09IDAsCisJCQkJ CQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGVuYW1lKTsKKwlyZXR1cm4gcm9sZTsK K30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBz cGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9M RVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3Bl YyAqc3BlYykKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCWNoYXIJICAgKnJvbGV0eXBlOworCisJ aWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJQykKKwkJcm9sZXR5cGUgPSBnZXRf cm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0eXBlID0gcHN0cmR1cCgiIik7CisK Kwlyb2xlID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIsIE9i alR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkgICJy b2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30KKwor LyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZp ZWQgYnkgT0lELiAgKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIikuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xlb2lk KQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlyb2xlID0gbmV3X29ianRyZWUoIiIpOworCisJ aWYgKHJvbGVvaWQgIT0gQUNMX0lEX1BVQkxJQykKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJ CWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lE LCBPYmplY3RJZEdldERhdHVtKHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJv bHR1cCkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5F RF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0 Iiwgcm9sZW9pZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkg R0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9s ZSwgIiV7cm9sZW5hbWV9SSIsIHBzdHJkdXAocm9sZW5hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2Fj aGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyb2xlLCAiJXty b2xlbmFtZX1JIiwgInB1YmxpYyIpOworCisJcmV0dXJuIHJvbGU7Cit9CisKKy8qCisgKiBBIGhl bHBlciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlP YmpUcmVlICAgICp0eXBlUGFyYW07CisJT2lkCQkJdHlwbnNwaWQ7CisJY2hhcgkgICAqdHlwbnNw OworCWNoYXIJICAgKnR5cGVuYW1lID0gTlVMTDsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJYm9v bAkJdHlwYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJ CQkJCSAmdHlwbnNwaWQsICZ0eXBlbmFtZSwgJnR5cG1vZHN0ciwgJnR5cGFycmF5KTsKKworCWlm IChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29y X3RlbXAodHlwbnNwaWQpOworCWVsc2UKKwkJdHlwbnNwID0gcHN0cmR1cCgiIik7CisKKwl0eXBl UGFyYW0gPSBuZXdfb2JqdHJlZV9WQShOVUxMLCA0LAorCQkJCQkJCSAgICJzY2hlbWFuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwbnNwLAorCQkJCQkJCSAgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJp bmcsIHR5cGVuYW1lLAorCQkJCQkJCSAgICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2Rz dHIsCisJCQkJCQkJICAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGFycmF5KTsKKworCXJl dHVybiB0eXBlUGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0 byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KKyAqCisgKiBUaGUg ImZtdCIgYXJndW1lbnQgaXMgdXNlZCB0byBhcHBlbmQgYXMgYSAiZm10IiBlbGVtZW50IGluIHRo ZSBvdXRwdXQgYmxvYi4KKyAqIG51bW9ianMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZXh0cmEg ZWxlbWVudHMgdG8gYXBwZW5kOyBmb3IgZWFjaCBvbmUsIGEKKyAqIG5hbWUgKHN0cmluZyksIHR5 cGUgKGZyb20gdGhlIE9ialR5cGUgZW51bSkgYW5kIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQuICBU aGUKKyAqIHZhbHVlIG11c3QgbWF0Y2ggdGhlIHR5cGUgZ2l2ZW47IGZvciBpbnN0YW5jZSwgT2Jq VHlwZUludGVnZXIgcmVxdWlyZXMgYW4KKyAqIGludDY0LCBPYmpUeXBlU3RyaW5nIHJlcXVpcmVz IGEgY2hhciAqLCBPYmpUeXBlQXJyYXkgcmVxdWlyZXMgYSBsaXN0IChvZgorICogT2JqRWxlbSks IE9ialR5cGVPYmplY3QgcmVxdWlyZXMgYW4gT2JqVHJlZSwgYW5kIHNvIG9uLiAgRWFjaCBlbGVt ZW50IHR5cGUgKgorICogbXVzdCBtYXRjaCB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIgZ2l2ZW4g aW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGRlc2NyaWJlZAorICogaW4gZGRsX2RlcGFyc2VfZXhw YW5kX2NvbW1hbmQsIHEudi4KKyAqCisgKiBOb3RlIHdlIGRvbid0IGhhdmUgdGhlIGx1eHVyeSBv ZiBzcHJpbnRmLWxpa2UgY29tcGlsZXIgd2FybmluZ3MgZm9yCisgKiBtYWxmb3JtZWQgYXJndW1l bnQgbGlzdHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX1ZBKGNoYXIgKmZt dCwgaW50IG51bW9ianMsLi4uKQoreworCU9ialRyZWUgICAgKnRyZWU7CisJdmFfbGlzdAkJYXJn czsKKwlpbnQJCQlpOworCisJLyogU2V0IHVwIHRoZSB0b3BsZXZlbCBvYmplY3QgYW5kIGl0cyAi Zm10IiAqLworCXRyZWUgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyogQW5kIHByb2Nlc3MgdGhl IGdpdmVuIHZhcmFyZ3MgKi8KKwl2YV9zdGFydChhcmdzLCBudW1vYmpzKTsKKwlmb3IgKGkgPSAw OyBpIDwgbnVtb2JqczsgaSsrKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJT2JqVHlwZQkJdHlw ZTsKKwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQluYW1lID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7 CisJCXR5cGUgPSB2YV9hcmcoYXJncywgT2JqVHlwZSk7CisJCWVsZW0gPSBuZXdfb2JqZWN0KHR5 cGUsIE5VTEwpOworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUg bXVzdCBiZSBhIHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRo ZSBmdWxseSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJ c3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVOdWxsOgorCQkJCS8qIE51bGwgcGFy YW1zIGRvbid0IGhhdmUgYSB2YWx1ZSAob2J2aW91c2x5KSAqLworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlQm9vbDoKKwkJCQllbGVtLT52YWx1ZS5ib29sZWFuID0gdmFfYXJnKGFyZ3MsIGlu dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQkJZWxlbS0+dmFsdWUu c3RyaW5nID0gdmFfYXJnKGFyZ3MsIGNoYXIgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5 cGVBcnJheToKKwkJCQllbGVtLT52YWx1ZS5hcnJheSA9IHZhX2FyZyhhcmdzLCBMaXN0ICopOwor CQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCQllbGVtLT52YWx1ZS5pbnRl Z2VyID0gdmFfYXJnKGFyZ3MsIGludDY0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZs b2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJy ZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZh X2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisK KwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVt KTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRl IGEgbmV3IHN0cmluZyBvYmplY3QgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19zdHJpbmdfb2Jq ZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJQXNzZXJ0KHZhbHVl KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBOVUxMKTsKKwlwYXJhbS0+ dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBQcm9j ZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhl IG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90 b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7 CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5m byA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXku dHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFs LnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVp bHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3Ry aW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVl LT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFs KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2Jq VHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJl ZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9y ZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKwor LyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFs IGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBw YXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChK c29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVy YXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVl CXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVs bDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxl bV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2 YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmpl Y3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVl LnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1l cmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmlj KERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+ dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBq YnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXRO dW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJ b2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1f dG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50 eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVh bjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBSZWN1cnNpdmVseSBhZGQgdGhlIG9i amVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29u Yl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T2JqVHlwZUFycmF5OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVks IE5VTEwpOworCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJ CU9iakVsZW0gICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0cmVlX3RvX2pzb25i X2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2Jq dHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBv Ymp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pz b25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0 X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwg TlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKwor CXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9i amVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25i VmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpi dlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJ CWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29y ZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9i amVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQg b3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8K KyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5l ZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBh bmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFp bnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3Ry YWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJ UmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBt YXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFs bCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7 CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZrZXksCisJ CQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAorCQkJ CQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2ggY29u c3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIEluCisJ ICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0 aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRpY2F0 ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4K KwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQo c2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJICAg KmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQljYXNl IENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJCS8qIG5vdCBoZXJlICov CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkga2V5 IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlwZSA9 ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJCQkJ Y29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9FWENM VVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVmYXVs dDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOworCQl9 CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBw cmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5 IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVyZW50 IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwgdG8g YWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29uc3Ry ID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLAor CQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwK KwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJ CSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRk ZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVu ZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVf ZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlv biwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBj b2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBj b250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0 aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2lu ZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwK KwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJ CQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJ SGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9h bTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlG b3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAq aW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7 CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsK KwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJ aXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFz czsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1 ZjsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhl IGluZGV4CisJICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggJXUiLCBpbmRl eHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisK KwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4 cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3Ms IGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRj b2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAo b2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVt X3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xh c3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWlu ZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwp OworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25E YXR1bSk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19jbGFzcyB0dXBsZSBvZiB0aGUgaW5kZXgg cmVsYXRpb24KKwkgKi8KKwlodF9pZHhyZWwgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmpl Y3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4 cmVsKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uICV1 IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVscmVjID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVCho dF9pZHhyZWwpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4 JyBhY2Nlc3MgbWV0aG9kCisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2Ft KSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25z LCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9u cyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRp c3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhl YXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJewor CQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51 bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhw cnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9 IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5n KTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3Rf aGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVs X25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlv bkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1 b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhl IGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5l KGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4g IE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgor CSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7IGtleW5vKysp CisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVlc1trZXlub107 CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1trZXlub107CisJCU9pZAkJCWtleWNv bHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJaW5kY29sbDsKKworCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAwID8gIiIgOiAi LCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBpbmRleCBjb2x1 bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlwbW9kOworCisJ CQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2UpOworCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRu YW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51bSwKKwkJCQkJ CQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5Y29sY29sbGF0 aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRleCAqLworCQkJ Tm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChpbmRleHByX2l0 ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGluIGluZGV4cHJz IGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJfaXRlbSk7CisJ CQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsKKwkJCS8qIERl cGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1 bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHBy KSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9F WFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYs IHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIigl cykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5 Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBBZGQg Y29sbGF0aW9uLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+ dmFsdWVzW2tleW5vXTsKKwkJaWYgKE9pZElzVmFsaWQoaW5kY29sbCkpCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9j b2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNz IG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlnZXRfb3BjbGFzc19uYW1lKGluZGNsYXNzLT52 YWx1ZXNba2V5bm9dLCBJbnZhbGlkT2lkLCAmZGVmaW5pdGlvbkJ1Zik7CisKKwkJLyogQWRkIG9w dGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJewor CQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywgcmVwb3J0IERFU0MgYW5kIE5VTExT IG9wdHMgKi8KKwkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVTQykKKwkJCXsKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERFU0MiKTsKKwkJCQkvKiBOVUxMUyBG SVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8KKwkJCQlpZiAoIShvcHQgJiBJTkRP UFRJT05fTlVMTFNfRklSU1QpKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0 aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAob3B0 ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZk ZWZpbml0aW9uQnVmLCAiIE5VTExTIEZJUlNUIik7CisJCQl9CisJCX0KKworCQkvKiBYWFggZXhj bHVkZU9wcyB0aGluZ3kgd2FzIGhlcmU7IGRvIHdlIG5lZWQgYW55dGhpbmc/ICovCisJfQorCSpk ZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJLyogT3V0cHV0IHJlbG9wdGlvbnMg Ki8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9ucyhpbmRleHJlbGlkKTsKKworCS8q IE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0YmxzcGM7CisKKwkJdGJsc3BjID0g Z2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZCh0YmxzcGMp KQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoZ2V0X3RhYmxlc3Bh Y2VfbmFtZSh0YmxzcGMpKSk7CisJCWVsc2UKKwkJCSp0YWJsZXNwYWNlID0gTlVMTDsKKwl9CisK KwkvKiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNu dWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAg Km5vZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJ LyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhf aW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRl eHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1Rv Tm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAq LworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQs IGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8q IENsZWFuIHVwICovCisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hl KGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFp biB0aGUgZGVwYXJzZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUg Z2l2ZW4gdGFibGUuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFy c2UgY29udGV4dC4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0 KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJ IExpc3QgKipleHBycykKK3sKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOwor CisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0g ZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJ LyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBmb3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNo ZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7 CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0 aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3IgdGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMg Y2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJ ZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBs ZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJCQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxw YXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0 RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVs ZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFy c2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJp bmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5 cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dS RUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQly ZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7 CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2Fz ZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JK RUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJ TjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJ CXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJl dHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdO IERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJu ICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JF SUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9O IjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpF Q1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VP QkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6 CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoK KwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJ CXJldHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAi T1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJ Q1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpF Q1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJl dHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVF TkNFIjsKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElD UyI7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JK RUNUX1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9U UklHR0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFU SU9OOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKworCQkvKgorCQkg KiBjYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgorCQkgKgkJcmV0dXJuICJURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkgKi8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9O QVJZOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1Rf VFNQQVJTRVI6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNU X1RTVEVNUExBVEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBP QkpFQ1RfVFlQRToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElO RzoKKwkJCXJldHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJl dHVybiAiVklFVyI7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBv YmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVj dGVkQ29tbWFuZCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBU aGUgY29tbWFuZCBpcyBleHBhbmRlZCBmdWxseSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3Vp dGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitE YXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3Rl ZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCWNoYXIJICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoY21kLCB0cnVlKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJp bmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQorCisvKgorICog RGVwYXJzZSBhbiBBbHRlckNvbGxhdGlvblN0bXQgKEFMVEVSIENPTExBVElPTikKKyAqCisgKiBH aXZlbiBhIGNvbGxhdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckNvbGxhdGlvbihPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpzdG10OworCUhlYXBUdXBsZQlj b2xUdXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsKKworCWNvbFR1cCA9IFNlYXJjaFN5 c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9ybSA9IChGb3Jt X3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTExBVElPTiAle2lkZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OIiwgMSwKKwkJ CQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3Ry KGNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbFR1cCk7CisKKwly ZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFM VEVSIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRp bmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1bmN0 aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqYWx0ZXJGdW5jOworCU9ialRyZWUgICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NUdXA7 CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkvKiBH ZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9j VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNUSU9O ICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5DVElP TiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZyB0byBnZXQK KwkgKiBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5w cm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlwZSIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5kX29i amVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFy YW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJlfXMi LCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVsZW0g ICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBv YmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcp LCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkJIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCQkiQ0FM TEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCQkiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VD VVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGlu dFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCQkiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09G IiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwK KwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhk ZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYg KGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0 bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJ VmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsK KwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJ CXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2 YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIp ID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJ CQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1l IGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJl bnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJ CQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJ CQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmZtdCA9IHBzcHJpbnRmKCJQ QVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKGZtdCk7CisJCX0KKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJGdW5jLCAiJXtk ZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwor CXJldHVybiBhbHRlckZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT2JqZWN0U2No ZW1hU3RtdCAoQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBHaXZlbiB0aGUg b2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoT2JqZWN0QWRk cmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmplY3RBZGRyZXNzIG9s ZHNjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RT Y2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRlclN0bXQ7CisJY2hhcgkg ICAqZm10OworCWNoYXIJICAgKmlkZW50aXR5OworCWNoYXIJICAgKm5ld3NjaGVtYTsKKwljaGFy CSAgICpvbGRzY2huYW1lOworCWNoYXIJICAgKmlkZW50OworCisJbmV3c2NoZW1hID0gbm9kZS0+ bmV3c2NoZW1hOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgJXMg JXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SQorCSAqLworCWZtdCA9IHBzcHJp bnRmKCJBTFRFUiAlcyIsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUpKTsKKwlh bHRlclN0bXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgY29tbWFu ZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisJICog Y2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVjdCBuYW1lIHdpdGgg dGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQgb2Ygb3VyIGRlcGFy c2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFtZSwgaG93ZXZlciwg c28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0eQorCSAqIHN0cmluZyBh bmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBYWFggVGhp cyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAqLworCWlkZW50aXR5ID0g Z2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRzY2huYW1lID0gZ2V0X25h bWVzcGFjZV9uYW1lKG9sZHNjaGVtYS5vYmplY3RJZCk7CisJaWYgKCFvbGRzY2huYW1lKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwK KwkJCSBvbGRzY2hlbWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsIHF1 b3RlX2lkZW50aWZpZXIob2xkc2NobmFtZSksCisJCQkJCSBpZGVudGl0eSArIHN0cmxlbihxdW90 ZV9pZGVudGlmaWVyKG5ld3NjaGVtYSkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlclN0 bXQsICIle2lkZW50aXR5fXMiLCBpZGVudCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRl clN0bXQsICJTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCBuZXdzY2hlbWEpOworCisJcmV0dXJu IGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9SRVZPS0UgY29tbWFuZC4K KyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENv bW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpUcmVlICAgICpncmFu dFN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKm9ianR5cGU7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAgICAqdG1w OworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFy ZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4gU0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVu IHdlCisJICogbmVlZCBub3QgZG8gYW55dGhpbmcuCisJICovCisJaWYgKGlzdG10LT5vYmplY3Rz ID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsK KwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUg PSAiVEFCTEUiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOwor CQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VRVUVOQ0UiOworCQkJY2xh c3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01B SU46CisJCQlvYmp0eXBlID0gIkRPTUFJTiI7CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7 CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJb2JqdHlwZSA9ICJGT1JFSUdOIERB VEEgV1JBUFBFUiI7CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCW9ianR5cGUgPSAi Rk9SRUlHTiBTRVJWRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJb2JqdHlwZSA9ICJGVU5DVElP TiI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9QUk9DRURVUkU6CisJCQlvYmp0eXBlID0gIlBST0NFRFVSRSI7CisJCQljbGFzc0lk ID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5F OgorCQkJb2JqdHlwZSA9ICJST1VUSU5FIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJb2JqdHlwZSA9ICJM QU5HVUFHRSI7CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJb2JqdHlwZSA9ICJMQVJHRSBPQkpFQ1QiOwor CQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQSI7CisJCQljbGFzc0lkID0gTmFtZXNw YWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJb2JqdHlw ZSA9ICJUWVBFIjsKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCW9ianR5 cGUgPSAiIjsKKwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2Jh bCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0K KworCS8qIEdSQU5UIFRPIG9yIFJFVk9LRSBGUk9NICovCisJaWYgKGlzdG10LT5pc19ncmFudCkK KwkJZm10ID0gcHNwcmludGYoIkdSQU5UIik7CisJZWxzZQorCQlmbXQgPSBwc3ByaW50ZigiUkVW T0tFIik7CisKKwlncmFudFN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDApOworCisJLyogYnVp bGQgYSBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQvcmV2b2tlICovCisJaWYgKGlzdG10LT5h bGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxMIFBSSVZJTEVHRVMiLCAw KTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVs c2UKKwl7CisJCWxpc3QgPSBOSUw7CisKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lO U0VSVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQi KSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1QpCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiU0VMRUNUIikpOworCQlpZiAoaXN0bXQtPnBy aXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QoIlVQREFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVU RSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7 CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FURSkKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwkJaWYgKGlzdG10LT5w cml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiUkVGRVJFTkNFUyIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX1RSSUdHRVIpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgi VFJJR0dFUiIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiRVhFQ1VURSIpKTsKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIlVTQUdFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfQ1JFQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNS RUFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRFTVBPUkFSWSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ09OTkVDVCIpKTsKKworCQlpZiAoIWlzdG10LT5pc19n cmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3Jh bnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9u ID8gIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3ByaXZzICE9 IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2NlbGwsIGlz dG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChvY2Vs bCk7CisJCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJCXRtcCA9IG5ld19vYmp0cmVlKCIi KTsKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNvbHMpCisJCQkJeworCQkJCQlTdHJpbmcJICAg KmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMgPSBsYXBw ZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xuYW1lKSkp OworCQkJCX0KKwkJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle2NvbHM6LCB9cykiLCBj b2xzKTsKKworCQkJCWlmIChwcml2LT5wcml2X25hbWUgPT0gTlVMTCkKKwkJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMiLCAiQUxMIFBSSVZJTEVHRVMiKTsKKwkJ CQllbHNlCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwg cHJpdi0+cHJpdl9uYW1lKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRT dG10LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGdyYW50U3RtdCwgIiV7b2JqdHlwZX1zIiwgb2JqdHlwZSk7CisKKwkvKiB0YXJnZXQgb2Jq ZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5JTDsKKwlm b3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJb2JqaWQgPSBsZmlyc3Rf b2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRkci5jbGFzc0lkID0gY2xh c3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9iamVjdFN1YklkID0gMDsK KworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIs IGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2dGFyZ2V0Oiwg fXMiLCBsaXN0KTsKKworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGdyYW50U3RtdCwgIlRPIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFu dFN0bXQsICJGUk9NIik7CisKKwkvKiBsaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJCWdyYW50ZWUgPSBs Zmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50 ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxp c3QpOworCisJLyogdGhlIHdvcmRpbmcgb2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAu Li4gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFu dFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlkKQor CXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdyYW50 b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5ncmFudG9yX3Vp ZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNU KHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAi R1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShy b2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCXsKKwkJaWYgKGlzdG10LT5i ZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICIle2Nhc2NhZGV9cyIsICJDQVNDQURFIik7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGdyYW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIiIpOworCX0KKworCXJldHVybiBncmFu dFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBP UEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKgorICogR2l2ZW4gYW4gb3BlcmF0b3IgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJSGVhcFR1cGxlCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRlck9w ZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqYWx0ZXJvcDsKKwlGb3JtX3Bn X29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAgICpsaXN0ID0g TklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9wclR1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiAle2lk ZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAoJXtlbGVt czosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1Ig JXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcg Ki8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAq LworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0t PmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJy ZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRt cG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1z KSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJv cDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9Q IGNvbW1hbmQuCisgKgorICogR2l2ZW4gdGhlIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiB0aGUg SlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIEFsdGVyIE9wIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpj bWQpCit7CisJT2JqVHJlZSAgICAqYWx0ZXJPcEZhbTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3Rt dCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRw OworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxs ICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkg IE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2Jq ZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkg JXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AKKwkgKiAle2l0ZW1zOix9cwor CSAqLworCWFsdGVyT3BGYW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgRkFNSUxZ ICV7aWRlbnRpdHl9RCAiCisJCQkJCQkJCSJVU0lORyAle2FtbmFtZX1JIiwgMiwKKwkJCQkJCQkJ ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSkpLAorCQkJCQkJCQkiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgc3RtdC0+YW1u YW1lKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ub3BlcmF0 b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRy ZWUgICAgKnRtcG9iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBP UEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtwdXJw b3NlfXMKKwkJICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1u IiwgMSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIpOworCisJ CS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhp cyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSk7 CisJCX0KKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIigle2x0eXBlfVQsIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+ bGVmdHR5cGUsIC0xKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cnR5cGV9 VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7 CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZTsgbm90IGlu IHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWlmIChvcGVy LT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQkJZWxzZQorCQkJeworCQkJCU9i alRyZWUgICAgKnRtcG9iajI7CisKKwkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBP UkRFUiBCWSIsIDApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICIle29wZmFt aWx5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZh bWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOwor CQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJfQorCisJZm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ucHJvY2VkdXJlcykKKwl7 CisJCU9wRmFtaWx5TWVtYmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0 bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7 bHR5cGV9VCwgJXtydHlwZX1UKSIsIDMsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwg cHJvYy0+bnVtYmVyLAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jLT5yaWdo dHR5cGUsIC0xKSk7CisKKwkJLyoKKwkJICogQWRkIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmcg dHlwZXM7IHRoZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlCisJCSAqIHRoaXMKKwkJICovCisJCWlm ICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1fcGdf cHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAqYXJn bGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NGb3Jt LT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFwcGVu ZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRt cG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczos IH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisK KwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ryb3Ap CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VTeXND YWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0 aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNz IGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChB bHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqb3duZXJTdG10OworCWNo YXIJICAgKmZtdDsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIE9X TkVSIFRPICUle25ld293bmVyfUkiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9i amVjdFR5cGUpKTsKKworCW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJ CQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldE9iamVjdElkZW50 aXR5KCZhZGRyZXNzLCBmYWxzZSksCisJCQkJCQkJICAgIm5ld293bmVyIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkgICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOworCisJcmV0 dXJuIG93bmVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoK KyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqYWx0ZXJTZXE7CisJT2JqVHJlZSAg ICAqdG1wb2JqOworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBz ZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9y bV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNl dHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2Vw YXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1w dHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVy biBOVUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJ cmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJl bCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlz ZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNU KHNlcXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+ cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlv bikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1w b2JqKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJj 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 IHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclR5cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0 bXQgKmFsdGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7CisJT2JqVHJlZSAg ICAqYWx0ZXJUeXBlOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOwor CUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZv cm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlhbHRlclR5cGUgPSBuZXdfb2JqdHJl ZSgiQUxURVIgVFlQRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVHlwZSwgIiV7aWRl bnRpdHl9RCBTRVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWZvcmVhY2gocGwsIGFsdGVy VHlwZVNldFN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVt ICopIGxmaXJzdChwbCk7CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVf U3RvcmFnZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAicmVjZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZShhbHRl clR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU2VuZChhbHRlclR5cGUsIHR5cEZvcm0pOwor CQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9UeXBlX1R5cG1vZF9PdXQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X0FuYWx5emUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInN1YnNjcmlwdCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0 KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5 cGUgb3B0aW9uICVzIiwgZGVmZWwtPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVt cywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVHlwZSwgIigle2Rl ZmluaXRpb246IH1zKSIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCisJ cmV0dXJuIGFsdGVyVHlwZTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3Rt dCAoQ1JFQVRFIFRZUEUgQVMpCisgKgorICogR2l2ZW4gYSBDb21wb3NpdGUgdHlwZSBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDb21wb3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqY29tcG9zaXRlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9y bV9wZ190eXBlIHR5cGZvcm07CisJUmVsYXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRl eHQ7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBl bnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNl YXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciB0eXBlICV1Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QodHlwdHVwKTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50 eXByZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4 dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlv bkdldFJlbGlkKHR5cGVyZWwpKTsKKworCWNvbXBvc2l0ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbXBvc2l0ZSwgIiV7aWRlbnRp dHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJ CSAgZmFsc2UsCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJCQkJICB0cnVlKTsJLyogY29tcG9zaXRl IHR5cGUgKi8KKworCWFwcGVuZF9hcnJheV9vYmplY3QoY29tcG9zaXRlLCAiQVMgKCV7Y29sdW1u czosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwl0YWJsZV9jbG9zZSh0eXBlcmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOworCisJcmV0dXJuIGNvbXBvc2l0ZTsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVDb252ZXJzaW9uU3RtdAorICoKKyAqIEdpdmVu IGEgY29udmVyc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQljb25UdXA7CisJUmVsYXRpb24JY29u dnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlICAgICpjY1N0bXQ7 CisJT2JqVHJlZSAgICAqdG1wT2JqOworCisJY29udnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lv blJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZv cm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCS8qCisJICog VmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7 aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorCSAqIEZST00gJXtmdW5jdGlv bn1ECisJICovCisJY2NTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQg dGhlIERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVm YXVsdCIsCisJCQkJCQkgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKwor CXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2Us IE5hbWVTdHIoY29uRm9ybS0+Y29ubmFtZSkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3Rt dCwgIkNPTlZFUlNJT04gJXtpZGVudGl0eX1EIiwgdG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29i amVjdChjY1N0bXQsICJGT1IgJXtzb3VyY2V9TCIsIChjaGFyICopCisJCQkJCQkgcGdfZW5jb2Rp bmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNvZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1MIiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190 b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2RpbmcpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj Y1N0bXQsICJGUk9NICV7ZnVuY3Rpb259RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnBy b2MpKTsKKworCXRhYmxlX2Nsb3NlKGNvbnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gY2NTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUg VFlQRSBBUyBFTlVNKQorICoKKyAqIEdpdmVuIGEgRW51bSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVu dW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWVu dW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBUWVBFIik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXZh bHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnZhbHMpCisJeworCQlTdHJpbmcJICAg KnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJdmFsdWVzID0gbGFwcGVuZCh2 YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7CisJfQorCisJYXBwZW5kX2Fy cmF5X29iamVjdChlbnVtdHlwZSwgIkFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgdmFsdWVzKTsK KwlyZXR1cm4gZW51bXR5cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRXh0ZW5zaW9u U3RtdAorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVFeHRlbnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVl OworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdf ZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqZXh0U3RtdDsKKwlPYmpUcmVlICAgICp0 bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUkgJXtvcHRpb25zOiB9cworCSAqLworCisJcGdfZXh0ZW5zaW9uID0gdGFibGVf b3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVuc2lvbl9v aWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChl eHRUdXApOworCisJZXh0U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRVhURU5TSU9OIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtuYW1lfUkiLCBub2RlLT5leHRuYW1lKTsKKwor CS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNl bGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJewor CQkJLyogc2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8K KwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdf dmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7 dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24i LAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQor CQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7 CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2Jq VHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBT Q0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1J IiwKKwkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJz Y2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3Jt LT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIGRvbmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGV4dFN0bXQsICIl e29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZXh0U3RtdDsKK30KKworLyoKKyAqIElmIGEgY29sdW1u IG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBpdCdz IGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJlZSAg ICAqdG1wOworCisJaWYgKGNvbG5hbWUpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59SSIsCisJCQkJCQkJIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBj b2xuYW1lKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPUFRJT05TIiwgMCk7CisK KwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJCUxp c3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlEZWZF bGVtICAgICplbGVtOworCQkJT2JqVHJlZSAgICAqb3B0OworCisJCQllbGVtID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsKKwkJ CQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJl bH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVs ZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJv b2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBE RUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkgJXt2 YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVm bmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxl bS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihl bGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1f QUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVlfUwi LCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAor CQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcg PyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8g IlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9QOgor CQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJCQkJ CSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIsIGVs ZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9IGxh cHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVuZF9h cnJheV9vYmplY3QodG1wLCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiB0 bXA7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAoQ1JFQVRFIEZPUkVJR04g REFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGFuIEZEVyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVG ZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQg Km5vZGUgPSAoQ3JlYXRlRmR3U3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZkd1R1cDsK KwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRpb24JcmVsOwor CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZWwgPSB0 YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJ CQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWln bi1kYXRhIHdyYXBwZXIgJXUiLCBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9y ZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJY3JlYXRlU3RtdCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwg MSwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihmZHdGb3JtLT5m ZHduYW1lKSk7CisKKwkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3 aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExF UiIsIDApOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXtoYW5kbGVyfXMiLCB0bXApOworCisJLyogYWRkIFZBTElEQVRPUiBj bGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRPaWQpCisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsKKwllbHNlCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAi dmFsaWRhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2 YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dmFs aWRhdG9yfXMiLCB0bXApOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8K KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIs CisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJl bGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJG ZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcg T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUKKyAqIEpT T04gYmxvYiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUFsdGVyRmR3U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOwor CUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3Jt OworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICphbHRlclN0bXQ7CisJTGlzdAkgICAqZmR3 X29wdGlvbnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxlX29wZW4o Rm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdU dXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3Jh cHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFf d3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkg ICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsK KworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNoYW5nZWQs IGJ1dCB1c2UgY2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9yIG5ldyB2YWx1ZXMuCisJICovCisJ Zm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVt OworCQlPYmpUcmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAo cGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8q IGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52 YWxpZE9pZCkKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCQkJ ZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJl fUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdG b3JtLT5mZHdoYW5kbGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29w dGlvbnMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoZWxlbS0+ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBW QUxJREFUT1IgY2xhdXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFs aWRPaWQpCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCQkJ ZWxzZQorCQkJeworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1 cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZk d0Zvcm0tPmZkd3ZhbGlkYXRvcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZk d19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBI QU5ETEVSL1ZBTElEQVRPUiBpZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFs dGVyU3RtdCwgIiV7ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisKKwkvKiBhZGQg YW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy U3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhu b2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJs ZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisg KiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJhbmdlOworCU9ialRy ZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9uCXBnX3Jh bmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlT Y2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3JhbmdlID0gdGFi bGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUlu aXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisK KwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwg dHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dl dG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBvaWQgJXUiLAor CQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1Qo cmFuZ2VUdXApOworCisJcmFuZ2UgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsK Kwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVj dElkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyYW5nZSwgIiV7aWRlbnRpdHl9RCBBUyBSQU5H RSIsIHRtcCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YnR5cGUp OworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLAorCQkJCQkJIDIs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJCSAidHlw ZSIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlv biwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlp ZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJ ICByYW5nZUZvcm0tPnJuZ3N1Ym9wYyk7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBF X09QQ0xBU1MgPSAle29wY2xhc3N9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVj dCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElzVmFsaWQocmFu Z2VGb3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nv bGxhdGlvbik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlv bn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xs YXRpb24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVm aW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ fQorCisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5v bmljYWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCk7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNhbH1EIiwKKwkJCQkJCQkg MiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAorCQkJCQkJ CSAiY2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBl bmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogU1VCVFlQ RV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKTsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0 eXBlX2RpZmYiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJhbmdlLCAiKCV7ZGVmaW5pdGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCisJc3lz dGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gcmFuZ2U7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51 bVN0bXQuCisgKgorICogR2l2ZW4gYW4gZW51bSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0 eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRl ckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRlckVudW07CisKKwlhbHRl ckVudW0gPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGFsdGVyRW51bSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOwor CisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVu dW0sICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtp Zl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCSBub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAi JXt2YWx1ZX1MIiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3Ip CisJCXsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7YWZ0ZXJfb3JfYmVm b3JlfXMiLAorCQkJCQkJCQkgbm9kZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JF Iik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25laWdoYm91cn1MIiwg bm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLAorCQkJCQkJ CSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle25l d3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiBhbHRlckVu dW07Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhU RU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9OKQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiAg T0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBw YXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7CisJ Rm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUg ICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlw Z19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24s IEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5z aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4 dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQgVVBEQVRFIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGV4dEZv cm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFt ZSkpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAg Km9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVm bmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZl cnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmco b3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0 LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle29wdGlvbnM6 IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFeHRlbnNp b25Db250ZW50c1N0bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2JqZWN0KQorICoK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkJICAgT2JqZWN0QWRkcmVz cyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICpub2RlID0g KEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpz dG10OworCWNoYXIJICAgKmZtdDsKKworCUFzc2VydChub2RlLT5hY3Rpb24gPT0gKzEgfHwgbm9k ZS0+YWN0aW9uID09IC0xKTsKKworCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiBFWFRFTlNJT04gJSV7 ZXh0aWRlbnRpdHl9SSAlcyAlcyAlJXtvYmppZGVudGl0eX1zIiwKKwkJCQkgICBub2RlLT5hY3Rp b24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5vYmp0eXBlKSk7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLCAiZXh0aWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5leHRuYW1lLAorCQkJCQkJICAib2Jq aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmb2Jq ZWN0QWRkcmVzcywgZmFsc2UpKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJz ZSBhbiBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBw YXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlQ2FzdFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlQ2FzdFN0bXQgKm5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0 aW9uCWNhc3RyZWw7CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNhc3RGb3Jt OworCU9ialRyZWUgICAgKmNyZWF0ZUNhc3Q7CisJY2hhcgkgICAqY29udGV4dDsKKworCWNhc3Ry ZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNhc3RU dXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhc3RyZWwsIEFudW1fcGdfY2FzdF9vaWQs IG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjYXN0IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2FzdCkgR0VUU1RSVUNUKGNhc3RUdXApOworCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1U IEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlzbX1zCisJICogJXtjb250ZXh0fXMKKwkgKi8K KwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9 VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJCQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNl LCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9k ZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlz bX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQg RlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVlICAgICp0bXBvYmo7CisJCVN0cmluZ0lu Zm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zv cm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBj YXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0lu Zm8oJmZ1bmMsICIlcygiLAorCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9u YW1lc3BhY2VfbmFtZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQlOYW1l U3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkg ICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tp XSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJ CQkJImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsKKworCQlS ZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQor CXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQi OworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAi QVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJ CWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7 CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVDYXN0OworfQorCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KENvbGxlY3RlZENv bW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlclN0bXQ7CisJQWx0ZXJEZWZhdWx0UHJp dmlsZWdlc1N0bXQgKnN0bXQgPSAoQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQgKikgY21kLT5w YXJzZXRyZWU7CisJTGlzdAkgICAqcm9sZXMgPSBOSUw7CisJTGlzdAkgICAqc2NoZW1hcyA9IE5J TDsKKwlMaXN0CSAgICpncmFudGVlczsKKwlMaXN0CSAgICpwcml2czsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCU9ialRyZWUJICAgKnRtcDsKKwlPYmpUcmVlCSAgICpncmFudDsKKwljaGFyICAgICAg ICpvYmp0eXBlOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEFMVEVSIERFRkFVTFQg UFJJVklMRUdFUyAle2luX3NjaGVtYX1zICV7Zm9yX3JvbGVzfXMgJXtncmFudH1zCisJICovCisK KwlhbHRlclN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgREVGQVVMVCBQUklWSUxFR0VTICIpOwor CisJLyogU2NhbiB0aGUgcGFyc2Ugbm9kZSB0byBkaWcgb3V0IHRoZSBGT1IgUk9MRSBhbmQgSU4g U0NIRU1BIGNsYXVzZXMgKi8KKwlmb3JlYWNoKGNlbGwsIHN0bXQtPm9wdGlvbnMpCisJeworCQlE ZWZFbGVtCSAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCUxpc3RDZWxsICAg KmNlbGwyOworCisJCUFzc2VydChJc0Eob3B0LCBEZWZFbGVtKSk7CisJCUFzc2VydChJc0Eob3B0 LT5hcmcsIExpc3QpKTsKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJyb2xlcyIpID09IDAp CisJCXsKKwkJCWZvcmVhY2goY2VsbDIsIChMaXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJCVN0 cmluZyAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOworCQkJCU9ialRyZWUgKm9i aiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlKHN0clZhbCh2YWwpKTsKKworCQkJCXJvbGVzID0gbGFw cGVuZChyb2xlcywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7CisJCQl9CisJCX0KKwkJZWxzZSBp ZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNo KGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykKKwkJCXsKKwkJCQlTdHJpbmcgKnZhbCA9IGxmaXJz dF9ub2RlKFN0cmluZywgY2VsbDIpOworCisJCQkJc2NoZW1hcyA9IGxhcHBlbmQoc2NoZW1hcywK KwkJCQkJCQkJICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCQkJfQorCQl9CisJ fQorCisJLyogQWRkIHRoZSBJTiBTQ0hFTUEgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZSgiSU4gU0NIRU1BIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3NjaGVt YXM6LCB9SSIsIHNjaGVtYXMpOworCWlmIChzY2hlbWFzID09IE5JTCkKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJTdG10LCAiJXtpbl9zY2hlbWF9cyIsIHRtcCk7CisKKwkvKiBBZGQgdGhlIEZPUiBST0xFIGNs YXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIkZPUiBST0xFIik7CisJYXBwZW5k X2FycmF5X29iamVjdCh0bXAsICIle3JvbGVzOiwgfVIiLCByb2xlcyk7CisJaWYgKHJvbGVzID09 IE5JTCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdG10LCAiJXtmb3Jfcm9sZXN9cyIsIHRtcCk7CisKKwkv KgorCSAqIEFkZCB0aGUgR1JBTlQgc3ViY29tbWFuZAorCSAqIFZlcmJvc2Ugc3ludGF4CisJICog R1JBTlQgJXtwcml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBUTyAle2dyYW50ZWVzOiwgfVIg JXtncmFudF9vcHRpb259cworCSAqIG9yCisJICogUkVWT0tFICV7Z3JhbnRfb3B0aW9ufXMgJXtw cml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBGUk9NICV7Z3JhbnRlZXM6LCB9UgorCSAqLwor CWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCQlncmFudCA9IG5ld19vYmp0cmVlKCJHUkFO VCIpOworCWVsc2UKKwkJZ3JhbnQgPSBuZXdfb2JqdHJlZSgiUkVWT0tFIik7CisKKwkvKiBhZGQg dGhlIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIFJFVk9LRSBzdWJjb21tYW5kICovCisJaWYgKCFz dG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkdSQU5U IE9QVElPTiBGT1IiLAorCQkJCQkJICAgMSwgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJ CSAgIHN0bXQtPmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo Z3JhbnQsICIle2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUg cHJpdmlsZWdlcyBsaXN0LiAgVGhpcyB1c2VzIHRoZSBwYXJzZXIgc3RydWN0LCBhcyBvcHBvc2Vk IHRvIHRoZQorCSAqIEludGVybmFsR3JhbnQgZm9ybWF0IHVzZWQgYnkgR1JBTlQuICBUaGVyZSBh cmUgZW5vdWdoIG90aGVyIGRpZmZlcmVuY2VzCisJICogdGhhdCB0aGlzIGRvZXNuJ3Qgc2VlbSB3 b3J0aCBpbXByb3ZpbmcuCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcyA9PSBO SUwpCisJCXByaXZzID0gbGlzdF9tYWtlMShuZXdfc3RyaW5nX29iamVjdCgiQUxMIFBSSVZJTEVH RVMiKSk7CisJZWxzZQorCXsKKwkJcHJpdnMgPSBOSUw7CisKKwkJZm9yZWFjaChjZWxsLCBzdG10 LT5hY3Rpb24tPnByaXZpbGVnZXMpCisJCXsKKwkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3Qo Y2VsbCk7CisKKwkJCUFzc2VydChwcml2LT5jb2xzID09IE5JTCk7CisJCQlwcml2cyA9IGxhcHBl bmQocHJpdnMsCisJCQkJCQkJbmV3X3N0cmluZ19vYmplY3QocHJpdi0+cHJpdl9uYW1lKSk7CisJ CX0KKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiJXtwcml2aWxlZ2VzOiwgfXMi LCBwcml2cyk7CisKKwlzd2l0Y2ggKGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKQorCXsKKwkJY2Fz ZSBPQkpFQ1RfVEFCTEU6CisJCQlvYmp0eXBlID0gIlRBQkxFUyI7CisJCQlicmVhazsKKwkJY2Fz ZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlvYmp0eXBlID0gIkZVTkNUSU9OUyI7CisJCQlicmVhazsK KwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORVMiOworCQkJYnJl YWs7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5DRVMiOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQVMiOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFs dWUgJWQgZm9yIGRlZmF1bHQgcHJpdmlsZWdlcyIsIGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsK Kwl9CisKKwkvKiBhZGQgdGhlIHRhcmdldCBvYmplY3QgdHlwZSAqLworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGdyYW50LCAiT04gJXt0YXJnZXR9cyIsIG9ianR5cGUpOworCisJLyogYWRkIHRoZSBn cmFudGVlIGxpc3QgKi8KKwlncmFudGVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIHN0bXQtPmFj dGlvbi0+Z3JhbnRlZXMpCisJeworCQlSb2xlU3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxm aXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVj KHNwZWMpOworCisJCWdyYW50ZWVzID0gbGFwcGVuZChncmFudGVlcywgbmV3X29iamVjdF9vYmpl Y3Qob2JqKSk7CisJfQorCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBwZW5k X2FycmF5X29iamVjdChncmFudCwgIlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKwkJ LyogYWRkIHRoZSBXSVRIIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIEdSQU5UIHN1YmNvbW1hbmQg Ki8KKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggR1JBTlQgT1BUSU9OIiwKKwkJCQkJCQkg MSwgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFudF9v cHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMi LCB0bXApOworCX0KKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICJGUk9NICV7 Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy U3RtdCwgIiV7Z3JhbnR9cyIsIGdyYW50KTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4g T2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPYmpUcmVlICAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJ T2JqVHJlZSAgICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVs OworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAg ICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsK KwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBS RUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQly ZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNh c2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUi OworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKworCQkJLyog VE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQp OworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIHJlbHR5cGUg JXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisJICovCisJZm10c3RyID0gcHNwcmludGYoIkFM VEVSICVzIiwgcmVsdHlwZSk7CisJYWx0ZXJUYWJsZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxu YW1lc3BhY2UsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2Jq KTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNv bGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwp OworCQlBbHRlclRhYmxlQ21kICpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNl dHJlZTsKKwkJT2JqVHJlZSAgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFU X0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBYWFggbmVl ZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eo c3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihy ZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5k ZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAlJXtkZWZp bml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIpOwor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9i alR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4 Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwor CQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAo SW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJh aW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQt PmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ug c3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7Y29uc3Ry YWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICogJWluZGV4X25hbWV9SSAle2RlZmVycmFi bGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8KKwkJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSk7CisK KwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb25zdHJhaW50X3R5cGV9cyIs IGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZF UlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIlVTSU5HIElOREVY ICV7aW5kZXhfbmFtZX1JIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4 KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwg aXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVS UkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpbml0X2RlZmVy cmVkfXMiLCBpc3RtdC0+aW5pdGRlZmVycmVkID8KKwkJCQkJCQkJCQkgIklOSVRJQUxMWSBERUZF UlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Ns b3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJhaW50OgorCQkJY2FzZSBBVF9S ZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5 cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUg T1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJ CQkJeworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29udGV4 dF9yZWw7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOwor CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBT RVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBk ZWZhdWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisKKwkJCQkJZHBjb250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwp KTsKKwkJCQkJYXR0cnR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlk KHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkg R0VUU1RSVUNUKGF0dHJ0dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICIle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChyZWwsIGF0dG5vLAorCQkJCQkJCQkJCQkJCQkJCSAgZHBjb250ZXh0X3JlbCwKKwkJCQkJ CQkJCQkJCQkJCQkgIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJ CX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIE5PVCBOVUxM IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwK KwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiIsIDIsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBleHByZXNzaW9uIiwKKwkJCQkJCQkJCQkiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5n X29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEludGVnZXIp KTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIs CisJCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJ CQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQorCQkJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1uIFNFVCBT VEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwKKwkJCQkJCQkJCQkJCTMsCisJCQkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCQkiY29s dW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkJInN0YXRpc3Rp Y3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdlciAqKSBzdWJj bWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9u czoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfQ29sdW1uU2V0 T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToK KwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdl fXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwK KwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJ CQkJCSJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0cmluZyAq KSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNz aW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04g JXtjb21wcmVzc2lvbl9tZXRob2R9cyIsCisJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImNvbXByZXNzaW9uX21ldGhv ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToKKwkJ CWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAlJXtj b2x1bW59SSIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgY29sdW1uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkNB U0NBREUiLCAxLAorCQkJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJl aGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIs IHRtcG9iajIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJ eworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4 U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5h bWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVm LCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOwor CisJCQkJCWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlk eCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1l ID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRf cmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJCQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJs ZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDMsCisJCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkJ Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRf c2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFp bnQ6CisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhY IG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJ Y29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJ CQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNv bnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJ CWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAo IWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXND YWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlp ZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJp bjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUg Zm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJ CQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJ CQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENT dHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUo Y29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJ CQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJ TlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0 cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmaW5p dGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVmX2Nv bW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3Vi LT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikg c3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2ls ZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJ CWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3RyYWludCkpOworCQkJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9 cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJCQkJCQkJCTQsCisJCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9i alR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJ ImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5kZWZlcnJhYmxlID8g IkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImluaXRfZGVmZXJy ZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5pbml0ZGVmZXJyZWQgPyAiSU5JVElB TExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNl IEFUX1ZhbGlkYXRlQ29uc3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVkFM SURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImNvbnN0cmFp bnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX0Ryb3BDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAle2NvbnN0cmFp bnR9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb25zdHJh aW50IiwKKwkJCQkJCQkJCQkiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgorCQkJCXsK KwkJCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUZv cm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOworCisJCQkJCWF0dCA9 ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlk ZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29s dW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJ CQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEg VFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNj YWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29s dW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBD T0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIg JXMgJSV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRS SUJVVEUiIDogIkNPTFVNTiIpOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0 ciwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5 cGUiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQkJLyogQWRkIHRoZSBUWVBFIGNsYXVzZSAqLworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle2RhdGF0eXBlfVQiLAorCQkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShhdHQtPmF0dHR5cGlkLAorCQkJCQkJCQkJCQkJCQkJICBhdHQtPmF0dHR5cG1vZCkpOworCisJ CQkJCS8qIEFkZCBhIENPTExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wb2JqMiA9 IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJCQkJCWlmIChPaWRJc1ZhbGlkKGF0dC0+YXR0Y29s bGF0aW9uKSkKKwkJCQkJeworCQkJCQkJT2JqVHJlZSAgICAqY29sbG5hbWU7CisKKwkJCQkJCWNv bGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkgICBhdHQtPmF0dGNvbGxhdGlvbik7CisJCQkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJ ZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50IiwgZmFsc2Up OworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2NvbGxhdGlvbn1zIiwgdG1w b2JqMik7CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcg Y2xhdXNlICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICog SWYgdGhlcmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJ CSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAq IHJlc3VsdGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJ CQkgKiBoZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIlVTSU5H Iik7CisJCQkJCQlpZiAoZGVmLT5yYXdfZGVmYXVsdCkKKwkJCQkJCXsKKwkJCQkJCQlEYXR1bQkJ ZGVwYXJzZWQ7CisJCQkJCQkJY2hhcgkgICAqZGVmZXhwcjsKKworCQkJCQkJCWV4cHJzID0gbGFw cGVuZChleHBycywgZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVmZXhwciA9IG5vZGVU b1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0 RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7 CisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqMiwgIiV7ZXhwcmVzc2lvbn1zIiwK KwkJCQkJCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJCQkJCQl9CisJ CQkJCQllbHNlCisJCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIsICJwcmVzZW50Iiwg ZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt1c2luZ31zIiwg dG1wb2JqMik7CisJCQkJCX0KKworCQkJCQkvKiBJZiBpdCdzIGEgY29tcG9zaXRlIHR5cGUsIGFk ZCB0aGUgQ0FTQ0FERSBjbGF1c2UgKi8KKwkJCQkJaWYgKGlzdHlwZSkKKwkJCQkJeworCQkJCQkJ dG1wb2JqMiA9IG5ld19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhh dmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iajIs ICJwcmVzZW50IiwgZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXtjYXNjYWRlfXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQlicmVhazsK KworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6 CisJCQkJdG1wb2JqID0gZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAor CQkJCQkJCQkJCQlzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNl IEFUX0NoYW5nZU93bmVyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAl e293bmVyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBv d25lciIsCisJCQkJCQkJCQkJIm93bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlnZXRf cm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9O ICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3Rl ciBvbiIsCisJCQkJCQkJCQkJImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VU IExPR0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dl ZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBP SURTIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBv aWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9k fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0 aG9kIiwKKwkJCQkJCQkJCQkiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJ CQkJCQkJInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVs T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBB TFdBWVMgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlUmVwbGljYVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBS RVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9EaXNhYmxlVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklH R0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk aXNhYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVUcmlnQWxsOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9E aXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJ R0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxl IHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJ1bGU6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJ CQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBS RVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVs ZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJ CQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJ TkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJCQkJInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlw ZV9vZn1UIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAor CQkJCQkJCQkJCSJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJl ZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJOT1QgT0Yi LCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgIm5vdCBvZiIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiUkVQTElDQSBJREVOVElUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAicmVwbGljYSBpZGVudGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRl bnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNh c2UgUkVQTElDQV9JREVOVElUWV9ERUZBVUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtpZGVudH1zIiwgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNl IFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7aWRlbnR9cyIsICJGVUxMIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNB X0lERU5USVRZX05PVEhJTkc6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e2lkZW50fXMiLCAiTk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9J REVOVElUWV9JTkRFWDoKKwkJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiVVNJTkcgSU5E RVggJXtpbmRleH1JIiwgMSwKKwkJCQkJCQkJCQkJCSAiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCQkJICgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPm5hbWUp OworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgdG1wb2Jq Mik7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlUm93U2VjdXJpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cg TEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxl Um93U2VjdXJpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExF VkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNh YmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQlj YXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcG9iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygo TGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNh c2UgQVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRB Q0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0aXRp b25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg IiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJv dW5kKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFU X0RldGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBB UlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmlu YWxpemU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtw YXJ0aXRpb25faWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJCQkJInBhcnRp dGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5h ZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0FkZElkZW50aXR5 OgorCQkJCXsKKwkJCQkJQXR0ck51bWJlcglhdHRudW07CisJCQkJCU9pZAkJCXNlcV9yZWxpZDsK KwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJCQlDb2x1bW5EZWYgICpjb2xkZWYgPSAoQ29s dW1uRGVmICopIHN1YmNtZC0+ZGVmOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIDIsCisJCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJ CSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9 IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlz ZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0 bnVtLCB0cnVlKTsKKwkJCQkJc2VxZGVmID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFfcmVs aWQsIGNvbGRlZi0+aWRlbnRpdHksIGZhbHNlKTsKKworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICJpZGVudGl0eV9jb2x1bW4iLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCX0KKwkJCQli cmVhazsKKwkJCWNhc2UgQVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpk ZWZlbDsKKwkJCQkJY2hhcgkJaWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7 CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAyLAor CQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgaWRlbnRpdHkiLAorCQkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlpZiAo c3ViY21kLT5kZWYpCisJCQkJCXsKKwkJCQkJCUxpc3QJICAgKmRlZiA9IChMaXN0ICopIHN1YmNt ZC0+ZGVmOworCisJCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBMaXN0KSk7CisKKwkJCQkJ CWRlZmVsID0gbGluaXRpYWxfbm9kZShEZWZFbGVtLCBkZWYpOworCQkJCQkJaWRlbnRpdHkgPSBk ZWZHZXRJbnQzMihkZWZlbCk7CisJCQkJCX0KKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJl bGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0 SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJ CQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwg dHJ1ZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9u fXMiLCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJ ZGVudGl0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29s dW1ufUkgRFJPUCBJREVOVElUWSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lmX25v dF9leGlzdHN9cyIsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIg OiAiIik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAi dW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5 cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBs aWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlv bnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGlu CisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNl IGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtu b3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9E TUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBm dW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMKKwkJ ICogYWNjZXNzZWQgaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUg c3Vic2NyaWJlci4KKwkJICovCisJCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9k ZSAqKSBleHBycykpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIGNvbW1hbmQg dXNpbmcgdm9sYXRpbGUgZnVuY3Rpb24gY2Fubm90IGJlIHJlcGxpY2F0ZWQiKSkpOworCisJCS8q CisJCSAqIENsZWFuIHRoZSBsaXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJlIGlzIG5v IHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJzKTsKKwkJ ZXhwcnMgPSBOSUw7CisJfQorCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNtZHMpID09IDApCisJCXJldHVybiBOVUxMOworCisJYXBw ZW5kX2FycmF5X29iamVjdChhbHRlclRhYmxlU3RtdCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21k cyk7CisKKwlyZXR1cm4gYWx0ZXJUYWJsZVN0bXQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9k ZSB3aXRoaW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5P VCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBk aXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3Ro ZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGlu IHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5LikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRl eHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0 ZXIsIExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlICAgICpjb2x1bW47CisJT2JqVHJlZSAgICAq dG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVh cFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlw aWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25v dG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMg d2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICog WFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNl IiBvciBzb21lCisJICogc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJl dHVybiBOVUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiBy ZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAo Rm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlw bW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9k LCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7 bmFtZX1JICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxs fXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7 bmFtZX1JICV7Y29sdHlwZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJj b2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAor CQkJCQkJCSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf dHlwZSh0eXBpZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBu ZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNv bGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBv YmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4s ICIle2NvbXByZXNzaW9ufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNP TExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAg ICAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo Q29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVs c2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlp ZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkv KgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0 aGF0IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBi ZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBz cGVjaWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGlu IHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkg KiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1u IHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZv cnR1bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29u c3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28g YWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwu CisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+ Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICop IGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVM TCkKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRl Zi0+aXNfbm90X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAi Tk9UIE5VTEwiIDogIiIpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJ CWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJ CWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0 dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURF TlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJCQlh dHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlk ID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCXRt cG9iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHks IGlzX2FsdGVyKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiJXtpZGVudGl0eV9j b2x1bW59cyIsIHRtcG9iaik7CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICov CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJHRU5FUkFURUQgQUxXQVlTIEFTIik7CisJCWlmIChj b2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJ Y2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo cmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBy cyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2dlbmVyYXRpb25fZXhwcn1z IFNUT1JFRCIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1u LCAiJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBvYmopOworCX0KKworCVJlbGVhc2VTeXNDYWNo ZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZv ciBDUkVBVEUgVEFCTEUgT0YgZGVwYXJzaW5nLgorICoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYg bm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0 aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0 eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5 IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9U IE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJh aW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENv bHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUgICAgKmNvbHVtbiA9IE5VTEw7CisJT2JqVHJl ZSAgICAqdG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7 CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lk CQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJ c2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXND YWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkg Zm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwg cmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1 cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJ CQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJj aCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3 ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIg dGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNl ZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFj aChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0g KENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0g Q09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOwor CQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7 CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7ZGVm YXVsdH1zICV7bm90X251bGx9cy4KKwkgKi8KKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtu YW1lfUkgV0lUSCBPUFRJT05TIiwgMiwKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJj b2x1bW4iLAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwgIiV7bm90X251bGx9cyIsCisJCQkJCQkg c2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWUo IkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNoYXIJICAgKmRl ZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0 dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOworCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmc3RyKTsKKwl9CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkvKgor CSAqIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIG9uIHR5cGVkIHRhYmxlcywg c28gd2UgYXJlIGRvbmUuCisJICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwly ZXR1cm4gY29sdW1uOworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1 bW4gaWRlbnRpdHkuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uSWRlbnRp dHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9i alRyZWUgICAgKmNvbHVtbjsKKwlPYmpUcmVlICAgICppZGVudG9iajsKKwlMaXN0CSAgICplbGVt cyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUZvcm1fcGdf c2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsKKwljaGFy CSAgICppZGVudGZtdDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwljb2x1bW4gPSBuZXdfb2JqdHJl ZSgiIik7CisKKwlpZiAoIU9pZElzVmFsaWQoc2VxcmVsaWQpKQorCXsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KGNvbHVtbiwgInByZXNlbnQiLCBmYWxzZSk7CisJCXJldHVybiBjb2x1bW47CisJfQor CisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOwor CQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdF TkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7CisJfQorCisJ aWRlbnRvYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRU UklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnRvYmos IG9iamZtdCwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVO VElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10 LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRl bnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJl bGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVD b3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBs ZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIs CisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJV Q1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsK KworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRl cGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJs ZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVM TCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90 YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5V TEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8g bm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRf YXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVs c2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIoICV7c2VxX2RlZmluaXRpb246IH1z ICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJ cmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNF VCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMo QWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICpjb2xzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJ CWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCS8qCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VU fFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNvbHNldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNoKGNlbGws IChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJl ZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9 IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMs IG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVy biBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgorICog R2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21haW4oT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqY3JlYXRlRG9tYWluOworCU9i alRyZWUgICAgKnRtcG9iajsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBG b3JtOworCUxpc3QJICAgKmNvbnN0cmFpbnRzOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUx KFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7 CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRE9NQUlOICV7aWRl bnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJhaW50c31zCisJICogJXtj b2xsYXRpb259cworCSAqLworCWNyZWF0ZURvbWFpbiA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAiRE9NQUlOICV7 aWRlbnRpdHl9RCBBUyIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZURvbWFpbiwKKwkJCQkJCSAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBlLCB0eXBGb3JtLT50eXB0eXBtb2QpKTsKKwor CWlmICh0eXBGb3JtLT50eXBub3RudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVE b21haW4sICIle25vdF9udWxsfXMiLCAiTk9UIE5VTEwiKTsKKwllbHNlCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICIiKTsKKworCWNvbnN0cmFp bnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBvYmplY3RJZCk7CisJaWYg KGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWVsc2UK KwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEsCisJCQkJCQkJ CSJlbGVtZW50cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29uc3RyYWludHN9cyIsIHRtcG9iaik7CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5 cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQljb2xsbmFtZSA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVEb21haW4sICIle2NvbGxhdGlvbn1zIiwgdG1wb2JqKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0eXBUdXApOworCisJcmV0dXJuIGNyZWF0ZURvbWFpbjsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBDcmVhdGVGdW5jdGlvblN0bXQgKENSRUFURSBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1 bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhl IEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZ1bmN0aW9uU3RtdCAqbm9kZSA9IChDcmVhdGVGdW5j dGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZUZ1bmM7CisJT2JqVHJl ZSAgICAqdG1wb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFyCSAgICpzb3VyY2U7CisJY2hh cgkgICAqcHJvYmluOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAgICpkZWZhdWx0czsKKwlM aXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAgKnRhYmxlX3BhcmFtcyA9 IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUhl YXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9pZAkJICAgKnRyZnR5cGVz OworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsKKwlpbnQJCQl0eXBudW07 CisJaW50CQkJbnR5cGVzOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlpc2Z1bmN0aW9uOworCisJ LyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1Qo cHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUg Ki8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHByb2NGb3JtLT5wcm9sYW5n KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbHVyZSBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHByb2NGb3Jt LT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFu Z1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFsdWVzIGZvciBwcm9zcmMgYW5k IHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWluZyBlaXRoZXIgTlVMTCBvciAi LSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUuCisJICovCisJdG1wZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3By b2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBw cm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJc291cmNlID0gVGV4 dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRlcm1pbmUgYSB1c2VmdWwgdmFs dWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHBy b2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2JpbiwgJmlzbnVsbCk7CisJaWYgKGlz bnVsbCkKKwkJcHJvYmluID0gTlVMTDsKKwllbHNlCisJeworCQlwcm9iaW4gPSBUZXh0RGF0dW1H ZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAnXDAnIHx8IHN0cmNtcChw cm9iaW4sICItIikgPT0gMCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIEZVTkNUSU9OICV7c2ln bmF0dXJlfXMgUkVUVVJOUyAle3JldHVybl90eXBlfXMKKwkgKiBMQU5HVUFHRSAle3RyYW5zZm9y bV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGlsaXR5fXMKKwkgKiAle3Bh cmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmlu ZXJ9cworCSAqICV7Y29zdH1zICV7cm93c31zICV7c3VwcG9ydH1zICV7c2V0X29wdGlvbnM6IH1z IEFTICV7b2JqZmlsZX1MLAorCSAqICV7c3ltYm9sfUwKKwkgKi8KKwljcmVhdGVGdW5jID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywg IiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDog IiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwgZXh0cmFj dCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJICogZnVuY3Rpb24ncyBwZ19wcm9jIGVudHJ5LiAg SWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJhbWV0ZXIgbGlzdAorCSAqIGxlbmd0aCwgdGhlcmUg YXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlCisJ ICogT0lEIGZyb20gcHJvYXJndHlwZXM7IG90aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29kZSBwcm9h bGxhcmd0eXBlcywgd2hpY2gKKwkgKiBpcyBhIGJpdCBtb3JlIGludm9sdmVkLgorCSAqLworCXR5 cGFycmF5ID0gcGFsbG9jKGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpICogc2l6ZW9mKE9p ZCkpOworCWlmIChsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSA+IHByb2NGb3JtLT5wcm9u YXJncykKKwl7CisJCURhdHVtCQlhbGx0eXBlczsKKwkJRGF0dW0JICAgKnZhbHVlczsKKwkJYm9v bAkgICAqbnVsbHM7CisJCWludAkJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hlR2V0 QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxsYXJn dHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIk5VTEwgcHJv YWxsYXJndHlwZXMsIGJ1dCBtb3JlIHBhcmFtZXRlcnMgdGhhbiBhcmdzIik7CisJCWRlY29uc3Ry dWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwg NCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChu ZWxlbXMgIT0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykpCisJCQllbG9nKEVSUk9SLCAi bWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVu Z3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsK Kwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFt ZXRlcnMpOyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1 ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVzc2lv bnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBhcyBhIGxpc3Qgc28gdGhh dCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJv Y19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlkZWZhdWx0 cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBkYXR1bSkpOworCQljdXJk ZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJeworCQlkZWZhdWx0cyA9IE5J TDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFj aCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRl cnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChj ZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0g KEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqcGFyYW1v Ymo7CisJCU9ialRyZWUgICAgKmRlZmF1bHR2YWw7CisJCU9ialRyZWUgICAgKm5hbWU7CisKKwkJ LyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBlbmQgb2YgaW5w dXQgYXJndW1lbnRzOyB0aGUKKwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2Yg dGhlIHJldHVybiB0eXBlLiAgV2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJh Y2sgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdCB3ZQorCQkgKiBj YW4gZWFzaWx5IHByb2R1Y2UgdGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBh cmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNl bGw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJh bWF0ZXI6ICV7bW9kZX1zICV7bmFtZX1zICV7dHlwZX1UCisJCSAqICV7ZGVmYXVsdH1zCisJCSAq CisJCSAqIE5vdGUgdGhhdCAle25hbWV9cyBpcyBhIHN0cmluZyBoZXJlLCBub3QgYW4gaWRlbnRp ZmllcjsgdGhlIHJlYXNvbgorCQkgKiBmb3IgdGhpcyBpcyB0aGF0IGFuIGFic2VudCBwYXJhbWV0 ZXIgbmFtZSBtdXN0IHByb2R1Y2UgYW4gZW1wdHkKKwkJICogc3RyaW5nLCBub3QgIiIsIHdoaWNo IGlzIHdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHdlcmUgdG8gdXNlCisJCSAqICV7bmFtZX1JIGhl cmUuICBTbyB3ZSBhZGQgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhbGxvdyB1cwor CQkgKiB0byBpbmplY3QgYSAicHJlc2VudCIgcGFyYW1ldGVyLgorCQkgKi8KKwkJcGFyYW1vYmog PSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtt b2RlfXMiLAorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOID8gIklOIiA6CisJ CQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fT1VUID8gIk9VVCIgOgorCQkJCQkJCSBw YXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJCQkJCQkJIHBhcmFt LT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkgIklO Iik7CisKKwkJLyogT3B0aW9uYWwgd2hvbGVzYWxlIHN1cHByZXNzaW9uIG9mICJuYW1lIiBvY2N1 cnMgaGVyZSAqLworCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG5hbWUsICIle25hbWV9SSIsCisJCQkJCQkJIHBhcmFtLT5uYW1lID8gcGFyYW0tPm5h bWUgOiAiTlVMTCIpOworCisJCWFwcGVuZF9ib29sX29iamVjdChuYW1lLCAicHJlc2VudCIsCisJ CQkJCQkgICBwYXJhbS0+bmFtZSA/IHRydWUgOiBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QocGFyYW1vYmosICIle25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdf b2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIp KQorCQl7CisJCQljaGFyCSAgICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJ ZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0g bGZpcnN0KGN1cmRlZik7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIl e3ZhbHVlfXMiLCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOwor CQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdChkZWZhdWx0dmFsLCAicHJlc2VudCIs IGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0 dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFy YW1vYmopKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwg MSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvYmpl Y3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9h cnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd1bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+ cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIkZVTkNUSU9OICV7c2lnbmF0dXJlfXMiLCB0 bXBvYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlBST0NF RFVSRSAle3NpZ25hdHVyZX1zIiwgdG1wb2JqKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBj YW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsCisJ ICogb3IgYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9y bSBiZWNhdXNlIHdlIHNhdworCSAqIGEgdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcg dGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsK KwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJCSJyZXR1cm5fZm9ybSIs IE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3NldG9mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcmV0c2V0ID8gIlNFVE9GIiA6ICIi KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJ ZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFt b2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRSIsIDEsCisJCQkJCQkJCSJy ZXR1cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJ0YWJsZSIpOworCQlmb3IgKDsgdGFibGVfcGFy YW1zICE9IE5VTEw7IHRhYmxlX3BhcmFtcyA9IGxuZXh0KG5vZGUtPnBhcmFtZXRlcnMsIHRhYmxl X3BhcmFtcykpCisJCXsKKwkJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9IGxmaXJzdCh0YWJs ZV9wYXJhbXMpOworCisJCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfUkiLCBwYXJhbS0+bmFtZSk7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwgLTEpKTsKKwkJCXJldHR5cGVzID0gbGFw cGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwkJfQorCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cmV0dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7 CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1 bmMsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRtcG9iaik7CisKKwkvKiBUUkFOU0ZPUk0g Rk9SIFRZUEUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVFJBTlNGT1JNIik7CisKKwludHlw ZXMgPSBnZXRfZnVuY190cmZ0eXBlcyhwcm9jVHVwLCAmdHJmdHlwZXMpOworCWZvciAoaSA9IDA7 IGkgPCBudHlwZXM7IGkrKykKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQ RSAle3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVu ZCh0eXBlcywgdG1wb2JqKTsKKwl9CisKKwlpZiAodHlwZXMpCisJCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wb2JqLCAiJXtmb3JfdHlwZTosIH1zIiwgdHlwZXMpOworCWVsc2UKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVGdW5jLCAiJXt0cmFuc2Zvcm1fdHlwZX1zIiwgdG1wb2JqKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLAorCQkJ CQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCXsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7d2luZG93fXMiLAorCQkJCQkJ CSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDogIiIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt2b2xhdGlsaXR5fXMiLAorCQkJ CQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJ CQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZP TEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOworCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3BhcmFsbGVsX3NhZmV0eX1zIiwKKwkJ CQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJ CSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJP UEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQ QVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi JXtsZWFrcHJvb2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BS T09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c3RyaWN0 fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBO VUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7c2VjdXJpdHlfZGVmaW5lcn1z IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNVUklUWSBERUZJ TkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlRnVuYywgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0 fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJv Y0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIpOworCQlp ZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCQllbHNlCisJCQlhcHBlbmRfZmxvYXRfb2JqZWN0KHRtcG9i aiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVGdW5jLCAiJXtyb3dzfXMiLCB0bXBvYmopOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJ eworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlm eSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJl c29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJ YXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0t PnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJ CQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJ CWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3N1cHBvcnR9cyIsIHRtcG9i aik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAg ICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQg PSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9IEV4 dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBvYmogPSBkZXBhcnNlX0Z1bmN0 aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQkJc2V0cyA9IGxhcHBl bmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCX0KKwl9CisJYXBwZW5kX2Fy cmF5X29iamVjdChjcmVhdGVGdW5jLCAiJXtzZXRfb3B0aW9uczogfXMiLCBzZXRzKTsKKworCS8q IEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2b2lkKSBTeXNDYWNoZUdldEF0dHIo UFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3NxbGJvZHksICZpc251bGwpOworCWlm IChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlkICYmICFpc251bGwpCisJeworCQlT dHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXByaW50X2Z1 bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlRnVuYywgIiV7ZGVmaW5pdGlvbn1zIiwgYnVmLmRhdGEpOworCX0KKwllbHNlIGlmIChw cm9iaW4gPT0gTlVMTCkKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJB UyAle2RlZmluaXRpb259TCIsCisJCQkJCQkJIHNvdXJjZSk7CisJfQorCWVsc2UKKwl7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICJBUyAle29iamZpbGV9TCIsIHByb2Jpbik7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIsICV7c3ltYm9sfUwiLCBzb3Vy Y2UpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUo cHJvY1R1cCk7CisKKwlyZXR1cm4gY3JlYXRlRnVuYzsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD UkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVPcENsYXNzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJ b3Bjb2lkID0gY21kLT5kLmNyZWF0ZW9wYy5hZGRyZXNzLm9iamVjdElkOworCUhlYXBUdXBsZQlv cGNUdXA7CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJ Rm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAg ICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyogRG9u J3QgZGVwYXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lv biAqLworCWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlvcGNUdXAg PSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY29pZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsIG9wY29pZCk7CisJb3BjRm9ybSA9IChG b3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJb3BmVHVwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRkFNSUxZT0lELCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig b3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlvcGZG b3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJLyoKKwkgKiBW ZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9 RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworCSAqICV7YW1uYW1lfUkgJXtv cGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworCSAqLworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9w Y0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BjRm9ybS0+b3Bj bmFtZSkpKTsKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5n X29iamVjdChzdG10LCAiJXtkZWZhdWx0fXMiLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQg PyAiREVGQVVMVCIgOiAiIik7CisKKwkvKiBBZGQgdGhlIEZPUiBUWVBFIGNsYXVzZSAqLworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJGT1IgVFlQRSAle3R5cGV9VCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSkpOworCisJLyogQWRkIHRo ZSBVU0lORyBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChzdG10LCAiVVNJTkcgJXth bW5hbWV9SSIsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoKKwkgKiBB ZGQgdGhlIEZBTUlMWSBjbGF1c2UsIGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFt ZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8gZW1wdHkg YmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2Fz IGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRkFN SUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkJIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAoc3RyY21w KE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpID09 IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVzcGFjZSkK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtvcGZhbWlseX1zIiwgdG1wb2JqKTsKKworCS8qCisJ ICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RP UkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5h bCBjb21tYW5kLgorCSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2tleXR5cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJ CSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJ ICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOwor CisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmly c3QoY2VsbCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4g JXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsCisJCQkJCQkJCTQsCisJCQkJCQkJ CSJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCQkib3BlcmF0b3Ii LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJb3Blci0+b2JqZWN0KSwKKwkJCQkJCQkJ Imx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Bl ci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFk ZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYgKG9wZXItPnNv cnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg IiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAg ICp0bXBvYmoyOworCisJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAl e29wZmFtaWx5fUQiLCAwKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICJvcGZh bWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1p bHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCX0K KworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9 CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChj ZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAq cHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJv YyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3Qg PSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJv Y2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBH RVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9O ICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQk0 LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJ Imx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJv Yy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJCQkJCQkJCSJm dW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihwcm9jRm9y bS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJewor CQkJT2JqVHJlZSAgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9h cmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVj dF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIo Iik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJn bGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCQlSZWxlYXNl U3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiQVMgJXtp dGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKwlSZWxlYXNl U3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBh IENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAqIEdpdmVuIGEg dHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJb3BmVHVwOworCUhlYXBUdXBsZQlhbVR1cDsKKwlG b3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbQlhbUZvcm07CisJT2JqVHJlZSAg ICAqY29wZlN0bXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWls eSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkp IEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2Vz cyBtZXRob2QgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZvcm1f cGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwljb3BmU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwKKwkJ CQkJCQkgIDIsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkgICJhbW5hbWUiLCBP YmpUeXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUoYW1UdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCisJcmV0dXJuIGNvcGZTdG10 OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUG9saWN5U3RtdCAqbm9kZSA9IChD cmVhdGVQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpwb2xpY3k7CisKKwlw b2xpY3kgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAor CQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKwor CS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocG9s aWN5LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwKKwkJCQkJICAgISFub2Rl LT53aXRoX2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQgKikgcGFyc2V0cmVl OworCU9ialRyZWUgICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZm ICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAh IW5vZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9s aWN5OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisgKgorICogR2l2 ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVh dGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpjcmVhdGVTY2hlbWE7CisJ T2JqVHJlZSAgICAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENS RUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMK KwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAor CQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlh cHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25hbWV9SSIsIG5vZGUtPnNjaGVt YW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5v ZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0 aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7 CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25f cm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInByZXNlbnQiLCBmYWxzZSk7 CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlv bn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCisvKgorICogUmV0dXJu IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMgY2hhciAqCitEb21h aW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0dW0JCWRlZjsKKwlOb2RlCSAg ICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsKKworCWRlZiA9IFN5 c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0Ymlu LAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAiZG9tYWlu IFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSIsCisJCQkgTmFtZVN0cigoKEZv cm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBuYW1lKSk7CisJZGVmdmFsID0gc3Ry aW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcoZGVmKSk7CisJZGVmc3RyID0gZGVwYXJzZV9l eHByZXNzaW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNvbnRleHQ/ICovICwKKwkJCQkJCQkJZmFsc2Us IGZhbHNlKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJE b21haW5TdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRG9tYWluU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCU9iamVjdEFkZHJlc3MgY29u c3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21haW5TdG10ICpub2RlID0gKEFsdGVyRG9tYWluU3Rt dCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWRvbVR1cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9y bTsKKwlPYmpUcmVlICAgICphbHRlckRvbTsKKwljaGFyCSAgICpmbXQ7CisJY29uc3QgY2hhciAq dHlwZTsKKworCS8qIEFMVEVSIERPTUFJTiBEUk9QIENPTlNUUkFJTlQgaXMgaGFuZGxlZCBieSB0 aGUgRFJPUCBzdXBwb3J0IGNvZGUgKi8KKwlpZiAobm9kZS0+c3VidHlwZSA9PSAnWCcpCisJCXJl dHVybiBOVUxMOworCisJZG9tVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElk KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZG9tVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOwor CWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAo bm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2UgJ1QnOgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9Q IERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5kZWYgPT0gTlVMTCkKKwkJCXsKKwkJCQlmbXQgPSAi QUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gImRyb3AgZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20g PSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgRFJPUCBERUZB VUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQkJdHlwZSA9 ICJzZXQgZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJEb20sICIle2lkZW50aXR5fUQgU0VUIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5h bWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRl ckRvbSwgIiV7ZGVmYXVsdH1zIiwgRG9tYWluR2V0RGVmYXVsdChkb21UdXApKTsKKwkJCX0KKwor CQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJPUCBOT1QgTlVMTCAqLworCQkJZm10ID0g IkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImRyb3Agbm90IG51bGwiOworCQkJYWx0ZXJEb20g PSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBEUk9QIE5PVCBO VUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJ YnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyogU0VUIE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxU RVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAic2V0IG5vdCBudWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3 X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxMIiwK KwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7 CisJCWNhc2UgJ0MnOgorCisJCQkvKgorCQkJICogQUREIENPTlNUUkFJTlQuICBPbmx5IENIRUNL IGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkKKwkJCSAqIGRvbWFpbnMKKwkJCSAqLworCQkJ Zm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImFkZCBjb25zdHJhaW50IjsKKwkJCWFs dGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsIHR5 cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQiLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQkvKiBBIG5l dyBjb25zdHJhaW50IGhhcyBhIG5hbWUgYW5kIGRlZmluaXRpb24gKi8KKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRG9tLCAiQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIs CisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9iamVjdElkKSk7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJ CQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0cmFpbnRBZGRy Lm9iamVjdElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJREFURSBDT05T VFJBSU5UICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAidmFsaWRhdGUg Y29uc3RyYWludCI7CisKKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMgb3B0 aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1lLgor CQkJICovCisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtp ZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50 eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkp OworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJWQUxJREFURSBDT05TVFJBSU5U ICV7Y29uc3RyYWludF9uYW1lfXMiLCBub2RlLT5uYW1lKTsKKworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+c3VidHlwZSk7 CisJfQorCisJLyogRG9uZSAqLworCVJlbGVhc2VTeXNDYWNoZShkb21UdXApOworCisJcmV0dXJu IGFsdGVyRG9tOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0YXRzU3RtdC4KKyAqCisg KiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RhdHNTdG10ICpub2Rl ID0gKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0 IHN0YXRmb3JtOworCU9ialRyZWUgICAgKmNyZWF0ZVN0YXQ7CisJSGVhcFR1cGxlCXR1cDsKKwlE YXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCUxpc3QJICAgKnN0YXRleHBycyA9IE5JTDsK KworCWNyZWF0ZVN0YXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFNUQVRJU1RJQ1MiKTsKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVTdGF0LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJ IG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoU1RBVEVYVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc3RhdGlzdGljICV1Iiwgb2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9y bV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1QodHVwKTsKKworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0YXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0 YXRmb3JtLT5zdHhuYW1lKSkpOworCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9J RCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMsCisJCQkJCQkJJmlzbnVsbCk7 CisJaWYgKCFpc251bGwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKwkJUmVsYXRpb24Jc3RhdHNy ZWw7CisJCUxpc3QJICAgKmNvbnRleHQ7CisJCUxpc3QJICAgKmV4cHJzID0gTklMOworCQljaGFy CSAgICpleHByc1N0cmluZzsKKworCQlzdGF0c3JlbCA9IHJlbGF0aW9uX29wZW4oc3RhdGZvcm0t PnN0eHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0 X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0c3JlbCksCisJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0UmVsaWQoc3RhdHNyZWwpKTsKKworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENT dHJpbmcoZGF0dW0pOworCQlleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmlu Zyk7CisKKwkJZm9yZWFjaChsYywgZXhwcnMpCisJCXsKKwkJCU5vZGUJICAgKmV4cHIgPSAoTm9k ZSAqKSBsZmlyc3QobGMpOworCQkJY2hhcgkgICAqc3RhdGV4cHI7CisKKwkJCXN0YXRleHByID0g ZGVwYXJzZV9leHByZXNzaW9uKGV4cHIsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJCQlzdGF0 ZXhwcnMgPSBsYXBwZW5kKHN0YXRleHBycywgbmV3X3N0cmluZ19vYmplY3Qoc3RhdGV4cHIpKTsK KwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlU3RhdCwgIk9OICV7ZXhwcjosIH1z Iiwgc3RhdGV4cHJzKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCQlyZWxhdGlvbl9jbG9zZShz dGF0c3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihTVEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhrZXlzLAorCQkJCQkJ CSZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJaW50CQkJa2V5bm87CisJCWNoYXIJICAg KmF0dG5hbWU7CisJCUxpc3QJICAgKnN0YXRjb2xzID0gTklMOworCQlpbnQydmVjdG9yICppbmRv cHRpb247CisKKwkJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGRh dHVtKTsKKworCQlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpbmRvcHRpb24tPmRpbTE7IGtleW5v KyspCisJCXsKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShzdGF0Zm9ybS0+c3R4cmVsaWQsIGlu ZG9wdGlvbi0+dmFsdWVzW2tleW5vXSwKKwkJCQkJCQkJICBmYWxzZSk7CisJCQlzdGF0Y29scyA9 IGxhcHBlbmQoc3RhdGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGF0dG5hbWUpKTsKKwkJfQorCisJ CWlmIChpbmRvcHRpb24tPmRpbTEpCisJCXsKKwkJCS8qIEFwcGVuZCBhICcsJyBpZiBzdGF0ZXhw cnMgaXMgcHJlc2VudCBlbHNlIGFwcGVuZCAnT04nICovCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChjcmVhdGVTdGF0LCAiJXtjb21tYX1zIiwgc3RhdGV4cHJzID8gIiwiIDogIk9OIik7CisJCQlh cHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0YXQsICIle2NvbHM6LCB9cyIsIHN0YXRjb2xzKTsK KwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0YXQsICJGUk9NIik7CisK KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdGF0LCAiJXtzdGF0X3RhYmxlX2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShnZXRfcmVsX25hbWVzcGFjZShz dGF0Zm9ybS0+c3R4cmVsaWQpLAorCQkJCQkJCQkJCQkJICBnZXRfcmVsX25hbWUoc3RhdGZvcm0t PnN0eHJlbGlkKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwlyZXR1cm4gY3JlYXRl U3RhdDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKENS RUFURSBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcg dGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl Rm9yZWlnblNlcnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKikg cGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZVNlcnZlcjsKKwlPYmpUcmVlICAgICp0bXA7 CisKKwljcmVhdGVTZXJ2ZXIgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNFUlZFUiAle2lkZW50 aXR5fUkiLCAxLAorCQkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnNl cnZlcm5hbWUpOworCisJLyogQWRkIGEgVFlQRSBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJUWVBFIiwgMCk7CisJaWYgKG5vZGUtPnNlcnZlcnR5cGUpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dHlwZX1MIiwgbm9kZS0+c2VydmVydHlwZSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChjcmVhdGVTZXJ2ZXIsICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQg YSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJ T04iLCAwKTsKKwlpZiAobm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w LCAiJXt2ZXJzaW9ufUwiLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVNlcnZlciwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZVNlcnZlciwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkiLCBub2RlLT5mZHduYW1l KTsKKwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVNlcnZlciwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFy c2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZXR1cm4gY3JlYXRlU2Vy dmVyOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckZvcmVpZ25TZXJ2ZXJTdG10IChBTFRF UiBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhl IGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGb3Jl aWduU2VydmVyU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZv cmVpZ25TZXJ2ZXJTdG10ICpub2RlID0gKEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKmFsdGVyU2VydmVyOworCU9ialRyZWUgICAgKnRtcDsKKworCWFs dGVyU2VydmVyID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkiLCAx LAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSk7 CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlZFUlNJT04iLCAwKTsKKwlpZiAobm9kZS0+aGFzX3ZlcnNpb24gJiYgbm9kZS0+dmVy c2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCBub2RlLT52 ZXJzaW9uKTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNl cnZlciwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCS8qIEFkZCBhIFZFUlNJT04gY2xhdXNlLCBp ZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTiIsIDApOworCWlmIChub2Rl LT5oYXNfdmVyc2lvbiAmJiBub2RlLT52ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXAsICIle3ZlcnNpb259TCIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UgaWYgKG5vZGUtPmhhc192 ZXJzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJ2ZXJzaW9uIiwgIk5VTEwiKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VydmVyLCAiJXt2ZXJzaW9ufXMiLCB0bXApOworCisJ LyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVj dChhbHRlclNlcnZlciwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3 T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlyZXR1cm4gYWx0ZXJTZXJ2ZXI7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUExhbmdTdG10LgorICoKKyAqIEdpdmVuIGEgbGFu Z3VhZ2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJQ3JlYXRlUExhbmdTdG10ICpub2RlID0gKENyZWF0ZVBMYW5nU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY3JlYXRlTGFuZzsKKwlPYmpUcmVlCSAgICp0bXA7 CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKworCWxh bmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSAldSIsIG9iamVjdElkKTsK KwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwlj cmVhdGVMYW5nID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlTGFuZywgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8g Ik9SIFJFUExBQ0UiIDogIiIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUxhbmcsICIl e3RydXN0ZWR9cyIsCisJCQkJCQkgbGFuZ0Zvcm0tPmxhbnBsdHJ1c3RlZCA/ICJUUlVTVEVEIiA6 ICIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVMYW5nLCAiTEFOR1VBR0UgJXtpZGVu dGl0eX1zIiwgbm9kZS0+cGxuYW1lKTsKKworCWlmIChub2RlLT5wbGhhbmRsZXIgIT0gTklMKQor CXsKKwkJLyogQWRkIHRoZSBIQU5ETEVSIGNsYXVzZSAqLworCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVMYW5nLCAiSEFORExFUiAle2hhbmRsZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgbGFu Z0Zvcm0tPmxhbnBsY2FsbGZvaWQpKTsKKworCQkvKiBBZGQgdGhlIElOTElORSBjbGF1c2UsIGlm IGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5MSU5FIik7CisJCWlmIChPaWRJc1ZhbGlk KGxhbmdGb3JtLT5sYW5pbmxpbmUpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW5pbmxp bmUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlTGFuZywgIiV7aW5saW5lfXMi LCB0bXApOworCisJCS8qIEFkZCB0aGUgVkFMSURBVE9SIGNsYXVzZSwgaWYgYW55ICovCisJCXRt cCA9IG5ld19vYmp0cmVlKCJWQUxJREFUT1IiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0t PmxhbnZhbGlkYXRvcikpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFu ZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbnZhbGlkYXRvcikp OworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVMYW5nLCAiJXt2YWxpZGF0b3J9cyIs IHRtcCk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCisJcmV0dXJuIGNyZWF0 ZUxhbmc7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqY3JlYXRlU2VxOworCU9ialRyZWUgICAg KnRtcG9iajsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2Vx ZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07 CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlDcmVhdGVTZXFTdG10ICpj cmVhdGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkgKiBT ZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5KHZpYSBDUkVBVEUg VEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlm IChjcmVhdGVTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0 YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlv bl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2Vx dWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKwor CXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VR VUVOQ0UgJXtpZGVudGl0eX1ECisJICovCisJY3JlYXRlU2VxID0gbmV3X29ianRyZWUoIkNSRUFU RSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2VxLCAiJXtwZXJzaXN0ZW5jZX1z IiwKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNp c3RlbmNlKSk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24t PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNlcSwgIlNFUVVFTkNF ICV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZv cm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShj cmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9JbmNyZW1lbnRCeShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMg PSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0s IGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShj cmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBh cnNlX1NlcV9TdGFydHdpdGgoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfUmVzdGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsK KworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisJYXBw ZW5kX2FycmF5X29iamVjdChjcmVhdGVTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOwor CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShy ZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZlbiBh IHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsK KwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7CisJ T2JqVHJlZSAgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNp c3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7 b2ZfdHlwZX1UIHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxl bWVudHN9cworCSAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhv ZH1zICV7d2l0aF9jbGF1c2V9cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkg Ki8KKwljcmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNp c3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25v dF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJ ICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0g ZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJ CQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9u cyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5v dCBwdXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3Ry aW5nLAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2Vz IG11c3Qgbm90IGJlIGVtaXR0ZWQ7CisJICogYW5kIGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3Qg YWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5v ZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgor CQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJp bmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNh dXNlIGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVzZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRo ZXJlZm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVz ZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUt Pm9mVHlwZW5hbWUpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0 aW9uLT5yZF9yZWwtPnJlbG9mdHlwZSwgLTEpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlU3RtdCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1wb2JqKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CUxpc3QJICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAgICplbGVtOworCisJCQlwYXJlbnRzID0g ZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQkJZWxlbSA9IChPYmpFbGVtICopIGxp bml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7 CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsK KworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFyZW50X2lkZW50aXR5 fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQorCisJCXRhYmxlZWx0cyA9 IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRl eHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFs c2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRz KHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0g TklMKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiKCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkJImVsZW1l bnRzIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJ eworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8g bmVlZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICog YWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJ CSAqLworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0 aW9ucyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMg YXJlIG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNv bnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9k ZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2Yg dGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1l bnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZh bHNlLAkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNv bXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9i amVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVN0bXQs ICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisKKwkJLyoKKwkJICogQWRk IGluaGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxp c3Qgb2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1h eSBsYWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVs YXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9t IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBh Y2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAq LworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYgKGxpc3RfbGVuZ3Ro KG5vZGUtPmluaFJlbGF0aW9ucykgPiAwKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmos ICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJ ZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1E KSIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ CX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRt cG9iaik7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAo bm9kZS0+dGFibGVzcGFjZW5hbWUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7 dGFibGVzcGFjZX1JIiwgbm9kZS0+dGFibGVzcGFjZW5hbWUpOworCWVsc2UKKwl7CisJCWFwcGVu ZF9udWxsX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9jb21taXR9cyIsCisJCQkJCQkgZGVwYXJzZV9PbkNv bW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBjbGF1c2UgKi8K KwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2NsYXNzLnJlbHBh cnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJlZQorCQkgKiBk aXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3aGljaCBo YXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJIFJlbGF0aW9u R2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xh dXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxh dGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdfZ2V0X3BhcnRr ZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10 LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9SSIsIG5vZGUt PmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwg IiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXth Y2Nlc3NfbWV0aG9kfXMiLCB0bXBvYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQor CXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqMjsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCXRtcG9iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxz ZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iajIpKTsK Kwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXt3aXRo OiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dp dGhfY2xhdXNlfXMiLCB0bXBvYmopOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBEZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25kYXJ5T2Jq KQoreworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpkZWZTdG10ID0gTlVMTDsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5kKQorCXsK KwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3Rt dF9Db2xsYXRpb24ob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3Rt dF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNU X1RZUEU6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUob2JqZWN0SWQsIGRl ZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlk ZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNl Y29uZGFyeU9iaik7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCWRl ZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIob2JqZWN0SWQsIGRlZmluZSk7CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlkZWZTdG10ID0gZGVw YXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShvYmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZp bmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5kIik7CisJfQorCisJ cmV0dXJuIGRlZlN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRF IENPTExBVElPTikKKyAqCisgKiBHaXZlbiBhIGNvbGxhdGlvbiBPSUQsIHJldHVybiB0aGUgSlNP TiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0 bXQgKmRlZmluZSwKKwkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlkKQoreworCU9ialRy ZWUgICAgKnN0bXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xG b3JtOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwljb2xUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChj b2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24p IEdFVFNUUlVDVChjb2xUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ09M TEFUSU9OIiwgMCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1E IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29sRm9ybS0+Y29sbG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCWlmIChm cm9tQ29sbGlkLm9iamVjdElkICE9IEludmFsaWRPaWQpCisJeworCQlPaWQJCQljb2xsaWQgPSBm cm9tQ29sbGlkLm9iamVjdElkOworCQlIZWFwVHVwbGUJdHA7CisJCUZvcm1fcGdfY29sbGF0aW9u IGZyb21Db2xGb3JtOworCisJCS8qCisJCSAqIENSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1E IEZST00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkgKi8KKwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEo Q09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRp b24gJXUiLCBjb2xsaWQpOworCisJCWZyb21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBH RVRTVFJVQ1QodHApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJGUk9NICV7ZnJv bV9pZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGZyb21Db2xG b3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihmcm9tQ29sRm9ybS0+ Y29sbG5hbWUpKSk7CisKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lzQ2Fj aGUoY29sVHVwKTsKKwkJcmV0dXJuIHN0bXQ7CisJfQorCisJLyogTE9DQUxFICovCisJZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xs aWN1bG9jYWxlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJMT0NBTEU9IiwgMSwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJs b2NhbGUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtsb2NhbGV9TCIsCisJCQkJ CQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NP TExBVEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1f cGdfY29sbGF0aW9uX2NvbGxjb2xsYXRlLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMQ19DT0xMQVRFPSIsIDEsCisJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0ZSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle2NvbGxhdGV9TCIsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJp bmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCS8qIExDX0NUWVBFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCWlm ICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NUWVBFPSIsIDEsCisJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3R5cGUiKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtjdHlwZX1MIiwKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERh dHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJfQorCisJLyogUFJPVklERVIgKi8KKwlpZiAoY29sRm9ybS0+Y29s bHByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiUFJPVklERVI9IiwgMSwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm92 aWRlciIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3Byb3ZpZGVyfUwiLAorCQkJ CQkJCSBwc3ByaW50ZigiJXMiLCAiaWN1IikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxzZSBpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVy ID09IENPTExQUk9WSURFUl9MSUJDKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJ REVSPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtwcm92aWRlcn1MIiwKKwkJCQkJCQkgcHNw cmludGYoIiVzIiwgImxpYmMiKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCX0KKworCS8qIERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+ Y29sbGlzZGV0ZXJtaW5pc3RpYykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1J TklTVElDPSIsIDEsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGV0ZXJtaW5p c3RpYyIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RldGVybWluaXN0aWN9TCIs CisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsICJ0cnVlIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBWRVJTSU9OICovCisJZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xs dmVyc2lvbiwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiVkVSU0lPTj0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZl cnNpb24iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLAorCQkJ CQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCVJlbGVhc2VTeXND YWNoZShjb2xUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVm aW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9SKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVl ICAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9w ckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVw KTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SICV7aWRlbnRpdHl9 TyIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkg ICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBQUk9DRURVUkUgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJ CSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkicHJvY2VkdXJl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJb3ByRm9ybS0+b3ByY29kZSkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTEVG VEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJMRUZUQVJHPSIsIDEsCisJCQkJCQkJ ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZWZ0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1U IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyog UklHSFRBUkcgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJ CQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElzVmFs aWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0 LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBm YWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNPTU1VVEFU T1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbW11dGF0b3IiKTsK KwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJjb20pKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyog TkVHQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJORUdBVE9SPSIsIDEsCisJCQkJ CQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJuZWdhdG9yIik7CisJaWYgKE9pZElzVmFsaWQo b3ByRm9ybS0+b3BybmVnYXRlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtv cGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJFU1RSSUNUICov CisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEpPSU4gKi8KKwl0bXBvYmog PSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiam9pbiIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJNRVJHRVMiLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWVyZ2VzIik7 CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiSEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhhc2hlcyIp OworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczos IH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gc3Rt dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBzdGF0ZW1lbnQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0eXBUdXA7CisJT2JqVHJlZSAgICAqc3Rt dDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwljaGFyCSAgICpzdHI7CisJ RGF0dW0JCWRmbHQ7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJ dHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0 SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlw Rm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJLyogU2hvcnRjdXQg cHJvY2Vzc2luZyBmb3Igc2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmlu ZWQpCisJeworCQlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAg TmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qoc3RtdCwg InByZXNlbnQiLCB0cnVlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisJCXJldHVybiBz dG10OworCX0KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUodHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBO YW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJw cmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlz dCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBVVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3Jt LT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChP aWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZl KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNF TkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNl bmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5 cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0Rf T1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlw bW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVO R1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0KKwllbHNlCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59biIsIDEsCisJCQkJ CQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9CisKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NF REJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0 eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBm YWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiKTsKKwkvKiBYWFgg aXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQgdHlw ZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJeworCQljYXNlICdkJzoK KwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJ CQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXN0 ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3RyID0g InBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2Ui KTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0 ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwi OworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFr OworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50 eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtzdG9yYWdlfXMi LCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5Iik7CisJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0 eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVy cmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0 QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwK KwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251 bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4dERhdHVt R2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChP aWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwg LTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog REVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3Jt LT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRB QkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7 CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1 cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29u ZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJl c3MgY29waWVkKQoreworCUhlYXBUdXBsZQl0c2NUdXA7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlP YmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0 c2NGb3JtOworCUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlzdDsKKwor CXRzY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiAldSIs CisJCQkgb2JqZWN0SWQpOworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVD VCh0c2NUdXApOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmpl Y3RJZEdldERhdHVtKHRzY0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBz ZWFyY2ggcGFyc2VyICV1IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAo Rm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3Nl IHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVu dGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBDT05GSUdVUkFU SU9OICV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zv cm0tPmNmZ25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1l KSkpOworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBD T1BZJ2VkIGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3 aXNlIGFkZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJbGlzdCA9IE5JTDsKKwkvKiBDT1BZICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPUFk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNvcHkiKTsKKwlpZiAoY29waWVkLm9iamVjdElkICE9IEludmFsaWRPaWQp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dHNjb25maWd9RCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0NvbmZpZ1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSBjb3BpZWQub2JqZWN0SWQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAs ICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogUEFSU0VSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBUlNF Uj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFyc2VyIik7CisJaWYg KGNvcGllZC5vYmplY3RJZCA9PSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3BhcnNlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZv cm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFt ZSkpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBw ZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVh c2VTeXNDYWNoZSh0c3BUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0c2NUdXApOworCisJcmV0dXJu IHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNl cihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNwVHVw OworCU9ialRyZWUgICAgKnN0bXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7 CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hl MShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdGV4dCBzZWFyY2ggcGFyc2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNw Rm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRl bnRpdHl9RCAoJXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggUEFSU0VSICV7 aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnBy c25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOwor CisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBT VEFSVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVEFSVD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAs ICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRP S0VOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkdFVFRPS0VOPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJnZXR0b2tlbiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog RU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVORD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZW5kIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTEVYVFlQRVM9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImxleHR5cGVzIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURM SU5FICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZv cm0tPnByc2hlYWRsaW5lKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BU dXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVm aW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7 CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRt cDsKKwlMaXN0CSAgICpsaXN0OworCURhdHVtCQlvcHRpb25zOworCWJvb2wJCWlzbnVsbDsKKwlG b3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJ Q1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQg c2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RG b3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lk ZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3X29ianRyZWUoIkNSRUFU RSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQgU0VBUkNIIERJQ1RJT05B UlkgJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9y bS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFt ZSkpKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlsaXN0ID0gTklMOwor CisJLyogVEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzZEZvcm0t PmRpY3R0ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkgdXNlbGVz cyByZXByZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhvdXQgbW9y ZSB0c19jYWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdl dEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGlu aXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwg MCk7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9u c31zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwgIigl e2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJl dHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNU ZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJ dHN0VHVwOworCU9ialRyZWUgICAgKnN0bXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJdHN0VHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBHRVRTVFJVQ1QodHN0VHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJD SCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQg U0VBUkNIIFRFTVBMQVRFICV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHN0 Rm9ybS0+dG1wbG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJ bGlzdCA9IE5JTDsKKworCS8qIElOSVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5pdCIpOworCWlmIChPaWRJ c1ZhbGlkKHRzdEZvcm0tPnRtcGxpbml0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGluaXQpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYSVpFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWElaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAibGV4aXplIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxsZXhpemUpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJh eV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUodHN0VHVwKTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFsdGVyVFNDb25maWd1cmF0aW9uU3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpjb25maWc7CisJT2JqVHJlZSAgICAq dG1wOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJ LyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJ Tkc6CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQURE IE1BUFBJTkcKKwkgKiAJCUZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6 LCB9RAorCSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJICogQUxU RVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7 aWZfZXhpc3RzfXMKKwkgKiAJCUZPUiAle3Rva2VudHlwZX1JCisJICoKKwkgKiBjYXNlIEFMVEVS X1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOOgorCSAqIEFMVEVSIFRFWFQgU0VBUkNI IENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKwkgKiAJCUZPUiAle3Rv a2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorCSAqCisJICogY2FzZSBBTFRF Ul9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQUElORworCSAqIAkJUkVQTEFDRSAle29sZF9kaWN0 aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKwkgKgorCSAqIGNhc2UgQUxURVJfVFND T05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisJICogCQlGT1IgJXt0b2tlbnR5 cGU6LCB9SSBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RAorCSAqIAkJV0lUSCAle25ld19kaWN0 aW9uYXJ5fUQKKwkgKi8KKworCWNvbmZpZyA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIik7CisKKwkvKiBkZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBw cm9wcmlhdGUgdG8gZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJ CQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsK KworCQljYXNlIEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAor CQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIklGIEVYSVNUUyIsIDApOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBub2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbmZpZywgIiV7aWZfZXhpc3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBB TFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwK KwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQkJYXBwZW5kX29i amVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFz c0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VO OgorCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1B UFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNj ZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVz cy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tl biBsaXN0LCBmb3Igc3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5k ID09IEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJf VFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRF Ul9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HKQorCXsKKwkJbGlzdCA9IE5JTDsKKwkJZm9yZWFjaChj ZWxsLCBub2RlLT50b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5n X29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNv bmZpZywgIkZPUiAle3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQorCisJLyogYWRkIGZ1cnRo ZXIgc3ViY29tbWFuZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFM VEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05G SUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxU RVIgTUFQUElORyBGT1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBO SUw7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJ CQlPYmpUcmVlICAgICpkaWN0b2JqOworCisJCQlkaWN0b2JqID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5h dHNjZmcuZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3 X29iamVjdF9vYmplY3QoZGljdG9iaikpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29u ZmlnLCAiV0lUSCAle2RpY3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5v ZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogdGhl IFJFUExBQ0UgZm9ybXMgd2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0 KGNtZC0+ZC5hdHNjZmcubmRpY3RzID09IDIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25m aWcsICJSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21k LT5kLmF0c2NmZy5kaWN0SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywg IldJVEggJXtuZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRz Y2ZnLmRpY3RJZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4gY29uZmlnOworfQorCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICphbHRlclRTRDsKKwlPYmpUcmVlICAgICp0bXA7 CisJRGF0dW0JCW9wdGlvbnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlp c251bGw7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKwor CXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgIgorCQkJICJ3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VU U1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICogQUxURVIgVEVY VCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorCSAq LworCisJYWx0ZXJUU0QgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFS WSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUU0QsICIle2lkZW50aXR5fUQiLAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyoKKwkgKiBB ZGQgdGhlIGRlZmluaXRpb24gbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBnX3RzX2RpY3QgZGljdGlu aXRvcHRpb24KKwkgKiBjb2x1bW4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRT RElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9u LAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDApOworCWlm ICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsIFRl eHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0 aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVy VFNELCAiKCV7ZGVmaW5pdGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCVJlbGVhc2VTeXNDYWNo ZSh0c2RUdXApOworCisJcmV0dXJuIGFsdGVyVFNEOworfQorCisvKgorICogLi4uIEFMVEVSIENP TFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf UmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9ialRyZWUgICAgKnJlbHNldDsKKwljaGFyCSAg ICpmbXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxP cHRpb25zOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogUkVTRVR8U0VUICgl e29wdGlvbnM6LCB9cykKKwkgKi8KKwlpZiAoaXNfcmVzZXQpCisJCWZtdCA9ICJSRVNFVCAiOwor CWVsc2UKKwkJZm10ID0gIlNFVCAiOworCisJcmVsc2V0ID0gbmV3X29ianRyZWUoZm10KTsKKwor CWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICpl bGVtOworCQlPYmpUcmVlICAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChj ZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9 IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNl dHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmVsc2V0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNl dHMpOworCisJcmV0dXJuIHJlbHNldDsKK30KKworLyoKKyAqIGRlcGFyc2VfVmlld1N0bXQKKyAq CQlkZXBhcnNlIGEgVmlld1N0bXQKKyAqCisgKiBHaXZlbiBhIHZpZXcgT0lEIGFuZCB0aGUgcGFy c2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9W aWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlWaWV3U3RtdCAgICpu b2RlID0gKFZpZXdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICp2aWV3U3RtdDsKKwlP YmpUcmVlICAgICp0bXA7CisJUmVsYXRpb24JcmVsYXRpb247CisKKwlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJ RVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9cworCSAqLworCXZpZXdTdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qodmlld1N0bXQsICIle29yX3Jl cGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHZpZXdTdG10LCAiJXtwZXJzaXN0ZW5jZX1zIiwKKwkJCQkJ CSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSk7 CisKKwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikp OworCisJYXBwZW5kX29iamVjdF9vYmplY3Qodmlld1N0bXQsICJWSUVXICV7aWRlbnRpdHl9RCIs IHRtcCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh2aWV3U3RtdCwgIkFTICV7cXVlcnl9cyIs CisJCQkJCQkgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwob2JqZWN0SWQpKTsKKworCXJlbGF0aW9u X2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHZpZXdTdG10Owor fQorCisvKgorICogRGVwYXJzZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3RhdGVtZW50LCBp dCBpcyBhIHZhcmlhbnQgb2YgQ3JlYXRlVGFibGVBc1N0bXQKKyAqCisgKiBOb3RlIHRoYXQgQ1JF QVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPIGNhbiBhbHNvIGJlIGRlcGFyc2VkIGJ5CisgKiBkZXBh cnNlX0NyZWF0ZVRhYmxlQXNTdG10IHRvIHJlbW92ZSB0aGUgU0VMRUNUIElOVE8gY2xhdXNlLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVGFibGVBc1N0bXQgKm5v ZGUgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlPYmpUcmVlICAg ICpjcmVhdGVTdG10OworCU9ialRyZWUgICAgKnRtcDsKKwlPYmpUcmVlICAgICp0bXAyOworCWNo YXIJICAgKmZtdDsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgor CSAqIFJlamVjdCB1bnN1cHBvcnRlZCBjYXNlIHJpZ2h0IGF3YXkuCisJICovCisJaWYgKCgoUXVl cnkgKikgKG5vZGUtPnF1ZXJ5KSktPmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQllbG9n KEVSUk9SLCAidW5pbXBsZW1lbnRlZCBkZXBhcnNlIG9mIENSRUFURSBUQUJMRSBBUyBFWEVDVVRF Iik7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBJTlNFUlQgSU5UTyBpcyBkZXBhcnNlZCBhcyBDUkVB VEUgVEFCTEUgQVMuICBUaGV5IGFyZQorCSAqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHN5bm9u eW1zIHNvIHRoZXJlIGlzIG5vIGhhcm0gZnJvbSB0aGlzLgorCSAqCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFtNQVRFUklBTElaRUQgVklFVyB8IFRBQkxF XSAle2lmX25vdF9leGlzdHN9cworCSAqIAkJJXtpZGVudGl0eX1EICV7Y29sdW1uc31zIFsle29u X2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cworCSAqIAkJQVMgJXtxdWVyeX1zICV7d2l0aF9ub19k YXRhfXMiCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZt dCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4 aXN0c31zICI7CisJZWxzZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAl e2lmX25vdF9leGlzdHN9cyAiOworCisJY3JlYXRlU3RtdCA9CisJCW5ld19vYmp0cmVlX1ZBKGZt dCwgMiwKKwkJCQkJICAgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJICAgZ2V0 X3BlcnNpc3RlbmNlX3N0cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJ ICAgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkgICBub2RlLT5pZl9ub3Rf ZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJLyogQWRkIGlkZW50aXR5ICovCisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTExVTU5TIGNsYXVzZSAqLworCWlmIChub2RlLT5p bnRvLT5jb2xOYW1lcyA9PSBOSUwpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJ CQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisJZWxzZQorCXsKKwkJbGlzdCA9 IE5JTDsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5jb2xOYW1lcykKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHVtbnM6LCB9SSkiLCAxLAorCQkJCQkJCSAi Y29sdW1ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNyZWF0ZVN0bXQsICIle2NvbHVtbnN9cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+aW50by0+YWNjZXNzTWV0 aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIsIG5v ZGUtPmludG8tPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJw cmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAi JXthY2Nlc3NfbWV0aG9kfXMiLCB0bXApOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCIsIDApOworCWxpc3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGws IG5vZGUtPmludG8tPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAq KSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKwor CWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBs aXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIs IHRtcCk7CisKKwkvKiBPTiBDT01NSVQgY2xhdXNlLiAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVX IGRvZXNuJ3QgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUp CisJeworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtvbl9jb21taXR9cyIs CisJCQkJCQkJIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50by0+b25Db21taXQpKTsK Kwl9CisKKwkvKiBUQUJMRVNQQUNFIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJU QUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMCk7CisJaWYgKG5vZGUtPmludG8tPnRhYmxlU3Bh Y2VOYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9cyIsIG5v ZGUtPmludG8tPnRhYmxlU3BhY2VOYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e3RhYmxlc3BhY2V9cyIsIHRtcCk7CisKKwkvKiBhZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0KElz QShub2RlLT5xdWVyeSwgUXVlcnkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10 LCAiQVMgJXtxdWVyeX1zIiwKKwkJCQkJCSBwZ19nZXRfcXVlcnlkZWYoKFF1ZXJ5ICopIG5vZGUt PnF1ZXJ5LCBmYWxzZSkpOworCisJLyogYWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+aW50by0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2Up OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3dpdGhfbm9fZGF0YX1zIiwg dG1wKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ cmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQg KENSRUFURSBUUklHR0VSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVU cmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zv cm07CisJT2JqVHJlZSAgICAqdHJpZ2dlcjsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJaW50CQkJ dGduYXJnczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3QJICAgKmV2ZW50czsKKworCXBnX3RyaWdn ZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ dHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190 cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VU U1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JF QVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9S IH1zIE9OCisJICogCQkle3JlbGF0aW9ufUQgJXtmcm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0 dHJzOiB9cyBGT1IgRUFDSAorCSAqIAkJJXtmb3JfZWFjaH1zICV7d2hlbn1zIEVYRUNVVEUgUFJP Q0VEVVJFICV7ZnVuY3Rpb259cworCSAqLworCXRyaWdnZXIgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50fXMiLAor CQkJCQkJIG5vZGUtPmlzY29uc3RyYWludCA/ICJDT05TVFJBSU5UIiA6ICIiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJUUklHR0VSICV7bmFtZX1JIiwgbm9kZS0+dHJpZ25h bWUpOworCisJaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQkVGT1JFKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQkVGT1JFIik7CisJZWxzZSBp ZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRFUikKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIkFGVEVSIik7CisJZWxzZSBpZiAobm9kZS0+dGlt aW5nID09IFRSSUdHRVJfVFlQRV9JTlNURUFEKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmln Z2VyLCAiJXt0aW1lfXMiLCAiSU5TVEVBRCBPRiIpOworCWVsc2UKKwkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCB0cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCS8q CisJICogRGVjb2RlIHRoZSBldmVudHMgdGhhdCB0aGUgdHJpZ2dlciBmaXJlcyBmb3IuICBUaGUg b3V0cHV0IGlzIGEgbGlzdDsgaW4KKwkgKiBtb3N0IGNhc2VzIGl0IHdpbGwganVzdCBiZSBhIHN0 cmluZyB3aXRoIHRoZSBldmVudCBuYW1lLCBidXQgd2hlbgorCSAqIHRoZXJlJ3MgYW4gVVBEQVRF IHdpdGggYSBsaXN0IG9mIGNvbHVtbnMsIHdlIHJldHVybiBhIEpTT04gb2JqZWN0LgorCSAqLwor CWV2ZW50cyA9IE5JTDsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0lOU0VSVCkK KwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQiKSk7 CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9ERUxFVEUpCisJCWV2ZW50cyA9IGxh cHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCWlmIChub2RlLT5l dmVudHMgJiBUUklHR0VSX1RZUEVfVFJVTkNBVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRz LCBuZXdfc3RyaW5nX29iamVjdCgiVFJVTkNBVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRS SUdHRVJfVFlQRV9VUERBVEUpCisJeworCQlpZiAobm9kZS0+Y29sdW1ucyA9PSBOSUwpCisJCXsK KwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVVBEQVRFIikp OworCQl9CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZSAgICAqdXBkYXRlOworCQkJTGlzdENlbGwg ICAqY2VsbDsKKwkJCUxpc3QJICAgKmNvbHMgPSBOSUw7CisKKwkJCS8qCisJCQkgKiBDdXJyZW50 bHkgb25seSBVUERBVEUgT0YgY2FuIGJlIG9iamVjdHMgaW4gdGhlIG91dHB1dCBKU09OLCBidXQK KwkJCSAqIHdlIGFkZCBhICJraW5kIiBlbGVtZW50IHNvIHRoYXQgdXNlciBjb2RlIGNhbiBkaXN0 aW5ndWlzaAorCQkJICogcG9zc2libGUgZnV0dXJlIG5ldyBldmVudCB0eXBlcy4KKwkJCSAqLwor CQkJdXBkYXRlID0gbmV3X29ianRyZWVfVkEoIlVQREFURSBPRiIsIDEsCisJCQkJCQkJCQkia2lu ZCIsIE9ialR5cGVTdHJpbmcsICJ1cGRhdGVfb2YiKTsKKworCQkJZm9yZWFjaChjZWxsLCBub2Rl LT5jb2x1bW5zKQorCQkJeworCQkJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGNl bGwpKTsKKworCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNvbG5h bWUpKTsKKwkJCX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVtbnM6 LCB9SSIsIGNvbHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVjdF9v YmplY3QodXBkYXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAi JXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3Jl bGlkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiT04gJXtyZWxhdGlvbn1EIiwg dG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRy aWdGb3JtLT50Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2JqVHJlZSAgICAqcmVsOworCisJCXJlbCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJICB0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cG9iaiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJp Z2dlciwgIiV7ZnJvbV90YWJsZX1zIiwgdG1wb2JqKTsKKworCWxpc3QgPSBOSUw7CisJaWYgKG5v ZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJp bmdfb2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCWxp c3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJJTklUSUFMTFkg REVGRVJSRUQiKSk7CisJYXBwZW5kX2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50 X2F0dHJzOiB9cyIsIGxpc3QpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIkZP UiBFQUNIICV7Zm9yX2VhY2h9cyIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVN RU5UIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0hFTiIsIDApOworCWlmIChub2Rl LT53aGVuQ2xhdXNlKQorCXsKKwkJTm9kZQkgICAqd2hlbkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVl OworCQlib29sCQlpc251bGw7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVt X3BnX3RyaWdnZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciks ICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdx dWFsIik7CisKKwkJd2hlbkNsYXVzZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5n KHZhbHVlKSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle2NsYXVzZX1zKSIs CisJCQkJCQkJIHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJ CQkJICAgd2hlbkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle3doZW59cyIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCQkiZnVuY25hbWUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5J TDsKKwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsK KwkJYnl0ZWEJICAgKnRnYXJnczsKKwkJY2hhcgkgICAqYXJnc3RyOworCQlib29sCQlpc251bGw7 CisJCWludAkJCWZpbmR4OworCQlpbnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7CisKKwkJ dGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJ QW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190 cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhF UlJPUiwgImludmFsaWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFU QSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJ CXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4Kysp CisJCXsKKwkJCXNpemVfdAkJdGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50 IGVuY29kaW5nIGlzIGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7CisJCQlpZiAocCAr IHRsZW4gPj0gYXJnc3RyICsgbGVudGdhcmdzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkJ CQkJYXJnc3RyLCBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKSkpOworCisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwKSk7CisKKwkJCXAgKz0gdGxlbiArIDE7CisJ CX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJYXBwZW5kX2Fy cmF5X29iamVjdCh0bXBvYmosICIle2FyZ3M6LCB9TCIsIGxpc3QpOwkvKiBtaWdodCBiZSBOSUwg Ki8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0cmlnZ2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zIiwgdG1wb2Jq KTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gdHJpZ2dlcjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVVc2VyTWFwcGluZ1N0bXQg KENSRUFURSBVU0VSIE1BUFBJTkcpCisgKgorICogR2l2ZW4gYSBVc2VyIE1hcHBpbmcgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsCisgKiByZXR1cm4gYW4gT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlIENSRUFURSBVU0VSIE1BUFBJTkcgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVXNlck1hcHBpbmdTdG10ICpub2RlID0gKENyZWF0 ZVVzZXJNYXBwaW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqY3JlYXRlU3RtdDsK KwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZv cm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFw cGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgdXAg b2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAq IGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VS TUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2Vy IG1hcHBpbmcgJXUiLCBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdfdXNlcl9tYXBwaW5n KSBHRVRTVFJVQ1QodHApOworCisJc2VydmVyID0gR2V0Rm9yZWlnblNlcnZlcihmb3JtLT51bXNl cnZlcik7CisKKwljcmVhdGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBVU0VSIE1BUFBJTkcg Iik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiRk9SICV7cm9sZX1SIiwg bmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSk7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdChjcmVhdGVTdG10LCAiU0VSVkVSICV7c2VydmVyfUkiLCBzZXJ2ZXItPnNlcnZlcm5h bWUpOworCisJLyogYWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVw YXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZXR1cm4gY3Jl YXRlU3RtdDsKK30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdp dmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LAorICogcmV0dXJuIHRoZSBKU09OIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5k LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyVXNlck1hcHBpbmdTdG10ICpu b2RlID0gKEFsdGVyVXNlck1hcHBpbmdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICph bHRlclN0bXQ7CisJUmVsYXRpb24JcmVsOworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3VzZXJf bWFwcGluZyBmb3JtOworCUZvcmVpZ25TZXJ2ZXIgKnNlcnZlcjsKKworCXJlbCA9IHRhYmxlX29w ZW4oVXNlck1hcHBpbmdSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qCisJICog TG9va3VwIHVwIG9iamVjdCBpbiB0aGUgY2F0YWxvZywgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZWFs IHdpdGgKKwkgKiBjdXJyZW50X3VzZXIgYW5kIHN1Y2guCisJICovCisKKwl0cCA9IFNlYXJjaFN5 c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB1c2VyIG1hcHBpbmcgJXUiLCBvYmplY3RJZCk7CisKKwlmb3JtID0gKEZvcm1fcGdf dXNlcl9tYXBwaW5nKSBHRVRTVFJVQ1QodHApOworCisJLyoKKwkgKiBMb29rdXAgdXAgb2JqZWN0 IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJl bnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFVTRVJNQVBQ SU5HT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHVzZXIgbWFw cGluZyAldSIsIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdF VFNUUlVDVCh0cCk7CisKKworCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2 ZXIpOworCisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWUoIkFMVEVSIFVTRVIgTUFQUElORyIpOwor CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdG10LCAiRk9SICV7cm9sZX1SIiwgbmV3X29i anRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChhbHRlclN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIsIHNlcnZlci0+c2VydmVybmFtZSk7CisK KwkvKiBhZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGFsdGVyU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3 T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOwor CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIGFsdGVyU3RtdDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTdGF0c1N0bXQgKEFMVEVSIFNUQVRJU1RJQ1Mp CisgKgorICogR2l2ZW4gYSBhbHRlciBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIHRoZSBKU09OIGJsb2IgcmVwcmVzZW50aW5nIHRo ZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU3Rh dHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyU3RhdHNTdG10 ICpub2RlID0gKEFsdGVyU3RhdHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICphbHRl clN0YXQ7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0Zm9ybTsK KworCWlmICghbm9kZS0+c3R4c3RhdHRhcmdldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhbHRlclN0 YXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgU1RBVElTVElDUyIpOworCisJLyogTG9va3VwIHVwIG9i amVjdCBpbiB0aGUgY2F0YWxvZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljICV1Iiwg b2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJV Q1QodHApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJTdGF0LCAiJXtpZGVudGl0eX1E IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9ybS0+c3R4bmFtZSkpKTsKKworCWFwcGVu ZF9mbG9hdF9vYmplY3QoYWx0ZXJTdGF0LCAiU0VUIFNUQVRJU1RJQ1MgJXt0YXJnZXR9biIsIG5v ZGUtPnN0eHN0YXR0YXJnZXQpOworCisJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwlyZXR1cm4gYWx0 ZXJTdGF0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlZnJlc2hNYXRWaWV3U3RtdCAoUkVGUkVT SCBNQVRFUklBTElaRUQgVklFVykKKyAqCisgKiBHaXZlbiBhIG1hdGVyaWFsaXplZCB2aWV3IE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZSByZWZyZXNoIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQg KikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJlZnJlc2hTdG10OworCU9ialRyZWUgICAgKnRt cDsKKworCXJlZnJlc2hTdG10ID0gbmV3X29ianRyZWVfVkEoIlJFRlJFU0ggTUFURVJJQUxJWkVE IFZJRVciLCAwKTsKKworCS8qIEFkZCBhIENPTkNVUlJFTlRMWSBjbGF1c2UgKi8KKwlhcHBlbmRf c3RyaW5nX29iamVjdChyZWZyZXNoU3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5v ZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKwkvKiBBZGQgdGhlIG1hdHZp ZXcgbmFtZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJlc2hTdG10LCAiJXtpZGVudGl0 eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCS8qIEFkZCBhIFdJVEggTk8gREFUQSBj bGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJ CSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJIG5vZGUtPnNraXBEYXRhID8gdHJ1ZSA6 IGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZWZyZXNoU3RtdCwgIiV7d2l0aF9ub19k YXRhfXMiLCB0bXApOworCisJcmV0dXJuIHJlZnJlc2hTdG10OworfQorCisvKgorICogRGVwYXJz ZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEg bGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4uKSBjb250ZW50cy4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVz ZXQpCit7CisJT2JqVHJlZSAgICAqc2V0OworCU9ialRyZWUgICAgKm9wdG5hbWU7CisKKwlzZXQg PSBuZXdfb2JqdHJlZSgiIik7CisJb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChl bGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFt ZSwgIiV7c2NoZW1hfUkuIiwgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCBlbGVtLT5kZWZuYW1lKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHNldCwgIiV7bGFiZWx9cyIsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNl dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qoc2V0LCAiID0gJXt2YWx1ZX1MIiwKKwkJCQkJCQkg ZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihl bGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJuIHNldDsKK30KKworLyoKKyAqIEhh bmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAqLworY2hhciAqCitkZXBhcnNlX2Ry b3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlw ZSwKKwkJCQkJIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0YSBzdHI7 CisJY2hhcgkgICAqY29tbWFuZDsKKwljaGFyCSAgICppZGVudGl0eSA9IChjaGFyICopIG9iamlk ZW50aXR5OworCWNoYXIJICAgKmZtdDsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAg KnN0bXQyOworCUpzb25iCSAgICpqc29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJ Zm10ID0gcHNwcmludGYoIkRST1AgJXMgSUYgRVhJU1RTICUle29iamlkZW50aXR5fXMiLCBvYmpl Y3R0eXBlKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJvYmppZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVND QURFIiwgMSwKKwkJCQkJCSAgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERS T1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMi LCBzdG10Mik7CisKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJY29tbWFuZCA9 IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xFTik7 CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGlu ZyBvZiBGdW5jdGlvbgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1bmN0aW9uU2V0 KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpU cmVlICAgICpvYmo7CisKKwlpZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsKKwkJb2JqID0g bmV3X29ianRyZWUoIlJFU0VUIEFMTCIpOworCX0KKwllbHNlIGlmICh2YWx1ZSAhPSBOVUxMKQor CXsKKwkJb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAxLAorCQkJCQkJ CSAic2V0X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdV QyB2YXJpYWJsZSBuYW1lcyBhcmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJ CSAqIHF1b3RlZC4KKwkJICovCisJCWlmIChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVl KSAmIEdVQ19MSVNUX1FVT1RFKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtz ZXRfdmFsdWV9cyIsIHZhbHVlKTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2Jq LCAiVE8gJXtzZXRfdmFsdWV9TCIsIHZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJb2JqID0gbmV3 X29ianRyZWUoIlJFU0VUIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIiV7c2V0X25h bWV9SSIsIG5hbWUpOworCX0KKworCXJldHVybiBvYmo7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEluZGV4U3RtdC4KKyAqCisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBj b25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlJbmRleFN0 bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqaW5kZXhT dG10OworCU9ialRyZWUgICAgKnRtcG9iajsKKwlSZWxhdGlvbglpZHhyZWw7CisJUmVsYXRpb24J aGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZpbml0aW9uOworCWNo YXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwljaGFyCSAgICp3aGVy ZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29uc3RyYWludCkKKwl7 CisJCS8qCisJCSAqIEluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhlciBjb25zdHJhaW50 cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBoZXJlLgorCQkgKi8K KwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3BlbihpZHhyZWwtPnJkX2lu ZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9pbmRleGRlZl9kZXRh aWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlvbiwgJnJlbG9wdGlv bnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50 bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTgorCSAqICV7dGFibGV9RCBVU0lORyAl e2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlvbn1zKSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworCSAq ICV7d2hlcmVfY2xhdXNlfXMKKwkgKi8KKwlpbmRleFN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle3VuaXF1ZX1zIiwKKwkJ CQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiKTsKKworCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKGluZGV4U3RtdCwgIklOREVYIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0 bXQsICIle2NvbmN1cnJlbnRseX1zIiwKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNV UlJFTlRMWSIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle2lm X25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJ U1RTIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7bmFtZX1J IiwKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHhyZWwpKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShoZWFwcmVsKSkpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoaW5kZXhTdG10LCAiVVNJTkcgJXtpbmRleF9hbX1zIiwgaW5kZXhfYW0pOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiKCV7ZGVmaW5pdGlvbn1zKSIsIGRlZmlu aXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRI Iik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigl e29wdHN9cykiLCByZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwg IiV7d2l0aH1zIiwgdG1wb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBvYmogPSBuZXdf b2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9cyIsIHRhYmxlc3BhY2UpOworCWVsc2UKKwkJ YXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCisJLyog V0hFUkUgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYgKHdo ZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3doZXJlfXMiLCB3 aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3doZXJlX2Ns YXVzZX1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwl0YWJsZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGlu ZGV4U3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAq CisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0dXJuIGEgc2NoZW1hLXF1YWxpZmllZCB0YWJsZSBs aXN0IHJlcHJlc2VudGluZworICogdGhlIHBhcmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJl bnRzID0gTklMOworCVJlbGF0aW9uCWluaFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5L ZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKElu aGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4g PSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVsLCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAor CQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2JqVHJlZSAgICAqcGFy ZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1JbmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VU U1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJ cGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBPTiBDT01NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24g b3B0aW9uKQoreworCU9ialRyZWUgICAgKm9uY29tbWl0OworCisJb25jb21taXQgPSBuZXdfb2Jq dHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRpb24pCisJeworCQljYXNlIE9OQ09NTUlU X0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3Zh bHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9X UzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9 cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJW RV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92 YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRf Tk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVl fXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdChvbmNvbW1pdCwgInByZXNlbnQiLCBmYWxzZSk7 CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb25jb21taXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10 KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbmFtZVN0bXQg Km5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmVuYW1lU3Rt dDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqb2JqdHlwZTsKKwlSZWxhdGlvbgly ZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVO QU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICog b2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRo ZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25l LiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5v dGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAq IChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBw b3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5y ZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX0lOREVY OgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJY2FzZSBP QkpFQ1RfTUFUVklFVzoKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJ ICogQUxURVIgJXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFt ZX1JCisJCQkgKi8KKwkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVU eXBlKTsKKwkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJcmVs YXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJlbmFt ZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDApOworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19v ayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3Rt dCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2No ZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAor CQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXsK KwkJCQlIZWFwVHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdfcG9saWN5IHBvbEZvcm07CisJCQkJ UmVsYXRpb24JcGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRhIGtleTsKKwkJCQlTeXNTY2FuRGVz YyBzY2FuOworCisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25fb3BlbihQb2xpY3lSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0KCZrZXksIEFudW1fcGdfcG9saWN5 X29pZCwKKwkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCQkJT2Jq ZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2NhbihwZ19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJCQkJICBO VUxMLCAxLCAma2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcG9saWN5ICV1IiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9s Rm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkJCQlyZW5hbWVT dG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSIsIDApOworCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCSBub2RlLT5t aXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmVuYW1lU3RtdCwgIiV7cG9saWN5bmFtZX1JIiwgbm9kZS0+c3VibmFtZSk7CisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIk9OICV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCSBub2RlLT5uZXdu YW1lKTsKKwkJCQlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBn X3BvbGljeSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVt YUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCisJCQkvKgorCQkJICogVmVy Ym9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIG9ianR5cGUg JXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUKKwkJCSAqICV7Y29sbmFtZX1JIFRPICV7bmV3 bmFtZX1JICV7Y2FzY2FkZX1zCisJCQkgKgorCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBvYmp0 eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUKKwkJCSAqIENPTFVNTiAle2Nv bG5hbWV9SSBUTyAle25ld25hbWV9SQorCQkJICovCisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBl ID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQl7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVl KCJBTFRFUiBUWVBFIik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7 aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlk LAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0 ciA9IHBzcHJpbnRmKCJSRU5BTUUgQVRUUklCVVRFICUle2NvbG5hbWV9SSIpOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZWxhdGlv blR5cGUpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJ CXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJCQkJLyogQ29tcG9zaXRlIHR5 cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBl ID09IE9CSkVDVF9DT0xVTU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQs ICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElT VFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRl bnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAor CQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9 IHBzcHJpbnRmKCJSRU5BTUUgQ09MVU1OICUle2NvbG5hbWV9SSIpOworCQkJfQorCisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCBmbXRzdHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+ bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJ CQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNl bnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NB U0NBREUpKTsKKworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXsKKwkJCQljaGFyCSAg ICppZGVudDsKKwkJCQlIZWFwVHVwbGUJcHJvY3R1cDsKKwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zv cm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlBc3NlcnQoSXNBKG5vZGUtPm9iamVj dCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikg bm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsCisJCQkJCQkgYWRkcmVzcy5v YmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1 cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0 ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsCisJCQkJCQkJCSBxdW90ZV9xdWFs aWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvY2Zvcm0tPnByb25hbWVzcGFj ZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCSBm b3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJZCwgdHJ1ZSkpOworCisJCQkJZm10 c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgUkVOQU1FIFRPICUle25ld25h bWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOwor CQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJCSJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50LAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9i alR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0 dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJ CQlIZWFwVHVwbGUJb3BjVHVwOworCQkJCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJCUxp c3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkgICAq b3BjbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxURVIg JXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3 bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7 CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVt KGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkK KwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBP SUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3Jt X3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2Nv cHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3Qg dGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywg JnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJ CQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJ CQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JK RUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGZUdXA7CisJCQkJSGVhcFR1cGxl CWFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtCWFt Rm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOwor CQkJCWNoYXIJICAgKm9wZm5hbWU7CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNw cmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVO QU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVuYW1lVHlwZSkpOworCisJCQkJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lE LCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkK KwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWls eSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJb3BmRm9ybSA9 IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCQkJCWFtVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkp OworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCQkJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCQkJCSBvcGZGb3Jt LT5vcGZtZXRob2QpOworCisJCQkJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1 cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVj dCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25z dHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJ CQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wZm5hbWUpLAorCQkJ CQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJTmFtZVN0 cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCQkJCVJlbGVh c2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfU0NI RU1BOgorCQkJcmVuYW1lU3RtdCA9CisJCQkJbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAl e2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkgICAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVD VF9GRFc6CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NF UlZFUjoKKwkJCXsKKwkJCQlTdHJpbmcJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoU3RyaW5nLCBu b2RlLT5vYmplY3QpOworCisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50 aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCQkJCXJlbmFtZVN0bXQgPQorCQkJCQluZXdfb2JqdHJl ZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHN0 clZhbChpZGVudGl0eSksCisJCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+bmV3bmFtZSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJ eworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsK KwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdfcmV3cml0ZSA9IHJlbGF0aW9uX29w ZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJcmV3clR1cCA9IGdl dF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwgQW51bV9wZ19yZXdyaXRlX29pZCwg YWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRT VFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUki LAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkicnVsZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCQkJcmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJCQkJCQkJIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShw Z19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3Bn X3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3Ry aWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdl dF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKwor CQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJu YW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJ CTMsCisJCQkJCQkJCQkJCSJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5h bWUsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJCQl0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2Vy LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09M TEFUSU9OOgorCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgorCQljYXNlIE9CSkVDVF9UWVBF OgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNh c2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCWNhc2Ug T0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXsK KwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJCVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0J CW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFj ZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7 CisJCQkJY2hhcgkgICAqZm10c3RyaW5nOworCisJCQkJLyogT2J0YWluIG9iamVjdCB0dXBsZSAq LworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2cs IGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElk KTsKKworCQkJCS8qIE9idGFpbiBuYW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdl dF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9 IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlv bkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVzcGFjZSIpOworCisJCQkJb2JqdHlwZSA9IHN0cmlu Z2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJCWZtdHN0cmluZyA9IHBzcHJpbnRm KCJBTFRFUiAlcyIsIG9ianR5cGUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZB KGZtdHN0cmluZywKKwkJCQkJCQkJCQkJMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVu YW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxs YXN0KGlkZW50aXR5KSkpKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQs ICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJ CXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVh azsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBl ICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0dXJuIHJlbmFtZVN0bXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIgLi4uIERFUEVO RFMgT04gLi4uKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckRlcGVuZFN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJPYmplY3REZXBlbmRz U3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlICAgICphbHRlckRlcGVuZGVTdG10ID0gTlVMTDsKKworCisJaWYgKG5vZGUtPm9iamVjdFR5 cGUgPT0gT0JKRUNUX0lOREVYKQorCXsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlPYmpUcmVlICAgICpxdWFsaWZpZWQ7 CisKKwkJYWx0ZXJEZXBlbmRlU3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBJTkRFWCIpOworCisJ CXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5y ZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRGVwZW5kZVN0bXQsICIle2lkZW50aXR5fUQiLCBxdWFs aWZpZWQpOworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtOT31zIiwKKwkJCQkJ CQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6ICIiKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhh bHRlckRlcGVuZGVTdG10LCAiREVQRU5EUyBPTiBFWFRFTlNJT04iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7bmV3bmFtZX1JIiwgc3RyVmFsKG5vZGUtPmV4 dG5hbWUpKTsKKwl9CisJZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUg aW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsK KworCXJldHVybiBhbHRlckRlcGVuZGVTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2Vx dWVuY2UgQ0FDSEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqY2FjaGU7CisJY2hhcgkgICAqdG1wc3Ry OworCWNoYXIJICAgKmZtdDsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxY2FjaGUpOworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIENBQ0hF ICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCWNhY2hl ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjYWNoZSIsCisJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGNhY2hlKTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoK K2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKmN5Y2xlOworCWNoYXIJICAg KmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCAle25vfXMgQ1lDTEUiOwor CWVsc2UKKwkJZm10ID0gIiV7bm99cyBDWUNMRSI7CisKKwljeWNsZSA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJ CQkJICAgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgIHNlcWRhdGEtPnNlcWN5Y2xlID8g IiIgOiAiTk8iKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QoY3ljbGUpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5DUkVNRU5UIEJZIG9wdGlvbi4KKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRy ZWUgICAgKmluY3JlbWVudGFsYnk7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsK KworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1z IjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9 IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlpbmNyZW1l bnRhbGJ5ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCQkgICAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGluY3JlbWVudGFsYnkp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJ T2JqVHJlZSAgICAqbWF4dmFsdWU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsK KworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiOwor CWVsc2UKKwkJZm10ID0gIk1BWFZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50 ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1heCk7CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJl ZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVl IiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KG1heHZhbHVlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVl bmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKm1pbnZhbHVlOworCWNoYXIJICAg KnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJT RVQgTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVl fXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4p OworCW1pbnZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJtaW52YWx1ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChtaW52YWx1ZSk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNl cXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqb3duZWRieSA9IE5V TEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEg a2V5c1szXTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVu ZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJ CQkJQW51bV9wZ19kZXBlbmRfY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2Fu S2V5SW5pdCgma2V5c1sxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlk KSk7CisJU2NhbktleUluaXQoJmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVt KDApKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRl ckluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1 cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkJ b3duZXJJZDsKKwkJRm9ybV9wZ19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZSAgICAqdG1wb2Jq OworCQljaGFyCSAgICpjb2xuYW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBv biBwZ19jbGFzcyAqLworCQlpZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8p CisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxh dGlvbklkKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQor CQkJY29udGludWU7CisKKwkJb3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1l ID0gZ2V0X2F0dG5hbWUob3duZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJ aWYgKGNvbG5hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5 ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIi LCBPYmpUeXBlT2JqZWN0LCB0bXBvYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7 CisJcmVsYXRpb25fY2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJ ZiB0aGVyZSdzIG5vIG93bmVyIGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50 LCBzZXQgdXAgc28KKwkgKiB0aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlm ICghb3duZWRieSkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJb3du ZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMywK KwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93 bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxz ZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sKKwlPYmpUcmVlICAgICpyZXN0YXJ0OworCWNoYXIJICAg KnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFz dF92YWx1ZSk7CisJcmVzdGFydCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIs IDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkJ ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHJlc3RhcnQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lU SCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFy dHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsK KwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQg V0lUSCAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOwor CXN0YXJ0d2l0aCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgdHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqc3RvcmFnZTsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKnN0cjsKKworCXN3aXRjaCAodHlwRm9ybS0+ dHlwc3RvcmFnZSkKKwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFr OworCQljYXNlICdlJzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAn eCc6CisJCQlzdHIgPSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3Ry ID0gIm1haW4iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxp ZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKworCXRt cHN0ciA9IHBzcHJpbnRmKCIlcyIsIHN0cik7CisKKwlmbXQgPSAiU1RPUkFHRSA9ICV7dmFsdWV9 cyI7CisKKwlzdG9yYWdlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0b3JhZ2UpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmVjZWl2ZTsKKworCXJlY2VpdmUg PSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmVjZWl2ZSwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdChyZWNlaXZlLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0 X29iamVjdChyZWNlaXZlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBvcHRp b24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnNlbmQ7 CisKKwlzZW5kID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJCSAgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2Vu ZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNlbmQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3Qoc2VuZCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo c2VuZCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqdHlwbW9k aW47CisKKwl0eXBtb2RpbiA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJ CQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2Rpbiwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kaW4sICJwcmVzZW50IiwgZmFsc2UpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cG1vZGluKTsKK30KKworCisvKgorICogRGVw YXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0IG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190 eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqdHlwbW9kb3V0OworCisJdHlwbW9kb3V0ID0g bmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCQkgICAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBt b2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVu ZF9ib29sX29iamVjdCh0eXBtb2RvdXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHR5cG1vZG91dCk7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5 cGUgYW5hbHl6ZSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1R5cGVfQW5hbHl6ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQorewor CU9ialRyZWUgICAgKnR5cGFuYWx5emU7CisKKwl0eXBhbmFseXplID0gbmV3X29ianRyZWVfVkEo IkFOQUxZWkU9IiwgMSwKKwkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXpl Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHR5cGFuYWx5emUsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0 eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwYW5h bHl6ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlw YW5hbHl6ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlwdCBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqdHlw c3Vic2NyaXB0OworCisJdHlwc3Vic2NyaXB0ID0gbmV3X29ianRyZWVfVkEoIlNVQlNDUklQVD0i LCAxLAorCQkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vic2NyaXB0Iik7CisJ aWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodHlwc3Vic2NyaXB0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwc3Vi c2NyaXB0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0 eXBzdWJzY3JpcHQpOworfQorCisvKgorICogRGVwYXJzZSBhIFJ1bGVTdG10IChDUkVBVEUgUlVM RSkuCisgKgorICogR2l2ZW4gYSBydWxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBydWxlIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJUnVsZVN0bXQgICAqbm9kZSA9IChSdWxlU3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcnVsZVN0bXQ7CisJT2JqVHJlZSAgICAqdG1wOworCVJl bGF0aW9uCXBnX3Jld3JpdGU7CisJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCUhlYXBUdXBs ZQlyZXdyVHVwOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCURhdHVt CQlldl9xdWFsOworCURhdHVtCQlldl9hY3Rpb25zOworCWJvb2wJCWlzbnVsbDsKKwljaGFyCSAg ICpxdWFsOworCUxpc3QJICAgKmFjdGlvbnM7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVf b2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3Jp dGUsIFJld3JpdGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJ cmV3clR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHJld3JUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0 ZSBydWxlIHdpdGggb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3Jt X3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCXJ1bGVTdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSBSVUxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIiV7 b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICIle2lkZW50aXR5fUkiLAorCQkJ CQkJIG5vZGUtPnJ1bGVuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAi QVMgT04gJXtldmVudH1zIiwKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfU0VMRUNUID8gIlNF TEVDVCIgOgorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJ CQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxFVEUiIDoKKwkJCQkJCSBub2Rl LT5ldmVudCA9PSBDTURfSU5TRVJUID8gIklOU0VSVCIgOiAiWFhYIik7CisJYXBwZW5kX29iamVj dF9vYmplY3QocnVsZVN0bXQsICJUTyAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3Jt LT5ldl9jbGFzcykpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICJETyAle2lu c3RlYWR9cyIsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIik7CisK Kwlldl9xdWFsID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9xdWFs LAorCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisJZXZf YWN0aW9ucyA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfYWN0aW9u LAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwgJmlzbnVsbCk7CisKKwlw Z19nZXRfcnVsZWRlZl9kZXRhaWxlZChldl9xdWFsLCBldl9hY3Rpb25zLCAmcXVhbCwgJmFjdGlv bnMpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldIRVJFICV7Y2xhdXNlfXMiLCAwKTsKKwor CWlmIChxdWFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjbGF1c2UiLCBxdWFsKTsK KwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiY2xhdXNlIik7CisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJ1bGVTdG10LCAid2hlcmVfY2xhdXNlIiwgdG1wKTsKKworCWxpc3QgPSBOSUw7 CisJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQorCXsKKwkJY2hhcgkgICAqYWN0aW9uID0gbGZpcnN0 KGNlbGwpOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KGFjdGlv bikpOworCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJ1bGVTdG10LCAiJXthY3Rpb25zOiwgfXMi LCBsaXN0KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmV3 cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBydWxlU3RtdDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVUcmFuc2Zvcm1TdG10IChDUkVBVEUgVFJBTlNGT1JNKS4KKyAqCisg KiBHaXZlbiBhIHRyYW5zZm9ybSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIFRSQU5TRk9S TSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9y bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3Jt U3RtdCAqbm9kZSA9IChDcmVhdGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl ICAgICpjcmVhdGVUcmFuc2Zvcm07CisJT2JqVHJlZSAgICAqc2lnbjsKKwlIZWFwVHVwbGUJdHJm VHVwOworCUhlYXBUdXBsZQlsYW5nVHVwOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdf dHJhbnNmb3JtIHRyZkZvcm07CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlGb3JtX3Bn X3Byb2MgcHJvY0Zvcm07CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfdHJhbnNmb3JtIHR1 cGxlICovCisJdHJmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRSRk9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cmZUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIHRyYW5zZm9ybSB3aXRoIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCXRyZkZvcm0gPSAoRm9ybV9wZ190cmFuc2Zvcm0pIEdFVFNUUlVDVCh0 cmZUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICov CisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCB0cmZGb3JtLT50cmZsYW5nKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbHVyZSBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRy ZmxhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxh Y2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKwkg KiAoIEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cywgVE8gU1FMIFdJVEggRlVO Q1RJT04KKwkgKiAle3NpZ25hdHVyZV90b2Z9cyApCisJICovCisJY3JlYXRlVHJhbnNmb3JtID0g bmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJh bnNmb3JtLCAiJXtvcl9yZXBsYWNlfXMiLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQ TEFDRSIgOiAiIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVFJB TlNGT1JNIEZPUiAle3R5cGVuYW1lfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJmRm9ybS0+dHJmdHlwZSkpOwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIkxBTkdVQUdFICV7bGFuZ3Vh Z2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogZGVwYXJz ZSB0aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmICh0cmZGb3JtLT50cmZmcm9tc3Fs ICE9IEludmFsaWRPaWQpCisJeworCQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJ ICogVmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5T Rk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFCisJCSAqICV7bGFuZ3VhZ2V9SSAoIEZST00g U1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyApCisJCSAqLworCisJCS8qIEdldCB0aGUg cGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJl IGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZmZyb21zcWwpOwor CQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgor CQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUg c28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAq LworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9i alRyZWUgICAgKnBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBs YXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwkJfQorCisJCXNp Z24gPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc2lnbiwgIiV7 aWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+ cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkp KTsKKwkJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwgcGFy YW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVUcmFuc2Zvcm0sICIoRlJPTSBT UUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwgc2lnbik7CisJCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKwl9CisJaWYgKHRyZkZvcm0tPnRyZnRvc3FsICE9IEludmFsaWRPaWQpCisJ eworCQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJLyoKKwkJICogVmVyYm9zZSBzeW50YXgK KwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFt ZX1EIExBTkdVQUdFCisJCSAqICV7bGFuZ3VhZ2V9SSAoIEZST00gU1FMIFdJVEggRlVOQ1RJT04g JXtzaWduYXR1cmV9cywgVE8gU1FMIFdJVEgKKwkJICogRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9m fXMgKQorCQkgKgorCQkgKiBPUgorCQkgKgorCQkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJB TlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UKKwkJICogJXtsYW5ndWFnZX1JICggVE8g U1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMgKQorCQkgKi8KKworCQkvKiBBcHBl bmQgYSAnLCcgaWYgdHJmZnJvbXNxbCBpcyBwcmVzZW50LCBlbHNlIGFwcGVuZCAnKCcgKi8KKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiJXtjb21tYX1zIiwKKwkJCQkJ CQkgdHJmRm9ybS0+dHJmZnJvbXNxbCAhPSBJbnZhbGlkT2lkID8gIiwiIDogIigiKTsKKworCQkv KiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBUTyBGVU5DVElPTiAqLworCQlwcm9jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRyZkZvcm0tPnRyZnRvc3FsKTsKKwkJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZnRvc3Fs KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJ LyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0 dXJlIHNvIHdlIGNhbiB1c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgor CQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJ CQlPYmpUcmVlICAgICpwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQkJYXBwZW5kX29i amVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1z ID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJCX0KKwor CQlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNpZ24s ICIle2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zv cm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25h bWUpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2FyZ3VtZW50czosIH1zKSIs IHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlVHJhbnNmb3JtLCAiVE8g U1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMiLCBzaWduKTsKKwkJUmVsZWFzZVN5 c0NhY2hlKHByb2NUdXApOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVUcmFuc2Zv cm0sICIle2Nsb3NlX2JyYWNrZXR9cyIsICIpIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1 cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRyZlR1cCk7CisJcmV0dXJuIGNyZWF0ZVRyYW5zZm9ybTsK K30KKworLyoKKyAqIEFwcGVuZCBhIE5VTEwtb3ItcXVvdGVkLWxpdGVyYWwgY2xhdXNlLiAgVXNl ZnVsIGZvciBDT01NRU5UIGFuZCBTRUNVUklUWQorICogTEFCRUwuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfbGl0ZXJhbF9vcl9udWxsKE9ialRyZWUgKm1haW5vYmosIGNoYXIgKmVsZW1uYW1l LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlCSp0b3A7CisJT2JqVHJlZSAqcGFydDsKKworCXRv cCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlwYXJ0ID0gbmV3X29ianRyZWVfVkEoIk5VTEwi LCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJICAhdmFsdWUpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRvcCwgIiV7bnVsbH1zIiwgcGFydCk7CisJcGFydCA9IG5l d19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJ CQkJICAhIXZhbHVlKTsKKwlpZiAodmFsdWUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHBhcnQs ICIle3ZhbHVlfUwiLCB2YWx1ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG9wLCAiJXtsaXRl cmFsfXMiLCBwYXJ0KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KG1haW5vYmosIGVsZW1uYW1l LCB0b3ApOworfQorCisvKgorICogRGVwYXJzZSBhIENvbW1lbnRTdG10IHdoZW4gaXQgcGVydGFp bnMgdG8gYSBjb25zdHJhaW50LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbW1l bnRPbkNvbnN0cmFpbnRTbXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29t bWVudFN0bXQgKm5vZGUgPSAoQ29tbWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAg KmNvbW1lbnQ7CisJSGVhcFR1cGxlCWNvbnN0clR1cDsKKwlGb3JtX3BnX2NvbnN0cmFpbnQgY29u c3RyRm9ybTsKKwlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwlBc3NlcnQobm9kZS0+b2JqdHlwZSA9 PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCB8fCBub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05T VFJBSU5UKTsKKworCWNvbnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgJXUiLCBvYmplY3RJZCk7CisJY29u c3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25zdHJUdXApOworCisJ aWYgKE9pZElzVmFsaWQoY29uc3RyRm9ybS0+Y29ucmVsaWQpKQorCQlPYmplY3RBZGRyZXNzU2V0 KGFkZHIsIFJlbGF0aW9uUmVsYXRpb25JZCwgY29uc3RyRm9ybS0+Y29ucmVsaWQpOworCWVsc2UK KwkJT2JqZWN0QWRkcmVzc1NldChhZGRyLCBUeXBlUmVsYXRpb25JZCwgY29uc3RyRm9ybS0+Y29u dHlwaWQpOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIENPTU1FTlQgT04gQ09OU1RS QUlOVCAle2lkZW50aXR5fXMgT04gW0RPTUFJTl0gJXtwYXJlbnRvYmp9cyBJUyAle2NvbW1lbnR9 cworCSAqLworCWNvbW1lbnQgPSBuZXdfb2JqdHJlZSgiQ09NTUVOVCBPTiBDT05TVFJBSU5UIik7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjb21tZW50LCAiJXtpZGVudGl0eX1zIiwgcHN0cmR1 cChOYW1lU3RyKGNvbnN0ckZvcm0tPmNvbm5hbWUpKSk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco Y29tbWVudCwgIk9OIik7CisKKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RS QUlOVCkKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY29tbWVudCwgIkRPTUFJTiIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoY29tbWVudCwgIiV7cGFyZW50b2JqfXMiLAorCQkJCQkJIGdldE9i amVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBjb21tZW50IGNsYXVz ZSAqLworCWFwcGVuZF9saXRlcmFsX29yX251bGwoY29tbWVudCwgIklTICV7Y29tbWVudH1zIiwg bm9kZS0+Y29tbWVudCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoY29uc3RyVHVwKTsKKwlyZXR1cm4g Y29tbWVudDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21tZW50U3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21tZW50U3RtdCAqbm9k ZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqY29tbWVudDsKKwlj aGFyCSAgICppZGVudGl0eTsKKworCS8qCisJICogQ29uc3RyYWludHMgYXJlIHN1ZmZpY2llbnRs eSBkaWZmZXJlbnQgdGhhdCBpdCBpcyBlYXNpZXIgdG8gaGFuZGxlIHRoZW0KKwkgKiBzZXBhcmF0 ZWx5LgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UIHx8 CisJCW5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQpCisJeworCQlBc3NlcnQo YWRkcmVzcy5jbGFzc0lkID09IENvbnN0cmFpbnRSZWxhdGlvbklkKTsKKwkJcmV0dXJuIGRlcGFy c2VfQ29tbWVudE9uQ29uc3RyYWludFNtdChhZGRyZXNzLm9iamVjdElkLCBwYXJzZXRyZWUpOwor CX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKiBDT01NRU5UIE9OICV7b2JqdHlwZX1z ICV7aWRlbnRpdHl9cyBJUyAle2NvbW1lbnR9cworCSAqLworCWNvbW1lbnQgPSBuZXdfb2JqdHJl ZSgiQ09NTUVOVCBPTiIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbW1lbnQsICIle29ianR5 cGV9cyIsIChjaGFyICopIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUpKTsKKworCS8q CisJICogQWRkIHRoZSBvYmplY3QgaWRlbnRpdHkgY2xhdXNlLiAgRm9yIHplcm8gYXJndW1lbnQg YWdncmVnYXRlcyB3ZSBuZWVkIHRvCisJICogYWRkIHRoZSAoKikgYml0OyBpbiBhbGwgb3RoZXIg Y2FzZXMgd2UgY2FuIGp1c3QgdXNlIGdldE9iamVjdElkZW50aXR5LgorCSAqCisJICogWFhYIHNo b3VsZG4ndCB3ZSBpbnN0ZWFkIGZpeCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgZm9yIHplcm8tYXJn dW1lbnQKKwkgKiBhZ2dyZWdhdGVzPworCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVD VF9BR0dSRUdBVEUpCisJeworCQlIZWFwVHVwbGUJCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYwlw cm9jRm9ybTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElk R2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJv Y1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJl ICV1IiwgYWRkcmVzcy5vYmplY3RJZCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKHByb2NUdXApOworCQlpZiAocHJvY0Zvcm0tPnByb25hcmdzID09IDApCisJCQlpZGVu dGl0eSA9IHBzcHJpbnRmKCIlcygqKSIsCisJCQkJCQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlm aWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJ CQkJCQkJICAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZWxzZQorCQkJaWRlbnRp dHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCQlSZWxlYXNlU3lzQ2Fj aGUocHJvY1R1cCk7CisJfQorCWVsc2UKKwkJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgm YWRkcmVzcywgZmFsc2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY29tbWVudCwgIiV7aWRl bnRpdHl9cyIsIGlkZW50aXR5KTsKKwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNlOyBjYW4gYmUg ZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJhbC4gICovCisJYXBwZW5kX2xpdGVyYWxfb3Jf bnVsbChjb21tZW50LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKworCXJldHVy biBjb21tZW50OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUFtU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpDcmVhdGVBbTsK KwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19hbSAgYW1Gb3JtOworCWNoYXIgICAgICAgKmFt dHlwZTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUiLCBvYmplY3RJZCk7 CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICogQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVudGl0eX1JIFRZUEUg JXthbV90eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RAorCSAqLworCUNyZWF0ZUFtID0gbmV3X29i anRyZWUoIkNSRUFURSBBQ0NFU1MgTUVUSE9EIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoQ3Jl YXRlQW0sICIle2lkZW50aXR5fUkiLAorCQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpKTsK KworCXN3aXRjaCAoYW1Gb3JtLT5hbXR5cGUpCisJeworCQljYXNlICdpJzoKKwkJCWFtdHlwZSA9 ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlhbXR5cGUgPSAiVEFCTEUiOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlICVjIGZv ciBhY2Nlc3MgbWV0aG9kIiwgYW1Gb3JtLT5hbXR5cGUpOworCX0KKwlhcHBlbmRfc3RyaW5nX29i amVjdChDcmVhdGVBbSwgIlRZUEUgJXthbV90eXBlfXMiLCBhbXR5cGUpOworCisJLyogQWRkIHRo ZSBIQU5ETEVSIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KENyZWF0ZUFtLCAiSEFO RExFUiAle2hhbmRsZXJ9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGFtRm9ybS0+YW1oYW5kbGVyKSk7CisK KwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCisJcmV0dXJuIENyZWF0ZUFtOworfQorCisKKy8q CisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNs b3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpjb21tYW5kOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2lt cGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5k LnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChu b2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJuIE5V TEw7CisKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVyeXRoaW5nIHRoYXQg UHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWcocGFyc2V0cmVlKSkK Kwl7CisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlU2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlckRvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFy eU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUmVmcmVz aE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0NyZWF0ZVRyaWdTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfUnVsZVN0bXQ6CisJCQlj b21tYW5kID0gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9DcmVhdGVQTGFuZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVh dGVMYW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9D cmVhdGVTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVVc2VyTWFwcGluZ1N0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9BbHRlclN0YXRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVy U3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyRmR3U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmluZVN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRh cnlPYmplY3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVh dGVFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5z aW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRl ckV4dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5z aW9uQ29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJCSBjbWQt PmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRl T3BGYW1pbHlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0NyZWF0ZUZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9u KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rp b25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFy c2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckNvbGxhdGlvblN0bXQ6CisJCQlj b21tYW5kID0gZGVwYXJzZV9BbHRlckNvbGxhdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUmVu YW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlck9iamVj dFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJCXBhcnNldHJl ZSwKKwkJCQkJCQkJCQkJCQljbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVh azsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlclBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJUeXBlU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RhdHNTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlU3RhdGlzdGljc1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICovCisJ CQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6IC8qIENSRUFURSBUWVBFIEFT IFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclRTRGlj dGlvbmFyeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf Q3JlYXRlVHJhbnNmb3JtU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyYW5zZm9y bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfVmlld1N0 bXQ6CQkvKiBDUkVBVEUgVklFVyAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfVmlld1N0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0 bXQ6CS8qIENSRUFURSBNQVRFUklBTElaRUQgVklFVyAqLworCQkJY29tbWFuZCA9IGRlcGFyc2Vf Q3JlYXRlVGFibGVBc1N0bXRfdmFuaWxsYShvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9Db21tZW50U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NvbW1lbnRT dG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNh c2UgVF9DcmVhdGVBbVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVBbVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY29tbWFuZCA9 IE5VTEw7CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBj b21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJfQorCisJcmV0 dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVw YXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHRhYmxlIGVsZW1lbnRzIChjb2x1bW5z IGFuZCBjb25zdHJhaW50cykuCisgKgorICogTm90ZSB3ZSBpZ25vcmUgY29uc3RyYWludHMgaW4g dGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0cmFjdGVkIGZyb20KKyAqIHN5c3RlbSBj YXRhbG9ncyBpbnN0ZWFkLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX1RhYmxlRWxlbWVu dHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4 dCwKKwkJCQkJICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSkKK3sKKwlMaXN0CSAgICplbGVt ZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlRWxlbWVu dHMpCisJeworCQlOb2RlCSAgICplbHQgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCXN3aXRj aCAobm9kZVRhZyhlbHQpKQorCQl7CisJCQljYXNlIFRfQ29sdW1uRGVmOgorCQkJCXsKKwkJCQkJ T2JqVHJlZSAgICAqdHJlZTsKKworCQkJCQl0cmVlID0gdHlwZWQgPworCQkJCQkJZGVwYXJzZV9D b2x1bW5EZWZfdHlwZWQocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5E ZWYgKikgZWx0KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZihyZWxhdGlvbiwgZHBjb250ZXh0 LAorCQkJCQkJCQkJCSAgY29tcG9zaXRlLCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkg IGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0gTlVMTCkKKwkJCQkJeworCQkJCQkJT2Jq RWxlbSAgICAqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBuZXdfb2JqZWN0X29iamVjdCh0cmVl KTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgY29sdW1uKTsKKwkJCQkJfQor CQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJhaW50OgorCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBub2RlIHR5cGUgJWQiLCBub2RlVGFn KGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogV29ya2hv cnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2Vf dXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUp Cit7CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBv bGRjeHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFy CSAgICpjb21tYW5kOworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUg ZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29u dGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBo YW5kbGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVm b3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJk ZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVG QVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsK KworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tl IHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lv bnMgb2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2Jq ZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUi IHRvCisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdz LiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxz IHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBp dCBjZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJj aFBhdGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5J TDsKKwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFk ZFRlbXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKwor CXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNh c2UgU0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVy VGFibGVTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfR3JhbnQ6CisJCQl0cmVlID0g ZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFt aWx5OgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJ CWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNz U3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXM6 CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChjbWQpOworCQkJ YnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRl clRTQ29uZmlndXJhdGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOwor CX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29u YgkgICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21t YW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURf TEVOKTsKKwl9CisJZWxzZQorCQljb21tYW5kID0gTlVMTDsKKworCS8qCisJICogQ2xlYW4gdXAu ICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVy J3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgor CSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxl dGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTE2NzUxOTE1ZgotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3 NjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBj b2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICog Q29udmVyc2lvbiBzcGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgd2UgZXhwYW5kIHRoZSBK U09OIGVsZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlTcGVj VHlwZW5hbWUsCisJU3BlY09wZXJhdG9ybmFtZSwKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVjU3Ry aW5nLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lkZW50aWZpZXIs CisJU3BlY1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1ZSB0 aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBl bnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30JCQlqc29uX3RyaXZh bHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBi dWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVj aWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9p ZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJ CSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCQkJCSAgIGNvbnZT cGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3Ry X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0 cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5k IHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQn cyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0 IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1 cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQor ZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNo YXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJ anNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFs LnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXlu YW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJ CQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVy biB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlr ZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9m YWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2 ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBr ZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5n LCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3Ig aXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgor ICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5 IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0 byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3Ry aW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtl eW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25i VmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhY WCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXku dHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52 YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVl RnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJ aWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxM OworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4gSlNPTiBv YmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3Ry aW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3Ro ID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOwor fQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsg XAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVy cm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkK KworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50X3RyaWdnZXJfZXhwYW5kX2Nv bW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWlu ZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8K K3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFp bmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2 YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3Qg Y2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0 ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0 cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJh eSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJhbSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2Vw ID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJT RV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBz aW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4g dGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9y CisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFm dGVyIGEgY29sb24uCisJCSAqLworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5m b0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0RhdGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJ bmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5nSW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRv ID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJ CWZvciAoOyBjcCA8IGVuZF9wdHI7KQorCQkJeworCQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsK KwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkgc2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVu dCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJh dG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmluZ0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJ YXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJCWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURW QU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJY29udGludWU7CisJCQkJfQor CisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJeworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIo Y3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVu ZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJidWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkK KwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRhdGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5V TEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygibWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4g Y29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJCXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNl ICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRlbnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNEb3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJ Y2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOwor CQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOwor CQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0gU3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVh azsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmllciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7 CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJ CWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9u IHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJCX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhl IGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsK KwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29u dGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKworCQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEg KHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJ CWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29uYl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwg YXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9q c29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVlLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJ fQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVy LiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFzc2VydChqc29udmFsLT50eXBlID09IGpidlN0 cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29udmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZh bC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9p ZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29u IHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1lLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlw ZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBlbGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlv bmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAg RG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFjaCBlbGVtZW50CisgKiBhcyBuZWNlc3Nhcnks IGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVkZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdo dCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMgd2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNh c2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0 ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAg KnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlm IChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZp ZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1l IiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVu dGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1l IiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi LiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8q CisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9p ZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpz b252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsK KwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAg ICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUg b3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0 eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMK KwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhl IGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFs IHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBm b3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkg KiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQg cmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNj aGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUs IE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwp OworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNf YXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5k YXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJewor CQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQlj YXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2Ug dHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3Npbmcg dHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVs c2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwg dHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3Ry aW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBx dW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz JXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworfQorCisvKgor ICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLwor CWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9 CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmlu YXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3Ry KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7 CisJfQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2 YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRo ZSBsYXR0ZXIgY2FzZSwgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxs CisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlu cyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4 cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8g YWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBi ZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0 cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZh bC0+dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1Ziwg anNvbnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5s ZW4pOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpz b25fdHJpdmFsdWUgcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIp OworCisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVu dCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhlciB0cnVlIG9yIGFic2Vu dCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIuCisJCSAqLworCQlpZiAocHJlc2VudCA9 PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShq c29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJfQorCWVsc2UKKwkJcmV0dXJuIGZhbHNl OworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEg c3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQo U3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOwor CVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1td ID0gIl9YWVpaWVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVw KGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkv KiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmds ZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYmCisJCXN0cmNocihz dHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBz dHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQg dG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0lu Zm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJ d2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5l eHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyog QWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsK KworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91 dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRl bGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBm cmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIGludGVnZXIg cXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5n SW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyZGF0dW07CisK KwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNf b3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmlj KSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisKKy8qCisg KiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1YmxpYyBl bGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBxdW90ZXMp OyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGluZyBhcyBh biBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9sZShTdHJp bmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZhbHVlIGlzX3B1 YmxpYzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFs LT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVi bGljID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7 CisJZWxzZQorCXsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJ CQkJCQkgInJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJCXsKKwkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7 CisJCQlwZnJlZShyb2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgb25lIEpT T04gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8gdGhlCisg KiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBh bmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhw ZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBmYWxzZSBp ZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFn CisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFuc2lvbiku CisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBi dWYsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbAkJcmVzdWx0ID0gdHJ1ZTsK KwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBn aXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNr ICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJy b3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxl cnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4 dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3 aXRjaCAoc3BlY2lmaWVyKQorCXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBl Y3RlZCBKU09OIHN0cmluZyBmb3IgJSVJIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJ CQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlp ZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1z ZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwK KwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0 ZWRuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9 IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0 cmluZyBvciBvYmplY3QgZm9yICUlcyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJ cGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlyZXN1bHQgPSBleHBhbmRfanNvbnZhbF9zdHJp bmcoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9zdHJsaXQoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1R5cGVuYW1l OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfdHlwZW5hbWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJh dG9ybmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVPIGVsZW1lbnQgXCIl c1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFu ZF9qc29udmFsX29wZXJhdG9yKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNw ZWNOdW1iZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQg XCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4 cGFuZF9qc29udmFsX251bWJlcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBT cGVjUm9sZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVSIGVsZW1lbnQgXCIl c1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFu ZF9qc29udmFsX3JvbGUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCX0KKworCWlmIChmbXQp CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEl0ZXJhdGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNP TiBhcnJheSwgZXhwYW5kaW5nIGVhY2ggb25lIGludG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5m byBwZXIgdGhlIGdpdmVuIGNvbnZlcnNpb24gc3BlY2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdp dmVuCisgKiBzZXBhcmF0b3IuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXko U3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIs IGNoYXIgKmFycmF5c2VwLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBj aGFyICpmbXQpCit7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29u YkNvbnRhaW5lciAqY29udGFpbmVyOworCUpzb25iSXRlcmF0b3IgKml0OworCUpzb25iVmFsdWUJ djsKKwlpbnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBh cnJheWVsZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAg YW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJy Y29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4 dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJ fQorCisJaWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJt c2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWNv bnRhaW5lciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250YWluZXJJ c0FycmF5KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIg aXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8oJmFycmF5 ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hpbGUgKCh0 eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05FKQorCXsK KwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmYXJyYXll bGVtKTsKKworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVtLCBwYXJh bSwgJnYsIHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJZmlyc3Qg PSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hvcnNlIGZvciBk ZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZGxfZGVwYXJzZV9qc29u X3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkgICAqanNv bmI7CisJU3RyaW5nSW5mbwlidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2YoU3RyaW5n SW5mb0RhdGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0RnVuY3Rp b25DYWxsMShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAo SnNvbmIgKikgRGF0dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpz b25iLT5yb290LCBidWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAq IFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBU aGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3Qg YmUgYSBzdHJpbmcpLgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3Ig bW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNs b3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwK KyAqIGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBjb252ZXJz aW9uIHNwZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJS4KKyAq IEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQll eHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFz IGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhw YW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBz CQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFz IGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFt ZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBu YW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVk CisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50 IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3Ig aXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVt CitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJ ICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJ anNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNz dHJpbmdfdG9fdGV4dChkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30K KworLyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBl eHBhbnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFu ZGluZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxs YmFjayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBz dHJpbmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQK aW5kZXggOWIzNTBkMDI1Zi4uYzFlMWEyYzE4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQK QEAgLTE1LDYgKzE1LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnY29weXRvLmMn LAogICAnY3JlYXRlYXMuYycsCiAgICdkYmNvbW1hbmRzLmMnLAorICAnZGRsX2RlcGFyc2UuYycs CisgICdkZGxfanNvbi5jJywKICAgJ2RlZmluZS5jJywKICAgJ2Rpc2NhcmQuYycsCiAgICdkcm9w Y21kcy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5YzlmOTFjYmEuLjQyMDVkZGEy MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDM5IEBAIHByb2Nl c3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRl bnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICog UmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVu Y2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIg ICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFw VHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBz ZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisK KwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xf U0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSks CisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2Vx X3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9m KEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6 ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2Vx OworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRo ZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggMjQ3ZDA4MTZh ZC4uYmVhMzVhNjI4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE0NDYsNyArMTQ0Niw4IEBAIFByb2Nl c3NVdGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJYWRkcmVzcyA9IERlZmlu ZUNvbGxhdGlvbihwc3RhdGUsCiAJCQkJCQkJCQkJCQkJICBzdG10LT5kZWZuYW1lcywKIAkJCQkJ CQkJCQkJCQkgIHN0bXQtPmRlZmluaXRpb24sCi0JCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3Rf ZXhpc3RzKTsKKwkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMsCisJCQkJCQkJCQkJ CQkJICAmc2Vjb25kYXJ5T2JqZWN0KTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWRlZmF1bHQ6CiAJ CQkJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBkZWZpbmUgc3RtdCB0eXBlOiAlZCIsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDI5MThmZGJmYjYuLmY2NGE3MjEzYjcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j bHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXN0 YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpOwogCiAKIC8qCkBAIC0zNjMsNyArMzYyLDcgQEAgZm9ybWF0X3R5cGVf d2l0aF90eXBlbW9kKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCkKIC8qCiAgKiBBZGQgdHlw bW9kIGRlY29yYXRpb24gdG8gdGhlIGJhc2ljIHR5cGUgbmFtZQogICovCi1zdGF0aWMgY2hhciAq CitjaGFyICoKIHByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwg T2lkIHR5cG1vZG91dCkKIHsKIAljaGFyCSAgICpyZXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcmVncHJvYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpp bmRleCA2ZDRjMWMyN2E1Li5iM2E0MjY4NThmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcmVncHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKQEAg LTQ0LDYgKzQ0LDggQEAKIHN0YXRpYyB2b2lkIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNo YXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAq bmFyZ3MsIE9pZCAqYXJndHlwZXMpOwogCitzdGF0aWMgdm9pZCBmb3JtYXRfcHJvY2VkdXJlX2Fy Z3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAorCQkJCQkJCQkJCSAgIFN0cmluZ0lu Zm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAq CSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoKQEAgLTMzMSw2ICszMzMsMjkgQEAg Zm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2NlZHVyZV9vaWQpCiAJcmV0dXJuIGZv cm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQocHJvY2VkdXJlX29pZCwgRk9STUFUX1BST0NfRk9SQ0Vf UVVBTElGWSk7CiB9CiAKKy8qCisgKiBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MgICAtIGNvbnZlcnRz IHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgorZm9ybWF0X3Byb2NlZHVyZV9hcmdz KE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJU3RyaW5nSW5mb0Rh dGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOwor CisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHBy b2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLCBwcm9jZWR1cmVf b2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKwor CWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChw cm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1 cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qCiAgKiBmb3JtYXRfcHJvY2VkdXJlX2V4 dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAicHJvX25hbWUoYXJncykiCiAgKgpA QCAtMjA2MCwzICsyMDg1LDMwIEBAIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0 cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywKIAogCXBmcmVlKHJhd25hbWUpOwog fQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFyZ3VtZW50cyBvZiB0aGUgZ2l2 ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZmZXIuICBmb3JjZV9xdWFsaWZ5 IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAqIHJlZ2Fy ZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9jZWR1cmVf YXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVmLAorCQkJ CQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWludAkJCW5hcmdzID0g cHJvY2Zvcm0tPnByb25hcmdzOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOwor CWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBw cm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs CisJCQkJCQkJICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVh bGlmaWVkKHRoaXNhcmd0eXBlKSA6CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmUodGhpc2FyZ3R5 cGUpKTsKKwl9CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCmluZGV4IDcwZDcyM2U4MGMuLmE1ZGU1OTdlM2IgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wYXJ0aXRpb25lZF90YWJsZS5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0 ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgpAQCAtMzU4 LDcgKzM1OSw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rpb25fYXJndW1lbnRzKFN0cmluZ0lu Zm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJCSBib29sIHByaW50X3RhYmxlX2Fy Z3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fcmV0 dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgcHJp bnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsK LXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBU dXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFibGVfbmFtZXMoZGVwYXJzZV9uYW1l c3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2VzLAogCQkJCQkJCSBCaXRtYXBzZXQg KnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJzZV9mb3JfcXVlcnkoZGVwYXJzZV9u YW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4MiwyMiArNDgyLDE1IEBAIHN0YXRp YyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVu YywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBn ZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwKIAkJCQkJ CQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyB2b2lkIGdldF9vcGNsYXNzX25h bWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCi0JCQkJCQkJIFN0cmluZ0luZm8g YnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rpb24oTm9kZSAqbm9kZSwgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHByaW50U3Vic2NyaXB0cyhTdWJzY3Jp cHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBjaGFy ICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3Jl bGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3BhY2VzKTsKIHN0YXRpYyBjaGFyICpn ZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwotc3RhdGljIGNoYXIg KmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLAotCQkJCQkJCQkJ TGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJCQkJCQlib29sIGhhc192YXJpYWRp YywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxf ZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9wZXJp ZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lkIGFkZF9jYXN0X3RvKFN0cmluZ0lu Zm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF90eXBl X25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJpbmdfdG9fdGV4dChjaGFyICpzdHIp Owotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogc3RhdGljIHZv aWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpOwogCiAj ZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5oID8gIiIgOiAiT05MWSAiKQpAQCAt NTQ1LDYgKzUzOCwxMDggQEAgcGdfZ2V0X3J1bGVkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ UEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEdpdmVu IGEgcGFpciBvZiBEYXR1bSBjb3JyZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBnX3Jld3JpdGUuZXZf cXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1bW5zLCByZXR1cm4gdGhlaXIgdGV4dCByZXByZXNl bnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNpbmdsZQorICogc3RyaW5nIGluIHdoZXJlQ2xhdXNlIGFu ZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0cmluZ3MgKHdoaWNoIG1pZ2h0IGJlCisgKiBOSUws IHNpZ25hbGxpbmcgTk9USElORykgaW4gYWN0aW9ucy4KKyAqLwordm9pZAorcGdfZ2V0X3J1bGVk ZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJY2hhciAq KndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9ucykKK3sKKwlpbnQJCQlwcmV0dHlGbGFncyA9IDA7 CisJY2hhcgkgICAqcXVhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfcXVhbCk7CisJY2hh cgkgICAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rpb24pOworCUxpc3QJ ICAgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlvbnN0cik7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxl bihxdWFsc3RyKSA+IDAgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2Rl CSAgICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0 OworCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVh bHN0cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOwor CQlxdWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJl UmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1 ZjsKKwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250 ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29u dGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBX UkFQX0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5U X1NURDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJ CWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2Ug PSBwc3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisJZWxzZQorCQkqd2hlcmVDbGF1c2UgPSBOVUxMOwor CisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5vZGVMaXN0KSA9PSAwKQorCQkqYWN0aW9ucyA9IE5J TDsKKwllbHNlCisJeworCQlMaXN0Q2VsbCAgICpjZWxsOworCQlMaXN0CSAgICpvdXRwdXQgPSBO SUw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJeworCQkJUXVlcnkJICAg KnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKHF1ZXJ5LT5jb21tYW5k VHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250aW51ZTsKKworCQkJcmVzZXRTdHJpbmdJbmZv KCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxMLCB0cnVlLAor CQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJCQlvdXRwdXQg PSBsYXBwZW5kKG91dHB1dCwgcHN0cmR1cChidWYuZGF0YSkpOworCQl9CisJCSphY3Rpb25zID0g b3V0cHV0OworCX0KK30KKworLyoKKyAqIEluIHRoZSBjYXNlIHRoYXQgdGhlIENSRUFURSBWSUVX IGNvbW1hbmQgZXhlY3V0aW9uIGlzIHN0aWxsIGluIHByb2dyZXNzLAorICogd2Ugd291bGQgbmVl ZCB0byBzZWFyY2ggdGhlIHN5c3RlbSBjYWNoZSBSVUxFUkVMTkFNRSB0byBnZXQgdGhlIHJld3Jp dGUKKyAqIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB0aGUgbGF0dGVyIHdpbGwgcmV0dXJu IGVtcHR5IHJlc3VsdC4KKyAqLworY2hhciAqCitwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChPaWQg dmlld29pZCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJUmVsYXRpb24JcGdfcmV3cml0ZTsK KwlIZWFwVHVwbGUJcnVsZXR1cDsKKwlUdXBsZURlc2MJcnVsZXR0YzsKKworCWluaXRTdHJpbmdJ bmZvKCZidWYpOworCXBnX3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcnVsZXR1cCA9IFNlYXJjaFN5c0NhY2hlMihSVUxFUkVMTkFN RSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0odmlld29pZCksCisJCQkJCQkJICBQb2ludGVy R2V0RGF0dW0oVmlld1NlbGVjdFJ1bGVOYW1lKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJ1 bGV0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBy dWxlIGZvciB2aWV3IHdpdGggT0lEICV1Iiwgdmlld29pZCk7CisKKwlydWxldHRjID0gcGdfcmV3 cml0ZS0+cmRfYXR0OworCW1ha2Vfdmlld2RlZigmYnVmLCBydWxldHVwLCBydWxldHRjLCAwLCBX UkFQX0NPTFVNTl9ERUZBVUxUKTsKKwlSZWxlYXNlU3lzQ2FjaGUocnVsZXR1cCk7CisJdGFibGVf Y2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBidWYuZGF0YTsK K30KIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0X3J1bGVkZWZfd29ya2VyKE9pZCBydWxlb2lkLCBp bnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE1LDY1ICsxMTEwLDEyIEBAIHBnX2dldF90cmlnZ2VyZGVm X3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlpZiAoIWlzbnVsbCkKIAl7CiAJCU5v ZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRlcGFyc2VfY29udGV4dCBjb250ZXh0 OwotCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5nZVRibEVudHJ5ICpvbGRydGU7Ci0J CVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYs ICJXSEVOICgiKTsKKwkJY2hhcgkgICAqcXVhbHN0cjsKIAogCQlxdWFsID0gc3RyaW5nVG9Ob2Rl KFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVhbHN0ciA9IHBnX2dldF90cmlnZ2Vy X3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsKIAotCQlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFu ZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUgPSBtYWtlTm9kZShSYW5nZVRibEVu dHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQlvbGRydGUtPnJlbGlk ID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJb2xk cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJb2xkcnRlLT5hbGlhcyA9IG1h a2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKLQkJ b2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCW9sZHJ0 ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkp OwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW5ld3J0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQluZXdydGUt PnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQluZXdydGUtPmFsaWFzID0gbWFrZUFs aWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOwotCQluZXdy dGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmggPSBmYWxzZTsKLQkJbmV3cnRlLT5p bkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCi0JCW1l bXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBucy5ydGFibGUgPSBsaXN0X21ha2Uy KG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9IE5JTDsKLQkJZHBucy5jdGVzID0g TklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlzZXRfcnRhYmxlX25hbWVzKCZkcG5z LCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7Ci0KLQkJLyog U2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ugc3RhY2sgKi8KLQkJY29udGV4 dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsK LQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNvbnRleHQud2luZG93VExpc3QgPSBO SUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9 IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9D T0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7 Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0 LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQs IGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIpICIpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVhbHN0cik7CiAJfQogCiAJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAlcygiLApAQCAtMTExNCw2ICsxMTU2 LDY0IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkK IAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVz ZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkp Cit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250 ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpv bGRydGU7CisJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7 CisKKwlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyog QnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0g bWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9O OworCW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9 IHJlbGtpbmQ7CisJb2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRy dGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9s ZHJ0ZS0+aW5oID0gZmFsc2U7CisJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJ T047CisJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5k ID0gcmVsa2luZDsKKwluZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworCW5l d3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7CisJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisJ bmV3cnRlLT5pbmggPSBmYWxzZTsKKwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCS8qIEJ1 aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMp KTsKKwlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworCWRwbnMuY3Rl cyA9IE5JTDsKKwlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworCXNldF9zaW1w bGVfY29sdW1uX25hbWVzKCZkcG5zKTsKKworCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRl ZXAgbmFtZXNwYWNlIHN0YWNrICovCisJY29udGV4dC5idWYgPSAmYnVmOworCWNvbnRleHQubmFt ZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklM OworCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisJY29udGV4dC52YXJwcmVmaXggPSB0cnVl OworCWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJF VFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVOVDsKKwljb250ZXh0LndyYXBDb2x1bW4g PSBXUkFQX0NPTFVNTl9ERUZBVUxUOworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRF TlRfU1REOworCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisJ Z2V0X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJcmV0dXJuIGJ1 Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0 aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoKQEAgLTE4ODAsNiArMTk4MCwxMyBAQCBwZ19n ZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBn X2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsK IH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9u IGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQg cmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFs c2UsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUg YSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAgKi8KQEAgLTIxMzEsNiArMjIzOCwxNSBAQCBw Z19nZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVY VF9QKHN0cmluZ190b190ZXh0KHJlcykpOwogfQogCisvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0 aGF0IHJldHVybnMgdGhlIGRlZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLwor Y2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWlu dElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElk LCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJl dHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8K QEAgLTM1MDEsNyArMzYxNyw3IEBAIHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5D VElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAK LXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVm LCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtMTEzODUsNyArMTE1 MDEsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBs ZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlv dSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3Ig YWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25h bWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVm KQogewpAQCAtMTE3NzksNyArMTE4OTUsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25f bmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5 IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIg KgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFy Z25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAq dXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkK QEAgLTEyMTY1LDcgKzEyMjgxLDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERh dHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcg YSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNo YXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAg KnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAyMGY1YWE1NmVhLi5j M2Q5ZTU4YmYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODI4LDQgKzExODI4LDEw IEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlu bWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1h cnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERM IGNvbW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVw YXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdw Z19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lk ID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBE REwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywg cHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuaAppbmRleCAyMDFiMTlmOGI3Li40NmQxODM3NjBhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9v YmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAotZXh0ZXJu IE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq bmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4gT2Jq ZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1l cywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmpl Y3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9pZCBJc1RoZXJlQ29sbGF0aW9uSW5O YW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBuc3BPaWQpOwogZXh0ZXJuIE9iamVj dEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRpb25TdG10ICpzdG10KTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggYjNiMDRjY2ZhOS4uYzJiMWNhMzJmNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX3NlcV9y ZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19w ZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4 dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwogCiBleHRl cm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0 ZVNlcVN0bXQgKnNlcSk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xMmFhZTczNGNhCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEsMjMg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVw YXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFSU0Vf SAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0 eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29t bWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGRsX2RlcGFyc2Vf anNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJvcF9j b21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAor CQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkJCQkJCS8qIERE TF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGls aXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUxM2Q5 OTAuLmI1MzI5NGJmNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGls aXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiAr NjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9i amVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAg ICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvYWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJu YWwuaAppbmRleCAzNjEyODRkOGViLi40ZTAyMGVmNGFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtf aW50ZXJuYWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0cnVjdAogCUxpc3QJICAgKmdy YW50ZWVzOwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVoYXZpb3IgYmVoYXZpb3I7CisJ T2lkCQkJZ3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK aW5kZXggODE2MzFmMTY0NS4uNzE1MGZhYmQyNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBAIC0xMTQs MTAgKzExNCwxMiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9fb3ZlcmZsb3coUEdf RlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FVQUxJRlkJMHgwNAkv KiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9STUFUX1RZUEVfSU5W QUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4dGVybiBjaGFyICpm b3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsIGJpdHMxNiBm bGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVf b2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmUo T2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoT2lk IHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5cGVtb2QoT2lkIHR5 cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5cG1vZChjb25zdCBj aGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwogCiBleHRlcm4gaW50 MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGls cy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcxOGEzLi5lYzZlZjgwMTY0IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaApAQCAtMTMsOSArMTMsMTIgQEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNkZWZpbmUg UlVMRVVUSUxTX0gKIAorI2luY2x1ZGUgImFjY2Vzcy9odHVwLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rl cy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZV9ub2RlLmgiCiAKIHN0cnVjdCBQbGFuOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5n IHBsYW5ub2Rlcy5oIGhlcmUgKi8KIHN0cnVjdCBQbGFubmVkU3RtdDsKQEAgLTIzLDEyICsyNiwy MCBAQCBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZf c3RyaW5nKE9pZCBpbmRleHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29s dW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90 cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBO b2RlICp3aGVuQ2xhdXNlLCBib29sIHByZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5 ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF92aWV3 ZGVmX2ludGVybmFsKE9pZCB2aWV3b2lkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5 ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRj b25zdHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNv bnN0cmFpbnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBl dl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExp c3QgKiphY3Rpb25zKTsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpl eHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hv d2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIg KmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzUxLDE2IEBAIGV4dGVybiBMaXN0ICpz ZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJ IEJpdG1hcHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25f bmFtZShPaWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lk IG9wY2xhc3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJv b2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJ CQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5n ZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRf b3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSBT dHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxp ZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0 YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8g YnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRleCBk YWRkNThlOGI5Li4zYmY5ZTE0ZjE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL29iamVjdF9hZGRyZXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29i amVjdF9hZGRyZXNzLm91dApAQCAtNDkxLDcgKzQ5MSw3IEBAIFNFTEVDVCAocGdfaWRlbnRpZnlf b2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9iamlkLCBhZGRyMS5vYmpzdWJpZCkpLiosCiAg cG9saWN5ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICB8IGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgdAogIHN0YXRpc3RpY3Mgb2JqZWN0ICAgICAgICAgfCBhZGRyX25z cCAgIHwgZ2VudGFibGVfc3RhdCAgICAgfCBhZGRyX25zcC5nZW50YWJsZV9zdGF0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBjb2xsYXRpb24gICAg ICAgICAgICAgICAgIHwgcGdfY2F0YWxvZyB8ICJkZWZhdWx0IiAgICAgICAgIHwgcGdfY2F0YWxv Zy4iZGVmYXVsdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCB0Ci0gdHJhbnNmb3JtICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICB8IGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAorIHRyYW5zZm9ybSAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3IgaW50ZWdlciBsYW5ndWFnZSBz cWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0 IHNlYXJjaCBkaWN0aW9uYXJ5ICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfZGljdCAgICAgIHwg YWRkcl9uc3AuYWRkcl90c19kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggcGFyc2VyICAgICAgICB8IGFkZHJfbnNwICAg fCBhZGRyX3RzX3BycyAgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfcHJzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNoIGNvbmZp Z3VyYXRpb24gfCBhZGRyX25zcCAgIHwgYWRkcl90c19jb25mICAgICAgfCBhZGRyX25zcC5hZGRy X3RzX2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IHQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMmYwMmNjOGY0Mi4uN2U4M2UwMWE1ZCAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5mbwog T1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2Jq VHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmpl Y3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzcsNiArMzE4MCw3IEBAIGNvbXBhcmVfY29udGV4dAog Y29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQKIGNvbnZlcnRf dGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3RfY2IKIGNvcHlf ZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi4zNy4xCgo= --000000000000dd2b4805ebf605cf--