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 1wV2dr-001dfk-2O for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 07:37:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wV2cr-005PgO-1A for pgsql-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 07:36:25 +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 1wV2cq-005PgF-1w for pgsql-hackers@lists.postgresql.org; Thu, 04 Jun 2026 07:36:25 +0000 Received: from mail-dl1-x122b.google.com ([2607:f8b0:4864:20::122b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wV2cn-000000012Mv-28kU for pgsql-hackers@postgresql.org; Thu, 04 Jun 2026 07:36:23 +0000 Received: by mail-dl1-x122b.google.com with SMTP id a92af1059eb24-1370417c01cso448994c88.1 for ; Thu, 04 Jun 2026 00:36:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780558580; cv=none; d=google.com; s=arc-20240605; b=Zd2Db7BjyAE3yiJL+FLUfJLlQhTOU8+EnRXOkhijlcusxb3eXsN3XlufE+8/BuuWYU UOggSmziXqP93FTczSKNsX6NGTOrcuyLPlTBJMoiY5uqk0x2f0d2sRiHg1gIcWiUc/my KiC+tSY+qzL3o3g9repF0ZVVoIvV1L0giZdTKsEvbg+GLDxkPjgtqBIOhui1fmaTgBdl /0k/YG5dtYK4rHbh0N0mub4ecclsn3c9+MmW2pVfZlVMUu6yvy3IGNRDno8pAfFcCxA4 Q7mkv1P+acFaXk8RveVhNjYYVm43YVwvFNmtGotg9lRQ91DkRjM4acmHm/vKvjCA8HXT EMXQ== 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=ayAt8X1r5ox7SckZ0Lg6q8BQ1Nic1Fq2U8ob44sAqJw=; fh=2h9oynQ7xGNpOLEbChAY/vs2MjSA/AN8CA5isN2m804=; b=F8izikLzYQH2C/9Un2Wxy+zn8ajag4faZ7y5ongKL65AIA7JLtYviJHufHI/82aYZd GBkrv3z4EzJFnftMBxeeHBtGq10L+wXHDj1E2vPwuLKiUDOr40gneGieun5x3tTkvKsn 4hdjLvzTlIh3WwR7mB5pE9acH8rJyWUWvQo3zpRg4kLmcaiBvolvd+FGISYyKbsGA3Um w92btstx1TndW3MCGq8mE6m+mg/8JCp/QCtqcIYw02ONwf4u4rJihwlo+SYkWEjIscDQ KGkCWrfv0bGYbUKFgJC7hggNUs71Seg1aPmXD9y9EqI9we77xXhBYKeg76BFaFhyjYHB qkgA==; darn=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=20251104; t=1780558580; x=1781163380; darn=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=ayAt8X1r5ox7SckZ0Lg6q8BQ1Nic1Fq2U8ob44sAqJw=; b=eNk17ukHPoCY0CNvvaVhKjQAR/y4Fqdoav7WwDDZZxr8h0toG799tMsYAITyEgge/Q 2Q5Y78loKNWpF/U/TzW66cfAVaPPi9SrqctnNWKcqXx+8U5oSNCRkMiSUqFjnCMUMUDw bvJWB4lxJXmZ5bmTCx4Nm/QKqZmkPv85ykCBvxqNPWsP8cmfKURFgceQ/TSx7AOwuUZl vT18NPTd0HGYAKlw0Fh3CiTFr0PBI54mFiheSwbEe5URiVuC0LykBZRjUXO77hjP7wFh oXKifKaBrw2jOPCalbC+gBbDrXA6DgTWdN3+TOgDJMWfvrR+tGx4QQM/IY/sp9nM1tXq NKJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780558580; x=1781163380; 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=ayAt8X1r5ox7SckZ0Lg6q8BQ1Nic1Fq2U8ob44sAqJw=; b=RR1HY29h2N1tfa4fyxuU1ZV9zr9P4gAISFh4OjHwq/sdyapFoMzt/XvpKejpc9YWtV Fn2P5woPu33jRwQZXQhLGvuR8ob4Qt3zs4ecK18d32PpkmP5mO3TJW8rO1p4eggCdf45 T71+jqsIvMcfVlEFK5nl2F8i08lHUIE/u0ah19MhTY1WHtOszi4tubJc+Ufo72Zpho5g Vh79fOv80sZfLIexIe+LHdOiYos3MzJSLdL3NZxWAadd57/2w6yGzvHMpDAUaVudCw3q ghzH24GPIhxgdVtCb3XFXTYBNz1FpUul2ocFatcg//owOeLHoZRh54aWrQ1pCGyD5jJT lJOg== X-Forwarded-Encrypted: i=1; AFNElJ9CYsN0Ji8QXoT2XM/nxu6bYRR+vVPa0/rthJVIZxy9suzo5v87NacKogCYVI+Ha9UsPi/OL7MdIFELElQV@postgresql.org X-Gm-Message-State: AOJu0YxhwNwDIwfA0Ki+NWysc5ykDIF+udZM5QbUnARw36dQaN+TNT3d HSo/j2IaEFhAjONmHHetK0robKr3Wvq/NaKsgCEJzdy7f93K04Nr6tqCSNiVoWlV6D4t6vxlQtJ L6fht5fWrAH7oSa1ORrpaUMdYhVpVNIY= X-Gm-Gg: Acq92OHr8Zzs2018vUPdKzp0iI+Vz+0CNQpAMukV8C+KUwjL1q/05Kon7xNj4LJyFS8 +X824RVtije465ltoMvG+RwE/4WUq4fA0RDWeZikgo4MGjimsAVfVH+k/mpfmgZkEtdgkbb0JM4 idbYmAZ1N/qfQ9KdRk6kLJKl6FQzBDk/ay+4D5IDIAcAqiV2wyvgnMTtxO8T3rln9sxIZH/W3kJ jrjams43UcZVpEAtU1adPEWeXePRAg47j0csPHqyy7KrsYOcXWDIOm6Fba81PklN7emZbEGVsWL rFqOkW1fy64noF/xLTJUinX/UxV2Ww== X-Received: by 2002:a05:7022:f8b:b0:135:dd7c:7 with SMTP id a92af1059eb24-137f6c165f2mr2797291c88.38.1780558580201; Thu, 04 Jun 2026 00:36:20 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Ashutosh Sharma Date: Thu, 4 Jun 2026 13:06:09 +0530 X-Gm-Features: AVHnY4LPdvHKzfgtt2wNUNz1StVoOvAEujB3TA680hT17otjf-ECfQWiiJunrxQ Message-ID: Subject: Re: synchronized_standby_slots behavior inconsistent with quorum-based synchronous replication To: shveta malik Cc: Amit Kapila , =?UTF-8?B?SG91LCBaaGlqaWUv5L6vIOW/l+adsA==?= , Ajin Cherian , SATYANARAYANA NARLAPURAM , PostgreSQL-development , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ad42c10653689944" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ad42c10653689944 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Thu, Jun 4, 2026 at 9:14=E2=80=AFAM shveta malik wrote: > > On Wed, Jun 3, 2026 at 4:30=E2=80=AFPM Ashutosh Sharma wrote: > > > > Hi Shveta, > > > > On Fri, May 15, 2026 at 9:28=E2=80=AFAM shveta malik wrote: > > > > > > > > > Ashutosh, while testing further, I noticed that > > > 'synchronized_standby_slots' does not filter duplicate entries. As an > > > example, if user ends up giving one entry twice in priority > > > configuration, then we will end up waiting on one slot twice rather > > > than waiting on 2 different slots. > > > > > > Example: > > > alter system set synchronized_standby_slots =3D 'FIRST 2 (standby_1, > > > standby_1, standby_2, standby_3)'; > > > select pg_reload_conf(); > > > insert into tab1 values (10), (20), (30); > > > select pg_logical_slot_get_binary_changes('sub1', NULL, NULL, > > > 'proto_version', '4', 'publication_names', 'pub1'); > > > > > > The last statement works even though standby_2 and standby_3 do not > > > exist. It consumes standby_1 twice and thinks that the required numbe= r > > > of slots has caught-up. > > > > > > OTOH, if we use the same configuration for > > > 'synchronous_standby_names', it correctly waits for standby_2 and doe= s > > > not count on standby_1 twice. > > > > > > alter system set synchronous_standby_names =3D 'FIRST 2 (standby_1, > > > standby_1, standby_2, standby_3)'; > > > insert into tab1 values (10), (20), (30); ----> This will wait on st= andby_2 > > > > > > This is perhaps because 'synchronous_standby_names ' waits on active > > > WAL senders rather than repeated strings in configuration. But our > > > code changes wait on the names present in 'synchronized_standby_slots= ' > > > without filtering out duplicates. > > > > > > > May I know what your expectation is here? Would you like the check > > hook for synchronized_standby_slots to automatically resolve > > duplicates into a unique set of values, or should it detect duplicate > > entries and raise an error so that the user can correct the > > configuration? > > > > If we automatically resolve duplicates, the user would still see the > > GUC configured exactly as they specified, even though it would not > > function the same way internally. For example, if a user sets: > > > > FIRST 2 (s1, s1, s1, s2) > > > > it might internally be resolved to: > > > > FIRST 2 (s1, s2) > > > > However, when the user runs SHOW, it would still display the original > > configuration. This could give the user an incorrect impression of how > > the setting is actually being interpreted. Because of this, I feel we > > should treat duplicate entries as an invalid configuration and raise > > an error. > > > > As far as synchronous_standby_names is concerned, I can see that > > configurations such as: > > > > FIRST 2 (s1, s1, s1, s1) > > > > are currently accepted, which I don't think is correct either and > > should have been rejected, possibly resulted in the server startup > > failure. > > > > My preference, and original intent, was to accept duplicate entries > and skip them internally. Doc can be updated to say 'duplicate entries > are skipped'. A server startup failure due to duplicate entries in a > GUC does not seem right to me. If the alter-system command fails due > to duplicate entries, that is still fine, but a startup failure seems > excessive. But let's see what others have to say on this. > Okay, the attached patch adds the capability to automatically remove duplicate entries from the synchronized_standby_slots list. In N of M mode, if N > M after removing duplicate entries, an error is raised. This behavior has been documented, and test cases verifying the change have been added. A few other minor comments from [1] have also been addressed. Please have a look at the attached patches with these changes. [1] - https://www.postgresql.org/message-id/CAJpy0uCKGCkfCXCd%3DtsDH5e85x15= 5LsdbZW46WpWfsZJUe82bw%40mail.gmail.com -- With Regards, Ashutosh Sharma. --000000000000ad42c10653689944 Content-Type: application/octet-stream; name="0001-Refactor-syncrep-parsing-to-represent-bare-standby-l.patch" Content-Disposition: attachment; filename="0001-Refactor-syncrep-parsing-to-represent-bare-standby-l.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpz6kkwg0 RnJvbSAzZGRlMTM2MTdkZGRhNDE1NjAwMWJlNzU5ODRkZjNkZjUzMThjMzQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBTaGFybWEgPGFzaHUuY29lazg4QGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxMyBNYXkgMjAyNiAwNjo1OTo1OCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg MS8zXSBSZWZhY3RvciBzeW5jcmVwIHBhcnNpbmcgdG8gcmVwcmVzZW50IGJhcmUgc3RhbmRieSBs aXN0cwogZXhwbGljaXRseQoKVGhlIHN5bmNyZXAgcGFyc2VyIGN1cnJlbnRseSByZWR1Y2VzIGEg c2ltcGxlIGxpc3QgZm9ybSB0byBGSVJTVCAxCihTWU5DX1JFUF9QUklPUklUWSkuIFRoYXQgaXMg YWNjZXB0YWJsZSBmb3Igc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcywKYnV0IGl0IGxvc2VzIGlu Zm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgRklSU1Qgd2FzIGV4cGxpY2l0bHkgd3JpdHRlbi4KCklu dHJvZHVjZSBTWU5DX1JFUF9ERUZBVUxUIHRvIHJlcHJlc2VudCB0aGUgYmFyZSBsaXN0IGZvcm0g cGFyc2VkCmZyb20gc3RhbmRieV9saXN0LiBUaGlzIGFsbG93cyBjYWxsZXJzIHRvIGRpc3Rpbmd1 aXNoOgoKLSBleHBsaWNpdCBwcmlvcml0eSBzeW50YXggKEZJUlNUIE4gKC4uLikgb3IgTiAoLi4u KSkKLSBxdW9ydW0gc3ludGF4IChBTlkgTiAoLi4uKSkKLSBzaW1wbGUgbGlzdCBzeW50YXggd2l0 aG91dCBGSVJTVC9BTlkKCldpdGggdGhpcyBjaGFuZ2U6CgotIHN5bmNyZXAgZ3JhbW1hciBlbWl0 cyBTWU5DX1JFUF9ERUZBVUxUIGZvciBiYXJlIHN0YW5kYnkgbGlzdHMKLSBjaGVja19zeW5jaHJv bm91c19zdGFuZGJ5X25hbWVzKCkgbWFwcyBTWU5DX1JFUF9ERUZBVUxUIHRvCiAgU1lOQ19SRVBf UFJJT1JJVFksIHByZXNlcnZpbmcgZXhpc3Rpbmcgc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcwog IGJlaGF2aW9yCgpUaGlzIGlzIGEgcHJlcGFyYXRvcnkgcGF0Y2ggZm9yIGZ1dHVyZSBzeW5jaHJv bml6ZWRfc3RhbmRieV9zbG90cwpjaGFuZ2VzLCB3aGVyZSBjYWxsZXJzIGNhbiBkaXJlY3RseSBp bnRlcnByZXQgU1lOQ19SRVBfREVGQVVMVCBhcwpwbGFpbi1saXN0IHNlbWFudGljcywgd2hpbGUg a2VlcGluZyBleGlzdGluZyBzeW5jaHJvbm91c19zdGFuZGJ5X25hbWVzCnNlbWFudGljcyBpbnRh Y3QuCgpQZXIgc3VnZ2VzdGlvbiBmcm9tIFpoaWppZSBIb3UgPGhvdXpqLmZuc3RAZnVqaXRzdS5j b20+Ci0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc3luY3JlcC5jICAgICAgfCA0ICsrKysK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXBfZ3JhbS55IHwgMiArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc3luY3JlcC5oICAgICAgfCAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNiBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vc3luY3JlcC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc3luY3JlcC5jCmlu ZGV4IGUwZTMwNTc5YzU5Li5hZThlY2ZhMDcxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vc3luY3JlcC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAu YwpAQCAtMTEwMCw2ICsxMTAwLDEwIEBAIGNoZWNrX3N5bmNocm9ub3VzX3N0YW5kYnlfbmFtZXMo Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCQkJcmV0dXJu IGZhbHNlOwogCQl9CiAKKwkJLyogRGVmYXVsdCB0byBGSVJTVCAxIChuYW1lIC4uLikgcHJpb3Jp dHkgbWV0aG9kIGlmIG5vdCBzcGVjaWZpZWQgKi8KKwkJaWYgKHN5bmNyZXBfcGFyc2VfcmVzdWx0 LT5zeW5jcmVwX21ldGhvZCA9PSBTWU5DX1JFUF9ERUZBVUxUKQorCQkJc3luY3JlcF9wYXJzZV9y ZXN1bHQtPnN5bmNyZXBfbWV0aG9kID0gU1lOQ19SRVBfUFJJT1JJVFk7CisKIAkJLyogR1VDIGV4 dHJhIHZhbHVlIG11c3QgYmUgZ3VjX21hbGxvYydkLCBub3QgcGFsbG9jJ2QgKi8KIAkJcGNvbmYg PSAoU3luY1JlcENvbmZpZ0RhdGEgKikKIAkJCWd1Y19tYWxsb2MoTE9HLCBzeW5jcmVwX3BhcnNl X3Jlc3VsdC0+Y29uZmlnX3NpemUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vc3luY3JlcF9ncmFtLnkgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zeW5jcmVwX2dyYW0u eQppbmRleCAxYjlkN2IyZWRjNC4uZjE1NTBlMTA5ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3N5bmNyZXBfZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3N5bmNyZXBfZ3JhbS55CkBAIC02NSw3ICs2NSw3IEBAIHJlc3VsdDoKIAk7CiAKIHN0YW5kYnlf Y29uZmlnOgotCQlzdGFuZGJ5X2xpc3QJCQkJeyAkJCA9IGNyZWF0ZV9zeW5jcmVwX2NvbmZpZygi MSIsICQxLCBTWU5DX1JFUF9QUklPUklUWSk7IH0KKwkJc3RhbmRieV9saXN0CQkJCXsgJCQgPSBj cmVhdGVfc3luY3JlcF9jb25maWcoIjEiLCAkMSwgU1lOQ19SRVBfREVGQVVMVCk7IH0KIAkJfCBO VU0gJygnIHN0YW5kYnlfbGlzdCAnKScJCXsgJCQgPSBjcmVhdGVfc3luY3JlcF9jb25maWcoJDEs ICQzLCBTWU5DX1JFUF9QUklPUklUWSk7IH0KIAkJfCBBTlkgTlVNICcoJyBzdGFuZGJ5X2xpc3Qg JyknCQl7ICQkID0gY3JlYXRlX3N5bmNyZXBfY29uZmlnKCQyLCAkNCwgU1lOQ19SRVBfUVVPUlVN KTsgfQogCQl8IEZJUlNUIE5VTSAnKCcgc3RhbmRieV9saXN0ICcpJwkJeyAkJCA9IGNyZWF0ZV9z eW5jcmVwX2NvbmZpZygkMiwgJDQsIFNZTkNfUkVQX1BSSU9SSVRZKTsgfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc3luY3JlcC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vc3luY3JlcC5oCmluZGV4IGI0MmI1ODYyYTcwLi4xMzBjN2Y2ZjI0MiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc3luY3JlcC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3N5bmNyZXAuaApAQCAtMzQsNiArMzQsNyBAQAogLyogc3luY3JlcF9tZXRob2Qgb2Yg U3luY1JlcENvbmZpZ0RhdGEgKi8KICNkZWZpbmUgU1lOQ19SRVBfUFJJT1JJVFkJCTAKICNkZWZp bmUgU1lOQ19SRVBfUVVPUlVNCQkxCisjZGVmaW5lIFNZTkNfUkVQX0RFRkFVTFQJMgogCiAvKgog ICogU3luY1JlcEdldENhbmRpZGF0ZVN0YW5kYnlzIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlc2Ug c3RydWN0cywKLS0gCjIuNDMuMAoK --000000000000ad42c10653689944 Content-Type: application/octet-stream; name="0003-Add-FIRST-N-and-N-.-priority-syntax-to-synchronized_.patch" Content-Disposition: attachment; filename="0003-Add-FIRST-N-and-N-.-priority-syntax-to-synchronized_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpz6kkwy2 RnJvbSAwZTllN2MwOGRhMDY0NGM3NDVmZTMxMzQ5OGQ1OTgyM2M1ZjA0YzExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBTaGFybWEgPGFzaHUuY29lazg4QGdtYWlsLmNv bT4KRGF0ZTogVGh1LCA0IEp1biAyMDI2IDA3OjE2OjAyICswMDAwClN1YmplY3Q6IFtQQVRDSCAz LzNdIEFkZCBGSVJTVCBOIGFuZCBOICguLi4pIHByaW9yaXR5IHN5bnRheCB0bwogc3luY2hyb25p emVkX3N0YW5kYnlfc2xvdHMKCkV4dGVuZCBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyB0byBz dXBwb3J0IGV4cGxpY2l0IHByaW9yaXR5CmZvcm1zIGFsaWduZWQgd2l0aCBzeW5jaHJvbm91c19z dGFuZGJ5X25hbWVzLgoKLSBGSVJTVCBOIChzbG90MSwgc2xvdDIsIC4uLikKLSBOIChzbG90MSwg c2xvdDIsIC4uLikgYXMgc2hvcnRoYW5kIGZvciBGSVJTVCBOCgpJbXBsZW1lbnRhdGlvbiBkZXRh aWxzOgoKLSBVc2UgdGhlIFNZTkNfUkVQX0RFRkFVTFQgcGFyc2VyIGRpc3RpbmN0aW9uIGZyb20g dGhlIGVhcmxpZXIKICByZWZhY3RvciBzbyBwbGFpbi1saXN0IHN5bnRheCByZW1haW5zIHNlcGFy YXRlIGZyb20gcHJpb3JpdHkKICBzeW50YXguCi0gRXh0ZW5kIFN0YW5kYnlTbG90c0hhdmVDYXVn aHR1cCgpIHByaW9yaXR5IGhhbmRsaW5nLgotIFNlbGVjdCBzbG90cyBpbiBsaXN0IG9yZGVyLgot IFNraXAgbWlzc2luZywgbG9naWNhbCwgaW52YWxpZGF0ZWQsIGFuZCBpbmFjdGl2ZSBsYWdnaW5n IHNsb3RzLgotIFdhaXQgZm9yIGFjdGl2ZSBsYWdnaW5nIGhpZ2hlci1wcmlvcml0eSBzbG90cy4K LSBDbGFyaWZ5IGR1cGxpY2F0ZSBoYW5kbGluZyBmb3IgcHJpb3JpdHkgc3ludGF4IGluIHRoZQog IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIGRvY3VtZW50YXRpb24uCi0gU2ltcGxpZnkgY2F1 Z2h0LXVwIGNvbW1lbnRzIGFuZCBjbGFyaWZ5IHN0YW5kYnkgY29uZmlybWF0aW9uIHdhaXQKICBj b21tZW50cyB0byBtYXRjaCB0aGUgZmluYWwgY29udHJvbCBmbG93LgoKVGVzdHMgYW5kIGRvY3M6 CgotIEFkZCBjb3ZlcmFnZSBmb3IgRklSU1QgYmVoYXZpb3IgYW5kIHNob3J0aGFuZCBOICguLi4p IGJlaGF2aW9yLgotIEFkZCBwbGFpbi1saXN0IGRpc2FtYmlndWF0aW9uIHdpdGggZmlyc3QtcHJl Zml4ZWQgc2xvdCBuYW1lcy4KLSBBZGQgRklSU1QgZHVwbGljYXRlLWVudHJ5IHJlY292ZXJ5IGNv dmVyYWdlIHRvIHNob3cgZHVwbGljYXRlcyBkbwogIG5vdCBjcmVhdGUgZXh0cmEgcHJpb3JpdHkg cG9zaXRpb25zLgotIFVwZGF0ZSBkb2NzIGZvciBGSVJTVCBhbmQgc2hvcnRoYW5kIHByaW9yaXR5 IHN5bnRheCBzZW1hbnRpY3MuCi0gQ2xhcmlmeSB0aGF0IGR1cGxpY2F0ZSBzbG90IG5hbWVzIGFy ZSBpZ25vcmVkIGluIHByaW9yaXR5LWJhc2VkCiAgZm9ybXMgYW5kIHByZXNlcnZlIGZpcnN0LW9j Y3VycmVuY2Ugb3JkZXIuCgpBdXRob3I6IFNhdHlhIE5hcmxhcHVyYW0gPHNhdHlhbmFybGFwdXJh bUBnbWFpbC5jb20+CkF1dGhvcjogQXNodXRvc2ggU2hhcm1hIDxhc2h1LmNvZWs4OEBnbWFpbC5j b20+ClJldmlld2VkLWJ5OiBTaHZldGEgTWFsaWsgPHNodmV0YS5tYWxpa0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpSZXZpZXdlZC1ieTog SG91LCBaaGlqaWUgPGhvdXpqLmZuc3RAZnVqaXRzdS5jb20+ClJldmlld2VkLWJ5OiBEaWxpcCBL dW1hciA8ZGlsaXBiYWxhdXRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogU3VyeWEgUG9vbmRsYSA8 c3VyeWFwb29uZGxhNEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBKYXBpbiBMaSA8amFwaW5saUBo b3RtYWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgfCAgMzcgKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAg ICAgICAgfCAgNDIgKy0tCiAuLi4vMDUzX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX3F1b3J1 bS5wbCAgfCAyNjggKysrKysrKysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDMwNiBpbnNl cnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29u ZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggYTAzYWU5NGExMmYuLjdk OGY0Yjc1NzE3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01MTk0LDYgKzUxOTQsNyBAQCBBTlkgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFi bGUgY2xhc3M9IgogICAgICAgICBzZW5kZXIgcHJvY2Vzc2VzIG11c3Qgd2FpdCBvbiBiZWZvcmUg ZGVsaXZlcmluZyBkZWNvZGVkIGNoYW5nZXMuIFRoaXMKICAgICAgICAgcGFyYW1ldGVyIHVzZXMg dGhlIGZvbGxvd2luZyBzeW50YXg6CiA8c3lub3BzaXM+CisgIFtGSVJTVF0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApCiBBTlkg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNlYWJsZT4gWywg Li4uXSApCiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNl YWJsZT4gWywgLi4uXQogPC9zeW5vcHNpcz4KQEAgLTUyMDUsMTYgKzUyMDYsMzUgQEAgQU5ZIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJl cGxhY2VhYmxlIGNsYXNzPSIKICAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi Pm51bV9zeW5jPC9yZXBsYWNlYWJsZT4KICAgICAgICAgbXVzdCBiZSBhbiBpbnRlZ2VyIHZhbHVl IGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBtdXN0IG5vdCBleGNlZWQgdGhlCiAgICAgICAgIG51bWJl ciBvZiBsaXN0ZWQgc2xvdHMuCi0gICAgICAgIE90aGVyIGZvcm1zIHN1cHBvcnRlZCBieQotICAg ICAgICA8eHJlZiBsaW5rZW5kPSJndWMtc3luY2hyb25vdXMtc3RhbmRieS1uYW1lcyIvPiwgc3Vj aCBhcyBwcmlvcml0eQotICAgICAgICBzeW50YXgsIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgICAg ICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIGtleXdvcmQgPGxpdGVyYWw+ RklSU1Q8L2xpdGVyYWw+LCBjb3VwbGVkIHdpdGgKKyAgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+LCBzcGVjaWZpZXMKKyAgICAgICAg IHByaW9yaXR5LWJhc2VkIHNlbWFudGljcy4gTG9naWNhbCBkZWNvZGluZyB3aWxsIHdhaXQgZm9y IHRoZSBmaXJzdAorICAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9z eW5jPC9yZXBsYWNlYWJsZT4gYXZhaWxhYmxlCisgICAgICAgICBwaHlzaWNhbCBzbG90cyBpbiBw cmlvcml0eSBvcmRlciAodGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZSBsaXN0KS4KKyAgICAg ICAgIE1pc3NpbmcsIGxvZ2ljYWwsIG9yIGludmFsaWRhdGVkIHNsb3RzIGFyZSBza2lwcGVkLiBJ bmFjdGl2ZSBzbG90cyBhcmUKKyAgICAgICAgIHNraXBwZWQgb25seSB3aGlsZSB0aGV5IGFyZSBs YWdnaW5nLiBIb3dldmVyLCBpZiBhIHNsb3QgZXhpc3RzIGFuZCBpcworICAgICAgICAgdmFsaWQg YW5kIGFjdGl2ZSBidXQgaGFzIG5vdCB5ZXQgY2F1Z2h0IHVwLCB0aGUgc3lzdGVtIHdpbGwgd2Fp dCBmb3IgaXQKKyAgICAgICAgIHJhdGhlciB0aGFuIHNraXBwaW5nIHRvIGxvd2VyLXByaW9yaXR5 IHNsb3RzLiBJZiwgYWZ0ZXIgc2tpcHBpbmcKKyAgICAgICAgIHVudXNhYmxlIHNsb3RzLCBmZXdl ciB0aGFuCisgICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiB1c2FibGUgc2xvdHMKKyAgICAgICAgIHJlbWFpbiwgbG9naWNhbCBkZWNv ZGluZyB3YWl0cyB1bnRpbCBlbm91Z2ggc2xvdHMgYmVjb21lIHVzYWJsZSBhbmQKKyAgICAgICAg IGNhdWdodCB1cCwgb3IgdW50aWwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZC4gVGhlIGtl eXdvcmQKKyAgICAgICAgIDxsaXRlcmFsPkZJUlNUPC9saXRlcmFsPiBpcyBvcHRpb25hbCBpbiB0 aGlzIGZvcm0sIHNvCisgICAgICAgICA8bGl0ZXJhbD4yIChzbG90MSwgc2xvdDIsIHNsb3QzKTwv bGl0ZXJhbD4gYW5kCisgICAgICAgICA8bGl0ZXJhbD5GSVJTVCAyIChzbG90MSwgc2xvdDIsIHNs b3QzKTwvbGl0ZXJhbD4gYXJlIGVxdWl2YWxlbnQuCiAgICAgICAgPC9wYXJhPgogICAgICAgICA8 cGFyYT4KICAgICAgICAgIElmIHRoZSBzYW1lIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3QgbmFt ZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLAogICAgICAgICAgZHVwbGljYXRlIGVudHJpZXMgYXJl IGlnbm9yZWQgYW5kIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2UgaXMgdXNlZC4KICAgICAgICAg IFRoZSBzZW1hbnRpY3Mgb2YgPHZhcm5hbWU+c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHM8L3Zh cm5hbWU+IGFyZQogICAgICAgICAgdGhlcmVmb3JlIGJhc2VkIG9uIHRoZSB1bmlxdWUgc2V0IG9m IGxpc3RlZCBzbG90IG5hbWVzLCBwcmVzZXJ2aW5nIHRoZQotICAgICAgICAgb3JpZ2luYWwgb3Jk ZXIgb2YgZmlyc3Qgb2NjdXJyZW5jZS4gSW4gcGFydGljdWxhciwKKyAgICAgICAgIG9yaWdpbmFs IG9yZGVyIG9mIGZpcnN0IG9jY3VycmVuY2UuIFRoaXMgbWVhbnMgdGhhdCwgaW4KKyAgICAgICAg IHByaW9yaXR5LWJhc2VkIGZvcm1zLCBkdXBsaWNhdGVzIGRvIG5vdCBjcmVhdGUgYWRkaXRpb25h bCBwcmlvcml0eQorICAgICAgICAgcG9zaXRpb25zOiBmb3IgZXhhbXBsZSwKKyAgICAgICAgIDxs aXRlcmFsPkZJUlNUIDIgKHNsb3QxLCBzbG90MSwgc2xvdDIsIHNsb3QzKTwvbGl0ZXJhbD4gaXMg dHJlYXRlZCB0aGUKKyAgICAgICAgIHNhbWUgYXMgPGxpdGVyYWw+RklSU1QgMiAoc2xvdDEsIHNs b3QyLCBzbG90Myk8L2xpdGVyYWw+LiBJbiBwYXJ0aWN1bGFyLAogICAgICAgICAgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gbXVzdCBub3QgZXhj ZWVkCiAgICAgICAgICB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBsaXN0ZWQgc2xvdHMuCiAgICAgICAg IDwvcGFyYT4KQEAgLTUyNDgsOSArNTI2OCwxMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9Igog ICAgICAgICAoPGxpdGVyYWw+c3luY2hyb25vdXNfc3RhbmRieV9uYW1lcyA9ICdBTlkgLi4uJzwv bGl0ZXJhbD4pLCBzbyB0aGF0CiAgICAgICAgIGxvZ2ljYWwgZGVjb2RpbmcgYXZhaWxhYmlsaXR5 IG1hdGNoZXMgdGhlIGNvbW1pdCBkdXJhYmlsaXR5IGd1YXJhbnRlZS4KICAgICAgICA8L3BhcmE+ Ci0gICAgICA8cGFyYT4KLSAgICAgICA8bGl0ZXJhbD5BTlk8L2xpdGVyYWw+IGlzIGNhc2UtaW5z ZW5zaXRpdmUuCi0gICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgPGxpdGVy YWw+RklSU1Q8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5BTlk8L2xpdGVyYWw+IGFyZSBjYXNlLWlu c2Vuc2l0aXZlLgorICAgICAgICAgSWYgdGhlc2Uga2V5d29yZHMgYXJlIHVzZWQgYXMgdGhlIG5h bWUgb2YgYSByZXBsaWNhdGlvbiBzbG90LAorICAgICAgICAgdGhlIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5zbG90X25hbWU8L3JlcGxhY2VhYmxlPiBtdXN0CisgICAgICAgICBiZSBk b3VibGUtcXVvdGVkLgorICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFRo ZSB1c2Ugb2YgPHZhcm5hbWU+c3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHM8L3Zhcm5hbWU+IGd1 YXJhbnRlZXMKICAgICAgICAgdGhhdCBsb2dpY2FsIHJlcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90LmMKaW5kZXggYjg5YmVjYWY2YmEuLmZiNDVhMWNkNTgxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xv dC5jCkBAIC0zMDU0LDYgKzMwNTQsOCBAQCBDb21wYWN0U3luY1JlcENvbmZpZ01lbWJlck5hbWVz KFN5bmNSZXBDb25maWdEYXRhICpjb25maWcpCiAgKgogICogICBzbG90MSwgc2xvdDIgICAgICAg ICAgICAgICAgICAgLS0gd2FpdCBmb3IgQUxMIGxpc3RlZCBzbG90cwogICogICBBTlkgTiAoc2xv dDEsIHNsb3QyLCAuLi4pICAgICAgLS0gd2FpdCBmb3IgYW55IE4tb2YtTSAocXVvcnVtKQorICog ICBGSVJTVCBOIChzbG90MSwgc2xvdDIsIC4uLikgICAgLS0gd2FpdCBmb3IgZmlyc3QgTiBpbiBw cmlvcml0eSBvcmRlcgorICogICBOIChzbG90MSwgc2xvdDIsIC4uLikgICAgICAgICAgLS0gc2hv cnRoYW5kIGZvciBGSVJTVCBOCiAgKgogICogTm90ZTogU2ltcGxlIGxpc3Qgc3ludGF4IGlzIGlu dGVycHJldGVkIGFzICJ3YWl0IGZvciBBTEwiIGZvciB0aGlzIEdVQywKICAqIHVubGlrZSBzeW5j aHJvbm91c19zdGFuZGJ5X25hbWVzIHdoZXJlIGl0IG1lYW5zICJGSVJTVCAxIi4KQEAgLTMwOTQs MTQgKzMwOTYsNiBAQCBjaGVja19zeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyhjaGFyICoqbmV3 dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KIAotCQlpZiAoc3luY3JlcF9wYXJzZV9yZXN1bHQtPnN5bmNyZXBfbWV0aG9kID09IFNZTkNf UkVQX1BSSU9SSVRZKQotCQl7Ci0JCQlHVUNfY2hlY2tfZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKTsKLQkJCUdVQ19jaGVja19lcnJtc2coInByaW9yaXR5IHN5bnRheCBp cyBub3Qgc3VwcG9ydGVkIGZvciBwYXJhbWV0ZXIgXCIlc1wiIiwKLQkJCQkJCQkgInN5bmNocm9u aXplZF9zdGFuZGJ5X3Nsb3RzIik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQogCQlpZiAoc3lu Y3JlcF9wYXJzZV9yZXN1bHQtPm51bV9zeW5jIDw9IDApCiAJCXsKIAkJCUdVQ19jaGVja19lcnJt c2coIm51bWJlciBvZiBzeW5jaHJvbml6ZWQgc3RhbmRieSBzbG90cyAoJWQpIG11c3QgYmUgZ3Jl YXRlciB0aGFuIHplcm8iLApAQCAtMzMxOSw2ICszMzEzLDEyIEBAIFJlcG9ydFVuYXZhaWxhYmxl U3luY1N0YW5kYnlTbG90cyhTeW5jU3RhbmRieVNsb3RzU3RhdGVJbmZvICpzbG90X3N0YXRlcywK ICAqICAgU2ltcGxlIGxpc3QgKGUuZy4sICJzbG90MSwgc2xvdDIiKToKICAqICAgICBBTEwgc2xv dHMgbXVzdCBoYXZlIGNhdWdodCB1cC4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UuCiAgKgorICog ICBGSVJTVCBOIChlLmcuLCAiRklSU1QgMiAoc2xvdDEsIHNsb3QyLCBzbG90MykiKToKKyAqICAg ICBXYWl0IGZvciB0aGUgZmlyc3QgTiBlbGlnaWJsZSBzbG90cyBpbiBwcmlvcml0eSBvcmRlci4g U2tpcHMgbWlzc2luZywKKyAqICAgICBpbnZhbGlkLCBsb2dpY2FsLCBhbmQgaW5hY3RpdmUtbGFn Z2luZyBzbG90cyB0byBmaW5kIE4gZWxpZ2libGUgc2xvdHMuCisgKiAgICAgSWYgYW4gYWN0aXZl IHNsb3QgaXMgbGFnZ2luZywgd2FpdHMgZm9yIGl0IChkb2VzIG5vdCBza2lwIHRvIGxvd2VyCisg KiAgICAgcHJpb3JpdHkgc2xvdHMpLgorICoKICAqICAgQU5ZIE4gKGUuZy4sICJBTlkgMiAoc2xv dDEsIHNsb3QyLCBzbG90MykiKToKICAqICAgICBXYWl0IGZvciBhbnkgTiBlbGlnaWJsZSBzbG90 cy4gU2tpcHMgbWlzc2luZywgaW52YWxpZCwgbG9naWNhbCwgYW5kCiAgKiAgICAgbGFnZ2luZyBz bG90cyAoaW5hY3RpdmUgb3IgYWN0aXZlKSB0byBmaW5kIE4gc2xvdHMgdGhhdCBoYXZlIGNhdWdo dCB1cC4KQEAgLTMzNjksMTQgKzMzNjksMTggQEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhM b2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKQogCSAqIG9uIHRoZSBmaXJzdCBzbG90 IHRoYXQgaXMgbWlzc2luZy9pbnZhbGlkL2xvZ2ljYWwsIG9yIHRoZSBmaXJzdCBzbG90CiAJICog dGhhdCBpcyBsYWdnaW5nIChpbmFjdGl2ZSBvciBhY3RpdmUpLgogCSAqCi0JICogd2FpdF9mb3Jf YWxsID0gZmFsc2UgbWVhbnMgd2Ugc2VsZWN0IE4gZnJvbSBNIGNhbmRpZGF0ZXMgKEFOWSBOIHN5 bnRheCkuCi0JICogSW4gdGhpcyBtb2RlLCBzbG90cyBhbHJlYWR5IGNhdWdodCB1cCBhcmUgY291 bnRlZCBldmVuIGlmIGluYWN0aXZlLCBhbmQKLQkgKiBsYWdnaW5nIHNsb3RzIGFyZSBza2lwcGVk IHVudGlsIGVub3VnaCBzbG90cyBoYXZlIGNhdWdodCB1cC4KLQkgKiBEdXBsaWNhdGUgY29uZmln dXJlZCBzbG90IG5hbWVzIGRvIG5vdCBhcHBlYXIgaGVyZSBiZWNhdXNlIHRoZSBjaGVjayBob29r Ci0JICogY29tcGFjdHMgdGhlbSBvdXQgb2YgdGhlIHBhcnNlZCBjb25maWd1cmF0aW9uLgorCSAq IHdhaXRfZm9yX2FsbCA9IGZhbHNlIG1lYW5zIHdlIHNlbGVjdCBOIGZyb20gTSBjYW5kaWRhdGVz IChGSVJTVCBOIG9yCisJICogQU5ZIE4gc3ludGF4KS4gSW4gdGhpcyBtb2RlLCBzbG90cyBhbHJl YWR5IGNhdWdodCB1cCBhcmUgY291bnRlZCBldmVuIGlmCisJICogaW5hY3RpdmUuIEluIEZJUlNU IE4gbW9kZSwgd2Ugc2tpcCBtaXNzaW5nL2ludmFsaWQvbG9naWNhbCBzbG90cyBhbmQKKwkgKiBs YWdnaW5nIGluYWN0aXZlIHNsb3RzLCBidXQgd2FpdCBmb3IgYW4gYWN0aXZlIGxhZ2dpbmcgc2xv dCB3aXRoIGhpZ2hlcgorCSAqIHByaW9yaXR5LiBJbiBBTlkgTiBtb2RlLCB3ZSBza2lwIGxhZ2dp bmcgc2xvdHMgKGluYWN0aXZlIG9yIGFjdGl2ZSkgdG8KKwkgKiBmaW5kIGFueSBOIHRoYXQgaGF2 ZSBjYXVnaHQgdXAuIER1cGxpY2F0ZSBjb25maWd1cmVkIHNsb3QgbmFtZXMgZG8gbm90CisJICog YXBwZWFyIGhlcmUgYmVjYXVzZSB0aGUgY2hlY2sgaG9vayBjb21wYWN0cyB0aGVtIG91dCBvZiB0 aGUgcGFyc2VkCisJICogY29uZmlndXJhdGlvbi4KIAkgKi8KIAlyZXF1aXJlZCA9IHN5bmNocm9u aXplZF9zdGFuZGJ5X3Nsb3RzX2NvbmZpZy0+bnVtX3N5bmM7Ci0Jd2FpdF9mb3JfYWxsID0gKHJl cXVpcmVkID09IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX2NvbmZpZy0+bnNsb3RuYW1lcyk7 CisJd2FpdF9mb3JfYWxsID0KKwkJKHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX2NvbmZpZy0+ c3luY3JlcF9tZXRob2QgPT0gU1lOQ19SRVBfREVGQVVMVCk7CiAKIAkvKgogCSAqIEFsbG9jYXRl IGFycmF5IHRvIHRyYWNrIHNsb3Qgc3RhdGVzLiBTaXplIGl0IHRvIHRoZSB0b3RhbCBudW1iZXIg b2YKQEAgLTM0NTcsNiArMzQ2MSw4IEBAIFN0YW5kYnlTbG90c0hhdmVDYXVnaHR1cChYTG9nUmVj UHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIAkJCSAqIElmIGl0IGlzIGFjdGl2ZSBhbmQg bGFnZ2luZywgcmVwb3J0IGl0IGFzIGxhZ2dpbmcuCiAJCQkgKgogCQkJICogSW4gQUxMIG1vZGU6 IG11c3Qgd2FpdCBmb3IgaXQuCisJCQkgKiBJbiBGSVJTVCBOIChwcmlvcml0eSkgbW9kZTogbGFn Z2luZyBhY3RpdmUgc2xvdHMgYmxvY2ssIHdoaWxlCisJCQkgKiBpbmFjdGl2ZSBzbG90cyBjYW4g YmUgc2tpcHBlZC4KIAkJCSAqIEluIEFOWSBOIChxdW9ydW0pIG1vZGU6IHNraXAgYW5kIHVzZSBh bm90aGVyIHNsb3QuCiAJCQkgKi8KIAkJCXNsb3Rfc3RhdGVzW251bV9zbG90X3N0YXRlc10uc2xv dF9uYW1lID0gbmFtZTsKQEAgLTM0NjUsNyArMzQ3MSw5IEBAIFN0YW5kYnlTbG90c0hhdmVDYXVn aHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIAkJCXNsb3Rfc3RhdGVz W251bV9zbG90X3N0YXRlc10ucmVzdGFydF9sc24gPSByZXN0YXJ0X2xzbjsKIAkJCW51bV9zbG90 X3N0YXRlcysrOwogCi0JCQlpZiAod2FpdF9mb3JfYWxsKQorCQkJaWYgKHdhaXRfZm9yX2FsbCB8 fAorCQkJCSghaW5hY3RpdmUgJiYKKwkJCQkgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29u ZmlnLT5zeW5jcmVwX21ldGhvZCA9PSBTWU5DX1JFUF9QUklPUklUWSkpCiAJCQkJYnJlYWs7CiAJ CQlnb3RvIG5leHRfc2xvdDsKIAkJfQpAQCAtMzQ3OCw3ICszNDg2LDcgQEAgU3RhbmRieVNsb3Rz SGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKQogCiAJCWNh dWdodF91cF9zbG90X251bSsrOwogCi0JCS8qIFN0b3AgcHJvY2Vzc2luZyBpZiB0aGUgcmVxdWly ZWQgbnVtYmVyIG9mIHNsb3RzIGhhdmUgY2F1Z2h0IHVwLiAqLworCQkvKiBTdG9wIG9uY2UgdGhl IHJlcXVpcmVkIG51bWJlciBvZiBzbG90cyBoYXZlIGNhdWdodCB1cC4gKi8KIAkJaWYgKGNhdWdo dF91cF9zbG90X251bSA+PSByZXF1aXJlZCkKIAkJCWJyZWFrOwogCkBAIC0zNTQyLDcgKzM1NTAs NyBAQCBXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbikK IAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCQl9CiAKLQkJLyogRXhpdCBpZiBk b25lIHdhaXRpbmcgZm9yIGV2ZXJ5IHNsb3QuICovCisJCS8qIEV4aXQgb25jZSB0aGUgY29uZmln dXJlZCBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyByZXF1aXJlbWVudCBpcyBtZXQuICovCiAJ CWlmIChTdGFuZGJ5U2xvdHNIYXZlQ2F1Z2h0dXAod2FpdF9mb3JfbHNuLCBXQVJOSU5HKSkKIAkJ CWJyZWFrOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1M19zeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90c19xdW9ydW0ucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzA1M19zeW5j aHJvbml6ZWRfc3RhbmRieV9zbG90c19xdW9ydW0ucGwKaW5kZXggNzYwZjEwZjM4YTAuLjY3YTVi MWQ5NjU3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1M19zeW5jaHJvbml6ZWRf c3RhbmRieV9zbG90c19xdW9ydW0ucGwKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTNfc3lu Y2hyb25pemVkX3N0YW5kYnlfc2xvdHNfcXVvcnVtLnBsCkBAIC00LDYgKzQsNyBAQAogIyBUZXN0 IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIHdpdGggZGlmZmVyZW50IHN5bnRheCBtb2RlczoK ICMgLSBQbGFpbiBsaXN0IChBTEwgbW9kZSk6IHNsb3QxLCBzbG90MgogIyAtIEFOWSBOIChxdW9y dW0gbW9kZSk6IEFOWSBOIChzbG90MSwgc2xvdDIsIC4uLikKKyMgLSBGSVJTVCBOIChwcmlvcml0 eSBtb2RlKTogRklSU1QgTiAoc2xvdDEsIHNsb3QyLCAuLi4pCiAjCiAjIFNldHVwOiBhIDMtbm9k ZSBjbHVzdGVyIHdpdGggb25lIHByaW1hcnksIHR3byBwaHlzaWNhbCBzdGFuZGJ5cywgYW5kIGEK ICMgbG9naWNhbCBkZWNvZGluZyBjbGllbnQgdXNpbmcgYSBmYWlsb3Zlci1lbmFibGVkIHNsb3Qu CkBAIC0yNSw2ICsyNiwxMiBAQAogIyAgICAtIFNraXBzIG1pc3NpbmcvaW52YWxpZC9sb2dpY2Fs IHNsb3RzIGFuZCBsYWdnaW5nIHNsb3RzIChpbmFjdGl2ZSBvciBhY3RpdmUpCiAjICAgICAgdG8g ZmluZCBOIGNhdWdodC11cCBzbG90cwogIworIyBDKSBGSVJTVCBOIChzYjFfc2xvdCwgc2IyX3Ns b3QpIChwcmlvcml0eSBtb2RlKQorIyAgICAtIFNlbGVjdHMgZmlyc3QgTiBzbG90cyBpbiBwcmlv cml0eSBvcmRlciAobGlzdCBvcmRlcikKKyMgICAgLSBTa2lwcyBtaXNzaW5nL2ludmFsaWQvbG9n aWNhbCBzbG90cyBhbmQgaW5hY3RpdmUgbGFnZ2luZyBzbG90cywKKyMgICAgICBidXQgd2FpdHMg Zm9yIGFjdGl2ZSBsYWdnaW5nIHNsb3RzCisjICAgIC0gRklSU1QgMSB3b3JrcyB3aXRoIG9uZSBz bG90IGRvd24gKHVubGlrZSBwbGFpbiBsaXN0KQorCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdz IEZBVEFMID0+ICdhbGwnOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CkBAIC0yMTEs MTYgKzIxOCwxNjggQEAgaXMoJGRlY29kZWRfYmMsICcxJywKIAkncGxhaW4gbGlzdDogd29ya3Mg d2hlbiBhbGwgc3RhbmRieXMgYXJlIHVwJyk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBBUlQgRDogQU5ZIDIgd2FpdHMgb24gYW4gYWN0 aXZlIGxhZ2dpbmcgc2xvdAorIyBQQVJUIEQ6IFZlcmlmeSBGSVJTVCBOIHByaW9yaXR5IHNlbWFu dGljcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK IAotIyBTdG9wIHN0YW5kYnkxIHNvIHNiMV9zbG90IGNhbiBiZSBjb250cm9sbGVkIGJ5IGEgcmF3 IHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24KLSMgdGhhdCBrZWVwcyB0aGUgc2xvdCBhY3RpdmUgd2hp bGUgbGFnZ2luZy4KKyMgRklSU1QgTiBzaG91bGQ6CisjIDEuIFNlbGVjdCBmaXJzdCBOIHNsb3Rz IGluIHByaW9yaXR5IG9yZGVyIChsaXN0IG9yZGVyKQorIyAyLiBTa2lwIG1pc3NpbmcvaW52YWxp ZC9sb2dpY2FsIHNsb3RzIGFuZCBpbmFjdGl2ZSBsYWdnaW5nIHNsb3RzIHRvIGZpbmQKKyMgICAg TiBjYXVnaHQtdXAgc2xvdHMKKyMgMy4gV2FpdCBmb3IgYWN0aXZlIGxhZ2dpbmcgc2xvdHMgKG5v dCBza2lwIHRvIGxvd2VyIHByaW9yaXR5KQorCisjIFRlc3QgRklSU1QgMiAoc2IxX3Nsb3QsIHNi Ml9zbG90KSB3aXRoIGJvdGggdXA7IHNob3VsZCB3YWl0IGZvciBib3RoLgorJHByaW1hcnktPmFk anVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMn LAorCSInRklSU1QgMiAoc2IxX3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7 CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xvZ2ljYWxf ZW1pdF9tZXNzYWdlKHRydWUsICdxdGVzdCcsICdmaXJzdF8yX2JvdGhfdXAnKTsiCispOworJHBy aW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5MSk7CiskcHJpbWFyeS0+d2Fp dF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkyKTsKKworbXkgJGRlY29kZWRfZTIgPSAkcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXtTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19s b2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKQor CSAgV0hFUkUgZGF0YSBMSUtFICclZmlyc3RfMl9ib3RoX3VwJSc7fSk7CitpcygkZGVjb2RlZF9l MiwgJzEnLAorCSdGSVJTVCAyOiBkZWNvZGluZyB3b3JrcyB3aGVuIGFsbCByZXF1aXJlZCBzbG90 cyBhcmUgdXAnKTsKKworIyBUZXN0IEZJUlNUIDEgKHNiMV9zbG90LCBzYjJfc2xvdCkgd2l0aCBz YjFfc2xvdCB1bmF2YWlsYWJsZS4KICRzdGFuZGJ5MS0+c3RvcDsKIAorJHByaW1hcnktPmFkanVz dF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMnLAor CSInRklSU1QgMSAoc2IxX3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisK KyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xvZ2ljYWxfZW1p dF9tZXNzYWdlKHRydWUsICdxdGVzdCcsICdmaXJzdF8xX3NraXBfdW5hdmFpbGFibGUnKTsiCisp OworJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKKyMgRklS U1QgMSBzaG91bGQgc2tpcCBzYjFfc2xvdCAodW5hdmFpbGFibGUpIGFuZCB1c2Ugc2IyX3Nsb3Qu CitteSAkZGVjb2RlZF9lMSA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe1NF TEVDVCBjb3VudCgqKSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9naWNhbF9m YWlsb3ZlcicsIE5VTEwsIE5VTEwpCisJICBXSEVSRSBkYXRhIExJS0UgJyVmaXJzdF8xX3NraXBf dW5hdmFpbGFibGUlJzt9KTsKK2lzKCRkZWNvZGVkX2UxLCAnMScsCisJJ0ZJUlNUIDE6IHNraXBz IHVuYXZhaWxhYmxlIGZpcnN0IHNsb3QsIHVzZXMgc2Vjb25kIHNsb3QnKTsKKworIyBUZXN0IHNo b3J0aGFuZCBwcmlvcml0eSBzeW50YXg6IE4gKC4uLikgbWVhbnMgRklSU1QgTiAoLi4uKS4KKyRw cmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFu ZGJ5X3Nsb3RzJywKKwkiJzEgKHNiMV9zbG90LCBzYjJfc2xvdCknIik7CiskcHJpbWFyeS0+cmVs b2FkOworCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sb2dp Y2FsX2VtaXRfbWVzc2FnZSh0cnVlLCAncXRlc3QnLCAnbnVtXzFfc2hvcnRoYW5kX3ByaW9yaXR5 Jyk7IgorKTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTIpOwor CitteSAkZGVjb2RlZF9udW0xID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7 U0VMRUNUIGNvdW50KCopIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdsb2dpY2Fs X2ZhaWxvdmVyJywgTlVMTCwgTlVMTCkKKwkgIFdIRVJFIGRhdGEgTElLRSAnJW51bV8xX3Nob3J0 aGFuZF9wcmlvcml0eSUnO30pOworaXMoJGRlY29kZWRfbnVtMSwgJzEnLAorCScxICguLi4pOiBz aG9ydGhhbmQgcHJpb3JpdHkgc3ludGF4IGJlaGF2ZXMgbGlrZSBGSVJTVCAxJyk7CisKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBBUlQgRTog RklSU1QgMSBhbmQgQU5ZIDIgd2FpdCBvbiBhbiBhY3RpdmUgbGFnZ2luZyBzbG90CisjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEJyaW5nIHN0 YW5kYnkxIGJhY2sgc28gc2IxX3Nsb3QgaXMgYWN0aXZlIGFuZCBjYXVnaHQgdXAuCiskc3RhbmRi eTEtPnN0YXJ0OworJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5MSk7 CisKKyMgVG8gdGVzdCB0aGUgYWN0aXZlLWJ1dC1sYWdnaW5nIHNsb3QgcGF0aCBkZXRlcm1pbmlz dGljYWxseSwgd2Ugb3BlbiBhIHJhdworIyByZXBsaWNhdGlvbiBjb25uZWN0aW9uIHRvIHNiMV9z bG90IHN0YXJ0aW5nIGZyb20gYSBkZWxpYmVyYXRlbHkgb2xkIExTTi4KKyMgcHNxbCBpbiByZXBs aWNhdGlvbiBtb2RlIG5ldmVyIHNlbmRzIFN0YW5kYnkgU3RhdHVzIFVwZGF0ZSBtZXNzYWdlcywg c28KKyMgdGhlIHdhbHNlbmRlciBrZWVwcyBzYjFfc2xvdCdzIGFjdGl2ZV9waWQgc2V0IGJ1dCBy ZXN0YXJ0X2xzbiBuZXZlcgorIyBhZHZhbmNlcy4KKworIyBTdG9wIHN0YW5kYnkxIHNvIGl0cyB3 YWxzZW5kZXIgcmVsZWFzZXMgc2IxX3Nsb3QsIGFsbG93aW5nIG91ciByZXBsaWNhdGlvbgorIyBj b25uZWN0aW9uIGJlbG93IHRvIGFjcXVpcmUgaXQuCiskc3RhbmRieTEtPnN0b3A7CisKKyMgQ2Fw dHVyZSBhIHNhZmVseSBvbGQgTFNOIHRvIHN0cmVhbSBmcm9tLCBiZWZvcmUgdGhlIHRlc3QgV0FM IHJlY29yZC4KIG15ICRvbGRfbHNuID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog CSJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCk7Iik7CiAKKyMgRklSU1QgMSBtdXN0IHdhaXQg Zm9yIHRoZSBoaWdoZXN0LXByaW9yaXR5IHNsb3Qgd2hlbiBpdCBpcyBhY3RpdmUgYnV0IGxhZ2dp bmcuCiskcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90cycsCisJIidGSVJTVCAxIChzYjFfc2xvdCwgc2IyX3Nsb3QpJyIpOwor JHByaW1hcnktPnJlbG9hZDsKKworbXkgJGZpcnN0X2xhZ19sc24gPSAkcHJpbWFyeS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0cnVlLCAn cXRlc3QnLCAnZmlyc3RfMV9sYWdnaW5nX2Jsb2NrcycpOyIKKyk7CiskcHJpbWFyeS0+d2FpdF9m b3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkyKTsKKworIyBPcGVuIGEgcmF3IHJlcGxpY2F0aW9u IGNvbm5lY3Rpb24gdG8gc2IxX3Nsb3Qgc3RhcnRpbmcgZnJvbSAkb2xkX2xzbi4KKyMgVGhpcyBh Y3RpdmF0ZXMgdGhlIHNsb3QgKGFjdGl2ZV9waWQgSVMgTk9UIE5VTEwpIHdoaWxlIGtlZXBpbmcg cmVzdGFydF9sc24KKyMgZnJvemVuIGJlbG93ICRmaXJzdF9sYWdfbHNuIGZvciB0aGUgbGlmZXRp bWUgb2YgdGhlIGNvbm5lY3Rpb24uCitteSAkcmVwbF9maXJzdCA9ICRwcmltYXJ5LT5iYWNrZ3Jv dW5kX3BzcWwoCisJJ3Bvc3RncmVzJywKKwlyZXBsaWNhdGlvbiA9PiAnZGF0YWJhc2UnLAorCW9u X2Vycm9yX3N0b3AgPT4gMCwKKwl0aW1lb3V0ID0+ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6 dGltZW91dF9kZWZhdWx0KTsKKworJHJlcGxfZmlyc3QtPnF1ZXJ5X3VudGlsKAorCXFyL14kLywK KwkiU1RBUlRfUkVQTElDQVRJT04gU0xPVCBzYjFfc2xvdCBQSFlTSUNBTCAkb2xkX2xzbjtcbiIp OworCisjIFdhaXQgdW50aWwgc2IxX3Nsb3Qgc2hvd3MgYWN0aXZlX3BpZCwgY29uZmlybWluZyB0 aGUgd2Fsc2VuZGVyIGlzIGxpdmUuCiskcHJpbWFyeS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdy ZXMnLCBxeworCVNFTEVDVCBhY3RpdmVfcGlkIElTIE5PVCBOVUxMCisJRlJPTSBwZ19yZXBsaWNh dGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdzYjFfc2xvdCcKK30pIG9yIGRpZSAicmVw bGljYXRpb24gY29ubmVjdGlvbiBkaWQgbm90IGFjdGl2YXRlIHNiMV9zbG90IjsKKworIyBzYjFf c2xvdCBpcyBub3cgYWN0aXZlIGFuZCBpdHMgcmVzdGFydF9sc24gaXMgYmVoaW5kICRmaXJzdF9s YWdfbHNuLgorIyBTdGFydCBsb2dpY2FsIGRlY29kaW5nIGluIHRoZSBiYWNrZ3JvdW5kOyBpdCBt dXN0IGJsb2NrLgorbXkgJGJnX2ZpcnN0ID0gJHByaW1hcnktPmJhY2tncm91bmRfcHNxbCgKKwkn cG9zdGdyZXMnLAorCW9uX2Vycm9yX3N0b3AgPT4gMCwKKwl0aW1lb3V0ID0+ICRQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKKworJGJnX2ZpcnN0LT5xdWVyeV91bnRp bCgKKwlxci9kZWNvZGVfc3RhcnQvLCBxKAorICAgXGVjaG8gZGVjb2RlX3N0YXJ0CisgICBTRUxF Q1QgcGdfbG9naWNhbF9zbG90X3BlZWtfY2hhbmdlcygnbG9naWNhbF9mYWlsb3ZlcicsIE5VTEws IE5VTEwpOworKSk7CisKK29rKCAkcHJpbWFyeS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJJ3Bvc3Rn cmVzJywgcXsKK1NFTEVDVCBFWElTVFMgKAorCVNFTEVDVCAxCisJRlJPTSBwZ19zdGF0X2FjdGl2 aXR5CisJV0hFUkUgd2FpdF9ldmVudCA9ICdXYWl0Rm9yU3RhbmRieUNvbmZpcm1hdGlvbicKKwkg IEFORCBxdWVyeSBMSUtFICclcGdfbG9naWNhbF9zbG90X3BlZWtfY2hhbmdlcygnJ2xvZ2ljYWxf ZmFpbG92ZXInJyUnCispOworfSksCisJJ0ZJUlNUIDE6IGRlY29kaW5nIHdhaXRzIGZvciBhY3Rp dmUgbGFnZ2luZyBoaWdoZXItcHJpb3JpdHkgc2xvdCcpOworCiskcHJpbWFyeS0+YWRqdXN0X2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsICdzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cycsICInJyIp OworJHByaW1hcnktPnJlbG9hZDsKKyRiZ19maXJzdC0+cXVpdDsKKyRyZXBsX2ZpcnN0LT5xdWl0 OworCisjIEVuc3VyZSB0aGUgcHJldmlvdXMgcmVwbGljYXRpb24gY29ubmVjdGlvbiBoYXMgZnVs bHkgcmVsZWFzZWQgc2IxX3Nsb3QKKyMgYmVmb3JlIHJldXNpbmcgaXQgaW4gdGhlIG5leHQgc3Vi dGVzdC4KKyRwcmltYXJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsIHF7CisJU0VMRUNU IGFjdGl2ZV9waWQgSVMgTlVMTAorCUZST00gcGdfcmVwbGljYXRpb25fc2xvdHMKKwlXSEVSRSBz bG90X25hbWUgPSAnc2IxX3Nsb3QnCit9KSBvciBkaWUgInJlcGxpY2F0aW9uIGNvbm5lY3Rpb24g ZGlkIG5vdCByZWxlYXNlIHNiMV9zbG90IjsKKworIyBDb25zdW1lIHRoZSBjaGFuZ2Ugc28gdGhl IHNsb3QgaXMgY2xlYW4gZm9yIHRoZSBuZXh0IHRlc3QuCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJcXtTRUxFQ1QgcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdsb2dpY2Fs X2ZhaWxvdmVyJywgTlVMTCwgTlVMTCk7fSk7CisKKyMgQU5ZIDIgbXVzdCBhbHNvIHdhaXQgd2hl biBvbmx5IG9uZSBvZiB0d28gcmVxdWlyZWQgc2xvdHMgaGFzIGNhdWdodCB1cC4KKyMgUmV1c2Ug dGhlIHNhbWUgdGVjaG5pcXVlOiBvcGVuIGEgcmF3IHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24gdG8g c2IxX3Nsb3QKKyMgZnJvbSAkb2xkX2xzbiBzbyBpdCBpcyBhY3RpdmUgYnV0IGl0cyByZXN0YXJ0 X2xzbiBzdGF5cyBiZWhpbmQgdGhlIHRhcmdldC4KKworIyBDYXB0dXJlIGFub3RoZXIgb2xkIExT TiBiYXNlbGluZSBiZWZvcmUgdGhlIG5leHQgdGVzdCBXQUwgcmVjb3JkLgorJG9sZF9sc24gPSAk cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19jdXJyZW50X3dhbF9s c24oKTsiKTsKKwogJHByaW1hcnktPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3lu Y2hyb25pemVkX3N0YW5kYnlfc2xvdHMnLAogCSInQU5ZIDIgKHNiMV9zbG90LCBzYjJfc2xvdCkn Iik7CiAkcHJpbWFyeS0+cmVsb2FkOwpAQCAtMjgzLDcgKzQ0Miw1NCBAQCAkcHJpbWFyeS0+d2Fp dF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQQVJUIEU6IER1cGxpY2F0ZSBlbnRy aWVzIGFyZSBpZ25vcmVkIGZvciBxdW9ydW0gY291bnRpbmcKKyMgUEFSVCBGOiBQbGFpbiBsaXN0 IHdpdGggZmlyc3QtcHJlZml4ZWQgc2xvdCBuYW1lIHN0aWxsIG1lYW5zIEFMTCBtb2RlCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIENyZWF0 ZSBhIHNsb3QgbmFtZSBzdGFydGluZyB3aXRoICJmaXJzdF8iIGZvciBwYXJzZXIgZGlzYW1iaWd1 YXRpb24gY2hlY2tzLgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qg cGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ2ZpcnN0X3Nsb3QnKTsiKTsKKwor IyBJZiBzaW1wbGUtbGlzdCBzeW50YXggc3RhcnRzIHdpdGggYSBzbG90IG5hbWUgbGlrZSAiZmly c3Rfc2xvdCIsIGl0IG11c3QKKyMgc3RpbGwgYmUgdHJlYXRlZCBhcyBBTEwgbW9kZSAobm90IGFz IGV4cGxpY2l0IEZJUlNUIE4gc3ludGF4KS4KKyRwcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzJywKKwkiJ2ZpcnN0X3Nsb3Qs IHNiMl9zbG90JyIpOworJHByaW1hcnktPnJlbG9hZDsKKworJHByaW1hcnktPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbG9naWNhbF9lbWl0X21lc3NhZ2UodHJ1ZSwgJ3F0ZXN0 JywgJ2ZpcnN0X3ByZWZpeF9hbGxfbW9kZV9ibG9ja3MnKTsiCispOworJHByaW1hcnktPndhaXRf Zm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKKyRsb2dfb2Zmc2V0ID0gLXMgJHByaW1h cnktPmxvZ2ZpbGU7CisKKyRiZyA9ICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoCisJJ3Bvc3Rn cmVzJywKKwlvbl9lcnJvcl9zdG9wID0+IDAsCisJdGltZW91dCA9PiAkUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7CisKKyRiZy0+cXVlcnlfdW50aWwoCisJcXIvZGVj b2RlX3N0YXJ0LywgcSgKKyAgIFxlY2hvIGRlY29kZV9zdGFydAorICAgU0VMRUNUIHBnX2xvZ2lj YWxfc2xvdF9wZWVrX2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKTsKKykp OworCisjIFBsYWluIGxpc3QgbXVzdCByZXF1aXJlIGFsbCBsaXN0ZWQgc2xvdHM7IGZpcnN0X3Ns b3QgaXMgaW50ZW50aW9uYWxseSBpbmFjdGl2ZS4KKyRwcmltYXJ5LT53YWl0X2Zvcl9sb2coCisJ cXIvcmVwbGljYXRpb24gc2xvdCBcImZpcnN0X3Nsb3RcIiBzcGVjaWZpZWQgaW4gcGFyYW1ldGVy ICJzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyIgZG9lcyBub3QgaGF2ZSBhY3RpdmVfcGlkLywK KwkkbG9nX29mZnNldCk7CisKK3Bhc3MoJ3BsYWluIGxpc3Qgd2l0aCBmaXJzdC1wcmVmaXhlZCBz bG90IG5hbWUgYmxvY2tzIGluIEFMTCBtb2RlJyk7CisKKyRwcmltYXJ5LT5hZGp1c3RfY29uZign cG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzJywgIicnIik7Cisk cHJpbWFyeS0+cmVsb2FkOworJGJnLT5xdWl0OworCisjIENvbnN1bWUgdGhlIGNoYW5nZSBmb3Ig dGhlIG5leHQgdGVzdC4KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVD VCBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBO VUxMKTt9KTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgUEFSVCBHOiBEdXBsaWNhdGUgZW50cmllcyBhcmUgaWdub3JlZCBmb3IgcXVvcnVt IGNvdW50aW5nCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogCiAjIFN0b3Agc3RhbmRieTIgc28gb25seSBzYjFfc2xvdCBjYW4gY2F0Y2ggdXAuCkBA IC0zMjQsNiArNTMwLDQ2IEBAICRwcmltYXJ5LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzJywgIicnIik7CiAkcHJpbWFyeS0+cmVsb2Fk OwogJGJnX2R1cC0+cXVpdDsKIAorIyBDb25zdW1lIHRoZSBjaGFuZ2UgZm9yIHRoZSBuZXh0IHRl c3QuCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXtTRUxFQ1QgcGdfbG9naWNh bF9zbG90X2dldF9jaGFuZ2VzKCdsb2dpY2FsX2ZhaWxvdmVyJywgTlVMTCwgTlVMTCk7fSk7CisK KyMgRklSU1QgZHVwbGljYXRlcyBtdXN0IGFsc28gbm90IGNyZWF0ZSBleHRyYSBwcmlvcml0eSBw b3NpdGlvbnMuCiskcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzeW5j aHJvbml6ZWRfc3RhbmRieV9zbG90cycsCisJIidGSVJTVCAyIChzYjFfc2xvdCwgc2IxX3Nsb3Qs IHNiMl9zbG90KSciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUsICdxdGVz dCcsICdmaXJzdF9kdXBsaWNhdGVfZW50cmllc19pZ25vcmVkJyk7IgorKTsKKyRwcmltYXJ5LT53 YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEpOworCitteSAkYmdfZmlyc3RfZHVwID0g JHByaW1hcnktPmJhY2tncm91bmRfcHNxbCgKKwkncG9zdGdyZXMnLAorCW9uX2Vycm9yX3N0b3Ag PT4gMCwKKwl0aW1lb3V0ID0+ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZh dWx0KTsKKworJGJnX2ZpcnN0X2R1cC0+cXVlcnlfdW50aWwoCisJcXIvZGVjb2RlX3N0YXJ0Lywg cSgKKyAgIFxlY2hvIGRlY29kZV9zdGFydAorICAgU0VMRUNUIHBnX2xvZ2ljYWxfc2xvdF9wZWVr X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKTsKKykpOworCitvayggJHBy aW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHF7CitTRUxFQ1QgRVhJU1RT ICgKKwlTRUxFQ1QgMQorCUZST00gcGdfc3RhdF9hY3Rpdml0eQorCVdIRVJFIHdhaXRfZXZlbnQg PSAnV2FpdEZvclN0YW5kYnlDb25maXJtYXRpb24nCisJICBBTkQgcXVlcnkgTElLRSAnJXBnX2xv Z2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJydsb2dpY2FsX2ZhaWxvdmVyJyclJworKTsKK30pLAor CSdGSVJTVCBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIHdoZW4gY291bnRpbmcgcHJpb3JpdHkgc2xv dHMnKTsKKworJHByaW1hcnktPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hy b25pemVkX3N0YW5kYnlfc2xvdHMnLCAiJyciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CiskYmdfZmly c3RfZHVwLT5xdWl0OworCiAjIENvbnN1bWUgdGhlIGNoYW5nZSBmb3IgdGhlIG5leHQgdGVzdC4K ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAlxe1NFTEVDVCBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKTt9KTsKQEAgLTMz NCw3ICs1ODAsNyBAQCAkcHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnky KTsKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwotIyBQQVJUIEY6IFZlcmlmeSBHVUMgdmFsaWRhdGlvbiByZWplY3RzIGJhZCB2YWx1ZXMKKyMg UEFSVCBIOiBWZXJpZnkgR1VDIHZhbGlkYXRpb24gcmVqZWN0cyBiYWQgdmFsdWVzCiAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBteSAoJHJlc3Vs dCwgJHN0ZG91dCwgJHN0ZGVycik7CkBAIC0zNTEsMTggKzU5Nyw2IEBAIGxpa2UoJHN0ZGVyciwg cXIvRVJST1IvLAogbGlrZSgkc3RkZXJyLCBxci9FUlJPUi8sCiAJJ0dVQyByZWplY3RzIG1hbGZv cm1lZCBBTlkgc3ludGF4Jyk7CiAKLSMgUHJpb3JpdHkgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQg Ynkgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgeWV0Ci0oJHJlc3VsdCwgJHN0ZG91dCwgJHN0 ZGVycikgPSAkcHJpbWFyeS0+cHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBTWVNURU0gU0VUIHN5 bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzID0gJ0ZJUlNUIDEgKHNiMV9zbG90LCBzYjJfc2xvdCkn OyIpOwotbGlrZSgkc3RkZXJyLCBxci9wcmlvcml0eSBzeW50YXggaXMgbm90IHN1cHBvcnRlZC8s Ci0JJ0dVQyByZWplY3RzIEZJUlNUIHN5bnRheCcpOwotCi0jIExlZ2FjeSBwcmlvcml0eSBzeW50 YXggaXMgbm90IHN1cHBvcnRlZCBieSBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyB5ZXQKLSgk cmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRwcmltYXJ5LT5wc3FsKCdwb3N0Z3JlcycsCi0J IkFMVEVSIFNZU1RFTSBTRVQgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgPSAnMSAoc2IxX3Ns b3QsIHNiMl9zbG90KSc7Iik7Ci1saWtlKCRzdGRlcnIsIHFyL3ByaW9yaXR5IHN5bnRheCBpcyBu b3Qgc3VwcG9ydGVkLywKLQknR1VDIHJlamVjdHMgbGVnYWN5IHByaW9yaXR5IHN5bnRheCcpOwot CiAjIEludmFsaWQgc2xvdCBuYW1lCiAoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkcHJp bWFyeS0+cHNxbCgncG9zdGdyZXMnLAogCSJBTFRFUiBTWVNURU0gU0VUIHN5bmNocm9uaXplZF9z dGFuZGJ5X3Nsb3RzID0gJ0FOWSAxIChJTlZBTElEX1VQUEVSKSc7Iik7Ci0tIAoyLjQzLjAKCg== --000000000000ad42c10653689944 Content-Type: application/octet-stream; name="0002-Add-ANY-N-semantics-to-synchronized_standby_slots.patch" Content-Disposition: attachment; filename="0002-Add-ANY-N-semantics-to-synchronized_standby_slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpz6kkws1 RnJvbSA2NzNjNTQyNjcwNjRlMTdhMzVhMTkwNzY0NGJmNjg1OTc1OTgyN2IwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBTaGFybWEgPGFzaHUuY29lazg4QGdtYWlsLmNv bT4KRGF0ZTogVGh1LCA0IEp1biAyMDI2IDA3OjA5OjA4ICswMDAwClN1YmplY3Q6IFtQQVRDSCAy LzNdIEFkZCBBTlkgTiBzZW1hbnRpY3MgdG8gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMKCkV4 dGVuZCBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyB3aXRoIHF1b3J1bSBzeW50YXggZm9yIGxv Z2ljYWwKZmFpbG92ZXIgc2xvdCBzeW5jaHJvbml6YXRpb246CgotIEFOWSBOIChzbG90MSwgc2xv dDIsIC4uLikKClBsYWluLWxpc3Qgc2VtYW50aWNzIGFyZSBwcmVzZXJ2ZWQgYXMtaXM6CgotIHNs b3QxLCBzbG90MiBjb250aW51ZXMgdG8gbWVhbiBhbGwgbGlzdGVkIHNsb3RzIGFyZSByZXF1aXJl ZAoKSW1wbGVtZW50YXRpb24gZGV0YWlsczoKCi0gUmV1c2Ugc3luY3JlcCBwYXJzZXIgaW5mcmFz dHJ1Y3R1cmUgaW4gdGhlIEdVQyBjaGVjayBob29rIGFuZAogIG1hcCBwYXJzZWQgb3V0cHV0IGlu dG8gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgc2VtYW50aWNzLgotIENvbnN1bWUgU1lOQ19S RVBfREVGQVVMVCBmcm9tIHRoZSBwcmVwYXJhdG9yeSBwYXJzZXIgcmVmYWN0b3IgdG8KICBkaXN0 aW5ndWlzaCBwbGFpbi1saXN0IHN5bnRheCBmcm9tIGV4cGxpY2l0IHBhcnNlciBtb2Rlcy4KLSBJ biBTdGFuZGJ5U2xvdHNIYXZlQ2F1Z2h0dXAoKSwgZW5mb3JjZSBtb2RlLXNwZWNpZmljIGJlaGF2 aW9yIGZvcjoKICAtIGV4aXN0aW5nIGFsbC1saXN0ZWQtc2xvdHMgc2VtYW50aWNzIChwbGFpbiBs aXN0KQogIC0gcXVvcnVtIE4tb2YtTSBiZWhhdmlvciAoQU5ZIE4pCi0gVmFsaWRhdGlvbiByZWpl Y3RzIGNvbmZpZ3VyYXRpb25zIHdoZXJlIE4gZXhjZWVkcyB0aGUgbnVtYmVyIG9mCiAgbGlzdGVk IHNsb3RzLgotIElnbm9yZSBkdXBsaWNhdGUgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgZW50 cmllcywgcHJlc2VydmluZyB0aGUKICBmaXJzdCBvY2N1cnJlbmNlIGFuZCBhcHBseWluZyBzZW1h bnRpY3MgdG8gdGhlIHJlc3VsdGluZyB1bmlxdWUgbGlzdC4KLSBDbGFyaWZ5IHN5bmNocm9uaXpl ZF9zdGFuZGJ5X3Nsb3RzIGNvbW1lbnRzIGFuZCBsYWdnaW5nIHJlc3RhcnRfbHNuCiAgcmVwb3J0 aW5nIHRvIG1hdGNoIHRoZSBpbXBsZW1lbnRlZCBiZWhhdmlvci4KClRlc3RzIGFuZCBkb2NzOgoK LSBBZGQgcmVjb3ZlcnkgY292ZXJhZ2UgZm9yIHBsYWluLWxpc3QgYmVoYXZpb3IgYW5kIEFOWSBx dW9ydW0KICBiZWhhdmlvciwgaW5jbHVkaW5nIGxhZ2dpbmctc2xvdCBhbmQgdmFsaWRhdGlvbi1l cnJvciBzY2VuYXJpb3MuCi0gQWRkIGR1cGxpY2F0ZS1lbnRyeSByZWNvdmVyeSBjb3ZlcmFnZSBm b3Igc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMuCi0gRG9jdW1lbnQgQU5ZIHN5bnRheCBhbmQg Y2xhcmlmeSBwbGFpbi1saXN0IGJlaGF2aW9yIGZvciB0aGlzIEdVQy4KLSBEb2N1bWVudCB0aGF0 IGR1cGxpY2F0ZSBzbG90IG5hbWVzIGFyZSBpZ25vcmVkIGFuZCBjb3VudGVkIG9ubHkgb25jZS4K CkF1dGhvcjogU2F0eWEgTmFybGFwdXJhbSA8c2F0eWFuYXJsYXB1cmFtQGdtYWlsLmNvbT4KQXV0 aG9yOiBBc2h1dG9zaCBTaGFybWEgPGFzaHUuY29lazg4QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6 IFNodmV0YSBNYWxpayA8c2h2ZXRhLm1hbGlrQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFqaW4g Q2hlcmlhbiA8aXRzYWppbkBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIb3UsIFpoaWppZSA8aG91 emouZm5zdEBmdWppdHN1LmNvbT4KUmV2aWV3ZWQtYnk6IERpbGlwIEt1bWFyIDxkaWxpcGJhbGF1 dEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBTdXJ5YSBQb29uZGxhIDxzdXJ5YXBvb25kbGE0QGdt YWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEphcGluIExpIDxqYXBpbmxpQGhvdG1haWwuY29tPgotLS0K IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICA4MSArKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDQ5NiArKysr KysrKysrKysrKy0tLS0KIC4uLi8wNTNfc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfcXVvcnVt LnBsICB8IDM3OCArKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDgzMCBpbnNlcnRpb25z KCspLCAxMjUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3Zl cnkvdC8wNTNfc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfcXVvcnVtLnBsCgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IGNlYmFlNGI2ZDFiLi5hMDNhZTk0YTEyZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTE5MCwxNyArNTE5 MCw3OCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBs YWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC90ZXJtPgogICAgICAgPGxp c3RpdGVtPgogICAgICAgIDxwYXJhPgotICAgICAgICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m IHN0cmVhbWluZyByZXBsaWNhdGlvbiBzdGFuZGJ5IHNlcnZlciBzbG90IG5hbWVzCi0gICAgICAg IHRoYXQgbG9naWNhbCBXQUwgc2VuZGVyIHByb2Nlc3NlcyB3aWxsIHdhaXQgZm9yLiBMb2dpY2Fs IFdBTCBzZW5kZXIgcHJvY2Vzc2VzCi0gICAgICAgIHdpbGwgc2VuZCBkZWNvZGVkIGNoYW5nZXMg dG8gcGx1Z2lucyBvbmx5IGFmdGVyIHRoZSBzcGVjaWZpZWQgcmVwbGljYXRpb24KLSAgICAgICAg c2xvdHMgY29uZmlybSByZWNlaXZpbmcgV0FMLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBsb2dpY2Fs IHJlcGxpY2F0aW9uCisgICAgICAgIFNwZWNpZmllcyB0aGUgc3RyZWFtaW5nIHJlcGxpY2F0aW9u IHN0YW5kYnkgc2xvdHMgdGhhdCBsb2dpY2FsIFdBTAorICAgICAgICBzZW5kZXIgcHJvY2Vzc2Vz IG11c3Qgd2FpdCBvbiBiZWZvcmUgZGVsaXZlcmluZyBkZWNvZGVkIGNoYW5nZXMuIFRoaXMKKyAg ICAgICAgcGFyYW1ldGVyIHVzZXMgdGhlIGZvbGxvd2luZyBzeW50YXg6Cis8c3lub3BzaXM+CitB TlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4g KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBsYWNlYWJsZT4g WywgLi4uXSApCis8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2xvdF9uYW1lPC9yZXBs YWNlYWJsZT4gWywgLi4uXQorPC9zeW5vcHNpcz4KKyAgICAgICAgd2hlcmUgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gaXMKKyAgICAgICAgdGhl IG51bWJlciBvZiBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90cyB0aGF0IG11c3QgY29uZmlybSBX QUwKKyAgICAgICAgcmVjZWlwdCBiZWZvcmUgbG9naWNhbCBkZWNvZGluZyBwcm9jZWVkcywKKyAg ICAgICAgYW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zbG90X25hbWU8L3JlcGxh Y2VhYmxlPgorICAgICAgICBpcyB0aGUgbmFtZSBvZiBhIHBoeXNpY2FsIHJlcGxpY2F0aW9uIHNs b3QuCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVw bGFjZWFibGU+CisgICAgICAgIG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZSBncmVhdGVyIHRoYW4g emVybyBhbmQgbXVzdCBub3QgZXhjZWVkIHRoZQorICAgICAgICBudW1iZXIgb2YgbGlzdGVkIHNs b3RzLgorICAgICAgICBPdGhlciBmb3JtcyBzdXBwb3J0ZWQgYnkKKyAgICAgICAgPHhyZWYgbGlu a2VuZD0iZ3VjLXN5bmNocm9ub3VzLXN0YW5kYnktbmFtZXMiLz4sIHN1Y2ggYXMgcHJpb3JpdHkK KyAgICAgICAgc3ludGF4LCBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgIDxwYXJhPgorICAgICAgICAgSWYgdGhlIHNhbWUgcGh5c2ljYWwgcmVwbGljYXRpb24gc2xv dCBuYW1lIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UsCisgICAgICAgICBkdXBsaWNhdGUgZW50cmll cyBhcmUgaWdub3JlZCBhbmQgb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpcyB1c2VkLgorICAg ICAgICAgVGhlIHNlbWFudGljcyBvZiA8dmFybmFtZT5zeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90 czwvdmFybmFtZT4gYXJlCisgICAgICAgICB0aGVyZWZvcmUgYmFzZWQgb24gdGhlIHVuaXF1ZSBz ZXQgb2YgbGlzdGVkIHNsb3QgbmFtZXMsIHByZXNlcnZpbmcgdGhlCisgICAgICAgICBvcmlnaW5h bCBvcmRlciBvZiBmaXJzdCBvY2N1cnJlbmNlLiBJbiBwYXJ0aWN1bGFyLAorICAgICAgICAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gbXVzdCBu b3QgZXhjZWVkCisgICAgICAgICB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBsaXN0ZWQgc2xvdHMuCisg ICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQSBwbGFpbiBjb21tYS1zZXBh cmF0ZWQgbGlzdCB3aXRob3V0IGEga2V5d29yZCBzcGVjaWZpZXMgdGhhdAorICAgICAgICA8ZW1w aGFzaXM+YWxsPC9lbXBoYXNpcz4gbGlzdGVkIHBoeXNpY2FsIHNsb3RzIG11c3QgY29uZmlybSBX QUwKKyAgICAgICAgcmVjZWlwdC4gVGhpcyBkaWZmZXJzIGZyb20gPHhyZWYgbGlua2VuZD0iZ3Vj LXN5bmNocm9ub3VzLXN0YW5kYnktbmFtZXMiLz4KKyAgICAgICAgd2hlcmUgYSBzaW1wbGUgbGlz dCBtZWFucyA8bGl0ZXJhbD5GSVJTVCAxPC9saXRlcmFsPi4gRm9yCisgICAgICAgIDx2YXJuYW1l PnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzPC92YXJuYW1lPiwgcmVxdWlyaW5nIGFsbCBzbG90 cworICAgICAgICBwcm92aWRlcyBzYWZlciBmYWlsb3ZlciBzZW1hbnRpY3MgYnkgZGVmYXVsdC4K KyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBrZXl3b3JkIDxsaXRl cmFsPkFOWTwvbGl0ZXJhbD4sIGNvdXBsZWQgd2l0aAorICAgICAgICA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiwgc3BlY2lmaWVzCisgICAgICAg IHF1b3J1bS1iYXNlZCBzZW1hbnRpY3MuIExvZ2ljYWwgZGVjb2RpbmcgcHJvY2VlZHMgb25jZSBh dCBsZWFzdAorICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiBvZiB0aGUgbGlzdGVkCisgICAgICAgIHNsb3RzIGhhdmUgY2F1Z2h0IHVw LiBNaXNzaW5nLCBsb2dpY2FsLCBhbmQgaW52YWxpZGF0ZWQgc2xvdHMgYXJlCisgICAgICAgIHNr aXBwZWQgd2hlbiBkZXRlcm1pbmluZyBjYW5kaWRhdGVzLiBMYWdnaW5nIHNsb3RzIChpbmFjdGl2 ZSBvcgorICAgICAgICBhY3RpdmUpIHNpbXBseSBkbyBub3QgY291bnQgdG93YXJkIHRoZSByZXF1 aXJlZCBudW1iZXIgdW50aWwgdGhleQorICAgICAgICBjYXRjaCB1cC4KKyAgICAgICAgSWYgZmV3 ZXIgdGhhbiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2Vh YmxlPgorICAgICAgICBzbG90cyBoYXZlIGNhdWdodCB1cCBhdCBhIGdpdmVuIG1vbWVudCwgbG9n aWNhbCBkZWNvZGluZyB3YWl0cyB1bnRpbAorICAgICAgICB0aGF0IHRocmVzaG9sZCBpcyByZWFj aGVkLgorICAgICAgICBpLmUuLCB0aGVyZSBpcyBubyBwcmlvcml0eSBvcmRlcmluZy4KKyAgICAg ICAgRm9yIGV4YW1wbGUsIGEgc2V0dGluZyBvZiA8bGl0ZXJhbD5BTlkgMSAoc2IxX3Nsb3QsIHNi Ml9zbG90KTwvbGl0ZXJhbD4KKyAgICAgICAgYWxsb3dzIGxvZ2ljYWwgZGVjb2RpbmcgdG8gcHJv Y2VlZCBhcyBzb29uIGFzIGVpdGhlciBwaHlzaWNhbCBzbG90IGhhcworICAgICAgICBjb25maXJt ZWQgV0FMIHJlY2VpcHQuIElmIG5vbmUgb2YgdGhlIHNsb3RzIGFyZSBhdmFpbGFibGUgb3IgaGF2 ZQorICAgICAgICBjYXVnaHQgdXAsIGxvZ2ljYWwgZGVjb2Rpbmcgd2FpdHMgdW50aWwgYXQgbGVh c3Qgb25lIHNsb3QgbWVldHMgdGhlCisgICAgICAgIHJlcXVpcmVkIGNvbmRpdGlvbi4gVGhpcyBp cyB1c2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aAorICAgICAgICBxdW9ydW0tYmFzZWQgc3luY2hy b25vdXMgcmVwbGljYXRpb24KKyAgICAgICAgKDxsaXRlcmFsPnN5bmNocm9ub3VzX3N0YW5kYnlf bmFtZXMgPSAnQU5ZIC4uLic8L2xpdGVyYWw+KSwgc28gdGhhdAorICAgICAgICBsb2dpY2FsIGRl Y29kaW5nIGF2YWlsYWJpbGl0eSBtYXRjaGVzIHRoZSBjb21taXQgZHVyYWJpbGl0eSBndWFyYW50 ZWUuCisgICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgPGxpdGVyYWw+QU5ZPC9s aXRlcmFsPiBpcyBjYXNlLWluc2Vuc2l0aXZlLgorICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGUgdXNlIG9mIDx2YXJuYW1lPnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3Rz PC92YXJuYW1lPiBndWFyYW50ZWVzCisgICAgICAgIHRoYXQgbG9naWNhbCByZXBsaWNhdGlvbgog ICAgICAgICBmYWlsb3ZlciBzbG90cyBkbyBub3QgY29uc3VtZSBjaGFuZ2VzIHVudGlsIHRob3Nl IGNoYW5nZXMgYXJlIHJlY2VpdmVkCi0gICAgICAgIGFuZCBmbHVzaGVkIHRvIGNvcnJlc3BvbmRp bmcgcGh5c2ljYWwgc3RhbmRieXMuIElmIGEKKyAgICAgICAgYW5kIGZsdXNoZWQgdG8gdGhlIHJl cXVpcmVkIHBoeXNpY2FsIHN0YW5kYnlzLiBJZiBhCiAgICAgICAgIGxvZ2ljYWwgcmVwbGljYXRp b24gY29ubmVjdGlvbiBpcyBtZWFudCB0byBzd2l0Y2ggdG8gYSBwaHlzaWNhbCBzdGFuZGJ5CiAg ICAgICAgIGFmdGVyIHRoZSBzdGFuZGJ5IGlzIHByb21vdGVkLCB0aGUgcGh5c2ljYWwgcmVwbGlj YXRpb24gc2xvdCBmb3IgdGhlCiAgICAgICAgIHN0YW5kYnkgc2hvdWxkIGJlIGxpc3RlZCBoZXJl LiBOb3RlIHRoYXQgbG9naWNhbCByZXBsaWNhdGlvbiB3aWxsIG5vdAotICAgICAgICBwcm9jZWVk IGlmIHRoZSBzbG90cyBzcGVjaWZpZWQgaW4gdGhlCi0gICAgICAgIDx2YXJuYW1lPnN5bmNocm9u aXplZF9zdGFuZGJ5X3Nsb3RzPC92YXJuYW1lPiBkbyBub3QgZXhpc3Qgb3IgYXJlIGludmFsaWRh dGVkLgorICAgICAgICBwcm9jZWVkIGlmIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgcGh5c2ljYWwg c2xvdHMgc3BlY2lmaWVkIGluCisgICAgICAgIDx2YXJuYW1lPnN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzPC92YXJuYW1lPiBkbyBub3QgZXhpc3Qgb3IgYXJlCisgICAgICAgIGludmFsaWRhdGVk LgogICAgICAgICBBZGRpdGlvbmFsbHksIHRoZSByZXBsaWNhdGlvbiBtYW5hZ2VtZW50IGZ1bmN0 aW9ucwogICAgICAgICA8bGluayBsaW5rZW5kPSJwZy1yZXBsaWNhdGlvbi1zbG90LWFkdmFuY2Ui PgogICAgICAgICA8ZnVuY3Rpb24+cGdfcmVwbGljYXRpb25fc2xvdF9hZHZhbmNlPC9mdW5jdGlv bj48L2xpbms+LApAQCAtNTIwOCw5ICs1MjY5LDkgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIK ICAgICAgICAgPGZ1bmN0aW9uPnBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlczwvZnVuY3Rpb24+ PC9saW5rPiwgYW5kCiAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBnLWxvZ2ljYWwtc2xvdC1wZWVr LWNoYW5nZXMiPgogICAgICAgICA8ZnVuY3Rpb24+cGdfbG9naWNhbF9zbG90X3BlZWtfY2hhbmdl czwvZnVuY3Rpb24+PC9saW5rPiwKLSAgICAgICAgd2hlbiB1c2VkIHdpdGggbG9naWNhbCBmYWls b3ZlciBzbG90cywgd2lsbCBibG9jayB1bnRpbCBhbGwKLSAgICAgICAgcGh5c2ljYWwgc2xvdHMg c3BlY2lmaWVkIGluIDx2YXJuYW1lPnN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzPC92YXJuYW1l PiBoYXZlCi0gICAgICAgIGNvbmZpcm1lZCBXQUwgcmVjZWlwdC4KKyAgICAgICAgd2hlbiB1c2Vk IHdpdGggbG9naWNhbCBmYWlsb3ZlciBzbG90cywgd2lsbCBibG9jayB1bnRpbCB0aGUgcmVxdWly ZWQKKyAgICAgICAgcGh5c2ljYWwgc2xvdHMgc3BlY2lmaWVkIGluIDx2YXJuYW1lPnN5bmNocm9u aXplZF9zdGFuZGJ5X3Nsb3RzPC92YXJuYW1lPgorICAgICAgICBoYXZlIGNvbmZpcm1lZCBXQUwg cmVjZWlwdC4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFRoZSBzdGFu ZGJ5cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90cyBpbgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vc2xvdC5jCmluZGV4IGQ3ZmI5ZjVhNjdmLi5iODliZWNhZjZiYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Nsb3QuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3RzeW5jLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3N5bmNy ZXAuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtOTEsMTEgKzky LDE5IEBAIHR5cGVkZWYgc3RydWN0IFJlcGxpY2F0aW9uU2xvdE9uRGlzawogICogTm90ZTogdGhp cyBtdXN0IGJlIGEgZmxhdCByZXByZXNlbnRhdGlvbiB0aGF0IGNhbiBiZSBoZWxkIGluIGEgc2lu Z2xlIGNodW5rCiAgKiBvZiBndWNfbWFsbG9jJ2QgbWVtb3J5LCBzbyB0aGF0IGl0IGNhbiBiZSBz dG9yZWQgYXMgdGhlICJleHRyYSIgZGF0YSBmb3IgdGhlCiAgKiBzeW5jaHJvbml6ZWRfc3RhbmRi eV9zbG90cyBHVUMuCisgKgorICogVGhlIGxheW91dCBtaXJyb3JzIFN5bmNSZXBDb25maWdEYXRh IHNvIHRoYXQgdGhlIHNhbWUgcXVvcnVtIGFuZCBwcmlvcml0eQorICogc2VtYW50aWNzIGNhbiBi ZSBleHByZXNzZWQuICBUaGUgc3luY3JlcF9tZXRob2QgZmllbGQgdXNlcyB0aGUKKyAqIFNZTkNf UkVQX0RFRkFVTFQsIFNZTkNfUkVQX1BSSU9SSVRZLCBhbmQgU1lOQ19SRVBfUVVPUlVNIGNvbnN0 YW50cyBmcm9tCisgKiBzeW5jcmVwLmguCiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JLyogTnVt YmVyIG9mIHNsb3QgbmFtZXMgaW4gdGhlIHNsb3RfbmFtZXNbXSAqLwotCWludAkJCW5zbG90bmFt ZXM7CisJaW50CQkJY29uZmlnX3NpemU7CS8qIHRvdGFsIHNpemUgb2YgdGhpcyBzdHJ1Y3QsIGlu IGJ5dGVzICovCisJaW50CQkJbnVtX3N5bmM7CQkvKiBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtdXN0 IGNvbmZpcm0gV0FMCisJCQkJCQkJCSAqIHJlY2VpcHQgYmVmb3JlIGxvZ2ljYWwgZGVjb2Rpbmcg cHJvY2VlZHMgKi8KKwl1aW50OAkJc3luY3JlcF9tZXRob2Q7CS8qIFNZTkNfUkVQXyogbWV0aG9k ICovCisJaW50CQkJbnNsb3RuYW1lczsJCS8qIG51bWJlciBvZiBzbG90IG5hbWVzIHRoYXQgZm9s bG93ICovCiAKIAkvKgogCSAqIHNsb3RfbmFtZXMgY29udGFpbnMgJ25zbG90bmFtZXMnIGNvbnNl Y3V0aXZlIG51bGwtdGVybWluYXRlZCBDIHN0cmluZ3MuCkBAIC0xMDMsNiArMTEyLDI4IEBAIHR5 cGVkZWYgc3RydWN0CiAJY2hhcgkJc2xvdF9uYW1lc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwog fSBTeW5jU3RhbmRieVNsb3RzQ29uZmlnRGF0YTsKIAorLyoKKyAqIFN0YXRlIG9mIGEgcmVwbGlj YXRpb24gc2xvdCBzcGVjaWZpZWQgaW4gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgR1VDLgor ICovCit0eXBlZGVmIGVudW0KK3sKKwlTU19TTE9UX05PVF9GT1VORCwJCS8qIHNsb3QgZG9lcyBu b3QgZXhpc3QgKi8KKwlTU19TTE9UX0xPR0lDQUwsCQkvKiBzbG90IGlzIGxvZ2ljYWwsIG5vdCBw aHlzaWNhbCAqLworCVNTX1NMT1RfSU5WQUxJREFURUQsCS8qIHNsb3QgaGFzIGJlZW4gaW52YWxp ZGF0ZWQgKi8KKwlTU19TTE9UX0lOQUNUSVZFX0xBR0dJTkcsCS8qIHNsb3QgaXMgaW5hY3RpdmUg YW5kIGJlaGluZCB3YWl0X2Zvcl9sc24gKi8KKwlTU19TTE9UX0FDVElWRV9MQUdHSU5HLAkvKiBz bG90IGlzIGFjdGl2ZSBhbmQgYmVoaW5kIHdhaXRfZm9yX2xzbiAqLworfSBTeW5jU3RhbmRieVNs b3RzU3RhdGU7CisKKy8qCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIHN5bmNocm9uaXplZCBzdGFu ZGJ5IHNsb3QncyBzdGF0ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICpz bG90X25hbWU7CQkvKiBuYW1lIG9mIHRoZSBzbG90ICovCisJU3luY1N0YW5kYnlTbG90c1N0YXRl IHN0YXRlOwkvKiBzdGF0ZSBvZiB0aGUgc2xvdCAqLworCVhMb2dSZWNQdHIJcmVzdGFydF9sc247 CS8qIGN1cnJlbnQgcmVzdGFydF9sc24gKHZhbGlkIGZvciBsYWdnaW5nIHN0YXRlcykgKi8KK30g U3luY1N0YW5kYnlTbG90c1N0YXRlSW5mbzsKKwogLyoKICAqIExvb2t1cCB0YWJsZSBmb3Igc2xv dCBpbnZhbGlkYXRpb24gY2F1c2VzLgogICovCkBAIC0yOTYzLDk0ICsyOTk0LDE5MCBAQCBHZXRT bG90SW52YWxpZGF0aW9uQ2F1c2VOYW1lKFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNl IGNhdXNlKQogfQogCiAvKgotICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc2xvdHMg c3BlY2lmaWVkIGluIEdVQyBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cy4KKyAqIFJlbW92ZSBk dXBsaWNhdGUgbWVtYmVyIG5hbWVzIGZyb20gYSBmbGF0IFN5bmNSZXBDb25maWdEYXRhIGluIHBs YWNlLgogICoKLSAqIFRoZSByYXduYW1lIHdpbGwgYmUgcGFyc2VkLCBhbmQgdGhlIHJlc3VsdCB3 aWxsIGJlIHNhdmVkIGludG8gKmVsZW1saXN0LgorICogVGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Yg ZWFjaCBuYW1lIGlzIGtlcHQgYW5kIGlucHV0IG9yZGVyIGlzIHByZXNlcnZlZC4KICAqLwotc3Rh dGljIGJvb2wKLXZhbGlkYXRlX3N5bmNfc3RhbmRieV9zbG90cyhjaGFyICpyYXduYW1lLCBMaXN0 ICoqZWxlbWxpc3QpCitzdGF0aWMgdm9pZAorQ29tcGFjdFN5bmNSZXBDb25maWdNZW1iZXJOYW1l cyhTeW5jUmVwQ29uZmlnRGF0YSAqY29uZmlnKQogewotCS8qIFZlcmlmeSBzeW50YXggYW5kIHBh cnNlIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBpZGVudGlmaWVycyAqLwotCWlmICghU3BsaXRJZGVu dGlmaWVyU3RyaW5nKHJhd25hbWUsICcsJywgZWxlbWxpc3QpKQotCXsKLQkJR1VDX2NoZWNrX2Vy cmRldGFpbCgiTGlzdCBzeW50YXggaXMgaW52YWxpZC4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0K KwljaGFyCSAgICpzcmNfbmFtZTsKKwljaGFyCSAgICpkc3RfbmFtZTsKKwlpbnQJCQl1bmlxdWVf bWVtYmVycyA9IDA7CisJU2l6ZQkJdW5pcXVlX3NpemUgPSBvZmZzZXRvZihTeW5jUmVwQ29uZmln RGF0YSwgbWVtYmVyX25hbWVzKTsKKworCXNyY19uYW1lID0gY29uZmlnLT5tZW1iZXJfbmFtZXM7 CisJZHN0X25hbWUgPSBjb25maWctPm1lbWJlcl9uYW1lczsKIAotCS8qIEl0ZXJhdGUgdGhlIGxp c3QgdG8gdmFsaWRhdGUgZWFjaCBzbG90IG5hbWUgKi8KLQlmb3JlYWNoX3B0cihjaGFyLCBuYW1l LCAqZWxlbWxpc3QpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb25maWctPm5tZW1iZXJzOyBpKysp CiAJewotCQlpbnQJCQllcnJfY29kZTsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0JCWNo YXIJICAgKmVycl9oaW50ID0gTlVMTDsKKwkJY2hhcgkgICAqZXhpc3RpbmdfbmFtZTsKKwkJc2l6 ZV90CQluYW1lX3NpemU7CisJCWJvb2wJCWR1cGxpY2F0ZSA9IGZhbHNlOwogCi0JCWlmICghUmVw bGljYXRpb25TbG90VmFsaWRhdGVOYW1lSW50ZXJuYWwobmFtZSwgZmFsc2UsICZlcnJfY29kZSwK LQkJCQkJCQkJCQkJCSAmZXJyX21zZywgJmVycl9oaW50KSkKKwkJbmFtZV9zaXplID0gc3RybGVu KHNyY19uYW1lKSArIDE7CisJCWV4aXN0aW5nX25hbWUgPSBjb25maWctPm1lbWJlcl9uYW1lczsK KworCQlmb3IgKGludCBqID0gMDsgaiA8IHVuaXF1ZV9tZW1iZXJzOyBqKyspCiAJCXsKLQkJCUdV Q19jaGVja19lcnJjb2RlKGVycl9jb2RlKTsKLQkJCUdVQ19jaGVja19lcnJkZXRhaWwoIiVzIiwg ZXJyX21zZyk7Ci0JCQlpZiAoZXJyX2hpbnQgIT0gTlVMTCkKLQkJCQlHVUNfY2hlY2tfZXJyaGlu dCgiJXMiLCBlcnJfaGludCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAoc3RyY21wKGV4aXN0 aW5nX25hbWUsIHNyY19uYW1lKSA9PSAwKQorCQkJeworCQkJCWR1cGxpY2F0ZSA9IHRydWU7CisJ CQkJYnJlYWs7CisJCQl9CisKKwkJCWV4aXN0aW5nX25hbWUgKz0gc3RybGVuKGV4aXN0aW5nX25h bWUpICsgMTsKIAkJfQorCisJCWlmICghZHVwbGljYXRlKQorCQl7CisJCQlpZiAoZHN0X25hbWUg IT0gc3JjX25hbWUpCisJCQkJbWVtbW92ZShkc3RfbmFtZSwgc3JjX25hbWUsIG5hbWVfc2l6ZSk7 CisKKwkJCWRzdF9uYW1lICs9IG5hbWVfc2l6ZTsKKwkJCXVuaXF1ZV9tZW1iZXJzKys7CisJCQl1 bmlxdWVfc2l6ZSArPSBuYW1lX3NpemU7CisJCX0KKworCQlzcmNfbmFtZSArPSBuYW1lX3NpemU7 CiAJfQogCi0JcmV0dXJuIHRydWU7CisJY29uZmlnLT5ubWVtYmVycyA9IHVuaXF1ZV9tZW1iZXJz OworCWNvbmZpZy0+Y29uZmlnX3NpemUgPSAoaW50KSB1bmlxdWVfc2l6ZTsKIH0KIAogLyoKICAq IEdVQyBjaGVja19ob29rIGZvciBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cworICoKKyAqIFRo aXMgcmV1c2VzIHRoZSBzeW5jcmVwX3l5cGFyc2Uvc3luY3JlcF9zY2FubmVyIGluZnJhc3RydWN0 dXJlIHRoYXQgaXMKKyAqIGFsc28gdXNlZCBmb3Igc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcywg YW5kIGFjY2VwdHMgdGhlc2UgZm9ybXM6CisgKgorICogICBzbG90MSwgc2xvdDIgICAgICAgICAg ICAgICAgICAgLS0gd2FpdCBmb3IgQUxMIGxpc3RlZCBzbG90cworICogICBBTlkgTiAoc2xvdDEs IHNsb3QyLCAuLi4pICAgICAgLS0gd2FpdCBmb3IgYW55IE4tb2YtTSAocXVvcnVtKQorICoKKyAq IE5vdGU6IFNpbXBsZSBsaXN0IHN5bnRheCBpcyBpbnRlcnByZXRlZCBhcyAid2FpdCBmb3IgQUxM IiBmb3IgdGhpcyBHVUMsCisgKiB1bmxpa2Ugc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcyB3aGVy ZSBpdCBtZWFucyAiRklSU1QgMSIuCisgKgorICogQWZ0ZXIgcGFyc2luZywgd2UgdmFsaWRhdGUg ZXZlcnkgbmFtZSBhcyBhIGxlZ2FsIHJlcGxpY2F0aW9uIHNsb3QgbmFtZSwKKyAqIG9taXQgZHVw bGljYXRlIGVudHJpZXMgd2hpbGUgcHJlc2VydmluZyBmaXJzdC1vY2N1cnJlbmNlIG9yZGVyLCBh bmQgdGhlbgorICogYXBwbHkgdGhlIHJlc3VsdGluZyB1bmlxdWUgbGlzdCB0byB0aGUgY29uZmln dXJlZCBzZW1hbnRpY3MuCiAgKi8KIGJvb2wKIGNoZWNrX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKIHsKLQlj aGFyCSAgICpyYXduYW1lOwotCWNoYXIJICAgKnB0cjsKLQlMaXN0CSAgICplbGVtbGlzdDsKLQlp bnQJCQlzaXplOwotCWJvb2wJCW9rOwotCVN5bmNTdGFuZGJ5U2xvdHNDb25maWdEYXRhICpjb25m aWc7Ci0KLQlpZiAoKCpuZXd2YWwpWzBdID09ICdcMCcpCi0JCXJldHVybiB0cnVlOworCWlmICgq bmV3dmFsICE9IE5VTEwgJiYgKCpuZXd2YWwpWzBdICE9ICdcMCcpCisJeworCQl5eXNjYW5fdAlz Y2FubmVyOworCQlpbnQJCQlwYXJzZV9yYzsKKwkJU3luY1N0YW5kYnlTbG90c0NvbmZpZ0RhdGEg KmNvbmZpZzsKKwkJY29uc3QgY2hhciAqbW5hbWU7CisKKwkJLyogUmVzdWx0IG9mIHBhcnNpbmcg aXMgcmV0dXJuZWQgaW4gb25lIG9mIHRoZXNlIHR3byB2YXJpYWJsZXMgKi8KKwkJU3luY1JlcENv bmZpZ0RhdGEgKnN5bmNyZXBfcGFyc2VfcmVzdWx0ID0gTlVMTDsKKwkJY2hhcgkgICAqc3luY3Jl cF9wYXJzZV9lcnJvcl9tc2cgPSBOVUxMOworCisJCS8qIFBhcnNlIHRoZSBzeW5jaHJvbml6ZWQg c3RhbmRieSBzbG90cyBjb25maWd1cmF0aW9uICovCisJCXN5bmNyZXBfc2Nhbm5lcl9pbml0KCpu ZXd2YWwsICZzY2FubmVyKTsKKwkJcGFyc2VfcmMgPSBzeW5jcmVwX3l5cGFyc2UoJnN5bmNyZXBf cGFyc2VfcmVzdWx0LAorCQkJCQkJCQkgICAmc3luY3JlcF9wYXJzZV9lcnJvcl9tc2csCisJCQkJ CQkJCSAgIHNjYW5uZXIpOworCQlzeW5jcmVwX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOworCisJ CWlmIChwYXJzZV9yYyAhPSAwIHx8IHN5bmNyZXBfcGFyc2VfcmVzdWx0ID09IE5VTEwpCisJCXsK KwkJCUdVQ19jaGVja19lcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKTsKKwkJCWlmIChzeW5j cmVwX3BhcnNlX2Vycm9yX21zZykKKwkJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCIlcyIsIHN5bmNy ZXBfcGFyc2VfZXJyb3JfbXNnKTsKKwkJCWVsc2UKKwkJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJc IiVzXCIgcGFyc2VyIGZhaWxlZC4iLAorCQkJCQkJCQkJInN5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KIAotCS8qIE5lZWQgYSBtb2RpZmlhYmxlIGNv cHkgb2YgdGhlIEdVQyBzdHJpbmcgKi8KLQlyYXduYW1lID0gcHN0cmR1cCgqbmV3dmFsKTsKKwkJ aWYgKHN5bmNyZXBfcGFyc2VfcmVzdWx0LT5zeW5jcmVwX21ldGhvZCA9PSBTWU5DX1JFUF9QUklP UklUWSkKKwkJeworCQkJR1VDX2NoZWNrX2VycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSk7CisJCQlHVUNfY2hlY2tfZXJybXNnKCJwcmlvcml0eSBzeW50YXggaXMgbm90IHN1 cHBvcnRlZCBmb3IgcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJCQkJICJzeW5jaHJvbml6ZWRfc3Rh bmRieV9zbG90cyIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CiAKLQkvKiBOb3cgdmVyaWZ5IGlm IHRoZSBzcGVjaWZpZWQgc2xvdHMgZXhpc3QgYW5kIGhhdmUgY29ycmVjdCB0eXBlICovCi0Jb2sg PSB2YWxpZGF0ZV9zeW5jX3N0YW5kYnlfc2xvdHMocmF3bmFtZSwgJmVsZW1saXN0KTsKKwkJaWYg KHN5bmNyZXBfcGFyc2VfcmVzdWx0LT5udW1fc3luYyA8PSAwKQorCQl7CisJCQlHVUNfY2hlY2tf ZXJybXNnKCJudW1iZXIgb2Ygc3luY2hyb25pemVkIHN0YW5kYnkgc2xvdHMgKCVkKSBtdXN0IGJl IGdyZWF0ZXIgdGhhbiB6ZXJvIiwKKwkJCQkJCQkgc3luY3JlcF9wYXJzZV9yZXN1bHQtPm51bV9z eW5jKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQogCi0JaWYgKCFvayB8fCBlbGVtbGlzdCA9PSBO SUwpCi0JewotCQlwZnJlZShyYXduYW1lKTsKLQkJbGlzdF9mcmVlKGVsZW1saXN0KTsKLQkJcmV0 dXJuIG9rOwotCX0KKwkJLyogdmFsaWRhdGUgZXZlcnkgbWVtYmVyIG5hbWUgYXMgYSBzbG90IG5h bWUgKi8KKwkJbW5hbWUgPSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bWVtYmVyX25hbWVzOwogCi0J LyogQ29tcHV0ZSB0aGUgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIFN5bmNTdGFuZGJ5U2xvdHNDb25m aWdEYXRhIHN0cnVjdCAqLwotCXNpemUgPSBvZmZzZXRvZihTeW5jU3RhbmRieVNsb3RzQ29uZmln RGF0YSwgc2xvdF9uYW1lcyk7Ci0JZm9yZWFjaF9wdHIoY2hhciwgc2xvdF9uYW1lLCBlbGVtbGlz dCkKLQkJc2l6ZSArPSBzdHJsZW4oc2xvdF9uYW1lKSArIDE7CisJCWZvciAoaW50IGkgPSAwOyBp IDwgc3luY3JlcF9wYXJzZV9yZXN1bHQtPm5tZW1iZXJzOyBpKyspCisJCXsKKwkJCWludAkJCWVy cl9jb2RlOworCQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7CisJCQljaGFyCSAgICplcnJfaGlu dCA9IE5VTEw7CiAKLQkvKiBHVUMgZXh0cmEgdmFsdWUgbXVzdCBiZSBndWNfbWFsbG9jJ2QsIG5v dCBwYWxsb2MnZCAqLwotCWNvbmZpZyA9IChTeW5jU3RhbmRieVNsb3RzQ29uZmlnRGF0YSAqKSBn dWNfbWFsbG9jKExPRywgc2l6ZSk7Ci0JaWYgKCFjb25maWcpCi0JCXJldHVybiBmYWxzZTsKKwkJ CWlmICghUmVwbGljYXRpb25TbG90VmFsaWRhdGVOYW1lSW50ZXJuYWwobW5hbWUsIGZhbHNlLCAm ZXJyX2NvZGUsCisJCQkJCQkJCQkJCQkJICZlcnJfbXNnLCAmZXJyX2hpbnQpKQorCQkJeworCQkJ CUdVQ19jaGVja19lcnJjb2RlKGVycl9jb2RlKTsKKwkJCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCIl cyIsIGVycl9tc2cpOworCQkJCWlmIChlcnJfaGludCAhPSBOVUxMKQorCQkJCQlHVUNfY2hlY2tf ZXJyaGludCgiJXMiLCBlcnJfaGludCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQogCi0JLyog VHJhbnNmb3JtIHRoZSBkYXRhIGludG8gU3luY1N0YW5kYnlTbG90c0NvbmZpZ0RhdGEgKi8KLQlj b25maWctPm5zbG90bmFtZXMgPSBsaXN0X2xlbmd0aChlbGVtbGlzdCk7CisJCQltbmFtZSArPSBz dHJsZW4obW5hbWUpICsgMTsKKwkJfQogCi0JcHRyID0gY29uZmlnLT5zbG90X25hbWVzOwotCWZv cmVhY2hfcHRyKGNoYXIsIHNsb3RfbmFtZSwgZWxlbWxpc3QpCi0JewotCQlzdHJjcHkocHRyLCBz bG90X25hbWUpOwotCQlwdHIgKz0gc3RybGVuKHNsb3RfbmFtZSkgKyAxOwotCX0KKwkJLyogT21p dCBkdXBsaWNhdGUgc2xvdCBuYW1lcyBzbyBvbmUgc2xvdCBpcyBjb25zaWRlcmVkIG9ubHkgb25j ZS4gKi8KKwkJQ29tcGFjdFN5bmNSZXBDb25maWdNZW1iZXJOYW1lcyhzeW5jcmVwX3BhcnNlX3Jl c3VsdCk7CiAKLQkqZXh0cmEgPSBjb25maWc7CisJCS8qCisJCSAqIEZvciBzeW5jaHJvbml6ZWRf c3RhbmRieV9zbG90cywgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBtZWFucyBhbGwKKwkJICogbGlz dGVkIHNsb3RzIGFyZSByZXF1aXJlZC4gVGhlIHN5bmNyZXAgcGFyc2VyIHByZXNlcnZlcyB0aGlz IHNoYXBlCisJCSAqIGFzIFNZTkNfUkVQX0RFRkFVTFQsIHNvIG1hcCBudW1fc3luYyB0byBubWVt YmVycyB0byBlbmZvcmNlIGFsbC1tb2RlCisJCSAqIHNlbWFudGljcyBhZnRlciByZW1vdmluZyBk dXBsaWNhdGUgbmFtZXMuCisJCSAqLworCQlpZiAoc3luY3JlcF9wYXJzZV9yZXN1bHQtPnN5bmNy ZXBfbWV0aG9kID09IFNZTkNfUkVQX0RFRkFVTFQpCisJCQlzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+ bnVtX3N5bmMgPSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bm1lbWJlcnM7CisKKwkJLyogUmVqZWN0 IG51bV9zeW5jID4gbm1lbWJlcnMgYWZ0ZXIgZHVwbGljYXRlcyBoYXZlIGJlZW4gb21pdHRlZC4g Ki8KKwkJaWYgKHN5bmNyZXBfcGFyc2VfcmVzdWx0LT5udW1fc3luYyA+IHN5bmNyZXBfcGFyc2Vf cmVzdWx0LT5ubWVtYmVycykKKwkJeworCQkJR1VDX2NoZWNrX2Vycm1zZygibnVtYmVyIG9mIHN5 bmNocm9uaXplZCBzdGFuZGJ5IHNsb3RzICglZCkgbXVzdCBub3QgZXhjZWVkIHRoZSBudW1iZXIg b2YgdW5pcXVlIGxpc3RlZCBzbG90cyAoJWQpIiwKKwkJCQkJCQkgc3luY3JlcF9wYXJzZV9yZXN1 bHQtPm51bV9zeW5jLAorCQkJCQkJCSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bm1lbWJlcnMpOwor CQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogQnVpbGQgU3luY1N0YW5kYnlTbG90 c0NvbmZpZ0RhdGEgZnJvbSB0aGUgcGFyc2VkIFN5bmNSZXBDb25maWdEYXRhLgorCQkgKiBTaW5j ZSB0aGUgc3RydWN0dXJlcyBoYXZlIGlkZW50aWNhbCBsYXlvdXQsIHdlIGNhbiB1c2UgdGhlIHNh bWUKKwkJICogY29uZmlnX3NpemUuCisJCSAqLworCQljb25maWcgPSAoU3luY1N0YW5kYnlTbG90 c0NvbmZpZ0RhdGEgKikKKwkJCWd1Y19tYWxsb2MoTE9HLCBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+ Y29uZmlnX3NpemUpOworCQlpZiAoIWNvbmZpZykKKwkJCXJldHVybiBmYWxzZTsKKworCQljb25m aWctPmNvbmZpZ19zaXplID0gc3luY3JlcF9wYXJzZV9yZXN1bHQtPmNvbmZpZ19zaXplOworCQlj b25maWctPm51bV9zeW5jID0gc3luY3JlcF9wYXJzZV9yZXN1bHQtPm51bV9zeW5jOworCQljb25m aWctPnN5bmNyZXBfbWV0aG9kID0gc3luY3JlcF9wYXJzZV9yZXN1bHQtPnN5bmNyZXBfbWV0aG9k OworCQljb25maWctPm5zbG90bmFtZXMgPSBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bm1lbWJlcnM7 CisKKwkJLyogQ29weSBhbGwgc2xvdCBuYW1lcyBpbiBvbmUgb3BlcmF0aW9uICovCisJCW1lbWNw eShjb25maWctPnNsb3RfbmFtZXMsCisJCQkgICBzeW5jcmVwX3BhcnNlX3Jlc3VsdC0+bWVtYmVy X25hbWVzLAorCQkJICAgc3luY3JlcF9wYXJzZV9yZXN1bHQtPmNvbmZpZ19zaXplIC0KKwkJCSAg IG9mZnNldG9mKFN5bmNSZXBDb25maWdEYXRhLCBtZW1iZXJfbmFtZXMpKTsKKworCQkqZXh0cmEg PSBjb25maWc7CisJfQorCWVsc2UKKwkJKmV4dHJhID0gTlVMTDsKIAotCXBmcmVlKHJhd25hbWUp OwotCWxpc3RfZnJlZShlbGVtbGlzdCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMwOTksMTgg KzMyMjYsMTE3IEBAIFNsb3RFeGlzdHNJblN5bmNTdGFuZGJ5U2xvdHMoY29uc3QgY2hhciAqc2xv dF9uYW1lKQogfQogCiAvKgotICogUmV0dXJuIHRydWUgaWYgdGhlIHNsb3RzIHNwZWNpZmllZCBp biBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyBoYXZlIGNhdWdodCB1cCB0bwotICogdGhlIGdp dmVuIFdBTCBsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgorICogUmVwb3J0IHByb2JsZW0gc3Rh dGVzIGZvciBzeW5jaHJvbml6ZWQgc3RhbmRieSBzbG90cyB0aGF0IHByZXZlbnRlZCB0aGUKKyAq IGNhdGNoLXVwIHJlcXVpcmVtZW50IGZyb20gYmVpbmcgbWV0LgorICovCitzdGF0aWMgdm9pZAor UmVwb3J0VW5hdmFpbGFibGVTeW5jU3RhbmRieVNsb3RzKFN5bmNTdGFuZGJ5U2xvdHNTdGF0ZUlu Zm8gKnNsb3Rfc3RhdGVzLAorCQkJCQkJCQkgIGludCBudW1fc2xvdF9zdGF0ZXMsIGludCBlbGV2 ZWwsCisJCQkJCQkJCSAgWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24pCit7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBudW1fc2xvdF9zdGF0ZXM7IGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnNsb3RfbmFt ZSA9IHNsb3Rfc3RhdGVzW2ldLnNsb3RfbmFtZTsKKworCQlzd2l0Y2ggKHNsb3Rfc3RhdGVzW2ld LnN0YXRlKQorCQl7CisJCQljYXNlIFNTX1NMT1RfTk9UX0ZPVU5EOgorCQkJCWVyZXBvcnQoZWxl dmVsLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCWVycm1zZygicmVwbGljYXRpb24gc2xvdCBcIiVzXCIgc3BlY2lmaWVkIGluIHBhcmFtZXRl ciBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCSAgIHNsb3RfbmFtZSwgInN5bmNocm9u aXplZF9zdGFuZGJ5X3Nsb3RzIiksCisJCQkJCQllcnJkZXRhaWwoIkxvZ2ljYWwgcmVwbGljYXRp b24gaXMgd2FpdGluZyBvbiB0aGUgc3RhbmRieSBhc3NvY2lhdGVkIHdpdGggcmVwbGljYXRpb24g c2xvdCBcIiVzXCIuIiwKKwkJCQkJCQkJICBzbG90X25hbWUpLAorCQkJCQkJZXJyaGludCgiQ3Jl YXRlIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBvciBhbWVuZCBwYXJhbWV0ZXIgXCIlc1wi LiIsCisJCQkJCQkJCXNsb3RfbmFtZSwgInN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIFNTX1NMT1RfTE9HSUNBTDoKKwkJCQllcmVwb3J0KGVsZXZl bCwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQllcnJtc2coImNhbm5vdCBzcGVjaWZ5IGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIg aW4gcGFyYW1ldGVyIFwiJXNcIiIsCisJCQkJCQkJICAgc2xvdF9uYW1lLCAic3luY2hyb25pemVk X3N0YW5kYnlfc2xvdHMiKSwKKwkJCQkJCWVycmRldGFpbCgiTG9naWNhbCByZXBsaWNhdGlvbiBp cyB3YWl0aW5nIGZvciBjb3JyZWN0aW9uIG9uIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiLiIsCisJ CQkJCQkJCSAgc2xvdF9uYW1lKSwKKwkJCQkJCWVycmhpbnQoIlJlbW92ZSB0aGUgbG9naWNhbCBy ZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBmcm9tIHBhcmFtZXRlciBcIiVzXCIuIiwKKwkJCQkJCQkJ c2xvdF9uYW1lLCAic3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMiKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgU1NfU0xPVF9JTlZBTElEQVRFRDoKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJ CWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJ CQllcnJtc2coInBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIHNwZWNpZmllZCBpbiBw YXJhbWV0ZXIgXCIlc1wiIGhhcyBiZWVuIGludmFsaWRhdGVkIiwKKwkJCQkJCQkgICBzbG90X25h bWUsICJzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyIpLAorCQkJCQkJZXJyZGV0YWlsKCJMb2dp Y2FsIHJlcGxpY2F0aW9uIGlzIHdhaXRpbmcgb24gdGhlIHN0YW5kYnkgYXNzb2NpYXRlZCB3aXRo IHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiLiIsCisJCQkJCQkJCSAgc2xvdF9uYW1lKSwKKwkJCQkJ CWVycmhpbnQoIkRyb3AgYW5kIHJlY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiwg b3IgYW1lbmQgcGFyYW1ldGVyIFwiJXNcIi4iLAorCQkJCQkJCQlzbG90X25hbWUsICJzeW5jaHJv bml6ZWRfc3RhbmRieV9zbG90cyIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTU19TTE9UX0lO QUNUSVZFX0xBR0dJTkc6CisJCQkJZXJlcG9ydChlbGV2ZWwsCisJCQkJCQllcnJjb2RlKEVSUkNP REVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJZXJybXNnKCJyZXBs aWNhdGlvbiBzbG90IFwiJXNcIiBzcGVjaWZpZWQgaW4gcGFyYW1ldGVyIFwiJXNcIiBkb2VzIG5v dCBoYXZlIGFjdGl2ZV9waWQiLAorCQkJCQkJCSAgIHNsb3RfbmFtZSwgInN5bmNocm9uaXplZF9z dGFuZGJ5X3Nsb3RzIiksCisJCQkJCQllcnJkZXRhaWwoIkxvZ2ljYWwgcmVwbGljYXRpb24gaXMg d2FpdGluZyBvbiB0aGUgc3RhbmRieSBhc3NvY2lhdGVkIHdpdGggcmVwbGljYXRpb24gc2xvdCBc IiVzXCIuIiwKKwkJCQkJCQkJICBzbG90X25hbWUpLAorCQkJCQkJZXJyaGludCgiU3RhcnQgdGhl IHN0YW5kYnkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBsaWNhdGlvbiBzbG90IFwiJXNcIiwgb3Ig YW1lbmQgcGFyYW1ldGVyIFwiJXNcIi4iLAorCQkJCQkJCQlzbG90X25hbWUsICJzeW5jaHJvbml6 ZWRfc3RhbmRieV9zbG90cyIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTU19TTE9UX0FDVElW RV9MQUdHSU5HOgorCQkJCWlmICghWExvZ1JlY1B0cklzVmFsaWQoc2xvdF9zdGF0ZXNbaV0ucmVz dGFydF9sc24pKQorCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQllcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkJCWVycm1zZygicmVwbGlj YXRpb24gc2xvdCBcIiVzXCIgc3BlY2lmaWVkIGluIHBhcmFtZXRlciBcIiVzXCIgaGFzIG5vdCBj YXVnaHQgdXAiLAorCQkJCQkJCQkgICBzbG90X25hbWUsICJzeW5jaHJvbml6ZWRfc3RhbmRieV9z bG90cyIpLAorCQkJCQkJCWVycmRldGFpbCgiVGhlIHNsb3QncyByZXN0YXJ0X2xzbiBpcyBub3Qg eWV0IHNldDsgcmVxdWlyZWQgTFNOIGlzICVYLyVYLiIsCisJCQkJCQkJCSAgTFNOX0ZPUk1BVF9B UkdTKHdhaXRfZm9yX2xzbikpKTsKKwkJCQllbHNlCisJCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJ CQkJCWVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJCQkJZXJybXNnKCJyZXBsaWNhdGlvbiBzbG90IFwiJXNcIiBzcGVjaWZpZWQgaW4gcGFyYW1l dGVyIFwiJXNcIiBoYXMgbm90IGNhdWdodCB1cCIsCisJCQkJCQkJCSAgIHNsb3RfbmFtZSwgInN5 bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIiksCisJCQkJCQkJZXJyZGV0YWlsKCJUaGUgc2xvdCdz IHJlc3RhcnRfbHNuICVYLyVYIGlzIGJlaGluZCB0aGUgcmVxdWlyZWQgJVgvJVguIiwKKwkJCQkJ CQkJICBMU05fRk9STUFUX0FSR1Moc2xvdF9zdGF0ZXNbaV0ucmVzdGFydF9sc24pLAorCQkJCQkJ CQkgIExTTl9GT1JNQVRfQVJHUyh3YWl0X2Zvcl9sc24pKSk7CisJCQkJYnJlYWs7CisKKwkJCWRl ZmF1bHQ6CisJCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCQlBc3NlcnQoZmFsc2UpOwor CQkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHJlcXVp cmVkIHN0YW5kYnkgc2xvdHMgaGF2ZSBjYXVnaHQgdXAgdG8gdGhlIGdpdmVuIFdBTAorICogbG9j YXRpb24sIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB0 aGUgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgY29uZmlndXJhdGlvbjoKICAqCi0gKiBUaGUg ZWxldmVsIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGVycm9yIGxldmVsIHVzZWQgZm9yIGxvZ2dp bmcgbWVzc2FnZXMKLSAqIHJlbGF0ZWQgdG8gc2xvdHMgdGhhdCBkbyBub3QgZXhpc3QsIGFyZSBp bnZhbGlkYXRlZCwgb3IgYXJlIGluYWN0aXZlLgorICogICBTaW1wbGUgbGlzdCAoZS5nLiwgInNs b3QxLCBzbG90MiIpOgorICogICAgIEFMTCBzbG90cyBtdXN0IGhhdmUgY2F1Z2h0IHVwLiBSZXR1 cm5zIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiAgIEFOWSBOIChlLmcuLCAiQU5ZIDIgKHNsb3Qx LCBzbG90Miwgc2xvdDMpIik6CisgKiAgICAgV2FpdCBmb3IgYW55IE4gZWxpZ2libGUgc2xvdHMu IFNraXBzIG1pc3NpbmcsIGludmFsaWQsIGxvZ2ljYWwsIGFuZAorICogICAgIGxhZ2dpbmcgc2xv dHMgKGluYWN0aXZlIG9yIGFjdGl2ZSkgdG8gZmluZCBOIHNsb3RzIHRoYXQgaGF2ZSBjYXVnaHQg dXAuCisgKgorICogVGhlIGVsZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBlcnJvciBsZXZl bCB1c2VkIGZvciByZXBvcnRpbmcgaXNzdWVzCisgKiByZWxhdGVkIHRvIHRoZSBzbG90cyBzcGVj aWZpZWQgaW4gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgd2hlbiB0aGUKKyAqIGNhdGNoLXVw IHJlcXVpcmVtZW50IGlzIG5vdCBtZXQuCiAgKi8KIGJvb2wKIFN0YW5kYnlTbG90c0hhdmVDYXVn aHR1cChYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbiwgaW50IGVsZXZlbCkKIHsKIAljb25zdCBjaGFy ICpuYW1lOwogCWludAkJCWNhdWdodF91cF9zbG90X251bSA9IDA7CisJaW50CQkJcmVxdWlyZWQ7 CiAJWExvZ1JlY1B0cgltaW5fcmVzdGFydF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwlib29s CQl3YWl0X2Zvcl9hbGw7CisJU3luY1N0YW5kYnlTbG90c1N0YXRlSW5mbyAqc2xvdF9zdGF0ZXM7 CisJaW50CQkJbnVtX3Nsb3Rfc3RhdGVzID0gMDsKIAogCS8qCiAJICogRG9uJ3QgbmVlZCB0byB3 YWl0IGZvciB0aGUgc3RhbmRieXMgdG8gY2F0Y2ggdXAgaWYgdGhlcmUgaXMgbm8gdmFsdWUgaW4K QEAgLTMxMzQsMTIgKzMzNjAsNDQgQEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQ dHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKQogCQlzc19vbGRlc3RfZmx1c2hfbHNuID49IHdh aXRfZm9yX2xzbikKIAkJcmV0dXJuIHRydWU7CiAKKwkvKgorCSAqIERldGVybWluZSBob3cgbWFu eSBzbG90cyBhcmUgcmVxdWlyZWQgYW5kIHdoZXRoZXIgd2UncmUgaW4gIndhaXQgZm9yCisJICog QUxMIiBtb2RlIHZlcnN1cyAid2FpdCBmb3IgTi1vZi1NIiBtb2RlLgorCSAqCisJICogd2FpdF9m b3JfYWxsID0gdHJ1ZSBtZWFucyB3ZSBuZWVkIEFMTCBzbG90cyB0byBiZSByZWFkeSAoc2ltcGxl CisJICogbGlzdCBzeW50YXggbGlrZSAic2xvdDEsIHNsb3QyIikuIEluIHRoaXMgbW9kZSwgd2Ug c3RvcCBjaGVja2luZworCSAqIG9uIHRoZSBmaXJzdCBzbG90IHRoYXQgaXMgbWlzc2luZy9pbnZh bGlkL2xvZ2ljYWwsIG9yIHRoZSBmaXJzdCBzbG90CisJICogdGhhdCBpcyBsYWdnaW5nIChpbmFj dGl2ZSBvciBhY3RpdmUpLgorCSAqCisJICogd2FpdF9mb3JfYWxsID0gZmFsc2UgbWVhbnMgd2Ug c2VsZWN0IE4gZnJvbSBNIGNhbmRpZGF0ZXMgKEFOWSBOIHN5bnRheCkuCisJICogSW4gdGhpcyBt b2RlLCBzbG90cyBhbHJlYWR5IGNhdWdodCB1cCBhcmUgY291bnRlZCBldmVuIGlmIGluYWN0aXZl LCBhbmQKKwkgKiBsYWdnaW5nIHNsb3RzIGFyZSBza2lwcGVkIHVudGlsIGVub3VnaCBzbG90cyBo YXZlIGNhdWdodCB1cC4KKwkgKiBEdXBsaWNhdGUgY29uZmlndXJlZCBzbG90IG5hbWVzIGRvIG5v dCBhcHBlYXIgaGVyZSBiZWNhdXNlIHRoZSBjaGVjayBob29rCisJICogY29tcGFjdHMgdGhlbSBv dXQgb2YgdGhlIHBhcnNlZCBjb25maWd1cmF0aW9uLgorCSAqLworCXJlcXVpcmVkID0gc3luY2hy b25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5udW1fc3luYzsKKwl3YWl0X2Zvcl9hbGwgPSAo cmVxdWlyZWQgPT0gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5uc2xvdG5hbWVz KTsKKworCS8qCisJICogQWxsb2NhdGUgYXJyYXkgdG8gdHJhY2sgc2xvdCBzdGF0ZXMuIFNpemUg aXQgdG8gdGhlIHRvdGFsIG51bWJlciBvZgorCSAqIGNvbmZpZ3VyZWQgc2xvdHMgc2luY2UgaW4g dGhlIHdvcnN0IGNhc2UgYWxsIGNvdWxkIGhhdmUgcHJvYmxlbSBzdGF0ZXMuCisJICovCisJc2xv dF9zdGF0ZXMgPSBwYWxsb2NfYXJyYXkoU3luY1N0YW5kYnlTbG90c1N0YXRlSW5mbywKKwkJCQkJ CSAgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmlnLT5uc2xvdG5hbWVzKTsKKwogCS8q CiAJICogVG8gcHJldmVudCBjb25jdXJyZW50IHNsb3QgZHJvcHBpbmcgYW5kIGNyZWF0aW9uIHdo aWxlIGZpbHRlcmluZyB0aGUKIAkgKiBzbG90cywgdGFrZSB0aGUgUmVwbGljYXRpb25TbG90Q29u dHJvbExvY2sgb3V0c2lkZSBvZiB0aGUgbG9vcC4KIAkgKi8KIAlMV0xvY2tBY3F1aXJlKFJlcGxp Y2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOwogCisJLyoKKwkgKiBJdGVyYXRlIHRo cm91Z2ggY29uZmlndXJlZCBzbG90cywgY2hlY2tpbmcgdGhlaXIgc3RhdGUgYW5kIHRyYWNraW5n CisJICogaG93IG1hbnkgaGF2ZSBjYXVnaHQgdXAuIFByb2JsZW0gc3RhdGVzIGFyZSByZWNvcmRl ZCBmb3IgZGVmZXJyZWQKKwkgKiByZXBvcnRpbmc6IG1pc3NpbmcvbG9naWNhbC9pbnZhbGlkYXRl ZCBzbG90cywgYW5kIGxhZ2dpbmcgc2xvdHMKKwkgKiAoaW5hY3RpdmUgb3IgYWN0aXZlKS4gTWVz c2FnZXMgYXJlIG9ubHkgZW1pdHRlZCBpZiB0aGUgY2F0Y2gtdXAKKwkgKiByZXF1aXJlbWVudCBp c24ndCBtZXQuCisJICovCiAJbmFtZSA9IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX2NvbmZp Zy0+c2xvdF9uYW1lczsKIAlmb3IgKGludCBpID0gMDsgaSA8IHN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzX2NvbmZpZy0+bnNsb3RuYW1lczsgaSsrKQogCXsKQEAgLTMxNTAsMzUgKzM0MDgsMjgg QEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQg ZWxldmVsKQogCiAJCXNsb3QgPSBTZWFyY2hOYW1lZFJlcGxpY2F0aW9uU2xvdChuYW1lLCBmYWxz ZSk7CiAKLQkJLyoKLQkJICogSWYgYSBzbG90IG5hbWUgcHJvdmlkZWQgaW4gc3luY2hyb25pemVk X3N0YW5kYnlfc2xvdHMgZG9lcyBub3QKLQkJICogZXhpc3QsIHJlcG9ydCBhIG1lc3NhZ2UgYW5k IGV4aXQgdGhlIGxvb3AuCi0JCSAqLwogCQlpZiAoIXNsb3QpCiAJCXsKLQkJCWVyZXBvcnQoZWxl dmVsLAotCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJ CQllcnJtc2coInJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXIg XCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkJCSAgIG5hbWUsICJzeW5jaHJvbml6ZWRfc3Rh bmRieV9zbG90cyIpLAotCQkJCQllcnJkZXRhaWwoIkxvZ2ljYWwgcmVwbGljYXRpb24gaXMgd2Fp dGluZyBvbiB0aGUgc3RhbmRieSBhc3NvY2lhdGVkIHdpdGggcmVwbGljYXRpb24gc2xvdCBcIiVz XCIuIiwKLQkJCQkJCQkgIG5hbWUpLAotCQkJCQllcnJoaW50KCJDcmVhdGUgdGhlIHJlcGxpY2F0 aW9uIHNsb3QgXCIlc1wiIG9yIGFtZW5kIHBhcmFtZXRlciBcIiVzXCIuIiwKLQkJCQkJCQluYW1l LCAic3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMiKSk7Ci0JCQlicmVhazsKKwkJCS8qIFJlY29y ZCBTbG90IFN0YXRlICovCisJCQlzbG90X3N0YXRlc1tudW1fc2xvdF9zdGF0ZXNdLnNsb3RfbmFt ZSA9IG5hbWU7CisJCQlzbG90X3N0YXRlc1tudW1fc2xvdF9zdGF0ZXNdLnN0YXRlID0gU1NfU0xP VF9OT1RfRk9VTkQ7CisJCQludW1fc2xvdF9zdGF0ZXMrKzsKKworCQkJaWYgKHdhaXRfZm9yX2Fs bCkKKwkJCQlicmVhazsKKwkJCWdvdG8gbmV4dF9zbG90OwogCQl9CiAKLQkJLyogU2FtZSBhcyBh Ym92ZTogaWYgYSBzbG90IGlzIG5vdCBwaHlzaWNhbCwgZXhpdCB0aGUgbG9vcC4gKi8KIAkJaWYg KFNsb3RJc0xvZ2ljYWwoc2xvdCkpCiAJCXsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQllcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCQllcnJtc2coImNhbm5v dCBzcGVjaWZ5IGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgaW4gcGFyYW1ldGVyIFwi JXNcIiIsCi0JCQkJCQkgICBuYW1lLCAic3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMiKSwKLQkJ CQkJZXJyZGV0YWlsKCJMb2dpY2FsIHJlcGxpY2F0aW9uIGlzIHdhaXRpbmcgZm9yIGNvcnJlY3Rp b24gb24gcmVwbGljYXRpb24gc2xvdCBcIiVzXCIuIiwKLQkJCQkJCQkgIG5hbWUpLAotCQkJCQll cnJoaW50KCJSZW1vdmUgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIgZnJvbSBw YXJhbWV0ZXIgXCIlc1wiLiIsCi0JCQkJCQkJbmFtZSwgInN5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzIikpOwotCQkJYnJlYWs7CisJCQkvKiBSZWNvcmQgU2xvdCBTdGF0ZSAqLworCQkJc2xvdF9z dGF0ZXNbbnVtX3Nsb3Rfc3RhdGVzXS5zbG90X25hbWUgPSBuYW1lOworCQkJc2xvdF9zdGF0ZXNb bnVtX3Nsb3Rfc3RhdGVzXS5zdGF0ZSA9IFNTX1NMT1RfTE9HSUNBTDsKKwkJCW51bV9zbG90X3N0 YXRlcysrOworCisJCQlpZiAod2FpdF9mb3JfYWxsKQorCQkJCWJyZWFrOworCQkJZ290byBuZXh0 X3Nsb3Q7CiAJCX0KIAogCQlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKQEAgLTMxODks MzMgKzM0NDAsMzQgQEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhMb2dSZWNQdHIgd2FpdF9m b3JfbHNuLCBpbnQgZWxldmVsKQogCiAJCWlmIChpbnZhbGlkYXRlZCkKIAkJewotCQkJLyogU3Bl Y2lmaWVkIHBoeXNpY2FsIHNsb3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQgKi8KLQkJCWVyZXBvcnQo ZWxldmVsLAotCQkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAotCQkJCQllcnJtc2coInBoeXNpY2FsIHJlcGxpY2F0aW9uIHNsb3QgXCIlc1wiIHNw ZWNpZmllZCBpbiBwYXJhbWV0ZXIgXCIlc1wiIGhhcyBiZWVuIGludmFsaWRhdGVkIiwKLQkJCQkJ CSAgIG5hbWUsICJzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyIpLAotCQkJCQllcnJkZXRhaWwo IkxvZ2ljYWwgcmVwbGljYXRpb24gaXMgd2FpdGluZyBvbiB0aGUgc3RhbmRieSBhc3NvY2lhdGVk IHdpdGggcmVwbGljYXRpb24gc2xvdCBcIiVzXCIuIiwKLQkJCQkJCQkgIG5hbWUpLAotCQkJCQll cnJoaW50KCJEcm9wIGFuZCByZWNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIsIG9y IGFtZW5kIHBhcmFtZXRlciBcIiVzXCIuIiwKLQkJCQkJCQluYW1lLCAic3luY2hyb25pemVkX3N0 YW5kYnlfc2xvdHMiKSk7Ci0JCQlicmVhazsKKwkJCS8qIFJlY29yZCBTbG90IFN0YXRlICovCisJ CQlzbG90X3N0YXRlc1tudW1fc2xvdF9zdGF0ZXNdLnNsb3RfbmFtZSA9IG5hbWU7CisJCQlzbG90 X3N0YXRlc1tudW1fc2xvdF9zdGF0ZXNdLnN0YXRlID0gU1NfU0xPVF9JTlZBTElEQVRFRDsKKwkJ CW51bV9zbG90X3N0YXRlcysrOworCisJCQlpZiAod2FpdF9mb3JfYWxsKQorCQkJCWJyZWFrOwor CQkJZ290byBuZXh0X3Nsb3Q7CiAJCX0KIAogCQlpZiAoIVhMb2dSZWNQdHJJc1ZhbGlkKHJlc3Rh cnRfbHNuKSB8fCByZXN0YXJ0X2xzbiA8IHdhaXRfZm9yX2xzbikKIAkJewotCQkJLyogTG9nIGEg bWVzc2FnZSBpZiBubyBhY3RpdmVfcGlkIGZvciB0aGlzIHBoeXNpY2FsIHNsb3QgKi8KLQkJCWlm IChpbmFjdGl2ZSkKLQkJCQllcmVwb3J0KGVsZXZlbCwKLQkJCQkJCWVycmNvZGUoRVJSQ09ERV9P QkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCi0JCQkJCQllcnJtc2coInJlcGxpY2F0 aW9uIHNsb3QgXCIlc1wiIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXIgXCIlc1wiIGRvZXMgbm90IGhh dmUgYWN0aXZlX3BpZCIsCi0JCQkJCQkJICAgbmFtZSwgInN5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzIiksCi0JCQkJCQllcnJkZXRhaWwoIkxvZ2ljYWwgcmVwbGljYXRpb24gaXMgd2FpdGluZyBv biB0aGUgc3RhbmRieSBhc3NvY2lhdGVkIHdpdGggcmVwbGljYXRpb24gc2xvdCBcIiVzXCIuIiwK LQkJCQkJCQkJICBuYW1lKSwKLQkJCQkJCWVycmhpbnQoIlN0YXJ0IHRoZSBzdGFuZGJ5IGFzc29j aWF0ZWQgd2l0aCB0aGUgcmVwbGljYXRpb24gc2xvdCBcIiVzXCIsIG9yIGFtZW5kIHBhcmFtZXRl ciBcIiVzXCIuIiwKLQkJCQkJCQkJbmFtZSwgInN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIikp OworCQkJLyoKKwkJCSAqIElmIGEgc2xvdCBpcyBpbmFjdGl2ZSBhbmQgbGFnZ2luZywgcmVwb3J0 IGl0IGFzIGluYWN0aXZlLgorCQkJICogSWYgaXQgaXMgYWN0aXZlIGFuZCBsYWdnaW5nLCByZXBv cnQgaXQgYXMgbGFnZ2luZy4KKwkJCSAqCisJCQkgKiBJbiBBTEwgbW9kZTogbXVzdCB3YWl0IGZv ciBpdC4KKwkJCSAqIEluIEFOWSBOIChxdW9ydW0pIG1vZGU6IHNraXAgYW5kIHVzZSBhbm90aGVy IHNsb3QuCisJCQkgKi8KKwkJCXNsb3Rfc3RhdGVzW251bV9zbG90X3N0YXRlc10uc2xvdF9uYW1l ID0gbmFtZTsKKwkJCXNsb3Rfc3RhdGVzW251bV9zbG90X3N0YXRlc10uc3RhdGUgPQorCQkJCWlu YWN0aXZlID8gU1NfU0xPVF9JTkFDVElWRV9MQUdHSU5HIDogU1NfU0xPVF9BQ1RJVkVfTEFHR0lO RzsKKwkJCXNsb3Rfc3RhdGVzW251bV9zbG90X3N0YXRlc10ucmVzdGFydF9sc24gPSByZXN0YXJ0 X2xzbjsKKwkJCW51bV9zbG90X3N0YXRlcysrOwogCi0JCQkvKiBDb250aW51ZSBpZiB0aGUgY3Vy cmVudCBzbG90IGhhc24ndCBjYXVnaHQgdXAuICovCi0JCQlicmVhazsKKwkJCWlmICh3YWl0X2Zv cl9hbGwpCisJCQkJYnJlYWs7CisJCQlnb3RvIG5leHRfc2xvdDsKIAkJfQogCiAJCUFzc2VydChy ZXN0YXJ0X2xzbiA+PSB3YWl0X2Zvcl9sc24pOwpAQCAtMzIyNiwxNyArMzQ3OCwzMCBAQCBTdGFu ZGJ5U2xvdHNIYXZlQ2F1Z2h0dXAoWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24sIGludCBlbGV2ZWwp CiAKIAkJY2F1Z2h0X3VwX3Nsb3RfbnVtKys7CiAKKwkJLyogU3RvcCBwcm9jZXNzaW5nIGlmIHRo ZSByZXF1aXJlZCBudW1iZXIgb2Ygc2xvdHMgaGF2ZSBjYXVnaHQgdXAuICovCisJCWlmIChjYXVn aHRfdXBfc2xvdF9udW0gPj0gcmVxdWlyZWQpCisJCQlicmVhazsKKworbmV4dF9zbG90OgogCQlu YW1lICs9IHN0cmxlbihuYW1lKSArIDE7CiAJfQogCiAJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlv blNsb3RDb250cm9sTG9jayk7CiAKIAkvKgotCSAqIFJldHVybiBmYWxzZSBpZiBub3QgYWxsIHRo ZSBzdGFuZGJ5cyBoYXZlIGNhdWdodCB1cCB0byB0aGUgc3BlY2lmaWVkCi0JICogV0FMIGxvY2F0 aW9uLgorCSAqIElmIHRoZSByZXF1aXJlZCBudW1iZXIgb2Ygc2xvdHMgaGF2ZSBub3QgY2F1Z2h0 IHVwLCByZXBvcnQgYW55CisJICogcmVjb3JkZWQgcHJvYmxlbSBzdGF0ZXMgYW5kIHJldHVybiBm YWxzZS4KKwkgKgorCSAqIFdlIG9ubHkgZW1pdCBtZXNzYWdlcyB3aGVuIHRoZSByZXF1aXJlbWVu dCBpcyBub3QgbWV0IHRvIGF2b2lkCisJICogbWlzbGVhZGluZyBtZXNzYWdlcyBpbiBxdW9ydW0v cHJpb3JpdHkgbW9kZSB3aGVyZSBvdGhlciBzbG90cyBtYXkKKwkgKiBoYXZlIHNhdGlzZmllZCB0 aGUgY29uZGl0aW9uIGRlc3BpdGUgc29tZSBzbG90cyBoYXZpbmcgaXNzdWVzLgogCSAqLwotCWlm IChjYXVnaHRfdXBfc2xvdF9udW0gIT0gc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHNfY29uZmln LT5uc2xvdG5hbWVzKQorCWlmIChjYXVnaHRfdXBfc2xvdF9udW0gPCByZXF1aXJlZCkKKwl7CisJ CVJlcG9ydFVuYXZhaWxhYmxlU3luY1N0YW5kYnlTbG90cyhzbG90X3N0YXRlcywgbnVtX3Nsb3Rf c3RhdGVzLCBlbGV2ZWwsIHdhaXRfZm9yX2xzbik7CisJCXBmcmVlKHNsb3Rfc3RhdGVzKTsKIAkJ cmV0dXJuIGZhbHNlOworCX0KIAogCS8qIFRoZSBzc19vbGRlc3RfZmx1c2hfbHNuIG11c3Qgbm90 IHJldHJlYXQuICovCiAJQXNzZXJ0KCFYTG9nUmVjUHRySXNWYWxpZChzc19vbGRlc3RfZmx1c2hf bHNuKSB8fApAQCAtMzI0NCw2ICszNTA5LDcgQEAgU3RhbmRieVNsb3RzSGF2ZUNhdWdodHVwKFhM b2dSZWNQdHIgd2FpdF9mb3JfbHNuLCBpbnQgZWxldmVsKQogCiAJc3Nfb2xkZXN0X2ZsdXNoX2xz biA9IG1pbl9yZXN0YXJ0X2xzbjsKIAorCXBmcmVlKHNsb3Rfc3RhdGVzKTsKIAlyZXR1cm4gdHJ1 ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTNfc3luY2hyb25pemVk X3N0YW5kYnlfc2xvdHNfcXVvcnVtLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTNfc3luY2hy b25pemVkX3N0YW5kYnlfc2xvdHNfcXVvcnVtLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi43NjBmMTBmMzhhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Y292ZXJ5L3QvMDUzX3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzX3F1b3J1bS5wbApAQCAtMCww ICsxLDM3OCBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3Qgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMg d2l0aCBkaWZmZXJlbnQgc3ludGF4IG1vZGVzOgorIyAtIFBsYWluIGxpc3QgKEFMTCBtb2RlKTog c2xvdDEsIHNsb3QyCisjIC0gQU5ZIE4gKHF1b3J1bSBtb2RlKTogQU5ZIE4gKHNsb3QxLCBzbG90 MiwgLi4uKQorIworIyBTZXR1cDogYSAzLW5vZGUgY2x1c3RlciB3aXRoIG9uZSBwcmltYXJ5LCB0 d28gcGh5c2ljYWwgc3RhbmRieXMsIGFuZCBhCisjIGxvZ2ljYWwgZGVjb2RpbmcgY2xpZW50IHVz aW5nIGEgZmFpbG92ZXItZW5hYmxlZCBzbG90LgorIworIyAgICAgICAgICAgICAgIHwgLS0tLT4g c3RhbmRieTEgKHByaW1hcnlfc2xvdF9uYW1lID0gc2IxX3Nsb3QpCisjIHByaW1hcnkgLS0tLS0t fAorIyAgICAgICAgICAgICAgIHwgLS0tLT4gc3RhbmRieTIgKHByaW1hcnlfc2xvdF9uYW1lID0g c2IyX3Nsb3QpCisjCisjICAgc3luY2hyb25vdXNfc3RhbmRieV9uYW1lcyA9ICdBTlkgMSAoc3Rh bmRieTEsIHN0YW5kYnkyKScKKyMKKyMgVGVzdCBzY2VuYXJpb3M6CisjCisjIEEpIFBsYWluIGxp c3QgJ3NiMV9zbG90LCBzYjJfc2xvdCcgKEFMTCBtb2RlKQorIyAgICAtIFdvcmtzIHdoZW4gYWxs IHNsb3RzIGFyZSBhdmFpbGFibGUKKyMgICAgLSBCbG9ja3MgaW1tZWRpYXRlbHkgaWYgQU5ZIHNs b3QgaXMgdW5hdmFpbGFibGUKKyMKKyMgQikgQU5ZIE4gKHNiMV9zbG90LCBzYjJfc2xvdCwgLi4u KSAocXVvcnVtIG1vZGUpCisjICAgIC0gUHJvY2VlZHMgd2hlbiBhdCBsZWFzdCBOIHNsb3RzIGhh dmUgY2F1Z2h0IHVwCisjICAgIC0gU2tpcHMgbWlzc2luZy9pbnZhbGlkL2xvZ2ljYWwgc2xvdHMg YW5kIGxhZ2dpbmcgc2xvdHMgKGluYWN0aXZlIG9yIGFjdGl2ZSkKKyMgICAgICB0byBmaW5kIE4g Y2F1Z2h0LXVwIHNsb3RzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdh bGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMS4g IENyZWF0ZSBhIHByaW1hcnkgd2l0aCBsb2dpY2FsIHJlcGxpY2F0aW9uIGxldmVsLCBhdXRvdmFj dXVtIG9mZgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChhbGxvd3Nfc3Ry ZWFtaW5nID0+ICdsb2dpY2FsJyk7CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVz cWwuY29uZicsIHFxeworYXV0b3ZhY3V1bSA9IG9mZgorfSk7CiskcHJpbWFyeS0+c3RhcnQ7CisK KyMgUGh5c2ljYWwgcmVwbGljYXRpb24gc2xvdHMgZm9yIHRoZSB0d28gc3RhbmRieXMKKyRwcmlt YXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2NyZWF0ZV9waHlzaWNhbF9y ZXBsaWNhdGlvbl9zbG90KCdzYjFfc2xvdCcpOyIpOworJHByaW1hcnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ3Ni Ml9zbG90Jyk7Iik7CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDIuICBDcmVhdGUgc3RhbmRi eTEgYW5kIHN0YW5kYnkyIGZyb20gYSBmcmVzaCBiYWNrdXAKKyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitteSAkYmFja3VwX25hbWUgPSAnYmFzZV9iYWNrdXAnOworJHByaW1hcnktPmJhY2t1cCgkYmFj a3VwX25hbWUpOworCitteSAkY29ubnN0ciA9ICRwcmltYXJ5LT5jb25uc3RyOworCitteSAkc3Rh bmRieTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnkxJyk7Ciskc3Rh bmRieTEtPmluaXRfZnJvbV9iYWNrdXAoCisJJHByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNf c3RyZWFtaW5nID0+IDEsCisJaGFzX3Jlc3RvcmluZyA9PiAxKTsKKyRzdGFuZGJ5MS0+YXBwZW5k X2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sgPSBv bgorcHJpbWFyeV9zbG90X25hbWUgPSAnc2IxX3Nsb3QnCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRj b25uc3RyIGRibmFtZT1wb3N0Z3JlcycKKykpOworCitteSAkc3RhbmRieTIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N0YW5kYnkyJyk7Ciskc3RhbmRieTItPmluaXRfZnJvbV9i YWNrdXAoCisJJHByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+IDEsCisJ aGFzX3Jlc3RvcmluZyA9PiAxKTsKKyRzdGFuZGJ5Mi0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVz cWwuY29uZicsIHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sgPSBvbgorcHJpbWFyeV9zbG90X25h bWUgPSAnc2IyX3Nsb3QnCitwcmltYXJ5X2Nvbm5pbmZvID0gJyRjb25uc3RyIGRibmFtZT1wb3N0 Z3JlcycKKykpOworCiskc3RhbmRieTEtPnN0YXJ0OworJHN0YW5kYnkyLT5zdGFydDsKKworJHBy aW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5MSk7CiskcHJpbWFyeS0+d2Fp dF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkyKTsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyMgMy4gIENyZWF0ZSBhIGxvZ2ljYWwgZmFpbG92ZXIgc2xvdCBvbiB0aGUgcHJpbWFyeQorIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ2xvZ2ljYWxfZmFpbG92ZXIn LCAndGVzdF9kZWNvZGluZycsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7IgorKTsKKworIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyMgNC4gIENvbmZpZ3VyZSBxdW9ydW0gc3luYyByZXAgd2l0aCBBTEwtbW9k ZSBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRwcmlt YXJ5LT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXF7CitzeW5jaHJvbm91c19z dGFuZGJ5X25hbWVzID0gJ0FOWSAxIChzdGFuZGJ5MSwgc3RhbmRieTIpJworc3luY2hyb25pemVk X3N0YW5kYnlfc2xvdHMgPSAnc2IxX3Nsb3QsIHNiMl9zbG90JworfSk7CiskcHJpbWFyeS0+cmVs b2FkOworCiskcHJpbWFyeS0+d2FpdF9mb3JfcmVwbGF5X2NhdGNodXAoJHN0YW5kYnkxKTsKKyRw cmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTIpOworCisjIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyA1LiAgQ29uZmlybSB0aGF0IHF1b3J1bSBzeW5jIHJlcCBpcyBhY3RpdmUg Zm9yIGJvdGggc3RhbmRieXMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpcyggJHByaW1hcnktPnNh ZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJcXtTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0 X3JlcGxpY2F0aW9uIFdIRVJFIHN5bmNfc3RhdGUgPSAncXVvcnVtJzt9CisJKSwKKwknMicsCisJ J2JvdGggc3RhbmRieXMgYXJlIGluIHF1b3J1bSBzeW5jIHN0YXRlJyk7CisKKyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBBUlQgQTogUGxhaW4g bGlzdCAoQUxMIG1vZGUpIGJsb2NrcyB3aGVuIGFueSBzbG90IGlzIHVuYXZhaWxhYmxlCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiskc3RhbmRi eTEtPnN0b3A7CisKKyMgQ29tbWl0IHN1Y2NlZWRzIHNpbmNlIHN0YW5kYnkyIHNhdGlzZmllcyB0 aGUgcXVvcnVtLgorbXkgJGVtaXRfbHNuID0gJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGdfbG9naWNhbF9lbWl0X21lc3NhZ2UodHJ1ZSwgJ3F0ZXN0JywgJ2FsbF9t b2RlX2Jsb2NrcycpOyIKKyk7CitsaWtlKCRlbWl0X2xzbiwgcXIvXlswLTlBLUZdK1wvWzAtOUEt Rl0rJC8sCisJJ3N5bmNocm9ub3VzIGNvbW1pdCBzdWNjZWVkcyB3aXRoIHF1b3J1bSAoc3RhbmRi eTIgYWxpdmUpJyk7CisKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRi eTIpOworCitteSAkbG9nX29mZnNldCA9IC1zICRwcmltYXJ5LT5sb2dmaWxlOworCitteSAkYmcg PSAkcHJpbWFyeS0+YmFja2dyb3VuZF9wc3FsKAorCSdwb3N0Z3JlcycsCisJb25fZXJyb3Jfc3Rv cCA9PiAwLAorCXRpbWVvdXQgPT4gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2Rl ZmF1bHQpOworCiskYmctPnF1ZXJ5X3VudGlsKAorCXFyL2RlY29kZV9zdGFydC8sIHEoCisgICBc ZWNobyBkZWNvZGVfc3RhcnQKKyAgIFNFTEVDVCBwZ19sb2dpY2FsX3Nsb3RfcGVla19jaGFuZ2Vz KCdsb2dpY2FsX2ZhaWxvdmVyJywgTlVMTCwgTlVMTCk7CispKTsKKworIyBXYWl0IGZvciB0aGUg cHJpbWFyeSB0byBsb2cgYSB3YXJuaW5nIGFib3V0IHNiMV9zbG90IG5vdCBiZWluZyBhY3RpdmUu CiskcHJpbWFyeS0+d2FpdF9mb3JfbG9nKAorCXFyL3JlcGxpY2F0aW9uIHNsb3QgXCJzYjFfc2xv dFwiIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXIgInN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIiBk b2VzIG5vdCBoYXZlIGFjdGl2ZV9waWQvLAorCSRsb2dfb2Zmc2V0KTsKKworcGFzcygncGxhaW4g bGlzdCAoQUxMIG1vZGUpOiBsb2dpY2FsIGRlY29kaW5nIGJsb2NrZWQgYnkgdW5hdmFpbGFibGUg c2IxX3Nsb3QnKTsKKworIyBVbmJsb2NrIGJ5IGNsZWFyaW5nIHN5bmNocm9uaXplZF9zdGFuZGJ5 X3Nsb3RzLgorJHByaW1hcnktPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hy b25pemVkX3N0YW5kYnlfc2xvdHMnLCAiJyciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CiskYmctPnF1 aXQ7CisKKyMgQ29uc3VtZSB0aGUgY2hhbmdlIHNvIHRoZSBzbG90IGlzIGNsZWFuIGZvciB0aGUg bmV4dCB0ZXN0LgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIHBn X2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9naWNhbF9mYWlsb3ZlcicsIE5VTEwsIE5VTEwp O30pOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworIyBQQVJUIEI6IEFOWSBtb2RlIChxdW9ydW0pIOKAlCBsb2dpY2FsIGRlY29kaW5nIHByb2Nl ZWRzIHdpdGggTi1vZi1NIHNsb3RzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworCisjIFN3aXRjaCBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyB0 byBxdW9ydW0gbW9kZTogbmVlZCBvbmx5IDEgb2YgMiBzbG90cy4KKyRwcmltYXJ5LT5hZGp1c3Rf Y29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzJywKKwki J0FOWSAxIChzYjFfc2xvdCwgc2IyX3Nsb3QpJyIpOworJHByaW1hcnktPnJlbG9hZDsKKworIyBz dGFuZGJ5MSBpcyBzdGlsbCBkb3duOyBzdGFuZGJ5MiBpcyB1cC4KKworIyBFbWl0IGFub3RoZXIg dHJhbnNhY3Rpb25hbCBtZXNzYWdlIOKAlCBjb21taXRzIHZpYSBxdW9ydW0uCiskcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0 cnVlLCAncXRlc3QnLCAncXVvcnVtX21vZGVfd29ya3MnKTsiCispOworJHByaW1hcnktPndhaXRf Zm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKKyMgSW4gcXVvcnVtIG1vZGUsIGxvZ2lj YWwgZGVjb2Rpbmcgc2hvdWxkIE5PVCBibG9jayBiZWNhdXNlIHNiMl9zbG90IGhhcworIyBjYXVn aHQgdXAgYW5kIDEtb2YtMiBpcyBzdWZmaWNpZW50LgorbXkgJGRlY29kZWQgPSAkcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXtTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxMKQorCSAgV0hF UkUgZGF0YSBMSUtFICclcXVvcnVtX21vZGVfd29ya3MlJzt9KTsKK2lzKCRkZWNvZGVkLCAnMScs CisJJ0FOWSBtb2RlOiBsb2dpY2FsIGRlY29kaW5nIHByb2NlZWRzIHdpdGggb25seSBzYjJfc2xv dCBjYXVnaHQgdXAnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgUEFSVCBDOiBSZS1jaGVjayBwbGFpbiBsaXN0IChBTEwgbW9kZSkgd29y a3Mgd2hlbiBib3RoIHN0YW5kYnlzIGFyZSB1cAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBCcmluZyBzdGFuZGJ5MSBiYWNrLgorJHN0YW5k YnkxLT5zdGFydDsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEp OworCisjIFN3aXRjaCB0byBwbGFpbiBsaXN0IChBTEwgbW9kZSkgd2l0aCBib3RoIHNsb3RzLgor JHByaW1hcnktPmFkanVzdF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hyb25pemVkX3N0 YW5kYnlfc2xvdHMnLAorCSInc2IxX3Nsb3QsIHNiMl9zbG90JyIpOworJHByaW1hcnktPnJlbG9h ZDsKKworJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGdfbG9naWNh bF9lbWl0X21lc3NhZ2UodHJ1ZSwgJ3F0ZXN0JywgJ2JvdGhfY2F1Z2h0X3VwJyk7IgorKTsKKyRw cmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3RhbmRieTEpOworJHByaW1hcnktPndh aXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5Mik7CisKK215ICRkZWNvZGVkX2JjID0gJHBy aW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIGNvdW50KCopIEZST00gcGdf bG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdsb2dpY2FsX2ZhaWxvdmVyJywgTlVMTCwgTlVMTCkK KwkgIFdIRVJFIGRhdGEgTElLRSAnJWJvdGhfY2F1Z2h0X3VwJSc7fSk7CitpcygkZGVjb2RlZF9i YywgJzEnLAorCSdwbGFpbiBsaXN0OiB3b3JrcyB3aGVuIGFsbCBzdGFuZGJ5cyBhcmUgdXAnKTsK KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg UEFSVCBEOiBBTlkgMiB3YWl0cyBvbiBhbiBhY3RpdmUgbGFnZ2luZyBzbG90CisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFN0b3Agc3RhbmRi eTEgc28gc2IxX3Nsb3QgY2FuIGJlIGNvbnRyb2xsZWQgYnkgYSByYXcgcmVwbGljYXRpb24gY29u bmVjdGlvbgorIyB0aGF0IGtlZXBzIHRoZSBzbG90IGFjdGl2ZSB3aGlsZSBsYWdnaW5nLgorJHN0 YW5kYnkxLT5zdG9wOworCitteSAkb2xkX2xzbiA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpOyIpOworCiskcHJpbWFyeS0+YWRq dXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cycs CisJIidBTlkgMiAoc2IxX3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmltYXJ5LT5yZWxvYWQ7CisK K215ICRhbnkyX2xhZ19sc24gPSAkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0cnVlLCAncXRlc3QnLCAnYW55XzJfbGFnZ2lu Z19ibG9ja3MnKTsiCispOworJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFu ZGJ5Mik7CisKK215ICRyZXBsX2FueTIgPSAkcHJpbWFyeS0+YmFja2dyb3VuZF9wc3FsKAorCSdw b3N0Z3JlcycsCisJcmVwbGljYXRpb24gPT4gJ2RhdGFiYXNlJywKKwlvbl9lcnJvcl9zdG9wID0+ IDAsCisJdGltZW91dCA9PiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVs dCk7CisKKyRyZXBsX2FueTItPnF1ZXJ5X3VudGlsKAorCXFyL14kLywKKwkiU1RBUlRfUkVQTElD QVRJT04gU0xPVCBzYjFfc2xvdCBQSFlTSUNBTCAkb2xkX2xzbjtcbiIpOworCiskcHJpbWFyeS0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCBxeworCVNFTEVDVCBhY3RpdmVfcGlkIElTIE5P VCBOVUxMCisJRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cworCVdIRVJFIHNsb3RfbmFtZSA9ICdz YjFfc2xvdCcKK30pIG9yIGRpZSAicmVwbGljYXRpb24gY29ubmVjdGlvbiBkaWQgbm90IGFjdGl2 YXRlIHNiMV9zbG90IjsKKworbXkgJGJnX2FueTIgPSAkcHJpbWFyeS0+YmFja2dyb3VuZF9wc3Fs KAorCSdwb3N0Z3JlcycsCisJb25fZXJyb3Jfc3RvcCA9PiAwLAorCXRpbWVvdXQgPT4gJFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpOworCiskYmdfYW55Mi0+cXVlcnlf dW50aWwoCisJcXIvZGVjb2RlX3N0YXJ0LywgcSgKKyAgIFxlY2hvIGRlY29kZV9zdGFydAorICAg U0VMRUNUIHBnX2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBO VUxMLCBOVUxMKTsKKykpOworCitvayggJHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJCSdw b3N0Z3JlcycsIHF7CitTRUxFQ1QgRVhJU1RTICgKKwlTRUxFQ1QgMQorCUZST00gcGdfc3RhdF9h Y3Rpdml0eQorCVdIRVJFIHdhaXRfZXZlbnQgPSAnV2FpdEZvclN0YW5kYnlDb25maXJtYXRpb24n CisJICBBTkQgcXVlcnkgTElLRSAnJXBnX2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJydsb2dp Y2FsX2ZhaWxvdmVyJyclJworKTsKK30pLAorCSdBTlkgMjogZGVjb2Rpbmcgd2FpdHMgd2hlbiBv bmx5IG9uZSBzbG90IGhhcyBjYXVnaHQgdXAnKTsKKworJHByaW1hcnktPmFkanVzdF9jb25mKCdw b3N0Z3Jlc3FsLmNvbmYnLCAnc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMnLCAiJyciKTsKKyRw cmltYXJ5LT5yZWxvYWQ7CiskYmdfYW55Mi0+cXVpdDsKKyRyZXBsX2FueTItPnF1aXQ7CisKKyMg Q29uc3VtZSB0aGUgY2hhbmdlIGZvciB0aGUgbmV4dCB0ZXN0LgorJHByaW1hcnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9n aWNhbF9mYWlsb3ZlcicsIE5VTEwsIE5VTEwpO30pOworCisjIEJyaW5nIHN0YW5kYnkxIGJhY2sg dXAgZm9yIHRoZSByZW1haW5pbmcgdGVzdHMuCiskc3RhbmRieTEtPnN0YXJ0OworJHByaW1hcnkt PndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFuZGJ5MSk7CisKKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUEFSVCBFOiBEdXBsaWNhdGUg ZW50cmllcyBhcmUgaWdub3JlZCBmb3IgcXVvcnVtIGNvdW50aW5nCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFN0b3Agc3RhbmRieTIgc28g b25seSBzYjFfc2xvdCBjYW4gY2F0Y2ggdXAuCiskc3RhbmRieTItPnN0b3A7CisKKyRwcmltYXJ5 LT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3N5bmNocm9uaXplZF9zdGFuZGJ5X3Ns b3RzJywKKwkiJ0FOWSAyIChzYjFfc2xvdCwgc2IxX3Nsb3QsIHNiMl9zbG90KSciKTsKKyRwcmlt YXJ5LT5yZWxvYWQ7CisKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU IHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUsICdxdGVzdCcsICdkdXBsaWNhdGVfZW50cmll c19pZ25vcmVkJyk7IgorKTsKKyRwcmltYXJ5LT53YWl0X2Zvcl9yZXBsYXlfY2F0Y2h1cCgkc3Rh bmRieTEpOworCitteSAkYmdfZHVwID0gJHByaW1hcnktPmJhY2tncm91bmRfcHNxbCgKKwkncG9z dGdyZXMnLAorCW9uX2Vycm9yX3N0b3AgPT4gMCwKKwl0aW1lb3V0ID0+ICRQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKKworJGJnX2R1cC0+cXVlcnlfdW50aWwoCisJ cXIvZGVjb2RlX3N0YXJ0LywgcSgKKyAgIFxlY2hvIGRlY29kZV9zdGFydAorICAgU0VMRUNUIHBn X2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJ2xvZ2ljYWxfZmFpbG92ZXInLCBOVUxMLCBOVUxM KTsKKykpOworCitvayggJHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3Jlcycs IHF7CitTRUxFQ1QgRVhJU1RTICgKKwlTRUxFQ1QgMQorCUZST00gcGdfc3RhdF9hY3Rpdml0eQor CVdIRVJFIHdhaXRfZXZlbnQgPSAnV2FpdEZvclN0YW5kYnlDb25maXJtYXRpb24nCisJICBBTkQg cXVlcnkgTElLRSAnJXBnX2xvZ2ljYWxfc2xvdF9wZWVrX2NoYW5nZXMoJydsb2dpY2FsX2ZhaWxv dmVyJyclJworKTsKK30pLAorCSdkdXBsaWNhdGUgZW50cmllcyBhcmUgaWdub3JlZCB3aGVuIGNv dW50aW5nIHF1b3J1bSBzbG90cycpOworCiskcHJpbWFyeS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsICdzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cycsICInJyIpOworJHByaW1hcnkt PnJlbG9hZDsKKyRiZ19kdXAtPnF1aXQ7CisKKyMgQ29uc3VtZSB0aGUgY2hhbmdlIGZvciB0aGUg bmV4dCB0ZXN0LgorJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXF7U0VMRUNUIHBn X2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnbG9naWNhbF9mYWlsb3ZlcicsIE5VTEwsIE5VTEwp O30pOworCisjIEJyaW5nIHN0YW5kYnkyIGJhY2sgdXAgZm9yIHZhbGlkYXRpb24gdGVzdHMuCisk c3RhbmRieTItPnN0YXJ0OworJHByaW1hcnktPndhaXRfZm9yX3JlcGxheV9jYXRjaHVwKCRzdGFu ZGJ5Mik7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgUEFSVCBGOiBWZXJpZnkgR1VDIHZhbGlkYXRpb24gcmVqZWN0cyBiYWQgdmFsdWVz CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitt eSAoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycik7CisKKyMgTiBleGNlZWRzIG51bWJlciBvZiBs aXN0ZWQgc2xvdHMKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRwcmltYXJ5LT5wc3Fs KCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBTRVQgc3luY2hyb25pemVkX3N0YW5kYnlfc2xv dHMgPSAnQU5ZIDMgKHNiMV9zbG90LCBzYjJfc2xvdCknOyIpOworbGlrZSgkc3RkZXJyLCBxci9F UlJPUi8sCisJJ0dVQyByZWplY3RzIEFOWSBOIHdoZW4gTiA+IG51bWJlciBvZiBsaXN0ZWQgc2xv dHMnKTsKKworIyBNaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMKKygkcmVzdWx0LCAkc3Rkb3V0 LCAkc3RkZXJyKSA9ICRwcmltYXJ5LT5wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBT RVQgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgPSAnQU5ZIDEgKHNiMV9zbG90LCBzYjJfc2xv dCc7Iik7CitsaWtlKCRzdGRlcnIsIHFyL0VSUk9SLywKKwknR1VDIHJlamVjdHMgbWFsZm9ybWVk IEFOWSBzeW50YXgnKTsKKworIyBQcmlvcml0eSBzeW50YXggaXMgbm90IHN1cHBvcnRlZCBieSBz eW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyB5ZXQKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJy KSA9ICRwcmltYXJ5LT5wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBTRVQgc3luY2hy b25pemVkX3N0YW5kYnlfc2xvdHMgPSAnRklSU1QgMSAoc2IxX3Nsb3QsIHNiMl9zbG90KSc7Iik7 CitsaWtlKCRzdGRlcnIsIHFyL3ByaW9yaXR5IHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLywKKwkn R1VDIHJlamVjdHMgRklSU1Qgc3ludGF4Jyk7CisKKyMgTGVnYWN5IHByaW9yaXR5IHN5bnRheCBp cyBub3Qgc3VwcG9ydGVkIGJ5IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIHlldAorKCRyZXN1 bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJHByaW1hcnktPnBzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgU1lTVEVNIFNFVCBzeW5jaHJvbml6ZWRfc3RhbmRieV9zbG90cyA9ICcxIChzYjFfc2xvdCwg c2IyX3Nsb3QpJzsiKTsKK2xpa2UoJHN0ZGVyciwgcXIvcHJpb3JpdHkgc3ludGF4IGlzIG5vdCBz dXBwb3J0ZWQvLAorCSdHVUMgcmVqZWN0cyBsZWdhY3kgcHJpb3JpdHkgc3ludGF4Jyk7CisKKyMg SW52YWxpZCBzbG90IG5hbWUKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRwcmltYXJ5 LT5wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RFTSBTRVQgc3luY2hyb25pemVkX3N0YW5k Ynlfc2xvdHMgPSAnQU5ZIDEgKElOVkFMSURfVVBQRVIpJzsiKTsKK2xpa2UoJHN0ZGVyciwgcXIv RVJST1IvLAorCSdHVUMgcmVqZWN0cyBpbnZhbGlkIHNsb3QgbmFtZSBpbiBBTlkgc3ludGF4Jyk7 CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENsZWFudXAKKyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwZ19kcm9wX3JlcGxp Y2F0aW9uX3Nsb3QoJ2xvZ2ljYWxfZmFpbG92ZXInKTsiKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0t IAoyLjQzLjAKCg== --000000000000ad42c10653689944--