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 1pDBQ2-0003lj-Ix for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 21:35:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pDBQ1-0000Vv-EF for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 21:35:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDBPz-0000Um-Pw for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 21:35:28 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pDBPs-0004aq-Ef for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 21:35:26 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-46d4840b51fso434608237b3.12 for ; Wed, 04 Jan 2023 13:35:20 -0800 (PST) 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=4l6guD6M58mBMf2G+Lyezf89tZdHNGns0ZAewzBA8qs=; b=e9TW+bn627q9BQ3EuQYH86w8Uqh5M9Uwf1X0+N1YA+i5Na2lv35qOnS/TA7OXM/dHj b5H++5IB2PD5ss1wC71rHcAUfnj2SfjcQUAI37Idt7frw/dd4l1aAATmaoSkJl+7a6pT F5yJMEQXFJIzJ3H39tlYPKzkFdA6AuXcDc06pW8K/WbclFBscTABadPLJP75+mK6L9pR 0xB61JmQKWu1AFGtHnsa5Z/eqFQdBNY6iJbRenslSQfjqu5+v/r03vC7AXpQ5wau7tjz b6L4ubiUu9/mEglLr7iGUqLGUjwDvCLPDyMtpbtTF0mK7FijXPx0akvpvtOTbsssr00k 4b/A== 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=4l6guD6M58mBMf2G+Lyezf89tZdHNGns0ZAewzBA8qs=; b=jmzvEDMz4OoVy76SjT7/zylf4/yUCqfvUpulaPXoMVw2lbFraFabZAj1ALguUVAUpD J3Z8SygdpbxkzCdNpTXvMq3fgLwnKWOQgij+2A6TG1c0IbDAT+wf+xlcgZSl1mNcHtx0 xabAIOVLgQnHgWaHKZCPuiMP53FYdqt/eXg6iPJ0blkWQUl0ZxJqMuYqORw7i6+dguOg qhr5zNmdmh5SZ9IHSEYr16qb9Sq9rFBo/vWEgwI3F4uXGkGOqgGQtiP72inkjpxWCj5s KcHGGn0EpoteRlFpEGEpj/YdQi6Z2D2WU9n0oXXHF2w2QIj6/pgoS741Ubman9MPFSWw osFg== X-Gm-Message-State: AFqh2kqbvYNFpIyOkkYEmIkzzmmWS0lhIRNXND9ZpWdK53jCNSO7VZS4 vmYaQXL7m79Hry9r0X3WVOKyClqh7hs424VU5Ak= X-Google-Smtp-Source: AMrXdXsC4oyiPyuZQUB8mFI70QtUg+Y18X/1I7WVJiEsR8fAU+J9ZAmm/JJmZw+cicSEnGSBeh9pgExWq3YS1HY13Jo= X-Received: by 2002:a0d:e8d6:0:b0:4b7:dfa2:76f3 with SMTP id r205-20020a0de8d6000000b004b7dfa276f3mr420494ywe.232.1672868119565; Wed, 04 Jan 2023 13:35:19 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Zheng Li Date: Wed, 4 Jan 2023 16:35:07 -0500 Message-ID: Subject: Re: Support logical replication of DDLs To: vignesh C Cc: li jie , Peter Smith , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000061afb05f176f684" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000061afb05f176f684 Content-Type: text/plain; charset="UTF-8" > On Wed, Dec 28, 2022 at 5:42 PM Zheng Li wrote: > I notice the support for the following commands are missing while > moving the command tags, will look into it: > CMDTAG_CREATE_AGGREGATE > CMDTAG_ALTER_AGGREGATE > CMDTAG_DROP_AGGREGATE > CMDTAG_DROP_TRIGGER > CMDTAG_DROP_USER_MAPPING Added support for the above commands in the attached v59 patch. Regards, Zane --000000000000061afb05f176f684 Content-Type: application/octet-stream; name="v59-0005-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v59-0005-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lci6gypv4 RnJvbSAxOWU0MDQyMzBjYTBkNzc5MWU4YTFhYmZjYWJhMmMwNDEzZGNmYmU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFdlZCwgNCBKYW4gMjAyMyAyMTozMDoxMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNS81 XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBEdXJpbmcg Q1JFQVRFIFBVQkxJQ0FUSU9OIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQgdHJpZ2dlciB0aGF0 CmRlcGFyc2VzIHRoZSBEREwgKGlmIHRoZSBEREwgaXMgYW5ub3RhdGVkIGFzIGRkbHJlcGxvayBm b3IgRERMIHJlcGxpY2F0aW9uIGluCmNtZHRhZ2xpc3QuaCkgYXMgYSBKU09OIGJsb2IsIGFuZCBX QUwgbG9ncyBpdC4gVGhlIGV2ZW50IHRyaWdnZXIgaXMgYXV0b21hdGljYWxseQpyZW1vdmVkIGF0 IHRoZSB0aW1lIG9mIERST1AgUFVCTElDQVRJT04uIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcwppdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MIGNvbW1hbmRz LiBUaGUgc3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04KYmFjayB0byB0aGUgRERMIGNvbW1h bmQgc3RyaW5nIGFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRk CnRoZSBuZXdseSBhZGRlZCByZWwgdG8gcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBE TUwgY2hhbmdlcyBvbiB0aGUgbmV3CnRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQgaGF2 aW5nIHRvIG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJ Q0FUSU9OIi4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIG9iamVjdCBjb21tYW5kIGFuZAotICAg ICBDUkVBVEUgb2JqZWN0IGNvbW1hbmQ6CndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYXQgZGRsX2Nv bW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlCmRlcGFyc2VkIGpzb24gc3Ry aW5nLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2Ny aWJlciBpZiB0aGUgY3JlYXRlZC9hbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hlZC4gSXQgc3VwcG9y dHMgbW9zdCBvZgpBTFRFUiBUQUJMRSBjb21tYW5kIGV4Y2VwdCBzb21lIGNvbW1hbmRzKERETCBy ZWxhdGVkIHRvIFBBUlRJVElPTkVEIFRBQkxFCi4uLikgdGhhdCBpbnRyb2R1Y2VkIHJlY2VudGx5 IHdoaWNoIGhhdmVuJ3QgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQKZGRsX2RlcGFyc2Vy LCB3ZSB3aWxsIHN1cHBvcnQgdGhhdCBsYXRlci4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2Nv bW1hbmQgc3RhcnQnIGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJl bGlkcyBvZgp0aGUgdGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVn aW4gKHBnb3V0cHV0KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVy IHZlcmlmeWluZyB0aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVi bGljYXRpb24uIExhdGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhl CmFjdHVhbCBkcm9wIG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBl bmQsIG9ubHkgc2VuZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25l IG9mIHRoZSByZWxpZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRv IGRvIHRoaXMgaXMgYmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRo ZSAnY29tbWFuZCBlbmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxv bmdlcgp2YWxpZCBhcyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9u cyByZWNlaXZlZCBmb3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBv c3NpYmxlIHRvIHZlcmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24g bGlzdCBvciBub3QuIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3Jl IGVsZW1lbnRzIHRvIHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21k dHlwZSkuCgpXZSBjb3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2Ny aWJlciBzaWRlIGFzIHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBk ZGwgbWVzc2FnZXMgZm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRp b24uCgotIEZvciB0YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xV TU4gVFlQRSwgQUREIENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhP RCkKCndlIGRlcGFyc2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24g c3RyaW5nIGF0CnRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNv ZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBj b21pbmcgcmV3cml0ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3Jp YmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2Fu IGFsd2F5cyBiZQpjb25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2gg cmV3cml0ZSBkZGwgbXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9y ZGVyIHRvIGJlIGFibGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMu CgpXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZv cmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxp c2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNj cmliZXIgd2hpY2gKZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVu LCB3ZSBuZWVkIHRvIGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdy aXRlIGRkbCB0byByZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBh ZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxp c2hlciBhbmQgc3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMg dXNlZCBkdXJpbmcKcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRl IFVQREFURXMgdG8ga2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBh cHByb2FjaCBjb3VsZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0 byB1cGRhdGUKdGhlIGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3 cml0ZSBkZGwgYW5kIHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUg dGhlIHJlc3QgZGF0YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFy c2VkIGpzb24gc3RyaW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFu ZCBhZGQgc29tZSBsb2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4K QmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwg dHlwZSBvZiByZXdyaXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBz ZW5kaW5nIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUg ZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1 c2UgdGhlIGRlcGFyc2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFu ZCBza2lwCnNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jICAgICAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgICAgIHwgMjgzICsrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAgODkgKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jICB8IDM1NyArKysrKysrKysrKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ5ICsrCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQzICsrCiAuLi4v cmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAgMjAgKy0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDI0MCArKysrKysrKysK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE4OCArKysr KystCiBzcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jICAgICAgICAgICAgICAgICAgICAgfCAgMjYg Ky0KIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAgICAgICAgICB8ICAgMyAr CiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jICAgICAgICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9i aW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAzMyArLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICAgICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggICAgICAgfCAgMTUgKy0KIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgfCAgMTIgKwogc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWcuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS90Y29wL2Nt ZHRhZ2xpc3QuaCAgICAgICAgICAgICAgICAgfCAzODYgKysrKysrKy0tLS0tLS0tCiBzcmMvaW5j bHVkZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIC4uLi9leHBl Y3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICB8ICAgNyArCiAuLi4vc3FsL2Ny ZWF0ZV90YWJsZS5zcWwgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgfCA0MjAgKysrKysrKystLS0tLS0tLQog Li4uL3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgICAgIHwgNDY1ICsrKysr KysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgICA1ICsKIDM3IGZpbGVzIGNoYW5nZWQsIDIyOTQgaW5zZXJ0aW9ucygrKSwgNDQyIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsdHJpZ2dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYwppbmRleCA5NTcxYzY2OWY3Li43Mzg4MzJiNWYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHVi aWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlw dWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0 aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJkZGw7CiAJcHViLT5wdWJ2aWFyb290ID0gcHViZm9y bS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXApOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0 ZWFzLmMKaW5kZXggZDZjNmQ1MTRmMy4uNzdkY2I5YzlkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNp bmNsdWRlICJjYXRhbG9nL3RvYXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY3JlYXRlYXMu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvbWF0dmlldy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJj b21tYW5kcy90YWJsZWNtZHMuaCIKQEAgLTE0Myw2ICsxNDQsMTUgQEAgY3JlYXRlX2N0YXNfaW50 ZXJuYWwoTGlzdCAqYXR0ckxpc3QsIEludG9DbGF1c2UgKmludG8pCiAJCVN0b3JlVmlld1F1ZXJ5 KGludG9SZWxhdGlvbkFkZHIub2JqZWN0SWQsIHF1ZXJ5LCBmYWxzZSk7CiAJCUNvbW1hbmRDb3Vu dGVySW5jcmVtZW50KCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEZpcmUgdGhlIHRyaWdn ZXIgZm9yIHRhYmxlX2luaXRfd3JpdGUgYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIHNvCisJCSAq IHRoYXQgd2UgY2FuIGFjY2VzcyB0aGUgY2F0YWxvZyBpbmZvIGFib3V0IHRoZSBuZXdseSBjcmVh dGVkIHRhYmxlCisJCSAqIGluIHRoZSB0cmlnZ2VyIGZ1bmN0aW9uLgorCQkgKi8KKwkJRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGUoKE5vZGUgKikgY3JlYXRlLCBpbnRvUmVsYXRpb25BZGRyKTsK Kwl9CiAKIAlyZXR1cm4gaW50b1JlbGF0aW9uQWRkcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYwppbmRleCA2YmVhZTJhMTgxLi5lMGE2OTJiMDQ5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogI2luY2x1 ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2V2dGNhY2hlLmgiCkBAIC05Miw3ICs5NSw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihD cmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAi ZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJk ZGxfY29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxf ZHJvcCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUi KSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAg JiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJ CQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTE4LDcgKzEy Miw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8q IFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRu YW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFt ZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJv cCIpID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRl IikgPT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwg dGFncyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUi KSA9PSAwCkBAIC01NDQsNyArNTQ5LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAq cGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlm IChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29t bWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FM RHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNv bW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsK QEAgLTgyNyw2ICs4MzMsMTQxIEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJz ZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVu dCgpOwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAg ICAgUHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElO VE8gY29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlD b250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCUNyZWF0ZVRhYmxl QXNTdG10ICpzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopcGFyc2V0cmVlOworCisJLyogaWdu b3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2Fi bGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJ b2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKwor CWNvbW1hbmQtPnR5cGUgPSAoc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpID8gU0NUX0Ny ZWF0ZVRhYmxlQXMgOiBTQ1RfU2ltcGxlOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0 aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RB ZGRyZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+ cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0g Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVF bmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBj b21tYW5kLgorICoKKyAqIEZJWE1FIHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3Nz aWJpbGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91 Z2guICBQcm9iYWJseSBpdCdzIGJlc3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRy aWdnZXJzKCkgdG8gZml4IHRoaXMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpwYXJl bnQ7CisJQ3JlYXRlVGFibGVBc1N0bXQgKnN0bXQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJp Z2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNv bW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlzdG10ID0gIChDcmVhdGVU YWJsZUFzU3RtdCAqKWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBh cnNldHJlZTsKKworCWlmIChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwl7CisJCXBh cmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsK KworCQlwZnJlZShjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKwor CQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworCX0K KwllbHNlCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCQlvbGRjeHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuc2ltcGxlLmFkZHJlc3MgPSBh ZGRyZXNzOworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0ID0KKwkJCWxh cHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCwKKwkJCQkJY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CisJfQorfQorCisvKgorICogRmlyZSB0YWJsZV9pbml0X3Jld3JpdGUg dHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnJl YWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAqcnVubGlzdDsK KwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7 CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vz c2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xl IHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQlyZXR1cm47CisK KwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGlj aCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50IGV2ZW50IHRy aWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21tYW5kLiAgVGhp cyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncworCSAqICpuZWNl c3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dl cnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFuZCBzdGFydGVk LgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1cm47CisKKwkv KiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpCisJCXJldHVybjsKKworCWNvbW1h bmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJcnVubGlz dCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJ CSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAidGFibGVfaW5pdF93cml0ZSIsCisJ CQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0gTklMKQorCQlyZXR1cm47CisK KwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQgYW5kIG9iamVjdCBhZGRyZXNz ICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVhbF9jcmVhdGU7CisJY29tbWFu ZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8K KwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdkYXRhKTsKKworCS8qIENsZWFudXAu ICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55dGhpbmcg dGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2libGUgdG8gdGhlIG1haW4KKwkgKiBj b21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7Cit9CisKIC8qCiAgKiBJ bnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBldmVudCB0cmlnZ2Vycy4KICAq LwpAQCAtMTEwOCw3ICsxMjQ5LDggQEAgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKQog CSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChFVlRfU1FMRHJvcCkgIT0gTklMKSB8fAog CQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdyaXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVu dENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwpOworCQkoRXZlbnRDYWNoZUxv b2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8fAorCQkoRXZlbnRDYWNoZUxvb2t1cChF VlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAKIC8qCkBAIC0xNDk5LDYgKzE2NDEsNyBA QCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklM OwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTUz Miw3ICsxNjc1LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkK ICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFu ZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRh YmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmln Z2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFk ZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0 ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU1MiwxMiArMTY5NSwxNDAgQEAgRXZlbnRUcmlnZ2Vy Q29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJl c3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNv cHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBw ZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzLCBuZXdzdWIpOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9 CiAKKy8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91 dCBhIHNpbmdsZSBwYXJ0IG9mIGFuIEFMVEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2Fu IGhhdmUgbXVsdGlwbGUgc3ViY29tbWFuZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVN TgorICogY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGlu IFVTSU5HIGV4cHJlc3Npb24uCisgKiBBcyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFj Y2Vzc2VkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwg dHJpZ2dlciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBj b2x1bW4gaXMKKyAqIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVT dGFydChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRl ZjsKKwlSZWxhdGlvbglhdHRyZWxhdGlvbjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRUdXA7CisJQXR0ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBv ciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUg fHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRl ZCkKKwkJcmV0dXJuOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlB c3NlcnQoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1 cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0 KE9pZElzVmFsaWQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5h bHRlclRhYmxlLm9iamVjdElkKSk7CisKKwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVm OworCUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBw YWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAo Tm9kZSAqKWNvcHlPYmplY3Qoc3ViY21kKTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihB dHRyaWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhl IHRhcmdldCBjb2x1bW4gKi8KKwloZWFwVHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGhlYXBUdXApKSAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1u IFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJj bWQtPm5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9y bV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0 dG51bTsKKworCU9iamVjdEFkZHJlc3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxl KGhlYXBUdXApOworCXRhYmxlX2Nsb3NlKGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsK KwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJ eworCQljaGFyCSAgICpkZWZleHByOworCisJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5j b29rZWRfZGVmYXVsdCk7CisJCW5ld3N1Yi0+dXNpbmdleHByID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkJCQlDU3Ry aW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJl bGlkKHJlbCkpKTsKKwl9CisJZWxzZQorCQluZXdzdWItPnVzaW5nZXhwciA9IE5VTEw7CisKKwlj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3Vi Y21kcyA9CisJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZAorICoJCUZp bmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVFlQRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRvIGNvbW1h bmQgbGlzdC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1YmNt ZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCit7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlMaXN0Q2VsbCAgICpjZWxs OworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwlBbHRlclRhYmxlQ21kICphbHRzdWJjbWQgPSAo QWx0ZXJUYWJsZUNtZCAqKXN1YmNtZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNv bnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJs ZUNtZCkpOworCUFzc2VydChjbWQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY21kLT5k LmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFi bGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRT dWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpjb2xsY21kID0gKEFsdGVy VGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisKKwkJaWYgKGNvbGxjbWQtPnN1YnR5cGUgPT0g YWx0c3ViY21kLT5zdWJ0eXBlICYmCisJCQlhZGRyZXNzLmNsYXNzSWQgPT0gc3ViLT5hZGRyZXNz LmNsYXNzSWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0SWQgPT0gc3ViLT5hZGRyZXNzLm9iamVjdElk ICYmCisJCQlhZGRyZXNzLm9iamVjdFN1YklkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCkK KwkJeworCQkJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCQkJcmV0dXJu OworCQl9CisJfQorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVk QVRTdWJjbWQpKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCW5ld3N1Yi0+cGFyc2V0 cmVlID0gY29weU9iamVjdChzdWJjbWQpOworCisJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8 PSByZXdyaXRlOworCWNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBsYXBwZW5kKGNtZC0+ZC5h bHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKK30KKwogLyoKICAqIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQKICAqCQlGaW5pc2gg dXAgc2F2aW5nIGFuIEFMVEVSIFRBQkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFuZCBs aXN0LgpAQCAtMTg0Myw2ICsyMTE0LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMo UEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7 CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFk ZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBT Q1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJ CQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21t YW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXgg ZjRiYTU3MjY5Ny4uYmUyOTljZWUxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMKQEAgLTM4LDEwICszOCwxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIK ICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRl ICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAi dXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTk3LDYgKzk5LDcgQEAg cGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJcHViYWN0aW9u cy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1 YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGwgPSBmYWxz ZTsKIAkqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZTsKIAogCS8qIFBhcnNlIG9w dGlvbnMgKi8KQEAgLTE0NCw2ICsxNDcsOCBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAkJ CQllbHNlIGlmIChzdHJjbXAocHVibGlzaF9vcHQsICJ0cnVuY2F0ZSIpID09IDApCiAJCQkJCXB1 YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwkJCQllbHNlIGlmIChzdHJjbXAocHVibGlz aF9vcHQsICJkZGwiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGwgPSB0cnVlOwogCQkJ CWVsc2UKIAkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRB WF9FUlJPUiksCkBAIC03MjgsNiArNzMzLDUzIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0 KGNoYXIgKnB1Ym5hbWUsIExpc3QgKnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZl bnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRp YyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29t bWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3Mg cHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQlpOworCUxpc3QJICAg KnRhZ3MgPSBOSUw7CisJT2lkCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzIHJlZmVyZW5j ZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJdHJpZ2dlcl9u YW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07 CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfbmFtZV9wcmVmaXggPSAicGdfZGVwYXJzZV90 cmlnXyVzXyV1IjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9mdW5jX3ByZWZpeCA9ICJw dWJsaWNhdGlvbl9kZXBhcnNlXyVzIjsKKworCWRkbF90cmlnZ2VyID0gbWFrZU5vZGUoQ3JlYXRl RXZlbnRUcmlnU3RtdCk7CisKKwlzbnByaW50Zih0cmlnZ2VyX25hbWUsIHNpemVvZih0cmlnZ2Vy X25hbWUpLCB0cmlnZ2VyX25hbWVfcHJlZml4LAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlz bnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJp Z2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWdu YW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBl dmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dl cl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJ U3RyaW5nCSAgICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29t bWFuZHNbaV0pKSk7CisKKwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFnKTsKKwl9CisKKwlkZGxf dHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInRhZyIsIChOb2Rl ICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRkbF90 cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdnZXJzIGFzIGludGVy bmFsbHkgZGVwZW5kZW50IG9uIHRoZSBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNz U2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJl Y29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5U RVJOQUwpOworfQorCiAvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzk4 LDYgKzg1MCw4IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl UHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxl dGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHViZGRsIC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwp OwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnZpYXJvb3QgLSAxXSA9CiAJCUJvb2xH ZXREYXR1bShwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKQEAgLTg1OCw2ICs5MTIsMzgg QEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlv blN0bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmlnZ2Vy IHRvIGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKi8KKwlpZiAocHVi YWN0aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01E VEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURU QUdfQUxURVJfVEFCTEV9OworCQlDb21tYW5kVGFnCWluaXRfY29tbWFuZHNbXSA9IHsKKwkJCUNN RFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lOVE8KKwkJfTsKKwkJaW50 IG5jb21tYW5kcyA9IDA7CisJCUNvbW1hbmRUYWcgKmVuZF9jb21tYW5kcyA9IEdldENvbW1hbmRU YWdzRm9yRERMUmVwbCgmbmNvbW1hbmRzKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5k X2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRk bF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBuY29tbWFuZHMsIG15c2Vs ZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRy aWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3Rh cnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyks IG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQg dHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRl IiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRz KSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBl dmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX2lu aXRfd3JpdGUiLCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFu ZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsYXRp b25JZCwgcHVib2lkLCAwKTsKQEAgLTk5Niw2ICsxMDgyLDkgQEAgQWx0ZXJQdWJsaWNhdGlvbk9w dGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAog CQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9vbEdldERh dHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3B1YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsKKwkJcmVw bGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IHRydWU7CiAJfQogCiAJaWYg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwppbmRleCAxZGIzYmQ5ZTJlLi42ZmE2ODdmNTA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YwpAQCAtNDY1MSw2ICs0NjUxLDkgQEAgQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9u IHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogCQkJY21kID0gQVRQYXJzZVRyYW5zZm9ybUNtZCh3 cXVldWUsIHRhYiwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlLAogCQkJCQkJCQkJICBBVF9Q QVNTX1VOU0VULCBjb250ZXh0KTsKIAkJCUFzc2VydChjbWQgIT0gTlVMTCk7CisKKwkJCUV2ZW50 VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KGNtZCwgcmVsKTsKKwogCQkJLyogUGVyZm9ybXMgb3duIHJl Y3Vyc2lvbiAqLwogCQkJQVRQcmVwQWx0ZXJDb2x1bW5UeXBlKHdxdWV1ZSwgdGFiLCByZWwsIHJl Y3Vyc2UsIHJlY3Vyc2luZywgY21kLAogCQkJCQkJCQkgIGxvY2ttb2RlLCBjb250ZXh0KTsKQEAg LTQ5MjIsNiArNDkyNSw3IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJ bmZvICp0YWIsCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJl c3M7CiAJUmVsYXRpb24JcmVsID0gdGFiLT5yZWw7CisJYm9vbAkJY29tbWFuZENvbGxlY3RlZCA9 IGZhbHNlOwogCiAJc3dpdGNoIChjbWQtPnN1YnR5cGUpCiAJewpAQCAtNTA0NSw2ICs1MDQ5LDgg QEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkJY2Fz ZSBBVF9BbHRlckNvbHVtblR5cGU6CS8qIEFMVEVSIENPTFVNTiBUWVBFICovCiAJCQkvKiBwYXJz ZSB0cmFuc2Zvcm1hdGlvbiB3YXMgZG9uZSBlYXJsaWVyICovCiAJCQlhZGRyZXNzID0gQVRFeGVj QWx0ZXJDb2x1bW5UeXBlKHRhYiwgcmVsLCBjbWQsIGxvY2ttb2RlKTsKKwkJCUV2ZW50VHJpZ2dl ckFsdGVyVHlwZUVuZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CisJCQlj b21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIEFUX0FsdGVyQ29sdW1u R2VuZXJpY09wdGlvbnM6CS8qIEFMVEVSIENPTFVNTiBPUFRJT05TICovCiAJCQlhZGRyZXNzID0K QEAgLTUyMTcsOCArNTIyMyw4IEBAIEFURXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFi bGVJbmZvICp0YWIsCiAJLyoKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQgdG8gaW50ZXJlc3Rl ZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8KLQlpZiAoY21kKQotCQlFdmVudFRyaWdnZXJDb2xsZWN0 QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCWlmIChjbWQgJiYgIWNv bW1hbmRDb2xsZWN0ZWQpCisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChO b2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUg Y29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1 ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKaW5kZXggYmZmYTlmOGRkMC4uNjNiMzgx NDllYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCkBAIC0xMzk3LDYgKzEzOTcsNyBA QCBleHBhbmRUYWJsZUxpa2VDbGF1c2UoUmFuZ2VWYXIgKmhlYXBSZWwsIFRhYmxlTGlrZUNsYXVz ZSAqdGFibGVfbGlrZV9jbGF1c2UpCiAJCWF0Y21kLT5jbWRzID0gYXRzdWJjbWRzOwogCQlhdGNt ZC0+b2JqdHlwZSA9IE9CSkVDVF9UQUJMRTsKIAkJYXRjbWQtPm1pc3Npbmdfb2sgPSBmYWxzZTsK KwkJYXRjbWQtPnRhYmxlX2xpa2UgPSB0cnVlOwogCQlyZXN1bHQgPSBsY29ucyhhdGNtZCwgcmVz dWx0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4 IGQ0ZjI5ZjhmZmMuLjIzYWJkNmZhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3Jj ZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWRkbG1lc3NhZ2Uub1wKKwlkZGx0cmlnZ2Vy Lm9cCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVyLm8gXAogCWxvZ2ljYWwubyBcCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjU2MzI1NzFmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwpAQCAtMCwwICsxLDM1NyBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsdHJpZ2dlci5jCisgKgkgIExvZ2ljYWwgRERM IG1lc3NhZ2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYworICoKKyAqIE5PVEVTCisgKgorICog RGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy90 YWJsZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjb21tYW5k cy9ldmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9p bGlzdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ0 Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCitleHRlcm4gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAq Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlOworCisvKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1h bmQgYW5kIGxvZyBpdCBwcmlvciB0bworICogZXhlY3V0aW9uLiBDdXJyZW50bHkgb25seSB1c2Vk IGZvciBEUk9QIFRBQkxFIGNvbW1hbmQKKyAqIHNvIHRoYXQgY2F0YWxvZyBjYW4gYmUgYWNjZXNz ZWQgYmVmb3JlIGJlaW5nIGRlbGV0ZWQuCisgKiBUaGlzIGlzIHRvIGNoZWNrIGlmIHRoZSB0YWJs ZSBpcyBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgorICogb3Igbm90LgorICovCitEYXR1bQorcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydChQR19GVU5DVElPTl9BUkdTKQorewor CUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNoYXIJICAgKmNvbW1hbmQgPSBwc3ByaW50 ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0YXJ0Iik7CisJRHJvcFN0bXQgICAqc3RtdDsKKwlMaXN0 Q2VsbCAgICpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkK KwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCXN0bXQg PSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCS8qIEV4dHJhY3QgdGhlIHJl bGlkIGZyb20gdGhlIHBhcnNlIHRyZWUgKi8KKwlmb3JlYWNoKGNlbGwxLCBzdG10LT5vYmplY3Rz KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdDsKKwkJTm9kZQkgICAqb2JqZWN0ID0gbGZpcnN0KGNl bGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlvbglyZWxhdGlvbiA9IE5V TEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10LT5yZW1vdmVUeXBlLAor CQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJCQkJCQkJCQkgQWNjZXNz RXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQkvKiBPYmplY3QgZG9lcyBub3Qg ZXhpc3QsIG5vdGhpbmcgdG8gZG8gKi8KKwkJaWYgKCFyZWxhdGlvbikKKwkJCWNvbnRpbnVlOwor CisJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOwor CisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0 YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdp bGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2Vk CisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJz Y3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVw bGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRl IG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxw ZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgi ZGVwYXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJCQkJ IGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRh YmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOworfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisg KgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0Lgor ICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJ Y2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZj aW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2Vy Iik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CisJQXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNp c3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKwor CS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdl dCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5l cmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVz CisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBz aWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBT RVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3 aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ICE9IFJF TFBFUlNJU1RFTkNFX1RFTVApCisJeworCQkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQg V0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwkJanNvbl9zdHJp bmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIGZhbHNlKTsKKworCQlpZiAoanNvbl9z dHJpbmcgIT0gTlVMTCkKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5k LmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJsZUFsdGVyLAorCQkJCQkJCQkganNvbl9zdHJp bmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdldERh dHVtKE5VTEwpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBp dC4gVGhpcyBmdW5jdGlvbgorICogaXMgY2FsbGVkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhl IGNvbW1hbmQgYnV0IGJlZm9yZSB0aGUKKyAqIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisgKi8KK0Rh dHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdT KQoreworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIJaXRlcjsKKwlEZXBhcnNlZENvbW1h bmRUeXBlIHR5cGU7CisJT2lkCQkJcmVsaWQ7CisJY2hhcgkJcmVsa2luZDsKKworCWlmICghQ0FM TEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBi eSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQlyZWxwZXJzaXN0ID0gUkVMUEVS U0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSBsZmlyc3QobGMp OworCQljaGFyCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRlIERETCBoYXMgYmVlbiBo YW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAoY21kLT5kLmFsdGVyVGFi bGUucmV3cml0ZSkKKwkJeworCQkJUmVuYW1lU3RtdCAqcmVuYW1lU3RtdCA9IChSZW5hbWVTdG10 ICopIGNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1lU3RtdCAmJiByZW5hbWVTdG10LT5y ZWxhdGlvblR5cGUgIT0gT0JKRUNUX1RZUEUgJiYKKwkJCQlyZW5hbWVTdG10LT5yZWxhdGlvblR5 cGUgIT0gT0JKRUNUX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZC0+dHlw ZSA9PSBTQ1RfU2ltcGxlICYmCisJCQkhT2lkSXNWYWxpZChjbWQtPmQuc2ltcGxlLmFkZHJlc3Mu b2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJU YWJsZSkKKwkJeworCQkJcmVsaWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwkJCXR5 cGUgPSBEQ1RfVGFibGVBbHRlcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE9ubHkgU0NUX1Np bXBsZSBmb3Igbm93ICovCisJCQlyZWxpZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJ ZDsKKwkJCXR5cGUgPSBEQ1RfU2ltcGxlQ21kOworCQl9CisKKwkJcmVsa2luZCA9IGdldF9yZWxf cmVsa2luZChyZWxpZCk7CisJCWlmIChyZWxraW5kKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxf cGVyc2lzdGVuY2UocmVsaWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9n IGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFi bGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRh YmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAqIHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFu ZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9z c2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQor CQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJs ZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsK KwkJCS8qCisJCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBh bGxvdyBkZWNvZGluZyBvZiB0aGUKKwkJCSAqIHNhbWUuCisJCQkgKi8KKwkJCWpzb25fc3RyaW5n ID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJCWlmIChqc29uX3N0 cmluZyAhPSBOVUxMKQorCQkJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgcmVsaWQs IHR5cGUsIGpzb25fc3RyaW5nLAorCQkJCQkJCQkJIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsK KwkJfQorCX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPlNRTERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJ RHJvcFN0bXQgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJCWNoYXIJ ICAgKmNvbW1hbmQ7CisJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJY29uc3QgY2hh ciAqdG1wdHlwZTsKKwkJT2JqZWN0Q2xhc3MJb2JqY2xhc3M7CisJCU9iamVjdEFkZHJlc3Mgb2Jq YWRkcjsKKworCQl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4 dDsKKwkJc3RtdCA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9 IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisJCW9iamFk ZHIgPSBvYmotPmFkZHJlc3M7CisJCW9iamNsYXNzID0gZ2V0T2JqZWN0Q2xhc3MoJm9iamFkZHIp OworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAwKQorCQkJY21k dHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKG9iamNsYXNzID09IE9DTEFTU19T Q0hFTUEgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX09QRVJBVE9SIHx8CisJCQkJIG9iamNs YXNzID09IE9DTEFTU19PUENMQVNTIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19PUEZBTUlM WSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfQ0FTVCB8fAorCQkJCSBvYmpjbGFzcyA9PSBP Q0xBU1NfVFlQRSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFJJR0dFUiB8fAorCQkJCSBv YmpjbGFzcyA9PSBPQ0xBU1NfQ09OVkVSU0lPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf UE9MSUNZIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19SRVdSSVRFIHx8CisJCQkJIG9iamNs YXNzID09IE9DTEFTU19FWFRFTlNJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0ZEVyB8 fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFNDT05GSUcgfHwKKwkJCQkgb2JqY2xhc3MgPT0g T0NMQVNTX1RTRElDVCB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFNURU1QTEFURSB8fAor CQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfVFNQQVJTRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX1RSQU5TRk9STSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfRk9SRUlHTl9TRVJWRVIg fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NPTExBVElPTiB8fAorCQkJCSBvYmpjbGFzcyA9 PSBPQ0xBU1NfVVNFUl9NQVBQSU5HIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19MQU5HVUFH RSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfU1RBVElTVElDX0VYVCB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfQU0gfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVp Z24gdGFibGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIp ID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJCQkgc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAibWF0ZXJpYWxpemVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJyb3V0aW5lIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAiYWdncmVnYXRlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxz ZQorCQkJY29udGludWU7CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZv cmVpZ24gZGF0YSB3cmFwcGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZv cmVpZ24tZGF0YSB3cmFwcGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVw KCJmb3JlaWduIGRhdGEgd3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21t YW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZp b3IpOworCQl9CisKKwkJLyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3Mg Ki8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVj dCIsCisJCQkJCQkgc3RybGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0 bXB0eXBlID0gcHN0cmR1cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJv cF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+ YmVoYXZpb3IpOworCQl9CisKKwkJLyoKKwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJl IG1vZGlmaWVkIHRvIG1ha2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4g b24gc2VydmVyIDxzZXJ2ZXJuYW1lPiBUTyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkgKiA8c2Vy dmVybmFtZT4KKwkJICoKKwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBl LCAidXNlciBtYXBwaW5nIiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsK KworCQkJdG1wdHlwZSA9IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJ CW9uX3NlcnZlciA9IHN0cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJ CXNwcmludGYoKGNoYXIgKikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikg dG1wdHlwZSwgb2JqLT5vYmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7 CisJCQlzdHJjYXQoKGNoYXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5k ID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJ CQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlCisJCQljb21tYW5kID0gZGVwYXJz ZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJ CQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCkKKwkJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBjbWR0eXBlLAorCQkJ CQkJCQkgY29tbWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50 ZXJHZXREYXR1bShOVUxMKTsKK30KKworCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJs ZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5k IGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRf d3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQlyZWxwZXJzaXN0OworCUNvbGxlY3Rl ZENvbW1hbmQgKmNtZDsKKwljaGFyCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FT X0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVu dCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9w ZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBE byBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlz IGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBs b2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4g YWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMg bWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQg Y29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3Jl YXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVO Q0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2Ug dGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBz YW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxz ZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2Uo ImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQs CisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYwppbmRleCA0ZDg0ZGY4MmY4Li44ZWY5NjE4NDU2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpAQCAtOTUsNiArOTUsMTEgQEAgc3RhdGlj IHZvaWQgc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4KIHN0YXRpYyB2b2lkIHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXIo UmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCQkJICBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdl KTsKK3N0YXRpYyB2b2lkIHN0cmVhbV9kZGxfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxp ZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vf c2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVy QnVmZmVyQ2hhbmdlICpjaGFuZ2UpOwogCkBAIC0yNDAsNiArMjQ1LDcgQEAgU3RhcnR1cERlY29k aW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJCShjdHgtPmNhbGxiYWNr cy5zdHJlYW1fY29tbWl0X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1f Y2hhbmdlX2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fbWVzc2FnZV9j YiAhPSBOVUxMKSB8fAorCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbF9jYiAhPSBOVUxMKSB8 fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoK QEAgLTI1Nyw2ICsyNjMsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9w bHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29t bWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2No YW5nZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1f bWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+c3RyZWFtX2RkbCA9IHN0cmVhbV9k ZGxfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV90cnVuY2F0ZSA9IHN0cmVhbV90 cnVuY2F0ZV9jYl93cmFwcGVyOwogCiAKQEAgLTE1NzksNiArMTU4Niw0OCBAQCBzdHJlYW1fbWVz c2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitz dGF0aWMgdm9pZAorc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJ CQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2 YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOwor CisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMg c3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxi YWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0g TlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9y IGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFt ZSA9ICJzdHJlYW1fZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsK KwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJ ZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxi YWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRy dWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRy YW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyog ZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX2RkbF9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJ CQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2 aW91czsKK30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJl bGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9tZXNvbi5idWlsZAppbmRleCBjZGE5MTNkMGI4Li5iNzgxNjM3NWEzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBA CiAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2RkbG1lc3NhZ2UuYycsCisgICdkZGx0 cmlnZ2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMn LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGQwMGU5MGRkNWUu LjUzMzUzMTBmMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAg LTY2Myw2ICs2NjMsNDcgQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJcHFfc2VuZGJ5dGVzKG91dCwg bWVzc2FnZSwgc3opOwogfQogCisvKgorICogUmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQor ICovCitjaGFyICoKK2xvZ2ljYWxyZXBfcmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0 ciAqbHNuLAorCQkJCQkJICAgY29uc3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6 KQoreworCXVpbnQ4IGZsYWdzOworCWNoYXIgKm1zZzsKKworCWZsYWdzID0gcHFfZ2V0bXNnaW50 KGluLCAxKTsKKwlpZiAoZmxhZ3MgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBm bGFncyAldSBpbiBkZGwgbWVzc2FnZSIsIGZsYWdzKTsKKworCSpsc24gPSBwcV9nZXRtc2dpbnQ2 NChpbik7CisJKnByZWZpeCA9IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNn aW50KGluLCA0KTsKKwltc2cgPSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKwor CXJldHVybiBtc2c7Cit9CisKKy8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAq Lwordm9pZAorbG9naWNhbHJlcF93cml0ZV9kZGwoU3RyaW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIg bHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FM X1JFUF9NU0dfRERMKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2 NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMy KG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAq IFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBA IC0xMjE5LDYgKzEyNjAsOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNn VHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19N RVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERM OgorCQkJcmV0dXJuICJEREwiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJF OgogCQkJcmV0dXJuICJCRUdJTiBQUkVQQVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJF UEFSRToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMKaW5kZXggZTBmZjVjMWU4Mi4uMjc2NmU3OTA0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTIwNDgsMTIgKzIwNDgsMjAgQEAg c3RhdGljIGlubGluZSB2b2lkCiBSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJD aGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCiB7Ci0JcmItPmRkbChyYiwgdHhuLCBjaGFu Z2UtPmxzbiwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAotCQkJY2hhbmdlLT5kYXRhLmRk bC5yZWxpZCwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKLQkJCWNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZV9zaXplLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwlpZiAoc3Ry ZWFtaW5nKQorCQlyYi0+c3RyZWFtX2RkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGwubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdl KTsKKwllbHNlCisJCXJiLT5kZGwocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5n ZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZV9zaXplLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggNDQ2Zjg0ZmE5 Ny4uZjQ1ODFjMDg5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CkBAIC0xNTYsNiArMTU2LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5j bHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgi CkBAIC0xODAsNyArMTgxLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNs dWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNs dWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9jYXRjYWNoZS5oIgpAQCAtMjUwNyw2ICsyNTExLDIzOCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisg KiBTcGVjaWFsIGhhbmRsaW5nIGZvciBDUkVBVEUgVEFCTEUgQVMgYW5kIFNFTEVDVCBJTlRPCisg KiB0byBub3QgcG9wdWxhdGUgZGF0YSBmcm9tIHRoZSBzb3VyY2UgdGFibGUgb24gdGhlIHN1YnNj cmliZXIuCisgKiBBbGxvdyB0aGUgZGF0YSB0byBiZSByZXBsaWNhdGVkIHRocm91Z2ggSU5TRVJU cyBvbiB0aGUgcHVibGlzaGVyLgorICovCitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRj aCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2Fz ZSBDTURUQUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3Rt dCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKGNhc3Rt dC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Jj ZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNp c3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxp c2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRy dWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsK KwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisK KwkJCQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAq IGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJ ICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+ c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ YnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgor ICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIExBQkVMIGNvbW1hbmQg dG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFu Z2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmlu ZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNh dGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29t bWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIgICAqcnYgPSBOVUxM OworCU9pZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJQ3Jl YXRlU3RtdCAqY3N0bXQ7CisJY2hhcgkgICAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkgICAq cmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAq KSBjb21tYW5kKTsKKwljc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJcnYg PSBjc3RtdC0+cmVsYXRpb247CisKKwlpZiAoY29tbWFuZFRhZyA9PSBDTURUQUdfQ1JFQVRFX1RB QkxFKQorCXsKKwkJY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQlydiA9 IGNzdG10LT5yZWxhdGlvbjsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmICgh cnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1l ID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3Bh Y2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFt ZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFt ZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5h bWUpOworCisJaWYgKE9pZElzVmFsaWQocmVsaWQpKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVs U3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9S RUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwi JXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGUgRERMIHJlcGxpY2F0aW9uIG1lc3NhZ2VzLgorICovCitzdGF0aWMg dm9pZAorYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0cglsc247 CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwljaGFyCSAgICptZXNzYWdlID0gTlVMTDsK KwljaGFyCSAgICpkZGxfY29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVf bGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2Vp dmVyOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVn X3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2Fs cmVwX3JlYWRfZGRsKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2Ug YXJlIGluIGEgdHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKworCWRkbF9jb21tYW5kID0gZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7 CisJZGVidWdfcXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3Ig bG9naWNhbCByZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERl c3ROb25lKTsKKwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsK KworCWZvcmVhY2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkg ICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQg ICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21t YW5kVGFnCWNvbW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0 ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNl OworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOwor CisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21t YW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRh dGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3Rh YmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFu YWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1 aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJ LyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2 ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJl IG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29u dGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJ CQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3Qg PSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJ CQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBs YW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5k LCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNp bmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1 ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGlu dG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhl cmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9j b250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJ UG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29t bWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJ CSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMg aGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBz aG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZv ciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJ IHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwK KwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1h bmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwg cmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVk IHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUo Y29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRl eHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFy c2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdf cXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CiAKIC8qCiAgKiBMb2dp Y2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1NzIsNiAr MjgwOCwxMCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFr OwogCisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETDoKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7 CisJCQlicmVhazsKKwogCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlh cHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCA3NzM3MjQyNTE2Li5jNGZiMjM1ZTVl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTUz LDYgKzUzLDExIEBAIHN0YXRpYyB2b2lkIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJl Zml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lk IHBnb3V0cHV0X2RkbChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9v bCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJ CQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2Jl Z2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2ICsy NjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2Ip CiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBw Z291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJ Y2ItPmRkbF9jYiA9IHBnb3V0cHV0X2RkbDsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29t bWl0X3R4bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFy ZV90eG47CkBAIC0yNzIsNiArMjc4LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQ bHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3Ry ZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAlj Yi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRs X2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90 cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICov CiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpA QCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2Vz IGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9C SU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAq IFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpA QCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlv biBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVk X3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVn aXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FUSU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNh dGlvbl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzc3LDkgKzEzODYsMjIgQEAgcGdvdXRwdXRfY2hh bmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxl VGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0g TlVMTDsKKwlib29sCQl0YWJsZV9yZXdyaXRlID0gZmFsc2U7CiAKIAl1cGRhdGVfcmVwbGljYXRp b25fcHJvZ3Jlc3MoY3R4LCBmYWxzZSk7CiAKKwkvKgorCSAqIEZvciBoZWFwIHJld3JpdGVzLCB3 ZSBtaWdodCBuZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJs ZSBwdWJsaXNoZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRp b24gaGVyZQorCSAqIGFuZCBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLworCWlmIChy ZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9IHRydWU7 CisJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJl bHJld3JpdGUpOworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAlpZiAoIWlzX3B1Ymxp c2hhYmxlX3JlbGF0aW9uKHJlbGF0aW9uKSkKIAkJcmV0dXJuOwogCkBAIC0xNDEzLDYgKzE0MzUs MTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFdlIGRv bid0IHB1Ymxpc2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJl d3JpdGUgZGRsCisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAmJiAhcmVs ZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBsZWFraW5n IG1lbW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9sZCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ0Miw4ICsxNDcx LDggQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICovCi0JCQlp ZiAoIXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVu dHJ5LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYmCisJCQkJ IXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5 LCAmYWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0NjMsOCArMTQ5MiwxOSBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRpb24sIHJl bGVudHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQls b2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90 LAotCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJCS8qCisJ CQkgKiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBz dWJzY3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1 cmUgdGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNv bnNpc3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBf d3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBu ZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJ CWVsc2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRy ZWwsIG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMp OwogCQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNTk2LDYgKzE2MzYsOSBAQCBwZ291dHB1 dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkKKwkJUmVs YXRpb25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpAQCAtMTcx NCw2ICsxNzU3LDEzOCBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1 ZSk7CiB9CiAKKy8qCisgKiBTZW5kIHRoZSBkZWNvZGVkIERETCBvdmVyIHdpcmUuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ291dHB1dF9kZGwoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNv bnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpk YXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091 dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3Bs dWdpbl9wcml2YXRlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlSZWxhdGlvblN5bmNF bnRyeSAqcmVsZW50cnk7CisKKwlzd2l0Y2ggKGNtZHR5cGUpCisJeworCQljYXNlIERDVF9UYWJs ZURyb3BTdGFydDoKKworCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQg dG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEg cHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uCisJCQkgKiBXZSBuZWVk IHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJ CQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZv ciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25s eSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24g PSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOwor CQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlp ZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRz ID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRp b25DbG9zZShyZWxhdGlvbik7CisJCQlyZXR1cm47CisKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5k OgorCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkK KwkJCQlyZXR1cm47CisJCQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2Rl bGV0ZV9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCisJCWNh c2UgRENUX1RhYmxlQWx0ZXI6CisKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGws IHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlCisJCQkgKiB0byBzdWJzY3Jp YmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvCisJCQkgKiBV UERBVEUgYW5kIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2Vl bgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVu dC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJ CQkgKgorCQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxy ZWFkeSBiZSBkaWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4g VG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluCisJCQkgKiBzdWJzY3JpYmVyIHdoaWNoIGRv ZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwKKwkJCSAqIHdlIG5l ZWQgdG8gbGV0IHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRs CisJCQkgKiB0byByZXdyaXRlIGFsbCB0aGUgZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAo MikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVu dAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQK KwkJCSAqIGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5l ZWQgdG8KKwkJCSAqIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtlZXAgdGhlIGRh dGEgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3Zl IHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlcgorCQkJICogb25seSByZXdyaXRlIHRoZSBl eHRyYSBkYXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQKKwkJCSAqIHVzZSB0 aGUgdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4KKwkJ CSAqIEJlc2lkZXMsIHdlIG1heSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3Ig YWxsIHR5cGUKKwkJCSAqIG9mIHJld3JpdGUgZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmlu ZSB0byBza2lwIHNlbmRpbmcKKwkJCSAqIHJld3JpdGUgY2hhbmdlcyBmb3IgQUxURVIgVEFCTEUg U0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUKKwkJCSAqIHRhYmxlIGRvZXNuJ3QgYWN0dWFs bHkgYmUgY2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRp b24ocmVsaWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVs X3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5n IHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlCisJCQkgKiBk ZGwgbmVlZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJ CQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJs aXNoX2FzX3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24p OworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfU2ltcGxlQ21k OgorCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAo cmVsYXRpb24gPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5 bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25z LnB1YmRkbCkKKwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47 CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgRENUX09iamVjdERyb3A6CisJCQkvKiBkbyBu b3RoaW5nICovCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVH SU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9i ZWdpbl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1 Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGwoY3R4LT5v dXQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAor CQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYg KHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVy biB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1 c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmln aW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTUsNyArMjE3MCw4IEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2No ZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0J CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFs c2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7 CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkp OwpAQCAtMjA1Myw2ICsyMjI5LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9 IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnkt PnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJl IHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjYsNiArMjM0Myw3IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwog CQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVs ZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBj aGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC9jbWR0YWcuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMKaW5kZXggNGJkNzEzYTBi NC4uY2UwOWM1ZjIzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYworKysg Yi9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCkBAIC0yNiwxMCArMjYsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29tbWFuZFRhZ0JlaGF2aW9yCiAJY29uc3QgYm9vbAl0YWJsZV9yZXdyaXRlX29rOwog CWNvbnN0IGJvb2wJZGlzcGxheV9yb3djb3VudDsJLyogc2hvdWxkIHRoZSBudW1iZXIgb2Ygcm93 cyBhZmZlY3RlZCBiZQogCQkJCQkJCQkJICogc2hvd24gaW4gdGhlIGNvbW1hbmQgY29tcGxldGlv biBzdHJpbmcgKi8KKwljb25zdCBib29sCWRkbF9yZXBsaWNhdGlvbl9vazsKIH0gQ29tbWFuZFRh Z0JlaGF2aW9yOwogCi0jZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ssIHJ3cm9r LCByb3djbnQpIFwKLQl7IG5hbWUsICh1aW50OCkgKHNpemVvZihuYW1lKSAtIDEpLCBldnRyZ29r LCByd3Jvaywgcm93Y250IH0sCisjZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ss IHJ3cm9rLCByb3djbnQsIGRkbHJlcGxvaykgXAorCXsgbmFtZSwgKHVpbnQ4KSAoc2l6ZW9mKG5h bWUpIC0gMSksIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQsIGRkbHJlcGxvayB9LAogCiBzdGF0aWMg Y29uc3QgQ29tbWFuZFRhZ0JlaGF2aW9yIHRhZ19iZWhhdmlvcltDT01NQU5EX1RBR19ORVhUVEFH XSA9IHsKICNpbmNsdWRlICJ0Y29wL2NtZHRhZ2xpc3QuaCIKQEAgLTU3LDYgKzU4LDIxIEBAIEdl dENvbW1hbmRUYWdOYW1lQW5kTGVuKENvbW1hbmRUYWcgY29tbWFuZFRhZywgU2l6ZSAqbGVuKQog CXJldHVybiB0YWdfYmVoYXZpb3JbY29tbWFuZFRhZ10ubmFtZTsKIH0KIAorQ29tbWFuZFRhZyAq CitHZXRDb21tYW5kVGFnc0ZvckRETFJlcGwoaW50ICpuY29tbWFuZHMpCit7CisJQ29tbWFuZFRh ZyAqZGRscmVwbF9jb21tYW5kcyA9IHBhbGxvYzAoQ09NTUFORF9UQUdfTkVYVFRBRyAqIHNpemVv ZihDb21tYW5kVGFnKSk7CisJKm5jb21tYW5kcyA9IDA7CisKKwlmb3IoaW50IGkgPSAwOyBpIDwg Q09NTUFORF9UQUdfTkVYVFRBRzsgaSsrKQorCXsKKwkJaWYgKHRhZ19iZWhhdmlvcltpXS5kZGxf cmVwbGljYXRpb25fb2spCisJCQlkZGxyZXBsX2NvbW1hbmRzWygqbmNvbW1hbmRzKSsrXSA9IChD b21tYW5kVGFnKSBpOworCX0KKworCXJldHVybiBkZGxyZXBsX2NvbW1hbmRzOworfQorCiBib29s CiBjb21tYW5kX3RhZ19kaXNwbGF5X3Jvd2NvdW50KENvbW1hbmRUYWcgY29tbWFuZFRhZykKIHsK QEAgLTc1LDYgKzkxLDEyIEBAIGNvbW1hbmRfdGFnX3RhYmxlX3Jld3JpdGVfb2soQ29tbWFuZFRh ZyBjb21tYW5kVGFnKQogCXJldHVybiB0YWdfYmVoYXZpb3JbY29tbWFuZFRhZ10udGFibGVfcmV3 cml0ZV9vazsKIH0KIAorYm9vbAorY29tbWFuZF90YWdfZGRsX3JlcGxpY2F0aW9uX29rKENvbW1h bmRUYWcgY29tbWFuZFRhZykKK3sKKwlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLmRk bF9yZXBsaWNhdGlvbl9vazsKK30KKwogLyoKICAqIFNlYXJjaCBDb21tYW5kVGFnIGJ5IG5hbWUK ICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5k L3Rjb3AvdXRpbGl0eS5jCmluZGV4IDFlODNjZmUzOTMuLjJiZmIxYTZjYzkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jCkBAIC0xNjY2LDggKzE2NjYsMTEgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJ CUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNz ID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0 cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2Vy VGFibGVJbml0V3JpdGVFbmQoYWRkcmVzcyk7CisJCQkJY29tbWFuZENvbGxlY3RlZCA9IHRydWU7 CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvZXZ0Y2FjaGUuYwppbmRleCAxZjVlN2ViNGM2Li5mMmE5ZjVkY2MyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dl ckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAo ZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3 cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09 IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IGQxNzFjZmNmMmYuLmE3YjYzODEy YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTY5MCw2ICs1NjkwLDcgQEAg UmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRp b25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJm b3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZv cm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJm b3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9y bS0+cHViZGRsOwogCiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQg aW4gdGhlIGZpbHRlciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCAzMDcxOGRk NzU4Li5jZjQxOTg3YmZhIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTM5NDksNiArMzk0OSw3IEBAIGdldFB1 YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlp X3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOwor CWludAkJCWlfcHViZGRsOwogCWludAkJCWlfcHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50 dXBzOwpAQCAtMzk2NCwyMyArMzk2NSwyMyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91 dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkv KiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8KLQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAx MzAwMDApCisJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTYwMDAwKQogCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5w dWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg cC5wdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFy b290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQt PnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwK IAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJ ICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAu cHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9v dCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBw LnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBw Lm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1 YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2Ug QVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBBUyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJ CQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShm b3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAgLTM5OTYsNiArMzk5Nyw3IEBA IGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlp X3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9 IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUiKTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVy KHJlcywgInB1YnRydW5jYXRlIik7CisJaV9wdWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRs Iik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1 YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC00 MDE5LDYgKzQwMjEsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1Q dWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSks ICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdl dHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0u cHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9 PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShy ZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwOTgsNiArNDEwMiwxNSBA QCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpw dWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJ eworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOwor CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7 CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKIAogCWlmIChwdWJp bmZvLT5wdWJ2aWFyb290KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggZTdjYmQ4ZDdlZC4uNzkyN2YyODc4ZiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5oCkBAIC02MTksNiArNjE5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0 aW9uSW5mbwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVi dHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogCWJvb2wJCXB1YnZpYXJvb3Q7CiB9IFB1YmxpY2F0 aW9uSW5mbzsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuYwppbmRleCA1MjNmYWI2MWI5Li5iNjQ3YmFlODM0IDEwMDY0NAotLS0g YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpA QCAtNjE2NCw3ICs2MTY0LDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJu KQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlP cHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVt bnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07 CiAKIAlpZiAocHNldC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTgxLDEzICs2MTgxLDE4 IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlwcmludGZQUUV4cEJ1 ZmZlcigmYnVmLAogCQkJCQkgICJTRUxFQ1QgcHVibmFtZSBBUyBcIiVzXCIsXG4iCiAJCQkJCSAg IiAgcGdfY2F0YWxvZy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIFwiJXNcIixcbiIKLQkJ CQkJICAiICBwdWJhbGx0YWJsZXMgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1Ymluc2VydCBB UyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHVidXBkYXRlIEFTIFwiJXNcIixcbiIKLQkJCQkJICAi ICBwdWJkZWxldGUgQVMgXCIlc1wiIiwKKwkJCQkJICAiICBwdWJhbGx0YWJsZXMgQVMgXCIlc1wi IiwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIk5hbWUiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIk93 bmVyIiksCi0JCQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIiksCisJCQkJCSAgZ2V0dGV4 dF9ub29wKCJBbGwgdGFibGVzIikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCkKKwkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIs CisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYs CisJCQkJCSAgIixcbiAgcHViaW5zZXJ0IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJ1cGRh dGUgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIiLAogCQkJCQkg IGdldHRleHRfbm9vcCgiSW5zZXJ0cyIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgiVXBkYXRlcyIp LAogCQkJCQkgIGdldHRleHRfbm9vcCgiRGVsZXRlcyIpKTsKQEAgLTYxOTksNyArNjIwNCw2IEBA IGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBn ZXR0ZXh0X25vb3AoIlZpYSByb290IikpOwotCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwK IAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02Mjg5 LDYgKzYyOTMsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CVBHcmVzdWx0ICAgKnJlczsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1 YnZpYXJvb3Q7CisJYm9vbAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsK IAlwcmludFRhYmxlQ29udGVudCBjb250OwpAQCAtNjMwNSwxMyArNjMxMCwxOSBAQCBkZXNjcmli ZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0g KHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJz aW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDAp OwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwK IAkJCQkJICAiU0VMRUNUIG9pZCwgcHVibmFtZSxcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBn X2dldF91c2VyYnlpZChwdWJvd25lcikgQVMgb3duZXIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFi bGVzLCBwdWJpbnNlcnQsIHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CisJCQkJCSAgIiAgcHViYWxs dGFibGVzIik7CisJaWYgKGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYs CisJCQkJCQkJICIsIHB1YmRkbCIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJ CQkgIiwgIHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUiKTsKIAlpZiAoaGFzX3B1YnRy dW5jYXRlKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ0cnVu Y2F0ZSIpOwpAQCAtNjM2OSw2ICs2MzgwLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3Qg Y2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCW5j b2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAogCQlpbml0UFFFeHBCdWZm ZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNhdGlvbiAl cyIpLCBwdWJuYW1lKTsKQEAgLTYzNzYsNiArNjM4OSw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0 dGV4dF9ub29wKCJPd25lciIpLCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIo JmNvbnQsIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpLCB0cnVlLCBhbGlnbik7CisJCWlmICho YXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJE REwiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0 X25vb3AoIkluc2VydHMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRkSGVhZGVyKCZj b250LCBnZXR0ZXh0X25vb3AoIlVwZGF0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxl QWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRlbGV0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwpA QCAtNjM5Myw2ICs2NDA4LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybikKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyks IGZhbHNlLCBmYWxzZSk7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRD ZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmICho YXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBp LCA5KSwgZmFsc2UsIGZhbHNlKTsKIAogCQlpZiAoIXB1YmFsbHRhYmxlcykKIAkJewpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggZjQ1NmVmYjU5Zi4uNDAxZGFiZTAxYiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMTkwMSw0ICsxMTkwMSwxNiBAQAogeyBvaWQgPT4gJzQ2NDMnLCBk ZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywK ICAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ ICd0ZXh0JywKICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X2V4cGFuZF9jb21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBm b3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBlbmQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAor ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9j b21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisg IHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApp bmRleCA2ZWNhYTJhMDFlLi5hNWQ2NGYwMzhhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFMT0cocGdfcHVibGljYXRpb24sNjEwNCxQdWJs aWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBw dWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290OworCisJLyog dHJ1ZSBpZiBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRh X3BnX3B1YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBA IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAli b29sCQlwdWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQ dWJsaWNhdGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDQ4YzY1ZWY1M2MuLmNiYTRlNzI0NTUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTk0LDYgKzk0LDEwIEBAIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9p ZCwgaW50IHJlYXNvbik7CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl U3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5p dFdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7 CisKIGV4dGVybiBib29sIEV2ZW50VHJpZ2dlckJlZ2luQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4 dGVybiB2b2lkIEV2ZW50VHJpZ2dlckVuZENvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gYm9v bCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpOwpAQCAtMTEwLDcgKzExNCwxMiBAQCBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNz IGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAq cGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQg b2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJj bWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJ CQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0 ZSk7CisKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVHlwZVN0YXJ0KEFsdGVyVGFibGVD bWQgKnN1YmNtZCwgUmVsYXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVy VHlwZUVuZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywKKwkJCQkJCQkJCSBi b29sIHJld3JpdGUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lk KTsKIAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQg KmlzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90 by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggZDY0MjY0 M2FhZS4uNTM3MTA2NTU2MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgK QEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNB TF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAog CUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19EREwgPSAn TCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9HSUNBTF9SRVBf TVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQQVJFRCA9ICdL JywKQEAgLTIzMCw2ICsyMzEsOSBAQCBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5j YXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3Rh cnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSBib29s IHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAq bWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbChTdHJpbmdJbmZvIG91 dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6 LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dpY2FscmVwX3JlYWRfZGRs KFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6 ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNv bHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChT dHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRl eCA1ZWQ1ZTZhN2JjLi40NGJhZjQwNzIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0 X3BsdWdpbi5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBPVVRQVVRfUExVR0lOX0gKICNkZWZp bmUgT1VUUFVUX1BMVUdJTl9ICiAKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogCiBzdHJ1Y3QgTG9naWNh bERlY29kaW5nQ29udGV4dDsKQEAgLTIxNCw2ICsyMTMsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9n aWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgKIAkJCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQkJICBjb25z dCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNh bCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25z LgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAo c3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAor CQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBT aXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwog LyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3Mg dHJhbnNhY3Rpb25zLgogICovCkBAIC0yNTMsNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0 cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9j b21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7 CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNhbERlY29k ZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxs YmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0Lmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDY2MzMxMWFmYTkuLjhm NjgxMGJjYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBA QCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247 CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOwor CUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1p bmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgKaW5kZXggYzhmMzI0ZmZiYS4uOGJhNzA5ZDhjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaApAQCAtNTM5LDYgKzUzOSwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBz dHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpS ZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1 ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJ CQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJl Zml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVy ZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJ CQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC02MDksNiArNjIwLDcgQEAgc3RydWN0 IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1p dDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVy QnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJl YW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVD QiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9j bWR0YWcuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmgKaW5kZXggMWU3NTE0ZGNmZi4uMDc2 YzI3ZTY0MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaAorKysgYi9zcmMv aW5jbHVkZS90Y29wL2NtZHRhZy5oCkBAIC0xNiw3ICsxNiw3IEBACiAvKiBidWZmZXIgc2l6ZSBy ZXF1aXJlZCBmb3IgY29tbWFuZCBjb21wbGV0aW9uIHRhZ3MgKi8KICNkZWZpbmUgQ09NUExFVElP Tl9UQUdfQlVGU0laRQk2NAogCi0jZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ss IHJ3cm9rLCByb3djbnQpIFwKKyNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywg cndyb2ssIHJvd2NudCwgZGRscmVwbG9rKSBcCiAJdGFnLAogCiB0eXBlZGVmIGVudW0gQ29tbWFu ZFRhZwpAQCAtNTMsOSArNTMsMTEgQEAgQ29weVF1ZXJ5Q29tcGxldGlvbihRdWVyeUNvbXBsZXRp b24gKmRzdCwgY29uc3QgUXVlcnlDb21wbGV0aW9uICpzcmMpCiBleHRlcm4gdm9pZCBJbml0aWFs aXplUXVlcnlDb21wbGV0aW9uKFF1ZXJ5Q29tcGxldGlvbiAqcWMpOwogZXh0ZXJuIGNvbnN0IGNo YXIgKkdldENvbW1hbmRUYWdOYW1lKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gY29u c3QgY2hhciAqR2V0Q29tbWFuZFRhZ05hbWVBbmRMZW4oQ29tbWFuZFRhZyBjb21tYW5kVGFnLCBT aXplICpsZW4pOworZXh0ZXJuIENvbW1hbmRUYWcgKkdldENvbW1hbmRUYWdzRm9yRERMUmVwbChp bnQgKm5jb21tYW5kcyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19kaXNwbGF5X3Jvd2NvdW50 KENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19ldmVudF90 cmlnZ2VyX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3Rh Z190YWJsZV9yZXdyaXRlX29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CitleHRlcm4gYm9vbCBj b21tYW5kX3RhZ19kZGxfcmVwbGljYXRpb25fb2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4 dGVybiBDb21tYW5kVGFnIEdldENvbW1hbmRUYWdFbnVtKGNvbnN0IGNoYXIgKmNvbW1hbmRuYW1l KTsKIGV4dGVybiBTaXplIEJ1aWxkUXVlcnlDb21wbGV0aW9uU3RyaW5nKGNoYXIgKmJ1ZmYsIGNv bnN0IFF1ZXJ5Q29tcGxldGlvbiAqcWMsCiAJCQkJCQkJCQkgICBib29sIG5hbWVvbmx5KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oIGIvc3JjL2luY2x1ZGUvdGNv cC9jbWR0YWdsaXN0LmgKaW5kZXggZTczOGFjMWMwOS4uMDRiMGNlNWY1YiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0 YWdsaXN0LmgKQEAgLTIzLDE5NiArMjMsMTk2IEBACiAgKiB0ZXh0dWFsIG5hbWUsIHNvIHRoYXQg d2UgY2FuIGJzZWFyY2ggb24gaXQ7IHNlZSBHZXRDb21tYW5kVGFnRW51bSgpLgogICovCiAKLS8q IHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3Jp dGVfb2ssIHJvd2NvdW50ICovCi1QR19DTURUQUcoQ01EVEFHX1VOS05PV04sICI/Pz8iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BQ0NFU1NfTUVUSE9ELCAi QUxURVIgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfQUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09MTEFU SU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT05TVFJB SU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfQ09OVkVSU0lPTiwgIkFMVEVSIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxURVIgREFUQUJBU0Ui LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ERUZBVUxUX1BS SVZJTEVHRVMsICJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRVZFTlRfVFJJR0dFUiwgIkFMVEVS IEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9FWFRFTlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlH TiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZVTkNUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9JTkRFWCwgIkFMVEVS IElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQU5H VUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRFUiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX01BVEVSSUFMSVpFRF9WSUVXLCAiQUxU RVIgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQUxURVJfT1BFUkFUT1IsICJBTFRFUiBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBD TEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFU T1JfRkFNSUxZLCAiQUxURVIgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwgIkFMVEVSIFBST0NF RFVSRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUFVCTElD QVRJT04sICJBTFRFUiBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfUk9MRSwgIkFMVEVSIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5FLCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJVTEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NDSEVNQSwgIkFMVEVS IFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VR VUVOQ0UsICJBTFRFUiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFUSVNUSUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBUSU9OLCAi QUxURVIgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9TWVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9UQUJMRSwgIkFMVEVSIFRBQkxFIiwgdHJ1ZSwgdHJ1ZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RBQkxFU1BBQ0UsICJBTFRFUiBUQUJMRVNQQUNF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFS Q0hfQ09ORklHVVJBVElPTiwgIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJ T05BUlksICJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9QQVJTRVIsICJBTFRFUiBURVhU IFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSQU5TRk9STSwgIkFM VEVSIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFMVEVSIFVTRVIgTUFQUElORyIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVklFVywgIkFMVEVS IFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJB TkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQkVHSU4sICJC RUdJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NBTEwsICJDQUxM IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNI RUNLUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRSwg IkNMT1NFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VS U09SLCAiQ0xPU0UgQ1VSU09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DTFVTVEVSLCAiQ0xVU1RFUiIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NPTU1FTlQsICJDT01NRU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVQsICJDT01NSVQiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFS RUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT1BZLCAiQ09QWSIs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09QWV9GUk9NLCAiQ09QWSBG Uk9NIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FDQ0VT U19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENB U1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJ T04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwgIkNSRUFURSBDT05W RVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfREFU QUJBU0UsICJDUkVBVEUgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfRE9NQUlOLCAiQ1JFQVRFIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VWRU5UX1RSSUdHRVIsICJDUkVBVEUgRVZFTlQg VFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9F WFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVBVEUgRk9SRUlHTiBE QVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JF QVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf TEFOR1VBR0UsICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJB VE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFks ICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElP TiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1JPTEUsICJDUkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9ST1VUSU5FLCAiQ1JFQVRFIFJPVVRJTkUiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEsICJD UkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFU SVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VC U0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFLCAiQ1JFQVRFIFRBQkxFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVfQVMsICJDUkVBVEUgVEFCTEUg QVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRVNQ QUNFLCAiQ1JFQVRFIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBESUNU SU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAi Q1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJ R0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUs ICJDUkVBVEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURV9BTEwsICJE RUFMTE9DQVRFIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RF Q0xBUkVfQ1VSU09SLCAiREVDTEFSRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19D TURUQUcoQ01EVEFHX0RJU0NBUkQsICJESVNDQVJEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRElTQ0FSRF9BTEwsICJESVNDQVJEIEFMTCIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9TRVFVRU5DRVMs ICJESVNDQVJEIFNFUVVFTkNFUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RJU0NBUkRfVEVNUCwgIkRJU0NBUkQgVEVNUCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQUdHUkVHQVRFLCAiRFJPUCBBR0dS RUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ0FTVCwg IkRST1AgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9D T0xMQVRJT04sICJEUk9QIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9DT05TVFJBSU5ULCAiRFJPUCBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0NPTlZFUlNJT04sICJEUk9QIENPTlZFUlNJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfREFUQUJBU0Us ICJEUk9QIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf RFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVOVCBUUklHR0VSIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJT04sICJEUk9QIEVY VEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JF SUdOX0RBVEFfV1JBUFBFUiwgIkRST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9UQUJMRSwgIkRST1AgRk9S RUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9G VU5DVElPTiwgIkRST1AgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfSU5ERVgsICJEUk9QIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX0xBTkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywgIkRST1Ag TUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfT1BFUkFUT1IsICJEUk9QIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVSQVRPUiBDTEFTUyIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1J TFksICJEUk9QIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfRFJPUF9PV05FRCwgIkRST1AgT1dORUQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0RST1BfUE9MSUNZLCAiRFJPUCBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUFJPQ0VEVVJFLCAiRFJPUCBQUk9DRURVUkUi LCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfUFVCTElDQVRJT04s ICJEUk9QIFBVQkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19EUk9QX1JPVVRJTkUsICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfUlVMRSwgIkRST1AgUlVMRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TQ0hFTUEsICJEUk9QIFNDSEVNQSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVFVRU5DRSwgIkRST1AgU0VR VUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU0VSVkVS LCAiRFJPUCBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfU1RBVElTVElDUywgIkRST1AgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9TVUJTQ1JJUFRJT04sICJEUk9QIFNVQlNDUklQVElPTiIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFC TEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFD RSwgIkRST1AgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkRST1AgVEVYVCBTRUFSQ0ggQ09O RklHVVJBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNF UiwgIkRST1AgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBU RU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFO U0ZPUk0sICJEUk9QIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9UUklHR0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5HLCAiRFJPUCBVU0VSIE1BUFBJ TkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVklFVywgIkRS T1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRVhFQ1VURSwg IkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19FWFBMQUlO LCAiRVhQTEFJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0ZFVENI LCAiRkVUQ0giLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5ULCAi R1JBTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUs ICJHUkFOVCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfSU1Q T1JUX0ZPUkVJR05fU0NIRU1BLCAiSU1QT1JUIEZPUkVJR04gU0NIRU1BIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19JTlNFUlQsICJJTlNFUlQiLCBmYWxzZSwgZmFsc2Us IHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0xJU1RFTiwgIkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQUQsICJMT0FEIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfTE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19NRVJHRSwgIk1FUkdFIiwgZmFsc2UsIGZhbHNl LCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKLVBHX0NNRFRBRyhDTURUQUdfTk9USUZZLCAiTk9USUZZIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFO U0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFQVNTSUdO X09XTkVELCAiUkVBU1NJR04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVJTkRFWCwgIlJF SU5ERVgiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAi UkVMRUFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFU0VULCAi UkVTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRVZPS0UsICJS RVZPS0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFVk9LRV9ST0xF LCAiUkVWT0tFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19S T0xMQkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfUk9MTEJBQ0tfUFJFUEFSRUQsICJST0xMQkFDSyBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NBVkVQT0lOVCwgIlNBVkVQT0lOVCIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVMLCAiU0VDVVJJVFkg TEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVCwgIlNF TEVDVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9L RVlfU0hBUkUsICJTRUxFQ1QgRk9SIEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfTk9fS0VZX1VQREFURSwgIlNFTEVDVCBGT1IgTk8g S0VZIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVD VF9GT1JfU0hBUkUsICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9VUERBVEUsICJTRUxFQ1QgRk9SIFVQREFURSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9JTlRPLCAiU0VMRUNU IElOVE8iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVCwgIlNFVCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVF9DT05TVFJBSU5UUywg IlNFVCBDT05TVFJBSU5UUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X1NIT1csICJTSE9XIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU1RB UlRfVFJBTlNBQ1RJT04sICJTVEFSVCBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX1RSVU5DQVRFX1RBQkxFLCAiVFJVTkNBVEUgVEFCTEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwg ZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorLyogc3ltYm9sIG5hbWUsIHRleHR1YWwgbmFtZSwgZXZlbnRf dHJpZ2dlcl9vaywgdGFibGVfcmV3cml0ZV9vaywgcm93Y291bnQsIGRkbHJlcGxvayAqLworUEdf Q01EVEFHKENNRFRBR19VTktOT1dOLCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0FDQ0VTU19NRVRIT0QsICJBTFRFUiBBQ0NFU1MgTUVU SE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJf QUdHUkVHQVRFLCAiQUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09M TEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9DT05TVFJBSU5ULCAiQUxURVIgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJBTFRFUiBDT05WRVJTSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9EQVRB QkFTRSwgIkFMVEVSIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX0RFRkFVTFRfUFJJVklMRUdFUywgIkFMVEVSIERFRkFVTFQgUFJJ VklMRUdFUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfRE9NQUlOLCAiQUxURVIgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9FVkVOVF9UUklHR0VSLCAiQUxURVIgRVZFTlQgVFJJR0dFUiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FWFRF TlNJT04sICJBTFRFUiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlHTiBE QVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0ZPUkVJR05fVEFCTEUsICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZV TkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9JTkRFWCwgIkFMVEVSIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9MQU5HVUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRF UiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9NQVRFUklBTElaRURfVklFVywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwg dHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9S LCAiQUxURVIgT1BFUkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLCAiQUxURVIgT1BFUkFUT1IgQ0xBU1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZB TUlMWSwgIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9MSUNZLCAiQUxURVIgUE9MSUNZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QUk9DRURVUkUsICJBTFRF UiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST0xFLCAiQUxURVIgUk9MRSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5F LCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NDSEVNQSwgIkFMVEVSIFNDSEVNQSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VRVUVOQ0UsICJBTFRF UiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf QUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFUSVNUSUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBU SU9OLCAiQUxURVIgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfU1lTVEVNLCAiQUxURVIgU1lTVEVNIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RBQkxFLCAiQUxURVIgVEFC TEUiLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFC TEVTUEFDRSwgIkFMVEVSIFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkFMVEVS IFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksICJBTFRFUiBURVhU IFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9QQVJTRVIsICJBTFRFUiBURVhUIFNFQVJDSCBQQVJT RVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9U RVhUX1NFQVJDSF9URU1QTEFURSwgIkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAi QUxURVIgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfVFJJR0dFUiwgIkFMVEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwg dHJ1ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywg IkFMVEVSIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfVklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNIRUNL UE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xP U0UsICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19DTE9TRV9DVVJTT1IsICJDTE9TRSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xVU1RFUiwg IkNMVVNURVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf Q09NTUVOVCwgIkNPTU1FTlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NPTU1JVCwgIkNPTU1JVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFSRUQiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxz ZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZ IEZST00iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0FDQ0VTU19NRVRIT0QsICJDUkVBVEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBB R0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9DQVNULCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlOVCwg IkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JF QVRFIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9ET01BSU4sICJDUkVBVEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVO VCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJD UkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFC TEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9G VU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUg TEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9NQVRFUklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklFVyIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SLCAi Q1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9G QU1JTFksICJDUkVBVEUgT1BFUkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwg IkNSRUFURSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRF IFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEsICJDUkVBVEUg U0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1RBVElTVElDUywg IkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfU1VCU0NSSVBUSU9OLCAiQ1JFQVRFIFNVQlNDUklQVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRSwgIkNS RUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFU1BBQ0UsICJDUkVBVEUgVEFCTEVT UEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdV UkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZ IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBM QVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJBTlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9S TSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RS SUdHRVIsICJDUkVBVEUgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUsICJDUkVBVEUgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywgIkNSRUFURSBV U0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEVfQUxMLCAiREVBTExPQ0FU RSBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfREVD TEFSRV9DVVJTT1IsICJERUNMQVJFIENVUlNPUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19ERUxFVEUsICJERUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUs IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJELCAiRElTQ0FSRCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX0FMTCwgIkRJU0NBUkQg QUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NB UkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVOQ0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9URU1Q LCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAiRFJPUCBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0FHR1JFR0FURSwgIkRST1Ag QUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfQ09MTEFUSU9OLCAiRFJPUCBDT0xMQVRJT04iLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09OU1RSQUlOVCwgIkRST1AgQ09O U1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfQ09OVkVSU0lPTiwgIkRST1AgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9EQVRBQkFTRSwgIkRST1AgREFUQUJBU0UiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ET01BSU4sICJE Uk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf RFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRVhURU5TSU9OLCAiRFJPUCBFWFRF TlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf Rk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0ZPUkVJR05fVEFCTEUs ICJEUk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfRlVOQ1RJT04sICJEUk9QIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0lOREVYLCAiRFJPUCBJTkRFWCIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9MQU5HVUFHRSwg IkRST1AgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0RST1BfTUFURVJJQUxJWkVEX1ZJRVcsICJEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SLCAi RFJPUCBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9PUEVSQVRPUl9DTEFTUywgIkRST1AgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLCAi RFJPUCBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9QIE9XTkVEIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QT0xJQ1ksICJEUk9QIFBPTElDWSIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QUk9DRURVUkUsICJE Uk9QIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9QVUJMSUNBVElPTiwgIkRST1AgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1JPTEUsICJEUk9QIFJPTEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAi RFJPUCBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX1JVTEUsICJEUk9QIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0RST1BfU0NIRU1BLCAiRFJPUCBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfU0VRVUVOQ0UsICJEUk9QIFNFUVVFTkNF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUlZF UiwgIkRST1AgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX1NUQVRJU1RJQ1MsICJEUk9QIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfU1VCU0NSSVBUSU9OLCAiRFJPUCBTVUJT Q1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX1RBQkxFLCAiRFJPUCBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9UQUJMRVNQQUNFLCAiRFJPUCBUQUJMRVNQQUNFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09O RklHVVJBVElPTiwgIkRST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9O QVJZLCAiRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkRST1AgVEVY VCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBURU1QTEFU RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFO U0ZPUk0sICJEUk9QIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfRFJPUF9UUklHR0VSLCAiRFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RZUEUsICJEUk9QIFRZUEUiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVVNFUl9NQVBQSU5H LCAiRFJPUCBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfVklFVywgIkRST1AgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfRVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRkVUQ0gsICJGRVRDSCIsIGZh bHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0dSQU5ULCAiR1JBTlQi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUs ICJHUkFOVCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0lNUE9SVF9GT1JFSUdOX1NDSEVNQSwgIklNUE9SVCBGT1JFSUdOIFNDSEVNQSIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfSU5TRVJULCAiSU5TRVJUIiwg ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTElTVEVOLCAiTElT VEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xPQUQs ICJMT0FEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0xP Q0tfVEFCTEUsICJMT0NLIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX01FUkdFLCAiTUVSR0UiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX05PVElGWSwgIk5PVElGWSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFLCAiUFJFUEFSRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19QUkVQQVJFX1RSQU5TQUNUSU9OLCAi UFJFUEFSRSBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19SRUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJ RVcsICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19SRUlOREVYLCAiUkVJTkRFWCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAiUkVMRUFTRSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19SRVNFVCwgIlJFU0VUIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFVk9LRSwgIlJFVk9L RSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVWT0tFX1JP TEUsICJSRVZPS0UgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19ST0xMQkFDSywgIlJPTExCQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9MTEJBQ0sgUFJFUEFSRUQi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0FWRVBPSU5U LCAiU0FWRVBPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX1NFQ1VSSVRZX0xBQkVMLCAiU0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVCwgIlNFTEVDVCIsIGZhbHNlLCBmYWxzZSwg dHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZX1NIQVJFLCAiU0VM RUNUIEZPUiBLRVkgU0hBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfU0VMRUNUX0ZPUl9OT19LRVlfVVBEQVRFLCAiU0VMRUNUIEZPUiBOTyBLRVkgVVBE QVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVD VF9GT1JfU0hBUkUsICJTRUxFQ1QgRk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfVVBEQVRFLCAiU0VMRUNUIEZPUiBVUERB VEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNU X0lOVE8sICJTRUxFQ1QgSU5UTyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX1NFVCwgIlNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19TRVRfQ09OU1RSQUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0hPVywgIlNIT1ciLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU1RBUlRfVFJBTlNBQ1RJT04s ICJTVEFSVCBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1VOTElTVEVOLCAiVU5MSVNURU4iLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBE QVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVkFDVVVN LCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaApp bmRleCBkMzQwMDI2NTE4Li45MWQ0YmRkNmIzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9ldnRjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcg KzIyLDggQEAgdHlwZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERMQ29t bWFuZEVuZCwKIAlFVlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3 cml0ZSwKKwlFVlRfVGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVk ZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAppbmRleCA5ZWVh YTFjY2MxLi44ZTZmZmE5ODkzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5v dXQKQEAgLTIwLDYgKzIwLDEzIEBAIE5PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBU QUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UKIEFMVEVSIFRBQkxF IGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOwogTk9USUNFOiAgZGVw YXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3Vi Y21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNl dCBzdG9yYWdlIiwgImNvbHVtbiI6ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVu dGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQogTk9U SUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBD T0xVTU4gYiBTRVQgU1RPUkFHRSBleHRlcm5hbAorQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJ S0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRp dHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMg JXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9j bGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MV9saWtlIiwgInNjaGVtYW5h bWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6 LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0Ijog eyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNl LCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVT UEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVs bH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtk ZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNj ZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQi OiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRh YmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtj b2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7 ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAi ZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogIm1h aW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21l dGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAi Z2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2Vu dCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xz dG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVm YXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVm YXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVy bmFsIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9t ZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwg ImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNl bnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1z IiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlw ZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkg T1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9 SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX2xpa2VfcGtleSIsICJ0eXBlIjogImNv bnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1B UlkgS0VZIChhKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxF ICBwdWJsaWMuY3RsdDFfbGlrZSAoYSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBtYWluICBDT0xM QVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4 dGVybmFsICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQx X2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9n Lj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9saWtlX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAg IAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBp cyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJ R04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKIE5PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10 IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVu dGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9 cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRo X2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFt ZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czos IH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7 ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2Us ICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQ QUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxs fSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJl c2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2Rl ZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nl c3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFi bGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlw ZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNl LCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1 bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIi LCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpu YW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFn ZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9k IjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBB UyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQi LCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChp ZCkifV19CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCmluZGV4IDk5N2QyZjU0ZmIuLjFjNWYw YzIwNmEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCkBAIC05LDYgKzksNyBAQCBDUkVB VEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xV REUgKG5hbWUpOwogQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+ IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOwogQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1O IGEgU0VUIFNUT1JBR0UgTUFJTjsKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNF VCBTVE9SQUdFIEVYVEVSTkFMOworQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEg SU5DTFVESU5HIEFMTCk7CiAKIC0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5k bGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZ IFJFRkVSRU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklN QVJZIEtFWSwgbmFtZSB0ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IDhm YzYyY2ViZDIuLmViYmRmYTkwMjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAt NjE5NCw5ICs2MTk0LDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5z dWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlv bnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0rLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2VhMDcuLmUwNjRl OTM2ZTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0z MCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwog TElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1 ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5z X3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1l ICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYK KyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgZiAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgog KDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlz aCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAg TmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3Rw aWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAg ICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBE REwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAg IHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBS RVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVt YSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9y dGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGlj YXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQg c2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1 Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qi CiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNj aGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJM RSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJw dWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtMTM1LDEwICsx MzUsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBh IHRhYmxlIG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUgcHViX3Rlc3QudGVzdHB1 Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCAr MTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9w IHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJM RSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYx LDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhl IHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1 YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUg cHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogCkBAIC0xODYsMTAgKzE4Niwx MCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERM IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAg ICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRl c3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVp bmcgaW4gcHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHVi X2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQi CiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFD SCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVk Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgdAogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCAr Mjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3Ri bDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQn KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJs MiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMw MCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0 ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0 cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkp CkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwogXGRScCsgdGVzdHB1YjUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICsz MzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3Rw dWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBB TkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3Rw dWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAg KzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkg dGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcp OwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IGYgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50 ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4Mgot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3Jm X3NjaGVtYTEudGVzdHB1Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCArNDk3 LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVNQSB0 ZXN0cHViX3JmX3NjaGVtYTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEVT IElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1hMi50 ZXN0cHViX3JmX3RibDYgV0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERM IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0 cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0 LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEgg KHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHVi X3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBA QCBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMg aW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2Zp bHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnNfcGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0 ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTks MTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5 IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRi bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRi bAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAg ICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJs MSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdy ZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1 Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVs dAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRp b24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBtdXN0IGJlIG93bmVyIG9mIHB1Ymxp Y2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287CiBcZFJwIHRlc3RwdWJfZm9vCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0 cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1l ICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHVi X2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJl bmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRl c3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNj aGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNV UlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI2X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBD VVIKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVO VF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwog XGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHVi NV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVO VF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJw dWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi Q1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAg RVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5n IHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJP UCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVuYW1pbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBBTFRF UiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxkUnArIHRl c3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rl c3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0 cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRB QkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25f ZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAi cHViX3Rlc3QyIgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1B IHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVy IG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgog ICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVzdDIi IGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgRERMIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTE0NDksMjkgKzE0NDksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50 X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBl eGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBh bHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVz dDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgw LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9S OiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1 Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERETCB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4 IEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsg dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBEREwgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjNfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxk UnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBG T1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2No ZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IERE TCB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJs ZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgRERMIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0Mi50 YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjY2ZGNiMDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lv biB0ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJs aXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93 c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitt eSAkZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUg dmFyY2hhciwgdmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJf Y29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUsIGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9j b25uc3RyJyBQVUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6 ZWQgdGhlIHRhYmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cg ZnJvbSBiZWluZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVf c3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VO VCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUg Tk9UIElOICgncycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIK Kyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZB TFVFUyAoMiwgJ2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7 Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBp ZCA9IDI7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVz dF9yZXAgRFJPUCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMn LCAnMycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhh dmUgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJl ciBub2RlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRB QkxFIHRlc3RfcmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQs ICdkYXRhNCcpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMo JHJlc3VsdCwgJ2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNh dGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sg aWYgd2UgZG9uJ3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9y ZXAgQUxURVIgQ09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCB2YWx1ZSBJUyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3Vs dCwgcSh0KSwgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBl eGlzdGluZyByZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRv dXQsICRzdGRlcnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE RUxFVEUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VU IE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9y ZXAgVkFMVUVTICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJl bGF0aW9uIFwidGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBk aWUgImZhaWxlZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1 ZSBEUk9QIE5PVCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworIyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFp bGVkIGJlZm9yZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRh NicpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7Citp cygkcmVzdWx0LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBs aWNhdGVkIik7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5M T0dHRUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9y ZXAgVkFMVUVTICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3 OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVw bGljYXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dH RUQ7Jyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAg VkFMVUVTICg4LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIp OworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0 ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2 YXJjaGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwg J2EnKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCB2YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIp LCAnRE1MIENoYW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUg VEFCTEUgSU5IRVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwg J2EnLCAxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7Citp cygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgY291bnQoKikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcg c29tZSBkYXRhIHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwg J2EnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8g YSB0YWJsZSBkZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9Q IFRBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXA7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7Citpcygk cmVzdWx0LCBxcSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUg VU5MT0dHRUQgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVU5MT0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8g dW5sb2dnZWQgdGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBW QUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOwor aXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVk Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGlu ZyBkYXRhIHRvIGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUg SUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVu IHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3 ZSBzdWNjZWVkCisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7 CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0 byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNo ZXIsIGJ1dCBub3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVt bnMgV0hFUkUgdGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVB VEUgVEFCTEUgd2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggbmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBi aWdnZXIgdGhhbiAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9w ID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwk c3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIg dmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRh YmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29u c3RyYWludHMuCisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1Qg TlVMTCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVz IG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24g bnVsbCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFp bnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00g dG1wOyIpOworaXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0 cmFpbnQgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJv ZHVjdF9hbWUgdGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3 IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3By aWNlX2NoZWNrIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFp bnQiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgbmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUg VEFCTEUgd2l0aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25z dHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2 aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklN QVJZIEtFWQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgxLCAnYmFyJyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRl cnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+ IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQg InRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURF IFVTSU5HIGdpc3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpj aXJjbGUpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBW QUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9 PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0 ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRl cyBleGNsdXNpb24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxl ZCB0byByZXBsaWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVG RVJFTkNFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lk IGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkp Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgx LCAxMCkiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtl eSBjb25zdHJhaW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisK KyMgREVGRVJSQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRl ZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0 aGF0IHNob3VsZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5v ZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitE RUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9 PiAwLCBzdGRlcnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+ IC9FUlJPUjogIGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQg InRtcF9wa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkg S0VZIE5PVCBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1w IFNFVCBpZCA9IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3Ry YWludCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVS UkFCTEUgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxM WSBERUZFUlJFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZF UlJFRCwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2Jh cicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBR dWljayBjaGVjayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywg ZXhlY3V0ZSBhIHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVE Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQ REFURSB0bXAgU0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zv b2JhcicpOworREVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNl dCB0d28gY2hlY2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVz cGVjdGl2ZWx5LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JF QVRFIFRBQkxFIHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRp c2NvdW50ZWRfcHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyBy b3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJz dCBjb25kaXRpb24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciBy ZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBv ciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEgg c3Ryb3JhZ2VfcGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBW QUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMg RlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jf c3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9 PiBcJHN0ZG91dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVy IHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVh dGluZyBhIHRhYmxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVj dG9yaWVzIGZvciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNl ZGlyLCAkdGFibGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFz ZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0 YWJsZXNwYWNlX2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7 CiskYmFzZWRpciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIg PSAiJGJhc2VkaXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0 YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BB Q0UgbXl0YmxzcGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0 IENSRUFURSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRZUEUgbXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQ RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15 ZW51bXR5cGUgQVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUg VEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBU WVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUg ZmxvYXQ4X3JhbmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBm bG9hdDhtaSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAodmFsIGZsb2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiaW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4x MTExMTNlMycpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVB VEUgQkFTRSBEQVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NS RUFURSBGVU5DVElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMg J2ludDRpbicKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUg RlVOQ1RJT04gaW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50 NG91dCcKKyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQ RSBpbnQ0MiAoCisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAor ICAgb3V0cHV0ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQg PSA0MiwKKyAgIHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7 CitJTlNFUlQgSU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoNDIpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bh c3MgIkRETCByZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+ c3RvcDsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDVjZDhhZjllNjYuLjFkZjY2NjUzZjcgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC01NTksNiArNTU5LDcgQEAgRGVmRWxlbUFjdGlvbgogRGVmYXVs dEFDTEluZm8KIERlZmluZVN0bXQKIERlbGV0ZVN0bXQKK0RlcGFyc2VkQ29tbWFuZFR5cGUKIERl cGVuZGVuY3lHZW5lcmF0b3IKIERlcGVuZGVuY3lHZW5lcmF0b3JEYXRhCiBEZXBlbmRlbmN5VHlw ZQpAQCAtMTQzOSw2ICsxNDQwLDggQEAgTG9naWNhbERlY29kZUJlZ2luUHJlcGFyZUNCCiBMb2dp Y2FsRGVjb2RlQ2hhbmdlQ0IKIExvZ2ljYWxEZWNvZGVDb21taXRDQgogTG9naWNhbERlY29kZUNv bW1pdFByZXBhcmVkQ0IKK0xvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IKK0xvZ2ljYWxEZWNvZGVT dHJlYW1ERExNZXNzYWdlQ0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCCiBMb2dpY2Fs RGVjb2RlRmlsdGVyUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlTWVzc2FnZUNCCkBAIC0yMjg3LDYg KzIyOTAsOCBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQog UmVvcmRlckJ1ZmZlckNvbW1pdENCCiBSZW9yZGVyQnVmZmVyQ29tbWl0UHJlcGFyZWRDQgorUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQgorUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQgog UmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKIFJlb3JkZXJCdWZmZXJJdGVyVFhORW50cnkKIFJlb3Jk ZXJCdWZmZXJJdGVyVFhOU3RhdGUKLS0gCjIuMzguMQoK --000000000000061afb05f176f684 Content-Type: application/octet-stream; name="v59-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v59-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lci6gypq0 RnJvbSAwNGFjNmY1MGY2ZmQyMDhjNDg0ZmEyZDNjMjM3NDQ0ODliYjBhZWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjAgRGVjIDIwMjIgMTc6NDU6MDcgKzA1MzAKU3ViamVjdDogW1BBVENIIDEvNV0gSW5m cmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFzdHJ1Y3R1cmUgdG8g c3VwcG9ydCBEREwgZGVwYXJzaW5nLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMg ICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21k cy5jICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIu YyAgICAgICAgIHwgIDQwICstLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYyAgICAg ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAgICAg ICAgICAgfCAgMzMgKysrCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAg ICAgICB8ICA5MSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyAg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgICAg ICAgICAgfCAgNTMgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAg ICAgICAgfCAyNTggKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29s bGF0aW9uY21kcy5oICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVu Y2UuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgg ICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgICAgICAg ICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggICAgICAgICAgICAg ICAgfCAgMTkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0 IHwgICAyICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgMTE5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCmluZGV4IGNjNmUyNjA5MDguLmJlZGM0NTdiOTYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9hY2xjaGsuYwpAQCAtMTI5LDcgKzEyOSw2IEBAIHN0YXRpYyB2b2lkIGV4cGFuZF9h bGxfY29sX3ByaXZpbGVnZXMoT2lkIHRhYmxlX29pZCwgRm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm0s CiAJCQkJCQkJCQkgIEFjbE1vZGUgKmNvbF9wcml2aWxlZ2VzLAogCQkJCQkJCQkJICBpbnQgbnVt X2NvbF9wcml2aWxlZ2VzKTsKIHN0YXRpYyBBY2xNb2RlIHN0cmluZ190b19wcml2aWxlZ2UoY29u c3QgY2hhciAqcHJpdm5hbWUpOwotc3RhdGljIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpOwogc3RhdGljIEFjbE1vZGUgcmVzdHJpY3RfYW5kX2NoZWNr X2dyYW50KGJvb2wgaXNfZ3JhbnQsIEFjbE1vZGUgYXZhaWxfZ29wdGlvbnMsCiAJCQkJCQkJCQkJ Ym9vbCBhbGxfcHJpdnMsIEFjbE1vZGUgcHJpdmlsZWdlcywKIAkJCQkJCQkJCQlPaWQgb2JqZWN0 SWQsIE9pZCBncmFudG9ySWQsCkBAIC0zODUsMTEgKzM4NCwxMCBAQCBFeGVjdXRlR3JhbnRTdG10 KEdyYW50U3RtdCAqc3RtdCkKIAlMaXN0Q2VsbCAgICpjZWxsOwogCWNvbnN0IGNoYXIgKmVycm9y bXNnOwogCUFjbE1vZGUJCWFsbF9wcml2aWxlZ2VzOworCU9pZAkJCWdyYW50b3IgPSBJbnZhbGlk T2lkOwogCiAJaWYgKHN0bXQtPmdyYW50b3IpCiAJewotCQlPaWQJCQlncmFudG9yOwotCiAJCWdy YW50b3IgPSBnZXRfcm9sZXNwZWNfb2lkKHN0bXQtPmdyYW50b3IsIGZhbHNlKTsKIAogCQkvKgpA QCAtNDA4LDYgKzQwNiw5IEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCWlz dG10LmlzX2dyYW50ID0gc3RtdC0+aXNfZ3JhbnQ7CiAJaXN0bXQub2JqdHlwZSA9IHN0bXQtPm9i anR5cGU7CiAKKwkvKiBDb3B5IHRoZSBncmFudG9yIGlkIG5lZWRlZCBmb3IgRERMIGRlcGFyc2lu ZyBvZiBHcmFudCAqLworCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsKKwogCS8qIENvbGxl Y3QgdGhlIE9JRHMgb2YgdGhlIHRhcmdldCBvYmplY3RzICovCiAJc3dpdGNoIChzdG10LT50YXJn dHlwZSkKIAl7CkBAIC0yNjI4LDcgKzI2MjksNyBAQCBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0 IGNoYXIgKnByaXZuYW1lKQogCXJldHVybiAwOwkJCQkJLyogYXBwZWFzZSBjb21waWxlciAqLwog fQogCi1zdGF0aWMgY29uc3QgY2hhciAqCitjb25zdCBjaGFyICoKIHByaXZpbGVnZV90b19zdHJp bmcoQWNsTW9kZSBwcml2aWxlZ2UpCiB7CiAJc3dpdGNoIChwcml2aWxlZ2UpCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IDEzNjdiNWU3YzUuLjYzMzM1N2MxNmQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC01OTE0LDcgKzU5MTQsNyBAQCBnZXRPYmplY3RJ ZGVudGl0eVBhcnRzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQl0cmFuc2Zvcm1U eXBlID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRyYW5zZm9ybS0+dHJmdHlwZSk7CiAJCQkJ dHJhbnNmb3JtTGFuZyA9IGdldF9sYW5ndWFnZV9uYW1lKHRyYW5zZm9ybS0+dHJmbGFuZywgZmFs c2UpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAiZm9yICVzIG9uIGxhbmd1YWdl ICVzIiwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJmb3IgJXMgbGFuZ3VhZ2UgJXMi LAogCQkJCQkJCQkgdHJhbnNmb3JtVHlwZSwKIAkJCQkJCQkJIHRyYW5zZm9ybUxhbmcpOwogCQkJ CWlmIChvYmpuYW1lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IDZhNDMx MWNjNjMuLmFiMmFmMmQyNzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxh dGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAg LTUyLDcgKzUyLDggQEAgdHlwZWRlZiBzdHJ1Y3QKICAqIENSRUFURSBDT0xMQVRJT04KICAqLwog T2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAq bmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cykKK0RlZmluZUNvbGxh dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAor CQkJCSBib29sIGlmX25vdF9leGlzdHMsIE9iamVjdEFkZHJlc3MgKmZyb21fZXhpc3RpbmdfY29s bGlkKQogewogCWNoYXIJICAgKmNvbGxOYW1lOwogCU9pZAkJCWNvbGxOYW1lc3BhY2U7CkBAIC0x MzksNiArMTQwLDEzIEBAIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9lCiAJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29s bGF0aW9uICV1IiwgY29sbGlkKTsKIAorCQkvKgorCQkgKiBNYWtlIGZyb20gZXhpc3RpbmcgY29s bGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudCBzdWNoIGFzCisJCSAq IENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkgKi8KKwkJaWYgKGZy b21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkKKwkJCU9iamVjdEFkZHJl c3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxhdGlvbklkLCBjb2xsaWQp OworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkp LT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWluaXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0 aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJtaW5pc3RpYzsKIAkJY29sbGVuY29kaW5n ID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxlbmNvZGluZzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBkNGIwMGQxYTgyLi42OTAyNzA5OTU2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC00OCw0NSArNDgsNyBAQAog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKLXR5 cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUKLXsKLQkvKiBtZW1vcnkgY29udGV4 dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlNZW1vcnlDb250ZXh0IGN4dDsKLQotCS8q IHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9wTGlzdDsKLQlib29sCQlpbl9zcWxfZHJv cDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyog SW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdyaXRlCi0JCQkJCQkJCQkgKiBldmVudCAq LwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLwot Ci0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0aW9uICovCi0JYm9vbAkJY29tbWFuZENv bGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7Ci0J TGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCi0J CQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0Jc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJRdWVyeVN0YXRlOwotCi1zdGF0aWMgRXZl bnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0gTlVMTDsKLQot LyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBTUUxEcm9w T2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwotCWNvbnN0IGNoYXIgKnNjaGVtYW5h bWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25zdCBjaGFyICpvYmppZGVudGl0eTsKLQlj b25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAgKmFkZHJuYW1lczsKLQlMaXN0CSAgICph ZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29sCQlub3JtYWw7Ci0JYm9vbAkJaXN0ZW1w OwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9iamVjdDsKK0V2ZW50VHJpZ2dlclF1ZXJ5 U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIEFs dGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQlI ZWFwVHVwbGUgdHVwLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXggN2ZmMTZlMzI3Ni4uMWU4 MzFmZjcyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xMzQsNiArMTM0LDkgQEAgRXhl Y1NlY0xhYmVsU3RtdChTZWNMYWJlbFN0bXQgKnN0bXQpCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkgZXJybXNnKCJtdXN0IHNwZWNpZnkgcHJv dmlkZXIgd2hlbiBtdWx0aXBsZSBzZWN1cml0eSBsYWJlbCBwcm92aWRlcnMgaGF2ZSBiZWVuIGxv YWRlZCIpKSk7CiAJCXByb3ZpZGVyID0gKExhYmVsUHJvdmlkZXIgKikgbGluaXRpYWwobGFiZWxf cHJvdmlkZXJfbGlzdCk7CisKKwkJLyogQ29weSB0aGUgcHJvdmlkZXIgbmFtZSB0byB0aGUgcGFy c2V0cmVlLCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2YgU2VjTGFiZWxTdG10ICovCisJCXN0 bXQtPnByb3ZpZGVyID0gcHN0cmR1cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSk7CiAJfQogCWVs c2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBiZmUyNzljZGRmLi4zMDQ5ZTBlOTAy IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCwzOSBAQCBwcm9jZXNz X293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50 aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJl dHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitGb3JtX3BnX3NlcXVlbmNl X2RhdGEKK2dldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpCit7CisJQnVmZmVyICAg ICAgYnVmOworCVNlcVRhYmxlICAgIGVsbTsKKwlSZWxhdGlvbiAgICBzZXFyZWw7CisJSGVhcFR1 cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxOworCUZvcm1fcGdf c2VxdWVuY2VfZGF0YSByZXRTZXE7CisKKwkvKiBPcGVuIGFuZCBBY2Nlc3NTaGFyZUxvY2sgc2Vx dWVuY2UgKi8KKwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJ aWYgKHBnX2NsYXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQkJQUNMX1NF TEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfVVNBR0UpICE9IEFDTENIRUNLX09LKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAor CQkJCQkgZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90 dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisJcmV0U2VxID0gcGFsbG9jKHNpemVvZihG b3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwltZW1jcHkocmV0U2VxLCBzZXEsIHNpemVv ZihGb3JtRGF0YV9wZ19zZXF1ZW5jZV9kYXRhKSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 Zik7CisJcmVsYXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHJldFNlcTsK K30KIAogLyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUg Zm9ybSBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGM3ZDlkOTZiNDUu LjFlODNjZmUzOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBi L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNDQ2LDcgKzE0NDYsOCBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCWFkZHJlc3MgPSBEZWZpbmVD b2xsYXRpb24ocHN0YXRlLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmbmFtZXMsCiAJCQkJCQkJ CQkJCQkJICBzdG10LT5kZWZpbml0aW9uLAotCQkJCQkJCQkJCQkJCSAgc3RtdC0+aWZfbm90X2V4 aXN0cyk7CisJCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzLAorCQkJCQkJCQkJCQkJ CSAgJnNlY29uZGFyeU9iamVjdCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQlkZWZhdWx0OgogCQkJ CQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZGVmaW5lIHN0bXQgdHlwZTogJWQiLApAQCAt MjE5Niw2ICsyMTk3LDk0IEBAIFV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSkK IAl9CiB9CiAKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5n LgorICovCitjb25zdCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlw ZSwgYm9vbCBpc2dyYW50KQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNU X0FHR1JFR0FURToKKwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoK KwkJCXJldHVybiAiQ0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiAi Q09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAi VEFCTEUiIDogIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4g IkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJB U0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2Ug T0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNl IE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4gIkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNU X0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRBIFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiBpc2dyYW50ID8gIkZPUkVJR04gU0VSVkVSIiA6ICJT RVJWRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdO IFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsK KwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1Rf TEFOR1VBR0U6CisJCQlyZXR1cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpF Q1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJ CQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJ CXJldHVybiAiT1BFUkFUT1IgQ0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJl dHVybiAiT1BFUkFUT1IiOworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BF UkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1ki OworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlyZXR1cm4gIlBST0NFRFVSRSI7CisJCWNh c2UgT0JKRUNUX1JPTEU6CisJCQlyZXR1cm4gIlJPTEUiOworCQljYXNlIE9CSkVDVF9ST1VUSU5F OgorCQkJcmV0dXJuICJST1VUSU5FIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAi UlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1Rf U1RBVElTVElDX0VYVDoKKwkJCXJldHVybiAiU1RBVElTVElDUyI7CisJCWNhc2UgT0JKRUNUX1RB QkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQly ZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJcmV0dXJuICJU UklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJ cmV0dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6 CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExB VEU6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQ RToKKwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJl dHVybiAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklF VyI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUg JWQiLCBvYmp0eXBlKTsKKwl9Cit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVDb21tYW5kVGFn CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDEyNDAyYTA2MzcuLjdiNDc2YWRi MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw4ICsyNyw2IEBACiAj aW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAK LXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBt b2QsIE9pZCB0eXBtb2RvdXQpOwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rpb246IGZvcm1hdF90eXBl KHR5cGVfb2lkLCB0eXBlbW9kKQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZvcm1hdF90eXBlX3dpdGhf dHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBk ZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hh ciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0 eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXgg Mjk2OTMwZWIzYi4uMTI4YzE3OTVhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00OSw2 ICs0OSw4IEBAIHN0YXRpYyBib29sIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0IGNoYXIgKnN0 cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGludCAqbmFyZ3Ms IE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCitzdGF0aWMgdm9p ZCBmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9jIHByb2Nmb3JtLAor CQkJCQkJCQkJCSAgIFN0cmluZ0luZm8gYnVmLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoK QEAgLTMwNyw2ICszMDksMjkgQEAgZm9ybWF0X3Byb2NlZHVyZV9xdWFsaWZpZWQoT2lkIHByb2Nl ZHVyZV9vaWQpCiAJcmV0dXJuIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQocHJvY2VkdXJlX29p ZCwgRk9STUFUX1BST0NfRk9SQ0VfUVVBTElGWSk7CiB9CiAKKy8qCisgKiBmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MgICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxp ZnkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZSAgIHByb2N0dXA7CisJRm9y bV9wZ19wcm9jIHByb2Nmb3JtOworCisJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lE LCBPYmplY3RJZEdldERhdHVtKHByb2NlZHVyZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9j ZWR1cmUgJXUiLCBwcm9jZWR1cmVfb2lkKTsKKwlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jdHVwKTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcm1hdF9wcm9j ZWR1cmVfYXJnc19pbnRlcm5hbChwcm9jZm9ybSwgJmJ1ZiwgZm9yY2VfcXVhbGlmeSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qCiAg KiBmb3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkIC0gY29udmVydHMgcHJvY2VkdXJlIE9JRCB0byAi cHJvX25hbWUoYXJncykiCiAgKgpAQCAtMjAxNiwzICsyMDQxLDMxIEBAIHBhcnNlTmFtZUFuZEFy Z1R5cGVzKGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsIExpc3QgKipuYW1lcywK IAogCXJldHVybiB0cnVlOwogfQorCisvKgorICogQXBwZW5kIHRoZSBwYXJlbnRoZXNpemVkIGFy Z3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJvYyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZm ZXIuIGZvcmNlX3F1YWxpZnkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlw ZSBuYW1lcworICogcmVnYXJkbGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAor Zm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7 CisJY2hhcioJCSgqZnVuY1syXSkoT2lkKSA9IHtmb3JtYXRfdHlwZV9iZSwgZm9ybWF0X3R5cGVf YmVfcXVhbGlmaWVkfTsKKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJygnKTsKKwlmb3Ig KGkgPSAwOyBpIDwgcHJvY2Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJn dHlwZSA9IHByb2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJCWNoYXIJICAgKmFyZ3R5 cGUgPSBOVUxMOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1Ziwg JywnKTsKKworCQlhcmd0eXBlID0gZnVuY1tmb3JjZV9xdWFsaWZ5XSh0aGlzYXJndHlwZSk7CisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcmd0eXBlKTsKKwkJcGZyZWUoYXJndHlwZSk7 CisJfQorCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCA5YWM0MmVmZGJjLi4xZjQxMjA2NjE4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFydGl0aW9uZWRfdGFibGUuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19leHQuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKQEAgLTM1OCw3ICsz NTksNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3VtZW50cyhTdHJpbmdJbmZvIGJ1 ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBwcmludF90YWJsZV9hcmdzLCBi b29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3JldHR5cGUo U3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHByaW50X2Z1 bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7Ci1zdGF0 aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUg cHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNl ICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJCQkgQml0bWFwc2V0ICpyZWxz X3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KGRlcGFyc2VfbmFtZXNw YWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIgKzQ4MiwxNSBAQCBzdGF0aWMgdm9p ZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJ CQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3Rh Ymxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9p ZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7 CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5n UmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0 X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9yZWxhdGlv bl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBzdGF0aWMgY2hhciAqZ2VuZXJh dGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKLXN0YXRpYyBjaGFyICpnZW5l cmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywKLQkJCQkJCQkJCUxpc3Qg KmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9vbCBoYXNfdmFyaWFkaWMsIGJv b2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJr aW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9uYW1lKE9pZCBvcGVyaWQsIE9p ZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2FzdF90byhTdHJpbmdJbmZvIGJ1 ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1l KE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3RleHQoY2hhciAqc3RyKTsKLXN0 YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIHN0YXRpYyB2b2lkIGdl dF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKTsKIAogI2RlZmlu ZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDogIk9OTFkgIikKQEAgLTU0NSw2 ICs1MzgsMTA0IEBAIHBnX2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBh aXIgb2YgRGF0dW0gY29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRlLmV2X3F1YWwg YW5kCisgKiBldl9hY3Rpb24gY29sdW1ucywgcmV0dXJuIHRoZWlyIHRleHQgcmVwcmVzZW50YXRp b247IGV2X3F1YWwgYXMgYSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3aGVyZUNsYXVzZSBhbmQgZXZf YWN0aW9uIGFzIGEgTGlzdCBvZiBzdHJpbmdzICh3aGljaCBtaWdodCBiZQorICogTklMLCBzaWdu YWxsaW5nIE5PVEhJTkcpIGluIGFjdGlvbnMuCisgKi8KK3ZvaWQKK3BnX2dldF9ydWxlZGVmX2Rl dGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCWNoYXIgKip3aGVy ZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpCit7CisJaW50CQkJcHJldHR5RmxhZ3MgPSAwOworCWNo YXIJICAgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIJICAg KmFjdGlvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0CSAgICph Y3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisJKmFjdGlvbnMgPSBOSUw7 CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaWYgKHN0cmxlbihxdWFsc3RyKSA+IDAgJiYgc3Ry Y21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlOb2RlCSAgICpxdWFsOworCQlRdWVyeQkg ICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCQlkZXBhcnNlX25hbWVzcGFj ZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdUb05vZGUocXVhbHN0cik7CisKKwkJcXVlcnkgPSAo UXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOworCQlxdWVyeSA9IGdldEluc2VydFNl bGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKworCQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBm YWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQuYnVmID0gJmJ1ZjsKKwkJY29udGV4dC5uYW1lc3Bh Y2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwor CQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0 X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKKwkJY29udGV4dC5wcmV0dHlGbGFncyA9IHBy ZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwor CQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKworCQlzZXRfZGVwYXJz ZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJCWdldF9ydWxlX2V4cHIocXVhbCwg JmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hlcmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRhKTsK Kwl9CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3QpID4gMCkKKwl7CisJCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJeworCQkJ UXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKHF1ZXJ5 LT5jb21tYW5kVHlwZSA9PSBDTURfTk9USElORykKKwkJCQljb250aW51ZTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxM LCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJ CQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFjdGlvbnMsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFRvIGdldCB0aGUgcmV3cml0ZSBydWxlIG9mIGEgdmlldyB3aGVuIHRo ZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4ZWN1dGlvbiBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3M6 IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0 ZQorICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2VkIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB3aGljaCB3aWxsIHJldHVybiBlbXB0 eSByZXN1bHQuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdv aWQpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJSGVh cFR1cGxlCXJ1bGV0dXA7CisJVHVwbGVEZXNjCXJ1bGV0dGM7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJ1bGV0dXAgPSBTZWFyY2hTeXNDYWNoZTIoUlVMRVJFTE5BTUUsCisJ CQkJCQkJICBPYmplY3RJZEdldERhdHVtKHZpZXdvaWQpLAorCQkJCQkJCSAgUG9pbnRlckdldERh dHVtKFZpZXdTZWxlY3RSdWxlTmFtZSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChydWxldHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSBm b3IgdmlldyB3aXRoIE9JRCAldSIsIHZpZXdvaWQpOworCisJcnVsZXR0YyA9IHBnX3Jld3JpdGUt PnJkX2F0dDsKKwltYWtlX3ZpZXdkZWYoJmJ1ZiwgcnVsZXR1cCwgcnVsZXR0YywgMCwgV1JBUF9D T0xVTU5fREVGQVVMVCk7CisJUmVsZWFzZVN5c0NhY2hlKHJ1bGV0dXApOworCXRhYmxlX2Nsb3Nl KHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CiAK IHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHBy ZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTEwNiwxMiBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3Jr ZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewogCQlOb2RlCSAg ICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJ ZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOwotCQlSYW5n ZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiV0hF TiAoIik7CisJCWNoYXIJICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmluZ1RvTm9kZShUZXh0 RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRfdHJpZ2dlcl93aGVu Y2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9IGdldF9yZWxfcmVs a2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVX IFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRlLT5yZWxpZCA9IHRy aWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+ cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxp YXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0 ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwotCQlvbGRydGUtPmlu RnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJ bmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJlbGlkID0gdHJpZ3Jl Yy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJbmV3cnRlLT5yZWxs b2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygi bmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKLQkJbmV3cnRlLT5s YXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5Gcm9t Q2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLwotCQltZW1zZXQo JmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRy dGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMuY3RlcyA9IE5JTDsK LQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklM LCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwotCi0JCS8qIFNldCB1 cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0JCWNvbnRleHQuYnVm ID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNv bnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOwot CQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRf UFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1O X0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOwotCQlj b250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJY29udGV4dC5hcHBl bmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxz ZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAogCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQsNiArMTE1Miw2OSBA QCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJcmV0 dXJuIGJ1Zi5kYXRhOwogfQogCisvKgorICogUGFyc2UgYmFjayB0aGUgVHJpZ2dlcldoZW4gY2xh dXNlIG9mIGEgdHJpZ2dlciBnaXZlbiB0aGUgcGdfdHJpZ2dlciByZWNvcmQgYW5kCisgKiB0aGUg ZXhwcmVzc2lvbiB0cmVlIChpbiBub2RlVG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbikgZnJvbSBw Z190cmlnZ2VyLnRncXVhbAorICogZm9yIHRoZSB0cmlnZ2VyJ3MgV0hFTiBjb25kaXRpb24uCisg Ki8KK2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJp Z3JlYywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7CisJU3RyaW5nSW5mb0RhdGEg YnVmOworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJz ZV9uYW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRy eSAqbmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlyZWxraW5kID0gZ2V0X3Jl bF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5k IE5FVyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRy eSk7CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworCW9sZHJ0ZS0+cmVsaWQgPSB0 cmlncmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisJb2xkcnRlLT5h bGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFs aWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9sZHJ0ZS0+aW5oID0gZmFsc2U7CisJ b2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRibEVu dHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisJbmV3cnRlLT5yZWxpZCA9 IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwluZXdydGUt PmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+ YWxpYXM7CisJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisJbmV3cnRlLT5pbmggPSBmYWxzZTsK KwluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJs ZSAqLworCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKKwlkcG5zLnJ0YWJsZSA9IGxp c3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOworCWRwbnMuY3RlcyA9IE5JTDsKKwlzZXRfcnRhYmxl X25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOworCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5z KTsKKworCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICov CisJY29udGV4dC5idWYgPSAmYnVmOworCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEo JmRwbnMpOworCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworCWNvbnRleHQud2luZG93VExp c3QgPSBOSUw7CisJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOworCWNvbnRleHQucHJldHR5Rmxh Z3MgPSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVU VFlGTEFHX0lOREVOVDsKKwljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxU OworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCWNvbnRleHQuc3Bl Y2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisJZ2V0X3J1bGVfZXhwcih3aGVuQ2xh dXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0t LS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJCQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBp bmRleAogICoKQEAgLTE4ODAsNiArMTk4MSwxMyBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5z KE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtl cihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUsIGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVy c2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitj aGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBn X2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoK ICAqIEludGVybmFsIHdvcmtob3JzZSB0byBkZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmlu aXRpb24uCiAgKi8KQEAgLTIxMzEsNiArMjIzOSwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9l eHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJl cykpOwogfQogCisvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgdGhlIGRlZmlu aXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19n ZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOwor fQorCiAvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRB QkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzYxOCwxMiBA QCBwZ19nZXRfZnVuY3Rpb25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAorLyoKKyAq IFByb2R1Y2UgdGhlIGZvcm1hdHRlZCBTUUwgYm9keSAobm90IHRoZSB3aG9sZSBmdW5jdGlvbiBk ZWZpbml0aW9uKQorICogb2YgYSBmdW5jdGlvbiBnaXZlbiB0aGUgcGdfcHJvYyB0dXBsZS4gU2F2 ZSB0aGUgZm9ybWF0dGVkIFNRTCBpbiB0aGUKKyAqIGdpdmVuIFN0cmluZ0luZm8uCisgKi8KK3Zv aWQKIHByaW50X2Z1bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9j dHVwKQogewogCWludAkJCW51bWFyZ3M7CkBAIC0xMTM1Nyw3ICsxMTQ3OSw3IEBAIGdldF90YWJs ZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLCBkZXBhcnNlX2NvbnRl eHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91IGRvbid0IHdhbnQgdGhp cyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBhY3R1YWxfZGF0YXR5cGUu KQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywg T2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYpCiB7CkBAIC0xMTc1MSw3 ICsxMTg3Myw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCkK ICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3NhcnkgcXVvdGluZyBhbmQgc2No ZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBnZW5lcmF0ZV9mdW5j dGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJn dHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwK IAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpAQCAtMTIxMzcsNyArMTIy NTksNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucykK IC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0aW9uJ3MgcmVs b3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGZs YXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0ID0gTlVMTDsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAppbmRleCBiNzZjN2IzZGMzLi41M2M0YTFh OGMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNlX25vZGUuaCIKIAotZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90 X2V4aXN0cyk7CitleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9v bCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9p ZCBJc1RoZXJlQ29sbGF0aW9uSW5OYW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBu c3BPaWQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRp b25TdG10ICpzdG10KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDVl ZDZlY2U1NTUuLjQ4YzY1ZWY1M2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V2ZW50 X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJz ZW5vZGVzLmgiCiAjaW5jbHVkZSAidGNvcC9jbWR0YWcuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFy c2VfdXRpbGl0eS5oIgpAQCAtMjksNiArMzAsNDQgQEAgdHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmln Z2VyRGF0YQogCUNvbW1hbmRUYWcJdGFnOwogfSBFdmVudFRyaWdnZXJEYXRhOwogCit0eXBlZGVm IHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCit7CisJLyogbWVtb3J5IGNvbnRleHQgZm9y IHRoaXMgc3RhdGUncyBvYmplY3RzICovCisJTWVtb3J5Q29udGV4dCBjeHQ7CisKKwkvKiBzcWxf ZHJvcCAqLworCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7CisJYm9vbAkJaW5fc3FsX2Ryb3A7CisK KwkvKiB0YWJsZV9yZXdyaXRlICovCisJT2lkCQkJdGFibGVfcmV3cml0ZV9vaWQ7CS8qIEludmFs aWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQorCQkJCQkJCQkJICogZXZlbnQgKi8KKwlp bnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSByZWFzb24gKi8KKworCS8q IFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLworCWJvb2wJCWNvbW1hbmRDb2xsZWN0 aW9uSW5oaWJpdGVkOworCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRDb21tYW5kOworCUxpc3QJ ICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1hbmQ7IHNlZQorCQkJCQkJ CQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLworCXN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRl ICpwcmV2aW91czsKK30gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKKworLyogU3VwcG9ydCBmb3Ig ZHJvcHBlZCBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdCBTUUxEcm9wT2JqZWN0Cit7CisJT2Jq ZWN0QWRkcmVzcyBhZGRyZXNzOworCWNvbnN0IGNoYXIgKnNjaGVtYW5hbWU7CisJY29uc3QgY2hh ciAqb2JqbmFtZTsKKwljb25zdCBjaGFyICpvYmppZGVudGl0eTsKKwljb25zdCBjaGFyICpvYmpl Y3R0eXBlOworCUxpc3QJICAgKmFkZHJuYW1lczsKKwlMaXN0CSAgICphZGRyYXJnczsKKwlib29s CQlvcmlnaW5hbDsKKwlib29sCQlub3JtYWw7CisJYm9vbAkJaXN0ZW1wOworCXNsaXN0X25vZGUJ bmV4dDsKK30gU1FMRHJvcE9iamVjdDsKKwogI2RlZmluZSBBVF9SRVdSSVRFX0FMVEVSX1BFUlNJ U1RFTkNFCTB4MDEKICNkZWZpbmUgQVRfUkVXUklURV9ERUZBVUxUX1ZBTAkJCTB4MDIKICNkZWZp bmUgQVRfUkVXUklURV9DT0xVTU5fUkVXUklURQkJMHgwNApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgK aW5kZXggN2RiN2IzZGE3Yi4uMzA5ZGEwY2UzOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBA IC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBu ZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9vbCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRl cm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9BUkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5j ZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9z ZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBE ZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnNlcSk7CiBl eHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5o IGIvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKaW5kZXggNTllNjRhZWEwNy4uYTY4Y2UzZDMz NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1 ZGUvdGNvcC91dGlsaXR5LmgKQEAgLTk5LDYgKzk5LDggQEAgZXh0ZXJuIFF1ZXJ5ICpVdGlsaXR5 Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRyZWUpOwogCiBleHRlcm4gQ29tbWFuZFRhZyBDcmVh dGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSk7CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdHJp bmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCk7CisKIHN0YXRp YyBpbmxpbmUgY29uc3QgY2hhciAqCiBDcmVhdGVDb21tYW5kTmFtZShOb2RlICpwYXJzZXRyZWUp CiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2wuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2FjbC5oCmluZGV4IGY4ZTEyMzhmYTIuLmYwNTU3OGQzMjIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL2FjbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oCkBAIC0yMDks NiArMjA5LDggQEAgZXh0ZXJuIEFjbE1vZGUgYWNsbWFzayhjb25zdCBBY2wgKmFjbCwgT2lkIHJv bGVpZCwgT2lkIG93bmVySWQsCiAJCQkJCSAgIEFjbE1vZGUgbWFzaywgQWNsTWFza0hvdyBob3cp OwogZXh0ZXJuIGludAlhY2xtZW1iZXJzKGNvbnN0IEFjbCAqYWNsLCBPaWQgKipyb2xlaWRzKTsK IAorZXh0ZXJuIGNvbnN0IGNoYXIgKnByaXZpbGVnZV90b19zdHJpbmcoQWNsTW9kZSBwcml2aWxl Z2UpOworCiBleHRlcm4gYm9vbCBoYXNfcHJpdnNfb2Zfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9s ZSk7CiBleHRlcm4gYm9vbCBtZW1iZXJfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xl KTsKIGV4dGVybiB2b2lkIGNoZWNrX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDU1YWY2MjRmYjMuLjk0NjU0NWY1 M2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5 cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwog CURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxH cmFudDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyZjhiNDZkNmRhLi40OGI4YmZkNzlhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKQEAgLTEyMywxMCArMTIzLDEyIEBAIGV4dGVybiBEYXR1bSBudW1l cmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFU X1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAq LwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVu ZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29p ZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJv Y2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1h dF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJu IGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lk IHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9v aWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDFhNDJkOWYzOWIu LmMzM2M4ZDA2NTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw5ICsxMywxMiBAQAogI2lm bmRlZiBSVUxFVVRJTFNfSAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiYWNjZXNz L2h0dXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJub2Rl cy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rl cy9wZ19saXN0LmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAogc3RydWN0IFBs YW47CQkJCQkvKiBhdm9pZCBpbmNsdWRpbmcgcGxhbm5vZGVzLmggaGVyZSAqLwogc3RydWN0IFBs YW5uZWRTdG10OwpAQCAtMjMsMTIgKzI2LDIwIEBAIHN0cnVjdCBQbGFubmVkU3RtdDsKIAogZXh0 ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGluZGV4cmVsaWQpOwogZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0 eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdn ZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5KTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1ZXJ5LCBib29sIHByZXR0eSk7 CitleHRlcm4gY2hhciAqcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwoT2lkIHZpZXdvaWQpOwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJl dHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKTsK IGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklk LCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dl dF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJ CQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAq ZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJ Ym9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFy c2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAs OCArNTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4o TGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIg KmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAor CQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29s ICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2lu ZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRf ZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBh Y3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpm bGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1 bmN0aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b2JqZWN0X2FkZHJlc3Mub3V0CmluZGV4IDI1YzE3NGYyNzUuLmZjNDJkNDE4YmYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0CkBAIC00OTYsNyArNDk2 LDcgQEAgb3BlcmF0b3IgZmFtaWx5fHBnX2NhdGFsb2d8aW50ZWdlcl9vcHN8cGdfY2F0YWxvZy5p bnRlZ2VyX29wcyBVU0lORyBidHJlZXx0CiBwb2xpY3l8TlVMTHxOVUxMfGdlbnBvbCBvbiBhZGRy X25zcC5nZW50YWJsZXx0CiBzdGF0aXN0aWNzIG9iamVjdHxhZGRyX25zcHxnZW50YWJsZV9zdGF0 fGFkZHJfbnNwLmdlbnRhYmxlX3N0YXR8dAogY29sbGF0aW9ufHBnX2NhdGFsb2d8ImRlZmF1bHQi fHBnX2NhdGFsb2cuImRlZmF1bHQifHQKLXRyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIg b24gbGFuZ3VhZ2Ugc3FsfHQKK3RyYW5zZm9ybXxOVUxMfE5VTEx8Zm9yIGludGVnZXIgbGFuZ3Vh Z2Ugc3FsfHQKIHRleHQgc2VhcmNoIGRpY3Rpb25hcnl8YWRkcl9uc3B8YWRkcl90c19kaWN0fGFk ZHJfbnNwLmFkZHJfdHNfZGljdHx0CiB0ZXh0IHNlYXJjaCBwYXJzZXJ8YWRkcl9uc3B8YWRkcl90 c19wcnN8YWRkcl9uc3AuYWRkcl90c19wcnN8dAogdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbnxh ZGRyX25zcHxhZGRyX3RzX2NvbmZ8YWRkcl9uc3AuYWRkcl90c19jb25mfHQKLS0gCjIuMzguMQoK --000000000000061afb05f176f684 Content-Type: application/octet-stream; name="v59-0003-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Disposition: attachment; filename="v59-0003-Introduce-the-test_ddl_deparse_regress-test-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lci6gypv2 RnJvbSAxZjNmZGVlYTNhODUwZDg3ZmU3Y2EyN2I0Mjc3NTc3ZDI2ZjlhNTRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDc6NTc6MjggLTA1MDAKU3ViamVjdDogW1BBVENI IDMvNV0gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1bGUu CgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIg dGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBnZW5l cmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0aGF0 IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3RzLgoz LiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0 IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBvZiBw Z19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBuZXcg RERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5nIGFu ZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAyIGlz IHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04gYmxv YiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBm cmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlzIHRl c3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3NfdGVz dHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBp dCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNl ci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlICAgICAgIHwgICA0 ICsKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSB8ICA0NCAr KysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZCAgICAgICAgfCAgMjIg KysKIC4uLi9leHBlY3RlZC9hZ2dyZWdhdGUub3V0ICAgICAgICAgICAgICAgICAgICB8ICAgOCAr CiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgICAgICAgICAgICAgfCAgIDYgKwog Li4uL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0ICAgICAgICAgICAgICAgIHwgIDIyICsrCiAu Li4vZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgMzYgKysrCiAu Li4vZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgfCAgMTggKysKIC4u Li90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICAgICB8ICA0MiArKysrCiAu Li4vc3FsL2FnZ3JlZ2F0ZS5zcWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogLi4u L3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgIHwgICA1ICsKIC4uLi9z cWwvY3JlYXRlX3NjaGVtYS5zcWwgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4uL3Nx bC9jcmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAuLi4vc3Fs L3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAgICAgfCAgMjAgKysKIC4uLi90LzAw MV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAgICAgICAgICB8IDE4MSArKysrKysrKysrKysr KysKIC4uLi90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsICAgICAgICAgICAgICAgICAgICB8IDIwNyAr KysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwg ICAgICAgICB8ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgICAgICAgICAg ICAgICAgfCAgNTkgKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCAg ICAgICAgICB8ICAgNCArCiAyMCBmaWxlcyBjaGFuZ2VkLCA3MjggaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz Ly5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Fn Z3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVj dGVkL2NyZWF0ZV9zY2hlbWEub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwv YWdncmVnYXRlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVh dGVfc2NoZW1hLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRs X2RlcGFyc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Qv MDAyX3JlZ3Jlc3NfdGVzdHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggYzYyOWNiZTM4My4uYzI3MmM2NGEyMCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9jb3B5 X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkgIHRlc3RfZGRsX2RlcGFy c2UgXAorCQkgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBcCiAJCSAgdGVzdF9leHRlbnNpb25z IFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKIAkJICB0ZXN0X2ludGVnZXJzZXQgXApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGln bm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25v cmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWRjYjNmZjk3MgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz Ly5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVyYXRlZCBzdWJkaXJlY3Rvcmllcwor L2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uNWQ1YTllODY1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDQgQEAK KyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcworIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyMKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUK KyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTU9EVUxFUyA9IHRlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcworUEdGSUxFREVTQyA9ICJ0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNzaW9u IHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmciCisKK0VYVEVOU0lPTiA9IHRlc3RfZGRsX2RlcGFy c2VfcmVncmVzcworREFUQSA9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbAorCisj IHRlc3RfZGRsX2RlcGFyc2UgbXVzdCBiZSBmaXJzdAorUkVHUkVTUyA9IHRlc3RfZGRsX2RlcGFy c2UgXAorCWNyZWF0ZV9leHRlbnNpb24gXAorCWNyZWF0ZV9zY2hlbWEgXAorCWNyZWF0ZV90YWJs ZSBcCisJYWdncmVnYXRlCisKK2V4cG9ydCBSRUdSRVNTCisKK0VYVFJBX0lOU1RBTEwgPSBjb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cworCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitSRUdSRVNTX1NITElCPSQo YWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkKK2V4 cG9ydCBSRUdSRVNTX1NITElCCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uY2MyNTE5ODk1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZApAQCAtMCwwICsxLDIyIEBACisjIFRlc3Rp bmcgaGFybmVzcyBmb3IgRERMIGRlcGFyc2VyCisKKyMjIFRlc3RpbmcgZ29hbHMKKworRERMIERl cGFyc2VyIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGVuY29kZSB0aGUgb3JpZ2luYWwgRERMIGNv bW1hbmQgdG8gYSBKU09OIHN0cmluZywgdGhlbiBkZWNvZGUgaXQgdG8gYSBmdWxseSBzY2hlbWEt cXVhbGlmaWVkIERETCBjb21tYW5kIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNhbWUg ZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kLiBUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMg dG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIgdGVzdGluZyBmb3IgdGhlIERETCBkZXBhcnNl cjoKKworMS4gVGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVz aW5nIFNRTCB0ZXN0cy4KKzIuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5kIGlz IGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzMuIFRlc3QJdGhhdCB0aGUgcmUtZm9ybWVkIERE TCBjb21tYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFsIGNvbW1hbmQKKyAg IGJ5IGNvbXBhcmluZwl0aGUgcmVzdWx0cyBvZiBwZ19kdW1wLAl1c2luZyB0aGUgU1FMIHRlc3Rz IGluIDEgYW5kIDIuCis0LiBUZXN0CXRoYXQgbmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBieSB0 aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVwYXJpbmcKKyAgIERETCBjb21tYW5k cwlyYW4gYnkgcGdfcmVncmVzcy4KKworMSBhbmQgMiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMs IGJ5IG5vdGljaW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5kIHRoZSByZS1mb3JtZWQgY29t bWFuZC4KKworR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgaW4gdC8wMDFfY29t cGFyZV9kdW1wZWRfcmVzdWx0cy5wbAorCitHb2FsIDQgaXMgdGVzdGVkIHdpdGggVEFQIGZyYW1l d29yayBhbmQgcGdfcmVncmVzcyBpbiAwMDJfcmVncmVzc190ZXN0cy5wbAorCisjIyBVc2FnZQor CitSdW4gYG1ha2UgY2hlY2tgLCBpdCB3aWxsIHJ1biB0aGUgU1FMIHRlc3RzIGZpcnN0LCB0aGVu IGl0IHdpbGwgcnVuIHRoZSBUQVAgdGVzdHMuIFRoZSBleGVjdXRpb24gb2YgMDAyX3JlZ3Jlc3Nf dGVzdHMucGwgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCB3aWxsIGZhaWwg ZHVlIHRvIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNlci4KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVk L2FnZ3JlZ2F0ZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLmU5Mzk1ZDA3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0CkBAIC0wLDAgKzEs OCBAQAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMgPSBpbnQ0X2F2 Z19hY2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZnLAorICAgaW5p dGNvbmQxID0gJ3swLDB9JworKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBBR0dSRUdBVEUgJXtpZGVudGl0eX1EICgle3R5cGVzfXMpICgle2VsZW1zOiwgfXMpIiwg ImVsZW1zIjogW3siZm10IjogIlNGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjogeyJv YmpuYW1lIjogImludDRfYXZnX2FjY3VtIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwg eyJmbXQiOiAiU1RZUEU9JXt0eXBlfVQiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IHRydWUsICJ0eXBlbmFtZSI6ICJpbnQ4IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 fSwgeyJmbXQiOiAiU1NQQUNFPSV7c3BhY2V9biIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6 ICJGSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIsICJwcm9jZWR1cmUiOiB7Im9iam5hbWUiOiAiaW50 OF9hdmciLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCB7ImZtdCI6ICJGSU5BTEZVTkNf RVhUUkE9JXt2YWx1ZX1zIiwgInZhbHVlIjogImZhbHNlIn0sIHsiZm10IjogIklOSVRDT05EPSV7 aW5pdHZhbH1MIiwgImluaXR2YWwiOiAiezAsMH0ifSwgeyJmbXQiOiAiTVNGVU5DPSV7cHJvY2Vk dXJlfUQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTVNUWVBFPSV7dHlwZX1UIiwgInBy ZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1TU1BBQ0U9JXtzcGFjZX1uIiwgInByZXNlbnQiOiBm YWxzZX0sIHsiZm10IjogIk1JTlZGVU5DPT0le3R5cGV9VCIsICJwcmVzZW50IjogZmFsc2V9LCB7 ImZtdCI6ICJNRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJm bXQiOiAiTUZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJm bXQiOiAiTUlOSVRDT05EPSV7aW5pdHZhbH1MIiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10Ijog IkhZUE9USEVUSUNBTD0le3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiU09S VE9QPSV7b3BlcmF0b3J9RCIsICJwcmVzZW50IjogZmFsc2V9XSwgInR5cGVzIjogeyJmbXQiOiAi JXtkaXJlY3Q6LCB9cyIsICJkaXJlY3QiOiBbeyJmbXQiOiAiJXttb2RlfXMgJXtuYW1lfXMgJXt0 eXBlfVQiLCAibW9kZSI6ICIiLCAibmFtZSI6ICIiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0 eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX1dfSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm5ld2F2ZyIsICJzY2hlbWFuYW1l IjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBBR0dSRUdB VEUgcHVibGljLm5ld2F2ZyAoICBwZ19jYXRhbG9nLmludDQpIChTRlVOQz1wZ19jYXRhbG9nLmlu dDRfYXZnX2FjY3VtLCBTVFlQRT1wZ19jYXRhbG9nLmludDhbXSwgRklOQUxGVU5DPXBnX2NhdGFs b2cuaW50OF9hdmcsIEZJTkFMRlVOQ19FWFRSQT1mYWxzZSwgSU5JVENPTkQ9J3swLDB9JykKK0RS T1AgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0IGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRl X2V4dGVuc2lvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMDZj Y2M2MmJhOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0CkBAIC0wLDAgKzEsNiBA QAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCitDUkVBVEUgRVhURU5TSU9OIHBnX3N0 YXRfc3RhdGVtZW50czsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBF WFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIsICJuYW1l IjogInBnX3N0YXRfc3RhdGVtZW50cyIsICJvcHRpb25zIjogW3siZm10IjogIlNDSEVNQSAle3Nj aGVtYX1JIiwgInR5cGUiOiAic2NoZW1hIiwgInNjaGVtYSI6ICJwdWJsaWMifV0sICJpZl9ub3Rf ZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIEVYVEVOU0lP TiAgcGdfc3RhdF9zdGF0ZW1lbnRzIFNDSEVNQSBwdWJsaWMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEu b3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX3NjaGVtYS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u MWUwOWRhNTE3MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CkBAIC0wLDAgKzEsMjIg QEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorQ1JFQVRFIFNDSEVNQSBmb287CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRp b24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZm9vIAor Q1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXIiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFV VEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJh dXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiSUYgTk9UIEVYSVNU UyJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJ U1RTIGJhciAKK0NSRUFURSBTQ0hFTUEgYmF6OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJm bXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6 YXRpb259cyIsICJuYW1lIjogImJheiIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9S SVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhv cml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGJheiAKKy0tIFdpbGwgbm90IGJlIGNyZWF0 ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQorLS0gZXZlbnQgdHJpZ2dlcgorQ1JF QVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKK05PVElDRTogIHNjaGVtYSAiYmF6IiBhbHJl YWR5IGV4aXN0cywgc2tpcHBpbmcKK0NSRUFURSBTQ0hFTUEgZWxlbWVudF90ZXN0CisgIENSRUFU RSBUQUJMRSBmb28gKGlkIGludCkKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMi LCAibmFtZSI6ICJlbGVtZW50X3Rlc3QiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBlbGVtZW50X3Rlc3QgCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZf bm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVy aXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNj ZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJm b28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAi SU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBm YWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9 cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3Bh Y2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxz ZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6 IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10 IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZp bml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3Nf bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZf bm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtj b2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRp b259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFt ZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwg Im5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQi OiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAi Q09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJj b21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJH RU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBlbGVtZW50X3Rlc3QuZm9vIChpZCBwZ19jYXRh bG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgKSAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV90YWJsZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWVl YWExY2NjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTAsMCArMSwzNiBAQAor Q1JFQVRFIFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB2YXJjaGFy KDUpCispOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxl bWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtw YXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRp dHkiOiB7Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0s ICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50 cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09N TUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3Zh bHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3Bh Y2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5j ZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0s ICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAi cHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsi Zm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vz c19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjog W3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlw ZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJj b21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUki LCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0 ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFs c2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwg ImNvbHR5cGUiOiB7InR5cG1vZCI6ICIoNSkiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1l IjogInZhcmNoYXIiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJm bXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxh dGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJk ZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0 ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9u X21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9 LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJl c2VudCI6IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFC TEUgIHB1YmxpYy5zaW1wbGVfdGFibGUgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWlu ICAgICAsIG5hbWUgcGdfY2F0YWxvZy4idmFyY2hhciIoNSkgU1RPUkFHRSBleHRlbmRlZCAgQ09M TEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0IiAgICkgICAgICAKKy0tIFRlc3QgQ1JFQVRFIElOREVY IHdpdGggYW4gSU5DTFVERSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5ERVggY292ZXJpbmdfaW5k ZXggb24gc2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFtZSk7CitOT1RJQ0U6ICBkZXBhcnNl ZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1z ICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFibGV9RCBVU0lORyAle2luZGV4X2Ft fXMgJXtkZWZpbml0aW9ufXMgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMgJXt3aGVyZV9jbGF1c2V9 cyIsICJuYW1lIjogImNvdmVyaW5nX2luZGV4IiwgIndpdGgiOiB7ImZtdCI6ICJXSVRIIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJ0YWJsZSI6IHsib2JqbmFtZSI6ICJzaW1wbGVfdGFibGUiLCAic2No ZW1hbmFtZSI6ICJwdWJsaWMifSwgInVuaXF1ZSI6ICJVTklRVUUiLCAiaW5kZXhfYW0iOiAiYnRy ZWUiLCAiZGVmaW5pdGlvbiI6ICIoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVERSAobmFt ZSkiLCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UiLCAicHJlc2VudCI6IGZhbHNl fSwgImNvbmN1cnJlbnRseSI6ICIiLCAid2hlcmVfY2xhdXNlIjogeyJmbXQiOiAiV0hFUkUiLCAi cHJlc2VudCI6IGZhbHNlfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1l ZCBjb21tYW5kOiBDUkVBVEUgVU5JUVVFIElOREVYICAgY292ZXJpbmdfaW5kZXggT04gcHVibGlj LnNpbXBsZV90YWJsZSBVU0lORyBidHJlZSAoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVE RSAobmFtZSkgICAKKy0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkK K0NSRUFURSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZ IEtFWSwgYiB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAl e3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3Rh YmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1p dH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwg ImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0s ICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50 cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09N TUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3Zh bHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3Bh Y2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5j ZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0s ICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAi cHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsi Zm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vz c19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjog W3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtj b21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2Vu ZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBl IjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQi LCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6 ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXBy ZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJw cmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9j b2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19 LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7 Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dl bmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlw ZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjog ImN0bHQxX2FfY2hlY2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2si LCAiZGVmaW5pdGlvbiI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBn X2NhdGFsb2cuPikgMikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250 eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQor Tk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MSAo YSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0IiAgICwgYiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2NoZWNrIENIRUNLICgo cGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSksIENPTlNUUkFJ TlQgY3RsdDFfcGtleSBQUklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0FMVEVSIFRB QkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitOT1RJQ0U6ICBkZXBh cnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJj bWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0 IHN0b3JhZ2UiLCAiY29sdW1uIjogImEiLCAic3RvcmFnZSI6ICJtYWluIn1dLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1O IGEgU0VUIFNUT1JBR0UgbWFpbgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VU IFNUT1JBR0UgRVhURVJOQUw7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRF UiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJU QUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBT VE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAiY29sdW1uIjogImIi LCAic3RvcmFnZSI6ICJleHRlcm5hbCJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQx IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog QUxURVIgVEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIGV4dGVy bmFsCistLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxv d2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1 YmNvbW1hbmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUg dGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0 ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVt ZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3Bh cnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0 eSI6IHsib2JqbmFtZSI6ICJwcm9kdWN0IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVz c2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29s dW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwg eyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2Nv bXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5l cmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVM VCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10 IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNj aGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6 ICJwcm9kdWN0X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFy eSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoaWQpIn1dfQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5wcm9kdWN0IChpZCBwZ19jYXRh bG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdF IGV4dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIHBy b2R1Y3RfcGtleSBQUklNQVJZIEtFWSAoaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNv bjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitDUkVBVEUgVEFC TEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZF UkVOQ0VTIHByb2R1Y3QgKGlkKSk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMiLCAic2NoZW1hbmFtZSI6ICJw dWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIs ICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6 ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9j b21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7 dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBl cnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6 IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRp b259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0 aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNl LCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxl bWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3Jh Z2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0 fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJvcmRlcl9pZCIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdl IjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogInByb2R1Y3RfaWQi LCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6 IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwg ImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVs bCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9 LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Np b25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVE IEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogIm9yZGVyc19wa2V5IiwgInR5cGUiOiAiY29u c3RyYWludCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFS WSBLRVkgKG9yZGVyX2lkKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUg IFRBQkxFICBwdWJsaWMub3JkZXJzIChvcmRlcl9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBw bGFpbiAgICAgLCBwcm9kdWN0X2lkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAs IENPTlNUUkFJTlQgb3JkZXJzX3BrZXkgUFJJTUFSWSBLRVkgKG9yZGVyX2lkKSkgICAgICAKK05P VElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IDxOVUxMPgorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBl fXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3Vi Y21kcyI6IFt7ImZtdCI6ICJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIs ICJuYW1lIjogIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLCAidHlwZSI6ICJhZGQgY29uc3RyYWlu dCIsICJkZWZpbml0aW9uIjogIkZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1 YmxpYy5wcm9kdWN0KGlkKSJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJz Y2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVS IFRBQkxFIHB1YmxpYy5vcmRlcnMgQUREIENPTlNUUkFJTlQgb3JkZXJzX3Byb2R1Y3RfaWRfZmtl eSBGT1JFSUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNFUyBwdWJsaWMucHJvZHVjdChpZCkK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjBlMmJmMjUxYQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3Rf ZGRsX2RlcGFyc2Uub3V0CkBAIC0wLDAgKzEsMTggQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9kZGxf ZGVwYXJzZSgpCisgIFJFVFVSTlMgZXZlbnRfdHJpZ2dlciBMQU5HVUFHRSBwbHBnc3FsIEFTCisk JAorREVDTEFSRQorCXIgcmVjb3JkOworCWRlcGFyc2VkX2pzb24gdGV4dDsKK0JFR0lOCisJRk9S IHIgSU4gU0VMRUNUICogRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisJTE9P UAorCQlkZXBhcnNlZF9qc29uID0gcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29t bWFuZCk7CisJCVJBSVNFIE5PVElDRSAnZGVwYXJzZWQganNvbjogJScsIGRlcGFyc2VkX2pzb247 CisJCVJBSVNFIE5PVElDRSAncmUtZm9ybWVkIGNvbW1hbmQ6ICUnLCBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRlcGFyc2VkX2pzb24pOworCUVORCBMT09QOworRU5EOwor JCQ7CitDUkVBVEUgRVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNlCitPTiBkZGxfY29tbWFu ZF9lbmQgRVhFQ1VURSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgpOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43YTE1MmEyM2UyCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24u YnVpbGQKQEAgLTAsMCArMSw0MiBAQAorIyBGSVhNRTogcHJldmVudCBpbnN0YWxsIGR1cmluZyBt YWluIGluc3RhbGwsIGJ1dCBub3QgZHVyaW5nIHRlc3QgOi8KKwordGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jJywK KykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVn cmVzc19zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJn czogWworICAgICctLU5BTUUnLCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgICAnLS1G SUxFREVTQycsICd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNzaW9uIHRlc3Rpbmcg Zm9yIERETCBkZXBhcnNpbmcnLF0pCitlbmRpZgorCit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mg PSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICB0ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcywKKyAga3dhcmdzOiBwZ19tb2RfYXJncywKKykKK3Rlc3Rw cmVwX3RhcmdldHMgKz0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzCisKK2luc3RhbGxfZGF0YSgK KyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sJywKKyAgJ3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy0tMS4wLnNxbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisK K3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgJ3Nk JzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAndGVzdF9kZGxf ZGVwYXJzZScsCisgICAgICAnY3JlYXRlX2V4dGVuc2lvbicsCisgICAgICAnY3JlYXRlX3NjaGVt YScsCisgICAgICAnY3JlYXRlX3RhYmxlJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAg ICd0ZXN0cyc6IFsKKyAgICAgICd0LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsJywKKyAg ICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi4yZjJhYmJlZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKQEAgLTAs MCArMSw4IEBACitDUkVBVEUgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KSAoCisgICBzZnVuYyA9IGlu dDRfYXZnX2FjY3VtLCBzdHlwZSA9IF9pbnQ4LAorICAgZmluYWxmdW5jID0gaW50OF9hdmcsCisg ICBpbml0Y29uZDEgPSAnezAsMH0nCispOworCitEUk9QIEFHR1JFR0FURSBuZXdhdmcoaW50NCk7 CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5kMjNlN2ZkOWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24u c3FsCkBAIC0wLDAgKzEsNSBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCisKK0NS RUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hl bWEuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEwYjEzZjBhNTUK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwKQEAgLTAsMCArMSwxNiBAQAorLS0KKy0tIENSRUFU RV9TQ0hFTUEKKy0tCisKK0NSRUFURSBTQ0hFTUEgZm9vOworCitDUkVBVEUgU0NIRU1BIElGIE5P VCBFWElTVFMgYmFyOworCitDUkVBVEUgU0NIRU1BIGJhejsKKworLS0gV2lsbCBub3QgYmUgY3Jl YXRlZCwgYW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitD UkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRf dGVzdAorICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk5N2QyZjU0ZmIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtMCwwICsxLDE2IEBACitDUkVBVEUgVEFCTEUgc2lt cGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CistLSBUZXN0 IENSRUFURSBJTkRFWCB3aXRoIGFuIElOQ0xVREUgQ0xBVVNFCitDUkVBVEUgVU5JUVVFIElOREVY IGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOworCist LSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5CitDUkVBVEUgVEFCTEUg Y3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7 CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlOOworQUxU RVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0UgRVhURVJOQUw7CisKKy0t IFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFM VEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFu ZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsK K0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9p ZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9k ZXBhcnNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wODg5ZmEw MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsCkBAIC0wLDAgKzEsMjAgQEAKK0NSRUFU RSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworCitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExB TkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNv biB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29u OiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDog JScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7 CisJRU5EIExPT1A7CitFTkQ7CiskJDsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxf ZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2Rl cGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2NGFkMzQ5OGYKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCkBAIC0wLDAgKzEsMTgxIEBACit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2Ug RmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3Rlc3RfY2FzZSB7CisgICAgbXkgJHRlc3Rf bmFtZSA9ICRfWzBdOworICAgIG15ICRwdWJfbm9kZSA9ICRfWzFdOworICAgIG15ICRzdWJfbm9k ZSA9ICRfWzJdOworICAgIG15ICRkYm5hbWUgPSAkX1szXTsKKyAgICBteSAkb3V0cHV0ZGlyID0g JFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyAgICAjIHNldCB1cCBkZXBh cnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJj ZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgIG15ICR0ZXN0X2ZpbGUg PSAiLi9zcWwvJHt0ZXN0X25hbWV9LnNxbCI7CisgICAgbXkgJGNvbnRlbnQgPSBkb3tsb2NhbChA QVJHViwkLyk9JHRlc3RfZmlsZTs8Pn07CisKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1l LCAkY29udGVudCk7CisKKyAgICAjIHJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJv bSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAk cHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9l eHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQg QVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICBwcmludCAiXG5zdGFy dCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgIHByaW50ICRkZGxfc3FsOworICAgIHBy aW50ICJcbmVuZCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgICMgZXhlY3V0ZSBTUUwg Y29tbWFuZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRs X3NxbCk7CisKKyAgICAjIGNsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBj bGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRi bmFtZSk7CisKKyAgICAjIGR1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2Rp ciAke291dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRw dXRkaXJ9LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3B1Yi5kdW1wIjsKKyAgICBteSAkc3ViX2R1bXAg PSAke291dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fc3ViLmR1bXAiOworICAgIHN5c3Rl bSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAg ICAuICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAn LXAgJworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBu b2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisg ICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRzdWJfZHVtcCAuICIg IgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRz dWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBub2RlIGZhaWxlZCBpbiAke3Rl c3RfbmFtZX0iOworCisgICAgIyBjb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAgaXMoc3lzdGVt KCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1wKSwgMCwgIkR1 bXBlZCByZXN1bHRzIGRpZmYgaW4gJHt0ZXN0X25hbWV9Iik7Cit9CisKK3N1YiBpbml0X25vZGUg eworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAgICAj IGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxvdyBi eSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21h eF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNx bC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAgIHJl dHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25hbWUg PSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitz dWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsKKyAg ICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJzZV90 ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAg ICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAorICAg ICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQUklN QVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7CisKKyAg ICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAgICAg ICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAg ICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdp bgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2Rk bF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGlu dG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIuY29t bWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pz b24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAg ICAgICAkJDsKKworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ry b3BzX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdl IHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciBy ZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9t IHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAg ICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50 aXR5LCBkZGwpIHZhbHVlcyAoci5vYmplY3RfdHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1Ymxp Yy5kZXBhcnNlX2Ryb3BfZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7Cisg ICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKworICAgICAg ICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9j b21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKworICAgICAg ICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9u IHNxbF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworCisg ICAgICAgIGNvbW1pdDsKKyAgICApKTsKK30KKworc3ViIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19y ZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRi bmFtZSA9ICRfWzFdOworICAgICMgRHJvcCB0aGUgZXZlbnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0 aW9uIGJlZm9yZSB0YWtpbmcgYSBsb2dpY2FsIGR1bXAuCisgICAgJG5vZGUgLT4gc2FmZV9wc3Fs KCRkYm5hbWUscSgKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7 CisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnOworICAg ICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBkcm9wIGZ1bmN0 aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBkcm9wIHRhYmxlIGRlcGFyc2Vk X2RkbHM7CisgICAgICAgIERST1AgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsK KyAgICApKTsKK30KKworc3ViIHRyaW0geworICAgIG15IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBv dXQpIHsKKyAgICAgICAgcy9eXHMrLy87CisgICAgICAgIHMvXHMrJC8vOworICAgIH0KKyAgICBy ZXR1cm4gd2FudGFycmF5ID8gQG91dCA6ICRvdXRbMF07Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFy dCBwdWIgc3ViIG5vZGVzCitteSAkcHViX25vZGUgPSBpbml0X3B1Yl9ub2RlKCJ0ZXN0Iik7Citt eSAkc3ViX25vZGUgPSBpbml0X3N1Yl9ub2RlKCJ0ZXN0Iik7CitteSAkZGJuYW1lID0gInBvc3Rn cmVzIjsKKyRwdWJfbm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBsb2Fk IHRlc3QgY2FzZXMgZnJvbSB0aGUgcmVncmVzc2lvbiB0ZXN0cworbXkgQHJlZ3Jlc3NfdGVzdHMg PSBzcGxpdCAvXHMrLywgJEVOVntSRUdSRVNTfTsKKworZm9yZWFjaChAcmVncmVzc190ZXN0cykg eworICAgIG15ICR0ZXN0X25hbWUgPSB0cmltKCRfKTsKKyAgICAjIHNraXAgaWYgaXQncyByZWdy ZXNzaW9uIHRlc3QgcHJlcGFyYXRpb24gb3IgZW1wdHkgc3RyaW5nCisgICAgaWYgKCR0ZXN0X25h bWUgZXEgIiIgb3IgJHRlc3RfbmFtZSBlcSAidGVzdF9kZGxfZGVwYXJzZSIpCisgICAgeworICAg ICAgICBuZXh0OworICAgIH0KKyAgICBldmFsIHtleGVjdXRlX3Rlc3RfY2FzZSgkdGVzdF9uYW1l LCAkcHViX25vZGUsICRzdWJfbm9kZSwgJGRibmFtZSk7fTsKKyAgICBpZiAoJEAgbmUgIiIpCisg ICAgeworICAgICAgICBmYWlsKCRAKTsKKyAgICB9Cit9CitjbG9zZTsKKworIyBDbG9zZSBub2Rl cworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Qv MDAyX3JlZ3Jlc3NfdGVzdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjNhODc1YzMzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCkBAIC0w LDAgKzEsMjA3IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwor dXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3JlZ3Jl c3NfdGVzdCB7CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMF07CisgICAgbXkgJHN1Yl9ub2RlID0g JF9bMV07CisgICAgbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CisgICAgbXkgJGRscGF0aCAgICA9 IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7CisgICAgbXkgJGlucHV0ZGlyID0gIi4uLy4u L3JlZ3Jlc3MiOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6 OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAg ICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUs ICRkYm5hbWUpOworCisgICAgIyBleGVjdXRlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyBvbiBwdWIg bm9kZQorICAgIG15ICRyZWdyZXNzX2NtZCA9ICRFTlZ7UEdfUkVHUkVTU30KKyAgICAgICAgLiAi ICIKKyAgICAgICAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorICAgICAgICAuICItLW1heC1j b25jdXJyZW50LXRlc3RzPTIwICIKKyAgICAgICAgLiAiLS1kYm5hbWU9IgorICAgICAgICAuICRk Ym5hbWUgLiAiICIKKyAgICAgICAgLiAiLS11c2UtZXhpc3RpbmcgIgorICAgICAgICAuICItLWhv c3Q9IgorICAgICAgICAuICRwdWJfbm9kZS0+aG9zdCAuICIgIgorICAgICAgICAuICItLXBvcnQ9 IgorICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCAuICIgIgorICAgICAgICAuICItLWlucHV0ZGly PSRpbnB1dGRpciAiCisgICAgICAgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiICIKKyAg ICAgICAgLiAiLS1zY2hlZHVsZT0kaW5wdXRkaXIvcGFyYWxsZWxfc2NoZWR1bGUiOworICAgIHBy aW50ICJSZWdyZXNzaW9uIHRlc3QgY29tbWFuZCBpcyAkcmVncmVzc19jbWQiOworICAgIG15ICRy YyA9IHN5c3RlbSgkcmVncmVzc19jbWQpOworICAgIGlmICgkcmMgIT0gMCkKKyAgICB7CisgICAg ICAgICMgSWYgcmVncmVzc2lvbiB0ZXN0IGZhaWxzLCBkdW1wIG91dCB0aGUgcmVncmVzc2lvbiBk aWZmcyBmaWxlCisgICAgICAgIG15ICRkaWZmcyA9ICIke291dHB1dGRpcn0vcmVncmVzc2lvbi9y ZWdyZXNzaW9uLmRpZmZzIjsKKyAgICAgICAgaWYgKC1lICRkaWZmcykKKyAgICAgICAgeworICAg ICAgICAgICAgcHJpbnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7CisgICAgICAgICAgICBw cmludCBzbHVycF9maWxlKCRkaWZmcyk7CisgICAgICAgICAgICBwcmludCAiPT09IEVPRiA9PT1c biI7CisgICAgICAgIH0KKyAgICAgICAgZGllICJSZWdyZXNzaW9uIHRlc3QgZmFpbGVkIjsKKyAg ICB9CisKKyAgICAjIFJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNl ZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAkcHViX25vZGUg LT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9leHBhbmRfY29t bWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQgQVNDKSwKKyAg ICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICAjIEV4ZWN1dGUgU1FMIGNvbW1hbmRz IG9uIHN1YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRkbF9zcWwpOwor CisgICAgIyBDbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY2xlYW5fZGVw YXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOwor CisgICAgIyBEdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtkaXIgJHtvdXRw dXRkaXJ9LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4i L2R1bXBzL3JlZ3Jlc3NfcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0cHV0ZGly fS4iL2R1bXBzL3JlZ3Jlc3Nfc3ViLmR1bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisg ICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAuICIg IgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRw dWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCI7CisgICAg c3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisg ICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAg IC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAg c3ViIG5vZGUgZmFpbGVkIjsKKworICAgICMgQ29tcGFyZSBkdW1wZWQgcmVzdWx0cworICAgIGlz KHN5c3RlbSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAuICRzdWJfZHVtcCks IDAsICJDb21wYXJpbmcgZHVtcGVkIG91dHB1dCIpOworCisgICAgIyBDbG9zZSBub2RlcworICAg ICRwdWJfbm9kZS0+c3RvcDsKKyAgICAkc3ViX25vZGUtPnN0b3A7Cit9CisKK3N1YiBpbml0X25v ZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAg ICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxv dyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywg J21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAg IHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25h bWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQor CitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsK KyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJz ZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsK KyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAor ICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQ UklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7Cisg ICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAg ICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAg ICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVn aW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBp bnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNv bW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19q c29uKHIuY29tbWFuZCkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAg ICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfZHJv cHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2Ug cGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJl Y29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20g cGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAorICAg ICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRp dHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVibGlj LmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsKKyAg ICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworICAgICAgICBj cmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9jb21t YW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgY3Jl YXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBzcWxf ZHJvcCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAg Y29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNl c19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0g JF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVm b3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3BzcWwoJGRibmFt ZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAg ICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7CisgICAgICAgIGRy b3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVw YXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJzZWRfZGRsczsK KyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICkp OworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAoQG91dCkgewor ICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAgIHJldHVybiB3 YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBz dWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInJlZ3Jlc3MiKTsKK215ICRz dWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInJlZ3Jlc3MiKTsKKyRwdWJfbm9kZSAtPiBzdGFydDsK KyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBDb21tZW50IHRoZSBleGVjdXRpb24gdGVtcG9yYXJp bHksIGFuIGVycm9yIGluIGRkbF9kZXBhcnNlLmMgd2lsbCBjYXVzZSB0aGUgZGF0YWJhc2UgZXhp dHMgYWJub3JtYWxseSwgZXJyb3Igc2lnbmF0dXJlOgorIworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0 Ljc3OCBVVEMgWzEyOTEwMl0gcGdfcmVncmVzcy90YWJsZXNwYWNlIExPRzogIHN0YXRlbWVudDog QUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190YmxzcGFjZV9yZW5hbWVkIFNF VCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIFRSQVA6IGZhaWxlZCBBc3NlcnQoIklzQShzdG10 LCBBbHRlclRhYmxlU3RtdCkiKSwgRmlsZTogImRkbF9kZXBhcnNlLmMiLCBMaW5lOiAzMzcxLCBQ SUQ6IDEyOTEwMgorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBvc3RncmVzIFtsb2Nh bF0gQUxURVIgVEFCTEUoRXhjZXB0aW9uYWxDb25kaXRpb24rMHhiYilbMHg1NjNiZDZlYTViMGRd CisjIC4uLgorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KCsweDI5ZDkwKVsweDdm ZDZhNzRhNmQ5MF0KKyMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMuc28uNihfX2xpYmNfc3Rh cnRfbWFpbisweDgwKVsweDdmZDZhNzRhNmU0MF0KKyMgcG9zdGdyZXM6IHJlZ3Jlc3NfcHViOiBy dW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxFKF9zdGFydCsweDI1KVsweDU2M2JkNjcy ZjFlNV0KKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThdIExPRzogIHNlcnZl ciBwcm9jZXNzIChQSUQgMTI5MTAyKSB3YXMgdGVybWluYXRlZCBieSBzaWduYWwgNjogQWJvcnRl ZAorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gREVUQUlMOiAgRmFpbGVk IHByb2Nlc3Mgd2FzIHJ1bm5pbmc6IEFMVEVSIFRBQkxFIEFMTCBJTiBUQUJMRVNQQUNFIHJlZ3Jl c3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZhdWx0OworIyAyMDIyLTEy LTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgdGVybWluYXRpbmcgYW55IG90aGVy IGFjdGl2ZSBzZXJ2ZXIgcHJvY2Vzc2VzCisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUxIFVUQyBb MTI5MDU4XSBMT0c6ICBzaHV0dGluZyBkb3duIGJlY2F1c2UgcmVzdGFydF9hZnRlcl9jcmFzaCBp cyBvZmYKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTIgVVRDIFsxMjkwNThdIExPRzogIGRhdGFi YXNlIHN5c3RlbSBpcyBzaHV0IGRvd24KKworIyBldmFsIHtleGVjdXRlX3JlZ3Jlc3NfdGVzdCgk cHViX25vZGUsICRzdWJfbm9kZSk7fTsKKyMgaWYgKCRAIG5lICIiKQorIyB7CisjICAgICBmYWls KCRAKTsKKyMgfQorCisjIENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0b3A7Ciskc3ViX25vZGUt PnN0b3A7CisKK3Bhc3MoInJlZ3Jlc3NzaW9uIHRlc3QgcGFzc2VkIik7CisKK2RvbmVfdGVzdGlu ZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0t MS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi4xNDA3MGNkNTFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsCkBAIC0wLDAgKzEsOSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICovCisKKy0tIGNvbXBs YWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUg RVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlcGFy c2VfZHJvcF9kZGwoSU4gb2JqaWRlbnRpdHkgdGV4dCwKKyAgICBJTiBvYmplY3R0eXBlIHRleHQp CisgIFJFVFVSTlMgdGV4dCBJTU1VVEFCTEUgU1RSSUNUCisgIEFTICdNT0RVTEVfUEFUSE5BTUUn IExBTkdVQUdFIEM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5iZDY5OTJiZGZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKQEAgLTAsMCAr MSw1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwor ICoJCVN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIG1v ZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5j CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibm9k ZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKyNpbmNs dWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElP Tl9JTkZPX1YxKGRlcGFyc2VfZHJvcF9kZGwpOworCisvKgorICogR2l2ZW4gb2JqZWN0X2lkZW50 aXR5IGFuZCBvYmplY3RfdHlwZSBvZiBkcm9wcGVkIG9iamVjdCwgcmV0dXJuIGEgSlNPTiByZXBy ZXNlbnRhdGlvbiBvZiBEUk9QIGNvbW1hbmQuCisgKi8KK0RhdHVtCitkZXBhcnNlX2Ryb3BfZGRs KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqb2JqaWRlbnRpdHkgPSBQR19HRVRBUkdf VEVYVF9QKDApOworCWNvbnN0IGNoYXIJICAgKm9iamlkZW50aXR5X3N0ciA9IHRleHRfdG9fY3N0 cmluZyhvYmppZGVudGl0eSk7CisJdGV4dAkgICAqb2JqZWN0dHlwZSA9IFBHX0dFVEFSR19URVhU X1AoMSk7CisJY29uc3QgY2hhcgkgICAqb2JqZWN0dHlwZV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmco b2JqZWN0dHlwZSk7CisKKwljaGFyCQkgICAqY29tbWFuZDsKKworCS8vIGNvbnN0cmFpbnQgaXMg cGFydCBvZiBhbHRlciB0YWJsZSBjb21tYW5kLCBubyBuZWVkIHRvIGRyb3AgaW4gRFJPUCBjb21t YW5kCisJaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbnN0cmFpbnQiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJ0b2FzdCB0YWJsZSIpID09IDApIHsKKwkJb2JqZWN0dHlwZV9zdHIgPSAidGFibGUiOwor CX0gIGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImRlZmF1bHQgdmFsdWUiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kIikgPT0gMCkgeworCQlQR19SRVRVUk5fTlVM TCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAiZnVuY3Rpb24gb2YgYWNj ZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYgKHN0 cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbHVtbiIpID09IDApIHsKKwkJUEdfUkVUVVJO X05VTEwoKTsKKwl9CisKKwljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqaWRlbnRp dHlfc3RyLCBvYmplY3R0eXBlX3N0ciwgRFJPUF9DQVNDQURFKTsKKworCWlmIChjb21tYW5kKQor CQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CisKKwlQR19SRVRV Uk5fTlVMTCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uYTFmOTM0ZTY1OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0IGNvZGUgZm9yIERETCBk ZXBhcnNlIHJlZ3Jlc3MgZmVhdHVyZScKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVf cGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnCityZWxvY2F0YWJs ZSA9IHRydWUKLS0gCjIuMzguMQoK --000000000000061afb05f176f684 Content-Type: application/octet-stream; name="v59-0004-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v59-0004-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lci6gypv3 RnJvbSAyNTViYzk3YWI3NmUwZGM0YmJkZDUwNTI2OWNhYmVlMWUxNmVmNDdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjcgRGVjIDIwMjIgMTA6NTE6MTcgKzA1MzAKU3ViamVjdDogW1BBVENIIDQvNV0gRERM IG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKRERMIG1lc3Nh Z2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0KIGNvbnRyaWIvdGVz dF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICB8ICAyNiArKysrCiBjb250cmliL3Rl c3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi90ZXN0 X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgIHwgIDQ4ICsrKysrKysKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrKysrKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg0ICsrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgIHwgIDQ0ICsrKysr KwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgIDI0ICsr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAgMSAr CiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMjcgKysr KysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAg ICB8ICAgOCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oICAgICAgICAg IHwgIDYwICsrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAg ICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAg ICAgIHwgIDI3ICsrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDU2OCBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dk ZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3Rl ZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKaW5kZXgg OWEyOGI1ZGRjNS4uMGY1MWYyYjQxYSAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2Rk bC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmMKIC0tLS0t LQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMicgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1z IiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9O ICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlv bl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7CisgP2NvbHVtbj8gCistLS0t LS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNnMycgRlJPTSBwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYzOTQsIDEsICd7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1hbmFtZSI6ICJlbGVt ZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjog InBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzMK KygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMo J3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cxLCByZWxpZDogMTYzOTQs IGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNnMQorIG1lc3NhZ2U6IHByZWZp eDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFydCwgc3o6IDIxNyBj b250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg JXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10 IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFs c2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KKyBt ZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3Rh cnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjog IiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBm YWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJw cmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fQorKDMgcm93 cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7 CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbCBiL2NvbnRyaWIv dGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVkNzJjLi4xZWE1YTRiMjcxIDEw MDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKKysrIGIvY29udHJp Yi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDExIEBAIFNFTEVDVCBk YXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBO VUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdAog U0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25f c2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3Rz JywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21l c3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1QgJ2RkbCBtc2cyJyBG Uk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAxNjM5NCwgMSwgJ3si Zm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3Jp emF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0nKTsKK1NFTEVDVCAn ZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycsIDE2 Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31z ICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19t ZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwg InNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVS SVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9 LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAi cHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjog eyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0 YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZt dCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQ QVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlv biI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9l eGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi aWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJh eSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2ci fSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3Rf bnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFs c2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBS RVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJl c3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJB VEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VMRUNUIGRhdGEgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5V TEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKwogU0VM RUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90Jyk7CiAKIC8qIGNo ZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi90ZXN0X2Rl Y29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29k aW5nLmMKaW5kZXggZTUyM2QyMmViYS4uY2FiZjBiYzFkOSAxMDA2NDQKLS0tIGEvY29udHJpYi90 ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv dGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5o IgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2RlY29kZV9tZXNzYWdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0 IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor c3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxp ZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCSAgU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19kZWNvZGVfZmlsdGVy X3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJIFRyYW5zYWN0 aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0xMzcsNiArMTQ1LDcg QEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNi LT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAljYi0+c2h1dGRvd25f Y2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ19kZWNvZGVfbWVz c2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwogCWNiLT5maWx0ZXJf cHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+YmVnaW5fcHJlcGFy ZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJlcGFyZV9jYiA9IHBn X2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1Miw2ICs3NjEsNDUgQEAgcGdfZGVjb2RlX21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfZGRsX21lc3NhZ2UoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCSAg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KQoreworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOworCWFwcGVuZFN0cmlu Z0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBwcmVmaXg6ICVzLCByZWxpZDogJXUsICIsCisJCQkJ CSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRjaChjbWR0eXBlKQorCXsKKwljYXNlIERDVF9TaW1w bGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBTaW1wbGUsICIp OworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJYXBwZW5kU3RyaW5nSW5m byhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Agc3RhcnQsICIpOworCQlicmVhazsKKwljYXNlIERD VF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBE cm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlQWx0ZXI6CisJCWFwcGVuZFN0 cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBBbHRlciB0YWJsZSwgIik7CisJCWJyZWFrOwor CWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNt ZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdERyb3A6CisJCWFw cGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wLCAiKTsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IEludmFsaWQs ICIpOworCQlicmVhazsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAic3o6ICV6 dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGN0eC0+b3V0LCBtZXNz YWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30KKwogc3RhdGljIHZv aWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAog CQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFr ZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZmMDFlNjliZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWdpc3RkZXNjLm8gXAog CWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCWxv Z2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWU5MzBjOTBjCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCAr MSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYwor ICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rl c2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAg KnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0 SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMt Pm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5w cmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJl Yy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJl Zml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVj LT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5 cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2Fn ZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAw OyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOwor CQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0g WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCI7CisKKwlyZXR1cm4gTlVM TDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAppbmRleCAxNjZjZWU2 N2I2Li43ODFlMmQ3NzEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxk CkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMoCiAgICdnaXN0ZGVz Yy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICdsb2dpY2FsZGRsbXNn ZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNjLmMnLAogICAnbmJ0 ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3ZDY3ZWRhNWY3Li42Nzhl ODFhZTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBACiAj aW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZDRmMjlmOGZmYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1J JChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCisJZGRsbWVzc2FnZS5vXAogCWRlY29k ZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi5lMTFlNTZlNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwg bWVzc2FnZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAor ICogZ2V0IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBY TE9HIHByb2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2Ug Z2VuZXJpYyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRy YW5zYWN0aW9uYWwKKyAqIG1vZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwg YXJlIHRyYW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3Vy cmVudCB0cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4g dXNpbmcgaW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNz YWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBk ZWNvZGluZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBj YXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZv ciBleGFtcGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUg ImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgorCisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhM b2cuCisgKi8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25z dCBjaGFyICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdl IHhscmVjOworCisJIC8qIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICov CisJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25J ZCgpOworCisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlz IGNyaXRpY2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUg PSBzdHJsZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJl Yy5yZWxpZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2lu SW5zZXJ0KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2lj YWxERExNZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVm aXgpLCB4bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNo YXIgKiwgbWVzc2FnZSksIHNpemUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLwor CVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9n SW5zZXJ0KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9 CisKKy8qCisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2Rp bmcgZGRsIG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQp ICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NB R0UpCisJCWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAl dSIsIGluZm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRl Y29kaW5nLCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9kZWNvZGUuYwppbmRleCBjM2JjOGVjYzkyLi5lNTkxMDM5ZGMwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02 MDMsNiArNjA0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSAr IG1lc3NhZ2UtPnByZWZpeF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxE RExNU0dfSUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAq Lwordm9pZAorbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25h cHNob3RfYnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFu c2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVj R2V0SW5mbyhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhM b2dSZWNHZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKwor CWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKwor CVJlb3JkZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwg YnVmLT5vcmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3 ZSBhcmUganVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVj b2RpbmcgZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVp bGRlcikgPCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkK KwkJcmV0dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dS ZWNHZXREYXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRh dGFiYXNlIHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOwor CisJaWYgKFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIp KQorCQlSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYt PmVuZHB0ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1l c3NhZ2UgaXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJ CQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJ CSBtZXNzYWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xp ZGF0ZWQgY29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBv ZiBjb21taXQKICAqIHJlY29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jCmluZGV4IDUyZDFmZTYyNjkuLjRkODRkZjgyZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1n ci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNv ZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vb3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9j Yl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBz dGF0aWMgdm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29s IHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkg IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1l c3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFj a3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC0yMTgsNiArMjIzLDcgQEAgU3RhcnR1 cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9y ZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBt ZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsK IAogCS8qCiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9h Ym9ydC9jb21taXQvY2hhbmdlCkBAIC0xMjIwLDYgKzEyMjYsNDQgQEAgbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3Jf Y29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAor ZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnBy ZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6 ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJv ckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7 CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5k ZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24g dGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2Fs bGJhY2tfbmFtZSA9ICJkZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNu OworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsK KwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlv dXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2Fs bGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0g dHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkv KiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5k ZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJ CQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4 dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsK K30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xz bikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmlu ZGV4IGZhMWI2NDFhMmIuLjkyZjVmOTM1N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBw Z19sb2dpY2FsX2VtaXRfbWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEg YW5kIHRleHQgYXJlIGNvbXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3Nh Z2VfYnl0ZWEoZmNpbmZvKTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBs b2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9n aWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkg ICAqcHJlZml4ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJ CQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl ID0gUEdfR0VUQVJHX0lOVDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmco UEdfR0VUQVJHX1RFWFRfUFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9n aWNhbERETE1lc3NhZ2UocHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEp KTsKKwlQR19SRVRVUk5fTFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRs X21lc3NhZ2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFy ZSBjb21wYXRpYmxlICovCisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRl YShmY2luZm8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVp bGQKaW5kZXggNzE0NGQ3YThhNC4uY2RhOTEzZDBiOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCkBAIC0xLDYgKzEsNyBAQAogIyBDb3B5cmlnaHQgKGMp IDIwMjItMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogYmFja2Vu ZF9zb3VyY2VzICs9IGZpbGVzKAorICAnZGRsbWVzc2FnZS5jJywKICAgJ2RlY29kZS5jJywKICAg J2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggZjI4NGZjMmUzMC4uZTBmZjVjMWU4MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMK QEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVk ZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Ns b3QuaCIKQEAgLTUxNiw2ICs1MTcsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVybkNoYW5nZShSZW9y ZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAogCQkJCXBmcmVlKGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBO VUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCWlm IChjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0 YS5kZGwucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0gTlVMTDsKKwkJCWlm IChjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRh dGEuZGRsLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gTlVMTDsKKwkJ CWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlp ZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5k YXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODk0LDYgKzkwMywzNiBAQCBSZW9yZGVyQnVm ZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9 CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJl IHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERM TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhM b2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9z aXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRl ckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhp ZCkpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7 CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlv biA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgg PSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCA9IHJlbGlkOworCWNo YW5nZS0+ZGF0YS5kZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNz YWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gcGFs bG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSwgbWVz c2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlk LCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVy aW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCkBAIC0yMDAyLDYg KzIwNDEsMjEgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwog fQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBm b3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1Jl b3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0 cmVhbWluZykKK3sKKwlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJY2hhbmdlLT5k YXRhLmRkbC5wcmVmaXgsCisJCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJY2hhbmdlLT5k YXRhLmRkbC5jbWR0eXBlLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsCisJCQlj aGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCiAvKgogICogRnVuY3Rpb24gdG8gc3RvcmUg dGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAq IHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBu ZXh0IHN0cmVhbS4KQEAgLTIzODIsNiArMjQzNiwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RY TihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVy QnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJl YWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQkJCVJlb3JkZXJC dWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOworCQkJCQli cmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJ CQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8KIAkJCQkJ UmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZhbC5uaW52 YWxpZGF0aW9ucywKQEAgLTM4MTQsNiArMzg3MiwzOSBAQCBSZW9yZGVyQnVmZmVyU2VyaWFsaXpl Q2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCSAg IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0 YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlz eiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJ c2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsK KwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9 ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7 CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRp c2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdy aXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLnJlbGlk LCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoZGF0 YSwgJmNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5cGUp KTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRh dGEuZGRsLnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1j cHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEu ZGRsLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplKTsKKwkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7CiAJ CQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQxMjgs NiArNDIxOSwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKTsKIAorCQkJCWJyZWFr OworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJU2l6 ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsgMTsKKwor CQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgKwor CQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihE ZXBhcnNlZENvbW1hbmRUeXBlKTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00NDA1LDYgKzQ1MDUsMzMgQEAgUmVvcmRl ckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEg Kz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9z aXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBk YXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNw eSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIGRh dGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50 KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+ Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihT aXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2Mo cmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9z aXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1 bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMx N2JiNGMuLmRhZjE3MzAyNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNiw2ICsyNiw3IEBA CiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3Nh Z2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVz Yy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCA0NjNiY2I2N2M1Li5hYmNiZTk3NTkzIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1JVF9UU19J RCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21taXRfdHNf aQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCByZXBsb3Jp Z2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBnZW5lcmlj X3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJp Y19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1lc3NhZ2Ui LCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xPR0lDQUxE RExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywgbG9naWNh bGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBs b2dpY2FsZGRsX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGJkZjVjZmJjZTku LmY0NTZlZmI1OWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTEwMDAsNiArMTEwMDAs MTQgQEAKICAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X21lc3NhZ2UnLCBwcm92b2xhdGls ZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICd1JywKICAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywg cHJvYXJndHlwZXMgPT4gJ2Jvb2wgdGV4dCBieXRlYScsCiAgIHByb3NyYyA9PiAncGdfbG9naWNh bF9lbWl0X21lc3NhZ2VfYnl0ZWEnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ICdlbWl0 IGEgdGV4dHVhbCBsb2dpY2FsIGRlY29kaW5nIG1lc3NhZ2UnLAorICBwcm9uYW1lID0+ICdwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVs ID0+ICd1JywKKyAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wg dGV4dCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfdGV4 dCcgfSwKK3sgb2lkID0+ICczODE0JywgZGVzY3IgPT4gJ2VtaXQgYSBiaW5hcnkgbG9naWNhbCBk ZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNz YWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5 cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHJlZ2NsYXNzIGludDQgdGV4dCcs CisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhJyB9LAogCiAj IGV2ZW50IHRyaWdnZXJzCiB7IG9pZCA9PiAnMzU2NicsIGRlc2NyID0+ICdsaXN0IG9iamVjdHMg ZHJvcHBlZCBieSB0aGUgY3VycmVudCBjb21tYW5kJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43N2RmNmVhMTFh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o CkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2FnZS5oCisg KgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNkZWZpbmUg UEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgi CisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Iga2VlcGlu ZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERlcGFyc2Vk Q29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFydCwKKwlE Q1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVhdGUsCisJ RENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdlbmVyaWMg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0 cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJZDsJCQkvKiBkYXRhYmFz ZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBw cmVmaXggaW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJCXJlbGlkOwkJCS8qIGlk IG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsJLyogdHlwZSBv ZiBzcWwgY29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgbWVz c2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5hdGVkIHBy ZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZpbmUgU2l6 ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UsIG1l c3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKworLyogUk1H UiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9pZAkJbG9n aWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxvZ2ljYWxk ZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworY29u c3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDE0ZmE5MjFhYjQuLmM5YWM3MDhkMzIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lkIGhlYXAy X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1 Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29kZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4g dm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsX2RlY29kZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4dGVybiB2 b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggMmQ4OWQyNjU4Ni4uNWVkNWU2YTdiYyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOSw2ICs5LDcgQEAKICNp Zm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCisjaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKIAogc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC05MCw2ICs5 MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXplIG1lc3NhZ2Vfc2l6ZSwK IAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAqIENhbGxlZCBmb3IgdGhl IGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUg Y21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBj b25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4K ICAqLwpAQCAtMjIxLDYgKzIzNCw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxi YWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNv ZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2Ni OworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0 ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3du Q0Igc2h1dGRvd25fY2I7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApp bmRleCBhNDJhMTIwNGQzLi5jOGYzMjRmZmJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsY2FjaGUuaCIKQEAgLTY0LDYgKzY2LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJD aGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZF Ul9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzOCw2ICsxNDEsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAor CQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJ CW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJ CURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJfQkJCWRkbDsKKwogCQkvKiBOZXcgc25h cHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBz aG90CXNuYXBzaG90OwogCkBAIC00NTAsNiArNDYzLDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAK Ky8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAg IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQg cmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8q IGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01NjYsNiArNTg5LDcgQEAgc3RydWN0IFJlb3Jk ZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwog CVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBt ZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsOwogCiAJLyoKIAkgKiBDYWxs YmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFy ZSB0aW1lLgpAQCAtNjY0LDYgKzY4OCw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1 ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURE TE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwK KwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ CQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwg WExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVw T3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwotLSAKMi4zOC4xCgo= --000000000000061afb05f176f684 Content-Type: application/octet-stream; name="v59-0002-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v59-0002-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lci6gypu1 RnJvbSA3NjExMTQzYTdjMTYxMjY0Nzk2OGI5MzU2Yzk4OWI4ODg0ZjRlNzIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjEgRGVjIDIwMjIgMTc6MTU6MDggKzA1MzAKU3ViamVjdDogW1BBVENIIDIvNV0gRnVu Y3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92aWRlcyBKU09O IGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRlciBiZSByZS1w cm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UK ZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBt YWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2Rl cyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0 cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5vdCBmcm9tIHRo ZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKY29u c3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQg b24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCgpUaGlz IHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwgc3RhdGVtZW50 cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRFL0RST1AgQUND RVNTIE1FVEhPRApDUkVBVEUvQUxURVIvRFJPUCBBR0dSRUdBVEUKQ1JFQVRFL0FMVEVSL0RST1Ag Q0FTVApDUkVBVEUvQUxURVIvRFJPUCBDT0xMQVRJT04KQ09NTUVOVApDUkVBVEUvQUxURVIvRFJP UCBDT05WRVJTSU9OCkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUwpDUkVBVEUvQUxURVIvRFJPUCBE T01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgRVhURU5TSU9OCkNSRUFURS9BTFRFUi9EUk9QIEZPUkVJ R04gREFUQSBXUkFQUEVSCkNSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gVEFCTEUKQ1JFQVRFL0FM VEVSIEZVTkNUSU9OL1BST0NFRFVSRQpHUkFOVApDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvQUxU RVIvRFJPUCBMQU5HVUFHRQpDUkVBVEUvQUxURVIvRFJPUCBNQVRFUklBTElaRUQgVklFVwpDUkVB VEUvRFJPUCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBQT0xJQ1kK UkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwpSRVZPS0UKQUxURVIvRFJPUCBST1VUSU5FCkNSRUFU RS9BTFRFUi9EUk9QIFJVTEUKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUi9E Uk9QIFNFUVVFTkNFCkNSRUFURS9BTFRFUi9EUk9QIFNFUlZFUgpDUkVBVEUvQUxURVIvRFJPUCBT VEFUSVNUSUNTCkNSRUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JF QVRFL0FMVEVSL0RST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIvRElDVElPTkFS WS9URU1QTEFURQpDUkVBVEUvRFJPUCBUUkFOU0ZPUk0KQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JF QVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIvRFJPUCBVU0VSIE1BUFBJTkcKQ1JFQVRF L0FMVEVSL0RST1AgVklFVyAtLSBOb3RlICM0ClNFQ1VSSVRZIExBQkVMCgooTm90ZSAjMSkgU29t ZSByZWNlbnRseSBpbnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFSVElUSU9O RUQgVEFCTEUpIGFyZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBuZWVkIG1v cmUKZnVuY3Rpb25hbGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZvciBBVFRB Q0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBvbgp0aGUg c3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJs aXNoZXIgaXMgYSBQQVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxlIG9uIHRo ZSBzdWJjcmliZXIgc2lkZSBpcyBhIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJjaCB0aGlz IG1vcmUgYW5kIGltcHJvdmUgaXQgbGF0ZXIuCgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2ly YWJsZSAnb24nIGZyb20gdGhlIGlkZW50aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9i amVjdElkZW50aXR5UGFydHMuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9Q ClRSQU5TRk9STSBjb21tYW5kIHdvcmsgc2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUg Y3VycmVudApEUk9QIFRSQU5TRk9STSBzeW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBz eW50YXggaXMKRFJPUCBUUkFOU0ZPUk0gdHJmIEZPUiBJTlQgTEFOR1VBR0UgU1FMOwppbnN0ZWFk IG9mCkRST1AgVFJBTlNGT1JNIHRyZiBGT1IgSU5UIE9OIExBTkdVQUdFIFNRTDsKCihOb3RlICM0 KSBGb3IgVklFV1NUTVQsIHdlIGNyZWF0ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwgdG8gZ2V0 IHRoZQpTRUxFQ1QgcXVlcnkgb2YgdGhlIHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBjYXNlIHRo YXQgdGhlIENSRUFURSBWSUVXIGNvbW1hbmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdlIHdvdWxk IG5lZWQgdG8gc2VhcmNoIHRoZSBzeXN0ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZQpy ZXdyaXRlIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1w dHkgcmVzdWx0LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgICB8ICAg IDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAgIHwgOTY0NSArKysrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAg IHwgIDc3NiArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyB8ICAgIDEg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgICAgIHwgICAgMiArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaCAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJz ZS5oICAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAg fCAgIDExICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgICA0ICsK IDEwIGZpbGVzIGNoYW5nZWQsIDEwNDcwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNy ZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZp bGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAg LTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJZGJj b21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUubyBc CiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjRhY2M4Y2Q3NWEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAg KzEsOTY0NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYworICoJ ICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2Vh YmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpT T04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBi ZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRm LWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8g YWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNp bmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0aGUg aW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVt CisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMg aW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNv bW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9v a2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIERlcGFyc2Ugb2JqZWN0IHRyZWUg aXMgY3JlYXRlZCBieSB1c2luZzoKKyAqIAlhKSBuZXdfb2JqdHJlZSgia25vdyBjb250ZW50cyIp IHdoZXJlIHRoZSBjb21wbGV0ZSB0cmVlIGNvbnRlbnQgaXMga25vd24gb3IKKyAqICAgICB0aGUg aW5pdGlhbCB0cmVlIGNvbnRlbnQgaXMga25vd24uCisgKiAJYikgbmV3X29ianRyZWUoIiIpIGZv ciB0aGUgc3ludGF4IHdoZXJlIHRoZSBvYmplY3QgdHJlZSB3aWxsIGJlIGRlcml2ZWQKKyAqICAg ICBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbmFsIGNoZWNrcy4KKyAqIAljKSBuZXdfb2JqdHJlZV9W QSB3aGVyZSB0aGUgY29tcGxldGUgdHJlZSBjYW4gYmUgZGVyaXZlZCB1c2luZyBzb21lIGZpeGVk CisgKiAgICAgY29udGVudCBhbmQvb3Igc29tZSB2YXJpYWJsZSBhcmd1bWVudHMuCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2Nhc3QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19l eHRlbnNpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jl d3JpdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdHNfZGljdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJj b21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9k ZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgor I2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9k ZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1 Yy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0 aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVO IDEyOAorCisvKgorICogQmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2Vu dGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVl LCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlw ZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJ T2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlw ZTsKKworLyoKKyAqIFJlcHJlc2VudCB0aGUgY29tbWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9i amVjdCB0cmVlIHBhcmFtZXRlcnMgKi8KKwlpbnQJCQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2Yg cGFyYW1ldGVycyBpbiB0aGUgb2JqZWN0IHRyZWUgKi8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkv KiBGb3JtYXQgc3RyaW5nIG9mIHRoZSBPYmpUcmVlICovCisJYm9vbAkJcHJlc2VudDsJCS8qIElu ZGljYXRlcyBpZiBib29sZWFuIHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsK KworLyoKKyAqIEFuIGVsZW1lbnQgb2YgYW4gb2JqZWN0IHRyZWUgKE9ialRyZWUpLgorICovCit0 eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJY2hhcgkgICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9i amVjdCBlbGVtZW50ICovCisJT2JqVHlwZQkJb2JqdHlwZTsJCS8qIE9iamVjdCB0eXBlICovCisK Kwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2 NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUgICAgKm9iamVjdDsKKwkJTGlz dAkgICAqYXJyYXk7CisJfQkJCXZhbHVlOwkJCS8qIFN0b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFz ZWQgb24gdGhlIG9iamVjdAorCQkJCQkJCQkgKiB0eXBlICovCisJc2xpc3Rfbm9kZQlub2RlOwkJ CS8qIFVzZWQgaW4gY29udmVydGluZyBiYWNrIHRvIE9iakVsZW0KKwkJCQkJCQkJICogc3RydWN0 dXJlICovCit9IE9iakVsZW07CisKKy8qCisgKiBSZWR1Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJp bmdzIGZyb20gdGhlIG91dHB1dCBqc29uIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50IiBt ZW1iZXIgaXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJnZWQg aW50bworICogdGhlIGxhc3QgRERMIGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVl OworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFw cGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZh bHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBlbmRf b2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7Citz dGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAq ZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAqdmFsdWUpOworc3RhdGlj IHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAor CQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAor CQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVs dHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2Jq VHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAq bmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVt ICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3 X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0g Km5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0 cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsK K3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJ CQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJ CQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2Us CisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdl dENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJ ICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNv bXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlz dCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBz ZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJl ZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0Nv bGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkJCQkJIE9i amVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVT dG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRf VFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxl bSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlv blNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3Rh dGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9u KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAq c3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1l bnRCeShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9NYXh2YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Oworc3RhdGljIE9iakVsZW0gKmRlcGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJv b2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0 YXJ0KEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVs ZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJz ZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxl RWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRw Y29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCitzdGF0 aWMgY2hhciAqRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdf b2spOworCisvKgorICogQXBwZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitz dGF0aWMgdm9pZAorYXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5k X2Jvb2xfb2JqZWN0KHRyZWUsICJwcmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQWRkIGNv bW1vbiBjbGF1c2VzIHRvIENyZWF0ZVBvbGljeSBvciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVj dHMuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcmV0LCBP aWQgcG9saWN5T2lkLCBMaXN0ICpyb2xlcywgYm9vbCBkb19xdWFsLAorCQkJCSAgIGJvb2wgZG9f d2l0aF9jaGVjaykKK3sKKwlSZWxhdGlvbglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9n X29iamVjdF9ieV9vaWQocG9sUmVsLCBBbnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJ Rm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lE ICV1IiwgcG9saWN5T2lkKTsKKworCXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVD VChwb2xUdXApOworCisJLyogQWRkIHRoZSAiT04gdGFibGUiIGNsYXVzZSAqLworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+ cG9scmVsaWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnku ICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBV QkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlm IChyb2xlcykKKwl7CisJCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkJZm9yZWFjaChjZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChS b2xlU3BlYyAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJ CQkgICBuZXdfb2JqZWN0X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsK KwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBBZGQgdGhlIFVT SU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1YWwpCisJeworCQlEYXR1bQkJZGVwYXJz ZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhw ciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJ CSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJ CWVsb2coRVJST1IsICJudWxsIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xp Y3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0 b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiVVNJTkcgKCV7ZXhwcmVzc2lvbn1zKSIsICJleHByZXNzaW9uIiwKKwkJCQkJCQkgVGV4dERh dHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dChyZXQpOworCisJLyogQWRkIHRoZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYg KGRvX3dpdGhfY2hlY2spCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRl eHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xU dXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERl c2NyKHBvbFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51 bGwgcG9sd2l0aGNoZWNrIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBw b2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIldJVEggQ0hF Q0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJICJleHByZXNzaW9uIiwgVGV4dERhdHVtR2V0 Q1N0cmluZyhkZXBhcnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQp OworCisJcmVsYXRpb25fY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgor ICogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3Qg KmFycmF5KQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOwor CisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQly ZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBS ZW1vdmUgZWxlbWVudHMgd2hlcmUgcHJlc2VudCBmbGFnIGlzIGZhbHNlICovCisJCWZvcmVhY2go bGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICAgICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0 KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJ CSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFs dWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0 KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisK Kwl9CisKKwkvKiBDaGVjayBmb3IgZW1wdHkgbGlzdCBhZnRlciByZW1vdmluZyBlbGVtZW50cyAq LworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25h bWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlw YXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVj dF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFz c2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMg J3ByZXNlbnQnIGFuZCBpZiB5ZXMsIHN0b3JlIHRoZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8K KwlpZiAoc3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRf ZmxhZyA9IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJv c2UgJiYgIXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFn KQorCQlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUp OworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8g YSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07 CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+ dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJl ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmZtdDsKKworCWlmICh0 cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8t PmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9y IGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJ CWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogQXBwZW5k IGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251bGxf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhcgkgICAqb2JqZWN0 X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsK KworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1 Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2JqVHlw ZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFt ZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVt ICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsK KworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVj dF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOwor CisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJh bS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBh cmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFj dGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQg YXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0 aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwg Y2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25zdCBj aGFyICplbmRfcHRyOworCWNvbnN0IGNoYXIgKmNwOworCWJvb2wJCXN0YXJ0X2NvcHkgPSBmYWxz ZTsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQly ZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0 ciA9IHN1Yl9mbXQgKyBzdHJsZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3Ag PCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2Nv cHkgPSB0cnVlOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQlj b250aW51ZTsKKworCQlpZiAoKmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisK KwkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJ aWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90 IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJl dHVybiBvYmplY3RfbmFtZS5kYXRhOworfQorCisvKgorICogQXBwZW5kIGEgcHJlYWxsb2NhdGVk IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3By ZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVz aF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsK K30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitz dGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3Vi X2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJCQkgY2hhciAqdmFsdWUpCit7CisJT2JqRWxl bSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UgJiYgKHZh bHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKworCWFwcGVuZF9m b3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBl U3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFw cGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRv IGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9y bWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQu ICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0 eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlzIGV4cGVjdGVk IHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8g dGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0 aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQg dG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRoZXNlcworICoK KyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisg KiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFu ZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3Vh bCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChP aWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlw ZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwZWFycmF5KQoreworCUhl YXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJYXJyYXlfYmFz ZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXRE YXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9v aWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJ LyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0 eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5h bWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUg PSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBlYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5 cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKwor CWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFy cmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlw ZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCB0eXBlX29pZCk7CisKKwkJ dHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9 IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBjcm9jayBmb3Ig dHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkgKiB0eXBlbW9k IGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lKS4gV2Ug Y2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFt ZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQgPSBJbnZhbGlkT2lkOworCisJc3dpdGNo ICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3Ry ZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQlp ZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEgg VElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRaIGlzIGFkZGVk IGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJ CWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJ TUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYgKHR5cGVtb2Qg PCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJ CWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLwor CQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVP SUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBm b3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRp cmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5cGVmb3JtLT50 eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5 cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHByaW50 VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0eXBl bW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQorCisv KgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlv biwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExp c3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0 CSAgICpub2RlZGVmczsKKwlMaXN0CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNl bGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmco cHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJS T1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5v ZGVkZWZzKQorCXsKKwkJTm9kZQkgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRl ZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFs c2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFs dWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0 ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5D RV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VO TE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVS TUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAi IjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKgorICogUmV0dXJuIHRo ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHN0b3JhZ2V0eXBlIHZhbHVlLgor ICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgorZ2V0X3R5cGVfc3RvcmFnZShjaGFyIHN0b3JhZ2V0 eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5cGUpCisJeworCQljYXNlICdwJzoKKwkJCXJldHVy biAicGxhaW4iOworCQljYXNlICdlJzoKKwkJCXJldHVybiAiZXh0ZXJuYWwiOworCQljYXNlICd4 JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOworCQljYXNlICdtJzoKKwkJCXJldHVybiAibWFpbiI7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAl YyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0 ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFy ICpuYW1lKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVv ZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlw ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBw YXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRy ZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0 KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKwor CXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRv IHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0 cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlICAgICpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxs b2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9p bml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZv ID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZt dGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVy IHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVu dHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9uYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFj ZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBn X3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQg dHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlk ZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5l CisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQg ZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCWNo YXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQlu YW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRf bmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVM TCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwK KwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJ cmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVw ICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5 IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUgICAgKnF1 YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0J CW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0 dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmpl Y3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFi bGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFs b2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0 b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0IHdpdGgg T0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUo Y2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2Uo Y2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3Bh Y2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICZpc251bGwpOworCWlmIChp c251bGwpCisJCWVsb2coRVJST1IsICJudWxsIG5hbWVzcGFjZSBmb3Igb2JqZWN0ICV1Iiwgb2Jq ZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJl bGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxs KQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRyaWJ1dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2Jq ZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0 T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpf bmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVj dHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFs dWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBm aW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9y b2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwljaGFyCSAgICpyb2xldHlwZTsKKworCWlmIChz cGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVz cGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJcmV0 dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBl Qm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5h bWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGlu ZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gKEFDTF9JRF9Q VUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVibGljIikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9pZCByb2xlb2lkKQoreworCU9ialRyZWUgICAgKnJv bGU7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxlCXJv bHR1cDsKKwkJY2hhcgkgICAqcm9sZV9uYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hl MShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cm9sZSB3aXRoIE9JRCAldSIsIHJvbGVvaWQpOworCisJCXJvbGVfbmFtZSA9IE5hbWVTdHIoKChG b3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJcm9sZSA9IG5l d19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUkiLCAxLAorCQkJCQkJCSAgInJvbGVuYW1lIiwgT2Jq VHlwZVN0cmluZywgcHN0cmR1cChyb2xlX25hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocm9s dHVwKTsKKwl9CisJZWxzZQorCQlyb2xlID0gbmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIs IDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCAicHVibGljIik7CisKKwly ZXR1cm4gcm9sZTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBl bGVtZW50cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lk IHR5cGVJZCwgaW50MzIgdHlwbW9kKQoreworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5 cGVfbnNwOworCWNoYXIJICAgKnR5cGVfbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3Ry OworCWJvb2wJCXR5cGVfYXJyYXk7CisKKwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5 cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQsICZ0eXBlX25hbWUsICZ0eXBtb2RzdHIsICZ0eXBlX2Fy cmF5KTsKKworCWlmIChPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRfbmFt ZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBlX25zcCA9IHBzdHJk dXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkgICJzY2hl bWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZV9uc3AsCisJCQkJCQkgICJ0eXBlbmFtZSIsIE9i alR5cGVTdHJpbmcsIHR5cGVfbmFtZSwKKwkJCQkJCSAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcs IHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkp OworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1l dGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50 IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2Iu CisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFw cGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBP YmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBt dXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJl cXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2Jq VHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0 IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAq IG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQg c3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBx LnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtl IGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICov CitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpz LC4uLikKK3sKKwlPYmpUcmVlICAgICp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsK KworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVl ID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdz ICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7 IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0g ICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFf YXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKwor CQkvKgorCQkgKiBGb3IgYWxsIHBhcmFtIHR5cGVzIG90aGVyIHRoYW4gT2JqVHlwZU51bGwsIHRo ZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgorCQkgKiB0aGUgdmFyYXJncy4gRmV0Y2ggaXQgYW5kIGFk ZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZQorCQkgKiBtYWluIG9iamVjdC4K KwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkv KiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVh azsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2Fy ZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVs ZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJ Y2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywg TGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+ dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBP YmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2Jq ZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7 CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyoK KyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoK K25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOwor CisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBO VUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9 CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBP YmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lk CitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9i alRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlp ZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkg Zmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAi Zm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5LnZhbC5zdHJpbmcudmFsKTsK KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJLyogVGhlbiBwcm9j ZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZhbC50eXBlID0gamJ2U3RyaW5n OworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKwl2YWwudmFsLnN0 cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0 aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNv bmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2Jq dHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25i KHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2Vz cyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGlu dG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9f anNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJ CQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7CisJSnNvbmJWYWx1ZQl2YWw7 CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT2JqVHlwZU51bGw6CisJ CQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJdmFsLnR5 cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT52 YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT52YWx1ZS5zdHJp bmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBlID0gamJ2TnVtZXJpYzsK KwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJpYyhEaXJl Y3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVl LmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7 CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZhbC50eXBlID0gamJ2TnVt ZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVtR2V0TnVtZXJp YyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVj dC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2Vu LCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQl2YWwudHlwZSA9 IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZhbHVlLmJvb2xlYW47CisJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisK KwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkgYWRkIHRoZSBvYmplY3Qg aW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRyZWVfdG9fanNvbmJfcmVj KG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5 cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJCWZvcmVhY2goY2VsbCwgb2Jq ZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9iakVsZW0gICAgKmVsZW0gPSBsZmlyc3Qo Y2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJf RUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwg TlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsK Kwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgor ICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0 cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVl X2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRl ciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9iamVjdCA9IHNsaXN0X2NvbnRh aW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25iVmFsdWUJa2V5OworCisJCS8q IFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZh bC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJCWtleS52YWwuc3RyaW5nLnZh bCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5 KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29yZGluZyB0byBpdHMgdHlwZSAq LworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsK Kwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVM TCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJ TiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0 YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVt ZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdv cmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBhbmQgZG9tYWlucy4KKyAqCisg KiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFpbnRzIGFyZSBhbHdheXMgaWdu b3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3RyYWludHMoTGlzdCAqZWxlbWVu dHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJUmVsYXRpb24JY29uUmVsOwor CVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXBsZTsK KwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBtYXkgYmUgdmFsaWQgKi8KKwlB c3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFsaWQoZG9tYWluSWQpKTsKKwor CS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFsbCBjb25zdHJhaW50cyBsaW5r ZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJY29uUmVsID0gdGFibGVfb3Bl bihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZiAoT2lkSXNWYWxp ZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29u c3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJ CSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7CisJCVNjYW5LZXlJbml0KCZr ZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElk LAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVh Y2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4g IEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGlu Zm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBp bmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vz c2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dl dG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNo YXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJ CQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJl YWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJCS8qIG5vdCBo ZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1h cnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29u dHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6 CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIp OworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9m IHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0 aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlm ZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2Vm dWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJ Y29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9u fXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50IiwKKwkJ CQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQkibmFtZSIs IE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJCQkJCSJk ZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFwcGVuZChl bGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwg c3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxhcmdlIGFtb3VudCBvZiBjb2Rl IGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250 cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBr ZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4 ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJ CQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJ CSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVh cFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsK KwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3Jt X3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5k ZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJ T2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlE YXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNu dWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsK KwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsK KworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVDbGF1c2UgPSBOVUxMOworCisJLyogRmV0 Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhlIGluZGV4ICovCisJaHRfaWR4 ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhyZWxp ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsKKwlp ZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lkeCk7CisKKwlpbmRyZWxpZCA9 IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQgPT0gaWR4cmVjLT5pbmRleHJl bGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5kY2xhc3MsIGFuZCBpbmRvcHRp b24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVY UkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9pbmRjb2xsYXRpb24sICZp c251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRpb24gPSAob2lkdmVjdG9yICop IERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5kY2xhc3NEYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2lu ZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY2xhc3MgPSAob2lkdmVj dG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsKKworCWluZG9wdGlvbkRhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3Bn X2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZG9wdGlv biA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRvcHRpb25EYXR1bSk7CisKKwkv KiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uICovCisJaHRf aWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJl bGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRoIE9JRCAldSIsIGluZGV4cmVs aWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsK KworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5kZXgnIGFjY2VzcyBtZXRob2Qg Ki8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShpZHhy ZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2FtKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUi LAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVD VChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lvbnMsIGlmIGFueS4g IChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNpb25zIG9mIHRoZSBl eHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheQorCSAq IG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICghaGVhcF9hdHRpc251 bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7CisJCURhdHVtCQll eHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlleHByc0RhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4 X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCQlleHByc1N0cmluZyA9 IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4cHJzID0gKExpc3QgKikg c3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNTdHJpbmcpOworCX0KKwll bHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0gbGlzdF9oZWFkKGluZGV4 cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFtZShpbmRy ZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmKTsKKwor CS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJkdXAocXVvdGVfaWRlbnRp ZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRjaCB0aGUgaW5kZXggQU0n cyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmUoYW1yZWMtPmFt aGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0aW9uLiAgTm90ZSB0aGUg b3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxsZXIuCisJICovCisJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIigiKTsKKwlmb3IgKGtleW5vID0g MDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglh dHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5k b3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXlj b2xjb2xsYXRpb247CisKKwkJLyogUHJpbnQgSU5DTFVERSB0byBkaXZpZGUga2V5IGFuZCBub24t a2V5IGF0dHJzLiAqLworCQlpZiAoa2V5bm8gPT0gaWR4cmVjLT5pbmRua2V5YXR0cykKKwkJewor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIikgSU5DTFVERSAoIik7 CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg a2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkv KiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJ CWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRu dW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1 b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJl bGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJ CQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNz aW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOwor CisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcg ZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJz dChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4 cHJfaXRlbSk7CisKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9IGRlcGFyc2VfZXhwcmVzc2lv bihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQkJLyogTmVlZCBwYXJlbnMg aWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJCWlmIChpbmRleGtleSAmJiBJ c0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4cHIgKikgaW5kZXhrZXkpLT5m dW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5m bygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlrZXljb2x0eXBlID0gZXhwclR5 cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhwckNvbGxhdGlvbihpbmRleGtl eSk7CisJCX0KKworCQkvKiBQcmludCBhZGRpdGlvbmFsIGRlY29yYXRpb24gZm9yIChzZWxlY3Rl ZCkga2V5IGNvbHVtbnMsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlpZiAoa2V5bm8gPCBpZHhyZWMt PmluZG5rZXlhdHRzKQorCQl7CisJCQlPaWQgaW5kY29sbCA9IGluZGNvbGxhdGlvbi0+dmFsdWVz W2tleW5vXTsKKwkJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJCWdlbmVyYXRlX2NvbGxh dGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCQkvKiBBZGQgdGhlIG9wZXJhdG9yIGNsYXNzIG5h bWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQkJZ2V0X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFs dWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJCQkvKiBBZGQgb3B0 aW9ucyBpZiByZWxldmFudCAqLworCQkJaWYgKGFtcm91dGluZS0+YW1jYW5vcmRlcikKKwkJCXsK KwkJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVTQyBhbmQgTlVM TFMgb3B0cyAqLworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVTQykKKwkJCQl7CisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJCQkvKiBO VUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2UgKi8KKwkJCQkJaWYgKCEob3B0 ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJewor CQkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQorCQkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJCX0KKwkJCX0K KworCQkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRo aW5nPyAqLworCQl9CisJfQorCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYs ICIpIik7CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQg cmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVs aWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKwor CQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1Zh bGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihn ZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJl ZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19p bmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVk RGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmlu ZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJ CUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJl ZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJ cGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPSBk ZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwkv KiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRh aW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhl IGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBh cnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJ CSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAqZGVmdmFsOworCWNoYXIJICAgKmRlZnN0cjsK KworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBj aGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwp OworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFy dGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGlj IGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0J CWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVw bGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCByZWxpZCk7CisKKwlib3VuZERhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNz X3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RG dW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVt KFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmco ZGVwYXJzZWQpOworfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4g YSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFu ZGVkIGZ1bGx5IHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisg KiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90 b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENv bGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkgICAqY29tbWFu ZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJ aWYgKGNvbW1hbmQpCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQp KTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyQ29s bGF0aW9uU3RtdCAoQUxURVIgQ09MTEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 OgorICogQUxURVIgQ09MTEFUSU9OICV7aWRlbnRpdHl9TyBSRUZSRVNIIFZFUlNJT04KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckNvbGxhdGlvbihPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsK KwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUx KENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNv bGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29s bGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo Y29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5j b2xsbmFtZSkpKTsKKworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFMVEVSIEZVTkNUSU9O L1JPVVRJTkUvUFJPQ0VEVVJFKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRF UiBGVU5DVElPTi9ST1VUSU5FL1BST0NFRFVSRSAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjog fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRnVuY3Rpb25TdG10ICpub2RlID0gKEFs dGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07 CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RD ZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLwor CXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJaWYgKHByb2NGb3JtLT5wcm9raW5k ID09IFBST0tJTkRfUFJPQ0VEVVJFKQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgUFJPQ0VE VVJFIik7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZShub2RlLT5vYmp0eXBlID09IE9CSkVD VF9ST1VUSU5FID8KKwkJCQkJCSAgIkFMVEVSIFJPVVRJTkUiIDogIkFMVEVSIEZVTkNUSU9OIik7 CisKKwkvKgorCSAqIEFMVEVSIEZVTkNUSU9OIGRvZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28g d2UgY2FuIHVzZSBjYXRhbG9nIHRvIGdldAorCSAqIGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlm b3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpUcmVlICAg ICp0bXBfb2JqOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAor CQkJCQkJCQkidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90 eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxh cHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJc2lnbiA9 IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJ CQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImFy Z3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlICAgICp0bXBfb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAidm9sYXRpbGl0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoc3Ry VmFsKGRlZmVsLT5hcmcpKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Ry aWN0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcp ID8KKwkJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNB TExFRCBPTiBOVUxMIElOUFVUIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InNlY3VyaXR5IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVs LT5hcmcpID8KKwkJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VS Iik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDAp CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJ CSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09GIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgImNvc3QiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJD T1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJ CQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJyb3dzIikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJST1dTIik7 CisJCQlpZiAoZGVmR2V0TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBfb2JqLCAi JXtyb3dzfW4iLAorCQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2Ug aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxl U2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFy CSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBfb2Jq ID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdXBwb3J0IikgPT0gMCkK KwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi U1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkvKgor CQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0 IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2Vh cmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJCQkJCSBn ZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJ CQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJ CQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlBB UkFMTEVMICV7dmFsdWV9cyIsIDEsCisJCQkJCQkJCQkidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBz dHJWYWwoZGVmZWwtPmFyZykpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtk ZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT2JqZWN0U2NoZW1hU3Rt dCAoQUxURVIgLi4uIFNFVCBTQ0hFTUEgY29tbWFuZCkKKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0 IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisg KiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQUxURVIgJXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9 SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChP YmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9iamVjdEFk ZHJlc3Mgb2xkX3NjaGVtYSkKK3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0 ZXJPYmplY3RTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwljaGFyCSAgICppZGVudGl0eTsKKwlj aGFyCSAgICpuZXdfc2NoZW1hID0gbm9kZS0+bmV3c2NoZW1hOworCWNoYXIJICAgKm9sZF9zY2hu YW1lOworCWNoYXIJICAgKmlkZW50OworCisJLyoKKwkgKiBTaW5jZSB0aGUgY29tbWFuZCBoYXMg YWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisJICogY2F0YWxv Z3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9iamVjdCBuYW1lIHdpdGggdGhlIGFs cmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRwdXQgb2Ygb3VyIGRlcGFyc2luZyBt dXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEgbmFtZSwgaG93ZXZlciwgc28gd2Ug Y2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0eQorCSAqIHN0cmluZyBhbmQgdGhl biBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJICoKKwkgKiBYWFggVGhpcyBpcyBw cmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAqLworCWlkZW50aXR5ID0gZ2V0T2Jq ZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRfc2NobmFtZSA9IGdldF9uYW1lc3Bh Y2VfbmFtZShvbGRfc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZF9zY2huYW1lKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJ CSBvbGRfc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90 ZV9pZGVudGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsgc3RybGVuKHF1b3Rl X2lkZW50aWZpZXIobmV3X3NjaGVtYSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIDMs CisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29i anR5cGUobm9kZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpU eXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCSAgIm5ld3NjaGVtYSIsIE9ialR5cGVTdHJpbmcsIG5l d19zY2hlbWEpOworfQorCisvKgorICogRGVwYXJzZSBhIEdSQU5UL1JFVk9LRSBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBHUkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtv Ymp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMgVE8gJXtncmFudGVlczosIH1zCisgKiAle2dyYW50 X29wdGlvbn1zIEdSQU5URUQgQlkgJXtyb2xlbmFtZX1zCisgKiAJCU9SCisgKiBSRVZPS0UgJXtw cml2aWxlZ2VzOiwgfXMgT04iICV7b2JqdHlwZX1zICV7cHJpdnRhcmdldDosIH1zCisgKiBGUk9N ICV7Z3JhbnRlZXM6LCB9cyAle2dyYW50X29wdGlvbn1zICV7Y2FzY2FkZX1zCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAg ICAqdG1wOworCisJLyogRG9uJ3QgZGVwYXJzZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxl IGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlmIChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJu IE5VTEw7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFudC5pc3RtdDsKKworCS8qCisJICogSWYgdGhl cmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQs IHRoZW4KKwkgKiBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChpc3RtdC0+b2JqZWN0cyA9PSBO SUwpCisJCXJldHVybiBOVUxMOworCisJc3dpdGNoIChpc3RtdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX1NF UVVFTkNFOgorCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQljbGFzc0lkID0gVHlw ZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJY2xhc3NJZCA9 IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf Rk9SRUlHTl9TRVJWRVI6CisJCQljbGFzc0lkID0gRm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7CisJ CQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCWNhc2UgT0JKRUNUX1BST0NFRFVS RToKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJY2xhc3NJZCA9IExh bmd1YWdlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoK KwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfU0NIRU1BOgorCQkJY2xhc3NJZCA9IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVh azsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJ CQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJCWVsb2coRVJST1IsICJnbG9iYWwgb2JqZWN0cyBu b3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlzdG10LT5vYmp0eXBlKTsKKwl9CisKKwkvKiBHUkFO VCBUTyBvciBSRVZPS0UgRlJPTSAqLworCXJldCA9IG5ld19vYmp0cmVlKGlzdG10LT5pc19ncmFu dCA/ICJHUkFOVCIgOiAiUkVWT0tFIik7CisKKwkvKiBCdWlsZCBhIGxpc3Qgb2YgcHJpdmlsZWdl cyB0byBncmFudC9yZXZva2UgKi8KKwlpZiAoaXN0bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9 IG5ld19vYmp0cmVlKCJBTEwgUFJJVklMRUdFUyIpOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxzZQorCXsKKwkJY2hhciAqcHJpdjsKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lOU0VSVCkKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfSU5TRVJUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMg JiBBQ0xfU0VMRUNUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5n KEFDTF9TRUxFQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qo cHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCXsK KwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1VQREFURSk7CisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RFTEVURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfREVMRVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMg JiBBQ0xfVFJVTkNBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX1RSVU5DQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNF UykKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfUkVGRVJF TkNFUyk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7 CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1RSSUdHRVIpCisJCXsKKwkJCXBy aXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1RSSUdHRVIpOworCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9FWEVDVVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2 aWxlZ2VfdG9fc3RyaW5nKEFDTF9FWEVDVVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfVVNBR0UpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNM X1VTQUdFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYp KTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfQ1JFQVRFKQorCQl7CisJCQlw cml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DUkVBVEUpOworCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEVfVEVNUCkKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfQ1JFQVRFX1RFTVApOworCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9DT05ORUNUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9DT05ORUNUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfTUFJTlRB SU4pCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX01BSU5U QUlOKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsK KwkJfQorCisJCWlmICghaXN0bXQtPmlzX2dyYW50ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2dyYW50X29wdGlvbn1zIiwgImdyYW50X29w dGlvbiIsCisJCQkJCQkJCSBpc3RtdC0+Z3JhbnRfb3B0aW9uID8gIkdSQU5UIE9QVElPTiBGT1Ii IDogIiIpOworCisJCWlmIChpc3RtdC0+Y29sX3ByaXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENl bGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2gob2NlbGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7 CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChvY2VsbCk7CisJCQkJTGlzdAkgICAqY29s cyA9IE5JTDsKKworCQkJCWZvcmVhY2goY2VsbCwgcHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0 cmluZwkgICAqY29sbmFtZSA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29s cyA9IGxhcHBlbmQoY29scywKKwkJCQkJCQkJICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNv bG5hbWUpKSk7CisJCQkJfQorCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHM6LCB9 cykgJXtwcml2fXMiLCAyLAorCQkJCQkJCQkJICJjb2xzIiwgT2JqVHlwZUFycmF5LCBjb2xzLAor CQkJCQkJCQkJICJwcml2IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSAgcHJpdi0+cHJpdl9u YW1lID8gcHJpdi0+cHJpdl9uYW1lIDogIkFMTCBQUklWSUxFR0VTIik7CisKKwkJCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7cHJpdmlsZWdlczosIH1zIE9OIiwgbGlzdCk7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29ianR5cGV9cyIsICJvYmp0eXBlIiwKKwkJ CQkJCSAoY2hhciAqKXN0cmluZ2lmeV9vYmp0eXBlKGlzdG10LT5vYmp0eXBlLCB0cnVlKSk7CisK KwkvKiBUYXJnZXQgb2JqZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJ bGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJ b2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRk ci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9i amVjdFN1YklkID0gMDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwg MSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0 SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2 dGFyZ2V0OiwgfXMiLCBsaXN0KTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgaXN0bXQt PmlzX2dyYW50ID8gIlRPIiA6ICJGUk9NIik7CisKKwkvKiBMaXN0IG9mIGdyYW50ZWVzICovCisJ bGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJ CWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9y b2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Z3JhbnRlZXM6LCB9 cyIsIGxpc3QpOworCisJLyogVGhlIHdvcmRpbmcgb2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJp YWJsZSAuLi4gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIle2dyYW50X29wdGlvbn1zIiwgImdyYW50X29wdGlvbiIsCisJCQkJCQkJIGlzdG10 LT5ncmFudF9vcHRpb24gPyAiV0lUSCBHUkFOVCBPUFRJT04iIDogIiIpOworCisJaWYgKGlzdG10 LT5ncmFudG9yX3VpZCkKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVu YW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERh dHVtKGlzdG10LT5ncmFudG9yX3VpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVw KSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lE ICV1IiwKKwkJCQkgaXN0bXQtPmdyYW50b3JfdWlkKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIo KChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLAorCQkJCQkJCSAi cm9sZW5hbWUiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKwor CWlmICghaXN0bXQtPmlzX2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2Nh c2NhZGV9cyIsICJjYXNjYWRlIiwKKwkJCQkJCQkgaXN0bXQtPmJlaGF2aW9yID09IERST1BfQ0FT Q0FERSA/ICJDQVNDQURFIiA6ICIiKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisg KgorICogR2l2ZW4gYW4gb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9 TyAoJXtsZWZ0X3R5cGV9VCwgJXtyaWdodF90eXBlfVQpCisgKiBTRVQgKCV7ZWxlbXM6LCB9cykK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJb3ByVHVwOworCUFsdGVyT3Bl cmF0b3JTdG10ICpub2RlID0gKEFsdGVyT3BlcmF0b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlICAgICpyZXQ7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsICAgKmNl bGw7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShP UEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVy YXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0 b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9Q RVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBMRUZU QVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIigle2xlZnRfdHlwZX1zIiwgImxlZnRfdHlwZSIsICJOT05FIik7CisKKwkvKiBS SUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIsICV7cmlnaHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGws IG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZp cnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQor CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1zIiwgInByb2NlZHVyZSIsCisJCQkJ CQkJCQkgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpv aW4iKSA9PSAwKQorCQl7CisJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwK KwkJCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElz VmFsaWQob3ByRm9ybS0+b3Byam9pbikpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i aiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2lu KSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHJvY2Vk dXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0 KHRtcF9vYmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJTRVQgKCV7ZWxlbXM6LCB9 cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9QIGNv bW1hbmQuCisgKgorICogR2l2ZW4gdGhlIENvbGxlY3RlZENvbW1hbmQsIHJldHVybiBhbiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUgQWx0ZXIKKyAqIE9wZXJhdG9yIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSBBREQvRFJPUCAle2l0ZW1zOix9cworICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRy ZWUgICAgKnJldDsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkv KiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0 ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWZ0 cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChmdHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Ig ZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCSBjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmplY3RJZCk7 CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1QoZnRwKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5H ICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9i alR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZh bS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsK KwkJT2JqVHJlZSAgICAqdG1wX29iajsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkg KgorCQkgKiBPUEVSQVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9 VCkgJXtwdXJwb3NlfXMKKwkJICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFU T1IgJXtudW19biIsIDEsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVt YmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNhc2UgZG9lc24n dCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+b2Jq ZWN0KSk7CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBfb2JqLCAiKCV7bHR5cGV9VCwiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVy LT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cnR5 cGV9VCkiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0x KSk7CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZTsgbm90 IGluIHRoZSBEUk9QIGNhc2UgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWlmIChv cGVyLT5zb3J0ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkJICJGT1IgU0VBUkNI Iik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZSAgICAqb3JkZXJieV9vYmo7CisKKwkJCQlv cmRlcmJ5X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtvcGZhbWlseX1EIiwg MSwKKwkJCQkJCQkJCQkJIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkJCW9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCBvcmRlcmJ5X29iaik7CisJCQl9CisJCX0KKworCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJ Zm9yZWFjaChjZWxsLCBjbWQtPmQub3BmYW0ucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVt YmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0 eXBlfVQpIiwgMywKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIs CisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsK KworCQkvKgorCQkgKiBBZGQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERS T1AgY2FzZSBkb2Vzbid0IGhhdmUKKwkJICogdGhpcworCQkgKi8KKwkJaWYgKCFzdG10LT5pc0Ry b3ApCisJCXsKKwkJCUhlYXBUdXBsZQlwcm9jVHVwOworCQkJRm9ybV9wZ19wcm9jIHByb2NGb3Jt OworCQkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCQlMaXN0CSAgICphcmdsaXN0ID0gTklMOwor CQkJaW50CQkJaTsKKworCQkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmpl Y3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBy b2NUdXApKQorCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1 cmUgd2l0aCBPSUQgJXUiLAorCQkJCQkgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NG b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQkJYXJnID0gbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFw cGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7ZnVuY3Rpb259RCIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ ICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmlu Zyh0bXBfb2JqLCAiKCIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd0 eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAi KSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKworCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJfQorCisJaWYgKHN0bXQt PmlzRHJvcCkKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiRFJPUCIpOworCWVsc2UKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKGZ0cCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck93bmVyU3RtdCAoQUxU RVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IEFMVEVSICVzICV7aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3Ms IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChBbHRlck93bmVy U3RtdCAqKSBwYXJzZXRyZWU7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2Jq dHlwZX1zICV7aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkiLCAzLAorCQkJCQkJICAi b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUt Pm9iamVjdFR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCSAgIm5l d293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+ bmV3b3duZXIpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoKKyAq IEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVm aW5pdGlvbjogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCVJl bGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJ ICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBz ZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFT dG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJ ICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENS RUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICov CisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNl cWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVu KFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICAldSIsIG9iamVj dElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxl KTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNo ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVt LT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWlu dmFsdWUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwg Im1heHZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZv cm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3 ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChzZXFkYXRhKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVs ZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9P d25lZEJ5KG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1l LCAiYXMiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQXMoZWxlbSk7CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjog fXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVm aW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyVHlwZVN0bXQu CisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EICgle2RlZmlu aXRpb246IH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBl U2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopIGNtZDsKKwlMaXN0Q2VsbCAgICpwbDsKKwlMaXN0 CSAgICplbGVtcyA9IE5JTDsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBG b3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJ ZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJZm9y ZWFjaChwbCwgYWx0ZXJUeXBlU2V0U3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRl ZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KHBsKTsKKwkJT2JqRWxlbSAgICAqbmV3ZWxtOworCisJ CWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfVHlwZV9TdG9yYWdlKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAicmVjZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZSh0 eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5 cG1vZF9Jbih0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9v dXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQodHlwRm9ybSk7 CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAic3Vic2NyaXB0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJz Y3JpcHQodHlwRm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUgb3B0 aW9uICVzIiwgZGVmZWwtPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3 ZWxtKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5fUQgU0VUICgle2RlZmluaXRpb246IH1zKSIs IDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIG9iamVj dElkKSwKKwkJCQkJCSAgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisgKgor ICogR2l2ZW4gYSBDb21wb3NpdGUgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0 eX1EIEFTICgle2NvbHVtbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D b21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21w b3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJ SGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBl cmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisK KwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJl bGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5 cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9u TmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJ dGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRlZmxp c3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJ CQkJICB0cnVlKTsJLyogY29tcG9zaXRlIHR5cGUgKi8KKworCXRhYmxlX2Nsb3NlKHR5cGVyZWws IEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5zOiwg fXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJ CQkgICJjb2x1bW5zIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworfQorCisvKgorICogRGVw YXJzZSBhIENyZWF0ZUNvbnZlcnNpb25TdG10CisgKgorICogR2l2ZW4gYSBjb252ZXJzaW9uIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgJXtkZWZhdWx0fXMgQ09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7 c291cmNlfUwgVE8gJXtkZXN0fUwKKyAqIEZST00gJXtmdW5jdGlvbn1ECisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9y bV9wZ19jb252ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJY29udnJlbCA9 IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY29u VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZlcnNp b25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJVQ1Qo Y29uVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtkZWZhdWx0fXMgQ09O VkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwgRlJPTSAle2Z1 bmN0aW9ufUQiLCA1LAorCQkJCQkJICAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg IGNvbkZvcm0tPmNvbmRlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJCSAgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZv cm0tPmNvbm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFt ZSkpLAorCQkJCQkJICAic291cmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNoYXIgKilw Z19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSwKKwkJCQkJCSAgImRl c3QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3RvX2NoYXIo Y29uRm9ybS0+Y29udG9lbmNvZGluZyksCisJCQkJCQkgICJmdW5jdGlvbiIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSAgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2Uo Y29udnJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2 ZW4gYSBFbnVtIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVN ICgle3ZhbHVlczosIH1MKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVu dW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10 ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlMaXN0CSAgICp2YWx1ZXMg PSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykK KwkJdmFsdWVzID0gbGFwcGVuZCh2YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChsZmly c3Rfbm9kZShTdHJpbmcsIGNlbGwpKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgVFlQRSAle2lkZW50aXR5fUQgQVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkiLCAyLAorCQkJCQkJ ICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgInZhbHVlcyIsIE9i alR5cGVBcnJheSwgdmFsdWVzKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFeHRlbnNp b25TdG10CisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRVhURU5T SU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRXh0 ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBU dXBsZQlleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICp0 bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdfZXh0 ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVt X3BnX2V4dGVuc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0 VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBH RVRTVFJVQ1QoZXh0VHVwKTsKKworCS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWZvcmVhY2goY2Vs bCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYSIpID09IDAp CisJCXsKKwkJCS8qIFNraXAgdGhpcyBvbmU7IHdlIGFkZCBvbmUgdW5jb25kaXRpb25hbGx5IGJl bG93ICovCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1l LCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVS U0lPTiAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2 ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5n KG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikgPT0g MCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZST00gJXt2ZXJzaW9ufUwiLCAyLAor CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZnJvbSIsCisJCQkJCQkJCSAidmVyc2lv biIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCS8qIEFk ZCB0aGUgU0NIRU1BIG9wdGlvbiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEgJXtz Y2hlbWF9SSIsIDIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2NoZW1hIiwKKwkJ CQkJCSAic2NoZW1hIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfbmFtZXNwYWNlX25hbWUo ZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90 X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAzLAorCQkJCQkJICAiaWZfbm90X2V4 aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5l eHRuYW1lLAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7Cit9CisKKy8q CisgKiBJZiBhIGNvbHVtbiBuYW1lIGlzIHNwZWNpZmllZCwgYWRkIGFuIGVsZW1lbnQgZm9yIGl0 OyBvdGhlcndpc2UgaXQncyBhCisgKiB0YWJsZS1sZXZlbCBvcHRpb24uCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfRmR3T3B0aW9ucyhMaXN0ICpvcHRpb25zLCBjaGFyICpjb2xuYW1l KQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlmIChjb2xuYW1lKQorCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAxLAorCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgY29sbmFtZSk7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiT1BU SU9OUyIpOworCisJaWYgKG9wdGlvbnMgIT0gTklMKQorCXsKKwkJTGlzdAkgICAqb3B0b3V0ID0g TklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgb3B0aW9ucykKKwkJ eworCQkJRGVmRWxlbSAgICAqZWxlbTsKKwkJCU9ialRyZWUgICAgKm9wdDsKKworCQkJZWxlbSA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rpb24p CisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VOU1BFQzoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVf VkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBl U3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJ CSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXts YWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcs IGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdl dEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz ZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkFERCAle2xhYmVsfUkg JXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkg ZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVh bihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVM RU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwgMSwK KwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJCQkJ CWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGRlZiBhY3Rp b24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOworCQkJCQlvcHQgPSBOVUxMOworCQkJfQorCisJCQlv cHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3X29iamVjdF9vYmplY3Qob3B0KSk7CisJCX0KKwor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbjogLH1zKSIsIG9wdG91dCk7CisJ fQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZkd1N0bXQgKENSRUFURSBGT1JFSUdOIERBVEEgV1JB UFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBGT1JFSUdOIERBVEEg V1JBUFBFUiAle2lkZW50aXR5fUkgJXtoYW5kbGVyfXMgJXt2YWxpZGF0b3J9cyAle2dlbmVyaWNf b3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRmR3U3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGZHdTdG10ICpub2RlID0g KENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlmZHdUdXA7CisJRm9ybV9w Z19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWdu RGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNl YXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdp dGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9yZWln bl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJ ICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOwor CisJLyogQWRkIEhBTkRMRVIgY2xhdXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZk d2hhbmRsZXIpKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCWVsc2UKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJ CQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3Jt LT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aGFuZGxl cn1zIiwgdG1wKTsKKworCS8qIEFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJaWYgKCFPaWRJc1Zh bGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBWQUxJ REFUT1IiKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7 cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisKKwkvKiBBZGQgYW4gT1BUSU9O UyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2VuZXJp Y19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBO VUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJv d0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4g QWx0ZXJGZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBh biBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBP YmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSAle2Zk d19vcHRpb25zOiB9cyAle2dlbmVyaWNfb3B0aW9uc31ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUFsdGVyRmR3U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBU dXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJl bGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqZmR3X29wdGlvbnMgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRhdGFX cmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFyY2hT eXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRoIE9J RCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0 YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyoK KwkgKiBJdGVyYXRlIHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0IHVz ZSBjYXRhbG9nIGFzIGEKKwkgKiBiYXNpcyBmb3IgbmV3IHZhbHVlcy4KKwkgKi8KKwlmb3JlYWNo KGNlbGwsIG5vZGUtPmZ1bmNfb3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9i alRyZWUgICAgKnRtcDsKKworCQllbGVtID0gbGZpcnN0KGNlbGwpOworCisJCWlmIChwZ19zdHJj YXNlY21wKGVsZW0tPmRlZm5hbWUsICJoYW5kbGVyIikgPT0gMCkKKwkJeworCQkJLyogYWRkIEhB TkRMRVIgY2xhdXNlICovCisJCQlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxlcikp CisJCQkJdG1wID0gbmV3X29ianRyZWUoIk5PIEhBTkRMRVIiKTsKKwkJCWVsc2UKKwkJCXsKKwkJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJ CQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxl cikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGVsZW0tPmRl Zm5hbWUsICJ2YWxpZGF0b3IiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQgVkFMSURBVE9SIGNsYXVz ZSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCQkJdG1w ID0gbmV3X29ianRyZWUoIk5PIFZBTElEQVRPUiIpOworCQkJZWxzZQorCQkJeworCQkJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkg InByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikp OworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBpZiBz cGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZmR3X29wdGlvbnM6IH1z IiwgZmR3X29wdGlvbnMpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8K KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJCQkJ CSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5 c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFOR0Ug c3RhdGVtZW50CisgKgorICogR2l2ZW4gYSBSYW5nZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQ RSAle2lkZW50aXR5fUQgQVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5J TDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9wZ19y YW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNjIHNjYW47 CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9ybmd0eXBp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5nZSwg UmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJcmFu Z2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChy YW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByYW5nZSB3 aXRoIHR5cGUgT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9ybV9w Z19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIHJhbmdl Rm9ybS0+cm5nc3VidHlwZSkpOworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9p ZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1Jl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1Ym9wYykpOworCQlkZWZp bml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisKKwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxh dGlvbikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xsYXRp b259RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwK KwkJCQkJCQkgImNvbGxhdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFu Z2VGb3JtLT5ybmdjb2xsYXRpb24pKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlv biwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogQ0FOT05JQ0FMICovCisJaWYg KE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKQorCXsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLCAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSk7CisJ CWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+ cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0g JXtzdWJ0eXBlX2RpZmZ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSk7CisJCWRlZmluaXRpb24gPSBs YXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCXN5c3Rh YmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQg QVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVs YXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwg ZGVmaW5pdGlvbik7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51bVN0bXQuCisgKgor ICogR2l2ZW4gYW4gZW51bSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBBREQgVkFMVUUgJXtp Zl9ub3RfZXhpc3RzfXMgJXt2YWx1ZX1MCisgKiAle2FmdGVyX29yX2JlZm9yZX1zICV7bmVpZ2hi b3J9TAorICogCU9SCisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgVkFMVUUgJXt2 YWx1ZX1MIFRPICV7bmV3dmFsdWV9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFbnVt U3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5fUQiLCAx LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkp OworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQs ICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9ub3RfZXhp c3RzfXMiLCAiaWZfbm90X2V4aXN0cyIsCisJCQkJCQkJIG5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0 cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle3ZhbHVlfUwiLCAidmFsdWUiLCBub2RlLT5uZXdWYWwpOworCisJCWlmIChub2RlLT5uZXdW YWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXthZnRlcl9v cl9iZWZvcmV9cyIsCisJCQkJCQkJCSAiYWZ0ZXJfb3JfYmVmb3JlIiwKKwkJCQkJCQkJIG5vZGUt Pm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtuZWlnaGJvcn1MIiwgIm5laWdoYm9yIiwKKwkJCQkJCQkJIG5vZGUtPm5l d1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwgInZhbHVlIiwKKwkJCQkJCQkgbm9k ZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtuZXd2YWx1ZX1MIiwg Im5ld3ZhbHVlIiwgbm9kZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lvblN0bXQgKEFMVEVSIEVYVEVOU0lPTiAuLiBVUERB VEUgVE8gVkVSU0lPTikKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCBhIHBhcnNl IHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRVhURU5T SU9OICV7aWRlbnRpdHl9SSBVUERBVEUgJXtvcHRpb25zOiB9cworICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlBbHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10 ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1 cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlMaXN0 CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRGVmRWxlbSAgICAqZF9uZXdf dmVyc2lvbiA9IE5VTEw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJ ZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlmb3Jl YWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVy c2lvbiIpID09IDApCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcDsKKworCQkJaWYgKGRfbmV3X3Zl cnNpb24pCisJCQkJZWxvZyhFUlJPUiwgImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25z IGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkgb2JqZWN0SWQpOworCisJCQlkX25l d192ZXJzaW9uID0gb3B0OworCisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVE8gJXt2ZXJzaW9u fUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJ CQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOwor CX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1J IFVQREFURSAle29wdGlvbnM6IH1zIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBOYW1lU3RyKGV4dEZvcm0tPmV4dG5hbWUpLAorCQkJCQkJICJvcHRpb25zIiwgT2JqVHlw ZUFycmF5LCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5z aW9uQ29udGVudHNTdG10IChBTFRFUiBFWFRFTlNJT04gZXh0IEFERC9EUk9QIG9iamVjdCkKKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9SSBB REQvRFJPUCAle29iamlkZW50aXR5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwK KwkJCQkJCQkJICAgT2JqZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0ZW5z aW9uQ29udGVudHNTdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICopIHBh cnNldHJlZTsKKworCUFzc2VydChub2RlLT5hY3Rpb24gPT0gKzEgfHwgbm9kZS0+YWN0aW9uID09 IC0xKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRVhURU5TSU9OICV7ZXh0aWRl bnRpdHl9SSAle2V4dG9wdGlvbn1zICV7ZXh0b2JqdHlwZX1zICV7b2JqaWRlbnRpdHl9cyIsIDQs CisJCQkJCQkgICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJ CQkJCQkgICJleHRvcHRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5hY3Rpb24g PT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkJCSAgImV4dG9ianR5cGUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJ CQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElk ZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkpOworfQorCisvKgorICogRGVwYXJzZSBhbiBD cmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZSB0 cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBD QVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAle2Nv bnRleHR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0g KENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBU dXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJY2hhcgkgICAqY29udGV4dDsKKworCWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxhdGlv bklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlf b2lkKGNhc3RyZWwsIEFudW1fcGdfY2FzdF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBjYXN0IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdfY2Fz dCkgR0VUU1RSVUNUKGNhc3RUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBD QVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLCAyLAorCQkJCQkJICJzb3Vy Y2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0 Rm9ybS0+Y2FzdHNvdXJjZSwgLTEpLAorCQkJCQkJICJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEp KTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtt ZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSCBJTk9VVCIpOworCWVsc2Ug aWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtt ZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSE9VVCBGVU5DVElPTiIpOwor CWVsc2UKKwl7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7 CisJCUhlYXBUdXBsZQlmdW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJ CWk7CisKKwkJZnVuY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2Fz dGZ1bmMpOworCQlmdW5jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsK KworCQlpbml0U3RyaW5nSW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIl cygiLAorCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFt ZShmdW5jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQlOYW1lU3RyKGZ1bmNGb3Jt LT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKysp CisJCXsKKwkJCWlmIChpICE9IDApCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcs Jyk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmZ1bmMsCisJCQkJCQkJCSAgIGZvcm1h dF90eXBlX2JlX3F1YWxpZmllZChmdW5jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldKSk7CisJ CX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJXSVRIIEZVTkNUSU9OICV7Y2FzdGZ1bmN0aW9ufXMiLCAxLAorCQkJCQkJ CQkiY2FzdGZ1bmN0aW9uIiwgT2JqVHlwZVN0cmluZywgZnVuYy5kYXRhKTsKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXttZWNoYW5pc219cyIsIHRtcF9vYmopOworCisJCVJlbGVhc2VT eXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUtPmNvbnRleHQpCisJeworCQlj YXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJBUyBJTVBMSUNJVCI7CisJCQli cmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJY29udGV4dCA9ICJBUyBBU1NJ R05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VYUExJQ0lUOgorCQkJY29udGV4 dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBj b2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtj b250ZXh0fXMiLCAiY29udGV4dCIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyAle2luX3NjaGVtYX1zICV7Zm9yX3JvbGVz fXMgJXtncmFudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZWZhdWx0 UHJpdmlsZWdlc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJl dDsKKwlBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqc3RtdCA9IChBbHRlckRlZmF1bHRQcml2 aWxlZ2VzU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlMaXN0CSAgICpyb2xlcyA9IE5JTDsKKwlM aXN0CSAgICpzY2hlbWFzID0gTklMOworCUxpc3QJICAgKmdyYW50ZWVzOworCUxpc3QJICAgKnBy aXZzOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAg KmdyYW50OworCWNoYXIJICAgKm9ianR5cGU7CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIg REVGQVVMVCBQUklWSUxFR0VTIik7CisKKwkvKiBTY2FuIHRoZSBwYXJzZSBub2RlIHRvIGRpZyBv dXQgdGhlIEZPUiBST0xFIGFuZCBJTiBTQ0hFTUEgY2xhdXNlcyAqLworCWZvcmVhY2goY2VsbCwg c3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKwkJTGlzdENlbGwgICAqY2VsbDI7CisKKwkJQXNzZXJ0KElzQShvcHQsIERlZkVs ZW0pKTsKKwkJQXNzZXJ0KElzQShvcHQtPmFyZywgTGlzdCkpOworCQlpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgInJvbGVzIikgPT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikg b3B0LT5hcmcpCisJCQl7CisJCQkJUm9sZVNwZWMgICAqcm9sZXNwZWMgPSBsZmlyc3QoY2VsbDIp OworCQkJCU9ialRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhyb2xlc3Bl Yyk7CisKKwkJCQlyb2xlcyA9IGxhcHBlbmQocm9sZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikp OworCQkJfQorCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWFzIikg PT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikgb3B0LT5hcmcpCisJCQl7CisJ CQkJU3RyaW5nCSAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwyKTsKKworCQkJCXNj aGVtYXMgPSBsYXBwZW5kKHNjaGVtYXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7 CisJCQl9CisJCX0KKwl9CisKKwkvKiBBZGQgdGhlIElOIFNDSEVNQSBjbGF1c2UsIGlmIGFueSAq LworCXRtcCA9IG5ld19vYmp0cmVlKCJJTiBTQ0hFTUEiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcCwgIiV7c2NoZW1hczosIH1JIiwgc2NoZW1hcyk7CisJaWYgKHNjaGVtYXMgPT0gTklMKQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2luX3NjaGVtYX1zIiwgdG1wKTsKKworCS8qIEFkZCB0aGUgRk9SIFJPTEUgY2xhdXNlLCBpZiBh bnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiRk9SIFJPTEUiKTsKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRtcCwgIiV7cm9sZXM6LCB9UiIsIHJvbGVzKTsKKwlpZiAocm9sZXMgPT0gTklMKQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zv cl9yb2xlc31zIiwgdG1wKTsKKworCS8qCisJICogQWRkIHRoZSBHUkFOVCBzdWJjb21tYW5kCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKiBHUkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3Rhcmdl dH1zIFRPICV7Z3JhbnRlZXM6LCB9UiAle2dyYW50X29wdGlvbn1zCisJICogb3IKKwkgKiBSRVZP S0UgJXtncmFudF9vcHRpb259cyAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3RhcmdldH1zIEZST00g JXtncmFudGVlczosIH1SCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+aXNfZ3JhbnQpCisJCWdy YW50ID0gbmV3X29ianRyZWUoIkdSQU5UIik7CisJZWxzZQorCXsKKwkJZ3JhbnQgPSBuZXdfb2Jq dHJlZSgiUkVWT0tFIik7CisKKwkJLyogQWRkIHRoZSBHUkFOVCBPUFRJT04gY2xhdXNlIGZvciBS RVZPS0Ugc3ViY29tbWFuZCAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiR1JBTlQgT1BUSU9O IEZPUiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJIHN0bXQt PmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoZ3JhbnQsICIl e2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgcHJpdmlsZWdl cyBsaXN0LiAgVGhpcyB1c2VzIHRoZSBwYXJzZXIgc3RydWN0LCBhcyBvcHBvc2VkIHRvCisJICog dGhlIEludGVybmFsR3JhbnQgZm9ybWF0IHVzZWQgYnkgR1JBTlQuICBUaGVyZSBhcmUgZW5vdWdo IG90aGVyCisJICogZGlmZmVyZW5jZXMgdGhhdCB0aGlzIGRvZXNuJ3Qgc2VlbSB3b3J0aCBpbXBy b3ZpbmcuCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcyA9PSBOSUwpCisJCXBy aXZzID0gbGlzdF9tYWtlMShuZXdfc3RyaW5nX29iamVjdCgiQUxMIFBSSVZJTEVHRVMiKSk7CisJ ZWxzZQorCXsKKwkJcHJpdnMgPSBOSUw7CisKKwkJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24t PnByaXZpbGVnZXMpCisJCXsKKwkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3QoY2VsbCk7CisK KwkJCUFzc2VydChwcml2LT5jb2xzID09IE5JTCk7CisJCQlwcml2cyA9IGxhcHBlbmQocHJpdnMs IG5ld19zdHJpbmdfb2JqZWN0KHByaXYtPnByaXZfbmFtZSkpOworCQl9CisJfQorCisJYXBwZW5k X2FycmF5X29iamVjdChncmFudCwgIiV7cHJpdmlsZWdlczosIH1zIiwgcHJpdnMpOworCisJc3dp dGNoIChjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgor CQkJb2JqdHlwZSA9ICJUQUJMRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9O OgorCQkJb2JqdHlwZSA9ICJGVU5DVElPTlMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1JP VVRJTkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VRVUVOQ0VTIjsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9UWVBFOgorCQkJb2JqdHlwZSA9ICJUWVBFUyI7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUFTIjsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIGZvciBkZWZhdWx0 IHByaXZpbGVnZXMiLCBjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSk7CisJfQorCisJLyogQWRkIHRo ZSB0YXJnZXQgb2JqZWN0IHR5cGUgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudCwgIk9O ICV7dGFyZ2V0fXMiLCAidGFyZ2V0Iiwgb2JqdHlwZSk7CisKKwkvKiBBZGQgdGhlIGdyYW50ZWUg bGlzdCAqLworCWdyYW50ZWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5n cmFudGVlcykKKwl7CisJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICAgICpvYmogPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYyk7 CisKKwkJZ3JhbnRlZXMgPSBsYXBwZW5kKGdyYW50ZWVzLCBuZXdfb2JqZWN0X29iamVjdChvYmop KTsKKwl9CisKKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwl7CisJCWFwcGVuZF9hcnJh eV9vYmplY3QoZ3JhbnQsICJUTyAle2dyYW50ZWVzOiwgfVIiLCBncmFudGVlcyk7CisKKwkJLyog QWRkIHRoZSBXSVRIIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIEdSQU5UIHN1YmNvbW1hbmQgKi8K KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggR1JBTlQgT1BUSU9OIiwgMSwKKwkJCQkJCQkg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFudF9vcHRp b24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0 bXApOworCX0KKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICJGUk9NICV7Z3Jh bnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 Z3JhbnR9cyIsIGdyYW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFs bCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCU9ialRyZWUgICAgKnRt cF9vYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlvbglyZWw7CisJTGlzdAkgICAq c3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7 CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJYm9vbAkJaXN0YWJsZSA9IGZhbHNlOworCUxpc3QJ ICAgKmV4cHJzID0gTklMOworCU9pZAkJCXJlbElkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQ7CisJQWx0ZXJUYWJsZVN0bXQgKnN0bXQgPSBOVUxMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9 PSBTQ1RfQWx0ZXJUYWJsZSk7CisJc3RtdCA9IChBbHRlclRhYmxlU3RtdCAqKSBjbWQtPnBhcnNl dHJlZTsKKwlBc3NlcnQoSXNBKHN0bXQsIEFsdGVyVGFibGVTdG10KSk7CisKKwkvKgorCSAqIEFM VEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHBy b2Nlc3NlZCBpbgorCSAqIHRoZSB0b3AgbGV2ZWwgQ1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVy biBlbXB0eSBoZXJlLgorCSAqLworCWlmIChzdG10LT50YWJsZV9saWtlKQorCQlyZXR1cm4gTlVM TDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp LAorCQkJCQkJCQkJcmVsSWQpOworCisJc3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7 CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlpc3RhYmxlID0gdHJ1ZTsKKwkJCWJyZWFr OworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRF WDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVX OgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9T SVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlH TiBUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX01BVFZJRVc6CisJCQlyZWx0eXBl ID0gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJCWJyZWFrOworCisJCQkvKiBUT0RPIHN1cHBvcnQg Zm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7CisJfQorCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCIsIDIsCisJ CQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLCByZWx0eXBlLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbC0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykK Kwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZp cnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBz dWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZSAgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNt ZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJICAgLyoKKwkJKiBTa2lwIGRlcGFyc2Ugb2YgdGhlIHN1 YmNvbW1hbmQgaWYgdGhlIG9iamVjdElkIGRvZXNuJ3QgbWF0Y2ggdGhlCisJCSogdGFyZ2V0IHJl bGF0aW9uIElELiBJdCBjYW4gaGFwcGVuIGZvciBpbmhlcml0ZWQgdGFibGVzIHdoZW4KKwkJKiBz dWJjb21tYW5kcyBmb3IgaW5oZXJpdGVkIHRhYmxlcyBhbmQgdGhlIHBhcmVudCB0YWJsZSBhcmUg Ym90aAorCQkqIGNvbGxlY3RlZCBpbiB0aGUgQUxURVIgVEFMQkUgY29tbWFuZCBmb3IgdGhlIHBh cmVudCB0YWJsZS4gV2l0aCB0aGUKKwkJKiBleGNlcHRpb24gb2YgdGhlIGludGVybmFsbHkgZ2Vu ZXJhdGVkIEFkZENvbnN0cmFpbnQgKGZvcgorCQkqIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5U IEZPUkVJR04gS0VZIFJFRkVSRU5DRVMpIHdoZXJlIHRoZQorCQkqIG9iamVjdElkcyBjb3VsZCBt aXNtYXRjaCAoZm9yZWluIHRhYmxlIGlkIGFuZCB0aGUgcmVmZXJlbmNlZCB0YWJsZQorCQkqIGlk KS4KKwkJKi8KKwkJaWYgKChzdWItPmFkZHJlc3Mub2JqZWN0SWQgIT0gcmVsSWQgJiYKKwkJCSBz dWItPmFkZHJlc3Mub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkgJiYKKwkJCSEoc3ViY21kLT5zdWJ0 eXBlID09IEFUX0FkZENvbnN0cmFpbnQgJiYKKwkJCSAgc3ViY21kLT5yZWN1cnNlKSAmJgorCQkJ aXN0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7 CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1 cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVt bkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFs c2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXtvYmp0eXBlfXMgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJCSJp Zl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdf b2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5 cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleENv bnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVsYXRpb24J aWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkJ CQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKElu ZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQoaXN0bXQtPmlzY29uc3RyYWlu dCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlzdG10LT5p bmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5 bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFp bnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9uYW1lfUkgJXtkZWZlcnJhYmxl fXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJ TkRFWCAle2luZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDYs CisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5n IGluZGV4IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWlu dF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJCSJjb25zdHJhaW50X3R5cGUiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+cHJpbWFyeSA/ICJQUklNQVJZIEtFWSIgOiAiVU5J UVVFIiwKKwkJCQkJCQkJCQkJImluZGV4X25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpLAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5kZWZlcnJhYmxlID8gIkRFRkVSUkFC TEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImluaXRfZGVmZXJyZWQiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+aW5pdGRlZmVycmVkID8gIklOSVRJQUxMWSBE RUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCQkJCQlyZWxhdGlv bl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlj YXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2Ug QVRfUmVBZGRDb21tZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNhc2Ug QVRfQ2hlY2tOb3ROdWxsOgorCQkJY2FzZSBBVF9SZUFkZFN0YXRpc3RpY3M6CisJCQkJLyogU3Vi dHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJlICov CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29va2VkQ29sdW1uRGVmYXVsdDoKKwkJCQl7CisJ CQkJCVJlbGF0aW9uCWF0dHJyZWw7CisJCQkJCUhlYXBUdXBsZQlhdHR0dXA7CisJCQkJCUZvcm1f cGdfYXR0cmlidXRlIGF0dFN0cnVjdDsKKworCQkJCQlhdHRycmVsID0gdGFibGVfb3BlbihBdHRy aWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJCQkJYXR0dHVwID0gU2VhcmNo U3lzQ2FjaGVDb3B5MihBVFROVU0sCisJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShSZWxh dGlvbkdldFJlbGlkKHJlbCkpLAorCQkJCQkJCQkJCQkJIEludDE2R2V0RGF0dW0oc3ViY21kLT5u dW0pKTsKKwkJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHR1cCkpCisJCQkJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYXR0cmlidXRlICVkIG9mIHJlbGF0aW9uIHdp dGggT0lEICV1IiwKKwkJCQkJCQkgc3ViY21kLT5udW0sIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7 CisJCQkJCWF0dFN0cnVjdCA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHR1cCk7 CisKKwkJCQkJLyoKKwkJCQkJICogQm90aCBkZWZhdWx0IGFuZCBnZW5lcmF0aW9uIGV4cHJlc3Np b24gbm90IHN1cHBvcnRlZAorCQkJCQkgKiB0b2dldGhlci4KKwkJCQkJICovCisJCQkJCWlmICgh YXR0U3RydWN0LT5hdHRnZW5lcmF0ZWQpCisJCQkJCQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRl ZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwor CQkJCQloZWFwX2ZyZWV0dXBsZShhdHR0dXApOworCQkJCQl0YWJsZV9jbG9zZShhdHRycmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEFUX0FkZENv bHVtblRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8g ZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJ aWYgKHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlz dAkgICAqZHBjb250ZXh0X3JlbDsKKwkJCQkJSGVhcFR1cGxlCWF0dHJ0dXA7CisJCQkJCUF0dHJO dW1iZXIJYXR0bm87CisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xV TU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBjb250ZXh0X3JlbCA9IGRlcGFyc2VfY29udGV4 dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQkJUmVsYXRp b25HZXRSZWxpZChyZWwpKTsKKwkJCQkJYXR0cnR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCWF0dG5vID0gKChGb3Jt X3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHJ0dXApKS0+YXR0bnVtOworCQkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJ CQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWwsIGF0dG5vLAorCQkJCQkJCQkJ CQkJCQkJCSAgZHBjb250ZXh0X3JlbCwKKwkJCQkJCQkJCQkJCQkJCQkgIE5VTEwpKTsKKwkJCQkJ UmVsZWFzZVN5c0NhY2hlKGF0dHJ0dXApOworCQkJCX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9Ecm9wTm90TnVsbDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9G b3JjZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiRk9SQ0UgUk9XIExF VkVMIFNFQ1VSSVRZIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX05vRm9yY2VSb3dT ZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIk5PIEZPUkNFIFJPVyBMRVZFTCBT RUNVUklUWSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXROb3ROdWxsOgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIE5P VCBOVUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51 bGwiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lP TiAle2lmX2V4aXN0c31zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUsCisJCQkJCQkJCQkJImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ CQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1 YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNU SUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCQkic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2Vy LAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVs c2UKKwkJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fW4gU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIs IE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwg T2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5k ZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRPcHRpb25zOgor CQkJY2FzZSBBVF9SZXNldE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkJCQkJCQkgZGVwYXJzZV9Db2x1bW5TZXRPcHRp b25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJ CUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMi LCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJ CQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJ CSJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBz dWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRDb21wcmVzc2lv bjoKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJImNvbXByZXNzaW9uX21ldGhvZCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYpKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtjb2x1bW59SSIs IDQsCisJCQkJCQkJCQkJIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlw ZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAi IiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iajIpOworCisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4OgorCQkJCXsKKwkJCQkJT2lkCQkJaWR4T2lkID0g c3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJbmRleFN0bXQgICppc3RtdDsKKwkJCQkJUmVs YXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICppZHhuYW1lOworCQkJCQlPaWQJCQljb25zdHJP aWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7CisJCQkJCWlz dG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlpZiAoIWlzdG10LT5pc2Nv bnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJCQlpZHggPSByZWxhdGlvbl9vcGVuKGlkeE9p ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRfb2lk KAorCQkJCQkJCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIGlkeG5hbWUsIGZh bHNlKTsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcs IGlkeG5hbWUsCisJCQkJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJ CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBY WFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJ CQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsK KwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAq Y29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJ CQkJY29uc3RyID0gY2FzdE5vZGUoQ29uc3RyYWludCwgc3ViY21kLT5kZWYpOworCisJCQkJCWlm ICghY29uc3RyLT5za2lwX3ZhbGlkYXRpb24pCisJCQkJCXsKKwkJCQkJCXR1cCA9IFNlYXJjaFN5 c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElkR2V0RGF0dW0oY29uc3RyT2lkKSk7CisKKwkJCQkJ CWlmIChIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQkJCQl7CisJCQkJCQkJY2hhcgkgICAqY29u YmluOworCisJCQkJCQkJLyogRmV0Y2ggY29uc3RyYWludCBleHByZXNzaW9uIGluIHBhcnNldHJl ZSBmb3JtICovCisJCQkJCQkJdmFsID0gU3lzQ2FjaGVHZXRBdHRyKENPTlNUUk9JRCwgdHVwLAor CQkJCQkJCQkJCQkJICBBbnVtX3BnX2NvbnN0cmFpbnRfY29uYmluLCAmaXNudWxsKTsKKworCQkJ CQkJCWlmICghaXNudWxsKQorCQkJCQkJCXsKKwkJCQkJCQkJY29uYmluID0gVGV4dERhdHVtR2V0 Q1N0cmluZyh2YWwpOworCQkJCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIHN0cmluZ1RvTm9k ZShjb25iaW4pKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJ CQkJCX0KKwkJCQkJfQorCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlw ZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVm aW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dldF9jb25zdHJhaW50ZGVm X2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9 IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50 ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8qIElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQs IHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJaWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJ CQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQoSXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJy YWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwgNCwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0 cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmZXJy YWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWMtPmRlZmVycmFibGUgPyAiREVGRVJS QUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWMtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVG RVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFr OworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludDoKKwkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJ CQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkgJXtpZl9ub3RfZXhpc3Rz fXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWlu dCIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJj b25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBlOgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXR1 cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0 dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNb c3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICop IHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJ LyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5 cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2Rh dGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRSSUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJ CQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQ RQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJ CQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1z ICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAle2RhdGF0eXBlfVQiLCA0LAorCQkJCQkJCQkJCQki b2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUi IDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNv bHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCQkgYXR0 LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVk ICovCisJCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9p ZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pKQorCQkJCQl7CisJCQkJCQlPYmpUcmVlICAgICpj b2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo Q29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9u KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmoyLCAiJXtuYW1lfUQiLCBjb2xs bmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y29sbGF0aW9ufXMi LCB0bXBfb2JqMik7CisKKwkJCQkJLyogSWYgbm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUg VVNJTkcgY2xhdXNlICovCisJCQkJCWlmICghaXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJ CQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNsYXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQK KwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRyYW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJ CQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNvb2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNl CisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICovCisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wX29iajIsICIle2V4cHJlc3Npb259cyIsCisJCQkJCQkJCQkJCQkgImV4 cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIHN1Yi0+dXNpbmdleHByKTsKKwkJCQkJCWVsc2UKKwkJ CQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOworCQkJCQkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wX29iaiwgIiV7dXNpbmd9cyIsIHRtcF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCS8q IElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJ CQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJDQVND QURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5iZWhhdmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJ CQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIsIHRtcF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVt bkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3Qg Kikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJCXN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFr OworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAorCQkJCQkJCQkJCSJvd25lciIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9DbHVzdGVyT246CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJCQkJCQkJImluZGV4IiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENs dXN0ZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVS IiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVz dGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dH RUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wT2lkczoKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQlj YXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNF VCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21ldGhvZH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNzIG1ldGhvZCIsCisJCQkJCQkJCQkJImFjY2Vzc19t ZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNF VCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkJInRhYmxlc3BhY2UiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9T ZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9SZXNldFJlbE9wdGlvbnM6CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QoCisJCQkJCQkJCQkJCQkJCQkgZGVw YXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9F bmFibGVUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIg JXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmln Z2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdh eXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0 cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBy ZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIs CisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRS SUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxl IHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJp Z1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNF UiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2Vy IHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1 bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi RU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQ TElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxl OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJ CQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BJbmhlcml0OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi Tk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJCSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9G ICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQg b2YiLAorCQkJCQkJCQkJCSJ0eXBlX29mIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdf b2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo Ik5PVCBPRiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgo UmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJ eworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkRF RkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoK KwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQi LAorCQkJCQkJCQkJCQkgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0Ff SURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIl e2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFr OworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXBfb2JqMiA9IG5l d19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAle2luZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkJICJp bmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCQkgKChSZXBsaWNhSWRlbnRpdHlTdG10 ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtpZGVudH1zIiwgdG1wX29iajIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJ CXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9u X2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFj aCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJ aWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwK KwkJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3VuZCIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFy dGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJ CQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoKKwkJCXsKKwkJCQlQYXJ0aXRpb25DbWQgKmNtZDsK KworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFBhcnRpdGlvbkNtZCkpOworCQkJCWNtZCA9 IChQYXJ0aXRpb25DbWQgKikgc3ViY21kLT5kZWY7CisKKwkJCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCAle2NvbmN1cnJl bnR9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSJk ZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25S ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJ CQkJCQkJCWNtZC0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKwkJCX0KKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uRmluYWxpemU6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50 aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRl dGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVl ICAgICpzZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAgKmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3Vi Y21kLT5kZWY7CisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBp ZGVudGl0eSIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBz dWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKworCQkJCQlpZiAoT2lkSXNWYWxpZChz ZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5 KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIkFERCAle2lkZW50aXR5X2NvbHVtbn1zIiwgc2VxZGVmKTsKKwkJ CQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5Ogor CQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsK KwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJ T2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChzdWJjbWQtPmRlZikKKwkJCQkJeworCQkJCQkJTGlz dAkgICAqZGVmID0gKExpc3QgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJZGVmZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVsZW0s IGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRlZkdldEludDMyKGRlZmVsKTsKKwkJCQkJfQorCisJ CQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5h bWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVs aWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKworCQkJCQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQp KQorCQkJCQl7CisJCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxp ZCwgaWRlbnRpdHksIHRydWUpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwg IiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIElERU5USVRZIiwgMiwKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkiY29s dW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcF9vYmosICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwK KwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQg YWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJy ZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRF UiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJ dCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNo IGNhc2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQor CQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0 aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxp c2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2Fu IGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMKKwkJICogYWNjZXNzZWQg aW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci4K KwkJICovCisJCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykp CisJCQllbG9nKEVSUk9SLCAiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5j dGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpOworCisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0 IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0 aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJ dGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1 YmNtZHMpID09IDApCisJCXJldHVybiBOVUxMOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQs ICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRh YmxlIGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4g ZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0 aW9uIGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisg KiBlbHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55 d2F5KS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtj b21wcmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cyAle2NvbGxhdGlvbn1zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBM aXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYs IGJvb2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2Jq VHJlZSAgICAqdG1wX29iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRp b24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOwor CU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJv b2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRl ZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4K KwkgKgorCSAqIFhYWCBtYXliZSBpdCBpcyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNl bnQgPSBmYWxzZSIgb3Igc29tZQorCSAqIHN1Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xv Y2FsKQorCQlyZXR1cm4gTlVMTDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUo cmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXAp KQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBc IiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0 dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRf YXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBp ZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtu YW1lfUkgJXtjb2x0eXBlfVQiLCAzLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNv bHVtbiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJ CQkJCQkgImNvbHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKHR5cGlkLCB0eXBtb2QpKTsKKworCWlmICghY29tcG9zaXRlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJTVE9SQUdFICV7Y29sc3RvcmFnZX1zIiwgImNvbHN0b3JhZ2UiLAorCQkJ CQkJCSBnZXRfdHlwZV9zdG9yYWdlKGF0dHJGb3JtLT5hdHRzdG9yYWdlKSk7CisKKwkvKiBVU0lO RyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYg KGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIl e2NvbXByZXNzaW9uX21ldGhvZH1JIiwKKwkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIGNv bGRlZi0+Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBf b2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29tcHJlc3Npb259cyIs IHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9p ZElzVmFsaWQodHlwY29sbGF0aW9uKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwg IiV7bmFtZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBjb2xsYXRpb24pKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2NvbGxhdGlvbn1zIiwgdG1wX29iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJ CXNlcXJlbGlkID0gSW52YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVj bGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBw Z19hdHRyaWJ1dGUuYXR0bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0 CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQg YSBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0 bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0 cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVy IHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4gKEZvcnR1bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBj b25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0 aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERl ZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZh bHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0 cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNv bnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCXsKKwkJCQlzYXdfbm90bnVsbCA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVm LT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICIle25vdF9udWxsfXMiLCAibm90X251bGwiLAorCQkJCQkJCSBzYXdfbm90 bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJERUZB VUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRl ZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3Ry OworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3Ry KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZGVmYXVsdH1zIiwgdG1wX29iaik7CisKKwkJLyogSURF TlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJCQlh dHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlk ID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWxpZCwgYXR0bm8sIGZhbHNlKTsKKwkJfQorCisJCWlm IChPaWRJc1ZhbGlkKHNlcXJlbGlkKSkKKwkJeworCQkJdG1wX29iaiA9IGRlcGFyc2VfQ29sdW1u SWRlbnRpdHkoc2VxcmVsaWQsIGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVyKTsKKwkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBfb2JqKTsKKwkJ fQorCisJCS8qIEdFTkVSQVRFRCBDT0xVTU4gRVhQUkVTU0lPTiAqLworCQl0bXBfb2JqID0gbmV3 X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7 CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZv cm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsCisJCQkJ CQkJCSAiZ2VuZXJhdGlvbl9leHByIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCB0bXBfb2JqKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0 clR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBu b2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRo YW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5 cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkg cmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1Qg TlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFp bnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtu YW1lfUkgV0lUSCBPUFRJT05TICV7ZGVmYXVsdH1zICV7bm90X251bGx9cy4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRpb24sIExp c3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZSAgICAqcmV0ID0g TlVMTDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUg YXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xs YXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJU dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZp bmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNv bGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBH RVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJG b3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisK KwkvKgorCSAqIFNlYXJjaCBmb3IgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFy c2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9uCisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhl IGNvbHVtbiByYXRoZXIgdGhhbiBjb2xkZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRp bmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxURVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0g ZmFsc2U7CisJZm9yZWFjaChjZWxsLCBjb2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3Ry YWludCAqY29uc3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25z dHItPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1 ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0t PmF0dGhhc2RlZikKKwl7CisJCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJaWYgKGF0dHJG b3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFyCSAgICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVs YXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJ CQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2Jq LCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1J IFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMiLCA0LAorCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5n LCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgIm5vdF9udWxsIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIiwKKwkJCQkJCSAiZGVmYXVsdCIsIE9i alR5cGVPYmplY3QsIHRtcF9vYmopOworCisJLyogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBz dXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZSAqLworCisJUmVsZWFzZVN5 c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IGRlZmluaXRpb24gb2YgY29sdW1uIGlkZW50aXR5LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBTRVQgR0VORVJBVEVEICV7b3B0aW9ufXMgJXtpZGVudGl0eV90eXBlfXMgJXtzZXFfZGVmaW5p dGlvbjogfXMKKyAqIAlPUgorICogR0VORVJBVEVEICV7b3B0aW9ufXMgQVMgSURFTlRJVFkgJXtp ZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5 LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpp ZGVudF9vYmo7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJUmVsYXRpb24JcmVsOworCUhlYXBU dXBsZQlzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHNlcWRhdGE7CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10 OworCisJaWYgKGFsdGVyX3RhYmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAi OworCQlvYmpmbXQgPSAiJXtvcHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0g IkdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7CisJfQor CisJaWRlbnRfb2JqID0gbmV3X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09 IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50 X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09 IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChp ZGVudF9vYmosIG9iamZtdCwgIm9wdGlvbiIsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQoaWRlbnRfb2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2lk ZW50aXR5X3R5cGV9cyIsIDEsCisJCQkJCQkgImlkZW50aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0 LCBpZGVudF9vYmopOworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJv d0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJ RCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJ CQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qo c2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKwor CS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX0NhY2hlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgYWx0ZXJfdGFi bGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZv cm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9N YXh2YWx1ZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNlcWRhdGEpKTsKKwkvKiBXZSBwdXJw b3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3RhYmxl KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c2VxX2RlZmluaXRpb246IH1zIiwgZWxl bXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoICV7c2VxX2RlZmluaXRp b246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9S RVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1 bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJ ICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJ Ym9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRPcHRpb25zOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JICV7b3B0aW9ufXMi LCAyLAorCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJ CQkgIm9wdGlvbiIsIE9ialR5cGVTdHJpbmcsIGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiKTsK KworCWZvcmVhY2goY2VsbCwgKExpc3QgKikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAg ICplbGVtOworCQlPYmpUcmVlICAgICpzZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKwkJc2V0ID0gZGVwYXJzZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0 cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0 KHNldHMpOworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNl dHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIENSRUFURSBET01B SU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRE9NQUlOICV7aWRl bnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtjb25zdHJhaW50c31zCisgKiAle2Nv bGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRG9tYWluKE9p ZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICp0bXBfb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZv cm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisJY2hhcgkgICAqZGVmdmFsOworCisJdHlwVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRv bWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIERPTUFJ TiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVsbH1zIiwgMywKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBiYXNldHlwZSwKKwkJ CQkJCQkJCQkJICB0eXBGb3JtLT50eXB0eXBtb2QpLAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlwbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7 CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRzKE5JTCwgSW52YWxpZE9pZCwgb2Jq ZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJeworCQl0bXBfb2JqID0gbmV3X29i anRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWVsc2UKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRzOiwgfXMiLCAxLAorCQkJCQkJCQki ZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRzKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle2NvbnN0cmFpbnRzfXMiLCB0bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdf b2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlv bikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQljb2xsbmFtZSA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkgICB0 eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi JXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0bXBf b2JqKTsKKworCWRlZnZhbCA9IERvbWFpbkdldERlZmF1bHQodHlwVHVwLCB0cnVlKTsKKwlpZiAo ZGVmdmFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJERUZBVUxUICV7ZGVmYXVsdH1z IiwgImRlZmF1bHQiLCBkZWZ2YWwpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JF QVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqCisgKiBDUkVB VEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1cmV9cyBSRVRVUk5TICV7cmV0dXJu X3R5cGV9cworICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dp bmRvd31zICV7dm9sYXRpbGl0eX1zCisgKiAle3BhcmFsbGVsX3NhZmV0eX1zICV7bGVha3Byb29m fXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmluZXJ9cworICogJXtjb3N0fXMgJXtyb3dzfXMg JXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtvYmpmaWxlfUwsCisgKiAle3N5bWJv bH1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRnVuY3Rpb24oT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRnVuY3Rpb25TdG10ICpub2RlID0g KENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcF9vYmo7CisJRGF0dW0JCXRtcGRhdHVtOworCWNoYXIJICAgKnNvdXJjZTsK KwljaGFyCSAgICpwcm9iaW4gPSBOVUxMOworCUxpc3QJICAgKnBhcmFtczsKKwlMaXN0CSAgICpk ZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3QJICAgKnR5cGVzID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3VyZGVmOworCUxpc3RDZWxsICAgKnRh YmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHBy b2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJICAgKnR5cGFycmF5OworCU9pZAkJ ICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJaW50CQkJaTsKKwlp bnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWludAkJCXBhcmFtY291bnQgPSBsaXN0X2xl bmd0aChub2RlLT5wYXJhbWV0ZXJzKTsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5jdGlv bjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXND YWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGgg T0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRT VFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGdfbGFuZ3VhZ2Ug dHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUxKExBTkdPSUQsIHByb2NGb3JtLT5w cm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgcHJv Y0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVD VChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVzZWZ1bCB2YWx1ZXMgZm9yIHByb3Ny YyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2JpbgorCSAqIGJlaW5nIGVpdGhlciBOVUxM IG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxpZCB2YWx1ZS4KKwkgKi8KKwl0bXBk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1f cGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJu dWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlzb3VyY2Ug PSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKworCS8qIERldGVybWluZSBhIHVzZWZ1 bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09J RCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYmluLCAmaXNudWxsKTsKKwlp ZiAoIWlzbnVsbCkKKwl7CisJCXByb2JpbiA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0p OworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21wKHByb2JpbiwgIi0iKSA9PSAwKQor CQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7 b3JfcmVwbGFjZX1zIiwgMSwKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8g Y29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9t IHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0 aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgsIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVy cyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZQorCSAqIE9JRCBmcm9tIHByb2FyZ3R5 cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoCisJ ICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhwYXJh bWNvdW50ICogc2l6ZW9mKE9pZCkpOworCWlmIChwYXJhbWNvdW50ID4gcHJvY0Zvcm0tPnByb25h cmdzKQorCXsKKwkJRGF0dW0JCWFsbHR5cGVzOworCQlEYXR1bQkgICAqdmFsdWVzOworCQlib29s CSAgICpudWxsczsKKwkJaW50CQkJbmVsZW1zOworCisJCWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRB dHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hbGxhcmd0 eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAibnVsbCBwcm9h bGxhcmd0eXBlcywgbW9yZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGFuIGFyZ3MgaW4gZnVuY3Rp b24gd2l0aCBPSUQgJXUiLAorCQkJCSBvYmplY3RJZCk7CisJCWRlY29uc3RydWN0X2FycmF5KERh dHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScs CisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gcGFy YW1jb3VudCkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOwor CQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSB2YWx1 ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKysp CisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQor CisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQg dGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBhcyBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0 YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZh dWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9u R2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hl YWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVm ID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIg aW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJ ICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5w YXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFy YW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCQlPYmpU cmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpuYW1lOworCisJCS8qCisJCSAqIEEg UEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgZW5kIG9mIGlucHV0IGFyZ3VtZW50 czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4g dHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBj dXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQgd2UKKwkJICogY2FuIGVhc2lseSBw cm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9 PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJl YWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21v ZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1bHR9cworCQkgKi8KKwkJcGFyYW1f b2JqID0gbmV3X29ianRyZWVfVkEoIiV7bW9kZX1zIiwgMSwKKwkJCQkJCQkJICAibW9kZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAi T1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9V VCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fVkFSSUFESUMgPyAiVkFS SUFESUMiIDoKKwkJCQkJCQkJICAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3Vw cHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisJCW5hbWUgPSBuZXdfb2JqdHJlZSgi Iik7CisJCWlmIChwYXJhbS0+bmFtZSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG5hbWUsICIl e25hbWV9SSIsICJuYW1lIiwgcGFyYW0tPm5hbWUpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9u dWxsX29iamVjdChuYW1lLCAiJXtuYW1lfUkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChuYW1l KTsKKwkJfQorCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7bmFtZX1zIiwg bmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQ b2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIJICAgKmV4cHI7CisK KwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMg bGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsICJ2YWx1ZSIsIGV4cHIpOwor CQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBw ZW5kX25vdF9wcmVzZW50KGRlZmF1bHR2YWwpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBh cmFtX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJy YXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwg IiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMs IG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCX0KKworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmco dG1wX29iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3VtZW50 czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2JqLCAiKSIpOwor CisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVSRSk7 CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlVOQ1RJ T04gJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBfb2JqKTsKKworCS8qCisJICog QSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBmb3JtczogZWl0aGVyIGEgW1NFVE9G XSBzb21lX3R5cGUsCisJICogb3IgYSBUQUJMRShsaXN0LW9mLXR5cGVzKS4gIFdlIGNhbiB0ZWxs IHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdworCSAqIGEgdGFibGUgcGFyYW0gYWJvdmUg d2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJICovCisJaWYgKHRhYmxlX3BhcmFt cyA9PSBOVUxMKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJ CQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wX29iaiwgIiV7c2V0b2Z9cyIsICJzZXRvZiIsCisJCQkJCQkJIHByb2NGb3Jt LT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9y bS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcmV0dHlwZXMg PSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkJInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywg InRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0g bG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25Q YXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle3R5cGV9VCIsIDIsCisJCQkJCQkJCQkgICJuYW1l IiwgT2JqVHlwZVN0cmluZywgcGFyYW0tPm5hbWUsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVt KytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29i amVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwg Iigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJSRVRVUk5TICV7cmV0dXJuX3R5cGV9cyIsIHRt cF9vYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAs ICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9VCIsIDEsCisJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUodHJmdHlwZXNb aV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0eXBlcywgdG1wX29iaik7CisJfQorCisJaWYg KHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2Zvcl90eXBlOiwgfXMi LCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBfb2JqKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkxBTkdVQUdFICV7bGFuZ3VhZ2V9SSIsICJsYW5n dWFnZSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3dpbmRvd31zIiwgIndp bmRvdyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9XID8gIldJ TkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7dm9sYXRpbGl0eX1z IiwgInZvbGF0aWxpdHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRpbGUgPT0gUFJPVk9M QVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/CisJCQkJCQkJICJTVEFCTEUiIDog IklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFyYWxsZWxf c2FmZXR5fXMiLAorCQkJCQkJCSAicGFyYWxsZWxfc2FmZXR5IiwKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPworCQkJCQkJCSAiUEFSQUxMRUwgU0FG RSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfUkVTVFJJ Q1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVEIiA6ICJQQVJBTExFTCBVTlNBRkUi KTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2xlYWtwcm9vZn1zIiwgImxlYWtw cm9vZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJvb2YgPyAiTEVBS1BST09GIiA6ICIi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzdHJpY3R9cyIsICJzdHJpY3QiLAor CQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9O IE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBOVUxMIElOUFVUIik7CisKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzZWN1cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSAi c2VjdXJpdHlfZGVmaW5lciIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJ CSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Y29zdH1zIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNP U1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9hdCwKKwkJCQkJ CQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIlJP V1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wX29iaiwgIiV7 cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3Jvd3N9cyIsIHRtcF9vYmopOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9S VCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJ CWFyZ3R5cGVzW10gPSB7IElOVEVSTkFMT0lEIH07CisKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQg cXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUgaWYgaXQgd291bGRuJ3QgYmUKKwkJ CSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVudCBzZWFyY2ggcGF0aC4KKwkJCSAq LworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFtZX1zIiwgIm5hbWUiLAor CQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwK KwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEws CisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 c3VwcG9ydH1zIiwgdG1wX29iaik7CisJfQorCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisK KwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlh YmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQlj aGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBf b2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVl KTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c2V0X29wdGlvbnM6IH1zIiwg c2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lz Q2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAm aXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNu dWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYp OworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJ CSBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9PSBOVUxMKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICJBUyAle2RlZmluaXRpb259TCIsICJkZWZpbml0aW9uIiwgc291cmNl KTsKKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle29iamZpbGV9 TCIsICJvYmpmaWxlIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiLCAl e3N5bWJvbH1MIiwgInN5bWJvbCIsIHNvdXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxh bmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtk ZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKyAqICV7YW1uYW1lfUkgJXtvcGZhbWls eX1zIEFTICV7aXRlbXM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBj bWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0SWQ7CisJSGVhcFR1cGxlCW9wY1R1cDsKKwlI ZWFwVHVwbGUJb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29w Y2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNl IFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYg KGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW9wY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3Bj bGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9w ZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBm YW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9y bV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1bHR9cyBGT1IgVFlQ RSAle3R5cGV9VCBVU0lORyAle2FtbmFtZX1JIiwgNCwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpLAorCQkJ CQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0 ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2ludHlwZSwgLTEpLAorCQkJCQkJICJh bW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpKTsK KworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlLCBidXQgaWYgaXQgaGFzIHRoZSBzYW1l IG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNsYXNzLCB0aGVuIGhhdmUgaXQgZXhw YW5kIHRvIGVtcHR5IGJlY2F1c2UgaXQgd291bGQgY2F1c2UgYSBmYWlsdXJlCisJICogaWYgdGhl IG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwKKwkJCQkJCQkib3BmYW1pbHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5v cGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSkpKTsK KworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSwgTmFtZVN0cihvcGNGb3Jt LT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZuYW1lc3BhY2UgPT0gb3BjRm9ybS0+ b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle29wZmFtaWx5fXMiLCB0bXBfb2JqKTsKKworCS8qCisJICog QWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFH RSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBj b21tYW5kLgorCSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5vcGNrZXl0eXBlKSA/CisJCQkJCQkJCQkJCSAg b3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAt MSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwor CS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQu Y3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0 KGNlbGwpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biAl e29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9i alR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJCSJvcGVyYXRvciIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQlvcGVyLT5vYmplY3QpLAorCQkJCQkJCQkibHR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlw ZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJLyogQWRkIHRoZSBGT1Ig U0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Blci0+c29ydGZhbWlseSA9 PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHVycG9z ZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJ CQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKworCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZSgiRk9S IE9SREVSIEJZICV7b3BmYW1pbHl9RCIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i ajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkp KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsIHRtcF9v YmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICov CisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZh bWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJ CUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJ ICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhl YXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkgcHJvYy0+b2JqZWN0KTsKKwkJ cHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9 VCkgJXtmdW5jdGlvbn1EIiwgNCwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9j LT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19v Ymp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJCSJydHlwZSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlw ZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkJIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlwZXMgPSBwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmFyZzsKKworCQkJYXJnID0gbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3QgPSBsYXBwZW5k KGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi JXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0Nh Y2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZU9wRmFtaWx5U3RtdCAoQ1JFQVRFIE9QRVJBVE9S IEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIG9wZXJhdG9yIGZhbWlseSBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcGZUdXA7CisJSGVhcFR1cGxlCWFtVHVwOworCUZv cm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2FtCWFtRm9ybTsKKwlPYmpUcmVlICAg ICpyZXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNU UlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElk R2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFt VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRo b2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisJYW1Gb3JtID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIsIDIsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9w ZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0 cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNl U3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q3JlYXRlUG9saWN5U3RtdCAoQ1JFQVRFIFBPTElDWSkKKyAqCisgKiBHaXZlbiBhIHBvbGljeSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ1JFQVRFIFBPTElDWSAle2lkZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZm ICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBub2Rl LT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyUG9saWN5U3RtdCAoQUxURVIg UE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgb2Yg dGhlIEFMVEVSIFBPTElDWSBjb21tYW5kLCByZXR1cm4KKyAqIGFuIE9ialRyZWUgcmVwcmVzZW50 aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQ T0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQ b2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyUG9saWN5 U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1J IiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFt ZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1 c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJ CSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0bXQuCisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3Jp emF0aW9ufXMKKyovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9k ZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqYXV0aDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU0NIRU1B ICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIiwgMiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJ U1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5z Y2hlbWFuYW1lID8gbm9kZS0+c2NoZW1hbmFtZSA6ICIiKTsKKworCWF1dGggPSBuZXdfb2JqdHJl ZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAorCQkJCQkJCSAiYXV0aG9y aXphdGlvbl9yb2xlIiwKKwkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUp KTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlv bl9yb2xlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KGF1dGgpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAq Lworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29s IG1pc3Npbmdfb2spCit7CisJRGF0dW0JCWRlZjsKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkg ICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsKKworCWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBF T0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0YmluLAorCQkJCQkJICAmaXNudWxs KTsKKwlpZiAoaXNudWxsKQorCXsKKwkJaWYgKCFtaXNzaW5nX29rKQorCQkJZWxvZyhFUlJPUiwg ImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUiLAorCQkJCU5hbWVT dHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApKS0+dHlwbmFtZSkpOworCQllbHNl CisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVt R2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBO VUxMIC8qIGRwY29udGV4dD8gKi8gLAorCQkJCQkJCQlmYWxzZSwgZmFsc2UpOworCisJcmV0dXJu IGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBERUZBVUxU CisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCAle2RlZmF1 bHR9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTAor ICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxMCisgKiBPUgor ICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRf bmFtZX1zICV7ZGVmaW5pdGlvbn1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9 RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7Y29uc3RyYWludF9uYW1lfXMgJXtjYXNjYWRl fXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJ TlQgJXtjb25zdHJhaW50X25hbWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCU9iamVj dEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21haW5TdG10ICpub2RlID0gKEFs dGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCWRvbVR1cDsKKwlGb3JtX3Bn X3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlkb21UdXAgPSBTZWFyY2hTeXND YWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9t VHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2UgJ1QnOgorCQkJLyog U0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5kZWYgPT0gTlVMTCkK KwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9Q IERFRkFVTFQiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVm YXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQllbHNlCisJCQkJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIERFRkFVTFQgJXtk ZWZhdWx0fXMiLCAzLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZh dWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkJICJkZWZhdWx0Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBEb21haW5HZXREZWZhdWx0KGRvbVR1cCwgZmFsc2Up KTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1AgTk9UIE5V TEwiLCAyLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxs IiwKKwkJCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CQkJCSAgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdP JzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5 cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7 CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKgorCQkJICogQUREIENPTlNUUkFJTlQuICBP bmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkKKwkJCSAqIGRvbWFpbnMKKwkJ CSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQg QUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyAle2RlZmluaXRpb259cyIsIDQsCisJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRv bUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJ ZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19n ZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJhaW50QWRkci5vYmplY3RJZCkp OworCQkJYnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RSQUlOVCAqLwor CQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBWYWxpZGF0aW9u IGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8KKwkJCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFZBTElEQVRFIENPTlNU UkFJTlQgJXtjb25zdHJhaW50X25hbWV9cyIsIDMsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlw bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAor CQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5hbWUpOwor CQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJeworCQkJCU9ialRyZWUgICAgKnRtcF9vYmo7CisK KwkJCQkvKiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7Y29uc3Ry YWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag Y29uc3RyYWludCIsCisJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkJCSJjb25z dHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uYW1lKTsKKworCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpU eXBlQm9vbCwgbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iaik7CisJCQl9CisJCQlicmVh azsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2Rl LT5zdWJ0eXBlKTsKKwl9CisKKwkvKiBEb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0YXRzU3RtdC4K KyAqCisgKiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTVEFUSVNUSUNTICV7 aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBPTiAle2V4cHI6LCB9cyBGUk9NICV7c3RhdF90 YWJsZV9pZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3Rh dGlzdGljc1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3Rh dHNTdG10ICpub2RlID0gKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJRm9ybV9wZ19z dGF0aXN0aWNfZXh0IHN0YXRmb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHVw OworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJTGlzdAkgICAqc3RhdGV4cHJzID0g TklMOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1 cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6 ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5h bWVTdHIoc3RhdGZvcm0tPnN0eG5hbWUpKSk7CisKKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihT VEFURVhUT0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhleHBycywKKwkJCQkJCQkm aXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCQlSZWxhdGlv bglzdGF0c3JlbDsKKwkJTGlzdAkgICAqY29udGV4dDsKKwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7 CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJCXN0YXRzcmVsID0gcmVsYXRpb25fb3Blbihz dGF0Zm9ybS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWNvbnRleHQgPSBkZXBhcnNl X2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRzcmVsKSwKKwkJCQkJCQkJ CSAgUmVsYXRpb25HZXRSZWxpZChzdGF0c3JlbCkpOworCisJCWV4cHJzU3RyaW5nID0gVGV4dERh dHVtR2V0Q1N0cmluZyhkYXR1bSk7CisJCWV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4 cHJzU3RyaW5nKTsKKworCQlmb3JlYWNoKGxjLCBleHBycykKKwkJeworCQkJTm9kZQkgICAqZXhw ciA9IChOb2RlICopIGxmaXJzdChsYyk7CisJCQljaGFyCSAgICpzdGF0ZXhwcjsKKworCQkJc3Rh dGV4cHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZXhwciwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsK KwkJCXN0YXRleHBycyA9IGxhcHBlbmQoc3RhdGV4cHJzLCBuZXdfc3RyaW5nX29iamVjdChzdGF0 ZXhwcikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJPTiAle2V4cHI6LCB9 cyIsIHN0YXRleHBycyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwkJcmVsYXRpb25fY2xvc2Uo c3RhdHNyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4a2V5cywKKwkJCQkJ CQkmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWludAkJCWtleW5vOworCQljaGFyCSAg ICphdHRuYW1lOworCQlMaXN0CSAgICpzdGF0Y29scyA9IE5JTDsKKwkJaW50MnZlY3RvciAqaW5k b3B0aW9uOworCisJCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihk YXR1bSk7CisKKwkJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaW5kb3B0aW9uLT5kaW0xOyBrZXlu bysrKQorCQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoc3RhdGZvcm0tPnN0eHJlbGlkLCBp bmRvcHRpb24tPnZhbHVlc1trZXlub10sCisJCQkJCQkJCSAgZmFsc2UpOworCQkJc3RhdGNvbHMg PSBsYXBwZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5nX29iamVjdChhdHRuYW1lKSk7CisJCX0KKwor CQlpZiAoaW5kb3B0aW9uLT5kaW0xKQorCQl7CisJCQkvKiBBcHBlbmQgYSAnLCcgaWYgc3RhdGV4 cHJzIGlzIHByZXNlbnQgZWxzZSBhcHBlbmQgJ09OJyAqLworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiJXtjb21tYX1zIiwgImNvbW1hIiwKKwkJCQkJCQkJIHN0YXRleHBycyA/ICIsIiA6 ICJPTiIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbHM6LCB9cyIsIHN0YXRj b2xzKTsKKwkJfQorCX0KKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00gJXtzdGF0 X3RhYmxlX2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShnZXRf cmVsX25hbWVzcGFjZShzdGF0Zm9ybS0+c3R4cmVsaWQpLAorCQkJCQkJCQkJCQkJICBnZXRfcmVs X25hbWUoc3RhdGZvcm0tPnN0eHJlbGlkKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVGb3JlaWduU2VydmVy U3RtdCAoQ1JFQVRFIFNFUlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IFNFUlZFUiAle2lkZW50aXR5fUkgJXt0eXBlfXMgJXt2ZXJzaW9ufXMgRk9SRUlHTiBEQVRBIFdS QVBQRVIgJXtmZHd9SQorICogJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICpub2RlID0gKENyZWF0ZUZv cmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTRVJWRVIgJXtpZGVu dGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2 ZXJuYW1lKTsKKworCS8qIEFkZCBhIFRZUEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZSgiVFlQRSIpOworCWlmIChub2RlLT5zZXJ2ZXJ0eXBlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXAsICIle3R5cGV9TCIsICJ0eXBlIiwgbm9kZS0+c2VydmVydHlwZSk7CisJZWxz ZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICIle3R5cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICov CisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAobm9kZS0+dmVyc2lvbikKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVyc2lvbiIsIG5vZGUt PnZlcnNpb24pOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt2ZXJzaW9ufXMiLCB0bXApOworCisJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SSIsICJmZHciLAorCQkJCQkJ IG5vZGUtPmZkd25hbWUpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8K KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJ CSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAoQUxURVIg U0VSVkVSKQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRl ciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVJWRVIgJXtpZGVu dGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUFsdGVyRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQWx0ZXJGb3Jl aWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqdG1wOworCisJLyogQWRk IGEgVkVSU0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9O Iik7CisJaWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZlcnNpb24iLCBub2RlLT52ZXJzaW9u KTsKKwllbHNlIGlmIChub2RlLT5oYXNfdmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAidmVyc2lvbiIsICJ2ZXJzaW9uIiwgIk5VTEwiKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtp ZGVudGl0eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAorCQkJCQkJICAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICAidmVy c2lvbiIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAgImdlbmVyaWNfb3B0aW9ucyIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkgIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBO VUxMKSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUExhbmdTdG10LgorICoKKyAqIEdp dmVuIGEgbGFuZ3VhZ2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9 cyBMQU5HVUFHRSAle2lkZW50aXR5fXMgSEFORExFUiAle2hhbmRsZXJ9RAorICogJXtpbmxpbmV9 cyAle3ZhbGlkYXRvcn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFu Z1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUExhbmdTdG10 ICpub2RlID0gKENyZWF0ZVBMYW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0 OworCU9ialRyZWUgICAgKnRtcDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlGb3JtX3BnX2xhbmd1 YWdlIGxhbmdGb3JtOworCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELAorCQkJ CQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1 YWdlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3Vh Z2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUg JXtvcl9yZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1zIiwgMywKKwkJ CQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0cnVzdGVkIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBsYW5nRm9ybS0+bGFucGx0cnVzdGVkID8gIlRSVVNURUQiIDogIiIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cGxuYW1lKTsKKworCWlmIChub2RlLT5wbGhh bmRsZXIgIT0gTklMKQorCXsKKwkJLyogQWRkIHRoZSBIQU5ETEVSIGNsYXVzZSAqLworCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICJIQU5ETEVSICV7aGFuZGxlcn1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSBsYW5nRm9ybS0+bGFucGxjYWxsZm9pZCkpOworCisJCS8qIEFkZCB0aGUgSU5MSU5FIGNs YXVzZSwgaWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTkxJTkUiKTsKKwkJaWYgKE9p ZElzVmFsaWQobGFuZ0Zvcm0tPmxhbmlubGluZSkpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcCwgIiV7aGFuZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0t PmxhbmlubGluZSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lubGluZX1zIiwgdG1wKTsKKworCQkvKiBB ZGQgdGhlIFZBTElEQVRPUiBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgi VkFMSURBVE9SIik7CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKQor CQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKTsKKwkJfQorCQllbHNlCisJ CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXt2YWxpZGF0b3J9cyIsIHRtcCk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoK KyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VR VUVOQ0UgJXtpZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl U2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpy ZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7 CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJl bGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRl U2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVu Y2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJM RSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJaWYgKGNy ZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXFkYXRhID0g Z2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29w ZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5j ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQp OworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOwor CisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgZmFsc2UpKTsKKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGZhbHNl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9y bSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQo c2VxZGF0YSkpOworCisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhl cmUgKi8KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNF UVVFTkNFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAle2RlZmluaXRpb246IH1zIiwg NCwKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJz aXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJp Zl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBjcmVhdGVTZXFTdG10LT5pZl9u b3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7 CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Nsb3Nl KHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVuIGEgdGFi bGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3Rz fXMgJXtpZGVudGl0eX1EIFtPRgorICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0YgJXtwYXJl bnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisgKiAle2luaGVyaXRzfXMgJXtwYXJ0 aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMKKyAqICV7b25fY29t bWl0fXMgJXt0YWJsZXNwYWNlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5v ZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxh dGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4 dDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICps aXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5 fUQiLCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0 X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJ CQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9l eGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVs LT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bGF0aW9uKSkpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkvKgorCSAq IFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9y bWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMgd2l0aCBwYXJl bnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYgdGhlcmUgYXJl IG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2VzIG11c3Qgbm90IGJlIGVtaXR0ZWQ7CisJICogYW5k IGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgorCSAqLwor CWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxpc3QJICAg KnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUgZWxlbWVu dHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vycm91bmRl ZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNsYXVzZSB3b3VsZCBjYXVz ZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNlIGFuIGluZGlyZWN0aW9u IGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJlIG5vIGVs ZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCXsKKwkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0xKTsK KwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1wX29iaik7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICpwYXJlbnRzOworCQkJT2JqRWxlbSAgICAq ZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKTsKKwkJ CWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0KGxpc3Rf bGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJQ QVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwYXJlbnRf aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFi bGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMs IGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsIC8qIHR5cGVkIHRhYmxlICovCisJCQkJCQkJ CQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29u c3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wX29iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcF9vYmopOworCX0KKwllbHNlCisJeworCQlMaXN0 CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBw cm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBi ZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJ CS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQg Y29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFp bmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRz IHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBt aWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0 cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0 aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLAkvKiBu b3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAq LworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJ bnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UKKwkJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIigpIik7CisKKwkJLyoKKwkJICogQWRkIGluaGVyaXRh bmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qgb2YKKwkJ ICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRo ZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRpb25zLiAg UmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRoZSBpbmZv cm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1cmF0ZSBh bmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLworCQl0bXBf b2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChub2RlLT5pbmhSZWxhdGlvbnMg IT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1E KSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJeworCQkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQpIik7CisJCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wX29iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtpbmhlcml0c31zIiwgdG1wX29iaik7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJU QUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCAidGFibGVzcGFjZSIsCisJCQkJCQkJ IG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3Qo dG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBf b2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJ CSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFM VUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQg cGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUgcGFy c2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHBy ZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9u X2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOwor CX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIl e2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkgcGdfZ2V0X3BhcnRrZXlkZWZf c2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9v YmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2J5fXMiLCB0bXBfb2Jq KTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiVVNJTkci KTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhvZCIsCisJCQkJCQkJIG5vZGUt PmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmos ICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wX29i aik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIp OworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1w X29iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwor CQl0bXBfb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iajIpKTsKKwl9CisKKwlpZiAobGlzdCkK KwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wX29iaik7CisKKwlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAoQ1JFQVRFIEZPUkVJR04gVEFCTEUp LgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICogQ1JFQVRFIEZPUkVJR04gVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1ECisgKiBbKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zCisgKiAg fCBQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RCAoJXt0eXBlZF90YWJsZV9lbGVtZW50 czosIH1zKSAle3BhcnRpdGlvbl9ib3VuZH1zXQorICogU0VSVkVSICV7c2VydmVyfUkgJXtnZW5l cmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZvcmVp Z25UYWJsZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRm9y ZWlnblRhYmxlU3RtdCAqc3RtdCA9IChDcmVhdGVGb3JlaWduVGFibGVTdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1No YXJlTG9jayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUgICAgKmNyZWF0ZVN0bXQ7 CisJT2JqVHJlZSAgICAqdG1wb2JqOworCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCWNy ZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIEZPUkVJR04gVEFCTEUiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsICJpZl9ub3Rf ZXhpc3RzIiwKKwkJCQkJCSBzdG10LT5iYXNlLmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNU UyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24t PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lkZW50 aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisJaWYg KHN0bXQtPmJhc2UucGFydGJvdW5kKQorCXsKKwkJLyogUGFydGl0aW9uZWQgdGFibGUgKi8KKwkJ TGlzdAkgICAqcGFyZW50czsKKwkJT2JqRWxlbSAgICAqZWxlbTsKKworCQlwYXJlbnRzID0gZGVw YXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOworCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRp YWwocGFyZW50cyk7CisKKwkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJ CWFwcGVuZF9mb3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJQQVJUSVRJT04gT0YiKTsKKworCQlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJ CQkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9U YWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAor CQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJ Lyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJs ZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigl e2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcG9iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7dHlw ZWRfdGFibGVfZWxlbWVudHN9cyIsIHRtcG9iaik7CisKKwkJLyoKKwkJICogQWRkIHRoZSBwYXJ0 aXRpb25fYm91bmRfc3BlYywgaS5lLiB0aGUgRk9SIFZBTFVFUyBjbGF1c2UuCisJCSAqIEdldCBw Z19jbGFzcy5yZWxwYXJ0Ym91bmQuIFdlIGNhbm5vdCB1c2UgcGFydGJvdW5kIGluIHRoZSBwYXJz ZXRyZWUKKwkJICogZGlyZWN0bHkgYXMgaXQncyB0aGUgb3JpZ2luYWwgcGFydGJvdW5kIGV4cHJl c3Npb24gd2hpY2ggaGF2ZW4ndAorCQkgKiBiZWVuIHRyYW5zZm9ybWVkLgorCQkgKi8KKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFy dGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJ ZCkpOworCisJCS8qIE5vIFBBUlRJVElPTiBCWSBjbGF1c2UgZm9yIENSRUFURSBGT1JFSUdOIFRB QkxFICovCisJfQorCWVsc2UKKwl7CisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50 cyhyZWxhdGlvbiwgc3RtdC0+YmFzZS50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkg IGZhbHNlLAkJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5v dCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRz LCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9h cnJheV9vYmplY3QoY3JlYXRlU3RtdCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVl bHRzKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIigpIik7 CisKKwkJLyoKKwkJKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBz aW1wbHkgc2NhbiB0aGUgbGlzdCBvZgorCQkqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUs IGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUgYWN0dWFsCisJCSogcXVhbGlmaWVkIG5hbWVzIG9m IHRoZSBwYXJlbnQgcmVsYXRpb25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSogcmUtcmVz b2x2ZSB0aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVt cworCQkqIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2lu aGVyaXRzLgorCQkqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiSU5IRVJJVFMiKTsKKwkJaWYg KHN0bXQtPmJhc2UuaW5oUmVsYXRpb25zICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3Qo dG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElk KSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVu dHM6LCB9RCkiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCQl9CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0K KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICJTRVJWRVIgJXtzZXJ2ZXJ9SSIs ICJzZXJ2ZXIiLCBzdG10LT5zZXJ2ZXJuYW1lKTsKKworCS8qIGFkZCBhbiBPUFRJT05TIGNsYXVz ZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7Z2VuZXJp Y19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhzdG10LT5vcHRpb25zLCBO VUxMKSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3Rt dCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCisJc3dpdGNoIChkZWZpbmUt PmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9E ZWZpbmVTdG10X0FnZ3JlZ2F0ZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9D T0xMQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihvYmplY3RJ ZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJ cmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwgZGVmaW5lKTsKKwor CQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVT dG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBP QkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rp b25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQly ZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCisJ CWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RT VGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCXJl dHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5kOiAlZCIsIGRlZmlu ZS0+a2luZCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBGb3JtIGFuIE9iakVs ZW0gdG8gYmUgdXNlZCBhcyBhIHNpbmdsZSBhcmd1bWVudCBpbiBhbiBhZ2dyZWdhdGUgYXJndW1l bnQKKyAqIGxpc3QKKyAqLworc3RhdGljIE9iakVsZW0gKgorZm9ybV9hZ2dfYXJndW1lbnQoaW50 IGlkeCwgY2hhciAqbW9kZXMsIGNoYXIgKipuYW1lcywgT2lkICp0eXBlcykKK3sKKwlPYmpUcmVl CSAgICphcmc7CisKKwlhcmcgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlhcHBlbmRfc3RyaW5nX29i amVjdChhcmcsICIle21vZGV9cyIsICJtb2RlIiwKKwkJCQkJCSAobW9kZXMgJiYgbW9kZXNbaWR4 XSA9PSAndicpID8gIlZBUklBRElDIiA6ICIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChhcmcs ICIle25hbWV9cyIsICJuYW1lIiwgbmFtZXMgPyBuYW1lc1tpZHhdIDogIiIpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGFyZywgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZSh0eXBlc1tpZHhdLCAtMSkpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGFyZyk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIEFHR1JFR0FURSkKKyAqCisg KiBHaXZlbiBhIGFnZ3JlZ2F0ZSBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0 aGUgQ1JFQVRFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBBR0dS RUdBVEUgJXtpZGVudGl0eX1EKCV7dHlwZXN9cykgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShPaWQgb2JqZWN0SWQsIERl ZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICBhZ2dUdXA7CisJSGVhcFR1cGxlICAg cHJvY1R1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAg ICpsaXN0OworCURhdHVtCQlpbml0dmFsOworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX2FnZ3Jl Z2F0ZSBhZ2c7CisJRm9ybV9wZ19wcm9jIHByb2M7CisJRm9ybV9wZ19vcGVyYXRvciBvcDsKKwlI ZWFwVHVwbGUJdHVwOworCisJYWdnVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFHR0ZOT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFnZ1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhZ2dyZWdhdGUgd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJYWdnID0gKEZvcm1fcGdfYWdncmVnYXRlKSBHRVRTVFJVQ1Qo YWdnVHVwKTsKKworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRH ZXREYXR1bShhZ2ctPmFnZ2Zub2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGgg T0lEICV1IiwKKwkJCSBhZ2ctPmFnZ2Zub2lkKTsKKwlwcm9jID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKHByb2NUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgQUdHUkVHQVRF Iik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvYy0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJICBOYW1lU3RyKHByb2MtPnByb25hbWUpKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgYXJndW1l bnQgbGlzdC4gIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB0byBjb25zaWRlcjoKKwkgKgorCSAqIDEu IG5vIGFyZ3VtZW50cywgaW4gd2hpY2ggY2FzZSB0aGUgc2lnbmF0dXJlIGlzICgqKS4KKwkgKgor CSAqIDIuIE5vdCBhbiBvcmRlcmVkLXNldCBhZ2dyZWdhdGUuICBJbiB0aGlzIGNhc2UgdGhlcmUn cyBvbmUgb3IgbW9yZQorCSAqIGFyZ3VtZW50cy4KKwkgKgorCSAqIDMuIE9yZGVyZWQtc2V0IGFn Z3JlZ2F0ZXMuIFRoZXNlIGhhdmUgemVybyBvciBtb3JlIGRpcmVjdCBhcmd1bWVudHMsIGFuZAor CSAqIG9uZSBvciBtb3JlIG9yZGVyZWQgYXJndW1lbnRzLgorCSAqCisJICogV2UgZG9uJ3QgbmVl ZCB0byBjb25zaWRlciBkZWZhdWx0IHZhbHVlcyBvciB0YWJsZSBwYXJhbWV0ZXJzLCBhbmQgdGhl CisJICogb25seSBtb2RlIHRoYXQgd2UgbmVlZCB0byBjb25zaWRlciBpcyBWQVJJQURJQy4KKwkg Ki8KKworCWlmIChwcm9jLT5wcm9uYXJncyA9PSAwKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChz dG10LCAiKCV7dHlwZXN9cykiLCAidHlwZXMiLCAiKiIpOworCWVsc2UgaWYgKCFBR0dLSU5EX0lT X09SREVSRURfU0VUKGFnZy0+YWdna2luZCkpCisJeworCQlpbnQJCQlpOworCQlpbnQJCQluYXJn czsKKwkJT2lkCQkgICAqdHlwZXM7CisJCWNoYXIJICAgKm1vZGVzOworCQljaGFyCSAgKipuYW1l czsKKworCQluYXJncyA9IGdldF9mdW5jX2FyZ19pbmZvKHByb2NUdXAsICZ0eXBlcywgJm5hbWVz LCAmbW9kZXMpOworCisJCS8qIG9ubHkgZGlyZWN0IGFyZ3VtZW50cyBpbiB0aGlzIGNhc2UgKi8K KwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCXsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlw ZXMpKTsKKwkJfQorCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2RpcmVjdDosIH1zIiwgMSwK KwkJCQkJCQkgImRpcmVjdCIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHN0bXQsICIoJXt0eXBlc31zKSIsIHRtcCk7CisJfQorCWVsc2UKKwl7CisJCWludAkJ CWk7CisJCWludAkJCW5hcmdzOworCQlPaWQJCSAgICp0eXBlczsKKwkJY2hhcgkgICAqbW9kZXM7 CisJCWNoYXIJICAqKm5hbWVzOworCisJCW5hcmdzID0gZ2V0X2Z1bmNfYXJnX2luZm8ocHJvY1R1 cCwgJnR5cGVzLCAmbmFtZXMsICZtb2Rlcyk7CisKKwkJLyogZGlyZWN0IGFyZ3VtZW50cyAuLi4g Ki8KKwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IGFnZy0+YWdnbnVtZGlyZWN0YXJn czsgaSsrKQorCQl7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBmb3JtX2FnZ19hcmd1bWVudChp LCBtb2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCX0KKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7 ZGlyZWN0OiwgfXMiLCAxLAorCQkJCQkJCSAiZGlyZWN0IiwgT2JqVHlwZUFycmF5LCBsaXN0KTsK KworCQkvKgorCQkgKiAuLi4gYW5kIGFnZ3JlZ2F0ZWQgYXJndW1lbnRzLiAgSWYgdGhlIGxhc3Qg ZGlyZWN0IGFyZ3VtZW50IGlzCisJCSAqIFZBUklBRElDLCB3ZSBuZWVkIHRvIHJlcGVhdCBpdCBo ZXJlIHJhdGhlciB0aGFuIHNlYXJjaGluZyBmb3IgbW9yZQorCQkgKiBhcmd1bWVudHMuICAoU2Vl IGFnZ3JfYXJncyBwcm9kdWN0aW9uIGluIGdyYW0ueSBmb3IgYW4gZXhwbGFuYXRpb24uKQorCQkg Ki8KKwkJaWYgKG1vZGVzICYmIG1vZGVzW2FnZy0+YWdnbnVtZGlyZWN0YXJncyAtIDFdID09ICd2 JykKKwkJeworCQkJbGlzdCA9IGxpc3RfbWFrZTEoZm9ybV9hZ2dfYXJndW1lbnQoYWdnLT5hZ2du dW1kaXJlY3RhcmdzIC0gMSwKKwkJCQkJCQkJCQkJCW1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCWxpc3QgPSBOSUw7CisJCQlmb3IgKGkgPSBhZ2ctPmFnZ251bWRp cmVjdGFyZ3M7IGkgPCBuYXJnczsgaSsrKQorCQkJeworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJCX0KKwkJfQor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIk9SREVSIEJZICV7YWdncmVnYXRlZDosIH1zIiwg bGlzdCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIigle3R5cGVzfXMpIiwgdG1w KTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsK KworCS8qIFNGVU5DICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNGVU5DPSV7cHJvY2VkdXJl fUQiLCAxLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBhZ2ctPmFnZ3RyYW5z Zm4pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFNUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUWVBFPSV7dHlwZX1UIiwgMSwK KwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUoYWdnLT5hZ2d0cmFuc3R5cGUsIC0xKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTU1BBQ0UgKi8KKwlpZiAoYWdnLT5hZ2d0cmFuc3Nw YWNlICE9IDApCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1NQQUNFPSV7c3BhY2V9biIs IDEsCisJCQkJCQkJICJzcGFjZSIsIE9ialR5cGVJbnRlZ2VyLCBhZ2ctPmFnZ3RyYW5zc3BhY2Up OworCX0KKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiU1NQQUNFPSV7c3BhY2V9biIp OworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBGSU5BTEZV TkMgKi8KKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ2ZpbmFsZm4pKQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBhZ2ctPmFnZ2ZpbmFsZm4pKTsKKwll bHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiRklOQUxGVU5DPSV7cHJvY2VkdXJlfUQiKTsK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRklOQUxGVU5D X0VYVFJBICovCisJaWYgKGFnZy0+YWdnZmluYWxleHRyYSkKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIkZJTkFMRlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpU eXBlU3RyaW5nLCAidHJ1ZSIpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZJTkFM RlVOQ19FWFRSQT0le3ZhbHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LCAiZmFsc2UiKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIElOSVRDT05EICovCisJaW5pdHZhbCA9IFN5c0NhY2hlR2V0QXR0cihBR0dGTk9J RCwgYWdnVHVwLAorCQkJCQkJCSAgQW51bV9wZ19hZ2dyZWdhdGVfYWdnaW5pdHZhbCwKKwkJCQkJ CQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlKCJJTklUQ09ORD0iKTsKKwlpZiAoIWlz bnVsbCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVRDT05EPSV7aW5pdHZhbH1MIiwgMSwK KwkJCQkJCQkgImluaXR2YWwiLCBPYmpUeXBlU3RyaW5nLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGlu aXR2YWwpKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5JVENPTkQ9JXtpbml0 dmFsfUwiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJ fQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog TVNGVU5DICovCisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dtdHJhbnNmbikpCisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJNU0ZVTkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJICJwcm9jZWR1 cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwgYWdnLT5hZ2dtdHJhbnNmbikpOworCWVsc2UKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlKCJNU0ZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNU1RZUEUgKi8KKwlpZiAoT2lkSXNWYWxp ZChhZ2ctPmFnZ210cmFuc3R5cGUpKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTVNUWVBFPSV7 dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCBuZXdfb2JqdHJlZV9m b3JfdHlwZShhZ2ctPmFnZ210cmFuc3R5cGUsIC0xKSk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWUoIk1TVFlQRT0le3R5cGV9VCIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBNU1NQQUNFICovCisJaWYgKGFnZy0+YWdnbXRyYW5zc3BhY2Ug IT0gMCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk1TU1BBQ0U9JXtzcGFjZX1uIiwgMSwKKwkJ CQkJCQkgInNwYWNlIiwgT2JqVHlwZUludGVnZXIsYWdnLT5hZ2dtdHJhbnNzcGFjZSk7CisJZWxz ZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1TU1BBQ0U9JXtzcGFjZX1uIik7CisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1JTlZGVU5DICovCisJaWYg KE9pZElzVmFsaWQoYWdnLT5hZ2dtaW52dHJhbnNmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJNSU5WRlVOQz0le3R5cGV9VCIsIDEsCisJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBhZ2ctPmFnZ21pbnZ0cmFuc2ZuKSk7CisJZWxzZQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWUoIk1JTlZGVU5DPT0le3R5cGV9VCIpOworCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNRklOQUxGVU5DICovCisJaWYgKE9pZElzVmFs aWQoYWdnLT5hZ2dtZmluYWxmbikpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNRklOQUxGVU5D PSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBhZ2ctPmFnZ21maW5hbGZuKSk7CisJZWxzZQorCXsKKwkJdG1wID0g bmV3X29ianRyZWUoIk1GSU5BTEZVTkM9JXtwcm9jZWR1cmV9RCIpOworCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNRklOQUxGVU5DX0VYVFJBICovCisJaWYg KGFnZy0+YWdnbWZpbmFsZXh0cmEpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNRklOQUxGVU5D X0VYVFJBPSV7dmFsdWV9cyIsIDEsCisJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsICJ0 cnVlIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUoIk1GSU5BTEZVTkNfRVhUUkE9 JXt2YWx1ZX1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIE1JTklUQ09ORCAqLworCWluaXR2YWwgPSBTeXNDYWNoZUdldEF0dHIoQUdHRk5PSUQsIGFn Z1R1cCwKKwkJCQkJCQkgIEFudW1fcGdfYWdncmVnYXRlX2FnZ21pbml0dmFsLAorCQkJCQkJCSAg JmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJNSU5JVENP TkQ9JXtpbml0dmFsfUwiLCAxLAorCQkJCQkJCSAiaW5pdHZhbCIsIE9ialR5cGVTdHJpbmcsIFRl eHREYXR1bUdldENTdHJpbmcoaW5pdHZhbCkpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0 cmVlKCJNSU5JVENPTkQ9JXtpbml0dmFsfUwiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJfQorCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogSFlQT1RIRVRJQ0FMICovCisJaWYgKGFnZy0+YWdna2luZCA9 PSBBR0dLSU5EX0hZUE9USEVUSUNBTCkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhZUE9USEVU SUNBTD0le3ZhbHVlfXMiLCAxLAorCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCAidHJ1 ZSIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJIWVBPVEhFVElDQUw9JXt2YWx1 ZX1zIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0K KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNP UlRPUCAqLworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnc29ydG9wKSkKKwl7CisJCXR1cCA9IFNl YXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKGFnZy0+YWdnc29ydG9wKSk7 CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1IiwgYWdnLT5hZ2dzb3J0b3ApOwor CQlvcCA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1QodHVwKTsKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIlNPUlRPUD0le29wZXJhdG9yfUQiLCAxLAorCQkJCQkJCSAib3BlcmF0b3IiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3AtPm9wcm5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3AtPm9wcm5hbWUpKSk7CisKKwkJUmVs ZWFzZVN5c0NhY2hlKHR1cCk7CisJfQorCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJT T1JUT1A9JXtvcGVyYXRvcn1EIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCX0KKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIERvbmUgd2l0aCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlhcHBlbmRf YXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5 c0NhY2hlKHByb2NUdXApOworCVJlbGVhc2VTeXNDYWNoZShhZ2dUdXApOworCisJcmV0dXJuIHN0 bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIENPTExBVElPTikK KyAqCisgKiBHaXZlbiBhIGNvbGxhdGlvbiBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2Vu dGluZyB0aGUgQ1JFQVRFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gJXtmcm9tX2lkZW50aXR5fUQgKCV7ZWxlbXM6 LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlv bihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkgT2JqZWN0QWRkcmVz cyBmcm9tQ29sbGlkKQoreworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29sVHVwOwor CUZvcm1fcGdfY29sbGF0aW9uIGNvbEZvcm07CisJRGF0dW0JCWRhdHVtOworCWJvb2wJCWlzbnVs bDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCWNvbFR1cCA9 IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29sRm9y bSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIENPTExBVElPTiAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoY29sRm9ybS0+ Y29sbG5hbWUpKSk7CisKKwlpZiAoT2lkSXNWYWxpZChmcm9tQ29sbGlkLm9iamVjdElkKSkKKwl7 CisJCU9pZAkJCWNvbGxpZCA9IGZyb21Db2xsaWQub2JqZWN0SWQ7CisJCUhlYXBUdXBsZQl0cDsK KwkJRm9ybV9wZ19jb2xsYXRpb24gZnJvbUNvbEZvcm07CisKKwkJLyoKKwkJICogQ1JFQVRFIENP TExBVElPTiAle2lkZW50aXR5fUQgRlJPTSBleGlzdGluZ19jb2xsYXRpb247CisJCSAqLworCQl0 cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKGNvbGxpZCkpOwor CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIGNvbGxpZCk7CisKKwkJZnJvbUNv bEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CisKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiRlJPTSAle2Zyb21faWRlbnRpdHl9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShmcm9tQ29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIoZnJvbUNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJCVJlbGVhc2VTeXND YWNoZSh0cCk7CisJCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCQlyZXR1cm4gcmV0OworCX0K KworCS8qIExPQ0FMRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQsIGNvbFR1 cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJaWYgKCFpc251 bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTE9DQUxFPSV7bG9jYWxlfUwiLCAyLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxvY2FsZSIsCisJCQkJCQkJICJsb2Nh bGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRD U3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwl9CisKKwkvKiBMQ19DT0xMQVRFICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwgJmlzbnVs bCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTENfQ09MTEFU RT0le2NvbGxhdGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29s bGF0ZSIsCisJCQkJCQkJICJjb2xsYXRlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmlu dGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ1RZUEUgKi8KKwlk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29sbGF0aW9u X2NvbGxjdHlwZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiTENfQ1RZUEU9JXtjdHlwZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJjdHlwZSIsCisJCQkJCQkJICJjdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIFBST1ZJ REVSICovCisJaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKQor CXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJv dmlkZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAiaWN1IikpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJZWxz ZSBpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJvdmlkZXIi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAibGliYyIpKTsKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogREVU RVJNSU5JU1RJQyAqLworCWlmIChjb2xGb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGljKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkRFVEVSTUlOSVNUSUM9JXtkZXRlcm1pbmlzdGljfUwiLCAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMiLAorCQkJ CQkJCSAiZGV0ZXJtaW5pc3RpYyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIl cyIsICJ0cnVlIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwl9CisKKwkvKiBWRVJTSU9OICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09M TE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwgJmlzbnVsbCk7CisJ aWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTj0le3ZlcnNp b259TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJ CQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwg VGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIo JXtlbGVtczosIH1zKSIsIGxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BFUkFU T1IpCisgKgorICogR2l2ZW4gYSBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SICV7 aWRlbnRpdHl9TyAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7 CisJSGVhcFR1cGxlCW9wclR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1w X29iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsK KworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElk KTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAxLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihv cHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkJImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJCSJwcm9jZWR1cmUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQlvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogTEVGVEFSRyAqLwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNvbW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CisJLyogTkVHQVRPUiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAx LAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJ c1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9v YmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVy YXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsKKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVz dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCisJLyogSk9JTiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9J Tj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChP aWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1l cmdlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1zOiwgfXMpIiwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgJXtlbGVtczosIH1zKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmlu ZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHlwVHVwOworCU9ialRyZWUgICAgKnJldDsK KwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwljaGFyCSAgICpzdHI7 CisJRGF0dW0JCWRmbHQ7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOwor CisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ dHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHlw Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0tPnR5cG5h bWUpKSk7CisKKwkvKiBTaGVsbCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZvcm0tPnR5cGlzZGVmaW5l ZCkKKwl7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gcmV0OworCX0KKwor CS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBJTlBVVCAqLworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCIoSU5QVVQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJpbnB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiT1VUUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAib3V0cHV0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZl KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBTRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQ TU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4i KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5 cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9PVVQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBBTkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkFOQUxZ WkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5h bHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExFTkdUSCAq LworCWlmICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTlRF Uk5BTExFTkdUSD1WQVJJQUJMRSIpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklO VEVSTkFMTEVOR1RIPSV7dHlwbGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2JqVHlwZUlu dGVnZXIsIHR5cEZvcm0tPnR5cGxlbik7CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRo IHNjaGVtYS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxp Z24pCisJeworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQli cmVhazsKKwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFr OworCQljYXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJ CWNhc2UgJ2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+ dHlwYWxpZ24pOworCX0KKworCS8qIEFMSUdOTUVOVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJBTElHTk1FTlQ9JXthbGlnbn1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImFsaWdubWVudCIsCisJCQkJCQkgImFsaWduIiwgT2JqVHlwZVN0cmluZywgc3RyKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNUT1JB R0UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0le3N0b3JhZ2V9cyIsIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAic3RvcmFn ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3R5cGVfc3RvcmFnZSh0eXBGb3JtLT50eXBz dG9yYWdlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBDQVRFR09SWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09SWT0le2Nh dGVnb3J5fXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2F0ZWdvcnki LAorCQkJCQkJICJjYXRlZ29yeSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgcHNwcmludGYoIiVj IiwgdHlwRm9ybS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJQUkVGRVJSRUQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBy ZWZlcnJlZCIpOworCWlmICghdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQpCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogREVGQVVMVCAqLworCWRmbHQgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwg dHlwVHVwLAorCQkJCQkJICAgQW51bV9wZ190eXBlX3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNu dWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVmYXVsdCIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXAsICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwKKwkJCQkJCQkgVGV4 dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi ZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwgImRl bGltIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJM RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5 X29iamVjdChyZXQsICIle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHlwVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxl bXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29u ZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJl c3MgY29waWVkKQoreworCUhlYXBUdXBsZQl0c2NUdXA7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlP YmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRz Y0Zvcm07CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklM OworCisJdHNjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9u IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2Nv bmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQ QVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJzZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7 CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkv KgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4g ZXhpc3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEg UEFSU0VSIGNsYXVzZS4KKwkgKi8KKwkvKiBDT1BZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkNPUFk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvcHkiKTsKKwlp ZiAoT2lkSXNWYWxpZChjb3BpZWQub2JqZWN0SWQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVjdElkKSk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJQQVJTRVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBh cnNlciIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwYXJzZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRz cEZvcm0tPnByc25hbWUpKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNmZ25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1lKSksCisJCQkJCQkgImVsZW1z IiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCVJl bGVhc2VTeXNDYWNoZSh0c2NUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgle2VsZW1z OiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNl cihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNwVHVw OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9 IE5JTDsKKwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8q IEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBTVEFSVCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTVEFSVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIkdFVFRPS0VOPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkVORD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImVuZCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiTEVYVFlQRVM9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJsZXh0eXBlcyIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hl YWRsaW5lKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBQQVJT RVIgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5w cnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpLAor CQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHNwVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhU IFNFQVJDSCBESUNUSU9OQVJZIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMp CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnko T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzZFR1cDsK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJRGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGljdCB0 c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFy eSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19k aWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xh dXNlICovCisJLyogVEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRz ZEZvcm0tPmRpY3R0ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkg dXNlbGVzcyByZXByZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhv dXQgbW9yZSB0c19jYWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXND YWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3Rf ZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgi Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9u c31zIiwgIm9wdGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIs CisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cih0c2RGb3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSBzdGF0ZW1lbnQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50 aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZp bmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJ SGVhcFR1cGxlCXRzdFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJ dHN0VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lE ICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBH RVRTVFJVQ1QodHN0VHVwKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkv KiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RGb3JtLT50 bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIExFWElaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9JXtw cm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZXhpemUi LAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3RG b3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHN0Rm9y bS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3JtLT50bXBsbmFt ZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHN0VHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRF UiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQURE IE1BUFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9 RAorICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1E IERST1AgTUFQUElORyAle2lmX2V4aXN0c31zCisgKiBGT1IgJXt0b2tlbnR5cGV9SQorICoJT1IK KyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1B UFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAor ICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFM VEVSIE1BUFBJTkcKKyAqIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGlj dGlvbmFyeX1ECisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lk ZW50aXR5fUQgQUxURVIgTUFQUElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAl e29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFu ZCAqY21kKQoreworCUFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29u ZmlndXJhdGlvblN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisJaW50CQkJaTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIik7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBwcm9wcmlh dGUgdG8gZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsKKwkJY2Fz ZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJ CQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQljYXNl IEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJ CQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3X29ianRy ZWUoIklGIEVYSVNUUyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBu b2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWZfZXhp c3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9N QVBQSU5HX0ZPUl9UT0tFTjoKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJ CWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJ ZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4gbGlzdCwgZm9yIHN1YmNv bW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJ R19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01B UFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFD RV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0RST1Bf TUFQUElORykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsK KwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3Qp OworCX0KKworCS8qIEFkZCBmdXJ0aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8K KwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2Rl LT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJ LyogQUREIE1BUFBJTkcgYW5kIEFMVEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rp b25hcmllcyAqLworCQlsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2Nm Zy5uZGljdHM7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqZGljdF9vYmo7CisKKwkJCWRpY3Rf b2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcuZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QoZGljdF9vYmopKTsKKwkJfQor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxp c3QpOworCX0KKwllbHNlIGlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0Vf RElDVCB8fAorCQkJIG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZP Ul9UT0tFTikKKwl7CisJCS8qIFRoZSBSRVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGlj dGlvbmFyaWVzICovCisJCUFzc2VydChjbWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICJXSVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgY21kLT5kLmF0c2NmZy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1l bnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05B UlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlEYXR1bQkJ b3B0aW9uczsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVsbDsKKwlI ZWFwVHVwbGUJdHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRoIE9JRCAldSIsCisJCQkg b2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVw KTsKKworCS8qCisJICogQWRkIHRoZSBkZWZpbml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBw Z190c19kaWN0IGRpY3Rpbml0b3B0aW9uCisJICogY29sdW1uCisJICovCisJb3B0aW9ucyA9IFN5 c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGlj dF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVl KCIiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRp b25zfXMiLCAib3B0aW9ucyIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlkZWZpbml0aW9uID0gbGFw cGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtk ZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImRlZmlu aXRpb24iLCBPYmpUeXBlQXJyYXksIGRlZmluaXRpb24pOworCisJUmVsZWFzZVN5c0NhY2hlKHRz ZFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNF VC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNFVHxTRVQgKCV7b3B0 aW9uczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMo QWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNl dFJlbE9wdGlvbnM7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsK KwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19y ZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOwor CX0KKworCUFzc2VydChzZXRzKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiJXtzZXRfcmVz ZXR9cyAoJXtvcHRpb25zOiwgfXMpIiwgMiwKKwkJCQkJCSAgInNldF9yZXNldCIsIE9ialR5cGVT dHJpbmcsIGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiLAorCQkJCQkJICAib3B0aW9ucyIsIE9i alR5cGVBcnJheSwgc2V0cyk7Cit9CisKKy8qCisgKiBkZXBhcnNlX1ZpZXdTdG10CisgKgkJZGVw YXJzZSBhIFZpZXdTdG10CisgKgorICogR2l2ZW4gYSB2aWV3IE9JRCBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtv cl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJRVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1ZpZXdTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCVZpZXdTdG10ICAgKm5vZGUgPSAoVmlld1N0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKworCXJlbGF0 aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXtwZXJzaXN0ZW5jZX1zIFZJ RVcgJXtpZGVudGl0eX1EIEFTICV7cXVlcnl9cyIsIDQsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBP YmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwK KwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0 ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJl bGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAicXVlcnkiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIHBnX2dldF92aWV3ZGVmX2ludGVybmFsKG9iamVjdElkKSk7CisKKwlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3RhdGVtZW50LCBpdCBpcyBhIHZh cmlhbnQgb2YKKyAqIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICogTm90ZSB0aGF0IENSRUFURSBU QUJMRSBBUyBTRUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNlZCBieQorICogZGVwYXJzZV9D cmVhdGVUYWJsZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJTlRPIGNsYXVzZS4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBbTUFURVJJQUxJWkVE IFZJRVcgfCBUQUJMRV0gJXtpZl9ub3RfZXhpc3RzfXMKKyAqIAkJJXtpZGVudGl0eX1EICV7Y29s dW1uc31zIFsle29uX2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cworICogIAkJQVMgJXtxdWVyeX1z ICV7d2l0aF9ub19kYXRhfXMiCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl VGFibGVBc1N0bXRfdmFuaWxsYShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVUYWJsZUFzU3RtdCAqbm9kZSA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWU7 CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFy ZUxvY2spOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAg ICAqdG1wMjsKKwljaGFyCSAgICpmbXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJLyogUmVqZWN0IHVuc3VwcG9ydGVkIGNhc2UgcmlnaHQgYXdheS4gKi8K KwlpZiAoKChRdWVyeSAqKSAobm9kZS0+cXVlcnkpKS0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJ VFkpCisJCWVsb2coRVJST1IsICJ1bmltcGxlbWVudGVkIGRlcGFyc2Ugb2YgQ1JFQVRFIFRBQkxF IEFTIEVYRUNVVEUiKTsKKworCS8qCisJICogTm90ZSB0aGF0IElOU0VSVCBJTlRPIGlzIGRlcGFy c2VkIGFzIENSRUFURSBUQUJMRSBBUy4gIFRoZXkgYXJlCisJICogZnVuY3Rpb25hbGx5IGVxdWl2 YWxlbnQgc3lub255bXMgc28gdGhlcmUgaXMgbm8gaGFybSBmcm9tIHRoaXMuCisJICovCisJaWYg KG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZtdCA9ICJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCI7CisJZWxzZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAz LAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNp c3RlbmNlX3N0cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZf bm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTFVNTlMgY2xhdXNlICovCisJaWYg KG5vZGUtPmludG8tPmNvbE5hbWVzKQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5j b2xOYW1lcykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZh bChsZmlyc3QoY2VsbCkpKSk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHVtbnM6 LCB9SSkiLCAxLAorCQkJCQkJCSAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJfQor CWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29s dW1uc31zIiwgdG1wKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCWlmIChub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJ CQkJCSBub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxs X29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMi LCB0bXApOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIp OworCWxpc3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmludG8tPm9wdGlvbnMpCisJ eworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1w MiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2Ns YXVzZX1zIiwgdG1wKTsKKworCS8qIE9OIENPTU1JVCBjbGF1c2UuICBDUkVBVEUgTUFURVJJQUxJ WkVEIFZJRVcgZG9lc24ndCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVD VF9UQUJMRSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIsCisJ CQkJCQkJIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50by0+b25Db21taXQpKTsKKwor CS8qIFRBQkxFU1BBQ0UgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0Ug JXt0YWJsZXNwYWNlfUkiKTsKKwlpZiAobm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLAor CQkJCQkJCSBub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5k X251bGxfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIs IHRtcCk7CisKKwkvKiBBZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0KElzQShub2RlLT5xdWVyeSwg UXVlcnkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle3F1ZXJ5fXMiLCAicXVl cnkiLAorCQkJCQkJIHBnX2dldF9xdWVyeWRlZigoUXVlcnkgKikgbm9kZS0+cXVlcnksIGZhbHNl KSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwK KwkJCQkJCSBub2RlLT5pbnRvLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdp dmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtu YW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zIE9OCisgKiAle3JlbGF0aW9ufUQgJXtmcm9t X3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cyBGT1IgRUFDSAorICogJXtmb3JfZWFjaH1z ICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0ZVRyaWdTdG10ICopIHBhcnNl dHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBsZQl0cmlnVHVwOworCUZvcm1f cGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1w X29iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdAkgICAq ZXZlbnRzOworCWNoYXIJICAgKnRyaWd0aW1pbmc7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3Bl bihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRf Y2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9i amVjdElkKTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVw KTsKKworCXRyaWd0aW1pbmcgPSBub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSA/ ICJCRUZPUkUiIDoKKwkJbm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRFUiA/ICJBRlRF UiIgOgorCQlub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQgPyAiSU5TVEVBRCBP RiIgOgorCQlOVUxMOworCWlmICghdHJpZ3RpbWluZykKKwkJZWxvZyhFUlJPUiwgInVucmVjb2du aXplZCB0cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3Rp bWV9cyIsIDMsCisJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5pc2Nv bnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJp bmcsIG5vZGUtPnRyaWduYW1lLAorCQkJCQkJICJ0aW1lIiwgT2JqVHlwZVN0cmluZywgdHJpZ3Rp bWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmly ZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7IGluCisJICogbW9zdCBjYXNlcyBpdCB3aWxs IGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVy ZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9i amVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJf VFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVj dCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQor CQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsK KwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBs YXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2Rl LT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMg PT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmpl Y3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnVwZGF0ZTsK KwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgor CQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRw dXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIg Y29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlw ZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAor CQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVh Y2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFyCSAgICpjb2xuYW1lID0gc3Ry VmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5n X29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRl LCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMs IG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSB0cmln Rm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXtyZWxhdGlv bn1EIiwgdG1wX29iaik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZST00iKTsKKwlpZiAo dHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpUcmVlICAgICpyZWw7CisKKwkJcmVs ID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wX29iaiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZnJvbV90YWJs ZX1zIiwgdG1wX29iaik7CisKKwlpZiAobm9kZS0+ZGVmZXJyYWJsZSkKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUiKSk7CisJaWYgKG5vZGUtPmlu aXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIklO SVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7Y29uc3Ry YWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZP UiBFQUNIICV7Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJCQkgbm9kZS0+cm93ID8gIlJP VyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRU4iKTsKKwlp ZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVt CQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1 cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3Ry aWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRn cXVhbCBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUp KTsKKworCQl3aGVuQ2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFs dWUpKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle2NsYXVzZX1zKSIsICJj bGF1c2UiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJ CQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt3aGVufXMiLCB0bXBfb2JqKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCQkiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdz ID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEJICAg KnRnYXJnczsKKwkJY2hhcgkgICAqYXJnc3RyOworCQlib29sCQlpc251bGw7CisJCWludAkJCWZp bmR4OworCQlpbnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7CisKKwkJdGdhcmdzID0gRGF0 dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmln Z2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJ CQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwg dGdhcmdzIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFt ZSkpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9 IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5k eCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CQl0bGVuOwor CisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLwor CQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2Fy Z3MpCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJndW1lbnQgc3RyaW5nICglcykgZm9yIHRy aWdnZXIgXCIlc1wiIiwKKwkJCQkJIGFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSk7 CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJ cCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmos ICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0 KTsJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIiki KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVu Y3Rpb259cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVXNl ck1hcHBpbmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdpdmVuIGEgVXNlciBN YXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJu IGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5HIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VSIE1BUFBJTkcgRk9SICV7cm9s ZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3Jl YXRlVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNy ZWF0ZVVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2VyTWFwcGluZ1N0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRw OworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOwor CisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24n dCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0 cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisK KwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBTRVJWRVIgJXtz ZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11c2VyKSwKKwkJ CQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1lLAorCQkJCQkJ ICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoK KyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdpdmVuIGEgVXNlciBNYXBwaW5n IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9i alRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1J CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZ1N0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKm5v ZGUgPSAoQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJl dDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5n IGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2Vy TWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAg b2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAq IGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VS TUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2Vy IG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9w Z191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2Vy dmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBVU0VS IE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25z fXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBPYmpUeXBlU3Ry aW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwp KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNp dmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclN0YXRz U3RtdCAoQUxURVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBhIGFsdGVyIHN0YXRpc3RpY3Mg T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2Jq VHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNFVCBTVEFUSVNUSUNTICV7dGFy Z2V0fW4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclN0YXRzU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0YXRzU3RtdCAqbm9kZSA9IChB bHRlclN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBs ZQl0cDsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisKKwlpZiAoIW5vZGUtPnN0 eHN0YXR0YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9va3VwIG9iamVjdCBpbiB0aGUg Y2F0YWxvZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1Qo dHApOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9 RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4 bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSksCisJ CQkJCQkgInRhcmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5zdHhzdGF0dGFyZ2V0KTsKKwor CVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcpCisgKgorICog R2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgcmVmcmVzaCBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZSRVNIIE1BVEVSSUFMSVpFRCBW SUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0aF9ub19kYXRhfXMKKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdTdG10ICpub2RlID0gKFJlZnJl c2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZSRVNIIE1BVEVSSUFMSVpFRCBW SUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiY29uY3VycmVu dGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8gIkNPTkNVUlJF TlRMWSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIG9iamVjdElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBP YmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcuIGJ5IEFM VEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBvciBSRVNF VCAoLi4uKSBjb250ZW50cy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtsYWJlbH1zID0g JXt2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVt ICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICpvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVzcGFjZSAh PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9SS4iLCAi c2NoZW1hIiwKKwkJCQkJCQkgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1lKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfXMiLCAxLAorCQkJCQkJICJsYWJlbCIsIE9i alR5cGVPYmplY3QsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiPSAle3ZhbHVlfUwiLCAidmFsdWUiLAorCQkJCQkJCSBlbGVtLT5hcmcg PyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRS VUUiIDogIkZBTFNFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFy c2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBEUk9QICVz IElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zICV7Y2FzY2FkZX1zCisgKi8KK2NoYXIgKgorZGVw YXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9i amVjdHR5cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0Rh dGEgc3RyOworCWNoYXIJICAgKmNvbW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkgPSAoY2hhciAq KSBvYmppZGVudGl0eTsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcF9vYmo7 CisJSnNvbmIJICAgKmpzb25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlzdG10ID0g bmV3X29ianRyZWVfVkEoIkRST1AgJXtvYmp0eXBlfXMgSUYgRVhJU1RTICV7b2JqaWRlbnRpdHl9 cyIsIDIsCisJCQkJCQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywgb2JqZWN0dHlwZSwKKwkJ CQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCisJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkicHJlc2VudCIsIE9ialR5 cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHN0bXQsICIle2Nhc2NhZGV9cyIsIHRtcF9vYmopOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pz b25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3Qs IEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBI YW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogUkVTRVQgQUxMCisgKiBPUgorICogU0VUICV7c2V0X25hbWV9SSBUTyAle3NldF92YWx1 ZX1zCisgKiBPUgorICogUkVTRVQgJXtzZXRfbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5hbWUsIGNo YXIgKnZhbHVlKQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlmIChraW5kID09IFZBUl9SRVNF VF9BTEwpCisJCXJldCA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwllbHNlIGlmIChraW5k ID09IFZBUl9TRVRfVkFMVUUpCisJeworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7c2V0 X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWUpOwor CisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlwZSBhbmQg aGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENvbmZpZ09w dGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJUTyAle3NldF92YWx1ZX1zIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKKwkJ ZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9TCIsICJz ZXRfdmFsdWUiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJF U0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcs IG5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhTdG10 LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFpbnQs IE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3Vu aXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkg T04KKyAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgJXtkZWZpbml0aW9ufXMgJXt3aXRo fXMgJXt0YWJsZXNwYWNlfXMKKyAqICV7d2hlcmVfY2xhdXNlfXMKKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxh dGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247 CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAg KndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50 KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0 cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJ CSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVj dElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+ cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVm X2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVs b3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAl e2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1z ICV7ZGVmaW5pdGlvbn1zIiwgNywKKwkJCQkJCSAidW5pcXVlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiLAorCQkJCQkJICJjb25jdXJyZW50bHki LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZ IiA6ICIiLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBu b2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgIm5hbWUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeHJlbCks CisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSwKKwkJCQkJCSAiaW5kZXhfYW0iLCBPYmpU eXBlU3RyaW5nLCBpbmRleF9hbSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcs IGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiKCV7b3B0c31zKSIsICJvcHRzIiwgcmVsb3B0aW9ucyk7CisJZWxzZQorCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRo fXMiLCB0bXBfb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRy ZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLCB0YWJsZXNwYWNlKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9vYmopOworCisJLyogV0hFUkUgY2xhdXNl ICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7d2hlcmV9cyIsICJ3aGVyZSIsIHdo ZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZXJlX2NsYXVzZX1zIiwgdG1wX29iaik7CisKKwl0 YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVy biBhIHNjaGVtYS1xdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJl bnQgdGFibGVzLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQg b2JqZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7 CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxl OworCisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJl bGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwg SW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkp OworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pKSkKKwl7CisJCU9ialRyZWUgICAgKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3Jt SW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5l d19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7 CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJl bnRzOworfQorCisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTUlUIC4uLiBjbGF1c2UgZm9yIENS RUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPTiBDT01N SVQgJXtvbl9jb21taXRfdmFsdWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09u Q29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlICAgICpyZXQg ID0gbmV3X29ianRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2Fz ZSBPTkNPTU1JVF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21t aXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRST1AiKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFs dWUiLCAiREVMRVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VS VkVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVl fXMiLAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7CisJCQli cmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3QocmV0 LCAiJXtvbl9jb21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisJ CQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFt ZVN0bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMg JXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFBPTElD WSAle2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8g JXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUg QVRUUklCVVRFICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisgKiBPUgor ICogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FIENPTFVN TiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50 aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50 aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICog T1IKKyAqIEFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisg KiBPUgorICogQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBU TyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9O ICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAl JXtpZGVudGl0eX1EIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0 cmVlKQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOwor CisJLyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0 aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBz aW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQs IHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQg ZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hl bWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGlu IHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFu eXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVD VF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgor CQljYXNlIE9CSkVDVF9WSUVXOgorCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmVsYXRpb24g PSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlz Y2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBS RU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2Up LAorCQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5t aXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJ CQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkgIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdf cG9saWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRh IGtleTsKKwkJCQlTeXNTY2FuRGVzYyBzY2FuOworCisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25f b3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0 KCZrZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJ CQkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQs IHRydWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJ CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1 IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9s aWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBQT0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVO QU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJ CQkJCQkJCSAicG9saWN5bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+c3Vi bmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2Nhbihz Y2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNU X0NPTFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxh dGlvbik7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJ CQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBB VFRSSUJVVEUgJXtjb2xuYW1lfUkiLCAyLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJ CQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSksCisJCQkJCQkJCQkgImNvbG5h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMiLCAxLAorCQkJCQkJCQkJICJv Ymp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2Rl LT5yZWxhdGlvblR5cGUsIGZhbHNlKSk7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90 IHN1cHBvcnQgSUYgRVhJU1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNU X0NPTFVNTikKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIs CisJCQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8g IklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lk ZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwK KwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICJSRU5BTUUgQ09MVU1OICV7Y29sbmFtZX1JIiwKKwkJCQkJCQkJ CSAiY29sbmFtZSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICJUTyAle25ld25hbWV9SSIsICJuZXduYW1lIiwKKwkJCQkJCQkJIG5vZGUtPm5l d25hbWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQor CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBu ZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpU eXBlQm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsK KworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVh azsKKworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgor CQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJeworCQkJCWNoYXIJICAgKmlkZW50OworCQkJCUhl YXBUdXBsZQlwcm9jdHVwOworCQkJCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAg ICppZGVudGl0eTsKKworCQkJCUFzc2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJn cykpOworCQkJCWlkZW50aXR5ID0gKChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5v YmpuYW1lOworCisJCQkJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJ CQkJCSAgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElk KTsKKwkJCQlwcm9jZm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKwor CQkJCS8qIFhYWCBkb2VzIHRoaXMgd29yayBmb3Igb3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8K KwkJCQlpZGVudCA9IHBzcHJpbnRmKCIlcyVzIiwKKwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9p ZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJ CQkJCQkJCQkJCQkJCXN0clZhbChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9w cm9jZWR1cmVfYXJncyhhZGRyZXNzLm9iamVjdElkLCB0cnVlKSk7CisKKwkJCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAle25l d25hbWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCQkJCSAibmV3bmFtZSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHBy b2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsK KwkJCQlIZWFwVHVwbGUJb3BjVHVwOworCQkJCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJ CUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkg ICAqb3BjbmFtZTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVj dElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3Bj bGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQlvcGNG b3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwkJCQlvbGRuYW1l cyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBE ZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1l KG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhv ZH1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUs IGZhbHNlKSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCQkgIG9wY25hbWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCksCisJCQkJCQkJ CQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVh c2VTeXNDYWNoZShvcGNUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BG QU1JTFk6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9wZlR1cDsKKwkJCQlIZWFwVHVwbGUJYW1UdXA7 CisJCQkJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCQkJCUZvcm1fcGdfYW0JYW1Gb3JtOwor CQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hh cgkgICAqb3BmbmFtZTsKKworCQkJCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9J RCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkp CisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1p bHkgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0g PSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNl YXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2Qp KTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkJ CQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRT VFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBu b2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLwor CQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZu YW1lKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0 LAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3Bm Rm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGZuYW1lKSwKKwkJCQkJCQkJ CSAiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBOYW1lU3RyKGFtRm9y bS0+YW1uYW1lKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5l d25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2Fj aGUob3BmVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBU TyAle25ld25hbWV9SSIsIDIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zdWJuYW1lLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5u ZXduYW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJY2FzZSBPQkpFQ1Rf TEFOR1VBR0U6CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXdu YW1lfUkiLCAzLAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkg c3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0clZhbChjYXN0Tm9kZShTdHJpbmcs IG5vZGUtPm9iamVjdCkpLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJ SGVhcFR1cGxlCXJld3JUdXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJl bGF0aW9uCXBnX3Jld3JpdGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdy aXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFs b2dfb2JqZWN0X2J5X29pZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCBhZGRyZXNz Lm9iamVjdElkKTsKKwkJCQlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChy ZXdyVHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5h bWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJ CSAicnVsZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2 X2NsYXNzKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25h bWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJCUhlYXBU dXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlSZWxhdGlv bglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJpZ2dlclJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29i amVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xh c3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dl cikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXdu YW1lfUkiLCAzLAorCQkJCQkJCQkJICJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdn ZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9D T0xMQVRJT046CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ19FWFQ6CisJCWNhc2UgT0JKRUNUX1RZ UEU6CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJ Y2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2Fz ZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJ eworCQkJCUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1 bQkJb2JqbnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNw YWNlOworCQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0 KTsKKworCQkJCS8qIE9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0gcmVsYXRp b25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2JqVHVwID0g Z2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQo YWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBPYnRhaW4gbmFt ZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3Bh Y2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2JqVHVwLCBB bnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwgJmlz bnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBu YW1lc3BhY2UiKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9 cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+ cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2Jq bnNwKSwKKwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJ CQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRp b25fY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBu b2RlLT5yZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhIEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMg REVQRU5EUyBPTiBFWFRFTlNJT04gJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCisJaWYgKG5vZGUtPm9i amVjdFR5cGUgPT0gT0JKRUNUX0lOREVYKQorCXsKKwkJT2JqVHJlZSAgICAqcXVhbGlmaWVkOwor CQlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxu YW1lKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQ RU5EUyBPTiBFWFRFTlNJT04gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LCBxdWFsaWZpZWQsCisJCQkJCQkJICJubyIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJIG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIiwKKwkJCQkJCQkgIm5ld25hbWUiLCBPYmpU eXBlU3RyaW5nLCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9H LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAo aW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIHNlcXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogU0VUIENBQ0hFICV7dmFsdWV9cworICogT1IKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJ ICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQg Q0FDSEUgJXt2YWx1ZX1zIiA6ICJDQUNIRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisJcmV0ID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJ CQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9w dGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUICV7bm99cyBDWUNMRQorICogT1IK KyAqICV7bm99cyBDWUNMRQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9T ZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQorewor CU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ ICJTRVQgJXtub31zIENZQ0xFIiA6ICIle25vfXMgQ1lDTEUiOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAor CQkJCQkJICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc2VxZGF0YS0+c2VxY3ljbGUgPyAi IiA6ICJOTyIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICogT1IKKyAqIElOQ1JF TUVOVCBCWSAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX0luY3JlbWVudEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZt dDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiA6 ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZP Uk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQs IDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJ CQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVF IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIE1BWFZBTFVFICV7dmFsdWV9 cworICogT1IKKyAqIE1BWFZBTFVFICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29s IGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJ Y2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIE1BWFZBTFVFICV7dmFs dWV9cyIgOiAiTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0 X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWF4KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkgInZh bHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVj dChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9u LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zCisgKiBP UgorICogTUlOVkFMVUUgJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAg ICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIiA6 ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFU LCBzZXFkYXRhLT5zZXFtaW4pOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBP YmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05FRCBCWSBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPV05FRCBCWSAle293bmVyfUQKKyAqLworc3RhdGljIE9i akVsZW0gKgorZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90 YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCVJlbGF0aW9uCWRlcFJlbDsKKwlT eXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJSGVhcFR1cGxlCXR1cGxl OworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX2NsYXNzaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0 dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleXNbMV0sCisJCQkJQW51 bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzJd LAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisKKwlzY2FuID0gc3lzdGFibGVf YmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElkLCB0cnVlLAorCQkJCQkJCSAg TlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJCW93bmVySWQ7CisJCUZvcm1fcGdfZGVwZW5k IGRlcGZvcm07CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisK KwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBP bmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBm b3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVw Zm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJ aWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklk ID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBk ZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJ Y29udGludWU7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2Jq LCAiYXR0cm5hbWUiLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJcmV0ID0gbmV3X29ianRyZWVf VkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2JqZWN0LCB0bXBfb2JqKTsK Kwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyBvd25lciBjb2x1bW4s IGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVwIHNvCisJICogdGhhdCBpdCB3 b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIXJldCkKKwkJLyogWFhYIHRoaXMgc2hv dWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7 b3duZXJ9RCIsIDMsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAor CQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogUkVTVEFSVCAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVt ICoKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7 CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJp bnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInJlc3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIEFTIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQVMgJXtp ZGVudGl0eX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9BcyhE ZWZFbGVtICplbGVtKQoreworCU9ialRyZWUgICAgKnJldDsKKwlUeXBlCQlsaWtlVHlwZTsKKwlG b3JtX3BnX3R5cGUgbGlrZUZvcm07CisKKwlsaWtlVHlwZSA9IHR5cGVuYW1lVHlwZShOVUxMLCBk ZWZHZXRUeXBlTmFtZShlbGVtKSwgTlVMTCk7CisJbGlrZUZvcm0gPSAoRm9ybV9wZ190eXBlKSBH RVRTVFJVQ1QobGlrZVR5cGUpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFTICV7aWRlbnRp dHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUobGlrZUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cihsaWtlRm9ybS0+dHlwbmFtZSkpKTsKKwlSZWxlYXNlU3lzQ2FjaGUobGlrZVR5 cGUpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zCisgKiBPUgorICogU1RBUlQgV0lUSCAle3Zh bHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0 aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJl ZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBh bHRlcl90YWJsZSA/ICJTRVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiIDogIlNUQVJUIFdJVEggJXt2 YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vx c3RhcnQpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0 bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSB0eXBlIFNUT1JBR0Ugb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBTVE9SQUdFPSV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9UeXBlX1N0b3JhZ2UoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0 OworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9SQUdFID0gJXt2YWx1ZX1zIiwgMiwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIGdldF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCisJ cmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0 eXBlIFJFQ0VJVkUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUNFSVZFPSV7 cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9S ZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2 ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBTRU5EPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFy c2VfVHlwZV9TZW5kKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChy ZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IFRZUE1PRF9JTj0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUg ICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJl dCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9vdXQgb3B0aW9uLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBUWVBNT0RfT1VUPSV7cHJvY2VkdXJlfUQKKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlw ZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBt b2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSBDUkVB VEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNlX0NyZWF0ZVN0bXQgZG8gdGhlIGFj dHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENyZWF0ZVN0bXQgZm9yCisgKiBDUkVB VEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7 CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQ3JlYXRl VGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rhcy5yZWFsX2NyZWF0ZTsKKwlvYmpl Y3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlyZXR1cm4gZGVwYXJzZV9D cmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg dHlwZSBhbmFseXplIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQU5BTFlaRT0l e3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVf QW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5 emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBTVUJTQ1JJUFQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlP YmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU1VCU0NSSVBUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJzY3JpcHQiKTsKKwlpZiAoT2lk SXNWYWxpZCh0eXBGb3JtLT50eXBzdWJzY3JpcHQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzdWJzY3Jp cHQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19v YmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgUnVsZVN0bXQgKENSRUFU RSBSVUxFKS4KKyAqCisgKiBHaXZlbiBhIHJ1bGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIHJ1bGUg Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFJVTEUgJXtvcl9yZXBs YWNlfXMgJXtpZGVudGl0eX1JIEFTIE9OICV7ZXZlbnR9cyBUTyAle3RhYmxlfUQKKyAqICV7d2hl cmVfY2xhdXNlfXMgRE8gJXtpbnN0ZWFkfXMgJXthY3Rpb25zOiwgfXMKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9SdWxlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlSdWxlU3RtdCAgICpub2RlID0gKFJ1bGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJRm9y bV9wZ19yZXdyaXRlIHJld3JGb3JtOworCUhlYXBUdXBsZQlyZXdyVHVwOworCVN5c1NjYW5EZXNj IHNjYW47CisJU2NhbktleURhdGEga2V5OworCURhdHVtCQlldl9xdWFsOworCURhdHVtCQlldl9h Y3Rpb25zOworCWJvb2wJCWlzbnVsbDsKKwljaGFyCSAgICpxdWFsOworCUxpc3QJICAgKmFjdGlv bnM7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNoYXIJICAg KmV2ZW50X3N0cjsKKworCXBnX3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklk LCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19yZXdy aXRlX29pZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19y ZXdyaXRlLCBSZXdyaXRlT2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsICZrZXkp OworCXJld3JUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChyZXdyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJl d3JpdGUgcnVsZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmV3ckZvcm0gPSAo Rm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwlldmVudF9zdHIgPSBub2Rl LT5ldmVudCA9PSBDTURfU0VMRUNUID8gIlNFTEVDVCIgOgorCQlub2RlLT5ldmVudCA9PSBDTURf VVBEQVRFID8gIlVQREFURSIgOgorCQlub2RlLT5ldmVudCA9PSBDTURfREVMRVRFID8gIkRFTEVU RSIgOgorCQlub2RlLT5ldmVudCA9PSBDTURfSU5TRVJUID8gIklOU0VSVCIgOiBOVUxMOworCUFz c2VydChldmVudF9zdHIgIT0gTlVMTCk7CisKKwlldl9xdWFsID0gaGVhcF9nZXRhdHRyKHJld3JU dXAsIEFudW1fcGdfcmV3cml0ZV9ldl9xdWFsLAorCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihw Z19yZXdyaXRlKSwgJmlzbnVsbCk7CisJZXZfYWN0aW9ucyA9IGhlYXBfZ2V0YXR0cihyZXdyVHVw LCBBbnVtX3BnX3Jld3JpdGVfZXZfYWN0aW9uLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihw Z19yZXdyaXRlKSwgJmlzbnVsbCk7CisKKwlwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChldl9xdWFs LCBldl9hY3Rpb25zLCAmcXVhbCwgJmFjdGlvbnMpOworCisJdG1wID0gbmV3X29ianRyZWUoIiIp OworCWlmIChxdWFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJXSEVSRSAle2NsYXVz ZX1zIiwgImNsYXVzZSIsIHF1YWwpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0 bXAsICJXSEVSRSAle2NsYXVzZX1zIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCX0K KworCWlmIChhY3Rpb25zID09IE5JTCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QoIk5PVEhJTkciKSk7CisJZWxzZQorCXsKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25z KQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QobGZpcnN0KGNlbGwp KSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBSVUxFICV7b3JfcmVwbGFj ZX1zICV7aWRlbnRpdHl9SSBBUyBPTiAle2V2ZW50fXMgVE8gJXt0YWJsZX1EICV7d2hlcmVfY2xh dXNlfXMgRE8gJXtpbnN0ZWFkfXMgJXthY3Rpb25zOiwgfXMiLCA3LAorCQkJCQkJICJvcl9yZXBs YWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0Ui IDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cnVsZW5hbWUs CisJCQkJCQkgImV2ZW50IiwgT2JqVHlwZVN0cmluZywgZXZlbnRfc3RyLAorCQkJCQkJICJ0YWJs ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJ CQkJCSAid2hlcmVfY2xhdXNlIiwgT2JqVHlwZU9iamVjdCwgdG1wLAorCQkJCQkJICJpbnN0ZWFk IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pbnN0ZWFkID8gIklOU1RFQUQiIDogIkFM U08iLAorCQkJCQkJICJhY3Rpb25zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCXN5c3RhYmxl X2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJhbnNmb3Jt U3RtdCAoQ1JFQVRFIFRSQU5TRk9STSkuCisgKgorICogR2l2ZW4gYSB0cmFuc2Zvcm0gT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0gY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFt ZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorICogKCBGUk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7 c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9OCisgKiAle3NpZ25hdHVyZV90b2Z9cyAp CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJhbnNmb3JtU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmFuc2Zvcm1TdG10ICpub2Rl ID0gKENyZWF0ZVRyYW5zZm9ybVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlPYmpUcmVlICAgICpzaWduYXR1cmU7CisJSGVhcFR1cGxlCXRyZlR1cDsKKwlIZWFwVHVwbGUJ bGFuZ1R1cDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3RyYW5zZm9ybSB0cmZGb3Jt OworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOwor CWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3RyYW5zZm9ybSB0dXBsZSAqLworCXRyZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShUUkZPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHJmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHRyYW5zZm9ybSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRy ZkZvcm0gPSAoRm9ybV9wZ190cmFuc2Zvcm0pIEdFVFNUUlVDVCh0cmZUdXApOworCisJLyogR2V0 IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJj aFN5c0NhY2hlMShMQU5HT0lELCB0cmZGb3JtLT50cmZsYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBs YW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9ybS0+dHJmbGFuZyk7CisJbGFuZ0Zvcm0g PSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9 RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAzLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJ CQkgInR5cGVuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUp LAorCQkJCQkJICJsYW5ndWFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgTmFtZVN0cihsYW5n Rm9ybS0+bGFubmFtZSkpOworCisJLyogRGVwYXJzZSB0aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlz dCAqLworCWlmIChPaWRJc1ZhbGlkKHRyZkZvcm0tPnRyZmZyb21zcWwpKQorCXsKKwkJTGlzdAkg ICAqcGFyYW1zID0gTklMOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZS T00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZG b3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1 IiwKKwkJCQkgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJv YykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9l cyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFs b2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9j Rm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCisJ CQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkJICAi dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1zID0gbGFwcGVuZChw YXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCQl9CisKKwkJc2lnbmF0dXJl ID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAoJXthcmd1bWVudHM6LCB9cykiLCAyLAor CQkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgICBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ CU5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSwKKwkJCQkJCQkJICAgImFyZ3VtZW50cyIsIE9i alR5cGVBcnJheSwgcGFyYW1zKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIoRlJP TSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zIiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsK KwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKwlpZiAoT2lkSXNWYWxpZCh0cmZGb3Jt LT50cmZ0b3NxbCkpCisJeworCQlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisKKwkJLyogQXBwZW5k IGEgJywnIGlmIHRyZmZyb21zcWwgaXMgcHJlc2VudCwgZWxzZSBhcHBlbmQgJygnICovCisJCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSA/ ICIsIiA6ICIoIik7CisKKwkJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgVE8gRlVO Q1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50 cmZ0b3NxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJ IHRyZkZvcm0tPnRyZnRvc3FsKTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFu Z2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UKKwkJICogY2F0YWxvZyB0byBnZXQg aW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9u YXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpwYXJhbV9vYmogPSBuZXdfb2JqdHJlZSgi Iik7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJ CQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9 IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJ CXNpZ25hdHVyZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwg fXMpIiwgMiwKKwkJCQkJCQkJICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ ICAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJCQlOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1 bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmVfdG9mfXMiLAorCQkJCQkJCSBz aWduYXR1cmUpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCisJYXBwZW5kX2Zv cm1hdF9zdHJpbmcocmV0LCAiKSIpOworCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJl bGVhc2VTeXNDYWNoZSh0cmZUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBcHBlbmQg YSBOVUxMLW9yLXF1b3RlZC1saXRlcmFsIGNsYXVzZS4gIFVzZWZ1bCBmb3IgQ09NTUVOVCBhbmQg U0VDVVJJVFkKKyAqIExBQkVMLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle251bGx9cyAl e2xpdGVyYWx9cworICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChPYmpU cmVlICpwYXJlbnQsIGNoYXIgKmVsZW1uYW1lLCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpUcmVlICAg ICp0b3A7CisJT2JqVHJlZSAgICAqcGFydDsKKworCXRvcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlw YXJ0ID0gbmV3X29ianRyZWVfVkEoIk5VTEwiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5 cGVCb29sLCAhdmFsdWUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRvcCwgIiV7bnVsbH1zIiwg cGFydCk7CisKKwlwYXJ0ID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkgICJwcmVzZW50 IiwgT2JqVHlwZUJvb2wsIHZhbHVlICE9IE5VTEwpOworCisJaWYgKHZhbHVlKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChwYXJ0LCAiJXt2YWx1ZX1MIiwgInZhbHVlIiwgdmFsdWUpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRvcCwgIiV7bGl0ZXJhbH1zIiwgcGFydCk7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChwYXJlbnQsIGVsZW1uYW1lLCB0b3ApOworfQorCisvKgorICogRGVwYXJzZSBh IENvbW1lbnRTdG10IHdoZW4gaXQgcGVydGFpbnMgdG8gYSBjb25zdHJhaW50LgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBDT01NRU5UIE9OIENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9OIFtE T01BSU5dICV7cGFyZW50b2JqfXMgSVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9Db21tZW50T25Db25zdHJhaW50U210KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbnN0clR1cDsKKwlGb3JtX3BnX2Nv bnN0cmFpbnQgY29uc3RyRm9ybTsKKwlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwlBc3NlcnQobm9k ZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCB8fCBub2RlLT5vYmp0eXBlID09IE9C SkVDVF9ET01DT05TVFJBSU5UKTsKKworCWNvbnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05T VFJPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgd2l0aCBPSUQg JXUiLCBvYmplY3RJZCk7CisJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVChjb25zdHJUdXApOworCisJaWYgKE9pZElzVmFsaWQoY29uc3RyRm9ybS0+Y29ucmVsaWQp KQorCQlPYmplY3RBZGRyZXNzU2V0KGFkZHIsIFJlbGF0aW9uUmVsYXRpb25JZCwgY29uc3RyRm9y bS0+Y29ucmVsaWQpOworCWVsc2UKKwkJT2JqZWN0QWRkcmVzc1NldChhZGRyLCBUeXBlUmVsYXRp b25JZCwgY29uc3RyRm9ybS0+Y29udHlwaWQpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNP TU1FTlQgT04gQ09OU1RSQUlOVCAle2lkZW50aXR5fXMgT04gJXtkb21haW59cyAle3BhcmVudG9i an1zIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKE5hbWVT dHIoY29uc3RyRm9ybS0+Y29ubmFtZSkpLAorCQkJCQkJICJkb21haW4iLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UKSA/ICJET01B SU4iIDogIiIsCisJCQkJCQkgInBhcmVudG9iaiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0 T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xh dXNlICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5v ZGUtPmNvbW1lbnQpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbnN0clR1cCk7CisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ29tbWVudFN0bXQgKENPTU1FTlQgT04gLi4uKS4K KyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY29tbWVu dCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDT01NRU5UIE9OICV7b2JqdHlw ZX1zICV7aWRlbnRpdHl9cyBJUyAle2NvbW1lbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbW1lbnRTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVl KQoreworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisKKwkvKgorCSAqIENvbnN0cmFp bnRzIGFyZSBzdWZmaWNpZW50bHkgZGlmZmVyZW50IHRoYXQgaXQgaXMgZWFzaWVyIHRvIGhhbmRs ZSB0aGVtCisJICogc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpF Q1RfRE9NQ09OU1RSQUlOVCB8fAorCQlub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJB SU5UKQorCXsKKwkJQXNzZXJ0KGFkZHJlc3MuY2xhc3NJZCA9PSBDb25zdHJhaW50UmVsYXRpb25J ZCk7CisJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRTbXQoYWRkcmVzcy5vYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBP TiAle29ianR5cGV9cyIsIDEsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIChjaGFyICopIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSk7CisK KwkvKgorCSAqIEFkZCB0aGUgb2JqZWN0IGlkZW50aXR5IGNsYXVzZS4gIEZvciB6ZXJvIGFyZ3Vt ZW50IGFnZ3JlZ2F0ZXMgd2UgbmVlZAorCSAqIHRvIGFkZCB0aGUgKCopIGJpdDsgaW4gYWxsIG90 aGVyIGNhc2VzIHdlIGNhbiBqdXN0IHVzZQorCSAqIGdldE9iamVjdElkZW50aXR5LgorCSAqCisJ ICogWFhYIHNob3VsZG4ndCB3ZSBpbnN0ZWFkIGZpeCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgZm9y IHplcm8tYXJndW1lbnQKKwkgKiBhZ2dyZWdhdGVzPworCSAqLworCWlmIChub2RlLT5vYmp0eXBl ID09IE9CSkVDVF9BR0dSRUdBVEUpCisJeworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9w Z19wcm9jIHByb2NGb3JtOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwg T2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCWlmICghSGVhcFR1cGxlSXNW YWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBw cm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJcHJvY0Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisJCWlmIChwcm9jRm9ybS0+ cHJvbmFyZ3MgPT0gMCkKKwkJCWlkZW50aXR5ID0gcHNwcmludGYoIiVzKCopIiwKKwkJCQkJCQkJ cXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2NGb3JtLT5w cm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1l KSkpOworCQllbHNlCisJCQlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBm YWxzZSk7CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJZWxzZQorCQlpZGVudGl0 eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICIle2lkZW50aXR5fXMiLCAiaWRlbnRpdHkiLCBpZGVudGl0eSk7CisKKwkv KiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNlOyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQg bGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVudH1z Iiwgbm9kZS0+Y29tbWVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBh IFNlY0xhYmVsU3RtdCAoU0VDVVJJVFkgTEFCRUwpCisgKgorICogR2l2ZW4gdGhlIE9iamVjdEFk ZHJlc3Mgb2YgdGhlIHRhcmdldCBvYmplY3QgYW5kIHRoZSBwYXJzZSB0cmVlIG9mIHRoZQorICog U0VDVVJJVFkgTEFCRUwgY29tbWFuZCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRo ZSBTRUNVUklUWSBMQUJFTAorICogY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog U0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBPTiAle29iamVjdF90eXBlX25hbWV9cyAl e2lkZW50aXR5fXMgSVMgJXtsYWJlbH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf U2VjTGFiZWxTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQorewor CVNlY0xhYmVsU3RtdCAqbm9kZSA9IChTZWNMYWJlbFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUJICAgKnJldDsKKworCUFzc2VydChub2RlLT5wcm92aWRlcik7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBPTiAle29ianR5cGV9cyAl e2lkZW50aXR5fXMiLCAzLAorCQkJCQkJICJwcm92aWRlciIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnByb3ZpZGVyLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSk7CisKKwkv KiBBZGQgdGhlIGxhYmVsIGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVkIGxp dGVyYWwuICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2xhYmVsfXMiLCBu b2RlLT5sYWJlbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0 ZUFtU3RtdCAoQ1JFQVRFIEFDQ0VTUyBNRVRIT0QpLgorICoKKyAqIEdpdmVuIGFuIGFjY2VzcyBt ZXRob2QgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgor ICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBBQ0NFU1MgTUVUSE9EIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRlbnRp dHl9SSBUWVBFICV7YW1fdHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVBbVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQlhbVR1cDsKKwlGb3JtX3BnX2Ft CWFtRm9ybTsKKwljaGFyCSAgICphbXR5cGU7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShB TU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlzd2l0Y2ggKGFtRm9ybS0+YW10eXBlKQorCXsKKwkJ Y2FzZSAnaSc6CisJCQlhbXR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgor CQkJYW10eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgdHlwZSAlYyBmb3IgYWNjZXNzIG1ldGhvZCIsIGFtRm9ybS0+YW10eXBlKTsK Kwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVu dGl0eX1JIFRZUEUgJXthbV90eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RCIsIDMsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+YW1uYW1l KSwKKwkJCQkJCSAiYW1fdHlwZSIsIE9ialR5cGVTdHJpbmcsIGFtdHlwZSwKKwkJCQkJCSAiaGFu ZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGFtRm9ybS0+YW1oYW5kbGVyKSk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rp b24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOwor CisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+ cGFyc2V0cmVlOworCW9iamVjdElkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOwor CisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVh dGVFeHRlbnNpb25TdG10KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVk cyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJ c3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRfQWx0ZXJDb2xsYXRpb25T dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJDb2xsYXRpb24ob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVy RG9tYWluU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSAgIGNtZC0+ZC5zaW1w bGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRl bnNpb25Db250ZW50c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkgIGNt ZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25T dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRl ckZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRm9yZWlnblNl cnZlclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0FsdGVyT2JqZWN0RGVwZW5kc1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRlcGVuZFN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxl LmFkZHJlc3MsCisJCQkJCQkJCQkJCQkgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck93bmVy U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVy UG9saWN5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclN0YXRz U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlclRTRGljdGlvbmFyeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0FsdGVyVHlwZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclVzZXJNYXBwaW5nU3RtdDoKKwkJCXJl dHVybiBkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CisJCWNhc2UgVF9Db21tZW50U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRTdG10KGNt ZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlw ZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlQW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9DcmVhdGVDb252ZXJzaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUNvbnZlcnNpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZURv bWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVN ICovCisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Ny ZWF0ZUV4dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZUZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGZHdTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9DcmVhdGVGdW5jdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGdW5j dGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1pbHlTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0NyZWF0ZVBMYW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUxh bmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OiAvKiBDUkVBVEUgVFlQRSBBUyBSQU5HRSAq LworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9DcmVhdGVTY2hlbWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRl U2NoZW1hU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0NyZWF0ZVN0YXRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0 YXRpc3RpY3NTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdG10 OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwor CQljYXNlIFRfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0 ZUZvcmVpZ25UYWJsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZVRhYmxlQXNTdG10OgkvKiBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgKi8KKwkJCXJldHVybiBk ZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEob2JqZWN0SWQsIHBhcnNldHJlZSk7CisK KwkJY2FzZSBUX0NyZWF0ZVRyYW5zZm9ybVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVU cmFuc2Zvcm1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmln U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X0RlZmluZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUsCisJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQlj YXNlIFRfSW5kZXhTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBU X1JlbmFtZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUu YWRkcmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUnVsZVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfVmlld1N0bXQ6 CQkvKiBDUkVBVEUgVklFVyAqLworCQkJcmV0dXJuIGRlcGFyc2VfVmlld1N0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1NlY0xhYmVsU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X1NlY0xhYmVsU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJZGVm YXVsdDoKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNv bW1hbmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNp bmcuCisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5k IGNvbnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUg cGFyc2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFs b2dzIGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhS ZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAor CQkJCQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRz ID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykK Kwl7CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChu b2RlVGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpU cmVlICAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVt bkRlZl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAq KSBlbHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJ CQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFs c2UsIE5VTEwpOworCQkJCQlpZiAodHJlZSAhPSBOVUxMKQorCQkJCQkJZWxlbWVudHMgPSBsYXBw ZW5kKGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdCh0cmVlKSk7CisJCQkJfQorCQkJCWJyZWFr OworCQkJY2FzZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVs b2coRVJST1IsICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBh IENvbGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Q29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNl YXJjaFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlD b250ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1hbmQgPSBO VUxMOworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGlu ZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkg KiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBj b2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRj aGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENv bnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0 eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxM T0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhT SVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJ ICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGls cy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhw cmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2JqZWN0IG5hbWVz IHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCisJICog ZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVy IHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJy aWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFs bHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3Vy cmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVy cmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0 cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2Ug PSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1Np bXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsK KwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24o Y21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dy YW50U3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0 cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7 CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNl X0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJEZWZh dWx0UHJpdmlsZWdlczoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNT dG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUg PSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIs IGNtZC0+dHlwZSk7CisJfQorCisJUG9wT3ZlcnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJl ZSkKKwl7CisJCUpzb25iCSAgICpqc29uYjsKKworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIo dHJlZSk7CisJCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpT T05CX0VTVElNQVRFRF9MRU4pOworCX0KKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQg c2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250 ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsK KworCXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmJkM2I1NGU1ZQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NzYgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQg dG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBz cGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBob3cgd2UgZXhwYW5kIHRoZSBKU09OIGVsZW1lbnQg aW50bworICogc3RyaW5nLgorICovCit0eXBlZGVmIGVudW0KK3sKKwlTcGVjVHlwZU5hbWUsCisJ U3BlY09wZXJhdG9yTmFtZSwKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVjU3RyaW5nLAorCVNwZWNO dW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY0lkZW50aWZpZXIsCisJU3BlY1JvbGUK K30gY29udlNwZWNpZmllcjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1ZSB0aGF0IHJlcHJlc2Vu dHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZf YWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UKK30JCQlqc29uX3RyaXZhbHVlOworCitzdGF0 aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBh cmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lm aWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNv bmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCSAgIEpzb25iVmFs dWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3Bl Y2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxi YWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpq c29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZh bHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUg b3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAq IGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVh bCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2lu X2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUp Cit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1 ZSByZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwg PSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJf Rk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7 CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxl bWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlrZXluYW1lKSkpOwor CXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9mYWxzZTsKKwlwZnJl ZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4gYSBKc29uYkNv bnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBp dC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5nLCBhbiBlcnJvciBp cyByYWlzZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3IgaXMgcmFpc2VkIHVu bGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhp c3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVk LgorICoKKyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3Ro IG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJ CQkJICBib29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5Owor CUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhh dCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0 cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxl biA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5l cihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09 IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4gSlNPTiBvYmplY3QiLCBrZXlu YW1lKSkpOworCX0KKworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgc3RyaW5nIiwga2V5bmFt ZSkpKTsKKworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZh bC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJp bmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFO Q0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+ PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVk IGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2 ZSBoZWxwZXIgZm9yIGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nLgorICoKKyAqIEZpbmQgdGhl ICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBpbnRv IHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9m bXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIFN0cmluZ0luZm8gYnVmKQor eworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIgKmNw OworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWludAkJ CWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNvbnRh aW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVuOwor CisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29udlNw ZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFsc2U7CisJCWNoYXIJICAg KnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxMOworCisJCWlmICgqY3Ag IT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKworCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIp OworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgqY3Ag PT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1lbnQg bmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBzZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBiZSB0 aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVjaWZpZWQgYWZ0ZXIgYSBjb2xvbi4KKwkJICovCisJ CWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJp bmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWlu aXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZB TkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjsp CisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Vu ZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAq IGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlp bml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1 ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3As IGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykK KwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3Ap OworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJh bSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlz ZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1Is CisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkg ZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIp KSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9 IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVy ID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVy ID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVj aWZpZXIgPSBTcGVjVHlwZU5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVj aWZpZXIgPSBTcGVjT3BlcmF0b3JOYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJ c3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNw ZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpj cCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRl ZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwg PSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZr ZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGlu dG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhw YW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBz dGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJh bSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg YSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBUaGUgdmFsdWUgbXVzdCBiZSBv ZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2lkZW50aWZp ZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3Ry OworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5nKTsKKworCXN0ciA9IHBuc3Ry ZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZy ZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBkb3Qtc2VwYXJh dGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisgKiBiaW5hcnkgYW5kIG1heSBj b250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqICht YW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRl ZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdo ZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxl bWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAq Lworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYs IEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252 YWwtPnR5cGUgPT0gamJ2QmluYXJ5KTsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIs IHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz LiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVm LCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUo c3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgdHlwZSBuYW1l LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBi dWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwlj aGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZSBp c19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hl bWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJ ICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhl IHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3Ig dHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkg KiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1l IHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJv bSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFp bmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAi c2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNv bmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVu YW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29u dGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwg dHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRj aCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7 CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJ CWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVt YSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmll cih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJp bmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLwor CWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIo c2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlf ZGVjb3IpOworCXBmcmVlKHNjaGVtYSk7CisJcGZyZWUodHlwZW5hbWUpOworCXBmcmVlKHR5cG1v ZHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIG9wZXJhdG9yIG5h bWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJ CQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUg TlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsK KwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwg TlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0 cik7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBh cyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0 eXBlIEJpbmFyeS4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgaXQgbXVzdCBjb250YWluIGEgImZtdCIg ZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYg dGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNl dCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJl dHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJw cmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIi4KKyAqCisgKiBUaGUgY2FsbGVy IGlzIHJlc3BvbnNpYmxlIHRvIGNoZWNrIGpzb252YWwgaXMgb2YgdHlwZSBqYnZTdHJpbmcgb3Ig amJ2QmluYXJ5LgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50eXBlID09 IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFsLT52 YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJfQor CWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2YWx1 ZSBwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisKKwkJLyoK KwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMg dG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0 aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNl KQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcgbGl0 ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisJU3RyaW5nSW5m b0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZ WF8iOworCWludAkJCWRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+ dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2Fz ZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICov CisJaWYgKHN0cnBicmsoc3RyLCAiXCdcXCIpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJ LyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVy ICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVM TCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4 dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhl cykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBs aXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShk cWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZh bHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNv bnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hh cgkgICAqc3RyZGF0dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5j dGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpz b252YWwtPnZhbC5udW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJk YXR1bSk7CisJcGZyZWUoc3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1 ZSBhcyBhIHJvbGUgbmFtZS4gIElmIHRoZSBpc19wdWJsaWMgZWxlbWVudCBpcyBzZXQgdG8KKyAq IHRydWUsIFBVQkxJQyBpcyBleHBhbmRlZCAobm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQg dGhlIGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLwor c3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFs dWUgKmpzb252YWwpCit7CisJanNvbl90cml2YWx1ZSBpc19wdWJsaWM7CisKKwlpc19wdWJsaWMg PSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAor CQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1YmxpYyA9PSB0dl90cnVlKQorCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIpOworCWVsc2UKKwl7CisJCWNoYXIJ ICAgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkJICJyb2xlbmFtZSIsIGZh bHNlLCBOVUxMKTsKKwkJaWYgKHJvbGVuYW1lKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyb2xlbmFtZSkpOworCQkJcGZyZWUocm9sZW5hbWUp OworCQl9CisJfQorfQorCisvKgorICogRXhwYW5kIG9uZSBKU09OIGVsZW1lbnQgaW50byB0aGUg b3V0cHV0IFN0cmluZ0luZm8gYWNjb3JkaW5nIHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZp ZXIuICBUaGUgZWxlbWVudCB0eXBlIGlzIHZhbGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNl ZAorICogaWYgaXQgZG9lc24ndCBtYXRjaCB3aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNp b24gc3BlY2lmaWVyLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lv biB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJm YWxzZSIgaW4gZm9ybWF0dGVkIHN0cmluZyBleHBhbnNpb24pLgorICovCitzdGF0aWMgYm9vbAor ZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwgSnNv bmJWYWx1ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3Qg Y2hhciAqZm10KQoreworCWJvb2wJCXJlc3VsdCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2FsbGJh Y2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5n LCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJewor CQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxl cnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9 IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29u dGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVu dCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikKKwl7 CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJp bmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9y ICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5 cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJCQli cmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3Ry dWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29u dmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYsIGpzb252YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5cGUg IT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igc3RydWN0IGZvciAl JXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBl KSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1ZiwganNvbnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYgKGpzb252YWwtPnR5 cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlTmFtZToKKwkJCWlmIChqc29udmFsLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBK U09OIHN0cnVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJh bSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVuYW1lKGJ1ZiwganNv bnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvck5hbWU6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9vcGVyYXRvcihi dWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVyOgorCQkJaWYgKGpz b252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJl eHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJ CQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9udW1iZXIo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6CisJCQlpZiAoanNv bnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhw ZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJ CQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9yb2xlKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0 YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8q CisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJyYXksIGV4cGFuZGluZyBl YWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVyIHRoZSBnaXZlbiBjb252 ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLgor ICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFy ICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwgY29u dlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAqZm10KQoreworCUVycm9y Q29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250YWluZXIgKmNvbnRhaW5l cjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZhbHVlCXY7CisJaW50CQkJdHlwZTsKKwli b29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEgYXJyYXllbGVtOworCisJLyogSWYg d2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0 IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBm bXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10 OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJy b3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0OworCX0KKworCWlmIChqc29uYXJyLT50 eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBp cyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52 YWwuYmluYXJ5LmRhdGE7CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXki LCBwYXJhbSkpKTsKKworCWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29u Ykl0ZXJhdG9ySW5pdChjb250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JO ZXh0KCZpdCwgJnYsIHRydWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9F TEVNKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBh bmRfb25lX2pzb25iX2VsZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5V TEwpKQorCQkJeworCQkJCWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCBhcnJheXNlcCk7CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXll bGVtLmRhdGEsIGFycmF5ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0K Kwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5w cmV2aW91czsKK30KKworLyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2Nv bW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNv bl9zdHIpCit7CisJRGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8JYnVm ID0gKFN0cmluZ0luZm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0 U3RyaW5nSW5mbyhidWYpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBv aW50ZXJHZXREYXR1bShqc29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9p bnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVjdXJzaXZlKCZqc29uYi0+cm9vdCwgYnVmKTsKKwor CXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVk IHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlz IHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRo aXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGlj aCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJs eSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNv bnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToK KyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRlcmFsICUKKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmds ZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1x dWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQll eHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVy YWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUg c3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8g cXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5h bWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlv bmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRz IHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisg KiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBh cnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdf VEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJanNvbl9zdHIgPSB0ZXh0X3RvX2Nz dHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChkZXBhcnNl X2RkbF9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRl eHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICogWFhY OiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4K KyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJ ZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIg KikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA2OTAyNzA5 OTU2Li42YmVhZTJhMTgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0x ODI1LDYgKzE4MjUsNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElP Tl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9w Q2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFi bGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBl OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAppbmRleCA0MmNjZWQ5ZWJlLi4yODQ0ZDM2NTIxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZApAQCAtMTcsNiArMTcsOCBAQCBiYWNrZW5kX3NvdXJj ZXMgKz0gZmlsZXMoCiAgICdjb3B5dG8uYycsCiAgICdjcmVhdGVhcy5jJywKICAgJ2RiY29tbWFu ZHMuYycsCisgICdkZGxfZGVwYXJzZS5jJywKKyAgJ2RkbF9qc29uLmMnLAogICAnZGVmaW5lLmMn LAogICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRzLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggN2JlOWE1MDE0Ny4uYmRmNWNmYmNlOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBA IC0xMTg4Nyw0ICsxMTg4NywxMCBAQAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5 cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmlu X21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ICc0NjQyJywgZGVzY3Ig PT4gJ2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8gSlNPTiBmb3JtYXQgc3RyaW5nJywKKyAg cHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAor ICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQgSlNPTiBmb3Jt YXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9 PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCiBdCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNjMwMDk0NTczNC4uYTM5OThjNTk1YSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaApAQCAtMTk3Myw2ICsxOTczLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJU YWJsZVN0bXQKIAlMaXN0CSAgICpjbWRzOwkJCS8qIGxpc3Qgb2Ygc3ViY29tbWFuZHMgKi8KIAlP YmplY3RUeXBlCW9ianR5cGU7CQkvKiB0eXBlIG9mIG9iamVjdCAqLwogCWJvb2wJCW1pc3Npbmdf b2s7CQkvKiBza2lwIGVycm9yIGlmIHRhYmxlIG1pc3NpbmcgKi8KKwlib29sICAgICAgICB0YWJs ZV9saWtlOwkJLyogaW50ZXJuYWxseSBnZW5lcmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVzZSAqLwog fSBBbHRlclRhYmxlU3RtdDsKIAogdHlwZWRlZiBlbnVtIEFsdGVyVGFibGVUeXBlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2Rk bF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOWMyNTQ5 Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRp ZgkJCQkJCQkvKiBERExfREVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29w L2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApp bmRleCBiNTg1ODEwYjlhLi4xZmNhMjI3ZjA1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29w L2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJ U0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0Ny ZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlT Q1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTM5LDYg KzQwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQVRTdWJjbWQKIHsKIAlPYmplY3RBZGRy ZXNzIGFkZHJlc3M7CQkvKiBhZmZlY3RlZCBjb2x1bW4sIGNvbnN0cmFpbnQsIGluZGV4LCAuLi4g Ki8KIAlOb2RlCSAgICpwYXJzZXRyZWU7CisJY2hhcgkgICAqdXNpbmdleHByOwogfSBDb2xsZWN0 ZWRBVFN1YmNtZDsKIAogdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZApAQCAtNjIsNiAr NjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9i amVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAg ICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApAQCAtMTAwLDYgKzEwMywxMiBAQCB0eXBl ZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJb2JqdHlwZTsK IAkJfQkJCWRlZnByaXZzOworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJl c3M7CisJCQlOb2RlCQkgKnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJZDsKIAogCXN0 cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICovCmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDUwZDg2Y2IwMWIuLjVjZDhhZjllNjYgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0xNjExLDYgKzE2MTEsOSBAQCBPU0luZm8KIE9TU0xDaXBoZXIK IE9TU0xEaWdlc3QKIE9WRVJMQVBQRUQKK09iakVsZW0KK09ialRyZWUKK09ialR5cGUKIE9iamVj dEFjY2Vzc0Ryb3AKIE9iamVjdEFjY2Vzc05hbWVzcGFjZVNlYXJjaAogT2JqZWN0QWNjZXNzUG9z dEFsdGVyCkBAIC0zMTc4LDYgKzMxODEsNyBAQCBjb21wYXJlX2NvbnRleHQKIGNvbmZpZ192YXJf dmFsdWUKIGNvbnRhaW5fYWdnc19vZl9sZXZlbF9jb250ZXh0CiBjb252ZXJ0X3Rlc3RleHByX2Nv bnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvcHlfZGF0YV9kZXN0X2NiCiBjb3B5X2RhdGFfc291cmNl X2NiCiBjb3JlX1lZU1RZUEUKLS0gCjIuMzguMQoK --000000000000061afb05f176f684--