Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0jde-002AEi-0X for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 17:15:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0jdc-00G226-1g for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 17:15:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0jdb-00G21y-2E for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 17:15:56 +0000 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0jdZ-00000001neJ-1Mar for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 17:15:55 +0000 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-b941ec6a368so170950466b.0 for ; Thu, 12 Mar 2026 10:15:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773335752; cv=none; d=google.com; s=arc-20240605; b=GjdhEPcnJxPR0+WRYdTtHUQeRfOB9dN29rXXTAEkIsb1azVe3try2k/Mk4+NHuNaM+ CVD/OeI3bqkJz+GaZpVWAcKmDfBtmp8uP7g4PNRViZ8uTiQ3FmHdEmZ6RZ4OEV6YI4/t i/qcqnz4f8t5EsZuDbX0uNnx6CipV3SVhN+0yo1xLfbaweAS+xvW09sazULnovF8luLe va+USV8LMlY5z0HoWwFul1ofxvYfdy6k8Ir0lmhpKb5eiLEwrFP0285Doui905/4u6AP eDHVhANCm+Zq5j4DjiBHn8U+JVx/vulWczidYbQYw8J7KSCKcL1cG8v3SK9vGY++xZdM ls2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=l7/gAe6dbhxL1QtUN49RnLG4sUhcXgn9j2FssGY1iC8=; fh=SJLwFGdPtZLY7VbitLxurgfR/KErAEzsrNKdfS6uTcE=; b=Neuqkq8oPTaGRerU7KRbDdOdyuBZhs7aeMxLVzqwnz6ewuZ/pYh6ShDT8vneIfOA1U ILbWsVOHuqjRuzJ2eQe5doRD6KLywj+Ke2+wK0PjJo5ZAgN9KpjOxODNfKldiF72HBcN 8QNs7G8uKfjbBbnDkoWk+G6QfMzyhA6kEx3Tf4Ah0wEPJMQAEUY+B5yny2K3BkdDcyUE lKH+RSmGeUjoYQanq6b2YA0sy9hg76JwHKkv/GoQCdxcH7ZwGiwyiOHMOGgn2h4wzJYx Yc/EC4X8OOhtW+w3M++L9du1QOps4RralgM82kZgJVKHLt89jyMmPp4LS18tMofN7W5G kwnw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773335752; x=1773940552; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=l7/gAe6dbhxL1QtUN49RnLG4sUhcXgn9j2FssGY1iC8=; b=QwVP1qH2FA0xzeTVGm2+2feWTjDC0UJKQxtEzXoi/NV6uE7lhbxS/qyGvaBkbDUrZV J2blBP6JQBTDGbVxYyysPxJZgBYC11cngenK/upkHLEXfirQyTL8YdrWIuzuPgUtCPXm 7Bwhisc8MUOlMmZY1MsEZ000oqGmWgq0I3Ks9PTwfWfCb6Ml4shxBhcQf1QA2IjkrzNu Kcb9YJioe0chq0ev8t5QojbKcS8jFmIYbqIVAsVvbfX2Hf2oLLIlb8OIKbi+h5W9L/LM TRkz6Bpq/FccFLUDp6XFzM3MmZdIKgia4zW8uPsDizGRTePmnsoMNX7J+POKt1aykQXf qXqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773335752; x=1773940552; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=l7/gAe6dbhxL1QtUN49RnLG4sUhcXgn9j2FssGY1iC8=; b=c64UhjGWpm6EyxCxMHb8zTO7csbfsqHqt3ZSQubBX+buC2i0Nwssp3NaBEYH+n1Hx/ awV/ih4HVrTFbcla5zdJlUj4o/LxO1luQqgGC4m8vkZ5wLxvyDuF8tRy6zwGxGxMoEZj pS6wRCPIrxyhqx+T/Eg1ALpq9vHUNUQdMBr6/JbkE5ofJqS5D7KgRVl3VL3NDAdtp6/d ic8njeDYZKP8B3yRTDf/7ltSJP3HDEwDhtjMptMU77b4M8wTfqx526bzb/2mVJnJuCHs GewTmuIpg8IZ7DBmNKlXAMf9NHm4fwXztWAjO+7oU19I5Lw3R9u/SzGNwOgSTGcQ+XV4 8sdw== X-Gm-Message-State: AOJu0Ywa7L/8jb4pJSMa7RPww9ln5GZkheRRHUDD8qzQ65y/XtC7bSzu jlmPFIz9GAJqdDFwo8xgEfOxBzniBNCCoShlv27mcaHSrrqMoBBPh4cC2YsP66Xz79Ns6gFE84L SpzX4WdDI4kuR9+qKbPOZhnrLRIbafTM= X-Gm-Gg: ATEYQzwQesOB3A47nC2/y7/det0fpmMgvDhl52S1v6WfAT19TFcFmoA7cRxQ1z1UICa lXYRkgv7gaqYCE93UcXa3BmFiZmFwRag2asw5gHrAgbKXZ/TR4VPbPnzRNMgHzIuqK1ad4iV/Rf bVvARY61Lf9ujEX1SAJLNQfcBTlpAPpN79J7Z90CXWabHNXyAmkfEhJufpXml113XVVXifQWS3g zVCVVvvFx1SIffs6mi+TkAN/78/XLFpd6UJoyooRgkDf5XFpy4Tay6uuBp6BZBPj7rr8U1J4VL/ WcruOx7LFXRUyiQUetd++R3I6MVDpiqgeqRxztg= X-Received: by 2002:a17:907:2d14:b0:b8d:9bcc:9016 with SMTP id a640c23a62f3a-b976513f0b6mr11644866b.37.1773335751702; Thu, 12 Mar 2026 10:15:51 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Thu, 12 Mar 2026 13:15:39 -0400 X-Gm-Features: AaiRm5232VbAcQ9kl74CYM7XxHCG1SluHkJ7mriqEbtfSK8hvqnEbSfUsePoyRw Message-ID: Subject: Re: pg_plan_advice To: "David G. Johnston" Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008c777d064cd6e70d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008c777d064cd6e70d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 10, 2026 at 10:55=E2=80=AFAM Robert Haas wrote: > Thanks. Here's v19. I've now committed the main patch. I think that I'm not likely to get too much more feedback on that in this release cycle, and I judge that more people will be sad if it doesn't get shipped this cycle than if it does. That might turn out to be catastrophically wrong, but if many problem reports quickly begin to emerge, it can always be reverted. I'm hopeful my testing has been thorough enough to avoid that, but there's a big difference between lab-testing and real world usage, so we'll see. I'm still hoping to get some more feedback on the remaining patches, which are much smaller and conceptually simpler. While there is no time to redesign them at this point in the release cycle, there is still the opportunity to fix bugs, or decide that they're too half-baked to ship. So here is v20 with just those patches. Of course, post-commit review of the main patch is also very welcome. Thanks, --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000008c777d064cd6e70d Content-Type: application/octet-stream; name="v20-0002-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Disposition: attachment; filename="v20-0002-Test-pg_plan_advice-using-a-new-test_plan_advice.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnqadc41 RnJvbSBjZTdkZWExMmVkZjc3NDhhMGE4YWJmYzU5ZmY1N2NjZGFmMTY4YmI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNyBGZWIgMjAyNiAwOTozNjowOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDIv M10gVGVzdCBwZ19wbGFuX2FkdmljZSB1c2luZyBhIG5ldyB0ZXN0X3BsYW5fYWR2aWNlCiBtb2R1 bGUuCgpUaGUgVEFQIHRlc3QgaW5jbHVkZWQgaW4gdGhpcyBuZXcgbW9kdWxlIHJ1bnMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMKd2l0aCBwZ19wbGFuX2FkdmljZSBsb2FkZWQuIEl0IGFycmFuZ2VzIGZv ciBlYWNoIHF1ZXJ5IHRvIGJlIHBsYW5uZWQKdHdpY2UuICBUaGUgZmlyc3QgdGltZSwgd2UgZ2Vu ZXJhdGUgcGxhbiBhZHZpY2UuIFRoZSBzZWNvbmQgdGltZSwgd2UKcmVwbGFuIHRoZSBxdWVyeSB1 c2luZyB0aGUgcmVzdWx0aW5nIGFkdmljZSBzdHJpbmcuIElmIHRoZSB0ZXN0cwpmYWlsLCB0aGF0 IG1lYW5zIHRoYXQgdXNpbmcgcGdfcGxhbl9hZHZpY2UgdG8gdGVsbCB0aGUgcGxhbm5lciB0bwpk byB3aGF0IGl0IHdhcyBnb2luZyB0byBkbyBhbnl3YXkgYnJlYWtzIHNvbWV0aGluZywgd2hpY2gg aW5kaWNhdGVzCmEgcHJvYmxlbSBlaXRoZXIgd2l0aCBwZ19wbGFuX2FkdmljZSBvciB3aXRoIHRo ZSBwbGFubmVyLgoKVGhlIHRlc3QgYWxzbyBlbmFibGVzIHBnX3BsYW5fYWR2aWNlLmZlZWRiYWNr X3dhcm5pbmdzLCBzbyB0aGF0IGlmIHRoZQpwbGFuIGFkdmljZSBmYWlscyB0byBhcHBseSBjbGVh bmx5IHdoZW4gdGhlIHF1ZXJ5IGlzIHJlcGxhbm5lZCwgYQpmYWlsdXJlIHdpbGwgb2NjdXIuCi0t LQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgfCAgMjggKysrKwog c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIHwgIDI5ICsrKysK IC4uLi90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsICB8ICA2NSArKysr KysrKwogLi4uL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jICAgICAgIHwgMTQz ICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2Fkdmlj ZS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9w bGFuX2FkdmljZS90LzAwMV9yZXBsYW5fcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMKCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQppbmRleCA0YWM1Yzg0ZGI0My4uYTE1NDAyNjljZjUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMzks NiArMzksNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3Rfb2F0X2hvb2tzIFwKIAkJICB0ZXN0X3Bh cnNlciBcCiAJCSAgdGVzdF9wZ19kdW1wIFwKKwkJICB0ZXN0X3BsYW5fYWR2aWNlIFwKIAkJICB0 ZXN0X3ByZWR0ZXN0IFwKIAkJICB0ZXN0X3JhZGl4dHJlZSBcCiAJCSAgdGVzdF9yYnRyZWUgXApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvbWVzb24uYnVpbGQKaW5kZXggZTJiM2VlZjQxMzYuLjdjMDUyODAzYzk4IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvbWVz b24uYnVpbGQKQEAgLTQwLDYgKzQwLDcgQEAgc3ViZGlyKCd0ZXN0X21pc2MnKQogc3ViZGlyKCd0 ZXN0X29hdF9ob29rcycpCiBzdWJkaXIoJ3Rlc3RfcGFyc2VyJykKIHN1YmRpcigndGVzdF9wZ19k dW1wJykKK3N1YmRpcigndGVzdF9wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3Rlc3RfcHJlZHRlc3Qn KQogc3ViZGlyKCd0ZXN0X3JhZGl4dHJlZScpCiBzdWJkaXIoJ3Rlc3RfcmJ0cmVlJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZSBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYmUwMjZjZTM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyOCBAQAor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvTWFrZWZpbGUKKworUEdGSUxFREVT QyA9ICJ0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmlj ZSB3b3JrcyIKKworTU9EVUxFX2JpZyA9IHRlc3RfcGxhbl9hZHZpY2UKK09CSlMgPSBcCisJJChX SU4zMlJFUykgXAorCXRlc3RfcGxhbl9hZHZpY2UubworCitFWFRSQV9JTlNUQUxMID0gY29udHJp Yi9wZ19wbGFuX2FkdmljZQorCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9QR1hTCitQR19D T05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQor aW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxh bl9hZHZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9j b250cmliLWdsb2JhbC5taworZW5kaWYKKworb3ZlcnJpZGUgQ1BQRkxBR1MgKz0gLUkkKHRvcF9z cmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworUkVHUkVTU19TSExJQj0kKGFic190b3Bf YnVpbGRkaXIpL3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVH UkVTU19TSExJQgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZmRlNDIwYmFlZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS9tZXNv bi5idWlsZApAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0X3BsYW5fYWR2aWNlX3NvdXJj ZXMgPSBmaWxlcygKKyAgJ3Rlc3RfcGxhbl9hZHZpY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVt ID09ICd3aW5kb3dzJworICB0ZXN0X3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5w cm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X3Bs YW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X3BsYW5fYWR2aWNlIC0gdGVzdCB3 aGV0aGVyIGdlbmVyYXRlZCBwbGFuIGFkdmljZSB3b3JrcycsXSkKK2VuZGlmCisKK3Rlc3RfcGxh bl9hZHZpY2UgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X3BsYW5fYWR2aWNlJywKKyAgdGVzdF9wbGFu X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBwZ19wbGFuX2FkdmljZV9p bmMsCisgIGt3YXJnczogcGdfdGVzdF9tb2RfYXJncywKKykKK3Rlc3RfaW5zdGFsbF9saWJzICs9 IHRlc3RfcGxhbl9hZHZpY2UKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X3BsYW5fYWR2 aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29u LmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAg J3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNzLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlL3QvMDAxX3JlcGxhbl9yZWdyZXNz LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOGZmYTRkMTFhZQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90LzAw MV9yZXBsYW5fcmVncmVzcy5wbApAQCAtMCwwICsxLDY1IEBACisjIENvcHlyaWdodCAoYykgMjAy MS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFJ1biB0aGUg Y29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNoZWNrIGZvciBw cm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3Vz ZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoZGly bmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFy eSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicp OworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmlndXJhdGlvbi4K KyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzPSd0ZXN0X3BsYW5fYWR2aWNlJworcGdfcGxhbl9hZHZpY2UuYWx3YXlz X2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitwZ19wbGFuX2FkdmljZS5mZWVkYmFja193 YXJuaW5ncz10cnVlCitFT00KKyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRo KCIuLi8uLi8uLi8uLiIpOworCisjIC0tZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZp bmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jlc3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJl Z3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4KK215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVT U19TSExJQn0pOworCisjIC0tb3V0cHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBw bGFjZSB0aGUgb3V0cHV0IGZpbGVzLgorbXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczo6dG1wX2NoZWNrOworCisjIC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9m IHRoZSBpbnB1dCBmaWxlcy4KK215ICRpbnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MiOworCisjIFJ1biB0aGUgdGVzdHMuCitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdS RVNTfSAuICIgIgorCSAgLiAiLS1iaW5kaXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwi ICIKKwkgIC4gIi0taG9zdD0iIC4gJG5vZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4g JG5vZGUtPnBvcnQgLiAiICIKKwkgIC4gIi0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIKKwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAg IgorCSAgLiAiLS1pbnB1dGRpcj1cIiRpbnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwi JG91dHB1dGRpclwiIik7CisKKyMgRHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwg aWYgdGhlcmUgaXMgb25lCitpZiAoJHJjICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRk aXIvcmVncmVzc2lvbi5kaWZmcyI7CisJaWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0g ZHVtcGluZyAkZGlmZnMgPT09XG4iOworCQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXBy aW50ICI9PT0gRU9GID09PVxuIjsKKwl9Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywg MCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFzcycpOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5fYWR2aWNlLmMg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2FkdmljZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmY1MDM5YjVjOAotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9wbGFuX2FkdmljZS90ZXN0X3BsYW5f YWR2aWNlLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHRl c3RfcGxhbl9hZHZpY2UuYworICoJICBUZXN0IHBnX3BsYW5fYWR2aWNlIGJ5IHBsYW5uaW5nIGV2 ZXJ5IHF1ZXJ5IHdpdGggZ2VuZXJhdGVkIGFkdmljZS4KKyAqCisgKiBXaXRoIHRoaXMgbW9kdWxl IGxvYWRlZCwgZXZlcnkgdGltZSBhIHF1ZXJ5IGlzIGV4ZWN1dGVkLCB3ZSBlbmQgdXAKKyAqIHBs YW5uaW5nIGl0IHR3aWNlLiBUaGUgZmlyc3QgdGltZSB3ZSBwbGFuIGl0LCB3ZSBnZW5lcmF0ZSBw bGFuIGFkdmljZSwKKyAqIHdoaWNoIHdlIHRoZW4gZmVlZCBiYWNrIHRvIHBnX3BsYW5fYWR2aWNl IGFzIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZS4KKyAqIEl0IGlzIHRoZW4gcGxhbm5lZCBhIHNl Y29uZCB0aW1lIHVzaW5nIHRoYXQgYWR2aWNlLiBUaGlzIGhvcGVmdWxseQorICogYWxsb3dzIHVz IHRvIGRldGVjdCBjYXNlcyB3aGVyZSB0aGUgYWR2aWNlIGlzIGluY29ycmVjdCBvciBjYXVzZXMK KyAqIGZhaWx1cmVzIG9yIHBsYW4gY2hhbmdlcyBmb3Igc29tZSByZWFzb24uCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfcGxhbl9hZHZpY2UvdGVzdF9wbGFuX2Fk dmljZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBnX3BsYW5fYWR2aWNlLmgiCisj aW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIGJvb2wg aW5fcmVjdXJzaW9uID0gZmFsc2U7CisKK3N0YXRpYyBjaGFyICp0ZXN0X3BsYW5fYWR2aWNlX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwKKwkJCQkJCQkJCSAgUXVlcnkgKnBhcnNlLAorCQkJ CQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCQkJCQkgIGludCBjdXJzb3JP cHRpb25zLAorCQkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyBEZWZFbGVtICpm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKwor LyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQp Cit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlzb3JfaG9v ayBob29rKTsKKworCS8qCisJICogQXNrIHBnX3BsYW5fYWR2aWNlIHRvIGdldCBhZHZpY2Ugc3Ry aW5ncyBmcm9tIHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcgorCSAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCisJKCphZGRfYWR2 aXNvcl9mbikgKHRlc3RfcGxhbl9hZHZpY2VfYWR2aXNvcik7Cit9CisKKy8qCisgKiBSZS1wbGFu IHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJuIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBh cyB0aGUKKyAqIHN1cHBsaWVkIGFkdmljZS4KKyAqLworc3RhdGljIGNoYXIgKgordGVzdF9wbGFu X2FkdmljZV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJ CSBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJCQkJIEV4 cGxhaW5TdGF0ZSAqZXMpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10OworCWludAkJCXNhdmVfbmVz dGxldmVsID0gMDsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJRGVmRWxlbSAgICAqYWR2aWNl X3N0cmluZ19pdGVtOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBm cm9tIHRoZSBwbGFubmVyIGFuZCB0cmlnZ2VycyBwbGFubmluZywKKwkgKiB3ZSBuZWVkIGEgcmVj dXJzaW9uIGd1YXJkLgorCSAqLworCWlmIChpbl9yZWN1cnNpb24pCisJCXJldHVybiBOVUxMOwor CisJUEdfVFJZKCk7CisJeworCQlpbl9yZWN1cnNpb24gPSB0cnVlOworCisJCS8qCisJCSAqIFBs YW5uaW5nIGNhbiB0cmlnZ2VyIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgd2hpY2ggY2FuIHJlc3Vs dCBpbgorCQkgKiBzZW5kaW5nIE5PVElDRSBtZXNzYWdlcyBvciBvdGhlciBvdXRwdXQgdG8gdGhl IGNsaWVudC4gVG8gYXZvaWQKKwkJICogdGhhdCwgd2Ugc2V0IGNsaWVudF9taW5fbWVzc2FnZXMg PSBFUlJPUiBpbiB0aGUgaG9wZXMgb2YgZ2V0dGluZworCQkgKiB0aGUgc2FtZSBvdXRwdXQgd2l0 aCBhbmQgd2l0aG91dCB0aGlzIG1vZHVsZS4KKwkJICoKKwkJICogV2UgYWxzbyBuZWVkIHRvIHNl dCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgc28KKwkJICogdGhh dCBwZ19wbGFuX2FkdmljZSB3aWxsIGdlbmVyYXRlIGFuIGFkdmljZSBzdHJpbmcsIHNpbmNlIHRo ZSB3aG9sZQorCQkgKiBwb2ludCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhY2Nlc3MgdG8g dGhhdC4KKwkJICovCisJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCXNl dF9jb25maWdfb3B0aW9uKCJjbGllbnRfbWluX21lc3NhZ2VzIiwgImVycm9yIiwKKwkJCQkJCSAg UEdDX1NVU0VULCBQR0NfU19TRVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUs IDAsIGZhbHNlKTsKKwkJc2V0X2NvbmZpZ19vcHRpb24oInBnX3BsYW5fYWR2aWNlLmFsd2F5c19z dG9yZV9hZHZpY2VfZGV0YWlscyIsICJ0cnVlIiwKKwkJCQkJCSAgUEdDX1NVU0VULCBQR0NfU19T RVNTSU9OLAorCQkJCQkJICBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKworCQkv KgorCQkgKiBSZXBsYW4uIFdlIG11c3QgY29weSB0aGUgUXVlcnksIGJlY2F1c2UgdGhlIHBsYW5u ZXIgbW9kaWZpZXMgaXQuCisJCSAqIChBcyBub3RlZCBlbHNld2hlcmUsIHRoYXQncyB1bmZvcnR1 bmF0ZTsgcGVyaGFwcyBpdCB3aWxsIGJlIGZpeGVkCisJCSAqIHNvbWUgZGF5LikKKwkJICovCisJ CXBzdG10ID0gcGxhbm5lcihjb3B5T2JqZWN0KHBhcnNlKSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JP cHRpb25zLAorCQkJCQkJZ2xvYi0+Ym91bmRQYXJhbXMsIGVzKTsKKwl9CisJUEdfRklOQUxMWSgp OworCXsKKwkJaW5fcmVjdXJzaW9uID0gZmFsc2U7CisJfQorCVBHX0VORF9UUlkoKTsKKworCS8q IFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgKi8KKwlpZiAoc2F2ZV9uZXN0bGV2ZWwgPiAwKQor CQlBdEVPWGFjdF9HVUMoZmFsc2UsIHNhdmVfbmVzdGxldmVsKTsKKworCS8qIEV4dHJhY3QgYW5k IHJldHVybiB0aGUgYWR2aWNlIHN0cmluZyAqLworCXBncGFfaXRlbSA9IGZpbmRfZGVmZWxlbV9i eV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCQkJCQkJInBnX3BsYW5fYWR2 aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiZXh0ZW5zaW9u IHN0YXRlIGZvciBwZ19wbGFuX2FkdmljZSBub3QgZm91bmQiKTsKKwlhZHZpY2Vfc3RyaW5nX2l0 ZW0gPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJ CQkJCQkJCQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0g TlVMTCkKKwkJZWxvZyhFUlJPUiwKKwkJCSAiYWR2aWNlIHN0cmluZyBmb3IgcGdfcGxhbl9hZHZp Y2Ugbm90IGZvdW5kIGluIGV4dGVuc2lvbiBzdGF0ZSIpOworCXJldHVybiBzdHJWYWwoYWR2aWNl X3N0cmluZ19pdGVtLT5hcmcpOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVt IG9iamVjdHMgZm9yIGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmlu ZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlm b3JlYWNoX25vZGUoRGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRl bS0+ZGVmbmFtZSwgZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVy biBOVUxMOworfQotLSAKMi41MS4wCgo= --0000000000008c777d064cd6e70d Content-Type: application/octet-stream; name="v20-0001-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v20-0001-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnqadb60 RnJvbSA3MWMzYzRkM2Q3ZGU2ODUxMGNiNmU1ZTZlNTk4MDkwMzVhNzhlYjQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMCAx LzNdIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBhdXRvbWF0ZWQsIGxhcmdlLXNjYWxlIGNvbGxlY3Rpb24gb2YgcXVlcmllcyBhbmQKdGhl IGFzc29jaWF0ZWQgcGxhbiBhZHZpY2Ugc3RyaW5ncyB1c2luZyBlaXRoZXIgYmFja2VuZC1sb2Nh bCBtZW1vcnkKb3IgZHluYW1pYyBzaGFyZWQgbWVtb3J5LiBJbiBlaXRoZXIgY2FzZSwgbWVtb3J5 IHVzYWdlIGNhbiBiZSBsaW1pdGVkCmJ5IHJlc3RyaWN0aW9uIHRoZSBtYXhpbXVtIG51bWJlciBv ZiBxdWVyaWVzIGFuZCBhZHZpY2Ugc3RyaW5ncwpzdG9yZWQuIENhcmUgc2hvdWxkIGJlIHRha2Vu IHdpdGggdGhlc2UgdmFsdWVzLCBhbmQgd2l0aCB0aGUgdXNlIG9mCnRoaXMgbW9kdWxlIGluIGdl bmVyYWwsIGJlY2F1c2UgaXQncyBlYXN5IHRvIGNoZXcgdXAgYW4gdW5yZWFzb25hYmx5Cmxhcmdl IGFtb3VudCBvZiBtZW1vcnkuIFVubGlrZSBwZ19zdGF0X3N0YXRlbWVudHMsIHRoaXMgbW9kdWxl IGRvZXMKbm90IHByb3ZpZGUgZm9yIHF1ZXJ5IG5vcm1hbGl6YXRpb24gb3IgZXZlbiBkZWR1cGxp Y2F0aW9uOyBpdCBzaW1wbHkKbWFrZXMgYSByZWNvcmQgZm9yIGV2ZXJ5IHF1ZXJ5IHBsYW5uZWQu CgpJdCBjYW4gYmUgdXNlZnVsIHRvIGVuYWJsZSBxdWVyeSBJRCBjb21wdXRhdG9uIGJlZm9yZSB1 c2luZyB0aGUKbW9kdWxlLCBidXQgaXQncyBub3QgcmVxdWlyZWQuIElmIG5vdCBkb25lLCBhbGwg cXVlcmllcyB3aWxsIHNpbXBseQpzaG93IGEgcXVlcnkgSUQgb2YgemVyby4KClJldmlld2VkLWJ5 OiBBbGV4YW5kcmEgV2FuZyA8YWxleGFuZHJhLndhbmcub3NzQGdtYWlsLmNvbT4gKGVhcmxpZXIg dmVyc2lvbikKLS0tCiBjb250cmliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICB8 ICAyOSArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jICAgICAgICAgfCA2 NDEgKysrKysrKysrKysrKysrKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAg ICAgICAgICAgICAgfCAgNjkgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMgICAgICAgICB8IDMwMyArKysrKysrKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVz b24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs ICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2UuY29udHJvbCAg ICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2Nv bGxlY3Rvci5zcWwgfCAgNDYgKysKIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfcmVn cmVzcy5wbCAgICB8IDE1MSArKysrKwogZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCAgICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNlLnNnbWwgICAg ICAgICAgICAgfCAyNDQgKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICAgIHwgICA2ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDE2MjEgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9leHBlY3RlZC9s b2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9pbnRlcmZhY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2Fkdmlj ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9j YWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9w Z2NvbGxlY3RhZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250 cmliL01ha2VmaWxlCmluZGV4IGRkMDRjMjBhY2QyLi4yMjA3MTAzNGU1MSAxMDA2NDQKLS0tIGEv Y29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBA IFNVQkRJUlMgPSBcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCiAJCXBnX2J1 ZmZlcmNhY2hlCVwKKwkJcGdfY29sbGVjdF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXAog CQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJCXBnX292ZXJleHBsYWluIFwKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3 Li5mZjQyMmQ5YjdmYyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250 cmliL21lc29uLmJ1aWxkCkBAIC00NSw2ICs0NSw3IEBAIHN1YmRpcigncGFnZWluc3BlY3QnKQog c3ViZGlyKCdwYXNzd29yZGNoZWNrJykKIHN1YmRpcigncGdfYnVmZmVyY2FjaGUnKQogc3ViZGly KCdwZ2NyeXB0bycpCitzdWJkaXIoJ3BnX2NvbGxlY3RfYWR2aWNlJykKIHN1YmRpcigncGdfZnJl ZXNwYWNlbWFwJykKIHN1YmRpcigncGdfbG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVy ZXhwbGFpbicpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMzNmNzE1NjA2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjkgQEAKKyMgY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfY29sbGVjdF9h ZHZpY2UKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCWNvbGxlY3Rvci5vIFwKKwlpbnRlcmZh Y2UubworCitFWFRFTlNJT04gPSBwZ19jb2xsZWN0X2FkdmljZQorREFUQSA9IHBnX2NvbGxlY3Rf YWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVERVNDID0gInBnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVj dCBxdWVyaWVzIGFuZCB0aGVpciBwbGFuIGFkdmljZSBzdHJpbmdzIgorCitSRUdSRVNTID0gbG9j YWxfY29sbGVjdG9yCitUQVBfVEVTVFMgPSAxCisKKyMgcmVxdWlyZWQgZm9yIDAwMV9yZWdyZXNz LnBsCitSRUdSRVNTX1NITElCPSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9y ZWdyZXNzJChETFNVRkZJWCkKK2V4cG9ydCBSRUdSRVNTX1NITElCCisKK2lmZGVmIFVTRV9QR1hT CitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1w Z3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBjb250cmliL3BnX2NvbGxlY3Rf YWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1n bG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2Nv bGxlY3Rvci5jIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDUzYTIyMjQ1YjIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCkBAIC0wLDAgKzEs NjQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb2xsZWN0b3IuYworICoJICB3b3Jr aG9yc2UgZm9yIHNhdmluZyBwbGFuIGFkdmljZSBpbiBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBt ZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29s bGVjdG9yLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKKworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJkYXRh dHlwZS90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2Fk bWluLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOwor UEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworCisj ZGVmaW5lIEFEVklDRV9DSFVOS19TSVpFCQkxMDI0CisjZGVmaW5lIEFEVklDRV9DSFVOS19BUlJB WV9TSVpFCTY0CisKKyNkZWZpbmUJUEdfR0VUX0FEVklDRV9DT0xVTU5TCTcKKworLyoKKyAqIEFk dmljZSBleHRyYWN0ZWQgZnJvbSBvbmUgcXVlcnkgcGxhbiwgdG9nZXRoZXIgd2l0aCB0aGUgcXVl cnkgc3RyaW5nCisgKiBhbmQgdmFyaW91cyBvdGhlciBpZGVudGlmeWluZyBkZXRhaWxzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UKK3sKKwlPaWQJCQl1c2VyaWQ7 CQkJLyogdXNlciBPSUQgKi8KKwlPaWQJCQlkYmlkOwkJCS8qIGRhdGFiYXNlIE9JRCAqLworCXVp bnQ2NAkJcXVlcnlpZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKi8KKwlUaW1lc3RhbXBUeiB0aW1l c3RhbXA7CQkvKiBxdWVyeSB0aW1lc3RhbXAgKi8KKwlpbnQJCQlhZHZpY2Vfb2Zmc2V0OwkvKiBz dGFydCBvZiBhZHZpY2UgaW4gdGV4dHVhbCBkYXRhICovCisJY2hhcgkJdGV4dHVhbF9kYXRhW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHBnY2FfY29sbGVjdGVkX2FkdmljZTsKKworLyoKKyAq IEEgYnVuY2ggb2YgcG9pbnRlcnMgdG8gcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMsIHN0 b3JlZCBpbgorICogYmFja2VuZC1sb2NhbCBtZW1vcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBn Y2FfbG9jYWxfYWR2aWNlX2NodW5rCit7CisJcGdjYV9jb2xsZWN0ZWRfYWR2aWNlICplbnRyaWVz W0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdjYV9sb2NhbF9hZHZpY2VfY2h1bms7CisKKy8qCisg KiBJbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmpl Y3RzIHRoYXQgd2UncmUKKyAqIHN0b3JpbmcgaW4gbG9jYWwgbWVtb3J5LgorICoKKyAqIFdlIGFz c2lnbiBjb25zZWN1dGl2ZSBJRHMsIHN0YXJ0aW5nIGZyb20gMCwgdG8gZWFjaCBwZ2NhX2NvbGxl Y3RlZF9hZHZpY2UKKyAqIG9iamVjdCB0aGF0IHdlIHN0b3JlLiBUaGUgYWN0dWFsIHN0b3JhZ2Ug aXMgYW4gYXJyYXkgb2YgY2h1bmtzLCB3aGljaAorICogaGVscHMga2VlcCBtZW1jcHkoKSBvdmVy aGVhZCBsb3cgd2hlbiB3ZSBzdGFydCBkaXNjYXJkaW5nIG9sZGVyIGRhdGEuCisgKi8KK3R5cGVk ZWYgc3RydWN0IHBnY2FfbG9jYWxfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2 NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZTsKKwlwZ2NhX2xvY2FsX2FkdmljZV9jaHVuayAqKmNodW5rczsKK30gcGdjYV9s b2NhbF9hZHZpY2U7CisKKy8qCisgKiBKdXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmss IGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJlZCBhcmVhLAorICogc28gd2UgbXVzdCB1c2Ug ZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUgcG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaworeworCWRzYV9wb2ludGVyIGVudHJpZXNbQURW SUNFX0NIVU5LX1NJWkVdOworfSBwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bms7CisKKy8qCisgKiBK dXN0IGxpa2UgcGdjYV9sb2NhbF9hZHZpY2UsIGJ1dCBzdG9yZWQgaW4gYSBkeW5hbWljIHNoYXJl ZCBhcmVhLCBzbworICogd2UgbXVzdCB1c2UgZHNhX3BvaW50ZXIgaW5zdGVhZCBvZiBuYXRpdmUg cG9pbnRlcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnY2Ffc2hhcmVkX2FkdmljZQoreworCXVp bnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJ aW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJZHNhX3BvaW50ZXIgY2h1bmtzOwor fSBwZ2NhX3NoYXJlZF9hZHZpY2U7CisKKy8qIFBvaW50ZXJzIHRvIGxvY2FsIGFuZCBzaGFyZWQg Y29sbGVjdG9ycyAqLworc3RhdGljIHBnY2FfbG9jYWxfYWR2aWNlICpsb2NhbF9jb2xsZWN0b3Ig PSBOVUxMOworc3RhdGljIHBnY2Ffc2hhcmVkX2FkdmljZSAqc2hhcmVkX2NvbGxlY3RvciA9IE5V TEw7CisKKy8qIFN0YXRpYyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2UgKm1ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCU9pZCBk YmlkLAorCQkJCQkJCQkJCQkJCXVpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkJCQkJCVRpbWVzdGFt cFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQljb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJ CQkJCQkJCQkJCQkJY29uc3QgY2hhciAqYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJCQkJCQlkc2Ff YXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQlkc2FfcG9pbnRlciAqcmVzdWx0KTsKK3N0YXRpYyB2 b2lkIHN0b3JlX2xvY2FsX2FkdmljZShwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKTsKK3N0YXRp YyB2b2lkIHRyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBzdG9yZV9z aGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpOworc3RhdGljIHZvaWQgdHJpbV9z aGFyZWRfYWR2aWNlKGRzYV9hcmVhICphcmVhLCBpbnQgbGltaXQpOworCisvKiBIZWxwZXIgZnVu Y3Rpb24gdG8gZXh0cmFjdCB0aGUgcXVlcnkgc3RyaW5nIGZyb20gcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcXVlcnlfc3RyaW5nKHBnY2FfY29s bGVjdGVkX2FkdmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGE7Cit9CisKKy8q IEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBhZHZpY2Ugc3RyaW5nIGZyb20gcGdjYV9j b2xsZWN0ZWRfYWR2aWNlICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorYWR2aWNlX3N0 cmluZyhwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9k YXRhICsgY2EtPmFkdmljZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBTdG9yZSBjb2xsZWN0ZWQgcXVl cnkgYWR2aWNlIGludG8gdGhlIGxvY2FsIG9yIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLAorICog YXMgYXBwcm9wcmlhdGUuCisgKi8KK3ZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX3NhdmUodWludDY0 IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJICAgY29uc3QgY2hhciAq YWR2aWNlX3N0cmluZykKK3sKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKwlPaWQJCQlk YmlkID0gTXlEYXRhYmFzZUlkOworCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3Rh bXAoKTsKKworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgJiYKKwkJcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ2NhX2Nv bGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCgpKTsKKwkJY2EgPSBtYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlk LCBub3csCisJCQkJCQkJCSAgIHF1ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywKKwkJCQkJCQkJ ICAgTlVMTCwgTlVMTCk7CisJCXN0b3JlX2xvY2FsX2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlpZiAocGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3RvciAmJgorCQlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9s aW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNh X2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IEludmFsaWREc2FQb2ludGVyOyAv KiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKHVzZXJpZCwg ZGJpZCwgcXVlcnlJZCwgbm93LAorCQkJCQkJCSAgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5n LCBhcmVhLAorCQkJCQkJCSAgJmNhX3BvaW50ZXIpOworCQlzdG9yZV9zaGFyZWRfYWR2aWNlKGNh X3BvaW50ZXIpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmaWxsIGEgbmV3IHBnY2Ff Y29sbGVjdGVkX2FkdmljZSBvYmplY3QuCisgKgorICogSWYgYXJlYSAhPSBOVUxMLCBpdCBpcyB1 c2VkIHRvIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LCBhbmQgdGhlIHJlc3VsdGluZworICogZHNh X3BvaW50ZXIgaXMgcmV0dXJuZWQgdmlhICpyZXN1bHQuCisgKgorICogSWYgYXJlYSA9PSBOVUxM LCB0aGUgbmV3IG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gdGhlIGN1cnJlbnQgbWVtb3J5IGNvbnRl eHQsCisgKiBhbmQgcmVzdWx0IGlzIG5vdCBleGFtaW5lZCBvciBtb2RpZmllZC4KKyAqLworc3Rh dGljIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqCittYWtlX2NvbGxlY3RlZF9hZHZpY2UoT2lkIHVz ZXJpZCwgT2lkIGRiaWQsIHVpbnQ2NCBxdWVyeUlkLAorCQkJCQkgIFRpbWVzdGFtcFR6IHRpbWVz dGFtcCwKKwkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCSAgY29uc3QgY2hh ciAqYWR2aWNlX3N0cmluZywKKwkJCQkJICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJl c3VsdCkKK3sKKwlzaXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3Ry aW5nKSArIDE7CisJc2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vf c3RyaW5nKSArIDE7CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYTsKKworCXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBnY2FfY29sbGVjdGVkX2Fkdmlj ZSwgdGV4dHVhbF9kYXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5n X2xlbmd0aDsKKworCWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0 aCk7CisJZWxzZQorCXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5n dGgpOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+ dXNlcmlkID0gdXNlcmlkOworCWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5 SWQ7CisJY2EtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1 ZXJ5X3N0cmluZ19sZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3Ry aW5nLCBxdWVyeV9zdHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2Et PmFkdmljZV9vZmZzZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0 aCk7CisKKwlyZXR1cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIG91ciBiYWNrZW5kLWxvY2FsIGFkdmljZSBjb2xsZWN0aW9uLgorICoKKyAq IENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBt ZW1vcnkgY29udGV4dDsKKyAqIHRoZSBwcm92aWRlZCBvYmplY3Qgc2hvdWxkIGhhdmUgYmVlbiBh bGxvY2F0ZWQgaW4gdGhhdCBzYW1lIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkCitzdG9yZV9s b2NhbF9hZHZpY2UocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5r X251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEg PSBsb2NhbF9jb2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBp c24ndCBpbml0aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQor CXsKKwkJbGEgPSBwYWxsb2MwKHNpemVvZihwZ2NhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEt PmNodW5rcyA9IHBhbGxvYzBfYXJyYXkocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJ CQkJICAgbGEtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9y ID0gbGE7CisJfQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0 b3JlIHRoaXMgYWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5i YXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9p ZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5r IGFycmF5LCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJy YXlfYWxsb2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9 IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpF OworCQlsYS0+Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkg cGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlm IG5lZWRlZC4gKi8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBnY2FfbG9jYWxfYWR2aWNl X2NodW5rKTsKKworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICov CisJQXNzZXJ0KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRd ID09IE5VTEwpOworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZz ZXRdID0gY2E7CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBz dG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRyaW1fbG9jYWxfYWR2aWNlKHBn X2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOworfQorCisvKgorICogQWRk IGEgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0aW9uLgorICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBm cm9tIHRoZSBwZ19jb2xsZWN0X2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0 byBhbiBvYmplY3Qgb2YgdHlwZSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2 b2lkCitzdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpCit7CisJdWlu dDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdjYV9zaGFyZWRf c3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEgICAq YXJlYSA9IHBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdjYV9zaGFyZWRfYWR2aWNl ICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBn Y2Ffc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gYXR0 YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxsb2NhdGUwKGFy ZWEsIHNpemVvZihwZ2NhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNh ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQgbWF5IGhhdmUg c3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9iamVjdCBidXQg ZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwgc28gd2UgbXVz dCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3aGV0aGVyCisJ ICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICovCisJaWYgKHNo YXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDApCisJeworCQlz YS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6ZW9mKGRzYV9w b2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5rX2FycmF5X2Fs bG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJLyogQ29tcHV0 ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNo dW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19T SVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklD RV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVuayBhcnJheSBh bmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIgPj0gc2EtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisJCWRzYV9w b2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFyZ2UgYW4gZXhp c3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFsbG9jYXRpb24g YW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3X2NodW5rcyA9 IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19zaXplKTsKKwkJ Y2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7CisJCW1lbWNw eShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpLAorCQkJICAg c2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJ CWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3X2NodW5rczsK KwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCWVsc2UK KwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRpbmcgaXQgaWYg bmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IEludmFsaWREc2FQ b2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9hbGxvY2F0ZTAo YXJlYSwgc2l6ZW9mKHBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5rID0gZHNhX2dl dF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1bmstPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKworCS8qIElmIHdl J3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXRy aW1fc2hhcmVkX2FkdmljZShhcmVhLCBwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdGlv bl9saW1pdCk7CisKKwkvKiBSZWxlYXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9j a1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFk dmljZSBzdG9yZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICog c3BlY2lmaWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAordHJpbV9sb2NhbF9hZHZpY2UoaW50 IGxpbWl0KQoreworCXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1 aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90 YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVt YWluaW5nX2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUg bGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5l eHRfaWQgLSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQly ZXR1cm47CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8g dGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hp bGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2 NAkJY2h1bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEt PmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xk ZXN0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOwor CQlwZnJlZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7 CisJCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVM TDsKKwkJKytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBh bnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19j b3VudCA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJZm9yICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVl KGxhLT5jaHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJh Y2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9 IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAt IDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxf Y2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291 bnQgPiAwKQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5r X2NvdW50XSwKKwkJCQlzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5p bmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5k LiAqLworCW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkg ICBzaXplb2YocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtf Y291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZh bHVlIGFjY29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBB RFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBz dG9yZWQgaW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGlt aXQuCisgKi8KK3N0YXRpYyB2b2lkCit0cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEgKmFyZWEs IGludCBsaW1pdCkKK3sKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2 NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2 NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwor CS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcg dG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0X2lkIC0gc2EtPm9sZGVzdF9pZDsK KwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJLyogR2V0IGEgcG9p bnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJl c3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1 cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50 IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19u dW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1 bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+b2xkZXN0X2lkIC0gc2EtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChzYS0+b2xkZXN0X2lk IC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJCUFzc2VydChjaHVu ay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWREc2FQb2ludGVyKTsKKwkJZHNhX2Zy ZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWNodW5rLT5lbnRyaWVz W2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJKytzYS0+b2xkZXN0X2lkOwor CQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRoYXQgYXJlIG5vdyBl bnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChzYS0+b2xkZXN0X2lkIC0g c2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50NjQgbiA9IDA7IG4g PCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVlKGFyZWEsIGNodW5rX2FycmF5W25d KTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2ludGVycyBiYWNrIHRvd2FyZCB0aGUg YmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtfY291bnQgPSAoc2EtPm5leHRfaWQg LSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5LX1NJWkUgLSAxKSAvIEFEVklDRV9D SFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9IHRvdGFsX2NodW5rX2NvdW50IC0g dHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2NodW5rX2NvdW50ID4gMCkKKwkJbWVt bW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0cmltX2NodW5rX2NvdW50XSwKKwkJ CQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERv bid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQoJmNodW5rX2FycmF5 W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihkc2FfcG9pbnRlcikgKiAo dG90YWxfY2h1bmtfY291bnQgLSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVz dCBiYXNlIElEIHZhbHVlIGFjY29yZGluZ2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1 bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktfU0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBm dW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlpZiAobG9jYWxfY29sbGVjdG9yICE9IE5VTEwpCisJCXRyaW1fbG9jYWxf YWR2aWNlKDApOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJs ZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQor ICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05f QVJHUykKK3sKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9h dHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZpY2VfZHNhX2FyZWEo KTsKKworCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoK KwkgKiBJZiB3ZSdyZSBub3QgYXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9y IHlldCwgZml4IHRoYXQgbm93OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZl biBleGlzdCwgd2UgY2FuIHJldHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4K KwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5z aGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxl YXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9j b2xsZWN0b3IgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3Ip OworCX0KKworCS8qIERvIHRoZSByZWFsIHdvcmsgKi8KKwl0cmltX3NoYXJlZF9hZHZpY2UoYXJl YSwgMCk7CisKKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisKKwlQR19SRVRVUk5fVk9J RCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIFNSRiB0byByZXR1cm4gYWR2aWNlIGNvbGxl Y3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfZ2V0X2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2lu Zm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJcGdjYV9sb2NhbF9h ZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgp OworCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOworCisJaWYgKGxhID09IE5VTEwp CisJCXJldHVybiAoRGF0dW0pIDA7CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJ Zm9yICh1aW50NjQgaWQgPSBsYS0+b2xkZXN0X2lkOyBpZCA8IGxhLT5uZXh0X2lkOyArK2lkKQor CXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlw Z2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dFVF9BRFZJQ0Vf Q09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10gPSB7MH07CisK KwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7 CisJCWNodW5rX29mZnNldCA9IChpZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpF OworCisJCWNhID0gbGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNl dF07CisKKwkJaWYgKCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJ CQljb250aW51ZTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVl c1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+ cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFt cCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7 CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOwor CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9 CisKKy8qCisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGlu IHNoYXJlZCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2Fkdmlj ZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUg PSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29s bGVjdF9hZHZpY2VfZHNhX2FyZWEoKTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdj YV9zaGFyZWRfYWR2aWNlICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0g R2V0VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwkvKiBM b2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExX X1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVk IGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRoZSBjb2xs ZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9pbmcKKwkg KiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJl ZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2Nv bGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICov CisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQgaWQgPSBzYS0+b2xkZXN0 X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7 CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ2NhX3NoYXJlZF9hZHZpY2VfY2h1bmsgKmNo dW5rOworCQlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVzW1BHX0dF VF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09MVU1OU10g PSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklDRV9D SFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5 W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVuay0+ZW50 cmllc1tjaHVua19vZmZzZXRdKTsKKworCQlpZiAoIW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlk LCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERh dHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJ dmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJ bnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wVHpHZXRE YXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dldFRleHREYXR1bShx dWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRleHREYXR1bShhZHZp Y2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1 bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7CisJfQorCisJLyog UmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+ bG9jayk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0IGIvY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNTdiOTZlZTgzNQotLS0gL2Rldi9udWxsCisrKyBi L2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dApA QCAtMCwwICsxLDY5IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlOworU0VU IGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZv cmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxf YWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBTZXQgYSBzbWFsbCBhZHZp Y2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKy0tIEVuYWJsZSB0aGUgY29s bGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworLS0g U2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50IHBy aW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIHBh cmFsbGVsX3dvcmtlcnMgPSAwKTsKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVt bXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKKyBhIHwgYiB8IGEgfCBiIAorLS0tKy0tLSstLS0r LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworIGEgfCBiIAorLS0t Ky0tLQorKDAgcm93cykKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNl Y29uZCB0ZXN0IHF1ZXJ5LgorU0VUIHBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9 IG9mZjsKK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp IE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKyAgICAgICAgIGFkdmljZSAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFibGUpICsKKyBOT19HQVRI RVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFn YWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVh cl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQg dGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2gg dGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlF WEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7 CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VMRUNUIENPVU5UKCopIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAg MjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25lIG1vcmUgdGltZSwgdG8gdmVyaWZ5IHRo YXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZlbiB3aXRoIGEgbGFyZ2VyIG51 bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29s bGVjdF9hZHZpY2UvaW50ZXJmYWNlLmMgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVy ZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZWIxMTk3NDE1 MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNl LmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGludGVyZmFj ZS5jCisgKgkgIGludGVyZmFjZSByb3V0aW5lcyBmb3IgdGhlIHBsYW4gYWR2aWNlIGNvbGxlY3Rv cgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZh Y2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgInBnX2NvbGxlY3RfYWR2aWNlLmgiCisKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9y ZWdpc3RyeS5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitQR19NT0RVTEVfTUFHSUM7CisK Ky8qIFNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KK3N0YXRpYyBwZ2NhX3NoYXJlZF9zdGF0ZSAq cGdjYV9zdGF0ZSA9IE5VTEw7CitzdGF0aWMgZHNhX2FyZWEgKnBnY2FfZHNhX2FyZWEgPSBOVUxM OworCisvKiBHVUMgdmFyaWFibGVzICovCitib29sCQlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9j b2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rp b25fbGltaXQgPSAwOworYm9vbAkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciA9 IGZhbHNlOworaW50CQkJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQg PSAwOworCisvKiBTaGFkb3cgdmFyaWFibGVzIGZvciBHVUMgYXNzaWduIGhvb2tzICovCitzdGF0 aWMgYm9vbCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgPSBm YWxzZTsKK3N0YXRpYyBib29sIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgPSBmYWxzZTsKKworLyogT3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0 aWMgdm9pZCAoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pIChib29sIGFjdGl2YXRlKSA9 IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zaHV0ZG93bl9ob29rX3R5cGUgcHJldl9wbGFubmVyX3No dXRkb3duID0gTlVMTDsKK3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnY2FfbWVtb3J5X2NvbnRleHQg PSBOVUxMOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBwZ2NhX2lu aXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIHBnY2Ff cGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJ CQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQkgIFBsYW5uZWRTdG10ICpw c3RtdCk7CitzdGF0aWMgdm9pZCBwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNz aWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAgdm9pZCAqZXh0cmEpOworc3Rh dGljIHZvaWQgcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9hc3NpZ25faG9vayhi b29sIG5ld3ZhbCwKKwkJCQkJCQkJCQkJCQkJICAgdm9pZCAqZXh0cmEpOworc3RhdGljIERlZkVs ZW0gKmZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUp OworCisvKgorICogSW5pdGlhbGl6ZSB0aGlzIG1vZHVsZS4KKyAqLwordm9pZAorX1BHX2luaXQo dm9pZCkKK3sKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIgc28gd2UgY2FuIGNhbGwgcGdfcGxhbl9h ZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbi4KKwkgKgorCSAqIFdlIG5lZWQgdG8gZG8g dGhpcyBiZWZvcmUgZGVmaW5pbmcgY3VzdG9tIEdVQ3M7IG90aGVyd2lzZSwgb3VyIGFzc2lnbgor CSAqIGhvb2sgd2lsbCB0cnkgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBiZWZvcmUgaXQn cyBpbml0aWFsaXplZC4KKwkgKgorCSAqIFdlIGFsc28gbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBp bnN0YWxsaW5nIG91ciBvd24gaG9va3MsIHNvIHRoYXQgaWYKKwkgKiBwZ19wbGFuX2FkdmljZSBp cyBub3QgeWV0IGxvYWRlZCwgaXQgd2lsbCBpbnN0YWxsIGl0cyBob29rcyBiZWZvcmUgd2UKKwkg KiBpbnN0YWxsIG91cnMuIChTZWUgY29tbWVudHMgaW4gcGdjYV9wbGFubmVyX3NodXRkb3duLikK KwkgKi8KKwlyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuID0KKwkJbG9hZF9leHRlcm5hbF9m dW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLAorCQkJCQkJCSAgICJwZ19wbGFuX2FkdmljZV9yZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uIiwKKwkJCQkJCQkgICB0cnVlLCBOVUxMKTsKKworCS8qIERl ZmluZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX2NvbGxlY3Rf YWR2aWNlLmxvY2FsX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFibGUgdGhlIGxvY2FsIGFkdmlj ZSBjb2xsZWN0b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19VU0VSU0VULAor CQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQiLAor CQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBwZXItYmFja2VuZCBtZW1v cnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxl Y3Rpb25fbGltaXQsCisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19V U0VSU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFy ZWRfY29sbGVjdG9yIiwKKwkJCQkJCQkgIkVuYWJsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9j b2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQsCisJCQkJCQkJIDAs CisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0 b3JfYXNzaWduX2hvb2ssCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFi bGUoInBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQki IyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gc2hhcmVkIG1lbW9yeSIsCisJCQkJCQkJ TlVMTCwKKwkJCQkJCQkmcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQs CisJCQkJCQkJMCwKKwkJCQkJCQkwLCBJTlRfTUFYLAorCQkJCQkJCVBHQ19TVVNFVCwKKwkJCQkJ CQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCU1hcmtH VUNQcmVmaXhSZXNlcnZlZCgicGdfY29sbGVjdF9hZHZpY2UiKTsKKworCS8qIEluc3RhbGwgaG9v a3MgKi8KKwlwcmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hvb2s7CisJ cGxhbm5lcl9zaHV0ZG93bl9ob29rID0gcGdjYV9wbGFubmVyX3NodXRkb3duOworfQorCisvKgor ICogSW5pdGlhbGl6ZSBzaGFyZWQgc3RhdGUgd2hlbiBmaXJzdCBjcmVhdGVkLgorICovCitzdGF0 aWMgdm9pZAorcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZvaWQgKmFyZykKK3sK KwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAocGdjYV9zaGFyZWRfc3RhdGUgKikgcHRyOwor CisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxvY2ssCisJCQkJCSBMV0xvY2tOZXdUcmFuY2hl SWQoInBnX2NvbGxlY3RfYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdM b2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9IEludmFsaWRE c2FQb2ludGVyOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBhIG1lbW9yeSBjb250 ZXh0IHdoZXJlIGxvbmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5IHRoaXMKKyAqIG1vZHVsZSBjYW4g YmUgc3RvcmVkLgorICovCitNZW1vcnlDb250ZXh0CitwZ19jb2xsZWN0X2FkdmljZV9nZXRfbWN4 dCh2b2lkKQoreworCWlmIChwZ2NhX21lbW9yeV9jb250ZXh0ID09IE5VTEwpCisJCXBnY2FfbWVt b3J5X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkJCQkicGdfY29sbGVjdF9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJcmV0dXJuIHBnY2FfbWVtb3J5X2NvbnRleHQ7Cit9CisKKy8qCisg KiBHZXQgYSBwb2ludGVyIHRvIG91ciBzaGFyZWQgc3RhdGUuCisgKgorICogSWYgbm8gc2hhcmVk IHN0YXRlIGV4aXN0cywgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiBJZiBpdCBkb2VzIGV4aXN0 IGJ1dAorICogdGhpcyBiYWNrZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2VkIGl0LCBhdHRhY2ggdG8g aXQuIE90aGVyd2lzZSwganVzdCByZXR1cm4KKyAqIG91ciBjYWNoZWQgcG9pbnRlci4KKyAqLwor cGdjYV9zaGFyZWRfc3RhdGUgKgorcGdfY29sbGVjdF9hZHZpY2VfYXR0YWNoKHZvaWQpCit7CisJ aWYgKHBnY2Ffc3RhdGUgPT0gTlVMTCkKKwl7CisJCWJvb2wJCWZvdW5kOworCisJCXBnY2Ffc3Rh dGUgPQorCQkJR2V0TmFtZWREU01TZWdtZW50KCJwZ19jb2xsZWN0X2FkdmljZSIsIHNpemVvZihw Z2NhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJICAgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSwgJmZv dW5kLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gcGdjYV9zdGF0ZTsKK30KKworLyoKKyAqIFJldHVy biBhIHBvaW50ZXIgdG8gcGdfY29sbGVjdF9hZHZpY2UncyBEU0EgYXJlYSwgY3JlYXRpbmcgaXQg aWYgbmVlZGVkLgorICovCitkc2FfYXJlYSAqCitwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSh2 b2lkKQoreworCWlmIChwZ2NhX2RzYV9hcmVhID09IE5VTEwpCisJeworCQlwZ2NhX3NoYXJlZF9z dGF0ZSAqc3RhdGUgPSBwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2goKTsKKwkJZHNhX2hhbmRsZQlh cmVhX2hhbmRsZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfY29sbGVjdF9hZHZpY2VfZ2V0X21jeHQoKSk7CisK KwkJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFu ZGxlID0gc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFM SUQpCisJCXsKKwkJCXBnY2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHN0YXRlLT5kc2FfdHJhbmNo ZSk7CisJCQlkc2FfcGluKHBnY2FfZHNhX2FyZWEpOworCQkJc3RhdGUtPmFyZWEgPSBkc2FfZ2V0 X2hhbmRsZShwZ2NhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXBn Y2FfZHNhX2FyZWEgPSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsKKwkJfQorCisJCWRzYV9waW5f bWFwcGluZyhwZ2NhX2RzYV9hcmVhKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJfQorCisJcmV0dXJuIHBnY2FfZHNhX2FyZWE7Cit9CisKKy8qCisgKiBBZnRlciBw bGFubmluZyBpcyBjb21wbGV0ZSwgcmV0cmlldmUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHByZXNl bnQsIGFuZAorICogcGFzcyBpdCB0aHJvdWdoIHRvIHRoZSBjb2xsZWN0b3IuCisgKi8KK3N0YXRp YyB2b2lkCitwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkg KnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxhbm5lZFN0bXQgKnBz dG10KQoreworCURlZkVsZW0gICAgKnBncGFfaXRlbTsKKwlEZWZFbGVtICAgICphZHZpY2Vfc3Ry aW5nX2l0ZW07CisJY2hhcgkgICAqYWR2aWNlX3N0cmluZzsKKworCS8qCisJICogUGFzcyBjYWxs IHRvIHByZXZpb3VzIGhvb2suCisJICoKKwkgKiBXZSB3YW50IHRvIGJlIGNhbGxlZCBhZnRlciBw Z19wbGFuX2FkdmljZSdzIHNodXRkb3duIGhvb2sgaGFzIGFscmVhZHkKKwkgKiBleGVjdXRlZC4g T3VyIF9QR19pbml0KCkgbWFrZXMgc3VyZSB0aGF0IHBnX3BsYW5fYWR2aWNlJ3MgaG9va3MgYXJl CisJICogYWx3YXlzIGxvYWRlZCBiZWZvcmUgb3VycywgYW5kIGhlcmUgd2UgcGFzcyB0aGUgaG9v ayBjYWxsIGRvd24gZmlyc3QsCisJICogYmVmb3JlIGRvaW5nIG91ciBvd24gd29yay4gVGhlIGNv bWJpbmF0aW9uIG9mIHRob3NlIHR3byB0aGluZ3Mgc2hvdWxkCisJICogYmUgZ29vZCBlbm91Z2gg dG8gZW5zdXJlIHRoYXQgdGhlIGFkdmljZSBzdHJpbmcgaXMgYWxyZWFkeSBwcmVzZW50IHdoZW4K KwkgKiB3ZSBnbyBsb29raW5nIGZvciBpdC4KKwkgKi8KKwlpZiAocHJldl9wbGFubmVyX3NodXRk b3duKQorCQkoKnByZXZfcGxhbm5lcl9zaHV0ZG93bikgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJp bmcsIHBzdG10KTsKKworCS8qIEZpc2ggb3V0IHRoZSBhZHZpY2Ugc3RyaW5nLiBJZiBub3QgZm91 bmQsIGRvIG5vdGhpbmcuICovCisJcGdwYV9pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUo cHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsKKwlp ZiAocGdwYV9pdGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nX2l0ZW0gPSBm aW5kX2RlZmVsZW1fYnlfZGVmbmFtZSgoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZywKKwkJCQkJCQkJ CQkJCSAiYWR2aWNlX3N0cmluZyIpOworCWlmIChhZHZpY2Vfc3RyaW5nX2l0ZW0gPT0gTlVMTCkK KwkJcmV0dXJuOworCWFkdmljZV9zdHJpbmcgPSBzdHJWYWwoYWR2aWNlX3N0cmluZ19pdGVtLT5h cmcpOworCisJLyoKKwkgKiBQYXNzIGl0IHRocm91Z2ggdG8gdGhlIGFjdHVhbCBjb2xsZWN0b3Iu IEJ1dCwgaWYgaXQncyB0aGUgZW1wdHkgc3RyaW5nLAorCSAqIHdlIGFzc3VtZSB0aGF0IGNvbGxl Y3RpbmcgaXQgaXMgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoYWR2aWNlX3N0cmluZ1swXSAh PSAnXDAnKQorCQlwZ19jb2xsZWN0X2FkdmljZV9zYXZlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9z dHJpbmcsIGFkdmljZV9zdHJpbmcpOworfQorCisvKgorICogcGdjYV9wbGFubmVyX3NodXRkb3du IHdvbid0IGZpbmQgYW55IGFkdmljZSB0byBjb2xsZWN0IHVubGVzcyB3ZSd2ZQorICogcmVxdWVz dGVkIHRoYXQgaXQgYmUgZ2VuZXJhdGVkLiBTbywgd2hlbmV2ZXIgdGhlIGVmZmVjdGl2ZSB2YWx1 ZSBvZgorICogcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yIGNoYW5nZXMsIGVpdGhl ciBtYWtlIG9yCisgKiByZXZva2UgYSByZXF1ZXN0IGZvciBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAq Lworc3RhdGljIHZvaWQKK3BnX2NvbGxlY3RfYWR2aWNlX2xvY2FsX2NvbGxlY3Rvcl9hc3NpZ25f aG9vayhib29sIG5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWYgKHBnX2NvbGxlY3RfYWR2aWNl X2xvY2FsX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2 aWNlX2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0X2FkdmljZV9sb2Nh bF9jb2xsZWN0b3JfYXNfYXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dl bmVyYXRpb25fZm4pICh0cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3Jf YXNfYXNzaWduZWQgPSBuZXd2YWw7Cit9CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgZm9y IHBnX2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3IKKyAqLworc3RhdGljIHZvaWQKK3Bn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWws IHZvaWQgKmV4dHJhKQoreworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9y X2FzX2Fzc2lnbmVkICYmICFuZXd2YWwpCisJCSgqcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbl9m bikgKGZhbHNlKTsKKwlpZiAoIXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3JfYXNf YXNzaWduZWQgJiYgbmV3dmFsKQorCQkoKnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pICh0 cnVlKTsKKwlwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0g bmV3dmFsOworfQorCisvKgorICogU2VhcmNoIGEgbGlzdCBvZiBEZWZFbGVtIG9iamVjdHMgZm9y IGEgZ2l2ZW4gZGVmbmFtZS4KKyAqLworc3RhdGljIERlZkVsZW0gKgorZmluZF9kZWZlbGVtX2J5 X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSkKK3sKKwlmb3JlYWNoX25vZGUo RGVmRWxlbSwgaXRlbSwgZGVmbGlzdCkKKwl7CisJCWlmIChzdHJjbXAoaXRlbS0+ZGVmbmFtZSwg ZGVmbmFtZSkgPT0gMCkKKwkJCXJldHVybiBpdGVtOworCX0KKworCXJldHVybiBOVUxMOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmNhN2Q1ZWNmZjFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitw Z19jb2xsZWN0X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdjb2xsZWN0b3IuYycsCisgICdp bnRlcmZhY2UuYycsCispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBwZ19jb2xs ZWN0X2FkdmljZV9zb3VyY2VzICs9IHJjX2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0 cmFfYXJnczogWworICAgICctLU5BTUUnLCAncGdfY29sbGVjdF9hZHZpY2UnLAorICAgICctLUZJ TEVERVNDJywgJ3BnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBw bGFuIGFkdmljZSBzdHJpbmdzJyxdKQorZW5kaWYKKworcGdfY29sbGVjdF9hZHZpY2UgPSBzaGFy ZWRfbW9kdWxlKCdwZ19jb2xsZWN0X2FkdmljZScsCisgIHBnX2NvbGxlY3RfYWR2aWNlX3NvdXJj ZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwKKyAg a3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX2NvbGxl Y3RfYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3Fs JywKKyAgJ3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0 YV9hcmdzLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX2NvbGxlY3RfYWR2aWNlJywK KyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJl bnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnbG9j YWxfY29sbGVjdG9yJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsK KyAgICAgICd0LzAwMV9yZWdyZXNzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCBiL2Nv bnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiZTg2YzU0ZmMxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4w LnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2Nv bGxlY3RfYWR2aWNlLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3Vy Y2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2Ug IkNSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBc cXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY2xlYXJfY29sbGVjdGVk X2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Y2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSgKKwlPVVQgaWQgYmlnaW50LAorCU9VVCB1c2VyaWQgb2lkLAorCU9VVCBkYmlkIG9pZCwKKwlP VVQgcXVlcnlpZCBiaWdpbnQsCisJT1VUIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKwlP VVQgcXVlcnkgdGV4dCwKKwlPVVQgYWR2aWNlIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3Jk CitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJp ZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0 YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNF VE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklDVDsKKworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBw Z19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpIEZST00gUFVCTElDOworUkVWT0tFIEFM TCBPTiBGVU5DVElPTiBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJ QzsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZp Y2UuY29udHJvbCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2Uu Y29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjAxZTVlMjRl YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX2NvbGxlY3RfYWR2aWNlIGV4 dGVuc2lvbgorY29tbWVudCA9ICdjb2xsZWN0IHF1ZXJpZXMgYW5kIHRoZSBhc3NvY2lhdGVkIHBs YW4gYWR2aWNlJworZGVmYXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICck bGliZGlyL3BnX2NvbGxlY3RfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmggYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4MGMyYzYzM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCkBAIC0wLDAgKzEsMzkg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmgKKyAqCSAg ZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBmb3IgcGdfY29sbGVjdF9hZHZpY2UgbW9kdWxl CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxl Y3RfYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19DT0xM RUNUX0FEVklDRV9ICisjZGVmaW5lIFBHX0NPTExFQ1RfQURWSUNFX0gKKworI2luY2x1ZGUgInN0 b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCisKK3R5cGVkZWYgc3RydWN0 IHBnY2Ffc2hhcmVkX3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hl OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2FfcG9pbnRlciBzaGFyZWRfY29sbGVjdG9yOworfSBw Z2NhX3NoYXJlZF9zdGF0ZTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJuIGJvb2wgcGdf Y29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yOworZXh0ZXJuIGludAlwZ19jb2xsZWN0X2Fk dmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGJvb2wgcGdfY29sbGVjdF9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJcGdfY29sbGVjdF9hZHZpY2Vfc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBN ZW1vcnlDb250ZXh0IHBnX2NvbGxlY3RfYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBn Y2Ffc2hhcmVkX3N0YXRlICpwZ19jb2xsZWN0X2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4g ZHNhX2FyZWEgKnBnX2NvbGxlY3RfYWR2aWNlX2RzYV9hcmVhKHZvaWQpOworZXh0ZXJuIHZvaWQg cGdfY29sbGVjdF9hZHZpY2Vfc2F2ZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xsZWN0 b3Iuc3FsIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDFiMTg3YzUzNzUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3NxbC9sb2NhbF9jb2xs ZWN0b3Iuc3FsCkBAIC0wLDAgKzEsNDYgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfY29sbGVjdF9h ZHZpY2U7CitTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CisKKy0tIFRyeSBjbGVhcmlu ZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxFQ1QgcGdfY2xlYXJfY29s bGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlv biBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4Y2VlZCBpdC4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5s b2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsKKworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3IuCitT RVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CisKKy0tIFNldCB1cCBh IGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtl eSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93 b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVDVCAqIEZST00gZHVtbXlfdGFi bGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisKKy0tIFNo b3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBw Z19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZS T00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlU IDE7CisKKy0tIE5vdyB0cnkgY2xlYXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0gUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGlt aXQgc28gdGhhdCB0aGUgY29sbGVjdG9yIHVzZXMgbXVsdGlwbGUgY2h1bmtzLgorU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyMDAwOworU0VUIHBnX2NvbGxl Y3RfYWR2aWNlLmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBQdXNoIGEgYnVuY2ggb2YgcXVl cmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4y MDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExP T1A7CitFTkQKKyQkOworCistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29ya2VkLgorU0VM RUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKworLS0g QW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVz ZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3BnX2NvbGxl Y3RfYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLmVkOTM0ZDBjODU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xs ZWN0X2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTUxIEBACisjIENvcHlyaWdo dCAoYykgMjAyMS0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisj IFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX2NvbGxlY3RfYWR2aWNlIGFu ZCBwZ19wbGFuX2FkdmljZQorIyB0byBjaGVjayBmb3IgcHJvYmxlbXMuCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgQ3dkICAgICAgICAgICAgcXcoYWJz X3BhdGgpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIEluaXRpYWxpemUgdGhlIHByaW1hcnkgbm9kZQorbXkgJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21haW4nKTsKKyRub2RlLT5pbml0KCk7CisKKyMg U2V0IHVwIG91ciBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCisjCisjIFdlIHJ1biB3aXRoIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0IHNldCB0byBlbnN1cmUgdGhhdCB0 aGUKKyMgcGxhbiB0cmVlIHdhbGtlciBjb2RlIHJ1bnMgYWdhaW5zdCBldmVyeSBxdWVyeSBpbiB0 aGUgcmVncmVzc2lvbiB0ZXN0cy4gSWYKKyMgd2UncmUgdW5hYmxlIHRvIHByb3Blcmx5IGFuYWx5 emUgYW55IG9mIHRob3NlIHBsYW4gdHJlZXMsIHRoaXMgdGVzdCBzaG91bGQKKyMgaG9wZWZ1bGx5 IGZhaWwuCisjCisjIFdlIHNldCBwZ19jb2xsZWN0X2FkdmljZS5hZHZpY2UgdG8gYW4gYWR2aWNl IHN0cmluZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGFkdmljZQorIyB0cm92ZSB0byBiZSBwb3B1bGF0 ZWQgd2l0aCBhIGZldyBlbnRyaWVzIG9mIHZhcmlvdXMgc29ydHMsIGJ1dCB3aGljaCB3ZSBkbwor IyBub3QgZXhwZWN0IHRvIG1hdGNoIGFueXRoaW5nIGluIHRoZSByZWdyZXNzaW9uIHRlc3QgcXVl cmllcy4gVGhpcyB3YXksIHRoZQorIyBwbGFubmVyIGhvb2tzIHdpbGwgYmUgY2FsbGVkLCBpbXBy b3ZpbmcgY29kZSBjb3ZlcmFnZSwgYnV0IG5vIHBsYW5zIHNob3VsZAorIyBhY3R1YWxseSBjaGFu Z2UuCisjCisjIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1m YWxzZSBpcyBuZWVkZWQgdG8gYXZvaWQKKyMgYnJlYWtpbmcgcmVncmVzc2lvbiB0ZXN0IHF1ZXJp ZXMgdGhhdCB1c2UgRVhQTEFJTi4gSW4gdGhlIHJlYWwgd29ybGQsIGl0CisjIHNlZW1zIGxpa2Ug dXNlcnMgd2lsbCB3YW50IEVYUExBSU4gb3V0cHV0IHRvIHNob3cgc3VwcGxpZWQgYWR2aWNlIHNv IHRoYXQKKyMgaXQncyBjbGVhciB3aGV0aGVyIG5vcm1hbCBwbGFubmVyIGJlaGF2aW9yIGhhcyBi ZWVuIGFsdGVyZWQsIGJ1dCBoZXJlIHRoYXQncworIyB1bmRlc2lyYWJsZS4KKyRub2RlLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgPDxFT00pOworc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzPXBnX2NvbGxlY3RfYWR2aWNlCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdD0xMDAwMDAwCitwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPXRydWUK K3BnX3BsYW5fYWR2aWNlLmFkdmljZT0nU0VRX1NDQU4oZW50aXJlbHlfZmljdGl0aW91cykgSEFT SF9KT0lOKHRvdGFsX2ZhYnJpY2F0aW9uKSBHQVRIRVIoY29tcGxldGVseV9pbWFnaW5hcnkpJwor cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPWZhbHNlCitFT00K KyRub2RlLT5zdGFydDsKKworbXkgJHNyY2RpciA9IGFic19wYXRoKCIuLi8uLiIpOworCisjIC0t ZGxwYXRoIGlzIG5lZWRlZCB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHJlZ3Jl c3Muc28KKyMgYW5kIGFueSBsaWJyYXJpZXMgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZS4K K215ICRkbHBhdGggPSBkaXJuYW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworCisjIC0tb3V0cHV0 ZGlyIHBvaW50cyB0byB0aGUgcGF0aCB3aGVyZSB0byBwbGFjZSB0aGUgb3V0cHV0IGZpbGVzLgor bXkgJG91dHB1dGRpciA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisj IC0taW5wdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIG9mIHRoZSBpbnB1dCBmaWxlcy4KK215ICRp bnB1dGRpciA9ICIkc3JjZGlyL3NyYy90ZXN0L3JlZ3Jlc3MiOworCisjIFJ1biB0aGUgdGVzdHMu CitteSAkcmMgPQorICBzeXN0ZW0oJEVOVntQR19SRUdSRVNTfSAuICIgIgorCSAgLiAiLS1iaW5k aXI9ICIKKwkgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKwkgIC4gIi0taG9zdD0iIC4gJG5v ZGUtPmhvc3QgLiAiICIKKwkgIC4gIi0tcG9ydD0iIC4gJG5vZGUtPnBvcnQgLiAiICIKKwkgIC4g Ii0tc2NoZWR1bGU9JHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICIK KwkgIC4gIi0tbWF4LWNvbmN1cnJlbnQtdGVzdHM9MjAgIgorCSAgLiAiLS1pbnB1dGRpcj1cIiRp bnB1dGRpclwiICIKKwkgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiIik7CisKKyMgRHVt cCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMgZmlsZSwgaWYgdGhlcmUgaXMgb25lCitpZiAoJHJj ICE9IDApCit7CisJbXkgJGRpZmZzID0gIiRvdXRwdXRkaXIvcmVncmVzc2lvbi5kaWZmcyI7CisJ aWYgKC1lICRkaWZmcykKKwl7CisJCXByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOwor CQlwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisJCXByaW50ICI9PT0gRU9GID09PVxuIjsKKwl9 Cit9CisKKyMgUmVwb3J0IHJlc3VsdHMKK2lzKCRyYywgMCwgJ3JlZ3Jlc3Npb24gdGVzdHMgcGFz cycpOworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxl Y3RvcgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19j b2xsZWN0X2FkdmljZScpOworCisjIFZlcmlmeSB0aGF0IGEgbGFyZ2UgYW1vdW50IG9mIGFkdmlj ZSB3YXMgY29sbGVjdGVkCitteSAkYWxsX3F1ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorY21wX29rKCRhbGxfcXVlcnlfY291bnQsICc+JywgMjAw MDAsICJjb3Bpb3VzIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBWZXJpZnkgdGhhdCBsb3RzIG9m IGRpZmZlcmVudCBhZHZpY2Ugc3RyaW5ncyB3ZXJlIGNvbGxlY3RlZAorbXkgJGRpc3RpbmN0X3F1 ZXJ5X2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1Qg Q09VTlQoKikgRlJPTQorCShTRUxFQ1QgRElTVElOQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxl Y3RlZF9zaGFyZWRfYWR2aWNlKCkpOworRU9NCitjbXBfb2soJGRpc3RpbmN0X3F1ZXJ5X2NvdW50 LCAnPicsIDMwMDAsICJkaXZlcnNlIGFkdmljZSBjb2xsZWN0ZWQiKTsKKworIyBXZSB3YW50IHRv IHRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiBvdXIga25vd24gdGFncyBpbiB0aGUgY29sbGVjdGVk IGFkdmljZS4KKyMgUHV0IGFsbCB0YWdzIGludG8gdGhlIGhhc2ggdGhhdCBmb2xsb3dzOyBtYXAg YW55IHRhZ3MgdGhhdCBhcmVuJ3QgdGVzdGVkCisjIGJ5IHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVz dHMgdG8gMCwgYW5kIG90aGVycyB0byAxLgorbXkgJXRhZ19tYXAgPSAoCisJQklUTUFQX0hFQVBf U0NBTiA9PiAxLAorCUZPUkVJR05fSk9JTiA9PiAwLAorCUdBVEhFUiA9PiAxLAorCUdBVEhFUl9N RVJHRSA9PiAxLAorCUhBU0hfSk9JTiA9PiAxLAorCUlOREVYX09OTFlfU0NBTiA9PiAxLAorCUlO REVYX1NDQU4gPT4gMSwKKwlKT0lOX09SREVSID0+IDEsCisJTUVSR0VfSk9JTl9NQVRFUklBTEla RSA9PiAxLAorCU1FUkdFX0pPSU5fUExBSU4gPT4gMSwKKwlORVNURURfTE9PUF9NQVRFUklBTEla RSA9PiAxLAorCU5FU1RFRF9MT09QX01FTU9JWkUgPT4gMSwKKwlORVNURURfTE9PUF9QTEFJTiA9 PiAxLAorCU5PX0dBVEhFUiA9PiAxLAorCVBBUlRJVElPTldJU0UgPT4gMSwKKwlTRU1JSk9JTl9O T05fVU5JUVVFID0+IDEsCisJU0VNSUpPSU5fVU5JUVVFID0+IDEsCisJU0VRX1NDQU4gPT4gMSwK KwlUSURfU0NBTiA9PiAxLAorKTsKK2ZvciBteSAkdGFnIChzb3J0IGtleXMgJXRhZ19tYXApCit7 CisJbXkgJGNoZWNraXQgPSAkdGFnX21hcHskdGFnfTsKKworCSMgU2VhcmNoIGZvciB0aGUgZ2l2 ZW4gdGFnLiBUaGlzIGlzIG5vdCBlbnRpcmVseSByb2J1c3Q6IGl0IGNvdWxkIGdldCB0aHJvd24K KwkjIG9mZiBieSBhIHRhYmxlIGFsaWFzIHN1Y2ggYXMgIkZPUkVJR05fSk9JTigiLCBidXQgdGhh dCBwcm9iYWJseSB3b24ndAorCSMgaGFwcGVuIGluIHRoZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMu CisJbXkgJHRhZ19jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOwor U0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkKKwlX SEVSRSBhZHZpY2UgTElLRSAnJSR0YWcoJScKK0VPTQorCisJIyBDaGVjayB0aGF0IHRoZSB0YWcg Z290IGEgbm9uLXRyaXZpYWwgYW1vdW50IG9mIHVzZSwgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLgor CWNtcF9vaygkdGFnX2NvdW50LCAnPicsIDEwLCAibXVsdGlwbGUgdXNlcyBvZiAkdGFnIikgaWYg JGNoZWNraXQ7CisKKwkjIFJlZ2FyZGxlc3MsIG5vdGUgdGhlIGV4YWN0IGNvdW50IGluIHRoZSBs b2csIGZvciBodW1hbiBjb25zdW1wdGlvbi4KKwlub3RlKCJmb3VuZCAkdGFnX2NvdW50IGFkdmlj ZSBzdHJpbmdzIGNvbnRhaW5pbmcgJHRhZyIpOworfQorCisjIFRyaWdnZXIgYSBwYXJ0aWFsIGNs ZWFudXAgb2YgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLCBhbmQgdGhlbiBhIGZ1bGwKKyMg Y2xlYW51cC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VUIHBnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUwMDsKK1NFTEVDVCAqIEZST00g cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKTsKK0VPTQorCitkb25lX3Rlc3Rpbmco KTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwv Y29udHJpYi5zZ21sCmluZGV4IGJkZDQ4NjVmNTNmLi4yYWI2ZmFmYmFiMSAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21s CkBAIC0xNTIsNiArMTUyLDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+ZXh0ZW5z aW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGFnZWluc3BlY3Q7CiAgJnBhc3N3b3JkY2hlY2s7 CiAgJnBnYnVmZmVyY2FjaGU7CisgJnBnY29sbGVjdGFkdmljZTsKICAmcGdjcnlwdG87CiAgJnBn ZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAppbmRleCBkOTBi NDMzOGQyYS4uNDA3ZmYzYWJmZmUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDUsNiArMTQ1LDcgQEAK IDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFF TlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KIDwhRU5U SVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+Cis8IUVOVElU WSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVOVElU WSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KIDwhRU5USVRZIHBnZnJl ZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNnbWwiPgogPCFFTlRJVFkgcGdsb2dp Y2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0LnNnbWwiPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnY29sbGVj dGFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjBh YWJlNzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uu c2dtbApAQCAtMCwwICsxLDI0NCBAQAorPCEtLSBkb2Mvc3JjL3NnbWwvcGdjb2xsZWN0YWR2aWNl LnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdjb2xsZWN0YWR2aWNlIiB4cmVmbGFiZWw9InBnX2Nv bGxlY3RfYWR2aWNlIj4KKyA8dGl0bGU+cGdfY29sbGVjdF9hZHZpY2UgJm1kYXNoOyBjb2xsZWN0 IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmluZ3M8L3RpdGxlPgorCisgPGluZGV4 dGVybSB6b25lPSJwZ2NvbGxlY3RhZHZpY2UiPgorICA8cHJpbWFyeT5wZ19jb2xsZWN0X2Fkdmlj ZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBn X2NvbGxlY3RfYWR2aWNlPC9maWxlbmFtZT4gZXh0ZW5zaW9uIGFsbG93cyB5b3UgdG8KKyAgYXV0 b21hdGljYWxseSBnZW5lcmF0ZSBwbGFuIGFkdmljZSBlYWNoIHRpbWUgYSBxdWVyeSBpcyBwbGFu bmVkIGFuZCBzdG9yZQorICB0aGUgcXVlcnkgYW5kIHRoZSBnZW5lcmF0ZWQgYWR2aWNlIHN0cmlu ZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4KKyAgTm90ZSB0aGF0IHRoaXMgZXh0 ZW5zaW9uIHJlcXVpcmVzIHRoZSA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiIC8+IG1vZHVs ZSwKKyAgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbCBwbGFuIGFkdmljZSBnZW5lcmF0aW9uOyB0 aGlzIG1vZHVsZSBvbmx5IGtub3dzCisgIGhvdyB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIGFkdmlj ZSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uIFdoZW5ldmVyCisgIDxsaXRlcmFsPnBnX2NvbGxlY3Rf YWR2aWNlPC9saXRlcmFsPiBpcyBsb2FkZWQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBsb2FkCisg IDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPi4KKyA8L3BhcmE+CisKKyA8cGFyYT4K KyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGV4ZWN1dGUK KyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xsZWN0X2FkdmljZTwvbGl0ZXJhbD4g aW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNlLCBzbyB0aGF0IHlvdSBoYXZlIGEgd2F5IHRvIGV4 YW1pbmUgdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisgIFlvdSB3aWxsIGFsc28gbmVlZCB0aGUgPGxp dGVyYWw+cGdfY29sbGVjdF9hZHZpY2U8L2xpdGVyYWw+IG1vZHVsZQorICB0byBiZSBsb2FkZWQg aW4gYWxsIHNlc3Npb25zIHdoZXJlIGFkdmljZSBpcyB0byBiZSBjb2xsZWN0ZWQuIEl0IHdpbGwK KyAgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nIDxsaXRlcmFsPnBnX2NvbGxl Y3RfYWR2aWNlPC9saXRlcmFsPgorICB0byA8eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxv YWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQorICBzZXJ2ZXIuCisgPC9wYXJhPgor CisgPHBhcmE+CisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBpbmNsdWRl cyBib3RoIGEgc2hhcmVkIGFkdmljZQorICBjb2xsZWN0b3IgYW5kIGEgbG9jYWwgYWR2aWNlIGNv bGxlY3Rvci4gVGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3IgbWFrZXMKKyAgcXVlcmllcyBhbmQg dGhlaXIgYWR2aWNlIHN0cmluZ3MgdmlzaWJsZSBvbmx5IHRvIHRoZSBzZXNzaW9uIHdoZXJlIHRo b3NlCisgIHF1ZXJpZXMgd2VyZSBwbGFubmVkLCB3aGlsZSB0aGUgc2hhcmVkIGFkdmljZSBjb2xs ZWN0b3IgY29sbGVjdHMgZGF0YQorICBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCBhbmQgYXV0aG9y aXplZCB1c2VycyBjYW4gZXhhbWluZSBkYXRhIGZyb20gYWxsCisgIHNlc3Npb25zLgorIDwvcGFy YT4KKworIDxwYXJhPgorICBUbyBlbmFibGUgYSBjb2xsZWN0b3IsIHlvdSBtdXN0IGZpcnN0IHNl dCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgIG51bWJlciBvZiBxdWVyaWVzIGZvciB3 aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMgdGhlIGNvbGxlY3Rpb24KKyAgbGlt aXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWR2aWNlIHdpbGwg YmUgZGlzY2FyZGVkLgorICBUaGVuLCB5b3UgbXVzdCBhZGp1c3QgYSBzZXBhcmF0ZSBzZXR0aW5n IHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgY29sbGVjdGlvbi4gRm9yIHRoZSBsb2NhbCBj b2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBieSBjb25maWd1cmluZworICA8bGl0 ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC9saXRlcmFsPiB0 byBhIHZhbHVlCisgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdGhlbiBlbmFibGUgYWR2aWNlIGNv bGxlY3Rpb24gYnkgc2V0dGluZworICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9j b2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBzaGFyZWQKKyAgY29sbGVjdG9yLCB0 aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFtZXMgb2YgdGhlIHNl dHRpbmdzCisgIGFyZSA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlv bl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlLnNoYXJl ZF9jb2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgaW4gYm90aAorICBjYXNlcywgcXVlcnkg dGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gbWVtb3J5LCBzbworICBjb25m aWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBjb25zaWRlcmFibGUgbWVtb3J5IGNv bnN1bXB0aW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHRoZSBjb2xsZWN0b3IgaXMg ZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9yIHdoaWNoIHlvdSB3aXNoCisgIHRv IHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlLiBUaGVuLCB5b3UgY2FuIGV4YW1pbmUgd2hh dCBoYXMgYmVlbgorICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hldmVyIG9mCisgIDxsaXRlcmFsPlNF TEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4gb3IK KyAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2Uo KTwvbGl0ZXJhbD4KKyAgY29ycmVzcG9uZHMgdG8gdGhlIGNvbGxlY3RvciB5b3UgZW5hYmxlZC4g VG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICBhbmQgcmVsZWFzZSBtZW1vcnksIHlv dSBjYW4gY2FsbAorICA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8 L2xpdGVyYWw+CisgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNl KCk8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBJbiBhZGRpdGlvbiB0byB0aGUg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzLCB0aGUgYWR2aWNlIGNvbGxlY3RvcnMKKyAg d2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5 IHRvIGJlIHBsYW5uZWQsCisgIHRoZSBPSUQgb2YgdGhlIGRhdGFiYXNlIGluIHdoaWNoIHRoZSBx dWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICBhbmQgdGhlIHRpbWUgYXQgd2hpY2gg dGhlIGNvbGxlY3Rpb24gb2NjdXJyZWQuIFRoaXMgbW9kdWxlIGRvZXMgbm90CisgIGF1dG9tYXRp Y2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50 IHRoZQorICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0ZWQgaW4gY29sbGVjdGVkIGFkdmlj ZSwgYmUgc3VyZSB0byBjb25maWd1cmUKKyAgPGxpdGVyYWw+Y29tcHV0ZV9xdWVyeV9pZCA9IG9u PC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQgbWF5CisgIGFsd2F5cyBzaG93IGFz IDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxzZWN0MiBpZD0icGdjb2xsZWN0 YWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3RpdGxlPgorCisgIDx2YXJp YWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlv bj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlv bj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9s b2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKwor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xsZWN0ZWQg cXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gYmFja2VuZC1sb2NhbAorICAgICAg bWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0 X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAg ICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1l IHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9u PgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9sb2Nh bF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1cm5zIGFsbCBxdWVyeSB0ZXh0cyBh bmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbAorICAgICAgYWR2aWNlIGNvbGxl Y3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAg PGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2 aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1ZXJ5IHRl eHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAorICAgICAgbWVtb3J5LgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAgICB1c2VyaWQgb2lk LCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwK KyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZTwvcHJp bWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3Ry aW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgYWR2aWNlIGNvbGxlY3Rvci4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3Zhcmlh YmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnY29sbGVjdGFkdmljZS1jb25m aWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisK KyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFy bmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+ CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfY29sbGVj dF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAgICAgbG9j YWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+ZmFsc2U8 L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19j b2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiAoPHR5cGU+aW50 ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5w Z19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0PC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX2NvbGxl Y3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IHNldHMgdGhlCisgICAg ICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgcmV0YWlu ZWQgYnkgdGhlCisgICAgICBsb2NhbCBhZHZpY2UgY29sbGVjdG9yLiBUaGUgZGVmYXVsdCB2YWx1 ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4g KDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvcjwvdmFybmFtZT4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwv dGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19j b2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFibGVzIHRoZQorICAg ICAgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFs PmZhbHNlPC9saXRlcmFsPi4KKyAgICAgIE9ubHkgc3VwZXJ1c2VycyBhbmQgdXNlcnMgd2l0aCB0 aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPgorICAgICAgcHJpdmlsZWdlIGNh biBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8 dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvdmFybmFt ZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZh cm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNl IHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rvci4g VGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgICAgICBPbmx5IHN1 cGVydXNlcnMgYW5kIHVzZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0 ZXJhbD4KKyAgICAgIHByaXZpbGVnZSBjYW4gY2hhbmdlIHRoaXMgc2V0dGluZy4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxl bGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnY29sbGVjdGFkdmljZS1hdXRob3Ii PgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFJvYmVydCBIYWFzIDxl bWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwvcGFyYT4KKyA8L3NlY3QyPgor Cis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBiZjE2OTdiOTBhMi4uZjgz NjJhNzgxOTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cisr KyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTg4LDYgKzM5ODgsMTIg QEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3JfaGVhZGVyc19z dGF0ZQorcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ2NhX2xvY2FsX2FkdmljZQorcGdjYV9sb2Nh bF9hZHZpY2VfY2h1bmsKK3BnY2Ffc2hhcmVkX2FkdmljZQorcGdjYV9zaGFyZWRfYWR2aWNlX2No dW5rCitwZ2NhX3NoYXJlZF9zdGF0ZQogcGdwYV9hZHZpY2VfaXRlbQogcGdwYV9hZHZpY2VfdGFn X3R5cGUKIHBncGFfYWR2aWNlX3RhcmdldAotLSAKMi41MS4wCgo= --0000000000008c777d064cd6e70d Content-Type: application/octet-stream; name="v20-0003-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v20-0003-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnqadc62 RnJvbSA2NWUzNWI2N2MzNTBlMzVjYjZjZTVmYjU5YTJhNGIyODE5NTk1N2ZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMCAz LzNdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaC5hZHZpY2Vfc3Rhc2ggaXMgc2V0 IHRvIHRoZSBuYW1lIG9mIGFuIGFkdmljZQpzdGFzaCwgYW5kIGlmIHF1ZXJ5IGlkZW50aWZpZXJz IGFyZSBlbmFibGVkLCB0aGUgcXVlcnkgaWRlbnRpZmllcgpmb3IgZWFjaCBxdWVyeSB3aWxsIGJl IGxvb2tlZCB1cCBpbiB0aGUgYWR2aWNlIHN0YXNoIGFuZCB0aGUKYXNzb2NpYXRlZCBhZHZpY2Ug c3RyaW5nLCBpZiBhbnksIHdpbGwgYmUgdXNlZCBlYWNoIHRpbWUgdGhhdCBxdWVyeQppcyBwbGFu bmVkLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBjb250cmliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgIHwgIDI2 ICsKIC4uLi9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0ICAgICAgICAgICAgICB8IDMwNSAr KysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAz NSArCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAgfCAgNDMg KwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwgODc4ICsr KysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbCAgIHwgICA1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5z cWwgICB8IDEzMCArKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAgICAgICAg IHwgMjE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAg ICAgfCAgIDYgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTY1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVzb24uYnVp bGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJp Yi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMjIwNzEwMzRlNTEuLjE0ZTEyZDRm ZTJlIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUK QEAgLTMwLDYgKzMwLDcgQEAgU1VCRElSUyA9IFwKIAkJb2lkMm5hbWUJXAogCQlwYWdlaW5zcGVj dAlcCiAJCXBhc3N3b3JkY2hlY2sJXAorCQlwZ19zdGFzaF9hZHZpY2UJXAogCQlwZ19idWZmZXJj YWNoZQlcCiAJCXBnX2NvbGxlY3RfYWR2aWNlIFwKIAkJcGdfZnJlZXNwYWNlbWFwIFwKZGlmZiAt LWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGZm NDIyZDliN2ZjLi40ODYyYmE5N2VkMSAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAor KysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC01Miw2ICs1Miw3IEBAIHN1YmRpcigncGdfb3Zl cmV4cGxhaW4nKQogc3ViZGlyKCdwZ19wbGFuX2FkdmljZScpCiBzdWJkaXIoJ3BnX3ByZXdhcm0n KQogc3ViZGlyKCdwZ3Jvd2xvY2tzJykKK3N1YmRpcigncGdfc3Rhc2hfYWR2aWNlJykKIHN1YmRp cigncGdfc3RhdF9zdGF0ZW1lbnRzJykKIHN1YmRpcigncGdzdGF0dHVwbGUnKQogc3ViZGlyKCdw Z19zdXJnZXJ5JykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxl IGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmNkOWI3ZjMwMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorIyBjb250cmliL3Bn X3N0YXNoX2FkdmljZS9NYWtlZmlsZQorCitNT0RVTEVfYmlnID0gcGdfc3Rhc2hfYWR2aWNlCitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ19zdGFzaF9hZHZpY2UubworCitFWFRFTlNJT04g PSBwZ19zdGFzaF9hZHZpY2UKK0RBVEEgPSBwZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwKK1BHRklM RURFU0MgPSAicGdfc3Rhc2hfYWR2aWNlIC0gc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkg cGxhbiBhZHZpY2UiCisKK1JFR1JFU1MgPSBwZ19zdGFzaF9hZHZpY2UKK0VYVFJBX0lOU1RBTEwg PSBjb250cmliL3BnX3BsYW5fYWR2aWNlCisKK2lmZGVmIFVTRV9QR1hTCitQR19DUFBGTEFHUyA9 IC1JJChpbmNsdWRlZGlyX3NlcnZlcikvZXh0ZW5zaW9uCitQR19DT05GSUcgPSBwZ19jb25maWcK K1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitl bHNlCitQR19DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3BsYW5fYWR2aWNl CitzdWJkaXIgPSBjb250cmliL3BnX3N0YXNoX2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4K K2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0 b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dCBiL2Nv bnRyaWIvcGdfc3Rhc2hfYWR2aWNlL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkZTZjMTBjZGQxCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNl Lm91dApAQCAtMCwwICsxLDMwNSBAQAorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2U7 CitTRVQgY29tcHV0ZV9xdWVyeV9pZCA9IG9uOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Bl cl9nYXRoZXIgPSAwOworLS0gSGVscGVyOiBleHRyYWN0IHF1ZXJ5IGlkZW50aWZpZXIgZnJvbSBF WFBMQUlOIFZFUkJPU0Ugb3V0cHV0LgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3F1 ZXJ5X2lkKHF1ZXJ5X3RleHQgdGV4dCkgUkVUVVJOUyBiaWdpbnQKK0xBTkdVQUdFIHBscGdzcWwg QVMgJCQKK0RFQ0xBUkUKKyAgICBsaW5lIHRleHQ7CisgICAgcWlkIGJpZ2ludDsKK0JFR0lOCisg ICAgRk9SIGxpbmUgSU4gRVhFQ1VURSAnRVhQTEFJTiAoVkVSQk9TRSwgRk9STUFUIFRFWFQpICcg fHwgcXVlcnlfdGV4dAorICAgIExPT1AKKyAgICAgICAgSUYgbGluZSB+ICdRdWVyeSBJZGVudGlm aWVyOicgVEhFTgorICAgICAgICAgICAgcWlkIDo9IHJlZ2V4cF9yZXBsYWNlKGxpbmUsICcuKlF1 ZXJ5IElkZW50aWZpZXI6XHMqKC0/XGQrKS4qJywgJ1wxJyk6OmJpZ2ludDsKKyAgICAgICAgICAg IFJFVFVSTiBxaWQ7CisgICAgICAgIEVORCBJRjsKKyAgICBFTkQgTE9PUDsKKyAgICBSQUlTRSBF WENFUFRJT04gJ1F1ZXJ5IElkZW50aWZpZXIgbm90IGZvdW5kIGluIEVYUExBSU4gb3V0cHV0JzsK K0VORDsKKyQkOworQ1JFQVRFIFRBQkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gYWFfZGltMSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21l IGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMTsKK0NSRUFURSBUQUJMRSBhYV9kaW0y IChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2RpbTIgKGlkLCBkaW0y LCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgNykgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9k aW0yOworQ1JFQVRFIFRBQkxFIGFhX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0x X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0xIChpZCksCisJZGltMl9pZCBp bnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgYWFfZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGFhX2ZhY3QKKwlTRUxFQ1QgZywgKGcl MTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNV VU0gQU5BTFlaRSBhYV9mYWN0OworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNU IGdldF9xdWVyeV9pZCgkJAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQg XGdzZXQKKy0tIENyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2ggYW5kIHBvaW50IHBnX3N0YXNoX2Fkdmlj ZSBhdCBpdC4KK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7 CisgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAor KDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CistLSBSdW4gb3VyIHRlc3QgcXVlcnkgZm9yIHRoZSBmaXJzdCB0aW1lIHdpdGggbm8gc3Rh c2hlZCBhZHZpY2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3Qg ZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBh YV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2gg Q29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFz aCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFf ZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg LT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCistLSBGb3JjZSBhbiBpbmRleCBz Y2FuIG9uIGRpbTEKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCA6J3FpZCcsCisJJ0lOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KScpOworIHBnX3NldF9zdGFz aGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KSAv KiBtYXRjaGVkICovCisoMTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBv cmRlcgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywKKwknam9pbl9vcmRlcihmIGQxIGQyKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworKDEz IHJvd3MpCisKKy0tIEZvcmNlIGFuIGFsdGVybmF0aXZlIGpvaW4gc3RyYXRlZ3kKK1NFTEVDVCBw Z19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6J3FpZCcsCisJJ05FU1RFRF9M T09QX1BMQUlOKGQxKScpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAor CUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFj dCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgYWFfZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNo ZWQgKi8KKygxMiByb3dzKQorCistLSBBZGQgYSB1c2VsZXNzIGV4dHJhIGVudHJ5IHRvIG91ciB0 ZXN0IHN0YXNoLiBTaG91bGRuJ3QgY2hhbmdlIHRoZSByZXN1bHQKKy0tIGZyb20gdGhlIHByZXZp b3VzIHRlc3QuCistLSAoSWYgd2UncmUgdW5sdWNreSBlbm91Z2ggdGhhdCB0aGlzIGV2ZXIgZmFp bHMgZHVlIHRvIHF1ZXJ5IElEIGFjdHVhbGx5CistLSBiZWluZyAxLCB0aGVuIGp1c3QgcHV0IHNv bWUgb3RoZXIgY29uc3RhbnQgaGVyZS4gU2VlbXMgdW5saWtlbHkuKQorU0VMRUNUIHBnX3NldF9z dGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDEsICdTRVFfU0NBTihkMSknKTsKKyBwZ19z ZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lO IGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlk KQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGFhX2Rp bTFfcGtleSBvbiBhYV9kaW0xIGQxCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbTFf aWQpCisgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIE5FU1RFRF9MT09QX1BMQUlOKGQxKSAvKiBtYXRjaGVkICovCisoMTIgcm93cykKKworLS0g VHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9lcyBub3RoaW5nCitTRUxFQ1QgcGdf Y3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworU0VU IHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lk ID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJf aWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZh bDEgPSAxKQorKDExIHJvd3MpCisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNo IGluZGl2aWR1YWxseSBhbmQgYWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9u ZXhpc3RlbnQgc3Rhc2guCitTRUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9S REVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25hbWUgICAgICB8IG51bV9lbnRyaWVzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX2VtcHR5X3N0YXNo IHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAgICAgIHwgICAgICAgICAgIDIKKygyIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2 aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7Cisg IHN0YXNoX25hbWUgICB8ICAgICBhZHZpY2Vfc3RyaW5nICAgICAKKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihkMSkKKyBy ZWdyZXNzX3N0YXNoIHwgTkVTVEVEX0xPT1BfUExBSU4oZDEpCisoMiByb3dzKQorCitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoJ3JlZ3Jlc3NfZW1wdHlfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyBzdGFzaF9u YW1lIHwgYWR2aWNlX3N0cmluZyAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKygwIHJv d3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2Fk dmljZV9zdGFzaF9jb250ZW50cyhOVUxMKSBPUkRFUiBCWSBxdWVyeV9pZDsKKyAgc3Rhc2hfbmFt ZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQorIHJlZ3Jlc3Nfc3Rh c2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1l LCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygnbm9f c3VjaF9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggIm5v X3N1Y2hfc3Rhc2giIGRvZXMgbm90IGV4aXN0CistLSBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSBh ZHZpY2UuCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidx aWQnLCBudWxsKTsKKyBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVn cmVzc19zdGFzaCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBm CisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g YWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNo IENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFh X2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBhYV9kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisoMTEgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19n ZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBzdGFzaF9uYW1lOworICAgICBzdGFzaF9uYW1l ICAgICAgfCBudW1fZW50cmllcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t CisgcmVncmVzc19lbXB0eV9zdGFzaCB8ICAgICAgICAgICAwCisgcmVncmVzc19zdGFzaCAgICAg ICB8ICAgICAgICAgICAxCisoMiByb3dzKQorCitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0 cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcp IE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9uYW1lICAgfCBhZHZpY2Vfc3RyaW5nIAorLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3Nfc3Rhc2ggfCBTRVFfU0NBTihk MSkKKygxIHJvdykKKworLS0gQ2xlYW4gdXAgc3RhdGUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5 LgorU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7CisgcGdfZHJv cF9hZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NF TEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2Ry b3BfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5iNjY2YmNkMGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rh c2hfYWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAy MDIyLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3N0YXNo X2FkdmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdGFzaF9hZHZpY2UuYycKKykKKworaWYg aG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19zdGFzaF9hZHZpY2Ug LSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScsXSkKK2VuZGlmCisK K3BnX3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3N0YXNoX2FkdmljZScsCisgIHBn X3N0YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9h ZHZpY2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyldLAorICBrd2FyZ3M6IGNvbnRyaWJf bW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfc3Rhc2hfYWR2aWNlCisKK2luc3Rh bGxfZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19zdGFzaF9hZHZp Y2UuY29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9 IHsKKyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9z b3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdy ZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICBdLAor ICB9LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2 aWNlLS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYx YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fk dmljZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2Fkdmlj ZS9wZ19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxl LiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9u YW1lIHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRl X2FkdmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf ZHJvcF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0 LCBxdWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVS TlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitM QU5HVUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9V VCBzdGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBT RVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVz JworTEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmln aW50LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitB UyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5H VUFHRSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2go dGV4dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNl X3N0YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBG VU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwg T04gRlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJP TSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9h ZHZpY2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYmVhOWIwZTE2MQotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0w LDAgKzEsODc4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2Uu YworICoJICBBcHBseSBwbGFuIGFkdmljZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IFNRTCBtb2Rp ZmljYXRpb25zLgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyBwbGFuIGFkdmljZSBzdHJpbmdz IChhcyB1c2VkIGFuZCBnZW5lcmF0ZWQgYnkKKyAqIHBnX3BsYW5fYWR2aWNlKSB0byBiZSAic3Rh c2hlZCIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFuZCwgZnJvbQorICogdGhlcmUsIGF1dG9t YXRpY2FsbHkgYmUgYXBwbGllZCB0byBxdWVyaWVzIGFzIHRoZXkgYXJlIHBsYW5uZWQuCisgKiBZ b3UgY2FuIGNyZWF0ZSBhbnkgbnVtYmVyIG9mIGFkdmljZSBzdGFzaGVzLCBlYWNoIG9mIHdoaWNo IGlzCisgKiBpZGVudGlmaWVkIGJ5IGEgaHVtYW4tcmVhZGFibGUsIEFTQ0lJIG5hbWUsIGFuZCBl YWNoIG9mIHRoZW0gaXMKKyAqIGVzc2VudGlhbGx5IGEgcXVlcnkgSUQgLT4gYWR2aWNlX3N0cmlu ZyBtYXBwaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uv cGdfc3Rhc2hfYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY29t bW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisj aW5jbHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisj aW5jbHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3Ry eS5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5o IgorCitQR19NT0RVTEVfTUFHSUM7CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfY3JlYXRlX2Fk dmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2Ryb3BfYWR2aWNlX3N0YXNoKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyk7CitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2dldF9hZHZpY2Vfc3Rhc2hlcyk7CitQR19GVU5DVElPTl9JTkZP X1YxKHBnX3NldF9zdGFzaGVkX2FkdmljZSk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc2hhcmVk X3N0YXRlCit7CisJTFdMb2NrCQlsb2NrOworCWludAkJCWRzYV90cmFuY2hlOworCWludAkJCXN0 YXNoX3RyYW5jaGU7CisJaW50CQkJZW50cnlfdHJhbmNoZTsKKwlpbnQJCQluZXh0X3N0YXNoX2lk OworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hhc2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJ ZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9oYXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKwor dHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaAoreworCWNoYXIJCW5hbWVbTkFNRURBVEFMRU5dOwor CWludAkJCXBnc2Ffc3Rhc2hfaWQ7Cit9IHBnc2Ffc3Rhc2g7CisKK3R5cGVkZWYgc3RydWN0IHBn c2FfZW50cnlfa2V5Cit7CisJaW50CQkJcGdzYV9zdGFzaF9pZDsKKwlpbnQ2NAkJcXVlcnlJZDsK K30gcGdzYV9lbnRyeV9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBnc2FfZW50cnkKK3sKKwlwZ3Nh X2VudHJ5X2tleSBrZXk7CisJZHNhX3BvaW50ZXIgYWR2aWNlX3N0cmluZzsKK30gcGdzYV9lbnRy eTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9jb3VudAoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJaW50NjQJCW51bV9lbnRyaWVzOworfSBwZ3NhX3N0 YXNoX2NvdW50OworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlCisj ZGVmaW5lIFNIX0VMRU1FTlRfVFlQRSBwZ3NhX3N0YXNoX2NvdW50CisjZGVmaW5lIFNIX0tFWV9U WVBFIGludAorI2RlZmluZSBTSF9LRVkgcGdzYV9zdGFzaF9pZAorI2RlZmluZSBTSF9IQVNIX0tF WSh0Yiwga2V5KSBtdXJtdXJoYXNoMzIoKHVpbnQzMikga2V5KQorI2RlZmluZSBTSF9FUVVBTCh0 YiwgYSwgYikgKGEgPT0gYikKKyNkZWZpbmUgU0hfU0NPUEUgc3RhdGljIGlubGluZQorI2RlZmlu ZSBTSF9ERUZJTkUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNo LmgiCisKK3R5cGVkZWYgc3RydWN0IHBnc2Ffc3Rhc2hfbmFtZQoreworCXVpbnQzMgkJc3RhdHVz OworCWludAkJCXBnc2Ffc3Rhc2hfaWQ7CisJY2hhcgkgICAqbmFtZTsKK30gcGdzYV9zdGFzaF9u YW1lOworCisjZGVmaW5lIFNIX1BSRUZJWCBwZ3NhX3N0YXNoX25hbWVfdGFibGUKKyNkZWZpbmUg U0hfRUxFTUVOVF9UWVBFIHBnc2Ffc3Rhc2hfbmFtZQorI2RlZmluZSBTSF9LRVlfVFlQRSBpbnQK KyNkZWZpbmUgU0hfS0VZIHBnc2Ffc3Rhc2hfaWQKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtl eSkgbXVybXVyaGFzaDMyKCh1aW50MzIpIGtleSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIp IChhID09IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVG SU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisv KiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdzYV9zaGFyZWRfc3RhdGUgKnBn c2Ffc3RhdGU7CitzdGF0aWMgZHNhX2FyZWEgKnBnc2FfZHNhX2FyZWE7CitzdGF0aWMgZHNoYXNo X3RhYmxlICpwZ3NhX3N0YXNoX2RzaGFzaDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc2FfZW50 cnlfZHNoYXNoOworCisvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1ldGVycyAqLwor c3RhdGljIGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMgPSB7 CisJTkFNRURBVEFMRU4sCisJc2l6ZW9mKHBnc2Ffc3Rhc2gpLAorCWRzaGFzaF9zdHJjbXAsCisJ ZHNoYXNoX3N0cmhhc2gsCisJZHNoYXNoX3N0cmNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8q IGdldHMgc2V0IGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBw Z3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworCXNpemVvZihwZ3NhX2VudHJ5X2tleSks CisJc2l6ZW9mKHBnc2FfZW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJZHNoYXNoX21lbWhhc2gs CisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMgc2V0IGF0IHJ1 bnRpbWUgKi8KK307CisKKy8qIEdVQyB2YXJpYWJsZSAqLworc3RhdGljIGNoYXIgKnBnX3N0YXNo X2FkdmljZV9zdGFzaF9uYW1lID0gIiI7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8K K3N0YXRpYyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2FkdmljZV9tY3h0OworCisvKiBGdW5jdGlv biBwcm90b3R5cGVzICovCitzdGF0aWMgY2hhciAqcGdzYV9hZHZpc29yKFBsYW5uZXJHbG9iYWwg Kmdsb2IsCisJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLAorCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSAgRXhwbGFpblN0YXRl ICplcyk7CitzdGF0aWMgdm9pZCBwZ3NhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkIHBnc2Ff Y2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKTsKK3N0YXRpYyBib29sIHBnc2FfY2hl Y2tfc3Rhc2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJ ICBHdWNTb3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmlu ZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY3Jl YXRlX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9kcm9wX3N0YXNo KGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2 b2lkICpwdHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50CXBnc2FfbG9va3VwX3N0YXNoX2lkKGNo YXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3Ry aW5nKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19p bml0KHZvaWQpCit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fk dmlzb3JfaG9vayBob29rKTsKKworCS8qIElmIGNvbXB1dGVfcXVlcnlfaWQgPSAnYXV0bycsIHdl IHdvdWxkIGxpa2UgcXVlcnkgSURzLiAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qIERlZmlu ZSBvdXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfc3Rhc2hfYWR2 aWNlLnN0YXNoX25hbWUiLAorCQkJCQkJCSAgICJOYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8g YmUgdXNlZCBpbiB0aGlzIHNlc3Npb24uIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0Nf VVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnc2FfY2hlY2tfc3Rhc2hfbmFtZV9n dWMsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhS ZXNlcnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CisKKwkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRo YXQgd2Ugd2FudCB0byBwcm92aWRlIGFkdmljZSBzdHJpbmdzLiAqLworCWFkZF9hZHZpc29yX2Zu ID0KKwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9h ZHZpY2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCSgqYWRkX2Fkdmlz b3JfZm4pIChwZ3NhX2Fkdmlzb3IpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9u IHRvIGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vf c3Rhc2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90 b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFt ZShzdGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkp CisJCXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdf RVhDTFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICog U1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVt CitwZ19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0 YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdz YV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5 X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3Nh X3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1l KTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgp OworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9m IGFkdmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAq KSBmY2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdz YV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90 YWJsZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwor CS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4g Ki8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0 YWNoKCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAq LworCWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5 X2RzaGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0 b3IpKSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7 CisKKwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJ CSAgZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYg KCFmb3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJp ZXMrKzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3Vs dHMuICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRy dWUpOworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVM TCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0 YXNoX2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gt Pm5hbWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3Rh YmxlX2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJ bnQ2NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFd ID0gZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJz aW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFf dGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1j YWxsYWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitE YXR1bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQorewor CVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0 aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1l ID0gTlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCWlu dAkJCXN0YXNoX2lkID0gMDsKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKworCUluaXRNYXRlcmlhbGl6 ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkg aWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2gg PT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBVc2VyIGNhbiBwYXNzIE5VTEwgZm9y IGFsbCBzdGFzaGVzLCBvciB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIHN0YXNoLiAqLworCWlmICgh UEdfQVJHSVNOVUxMKDApKQorCXsKKwkJc3Rhc2hfbmFtZSA9IHRleHRfdG9fY3N0cmluZyhQR19H RVRBUkdfVEVYVF9QUCgwKSk7CisJCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsK KwkJc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKTsKKworCQkvKiBJ ZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBzdGFzaCBuYW1lLCBpdCBzaG91bGQgZXhpc3QuICovCisJ CWlmIChzdGFzaF9pZCA9PSAwKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2gg XCIlc1wiIGRvZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCX0KKwllbHNlCisJeworCQlw Z3NhX3N0YXNoICpzdGFzaDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBkdW1waW5nIGRhdGEgYWJv dXQgYWxsIHN0YXNoZXMsIHdlIG5lZWQgYW4gSUQtPm5hbWUgbG9va3VwCisJCSAqIHRhYmxlLgor CQkgKi8KKwkJbmhhc2ggPSBwZ3NhX3N0YXNoX25hbWVfdGFibGVfY3JlYXRlKEN1cnJlbnRNZW1v cnlDb250ZXh0LCA2NCwgTlVMTCk7CisJCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff c3Rhc2hfZHNoYXNoLCB0cnVlKTsKKwkJd2hpbGUgKChzdGFzaCA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCQl7CisJCQlwZ3NhX3N0YXNoX25hbWUgKm47CisJCQlib29s CQlmb3VuZDsKKworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9pbnNlcnQobmhhc2gsCisJ CQkJCQkJCQkJCSBzdGFzaC0+cGdzYV9zdGFzaF9pZCwKKwkJCQkJCQkJCQkJICZmb3VuZCk7CisJ CQlBc3NlcnQoIWZvdW5kKTsKKwkJCW4tPm5hbWUgPSBwc3RyZHVwKHN0YXNoLT5uYW1lKTsKKwkJ fQorCQlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKKwl9CisKKwkvKiBOb3cgaXRlcmF0ZSBv dmVyIGFsbCB0aGUgZW50cmllcy4gKi8KKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3Nh X2VudHJ5X2RzaGFzaCwgZmFsc2UpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQo Jml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCURhdHVtCQl2YWx1ZXNbM107CisJCWJvb2wJCW51 bGxzWzNdOworCQljaGFyCSAgICp0aGlzX3N0YXNoX25hbWU7CisJCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisKKwkJLyogU2tpcCBpbmNvbXBsZXRlIGVudHJpZXMgd2hlcmUgdGhlIGFkdmljZSBz dHJpbmcgd2FzIG5ldmVyIHNldC4gKi8KKwkJaWYgKGVudHJ5LT5hZHZpY2Vfc3RyaW5nID09IElu dmFsaWREc2FQb2ludGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXNoX2lkICE9IDApCisJ CXsKKwkJCS8qCisJCQkgKiBXZSdyZSBvbmx5IGR1bXBpbmcgZGF0YSBmb3Igb25lIHBhcnRpY3Vs YXIgc3Rhc2gsIHNvIHNraXAKKwkJCSAqIGVudHJpZXMgZm9yIGFueSBvdGhlciBzdGFzaCBhbmQg dXNlIHRoZSBzdGFzaCBuYW1lIHNwZWNpZmllZCBieQorCQkJICogdGhlIHVzZXIuCisJCQkgKi8K KwkJCWlmIChzdGFzaF9pZCAhPSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCQkJY29udGlu dWU7CisJCQl0aGlzX3N0YXNoX25hbWUgPSBzdGFzaF9uYW1lOworCQl9CisJCWVsc2UKKwkJewor CQkJcGdzYV9zdGFzaF9uYW1lICpuOworCisJCQkvKgorCQkJICogV2UncmUgZHVtcGluZyBkYXRh IGZvciBhbGwgc3Rhc2hlcywgc28gbG9vayB1cCB0aGUgY29ycmVjdCBuYW1lCisJCQkgKiB0byB1 c2UgaW4gdGhlIGhhc2ggdGFibGUuIElmIG5vdGhpbmcgaXMgZm91bmQsIHdoaWNoIGlzCisJCQkg KiBwb3NzaWJsZSBkdWUgdG8gcmFjZSBjb25kaXRpb25zLCBtYWtlIHVwIGEgc3RyaW5nIHRvIHVz ZS4KKwkJCSAqLworCQkJbiA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9sb29rdXAobmhhc2gsIGVu dHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7CisJCQlpZiAobiAhPSBOVUxMKQorCQkJCXRoaXNfc3Rh c2hfbmFtZSA9IG4tPm5hbWU7CisJCQllbHNlCisJCQkJdGhpc19zdGFzaF9uYW1lID0gcHNwcmlu dGYoIjxzdGFzaCAlZD4iLAorCQkJCQkJCQkJCSAgIGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCk7 CisJCX0KKworCQkvKiBXb3JrIG91dCB0dXBsZSB2YWx1ZXMuICovCisJCXZhbHVlc1swXSA9IENT dHJpbmdHZXRUZXh0RGF0dW0odGhpc19zdGFzaF9uYW1lKTsKKwkJbnVsbHNbMF0gPSBmYWxzZTsK KwkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShlbnRyeS0+a2V5LnF1ZXJ5SWQpOworCQludWxs c1sxXSA9IGZhbHNlOworCQlhZHZpY2Vfc3RyaW5nID0gZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNh X2FyZWEsIGVudHJ5LT5hZHZpY2Vfc3RyaW5nKTsKKwkJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKTsKKwkJbnVsbHNbMl0gPSBmYWxzZTsKKworCQkvKiBFbWl0 IHRoZSB0dXBsZS4gKi8KKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQs IHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9z ZXFfdGVybSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNR TC1jYWxsYWJsZSBmdW5jdGlvbiB0byB1cGRhdGUgYW4gYWR2aWNlIHN0YXNoIGVudHJ5IGZvciBh IHBhcnRpY3VsYXIKKyAqIHF1ZXJ5IElECisgKgorICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBp cyBOVUxMLCB3ZSBkZWxldGUgYW55IGV4aXN0aW5nIGFkdmljZSBzdGFzaAorICogZW50cnk7IG90 aGVyd2lzZSwgd2UgZWl0aGVyIGNyZWF0ZSBhbiBlbnRyeSBvciB1cGRhdGUgaXQgd2l0aCB0aGUg bmV3CisgKiBhZHZpY2Ugc3RyaW5nLgorICovCitEYXR1bQorcGdfc2V0X3N0YXNoZWRfYWR2aWNl KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZTsKKwlpbnQ2NAkJcXVl cnlJZDsKKworCWlmIChQR19BUkdJU05VTEwoMCkgfHwgUEdfQVJHSVNOVUxMKDEpKQorCQlQR19S RVRVUk5fTlVMTCgpOworCisJLyogR2V0IGFuZCBjaGVjayBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8K KwlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlw Z3NhX2NoZWNrX3N0YXNoX25hbWUoc3Rhc2hfbmFtZSk7CisKKwkvKgorCSAqIEdldCBhbmQgY2hl Y2sgcXVlcnkgSUQuCisJICoKKwkgKiBxdWVyeUlEIDAgbWVhbnMgbm8gcXVlcnkgSUQgd2FzIGNv bXB1dGVkLCBzbyByZWplY3QgdGhhdC4KKwkgKi8KKwlxdWVyeUlkID0gUEdfR0VUQVJHX0lOVDY0 KDEpOworCWlmIChxdWVyeUlkID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImNhbm5vdCBzZXQg YWR2aWNlIHN0cmluZyBmb3IgcXVlcnkgSUQgMCIpKTsKKworCS8qIEF0dGFjaCB0byBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdz YV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKiBOb3cgY2Fs bCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gZG8gdGhlIHJlYWwgd29yay4gKi8KKwlpZiAo UEdfQVJHSVNOVUxMKDIpKQorCQlwZ3NhX2NsZWFyX2FkdmljZV9zdHJpbmcoc3Rhc2hfbmFtZSwg cXVlcnlJZCk7CisJZWxzZQorCXsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IHRleHRfdG9f Y3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgyKSk7CisKKwkJcGdzYV9zZXRfYWR2aWNlX3N0cmlu ZyhzdGFzaF9uYW1lLCBxdWVyeUlkLCBhZHZpY2Vfc3RyaW5nKTsKKwl9CisKKwlQR19SRVRVUk5f Vk9JRCgpOworfQorCisvKgorICogR2V0IHRoZSBhZHZpY2Ugc3RyaW5nIHRoYXQgaGFzIGJlZW4g Y29uZmlndXJlZCBmb3IgdGhpcyBxdWVyeSwgaWYgYW55LAorICogYW5kIHJldHVybiBpdC4gT3Ro ZXJ3aXNlLCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKgorcGdzYV9hZHZpc29yKFBs YW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCSBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAorCQkJIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdz YV9lbnRyeV9rZXkga2V5OworCXBnc2FfZW50cnkgKmVudHJ5OworCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKgorCSAqIEV4aXQgcXVpY2tseSBpZiB0aGUg c3Rhc2ggbmFtZSBpcyBlbXB0eSBvciB0aGVyZSdzIG5vIHF1ZXJ5IElELgorCSAqLworCWlmIChw Z19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZVswXSA9PSAnXDAnIHx8IHBhcnNlLT5xdWVyeUlkID09 IDApCisJCXJldHVybiBOVUxMOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9y eSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFz aCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qCisJICogVHJhbnNsYXRlIHBnX3N0 YXNoX2FkdmljZS5zdGFzaF9uYW1lIHRvIGFuIGludGVnZXIgSUQuCisJICoKKwkgKiBwZ3NhX2No ZWNrX3N0YXNoX25hbWVfZ3VjKCkgaGFzIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBhZHZpY2Ugc3Rh c2gKKwkgKiBuYW1lLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgcGdzYV9jaGVja19zdGFzaF9u YW1lKCkgaGVyZS4KKwkgKi8KKwlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHBnX3N0 YXNoX2FkdmljZV9zdGFzaF9uYW1lKTsKKwlpZiAoc3Rhc2hfaWQgPT0gMCkKKwkJcmV0dXJuIE5V TEw7CisKKwkvKgorCSAqIExvb2sgdXAgdGhlIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBz dGFzaCBJRCArIHF1ZXJ5IElELgorCSAqCisJICogSWYgd2UgZmluZCBhbiBhZHZpY2Ugc3RyaW5n LCB3ZSBjb3B5IGl0IGludG8gdGhlIGN1cnJlbnQgbWVtb3J5CisJICogY29udGV4dCwgcHJlc3Vt YWJseSBzaG9ydC1saXZlZCwgc28gdGhhdCB3ZSBjYW4gcmVsZWFzZSB0aGUgbG9jayBvbiB0aGUK KwkgKiBkc2hhc2ggZW50cnkuIHBnX3BsYW5fYWR2aWNlIG9ubHkgbmVlZHMgdGhlIHZhbHVlIHRv IHJlbWFpbiBhbGxvY2F0ZWQKKwkgKiBsb25nIGVub3VnaCBmb3IgaXQgdG8gYmUgcGFyc2VkLCBz byB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaC4KKwkgKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6 ZW9mKHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlr ZXkucXVlcnlJZCA9IHBhcnNlLT5xdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4g TlVMTDsKKwlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJ CWFkdmljZV9zdHJpbmcgPSBOVUxMOworCWVsc2UKKwkJYWR2aWNlX3N0cmluZyA9IHBzdHJkdXAo ZHNhX2dldF9hZGRyZXNzKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCQllbnRyeS0+YWR2aWNl X3N0cmluZykpOworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9lbnRyeV9kc2hhc2gsIGVudHJ5 KTsKKworCS8qIElmIHdlIGZvdW5kIGFuIGFkdmljZSBzdHJpbmcsIGVtaXQgYSBkZWJ1ZyBtZXNz YWdlLiAqLworCWlmIChhZHZpY2Vfc3RyaW5nICE9IE5VTEwpCisJCWVsb2coREVCVUcyLCAic3Vw cGx5aW5nIGF1dG9tYXRpYyBhZHZpY2UgZm9yIHN0YXNoIFwiJXNcIiwgcXVlcnkgSUQgJSIgUFJJ ZDY0ICI6ICVzIiwKKwkJCSBwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwga2V5LnF1ZXJ5SWQs IGFkdmljZV9zdHJpbmcpOworCisJcmV0dXJuIGFkdmljZV9zdHJpbmc7Cit9CisKKy8qCisgKiBB dHRhY2ggdG8gdmFyaW91cyBzdHJ1Y3R1cmVzIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KKyAq CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHJlc2lsaWVudCBhZ2FpbnN0IGVy cm9ycy4gVGhhdCBpcywgaWYgaXQKKyAqIGZhaWxzIHBhcnR3YXkgdGhyb3VnaCwgaXQgc2hvdWxk IGJlIHBvc3NpYmxlIHRvIGNhbGwgaXQgYWdhaW4sIHJlcGVhdCBubworICogd29yayBhbHJlYWR5 IGNvbXBsZXRlZCwgYW5kIHBvdGVudGlhbGx5IHN1Y2NlZWQgb3IgYXQgbGVhc3QgZ2V0IGZ1cnRo ZXIgaWYKKyAqIHdoYXRldmVyIGNhdXNlZCB0aGUgcHJldmlvdXMgZmFpbHVyZSBoYXMgYmVlbiBj b3JyZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2F0dGFjaCh2b2lkKQoreworCWJvb2wJ CWZvdW5kOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qCisJICogQ3JlYXRlIGEg bWVtb3J5IGNvbnRleHQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbnRyb2wgc3RydWN0dXJlcwor CSAqIGFsbG9jYXRlZCBpbiBsb2NhbCBtZW1vcnkgYXJlIHN1ZmZpY2llbnRseSBwZXJzaXN0ZW50 LgorCSAqLworCWlmIChwZ19zdGFzaF9hZHZpY2VfbWN4dCA9PSBOVUxMKQorCQlwZ19zdGFzaF9h ZHZpY2VfbWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJ CQkJCQkJCQkJCSAicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVG QVVMVF9TSVpFUyk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19zdGFz aF9hZHZpY2VfbWN4dCk7CisKKwkvKiBBdHRhY2ggdG8gdGhlIGZpeGVkLXNpemUgc3RhdGUgb2Jq ZWN0IGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJaWYgKHBnc2Ffc3RhdGUgPT0gTlVMTCkKKwkJ cGdzYV9zdGF0ZSA9IEdldE5hbWVkRFNNU2VnbWVudCgicGdfc3Rhc2hfYWR2aWNlIiwKKwkJCQkJ CQkJCQlzaXplb2YocGdzYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCQkJCXBnc2FfaW5pdF9zaGFy ZWRfc3RhdGUsCisJCQkJCQkJCQkJJmZvdW5kLCBOVUxMKTsKKworCS8qIEF0dGFjaCB0byB0aGUg RFNBIGFyZWEgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9kc2FfYXJlYSA9PSBO VUxMKQorCXsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKworCQlMV0xvY2tBY3F1aXJlKCZw Z3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHBnc2Ffc3Rh dGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsK KwkJCXBnc2FfZHNhX2FyZWEgPSBkc2FfY3JlYXRlKHBnc2Ffc3RhdGUtPmRzYV90cmFuY2hlKTsK KwkJCWRzYV9waW4ocGdzYV9kc2FfYXJlYSk7CisJCQlwZ3NhX3N0YXRlLT5hcmVhID0gZHNhX2dl dF9oYW5kbGUocGdzYV9kc2FfYXJlYSk7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5s b2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxv Y2spOworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisJ CWRzYV9waW5fbWFwcGluZyhwZ3NhX2RzYV9hcmVhKTsKKwl9CisKKwkvKiBBdHRhY2ggdG8gdGhl IHN0YXNoX25hbWUtPnN0YXNoX2lkIGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAocGdzYV9zdGFzaF9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5k bGUgc3Rhc2hfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExX X0VYQ0xVU0lWRSk7CisJCXBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9 IHBnc2Ffc3RhdGUtPnN0YXNoX3RyYW5jaGU7CisJCXN0YXNoX2hhbmRsZSA9IHBnc2Ffc3RhdGUt PnN0YXNoX2hhc2g7CisJCWlmIChzdGFzaF9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElE KQorCQl7CisJCQlwZ3NhX3N0YXNoX2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJl YSwKKwkJCQkJCQkJCQkJICAmcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJ CQkJICBOVUxMKTsKKwkJCXBnc2Ffc3RhdGUtPnN0YXNoX2hhc2ggPQorCQkJCWRzaGFzaF9nZXRf aGFzaF90YWJsZV9oYW5kbGUocGdzYV9zdGFzaF9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgm cGdzYV9zdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZw Z3NhX3N0YXRlLT5sb2NrKTsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIHN0YXNoX2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBBdHRh Y2ggdG8gdGhlIGVudHJ5IGhhc2ggdGFibGUgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAo cGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkKKwl7CisJCWRzaGFzaF90YWJsZV9oYW5kbGUgZW50 cnlfaGFuZGxlOworCisJCUxXTG9ja0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7CisJCXBnc2FfZW50cnlfZHNoYXNoX3BhcmFtZXRlcnMudHJhbmNoZV9pZCA9IHBnc2Ff c3RhdGUtPmVudHJ5X3RyYW5jaGU7CisJCWVudHJ5X2hhbmRsZSA9IHBnc2Ffc3RhdGUtPmVudHJ5 X2hhc2g7CisJCWlmIChlbnRyeV9oYW5kbGUgPT0gRFNIQVNIX0hBTkRMRV9JTlZBTElEKQorCQl7 CisJCQlwZ3NhX2VudHJ5X2RzaGFzaCA9IGRzaGFzaF9jcmVhdGUocGdzYV9kc2FfYXJlYSwKKwkJ CQkJCQkJCQkJICAmcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycywKKwkJCQkJCQkJCQkJICBO VUxMKTsKKwkJCXBnc2Ffc3RhdGUtPmVudHJ5X2hhc2ggPQorCQkJCWRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUocGdzYV9lbnRyeV9kc2hhc2gpOworCQkJTFdMb2NrUmVsZWFzZSgmcGdzYV9z dGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0 YXRlLT5sb2NrKTsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2F0dGFjaChwZ3NhX2Rz YV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJ CQkJCQkJCQkgIGVudHJ5X2hhbmRsZSwgTlVMTCk7CisJCX0KKwl9CisKKwkvKiBSZXN0b3JlIHBy ZXZpb3VzIG1lbW9yeSBjb250ZXh0LiAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYW4gYWR2aWNlIHN0YXNoIG5hbWUgaXMg bGVnYWwsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYgbm90LgorICoKKyAqIEtlZXAgdGhpcyBpbiBz eW5jIHdpdGggcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YywgYmVsb3cuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ3NhX2NoZWNrX3N0YXNoX25hbWUoY2hhciAqc3Rhc2hfbmFtZSkKK3sKKwkvKiBSZWpl Y3QgZW1wdHkgYWR2aWNlIHN0YXNoIG5hbWUuICovCisJaWYgKHN0YXNoX25hbWVbMF0gPT0gJ1ww JykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWUgbWF5IG5vdCBiZSB6ZXJv IGxlbmd0aCIpKTsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZpY2Ugc3Rhc2ggbmFtZXMuICov CisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFUQUxFTikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CWVycm1zZygiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0 ZXMiLAorCQkJCQkgICBOQU1FREFUQUxFTiAtIDEpKTsKKworCS8qCisJICogUmVqZWN0IG5vbi1B U0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNlIGFkdmljZSBzdGFzaGVzIGFyZSB2aXNpYmxl CisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5kIHRoZSBlbmNvZGluZ3Mgb2YgdGhvc2UgZGF0 YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlpZiAoIXBnX2lzX2FzY2lpKHN0YXNoX25hbWUp KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWlu IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIikpOworfQorCisvKgorICogQXMgYWJvdmUsIGJ1dCBmb3Ig dGhlIEdVQyBjaGVja19ob29rLiBXZSBhbGxvdyB0aGUgZW1wdHkgc3RyaW5nIGhlcmUsCisgKiB0 aG91Z2gsIGFzIGVxdWl2YWxlbnQgdG8gZGlzYWJsaW5nIHRoZSBmZWF0dXJlLgorICovCitzdGF0 aWMgYm9vbAorcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YyhjaGFyICoqbmV3dmFsLCB2b2lkICoq ZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJY2hhcgkgICAqc3Rhc2hfbmFtZSA9ICpuZXd2 YWw7CisKKwkvKiBSZWplY3Qgb3ZlcmxvbmcgYWR2aWNlIHN0YXNoIG5hbWVzLiAqLworCWlmIChz dHJsZW4oc3Rhc2hfbmFtZSkgKyAxID4gTkFNRURBVEFMRU4pCisJeworCQlHVUNfY2hlY2tfZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKTsKKwkJR1VDX2NoZWNrX2VycmRl dGFpbCgiYWR2aWNlIHN0YXNoIG5hbWVzIG1heSBub3QgYmUgbG9uZ2VyIHRoYW4gJWQgYnl0ZXMi LAorCQkJCQkJCU5BTUVEQVRBTEVOIC0gMSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgor CSAqIFJlamVjdCBub24tQVNDSUkgYWR2aWNlIHN0YXNoIG5hbWVzLCBzaW5jZSBhZHZpY2Ugc3Rh c2hlcyBhcmUgdmlzaWJsZQorCSAqIGFjcm9zcyBhbGwgZGF0YWJhc2VzIGFuZCB0aGUgZW5jb2Rp bmdzIG9mIHRob3NlIGRhdGFiYXNlcyBtaWdodCBkaWZmZXIuCisJICovCisJaWYgKCFwZ19pc19h c2NpaShzdGFzaF9uYW1lKSkKKwl7CisJCUdVQ19jaGVja19lcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJhZHZpY2Ugc3Rhc2gg bmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIik7CisJCXJldHVybiBm YWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhZHZpY2Ug c3Rhc2guCisgKi8KK3N0YXRpYyB2b2lkCitwZ3NhX2NyZWF0ZV9zdGFzaChjaGFyICpzdGFzaF9u YW1lKQoreworCXBnc2Ffc3Rhc2ggKnN0YXNoOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KExX TG9ja0hlbGRCeU1lSW5Nb2RlKCZwZ3NhX3N0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpKTsKKwor CS8qIENyZWF0ZSBhIHN0YXNoIHdpdGggdGhpcyBuYW1lLCB1bmxlc3Mgb25lIGFscmVhZHkgZXhp c3RzLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBnc2Ffc3Rhc2hfZHNoYXNo LCBzdGFzaF9uYW1lLCAmZm91bmQpOworCWlmIChmb3VuZCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygi YWR2aWNlIHN0YXNoIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIsIHN0YXNoX25hbWUpKTsKKwlzdGFz aC0+cGdzYV9zdGFzaF9pZCA9IHBnc2Ffc3RhdGUtPm5leHRfc3Rhc2hfaWQrKzsKKwlkc2hhc2hf cmVsZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7Cit9CisKKy8qCisgKiBSZW1v dmUgYW55IHN0b3JlZCBhZHZpY2Ugc3RyaW5nIGZvciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFu ZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhj aGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKQoreworCXBnc2FfZW50cnkgKmVudHJ5Owor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBvbGRf ZHA7CisKKwkvKiBUcmFuc2xhdGUgdGhlIHN0YXNoIG5hbWUgdG8gYW4gaW50ZWdlciBJRC4gKi8K KwlpZiAoKHN0YXNoX2lkID0gcGdzYV9sb29rdXBfc3Rhc2hfaWQoc3Rhc2hfbmFtZSkpID09IDAp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3QgZXhpc3Qi LCBzdGFzaF9uYW1lKSk7CisKKwkvKgorCSAqIExvb2sgZm9yIGFuIGV4aXN0aW5nIGVudHJ5LCBh bmQgZnJlZSBpdC4gQnV0LCBiZSBzdXJlIHRvIHNhdmUgdGhlCisJICogcG9pbnRlciB0byB0aGUg YXNzb2NpYXRlZCBhZHZpY2Ugc3RyaW5nLCBpZiBhbnkuCisJICovCisJbWVtc2V0KCZrZXksIDAs IHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rhc2hfaWQ7 CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzYV9lbnRy eV9kc2hhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9PSBOVUxMKQorCQlvbGRfZHAgPSBJ bnZhbGlkRHNhUG9pbnRlcjsKKwllbHNlCisJeworCQlvbGRfZHAgPSBlbnRyeS0+YWR2aWNlX3N0 cmluZzsKKwkJZHNoYXNoX2RlbGV0ZV9lbnRyeShwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOwor CX0KKworCS8qIE5vdyB3ZSBmcmVlIHRoZSBhZHZpY2Ugc3RyaW5nIGFzIHdlbGwsIGlmIHRoZXJl IHdhcyBvbmUuICovCisJaWYgKG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2Zy ZWUocGdzYV9kc2FfYXJlYSwgb2xkX2RwKTsKK30KKworLyoKKyAqIERyb3AgYW4gYWR2aWNlIHN0 YXNoLgorICovCitzdGF0aWMgdm9pZAorcGdzYV9kcm9wX3N0YXNoKGNoYXIgKnN0YXNoX25hbWUp Cit7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJZHNoYXNoX3Nl cV9zdGF0dXMgaXRlcmF0b3I7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwlBc3NlcnQoTFdMb2NrSGVs ZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSkpOworCisJLyogUmVt b3ZlIHRoZSBlbnRyeSBmb3IgdGhpcyBhZHZpY2Ugc3Rhc2guICovCisJc3Rhc2ggPSBkc2hhc2hf ZmluZChwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2hfbmFtZSwgdHJ1ZSk7CisJaWYgKHN0YXNoID09 IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsK Kwlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwkvKgor CSAqIEl0IHNob3VsZCBub3cgYmUgaW1wb3NzaWJsZSBmb3IgYW55IG5ldyBlbnRyaWVzIHRvIGJl IGFkZGVkIGZvciB0aGUKKwkgKiBhZHZpY2Ugc3Rhc2ggd2UganVzdCBkZWxldGVkLiBHbyB0aHJv dWdoIGFuZCBjbGVhbiBvdXQgYWxsIHRoZSBleGlzdGluZworCSAqIG9uZXMuCisJICovCisJZHNo YXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9lbnRyeV9kc2hhc2gsIHRydWUpOworCXdoaWxl ICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkKKwl7CisJCWlm IChzdGFzaF9pZCA9PSBlbnRyeS0+a2V5LnBnc2Ffc3Rhc2hfaWQpCisJCXsKKwkJCWlmIChlbnRy eS0+YWR2aWNlX3N0cmluZyAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBlbnRyeS0+YWR2aWNlX3N0cmluZyk7CisJCQlkc2hhc2hfZGVsZXRlX2N1cnJl bnQoJml0ZXJhdG9yKTsKKwkJfQorCX0KKwlkc2hhc2hfc2VxX3Rlcm0oJml0ZXJhdG9yKTsKK30K KworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc2FfaW5pdF9zaGFyZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICph cmcpCit7CisJcGdzYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gKHBnc2Ffc2hhcmVkX3N0YXRlICop IHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5sb2NrLAorCQkJCQkgTFdMb2NrTmV3 VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ZHNhX3RyYW5jaGUg PSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9kc2EiKTsKKwlzdGF0ZS0+c3Rh c2hfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3Rhc2hfYWR2aWNlX3N0YXNoIik7 CisJc3RhdGUtPmVudHJ5X3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2Fk dmljZV9lbnRyeSIpOworCXN0YXRlLT5uZXh0X3N0YXNoX2lkID0gMTsKKwlzdGF0ZS0+YXJlYSA9 IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c3Rhc2hfaGFzaCA9IERTSEFTSF9IQU5ETEVf SU5WQUxJRDsKKwlzdGF0ZS0+ZW50cnlfaGFzaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKK30K KworLyoKKyAqIExvb2sgdXAgdGhlIGludGVnZXIgSUQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg Z2l2ZW4gc3Rhc2ggbmFtZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgbm8gc3VjaCBzdGFzaCBleGlz dHMuCisgKi8KK3N0YXRpYyBpbnQKK3Bnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIgKnN0YXNoX25h bWUpCit7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJaW50CQkJc3Rhc2hfaWQ7CisKKwkvKiBTZWFy Y2ggdGhlIHNoYXJlZCBoYXNoIHRhYmxlLiAqLworCXN0YXNoID0gZHNoYXNoX2ZpbmQocGdzYV9z dGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsIGZhbHNlKTsKKwlpZiAoc3Rhc2ggPT0gTlVMTCkKKwkJ cmV0dXJuIDA7CisJc3Rhc2hfaWQgPSBzdGFzaC0+cGdzYV9zdGFzaF9pZDsKKwlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnc2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaCk7CisKKwlyZXR1cm4gc3Rhc2hfaWQ7 Cit9CisKKy8qCisgKiBTdG9yZSBhIG5ldyBvciB1cGRhdGVkIGFkdmljZSBzdHJpbmcgZm9yIHRo ZSBnaXZlbiBhZHZpY2Ugc3Rhc2ggYW5kIHF1ZXJ5IElELgorICovCitzdGF0aWMgdm9pZAorcGdz YV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLCBjaGFy ICphZHZpY2Vfc3RyaW5nKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CXBnc2FfZW50cnlfa2V5IGtleTsKKwlpbnQJCQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRlciBuZXdf ZHA7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1l IHRvIGFuIGludGVnZXIgSUQuICovCityZXN0YXJ0OgorCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xv b2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIE1h a2Ugc3VyZSB0aGF0IGFuIGVudHJ5IGV4aXN0cy4gKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9m KHBnc2FfZW50cnlfa2V5KSk7CisJa2V5LnBnc2Ffc3Rhc2hfaWQgPSBzdGFzaF9pZDsKKwlrZXku cXVlcnlJZCA9IHF1ZXJ5SWQ7CisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9l bnRyeV9kc2hhc2gsICZrZXksICZmb3VuZCk7CisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmFkdmlj ZV9zdHJpbmcgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2Ff ZW50cnlfZHNoYXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIENvcHkgdGhlIGFkdmljZSBzdHJpbmcg aW50byBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCisJICoKKwkgKiBJZiB3ZSBmYWlsIGFmdGVyIHRo aXMgcG9pbnQsIHdlJ2xsIGhhdmUgYSBzZXJ2ZXItbGlmZXNwYW4gbWVtb3J5IGxlYWsuCisJICog V2UgYXNzdW1lIHRoYXQsIGhhdmluZyBjcmVhdGVkIHRoZSBlbnRyeSBhYm92ZSwgd2UnbGwgYmUg YWJsZSB0byBmaW5kCisJICogaXQgYWdhaW4gd2l0aG91dCBhbiBlcnJvci4KKwkgKi8KKwluZXdf ZHAgPSBkc2FfYWxsb2NhdGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsg MSk7CisJc3RyY3B5KGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZp Y2Vfc3RyaW5nKTsKKworCS8qCisJICogUmVmaW5kIHRoZSBlbnRyeSBhbmQgc3dhcCB0aGUgbmV3 IHBvaW50ZXIgaW50byBwbGFjZS4KKwkgKgorCSAqIElmIHRoZSBlbnRyeSBoYXMgYmVlbiBkZWxl dGVkIHNpbmNlIHdlIGZvdW5kIG9yIGNyZWF0ZWQgaXQgYWJvdmUsIGZyZWUKKwkgKiBtZW1vcnkg YW5kIHJldHJ5IGZyb20gdGhlIHRvcC4KKwkgKi8KKwllbnRyeSA9IGRzaGFzaF9maW5kKHBnc2Ff ZW50cnlfZHNoYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwl7CisJCWRz YV9mcmVlKHBnc2FfZHNhX2FyZWEsIG5ld19kcCk7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJb2xk X2RwID0gZW50cnktPmFkdmljZV9zdHJpbmc7CisJZW50cnktPmFkdmljZV9zdHJpbmcgPSBuZXdf ZHA7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX2VudHJ5X2RzaGFzaCwgZW50cnkpOworCisJ LyogSWYgd2UgcmVwbGFjZWQgYW4gb2xkIGFkdmljZSBzdHJpbmcsIGZyZWUgaXQuICovCisJaWYg KG9sZF9kcCAhPSBJbnZhbGlkRHNhUG9pbnRlcikKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwg b2xkX2RwKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNo X2FkdmljZS5jb250cm9sIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhMGZmZjVj ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hf YWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX3N0YXNoX2FkdmljZSBleHRlbnNp b24KK2NvbW1lbnQgPSAnc3RvcmUgYW5kIGF1dG9tYXRpY2FsbHkgYXBwbHkgcGxhbiBhZHZpY2Un CitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdf c3Rhc2hfYWR2aWNlJworcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3N0YXNoX2FkdmljZS9zcWwvcGdfc3Rhc2hfYWR2aWNlLnNxbCBiL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5hZWQyZDJhNWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsCkBAIC0wLDAgKzEsMTMwIEBACitD UkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2FkdmljZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0g b247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKKy0tIEhlbHBl cjogZXh0cmFjdCBxdWVyeSBpZGVudGlmaWVyIGZyb20gRVhQTEFJTiBWRVJCT1NFIG91dHB1dC4K K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGdldF9xdWVyeV9pZChxdWVyeV90ZXh0IHRleHQp IFJFVFVSTlMgYmlnaW50CitMQU5HVUFHRSBwbHBnc3FsIEFTICQkCitERUNMQVJFCisgICAgbGlu ZSB0ZXh0OworICAgIHFpZCBiaWdpbnQ7CitCRUdJTgorICAgIEZPUiBsaW5lIElOIEVYRUNVVEUg J0VYUExBSU4gKFZFUkJPU0UsIEZPUk1BVCBURVhUKSAnIHx8IHF1ZXJ5X3RleHQKKyAgICBMT09Q CisgICAgICAgIElGIGxpbmUgfiAnUXVlcnkgSWRlbnRpZmllcjonIFRIRU4KKyAgICAgICAgICAg IHFpZCA6PSByZWdleHBfcmVwbGFjZShsaW5lLCAnLipRdWVyeSBJZGVudGlmaWVyOlxzKigtP1xk KykuKicsICdcMScpOjpiaWdpbnQ7CisgICAgICAgICAgICBSRVRVUk4gcWlkOworICAgICAgICBF TkQgSUY7CisgICAgRU5EIExPT1A7CisgICAgUkFJU0UgRVhDRVBUSU9OICdRdWVyeSBJZGVudGlm aWVyIG5vdCBmb3VuZCBpbiBFWFBMQUlOIG91dHB1dCc7CitFTkQ7CiskJDsKKworQ1JFQVRFIFRB QkxFIGFhX2RpbTEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGlt MSAoaWQsIGRpbTEsIHZhbDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywg KGcgJSAzKSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFO QUxZWkUgYWFfZGltMTsKKworQ1JFQVRFIFRBQkxFIGFhX2RpbTIgKGlkIGludGVnZXIgcHJpbWFy eSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcs ICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFhX2RpbTI7CisKK0NSRUFURSBUQUJM RSBhYV9mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltMV9pZCBpbnRlZ2VyIG5vdCBu dWxsIHJlZmVyZW5jZXMgYWFfZGltMSAoaWQpLAorCWRpbTJfaWQgaW50ZWdlciBub3QgbnVsbCBy ZWZlcmVuY2VzIGFhX2RpbTIgKGlkKQorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBhYV9mYWN0CisJU0VMRUNUIGcsIChnJTEwMCkrMSwgKGclMTAwKSsx IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZmFj dDsKKworLS0gR2V0IHRoZSBxdWVyeSBpZGVudGlmaWVyLgorU0VMRUNUIGdldF9xdWVyeV9pZCgk JAorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0x X2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAor CVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyQkKSBBUyBxaWQgXGdzZXQKKworLS0gQ3Jl YXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2aWNlIGF0IGl0LgorU0VM RUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFVCBwZ19zdGFz aF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKKworLS0gUnVuIG91ciB0ZXN0 IHF1ZXJ5IGZvciB0aGUgZmlyc3QgdGltZSB3aXRoIG5vIHN0YXNoZWQgYWR2aWNlLgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhYV9mYWN0IGYgTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g aW5kZXggc2NhbiBvbiBkaW0xCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNz X3N0YXNoJywgOidxaWQnLAorCSdJTkRFWF9TQ0FOKGQxIGFhX2RpbTFfcGtleSknKTsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBh biBhbHRlcm5hdGl2ZSBqb2luIG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdy ZWdyZXNzX3N0YXNoJywgOidxaWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CitFWFBMQUlO IChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEg ZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJf aWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gRm9yY2UgYW4g YWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgn cmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVEX0xPT1BfUExBSU4oZDEpJyk7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gQWRkIGEg dXNlbGVzcyBleHRyYSBlbnRyeSB0byBvdXIgdGVzdCBzdGFzaC4gU2hvdWxkbid0IGNoYW5nZSB0 aGUgcmVzdWx0CistLSBmcm9tIHRoZSBwcmV2aW91cyB0ZXN0LgorLS0gKElmIHdlJ3JlIHVubHVj a3kgZW5vdWdoIHRoYXQgdGhpcyBldmVyIGZhaWxzIGR1ZSB0byBxdWVyeSBJRCBhY3R1YWxseQor LS0gYmVpbmcgMSwgdGhlbiBqdXN0IHB1dCBzb21lIG90aGVyIGNvbnN0YW50IGhlcmUuIFNlZW1z IHVubGlrZWx5LikKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gn LCAxLCAnU0VRX1NDQU4oZDEpJyk7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g YWFfZmFjdCBmCisJTEVGVCBKT0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlM RUZUIEpPSU4gYWFfZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAx IEFORCB2YWwyID0gMTsKKworLS0gVHJ5IGFuIGVtcHR5IHN0YXNoIHRvIGJlIHN1cmUgaXQgZG9l cyBub3RoaW5nCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9z dGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lID0gJ3JlZ3Jlc3NfZW1wdHlf c3Rhc2gnOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxF RlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2Rp bTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7 CisKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gbGlzdCBlYWNoIHN0YXNoIGluZGl2aWR1YWxseSBhbmQg YWxsIG9mIHRoZW0gdG9nZXRoZXIsCistLSBidXQgbm90IGEgbm9uZXhpc3RlbnQgc3Rhc2guCitT RUxFQ1QgKiBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7 CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCUZST00gcGdfZ2V0X2FkdmljZV9z dGFzaF9jb250ZW50cygncmVncmVzc19zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworU0VMRUNU IHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2Nv bnRlbnRzKCdyZWdyZXNzX2VtcHR5X3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qg c3Rhc2hfbmFtZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29u dGVudHMoTlVMTCkgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFtZSwgYWR2aWNl X3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ25vX3N1Y2hfc3Rh c2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gVGVzdCB0aGF0IHdlIGNhbiByZW1vdmUgYWR2 aWNlLgorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlk JywgbnVsbCk7CitTRVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19zdGFz aCc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBK T0lOIGFhX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBk MiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsK K1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0 YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CisKKy0tIENs ZWFuIHVwIHN0YXRlIGluIGR5bmFtaWMgc2hhcmVkIG1lbW9yeS4KK1NFTEVDVCBwZ19kcm9wX2Fk dmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworU0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNo KCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJp Yi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAppbmRleCAyYWI2ZmFmYmFiMS4uOGYw OWQ3Mjg2OTggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAtMTYwLDYgKzE2MCw3IEBAIENSRUFURSBFWFRFTlNJ T04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9uYW1lPC9yZXBsYWNlYWJsZT47CiAgJnBncGxhbmFk dmljZTsKICAmcGdwcmV3YXJtOwogICZwZ3Jvd2xvY2tzOworICZwZ3N0YXNoYWR2aWNlOwogICZw Z3N0YXRzdGF0ZW1lbnRzOwogICZwZ3N0YXR0dXBsZTsKICAmcGdzdXJnZXJ5OwpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dt bAppbmRleCA0MDdmZjNhYmZmZS4uOGMxNGJhYjg0ZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCkBAIC0xNDQs NiArMTQ0LDcgQEAKIDwhRU5USVRZIG9pZDJuYW1lICAgICAgICBTWVNURU0gIm9pZDJuYW1lLnNn bWwiPgogPCFFTlRJVFkgcGFnZWluc3BlY3QgICAgIFNZU1RFTSAicGFnZWluc3BlY3Quc2dtbCI+ CiA8IUVOVElUWSBwYXNzd29yZGNoZWNrICAgU1lTVEVNICJwYXNzd29yZGNoZWNrLnNnbWwiPgor PCFFTlRJVFkgcGdzdGFzaGFkdmljZSAgIFNZU1RFTSAicGdzdGFzaGFkdmljZS5zZ21sIj4KIDwh RU5USVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVyY2FjaGUuc2dtbCI+CiA8IUVO VElUWSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3RhZHZpY2Uuc2dtbCI+CiA8IUVO VElUWSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5zZ21sIj4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFk dmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wODlmYzY2 NDQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwK QEAgLTAsMCArMSwyMTggQEAKKzwhLS0gZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAt LT4KKworPHNlY3QxIGlkPSJwZ3N0YXNoYWR2aWNlIiB4cmVmbGFiZWw9InBnX3N0YXNoX2Fkdmlj ZSI+CisgPHRpdGxlPnBnX3N0YXNoX2FkdmljZSAmbWRhc2g7IHN0b3JlIGFuZCBhdXRvbWF0aWNh bGx5IGFwcGx5IHBsYW4gYWR2aWNlPC90aXRsZT4KKworIDxpbmRleHRlcm0gem9uZT0icGdzdGFz aGFkdmljZSI+CisgIDxwcmltYXJ5PnBnX3N0YXNoX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4 dGVybT4KKworIDxwYXJhPgorICBUaGUgPGZpbGVuYW1lPnBnX3N0YXNoX2FkdmljZTwvZmlsZW5h bWU+IGV4dGVuc2lvbiBhbGxvd3MgeW91IHRvIHN0YXNoCisgIDxsaW5rIGxpbmtlbmQ9InBncGxh bmFkdmljZSI+cGxhbiBhZHZpY2U8L2xpbms+IHN0cmluZ3MgaW4gZHluYW1pYworICBzaGFyZWQg bWVtb3J5IHdoZXJlIHRoZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkgYXBwbGllZC4gQW4KKyAgPGxp dGVyYWw+YWR2aWNlIHN0YXNoPC9saXRlcmFsPiBpcyBhIG1hcHBpbmcgZnJvbQorICA8bGluayBs aW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCI+cXVlcnkgaWRlbnRpZmllcnM8L2xpbms+IHRv IHBsYW4gYWR2aWNlCisgIHN0cmluZ3MuIFdoZW5ldmVyIGEgc2Vzc2lvbiBpcyBhc2tlZCB0byBw bGFuIGEgcXVlcnkgd2hvc2UgcXVlcnkgSUQgYXBwZWFycworICBpbiB0aGUgcmVsZXZhbnQgYWR2 aWNlIHN0YXNoLCB0aGUgcGxhbiBhZHZpY2Ugc3RyaW5nIGlzIGF1dG9tYXRpY2FsbHkgYXBwbGll ZAorICB0byBndWlkZSBwbGFubmluZy4gTm90ZSB0aGF0IGFkdmljZSBzdGFzaGVzIGV4aXN0IHB1 cmVseSBpbiBtZW1vcnkuIFRoaXMKKyAgbWVhbnMgYm90aCB0aGF0IGl0IGlzIGltcG9ydGFudCB0 byBiZSBtaW5kZnVsIG9mIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuCisgIGRlY2lkaW5nIGhvdyBt dWNoIHBsYW4gYWR2aWNlIHRvIHN0YXNoLCBhbmQgYWxzbyB0aGF0IGFkdmljZSBzdGFzaGVzIG11 c3QKKyAgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRlZCB3aGVuZXZlciB0aGUgc2VydmVyIGlz IHJlc3RhcnRlZC4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMg bW9kdWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGV4ZWN1dGUKKyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVO U0lPTiBwZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGluIGF0IGxlYXN0CisgIG9uZSBkYXRhYmFz ZSwgc28gdGhhdCB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhlIFNRTCBmdW5jdGlvbnMgdG8gbWFuYWdl CisgIGFkdmljZSBzdGFzaGVzLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIDxsaXRlcmFsPnBnX3N0 YXNoX2FkdmljZTwvbGl0ZXJhbD4KKyAgbW9kdWxlIHRvIGJlIGxvYWRlZCBpbiBhbGwgc2Vzc2lv bnMgd2hlcmUgeW91IHdhbnQgdGhpcyBtb2R1bGUgdG8KKyAgYXV0b21hdGljYWxseSBhcHBseSBh ZHZpY2UuIEl0IHdpbGwgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRkaW5nCisgIDxs aXRlcmFsPnBnX3N0YXNoX2FkdmljZTwvbGl0ZXJhbD4gdG8KKyAgPHhyZWYgbGlua2VuZD0iZ3Vj LXNoYXJlZC1wcmVsb2FkLWxpYnJhcmllcyIvPiBhbmQgcmVzdGFydGluZyB0aGUgc2VydmVyLgor IDwvcGFyYT4KKworIDxwYXJhPgorICBPbmNlIHlvdSBoYXZlIG1ldCB0aGUgYWJvdmUgY3JpdGVy aWEsIHlvdSBjYW4gY3JlYXRlIGFkdmljZSBzdGFzaGVzCisgIHVzaW5nIHRoZSA8bGl0ZXJhbD5w Z19jcmVhdGVfYWR2aWNlX3N0YXNoPC9saXRlcmFsPiBmdW5jdGlvbiBkZXNjcmliZWQKKyAgYmVs b3cgYW5kIHNldCB0aGUgcGxhbiBhZHZpY2UgZm9yIGEgZ2l2ZW4gcXVlcnkgSUQgaW4gYSBnaXZl biBzdGFzaCB1c2luZworICB0aGUgPGxpdGVyYWw+cGdfc2V0X3N0YXNoZWRfYWR2aWNlPC9saXRl cmFsPiBmdW5jdGlvbi4gVGhlbiwgeW91IG5lZWQKKyAgb25seSBjb25maWd1cmUgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L2xpdGVyYWw+IHRvIHBvaW50CisgIHRvIHRoZSBj aG9zZW4gYWR2aWNlIHN0YXNoIG5hbWUuIEZvciBzb21lIHVzZSBjYXNlcywgcmF0aGVyIHRoYW4g c2V0dGluZworICB0aGlzIG9uIGEgc3lzdGVtLXdpZGUgYmFzaXMsIHlvdSBtYXkgZmluZCBpdCBo ZWxwZnVsIHRvIHVzZQorICA8bGl0ZXJhbD5BTFRFUiBEQVRBQkFTRSAuLi4gU0VUPC9saXRlcmFs PiBvcgorICA8bGl0ZXJhbD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVyYWw+IHRvIGNvbmZpZ3Vy ZSB2YWx1ZXMgdGhhdCB3aWxsIGFwcGx5CisgIG9ubHkgdG8gYSBkYXRhYmFzZSBvciBvbmx5IHRv IGEgY2VydGFpbiByb2xlLiBMaWtld2lzZSwgaXQgbWF5IHNvbWV0aW1lcworICBiZSBiZXR0ZXIg dG8gc2V0IHRoZSBzdGFzaCBuYW1lIGluIGEgcGFydGljdWxhciBzZXNzaW9uIHVzaW5nCisgIDxs aXRlcmFsPlNFVDwvbGl0ZXJhbD4uCisgPC9wYXJhPgorCisgPHBhcmE+CisgIEJlY2F1c2UgPGxp dGVyYWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3b3JrcyBvbiB0aGUgYmFzaXMgb2YgcXVl cnkKKyAgaWRlbnRpZmllcnMsIHlvdSB3aWxsIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBxdWVyeSBp ZGVudGlmaWVyIGZvciBlYWNoIHF1ZXJ5CisgIHdob3NlIHBsYW4geW91IHdpc2ggdG8gY29udHJv bC4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIGRldGVybWluZSB0aGUgYWR2aWNlCisgIHN0cmluZyB0 aGF0IHlvdSB3aXNoIHRvIHN0b3JlIGZvciBlYWNoIHF1ZXJ5LiBPbmUgd2F5IHRvIGRvIHRoaXMg aXMgdG8gdXNlCisgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+OiB0aGUgPGxpdGVyYWw+VkVS Qk9TRTwvbGl0ZXJhbD4gb3B0aW9uIHdpbGwKKyAgc2hvdyB0aGUgcXVlcnkgSUQsIGFuZCB0aGUg PGxpdGVyYWw+UExBTl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB3aWxsCisgIHNob3cgcGxhbiBh ZHZpY2UuIDx4cmVmIGxpbmtlbmQ9InBnY29sbGVjdGFkdmljZSIgLz4gY2FuIGJlIHVzZWQgdG8K KyAgb2J0YWluIHRoaXMgaW5mb3JtYXRpb24gZm9yIGFuIGVudGlyZSB3b3JrbG9hZCwgYWx0aG91 Z2ggY2FyZSBtdXN0IGJlCisgIHRha2VuIHNpbmNlIGl0IGNhbiB1c2UgdXAgYSBsb3Qgb2YgbWVt b3J5IHZlcnkgcXVpY2tseS4gUXVlcnkgaWRlbnRpZmllcnMgY2FuCisgIGFsc28gYmUgb2J0YWlu ZWQgdGhyb3VnaCB0b29scyBzdWNoIGFzIDx4cmVmIGxpbmtlbmQ9InBnc3RhdHN0YXRlbWVudHMi IC8+CisgIG9yIDx4cmVmIGxpbmtlbmQ9Im1vbml0b3JpbmctcGctc3RhdC1hY3Rpdml0eS12aWV3 IiAvPiwgYnV0IHRoZXNlIHRvb2xzCisgIHdpbGwgbm90IHByb3ZpZGUgcGxhbiBhZHZpY2Ugc3Ry aW5ncy4gTm90ZSB0aGF0CisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jb21wdXRlLXF1ZXJ5LWlkIiAv PiBtdXN0IGJlIGVuYWJsZWQgZm9yIHF1ZXJ5CisgIGlkZW50aWZpZXJzIHRvIGJlIGNvbXB1dGVk OyBpZiBzZXQgdG8gPGxpdGVyYWw+YXV0bzwvbGl0ZXJhbD4sIGxvYWRpbmcKKyAgPGxpdGVyYWw+ cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiB3aWxsIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5Lgor IDwvcGFyYT4KKworIDxwYXJhPgorICBHZW5lcmFsbHksIHRoZSBmYWN0IHRoYXQgdGhlIHBsYW5u ZXIgaXMgYWJsZSB0byBjaGFuZ2UgcXVlcnkgcGxhbnMgYXMKKyAgdGhlIHVuZGVybHlpbmcgZGlz dHJpYnV0aW9uIG9mIGRhdGEgY2hhbmdlcyBpcyBhIGZlYXR1cmUsIG5vdCBhIGJ1Zy4KKyAgTW9y ZW92ZXIsIGFwcGx5aW5nIHBsYW4gYWR2aWNlIGNhbiBoYXZlIGEgbm90aWNlYWJsZSBwZXJmb3Jt YW5jZSBjb3N0IGV2ZW4KKyAgd2hlbiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2UgdG8g dGhlIHF1ZXJ5IHBsYW4uIFRoZXJlZm9yZSwgaXQgaXMKKyAgYSBnb29kIGlkZWEgdG8gdXNlIHRo aXMgZmVhdHVyZSBvbmx5IHdoZW4gYW5kIHRvIHRoZSBleHRlbnQgbmVlZGVkLgorICBQbGFuIGFk dmljZSBzdHJpbmdzIGNhbiBiZSB0cmltbWVkIGRvd24gdG8gbWVudGlvbiBvbmx5IHRob3NlIGFz cGVjdHMKKyAgb2YgdGhlIHBsYW4gdGhhdCBuZWVkIHRvIGJlIGNvbnRyb2xsZWQsIGFuZCB1c2Vk IG9ubHkgZm9yIHF1ZXJpZXMgd2hlcmUKKyAgdGhlcmUgaXMgYmVsaWV2ZWQgdG8gYmUgYSBzaWdu aWZpY2FudCByaXNrIG9mIHBsYW5uZXIgZXJyb3IuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5v dGUgdGhhdCA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xpdGVyYWw+IGN1cnJlbnRseSBsYWNr cyBhIHNvcGhpc3RpY2F0ZWQKKyAgc2VjdXJpdHkgbW9kZWwuIE9ubHkgdGhlIHN1cGVydXNlciwg b3IgYSB1c2VyIHRvIHdob20gdGhlIHN1cGVydXNlciBoYXMKKyAgZ3JhbnRlZCA8bGl0ZXJhbD5F WEVDVVRFPC9saXRlcmFsPiBwZXJtaXNzaW9uIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbnMsCisg IG1heSBjcmVhdGUgYWR2aWNlIHN0YXNoZXMgb3IgYWx0ZXIgdGhlaXIgY29udGVudHMsIGJ1dCBh bnkgdXNlciBtYXkgc2V0CisgIDxsaXRlcmFsPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC9s aXRlcmFsPiBmb3IgdGhlaXIgc2Vzc2lvbiwgYW5kIHRoaXMKKyAgbWF5IHJldmVhbCB0aGUgY29u dGVudHMgb2YgYW55IGFkdmljZSBzdGFzaCB3aXRoIHRoYXQgbmFtZS4gVXNlcnMgc2hvdWxkCisg IGFzc3VtZSB0aGF0IGluZm9ybWF0aW9uIGVtYmVkZGVkIGluIHN0YXNoZWQgYWR2aWNlIHN0cmlu Z3MgbWF5IGJlY29tZSB2aXNpYmxlCisgIHRvIG5vbnByaXZpbGVnZWQgdXNlcnMuCisgPC9wYXJh PgorCisgPHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5j dGlvbnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jcmVhdGVfYWR2aWNlX3N0YXNoKHN0YXNoX25h bWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAg IDxwcmltYXJ5PnBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2g8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBD cmVhdGVzIGEgbmV3LCBlbXB0eSBhZHZpY2Ugc3Rhc2ggd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZh cmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2Ryb3BfYWR2aWNlX3N0 YXNoKHN0YXNoX25hbWUgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2Ryb3BfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAg ICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJh PgorICAgICAgRHJvcHMgdGhlIG5hbWVkIGFkdmljZSBzdGFzaCBhbmQgYWxsIG9mIGl0cyBlbnRy aWVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfc2V0X3N0 YXNoZWRfYWR2aWNlKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlfaWQgYmlnaW50LAorICAgICAgIGFk dmljZV9zdHJpbmcgdGV4dCkgcmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVy bT4KKyAgICAgIDxwcmltYXJ5PnBnX3NldF9zdGFzaGVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAg PC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4K KyAgICAgIFN0b3JlcyBhbiBhZHZpY2Ugc3RyaW5nIGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2gs IGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGdpdmVuIHF1ZXJ5IGlkZW50aWZpZXIuIElmIGFu IGVudHJ5IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIKKyAgICAgIGFscmVhZHkgZXhpc3RzIGlu IHRoZSBzdGFzaCwgaXQgaXMgcmVwbGFjZWQuIElmCisgICAgICA8cGFyYW1ldGVyPmFkdmljZV9z dHJpbmc8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sCisgICAgICBhbnkg ZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgcXVlcnkgaWRlbnRpZmllciBpcyByZW1vdmVkLgorICAg ICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFy bGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2FkdmljZV9zdGFz aGVzKCkgcmV0dXJucyBzZXRvZiAoc3Rhc2hfbmFtZSB0ZXh0LAorICAgICAgIG51bV9lbnRyaWVz IGJpZ2ludCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdf Z2V0X2FkdmljZV9zdGFzaGVzPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBvbmUgcm93 IGZvciBlYWNoIGFkdmljZSBzdGFzaCwgc2hvd2luZyB0aGUgc3Rhc2ggbmFtZSBhbmQKKyAgICAg IHRoZSBudW1iZXIgb2YgZW50cmllcyBpdCBjb250YWlucy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8 dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoc3Rhc2hf bmFtZSB0ZXh0KSByZXR1cm5zIHNldG9mCisgICAgICAgKHN0YXNoX25hbWUgdGV4dCwgcXVlcnlf aWQgYmlnaW50LCBhZHZpY2Vfc3RyaW5nIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVy bT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHM8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICBSZXR1cm5zIG9uZSByb3cgZm9yIGVhY2ggZW50cnkgaW4gdGhlIG5hbWVk IGFkdmljZSBzdGFzaC4gSWYKKyAgICAgIDxwYXJhbWV0ZXI+c3Rhc2hfbmFtZTwvcGFyYW1ldGVy PiBpcyA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiwgcmV0dXJucworICAgICAgZW50cmllcyBmcm9t IGFsbCBzdGFzaGVzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i cGdzdGFzaGFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFy YW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zh cm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+cGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWU8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgU3BlY2lmaWVzIHRoZSBu YW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8gY29uc3VsdCBkdXJpbmcgcXVlcnkKKyAgICAgIHBs YW5uaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBkaXNh YmxlcworICAgICAgdGhpcyBtb2R1bGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyA8L3NlY3QyPgorCisg PHNlY3QyIGlkPSJwZ3N0YXNoYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3RpdGxl PgorCisgIDxwYXJhPgorICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwub3Jn PC9lbWFpbD4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IGY4MzYyYTc4MTkxLi4zMDg4MmExOTkxYyAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTQwMjcsNiArNDAyNywxMiBAQCBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBl CiBwZ3BhX3Ryb3ZlX3Jlc3VsdAogcGdwYV90cm92ZV9zbGljZQogcGdwYV91bnJvbGxlZF9qb2lu CitwZ3NhX2VudHJ5CitwZ3NhX2VudHJ5X2tleQorcGdzYV9zaGFyZWRfc3RhdGUKK3Bnc2Ffc3Rh c2gKK3Bnc2Ffc3Rhc2hfY291bnQKK3Bnc2Ffc3Rhc2hfbmFtZQogcGdzb2NrZXQKIHBnc3FsX3Ro aW5nX3QKIHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --0000000000008c777d064cd6e70d--