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.94.2) (envelope-from ) id 1tiXME-00H6Wd-KW for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Feb 2025 11:26:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tiXMC-0063ae-Nh for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Feb 2025 11:26:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tiXMC-0063aP-6k for pgsql-hackers@lists.postgresql.org; Thu, 13 Feb 2025 11:26:13 +0000 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tiXMA-000bLt-0P for pgsql-hackers@lists.postgresql.org; Thu, 13 Feb 2025 11:26:12 +0000 Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-471c15c24f0so4510091cf.1 for ; Thu, 13 Feb 2025 03:26:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739445968; x=1740050768; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KHh8rPXsxMjEpDfOZ6eZJW8RVNOOxfTnZcD3g9X5nic=; b=ZE+S4RKYZecoZmuge1Iuw6LrfE+lmT/h+TVysQ0BznBblO8RpCO2SjKS1Z9V6+2MEW +xlIQeN3qOnakFtLJUS2cZezgStdGRNmhnn+n6pRPr1yOQd8g0egtc4QZFeHmxrIlP04 /owjlY33Sz5d7gqf5lPqa+KhKHjiSmS7jcSOHD4ZB2wwYaKq9Zb8rPQShUzhCb4uxW2A fyd+47hHIjh1zOGPi7xsmonZSnE3oHed078j09HtJTxepejwvSyB6BGhO03ze7rn8PGD Ufp2bmpEguXzVzhd33vUOCK/mg69DQqhAZi0diAgV9oUVR6nvQ3juBTMw3/VF8065x+f pdZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739445968; x=1740050768; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KHh8rPXsxMjEpDfOZ6eZJW8RVNOOxfTnZcD3g9X5nic=; b=mSmfroqZY/U9AMLaquxqv9ZUaNopopWwhwFgdIIaqI3IJ9W4cH2tJ8AH7te0be+ujw Kk+ajBwHMtNEAuH+LPElvFRuknXWlDqc4Rq4ifhic0/QzeI/rqYdZ3+SNuuD1n1uflJ8 53weF3KjaOPxcndbgDPktTiSzKCf6dcnHFI8JJp/V1gwd0veXdz2k4JCUPjhw8HXJ9Ix pUVDE3//9PxUbkqAcfqg+gXi09fw6pDX/3L+HHe7rmGlHSA155vVGDcSN93Bx3/z8HL/ G1yRzxllfq9QwOWi5Zatodzj5wBln40B0uwKAQ4zYDTn8+7obXP16JrM/iwkpnYOv1op 4OWw== X-Forwarded-Encrypted: i=1; AJvYcCXI7RKnp+FA8/z5PZXo6UjLJpm8+cTCd+VHsfSrCDCrQJsoRBsz6Ky8FpZdV5pyUAXNZTADU+SSkbYl0ApK@lists.postgresql.org X-Gm-Message-State: AOJu0Yy4NVCgbqLuyOUAK56UhO7T/bzu403Btp2q5SXcSmtb/MHIAuGo ezbNSQZj0RD6yZ/u3+R8Tt4SrVa49zUNhQbxZ4AdfsuLG2AGur6b8Kqnh21bWUnd5CAkjBP7AXt Eb/2UMcI1zZU/NkenKO8BTlnEx38= X-Gm-Gg: ASbGncskJW6zrvTNvQ7lCqb0zGnLuYrP2Rj2br1h5CTXgUikhCbj9KUurxqM5VUlq2u wh9lVDP+uj3bKR+J7KKxhHmL1osi7mCjdJ+uKgSPoIkn5i6vtvvMm0PA8ldAe8Ly9gvUKnjKt+W g6h+99Kr417fEB6OASrWF5UmE1RiGjUaw= X-Google-Smtp-Source: AGHT+IEvBvszVE5QmTAvSNSq5hdjexXJeAZs6T0V+mor8ULGg6PKX1avZvl84DGb6oQVts+ROdyxUnATF+EfKilXrUs= X-Received: by 2002:ac8:580f:0:b0:471:8e54:b367 with SMTP id d75a77b69052e-471afe2c349mr96988161cf.21.1739445968268; Thu, 13 Feb 2025 03:26:08 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 13 Feb 2025 16:55:56 +0530 X-Gm-Features: AWEUYZlKu-q9fym6V5zS6sECFvWSksY_cVHO-tbIsfGrYs5kdKtIsRA9wZTmS9U Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000000b9133062e045342" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000b9133062e045342 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Jian. On Wed, 12 Feb 2025 at 12:45, jian he wrote: > > On Wed, Feb 12, 2025 at 1:17=E2=80=AFAM Mahendra Singh Thalor > wrote: > > > > > > > > There are some tests per https://commitfest.postgresql.org/52/5495, I > > > will check it later. > > hi. > the cfbot failure is related to function _tocEntryRequired > > if (strcmp(te->desc, "DATABASE") =3D=3D 0 || > strcmp(te->desc, "DATABASE PROPERTIES") =3D=3D 0) > { > - if (ropt->createDB) > + if (ropt->createDB || AH->format !=3D archNull) > return REQ_SCHEMA; > else > return 0; > > for restoring multiple databases: > in v16 implementation: pg_restore even if you do not specify --create, > it actually did what pg_restore --create option does. > > if there are multiple databases in the archive: > to make the pg_restore --file output is usable, the output file need > have \connect and CREATE DATABASE > command. that is exactly what --create option would do. > pg_restore --file behavior need align with pg_restore --dbname. > therefore pg_restore restoring multiple databases will use --create optio= n. > > > we can either error out (pg_fatal) saying > restoring multiple databases requires the pg_restore --create option. > Or we can add a pg_log_info saying > pg_restore --create option will be set to true while restoring > multiple databases. In my earlier version, I was giving an error if --create option was not specified. I think it will be good and more preferable if we give an error without the --create option if dump was taken from pg_dumpall. Even though there is a single database in the dump of pg_dumpall, it is possible that a particular database hasn't been created. Ex: -d postgres and we have db1 dump in file. In this case, we have only one database dump but this database has not been created. If the user wants to restore a single database, then the user should use a single database dump file. Forcefully adding --create option is not a good idea, instead we will give an error to the user and let him correct the inputs. Apart from the above handling, I fixed all the pending review comments in this patch and made some more changes. Here, I am attaching an updated patch for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000000b9133062e045342 Content-Type: application/octet-stream; name="v17_pg_dumpall-with-non-text_format-13th_feb.patch" Content-Disposition: attachment; filename="v17_pg_dumpall-with-non-text_format-13th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7396hlj0 RnJvbSA2YzAyYzI5MTUxNmU4MTI5NDNkYzVlMWYzZTcxMjJjNzc1NzlhNWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAxMyBGZWIgMjAyNSAxNjo0MToxOCArMDUzMApTdWJqZWN0OiBbUEFU Q0hdICBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCByZXN0 b3JlIGl0IAogYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1m b3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkp CgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1l CkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdf ZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoK Z2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0 Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2Vz IGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9p ZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3Jt YXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRlZCwg cmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3RvcmUg LS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81CiAg IC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBkYm9p ZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9u cyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJO ICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBn aXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywg bm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmll ZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpm b3IgZ2xvYmFsLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGdsb2JhbC5kYXQgZmls ZSBpcyBleGlzdCBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwgZ2xvYmFscyBm cm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9uZSBieSBvbmUK ZnJvbSBtYXAuZGF0IGxpc3QgKGlmIGV4aXN0KQoKVE9ETzE6IFdlIG5lZWQgdG8gdGhpbmsgZm9y IC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOIGZvciBwZ19yZXN0b3JlLgphcyBvZiBub3csIFNF TEVDVCAxIFdIRVJFIFhYWCBPUEVSQVRPUihwZ19jYXRhbG9nLn4pICdeKFBBVFRFUk4pJCcgQ09M TEFURSBwZ19jYXRhbG9nLmRlZmF1bHQKaWYgZGIgY29ubmVjdGlvbiwKaWYgbm8gZGIgY29ubmVj dGlvbiwgdGhlbiBQQVRURVJOPU5BTUUgbWF0Y2hpbmcgb25seQoKVE9ETzI6IFdlIG5lZWQgdG8g bWFrZSBjaGFuZ2VzIGZvciBleGl0X25pY2VseSBhcyB3ZSBhcmUgb25lIGVudHJ5IGZvciBlYWNo IGRhdGFiYXNlIHdoaWxlCnJlc3RvcmluZy4gTUFYX09OX0VYSVRfTklDRUxZCgpUT0RPMzogc29t ZSBtb3JlIHRlc3QgY2FzZXMgZm9yIG5ldyBhZGRlZCBvcHRpb25zLgoKVE9ETzQ6IFdlIGNhbiBk dW1wIGFuZCByZXN0b3JlIGRhdGFiYXNlcyBpbiBwYXJhbGxlbCBtb2RlLgpUaGlzIG5lZWRzIG1v cmUgc3R1ZHkKCnRocmVhZDoKaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9m bGF0L0NBS1l0TkFwOXZPdHlkWEwzX3BuR0olMkJUZXRadE4lM0RGWVNuWlNNQ3FYY2VVM21rSFB4 UGclNDBtYWlsLmdtYWlsLmNvbSMwNjY0MzNjYjVhZTAwN2NiZTM1ZmVmZGRmNzk2ZDUyZgotLS0K LS0tCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICB8ICA4MCAr Ky0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgMzEgKwogc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyB8IDI4NiArKysrKysrKwogc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCB8ICAyNiArCiBzcmMvYmluL3BnX2R1bXAv bWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXAuaCAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyAgICAgfCAgMzUgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyAgICAgICAg fCAgIDMgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICAgICAgfCA1NTIgKysrKysr Ky0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jICAgICAgICAgICAgIHwgODE5 ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwg ICAgICAgICAgIHwgICA5ICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAg ICAgfCAgIDIgKwogMTUgZmlsZXMgY2hhbmdlZCwgMTUyOSBpbnNlcnRpb25zKCspLCAzMzIgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9w Z19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCAzOWQ5 M2MyYzBlMy4uNmUxOTc1ZjVmZjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVt cGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xNiw3 ICsxNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAgIDxy ZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBh IHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0IGEgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9u IHNwZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2PgogCiAg PHJlZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDcgKzEyMSw4MyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmll ZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0 IGlzIHVzZWQuCi0gICAgICAgPC9wYXJhPgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4g YmUgb21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1wIGZpbGVzLiAg SWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0aGVuIHBhc3Mg dGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMgY2FuIGJlIHRh a2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIGZvcm1hdC4K KyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisKKyAgICAgICAgSWYg bm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2JhbCBzcWwgY29t bWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxpc3Qgb2YgYWxs IHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgQXBhcnQgZnJv bSB0aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBuYW1lIHdpbGwg YmUgY3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGlyZWN0b3J5LCB0 aGVyZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAgICAgICBkYXRh YmFzZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3RvcnksIHRoZW4g dG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVuZGVyIGRib2lk IHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGRpcmVjdG9y eS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBVbmRl ciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVhdGUgYSBkaXJl Y3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UKKyAgICAgICAgICAg b2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBvZiBDb250ZW50cyBm aWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3RzIGluIGEgbWFjaGlu ZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBBIGRpcmVjdG9yeSBm b3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0aCBzdGFuZGFy ZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAgICAgdW5jb21w cmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwgbHo0LCBvciB6 c3RkIHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2VkIGJ5IGRlZmF1 bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4KKyAgICAgICAg ICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K KworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBn X3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVjdG9yeSBvdXRwdXQg Zm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3JtYXQgaW4gdGhhdCBp dCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRlcmluZyBvZiBh cmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxzbworICAgICAg ICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAg PC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgIDx2YXJsaXN0 ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1mb3JtYXQgYXJj aGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFyIGZvcm1hdCBp cworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3JtYXQ6IGV4dHJh Y3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAgICAgICAgICBk aXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0IGRvZXMgbm90 IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNpbmcgdGFyIGZv cm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5ub3QgYmUgY2hh bmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3ZhcmlhYmxlbGlzdD4K KyAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+ CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYjhiMjdlMTcxOWUuLjkyNGQ1YmFjODE3 IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMjAsNiArMjAsOCBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgPHJlZnB1cnBvc2U+CiAgICByZXN0b3JlIGEgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCiAgICBhcmNoaXZlIGZp bGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICBvciBy ZXN0b3JlIG11bHRpcGxlIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0 YWJhc2UgZnJvbSBhbgorICAgYXJjaGl2ZSBkaXJlY3RvcnkgY3JlYXRlZCBieSA8YXBwbGljYXRp b24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVk aXY+CiAKQEAgLTE2Niw2ICsxNjgsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAg ICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0 YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJu cyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0t ZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBp cworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1l IHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidz IDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtl bmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2Vz IGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFj dGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRv CisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdp bGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9w dGlvbj4tZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9uLWVy cm9yPC9vcHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzNiwxNiBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBv YmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVy bT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv TWFrZWZpbGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmE0 ZTU1N2Q2MmM3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCkBAIC00NywxMSArNDcsMTEgQEAgYWxsOiBwZ19kdW1wIHBn X3Jlc3RvcmUgcGdfZHVtcGFsbAogcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBf c29ydC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2Ut bGlicGdmZXV0aWxzCiAJJChDQykgJChDRkxBR1MpIHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1w X3NvcnQubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChY KQogCi1wZ19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3Vi bWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgcGdf cmVzdG9yZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAk KFgpCitwZ19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQo T0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0 aWxzCisJJChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3Jl Lm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAot cGdfZHVtcGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMp IHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwot CSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4z MlJFUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1w YWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxz Lm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFH UykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFs bGRpcnMKIAkkKElOU1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRp ciknL3BnX2R1bXAkKFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjE2MmNmNjk0MTIKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBA IC0wLDAgKzEsMjg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFs bF9yZXN0b3JlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog VGhpcyBpcyBhIGNvbW1vbiBmaWxlIGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlLgorICog c3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiY29t bW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNv bW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCisjaW5j bHVkZSAiZHVtcHV0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisK K3N0YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29u c3QgY2hhciAqKnZhbHVlcyk7CisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkK KworLyoKKyAqIGNvbm5lY3REYXRhYmFzZQorICoKKyAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0 aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBBbgorICogaW50ZXJhY3RpdmUgcGFzc3dv cmQgcHJvbXB0IGlzIGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgorICoKKyAqIElm IGZhaWxfb25fZXJyb3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcg YW55IG1lc3NhZ2UKKyAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFz c3dvcmQgZm9yIHRoZSBuZXh0IHRyeS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZh cmlhYmxlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZworICogY29udGFp bmluZyB0aGUgb3B0aW9ucyB1c2VkLgorICovCitQR2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29u c3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwK KwkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvciwgY29uc3Qg Y2hhciAqcHJvZ25hbWUsCisJCQkJY29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3Zl cnNpb24pCit7CisJUEdjb25uCSAgICpjb25uOworCWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNo YXIgKnJlbW90ZXZlcnNpb25fc3RyOworCWludAkJCW15X3ZlcnNpb247CisJY29uc3QgY2hhciAq KmtleXdvcmRzID0gTlVMTDsKKwljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5p bmZvT3B0aW9uICpjb25uX29wdHMgPSBOVUxMOworCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5V TEw7CisJaW50CQkJc2VydmVyX3ZlcnNpb25fdGVtcDsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQg PT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCisJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFz c3dvcmQ6ICIsIGZhbHNlKTsKKworCS8qCisJICogU3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29w IHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgor CSAqLworCWRvCisJeworCQlpbnQJCQlhcmdjb3VudCA9IDY7CisJCVBRY29ubmluZm9PcHRpb24g KmNvbm5fb3B0OworCQljaGFyCSAgICplcnJfbXNnID0gTlVMTDsKKwkJaW50CQkJaSA9IDA7CisK KwkJZnJlZShrZXl3b3Jkcyk7CisJCWZyZWUodmFsdWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29u bl9vcHRzKTsKKworCQkvKgorCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBn aXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25z LiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5l Y3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJw cmV0CisJCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcu CisJCSAqLworCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBR Y29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5f b3B0cyA9PSBOVUxMKQorCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNv bm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsr KQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFsw XSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9 IDApCisJCQkJCWFyZ2NvdW50Kys7CisJCQl9CisKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxv YzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0 ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJ eworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAn XDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJ CQkJeworCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNb aV0gPSBjb25uX29wdC0+dmFsOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UK KwkJeworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCpr ZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv ZigqdmFsdWVzKSk7CisJCX0KKworCQlpZiAocGdob3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9 ICJob3N0IjsKKwkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdw b3J0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9y dDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGd1c2VyKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1 c2VyIjsKKwkJCXZhbHVlc1tpXSA9IHBndXNlcjsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dv cmQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBh c3N3b3JkOworCQkJaSsrOworCQl9CisJCWlmIChkYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ld ID0gImRibmFtZSI7CisJCQl2YWx1ZXNbaV0gPSBkYm5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5 d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHBy b2duYW1lOworCQlpKys7CisKKwkJbmV3X3Bhc3MgPSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVj dGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOworCisJCWlmICghY29ubikKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwor CisJCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0 aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgorCQkJIXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFz c3dvcmQgIT0gVFJJX05PKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0g c2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsK KwkJfQorCX0gd2hpbGUgKG5ld19wYXNzKTsKKworCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBi YWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVz KGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsKKwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlw Z19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFm aW5pc2goY29ubik7CisKKwkJCWZyZWUoa2V5d29yZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJ UFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisK KwkvKgorCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9u cyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCisJICogY29ubmVjdGlvbiBzdHJpbmcuCisJICovCisJ aWYgKGNvbm5zdHIpCisJCSpjb25uc3RyID0gY29uc3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFs dWVzKTsKKworCWZyZWUoa2V5d29yZHMpOworCWZyZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZvRnJl ZShjb25uX29wdHMpOworCisJLyogQ2hlY2sgdmVyc2lvbiAqLworCXJlbW90ZXZlcnNpb25fc3Ry ID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNlcnZlcl92ZXJzaW9uIik7CisJaWYgKCFyZW1v dGV2ZXJzaW9uX3N0cikKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24i KTsKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChz ZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2Vy dmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOworCisJLyogSWYg bmVlZGVkLCB0aGVuIGNvcHkgc2VydmVyIHZlcnNpb24gdG8gb3V0ZXIgZnVuY3Rpb24uICovCisJ aWYgKHNlcnZlcl92ZXJzaW9uKQorCQkqc2VydmVyX3ZlcnNpb24gPSBzZXJ2ZXJfdmVyc2lvbl90 ZW1wOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoKKwkgKiBXZSBhbGxv dyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVh c2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVj ayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9u X3RlbXAKKwkJJiYgKHNlcnZlcl92ZXJzaW9uX3RlbXAgPCA5MDIwMCB8fAorCQkJKHNlcnZlcl92 ZXJzaW9uX3RlbXAgLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19l cnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlw Z19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwK KwkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VD VVJFX1NFQVJDSF9QQVRIX1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBjb25z dHJ1Y3RDb25uU3RyCisgKgorICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0 aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUg Y29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhl IGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMg aW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJl IHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFja19hcHBs aWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKi8KK3N0YXRpYyBjaGFy ICoKK2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoq dmFsdWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJY2hh cgkgICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7CisK KwkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9y bWF0LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKKwl7CisJCWlm IChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJCQlzdHJjbXAoa2V5d29y ZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxi YWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJz dGtleXdvcmQpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOworCQlmaXJzdGtl eXdvcmQgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNb aV0pOworCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisKKwljb25uc3Ry ID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CisJcmV0 dXJuIGNvbm5zdHI7Cit9CisKKy8qCisgKiBleGVjdXRlUXVlcnkKKyAqCisgKiBSdW4gYSBxdWVy eSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdy ZXN1bHQgKgorZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7 CisJUEdyZXN1bHQgICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5 KTsKKworCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJUFFyZXN1 bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1 ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9k ZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0 X25pY2VseSgxKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmEwZGNkYmUwODA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9k dW1wYWxsX3Jlc3RvcmUuaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKKyAqICAgICAgQ29tbW9uIGhlYWRlciBmaWxl IGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKiAgICBzcmMvYmluL3BnX2R1bXAv Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNp Zm5kZWYgQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9ICisjZGVmaW5lIENPTU1PTl9EVU1QQUxMX1JF U1RPUkVfSAorCisjaW5jbHVkZSAicGdfYmFja3VwLmgiCisKKy8qIFRPRE86IGluY3JlYXNpbmcg dGhpcyB0byBrZWVwIDEwMCBkYiByZXN0b3JpbmcgYnkgc2luZ2xlIHBnX3Jlc3RvcmUgY29tbWFu ZC4gKi8KKyNkZWZpbmUgTUFYX09OX0VYSVRfTklDRUxZCQkJCTEwMAorZXh0ZXJuIFBHY29ubiAq Y29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlv bl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3Bv cnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dv cmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwg Y29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24pOworZXh0ZXJuICBQR3Jl c3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOworI2Vu ZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZAppbmRleCA2MDNiYTZjZmJmMC4uZGRlY2FjNWNmMDkgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVz b24uYnVpbGQKQEAgLTQ5LDYgKzQ5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcAogCiBwZ19k dW1wYWxsX3NvdXJjZXMgPSBmaWxlcygKICAgJ3BnX2R1bXBhbGwuYycsCisgICdjb21tb25fZHVt cGFsbF9yZXN0b3JlLmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKQEAgLTY4 LDYgKzY5LDcgQEAgYmluX3RhcmdldHMgKz0gcGdfZHVtcGFsbAogCiBwZ19yZXN0b3JlX3NvdXJj ZXMgPSBmaWxlcygKICAgJ3BnX3Jlc3RvcmUuYycsCisgICdjb21tb25fZHVtcGFsbF9yZXN0b3Jl LmMnLAogKQogCiBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAppbmRl eCBmMGYxOWJiMGIyOS4uNzI5ZmZjOWUxMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKQEAgLTMwNiw3ICsz MDYsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhBcmNoaXZlICpBSCwgRHVtcE9w dGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRlcm4gdm9pZCBQcm9jZXNzQXJj aGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4dGVybiB2b2lkIFJlc3RvcmVB cmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZl ICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGNvbnN0IGNoYXIgKmRibmFtZSk7CiAKIC8qIE9wZW4g YW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0 IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5 LDcgQEAgZXh0ZXJuIEFyY2hpdmUgKkNyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMs IGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkJCQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3lu Y19tZXRob2QpOwogCiAvKiBUaGUgLS1saXN0IG9wdGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRU T0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJj aGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsKIAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpO ZXdSZXN0b3JlT3B0aW9ucyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CmluZGV4IGI5ZDdhYjk4YzNlLi4xZGZhMDQyMGVhMiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYwpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJj aGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAq QUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3Qg Y2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFu ZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nf c3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3Nw ZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMg Q29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRp YyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRs ZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzEsOSArMzMxLDE2IEBAIFByb2Nlc3NBcmNoaXZlUmVz dG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQog Ci0vKiBQdWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9k YXRhIGlzIHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3Rvcmlu ZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1 bXBhbGwuCisgKiBJZiBkYm5hbWUgaXMgbm90IE5VTEwsIHRoZW4gcGdfcmVzdG9yZSByZXN0b3Jl IGFyY2hpdmUgdG8gZmlsZSB3aWxsIGhhdmUKKyAqIGNvbW1lbnRzIGFib3V0IHdoaWNoIGRhdGFi YXNlIGN1cnJlbnRseSBpcyBiZWluZyBkdW1wZWQuCisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRf ZGF0YSwgY29uc3QgY2hhciAqZGJuYW1lKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hp dmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0 OwpAQCAtNDUwLDkgKzQ1NywxMiBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICov CiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNv bXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRP dXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRf ZGF0YSk7CiAKLQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBc bi0tXG5cbiIpOworCWlmIChhcHBlbmRfZGF0YSAmJiBkYm5hbWUgIT0gTlVMTCkKKwkJYWhwcmlu dGYoQUgsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CisJ ZWxzZQorCQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0t XG5cbiIpOwogCiAJaWYgKEFILT5hcmNoaXZlUmVtb3RlVmVyc2lvbikKIAkJYWhwcmludGYoQUgs ICItLSBEdW1wZWQgZnJvbSBkYXRhYmFzZSB2ZXJzaW9uICVzXG4iLApAQCAtNzkyLDggKzgwMiwx MCBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJaWYgKEFILT5wdWJsaWMudmVyYm9z ZSkKIAkJZHVtcFRpbWVzdGFtcChBSCwgIkNvbXBsZXRlZCBvbiIsIHRpbWUoTlVMTCkpOwogCi0J YWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wIGNvbXBsZXRlXG4t LVxuXG4iKTsKLQorCWlmIChhcHBlbmRfZGF0YSAmJiBkYm5hbWUgIT0gTlVMTCkKKwkJYWhwcmlu dGYoQUgsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXAgY29tcGxldGVcbi0tXG5cbiIsIGRi bmFtZSk7CisJZWxzZQorCQlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGR1bXBcbi0tXG5cbiIpOwogCS8qCiAJICogQ2xlYW4gdXAgJiB3ZSdyZSBkb25lLgogCSAqLwpA QCAtMTI2Myw3ICsxMjc1LDcgQEAgQXJjaGl2ZUVudHJ5KEFyY2hpdmUgKkFIWCwgQ2F0YWxvZ0lk IGNhdGFsb2dJZCwgRHVtcElkIGR1bXBJZCwKIAogLyogUHVibGljICovCiB2b2lkCi1QcmludFRP Q1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQorUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICop IEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTEyNzks NyArMTI5MSw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZl T3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5m aWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWlmIChzdHJm dGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAog CQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2NTgsNyArMTY3MCw4 IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRp YyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1l LAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykK KwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJ CSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25z dCBjaGFyICptb2RlOwpAQCAtMTY3OCw3ICsxNjkxLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91 dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRh IHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJ ZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBi NWJhM2I0NmRkOS4uNDVmMGZiNDZlMGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2 LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJv c2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJ UmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2 ZSAqKSBBSCwgZmFsc2UsIE5VTEwpOwogCiAJCVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICop IEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4 IDc5YWVjNWY1MTU4Li40NzU4OWNjYTkwZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpA QCAtMTMsNiArMTMsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1 ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKICNpZmRlZiBXSU4zMgogI2luY2x1ZGUgInBh cmFsbGVsLmgiCiAjZW5kaWYKQEAgLTIxLDggKzIyLDYgQEAKIC8qIEdsb2JhbHMgZXhwb3J0ZWQg YnkgdGhpcyBmaWxlICovCiBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CiAKLSNkZWZpbmUg TUFYX09OX0VYSVRfTklDRUxZCQkJCTIwCi0KIHN0YXRpYyBzdHJ1Y3QKIHsKIAlvbl9leGl0X25p Y2VseV9jYWxsYmFjayBmdW5jdGlvbjsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDMwZGZkYThjM2ZmLi43ZWZk NTk5OTlkMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMTQ4LDcgKzExNDgsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJ UmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlLCBOVUxM KTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggNjRhNjBh MjYwOTIuLmI3NWU0ZjU2ZjMxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFs bC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTE1LDYgKzE1LDcgQEAK IAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lu Y2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApAQCAtMjQsMTQgKzI1LDE3IEBA CiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbl91bnN0YWJsZS5oIgogI2luY2x1ZGUgImNvbW1vbi9s b2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9k dW1wYWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJkdW1wdXRpbHMuaCIKICNpbmNsdWRlICJmZV91 dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRv cHRfbG9uZy5oIgogI2luY2x1ZGUgInBnX2JhY2t1cC5oIgorI2luY2x1ZGUgInBnX2JhY2t1cF9h cmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBleHBlY3QgYmFjayBmcm9tIHBnX2R1 bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBnX2R1bXAgKFBvc3RncmVTUUwpICIg UEdfVkVSU0lPTiAiXG4iCisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKIAog dHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTY0LDI4ICs2OCwyNSBAQCBzdGF0aWMgdm9pZCBkcm9wVGFi bGVzcGFjZXMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZXNwYWNlcyhQR2Nv bm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZv aWQgZHVtcFVzZXJDb25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7Ci1z dGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7CitzdGF0aWMgdm9pZCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBz dGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMgaW50CXJ1 blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKTsKK3N0 YXRpYyBpbnQgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRl X29wdHMsCisJCQkJCSBjaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQp Owogc3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNv bnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFy ICpvYmp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZm ZXIpOwotc3RhdGljIFBHY29ubiAqY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwK LQkJCQkJCQkgICBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdo b3N0LAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAot CQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKTsK LXN0YXRpYyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29u c3QgY2hhciAqKnZhbHVlcyk7Ci1zdGF0aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFt ZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJ CQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMgdm9pZCByZWFkX2R1bXBh bGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVy bik7CitzdGF0aWMgdm9pZCBjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7 CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0 KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBjb25zdCBj aGFyICpwcm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1bXBvcHRzOwotc3RhdGljIGNo YXIgKmNvbm5zdHIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7CiBzdGF0 aWMgYm9vbCBvdXRwdXRfY2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNscyA9IGZh bHNlOwogc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAtMTA3LDcgKzEwOCw3IEBAIHN0 YXRpYyBpbnQJbm9fc3Vic2NyaXB0aW9ucyA9IDA7CiBzdGF0aWMgaW50CW5vX3RvYXN0X2NvbXBy ZXNzaW9uID0gMDsKIHN0YXRpYyBpbnQJbm9fdW5sb2dnZWRfdGFibGVfZGF0YSA9IDA7CiBzdGF0 aWMgaW50CW5vX3JvbGVfcGFzc3dvcmRzID0gMDsKLXN0YXRpYyBpbnQJc2VydmVyX3ZlcnNpb247 CitzdGF0aWMgaW50IHNlcnZlcl92ZXJzaW9uOwogc3RhdGljIGludAlsb2FkX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IDA7CiBzdGF0aWMgaW50CW9uX2NvbmZsaWN0X2RvX25vdGhpbmcgPSAwOwogCkBA IC0xMjEsOCArMTIyLDYgQEAgc3RhdGljIGNoYXIgKmZpbGVuYW1lID0gTlVMTDsKIHN0YXRpYyBT aW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07 CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEws IE5VTEx9OwogCi0jZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKLQogaW50CiBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0xNDcsNiArMTQ2LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEws ICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7 Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9u cyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTg4LDYg KzE4OCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0g TlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29k aW5nID0gTlVMTDsKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJ Y29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQg PSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxz X29ubHkgPSBmYWxzZTsKQEAgLTIzNyw3ICsyMzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgo YyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3gi LCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0 aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI2NSw3 ICsyNjcsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1 bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1h dE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJ CWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC00MTQsNiArNDE4LDIxIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyog R2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1h dChmb3JtYXROYW1lKTsKKworCS8qCisJICogSWYgbm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZp ZWQgdGhlbiB3ZSBtdXN0IHByb3ZpZGUgdGhlCisJICogZmlsZSBuYW1lIHRvIGNyZWF0ZSBvbmUg bWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYm CisJCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJvcHRpb25zIC1GLy0tZm9ybWF0PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8t LWZpbGUgd2l0aCBub24tZW1wdHkgc3RyaW5nIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkg XCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRf bmljZWx5KDEpOworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVx dWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlz IGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBA IC00NjAsNiArNDc5LDMzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAob25f Y29uZmxpY3RfZG9fbm90aGluZykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywg IiAtLW9uLWNvbmZsaWN0LWRvLW5vdGhpbmciKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0 IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJ ICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgorCSAqLwor CWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhbTUFY UEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVtcHR5 IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1lKTsK KworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZpbGVu YW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9Q RikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3Ry ZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUpCisJeworCQlPUEYgPSBmb3Bl bihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJIGZpbGVuYW1lKTsKKwl9 CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAqIElmIHRoZXJlIHdhcyBhIGRhdGFi YXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhhdCwKIAkgKiBvdGhlcndp c2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3RncmVzIiwgYW5kIGZhaWxpbmcgdGhh dApAQCAtNDY4LDcgKzUxNCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAo cGdkYikKIAl7CiAJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UocGdkYiwgY29ubnN0ciwgcGdob3N0 LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJ CQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29u bnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAogCQlpZiAoIWNvbm4pCiAJCQlwZ19mYXRhbCgiY291 bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgcGdkYik7CkBAIC00NzYsMTAgKzUy MywxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZWxzZQogCXsKIAkJY29ubiA9 IGNvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1 c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHByb21w dF9wYXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVy X3ZlcnNpb24pOwogCQlpZiAoIWNvbm4pCiAJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1w bGF0ZTEiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCQkgICBwcm9t cHRfcGFzc3dvcmQsIHRydWUpOworCQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUsCisJ CQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAogCQlpZiAo IWNvbm4pCiAJCXsKQEAgLTQ5NiwxOSArNTQ1LDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4Y2x1ZGVfcGF0 dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkvKgotCSAqIE9w ZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dAotCSAq LwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllf Vyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxl IFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9QRiA9IHN0ZG91 dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVzdGVkLgogCSAq LwpAQCAtNjA4LDcgKzY0NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAK IAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkK LQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNoRHVtcEZv cm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjIxLDcgKzY1Nyw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVz dWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlm IChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3lu Y19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjMyLDEyICs2NjgsMTQgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlw cmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgaW50byBh biBTUUwgc2NyaXB0IGZpbGUuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGV4dHJh Y3RzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9uIHNwZWNpZmllZCBkdW1w IGZvcm1hdC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJp bnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5H ZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAg ICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0 PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0 YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChk ZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAg IHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAg ICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50 ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJ TUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtMTQ4OCwxMCArMTUyNiwxMyBAQCBleHBh bmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMgb2YgZGF0 YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCitk dW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkK IHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFYUEdQ QVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRSAgICAgICAqbWFwX2Zp bGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRhdGFsbG93 Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTUwNSw3ICsxNTQ2LDcg QEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUgZmFp bHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwK LQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBvaWQg IgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFsbG93 Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRuYW1l IDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwpAQCAtMTUxMyw5ICsxNTU0LDMzIEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKKwkvKgorCSAqIElmIGRpcmVj dG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiBjcmVhdGUgYSBzdWJkaXJl Y3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVt cCBmaWxlIHN1YmRpcmVjdG9yeSB3aWxsCisJICogYmUgY3JlYXRlZCB1bmRlciB0aGUgc3ViZGly ZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2luZ2xlIGRiIHBnX2R1bXAuCisJICovCisJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgltYXBfZmlsZV9wYXRo W01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRh YmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IHdpdGggJ2Rh dGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkJaWYgKG1rZGlyKGRiX3N1 YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRpcmVj dG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRo LCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1h cCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVu KG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2Zh dGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0K KwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAq ZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZh bHVlKHJlcywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7 CiAKQEAgLTE1MzAsNiArMTU5NSwxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJ CWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZHVtcCBm b3JtYXQsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQg ZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJ c25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRp ciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1l IGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIHBn X3N0cmR1cChkYm5hbWUpKTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNl IFwiJXNcIiIsIGRibmFtZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIl c1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CkBAIC0xNTQ4LDkgKzE2MjUsMTcgQEAgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0 ZSI7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBw Z19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnBy aW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJCQlm cHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRlIG9w dGlvbi4gKi8KKwkJCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0KIAkJ fQogCQllbHNlCkBAIC0xNTU5LDE5ICsxNjQ0LDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uKQogCQlpZiAoZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1 bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0 ZV9vcHRzLCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJ CXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBk Ym5hbWUpOwogCiAJCWlmIChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUs IFBHX0JJTkFSWV9BKTsKKwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BB VEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHRv Y19wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4odG9j X3BhdGgsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgcmUtb3BlbiB0aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5hbWUp OworCQkJCQkJIHRvY19wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJ aWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJ UFFjbGVhcihyZXMpOwogfQogCkBAIC0xNTgxLDcgKzE2NzcsOCBAQCBkdW1wRGF0YWJhc2VzKFBH Y29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0 aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29u c3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25z dCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFyY2hE dW1wRm9ybWF0KQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVy RGF0YSBjbWQ7CkBAIC0xNTkwLDE3ICsxNjg3LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0 cmJ1Zik7CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNt ZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEs IGNyZWF0ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhl IHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0 aGlzIGlzIG5vbi1wbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBk dW1wCisJICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVt cC4KIAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIg LUZhICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBR RXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAg ZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJl Y3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3Rv cnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21k LCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVz ICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7 CisKKwkJLyoKKwkJKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVk IHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5hbWUp CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQg dGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25u ZWN0aW9uCkBAIC0xNjUwLDI1NiArMTc2Niw2IEBAIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAlkZXN0cm95UFFF eHBCdWZmZXIoc3FsKTsKIH0KIAotLyoKLSAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdp dGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBBbgotICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJv bXB0IGlzIGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgotICoKLSAqIElmIGZhaWxf b25fZXJyb3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1l c3NhZ2UKLSAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQg Zm9yIHRoZSBuZXh0IHRyeS4KLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxl ICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZwotICogY29udGFpbmluZyB0 aGUgb3B0aW9ucyB1c2VkLgotICovCi1zdGF0aWMgUEdjb25uICoKLWNvbm5lY3REYXRhYmFzZShj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAotCQkJCWNv bnN0IGNoYXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIs Ci0JCQkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCi17Ci0J UEdjb25uCSAgICpjb25uOwotCWJvb2wJCW5ld19wYXNzOwotCWNvbnN0IGNoYXIgKnJlbW90ZXZl cnNpb25fc3RyOwotCWludAkJCW15X3ZlcnNpb247Ci0JY29uc3QgY2hhciAqKmtleXdvcmRzID0g TlVMTDsKLQljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKLQlQUWNvbm5pbmZvT3B0aW9uICpj b25uX29wdHMgPSBOVUxMOwotCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7Ci0KLQlpZiAo cHJvbXB0X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQotCQlwYXNzd29yZCA9IHNp bXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBj b25uZWN0aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5 Ci0JICogYmFja2VuZC4KLQkgKi8KLQlkbwotCXsKLQkJaW50CQkJYXJnY291bnQgPSA2OwotCQlQ UWNvbm5pbmZvT3B0aW9uICpjb25uX29wdDsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0J CWludAkJCWkgPSAwOwotCi0JCWZyZWUoa2V5d29yZHMpOwotCQlmcmVlKHZhbHVlcyk7Ci0JCVBR Y29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJLyoKLQkJICogTWVyZ2UgdGhlIGNvbm5lY3Rp b24gaW5mbyBpbnB1dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZwotCQkgKiBh bmQgb3RoZXIgb3B0aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGlu IHRoZQotCQkgKiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFt cygpIHdvdWxkIGludGVycHJldAotCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNv bm5lY3Rpb24gc3RyaW5nLgotCQkgKi8KLQkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQotCQl7Ci0J CQljb25uX29wdHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNn KTsKLQkJCWlmIChjb25uX29wdHMgPT0gTlVMTCkKLQkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNn KTsKLQotCQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0g TlVMTDsgY29ubl9vcHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYm IGNvbm5fb3B0LT52YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdv cmQsICJkYm5hbWUiKSAhPSAwKQotCQkJCQlhcmdjb3VudCsrOwotCQkJfQotCi0JCQlrZXl3b3Jk cyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2 YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQot CQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsg Y29ubl9vcHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5f b3B0LT52YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJk Ym5hbWUiKSAhPSAwKQotCQkJCXsKLQkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29y ZDsKLQkJCQkJdmFsdWVzW2ldID0gY29ubl9vcHQtPnZhbDsKLQkJCQkJaSsrOwotCQkJCX0KLQkJ CX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQg KyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2Nv dW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOwotCQl9Ci0KLQkJaWYgKHBnaG9zdCkKLQkJewot CQkJa2V5d29yZHNbaV0gPSAiaG9zdCI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7Ci0JCQlpKys7 Ci0JCX0KLQkJaWYgKHBncG9ydCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCQl2 YWx1ZXNbaV0gPSBwZ3BvcnQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBndXNlcikKLQkJewotCQkJ a2V5d29yZHNbaV0gPSAidXNlciI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7Ci0JCQlpKys7Ci0J CX0KLQkJaWYgKHBhc3N3b3JkKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7Ci0J CQl2YWx1ZXNbaV0gPSBwYXNzd29yZDsKLQkJCWkrKzsKLQkJfQotCQlpZiAoZGJuYW1lKQotCQl7 Ci0JCQlrZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOwotCQkJdmFsdWVzW2ldID0gZGJuYW1lOwotCQkJ aSsrOwotCQl9Ci0JCWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwot CQl2YWx1ZXNbaV0gPSBwcm9nbmFtZTsKLQkJaSsrOwotCi0JCW5ld19wYXNzID0gZmFsc2U7Ci0J CWNvbm4gPSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlp ZiAoIWNvbm4pCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgZGJuYW1lKTsKLQotCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQg JiYKLQkJCVBRY29ubmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKLQkJCSFwYXNzd29yZCAm JgotCQkJcHJvbXB0X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goY29ubik7 Ci0JCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQlu ZXdfcGFzcyA9IHRydWU7Ci0JCX0KLQl9IHdoaWxlIChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0 byBzZWUgdGhhdCB0aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAq LwotCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChmYWls X29uX2Vycm9yKQotCQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQll bHNlCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwotCi0JCQlmcmVlKGtleXdvcmRzKTsKLQkJCWZy ZWUodmFsdWVzKTsKLQkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJCXJldHVybiBO VUxMOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVt ZW1iZXIgdGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQotCSAqIGNvbm5lY3Rpb24g c3RyaW5nLgotCSAqLwotCWNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1 ZXMpOwotCi0JZnJlZShrZXl3b3Jkcyk7Ci0JZnJlZSh2YWx1ZXMpOwotCVBRY29ubmluZm9GcmVl KGNvbm5fb3B0cyk7Ci0KLQkvKiBDaGVjayB2ZXJzaW9uICovCi0JcmVtb3RldmVyc2lvbl9zdHIg PSBQUXBhcmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKLQlpZiAoIXJlbW90 ZXZlcnNpb25fc3RyKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIp OwotCXNlcnZlcl92ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwotCWlmIChzZXJ2ZXJf dmVyc2lvbiA9PSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9u IFwiJXNcIiIsCi0JCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKLQotCW15X3ZlcnNpb24gPSBQR19W RVJTSU9OX05VTTsKLQotCS8qCi0JICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRv IDkuMiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCi0JICogb3VyIG93biBtYWpvciB2 ZXJzaW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKLQkgKi8KLQlp ZiAobXlfdmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbgotCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5 MDIwMCB8fAotCQkJKHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkp Ci0JewotCQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24g bWlzbWF0Y2giKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAl cyB2ZXJzaW9uOiAlcyIsCi0JCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19W RVJTSU9OKTsKLQkJZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JUFFjbGVhcihleGVjdXRlUXVlcnko Y29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKLQotCXJldHVybiBjb25uOwot fQotCi0vKiAtLS0tLS0tLS0tCi0gKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9t IHRoZSBnaXZlbiBrZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcwotICogdXNlZCB0byBwYXNzIHRo ZSBjb25uZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KLSAqCi0gKiBU aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgotICoJZGJuYW1lCQktIHZhcmll cyBpbiBlYWNoIHBnX2R1bXAgaW52b2NhdGlvbgotICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1 cmUgdG8gcGFzcyBhIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAqCWZhbGxiYWNrX2Fw cGxpY2F0aW9uX25hbWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKLSAqIC0tLS0tLS0tLS0K LSAqLwotc3RhdGljIGNoYXIgKgotY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29y ZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpCi17Ci0JUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKLQljaGFyCSAgICpjb25uc3RyOwotCWludAkJCWk7Ci0JYm9vbAkJZmlyc3Rr ZXl3b3JkID0gdHJ1ZTsKLQotCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBp biBrZXk9J3ZhbHVlJyBmb3JtYXQuICovCi0JZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVM TDsgaSsrKQotCXsKLQkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwK LQkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGtl eXdvcmRzW2ldLCAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQljb250aW51 ZTsKLQotCQlpZiAoIWZpcnN0a2V5d29yZCkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYs ICcgJyk7Ci0JCWZpcnN0a2V5d29yZCA9IGZhbHNlOwotCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYs ICIlcz0iLCBrZXl3b3Jkc1tpXSk7Ci0JCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0p OwotCX0KLQotCWNvbm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKLQlkZXN0cm95UFFFeHBC dWZmZXIoYnVmKTsKLQlyZXR1cm4gY29ubnN0cjsKLX0KLQotLyoKLSAqIFJ1biBhIHF1ZXJ5LCBy ZXR1cm4gdGhlIHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMg UEdyZXN1bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkp Ci17Ci0JUEdyZXN1bHQgICAqcmVzOwotCi0JcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1 ZXJ5KTsKLQotCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7Ci0JaWYgKCFyZXMgfHwKLQkJUFFy ZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCi0JewotCQlwZ19sb2dfZXJyb3Io InF1ZXJ5IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCXBnX2xvZ19lcnJv cl9kZXRhaWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQll eGl0X25pY2VseSgxKTsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKgogICogQXMgYWJvdmUg Zm9yIGEgU1FMIGNvbW1hbmQgKHdoaWNoIHJldHVybnMgbm90aGluZykuCiAgKi8KQEAgLTE5OTUs MyArMTg2MSw5MSBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwg U2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQor CisvKgorICogY3JlYXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5l dyBkaXJlY3Rvcnkgd2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1lCisg KiBlbXB0eSBkaXJlY3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9pZAor Y3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQJ CXN0OworCWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5 IGV4aXN0aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBT X0lTRElSKHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsK KworCQlpZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19lbXB0eSA9 IHRydWU7CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkKKwkJCXsK KwkJCQlpZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChkLT5kX25hbWUs ICIuLiIpICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJCQlicmVhazsK KwkJCQl9CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJl YWQgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJCWlmIChjbG9z ZWRpcihkaXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNc IjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkpCisJCXsKKwkJ CXBnX2xvZ19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIs IGRpcm5hbWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0 YSBvbiB0aGlzIGRpcmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAi dGhpcyBkaXJlY3RvcnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1 bWVudCBvdGhlciB0aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRp cm5hbWUpOworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGly bmFtZSwgMDcwMCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgor ICogVGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVG b3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZv cm1hdAlhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0 b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0 LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5Owor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIp ID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVs c2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZv cm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwi IiwKKwkJCQlmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0 b3JlLmMKaW5kZXggYzYwMjI3MmQ3ZGIuLmQ1NDMxMjk3YTFlIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK QEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFu IHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJv bSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIK KyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1 c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwg cmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwyNyArNDEsNzEgQEAKICNpbmNsdWRl ICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlm CiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgi CisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJm ZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJn ZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisjaW5jbHVkZSAicGdfYmFja3Vw X2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKK3R5cGVkZWYgc3Ry dWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlkYl9vaWQ7CisJY29uc3QgY2hhcgkJCQkJ CQkqZGJfbmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1 Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAq aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICp0YWlsOworfSBTaW1wbGVEYXRhYmFz ZU9pZExpc3Q7CisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0 YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0 b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShj b25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK3N0YXRpYyBpbnQgcmVzdG9y ZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpv cHRzLAorCQkJCQkJCSAgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsCisJCQkJCQkJ ICBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIGludCBSZWFkT25lU3RhdGVtZW50KFN0cmlu Z0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQgcmVzdG9yZUFsbERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCSAgIFNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGlu dCBudW1Xb3JrZXJzKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCWNvbnN0IGNo YXIgKm91dGZpbGUpOworc3RhdGljIHZvaWQgY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShj b25zdCBjaGFyICpvdXRmaWxlLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IGZpbHRlcl9kYm5h bWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VP aWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNl T2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlz dF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQkJCQkJ CQkJICBjb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIHZvaWQgc2ltcGxlX3N0cmluZ19mdWxs X2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxl X2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCk7Citz dGF0aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlz dCAqbGlzdCwKKwkJCQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJ CQkJCQkJCSAgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldik7CitzdGF0aWMgdm9pZCBz aW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJ T2lkIGRiX29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRpYyBzaXplX3QgcXVvdGVfbGl0 ZXJhbF9pbnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbik7Citz dGF0aWMgY2hhciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0IGNoYXIgKnJhd3N0cik7CiAKIGlu dAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7 CiAJaW50CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJaW50CQkJbnVtV29ya2VycyA9IDE7Ci0J QXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRGaWxlU3BlYzsKIAlzdGF0aWMgaW50CWRp c2FibGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7 CkBAIC03NywxMSArMTIxLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXN0YXRp YyBpbnQJc3RyaWN0X25hbWVzID0gMDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsKIAlib29s CQlzY2hlbWFfb25seSA9IGZhbHNlOworCWJvb2wJCQkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJ U2ltcGxlU3RyaW5nTGlzdAlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCiAJ c3RydWN0IG9wdGlvbiBjbWRvcHRzW10gPSB7CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAog CQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2En fSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5V TEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVk ZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTI4LDYgKzE3NSw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCQl7Im5vLXNlY3VyaXR5LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAm bm9fc2VjdXJpdHlfbGFiZWxzLCAxfSwKIAkJeyJuby1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1l bnQsICZub19zdWJzY3JpcHRpb25zLCAxfSwKIAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgNH0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMTU2LDcgKzIwNCw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpU OlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhQWNDZDpl ZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMs IE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE4MywxMSArMjMxLDE0IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQog CQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJ CQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsLmRhdCBmaWxlIGZyb20gZGly ZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2Ug J2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBn aG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkv KiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9w dGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBHX01BWF9KT0JTLApAQCAtMzAyLDYg KzM1MywxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQkJZXhpdCgxKTsKIAkJ CQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJ CQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0aG9zZSBuZWVkcyB0byBza2lwIHdoaWxl IHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVf cGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0 b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50ICovCkBAIC0zMjksNiArMzg0LDEz IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5h bWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgi b25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAor CWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJ eworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVz ZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOwor CQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1k IGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJu YW1lKQogCXsKQEAgLTQwNCw2ICs0NjYsMTA2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiB0b2MuZGF0IGZp bGUgZG9lcyBub3QgcHJlc2VudCBpbiBjdXJyZW50IHBhdGgsIHRoZW4gY2hlY2sgZm9yCisJICog Z2xvYmFsLmRhdC4gIElmIGdsb2JhbC5kYXQgZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUg YWxsIHRoZQorCSAqIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQoaWYgZXhpc3QpIGZpbGUgbGlzdCBh bmQgc2tpcCByZXN0b3JpbmcgZm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgor CSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYgIUlzRmlsZUV4aXN0c0luRGlyZWN0 b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikpCisJeworCQkvKiBJZiBnbG9iYWwuZGF0IGlz IGV4aXN0LCB0aGVuIHByb2Nlc3MgaXQuICovCisJCWlmIChJc0ZpbGVFeGlzdHNJbkRpcmVjdG9y eShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJnbG9iYWwuZGF0IikpCisJCXsKKwkJCVBHY29u biAgKmNvbm4gPSBOVUxMOyAvKiBDb25uZWN0aW9uIHRvIHJlc3RvcmUgZ2xvYmFsIHNxbCBjb21t YW5kcy4gKi8KKwkJCWludCAgICAgZXhpdF9jb2RlID0gMDsKKworCQkJLyoKKwkJCSAqIFVzZXIg aXMgc3VnZ2VzdGVkIHRvIHVzZSBzaW5nbGUgZGF0YWJhc2UgZHVtcCBmb3IgLS1saXN0IG9wdGlv bi4KKwkJCSAqLworCQkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQkJcGdfZmF0YWwoIm9wdGlv biAtbC8tLWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJh c2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFsbCIpOworCisJCQkvKgorCQkJICogVG8gcmVzdG9y ZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkJICog c2hvdWxkIGJlIHNwZWNpZmllZC4KKwkJCSAqIEV2ZW4gdGhlcmUgaXMgc2luZ2xlIGRhdGFiYXNl IGluIGR1bXAsIHJlcG9ydCBlcnJvciBiZWNhdXNlIGl0CisJCQkgKiBtaWdodCBiZSBwb3NzaWJs ZSB0aGF0IGRhdGFiYXNlIGhhc24ndCBjcmVhdGVkIHNvIGJldHRlciB3ZQorCQkJICogcmVwb3J0 IGVycm9yLgorCQkJICovCisJCQlpZiAob3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJCXsKKwkJCQlw Z19sb2dfZXJyb3IoIi1DLy0tY3JlYXRlIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4g cmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsK KwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOworCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJJZiBkYiBpcyBhbHJl YWR5IGNyZWF0ZWQgYW5kIGR1bXAgaGFzIHNpbmdsZSBkYiBkdW1wLCB0aGVuIHVzZSBwYXJ0aWN1 bGFyIGR1bXAgZmlsZS4iKTsKKwkJCQlleGl0X25pY2VseSgxKTsKKwkJCX0KKworCQkJLyoKKwkJ CSAqIENvbm5lY3QgdG8gZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3FsIGNvbW1hbmRzIGZy b20KKwkJCSAqIGdsb2JhbC5kYXQgZmlsZS4KKwkJCSAqLworCQkJaWYgKG9wdHMtPmNwYXJhbXMu ZGJuYW1lKQorCQkJeworCQkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5k Ym5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkJICAgb3B0cy0+Y3Bh cmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJ CQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkJCWlmICghY29ubikKKwkJ CQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9wdHMt PmNwYXJhbXMuZGJuYW1lKTsKKwkJCX0KKworCQkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJl dHVybiBmcm9tIGhlcmUuICovCisJCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJeworCQkJCS8qCisJ CQkJICogT3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xv YmFsIHNxbAorCQkJCSAqIGNvbW1hbmRzLgorCQkJCSAqLworCQkJCXByb2Nlc3NfZ2xvYmFsX3Nx bF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxlbmFtZSk7CisKKwkJCQlp ZiAoY29ubikKKwkJCQkJUFFmaW5pc2goY29ubik7CisKKwkJCQlwZ19sb2dfaW5mbygiZGF0YWJh c2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiBpcyBz cGVjaWZpZWQiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9yZSBhbGwg dGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUgPSByZXN0 b3JlQWxsRGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsCisJCQkJCQkJCQkJCQlkYl9leGNs dWRlX3BhdHRlcm5zLAorCQkJCQkJCQkJCQkJb3B0cywKKwkJCQkJCQkJCQkJCW51bVdvcmtlcnMp OworCQkJfQorCisJCQkvKiBGcmVlIGRiIHBhdHRlcm4gbGlzdC4gKi8KKwkJCXNpbXBsZV9zdHJp bmdfZnVsbF9saXN0X2RlbGV0ZSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkJCXJldHVybiBl eGl0X2NvZGU7CisJCX0KKwl9CisKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5V TEwpCisJCXBnX2ZhdGFsKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSB1c2VkIG9u bHkgd2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVt cGFsbCIpOworCisJaWYgKGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAtZy8tLWds b2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFi YXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCXJldHVybiByZXN0b3JlT25lRGF0 YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIE5VTEwpOworfQor LyoKKyAqIHJlc3RvcmVPbmVEYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBk YXRhYmFzZSB1c2luZyB0b2MuZGF0IGZpbGUuCisgKiBkYm5hbWUgaXMgdGhlIGN1cnJlbnQgdG8g YmUgcmVzdG9yZWQgZGF0YWJhc2UgbmFtZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZU9uZURh dGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAor CQkJCSAgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBjb25zdCBjaGFyICpkYm5h bWUpCit7CisJQXJjaGl2ZQkJKkFIOworCWludAkJCWV4aXRfY29kZTsKKwogCUFIID0gT3BlbkFy Y2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25z KEFILCBOVUxMLCBvcHRzKTsKQEAgLTQyOSwxMSArNTkxLDExIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCUFILT5udW1Xb3JrZXJzID0gbnVtV29ya2VyczsKIAogCWlmIChvcHRzLT50 b2NTdW1tYXJ5KQotCQlQcmludFRPQ1N1bW1hcnkoQUgpOworCQlQcmludFRPQ1N1bW1hcnkoQUgs IGFwcGVuZF9kYXRhKTsKIAllbHNlCiAJewogCQlQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25z KEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlSZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5k X2RhdGEsIGRibmFtZSk7CiAJfQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9y ZWQgZXJyb3JzICovCkBAIC00NTEsNyArNjEzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCiBzdGF0aWMgdm9pZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRm KF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyByZXN0b3Jl cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cC5cbiIKKwkJCQkiSWYgYXJjaGl2ZSBpcyBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwsIHRoZW4gcmVz dG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzIGFsc28uIFxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50 ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbRklMRV1cbiIp LCBwcm9nbmFtZSk7CiAKQEAgLTQ2OSw2ICs2MzIsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9n bmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNsZWFuIChk cm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8o IiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBkYXRhYmFz ZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAgZXhpdCBv biBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIgIC1nLCAt LWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzLCBubyBk YXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAgICAgICAg IHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2JzPU5VTSAg ICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3JlXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFibGUgb2Yg Y29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC00ODEsNiArNjQ1LDcgQEAgdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLVMsIC0tc3VwZXJ1c2VyPU5BTUUg ICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVzZSBmb3IgZGlzYWJsaW5nIHRyaWdnZXJz XG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9TkFNRSAgICAgICAgICAgICByZXN0b3Jl IG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRjLilcbiIpKTsKIAlwcmludGYoXygiICAt VCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgdHJpZ2dlclxuIikpOwor CXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBkYXRhYmFz ZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxuIikpOwogCXByaW50ZihfKCIgIC14 LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0b3JhdGlvbiBvZiBhY2Nlc3MgcHJp dmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50ZihfKCIgIC0xLCAtLXNpbmdsZS10 cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikpOwogCXBy aW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0cmlnZ2VycyBk dXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTUxMyw4ICs2NzgsOCBAQCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAg ICAgZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJ CSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4g YmUgY29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxl Y3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwg LVAsIC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZSBjb21i aW5lZFxuIgorCQkJICJhbmQgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0 aXBsZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBp cyBzdXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRm KF8oIlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50 ZihfKCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsK QEAgLTYxOSwzICs3ODQsNjM3IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwog fQorCisvKgorICogSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUg aWYgZmlsZSBleGlzdCBpbiBjdXJyZW50IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lz RmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5h bWUpCit7CisJc3RydWN0IHN0YXQJCQlzdDsKKwljaGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJ aWYgKHNucHJpbnRmKGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBN QVhQR1BBVEgpCisJCXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwg ZGlyKTsKKworCXJldHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21v ZGUpKTsKK30KKworLyoKKyAqIFJlYWRPbmVTdGF0ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3Rh cnQgcmVhZGluZyBmcm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQg dGlsbAorICogc2VtaWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLnNx bCBmaWxlKQorICoKKyAqIEVPRiBpcyByZXR1cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBz ZWVuOyB0aW1lIHRvIHNodXQgZG93bi4KKyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVt ZW50KFN0cmluZ0luZm8gaW5CdWYsIEZJTEUgKnBmaWxlKQoreworCWludAkJCWM7IC8qIGNoYXJh Y3RlciByZWFkIGZyb20gZ2V0YygpICovCisJaW50CQkJbTsKKworCVN0cmluZ0luZm9EYXRhCXE7 CisJaW5pdFN0cmluZ0luZm8oJnEpOworCisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8q CisJICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1p dGVyIGlzIHNlZW4uCisJICovCisJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJ eworCQlpZiAoYyAhPSAnXCcnICYmIGMgIT0gJyInICYmIGMgIT0gJ1xuJyAmJiBjICE9ICc7JykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCXdoaWxl ICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWlmIChjICE9ICdcJycgJiYg YyAhPSAnIicgJiYgYyAhPSAnOycgJiYgYyAhPSAnXG4nKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0K KworCQlpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcigmcSwgKGNoYXIpIGMpOworCQkJbSA9IGM7CisKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBm aWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikg Yyk7CisKKwkJCQlpZihjID09IG0pCisJCQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGluQnVmLCBxLmRhdGEpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnEpOworCQkJCQlicmVhazsK KwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoYyA9PSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGluQnVmLCAoY2hhcikgJzsnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMg PT0gJ1xuJykKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1xuJyk7CisJ fQorCisJLyogTm8gaW5wdXQgYmVmb3JlIEVPRiBzaWduYWwgbWVhbnMgdGltZSB0byBxdWl0LiAq LworCWlmIChjID09IEVPRiAmJiBpbkJ1Zi0+bGVuID09IDApCisJCXJldHVybiBFT0Y7CisKKwkv KiBBZGQgJ1wwJyB0byBtYWtlIGl0IGxvb2sgdGhlIHNhbWUgYXMgbWVzc2FnZSBjYXNlLiAqLwor CWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1wwJyk7CisKKwlyZXR1cm4gJ1En OworfQorCisvKgorICogZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdp bGwgcmVtb3ZlIG5hbWVzIGZyb20gYWxsIGRibGlzdCB0aG9zZSBjYW4KKyAqIGJlIGNvbnN0cnVj dGVkIGZyb20gZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJuIGxpc3QuCisgKgorICogcmV0dXJucyBu dW1iZXIgb2YgZGJuYW1lcyB0aG9zZSB3aWxsIGJlIHJlc3RvcmVkLgorICovCitzdGF0aWMgaW50 CitmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkgICBTaW1w bGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCSAgIFNpbXBsZVN0cmlu Z0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs CSpkYm9pZF9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lk TGlzdENlbGwJKmRib2lkcHJlY2VsbCA9IE5VTEw7CisJaW50CQkJCQkJCWNvdW50X2RiID0gMDsK KwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwkvKiBSZXR1cm4gMCBp ZiB0aGVyZSBpcyBubyBkYiB0byByZXN0b3JlLiAqLworCWlmIChkYm9pZF9jZWxsID09IE5VTEwp CisJCXJldHVybiAwOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJaWYgKCFj b25uKQorCQlwZ19sb2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4 Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5vIGRiIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdf cmVzdG9yZS4iKTsKKworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFu ZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1l IGZyb20gbGlzdC4KKwkgKi8KKwl3aGlsZSAoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJYm9v bAkJCQkJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCSpuZXh0ID0gZGJvaWRfY2VsbC0+bmV4dDsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RD ZWxsICpjZWxsZGIgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0g Y2VsbGRiLT5uZXh0KQorCQl7CisJCQkvKgorCQkJICogdGhlIGNvbnN0cnVjdCBwYXR0ZXJuIG1h dGNoaW5nIHF1ZXJ5OgorCQkJICogU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFs b2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFCisJCQkgKiBwZ19jYXRhbG9nLmRlZmF1bHQKKwkJ CSAqCisJCQkgKiBYWFggcmVwcmVzZW50cyB0aGUgc3RyaW5nIGxpdGVyYWwgZGF0YWJhc2UgbmFt ZSBkZXJpdmVkIGZyb20gdGhlCisJCQkgKiBkYm9pZF9saXN0IHZhcmlhYmxlLCB3aGljaCBpcyBp bml0aWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlCisJCQkgKiBtYXAuZGF0IGZpbGUgbG9jYXRlZCBp biB0aGUgYmFja3VwIGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UKKwkJCSAqIG5lZWQgcXVvdGVf bGl0ZXJhbF9jc3RyLgorCQkJICoKKwkJCSAqIElmIHdlIGRvbid0IGhhdmUgZGIgY29ubmVjdGlv biwgdGhlbiBjb25zaWRlciBwYXR0ZXJucyBhcyBOQU1FCisJCQkgKiBvbmx5LgorCQkJICovCisJ CQlpZiAocGdfc3RyY2FzZWNtcChkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0g MCkKKwkJCSAgIHNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJ eworCQkJCWludAlkb3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNF TEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRi LT52YWwsIGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3Ry KGRib2lkX2NlbGwtPmRiX25hbWUpLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90 Y250KTsKKworCQkJCWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJp bXByb3BlciBxdWFsaWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJ CQkJCQkgIGNlbGxkYi0+dmFsKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmlj ZWx5KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0 YSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAm JiBQUW50dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJ CQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRl IHBhdHRlcm46IFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJ CQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJ CQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJ bmNyZW1lbnQgY291bnQgaWYgZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lw X2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIl c1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRl KGRibmFtZV9vaWRfbGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNl CisJCXsKKwkJCWNvdW50X2RiKys7IC8qIEluY3JlbWVudCBkYiBjb3VudGVyLiAqLworCQkJZGJv aWRwcmVjZWxsID0gZGJvaWRfY2VsbDsKKwkJfQorCisJCS8qIFByb2Nlc3MgbmV4dCBkYm5hbWUg ZnJvbSBkYm5hbWUgbGlzdC4gKi8KKwkJZGJvaWRfY2VsbCA9IG5leHQ7CisJfQorCisJcmV0dXJu IGNvdW50X2RiOworfQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisg KgorICogT3BlbiBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHBy ZXBhcmUgYSBsaXN0IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9v aWQuCisgKgorICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1h cC5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21m aWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFt ZV9vaWRfbGlzdCkKK3sKKwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhb TUFYUEdQQVRIXTsKKwljaGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0g MDsKKworCWlmICghSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGR1bXBkaXJwYXRo KSwgIm1hcC5kYXQiKSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlz IHNraXBwZWQgYXMgbWFwLmRhdCBmaWxlIGlzIG5vdCBwcmVzZW50IGluIFwiJXNcIiIsIGR1bXBk aXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFY UEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBm aWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJ aWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZp bGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1l IGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFU SCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAgZGJfb2lkID0gSW52YWxpZE9p ZDsKKwkJY2hhcgkJZGJfb2lkX3N0cltNQVhQR1BBVEggKyAxXSA9IHsnXDAnfTsKKwkJY2hhciAg ICAgICAgZGJuYW1lW01BWFBHUEFUSCArIDFdID0geydcMCd9OworCisJCS8qIEV4dHJhY3QgZGJv aWQuICovCisJCXNzY2FuZihsaW5lLCAiJXUiICwgJmRiX29pZCk7CisJCXNzY2FuZihsaW5lLCAi JXMiICwgZGJfb2lkX3N0cik7CisKKwkJLyogTm93IGNvcHkgZGJuYW1lLiAqLworCQlzdHJjcHko ZGJuYW1lLCBsaW5lICsgc3RybGVuKGRiX29pZF9zdHIpICsgMSk7CisKKwkJLyogUmVtb3ZlIFxu IGZyb20gZGJhbm1lLiAqLworCQlkYm5hbWVbc3RybGVuKGRibmFtZSkgLSAxXSA9ICdcMCc7CisK KwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gbWFwLmRh dCBmaWxlIHdoaWxlIHJlc3RvcmluZy4iLCBkYm5hbWUsIGRiX29pZCk7CisKKwkJLyogUmVwb3J0 IGVycm9yIGlmIGZpbGUgaGFzIGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1Zh bGlkKGRiX29pZCkgfHwgc3RybGVuKGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlk IGVudHJ5IGluIG1hcC5kYXQgZmlsZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEpOworCisJCS8q CisJCSAqIFhYWCA6IGJlZm9yZSBhZGRpbmcgZGJuYW1lIGludG8gbGlzdCwgd2UgY2FuIHZlcmlm eSB0aGF0IHRoaXMgZGIKKwkJICogbmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVzdG9yZSBvciBub3Qg YnV0IGFzIG9mIG5vdywgd2UgYXJlIG1ha2luZworCQkgKiBhIGxpc3Qgb2YgYWxsIHRoZSBkYXRh YmFzZXMuCisJCSAqLworCQlzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlz dCwgZGJfb2lkLCBkYm5hbWUpOworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQg ZmlsZS4gKi8KKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICog cmVzdG9yZUFsbERhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0 aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQg ZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJh c2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4K KyAqLworc3RhdGljIGludAorcmVzdG9yZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0 dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCQlpbnQgbnVtV29ya2VycykKK3sKKwlT aW1wbGVEYXRhYmFzZU9pZExpc3QJCQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJ U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkJKmRib2lkX2NlbGw7CisJaW50CQkJCQkJCQlleGl0 X2NvZGUgPSAwOworCWludAkJCQkJCQkJbnVtX2RiX3Jlc3RvcmUgPSAwOworCWludAkJCQkJCQkJ bnVtX3RvdGFsX2RiOworCisJbnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9t X21maWxlKGR1bXBkaXJwYXRoLCAmZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQg aGFzIG5vIGVudHJ5LCByZXR1cm4gZnJvbSBoZXJlLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3Qu aGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXBnX2xvZ19pbmZvKCJmb3VuZCB0b3RhbCAl ZCBkYXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUiLCBudW1fdG90YWxfZGIpOworCisJaWYg KCFjb25uKQorCXsKKwkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNlIFwi cG9zdGdyZXNcIiAgdG8gZHVtcCBpbnRvIG91dCBmaWxlIik7CisKKwkJY29ubiA9IGNvbm5lY3RE YXRhYmFzZSgicG9zdGdyZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkg ICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkvKiBUcnkg d2l0aCB0ZW1wbGF0ZTEuICovCisJCWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRy eWluZyB0byBjb25uZWN0IGRhdGFiYXNlIFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5l Y3QgdG8gZGF0YWJhc2UgXCJwb3N0Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJ CQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1z LnBnaG9zdCwKKwkJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMu dXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEws IE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfbG9nX2luZm8oInRoZXJlIGlzIG5vIGRh dGFiYXNlIGNvbm5lY3Rpb24gc28gY29uc2lkZXIgcGF0dGVybiBhcyBzaW1wbGUgbmFtZSBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlIik7CisJCX0KKwl9CisKKwkvKgorCSAqIHByb2Nlc3NpbmcgcGdf cmV0c29yZSAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTi9OQU1FIGlmIG5vIGNvbm5lY3Rpb24u CisJICovCisJbnVtX2RiX3Jlc3RvcmUgPSBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShjb25u LCAmZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCQkJZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisK KwkvKiBUT0RPOiBNQVhfT05fRVhJVF9OSUNFTFkgaXMgMTAwIG5vdy4uLiBtYXggQUggaGFuZGxl IHJlZ2lzdGVyIG9uIGV4aXQgLiovCisJaWYgKG51bV9kYl9yZXN0b3JlID4gTUFYX09OX0VYSVRf TklDRUxZKQorCXsKKwkJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZkYm5hbWVfb2lk X2xpc3QpOworCQlwZ19mYXRhbCgiY291bmQgbm90IHJlc3RvcmUgbW9yZSB0aGFuICVkIGRhdGFi YXNlcyBieSBzaW5nbGUgcGdfcmVzdG9yZSwgaGVyZSB0b3RhbCBkYXRhYmFzZTolZCIsCisJCQkJ ICBNQVhfT05fRVhJVF9OSUNFTFksCisJCQkJICBudW1fZGJfcmVzdG9yZSk7CisJfQorCisJLyog T3BlbiBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNx bCBjb21tYW5kcy4gKi8KKwlwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoY29ubiwgZHVtcGRp cnBhdGgsIG9wdHMtPmZpbGVuYW1lKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFz IHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJ CVBRZmluaXNoKGNvbm4pOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3Jl ZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19p bmZvKCJubyBkYXRhYmFzZSBuZWVkcyB0byByZXN0b3JlIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBu dW1fdG90YWxfZGIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwZ19sb2dfaW5mbygibmVlZHMgdG8g cmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIsIG51bV9kYl9yZXN0b3Jl LCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBYWFg6IFRPRE8gdGlsbCBub3csIHdlIG1hZGUg YSBsaXN0IG9mIGRhdGFiYXNlcywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkgKiBhZnRl ciBza2lwcGluZyBuYW1lcyBvZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBsYXVuY2gg cGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgorCSAqLwor CWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKworCXdoaWxlKGRib2lkX2NlbGwg IT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJaW50CQkJZGJl eGl0X2NvZGU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9kYm5hbWUg c28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZCBpbnRvCisJCSAqIGFscmVhZHkgY3JlYXRl ZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLworCQlpZiAo b3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJh bXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lID0g TlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVzL2RhdGFi YXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9jZWxsLT5kYl9vaWQpOworCisJCXBnX2xvZ19p bmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisK KwkJLyogUmVzdG9yZSBzaW5nbGUgZGF0YWJhc2UgYW5kIHNhdmUgZXhpdF9jb2RlLiAqLworCQlk YmV4aXRfY29kZSA9IHJlc3RvcmVPbmVEYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRzLCBudW1Xb3Jr ZXJzLAorCQkJCXRydWUsIGRib2lkX2NlbGwtPmRiX25hbWUpOworCisJCS8qIFN0b3JlIGV4aXRf Y29kZSB0byByZXBvcnQgaXQgYmFjay4gKi8KKwkJaWYgKGV4aXRfY29kZSA9PSAwICYmIGRiZXhp dF9jb2RlICE9IDApCisJCQlleGl0X2NvZGUgPSBkYmV4aXRfY29kZTsKKworCQlkYm9pZF9jZWxs ID0gZGJvaWRfY2VsbC0+bmV4dDsKKwl9CisKKwkvKiBMb2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBk YXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBh cmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFtZSBhbmQgZGJvaWQgbGlz dC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7 CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCisvKgorICogcHJvY2Vzc19nbG9iYWxfc3FsX2Nv bW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4 ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50Lgor ICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBv dXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5k cyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKi8KK3N0YXRpYyB2 b2lkCitwcm9jZXNzX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwljaGFyICAgICAgICAgICAg Z2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCVBHcmVzdWx0CQkqcmVzdWx0OworCVN0cmlu Z0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxFCQkJKnBmaWxlOworCisJc25wcmludGYoZ2xv YmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsK KworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2Jh bF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9iYWxfZmls ZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkg YWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlmIChv dXRmaWxlKQorCXsKKwkJY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShvdXRmaWxlLCBwZmls ZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29t bWFuZHMuICovCisJaW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNz IGZpbGUgdGlsbCBFT0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMuICovCisJd2hpbGUgKFJl YWRPbmVTdGF0ZW1lbnQoJnNxbHN0YXRlbWVudCwgcGZpbGUpICE9IEVPRikKKwl7CisJCXBnX2xv Z19pbmZvKCJleGVjdXRpbmcgcXVlcnk6ICVzIiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQlyZXN1 bHQgPSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1 bHRTdGF0dXMocmVzdWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2Fz ZSBQR1JFU19UVVBMRVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5 OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiksIHNx bHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNsb3Nl KHBmaWxlKTsKK30KKworLyoKKyAqIGNvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUKKyAqCisg KiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0IGZpbGUgaW50byBvdXQgZmlsZS4gIElmICItIiBp cyB1c2VkIGFzIG91dGZpbGUsCisgKiB0aGVuIHByaW50IGNvbW1hbmRzIHRvIHRoZSBzdGRvdXQu CisgKi8KK3N0YXRpYyB2b2lkCitjb3B5X2dsb2JhbF9maWxlX3RvX291dF9maWxlKGNvbnN0IGNo YXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKQoreworCWNoYXIJb3V0X2ZpbGVfcGF0aFtNQVhQR1BB VEhdOworCUZJTEUJKk9QRjsKKwlpbnQJCWM7CisKKwkvKiAiLSIgaXMgdXNlZCBmb3Igc3Rkb3V0 LiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwgIi0iKSA9PSAwKQorCQlPUEYgPSBzdGRvdXQ7CisJ ZWxzZQorCXsKKwkJc25wcmludGYob3V0X2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRm aWxlKTsKKwkJT1BGID0gZm9wZW4ob3V0X2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCisJCWlm IChPUEYgPT0gTlVMTCkKKwkJeworCQkJZmNsb3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBvdXRmaWxlKTsKKwkJfQorCX0KKworCS8qIE5vdyBh cHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91dCBmaWxlLiAqLworCXdoaWxlICgoYyA9IGZnZXRjKHBm aWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBPUEYpOworCisJZmNsb3NlKHBmaWxlKTsKKworCS8q IENsb3NlIG91dCBmaWxlLiAqLworCWlmIChzdHJjbXAob3V0ZmlsZSwgIi0iKSAhPSAwKQorCQlm Y2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQKKyAqCisg KiBhcHBlbmRzIGEgbm9kZSB0byB0aGUgbGlzdCBpbiB0aGUgZW5kLgorICovCitzdGF0aWMgdm9p ZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3Qs IE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIgKmRibmFtZSkKK3sKKwlTaW1wbGVEYXRhYmFzZU9p ZExpc3RDZWxsICpjZWxsOworCisJY2VsbCA9IHBnX21hbGxvY19vYmplY3QoU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbCk7CisKKwljZWxsLT5uZXh0ID0gTlVMTDsKKwljZWxsLT5kYl9vaWQgPSBk Yl9vaWQ7CisJY2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChkYm5hbWUpOworCisJaWYgKGxpc3Qt PnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOworCWVsc2UKKwkJbGlzdC0+aGVhZCA9 IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2Z1 bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBkYm5hbWUgYW5kIGRi b2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxl dGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlz dENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5l eHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsKKwkJbmV4dGNlbGwgPSBjZWxsLT5u ZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0Y2VsbDsKKwl9CisKKwlsaXN0LT5o ZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9zdHJp bmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBhbGwgY2VsbCBmcm9tIHN0cmluZyBs aXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmluZ19mdWxsX2xpc3RfZGVsZXRlKFNp bXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJU2ltcGxlU3RyaW5nTGlzdENlbGwJKmNlbGwgPSBs aXN0LT5oZWFkOworCVNpbXBsZVN0cmluZ0xpc3RDZWxsICAgICpjZWxsbmV4dCA9IE5VTEw7CisK Kwl3aGlsZSAoY2VsbCkKKwl7CisJCWNlbGxuZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2Vs bCk7CisJCWNlbGwgPSBjZWxsbmV4dDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0 LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUKKyAq CisgKiBkZWxldGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBvaWQgbGlzdC4KKyAqLworc3RhdGlj IHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsLAorCQlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsICpwcmV2KQoreworCWlmIChwcmV2ID09IE5VTEwpCisJeworCQlsaXN0LT5o ZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorCWVsc2UKKwl7CisJCXByZXYt Pm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsKKwl9Cit9CisKKy8qCisgKiBxdW90 ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0YXRpYyBzaXplX3QKK3F1b3RlX2xpdGVyYWxfaW50 ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4pCit7CisJY29uc3Qg Y2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0ID0gZHN0OworCisJZm9yIChzID0gc3JjOyBzIDwg c3JjICsgbGVuOyBzKyspCisJeworCQlpZiAoKnMgPT0gJ1xcJykKKwkJeworCQkJKmRzdCsrID0g RVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQlicmVhazsKKwkJfQorCX0KKworCSpkc3QrKyA9ICdc Jyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJCWlmIChTUUxfU1RSX0RPVUJMRSgqc3JjLCB0 cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwl9CisJKmRzdCsr ID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBzYXZlZHN0OworfQorCisvKgorICogcXVvdGVfbGl0 ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5zIGEgcHJvcGVybHkgcXVvdGVkIGxpdGVyYWwKKyAq IGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9xdW90ZS5jCisgKi8KK3N0YXRpYyBj aGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihjb25zdCBjaGFyICpyYXdzdHIpCit7CisJY2hhcgkg ICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlpbnQJCQluZXdsZW47CisKKwlsZW4gPSBzdHJsZW4o cmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNlIHJlc3VsdCBhcmVhOyB3YXN0aW5n IGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0gcGdfbWFsbG9jKGxlbiAqIDIgKyAz ICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2ludGVybmFsKHJlc3VsdCwgcmF3c3Ry LCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAy MTQyNDBmMWFlNS4uZGU0MWVjMDZkODYKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2lj LnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjE5LDYgKzIxOSwx MSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3Jl YXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIn CiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUt ZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBn X3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2Vk IHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRp b24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1n bG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBpdCBzZWVt cyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9mYWlsc19s aWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2Jh bHMtb25seScgXSwKQEAgLTIyNiw0ICsyMzEsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3Bn X2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRo ZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlb ICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJv cjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBhbGw6IHVu cmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IGI2YzE3MGFjMjQ5Li41ODUxNTg5YjBiMiAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTI2NzQsNiArMjY3NCw4IEBAIFNodXRkb3duTW9kZQogU2lnblRT VmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rpb25MaXN0Q2VsbAorU2ltcGxlRGF0 YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCiBTaW1wbGVFY29udGV4dFN0 YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBsZU9pZExpc3RDZWxsCi0tIAoyLjM5LjMKCg== --0000000000000b9133062e045342--