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 1utOWk-006Gob-Ia for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 10:46:16 +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 1utOWi-00357R-A7 for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Sep 2025 10:46:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1utOWh-00357J-2w for pgsql-hackers@lists.postgresql.org; Tue, 02 Sep 2025 10:46:12 +0000 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1utOWb-00094j-0r for pgsql-hackers@lists.postgresql.org; Tue, 02 Sep 2025 10:46:10 +0000 Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-b4f1ee2e250so1520015a12.2 for ; Tue, 02 Sep 2025 03:46:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756809964; x=1757414764; 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=zcGt+avnasP9P69cYgagFkCiR4IBF5GT7oOt4oBYBQQ=; b=hROQ6haRnIj1xVlXpSlJmzspTOZ2CFQ+mYWRSrRgy8fkSj6lZBNtHD3QXCZcQFXoh/ BJEUx6m1uAkKe9MAbkjOYL1NV5c/mHPVGmc/Ge5mHtFY0hOygV8YZs8GXP67ByhbU1X3 zAenwSy/wcNRh4d3ki+voqUQbsDydqoEbEzUxkkT0bkD+fqM+BzPnC2SToY0ztKJEBS5 xjVcbesVSoSZCTR19ZwXAtuak5s8qrK9t5YV+YKng4nb6xRAdKbC7L5WmmcsxoGflKCX Kstt4eUICo4reBUpyaL2B/6SQAZMHynLeR+unrRVDYqbeJ9Z3epxNI0GLax4Csg36Hi7 Z8xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756809964; x=1757414764; 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=zcGt+avnasP9P69cYgagFkCiR4IBF5GT7oOt4oBYBQQ=; b=EEsU9P+8a5VBLn4Ize79cC4wimQVc1jAL3KcooyDX7QANCt58VKM5Qt4YO/FUe39lo YjzXIz97E2VAJGYvwp5TmOCkeMFCwHgj5FSDbVFc7if69GWIhpQerwXkC4E7vc3MTtZO jhZpIaZOh7FBM9vBroEJCmiReGCsybCgMPSxYBACaKEascqbnkEpjP21hEkWi9TWDZ3n RSTp9YGiSH4XTSC36bB9bJ2IcSL9DAm6sGrN5zRFVvdMd6VKA3woLXLiccR14eIens3r yj5aHzGi4YoXVeD/SkK6vXfEmKilqqTGq/oL1AA80arrTzYP9Qyb6vfTDQoGT1znOEsA WQOw== X-Forwarded-Encrypted: i=1; AJvYcCXkM0MyiTVbK5X/AWZ5tcczcFN1p9ADYuk9Ty1QxRlAJS1nrwuLyXsLug4EC+PDSScqmkjmaMiZQlYjFP57@lists.postgresql.org X-Gm-Message-State: AOJu0Ywa2ZYItNfaJf6DhiNitDMJX/6Y0cZjz8ti37cAmHV45ngcDbL1 SOOgWtdMutrEi/EzQcGflsXQLXE9ll2EUy3dJqQx7xhqBUnoqyO2gT9K91xLGni99mppAvah3Ju egsfDQBhxFgKb6gzIiusnTUWW+zQohbo= X-Gm-Gg: ASbGnctBvlJ/rat0wgs48oWT+pib/IiaY/k9bLw8V0kXQb37/kclPrRg0+6bJAF5NAX fbMTOXFTc9xTB6esK5/29wvT/C1jAuzbNIqOw2AnPDckVuBqh/o4zEQtw5GQS83POWTEkb19BnT OxQvMUfLSRH0QHbyTdPFD3XFAX9CqJoZ4Q9H7fWNsKu0j9LQ6Nwr62kWXfirdLjOIOTQ6GOZyF2 EhxLnM= X-Google-Smtp-Source: AGHT+IGxV4V339ahqRKuorhQjx6hyKFqAetfxR9kqqlJtcNEdS/MB3F2jGGqJWEYpGPHGxJOU6N/pS5QLkeilj6ogNo= X-Received: by 2002:a17:902:d4c5:b0:248:d67d:e176 with SMTP id d9443c01a7336-24944aa3a67mr155844145ad.38.1756809964104; Tue, 02 Sep 2025 03:46:04 -0700 (PDT) MIME-Version: 1.0 References: <202508301750.cbohxyy2pcce@alvherre.pgsql> <202508311209.gnvpor56qkdc@alvherre.pgsql> <4607.1756703531@localhost> <51329.1756740618@localhost> In-Reply-To: <51329.1756740618@localhost> From: Mihail Nikalayeu Date: Tue, 2 Sep 2025 12:44:27 +0200 X-Gm-Features: Ac12FXxi5u3qgQO9_BwhifFdmfCuuheQXnsi5oZcplfmn8IY4UcCs3ZHVUi4rPw Message-ID: Subject: Re: Adding REPACK [concurrently] To: Antonin Houska Cc: Alvaro Herrera , Pg Hackers , Robert Treat , Fujii Masao Content-Type: multipart/mixed; boundary="000000000000d95176063dcf3119" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d95176063dcf3119 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello! Antonin Houska : > I'll apply it to the next version of the "Add CONCURRENTLY option to REPA= CK > command" patch. I have added it to the v21 patchset. Also, I=E2=80=99ve updated the MVCC-safe patch: * it uses the "XactLockTableWait before replay + SnapshotSelf" approach fro= m [0] * it includes a TAP test to ensure MVCC safety - not intended to be committed in its current form (too heavy) * documentation has been updated. It's now much simpler and does not negatively impact performance. It is less aggressive in tuple freezing, but can be updated to match the non-MVCC-safe version if needed. While testing MVCC-safe version with stress-tests 007_repack_concurrently_mvcc.pl I encountered some random crashes with such logs: 25-09-02 12:24:40.039 CEST client backend[261907] 007_repack_concurrently_mvcc.pl ERROR: relcache reference 0x7715b9f394a8 is not owned by resource owner TopTransaction 2025-09-02 12:24:40.039 CEST client backend[261907] 007_repack_concurrently_mvcc.pl STATEMENT: REPACK (CONCURRENTLY) tbl1 USING INDEX tbl1_pkey; TRAP: failed Assert("rel->rd_refcnt > 0"), File: "../src/backend/utils/cache/relcache.c", Line: 6992, PID: 261907 postgres: CIC_test: nkey postgres [local] REPACK(ExceptionalCondition+0xbe)[0x5b7ac41d79f9] postgres: CIC_test: nkey postgres [local] REPACK(+0x852d2e)[0x5b7ac41cbd2e] postgres: CIC_test: nkey postgres [local] REPACK(+0x8aa4a6)[0x5b7ac42234a6] postgres: CIC_test: nkey postgres [local] REPACK(+0x8aad3b)[0x5b7ac4223d3b] postgres: CIC_test: nkey postgres [local] REPACK(+0x8aac69)[0x5b7ac4223c69] postgres: CIC_test: nkey postgres [local] REPACK(ResourceOwnerRelease+0x32)[0x5b7ac4223c26] postgres: CIC_test: nkey postgres [local] REPACK(+0x1f43bf)[0x5b7ac3b6d3bf] postgres: CIC_test: nkey postgres [local] REPACK(+0x1f4dfa)[0x5b7ac3b6ddfa] postgres: CIC_test: nkey postgres [local] REPACK(AbortCurrentTransaction+0xe)[0x5b7ac3b6dd6b] postgres: CIC_test: nkey postgres [local] REPACK(PostgresMain+0x57d)[0x5b7ac3fd7238] postgres: CIC_test: nkey postgres [local] REPACK(+0x654102)[0x5b7ac3fcd102] postgres: CIC_test: nkey postgres [local] REPACK(postmaster_child_launch+0x191)[0x5b7ac3eceb7a] postgres: CIC_test: nkey postgres [local] REPACK(+0x55c8c1)[0x5b7ac3ed58c1] postgres: CIC_test: nkey postgres [local] REPACK(+0x559d1e)[0x5b7ac3ed2d1e] postgres: CIC_test: nkey postgres [local] REPACK(PostmasterMain+0x168a)[0x5b7ac3ed25f8] postgres: CIC_test: nkey postgres [local] REPACK(main+0x3a1)[0x5b7ac3da2bd6= ] /lib/x86_64-linux-gnu/libc.so.6(+0x2a1ca)[0x7715b962a1ca] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x8b)[0x7715b962a28b] This time I was clever and tried to attempt to reproduce the issue on a non-MVCC safe version at first - and it is reproducible. Just comment \if :p_t1 !=3D :p_t2 (and its internals, because they catching non-mvcc behaviour which is expected without 0006 patch); and set '--no-vacuum --client=3D30 --jobs=3D4 --exit-on-abort --transactions=3D2500= 0' It takes about a minute on my PC to get the crash. [0]: https://www.postgresql.org/message-id/flat/CADzfLwXCTXNdxK-XGTKmObvT%3= D_QnaCviwgrcGtG9chsj5sYzrg%40mail.gmail.com#6d6ccf34e6debcd386d735db593379d= 8 Best regards, Mikhail. --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0006-Preserve-visibility-information-of-the-concurren.patch" Content-Disposition: attachment; filename="v21-0006-Preserve-visibility-information-of-the-concurren.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vuf0 RnJvbSA5NDY4NjJlMmE0ZGJmZDkxYWM2ODAyYzJlOGRhMTA0ZGNlODFjNDNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAyIFNlcCAyMDI1IDExOjMwOjU1ICswMjAwClN1YmplY3Q6IFtQ QVRDSCB2MjEgNi82XSBQcmVzZXJ2ZSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIG9mIHRoZSBjb25j dXJyZW50IAogZGF0YSAgY2hhbmdlcy4KCkFzIGV4cGxhaW5lZCBpbiB0aGUgY29tbWl0IG1lc3Nh Z2Ugb2YgdGhlIHByZWNlZGluZyBwYXRjaCBvZiB0aGUgc2VyaWVzLCB0aGUKZGF0YSBjaGFuZ2Vz IGRvbmUgYnkgYXBwbGljYXRpb25zIHdoaWxlIFJFUEFDSyBDT05DVVJSRU5UTFkgaXMgY29weWlu ZyB0aGUKdGFibGUgY29udGVudHMgdG8gYSBuZXcgZmlsZSBhcmUgZGVjb2RlZCBmcm9tIFdBTCBh bmQgZXZlbnR1YWxseSBhbHNvIGFwcGxpZWQKdG8gdGhlIG5ldyBmaWxlLiBUbyByZWR1Y2UgdGhl IGNvbXBsZXhpdHkgYSBsaXR0bGUgYml0LCB0aGUgcHJlY2VkaW5nIHBhdGNoCnVzZXMgdGhlIGN1 cnJlbnQgdHJhbnNhY3Rpb24gKGkuZS4gdHJhbnNhY3Rpb24gb3BlbmVkIGJ5IHRoZSBSRVBBQ0sg Y29tbWFuZCkKdG8gZXhlY3V0ZSB0aG9zZSBJTlNFUlQsIFVQREFURSBhbmQgREVMRVRFIGNvbW1h bmRzLgoKSG93ZXZlciwgUkVQQUNLIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UgdmlzaWJpbGl0 eSBvZiB0dXBsZXMuIFRoZXJlZm9yZSwKdGhpcyBwYXRjaCBmaXhlcyB0aGUgaGFuZGxpbmcgb2Yg dGhlICJjb25jdXJyZW50IGRhdGEgY2hhbmdlcyIuIEl0IGVuc3VyZXMKdGhhdCB0dXBsZXMgd3Jp dHRlbiBpbnRvIHRoZSBuZXcgdGFibGUgaGF2ZSB0aGUgc2FtZSBYSUQgYW5kIGNvbW1hbmQgSUQg KENJRCkKYXMgdGhleSBoYWQgaW4gdGhlIG9sZCB0YWJsZS4KClRvICJyZXBsYXkiIGFuIFVQREFU RSBvciBERUxFVEUgY29tbWFuZCBvbiB0aGUgbmV3IHRhYmxlLCB3ZSB1c2UgU25hcHNob3RTZWxm IHRvIGZpbmQgdGhlIGxhc3QgYWxpdmUgdmVyc2lvbiBvZiB0dXBsZSBhbmQgdXBkYXRlIHdpdGgg c3RhbXAgd2l0aCB4aWQgb2Ygb3JpZ2luYWwgdHJhbnNhY3Rpb24uIEl0IGlzIHNhZmUgYmVjYXVz ZToKKiBhbGwgdHJhbnNhY3Rpb25zIHdlIHJlcGxheWluZyBhcmUgY29tbWl0dGVkCiogYXBwbHkg d29ya2VyIHdvcmtpbmcgd2l0aG91dCBhbnkgY29uY3VycmVudCBtb2RpZmllcnMgb2YgdGhlIHRh YmxlCgpBcyBsb25nIGFzIHdlIHByZXNlcnZlIHRoZSB0dXBsZSB2aXNpYmlsaXR5IGluZm9ybWF0 aW9uICh3aGljaCBpbmNsdWRlcyBYSUQpLAppdCdzIGltcG9ydGFudCB0byBhdm9pZCBsb2dpY2Fs IGRlY29kaW5nIG9mIHRoZSBXQUwgZ2VuZXJhdGVkIGJ5IERNTHMgb24gdGhlCm5ldyB0YWJsZTog dGhlIGxvZ2ljYWwgZGVjb2Rpbmcgc3Vic3lzdGVtIHByb2JhYmx5IGRvZXMgbm90IGV4cGVjdCB0 aGF0IHRoZQppbmNvbWluZyBXQUwgcmVjb3JkcyBjb250YWluIFhJRHMgb2YgYW4gYWxyZWFkeSBk ZWNvZGVkIHRyYW5zYWN0aW9ucy4gKEFuZCBvZgpjb3Vyc2UsIHJlcGVhdGVkIGRlY29kaW5nIHdv dWxkIGJlIHdhc3RlZCBlZmZvcnQuKQoKQXV0aG9yOiBBbnRvbmluIEhvdXNrYSA8YWhAY3liZXJ0 ZWMuYXQ+IHdpdGggY2hhbmdlcyBmcm9tIE1pa2hhaWwgTmlrYWxheWV1IDxtaWhhaWxuaWthbGF5 ZXVAZ21haWwuY29tCi0tLQogY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIC4uLi9hbWNoZWNrL3QvMDA3X3JlcGFja19jb25jdXJyZW50bHlfbXZj Yy5wbCB8IDExMyArKysrKysrKysrKysrKysrKysKIGRvYy9zcmMvc2dtbC9tdmNjLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgICB8ICAxMiArLQogZG9jL3NyYy9zZ21sL3JlZi9yZXBhY2suc2dt bCAgICAgICAgICAgICAgICAgIHwgICA5IC0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3Rv YXN0X2ludGVybmFscy5jICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bS5jICAgICAgICAgICAgICB8ICA0NiArKysrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jICAgICAgfCAgMjQgKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1 c3Rlci5jICAgICAgICAgICAgICAgIHwgIDg1ICsrKysrKysrKy0tLS0KIC4uLi9wZ291dHB1dF9y ZXBhY2svcGdvdXRwdXRfcmVwYWNrLmMgICAgICAgICB8ICAxOCArLS0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvY29t bWFuZHMvY2x1c3Rlci5oICAgICAgICAgICAgICAgIHwgICAyICsKIC4uLi9pbmplY3Rpb25fcG9p bnRzL3NwZWNzL3JlcGFjay5zcGVjICAgICAgICB8ICAgNCAtCiAxMiBmaWxlcyBjaGFuZ2VkLCAy NDkgaW5zZXJ0aW9ucygrKSwgODAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29u dHJpYi9hbWNoZWNrL3QvMDA3X3JlcGFja19jb25jdXJyZW50bHlfbXZjYy5wbAoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYW1jaGVjay9tZXNvbi5idWlsZCBiL2NvbnRyaWIvYW1jaGVjay9tZXNvbi5i dWlsZAppbmRleCAxZjBjMzQ3ZWQ1NC4uZDA3ZDZlZDNmMGMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv YW1jaGVjay9tZXNvbi5idWlsZAorKysgYi9jb250cmliL2FtY2hlY2svbWVzb24uYnVpbGQKQEAg LTUwLDYgKzUwLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3ZlcmlmeV9uYnRyZWVfdW5p cXVlLnBsJywKICAgICAgICd0LzAwNV9waXRyLnBsJywKICAgICAgICd0LzAwNl92ZXJpZnlfZ2lu LnBsJywKKyAgICAgICd0LzAwN19yZXBhY2tfY29uY3VycmVudGx5X212Y2MucGwnLAogICAgIF0s CiAgIH0sCiB9CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8wMDdfcmVwYWNrX2NvbmN1 cnJlbnRseV9tdmNjLnBsIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3JlcGFja19jb25jdXJyZW50 bHlfbXZjYy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTgzZmQ1 YjgxNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svdC8wMDdfcmVwYWNrX2Nv bmN1cnJlbnRseV9tdmNjLnBsCkBAIC0wLDAgKzEsMTEzIEBACisKKyMgQ29weXJpZ2h0IChjKSAy MDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBS RVBBQ0sgQ09OQ1VSUkVOVExZIHdpdGggY29uY3VycmVudCBtb2RpZmljYXRpb25zCit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKKwordXNlIFRlc3Q6Ok1v cmU7CisKK215ICRub2RlOworCisjCisjIFRlc3Qgc2V0LXVwCisjCiskbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnQ0lDX3Rlc3QnKTsKKyRub2RlLT5pbml0OworJG5vZGUt PmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSdsb2NrX3RpbWVvdXQgPSAnIC4gKDEw MDAgKiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCkpOworJG5vZGUt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3dhbF9sZXZlbCA9IGxvZ2lj YWwKKykpOworJG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENS RUFURSBUQUJMRSB0YmwxKGkgaW50IFBSSU1BUlkgS0VZLCBqIGludCkpKTsKKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgVEFCTEUgdGJsMihpIGludCBQUklNQVJZIEtFWSwg aiBpbnQpKSk7CisKKworIyBJbnNlcnQgMTAwIHJvd3MgaW50byB0YmwxCiskbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHEoCisgICAgSU5TRVJUIElOVE8gdGJsMSBTRUxFQ1QgaSwgaSAlIDEw MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgaQorKSk7CisKKyMgSW5zZXJ0IDEwMCByb3dz IGludG8gdGJsMgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKAorICAgIElOU0VSVCBJ TlRPIHRibDIgU0VMRUNUIGksIGkgJSAxMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGkK KykpOworCisKKyMgSW5zZXJ0IDEwMCByb3dzIGludG8gdGJsMQorJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxKAorCUNSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGxvZ19yYWlzZShpIGlu dCwgajEgaW50LCBqMiBpbnQpIFJFVFVSTlMgVk9JRCBBUyAkJAorCUJFR0lOCisJICBSQUlTRSBO T1RJQ0UgJ0VSUk9SIGk9JSBqMT0lIGoyPSUnLCBpLCBqMSwgajI7CisJRU5EOyQkIExBTkdVQUdF IHBscGdzcWw7CispKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBV TkxPR0dFRCBTRVFVRU5DRSBpbl9yb3dfcmVidWlsZCBTVEFSVCAxIElOQ1JFTUVOVCAxOykpOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVi dWlsZCcpOykpOworCisKKyRub2RlLT5wZ2JlbmNoKAorJy0tbm8tdmFjdXVtIC0tY2xpZW50PTEw IC0tam9icz00IC0tZXhpdC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0yNTAwJywKKzAsCitbcXJ7 YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCitbcXJ7XiR9XSwKKydjb25jdXJyZW50IG9wZXJhdGlvbnMg d2l0aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFknLAoreworCSdjb25jdXJyZW50 X29wcycgPT4gcSgKKwkJU0VMRUNUIHBnX3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBB UyBnb3Rsb2NrIFxnc2V0CisJCVxpZiA6Z290bG9jaworCQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jv d19yZWJ1aWxkJykgQVMgbGFzdF92YWx1ZSBcZ3NldAorCQkJXGlmIDpsYXN0X3ZhbHVlID0gMgor CQkJCVJFUEFDSyAoQ09OQ1VSUkVOVExZKSB0YmwxIFVTSU5HIElOREVYIHRibDFfcGtleTsKKwkJ CQlcc2xlZXAgMTAgbXMKKwkJCQlSRVBBQ0sgKENPTkNVUlJFTlRMWSkgdGJsMiBVU0lORyBJTkRF WCB0YmwyX3BrZXk7CisJCQkJXHNsZWVwIDEwIG1zCisJCQlcZW5kaWYKKwkJCVNFTEVDVCBwZ19h ZHZpc29yeV91bmxvY2soNDIpOworCQlcZWxzZQorCQkJXHNldCBudW0gcmFuZG9tKDEsIDEwMCkK KwkJCUJFR0lOOworCQkJVVBEQVRFIHRibDEgU0VUIGogPSBqICsgMSBXSEVSRSBpID0gOm51bTsK KwkJCVxzbGVlcCAxIG1zCisJCQlVUERBVEUgdGJsMSBTRVQgaiA9IGogKyAyIFdIRVJFIGkgPSA6 bnVtOworCQkJXHNsZWVwIDEgbXMKKwkJCVVQREFURSB0YmwxIFNFVCBqID0gaiArIDMgV0hFUkUg aSA9IDpudW07CisJCQlcc2xlZXAgMSBtcworCQkJVVBEQVRFIHRibDEgU0VUIGogPSBqICsgNCBX SEVSRSBpID0gOm51bTsKKwkJCVxzbGVlcCAxIG1zCisKKwkJCVVQREFURSB0YmwyIFNFVCBqID0g aiArIDEgV0hFUkUgaSA9IDpudW07CisJCQlcc2xlZXAgMSBtcworCQkJVVBEQVRFIHRibDIgU0VU IGogPSBqICsgMiBXSEVSRSBpID0gOm51bTsKKwkJCVxzbGVlcCAxIG1zCisJCQlVUERBVEUgdGJs MiBTRVQgaiA9IGogKyAzIFdIRVJFIGkgPSA6bnVtOworCQkJXHNsZWVwIDEgbXMKKwkJCVVQREFU RSB0YmwyIFNFVCBqID0gaiArIDQgV0hFUkUgaSA9IDpudW07CisKKwkJCUNPTU1JVDsKKwkJCVNF TEVDVCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisKKwkJCUJFR0lOIFRSQU5TQUNUSU9O IElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CisJCQlTRUxFQ1QgQ09BTEVTQ0UoU1VN KGopLCAwKSBBUyB0MSBGUk9NIHRibDEgV0hFUkUgaSA9IDpudW0gXGdzZXQgcF8KKwkJCVxzbGVl cCAxMCBtcworCQkJU0VMRUNUIENPQUxFU0NFKFNVTShqKSwgMCkgQVMgdDIgRlJPTSB0YmwyIFdI RVJFIGkgPSA6bnVtIFxnc2V0IHBfCisJCQlcaWYgOnBfdDEgIT0gOnBfdDIKKwkJCQlDT01NSVQ7 CisJCQkJU0VMRUNUIGxvZ19yYWlzZSh0YmwxLmksIHRibDEuaiwgdGJsMi5qKSBGUk9NIHRibDEg TEVGVCBPVVRFUiBKT0lOIHRibDIgT04gdGJsMS5pID0gdGJsMi5pIFdIRVJFIHRibDEuaiAhPSB0 YmwyLmo7CisJCQkJXHNsZWVwIDEwIG1zCisJCQkJU0VMRUNUIGxvZ19yYWlzZSh0YmwxLmksIHRi bDEuaiwgdGJsMi5qKSBGUk9NIHRibDEgTEVGVCBPVVRFUiBKT0lOIHRibDIgT04gdGJsMS5pID0g dGJsMi5pIFdIRVJFIHRibDEuaiAhPSB0YmwyLmo7CisJCQkJU0VMRUNUICg6cF90MSArIDpwX3Qy KSAvIDA7CisJCQlcZW5kaWYKKworCQkJQ09NTUlUOworCQlcZW5kaWYKKwkpCit9KTsKKworJG5v ZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tdmNj LnNnbWwgYi9kb2Mvc3JjL3NnbWwvbXZjYy5zZ21sCmluZGV4IDBmNWMzNGFmNTQyLi4wNDllZTc1 YTRiYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL212Y2Muc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvbXZjYy5zZ21sCkBAIC0xODMzLDE3ICsxODMzLDE1IEBAIFNFTEVDVCBwZ19hZHZpc29yeV9s b2NrKHEuaWQpIEZST00KICAgIDx0aXRsZT5DYXZlYXRzPC90aXRsZT4KIAogICAgPHBhcmE+Ci0g ICAgU29tZSBjb21tYW5kcywgY3VycmVudGx5IG9ubHkgPGxpbmsgbGlua2VuZD0ic3FsLXRydW5j YXRlIj48Y29tbWFuZD5UUlVOQ0FURTwvY29tbWFuZD48L2xpbms+LCB0aGUKLSAgICB0YWJsZS1y ZXdyaXRpbmcgZm9ybXMgb2YgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVydGFibGUiPjxjb21tYW5k PkFMVEVSCi0gICAgVEFCTEU8L2NvbW1hbmQ+PC9saW5rPiBhbmQgPGNvbW1hbmQ+UkVQQUNLPC9j b21tYW5kPiB3aXRoCi0gICAgdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0 aW9uLCBhcmUgbm90CisgICAgU29tZSBEREwgY29tbWFuZHMsIGN1cnJlbnRseSBvbmx5IDxsaW5r IGxpbmtlbmQ9InNxbC10cnVuY2F0ZSI+PGNvbW1hbmQ+VFJVTkNBVEU8L2NvbW1hbmQ+PC9saW5r PiBhbmQgdGhlCisgICAgdGFibGUtcmV3cml0aW5nIGZvcm1zIG9mIDxsaW5rIGxpbmtlbmQ9InNx bC1hbHRlcnRhYmxlIj48Y29tbWFuZD5BTFRFUiBUQUJMRTwvY29tbWFuZD48L2xpbms+LCBhcmUg bm90CiAgICAgTVZDQy1zYWZlLiAgVGhpcyBtZWFucyB0aGF0IGFmdGVyIHRoZSB0cnVuY2F0aW9u IG9yIHJld3JpdGUgY29tbWl0cywgdGhlCiAgICAgdGFibGUgd2lsbCBhcHBlYXIgZW1wdHkgdG8g Y29uY3VycmVudCB0cmFuc2FjdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIGEKLSAgICBzbmFwc2hv dCB0YWtlbiBiZWZvcmUgdGhlIGNvbW1hbmQgY29tbWl0dGVkLiAgVGhpcyB3aWxsIG9ubHkgYmUg YW4KKyAgICBzbmFwc2hvdCB0YWtlbiBiZWZvcmUgdGhlIERETCBjb21tYW5kIGNvbW1pdHRlZC4g IFRoaXMgd2lsbCBvbmx5IGJlIGFuCiAgICAgaXNzdWUgZm9yIGEgdHJhbnNhY3Rpb24gdGhhdCBk aWQgbm90IGFjY2VzcyB0aGUgdGFibGUgaW4gcXVlc3Rpb24KLSAgICBiZWZvcmUgdGhlIGNvbW1h bmQgc3RhcnRlZCAmbWRhc2g7IGFueSB0cmFuc2FjdGlvbiB0aGF0IGhhcyBkb25lIHNvCisgICAg YmVmb3JlIHRoZSBEREwgY29tbWFuZCBzdGFydGVkICZtZGFzaDsgYW55IHRyYW5zYWN0aW9uIHRo YXQgaGFzIGRvbmUgc28KICAgICB3b3VsZCBob2xkIGF0IGxlYXN0IGFuIDxsaXRlcmFsPkFDQ0VT UyBTSEFSRTwvbGl0ZXJhbD4gdGFibGUgbG9jaywKLSAgICB3aGljaCB3b3VsZCBibG9jayB0aGUg dHJ1bmNhdGluZyBvciByZXdyaXRpbmcgY29tbWFuZCB1bnRpbCB0aGF0IHRyYW5zYWN0aW9uIGNv bXBsZXRlcy4KKyAgICB3aGljaCB3b3VsZCBibG9jayB0aGUgRERMIGNvbW1hbmQgdW50aWwgdGhh dCB0cmFuc2FjdGlvbiBjb21wbGV0ZXMuCiAgICAgU28gdGhlc2UgY29tbWFuZHMgd2lsbCBub3Qg Y2F1c2UgYW55IGFwcGFyZW50IGluY29uc2lzdGVuY3kgaW4gdGhlCiAgICAgdGFibGUgY29udGVu dHMgZm9yIHN1Y2Nlc3NpdmUgcXVlcmllcyBvbiB0aGUgdGFyZ2V0IHRhYmxlLCBidXQgdGhleQog ICAgIGNvdWxkIGNhdXNlIHZpc2libGUgaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBjb250ZW50 cyBvZiB0aGUgdGFyZ2V0CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3JlcGFjay5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9yZXBhY2suc2dtbAppbmRleCBmZjVjZTQ4ZGU1NS4uMjcxOTIz YTVhNjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcmVwYWNrLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9yZXBhY2suc2dtbApAQCAtMjkyLDE1ICsyOTIsNiBAQCBSRVBBQ0sgWyAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAu Li5dICkgXSBbIDxyZQogICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L2l0ZW1pemVkbGlzdD4K ICAgICAgPC9wYXJhPgotCi0gICAgIDx3YXJuaW5nPgotICAgICAgPHBhcmE+Ci0gICAgICAgPGNv bW1hbmQ+UkVQQUNLPC9jb21tYW5kPiB3aXRoIHRoZSA8bGl0ZXJhbD5DT05DVVJSRU5UTFk8L2xp dGVyYWw+Ci0gICAgICAgb3B0aW9uIGlzIG5vdCBNVkNDLXNhZmUsIHNlZSA8eHJlZiBsaW5rZW5k PSJtdmNjLWNhdmVhdHMiLz4gZm9yCi0gICAgICAgZGV0YWlscy4KLSAgICAgIDwvcGFyYT4KLSAg ICAgPC93YXJuaW5nPgotCiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwppbmRleCBhMWQwZWVk ODk1My4uNTg2ZWI0MmExMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24v dG9hc3RfaW50ZXJuYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9p bnRlcm5hbHMuYwpAQCAtMzIwLDcgKzMyMCw4IEBAIHRvYXN0X3NhdmVfZGF0dW0oUmVsYXRpb24g cmVsLCBEYXR1bSB2YWx1ZSwKIAkJbWVtY3B5KFZBUkRBVEEoJmNodW5rX2RhdGEpLCBkYXRhX3As IGNodW5rX3NpemUpOwogCQl0b2FzdHR1cCA9IGhlYXBfZm9ybV90dXBsZSh0b2FzdHR1cERlc2Ms IHRfdmFsdWVzLCB0X2lzbnVsbCk7CiAKLQkJaGVhcF9pbnNlcnQodG9hc3RyZWwsIHRvYXN0dHVw LCBteWNpZCwgb3B0aW9ucywgTlVMTCk7CisJCWhlYXBfaW5zZXJ0KHRvYXN0cmVsLCB0b2FzdHR1 cCwgR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKSwgbXljaWQsCisJCQkJCW9wdGlvbnMsIE5VTEwp OwogCiAJCS8qCiAJCSAqIENyZWF0ZSB0aGUgaW5kZXggZW50cnkuICBXZSBjaGVhdCBhIGxpdHRs ZSBoZXJlIGJ5IG5vdCB1c2luZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCBmOWE0ZmUz ZmFlZC4uNDVkYTU5MDJkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBAIC0yMDcwLDcg KzIwNzAsNyBAQCBSZWxlYXNlQnVsa0luc2VydFN0YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0 YXRlKQogLyoKICAqCWhlYXBfaW5zZXJ0CQktIGluc2VydCB0dXBsZSBpbnRvIGEgaGVhcAogICoK LSAqIFRoZSBuZXcgdHVwbGUgaXMgc3RhbXBlZCB3aXRoIGN1cnJlbnQgdHJhbnNhY3Rpb24gSUQg YW5kIHRoZSBzcGVjaWZpZWQKKyAqIFRoZSBuZXcgdHVwbGUgaXMgc3RhbXBlZCB3aXRoIHNwZWNp ZmllZCB0cmFuc2FjdGlvbiBJRCBhbmQgdGhlIHNwZWNpZmllZAogICogY29tbWFuZCBJRC4KICAq CiAgKiBTZWUgdGFibGVfdHVwbGVfaW5zZXJ0IGZvciBjb21tZW50cyBhYm91dCBtb3N0IG9mIHRo ZSBpbnB1dCBmbGFncywgZXhjZXB0CkBAIC0yMDg2LDE1ICsyMDg2LDE2IEBAIFJlbGVhc2VCdWxr SW5zZXJ0U3RhdGVQaW4oQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCiAgKiByZWZsZWN0ZWQgaW50 byAqdHVwLgogICovCiB2b2lkCi1oZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKLQkJCWludCBvcHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUg YmlzdGF0ZSkKK2hlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwLCBU cmFuc2FjdGlvbklkIHhpZCwKKwkJCUNvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLCBCdWxrSW5z ZXJ0U3RhdGUgYmlzdGF0ZSkKIHsKLQlUcmFuc2FjdGlvbklkIHhpZCA9IEdldEN1cnJlbnRUcmFu c2FjdGlvbklkKCk7CiAJSGVhcFR1cGxlCWhlYXB0dXA7CiAJQnVmZmVyCQlidWZmZXI7CiAJQnVm ZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAJYm9vbAkJYWxsX3Zpc2libGVfY2xlYXJl ZCA9IGZhbHNlOwogCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOworCiAJLyog Q2hlYXAsIHNpbXBsaXN0aWMgY2hlY2sgdGhhdCB0aGUgdHVwbGUgbWF0Y2hlcyB0aGUgcmVsJ3Mg cm93dHlwZS4gKi8KIAlBc3NlcnQoSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVwLT50X2RhdGEp IDw9CiAJCSAgIFJlbGF0aW9uR2V0TnVtYmVyT2ZBdHRyaWJ1dGVzKHJlbGF0aW9uKSk7CkBAIC0y MTc2LDggKzIxNzcsMTUgQEAgaGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBs ZSB0dXAsIENvbW1hbmRJZCBjaWQsCiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgYSBjYXRhbG9nLCB3 ZSBuZWVkIHRvIHRyYW5zbWl0IGNvbWJvIENJRHMgdG8gcHJvcGVybHkKIAkJICogZGVjb2RlLCBz byBsb2cgdGhhdCBhcyB3ZWxsLgorCQkgKgorCQkgKiBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMIHNo b3VsZCBiZSBzZXQgd2hlbiBhcHBseWluZyBkYXRhIGNoYW5nZXMKKwkJICogZG9uZSBieSBvdGhl ciB0cmFuc2FjdGlvbnMgZHVyaW5nIFJFUEFDSyBDT05DVVJSRU5UTFkuIEluIHN1Y2ggYQorCQkg KiBjYXNlLCB0aGUgaW5zZXJ0aW9uIHNob3VsZCBub3QgYmUgZGVjb2RlZCBhdCBhbGwgLSBzZWUK KwkJICogaGVhcF9kZWNvZGUoKS4gKEl0J3MgYWxzbyBzZXQgYnkgcmF3X2hlYXBfaW5zZXJ0KCkg Zm9yIFRPQVNULCBidXQKKwkJICogVE9BU1QgZG9lcyBub3QgcGFzcyB0aGlzIHRlc3QgYW55d2F5 LikKIAkJICovCi0JCWlmIChSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJl bGF0aW9uKSkKKwkJaWYgKChvcHRpb25zICYgSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCkgPT0gMCAm JgorCQkJUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCiAJ CQlsb2dfaGVhcF9uZXdfY2lkKHJlbGF0aW9uLCBoZWFwdHVwKTsKIAogCQkvKgpAQCAtMjcyMyw3 ICsyNzMxLDggQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFi bGVTbG90ICoqc2xvdHMsIGludCBudHVwbGVzLAogdm9pZAogc2ltcGxlX2hlYXBfaW5zZXJ0KFJl bGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKQogewotCWhlYXBfaW5zZXJ0KHJlbGF0aW9u LCB0dXAsIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksIDAsIE5VTEwpOworCWhlYXBfaW5zZXJ0 KHJlbGF0aW9uLCB0dXAsIEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCksCisJCQkJR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKSwgMCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0yNzgwLDExICsyNzg5LDEx IEBAIHhtYXhfaW5mb21hc2tfY2hhbmdlZCh1aW50MTYgbmV3X2luZm9tYXNrLCB1aW50MTYgb2xk X2luZm9tYXNrKQogICovCiBUTV9SZXN1bHQKIGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBJdGVtUG9pbnRlciB0aWQsCi0JCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNr LCBib29sIHdhaXQsCi0JCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQs IGJvb2wgd2FsX2xvZ2ljYWwpCisJCQlUcmFuc2FjdGlvbklkIHhpZCwgQ29tbWFuZElkIGNpZCwg U25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAorCQkJVE1fRmFpbHVyZURhdGEgKnRtZmQs IGJvb2wgY2hhbmdpbmdQYXJ0LAorCQkJYm9vbCB3YWxfbG9naWNhbCkKIHsKIAlUTV9SZXN1bHQJ cmVzdWx0OwotCVRyYW5zYWN0aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsK IAlJdGVtSWQJCWxwOwogCUhlYXBUdXBsZURhdGEgdHA7CiAJUGFnZQkJcGFnZTsKQEAgLTI4MDEs NiArMjgxMCw3IEBAIGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0 aWQsCiAJYm9vbAkJb2xkX2tleV9jb3BpZWQgPSBmYWxzZTsKIAogCUFzc2VydChJdGVtUG9pbnRl cklzVmFsaWQodGlkKSk7CisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwogCiAJ QXNzZXJ0SGFzU25hcHNob3RGb3JUb2FzdChyZWxhdGlvbik7CiAKQEAgLTMyMTcsNyArMzIyNyw3 IEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlk KQogCVRNX1Jlc3VsdAlyZXN1bHQ7CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsKIAotCXJlc3VsdCA9 IGhlYXBfZGVsZXRlKHJlbGF0aW9uLCB0aWQsCisJcmVzdWx0ID0gaGVhcF9kZWxldGUocmVsYXRp b24sIHRpZCwgR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKSwKIAkJCQkJCSBHZXRDdXJyZW50Q29t bWFuZElkKHRydWUpLCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBj b21taXQgKi8gLAogCQkJCQkJICZ0bWZkLCBmYWxzZSwJLyogY2hhbmdpbmdQYXJ0ICovCkBAIC0z MjYwLDEyICszMjcwLDExIEBAIHNpbXBsZV9oZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwg SXRlbVBvaW50ZXIgdGlkKQogICovCiBUTV9SZXN1bHQKIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJl bGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAotCQkJQ29tbWFuZElk IGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1fRmFpbHVyZURhdGEg KnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAorCQkJVHJhbnNhY3Rpb25JZCB4aWQsIENv bW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssCisJCQlib29sIHdhaXQsIFRNX0ZhaWx1 cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKIAkJCVRVX1VwZGF0ZUluZGV4 ZXMgKnVwZGF0ZV9pbmRleGVzLCBib29sIHdhbF9sb2dpY2FsKQogewogCVRNX1Jlc3VsdAlyZXN1 bHQ7Ci0JVHJhbnNhY3Rpb25JZCB4aWQgPSBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOwogCUJp dG1hcHNldCAgKmhvdF9hdHRyczsKIAlCaXRtYXBzZXQgICpzdW1fYXR0cnM7CiAJQml0bWFwc2V0 ICAqa2V5X2F0dHJzOwpAQCAtMzMwNSw2ICszMzE0LDcgQEAgaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQkJaW5mb21h c2syX25ld190dXBsZTsKIAogCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQob3RpZCkpOworCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAogCS8qIENoZWFwLCBzaW1wbGlzdGlj IGNoZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5cGUuICovCiAJQXNz ZXJ0KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKG5ld3R1cC0+dF9kYXRhKSA8PQpAQCAtNDE0NCw4 ICs0MTU0LDEyIEBAIGwyOgogCQkvKgogCQkgKiBGb3IgbG9naWNhbCBkZWNvZGluZyB3ZSBuZWVk IGNvbWJvIENJRHMgdG8gcHJvcGVybHkgZGVjb2RlIHRoZQogCQkgKiBjYXRhbG9nLgorCQkgKgor CQkgKiBMaWtlIGluIGhlYXBfaW5zZXJ0KCksIHZpc2liaWxpdHkgaXMgdW5jaGFuZ2VkIHdoZW4g Y2FsbGVkIGZyb20KKwkJICogVkFDVVVNIEZVTEwgLyBDTFVTVEVSLgogCQkgKi8KLQkJaWYgKFJl bGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pKQorCQlpZiAod2Fs X2xvZ2ljYWwgJiYKKwkJCVJlbGF0aW9uSXNBY2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVs YXRpb24pKQogCQl7CiAJCQlsb2dfaGVhcF9uZXdfY2lkKHJlbGF0aW9uLCAmb2xkdHVwKTsKIAkJ CWxvZ19oZWFwX25ld19jaWQocmVsYXRpb24sIGhlYXB0dXApOwpAQCAtNDUxMSw3ICs0NTI1LDcg QEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlk LCBIZWFwVHVwbGUgdHVwLAogCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CiAJTG9ja1R1cGxlTW9kZSBs b2NrbW9kZTsKIAotCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsCisJ cmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cCwgR2V0Q3VycmVudFRyYW5z YWN0aW9uSWQoKSwKIAkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBJbnZhbGlkU25h cHNob3QsCiAJCQkJCQkgdHJ1ZSAvKiB3YWl0IGZvciBjb21taXQgKi8gLAogCQkJCQkJICZ0bWZk LCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzLApAQCAtNTM1MSw4ICs1MzY1LDYgQEAgY29tcHV0 ZV9uZXdfeG1heF9pbmZvbWFzayhUcmFuc2FjdGlvbklkIHhtYXgsIHVpbnQxNiBvbGRfaW5mb21h c2ssCiAJdWludDE2CQluZXdfaW5mb21hc2ssCiAJCQkJbmV3X2luZm9tYXNrMjsKIAotCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25JZChhZGRfdG9feG1heCkpOwotCiBs NToKIAluZXdfaW5mb21hc2sgPSAwOwogCW5ld19pbmZvbWFzazIgPSAwOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZDAzMDg0NzY4ZTAuLjY3MzNlNWZkZGE2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI1Myw3ICsy NTMsOCBAQCBoZWFwYW1fdHVwbGVfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCwgQ29tbWFuZElkIGNpZCwKIAl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0 c190YWJsZU9pZDsKIAogCS8qIFBlcmZvcm0gdGhlIGluc2VydGlvbiwgYW5kIGNvcHkgdGhlIHJl c3VsdGluZyBJdGVtUG9pbnRlciAqLwotCWhlYXBfaW5zZXJ0KHJlbGF0aW9uLCB0dXBsZSwgY2lk LCBvcHRpb25zLCBiaXN0YXRlKTsKKwloZWFwX2luc2VydChyZWxhdGlvbiwgdHVwbGUsIEdldEN1 cnJlbnRUcmFuc2FjdGlvbklkKCksIGNpZCwgb3B0aW9ucywKKwkJCQliaXN0YXRlKTsKIAlJdGVt UG9pbnRlckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIAogCWlmIChzaG91 bGRGcmVlKQpAQCAtMjc2LDcgKzI3Nyw4IEBAIGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRp dmUoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVTbG90ICpzbG90LAogCW9wdGlvbnMgfD0g SEVBUF9JTlNFUlRfU1BFQ1VMQVRJVkU7CiAKIAkvKiBQZXJmb3JtIHRoZSBpbnNlcnRpb24sIGFu ZCBjb3B5IHRoZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KLQloZWFwX2luc2VydChyZWxhdGlv biwgdHVwbGUsIGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CisJaGVhcF9pbnNlcnQocmVsYXRpb24s IHR1cGxlLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLCBjaWQsIG9wdGlvbnMsCisJCQkJYmlz dGF0ZSk7CiAJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7 CiAKIAlpZiAoc2hvdWxkRnJlZSkKQEAgLTMxMCw4ICszMTIsOCBAQCBoZWFwYW1fdHVwbGVfZGVs ZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiAJ ICogdGhlIHN0b3JhZ2UgaXRzZWxmIGlzIGNsZWFuaW5nIHRoZSBkZWFkIHR1cGxlcyBieSBpdHNl bGYsIGl0IGlzIHRoZQogCSAqIHRpbWUgdG8gY2FsbCB0aGUgaW5kZXggdHVwbGUgZGVsZXRpb24g YWxzby4KIAkgKi8KLQlyZXR1cm4gaGVhcF9kZWxldGUocmVsYXRpb24sIHRpZCwgY2lkLCBjcm9z c2NoZWNrLCB3YWl0LCB0bWZkLCBjaGFuZ2luZ1BhcnQsCi0JCQkJCSAgIHRydWUpOworCXJldHVy biBoZWFwX2RlbGV0ZShyZWxhdGlvbiwgdGlkLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLCBj aWQsCisJCQkJCSAgIGNyb3NzY2hlY2ssIHdhaXQsIHRtZmQsIGNoYW5naW5nUGFydCwgdHJ1ZSk7 CiB9CiAKIApAQCAtMzI5LDcgKzMzMSw4IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCXNsb3Qt PnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOwogCXR1cGxlLT50X3Rh YmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOwogCi0JcmVzdWx0ID0gaGVhcF91cGRhdGUocmVs YXRpb24sIG90aWQsIHR1cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsCisJcmVzdWx0ID0gaGVh cF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1cGxlLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgp LAorCQkJCQkJIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwKIAkJCQkJCSB0bWZkLCBsb2NrbW9kZSwg dXBkYXRlX2luZGV4ZXMsIHRydWUpOwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwg JnNsb3QtPnR0c190aWQpOwogCkBAIC0yNDc3LDkgKzI0ODAsMTYgQEAgcmVmb3JtX2FuZF9yZXdy aXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKIAkJICogZmxhZyB0byBza2lwIGxvZ2ljYWwgZGVj b2Rpbmc6IGFzIHNvb24gYXMgUkVQQUNLIENPTkNVUlJFTlRMWSBzd2FwcwogCQkgKiB0aGUgcmVs YXRpb24gZmlsZXMsIGl0IGRyb3BzIHRoaXMgcmVsYXRpb24sIHNvIG5vIGxvZ2ljYWwKIAkJICog cmVwbGljYXRpb24gc3Vic2NyaXB0aW9uIHNob3VsZCBuZWVkIHRoZSBkYXRhLgorCQkgKgorCQkg KiBJdCBpcyBhbHNvIGNydWNpYWwgdG8gc3RhbXAgdGhlIG5ldyByZWNvcmQgd2l0aCB0aGUgZXhh Y3Qgc2FtZSB4aWQKKwkJICogYW5kIGNpZCwgYmVjYXVzZSB0aGUgdHVwbGUgbXVzdCBiZSB2aXNp YmxlIHRvIHRoZSBzbmFwc2hvdHMgb2YgdGhlCisJCSAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25z IGxhdGVyLgogCQkgKi8KLQkJaGVhcF9pbnNlcnQoTmV3SGVhcCwgY29waWVkVHVwbGUsIEdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSksCi0JCQkJCUhFQVBfSU5TRVJUX05PX0xPR0lDQUwsIE5VTEwp OworCQkvLyBUT0RPOiBsb29rcyBsaWtlIGNpZCBpcyBub3QgcmVxdWlyZWQKKwkJQ29tbWFuZElk CWNpZCA9IEhlYXBUdXBsZUhlYWRlckdldFJhd0NvbW1hbmRJZCh0dXBsZS0+dF9kYXRhKTsKKwkJ VHJhbnNhY3Rpb25JZCB4aWQgPSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKHR1cGxlLT50X2RhdGEp OworCisJCWhlYXBfaW5zZXJ0KE5ld0hlYXAsIGNvcGllZFR1cGxlLCB4aWQsIGNpZCwgSEVBUF9J TlNFUlRfTk9fTE9HSUNBTCwgTlVMTCk7CiAJfQogCiAJaGVhcF9mcmVldHVwbGUoY29waWVkVHVw bGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCmluZGV4IDYxMjI0YTNhZGYyLi45MzZjYjBhZTQyOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9w cmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2luY2x1ZGUgInV0 aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCkBAIC0xNDYsNiArMTQ3LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlfY29uY3VycmVudF9k ZWxldGUoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKIAkJCQkJCQkJCUNvbmN1 cnJlbnRDaGFuZ2UgKmNoYW5nZSk7CiBzdGF0aWMgSGVhcFR1cGxlIGZpbmRfdGFyZ2V0X3R1cGxl KFJlbGF0aW9uIHJlbCwgU2NhbktleSBrZXksIGludCBua2V5cywKIAkJCQkJCQkJICAgSGVhcFR1 cGxlIHR1cF9rZXksCisJCQkJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkgICBJ bmRleEluc2VydFN0YXRlICppaXN0YXRlLAogCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqaWRl bnRfc2xvdCwKIAkJCQkJCQkJICAgSW5kZXhTY2FuRGVzYyAqc2Nhbl9wKTsKQEAgLTEwMDgsNyAr MTAxMCwxNCBAQCByZWJ1aWxkX3JlbGF0aW9uKFJlcGFja0NvbW1hbmQgY21kLCBib29sIHVzaW5n aW5kZXgsCiAKIAkvKiBUaGUgaGlzdG9yaWMgc25hcHNob3Qgd29uJ3QgYmUgbmVlZGVkIGFueW1v cmUuICovCiAJaWYgKHNuYXBzaG90KQorCXsKKwkJVHJhbnNhY3Rpb25JZCB4bWluID0gc25hcHNo b3QtPnhtaW47CiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUFzc2VydChjb25jdXJyZW50KTsK KwkJLy8gVE9ETzogc2VlbXMgbGlrZSBpdCBub3QgcmVxdWlyZWQ6IG5lZWQgdG8gY2hlY2sgU25h cEJ1aWxkSW5pdGlhbFNuYXBzaG90Rm9yUmVwYWNrCisJCVdhaXRGb3JPbGRlclNuYXBzaG90cyh4 bWluLCBmYWxzZSk7CisJfQorCiAKIAlpZiAoY29uY3VycmVudCkKIAl7CkBAIC0xMjk5LDMwICsx MzA4LDM1IEBAIGNvcHlfdGFibGVfZGF0YShSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRI ZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwKIAkgKiBub3QgdG8gYmUgYWdncmVzc2l2ZSBhYm91dCB0 aGlzLgogCSAqLwogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YoVmFjdXVtUGFyYW1zKSk7Ci0J dmFjdXVtX2dldF9jdXRvZmZzKE9sZEhlYXAsIHBhcmFtcywgJmN1dG9mZnMpOwotCi0JLyoKLQkg KiBGcmVlemVYaWQgd2lsbCBiZWNvbWUgdGhlIHRhYmxlJ3MgbmV3IHJlbGZyb3plbnhpZCwgYW5k IHRoYXQgbXVzdG4ndCBnbwotCSAqIGJhY2t3YXJkcywgc28gdGFrZSB0aGUgbWF4LgotCSAqLwor CWlmICghY29uY3VycmVudCkKIAl7CiAJCVRyYW5zYWN0aW9uSWQgcmVsZnJvemVueGlkID0gT2xk SGVhcC0+cmRfcmVsLT5yZWxmcm96ZW54aWQ7CisJCU11bHRpWGFjdElkIHJlbG1pbm14aWQgPSBP bGRIZWFwLT5yZF9yZWwtPnJlbG1pbm14aWQ7CiAKKwkJdmFjdXVtX2dldF9jdXRvZmZzKE9sZEhl YXAsIHBhcmFtcywgJmN1dG9mZnMpOworCQkvKgorCQkgKiBGcmVlemVYaWQgd2lsbCBiZWNvbWUg dGhlIHRhYmxlJ3MgbmV3IHJlbGZyb3plbnhpZCwgYW5kIHRoYXQgbXVzdG4ndCBnbworCQkgKiBi YWNrd2FyZHMsIHNvIHRha2UgdGhlIG1heC4KKwkJICovCiAJCWlmIChUcmFuc2FjdGlvbklkSXNW YWxpZChyZWxmcm96ZW54aWQpICYmCiAJCQlUcmFuc2FjdGlvbklkUHJlY2VkZXMoY3V0b2Zmcy5G cmVlemVMaW1pdCwgcmVsZnJvemVueGlkKSkKIAkJCWN1dG9mZnMuRnJlZXplTGltaXQgPSByZWxm cm96ZW54aWQ7Ci0JfQotCi0JLyoKLQkgKiBNdWx0aVhhY3RDdXRvZmYsIHNpbWlsYXJseSwgc2hv dWxkbid0IGdvIGJhY2t3YXJkcyBlaXRoZXIuCi0JICovCi0JewotCQlNdWx0aVhhY3RJZCByZWxt aW5teGlkID0gT2xkSGVhcC0+cmRfcmVsLT5yZWxtaW5teGlkOwotCisJCS8qCisJCSAqIE11bHRp WGFjdEN1dG9mZiwgc2ltaWxhcmx5LCBzaG91bGRuJ3QgZ28gYmFja3dhcmRzIGVpdGhlci4KKwkJ ICovCiAJCWlmIChNdWx0aVhhY3RJZElzVmFsaWQocmVsbWlubXhpZCkgJiYKIAkJCU11bHRpWGFj dElkUHJlY2VkZXMoY3V0b2Zmcy5NdWx0aVhhY3RDdXRvZmYsIHJlbG1pbm14aWQpKQogCQkJY3V0 b2Zmcy5NdWx0aVhhY3RDdXRvZmYgPSByZWxtaW5teGlkOwogCX0KKwllbHNlCisJeworCQkvKgor CQkgKiBJbiBjb25jdXJyZW50IG1vZGUgd2UgcmV1c2UgYWxsIHRoZSB4bWluL3htYXgsCisJCSAq IHNvIGp1c3QgdXNlIGN1cnJlbnQgdmFsdWVzIGZvciBzaW1wbGljaXR5LgorCQkgKi8KKwkJY3V0 b2Zmcy5GcmVlemVMaW1pdCA9IE9sZEhlYXAtPnJkX3JlbC0+cmVsZnJvemVueGlkOworCQljdXRv ZmZzLk11bHRpWGFjdEN1dG9mZiA9IE9sZEhlYXAtPnJkX3JlbC0+cmVsbWlubXhpZDsKKwl9CiAK IAkvKgogCSAqIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhbiBpbmRleHNjYW4gb3Igc2Vxc2Nhbi1h bmQtb3B0aW9uYWwtc29ydCB0byBzY2FuCkBAIC0yNjc1LDYgKzI2ODksMTYgQEAgYXBwbHlfY29u Y3VycmVudF9jaGFuZ2VzKFJlcGFja0RlY29kaW5nU3RhdGUgKmRzdGF0ZSwgUmVsYXRpb24gcmVs LAogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAoVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhj aGFuZ2UueGlkKSkKKwkJeworCQkJLyogeGlkIGlzIGNvbW1pdHRlZCBmb3Igc3VyZSBiZWNhdXNl IHdlIGdvdCB0aGF0IHVwZGF0ZSBmcm9tIHJlb3JkZXJidWZmZXIuCisJCQkgKiBidXQgdGhlcmUg aXMgYSBwb3NzaWJpbGl0eSBwcm9jYXJyYXkgaXMgbm90IHlldCB1cGRhdGVkIGFuZCBjdXJyZW50 IGJhY2tlbmQgc3RpbGwgc2VlIGl0IGFzCisJCQkgKiBpbi1wcm9ncmVzcy4gTGV0J3Mgd2FpdCBm b3IgcHJvY2FycmF5IHRvIGJlIHVwZGF0ZWQuICovCisJCQlYYWN0TG9ja1RhYmxlV2FpdChjaGFu Z2UueGlkLCBOVUxMLCBOVUxMLCBYTFRXX05vbmUpOworCQkJQXNzZXJ0KCFUcmFuc2FjdGlvbklk SXNJblByb2dyZXNzKGNoYW5nZS54aWQpKTsKKwkJCUFzc2VydChUcmFuc2FjdGlvbklkRGlkQ29t bWl0KGNoYW5nZS54aWQpKTsKKwkJfQorCiAJCS8qCiAJCSAqIEV4dHJhY3QgdGhlIHR1cGxlIGZy b20gdGhlIGNoYW5nZS4gVGhlIHR1cGxlIGlzIGNvcGllZCBoZXJlIGJlY2F1c2UKIAkJICogaXQg bWlnaHQgYmUgYXNzaWduZWQgdG8gJ3R1cF9vbGQnLCBpbiB3aGljaCBjYXNlIGl0IG5lZWRzIHRv CkBAIC0yNzEyLDkgKzI3MzYsMTMgQEAgYXBwbHlfY29uY3VycmVudF9jaGFuZ2VzKFJlcGFja0Rl Y29kaW5nU3RhdGUgKmRzdGF0ZSwgUmVsYXRpb24gcmVsLAogCQkJfQogCiAJCQkvKgotCQkJICog RmluZCB0aGUgdHVwbGUgdG8gYmUgdXBkYXRlZCBvciBkZWxldGVkLgorCQkJICogRmluZCB0aGUg dHVwbGUgdG8gYmUgdXBkYXRlZCBvciBkZWxldGVkIHVzaW5nIFNuYXBzaG90U2VsZi4KKwkJCSAq IFRoYXQgd2F5IHdlIHJlY2VpdmUgdGhlIGxhc3QgYWxpdmUgdmVyc2lvbiBpbiBjYXNlIG9mIEhP VCBjaGFpbi4KKwkJCSAqIEl0IGlzIGd1YXJhbnRlZWQgdGhlcmUgaXMgbm8gYW55IG5vbi15ZXQg Y29tbWl0dGVkLCBidXQgdXBkYXRlZCB2ZXJzaW9uCisJCQkgKiBiZWNhdXNlIHdlIGhlcmUgcmVw bGF5aW5nIGFsbC1jb21taXR0ZWQgdHJhbnNhY3Rpb25zIHdpdGhvdXQgYW55IGNvbmN1cnJlbmN5 CisJCQkgKiBpbnZvbHZlZC4KIAkJCSAqLwotCQkJdHVwX2V4aXN0ID0gZmluZF90YXJnZXRfdHVw bGUocmVsLCBrZXksIG5rZXlzLCB0dXBfa2V5LAorCQkJdHVwX2V4aXN0ID0gZmluZF90YXJnZXRf dHVwbGUocmVsLCBrZXksIG5rZXlzLCB0dXBfa2V5LCBTbmFwc2hvdFNlbGYsCiAJCQkJCQkJCQkJ ICBpaXN0YXRlLCBpZGVudF9zbG90LCAmaW5kX3NjYW4pOwogCQkJaWYgKHR1cF9leGlzdCA9PSBO VUxMKQogCQkJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gZmluZCB0YXJnZXQgdHVwbGUiKTsKQEAg LTI3NDMsNiArMjc3MSw3IEBAIGFwcGx5X2NvbmN1cnJlbnRfY2hhbmdlcyhSZXBhY2tEZWNvZGlu Z1N0YXRlICpkc3RhdGUsIFJlbGF0aW9uIHJlbCwKIAkJICovCiAJCWlmIChjaGFuZ2Uua2luZCAh PSBDSEFOR0VfVVBEQVRFX09MRCkKIAkJeworCQkJLy8gVE9ETzogbm90IHN1cmUgaXQgaXMgcmVx dWlyZWQgYXQgYWxsOiB3ZSBhcmUgcmVwbGF5aW5nIGNvbW1pdHRlZCB0cmFuc2FjdGlvbnMgc3Rh bXBpbmcgdGhlbSB3aXRoIGNvbW1pdHRlZCBYSUQKIAkJCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7CiAJCQlVcGRhdGVBY3RpdmVTbmFwc2hvdENvbW1hbmRJZCgpOwogCQl9CkBAIC0yNzcxLDkg KzI4MDAsMTEgQEAgYXBwbHlfY29uY3VycmVudF9pbnNlcnQoUmVsYXRpb24gcmVsLCBDb25jdXJy ZW50Q2hhbmdlICpjaGFuZ2UsIEhlYXBUdXBsZSB0dXAsCiAJICogTGlrZSBzaW1wbGVfaGVhcF9p bnNlcnQoKSwgYnV0IG1ha2Ugc3VyZSB0aGF0IHRoZSBJTlNFUlQgaXMgbm90CiAJICogbG9naWNh bGx5IGRlY29kZWQgLSBzZWUgcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKCkgZm9yIG1vcmUKIAkg KiBpbmZvcm1hdGlvbi4KKwkgKgorCSAqIFVzZSBhbHJlYWR5IGNvbW1pdHRlZCB4aWQgdG8gc3Rh bXAgdGhlIHR1cGxlLgogCSAqLwotCWhlYXBfaW5zZXJ0KHJlbCwgdHVwLCBHZXRDdXJyZW50Q29t bWFuZElkKHRydWUpLCBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMLAotCQkJCU5VTEwpOworCWhlYXBf aW5zZXJ0KHJlbCwgdHVwLCBjaGFuZ2UtPnhpZCwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwK KwkJCQlIRUFQX0lOU0VSVF9OT19MT0dJQ0FMLCBOVUxMKTsKIAogCS8qCiAJICogVXBkYXRlIGlu ZGV4ZXMuCkBAIC0yNzgxLDYgKzI4MTIsNyBAQCBhcHBseV9jb25jdXJyZW50X2luc2VydChSZWxh dGlvbiByZWwsIENvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSwgSGVhcFR1cGxlIHR1cCwKIAkgKiBJ biBjYXNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXggbmVlZCB0aGUgYWN0aXZlIHNuYXBzaG90IGFu ZCBjYWxsZXIKIAkgKiBoYXNuJ3Qgc2V0IG9uZS4KIAkgKi8KKwlQdXNoQWN0aXZlU25hcHNob3Qo R2V0TGF0ZXN0U25hcHNob3QoKSk7CiAJRXhlY1N0b3JlSGVhcFR1cGxlKHR1cCwgaW5kZXhfc2xv dCwgZmFsc2UpOwogCXJlY2hlY2sgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoaWlzdGF0ZS0+cnJp LAogCQkJCQkJCQkJaW5kZXhfc2xvdCwKQEAgLTI3OTEsNiArMjgyMyw3IEBAIGFwcGx5X2NvbmN1 cnJlbnRfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQ29uY3VycmVudENoYW5nZSAqY2hhbmdlLCBIZWFw VHVwbGUgdHVwLAogCQkJCQkJCQkJTklMLAkvKiBhcmJpdGVySW5kZXhlcyAqLwogCQkJCQkJCQkJ ZmFsc2UJLyogb25seVN1bW1hcml6aW5nICovCiAJCSk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsK IAogCS8qCiAJICogSWYgcmVjaGVjayBpcyByZXF1aXJlZCwgaXQgbXVzdCBoYXZlIGJlZW4gcHJl Zm9ybWVkIG9uIHRoZSBzb3VyY2UKQEAgLTI4MTksOSArMjg1MiwxMSBAQCBhcHBseV9jb25jdXJy ZW50X3VwZGF0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBsZSB0dXBfdGFy Z2V0LAogCSAqCiAJICogRG8gaXQgbGlrZSBpbiBzaW1wbGVfaGVhcF91cGRhdGUoKSwgZXhjZXB0 IGZvciAnd2FsX2xvZ2ljYWwnIChhbmQKIAkgKiBleGNlcHQgZm9yICd3YWl0JykuCisJICoKKwkg KiBVc2UgYWxyZWFkeSBjb21taXR0ZWQgeGlkIHRvIHN0YW1wIHRoZSB0dXBsZS4KIAkgKi8KIAly ZXMgPSBoZWFwX3VwZGF0ZShyZWwsICZ0dXBfdGFyZ2V0LT50X3NlbGYsIHR1cCwKLQkJCQkJICBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkgIGNoYW5nZS0+eGlkLCBHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLAogCQkJCQkgIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJICBmYWxzZSwJ Lyogbm8gd2FpdCAtIG9ubHkgd2UgYXJlIGRvaW5nIGNoYW5nZXMgKi8KIAkJCQkJICAmdG1mZCwg JmxvY2ttb2RlLCAmdXBkYXRlX2luZGV4ZXMsCkBAIC0yODMzLDYgKzI4NjgsNyBAQCBhcHBseV9j b25jdXJyZW50X3VwZGF0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBsZSB0 dXBfdGFyZ2V0LAogCiAJaWYgKHVwZGF0ZV9pbmRleGVzICE9IFRVX05vbmUpCiAJeworCQlQdXNo QWN0aXZlU25hcHNob3QoR2V0TGF0ZXN0U25hcHNob3QoKSk7CiAJCXJlY2hlY2sgPSBFeGVjSW5z ZXJ0SW5kZXhUdXBsZXMoaWlzdGF0ZS0+cnJpLAogCQkJCQkJCQkJCWluZGV4X3Nsb3QsCiAJCQkJ CQkJCQkJaWlzdGF0ZS0+ZXN0YXRlLApAQCAtMjg0Miw2ICsyODc4LDcgQEAgYXBwbHlfY29uY3Vy cmVudF91cGRhdGUoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwLCBIZWFwVHVwbGUgdHVwX3Rh cmdldCwKIAkJCQkJCQkJCQlOSUwsCS8qIGFyYml0ZXJJbmRleGVzICovCiAJCS8qIG9ubHlTdW1t YXJpemluZyAqLwogCQkJCQkJCQkJCXVwZGF0ZV9pbmRleGVzID09IFRVX1N1bW1hcml6aW5nKTsK KwkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJbGlzdF9mcmVlKHJlY2hlY2spOwogCX0KIApAQCAt Mjg2MCw5ICsyODk3LDExIEBAIGFwcGx5X2NvbmN1cnJlbnRfZGVsZXRlKFJlbGF0aW9uIHJlbCwg SGVhcFR1cGxlIHR1cF90YXJnZXQsCiAJICoKIAkgKiBEbyBpdCBsaWtlIGluIHNpbXBsZV9oZWFw X2RlbGV0ZSgpLCBleGNlcHQgZm9yICd3YWxfbG9naWNhbCcgKGFuZAogCSAqIGV4Y2VwdCBmb3Ig J3dhaXQnKS4KKwkgKgorCSAqIFVzZSBhbHJlYWR5IGNvbW1pdHRlZCB4aWQgdG8gc3RhbXAgdGhl IHR1cGxlLgogCSAqLwotCXJlcyA9IGhlYXBfZGVsZXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2Vs ZiwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKLQkJCQkJICBJbnZhbGlkU25hcHNob3QsIGZh bHNlLAorCXJlcyA9IGhlYXBfZGVsZXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2VsZiwgY2hhbmdl LT54aWQsCisJCQkJCSAgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90 LCBmYWxzZSwKIAkJCQkJICAmdG1mZCwKIAkJCQkJICBmYWxzZSwJLyogbm8gd2FpdCAtIG9ubHkg d2UgYXJlIGRvaW5nIGNoYW5nZXMgKi8KIAkJCQkJICBmYWxzZSAvKiB3YWxfbG9naWNhbCAqLyAp OwpAQCAtMjg4Niw3ICsyOTI1LDcgQEAgYXBwbHlfY29uY3VycmVudF9kZWxldGUoUmVsYXRpb24g cmVsLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKICAqLwogc3RhdGljIEhlYXBUdXBsZQogZmluZF90 YXJnZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBTY2FuS2V5IGtleSwgaW50IG5rZXlzLCBIZWFwVHVw bGUgdHVwX2tleSwKLQkJCQkgIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUsCisJCQkJICBTbmFw c2hvdCBzbmFwc2hvdCwgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKIAkJCQkgIFR1cGxlVGFi bGVTbG90ICppZGVudF9zbG90LCBJbmRleFNjYW5EZXNjICpzY2FuX3ApCiB7CiAJSW5kZXhTY2Fu RGVzYyBzY2FuOwpAQCAtMjg5NSw3ICsyOTM0LDcgQEAgZmluZF90YXJnZXRfdHVwbGUoUmVsYXRp b24gcmVsLCBTY2FuS2V5IGtleSwgaW50IG5rZXlzLCBIZWFwVHVwbGUgdHVwX2tleSwKIAlIZWFw VHVwbGUJcmVzdWx0ID0gTlVMTDsKIAogCS8qIFhYWCBubyBpbnN0cnVtZW50YXRpb24gZm9yIG5v dyAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpaXN0YXRlLT5pZGVudF9pbmRleCwg R2V0QWN0aXZlU25hcHNob3QoKSwKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWlzdGF0 ZS0+aWRlbnRfaW5kZXgsIHNuYXBzaG90LAogCQkJCQkJICAgTlVMTCwgbmtleXMsIDApOwogCSpz Y2FuX3AgPSBzY2FuOwogCWluZGV4X3Jlc2NhbihzY2FuLCBrZXksIG5rZXlzLCBOVUxMLCAwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9wZ291 dHB1dF9yZXBhY2suYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9w Z291dHB1dF9yZXBhY2suYwppbmRleCA2ODdmYmJjNTliYi4uMDIwZmY3YjdjODAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9wZ291dHB1dF9yZXBh Y2suYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dF9yZXBhY2svcGdvdXRw dXRfcmVwYWNrLmMKQEAgLTMyLDcgKzMyLDggQEAgc3RhdGljIHZvaWQgcGx1Z2luX3RydW5jYXRl KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJUmVsYXRpb24gcmVs YXRpb25zW10sCiAJCQkJCQkJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIHN0YXRpYyB2 b2lkIHN0b3JlX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCi0JCQkJCQkgQ29u Y3VycmVudENoYW5nZUtpbmQga2luZCwgSGVhcFR1cGxlIHR1cGxlKTsKKwkJCQkJCSBDb25jdXJy ZW50Q2hhbmdlS2luZCBraW5kLCBIZWFwVHVwbGUgdHVwbGUsCisJCQkJCQkgVHJhbnNhY3Rpb25J ZCB4aWQpOwogCiB2b2lkCiBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxi YWNrcyAqY2IpCkBAIC0xMjQsNyArMTI1LDcgQEAgcGx1Z2luX2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQlpZiAobmV3dHVwbGUg PT0gTlVMTCkKIAkJCQkJZWxvZyhFUlJPUiwgIkluY29tcGxldGUgaW5zZXJ0IGluZm8uIik7CiAK LQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfSU5TRVJULCBuZXd0dXBsZSk7CisJCQkJc3Rv cmVfY2hhbmdlKGN0eCwgQ0hBTkdFX0lOU0VSVCwgbmV3dHVwbGUsIGNoYW5nZS0+dHhuLT54aWQp OwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToK QEAgLTE0MSw5ICsxNDIsMTEgQEAgcGx1Z2luX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJZWxvZyhFUlJPUiwgIkluY29tcGxl dGUgdXBkYXRlIGluZm8uIik7CiAKIAkJCQlpZiAob2xkdHVwbGUgIT0gTlVMTCkKLQkJCQkJc3Rv cmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1VQREFURV9PTEQsIG9sZHR1cGxlKTsKKwkJCQkJc3RvcmVf Y2hhbmdlKGN0eCwgQ0hBTkdFX1VQREFURV9PTEQsIG9sZHR1cGxlLAorCQkJCQkJCQkgY2hhbmdl LT50eG4tPnhpZCk7CiAKLQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfVVBEQVRFX05FVywg bmV3dHVwbGUpOworCQkJCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9VUERBVEVfTkVXLCBuZXd0 dXBsZSwKKwkJCQkJCQkgY2hhbmdlLT50eG4tPnhpZCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFOgpAQCAtMTU2LDcgKzE1OSw3IEBAIHBsdWdp bl9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJaWYgKG9sZHR1cGxlID09IE5VTEwpCiAJCQkJCWVsb2coRVJST1IsICJJbmNvbXBs ZXRlIGRlbGV0ZSBpbmZvLiIpOwogCi0JCQkJc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdFX0RFTEVU RSwgb2xkdHVwbGUpOworCQkJCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9ERUxFVEUsIG9sZHR1 cGxlLCBjaGFuZ2UtPnR4bi0+eGlkKTsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAt MTkwLDEzICsxOTMsMTMgQEAgcGx1Z2luX3RydW5jYXRlKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlpZiAoaSA9PSBucmVsYXRpb25z KQogCQlyZXR1cm47CiAKLQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfVFJVTkNBVEUsIE5VTEwp OworCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9UUlVOQ0FURSwgTlVMTCwgSW52YWxpZFRyYW5z YWN0aW9uSWQpOwogfQogCiAvKiBTdG9yZSBjb25jdXJyZW50IGRhdGEgY2hhbmdlLiAqLwogc3Rh dGljIHZvaWQKIHN0b3JlX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIENvbmN1 cnJlbnRDaGFuZ2VLaW5kIGtpbmQsCi0JCQkgSGVhcFR1cGxlIHR1cGxlKQorCQkJIEhlYXBUdXBs ZSB0dXBsZSwgVHJhbnNhY3Rpb25JZCB4aWQpCiB7CiAJUmVwYWNrRGVjb2RpbmdTdGF0ZSAqZHN0 YXRlOwogCWNoYXIJICAgKmNoYW5nZV9yYXc7CkBAIC0yNjYsNiArMjY5LDcgQEAgc3RvcmVfY2hh bmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgQ29uY3VycmVudENoYW5nZUtpbmQga2lu ZCwKIAlkc3QgPSBkc3Rfc3RhcnQgKyBTaXplT2ZDb25jdXJyZW50Q2hhbmdlOwogCW1lbWNweShk c3QsIHR1cGxlLT50X2RhdGEsIHR1cGxlLT50X2xlbik7CiAKKwljaGFuZ2UueGlkID0geGlkOwog CS8qIFRoZSBkYXRhIGhhcyBiZWVuIGNvcGllZC4gKi8KIAlpZiAoZmxhdHRlbmVkKQogCQlwZnJl ZSh0dXBsZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggYjgyZGQxN2E5NjYuLjk4MTQyNWYyM2I2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCkBAIC0zMTYsMjIgKzMxNiwyNCBAQCBleHRlcm4gQnVsa0luc2VydFN0 YXRlIEdldEJ1bGtJbnNlcnRTdGF0ZSh2b2lkKTsKIGV4dGVybiB2b2lkIEZyZWVCdWxrSW5zZXJ0 U3RhdGUoQnVsa0luc2VydFN0YXRlKTsKIGV4dGVybiB2b2lkIFJlbGVhc2VCdWxrSW5zZXJ0U3Rh dGVQaW4oQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogCi1leHRlcm4gdm9pZCBoZWFwX2luc2Vy dChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKLQkJCQkJ CWludCBvcHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CitleHRlcm4gdm9pZCBoZWFw X2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgVHJhbnNhY3Rpb25JZCB4 aWQsCisJCQkJCQlDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJp c3RhdGUpOwogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24s IHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENv bW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3Rh dGUpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRl bVBvaW50ZXIgdGlkLAotCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNr LCBib29sIHdhaXQsCisJCQkJCQkJIFRyYW5zYWN0aW9uSWQgeGlkLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJCSBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCiAJCQkJCQkJIHN0cnVjdCBU TV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQsCiAJCQkJCQkJIGJvb2wgd2Fs X2xvZ2ljYWwpOwogZXh0ZXJuIHZvaWQgaGVhcF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCk7CiBleHRlcm4gdm9pZCBoZWFwX2Fib3J0X3NwZWN1 bGF0aXZlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQpOwogZXh0ZXJuIFRNX1Jl c3VsdCBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwKLQkJ CQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwKKwkJCQkJCQkgSGVhcFR1cGxlIG5ld3R1cCwgVHJhbnNh Y3Rpb25JZCB4aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ss IGJvb2wgd2FpdCwKIAkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVw bGVNb2RlICpsb2NrbW9kZSwKLQkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4 ZXMsIGJvb2wgd2FsX2xvZ2ljYWwpOworCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVf aW5kZXhlcywKKwkJCQkJCQkgYm9vbCB3YWxfbG9naWNhbCk7CiBleHRlcm4gVE1fUmVzdWx0IGhl YXBfbG9ja190dXBsZShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJ CQkgQ29tbWFuZElkIGNpZCwgTG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0 X3BvbGljeSwKIAkJCQkJCQkJIGJvb2wgZm9sbG93X3VwZGF0ZXMsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVy LmgKaW5kZXggNGE1MDhjNTdhNTAuLjI0MmY4ZGE3NzBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9jbHVzdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5o CkBAIC02MSw2ICs2MSw4IEBAIHR5cGVkZWYgc3RydWN0IENvbmN1cnJlbnRDaGFuZ2UKIAkvKiBT ZWUgdGhlIGVudW0gYWJvdmUuICovCiAJQ29uY3VycmVudENoYW5nZUtpbmQga2luZDsKIAorCS8q IFRyYW5zYWN0aW9uIHRoYXQgY2hhbmdlcyB0aGUgZGF0YS4gKi8KKwlUcmFuc2FjdGlvbklkIHhp ZDsKIAkvKgogCSAqIFRoZSBhY3R1YWwgdHVwbGUuCiAJICoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYyBiL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYwppbmRleCA3NTg1MDMzNDk4 Ni4uMzcxMWE3YzkyYjkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9zcGVjcy9yZXBhY2suc3BlYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9w b2ludHMvc3BlY3MvcmVwYWNrLnNwZWMKQEAgLTg2LDkgKzg2LDYgQEAgc3RlcCBjaGFuZ2VfbmV3 CiAjIFdoZW4gYXBwbHlpbmcgY29uY3VycmVudCBkYXRhIGNoYW5nZXMsIHdlIHNob3VsZCBzZWUg dGhlIGVmZmVjdHMgb2YgYW4KICMgaW4tcHJvZ3Jlc3Mgc3VidHJhbnNhY3Rpb24uCiAjCi0jIFhY WCBOb3Qgc3VyZSB0aGlzIHRlc3QgaXMgdXNlZnVsIG5vdyAtIGl0IHdhcyBkZXNpZ25lZCBmb3Ig dGhlIHBhdGNoIHRoYXQKLSMgcHJlc2VydmVzIHR1cGxlIHZpc2liaWxpdHkgYW5kIHdoaWNoIHRo ZXJlZm9yZSBtb2RpZmllcwotIyBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25JZCgp Lgogc3RlcCBjaGFuZ2Vfc3VieGFjdDEKIHsKIAlCRUdJTjsKQEAgLTEwMyw3ICsxMDAsNiBAQCBz dGVwIGNoYW5nZV9zdWJ4YWN0MQogIyBXaGVuIGFwcGx5aW5nIGNvbmN1cnJlbnQgZGF0YSBjaGFu Z2VzLCB3ZSBzaG91bGQgbm90IHNlZSB0aGUgZWZmZWN0cyBvZiBhCiAjIHJvbGxlZCBiYWNrIHN1 YnRyYW5zYWN0aW9uLgogIwotIyBYWFggSXMgdGhpcyB0ZXN0IHVzZWZ1bD8gU2VlIGFib3ZlLgog c3RlcCBjaGFuZ2Vfc3VieGFjdDIKIHsKIAlCRUdJTjsKLS0gCjIuNDMuMAoK --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0003-Refactor-index_concurrently_create_copy-for-use-.patch" Content-Disposition: attachment; filename="v21-0003-Refactor-index_concurrently_create_copy-for-use-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vun2 RnJvbSA4OTZmNGZjOTBkMTI4ZjBhODYyNWY0N2I4MmIwOGViMGRhMTQ1YmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmluIEhvdXNrYSA8YWhAY3liZXJ0ZWMuYXQ+CkRhdGU6 IE1vbiwgMTEgQXVnIDIwMjUgMTU6MzE6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIIHYyMSAzLzZd IFJlZmFjdG9yIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weSgpIGZvciB1c2UKIHdpdGgg UkVQQUNLIChDT05DVVJSRU5UTFkpLgoKVGhpcyBwYXRjaCBtb3ZlcyB0aGUgY29kZSB0byBpbmRl eF9jcmVhdGVfY29weSgpIGFuZCBhZGRzIGEgImNvbmN1cnJlbnRseSIKcGFyYW1ldGVyIHNvIGl0 IGNhbiBiZSB1c2VkIGJ5IFJFUEFDSyAoQ09OQ1VSUkVOVExZKS4KCldpdGggdGhlIENPTkNVUlJF TlRMWSBvcHRpb24sIFJFUEFDSyBjYW5ub3Qgc2ltcGx5IHN3YXAgdGhlIGhlYXAgZmlsZSBhbmQK cmVidWlsZCBpdHMgaW5kZXhlcy4gSW5zdGVhZCwgaXQgbmVlZHMgdG8gYnVpbGQgYSBzZXBhcmF0 ZSBzZXQgb2YgaW5kZXhlcwooaW5jbHVkaW5nIHN5c3RlbSBjYXRhbG9nIGVudHJpZXMpICpiZWZv cmUqIHRoZSBhY3R1YWwgc3dhcCwgdG8gcmVkdWNlIHRoZQp0aW1lIEFjY2Vzc0V4Y2x1c2l2ZUxv Y2sgbmVlZHMgdG8gYmUgaGVsZCBmb3IuCi0tLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j IHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4LmggfCAgMyArKysKIDIgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygr KSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4 LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggMzA2M2FiZmY5YTUuLjBkZWUx YjFhOWQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0xMjkwLDE1ICsxMjkwLDMxIEBAIGluZGV4X2Ny ZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAvKgogICogaW5kZXhfY29uY3VycmVudGx5X2Ny ZWF0ZV9jb3B5CiAgKgotICogQ3JlYXRlIGNvbmN1cnJlbnRseSBhbiBpbmRleCBiYXNlZCBvbiB0 aGUgZGVmaW5pdGlvbiBvZiB0aGUgb25lIHByb3ZpZGVkIGJ5Ci0gKiBjYWxsZXIuICBUaGUgaW5k ZXggaXMgaW5zZXJ0ZWQgaW50byBjYXRhbG9ncyBhbmQgbmVlZHMgdG8gYmUgYnVpbHQgbGF0ZXIK LSAqIG9uLiAgVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGNvbmN1cnJlbnQgcmVpbmRleCBwcm9jZXNz aW5nLgotICoKLSAqICJ0YWJsZXNwYWNlT2lkIiBpcyB0aGUgdGFibGVzcGFjZSB0byB1c2UgZm9y IHRoaXMgaW5kZXguCisgKiBWYXJpYW50IG9mIGluZGV4X2NyZWF0ZV9jb3B5KCksIGNhbGxlZCBk dXJpbmcgY29uY3VycmVudCByZWluZGV4CisgKiBwcm9jZXNzaW5nLgogICovCiBPaWQKIGluZGV4 X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJ bmRleElkLAogCQkJCQkJCSAgIE9pZCB0YWJsZXNwYWNlT2lkLCBjb25zdCBjaGFyICpuZXdOYW1l KQoreworCXJldHVybiBpbmRleF9jcmVhdGVfY29weShoZWFwUmVsYXRpb24sIG9sZEluZGV4SWQs IHRhYmxlc3BhY2VPaWQsIG5ld05hbWUsCisJCQkJCQkJIHRydWUpOworfQorCisvKgorICogaW5k ZXhfY3JlYXRlX2NvcHkKKyAqCisgKiBDcmVhdGUgYW4gaW5kZXggYmFzZWQgb24gdGhlIGRlZmlu aXRpb24gb2YgdGhlIG9uZSBwcm92aWRlZCBieSBjYWxsZXIuICBUaGUKKyAqIGluZGV4IGlzIGlu c2VydGVkIGludG8gY2F0YWxvZ3MgYW5kIG5lZWRzIHRvIGJlIGJ1aWx0IGxhdGVyIG9uLgorICoK KyAqICJ0YWJsZXNwYWNlT2lkIiBpcyB0aGUgdGFibGVzcGFjZSB0byB1c2UgZm9yIHRoaXMgaW5k ZXguCisgKgorICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBpbmRleF9jb25jdXJyZW50 bHlfY3JlYXRlX2NvcHkoKSwgcmV1c2FibGUgZm9yCisgKiBvdGhlciBwdXJwb3Nlcy4KKyAqLwor T2lkCitpbmRleF9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRl eElkLCBPaWQgdGFibGVzcGFjZU9pZCwKKwkJCQkgIGNvbnN0IGNoYXIgKm5ld05hbWUsIGJvb2wg Y29uY3VycmVudGx5KQogewogCVJlbGF0aW9uCWluZGV4UmVsYXRpb247CiAJSW5kZXhJbmZvICAq b2xkSW5mbywKQEAgLTEzMTcsNiArMTMzMyw3IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVf Y29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRleElkLAogCUxpc3QJICAgKmlu ZGV4Q29sTmFtZXMgPSBOSUw7CiAJTGlzdAkgICAqaW5kZXhFeHBycyA9IE5JTDsKIAlMaXN0CSAg ICppbmRleFByZWRzID0gTklMOworCWludAkJCWZsYWdzID0gMDsKIAogCWluZGV4UmVsYXRpb24g PSBpbmRleF9vcGVuKG9sZEluZGV4SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCkBAIC0xMzI1LDkg KzEzNDIsOSBAQCBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJl bGF0aW9uLCBPaWQgb2xkSW5kZXhJZCwKIAogCS8qCiAJICogQ29uY3VycmVudCBidWlsZCBvZiBh biBpbmRleCB3aXRoIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3QKLQkgKiBzdXBwb3J0ZWQu CisJICogc3VwcG9ydGVkLiBJZiAhY29uY3VycmVudGx5LCBpaV9FeGNsdXNpbk9wcyBpcyBjdXJy ZW50bHkgbm90IG5lZWRlZC4KIAkgKi8KLQlpZiAob2xkSW5mby0+aWlfRXhjbHVzaW9uT3BzICE9 IE5VTEwpCisJaWYgKG9sZEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMICYmIGNvbmN1cnJl bnRseSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiY29uY3VycmVudCBpbmRleCBjcmVhdGlvbiBmb3Ig ZXhjbHVzaW9uIGNvbnN0cmFpbnRzIGlzIG5vdCBzdXBwb3J0ZWQiKSkpOwpAQCAtMTQzNSw2ICsx NDUyLDkgQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwgT2lkIG9sZEluZGV4SWQsCiAJCXN0YXR0YXJnZXRzW2ldLmlzbnVsbCA9IGlzbnVsbDsK IAl9CiAKKwlpZiAoY29uY3VycmVudGx5KQorCQlmbGFncyA9IElOREVYX0NSRUFURV9TS0lQX0JV SUxEIHwgSU5ERVhfQ1JFQVRFX0NPTkNVUlJFTlQ7CisKIAkvKgogCSAqIE5vdyBjcmVhdGUgdGhl IG5ldyBpbmRleC4KIAkgKgpAQCAtMTQ1OCw3ICsxNDc4LDcgQEAgaW5kZXhfY29uY3VycmVudGx5 X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG9sZEluZGV4SWQsCiAJCQkJ CQkJICBpbmRjb2xvcHRpb25zLT52YWx1ZXMsCiAJCQkJCQkJICBzdGF0dGFyZ2V0cywKIAkJCQkJ CQkgIHJlbG9wdGlvbnNEYXR1bSwKLQkJCQkJCQkgIElOREVYX0NSRUFURV9TS0lQX0JVSUxEIHwg SU5ERVhfQ1JFQVRFX0NPTkNVUlJFTlQsCisJCQkJCQkJICBmbGFncywKIAkJCQkJCQkgIDAsCiAJ CQkJCQkJICB0cnVlLCAvKiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nPyAqLwog CQkJCQkJCSAgZmFsc2UsCS8qIGlzX2ludGVybmFsPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9pbmRleC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCmluZGV4IDRk YWE4YmVmNWVlLi4wNjNhODkxMzUxYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9p bmRleC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApAQCAtOTksNiArOTksOSBA QCBleHRlcm4gT2lkCWluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfY29weShSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiAJCQkJCQkJCQkJICAgT2lkIG9sZEluZGV4SWQsCiAJCQkJCQkJCQkJICAgT2lk IHRhYmxlc3BhY2VPaWQsCiAJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbmV3TmFtZSk7CitleHRl cm4gT2lkCWluZGV4X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG9sZElu ZGV4SWQsCisJCQkJCQkJICBPaWQgdGFibGVzcGFjZU9pZCwgY29uc3QgY2hhciAqbmV3TmFtZSwK KwkJCQkJCQkgIGJvb2wgY29uY3VycmVudGx5KTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfY29uY3Vy cmVudGx5X2J1aWxkKE9pZCBoZWFwUmVsYXRpb25JZCwKIAkJCQkJCQkJCSBPaWQgaW5kZXhSZWxh dGlvbklkKTsKLS0gCjIuNDMuMAoK --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0005-Add-CONCURRENTLY-option-to-REPACK-command.patch" Content-Disposition: attachment; filename="v21-0005-Add-CONCURRENTLY-option-to-REPACK-command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vuk1 RnJvbSBhOTQxMWIwNzdiYzEyMTIxNWIyMzA1NTZiZTVhMTE0ZDVlZmZkODQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUMzPTgxbHZhcm89MjBIZXJyZXJhPz0gPGFs dmhlcnJlQGt1cmlsZW11LmRlPgpEYXRlOiBTYXQsIDMwIEF1ZyAyMDI1IDE5OjEzOjM4ICswMjAw ClN1YmplY3Q6IFtQQVRDSCB2MjEgNS82XSBBZGQgQ09OQ1VSUkVOVExZIG9wdGlvbiB0byBSRVBB Q0sgY29tbWFuZC4KClRoZSBSRVBBQ0sgY29tbWFuZCBjb3BpZXMgdGhlIHJlbGF0aW9uIGRhdGEg aW50byBhIG5ldyBmaWxlLCBjcmVhdGVzIG5ldwppbmRleGVzIGFuZCBldmVudHVhbGx5IHN3YXBz IHRoZSBmaWxlcy4gVG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9sZCBmaWxlIGRvZXMKbm90IGNoYW5n ZSBkdXJpbmcgdGhlIGNvcHlpbmcsIHRoZSByZWxhdGlvbiBpcyBsb2NrZWQgaW4gYW4gZXhjbHVz aXZlIG1vZGUsCndoaWNoIHByZXZlbnRzIGFwcGxpY2F0aW9ucyBmcm9tIGJvdGggcmVhZGluZyBh bmQgd3JpdGluZy4gKFRvIGtlZXAgdGhlIGRhdGEKY29uc2lzdGVudCwgd2UnZCBvbmx5IG5lZWQg dG8gcHJldmVudCB0aGUgYXBwbGljYXRpb25zIGZyb20gd3JpdGluZywgYnV0IGV2ZW4KcmVhZGlu ZyBuZWVkcyB0byBiZSBibG9ja2VkIGJlZm9yZSB3ZSBjYW4gc3dhcCB0aGUgZmlsZXMgLSBvdGhl cndpc2Ugc29tZQphcHBsaWNhdGlvbnMgY291bGQgY29udGludWUgdXNpbmcgdGhlIG9sZCBmaWxl LiBTaW5jZSB3ZSBzaG91bGQgbm90IHJlcXVlc3QgYQpzdHJvbmdlciBsb2NrIHdpdGhvdXQgcmVs ZWFzaW5nIHRoZSB3ZWFrZXIgb25lIGZpcnN0LCB3ZSBhY3F1aXJlIHRoZSBleGNsdXNpdmUKbG9j ayBpbiB0aGUgYmVnaW5uaW5nIGFuZCBrZWVwIGl0IHRpbGwgdGhlIGVuZCBvZiB0aGUgcHJvY2Vz c2luZy4pCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgYW4gYWx0ZXJuYXRpdmUgd29ya2Zsb3csIHdo aWNoIG9ubHkgcmVxdWlyZXMgdGhlCmV4Y2x1c2l2ZSBsb2NrIHdoZW4gdGhlIHJlbGF0aW9uIChh bmQgaW5kZXgpIGZpbGVzIGFyZSBiZWluZyBzd2FwcGVkLgooU3VwcG9zZWRseSwgdGhlIHN3YXBw aW5nIHNob3VsZCBiZSBwcmV0dHkgZmFzdC4pIE9uIHRoZSBvdGhlciBoYW5kLCB3aGVuIHdlCmNv cHkgdGhlIGRhdGEgdG8gdGhlIG5ldyBmaWxlLCB3ZSBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gcmVh ZCBmcm9tIHRoZSByZWxhdGlvbgphbmQgZXZlbiB0byB3cml0ZSB0byBpdC4KCkZpcnN0LCB3ZSBz Y2FuIHRoZSByZWxhdGlvbiB1c2luZyBhICJoaXN0b3JpYyBzbmFwc2hvdCIsIGFuZCBpbnNlcnQg YWxsIHRoZQp0dXBsZXMgc2F0aXNmeWluZyB0aGlzIHNuYXBzaG90IGludG8gdGhlIG5ldyBmaWxl LgoKU2Vjb25kLCBsb2dpY2FsIGRlY29kaW5nIGlzIHVzZWQgdG8gY2FwdHVyZSB0aGUgZGF0YSBj aGFuZ2VzIGRvbmUgYnkKYXBwbGljYXRpb25zIGR1cmluZyB0aGUgY29weWluZyAoaS5lLiBjaGFu Z2VzIHRoYXQgZG8gbm90IHNhdGlzZnkgdGhlIGhpc3RvcmljCnNuYXBzaG90IG1lbnRpb25lZCBh Ym92ZSksIGFuZCB0aG9zZSBhcmUgYXBwbGllZCB0byB0aGUgbmV3IGZpbGUgYmVmb3JlIHdlCmFj cXVpcmUgdGhlIGV4Y2x1c2l2ZSBsb2NrIHRoYXQgd2UgbmVlZCB0byBzd2FwIHRoZSBmaWxlcy4g KE9mIGNvdXJzZSwgbW9yZQpkYXRhIGNoYW5nZXMgY2FuIHRha2UgcGxhY2Ugd2hpbGUgd2UgYXJl IHdhaXRpbmcgZm9yIHRoZSBsb2NrIC0gdGhlc2Ugd2lsbCBiZQphcHBsaWVkIHRvIHRoZSBuZXcg ZmlsZSBhZnRlciB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrLCBiZWZvcmUgd2Ugc3dhcCB0aGUK ZmlsZXMuKQoKU2luY2UgdGhlIGxvZ2ljYWwgZGVjb2Rpbmcgc3lzdGVtLCBkdXJpbmcgaXRzIHN0 YXJ0dXAsIHdhaXRzIHVudGlsIGFsbCB0aGUKdHJhbnNhY3Rpb25zIHdoaWNoIGFscmVhZHkgaGF2 ZSBYSUQgYXNzaWduZWQgaGF2ZSBmaW5pc2hlZCwgdGhlcmUgaXMgYSByaXNrIG9mCmRlYWRsb2Nr IGlmIGEgdHJhbnNhY3Rpb24gdGhhdCBhbHJlYWR5IGNoYW5nZWQgYW55dGhpbmcgaW4gdGhlIGRh dGFiYXNlIHRyaWVzCnRvIGFjcXVpcmUgYSBjb25mbGljdGluZyBsb2NrIG9uIHRoZSB0YWJsZSBS RVBBQ0sgQ09OQ1VSUkVOVExZIGlzIHdvcmtpbmcKb24uIEFzIGFuIGV4YW1wbGUsIGNvbnNpZGVy IHRyYW5zYWN0aW9uIHJ1bm5pbmcgQ1JFQVRFIElOREVYIGNvbW1hbmQgb24gdGhlCnRhYmxlIHRo YXQgaXMgYmVpbmcgUkVQQUNLZWQgQ09OQ1VSUkVOVExZLiBPbiB0aGUgb3RoZXIgaGFuZCwgRE1M IGNvbW1hbmRzCihJTlNFUlQsIFVQREFURSwgREVMRVRFKSBhcmUgbm90IGEgcHJvYmxlbSBhcyB0 aGVpciBsb2NrIGRvZXMgbm90IGNvbmZsaWN0CndpdGggUkVQQUNLIENPTkNVUlJFTlRMWS4KClRo ZSBjdXJyZW50IGFwcHJvYWNoIGlzIHRoYXQgd2UgYWNjZXB0IHRoZSByaXNrLiBJZiB3ZSB0cmll ZCB0byBhdm9pZCBpdCwgaXQnZApiZSBuZWNlc3NhcnkgdG8gdW5sb2NrIHRoZSB0YWJsZSBiZWZv cmUgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgaXMgc2V0dXAgYW5kIGxvY2sKaXQgYWdhaW4gYWZ0ZXJ3 YXJkcy4gU3VjaCB0ZW1wb3JhcnkgdW5sb2NraW5nIHdvdWxkIGltcGx5IHJlLWNoZWNraW5nIGlm IHRoZQp0YWJsZSBzdGlsbCBtZWV0cyBhbGwgdGhlIHJlcXVpcmVtZW50cyBmb3IgUkVQQUNLIENP TkNVUlJFTlRMWS4KCkxpa2UgdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIG9mIFJFUEFDSywg dGhlIHZhcmlhbnQgd2l0aCB0aGUgQ09OQ1VSUkVOVExZCm9wdGlvbiBhbHNvIHJlcXVpcmVzIGFu IGV4dHJhIHNwYWNlIGZvciB0aGUgbmV3IHJlbGF0aW9uIGFuZCBpbmRleCBmaWxlcwood2hpY2gg Y29leGlzdCB3aXRoIHRoZSBvbGQgZmlsZXMgZm9yIHNvbWUgdGltZSkuIEluIGFkZGl0aW9uLCB0 aGUKQ09OQ1VSUkVOVExZIG9wdGlvbiBtaWdodCBpbnRyb2R1Y2UgYSBsYWcgaW4gcmVsZWFzaW5n IFdBTCBzZWdtZW50cyBmb3IKYXJjaGl2aW5nIC8gcmVjeWNsaW5nLiBUaGlzIGlzIGR1ZSB0byB0 aGUgZGVjb2Rpbmcgb2YgdGhlIGRhdGEgY2hhbmdlcyBkb25lIGJ5CmFwcGxpY2F0aW9ucyBjb25j dXJyZW50bHkuIFdoZW4gY29weWluZyB0aGUgdGFibGUgY29udGVudHMgaW50byB0aGUgbmV3IGZp bGUsCndlIGNoZWNrIHRoZSBsYWcgcGVyaW9kaWNhbGx5LiBJZiBpdCBleGNlZWRzIHRoZSBzaXpl IG9mIGEgV0FMIHNlZ21lbnQsIHdlCmRlY29kZSBhbGwgdGhlIGF2YWlsYWJsZSBXQUwgYmVmb3Jl IHJlc3VtaW5nIHRoZSBjb3B5aW5nLiAoT2YgY291cnNlLCB0aGUKY2hhbmdlcyBhcmUgbm90IGFw cGxpZWQgdW50aWwgdGhlIHdob2xlIHRhYmxlIGNvbnRlbnRzIGlzIGNvcGllZC4pIEEKYmFja2dy b3VuZCB3b3JrZXIgbWlnaHQgYmUgYSBiZXR0ZXIgYXBwcm9hY2ggZm9yIHRoZSBkZWNvZGluZyAt IGxldCdzIGNvbnNpZGVyCmltcGxlbWVudGluZyBpdCBpbiB0aGUgZnV0dXJlLgoKVGhlIFdBTCBy ZWNvcmRzIHByb2R1Y2VkIGJ5IHJ1bm5pbmcgRE1MIGNvbW1hbmRzIG9uIHRoZSBuZXcgcmVsYXRp b24gZG8gbm90CmNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGJlIHByb2Nlc3NlZCBieSB0 aGUgbG9naWNhbCBkZWNvZGluZyBzeXN0ZW0uIEFsbAp3ZSBuZWVkIGZyb20gdGhlIG5ldyByZWxh dGlvbiBpcyB0aGUgZmlsZSAocmVsZmlsZW5vZGUpLCB3aGlsZSB0aGUgYWN0dWFsCnJlbGF0aW9u IGlzIGV2ZW50dWFsbHkgZHJvcHBlZC4gVGh1cyB0aGVyZSBpcyBubyBwb2ludCBpbiByZXBsYXlp bmcgdGhlIERNTHMKYW55d2hlcmUuCgpBdXRob3I6IEFudG9uaW4gSG91c2thIDxhaEBjeWJlcnRl Yy5hdD4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAgICAg fCAgIDM3ICstCiBkb2Mvc3JjL3NnbWwvbXZjYy5zZ21sICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEyICstCiBkb2Mvc3JjL3NnbWwvcmVmL3JlcGFjay5zZ21sICAgICAgICAgICAgICAgICAg fCAgMTI5ICstCiBzcmMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgICAgICB8 ICAgMzQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8 ICAyMTkgKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jICAgICAgICAg fCAgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgICAgICAgICAgICAg fCAgIDExICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgICAg fCAgIDMwICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMgICAgICAgICAgICAgICAg fCAxNjc3ICsrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMg ICAgICAgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMu YyAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAg ICAgICAgICAgICAgICB8ICAgMTIgKy0KIHNyYy9iYWNrZW5kL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYyAgICAgIHwgICA4MyArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nu YXBidWlsZC5jICAgfCAgIDIxICsKIC4uLi9yZXBsaWNhdGlvbi9wZ291dHB1dF9yZXBhY2svTWFr ZWZpbGUgICAgICB8ICAgMzIgKwogLi4uL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9tZXNv bi5idWlsZCAgIHwgICAxOCArCiAuLi4vcGdvdXRwdXRfcmVwYWNrL3Bnb3V0cHV0X3JlcGFjay5j ICAgICAgICAgfCAgMjg4ICsrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAg ICAgICAgICAgIHwgICAgMSArCiAuLi4vc3RvcmFnZS9sbWdyL2dlbmVyYXRlLWx3bG9ja25hbWVz LnBsICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAg ICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAgICAg ICAgICAgICB8ICAgIDMgKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgICAg ICAgICAgICB8ICAgMjUgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAg ICAgICAgICB8ICAgIDkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oICAgICAg ICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICAgICAgIHwgICAxMCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmggICAgICAgICAg ICAgICAgfCAgIDkxICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oICAgICAgICAg ICAgICAgfCAgIDIzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaCAgICAg ICAgICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbG9ja2RlZnMuaCAgICAgICAgICAg ICAgICB8ICAgIDQgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3NuYXBtZ3IuaCAgICAgICAgICAgICAg ICAgICB8ICAgIDIgKwogc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL01ha2VmaWxl ICAgIHwgICAgNSArLQogLi4uL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVwYWNrLm91dCAg ICAgIHwgIDExMyArKwogLi4uL21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9sb2dpY2FsLmNvbmYg ICAgIHwgICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVp bGQgfCAgICA0ICsKIC4uLi9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjICAgICAg ICB8ICAxNDMgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICAgICAg ICB8ICAgMjkgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAg ICB8ICAgIDQgKwogMzkgZmlsZXMgY2hhbmdlZCwgMjgxNiBpbnNlcnRpb25zKCspLCAyNzEgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdv dXRwdXRfcmVwYWNrL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXRfcmVwYWNrL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRfcmVwYWNrL3Bnb3V0cHV0X3JlcGFjay5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4 cGVjdGVkL3JlcGFjay5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvbG9naWNhbC5jb25mCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjCgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNn bWwKaW5kZXggMTJlMTAzZDMxOWQuLjYxYzAxOTc1NTVmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvbW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAg LTYwNzQsMTQgKzYwNzQsMzUgQEAgRlJPTSBwZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMg YmFja2VuZGlkOwogCiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJs ZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgotICAgICAgIDxzdHJ1Y3Rm aWVsZD5oZWFwX3R1cGxlc193cml0dGVuPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBl PgorICAgICAgIDxzdHJ1Y3RmaWVsZD5oZWFwX3R1cGxlc19pbnNlcnRlZDwvc3RydWN0ZmllbGQ+ IDx0eXBlPmJpZ2ludDwvdHlwZT4KICAgICAgIDwvcGFyYT4KICAgICAgIDxwYXJhPgotICAgICAg IE51bWJlciBvZiBoZWFwIHR1cGxlcyB3cml0dGVuLgorICAgICAgIE51bWJlciBvZiBoZWFwIHR1 cGxlcyBpbnNlcnRlZC4KICAgICAgICBUaGlzIGNvdW50ZXIgb25seSBhZHZhbmNlcyB3aGVuIHRo ZSBwaGFzZSBpcwogICAgICAgIDxsaXRlcmFsPnNlcSBzY2FubmluZyBoZWFwPC9saXRlcmFsPiwK LSAgICAgICA8bGl0ZXJhbD5pbmRleCBzY2FubmluZyBoZWFwPC9saXRlcmFsPgotICAgICAgIG9y IDxsaXRlcmFsPndyaXRpbmcgbmV3IGhlYXA8L2xpdGVyYWw+LgorICAgICAgIDxsaXRlcmFsPmlu ZGV4IHNjYW5uaW5nIGhlYXA8L2xpdGVyYWw+LAorICAgICAgIDxsaXRlcmFsPndyaXRpbmcgbmV3 IGhlYXA8L2xpdGVyYWw+CisgICAgICAgb3IgPGxpdGVyYWw+Y2F0Y2gtdXA8L2xpdGVyYWw+Lgor ICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5oZWFwX3R1cGxlc191cGRhdGVkPC9zdHJ1Y3Rm aWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+Cisg ICAgICAgTnVtYmVyIG9mIGhlYXAgdHVwbGVzIHVwZGF0ZWQuCisgICAgICAgVGhpcyBjb3VudGVy IG9ubHkgYWR2YW5jZXMgd2hlbiB0aGUgcGhhc2UgaXMgPGxpdGVyYWw+Y2F0Y2gtdXA8L2xpdGVy YWw+LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+Cisg ICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1u X2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5oZWFwX3R1cGxlc19kZWxldGVkPC9z dHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBh cmE+CisgICAgICAgTnVtYmVyIG9mIGhlYXAgdHVwbGVzIGRlbGV0ZWQuCisgICAgICAgVGhpcyBj b3VudGVyIG9ubHkgYWR2YW5jZXMgd2hlbiB0aGUgcGhhc2UgaXMgPGxpdGVyYWw+Y2F0Y2gtdXA8 L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCkBAIC02MTYy LDYgKzYxODMsMTQgQEAgRlJPTSBwZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2Vu ZGlkOwogICAgICAgIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gaXMgY3VycmVudGx5IHdyaXRp bmcgdGhlIG5ldyBoZWFwLgogICAgICA8L2VudHJ5PgogICAgIDwvcm93PgorICAgIDxyb3c+Cisg ICAgIDxlbnRyeT48bGl0ZXJhbD5jYXRjaC11cDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICA8ZW50 cnk+CisgICAgICAgPGNvbW1hbmQ+UkVQQUNLIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgY3Vy cmVudGx5IHByb2Nlc3NpbmcgdGhlIERNTAorICAgICAgIGNvbW1hbmRzIHRoYXQgb3RoZXIgdHJh bnNhY3Rpb25zIGV4ZWN1dGVkIGR1cmluZyBhbnkgb2YgdGhlIHByZWNlZGluZworICAgICAgIHBo YXNlLgorICAgICA8L2VudHJ5PgorICAgIDwvcm93PgogICAgIDxyb3c+CiAgICAgIDxlbnRyeT48 bGl0ZXJhbD5zd2FwcGluZyByZWxhdGlvbiBmaWxlczwvbGl0ZXJhbD48L2VudHJ5PgogICAgICA8 ZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbXZjYy5zZ21sIGIvZG9jL3NyYy9zZ21s L212Y2Muc2dtbAppbmRleCAwNDllZTc1YTRiYS4uMGY1YzM0YWY1NDIgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9tdmNjLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL212Y2Muc2dtbApAQCAtMTgz MywxNSArMTgzMywxNyBAQCBTRUxFQ1QgcGdfYWR2aXNvcnlfbG9jayhxLmlkKSBGUk9NCiAgICA8 dGl0bGU+Q2F2ZWF0czwvdGl0bGU+CiAKICAgIDxwYXJhPgotICAgIFNvbWUgRERMIGNvbW1hbmRz LCBjdXJyZW50bHkgb25seSA8bGluayBsaW5rZW5kPSJzcWwtdHJ1bmNhdGUiPjxjb21tYW5kPlRS VU5DQVRFPC9jb21tYW5kPjwvbGluaz4gYW5kIHRoZQotICAgIHRhYmxlLXJld3JpdGluZyBmb3Jt cyBvZiA8bGluayBsaW5rZW5kPSJzcWwtYWx0ZXJ0YWJsZSI+PGNvbW1hbmQ+QUxURVIgVEFCTEU8 L2NvbW1hbmQ+PC9saW5rPiwgYXJlIG5vdAorICAgIFNvbWUgY29tbWFuZHMsIGN1cnJlbnRseSBv bmx5IDxsaW5rIGxpbmtlbmQ9InNxbC10cnVuY2F0ZSI+PGNvbW1hbmQ+VFJVTkNBVEU8L2NvbW1h bmQ+PC9saW5rPiwgdGhlCisgICAgdGFibGUtcmV3cml0aW5nIGZvcm1zIG9mIDxsaW5rIGxpbmtl bmQ9InNxbC1hbHRlcnRhYmxlIj48Y29tbWFuZD5BTFRFUgorICAgIFRBQkxFPC9jb21tYW5kPjwv bGluaz4gYW5kIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gd2l0aAorICAgIHRoZSA8bGl0ZXJh bD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiwgYXJlIG5vdAogICAgIE1WQ0Mtc2FmZS4g IFRoaXMgbWVhbnMgdGhhdCBhZnRlciB0aGUgdHJ1bmNhdGlvbiBvciByZXdyaXRlIGNvbW1pdHMs IHRoZQogICAgIHRhYmxlIHdpbGwgYXBwZWFyIGVtcHR5IHRvIGNvbmN1cnJlbnQgdHJhbnNhY3Rp b25zLCBpZiB0aGV5IGFyZSB1c2luZyBhCi0gICAgc25hcHNob3QgdGFrZW4gYmVmb3JlIHRoZSBE REwgY29tbWFuZCBjb21taXR0ZWQuICBUaGlzIHdpbGwgb25seSBiZSBhbgorICAgIHNuYXBzaG90 IHRha2VuIGJlZm9yZSB0aGUgY29tbWFuZCBjb21taXR0ZWQuICBUaGlzIHdpbGwgb25seSBiZSBh bgogICAgIGlzc3VlIGZvciBhIHRyYW5zYWN0aW9uIHRoYXQgZGlkIG5vdCBhY2Nlc3MgdGhlIHRh YmxlIGluIHF1ZXN0aW9uCi0gICAgYmVmb3JlIHRoZSBEREwgY29tbWFuZCBzdGFydGVkICZtZGFz aDsgYW55IHRyYW5zYWN0aW9uIHRoYXQgaGFzIGRvbmUgc28KKyAgICBiZWZvcmUgdGhlIGNvbW1h bmQgc3RhcnRlZCAmbWRhc2g7IGFueSB0cmFuc2FjdGlvbiB0aGF0IGhhcyBkb25lIHNvCiAgICAg d291bGQgaG9sZCBhdCBsZWFzdCBhbiA8bGl0ZXJhbD5BQ0NFU1MgU0hBUkU8L2xpdGVyYWw+IHRh YmxlIGxvY2ssCi0gICAgd2hpY2ggd291bGQgYmxvY2sgdGhlIERETCBjb21tYW5kIHVudGlsIHRo YXQgdHJhbnNhY3Rpb24gY29tcGxldGVzLgorICAgIHdoaWNoIHdvdWxkIGJsb2NrIHRoZSB0cnVu Y2F0aW5nIG9yIHJld3JpdGluZyBjb21tYW5kIHVudGlsIHRoYXQgdHJhbnNhY3Rpb24gY29tcGxl dGVzLgogICAgIFNvIHRoZXNlIGNvbW1hbmRzIHdpbGwgbm90IGNhdXNlIGFueSBhcHBhcmVudCBp bmNvbnNpc3RlbmN5IGluIHRoZQogICAgIHRhYmxlIGNvbnRlbnRzIGZvciBzdWNjZXNzaXZlIHF1 ZXJpZXMgb24gdGhlIHRhcmdldCB0YWJsZSwgYnV0IHRoZXkKICAgICBjb3VsZCBjYXVzZSB2aXNp YmxlIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgY29udGVudHMgb2YgdGhlIHRhcmdldApkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9yZXBhY2suc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYv cmVwYWNrLnNnbWwKaW5kZXggZmQ5ZDg5ZjhhYWEuLmZmNWNlNDhkZTU1IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL3JlcGFjay5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcmVwYWNr LnNnbWwKQEAgLTI3LDYgKzI3LDcgQEAgUkVQQUNLIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0gWyA8cmUKIAogICAgIFZF UkJPU0UgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFi bGU+IF0KICAgICBBTkFMWVNFIHwgQU5BTFlaRQorICAgIENPTkNVUlJFTlRMWQogPC9zeW5vcHNp cz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCkBAIC00OSw3ICs1MCw4IEBAIFJFUEFDSyBbICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0g KSBdIFsgPHJlCiAgICBwcm9jZXNzZXMgZXZlcnkgdGFibGUgYW5kIG1hdGVyaWFsaXplZCB2aWV3 IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIHRoYXQKICAgIHRoZSBjdXJyZW50IHVzZXIgaGFzIHRo ZSA8bGl0ZXJhbD5NQUlOVEFJTjwvbGl0ZXJhbD4gcHJpdmlsZWdlIG9uLiBUaGlzCiAgICBmb3Jt IG9mIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gY2Fubm90IGJlIGV4ZWN1dGVkIGluc2lkZSBh IHRyYW5zYWN0aW9uCi0gICBibG9jay4KKyAgIGJsb2NrLiAgQWxzbywgdGhpcyBmb3JtIGlzIG5v dCBhbGxvd2VkIGlmCisgICB0aGUgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRp b24gaXMgdXNlZC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtNjIsNyArNjQsOCBAQCBSRVBB Q0sgWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxl PiBbLCAuLi5dICkgXSBbIDxyZQogICAgV2hlbiBhIHRhYmxlIGlzIGJlaW5nIHJlcGFja2VkLCBh biA8bGl0ZXJhbD5BQ0NFU1MgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrCiAgICBpcyBhY3F1aXJl ZCBvbiBpdC4gVGhpcyBwcmV2ZW50cyBhbnkgb3RoZXIgZGF0YWJhc2Ugb3BlcmF0aW9ucyAoYm90 aCByZWFkcwogICAgYW5kIHdyaXRlcykgZnJvbSBvcGVyYXRpbmcgb24gdGhlIHRhYmxlIHVudGls IHRoZSA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+Ci0gICBpcyBmaW5pc2hlZC4KKyAgIGlzIGZp bmlzaGVkLiBJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSB0YWJsZSBhY2Nlc3NpYmxlIGR1cmluZyB0 aGUgcmVwYWNraW5nLAorICAgY29uc2lkZXIgdXNpbmcgdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRM WTwvbGl0ZXJhbD4gb3B0aW9uLgogICA8L3BhcmE+CiAKICAgPHJlZnNlY3QyIGlkPSJzcWwtcmVw YWNrLW5vdGVzLW9uLWNsdXN0ZXJpbmciIHhyZWZsYWJlbD0iTm90ZXMgb24gQ2x1c3RlcmluZyI+ CkBAIC0xNzksNiArMTgyLDEyOCBAQCBSRVBBQ0sgWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxyZQogICAgIDwvbGlz dGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT48bGl0ZXJhbD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4K KyAgICAgPHBhcmE+CisgICAgICBBbGxvdyBvdGhlciB0cmFuc2FjdGlvbnMgdG8gdXNlIHRoZSB0 YWJsZSB3aGlsZSBpdCBpcyBiZWluZyByZXBhY2tlZC4KKyAgICAgPC9wYXJhPgorCisgICAgIDxw YXJhPgorICAgICAgSW50ZXJuYWxseSwgPGNvbW1hbmQ+UkVQQUNLPC9jb21tYW5kPiBjb3BpZXMg dGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZQorICAgICAgKGlnbm9yaW5nIGRlYWQgdHVwbGVzKSBp bnRvIGEgbmV3IGZpbGUsIHNvcnRlZCBieSB0aGUgc3BlY2lmaWVkIGluZGV4LAorICAgICAgYW5k IGFsc28gY3JlYXRlcyBhIG5ldyBmaWxlIGZvciBlYWNoIGluZGV4LiBUaGVuIGl0IHN3YXBzIHRo ZSBvbGQgYW5kCisgICAgICBuZXcgZmlsZXMgZm9yIHRoZSB0YWJsZSBhbmQgYWxsIHRoZSBpbmRl eGVzLCBhbmQgZGVsZXRlcyB0aGUgb2xkCisgICAgICBmaWxlcy4gVGhlIDxsaXRlcmFsPkFDQ0VT UyBFWENMVVNJVkU8L2xpdGVyYWw+IGxvY2sgaXMgbmVlZGVkIHRvIG1ha2UKKyAgICAgIHN1cmUg dGhhdCB0aGUgb2xkIGZpbGVzIGRvIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIGJl Y2F1c2UgdGhlCisgICAgICBjaGFuZ2VzIHdvdWxkIGdldCBsb3N0IGR1ZSB0byB0aGUgc3dhcC4K KyAgICAgPC9wYXJhPgorCisgICAgIDxwYXJhPgorICAgICAgV2l0aCB0aGUgPGxpdGVyYWw+Q09O Q1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24sIHRoZSA8bGl0ZXJhbD5BQ0NFU1MKKyAgICAgIEVY Q0xVU0lWRTwvbGl0ZXJhbD4gbG9jayBpcyBvbmx5IGFjcXVpcmVkIHRvIHN3YXAgdGhlIHRhYmxl IGFuZCBpbmRleAorICAgICAgZmlsZXMuIFRoZSBkYXRhIGNoYW5nZXMgdGhhdCB0b29rIHBsYWNl IGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIG5ldworICAgICAgdGFibGUgYW5kIGluZGV4IGZp bGVzIGFyZSBjYXB0dXJlZCB1c2luZyBsb2dpY2FsIGRlY29kaW5nCisgICAgICAoPHhyZWYgbGlu a2VuZD0ibG9naWNhbGRlY29kaW5nIi8+KSBhbmQgYXBwbGllZCBiZWZvcmUKKyAgICAgIHRoZSA8 bGl0ZXJhbD5BQ0NFU1MgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGlzIHJlcXVlc3RlZC4gVGh1 cyB0aGUgbG9jaworICAgICAgaXMgdHlwaWNhbGx5IGhlbGQgb25seSBmb3IgdGhlIHRpbWUgbmVl ZGVkIHRvIHN3YXAgdGhlIGZpbGVzLCB3aGljaAorICAgICAgc2hvdWxkIGJlIHByZXR0eSBzaG9y dC4gSG93ZXZlciwgdGhlIHRpbWUgbWlnaHQgc3RpbGwgYmUgbm90aWNlYWJsZSBpZgorICAgICAg dG9vIG1hbnkgZGF0YSBjaGFuZ2VzIGhhdmUgYmVlbiBkb25lIHRvIHRoZSB0YWJsZSB3aGlsZQor ICAgICAgPGNvbW1hbmQ+UkVQQUNLPC9jb21tYW5kPiB3YXMgd2FpdGluZyBmb3IgdGhlIGxvY2s6 IHRob3NlIGNoYW5nZXMgbXVzdAorICAgICAgYmUgcHJvY2Vzc2VkIGp1c3QgYmVmb3JlIHRoZSBm aWxlcyBhcmUgc3dhcHBlZCwgd2hpbGUgdGhlCisgICAgICA8bGl0ZXJhbD5BQ0NFU1MgRVhDTFVT SVZFPC9saXRlcmFsPiBsb2NrIGlzIGJlaW5nIGhlbGQuCisgICAgIDwvcGFyYT4KKworICAgICA8 cGFyYT4KKyAgICAgIE5vdGUgdGhhdCA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+IHdpdGggdGhl CisgICAgICB0aGUgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRpb24gZG9lcyBu b3QgdHJ5IHRvIG9yZGVyIHRoZQorICAgICAgcm93cyBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZSBh ZnRlciB0aGUgcmVwYWNraW5nIHN0YXJ0ZWQuIEFsc28KKyAgICAgIG5vdGUgPGNvbW1hbmQ+UkVQ QUNLPC9jb21tYW5kPiBtaWdodCBmYWlsIHRvIGNvbXBsZXRlIGR1ZSB0byBEREwKKyAgICAgIGNv bW1hbmRzIGV4ZWN1dGVkIG9uIHRoZSB0YWJsZSBieSBvdGhlciB0cmFuc2FjdGlvbnMgZHVyaW5n IHRoZQorICAgICAgcmVwYWNraW5nLgorICAgICA8L3BhcmE+CisKKyAgICAgPG5vdGU+CisgICAg ICA8cGFyYT4KKyAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgdGVtcG9yYXJ5IHNwYWNlIHJlcXVp cmVtZW50cyBleHBsYWluZWQgaW4KKyAgICAgICA8eHJlZiBsaW5rZW5kPSJzcWwtcmVwYWNrLW5v dGVzLW9uLXJlc291cmNlcyIvPiwKKyAgICAgICB0aGUgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9s aXRlcmFsPiBvcHRpb24gY2FuIGFkZCB0byB0aGUgdXNhZ2Ugb2YKKyAgICAgICB0ZW1wb3Jhcnkg c3BhY2UgYSBiaXQgbW9yZS4gVGhlIHJlYXNvbiBpcyB0aGF0IG90aGVyIHRyYW5zYWN0aW9ucyBj YW4KKyAgICAgICBwZXJmb3JtIERNTCBvcGVyYXRpb25zIHdoaWNoIGNhbm5vdCBiZSBhcHBsaWVk IHRvIHRoZSBuZXcgZmlsZSB1bnRpbAorICAgICAgIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4g aGFzIGNvcGllZCBhbGwgdGhlIHR1cGxlcyBmcm9tIHRoZSBvbGQKKyAgICAgICBmaWxlLiBUaHVz IHRoZSB0dXBsZXMgaW5zZXJ0ZWQgaW50byB0aGUgb2xkIGZpbGUgZHVyaW5nIHRoZSBjb3B5aW5n IGFyZQorICAgICAgIGFsc28gc3RvcmVkIHNlcGFyYXRlbHkgaW4gYSB0ZW1wb3JhcnkgZmlsZSwg c28gdGhleSBjYW4gZXZlbnR1YWxseSBiZQorICAgICAgIGFwcGxpZWQgdG8gdGhlIG5ldyBmaWxl LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBGdXJ0aGVybW9yZSwgdGhl IGRhdGEgY2hhbmdlcyBwZXJmb3JtZWQgZHVyaW5nIHRoZSBjb3B5aW5nIGFyZQorICAgICAgIGV4 dHJhY3RlZCBmcm9tIDxsaW5rIGxpbmtlbmQ9IndhbCI+d3JpdGUtYWhlYWQgbG9nPC9saW5rPiAo V0FMKSwgYW5kCisgICAgICAgdGhpcyBleHRyYWN0aW9uIChkZWNvZGluZykgb25seSB0YWtlcyBw bGFjZSB3aGVuIGNlcnRhaW4gYW1vdW50IG9mIFdBTAorICAgICAgIGhhcyBiZWVuIHdyaXR0ZW4u IFRoZXJlZm9yZSwgV0FMIHJlbW92YWwgY2FuIGJlIGRlbGF5ZWQgYnkgdGhpcworICAgICAgIHRo cmVzaG9sZC4gQ3VycmVudGx5IHRoZSB0aHJlc2hvbGQgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9m CisgICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9Imd1Yy13YWwtc2VnbWVudC1zaXplIj48dmFybmFt ZT53YWxfc2VnbWVudF9zaXplPC92YXJuYW1lPjwvbGluaz4KKyAgICAgICBjb25maWd1cmF0aW9u IHBhcmFtZXRlci4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9ub3RlPgorCisgICAgIDxwYXJhPgor ICAgICAgVGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0ZXJhbD4gb3B0aW9uIGNhbm5vdCBi ZSB1c2VkIGluIHRoZQorICAgICAgZm9sbG93aW5nIGNhc2VzOgorCisgICAgICA8aXRlbWl6ZWRs aXN0PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHRh YmxlIGlzIDxsaXRlcmFsPlVOTE9HR0VEPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAg ICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgIFRoZSB0YWJsZSBpcyBwYXJ0aXRpb25lZC4KKyAgICAgICAgPC9wYXJhPgorICAgICAg IDwvbGlzdGl0ZW0+CisKKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAg ICAgIFRoZSB0YWJsZSBpcyBhIHN5c3RlbSBjYXRhbG9nIG9yIGEgPGFjcm9ueW0+VE9BU1Q8L2Fj cm9ueW0+IHRhYmxlLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKworICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICA8Y29tbWFuZD5SRVBBQ0s8 L2NvbW1hbmQ+IGlzIGV4ZWN1dGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uIGJsb2NrLgorICAgICAg ICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxsaW5rIGxpbmtlbmQ9Imd1Yy13YWwtbGV2ZWwiPjx2 YXJuYW1lPndhbF9sZXZlbDwvdmFybmFtZT48L2xpbms+CisgICAgICAgICAgY29uZmlndXJhdGlv biBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIDxsaXRlcmFsPmxvZ2ljYWw8L2xpdGVyYWw+LgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgPGxpbmsgbGlua2VuZD0iZ3VjLW1heC1yZXBsaWNh dGlvbi1zbG90cyI+PHZhcm5hbWU+bWF4X3JlcGxpY2F0aW9uX3Nsb3RzPC92YXJuYW1lPjwvbGlu az4KKyAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGRvZXMgbm90IGFsbG93IGZvciBj cmVhdGlvbiBvZiBhbiBhZGRpdGlvbmFsCisgICAgICAgICByZXBsaWNhdGlvbiBzbG90LgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRlbWl6ZWRsaXN0Pgor ICAgICA8L3BhcmE+CisKKyAgICAgPHdhcm5pbmc+CisgICAgICA8cGFyYT4KKyAgICAgICA8Y29t bWFuZD5SRVBBQ0s8L2NvbW1hbmQ+IHdpdGggdGhlIDxsaXRlcmFsPkNPTkNVUlJFTlRMWTwvbGl0 ZXJhbD4KKyAgICAgICBvcHRpb24gaXMgbm90IE1WQ0Mtc2FmZSwgc2VlIDx4cmVmIGxpbmtlbmQ9 Im12Y2MtY2F2ZWF0cyIvPiBmb3IKKyAgICAgICBkZXRhaWxzLgorICAgICAgPC9wYXJhPgorICAg ICA8L3dhcm5pbmc+CisKKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAg IDx2YXJsaXN0ZW50cnk+CiAgICAgPHRlcm0+PGxpdGVyYWw+VkVSQk9TRTwvbGl0ZXJhbD48L3Rl cm0+CiAgICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlIGIvc3JjL01ha2Vm aWxlCmluZGV4IDJmMzFhMmYyMGE3Li5iMThjOWExNGZmYSAxMDA2NDQKLS0tIGEvc3JjL01ha2Vm aWxlCisrKyBiL3NyYy9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQCBTVUJESVJTID0gXAogCWlu dGVyZmFjZXMgXAogCWJhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlciBcCiAJYmFj a2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dCBcCisJYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dF9yZXBhY2sgXAogCWZlX3V0aWxzIFwKIAliaW4gXAogCXBsIFwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKaW5kZXggZTNlNzMwN2VmNWYuLmY5YTRmZTNmYWVkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYwpAQCAtNjAsNyArNjAsOCBAQCBzdGF0aWMgSGVhcFR1cGxlIGhlYXBfcHJlcGFyZV9p bnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsCiBzdGF0aWMgWExvZ1JlY1B0 ciBsb2dfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVsbiwgQnVmZmVyIG9sZGJ1ZiwKIAkJCQkJCQkJ ICBCdWZmZXIgbmV3YnVmLCBIZWFwVHVwbGUgb2xkdHVwLAogCQkJCQkJCQkgIEhlYXBUdXBsZSBu ZXd0dXAsIEhlYXBUdXBsZSBvbGRfa2V5X3R1cGxlLAotCQkJCQkJCQkgIGJvb2wgYWxsX3Zpc2li bGVfY2xlYXJlZCwgYm9vbCBuZXdfYWxsX3Zpc2libGVfY2xlYXJlZCk7CisJCQkJCQkJCSAgYm9v bCBhbGxfdmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkLAorCQkJ CQkJCQkgIGJvb2wgd2FsX2xvZ2ljYWwpOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIHN0 YXRpYyB2b2lkIGNoZWNrX2xvY2tfaWZfaW5wbGFjZV91cGRhdGVhYmxlX3JlbChSZWxhdGlvbiBy ZWxhdGlvbiwKIAkJCQkJCQkJCQkJCSBJdGVtUG9pbnRlciBvdGlkLApAQCAtMjc4MCw3ICsyNzgx LDcgQEAgeG1heF9pbmZvbWFza19jaGFuZ2VkKHVpbnQxNiBuZXdfaW5mb21hc2ssIHVpbnQxNiBv bGRfaW5mb21hc2spCiBUTV9SZXN1bHQKIGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJ dGVtUG9pbnRlciB0aWQsCiAJCQlDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBi b29sIHdhaXQsCi0JCQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQpCisJ CQlUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQsIGJvb2wgd2FsX2xvZ2lj YWwpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFuc2FjdGlvbklkIHhpZCA9IEdldEN1cnJl bnRUcmFuc2FjdGlvbklkKCk7CkBAIC0zMDI3LDcgKzMwMjgsOCBAQCBsMToKIAkgKiBDb21wdXRl IHJlcGxpY2EgaWRlbnRpdHkgdHVwbGUgYmVmb3JlIGVudGVyaW5nIHRoZSBjcml0aWNhbCBzZWN0 aW9uIHNvCiAJICogd2UgZG9uJ3QgUEFOSUMgdXBvbiBhIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1 cmUuCiAJICovCi0Jb2xkX2tleV90dXBsZSA9IEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkocmVsYXRp b24sICZ0cCwgdHJ1ZSwgJm9sZF9rZXlfY29waWVkKTsKKwlvbGRfa2V5X3R1cGxlID0gd2FsX2xv Z2ljYWwgPworCQlFeHRyYWN0UmVwbGljYUlkZW50aXR5KHJlbGF0aW9uLCAmdHAsIHRydWUsICZv bGRfa2V5X2NvcGllZCkgOiBOVUxMOwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBw b3NzaWJseS1tdWx0aXhhY3QtYWJsZSBvcGVyYXRpb24gaW4gdGhlIGN1cnJlbnQKQEAgLTMxMTcs NiArMzExOSwxNSBAQCBsMToKIAkJCQl4bHJlYy5mbGFncyB8PSBYTEhfREVMRVRFX0NPTlRBSU5T X09MRF9LRVk7CiAJCX0KIAorCQkvKgorCQkgKiBVbmxpa2UgVVBEQVRFLCBERUxFVEUgaXMgZGVj b2RlZCBldmVuIGlmIHRoZXJlIGlzIG5vIG9sZCBrZXksIHNvIGl0CisJCSAqIGRvZXMgbm90IGhl bHAgdG8gY2xlYXIgYm90aCBYTEhfREVMRVRFX0NPTlRBSU5TX09MRF9UVVBMRSBhbmQKKwkJICog WExIX0RFTEVURV9DT05UQUlOU19PTERfS0VZLiBUaHVzIHdlIG5lZWQgYW4gZXh0cmEgZmxhZy4g VE9ETworCQkgKiBDb25zaWRlciBub3QgZGVjb2RpbmcgdHVwbGVzIHcvbyB0aGUgb2xkIHR1cGxl L2tleSBpbnN0ZWFkLgorCQkgKi8KKwkJaWYgKCF3YWxfbG9naWNhbCkKKwkJCXhscmVjLmZsYWdz IHw9IFhMSF9ERUxFVEVfTk9fTE9HSUNBTDsKKwogCQlYTG9nQmVnaW5JbnNlcnQoKTsKIAkJWExv Z1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhlYXBEZWxldGUpOwogCkBAIC0zMjA5LDcgKzMy MjAsOCBAQCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVy IHRpZCkKIAlyZXN1bHQgPSBoZWFwX2RlbGV0ZShyZWxhdGlvbiwgdGlkLAogCQkJCQkJIEdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSB0cnVlIC8qIHdh aXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsIGZhbHNlIC8qIGNoYW5naW5nUGFydCAq LyApOworCQkJCQkJICZ0bWZkLCBmYWxzZSwJLyogY2hhbmdpbmdQYXJ0ICovCisJCQkJCQkgdHJ1 ZSAvKiB3YWxfbG9naWNhbCAqLyApOwogCXN3aXRjaCAocmVzdWx0KQogCXsKIAkJY2FzZSBUTV9T ZWxmTW9kaWZpZWQ6CkBAIC0zMjUwLDcgKzMyNjIsNyBAQCBUTV9SZXN1bHQKIGhlYXBfdXBkYXRl KFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAog CQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJVE1f RmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJVFVfVXBkYXRl SW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMpCisJCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5k ZXhlcywgYm9vbCB3YWxfbG9naWNhbCkKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwogCVRyYW5zYWN0 aW9uSWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKQEAgLTQxNDMsNyArNDE1NSw4 IEBAIGwyOgogCQkJCQkJCQkgbmV3YnVmLCAmb2xkdHVwLCBoZWFwdHVwLAogCQkJCQkJCQkgb2xk X2tleV90dXBsZSwKIAkJCQkJCQkJIGFsbF92aXNpYmxlX2NsZWFyZWQsCi0JCQkJCQkJCSBhbGxf dmlzaWJsZV9jbGVhcmVkX25ldyk7CisJCQkJCQkJCSBhbGxfdmlzaWJsZV9jbGVhcmVkX25ldywK KwkJCQkJCQkJIHdhbF9sb2dpY2FsKTsKIAkJaWYgKG5ld2J1ZiAhPSBidWZmZXIpCiAJCXsKIAkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdidWYpLCByZWNwdHIpOwpAQCAtNDUwMSw3ICs0 NTE0LDggQEAgc2ltcGxlX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRl ciBvdGlkLCBIZWFwVHVwbGUgdHVwLAogCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBv dGlkLCB0dXAsCiAJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBz aG90LAogCQkJCQkJIHRydWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKLQkJCQkJCSAmdG1mZCwg JmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkgJnRtZmQsICZsb2NrbW9kZSwgdXBk YXRlX2luZGV4ZXMsCisJCQkJCQkgdHJ1ZSAvKiB3YWxfbG9naWNhbCAqLyApOwogCXN3aXRjaCAo cmVzdWx0KQogCXsKIAkJY2FzZSBUTV9TZWxmTW9kaWZpZWQ6CkBAIC04ODQyLDcgKzg4NTYsOCBA QCBzdGF0aWMgWExvZ1JlY1B0cgogbG9nX2hlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbG4sIEJ1ZmZl ciBvbGRidWYsCiAJCQkJQnVmZmVyIG5ld2J1ZiwgSGVhcFR1cGxlIG9sZHR1cCwgSGVhcFR1cGxl IG5ld3R1cCwKIAkJCQlIZWFwVHVwbGUgb2xkX2tleV90dXBsZSwKLQkJCQlib29sIGFsbF92aXNp YmxlX2NsZWFyZWQsIGJvb2wgbmV3X2FsbF92aXNpYmxlX2NsZWFyZWQpCisJCQkJYm9vbCBhbGxf dmlzaWJsZV9jbGVhcmVkLCBib29sIG5ld19hbGxfdmlzaWJsZV9jbGVhcmVkLAorCQkJCWJvb2wg d2FsX2xvZ2ljYWwpCiB7CiAJeGxfaGVhcF91cGRhdGUgeGxyZWM7CiAJeGxfaGVhcF9oZWFkZXIg eGxoZHI7CkBAIC04ODUzLDcgKzg4NjgsOCBAQCBsb2dfaGVhcF91cGRhdGUoUmVsYXRpb24gcmVs biwgQnVmZmVyIG9sZGJ1ZiwKIAkJCQlzdWZmaXhsZW4gPSAwOwogCVhMb2dSZWNQdHIJcmVjcHRy OwogCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2J1Zik7Ci0JYm9vbAkJbmVlZF90dXBs ZV9kYXRhID0gUmVsYXRpb25Jc0xvZ2ljYWxseUxvZ2dlZChyZWxuKTsKKwlib29sCQluZWVkX3R1 cGxlX2RhdGEgPSBSZWxhdGlvbklzTG9naWNhbGx5TG9nZ2VkKHJlbG4pICYmCisJCXdhbF9sb2dp Y2FsOwogCWJvb2wJCWluaXQ7CiAJaW50CQkJYnVmZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDc5ZjlkZTVkNzYwLi5kMDMwODQ3NjhlMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0zMyw2ICszMyw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvc3RvcmFnZV94bG9nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv Y2x1c3Rlci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTMwOSw3ICszMTAs OCBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0 aWQsIENvbW1hbmRJZCBjaWQsCiAJICogdGhlIHN0b3JhZ2UgaXRzZWxmIGlzIGNsZWFuaW5nIHRo ZSBkZWFkIHR1cGxlcyBieSBpdHNlbGYsIGl0IGlzIHRoZQogCSAqIHRpbWUgdG8gY2FsbCB0aGUg aW5kZXggdHVwbGUgZGVsZXRpb24gYWxzby4KIAkgKi8KLQlyZXR1cm4gaGVhcF9kZWxldGUocmVs YXRpb24sIHRpZCwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LCB0bWZkLCBjaGFuZ2luZ1BhcnQpOwor CXJldHVybiBoZWFwX2RlbGV0ZShyZWxhdGlvbiwgdGlkLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQs IHRtZmQsIGNoYW5naW5nUGFydCwKKwkJCQkJICAgdHJ1ZSk7CiB9CiAKIApAQCAtMzI4LDcgKzMz MCw3IEBAIGhlYXBhbV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVy IG90aWQsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCXR1cGxlLT50X3RhYmxlT2lkID0gc2xvdC0+ dHRzX3RhYmxlT2lkOwogCiAJcmVzdWx0ID0gaGVhcF91cGRhdGUocmVsYXRpb24sIG90aWQsIHR1 cGxlLCBjaWQsIGNyb3NzY2hlY2ssIHdhaXQsCi0JCQkJCQkgdG1mZCwgbG9ja21vZGUsIHVwZGF0 ZV9pbmRleGVzKTsKKwkJCQkJCSB0bWZkLCBsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMsIHRydWUp OwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJ LyoKQEAgLTY4NSwxMyArNjg3LDE1IEBAIHN0YXRpYyB2b2lkCiBoZWFwYW1fcmVsYXRpb25fY29w eV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJCQkJ CQkgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdXNlX3NvcnQsCiAJCQkJCQkJCSBUcmFuc2FjdGlv bklkIE9sZGVzdFhtaW4sCisJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJIExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmRlY29kaW5nX2N0eCwKIAkJCQkJCQkJIFRyYW5zYWN0aW9u SWQgKnhpZF9jdXRvZmYsCiAJCQkJCQkJCSBNdWx0aVhhY3RJZCAqbXVsdGlfY3V0b2ZmLAogCQkJ CQkJCQkgZG91YmxlICpudW1fdHVwbGVzLAogCQkJCQkJCQkgZG91YmxlICp0dXBzX3ZhY3V1bWVk LAogCQkJCQkJCQkgZG91YmxlICp0dXBzX3JlY2VudGx5X2RlYWQpCiB7Ci0JUmV3cml0ZVN0YXRl IHJ3c3RhdGU7CisJUmV3cml0ZVN0YXRlIHJ3c3RhdGUgPSBOVUxMOwogCUluZGV4U2NhbkRlc2Mg aW5kZXhTY2FuOwogCVRhYmxlU2NhbkRlc2MgdGFibGVTY2FuOwogCUhlYXBTY2FuRGVzYyBoZWFw U2NhbjsKQEAgLTcwNSw2ICs3MDksOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3Rl cihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCWJvb2wJICAgKmlzbnVsbDsK IAlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmhzbG90OwogCUJsb2NrTnVtYmVyIHByZXZfY2Js b2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWJvb2wJCWNvbmN1cnJlbnQgPSBzbmFwc2hvdCAh PSBOVUxMOworCVhMb2dSZWNQdHIJZW5kX29mX3dhbF9wcmV2ID0gR2V0Rmx1c2hSZWNQdHIoTlVM TCk7CiAKIAkvKiBSZW1lbWJlciBpZiBpdCdzIGEgc3lzdGVtIGNhdGFsb2cgKi8KIAlpc19zeXN0 ZW1fY2F0YWxvZyA9IElzU3lzdGVtUmVsYXRpb24oT2xkSGVhcCk7CkBAIC03MjAsOSArNzI2LDEy IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJl bGF0aW9uIE5ld0hlYXAsCiAJdmFsdWVzID0gKERhdHVtICopIHBhbGxvYyhuYXR0cyAqIHNpemVv ZihEYXR1bSkpOwogCWlzbnVsbCA9IChib29sICopIHBhbGxvYyhuYXR0cyAqIHNpemVvZihib29s KSk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSByZXdyaXRlIG9wZXJhdGlvbiAqLwotCXJ3c3RhdGUg PSBiZWdpbl9oZWFwX3Jld3JpdGUoT2xkSGVhcCwgTmV3SGVhcCwgT2xkZXN0WG1pbiwgKnhpZF9j dXRvZmYsCi0JCQkJCQkJCSAqbXVsdGlfY3V0b2ZmKTsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhl IHJld3JpdGUgb3BlcmF0aW9uLgorCSAqLworCWlmICghY29uY3VycmVudCkKKwkJcndzdGF0ZSA9 IGJlZ2luX2hlYXBfcmV3cml0ZShPbGRIZWFwLCBOZXdIZWFwLCBPbGRlc3RYbWluLAorCQkJCQkJ CQkJICp4aWRfY3V0b2ZmLCAqbXVsdGlfY3V0b2ZmKTsKIAogCiAJLyogU2V0IHVwIHNvcnRpbmcg aWYgd2FudGVkICovCkBAIC03MzcsNiArNzQ2LDkgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9y X2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAkgKiBQcmVwYXJl IHRvIHNjYW4gdGhlIE9sZEhlYXAuICBUbyBlbnN1cmUgd2Ugc2VlIHJlY2VudGx5LWRlYWQgdHVw bGVzCiAJICogdGhhdCBzdGlsbCBuZWVkIHRvIGJlIGNvcGllZCwgd2Ugc2NhbiB3aXRoIFNuYXBz aG90QW55IGFuZCB1c2UKIAkgKiBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gZm9yIHRoZSB2aXNp YmlsaXR5IHRlc3QuCisJICoKKwkgKiBJbiB0aGUgQ09OQ1VSUkVOVExZIGNhc2UsIHdlIGRvIHJl Z3VsYXIgTVZDQyB2aXNpYmlsaXR5IHRlc3RzLCB1c2luZworCSAqIHRoZSBzbmFwc2hvdCBwYXNz ZWQgYnkgdGhlIGNhbGxlci4KIAkgKi8KIAlpZiAoT2xkSW5kZXggIT0gTlVMTCAmJiAhdXNlX3Nv cnQpCiAJewpAQCAtNzUzLDcgKzc2NSw5IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVz dGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0g TlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4o T2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2Fu ID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LAorCQkJCQkJCQkJc25hcHNob3Qg PyBzbmFwc2hvdCA6IFNuYXBzaG90QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4 X3Jlc2NhbihpbmRleFNjYW4sIE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC03NjIs NyArNzc2LDkgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xk SGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQ Uk9HUkVTU19SRVBBQ0tfUEhBU0UsCiAJCQkJCQkJCQkgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1NF UV9TQ0FOX0hFQVApOwogCi0JCXRhYmxlU2NhbiA9IHRhYmxlX2JlZ2luc2NhbihPbGRIZWFwLCBT bmFwc2hvdEFueSwgMCwgKFNjYW5LZXkpIE5VTEwpOworCQl0YWJsZVNjYW4gPSB0YWJsZV9iZWdp bnNjYW4oT2xkSGVhcCwKKwkJCQkJCQkJCXNuYXBzaG90ID8gc25hcHNob3QgOiBTbmFwc2hvdEFu eSwKKwkJCQkJCQkJCTAsIChTY2FuS2V5KSBOVUxMKTsKIAkJaGVhcFNjYW4gPSAoSGVhcFNjYW5E ZXNjKSB0YWJsZVNjYW47CiAJCWluZGV4U2NhbiA9IE5VTEw7CiAKQEAgLTc4NSw2ICs4MDEsNyBA QCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxh dGlvbiBOZXdIZWFwLAogCQlIZWFwVHVwbGUJdHVwbGU7CiAJCUJ1ZmZlcgkJYnVmOwogCQlib29s CQlpc2RlYWQ7CisJCUhUU1ZfUmVzdWx0IHZpczsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OwogCkBAIC04MzcsNzAgKzg1NCw4NCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3Rl cihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQl0dXBsZSA9IEV4ZWNGZXRj aFNsb3RIZWFwVHVwbGUoc2xvdCwgZmFsc2UsIE5VTEwpOwogCQlidWYgPSBoc2xvdC0+YnVmZmVy OwogCi0JCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0KLQkJc3dpdGNoIChI ZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0odHVwbGUsIE9sZGVzdFhtaW4sIGJ1ZikpCisJCS8qCisJ CSAqIFJlZ2FyZGluZyBDT05DVVJSRU5UTFksIHNlZSB0aGUgY29tbWVudHMgb24gTVZDQyBzbmFw c2hvdCBhYm92ZS4KKwkJICovCisJCWlmICghY29uY3VycmVudCkKIAkJewotCQkJY2FzZSBIRUFQ VFVQTEVfREVBRDoKLQkJCQkvKiBEZWZpbml0ZWx5IGRlYWQgKi8KLQkJCQlpc2RlYWQgPSB0cnVl OwotCQkJCWJyZWFrOwotCQkJY2FzZSBIRUFQVFVQTEVfUkVDRU5UTFlfREVBRDoKLQkJCQkqdHVw c19yZWNlbnRseV9kZWFkICs9IDE7Ci0JCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCQljYXNlIEhF QVBUVVBMRV9MSVZFOgotCQkJCS8qIExpdmUgb3IgcmVjZW50bHkgZGVhZCwgbXVzdCBjb3B5IGl0 ICovCi0JCQkJaXNkZWFkID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEhFQVBUVVBMRV9J TlNFUlRfSU5fUFJPR1JFU1M6CisJCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUp OwogCi0JCQkJLyoKLQkJCQkgKiBTaW5jZSB3ZSBob2xkIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBy ZWxhdGlvbiwgbm9ybWFsbHkgdGhlCi0JCQkJICogb25seSB3YXkgdG8gc2VlIHRoaXMgaXMgaWYg aXQgd2FzIGluc2VydGVkIGVhcmxpZXIgaW4gb3VyCi0JCQkJICogb3duIHRyYW5zYWN0aW9uLiAg SG93ZXZlciwgaXQgY2FuIGhhcHBlbiBpbiBzeXN0ZW0KLQkJCQkgKiBjYXRhbG9ncywgc2luY2Ug d2UgdGVuZCB0byByZWxlYXNlIHdyaXRlIGxvY2sgYmVmb3JlIGNvbW1pdAotCQkJCSAqIHRoZXJl LiAgR2l2ZSBhIHdhcm5pbmcgaWYgbmVpdGhlciBjYXNlIGFwcGxpZXM7IGJ1dCBpbiBhbnkKLQkJ CQkgKiBjYXNlIHdlIGhhZCBiZXR0ZXIgY29weSBpdC4KLQkJCQkgKi8KLQkJCQlpZiAoIWlzX3N5 c3RlbV9jYXRhbG9nICYmCi0JCQkJCSFUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25J ZChIZWFwVHVwbGVIZWFkZXJHZXRYbWluKHR1cGxlLT50X2RhdGEpKSkKLQkJCQkJZWxvZyhXQVJO SU5HLCAiY29uY3VycmVudCBpbnNlcnQgaW4gcHJvZ3Jlc3Mgd2l0aGluIHRhYmxlIFwiJXNcIiIs Ci0JCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoT2xkSGVhcCkpOwotCQkJCS8qIHRyZWF0 IGFzIGxpdmUgKi8KLQkJCQlpc2RlYWQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCWNhc2UgSEVB UFRVUExFX0RFTEVURV9JTl9QUk9HUkVTUzoKKwkJCXN3aXRjaCAoKHZpcyA9IEhlYXBUdXBsZVNh dGlzZmllc1ZhY3V1bSh0dXBsZSwgT2xkZXN0WG1pbiwgYnVmKSkpCisJCQl7CisJCQkJY2FzZSBI RUFQVFVQTEVfREVBRDoKKwkJCQkJLyogRGVmaW5pdGVseSBkZWFkICovCisJCQkJCWlzZGVhZCA9 IHRydWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSEVBUFRVUExFX1JFQ0VOVExZX0RFQUQ6CisJ CQkJCSp0dXBzX3JlY2VudGx5X2RlYWQgKz0gMTsKKwkJCQkJLyogZmFsbCB0aHJvdWdoICovCisJ CQkJY2FzZSBIRUFQVFVQTEVfTElWRToKKwkJCQkJLyogTGl2ZSBvciByZWNlbnRseSBkZWFkLCBt dXN0IGNvcHkgaXQgKi8KKwkJCQkJaXNkZWFkID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCWNh c2UgSEVBUFRVUExFX0lOU0VSVF9JTl9QUk9HUkVTUzoKIAotCQkJCS8qCi0JCQkJICogU2ltaWxh ciBzaXR1YXRpb24gdG8gSU5TRVJUX0lOX1BST0dSRVNTIGNhc2UuCi0JCQkJICovCi0JCQkJaWYg KCFpc19zeXN0ZW1fY2F0YWxvZyAmJgotCQkJCQkhVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5z YWN0aW9uSWQoSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKHR1cGxlLT50X2RhdGEpKSkKLQkJ CQkJZWxvZyhXQVJOSU5HLCAiY29uY3VycmVudCBkZWxldGUgaW4gcHJvZ3Jlc3Mgd2l0aGluIHRh YmxlIFwiJXNcIiIsCi0JCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoT2xkSGVhcCkpOwot CQkJCS8qIHRyZWF0IGFzIHJlY2VudGx5IGRlYWQgKi8KLQkJCQkqdHVwc19yZWNlbnRseV9kZWFk ICs9IDE7Ci0JCQkJaXNkZWFkID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJ CWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSByZXN1bHQi KTsKLQkJCQlpc2RlYWQgPSBmYWxzZTsgLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQkJCWJy ZWFrOwotCQl9CisJCQkJCS8qCisJCQkJCSAqIEFzIGxvbmcgYXMgd2UgaG9sZCBleGNsdXNpdmUg bG9jayBvbiB0aGUgcmVsYXRpb24sCisJCQkJCSAqIG5vcm1hbGx5IHRoZSBvbmx5IHdheSB0byBz ZWUgdGhpcyBpcyBpZiBpdCB3YXMgaW5zZXJ0ZWQKKwkJCQkJICogZWFybGllciBpbiBvdXIgb3du IHRyYW5zYWN0aW9uLiAgSG93ZXZlciwgaXQgY2FuIGhhcHBlbgorCQkJCQkgKiBpbiBzeXN0ZW0g Y2F0YWxvZ3MsIHNpbmNlIHdlIHRlbmQgdG8gcmVsZWFzZSB3cml0ZSBsb2NrCisJCQkJCSAqIGJl Zm9yZSBjb21taXQgdGhlcmUuIEFsc28sIHRoZXJlJ3Mgbm8gZXhjbHVzaXZlIGxvY2sKKwkJCQkJ ICogZHVyaW5nIGNvbmN1cnJlbnQgcHJvY2Vzc2luZy4gR2l2ZSBhIHdhcm5pbmcgaWYgbmVpdGhl cgorCQkJCQkgKiBjYXNlIGFwcGxpZXM7IGJ1dCBpbiBhbnkgY2FzZSB3ZSBoYWQgYmV0dGVyIGNv cHkgaXQuCisJCQkJCSAqLworCQkJCQlpZiAoIWlzX3N5c3RlbV9jYXRhbG9nICYmICFjb25jdXJy ZW50ICYmCisJCQkJCQkhVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQoSGVhcFR1 cGxlSGVhZGVyR2V0WG1pbih0dXBsZS0+dF9kYXRhKSkpCisJCQkJCQllbG9nKFdBUk5JTkcsICJj b25jdXJyZW50IGluc2VydCBpbiBwcm9ncmVzcyB3aXRoaW4gdGFibGUgXCIlc1wiIiwKKwkJCQkJ CQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoT2xkSGVhcCkpOworCQkJCQkvKiB0cmVhdCBhcyBs aXZlICovCisJCQkJCWlzZGVhZCA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQljYXNlIEhFQVBU VVBMRV9ERUxFVEVfSU5fUFJPR1JFU1M6CiAKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NL X1VOTE9DSyk7CisJCQkJCS8qCisJCQkJCSAqIFNpbWlsYXIgc2l0dWF0aW9uIHRvIElOU0VSVF9J Tl9QUk9HUkVTUyBjYXNlLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFpc19zeXN0ZW1fY2F0YWxvZyAm JiAhY29uY3VycmVudCAmJgorCQkJCQkJIVRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlv bklkKEhlYXBUdXBsZUhlYWRlckdldFVwZGF0ZVhpZCh0dXBsZS0+dF9kYXRhKSkpCisJCQkJCQll bG9nKFdBUk5JTkcsICJjb25jdXJyZW50IGRlbGV0ZSBpbiBwcm9ncmVzcyB3aXRoaW4gdGFibGUg XCIlc1wiIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoT2xkSGVhcCkpOworCQkJ CQkvKiB0cmVhdCBhcyByZWNlbnRseSBkZWFkICovCisJCQkJCSp0dXBzX3JlY2VudGx5X2RlYWQg Kz0gMTsKKwkJCQkJaXNkZWFkID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJ CQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSByZXN1 bHQiKTsKKwkJCQkJaXNkZWFkID0gZmFsc2U7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJ CQkJYnJlYWs7CisJCQl9CiAKLQkJaWYgKGlzZGVhZCkKLQkJewotCQkJKnR1cHNfdmFjdXVtZWQg Kz0gMTsKLQkJCS8qIGhlYXAgcmV3cml0ZSBtb2R1bGUgc3RpbGwgbmVlZHMgdG8gc2VlIGl0Li4u ICovCi0JCQlpZiAocmV3cml0ZV9oZWFwX2RlYWRfdHVwbGUocndzdGF0ZSwgdHVwbGUpKQorCQkJ aWYgKGlzZGVhZCkKIAkJCXsKLQkJCQkvKiBBIHByZXZpb3VzIHJlY2VudGx5LWRlYWQgdHVwbGUg aXMgbm93IGtub3duIGRlYWQgKi8KIAkJCQkqdHVwc192YWN1dW1lZCArPSAxOwotCQkJCSp0dXBz X3JlY2VudGx5X2RlYWQgLT0gMTsKKwkJCQkvKiBoZWFwIHJld3JpdGUgbW9kdWxlIHN0aWxsIG5l ZWRzIHRvIHNlZSBpdC4uLiAqLworCQkJCWlmIChyZXdyaXRlX2hlYXBfZGVhZF90dXBsZShyd3N0 YXRlLCB0dXBsZSkpCisJCQkJeworCQkJCQkvKiBBIHByZXZpb3VzIHJlY2VudGx5LWRlYWQgdHVw bGUgaXMgbm93IGtub3duIGRlYWQgKi8KKwkJCQkJKnR1cHNfdmFjdXVtZWQgKz0gMTsKKwkJCQkJ KnR1cHNfcmVjZW50bHlfZGVhZCAtPSAxOworCQkJCX0KKworCQkJCUxvY2tCdWZmZXIoYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJY29udGludWU7CisK KwkJCS8qCisJCQkgKiBJbiB0aGUgY29uY3VycmVudCBjYXNlLCB3ZSBoYXZlIGEgY29weSBvZiB0 aGUgdHVwbGUsIHNvIHdlCisJCQkgKiBkb24ndCB3b3JyeSB3aGV0aGVyIHRoZSBzb3VyY2UgdHVw bGUgd2lsbCBiZSBkZWxldGVkIC8gdXBkYXRlZAorCQkJICogYWZ0ZXIgd2UgcmVsZWFzZSB0aGUg bG9jay4KKwkJCSAqLworCQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAJ CX0KIAogCQkqbnVtX3R1cGxlcyArPSAxOwpAQCAtOTE5LDcgKzk1MCw3IEBAIGhlYXBhbV9yZWxh dGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAs CiAJCXsKIAkJCWNvbnN0IGludAljdF9pbmRleFtdID0gewogCQkJCVBST0dSRVNTX1JFUEFDS19I RUFQX1RVUExFU19TQ0FOTkVELAotCQkJCVBST0dSRVNTX1JFUEFDS19IRUFQX1RVUExFU19XUklU VEVOCisJCQkJUFJPR1JFU1NfUkVQQUNLX0hFQVBfVFVQTEVTX0lOU0VSVEVECiAJCQl9OwogCQkJ aW50NjQJCWN0X3ZhbFsyXTsKIApAQCAtOTM0LDYgKzk2NSwzMSBAQCBoZWFwYW1fcmVsYXRpb25f Y29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJ Y3RfdmFsWzFdID0gKm51bV90dXBsZXM7CiAJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRp X3BhcmFtKDIsIGN0X2luZGV4LCBjdF92YWwpOwogCQl9CisKKwkJLyoKKwkJICogUHJvY2VzcyB0 aGUgV0FMIHByb2R1Y2VkIGJ5IHRoZSBsb2FkLCBhcyB3ZWxsIGFzIGJ5IG90aGVyCisJCSAqIHRy YW5zYWN0aW9ucywgc28gdGhhdCB0aGUgcmVwbGljYXRpb24gc2xvdCBjYW4gYWR2YW5jZSBhbmQg V0FMIGRvZXMKKwkJICogbm90IHBpbGUgdXAuIFVzZSB3YWxfc2VnbWVudF9zaXplIGFzIGEgdGhy ZXNob2xkIHNvIHRoYXQgd2UgZG8gbm90CisJCSAqIGludHJvZHVjZSB0aGUgZGVjb2Rpbmcgb3Zl cmhlYWQgdG9vIG9mdGVuLgorCQkgKgorCQkgKiBPZiBjb3Vyc2UsIHdlIG11c3Qgbm90IGFwcGx5 IHRoZSBjaGFuZ2VzIHVudGlsIHRoZSBpbml0aWFsIGxvYWQgaGFzCisJCSAqIGNvbXBsZXRlZC4K KwkJICoKKwkJICogTm90ZSB0aGF0IG91ciBpbnNlcnRpb25zIGludG8gdGhlIG5ldyB0YWJsZSBz aG91bGQgbm90IGJlIGRlY29kZWQKKwkJICogYXMgd2UgKGludGVudGlvbmFsbHkpIGRvIG5vdCB3 cml0ZSB0aGUgbG9naWNhbCBkZWNvZGluZyBzcGVjaWZpYworCQkgKiBpbmZvcm1hdGlvbiB0byBX QUwuCisJCSAqLworCQlpZiAoY29uY3VycmVudCkKKwkJeworCQkJWExvZ1JlY1B0cgllbmRfb2Zf d2FsOworCisJCQllbmRfb2Zfd2FsID0gR2V0Rmx1c2hSZWNQdHIoTlVMTCk7CisJCQlpZiAoKGVu ZF9vZl93YWwgLSBlbmRfb2Zfd2FsX3ByZXYpID4gd2FsX3NlZ21lbnRfc2l6ZSkKKwkJCXsKKwkJ CQlyZXBhY2tfZGVjb2RlX2NvbmN1cnJlbnRfY2hhbmdlcyhkZWNvZGluZ19jdHgsIGVuZF9vZl93 YWwpOworCQkJCWVuZF9vZl93YWxfcHJldiA9IGVuZF9vZl93YWw7CisJCQl9CisJCX0KIAl9CiAK IAlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCkBAIC05NzcsNyArMTAzMyw3IEBAIGhlYXBhbV9yZWxh dGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAs CiAJCQkJCQkJCQkgdmFsdWVzLCBpc251bGwsCiAJCQkJCQkJCQkgcndzdGF0ZSk7CiAJCQkvKiBS ZXBvcnQgbl90dXBsZXMgKi8KLQkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JF U1NfUkVQQUNLX0hFQVBfVFVQTEVTX1dSSVRURU4sCisJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRl X3BhcmFtKFBST0dSRVNTX1JFUEFDS19IRUFQX1RVUExFU19JTlNFUlRFRCwKIAkJCQkJCQkJCQkg bl90dXBsZXMpOwogCQl9CiAKQEAgLTk4NSw3ICsxMDQxLDggQEAgaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAl9CiAK IAkvKiBXcml0ZSBvdXQgYW55IHJlbWFpbmluZyB0dXBsZXMsIGFuZCBmc3luYyBpZiBuZWVkZWQg Ki8KLQllbmRfaGVhcF9yZXdyaXRlKHJ3c3RhdGUpOworCWlmIChyd3N0YXRlKQorCQllbmRfaGVh cF9yZXdyaXRlKHJ3c3RhdGUpOwogCiAJLyogQ2xlYW4gdXAgKi8KIAlwZnJlZSh2YWx1ZXMpOwpA QCAtMjM3Niw2ICsyNDMzLDEwIEBAIGhlYXBhbV9zY2FuX3NhbXBsZV9uZXh0X3R1cGxlKFRhYmxl U2NhbkRlc2Mgc2NhbiwgU2FtcGxlU2NhblN0YXRlICpzY2Fuc3RhdGUsCiAgKiBTRVQgV0lUSE9V VCBPSURTLgogICoKICAqIFNvLCB3ZSBtdXN0IHJlY29uc3RydWN0IHRoZSB0dXBsZSBmcm9tIGNv bXBvbmVudCBEYXR1bXMuCisgKgorICogSWYgcndzdGF0ZT1OVUxMLCB1c2Ugc2ltcGxlX2hlYXBf aW5zZXJ0KCkgaW5zdGVhZCBvZiByZXdyaXRpbmcgLSBpbiB0aGF0CisgKiBjYXNlIHdlIHN0aWxs IG5lZWQgdG8gZGVmb3JtL2Zvcm0gdGhlIHR1cGxlLiBUT0RPIFNob3VsZG4ndCB3ZSByZW5hbWUg dGhlCisgKiBmdW5jdGlvbiwgYXMgbWlnaHQgbm90IGRvIGFueSByZXdyaXRlPwogICovCiBzdGF0 aWMgdm9pZAogcmVmb3JtX2FuZF9yZXdyaXRlX3R1cGxlKEhlYXBUdXBsZSB0dXBsZSwKQEAgLTIz OTgsOCArMjQ1OSwyOCBAQCByZWZvcm1fYW5kX3Jld3JpdGVfdHVwbGUoSGVhcFR1cGxlIHR1cGxl LAogCiAJY29waWVkVHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUobmV3VHVwRGVzYywgdmFsdWVzLCBp c251bGwpOwogCi0JLyogVGhlIGhlYXAgcmV3cml0ZSBtb2R1bGUgZG9lcyB0aGUgcmVzdCAqLwot CXJld3JpdGVfaGVhcF90dXBsZShyd3N0YXRlLCB0dXBsZSwgY29waWVkVHVwbGUpOworCWlmIChy d3N0YXRlKQorCQkvKiBUaGUgaGVhcCByZXdyaXRlIG1vZHVsZSBkb2VzIHRoZSByZXN0ICovCisJ CXJld3JpdGVfaGVhcF90dXBsZShyd3N0YXRlLCB0dXBsZSwgY29waWVkVHVwbGUpOworCWVsc2UK Kwl7CisJCS8qCisJCSAqIEluc2VydCB0dXBsZSB3aGVuIHByb2Nlc3NpbmcgUkVQQUNLIENPTkNV UlJFTlRMWS4KKwkJICoKKwkJICogcmV3cml0ZWhlYXAuYyBpcyBub3QgdXNlZCBpbiB0aGUgQ09O Q1VSUkVOVExZIGNhc2UgYmVjYXVzZSBpdCdkIGJlCisJCSAqIGRpZmZpY3VsdCB0byBkbyB0aGUg c2FtZSBpbiB0aGUgY2F0Y2gtdXAgcGhhc2UgKGFzIHRoZSBsb2dpY2FsCisJCSAqIGRlY29kaW5n IGRvZXMgbm90IHByb3ZpZGUgdXMgd2l0aCBzdWZmaWNpZW50IHZpc2liaWxpdHkKKwkJICogaW5m b3JtYXRpb24pLiBUaHVzIHdlIG11c3QgdXNlIGhlYXBfaW5zZXJ0KCkgYm90aCBkdXJpbmcgdGhl CisJCSAqIGNhdGNoLXVwIGFuZCBoZXJlLgorCQkgKgorCQkgKiBUaGUgZm9sbG93aW5nIGlzIGxp a2Ugc2ltcGxlX2hlYXBfaW5zZXJ0KCkgZXhjZXB0IHRoYXQgd2UgcGFzcyB0aGUKKwkJICogZmxh ZyB0byBza2lwIGxvZ2ljYWwgZGVjb2Rpbmc6IGFzIHNvb24gYXMgUkVQQUNLIENPTkNVUlJFTlRM WSBzd2FwcworCQkgKiB0aGUgcmVsYXRpb24gZmlsZXMsIGl0IGRyb3BzIHRoaXMgcmVsYXRpb24s IHNvIG5vIGxvZ2ljYWwKKwkJICogcmVwbGljYXRpb24gc3Vic2NyaXB0aW9uIHNob3VsZCBuZWVk IHRoZSBkYXRhLgorCQkgKi8KKwkJaGVhcF9pbnNlcnQoTmV3SGVhcCwgY29waWVkVHVwbGUsIEdl dEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCUhFQVBfSU5TRVJUX05PX0xPR0lDQUwsIE5V TEwpOworCX0KIAogCWhlYXBfZnJlZXR1cGxlKGNvcGllZFR1cGxlKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IGU2ZDJiNWZjZWQxLi42YWEyZWQyMTRmMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCkBAIC02MTcsOSArNjE3LDkgQEAgcmF3 X2hlYXBfaW5zZXJ0KFJld3JpdGVTdGF0ZSBzdGF0ZSwgSGVhcFR1cGxlIHR1cCkKIAkJaW50CQkJ b3B0aW9ucyA9IEhFQVBfSU5TRVJUX1NLSVBfRlNNOwogCiAJCS8qCi0JCSAqIFdoaWxlIHJld3Jp dGluZyB0aGUgaGVhcCBmb3IgVkFDVVVNIEZVTEwgLyBDTFVTVEVSLCBtYWtlIHN1cmUgZGF0YQot CQkgKiBmb3IgdGhlIFRPQVNUIHRhYmxlIGFyZSBub3QgbG9naWNhbGx5IGRlY29kZWQuICBUaGUg bWFpbiBoZWFwIGlzCi0JCSAqIFdBTC1sb2dnZWQgYXMgWExPRyBGUEkgcmVjb3Jkcywgd2hpY2gg YXJlIG5vdCBsb2dpY2FsbHkgZGVjb2RlZC4KKwkJICogV2hpbGUgcmV3cml0aW5nIHRoZSBoZWFw IGZvciBSRVBBQ0ssIG1ha2Ugc3VyZSBkYXRhIGZvciB0aGUgVE9BU1QKKwkJICogdGFibGUgYXJl IG5vdCBsb2dpY2FsbHkgZGVjb2RlZC4gIFRoZSBtYWluIGhlYXAgaXMgV0FMLWxvZ2dlZCBhcwor CQkgKiBYTE9HIEZQSSByZWNvcmRzLCB3aGljaCBhcmUgbm90IGxvZ2ljYWxseSBkZWNvZGVkLgog CQkgKi8KIAkJb3B0aW9ucyB8PSBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMKaW5kZXggYjQ2ZTdlOWMyYTYuLjU2NzBmMmJmYmRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0yMTUsNiArMjE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVHJh bnNhY3Rpb25TdGF0ZURhdGEKIAlib29sCQlwYXJhbGxlbENoaWxkWGFjdDsJLyogaXMgYW55IHBh cmVudCB0cmFuc2FjdGlvbiBwYXJhbGxlbD8gKi8KIAlib29sCQljaGFpbjsJCQkvKiBzdGFydCBh IG5ldyBibG9jayBhZnRlciB0aGlzIG9uZSAqLwogCWJvb2wJCXRvcFhpZExvZ2dlZDsJLyogZm9y IGEgc3VieGFjdDogaXMgdG9wLWxldmVsIFhJRCBsb2dnZWQ/ICovCisJYm9vbAkJaW50ZXJuYWw7 CQkvKiBmb3IgYSBzdWJ4YWN0OiBsYXVuY2hlZCBpbnRlcm5hbGx5PyAqLwogCXN0cnVjdCBUcmFu c2FjdGlvblN0YXRlRGF0YSAqcGFyZW50OwkvKiBiYWNrIGxpbmsgdG8gcGFyZW50ICovCiB9IFRy YW5zYWN0aW9uU3RhdGVEYXRhOwogCkBAIC00NzM1LDYgKzQ3MzYsNyBAQCBCZWdpbkludGVybmFs U3ViVHJhbnNhY3Rpb24oY29uc3QgY2hhciAqbmFtZSkKIAkJCS8qIE5vcm1hbCBzdWJ0cmFuc2Fj dGlvbiBzdGFydCAqLwogCQkJUHVzaFRyYW5zYWN0aW9uKCk7CiAJCQlzID0gQ3VycmVudFRyYW5z YWN0aW9uU3RhdGU7CS8qIGNoYW5nZWQgYnkgcHVzaCAqLworCQkJcy0+aW50ZXJuYWwgPSB0cnVl OwogCiAJCQkvKgogCQkJICogU2F2ZXBvaW50IG5hbWVzLCBsaWtlIHRoZSBUcmFuc2FjdGlvblN0 YXRlIGJsb2NrIGl0c2VsZiwgbGl2ZQpAQCAtNTI1MSw3ICs1MjUzLDEzIEBAIEFib3J0U3ViVHJh bnNhY3Rpb24odm9pZCkKIAlMV0xvY2tSZWxlYXNlQWxsKCk7CiAKIAlwZ3N0YXRfcmVwb3J0X3dh aXRfZW5kKCk7Ci0JcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5kKCk7CisKKwkvKgorCSAqIElu dGVybmFsIHN1YnRyYW5zYWNpb24gbWlnaHQgYmUgdXNlZCBieSBhbiB1c2VyIGNvbW1hbmQsIGlu IHdoaWNoIGNhc2UKKwkgKiB0aGUgY29tbWFuZCBvdXRsaXZlcyB0aGUgc3VidHJhbnNhY3Rpb24u CisJICovCisJaWYgKCFzLT5pbnRlcm5hbCkKKwkJcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21tYW5k KCk7CiAKIAlwZ2Fpb19lcnJvcl9jbGVhbnVwKCk7CiAKQEAgLTU0NjgsNiArNTQ3Niw3IEBAIFB1 c2hUcmFuc2FjdGlvbih2b2lkKQogCXMtPnBhcmFsbGVsTW9kZUxldmVsID0gMDsKIAlzLT5wYXJh bGxlbENoaWxkWGFjdCA9IChwLT5wYXJhbGxlbE1vZGVMZXZlbCAhPSAwIHx8IHAtPnBhcmFsbGVs Q2hpbGRYYWN0KTsKIAlzLT50b3BYaWRMb2dnZWQgPSBmYWxzZTsKKwlzLT5pbnRlcm5hbCA9IGZh bHNlOwogCiAJQ3VycmVudFRyYW5zYWN0aW9uU3RhdGUgPSBzOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwKaW5kZXggYjJiN2IxMGMyYmUuLmE5MmFjNzhhZDllIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC0xMjY2LDE2ICsxMjY2LDE3IEBAIENSRUFURSBW SUVXIHBnX3N0YXRfcHJvZ3Jlc3NfY2x1c3RlciBBUwogICAgICAgICAgICAgICAgICAgICAgIFdI RU4gMiBUSEVOICdpbmRleCBzY2FubmluZyBoZWFwJwogICAgICAgICAgICAgICAgICAgICAgIFdI RU4gMyBUSEVOICdzb3J0aW5nIHR1cGxlcycKICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDQg VEhFTiAnd3JpdGluZyBuZXcgaGVhcCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhF TiAnc3dhcHBpbmcgcmVsYXRpb24gZmlsZXMnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA2 IFRIRU4gJ3JlYnVpbGRpbmcgaW5kZXgnCi0gICAgICAgICAgICAgICAgICAgICAgV0hFTiA3IFRI RU4gJ3BlcmZvcm1pbmcgZmluYWwgY2xlYW51cCcKKyAgICAgICAgICAgICAgICAgICAgICAtLSA1 IGlzICdjYXRjaC11cCcsIGJ1dCB0aGF0IHNob3VsZCBub3QgYXBwZWFyIGhlcmUuCisgICAgICAg ICAgICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ3N3YXBwaW5nIHJlbGF0aW9uIGZpbGVzJworICAg ICAgICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICdyZWJ1aWxkaW5nIGluZGV4JworICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gOCBUSEVOICdwZXJmb3JtaW5nIGZpbmFsIGNsZWFudXAnCiAg ICAgICAgICAgICAgICAgICAgICAgRU5EIEFTIHBoYXNlLAogICAgICAgICBDQVNUKFMucGFyYW0z IEFTIG9pZCkgQVMgY2x1c3Rlcl9pbmRleF9yZWxpZCwKICAgICAgICAgUy5wYXJhbTQgQVMgaGVh cF90dXBsZXNfc2Nhbm5lZCwKICAgICAgICAgUy5wYXJhbTUgQVMgaGVhcF90dXBsZXNfd3JpdHRl biwKLSAgICAgICAgUy5wYXJhbTYgQVMgaGVhcF9ibGtzX3RvdGFsLAotICAgICAgICBTLnBhcmFt NyBBUyBoZWFwX2Jsa3Nfc2Nhbm5lZCwKLSAgICAgICAgUy5wYXJhbTggQVMgaW5kZXhfcmVidWls ZF9jb3VudAorICAgICAgICBTLnBhcmFtOCBBUyBoZWFwX2Jsa3NfdG90YWwsCisgICAgICAgIFMu cGFyYW05IEFTIGhlYXBfYmxrc19zY2FubmVkLAorICAgICAgICBTLnBhcmFtMTAgQVMgaW5kZXhf cmVidWlsZF9jb3VudAogICAgIEZST00gcGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnQ0xVU1RF UicpIEFTIFMKICAgICAgICAgTEVGVCBKT0lOIHBnX2RhdGFiYXNlIEQgT04gUy5kYXRpZCA9IEQu b2lkOwogCkBAIC0xMjkxLDE2ICsxMjkyLDE5IEBAIENSRUFURSBWSUVXIHBnX3N0YXRfcHJvZ3Jl c3NfcmVwYWNrIEFTCiAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2luZGV4IHNj YW5uaW5nIGhlYXAnCiAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3NvcnRpbmcg dHVwbGVzJwogICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3cml0aW5nIG5ldyBo ZWFwJwotICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdzd2FwcGluZyByZWxhdGlv biBmaWxlcycKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDYgVEhFTiAncmVidWlsZGluZyBp bmRleCcKLSAgICAgICAgICAgICAgICAgICAgICBXSEVOIDcgVEhFTiAncGVyZm9ybWluZyBmaW5h bCBjbGVhbnVwJworICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNSBUSEVOICdjYXRjaC11cCcK KyAgICAgICAgICAgICAgICAgICAgICBXSEVOIDYgVEhFTiAnc3dhcHBpbmcgcmVsYXRpb24gZmls ZXMnCisgICAgICAgICAgICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3JlYnVpbGRpbmcgaW5kZXgn CisgICAgICAgICAgICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3BlcmZvcm1pbmcgZmluYWwgY2xl YW51cCcKICAgICAgICAgICAgICAgICAgICAgICBFTkQgQVMgcGhhc2UsCiAgICAgICAgIENBU1Qo Uy5wYXJhbTMgQVMgb2lkKSBBUyByZXBhY2tfaW5kZXhfcmVsaWQsCiAgICAgICAgIFMucGFyYW00 IEFTIGhlYXBfdHVwbGVzX3NjYW5uZWQsCi0gICAgICAgIFMucGFyYW01IEFTIGhlYXBfdHVwbGVz X3dyaXR0ZW4sCi0gICAgICAgIFMucGFyYW02IEFTIGhlYXBfYmxrc190b3RhbCwKLSAgICAgICAg Uy5wYXJhbTcgQVMgaGVhcF9ibGtzX3NjYW5uZWQsCi0gICAgICAgIFMucGFyYW04IEFTIGluZGV4 X3JlYnVpbGRfY291bnQKKyAgICAgICAgUy5wYXJhbTUgQVMgaGVhcF90dXBsZXNfaW5zZXJ0ZWQs CisgICAgICAgIFMucGFyYW02IEFTIGhlYXBfdHVwbGVzX3VwZGF0ZWQsCisgICAgICAgIFMucGFy YW03IEFTIGhlYXBfdHVwbGVzX2RlbGV0ZWQsCisgICAgICAgIFMucGFyYW04IEFTIGhlYXBfYmxr c190b3RhbCwKKyAgICAgICAgUy5wYXJhbTkgQVMgaGVhcF9ibGtzX3NjYW5uZWQsCisgICAgICAg IFMucGFyYW0xMCBBUyBpbmRleF9yZWJ1aWxkX2NvdW50CiAgICAgRlJPTSBwZ19zdGF0X2dldF9w cm9ncmVzc19pbmZvKCdSRVBBQ0snKSBBUyBTCiAgICAgICAgIExFRlQgSk9JTiBwZ19kYXRhYmFz ZSBEIE9OIFMuZGF0aWQgPSBELm9pZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY2x1c3Rlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCmluZGV4IDhiNjRm OWU2Nzk1Li42MTIyNGEzYWRmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1 c3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwpAQCAtMjUsNiArMjUs MTAgQEAKICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNs dWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIK ICNpbmNsdWRlICJjYXRhbG9nL2hlYXAuaCIKQEAgLTMyLDYgKzM2LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Rv YXN0aW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY2x1c3Rlci5oIgpAQCAtMzksMTUgKzQ0LDIx IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90 YWJsZWNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJleGVj dXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm9wdGlt aXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNh dGlvbi9kZWNvZGUuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVk ZSAicmVwbGljYXRpb24vc25hcGJ1aWxkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK KyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5j bHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRl ICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBA IC02NywxMyArNzgsNDUgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlPaWQJCQlpbmRleE9pZDsKIH0gUmVs VG9DbHVzdGVyOwogCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgdXNlZCBm b3IgY29uY3VycmVudCBwcm9jZXNzaW5nLgorICovCisKKy8qCisgKiBUaGUgbG9jYXRvcnMgYXJl IHVzZWQgdG8gYXZvaWQgbG9naWNhbCBkZWNvZGluZyBvZiBkYXRhIHRoYXQgd2UgZG8gbm90IG5l ZWQKKyAqIGZvciBvdXIgdGFibGUuCisgKi8KK1JlbEZpbGVMb2NhdG9yIHJlcGFja2VkX3JlbF9s b2NhdG9yID0gey5yZWxOdW1iZXIgPSBJbnZhbGlkT2lkfTsKK1JlbEZpbGVMb2NhdG9yIHJlcGFj a2VkX3JlbF90b2FzdF9sb2NhdG9yID0gey5yZWxOdW1iZXIgPSBJbnZhbGlkT2lkfTsKKworLyoK KyAqIEV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBjYWxsIEV4ZWNJbnNlcnRJbmRleFR1cGxlcygpLgor ICovCit0eXBlZGVmIHN0cnVjdCBJbmRleEluc2VydFN0YXRlCit7CisJUmVzdWx0UmVsSW5mbyAq cnJpOworCUVTdGF0ZQkgICAqZXN0YXRlOworCisJUmVsYXRpb24JaWRlbnRfaW5kZXg7Cit9IElu ZGV4SW5zZXJ0U3RhdGU7CisKKy8qIFRoZSBXQUwgc2VnbWVudCBiZWluZyBkZWNvZGVkLiAqLwor c3RhdGljIFhMb2dTZWdObyByZXBhY2tfY3VycmVudF9zZWdtZW50ID0gMDsKKworCiBzdGF0aWMg Ym9vbCBjbHVzdGVyX3JlbF9yZWNoZWNrKFJlcGFja0NvbW1hbmQgY21kLCBSZWxhdGlvbiBPbGRI ZWFwLAotCQkJCQkJCQlPaWQgaW5kZXhPaWQsIE9pZCB1c2VyaWQsIGludCBvcHRpb25zKTsKKwkJ CQkJCQkJT2lkIGluZGV4T2lkLCBPaWQgdXNlcmlkLCBMT0NLTU9ERSBsbW9kZSwKKwkJCQkJCQkJ aW50IG9wdGlvbnMpOworc3RhdGljIHZvaWQgY2hlY2tfcmVwYWNrX2NvbmN1cnJlbnRseV9yZXF1 aXJlbWVudHMoUmVsYXRpb24gcmVsKTsKIHN0YXRpYyB2b2lkIHJlYnVpbGRfcmVsYXRpb24oUmVw YWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwKLQkJCQkJCQkgUmVsYXRpb24gT2xkSGVh cCwgUmVsYXRpb24gaW5kZXgsIGJvb2wgdmVyYm9zZSk7CisJCQkJCQkJIFJlbGF0aW9uIE9sZEhl YXAsIFJlbGF0aW9uIGluZGV4LCBPaWQgdXNlcmlkLAorCQkJCQkJCSBib29sIHZlcmJvc2UsIGJv b2wgY29uY3VycmVudCk7CiBzdGF0aWMgdm9pZCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3 SGVhcCwgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsCi0JCQkJCQkJYm9vbCB2 ZXJib3NlLCBib29sICpwU3dhcFRvYXN0QnlDb250ZW50LAotCQkJCQkJCVRyYW5zYWN0aW9uSWQg KnBGcmVlemVYaWQsIE11bHRpWGFjdElkICpwQ3V0b2ZmTXVsdGkpOworCQkJCQkJCVNuYXBzaG90 IHNuYXBzaG90LCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpkZWNvZGluZ19jdHgsCisJCQkJCQkJ Ym9vbCB2ZXJib3NlLAorCQkJCQkJCWJvb2wgKnBTd2FwVG9hc3RCeUNvbnRlbnQsCisJCQkJCQkJ VHJhbnNhY3Rpb25JZCAqcEZyZWV6ZVhpZCwKKwkJCQkJCQlNdWx0aVhhY3RJZCAqcEN1dG9mZk11 bHRpKTsKIHN0YXRpYyBMaXN0ICpnZXRfdGFibGVzX3RvX3JlcGFjayhSZXBhY2tDb21tYW5kIGNt ZCwgYm9vbCB1c2luZ2luZGV4LAogCQkJCQkJCQkgIE1lbW9yeUNvbnRleHQgcGVybWN4dCk7CiBz dGF0aWMgTGlzdCAqZ2V0X3RhYmxlc190b19yZXBhY2tfcGFydGl0aW9uZWQoUmVwYWNrQ29tbWFu ZCBjbWQsCkBAIC04MSwxMiArMTI0LDYxIEBAIHN0YXRpYyBMaXN0ICpnZXRfdGFibGVzX3RvX3Jl cGFja19wYXJ0aXRpb25lZChSZXBhY2tDb21tYW5kIGNtZCwKIAkJCQkJCQkJCQkJICBPaWQgcmVs aWQsIGJvb2wgcmVsX2lzX2luZGV4KTsKIHN0YXRpYyBib29sIGNsdXN0ZXJfaXNfcGVybWl0dGVk X2Zvcl9yZWxhdGlvbihSZXBhY2tDb21tYW5kIGNtZCwKIAkJCQkJCQkJCQkJICBPaWQgcmVsaWQs IE9pZCB1c2VyaWQpOworCitzdGF0aWMgdm9pZCBiZWdpbl9jb25jdXJyZW50X3JlcGFjayhSZWxh dGlvbiByZWwpOworc3RhdGljIHZvaWQgZW5kX2NvbmN1cnJlbnRfcmVwYWNrKHZvaWQpOworc3Rh dGljIExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKnNldHVwX2xvZ2ljYWxfZGVjb2RpbmcoT2lkIHJl bGlkLAorCQkJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqc2xvdG5hbWUsCisJCQkJCQkJCQkJCQkJ ICBUdXBsZURlc2MgdHVwZGVzYyk7CitzdGF0aWMgSGVhcFR1cGxlIGdldF9jaGFuZ2VkX3R1cGxl KGNoYXIgKmNoYW5nZSk7CitzdGF0aWMgdm9pZCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoUmVw YWNrRGVjb2RpbmdTdGF0ZSAqZHN0YXRlLAorCQkJCQkJCQkJIFJlbGF0aW9uIHJlbCwgU2Nhbktl eSBrZXksIGludCBua2V5cywKKwkJCQkJCQkJCSBJbmRleEluc2VydFN0YXRlICppaXN0YXRlKTsK K3N0YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQ29uY3Vy cmVudENoYW5nZSAqY2hhbmdlLAorCQkJCQkJCQkJSGVhcFR1cGxlIHR1cCwgSW5kZXhJbnNlcnRT dGF0ZSAqaWlzdGF0ZSwKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICppbmRleF9zbG90KTsKK3N0 YXRpYyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxl IHR1cCwKKwkJCQkJCQkJCUhlYXBUdXBsZSB0dXBfdGFyZ2V0LAorCQkJCQkJCQkJQ29uY3VycmVu dENoYW5nZSAqY2hhbmdlLAorCQkJCQkJCQkJSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKKwkJ CQkJCQkJCVR1cGxlVGFibGVTbG90ICppbmRleF9zbG90KTsKK3N0YXRpYyB2b2lkIGFwcGx5X2Nv bmN1cnJlbnRfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cF90YXJnZXQsCisJCQkJ CQkJCQlDb25jdXJyZW50Q2hhbmdlICpjaGFuZ2UpOworc3RhdGljIEhlYXBUdXBsZSBmaW5kX3Rh cmdldF90dXBsZShSZWxhdGlvbiByZWwsIFNjYW5LZXkga2V5LCBpbnQgbmtleXMsCisJCQkJCQkJ CSAgIEhlYXBUdXBsZSB0dXBfa2V5LAorCQkJCQkJCQkgICBJbmRleEluc2VydFN0YXRlICppaXN0 YXRlLAorCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqaWRlbnRfc2xvdCwKKwkJCQkJCQkJICAg SW5kZXhTY2FuRGVzYyAqc2Nhbl9wKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY29uY3VycmVudF9j aGFuZ2VzKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCSAgIFhMb2dSZWNQ dHIgZW5kX29mX3dhbCwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uIHJlbF9kc3QsCisJCQkJCQkJCQkg ICBSZWxhdGlvbiByZWxfc3JjLAorCQkJCQkJCQkJICAgU2NhbktleSBpZGVudF9rZXksCisJCQkJ CQkJCQkgICBpbnQgaWRlbnRfa2V5X25lbnRyaWVzLAorCQkJCQkJCQkJICAgSW5kZXhJbnNlcnRT dGF0ZSAqaWlzdGF0ZSk7CitzdGF0aWMgSW5kZXhJbnNlcnRTdGF0ZSAqZ2V0X2luZGV4X2luc2Vy dF9zdGF0ZShSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCQkJCQkJCU9pZCBpZGVudF9pbmRleF9p ZCk7CitzdGF0aWMgU2NhbktleSBidWlsZF9pZGVudGl0eV9rZXkoT2lkIGlkZW50X2lkeF9vaWQs IFJlbGF0aW9uIHJlbF9zcmMsCisJCQkJCQkJCSAgaW50ICpuZW50cmllcyk7CitzdGF0aWMgdm9p ZCBmcmVlX2luZGV4X2luc2VydF9zdGF0ZShJbmRleEluc2VydFN0YXRlICppaXN0YXRlKTsKK3N0 YXRpYyB2b2lkIGNsZWFudXBfbG9naWNhbF9kZWNvZGluZyhMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgpOworc3RhdGljIHZvaWQgcmVidWlsZF9yZWxhdGlvbl9maW5pc2hfY29uY3VycmVudChS ZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAorCQkJCQkJCQkJCQkgICBSZWxhdGlv biBjbF9pbmRleCwKKwkJCQkJCQkJCQkJICAgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAor CQkJCQkJCQkJCQkgICBib29sIHN3YXBfdG9hc3RfYnlfY29udGVudCwKKwkJCQkJCQkJCQkJICAg VHJhbnNhY3Rpb25JZCBmcm96ZW5YaWQsCisJCQkJCQkJCQkJCSAgIE11bHRpWGFjdElkIGN1dG9m Zk11bHRpKTsKK3N0YXRpYyBMaXN0ICpidWlsZF9uZXdfaW5kZXhlcyhSZWxhdGlvbiBOZXdIZWFw LCBSZWxhdGlvbiBPbGRIZWFwLCBMaXN0ICpPbGRJbmRleGVzKTsKIHN0YXRpYyBSZWxhdGlvbiBw cm9jZXNzX3NpbmdsZV9yZWxhdGlvbihSZXBhY2tTdG10ICpzdG10LAorCQkJCQkJCQkJCUxPQ0tN T0RFIGxvY2ttb2RlLAorCQkJCQkJCQkJCWJvb2wgaXNUb3BMZXZlbCwKIAkJCQkJCQkJCQlDbHVz dGVyUGFyYW1zICpwYXJhbXMpOwogc3RhdGljIE9pZAlkZXRlcm1pbmVfY2x1c3RlcmVkX2luZGV4 KFJlbGF0aW9uIHJlbCwgYm9vbCB1c2luZ2luZGV4LAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpp bmRleG5hbWUpOwogCiAKKyNkZWZpbmUgUkVQTF9QTFVHSU5fTkFNRSAgICJwZ291dHB1dF9yZXBh Y2siCisKIHN0YXRpYyBjb25zdCBjaGFyICoKIFJlcGFja0NvbW1hbmRBc1N0cmluZyhSZXBhY2tD b21tYW5kIGNtZCkKIHsKQEAgLTk1LDcgKzE4Nyw3IEBAIFJlcGFja0NvbW1hbmRBc1N0cmluZyhS ZXBhY2tDb21tYW5kIGNtZCkKIAkJY2FzZSBSRVBBQ0tfQ09NTUFORF9SRVBBQ0s6CiAJCQlyZXR1 cm4gIlJFUEFDSyI7CiAJCWNhc2UgUkVQQUNLX0NPTU1BTkRfVkFDVVVNRlVMTDoKLQkJCXJldHVy biAiVkFDVVVNIjsKKwkJCXJldHVybiAiVkFDVVVNIChGVUxMKSI7CiAJCWNhc2UgUkVQQUNLX0NP TU1BTkRfQ0xVU1RFUjoKIAkJCXJldHVybiAiQ0xVU1RFUiI7CiAJfQpAQCAtMTMyLDYgKzIyNCw3 IEBAIEV4ZWNSZXBhY2soUGFyc2VTdGF0ZSAqcHN0YXRlLCBSZXBhY2tTdG10ICpzdG10LCBib29s IGlzVG9wTGV2ZWwpCiAJQ2x1c3RlclBhcmFtcyBwYXJhbXMgPSB7MH07CiAJUmVsYXRpb24JcmVs ID0gTlVMTDsKIAlNZW1vcnlDb250ZXh0IHJlcGFja19jb250ZXh0OworCUxPQ0tNT0RFCWxvY2tt b2RlOwogCUxpc3QJICAgKnJ0Y3M7CiAKIAkvKiBQYXJzZSBvcHRpb24gbGlzdCAqLwpAQCAtMTQy LDYgKzIzNSwxNiBAQCBFeGVjUmVwYWNrKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmVwYWNrU3RtdCAq c3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAi YW5hbHl6ZSIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9wdC0+ZGVmbmFtZSwgImFuYWx5c2UiKSA9 PSAwKQogCQkJcGFyYW1zLm9wdGlvbnMgfD0gZGVmR2V0Qm9vbGVhbihvcHQpID8gQ0xVT1BUX0FO QUxZWkUgOiAwOworCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiY29uY3VycmVudGx5 IikgPT0gMCAmJgorCQkJCSBkZWZHZXRCb29sZWFuKG9wdCkpCisJCXsKKwkJCWlmIChzdG10LT5j b21tYW5kICE9IFJFUEFDS19DT01NQU5EX1JFUEFDSykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQllcnJtc2co IkNPTkNVUlJFTlRMWSBvcHRpb24gbm90IHN1cHBvcnRlZCBmb3IgJXMiLAorCQkJCQkJCSAgIFJl cGFja0NvbW1hbmRBc1N0cmluZyhzdG10LT5jb21tYW5kKSkpOworCQkJcGFyYW1zLm9wdGlvbnMg fD0gQ0xVT1BUX0NPTkNVUlJFTlQ7CisJCX0KIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKIAkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtMTUxLDEzICsyNTQsMjUgQEAg RXhlY1JlcGFjayhQYXJzZVN0YXRlICpwc3RhdGUsIFJlcGFja1N0bXQgKnN0bXQsIGJvb2wgaXNU b3BMZXZlbCkKIAkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24p KSk7CiAJfQogCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGxvY2sgbW9kZSBleHBlY3RlZCBieSBj bHVzdGVyX3JlbCgpLgorCSAqCisJICogSW4gdGhlIGV4Y2x1c2l2ZSBjYXNlLCB3ZSBvYnRhaW4g QWNjZXNzRXhjbHVzaXZlTG9jayByaWdodCBhd2F5IHRvCisJICogYXZvaWQgbG9jay11cGdyYWRl IGhhemFyZCBpbiB0aGUgc2luZ2xlLXRyYW5zYWN0aW9uIGNhc2UuIEluIHRoZQorCSAqIENPTkNV UlJFTlRMWSBjYXNlLCB0aGUgQWNjZXNzRXhjbHVzaXZlTG9jayB3aWxsIG9ubHkgYmUgdXNlZCBh dCB0aGUgZW5kCisJICogb2YgcHJvY2Vzc2luZywgc3VwcG9zZWRseSBmb3IgdmVyeSBzaG9ydCB0 aW1lLiBVbnRpbCB0aGVuLCB3ZSdsbCBoYXZlCisJICogdG8gdW5sb2NrIHRoZSByZWxhdGlvbiB0 ZW1wb3JhcmlseSwgc28gdGhlcmUncyBubyBsb2NrLXVwZ3JhZGUgaGF6YXJkLgorCSAqLworCWxv Y2ttb2RlID0gKHBhcmFtcy5vcHRpb25zICYgQ0xVT1BUX0NPTkNVUlJFTlQpID09IDAgPworCQlB Y2Nlc3NFeGNsdXNpdmVMb2NrIDogU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrOworCiAJLyoKIAkg KiBJZiBhIHNpbmdsZSByZWxhdGlvbiBpcyBzcGVjaWZpZWQsIHByb2Nlc3MgaXQgYW5kIHdlJ3Jl IGRvbmUgLi4uIHVubGVzcwogCSAqIHRoZSByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbmVkIHRhYmxl LCBpbiB3aGljaCBjYXNlIHdlIGZhbGwgdGhyb3VnaC4KIAkgKi8KIAlpZiAoc3RtdC0+cmVsYXRp b24gIT0gTlVMTCkKIAl7Ci0JCXJlbCA9IHByb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKHN0bXQsICZw YXJhbXMpOworCQlyZWwgPSBwcm9jZXNzX3NpbmdsZV9yZWxhdGlvbihzdG10LCBsb2NrbW9kZSwg aXNUb3BMZXZlbCwgJnBhcmFtcyk7CiAJCWlmIChyZWwgPT0gTlVMTCkKIAkJCXJldHVybjsKIAl9 CkBAIC0xNjksMTAgKzI4NCwyOSBAQCBFeGVjUmVwYWNrKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmVw YWNrU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQkJCWVycm1zZygiY2Fubm90IEFOQUxZ WkUgbXVsdGlwbGUgdGFibGVzIikpOwogCiAJLyoKLQkgKiBCeSBoZXJlLCB3ZSBrbm93IHdlIGFy ZSBpbiBhIG11bHRpLXRhYmxlIHNpdHVhdGlvbi4gIEluIG9yZGVyIHRvIGF2b2lkCi0JICogaG9s ZGluZyBsb2NrcyBmb3IgdG9vIGxvbmcsIHdlIHdhbnQgdG8gcHJvY2VzcyBlYWNoIHRhYmxlIGlu IGl0cyBvd24KLQkgKiB0cmFuc2FjdGlvbi4gIFRoaXMgZm9yY2VzIHVzIHRvIGRpc2FsbG93IHJ1 bm5pbmcgaW5zaWRlIGEgdXNlcgotCSAqIHRyYW5zYWN0aW9uIGJsb2NrLgorCSAqIEJ5IGhlcmUs IHdlIGtub3cgd2UgYXJlIGluIGEgbXVsdGktdGFibGUgc2l0dWF0aW9uLgorCSAqCisJICogQ29u Y3VycmVudCBwcm9jZXNzaW5nIGlzIGN1cnJlbnRseSBjb25zaWRlcmVkIHJhdGhlciBzcGVjaWFs IChlLmcuIGluCisJICogdGVybXMgb2YgcmVzb3VyY2VzIGNvbnN1bWVkKSBzbyBpdCBpcyBub3Qg cGVyZm9ybWVkIGluIGJ1bGsuCisJICovCisJaWYgKHBhcmFtcy5vcHRpb25zICYgQ0xVT1BUX0NP TkNVUlJFTlQpCisJeworCQlpZiAocmVsICE9IE5VTEwpCisJCXsKKwkJCUFzc2VydChyZWwtPnJk X3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCWVycm1zZygiUkVQQUNLIENPTkNVUlJFTlRMWSBub3Qgc3VwcG9ydGVkIGZv ciBwYXJ0aXRpb25lZCB0YWJsZXMiKSwKKwkJCQkJZXJyaGludCgiQ29uc2lkZXIgcnVubmluZyB0 aGUgY29tbWFuZCBmb3IgaW5kaXZpZHVhbCBwYXJ0aXRpb25zLiIpKTsKKwkJfQorCQllbHNlCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coIlJFUEFDSyBDT05DVVJSRU5UTFkgcmVxdWly ZXMgZXhwbGljaXQgdGFibGUgbmFtZSIpKTsKKwl9CisKKwkvKgorCSAqIEluIG9yZGVyIHRvIGF2 b2lkIGhvbGRpbmcgbG9ja3MgZm9yIHRvbyBsb25nLCB3ZSB3YW50IHRvIHByb2Nlc3MgZWFjaAor CSAqIHRhYmxlIGluIGl0cyBvd24gdHJhbnNhY3Rpb24uICBUaGlzIGZvcmNlcyB1cyB0byBkaXNh bGxvdyBydW5uaW5nCisJICogaW5zaWRlIGEgdXNlciB0cmFuc2FjdGlvbiBibG9jay4KIAkgKi8K IAlQcmV2ZW50SW5UcmFuc2FjdGlvbkJsb2NrKGlzVG9wTGV2ZWwsIFJlcGFja0NvbW1hbmRBc1N0 cmluZyhzdG10LT5jb21tYW5kKSk7CiAKQEAgLTI1Miw3ICszODYsNyBAQCBFeGVjUmVwYWNrKFBh cnNlU3RhdGUgKnBzdGF0ZSwgUmVwYWNrU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQogCQkg KiBPcGVuIHRoZSB0YXJnZXQgdGFibGUsIGNvcGluZyB3aXRoIHRoZSBjYXNlIHdoZXJlIGl0IGhh cyBiZWVuCiAJCSAqIGRyb3BwZWQuCiAJCSAqLwotCQlyZWwgPSB0cnlfdGFibGVfb3BlbihydGMt PnRhYmxlT2lkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJcmVsID0gdHJ5X3RhYmxlX29wZW4o cnRjLT50YWJsZU9pZCwgbG9ja21vZGUpOwogCQlpZiAocmVsID09IE5VTEwpCiAJCXsKIAkJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpAQCAtMjY0LDcgKzM5OCw3IEBAIEV4ZWNSZXBhY2so UGFyc2VTdGF0ZSAqcHN0YXRlLCBSZXBhY2tTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAK IAkJLyogUHJvY2VzcyB0aGlzIHRhYmxlICovCiAJCWNsdXN0ZXJfcmVsKHN0bXQtPmNvbW1hbmQs IHN0bXQtPnVzaW5naW5kZXgsCi0JCQkJCXJlbCwgcnRjLT5pbmRleE9pZCwgJnBhcmFtcyk7CisJ CQkJCXJlbCwgcnRjLT5pbmRleE9pZCwgJnBhcmFtcywgaXNUb3BMZXZlbCk7CiAJCS8qIGNsdXN0 ZXJfcmVsIGNsb3NlcyB0aGUgcmVsYXRpb24sIGJ1dCBrZWVwcyBsb2NrICovCiAKIAkJUG9wQWN0 aXZlU25hcHNob3QoKTsKQEAgLTI5MywyMiArNDI3LDU1IEBAIEV4ZWNSZXBhY2soUGFyc2VTdGF0 ZSAqcHN0YXRlLCBSZXBhY2tTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAgKiBJZiBpbmRl eE9pZCBpcyBJbnZhbGlkT2lkLCB0aGUgdGFibGUgd2lsbCBiZSByZXdyaXR0ZW4gaW4gcGh5c2lj YWwgb3JkZXIKICAqIGluc3RlYWQgb2YgaW5kZXggb3JkZXIuCiAgKgorICogTm90ZSB0aGF0LCBp biB0aGUgY29uY3VycmVudCBjYXNlLCB0aGUgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGxvY2sgYXQg c29tZQorICogcG9pbnQsIGluIG9yZGVyIHRvIGdldCBBY2Nlc3NFeGNsdXNpdmVMb2NrIGZvciB0 aGUgZmluYWwgc3RlcHMgKGkuZS4gdG8KKyAqIHN3YXAgdGhlIHJlbGF0aW9uIGZpbGVzKS4gVG8g bWFrZSB0aGluZ3Mgc2ltcGxlciwgdGhlIGNhbGxlciBzaG91bGQgZXhwZWN0CisgKiBPbGRIZWFw IHRvIGJlIGNsb3NlZCBvbiByZXR1cm4sIHJlZ2FyZGxlc3MgQ0xVT1BUX0NPTkNVUlJFTlQuIChU aGUKKyAqIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgaXMga2VwdCB0aWxsIHRoZSBlbmQgb2YgdGhlIHRy YW5zYWN0aW9uLikKKyAqCiAgKiAnY21kJyBpbmRpY2F0ZXMgd2hpY2ggY29tbWFuZCBpcyBiZWlu ZyBleGVjdXRlZCwgdG8gYmUgdXNlZCBmb3IgZXJyb3IKICAqIG1lc3NhZ2VzLgogICovCiB2b2lk CiBjbHVzdGVyX3JlbChSZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2luZ2luZGV4LAotCQkJUmVs YXRpb24gT2xkSGVhcCwgT2lkIGluZGV4T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMpCisJCQlS ZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcywKKwkJ CWJvb2wgaXNUb3BMZXZlbCkKIHsKIAlPaWQJCQl0YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQo T2xkSGVhcCk7CisJUmVsYXRpb24JaW5kZXg7CisJTE9DS01PREUJbG1vZGU7CiAJT2lkCQkJc2F2 ZV91c2VyaWQ7CiAJaW50CQkJc2F2ZV9zZWNfY29udGV4dDsKIAlpbnQJCQlzYXZlX25lc3RsZXZl bDsKIAlib29sCQl2ZXJib3NlID0gKChwYXJhbXMtPm9wdGlvbnMgJiBDTFVPUFRfVkVSQk9TRSkg IT0gMCk7CiAJYm9vbAkJcmVjaGVjayA9ICgocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX1JFQ0hF Q0spICE9IDApOwotCVJlbGF0aW9uCWluZGV4OworCWJvb2wJCWNvbmN1cnJlbnQgPSAoKHBhcmFt cy0+b3B0aW9ucyAmIENMVU9QVF9DT05DVVJSRU5UKSAhPSAwKTsKIAotCUFzc2VydChDaGVja1Jl bGF0aW9uTG9ja2VkQnlNZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCBmYWxzZSkpOwor CS8qCisJICogQ2hlY2sgdGhhdCB0aGUgY29ycmVjdCBsb2NrIGlzIGhlbGQuIFRoZSBsb2NrIG1v ZGUgaXMKKwkgKiBBY2Nlc3NFeGNsdXNpdmVMb2NrIGZvciBub3JtYWwgcHJvY2Vzc2luZyBhbmQg U2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrCisJICogZm9yIGNvbmN1cnJlbnQgcHJvY2Vzc2luZyAo c28gdGhhdCBTRUxFQ1QsIElOU0VSVCwgVVBEQVRFIGFuZCBERUxFVEUKKwkgKiBjb21tYW5kcyB3 b3JrLCBidXQgY2x1c3Rlcl9yZWwoKSBjYW5ub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSBmb3Ig dGhlCisJICogc2FtZSByZWxhdGlvbikuCisJICovCisJbG1vZGUgPSAhY29uY3VycmVudCA/IEFj Y2Vzc0V4Y2x1c2l2ZUxvY2sgOiBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2s7CisKKwkvKiBUaGVy ZSBhcmUgc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9uIGNvbmN1cnJlbnQgcHJvY2Vzc2luZy4gKi8K KwlpZiAoY29uY3VycmVudCkKKwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBoYXZlIG5vIFhJ RCBhc3NpZ25lZCwgb3RoZXJ3aXNlIGNhbGwgb2YKKwkJICogc2V0dXBfbG9naWNhbF9kZWNvZGlu ZygpIGNhbiBjYXVzZSBhIGRlYWRsb2NrLgorCQkgKgorCQkgKiBUaGUgZXhpc3RlbmNlIG9mIHRy YW5zYWN0aW9uIGJsb2NrIGFjdHVhbGx5IGRvZXMgbm90IGltcGx5IHRoYXQgWElECisJCSAqIHdh cyBhbHJlYWR5IGFzc2lnbmVkLCBidXQgaXQgdmVyeSBsaWtlbHkgaXMuIFdlIG1pZ2h0IHdhbnQg dG8gY2hlY2sKKwkJICogdGhlIHJlc3VsdCBvZiBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZElmQW55 KCkgaW5zdGVhZCwgYnV0IHRoYXQKKwkJICogd291bGQgYmUgbGVzcyBjbGVhciBmcm9tIHVzZXIn cyBwZXJzcGVjdGl2ZS4KKwkJICovCisJCVByZXZlbnRJblRyYW5zYWN0aW9uQmxvY2soaXNUb3BM ZXZlbCwgIlJFUEFDSyAoQ09OQ1VSUkVOVExZKSIpOworCisJCWNoZWNrX3JlcGFja19jb25jdXJy ZW50bHlfcmVxdWlyZW1lbnRzKE9sZEhlYXApOworCX0KIAogCS8qIENoZWNrIGZvciB1c2VyLXJl cXVlc3RlZCBhYm9ydC4gKi8KIAlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpAQCAtMzUxLDExICs1 MTgsMTMgQEAgY2x1c3Rlcl9yZWwoUmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwK IAkgKiBJZiB0aGlzIGlzIGEgc2luZ2xlLXRyYW5zYWN0aW9uIENMVVNURVIsIHdlIGNhbiBza2lw IHRoZXNlIHRlc3RzLiBXZQogCSAqICptdXN0KiBza2lwIHRoZSBvbmUgb24gaW5kaXNjbHVzdGVy ZWQgc2luY2UgaXQgd291bGQgcmVqZWN0IGFuIGF0dGVtcHQKIAkgKiB0byBjbHVzdGVyIGEgbm90 LXByZXZpb3VzbHktY2x1c3RlcmVkIGluZGV4LgorCSAqCisJICogWFhYIG1vdmUgW3NvbWUgb2Zd IHRoZXNlIGNvbW1lbnRzIHRvIHdoZXJlIHRoZSBSRUNIRUNLIGZsYWcgaXMKKwkgKiBkZXRlcm1p bmVkPwogCSAqLwotCWlmIChyZWNoZWNrKQotCQlpZiAoIWNsdXN0ZXJfcmVsX3JlY2hlY2soY21k LCBPbGRIZWFwLCBpbmRleE9pZCwgc2F2ZV91c2VyaWQsCi0JCQkJCQkJCSBwYXJhbXMtPm9wdGlv bnMpKQotCQkJZ290byBvdXQ7CisJaWYgKHJlY2hlY2sgJiYgIWNsdXN0ZXJfcmVsX3JlY2hlY2so Y21kLCBPbGRIZWFwLCBpbmRleE9pZCwgc2F2ZV91c2VyaWQsCisJCQkJCQkJCQkJbG1vZGUsIHBh cmFtcy0+b3B0aW9ucykpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBXZSBhbGxvdyByZXBhY2tp bmcgc2hhcmVkIGNhdGFsb2dzIG9ubHkgd2hlbiBub3QgdXNpbmcgYW4gaW5kZXguIEl0CkBAIC0z NjksNiArNTM4LDEyIEBAIGNsdXN0ZXJfcmVsKFJlcGFja0NvbW1hbmQgY21kLCBib29sIHVzaW5n aW5kZXgsCiAJCQkJIGVycm1zZygiY2Fubm90IHJ1biBcIiVzXCIgb24gYSBzaGFyZWQgY2F0YWxv ZyIsCiAJCQkJCQlSZXBhY2tDb21tYW5kQXNTdHJpbmcoY21kKSkpKTsKIAorCS8qCisJICogVGhl IENPTkNVUlJFTlRMWSBjYXNlIHNob3VsZCBoYXZlIGJlZW4gcmVqZWN0ZWQgZWFybGllciBiZWNh dXNlIGl0IGRvZXMKKwkgKiBub3Qgc3VwcG9ydCBzeXN0ZW0gY2F0YWxvZ3MuCisJICovCisJQXNz ZXJ0KCEoT2xkSGVhcC0+cmRfcmVsLT5yZWxpc3NoYXJlZCAmJiBjb25jdXJyZW50KSk7CisKIAkv KgogCSAqIERvbid0IHByb2Nlc3MgdGVtcCB0YWJsZXMgb2Ygb3RoZXIgYmFja2VuZHMgLi4uIHRo ZWlyIGxvY2FsIGJ1ZmZlcgogCSAqIG1hbmFnZXIgaXMgbm90IGdvaW5nIHRvIGNvcGUuCkBAIC00 MDQsNyArNTc5LDcgQEAgY2x1c3Rlcl9yZWwoUmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdp bmRleCwKIAlpZiAoT2lkSXNWYWxpZChpbmRleE9pZCkpCiAJewogCQkvKiB2ZXJpZnkgdGhlIGlu ZGV4IGlzIGdvb2QgYW5kIGxvY2sgaXQgKi8KLQkJY2hlY2tfaW5kZXhfaXNfY2x1c3RlcmFibGUo T2xkSGVhcCwgaW5kZXhPaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQljaGVja19pbmRleF9p c19jbHVzdGVyYWJsZShPbGRIZWFwLCBpbmRleE9pZCwgbG1vZGUpOwogCQkvKiBhbHNvIG9wZW4g aXQgKi8KIAkJaW5kZXggPSBpbmRleF9vcGVuKGluZGV4T2lkLCBOb0xvY2spOwogCX0KQEAgLTQy MSw3ICs1OTYsOSBAQCBjbHVzdGVyX3JlbChSZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2luZ2lu ZGV4LAogCWlmIChPbGRIZWFwLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXICYm CiAJCSFSZWxhdGlvbklzUG9wdWxhdGVkKE9sZEhlYXApKQogCXsKLQkJcmVsYXRpb25fY2xvc2Uo T2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCWlmIChpbmRleCkKKwkJCWluZGV4X2Ns b3NlKGluZGV4LCBsbW9kZSk7CisJCXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIGxtb2RlKTsKIAkJ Z290byBvdXQ7CiAJfQogCkBAIC00MzQsMTEgKzYxMSwzNSBAQCBjbHVzdGVyX3JlbChSZXBhY2tD b21tYW5kIGNtZCwgYm9vbCB1c2luZ2luZGV4LAogCSAqIGludmFsaWQsIGJlY2F1c2Ugd2UgbW92 ZSB0dXBsZXMgYXJvdW5kLiAgUHJvbW90ZSB0aGVtIHRvIHJlbGF0aW9uCiAJICogbG9ja3MuICBQ cmVkaWNhdGUgbG9ja3Mgb24gaW5kZXhlcyB3aWxsIGJlIHByb21vdGVkIHdoZW4gdGhleSBhcmUK IAkgKiByZWluZGV4ZWQuCisJICoKKwkgKiBEdXJpbmcgY29uY3VycmVudCBwcm9jZXNzaW5nLCB0 aGUgaGVhcCBhcyB3ZWxsIGFzIGl0cyBpbmRleGVzIHN0YXkgaW4KKwkgKiBvcGVyYXRpb24sIHNv IHdlIHBvc3Rwb25lIHRoaXMgc3RlcCB1bnRpbCB0aGV5IGFyZSBsb2NrZWQgdXNpbmcKKwkgKiBB Y2Nlc3NFeGNsdXNpdmVMb2NrIG5lYXIgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzc2luZy4KIAkgKi8K LQlUcmFuc2ZlclByZWRpY2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oT2xkSGVhcCk7CisJaWYgKCFj b25jdXJyZW50KQorCQlUcmFuc2ZlclByZWRpY2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oT2xkSGVh cCk7CiAKIAkvKiByZWJ1aWxkX3JlbGF0aW9uIGRvZXMgYWxsIHRoZSBkaXJ0eSB3b3JrICovCi0J cmVidWlsZF9yZWxhdGlvbihjbWQsIHVzaW5naW5kZXgsIE9sZEhlYXAsIGluZGV4LCB2ZXJib3Nl KTsKKwlQR19UUlkoKTsKKwl7CisJCS8qCisJCSAqIEZvciBjb25jdXJyZW50IHByb2Nlc3Npbmcs IG1ha2Ugc3VyZSB0aGF0IG91ciBsb2dpY2FsIGRlY29kaW5nCisJCSAqIGlnbm9yZXMgZGF0YSBj aGFuZ2VzIG9mIG90aGVyIHRhYmxlcyB0aGFuIHRoZSBvbmUgd2UgYXJlCisJCSAqIHByb2Nlc3Np bmcuCisJCSAqLworCQlpZiAoY29uY3VycmVudCkKKwkJCWJlZ2luX2NvbmN1cnJlbnRfcmVwYWNr KE9sZEhlYXApOworCisJCXJlYnVpbGRfcmVsYXRpb24oY21kLCB1c2luZ2luZGV4LCBPbGRIZWFw LCBpbmRleCwgc2F2ZV91c2VyaWQsCisJCQkJCQkgdmVyYm9zZSwgY29uY3VycmVudCk7CisJfQor CVBHX0ZJTkFMTFkoKTsKKwl7CisJCWlmIChjb25jdXJyZW50KQorCQkJZW5kX2NvbmN1cnJlbnRf cmVwYWNrKCk7CisJfQorCVBHX0VORF9UUlkoKTsKKwogCS8qIHJlYnVpbGRfcmVsYXRpb24gY2xv c2VzIE9sZEhlYXAsIGFuZCBpbmRleCBpZiB2YWxpZCAqLwogCiBvdXQ6CkBAIC00NTcsMTQgKzY1 OCwxNCBAQCBvdXQ6CiAgKi8KIHN0YXRpYyBib29sCiBjbHVzdGVyX3JlbF9yZWNoZWNrKFJlcGFj a0NvbW1hbmQgY21kLCBSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsCi0JCQkJCU9pZCB1 c2VyaWQsIGludCBvcHRpb25zKQorCQkJCQlPaWQgdXNlcmlkLCBMT0NLTU9ERSBsbW9kZSwgaW50 IG9wdGlvbnMpCiB7CiAJT2lkCQkJdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKE9sZEhlYXAp OwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgdXNlciBzdGlsbCBoYXMgcHJpdmlsZWdlcyBmb3IgdGhl IHJlbGF0aW9uICovCiAJaWYgKCFjbHVzdGVyX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24oY21k LCB0YWJsZU9pZCwgdXNlcmlkKSkKIAl7Ci0JCXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOworCQlyZWxhdGlvbl9jbG9zZShPbGRIZWFwLCBsbW9kZSk7CiAJCXJl dHVybiBmYWxzZTsKIAl9CiAKQEAgLTQ3OCw3ICs2NzksNyBAQCBjbHVzdGVyX3JlbF9yZWNoZWNr KFJlcGFja0NvbW1hbmQgY21kLCBSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsCiAJICov CiAJaWYgKFJFTEFUSU9OX0lTX09USEVSX1RFTVAoT2xkSGVhcCkpCiAJewotCQlyZWxhdGlvbl9j bG9zZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJcmVsYXRpb25fY2xvc2UoT2xk SGVhcCwgbG1vZGUpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC00ODksNyArNjkwLDcgQEAg Y2x1c3Rlcl9yZWxfcmVjaGVjayhSZXBhY2tDb21tYW5kIGNtZCwgUmVsYXRpb24gT2xkSGVhcCwg T2lkIGluZGV4T2lkLAogCQkgKi8KIAkJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lE LCBPYmplY3RJZEdldERhdHVtKGluZGV4T2lkKSkpCiAJCXsKLQkJCXJlbGF0aW9uX2Nsb3NlKE9s ZEhlYXAsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJcmVsYXRpb25fY2xvc2UoT2xkSGVhcCwg bG1vZGUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTUwMCw3ICs3MDEsNyBAQCBjbHVz dGVyX3JlbF9yZWNoZWNrKFJlcGFja0NvbW1hbmQgY21kLCBSZWxhdGlvbiBPbGRIZWFwLCBPaWQg aW5kZXhPaWQsCiAJCWlmICgob3B0aW9ucyAmIENMVU9QVF9SRUNIRUNLX0lTQ0xVU1RFUkVEKSAh PSAwICYmCiAJCQkhZ2V0X2luZGV4X2lzY2x1c3RlcmVkKGluZGV4T2lkKSkKIAkJewotCQkJcmVs YXRpb25fY2xvc2UoT2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQlyZWxhdGlvbl9j bG9zZShPbGRIZWFwLCBsbW9kZSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CkBAIC02NDEs MTkgKzg0Miw4OSBAQCBtYXJrX2luZGV4X2NsdXN0ZXJlZChSZWxhdGlvbiByZWwsIE9pZCBpbmRl eE9pZCwgYm9vbCBpc19pbnRlcm5hbCkKIAl0YWJsZV9jbG9zZShwZ19pbmRleCwgUm93RXhjbHVz aXZlTG9jayk7CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgQ09OQ1VSUkVOVExZIG9wdGlvbiBp cyBsZWdhbCBmb3IgdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfcmVwYWNr X2NvbmN1cnJlbnRseV9yZXF1aXJlbWVudHMoUmVsYXRpb24gcmVsKQoreworCWNoYXIJCXJlbHBl cnNpc3RlbmNlLAorCQkJCXJlcGxpZGVudDsKKwlPaWQJCQlpZGVudF9pZHg7CisKKwkvKiBEYXRh IGNoYW5nZXMgaW4gc3lzdGVtIHJlbGF0aW9ucyBhcmUgbm90IGxvZ2ljYWxseSBkZWNvZGVkLiAq LworCWlmIChJc0NhdGFsb2dSZWxhdGlvbihyZWwpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5u b3QgcmVwYWNrIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKSwKKwkJCQkgZXJyaGludCgiUkVQQUNLIENPTkNVUlJFTlRMWSBpcyBub3Qgc3VwcG9y dGVkIGZvciBjYXRhbG9nIHJlbGF0aW9ucy4iKSkpOworCisJLyoKKwkgKiByZW9yZGVyYnVmZmVy LmMgZG9lcyBub3Qgc2VlbSB0byBoYW5kbGUgcHJvY2Vzc2luZyBvZiBUT0FTVCByZWxhdGlvbgor CSAqIGFsb25lLgorCSAqLworCWlmIChJc1RvYXN0UmVsYXRpb24ocmVsKSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJ IGVycm1zZygiY2Fubm90IHJlcGFjayByZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkJUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJIGVycmhpbnQoIlJFUEFDSyBDT05DVVJSRU5UTFkg aXMgbm90IHN1cHBvcnRlZCBmb3IgVE9BU1QgcmVsYXRpb25zLCB1bmxlc3MgdGhlIG1haW4gcmVs YXRpb24gaXMgcmVwYWNrZWQgdG9vLiIpKSk7CisKKwlyZWxwZXJzaXN0ZW5jZSA9IHJlbC0+cmRf cmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwlpZiAocmVscGVyc2lzdGVuY2UgIT0gUkVMUEVSU0lTVEVO Q0VfUEVSTUFORU5UKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCByZXBh Y2sgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp LAorCQkJCSBlcnJoaW50KCJSRVBBQ0sgQ09OQ1VSUkVOVExZIGlzIG9ubHkgYWxsb3dlZCBmb3Ig cGVybWFuZW50IHJlbGF0aW9ucy4iKSkpOworCisJLyogV2l0aCBOT1RISU5HLCBXQUwgZG9lcyBu b3QgY29udGFpbiB0aGUgb2xkIHR1cGxlLiAqLworCXJlcGxpZGVudCA9IHJlbC0+cmRfcmVsLT5y ZWxyZXBsaWRlbnQ7CisJaWYgKHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkcp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygiY2Fubm90IHJlcGFjayByZWxhdGlvbiBc IiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJIGVycmhp bnQoIlJlbGF0aW9uIFwiJXNcIiBoYXMgaW5zdWZmaWNpZW50IHJlcGxpY2F0aW9uIGlkZW50aXR5 LiIsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKworCS8qCisJICog SWRlbnRpdHkgaW5kZXggaXMgbm90IHNldCBpZiB0aGUgcmVwbGljYSBpZGVudGl0eSBpcyBGVUxM LCBidXQgUEsgbWlnaHQKKwkgKiBleGlzdCBpbiBzdWNoIGEgY2FzZS4KKwkgKi8KKwlpZGVudF9p ZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChyZWwpOworCWlmICghT2lkSXNWYWxpZChpZGVu dF9pZHgpICYmIE9pZElzVmFsaWQocmVsLT5yZF9wa2luZGV4KSkKKwkJaWRlbnRfaWR4ID0gcmVs LT5yZF9wa2luZGV4OworCWlmICghT2lkSXNWYWxpZChpZGVudF9pZHgpKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCSBlcnJtc2coImNhbm5vdCBwcm9jZXNzIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkgKGVycmhpbnQoIlJlbGF0aW9u IFwiJXNcIiBoYXMgbm8gaWRlbnRpdHkgaW5kZXguIiwKKwkJCQkJCSAgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSkpKSk7Cit9CisKKwogLyoKICAqIHJlYnVpbGRfcmVsYXRpb246IHJlYnVp bGQgYW4gZXhpc3RpbmcgcmVsYXRpb24gaW4gaW5kZXggb3IgcGh5c2ljYWwgb3JkZXIKICAqCi0g KiBPbGRIZWFwOiB0YWJsZSB0byByZWJ1aWxkLgorICogT2xkSGVhcDogdGFibGUgdG8gcmVidWls ZC4gIFNlZSBjbHVzdGVyX3JlbCgpIGZvciBjb21tZW50cyBvbiB0aGUgcmVxdWlyZWQKKyAqIGxv Y2sgc3RyZW5ndGguCisgKgogICogaW5kZXg6IGluZGV4IHRvIGNsdXN0ZXIgYnksIG9yIE5VTEwg dG8gcmV3cml0ZSBpbiBwaHlzaWNhbCBvcmRlci4KICAqCi0gKiBPbiBlbnRyeSwgaGVhcCBhbmQg aW5kZXggKGlmIG9uZSBpcyBnaXZlbikgbXVzdCBiZSBvcGVuLCBhbmQKLSAqIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2sgaGVsZCBvbiB0aGVtLgotICogT24gZXhpdCwgdGhleSBhcmUgY2xvc2VkLCBidXQg bG9ja3Mgb24gdGhlbSBhcmUgbm90IHJlbGVhc2VkLgorICogT24gZW50cnksIGhlYXAgYW5kIGlu ZGV4IChpZiBvbmUgaXMgZ2l2ZW4pIG11c3QgYmUgb3BlbiwgYW5kIHRoZQorICogYXBwcm9wcmlh dGUgbG9jayBoZWxkIG9uIHRoZW0gLS0gQWNjZXNzRXhjbHVzaXZlTG9jayBmb3IgZXhjbHVzaXZl CisgKiBwcm9jZXNzaW5nIGFuZCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgZm9yIGNvbmN1cnJl bnQgcHJvY2Vzc2luZy4KKyAqCisgKiBPbiBleGl0LCB0aGV5IGFyZSBjbG9zZWQsIGJ1dCBzdGls bCBsb2NrZWQgd2l0aCBBY2Nlc3NFeGNsdXNpdmVMb2NrLiAgKFRoZQorICogZnVuY3Rpb24gaGFu ZGxlcyB0aGUgbG9jayB1cGdyYWRlIGlmICdjb25jdXJyZW50JyBpcyB0cnVlLikKICAqLwogc3Rh dGljIHZvaWQKIHJlYnVpbGRfcmVsYXRpb24oUmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdp bmRleCwKLQkJCQkgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gaW5kZXgsIGJvb2wgdmVyYm9z ZSkKKwkJCQkgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gaW5kZXgsIE9pZCB1c2VyaWQsCisJ CQkJIGJvb2wgdmVyYm9zZSwgYm9vbCBjb25jdXJyZW50KQogewogCU9pZAkJCXRhYmxlT2lkID0g UmVsYXRpb25HZXRSZWxpZChPbGRIZWFwKTsKIAlPaWQJCQlhY2Nlc3NNZXRob2QgPSBPbGRIZWFw LT5yZF9yZWwtPnJlbGFtOwpAQCAtNjYxLDEzICs5MzIsNTUgQEAgcmVidWlsZF9yZWxhdGlvbihS ZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2luZ2luZGV4LAogCU9pZAkJCU9JRE5ld0hlYXA7CiAJ UmVsYXRpb24JTmV3SGVhcDsKIAljaGFyCQlyZWxwZXJzaXN0ZW5jZTsKLQlib29sCQlpc19zeXN0 ZW1fY2F0YWxvZzsKIAlib29sCQlzd2FwX3RvYXN0X2J5X2NvbnRlbnQ7CiAJVHJhbnNhY3Rpb25J ZCBmcm96ZW5YaWQ7CiAJTXVsdGlYYWN0SWQgY3V0b2ZmTXVsdGk7CisJTmFtZURhdGEJc2xvdG5h bWU7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gTlVMTDsKKwlTbmFwc2hvdAlzbmFw c2hvdCA9IE5VTEw7CisjaWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUxPQ0tNT0RFCWxtb2RlOwog Ci0JQXNzZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKE9sZEhlYXAsIEFjY2Vzc0V4Y2x1c2l2 ZUxvY2ssIGZhbHNlKSAmJgotCQkgICAoaW5kZXggPT0gTlVMTCB8fCBDaGVja1JlbGF0aW9uTG9j a2VkQnlNZShpbmRleCwgQWNjZXNzRXhjbHVzaXZlTG9jaywgZmFsc2UpKSk7CisJbG1vZGUgPSBj b25jdXJyZW50ID8gU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrIDogQWNjZXNzRXhjbHVzaXZlTG9j azsKKworCUFzc2VydChDaGVja1JlbGF0aW9uTG9ja2VkQnlNZShPbGRIZWFwLCBsbW9kZSwgZmFs c2UpKTsKKwlBc3NlcnQoIXVzaW5naW5kZXggfHwgQ2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUoaW5k ZXgsIGxtb2RlLCBmYWxzZSkpOworI2VuZGlmCisKKwlpZiAoY29uY3VycmVudCkKKwl7CisJCVR1 cGxlRGVzYwl0dXBkZXNjOworCisJCS8qCisJCSAqIFJFUEFDSyBDT05DVVJSRU5UTFkgaXMgbm90 IGFsbG93ZWQgaW4gYSB0cmFuc2FjdGlvbiBibG9jaywgc28gdGhpcworCQkgKiBzaG91bGQgbmV2 ZXIgZmlyZS4KKwkJICovCisJCUFzc2VydChHZXRUb3BUcmFuc2FjdGlvbklkSWZBbnkoKSA9PSBJ bnZhbGlkVHJhbnNhY3Rpb25JZCk7CisKKwkJLyoKKwkJICogQSBzaW5nbGUgYmFja2VuZCBzaG91 bGQgbm90IGV4ZWN1dGUgbXVsdGlwbGUgUkVQQUNLIGNvbW1hbmRzIGF0IGEKKwkJICogdGltZSwg c28gdXNlIFBJRCB0byBtYWtlIHRoZSBzbG90IHVuaXF1ZS4KKwkJICovCisJCXNucHJpbnRmKE5h bWVTdHIoc2xvdG5hbWUpLCBOQU1FREFUQUxFTiwgInJlcGFja18lZCIsIE15UHJvY1BpZCk7CisK KwkJdHVwZGVzYyA9IENyZWF0ZVR1cGxlRGVzY0NvcHkoUmVsYXRpb25HZXREZXNjcihPbGRIZWFw KSk7CisKKwkJLyoKKwkJICogUHJlcGFyZSB0byBjYXB0dXJlIHRoZSBjb25jdXJyZW50IGRhdGEg Y2hhbmdlcy4KKwkJICoKKwkJICogTm90ZSB0aGF0IHRoaXMgY2FsbCB3YWl0cyBmb3IgYWxsIHRy YW5zYWN0aW9ucyB3aXRoIFhJRCBhbHJlYWR5CisJCSAqIGFzc2lnbmVkIHRvIGZpbmlzaC4gSWYg c29tZSBvZiB0aG9zZSB0cmFuc2FjdGlvbnMgaXMgd2FpdGluZyBmb3IgYQorCQkgKiBsb2NrIGNv bmZsaWN0aW5nIHdpdGggU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrIG9uIG91ciB0YWJsZSAoZS5n LgorCQkgKiBpdCBydW5zIENSRUFURSBJTkRFWCksIHdlIGNhbiBlbmQgdXAgaW4gYSBkZWFkbG9j ay4gTm90IHN1cmUgdGhpcworCQkgKiByaXNrIGlzIHdvcnRoIHVubG9ja2luZy9sb2NraW5nIHRo ZSB0YWJsZSAoYW5kIGl0cyBjbHVzdGVyaW5nCisJCSAqIGluZGV4KSBhbmQgY2hlY2tpbmcgYWdh aW4gaWYgaXRzIHN0aWxsIGVsaWdpYmxlIGZvciBSRVBBQ0sKKwkJICogQ09OQ1VSUkVOVExZLgor CQkgKi8KKwkJY3R4ID0gc2V0dXBfbG9naWNhbF9kZWNvZGluZyh0YWJsZU9pZCwgTmFtZVN0cihz bG90bmFtZSksIHR1cGRlc2MpOworCisJCXNuYXBzaG90ID0gU25hcEJ1aWxkSW5pdGlhbFNuYXBz aG90Rm9yUmVwYWNrKGN0eC0+c25hcHNob3RfYnVpbGRlcik7CisJCVB1c2hBY3RpdmVTbmFwc2hv dChzbmFwc2hvdCk7CisJfQogCiAJLyogZm9yIENMVVNURVIgb3IgUkVQQUNLIFVTSU5HIElOREVY LCBtYXJrIHRoZSBpbmRleCBhcyB0aGUgb25lIHRvIHVzZSAqLwogCWlmICh1c2luZ2luZGV4KQpA QCAtNjc1LDcgKzk4OCw2IEBAIHJlYnVpbGRfcmVsYXRpb24oUmVwYWNrQ29tbWFuZCBjbWQsIGJv b2wgdXNpbmdpbmRleCwKIAogCS8qIFJlbWVtYmVyIGluZm8gYWJvdXQgcmVsIGJlZm9yZSBjbG9z aW5nIE9sZEhlYXAgKi8KIAlyZWxwZXJzaXN0ZW5jZSA9IE9sZEhlYXAtPnJkX3JlbC0+cmVscGVy c2lzdGVuY2U7Ci0JaXNfc3lzdGVtX2NhdGFsb2cgPSBJc1N5c3RlbVJlbGF0aW9uKE9sZEhlYXAp OwogCiAJLyoKIAkgKiBDcmVhdGUgdGhlIHRyYW5zaWVudCB0YWJsZSB0aGF0IHdpbGwgcmVjZWl2 ZSB0aGUgcmUtb3JkZXJlZCBkYXRhLgpAQCAtNjkxLDMwICsxMDAzLDY3IEBAIHJlYnVpbGRfcmVs YXRpb24oUmVwYWNrQ29tbWFuZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwKIAlOZXdIZWFwID0gdGFi bGVfb3BlbihPSUROZXdIZWFwLCBOb0xvY2spOwogCiAJLyogQ29weSB0aGUgaGVhcCBkYXRhIGlu dG8gdGhlIG5ldyB0YWJsZSBpbiB0aGUgZGVzaXJlZCBvcmRlciAqLwotCWNvcHlfdGFibGVfZGF0 YShOZXdIZWFwLCBPbGRIZWFwLCBpbmRleCwgdmVyYm9zZSwKKwljb3B5X3RhYmxlX2RhdGEoTmV3 SGVhcCwgT2xkSGVhcCwgaW5kZXgsIHNuYXBzaG90LCBjdHgsIHZlcmJvc2UsCiAJCQkJCSZzd2Fw X3RvYXN0X2J5X2NvbnRlbnQsICZmcm96ZW5YaWQsICZjdXRvZmZNdWx0aSk7CiAKKwkvKiBUaGUg aGlzdG9yaWMgc25hcHNob3Qgd29uJ3QgYmUgbmVlZGVkIGFueW1vcmUuICovCisJaWYgKHNuYXBz aG90KQorCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCi0JLyogQ2xvc2UgcmVsY2FjaGUgZW50cmll cywgYnV0IGtlZXAgbG9jayB1bnRpbCB0cmFuc2FjdGlvbiBjb21taXQgKi8KLQl0YWJsZV9jbG9z ZShPbGRIZWFwLCBOb0xvY2spOwotCWlmIChpbmRleCkKLQkJaW5kZXhfY2xvc2UoaW5kZXgsIE5v TG9jayk7Ci0KLQkvKgotCSAqIENsb3NlIHRoZSBuZXcgcmVsYXRpb24gc28gaXQgY2FuIGJlIGRy b3BwZWQgYXMgc29vbiBhcyB0aGUgc3RvcmFnZSBpcwotCSAqIHN3YXBwZWQuIFRoZSByZWxhdGlv biBpcyBub3QgdmlzaWJsZSB0byBvdGhlcnMsIHNvIG5vIG5lZWQgdG8gdW5sb2NrIGl0Ci0JICog ZXhwbGljaXRseS4KLQkgKi8KLQl0YWJsZV9jbG9zZShOZXdIZWFwLCBOb0xvY2spOwotCi0JLyoK LQkgKiBTd2FwIHRoZSBwaHlzaWNhbCBmaWxlcyBvZiB0aGUgdGFyZ2V0IGFuZCB0cmFuc2llbnQg dGFibGVzLCB0aGVuCi0JICogcmVidWlsZCB0aGUgdGFyZ2V0J3MgaW5kZXhlcyBhbmQgdGhyb3cg YXdheSB0aGUgdHJhbnNpZW50IHRhYmxlLgotCSAqLwotCWZpbmlzaF9oZWFwX3N3YXAodGFibGVP aWQsIE9JRE5ld0hlYXAsIGlzX3N5c3RlbV9jYXRhbG9nLAotCQkJCQkgc3dhcF90b2FzdF9ieV9j b250ZW50LCBmYWxzZSwgdHJ1ZSwKLQkJCQkJIGZyb3plblhpZCwgY3V0b2ZmTXVsdGksCi0JCQkJ CSByZWxwZXJzaXN0ZW5jZSk7CisJaWYgKGNvbmN1cnJlbnQpCisJeworCQkvKgorCQkgKiBQdXNo IGEgc25hcHNob3QgdGhhdCB3ZSB3aWxsIHVzZSB0byBmaW5kIG9sZCB2ZXJzaW9ucyBvZiByb3dz IHdoZW4KKwkJICogcHJvY2Vzc2luZyBjb25jdXJyZW50IFVQREFURSBhbmQgREVMRVRFIGNvbW1h bmRzLiAoVGhhdCBzbmFwc2hvdAorCQkgKiBzaG91bGQgYWxzbyBiZSB1c2VkIGJ5IGluZGV4IGV4 cHJlc3Npb25zLikKKwkJICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBjYW4gZmluZCB0aGUgdHVwbGVz IGp1c3QgaW5zZXJ0ZWQgd2hlbiBhcHBseWluZyBETUwKKwkJICogY29tbWFuZHMgb24gdG9wIG9m IHRob3NlLgorCQkgKi8KKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKwkJVXBkYXRlQWN0 aXZlU25hcHNob3RDb21tYW5kSWQoKTsKKworCQlyZWJ1aWxkX3JlbGF0aW9uX2ZpbmlzaF9jb25j dXJyZW50KE5ld0hlYXAsIE9sZEhlYXAsIGluZGV4LAorCQkJCQkJCQkJCSAgIGN0eCwgc3dhcF90 b2FzdF9ieV9jb250ZW50LAorCQkJCQkJCQkJCSAgIGZyb3plblhpZCwgY3V0b2ZmTXVsdGkpOwor CQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJCQkJCQkJIFBST0dSRVNTX1JFUEFDS19QSEFTRV9G SU5BTF9DTEVBTlVQKTsKKworCQkvKiBEb25lIHdpdGggZGVjb2RpbmcuICovCisJCWNsZWFudXBf bG9naWNhbF9kZWNvZGluZyhjdHgpOworCQlSZXBsaWNhdGlvblNsb3RSZWxlYXNlKCk7CisJCVJl cGxpY2F0aW9uU2xvdERyb3AoTmFtZVN0cihzbG90bmFtZSksIGZhbHNlKTsKKwl9CisJZWxzZQor CXsKKwkJYm9vbAkJaXNfc3lzdGVtX2NhdGFsb2cgPSBJc1N5c3RlbVJlbGF0aW9uKE9sZEhlYXAp OworCisJCS8qIENsb3NlIHJlbGNhY2hlIGVudHJpZXMsIGJ1dCBrZWVwIGxvY2sgdW50aWwgdHJh bnNhY3Rpb24gY29tbWl0ICovCisJCXRhYmxlX2Nsb3NlKE9sZEhlYXAsIE5vTG9jayk7CisJCWlm IChpbmRleCkKKwkJCWluZGV4X2Nsb3NlKGluZGV4LCBOb0xvY2spOworCisJCS8qCisJCSAqIENs b3NlIHRoZSBuZXcgcmVsYXRpb24gc28gaXQgY2FuIGJlIGRyb3BwZWQgYXMgc29vbiBhcyB0aGUg c3RvcmFnZQorCQkgKiBpcyBzd2FwcGVkLiBUaGUgcmVsYXRpb24gaXMgbm90IHZpc2libGUgdG8g b3RoZXJzLCBzbyBubyBuZWVkIHRvCisJCSAqIHVubG9jayBpdCBleHBsaWNpdGx5LgorCQkgKi8K KwkJdGFibGVfY2xvc2UoTmV3SGVhcCwgTm9Mb2NrKTsKKworCQkvKgorCQkgKiBTd2FwIHRoZSBw aHlzaWNhbCBmaWxlcyBvZiB0aGUgdGFyZ2V0IGFuZCB0cmFuc2llbnQgdGFibGVzLCB0aGVuCisJ CSAqIHJlYnVpbGQgdGhlIHRhcmdldCdzIGluZGV4ZXMgYW5kIHRocm93IGF3YXkgdGhlIHRyYW5z aWVudCB0YWJsZS4KKwkJICovCisJCWZpbmlzaF9oZWFwX3N3YXAodGFibGVPaWQsIE9JRE5ld0hl YXAsIGlzX3N5c3RlbV9jYXRhbG9nLAorCQkJCQkJIHN3YXBfdG9hc3RfYnlfY29udGVudCwgZmFs c2UsIHRydWUsIHRydWUsCisJCQkJCQkgZnJvemVuWGlkLCBjdXRvZmZNdWx0aSwKKwkJCQkJCSBy ZWxwZXJzaXN0ZW5jZSk7CisJfQogfQogCiAKQEAgLTg0OSwxNSArMTE5OCwxOSBAQCBtYWtlX25l d19oZWFwKE9pZCBPSURPbGRIZWFwLCBPaWQgTmV3VGFibGVTcGFjZSwgT2lkIE5ld0FjY2Vzc01l dGhvZCwKIC8qCiAgKiBEbyB0aGUgcGh5c2ljYWwgY29weWluZyBvZiB0YWJsZSBkYXRhLgogICoK KyAqICdzbmFwc2hvdCcgYW5kICdkZWNvZGluZ19jdHgnOiBzZWUgdGFibGVfcmVsYXRpb25fY29w eV9mb3JfY2x1c3RlcigpLiBQYXNzCisgKiBpZmYgY29uY3VycmVudCBwcm9jZXNzaW5nIGlzIHJl cXVpcmVkLgorICoKICAqIFRoZXJlIGFyZSB0aHJlZSBvdXRwdXQgcGFyYW1ldGVyczoKICAqICpw U3dhcFRvYXN0QnlDb250ZW50IGlzIHNldCB0cnVlIGlmIHRvYXN0IHRhYmxlcyBtdXN0IGJlIHN3 YXBwZWQgYnkgY29udGVudC4KICAqICpwRnJlZXplWGlkIHJlY2VpdmVzIHRoZSBUcmFuc2FjdGlv bklkIHVzZWQgYXMgZnJlZXplIGN1dG9mZiBwb2ludC4KICAqICpwQ3V0b2ZmTXVsdGkgcmVjZWl2 ZXMgdGhlIE11bHRpWGFjdElkIHVzZWQgYXMgYSBjdXRvZmYgcG9pbnQuCiAgKi8KIHN0YXRpYyB2 b2lkCi1jb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xkSGVhcCwg UmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdmVyYm9zZSwKLQkJCQlib29sICpwU3dhcFRvYXN0QnlD b250ZW50LCBUcmFuc2FjdGlvbklkICpwRnJlZXplWGlkLAotCQkJCU11bHRpWGFjdElkICpwQ3V0 b2ZmTXVsdGkpCitjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xk SGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsCisJCQkJU25hcHNob3Qgc25hcHNob3QsIExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmRlY29kaW5nX2N0eCwKKwkJCQlib29sIHZlcmJvc2UsIGJvb2wgKnBT d2FwVG9hc3RCeUNvbnRlbnQsCisJCQkJVHJhbnNhY3Rpb25JZCAqcEZyZWV6ZVhpZCwgTXVsdGlY YWN0SWQgKnBDdXRvZmZNdWx0aSkKIHsKIAlSZWxhdGlvbglyZWxSZWxhdGlvbjsKIAlIZWFwVHVw bGUJcmVsdHVwOwpAQCAtODc1LDYgKzEyMjgsOCBAQCBjb3B5X3RhYmxlX2RhdGEoUmVsYXRpb24g TmV3SGVhcCwgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wgdmVyYgog CVBHUlVzYWdlCXJ1MDsKIAljaGFyCSAgICpuc3BuYW1lOwogCisJYm9vbAkJY29uY3VycmVudCA9 IHNuYXBzaG90ICE9IE5VTEw7CisKIAlwZ19ydXNhZ2VfaW5pdCgmcnUwKTsKIAogCS8qIFN0b3Jl IGEgY29weSBvZiB0aGUgbmFtZXNwYWNlIG5hbWUgZm9yIGxvZ2dpbmcgcHVycG9zZXMgKi8KQEAg LTk3Nyw4ICsxMzMyLDQ4IEBAIGNvcHlfdGFibGVfZGF0YShSZWxhdGlvbiBOZXdIZWFwLCBSZWxh dGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBPbGRJbmRleCwgYm9vbCB2ZXJiCiAJICogcHJvdmlkZWQs IGVsc2UgcGxhaW4gc2Vxc2Nhbi4KIAkgKi8KIAlpZiAoT2xkSW5kZXggIT0gTlVMTCAmJiBPbGRJ bmRleC0+cmRfcmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQpCisJeworCQlSZXNvdXJjZU93bmVy IG9sZG93bmVyID0gTlVMTDsKKwkJUmVzb3VyY2VPd25lciByZXNvd25lciA9IE5VTEw7CisKKwkJ LyoKKwkJICogSW4gdGhlIENPTkNVUlJFTlQgY2FzZSwgdXNlIGEgZGVkaWNhdGVkIHJlc291cmNl IG93bmVyIHNvIHdlIGRvbid0CisJCSAqIGxlYXZlIGFueSBhZGRpdGlvbmFsIGxvY2tzIGJlaGlu ZCB1cyB0aGF0IHdlIGNhbm5vdCByZWxlYXNlIGVhc2lseS4KKwkJICovCisJCWlmIChjb25jdXJy ZW50KQorCQl7CisJCQlBc3NlcnQoQ2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUoT2xkSGVhcCwgU2hh cmVVcGRhdGVFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJCSAgIGZhbHNlKSk7CisJCQlBc3NlcnQo Q2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUoT2xkSW5kZXgsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j aywKKwkJCQkJCQkJCQkgICBmYWxzZSkpOworCisJCQlyZXNvd25lciA9IFJlc291cmNlT3duZXJD cmVhdGUoQ3VycmVudFJlc291cmNlT3duZXIsCisJCQkJCQkJCQkJICAgInBsYW5fY2x1c3Rlcl91 c2Vfc29ydCIpOworCQkJb2xkb3duZXIgPSBDdXJyZW50UmVzb3VyY2VPd25lcjsKKwkJCUN1cnJl bnRSZXNvdXJjZU93bmVyID0gcmVzb3duZXI7CisJCX0KKwogCQl1c2Vfc29ydCA9IHBsYW5fY2x1 c3Rlcl91c2Vfc29ydChSZWxhdGlvbkdldFJlbGlkKE9sZEhlYXApLAogCQkJCQkJCQkJCSBSZWxh dGlvbkdldFJlbGlkKE9sZEluZGV4KSk7CisKKwkJaWYgKGNvbmN1cnJlbnQpCisJCXsKKwkJCUN1 cnJlbnRSZXNvdXJjZU93bmVyID0gb2xkb3duZXI7CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgcHJp bWFyaWx5IGNvbmNlcm5lZCBhYm91dCBsb2NrcywgYnV0IGlmIHRoZSBwbGFubmVyCisJCQkgKiBo YXBwZW5lZCB0byBhbGxvY2F0ZSBhbnkgb3RoZXIgcmVzb3VyY2VzLCB3ZSBzaG91bGQgcmVsZWFz ZQorCQkJICogdGhlbSB0b28gYmVjYXVzZSB3ZSdyZSBnb2luZyB0byBkZWxldGUgdGhlIHdob2xl IHJlc293bmVyLgorCQkJICovCisJCQlSZXNvdXJjZU93bmVyUmVsZWFzZShyZXNvd25lciwgUkVT T1VSQ0VfUkVMRUFTRV9CRUZPUkVfTE9DS1MsCisJCQkJCQkJCSBmYWxzZSwgZmFsc2UpOworCQkJ UmVzb3VyY2VPd25lclJlbGVhc2UocmVzb3duZXIsIFJFU09VUkNFX1JFTEVBU0VfTE9DS1MsCisJ CQkJCQkJCSBmYWxzZSwgZmFsc2UpOworCQkJUmVzb3VyY2VPd25lclJlbGVhc2UocmVzb3duZXIs IFJFU09VUkNFX1JFTEVBU0VfQUZURVJfTE9DS1MsCisJCQkJCQkJCSBmYWxzZSwgZmFsc2UpOwor CQkJUmVzb3VyY2VPd25lckRlbGV0ZShyZXNvd25lcik7CisJCX0KKwl9CiAJZWxzZQogCQl1c2Vf c29ydCA9IGZhbHNlOwogCkBAIC0xMDA3LDcgKzE0MDIsOSBAQCBjb3B5X3RhYmxlX2RhdGEoUmVs YXRpb24gTmV3SGVhcCwgUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gT2xkSW5kZXgsIGJvb2wg dmVyYgogCSAqIHZhbHVlcyAoZS5nLiBiZWNhdXNlIHRoZSBBTSBkb2Vzbid0IHVzZSBmcmVlemlu ZykuCiAJICovCiAJdGFibGVfcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihPbGRIZWFwLCBOZXdI ZWFwLCBPbGRJbmRleCwgdXNlX3NvcnQsCi0JCQkJCQkJCQljdXRvZmZzLk9sZGVzdFhtaW4sICZj dXRvZmZzLkZyZWV6ZUxpbWl0LAorCQkJCQkJCQkJY3V0b2Zmcy5PbGRlc3RYbWluLCBzbmFwc2hv dCwKKwkJCQkJCQkJCWRlY29kaW5nX2N0eCwKKwkJCQkJCQkJCSZjdXRvZmZzLkZyZWV6ZUxpbWl0 LAogCQkJCQkJCQkJJmN1dG9mZnMuTXVsdGlYYWN0Q3V0b2ZmLAogCQkJCQkJCQkJJm51bV90dXBs ZXMsICZ0dXBzX3ZhY3V1bWVkLAogCQkJCQkJCQkJJnR1cHNfcmVjZW50bHlfZGVhZCk7CkBAIC0x MDE2LDcgKzE0MTMsMTEgQEAgY29weV90YWJsZV9kYXRhKFJlbGF0aW9uIE5ld0hlYXAsIFJlbGF0 aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE9sZEluZGV4LCBib29sIHZlcmIKIAkqcEZyZWV6ZVhpZCA9 IGN1dG9mZnMuRnJlZXplTGltaXQ7CiAJKnBDdXRvZmZNdWx0aSA9IGN1dG9mZnMuTXVsdGlYYWN0 Q3V0b2ZmOwogCi0JLyogUmVzZXQgcmRfdG9hc3RvaWQganVzdCB0byBiZSB0aWR5IC0tLSBpdCBz aG91bGRuJ3QgYmUgbG9va2VkIGF0IGFnYWluICovCisJLyoKKwkgKiBSZXNldCByZF90b2FzdG9p ZCBqdXN0IHRvIGJlIHRpZHkgLS0tIGl0IHNob3VsZG4ndCBiZSBsb29rZWQgYXQgYWdhaW4uCisJ ICogSW4gdGhlIENPTkNVUlJFTlRMWSBjYXNlLCB3ZSBuZWVkIHRvIHNldCBpdCBhZ2FpbiBiZWZv cmUgYXBwbHlpbmcgdGhlCisJICogY29uY3VycmVudCBjaGFuZ2VzLgorCSAqLwogCU5ld0hlYXAt PnJkX3RvYXN0b2lkID0gSW52YWxpZE9pZDsKIAogCW51bV9wYWdlcyA9IFJlbGF0aW9uR2V0TnVt YmVyT2ZCbG9ja3MoTmV3SGVhcCk7CkBAIC0xNDc0LDE0ICsxODc1LDEzIEBAIGZpbmlzaF9oZWFw X3N3YXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBPSUROZXdIZWFwLAogCQkJCSBib29sIHN3YXBfdG9h c3RfYnlfY29udGVudCwKIAkJCQkgYm9vbCBjaGVja19jb25zdHJhaW50cywKIAkJCQkgYm9vbCBp c19pbnRlcm5hbCwKKwkJCQkgYm9vbCByZWluZGV4LAogCQkJCSBUcmFuc2FjdGlvbklkIGZyb3pl blhpZCwKIAkJCQkgTXVsdGlYYWN0SWQgY3V0b2ZmTXVsdGksCiAJCQkJIGNoYXIgbmV3cmVscGVy c2lzdGVuY2UpCiB7CiAJT2JqZWN0QWRkcmVzcyBvYmplY3Q7CiAJT2lkCQkJbWFwcGVkX3RhYmxl c1s0XTsKLQlpbnQJCQlyZWluZGV4X2ZsYWdzOwotCVJlaW5kZXhQYXJhbXMgcmVpbmRleF9wYXJh bXMgPSB7MH07CiAJaW50CQkJaTsKIAogCS8qIFJlcG9ydCB0aGF0IHdlIGFyZSBub3cgc3dhcHBp bmcgcmVsYXRpb24gZmlsZXMgKi8KQEAgLTE1MDcsMzkgKzE5MDcsNDcgQEAgZmluaXNoX2hlYXBf c3dhcChPaWQgT0lET2xkSGVhcCwgT2lkIE9JRE5ld0hlYXAsCiAJaWYgKGlzX3N5c3RlbV9jYXRh bG9nKQogCQlDYWNoZUludmFsaWRhdGVDYXRhbG9nKE9JRE9sZEhlYXApOwogCi0JLyoKLQkgKiBS ZWJ1aWxkIGVhY2ggaW5kZXggb24gdGhlIHJlbGF0aW9uIChidXQgbm90IHRoZSB0b2FzdCB0YWJs ZSwgd2hpY2ggaXMKLQkgKiBhbGwtbmV3IGF0IHRoaXMgcG9pbnQpLiAgSXQgaXMgaW1wb3J0YW50 IHRvIGRvIHRoaXMgYmVmb3JlIHRoZSBEUk9QCi0JICogc3RlcCBiZWNhdXNlIGlmIHdlIGFyZSBw cm9jZXNzaW5nIGEgc3lzdGVtIGNhdGFsb2cgdGhhdCB3aWxsIGJlIHVzZWQKLQkgKiBkdXJpbmcg RFJPUCwgd2Ugd2FudCB0byBoYXZlIGl0cyBpbmRleGVzIGF2YWlsYWJsZS4gIFRoZXJlIGlzIG5v Ci0JICogYWR2YW50YWdlIHRvIHRoZSBvdGhlciBvcmRlciBhbnl3YXkgYmVjYXVzZSB0aGlzIGlz IGFsbCB0cmFuc2FjdGlvbmFsLAotCSAqIHNvIG5vIGNoYW5jZSB0byByZWNsYWltIGRpc2sgc3Bh Y2UgYmVmb3JlIGNvbW1pdC4gIFdlIGRvIG5vdCBuZWVkIGEKLQkgKiBmaW5hbCBDb21tYW5kQ291 bnRlckluY3JlbWVudCgpIGJlY2F1c2UgcmVpbmRleF9yZWxhdGlvbiBkb2VzIGl0LgotCSAqCi0J ICogTm90ZTogYmVjYXVzZSBpbmRleF9idWlsZCBpcyBjYWxsZWQgdmlhIHJlaW5kZXhfcmVsYXRp b24sIGl0IHdpbGwgbmV2ZXIKLQkgKiBzZXQgaW5kY2hlY2t4bWluIHRydWUgZm9yIHRoZSBpbmRl eGVzLiAgVGhpcyBpcyBPSyBldmVuIHRob3VnaCBpbiBzb21lCi0JICogc2Vuc2Ugd2UgYXJlIGJ1 aWxkaW5nIG5ldyBpbmRleGVzIHJhdGhlciB0aGFuIHJlYnVpbGRpbmcgZXhpc3Rpbmcgb25lcywK LQkgKiBiZWNhdXNlIHRoZSBuZXcgaGVhcCB3b24ndCBjb250YWluIGFueSBIT1QgY2hhaW5zIGF0 IGFsbCwgbGV0IGFsb25lCi0JICogYnJva2VuIG9uZXMsIHNvIGl0IGNhbid0IGJlIG5lY2Vzc2Fy eSB0byBzZXQgaW5kY2hlY2t4bWluLgotCSAqLwotCXJlaW5kZXhfZmxhZ3MgPSBSRUlOREVYX1JF TF9TVVBQUkVTU19JTkRFWF9VU0U7Ci0JaWYgKGNoZWNrX2NvbnN0cmFpbnRzKQotCQlyZWluZGV4 X2ZsYWdzIHw9IFJFSU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTOworCWlmIChyZWluZGV4KQor CXsKKwkJaW50CQkJcmVpbmRleF9mbGFnczsKKwkJUmVpbmRleFBhcmFtcyByZWluZGV4X3BhcmFt cyA9IHswfTsKIAotCS8qCi0JICogRW5zdXJlIHRoYXQgdGhlIGluZGV4ZXMgaGF2ZSB0aGUgc2Ft ZSBwZXJzaXN0ZW5jZSBhcyB0aGUgcGFyZW50Ci0JICogcmVsYXRpb24uCi0JICovCi0JaWYgKG5l d3JlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQotCQlyZWluZGV4X2Zs YWdzIHw9IFJFSU5ERVhfUkVMX0ZPUkNFX0lOREVYRVNfVU5MT0dHRUQ7Ci0JZWxzZSBpZiAobmV3 cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UKQotCQlyZWluZGV4X2Zs YWdzIHw9IFJFSU5ERVhfUkVMX0ZPUkNFX0lOREVYRVNfUEVSTUFORU5UOworCQkvKgorCQkgKiBS ZWJ1aWxkIGVhY2ggaW5kZXggb24gdGhlIHJlbGF0aW9uIChidXQgbm90IHRoZSB0b2FzdCB0YWJs ZSwgd2hpY2gKKwkJICogaXMgYWxsLW5ldyBhdCB0aGlzIHBvaW50KS4gIEl0IGlzIGltcG9ydGFu dCB0byBkbyB0aGlzIGJlZm9yZSB0aGUKKwkJICogRFJPUCBzdGVwIGJlY2F1c2UgaWYgd2UgYXJl IHByb2Nlc3NpbmcgYSBzeXN0ZW0gY2F0YWxvZyB0aGF0IHdpbGwKKwkJICogYmUgdXNlZCBkdXJp bmcgRFJPUCwgd2Ugd2FudCB0byBoYXZlIGl0cyBpbmRleGVzIGF2YWlsYWJsZS4gIFRoZXJlCisJ CSAqIGlzIG5vIGFkdmFudGFnZSB0byB0aGUgb3RoZXIgb3JkZXIgYW55d2F5IGJlY2F1c2UgdGhp cyBpcyBhbGwKKwkJICogdHJhbnNhY3Rpb25hbCwgc28gbm8gY2hhbmNlIHRvIHJlY2xhaW0gZGlz ayBzcGFjZSBiZWZvcmUgY29tbWl0LiBXZQorCQkgKiBkbyBub3QgbmVlZCBhIGZpbmFsIENvbW1h bmRDb3VudGVySW5jcmVtZW50KCkgYmVjYXVzZQorCQkgKiByZWluZGV4X3JlbGF0aW9uIGRvZXMg aXQuCisJCSAqCisJCSAqIE5vdGU6IGJlY2F1c2UgaW5kZXhfYnVpbGQgaXMgY2FsbGVkIHZpYSBy ZWluZGV4X3JlbGF0aW9uLCBpdCB3aWxsCisJCSAqIG5ldmVyIHNldCBpbmRjaGVja3htaW4gdHJ1 ZSBmb3IgdGhlIGluZGV4ZXMuICBUaGlzIGlzIE9LIGV2ZW4KKwkJICogdGhvdWdoIGluIHNvbWUg c2Vuc2Ugd2UgYXJlIGJ1aWxkaW5nIG5ldyBpbmRleGVzIHJhdGhlciB0aGFuCisJCSAqIHJlYnVp bGRpbmcgZXhpc3Rpbmcgb25lcywgYmVjYXVzZSB0aGUgbmV3IGhlYXAgd29uJ3QgY29udGFpbiBh bnkKKwkJICogSE9UIGNoYWlucyBhdCBhbGwsIGxldCBhbG9uZSBicm9rZW4gb25lcywgc28gaXQg Y2FuJ3QgYmUgbmVjZXNzYXJ5CisJCSAqIHRvIHNldCBpbmRjaGVja3htaW4uCisJCSAqLworCQly ZWluZGV4X2ZsYWdzID0gUkVJTkRFWF9SRUxfU1VQUFJFU1NfSU5ERVhfVVNFOworCQlpZiAoY2hl Y2tfY29uc3RyYWludHMpCisJCQlyZWluZGV4X2ZsYWdzIHw9IFJFSU5ERVhfUkVMX0NIRUNLX0NP TlNUUkFJTlRTOwogCi0JLyogUmVwb3J0IHRoYXQgd2UgYXJlIG5vdyByZWluZGV4aW5nIHJlbGF0 aW9ucyAqLwotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX1BI QVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1JFQlVJTERfSU5ERVgpOworCQkv KgorCQkgKiBFbnN1cmUgdGhhdCB0aGUgaW5kZXhlcyBoYXZlIHRoZSBzYW1lIHBlcnNpc3RlbmNl IGFzIHRoZSBwYXJlbnQKKwkJICogcmVsYXRpb24uCisJCSAqLworCQlpZiAobmV3cmVscGVyc2lz dGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCisJCQlyZWluZGV4X2ZsYWdzIHw9IFJF SU5ERVhfUkVMX0ZPUkNFX0lOREVYRVNfVU5MT0dHRUQ7CisJCWVsc2UgaWYgKG5ld3JlbHBlcnNp c3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCkKKwkJCXJlaW5kZXhfZmxhZ3MgfD0g UkVJTkRFWF9SRUxfRk9SQ0VfSU5ERVhFU19QRVJNQU5FTlQ7CiAKLQlyZWluZGV4X3JlbGF0aW9u KE5VTEwsIE9JRE9sZEhlYXAsIHJlaW5kZXhfZmxhZ3MsICZyZWluZGV4X3BhcmFtcyk7CisJCS8q IFJlcG9ydCB0aGF0IHdlIGFyZSBub3cgcmVpbmRleGluZyByZWxhdGlvbnMgKi8KKwkJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19SRVBBQ0tfUEhBU0UsCisJCQkJCQkJCQkg UFJPR1JFU1NfUkVQQUNLX1BIQVNFX1JFQlVJTERfSU5ERVgpOworCisJCXJlaW5kZXhfcmVsYXRp b24oTlVMTCwgT0lET2xkSGVhcCwgcmVpbmRleF9mbGFncywgJnJlaW5kZXhfcGFyYW1zKTsKKwl9 CiAKIAkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgbm93IGRvaW5nIGNsZWFuIHVwICovCiAJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19SRVBBQ0tfUEhBU0UsCkBAIC0xODgxLDcg KzIyODksOCBAQCBjbHVzdGVyX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24oUmVwYWNrQ29tbWFu ZCBjbWQsIE9pZCByZWxpZCwgT2lkIHVzZXJpZCkKICAqIHJlc29sdmUgaW4gdGhpcyBjYXNlLgog ICovCiBzdGF0aWMgUmVsYXRpb24KLXByb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKFJlcGFja1N0bXQg KnN0bXQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKK3Byb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKFJl cGFja1N0bXQgKnN0bXQsIExPQ0tNT0RFIGxvY2ttb2RlLCBib29sIGlzVG9wTGV2ZWwsCisJCQkJ CQlDbHVzdGVyUGFyYW1zICpwYXJhbXMpCiB7CiAJUmVsYXRpb24JcmVsOwogCU9pZAkJCXRhYmxl T2lkOwpAQCAtMTg5MCwxMyArMjI5OSw5IEBAIHByb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKFJlcGFj a1N0bXQgKnN0bXQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKIAlBc3NlcnQoc3RtdC0+Y29tbWFu ZCA9PSBSRVBBQ0tfQ09NTUFORF9DTFVTVEVSIHx8CiAJCSAgIHN0bXQtPmNvbW1hbmQgPT0gUkVQ QUNLX0NPTU1BTkRfUkVQQUNLKTsKIAotCS8qCi0JICogRmluZCwgbG9jaywgYW5kIGNoZWNrIHBl cm1pc3Npb25zIG9uIHRoZSB0YWJsZS4gIFdlIG9idGFpbgotCSAqIEFjY2Vzc0V4Y2x1c2l2ZUxv Y2sgcmlnaHQgYXdheSB0byBhdm9pZCBsb2NrLXVwZ3JhZGUgaGF6YXJkIGluIHRoZQotCSAqIHNp bmdsZS10cmFuc2FjdGlvbiBjYXNlLgotCSAqLworCS8qIEZpbmQsIGxvY2ssIGFuZCBjaGVjayBw ZXJtaXNzaW9ucyBvbiB0aGUgdGFibGUuICovCiAJdGFibGVPaWQgPSBSYW5nZVZhckdldFJlbGlk RXh0ZW5kZWQoc3RtdC0+cmVsYXRpb24sCi0JCQkJCQkJCQkJQWNjZXNzRXhjbHVzaXZlTG9jaywK KwkJCQkJCQkJCQlsb2NrbW9kZSwKIAkJCQkJCQkJCQkwLAogCQkJCQkJCQkJCVJhbmdlVmFyQ2Fs bGJhY2tNYWludGFpbnNUYWJsZSwKIAkJCQkJCQkJCQlOVUxMKTsKQEAgLTE5MjIsMjYgKzIzMjcs MTcgQEAgcHJvY2Vzc19zaW5nbGVfcmVsYXRpb24oUmVwYWNrU3RtdCAqc3RtdCwgQ2x1c3RlclBh cmFtcyAqcGFyYW1zKQogCQlyZXR1cm4gcmVsOwogCWVsc2UKIAl7Ci0JCU9pZAkJCWluZGV4T2lk OworCQlPaWQJCQlpbmRleE9pZCA9IEludmFsaWRPaWQ7CiAKLQkJaW5kZXhPaWQgPSBkZXRlcm1p bmVfY2x1c3RlcmVkX2luZGV4KHJlbCwgc3RtdC0+dXNpbmdpbmRleCwKLQkJCQkJCQkJCQkJIHN0 bXQtPmluZGV4bmFtZSk7Ci0JCWlmIChPaWRJc1ZhbGlkKGluZGV4T2lkKSkKLQkJCWNoZWNrX2lu ZGV4X2lzX2NsdXN0ZXJhYmxlKHJlbCwgaW5kZXhPaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwot CQljbHVzdGVyX3JlbChzdG10LT5jb21tYW5kLCBzdG10LT51c2luZ2luZGV4LCByZWwsIGluZGV4 T2lkLCBwYXJhbXMpOwotCi0JCS8qIERvIGFuIGFuYWx5emUsIGlmIHJlcXVlc3RlZCAqLwotCQlp ZiAocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX0FOQUxZWkUpCisJCWlmIChzdG10LT51c2luZ2lu ZGV4KQogCQl7Ci0JCQlWYWN1dW1QYXJhbXMgdmFjX3BhcmFtcyA9IHswfTsKLQotCQkJdmFjX3Bh cmFtcy5vcHRpb25zIHw9IFZBQ09QVF9BTkFMWVpFOwotCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAm IENMVU9QVF9WRVJCT1NFKQotCQkJCXZhY19wYXJhbXMub3B0aW9ucyB8PSBWQUNPUFRfVkVSQk9T RTsKLQkJCWFuYWx5emVfcmVsKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwgdmFjX3BhcmFt cywgTklMLCB0cnVlLAotCQkJCQkJTlVMTCk7CisJCQlpbmRleE9pZCA9IGRldGVybWluZV9jbHVz dGVyZWRfaW5kZXgocmVsLCBzdG10LT51c2luZ2luZGV4LAorCQkJCQkJCQkJCQkJIHN0bXQtPmlu ZGV4bmFtZSk7CisJCQljaGVja19pbmRleF9pc19jbHVzdGVyYWJsZShyZWwsIGluZGV4T2lkLCBs b2NrbW9kZSk7CiAJCX0KIAorCQljbHVzdGVyX3JlbChzdG10LT5jb21tYW5kLCBzdG10LT51c2lu Z2luZGV4LCByZWwsIGluZGV4T2lkLAorCQkJCQlwYXJhbXMsIGlzVG9wTGV2ZWwpOwogCQlyZXR1 cm4gTlVMTDsKIAl9CiB9CkBAIC0xOTk4LDMgKzIzOTQsMTA0OCBAQCBkZXRlcm1pbmVfY2x1c3Rl cmVkX2luZGV4KFJlbGF0aW9uIHJlbCwgYm9vbCB1c2luZ2luZGV4LCBjb25zdCBjaGFyICppbmRl eG5hbWUpCiAKIAlyZXR1cm4gaW5kZXhPaWQ7CiB9CisKKworLyoKKyAqIENhbGwgdGhpcyBmdW5j dGlvbiBiZWZvcmUgUkVQQUNLIENPTkNVUlJFTlRMWSBzdGFydHMgdG8gc2V0dXAgbG9naWNhbAor ICogZGVjb2RpbmcuIEl0IG1ha2VzIHN1cmUgdGhhdCBvdGhlciB1c2VycyBvZiB0aGUgdGFibGUg cHV0IGVub3VnaAorICogaW5mb3JtYXRpb24gaW50byBXQUwuCisgKgorICogVGhlIHBvaW50IGlz IHRoYXQgYXQgdmFyaW91cyBwbGFjZXMgd2UgZXhwZWN0IHRoYXQgdGhlIHRhYmxlIHdlJ3JlCisg KiBwcm9jZXNzaW5nIGlzIHRyZWF0ZWQgbGlrZSBhIHN5c3RlbSBjYXRhbG9nLiBGb3IgZXhhbXBs ZSwgd2UgbmVlZCB0byBiZQorICogYWJsZSB0byBzY2FuIGl0IHVzaW5nIGEgImhpc3RvcmljIHNu YXBzaG90IiBhbnl0aW1lIGR1cmluZyB0aGUgcHJvY2Vzc2luZworICogKGFzIG9wcG9zZWQgdG8g c2Nhbm5pbmcgb25seSBhdCB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGRlY29kaW5nLCBhcyBsb2dp Y2FsCisgKiByZXBsaWNhdGlvbiBkb2VzIGR1cmluZyBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXph dGlvbiksIGluIG9yZGVyIHRvIGFwcGx5CisgKiBjb25jdXJyZW50IFVQREFURSAvIERFTEVURSBj b21tYW5kcy4KKyAqCisgKiBOb3RlIHRoYXQgVE9BU1QgdGFibGUgbmVlZHMgbm8gYXR0ZW50aW9u IGhlcmUgYXMgaXQncyBub3Qgc2Nhbm5lZCB1c2luZworICogaGlzdG9yaWMgc25hcHNob3QuCisg Ki8KK3N0YXRpYyB2b2lkCitiZWdpbl9jb25jdXJyZW50X3JlcGFjayhSZWxhdGlvbiByZWwpCit7 CisJT2lkCQkJdG9hc3RyZWxpZDsKKworCS8qIEF2b2lkIGxvZ2ljYWwgZGVjb2Rpbmcgb2Ygb3Ro ZXIgcmVsYXRpb25zIGJ5IHRoaXMgYmFja2VuZC4gKi8KKwlyZXBhY2tlZF9yZWxfbG9jYXRvciA9 IHJlbC0+cmRfbG9jYXRvcjsKKwl0b2FzdHJlbGlkID0gcmVsLT5yZF9yZWwtPnJlbHRvYXN0cmVs aWQ7CisJaWYgKE9pZElzVmFsaWQodG9hc3RyZWxpZCkpCisJeworCQlSZWxhdGlvbgl0b2FzdHJl bDsKKworCQkvKiBBdm9pZCBsb2dpY2FsIGRlY29kaW5nIG9mIG90aGVyIFRPQVNUIHJlbGF0aW9u cy4gKi8KKwkJdG9hc3RyZWwgPSB0YWJsZV9vcGVuKHRvYXN0cmVsaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCXJlcGFja2VkX3JlbF90b2FzdF9sb2NhdG9yID0gdG9hc3RyZWwtPnJkX2xvY2F0b3I7 CisJCXRhYmxlX2Nsb3NlKHRvYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KK30KKworLyoK KyAqIENhbGwgdGhpcyB3aGVuIGRvbmUgd2l0aCBSRVBBQ0sgQ09OQ1VSUkVOVExZLgorICovCitz dGF0aWMgdm9pZAorZW5kX2NvbmN1cnJlbnRfcmVwYWNrKHZvaWQpCit7CisJLyoKKwkgKiBSZXN0 b3JlIG5vcm1hbCBmdW5jdGlvbiBvZiAoZnV0dXJlKSBsb2dpY2FsIGRlY29kaW5nIGZvciB0aGlz IGJhY2tlbmQuCisJICovCisJcmVwYWNrZWRfcmVsX2xvY2F0b3IucmVsTnVtYmVyID0gSW52YWxp ZE9pZDsKKwlyZXBhY2tlZF9yZWxfdG9hc3RfbG9jYXRvci5yZWxOdW1iZXIgPSBJbnZhbGlkT2lk OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBtdWNoIGxpa2UgcGdfY3JlYXRlX2xvZ2lj YWxfcmVwbGljYXRpb25fc2xvdCgpIGV4Y2VwdCB0aGF0CisgKiB0aGUgbmV3IHNsb3QgaXMgbmVp dGhlciByZWxlYXNlZCAoaWYgYW55b25lIGVsc2UgY291bGQgcmVhZCBjaGFuZ2VzIGZyb20KKyAq IG91ciBzbG90LCB3ZSBjb3VsZCBtaXNzIGNoYW5nZXMgb3RoZXIgYmFja2VuZHMgZG8gd2hpbGUg d2UgY29weSB0aGUKKyAqIGV4aXN0aW5nIGRhdGEgaW50byB0ZW1wb3JhcnkgdGFibGUpLCBub3Ig cGVyc2lzdGVkIChpdCdzIGVhc2llciB0byBoYW5kbGUKKyAqIGNyYXNoIGJ5IHJlc3RhcnRpbmcg YWxsIHRoZSB3b3JrIGZyb20gc2NyYXRjaCkuCisgKi8KK3N0YXRpYyBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICoKK3NldHVwX2xvZ2ljYWxfZGVjb2RpbmcoT2lkIHJlbGlkLCBjb25zdCBjaGFyICpz bG90bmFtZSwgVHVwbGVEZXNjIHR1cGRlc2MpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4OworCVJlcGFja0RlY29kaW5nU3RhdGUgKmRzdGF0ZTsKKworCS8qCisJICogQ2hlY2sgaWYg d2UgY2FuIHVzZSBsb2dpY2FsIGRlY29kaW5nLgorCSAqLworCUNoZWNrU2xvdFBlcm1pc3Npb25z KCk7CisJQ2hlY2tMb2dpY2FsRGVjb2RpbmdSZXF1aXJlbWVudHMoKTsKKworCS8qIFJTX1RFTVBP UkFSWSBzbyB0aGF0IHRoZSBzbG90IGdldHMgY2xlYW5lZCB1cCBvbiBFUlJPUi4gKi8KKwlSZXBs aWNhdGlvblNsb3RDcmVhdGUoc2xvdG5hbWUsIHRydWUsIFJTX1RFTVBPUkFSWSwgZmFsc2UsIGZh bHNlLCBmYWxzZSk7CisKKwkvKgorCSAqIE5laXRoZXIgcHJlcGFyZV93cml0ZSBub3IgZG9fd3Jp dGUgY2FsbGJhY2sgbm9yIHVwZGF0ZV9wcm9ncmVzcyBpcworCSAqIHVzZWZ1bCBmb3IgdXMuCisJ ICovCisJY3R4ID0gQ3JlYXRlSW5pdERlY29kaW5nQ29udGV4dChSRVBMX1BMVUdJTl9OQU1FLAor CQkJCQkJCQkJTklMLAorCQkJCQkJCQkJdHJ1ZSwKKwkJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRy LAorCQkJCQkJCQkJWExfUk9VVElORSgucGFnZV9yZWFkID0gcmVhZF9sb2NhbF94bG9nX3BhZ2Us CisJCQkJCQkJCQkJCSAgIC5zZWdtZW50X29wZW4gPSB3YWxfc2VnbWVudF9vcGVuLAorCQkJCQkJ CQkJCQkgICAuc2VnbWVudF9jbG9zZSA9IHdhbF9zZWdtZW50X2Nsb3NlKSwKKwkJCQkJCQkJCU5V TEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBXZSBkb24ndCBoYXZlIGNvbnRyb2wgb24gc2V0 dGluZyBmYXN0X2ZvcndhcmQsIHNvIGF0IGxlYXN0IGNoZWNrIGl0LgorCSAqLworCUFzc2VydCgh Y3R4LT5mYXN0X2ZvcndhcmQpOworCisJRGVjb2RpbmdDb250ZXh0RmluZFN0YXJ0cG9pbnQoY3R4 KTsKKworCS8qIFNvbWUgV0FMIHJlY29yZHMgc2hvdWxkIGhhdmUgYmVlbiByZWFkLiAqLworCUFz c2VydChjdHgtPnJlYWRlci0+RW5kUmVjUHRyICE9IEludmFsaWRYTG9nUmVjUHRyKTsKKworCVhM Qnl0ZVRvU2VnKGN0eC0+cmVhZGVyLT5FbmRSZWNQdHIsIHJlcGFja19jdXJyZW50X3NlZ21lbnQs CisJCQkJd2FsX3NlZ21lbnRfc2l6ZSk7CisKKwkvKgorCSAqIFNldHVwIHN0cnVjdHVyZXMgdG8g c3RvcmUgZGVjb2RlZCBjaGFuZ2VzLgorCSAqLworCWRzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFJl cGFja0RlY29kaW5nU3RhdGUpKTsKKwlkc3RhdGUtPnJlbGlkID0gcmVsaWQ7CisJZHN0YXRlLT50 c3RvcmUgPSB0dXBsZXN0b3JlX2JlZ2luX2hlYXAoZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkJCSAg IG1haW50ZW5hbmNlX3dvcmtfbWVtKTsKKworCWRzdGF0ZS0+dHVwZGVzYyA9IHR1cGRlc2M7CisK KwkvKiBJbml0aWFsaXplIHRoZSBkZXNjcmlwdG9yIHRvIHN0b3JlIHRoZSBjaGFuZ2VzIC4uLiAq LworCWRzdGF0ZS0+dHVwZGVzY19jaGFuZ2UgPSBDcmVhdGVUZW1wbGF0ZVR1cGxlRGVzYygxKTsK KworCVR1cGxlRGVzY0luaXRFbnRyeShkc3RhdGUtPnR1cGRlc2NfY2hhbmdlLCAxLCBOVUxMLCBC WVRFQU9JRCwgLTEsIDApOworCS8qIC4uLiBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIHNs b3QuICovCisJZHN0YXRlLT50c3Nsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoZHN0YXRl LT50dXBkZXNjX2NoYW5nZSwKKwkJCQkJCQkJCQkJICAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwor CWRzdGF0ZS0+cmVzb3duZXIgPSBSZXNvdXJjZU93bmVyQ3JlYXRlKEN1cnJlbnRSZXNvdXJjZU93 bmVyLAorCQkJCQkJCQkJCSAgICJsb2dpY2FsIGRlY29kaW5nIik7CisKKwljdHgtPm91dHB1dF93 cml0ZXJfcHJpdmF0ZSA9IGRzdGF0ZTsKKwlyZXR1cm4gY3R4OworfQorCisvKgorICogUmV0cmll dmUgdHVwbGUgZnJvbSBDb25jdXJyZW50Q2hhbmdlIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgaW5w dXQgZGF0YSBzdGFydHMgd2l0aCB0aGUgc3RydWN0dXJlIGJ1dCBpdCBtaWdodCBub3QgYmUgYXBw cm9wcmlhdGVseQorICogYWxpZ25lZC4KKyAqLworc3RhdGljIEhlYXBUdXBsZQorZ2V0X2NoYW5n ZWRfdHVwbGUoY2hhciAqY2hhbmdlKQoreworCUhlYXBUdXBsZURhdGEgdHVwX2RhdGE7CisJSGVh cFR1cGxlCXJlc3VsdDsKKwljaGFyCSAgICpzcmM7CisKKwkvKgorCSAqIEVuc3VyZSBhbGlnbm1l bnQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZmllbGRzLiAoVGhpcyBpcyB3aHkgd2UgY2FuJ3QgdXNl CisJICogaGVhcF9jb3B5dHVwbGUoKSBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uKQorCSAqLwor CXNyYyA9IGNoYW5nZSArIG9mZnNldG9mKENvbmN1cnJlbnRDaGFuZ2UsIHR1cF9kYXRhKTsKKwlt ZW1jcHkoJnR1cF9kYXRhLCBzcmMsIHNpemVvZihIZWFwVHVwbGVEYXRhKSk7CisKKwlyZXN1bHQg PSAoSGVhcFR1cGxlKSBwYWxsb2MoSEVBUFRVUExFU0laRSArIHR1cF9kYXRhLnRfbGVuKTsKKwlt ZW1jcHkocmVzdWx0LCAmdHVwX2RhdGEsIHNpemVvZihIZWFwVHVwbGVEYXRhKSk7CisJcmVzdWx0 LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSAoKGNoYXIgKikgcmVzdWx0ICsgSEVBUFRVUExF U0laRSk7CisJc3JjID0gY2hhbmdlICsgU2l6ZU9mQ29uY3VycmVudENoYW5nZTsKKwltZW1jcHko cmVzdWx0LT50X2RhdGEsIHNyYywgcmVzdWx0LT50X2xlbik7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogRGVjb2RlIGxvZ2ljYWwgY2hhbmdlcyBmcm9tIHRoZSBXQUwgc2VxdWVuY2Ug dXAgdG8gZW5kX29mX3dhbC4KKyAqLwordm9pZAorcmVwYWNrX2RlY29kZV9jb25jdXJyZW50X2No YW5nZXMoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkgWExvZ1JlY1B0ciBl bmRfb2Zfd2FsKQoreworCVJlcGFja0RlY29kaW5nU3RhdGUgKmRzdGF0ZTsKKwlSZXNvdXJjZU93 bmVyIHJlc293bmVyX29sZDsKKworCS8qCisJICogSW52YWxpZGF0ZSB0aGUgInByZXNlbnQiIGNh Y2hlIGJlZm9yZSBtb3ZpbmcgdG8gIihyZWNlbnQpIGhpc3RvcnkiLgorCSAqLworCUludmFsaWRh dGVTeXN0ZW1DYWNoZXMoKTsKKworCWRzdGF0ZSA9IChSZXBhY2tEZWNvZGluZ1N0YXRlICopIGN0 eC0+b3V0cHV0X3dyaXRlcl9wcml2YXRlOworCXJlc293bmVyX29sZCA9IEN1cnJlbnRSZXNvdXJj ZU93bmVyOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gZHN0YXRlLT5yZXNvd25lcjsKKworCVBH X1RSWSgpOworCXsKKwkJd2hpbGUgKGN0eC0+cmVhZGVyLT5FbmRSZWNQdHIgPCBlbmRfb2Zfd2Fs KQorCQl7CisJCQlYTG9nUmVjb3JkICpyZWNvcmQ7CisJCQlYTG9nU2VnTm8Jc2Vnbm9fbmV3Owor CQkJY2hhcgkgICAqZXJybSA9IE5VTEw7CisJCQlYTG9nUmVjUHRyCWVuZF9sc247CisKKwkJCXJl Y29yZCA9IFhMb2dSZWFkUmVjb3JkKGN0eC0+cmVhZGVyLCAmZXJybSk7CisJCQlpZiAoZXJybSkK KwkJCQllbG9nKEVSUk9SLCAiJXMiLCBlcnJtKTsKKworCQkJaWYgKHJlY29yZCAhPSBOVUxMKQor CQkJCUxvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoY3R4LCBjdHgtPnJlYWRlcik7CisKKwkJ CS8qCisJCQkgKiBJZiBXQUwgc2VnbWVudCBib3VuZGFyeSBoYXMgYmVlbiBjcm9zc2VkLCBpbmZv cm0gdGhlIGRlY29kaW5nCisJCQkgKiBzeXN0ZW0gdGhhdCB0aGUgY2F0YWxvZ194bWluIGNhbiBh ZHZhbmNlLiAoV2UgY2FuIGNvbmZpcm0gbW9yZQorCQkJICogb2Z0ZW4sIGJ1dCBhIGZpbGxpbmcg YSBzaW5nbGUgV0FMIHNlZ21lbnQgc2hvdWxkIG5vdCB0YWtlIG11Y2gKKwkJCSAqIHRpbWUuKQor CQkJICovCisJCQllbmRfbHNuID0gY3R4LT5yZWFkZXItPkVuZFJlY1B0cjsKKwkJCVhMQnl0ZVRv U2VnKGVuZF9sc24sIHNlZ25vX25ldywgd2FsX3NlZ21lbnRfc2l6ZSk7CisJCQlpZiAoc2Vnbm9f bmV3ICE9IHJlcGFja19jdXJyZW50X3NlZ21lbnQpCisJCQl7CisJCQkJTG9naWNhbENvbmZpcm1S ZWNlaXZlZExvY2F0aW9uKGVuZF9sc24pOworCQkJCWVsb2coREVCVUcxLCAiUkVQQUNLOiBjb25m aXJtZWQgcmVjZWl2ZSBsb2NhdGlvbiAlWC8lWCIsCisJCQkJCSAodWludDMyKSAoZW5kX2xzbiA+ PiAzMiksICh1aW50MzIpIGVuZF9sc24pOworCQkJCXJlcGFja19jdXJyZW50X3NlZ21lbnQgPSBz ZWdub19uZXc7CisJCQl9CisKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKwkJSW52 YWxpZGF0ZVN5c3RlbUNhY2hlcygpOworCQlDdXJyZW50UmVzb3VyY2VPd25lciA9IHJlc293bmVy X29sZDsKKwl9CisJUEdfQ0FUQ0goKTsKKwl7CisJCS8qIGNsZWFyIGFsbCB0aW1ldHJhdmVsIGVu dHJpZXMgKi8KKwkJSW52YWxpZGF0ZVN5c3RlbUNhY2hlcygpOworCQlDdXJyZW50UmVzb3VyY2VP d25lciA9IHJlc293bmVyX29sZDsKKwkJUEdfUkVfVEhST1coKTsKKwl9CisJUEdfRU5EX1RSWSgp OworfQorCisvKgorICogQXBwbHkgY2hhbmdlcyB0aGF0IGhhcHBlbmVkIGR1cmluZyB0aGUgaW5p dGlhbCBsb2FkLgorICoKKyAqIFNjYW4ga2V5IGlzIHBhc3NlZCBieSBjYWxsZXIsIHNvIGl0IGRv ZXMgbm90IGhhdmUgdG8gYmUgY29uc3RydWN0ZWQKKyAqIG11bHRpcGxlIHRpbWVzLiBLZXkgZW50 cmllcyBoYXZlIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQsIGV4Y2VwdCBmb3IKKyAqIHNrX2FyZ3Vt ZW50LgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfY29uY3VycmVudF9jaGFuZ2VzKFJlcGFja0Rl Y29kaW5nU3RhdGUgKmRzdGF0ZSwgUmVsYXRpb24gcmVsLAorCQkJCQkJIFNjYW5LZXkga2V5LCBp bnQgbmtleXMsIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUpCit7CisJVHVwbGVUYWJsZVNsb3Qg KmluZGV4X3Nsb3QsCisJCQkgICAqaWRlbnRfc2xvdDsKKwlIZWFwVHVwbGUJdHVwX29sZCA9IE5V TEw7CisKKwlpZiAoZHN0YXRlLT5uY2hhbmdlcyA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBUdXBs ZVRhYmxlU2xvdCBpcyBuZWVkZWQgdG8gcGFzcyB0aGUgdHVwbGUgdG8gRXhlY0luc2VydEluZGV4 VHVwbGVzKCkuICovCisJaW5kZXhfc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChkc3Rh dGUtPnR1cGRlc2MsICZUVFNPcHNIZWFwVHVwbGUpOworCisJLyogQSBzbG90IHRvIGZldGNoIHR1 cGxlcyBmcm9tIGlkZW50aXR5IGluZGV4LiAqLworCWlkZW50X3Nsb3QgPSB0YWJsZV9zbG90X2Ny ZWF0ZShyZWwsIE5VTEwpOworCisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KGRzdGF0 ZS0+dHN0b3JlLCB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJICAgZHN0YXRlLT50c3Nsb3QpKQorCXsK KwkJYm9vbAkJc2hvdWxkRnJlZTsKKwkJSGVhcFR1cGxlCXR1cF9jaGFuZ2UsCisJCQkJCXR1cCwK KwkJCQkJdHVwX2V4aXN0OworCQljaGFyCSAgICpjaGFuZ2VfcmF3LAorCQkJCSAgICpzcmM7CisJ CUNvbmN1cnJlbnRDaGFuZ2UgY2hhbmdlOworCQlib29sCQlpc251bGxbMV07CisJCURhdHVtCQl2 YWx1ZXNbMV07CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBHZXQgdGhlIGNo YW5nZSBmcm9tIHRoZSBzaW5nbGUtY29sdW1uIHR1cGxlLiAqLworCQl0dXBfY2hhbmdlID0gRXhl Y0ZldGNoU2xvdEhlYXBUdXBsZShkc3RhdGUtPnRzc2xvdCwgZmFsc2UsICZzaG91bGRGcmVlKTsK KwkJaGVhcF9kZWZvcm1fdHVwbGUodHVwX2NoYW5nZSwgZHN0YXRlLT50dXBkZXNjX2NoYW5nZSwg dmFsdWVzLCBpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbFswXSk7CisKKwkJLyogTWFrZSBzdXJl IHdlIGFjY2VzcyBhbGlnbmVkIGRhdGEuICovCisJCWNoYW5nZV9yYXcgPSAoY2hhciAqKSBEYXR1 bUdldEJ5dGVhUCh2YWx1ZXNbMF0pOworCQlzcmMgPSAoY2hhciAqKSBWQVJEQVRBKGNoYW5nZV9y YXcpOworCQltZW1jcHkoJmNoYW5nZSwgc3JjLCBTaXplT2ZDb25jdXJyZW50Q2hhbmdlKTsKKwor CQkvKiBUUlVOQ0FURSBjaGFuZ2UgY29udGFpbnMgbm8gdHVwbGUsIHNvIHByb2Nlc3MgaXQgc2Vw YXJhdGVseS4gKi8KKwkJaWYgKGNoYW5nZS5raW5kID09IENIQU5HRV9UUlVOQ0FURSkKKwkJewor CQkJLyoKKwkJCSAqIEFsbCB0aGUgdGhpbmdzIHRoYXQgRXhlY3V0ZVRydW5jYXRlR3V0cygpIGRv ZXMgKHN1Y2ggYXMgZmlyaW5nCisJCQkgKiB0cmlnZ2VycyBvciBoYW5kbGluZyB0aGUgRFJPUF9D QVNDQURFIGJlaGF2aW9yKSBzaG91bGQgaGF2ZQorCQkJICogdGFrZW4gcGxhY2Ugb24gdGhlIHNv dXJjZSByZWxhdGlvbi4gVGh1cyB3ZSBvbmx5IGRvIHRoZSBhY3R1YWwKKwkJCSAqIHRydW5jYXRp b24gb2YgdGhlIG5ldyByZWxhdGlvbiAoYW5kIGl0cyBpbmRleGVzKS4KKwkJCSAqLworCQkJaGVh cF90cnVuY2F0ZV9vbmVfcmVsKHJlbCk7CisKKwkJCXBmcmVlKHR1cF9jaGFuZ2UpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKgorCQkgKiBFeHRyYWN0IHRoZSB0dXBsZSBmcm9tIHRoZSBjaGFu Z2UuIFRoZSB0dXBsZSBpcyBjb3BpZWQgaGVyZSBiZWNhdXNlCisJCSAqIGl0IG1pZ2h0IGJlIGFz c2lnbmVkIHRvICd0dXBfb2xkJywgaW4gd2hpY2ggY2FzZSBpdCBuZWVkcyB0bworCQkgKiBzdXJ2 aXZlIGludG8gdGhlIG5leHQgaXRlcmF0aW9uLgorCQkgKi8KKwkJdHVwID0gZ2V0X2NoYW5nZWRf dHVwbGUoc3JjKTsKKworCQlpZiAoY2hhbmdlLmtpbmQgPT0gQ0hBTkdFX1VQREFURV9PTEQpCisJ CXsKKwkJCUFzc2VydCh0dXBfb2xkID09IE5VTEwpOworCQkJdHVwX29sZCA9IHR1cDsKKwkJfQor CQllbHNlIGlmIChjaGFuZ2Uua2luZCA9PSBDSEFOR0VfSU5TRVJUKQorCQl7CisJCQlBc3NlcnQo dHVwX29sZCA9PSBOVUxMKTsKKworCQkJYXBwbHlfY29uY3VycmVudF9pbnNlcnQocmVsLCAmY2hh bmdlLCB0dXAsIGlpc3RhdGUsIGluZGV4X3Nsb3QpOworCisJCQlwZnJlZSh0dXApOworCQl9CisJ CWVsc2UgaWYgKGNoYW5nZS5raW5kID09IENIQU5HRV9VUERBVEVfTkVXIHx8CisJCQkJIGNoYW5n ZS5raW5kID09IENIQU5HRV9ERUxFVEUpCisJCXsKKwkJCUluZGV4U2NhbkRlc2MgaW5kX3NjYW4g PSBOVUxMOworCQkJSGVhcFR1cGxlCXR1cF9rZXk7CisKKwkJCWlmIChjaGFuZ2Uua2luZCA9PSBD SEFOR0VfVVBEQVRFX05FVykKKwkJCXsKKwkJCQl0dXBfa2V5ID0gdHVwX29sZCAhPSBOVUxMID8g dHVwX29sZCA6IHR1cDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlBc3NlcnQodHVwX29sZCA9 PSBOVUxMKTsKKwkJCQl0dXBfa2V5ID0gdHVwOworCQkJfQorCisJCQkvKgorCQkJICogRmluZCB0 aGUgdHVwbGUgdG8gYmUgdXBkYXRlZCBvciBkZWxldGVkLgorCQkJICovCisJCQl0dXBfZXhpc3Qg PSBmaW5kX3RhcmdldF90dXBsZShyZWwsIGtleSwgbmtleXMsIHR1cF9rZXksCisJCQkJCQkJCQkJ ICBpaXN0YXRlLCBpZGVudF9zbG90LCAmaW5kX3NjYW4pOworCQkJaWYgKHR1cF9leGlzdCA9PSBO VUxMKQorCQkJCWVsb2coRVJST1IsICJGYWlsZWQgdG8gZmluZCB0YXJnZXQgdHVwbGUiKTsKKwor CQkJaWYgKGNoYW5nZS5raW5kID09IENIQU5HRV9VUERBVEVfTkVXKQorCQkJCWFwcGx5X2NvbmN1 cnJlbnRfdXBkYXRlKHJlbCwgdHVwLCB0dXBfZXhpc3QsICZjaGFuZ2UsIGlpc3RhdGUsCisJCQkJ CQkJCQkJaW5kZXhfc2xvdCk7CisJCQllbHNlCisJCQkJYXBwbHlfY29uY3VycmVudF9kZWxldGUo cmVsLCB0dXBfZXhpc3QsICZjaGFuZ2UpOworCisJCQlpZiAodHVwX29sZCAhPSBOVUxMKQorCQkJ eworCQkJCXBmcmVlKHR1cF9vbGQpOworCQkJCXR1cF9vbGQgPSBOVUxMOworCQkJfQorCisJCQlw ZnJlZSh0dXApOworCQkJaW5kZXhfZW5kc2NhbihpbmRfc2Nhbik7CisJCX0KKwkJZWxzZQorCQkJ ZWxvZyhFUlJPUiwgIlVucmVjb2duaXplZCBraW5kIG9mIGNoYW5nZTogJWQiLCBjaGFuZ2Uua2lu ZCk7CisKKwkJLyoKKwkJICogSWYgYSBjaGFuZ2Ugd2FzIGFwcGxpZWQgbm93LCBpbmNyZW1lbnQg Q0lEIGZvciBuZXh0IHdyaXRlcyBhbmQKKwkJICogdXBkYXRlIHRoZSBzbmFwc2hvdCBzbyBpdCBz ZWVzIHRoZSBjaGFuZ2VzIHdlJ3ZlIGFwcGxpZWQgc28gZmFyLgorCQkgKi8KKwkJaWYgKGNoYW5n ZS5raW5kICE9IENIQU5HRV9VUERBVEVfT0xEKQorCQl7CisJCQlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOworCQkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKKwkJfQorCisJCS8q IFRUU09wc01pbmltYWxUdXBsZSBoYXMgLmdldF9oZWFwX3R1cGxlPT1OVUxMLiAqLworCQlBc3Nl cnQoc2hvdWxkRnJlZSk7CisJCXBmcmVlKHR1cF9jaGFuZ2UpOworCX0KKworCXR1cGxlc3RvcmVf Y2xlYXIoZHN0YXRlLT50c3RvcmUpOworCWRzdGF0ZS0+bmNoYW5nZXMgPSAwOworCisJLyogQ2xl YW51cC4gKi8KKwlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGluZGV4X3Nsb3QpOworCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoaWRlbnRfc2xvdCk7Cit9CisKK3N0YXRpYyB2b2lk CithcHBseV9jb25jdXJyZW50X2luc2VydChSZWxhdGlvbiByZWwsIENvbmN1cnJlbnRDaGFuZ2Ug KmNoYW5nZSwgSGVhcFR1cGxlIHR1cCwKKwkJCQkJCUluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUs IFR1cGxlVGFibGVTbG90ICppbmRleF9zbG90KQoreworCUxpc3QJICAgKnJlY2hlY2s7CisKKwor CS8qCisJICogTGlrZSBzaW1wbGVfaGVhcF9pbnNlcnQoKSwgYnV0IG1ha2Ugc3VyZSB0aGF0IHRo ZSBJTlNFUlQgaXMgbm90CisJICogbG9naWNhbGx5IGRlY29kZWQgLSBzZWUgcmVmb3JtX2FuZF9y ZXdyaXRlX3R1cGxlKCkgZm9yIG1vcmUKKwkgKiBpbmZvcm1hdGlvbi4KKwkgKi8KKwloZWFwX2lu c2VydChyZWwsIHR1cCwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSEVBUF9JTlNFUlRfTk9f TE9HSUNBTCwKKwkJCQlOVUxMKTsKKworCS8qCisJICogVXBkYXRlIGluZGV4ZXMuCisJICoKKwkg KiBJbiBjYXNlIGZ1bmN0aW9ucyBpbiB0aGUgaW5kZXggbmVlZCB0aGUgYWN0aXZlIHNuYXBzaG90 IGFuZCBjYWxsZXIKKwkgKiBoYXNuJ3Qgc2V0IG9uZS4KKwkgKi8KKwlFeGVjU3RvcmVIZWFwVHVw bGUodHVwLCBpbmRleF9zbG90LCBmYWxzZSk7CisJcmVjaGVjayA9IEV4ZWNJbnNlcnRJbmRleFR1 cGxlcyhpaXN0YXRlLT5ycmksCisJCQkJCQkJCQlpbmRleF9zbG90LAorCQkJCQkJCQkJaWlzdGF0 ZS0+ZXN0YXRlLAorCQkJCQkJCQkJZmFsc2UsCS8qIHVwZGF0ZSAqLworCQkJCQkJCQkJZmFsc2Us CS8qIG5vRHVwRXJyICovCisJCQkJCQkJCQlOVUxMLAkvKiBzcGVjQ29uZmxpY3QgKi8KKwkJCQkJ CQkJCU5JTCwJLyogYXJiaXRlckluZGV4ZXMgKi8KKwkJCQkJCQkJCWZhbHNlCS8qIG9ubHlTdW1t YXJpemluZyAqLworCQkpOworCisJLyoKKwkgKiBJZiByZWNoZWNrIGlzIHJlcXVpcmVkLCBpdCBt dXN0IGhhdmUgYmVlbiBwcmVmb3JtZWQgb24gdGhlIHNvdXJjZQorCSAqIHJlbGF0aW9uIGJ5IG5v dy4gKEFsbCB0aGUgbG9naWNhbCBjaGFuZ2VzIHdlIHByb2Nlc3MgaGVyZSBhcmUgYWxyZWFkeQor CSAqIGNvbW1pdHRlZC4pCisJICovCisJbGlzdF9mcmVlKHJlY2hlY2spOworCisJcGdzdGF0X3By b2dyZXNzX2luY3JfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX0hFQVBfVFVQTEVTX0lOU0VSVEVELCAx KTsKK30KKworc3RhdGljIHZvaWQKK2FwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJlbGF0aW9uIHJl bCwgSGVhcFR1cGxlIHR1cCwgSGVhcFR1cGxlIHR1cF90YXJnZXQsCisJCQkJCQlDb25jdXJyZW50 Q2hhbmdlICpjaGFuZ2UsIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUsCisJCQkJCQlUdXBsZVRh YmxlU2xvdCAqaW5kZXhfc2xvdCkKK3sKKwlMb2NrVHVwbGVNb2RlIGxvY2ttb2RlOworCVRNX0Zh aWx1cmVEYXRhIHRtZmQ7CisJVFVfVXBkYXRlSW5kZXhlcyB1cGRhdGVfaW5kZXhlczsKKwlUTV9S ZXN1bHQJcmVzOworCUxpc3QJICAgKnJlY2hlY2s7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBuZXcg dHVwbGUgaW50byB0aGUgbmV3IGhlYXAuICgndHVwJyBnZXRzIHRoZSBUSUQgYXNzaWduZWQKKwkg KiBoZXJlLikKKwkgKgorCSAqIERvIGl0IGxpa2UgaW4gc2ltcGxlX2hlYXBfdXBkYXRlKCksIGV4 Y2VwdCBmb3IgJ3dhbF9sb2dpY2FsJyAoYW5kCisJICogZXhjZXB0IGZvciAnd2FpdCcpLgorCSAq LworCXJlcyA9IGhlYXBfdXBkYXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2VsZiwgdHVwLAorCQkJ CQkgIEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCisJCQkJCSAgSW52YWxpZFNuYXBzaG90LAor CQkJCQkgIGZhbHNlLAkvKiBubyB3YWl0IC0gb25seSB3ZSBhcmUgZG9pbmcgY2hhbmdlcyAqLwor CQkJCQkgICZ0bWZkLCAmbG9ja21vZGUsICZ1cGRhdGVfaW5kZXhlcywKKwkJCQkJICBmYWxzZSAv KiB3YWxfbG9naWNhbCAqLyApOworCWlmIChyZXMgIT0gVE1fT2spCisJCWVyZXBvcnQoRVJST1Is IChlcnJtc2coImZhaWxlZCB0byBhcHBseSBjb25jdXJyZW50IFVQREFURSIpKSk7CisKKwlFeGVj U3RvcmVIZWFwVHVwbGUodHVwLCBpbmRleF9zbG90LCBmYWxzZSk7CisKKwlpZiAodXBkYXRlX2lu ZGV4ZXMgIT0gVFVfTm9uZSkKKwl7CisJCXJlY2hlY2sgPSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMo aWlzdGF0ZS0+cnJpLAorCQkJCQkJCQkJCWluZGV4X3Nsb3QsCisJCQkJCQkJCQkJaWlzdGF0ZS0+ ZXN0YXRlLAorCQkJCQkJCQkJCXRydWUsCS8qIHVwZGF0ZSAqLworCQkJCQkJCQkJCWZhbHNlLAkv KiBub0R1cEVyciAqLworCQkJCQkJCQkJCU5VTEwsCS8qIHNwZWNDb25mbGljdCAqLworCQkJCQkJ CQkJCU5JTCwJLyogYXJiaXRlckluZGV4ZXMgKi8KKwkJLyogb25seVN1bW1hcml6aW5nICovCisJ CQkJCQkJCQkJdXBkYXRlX2luZGV4ZXMgPT0gVFVfU3VtbWFyaXppbmcpOworCQlsaXN0X2ZyZWUo cmVjaGVjayk7CisJfQorCisJcGdzdGF0X3Byb2dyZXNzX2luY3JfcGFyYW0oUFJPR1JFU1NfUkVQ QUNLX0hFQVBfVFVQTEVTX1VQREFURUQsIDEpOworfQorCitzdGF0aWMgdm9pZAorYXBwbHlfY29u Y3VycmVudF9kZWxldGUoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKKwkJCQkJ CUNvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSkKK3sKKwlUTV9SZXN1bHQJcmVzOworCVRNX0ZhaWx1 cmVEYXRhIHRtZmQ7CisKKwkvKgorCSAqIERlbGV0ZSB0dXBsZSBmcm9tIHRoZSBuZXcgaGVhcC4K KwkgKgorCSAqIERvIGl0IGxpa2UgaW4gc2ltcGxlX2hlYXBfZGVsZXRlKCksIGV4Y2VwdCBmb3Ig J3dhbF9sb2dpY2FsJyAoYW5kCisJICogZXhjZXB0IGZvciAnd2FpdCcpLgorCSAqLworCXJlcyA9 IGhlYXBfZGVsZXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2VsZiwgR2V0Q3VycmVudENvbW1hbmRJ ZCh0cnVlKSwKKwkJCQkJICBJbnZhbGlkU25hcHNob3QsIGZhbHNlLAorCQkJCQkgICZ0bWZkLAor CQkJCQkgIGZhbHNlLAkvKiBubyB3YWl0IC0gb25seSB3ZSBhcmUgZG9pbmcgY2hhbmdlcyAqLwor CQkJCQkgIGZhbHNlIC8qIHdhbF9sb2dpY2FsICovICk7CisKKwlpZiAocmVzICE9IFRNX09rKQor CQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJmYWlsZWQgdG8gYXBwbHkgY29uY3VycmVudCBERUxF VEUiKSkpOworCisJcGdzdGF0X3Byb2dyZXNzX2luY3JfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX0hF QVBfVFVQTEVTX0RFTEVURUQsIDEpOworfQorCisvKgorICogRmluZCB0aGUgdHVwbGUgdG8gYmUg dXBkYXRlZCBvciBkZWxldGVkLgorICoKKyAqICdrZXknIGlzIGEgcHJlLWluaXRpYWxpemVkIHNj YW4ga2V5LCBpbnRvIHdoaWNoIHRoZSBmdW5jdGlvbiB3aWxsIHB1dCB0aGUKKyAqIGtleSB2YWx1 ZXMuCisgKgorICogJ3R1cF9rZXknIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUga2V5IHZhbHVl cyBmb3IgdGhlIHNjYW4uCisgKgorICogT24gZXhpdCwnKnNjYW5fcCcgY29udGFpbnMgdGhlIHNj YW4gZGVzY3JpcHRvciB1c2VkLiBUaGUgY2FsbGVyIG11c3QgY2xvc2UKKyAqIGl0IHdoZW4gaGUg bm8gbG9uZ2VyIG5lZWRzIHRoZSB0dXBsZSByZXR1cm5lZC4KKyAqLworc3RhdGljIEhlYXBUdXBs ZQorZmluZF90YXJnZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBTY2FuS2V5IGtleSwgaW50IG5rZXlz LCBIZWFwVHVwbGUgdHVwX2tleSwKKwkJCQkgIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUsCisJ CQkJICBUdXBsZVRhYmxlU2xvdCAqaWRlbnRfc2xvdCwgSW5kZXhTY2FuRGVzYyAqc2Nhbl9wKQor eworCUluZGV4U2NhbkRlc2Mgc2NhbjsKKwlGb3JtX3BnX2luZGV4IGlkZW50X2Zvcm07CisJaW50 MnZlY3RvciAqaWRlbnRfaW5ka2V5OworCUhlYXBUdXBsZQlyZXN1bHQgPSBOVUxMOworCisJLyog WFhYIG5vIGluc3RydW1lbnRhdGlvbiBmb3Igbm93ICovCisJc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihyZWwsIGlpc3RhdGUtPmlkZW50X2luZGV4LCBHZXRBY3RpdmVTbmFwc2hvdCgpLAorCQkJCQkJ ICAgTlVMTCwgbmtleXMsIDApOworCSpzY2FuX3AgPSBzY2FuOworCWluZGV4X3Jlc2NhbihzY2Fu LCBrZXksIG5rZXlzLCBOVUxMLCAwKTsKKworCS8qIEluZm8gbmVlZGVkIHRvIHJldHJpZXZlIGtl eSB2YWx1ZXMgZnJvbSBoZWFwIHR1cGxlLiAqLworCWlkZW50X2Zvcm0gPSBpaXN0YXRlLT5pZGVu dF9pbmRleC0+cmRfaW5kZXg7CisJaWRlbnRfaW5ka2V5ID0gJmlkZW50X2Zvcm0tPmluZGtleTsK KworCS8qIFVzZSB0aGUgaW5jb21pbmcgdHVwbGUgdG8gZmluYWxpemUgdGhlIHNjYW4ga2V5LiAq LworCWZvciAoaW50IGkgPSAwOyBpIDwgc2Nhbi0+bnVtYmVyT2ZLZXlzOyBpKyspCisJeworCQlT Y2FuS2V5CQllbnRyeTsKKwkJYm9vbAkJaXNudWxsOworCQlpbnQxNgkJYXR0bm9faGVhcDsKKwor CQllbnRyeSA9ICZzY2FuLT5rZXlEYXRhW2ldOworCQlhdHRub19oZWFwID0gaWRlbnRfaW5ka2V5 LT52YWx1ZXNbaV07CisJCWVudHJ5LT5za19hcmd1bWVudCA9IGhlYXBfZ2V0YXR0cih0dXBfa2V5 LAorCQkJCQkJCQkJCSAgYXR0bm9faGVhcCwKKwkJCQkJCQkJCQkgIHJlbC0+cmRfYXR0LAorCQkJ CQkJCQkJCSAgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwl9CisJaWYgKGluZGV4X2dl dG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgaWRlbnRfc2xvdCkpCisJewor CQlib29sCQlzaG91bGRGcmVlOworCisJCXJlc3VsdCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUo aWRlbnRfc2xvdCwgZmFsc2UsICZzaG91bGRGcmVlKTsKKwkJLyogVFRTT3BzQnVmZmVySGVhcFR1 cGxlIGhhcyAuZ2V0X2hlYXBfdHVwbGUgIT0gTlVMTC4gKi8KKwkJQXNzZXJ0KCFzaG91bGRGcmVl KTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogRGVjb2RlIGFuZCBhcHBseSBj b25jdXJyZW50IGNoYW5nZXMuCisgKgorICogUGFzcyByZWxfc3JjIGlmZiBpdHMgcmVsdG9hc3Ry ZWxpZCBpcyBuZWVkZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwcm9jZXNzX2NvbmN1cnJlbnRfY2hh bmdlcyhMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNQdHIgZW5kX29mX3dhbCwK KwkJCQkJCSAgIFJlbGF0aW9uIHJlbF9kc3QsIFJlbGF0aW9uIHJlbF9zcmMsIFNjYW5LZXkgaWRl bnRfa2V5LAorCQkJCQkJICAgaW50IGlkZW50X2tleV9uZW50cmllcywgSW5kZXhJbnNlcnRTdGF0 ZSAqaWlzdGF0ZSkKK3sKKwlSZXBhY2tEZWNvZGluZ1N0YXRlICpkc3RhdGU7CisKKwlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX1JFUEFDS19QSEFTRSwKKwkJCQkJCQkJIFBS T0dSRVNTX1JFUEFDS19QSEFTRV9DQVRDSF9VUCk7CisKKwlkc3RhdGUgPSAoUmVwYWNrRGVjb2Rp bmdTdGF0ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKKworCXJlcGFja19kZWNvZGVf Y29uY3VycmVudF9jaGFuZ2VzKGN0eCwgZW5kX29mX3dhbCk7CisKKwlpZiAoZHN0YXRlLT5uY2hh bmdlcyA9PSAwKQorCQlyZXR1cm47CisKKwlQR19UUlkoKTsKKwl7CisJCS8qCisJCSAqIE1ha2Ug c3VyZSB0aGF0IFRPQVNUIHZhbHVlcyBjYW4gZXZlbnR1YWxseSBiZSBhY2Nlc3NlZCB2aWEgdGhl IG9sZAorCQkgKiByZWxhdGlvbiAtIHNlZSBjb21tZW50IGluIGNvcHlfdGFibGVfZGF0YSgpLgor CQkgKi8KKwkJaWYgKHJlbF9zcmMpCisJCQlyZWxfZHN0LT5yZF90b2FzdG9pZCA9IHJlbF9zcmMt PnJkX3JlbC0+cmVsdG9hc3RyZWxpZDsKKworCQlhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoZHN0 YXRlLCByZWxfZHN0LCBpZGVudF9rZXksCisJCQkJCQkJCSBpZGVudF9rZXlfbmVudHJpZXMsIGlp c3RhdGUpOworCX0KKwlQR19GSU5BTExZKCk7CisJeworCQlpZiAocmVsX3NyYykKKwkJCXJlbF9k c3QtPnJkX3RvYXN0b2lkID0gSW52YWxpZE9pZDsKKwl9CisJUEdfRU5EX1RSWSgpOworfQorCitz dGF0aWMgSW5kZXhJbnNlcnRTdGF0ZSAqCitnZXRfaW5kZXhfaW5zZXJ0X3N0YXRlKFJlbGF0aW9u IHJlbGF0aW9uLCBPaWQgaWRlbnRfaW5kZXhfaWQpCit7CisJRVN0YXRlCSAgICplc3RhdGU7CisJ aW50CQkJaTsKKwlJbmRleEluc2VydFN0YXRlICpyZXN1bHQ7CisKKwlyZXN1bHQgPSAoSW5kZXhJ bnNlcnRTdGF0ZSAqKSBwYWxsb2MwKHNpemVvZihJbmRleEluc2VydFN0YXRlKSk7CisJZXN0YXRl ID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOworCisJcmVzdWx0LT5ycmkgPSAoUmVzdWx0UmVsSW5m byAqKSBwYWxsb2Moc2l6ZW9mKFJlc3VsdFJlbEluZm8pKTsKKwlJbml0UmVzdWx0UmVsSW5mbyhy ZXN1bHQtPnJyaSwgcmVsYXRpb24sIDAsIDAsIDApOworCUV4ZWNPcGVuSW5kaWNlcyhyZXN1bHQt PnJyaSwgZmFsc2UpOworCisJLyoKKwkgKiBGaW5kIHRoZSByZWxjYWNoZSBlbnRyeSBvZiB0aGUg aWRlbnRpdHkgaW5kZXggc28gdGhhdCB3ZSBzcGVuZCBubyBleHRyYQorCSAqIGVmZm9ydCB0byBv cGVuIC8gY2xvc2UgaXQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHJlc3VsdC0+cnJpLT5yaV9O dW1JbmRpY2VzOyBpKyspCisJeworCQlSZWxhdGlvbglpbmRfcmVsOworCisJCWluZF9yZWwgPSBy ZXN1bHQtPnJyaS0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldOworCQlpZiAoaW5kX3JlbC0+cmRf aWQgPT0gaWRlbnRfaW5kZXhfaWQpCisJCQlyZXN1bHQtPmlkZW50X2luZGV4ID0gaW5kX3JlbDsK Kwl9CisJaWYgKHJlc3VsdC0+aWRlbnRfaW5kZXggPT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwgIkZh aWxlZCB0byBvcGVuIGlkZW50aXR5IGluZGV4Iik7CisKKwkvKiBPbmx5IGluaXRpYWxpemUgZmll bGRzIG5lZWRlZCBieSBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoKS4gKi8KKwlyZXN1bHQtPmVzdGF0 ZSA9IGVzdGF0ZTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBCdWlsZCBzY2FuIGtl eSB0byBwcm9jZXNzIGxvZ2ljYWwgY2hhbmdlcy4KKyAqLworc3RhdGljIFNjYW5LZXkKK2J1aWxk X2lkZW50aXR5X2tleShPaWQgaWRlbnRfaWR4X29pZCwgUmVsYXRpb24gcmVsX3NyYywgaW50ICpu ZW50cmllcykKK3sKKwlSZWxhdGlvbglpZGVudF9pZHhfcmVsOworCUZvcm1fcGdfaW5kZXggaWRl bnRfaWR4OworCWludAkJCW4sCisJCQkJaTsKKwlTY2FuS2V5CQlyZXN1bHQ7CisKKwlBc3NlcnQo T2lkSXNWYWxpZChpZGVudF9pZHhfb2lkKSk7CisJaWRlbnRfaWR4X3JlbCA9IGluZGV4X29wZW4o aWRlbnRfaWR4X29pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpZGVudF9pZHggPSBpZGVudF9pZHhf cmVsLT5yZF9pbmRleDsKKwluID0gaWRlbnRfaWR4LT5pbmRuYXR0czsKKwlyZXN1bHQgPSAoU2Nh bktleSkgcGFsbG9jKHNpemVvZihTY2FuS2V5RGF0YSkgKiBuKTsKKwlmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKQorCXsKKwkJU2NhbktleQkJZW50cnk7CisJCWludDE2CQlyZWxhdHRubzsKKwkJRm9y bV9wZ19hdHRyaWJ1dGUgYXR0OworCQlPaWQJCQlvcGZhbWlseSwKKwkJCQkJb3BjaW50eXBlLAor CQkJCQlvcG5vLAorCQkJCQlvcGNvZGU7CisKKwkJZW50cnkgPSAmcmVzdWx0W2ldOworCQlyZWxh dHRubyA9IGlkZW50X2lkeC0+aW5ka2V5LnZhbHVlc1tpXTsKKwkJaWYgKHJlbGF0dG5vID49IDEp CisJCXsKKwkJCVR1cGxlRGVzYwlkZXNjOworCisJCQlkZXNjID0gcmVsX3NyYy0+cmRfYXR0Owor CQkJYXR0ID0gVHVwbGVEZXNjQXR0cihkZXNjLCByZWxhdHRubyAtIDEpOworCQl9CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJVbmV4cGVjdGVkIGF0dHJpYnV0ZSBudW1iZXIgJWQgaW4gaW5kZXgi LCByZWxhdHRubyk7CisKKwkJb3BmYW1pbHkgPSBpZGVudF9pZHhfcmVsLT5yZF9vcGZhbWlseVtp XTsKKwkJb3BjaW50eXBlID0gaWRlbnRfaWR4X3JlbC0+cmRfb3BjaW50eXBlW2ldOworCQlvcG5v ID0gZ2V0X29wZmFtaWx5X21lbWJlcihvcGZhbWlseSwgb3BjaW50eXBlLCBvcGNpbnR5cGUsCisJ CQkJCQkJCSAgIEJURXF1YWxTdHJhdGVneU51bWJlcik7CisKKwkJaWYgKCFPaWRJc1ZhbGlkKG9w bm8pKQorCQkJZWxvZyhFUlJPUiwgIkZhaWxlZCB0byBmaW5kID0gb3BlcmF0b3IgZm9yIHR5cGUg JXUiLCBvcGNpbnR5cGUpOworCisJCW9wY29kZSA9IGdldF9vcGNvZGUob3Bubyk7CisJCWlmICgh T2lkSXNWYWxpZChvcGNvZGUpKQorCQkJZWxvZyhFUlJPUiwgIkZhaWxlZCB0byBmaW5kID0gb3Bl cmF0b3IgZm9yIG9wZXJhdG9yICV1Iiwgb3Bubyk7CisKKwkJLyogSW5pdGlhbGl6ZSBldmVyeXRo aW5nIGJ1dCBhcmd1bWVudC4gKi8KKwkJU2NhbktleUluaXQoZW50cnksCisJCQkJCWkgKyAxLAor CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIG9wY29kZSwKKwkJCQkJKERhdHVtKSBOVUxMKTsK KwkJZW50cnktPnNrX2NvbGxhdGlvbiA9IGF0dC0+YXR0Y29sbGF0aW9uOworCX0KKwlpbmRleF9j bG9zZShpZGVudF9pZHhfcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJKm5lbnRyaWVzID0gbjsK KwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorZnJlZV9pbmRleF9pbnNlcnRfc3Rh dGUoSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSkKK3sKKwlFeGVjQ2xvc2VJbmRpY2VzKGlpc3Rh dGUtPnJyaSk7CisJRnJlZUV4ZWN1dG9yU3RhdGUoaWlzdGF0ZS0+ZXN0YXRlKTsKKwlwZnJlZShp aXN0YXRlLT5ycmkpOworCXBmcmVlKGlpc3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorY2xlYW51 cF9sb2dpY2FsX2RlY29kaW5nKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCkKK3sKKwlSZXBh Y2tEZWNvZGluZ1N0YXRlICpkc3RhdGU7CisKKwlkc3RhdGUgPSAoUmVwYWNrRGVjb2RpbmdTdGF0 ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3QoZHN0YXRlLT50c3Nsb3QpOworCUZyZWVUdXBsZURlc2MoZHN0YXRlLT50dXBkZXNj X2NoYW5nZSk7CisJRnJlZVR1cGxlRGVzYyhkc3RhdGUtPnR1cGRlc2MpOworCXR1cGxlc3RvcmVf ZW5kKGRzdGF0ZS0+dHN0b3JlKTsKKworCUZyZWVEZWNvZGluZ0NvbnRleHQoY3R4KTsKK30KKwor LyoKKyAqIFRoZSBmaW5hbCBzdGVwcyBvZiByZWJ1aWxkX3JlbGF0aW9uKCkgZm9yIGNvbmN1cnJl bnQgcHJvY2Vzc2luZy4KKyAqCisgKiBPbiBlbnRyeSwgTmV3SGVhcCBpcyBsb2NrZWQgaW4gQWNj ZXNzRXhjbHVzaXZlTG9jayBtb2RlLiBPbGRIZWFwIGFuZCBpdHMKKyAqIGNsdXN0ZXJpbmcgaW5k ZXggKGlmIG9uZSBpcyBwYXNzZWQpIGFyZSBzdGlsbCBsb2NrZWQgaW4gYSBtb2RlIHRoYXQgYWxs b3dzCisgKiBjb25jdXJyZW50IGRhdGEgY2hhbmdlcy4gT24gZXhpdCwgYm90aCB0YWJsZXMgYW5k IHRoZWlyIGluZGV4ZXMgYXJlIGNsb3NlZCwKKyAqIGJ1dCBsb2NrZWQgaW4gQWNjZXNzRXhjbHVz aXZlTG9jayBtb2RlLgorICovCitzdGF0aWMgdm9pZAorcmVidWlsZF9yZWxhdGlvbl9maW5pc2hf Y29uY3VycmVudChSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLAorCQkJCQkJCQkg ICBSZWxhdGlvbiBjbF9pbmRleCwKKwkJCQkJCQkJICAgTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LAorCQkJCQkJCQkgICBib29sIHN3YXBfdG9hc3RfYnlfY29udGVudCwKKwkJCQkJCQkJICAg VHJhbnNhY3Rpb25JZCBmcm96ZW5YaWQsCisJCQkJCQkJCSAgIE11bHRpWGFjdElkIGN1dG9mZk11 bHRpKQoreworCUxPQ0tNT0RFCWxvY2ttb2RlX29sZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7 CisJTGlzdAkgICAqaW5kX29pZHNfbmV3OworCU9pZAkJCW9sZF90YWJsZV9vaWQgPSBSZWxhdGlv bkdldFJlbGlkKE9sZEhlYXApOworCU9pZAkJCW5ld190YWJsZV9vaWQgPSBSZWxhdGlvbkdldFJl bGlkKE5ld0hlYXApOworCUxpc3QJICAgKmluZF9vaWRzX29sZCA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KE9sZEhlYXApOworCUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMjsKKwljaGFyCQlyZWxw ZXJzaXN0ZW5jZTsKKwlib29sCQlpc19zeXN0ZW1fY2F0YWxvZzsKKwlPaWQJCQlpZGVudF9pZHhf b2xkLAorCQkJCWlkZW50X2lkeF9uZXc7CisJSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZTsKKwlT Y2FuS2V5CQlpZGVudF9rZXk7CisJaW50CQkJaWRlbnRfa2V5X25lbnRyaWVzOworCVhMb2dSZWNQ dHIJd2FsX2luc2VydF9wdHIsCisJCQkJZW5kX29mX3dhbDsKKwljaGFyCQlkdW1teV9yZWNfZGF0 YSA9ICdcMCc7CisJUmVsYXRpb24gICAqaW5kX3JlZnMsCisJCQkgICAqaW5kX3JlZnNfcDsKKwlp bnQJCQluaW5kOworCisJLyogTGlrZSBpbiBjbHVzdGVyX3JlbCgpLiAqLworCWxvY2ttb2RlX29s ZCA9IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKKwlBc3NlcnQoQ2hlY2tSZWxhdGlvbkxvY2tl ZEJ5TWUoT2xkSGVhcCwgbG9ja21vZGVfb2xkLCBmYWxzZSkpOworCUFzc2VydChjbF9pbmRleCA9 PSBOVUxMIHx8CisJCSAgIENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKGNsX2luZGV4LCBsb2NrbW9k ZV9vbGQsIGZhbHNlKSk7CisJLyogVGhpcyBpcyBleHBlY3RlZCBmcm9tIHRoZSBjYWxsZXIuICov CisJQXNzZXJ0KENoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKE5ld0hlYXAsIEFjY2Vzc0V4Y2x1c2l2 ZUxvY2ssIGZhbHNlKSk7CisKKwlpZGVudF9pZHhfb2xkID0gUmVsYXRpb25HZXRSZXBsaWNhSW5k ZXgoT2xkSGVhcCk7CisKKwkvKgorCSAqIFVubGlrZSB0aGUgZXhjbHVzaXZlIGNhc2UsIHdlIGJ1 aWxkIG5ldyBpbmRleGVzIGZvciB0aGUgbmV3IHJlbGF0aW9uCisJICogcmF0aGVyIHRoYW4gc3dh cHBpbmcgdGhlIHN0b3JhZ2UgYW5kIHJlaW5kZXhpbmcgdGhlIG9sZCByZWxhdGlvbi4gVGhlCisJ ICogcG9pbnQgaXMgdGhhdCB0aGUgaW5kZXggYnVpbGQgY2FuIHRha2Ugc29tZSB0aW1lLCBzbyB3 ZSBkbyBpdCBiZWZvcmUgd2UKKwkgKiBnZXQgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUgb2xk IGhlYXAgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3Qgc3dhcAorCSAqIHRoZSBoZWFwIHN0b3JhZ2Ug eWV0LgorCSAqCisJICogaW5kZXhfY3JlYXRlKCkgd2lsbCBsb2NrIHRoZSBuZXcgaW5kZXhlcyB1 c2luZyBBY2Nlc3NFeGNsdXNpdmVMb2NrIC0gbm8KKwkgKiBuZWVkIHRvIGNoYW5nZSB0aGF0Lgor CSAqCisJICogV2UgYXNzdW1lIHRoYXQgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrIG9uIHRoZSB0 YWJsZSBwcmV2ZW50cyBhbnlvbmUKKwkgKiBmcm9tIGRyb3BwaW5nIHRoZSBleGlzdGluZyBpbmRl eGVzIG9yIGFkZGluZyBuZXcgb25lcywgc28gdGhlIGxpc3RzIG9mCisJICogb2xkIGFuZCBuZXcg aW5kZXhlcyBzaG91bGQgbWF0Y2ggYXQgdGhlIHN3YXAgdGltZS4gT24gdGhlIG90aGVyIGhhbmQg d2UKKwkgKiBkbyBub3QgYmxvY2sgQUxURVIgSU5ERVggY29tbWFuZHMgdGhhdCBkbyBub3QgcmVx dWlyZSB0YWJsZSBsb2NrIChlLmcuCisJICogQUxURVIgSU5ERVggLi4uIFNFVCAuLi4pLgorCSAq CisJICogWFhYIFNob3VsZCB3ZSBjaGVjayBhIHRoZSBlbmQgb2Ygb3VyIHdvcmsgaWYgYW5vdGhl ciB0cmFuc2FjdGlvbgorCSAqIGV4ZWN1dGVkIHN1Y2ggYSBjb21tYW5kIGFuZCBpc3N1ZSBhIE5P VElDRSB0aGF0IHdlIG1pZ2h0IGhhdmUgZGlzY2FyZGVkCisJICogaXRzIGVmZmVjdHM/IChGb3Ig ZXhhbXBsZSwgc29tZW9uZSBjaGFuZ2VzIHN0b3JhZ2UgcGFyYW1ldGVyIGFmdGVyIHdlCisJICog aGF2ZSBjcmVhdGVkIHRoZSBuZXcgaW5kZXgsIHRoZSBuZXcgdmFsdWUgb2YgdGhhdCBwYXJhbWV0 ZXIgaXMgbG9zdC4pCisJICogQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGxvY2sgYWxsIHRoZSBpbmRl eGVzIG5vdyBpbiBhIG1vZGUgdGhhdCBibG9ja3MKKwkgKiBhbGwgdGhlIEFMVEVSIElOREVYIGNv bW1hbmRzIChTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgPyksIGFuZCBrZWVwCisJICogdGhlbSBs b2NrZWQgdGlsbCB0aGUgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbnMuIFRoYXQgbWlnaHQgaW5jcmVh c2UgdGhlCisJICogcmlzayBvZiBkZWFkbG9jayBkdXJpbmcgdGhlIGxvY2sgdXBncmFkZSBiZWxv dywgaG93ZXZlciBTRUxFQ1QgLyBETUwKKwkgKiBxdWVyaWVzIHNob3VsZCBub3QgYmUgaW52b2x2 ZWQgaW4gc3VjaCBhIGRlYWRsb2NrLgorCSAqLworCWluZF9vaWRzX25ldyA9IGJ1aWxkX25ld19p bmRleGVzKE5ld0hlYXAsIE9sZEhlYXAsIGluZF9vaWRzX29sZCk7CisKKwkvKgorCSAqIFByb2Nl c3Npbmcgc2hvdWxkbid0IHN0YXJ0IHcvbyB2YWxpZCBpZGVudGl0eSBpbmRleC4KKwkgKi8KKwlB c3NlcnQoT2lkSXNWYWxpZChpZGVudF9pZHhfb2xkKSk7CisKKwkvKiBGaW5kICJpZGVudGl0eSBp bmRleCIgb24gdGhlIG5ldyByZWxhdGlvbi4gKi8KKwlpZGVudF9pZHhfbmV3ID0gSW52YWxpZE9p ZDsKKwlmb3Jib3RoKGxjLCBpbmRfb2lkc19vbGQsIGxjMiwgaW5kX29pZHNfbmV3KQorCXsKKwkJ T2lkCQkJaW5kX29sZCA9IGxmaXJzdF9vaWQobGMpOworCQlPaWQJCQlpbmRfbmV3ID0gbGZpcnN0 X29pZChsYzIpOworCisJCWlmIChpZGVudF9pZHhfb2xkID09IGluZF9vbGQpCisJCXsKKwkJCWlk ZW50X2lkeF9uZXcgPSBpbmRfbmV3OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFPaWRJc1Zh bGlkKGlkZW50X2lkeF9uZXcpKQorCisJCS8qCisJCSAqIFNob3VsZCBub3QgaGFwcGVuLCBnaXZl biBvdXIgbG9jayBvbiB0aGUgb2xkIHJlbGF0aW9uLgorCQkgKi8KKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJybXNnKCJJZGVudGl0eSBpbmRleCBtaXNzaW5nIG9uIHRoZSBuZXcgcmVsYXRpb24i KSkpOworCisJLyogRXhlY3V0b3Igc3RhdGUgdG8gdXBkYXRlIGluZGV4ZXMuICovCisJaWlzdGF0 ZSA9IGdldF9pbmRleF9pbnNlcnRfc3RhdGUoTmV3SGVhcCwgaWRlbnRfaWR4X25ldyk7CisKKwkv KgorCSAqIEJ1aWxkIHNjYW4ga2V5IHRoYXQgd2UnbGwgdXNlIHRvIGxvb2sgZm9yIHJvd3MgdG8g YmUgdXBkYXRlZCAvIGRlbGV0ZWQKKwkgKiBkdXJpbmcgbG9naWNhbCBkZWNvZGluZy4KKwkgKi8K KwlpZGVudF9rZXkgPSBidWlsZF9pZGVudGl0eV9rZXkoaWRlbnRfaWR4X25ldywgT2xkSGVhcCwg JmlkZW50X2tleV9uZW50cmllcyk7CisKKwkvKgorCSAqIER1cmluZyB0ZXN0aW5nLCB3YWl0IGZv ciBhbm90aGVyIGJhY2tlbmQgdG8gcGVyZm9ybSBjb25jdXJyZW50IGRhdGEKKwkgKiBjaGFuZ2Vz IHdoaWNoIHdlIHdpbGwgcHJvY2VzcyBiZWxvdy4KKwkgKi8KKwlJTkpFQ1RJT05fUE9JTlQoInJl cGFjay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2siLCBOVUxMKTsKKworCS8qCisJICogRmx1c2gg YWxsIFdBTCByZWNvcmRzIGluc2VydGVkIHNvIGZhciAocG9zc2libHkgZXhjZXB0IGZvciB0aGUg bGFzdAorCSAqIGluY29tcGxldGUgcGFnZSwgc2VlIEdldEluc2VydFJlY1B0ciksIHRvIG1pbmlt aXplIHRoZSBhbW91bnQgb2YgZGF0YQorCSAqIHdlIG5lZWQgdG8gZmx1c2ggd2hpbGUgaG9sZGlu ZyBleGNsdXNpdmUgbG9jayBvbiB0aGUgc291cmNlIHRhYmxlLgorCSAqLworCXdhbF9pbnNlcnRf cHRyID0gR2V0SW5zZXJ0UmVjUHRyKCk7CisJWExvZ0ZsdXNoKHdhbF9pbnNlcnRfcHRyKTsKKwll bmRfb2Zfd2FsID0gR2V0Rmx1c2hSZWNQdHIoTlVMTCk7CisKKwkvKgorCSAqIEFwcGx5IGNvbmN1 cnJlbnQgY2hhbmdlcyBmaXJzdCB0aW1lLCB0byBtaW5pbWl6ZSB0aGUgdGltZSB3ZSBuZWVkIHRv CisJICogaG9sZCBBY2Nlc3NFeGNsdXNpdmVMb2NrLiAoUXVpdGUgc29tZSBhbW91bnQgb2YgV0FM IGNvdWxkIGhhdmUgYmVlbgorCSAqIHdyaXR0ZW4gZHVyaW5nIHRoZSBkYXRhIGNvcHlpbmcgYW5k IGluZGV4IGNyZWF0aW9uLikKKwkgKi8KKwlwcm9jZXNzX2NvbmN1cnJlbnRfY2hhbmdlcyhjdHgs IGVuZF9vZl93YWwsIE5ld0hlYXAsCisJCQkJCQkJICAgc3dhcF90b2FzdF9ieV9jb250ZW50ID8g T2xkSGVhcCA6IE5VTEwsCisJCQkJCQkJICAgaWRlbnRfa2V5LCBpZGVudF9rZXlfbmVudHJpZXMs IGlpc3RhdGUpOworCisJLyoKKwkgKiBBY3F1aXJlIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sgb24gdGhl IHRhYmxlLCBpdHMgVE9BU1QgcmVsYXRpb24gKGlmIHRoZXJlCisJICogaXMgb25lKSwgYWxsIGl0 cyBpbmRleGVzLCBzbyB0aGF0IHdlIGNhbiBzd2FwIHRoZSBmaWxlcy4KKwkgKgorCSAqIEJlZm9y ZSB0aGF0LCB1bmxvY2sgdGhlIGluZGV4IHRlbXBvcmFyaWx5IHRvIGF2b2lkIGRlYWRsb2NrIGlu IGNhc2UKKwkgKiBhbm90aGVyIHRyYW5zYWN0aW9uIGlzIHRyeWluZyB0byBsb2NrIGl0IHdoaWxl IGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlCisJICogdGFibGUuCisJICovCisJaWYgKGNsX2luZGV4 KQorCXsKKwkJaW5kZXhfY2xvc2UoY2xfaW5kZXgsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7 CisJCWNsX2luZGV4ID0gTlVMTDsKKwl9CisJLyogRm9yIHRoZSBzYW1lIHJlYXNvbiwgdW5sb2Nr IFRPQVNUIHJlbGF0aW9uLiAqLworCWlmIChPbGRIZWFwLT5yZF9yZWwtPnJlbHRvYXN0cmVsaWQp CisJCUxvY2tSZWxhdGlvbk9pZChPbGRIZWFwLT5yZF9yZWwtPnJlbHRvYXN0cmVsaWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOworCS8qIEZpbmFsbHkgbG9jayB0aGUgdGFibGUgKi8KKwlMb2NrUmVs YXRpb25PaWQob2xkX3RhYmxlX29pZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkvKgorCSAq IExvY2sgYWxsIGluZGV4ZXMgbm93LCBub3Qgb25seSB0aGUgY2x1c3RlcmluZyBvbmU6IGFsbCBp bmRleGVzIG5lZWQgdG8KKwkgKiBoYXZlIHRoZWlyIGZpbGVzIHN3YXBwZWQuIFdoaWxlIGRvaW5n IHRoYXQsIHN0b3JlIHRoZWlyIHJlbGF0aW9uCisJICogcmVmZXJlbmNlcyBpbiBhbiBhcnJheSwg dG8gaGFuZGxlIHByZWRpY2F0ZSBsb2NrcyBiZWxvdy4KKwkgKi8KKwlpbmRfcmVmc19wID0gaW5k X3JlZnMgPSBwYWxsb2NfYXJyYXkoUmVsYXRpb24sIGxpc3RfbGVuZ3RoKGluZF9vaWRzX29sZCkp OworCW5pbmQgPSAwOworCWZvcmVhY2gobGMsIGluZF9vaWRzX29sZCkKKwl7CisJCU9pZAkJCWlu ZF9vaWQ7CisJCVJlbGF0aW9uCWluZGV4OworCisJCWluZF9vaWQgPSBsZmlyc3Rfb2lkKGxjKTsK KwkJaW5kZXggPSBpbmRleF9vcGVuKGluZF9vaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJ CS8qCisJCSAqIFRPRE8gMSkgRG8gd2UgbmVlZCB0byBjaGVjayBpZiBBTFRFUiBJTkRFWCB3YXMg ZXhlY3V0ZWQgc2luY2UgdGhlCisJCSAqIG5ldyBpbmRleCB3YXMgY3JlYXRlZCBpbiBidWlsZF9u ZXdfaW5kZXhlcygpPyAyKSBTcGVjaWZpY2FsbHkgZm9yCisJCSAqIHRoZSBjbHVzdGVyaW5nIGlu ZGV4LCBzaG91bGQgY2hlY2tfaW5kZXhfaXNfY2x1c3RlcmFibGUoKSBiZSBjYWxsZWQKKwkJICog aGVyZT8gKE5vdCBzdXJlIGFib3V0IHRoZSBsYXR0ZXI6IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j ayBvbiB0aGUKKwkJICogdGFibGUgcHJvYmFibHkgYmxvY2tzIGFsbCBjb21tYW5kcyB0aGF0IGFm ZmVjdCB0aGUgcmVzdWx0IG9mCisJCSAqIGNoZWNrX2luZGV4X2lzX2NsdXN0ZXJhYmxlKCkuKQor CQkgKi8KKwkJKmluZF9yZWZzX3AgPSBpbmRleDsKKwkJaW5kX3JlZnNfcCsrOworCQluaW5kKys7 CisJfQorCisJLyoKKwkgKiBJbiBhZGRpdGlvbiwgbG9jayB0aGUgT2xkSGVhcCdzIFRPQVNUIHJl bGF0aW9uIGV4Y2x1c2l2ZWx5IC0gYWdhaW4sIHRoZQorCSAqIGxvY2sgaXMgbmVlZGVkIHRvIHN3 YXAgdGhlIGZpbGVzLgorCSAqLworCWlmIChPaWRJc1ZhbGlkKE9sZEhlYXAtPnJkX3JlbC0+cmVs dG9hc3RyZWxpZCkpCisJCUxvY2tSZWxhdGlvbk9pZChPbGRIZWFwLT5yZF9yZWwtPnJlbHRvYXN0 cmVsaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBUdXBsZXMgYW5kIHBhZ2Vz IG9mIHRoZSBvbGQgaGVhcCB3aWxsIGJlIGdvbmUsIGJ1dCB0aGUgaGVhcCB3aWxsIHN0YXkuCisJ ICovCisJVHJhbnNmZXJQcmVkaWNhdGVMb2Nrc1RvSGVhcFJlbGF0aW9uKE9sZEhlYXApOworCS8q IFRoZSBzYW1lIGZvciBpbmRleGVzLiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbmluZDsgaSsr KQorCXsKKwkJUmVsYXRpb24JaW5kZXggPSBpbmRfcmVmc1tpXTsKKworCQlUcmFuc2ZlclByZWRp Y2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oaW5kZXgpOworCisJCS8qCisJCSAqIFJlZmVyZW5jZXMg dG8gaW5kZXhlcyBvbiB0aGUgb2xkIHJlbGF0aW9uIGFyZSBub3QgbmVlZGVkIGFueW1vcmUsCisJ CSAqIGhvd2V2ZXIgbG9ja3Mgc3RheSB0aWxsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLgor CQkgKi8KKwkJaW5kZXhfY2xvc2UoaW5kZXgsIE5vTG9jayk7CisJfQorCXBmcmVlKGluZF9yZWZz KTsKKworCS8qCisJICogRmx1c2ggYW55dGhpbmcgd2Ugc2VlIGluIFdBTCwgdG8gbWFrZSBzdXJl IHRoYXQgYWxsIGNoYW5nZXMgY29tbWl0dGVkCisJICogd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZv ciB0aGUgZXhjbHVzaXZlIGxvY2sgYXJlIGF2YWlsYWJsZSBmb3IKKwkgKiBkZWNvZGluZy4gVGhp cyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBpZiBhbGwgYmFja2VuZHMgaGFkCisJICogc3luY2hy b25vdXNfY29tbWl0IHNldCwgYnV0IHdlIGNhbid0IHJlbHkgb24gdGhpcyBzZXR0aW5nLgorCSAq CisJICogVW5mb3J0dW5hdGVseSwgR2V0SW5zZXJ0UmVjUHRyKCkgbWF5IGxhZyBiZWhpbmQgdGhl IGFjdHVhbCBpbnNlcnQKKwkgKiBwb3NpdGlvbiwgYW5kIEdldExhc3RJbXBvcnRhbnRSZWNQdHIo KSBwb2ludHMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0CisJICogcmVjb3JkIHJhdGhlciB0aGFu IGF0IHRoZSBlbmQuIFRodXMgdGhlIHNpbXBsZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlCisJICog aW5zZXJ0IHBvc2l0aW9uIGlzIHRvIGluc2VydCBhIGR1bW15IHJlY29yZCBhbmQgdXNlIGl0cyBM U04uCisJICoKKwkgKiBYWFggQ29uc2lkZXIgdXNpbmcgR2V0TGFzdEltcG9ydGFudFJlY1B0cigp IGFuZCBhZGRpbmcgdGhlIHNpemUgb2YgdGhlCisJICogbGFzdCByZWNvcmQgKHBsdXMgdGhlIHRv dGFsIHNpemUgb2YgYWxsIHRoZSBwYWdlIGhlYWRlcnMgdGhlIHJlY29yZAorCSAqIHNwYW5zKT8K KwkgKi8KKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKCZkdW1teV9yZWNf ZGF0YSwgMSk7CisJd2FsX2luc2VydF9wdHIgPSBYTG9nSW5zZXJ0KFJNX1hMT0dfSUQsIFhMT0df Tk9PUCk7CisJWExvZ0ZsdXNoKHdhbF9pbnNlcnRfcHRyKTsKKwllbmRfb2Zfd2FsID0gR2V0Rmx1 c2hSZWNQdHIoTlVMTCk7CisKKwkvKiBBcHBseSB0aGUgY29uY3VycmVudCBjaGFuZ2VzIGFnYWlu LiAqLworCXByb2Nlc3NfY29uY3VycmVudF9jaGFuZ2VzKGN0eCwgZW5kX29mX3dhbCwgTmV3SGVh cCwKKwkJCQkJCQkgICBzd2FwX3RvYXN0X2J5X2NvbnRlbnQgPyBPbGRIZWFwIDogTlVMTCwKKwkJ CQkJCQkgICBpZGVudF9rZXksIGlkZW50X2tleV9uZW50cmllcywgaWlzdGF0ZSk7CisKKwkvKiBS ZW1lbWJlciBpbmZvIGFib3V0IHJlbCBiZWZvcmUgY2xvc2luZyBPbGRIZWFwICovCisJcmVscGVy c2lzdGVuY2UgPSBPbGRIZWFwLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOworCWlzX3N5c3RlbV9j YXRhbG9nID0gSXNTeXN0ZW1SZWxhdGlvbihPbGRIZWFwKTsKKworCXBnc3RhdF9wcm9ncmVzc191 cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JFU1NfUkVQ QUNLX1BIQVNFX1NXQVBfUkVMX0ZJTEVTKTsKKworCS8qCisJICogRXZlbiBTaGFyZVVwZGF0ZUV4 Y2x1c2l2ZUxvY2sgc2hvdWxkIGhhdmUgcHJldmVudGVkIG90aGVycyBmcm9tCisJICogY3JlYXRp bmcgLyBkcm9wcGluZyBpbmRleGVzIChldmVuIHVzaW5nIHRoZSBDT05DVVJSRU5UTFkgb3B0aW9u KSwgc28gd2UKKwkgKiBkbyBub3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsaXN0cyBtYXRj aC4KKwkgKi8KKwlmb3Jib3RoKGxjLCBpbmRfb2lkc19vbGQsIGxjMiwgaW5kX29pZHNfbmV3KQor CXsKKwkJT2lkCQkJaW5kX29sZCA9IGxmaXJzdF9vaWQobGMpOworCQlPaWQJCQlpbmRfbmV3ID0g bGZpcnN0X29pZChsYzIpOworCQlPaWQJCQltYXBwZWRfdGFibGVzWzRdOworCisJCS8qIFplcm8g b3V0IHBvc3NpYmxlIHJlc3VsdHMgZnJvbSBzd2FwcGVkX3JlbGF0aW9uX2ZpbGVzICovCisJCW1l bXNldChtYXBwZWRfdGFibGVzLCAwLCBzaXplb2YobWFwcGVkX3RhYmxlcykpOworCisJCXN3YXBf cmVsYXRpb25fZmlsZXMoaW5kX29sZCwgaW5kX25ldywKKwkJCQkJCQkob2xkX3RhYmxlX29pZCA9 PSBSZWxhdGlvblJlbGF0aW9uSWQpLAorCQkJCQkJCXN3YXBfdG9hc3RfYnlfY29udGVudCwKKwkJ CQkJCQl0cnVlLAorCQkJCQkJCUludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJCQkJCUludmFsaWRN dWx0aVhhY3RJZCwKKwkJCQkJCQltYXBwZWRfdGFibGVzKTsKKworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKworCQkvKgorCQkgKiBDb25jdXJyZW50IHByb2Nlc3NpbmcgaXMgbm90IHN1cHBv cnRlZCBmb3Igc3lzdGVtIHJlbGF0aW9ucywgc28KKwkJICogdGhlcmUgc2hvdWxkIGJlIG5vIG1h cHBlZCB0YWJsZXMuCisJCSAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKwkJCUFz c2VydChtYXBwZWRfdGFibGVzW2ldID09IDApOworI2VuZGlmCisJfQorCisJLyogVGhlIG5ldyBp bmRleGVzIG11c3QgYmUgdmlzaWJsZSBmb3IgZGVsZXRpb24uICovCisJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKKworCS8qIENsb3NlIHRoZSBvbGQgaGVhcCBidXQga2VlcCBsb2NrIHVudGls IHRyYW5zYWN0aW9uIGNvbW1pdC4gKi8KKwl0YWJsZV9jbG9zZShPbGRIZWFwLCBOb0xvY2spOwor CS8qIENsb3NlIHRoZSBuZXcgaGVhcC4gKFdlIGRpZG4ndCBoYXZlIHRvIG9wZW4gaXRzIGluZGV4 ZXMpLiAqLworCXRhYmxlX2Nsb3NlKE5ld0hlYXAsIE5vTG9jayk7CisKKwkvKiBDbGVhbnVwIHdo YXQgd2UgZG9uJ3QgbmVlZCBhbnltb3JlLiAoQW5kIGNsb3NlIHRoZSBpZGVudGl0eSBpbmRleC4p ICovCisJcGZyZWUoaWRlbnRfa2V5KTsKKwlmcmVlX2luZGV4X2luc2VydF9zdGF0ZShpaXN0YXRl KTsKKworCS8qCisJICogU3dhcCB0aGUgcmVsYXRpb25zIGFuZCB0aGVpciBUT0FTVCByZWxhdGlv bnMgYW5kIFRPQVNUIGluZGV4ZXMuIFRoaXMKKwkgKiBhbHNvIGRyb3BzIHRoZSBuZXcgcmVsYXRp b24gYW5kIGl0cyBpbmRleGVzLgorCSAqCisJICogKFN5c3RlbSBjYXRhbG9ncyBhcmUgY3VycmVu dGx5IG5vdCBzdXBwb3J0ZWQuKQorCSAqLworCUFzc2VydCghaXNfc3lzdGVtX2NhdGFsb2cpOwor CWZpbmlzaF9oZWFwX3N3YXAob2xkX3RhYmxlX29pZCwgbmV3X3RhYmxlX29pZCwKKwkJCQkJIGlz X3N5c3RlbV9jYXRhbG9nLAorCQkJCQkgc3dhcF90b2FzdF9ieV9jb250ZW50LAorCQkJCQkgZmFs c2UsIHRydWUsIGZhbHNlLAorCQkJCQkgZnJvemVuWGlkLCBjdXRvZmZNdWx0aSwKKwkJCQkJIHJl bHBlcnNpc3RlbmNlKTsKK30KKworLyoKKyAqIEJ1aWxkIGluZGV4ZXMgb24gTmV3SGVhcCBhY2Nv cmRpbmcgdG8gdGhvc2Ugb24gT2xkSGVhcC4KKyAqCisgKiBPbGRJbmRleGVzIGlzIHRoZSBsaXN0 IG9mIGluZGV4IE9JRHMgb24gT2xkSGVhcC4KKyAqCisgKiBBIGxpc3Qgb2YgT0lEcyBvZiB0aGUg Y29ycmVzcG9uZGluZyBpbmRleGVzIGNyZWF0ZWQgb24gTmV3SGVhcCBpcworICogcmV0dXJuZWQu IFRoZSBvcmRlciBvZiBpdGVtcyBkb2VzIG1hdGNoLCBzbyB3ZSBjYW4gdXNlIHRoZXNlIGFycmF5 cyB0byBzd2FwCisgKiBpbmRleCBzdG9yYWdlLgorICovCitzdGF0aWMgTGlzdCAqCitidWlsZF9u ZXdfaW5kZXhlcyhSZWxhdGlvbiBOZXdIZWFwLCBSZWxhdGlvbiBPbGRIZWFwLCBMaXN0ICpPbGRJ bmRleGVzKQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwor CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJ CQkJCQkgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1JFQlVJTERfSU5ERVgpOworCisJZm9yZWFjaChs YywgT2xkSW5kZXhlcykKKwl7CisJCU9pZAkJCWluZF9vaWQsCisJCQkJCWluZF9vaWRfbmV3Owor CQljaGFyCSAgICpuZXdOYW1lOworCQlSZWxhdGlvbglpbmQ7CisKKwkJaW5kX29pZCA9IGxmaXJz dF9vaWQobGMpOworCQlpbmQgPSBpbmRleF9vcGVuKGluZF9vaWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJbmV3TmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShnZXRfcmVsX25hbWUoaW5kX29pZCks CisJCQkJCQkJCQkgTlVMTCwKKwkJCQkJCQkJCSAicmVwYWNrbmV3IiwKKwkJCQkJCQkJCSBnZXRf cmVsX25hbWVzcGFjZShpbmQtPnJkX2luZGV4LT5pbmRyZWxpZCksCisJCQkJCQkJCQkgZmFsc2Up OworCQlpbmRfb2lkX25ldyA9IGluZGV4X2NyZWF0ZV9jb3B5KE5ld0hlYXAsIGluZF9vaWQsCisJ CQkJCQkJCQkJaW5kLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UsIG5ld05hbWUsCisJCQkJCQkJCQkJ ZmFsc2UpOworCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIGluZF9vaWRfbmV3KTsKKwor CQlpbmRleF9jbG9zZShpbmQsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwppbmRleCAxODhlMjZmMGU2ZS4uNzFiNzNjMjFlYmYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTkwNCw3ICs5MDQsNyBAQCByZWZyZXNoX2J5X21h dGNoX21lcmdlKE9pZCBtYXR2aWV3T2lkLCBPaWQgdGVtcE9pZCwgT2lkIHJlbG93bmVyLAogc3Rh dGljIHZvaWQKIHJlZnJlc2hfYnlfaGVhcF9zd2FwKE9pZCBtYXR2aWV3T2lkLCBPaWQgT0lETmV3 SGVhcCwgY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKLQlmaW5pc2hfaGVhcF9zd2FwKG1hdHZpZXdP aWQsIE9JRE5ld0hlYXAsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKKwlmaW5pc2hfaGVhcF9z d2FwKG1hdHZpZXdPaWQsIE9JRE5ld0hlYXAsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1 ZSwKIAkJCQkJIFJlY2VudFhtaW4sIFJlYWROZXh0TXVsdGlYYWN0SWQoKSwgcmVscGVyc2lzdGVu Y2UpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDA4MmEzNTc1ZDYyLi5jNzlm NWIxZGMwZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTU5ODksNiArNTk4OSw3IEBA IEFUUmV3cml0ZVRhYmxlcyhBbHRlclRhYmxlU3RtdCAqcGFyc2V0cmVlLCBMaXN0ICoqd3F1ZXVl LCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJCWZpbmlzaF9oZWFwX3N3YXAodGFiLT5yZWxpZCwgT0lE TmV3SGVhcCwKIAkJCQkJCQkgZmFsc2UsIGZhbHNlLCB0cnVlLAogCQkJCQkJCSAhT2lkSXNWYWxp ZCh0YWItPm5ld1RhYmxlU3BhY2UpLAorCQkJCQkJCSB0cnVlLAogCQkJCQkJCSBSZWNlbnRYbWlu LAogCQkJCQkJCSBSZWFkTmV4dE11bHRpWGFjdElkKCksCiAJCQkJCQkJIHBlcnNpc3RlbmNlKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtLmMKaW5kZXggODg2M2FkMGU4YmQuLjZkZTlkMGJhMzlkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYwpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIHZhY190cnVuY2F0 ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAogCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCBs YXN0U2FuZUZyb3plblhpZCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIGxhc3RTYW5lTWluTXVsdGkp Owogc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwg VmFjdXVtUGFyYW1zIHBhcmFtcywKLQkJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5KTsKKwkJCQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LCBib29sIGlzVG9w TGV2ZWwpOwogc3RhdGljIGRvdWJsZSBjb21wdXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3Rh dGljIFZhY09wdFZhbHVlIGdldF92YWNvcHR2YWxfZnJvbV9ib29sZWFuKERlZkVsZW0gKmRlZik7 CiBzdGF0aWMgYm9vbCB2YWNfdGlkX3JlYXBlZChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpz dGF0ZSk7CkBAIC02MzMsNyArNjMzLDggQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgY29uc3Qg VmFjdXVtUGFyYW1zIHBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWcKIAogCQkJ aWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKIAkJCXsKLQkJCQlpZiAoIXZhY3V1 bV9yZWwodnJlbC0+b2lkLCB2cmVsLT5yZWxhdGlvbiwgcGFyYW1zLCBic3RyYXRlZ3kpKQorCQkJ CWlmICghdmFjdXVtX3JlbCh2cmVsLT5vaWQsIHZyZWwtPnJlbGF0aW9uLCBwYXJhbXMsIGJzdHJh dGVneSwKKwkJCQkJCQkJaXNUb3BMZXZlbCkpCiAJCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0x OTk3LDcgKzE5OTgsNyBAQCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFuc2FjdGlvbklkIGZyb3plblhJ RCwKICAqLwogc3RhdGljIGJvb2wKIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVs YXRpb24sIFZhY3V1bVBhcmFtcyBwYXJhbXMsCi0JCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJz dHJhdGVneSkKKwkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LCBib29sIGlzVG9w TGV2ZWwpCiB7CiAJTE9DS01PREUJbG1vZGU7CiAJUmVsYXRpb24JcmVsOwpAQCAtMjI4OCw3ICsy Mjg5LDcgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVt UGFyYW1zIHBhcmFtcywKIAogCQkJLyogVkFDVVVNIEZVTEwgaXMgbm93IGEgdmFyaWFudCBvZiBD TFVTVEVSOyBzZWUgY2x1c3Rlci5jICovCiAJCQljbHVzdGVyX3JlbChSRVBBQ0tfQ09NTUFORF9W QUNVVU1GVUxMLCBmYWxzZSwgcmVsLCBJbnZhbGlkT2lkLAotCQkJCQkJJmNsdXN0ZXJfcGFyYW1z KTsKKwkJCQkJCSZjbHVzdGVyX3BhcmFtcywgaXNUb3BMZXZlbCk7CiAJCQkvKiBjbHVzdGVyX3Jl bCBjbG9zZXMgdGhlIHJlbGF0aW9uLCBidXQga2VlcHMgbG9jayAqLwogCiAJCQlyZWwgPSBOVUxM OwpAQCAtMjMzMSw3ICsyMzMyLDggQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpy ZWxhdGlvbiwgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJdG9hc3RfdmFjdXVtX3BhcmFtcy5vcHRp b25zIHw9IFZBQ09QVF9QUk9DRVNTX01BSU47CiAJCXRvYXN0X3ZhY3V1bV9wYXJhbXMudG9hc3Rf cGFyZW50ID0gcmVsaWQ7CiAKLQkJdmFjdXVtX3JlbCh0b2FzdF9yZWxpZCwgTlVMTCwgdG9hc3Rf dmFjdXVtX3BhcmFtcywgYnN0cmF0ZWd5KTsKKwkJdmFjdXVtX3JlbCh0b2FzdF9yZWxpZCwgTlVM TCwgdG9hc3RfdmFjdXVtX3BhcmFtcywgYnN0cmF0ZWd5LAorCQkJCSAgIGlzVG9wTGV2ZWwpOwog CX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZCBiL3NyYy9iYWNr ZW5kL21lc29uLmJ1aWxkCmluZGV4IGI4MzFhNTQxNjUyLi41YzE0ODEzMTIxNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQK QEAgLTE5NCw1ICsxOTQsNiBAQCBwZ190ZXN0X21vZF9hcmdzID0gcGdfbW9kX2FyZ3MgKyB7CiBz dWJkaXIoJ2ppdC9sbHZtJykKIHN1YmRpcigncmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlcicp CiBzdWJkaXIoJ3JlcGxpY2F0aW9uL3Bnb3V0cHV0JykKK3N1YmRpcigncmVwbGljYXRpb24vcGdv dXRwdXRfcmVwYWNrJykKIHN1YmRpcignc25vd2JhbGwnKQogc3ViZGlyKCd1dGlscy9tYi9jb252 ZXJzaW9uX3Byb2NzJykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmlu ZGV4IGNjMDNmMDcwNmU5Li41ZGM0YWU1OGZmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RlY29kZS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dy ZWFkZXIuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY29yZC5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2NsdXN0ZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgpAQCAtNDcyLDYgKzQ3Myw4OCBAQCBo ZWFwX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1ZikKIAlUcmFuc2FjdGlvbklkIHhpZCA9IFhMb2dSZWNHZXRYaWQoYnVmLT5yZWNvcmQpOwog CVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CiAKKwkvKgorCSAq IElmIHRoZSBjaGFuZ2UgaXMgbm90IGludGVuZGVkIGZvciBsb2dpY2FsIGRlY29kaW5nLCBkbyBu b3QgZXZlbgorCSAqIGVzdGFibGlzaCB0cmFuc2FjdGlvbiBmb3IgaXQgLSBSRVBBQ0sgQ09OQ1VS UkVOVExZIGlzIHRoZSB0eXBpY2FsIHVzZQorCSAqIGNhc2UuCisJICoKKwkgKiBGaXJzdCwgY2hl Y2sgaWYgUkVQQUNLIENPTkNVUlJFTlRMWSBpcyBiZWluZyBwZXJmb3JtZWQgYnkgdGhpcyBiYWNr ZW5kLgorCSAqIElmIHNvLCBvbmx5IGRlY29kZSBkYXRhIGNoYW5nZXMgb2YgdGhlIHRhYmxlIHRo YXQgaXQgaXMgcHJvY2Vzc2luZywgYW5kCisJICogdGhlIGNoYW5nZXMgb2YgaXRzIFRPQVNUIHJl bGF0aW9uLgorCSAqCisJICogKFRPQVNUIGxvY2F0b3Igc2hvdWxkIG5vdCBiZSBzZXQgdW5sZXNz IHRoZSBtYWluIGlzLikKKwkgKi8KKwlBc3NlcnQoIU9pZElzVmFsaWQocmVwYWNrZWRfcmVsX3Rv YXN0X2xvY2F0b3IucmVsTnVtYmVyKSB8fAorCQkgICBPaWRJc1ZhbGlkKHJlcGFja2VkX3JlbF9s b2NhdG9yLnJlbE51bWJlcikpOworCisJaWYgKE9pZElzVmFsaWQocmVwYWNrZWRfcmVsX2xvY2F0 b3IucmVsTnVtYmVyKSkKKwl7CisJCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOwor CQlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCisJCS8qIE5vdCBhbGwgcmVjb3JkcyBjb250YWlu IHRoZSBibG9jay4gKi8KKwkJaWYgKFhMb2dSZWNHZXRCbG9ja1RhZ0V4dGVuZGVkKHIsIDAsICZs b2NhdG9yLCBOVUxMLCBOVUxMLCBOVUxMKSAmJgorCQkJIVJlbEZpbGVMb2NhdG9yRXF1YWxzKGxv Y2F0b3IsIHJlcGFja2VkX3JlbF9sb2NhdG9yKSAmJgorCQkJKCFPaWRJc1ZhbGlkKHJlcGFja2Vk X3JlbF90b2FzdF9sb2NhdG9yLnJlbE51bWJlcikgfHwKKwkJCSAhUmVsRmlsZUxvY2F0b3JFcXVh bHMobG9jYXRvciwgcmVwYWNrZWRfcmVsX3RvYXN0X2xvY2F0b3IpKSkKKwkJCXJldHVybjsKKwl9 CisKKwkvKgorCSAqIFNlY29uZCwgc2tpcCByZWNvcmRzIHdoaWNoIGRvIG5vdCBjb250YWluIHN1 ZmZpY2llbnQgaW5mb3JtYXRpb24gZm9yCisJICogdGhlIGRlY29kaW5nLgorCSAqCisJICogVGhl IHByb2JsZW0gd2Ugc29sdmUgaGVyZSBpcyB0aGF0IFJFUEFDSyBDT05DVVJSRU5UTFkgZ2VuZXJh dGVzIFdBTAorCSAqIHdoZW4gZG9pbmcgY2hhbmdlcyBpbiB0aGUgbmV3IHRhYmxlLiBUaG9zZSBj aGFuZ2VzIHNob3VsZCBub3QgYmUgdXNlZnVsCisJICogZm9yIGFueSBvdGhlciB1c2VyIChzdWNo IGFzIGxvZ2ljYWwgcmVwbGljYXRpb24gc3Vic2NyaXB0aW9uKSBiZWNhdXNlCisJICogdGhlIG5l dyB0YWJsZSB3aWxsIGV2ZW50dWFsbHkgYmUgZHJvcHBlZCAoYWZ0ZXIgUkVQQUNLIENPTkNVUlJF TlRMWSBoYXMKKwkgKiBhc3NpZ25lZCBpdHMgZmlsZSB0byB0aGUgIm9sZCB0YWJsZSIpLgorCSAq LworCXN3aXRjaCAoaW5mbykKKwl7CisJCWNhc2UgWExPR19IRUFQX0lOU0VSVDoKKwkJCXsKKwkJ CQl4bF9oZWFwX2luc2VydCAqcmVjOworCisJCQkJcmVjID0gKHhsX2hlYXBfaW5zZXJ0ICopIFhM b2dSZWNHZXREYXRhKGJ1Zi0+cmVjb3JkKTsKKworCQkJCS8qCisJCQkJICogVGhpcyBkb2VzIGhh cHBlbiB3aGVuIDEpIHJhd19oZWFwX2luc2VydCBtYXJrcyB0aGUgVE9BU1QKKwkJCQkgKiByZWNv cmQgYXMgSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCwgMikgUkVQQUNLIENPTkNVUlJFTlRMWQorCQkJ CSAqIHJlcGxheXMgaW5zZXJ0cyBwZXJmb3JtZWQgYnkgb3RoZXIgYmFja2VuZHMuCisJCQkJICov CisJCQkJaWYgKChyZWMtPmZsYWdzICYgWExIX0lOU0VSVF9DT05UQUlOU19ORVdfVFVQTEUpID09 IDApCisJCQkJCXJldHVybjsKKworCQkJCWJyZWFrOworCQkJfQorCisJCWNhc2UgWExPR19IRUFQ X0hPVF9VUERBVEU6CisJCWNhc2UgWExPR19IRUFQX1VQREFURToKKwkJCXsKKwkJCQl4bF9oZWFw X3VwZGF0ZSAqcmVjOworCisJCQkJcmVjID0gKHhsX2hlYXBfdXBkYXRlICopIFhMb2dSZWNHZXRE YXRhKGJ1Zi0+cmVjb3JkKTsKKwkJCQlpZiAoKHJlYy0+ZmxhZ3MgJgorCQkJCQkgKFhMSF9VUERB VEVfQ09OVEFJTlNfTkVXX1RVUExFIHwKKwkJCQkJICBYTEhfVVBEQVRFX0NPTlRBSU5TX09MRF9U VVBMRSB8CisJCQkJCSAgWExIX1VQREFURV9DT05UQUlOU19PTERfS0VZKSkgPT0gMCkKKwkJCQkJ cmV0dXJuOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBYTE9HX0hFQVBfREVMRVRFOgor CQkJeworCQkJCXhsX2hlYXBfZGVsZXRlICpyZWM7CisKKwkJCQlyZWMgPSAoeGxfaGVhcF9kZWxl dGUgKikgWExvZ1JlY0dldERhdGEoYnVmLT5yZWNvcmQpOworCQkJCWlmIChyZWMtPmZsYWdzICYg WExIX0RFTEVURV9OT19MT0dJQ0FMKQorCQkJCQlyZXR1cm47CisJCQkJYnJlYWs7CisJCQl9CisJ fQorCiAJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+b3Jp Z3B0cik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9zbmFwYnVpbGQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxk LmMKaW5kZXggYTJmMTgwMzYyMmMuLmQ2OTIyOTkwNWEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTQ4Niw2ICs0ODYsMjcgQEAgU25hcEJ1aWxk SW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIAlyZXR1cm4gU25hcEJ1aWxkTVZD Q0Zyb21IaXN0b3JpYyhzbmFwLCB0cnVlKTsKIH0KIAorLyoKKyAqIEJ1aWxkIGFuIE1WQ0Mgc25h cHNob3QgZm9yIHRoZSBpbml0aWFsIGRhdGEgbG9hZCBwZXJmb3JtZWQgYnkgUkVQQUNLCisgKiBD T05DVVJSRU5UTFkgY29tbWFuZC4KKyAqCisgKiBUaGUgc25hcHNob3Qgd2lsbCBvbmx5IGJlIHVz ZWQgdG8gc2NhbiBvbmUgcGFydGljdWxhciByZWxhdGlvbiwgd2hpY2ggaXMKKyAqIHRyZWF0ZWQg bGlrZSBhIGNhdGFsb2cgKHRoZXJlZm9yZSAtPmJ1aWxkaW5nX2Z1bGxfc25hcHNob3QgaXMgbm90 CisgKiBpbXBvcnRhbnQpLCBhbmQgdGhlIGNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGEgcmVw bGljYXRpb24gc2xvdCBzZXR1cCAoc28KKyAqIHdlIGRvIG5vdCBzZXQgTXlQcm9jLT54bWluKS4g WFhYIERvIHdlIHlldCBuZWVkIHRvIGFkZCBzb21lIHJlc3RyaWN0aW9ucz8KKyAqLworU25hcHNo b3QKK1NuYXBCdWlsZEluaXRpYWxTbmFwc2hvdEZvclJlcGFjayhTbmFwQnVpbGQgKmJ1aWxkZXIp Cit7CisJU25hcHNob3QJc25hcDsKKworCUFzc2VydChidWlsZGVyLT5zdGF0ZSA9PSBTTkFQQlVJ TERfQ09OU0lTVEVOVCk7CisJQXNzZXJ0KGJ1aWxkZXItPmJ1aWxkaW5nX2Z1bGxfc25hcHNob3Qp OworCisJc25hcCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlcik7CisJcmV0dXJuIFNu YXBCdWlsZE1WQ0NGcm9tSGlzdG9yaWMoc25hcCwgZmFsc2UpOworfQorCiAvKgogICogVHVybiBh IGhpc3RvcmljIE1WQ0Mgc25hcHNob3QgaW50byBhbiBvcmRpbmFyeSBNVkNDIHNuYXBzaG90Lgog ICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9NYWtlZmls ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGVmZWI3MTNiNzAKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dF9yZXBhY2sv TWFrZWZpbGUKQEAgLTAsMCArMSwzMiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZp bGUtLQorIyAgICBNYWtlZmlsZSBmb3Igc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRf cmVwYWNrCisjCisjIElERU5USUZJQ0FUSU9OCisjICAgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0X3JlcGFjaworIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRfcmVwYWNrCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAorCitPQkpT ID0gXAorCSQoV0lOMzJSRVMpIFwKKwlwZ291dHB1dF9yZXBhY2subworUEdGSUxFREVTQyA9ICJw Z291dHB1dF9yZXBhY2sgLSBsb2dpY2FsIHJlcGxpY2F0aW9uIG91dHB1dCBwbHVnaW4gZm9yIFJF UEFDSyBjb21tYW5kIgorTkFNRSA9IHBnb3V0cHV0X3JlcGFjaworCithbGw6IGFsbC1zaGFyZWQt bGliCisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvTWFrZWZpbGUuc2hsaWIKKworaW5zdGFs bDogYWxsIGluc3RhbGxkaXJzIGluc3RhbGwtbGliCisKK2luc3RhbGxkaXJzOiBpbnN0YWxsZGly cy1saWIKKwordW5pbnN0YWxsOiB1bmluc3RhbGwtbGliCisKK2NsZWFuIGRpc3RjbGVhbjogY2xl YW4tbGliCisJcm0gLWYgJChPQkpTKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXRfcmVwYWNrL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXRfcmVwYWNrL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi4xMzNlODY1YTRhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9tZXNvbi5idWlsZApAQCAtMCwwICsxLDE4IEBACisj IENvcHlyaWdodCAoYykgMjAyMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCitwZ291dHB1dF9yZXBhY2tfc291cmNlcyA9IGZpbGVzKAorICAncGdvdXRwdXRfcmVw YWNrLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdvdXRwdXRfcmVw YWNrX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdz OiBbCisgICAgJy0tTkFNRScsICdwZ291dHB1dF9yZXBhY2snLAorICAgICctLUZJTEVERVNDJywg J3Bnb3V0cHV0X3JlcGFjayAtIGxvZ2ljYWwgcmVwbGljYXRpb24gb3V0cHV0IHBsdWdpbiBmb3Ig UkVQQUNLIGNvbW1hbmQnLF0pCitlbmRpZgorCitwZ291dHB1dF9yZXBhY2sgPSBzaGFyZWRfbW9k dWxlKCdwZ291dHB1dF9yZXBhY2snLAorICBwZ291dHB1dF9yZXBhY2tfc291cmNlcywKKyAga3dh cmdzOiBwZ19tb2RfYXJncywKKykKKworYmFja2VuZF90YXJnZXRzICs9IHBnb3V0cHV0X3JlcGFj awpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRfcmVwYWNrL3Bn b3V0cHV0X3JlcGFjay5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXRfcmVwYWNr L3Bnb3V0cHV0X3JlcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li42ODdmYmJjNTliYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0X3JlcGFjay9wZ291dHB1dF9yZXBhY2suYwpAQCAtMCwwICsxLDI4OCBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdvdXRwdXRfY2x1c3Rlci5jCisgKgkJTG9naWNhbCBS ZXBsaWNhdGlvbiBvdXRwdXQgcGx1Z2luIGZvciBSRVBBQ0sgY29tbWFuZAorICoKKyAqIENvcHly aWdodCAoYykgMjAxMi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dF9jbHVzdGVyL3Bnb3V0cHV0X2NsdXN0ZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3Qu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9jbHVzdGVyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v c25hcGJ1aWxkLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHZvaWQgcGx1Z2luX3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJICAgT3V0cHV0UGx1Z2lu T3B0aW9ucyAqb3B0LCBib29sIGlzX2luaXQpOworc3RhdGljIHZvaWQgcGx1Z2luX3NodXRkb3du KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBwbHVnaW5fYmVnaW5f dHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlclRY TiAqdHhuKTsKK3N0YXRpYyB2b2lkIHBsdWdpbl9jb21taXRfdHhuKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKKwkJCQkJCQkgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBj b21taXRfbHNuKTsKK3N0YXRpYyB2b2lkIHBsdWdpbl9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkgIFJlbGF0aW9uIHJlbCwg UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHBsdWdpbl90cnVuY2F0 ZShzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCVJlb3JkZXJCdWZm ZXJUWE4gKnR4biwgaW50IG5yZWxhdGlvbnMsCisJCQkJCQkJUmVsYXRpb24gcmVsYXRpb25zW10s CisJCQkJCQkJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKK3N0YXRpYyB2b2lkIHN0b3Jl X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkgQ29uY3VycmVudENo YW5nZUtpbmQga2luZCwgSGVhcFR1cGxlIHR1cGxlKTsKKwordm9pZAorX1BHX291dHB1dF9wbHVn aW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQoreworCUFzc2VydFZhcmlhYmxlSXNP ZlR5cGUoJl9QR19vdXRwdXRfcGx1Z2luX2luaXQsIExvZ2ljYWxPdXRwdXRQbHVnaW5Jbml0KTsK KworCWNiLT5zdGFydHVwX2NiID0gcGx1Z2luX3N0YXJ0dXA7CisJY2ItPmJlZ2luX2NiID0gcGx1 Z2luX2JlZ2luX3R4bjsKKwljYi0+Y2hhbmdlX2NiID0gcGx1Z2luX2NoYW5nZTsKKwljYi0+dHJ1 bmNhdGVfY2IgPSBwbHVnaW5fdHJ1bmNhdGU7CisJY2ItPmNvbW1pdF9jYiA9IHBsdWdpbl9jb21t aXRfdHhuOworCWNiLT5zaHV0ZG93bl9jYiA9IHBsdWdpbl9zaHV0ZG93bjsKK30KKworCisvKiBp bml0aWFsaXplIHRoaXMgcGx1Z2luICovCitzdGF0aWMgdm9pZAorcGx1Z2luX3N0YXJ0dXAoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCisJCQkg ICBib29sIGlzX2luaXQpCit7CisJY3R4LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGUgPSBOVUxMOwor CisJLyogUHJvYmFibHkgdW5uZWNlc3NhcnksIGFzIHdlIGRvbid0IHVzZSB0aGUgU1FMIGludGVy ZmFjZSAuLi4gKi8KKwlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VU UFVUOworCisJaWYgKGN0eC0+b3V0cHV0X3BsdWdpbl9vcHRpb25zICE9IE5JTCkKKwl7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiVGhpcyBwbHVnaW4gZG9lcyBub3QgZXhwZWN0IGFueSBvcHRpb25z IikpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwbHVnaW5fc2h1dGRvd24oTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4KQoreworfQorCisvKgorICogQXMgd2UgZG9uJ3QgcmVsZWFzZSB0aGUg c2xvdCBkdXJpbmcgcHJvY2Vzc2luZyBvZiBwYXJ0aWN1bGFyIHRhYmxlLCB0aGVyZSdzCisgKiBu byByb29tIGZvciBTUUwgaW50ZXJmYWNlLCBldmVuIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFRo ZXJlZm9yZSB3ZSBuZWVkCisgKiBuZWl0aGVyIE91dHB1dFBsdWdpblByZXBhcmVXcml0ZSgpIG5v ciBPdXRwdXRQbHVnaW5Xcml0ZSgpIGluIHRoZSBwbHVnaW4KKyAqIGNhbGxiYWNrcy4gKEFsdGhv dWdoIHdlIG1pZ2h0IHdhbnQgdG8gd3JpdGUgY3VzdG9tIGNhbGxiYWNrcywgdGhpcyBBUEkKKyAq IHNlZW1zIHRvIGJlIHVubmVjZXNzYXJpbHkgZ2VuZXJpYyBmb3Igb3VyIHB1cnBvc2VzLikKKyAq LworCisvKiBCRUdJTiBjYWxsYmFjayAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9iZWdpbl90eG4o TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCit7Cit9 CisKKy8qIENPTU1JVCBjYWxsYmFjayAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9jb21taXRfdHhu KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CSAgWExvZ1JlY1B0ciBjb21taXRfbHNuKQoreworfQorCisvKgorICogQ2FsbGJhY2sgZm9yIGlu ZGl2aWR1YWwgY2hhbmdlZCB0dXBsZXMKKyAqLworc3RhdGljIHZvaWQKK3BsdWdpbl9jaGFuZ2Uo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkg IFJlbGF0aW9uIHJlbGF0aW9uLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCit7CisJUmVw YWNrRGVjb2RpbmdTdGF0ZSAqZHN0YXRlOworCisJZHN0YXRlID0gKFJlcGFja0RlY29kaW5nU3Rh dGUgKikgY3R4LT5vdXRwdXRfd3JpdGVyX3ByaXZhdGU7CisKKwkvKiBPbmx5IGludGVyZXN0ZWQg aW4gb25lIHBhcnRpY3VsYXIgcmVsYXRpb24uICovCisJaWYgKHJlbGF0aW9uLT5yZF9pZCAhPSBk c3RhdGUtPnJlbGlkKQorCQlyZXR1cm47CisKKwkvKiBEZWNvZGUgZW50cnkgZGVwZW5kaW5nIG9u IGl0cyB0eXBlICovCisJc3dpdGNoIChjaGFuZ2UtPmFjdGlvbikKKwl7CisJCWNhc2UgUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0lOU0VSVDoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJbmV3dHVwbGU7CisK KwkJCQluZXd0dXBsZSA9IGNoYW5nZS0+ZGF0YS50cC5uZXd0dXBsZSAhPSBOVUxMID8KKwkJCQkJ Y2hhbmdlLT5kYXRhLnRwLm5ld3R1cGxlIDogTlVMTDsKKworCQkJCS8qCisJCQkJICogSWRlbnRp dHkgY2hlY2tzIGluIHRoZSBtYWluIGZ1bmN0aW9uIHNob3VsZCBoYXZlIG1hZGUgdGhpcworCQkJ CSAqIGltcG9zc2libGUuCisJCQkJICovCisJCQkJaWYgKG5ld3R1cGxlID09IE5VTEwpCisJCQkJ CWVsb2coRVJST1IsICJJbmNvbXBsZXRlIGluc2VydCBpbmZvLiIpOworCisJCQkJc3RvcmVfY2hh bmdlKGN0eCwgQ0hBTkdFX0lOU0VSVCwgbmV3dHVwbGUpOworCQkJfQorCQkJYnJlYWs7CisJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2xk dHVwbGUsCisJCQkJCQkJbmV3dHVwbGU7CisKKwkJCQlvbGR0dXBsZSA9IGNoYW5nZS0+ZGF0YS50 cC5vbGR0dXBsZSAhPSBOVUxMID8KKwkJCQkJY2hhbmdlLT5kYXRhLnRwLm9sZHR1cGxlIDogTlVM TDsKKwkJCQluZXd0dXBsZSA9IGNoYW5nZS0+ZGF0YS50cC5uZXd0dXBsZSAhPSBOVUxMID8KKwkJ CQkJY2hhbmdlLT5kYXRhLnRwLm5ld3R1cGxlIDogTlVMTDsKKworCQkJCWlmIChuZXd0dXBsZSA9 PSBOVUxMKQorCQkJCQllbG9nKEVSUk9SLCAiSW5jb21wbGV0ZSB1cGRhdGUgaW5mby4iKTsKKwor CQkJCWlmIChvbGR0dXBsZSAhPSBOVUxMKQorCQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0Vf VVBEQVRFX09MRCwgb2xkdHVwbGUpOworCisJCQkJc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1VQ REFURV9ORVcsIG5ld3R1cGxlKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVG RkVSX0NIQU5HRV9ERUxFVEU6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9sZHR1cGxlOworCisJCQkJ b2xkdHVwbGUgPSBjaGFuZ2UtPmRhdGEudHAub2xkdHVwbGUgPworCQkJCQljaGFuZ2UtPmRhdGEu dHAub2xkdHVwbGUgOiBOVUxMOworCisJCQkJaWYgKG9sZHR1cGxlID09IE5VTEwpCisJCQkJCWVs b2coRVJST1IsICJJbmNvbXBsZXRlIGRlbGV0ZSBpbmZvLiIpOworCisJCQkJc3RvcmVfY2hhbmdl KGN0eCwgQ0hBTkdFX0RFTEVURSwgb2xkdHVwbGUpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQkvKiBTaG91bGQgbm90IGNvbWUgaGVyZSAqLworCQkJQXNzZXJ0KGZhbHNlKTsKKwkJ CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3BsdWdpbl90cnVuY2F0ZShzdHJ1Y3QgTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJaW50 IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAorCQkJCVJlb3JkZXJCdWZmZXJDaGFu Z2UgKmNoYW5nZSkKK3sKKwlSZXBhY2tEZWNvZGluZ1N0YXRlICpkc3RhdGU7CisJaW50CQkJaTsK KwlSZWxhdGlvbglyZWxhdGlvbiA9IE5VTEw7CisKKwlkc3RhdGUgPSAoUmVwYWNrRGVjb2RpbmdT dGF0ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKKworCS8qIEZpbmQgdGhlIHJlbGF0 aW9uIHdlIGFyZSBwcm9jZXNzaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBucmVsYXRpb25zOyBp KyspCisJeworCQlyZWxhdGlvbiA9IHJlbGF0aW9uc1tpXTsKKworCQlpZiAoUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbikgPT0gZHN0YXRlLT5yZWxpZCkKKwkJCWJyZWFrOworCX0KKworCS8qIElz IHRoaXMgdHJ1bmNhdGlvbiBvZiBhbm90aGVyIHJlbGF0aW9uPyAqLworCWlmIChpID09IG5yZWxh dGlvbnMpCisJCXJldHVybjsKKworCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9UUlVOQ0FURSwg TlVMTCk7Cit9CisKKy8qIFN0b3JlIGNvbmN1cnJlbnQgZGF0YSBjaGFuZ2UuICovCitzdGF0aWMg dm9pZAorc3RvcmVfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgQ29uY3VycmVu dENoYW5nZUtpbmQga2luZCwKKwkJCSBIZWFwVHVwbGUgdHVwbGUpCit7CisJUmVwYWNrRGVjb2Rp bmdTdGF0ZSAqZHN0YXRlOworCWNoYXIJICAgKmNoYW5nZV9yYXc7CisJQ29uY3VycmVudENoYW5n ZSBjaGFuZ2U7CisJYm9vbAkJZmxhdHRlbmVkID0gZmFsc2U7CisJU2l6ZQkJc2l6ZTsKKwlEYXR1 bQkJdmFsdWVzWzFdOworCWJvb2wJCWlzbnVsbFsxXTsKKwljaGFyCSAgICpkc3QsCisJCQkgICAq ZHN0X3N0YXJ0OworCisJZHN0YXRlID0gKFJlcGFja0RlY29kaW5nU3RhdGUgKikgY3R4LT5vdXRw dXRfd3JpdGVyX3ByaXZhdGU7CisKKwlzaXplID0gTUFYQUxJR04oVkFSSERSU1opICsgU2l6ZU9m Q29uY3VycmVudENoYW5nZTsKKworCWlmICh0dXBsZSkKKwl7CisJCS8qCisJCSAqIFJlb3JkZXJC dWZmZXJDb21taXQoKSBzdG9yZXMgdGhlIFRPQVNUIGNodW5rcyBpbiBpdHMgcHJpdmF0ZSBtZW1v cnkKKwkJICogY29udGV4dCBhbmQgZnJlZXMgdGhlbSBhZnRlciBoYXZpbmcgY2FsbGVkIGFwcGx5 X2NoYW5nZSgpLgorCQkgKiBUaGVyZWZvcmUgd2UgbmVlZCBmbGF0IGNvcHkgKGluY2x1ZGluZyBU T0FTVCkgdGhhdCB3ZSBldmVudHVhbGx5CisJCSAqIGNvcHkgaW50byB0aGUgbWVtb3J5IGNvbnRl eHQgd2hpY2ggaXMgYXZhaWxhYmxlIHRvCisJCSAqIGRlY29kZV9jb25jdXJyZW50X2NoYW5nZXMo KS4KKwkJICovCisJCWlmIChIZWFwVHVwbGVIYXNFeHRlcm5hbCh0dXBsZSkpCisJCXsKKwkJCS8q CisJCQkgKiB0b2FzdF9mbGF0dGVuX3R1cGxlX3RvX2RhdHVtKCkgbWlnaHQgYmUgbW9yZSBjb252 ZW5pZW50IGJ1dCB3ZQorCQkJICogZG9uJ3Qgd2FudCB0aGUgZGVjb21wcmVzc2lvbiBpdCBkb2Vz LgorCQkJICovCisJCQl0dXBsZSA9IHRvYXN0X2ZsYXR0ZW5fdHVwbGUodHVwbGUsIGRzdGF0ZS0+ dHVwZGVzYyk7CisJCQlmbGF0dGVuZWQgPSB0cnVlOworCQl9CisKKwkJc2l6ZSArPSB0dXBsZS0+ dF9sZW47CisJfQorCisJLyogWFhYIElzbid0IHRoZXJlIGFueSBmdW5jdGlvbiAvIG1hY3JvIHRv IGRvIHRoaXM/ICovCisJaWYgKHNpemUgPj0gMHgzRkZGRkZGRikKKwkJZWxvZyhFUlJPUiwgIkNo YW5nZSBpcyB0b28gYmlnLiIpOworCisJLyogQ29uc3RydWN0IHRoZSBjaGFuZ2UuICovCisJY2hh bmdlX3JhdyA9IChjaGFyICopIHBhbGxvYzAoc2l6ZSk7CisJU0VUX1ZBUlNJWkUoY2hhbmdlX3Jh dywgc2l6ZSk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSB2YXJsZW5hIGFsaWdubWVudCBtaWdodCBu b3QgYmUgc3VmZmljaWVudCBmb3IgdGhlIHN0cnVjdHVyZSwKKwkgKiBzZXQgdGhlIGZpZWxkcyBp biBhIGxvY2FsIGluc3RhbmNlIGFuZCByZW1lbWJlciB3aGVyZSBpdCBzaG91bGQKKwkgKiBldmVu dHVhbGx5IGJlIGNvcGllZC4KKwkgKi8KKwljaGFuZ2Uua2luZCA9IGtpbmQ7CisJZHN0X3N0YXJ0 ID0gKGNoYXIgKikgVkFSREFUQShjaGFuZ2VfcmF3KTsKKworCS8qIE5vIG90aGVyIGluZm9ybWF0 aW9uIGlzIG5lZWRlZCBmb3IgVFJVTkNBVEUuICovCisJaWYgKGNoYW5nZS5raW5kID09IENIQU5H RV9UUlVOQ0FURSkKKwl7CisJCW1lbWNweShkc3Rfc3RhcnQsICZjaGFuZ2UsIFNpemVPZkNvbmN1 cnJlbnRDaGFuZ2UpOworCQlnb3RvIHN0b3JlOworCX0KKworCS8qCisJICogQ29weSB0aGUgdHVw bGUuCisJICoKKwkgKiBDQVVUSU9OOiBjaGFuZ2UtPnR1cF9kYXRhLnRfZGF0YSBtdXN0IGJlIGZp eGVkIG9uIHJldHJpZXZhbCEKKwkgKi8KKwltZW1jcHkoJmNoYW5nZS50dXBfZGF0YSwgdHVwbGUs IHNpemVvZihIZWFwVHVwbGVEYXRhKSk7CisJZHN0ID0gZHN0X3N0YXJ0ICsgU2l6ZU9mQ29uY3Vy cmVudENoYW5nZTsKKwltZW1jcHkoZHN0LCB0dXBsZS0+dF9kYXRhLCB0dXBsZS0+dF9sZW4pOwor CisJLyogVGhlIGRhdGEgaGFzIGJlZW4gY29waWVkLiAqLworCWlmIChmbGF0dGVuZWQpCisJCXBm cmVlKHR1cGxlKTsKKworc3RvcmU6CisJLyogQ29weSB0aGUgc3RydWN0dXJlIHNvIGl0IGNhbiBi ZSBzdG9yZWQuICovCisJbWVtY3B5KGRzdF9zdGFydCwgJmNoYW5nZSwgU2l6ZU9mQ29uY3VycmVu dENoYW5nZSk7CisKKwkvKiBTdG9yZSBhcyB0dXBsZSBvZiAxIGJ5dGVhIGNvbHVtbi4gKi8KKwl2 YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0dW0oY2hhbmdlX3Jhdyk7CisJaXNudWxsWzBdID0gZmFs c2U7CisJdHVwbGVzdG9yZV9wdXR2YWx1ZXMoZHN0YXRlLT50c3RvcmUsIGRzdGF0ZS0+dHVwZGVz Y19jaGFuZ2UsCisJCQkJCQkgdmFsdWVzLCBpc251bGwpOworCisJLyogQWNjb3VudGluZy4gKi8K Kwlkc3RhdGUtPm5jaGFuZ2VzKys7CisKKwkvKiBDbGVhbnVwLiAqLworCXBmcmVlKGNoYW5nZV9y YXcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDJmYTA0NWU2YjBmLi5lOWRkZjM5NTAw YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy94bG9ncHJlZmV0Y2hlci5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIK ICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2NsdXN0ZXIu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9nZW5lcmF0ZS1sd2xvY2tuYW1lcy5wbCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9nZW5lcmF0ZS1sd2xvY2tuYW1lcy5wbAppbmRleCBjZDNlNDNjNDQ4YS4uNTE5ZjM5NTM2Mzgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9nZW5lcmF0ZS1sd2xvY2tuYW1l cy5wbAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvZ2VuZXJhdGUtbHdsb2NrbmFtZXMu cGwKQEAgLTE2Miw3ICsxNjIsNyBAQCB3aGlsZSAoPCRsd2xvY2tsaXN0PikKIAogZGllCiAgICIk d2FpdF9ldmVudF9sd2xvY2tzWyRsd2xvY2tfY291bnRdIGRlZmluZWQgaW4gd2FpdF9ldmVudF9u YW1lcy50eHQgYnV0ICIKLSAgLiAiIG1pc3NpbmcgZnJvbSBsd2xvY2tsaXN0LmgiCisgIC4gIm1p c3NpbmcgZnJvbSBsd2xvY2tsaXN0LmgiCiAgIGlmICRsd2xvY2tfY291bnQgPCBzY2FsYXIgQHdh aXRfZXZlbnRfbHdsb2NrczsKIAogZGllCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRl eCA2ZmUyNjhhOGVlYy4uZDI3YTRjMzA1NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvc2NoZW1hcGcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3N0b3JhZ2UuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9jbHVzdGVyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcG9saWN5Lmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdHJpZ2dlci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdy LmMgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwppbmRleCBiYzc4NDAwNTJmZS4u NmQ0NjUzN2NiZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCkBAIC0yMTMsNyArMjEzLDYg QEAgc3RhdGljIExpc3QgKmV4cG9ydGVkU25hcHNob3RzID0gTklMOwogCiAvKiBQcm90b3R5cGVz IGZvciBsb2NhbCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIFVucmVnaXN0ZXJTbmFwc2hvdE5v T3duZXIoU25hcHNob3Qgc25hcHNob3QpOwotc3RhdGljIHZvaWQgRnJlZVNuYXBzaG90KFNuYXBz aG90IHNuYXBzaG90KTsKIHN0YXRpYyB2b2lkIFNuYXBzaG90UmVzZXRYbWluKHZvaWQpOwogCiAv KiBSZXNvdXJjZU93bmVyIGNhbGxiYWNrcyB0byB0cmFjayBzbmFwc2hvdCByZWZlcmVuY2VzICov CkBAIC02NTcsNyArNjU2LDcgQEAgQ29weVNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90KQogICog RnJlZVNuYXBzaG90CiAgKgkJRnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNuYXBz aG90LgogICovCi1zdGF0aWMgdm9pZAordm9pZAogRnJlZVNuYXBzaG90KFNuYXBzaG90IHNuYXBz aG90KQogewogCUFzc2VydChzbmFwc2hvdC0+cmVnZF9jb3VudCA9PSAwKTsKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxl dGUuaW4uYwppbmRleCA1OWZmNmUwOTIzYi4uNTI4ZmIwODE1NGEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRl LmluLmMKQEAgLTQ5OTgsMTggKzQ5OTgsMjcgQEAgbWF0Y2hfcHJldmlvdXNfd29yZHMoaW50IHBh dHRlcm5faWQsCiAJfQogCiAvKiBSRVBBQ0sgKi8KLQllbHNlIGlmIChNYXRjaGVzKCJSRVBBQ0si KSkKKwllbHNlIGlmIChNYXRjaGVzKCJSRVBBQ0siKSB8fCBNYXRjaGVzKCJSRVBBQ0siLCAiKCop IikpCisJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZX1BMVVMoUXVlcnlfZm9yX2xpc3Rfb2Zf Y2x1c3RlcmFibGVzLAorCQkJCQkJCQkJCSJDT05DVVJSRU5UTFkiKTsKKwllbHNlIGlmIChNYXRj aGVzKCJSRVBBQ0siLCAiQ09OQ1VSUkVOVExZIikpCiAJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FV RVJZKFF1ZXJ5X2Zvcl9saXN0X29mX2NsdXN0ZXJhYmxlcyk7Ci0JZWxzZSBpZiAoTWF0Y2hlcygi UkVQQUNLIiwgIigqKSIpKQorCWVsc2UgaWYgKE1hdGNoZXMoIlJFUEFDSyIsICIoKikiLCAiQ09O Q1VSUkVOVExZIikpCiAJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0 X29mX2NsdXN0ZXJhYmxlcyk7Ci0JLyogSWYgd2UgaGF2ZSBSRVBBQ0sgPHN0aD4sIHRoZW4gYWRk ICJVU0lORyBJTkRFWCIgKi8KLQllbHNlIGlmIChNYXRjaGVzKCJSRVBBQ0siLCBNYXRjaEFueUV4 Y2VwdCgiKCIpKSkKKwkvKiBJZiB3ZSBoYXZlIFJFUEFDSyBbIENPTkNVUlJFTlRMWSBdIDxzdGg+ LCB0aGVuIGFkZCAiVVNJTkcgSU5ERVgiICovCisJZWxzZSBpZiAoTWF0Y2hlcygiUkVQQUNLIiwg TWF0Y2hBbnlFeGNlcHQoIih8Q09OQ1VSUkVOVExZIikpIHx8CisJCQkgTWF0Y2hlcygiUkVQQUNL IiwgIkNPTkNVUlJFTlRMWSIsIE1hdGNoQW55RXhjZXB0KCIoIikpKQogCQlDT01QTEVURV9XSVRI KCJVU0lORyBJTkRFWCIpOwotCS8qIElmIHdlIGhhdmUgUkVQQUNLICgqKSA8c3RoPiwgdGhlbiBh ZGQgIlVTSU5HIElOREVYIiAqLwotCWVsc2UgaWYgKE1hdGNoZXMoIlJFUEFDSyIsICIoKikiLCBN YXRjaEFueSkpCisJLyogSWYgd2UgaGF2ZSBSRVBBQ0sgKCopIFsgQ09OQ1VSUkVOVExZIF0gPHN0 aD4sIHRoZW4gYWRkICJVU0lORyBJTkRFWCIgKi8KKwllbHNlIGlmIChNYXRjaGVzKCJSRVBBQ0si LCAiKCopIiwgTWF0Y2hBbnlFeGNlcHQoIkNPTkNVUlJFTlRMWSIpKSB8fAorCQkJIE1hdGNoZXMo IlJFUEFDSyIsICIoKikiLCAiQ09OQ1VSUkVOVExZIiwgTWF0Y2hBbnlFeGNlcHQoIigiKSkpCiAJ CUNPTVBMRVRFX1dJVEgoIlVTSU5HIElOREVYIik7Ci0JLyogSWYgd2UgaGF2ZSBSRVBBQ0sgPHN0 aD4gVVNJTkcsIHRoZW4gYWRkIHRoZSBpbmRleCBhcyB3ZWxsICovCi0JZWxzZSBpZiAoTWF0Y2hl cygiUkVQQUNLIiwgTWF0Y2hBbnksICJVU0lORyIsICJJTkRFWCIpKQorCisJLyoKKwkgKiBDb21w bGV0ZSAuLi4gWyAoKikgXSBbIENPTkNVUlJFTlRMWSBdIDxzdGg+IFVTSU5HIElOREVYLCB3aXRo IGEgbGlzdCBvZgorCSAqIGluZGV4ZXMgZm9yIDxzdGg+LgorCSAqLworCWVsc2UgaWYgKFRhaWxN YXRjaGVzKE1hdGNoQW55RXhjZXB0KCIofENPTkNVUlJFTlRMWSIpLCAiVVNJTkciLCAiSU5ERVgi KSkKIAl7CiAJCXNldF9jb21wbGV0aW9uX3JlZmVyZW5jZShwcmV2M193ZCk7CiAJCUNPTVBMRVRF X1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9pbmRleF9vZl90YWJsZSk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmgKaW5kZXggYTJiZDVhODk3ZjguLmI4MmRkMTdhOTY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0z MjMsMTQgKzMyMywxNSBAQCBleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiBy ZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCiAJCQkJCQkJICBCdWxrSW5z ZXJ0U3RhdGUgYmlzdGF0ZSk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9u IHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBz aG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRh ICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CisJCQkJCQkJIHN0cnVjdCBUTV9GYWlsdXJlRGF0 YSAqdG1mZCwgYm9vbCBjaGFuZ2luZ1BhcnQsCisJCQkJCQkJIGJvb2wgd2FsX2xvZ2ljYWwpOwog ZXh0ZXJuIHZvaWQgaGVhcF9maW5pc2hfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIEl0 ZW1Qb2ludGVyIHRpZCk7CiBleHRlcm4gdm9pZCBoZWFwX2Fib3J0X3NwZWN1bGF0aXZlKFJlbGF0 aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQpOwogZXh0ZXJuIFRNX1Jlc3VsdCBoZWFwX3Vw ZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwKIAkJCQkJCQkgSGVhcFR1 cGxlIG5ld3R1cCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywg Ym9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBs ZU1vZGUgKmxvY2ttb2RlLAotCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cyk7CisJCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzLCBib29sIHdhbF9s b2dpY2FsKTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9uIHJlbGF0 aW9uLCBIZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2NrVHVwbGVN b2RlIG1vZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LAogCQkJCQkJCQkgYm9vbCBmb2xs b3dfdXBkYXRlcywKQEAgLTQxMSw2ICs0MTIsMTAgQEAgZXh0ZXJuIEhUU1ZfUmVzdWx0IEhlYXBU dXBsZVNhdGlzZmllc1ZhY3V1bUhvcml6b24oSGVhcFR1cGxlIGh0dXAsIEJ1ZmZlciBidWZmZXIK IAkJCQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKmRlYWRfYWZ0ZXIpOwogZXh0ZXJuIHZvaWQg SGVhcFR1cGxlU2V0SGludEJpdHMoSGVhcFR1cGxlSGVhZGVyIHR1cGxlLCBCdWZmZXIgYnVmZmVy LAogCQkJCQkJCQkgdWludDE2IGluZm9tYXNrLCBUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4g Ym9vbCBIZWFwVHVwbGVNVkNDSW5zZXJ0ZWQoSGVhcFR1cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBz aG90LAorCQkJCQkJCQkgIEJ1ZmZlciBidWZmZXIpOworZXh0ZXJuIGJvb2wgSGVhcFR1cGxlTVZD Q05vdERlbGV0ZWQoSGVhcFR1cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJ QnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gYm9vbCBIZWFwVHVwbGVIZWFkZXJJc09ubHlMb2NrZWQo SGVhcFR1cGxlSGVhZGVyIHR1cGxlKTsKIGV4dGVybiBib29sIEhlYXBUdXBsZUlzU3VyZWx5RGVh ZChIZWFwVHVwbGUgaHR1cCwKIAkJCQkJCQkJICBzdHJ1Y3QgR2xvYmFsVmlzU3RhdGUgKnZpc3Rl c3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtX3hsb2cuaAppbmRleCAyNzdkZjZiM2NmMC4uOGQ0YWYwN2Y4 NDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oCkBAIC0xMDQsNiArMTA0LDggQEAKICNkZWZp bmUgWExIX0RFTEVURV9DT05UQUlOU19PTERfS0VZCQkJCSgxPDwyKQogI2RlZmluZSBYTEhfREVM RVRFX0lTX1NVUEVSCQkJCQkJKDE8PDMpCiAjZGVmaW5lIFhMSF9ERUxFVEVfSVNfUEFSVElUSU9O X01PVkUJCQkoMTw8NCkKKy8qIFNlZSBoZWFwX2RlbGV0ZSgpICovCisjZGVmaW5lIFhMSF9ERUxF VEVfTk9fTE9HSUNBTAkJCQkJKDE8PDUpCiAKIC8qIGNvbnZlbmllbmNlIG1hY3JvIGZvciBjaGVj a2luZyB3aGV0aGVyIGFueSBmb3JtIG9mIG9sZCB0dXBsZSB3YXMgbG9nZ2VkICovCiAjZGVmaW5l IFhMSF9ERUxFVEVfQ09OVEFJTlNfT0xECQkJCQkJXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMWM5 ZTgwMmE2YjEuLjI4OWI2NGVkZmQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTIyLDYgKzIyLDcg QEAKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v bG9naWNhbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwc2hvdC5oIgpAQCAtNjIzLDYgKzYyNCw4 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24g T2xkSW5kZXgsCiAJCQkJCQkJCQkJCSAgYm9vbCB1c2Vfc29ydCwKIAkJCQkJCQkJCQkJICBUcmFu c2FjdGlvbklkIE9sZGVzdFhtaW4sCisJCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJ CQkJCQkJCQkJCSAgTG9naWNhbERlY29kaW5nQ29udGV4dCAqZGVjb2RpbmdfY3R4LAogCQkJCQkJ CQkJCQkgIFRyYW5zYWN0aW9uSWQgKnhpZF9jdXRvZmYsCiAJCQkJCQkJCQkJCSAgTXVsdGlYYWN0 SWQgKm11bHRpX2N1dG9mZiwKIAkJCQkJCQkJCQkJICBkb3VibGUgKm51bV90dXBsZXMsCkBAIC0x NjI3LDYgKzE2MzAsMTAgQEAgdGFibGVfcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwg Y29uc3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogICogICBub3QgbmVlZGVkIGZvciB0 aGUgcmVsYXRpb24ncyBBTQogICogLSAqeGlkX2N1dG9mZiAtIGRpdHRvCiAgKiAtICptdWx0aV9j dXRvZmYgLSBkaXR0bworICogLSBzbmFwc2hvdCAtIGlmICE9IE5VTEwsIGlnbm9yZSBkYXRhIGNo YW5nZXMgZG9uZSBieSB0cmFuc2FjdGlvbnMgdGhhdCB0aGlzCisgKgkgKE1WQ0MpIHNuYXBzaG90 IGNvbnNpZGVycyBzdGlsbCBpbi1wcm9ncmVzcyBvciBpbiB0aGUgZnV0dXJlLgorICogLSBkZWNv ZGluZ19jdHggLSBsb2dpY2FsIGRlY29kaW5nIGNvbnRleHQsIHRvIGNhcHR1cmUgY29uY3VycmVu dCBkYXRhCisgKiAgIGNoYW5nZXMuCiAgKgogICogT3V0cHV0IHBhcmFtZXRlcnM6CiAgKiAtICp4 aWRfY3V0b2ZmIC0gcmVsJ3MgbmV3IHJlbGZyb3plbnhpZCB2YWx1ZSwgbWF5IGJlIGludmFsaWQK QEAgLTE2MzksNiArMTY0Niw4IEBAIHRhYmxlX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVs YXRpb24gT2xkVGFibGUsIFJlbGF0aW9uIE5ld1RhYmxlLAogCQkJCQkJCQlSZWxhdGlvbiBPbGRJ bmRleCwKIAkJCQkJCQkJYm9vbCB1c2Vfc29ydCwKIAkJCQkJCQkJVHJhbnNhY3Rpb25JZCBPbGRl c3RYbWluLAorCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJTG9naWNhbERlY29k aW5nQ29udGV4dCAqZGVjb2RpbmdfY3R4LAogCQkJCQkJCQlUcmFuc2FjdGlvbklkICp4aWRfY3V0 b2ZmLAogCQkJCQkJCQlNdWx0aVhhY3RJZCAqbXVsdGlfY3V0b2ZmLAogCQkJCQkJCQlkb3VibGUg Km51bV90dXBsZXMsCkBAIC0xNjQ3LDYgKzE2NTYsNyBAQCB0YWJsZV9yZWxhdGlvbl9jb3B5X2Zv cl9jbHVzdGVyKFJlbGF0aW9uIE9sZFRhYmxlLCBSZWxhdGlvbiBOZXdUYWJsZSwKIHsKIAlPbGRU YWJsZS0+cmRfdGFibGVhbS0+cmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihPbGRUYWJsZSwgTmV3 VGFibGUsIE9sZEluZGV4LAogCQkJCQkJCQkJCQkJCXVzZV9zb3J0LCBPbGRlc3RYbWluLAorCQkJ CQkJCQkJCQkJCXNuYXBzaG90LCBkZWNvZGluZ19jdHgsCiAJCQkJCQkJCQkJCQkJeGlkX2N1dG9m ZiwgbXVsdGlfY3V0b2ZmLAogCQkJCQkJCQkJCQkJCW51bV90dXBsZXMsIHR1cHNfdmFjdXVtZWQs CiAJCQkJCQkJCQkJCQkJdHVwc19yZWNlbnRseV9kZWFkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NsdXN0ZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaApp bmRleCA4OTA5OThkODRiYi4uNGE1MDhjNTdhNTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2NsdXN0ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmgKQEAg LTEzLDEwICsxMywxNSBAQAogI2lmbmRlZiBDTFVTVEVSX0gKICNkZWZpbmUgQ0xVU1RFUl9ICiAK KyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVz LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCisjaW5jbHVk ZSAidXRpbHMvcmVzb3duZXIuaCIKKyNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCiAKIAog LyogZmxhZyBiaXRzIGZvciBDbHVzdGVyUGFyYW1zLT5vcHRpb25zICovCkBAIC0yNSw2ICszMCw4 IEBACiAjZGVmaW5lIENMVU9QVF9SRUNIRUNLX0lTQ0xVU1RFUkVEIDB4MDQgLyogcmVjaGVjayBy ZWxhdGlvbiBzdGF0ZSBmb3IKIAkJCQkJCQkJCQkgKiBpbmRpc2NsdXN0ZXJlZCAqLwogI2RlZmlu ZSBDTFVPUFRfQU5BTFlaRSAweDA4CQkvKiBkbyBhbiBBTkFMWVpFICovCisjZGVmaW5lIENMVU9Q VF9DT05DVVJSRU5UIDB4MDgJLyogYWxsb3cgY29uY3VycmVudCBkYXRhIGNoYW5nZXMgKi8KKwog CiAvKiBvcHRpb25zIGZvciBDTFVTVEVSICovCiB0eXBlZGVmIHN0cnVjdCBDbHVzdGVyUGFyYW1z CkBAIC0zMywxNCArNDAsOTUgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2x1c3RlclBhcmFtcwogfSBDbHVz dGVyUGFyYW1zOwogCiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB1c2Vk IGJ5IFJFUEFDSyBDT05DVVJSRU5UTFkuCisgKi8KKworZXh0ZXJuIFJlbEZpbGVMb2NhdG9yIHJl cGFja2VkX3JlbF9sb2NhdG9yOworZXh0ZXJuIFJlbEZpbGVMb2NhdG9yIHJlcGFja2VkX3JlbF90 b2FzdF9sb2NhdG9yOworCit0eXBlZGVmIGVudW0KK3sKKwlDSEFOR0VfSU5TRVJULAorCUNIQU5H RV9VUERBVEVfT0xELAorCUNIQU5HRV9VUERBVEVfTkVXLAorCUNIQU5HRV9ERUxFVEUsCisJQ0hB TkdFX1RSVU5DQVRFCit9IENvbmN1cnJlbnRDaGFuZ2VLaW5kOworCit0eXBlZGVmIHN0cnVjdCBD b25jdXJyZW50Q2hhbmdlCit7CisJLyogU2VlIHRoZSBlbnVtIGFib3ZlLiAqLworCUNvbmN1cnJl bnRDaGFuZ2VLaW5kIGtpbmQ7CisKKwkvKgorCSAqIFRoZSBhY3R1YWwgdHVwbGUuCisJICoKKwkg KiBUaGUgdHVwbGUgZGF0YSBmb2xsb3dzIHRoZSBDb25jdXJyZW50Q2hhbmdlIHN0cnVjdHVyZS4g QmVmb3JlIHVzZSBtYWtlCisJICogc3VyZSB0aGUgdHVwbGUgaXMgY29ycmVjdGx5IGFsaWduZWQg KENvbmN1cnJlbnRDaGFuZ2UgY2FuIGJlIHN0b3JlZCBhcworCSAqIGJ5dGVhKSBhbmQgdGhhdCB0 dXBsZS0+dF9kYXRhIGlzIGZpeGVkLgorCSAqLworCUhlYXBUdXBsZURhdGEgdHVwX2RhdGE7Cit9 IENvbmN1cnJlbnRDaGFuZ2U7CisKKyNkZWZpbmUgU2l6ZU9mQ29uY3VycmVudENoYW5nZSAob2Zm c2V0b2YoQ29uY3VycmVudENoYW5nZSwgdHVwX2RhdGEpICsgXAorCQkJCQkJCQlzaXplb2YoSGVh cFR1cGxlRGF0YSkpCisKKy8qCisgKiBMb2dpY2FsIGRlY29kaW5nIHN0YXRlLgorICoKKyAqIEhl cmUgd2Ugc3RvcmUgdGhlIGRhdGEgY2hhbmdlcyB0aGF0IHdlIGRlY29kZSBmcm9tIFdBTCB3aGls ZSB0aGUgdGFibGUKKyAqIGNvbnRlbnRzIGlzIGJlaW5nIGNvcGllZCB0byBhIG5ldyBzdG9yYWdl LiBBbHNvIHRoZSBuZWNlc3NhcnkgbWV0YWRhdGEKKyAqIG5lZWRlZCB0byBhcHBseSB0aGVzZSBj aGFuZ2VzIHRvIHRoZSB0YWJsZSBpcyBzdG9yZWQgaGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg UmVwYWNrRGVjb2RpbmdTdGF0ZQoreworCS8qIFRoZSByZWxhdGlvbiB3aG9zZSBjaGFuZ2VzIHdl J3JlIGRlY29kaW5nLiAqLworCU9pZAkJCXJlbGlkOworCisJLyoKKwkgKiBEZWNvZGVkIGNoYW5n ZXMgYXJlIHN0b3JlZCBoZXJlLiBBbHRob3VnaCB3ZSB0cnkgdG8gYXZvaWQgZXhjZXNzaXZlCisJ ICogYmF0Y2hlcywgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSBjaGFuZ2VzIG5lZWQgdG8gYmUgc3Rv cmVkIHRvIGRpc2suIFRoZQorCSAqIHR1cGxlc3RvcmUgZG9lcyB0aGlzIHRyYW5zcGFyZW50bHku CisJICovCisJVHVwbGVzdG9yZXN0YXRlICp0c3RvcmU7CisKKwkvKiBUaGUgY3VycmVudCBudW1i ZXIgb2YgY2hhbmdlcyBpbiB0c3RvcmUuICovCisJZG91YmxlCQluY2hhbmdlczsKKworCS8qCisJ ICogRGVzY3JpcHRvciB0byBzdG9yZSB0aGUgQ29uY3VycmVudENoYW5nZSBzdHJ1Y3R1cmUgc2Vy aWFsaXplZCAoYnl0ZWEpLgorCSAqIFdlIGNhbid0IHN0b3JlIHRoZSB0dXBsZSBkaXJlY3RseSBi ZWNhdXNlIHR1cGxlc3RvcmUgb25seSBzdXBwb3J0cworCSAqIG1pbmltdW0gdHVwbGUgYW5kIHdl IG1heSBuZWVkIHRvIHRyYW5zZmVyIE9JRCBzeXN0ZW0gY29sdW1uIGZyb20gdGhlCisJICogb3V0 cHV0IHBsdWdpbi4gQWxzbyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSBjaGFuZ2Uga2luZCwgc28g aXQncyBiZXR0ZXIKKwkgKiB0byBwdXQgZXZlcnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIHRoYW4g dG8gdXNlIDIgdHVwbGVzdG9yZXMgImluCisJICogcGFyYWxsZWwiLgorCSAqLworCVR1cGxlRGVz Ywl0dXBkZXNjX2NoYW5nZTsKKworCS8qIFR1cGxlIGRlc2NyaXB0b3IgbmVlZGVkIHRvIHVwZGF0 ZSBpbmRleGVzLiAqLworCVR1cGxlRGVzYwl0dXBkZXNjOworCisJLyogU2xvdCB0byByZXRyaWV2 ZSBkYXRhIGZyb20gdHN0b3JlLiAqLworCVR1cGxlVGFibGVTbG90ICp0c3Nsb3Q7CisKKwlSZXNv dXJjZU93bmVyIHJlc293bmVyOworfSBSZXBhY2tEZWNvZGluZ1N0YXRlOworCisKKwogZXh0ZXJu IHZvaWQgRXhlY1JlcGFjayhQYXJzZVN0YXRlICpwc3RhdGUsIFJlcGFja1N0bXQgKnN0bXQsIGJv b2wgaXNUb3BMZXZlbCk7CiAKIGV4dGVybiB2b2lkIGNsdXN0ZXJfcmVsKFJlcGFja0NvbW1hbmQg Y29tbWFuZCwgYm9vbCB1c2luZ2luZGV4LAotCQkJCQkJUmVsYXRpb24gT2xkSGVhcCwgT2lkIGlu ZGV4T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMpOworCQkJCQkJUmVsYXRpb24gT2xkSGVhcCwg T2lkIGluZGV4T2lkLCBDbHVzdGVyUGFyYW1zICpwYXJhbXMsCisJCQkJCQlib29sIGlzVG9wTGV2 ZWwpOwogZXh0ZXJuIHZvaWQgY2hlY2tfaW5kZXhfaXNfY2x1c3RlcmFibGUoUmVsYXRpb24gT2xk SGVhcCwgT2lkIGluZGV4T2lkLAogCQkJCQkJCQkJICAgTE9DS01PREUgbG9ja21vZGUpOwogZXh0 ZXJuIHZvaWQgbWFya19pbmRleF9jbHVzdGVyZWQoUmVsYXRpb24gcmVsLCBPaWQgaW5kZXhPaWQs IGJvb2wgaXNfaW50ZXJuYWwpOwogCitleHRlcm4gdm9pZCByZXBhY2tfZGVjb2RlX2NvbmN1cnJl bnRfY2hhbmdlcyhMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCSBYTG9n UmVjUHRyIGVuZF9vZl93YWwpOworCiBleHRlcm4gT2lkCW1ha2VfbmV3X2hlYXAoT2lkIE9JRE9s ZEhlYXAsIE9pZCBOZXdUYWJsZVNwYWNlLCBPaWQgTmV3QWNjZXNzTWV0aG9kLAogCQkJCQkJICBj aGFyIHJlbHBlcnNpc3RlbmNlLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gdm9pZCBmaW5p c2hfaGVhcF9zd2FwKE9pZCBPSURPbGRIZWFwLCBPaWQgT0lETmV3SGVhcCwKQEAgLTQ4LDYgKzEz Niw3IEBAIGV4dGVybiB2b2lkIGZpbmlzaF9oZWFwX3N3YXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBP SUROZXdIZWFwLAogCQkJCQkJCSBib29sIHN3YXBfdG9hc3RfYnlfY29udGVudCwKIAkJCQkJCQkg Ym9vbCBjaGVja19jb25zdHJhaW50cywKIAkJCQkJCQkgYm9vbCBpc19pbnRlcm5hbCwKKwkJCQkJ CQkgYm9vbCByZWluZGV4LAogCQkJCQkJCSBUcmFuc2FjdGlvbklkIGZyb3plblhpZCwKIAkJCQkJ CQkgTXVsdGlYYWN0SWQgY3V0b2ZmTXVsdGksCiAJCQkJCQkJIGNoYXIgbmV3cmVscGVyc2lzdGVu Y2UpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3MuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXggNWI2NjM5YzExNGMuLjkzOTE3YWQ1NTQ0 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCisrKyBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKQEAgLTU5LDE4ICs1OSwyMCBAQAogLyoKICAqIFBy b2dyZXNzIHBhcmFtZXRlcnMgZm9yIFJFUEFDSy4KICAqCi0gKiBOb3RlOiBTaW5jZSBSRVBBQ0sg c2hhcmVzIHNvbWUgY29kZSB3aXRoIENMVVNURVIsIHRoZXNlIHZhbHVlcyBhcmUgYWxzbwotICog dXNlZCBieSBDTFVTVEVSLiAoQ0xVU1RFUiBpcyBub3cgZGVwcmVjYXRlZCwgc28gaXQgbWFrZXMg bGl0dGxlIHNlbnNlIHRvCi0gKiBpbnRyb2R1Y2UgYSBzZXBhcmF0ZSBzZXQgb2YgY29uc3RhbnRz LikKKyAqIE5vdGU6IFNpbmNlIFJFUEFDSyBzaGFyZXMgc29tZSBjb2RlIHdpdGggQ0xVU1RFUiwg KHNvbWUgb2YpIHRoZXNlIHZhbHVlcworICogYXJlIGFsc28gdXNlZCBieSBDTFVTVEVSLiAoQ0xV U1RFUiBpcyBub3cgZGVwcmVjYXRlZCwgc28gaXQgbWFrZXMgbGl0dGxlCisgKiBzZW5zZSB0byBp bnRyb2R1Y2UgYSBzZXBhcmF0ZSBzZXQgb2YgY29uc3RhbnRzLikKICAqLwogI2RlZmluZSBQUk9H UkVTU19SRVBBQ0tfQ09NTUFORAkJCQkJMAogI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0UJ CQkJCTEKICNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX0lOREVYX1JFTElECQkJCTIKICNkZWZpbmUg UFJPR1JFU1NfUkVQQUNLX0hFQVBfVFVQTEVTX1NDQU5ORUQJCTMKLSNkZWZpbmUgUFJPR1JFU1Nf UkVQQUNLX0hFQVBfVFVQTEVTX1dSSVRURU4JCTQKLSNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX1RP VEFMX0hFQVBfQkxLUwkJCTUKLSNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX0hFQVBfQkxLU19TQ0FO TkVECQk2Ci0jZGVmaW5lIFBST0dSRVNTX1JFUEFDS19JTkRFWF9SRUJVSUxEX0NPVU5UCQk3Cisj ZGVmaW5lIFBST0dSRVNTX1JFUEFDS19IRUFQX1RVUExFU19JTlNFUlRFRAk0CisjZGVmaW5lIFBS T0dSRVNTX1JFUEFDS19IRUFQX1RVUExFU19VUERBVEVECQk1CisjZGVmaW5lIFBST0dSRVNTX1JF UEFDS19IRUFQX1RVUExFU19ERUxFVEVECQk2CisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19UT1RB TF9IRUFQX0JMS1MJCQk3CisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19IRUFQX0JMS1NfU0NBTk5F RAkJOAorI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfSU5ERVhfUkVCVUlMRF9DT1VOVAkJOQogCiAv KgogICogUGhhc2VzIG9mIHJlcGFjayAoYXMgYWR2ZXJ0aXNlZCB2aWEgUFJPR1JFU1NfUkVQQUNL X1BIQVNFKS4KQEAgLTc5LDkgKzgxLDEwIEBACiAjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFT RV9JTkRFWF9TQ0FOX0hFQVAJMgogI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfU09SVF9U VVBMRVMJCTMKICNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1dSSVRFX05FV19IRUFQCTQK LSNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1NXQVBfUkVMX0ZJTEVTCTUKLSNkZWZpbmUg UFJPR1JFU1NfUkVQQUNLX1BIQVNFX1JFQlVJTERfSU5ERVgJCTYKLSNkZWZpbmUgUFJPR1JFU1Nf UkVQQUNLX1BIQVNFX0ZJTkFMX0NMRUFOVVAJCTcKKyNkZWZpbmUgUFJPR1JFU1NfUkVQQUNLX1BI QVNFX0NBVENIX1VQCQkJNQorI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfU1dBUF9SRUxf RklMRVMJNgorI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfUkVCVUlMRF9JTkRFWAkJNwor I2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfRklOQUxfQ0xFQU5VUAkJOAogCiAvKgogICog Q29tbWFuZHMgb2YgUFJPR1JFU1NfUkVQQUNLCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9zbmFwYnVpbGQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5o CmluZGV4IDZkNGQyZDE4MTRjLi44MDJmYzRiMDgyMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vc25hcGJ1aWxkLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25h cGJ1aWxkLmgKQEAgLTczLDYgKzczLDcgQEAgZXh0ZXJuIHZvaWQgRnJlZVNuYXBzaG90QnVpbGRl cihTbmFwQnVpbGQgKmJ1aWxkZXIpOwogZXh0ZXJuIHZvaWQgU25hcEJ1aWxkU25hcERlY1JlZmNv dW50KFNuYXBzaG90IHNuYXApOwogCiBleHRlcm4gU25hcHNob3QgU25hcEJ1aWxkSW5pdGlhbFNu YXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcik7CitleHRlcm4gU25hcHNob3QgU25hcEJ1aWxkSW5p dGlhbFNuYXBzaG90Rm9yUmVwYWNrKFNuYXBCdWlsZCAqYnVpbGRlcik7CiBleHRlcm4gU25hcHNo b3QgU25hcEJ1aWxkTVZDQ0Zyb21IaXN0b3JpYyhTbmFwc2hvdCBzbmFwc2hvdCwgYm9vbCBpbl9w bGFjZSk7CiBleHRlcm4gY29uc3QgY2hhciAqU25hcEJ1aWxkRXhwb3J0U25hcHNob3QoU25hcEJ1 aWxkICpidWlsZGVyKTsKIGV4dGVybiB2b2lkIFNuYXBCdWlsZENsZWFyRXhwb3J0ZWRTbmFwc2hv dCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9ja2RlZnMuaCBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbG9ja2RlZnMuaAppbmRleCA3ZjNiYTAzNTJmNi4uMjczOTMyN2Iw ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9ja2RlZnMuaAorKysgYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2xvY2tkZWZzLmgKQEAgLTM2LDggKzM2LDggQEAgdHlwZWRlZiBpbnQg TE9DS01PREU7CiAjZGVmaW5lIEFjY2Vzc1NoYXJlTG9jawkJCTEJLyogU0VMRUNUICovCiAjZGVm aW5lIFJvd1NoYXJlTG9jawkJCTIJLyogU0VMRUNUIEZPUiBVUERBVEUvRk9SIFNIQVJFICovCiAj ZGVmaW5lIFJvd0V4Y2x1c2l2ZUxvY2sJCTMJLyogSU5TRVJULCBVUERBVEUsIERFTEVURSAqLwot I2RlZmluZSBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgNAkvKiBWQUNVVU0gKG5vbi1GVUxMKSwg QU5BTFlaRSwgQ1JFQVRFCi0JCQkJCQkJCQkgKiBJTkRFWCBDT05DVVJSRU5UTFkgKi8KKyNkZWZp bmUgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrIDQJLyogVkFDVVVNIChub24tZXhjbHVzaXZlKSwg QU5BTFlaRSwgQ1JFQVRFCisJCQkJCQkJCQkgKiBJTkRFWCBDT05DVVJSRU5UTFksIFJFUEFDSyBD T05DVVJSRU5UTFkgKi8KICNkZWZpbmUgU2hhcmVMb2NrCQkJCTUJLyogQ1JFQVRFIElOREVYIChX SVRIT1VUIENPTkNVUlJFTlRMWSkgKi8KICNkZWZpbmUgU2hhcmVSb3dFeGNsdXNpdmVMb2NrCTYJ LyogbGlrZSBFWENMVVNJVkUgTU9ERSwgYnV0IGFsbG93cyBST1cKIAkJCQkJCQkJCSAqIFNIQVJF ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmggYi9zcmMvaW5jbHVk ZS91dGlscy9zbmFwbWdyLmgKaW5kZXggZjY1ZjgzYzg1Y2QuLjFmODIxZmQyY2NkIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv c25hcG1nci5oCkBAIC02NCw2ICs2NCw4IEBAIGV4dGVybiBTbmFwc2hvdCBHZXRMYXRlc3RTbmFw c2hvdCh2b2lkKTsKIGV4dGVybiB2b2lkIFNuYXBzaG90U2V0Q29tbWFuZElkKENvbW1hbmRJZCBj dXJjaWQpOwogCiBleHRlcm4gU25hcHNob3QgQ29weVNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90 KTsKK2V4dGVybiB2b2lkIEZyZWVTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCk7CisKIGV4dGVy biBTbmFwc2hvdCBHZXRDYXRhbG9nU25hcHNob3QoT2lkIHJlbGlkKTsKIGV4dGVybiBTbmFwc2hv dCBHZXROb25IaXN0b3JpY0NhdGFsb2dTbmFwc2hvdChPaWQgcmVsaWQpOwogZXh0ZXJuIHZvaWQg SW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0 aW9uX3BvaW50cy9NYWtlZmlsZQppbmRleCBmYzgyY2Q2N2Y2Yy4uZjE2NDIyMTc1ZjggMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZQorKysgYi9z cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUKQEAgLTExLDEwICsxMSwx MSBAQCBFWFRFTlNJT04gPSBpbmplY3Rpb25fcG9pbnRzCiBEQVRBID0gaW5qZWN0aW9uX3BvaW50 cy0tMS4wLnNxbAogUEdGSUxFREVTQyA9ICJpbmplY3Rpb25fcG9pbnRzIC0gZmFjaWxpdHkgZm9y IGluamVjdGlvbiBwb2ludHMiCiAKLVJFR1JFU1MgPSBpbmplY3Rpb25fcG9pbnRzIGhhc2hhZ2cg cmVpbmRleF9jb25jIHZhY3V1bQorIyBSRUdSRVNTID0gaW5qZWN0aW9uX3BvaW50cyBoYXNoYWdn IHJlaW5kZXhfY29uYyB2YWN1dW0KIFJFR1JFU1NfT1BUUyA9IC0tZGxwYXRoPSQodG9wX2J1aWxk ZGlyKS9zcmMvdGVzdC9yZWdyZXNzCiAKLUlTT0xBVElPTiA9IGJhc2ljIGlucGxhY2Ugc3lzY2Fj aGUtdXBkYXRlLXBydW5lZAorSVNPTEFUSU9OID0gYmFzaWMgaW5wbGFjZSBzeXNjYWNoZS11cGRh dGUtcHJ1bmVkIHJlcGFjaworSVNPTEFUSU9OX09QVFMgPSAtLXRlbXAtY29uZmlnICQodG9wX3Ny Y2Rpcikvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2xvZ2ljYWwuY29uZgogCiBU QVBfVEVTVFMgPSAxCiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9leHBlY3RlZC9yZXBhY2sub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9p bnRzL2V4cGVjdGVkL3JlcGFjay5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmI1NzVlOTA1MmVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9p bmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL3JlcGFjay5vdXQKQEAgLTAsMCArMSwxMTMgQEAKK1Bh cnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiB3 YWl0X2JlZm9yZV9sb2NrIGNoYW5nZV9leGlzdGluZyBjaGFuZ2VfbmV3IGNoYW5nZV9zdWJ4YWN0 MSBjaGFuZ2Vfc3VieGFjdDIgY2hlY2syIHdha2V1cF9iZWZvcmVfbG9jayBjaGVjazEKK2luamVj dGlvbl9wb2ludHNfYXR0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCB3YWl0X2JlZm9yZV9sb2NrOiAKKwlSRVBBQ0sg KENPTkNVUlJFTlRMWSkgcmVwYWNrX3Rlc3QgVVNJTkcgSU5ERVggcmVwYWNrX3Rlc3RfcGtleTsK KyA8d2FpdGluZyAuLi4+CitzdGVwIGNoYW5nZV9leGlzdGluZzogCisJVVBEQVRFIHJlcGFja190 ZXN0IFNFVCBpPTEwIHdoZXJlIGk9MTsKKwlVUERBVEUgcmVwYWNrX3Rlc3QgU0VUIGo9MjAgd2hl cmUgaT0yOworCVVQREFURSByZXBhY2tfdGVzdCBTRVQgaT0zMCB3aGVyZSBpPTM7CisJVVBEQVRF IHJlcGFja190ZXN0IFNFVCBpPTQwIHdoZXJlIGk9MzA7CisJREVMRVRFIEZST00gcmVwYWNrX3Rl c3QgV0hFUkUgaT00OworCitzdGVwIGNoYW5nZV9uZXc6IAorCUlOU0VSVCBJTlRPIHJlcGFja190 ZXN0KGksIGopIFZBTFVFUyAoNSwgNSksICg2LCA2KSwgKDcsIDcpLCAoOCwgOCk7CisJVVBEQVRF IHJlcGFja190ZXN0IFNFVCBpPTUwIHdoZXJlIGk9NTsKKwlVUERBVEUgcmVwYWNrX3Rlc3QgU0VU IGo9NjAgd2hlcmUgaT02OworCURFTEVURSBGUk9NIHJlcGFja190ZXN0IFdIRVJFIGk9NzsKKwor c3RlcCBjaGFuZ2Vfc3VieGFjdDE6IAorCUJFR0lOOworCUlOU0VSVCBJTlRPIHJlcGFja190ZXN0 KGksIGopIFZBTFVFUyAoMTAwLCAxMDApOworCVNBVkVQT0lOVCBzMTsKKwlVUERBVEUgcmVwYWNr X3Rlc3QgU0VUIGk9MTAxIHdoZXJlIGk9MTAwOworCVNBVkVQT0lOVCBzMjsKKwlVUERBVEUgcmVw YWNrX3Rlc3QgU0VUIGk9MTAyIHdoZXJlIGk9MTAxOworCUNPTU1JVDsKKworc3RlcCBjaGFuZ2Vf c3VieGFjdDI6IAorCUJFR0lOOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5UTyByZXBhY2tf dGVzdChpLCBqKSBWQUxVRVMgKDExMCwgMTEwKTsKKwlST0xMQkFDSyBUTyBTQVZFUE9JTlQgczE7 CisJSU5TRVJUIElOVE8gcmVwYWNrX3Rlc3QoaSwgaikgVkFMVUVTICgxMTAsIDExMSk7CisJQ09N TUlUOworCitzdGVwIGNoZWNrMjogCisJSU5TRVJUIElOVE8gcmVsZmlsZW5vZGVzKG5vZGUpCisJ U0VMRUNUIHJlbGZpbGVub2RlIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZT0ncmVwYWNrX3Rl c3QnOworCisJU0VMRUNUIGksIGogRlJPTSByZXBhY2tfdGVzdCBPUkRFUiBCWSBpLCBqOworCisJ SU5TRVJUIElOVE8gZGF0YV9zMihpLCBqKQorCVNFTEVDVCBpLCBqIEZST00gcmVwYWNrX3Rlc3Q7 CisKKyAgaXwgIGoKKy0tLSstLS0KKyAgMnwgMjAKKyAgNnwgNjAKKyAgOHwgIDgKKyAxMHwgIDEK KyA0MHwgIDMKKyA1MHwgIDUKKzEwMnwxMDAKKzExMHwxMTEKKyg4IHJvd3MpCisKK3N0ZXAgd2Fr ZXVwX2JlZm9yZV9sb2NrOiAKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ3JlcGFj ay1jb25jdXJyZW50bHktYmVmb3JlLWxvY2snKTsKKworaW5qZWN0aW9uX3BvaW50c193YWtldXAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCitzdGVwIHdhaXRfYmVmb3JlX2xvY2s6IDwuLi4gY29tcGxldGVkPgorc3RlcCBjaGVjazE6 IAorCUlOU0VSVCBJTlRPIHJlbGZpbGVub2Rlcyhub2RlKQorCVNFTEVDVCByZWxmaWxlbm9kZSBG Uk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWU9J3JlcGFja190ZXN0JzsKKworCVNFTEVDVCBjb3Vu dChESVNUSU5DVCBub2RlKSBGUk9NIHJlbGZpbGVub2RlczsKKworCVNFTEVDVCBpLCBqIEZST00g cmVwYWNrX3Rlc3QgT1JERVIgQlkgaSwgajsKKworCUlOU0VSVCBJTlRPIGRhdGFfczEoaSwgaikK KwlTRUxFQ1QgaSwgaiBGUk9NIHJlcGFja190ZXN0OworCisJU0VMRUNUIGNvdW50KCopCisJRlJP TSBkYXRhX3MxIGQxIEZVTEwgSk9JTiBkYXRhX3MyIGQyIFVTSU5HIChpLCBqKQorCVdIRVJFIGQx LmkgSVNOVUxMIE9SIGQyLmkgSVNOVUxMOworCitjb3VudAorLS0tLS0KKyAgICAyCisoMSByb3cp CisKKyAgaXwgIGoKKy0tLSstLS0KKyAgMnwgMjAKKyAgNnwgNjAKKyAgOHwgIDgKKyAxMHwgIDEK KyA0MHwgIDMKKyA1MHwgIDUKKzEwMnwxMDAKKzExMHwxMTEKKyg4IHJvd3MpCisKK2NvdW50Cist LS0tLQorICAgIDAKKygxIHJvdykKKworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbG9naWNhbC5jb25mIGIv c3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2xvZ2ljYWwuY29uZgpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzhmMjY0YmM2Y2IKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbG9naWNhbC5jb25mCkBAIC0w LDAgKzEgQEAKK3dhbF9sZXZlbCA9IGxvZ2ljYWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKaW5kZXgg MjAzOTBkNmI0YmYuLjI5NTYxMTAzYmJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2lu amVjdGlvbl9wb2ludHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL21lc29uLmJ1aWxkCkBAIC00Nyw5ICs0NywxMyBAQCB0ZXN0cyArPSB7CiAgICAg J3NwZWNzJzogWwogICAgICAgJ2Jhc2ljJywKICAgICAgICdpbnBsYWNlJywKKyAgICAgICdyZXBh Y2snLAogICAgICAgJ3N5c2NhY2hlLXVwZGF0ZS1wcnVuZWQnLAogICAgIF0sCiAgICAgJ3J1bm5p bmdjaGVjayc6IGZhbHNlLCAjIHNlZSBzeXNjYWNoZS11cGRhdGUtcHJ1bmVkCisgICAgIyAncmVw YWNrJyByZXF1aXJlcyB3YWxfbGV2ZWwgPSAnbG9naWNhbCcuCisgICAgJ3JlZ3Jlc3NfYXJncyc6 IFsnLS10ZW1wLWNvbmZpZycsIGZpbGVzKCdsb2dpY2FsLmNvbmYnKV0sCisKICAgfSwKICAgJ3Rh cCc6IHsKICAgICAnZW52JzogewpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rp b25fcG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25f cG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi43NTg1MDMzNDk4NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv aW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYwpAQCAtMCwwICsxLDE0MyBAQAorIyBQ cmVmaXggdGhlIHN5c3RlbSBjb2x1bW5zIHdpdGggdW5kZXJzY29yZSBhcyB0aGV5IGFyZSBub3Qg YWxsb3dlZCBhcyBjb2x1bW4KKyMgbmFtZXMuCitzZXR1cAoreworCUNSRUFURSBFWFRFTlNJT04g aW5qZWN0aW9uX3BvaW50czsKKworCUNSRUFURSBUQUJMRSByZXBhY2tfdGVzdChpIGludCBQUklN QVJZIEtFWSwgaiBpbnQpOworCUlOU0VSVCBJTlRPIHJlcGFja190ZXN0KGksIGopIFZBTFVFUyAo MSwgMSksICgyLCAyKSwgKDMsIDMpLCAoNCwgNCk7CisKKwlDUkVBVEUgVEFCTEUgcmVsZmlsZW5v ZGVzKG5vZGUgb2lkKTsKKworCUNSRUFURSBUQUJMRSBkYXRhX3MxKGkgaW50LCBqIGludCk7CisJ Q1JFQVRFIFRBQkxFIGRhdGFfczIoaSBpbnQsIGogaW50KTsKK30KKwordGVhcmRvd24KK3sKKwlE Uk9QIFRBQkxFIHJlcGFja190ZXN0OworCURST1AgRVhURU5TSU9OIGluamVjdGlvbl9wb2ludHM7 CisKKwlEUk9QIFRBQkxFIHJlbGZpbGVub2RlczsKKwlEUk9QIFRBQkxFIGRhdGFfczE7CisJRFJP UCBUQUJMRSBkYXRhX3MyOworfQorCitzZXNzaW9uIHMxCitzZXR1cAoreworCVNFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX3NldF9sb2NhbCgpOworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0dGFj aCgncmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9jaycsICd3YWl0Jyk7Cit9CisjIFBlcmZv cm0gdGhlIGluaXRpYWwgbG9hZCBhbmQgd2FpdCBmb3IgczIgdG8gZG8gc29tZSBkYXRhIGNoYW5n ZXMuCitzdGVwIHdhaXRfYmVmb3JlX2xvY2sKK3sKKwlSRVBBQ0sgKENPTkNVUlJFTlRMWSkgcmVw YWNrX3Rlc3QgVVNJTkcgSU5ERVggcmVwYWNrX3Rlc3RfcGtleTsKK30KKyMgQ2hlY2sgdGhlIHRh YmxlIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHMxLgorIworIyBCZXNpZGVzIHRoZSBjb250ZW50 cywgd2UgYWxzbyBjaGVjayB0aGF0IHJlbGZpbGVub2RlIGhhcyBjaGFuZ2VkLgorCisjIEhhdmUg ZWFjaCBzZXNzaW9uIHdyaXRlIHRoZSBjb250ZW50cyBpbnRvIGEgdGFibGUgYW5kIHVzZSBGVUxM IEpPSU4gdG8gY2hlY2sKKyMgaWYgdGhlIG91dHB1dHMgYXJlIGlkZW50aWNhbC4KK3N0ZXAgY2hl Y2sxCit7CisJSU5TRVJUIElOVE8gcmVsZmlsZW5vZGVzKG5vZGUpCisJU0VMRUNUIHJlbGZpbGVu b2RlIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZT0ncmVwYWNrX3Rlc3QnOworCisJU0VMRUNU IGNvdW50KERJU1RJTkNUIG5vZGUpIEZST00gcmVsZmlsZW5vZGVzOworCisJU0VMRUNUIGksIGog RlJPTSByZXBhY2tfdGVzdCBPUkRFUiBCWSBpLCBqOworCisJSU5TRVJUIElOVE8gZGF0YV9zMShp LCBqKQorCVNFTEVDVCBpLCBqIEZST00gcmVwYWNrX3Rlc3Q7CisKKwlTRUxFQ1QgY291bnQoKikK KwlGUk9NIGRhdGFfczEgZDEgRlVMTCBKT0lOIGRhdGFfczIgZDIgVVNJTkcgKGksIGopCisJV0hF UkUgZDEuaSBJU05VTEwgT1IgZDIuaSBJU05VTEw7Cit9Cit0ZWFyZG93bgoreworICAgIFNFTEVD VCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgncmVwYWNrLWNvbmN1cnJlbnRseS1iZWZvcmUtbG9j aycpOworfQorCitzZXNzaW9uIHMyCisjIENoYW5nZSB0aGUgZXhpc3RpbmcgZGF0YS4gVVBEQVRF IGNoYW5nZXMgYm90aCBrZXkgYW5kIG5vbi1rZXkgY29sdW1ucy4gQWxzbworIyB1cGRhdGUgb25l IHJvdyB0d2ljZSB0byB0ZXN0IHdoZXRoZXIgdHVwbGUgdmVyc2lvbiBnZW5lcmF0ZWQgYnkgdGhp cyBzZXNzaW9uCisjIGNhbiBiZSBmb3VuZC4KK3N0ZXAgY2hhbmdlX2V4aXN0aW5nCit7CisJVVBE QVRFIHJlcGFja190ZXN0IFNFVCBpPTEwIHdoZXJlIGk9MTsKKwlVUERBVEUgcmVwYWNrX3Rlc3Qg U0VUIGo9MjAgd2hlcmUgaT0yOworCVVQREFURSByZXBhY2tfdGVzdCBTRVQgaT0zMCB3aGVyZSBp PTM7CisJVVBEQVRFIHJlcGFja190ZXN0IFNFVCBpPTQwIHdoZXJlIGk9MzA7CisJREVMRVRFIEZS T00gcmVwYWNrX3Rlc3QgV0hFUkUgaT00OworfQorIyBJbnNlcnQgbmV3IHJvd3MgYW5kIFVQREFU RSAvIERFTEVURSBzb21lIG9mIHRoZW0uIEFnYWluLCB1cGRhdGUgYm90aCBrZXkgYW5kCisjIG5v bi1rZXkgY29sdW1uLgorc3RlcCBjaGFuZ2VfbmV3Cit7CisJSU5TRVJUIElOVE8gcmVwYWNrX3Rl c3QoaSwgaikgVkFMVUVTICg1LCA1KSwgKDYsIDYpLCAoNywgNyksICg4LCA4KTsKKwlVUERBVEUg cmVwYWNrX3Rlc3QgU0VUIGk9NTAgd2hlcmUgaT01OworCVVQREFURSByZXBhY2tfdGVzdCBTRVQg aj02MCB3aGVyZSBpPTY7CisJREVMRVRFIEZST00gcmVwYWNrX3Rlc3QgV0hFUkUgaT03OworfQor CisjIFdoZW4gYXBwbHlpbmcgY29uY3VycmVudCBkYXRhIGNoYW5nZXMsIHdlIHNob3VsZCBzZWUg dGhlIGVmZmVjdHMgb2YgYW4KKyMgaW4tcHJvZ3Jlc3Mgc3VidHJhbnNhY3Rpb24uCisjCisjIFhY WCBOb3Qgc3VyZSB0aGlzIHRlc3QgaXMgdXNlZnVsIG5vdyAtIGl0IHdhcyBkZXNpZ25lZCBmb3Ig dGhlIHBhdGNoIHRoYXQKKyMgcHJlc2VydmVzIHR1cGxlIHZpc2liaWxpdHkgYW5kIHdoaWNoIHRo ZXJlZm9yZSBtb2RpZmllcworIyBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25JZCgp Lgorc3RlcCBjaGFuZ2Vfc3VieGFjdDEKK3sKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyByZXBhY2tf dGVzdChpLCBqKSBWQUxVRVMgKDEwMCwgMTAwKTsKKwlTQVZFUE9JTlQgczE7CisJVVBEQVRFIHJl cGFja190ZXN0IFNFVCBpPTEwMSB3aGVyZSBpPTEwMDsKKwlTQVZFUE9JTlQgczI7CisJVVBEQVRF IHJlcGFja190ZXN0IFNFVCBpPTEwMiB3aGVyZSBpPTEwMTsKKwlDT01NSVQ7Cit9CisKKyMgV2hl biBhcHBseWluZyBjb25jdXJyZW50IGRhdGEgY2hhbmdlcywgd2Ugc2hvdWxkIG5vdCBzZWUgdGhl IGVmZmVjdHMgb2YgYQorIyByb2xsZWQgYmFjayBzdWJ0cmFuc2FjdGlvbi4KKyMKKyMgWFhYIElz IHRoaXMgdGVzdCB1c2VmdWw/IFNlZSBhYm92ZS4KK3N0ZXAgY2hhbmdlX3N1YnhhY3QyCit7CisJ QkVHSU47CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHJlcGFja190ZXN0KGksIGopIFZB TFVFUyAoMTEwLCAxMTApOworCVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5U TyByZXBhY2tfdGVzdChpLCBqKSBWQUxVRVMgKDExMCwgMTExKTsKKwlDT01NSVQ7Cit9CisKKyMg Q2hlY2sgdGhlIHRhYmxlIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHMyLgorc3RlcCBjaGVjazIK K3sKKwlJTlNFUlQgSU5UTyByZWxmaWxlbm9kZXMobm9kZSkKKwlTRUxFQ1QgcmVsZmlsZW5vZGUg RlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lPSdyZXBhY2tfdGVzdCc7CisKKwlTRUxFQ1QgaSwg aiBGUk9NIHJlcGFja190ZXN0IE9SREVSIEJZIGksIGo7CisKKwlJTlNFUlQgSU5UTyBkYXRhX3My KGksIGopCisJU0VMRUNUIGksIGogRlJPTSByZXBhY2tfdGVzdDsKK30KK3N0ZXAgd2FrZXVwX2Jl Zm9yZV9sb2NrCit7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdyZXBhY2stY29u Y3VycmVudGx5LWJlZm9yZS1sb2NrJyk7Cit9CisKKyMgVGVzdCBpZiBkYXRhIGNoYW5nZXMgaW50 cm9kdWNlZCB3aGlsZSBvbmUgc2Vzc2lvbiBpcyBwZXJmb3JtaW5nIFJFUEFDSworIyBDT05DVVJS RU5UTFkgZmluZCB0aGVpciB3YXkgaW50byB0aGUgdGFibGUuCitwZXJtdXRhdGlvbgorCXdhaXRf YmVmb3JlX2xvY2sKKwljaGFuZ2VfZXhpc3RpbmcKKwljaGFuZ2VfbmV3CisJY2hhbmdlX3N1Ynhh Y3QxCisJY2hhbmdlX3N1YnhhY3QyCisJY2hlY2syCisJd2FrZXVwX2JlZm9yZV9sb2NrCisJY2hl Y2sxCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDNhMWQxZDI4MjgyLi5mZTIy N2JkOGEzMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE5OTksMTcgKzE5 OTksMTcgQEAgcGdfc3RhdF9wcm9ncmVzc19jbHVzdGVyfCBTRUxFQ1Qgcy5waWQsCiAgICAgICAg ICAgICBXSEVOIDIgVEhFTiAnaW5kZXggc2Nhbm5pbmcgaGVhcCc6OnRleHQKICAgICAgICAgICAg IFdIRU4gMyBUSEVOICdzb3J0aW5nIHR1cGxlcyc6OnRleHQKICAgICAgICAgICAgIFdIRU4gNCBU SEVOICd3cml0aW5nIG5ldyBoZWFwJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ3N3 YXBwaW5nIHJlbGF0aW9uIGZpbGVzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ3Jl YnVpbGRpbmcgaW5kZXgnOjp0ZXh0Ci0gICAgICAgICAgICBXSEVOIDcgVEhFTiAncGVyZm9ybWlu ZyBmaW5hbCBjbGVhbnVwJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2IFRIRU4gJ3N3YXBwaW5n IHJlbGF0aW9uIGZpbGVzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA3IFRIRU4gJ3JlYnVpbGRp bmcgaW5kZXgnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDggVEhFTiAncGVyZm9ybWluZyBmaW5h bCBjbGVhbnVwJzo6dGV4dAogICAgICAgICAgICAgRUxTRSBOVUxMOjp0ZXh0CiAgICAgICAgIEVO RCBBUyBwaGFzZSwKICAgICAocy5wYXJhbTMpOjpvaWQgQVMgY2x1c3Rlcl9pbmRleF9yZWxpZCwK ICAgICBzLnBhcmFtNCBBUyBoZWFwX3R1cGxlc19zY2FubmVkLAogICAgIHMucGFyYW01IEFTIGhl YXBfdHVwbGVzX3dyaXR0ZW4sCi0gICAgcy5wYXJhbTYgQVMgaGVhcF9ibGtzX3RvdGFsLAotICAg IHMucGFyYW03IEFTIGhlYXBfYmxrc19zY2FubmVkLAotICAgIHMucGFyYW04IEFTIGluZGV4X3Jl YnVpbGRfY291bnQKKyAgICBzLnBhcmFtOCBBUyBoZWFwX2Jsa3NfdG90YWwsCisgICAgcy5wYXJh bTkgQVMgaGVhcF9ibGtzX3NjYW5uZWQsCisgICAgcy5wYXJhbTEwIEFTIGluZGV4X3JlYnVpbGRf Y291bnQKICAgIEZST00gKHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oJ0NMVVNURVInOjp0ZXh0 KSBzKHBpZCwgZGF0aWQsIHJlbGlkLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBh cmFtNSwgcGFyYW02LCBwYXJhbTcsIHBhcmFtOCwgcGFyYW05LCBwYXJhbTEwLCBwYXJhbTExLCBw YXJhbTEyLCBwYXJhbTEzLCBwYXJhbTE0LCBwYXJhbTE1LCBwYXJhbTE2LCBwYXJhbTE3LCBwYXJh bTE4LCBwYXJhbTE5LCBwYXJhbTIwKQogICAgICBMRUZUIEpPSU4gcGdfZGF0YWJhc2UgZCBPTiAo KHMuZGF0aWQgPSBkLm9pZCkpKTsKIHBnX3N0YXRfcHJvZ3Jlc3NfY29weXwgU0VMRUNUIHMucGlk LApAQCAtMjA4MSwxNyArMjA4MSwyMCBAQCBwZ19zdGF0X3Byb2dyZXNzX3JlcGFja3wgU0VMRUNU IHMucGlkLAogICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2luZGV4IHNjYW5uaW5nIGhlYXAnOjp0 ZXh0CiAgICAgICAgICAgICBXSEVOIDMgVEhFTiAnc29ydGluZyB0dXBsZXMnOjp0ZXh0CiAgICAg ICAgICAgICBXSEVOIDQgVEhFTiAnd3JpdGluZyBuZXcgaGVhcCc6OnRleHQKLSAgICAgICAgICAg IFdIRU4gNSBUSEVOICdzd2FwcGluZyByZWxhdGlvbiBmaWxlcyc6OnRleHQKLSAgICAgICAgICAg IFdIRU4gNiBUSEVOICdyZWJ1aWxkaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA3 IFRIRU4gJ3BlcmZvcm1pbmcgZmluYWwgY2xlYW51cCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4g NSBUSEVOICdjYXRjaC11cCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNiBUSEVOICdzd2FwcGlu ZyByZWxhdGlvbiBmaWxlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gNyBUSEVOICdyZWJ1aWxk aW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA4IFRIRU4gJ3BlcmZvcm1pbmcgZmlu YWwgY2xlYW51cCc6OnRleHQKICAgICAgICAgICAgIEVMU0UgTlVMTDo6dGV4dAogICAgICAgICBF TkQgQVMgcGhhc2UsCiAgICAgKHMucGFyYW0zKTo6b2lkIEFTIHJlcGFja19pbmRleF9yZWxpZCwK ICAgICBzLnBhcmFtNCBBUyBoZWFwX3R1cGxlc19zY2FubmVkLAotICAgIHMucGFyYW01IEFTIGhl YXBfdHVwbGVzX3dyaXR0ZW4sCi0gICAgcy5wYXJhbTYgQVMgaGVhcF9ibGtzX3RvdGFsLAotICAg IHMucGFyYW03IEFTIGhlYXBfYmxrc19zY2FubmVkLAotICAgIHMucGFyYW04IEFTIGluZGV4X3Jl YnVpbGRfY291bnQKKyAgICBzLnBhcmFtNSBBUyBoZWFwX3R1cGxlc19pbnNlcnRlZCwKKyAgICBz LnBhcmFtNiBBUyBoZWFwX3R1cGxlc191cGRhdGVkLAorICAgIHMucGFyYW03IEFTIGhlYXBfdHVw bGVzX2RlbGV0ZWQsCisgICAgcy5wYXJhbTggQVMgaGVhcF9ibGtzX3RvdGFsLAorICAgIHMucGFy YW05IEFTIGhlYXBfYmxrc19zY2FubmVkLAorICAgIHMucGFyYW0xMCBBUyBpbmRleF9yZWJ1aWxk X2NvdW50CiAgICBGUk9NIChwZ19zdGF0X2dldF9wcm9ncmVzc19pbmZvKCdSRVBBQ0snOjp0ZXh0 KSBzKHBpZCwgZGF0aWQsIHJlbGlkLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBh cmFtNSwgcGFyYW02LCBwYXJhbTcsIHBhcmFtOCwgcGFyYW05LCBwYXJhbTEwLCBwYXJhbTExLCBw YXJhbTEyLCBwYXJhbTEzLCBwYXJhbTE0LCBwYXJhbTE1LCBwYXJhbTE2LCBwYXJhbTE3LCBwYXJh bTE4LCBwYXJhbTE5LCBwYXJhbTIwKQogICAgICBMRUZUIEpPSU4gcGdfZGF0YWJhc2UgZCBPTiAo KHMuZGF0aWQgPSBkLm9pZCkpKTsKIHBnX3N0YXRfcHJvZ3Jlc3NfdmFjdXVtfCBTRUxFQ1Qgcy5w aWQsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDk4MjQyZTI1NDMyLi5iNjRhYjhkZmFi NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQ4NSw2ICs0ODUsOCBAQCBDb21wcmVz c0ZpbGVIYW5kbGUKIENvbXByZXNzaW9uTG9jYXRpb24KIENvbXByZXNzb3JTdGF0ZQogQ29tcHV0 ZVhpZEhvcml6b25zUmVzdWx0CitDb25jdXJyZW50Q2hhbmdlCitDb25jdXJyZW50Q2hhbmdlS2lu ZAogQ29uZGl0aW9uVmFyaWFibGUKIENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVkCiBD b25kaXRpb25hbFN0YWNrCkBAIC0xMjU3LDYgKzEyNTksNyBAQCBJbmRleEVsZW0KIEluZGV4RmV0 Y2hIZWFwRGF0YQogSW5kZXhGZXRjaFRhYmxlRGF0YQogSW5kZXhJbmZvCitJbmRleEluc2VydFN0 YXRlCiBJbmRleExpc3QKIEluZGV4T25seVNjYW4KIEluZGV4T25seVNjYW5TdGF0ZQpAQCAtMjUz OCw2ICsyNTQxLDcgQEAgUmVvcmRlckJ1ZmZlclVwZGF0ZVByb2dyZXNzVHhuQ0IKIFJlb3JkZXJU dXBsZQogUmVwT3JpZ2luSWQKIFJlcGFja0NvbW1hbmQKK1JlcGFja0RlY29kaW5nU3RhdGUKIFJl cGFja1N0bXQKIFJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGhCeUNoaWxkX2Z1bmN0aW9uCiBSZXBs YWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NvbnRleHQKLS0gCjIuNDMuMAoK --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0002-Add-REPACK-command.patch" Content-Disposition: attachment; filename="v21-0002-Add-REPACK-command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vuq4 RnJvbSA0MDk2NWRmZWYwZjI2YTkyMjQ5Y2RhN2E5NTZiZDAzYzkzNThhMDI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUMzPTgxbHZhcm89MjBIZXJyZXJhPz0gPGFs dmhlcnJlQGt1cmlsZW11LmRlPgpEYXRlOiBTYXQsIDI2IEp1bCAyMDI1IDE5OjU3OjI2ICswMjAw ClN1YmplY3Q6IFtQQVRDSCB2MjEgMi82XSBBZGQgUkVQQUNLIGNvbW1hbmQKClJFUEFDSyBhYnNv cmJzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIFZBQ1VVTSBGVUxMIGFuZCBDTFVTVEVSIGluIGEgc2lu Z2xlCmNvbW1hbmQuICBCZWNhdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb21wbGV0ZWx5IGRp ZmZlcmVudCBmcm9tCnJlZ3VsYXIgVkFDVVVNLCBoYXZpbmcgaXQgc2VwYXJhdGUgZnJvbSBWQUNV VU0gbWFrZXMgaXQgZWFzaWVyIGZvciB1c2Vycwp0byB1bmRlcnN0YW5kOyBhcyBmb3IgQ0xVU1RF UiwgdGhlIHRlcm0gaXMgaGVhdmlseSBvdmVybG9hZGVkIGluIHRoZQpUSSB3b3JsZCBhbmQgZXZl biBpbiBQb3N0Z3JlcyBpdHNlbGYsIHNvIGl0J3MgZ29vZCB0aGF0IHdlIGNhbiBhdm9pZCBpdC4K ClRoaXMgYWxzbyBhZGRzIHBnX3JlcGFja2RiLCBhIG5ldyB1dGlsaXR5IHRoYXQgY2FuIGludm9r ZSB0aGUgbmV3CmNvbW1hbmRzLiAgVGhpcyBpcyBoZWF2aWx5IGJhc2VkIG9uIHZhY3V1bWRiLiAg V2UgbWF5IHN0aWxsIGNoYW5nZSB0aGUKaW1wbGVtZW50YXRpb24sIGRlcGVuZGluZyBvbiBob3cg ZG9lcyBXaW5kb3dzIGxpa2UgdGhpcyBvbmUuCgpBdXRob3I6IEFudG9uaW4gSG91c2thIDxhaEBj eWJlcnRlYy5hdD4KUmV2aWV3ZWQtYnk6IFRvIGZpbGwgaW4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS84MjY1MS4xNzIwNTQwNTU4QGFudG9zCkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vMjAyNTA3MjYyMTU2LnNiNDU1YW5naWprNkBhbHZoZXJyZS5wZ3NxbAotLS0KIGRv Yy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgICAgICAgICAgICAgfCAyMjMgKysrKysrLQogZG9j L3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgICB8ICAgMiArCiBkb2Mvc3JjL3Nn bWwvcmVmL2NsdXN0ZXIuc2dtbCAgICAgICAgICAgIHwgIDk3ICstLQogZG9jL3NyYy9zZ21sL3Jl Zi9jbHVzdGVyZGIuc2dtbCAgICAgICAgICB8ICAgNSArCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jl cGFja2RiLnNnbWwgICAgICAgIHwgNDc5ICsrKysrKysrKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVm L3JlcGFjay5zZ21sICAgICAgICAgICAgIHwgMjg0ICsrKysrKysrKwogZG9jL3NyYy9zZ21sL3Jl Zi92YWN1dW0uc2dtbCAgICAgICAgICAgICB8ICAzMyArLQogZG9jL3NyYy9zZ21sL3JlZmVyZW5j ZS5zZ21sICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jIHwgIDMyICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAg IHwgIDI2ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyAgICAgICAgICAgfCA3NTgg KysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jICAg ICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAg ICAgfCAgODggKystCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgIHwg IDIwICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyAgICAgIHwgICAyICsK IHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9i aW4vc2NyaXB0cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vc2Ny aXB0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9zY3JpcHRzL3Bn X3JlcGFja2RiLmMgICAgICAgICAgICB8IDIyNiArKysrKysrCiBzcmMvYmluL3NjcmlwdHMvdC8x MDNfcmVwYWNrZGIucGwgICAgICAgIHwgIDI0ICsKIHNyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcu YyAgICAgICAgICAgICAgfCAgNjAgKy0KIHNyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuaCAgICAg ICAgICAgICAgfCAgMTEgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaCAgICAgICAg ICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgICAgfCAg NjEgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAgMjAgKy0K IHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS91 dGlscy9iYWNrZW5kX3Byb2dyZXNzLmggICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvY2x1c3Rlci5vdXQgICAgfCAxMjUgKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9ydWxlcy5vdXQgICAgICB8ICAyMyArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jbHVzdGVyLnNx bCAgICAgICAgIHwgIDU5ICsrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgIHwgICAzICsKIDMzIGZpbGVzIGNoYW5nZWQsIDIyNzEgaW5zZXJ0aW9ucygrKSwgNDQ3IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVwYWNr ZGIuc2dtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9yZWYvcmVwYWNrLnNnbWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3NjcmlwdHMvcGdfcmVwYWNrZGIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vc2NyaXB0cy90LzEwM19yZXBhY2tkYi5wbAoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmlu Zy5zZ21sCmluZGV4IDNmNGEyN2E3MzZlLi4xMmUxMDNkMzE5ZCAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL21vbml0b3Jpbmcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21s CkBAIC00MDUsNiArNDA1LDE0IEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAzMDA5NiAg Mjc1MiA/ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAgICAgICA8L2Vu dHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAgICAgPGVudHJ5PjxzdHJ1Y3RuYW1l PnBnX3N0YXRfcHJvZ3Jlc3NfcmVwYWNrPC9zdHJ1Y3RuYW1lPjxpbmRleHRlcm0+PHByaW1hcnk+ cGdfc3RhdF9wcm9ncmVzc19yZXBhY2s8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT5PbmUgcm93IGZvciBlYWNoIGJhY2tlbmQgcnVubmluZworICAgICAgIDxjb21t YW5kPlJFUEFDSzwvY29tbWFuZD4sIHNob3dpbmcgY3VycmVudCBwcm9ncmVzcy4gIFNlZQorICAg ICAgIDx4cmVmIGxpbmtlbmQ9InJlcGFjay1wcm9ncmVzcy1yZXBvcnRpbmciLz4uCisgICAgICA8 L2VudHJ5PgorICAgICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxzdHJ1Y3Ru YW1lPnBnX3N0YXRfcHJvZ3Jlc3NfYmFzZWJhY2t1cDwvc3RydWN0bmFtZT48aW5kZXh0ZXJtPjxw cmltYXJ5PnBnX3N0YXRfcHJvZ3Jlc3NfYmFzZWJhY2t1cDwvcHJpbWFyeT48L2luZGV4dGVybT48 L2VudHJ5PgogICAgICAgPGVudHJ5Pk9uZSByb3cgZm9yIGVhY2ggV0FMIHNlbmRlciBwcm9jZXNz IHN0cmVhbWluZyBhIGJhc2UgYmFja3VwLApAQCAtNTUwNiw3ICs1NTE0LDggQEAgRlJPTSBwZ19z dGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkOwogICAgY2VydGFpbiBjb21tYW5k cyBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24uICBDdXJyZW50bHksIHRoZSBvbmx5IGNvbW1hbmRz CiAgICB3aGljaCBzdXBwb3J0IHByb2dyZXNzIHJlcG9ydGluZyBhcmUgPGNvbW1hbmQ+QU5BTFla RTwvY29tbWFuZD4sCiAgICA8Y29tbWFuZD5DTFVTVEVSPC9jb21tYW5kPiwKLSAgIDxjb21tYW5k PkNSRUFURSBJTkRFWDwvY29tbWFuZD4sIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4sCisgICA8 Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+LCA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+ LAorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiwKICAgIDxjb21tYW5kPkNPUFk8L2NvbW1h bmQ+LAogICAgYW5kIDx4cmVmIGxpbmtlbmQ9InByb3RvY29sLXJlcGxpY2F0aW9uLWJhc2UtYmFj a3VwIi8+IChpLmUuLCByZXBsaWNhdGlvbgogICAgY29tbWFuZCB0aGF0IDx4cmVmIGxpbmtlbmQ9 ImFwcC1wZ2Jhc2ViYWNrdXAiLz4gaXNzdWVzIHRvIHRha2UKQEAgLTU5NjUsNiArNTk3NCwyMTgg QEAgRlJPTSBwZ19zdGF0X2dldF9iYWNrZW5kX2lkc2V0KCkgQVMgYmFja2VuZGlkOwogICA8L3Rh YmxlPgogIDwvc2VjdDI+CiAKKyA8c2VjdDIgaWQ9InJlcGFjay1wcm9ncmVzcy1yZXBvcnRpbmci PgorICA8dGl0bGU+UkVQQUNLIFByb2dyZXNzIFJlcG9ydGluZzwvdGl0bGU+CisKKyAgPGluZGV4 dGVybT4KKyAgIDxwcmltYXJ5PnBnX3N0YXRfcHJvZ3Jlc3NfcmVwYWNrPC9wcmltYXJ5PgorICA8 L2luZGV4dGVybT4KKworICA8cGFyYT4KKyAgIFdoZW5ldmVyIDxjb21tYW5kPlJFUEFDSzwvY29t bWFuZD4gaXMgcnVubmluZywKKyAgIHRoZSA8c3RydWN0bmFtZT5wZ19zdGF0X3Byb2dyZXNzX3Jl cGFjazwvc3RydWN0bmFtZT4gdmlldyB3aWxsIGNvbnRhaW4gYQorICAgcm93IGZvciBlYWNoIGJh Y2tlbmQgdGhhdCBpcyBjdXJyZW50bHkgcnVubmluZyB0aGUgY29tbWFuZC4gIFRoZSB0YWJsZXMK KyAgIGJlbG93IGRlc2NyaWJlIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgcmVwb3J0ZWQg YW5kIHByb3ZpZGUKKyAgIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBpbnRlcnByZXQgaXQuCisg IDwvcGFyYT4KKworICA8dGFibGUgaWQ9InBnLXN0YXQtcHJvZ3Jlc3MtcmVwYWNrLXZpZXciIHhy ZWZsYWJlbD0icGdfc3RhdF9wcm9ncmVzc19yZXBhY2siPgorICAgPHRpdGxlPjxzdHJ1Y3RuYW1l PnBnX3N0YXRfcHJvZ3Jlc3NfcmVwYWNrPC9zdHJ1Y3RuYW1lPiBWaWV3PC90aXRsZT4KKyAgIDx0 Z3JvdXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJv bGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4K KyAgICAgICBDb2x1bW4gVHlwZQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAg RGVzY3JpcHRpb24KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Ro ZWFkPgorCisgICAgPHRib2R5PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFs b2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8 c3RydWN0ZmllbGQ+cGlkPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ZWdlcjwvdHlwZT4KKyAgICAg IDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFByb2Nlc3MgSUQgb2YgYmFja2VuZC4KKyAg ICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ZGF0aWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5vaWQ8 L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBPSUQgb2YgdGhlIGRh dGFiYXNlIHRvIHdoaWNoIHRoaXMgYmFja2VuZCBpcyBjb25uZWN0ZWQuCisgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJj YXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAg ICAgPHN0cnVjdGZpZWxkPmRhdG5hbWU8L3N0cnVjdGZpZWxkPiA8dHlwZT5uYW1lPC90eXBlPgor ICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTmFtZSBvZiB0aGUgZGF0YWJhc2Ug dG8gd2hpY2ggdGhpcyBiYWNrZW5kIGlzIGNvbm5lY3RlZC4KKyAgICAgIDwvcGFyYT48L2VudHJ5 PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2df dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3Ry dWN0ZmllbGQ+cmVsaWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5vaWQ8L3R5cGU+CisgICAgICA8L3Bh cmE+CisgICAgICA8cGFyYT4KKyAgICAgICBPSUQgb2YgdGhlIHRhYmxlIGJlaW5nIHJlcGFja2Vk LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAg ICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2Rl ZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5waGFzZTwvc3RydWN0ZmllbGQ+IDx0eXBl PnRleHQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBDdXJyZW50 IHByb2Nlc3NpbmcgcGhhc2UuIFNlZSA8eHJlZiBsaW5rZW5kPSJyZXBhY2stcGhhc2VzIi8+Lgor ICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5yZXBhY2tfaW5kZXhfcmVsaWQ8L3N0cnVjdGZp ZWxkPiA8dHlwZT5vaWQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAg ICBJZiB0aGUgdGFibGUgaXMgYmVpbmcgc2Nhbm5lZCB1c2luZyBhbiBpbmRleCwgdGhpcyBpcyB0 aGUgT0lEIG9mIHRoZQorICAgICAgIGluZGV4IGJlaW5nIHVzZWQ7IG90aGVyd2lzZSwgaXQgaXMg emVyby4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93Pgor ICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVt bl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+aGVhcF90dXBsZXNfc2Nhbm5lZDwv c3RydWN0ZmllbGQ+IDx0eXBlPmJpZ2ludDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxw YXJhPgorICAgICAgIE51bWJlciBvZiBoZWFwIHR1cGxlcyBzY2FubmVkLgorICAgICAgIFRoaXMg Y291bnRlciBvbmx5IGFkdmFuY2VzIHdoZW4gdGhlIHBoYXNlIGlzCisgICAgICAgPGxpdGVyYWw+ c2VxIHNjYW5uaW5nIGhlYXA8L2xpdGVyYWw+LAorICAgICAgIDxsaXRlcmFsPmluZGV4IHNjYW5u aW5nIGhlYXA8L2xpdGVyYWw+CisgICAgICAgb3IgPGxpdGVyYWw+d3JpdGluZyBuZXcgaGVhcDwv bGl0ZXJhbD4uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJv dz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJj b2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPmhlYXBfdHVwbGVzX3dyaXR0 ZW48L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAg ICA8cGFyYT4KKyAgICAgICBOdW1iZXIgb2YgaGVhcCB0dXBsZXMgd3JpdHRlbi4KKyAgICAgICBU aGlzIGNvdW50ZXIgb25seSBhZHZhbmNlcyB3aGVuIHRoZSBwaGFzZSBpcworICAgICAgIDxsaXRl cmFsPnNlcSBzY2FubmluZyBoZWFwPC9saXRlcmFsPiwKKyAgICAgICA8bGl0ZXJhbD5pbmRleCBz Y2FubmluZyBoZWFwPC9saXRlcmFsPgorICAgICAgIG9yIDxsaXRlcmFsPndyaXRpbmcgbmV3IGhl YXA8L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAg IDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5oZWFwX2Jsa3NfdG90 YWw8L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAg ICA8cGFyYT4KKyAgICAgICBUb3RhbCBudW1iZXIgb2YgaGVhcCBibG9ja3MgaW4gdGhlIHRhYmxl LiAgVGhpcyBudW1iZXIgaXMgcmVwb3J0ZWQKKyAgICAgICBhcyBvZiB0aGUgYmVnaW5uaW5nIG9m IDxsaXRlcmFsPnNlcSBzY2FubmluZyBoZWFwPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT48L2Vu dHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFs b2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8 c3RydWN0ZmllbGQ+aGVhcF9ibGtzX3NjYW5uZWQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8 L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBOdW1iZXIgb2YgaGVh cCBibG9ja3Mgc2Nhbm5lZC4gIFRoaXMgY291bnRlciBvbmx5IGFkdmFuY2VzIHdoZW4gdGhlCisg ICAgICAgcGhhc2UgaXMgPGxpdGVyYWw+c2VxIHNjYW5uaW5nIGhlYXA8L2xpdGVyYWw+LgorICAg ICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50 cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRp b24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5pbmRleF9yZWJ1aWxkX2NvdW50PC9zdHJ1Y3RmaWVs ZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAg ICAgTnVtYmVyIG9mIGluZGV4ZXMgcmVidWlsdC4gIFRoaXMgY291bnRlciBvbmx5IGFkdmFuY2Vz IHdoZW4gdGhlIHBoYXNlCisgICAgICAgaXMgPGxpdGVyYWw+cmVidWlsZGluZyBpbmRleDwvbGl0 ZXJhbD4uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9keT4K KyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgorCisgIDx0YWJsZSBpZD0icmVwYWNrLXBoYXNlcyI+ CisgICA8dGl0bGU+UkVQQUNLIFBoYXNlczwvdGl0bGU+CisgICA8dGdyb3VwIGNvbHM9IjIiPgor ICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSIxKiIvPgorICAgIDxjb2xzcGVj IGNvbG5hbWU9ImNvbDIiIGNvbHdpZHRoPSIyKiIvPgorICAgIDx0aGVhZD4KKyAgICA8cm93Pgor ICAgICAgPGVudHJ5PlBoYXNlPC9lbnRyeT4KKyAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50 cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisKKyAgIDx0Ym9keT4KKyAgICA8cm93Pgor ICAgICA8ZW50cnk+PGxpdGVyYWw+aW5pdGlhbGl6aW5nPC9saXRlcmFsPjwvZW50cnk+CisgICAg IDxlbnRyeT4KKyAgICAgICBUaGUgY29tbWFuZCBpcyBwcmVwYXJpbmcgdG8gYmVnaW4gc2Nhbm5p bmcgdGhlIGhlYXAuICBUaGlzIHBoYXNlIGlzCisgICAgICAgZXhwZWN0ZWQgdG8gYmUgdmVyeSBi cmllZi4KKyAgICAgPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8cm93PgorICAgICA8ZW50cnk+ PGxpdGVyYWw+c2VxIHNjYW5uaW5nIGhlYXA8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgPGVudHJ5 PgorICAgICAgIFRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSBzY2FubmluZyB0aGUgdGFibGUgdXNp bmcgYSBzZXF1ZW50aWFsIHNjYW4uCisgICAgIDwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPHJv dz4KKyAgICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHNjYW5uaW5nIGhlYXA8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgPGVudHJ5PgorICAgICAgIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gaXMg Y3VycmVudGx5IHNjYW5uaW5nIHRoZSB0YWJsZSB1c2luZyBhbiBpbmRleCBzY2FuLgorICAgICA8 L2VudHJ5PgorICAgIDwvcm93PgorICAgIDxyb3c+CisgICAgIDxlbnRyeT48bGl0ZXJhbD5zb3J0 aW5nIHR1cGxlczwvbGl0ZXJhbD48L2VudHJ5PgorICAgICA8ZW50cnk+CisgICAgICAgPGNvbW1h bmQ+UkVQQUNLPC9jb21tYW5kPiBpcyBjdXJyZW50bHkgc29ydGluZyB0dXBsZXMuCisgICAgIDwv ZW50cnk+CisgICAgPC9yb3c+CisgICAgPHJvdz4KKyAgICAgPGVudHJ5PjxsaXRlcmFsPndyaXRp bmcgbmV3IGhlYXA8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgPGVudHJ5PgorICAgICAgIDxjb21t YW5kPlJFUEFDSzwvY29tbWFuZD4gaXMgY3VycmVudGx5IHdyaXRpbmcgdGhlIG5ldyBoZWFwLgor ICAgICA8L2VudHJ5PgorICAgIDwvcm93PgorICAgIDxyb3c+CisgICAgIDxlbnRyeT48bGl0ZXJh bD5zd2FwcGluZyByZWxhdGlvbiBmaWxlczwvbGl0ZXJhbD48L2VudHJ5PgorICAgICA8ZW50cnk+ CisgICAgICAgVGhlIGNvbW1hbmQgaXMgY3VycmVudGx5IHN3YXBwaW5nIG5ld2x5LWJ1aWx0IGZp bGVzIGludG8gcGxhY2UuCisgICAgIDwvZW50cnk+CisgICAgPC9yb3c+CisgICAgPHJvdz4KKyAg ICAgPGVudHJ5PjxsaXRlcmFsPnJlYnVpbGRpbmcgaW5kZXg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgPGVudHJ5PgorICAgICAgIFRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSByZWJ1aWxkaW5nIGFu IGluZGV4LgorICAgICA8L2VudHJ5PgorICAgIDwvcm93PgorICAgIDxyb3c+CisgICAgIDxlbnRy eT48bGl0ZXJhbD5wZXJmb3JtaW5nIGZpbmFsIGNsZWFudXA8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgPGVudHJ5PgorICAgICAgIFRoZSBjb21tYW5kIGlzIHBlcmZvcm1pbmcgZmluYWwgY2xlYW51 cC4gIFdoZW4gdGhpcyBwaGFzZSBpcworICAgICAgIGNvbXBsZXRlZCwgPGNvbW1hbmQ+UkVQQUNL PC9jb21tYW5kPiB3aWxsIGVuZC4KKyAgICAgPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgIDwvdGJv ZHk+CisgICA8L3Rncm91cD4KKyAgPC90YWJsZT4KKyA8L3NlY3QyPgorCiAgPHNlY3QyIGlkPSJj b3B5LXByb2dyZXNzLXJlcG9ydGluZyI+CiAgIDx0aXRsZT5DT1BZIFByb2dyZXNzIFJlcG9ydGlu ZzwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBmNWJlNjM4ODY3YS4uZWFiZjky ZTM1MzYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKQEAgLTE2Nyw2ICsxNjcsNyBAQCBDb21wbGV0 ZSBsaXN0IG9mIHVzYWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwh RU5USVRZIHJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3IFNZU1RFTSAicmVmcmVzaF9tYXRlcmlhbGl6 ZWRfdmlldy5zZ21sIj4KIDwhRU5USVRZIHJlaW5kZXggICAgICAgICAgICBTWVNURU0gInJlaW5k ZXguc2dtbCI+CiA8IUVOVElUWSByZWxlYXNlU2F2ZXBvaW50ICAgU1lTVEVNICJyZWxlYXNlX3Nh dmVwb2ludC5zZ21sIj4KKzwhRU5USVRZIHJlcGFjayAgICAgICAgICAgICBTWVNURU0gInJlcGFj ay5zZ21sIj4KIDwhRU5USVRZIHJlc2V0ICAgICAgICAgICAgICBTWVNURU0gInJlc2V0LnNnbWwi PgogPCFFTlRJVFkgcmV2b2tlICAgICAgICAgICAgIFNZU1RFTSAicmV2b2tlLnNnbWwiPgogPCFF TlRJVFkgcm9sbGJhY2sgICAgICAgICAgIFNZU1RFTSAicm9sbGJhY2suc2dtbCI+CkBAIC0yMTIs NiArMjEzLDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2FibGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4g dGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSBwZ0lzcmVhZHkgICAgICAgICAgU1lTVEVNICJwZ19p c3JlYWR5LnNnbWwiPgogPCFFTlRJVFkgcGdSZWNlaXZld2FsICAgICAgIFNZU1RFTSAicGdfcmVj ZWl2ZXdhbC5zZ21sIj4KIDwhRU5USVRZIHBnUmVjdmxvZ2ljYWwgICAgICBTWVNURU0gInBnX3Jl Y3Zsb2dpY2FsLnNnbWwiPgorPCFFTlRJVFkgcGdSZXBhY2tkYiAgICAgICAgIFNZU1RFTSAicGdf cmVwYWNrZGIuc2dtbCI+CiA8IUVOVElUWSBwZ1Jlc2V0d2FsICAgICAgICAgU1lTVEVNICJwZ19y ZXNldHdhbC5zZ21sIj4KIDwhRU5USVRZIHBnUmVzdG9yZSAgICAgICAgICBTWVNURU0gInBnX3Jl c3RvcmUuc2dtbCI+CiA8IUVOVElUWSBwZ1Jld2luZCAgICAgICAgICAgU1lTVEVNICJwZ19yZXdp bmQuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NsdXN0ZXIuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9yZWYvY2x1c3Rlci5zZ21sCmluZGV4IDg4MTFmMTY5ZWEwLi5jZmNmYjY1ZTM0 OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jbHVzdGVyLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3JlZi9jbHVzdGVyLnNnbWwKQEAgLTMzLDUxICszMywxMyBAQCBDTFVTVEVSIFsgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4u XSApIF0gWyA8cgogICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgogCiAgIDxwYXJhPgotICAg PGNvbW1hbmQ+Q0xVU1RFUjwvY29tbWFuZD4gaW5zdHJ1Y3RzIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4KLSAgIHRvIGNsdXN0ZXIgdGhlIHRhYmxlIHNwZWNpZmllZAotICAg YnkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PgotICAgYmFzZWQgb24gdGhlIGluZGV4IHNwZWNpZmllZCBieQotICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmluZGV4X25hbWU8L3JlcGxhY2VhYmxlPi4gVGhlIGluZGV4IG11c3QK LSAgIGFscmVhZHkgaGF2ZSBiZWVuIGRlZmluZWQgb24KLSAgIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4uCisgICBUaGUgPGNvbW1hbmQ+Q0xV U1RFUjwvY29tbWFuZD4gY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvCisgICA8eHJlZiBsaW5rZW5k PSJzcWwtcmVwYWNrIi8+IHdpdGggYW4gPGxpdGVyYWw+VVNJTkcgSU5ERVg8L2xpdGVyYWw+Cisg ICBjbGF1c2UuICBTZWUgdGhlcmUgZm9yIG1vcmUgZGV0YWlscy4KICAgPC9wYXJhPgogCi0gIDxw YXJhPgotICAgV2hlbiBhIHRhYmxlIGlzIGNsdXN0ZXJlZCwgaXQgaXMgcGh5c2ljYWxseSByZW9y ZGVyZWQKLSAgIGJhc2VkIG9uIHRoZSBpbmRleCBpbmZvcm1hdGlvbi4gQ2x1c3RlcmluZyBpcyBh IG9uZS10aW1lIG9wZXJhdGlvbjoKLSAgIHdoZW4gdGhlIHRhYmxlIGlzIHN1YnNlcXVlbnRseSB1 cGRhdGVkLCB0aGUgY2hhbmdlcyBhcmUKLSAgIG5vdCBjbHVzdGVyZWQuICBUaGF0IGlzLCBubyBh dHRlbXB0IGlzIG1hZGUgdG8gc3RvcmUgbmV3IG9yCi0gICB1cGRhdGVkIHJvd3MgYWNjb3JkaW5n IHRvIHRoZWlyIGluZGV4IG9yZGVyLiAgKElmIG9uZSB3aXNoZXMsIG9uZSBjYW4KLSAgIHBlcmlv ZGljYWxseSByZWNsdXN0ZXIgYnkgaXNzdWluZyB0aGUgY29tbWFuZCBhZ2Fpbi4gIEFsc28sIHNl dHRpbmcKLSAgIHRoZSB0YWJsZSdzIDxsaXRlcmFsPmZpbGxmYWN0b3I8L2xpdGVyYWw+IHN0b3Jh Z2UgcGFyYW1ldGVyIHRvIGxlc3MgdGhhbgotICAgMTAwJSBjYW4gYWlkIGluIHByZXNlcnZpbmcg Y2x1c3RlciBvcmRlcmluZyBkdXJpbmcgdXBkYXRlcywgc2luY2UgdXBkYXRlZAotICAgcm93cyBh cmUga2VwdCBvbiB0aGUgc2FtZSBwYWdlIGlmIGVub3VnaCBzcGFjZSBpcyBhdmFpbGFibGUgdGhl cmUuKQotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBXaGVuIGEgdGFibGUgaXMgY2x1c3RlcmVk LCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+Ci0gICByZW1lbWJlcnMgd2hp Y2ggaW5kZXggaXQgd2FzIGNsdXN0ZXJlZCBieS4gIFRoZSBmb3JtCi0gICA8Y29tbWFuZD5DTFVT VEVSIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJs ZT48L2NvbW1hbmQ+Ci0gICByZWNsdXN0ZXJzIHRoZSB0YWJsZSB1c2luZyB0aGUgc2FtZSBpbmRl eCBhcyBiZWZvcmUuICBZb3UgY2FuIGFsc28KLSAgIHVzZSB0aGUgPGxpdGVyYWw+Q0xVU1RFUjwv bGl0ZXJhbD4gb3IgPGxpdGVyYWw+U0VUIFdJVEhPVVQgQ0xVU1RFUjwvbGl0ZXJhbD4KLSAgIGZv cm1zIG9mIDxsaW5rIGxpbmtlbmQ9InNxbC1hbHRlcnRhYmxlIj48Y29tbWFuZD5BTFRFUiBUQUJM RTwvY29tbWFuZD48L2xpbms+IHRvIHNldCB0aGUgaW5kZXggdG8gYmUgdXNlZCBmb3IKLSAgIGZ1 dHVyZSBjbHVzdGVyIG9wZXJhdGlvbnMsIG9yIHRvIGNsZWFyIGFueSBwcmV2aW91cyBzZXR0aW5n LgotICA8L3BhcmE+Cis8IS0tIERvIHdlIG5lZWQgdG8gZGVzY3JpYmUgZXhhY3RseSB3aGljaCBv cHRpb25zIG1hcCB0byB3aGF0PyAgVGhleSBzZWVtIG9idmlvdXMgdG8gbWUuIC0tPgogCi0gIDxw YXJhPgotICAgPGNvbW1hbmQ+Q0xVU1RFUjwvY29tbWFuZD4gd2l0aG91dCBhCi0gICA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IHJlY2x1c3Rl cnMgYWxsIHRoZQotICAgcHJldmlvdXNseS1jbHVzdGVyZWQgdGFibGVzIGluIHRoZSBjdXJyZW50 IGRhdGFiYXNlIHRoYXQgdGhlIGNhbGxpbmcgdXNlcgotICAgaGFzIHByaXZpbGVnZXMgZm9yLiAg VGhpcyBmb3JtIG9mIDxjb21tYW5kPkNMVVNURVI8L2NvbW1hbmQ+IGNhbm5vdCBiZQotICAgZXhl Y3V0ZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2suCi0gIDwvcGFyYT4KLQotICA8cGFyYT4K LSAgIFdoZW4gYSB0YWJsZSBpcyBiZWluZyBjbHVzdGVyZWQsIGFuIDxsaXRlcmFsPkFDQ0VTUwot ICAgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGlzIGFjcXVpcmVkIG9uIGl0LiBUaGlzIHByZXZl bnRzIGFueSBvdGhlcgotICAgZGF0YWJhc2Ugb3BlcmF0aW9ucyAoYm90aCByZWFkcyBhbmQgd3Jp dGVzKSBmcm9tIG9wZXJhdGluZyBvbiB0aGUKLSAgIHRhYmxlIHVudGlsIHRoZSA8Y29tbWFuZD5D TFVTVEVSPC9jb21tYW5kPiBpcyBmaW5pc2hlZC4KLSAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CiAK ICA8cmVmc2VjdDE+CkBAIC0xMzYsNjMgKzk4LDEyIEBAIENMVVNURVIgWyAoIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxy CiAgICAgb24gdGhlIHRhYmxlLgogICAgPC9wYXJhPgogCi0gICA8cGFyYT4KLSAgICBJbiBjYXNl cyB3aGVyZSB5b3UgYXJlIGFjY2Vzc2luZyBzaW5nbGUgcm93cyByYW5kb21seQotICAgIHdpdGhp biBhIHRhYmxlLCB0aGUgYWN0dWFsIG9yZGVyIG9mIHRoZSBkYXRhIGluIHRoZQotICAgIHRhYmxl IGlzIHVuaW1wb3J0YW50LiBIb3dldmVyLCBpZiB5b3UgdGVuZCB0byBhY2Nlc3Mgc29tZQotICAg IGRhdGEgbW9yZSB0aGFuIG90aGVycywgYW5kIHRoZXJlIGlzIGFuIGluZGV4IHRoYXQgZ3JvdXBz Ci0gICAgdGhlbSB0b2dldGhlciwgeW91IHdpbGwgYmVuZWZpdCBmcm9tIHVzaW5nIDxjb21tYW5k PkNMVVNURVI8L2NvbW1hbmQ+LgotICAgIElmIHlvdSBhcmUgcmVxdWVzdGluZyBhIHJhbmdlIG9m IGluZGV4ZWQgdmFsdWVzIGZyb20gYSB0YWJsZSwgb3IgYQotICAgIHNpbmdsZSBpbmRleGVkIHZh bHVlIHRoYXQgaGFzIG11bHRpcGxlIHJvd3MgdGhhdCBtYXRjaCwKLSAgICA8Y29tbWFuZD5DTFVT VEVSPC9jb21tYW5kPiB3aWxsIGhlbHAgYmVjYXVzZSBvbmNlIHRoZSBpbmRleCBpZGVudGlmaWVz IHRoZQotICAgIHRhYmxlIHBhZ2UgZm9yIHRoZSBmaXJzdCByb3cgdGhhdCBtYXRjaGVzLCBhbGwg b3RoZXIgcm93cwotICAgIHRoYXQgbWF0Y2ggYXJlIHByb2JhYmx5IGFscmVhZHkgb24gdGhlIHNh bWUgdGFibGUgcGFnZSwKLSAgICBhbmQgc28geW91IHNhdmUgZGlzayBhY2Nlc3NlcyBhbmQgc3Bl ZWQgdXAgdGhlIHF1ZXJ5LgotICAgPC9wYXJhPgotCi0gICA8cGFyYT4KLSAgICA8Y29tbWFuZD5D TFVTVEVSPC9jb21tYW5kPiBjYW4gcmUtc29ydCB0aGUgdGFibGUgdXNpbmcgZWl0aGVyIGFuIGlu ZGV4IHNjYW4KLSAgICBvbiB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciAoaWYgdGhlIGluZGV4IGlz IGEgYi10cmVlKSBhIHNlcXVlbnRpYWwKLSAgICBzY2FuIGZvbGxvd2VkIGJ5IHNvcnRpbmcuICBJ dCB3aWxsIGF0dGVtcHQgdG8gY2hvb3NlIHRoZSBtZXRob2QgdGhhdAotICAgIHdpbGwgYmUgZmFz dGVyLCBiYXNlZCBvbiBwbGFubmVyIGNvc3QgcGFyYW1ldGVycyBhbmQgYXZhaWxhYmxlIHN0YXRp c3RpY2FsCi0gICAgaW5mb3JtYXRpb24uCi0gICA8L3BhcmE+Ci0KICAgIDxwYXJhPgogICAgIFdo aWxlIDxjb21tYW5kPkNMVVNURVI8L2NvbW1hbmQ+IGlzIHJ1bm5pbmcsIHRoZSA8eHJlZgogICAg IGxpbmtlbmQ9Imd1Yy1zZWFyY2gtcGF0aCIvPiBpcyB0ZW1wb3JhcmlseSBjaGFuZ2VkIHRvIDxs aXRlcmFsPnBnX2NhdGFsb2csCiAgICAgcGdfdGVtcDwvbGl0ZXJhbD4uCiAgICA8L3BhcmE+CiAK LSAgIDxwYXJhPgotICAgIFdoZW4gYW4gaW5kZXggc2NhbiBpcyB1c2VkLCBhIHRlbXBvcmFyeSBj b3B5IG9mIHRoZSB0YWJsZSBpcyBjcmVhdGVkIHRoYXQKLSAgICBjb250YWlucyB0aGUgdGFibGUg ZGF0YSBpbiB0aGUgaW5kZXggb3JkZXIuICBUZW1wb3JhcnkgY29waWVzIG9mIGVhY2gKLSAgICBp bmRleCBvbiB0aGUgdGFibGUgYXJlIGNyZWF0ZWQgYXMgd2VsbC4gIFRoZXJlZm9yZSwgeW91IG5l ZWQgZnJlZSBzcGFjZSBvbgotICAgIGRpc2sgYXQgbGVhc3QgZXF1YWwgdG8gdGhlIHN1bSBvZiB0 aGUgdGFibGUgc2l6ZSBhbmQgdGhlIGluZGV4IHNpemVzLgotICAgPC9wYXJhPgotCi0gICA8cGFy YT4KLSAgICBXaGVuIGEgc2VxdWVudGlhbCBzY2FuIGFuZCBzb3J0IGlzIHVzZWQsIGEgdGVtcG9y YXJ5IHNvcnQgZmlsZSBpcwotICAgIGFsc28gY3JlYXRlZCwgc28gdGhhdCB0aGUgcGVhayB0ZW1w b3Jhcnkgc3BhY2UgcmVxdWlyZW1lbnQgaXMgYXMgbXVjaAotICAgIGFzIGRvdWJsZSB0aGUgdGFi bGUgc2l6ZSwgcGx1cyB0aGUgaW5kZXggc2l6ZXMuICBUaGlzIG1ldGhvZCBpcyBvZnRlbgotICAg IGZhc3RlciB0aGFuIHRoZSBpbmRleCBzY2FuIG1ldGhvZCwgYnV0IGlmIHRoZSBkaXNrIHNwYWNl IHJlcXVpcmVtZW50IGlzCi0gICAgaW50b2xlcmFibGUsIHlvdSBjYW4gZGlzYWJsZSB0aGlzIGNo b2ljZSBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIDx4cmVmCi0gICAgbGlua2VuZD0iZ3VjLWVuYWJs ZS1zb3J0Ii8+IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4uCi0gICA8L3BhcmE+Ci0KLSAgIDxw YXJhPgotICAgIEl0IGlzIGFkdmlzYWJsZSB0byBzZXQgPHhyZWYgbGlua2VuZD0iZ3VjLW1haW50 ZW5hbmNlLXdvcmstbWVtIi8+IHRvCi0gICAgYSByZWFzb25hYmx5IGxhcmdlIHZhbHVlIChidXQg bm90IG1vcmUgdGhhbiB0aGUgYW1vdW50IG9mIFJBTSB5b3UgY2FuCi0gICAgZGVkaWNhdGUgdG8g dGhlIDxjb21tYW5kPkNMVVNURVI8L2NvbW1hbmQ+IG9wZXJhdGlvbikgYmVmb3JlIGNsdXN0ZXJp bmcuCi0gICA8L3BhcmE+Ci0KLSAgIDxwYXJhPgotICAgIEJlY2F1c2UgdGhlIHBsYW5uZXIgcmVj b3JkcyBzdGF0aXN0aWNzIGFib3V0IHRoZSBvcmRlcmluZyBvZgotICAgIHRhYmxlcywgaXQgaXMg YWR2aXNhYmxlIHRvIHJ1biA8bGluayBsaW5rZW5kPSJzcWwtYW5hbHl6ZSI+PGNvbW1hbmQ+QU5B TFlaRTwvY29tbWFuZD48L2xpbms+Ci0gICAgb24gdGhlIG5ld2x5IGNsdXN0ZXJlZCB0YWJsZS4K LSAgICBPdGhlcndpc2UsIHRoZSBwbGFubmVyIG1pZ2h0IG1ha2UgcG9vciBjaG9pY2VzIG9mIHF1 ZXJ5IHBsYW5zLgotICAgPC9wYXJhPgotCiAgICA8cGFyYT4KICAgICBCZWNhdXNlIDxjb21tYW5k PkNMVVNURVI8L2NvbW1hbmQ+IHJlbWVtYmVycyB3aGljaCBpbmRleGVzIGFyZSBjbHVzdGVyZWQs CiAgICAgb25lIGNhbiBjbHVzdGVyIHRoZSB0YWJsZXMgb25lIHdhbnRzIGNsdXN0ZXJlZCBtYW51 YWxseSB0aGUgZmlyc3QgdGltZSwKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY2x1c3Rl cmRiLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NsdXN0ZXJkYi5zZ21sCmluZGV4IDBkMjA1MWJm NmYxLi41NDZjMTI4OWMzMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jbHVzdGVyZGIu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NsdXN0ZXJkYi5zZ21sCkBAIC02NCw2ICs2NCwx MSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIHRoaXMgdXRpbGl0eSBhbmQgdmlhIG90 aGVyIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyB0aGUgc2VydmVyLgogICA8L3BhcmE+CiAKKyAgPHBh cmE+CisgICA8YXBwbGljYXRpb24+Y2x1c3RlcmRiPC9hcHBsaWNhdGlvbj4gaGFzIGJlZW4gc3Vw ZXJjZWRlZCBieQorICAgPGFwcGxpY2F0aW9uPnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj4uCisg IDwvcGFyYT4KKwogIDwvcmVmc2VjdDE+CiAKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19yZXBhY2tkYi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXBhY2tkYi5zZ21sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMjU3MGQwNzFjYgotLS0gL2Rl di9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVwYWNrZGIuc2dtbApAQCAtMCwwICsx LDQ3OSBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXBhY2tkYi5zZ21sCitQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9ImFwcC1wZ3JlcGFja2RiIj4K KyA8aW5kZXh0ZXJtIHpvbmU9ImFwcC1wZ3JlcGFja2RiIj4KKyAgPHByaW1hcnk+cGdfcmVwYWNr ZGI8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0 bGU+PGFwcGxpY2F0aW9uPnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj48L3JlZmVudHJ5dGl0bGU+ CisgIDxtYW52b2xudW0+MTwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+QXBwbGljYXRpb248 L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKworIDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5w Z19yZXBhY2tkYjwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+cmVwYWNrIGFuZCBhbmFseXplIGEg PHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPgorICBkYXRhYmFzZTwvcmVmcHVy cG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lub3BzaXNkaXY+CisgIDxjbWRzeW5vcHNp cz4KKyAgIDxjb21tYW5kPnBnX3JlcGFja2RiPC9jb21tYW5kPgorICAgPGFyZyByZXA9InJlcGVh dCI+PHJlcGxhY2VhYmxlPmNvbm5lY3Rpb24tb3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAg IDxhcmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5vcHRpb248L3JlcGxhY2VhYmxlPjwvYXJn PgorCisgICA8YXJnIGNob2ljZT0icGxhaW4iIHJlcD0icmVwZWF0Ij4KKyAgICA8YXJnIGNob2lj ZT0ib3B0Ij4KKyAgICAgPGdyb3VwIGNob2ljZT0icGxhaW4iPgorICAgICAgPGFyZyBjaG9pY2U9 InBsYWluIj48b3B0aW9uPi10PC9vcHRpb24+PC9hcmc+CisgICAgICA8YXJnIGNob2ljZT0icGxh aW4iPjxvcHRpb24+LS10YWJsZTwvb3B0aW9uPjwvYXJnPgorICAgICA8L2dyb3VwPgorICAgICA8 cmVwbGFjZWFibGU+dGFibGU8L3JlcGxhY2VhYmxlPgorICAgICA8YXJnIGNob2ljZT0ib3B0Ij4o IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW48L3JlcGxhY2VhYmxlPiBbLC4u Ll0gKTwvYXJnPgorICAgIDwvYXJnPgorICAgPC9hcmc+CisKKyAgIDxhcmcgY2hvaWNlPSJvcHQi PgorICAgIDxncm91cCBjaG9pY2U9InBsYWluIj4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48 cmVwbGFjZWFibGU+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgICAgPGFyZyBjaG9pY2U9 InBsYWluIj48b3B0aW9uPi1hPC9vcHRpb24+PC9hcmc+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFp biI+PG9wdGlvbj4tLWFsbDwvb3B0aW9uPjwvYXJnPgorICAgIDwvZ3JvdXA+CisgICA8L2FyZz4K KyAgPC9jbWRzeW5vcHNpcz4KKworICA8Y21kc3lub3BzaXM+CisgICA8Y29tbWFuZD5wZ19yZXBh Y2tkYjwvY29tbWFuZD4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5jb25uZWN0 aW9uLW9wdGlvbjwvcmVwbGFjZWFibGU+PC9hcmc+CisgICA8YXJnIHJlcD0icmVwZWF0Ij48cmVw bGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKworICAgPGFyZyBjaG9pY2U9InBs YWluIiByZXA9InJlcGVhdCI+CisgICAgPGFyZyBjaG9pY2U9Im9wdCI+CisgICAgIDxncm91cCBj aG9pY2U9InBsYWluIj4KKyAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tbjwvb3B0 aW9uPjwvYXJnPgorICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tc2NoZW1hPC9v cHRpb24+PC9hcmc+CisgICAgIDwvZ3JvdXA+CisgICAgIDxyZXBsYWNlYWJsZT5zY2hlbWE8L3Jl cGxhY2VhYmxlPgorICAgIDwvYXJnPgorICAgPC9hcmc+CisKKyAgIDxhcmcgY2hvaWNlPSJvcHQi PgorICAgIDxncm91cCBjaG9pY2U9InBsYWluIj4KKyAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48 cmVwbGFjZWFibGU+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L2FyZz4KKyAgICAgPGFyZyBjaG9pY2U9 InBsYWluIj48b3B0aW9uPi1hPC9vcHRpb24+PC9hcmc+CisgICAgIDxhcmcgY2hvaWNlPSJwbGFp biI+PG9wdGlvbj4tLWFsbDwvb3B0aW9uPjwvYXJnPgorICAgIDwvZ3JvdXA+CisgICA8L2FyZz4K KyAgPC9jbWRzeW5vcHNpcz4KKworICA8Y21kc3lub3BzaXM+CisgICA8Y29tbWFuZD5wZ19yZXBh Y2tkYjwvY29tbWFuZD4KKyAgIDxhcmcgcmVwPSJyZXBlYXQiPjxyZXBsYWNlYWJsZT5jb25uZWN0 aW9uLW9wdGlvbjwvcmVwbGFjZWFibGU+PC9hcmc+CisgICA8YXJnIHJlcD0icmVwZWF0Ij48cmVw bGFjZWFibGU+b3B0aW9uPC9yZXBsYWNlYWJsZT48L2FyZz4KKworICAgPGFyZyBjaG9pY2U9InBs YWluIiByZXA9InJlcGVhdCI+CisgICAgPGFyZyBjaG9pY2U9Im9wdCI+CisgICAgIDxncm91cCBj aG9pY2U9InBsYWluIj4KKyAgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tTjwvb3B0 aW9uPjwvYXJnPgorICAgICAgPGFyZyBjaG9pY2U9InBsYWluIj48b3B0aW9uPi0tZXhjbHVkZS1z Y2hlbWE8L29wdGlvbj48L2FyZz4KKyAgICAgPC9ncm91cD4KKyAgICAgPHJlcGxhY2VhYmxlPnNj aGVtYTwvcmVwbGFjZWFibGU+CisgICAgPC9hcmc+CisgICA8L2FyZz4KKworICAgPGFyZyBjaG9p Y2U9Im9wdCI+CisgICAgPGdyb3VwIGNob2ljZT0icGxhaW4iPgorICAgICA8YXJnIGNob2ljZT0i cGxhaW4iPjxyZXBsYWNlYWJsZT5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvYXJnPgorICAgICA8YXJn IGNob2ljZT0icGxhaW4iPjxvcHRpb24+LWE8L29wdGlvbj48L2FyZz4KKyAgICAgPGFyZyBjaG9p Y2U9InBsYWluIj48b3B0aW9uPi0tYWxsPC9vcHRpb24+PC9hcmc+CisgICAgPC9ncm91cD4KKyAg IDwvYXJnPgorICA8L2NtZHN5bm9wc2lzPgorIDwvcmVmc3lub3BzaXNkaXY+CisKKyA8cmVmc2Vj dDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8YXBwbGlj YXRpb24+cGdfcmVwYWNrZGI8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlcGFja2lu ZyBhCisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlLgor ICAgPGFwcGxpY2F0aW9uPnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj4gd2lsbCBhbHNvIGdlbmVy YXRlIGludGVybmFsCisgICBzdGF0aXN0aWNzIHVzZWQgYnkgdGhlIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcXVlcnkKKyAgIG9wdGltaXplci4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgPGFwcGxpY2F0aW9uPnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj4gaXMgYSB3 cmFwcGVyIGFyb3VuZCB0aGUgU1FMCisgICBjb21tYW5kIDxsaW5rIGxpbmtlbmQ9InNxbC1yZXBh Y2siPjxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD48L2xpbms+IFRoZXJlCisgICBpcyBubyBlZmZl Y3RpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlcGFja2luZyBhbmQgYW5hbHl6aW5nIGRhdGFiYXNl cyB2aWEKKyAgIHRoaXMgdXRpbGl0eSBhbmQgdmlhIG90aGVyIG1ldGhvZHMgZm9yIGFjY2Vzc2lu ZyB0aGUgc2VydmVyLgorICA8L3BhcmE+CisKKyA8L3JlZnNlY3QxPgorCisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5PcHRpb25zPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgPGFwcGxpY2F0aW9u PnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj4gYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNvbW1hbmQt bGluZSBhcmd1bWVudHM6CisgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LWE8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0 aW9uPi0tYWxsPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZXBhY2sgYWxsIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj48b3B0aW9uYWw+LWQ8L29wdGlvbmFsPiA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+ZGJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8dGVybT48b3B0aW9uPjxvcHRpb25hbD4tLWRibmFtZT08L29wdGlvbmFsPjxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmaWVzIHRo ZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0byBiZSByZXBhY2tlZCBvciBhbmFseXplZCwKKyAgICAg ICAgd2hlbiA8b3B0aW9uPi1hPC9vcHRpb24+LzxvcHRpb24+LS1hbGw8L29wdGlvbj4gaXMgbm90 IHVzZWQuICBJZiB0aGlzCisgICAgICAgIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkYXRhYmFzZSBu YW1lIGlzIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgdmFyaWFibGUgPGVudmFy PlBHREFUQUJBU0U8L2VudmFyPi4gIElmIHRoYXQgaXMgbm90IHNldCwgdGhlIHVzZXIgbmFtZQor ICAgICAgICBzcGVjaWZpZWQgZm9yIHRoZSBjb25uZWN0aW9uIGlzIHVzZWQuCisgICAgICAgIFRo ZSA8cmVwbGFjZWFibGU+ZGJuYW1lPC9yZXBsYWNlYWJsZT4gY2FuIGJlCisgICAgICAgIGEgPGxp bmsgbGlua2VuZD0ibGlicHEtY29ubnN0cmluZyI+Y29ubmVjdGlvbiBzdHJpbmc8L2xpbms+LiAg SWYgc28sCisgICAgICAgIGNvbm5lY3Rpb24gc3RyaW5nIHBhcmFtZXRlcnMgd2lsbCBvdmVycmlk ZSBhbnkgY29uZmxpY3RpbmcgY29tbWFuZAorICAgICAgICBsaW5lIG9wdGlvbnMuCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+Cisg ICAgICA8dGVybT48b3B0aW9uPi0tZWNobzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRl bT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRWNobyB0aGUgY29tbWFuZHMgdGhhdCA8YXBwbGlj YXRpb24+cGdfcmVwYWNrZGI8L2FwcGxpY2F0aW9uPgorICAgICAgICBnZW5lcmF0ZXMgYW5kIHNl bmRzIHRvIHRoZSBzZXJ2ZXIuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAg ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxv cHRpb24+LWogPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5qb2JzPC9yZXBsYWNlYWJs ZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tam9icz08cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bmpvYnM8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRXhlY3V0ZSB0aGUgcmVw YWNrIG9yIGFuYWx5emUgY29tbWFuZHMgaW4gcGFyYWxsZWwgYnkgcnVubmluZworICAgICAgICA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmpvYnM8L3JlcGxhY2VhYmxlPgorICAgICAg ICBjb21tYW5kcyBzaW11bHRhbmVvdXNseS4gIFRoaXMgb3B0aW9uIG1heSByZWR1Y2UgdGhlIHBy b2Nlc3NpbmcgdGltZQorICAgICAgICBidXQgaXQgYWxzbyBpbmNyZWFzZXMgdGhlIGxvYWQgb24g dGhlIGRhdGFiYXNlIHNlcnZlci4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAg ICAgIDxhcHBsaWNhdGlvbj5wZ19yZXBhY2tkYjwvYXBwbGljYXRpb24+IHdpbGwgb3BlbgorICAg ICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmpvYnM8L3JlcGxhY2VhYmxlPiBj b25uZWN0aW9ucyB0byB0aGUKKyAgICAgICAgZGF0YWJhc2UsIHNvIG1ha2Ugc3VyZSB5b3VyIDx4 cmVmIGxpbmtlbmQ9Imd1Yy1tYXgtY29ubmVjdGlvbnMiLz4KKyAgICAgICAgc2V0dGluZyBpcyBo aWdoIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBhbGwgY29ubmVjdGlvbnMuCisgICAgICAgPC9wYXJh PgorICAgICAgIDxwYXJhPgorICAgICAgICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBtb2RlIG1pZ2h0 IGNhdXNlIGRlYWRsb2NrIGZhaWx1cmVzIGlmIGNlcnRhaW4KKyAgICAgICAgc3lzdGVtIGNhdGFs b2dzIGFyZSBwcm9jZXNzZWQgaW4gcGFyYWxsZWwuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LW4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVt YTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLXNj aGVtYT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1hPC9yZXBsYWNlYWJsZT48 L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAg IFJlcGFjayBvciBhbmFseXplIGFsbCB0YWJsZXMgaW4KKyAgICAgICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnNjaGVtYTwvcmVwbGFjZWFibGU+IG9ubHkuICBNdWx0aXBsZQorICAg ICAgICBzY2hlbWFzIGNhbiBiZSByZXBhY2tlZCBieSB3cml0aW5nIG11bHRpcGxlIDxvcHRpb24+ LW48L29wdGlvbj4KKyAgICAgICAgc3dpdGNoZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9s aXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LU4gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVt YTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4 Y2x1ZGUtc2NoZW1hPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zY2hlbWE8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRG8gbm90IHJlcGFjayBvciBhbmFseXplIGFueSB0YWJsZXMgaW4KKyAgICAgICAg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYTwvcmVwbGFjZWFibGU+LiAgTXVs dGlwbGUgc2NoZW1hcworICAgICAgICBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBs ZSA8b3B0aW9uPi1OPC9vcHRpb24+IHN3aXRjaGVzLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICA8dGVybT48b3B0aW9uPi1xPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlv bj4tLXF1aWV0PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBEbyBub3QgZGlzcGxheSBwcm9ncmVzcyBtZXNzYWdlcy4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tdCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dGFibGU8L3JlcGxhY2VhYmxlPiBbICg8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+Y29sdW1uPC9yZXBsYWNlYWJsZT4gWywuLi5dKSBdPC9vcHRpb24+PC90ZXJtPgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLXRhYmxlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50 YWJsZTwvcmVwbGFjZWFibGU+IFsgKDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1 bW48L3JlcGxhY2VhYmxlPiBbLC4uLl0pIF08L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlcGFjayBvciBhbmFseXplIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZTwvcmVwbGFjZWFibGU+CisgICAgICAgIG9ubHkuICBD b2x1bW4gbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGgKKyAg ICAgICAgdGhlIDxvcHRpb24+LS1hbmFseXplPC9vcHRpb24+IG9wdGlvbi4gIE11bHRpcGxlIHRh YmxlcyBjYW4gYmUKKyAgICAgICAgcmVwYWNrZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAg ICA8b3B0aW9uPi10PC9vcHRpb24+IHN3aXRjaGVzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 dGlwPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIElmIHlvdSBzcGVjaWZ5IGNvbHVtbnMsIHlv dSBwcm9iYWJseSBoYXZlIHRvIGVzY2FwZSB0aGUgcGFyZW50aGVzZXMKKyAgICAgICAgIGZyb20g dGhlIHNoZWxsLiAgKFNlZSBleGFtcGxlcyBiZWxvdy4pCisgICAgICAgIDwvcGFyYT4KKyAgICAg ICA8L3RpcD4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi12PC9vcHRpb24+PC90ZXJtPgor ICAgICAgPHRlcm0+PG9wdGlvbj4tLXZlcmJvc2U8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFByaW50IGRldGFpbGVkIGluZm9ybWF0aW9u IGR1cmluZyBwcm9jZXNzaW5nLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+ PG9wdGlvbj4tVjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8dGVybT48b3B0aW9uPi0tdmVyc2lv bjwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAg ICAgUHJpbnQgdGhlIDxhcHBsaWNhdGlvbj5wZ19yZXBhY2tkYjwvYXBwbGljYXRpb24+IHZlcnNp b24gYW5kIGV4aXQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9u Pi16PC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWFuYWx5emU8L29wdGlv bj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEFsc28g Y2FsY3VsYXRlIHN0YXRpc3RpY3MgZm9yIHVzZSBieSB0aGUgb3B0aW1pemVyLgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PG9wdGlvbj4tPzwvb3B0aW9uPjwvdGVybT4KKyAg ICAgICA8dGVybT48b3B0aW9uPi0taGVscDwvb3B0aW9uPjwvdGVybT4KKyAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgU2hvdyBoZWxwIGFib3V0IDxhcHBsaWNhdGlvbj5w Z19yZXBhY2tkYjwvYXBwbGljYXRpb24+IGNvbW1hbmQgbGluZQorICAgICAgIGFyZ3VtZW50cywg YW5kIGV4aXQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCisgICAgPC92YXJpYWJsZWxpc3Q+CisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIDxhcHBsaWNhdGlvbj5wZ19yZXBhY2tkYjwvYXBwbGljYXRpb24+IGFsc28gYWNjZXB0 cworICAgIHRoZSBmb2xsb3dpbmcgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgY29ubmVjdGlv biBwYXJhbWV0ZXJzOgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICA8dGVybT48b3B0aW9uPi1oIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ob3N0 PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0taG9z dD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aG9zdDwvcmVwbGFjZWFibGU+PC9vcHRp b24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVj aWZpZXMgdGhlIGhvc3QgbmFtZSBvZiB0aGUgbWFjaGluZSBvbiB3aGljaCB0aGUgc2VydmVyCisg ICAgICAgIGlzIHJ1bm5pbmcuICBJZiB0aGUgdmFsdWUgYmVnaW5zIHdpdGggYSBzbGFzaCwgaXQg aXMgdXNlZAorICAgICAgICBhcyB0aGUgZGlyZWN0b3J5IGZvciB0aGUgVW5peCBkb21haW4gc29j a2V0LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1wIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wb3J0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tcG9ydD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+cG9ydDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZpZXMgdGhlIFRDUCBwb3J0IG9yIGxvY2Fs IFVuaXggZG9tYWluIHNvY2tldCBmaWxlCisgICAgICAgIGV4dGVuc2lvbiBvbiB3aGljaCB0aGUg c2VydmVyCisgICAgICAgIGlzIGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LVUgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnVzZXJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8 dGVybT48b3B0aW9uPi0tdXNlcm5hbWU9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnVz ZXJuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIFVzZXIgbmFtZSB0byBjb25uZWN0IGFzLgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi13PC9vcHRpb24+PC90ZXJtPgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLW5vLXBhc3N3b3JkPC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBOZXZlciBpc3N1ZSBhIHBhc3N3b3JkIHBy b21wdC4gIElmIHRoZSBzZXJ2ZXIgcmVxdWlyZXMKKyAgICAgICAgcGFzc3dvcmQgYXV0aGVudGlj YXRpb24gYW5kIGEgcGFzc3dvcmQgaXMgbm90IGF2YWlsYWJsZSBieQorICAgICAgICBvdGhlciBt ZWFucyBzdWNoIGFzIGEgPGZpbGVuYW1lPi5wZ3Bhc3M8L2ZpbGVuYW1lPiBmaWxlLCB0aGUKKyAg ICAgICAgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwgZmFpbC4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1 c2VmdWwgaW4KKyAgICAgICAgYmF0Y2ggam9icyBhbmQgc2NyaXB0cyB3aGVyZSBubyB1c2VyIGlz IHByZXNlbnQgdG8gZW50ZXIgYQorICAgICAgICBwYXNzd29yZC4KKyAgICAgICA8L3BhcmE+Cisg ICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tVzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1wYXNzd29yZDwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgRm9yY2UgPGFwcGxpY2F0aW9uPnBnX3JlcGFja2RiPC9hcHBs aWNhdGlvbj4gdG8gcHJvbXB0IGZvciBhCisgICAgICAgIHBhc3N3b3JkIGJlZm9yZSBjb25uZWN0 aW5nIHRvIGEgZGF0YWJhc2UuCisgICAgICAgPC9wYXJhPgorCisgICAgICAgPHBhcmE+CisgICAg ICAgIFRoaXMgb3B0aW9uIGlzIG5ldmVyIGVzc2VudGlhbCwgc2luY2UKKyAgICAgICAgPGFwcGxp Y2F0aW9uPnBnX3JlcGFja2RiPC9hcHBsaWNhdGlvbj4gd2lsbCBhdXRvbWF0aWNhbGx5IHByb21w dAorICAgICAgICBmb3IgYSBwYXNzd29yZCBpZiB0aGUgc2VydmVyIGRlbWFuZHMgcGFzc3dvcmQg YXV0aGVudGljYXRpb24uCisgICAgICAgIEhvd2V2ZXIsIDxhcHBsaWNhdGlvbj5wZ19yZXBhY2tk YjwvYXBwbGljYXRpb24+IHdpbGwgd2FzdGUgYQorICAgICAgICBjb25uZWN0aW9uIGF0dGVtcHQg ZmluZGluZyBvdXQgdGhhdCB0aGUgc2VydmVyIHdhbnRzIGEgcGFzc3dvcmQuCisgICAgICAgIElu IHNvbWUgY2FzZXMgaXQgaXMgd29ydGggdHlwaW5nIDxvcHRpb24+LVc8L29wdGlvbj4gdG8gYXZv aWQgdGhlIGV4dHJhCisgICAgICAgIGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICA8dmFybGlz dGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLW1haW50ZW5hbmNlLWRiPTxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5kYm5hbWU8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgPG9wdGlv bj4tYTwvb3B0aW9uPi88b3B0aW9uPi0tYWxsPC9vcHRpb24+IGlzIHVzZWQsIGNvbm5lY3QKKyAg ICAgICAgdG8gdGhpcyBkYXRhYmFzZSB0byBnYXRoZXIgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzIHRv IHJlcGFjay4KKyAgICAgICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIDxsaXRlcmFsPnBvc3RncmVz PC9saXRlcmFsPiBkYXRhYmFzZSB3aWxsIGJlIHVzZWQsCisgICAgICAgIG9yIGlmIHRoYXQgZG9l cyBub3QgZXhpc3QsIDxsaXRlcmFsPnRlbXBsYXRlMTwvbGl0ZXJhbD4gd2lsbCBiZSB1c2VkLgor ICAgICAgICBUaGlzIGNhbiBiZSBhIDxsaW5rIGxpbmtlbmQ9ImxpYnBxLWNvbm5zdHJpbmciPmNv bm5lY3Rpb24KKyAgICAgICAgc3RyaW5nPC9saW5rPi4gIElmIHNvLCBjb25uZWN0aW9uIHN0cmlu ZyBwYXJhbWV0ZXJzIHdpbGwgb3ZlcnJpZGUgYW55CisgICAgICAgIGNvbmZsaWN0aW5nIGNvbW1h bmQgbGluZSBvcHRpb25zLiAgQWxzbywgY29ubmVjdGlvbiBzdHJpbmcgcGFyYW1ldGVycworICAg ICAgICBvdGhlciB0aGFuIHRoZSBkYXRhYmFzZSBuYW1lIGl0c2VsZiB3aWxsIGJlIHJlLXVzZWQg d2hlbiBjb25uZWN0aW5nCisgICAgICAgIHRvIG90aGVyIGRhdGFiYXNlcy4KKyAgICAgICA8L3Bh cmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8L3Zhcmlh YmxlbGlzdD4KKyAgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisKKyA8cmVmc2VjdDE+CisgIDx0 aXRsZT5FbnZpcm9ubWVudDwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKyAgIDx2YXJsaXN0 ZW50cnk+CisgICAgPHRlcm0+PGVudmFyPlBHREFUQUJBU0U8L2VudmFyPjwvdGVybT4KKyAgICA8 dGVybT48ZW52YXI+UEdIT1NUPC9lbnZhcj48L3Rlcm0+CisgICAgPHRlcm0+PGVudmFyPlBHUE9S VDwvZW52YXI+PC90ZXJtPgorICAgIDx0ZXJtPjxlbnZhcj5QR1VTRVI8L2VudmFyPjwvdGVybT4K KworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBEZWZhdWx0IGNvbm5lY3Rpb24g cGFyYW1ldGVycworICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxlbnZhcj5QR19DT0xPUjwvZW52 YXI+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVjaWZpZXMg d2hldGhlciB0byB1c2UgY29sb3IgaW4gZGlhZ25vc3RpYyBtZXNzYWdlcy4gUG9zc2libGUgdmFs dWVzCisgICAgICBhcmUgPGxpdGVyYWw+YWx3YXlzPC9saXRlcmFsPiwgPGxpdGVyYWw+YXV0bzwv bGl0ZXJhbD4gYW5kCisgICAgICA8bGl0ZXJhbD5uZXZlcjwvbGl0ZXJhbD4uCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0 PgorCisgIDxwYXJhPgorICAgVGhpcyB1dGlsaXR5LCBsaWtlIG1vc3Qgb3RoZXIgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB1dGlsaXRpZXMsCisgICBhbHNvIHVzZXMgdGhl IGVudmlyb25tZW50IHZhcmlhYmxlcyBzdXBwb3J0ZWQgYnkgPGFwcGxpY2F0aW9uPmxpYnBxPC9h cHBsaWNhdGlvbj4KKyAgIChzZWUgPHhyZWYgbGlua2VuZD0ibGlicHEtZW52YXJzIi8+KS4KKyAg PC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RGlhZ25v c3RpY3M8L3RpdGxlPgorCisgIDxwYXJhPgorICAgSW4gY2FzZSBvZiBkaWZmaWN1bHR5LCBzZWUK KyAgIDx4cmVmIGxpbmtlbmQ9InNxbC1yZXBhY2siLz4gYW5kIDx4cmVmIGxpbmtlbmQ9ImFwcC1w c3FsIi8+IGZvcgorICAgZGlzY3Vzc2lvbnMgb2YgcG90ZW50aWFsIHByb2JsZW1zIGFuZCBlcnJv ciBtZXNzYWdlcy4KKyAgIFRoZSBkYXRhYmFzZSBzZXJ2ZXIgbXVzdCBiZSBydW5uaW5nIGF0IHRo ZQorICAgdGFyZ2V0ZWQgaG9zdC4gIEFsc28sIGFueSBkZWZhdWx0IGNvbm5lY3Rpb24gc2V0dGlu Z3MgYW5kIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgdXNlZCBieSB0aGUgPGFwcGxpY2F0aW9u PmxpYnBxPC9hcHBsaWNhdGlvbj4gZnJvbnQtZW5kCisgICBsaWJyYXJ5IHdpbGwgYXBwbHkuCisg IDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5FeGFtcGxl czwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRvIHJlcGFjayB0aGUgZGF0YWJhc2UgPGxpdGVy YWw+dGVzdDwvbGl0ZXJhbD46Cis8c2NyZWVuPgorPHByb21wdD4kIDwvcHJvbXB0Pjx1c2VyaW5w dXQ+cGdfcmVwYWNrZGIgdGVzdDwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIFRvIHJlcGFjayBhbmQgYW5hbHl6ZSBmb3IgdGhlIG9wdGltaXplciBh IGRhdGFiYXNlIG5hbWVkCisgICAgPGxpdGVyYWw+YmlnZGI8L2xpdGVyYWw+OgorPHNjcmVlbj4K Kzxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0PnBnX3JlcGFja2RiIC0tYW5hbHl6ZSBiaWdk YjwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRv IHJlcGFjayBhIHNpbmdsZSB0YWJsZQorICAgIDxsaXRlcmFsPmZvbzwvbGl0ZXJhbD4gaW4gYSBk YXRhYmFzZSBuYW1lZAorICAgIDxsaXRlcmFsPnh5enp5PC9saXRlcmFsPiwgYW5kIGFuYWx5emUg YSBzaW5nbGUgY29sdW1uCisgICAgPGxpdGVyYWw+YmFyPC9saXRlcmFsPiBvZiB0aGUgdGFibGUg Zm9yIHRoZSBvcHRpbWl6ZXI6Cis8c2NyZWVuPgorPHByb21wdD4kIDwvcHJvbXB0Pjx1c2VyaW5w dXQ+cGdfcmVwYWNrZGIgLS1hbmFseXplIC0tdmVyYm9zZSAtLXRhYmxlPSdmb28oYmFyKScgeHl6 enk8L3VzZXJpbnB1dD4KKzwvc2NyZWVuPjwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVG8gcmVw YWNrIGFsbCB0YWJsZXMgaW4gdGhlIDxsaXRlcmFsPmZvbzwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFs PmJhcjwvbGl0ZXJhbD4gc2NoZW1hcworICAgIGluIGEgZGF0YWJhc2UgbmFtZWQgPGxpdGVyYWw+ eHl6enk8L2xpdGVyYWw+OgorPHNjcmVlbj4KKzxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0 PnBnX3JlcGFja2RiIC0tc2NoZW1hPSdmb28nIC0tc2NoZW1hPSdiYXInIHh5enp5PC91c2VyaW5w dXQ+Cis8L3NjcmVlbj48L3BhcmE+CisKKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+Cisg IDx0aXRsZT5TZWUgQWxzbzwvdGl0bGU+CisKKyAgPHNpbXBsZWxpc3QgdHlwZT0iaW5saW5lIj4K KyAgIDxtZW1iZXI+PHhyZWYgbGlua2VuZD0ic3FsLXJlcGFjayIvPjwvbWVtYmVyPgorICA8L3Np bXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKworPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvcmVwYWNrLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlcGFjay5zZ21sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZDlkODlmOGFhYQotLS0gL2Rl di9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcmVwYWNrLnNnbWwKQEAgLTAsMCArMSwyODQg QEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvcmVwYWNrLnNnbWwKK1Bvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0ic3FsLXJlcGFjayI+CisgPGluZGV4dGVybSB6 b25lPSJzcWwtcmVwYWNrIj4KKyAgPHByaW1hcnk+UkVQQUNLPC9wcmltYXJ5PgorIDwvaW5kZXh0 ZXJtPgorCisgPHJlZm1ldGE+CisgIDxyZWZlbnRyeXRpdGxlPlJFUEFDSzwvcmVmZW50cnl0aXRs ZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+CisgIDxyZWZtaXNjaW5mbz5TUUwgLSBMYW5n dWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4KKyA8L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRp dj4KKyAgPHJlZm5hbWU+UkVQQUNLPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5yZXdyaXRlIGEg dGFibGUgdG8gcmVjbGFpbSBkaXNrIHNwYWNlPC9yZWZwdXJwb3NlPgorIDwvcmVmbmFtZWRpdj4K KworIDxyZWZzeW5vcHNpc2Rpdj4KKzxzeW5vcHNpcz4KK1JFUEFDSyBbICggPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbIFVT SU5HIElOREVYIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4X25hbWU8L3Jl cGxhY2VhYmxlPiBdIF0gXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBjYW4gYmUgb25lIG9mOjwvcGhyYXNlPgorCisg ICAgVkVSQk9TRSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBs YWNlYWJsZT4gXQorICAgIEFOQUxZU0UgfCBBTkFMWVpFCis8L3N5bm9wc2lzPgorIDwvcmVmc3lu b3BzaXNkaXY+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisK KyAgPHBhcmE+CisgICA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+IHJlY2xhaW1zIHN0b3JhZ2Ug b2NjdXBpZWQgYnkgZGVhZAorICAgdHVwbGVzLiBVbmxpa2UgPGNvbW1hbmQ+VkFDVVVNPC9jb21t YW5kPiwgaXQgZG9lcyBzbyBieSByZXdyaXRpbmcgdGhlCisgICBlbnRpcmUgY29udGVudHMgb2Yg dGhlIHRhYmxlIHNwZWNpZmllZAorICAgYnkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBpbnRvIGEgbmV3IGRpc2sKKyAgIGZpbGUgd2l0aCBu byBleHRyYSBzcGFjZSAoZXhjZXB0IGZvciB0aGUgc3BhY2UgZ3VhcmFudGVlZCBieQorICAgdGhl IDxsaXRlcmFsPmZpbGxmYWN0b3I8L2xpdGVyYWw+IHN0b3JhZ2UgcGFyYW1ldGVyKSwgYWxsb3dp bmcgdW51c2VkIHNwYWNlCisgICB0byBiZSByZXR1cm5lZCB0byB0aGUgb3BlcmF0aW5nIHN5c3Rl bS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2l0aG91dAorICAgYSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+LCA8Y29tbWFuZD5SRVBB Q0s8L2NvbW1hbmQ+CisgICBwcm9jZXNzZXMgZXZlcnkgdGFibGUgYW5kIG1hdGVyaWFsaXplZCB2 aWV3IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIHRoYXQKKyAgIHRoZSBjdXJyZW50IHVzZXIgaGFz IHRoZSA8bGl0ZXJhbD5NQUlOVEFJTjwvbGl0ZXJhbD4gcHJpdmlsZWdlIG9uLiBUaGlzCisgICBm b3JtIG9mIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gY2Fubm90IGJlIGV4ZWN1dGVkIGluc2lk ZSBhIHRyYW5zYWN0aW9uCisgICBibG9jay4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYg YSA8bGl0ZXJhbD5VU0lORyBJTkRFWDwvbGl0ZXJhbD4gY2xhdXNlIGlzIHNwZWNpZmllZCwgdGhl IHJvd3MgYXJlCisgICBwaHlzaWNhbGx5IHJlb3JkZXJlZCBiYXNlZCBvbiBpbmZvcm1hdGlvbiBm cm9tIGFuIGluZGV4LiAgUGxlYXNlIHNlZSB0aGUKKyAgIG5vdGVzIG9uIGNsdXN0ZXJpbmcgYmVs b3cuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gYSB0YWJsZSBpcyBiZWluZyByZXBh Y2tlZCwgYW4gPGxpdGVyYWw+QUNDRVNTIEVYQ0xVU0lWRTwvbGl0ZXJhbD4gbG9jaworICAgaXMg YWNxdWlyZWQgb24gaXQuIFRoaXMgcHJldmVudHMgYW55IG90aGVyIGRhdGFiYXNlIG9wZXJhdGlv bnMgKGJvdGggcmVhZHMKKyAgIGFuZCB3cml0ZXMpIGZyb20gb3BlcmF0aW5nIG9uIHRoZSB0YWJs ZSB1bnRpbCB0aGUgPGNvbW1hbmQ+UkVQQUNLPC9jb21tYW5kPgorICAgaXMgZmluaXNoZWQuCisg IDwvcGFyYT4KKworICA8cmVmc2VjdDIgaWQ9InNxbC1yZXBhY2stbm90ZXMtb24tY2x1c3Rlcmlu ZyIgeHJlZmxhYmVsPSJOb3RlcyBvbiBDbHVzdGVyaW5nIj4KKyAgIDx0aXRsZT5Ob3RlcyBvbiBD bHVzdGVyaW5nPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgSWYgdGhlIDxsaXRlcmFsPlVTSU5H IElOREVYPC9saXRlcmFsPiBjbGF1c2UgaXMgc3BlY2lmaWVkLCB0aGUgcm93cyBpbgorICAgIHRo ZSB0YWJsZSBhcmUgcGh5c2ljYWxseSByZW9yZGVyZWQgZm9sbG93aW5nIGFuIGluZGV4OiBpZiBh biBpbmRleCBuYW1lCisgICAgaXMgc3BlY2lmaWVkIGluIHRoZSBjb21tYW5kLCB0aGVuIHRoYXQg aW5kZXggaXMgdXNlZDsgaWYgbm8gaW5kZXggbmFtZQorICAgIGlzIHNwZWNpZmllZCwgdGhlbiB0 aGUgaW5kZXggdGhhdCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIHRoZSBpbmRleCB0bworICAgIGNs dXN0ZXIgb24uICBJZiBubyBpbmRleCBoYXMgYmVlbiBjb25maWd1cmVkIGluIHRoaXMgd2F5LCBh biBlcnJvciBpcworICAgIHRocm93bi4gIFRoZSBpbmRleCBnaXZlbiBpbiB0aGUgPGxpdGVyYWw+ VVNJTkcgSU5ERVg8L2xpdGVyYWw+IGNsYXVzZQorICAgIGlzIGNvbmZpZ3VyZWQgYXMgdGhlIGlu ZGV4IHRvIGNsdXN0ZXIgb24sIGFzIHdlbGwgYXMgYW4gaW5kZXggZ2l2ZW4KKyAgICB0byB0aGUg PGNvbW1hbmQ+Q0xVU1RFUjwvY29tbWFuZD4gY29tbWFuZC4gIEFuIGluZGV4IGNhbiBiZSBzZXQK KyAgICBtYW51YWxseSB1c2luZyA8Y29tbWFuZD5BTFRFUiBUQUJMRSAuLi4gQ0xVU1RFUiBPTjwv Y29tbWFuZD4sIGFuZCByZXNldAorICAgIHdpdGggPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIFNF VCBXSVRIT1VUIENMVVNURVI8L2NvbW1hbmQ+LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAg ICBJZiBubyB0YWJsZSBuYW1lIGlzIHNwZWNpZmllZCBpbiA8Y29tbWFuZD5SRVBBQ0sgVVNJTkcg SU5ERVg8L2NvbW1hbmQ+LAorICAgIGFsbCB0YWJsZXMgd2hpY2ggaGF2ZSBhIGNsdXN0ZXJpbmcg aW5kZXggZGVmaW5lZCBhbmQgd2hpY2ggdGhlIGNhbGxpbmcKKyAgICB1c2VyIGhhcyBwcml2aWxl Z2VzIGZvciBhcmUgcHJvY2Vzc2VkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBDbHVz dGVyaW5nIGlzIGEgb25lLXRpbWUgb3BlcmF0aW9uOiB3aGVuIHRoZSB0YWJsZSBpcworICAgIHN1 YnNlcXVlbnRseSB1cGRhdGVkLCB0aGUgY2hhbmdlcyBhcmUgbm90IGNsdXN0ZXJlZC4gIFRoYXQg aXMsIG5vIGF0dGVtcHQKKyAgICBpcyBtYWRlIHRvIHN0b3JlIG5ldyBvciB1cGRhdGVkIHJvd3Mg YWNjb3JkaW5nIHRvIHRoZWlyIGluZGV4IG9yZGVyLiAgKElmCisgICAgb25lIHdpc2hlcywgb25l IGNhbiBwZXJpb2RpY2FsbHkgcmVjbHVzdGVyIGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQgYWdhaW4u CisgICAgQWxzbywgc2V0dGluZyB0aGUgdGFibGUncyA8bGl0ZXJhbD5maWxsZmFjdG9yPC9saXRl cmFsPiBzdG9yYWdlIHBhcmFtZXRlcgorICAgIHRvIGxlc3MgdGhhbiAxMDAlIGNhbiBhaWQgaW4g cHJlc2VydmluZyBjbHVzdGVyIG9yZGVyaW5nIGR1cmluZyB1cGRhdGVzLAorICAgIHNpbmNlIHVw ZGF0ZWQgcm93cyBhcmUga2VwdCBvbiB0aGUgc2FtZSBwYWdlIGlmIGVub3VnaCBzcGFjZSBpcyBh dmFpbGFibGUKKyAgICB0aGVyZS4pCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEluIGNh c2VzIHdoZXJlIHlvdSBhcmUgYWNjZXNzaW5nIHNpbmdsZSByb3dzIHJhbmRvbWx5IHdpdGhpbiBh IHRhYmxlLCB0aGUKKyAgICBhY3R1YWwgb3JkZXIgb2YgdGhlIGRhdGEgaW4gdGhlIHRhYmxlIGlz IHVuaW1wb3J0YW50LiBIb3dldmVyLCBpZiB5b3UgdGVuZAorICAgIHRvIGFjY2VzcyBzb21lIGRh dGEgbW9yZSB0aGFuIG90aGVycywgYW5kIHRoZXJlIGlzIGFuIGluZGV4IHRoYXQgZ3JvdXBzCisg ICAgdGhlbSB0b2dldGhlciwgeW91IHdpbGwgYmVuZWZpdCBmcm9tIHVzaW5nIGNsdXN0ZXJpbmcu ICBJZgorICAgIHlvdSBhcmUgcmVxdWVzdGluZyBhIHJhbmdlIG9mIGluZGV4ZWQgdmFsdWVzIGZy b20gYSB0YWJsZSwgb3IgYSBzaW5nbGUKKyAgICBpbmRleGVkIHZhbHVlIHRoYXQgaGFzIG11bHRp cGxlIHJvd3MgdGhhdCBtYXRjaCwKKyAgICA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+IHdpbGwg aGVscCBiZWNhdXNlIG9uY2UgdGhlIGluZGV4IGlkZW50aWZpZXMgdGhlCisgICAgdGFibGUgcGFn ZSBmb3IgdGhlIGZpcnN0IHJvdyB0aGF0IG1hdGNoZXMsIGFsbCBvdGhlciByb3dzIHRoYXQgbWF0 Y2ggYXJlCisgICAgcHJvYmFibHkgYWxyZWFkeSBvbiB0aGUgc2FtZSB0YWJsZSBwYWdlLCBhbmQg c28geW91IHNhdmUgZGlzayBhY2Nlc3NlcyBhbmQKKyAgICBzcGVlZCB1cCB0aGUgcXVlcnkuCisg ICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gY2Fu IHJlLXNvcnQgdGhlIHRhYmxlIHVzaW5nIGVpdGhlciBhbiBpbmRleCBzY2FuCisgICAgb24gdGhl IHNwZWNpZmllZCBpbmRleCAoaWYgdGhlIGluZGV4IGlzIGEgYi10cmVlKSwgb3IgYSBzZXF1ZW50 aWFsIHNjYW4KKyAgICBmb2xsb3dlZCBieSBzb3J0aW5nLiAgSXQgd2lsbCBhdHRlbXB0IHRvIGNo b29zZSB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZQorICAgIGZhc3RlciwgYmFzZWQgb24gcGxhbm5l ciBjb3N0IHBhcmFtZXRlcnMgYW5kIGF2YWlsYWJsZSBzdGF0aXN0aWNhbAorICAgIGluZm9ybWF0 aW9uLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCZWNhdXNlIHRoZSBwbGFubmVyIHJl Y29yZHMgc3RhdGlzdGljcyBhYm91dCB0aGUgb3JkZXJpbmcgb2YgdGFibGVzLCBpdCBpcworICAg IGFkdmlzYWJsZSB0bworICAgIHJ1biA8bGluayBsaW5rZW5kPSJzcWwtYW5hbHl6ZSI+PGNvbW1h bmQ+QU5BTFlaRTwvY29tbWFuZD48L2xpbms+IG9uIHRoZQorICAgIG5ld2x5IHJlcGFja2VkIHRh YmxlLiAgT3RoZXJ3aXNlLCB0aGUgcGxhbm5lciBtaWdodCBtYWtlIHBvb3IgY2hvaWNlcyBvZgor ICAgIHF1ZXJ5IHBsYW5zLgorICAgPC9wYXJhPgorICA8L3JlZnNlY3QyPgorCisgIDxyZWZzZWN0 MiBpZD0ic3FsLXJlcGFjay1ub3Rlcy1vbi1yZXNvdXJjZXMiIHhyZWZsYWJlbD0iTm90ZXMgb24g UmVzb3VyY2VzIj4KKyAgIDx0aXRsZT5Ob3RlcyBvbiBSZXNvdXJjZXM8L3RpdGxlPgorCisgICA8 cGFyYT4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4gb3IgYSBzZXF1ZW50aWFsIHNjYW4gd2l0aG91 dCBzb3J0IGlzIHVzZWQsIGEgdGVtcG9yYXJ5CisgICAgY29weSBvZiB0aGUgdGFibGUgaXMgY3Jl YXRlZCB0aGF0IGNvbnRhaW5zIHRoZSB0YWJsZSBkYXRhIGluIHRoZSBpbmRleAorICAgIG9yZGVy LiAgVGVtcG9yYXJ5IGNvcGllcyBvZiBlYWNoIGluZGV4IG9uIHRoZSB0YWJsZSBhcmUgY3JlYXRl ZCBhcyB3ZWxsLgorICAgIFRoZXJlZm9yZSwgeW91IG5lZWQgZnJlZSBzcGFjZSBvbiBkaXNrIGF0 IGxlYXN0IGVxdWFsIHRvIHRoZSBzdW0gb2YgdGhlCisgICAgdGFibGUgc2l6ZSBhbmQgdGhlIGlu ZGV4IHNpemVzLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIGEgc2VxdWVudGlh bCBzY2FuIGFuZCBzb3J0IGlzIHVzZWQsIGEgdGVtcG9yYXJ5IHNvcnQgZmlsZSBpcyBhbHNvCisg ICAgY3JlYXRlZCwgc28gdGhhdCB0aGUgcGVhayB0ZW1wb3Jhcnkgc3BhY2UgcmVxdWlyZW1lbnQg aXMgYXMgbXVjaCBhcyBkb3VibGUKKyAgICB0aGUgdGFibGUgc2l6ZSwgcGx1cyB0aGUgaW5kZXgg c2l6ZXMuICBUaGlzIG1ldGhvZCBpcyBvZnRlbiBmYXN0ZXIgdGhhbgorICAgIHRoZSBpbmRleCBz Y2FuIG1ldGhvZCwgYnV0IGlmIHRoZSBkaXNrIHNwYWNlIHJlcXVpcmVtZW50IGlzIGludG9sZXJh YmxlLAorICAgIHlvdSBjYW4gZGlzYWJsZSB0aGlzIGNob2ljZSBieSB0ZW1wb3JhcmlseSBzZXR0 aW5nCisgICAgPHhyZWYgbGlua2VuZD0iZ3VjLWVuYWJsZS1zb3J0Ii8+IHRvIDxsaXRlcmFsPm9m ZjwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEl0IGlzIGFkdmlzYWJs ZSB0byBzZXQgPHhyZWYgbGlua2VuZD0iZ3VjLW1haW50ZW5hbmNlLXdvcmstbWVtIi8+IHRvIGEK KyAgICByZWFzb25hYmx5IGxhcmdlIHZhbHVlIChidXQgbm90IG1vcmUgdGhhbiB0aGUgYW1vdW50 IG9mIFJBTSB5b3UgY2FuCisgICAgZGVkaWNhdGUgdG8gdGhlIDxjb21tYW5kPlJFUEFDSzwvY29t bWFuZD4gb3BlcmF0aW9uKSBiZWZvcmUgcmVwYWNraW5nLgorICAgPC9wYXJhPgorICA8L3JlZnNl Y3QyPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlBhcmFtZXRlcnM8 L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT48 L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBuYW1lIChwb3Nz aWJseSBzY2hlbWEtcXVhbGlmaWVkKSBvZiBhIHRhYmxlLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0 ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleF9uYW1lPC9yZXBsYWNlYWJs ZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBuYW1lIG9m IGFuIGluZGV4LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPlZFUkJPU0U8L2xp dGVyYWw+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBQcmludHMg YSBwcm9ncmVzcyByZXBvcnQgYXMgZWFjaCB0YWJsZSBpcyByZXBhY2tlZAorICAgICAgYXQgPGxp dGVyYWw+SU5GTzwvbGl0ZXJhbD4gbGV2ZWwuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxp dGVyYWw+QU5BTFlaRTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPHRlcm0+PGxpdGVyYWw+QU5BTFlT RTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEFw cGxpZXMgPHhyZWYgbGlua2VuZD0ic3FsLWFuYWx5emUiLz4gb24gdGhlIHRhYmxlIGFmdGVyIHJl cGFja2luZy4gIFRoaXMgaXMKKyAgICAgIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCB3aGVuIGEg c2luZ2xlIChub24tcGFydGl0aW9uZWQpIHRhYmxlIGlzIHNwZWNpZmllZC4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVw bGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTcGVj aWZpZXMgd2hldGhlciB0aGUgc2VsZWN0ZWQgb3B0aW9uIHNob3VsZCBiZSB0dXJuZWQgb24gb3Ig b2ZmLgorICAgICAgWW91IGNhbiB3cml0ZSA8bGl0ZXJhbD5UUlVFPC9saXRlcmFsPiwgPGxpdGVy YWw+T048L2xpdGVyYWw+LCBvcgorICAgICAgPGxpdGVyYWw+MTwvbGl0ZXJhbD4gdG8gZW5hYmxl IHRoZSBvcHRpb24sIGFuZCA8bGl0ZXJhbD5GQUxTRTwvbGl0ZXJhbD4sCisgICAgICA8bGl0ZXJh bD5PRkY8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD4wPC9saXRlcmFsPiB0byBkaXNhYmxlIGl0LiAg VGhlCisgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFj ZWFibGU+IHZhbHVlIGNhbiBhbHNvCisgICAgICBiZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlIDxs aXRlcmFsPlRSVUU8L2xpdGVyYWw+IGlzIGFzc3VtZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFyaWFibGVsaXN0PgorIDwvcmVmc2Vj dDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgIDxwYXJhPgor ICAgIFRvIHJlcGFjayBhIHRhYmxlLCBvbmUgbXVzdCBoYXZlIHRoZSA8bGl0ZXJhbD5NQUlOVEFJ TjwvbGl0ZXJhbD4gcHJpdmlsZWdlCisgICAgb24gdGhlIHRhYmxlLgorICAgPC9wYXJhPgorCisg ICA8cGFyYT4KKyAgICBXaGlsZSA8Y29tbWFuZD5SRVBBQ0s8L2NvbW1hbmQ+IGlzIHJ1bm5pbmcs IHRoZSA8eHJlZgorICAgIGxpbmtlbmQ9Imd1Yy1zZWFyY2gtcGF0aCIvPiBpcyB0ZW1wb3Jhcmls eSBjaGFuZ2VkIHRvIDxsaXRlcmFsPnBnX2NhdGFsb2csCisgICAgcGdfdGVtcDwvbGl0ZXJhbD4u CisgICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgRWFjaCBiYWNrZW5kIHJ1bm5pbmcgPGNvbW1h bmQ+UkVQQUNLPC9jb21tYW5kPiB3aWxsIHJlcG9ydCBpdHMgcHJvZ3Jlc3MKKyAgICBpbiB0aGUg PHN0cnVjdG5hbWU+cGdfc3RhdF9wcm9ncmVzc19yZXBhY2s8L3N0cnVjdG5hbWU+IHZpZXcuIFNl ZQorICAgIDx4cmVmIGxpbmtlbmQ9InJlcGFjay1wcm9ncmVzcy1yZXBvcnRpbmciLz4gZm9yIGRl dGFpbHMuCisgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgUmVwYWNraW5nIGEgcGFydGl0aW9u ZWQgdGFibGUgcmVwYWNrcyBlYWNoIG9mIGl0cyBwYXJ0aXRpb25zLiBJZiBhbiBpbmRleAorICAg IGlzIHNwZWNpZmllZCwgZWFjaCBwYXJ0aXRpb24gaXMgcmVwYWNrZWQgdXNpbmcgdGhlIHBhcnRp dGlvbiBvZiB0aGF0CisgICAgaW5kZXguIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gb24gYSBw YXJ0aXRpb25lZCB0YWJsZSBjYW5ub3QgYmUgZXhlY3V0ZWQKKyAgICBpbnNpZGUgYSB0cmFuc2Fj dGlvbiBibG9jay4KKyAgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+Cisg IDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBSZXBhY2sgdGhlIHRhYmxl IDxsaXRlcmFsPmVtcGxveWVlczwvbGl0ZXJhbD46Cis8cHJvZ3JhbWxpc3Rpbmc+CitSRVBBQ0sg ZW1wbG95ZWVzOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg UmVwYWNrIHRoZSB0YWJsZSA8bGl0ZXJhbD5lbXBsb3llZXM8L2xpdGVyYWw+IG9uIHRoZSBiYXNp cyBvZiBpdHMKKyAgIGluZGV4IDxsaXRlcmFsPmVtcGxveWVlc19pbmQ8L2xpdGVyYWw+IChTaW5j ZSBpbmRleCBpcyB1c2VkIGhlcmUsIHRoaXMgaXMKKyAgIGVmZmVjdGl2ZWx5IGNsdXN0ZXJpbmcp OgorPHByb2dyYW1saXN0aW5nPgorUkVQQUNLIGVtcGxveWVlcyBVU0lORyBJTkRFWCBlbXBsb3ll ZXNfaW5kOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgUmVw YWNrIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIG9uIHdoaWNoIHlvdSBoYXZlCisgICB0aGUg PGxpdGVyYWw+TUFJTlRBSU48L2xpdGVyYWw+IHByaXZpbGVnZToKKzxwcm9ncmFtbGlzdGluZz4K K1JFUEFDSzsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8cmVm c2VjdDE+CisgIDx0aXRsZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRo ZXJlIGlzIG5vIDxjb21tYW5kPlJFUEFDSzwvY29tbWFuZD4gc3RhdGVtZW50IGluIHRoZSBTUUwg c3RhbmRhcmQuCisgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKzwvcmVmZW50cnk+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3ZhY3V1bS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi92 YWN1dW0uc2dtbAppbmRleCBiZDVkY2FmODZhNS4uMDYyYjY1OGNmY2QgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvdmFjdXVtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi92YWN1dW0u c2dtbApAQCAtMjUsNyArMjUsNiBAQCBWQUNVVU0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSBbIDxyZQogCiA8cGhyYXNl PndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxl PiBjYW4gYmUgb25lIG9mOjwvcGhyYXNlPgogCi0gICAgRlVMTCBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgIEZSRUVaRSBbIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgIFZF UkJPU0UgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFi bGU+IF0KICAgICBBTkFMWVpFIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xl YW48L3JlcGxhY2VhYmxlPiBdCkBAIC0zOSw2ICszOCw3IEBAIFZBQ1VVTSBbICggPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsg PHJlCiAgICAgU0tJUF9EQVRBQkFTRV9TVEFUUyBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5ib29sZWFuPC9yZXBsYWNlYWJsZT4gXQogICAgIE9OTFlfREFUQUJBU0VfU1RBVFMgWyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAg ICBCVUZGRVJfVVNBR0VfTElNSVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNpemU8 L3JlcGxhY2VhYmxlPgorICAgIEZVTEwgWyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KIAogPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnRhYmxlX2FuZF9jb2x1bW5zPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+ CiAKQEAgLTk1LDIwICs5NSw2IEBAIFZBQ1VVTSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIFsgPHJlCiAgIDx0aXRsZT5Q YXJhbWV0ZXJzPC90aXRsZT4KIAogICA8dmFyaWFibGVsaXN0PgotICAgPHZhcmxpc3RlbnRyeT4K LSAgICA8dGVybT48bGl0ZXJhbD5GVUxMPC9saXRlcmFsPjwvdGVybT4KLSAgICA8bGlzdGl0ZW0+ Ci0gICAgIDxwYXJhPgotICAgICAgU2VsZWN0cyA8cXVvdGU+ZnVsbDwvcXVvdGU+IHZhY3V1bSwg d2hpY2ggY2FuIHJlY2xhaW0gbW9yZQotICAgICAgc3BhY2UsIGJ1dCB0YWtlcyBtdWNoIGxvbmdl ciBhbmQgZXhjbHVzaXZlbHkgbG9ja3MgdGhlIHRhYmxlLgotICAgICAgVGhpcyBtZXRob2QgYWxz byByZXF1aXJlcyBleHRyYSBkaXNrIHNwYWNlLCBzaW5jZSBpdCB3cml0ZXMgYQotICAgICAgbmV3 IGNvcHkgb2YgdGhlIHRhYmxlIGFuZCBkb2Vzbid0IHJlbGVhc2UgdGhlIG9sZCBjb3B5IHVudGls Ci0gICAgICB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLiAgVXN1YWxseSB0aGlzIHNob3VsZCBv bmx5IGJlIHVzZWQgd2hlbiBhCi0gICAgICBzaWduaWZpY2FudCBhbW91bnQgb2Ygc3BhY2UgbmVl ZHMgdG8gYmUgcmVjbGFpbWVkIGZyb20gd2l0aGluIHRoZSB0YWJsZS4KLSAgICAgPC9wYXJhPgot ICAgIDwvbGlzdGl0ZW0+Ci0gICA8L3Zhcmxpc3RlbnRyeT4KLQogICAgPHZhcmxpc3RlbnRyeT4K ICAgICA8dGVybT48bGl0ZXJhbD5GUkVFWkU8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRl bT4KQEAgLTM2Miw2ICszNDgsMjMgQEAgVkFDVVVNIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0gWyA8cmUKICAgICA8L2xp c3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRl cm0+PGxpdGVyYWw+RlVMTDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIFRoaXMgb3B0aW9uLCB3aGljaCBpcyBkZXByZWNhdGVkLCBtYWtlcyA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+CisgICAgICBiZWhhdmUgbGlrZSA8Y29tbWFuZD5SRVBBQ0s8 L2NvbW1hbmQ+IHdpdGhvdXQgYQorICAgICAgPGxpdGVyYWw+VVNJTkcgSU5ERVg8L2xpdGVyYWw+ IGNsYXVzZS4KKyAgICAgIFRoaXMgbWV0aG9kIG9mIGNvbXBhY3RpbmcgdGhlIHRhYmxlIHRha2Vz IG11Y2ggbG9uZ2VyIHRoYW4KKyAgICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gYW5kIGV4 Y2x1c2l2ZWx5IGxvY2tzIHRoZSB0YWJsZS4KKyAgICAgIFRoaXMgbWV0aG9kIGFsc28gcmVxdWly ZXMgZXh0cmEgZGlzayBzcGFjZSwgc2luY2UgaXQgd3JpdGVzIGEKKyAgICAgIG5ldyBjb3B5IG9m IHRoZSB0YWJsZSBhbmQgZG9lc24ndCByZWxlYXNlIHRoZSBvbGQgY29weSB1bnRpbAorICAgICAg dGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4gIFVzdWFsbHkgdGhpcyBzaG91bGQgb25seSBiZSB1 c2VkIHdoZW4gYQorICAgICAgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHNwYWNlIG5lZWRzIHRvIGJl IHJlY2xhaW1lZCBmcm9tIHdpdGhpbiB0aGUgdGFibGUuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgPHRl cm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPjwv dGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNl LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKaW5kZXggZmY4NWFjZTgzZmMuLjJl ZTA4ZTIxZjQxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sCkBAIC0xOTUsNiArMTk1LDcgQEAKICAgICZyZWZy ZXNoTWF0ZXJpYWxpemVkVmlldzsKICAgICZyZWluZGV4OwogICAgJnJlbGVhc2VTYXZlcG9pbnQ7 CisgICAmcmVwYWNrOwogICAgJnJlc2V0OwogICAgJnJldm9rZTsKICAgICZyb2xsYmFjazsKQEAg LTI1Nyw2ICsyNTgsNyBAQAogICAgJnBnSXNyZWFkeTsKICAgICZwZ1JlY2VpdmV3YWw7CiAgICAm cGdSZWN2bG9naWNhbDsKKyAgICZwZ1JlcGFja2RiOwogICAgJnBnUmVzdG9yZTsKICAgICZwZ1Zl cmlmeUJhY2t1cDsKICAgICZwc3FsUmVmOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggYmNiYWM4NDRiYjYuLjc5ZjlkZTVkNzYwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTc0MSwxMyArNzQxLDEzIEBAIGhlYXBhbV9y ZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hl YXAsCiAJaWYgKE9sZEluZGV4ICE9IE5VTEwgJiYgIXVzZV9zb3J0KQogCXsKIAkJY29uc3QgaW50 CWNpX2luZGV4W10gPSB7Ci0JCQlQUk9HUkVTU19DTFVTVEVSX1BIQVNFLAotCQkJUFJPR1JFU1Nf Q0xVU1RFUl9JTkRFWF9SRUxJRAorCQkJUFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJUFJPR1JF U1NfUkVQQUNLX0lOREVYX1JFTElECiAJCX07CiAJCWludDY0CQljaV92YWxbMl07CiAKIAkJLyog U2V0IHBoYXNlIGFuZCBPSURPbGRJbmRleCB0byBjb2x1bW5zICovCi0JCWNpX3ZhbFswXSA9IFBS T0dSRVNTX0NMVVNURVJfUEhBU0VfSU5ERVhfU0NBTl9IRUFQOworCQljaV92YWxbMF0gPSBQUk9H UkVTU19SRVBBQ0tfUEhBU0VfSU5ERVhfU0NBTl9IRUFQOwogCQljaV92YWxbMV0gPSBSZWxhdGlv bkdldFJlbGlkKE9sZEluZGV4KTsKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJh bSgyLCBjaV9pbmRleCwgY2lfdmFsKTsKIApAQCAtNzU5LDE1ICs3NTksMTUgQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVh cCwKIAllbHNlCiAJewogCQkvKiBJbiBzY2FuLWFuZC1zb3J0IG1vZGUgYW5kIGFsc28gVkFDVVVN IEZVTEwsIHNldCBwaGFzZSAqLwotCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dS RVNTX0NMVVNURVJfUEhBU0UsCi0JCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9TRVFf U0NBTl9IRUFQKTsKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19SRVBB Q0tfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfUkVQQUNLX1BIQVNFX1NFUV9TQ0FOX0hFQVAp OwogCiAJCXRhYmxlU2NhbiA9IHRhYmxlX2JlZ2luc2NhbihPbGRIZWFwLCBTbmFwc2hvdEFueSwg MCwgKFNjYW5LZXkpIE5VTEwpOwogCQloZWFwU2NhbiA9IChIZWFwU2NhbkRlc2MpIHRhYmxlU2Nh bjsKIAkJaW5kZXhTY2FuID0gTlVMTDsKIAogCQkvKiBTZXQgdG90YWwgaGVhcCBibG9ja3MgKi8K LQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVTVEVSX1RPVEFMX0hF QVBfQkxLUywKKwkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19SRVBBQ0tf VE9UQUxfSEVBUF9CTEtTLAogCQkJCQkJCQkJIGhlYXBTY2FuLT5yc19uYmxvY2tzKTsKIAl9CiAK QEAgLTgwOSw3ICs4MDksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxh dGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCQkJCSAqIGlzIG1hbnVhbGx5IHVwZGF0 ZWQgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiB0aGUgdGFibGUKIAkJCQkgKiBzY2FuIGZpbmlz aGVzLgogCQkJCSAqLwotCQkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1Nf Q0xVU1RFUl9IRUFQX0JMS1NfU0NBTk5FRCwKKwkJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX1JFUEFDS19IRUFQX0JMS1NfU0NBTk5FRCwKIAkJCQkJCQkJCQkJIGhlYXBT Y2FuLT5yc19uYmxvY2tzKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTgyNSw3ICs4MjUsNyBAQCBo ZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlv biBOZXdIZWFwLAogCQkJICovCiAJCQlpZiAocHJldl9jYmxvY2sgIT0gaGVhcFNjYW4tPnJzX2Ni bG9jaykKIAkJCXsKLQkJCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NM VVNURVJfSEVBUF9CTEtTX1NDQU5ORUQsCisJCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJh bShQUk9HUkVTU19SRVBBQ0tfSEVBUF9CTEtTX1NDQU5ORUQsCiAJCQkJCQkJCQkJCSAoaGVhcFNj YW4tPnJzX2NibG9jayArCiAJCQkJCQkJCQkJCSAgaGVhcFNjYW4tPnJzX25ibG9ja3MgLQogCQkJ CQkJCQkJCQkgIGhlYXBTY2FuLT5yc19zdGFydGJsb2NrCkBAIC05MTIsMTQgKzkxMiwxNCBAQCBo ZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlv biBOZXdIZWFwLAogCQkJICogSW4gc2Nhbi1hbmQtc29ydCBtb2RlLCByZXBvcnQgaW5jcmVhc2Ug aW4gbnVtYmVyIG9mIHR1cGxlcwogCQkJICogc2Nhbm5lZAogCQkJICovCi0JCQlwZ3N0YXRfcHJv Z3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfSEVBUF9UVVBMRVNfU0NBTk5FRCwK KwkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX0hFQVBfVFVQ TEVTX1NDQU5ORUQsCiAJCQkJCQkJCQkJICpudW1fdHVwbGVzKTsKIAkJfQogCQllbHNlCiAJCXsK IAkJCWNvbnN0IGludAljdF9pbmRleFtdID0gewotCQkJCVBST0dSRVNTX0NMVVNURVJfSEVBUF9U VVBMRVNfU0NBTk5FRCwKLQkJCQlQUk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX1dSSVRURU4K KwkJCQlQUk9HUkVTU19SRVBBQ0tfSEVBUF9UVVBMRVNfU0NBTk5FRCwKKwkJCQlQUk9HUkVTU19S RVBBQ0tfSEVBUF9UVVBMRVNfV1JJVFRFTgogCQkJfTsKIAkJCWludDY0CQljdF92YWxbMl07CiAK QEAgLTk1MiwxNCArOTUyLDE0IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJl bGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAJCWRvdWJsZQkJbl90dXBsZXMgPSAw OwogCiAJCS8qIFJlcG9ydCB0aGF0IHdlIGFyZSBub3cgc29ydGluZyB0dXBsZXMgKi8KLQkJcGdz dGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVTVEVSX1BIQVNFLAotCQkJCQkJ CQkJIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfU09SVF9UVVBMRVMpOworCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX1JFUEFDS19QSEFTRSwKKwkJCQkJCQkJCSBQUk9HUkVT U19SRVBBQ0tfUEhBU0VfU09SVF9UVVBMRVMpOwogCiAJCXR1cGxlc29ydF9wZXJmb3Jtc29ydCh0 dXBsZXNvcnQpOwogCiAJCS8qIFJlcG9ydCB0aGF0IHdlIGFyZSBub3cgd3JpdGluZyBuZXcgaGVh cCAqLwotCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfUEhB U0UsCi0JCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9XUklURV9ORVdfSEVBUCk7CisJ CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJ CQkJCQkJIFBST0dSRVNTX1JFUEFDS19QSEFTRV9XUklURV9ORVdfSEVBUCk7CiAKIAkJZm9yICg7 OykKIAkJewpAQCAtOTc3LDcgKzk3Nyw3IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVz dGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAJCQkJCQkJCQkgdmFsdWVz LCBpc251bGwsCiAJCQkJCQkJCQkgcndzdGF0ZSk7CiAJCQkvKiBSZXBvcnQgbl90dXBsZXMgKi8K LQkJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0xVU1RFUl9IRUFQX1RV UExFU19XUklUVEVOLAorCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19S RVBBQ0tfSEVBUF9UVVBMRVNfV1JJVFRFTiwKIAkJCQkJCQkJCQkgbl90dXBsZXMpOwogCQl9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvaW5kZXguYwppbmRleCBjNDAyOWE0ZjNkMy4uMzA2M2FiZmY5YTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2lu ZGV4LmMKQEAgLTQwNzksNyArNDA3OSw3IEBAIHJlaW5kZXhfcmVsYXRpb24oY29uc3QgUmVpbmRl eFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCQlBc3NlcnQoIVJlaW5kZXhJc1By b2Nlc3NpbmdJbmRleChpbmRleE9pZCkpOwogCiAJCS8qIFNldCBpbmRleCByZWJ1aWxkIGNvdW50 ICovCi0JCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ0xVU1RFUl9JTkRF WF9SRUJVSUxEX0NPVU5ULAorCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X1JFUEFDS19JTkRFWF9SRUJVSUxEX0NPVU5ULAogCQkJCQkJCQkJIGkpOwogCQlpKys7CiAJfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDFiM2M1YTU1ODgyLi5iMmI3YjEw YzJiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTI3OSw2ICsxMjc5 LDMyIEBAIENSRUFURSBWSUVXIHBnX3N0YXRfcHJvZ3Jlc3NfY2x1c3RlciBBUwogICAgIEZST00g cGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnQ0xVU1RFUicpIEFTIFMKICAgICAgICAgTEVGVCBK T0lOIHBnX2RhdGFiYXNlIEQgT04gUy5kYXRpZCA9IEQub2lkOwogCitDUkVBVEUgVklFVyBwZ19z dGF0X3Byb2dyZXNzX3JlcGFjayBBUworICAgIFNFTEVDVAorICAgICAgICBTLnBpZCBBUyBwaWQs CisgICAgICAgIFMuZGF0aWQgQVMgZGF0aWQsCisgICAgICAgIEQuZGF0bmFtZSBBUyBkYXRuYW1l LAorICAgICAgICBTLnJlbGlkIEFTIHJlbGlkLAorCS0tIHBhcmFtMSBpcyBjdXJyZW50bHkgdW51 c2VkCisgICAgICAgIENBU0UgUy5wYXJhbTIgV0hFTiAwIFRIRU4gJ2luaXRpYWxpemluZycKKyAg ICAgICAgICAgICAgICAgICAgICBXSEVOIDEgVEhFTiAnc2VxIHNjYW5uaW5nIGhlYXAnCisgICAg ICAgICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2luZGV4IHNjYW5uaW5nIGhlYXAnCisgICAg ICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3NvcnRpbmcgdHVwbGVzJworICAgICAgICAg ICAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3cml0aW5nIG5ldyBoZWFwJworICAgICAgICAgICAg ICAgICAgICAgIFdIRU4gNSBUSEVOICdzd2FwcGluZyByZWxhdGlvbiBmaWxlcycKKyAgICAgICAg ICAgICAgICAgICAgICBXSEVOIDYgVEhFTiAncmVidWlsZGluZyBpbmRleCcKKyAgICAgICAgICAg ICAgICAgICAgICBXSEVOIDcgVEhFTiAncGVyZm9ybWluZyBmaW5hbCBjbGVhbnVwJworICAgICAg ICAgICAgICAgICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICAgICAgQ0FTVChTLnBhcmFtMyBBUyBv aWQpIEFTIHJlcGFja19pbmRleF9yZWxpZCwKKyAgICAgICAgUy5wYXJhbTQgQVMgaGVhcF90dXBs ZXNfc2Nhbm5lZCwKKyAgICAgICAgUy5wYXJhbTUgQVMgaGVhcF90dXBsZXNfd3JpdHRlbiwKKyAg ICAgICAgUy5wYXJhbTYgQVMgaGVhcF9ibGtzX3RvdGFsLAorICAgICAgICBTLnBhcmFtNyBBUyBo ZWFwX2Jsa3Nfc2Nhbm5lZCwKKyAgICAgICAgUy5wYXJhbTggQVMgaW5kZXhfcmVidWlsZF9jb3Vu dAorICAgIEZST00gcGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnUkVQQUNLJykgQVMgUworICAg ICAgICBMRUZUIEpPSU4gcGdfZGF0YWJhc2UgRCBPTiBTLmRhdGlkID0gRC5vaWQ7CisKKwogQ1JF QVRFIFZJRVcgcGdfc3RhdF9wcm9ncmVzc19jcmVhdGVfaW5kZXggQVMKICAgICBTRUxFQ1QKICAg ICAgICAgUy5waWQgQVMgcGlkLCBTLmRhdGlkIEFTIGRhdGlkLCBELmRhdG5hbWUgQVMgZGF0bmFt ZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYwppbmRleCBiNTUyMjFkNDRjZC4uOGI2NGY5ZTY3OTUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jbHVzdGVyLmMKQEAgLTY3LDE4ICs2Nyw0MSBAQCB0eXBlZGVmIHN0cnVjdAog CU9pZAkJCWluZGV4T2lkOwogfSBSZWxUb0NsdXN0ZXI7CiAKLQotc3RhdGljIHZvaWQgY2x1c3Rl cl9tdWx0aXBsZV9yZWxzKExpc3QgKnJ0Y3MsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcyk7Ci1zdGF0 aWMgdm9pZCByZWJ1aWxkX3JlbGF0aW9uKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIGluZGV4 LCBib29sIHZlcmJvc2UpOworc3RhdGljIGJvb2wgY2x1c3Rlcl9yZWxfcmVjaGVjayhSZXBhY2tD b21tYW5kIGNtZCwgUmVsYXRpb24gT2xkSGVhcCwKKwkJCQkJCQkJT2lkIGluZGV4T2lkLCBPaWQg dXNlcmlkLCBpbnQgb3B0aW9ucyk7CitzdGF0aWMgdm9pZCByZWJ1aWxkX3JlbGF0aW9uKFJlcGFj a0NvbW1hbmQgY21kLCBib29sIHVzaW5naW5kZXgsCisJCQkJCQkJIFJlbGF0aW9uIE9sZEhlYXAs IFJlbGF0aW9uIGluZGV4LCBib29sIHZlcmJvc2UpOwogc3RhdGljIHZvaWQgY29weV90YWJsZV9k YXRhKFJlbGF0aW9uIE5ld0hlYXAsIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE9sZEluZGV4 LAogCQkJCQkJCWJvb2wgdmVyYm9zZSwgYm9vbCAqcFN3YXBUb2FzdEJ5Q29udGVudCwKIAkJCQkJ CQlUcmFuc2FjdGlvbklkICpwRnJlZXplWGlkLCBNdWx0aVhhY3RJZCAqcEN1dG9mZk11bHRpKTsK LXN0YXRpYyBMaXN0ICpnZXRfdGFibGVzX3RvX2NsdXN0ZXIoTWVtb3J5Q29udGV4dCBjbHVzdGVy X2NvbnRleHQpOwotc3RhdGljIExpc3QgKmdldF90YWJsZXNfdG9fY2x1c3Rlcl9wYXJ0aXRpb25l ZChNZW1vcnlDb250ZXh0IGNsdXN0ZXJfY29udGV4dCwKLQkJCQkJCQkJCQkJICAgT2lkIGluZGV4 T2lkKTsKLXN0YXRpYyBib29sIGNsdXN0ZXJfaXNfcGVybWl0dGVkX2Zvcl9yZWxhdGlvbihPaWQg cmVsaWQsIE9pZCB1c2VyaWQpOworc3RhdGljIExpc3QgKmdldF90YWJsZXNfdG9fcmVwYWNrKFJl cGFja0NvbW1hbmQgY21kLCBib29sIHVzaW5naW5kZXgsCisJCQkJCQkJCSAgTWVtb3J5Q29udGV4 dCBwZXJtY3h0KTsKK3N0YXRpYyBMaXN0ICpnZXRfdGFibGVzX3RvX3JlcGFja19wYXJ0aXRpb25l ZChSZXBhY2tDb21tYW5kIGNtZCwKKwkJCQkJCQkJCQkJICBNZW1vcnlDb250ZXh0IGNsdXN0ZXJf Y29udGV4dCwKKwkJCQkJCQkJCQkJICBPaWQgcmVsaWQsIGJvb2wgcmVsX2lzX2luZGV4KTsKK3N0 YXRpYyBib29sIGNsdXN0ZXJfaXNfcGVybWl0dGVkX2Zvcl9yZWxhdGlvbihSZXBhY2tDb21tYW5k IGNtZCwKKwkJCQkJCQkJCQkJICBPaWQgcmVsaWQsIE9pZCB1c2VyaWQpOworc3RhdGljIFJlbGF0 aW9uIHByb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKFJlcGFja1N0bXQgKnN0bXQsCisJCQkJCQkJCQkJ Q2x1c3RlclBhcmFtcyAqcGFyYW1zKTsKK3N0YXRpYyBPaWQJZGV0ZXJtaW5lX2NsdXN0ZXJlZF9p bmRleChSZWxhdGlvbiByZWwsIGJvb2wgdXNpbmdpbmRleCwKKwkJCQkJCQkJCSAgY29uc3QgY2hh ciAqaW5kZXhuYW1lKTsKIAogCitzdGF0aWMgY29uc3QgY2hhciAqCitSZXBhY2tDb21tYW5kQXNT dHJpbmcoUmVwYWNrQ29tbWFuZCBjbWQpCit7CisJc3dpdGNoIChjbWQpCisJeworCQljYXNlIFJF UEFDS19DT01NQU5EX1JFUEFDSzoKKwkJCXJldHVybiAiUkVQQUNLIjsKKwkJY2FzZSBSRVBBQ0tf Q09NTUFORF9WQUNVVU1GVUxMOgorCQkJcmV0dXJuICJWQUNVVU0iOworCQljYXNlIFJFUEFDS19D T01NQU5EX0NMVVNURVI6CisJCQlyZXR1cm4gIkNMVVNURVIiOworCX0KKwlyZXR1cm4gIj8/PyI7 Cit9CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUaGlzIGNsdXN0ZXIgY29kZSBhbGxvd3Mg Zm9yIGNsdXN0ZXJpbmcgbXVsdGlwbGUgdGFibGVzIGF0IG9uY2UuIEJlY2F1c2UKICAqIG9mIHRo aXMsIHdlIGNhbm5vdCBqdXN0IHJ1biBldmVyeXRoaW5nIG9uIGEgc2luZ2xlIHRyYW5zYWN0aW9u LCBvciB3ZQpAQCAtMTA0LDE5MSArMTI3LDE1NSBAQCBzdGF0aWMgYm9vbCBjbHVzdGVyX2lzX3Bl cm1pdHRlZF9mb3JfcmVsYXRpb24oT2lkIHJlbGlkLCBPaWQgdXNlcmlkKTsKICAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKi8KIHZvaWQKLWNsdXN0ZXIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBDbHVzdGVy U3RtdCAqc3RtdCwgYm9vbCBpc1RvcExldmVsKQorRXhlY1JlcGFjayhQYXJzZVN0YXRlICpwc3Rh dGUsIFJlcGFja1N0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCkKIHsKLQlMaXN0Q2VsbCAgICps YzsKIAlDbHVzdGVyUGFyYW1zIHBhcmFtcyA9IHswfTsKLQlib29sCQl2ZXJib3NlID0gZmFsc2U7 CiAJUmVsYXRpb24JcmVsID0gTlVMTDsKLQlPaWQJCQlpbmRleE9pZCA9IEludmFsaWRPaWQ7Ci0J TWVtb3J5Q29udGV4dCBjbHVzdGVyX2NvbnRleHQ7CisJTWVtb3J5Q29udGV4dCByZXBhY2tfY29u dGV4dDsKIAlMaXN0CSAgICpydGNzOwogCiAJLyogUGFyc2Ugb3B0aW9uIGxpc3QgKi8KLQlmb3Jl YWNoKGxjLCBzdG10LT5wYXJhbXMpCisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIG9wdCwgc3RtdC0+ cGFyYW1zKQogCXsKLQkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGxjKTsK LQogCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInZlcmJvc2UiKSA9PSAwKQotCQkJdmVyYm9z ZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJCXBhcmFtcy5vcHRpb25zIHw9IGRlZkdldEJvb2xl YW4ob3B0KSA/IENMVU9QVF9WRVJCT1NFIDogMDsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVm bmFtZSwgImFuYWx5emUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvcHQtPmRlZm5hbWUsICJhbmFs eXNlIikgPT0gMCkKKwkJCXBhcmFtcy5vcHRpb25zIHw9IGRlZkdldEJvb2xlYW4ob3B0KSA/IENM VU9QVF9BTkFMWVpFIDogMDsKIAkJZWxzZQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgQ0xV U1RFUiBvcHRpb24gXCIlc1wiIiwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkICVzIG9wdGlv biBcIiVzXCIiLAorCQkJCQkJCVJlcGFja0NvbW1hbmRBc1N0cmluZyhzdG10LT5jb21tYW5kKSwK IAkJCQkJCQlvcHQtPmRlZm5hbWUpLAogCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg b3B0LT5sb2NhdGlvbikpKTsKIAl9CiAKLQlwYXJhbXMub3B0aW9ucyA9ICh2ZXJib3NlID8gQ0xV T1BUX1ZFUkJPU0UgOiAwKTsKLQorCS8qCisJICogSWYgYSBzaW5nbGUgcmVsYXRpb24gaXMgc3Bl Y2lmaWVkLCBwcm9jZXNzIGl0IGFuZCB3ZSdyZSBkb25lIC4uLiB1bmxlc3MKKwkgKiB0aGUgcmVs YXRpb24gaXMgYSBwYXJ0aXRpb25lZCB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBmYWxsIHRocm91 Z2guCisJICovCiAJaWYgKHN0bXQtPnJlbGF0aW9uICE9IE5VTEwpCiAJewotCQkvKiBUaGlzIGlz IHRoZSBzaW5nbGUtcmVsYXRpb24gY2FzZS4gKi8KLQkJT2lkCQkJdGFibGVPaWQ7Ci0KLQkJLyoK LQkJICogRmluZCwgbG9jaywgYW5kIGNoZWNrIHBlcm1pc3Npb25zIG9uIHRoZSB0YWJsZS4gIFdl IG9idGFpbgotCQkgKiBBY2Nlc3NFeGNsdXNpdmVMb2NrIHJpZ2h0IGF3YXkgdG8gYXZvaWQgbG9j ay11cGdyYWRlIGhhemFyZCBpbiB0aGUKLQkJICogc2luZ2xlLXRyYW5zYWN0aW9uIGNhc2UuCi0J CSAqLwotCQl0YWJsZU9pZCA9IFJhbmdlVmFyR2V0UmVsaWRFeHRlbmRlZChzdG10LT5yZWxhdGlv biwKLQkJCQkJCQkJCQkJQWNjZXNzRXhjbHVzaXZlTG9jaywKLQkJCQkJCQkJCQkJMCwKLQkJCQkJ CQkJCQkJUmFuZ2VWYXJDYWxsYmFja01haW50YWluc1RhYmxlLAotCQkJCQkJCQkJCQlOVUxMKTsK LQkJcmVsID0gdGFibGVfb3Blbih0YWJsZU9pZCwgTm9Mb2NrKTsKLQotCQkvKgotCQkgKiBSZWpl Y3QgY2x1c3RlcmluZyBhIHJlbW90ZSB0ZW1wIHRhYmxlIC4uLiB0aGVpciBsb2NhbCBidWZmZXIK LQkJICogbWFuYWdlciBpcyBub3QgZ29pbmcgdG8gY29wZS4KLQkJICovCi0JCWlmIChSRUxBVElP Tl9JU19PVEhFUl9URU1QKHJlbCkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCSBlcnJtc2coImNhbm5vdCBjbHVz dGVyIHRlbXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOwotCi0JCWlmIChzdG10 LT5pbmRleG5hbWUgPT0gTlVMTCkKLQkJewotCQkJTGlzdENlbGwgICAqaW5kZXg7Ci0KLQkJCS8q IFdlIG5lZWQgdG8gZmluZCB0aGUgaW5kZXggdGhhdCBoYXMgaW5kaXNjbHVzdGVyZWQgc2V0LiAq LwotCQkJZm9yZWFjaChpbmRleCwgUmVsYXRpb25HZXRJbmRleExpc3QocmVsKSkKLQkJCXsKLQkJ CQlpbmRleE9pZCA9IGxmaXJzdF9vaWQoaW5kZXgpOwotCQkJCWlmIChnZXRfaW5kZXhfaXNjbHVz dGVyZWQoaW5kZXhPaWQpKQotCQkJCQlicmVhazsKLQkJCQlpbmRleE9pZCA9IEludmFsaWRPaWQ7 Ci0JCQl9Ci0KLQkJCWlmICghT2lkSXNWYWxpZChpbmRleE9pZCkpCi0JCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCi0JCQkJCQkgZXJy bXNnKCJ0aGVyZSBpcyBubyBwcmV2aW91c2x5IGNsdXN0ZXJlZCBpbmRleCBmb3IgdGFibGUgXCIl c1wiIiwKLQkJCQkJCQkJc3RtdC0+cmVsYXRpb24tPnJlbG5hbWUpKSk7Ci0JCX0KLQkJZWxzZQot CQl7Ci0JCQkvKgotCQkJICogVGhlIGluZGV4IGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBzYW1l IG5hbWVzcGFjZSBhcyB0aGUKLQkJCSAqIHJlbGF0aW9uLgotCQkJICovCi0JCQlpbmRleE9pZCA9 IGdldF9yZWxuYW1lX3JlbGlkKHN0bXQtPmluZGV4bmFtZSwKLQkJCQkJCQkJCQkgcmVsLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSk7Ci0JCQlpZiAoIU9pZElzVmFsaWQoaW5kZXhPaWQpKQotCQkJCWVy ZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAot CQkJCQkJIGVycm1zZygiaW5kZXggXCIlc1wiIGZvciB0YWJsZSBcIiVzXCIgZG9lcyBub3QgZXhp c3QiLAotCQkJCQkJCQlzdG10LT5pbmRleG5hbWUsIHN0bXQtPnJlbGF0aW9uLT5yZWxuYW1lKSkp OwotCQl9Ci0KLQkJLyogRm9yIG5vbi1wYXJ0aXRpb25lZCB0YWJsZXMsIGRvIHdoYXQgd2UgY2Ft ZSBoZXJlIHRvIGRvLiAqLwotCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9Q QVJUSVRJT05FRF9UQUJMRSkKLQkJewotCQkJY2x1c3Rlcl9yZWwocmVsLCBpbmRleE9pZCwgJnBh cmFtcyk7Ci0JCQkvKiBjbHVzdGVyX3JlbCBjbG9zZXMgdGhlIHJlbGF0aW9uLCBidXQga2VlcHMg bG9jayAqLwotCisJCXJlbCA9IHByb2Nlc3Nfc2luZ2xlX3JlbGF0aW9uKHN0bXQsICZwYXJhbXMp OworCQlpZiAocmVsID09IE5VTEwpCiAJCQlyZXR1cm47Ci0JCX0KIAl9CiAKKwkvKiBEb24ndCBh bGxvdyB0aGlzIGZvciBub3cuICBNYXliZSB3ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIHRoaXMgbGF0 ZXIgKi8KKwlpZiAocGFyYW1zLm9wdGlvbnMgJiBDTFVPUFRfQU5BTFlaRSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQll cnJtc2coImNhbm5vdCBBTkFMWVpFIG11bHRpcGxlIHRhYmxlcyIpKTsKKwogCS8qCiAJICogQnkg aGVyZSwgd2Uga25vdyB3ZSBhcmUgaW4gYSBtdWx0aS10YWJsZSBzaXR1YXRpb24uICBJbiBvcmRl ciB0byBhdm9pZAogCSAqIGhvbGRpbmcgbG9ja3MgZm9yIHRvbyBsb25nLCB3ZSB3YW50IHRvIHBy b2Nlc3MgZWFjaCB0YWJsZSBpbiBpdHMgb3duCiAJICogdHJhbnNhY3Rpb24uICBUaGlzIGZvcmNl cyB1cyB0byBkaXNhbGxvdyBydW5uaW5nIGluc2lkZSBhIHVzZXIKIAkgKiB0cmFuc2FjdGlvbiBi bG9jay4KIAkgKi8KLQlQcmV2ZW50SW5UcmFuc2FjdGlvbkJsb2NrKGlzVG9wTGV2ZWwsICJDTFVT VEVSIik7CisJUHJldmVudEluVHJhbnNhY3Rpb25CbG9jayhpc1RvcExldmVsLCBSZXBhY2tDb21t YW5kQXNTdHJpbmcoc3RtdC0+Y29tbWFuZCkpOwogCiAJLyogQWxzbywgd2UgbmVlZCBhIG1lbW9y eSBjb250ZXh0IHRvIGhvbGQgb3VyIGxpc3Qgb2YgcmVsYXRpb25zICovCi0JY2x1c3Rlcl9jb250 ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFBvcnRhbENvbnRleHQsCi0JCQkJCQkJCQkJCSJD bHVzdGVyIiwKLQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJcmVwYWNrX2Nv bnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoUG9ydGFsQ29udGV4dCwKKwkJCQkJCQkJCQkg ICAiUmVwYWNrIiwKKwkJCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKIAotCS8q Ci0JICogRWl0aGVyIHdlJ3JlIHByb2Nlc3NpbmcgYSBwYXJ0aXRpb25lZCB0YWJsZSwgb3Igd2Ug d2VyZSBub3QgZ2l2ZW4gYW55Ci0JICogdGFibGUgbmFtZSBhdCBhbGwuICBJbiBlaXRoZXIgY2Fz ZSwgb2J0YWluIGEgbGlzdCBvZiByZWxhdGlvbnMgdG8KLQkgKiBwcm9jZXNzLgotCSAqCi0JICog SW4gdGhlIGZvcm1lciBjYXNlLCBhbiBpbmRleCBuYW1lIG11c3QgaGF2ZSBiZWVuIGdpdmVuLCBz byB3ZSBkb24ndAotCSAqIG5lZWQgdG8gcmVjaGVjayBpdHMgImluZGlzY2x1c3RlcmVkIiBiaXQs IGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgaXQKLQkgKiBpcyBhbiBpbmRleCB0aGF0IHdlIGNh biBjbHVzdGVyIG9uLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB3ZSBzZXQgdGhlCi0JICogb3B0aW9u IGJpdCB0byBoYXZlIGluZGlzY2x1c3RlcmVkIHZlcmlmaWVkLgotCSAqCi0JICogUmVjaGVja2lu ZyB0aGUgcmVsYXRpb24gaXRzZWxmIGlzIG5lY2Vzc2FyeSBoZXJlIGluIGFsbCBjYXNlcy4KLQkg Ki8KIAlwYXJhbXMub3B0aW9ucyB8PSBDTFVPUFRfUkVDSEVDSzsKLQlpZiAocmVsICE9IE5VTEwp CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgYSByZWxhdGlvbiB5ZXQsIGRldGVybWluZSBh IHJlbGF0aW9uIGxpc3QuICBJZiB3ZSBkbywKKwkgKiB0aGVuIGl0IG11c3QgYmUgYSBwYXJ0aXRp b25lZCB0YWJsZSwgYW5kIHdlIHdhbnQgdG8gcHJvY2VzcyBpdHMKKwkgKiBwYXJ0aXRpb25zLgor CSAqLworCWlmIChyZWwgPT0gTlVMTCkKIAl7CisJCUFzc2VydChzdG10LT5pbmRleG5hbWUgPT0g TlVMTCk7CisJCXJ0Y3MgPSBnZXRfdGFibGVzX3RvX3JlcGFjayhzdG10LT5jb21tYW5kLCBzdG10 LT51c2luZ2luZGV4LAorCQkJCQkJCQkJcmVwYWNrX2NvbnRleHQpOworCX0KKwllbHNlCisJewor CQlPaWQJCQlyZWxpZDsKKwkJYm9vbAkJcmVsX2lzX2luZGV4OworCiAJCUFzc2VydChyZWwtPnJk X3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKLQkJY2hlY2tfaW5k ZXhfaXNfY2x1c3RlcmFibGUocmVsLCBpbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKLQkJcnRj cyA9IGdldF90YWJsZXNfdG9fY2x1c3Rlcl9wYXJ0aXRpb25lZChjbHVzdGVyX2NvbnRleHQsIGlu ZGV4T2lkKTsKIAotCQkvKiBjbG9zZSByZWxhdGlvbiwgcmVsZWFzaW5nIGxvY2sgb24gcGFyZW50 IHRhYmxlICovCisJCS8qCisJCSAqIElmIGFuIGluZGV4IG5hbWUgd2FzIHNwZWNpZmllZCwgcmVz b2x2ZSBpdCBub3cgYW5kIHBhc3MgaXQgZG93bi4KKwkJICovCisJCWlmIChzdG10LT51c2luZ2lu ZGV4KQorCQl7CisJCQkvKgorCQkJICogWFhYIGhvdyBzaG91bGQgdGhpcyBiZWhhdmU/ICBQYXNz aW5nIG5vIGluZGV4IHRvIGEgcGFydGl0aW9uZWQKKwkJCSAqIHRhYmxlIGNvdWxkIGJlIHVzZWZ1 bCB0byBoYXZlIGNlcnRhaW4gcGFydGl0aW9ucyBjbHVzdGVyZWQgYnkKKwkJCSAqIHNvbWUgaW5k ZXgsIGFuZCBvdGhlciBwYXJ0aXRpb25zIGJ5IGEgZGlmZmVyZW50IGluZGV4LgorCQkJICovCisJ CQlpZiAoIXN0bXQtPmluZGV4bmFtZSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJybXNn KCJ0aGVyZSBpcyBubyBwcmV2aW91c2x5IGNsdXN0ZXJlZCBpbmRleCBmb3IgdGFibGUgXCIlc1wi IiwKKwkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisKKwkJCXJlbGlk ID0gZGV0ZXJtaW5lX2NsdXN0ZXJlZF9pbmRleChyZWwsIHRydWUsIHN0bXQtPmluZGV4bmFtZSk7 CisJCQlpZiAoIU9pZElzVmFsaWQocmVsaWQpKQorCQkJCWVsb2coRVJST1IsICJ1bmFibGUgdG8g ZGV0ZXJtaW5lIGluZGV4IHRvIGNsdXN0ZXIgb24iKTsKKwkJCS8qIFhYWCBpcyB0aGlzIHRoZSBy aWdodCBwbGFjZSBmb3IgdGhpcyBjaGVjaz8gKi8KKwkJCWNoZWNrX2luZGV4X2lzX2NsdXN0ZXJh YmxlKHJlbCwgcmVsaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJcmVsX2lzX2luZGV4ID0g dHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwp OworCQkJcmVsX2lzX2luZGV4ID0gZmFsc2U7CisJCX0KKworCQlydGNzID0gZ2V0X3RhYmxlc190 b19yZXBhY2tfcGFydGl0aW9uZWQoc3RtdC0+Y29tbWFuZCwgcmVwYWNrX2NvbnRleHQsCisJCQkJ CQkJCQkJCQlyZWxpZCwgcmVsX2lzX2luZGV4KTsKKworCQkvKiBjbG9zZSBwYXJlbnQgcmVsYXRp b24sIHJlbGVhc2luZyBsb2NrIG9uIGl0ICovCiAJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzRXhj bHVzaXZlTG9jayk7CisJCXJlbCA9IE5VTEw7CiAJfQotCWVsc2UKLQl7Ci0JCXJ0Y3MgPSBnZXRf dGFibGVzX3RvX2NsdXN0ZXIoY2x1c3Rlcl9jb250ZXh0KTsKLQkJcGFyYW1zLm9wdGlvbnMgfD0g Q0xVT1BUX1JFQ0hFQ0tfSVNDTFVTVEVSRUQ7Ci0JfQotCi0JLyogRG8gdGhlIGpvYi4gKi8KLQlj bHVzdGVyX211bHRpcGxlX3JlbHMocnRjcywgJnBhcmFtcyk7Ci0KLQkvKiBTdGFydCBhIG5ldyB0 cmFuc2FjdGlvbiBmb3IgdGhlIGNsZWFudXAgd29yay4gKi8KLQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOwotCi0JLyogQ2xlYW4gdXAgd29ya2luZyBzdG9yYWdlICovCi0JTWVtb3J5Q29udGV4 dERlbGV0ZShjbHVzdGVyX2NvbnRleHQpOwotfQotCi0vKgotICogR2l2ZW4gYSBsaXN0IG9mIHJl bGF0aW9ucyB0byBjbHVzdGVyLCBwcm9jZXNzIGVhY2ggb2YgdGhlbSBpbiBhIHNlcGFyYXRlCi0g KiB0cmFuc2FjdGlvbi4KLSAqCi0gKiBXZSBleHBlY3QgdG8gYmUgaW4gYSB0cmFuc2FjdGlvbiBh dCBzdGFydCwgYnV0IHRoZXJlIGlzbid0IG9uZSB3aGVuIHdlCi0gKiByZXR1cm4uCi0gKi8KLXN0 YXRpYyB2b2lkCi1jbHVzdGVyX211bHRpcGxlX3JlbHMoTGlzdCAqcnRjcywgQ2x1c3RlclBhcmFt cyAqcGFyYW1zKQotewotCUxpc3RDZWxsICAgKmxjOwogCiAJLyogQ29tbWl0IHRvIGdldCBvdXQg b2Ygc3RhcnRpbmcgdHJhbnNhY3Rpb24gKi8KIAlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCiAJLyogQ2x1c3RlciB0aGUgdGFibGVzLCBlYWNoIGlu IGEgc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KLQlmb3JlYWNoKGxjLCBydGNzKQorCUFzc2VydChy ZWwgPT0gTlVMTCk7CisJZm9yZWFjaF9wdHIoUmVsVG9DbHVzdGVyLCBydGMsIHJ0Y3MpCiAJewot CQlSZWxUb0NsdXN0ZXIgKnJ0YyA9IChSZWxUb0NsdXN0ZXIgKikgbGZpcnN0KGxjKTsKLQkJUmVs YXRpb24JcmVsOwotCiAJCS8qIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIGZvciBlYWNoIHJlbGF0 aW9uLiAqLwogCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCisJCS8qCisJCSAqIE9wZW4g dGhlIHRhcmdldCB0YWJsZSwgY29waW5nIHdpdGggdGhlIGNhc2Ugd2hlcmUgaXQgaGFzIGJlZW4K KwkJICogZHJvcHBlZC4KKwkJICovCisJCXJlbCA9IHRyeV90YWJsZV9vcGVuKHJ0Yy0+dGFibGVP aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQlpZiAocmVsID09IE5VTEwpCisJCXsKKwkJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkJY29udGludWU7CisJCX0KKwogCQkvKiBmdW5j dGlvbnMgaW4gaW5kZXhlcyBtYXkgd2FudCBhIHNuYXBzaG90IHNldCAqLwogCQlQdXNoQWN0aXZl U25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKIAotCQlyZWwgPSB0YWJsZV9vcGVu KHJ0Yy0+dGFibGVPaWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwotCiAJCS8qIFByb2Nlc3MgdGhp cyB0YWJsZSAqLwotCQljbHVzdGVyX3JlbChyZWwsIHJ0Yy0+aW5kZXhPaWQsIHBhcmFtcyk7CisJ CWNsdXN0ZXJfcmVsKHN0bXQtPmNvbW1hbmQsIHN0bXQtPnVzaW5naW5kZXgsCisJCQkJCXJlbCwg cnRjLT5pbmRleE9pZCwgJnBhcmFtcyk7CiAJCS8qIGNsdXN0ZXJfcmVsIGNsb3NlcyB0aGUgcmVs YXRpb24sIGJ1dCBrZWVwcyBsb2NrICovCiAKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJfQorCisJLyogU3RhcnQgYSBuZXcgdHJhbnNhY3Rp b24gZm9yIHRoZSBjbGVhbnVwIHdvcmsuICovCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCS8qIENsZWFuIHVwIHdvcmtpbmcgc3RvcmFnZSAqLworCU1lbW9yeUNvbnRleHREZWxldGUo cmVwYWNrX2NvbnRleHQpOwogfQogCiAvKgpAQCAtMzA0LDExICsyOTEsMTQgQEAgY2x1c3Rlcl9t dWx0aXBsZV9yZWxzKExpc3QgKnJ0Y3MsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKICAqIHRoZW0g aW5jcmVtZW50YWxseSB3aGlsZSB3ZSBsb2FkIHRoZSB0YWJsZS4KICAqCiAgKiBJZiBpbmRleE9p ZCBpcyBJbnZhbGlkT2lkLCB0aGUgdGFibGUgd2lsbCBiZSByZXdyaXR0ZW4gaW4gcGh5c2ljYWwg b3JkZXIKLSAqIGluc3RlYWQgb2YgaW5kZXggb3JkZXIuICBUaGlzIGlzIHRoZSBuZXcgaW1wbGVt ZW50YXRpb24gb2YgVkFDVVVNIEZVTEwsCi0gKiBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIHJl ZmVyIHRvIHRoZSBvcGVyYXRpb24gYXMgVkFDVVVNIG5vdCBDTFVTVEVSLgorICogaW5zdGVhZCBv ZiBpbmRleCBvcmRlci4KKyAqCisgKiAnY21kJyBpbmRpY2F0ZXMgd2hpY2ggY29tbWFuZCBpcyBi ZWluZyBleGVjdXRlZCwgdG8gYmUgdXNlZCBmb3IgZXJyb3IKKyAqIG1lc3NhZ2VzLgogICovCiB2 b2lkCi1jbHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQ YXJhbXMgKnBhcmFtcykKK2NsdXN0ZXJfcmVsKFJlcGFja0NvbW1hbmQgY21kLCBib29sIHVzaW5n aW5kZXgsCisJCQlSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMg KnBhcmFtcykKIHsKIAlPaWQJCQl0YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoT2xkSGVhcCk7 CiAJT2lkCQkJc2F2ZV91c2VyaWQ7CkBAIC0zMjMsMTMgKzMxMywyNSBAQCBjbHVzdGVyX3JlbChS ZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMgKnBhcmFtcykKIAkv KiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICovCiAJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAotCXBnc3RhdF9wcm9ncmVzc19zdGFydF9jb21tYW5kKFBST0dSRVNTX0NPTU1BTkRf Q0xVU1RFUiwgdGFibGVPaWQpOwotCWlmIChPaWRJc1ZhbGlkKGluZGV4T2lkKSkKLQkJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVTVEVSX0NPTU1BTkQsCisJaWYgKGNt ZCA9PSBSRVBBQ0tfQ09NTUFORF9SRVBBQ0spCisJCXBnc3RhdF9wcm9ncmVzc19zdGFydF9jb21t YW5kKFBST0dSRVNTX0NPTU1BTkRfUkVQQUNLLCB0YWJsZU9pZCk7CisJZWxzZQorCQlwZ3N0YXRf cHJvZ3Jlc3Nfc3RhcnRfY29tbWFuZChQUk9HUkVTU19DT01NQU5EX0NMVVNURVIsIHRhYmxlT2lk KTsKKworCWlmIChjbWQgPT0gUkVQQUNLX0NPTU1BTkRfUkVQQUNLKQorCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX1JFUEFDS19DT01NQU5ELAorCQkJCQkJCQkJIFBST0dS RVNTX1JFUEFDS19DT01NQU5EX1JFUEFDSyk7CisJZWxzZSBpZiAoY21kID09IFJFUEFDS19DT01N QU5EX0NMVVNURVIpCisJeworCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X1JFUEFDS19DT01NQU5ELAogCQkJCQkJCQkJIFBST0dSRVNTX0NMVVNURVJfQ09NTUFORF9DTFVT VEVSKTsKKwl9CiAJZWxzZQotCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X0NMVVNURVJfQ09NTUFORCwKKwl7CisJCUFzc2VydChjbWQgPT0gUkVQQUNLX0NPTU1BTkRfVkFD VVVNRlVMTCk7CisJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNL X0NPTU1BTkQsCiAJCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9DT01NQU5EX1ZBQ1VVTV9GVUxM KTsKKwl9CiAKIAkvKgogCSAqIFN3aXRjaCB0byB0aGUgdGFibGUgb3duZXIncyB1c2VyaWQsIHNv IHRoYXQgYW55IGluZGV4IGZ1bmN0aW9ucyBhcmUgcnVuCkBAIC0zNTEsNjMgKzM1MywyMSBAQCBj bHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQYXJhbXMg KnBhcmFtcykKIAkgKiB0byBjbHVzdGVyIGEgbm90LXByZXZpb3VzbHktY2x1c3RlcmVkIGluZGV4 LgogCSAqLwogCWlmIChyZWNoZWNrKQotCXsKLQkJLyogQ2hlY2sgdGhhdCB0aGUgdXNlciBzdGls bCBoYXMgcHJpdmlsZWdlcyBmb3IgdGhlIHJlbGF0aW9uICovCi0JCWlmICghY2x1c3Rlcl9pc19w ZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKHRhYmxlT2lkLCBzYXZlX3VzZXJpZCkpCi0JCXsKLQkJCXJl bGF0aW9uX2Nsb3NlKE9sZEhlYXAsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQlpZiAoIWNsdXN0 ZXJfcmVsX3JlY2hlY2soY21kLCBPbGRIZWFwLCBpbmRleE9pZCwgc2F2ZV91c2VyaWQsCisJCQkJ CQkJCSBwYXJhbXMtPm9wdGlvbnMpKQogCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBT aWxlbnRseSBza2lwIGEgdGVtcCB0YWJsZSBmb3IgYSByZW1vdGUgc2Vzc2lvbi4gIE9ubHkgZG9p bmcgdGhpcwotCQkgKiBjaGVjayBpbiB0aGUgInJlY2hlY2siIGNhc2UgaXMgYXBwcm9wcmlhdGUg KHdoaWNoIGN1cnJlbnRseSBtZWFucwotCQkgKiBzb21lYm9keSBpcyBleGVjdXRpbmcgYSBkYXRh YmFzZS13aWRlIENMVVNURVIgb3Igb24gYSBwYXJ0aXRpb25lZAotCQkgKiB0YWJsZSksIGJlY2F1 c2UgdGhlcmUgaXMgYW5vdGhlciBjaGVjayBpbiBjbHVzdGVyKCkgd2hpY2ggd2lsbCBzdG9wCi0J CSAqIGFueSBhdHRlbXB0IHRvIGNsdXN0ZXIgcmVtb3RlIHRlbXAgdGFibGVzIGJ5IG5hbWUuICBU aGVyZSBpcwotCQkgKiBhbm90aGVyIGNoZWNrIGluIGNsdXN0ZXJfcmVsIHdoaWNoIGlzIHJlZHVu ZGFudCwgYnV0IHdlIGxlYXZlIGl0Ci0JCSAqIGZvciBleHRyYSBzYWZldHkuCi0JCSAqLwotCQlp ZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVNUChPbGRIZWFwKSkKLQkJewotCQkJcmVsYXRpb25fY2xv c2UoT2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0J CWlmIChPaWRJc1ZhbGlkKGluZGV4T2lkKSkKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRoYXQg dGhlIGluZGV4IHN0aWxsIGV4aXN0cwotCQkJICovCi0JCQlpZiAoIVNlYXJjaFN5c0NhY2hlRXhp c3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhPaWQpKSkKLQkJCXsKLQkJCQlyZWxh dGlvbl9jbG9zZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQkJCQlnb3RvIG91dDsK LQkJCX0KLQotCQkJLyoKLQkJCSAqIENoZWNrIHRoYXQgdGhlIGluZGV4IGlzIHN0aWxsIHRoZSBv bmUgd2l0aCBpbmRpc2NsdXN0ZXJlZCBzZXQsCi0JCQkgKiBpZiBuZWVkZWQuCi0JCQkgKi8KLQkJ CWlmICgocGFyYW1zLT5vcHRpb25zICYgQ0xVT1BUX1JFQ0hFQ0tfSVNDTFVTVEVSRUQpICE9IDAg JiYKLQkJCQkhZ2V0X2luZGV4X2lzY2x1c3RlcmVkKGluZGV4T2lkKSkKLQkJCXsKLQkJCQlyZWxh dGlvbl9jbG9zZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKLQkJCQlnb3RvIG91dDsK LQkJCX0KLQkJfQotCX0KIAogCS8qCi0JICogV2UgYWxsb3cgVkFDVVVNIEZVTEwsIGJ1dCBub3Qg Q0xVU1RFUiwgb24gc2hhcmVkIGNhdGFsb2dzLiAgQ0xVU1RFUgotCSAqIHdvdWxkIHdvcmsgaW4g bW9zdCByZXNwZWN0cywgYnV0IHRoZSBpbmRleCB3b3VsZCBvbmx5IGdldCBtYXJrZWQgYXMKLQkg KiBpbmRpc2NsdXN0ZXJlZCBpbiB0aGUgY3VycmVudCBkYXRhYmFzZSwgbGVhZGluZyB0byB1bmV4 cGVjdGVkIGJlaGF2aW9yCi0JICogaWYgQ0xVU1RFUiB3ZXJlIGxhdGVyIGludm9rZWQgaW4gYW5v dGhlciBkYXRhYmFzZS4KKwkgKiBXZSBhbGxvdyByZXBhY2tpbmcgc2hhcmVkIGNhdGFsb2dzIG9u bHkgd2hlbiBub3QgdXNpbmcgYW4gaW5kZXguIEl0CisJICogd291bGQgd29yayB0byB1c2UgYW4g aW5kZXggaW4gbW9zdCByZXNwZWN0cywgYnV0IHRoZSBpbmRleCB3b3VsZCBvbmx5CisJICogZ2V0 IG1hcmtlZCBhcyBpbmRpc2NsdXN0ZXJlZCBpbiB0aGUgY3VycmVudCBkYXRhYmFzZSwgbGVhZGlu ZyB0bworCSAqIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgQ0xVU1RFUiB3ZXJlIGxhdGVyIGludm9r ZWQgaW4gYW5vdGhlciBkYXRhYmFzZS4KIAkgKi8KLQlpZiAoT2lkSXNWYWxpZChpbmRleE9pZCkg JiYgT2xkSGVhcC0+cmRfcmVsLT5yZWxpc3NoYXJlZCkKKwlpZiAodXNpbmdpbmRleCAmJiBPbGRI ZWFwLT5yZF9yZWwtPnJlbGlzc2hhcmVkKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJjYW5ub3QgY2x1 c3RlciBhIHNoYXJlZCBjYXRhbG9nIikpKTsKKwkJCQkgZXJybXNnKCJjYW5ub3QgcnVuIFwiJXNc IiBvbiBhIHNoYXJlZCBjYXRhbG9nIiwKKwkJCQkJCVJlcGFja0NvbW1hbmRBc1N0cmluZyhjbWQp KSkpOwogCiAJLyoKIAkgKiBEb24ndCBwcm9jZXNzIHRlbXAgdGFibGVzIG9mIG90aGVyIGJhY2tl bmRzIC4uLiB0aGVpciBsb2NhbCBidWZmZXIKQEAgLTQxNSwyMSArMzc1LDMwIEBAIGNsdXN0ZXJf cmVsKFJlbGF0aW9uIE9sZEhlYXAsIE9pZCBpbmRleE9pZCwgQ2x1c3RlclBhcmFtcyAqcGFyYW1z KQogCSAqLwogCWlmIChSRUxBVElPTl9JU19PVEhFUl9URU1QKE9sZEhlYXApKQogCXsKLQkJaWYg KE9pZElzVmFsaWQoaW5kZXhPaWQpKQorCQlpZiAoY21kID09IFJFUEFDS19DT01NQU5EX0NMVVNU RVIpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImNhbm5vdCBjbHVzdGVyIHRlbXBvcmFyeSB0YWJs ZXMgb2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOworCQllbHNlIGlmIChjbWQgPT0gUkVQQUNLX0NPTU1B TkRfUkVQQUNLKQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coImNhbm5vdCByZXBhY2sgdGVt cG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBzZXNzaW9ucyIpKSk7CisJCX0KIAkJZWxzZQorCQl7CisJ CQlBc3NlcnQoY21kID09IFJFUEFDS19DT01NQU5EX1ZBQ1VVTUZVTEwpOwogCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJ CQkgZXJybXNnKCJjYW5ub3QgdmFjdXVtIHRlbXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vzc2lv bnMiKSkpOworCQl9CiAJfQogCiAJLyoKIAkgKiBBbHNvIGNoZWNrIGZvciBhY3RpdmUgdXNlcyBv ZiB0aGUgcmVsYXRpb24gaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sCiAJICogaW5jbHVkaW5n IG9wZW4gc2NhbnMgYW5kIHBlbmRpbmcgQUZURVIgdHJpZ2dlciBldmVudHMuCiAJICovCi0JQ2hl Y2tUYWJsZU5vdEluVXNlKE9sZEhlYXAsIE9pZElzVmFsaWQoaW5kZXhPaWQpID8gIkNMVVNURVIi IDogIlZBQ1VVTSIpOworCUNoZWNrVGFibGVOb3RJblVzZShPbGRIZWFwLCBSZXBhY2tDb21tYW5k QXNTdHJpbmcoY21kKSk7CiAKIAkvKiBDaGVjayBoZWFwIGFuZCBpbmRleCBhcmUgdmFsaWQgdG8g Y2x1c3RlciBvbiAqLwogCWlmIChPaWRJc1ZhbGlkKGluZGV4T2lkKSkKQEAgLTQ2OSw3ICs0Mzgs NyBAQCBjbHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsIENsdXN0ZXJQ YXJhbXMgKnBhcmFtcykKIAlUcmFuc2ZlclByZWRpY2F0ZUxvY2tzVG9IZWFwUmVsYXRpb24oT2xk SGVhcCk7CiAKIAkvKiByZWJ1aWxkX3JlbGF0aW9uIGRvZXMgYWxsIHRoZSBkaXJ0eSB3b3JrICov Ci0JcmVidWlsZF9yZWxhdGlvbihPbGRIZWFwLCBpbmRleCwgdmVyYm9zZSk7CisJcmVidWlsZF9y ZWxhdGlvbihjbWQsIHVzaW5naW5kZXgsIE9sZEhlYXAsIGluZGV4LCB2ZXJib3NlKTsKIAkvKiBy ZWJ1aWxkX3JlbGF0aW9uIGNsb3NlcyBPbGRIZWFwLCBhbmQgaW5kZXggaWYgdmFsaWQgKi8KIAog b3V0OgpAQCAtNDgyLDYgKzQ1MSw2MyBAQCBvdXQ6CiAJcGdzdGF0X3Byb2dyZXNzX2VuZF9jb21t YW5kKCk7CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgdGFibGUgKGFuZCBpdHMgaW5kZXgpIHN0 aWxsIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YKKyAqIGNsdXN0ZXJfcmVsKCkuCisgKi8KK3N0 YXRpYyBib29sCitjbHVzdGVyX3JlbF9yZWNoZWNrKFJlcGFja0NvbW1hbmQgY21kLCBSZWxhdGlv biBPbGRIZWFwLCBPaWQgaW5kZXhPaWQsCisJCQkJCU9pZCB1c2VyaWQsIGludCBvcHRpb25zKQor eworCU9pZAkJCXRhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChPbGRIZWFwKTsKKworCS8qIENo ZWNrIHRoYXQgdGhlIHVzZXIgc3RpbGwgaGFzIHByaXZpbGVnZXMgZm9yIHRoZSByZWxhdGlvbiAq LworCWlmICghY2x1c3Rlcl9pc19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKGNtZCwgdGFibGVPaWQs IHVzZXJpZCkpCisJeworCQlyZWxhdGlvbl9jbG9zZShPbGRIZWFwLCBBY2Nlc3NFeGNsdXNpdmVM b2NrKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogU2lsZW50bHkgc2tpcCBhIHRl bXAgdGFibGUgZm9yIGEgcmVtb3RlIHNlc3Npb24uICBPbmx5IGRvaW5nIHRoaXMgY2hlY2sKKwkg KiBpbiB0aGUgInJlY2hlY2siIGNhc2UgaXMgYXBwcm9wcmlhdGUgKHdoaWNoIGN1cnJlbnRseSBt ZWFucyBzb21lYm9keSBpcworCSAqIGV4ZWN1dGluZyBhIGRhdGFiYXNlLXdpZGUgQ0xVU1RFUiBv ciBvbiBhIHBhcnRpdGlvbmVkIHRhYmxlKSwgYmVjYXVzZQorCSAqIHRoZXJlIGlzIGFub3RoZXIg Y2hlY2sgaW4gY2x1c3RlcigpIHdoaWNoIHdpbGwgc3RvcCBhbnkgYXR0ZW1wdCB0bworCSAqIGNs dXN0ZXIgcmVtb3RlIHRlbXAgdGFibGVzIGJ5IG5hbWUuICBUaGVyZSBpcyBhbm90aGVyIGNoZWNr IGluCisJICogY2x1c3Rlcl9yZWwgd2hpY2ggaXMgcmVkdW5kYW50LCBidXQgd2UgbGVhdmUgaXQg Zm9yIGV4dHJhIHNhZmV0eS4KKwkgKi8KKwlpZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVNUChPbGRI ZWFwKSkKKwl7CisJCXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sp OworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKE9pZElzVmFsaWQoaW5kZXhPaWQpKQorCXsK KwkJLyoKKwkJICogQ2hlY2sgdGhhdCB0aGUgaW5kZXggc3RpbGwgZXhpc3RzCisJCSAqLworCQlp ZiAoIVNlYXJjaFN5c0NhY2hlRXhpc3RzMShSRUxPSUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhP aWQpKSkKKwkJeworCQkJcmVsYXRpb25fY2xvc2UoT2xkSGVhcCwgQWNjZXNzRXhjbHVzaXZlTG9j ayk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0aGF0IHRoZSBp bmRleCBpcyBzdGlsbCB0aGUgb25lIHdpdGggaW5kaXNjbHVzdGVyZWQgc2V0LCBpZgorCQkgKiBu ZWVkZWQuCisJCSAqLworCQlpZiAoKG9wdGlvbnMgJiBDTFVPUFRfUkVDSEVDS19JU0NMVVNURVJF RCkgIT0gMCAmJgorCQkJIWdldF9pbmRleF9pc2NsdXN0ZXJlZChpbmRleE9pZCkpCisJCXsKKwkJ CXJlbGF0aW9uX2Nsb3NlKE9sZEhlYXAsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBWZXJpZnkgdGhh dCB0aGUgc3BlY2lmaWVkIGhlYXAgYW5kIGluZGV4IGFyZSB2YWxpZCB0byBjbHVzdGVyIG9uCiAg KgpAQCAtNjI2LDcgKzY1Miw4IEBAIG1hcmtfaW5kZXhfY2x1c3RlcmVkKFJlbGF0aW9uIHJlbCwg T2lkIGluZGV4T2lkLCBib29sIGlzX2ludGVybmFsKQogICogT24gZXhpdCwgdGhleSBhcmUgY2xv c2VkLCBidXQgbG9ja3Mgb24gdGhlbSBhcmUgbm90IHJlbGVhc2VkLgogICovCiBzdGF0aWMgdm9p ZAotcmVidWlsZF9yZWxhdGlvbihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBpbmRleCwgYm9v bCB2ZXJib3NlKQorcmVidWlsZF9yZWxhdGlvbihSZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2lu Z2luZGV4LAorCQkJCSBSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBpbmRleCwgYm9vbCB2ZXJi b3NlKQogewogCU9pZAkJCXRhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChPbGRIZWFwKTsKIAlP aWQJCQlhY2Nlc3NNZXRob2QgPSBPbGRIZWFwLT5yZF9yZWwtPnJlbGFtOwpAQCAtNjQyLDggKzY2 OSw4IEBAIHJlYnVpbGRfcmVsYXRpb24oUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gaW5kZXgs IGJvb2wgdmVyYm9zZSkKIAlBc3NlcnQoQ2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUoT2xkSGVhcCwg QWNjZXNzRXhjbHVzaXZlTG9jaywgZmFsc2UpICYmCiAJCSAgIChpbmRleCA9PSBOVUxMIHx8IENo ZWNrUmVsYXRpb25Mb2NrZWRCeU1lKGluZGV4LCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCBmYWxzZSkp KTsKIAotCWlmIChpbmRleCkKLQkJLyogTWFyayB0aGUgY29ycmVjdCBpbmRleCBhcyBjbHVzdGVy ZWQgKi8KKwkvKiBmb3IgQ0xVU1RFUiBvciBSRVBBQ0sgVVNJTkcgSU5ERVgsIG1hcmsgdGhlIGlu ZGV4IGFzIHRoZSBvbmUgdG8gdXNlICovCisJaWYgKHVzaW5naW5kZXgpCiAJCW1hcmtfaW5kZXhf Y2x1c3RlcmVkKE9sZEhlYXAsIFJlbGF0aW9uR2V0UmVsaWQoaW5kZXgpLCB0cnVlKTsKIAogCS8q IFJlbWVtYmVyIGluZm8gYWJvdXQgcmVsIGJlZm9yZSBjbG9zaW5nIE9sZEhlYXAgKi8KQEAgLTE0 NTgsOCArMTQ4NSw4IEBAIGZpbmlzaF9oZWFwX3N3YXAoT2lkIE9JRE9sZEhlYXAsIE9pZCBPSURO ZXdIZWFwLAogCWludAkJCWk7CiAKIAkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgbm93IHN3YXBwaW5n IHJlbGF0aW9uIGZpbGVzICovCi0JcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVT U19DTFVTVEVSX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9TV0FQX1JF TF9GSUxFUyk7CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19SRVBBQ0tf UEhBU0UsCisJCQkJCQkJCSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfU1dBUF9SRUxfRklMRVMpOwog CiAJLyogWmVybyBvdXQgcG9zc2libGUgcmVzdWx0cyBmcm9tIHN3YXBwZWRfcmVsYXRpb25fZmls ZXMgKi8KIAltZW1zZXQobWFwcGVkX3RhYmxlcywgMCwgc2l6ZW9mKG1hcHBlZF90YWJsZXMpKTsK QEAgLTE1MDksMTQgKzE1MzYsMTQgQEAgZmluaXNoX2hlYXBfc3dhcChPaWQgT0lET2xkSGVhcCwg T2lkIE9JRE5ld0hlYXAsCiAJCXJlaW5kZXhfZmxhZ3MgfD0gUkVJTkRFWF9SRUxfRk9SQ0VfSU5E RVhFU19QRVJNQU5FTlQ7CiAKIAkvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgbm93IHJlaW5kZXhpbmcg cmVsYXRpb25zICovCi0JcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DTFVT VEVSX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9SRUJVSUxEX0lOREVY KTsKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX1JFUEFDS19QSEFTRSwK KwkJCQkJCQkJIFBST0dSRVNTX1JFUEFDS19QSEFTRV9SRUJVSUxEX0lOREVYKTsKIAogCXJlaW5k ZXhfcmVsYXRpb24oTlVMTCwgT0lET2xkSGVhcCwgcmVpbmRleF9mbGFncywgJnJlaW5kZXhfcGFy YW1zKTsKIAogCS8qIFJlcG9ydCB0aGF0IHdlIGFyZSBub3cgZG9pbmcgY2xlYW4gdXAgKi8KLQlw Z3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NMVVNURVJfUEhBU0UsCi0JCQkJ CQkJCSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX0ZJTkFMX0NMRUFOVVApOworCXBnc3RhdF9wcm9n cmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfUkVQQUNLX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JF U1NfUkVQQUNLX1BIQVNFX0ZJTkFMX0NMRUFOVVApOwogCiAJLyoKIAkgKiBJZiB0aGUgcmVsYXRp b24gYmVpbmcgcmVidWlsdCBpcyBwZ19jbGFzcywgc3dhcF9yZWxhdGlvbl9maWxlcygpCkBAIC0x NjMyLDY5ICsxNjU5LDEzNyBAQCBmaW5pc2hfaGVhcF9zd2FwKE9pZCBPSURPbGRIZWFwLCBPaWQg T0lETmV3SGVhcCwKIAl9CiB9CiAKLQogLyoKLSAqIEdldCBhIGxpc3Qgb2YgdGFibGVzIHRoYXQg dGhlIGN1cnJlbnQgdXNlciBoYXMgcHJpdmlsZWdlcyBvbiBhbmQKLSAqIGhhdmUgaW5kaXNjbHVz dGVyZWQgc2V0LiAgUmV0dXJuIHRoZSBsaXN0IGluIGEgTGlzdCAqIG9mIFJlbFRvQ2x1c3Rlcgot ICogKHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIG1lbW9yeSBjb250ZXh0KSwgZWFjaCBvbmUgZ2l2 aW5nIHRoZSB0YWJsZU9pZAotICogYW5kIHRoZSBpbmRleE9pZCBvbiB3aGljaCB0aGUgdGFibGUg aXMgYWxyZWFkeSBjbHVzdGVyZWQuCisgKiBEZXRlcm1pbmUgd2hpY2ggcmVsYXRpb25zIHRvIHBy b2Nlc3MsIHdoZW4gUkVQQUNLL0NMVVNURVIgaXMgY2FsbGVkCisgKiB3aXRob3V0IHNwZWNpZnlp bmcgYSB0YWJsZSBuYW1lLiAgVGhlIGV4YWN0IHByb2Nlc3MgZGVwZW5kcyBvbiB3aGV0aGVyCisg KiBVU0lORyBJTkRFWCB3YXMgZ2l2ZW4gb3Igbm90LCBhbmQgaW4gYW55IGNhc2Ugd2Ugb25seSBy ZXR1cm4gdGFibGVzIGFuZAorICogbWF0ZXJpYWxpemVkIHZpZXdzIHRoYXQgdGhlIGN1cnJlbnQg dXNlciBoYXMgcHJpdmlsZWdlcyB0byByZXBhY2svY2x1c3Rlci4KKyAqCisgKiBJZiBVU0lORyBJ TkRFWCB3YXMgZ2l2ZW4sIHdlIHNjYW4gcGdfaW5kZXggdG8gZmluZCB0aG9zZSB0aGF0IGhhdmUK KyAqIGluZGlzY2x1c3RlcmVkIHNldDsgaWYgaXQgd2FzIG5vdCBnaXZlbiwgc2NhbiBwZ19jbGFz cyBhbmQgcmV0dXJuIGFsbAorICogdGFibGVzLgorICoKKyAqIFJldHVybiBpdCBhcyBhIGxpc3Qg b2YgUmVsVG9DbHVzdGVyIGluIHRoZSBnaXZlbiBtZW1vcnkgY29udGV4dC4KICAqLwogc3RhdGlj IExpc3QgKgotZ2V0X3RhYmxlc190b19jbHVzdGVyKE1lbW9yeUNvbnRleHQgY2x1c3Rlcl9jb250 ZXh0KQorZ2V0X3RhYmxlc190b19yZXBhY2soUmVwYWNrQ29tbWFuZCBjb21tYW5kLCBib29sIHVz aW5naW5kZXgsCisJCQkJCSBNZW1vcnlDb250ZXh0IHBlcm1jeHQpCiB7Ci0JUmVsYXRpb24JaW5k UmVsYXRpb247CisJUmVsYXRpb24JY2F0YWxvZzsKIAlUYWJsZVNjYW5EZXNjIHNjYW47Ci0JU2Nh bktleURhdGEgZW50cnk7Ci0JSGVhcFR1cGxlCWluZGV4VHVwbGU7Ci0JRm9ybV9wZ19pbmRleCBp bmRleDsKKwlIZWFwVHVwbGUJdHVwbGU7CiAJTWVtb3J5Q29udGV4dCBvbGRfY29udGV4dDsKIAlM aXN0CSAgICpydGNzID0gTklMOwogCi0JLyoKLQkgKiBHZXQgYWxsIGluZGV4ZXMgdGhhdCBoYXZl IGluZGlzY2x1c3RlcmVkIHNldCBhbmQgdGhhdCB0aGUgY3VycmVudCB1c2VyCi0JICogaGFzIHRo ZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIGZvci4KLQkgKi8KLQlpbmRSZWxhdGlvbiA9IHRhYmxl X29wZW4oSW5kZXhSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwotCVNjYW5LZXlJbml0KCZl bnRyeSwKLQkJCQlBbnVtX3BnX2luZGV4X2luZGlzY2x1c3RlcmVkLAotCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9CT09MRVEsCi0JCQkJQm9vbEdldERhdHVtKHRydWUpKTsKLQlzY2FuID0g dGFibGVfYmVnaW5zY2FuX2NhdGFsb2coaW5kUmVsYXRpb24sIDEsICZlbnRyeSk7Ci0Jd2hpbGUg KChpbmRleFR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkg IT0gTlVMTCkKKwlpZiAodXNpbmdpbmRleCkKIAl7Ci0JCVJlbFRvQ2x1c3RlciAqcnRjOworCQlT Y2FuS2V5RGF0YSBlbnRyeTsKIAotCQlpbmRleCA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1Qo aW5kZXhUdXBsZSk7CisJCWNhdGFsb2cgPSB0YWJsZV9vcGVuKEluZGV4UmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJU2NhbktleUluaXQoJmVudHJ5LAorCQkJCQlBbnVtX3BnX2luZGV4 X2luZGlzY2x1c3RlcmVkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQk9PTEVRLAor CQkJCQlCb29sR2V0RGF0dW0odHJ1ZSkpOworCQlzY2FuID0gdGFibGVfYmVnaW5zY2FuX2NhdGFs b2coY2F0YWxvZywgMSwgJmVudHJ5KTsKKwkJd2hpbGUgKCh0dXBsZSA9IGhlYXBfZ2V0bmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJCXsKKwkJCVJlbFRvQ2x1c3Rl ciAqcnRjOworCQkJRm9ybV9wZ19pbmRleCBpbmRleDsKIAotCQlpZiAoIWNsdXN0ZXJfaXNfcGVy bWl0dGVkX2Zvcl9yZWxhdGlvbihpbmRleC0+aW5kcmVsaWQsIEdldFVzZXJJZCgpKSkKLQkJCWNv bnRpbnVlOworCQkJaW5kZXggPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKHR1cGxlKTsKIAot CQkvKiBVc2UgYSBwZXJtYW5lbnQgbWVtb3J5IGNvbnRleHQgZm9yIHRoZSByZXN1bHQgbGlzdCAq LwotCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjbHVzdGVyX2NvbnRleHQp OworCQkJLyoKKwkJCSAqIFhYWCBJIHRoaW5rIHRoZSBvbmx5IHJlYXNvbiB0aGVyZSdzIG5vIHRl c3QgZmFpbHVyZSBoZXJlIGlzCisJCQkgKiB0aGF0IHdlIHNlbGRvbSBoYXZlIGNsdXN0ZXJlZCBp bmRleGVzIHRoYXQgd291bGQgYmUgYWZmZWN0ZWQgYnkKKwkJCSAqIGNvbmN1cnJlbmN5LiAgTWF5 YmUgd2Ugc2hvdWxkIGFsc28gZG8gdGhlCisJCQkgKiBDb25kaXRpb25hbExvY2tSZWxhdGlvbk9p ZCtTZWFyY2hTeXNDYWNoZUV4aXN0cyBkYW5jZSB0aGF0IHdlCisJCQkgKiBkbyBiZWxvdy4KKwkJ CSAqLworCQkJaWYgKCFjbHVzdGVyX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24oY29tbWFuZCwg aW5kZXgtPmluZHJlbGlkLAorCQkJCQkJCQkJCQkJICAgR2V0VXNlcklkKCkpKQorCQkJCWNvbnRp bnVlOwogCi0JCXJ0YyA9IChSZWxUb0NsdXN0ZXIgKikgcGFsbG9jKHNpemVvZihSZWxUb0NsdXN0 ZXIpKTsKLQkJcnRjLT50YWJsZU9pZCA9IGluZGV4LT5pbmRyZWxpZDsKLQkJcnRjLT5pbmRleE9p ZCA9IGluZGV4LT5pbmRleHJlbGlkOwotCQlydGNzID0gbGFwcGVuZChydGNzLCBydGMpOworCQkJ LyogVXNlIGEgcGVybWFuZW50IG1lbW9yeSBjb250ZXh0IGZvciB0aGUgcmVzdWx0IGxpc3QgKi8K KwkJCW9sZF9jb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBlcm1jeHQpOwogCi0JCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRfY29udGV4dCk7CisJCQlydGMgPSAoUmVsVG9DbHVzdGVy ICopIHBhbGxvYyhzaXplb2YoUmVsVG9DbHVzdGVyKSk7CisJCQlydGMtPnRhYmxlT2lkID0gaW5k ZXgtPmluZHJlbGlkOworCQkJcnRjLT5pbmRleE9pZCA9IGluZGV4LT5pbmRleHJlbGlkOworCQkJ cnRjcyA9IGxhcHBlbmQocnRjcywgcnRjKTsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZF9jb250ZXh0KTsKKwkJfQogCX0KKwllbHNlCisJeworCQljYXRhbG9nID0gdGFibGVfb3BlbihS ZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCXNjYW4gPSB0YWJsZV9iZWdp bnNjYW5fY2F0YWxvZyhjYXRhbG9nLCAwLCBOVUxMKTsKKworCQl3aGlsZSAoKHR1cGxlID0gaGVh cF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkgIT0gTlVMTCkKKwkJeworCQkJ UmVsVG9DbHVzdGVyICpydGM7CisJCQlGb3JtX3BnX2NsYXNzIGNsYXNzOworCisJCQljbGFzcyA9 IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCQkvKgorCQkJICogVHJ5IHRv IG9idGFpbiBhIGxpZ2h0IGxvY2sgb24gdGhlIHRhYmxlLCB0byBlbnN1cmUgaXQgZG9lc24ndAor CQkJICogZ28gYXdheSB3aGlsZSB3ZSBjb2xsZWN0IHRoZSBsaXN0LiAgSWYgd2UgY2Fubm90LCBq dXN0CisJCQkgKiBkaXNyZWdhcmQgdGhlIHRhYmxlLiAgWFhYIHdlIGNvdWxkIHJlbGVhc2UgYXQg dGhlIGJvdHRvbSBvZiB0aGUKKwkJCSAqIGxvb3AsIGJ1dCBmb3Igbm93IGp1c3QgaG9sZCBpdCB1 bnRpbCB0aGlzIHRyYW5zYWN0aW9uIGlzCisJCQkgKiBmaW5pc2hlZC4KKwkJCSAqLworCQkJaWYg KCFDb25kaXRpb25hbExvY2tSZWxhdGlvbk9pZChjbGFzcy0+b2lkLCBBY2Nlc3NTaGFyZUxvY2sp KQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgdGFibGUgc3RpbGwgZXhp c3RzLiAqLworCQkJaWYgKCFTZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCBPYmplY3RJZEdl dERhdHVtKGNsYXNzLT5vaWQpKSkKKwkJCXsKKwkJCQkvKiBSZWxlYXNlIHVzZWxlc3MgbG9jayAq LworCQkJCVVubG9ja1JlbGF0aW9uT2lkKGNsYXNzLT5vaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIENhbiBvbmx5IHByb2Nlc3MgcGxhaW4gdGFibGVz IGFuZCBtYXR2aWV3cyAqLworCQkJaWYgKGNsYXNzLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJ T04gJiYKKwkJCQljbGFzcy0+cmVsa2luZCAhPSBSRUxLSU5EX01BVFZJRVcpCisJCQkJY29udGlu dWU7CisKKwkJCWlmICghY2x1c3Rlcl9pc19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKGNvbW1hbmQs IGNsYXNzLT5vaWQsCisJCQkJCQkJCQkJCQkgICBHZXRVc2VySWQoKSkpCisJCQkJY29udGludWU7 CisKKwkJCS8qIFVzZSBhIHBlcm1hbmVudCBtZW1vcnkgY29udGV4dCBmb3IgdGhlIHJlc3VsdCBs aXN0ICovCisJCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJtY3h0KTsK KworCQkJcnRjID0gKFJlbFRvQ2x1c3RlciAqKSBwYWxsb2Moc2l6ZW9mKFJlbFRvQ2x1c3Rlcikp OworCQkJcnRjLT50YWJsZU9pZCA9IGNsYXNzLT5vaWQ7CisJCQlydGMtPmluZGV4T2lkID0gSW52 YWxpZE9pZDsKKwkJCXJ0Y3MgPSBsYXBwZW5kKHJ0Y3MsIHJ0Yyk7CisKKwkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRfY29udGV4dCk7CisJCX0KKwl9CisKIAl0YWJsZV9lbmRzY2FuKHNjYW4p OwotCi0JcmVsYXRpb25fY2xvc2UoaW5kUmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVs YXRpb25fY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKIAogCXJldHVybiBydGNzOwog fQogCiAvKgotICogR2l2ZW4gYW4gaW5kZXggb24gYSBwYXJ0aXRpb25lZCB0YWJsZSwgcmV0dXJu IGEgbGlzdCBvZiBSZWxUb0NsdXN0ZXIgZm9yCisgKiBHaXZlbiBhIHBhcnRpdGlvbmVkIHRhYmxl IG9yIGl0cyBpbmRleCwgcmV0dXJuIGEgbGlzdCBvZiBSZWxUb0NsdXN0ZXIgZm9yCiAgKiBhbGwg dGhlIGNoaWxkcmVuIGxlYXZlcyB0YWJsZXMvaW5kZXhlcy4KICAqCiAgKiBMaWtlIGV4cGFuZF92 YWN1dW1fcmVsLCBidXQgaGVyZSBjYWxsZXIgbXVzdCBob2xkIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sK ICAqIG9uIHRoZSB0YWJsZSBjb250YWluaW5nIHRoZSBpbmRleC4KKyAqCisgKiAncmVsX2lzX2lu ZGV4JyB0ZWxscyB3aGV0aGVyICdyZWxpZCcgaXMgdGhhdCBvZiBhbiBpbmRleCAodHJ1ZSkgb3Ig b2YgdGhlCisgKiBvd25pbmcgcmVsYXRpb24uCiAgKi8KIHN0YXRpYyBMaXN0ICoKLWdldF90YWJs ZXNfdG9fY2x1c3Rlcl9wYXJ0aXRpb25lZChNZW1vcnlDb250ZXh0IGNsdXN0ZXJfY29udGV4dCwg T2lkIGluZGV4T2lkKQorZ2V0X3RhYmxlc190b19yZXBhY2tfcGFydGl0aW9uZWQoUmVwYWNrQ29t bWFuZCBjbWQsIE1lbW9yeUNvbnRleHQgY2x1c3Rlcl9jb250ZXh0LAorCQkJCQkJCQkgT2lkIHJl bGlkLCBib29sIHJlbF9pc19pbmRleCkKIHsKIAlMaXN0CSAgICppbmhvaWRzOwogCUxpc3RDZWxs ICAgKmxjOwpAQCAtMTcwMiwxNyArMTc5NywzMyBAQCBnZXRfdGFibGVzX3RvX2NsdXN0ZXJfcGFy dGl0aW9uZWQoTWVtb3J5Q29udGV4dCBjbHVzdGVyX2NvbnRleHQsIE9pZCBpbmRleE9pZCkKIAlN ZW1vcnlDb250ZXh0IG9sZF9jb250ZXh0OwogCiAJLyogRG8gbm90IGxvY2sgdGhlIGNoaWxkcmVu IHVudGlsIHRoZXkncmUgcHJvY2Vzc2VkICovCi0JaW5ob2lkcyA9IGZpbmRfYWxsX2luaGVyaXRv cnMoaW5kZXhPaWQsIE5vTG9jaywgTlVMTCk7CisJaW5ob2lkcyA9IGZpbmRfYWxsX2luaGVyaXRv cnMocmVsaWQsIE5vTG9jaywgTlVMTCk7CiAKIAlmb3JlYWNoKGxjLCBpbmhvaWRzKQogCXsKLQkJ T2lkCQkJaW5kZXhyZWxpZCA9IGxmaXJzdF9vaWQobGMpOwotCQlPaWQJCQlyZWxpZCA9IEluZGV4 R2V0UmVsYXRpb24oaW5kZXhyZWxpZCwgZmFsc2UpOworCQlPaWQJCQlpbmhvaWQgPSBsZmlyc3Rf b2lkKGxjKTsKKwkJT2lkCQkJaW5ocmVsaWQsCisJCQkJCWluaGluZGlkOwogCQlSZWxUb0NsdXN0 ZXIgKnJ0YzsKIAotCQkvKiBjb25zaWRlciBvbmx5IGxlYWYgaW5kZXhlcyAqLwotCQlpZiAoZ2V0 X3JlbF9yZWxraW5kKGluZGV4cmVsaWQpICE9IFJFTEtJTkRfSU5ERVgpCi0JCQljb250aW51ZTsK KwkJaWYgKHJlbF9pc19pbmRleCkKKwkJeworCQkJLyogY29uc2lkZXIgb25seSBsZWFmIGluZGV4 ZXMgKi8KKwkJCWlmIChnZXRfcmVsX3JlbGtpbmQoaW5ob2lkKSAhPSBSRUxLSU5EX0lOREVYKQor CQkJCWNvbnRpbnVlOworCisJCQlpbmhyZWxpZCA9IEluZGV4R2V0UmVsYXRpb24oaW5ob2lkLCBm YWxzZSk7CisJCQlpbmhpbmRpZCA9IGluaG9pZDsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGNv bnNpZGVyIG9ubHkgbGVhZiByZWxhdGlvbnMgKi8KKwkJCWlmIChnZXRfcmVsX3JlbGtpbmQoaW5o b2lkKSAhPSBSRUxLSU5EX1JFTEFUSU9OKQorCQkJCWNvbnRpbnVlOworCisJCQlpbmhyZWxpZCA9 IGluaG9pZDsKKwkJCWluaGluZGlkID0gSW52YWxpZE9pZDsKKwkJfQogCiAJCS8qCiAJCSAqIEl0 J3MgcG9zc2libGUgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHByaXZpbGVnZXMgdG8gQ0xV U1RFUiB0aGUKQEAgLTE3MjAsMTUgKzE4MzEsMTUgQEAgZ2V0X3RhYmxlc190b19jbHVzdGVyX3Bh cnRpdGlvbmVkKE1lbW9yeUNvbnRleHQgY2x1c3Rlcl9jb250ZXh0LCBPaWQgaW5kZXhPaWQpCiAJ CSAqIHRhYmxlLiAgV2Ugc2tpcCBhbnkgcGFydGl0aW9ucyB3aGljaCB0aGUgdXNlciBpcyBub3Qg cGVybWl0dGVkIHRvCiAJCSAqIENMVVNURVIuCiAJCSAqLwotCQlpZiAoIWNsdXN0ZXJfaXNfcGVy bWl0dGVkX2Zvcl9yZWxhdGlvbihyZWxpZCwgR2V0VXNlcklkKCkpKQorCQlpZiAoIWNsdXN0ZXJf aXNfcGVybWl0dGVkX2Zvcl9yZWxhdGlvbihjbWQsIGluaHJlbGlkLCBHZXRVc2VySWQoKSkpCiAJ CQljb250aW51ZTsKIAogCQkvKiBVc2UgYSBwZXJtYW5lbnQgbWVtb3J5IGNvbnRleHQgZm9yIHRo ZSByZXN1bHQgbGlzdCAqLwogCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhj bHVzdGVyX2NvbnRleHQpOwogCiAJCXJ0YyA9IChSZWxUb0NsdXN0ZXIgKikgcGFsbG9jKHNpemVv ZihSZWxUb0NsdXN0ZXIpKTsKLQkJcnRjLT50YWJsZU9pZCA9IHJlbGlkOwotCQlydGMtPmluZGV4 T2lkID0gaW5kZXhyZWxpZDsKKwkJcnRjLT50YWJsZU9pZCA9IGluaHJlbGlkOworCQlydGMtPmlu ZGV4T2lkID0gaW5oaW5kaWQ7CiAJCXJ0Y3MgPSBsYXBwZW5kKHJ0Y3MsIHJ0Yyk7CiAKIAkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKQEAgLTE3NDIsMTMgKzE4NTMsMTQ4IEBA IGdldF90YWJsZXNfdG9fY2x1c3Rlcl9wYXJ0aXRpb25lZChNZW1vcnlDb250ZXh0IGNsdXN0ZXJf Y29udGV4dCwgT2lkIGluZGV4T2lkKQogICogZnVuY3Rpb24gZW1pdHMgYSBXQVJOSU5HLgogICov CiBzdGF0aWMgYm9vbAotY2x1c3Rlcl9pc19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKE9pZCByZWxp ZCwgT2lkIHVzZXJpZCkKK2NsdXN0ZXJfaXNfcGVybWl0dGVkX2Zvcl9yZWxhdGlvbihSZXBhY2tD b21tYW5kIGNtZCwgT2lkIHJlbGlkLCBPaWQgdXNlcmlkKQogewogCWlmIChwZ19jbGFzc19hY2xj aGVjayhyZWxpZCwgdXNlcmlkLCBBQ0xfTUFJTlRBSU4pID09IEFDTENIRUNLX09LKQogCQlyZXR1 cm4gdHJ1ZTsKIAorCUFzc2VydChjbWQgPT0gUkVQQUNLX0NPTU1BTkRfQ0xVU1RFUiB8fCBjbWQg PT0gUkVQQUNLX0NPTU1BTkRfUkVQQUNLKTsKIAllcmVwb3J0KFdBUk5JTkcsCi0JCQkoZXJybXNn KCJwZXJtaXNzaW9uIGRlbmllZCB0byBjbHVzdGVyIFwiJXNcIiwgc2tpcHBpbmcgaXQiLAotCQkJ CQlnZXRfcmVsX25hbWUocmVsaWQpKSkpOworCQkJZXJybXNnKCJwZXJtaXNzaW9uIGRlbmllZCB0 byBleGVjdXRlICVzIG9uIFwiJXNcIiwgc2tpcHBpbmcgaXQiLAorCQkJCSAgIGNtZCA9PSBSRVBB Q0tfQ09NTUFORF9DTFVTVEVSID8gIkNMVVNURVIiIDogIlJFUEFDSyIsCisJCQkJICAgZ2V0X3Jl bF9uYW1lKHJlbGlkKSkpOworCiAJcmV0dXJuIGZhbHNlOwogfQorCisKKy8qCisgKiBHaXZlbiBh IFJlcGFja1N0bXQgd2l0aCBhbiBpbmRpY2F0ZWQgcmVsYXRpb24gbmFtZSwgcmVzb2x2ZSB0aGUg cmVsYXRpb24KKyAqIG5hbWUsIG9idGFpbiBsb2NrIG9uIGl0LCB0aGVuIGRldGVybWluZSB3aGF0 IHRvIGRvIGJhc2VkIG9uIHRoZSByZWxhdGlvbgorICogdHlwZTogaWYgaXQncyBub3QgYSBwYXJ0 aXRpb25lZCB0YWJsZSwgcmVwYWNrIGl0IGFzIGluZGljYXRlZCAodXNpbmcgYW4KKyAqIGV4aXN0 aW5nIGNsdXN0ZXJlZCBpbmRleCwgb3IgZm9sbG93aW5nIHRoZSBpbmRpY2F0ZWQgaW5kZXgpLCBh bmQgcmV0dXJuCisgKiBOVUxMLgorICoKKyAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgdGFi bGUgaXMgcGFydGl0aW9uZWQsIGRvIG5vdGhpbmcgZnVydGhlciBhbmQKKyAqIGluc3RlYWQgcmV0 dXJuIHRoZSBvcGVuZWQgcmVsY2FjaGUgZW50cnksIHNvIHRoYXQgY2FsbGVyIGNhbiBwcm9jZXNz IHRoZQorICogcGFydGl0aW9ucyB1c2luZyB0aGUgbXVsdGlwbGUtdGFibGUgaGFuZGxpbmcgY29k ZS4gIFRoZSBpbmRleCBuYW1lIGlzIG5vdAorICogcmVzb2x2ZSBpbiB0aGlzIGNhc2UuCisgKi8K K3N0YXRpYyBSZWxhdGlvbgorcHJvY2Vzc19zaW5nbGVfcmVsYXRpb24oUmVwYWNrU3RtdCAqc3Rt dCwgQ2x1c3RlclBhcmFtcyAqcGFyYW1zKQoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQl0YWJs ZU9pZDsKKworCUFzc2VydChzdG10LT5yZWxhdGlvbiAhPSBOVUxMKTsKKwlBc3NlcnQoc3RtdC0+ Y29tbWFuZCA9PSBSRVBBQ0tfQ09NTUFORF9DTFVTVEVSIHx8CisJCSAgIHN0bXQtPmNvbW1hbmQg PT0gUkVQQUNLX0NPTU1BTkRfUkVQQUNLKTsKKworCS8qCisJICogRmluZCwgbG9jaywgYW5kIGNo ZWNrIHBlcm1pc3Npb25zIG9uIHRoZSB0YWJsZS4gIFdlIG9idGFpbgorCSAqIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2sgcmlnaHQgYXdheSB0byBhdm9pZCBsb2NrLXVwZ3JhZGUgaGF6YXJkIGluIHRoZQor CSAqIHNpbmdsZS10cmFuc2FjdGlvbiBjYXNlLgorCSAqLworCXRhYmxlT2lkID0gUmFuZ2VWYXJH ZXRSZWxpZEV4dGVuZGVkKHN0bXQtPnJlbGF0aW9uLAorCQkJCQkJCQkJCUFjY2Vzc0V4Y2x1c2l2 ZUxvY2ssCisJCQkJCQkJCQkJMCwKKwkJCQkJCQkJCQlSYW5nZVZhckNhbGxiYWNrTWFpbnRhaW5z VGFibGUsCisJCQkJCQkJCQkJTlVMTCk7CisJcmVsID0gdGFibGVfb3Blbih0YWJsZU9pZCwgTm9M b2NrKTsKKworCS8qCisJICogUmVqZWN0IGNsdXN0ZXJpbmcgYSByZW1vdGUgdGVtcCB0YWJsZSAu Li4gdGhlaXIgbG9jYWwgYnVmZmVyIG1hbmFnZXIgaXMKKwkgKiBub3QgZ29pbmcgdG8gY29wZS4K KwkgKi8KKwlpZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVNUChyZWwpKQorCXsKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQll cnJtc2coImNhbm5vdCBleGVjdXRlICVzIG9uIHRlbXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vz c2lvbnMiLAorCQkJCQkgICBSZXBhY2tDb21tYW5kQXNTdHJpbmcoc3RtdC0+Y29tbWFuZCkpKTsK Kwl9CisKKwkvKgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIGxldCBjYWxsZXIgaGFuZGxl IHRoaXMuICBPdGhlcndpc2UsIHByb2Nlc3MgaXQKKwkgKiBoZXJlIGFuZCB3ZSdyZSBkb25lLgor CSAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQlyZXR1cm4gcmVsOworCWVsc2UKKwl7CisJCU9pZAkJCWluZGV4T2lkOworCisJCWlu ZGV4T2lkID0gZGV0ZXJtaW5lX2NsdXN0ZXJlZF9pbmRleChyZWwsIHN0bXQtPnVzaW5naW5kZXgs CisJCQkJCQkJCQkJCSBzdG10LT5pbmRleG5hbWUpOworCQlpZiAoT2lkSXNWYWxpZChpbmRleE9p ZCkpCisJCQljaGVja19pbmRleF9pc19jbHVzdGVyYWJsZShyZWwsIGluZGV4T2lkLCBBY2Nlc3NF eGNsdXNpdmVMb2NrKTsKKwkJY2x1c3Rlcl9yZWwoc3RtdC0+Y29tbWFuZCwgc3RtdC0+dXNpbmdp bmRleCwgcmVsLCBpbmRleE9pZCwgcGFyYW1zKTsKKworCQkvKiBEbyBhbiBhbmFseXplLCBpZiBy ZXF1ZXN0ZWQgKi8KKwkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9BTkFMWVpFKQorCQl7 CisJCQlWYWN1dW1QYXJhbXMgdmFjX3BhcmFtcyA9IHswfTsKKworCQkJdmFjX3BhcmFtcy5vcHRp b25zIHw9IFZBQ09QVF9BTkFMWVpFOworCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIENMVU9QVF9W RVJCT1NFKQorCQkJCXZhY19wYXJhbXMub3B0aW9ucyB8PSBWQUNPUFRfVkVSQk9TRTsKKwkJCWFu YWx5emVfcmVsKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwgdmFjX3BhcmFtcywgTklMLCB0 cnVlLAorCQkJCQkJTlVMTCk7CisJCX0KKworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKy8qCisg KiBHaXZlbiBhIHJlbGF0aW9uIGFuZCB0aGUgdXNpbmdpbmRleC9pbmRleG5hbWUgb3B0aW9ucyBp biBhCisgKiBSRVBBQ0sgVVNJTkcgSU5ERVggb3IgQ0xVU1RFUiBjb21tYW5kLCByZXR1cm4gdGhl IE9JRCBvZiB0aGUgaW5kZXggdG8gdXNlCisgKiBmb3IgY2x1c3RlcmluZyB0aGUgdGFibGUuCisg KgorICogQ2FsbGVyIG11c3QgaG9sZCBsb2NrIG9uIHRoZSByZWxhdGlvbiBzbyB0aGF0IHRoZSBz ZXQgb2YgaW5kZXhlcyBkb2Vzbid0CisgKiBjaGFuZ2UsIGFuZCBtdXN0IGNhbGwgY2hlY2tfaW5k ZXhfaXNfY2x1c3RlcmFibGUuCisgKi8KK3N0YXRpYyBPaWQKK2RldGVybWluZV9jbHVzdGVyZWRf aW5kZXgoUmVsYXRpb24gcmVsLCBib29sIHVzaW5naW5kZXgsIGNvbnN0IGNoYXIgKmluZGV4bmFt ZSkKK3sKKwlPaWQJCQlpbmRleE9pZDsKKworCWlmIChpbmRleG5hbWUgPT0gTlVMTCAmJiB1c2lu Z2luZGV4KQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogRmluZCBhbiBpbmRleCB3aXRo IGluZGlzY2x1c3RlcmVkIHNldCwgb3IgcmVwb3J0IGVycm9yICovCisJCWZvcmVhY2gobGMsIFJl bGF0aW9uR2V0SW5kZXhMaXN0KHJlbCkpCisJCXsKKwkJCWluZGV4T2lkID0gbGZpcnN0X29pZChs Yyk7CisKKwkJCWlmIChnZXRfaW5kZXhfaXNjbHVzdGVyZWQoaW5kZXhPaWQpKQorCQkJCWJyZWFr OworCQkJaW5kZXhPaWQgPSBJbnZhbGlkT2lkOworCQl9CisKKwkJaWYgKCFPaWRJc1ZhbGlkKGlu ZGV4T2lkKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfT0JKRUNUKSwKKwkJCQkJZXJybXNnKCJ0aGVyZSBpcyBubyBwcmV2aW91c2x5IGNsdXN0ZXJl ZCBpbmRleCBmb3IgdGFibGUgXCIlc1wiIiwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbCkpKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhuYW1lICE9IE5VTEwpCisJeworCQkvKgor CQkgKiBBbiBpbmRleCB3YXMgc3BlY2lmaWVkOyBmaWd1cmUgb3V0IGl0cyBPSUQuICBJdCBtdXN0 IGJlIGluIHRoZSBzYW1lCisJCSAqIG5hbWVzcGFjZSBhcyB0aGUgcmVsYXRpb24uCisJCSAqLwor CQlpbmRleE9pZCA9IGdldF9yZWxuYW1lX3JlbGlkKGluZGV4bmFtZSwKKwkJCQkJCQkJCSByZWwt PnJkX3JlbC0+cmVsbmFtZXNwYWNlKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKGluZGV4T2lkKSkKKwkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJZXJybXNnKCJpbmRleCBcIiVzXCIgZm9yIHRhYmxlIFwiJXNcIiBkb2VzIG5vdCBleGlz dCIsCisJCQkJCQkgICBpbmRleG5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsK Kwl9CisJZWxzZQorCQlpbmRleE9pZCA9IEludmFsaWRPaWQ7CisKKwlyZXR1cm4gaW5kZXhPaWQ7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDczM2VmNDBhZTdjLi44ODYzYWQwZThiZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtLmMKQEAgLTIyODcsNyArMjI4Nyw4IEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJCQkJY2x1c3Rl cl9wYXJhbXMub3B0aW9ucyB8PSBDTFVPUFRfVkVSQk9TRTsKIAogCQkJLyogVkFDVVVNIEZVTEwg aXMgbm93IGEgdmFyaWFudCBvZiBDTFVTVEVSOyBzZWUgY2x1c3Rlci5jICovCi0JCQljbHVzdGVy X3JlbChyZWwsIEludmFsaWRPaWQsICZjbHVzdGVyX3BhcmFtcyk7CisJCQljbHVzdGVyX3JlbChS RVBBQ0tfQ09NTUFORF9WQUNVVU1GVUxMLCBmYWxzZSwgcmVsLCBJbnZhbGlkT2lkLAorCQkJCQkJ JmNsdXN0ZXJfcGFyYW1zKTsKIAkJCS8qIGNsdXN0ZXJfcmVsIGNsb3NlcyB0aGUgcmVsYXRpb24s IGJ1dCBrZWVwcyBsb2NrICovCiAKIAkJCXJlbCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBkYjQz MDM0YjlkYi4uZjkxNTI3MjgwMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjgwLDcgKzI4MCw3IEBAIHN0 YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICph bGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCUFsdGVyQ29tcG9zaXRlVHlwZVN0bXQgQWx0ZXJVc2Vy TWFwcGluZ1N0bXQKIAkJQWx0ZXJSb2xlU3RtdCBBbHRlclJvbGVTZXRTdG10IEFsdGVyUG9saWN5 U3RtdCBBbHRlclN0YXRzU3RtdAogCQlBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCBEZWZBQ0xB Y3Rpb24KLQkJQW5hbHl6ZVN0bXQgQ2FsbFN0bXQgQ2xvc2VQb3J0YWxTdG10IENsdXN0ZXJTdG10 IENvbW1lbnRTdG10CisJCUFuYWx5emVTdG10IENhbGxTdG10IENsb3NlUG9ydGFsU3RtdCBDb21t ZW50U3RtdAogCQlDb25zdHJhaW50c1NldFN0bXQgQ29weVN0bXQgQ3JlYXRlQXNTdG10IENyZWF0 ZUNhc3RTdG10CiAJCUNyZWF0ZURvbWFpblN0bXQgQ3JlYXRlRXh0ZW5zaW9uU3RtdCBDcmVhdGVH cm91cFN0bXQgQ3JlYXRlT3BDbGFzc1N0bXQKIAkJQ3JlYXRlT3BGYW1pbHlTdG10IEFsdGVyT3BG YW1pbHlTdG10IENyZWF0ZVBMYW5nU3RtdApAQCAtMjk3LDcgKzI5Nyw3IEBAIHN0YXRpYyBOb2Rl ICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBO b2RlICpxdWVyeSk7CiAJCUdyYW50U3RtdCBHcmFudFJvbGVTdG10IEltcG9ydEZvcmVpZ25TY2hl bWFTdG10IEluZGV4U3RtdCBJbnNlcnRTdG10CiAJCUxpc3RlblN0bXQgTG9hZFN0bXQgTG9ja1N0 bXQgTWVyZ2VTdG10IE5vdGlmeVN0bXQgRXhwbGFpbmFibGVTdG10IFByZXBhcmFibGVTdG10CiAJ CUNyZWF0ZUZ1bmN0aW9uU3RtdCBBbHRlckZ1bmN0aW9uU3RtdCBSZWluZGV4U3RtdCBSZW1vdmVB Z2dyU3RtdAotCQlSZW1vdmVGdW5jU3RtdCBSZW1vdmVPcGVyU3RtdCBSZW5hbWVTdG10IFJldHVy blN0bXQgUmV2b2tlU3RtdCBSZXZva2VSb2xlU3RtdAorCQlSZW1vdmVGdW5jU3RtdCBSZW1vdmVP cGVyU3RtdCBSZW5hbWVTdG10IFJlcGFja1N0bXQgUmV0dXJuU3RtdCBSZXZva2VTdG10IFJldm9r ZVJvbGVTdG10CiAJCVJ1bGVBY3Rpb25TdG10IFJ1bGVBY3Rpb25TdG10T3JFbXB0eSBSdWxlU3Rt dAogCQlTZWNMYWJlbFN0bXQgU2VsZWN0U3RtdCBUcmFuc2FjdGlvblN0bXQgVHJhbnNhY3Rpb25T dG10TGVnYWN5IFRydW5jYXRlU3RtdAogCQlVbmxpc3RlblN0bXQgVXBkYXRlU3RtdCBWYWN1dW1T dG10CkBAIC0zMTYsNyArMzE2LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2Vs ZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogJXR5cGUg PHN0cj4JCQlvcHRfc2luZ2xlX25hbWUKICV0eXBlIDxsaXN0PgkJb3B0X3F1YWxpZmllZF9uYW1l Ci0ldHlwZSA8Ym9vbGVhbj4JCW9wdF9jb25jdXJyZW50bHkKKyV0eXBlIDxib29sZWFuPgkJb3B0 X2NvbmN1cnJlbnRseSBvcHRfdXNpbmdpbmRleAogJXR5cGUgPGRiZWhhdmlvcj4Jb3B0X2Ryb3Bf YmVoYXZpb3IKICV0eXBlIDxsaXN0PgkJb3B0X3V0aWxpdHlfb3B0aW9uX2xpc3QKICV0eXBlIDxs aXN0PgkJdXRpbGl0eV9vcHRpb25fbGlzdApAQCAtNzYzLDcgKzc2Myw3IEBAIHN0YXRpYyBOb2Rl ICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBO b2RlICpxdWVyeSk7CiAJUVVPVEUgUVVPVEVTCiAKIAlSQU5HRSBSRUFEIFJFQUwgUkVBU1NJR04g UkVDVVJTSVZFIFJFRl9QIFJFRkVSRU5DRVMgUkVGRVJFTkNJTkcKLQlSRUZSRVNIIFJFSU5ERVgg UkVMQVRJVkVfUCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRBQkxFIFJFUExBQ0UgUkVQTElDQQorCVJF RlJFU0ggUkVJTkRFWCBSRUxBVElWRV9QIFJFTEVBU0UgUkVOQU1FIFJFUEFDSyBSRVBFQVRBQkxF IFJFUExBQ0UgUkVQTElDQQogCVJFU0VUIFJFU1RBUlQgUkVTVFJJQ1QgUkVUVVJOIFJFVFVSTklO RyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExVUAogCVJPVVRJTkUgUk9V VElORVMgUk9XIFJPV1MgUlVMRQogCkBAIC0xMDI1LDcgKzEwMjUsNiBAQCBzdG10OgogCQkJfCBD YWxsU3RtdAogCQkJfCBDaGVja1BvaW50U3RtdAogCQkJfCBDbG9zZVBvcnRhbFN0bXQKLQkJCXwg Q2x1c3RlclN0bXQKIAkJCXwgQ29tbWVudFN0bXQKIAkJCXwgQ29uc3RyYWludHNTZXRTdG10CiAJ CQl8IENvcHlTdG10CkBAIC0xMDk5LDYgKzEwOTgsNyBAQCBzdG10OgogCQkJfCBSZW1vdmVGdW5j U3RtdAogCQkJfCBSZW1vdmVPcGVyU3RtdAogCQkJfCBSZW5hbWVTdG10CisJCQl8IFJlcGFja1N0 bXQKIAkJCXwgUmV2b2tlU3RtdAogCQkJfCBSZXZva2VSb2xlU3RtdAogCQkJfCBSdWxlU3RtdApA QCAtMTEzNSw2ICsxMTM1LDExIEBAIG9wdF9jb25jdXJyZW50bHk6CiAJCQl8IC8qRU1QVFkqLwkJ CQkJCXsgJCQgPSBmYWxzZTsgfQogCQk7CiAKK29wdF91c2luZ2luZGV4OgorCQkJVVNJTkcgSU5E RVgJCQkJCQl7ICQkID0gdHJ1ZTsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCQkJeyAkJCA9IGZhbHNl OyB9CisJCTsKKwogb3B0X2Ryb3BfYmVoYXZpb3I6CiAJCQlDQVNDQURFCQkJCQkJCXsgJCQgPSBE Uk9QX0NBU0NBREU7IH0KIAkJCXwgUkVTVFJJQ1QJCQkJCQl7ICQkID0gRFJPUF9SRVNUUklDVDsg fQpAQCAtMTE5MTIsMzggKzExOTE3LDkxIEBAIENyZWF0ZUNvbnZlcnNpb25TdG10OgogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCiAgKgogICoJCVFVRVJZOgorICoJCQkJUkVQQUNLIFsgKG9wdGlvbnMp IF0gWyA8cXVhbGlmaWVkX25hbWU+IFsgVVNJTkcgSU5ERVggPGluZGV4X25hbWU+IF0gXQorICoK KyAqCQkJb2Jzb2xldGUgdmFyaWFudHM6CiAgKgkJCQlDTFVTVEVSIChvcHRpb25zKSBbIDxxdWFs aWZpZWRfbmFtZT4gWyBVU0lORyA8aW5kZXhfbmFtZT4gXSBdCiAgKgkJCQlDTFVTVEVSIFtWRVJC T1NFXSBbIDxxdWFsaWZpZWRfbmFtZT4gWyBVU0lORyA8aW5kZXhfbmFtZT4gXSBdCiAgKgkJCQlD TFVTVEVSIFtWRVJCT1NFXSA8aW5kZXhfbmFtZT4gT04gPHF1YWxpZmllZF9uYW1lPiAoZm9yIHBy ZS04LjMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1DbHVzdGVyU3RtdDoKLQkJCUNM VVNURVIgJygnIHV0aWxpdHlfb3B0aW9uX2xpc3QgJyknIHF1YWxpZmllZF9uYW1lIGNsdXN0ZXJf aW5kZXhfc3BlY2lmaWNhdGlvbgorUmVwYWNrU3RtdDoKKwkJCVJFUEFDSyBvcHRfdXRpbGl0eV9v cHRpb25fbGlzdCBxdWFsaWZpZWRfbmFtZSBVU0lORyBJTkRFWCBuYW1lCiAJCQkJewotCQkJCQlD bHVzdGVyU3RtdCAqbiA9IG1ha2VOb2RlKENsdXN0ZXJTdG10KTsKKwkJCQkJUmVwYWNrU3RtdCAq biA9IG1ha2VOb2RlKFJlcGFja1N0bXQpOwogCisJCQkJCW4tPmNvbW1hbmQgPSBSRVBBQ0tfQ09N TUFORF9SRVBBQ0s7CisJCQkJCW4tPnJlbGF0aW9uID0gJDM7CisJCQkJCW4tPmluZGV4bmFtZSA9 ICQ2OworCQkJCQluLT51c2luZ2luZGV4ID0gdHJ1ZTsKKwkJCQkJbi0+cGFyYW1zID0gJDI7CisJ CQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IFJFUEFDSyBvcHRfdXRpbGl0eV9vcHRp b25fbGlzdCBxdWFsaWZpZWRfbmFtZSBvcHRfdXNpbmdpbmRleAorCQkJCXsKKwkJCQkJUmVwYWNr U3RtdCAqbiA9IG1ha2VOb2RlKFJlcGFja1N0bXQpOworCisJCQkJCW4tPmNvbW1hbmQgPSBSRVBB Q0tfQ09NTUFORF9SRVBBQ0s7CisJCQkJCW4tPnJlbGF0aW9uID0gJDM7CisJCQkJCW4tPmluZGV4 bmFtZSA9IE5VTEw7CisJCQkJCW4tPnVzaW5naW5kZXggPSAkNDsKKwkJCQkJbi0+cGFyYW1zID0g JDI7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IFJFUEFDSyAnKCcgdXRpbGl0 eV9vcHRpb25fbGlzdCAnKScKKwkJCQl7CisJCQkJCVJlcGFja1N0bXQgKm4gPSBtYWtlTm9kZShS ZXBhY2tTdG10KTsKKworCQkJCQluLT5jb21tYW5kID0gUkVQQUNLX0NPTU1BTkRfUkVQQUNLOwor CQkJCQluLT5yZWxhdGlvbiA9IE5VTEw7CisJCQkJCW4tPmluZGV4bmFtZSA9IE5VTEw7CisJCQkJ CW4tPnVzaW5naW5kZXggPSBmYWxzZTsKKwkJCQkJbi0+cGFyYW1zID0gJDM7CisJCQkJCSQkID0g KE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IFJFUEFDSyBvcHRfdXNpbmdpbmRleAorCQkJCXsKKwkJ CQkJUmVwYWNrU3RtdCAqbiA9IG1ha2VOb2RlKFJlcGFja1N0bXQpOworCisJCQkJCW4tPmNvbW1h bmQgPSBSRVBBQ0tfQ09NTUFORF9SRVBBQ0s7CisJCQkJCW4tPnJlbGF0aW9uID0gTlVMTDsKKwkJ CQkJbi0+aW5kZXhuYW1lID0gTlVMTDsKKwkJCQkJbi0+dXNpbmdpbmRleCA9ICQyOworCQkJCQlu LT5wYXJhbXMgPSBOSUw7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CisJCQl8IENMVVNU RVIgJygnIHV0aWxpdHlfb3B0aW9uX2xpc3QgJyknIHF1YWxpZmllZF9uYW1lIGNsdXN0ZXJfaW5k ZXhfc3BlY2lmaWNhdGlvbgorCQkJCXsKKwkJCQkJUmVwYWNrU3RtdCAqbiA9IG1ha2VOb2RlKFJl cGFja1N0bXQpOworCisJCQkJCW4tPmNvbW1hbmQgPSBSRVBBQ0tfQ09NTUFORF9DTFVTVEVSOwog CQkJCQluLT5yZWxhdGlvbiA9ICQ1OwogCQkJCQluLT5pbmRleG5hbWUgPSAkNjsKKwkJCQkJbi0+ dXNpbmdpbmRleCA9IHRydWU7CiAJCQkJCW4tPnBhcmFtcyA9ICQzOwogCQkJCQkkJCA9IChOb2Rl ICopIG47CiAJCQkJfQogCQkJfCBDTFVTVEVSIG9wdF91dGlsaXR5X29wdGlvbl9saXN0CiAJCQkJ ewotCQkJCQlDbHVzdGVyU3RtdCAqbiA9IG1ha2VOb2RlKENsdXN0ZXJTdG10KTsKKwkJCQkJUmVw YWNrU3RtdCAqbiA9IG1ha2VOb2RlKFJlcGFja1N0bXQpOwogCisJCQkJCW4tPmNvbW1hbmQgPSBS RVBBQ0tfQ09NTUFORF9DTFVTVEVSOwogCQkJCQluLT5yZWxhdGlvbiA9IE5VTEw7CiAJCQkJCW4t PmluZGV4bmFtZSA9IE5VTEw7CisJCQkJCW4tPnVzaW5naW5kZXggPSB0cnVlOwogCQkJCQluLT5w YXJhbXMgPSAkMjsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogCQkJCX0KIAkJCS8qIHVucGFyZW50 aGVzaXplZCBWRVJCT1NFIGtlcHQgZm9yIHByZS0xNCBjb21wYXRpYmlsaXR5ICovCiAJCQl8IENM VVNURVIgb3B0X3ZlcmJvc2UgcXVhbGlmaWVkX25hbWUgY2x1c3Rlcl9pbmRleF9zcGVjaWZpY2F0 aW9uCiAJCQkJewotCQkJCQlDbHVzdGVyU3RtdCAqbiA9IG1ha2VOb2RlKENsdXN0ZXJTdG10KTsK KwkJCQkJUmVwYWNrU3RtdCAqbiA9IG1ha2VOb2RlKFJlcGFja1N0bXQpOwogCisJCQkJCW4tPmNv bW1hbmQgPSBSRVBBQ0tfQ09NTUFORF9DTFVTVEVSOwogCQkJCQluLT5yZWxhdGlvbiA9ICQzOwog CQkJCQluLT5pbmRleG5hbWUgPSAkNDsKKwkJCQkJbi0+dXNpbmdpbmRleCA9IHRydWU7CiAJCQkJ CWlmICgkMikKIAkJCQkJCW4tPnBhcmFtcyA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInZlcmJv c2UiLCBOVUxMLCBAMikpOwogCQkJCQkkJCA9IChOb2RlICopIG47CkBAIC0xMTk1MSwyMCArMTIw MDksMjQgQEAgQ2x1c3RlclN0bXQ6CiAJCQkvKiB1bnBhcmVudGhlc2l6ZWQgVkVSQk9TRSBrZXB0 IGZvciBwcmUtMTcgY29tcGF0aWJpbGl0eSAqLwogCQkJfCBDTFVTVEVSIFZFUkJPU0UKIAkJCQl7 Ci0JCQkJCUNsdXN0ZXJTdG10ICpuID0gbWFrZU5vZGUoQ2x1c3RlclN0bXQpOworCQkJCQlSZXBh Y2tTdG10ICpuID0gbWFrZU5vZGUoUmVwYWNrU3RtdCk7CiAKKwkJCQkJbi0+Y29tbWFuZCA9IFJF UEFDS19DT01NQU5EX0NMVVNURVI7CiAJCQkJCW4tPnJlbGF0aW9uID0gTlVMTDsKIAkJCQkJbi0+ aW5kZXhuYW1lID0gTlVMTDsKKwkJCQkJbi0+dXNpbmdpbmRleCA9IHRydWU7CiAJCQkJCW4tPnBh cmFtcyA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInZlcmJvc2UiLCBOVUxMLCBAMikpOwogCQkJ CQkkJCA9IChOb2RlICopIG47CiAJCQkJfQogCQkJLyoga2VwdCBmb3IgcHJlLTguMyBjb21wYXRp YmlsaXR5ICovCiAJCQl8IENMVVNURVIgb3B0X3ZlcmJvc2UgbmFtZSBPTiBxdWFsaWZpZWRfbmFt ZQogCQkJCXsKLQkJCQkJQ2x1c3RlclN0bXQgKm4gPSBtYWtlTm9kZShDbHVzdGVyU3RtdCk7CisJ CQkJCVJlcGFja1N0bXQgKm4gPSBtYWtlTm9kZShSZXBhY2tTdG10KTsKIAorCQkJCQluLT5jb21t YW5kID0gUkVQQUNLX0NPTU1BTkRfQ0xVU1RFUjsKIAkJCQkJbi0+cmVsYXRpb24gPSAkNTsKIAkJ CQkJbi0+aW5kZXhuYW1lID0gJDM7CisJCQkJCW4tPnVzaW5naW5kZXggPSB0cnVlOwogCQkJCQlp ZiAoJDIpCiAJCQkJCQluLT5wYXJhbXMgPSBsaXN0X21ha2UxKG1ha2VEZWZFbGVtKCJ2ZXJib3Nl IiwgTlVMTCwgQDIpKTsKIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwpAQCAtMTc5NjAsNiArMTgwMjIs NyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFJFTEFUSVZFX1AKIAkJCXwgUkVMRUFTRQog CQkJfCBSRU5BTUUKKwkJCXwgUkVQQUNLCiAJCQl8IFJFUEVBVEFCTEUKIAkJCXwgUkVQTEFDRQog CQkJfCBSRVBMSUNBCkBAIC0xODU5Miw2ICsxODY1NSw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoK IAkJCXwgUkVMQVRJVkVfUAogCQkJfCBSRUxFQVNFCiAJCQl8IFJFTkFNRQorCQkJfCBSRVBBQ0sK IAkJCXwgUkVQRUFUQUJMRQogCQkJfCBSRVBMQUNFCiAJCQl8IFJFUExJQ0EKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMK aW5kZXggNWY0NDJiYzNiZDQuLmNmNmRiNTgxMDA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMjc3LDkg KzI3Nyw5IEBAIENsYXNzaWZ5VXRpbGl0eUNvbW1hbmRBc1JlYWRPbmx5KE5vZGUgKnBhcnNldHJl ZSkKIAkJCQlyZXR1cm4gQ09NTUFORF9PS19JTl9SRUNPVkVSWSB8IENPTU1BTkRfT0tfSU5fUkVB RF9PTkxZX1RYTjsKIAkJCX0KIAotCQljYXNlIFRfQ2x1c3RlclN0bXQ6CiAJCWNhc2UgVF9SZWlu ZGV4U3RtdDoKIAkJY2FzZSBUX1ZhY3V1bVN0bXQ6CisJCWNhc2UgVF9SZXBhY2tTdG10OgogCQkJ ewogCQkJCS8qCiAJCQkJICogVGhlc2UgY29tbWFuZHMgd3JpdGUgV0FMLCBzbyB0aGV5J3JlIG5v dCBzdHJpY3RseQpAQCAtODU0LDE0ICs4NTQsMTQgQEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHko UGxhbm5lZFN0bXQgKnBzdG10LAogCQkJRXhlY3V0ZUNhbGxTdG10KGNhc3ROb2RlKENhbGxTdG10 LCBwYXJzZXRyZWUpLCBwYXJhbXMsIGlzQXRvbWljQ29udGV4dCwgZGVzdCk7CiAJCQlicmVhazsK IAotCQljYXNlIFRfQ2x1c3RlclN0bXQ6Ci0JCQljbHVzdGVyKHBzdGF0ZSwgKENsdXN0ZXJTdG10 ICopIHBhcnNldHJlZSwgaXNUb3BMZXZlbCk7Ci0JCQlicmVhazsKLQogCQljYXNlIFRfVmFjdXVt U3RtdDoKIAkJCUV4ZWNWYWN1dW0ocHN0YXRlLCAoVmFjdXVtU3RtdCAqKSBwYXJzZXRyZWUsIGlz VG9wTGV2ZWwpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1JlcGFja1N0bXQ6CisJCQlFeGVjUmVw YWNrKHBzdGF0ZSwgKFJlcGFja1N0bXQgKikgcGFyc2V0cmVlLCBpc1RvcExldmVsKTsKKwkJCWJy ZWFrOworCiAJCWNhc2UgVF9FeHBsYWluU3RtdDoKIAkJCUV4cGxhaW5RdWVyeShwc3RhdGUsIChF eHBsYWluU3RtdCAqKSBwYXJzZXRyZWUsIHBhcmFtcywgZGVzdCk7CiAJCQlicmVhazsKQEAgLTI4 NTEsMTAgKzI4NTEsNiBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkKIAkJCXRh ZyA9IENNRFRBR19DQUxMOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBUX0NsdXN0ZXJTdG10OgotCQkJ dGFnID0gQ01EVEFHX0NMVVNURVI7Ci0JCQlicmVhazsKLQogCQljYXNlIFRfVmFjdXVtU3RtdDoK IAkJCWlmICgoKFZhY3V1bVN0bXQgKikgcGFyc2V0cmVlKS0+aXNfdmFjdXVtY21kKQogCQkJCXRh ZyA9IENNRFRBR19WQUNVVU07CkBAIC0yODYyLDYgKzI4NTgsMTAgQEAgQ3JlYXRlQ29tbWFuZFRh ZyhOb2RlICpwYXJzZXRyZWUpCiAJCQkJdGFnID0gQ01EVEFHX0FOQUxZWkU7CiAJCQlicmVhazsK IAorCQljYXNlIFRfUmVwYWNrU3RtdDoKKwkJCXRhZyA9IENNRFRBR19SRVBBQ0s7CisJCQlicmVh azsKKwogCQljYXNlIFRfRXhwbGFpblN0bXQ6CiAJCQl0YWcgPSBDTURUQUdfRVhQTEFJTjsKIAkJ CWJyZWFrOwpAQCAtMzQ5OSw3ICszNDk5LDcgQEAgR2V0Q29tbWFuZExvZ0xldmVsKE5vZGUgKnBh cnNldHJlZSkKIAkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBUX0Ns dXN0ZXJTdG10OgorCQljYXNlIFRfUmVwYWNrU3RtdDoKIAkJCWxldiA9IExPR1NUTVRfRERMOwog CQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5j cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKaW5kZXggYzc1NmMyYmVi YWEuLmExZTEwZThjMmY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0 ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwpAQCAtMjY4 LDYgKzI2OCw4IEBAIHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oUEdfRlVOQ1RJT05fQVJHUykK IAkJY21kdHlwZSA9IFBST0dSRVNTX0NPTU1BTkRfQU5BTFlaRTsKIAllbHNlIGlmIChwZ19zdHJj YXNlY21wKGNtZCwgIkNMVVNURVIiKSA9PSAwKQogCQljbWR0eXBlID0gUFJPR1JFU1NfQ09NTUFO RF9DTFVTVEVSOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoY21kLCAiUkVQQUNLIikgPT0gMCkK KwkJY21kdHlwZSA9IFBST0dSRVNTX0NPTU1BTkRfUkVQQUNLOwogCWVsc2UgaWYgKHBnX3N0cmNh c2VjbXAoY21kLCAiQ1JFQVRFIElOREVYIikgPT0gMCkKIAkJY21kdHlwZSA9IFBST0dSRVNTX0NP TU1BTkRfQ1JFQVRFX0lOREVYOwogCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoY21kLCAiQkFTRUJB Q0tVUCIpID09IDApCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMg Yi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggOGIxMGYyMzEzZjMuLjU5ZmY2 ZTA5MjNiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCBzdGF0 aWMgY29uc3QgY2hhciAqY29uc3Qgc3FsX2NvbW1hbmRzW10gPSB7CiAJIkRFTEVURSBGUk9NIiwg IkRJU0NBUkQiLCAiRE8iLCAiRFJPUCIsICJFTkQiLCAiRVhFQ1VURSIsICJFWFBMQUlOIiwKIAki RkVUQ0giLCAiR1JBTlQiLCAiSU1QT1JUIEZPUkVJR04gU0NIRU1BIiwgIklOU0VSVCBJTlRPIiwg IkxJU1RFTiIsICJMT0FEIiwgIkxPQ0siLAogCSJNRVJHRSBJTlRPIiwgIk1PVkUiLCAiTk9USUZZ IiwgIlBSRVBBUkUiLAotCSJSRUFTU0lHTiIsICJSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXIiwg IlJFSU5ERVgiLCAiUkVMRUFTRSIsCisJIlJFQVNTSUdOIiwgIlJFRlJFU0ggTUFURVJJQUxJWkVE IFZJRVciLCAiUkVJTkRFWCIsICJSRUxFQVNFIiwgIlJFUEFDSyIsCiAJIlJFU0VUIiwgIlJFVk9L RSIsICJST0xMQkFDSyIsCiAJIlNBVkVQT0lOVCIsICJTRUNVUklUWSBMQUJFTCIsICJTRUxFQ1Qi LCAiU0VUIiwgIlNIT1ciLCAiU1RBUlQiLAogCSJUQUJMRSIsICJUUlVOQ0FURSIsICJVTkxJU1RF TiIsICJVUERBVEUiLCAiVkFDVVVNIiwgIlZBTFVFUyIsICJXSVRIIiwKQEAgLTQ5OTcsNiArNDk5 NywzNyBAQCBtYXRjaF9wcmV2aW91c193b3JkcyhpbnQgcGF0dGVybl9pZCwKIAkJCUNPTVBMRVRF X1dJVEhfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2ZfdGFibGVzcGFjZXMpOwogCX0KIAorLyogUkVQ QUNLICovCisJZWxzZSBpZiAoTWF0Y2hlcygiUkVQQUNLIikpCisJCUNPTVBMRVRFX1dJVEhfU0NI RU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX2NsdXN0ZXJhYmxlcyk7CisJZWxzZSBpZiAoTWF0 Y2hlcygiUkVQQUNLIiwgIigqKSIpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVy eV9mb3JfbGlzdF9vZl9jbHVzdGVyYWJsZXMpOworCS8qIElmIHdlIGhhdmUgUkVQQUNLIDxzdGg+ LCB0aGVuIGFkZCAiVVNJTkcgSU5ERVgiICovCisJZWxzZSBpZiAoTWF0Y2hlcygiUkVQQUNLIiwg TWF0Y2hBbnlFeGNlcHQoIigiKSkpCisJCUNPTVBMRVRFX1dJVEgoIlVTSU5HIElOREVYIik7CisJ LyogSWYgd2UgaGF2ZSBSRVBBQ0sgKCopIDxzdGg+LCB0aGVuIGFkZCAiVVNJTkcgSU5ERVgiICov CisJZWxzZSBpZiAoTWF0Y2hlcygiUkVQQUNLIiwgIigqKSIsIE1hdGNoQW55KSkKKwkJQ09NUExF VEVfV0lUSCgiVVNJTkcgSU5ERVgiKTsKKwkvKiBJZiB3ZSBoYXZlIFJFUEFDSyA8c3RoPiBVU0lO RywgdGhlbiBhZGQgdGhlIGluZGV4IGFzIHdlbGwgKi8KKwllbHNlIGlmIChNYXRjaGVzKCJSRVBB Q0siLCBNYXRjaEFueSwgIlVTSU5HIiwgIklOREVYIikpCisJeworCQlzZXRfY29tcGxldGlvbl9y ZWZlcmVuY2UocHJldjNfd2QpOworCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9m b3JfaW5kZXhfb2ZfdGFibGUpOworCX0KKwllbHNlIGlmIChIZWFkTWF0Y2hlcygiUkVQQUNLIiwg IigqIikgJiYKKwkJCSAhSGVhZE1hdGNoZXMoIlJFUEFDSyIsICIoKikiKSkKKwl7CisJCS8qCisJ CSAqIFRoaXMgZmlyZXMgaWYgd2UncmUgaW4gYW4gdW5maW5pc2hlZCBwYXJlbnRoZXNpemVkIG9w dGlvbiBsaXN0LgorCQkgKiBnZXRfcHJldmlvdXNfd29yZHMgdHJlYXRzIGEgY29tcGxldGVkIHBh cmVudGhlc2l6ZWQgb3B0aW9uIGxpc3QgYXMKKwkJICogb25lIHdvcmQsIHNvIHRoZSBhYm92ZSB0 ZXN0IGlzIGNvcnJlY3QuCisJCSAqLworCQlpZiAoZW5kc193aXRoKHByZXZfd2QsICcoJykgfHwg ZW5kc193aXRoKHByZXZfd2QsICcsJykpCisJCQlDT01QTEVURV9XSVRIKCJWRVJCT1NFIik7CisJ CWVsc2UgaWYgKFRhaWxNYXRjaGVzKCJWRVJCT1NFIikpCisJCQlDT01QTEVURV9XSVRIKCJPTiIs ICJPRkYiKTsKKwl9CisKIC8qIFNFQ1VSSVRZIExBQkVMICovCiAJZWxzZSBpZiAoTWF0Y2hlcygi U0VDVVJJVFkiKSkKIAkJQ09NUExFVEVfV0lUSCgiTEFCRUwiKTsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vc2NyaXB0cy9NYWtlZmlsZSBiL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZQppbmRleCAwMTlj YTA2NDU1ZC4uZjBjMWJkNDE3NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmls ZQorKysgYi9zcmMvYmluL3NjcmlwdHMvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAgc3ViZGly ID0gc3JjL2Jpbi9zY3JpcHRzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1QUk9HUkFNUyA9IGNyZWF0ZWRiIGNy ZWF0ZXVzZXIgZHJvcGRiIGRyb3B1c2VyIGNsdXN0ZXJkYiB2YWN1dW1kYiByZWluZGV4ZGIgcGdf aXNyZWFkeQorUFJPR1JBTVMgPSBjcmVhdGVkYiBjcmVhdGV1c2VyIGRyb3BkYiBkcm9wdXNlciBj bHVzdGVyZGIgdmFjdXVtZGIgcmVpbmRleGRiIHBnX2lzcmVhZHkgcGdfcmVwYWNrZGIKIAogb3Zl cnJpZGUgQ1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBGTEFHUykKIExERkxBR1Nf SU5URVJOQUwgKz0gLUwkKHRvcF9idWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQo bGlicHFfcGdwb3J0KQpAQCAtMzEsNiArMzEsNyBAQCBjbHVzdGVyZGI6IGNsdXN0ZXJkYi5vIGNv bW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdQog dmFjdXVtZGI6IHZhY3V1bWRiLm8gdmFjdXVtaW5nLm8gY29tbW9uLm8gJChXSU4zMlJFUykgfCBz dWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiByZWlu ZGV4ZGI6IHJlaW5kZXhkYi5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBz dWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogcGdfaXNyZWFkeTogcGdfaXNy ZWFkeS5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBn cG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscworcGdfcmVwYWNrZGI6IHBnX3JlcGFja2RiLm8gdmFj dXVtaW5nLm8gY29tbW9uLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGli cGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwog CSQoSU5TVEFMTF9QUk9HUkFNKSBjcmVhdGVkYiQoWCkgICAnJChERVNURElSKSQoYmluZGlyKScv Y3JlYXRlZGIkKFgpCkBAIC00MSw2ICs0Miw3IEBAIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwog CSQoSU5TVEFMTF9QUk9HUkFNKSB2YWN1dW1kYiQoWCkgICAnJChERVNURElSKSQoYmluZGlyKScv dmFjdXVtZGIkKFgpCiAJJChJTlNUQUxMX1BST0dSQU0pIHJlaW5kZXhkYiQoWCkgICckKERFU1RE SVIpJChiaW5kaXIpJy9yZWluZGV4ZGIkKFgpCiAJJChJTlNUQUxMX1BST0dSQU0pIHBnX2lzcmVh ZHkkKFgpICckKERFU1RESVIpJChiaW5kaXIpJy9wZ19pc3JlYWR5JChYKQorCSQoSU5TVEFMTF9Q Uk9HUkFNKSBwZ19yZXBhY2tkYiQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX3JlcGFja2Ri JChYKQogCiBpbnN0YWxsZGlyczoKIAkkKE1LRElSX1ApICckKERFU1RESVIpJChiaW5kaXIpJwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9zY3JpcHRz L21lc29uLmJ1aWxkCmluZGV4IGE0ZmVkNTlkMWM5Li4xODQxMGZiODBkZCAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9zY3JpcHRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vc2NyaXB0cy9tZXNvbi5i dWlsZApAQCAtNDIsNiArNDIsNyBAQCB2YWN1dW1pbmdfY29tbW9uID0gc3RhdGljX2xpYnJhcnko J2xpYnZhY3V1bWluZ19jb21tb24nLAogCiBiaW5hcmllcyA9IFsKICAgJ3ZhY3V1bWRiJywKKyAg J3BnX3JlcGFja2RiJwogXQogZm9yZWFjaCBiaW5hcnkgOiBiaW5hcmllcwogICBiaW5hcnlfc291 cmNlcyA9IGZpbGVzKCdAMEAuYycuZm9ybWF0KGJpbmFyeSkpCkBAIC04MCw2ICs4MSw3IEBAIHRl c3RzICs9IHsKICAgICAgICd0LzEwMF92YWN1dW1kYi5wbCcsCiAgICAgICAndC8xMDFfdmFjdXVt ZGJfYWxsLnBsJywKICAgICAgICd0LzEwMl92YWN1dW1kYl9zdGFnZXMucGwnLAorICAgICAgJ3Qv MTAzX3JlcGFja2RiLnBsJywKICAgICAgICd0LzIwMF9jb25uc3RyLnBsJywKICAgICBdLAogICB9 LApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3BnX3JlcGFja2RiLmMgYi9zcmMvYmluL3Nj cmlwdHMvcGdfcmVwYWNrZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMjMzMjYzNzJhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3NjcmlwdHMvcGdfcmVw YWNrZGIuYwpAQCAtMCwwICsxLDIyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdf cmVwYWNrZGIKKyAqCQlBbiB1dGlsaXR5IHRvIHJ1biBSRVBBQ0sKKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogRklYTUU6IHRoaXMgaXMgbWlzc2luZyBhIHdheSB0 byBzcGVjaWZ5IHRoZSBpbmRleCB0byB1c2UgdG8gcmVwYWNrIG9uZQorICogdGFibGUsIG9yIHdo ZXRoZXIgdG8gcGFzcyBhIFdJVEggSU5ERVggY2xhdXNlIHdoZW4gbXVsdGlwbGUgdGFibGVzIGFy ZQorICogdXNlZC4gIFNvbWV0aGluZyBsaWtlIC0taW5kZXhbPWluZGV4bmFtZV0uICBBZGRpbmcg dGhhdCBibGVlZHMgaW50bworICogdmFjdXVtaW5nLmMgYXMgd2VsbC4KKyAqCisgKiBzcmMvYmlu L3NjcmlwdHMvcGdfcmVwYWNrZGIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp bmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRl ICJjb21tb24uaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImZlX3V0 aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgInZhY3V1bWluZy5oIgorCitzdGF0aWMgdm9p ZCBoZWxwKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKK3ZvaWQJCWNoZWNrX29iamZpbHRlcih2b2lk KTsKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RhdGljIHN0cnVj dCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJCXsiaG9zdCIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAnaCd9LAorCQl7InBvcnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwK KwkJeyJ1c2VybmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnVSd9LAorCQl7Im5vLXBh c3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICd3J30sCisJCXsicGFzc3dvcmQiLCBub19hcmd1 bWVudCwgTlVMTCwgJ1cnfSwKKwkJeyJlY2hvIiwgbm9fYXJndW1lbnQsIE5VTEwsICdlJ30sCisJ CXsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3EnfSwKKwkJeyJkYm5hbWUiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ2QnfSwKKwkJeyJhbGwiLCBub19hcmd1bWVudCwgTlVMTCwgJ2En fSwKKwkJeyJ0YWJsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndCd9LAorCQl7InZlcmJv c2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKwkJeyJqb2JzIiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICdqJ30sCisJCXsic2NoZW1hIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdu J30sCisJCXsiZXhjbHVkZS1zY2hlbWEiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ04nfSwK KwkJeyJtYWludGVuYW5jZS1kYiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAyfSwKKwkJe05V TEwsIDAsIE5VTEwsIDB9CisJfTsKKworCWNvbnN0IGNoYXIgKnByb2duYW1lOworCWludAkJCW9w dGluZGV4OworCWludAkJCWM7CisJY29uc3QgY2hhciAqZGJuYW1lID0gTlVMTDsKKwljb25zdCBj aGFyICptYWludGVuYW5jZV9kYiA9IE5VTEw7CisJQ29ublBhcmFtcwljcGFyYW1zOworCWJvb2wJ CWVjaG8gPSBmYWxzZTsKKwlib29sCQlxdWlldCA9IGZhbHNlOworCXZhY3V1bWluZ09wdGlvbnMg dmFjb3B0czsKKwlTaW1wbGVTdHJpbmdMaXN0IG9iamVjdHMgPSB7TlVMTCwgTlVMTH07CisJaW50 CQkJY29uY3VycmVudENvbnMgPSAxOworCWludAkJCXRibF9jb3VudCA9IDA7CisKKwkvKiBpbml0 aWFsaXplIG9wdGlvbnMgKi8KKwltZW1zZXQoJnZhY29wdHMsIDAsIHNpemVvZih2YWNvcHRzKSk7 CisJdmFjb3B0cy5tb2RlID0gTU9ERV9SRVBBQ0s7CisKKwkvKiB0aGUgc2FtZSBmb3IgY29ubmVj dGlvbiBwYXJhbWV0ZXJzICovCisJbWVtc2V0KCZjcGFyYW1zLCAwLCBzaXplb2YoY3BhcmFtcykp OworCWNwYXJhbXMucHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7CisKKwlwZ19sb2dnaW5n X2luaXQoYXJndlswXSk7CisJcHJvZ25hbWUgPSBnZXRfcHJvZ25hbWUoYXJndlswXSk7CisJc2V0 X3BnbG9jYWxlX3Bnc2VydmljZShhcmd2WzBdLCBQR19URVhURE9NQUlOKCJwZ3NjcmlwdHMiKSk7 CisKKwloYW5kbGVfaGVscF92ZXJzaW9uX29wdHMoYXJnYywgYXJndiwgcHJvZ25hbWUsIGhlbHAp OworCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFkOmVoOmo6bjpOOnA6 cXQ6VTp2d1ciLAorCQkJCQkJCWxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJewor CQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ2EnOgorCQkJCW9iamZpbHRlciB8PSBPQkpGSUxU RVJfQUxMX0RCUzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2QnOgorCQkJCW9iamZpbHRlciB8PSBP QkpGSUxURVJfREFUQUJBU0U7CisJCQkJZGJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJ YnJlYWs7CisJCQljYXNlICdlJzoKKwkJCQllY2hvID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ2gnOgorCQkJCWNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJYnJl YWs7CisJCQljYXNlICdqJzoKKwkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLWov LS1qb2JzIiwgMSwgSU5UX01BWCwKKwkJCQkJCQkJCSAgJmNvbmN1cnJlbnRDb25zKSkKKwkJCQkJ ZXhpdCgxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCW9iamZpbHRlciB8PSBPQkpG SUxURVJfU0NIRU1BOworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJm9iamVjdHMsIG9w dGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdOJzoKKwkJCQlvYmpmaWx0ZXIgfD0gT0JKRklM VEVSX1NDSEVNQV9FWENMVURFOworCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJm9iamVj dHMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdwJzoKKwkJCQljcGFyYW1zLnBncG9y dCA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAncSc6CisJCQkJcXVp ZXQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJY2FzZSAndCc6CisJCQkJb2JqZmlsdGVyIHw9IE9C SkZJTFRFUl9UQUJMRTsKKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZvYmplY3RzLCBv cHRhcmcpOworCQkJCXRibF9jb3VudCsrOworCQkJCWJyZWFrOworCQkJY2FzZSAnVSc6CisJCQkJ Y3BhcmFtcy5wZ3VzZXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug J3YnOgorCQkJCXZhY29wdHMudmVyYm9zZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQljYXNlICd3 JzoKKwkJCQljcGFyYW1zLnByb21wdF9wYXNzd29yZCA9IFRSSV9OTzsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ1cnOgorCQkJCWNwYXJhbXMucHJvbXB0X3Bhc3N3b3JkID0gVFJJX1lFUzsKKwkJCQli cmVhazsKKwkJCWNhc2UgMjoKKwkJCQltYWludGVuYW5jZV9kYiA9IHBnX3N0cmR1cChvcHRhcmcp OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVt aXR0ZWQgYSBjb21wbGFpbnQgKi8KKwkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1o ZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJCWV4aXQoMSk7CisJ CX0KKwl9CisKKwkvKgorCSAqIE5vbi1vcHRpb24gYXJndW1lbnQgc3BlY2lmaWVzIGRhdGFiYXNl IG5hbWUgYXMgbG9uZyBhcyBpdCB3YXNuJ3QKKwkgKiBhbHJlYWR5IHNwZWNpZmllZCB3aXRoIC1k IC8gLS1kYm5hbWUKKwkgKi8KKwlpZiAob3B0aW5kIDwgYXJnYyAmJiBkYm5hbWUgPT0gTlVMTCkK Kwl7CisJCW9iamZpbHRlciB8PSBPQkpGSUxURVJfREFUQUJBU0U7CisJCWRibmFtZSA9IGFyZ3Zb b3B0aW5kXTsKKwkJb3B0aW5kKys7CisJfQorCisJaWYgKG9wdGluZCA8IGFyZ2MpCisJeworCQlw Z19sb2dfZXJyb3IoInRvbyBtYW55IGNvbW1hbmQtbGluZSBhcmd1bWVudHMgKGZpcnN0IGlzIFwi JXNcIikiLAorCQkJCQkgYXJndltvcHRpbmRdKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBc IiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdCgx KTsKKwl9CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBjb21iaW5hdGlvbiBvZiBmaWx0ZXJzIHNw ZWNpZmllZCBpbiB0aGUgY29tbWFuZC1saW5lCisJICogb3B0aW9ucy4KKwkgKi8KKwljaGVja19v YmpmaWx0ZXIoKTsKKworCXZhY3V1bWluZ19tYWluKCZjcGFyYW1zLCBkYm5hbWUsIG1haW50ZW5h bmNlX2RiLCAmdmFjb3B0cywgJm9iamVjdHMsCisJCQkJICAgZmFsc2UsIHRibF9jb3VudCwgY29u Y3VycmVudENvbnMsCisJCQkJICAgcHJvZ25hbWUsIGVjaG8sIHF1aWV0KTsKKwlleGl0KDApOwor fQorCisvKgorICogVmVyaWZ5IHRoYXQgdGhlIGZpbHRlcnMgdXNlZCBhdCBjb21tYW5kIGxpbmUg YXJlIGNvbXBhdGlibGUuCisgKi8KK3ZvaWQKK2NoZWNrX29iamZpbHRlcih2b2lkKQoreworCWlm ICgob2JqZmlsdGVyICYgT0JKRklMVEVSX0FMTF9EQlMpICYmCisJCShvYmpmaWx0ZXIgJiBPQkpG SUxURVJfREFUQUJBU0UpKQorCQlwZ19mYXRhbCgiY2Fubm90IHJlcGFjayBhbGwgZGF0YWJhc2Vz IGFuZCBhIHNwZWNpZmljIG9uZSBhdCB0aGUgc2FtZSB0aW1lIik7CisKKwlpZiAoKG9iamZpbHRl ciAmIE9CSkZJTFRFUl9UQUJMRSkgJiYKKwkJKG9iamZpbHRlciAmIE9CSkZJTFRFUl9TQ0hFTUEp KQorCQlwZ19mYXRhbCgiY2Fubm90IHJlcGFjayBhbGwgdGFibGVzIGluIHNjaGVtYShzKSBhbmQg c3BlY2lmaWMgdGFibGUocykgYXQgdGhlIHNhbWUgdGltZSIpOworCisJaWYgKChvYmpmaWx0ZXIg JiBPQkpGSUxURVJfVEFCTEUpICYmCisJCShvYmpmaWx0ZXIgJiBPQkpGSUxURVJfU0NIRU1BX0VY Q0xVREUpKQorCQlwZ19mYXRhbCgiY2Fubm90IHJlcGFjayBzcGVjaWZpYyB0YWJsZShzKSBhbmQg ZXhjbHVkZSBzY2hlbWEocykgYXQgdGhlIHNhbWUgdGltZSIpOworCisJaWYgKChvYmpmaWx0ZXIg JiBPQkpGSUxURVJfU0NIRU1BKSAmJgorCQkob2JqZmlsdGVyICYgT0JKRklMVEVSX1NDSEVNQV9F WENMVURFKSkKKwkJcGdfZmF0YWwoImNhbm5vdCByZXBhY2sgYWxsIHRhYmxlcyBpbiBzY2hlbWEo cykgYW5kIGV4Y2x1ZGUgc2NoZW1hKHMpIGF0IHRoZSBzYW1lIHRpbWUiKTsKK30KKworc3RhdGlj IHZvaWQKK2hlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJcHJpbnRmKF8oIiVzIHJlcGFj a3MgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlLlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCJV c2FnZTpcbiIpKTsKKwlwcmludGYoXygiICAlcyBbT1BUSU9OXS4uLiBbREJOQU1FXVxuIiksIHBy b2duYW1lKTsKKwlwcmludGYoXygiXG5PcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgIC1hLCAt LWFsbCAgICAgICAgICAgICAgICAgICAgICAgcmVwYWNrIGFsbCBkYXRhYmFzZXNcbiIpKTsKKwlw cmludGYoXygiICAtZCwgLS1kYm5hbWU9REJOQU1FICAgICAgICAgICAgIGRhdGFiYXNlIHRvIHJl cGFja1xuIikpOworCXByaW50ZihfKCIgIC1lLCAtLWVjaG8gICAgICAgICAgICAgICAgICAgICAg c2hvdyB0aGUgY29tbWFuZHMgYmVpbmcgc2VudCB0byB0aGUgc2VydmVyXG4iKSk7CisJcHJpbnRm KF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IGNvbmN1 cnJlbnQgY29ubmVjdGlvbnMgdG8gcmVwYWNrXG4iKSk7CisJcHJpbnRmKF8oIiAgLW4sIC0tc2No ZW1hPVNDSEVNQSAgICAgICAgICAgICByZXBhY2sgdGFibGVzIGluIHRoZSBzcGVjaWZpZWQgc2No ZW1hKHMpIG9ubHlcbiIpKTsKKwlwcmludGYoXygiICAtTiwgLS1leGNsdWRlLXNjaGVtYT1TQ0hF TUEgICAgIGRvIG5vdCByZXBhY2sgdGFibGVzIGluIHRoZSBzcGVjaWZpZWQgc2NoZW1hKHMpXG4i KSk7CisJcHJpbnRmKF8oIiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgICAgICBkb24ndCB3 cml0ZSBhbnkgbWVzc2FnZXNcbiIpKTsKKwlwcmludGYoXygiICAtdCwgLS10YWJsZT0nVEFCTEUn ICAgICAgICAgICAgIHJlcGFjayBzcGVjaWZpYyB0YWJsZShzKSBvbmx5XG4iKSk7CisJcHJpbnRm KF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgICB3cml0ZSBhIGxvdCBvZiBvdXRw dXRcbiIpKTsKKwlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgIG91 dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiICAt PywgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRc biIpKTsKKwlwcmludGYoXygiXG5Db25uZWN0aW9uIG9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8o IiAgLWgsIC0taG9zdD1IT1NUTkFNRSAgICAgICBkYXRhYmFzZSBzZXJ2ZXIgaG9zdCBvciBzb2Nr ZXQgZGlyZWN0b3J5XG4iKSk7CisJcHJpbnRmKF8oIiAgLXAsIC0tcG9ydD1QT1JUICAgICAgICAg ICBkYXRhYmFzZSBzZXJ2ZXIgcG9ydFxuIikpOworCXByaW50ZihfKCIgIC1VLCAtLXVzZXJuYW1l PVVTRVJOQU1FICAgdXNlciBuYW1lIHRvIGNvbm5lY3QgYXNcbiIpKTsKKwlwcmludGYoXygiICAt dywgLS1uby1wYXNzd29yZCAgICAgICAgIG5ldmVyIHByb21wdCBmb3IgcGFzc3dvcmRcbiIpKTsK KwlwcmludGYoXygiICAtVywgLS1wYXNzd29yZCAgICAgICAgICAgIGZvcmNlIHBhc3N3b3JkIHBy b21wdFxuIikpOworCXByaW50ZihfKCIgIC0tbWFpbnRlbmFuY2UtZGI9REJOQU1FICAgYWx0ZXJu YXRlIG1haW50ZW5hbmNlIGRhdGFiYXNlXG4iKSk7CisJcHJpbnRmKF8oIlxuUmVhZCB0aGUgZGVz Y3JpcHRpb24gb2YgdGhlIFNRTCBjb21tYW5kIFJFUEFDSyBmb3IgZGV0YWlscy5cbiIpKTsKKwlw cmludGYoXygiXG5SZXBvcnQgYnVncyB0byA8JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsK KwlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdF X1VSTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3NjcmlwdHMvdC8xMDNfcmVwYWNrZGIucGwg Yi9zcmMvYmluL3NjcmlwdHMvdC8xMDNfcmVwYWNrZGIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjUxZGU0ZDdhYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jp bi9zY3JpcHRzL3QvMTAzX3JlcGFja2RiLnBsCkBAIC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDIxLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3Vz ZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6 Ok1vcmU7CisKK3Byb2dyYW1faGVscF9vaygncGdfcmVwYWNrZGInKTsKK3Byb2dyYW1fdmVyc2lv bl9vaygncGdfcmVwYWNrZGInKTsKK3Byb2dyYW1fb3B0aW9uc19oYW5kbGluZ19vaygncGdfcmVw YWNrZGInKTsKKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ21h aW4nKTsKKyRub2RlLT5pbml0OworJG5vZGUtPnN0YXJ0OworCiskbm9kZS0+aXNzdWVzX3NxbF9s aWtlKAorCVsgJ3BnX3JlcGFja2RiJywgJ3Bvc3RncmVzJyBdLAorCXFyL3N0YXRlbWVudDogUkVQ QUNLLio7LywKKwknU1FMIFJFUEFDSyBydW4nKTsKKworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuYyBiL3NyYy9iaW4vc2NyaXB0cy92YWN1 dW1pbmcuYwppbmRleCA5YmUzN2ZjYzQ1YS4uZTA3MDcxYzM4ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vc2NyaXB0cy92YWN1dW1pbmcuYworKysgYi9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMK QEAgLTEsNiArMSw2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHZhY3V1bWluZy5jCi0gKgkJ Q29tbW9uIHJvdXRpbmVzIGZvciB2YWN1dW1kYgorICoJCUNvbW1vbiByb3V0aW5lcyBmb3IgdmFj dXVtZGIgYW5kIHBnX3JlcGFja2RiCiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQpAQCAtMTY2LDYgKzE2NiwxNCBAQCB2YWN1dW1fb25lX2RhdGFiYXNlKENvbm5QYXJhbXMgKmNw YXJhbXMsCiAKIAljb25uID0gY29ubmVjdERhdGFiYXNlKGNwYXJhbXMsIHByb2duYW1lLCBlY2hv LCBmYWxzZSwgdHJ1ZSk7CiAKKwlpZiAodmFjb3B0cy0+bW9kZSA9PSBNT0RFX1JFUEFDSyAmJiBQ UXNlcnZlclZlcnNpb24oY29ubikgPCAxOTAwMDApCisJeworCQkvKiBYWFggYXJndWFibHksIGhl cmUgd2Ugc2hvdWxkIHVzZSBWQUNVVU0gRlVMTCBpbnN0ZWFkIG9mIGZhaWxpbmcgKi8KKwkJUFFm aW5pc2goY29ubik7CisJCXBnX2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgY29tbWFuZCBv biBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKKwkJCQkgIlJFUEFD SyIsICIxOSIpOworCX0KKwogCWlmICh2YWNvcHRzLT5kaXNhYmxlX3BhZ2Vfc2tpcHBpbmcgJiYg UFFzZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgOTA2MDApCiAJewogCQlQUWZpbmlzaChjb25uKTsKQEAg LTI1OCw5ICsyNjYsMTUgQEAgdmFjdXVtX29uZV9kYXRhYmFzZShDb25uUGFyYW1zICpjcGFyYW1z LAogCQlpZiAoc3RhZ2UgIT0gQU5BTFlaRV9OT19TVEFHRSkKIAkJCXByaW50ZihfKCIlczogcHJv Y2Vzc2luZyBkYXRhYmFzZSBcIiVzXCI6ICVzXG4iKSwKIAkJCQkgICBwcm9nbmFtZSwgUFFkYihj b25uKSwgXyhzdGFnZV9tZXNzYWdlc1tzdGFnZV0pKTsKLQkJZWxzZQorCQllbHNlIGlmICh2YWNv cHRzLT5tb2RlID09IE1PREVfVkFDVVVNKQogCQkJcHJpbnRmKF8oIiVzOiB2YWN1dW1pbmcgZGF0 YWJhc2UgXCIlc1wiXG4iKSwKIAkJCQkgICBwcm9nbmFtZSwgUFFkYihjb25uKSk7CisJCWVsc2UK KwkJeworCQkJQXNzZXJ0KHZhY29wdHMtPm1vZGUgPT0gTU9ERV9SRVBBQ0spOworCQkJcHJpbnRm KF8oIiVzOiByZXBhY2tpbmcgZGF0YWJhc2UgXCIlc1wiXG4iKSwKKwkJCQkgICBwcm9nbmFtZSwg UFFkYihjb25uKSk7CisJCX0KIAkJZmZsdXNoKHN0ZG91dCk7CiAJfQogCkBAIC0zNTAsNyArMzY0 LDcgQEAgdmFjdXVtX29uZV9kYXRhYmFzZShDb25uUGFyYW1zICpjcGFyYW1zLAogCQkgKiB0aHJv dWdoIFBhcmFsbGVsU2xvdHNHZXRJZGxlLgogCQkgKi8KIAkJUGFyYWxsZWxTbG90U2V0SGFuZGxl cihmcmVlX3Nsb3QsIFRhYmxlQ29tbWFuZFJlc3VsdEhhbmRsZXIsIE5VTEwpOwotCQlydW5fdmFj dXVtX2NvbW1hbmQoZnJlZV9zbG90LT5jb25uZWN0aW9uLCBzcWwuZGF0YSwKKwkJcnVuX3ZhY3V1 bV9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgdmFjb3B0cywgc3FsLmRhdGEsCiAJCQkJ CQkgICBlY2hvLCB0YWJuYW1lKTsKIAogCQljZWxsID0gY2VsbC0+bmV4dDsKQEAgLTM2Myw3ICsz NzcsNyBAQCB2YWN1dW1fb25lX2RhdGFiYXNlKENvbm5QYXJhbXMgKmNwYXJhbXMsCiAJfQogCiAJ LyogSWYgd2UgdXNlZCBTS0lQX0RBVEFCQVNFX1NUQVRTLCBtb3AgdXAgd2l0aCBPTkxZX0RBVEFC QVNFX1NUQVRTICovCi0JaWYgKHZhY29wdHMtPnNraXBfZGF0YWJhc2Vfc3RhdHMgJiYKKwlpZiAo dmFjb3B0cy0+bW9kZSA9PSBNT0RFX1ZBQ1VVTSAmJiB2YWNvcHRzLT5za2lwX2RhdGFiYXNlX3N0 YXRzICYmCiAJCXN0YWdlID09IEFOQUxZWkVfTk9fU1RBR0UpCiAJewogCQljb25zdCBjaGFyICpj bWQgPSAiVkFDVVVNIChPTkxZX0RBVEFCQVNFX1NUQVRTKTsiOwpAQCAtMzc2LDcgKzM5MCw3IEBA IHZhY3V1bV9vbmVfZGF0YWJhc2UoQ29ublBhcmFtcyAqY3BhcmFtcywKIAkJfQogCiAJCVBhcmFs bGVsU2xvdFNldEhhbmRsZXIoZnJlZV9zbG90LCBUYWJsZUNvbW1hbmRSZXN1bHRIYW5kbGVyLCBO VUxMKTsKLQkJcnVuX3ZhY3V1bV9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgY21kLCBl Y2hvLCBOVUxMKTsKKwkJcnVuX3ZhY3V1bV9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwg dmFjb3B0cywgY21kLCBlY2hvLCBOVUxMKTsKIAogCQlpZiAoIVBhcmFsbGVsU2xvdHNXYWl0Q29t cGxldGlvbihzYSkpCiAJCQlmYWlsZWQgPSB0cnVlOwpAQCAtNzA4LDYgKzcyMiwxMiBAQCB2YWN1 dW1fYWxsX2RhdGFiYXNlcyhDb25uUGFyYW1zICpjcGFyYW1zLAogCWludAkJCWk7CiAKIAljb25u ID0gY29ubmVjdE1haW50ZW5hbmNlRGF0YWJhc2UoY3BhcmFtcywgcHJvZ25hbWUsIGVjaG8pOwor CWlmICh2YWNvcHRzLT5tb2RlID09IE1PREVfUkVQQUNLICYmIFBRc2VydmVyVmVyc2lvbihjb25u KSA8IDE5MDAwMCkKKwl7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRhbCgiY2Fubm90IHVz ZSB0aGUgXCIlc1wiIGNvbW1hbmQgb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9zdGdy ZVNRTCAlcyIsCisJCQkJICJSRVBBQ0siLCAiMTkiKTsKKwl9CiAJcmVzdWx0ID0gZXhlY3V0ZVF1 ZXJ5KGNvbm4sCiAJCQkJCQkgICJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJF IGRhdGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0IDw+IC0yIE9SREVSIEJZIDE7IiwKIAkJCQkJ CSAgZWNobyk7CkBAIC03NjEsNyArNzgxLDcgQEAgdmFjdXVtX2FsbF9kYXRhYmFzZXMoQ29ublBh cmFtcyAqY3BhcmFtcywKIH0KIAogLyoKLSAqIENvbnN0cnVjdCBhIHZhY3V1bS9hbmFseXplIGNv bW1hbmQgdG8gcnVuIGJhc2VkIG9uIHRoZSBnaXZlbgorICogQ29uc3RydWN0IGEgdmFjdXVtL2Fu YWx5emUvcmVwYWNrIGNvbW1hbmQgdG8gcnVuIGJhc2VkIG9uIHRoZSBnaXZlbgogICogb3B0aW9u cywgaW4gdGhlIGdpdmVuIHN0cmluZyBidWZmZXIsIHdoaWNoIG1heSBjb250YWluIHByZXZpb3Vz IGdhcmJhZ2UuCiAgKgogICogVGhlIHRhYmxlIG5hbWUgdXNlZCBtdXN0IGJlIGFscmVhZHkgcHJv cGVybHkgcXVvdGVkLiAgVGhlIGNvbW1hbmQgZ2VuZXJhdGVkCkBAIC03NzcsNyArNzk3LDEzIEBA IHByZXBhcmVfdmFjdXVtX2NvbW1hbmQoUFFFeHBCdWZmZXIgc3FsLCBpbnQgc2VydmVyVmVyc2lv biwKIAogCXJlc2V0UFFFeHBCdWZmZXIoc3FsKTsKIAotCWlmICh2YWNvcHRzLT5hbmFseXplX29u bHkpCisJaWYgKHZhY29wdHMtPm1vZGUgPT0gTU9ERV9SRVBBQ0spCisJeworCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihzcWwsICJSRVBBQ0siKTsKKwkJaWYgKHZhY29wdHMtPnZlcmJvc2UpCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICIgKFZFUkJPU0UpIik7CisJfQorCWVsc2UgaWYgKHZh Y29wdHMtPmFuYWx5emVfb25seSkKIAl7CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIkFO QUxZWkUiKTsKIApAQCAtOTM4LDggKzk2NCw4IEBAIHByZXBhcmVfdmFjdXVtX2NvbW1hbmQoUFFF eHBCdWZmZXIgc3FsLCBpbnQgc2VydmVyVmVyc2lvbiwKICAqIEFueSBlcnJvcnMgZHVyaW5nIGNv bW1hbmQgZXhlY3V0aW9uIGFyZSByZXBvcnRlZCB0byBzdGRlcnIuCiAgKi8KIHZvaWQKLXJ1bl92 YWN1dW1fY29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNxbCwgYm9vbCBlY2hvLAot CQkJCSAgIGNvbnN0IGNoYXIgKnRhYmxlKQorcnVuX3ZhY3V1bV9jb21tYW5kKFBHY29ubiAqY29u biwgdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywKKwkJCQkgICBjb25zdCBjaGFyICpzcWwsIGJv b2wgZWNobywgY29uc3QgY2hhciAqdGFibGUpCiB7CiAJYm9vbAkJc3RhdHVzOwogCkBAIC05NTIs MTMgKzk3OCwyMSBAQCBydW5fdmFjdXVtX2NvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpzcWwsIGJvb2wgZWNobywKIAl7CiAJCWlmICh0YWJsZSkKIAkJewotCQkJcGdfbG9nX2Vycm9y KCJ2YWN1dW1pbmcgb2YgdGFibGUgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6ICVz IiwKLQkJCQkJCSB0YWJsZSwgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJ aWYgKHZhY29wdHMtPm1vZGUgPT0gTU9ERV9WQUNVVU0pCisJCQkJcGdfbG9nX2Vycm9yKCJ2YWN1 dW1pbmcgb2YgdGFibGUgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6ICVzIiwKKwkJ CQkJCQkgdGFibGUsIFBRZGIoY29ubiksIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCWVsc2UK KwkJCQlwZ19sb2dfZXJyb3IoInJlcGFja2luZyBvZiB0YWJsZSBcIiVzXCIgaW4gZGF0YWJhc2Ug XCIlc1wiIGZhaWxlZDogJXMiLAorCQkJCQkJCSB0YWJsZSwgUFFkYihjb25uKSwgUFFlcnJvck1l c3NhZ2UoY29ubikpOwogCQl9CiAJCWVsc2UKIAkJewotCQkJcGdfbG9nX2Vycm9yKCJ2YWN1dW1p bmcgb2YgZGF0YWJhc2UgXCIlc1wiIGZhaWxlZDogJXMiLAotCQkJCQkJIFBRZGIoY29ubiksIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJCWlmICh2YWNvcHRzLT5tb2RlID09IE1PREVfVkFDVVVN KQorCQkJCXBnX2xvZ19lcnJvcigidmFjdXVtaW5nIG9mIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6 ICVzIiwKKwkJCQkJCQkgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQkJZWxz ZQorCQkJCXBnX2xvZ19lcnJvcigicmVwYWNraW5nIG9mIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6 ICVzIiwKKwkJCQkJCQkgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwogCQl9CiAJ fQogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oIGIvc3JjL2Jpbi9z Y3JpcHRzL3ZhY3V1bWluZy5oCmluZGV4IGQzZjAwMDg0MGZhLi4xNTRiYzk5MjVjMCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oCisrKyBiL3NyYy9iaW4vc2NyaXB0cy92 YWN1dW1pbmcuaApAQCAtMTcsNiArMTcsMTIgQEAKICNpbmNsdWRlICJmZV91dGlscy9jb25uZWN0 X3V0aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc2ltcGxlX2xpc3QuaCIKIAordHlwZWRlZiBl bnVtCit7CisJTU9ERV9WQUNVVU0sCisJTU9ERV9SRVBBQ0sKK30gUnVuTW9kZTsKKwogLyogRm9y IGFuYWx5emUtaW4tc3RhZ2VzIG1vZGUgKi8KICNkZWZpbmUgQU5BTFlaRV9OT19TVEFHRQktMQog I2RlZmluZSBBTkFMWVpFX05VTV9TVEFHRVMJMwpAQCAtMjQsNiArMzAsNyBAQAogLyogdmFjdXVt IG9wdGlvbnMgY29udHJvbGxlZCBieSB1c2VyIGZsYWdzICovCiB0eXBlZGVmIHN0cnVjdCB2YWN1 dW1pbmdPcHRpb25zCiB7CisJUnVuTW9kZQkJbW9kZTsKIAlib29sCQlhbmFseXplX29ubHk7CiAJ Ym9vbAkJdmVyYm9zZTsKIAlib29sCQlhbmRfYW5hbHl6ZTsKQEAgLTg3LDggKzk0LDggQEAgZXh0 ZXJuIHZvaWQgdmFjdXVtX2FsbF9kYXRhYmFzZXMoQ29ublBhcmFtcyAqY3BhcmFtcywKIGV4dGVy biB2b2lkIHByZXBhcmVfdmFjdXVtX2NvbW1hbmQoUFFFeHBCdWZmZXIgc3FsLCBpbnQgc2VydmVy VmVyc2lvbiwKIAkJCQkJCQkJICAgdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywgY29uc3QgY2hh ciAqdGFibGUpOwogCi1leHRlcm4gdm9pZCBydW5fdmFjdXVtX2NvbW1hbmQoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpzcWwsIGJvb2wgZWNobywKLQkJCQkJCQkgICBjb25zdCBjaGFyICp0YWJs ZSk7CitleHRlcm4gdm9pZCBydW5fdmFjdXVtX2NvbW1hbmQoUEdjb25uICpjb25uLCB2YWN1dW1p bmdPcHRpb25zICp2YWNvcHRzLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnNxbCwgYm9vbCBlY2hv LCBjb25zdCBjaGFyICp0YWJsZSk7CiAKIGV4dGVybiBjaGFyICplc2NhcGVfcXVvdGVzKGNvbnN0 IGNoYXIgKnNyYyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIu aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaAppbmRleCA2MDA4OGE2NGNiYi4uODkw OTk4ZDg0YmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jbHVzdGVyLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZp bmUgQ0xVT1BUX1JFQ0hFQ0sgMHgwMgkJLyogcmVjaGVjayByZWxhdGlvbiBzdGF0ZSAqLwogI2Rl ZmluZSBDTFVPUFRfUkVDSEVDS19JU0NMVVNURVJFRCAweDA0IC8qIHJlY2hlY2sgcmVsYXRpb24g c3RhdGUgZm9yCiAJCQkJCQkJCQkJICogaW5kaXNjbHVzdGVyZWQgKi8KKyNkZWZpbmUgQ0xVT1BU X0FOQUxZWkUgMHgwOAkJLyogZG8gYW4gQU5BTFlaRSAqLwogCiAvKiBvcHRpb25zIGZvciBDTFVT VEVSICovCiB0eXBlZGVmIHN0cnVjdCBDbHVzdGVyUGFyYW1zCkBAIC0zMSw4ICszMiwxMSBAQCB0 eXBlZGVmIHN0cnVjdCBDbHVzdGVyUGFyYW1zCiAJYml0czMyCQlvcHRpb25zOwkJLyogYml0bWFz ayBvZiBDTFVPUFRfKiAqLwogfSBDbHVzdGVyUGFyYW1zOwogCi1leHRlcm4gdm9pZCBjbHVzdGVy KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ2x1c3RlclN0bXQgKnN0bXQsIGJvb2wgaXNUb3BMZXZlbCk7 Ci1leHRlcm4gdm9pZCBjbHVzdGVyX3JlbChSZWxhdGlvbiBPbGRIZWFwLCBPaWQgaW5kZXhPaWQs IENsdXN0ZXJQYXJhbXMgKnBhcmFtcyk7CisKK2V4dGVybiB2b2lkIEV4ZWNSZXBhY2soUGFyc2VT dGF0ZSAqcHN0YXRlLCBSZXBhY2tTdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpOworCitleHRl cm4gdm9pZCBjbHVzdGVyX3JlbChSZXBhY2tDb21tYW5kIGNvbW1hbmQsIGJvb2wgdXNpbmdpbmRl eCwKKwkJCQkJCVJlbGF0aW9uIE9sZEhlYXAsIE9pZCBpbmRleE9pZCwgQ2x1c3RlclBhcmFtcyAq cGFyYW1zKTsKIGV4dGVybiB2b2lkIGNoZWNrX2luZGV4X2lzX2NsdXN0ZXJhYmxlKFJlbGF0aW9u IE9sZEhlYXAsIE9pZCBpbmRleE9pZCwKIAkJCQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsK IGV4dGVybiB2b2lkIG1hcmtfaW5kZXhfY2x1c3RlcmVkKFJlbGF0aW9uIHJlbCwgT2lkIGluZGV4 T2lkLCBib29sIGlzX2ludGVybmFsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3Byb2dyZXNzLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCmluZGV4IDFjZGU0 YmQ5YmNmLi41YjY2MzljMTE0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJv Z3Jlc3MuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCkBAIC01NiwyNCAr NTYsNTEgQEAKICNkZWZpbmUgUFJPR1JFU1NfQU5BTFlaRV9QSEFTRV9DT01QVVRFX0VYVF9TVEFU UwkJNAogI2RlZmluZSBQUk9HUkVTU19BTkFMWVpFX1BIQVNFX0ZJTkFMSVpFX0FOQUxZWkUJCQk1 CiAKLS8qIFByb2dyZXNzIHBhcmFtZXRlcnMgZm9yIGNsdXN0ZXIgKi8KLSNkZWZpbmUgUFJPR1JF U1NfQ0xVU1RFUl9DT01NQU5ECQkJCTAKLSNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRQkJ CQkJMQotI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0lOREVYX1JFTElECQkJMgotI2RlZmluZSBQ Uk9HUkVTU19DTFVTVEVSX0hFQVBfVFVQTEVTX1NDQU5ORUQJMwotI2RlZmluZSBQUk9HUkVTU19D TFVTVEVSX0hFQVBfVFVQTEVTX1dSSVRURU4JNAotI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX1RP VEFMX0hFQVBfQkxLUwkJNQotI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0hFQVBfQkxLU19TQ0FO TkVECQk2Ci0jZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfSU5ERVhfUkVCVUlMRF9DT1VOVAk3Cisv KgorICogUHJvZ3Jlc3MgcGFyYW1ldGVycyBmb3IgUkVQQUNLLgorICoKKyAqIE5vdGU6IFNpbmNl IFJFUEFDSyBzaGFyZXMgc29tZSBjb2RlIHdpdGggQ0xVU1RFUiwgdGhlc2UgdmFsdWVzIGFyZSBh bHNvCisgKiB1c2VkIGJ5IENMVVNURVIuIChDTFVTVEVSIGlzIG5vdyBkZXByZWNhdGVkLCBzbyBp dCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8KKyAqIGludHJvZHVjZSBhIHNlcGFyYXRlIHNldCBvZiBj b25zdGFudHMuKQorICovCisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19DT01NQU5ECQkJCQkwCisj ZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFTRQkJCQkJMQorI2RlZmluZSBQUk9HUkVTU19SRVBB Q0tfSU5ERVhfUkVMSUQJCQkJMgorI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfSEVBUF9UVVBMRVNf U0NBTk5FRAkJMworI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfSEVBUF9UVVBMRVNfV1JJVFRFTgkJ NAorI2RlZmluZSBQUk9HUkVTU19SRVBBQ0tfVE9UQUxfSEVBUF9CTEtTCQkJNQorI2RlZmluZSBQ Uk9HUkVTU19SRVBBQ0tfSEVBUF9CTEtTX1NDQU5ORUQJCTYKKyNkZWZpbmUgUFJPR1JFU1NfUkVQ QUNLX0lOREVYX1JFQlVJTERfQ09VTlQJCTcKIAotLyogUGhhc2VzIG9mIGNsdXN0ZXIgKGFzIGFk dmVydGlzZWQgdmlhIFBST0dSRVNTX0NMVVNURVJfUEhBU0UpICovCi0jZGVmaW5lIFBST0dSRVNT X0NMVVNURVJfUEhBU0VfU0VRX1NDQU5fSEVBUAkxCi0jZGVmaW5lIFBST0dSRVNTX0NMVVNURVJf UEhBU0VfSU5ERVhfU0NBTl9IRUFQCTIKLSNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9T T1JUX1RVUExFUwkJMwotI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX1BIQVNFX1dSSVRFX05FV19I RUFQCTQKLSNkZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9QSEFTRV9TV0FQX1JFTF9GSUxFUwk1Ci0j ZGVmaW5lIFBST0dSRVNTX0NMVVNURVJfUEhBU0VfUkVCVUlMRF9JTkRFWAk2Ci0jZGVmaW5lIFBS T0dSRVNTX0NMVVNURVJfUEhBU0VfRklOQUxfQ0xFQU5VUAk3CisvKgorICogUGhhc2VzIG9mIHJl cGFjayAoYXMgYWR2ZXJ0aXNlZCB2aWEgUFJPR1JFU1NfUkVQQUNLX1BIQVNFKS4KKyAqLworI2Rl ZmluZSBQUk9HUkVTU19SRVBBQ0tfUEhBU0VfU0VRX1NDQU5fSEVBUAkJMQorI2RlZmluZSBQUk9H UkVTU19SRVBBQ0tfUEhBU0VfSU5ERVhfU0NBTl9IRUFQCTIKKyNkZWZpbmUgUFJPR1JFU1NfUkVQ QUNLX1BIQVNFX1NPUlRfVFVQTEVTCQkzCisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFTRV9X UklURV9ORVdfSEVBUAk0CisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFTRV9TV0FQX1JFTF9G SUxFUwk1CisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFTRV9SRUJVSUxEX0lOREVYCQk2Cisj ZGVmaW5lIFBST0dSRVNTX1JFUEFDS19QSEFTRV9GSU5BTF9DTEVBTlVQCQk3CisKKy8qCisgKiBD b21tYW5kcyBvZiBQUk9HUkVTU19SRVBBQ0sKKyAqCisgKiBDdXJyZW50bHkgd2Ugb25seSBoYXZl IG9uZSBjb21tYW5kLCBzbyB0aGUgUFJPR1JFU1NfUkVQQUNLX0NPTU1BTkQKKyAqIHBhcmFtZXRl ciBpcyBub3QgbmVjZXNzYXJ5LiBIb3dldmVyIGl0IG1ha2VzIGNsdXN0ZXIuYyBzaW1wbGVyIGlm IHdlIGhhdmUKKyAqIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBDTFVTVEVSIGFuZCBS RVBBQ0sgLSBzZWUgdGhlIG5vdGUgb24gUkVQQUNLCisgKiBwYXJhbWV0ZXJzIGFib3ZlLgorICov CisjZGVmaW5lIFBST0dSRVNTX1JFUEFDS19DT01NQU5EX1JFUEFDSwkJCTEKKworLyoKKyAqIFBy b2dyZXNzIHBhcmFtZXRlcnMgZm9yIGNsdXN0ZXIuCisgKgorICogQWx0aG91Z2ggd2UgbmVlZCB0 byByZXBvcnQgUkVQQUNLIGFuZCBDTFVTVEVSIGluIHNlcGFyYXRlIHZpZXdzLCB0aGUKKyAqIHBh cmFtZXRlcnMgYW5kIHBoYXNlcyBvZiBDTFVTVEVSIGFyZSBhIHN1YnNldCBvZiB0aG9zZSBvZiBS RVBBQ0suIFRoZXJlZm9yZQorICogd2UganVzdCB1c2UgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBk ZWZpbmVkIGZvciBSRVBBQ0sgYWJvdmUgaW5zdGVhZCBvZgorICogZGVmaW5pbmcgYSBzZXBhcmF0 ZSBzZXQgb2YgY29uc3RhbnRzIGhlcmUuCisgKi8KIAogLyogQ29tbWFuZHMgb2YgUFJPR1JFU1Nf Q0xVU1RFUiAqLwogI2RlZmluZSBQUk9HUkVTU19DTFVTVEVSX0NPTU1BTkRfQ0xVU1RFUgkJMQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDg2YTIzNmJkNThiLi5mY2MyNWEwYzU5MiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhcnNlbm9kZXMuaApAQCAtMzk0OSwxNiArMzk0OSwyNiBAQCB0eXBlZGVmIHN0cnVjdCBB bHRlclN5c3RlbVN0bXQKIH0gQWx0ZXJTeXN0ZW1TdG10OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKgkJQ2x1c3RlciBTdGF0ZW1lbnQgKHN1cHBvcnQgcGJyb3duJ3MgY2x1c3RlciBp bmRleCBpbXBsZW1lbnRhdGlvbikKKyAqCQlSZXBhY2sgU3RhdGVtZW50CiAgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKi8KLXR5cGVkZWYgc3RydWN0IENsdXN0ZXJTdG10Cit0eXBlZGVmIGVu dW0gUmVwYWNrQ29tbWFuZAoreworCVJFUEFDS19DT01NQU5EX0NMVVNURVIsCisJUkVQQUNLX0NP TU1BTkRfUkVQQUNLLAorCVJFUEFDS19DT01NQU5EX1ZBQ1VVTUZVTEwsCit9IFJlcGFja0NvbW1h bmQ7CisKK3R5cGVkZWYgc3RydWN0IFJlcGFja1N0bXQKIHsKIAlOb2RlVGFnCQl0eXBlOwotCVJh bmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gYmVpbmcgaW5kZXhlZCwgb3IgTlVMTCBp ZiBhbGwgKi8KLQljaGFyCSAgICppbmRleG5hbWU7CQkvKiBvcmlnaW5hbCBpbmRleCBkZWZpbmVk ICovCisJUmVwYWNrQ29tbWFuZCBjb21tYW5kOwkJLyogdHlwZSBvZiBjb21tYW5kIGJlaW5nIHJ1 biAqLworCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gYmVpbmcgcmVwYWNrZWQg Ki8KKwljaGFyCSAgICppbmRleG5hbWU7CQkvKiBvcmRlciB0dXBsZXMgYnkgdGhpcyBpbmRleCAq LworCWJvb2wJCXVzaW5naW5kZXg7CQkvKiB3aGV0aGVyIFVTSU5HIElOREVYIGlzIHNwZWNpZmll ZCAqLwogCUxpc3QJICAgKnBhcmFtczsJCQkvKiBsaXN0IG9mIERlZkVsZW0gbm9kZXMgKi8KLX0g Q2x1c3RlclN0bXQ7Cit9IFJlcGFja1N0bXQ7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCVZhY3V1bSBhbmQgQW5hbHl6ZSBTdGF0ZW1lbnRzCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXgg YTRhZjNmNzE3YTEuLjIyNTU5MzY5ZTJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0zNzQsNiArMzc0 LDcgQEAgUEdfS0VZV09SRCgicmVpbmRleCIsIFJFSU5ERVgsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlbGF0aXZlIiwgUkVMQVRJVkVfUCwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVsZWFzZSIsIFJFTEVBU0UsIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlbmFtZSIsIFJFTkFN RSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgicmVwYWNrIiwg UkVQQUNLLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZXBl YXRhYmxlIiwgUkVQRUFUQUJMRSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgicmVwbGFjZSIsIFJFUExBQ0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInJlcGxpY2EiLCBSRVBMSUNBLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaCBiL3Ny Yy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4IGQyNTBhNzE0ZDU5Li5jY2ViMzEyZjJi MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKQEAgLTE5Niw2ICsxOTYsNyBAQCBQR19DTURUQUcoQ01E VEFHX1JFQVNTSUdOX09XTkVELCAiUkVBU1NJR04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQogUEdfQ01EVEFHKENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBN QVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdf UkVJTkRFWCwgIlJFSU5ERVgiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFH X1JFTEVBU0UsICJSRUxFQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfUkVQQUNLLCAiUkVQQUNLIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURU QUdfUkVTRVQsICJSRVNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFH X1JFVk9LRSwgIlJFVk9LRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdf UkVWT0tFX1JPTEUsICJSRVZPS0UgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dyZXNzLmggYi9zcmMvaW5jbHVkZS91 dGlscy9iYWNrZW5kX3Byb2dyZXNzLmgKaW5kZXggZGRhODEzYWI0MDcuLmU2OWUzNjZkY2RjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3Byb2dyZXNzLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYmFja2VuZF9wcm9ncmVzcy5oCkBAIC0yOCw2ICsyOCw3IEBAIHR5cGVk ZWYgZW51bSBQcm9ncmVzc0NvbW1hbmRUeXBlCiAJUFJPR1JFU1NfQ09NTUFORF9DUkVBVEVfSU5E RVgsCiAJUFJPR1JFU1NfQ09NTUFORF9CQVNFQkFDS1VQLAogCVBST0dSRVNTX0NPTU1BTkRfQ09Q WSwKKwlQUk9HUkVTU19DT01NQU5EX1JFUEFDSywKIH0gUHJvZ3Jlc3NDb21tYW5kVHlwZTsKIAog I2RlZmluZSBQR1NUQVRfTlVNX1BST0dSRVNTX1BBUkFNCTIwCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NsdXN0ZXIub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jbHVzdGVyLm91dAppbmRleCA0ZDQwYTY4MDlhYi4uNTI1NjYyOGI1MWQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY2x1c3Rlci5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9jbHVzdGVyLm91dApAQCAtMjU0LDYgKzI1NCw2MyBAQCBPUkRFUiBCWSAx OwogIGNsc3RyX3RzdF9wa2V5CiAoMyByb3dzKQogCistLSBSRVBBQ0sgaGFuZGxlcyBpbmRpdmlk dWFsIHRhYmxlcyBpZGVudGljYWxseSB0byBDTFVTVEVSLCBidXQgaXQncyB3b3J0aAorLS0gY2hl Y2tpbmcgaWYgaXQgaGFuZGxlcyB0YWJsZSBoaWVyYXJjaGllcyBpZGVudGljYWxseSBhcyB3ZWxs LgorUkVQQUNLIGNsc3RyX3RzdCBVU0lORyBJTkRFWCBjbHN0cl90c3RfYzsKKy0tIFZlcmlmeSB0 aGF0IGluaGVyaXRhbmNlIGxpbmsgc3RpbGwgd29ya3MKK0lOU0VSVCBJTlRPIGNsc3RyX3RzdF9p bmggVkFMVUVTICgwLCAxMDAsICdpbiBjaGlsZCB0YWJsZSAyJyk7CitTRUxFQ1QgYSxiLGMsc3Vi c3RyaW5nKGQgZm9yIDMwKSwgbGVuZ3RoKGQpIGZyb20gY2xzdHJfdHN0OworIGEgIHwgIGIgIHwg ICAgICAgIGMgICAgICAgICB8ICAgICAgICAgICBzdWJzdHJpbmcgICAgICAgICAgICB8IGxlbmd0 aCAKKy0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tCisgMTAgfCAgMTQgfCBjYXRvcmNlICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMTggfCAgIDUgfCBjaW5jbyAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDkgfCAg IDQgfCBjdWF0cm8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgCisgMjYgfCAgMTkgfCBkaWVjaW51ZXZlICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgCisgMTIgfCAgMTggfCBkaWVjaW9jaG8gICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMzAgfCAgMTYgfCBkaWVjaXNl aXMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjQg fCAgMTcgfCBkaWVjaXNpZXRlICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgCisgIDIgfCAgMTAgfCBkaWV6ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjMgfCAgMTIgfCBkb2NlICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMTEgfCAgIDIgfCBkb3Mg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisg MjUgfCAgIDkgfCBudWV2ZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgCisgMzEgfCAgIDggfCBvY2hvICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDEgfCAgMTEgfCBvbmNlICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjggfCAgMTUgfCBx dWluY2UgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg CisgMzIgfCAgIDYgfCBzZWlzICAgICAgICAgICAgIHwgeHl6enl4eXp6eXh5enp5eHl6enl4eXp6 eXh5enp5IHwgNTAwMDAwCisgMjkgfCAgIDcgfCBzaWV0ZSAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMTUgfCAgMTMgfCB0cmVjZSAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjIgfCAgMzAg fCB0cmVpbnRhICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgCisgMTcgfCAgMzIgfCB0cmVpbnRhIHkgZG9zICAgIHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAgICAgCisgIDMgfCAgMzEgfCB0cmVpbnRhIHkgdW5vICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDUgfCAgIDMgfCB0cmVzICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjAgfCAg IDEgfCB1bm8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgCisgIDYgfCAgMjAgfCB2ZWludGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgCisgMTQgfCAgMjUgfCB2ZWludGljaW5jbyAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjEgfCAgMjQgfCB2ZWludGlj dWF0cm8gICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDQg fCAgMjIgfCB2ZWludGlkb3MgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgCisgMTkgfCAgMjkgfCB2ZWludGludWV2ZSAgICAgIHwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgCisgMTYgfCAgMjggfCB2ZWludGlvY2hvICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgMjcgfCAgMjYgfCB2ZWlu dGlzZWlzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisg MTMgfCAgMjcgfCB2ZWludGlzaWV0ZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgCisgIDcgfCAgMjMgfCB2ZWludGl0cmVzICAgICAgIHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDggfCAgMjEgfCB2ZWludGl1bm8gICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgCisgIDAgfCAxMDAgfCBp biBjaGlsZCB0YWJsZSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg CisgIDAgfCAxMDAgfCBpbiBjaGlsZCB0YWJsZSAyIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgCisoMzQgcm93cykKKworLS0gVmVyaWZ5IHRoYXQgZm9yZWlnbiBrZXkg bGluayBzdGlsbCB3b3JrcworSU5TRVJUIElOVE8gY2xzdHJfdHN0IChiLCBjKSBWQUxVRVMgKDEx MTEsICd0aGlzIHNob3VsZCBmYWlsJyk7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFi bGUgImNsc3RyX3RzdCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiY2xzdHJfdHN0 X2NvbiIKK0RFVEFJTDogIEtleSAoYik9KDExMTEpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJj bHN0cl90c3RfcyIuCitTRUxFQ1QgY29ubmFtZSBGUk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29u cmVsaWQgPSAnY2xzdHJfdHN0Jzo6cmVnY2xhc3MKK09SREVSIEJZIDE7CisgICAgICAgY29ubmFt ZSAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgY2xzdHJfdHN0X2Ffbm90X251bGwK KyBjbHN0cl90c3RfY29uCisgY2xzdHJfdHN0X3BrZXkKKygzIHJvd3MpCisKIFNFTEVDVCByZWxu YW1lLCByZWxraW5kLAogICAgIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIHBnX2NsYXNzIFdIRVJFIG9p ZCA9IGMucmVsdG9hc3RyZWxpZCkgQVMgaGFzdG9hc3QKIEZST00gcGdfY2xhc3MgYyBXSEVSRSBy ZWxuYW1lIExJS0UgJ2Nsc3RyX3RzdCUnIE9SREVSIEJZIHJlbG5hbWU7CkBAIC0zODEsNiArNDM4 LDM1IEBAIFNFTEVDVCAqIEZST00gY2xzdHJfMTsKICAyCiAoMiByb3dzKQogCistLSBSRVBBQ0sg dy9vIGFyZ3VtZW50IHBlcmZvcm1zIG5vIG9yZGVyaW5nLCBzbyB3ZSBjYW4gb25seSBjaGVjayB3 aGljaCB0YWJsZXMKKy0tIGhhdmUgdGhlIHJlbGZpbGVub2RlIGNoYW5nZWQuCitSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CitDUkVBVEUgVEVNUCBUQUJMRSByZWxub2Rlc19vbGQgQVMKKyhT RUxFQ1QgcmVsbmFtZSwgcmVsZmlsZW5vZGUKK0ZST00gcGdfY2xhc3MKK1dIRVJFIHJlbG5hbWUg SU4gKCdjbHN0cl8xJywgJ2Nsc3RyXzInLCAnY2xzdHJfMycpKTsKK1NFVCBTRVNTSU9OIEFVVEhP UklaQVRJT04gcmVncmVzc19jbHN0cl91c2VyOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBF UlJPUjsgIC0tIG9yZGVyIG9mICJza2lwcGluZyIgd2FybmluZ3MgbWF5IHZhcnkKK1JFUEFDSzsK K1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047 CitDUkVBVEUgVEVNUCBUQUJMRSByZWxub2Rlc19uZXcgQVMKKyhTRUxFQ1QgcmVsbmFtZSwgcmVs ZmlsZW5vZGUKK0ZST00gcGdfY2xhc3MKK1dIRVJFIHJlbG5hbWUgSU4gKCdjbHN0cl8xJywgJ2Ns c3RyXzInLCAnY2xzdHJfMycpKTsKKy0tIERvIHRoZSBhY3R1YWwgY29tcGFyaXNvbi4gVW5saWtl IENMVVNURVIsIGNsc3RyXzMgc2hvdWxkIGhhdmUgYmVlbgorLS0gcHJvY2Vzc2VkIGJlY2F1c2Ug dGhlcmUgaXMgbm90aGluZyBsaWtlIGNsdXN0ZXJpbmcgaW5kZXggaGVyZS4KK1NFTEVDVCBvLnJl bG5hbWUgRlJPTSByZWxub2Rlc19vbGQgbworSk9JTiByZWxub2Rlc19uZXcgbiBPTiBvLnJlbG5h bWUgPSBuLnJlbG5hbWUKK1dIRVJFIG8ucmVsZmlsZW5vZGUgPD4gbi5yZWxmaWxlbm9kZQorT1JE RVIgQlkgby5yZWxuYW1lOworIHJlbG5hbWUgCistLS0tLS0tLS0KKyBjbHN0cl8xCisgY2xzdHJf MworKDIgcm93cykKKworU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX2Nsc3RyX3Vz ZXI7CiAtLSBUZXN0IE1WQ0Mtc2FmZXR5IG9mIGNsdXN0ZXIuIFRoZXJlIGlzbid0IG11Y2ggd2Ug Y2FuIGRvIHRvIHZlcmlmeSB0aGUKIC0tIHJlc3VsdHMgd2l0aCBhIHNpbmdsZSBiYWNrZW5kLi4u CiBDUkVBVEUgVEFCTEUgY2x1c3RlcnRlc3QgKGtleSBpbnQgUFJJTUFSWSBLRVkpOwpAQCAtNDk1 LDYgKzU4MSw0MyBAQCBBTFRFUiBUQUJMRSBjbHN0cnBhcnQgU0VUIFdJVEhPVVQgQ0xVU1RFUjsK IEVSUk9SOiAgY2Fubm90IG1hcmsgaW5kZXggY2x1c3RlcmVkIGluIHBhcnRpdGlvbmVkIHRhYmxl CiBBTFRFUiBUQUJMRSBjbHN0cnBhcnQgQ0xVU1RFUiBPTiBjbHN0cnBhcnRfaWR4OwogRVJST1I6 ICBjYW5ub3QgbWFyayBpbmRleCBjbHVzdGVyZWQgaW4gcGFydGl0aW9uZWQgdGFibGUKKy0tIENo ZWNrIHRoYXQgUkVQQUNLIHNldHMgbmV3IHJlbGZpbGVub2RlczogaXQgc2hvdWxkIHByb2Nlc3Mg ZXhhY3RseSB0aGUgc2FtZQorLS0gdGFibGVzIGFzIENMVVNURVIgZGlkLgorRFJPUCBUQUJMRSBv bGRfY2x1c3Rlcl9pbmZvOworRFJPUCBUQUJMRSBuZXdfY2x1c3Rlcl9pbmZvOworQ1JFQVRFIFRF TVAgVEFCTEUgb2xkX2NsdXN0ZXJfaW5mbyBBUyBTRUxFQ1QgcmVsbmFtZSwgbGV2ZWwsIHJlbGZp bGVub2RlLCByZWxraW5kIEZST00gcGdfcGFydGl0aW9uX3RyZWUoJ2Nsc3RycGFydCc6OnJlZ2Ns YXNzKSBBUyB0cmVlIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9pZD10cmVlLnJlbGlkIDsKK1JFUEFD SyBjbHN0cnBhcnQgVVNJTkcgSU5ERVggY2xzdHJwYXJ0X2lkeDsKK0NSRUFURSBURU1QIFRBQkxF IG5ld19jbHVzdGVyX2luZm8gQVMgU0VMRUNUIHJlbG5hbWUsIGxldmVsLCByZWxmaWxlbm9kZSwg cmVsa2luZCBGUk9NIHBnX3BhcnRpdGlvbl90cmVlKCdjbHN0cnBhcnQnOjpyZWdjbGFzcykgQVMg dHJlZSBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQ9dHJlZS5yZWxpZCA7CitTRUxFQ1QgcmVsbmFt ZSwgb2xkLmxldmVsLCBvbGQucmVsa2luZCwgb2xkLnJlbGZpbGVub2RlID0gbmV3LnJlbGZpbGVu b2RlIEZST00gb2xkX2NsdXN0ZXJfaW5mbyBBUyBvbGQgSk9JTiBuZXdfY2x1c3Rlcl9pbmZvIEFT IG5ldyBVU0lORyAocmVsbmFtZSkgT1JERVIgQlkgcmVsbmFtZSBDT0xMQVRFICJDIjsKKyAgIHJl bG5hbWUgICB8IGxldmVsIHwgcmVsa2luZCB8ID9jb2x1bW4/IAorLS0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tCisgY2xzdHJwYXJ0ICAgfCAgICAgMCB8IHAgICAgICAg fCB0CisgY2xzdHJwYXJ0MSAgfCAgICAgMSB8IHAgICAgICAgfCB0CisgY2xzdHJwYXJ0MTEgfCAg ICAgMiB8IHIgICAgICAgfCBmCisgY2xzdHJwYXJ0MTIgfCAgICAgMiB8IHAgICAgICAgfCB0Cisg Y2xzdHJwYXJ0MiAgfCAgICAgMSB8IHIgICAgICAgfCBmCisgY2xzdHJwYXJ0MyAgfCAgICAgMSB8 IHAgICAgICAgfCB0CisgY2xzdHJwYXJ0MzMgfCAgICAgMiB8IHIgICAgICAgfCBmCisoNyByb3dz KQorCistLSBBbmQgZmluYWxseSB0aGUgc2FtZSBmb3IgUkVQQUNLIHcvbyBpbmRleC4KK0RST1Ag VEFCTEUgb2xkX2NsdXN0ZXJfaW5mbzsKK0RST1AgVEFCTEUgbmV3X2NsdXN0ZXJfaW5mbzsKK0NS RUFURSBURU1QIFRBQkxFIG9sZF9jbHVzdGVyX2luZm8gQVMgU0VMRUNUIHJlbG5hbWUsIGxldmVs LCByZWxmaWxlbm9kZSwgcmVsa2luZCBGUk9NIHBnX3BhcnRpdGlvbl90cmVlKCdjbHN0cnBhcnQn OjpyZWdjbGFzcykgQVMgdHJlZSBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQ9dHJlZS5yZWxpZCA7 CitSRVBBQ0sgY2xzdHJwYXJ0OworQ1JFQVRFIFRFTVAgVEFCTEUgbmV3X2NsdXN0ZXJfaW5mbyBB UyBTRUxFQ1QgcmVsbmFtZSwgbGV2ZWwsIHJlbGZpbGVub2RlLCByZWxraW5kIEZST00gcGdfcGFy dGl0aW9uX3RyZWUoJ2Nsc3RycGFydCc6OnJlZ2NsYXNzKSBBUyB0cmVlIEpPSU4gcGdfY2xhc3Mg YyBPTiBjLm9pZD10cmVlLnJlbGlkIDsKK1NFTEVDVCByZWxuYW1lLCBvbGQubGV2ZWwsIG9sZC5y ZWxraW5kLCBvbGQucmVsZmlsZW5vZGUgPSBuZXcucmVsZmlsZW5vZGUgRlJPTSBvbGRfY2x1c3Rl cl9pbmZvIEFTIG9sZCBKT0lOIG5ld19jbHVzdGVyX2luZm8gQVMgbmV3IFVTSU5HIChyZWxuYW1l KSBPUkRFUiBCWSByZWxuYW1lIENPTExBVEUgIkMiOworICAgcmVsbmFtZSAgIHwgbGV2ZWwgfCBy ZWxraW5kIHwgP2NvbHVtbj8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyBjbHN0cnBhcnQgICB8ICAgICAwIHwgcCAgICAgICB8IHQKKyBjbHN0cnBhcnQxICB8 ICAgICAxIHwgcCAgICAgICB8IHQKKyBjbHN0cnBhcnQxMSB8ICAgICAyIHwgciAgICAgICB8IGYK KyBjbHN0cnBhcnQxMiB8ICAgICAyIHwgcCAgICAgICB8IHQKKyBjbHN0cnBhcnQyICB8ICAgICAx IHwgciAgICAgICB8IGYKKyBjbHN0cnBhcnQzICB8ICAgICAxIHwgcCAgICAgICB8IHQKKyBjbHN0 cnBhcnQzMyB8ICAgICAyIHwgciAgICAgICB8IGYKKyg3IHJvd3MpCisKIERST1AgVEFCTEUgY2xz dHJwYXJ0OwogLS0gT3duZXJzaGlwIG9mIHBhcnRpdGlvbnMgaXMgY2hlY2tlZAogQ1JFQVRFIFRB QkxFIHB0bm93bmVyKGkgaW50IHVuaXF1ZSkgUEFSVElUSU9OIEJZIExJU1QgKGkpOwpAQCAtNTEz LDcgKzYzNiw3IEBAIENSRUFURSBURU1QIFRBQkxFIHB0bm93bmVyX29sZG5vZGVzIEFTCiAgIEpP SU4gcGdfY2xhc3MgQVMgYyBPTiBjLm9pZD10cmVlLnJlbGlkOwogU0VUIFNFU1NJT04gQVVUSE9S SVpBVElPTiByZWdyZXNzX3B0bm93bmVyOwogQ0xVU1RFUiBwdG5vd25lciBVU0lORyBwdG5vd25l cl9pX2lkeDsKLVdBUk5JTkc6ICBwZXJtaXNzaW9uIGRlbmllZCB0byBjbHVzdGVyICJwdG5vd25l cjIiLCBza2lwcGluZyBpdAorV0FSTklORzogIHBlcm1pc3Npb24gZGVuaWVkIHRvIGV4ZWN1dGUg Q0xVU1RFUiBvbiAicHRub3duZXIyIiwgc2tpcHBpbmcgaXQKIFJFU0VUIFNFU1NJT04gQVVUSE9S SVpBVElPTjsKIFNFTEVDVCBhLnJlbG5hbWUsIGEucmVsZmlsZW5vZGU9Yi5yZWxmaWxlbm9kZSBG Uk9NIHBnX2NsYXNzIGEKICAgSk9JTiBwdG5vd25lcl9vbGRub2RlcyBiIFVTSU5HIChvaWQpIE9S REVSIEJZIGEucmVsbmFtZSBDT0xMQVRFICJDIjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKaW5kZXggMzVlOGFhZDc3MDEuLjNhMWQxZDI4MjgyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dApAQCAtMjA3MSw2ICsyMDcxLDI5IEBAIHBnX3N0YXRfcHJvZ3Jlc3NfY3JlYXRl X2luZGV4fCBTRUxFQ1Qgcy5waWQsCiAgICAgcy5wYXJhbTE1IEFTIHBhcnRpdGlvbnNfZG9uZQog ICAgRlJPTSAocGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnQ1JFQVRFIElOREVYJzo6dGV4dCkg cyhwaWQsIGRhdGlkLCByZWxpZCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJh bTUsIHBhcmFtNiwgcGFyYW03LCBwYXJhbTgsIHBhcmFtOSwgcGFyYW0xMCwgcGFyYW0xMSwgcGFy YW0xMiwgcGFyYW0xMywgcGFyYW0xNCwgcGFyYW0xNSwgcGFyYW0xNiwgcGFyYW0xNywgcGFyYW0x OCwgcGFyYW0xOSwgcGFyYW0yMCkKICAgICAgTEVGVCBKT0lOIHBnX2RhdGFiYXNlIGQgT04gKChz LmRhdGlkID0gZC5vaWQpKSk7CitwZ19zdGF0X3Byb2dyZXNzX3JlcGFja3wgU0VMRUNUIHMucGlk LAorICAgIHMuZGF0aWQsCisgICAgZC5kYXRuYW1lLAorICAgIHMucmVsaWQsCisgICAgICAgIENB U0Ugcy5wYXJhbTIKKyAgICAgICAgICAgIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnOjp0ZXh0 CisgICAgICAgICAgICBXSEVOIDEgVEhFTiAnc2VxIHNjYW5uaW5nIGhlYXAnOjp0ZXh0CisgICAg ICAgICAgICBXSEVOIDIgVEhFTiAnaW5kZXggc2Nhbm5pbmcgaGVhcCc6OnRleHQKKyAgICAgICAg ICAgIFdIRU4gMyBUSEVOICdzb3J0aW5nIHR1cGxlcyc6OnRleHQKKyAgICAgICAgICAgIFdIRU4g NCBUSEVOICd3cml0aW5nIG5ldyBoZWFwJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRIRU4g J3N3YXBwaW5nIHJlbGF0aW9uIGZpbGVzJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2IFRIRU4g J3JlYnVpbGRpbmcgaW5kZXgnOjp0ZXh0CisgICAgICAgICAgICBXSEVOIDcgVEhFTiAncGVyZm9y bWluZyBmaW5hbCBjbGVhbnVwJzo6dGV4dAorICAgICAgICAgICAgRUxTRSBOVUxMOjp0ZXh0Cisg ICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICAocy5wYXJhbTMpOjpvaWQgQVMgcmVwYWNrX2luZGV4 X3JlbGlkLAorICAgIHMucGFyYW00IEFTIGhlYXBfdHVwbGVzX3NjYW5uZWQsCisgICAgcy5wYXJh bTUgQVMgaGVhcF90dXBsZXNfd3JpdHRlbiwKKyAgICBzLnBhcmFtNiBBUyBoZWFwX2Jsa3NfdG90 YWwsCisgICAgcy5wYXJhbTcgQVMgaGVhcF9ibGtzX3NjYW5uZWQsCisgICAgcy5wYXJhbTggQVMg aW5kZXhfcmVidWlsZF9jb3VudAorICAgRlJPTSAocGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygn UkVQQUNLJzo6dGV4dCkgcyhwaWQsIGRhdGlkLCByZWxpZCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFt MywgcGFyYW00LCBwYXJhbTUsIHBhcmFtNiwgcGFyYW03LCBwYXJhbTgsIHBhcmFtOSwgcGFyYW0x MCwgcGFyYW0xMSwgcGFyYW0xMiwgcGFyYW0xMywgcGFyYW0xNCwgcGFyYW0xNSwgcGFyYW0xNiwg cGFyYW0xNywgcGFyYW0xOCwgcGFyYW0xOSwgcGFyYW0yMCkKKyAgICAgTEVGVCBKT0lOIHBnX2Rh dGFiYXNlIGQgT04gKChzLmRhdGlkID0gZC5vaWQpKSk7CiBwZ19zdGF0X3Byb2dyZXNzX3ZhY3V1 bXwgU0VMRUNUIHMucGlkLAogICAgIHMuZGF0aWQsCiAgICAgZC5kYXRuYW1lLApkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY2x1c3Rlci5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jbHVzdGVyLnNxbAppbmRleCBiNzExNWY4NjEwNC4uY2ZjYzNkYzk3NjEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NsdXN0ZXIuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NsdXN0ZXIuc3FsCkBAIC03Niw2ICs3NiwxOSBAQCBJTlNFUlQgSU5UTyBjbHN0cl90c3Qg KGIsIGMpIFZBTFVFUyAoMTExMSwgJ3RoaXMgc2hvdWxkIGZhaWwnKTsKIFNFTEVDVCBjb25uYW1l IEZST00gcGdfY29uc3RyYWludCBXSEVSRSBjb25yZWxpZCA9ICdjbHN0cl90c3QnOjpyZWdjbGFz cwogT1JERVIgQlkgMTsKIAorLS0gUkVQQUNLIGhhbmRsZXMgaW5kaXZpZHVhbCB0YWJsZXMgaWRl bnRpY2FsbHkgdG8gQ0xVU1RFUiwgYnV0IGl0J3Mgd29ydGgKKy0tIGNoZWNraW5nIGlmIGl0IGhh bmRsZXMgdGFibGUgaGllcmFyY2hpZXMgaWRlbnRpY2FsbHkgYXMgd2VsbC4KK1JFUEFDSyBjbHN0 cl90c3QgVVNJTkcgSU5ERVggY2xzdHJfdHN0X2M7CisKKy0tIFZlcmlmeSB0aGF0IGluaGVyaXRh bmNlIGxpbmsgc3RpbGwgd29ya3MKK0lOU0VSVCBJTlRPIGNsc3RyX3RzdF9pbmggVkFMVUVTICgw LCAxMDAsICdpbiBjaGlsZCB0YWJsZSAyJyk7CitTRUxFQ1QgYSxiLGMsc3Vic3RyaW5nKGQgZm9y IDMwKSwgbGVuZ3RoKGQpIGZyb20gY2xzdHJfdHN0OworCistLSBWZXJpZnkgdGhhdCBmb3JlaWdu IGtleSBsaW5rIHN0aWxsIHdvcmtzCitJTlNFUlQgSU5UTyBjbHN0cl90c3QgKGIsIGMpIFZBTFVF UyAoMTExMSwgJ3RoaXMgc2hvdWxkIGZhaWwnKTsKKworU0VMRUNUIGNvbm5hbWUgRlJPTSBwZ19j b25zdHJhaW50IFdIRVJFIGNvbnJlbGlkID0gJ2Nsc3RyX3RzdCc6OnJlZ2NsYXNzCitPUkRFUiBC WSAxOwogCiBTRUxFQ1QgcmVsbmFtZSwgcmVsa2luZCwKICAgICBFWElTVFMoU0VMRUNUIDEgRlJP TSBwZ19jbGFzcyBXSEVSRSBvaWQgPSBjLnJlbHRvYXN0cmVsaWQpIEFTIGhhc3RvYXN0CkBAIC0x NTksNiArMTcyLDM0IEBAIElOU0VSVCBJTlRPIGNsc3RyXzEgVkFMVUVTICgxKTsKIENMVVNURVIg Y2xzdHJfMTsKIFNFTEVDVCAqIEZST00gY2xzdHJfMTsKIAorLS0gUkVQQUNLIHcvbyBhcmd1bWVu dCBwZXJmb3JtcyBubyBvcmRlcmluZywgc28gd2UgY2FuIG9ubHkgY2hlY2sgd2hpY2ggdGFibGVz CistLSBoYXZlIHRoZSByZWxmaWxlbm9kZSBjaGFuZ2VkLgorUkVTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OOworQ1JFQVRFIFRFTVAgVEFCTEUgcmVsbm9kZXNfb2xkIEFTCisoU0VMRUNUIHJlbG5h bWUsIHJlbGZpbGVub2RlCitGUk9NIHBnX2NsYXNzCitXSEVSRSByZWxuYW1lIElOICgnY2xzdHJf MScsICdjbHN0cl8yJywgJ2Nsc3RyXzMnKSk7CisKK1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04g cmVncmVzc19jbHN0cl91c2VyOworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSBFUlJPUjsgIC0t IG9yZGVyIG9mICJza2lwcGluZyIgd2FybmluZ3MgbWF5IHZhcnkKK1JFUEFDSzsKK1JFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CisKK1JFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKK0NSRUFU RSBURU1QIFRBQkxFIHJlbG5vZGVzX25ldyBBUworKFNFTEVDVCByZWxuYW1lLCByZWxmaWxlbm9k ZQorRlJPTSBwZ19jbGFzcworV0hFUkUgcmVsbmFtZSBJTiAoJ2Nsc3RyXzEnLCAnY2xzdHJfMics ICdjbHN0cl8zJykpOworCistLSBEbyB0aGUgYWN0dWFsIGNvbXBhcmlzb24uIFVubGlrZSBDTFVT VEVSLCBjbHN0cl8zIHNob3VsZCBoYXZlIGJlZW4KKy0tIHByb2Nlc3NlZCBiZWNhdXNlIHRoZXJl IGlzIG5vdGhpbmcgbGlrZSBjbHVzdGVyaW5nIGluZGV4IGhlcmUuCitTRUxFQ1Qgby5yZWxuYW1l IEZST00gcmVsbm9kZXNfb2xkIG8KK0pPSU4gcmVsbm9kZXNfbmV3IG4gT04gby5yZWxuYW1lID0g bi5yZWxuYW1lCitXSEVSRSBvLnJlbGZpbGVub2RlIDw+IG4ucmVsZmlsZW5vZGUKK09SREVSIEJZ IG8ucmVsbmFtZTsKKworU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiByZWdyZXNzX2Nsc3RyX3Vz ZXI7CisKIC0tIFRlc3QgTVZDQy1zYWZldHkgb2YgY2x1c3Rlci4gVGhlcmUgaXNuJ3QgbXVjaCB3 ZSBjYW4gZG8gdG8gdmVyaWZ5IHRoZQogLS0gcmVzdWx0cyB3aXRoIGEgc2luZ2xlIGJhY2tlbmQu Li4KIApAQCAtMjI5LDYgKzI3MCwyNCBAQCBTRUxFQ1QgcmVsbmFtZSwgb2xkLmxldmVsLCBvbGQu cmVsa2luZCwgb2xkLnJlbGZpbGVub2RlID0gbmV3LnJlbGZpbGVub2RlIEZST00gbwogQ0xVU1RF UiBjbHN0cnBhcnQ7CiBBTFRFUiBUQUJMRSBjbHN0cnBhcnQgU0VUIFdJVEhPVVQgQ0xVU1RFUjsK IEFMVEVSIFRBQkxFIGNsc3RycGFydCBDTFVTVEVSIE9OIGNsc3RycGFydF9pZHg7CisKKy0tIENo ZWNrIHRoYXQgUkVQQUNLIHNldHMgbmV3IHJlbGZpbGVub2RlczogaXQgc2hvdWxkIHByb2Nlc3Mg ZXhhY3RseSB0aGUgc2FtZQorLS0gdGFibGVzIGFzIENMVVNURVIgZGlkLgorRFJPUCBUQUJMRSBv bGRfY2x1c3Rlcl9pbmZvOworRFJPUCBUQUJMRSBuZXdfY2x1c3Rlcl9pbmZvOworQ1JFQVRFIFRF TVAgVEFCTEUgb2xkX2NsdXN0ZXJfaW5mbyBBUyBTRUxFQ1QgcmVsbmFtZSwgbGV2ZWwsIHJlbGZp bGVub2RlLCByZWxraW5kIEZST00gcGdfcGFydGl0aW9uX3RyZWUoJ2Nsc3RycGFydCc6OnJlZ2Ns YXNzKSBBUyB0cmVlIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9pZD10cmVlLnJlbGlkIDsKK1JFUEFD SyBjbHN0cnBhcnQgVVNJTkcgSU5ERVggY2xzdHJwYXJ0X2lkeDsKK0NSRUFURSBURU1QIFRBQkxF IG5ld19jbHVzdGVyX2luZm8gQVMgU0VMRUNUIHJlbG5hbWUsIGxldmVsLCByZWxmaWxlbm9kZSwg cmVsa2luZCBGUk9NIHBnX3BhcnRpdGlvbl90cmVlKCdjbHN0cnBhcnQnOjpyZWdjbGFzcykgQVMg dHJlZSBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQ9dHJlZS5yZWxpZCA7CitTRUxFQ1QgcmVsbmFt ZSwgb2xkLmxldmVsLCBvbGQucmVsa2luZCwgb2xkLnJlbGZpbGVub2RlID0gbmV3LnJlbGZpbGVu b2RlIEZST00gb2xkX2NsdXN0ZXJfaW5mbyBBUyBvbGQgSk9JTiBuZXdfY2x1c3Rlcl9pbmZvIEFT IG5ldyBVU0lORyAocmVsbmFtZSkgT1JERVIgQlkgcmVsbmFtZSBDT0xMQVRFICJDIjsKKworLS0g QW5kIGZpbmFsbHkgdGhlIHNhbWUgZm9yIFJFUEFDSyB3L28gaW5kZXguCitEUk9QIFRBQkxFIG9s ZF9jbHVzdGVyX2luZm87CitEUk9QIFRBQkxFIG5ld19jbHVzdGVyX2luZm87CitDUkVBVEUgVEVN UCBUQUJMRSBvbGRfY2x1c3Rlcl9pbmZvIEFTIFNFTEVDVCByZWxuYW1lLCBsZXZlbCwgcmVsZmls ZW5vZGUsIHJlbGtpbmQgRlJPTSBwZ19wYXJ0aXRpb25fdHJlZSgnY2xzdHJwYXJ0Jzo6cmVnY2xh c3MpIEFTIHRyZWUgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkPXRyZWUucmVsaWQgOworUkVQQUNL IGNsc3RycGFydDsKK0NSRUFURSBURU1QIFRBQkxFIG5ld19jbHVzdGVyX2luZm8gQVMgU0VMRUNU IHJlbG5hbWUsIGxldmVsLCByZWxmaWxlbm9kZSwgcmVsa2luZCBGUk9NIHBnX3BhcnRpdGlvbl90 cmVlKCdjbHN0cnBhcnQnOjpyZWdjbGFzcykgQVMgdHJlZSBKT0lOIHBnX2NsYXNzIGMgT04gYy5v aWQ9dHJlZS5yZWxpZCA7CitTRUxFQ1QgcmVsbmFtZSwgb2xkLmxldmVsLCBvbGQucmVsa2luZCwg b2xkLnJlbGZpbGVub2RlID0gbmV3LnJlbGZpbGVub2RlIEZST00gb2xkX2NsdXN0ZXJfaW5mbyBB UyBvbGQgSk9JTiBuZXdfY2x1c3Rlcl9pbmZvIEFTIG5ldyBVU0lORyAocmVsbmFtZSkgT1JERVIg QlkgcmVsbmFtZSBDT0xMQVRFICJDIjsKKwogRFJPUCBUQUJMRSBjbHN0cnBhcnQ7CiAKIC0tIE93 bmVyc2hpcCBvZiBwYXJ0aXRpb25zIGlzIGNoZWNrZWQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK aW5kZXggYTEzZTgxNjI4OTAuLjk4MjQyZTI1NDMyIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtMjUzNyw2ICsyNTM3LDggQEAgUmVvcmRlckJ1ZmZlclR1cGxlQ2lkS2V5CiBSZW9yZGVy QnVmZmVyVXBkYXRlUHJvZ3Jlc3NUeG5DQgogUmVvcmRlclR1cGxlCiBSZXBPcmlnaW5JZAorUmVw YWNrQ29tbWFuZAorUmVwYWNrU3RtdAogUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aEJ5Q2hpbGRf ZnVuY3Rpb24KIFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY29udGV4dAogUmVwbGFjZVZhcnNO b01hdGNoT3B0aW9uCkBAIC0yNjAzLDYgKzI2MDUsNyBAQCBSdGxOdFN0YXR1c1RvRG9zRXJyb3Jf dAogUnVsZUluZm8KIFJ1bGVMb2NrCiBSdWxlU3RtdAorUnVuTW9kZQogUnVubmluZ1RyYW5zYWN0 aW9ucwogUnVubmluZ1RyYW5zYWN0aW9uc0RhdGEKIFNBU0xTdGF0dXMKLS0gCjIuNDMuMAoK --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0004-Move-conversion-of-a-historic-to-MVCC-snapshot-t.patch" Content-Disposition: attachment; filename="v21-0004-Move-conversion-of-a-historic-to-MVCC-snapshot-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vup3 RnJvbSBiOTM4NGFhNjJjOTZjOTRkNDViYjdlOTdhNTZhY2RhNTU5MGYwYzVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmluIEhvdXNrYSA8YWhAY3liZXJ0ZWMuYXQ+CkRhdGU6 IE1vbiwgMTEgQXVnIDIwMjUgMTU6MjM6MDUgKzAyMDAKU3ViamVjdDogW1BBVENIIHYyMSA0LzZd IE1vdmUgY29udmVyc2lvbiBvZiBhICJoaXN0b3JpYyIgdG8gTVZDQyBzbmFwc2hvdCB0byBhCiBz ZXBhcmF0ZSBmdW5jdGlvbi4KClRoZSBjb252ZXJzaW9uIGlzIG5vdyBoYW5kbGVkIGJ5IFNuYXBC dWlsZE1WQ0NGcm9tSGlzdG9yaWMoKS4gUkVQQUNLCkNPTkNVUlJFTlRMWSB3aWxsIGFsc28gbmVl ZCBpdC4KLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jIHwg NTEgKysrKysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3Iu YyAgICAgICAgICAgIHwgIDMgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5o ICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmggICAgICAgICAgICAg ICAgIHwgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBi dWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwppbmRl eCA5OGRkZWUyMDkyOS4uYTJmMTgwMzYyMmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtNDQwLDEwICs0NDAsNyBAQCBTbmFwc2hvdAogU25hcEJ1 aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIHsKIAlTbmFwc2hvdAlzbmFw OwotCVRyYW5zYWN0aW9uSWQgeGlkOwogCVRyYW5zYWN0aW9uSWQgc2FmZVhpZDsKLQlUcmFuc2Fj dGlvbklkICpuZXd4aXA7Ci0JaW50CQkJbmV3eGNudCA9IDA7CiAKIAlBc3NlcnQoWGFjdElzb0xl dmVsID09IFhBQ1RfUkVQRUFUQUJMRV9SRUFEKTsKIAlBc3NlcnQoYnVpbGRlci0+YnVpbGRpbmdf ZnVsbF9zbmFwc2hvdCk7CkBAIC00ODUsNiArNDgyLDMxIEBAIFNuYXBCdWlsZEluaXRpYWxTbmFw c2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAKIAlNeVByb2MtPnhtaW4gPSBzbmFwLT54bWluOwog CisJLyogQ29udmVydCB0aGUgaGlzdG9yaWMgc25hcHNob3QgdG8gTVZDQyBzbmFwc2hvdC4gKi8K KwlyZXR1cm4gU25hcEJ1aWxkTVZDQ0Zyb21IaXN0b3JpYyhzbmFwLCB0cnVlKTsKK30KKworLyoK KyAqIFR1cm4gYSBoaXN0b3JpYyBNVkNDIHNuYXBzaG90IGludG8gYW4gb3JkaW5hcnkgTVZDQyBz bmFwc2hvdC4KKyAqCisgKiBVbmxpa2UgYSByZWd1bGFyIChub24taGlzdG9yaWMpIE1WQ0Mgc25h cHNob3QsIHRoZSB4aXAgYXJyYXkgb2YgdGhpcworICogc25hcHNob3QgY29udGFpbnMgbm90IG9u bHkgcnVubmluZyBtYWluIHRyYW5zYWN0aW9ucywgYnV0IGFsc28gdGhlaXIKKyAqIHN1YnRyYW5z YWN0aW9ucy4gVGhpcyBkaWZmZXJlbmNlIGRvZXMgaGFzIG5vIGltcGFjdCBvbiBYaWRJbk1WQ0NT bmFwc2hvdCgpLgorICoKKyAqIFBhc3MgdHJ1ZSBmb3IgJ2luX3BsYWNlJyBpZiB5b3UgZG9uJ3Qg Y2FyZSBhYm91dCBtb2RpZnlpbmcgdGhlIHNvdXJjZQorICogc25hcHNob3QuIElmIHlvdSBuZWVk IGEgbmV3IGluc3RhbmNlLCBhbmQgb25lIHRoYXQgd2FzIGFsbG9jYXRlZCBhcyBhCisgKiBzaW5n bGUgY2h1bmsgb2YgbWVtb3J5LCBwYXNzIGZhbHNlLgorICovCitTbmFwc2hvdAorU25hcEJ1aWxk TVZDQ0Zyb21IaXN0b3JpYyhTbmFwc2hvdCBzbmFwc2hvdCwgYm9vbCBpbl9wbGFjZSkKK3sKKwlU cmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlvbklkICpvbGR4aXAgPSBzbmFwc2hvdC0+eGlw OworCXVpbnQzMgkJb2xkeGNudCA9IHNuYXBzaG90LT54Y250OworCVRyYW5zYWN0aW9uSWQgKm5l d3hpcDsKKwlpbnQJCQluZXd4Y250ID0gMDsKKwlTbmFwc2hvdAlyZXN1bHQ7CisKIAkvKiBhbGxv Y2F0ZSBpbiB0cmFuc2FjdGlvbiBjb250ZXh0ICovCiAJbmV3eGlwID0gKFRyYW5zYWN0aW9uSWQg KikKIAkJcGFsbG9jKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIEdldE1heFNuYXBzaG90WGlkQ291 bnQoKSk7CkBAIC00OTUsNyArNTE3LDcgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBC dWlsZCAqYnVpbGRlcikKIAkgKiBjbGFzc2ljYWwgc25hcHNob3QgYnkgbWFya2luZyBhbGwgbm9u LWNvbW1pdHRlZCB0cmFuc2FjdGlvbnMgYXMKIAkgKiBpbi1wcm9ncmVzcy4gVGhpcyBjYW4gYmUg ZXhwZW5zaXZlLgogCSAqLwotCWZvciAoeGlkID0gc25hcC0+eG1pbjsgTm9ybWFsVHJhbnNhY3Rp b25JZFByZWNlZGVzKHhpZCwgc25hcC0+eG1heCk7KQorCWZvciAoeGlkID0gc25hcHNob3QtPnht aW47IE5vcm1hbFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQsIHNuYXBzaG90LT54bWF4KTspCiAJ ewogCQl2b2lkCSAgICp0ZXN0OwogCkBAIC01MDMsNyArNTI1LDcgQEAgU25hcEJ1aWxkSW5pdGlh bFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIAkJICogQ2hlY2sgd2hldGhlciB0cmFuc2Fj dGlvbiBjb21taXR0ZWQgdXNpbmcgdGhlIGRlY29kaW5nIHNuYXBzaG90CiAJCSAqIG1lYW5pbmcg b2YgLT54aXAuCiAJCSAqLwotCQl0ZXN0ID0gYnNlYXJjaCgmeGlkLCBzbmFwLT54aXAsIHNuYXAt PnhjbnQsCisJCXRlc3QgPSBic2VhcmNoKCZ4aWQsIHNuYXBzaG90LT54aXAsIHNuYXBzaG90LT54 Y250LAogCQkJCQkgICBzaXplb2YoVHJhbnNhY3Rpb25JZCksIHhpZENvbXBhcmF0b3IpOwogCiAJ CWlmICh0ZXN0ID09IE5VTEwpCkBAIC01MjAsMTEgKzU0MiwyMiBAQCBTbmFwQnVpbGRJbml0aWFs U25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQogCX0KIAogCS8qIGFkanVzdCByZW1haW5pbmcg c25hcHNob3QgZmllbGRzIGFzIG5lZWRlZCAqLwotCXNuYXAtPnNuYXBzaG90X3R5cGUgPSBTTkFQ U0hPVF9NVkNDOwotCXNuYXAtPnhjbnQgPSBuZXd4Y250OwotCXNuYXAtPnhpcCA9IG5ld3hpcDsK KwlzbmFwc2hvdC0+eGNudCA9IG5ld3hjbnQ7CisJc25hcHNob3QtPnhpcCA9IG5ld3hpcDsKIAot CXJldHVybiBzbmFwOworCWlmIChpbl9wbGFjZSkKKwkJcmVzdWx0ID0gc25hcHNob3Q7CisJZWxz ZQorCXsKKwkJcmVzdWx0ID0gQ29weVNuYXBzaG90KHNuYXBzaG90KTsKKworCQkvKiBSZXN0b3Jl IHRoZSBvcmlnaW5hbCB2YWx1ZXMgc28gdGhlIHNvdXJjZSBpcyBpbnRhY3QuICovCisJCXNuYXBz aG90LT54aXAgPSBvbGR4aXA7CisJCXNuYXBzaG90LT54Y250ID0gb2xkeGNudDsKKwl9CisJcmVz dWx0LT5zbmFwc2hvdF90eXBlID0gU05BUFNIT1RfTVZDQzsKKworCXJldHVybiByZXN1bHQ7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IDY1NTYxY2M2YmMzLi5iYzc4NDAw NTJmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKQEAgLTIxMiw3ICsyMTIsNiBAQCB0eXBl ZGVmIHN0cnVjdCBFeHBvcnRlZFNuYXBzaG90CiBzdGF0aWMgTGlzdCAqZXhwb3J0ZWRTbmFwc2hv dHMgPSBOSUw7CiAKIC8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucyAqLwotc3RhdGlj IFNuYXBzaG90IENvcHlTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCk7CiBzdGF0aWMgdm9pZCBV bnJlZ2lzdGVyU25hcHNob3ROb093bmVyKFNuYXBzaG90IHNuYXBzaG90KTsKIHN0YXRpYyB2b2lk IEZyZWVTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCk7CiBzdGF0aWMgdm9pZCBTbmFwc2hvdFJl c2V0WG1pbih2b2lkKTsKQEAgLTYwMiw3ICs2MDEsNyBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90 KFNuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAog ICogVGhlIGNvcHkgaXMgcGFsbG9jJ2QgaW4gVG9wVHJhbnNhY3Rpb25Db250ZXh0IGFuZCBoYXMg aW5pdGlhbCByZWZjb3VudHMgc2V0CiAgKiB0byAwLiAgVGhlIHJldHVybmVkIHNuYXBzaG90IGhh cyB0aGUgY29waWVkIGZsYWcgc2V0LgogICovCi1zdGF0aWMgU25hcHNob3QKK1NuYXBzaG90CiBD b3B5U25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCiB7CiAJU25hcHNob3QJbmV3c25hcDsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmgKaW5kZXggNDQwMzFkY2Y2ZTMuLjZkNGQyZDE4MTRj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaAorKysgYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaApAQCAtNzMsNiArNzMsNyBAQCBleHRl cm4gdm9pZCBGcmVlU25hcHNob3RCdWlsZGVyKFNuYXBCdWlsZCAqYnVpbGRlcik7CiBleHRlcm4g dm9pZCBTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoU25hcHNob3Qgc25hcCk7CiAKIGV4dGVybiBT bmFwc2hvdCBTbmFwQnVpbGRJbml0aWFsU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKTsKK2V4 dGVybiBTbmFwc2hvdCBTbmFwQnVpbGRNVkNDRnJvbUhpc3RvcmljKFNuYXBzaG90IHNuYXBzaG90 LCBib29sIGluX3BsYWNlKTsKIGV4dGVybiBjb25zdCBjaGFyICpTbmFwQnVpbGRFeHBvcnRTbmFw c2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpOwogZXh0ZXJuIHZvaWQgU25hcEJ1aWxkQ2xlYXJFeHBv cnRlZFNuYXBzaG90KHZvaWQpOwogZXh0ZXJuIHZvaWQgU25hcEJ1aWxkUmVzZXRFeHBvcnRlZFNu YXBzaG90U3RhdGUodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdy LmggYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKaW5kZXggNjA0YzFmOTAyMTYuLmY2NWY4 M2M4NWNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvc25hcG1nci5oCkBAIC02Myw2ICs2Myw3IEBAIGV4dGVybiBTbmFwc2hv dCBHZXRUcmFuc2FjdGlvblNuYXBzaG90KHZvaWQpOwogZXh0ZXJuIFNuYXBzaG90IEdldExhdGVz dFNuYXBzaG90KHZvaWQpOwogZXh0ZXJuIHZvaWQgU25hcHNob3RTZXRDb21tYW5kSWQoQ29tbWFu ZElkIGN1cmNpZCk7CiAKK2V4dGVybiBTbmFwc2hvdCBDb3B5U25hcHNob3QoU25hcHNob3Qgc25h cHNob3QpOwogZXh0ZXJuIFNuYXBzaG90IEdldENhdGFsb2dTbmFwc2hvdChPaWQgcmVsaWQpOwog ZXh0ZXJuIFNuYXBzaG90IEdldE5vbkhpc3RvcmljQ2F0YWxvZ1NuYXBzaG90KE9pZCByZWxpZCk7 CiBleHRlcm4gdm9pZCBJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KHZvaWQpOwotLSAKMi40My4w Cgo= --000000000000d95176063dcf3119 Content-Type: application/octet-stream; name="v21-0001-Split-vacuumdb-to-create-vacuuming.c-h.patch" Content-Disposition: attachment; filename="v21-0001-Split-vacuumdb-to-create-vacuuming.c-h.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mf2d4vur5 RnJvbSAyMjA2YjIxNWE4ODU1Y2Y4YTljMjk4ODlmNWZlYWI0YTBiZDhhN2UwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/PUMzPTgxbHZhcm89MjBIZXJyZXJhPz0gPGFs dmhlcnJlQGt1cmlsZW11LmRlPgpEYXRlOiBTYXQsIDMwIEF1ZyAyMDI1IDE0OjM5OjQ5ICswMjAw ClN1YmplY3Q6IFtQQVRDSCB2MjEgMS82XSBTcGxpdCB2YWN1dW1kYiB0byBjcmVhdGUgdmFjdXVt aW5nLmMvaAoKLS0tCiBzcmMvYmluL3NjcmlwdHMvTWFrZWZpbGUgICAgfCAgICA0ICstCiBzcmMv YmluL3NjcmlwdHMvbWVzb24uYnVpbGQgfCAgIDI4ICstCiBzcmMvYmluL3NjcmlwdHMvdmFjdXVt ZGIuYyAgfCAxMDQ4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmlu L3NjcmlwdHMvdmFjdXVtaW5nLmMgfCAgOTc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmggfCAgIDk1ICsrKysKIDUgZmlsZXMgY2hh bmdlZCwgMTExOSBpbnNlcnRpb25zKCspLCAxMDM0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Yy9iaW4vc2NyaXB0cy92YWN1dW1pbmcuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vc2NyaXB0cy9N YWtlZmlsZSBiL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZQppbmRleCBmNmI0ZDQwODEwYi4uMDE5 Y2EwNjQ1NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vc2NyaXB0cy9NYWtlZmlsZQorKysgYi9zcmMv YmluL3NjcmlwdHMvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAgY3JlYXRldXNlcjogY3JlYXRl dXNlci5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBn cG9ydAogZHJvcGRiOiBkcm9wZGIubyBjb21tb24ubyAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGli cHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKIGRyb3B1c2VyOiBkcm9w dXNlci5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBn cG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogY2x1c3RlcmRiOiBjbHVzdGVyZGIubyBjb21tb24u byAkKFdJTjMyUkVTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1s aWJwZ2ZldXRpbHMKLXZhY3V1bWRiOiB2YWN1dW1kYi5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwg c3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwordmFj dXVtZGI6IHZhY3V1bWRiLm8gdmFjdXVtaW5nLm8gY29tbW9uLm8gJChXSU4zMlJFUykgfCBzdWJt YWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCiByZWluZGV4 ZGI6IHJlaW5kZXhkYi5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJt YWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogcGdfaXNyZWFkeTogcGdfaXNyZWFk eS5vIGNvbW1vbi5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9y dCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCkBAIC01MCw3ICs1MCw3IEBAIHVuaW5zdGFsbDoKIAog Y2xlYW4gZGlzdGNsZWFuOgogCXJtIC1mICQoYWRkc3VmZml4ICQoWCksICQoUFJPR1JBTVMpKSAk KGFkZHN1ZmZpeCAubywgJChQUk9HUkFNUykpCi0Jcm0gLWYgY29tbW9uLm8gJChXSU4zMlJFUykK KwlybSAtZiBjb21tb24ubyB2YWN1dW1pbmcubyAkKFdJTjMyUkVTKQogCXJtIC1yZiB0bXBfY2hl Y2sKIAogZXhwb3J0IHdpdGhfaWN1CmRpZmYgLS1naXQgYS9zcmMvYmluL3NjcmlwdHMvbWVzb24u YnVpbGQgYi9zcmMvYmluL3NjcmlwdHMvbWVzb24uYnVpbGQKaW5kZXggODBkZjdjMzMyNTcuLmE0 ZmVkNTlkMWM5IDEwMDY0NAotLS0gYS9zcmMvYmluL3NjcmlwdHMvbWVzb24uYnVpbGQKKysrIGIv c3JjL2Jpbi9zY3JpcHRzL21lc29uLmJ1aWxkCkBAIC0xMiw3ICsxMiw2IEBAIGJpbmFyaWVzID0g WwogICAnY3JlYXRldXNlcicsCiAgICdkcm9wdXNlcicsCiAgICdjbHVzdGVyZGInLAotICAndmFj dXVtZGInLAogICAncmVpbmRleGRiJywKICAgJ3BnX2lzcmVhZHknLAogXQpAQCAtMzUsNiArMzQs MzMgQEAgZm9yZWFjaCBiaW5hcnkgOiBiaW5hcmllcwogICBiaW5fdGFyZ2V0cyArPSBiaW5hcnkK IGVuZGZvcmVhY2gKIAordmFjdXVtaW5nX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJ2YWN1 dW1pbmdfY29tbW9uJywKKyAgZmlsZXMoJ2NvbW1vbi5jJywgJ3ZhY3V1bWluZy5jJyksCisgIGRl cGVuZGVuY2llczogW2Zyb250ZW5kX2NvZGUsIGxpYnBxXSwKKyAga3dhcmdzOiBpbnRlcm5hbF9s aWJfYXJncywKKykKKworYmluYXJpZXMgPSBbCisgICd2YWN1dW1kYicsCitdCitmb3JlYWNoIGJp bmFyeSA6IGJpbmFyaWVzCisgIGJpbmFyeV9zb3VyY2VzID0gZmlsZXMoJ0AwQC5jJy5mb3JtYXQo YmluYXJ5KSkKKworICBpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgICBiaW5hcnlfc291 cmNlcyArPSByY19iaW5fZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAg ICAgICctLU5BTUUnLCBiaW5hcnksCisgICAgICAnLS1GSUxFREVTQycsICdAMEAgLSBQb3N0Z3Jl U1FMIHV0aWxpdHknLmZvcm1hdChiaW5hcnkpLF0pCisgIGVuZGlmCisKKyAgYmluYXJ5ID0gZXhl Y3V0YWJsZShiaW5hcnksCisgICAgYmluYXJ5X3NvdXJjZXMsCisgICAgbGlua193aXRoOiBbdmFj dXVtaW5nX2NvbW1vbl0sCisgICAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZSwgbGlicHFd LAorICAgIGt3YXJnczogZGVmYXVsdF9iaW5fYXJncywKKyAgKQorICBiaW5fdGFyZ2V0cyArPSBi aW5hcnkKK2VuZGZvcmVhY2gKKwogdGVzdHMgKz0gewogICAnbmFtZSc6ICdzY3JpcHRzJywKICAg J3NkJzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCmRpZmYgLS1naXQgYS9zcmMvYmluL3Nj cmlwdHMvdmFjdXVtZGIuYyBiL3NyYy9iaW4vc2NyaXB0cy92YWN1dW1kYi5jCmluZGV4IGZkMjM2 MDg3ZTkwLi5iMWJlNjFkZGYyNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWRi LmMKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWRiLmMKQEAgLTE0LDkyICsxNCwxMyBAQAog CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKLSNpbmNsdWRlICJjYXRhbG9nL3BnX2F0dHJpYnV0ZV9k LmgiCi0jaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzc19kLmgiCiAjaW5jbHVkZSAiY29tbW9uLmgi Ci0jaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKICNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5o IgotI2luY2x1ZGUgImZlX3V0aWxzL2NhbmNlbC5oIgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlv bl91dGlscy5oIgotI2luY2x1ZGUgImZlX3V0aWxzL3BhcmFsbGVsX3Nsb3QuaCIKLSNpbmNsdWRl ICJmZV91dGlscy9xdWVyeV91dGlscy5oIgotI2luY2x1ZGUgImZlX3V0aWxzL3NpbXBsZV9saXN0 LmgiCi0jaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCi0KLQotLyogdmFjdXVtIG9w dGlvbnMgY29udHJvbGxlZCBieSB1c2VyIGZsYWdzICovCi10eXBlZGVmIHN0cnVjdCB2YWN1dW1p bmdPcHRpb25zCi17Ci0JYm9vbAkJYW5hbHl6ZV9vbmx5OwotCWJvb2wJCXZlcmJvc2U7Ci0JYm9v bAkJYW5kX2FuYWx5emU7Ci0JYm9vbAkJZnVsbDsKLQlib29sCQlmcmVlemU7Ci0JYm9vbAkJZGlz YWJsZV9wYWdlX3NraXBwaW5nOwotCWJvb2wJCXNraXBfbG9ja2VkOwotCWludAkJCW1pbl94aWRf YWdlOwotCWludAkJCW1pbl9teGlkX2FnZTsKLQlpbnQJCQlwYXJhbGxlbF93b3JrZXJzOwkvKiA+ PSAwIGluZGljYXRlcyB1c2VyIHNwZWNpZmllZCB0aGUKLQkJCQkJCQkJCSAqIHBhcmFsbGVsIGRl Z3JlZSwgb3RoZXJ3aXNlIC0xICovCi0JYm9vbAkJbm9faW5kZXhfY2xlYW51cDsKLQlib29sCQlm b3JjZV9pbmRleF9jbGVhbnVwOwotCWJvb2wJCWRvX3RydW5jYXRlOwotCWJvb2wJCXByb2Nlc3Nf bWFpbjsKLQlib29sCQlwcm9jZXNzX3RvYXN0OwotCWJvb2wJCXNraXBfZGF0YWJhc2Vfc3RhdHM7 Ci0JY2hhcgkgICAqYnVmZmVyX3VzYWdlX2xpbWl0OwotCWJvb2wJCW1pc3Npbmdfc3RhdHNfb25s eTsKLX0gdmFjdXVtaW5nT3B0aW9uczsKLQotLyogb2JqZWN0IGZpbHRlciBvcHRpb25zICovCi10 eXBlZGVmIGVudW0KLXsKLQlPQkpGSUxURVJfTk9ORSA9IDAsCQkJLyogbm8gZmlsdGVyIHVzZWQg Ki8KLQlPQkpGSUxURVJfQUxMX0RCUyA9ICgxIDw8IDApLAkvKiAtYSB8IC0tYWxsICovCi0JT0JK RklMVEVSX0RBVEFCQVNFID0gKDEgPDwgMSksCS8qIC1kIHwgLS1kYm5hbWUgKi8KLQlPQkpGSUxU RVJfVEFCTEUgPSAoMSA8PCAyKSwgLyogLXQgfCAtLXRhYmxlICovCi0JT0JKRklMVEVSX1NDSEVN QSA9ICgxIDw8IDMpLAkvKiAtbiB8IC0tc2NoZW1hICovCi0JT0JKRklMVEVSX1NDSEVNQV9FWENM VURFID0gKDEgPDwgNCksCS8qIC1OIHwgLS1leGNsdWRlLXNjaGVtYSAqLwotfSBWYWNPYmpGaWx0 ZXI7Ci0KLXN0YXRpYyBWYWNPYmpGaWx0ZXIgb2JqZmlsdGVyID0gT0JKRklMVEVSX05PTkU7Ci0K LXN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0ICpyZXRyaWV2ZV9vYmplY3RzKFBHY29ubiAqY29ubiwK LQkJCQkJCQkJCQkgIHZhY3V1bWluZ09wdGlvbnMgKnZhY29wdHMsCi0JCQkJCQkJCQkJICBTaW1w bGVTdHJpbmdMaXN0ICpvYmplY3RzLAotCQkJCQkJCQkJCSAgYm9vbCBlY2hvKTsKLQotc3RhdGlj IHZvaWQgdmFjdXVtX29uZV9kYXRhYmFzZShDb25uUGFyYW1zICpjcGFyYW1zLAotCQkJCQkJCQl2 YWN1dW1pbmdPcHRpb25zICp2YWNvcHRzLAotCQkJCQkJCQlpbnQgc3RhZ2UsCi0JCQkJCQkJCVNp bXBsZVN0cmluZ0xpc3QgKm9iamVjdHMsCi0JCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgKipmb3Vu ZF9vYmpzLAotCQkJCQkJCQlpbnQgY29uY3VycmVudENvbnMsCi0JCQkJCQkJCWNvbnN0IGNoYXIg KnByb2duYW1lLCBib29sIGVjaG8sIGJvb2wgcXVpZXQpOwotCi1zdGF0aWMgdm9pZCB2YWN1dW1f YWxsX2RhdGFiYXNlcyhDb25uUGFyYW1zICpjcGFyYW1zLAotCQkJCQkJCQkgdmFjdXVtaW5nT3B0 aW9ucyAqdmFjb3B0cywKLQkJCQkJCQkJIGJvb2wgYW5hbHl6ZV9pbl9zdGFnZXMsCi0JCQkJCQkJ CSBTaW1wbGVTdHJpbmdMaXN0ICpvYmplY3RzLAotCQkJCQkJCQkgaW50IGNvbmN1cnJlbnRDb25z LAotCQkJCQkJCQkgY29uc3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCBxdWlldCk7 Ci0KLXN0YXRpYyB2b2lkIHByZXBhcmVfdmFjdXVtX2NvbW1hbmQoUFFFeHBCdWZmZXIgc3FsLCBp bnQgc2VydmVyVmVyc2lvbiwKLQkJCQkJCQkJICAgdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywg Y29uc3QgY2hhciAqdGFibGUpOwotCi1zdGF0aWMgdm9pZCBydW5fdmFjdXVtX2NvbW1hbmQoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpzcWwsIGJvb2wgZWNobywKLQkJCQkJCQkgICBjb25zdCBj aGFyICp0YWJsZSk7CisjaW5jbHVkZSAidmFjdXVtaW5nLmgiCiAKIHN0YXRpYyB2b2lkIGhlbHAo Y29uc3QgY2hhciAqcHJvZ25hbWUpOwotCi12b2lkCQljaGVja19vYmpmaWx0ZXIodm9pZCk7Ci0K LXN0YXRpYyBjaGFyICplc2NhcGVfcXVvdGVzKGNvbnN0IGNoYXIgKnNyYyk7Ci0KLS8qIEZvciBh bmFseXplLWluLXN0YWdlcyBtb2RlICovCi0jZGVmaW5lIEFOQUxZWkVfTk9fU1RBR0UJLTEKLSNk ZWZpbmUgQU5BTFlaRV9OVU1fU1RBR0VTCTMKLQorc3RhdGljIHZvaWQgY2hlY2tfb2JqZmlsdGVy KHZvaWQpOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTE0NSwxMCAr NjYsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkJYzsKIAljb25zdCBj aGFyICpkYm5hbWUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm1haW50ZW5hbmNlX2RiID0gTlVMTDsK LQljaGFyCSAgICpob3N0ID0gTlVMTDsKLQljaGFyCSAgICpwb3J0ID0gTlVMTDsKLQljaGFyCSAg ICp1c2VybmFtZSA9IE5VTEw7Ci0JZW51bSB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQgPSBUUklf REVGQVVMVDsKIAlDb25uUGFyYW1zCWNwYXJhbXM7CiAJYm9vbAkJZWNobyA9IGZhbHNlOwogCWJv b2wJCXF1aWV0ID0gZmFsc2U7CkBAIC0xNjgsMTMgKzg1LDE4IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAl2YWNvcHRzLnByb2Nlc3NfbWFpbiA9IHRydWU7CiAJdmFjb3B0cy5wcm9j ZXNzX3RvYXN0ID0gdHJ1ZTsKIAorCS8qIHRoZSBzYW1lIGZvciBjb25uZWN0aW9uIHBhcmFtZXRl cnMgKi8KKwltZW1zZXQoJmNwYXJhbXMsIDAsIHNpemVvZihjcGFyYW1zKSk7CisJY3BhcmFtcy5w cm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKKwogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBd KTsKIAlwcm9nbmFtZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKIAlzZXRfcGdsb2NhbGVfcGdz ZXJ2aWNlKGFyZ3ZbMF0sIFBHX1RFWFRET01BSU4oInBnc2NyaXB0cyIpKTsKIAotCWhhbmRsZV9o ZWxwX3ZlcnNpb25fb3B0cyhhcmdjLCBhcmd2LCAidmFjdXVtZGIiLCBoZWxwKTsKKwloYW5kbGVf aGVscF92ZXJzaW9uX29wdHMoYXJnYywgYXJndiwgcHJvZ25hbWUsIGhlbHApOwogCi0Jd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFkOmVmRmg6ajpuOk46cDpQOnF0OlU6dndX eloiLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJhZDplZkZoOmo6bjpOOnA6UDpxdDpVOnZ3V3paIiwKKwkJCQkJ CQlsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7 CkBAIC0xOTUsNyArMTE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCXZh Y29wdHMuZnJlZXplID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgotCQkJCWhvc3Qg PSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQljcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRh cmcpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAnaic6CiAJCQkJaWYgKCFvcHRpb25fcGFyc2VfaW50 KG9wdGFyZywgIi1qLy0tam9icyIsIDEsIElOVF9NQVgsCkBAIC0yMTEsNyArMTMzLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQo Jm9iamVjdHMsIG9wdGFyZyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdwJzoKLQkJCQlwb3J0ID0g cGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJY3BhcmFtcy5wZ3BvcnQgPSBwZ19zdHJkdXAob3B0YXJn KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ1AnOgogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChv cHRhcmcsICItUC8tLXBhcmFsbGVsIiwgMCwgSU5UX01BWCwKQEAgLTIyNywxNiArMTQ5LDE2IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQl0YmxfY291bnQrKzsKIAkJCQlicmVh azsKIAkJCWNhc2UgJ1UnOgotCQkJCXVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CisJCQkJ Y3BhcmFtcy5wZ3VzZXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAkJCWNhc2Ug J3YnOgogCQkJCXZhY29wdHMudmVyYm9zZSA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQljYXNlICd3 JzoKLQkJCQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfTk87CisJCQkJY3BhcmFtcy5wcm9tcHRfcGFz c3dvcmQgPSBUUklfTk87CiAJCQkJYnJlYWs7CiAJCQljYXNlICdXJzoKLQkJCQlwcm9tcHRfcGFz c3dvcmQgPSBUUklfWUVTOworCQkJCWNwYXJhbXMucHJvbXB0X3Bhc3N3b3JkID0gVFJJX1lFUzsK IAkJCQlicmVhazsKIAkJCWNhc2UgJ3onOgogCQkJCXZhY29wdHMuYW5kX2FuYWx5emUgPSB0cnVl OwpAQCAtMzgwLDY2ICszMDIsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXBn X2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIHdpdGhvdXQgXCIlc1wiIG9yIFwi JXNcIiIsCiAJCQkJICJtaXNzaW5nLXN0YXRzLW9ubHkiLCAiYW5hbHl6ZS1vbmx5IiwgImFuYWx5 emUtaW4tc3RhZ2VzIik7CiAKLQkvKiBmaWxsIGNwYXJhbXMgZXhjZXB0IGZvciBkYm5hbWUsIHdo aWNoIGlzIHNldCBiZWxvdyAqLwotCWNwYXJhbXMucGdob3N0ID0gaG9zdDsKLQljcGFyYW1zLnBn cG9ydCA9IHBvcnQ7Ci0JY3BhcmFtcy5wZ3VzZXIgPSB1c2VybmFtZTsKLQljcGFyYW1zLnByb21w dF9wYXNzd29yZCA9IHByb21wdF9wYXNzd29yZDsKLQljcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9 IE5VTEw7Ci0KLQlzZXR1cF9jYW5jZWxfaGFuZGxlcihOVUxMKTsKLQotCS8qIEF2b2lkIG9wZW5p bmcgZXh0cmEgY29ubmVjdGlvbnMuICovCi0JaWYgKHRibF9jb3VudCAmJiAoY29uY3VycmVudENv bnMgPiB0YmxfY291bnQpKQotCQljb25jdXJyZW50Q29ucyA9IHRibF9jb3VudDsKLQotCWlmIChv YmpmaWx0ZXIgJiBPQkpGSUxURVJfQUxMX0RCUykKLQl7Ci0JCWNwYXJhbXMuZGJuYW1lID0gbWFp bnRlbmFuY2VfZGI7Ci0KLQkJdmFjdXVtX2FsbF9kYXRhYmFzZXMoJmNwYXJhbXMsICZ2YWNvcHRz LAotCQkJCQkJCSBhbmFseXplX2luX3N0YWdlcywKLQkJCQkJCQkgJm9iamVjdHMsCi0JCQkJCQkJ IGNvbmN1cnJlbnRDb25zLAotCQkJCQkJCSBwcm9nbmFtZSwgZWNobywgcXVpZXQpOwotCX0KLQll bHNlCi0JewotCQlpZiAoZGJuYW1lID09IE5VTEwpCi0JCXsKLQkJCWlmIChnZXRlbnYoIlBHREFU QUJBU0UiKSkKLQkJCQlkYm5hbWUgPSBnZXRlbnYoIlBHREFUQUJBU0UiKTsKLQkJCWVsc2UgaWYg KGdldGVudigiUEdVU0VSIikpCi0JCQkJZGJuYW1lID0gZ2V0ZW52KCJQR1VTRVIiKTsKLQkJCWVs c2UKLQkJCQlkYm5hbWUgPSBnZXRfdXNlcl9uYW1lX29yX2V4aXQocHJvZ25hbWUpOwotCQl9Ci0K LQkJY3BhcmFtcy5kYm5hbWUgPSBkYm5hbWU7Ci0KLQkJaWYgKGFuYWx5emVfaW5fc3RhZ2VzKQot CQl7Ci0JCQlpbnQJCQlzdGFnZTsKLQkJCVNpbXBsZVN0cmluZ0xpc3QgKmZvdW5kX29ianMgPSBO VUxMOwotCi0JCQlmb3IgKHN0YWdlID0gMDsgc3RhZ2UgPCBBTkFMWVpFX05VTV9TVEFHRVM7IHN0 YWdlKyspCi0JCQl7Ci0JCQkJdmFjdXVtX29uZV9kYXRhYmFzZSgmY3BhcmFtcywgJnZhY29wdHMs Ci0JCQkJCQkJCQlzdGFnZSwKLQkJCQkJCQkJCSZvYmplY3RzLAotCQkJCQkJCQkJdmFjb3B0cy5t aXNzaW5nX3N0YXRzX29ubHkgPyAmZm91bmRfb2JqcyA6IE5VTEwsCi0JCQkJCQkJCQljb25jdXJy ZW50Q29ucywKLQkJCQkJCQkJCXByb2duYW1lLCBlY2hvLCBxdWlldCk7Ci0JCQl9Ci0JCX0KLQkJ ZWxzZQotCQkJdmFjdXVtX29uZV9kYXRhYmFzZSgmY3BhcmFtcywgJnZhY29wdHMsCi0JCQkJCQkJ CUFOQUxZWkVfTk9fU1RBR0UsCi0JCQkJCQkJCSZvYmplY3RzLCBOVUxMLAotCQkJCQkJCQljb25j dXJyZW50Q29ucywKLQkJCQkJCQkJcHJvZ25hbWUsIGVjaG8sIHF1aWV0KTsKLQl9Ci0KKwl2YWN1 dW1pbmdfbWFpbigmY3BhcmFtcywgZGJuYW1lLCBtYWludGVuYW5jZV9kYiwgJnZhY29wdHMsICZv YmplY3RzLAorCQkJCSAgIGFuYWx5emVfaW5fc3RhZ2VzLCB0YmxfY291bnQsIGNvbmN1cnJlbnRD b25zLAorCQkJCSAgIHByb2duYW1lLCBlY2hvLCBxdWlldCk7CiAJZXhpdCgwKTsKIH0KIApAQCAt NDY2LDg4NSArMzMxLDYgQEAgY2hlY2tfb2JqZmlsdGVyKHZvaWQpCiAJCXBnX2ZhdGFsKCJjYW5u b3QgdmFjdXVtIGFsbCB0YWJsZXMgaW4gc2NoZW1hKHMpIGFuZCBleGNsdWRlIHNjaGVtYShzKSBh dCB0aGUgc2FtZSB0aW1lIik7CiB9CiAKLS8qCi0gKiBSZXR1cm5zIGEgbmV3bHkgbWFsbG9jJ2Qg dmVyc2lvbiBvZiAnc3JjJyB3aXRoIGVzY2FwZWQgc2luZ2xlIHF1b3RlcyBhbmQKLSAqIGJhY2tz bGFzaGVzLgotICovCi1zdGF0aWMgY2hhciAqCi1lc2NhcGVfcXVvdGVzKGNvbnN0IGNoYXIgKnNy YykKLXsKLQljaGFyCSAgICpyZXN1bHQgPSBlc2NhcGVfc2luZ2xlX3F1b3Rlc19hc2NpaShzcmMp OwotCi0JaWYgKCFyZXN1bHQpCi0JCXBnX2ZhdGFsKCJvdXQgb2YgbWVtb3J5Iik7Ci0JcmV0dXJu IHJlc3VsdDsKLX0KLQotLyoKLSAqIHZhY3V1bV9vbmVfZGF0YWJhc2UKLSAqCi0gKiBQcm9jZXNz IHRhYmxlcyBpbiB0aGUgZ2l2ZW4gZGF0YWJhc2UuCi0gKgotICogVGhlcmUgYXJlIHR3byB3YXlz IHRvIHNwZWNpZnkgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBwcm9jZXNzOgotICoKLSAqIDEpIFRo ZSAiZm91bmRfb2JqcyIgcGFyYW1ldGVyIGlzIGEgZG91YmxlIHBvaW50ZXIgdG8gYSBmdWxseSBx dWFsaWZpZWQgbGlzdAotICogICAgb2Ygb2JqZWN0cyB0byBwcm9jZXNzLCBhcyByZXR1cm5lZCBi eSBhIHByZXZpb3VzIGNhbGwgdG8KLSAqICAgIHZhY3V1bV9vbmVfZGF0YWJhc2UoKS4KLSAqCi0g KiAgICAgYSkgSWYgYm90aCAiZm91bmRfb2JqcyIgKHRoZSBkb3VibGUgcG9pbnRlcikgYW5kICIq Zm91bmRfb2JqcyIgKHRoZQotICogICAgICAgIG9uY2UtZGVyZWZlcmVuY2VkIGRvdWJsZSBwb2lu dGVyKSBhcmUgbm90IE5VTEwsIHRoaXMgbGlzdCB0YWtlcwotICogICAgICAgIHByaW9yaXR5LCBh bmQgYW55dGhpbmcgc3BlY2lmaWVkIGluICJvYmplY3RzIiBpcyBpZ25vcmVkLgotICoKLSAqICAg ICBiKSBJZiAiZm91bmRfb2JqcyIgKHRoZSBkb3VibGUgcG9pbnRlcikgaXMgbm90IE5VTEwgYnV0 ICIqZm91bmRfb2JqcyIKLSAqICAgICAgICAodGhlIG9uY2UtZGVyZWZlcmVuY2VkIGRvdWJsZSBw b2ludGVyKSBfaXNfIE5VTEwsIHRoZSAib2JqZWN0cyIKLSAqICAgICAgICBwYXJhbWV0ZXIgdGFr ZXMgcHJpb3JpdHksIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgY2F0YWxvZyBxdWVyeQotICogICAg ICAgIGRlc2NyaWJlZCBpbiAoMikgYXJlIHN0b3JlZCBpbiAiZm91bmRfb2JqcyIuCi0gKgotICog ICAgIGMpIElmICJmb3VuZF9vYmpzIiAodGhlIGRvdWJsZSBwb2ludGVyKSBpcyBOVUxMLCB0aGUg Im9iamVjdHMiCi0gKiAgICAgICAgcGFyYW1ldGVyIGFnYWluIHRha2VzIHByaW9yaXR5LCBhbmQg dGhlIHJlc3VsdHMgb2YgdGhlIGNhdGFsb2cgcXVlcnkKLSAqICAgICAgICBhcmUgbm90IHNhdmVk LgotICoKLSAqIDIpIFRoZSAib2JqZWN0cyIgcGFyYW1ldGVyIGlzIGEgdXNlci1zcGVjaWZpZWQg bGlzdCBvZiBvYmplY3RzIHRvIHByb2Nlc3MuCi0gKiAgICBXaGVuICgxYikgb3IgKDFjKSBhcHBs aWVzLCB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgY2F0YWxvZyBxdWVyeSB0bwotICogICAgcmV0 cmlldmUgYSBmdWxseSBxdWFsaWZpZWQgbGlzdCBvZiBvYmplY3RzIHRvIHByb2Nlc3MsIGFzIGRl c2NyaWJlZAotICogICAgYmVsb3cuCi0gKgotICogICAgIGEpIElmICJvYmplY3RzIiBpcyBub3Qg TlVMTCwgdGhlIGNhdGFsb2cgcXVlcnkgZ2F0aGVycyBvbmx5IHRoZSBvYmplY3RzCi0gKiAgICAg ICAgbGlzdGVkIGluICJvYmplY3RzIi4KLSAqCi0gKiAgICAgYikgSWYgIm9iamVjdHMiIGlzIE5V TEwsIGFsbCB0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIGFyZSBnYXRoZXJlZC4KLSAqCi0gKiBOb3Rl IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIHJ1bm5pbmcgZXhhY3Rs eSBvbmUgc3RhZ2UKLSAqIHdoZW4gaW4gYW5hbHl6ZS1pbi1zdGFnZXMgbW9kZTsgY2FsbGVyIG11 c3QgaXRlcmF0ZSBvbiB1cyBpZiBuZWNlc3NhcnkuCi0gKgotICogSWYgY29uY3VycmVudENvbnMg aXMgPiAxLCBtdWx0aXBsZSBjb25uZWN0aW9ucyBhcmUgdXNlZCB0byB2YWN1dW0gdGFibGVzCi0g KiBpbiBwYXJhbGxlbC4KLSAqLwotc3RhdGljIHZvaWQKLXZhY3V1bV9vbmVfZGF0YWJhc2UoQ29u blBhcmFtcyAqY3BhcmFtcywKLQkJCQkJdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywKLQkJCQkJ aW50IHN0YWdlLAotCQkJCQlTaW1wbGVTdHJpbmdMaXN0ICpvYmplY3RzLAotCQkJCQlTaW1wbGVT dHJpbmdMaXN0ICoqZm91bmRfb2JqcywKLQkJCQkJaW50IGNvbmN1cnJlbnRDb25zLAotCQkJCQlj b25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHF1aWV0KQotewotCVBRRXhwQnVm ZmVyRGF0YSBzcWw7Ci0JUEdjb25uCSAgICpjb25uOwotCVNpbXBsZVN0cmluZ0xpc3RDZWxsICpj ZWxsOwotCVBhcmFsbGVsU2xvdEFycmF5ICpzYTsKLQlpbnQJCQludHVwcyA9IDA7Ci0JYm9vbAkJ ZmFpbGVkID0gZmFsc2U7Ci0JY29uc3QgY2hhciAqaW5pdGNtZDsKLQlTaW1wbGVTdHJpbmdMaXN0 ICpyZXQgPSBOVUxMOwotCWNvbnN0IGNoYXIgKnN0YWdlX2NvbW1hbmRzW10gPSB7Ci0JCSJTRVQg ZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldD0xOyBTRVQgdmFjdXVtX2Nvc3RfZGVsYXk9MDsiLAot CQkiU0VUIGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQ9MTA7IFJFU0VUIHZhY3V1bV9jb3N0X2Rl bGF5OyIsCi0JCSJSRVNFVCBkZWZhdWx0X3N0YXRpc3RpY3NfdGFyZ2V0OyIKLQl9OwotCWNvbnN0 IGNoYXIgKnN0YWdlX21lc3NhZ2VzW10gPSB7Ci0JCWdldHRleHRfbm9vcCgiR2VuZXJhdGluZyBt aW5pbWFsIG9wdGltaXplciBzdGF0aXN0aWNzICgxIHRhcmdldCkiKSwKLQkJZ2V0dGV4dF9ub29w KCJHZW5lcmF0aW5nIG1lZGl1bSBvcHRpbWl6ZXIgc3RhdGlzdGljcyAoMTAgdGFyZ2V0cykiKSwK LQkJZ2V0dGV4dF9ub29wKCJHZW5lcmF0aW5nIGRlZmF1bHQgKGZ1bGwpIG9wdGltaXplciBzdGF0 aXN0aWNzIikKLQl9OwotCi0JQXNzZXJ0KHN0YWdlID09IEFOQUxZWkVfTk9fU1RBR0UgfHwKLQkJ ICAgKHN0YWdlID49IDAgJiYgc3RhZ2UgPCBBTkFMWVpFX05VTV9TVEFHRVMpKTsKLQotCWNvbm4g PSBjb25uZWN0RGF0YWJhc2UoY3BhcmFtcywgcHJvZ25hbWUsIGVjaG8sIGZhbHNlLCB0cnVlKTsK LQotCWlmICh2YWNvcHRzLT5kaXNhYmxlX3BhZ2Vfc2tpcHBpbmcgJiYgUFFzZXJ2ZXJWZXJzaW9u KGNvbm4pIDwgOTA2MDApCi0JewotCQlQUWZpbmlzaChjb25uKTsKLQkJcGdfZmF0YWwoImNhbm5v dCB1c2UgdGhlIFwiJXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9z dGdyZVNRTCAlcyIsCi0JCQkJICJkaXNhYmxlLXBhZ2Utc2tpcHBpbmciLCAiOS42Iik7Ci0JfQot Ci0JaWYgKHZhY29wdHMtPm5vX2luZGV4X2NsZWFudXAgJiYgUFFzZXJ2ZXJWZXJzaW9uKGNvbm4p IDwgMTIwMDAwKQotCXsKLQkJUFFmaW5pc2goY29ubik7Ci0JCXBnX2ZhdGFsKCJjYW5ub3QgdXNl IHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBvbGRlciB0aGFuIFBvc3RncmVT UUwgJXMiLAotCQkJCSAibm8taW5kZXgtY2xlYW51cCIsICIxMiIpOwotCX0KLQotCWlmICh2YWNv cHRzLT5mb3JjZV9pbmRleF9jbGVhbnVwICYmIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IDEyMDAw MCkKLQl7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIl c1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwK LQkJCQkgImZvcmNlLWluZGV4LWNsZWFudXAiLCAiMTIiKTsKLQl9Ci0KLQlpZiAoIXZhY29wdHMt PmRvX3RydW5jYXRlICYmIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IDEyMDAwMCkKLQl7Ci0JCVBR ZmluaXNoKGNvbm4pOwotCQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBv biBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKLQkJCQkgIm5vLXRy dW5jYXRlIiwgIjEyIik7Ci0JfQotCi0JaWYgKCF2YWNvcHRzLT5wcm9jZXNzX21haW4gJiYgUFFz ZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgMTYwMDAwKQotCXsKLQkJUFFmaW5pc2goY29ubik7Ci0JCXBn X2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBv bGRlciB0aGFuIFBvc3RncmVTUUwgJXMiLAotCQkJCSAibm8tcHJvY2Vzcy1tYWluIiwgIjE2Iik7 Ci0JfQotCi0JaWYgKCF2YWNvcHRzLT5wcm9jZXNzX3RvYXN0ICYmIFBRc2VydmVyVmVyc2lvbihj b25uKSA8IDE0MDAwMCkKLQl7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlwZ19mYXRhbCgiY2Fubm90 IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0 Z3JlU1FMICVzIiwKLQkJCQkgIm5vLXByb2Nlc3MtdG9hc3QiLCAiMTQiKTsKLQl9Ci0KLQlpZiAo dmFjb3B0cy0+c2tpcF9sb2NrZWQgJiYgUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgMTIwMDAwKQot CXsKLQkJUFFmaW5pc2goY29ubik7Ci0JCXBnX2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIg b3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBvbGRlciB0aGFuIFBvc3RncmVTUUwgJXMiLAotCQkJ CSAic2tpcC1sb2NrZWQiLCAiMTIiKTsKLQl9Ci0KLQlpZiAodmFjb3B0cy0+bWluX3hpZF9hZ2Ug IT0gMCAmJiBQUXNlcnZlclZlcnNpb24oY29ubikgPCA5MDYwMCkKLQl7Ci0JCVBRZmluaXNoKGNv bm4pOwotCQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIg dmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKLQkJCQkgIi0tbWluLXhpZC1hZ2Ui LCAiOS42Iik7Ci0JfQotCi0JaWYgKHZhY29wdHMtPm1pbl9teGlkX2FnZSAhPSAwICYmIFBRc2Vy dmVyVmVyc2lvbihjb25uKSA8IDkwNjAwKQotCXsKLQkJUFFmaW5pc2goY29ubik7Ci0JCXBnX2Zh dGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBvbGRl ciB0aGFuIFBvc3RncmVTUUwgJXMiLAotCQkJCSAiLS1taW4tbXhpZC1hZ2UiLCAiOS42Iik7Ci0J fQotCi0JaWYgKHZhY29wdHMtPnBhcmFsbGVsX3dvcmtlcnMgPj0gMCAmJiBQUXNlcnZlclZlcnNp b24oY29ubikgPCAxMzAwMDApCi0JewotCQlQUWZpbmlzaChjb25uKTsKLQkJcGdfZmF0YWwoImNh bm5vdCB1c2UgdGhlIFwiJXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4g UG9zdGdyZVNRTCAlcyIsCi0JCQkJICItLXBhcmFsbGVsIiwgIjEzIik7Ci0JfQotCi0JaWYgKHZh Y29wdHMtPmJ1ZmZlcl91c2FnZV9saW1pdCAmJiBQUXNlcnZlclZlcnNpb24oY29ubikgPCAxNjAw MDApCi0JewotCQlQUWZpbmlzaChjb25uKTsKLQkJcGdfZmF0YWwoImNhbm5vdCB1c2UgdGhlIFwi JXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9zdGdyZVNRTCAlcyIs Ci0JCQkJICItLWJ1ZmZlci11c2FnZS1saW1pdCIsICIxNiIpOwotCX0KLQotCWlmICh2YWNvcHRz LT5taXNzaW5nX3N0YXRzX29ubHkgJiYgUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgMTUwMDAwKQot CXsKLQkJUFFmaW5pc2goY29ubik7Ci0JCXBnX2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIg b3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBvbGRlciB0aGFuIFBvc3RncmVTUUwgJXMiLAotCQkJ CSAiLS1taXNzaW5nLXN0YXRzLW9ubHkiLCAiMTUiKTsKLQl9Ci0KLQkvKiBza2lwX2RhdGFiYXNl X3N0YXRzIGlzIHVzZWQgYXV0b21hdGljYWxseSBpZiBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KLQl2 YWNvcHRzLT5za2lwX2RhdGFiYXNlX3N0YXRzID0gKFBRc2VydmVyVmVyc2lvbihjb25uKSA+PSAx NjAwMDApOwotCi0JaWYgKCFxdWlldCkKLQl7Ci0JCWlmIChzdGFnZSAhPSBBTkFMWVpFX05PX1NU QUdFKQotCQkJcHJpbnRmKF8oIiVzOiBwcm9jZXNzaW5nIGRhdGFiYXNlIFwiJXNcIjogJXNcbiIp LAotCQkJCSAgIHByb2duYW1lLCBQUWRiKGNvbm4pLCBfKHN0YWdlX21lc3NhZ2VzW3N0YWdlXSkp OwotCQllbHNlCi0JCQlwcmludGYoXygiJXM6IHZhY3V1bWluZyBkYXRhYmFzZSBcIiVzXCJcbiIp LAotCQkJCSAgIHByb2duYW1lLCBQUWRiKGNvbm4pKTsKLQkJZmZsdXNoKHN0ZG91dCk7Ci0JfQot Ci0JLyoKLQkgKiBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIHRoZSByZXN1bHRzIG9mIGEgcHJldmlv dXMgY2F0YWxvZyBxdWVyeSwganVzdAotCSAqIHVzZSB0aGF0LiAgT3RoZXJ3aXNlLCBydW4gdGhl IGNhdGFsb2cgcXVlcnkgb3Vyc2VsdmVzIGFuZCBzZXQgdGhlCi0JICogcmV0dXJuIHZhcmlhYmxl IGlmIHByb3ZpZGVkLgotCSAqLwotCWlmIChmb3VuZF9vYmpzICYmICpmb3VuZF9vYmpzKQotCQly ZXQgPSAqZm91bmRfb2JqczsKLQllbHNlCi0JewotCQlyZXQgPSByZXRyaWV2ZV9vYmplY3RzKGNv bm4sIHZhY29wdHMsIG9iamVjdHMsIGVjaG8pOwotCQlpZiAoZm91bmRfb2JqcykKLQkJCSpmb3Vu ZF9vYmpzID0gcmV0OwotCX0KLQotCS8qCi0JICogQ291bnQgdGhlIG51bWJlciBvZiBvYmplY3Rz IGluIHRoZSBjYXRhbG9nIHF1ZXJ5IHJlc3VsdC4gIElmIHRoZXJlIGFyZQotCSAqIG5vbmUsIHdl IGFyZSBkb25lLgotCSAqLwotCWZvciAoY2VsbCA9IHJldCA/IHJldC0+aGVhZCA6IE5VTEw7IGNl bGw7IGNlbGwgPSBjZWxsLT5uZXh0KQotCQludHVwcysrOwotCi0JaWYgKG50dXBzID09IDApCi0J ewotCQlQUWZpbmlzaChjb25uKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRW5zdXJlIGNv bmN1cnJlbnRDb25zIGlzIHNhbmUuICBJZiB0aGVyZSBhcmUgbW9yZSBjb25uZWN0aW9ucyB0aGFu Ci0JICogdmFjdXVtYWJsZSByZWxhdGlvbnMsIHdlIGRvbid0IG5lZWQgdG8gdXNlIHRoZW0gYWxs LgotCSAqLwotCWlmIChjb25jdXJyZW50Q29ucyA+IG50dXBzKQotCQljb25jdXJyZW50Q29ucyA9 IG50dXBzOwotCWlmIChjb25jdXJyZW50Q29ucyA8PSAwKQotCQljb25jdXJyZW50Q29ucyA9IDE7 Ci0KLQkvKgotCSAqIEFsbCBzbG90cyBuZWVkIHRvIGJlIHByZXBhcmVkIHRvIHJ1biB0aGUgYXBw cm9wcmlhdGUgYW5hbHl6ZSBzdGFnZSwgaWYKLQkgKiBjYWxsZXIgcmVxdWVzdGVkIHRoYXQgbW9k ZS4gIFdlIGhhdmUgdG8gcHJlcGFyZSB0aGUgaW5pdGlhbCBjb25uZWN0aW9uCi0JICogb3Vyc2Vs dmVzIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBzbG90cy4KLQkgKi8KLQlpZiAoc3RhZ2UgPT0gQU5B TFlaRV9OT19TVEFHRSkKLQkJaW5pdGNtZCA9IE5VTEw7Ci0JZWxzZQotCXsKLQkJaW5pdGNtZCA9 IHN0YWdlX2NvbW1hbmRzW3N0YWdlXTsKLQkJZXhlY3V0ZUNvbW1hbmQoY29ubiwgaW5pdGNtZCwg ZWNobyk7Ci0JfQotCi0JLyoKLQkgKiBTZXR1cCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbnMuIFdl IHJldXNlIHRoZSBjb25uZWN0aW9uIHdlIGFscmVhZHkgaGF2ZQotCSAqIGZvciB0aGUgZmlyc3Qg c2xvdC4gIElmIG5vdCBpbiBwYXJhbGxlbCBtb2RlLCB0aGUgZmlyc3Qgc2xvdCBpbiB0aGUKLQkg KiBhcnJheSBjb250YWlucyB0aGUgY29ubmVjdGlvbi4KLQkgKi8KLQlzYSA9IFBhcmFsbGVsU2xv dHNTZXR1cChjb25jdXJyZW50Q29ucywgY3BhcmFtcywgcHJvZ25hbWUsIGVjaG8sIGluaXRjbWQp OwotCVBhcmFsbGVsU2xvdHNBZG9wdENvbm4oc2EsIGNvbm4pOwotCi0JaW5pdFBRRXhwQnVmZmVy KCZzcWwpOwotCi0JY2VsbCA9IHJldC0+aGVhZDsKLQlkbwotCXsKLQkJY29uc3QgY2hhciAqdGFi bmFtZSA9IGNlbGwtPnZhbDsKLQkJUGFyYWxsZWxTbG90ICpmcmVlX3Nsb3Q7Ci0KLQkJaWYgKENh bmNlbFJlcXVlc3RlZCkKLQkJewotCQkJZmFpbGVkID0gdHJ1ZTsKLQkJCWdvdG8gZmluaXNoOwot CQl9Ci0KLQkJZnJlZV9zbG90ID0gUGFyYWxsZWxTbG90c0dldElkbGUoc2EsIE5VTEwpOwotCQlp ZiAoIWZyZWVfc2xvdCkKLQkJewotCQkJZmFpbGVkID0gdHJ1ZTsKLQkJCWdvdG8gZmluaXNoOwot CQl9Ci0KLQkJcHJlcGFyZV92YWN1dW1fY29tbWFuZCgmc3FsLCBQUXNlcnZlclZlcnNpb24oZnJl ZV9zbG90LT5jb25uZWN0aW9uKSwKLQkJCQkJCQkgICB2YWNvcHRzLCB0YWJuYW1lKTsKLQotCQkv KgotCQkgKiBFeGVjdXRlIHRoZSB2YWN1dW0uICBBbGwgZXJyb3JzIGFyZSBoYW5kbGVkIGluIHBy b2Nlc3NRdWVyeVJlc3VsdAotCQkgKiB0aHJvdWdoIFBhcmFsbGVsU2xvdHNHZXRJZGxlLgotCQkg Ki8KLQkJUGFyYWxsZWxTbG90U2V0SGFuZGxlcihmcmVlX3Nsb3QsIFRhYmxlQ29tbWFuZFJlc3Vs dEhhbmRsZXIsIE5VTEwpOwotCQlydW5fdmFjdXVtX2NvbW1hbmQoZnJlZV9zbG90LT5jb25uZWN0 aW9uLCBzcWwuZGF0YSwKLQkJCQkJCSAgIGVjaG8sIHRhYm5hbWUpOwotCi0JCWNlbGwgPSBjZWxs LT5uZXh0OwotCX0gd2hpbGUgKGNlbGwgIT0gTlVMTCk7Ci0KLQlpZiAoIVBhcmFsbGVsU2xvdHNX YWl0Q29tcGxldGlvbihzYSkpCi0JewotCQlmYWlsZWQgPSB0cnVlOwotCQlnb3RvIGZpbmlzaDsK LQl9Ci0KLQkvKiBJZiB3ZSB1c2VkIFNLSVBfREFUQUJBU0VfU1RBVFMsIG1vcCB1cCB3aXRoIE9O TFlfREFUQUJBU0VfU1RBVFMgKi8KLQlpZiAodmFjb3B0cy0+c2tpcF9kYXRhYmFzZV9zdGF0cyAm JiBzdGFnZSA9PSBBTkFMWVpFX05PX1NUQUdFKQotCXsKLQkJY29uc3QgY2hhciAqY21kID0gIlZB Q1VVTSAoT05MWV9EQVRBQkFTRV9TVEFUUyk7IjsKLQkJUGFyYWxsZWxTbG90ICpmcmVlX3Nsb3Qg PSBQYXJhbGxlbFNsb3RzR2V0SWRsZShzYSwgTlVMTCk7Ci0KLQkJaWYgKCFmcmVlX3Nsb3QpCi0J CXsKLQkJCWZhaWxlZCA9IHRydWU7Ci0JCQlnb3RvIGZpbmlzaDsKLQkJfQotCi0JCVBhcmFsbGVs U2xvdFNldEhhbmRsZXIoZnJlZV9zbG90LCBUYWJsZUNvbW1hbmRSZXN1bHRIYW5kbGVyLCBOVUxM KTsKLQkJcnVuX3ZhY3V1bV9jb21tYW5kKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiwgY21kLCBlY2hv LCBOVUxMKTsKLQotCQlpZiAoIVBhcmFsbGVsU2xvdHNXYWl0Q29tcGxldGlvbihzYSkpCi0JCQlm YWlsZWQgPSB0cnVlOwotCX0KLQotZmluaXNoOgotCVBhcmFsbGVsU2xvdHNUZXJtaW5hdGUoc2Ep OwotCXBnX2ZyZWUoc2EpOwotCi0JdGVybVBRRXhwQnVmZmVyKCZzcWwpOwotCi0JaWYgKGZhaWxl ZCkKLQkJZXhpdCgxKTsKLX0KLQotLyoKLSAqIFByZXBhcmUgdGhlIGxpc3Qgb2YgdGFibGVzIHRv IHByb2Nlc3MgYnkgcXVlcnlpbmcgdGhlIGNhdGFsb2dzLgotICoKLSAqIFNpbmNlIHdlIGV4ZWN1 dGUgdGhlIGNvbnN0cnVjdGVkIHF1ZXJ5IHdpdGggdGhlIGRlZmF1bHQgc2VhcmNoX3BhdGggKHdo aWNoCi0gKiBjb3VsZCBiZSB1bnNhZmUpLCBldmVyeXRoaW5nIGluIHRoaXMgcXVlcnkgTVVTVCBi ZSBmdWxseSBxdWFsaWZpZWQuCi0gKgotICogRmlyc3QsIGJ1aWxkIGEgV0lUSCBjbGF1c2UgZm9y IHRoZSBjYXRhbG9nIHF1ZXJ5IGlmIGFueSB0YWJsZXMgd2VyZQotICogc3BlY2lmaWVkLCB3aXRo IGEgc2V0IG9mIHZhbHVlcyBtYWRlIG9mIHJlbGF0aW9uIG5hbWVzIGFuZCB0aGVpciBvcHRpb25h bAotICogc2V0IG9mIGNvbHVtbnMuICBUaGlzIGlzIHVzZWQgdG8gbWF0Y2ggYW55IHByb3ZpZGVk IGNvbHVtbiBsaXN0cyB3aXRoIHRoZQotICogZ2VuZXJhdGVkIHF1YWxpZmllZCBpZGVudGlmaWVy cyBhbmQgdG8gZmlsdGVyIGZvciB0aGUgdGFibGVzIHByb3ZpZGVkIHZpYQotICogLS10YWJsZS4g IElmIGEgbGlzdGVkIHRhYmxlIGRvZXMgbm90IGV4aXN0LCB0aGUgY2F0YWxvZyBxdWVyeSB3aWxs IGZhaWwuCi0gKi8KLXN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0ICoKLXJldHJpZXZlX29iamVjdHMo UEdjb25uICpjb25uLCB2YWN1dW1pbmdPcHRpb25zICp2YWNvcHRzLAotCQkJCSBTaW1wbGVTdHJp bmdMaXN0ICpvYmplY3RzLCBib29sIGVjaG8pCi17Ci0JUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKLQlQ UUV4cEJ1ZmZlckRhdGEgY2F0YWxvZ19xdWVyeTsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0JU2ltcGxl U3RyaW5nTGlzdENlbGwgKmNlbGw7Ci0JU2ltcGxlU3RyaW5nTGlzdCAqZm91bmRfb2JqcyA9IHBh bGxvYzAoc2l6ZW9mKFNpbXBsZVN0cmluZ0xpc3QpKTsKLQlib29sCQlvYmplY3RzX2xpc3RlZCA9 IGZhbHNlOwotCi0JaW5pdFBRRXhwQnVmZmVyKCZjYXRhbG9nX3F1ZXJ5KTsKLQlmb3IgKGNlbGwg PSBvYmplY3RzID8gb2JqZWN0cy0+aGVhZCA6IE5VTEw7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0 KQotCXsKLQkJY2hhcgkgICAqanVzdF90YWJsZSA9IE5VTEw7Ci0JCWNvbnN0IGNoYXIgKmp1c3Rf Y29sdW1ucyA9IE5VTEw7Ci0KLQkJaWYgKCFvYmplY3RzX2xpc3RlZCkKLQkJewotCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCi0JCQkJCQkJCSAiV0lUSCBsaXN0ZWRfb2Jq ZWN0cyAob2JqZWN0X29pZCwgY29sdW1uX2xpc3QpICIKLQkJCQkJCQkJICJBUyAoXG4gIFZBTFVF UyAoIik7Ci0JCQlvYmplY3RzX2xpc3RlZCA9IHRydWU7Ci0JCX0KLQkJZWxzZQotCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksICIsXG4gICgiKTsKLQotCQlpZiAob2JqZmls dGVyICYgKE9CSkZJTFRFUl9TQ0hFTUEgfCBPQkpGSUxURVJfU0NIRU1BX0VYQ0xVREUpKQotCQl7 Ci0JCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubigmY2F0YWxvZ19xdWVyeSwgY2VsbC0+dmFsLCBj b25uKTsKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiOjpwZ19jYXRh bG9nLnJlZ25hbWVzcGFjZSwgIik7Ci0JCX0KLQotCQlpZiAob2JqZmlsdGVyICYgT0JKRklMVEVS X1RBQkxFKQotCQl7Ci0JCQkvKgotCQkJICogU3BsaXQgcmVsYXRpb24gYW5kIGNvbHVtbiBuYW1l cyBnaXZlbiBieSB0aGUgdXNlciwgdGhpcyBpcyB1c2VkCi0JCQkgKiB0byBmZWVkIHRoZSBDVEUg d2l0aCB2YWx1ZXMgb24gd2hpY2ggYXJlIHBlcmZvcm1lZCBwcmUtcnVuCi0JCQkgKiB2YWxpZGl0 eSBjaGVja3MgYXMgd2VsbC4gIEZvciBub3cgdGhlc2UgaGFwcGVuIG9ubHkgb24gdGhlCi0JCQkg KiByZWxhdGlvbiBuYW1lLgotCQkJICovCi0JCQlzcGxpdFRhYmxlQ29sdW1uc1NwZWMoY2VsbC0+ dmFsLCBQUWNsaWVudEVuY29kaW5nKGNvbm4pLAotCQkJCQkJCQkgICZqdXN0X3RhYmxlLCAmanVz dF9jb2x1bW5zKTsKLQotCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oJmNhdGFsb2dfcXVlcnks IGp1c3RfdGFibGUsIGNvbm4pOwotCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVl cnksICI6OnBnX2NhdGFsb2cucmVnY2xhc3MsICIpOwotCQl9Ci0KLQkJaWYgKGp1c3RfY29sdW1u cyAmJiBqdXN0X2NvbHVtbnNbMF0gIT0gJ1wwJykKLQkJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25u KCZjYXRhbG9nX3F1ZXJ5LCBqdXN0X2NvbHVtbnMsIGNvbm4pOwotCQllbHNlCi0JCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIk5VTEwiKTsKLQotCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIjo6cGdfY2F0YWxvZy50ZXh0KSIpOwotCi0JCXBnX2Zy ZWUoanVzdF90YWJsZSk7Ci0JfQotCi0JLyogRmluaXNoIGZvcm1hdHRpbmcgdGhlIENURSAqLwot CWlmIChvYmplY3RzX2xpc3RlZCkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVl cnksICJcbilcbiIpOwotCi0JYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksICJT RUxFQ1QgYy5yZWxuYW1lLCBucy5uc3BuYW1lIik7Ci0KLQlpZiAob2JqZWN0c19saXN0ZWQpCi0J CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiLCBsaXN0ZWRfb2JqZWN0cy5j b2x1bW5fbGlzdCIpOwotCi0JYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCi0J CQkJCQkgIiBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuIgotCQkJCQkJICIgSk9JTiBwZ19j YXRhbG9nLnBnX25hbWVzcGFjZSBucyIKLQkJCQkJCSAiIE9OIGMucmVsbmFtZXNwYWNlIE9QRVJB VE9SKHBnX2NhdGFsb2cuPSkgbnMub2lkXG4iCi0JCQkJCQkgIiBDUk9TUyBKT0lOIExBVEVSQUwg KFNFTEVDVCBjLnJlbGtpbmQgSU4gKCIKLQkJCQkJCSBDcHBBc1N0cmluZzIoUkVMS0lORF9QQVJU SVRJT05FRF9UQUJMRSkgIiwgIgotCQkJCQkJIENwcEFzU3RyaW5nMihSRUxLSU5EX1BBUlRJVElP TkVEX0lOREVYKSAiKSkgYXMgcCAoaW5oZXJpdGVkKVxuIgotCQkJCQkJICIgTEVGVCBKT0lOIHBn X2NhdGFsb2cucGdfY2xhc3MgdCIKLQkJCQkJCSAiIE9OIGMucmVsdG9hc3RyZWxpZCBPUEVSQVRP UihwZ19jYXRhbG9nLj0pIHQub2lkXG4iKTsKLQotCS8qCi0JICogVXNlZCB0byBtYXRjaCB0aGUg dGFibGVzIG9yIHNjaGVtYXMgbGlzdGVkIGJ5IHRoZSB1c2VyLCBjb21wbGV0aW5nIHRoZQotCSAq IEpPSU4gY2xhdXNlLgotCSAqLwotCWlmIChvYmplY3RzX2xpc3RlZCkKLQl7Ci0JCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiIExFRlQgSk9JTiBsaXN0ZWRfb2JqZWN0cyIK LQkJCQkJCQkgIiBPTiBsaXN0ZWRfb2JqZWN0cy5vYmplY3Rfb2lkIgotCQkJCQkJCSAiIE9QRVJB VE9SKHBnX2NhdGFsb2cuPSkgIik7Ci0KLQkJaWYgKG9iamZpbHRlciAmIE9CSkZJTFRFUl9UQUJM RSkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiYy5vaWRcbiIpOwot CQllbHNlCi0JCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIm5zLm9pZFxu Iik7Ci0JfQotCi0JLyoKLQkgKiBFeGNsdWRlIHRlbXBvcmFyeSB0YWJsZXMsIGJlZ2lubmluZyB0 aGUgV0hFUkUgY2xhdXNlLgotCSAqLwotCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1 ZXJ5LAotCQkJCQkJICIgV0hFUkUgYy5yZWxwZXJzaXN0ZW5jZSBPUEVSQVRPUihwZ19jYXRhbG9n LiE9KSAiCi0JCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTFBFUlNJU1RFTkNFX1RFTVApICJcbiIpOwot Ci0JLyoKLQkgKiBVc2VkIHRvIG1hdGNoIHRoZSB0YWJsZXMgb3Igc2NoZW1hcyBsaXN0ZWQgYnkg dGhlIHVzZXIsIGZvciB0aGUgV0hFUkUKLQkgKiBjbGF1c2UuCi0JICovCi0JaWYgKG9iamVjdHNf bGlzdGVkKQotCXsKLQkJaWYgKG9iamZpbHRlciAmIE9CSkZJTFRFUl9TQ0hFTUFfRVhDTFVERSkK LQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJCQkgIiBBTkQg bGlzdGVkX29iamVjdHMub2JqZWN0X29pZCBJUyBOVUxMXG4iKTsKLQkJZWxzZQotCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCi0JCQkJCQkJCSAiIEFORCBsaXN0ZWRfb2Jq ZWN0cy5vYmplY3Rfb2lkIElTIE5PVCBOVUxMXG4iKTsKLQl9Ci0KLQkvKgotCSAqIElmIG5vIHRh YmxlcyB3ZXJlIGxpc3RlZCwgZmlsdGVyIGZvciB0aGUgcmVsZXZhbnQgcmVsYXRpb24gdHlwZXMu ICBJZgotCSAqIHRhYmxlcyB3ZXJlIGdpdmVuIHZpYSAtLXRhYmxlLCBkb24ndCBib3RoZXIgZmls dGVyaW5nIGJ5IHJlbGF0aW9uIHR5cGUuCi0JICogSW5zdGVhZCwgbGV0IHRoZSBzZXJ2ZXIgZGVj aWRlIHdoZXRoZXIgYSBnaXZlbiByZWxhdGlvbiBjYW4gYmUKLQkgKiBwcm9jZXNzZWQgaW4gd2hp Y2ggY2FzZSB0aGUgdXNlciB3aWxsIGtub3cgYWJvdXQgaXQuCi0JICovCi0JaWYgKChvYmpmaWx0 ZXIgJiBPQkpGSUxURVJfVEFCTEUpID09IDApCi0JewotCQkvKgotCQkgKiB2YWN1dW1kYiBzaG91 bGQgZ2VuZXJhbGx5IGZvbGxvdyB0aGUgYmVoYXZpb3Igb2YgdGhlIHVuZGVybHlpbmcKLQkJICog VkFDVVVNIGFuZCBBTkFMWVpFIGNvbW1hbmRzLiBJZiBhbmFseXplX29ubHkgaXMgdHJ1ZSwgcHJv Y2VzcwotCQkgKiByZWd1bGFyIHRhYmxlcywgbWF0ZXJpYWxpemVkIHZpZXdzLCBhbmQgcGFydGl0 aW9uZWQgdGFibGVzLCBqdXN0Ci0JCSAqIGxpa2UgQU5BTFlaRSAod2l0aCBubyBzcGVjaWZpYyB0 YXJnZXQgdGFibGVzKSBkb2VzLiBPdGhlcndpc2UsCi0JCSAqIHByb2Nlc3Mgb25seSByZWd1bGFy IHRhYmxlcyBhbmQgbWF0ZXJpYWxpemVkIHZpZXdzLCBzaW5jZSBWQUNVVU0KLQkJICogc2tpcHMg cGFydGl0aW9uZWQgdGFibGVzIHdoZW4gbm8gdGFyZ2V0IHRhYmxlcyBhcmUgc3BlY2lmaWVkLgot CQkgKi8KLQkJaWYgKHZhY29wdHMtPmFuYWx5emVfb25seSkKLQkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJCQkgIiBBTkQgYy5yZWxraW5kIE9QRVJBVE9SKHBn X2NhdGFsb2cuPSkgQU5ZIChhcnJheVsiCi0JCQkJCQkJCSBDcHBBc1N0cmluZzIoUkVMS0lORF9S RUxBVElPTikgIiwgIgotCQkJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTEtJTkRfTUFUVklFVykgIiwg IgotCQkJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpICJdKVxu Iik7Ci0JCWVsc2UKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJ CQkJCQkgIiBBTkQgYy5yZWxraW5kIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgQU5ZIChhcnJheVsi Ci0JCQkJCQkJCSBDcHBBc1N0cmluZzIoUkVMS0lORF9SRUxBVElPTikgIiwgIgotCQkJCQkJCQkg Q3BwQXNTdHJpbmcyKFJFTEtJTkRfTUFUVklFVykgIl0pXG4iKTsKLQotCX0KLQotCS8qCi0JICog Rm9yIC0tbWluLXhpZC1hZ2UgYW5kIC0tbWluLW14aWQtYWdlLCB0aGUgYWdlIG9mIHRoZSByZWxh dGlvbiBpcyB0aGUKLQkgKiBncmVhdGVzdCBvZiB0aGUgYWdlcyBvZiB0aGUgbWFpbiByZWxhdGlv biBhbmQgaXRzIGFzc29jaWF0ZWQgVE9BU1QKLQkgKiB0YWJsZS4gIFRoZSBjb21tYW5kcyBnZW5l cmF0ZWQgYnkgdmFjdXVtZGIgd2lsbCBhbHNvIHByb2Nlc3MgdGhlIFRPQVNUCi0JICogdGFibGUg Zm9yIHRoZSByZWxhdGlvbiBpZiBuZWNlc3NhcnksIHNvIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUK LQkgKiBjb25zaWRlcmVkIHNlcGFyYXRlbHkuCi0JICovCi0JaWYgKHZhY29wdHMtPm1pbl94aWRf YWdlICE9IDApCi0JewotCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY2F0YWxvZ19xdWVyeSwKLQkJCQkJ CSAgIiBBTkQgR1JFQVRFU1QocGdfY2F0YWxvZy5hZ2UoYy5yZWxmcm96ZW54aWQpLCIKLQkJCQkJ CSAgIiBwZ19jYXRhbG9nLmFnZSh0LnJlbGZyb3plbnhpZCkpICIKLQkJCQkJCSAgIiBPUEVSQVRP UihwZ19jYXRhbG9nLj49KSAnJWQnOjpwZ19jYXRhbG9nLmludDRcbiIKLQkJCQkJCSAgIiBBTkQg Yy5yZWxmcm96ZW54aWQgT1BFUkFUT1IocGdfY2F0YWxvZy4hPSkiCi0JCQkJCQkgICIgJzAnOjpw Z19jYXRhbG9nLnhpZFxuIiwKLQkJCQkJCSAgdmFjb3B0cy0+bWluX3hpZF9hZ2UpOwotCX0KLQot CWlmICh2YWNvcHRzLT5taW5fbXhpZF9hZ2UgIT0gMCkKLQl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy KCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJICAiIEFORCBHUkVBVEVTVChwZ19jYXRhbG9nLm14aWRf YWdlKGMucmVsbWlubXhpZCksIgotCQkJCQkJICAiIHBnX2NhdGFsb2cubXhpZF9hZ2UodC5yZWxt aW5teGlkKSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+PSkiCi0JCQkJCQkgICIgJyVkJzo6cGdfY2F0 YWxvZy5pbnQ0XG4iCi0JCQkJCQkgICIgQU5EIGMucmVsbWlubXhpZCBPUEVSQVRPUihwZ19jYXRh bG9nLiE9KSIKLQkJCQkJCSAgIiAnMCc6OnBnX2NhdGFsb2cueGlkXG4iLAotCQkJCQkJICB2YWNv cHRzLT5taW5fbXhpZF9hZ2UpOwotCX0KLQotCWlmICh2YWNvcHRzLT5taXNzaW5nX3N0YXRzX29u bHkpCi0JewotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIiBBTkQgKFxu Iik7Ci0KLQkJLyogcmVndWxhciBzdGF0cyAqLwotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0 YWxvZ19xdWVyeSwKLQkJCQkJCQkgIiBFWElTVFMgKFNFTEVDVCBOVUxMIEZST00gcGdfY2F0YWxv Zy5wZ19hdHRyaWJ1dGUgYVxuIgotCQkJCQkJCSAiIFdIRVJFIGEuYXR0cmVsaWQgT1BFUkFUT1Io cGdfY2F0YWxvZy49KSBjLm9pZFxuIgotCQkJCQkJCSAiIEFORCBhLmF0dG51bSBPUEVSQVRPUihw Z19jYXRhbG9nLj4pIDA6OnBnX2NhdGFsb2cuaW50MlxuIgotCQkJCQkJCSAiIEFORCBOT1QgYS5h dHRpc2Ryb3BwZWRcbiIKLQkJCQkJCQkgIiBBTkQgYS5hdHRzdGF0dGFyZ2V0IElTIERJU1RJTkNU IEZST00gMDo6cGdfY2F0YWxvZy5pbnQyXG4iCi0JCQkJCQkJICIgQU5EIGEuYXR0Z2VuZXJhdGVk IE9QRVJBVE9SKHBnX2NhdGFsb2cuPD4pICIKLQkJCQkJCQkgQ3BwQXNTdHJpbmcyKEFUVFJJQlVU RV9HRU5FUkFURURfVklSVFVBTCkgIlxuIgotCQkJCQkJCSAiIEFORCBOT1QgRVhJU1RTIChTRUxF Q1QgTlVMTCBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdGlzdGljIHNcbiIKLQkJCQkJCQkgIiBXSEVS RSBzLnN0YXJlbGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYS5hdHRyZWxpZFxuIgotCQkJCQkJ CSAiIEFORCBzLnN0YWF0dG51bSBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0bnVtXG4iCi0J CQkJCQkJICIgQU5EIHMuc3RhaW5oZXJpdCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIHAuaW5oZXJp dGVkKSlcbiIpOwotCi0JCS8qIGV4dGVuZGVkIHN0YXRzICovCi0JCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJCSAiIE9SIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJP TSBwZ19jYXRhbG9nLnBnX3N0YXRpc3RpY19leHQgZVxuIgotCQkJCQkJCSAiIFdIRVJFIGUuc3R4 cmVsaWQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBjLm9pZFxuIgotCQkJCQkJCSAiIEFORCBlLnN0 eHN0YXR0YXJnZXQgSVMgRElTVElOQ1QgRlJPTSAwOjpwZ19jYXRhbG9nLmludDJcbiIKLQkJCQkJ CQkgIiBBTkQgTk9UIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRp c3RpY19leHRfZGF0YSBkXG4iCi0JCQkJCQkJICIgV0hFUkUgZC5zdHhvaWQgT1BFUkFUT1IocGdf Y2F0YWxvZy49KSBlLm9pZFxuIgotCQkJCQkJCSAiIEFORCBkLnN0eGRpbmhlcml0IE9QRVJBVE9S KHBnX2NhdGFsb2cuPSkgcC5pbmhlcml0ZWQpKVxuIik7Ci0KLQkJLyogZXhwcmVzc2lvbiBpbmRl eGVzICovCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJCSAi IE9SIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhXG4i Ci0JCQkJCQkJICIgSk9JTiBwZ19jYXRhbG9nLnBnX2luZGV4IGkiCi0JCQkJCQkJICIgT04gaS5p bmRleHJlbGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYS5hdHRyZWxpZFxuIgotCQkJCQkJCSAi IFdIRVJFIGkuaW5kcmVsaWQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBjLm9pZFxuIgotCQkJCQkJ CSAiIEFORCBpLmluZGtleVthLmF0dG51bSBPUEVSQVRPUihwZ19jYXRhbG9nLi0pIDE6OnBnX2Nh dGFsb2cuaW50Ml0iCi0JCQkJCQkJICIgT1BFUkFUT1IocGdfY2F0YWxvZy49KSAwOjpwZ19jYXRh bG9nLmludDJcbiIKLQkJCQkJCQkgIiBBTkQgYS5hdHRudW0gT1BFUkFUT1IocGdfY2F0YWxvZy4+ KSAwOjpwZ19jYXRhbG9nLmludDJcbiIKLQkJCQkJCQkgIiBBTkQgTk9UIGEuYXR0aXNkcm9wcGVk XG4iCi0JCQkJCQkJICIgQU5EIGEuYXR0c3RhdHRhcmdldCBJUyBESVNUSU5DVCBGUk9NIDA6OnBn X2NhdGFsb2cuaW50MlxuIgotCQkJCQkJCSAiIEFORCBOT1QgRVhJU1RTIChTRUxFQ1QgTlVMTCBG Uk9NIHBnX2NhdGFsb2cucGdfc3RhdGlzdGljIHNcbiIKLQkJCQkJCQkgIiBXSEVSRSBzLnN0YXJl bGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYS5hdHRyZWxpZFxuIgotCQkJCQkJCSAiIEFORCBz LnN0YWF0dG51bSBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0bnVtXG4iCi0JCQkJCQkJICIg QU5EIHMuc3RhaW5oZXJpdCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIHAuaW5oZXJpdGVkKSlcbiIp OwotCi0JCS8qIGluaGVyaXRhbmNlIGFuZCByZWd1bGFyIHN0YXRzICovCi0JCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAotCQkJCQkJCSAiIE9SIEVYSVNUUyAoU0VMRUNUIE5V TEwgRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhXG4iCi0JCQkJCQkJICIgV0hFUkUgYS5h dHRyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGMub2lkXG4iCi0JCQkJCQkJICIgQU5EIGEu YXR0bnVtIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMDo6cGdfY2F0YWxvZy5pbnQyXG4iCi0JCQkJ CQkJICIgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZFxuIgotCQkJCQkJCSAiIEFORCBhLmF0dHN0YXR0 YXJnZXQgSVMgRElTVElOQ1QgRlJPTSAwOjpwZ19jYXRhbG9nLmludDJcbiIKLQkJCQkJCQkgIiBB TkQgYS5hdHRnZW5lcmF0ZWQgT1BFUkFUT1IocGdfY2F0YWxvZy48PikgIgotCQkJCQkJCSBDcHBB c1N0cmluZzIoQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKSAiXG4iCi0JCQkJCQkJICIgQU5E IGMucmVsaGFzc3ViY2xhc3NcbiIKLQkJCQkJCQkgIiBBTkQgTk9UIHAuaW5oZXJpdGVkXG4iCi0J CQkJCQkJICIgQU5EIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX2luaGVy aXRzIGhcbiIKLQkJCQkJCQkgIiBXSEVSRSBoLmluaHBhcmVudCBPUEVSQVRPUihwZ19jYXRhbG9n Lj0pIGMub2lkKVxuIgotCQkJCQkJCSAiIEFORCBOT1QgRVhJU1RTIChTRUxFQ1QgTlVMTCBGUk9N IHBnX2NhdGFsb2cucGdfc3RhdGlzdGljIHNcbiIKLQkJCQkJCQkgIiBXSEVSRSBzLnN0YXJlbGlk IE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYS5hdHRyZWxpZFxuIgotCQkJCQkJCSAiIEFORCBzLnN0 YWF0dG51bSBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0bnVtXG4iCi0JCQkJCQkJICIgQU5E IHMuc3RhaW5oZXJpdCkpXG4iKTsKLQotCQkvKiBpbmhlcml0YW5jZSBhbmQgZXh0ZW5kZWQgc3Rh dHMgKi8KLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCi0JCQkJCQkJICIg T1IgRVhJU1RTIChTRUxFQ1QgTlVMTCBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdGlzdGljX2V4dCBl XG4iCi0JCQkJCQkJICIgV0hFUkUgZS5zdHhyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGMu b2lkXG4iCi0JCQkJCQkJICIgQU5EIGUuc3R4c3RhdHRhcmdldCBJUyBESVNUSU5DVCBGUk9NIDA6 OnBnX2NhdGFsb2cuaW50MlxuIgotCQkJCQkJCSAiIEFORCBjLnJlbGhhc3N1YmNsYXNzXG4iCi0J CQkJCQkJICIgQU5EIE5PVCBwLmluaGVyaXRlZFxuIgotCQkJCQkJCSAiIEFORCBFWElTVFMgKFNF TEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5wZ19pbmhlcml0cyBoXG4iCi0JCQkJCQkJICIgV0hF UkUgaC5pbmhwYXJlbnQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBjLm9pZClcbiIKLQkJCQkJCQkg IiBBTkQgTk9UIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRpc3Rp Y19leHRfZGF0YSBkXG4iCi0JCQkJCQkJICIgV0hFUkUgZC5zdHhvaWQgT1BFUkFUT1IocGdfY2F0 YWxvZy49KSBlLm9pZFxuIgotCQkJCQkJCSAiIEFORCBkLnN0eGRpbmhlcml0KSlcbiIpOwotCi0J CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiIClcbiIpOwotCX0KLQotCS8q Ci0JICogRXhlY3V0ZSB0aGUgY2F0YWxvZyBxdWVyeS4gIFdlIHVzZSB0aGUgZGVmYXVsdCBzZWFy Y2hfcGF0aCBmb3IgdGhpcwotCSAqIHF1ZXJ5IGZvciBjb25zaXN0ZW5jeSB3aXRoIHRhYmxlIGxv b2t1cHMgZG9uZSBlbHNld2hlcmUgYnkgdGhlIHVzZXIuCi0JICovCi0JYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNhdGFsb2dfcXVlcnksICIgT1JERVIgQlkgYy5yZWxwYWdlcyBERVNDOyIpOwotCWV4 ZWN1dGVDb21tYW5kKGNvbm4sICJSRVNFVCBzZWFyY2hfcGF0aDsiLCBlY2hvKTsKLQlyZXMgPSBl eGVjdXRlUXVlcnkoY29ubiwgY2F0YWxvZ19xdWVyeS5kYXRhLCBlY2hvKTsKLQl0ZXJtUFFFeHBC dWZmZXIoJmNhdGFsb2dfcXVlcnkpOwotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZ U19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMLCBlY2hvKSk7Ci0KLQkvKgotCSAqIEJ1aWxkIHF1YWxp ZmllZCBpZGVudGlmaWVycyBmb3IgZWFjaCB0YWJsZSwgaW5jbHVkaW5nIHRoZSBjb2x1bW4gbGlz dAotCSAqIGlmIGdpdmVuLgotCSAqLwotCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKLQlmb3IgKGlu dCBpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCi0JewotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmYnVmLAotCQkJCQkJCSBmbXRRdWFsaWZpZWRJZEVuYyhQUWdldHZhbHVlKHJlcywgaSwg MSksCi0JCQkJCQkJCQkJCSAgIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKLQkJCQkJCQkJCQkJICAg UFFjbGllbnRFbmNvZGluZyhjb25uKSkpOwotCi0JCWlmIChvYmplY3RzX2xpc3RlZCAmJiAhUFFn ZXRpc251bGwocmVzLCBpLCAyKSkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsIFBRZ2V0 dmFsdWUocmVzLCBpLCAyKSk7Ci0KLQkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZChmb3VuZF9v YmpzLCBidWYuZGF0YSk7Ci0JCXJlc2V0UFFFeHBCdWZmZXIoJmJ1Zik7Ci0JfQotCXRlcm1QUUV4 cEJ1ZmZlcigmYnVmKTsKLQlQUWNsZWFyKHJlcyk7Ci0KLQlyZXR1cm4gZm91bmRfb2JqczsKLX0K LQotLyoKLSAqIFZhY3V1bS9hbmFseXplIGFsbCBjb25uZWN0YWJsZSBkYXRhYmFzZXMuCi0gKgot ICogSW4gYW5hbHl6ZS1pbi1zdGFnZXMgbW9kZSwgd2UgcHJvY2VzcyBhbGwgZGF0YWJhc2VzIGlu IG9uZSBzdGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byB0aGUgbmV4dCBzdGFnZS4gIFRoYXQg ZW5zdXJlIG1pbmltYWwgc3RhdHMgYXJlIGF2YWlsYWJsZQotICogcXVpY2tseSBldmVyeXdoZXJl IGJlZm9yZSBnZW5lcmF0aW5nIG1vcmUgZGV0YWlsZWQgb25lcy4KLSAqLwotc3RhdGljIHZvaWQK LXZhY3V1bV9hbGxfZGF0YWJhc2VzKENvbm5QYXJhbXMgKmNwYXJhbXMsCi0JCQkJCSB2YWN1dW1p bmdPcHRpb25zICp2YWNvcHRzLAotCQkJCQkgYm9vbCBhbmFseXplX2luX3N0YWdlcywKLQkJCQkJ IFNpbXBsZVN0cmluZ0xpc3QgKm9iamVjdHMsCi0JCQkJCSBpbnQgY29uY3VycmVudENvbnMsCi0J CQkJCSBjb25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHF1aWV0KQotewotCVBH Y29ubgkgICAqY29ubjsKLQlQR3Jlc3VsdCAgICpyZXN1bHQ7Ci0JaW50CQkJc3RhZ2U7Ci0JaW50 CQkJaTsKLQotCWNvbm4gPSBjb25uZWN0TWFpbnRlbmFuY2VEYXRhYmFzZShjcGFyYW1zLCBwcm9n bmFtZSwgZWNobyk7Ci0JcmVzdWx0ID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCQkgICJTRUxF Q1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29u bmxpbWl0IDw+IC0yIE9SREVSIEJZIDE7IiwKLQkJCQkJCSAgZWNobyk7Ci0JUFFmaW5pc2goY29u bik7Ci0KLQlpZiAoYW5hbHl6ZV9pbl9zdGFnZXMpCi0JewotCQlTaW1wbGVTdHJpbmdMaXN0ICoq Zm91bmRfb2JqcyA9IE5VTEw7Ci0KLQkJaWYgKHZhY29wdHMtPm1pc3Npbmdfc3RhdHNfb25seSkK LQkJCWZvdW5kX29ianMgPSBwYWxsb2MwKFBRbnR1cGxlcyhyZXN1bHQpICogc2l6ZW9mKFNpbXBs ZVN0cmluZ0xpc3QgKikpOwotCi0JCS8qCi0JCSAqIFdoZW4gYW5hbHl6aW5nIGFsbCBkYXRhYmFz ZXMgaW4gc3RhZ2VzLCB3ZSBhbmFseXplIHRoZW0gYWxsIGluIHRoZQotCQkgKiBmYXN0ZXN0IHN0 YWdlIGZpcnN0LCBzbyB0aGF0IGluaXRpYWwgc3RhdGlzdGljcyBiZWNvbWUgYXZhaWxhYmxlCi0J CSAqIGZvciBhbGwgb2YgdGhlbSBhcyBzb29uIGFzIHBvc3NpYmxlLgotCQkgKgotCQkgKiBUaGlz IG1lYW5zIHdlIGVzdGFibGlzaCBzZXZlcmFsIHRpbWVzIGFzIG1hbnkgY29ubmVjdGlvbnMsIGJ1 dAotCQkgKiB0aGF0J3MgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4KLQkJICovCi0JCWZvciAo c3RhZ2UgPSAwOyBzdGFnZSA8IEFOQUxZWkVfTlVNX1NUQUdFUzsgc3RhZ2UrKykKLQkJewotCQkJ Zm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXN1bHQpOyBpKyspCi0JCQl7Ci0JCQkJY3BhcmFt cy0+b3ZlcnJpZGVfZGJuYW1lID0gUFFnZXR2YWx1ZShyZXN1bHQsIGksIDApOwotCi0JCQkJdmFj dXVtX29uZV9kYXRhYmFzZShjcGFyYW1zLCB2YWNvcHRzLAotCQkJCQkJCQkJc3RhZ2UsCi0JCQkJ CQkJCQlvYmplY3RzLAotCQkJCQkJCQkJdmFjb3B0cy0+bWlzc2luZ19zdGF0c19vbmx5ID8gJmZv dW5kX29ianNbaV0gOiBOVUxMLAotCQkJCQkJCQkJY29uY3VycmVudENvbnMsCi0JCQkJCQkJCQlw cm9nbmFtZSwgZWNobywgcXVpZXQpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzdWx0KTsgaSsrKQotCQl7Ci0JCQljcGFyYW1zLT5vdmVy cmlkZV9kYm5hbWUgPSBQUWdldHZhbHVlKHJlc3VsdCwgaSwgMCk7Ci0KLQkJCXZhY3V1bV9vbmVf ZGF0YWJhc2UoY3BhcmFtcywgdmFjb3B0cywKLQkJCQkJCQkJQU5BTFlaRV9OT19TVEFHRSwKLQkJ CQkJCQkJb2JqZWN0cywgTlVMTCwKLQkJCQkJCQkJY29uY3VycmVudENvbnMsCi0JCQkJCQkJCXBy b2duYW1lLCBlY2hvLCBxdWlldCk7Ci0JCX0KLQl9Ci0KLQlQUWNsZWFyKHJlc3VsdCk7Ci19Ci0K LS8qCi0gKiBDb25zdHJ1Y3QgYSB2YWN1dW0vYW5hbHl6ZSBjb21tYW5kIHRvIHJ1biBiYXNlZCBv biB0aGUgZ2l2ZW4gb3B0aW9ucywgaW4gdGhlCi0gKiBnaXZlbiBzdHJpbmcgYnVmZmVyLCB3aGlj aCBtYXkgY29udGFpbiBwcmV2aW91cyBnYXJiYWdlLgotICoKLSAqIFRoZSB0YWJsZSBuYW1lIHVz ZWQgbXVzdCBiZSBhbHJlYWR5IHByb3Blcmx5IHF1b3RlZC4gIFRoZSBjb21tYW5kIGdlbmVyYXRl ZAotICogZGVwZW5kcyBvbiB0aGUgc2VydmVyIHZlcnNpb24gaW52b2x2ZWQgYW5kIGl0IGlzIHNl bWljb2xvbi10ZXJtaW5hdGVkLgotICovCi1zdGF0aWMgdm9pZAotcHJlcGFyZV92YWN1dW1fY29t bWFuZChQUUV4cEJ1ZmZlciBzcWwsIGludCBzZXJ2ZXJWZXJzaW9uLAotCQkJCQkgICB2YWN1dW1p bmdPcHRpb25zICp2YWNvcHRzLCBjb25zdCBjaGFyICp0YWJsZSkKLXsKLQljb25zdCBjaGFyICpw YXJlbiA9ICIgKCI7Ci0JY29uc3QgY2hhciAqY29tbWEgPSAiLCAiOwotCWNvbnN0IGNoYXIgKnNl cCA9IHBhcmVuOwotCi0JcmVzZXRQUUV4cEJ1ZmZlcihzcWwpOwotCi0JaWYgKHZhY29wdHMtPmFu YWx5emVfb25seSkKLQl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIkFOQUxZWkUiKTsK LQotCQkvKiBwYXJlbnRoZXNpemVkIGdyYW1tYXIgb2YgQU5BTFlaRSBpcyBzdXBwb3J0ZWQgc2lu Y2UgdjExICovCi0JCWlmIChzZXJ2ZXJWZXJzaW9uID49IDExMDAwMCkKLQkJewotCQkJaWYgKHZh Y29wdHMtPnNraXBfbG9ja2VkKQotCQkJewotCQkJCS8qIFNLSVBfTE9DS0VEIGlzIHN1cHBvcnRl ZCBzaW5jZSB2MTIgKi8KLQkJCQlBc3NlcnQoc2VydmVyVmVyc2lvbiA+PSAxMjAwMDApOwotCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzU0tJUF9MT0NLRUQiLCBzZXApOwotCQkJCXNlcCA9 IGNvbW1hOwotCQkJfQotCQkJaWYgKHZhY29wdHMtPnZlcmJvc2UpCi0JCQl7Ci0JCQkJYXBwZW5k UFFFeHBCdWZmZXIoc3FsLCAiJXNWRVJCT1NFIiwgc2VwKTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJ CX0KLQkJCWlmICh2YWNvcHRzLT5idWZmZXJfdXNhZ2VfbGltaXQpCi0JCQl7Ci0JCQkJQXNzZXJ0 KHNlcnZlclZlcnNpb24gPj0gMTYwMDAwKTsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIl c0JVRkZFUl9VU0FHRV9MSU1JVCAnJXMnIiwgc2VwLAotCQkJCQkJCQkgIHZhY29wdHMtPmJ1ZmZl cl91c2FnZV9saW1pdCk7Ci0JCQkJc2VwID0gY29tbWE7Ci0JCQl9Ci0JCQlpZiAoc2VwICE9IHBh cmVuKQotCQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihzcWwsICcpJyk7Ci0JCX0KLQkJZWxzZQot CQl7Ci0JCQlpZiAodmFjb3B0cy0+dmVyYm9zZSkKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihz cWwsICIgVkVSQk9TRSIpOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy U3RyKHNxbCwgIlZBQ1VVTSIpOwotCi0JCS8qIHBhcmVudGhlc2l6ZWQgZ3JhbW1hciBvZiBWQUNV VU0gaXMgc3VwcG9ydGVkIHNpbmNlIHY5LjAgKi8KLQkJaWYgKHNlcnZlclZlcnNpb24gPj0gOTAw MDApCi0JCXsKLQkJCWlmICh2YWNvcHRzLT5kaXNhYmxlX3BhZ2Vfc2tpcHBpbmcpCi0JCQl7Ci0J CQkJLyogRElTQUJMRV9QQUdFX1NLSVBQSU5HIGlzIHN1cHBvcnRlZCBzaW5jZSB2OS42ICovCi0J CQkJQXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gOTA2MDApOwotCQkJCWFwcGVuZFBRRXhwQnVmZmVy KHNxbCwgIiVzRElTQUJMRV9QQUdFX1NLSVBQSU5HIiwgc2VwKTsKLQkJCQlzZXAgPSBjb21tYTsK LQkJCX0KLQkJCWlmICh2YWNvcHRzLT5ub19pbmRleF9jbGVhbnVwKQotCQkJewotCQkJCS8qICJJ TkRFWF9DTEVBTlVQIEZBTFNFIiBoYXMgYmVlbiBzdXBwb3J0ZWQgc2luY2UgdjEyICovCi0JCQkJ QXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gMTIwMDAwKTsKLQkJCQlBc3NlcnQoIXZhY29wdHMtPmZv cmNlX2luZGV4X2NsZWFudXApOwotCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzSU5ERVhf Q0xFQU5VUCBGQUxTRSIsIHNlcCk7Ci0JCQkJc2VwID0gY29tbWE7Ci0JCQl9Ci0JCQlpZiAodmFj b3B0cy0+Zm9yY2VfaW5kZXhfY2xlYW51cCkKLQkJCXsKLQkJCQkvKiAiSU5ERVhfQ0xFQU5VUCBU UlVFIiBoYXMgYmVlbiBzdXBwb3J0ZWQgc2luY2UgdjEyICovCi0JCQkJQXNzZXJ0KHNlcnZlclZl cnNpb24gPj0gMTIwMDAwKTsKLQkJCQlBc3NlcnQoIXZhY29wdHMtPm5vX2luZGV4X2NsZWFudXAp OwotCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzSU5ERVhfQ0xFQU5VUCBUUlVFIiwgc2Vw KTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KLQkJCWlmICghdmFjb3B0cy0+ZG9fdHJ1bmNhdGUp Ci0JCQl7Ci0JCQkJLyogVFJVTkNBVEUgaXMgc3VwcG9ydGVkIHNpbmNlIHYxMiAqLwotCQkJCUFz c2VydChzZXJ2ZXJWZXJzaW9uID49IDEyMDAwMCk7Ci0JCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3Fs LCAiJXNUUlVOQ0FURSBGQUxTRSIsIHNlcCk7Ci0JCQkJc2VwID0gY29tbWE7Ci0JCQl9Ci0JCQlp ZiAoIXZhY29wdHMtPnByb2Nlc3NfbWFpbikKLQkJCXsKLQkJCQkvKiBQUk9DRVNTX01BSU4gaXMg c3VwcG9ydGVkIHNpbmNlIHYxNiAqLwotCQkJCUFzc2VydChzZXJ2ZXJWZXJzaW9uID49IDE2MDAw MCk7Ci0JCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNQUk9DRVNTX01BSU4gRkFMU0UiLCBz ZXApOwotCQkJCXNlcCA9IGNvbW1hOwotCQkJfQotCQkJaWYgKCF2YWNvcHRzLT5wcm9jZXNzX3Rv YXN0KQotCQkJewotCQkJCS8qIFBST0NFU1NfVE9BU1QgaXMgc3VwcG9ydGVkIHNpbmNlIHYxNCAq LwotCQkJCUFzc2VydChzZXJ2ZXJWZXJzaW9uID49IDE0MDAwMCk7Ci0JCQkJYXBwZW5kUFFFeHBC dWZmZXIoc3FsLCAiJXNQUk9DRVNTX1RPQVNUIEZBTFNFIiwgc2VwKTsKLQkJCQlzZXAgPSBjb21t YTsKLQkJCX0KLQkJCWlmICh2YWNvcHRzLT5za2lwX2RhdGFiYXNlX3N0YXRzKQotCQkJewotCQkJ CS8qIFNLSVBfREFUQUJBU0VfU1RBVFMgaXMgc3VwcG9ydGVkIHNpbmNlIHYxNiAqLwotCQkJCUFz c2VydChzZXJ2ZXJWZXJzaW9uID49IDE2MDAwMCk7Ci0JCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3Fs LCAiJXNTS0lQX0RBVEFCQVNFX1NUQVRTIiwgc2VwKTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0K LQkJCWlmICh2YWNvcHRzLT5za2lwX2xvY2tlZCkKLQkJCXsKLQkJCQkvKiBTS0lQX0xPQ0tFRCBp cyBzdXBwb3J0ZWQgc2luY2UgdjEyICovCi0JCQkJQXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gMTIw MDAwKTsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc1NLSVBfTE9DS0VEIiwgc2VwKTsK LQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KLQkJCWlmICh2YWNvcHRzLT5mdWxsKQotCQkJewotCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzRlVMTCIsIHNlcCk7Ci0JCQkJc2VwID0gY29tbWE7 Ci0JCQl9Ci0JCQlpZiAodmFjb3B0cy0+ZnJlZXplKQotCQkJewotCQkJCWFwcGVuZFBRRXhwQnVm ZmVyKHNxbCwgIiVzRlJFRVpFIiwgc2VwKTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KLQkJCWlm ICh2YWNvcHRzLT52ZXJib3NlKQotCQkJewotCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVz VkVSQk9TRSIsIHNlcCk7Ci0JCQkJc2VwID0gY29tbWE7Ci0JCQl9Ci0JCQlpZiAodmFjb3B0cy0+ YW5kX2FuYWx5emUpCi0JCQl7Ci0JCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNBTkFMWVpF Iiwgc2VwKTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KLQkJCWlmICh2YWNvcHRzLT5wYXJhbGxl bF93b3JrZXJzID49IDApCi0JCQl7Ci0JCQkJLyogUEFSQUxMRUwgaXMgc3VwcG9ydGVkIHNpbmNl IHYxMyAqLwotCQkJCUFzc2VydChzZXJ2ZXJWZXJzaW9uID49IDEzMDAwMCk7Ci0JCQkJYXBwZW5k UFFFeHBCdWZmZXIoc3FsLCAiJXNQQVJBTExFTCAlZCIsIHNlcCwKLQkJCQkJCQkJICB2YWNvcHRz LT5wYXJhbGxlbF93b3JrZXJzKTsKLQkJCQlzZXAgPSBjb21tYTsKLQkJCX0KLQkJCWlmICh2YWNv cHRzLT5idWZmZXJfdXNhZ2VfbGltaXQpCi0JCQl7Ci0JCQkJQXNzZXJ0KHNlcnZlclZlcnNpb24g Pj0gMTYwMDAwKTsKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc0JVRkZFUl9VU0FHRV9M SU1JVCAnJXMnIiwgc2VwLAotCQkJCQkJCQkgIHZhY29wdHMtPmJ1ZmZlcl91c2FnZV9saW1pdCk7 Ci0JCQkJc2VwID0gY29tbWE7Ci0JCQl9Ci0JCQlpZiAoc2VwICE9IHBhcmVuKQotCQkJCWFwcGVu ZFBRRXhwQnVmZmVyQ2hhcihzcWwsICcpJyk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZiAodmFj b3B0cy0+ZnVsbCkKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICIgRlVMTCIpOwotCQkJ aWYgKHZhY29wdHMtPmZyZWV6ZSkKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihzcWwsICIgRlJF RVpFIik7Ci0JCQlpZiAodmFjb3B0cy0+dmVyYm9zZSkKLQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihzcWwsICIgVkVSQk9TRSIpOwotCQkJaWYgKHZhY29wdHMtPmFuZF9hbmFseXplKQotCQkJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIiBBTkFMWVpFIik7Ci0JCX0KLQl9Ci0KLQlhcHBlbmRQ UUV4cEJ1ZmZlcihzcWwsICIgJXM7IiwgdGFibGUpOwotfQotCi0vKgotICogU2VuZCBhIHZhY3V1 bS9hbmFseXplIGNvbW1hbmQgdG8gdGhlIHNlcnZlciwgcmV0dXJuaW5nIGFmdGVyIHNlbmRpbmcg dGhlCi0gKiBjb21tYW5kLgotICoKLSAqIEFueSBlcnJvcnMgZHVyaW5nIGNvbW1hbmQgZXhlY3V0 aW9uIGFyZSByZXBvcnRlZCB0byBzdGRlcnIuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydW5fdmFjdXVt X2NvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzcWwsIGJvb2wgZWNobywKLQkJCQkg ICBjb25zdCBjaGFyICp0YWJsZSkKLXsKLQlib29sCQlzdGF0dXM7Ci0KLQlpZiAoZWNobykKLQkJ cHJpbnRmKCIlc1xuIiwgc3FsKTsKLQotCXN0YXR1cyA9IFBRc2VuZFF1ZXJ5KGNvbm4sIHNxbCkg PT0gMTsKLQotCWlmICghc3RhdHVzKQotCXsKLQkJaWYgKHRhYmxlKQotCQkJcGdfbG9nX2Vycm9y KCJ2YWN1dW1pbmcgb2YgdGFibGUgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6ICVz IiwKLQkJCQkJCSB0YWJsZSwgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQll bHNlCi0JCQlwZ19sb2dfZXJyb3IoInZhY3V1bWluZyBvZiBkYXRhYmFzZSBcIiVzXCIgZmFpbGVk OiAlcyIsCi0JCQkJCQkgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCX0KLX0K IAogc3RhdGljIHZvaWQKIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCmRpZmYgLS1naXQgYS9z cmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMgYi9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjliZTM3ZmNjNDVhCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5jCkBAIC0wLDAgKzEsOTc4 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHZhY3V1bWluZy5jCisgKgkJQ29tbW9uIHJvdXRp bmVzIGZvciB2YWN1dW1kYgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAq CisgKiBzcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgor CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGVfZC5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfY2xhc3NfZC5oIgorI2luY2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29t bW9uL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJmZV91dGlscy9jYW5jZWwuaCIKKyNpbmNsdWRlICJm ZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9wYXJhbGxlbF9zbG90 LmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvcXVlcnlfdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGls cy9zdHJpbmdfdXRpbHMuaCIKKyNpbmNsdWRlICJ2YWN1dW1pbmcuaCIKKworVmFjT2JqRmlsdGVy IG9iamZpbHRlciA9IE9CSkZJTFRFUl9OT05FOworCisKKy8qCisgKiBFeGVjdXRlcyB2YWN1dW0v YW5hbHl6ZSBhcyBpbmRpY2F0ZWQsIG9yIGRpZXMgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCit2 b2lkCit2YWN1dW1pbmdfbWFpbihDb25uUGFyYW1zICpjcGFyYW1zLCBjb25zdCBjaGFyICpkYm5h bWUsCisJCQkgICBjb25zdCBjaGFyICptYWludGVuYW5jZV9kYiwgdmFjdXVtaW5nT3B0aW9ucyAq dmFjb3B0cywKKwkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm9iamVjdHMsIGJvb2wgYW5hbHl6ZV9p bl9zdGFnZXMsCisJCQkgICBpbnQgdGJsX2NvdW50LCBpbnQgY29uY3VycmVudENvbnMsCisJCQkg ICBjb25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHF1aWV0KQoreworCXNldHVw X2NhbmNlbF9oYW5kbGVyKE5VTEwpOworCisJLyogQXZvaWQgb3BlbmluZyBleHRyYSBjb25uZWN0 aW9ucy4gKi8KKwlpZiAodGJsX2NvdW50ICYmIChjb25jdXJyZW50Q29ucyA+IHRibF9jb3VudCkp CisJCWNvbmN1cnJlbnRDb25zID0gdGJsX2NvdW50OworCisJaWYgKG9iamZpbHRlciAmIE9CSkZJ TFRFUl9BTExfREJTKQorCXsKKwkJY3BhcmFtcy0+ZGJuYW1lID0gbWFpbnRlbmFuY2VfZGI7CisK KwkJdmFjdXVtX2FsbF9kYXRhYmFzZXMoY3BhcmFtcywgdmFjb3B0cywKKwkJCQkJCQkgYW5hbHl6 ZV9pbl9zdGFnZXMsCisJCQkJCQkJIG9iamVjdHMsCisJCQkJCQkJIGNvbmN1cnJlbnRDb25zLAor CQkJCQkJCSBwcm9nbmFtZSwgZWNobywgcXVpZXQpOworCX0KKwllbHNlCisJeworCQlpZiAoZGJu YW1lID09IE5VTEwpCisJCXsKKwkJCWlmIChnZXRlbnYoIlBHREFUQUJBU0UiKSkKKwkJCQlkYm5h bWUgPSBnZXRlbnYoIlBHREFUQUJBU0UiKTsKKwkJCWVsc2UgaWYgKGdldGVudigiUEdVU0VSIikp CisJCQkJZGJuYW1lID0gZ2V0ZW52KCJQR1VTRVIiKTsKKwkJCWVsc2UKKwkJCQlkYm5hbWUgPSBn ZXRfdXNlcl9uYW1lX29yX2V4aXQocHJvZ25hbWUpOworCQl9CisKKwkJY3BhcmFtcy0+ZGJuYW1l ID0gZGJuYW1lOworCisJCWlmIChhbmFseXplX2luX3N0YWdlcykKKwkJeworCQkJaW50CQkJc3Rh Z2U7CisJCQlTaW1wbGVTdHJpbmdMaXN0ICpmb3VuZF9vYmpzID0gTlVMTDsKKworCQkJZm9yIChz dGFnZSA9IDA7IHN0YWdlIDwgQU5BTFlaRV9OVU1fU1RBR0VTOyBzdGFnZSsrKQorCQkJeworCQkJ CXZhY3V1bV9vbmVfZGF0YWJhc2UoY3BhcmFtcywgdmFjb3B0cywKKwkJCQkJCQkJCXN0YWdlLAor CQkJCQkJCQkJb2JqZWN0cywKKwkJCQkJCQkJCXZhY29wdHMtPm1pc3Npbmdfc3RhdHNfb25seSA/ ICZmb3VuZF9vYmpzIDogTlVMTCwKKwkJCQkJCQkJCWNvbmN1cnJlbnRDb25zLAorCQkJCQkJCQkJ cHJvZ25hbWUsIGVjaG8sIHF1aWV0KTsKKwkJCX0KKwkJfQorCQllbHNlCisJCQl2YWN1dW1fb25l X2RhdGFiYXNlKGNwYXJhbXMsIHZhY29wdHMsCisJCQkJCQkJCUFOQUxZWkVfTk9fU1RBR0UsCisJ CQkJCQkJCW9iamVjdHMsIE5VTEwsCisJCQkJCQkJCWNvbmN1cnJlbnRDb25zLAorCQkJCQkJCQlw cm9nbmFtZSwgZWNobywgcXVpZXQpOworCX0KK30KKworCisvKgorICogdmFjdXVtX29uZV9kYXRh YmFzZQorICoKKyAqIFByb2Nlc3MgdGFibGVzIGluIHRoZSBnaXZlbiBkYXRhYmFzZS4KKyAqCisg KiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gc3BlY2lmeSB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIHBy b2Nlc3M6CisgKgorICogMSkgVGhlICJmb3VuZF9vYmpzIiBwYXJhbWV0ZXIgaXMgYSBkb3VibGUg cG9pbnRlciB0byBhIGZ1bGx5IHF1YWxpZmllZCBsaXN0CisgKiAgICBvZiBvYmplY3RzIHRvIHBy b2Nlc3MsIGFzIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0bworICogICAgdmFjdXVtX29u ZV9kYXRhYmFzZSgpLgorICoKKyAqICAgICBhKSBJZiBib3RoICJmb3VuZF9vYmpzIiAodGhlIGRv dWJsZSBwb2ludGVyKSBhbmQgIipmb3VuZF9vYmpzIiAodGhlCisgKiAgICAgICAgb25jZS1kZXJl ZmVyZW5jZWQgZG91YmxlIHBvaW50ZXIpIGFyZSBub3QgTlVMTCwgdGhpcyBsaXN0IHRha2VzCisg KiAgICAgICAgcHJpb3JpdHksIGFuZCBhbnl0aGluZyBzcGVjaWZpZWQgaW4gIm9iamVjdHMiIGlz IGlnbm9yZWQuCisgKgorICogICAgIGIpIElmICJmb3VuZF9vYmpzIiAodGhlIGRvdWJsZSBwb2lu dGVyKSBpcyBub3QgTlVMTCBidXQgIipmb3VuZF9vYmpzIgorICogICAgICAgICh0aGUgb25jZS1k ZXJlZmVyZW5jZWQgZG91YmxlIHBvaW50ZXIpIF9pc18gTlVMTCwgdGhlICJvYmplY3RzIgorICog ICAgICAgIHBhcmFtZXRlciB0YWtlcyBwcmlvcml0eSwgYW5kIHRoZSByZXN1bHRzIG9mIHRoZSBj YXRhbG9nIHF1ZXJ5CisgKiAgICAgICAgZGVzY3JpYmVkIGluICgyKSBhcmUgc3RvcmVkIGluICJm b3VuZF9vYmpzIi4KKyAqCisgKiAgICAgYykgSWYgImZvdW5kX29ianMiICh0aGUgZG91YmxlIHBv aW50ZXIpIGlzIE5VTEwsIHRoZSAib2JqZWN0cyIKKyAqICAgICAgICBwYXJhbWV0ZXIgYWdhaW4g dGFrZXMgcHJpb3JpdHksIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUgY2F0YWxvZyBxdWVyeQorICog ICAgICAgIGFyZSBub3Qgc2F2ZWQuCisgKgorICogMikgVGhlICJvYmplY3RzIiBwYXJhbWV0ZXIg aXMgYSB1c2VyLXNwZWNpZmllZCBsaXN0IG9mIG9iamVjdHMgdG8gcHJvY2Vzcy4KKyAqICAgIFdo ZW4gKDFiKSBvciAoMWMpIGFwcGxpZXMsIHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBjYXRhbG9n IHF1ZXJ5IHRvCisgKiAgICByZXRyaWV2ZSBhIGZ1bGx5IHF1YWxpZmllZCBsaXN0IG9mIG9iamVj dHMgdG8gcHJvY2VzcywgYXMgZGVzY3JpYmVkCisgKiAgICBiZWxvdy4KKyAqCisgKiAgICAgYSkg SWYgIm9iamVjdHMiIGlzIG5vdCBOVUxMLCB0aGUgY2F0YWxvZyBxdWVyeSBnYXRoZXJzIG9ubHkg dGhlIG9iamVjdHMKKyAqICAgICAgICBsaXN0ZWQgaW4gIm9iamVjdHMiLgorICoKKyAqICAgICBi KSBJZiAib2JqZWN0cyIgaXMgTlVMTCwgYWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UgYXJlIGdh dGhlcmVkLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY29uY2VybmVk IHdpdGggcnVubmluZyBleGFjdGx5IG9uZSBzdGFnZQorICogd2hlbiBpbiBhbmFseXplLWluLXN0 YWdlcyBtb2RlOyBjYWxsZXIgbXVzdCBpdGVyYXRlIG9uIHVzIGlmIG5lY2Vzc2FyeS4KKyAqCisg KiBJZiBjb25jdXJyZW50Q29ucyBpcyA+IDEsIG11bHRpcGxlIGNvbm5lY3Rpb25zIGFyZSB1c2Vk IHRvIHZhY3V1bSB0YWJsZXMKKyAqIGluIHBhcmFsbGVsLgorICovCit2b2lkCit2YWN1dW1fb25l X2RhdGFiYXNlKENvbm5QYXJhbXMgKmNwYXJhbXMsCisJCQkJCXZhY3V1bWluZ09wdGlvbnMgKnZh Y29wdHMsCisJCQkJCWludCBzdGFnZSwKKwkJCQkJU2ltcGxlU3RyaW5nTGlzdCAqb2JqZWN0cywK KwkJCQkJU2ltcGxlU3RyaW5nTGlzdCAqKmZvdW5kX29ianMsCisJCQkJCWludCBjb25jdXJyZW50 Q29ucywKKwkJCQkJY29uc3QgY2hhciAqcHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCBxdWlldCkK K3sKKwlQUUV4cEJ1ZmZlckRhdGEgc3FsOworCVBHY29ubgkgICAqY29ubjsKKwlTaW1wbGVTdHJp bmdMaXN0Q2VsbCAqY2VsbDsKKwlQYXJhbGxlbFNsb3RBcnJheSAqc2E7CisJaW50CQkJbnR1cHMg PSAwOworCWJvb2wJCWZhaWxlZCA9IGZhbHNlOworCWNvbnN0IGNoYXIgKmluaXRjbWQ7CisJU2lt cGxlU3RyaW5nTGlzdCAqcmV0ID0gTlVMTDsKKwljb25zdCBjaGFyICpzdGFnZV9jb21tYW5kc1td ID0geworCQkiU0VUIGRlZmF1bHRfc3RhdGlzdGljc190YXJnZXQ9MTsgU0VUIHZhY3V1bV9jb3N0 X2RlbGF5PTA7IiwKKwkJIlNFVCBkZWZhdWx0X3N0YXRpc3RpY3NfdGFyZ2V0PTEwOyBSRVNFVCB2 YWN1dW1fY29zdF9kZWxheTsiLAorCQkiUkVTRVQgZGVmYXVsdF9zdGF0aXN0aWNzX3RhcmdldDsi CisJfTsKKwljb25zdCBjaGFyICpzdGFnZV9tZXNzYWdlc1tdID0geworCQlnZXR0ZXh0X25vb3Ao IkdlbmVyYXRpbmcgbWluaW1hbCBvcHRpbWl6ZXIgc3RhdGlzdGljcyAoMSB0YXJnZXQpIiksCisJ CWdldHRleHRfbm9vcCgiR2VuZXJhdGluZyBtZWRpdW0gb3B0aW1pemVyIHN0YXRpc3RpY3MgKDEw IHRhcmdldHMpIiksCisJCWdldHRleHRfbm9vcCgiR2VuZXJhdGluZyBkZWZhdWx0IChmdWxsKSBv cHRpbWl6ZXIgc3RhdGlzdGljcyIpCisJfTsKKworCUFzc2VydChzdGFnZSA9PSBBTkFMWVpFX05P X1NUQUdFIHx8CisJCSAgIChzdGFnZSA+PSAwICYmIHN0YWdlIDwgQU5BTFlaRV9OVU1fU1RBR0VT KSk7CisKKwljb25uID0gY29ubmVjdERhdGFiYXNlKGNwYXJhbXMsIHByb2duYW1lLCBlY2hvLCBm YWxzZSwgdHJ1ZSk7CisKKwlpZiAodmFjb3B0cy0+ZGlzYWJsZV9wYWdlX3NraXBwaW5nICYmIFBR c2VydmVyVmVyc2lvbihjb25uKSA8IDkwNjAwKQorCXsKKwkJUFFmaW5pc2goY29ubik7CisJCXBn X2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBv bGRlciB0aGFuIFBvc3RncmVTUUwgJXMiLAorCQkJCSAiZGlzYWJsZS1wYWdlLXNraXBwaW5nIiwg IjkuNiIpOworCX0KKworCWlmICh2YWNvcHRzLT5ub19pbmRleF9jbGVhbnVwICYmIFBRc2VydmVy VmVyc2lvbihjb25uKSA8IDEyMDAwMCkKKwl7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRh bCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIg dGhhbiBQb3N0Z3JlU1FMICVzIiwKKwkJCQkgIm5vLWluZGV4LWNsZWFudXAiLCAiMTIiKTsKKwl9 CisKKwlpZiAodmFjb3B0cy0+Zm9yY2VfaW5kZXhfY2xlYW51cCAmJiBQUXNlcnZlclZlcnNpb24o Y29ubikgPCAxMjAwMDApCisJeworCQlQUWZpbmlzaChjb25uKTsKKwkJcGdfZmF0YWwoImNhbm5v dCB1c2UgdGhlIFwiJXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9z dGdyZVNRTCAlcyIsCisJCQkJICJmb3JjZS1pbmRleC1jbGVhbnVwIiwgIjEyIik7CisJfQorCisJ aWYgKCF2YWNvcHRzLT5kb190cnVuY2F0ZSAmJiBQUXNlcnZlclZlcnNpb24oY29ubikgPCAxMjAw MDApCisJeworCQlQUWZpbmlzaChjb25uKTsKKwkJcGdfZmF0YWwoImNhbm5vdCB1c2UgdGhlIFwi JXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9zdGdyZVNRTCAlcyIs CisJCQkJICJuby10cnVuY2F0ZSIsICIxMiIpOworCX0KKworCWlmICghdmFjb3B0cy0+cHJvY2Vz c19tYWluICYmIFBRc2VydmVyVmVyc2lvbihjb25uKSA8IDE2MDAwMCkKKwl7CisJCVBRZmluaXNo KGNvbm4pOworCQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2 ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKKwkJCQkgIm5vLXByb2Nlc3Mt bWFpbiIsICIxNiIpOworCX0KKworCWlmICghdmFjb3B0cy0+cHJvY2Vzc190b2FzdCAmJiBQUXNl cnZlclZlcnNpb24oY29ubikgPCAxNDAwMDApCisJeworCQlQUWZpbmlzaChjb25uKTsKKwkJcGdf ZmF0YWwoImNhbm5vdCB1c2UgdGhlIFwiJXNcIiBvcHRpb24gb24gc2VydmVyIHZlcnNpb25zIG9s ZGVyIHRoYW4gUG9zdGdyZVNRTCAlcyIsCisJCQkJICJuby1wcm9jZXNzLXRvYXN0IiwgIjE0Iik7 CisJfQorCisJaWYgKHZhY29wdHMtPnNraXBfbG9ja2VkICYmIFBRc2VydmVyVmVyc2lvbihjb25u KSA8IDEyMDAwMCkKKwl7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRhbCgiY2Fubm90IHVz ZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3Jl U1FMICVzIiwKKwkJCQkgInNraXAtbG9ja2VkIiwgIjEyIik7CisJfQorCisJaWYgKHZhY29wdHMt Pm1pbl94aWRfYWdlICE9IDAgJiYgUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgOTA2MDApCisJewor CQlQUWZpbmlzaChjb25uKTsKKwkJcGdfZmF0YWwoImNhbm5vdCB1c2UgdGhlIFwiJXNcIiBvcHRp b24gb24gc2VydmVyIHZlcnNpb25zIG9sZGVyIHRoYW4gUG9zdGdyZVNRTCAlcyIsCisJCQkJICIt LW1pbi14aWQtYWdlIiwgIjkuNiIpOworCX0KKworCWlmICh2YWNvcHRzLT5taW5fbXhpZF9hZ2Ug IT0gMCAmJiBQUXNlcnZlclZlcnNpb24oY29ubikgPCA5MDYwMCkKKwl7CisJCVBRZmluaXNoKGNv bm4pOworCQlwZ19mYXRhbCgiY2Fubm90IHVzZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIg dmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3JlU1FMICVzIiwKKwkJCQkgIi0tbWluLW14aWQtYWdl IiwgIjkuNiIpOworCX0KKworCWlmICh2YWNvcHRzLT5wYXJhbGxlbF93b3JrZXJzID49IDAgJiYg UFFzZXJ2ZXJWZXJzaW9uKGNvbm4pIDwgMTMwMDAwKQorCXsKKwkJUFFmaW5pc2goY29ubik7CisJ CXBnX2ZhdGFsKCJjYW5ub3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9u cyBvbGRlciB0aGFuIFBvc3RncmVTUUwgJXMiLAorCQkJCSAiLS1wYXJhbGxlbCIsICIxMyIpOwor CX0KKworCWlmICh2YWNvcHRzLT5idWZmZXJfdXNhZ2VfbGltaXQgJiYgUFFzZXJ2ZXJWZXJzaW9u KGNvbm4pIDwgMTYwMDAwKQorCXsKKwkJUFFmaW5pc2goY29ubik7CisJCXBnX2ZhdGFsKCJjYW5u b3QgdXNlIHRoZSBcIiVzXCIgb3B0aW9uIG9uIHNlcnZlciB2ZXJzaW9ucyBvbGRlciB0aGFuIFBv c3RncmVTUUwgJXMiLAorCQkJCSAiLS1idWZmZXItdXNhZ2UtbGltaXQiLCAiMTYiKTsKKwl9CisK KwlpZiAodmFjb3B0cy0+bWlzc2luZ19zdGF0c19vbmx5ICYmIFBRc2VydmVyVmVyc2lvbihjb25u KSA8IDE1MDAwMCkKKwl7CisJCVBRZmluaXNoKGNvbm4pOworCQlwZ19mYXRhbCgiY2Fubm90IHVz ZSB0aGUgXCIlc1wiIG9wdGlvbiBvbiBzZXJ2ZXIgdmVyc2lvbnMgb2xkZXIgdGhhbiBQb3N0Z3Jl U1FMICVzIiwKKwkJCQkgIi0tbWlzc2luZy1zdGF0cy1vbmx5IiwgIjE1Iik7CisJfQorCisJLyog c2tpcF9kYXRhYmFzZV9zdGF0cyBpcyB1c2VkIGF1dG9tYXRpY2FsbHkgaWYgc2VydmVyIHN1cHBv cnRzIGl0ICovCisJdmFjb3B0cy0+c2tpcF9kYXRhYmFzZV9zdGF0cyA9IChQUXNlcnZlclZlcnNp b24oY29ubikgPj0gMTYwMDAwKTsKKworCWlmICghcXVpZXQpCisJeworCQlpZiAoc3RhZ2UgIT0g QU5BTFlaRV9OT19TVEFHRSkKKwkJCXByaW50ZihfKCIlczogcHJvY2Vzc2luZyBkYXRhYmFzZSBc IiVzXCI6ICVzXG4iKSwKKwkJCQkgICBwcm9nbmFtZSwgUFFkYihjb25uKSwgXyhzdGFnZV9tZXNz YWdlc1tzdGFnZV0pKTsKKwkJZWxzZQorCQkJcHJpbnRmKF8oIiVzOiB2YWN1dW1pbmcgZGF0YWJh c2UgXCIlc1wiXG4iKSwKKwkJCQkgICBwcm9nbmFtZSwgUFFkYihjb25uKSk7CisJCWZmbHVzaChz dGRvdXQpOworCX0KKworCS8qCisJICogSWYgdGhlIGNhbGxlciBwcm92aWRlZCB0aGUgcmVzdWx0 cyBvZiBhIHByZXZpb3VzIGNhdGFsb2cgcXVlcnksIGp1c3QKKwkgKiB1c2UgdGhhdC4gIE90aGVy d2lzZSwgcnVuIHRoZSBjYXRhbG9nIHF1ZXJ5IG91cnNlbHZlcyBhbmQgc2V0IHRoZQorCSAqIHJl dHVybiB2YXJpYWJsZSBpZiBwcm92aWRlZC4KKwkgKi8KKwlpZiAoZm91bmRfb2JqcyAmJiAqZm91 bmRfb2JqcykKKwkJcmV0ID0gKmZvdW5kX29ianM7CisJZWxzZQorCXsKKwkJcmV0ID0gcmV0cmll dmVfb2JqZWN0cyhjb25uLCB2YWNvcHRzLCBvYmplY3RzLCBlY2hvKTsKKwkJaWYgKGZvdW5kX29i anMpCisJCQkqZm91bmRfb2JqcyA9IHJldDsKKwl9CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1i ZXIgb2Ygb2JqZWN0cyBpbiB0aGUgY2F0YWxvZyBxdWVyeSByZXN1bHQuICBJZiB0aGVyZSBhcmUK KwkgKiBub25lLCB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlmb3IgKGNlbGwgPSByZXQgPyByZXQtPmhl YWQgOiBOVUxMOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dCkKKwkJbnR1cHMrKzsKKworCWlmIChu dHVwcyA9PSAwKQorCXsKKwkJUFFmaW5pc2goY29ubik7CisJCXJldHVybjsKKwl9CisKKwkvKgor CSAqIEVuc3VyZSBjb25jdXJyZW50Q29ucyBpcyBzYW5lLiAgSWYgdGhlcmUgYXJlIG1vcmUgY29u bmVjdGlvbnMgdGhhbgorCSAqIHZhY3V1bWFibGUgcmVsYXRpb25zLCB3ZSBkb24ndCBuZWVkIHRv IHVzZSB0aGVtIGFsbC4KKwkgKi8KKwlpZiAoY29uY3VycmVudENvbnMgPiBudHVwcykKKwkJY29u Y3VycmVudENvbnMgPSBudHVwczsKKwlpZiAoY29uY3VycmVudENvbnMgPD0gMCkKKwkJY29uY3Vy cmVudENvbnMgPSAxOworCisJLyoKKwkgKiBBbGwgc2xvdHMgbmVlZCB0byBiZSBwcmVwYXJlZCB0 byBydW4gdGhlIGFwcHJvcHJpYXRlIGFuYWx5emUgc3RhZ2UsIGlmCisJICogY2FsbGVyIHJlcXVl c3RlZCB0aGF0IG1vZGUuICBXZSBoYXZlIHRvIHByZXBhcmUgdGhlIGluaXRpYWwgY29ubmVjdGlv bgorCSAqIG91cnNlbHZlcyBiZWZvcmUgc2V0dGluZyB1cCB0aGUgc2xvdHMuCisJICovCisJaWYg KHN0YWdlID09IEFOQUxZWkVfTk9fU1RBR0UpCisJCWluaXRjbWQgPSBOVUxMOworCWVsc2UKKwl7 CisJCWluaXRjbWQgPSBzdGFnZV9jb21tYW5kc1tzdGFnZV07CisJCWV4ZWN1dGVDb21tYW5kKGNv bm4sIGluaXRjbWQsIGVjaG8pOworCX0KKworCS8qCisJICogU2V0dXAgdGhlIGRhdGFiYXNlIGNv bm5lY3Rpb25zLiBXZSByZXVzZSB0aGUgY29ubmVjdGlvbiB3ZSBhbHJlYWR5IGhhdmUKKwkgKiBm b3IgdGhlIGZpcnN0IHNsb3QuICBJZiBub3QgaW4gcGFyYWxsZWwgbW9kZSwgdGhlIGZpcnN0IHNs b3QgaW4gdGhlCisJICogYXJyYXkgY29udGFpbnMgdGhlIGNvbm5lY3Rpb24uCisJICovCisJc2Eg PSBQYXJhbGxlbFNsb3RzU2V0dXAoY29uY3VycmVudENvbnMsIGNwYXJhbXMsIHByb2duYW1lLCBl Y2hvLCBpbml0Y21kKTsKKwlQYXJhbGxlbFNsb3RzQWRvcHRDb25uKHNhLCBjb25uKTsKKworCWlu aXRQUUV4cEJ1ZmZlcigmc3FsKTsKKworCWNlbGwgPSByZXQtPmhlYWQ7CisJZG8KKwl7CisJCWNv bnN0IGNoYXIgKnRhYm5hbWUgPSBjZWxsLT52YWw7CisJCVBhcmFsbGVsU2xvdCAqZnJlZV9zbG90 OworCisJCWlmIChDYW5jZWxSZXF1ZXN0ZWQpCisJCXsKKwkJCWZhaWxlZCA9IHRydWU7CisJCQln b3RvIGZpbmlzaDsKKwkJfQorCisJCWZyZWVfc2xvdCA9IFBhcmFsbGVsU2xvdHNHZXRJZGxlKHNh LCBOVUxMKTsKKwkJaWYgKCFmcmVlX3Nsb3QpCisJCXsKKwkJCWZhaWxlZCA9IHRydWU7CisJCQln b3RvIGZpbmlzaDsKKwkJfQorCisJCXByZXBhcmVfdmFjdXVtX2NvbW1hbmQoJnNxbCwgUFFzZXJ2 ZXJWZXJzaW9uKGZyZWVfc2xvdC0+Y29ubmVjdGlvbiksCisJCQkJCQkJICAgdmFjb3B0cywgdGFi bmFtZSk7CisKKwkJLyoKKwkJICogRXhlY3V0ZSB0aGUgdmFjdXVtLiAgQWxsIGVycm9ycyBhcmUg aGFuZGxlZCBpbiBwcm9jZXNzUXVlcnlSZXN1bHQKKwkJICogdGhyb3VnaCBQYXJhbGxlbFNsb3Rz R2V0SWRsZS4KKwkJICovCisJCVBhcmFsbGVsU2xvdFNldEhhbmRsZXIoZnJlZV9zbG90LCBUYWJs ZUNvbW1hbmRSZXN1bHRIYW5kbGVyLCBOVUxMKTsKKwkJcnVuX3ZhY3V1bV9jb21tYW5kKGZyZWVf c2xvdC0+Y29ubmVjdGlvbiwgc3FsLmRhdGEsCisJCQkJCQkgICBlY2hvLCB0YWJuYW1lKTsKKwor CQljZWxsID0gY2VsbC0+bmV4dDsKKwl9IHdoaWxlIChjZWxsICE9IE5VTEwpOworCisJaWYgKCFQ YXJhbGxlbFNsb3RzV2FpdENvbXBsZXRpb24oc2EpKQorCXsKKwkJZmFpbGVkID0gdHJ1ZTsKKwkJ Z290byBmaW5pc2g7CisJfQorCisJLyogSWYgd2UgdXNlZCBTS0lQX0RBVEFCQVNFX1NUQVRTLCBt b3AgdXAgd2l0aCBPTkxZX0RBVEFCQVNFX1NUQVRTICovCisJaWYgKHZhY29wdHMtPnNraXBfZGF0 YWJhc2Vfc3RhdHMgJiYKKwkJc3RhZ2UgPT0gQU5BTFlaRV9OT19TVEFHRSkKKwl7CisJCWNvbnN0 IGNoYXIgKmNtZCA9ICJWQUNVVU0gKE9OTFlfREFUQUJBU0VfU1RBVFMpOyI7CisJCVBhcmFsbGVs U2xvdCAqZnJlZV9zbG90ID0gUGFyYWxsZWxTbG90c0dldElkbGUoc2EsIE5VTEwpOworCisJCWlm ICghZnJlZV9zbG90KQorCQl7CisJCQlmYWlsZWQgPSB0cnVlOworCQkJZ290byBmaW5pc2g7CisJ CX0KKworCQlQYXJhbGxlbFNsb3RTZXRIYW5kbGVyKGZyZWVfc2xvdCwgVGFibGVDb21tYW5kUmVz dWx0SGFuZGxlciwgTlVMTCk7CisJCXJ1bl92YWN1dW1fY29tbWFuZChmcmVlX3Nsb3QtPmNvbm5l Y3Rpb24sIGNtZCwgZWNobywgTlVMTCk7CisKKwkJaWYgKCFQYXJhbGxlbFNsb3RzV2FpdENvbXBs ZXRpb24oc2EpKQorCQkJZmFpbGVkID0gdHJ1ZTsKKwl9CisKK2ZpbmlzaDoKKwlQYXJhbGxlbFNs b3RzVGVybWluYXRlKHNhKTsKKwlwZ19mcmVlKHNhKTsKKworCXRlcm1QUUV4cEJ1ZmZlcigmc3Fs KTsKKworCWlmIChmYWlsZWQpCisJCWV4aXQoMSk7Cit9CisKKy8qCisgKiBQcmVwYXJlIHRoZSBs aXN0IG9mIHRhYmxlcyB0byBwcm9jZXNzIGJ5IHF1ZXJ5aW5nIHRoZSBjYXRhbG9ncy4KKyAqCisg KiBTaW5jZSB3ZSBleGVjdXRlIHRoZSBjb25zdHJ1Y3RlZCBxdWVyeSB3aXRoIHRoZSBkZWZhdWx0 IHNlYXJjaF9wYXRoICh3aGljaAorICogY291bGQgYmUgdW5zYWZlKSwgZXZlcnl0aGluZyBpbiB0 aGlzIHF1ZXJ5IE1VU1QgYmUgZnVsbHkgcXVhbGlmaWVkLgorICoKKyAqIEZpcnN0LCBidWlsZCBh IFdJVEggY2xhdXNlIGZvciB0aGUgY2F0YWxvZyBxdWVyeSBpZiBhbnkgdGFibGVzIHdlcmUKKyAq IHNwZWNpZmllZCwgd2l0aCBhIHNldCBvZiB2YWx1ZXMgbWFkZSBvZiByZWxhdGlvbiBuYW1lcyBh bmQgdGhlaXIgb3B0aW9uYWwKKyAqIHNldCBvZiBjb2x1bW5zLiAgVGhpcyBpcyB1c2VkIHRvIG1h dGNoIGFueSBwcm92aWRlZCBjb2x1bW4gbGlzdHMgd2l0aCB0aGUKKyAqIGdlbmVyYXRlZCBxdWFs aWZpZWQgaWRlbnRpZmllcnMgYW5kIHRvIGZpbHRlciBmb3IgdGhlIHRhYmxlcyBwcm92aWRlZCB2 aWEKKyAqIC0tdGFibGUuICBJZiBhIGxpc3RlZCB0YWJsZSBkb2VzIG5vdCBleGlzdCwgdGhlIGNh dGFsb2cgcXVlcnkgd2lsbCBmYWlsLgorICovCitTaW1wbGVTdHJpbmdMaXN0ICoKK3JldHJpZXZl X29iamVjdHMoUEdjb25uICpjb25uLCB2YWN1dW1pbmdPcHRpb25zICp2YWNvcHRzLAorCQkJCSBT aW1wbGVTdHJpbmdMaXN0ICpvYmplY3RzLCBib29sIGVjaG8pCit7CisJUFFFeHBCdWZmZXJEYXRh IGJ1ZjsKKwlQUUV4cEJ1ZmZlckRhdGEgY2F0YWxvZ19xdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7 CisJU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGw7CisJU2ltcGxlU3RyaW5nTGlzdCAqZm91bmRf b2JqcyA9IHBhbGxvYzAoc2l6ZW9mKFNpbXBsZVN0cmluZ0xpc3QpKTsKKwlib29sCQlvYmplY3Rz X2xpc3RlZCA9IGZhbHNlOworCisJaW5pdFBRRXhwQnVmZmVyKCZjYXRhbG9nX3F1ZXJ5KTsKKwlm b3IgKGNlbGwgPSBvYmplY3RzID8gb2JqZWN0cy0+aGVhZCA6IE5VTEw7IGNlbGw7IGNlbGwgPSBj ZWxsLT5uZXh0KQorCXsKKwkJY2hhcgkgICAqanVzdF90YWJsZSA9IE5VTEw7CisJCWNvbnN0IGNo YXIgKmp1c3RfY29sdW1ucyA9IE5VTEw7CisKKwkJaWYgKCFvYmplY3RzX2xpc3RlZCkKKwkJewor CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCisJCQkJCQkJCSAiV0lUSCBs aXN0ZWRfb2JqZWN0cyAob2JqZWN0X29pZCwgY29sdW1uX2xpc3QpIEFTIChcbiIKKwkJCQkJCQkJ ICIgIFZBTFVFUyAoIik7CisJCQlvYmplY3RzX2xpc3RlZCA9IHRydWU7CisJCX0KKwkJZWxzZQor CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksICIsXG4gICgiKTsKKworCQlp ZiAob2JqZmlsdGVyICYgKE9CSkZJTFRFUl9TQ0hFTUEgfCBPQkpGSUxURVJfU0NIRU1BX0VYQ0xV REUpKQorCQl7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQ29ubigmY2F0YWxvZ19xdWVyeSwgY2Vs bC0+dmFsLCBjb25uKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAi OjpwZ19jYXRhbG9nLnJlZ25hbWVzcGFjZSwgIik7CisJCX0KKworCQlpZiAob2JqZmlsdGVyICYg T0JKRklMVEVSX1RBQkxFKQorCQl7CisJCQkvKgorCQkJICogU3BsaXQgcmVsYXRpb24gYW5kIGNv bHVtbiBuYW1lcyBnaXZlbiBieSB0aGUgdXNlciwgdGhpcyBpcyB1c2VkCisJCQkgKiB0byBmZWVk IHRoZSBDVEUgd2l0aCB2YWx1ZXMgb24gd2hpY2ggYXJlIHBlcmZvcm1lZCBwcmUtcnVuCisJCQkg KiB2YWxpZGl0eSBjaGVja3MgYXMgd2VsbC4gIEZvciBub3cgdGhlc2UgaGFwcGVuIG9ubHkgb24g dGhlCisJCQkgKiByZWxhdGlvbiBuYW1lLgorCQkJICovCisJCQlzcGxpdFRhYmxlQ29sdW1uc1Nw ZWMoY2VsbC0+dmFsLCBQUWNsaWVudEVuY29kaW5nKGNvbm4pLAorCQkJCQkJCQkgICZqdXN0X3Rh YmxlLCAmanVzdF9jb2x1bW5zKTsKKworCQkJYXBwZW5kU3RyaW5nTGl0ZXJhbENvbm4oJmNhdGFs b2dfcXVlcnksIGp1c3RfdGFibGUsIGNvbm4pOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNh dGFsb2dfcXVlcnksICI6OnBnX2NhdGFsb2cucmVnY2xhc3MsICIpOworCQl9CisKKwkJaWYgKGp1 c3RfY29sdW1ucyAmJiBqdXN0X2NvbHVtbnNbMF0gIT0gJ1wwJykKKwkJCWFwcGVuZFN0cmluZ0xp dGVyYWxDb25uKCZjYXRhbG9nX3F1ZXJ5LCBqdXN0X2NvbHVtbnMsIGNvbm4pOworCQllbHNlCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIk5VTEwiKTsKKworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIjo6cGdfY2F0YWxvZy50ZXh0KSIpOwor CisJCXBnX2ZyZWUoanVzdF90YWJsZSk7CisJfQorCisJLyogRmluaXNoIGZvcm1hdHRpbmcgdGhl IENURSAqLworCWlmIChvYmplY3RzX2xpc3RlZCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNh dGFsb2dfcXVlcnksICJcbilcbiIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2df cXVlcnksICJTRUxFQ1QgYy5yZWxuYW1lLCBucy5uc3BuYW1lIik7CisKKwlpZiAob2JqZWN0c19s aXN0ZWQpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiLCBsaXN0ZWRf b2JqZWN0cy5jb2x1bW5fbGlzdCIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2df cXVlcnksCisJCQkJCQkgIiBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuIgorCQkJCQkJICIg Sk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBucyIKKwkJCQkJCSAiIE9OIGMucmVsbmFtZXNw YWNlIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgbnMub2lkXG4iCisJCQkJCQkgIiBDUk9TUyBKT0lO IExBVEVSQUwgKFNFTEVDVCBjLnJlbGtpbmQgSU4gKCIKKwkJCQkJCSBDcHBBc1N0cmluZzIoUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkgIiwgIgorCQkJCQkJIENwcEFzU3RyaW5nMihSRUxLSU5E X1BBUlRJVElPTkVEX0lOREVYKSAiKSkgYXMgcCAoaW5oZXJpdGVkKVxuIgorCQkJCQkJICIgTEVG VCBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCIKKwkJCQkJCSAiIE9OIGMucmVsdG9hc3RyZWxp ZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIHQub2lkXG4iKTsKKworCS8qCisJICogVXNlZCB0byBt YXRjaCB0aGUgdGFibGVzIG9yIHNjaGVtYXMgbGlzdGVkIGJ5IHRoZSB1c2VyLCBjb21wbGV0aW5n IHRoZQorCSAqIEpPSU4gY2xhdXNlLgorCSAqLworCWlmIChvYmplY3RzX2xpc3RlZCkKKwl7CisJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiIExFRlQgSk9JTiBsaXN0ZWRf b2JqZWN0cyIKKwkJCQkJCQkgIiBPTiBsaXN0ZWRfb2JqZWN0cy5vYmplY3Rfb2lkIgorCQkJCQkJ CSAiIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgIik7CisKKwkJaWYgKG9iamZpbHRlciAmIE9CSkZJ TFRFUl9UQUJMRSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiYy5v aWRcbiIpOworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwg Im5zLm9pZFxuIik7CisJfQorCisJLyoKKwkgKiBFeGNsdWRlIHRlbXBvcmFyeSB0YWJsZXMsIGJl Z2lubmluZyB0aGUgV0hFUkUgY2xhdXNlLgorCSAqLworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZj YXRhbG9nX3F1ZXJ5LAorCQkJCQkJICIgV0hFUkUgYy5yZWxwZXJzaXN0ZW5jZSBPUEVSQVRPUihw Z19jYXRhbG9nLiE9KSAiCisJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTFBFUlNJU1RFTkNFX1RFTVAp ICJcbiIpOworCisJLyoKKwkgKiBVc2VkIHRvIG1hdGNoIHRoZSB0YWJsZXMgb3Igc2NoZW1hcyBs aXN0ZWQgYnkgdGhlIHVzZXIsIGZvciB0aGUgV0hFUkUKKwkgKiBjbGF1c2UuCisJICovCisJaWYg KG9iamVjdHNfbGlzdGVkKQorCXsKKwkJaWYgKG9iamZpbHRlciAmIE9CSkZJTFRFUl9TQ0hFTUFf RVhDTFVERSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAorCQkJCQkJ CQkgIiBBTkQgbGlzdGVkX29iamVjdHMub2JqZWN0X29pZCBJUyBOVUxMXG4iKTsKKwkJZWxzZQor CQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksCisJCQkJCQkJCSAiIEFORCBs aXN0ZWRfb2JqZWN0cy5vYmplY3Rfb2lkIElTIE5PVCBOVUxMXG4iKTsKKwl9CisKKwkvKgorCSAq IElmIG5vIHRhYmxlcyB3ZXJlIGxpc3RlZCwgZmlsdGVyIGZvciB0aGUgcmVsZXZhbnQgcmVsYXRp b24gdHlwZXMuICBJZgorCSAqIHRhYmxlcyB3ZXJlIGdpdmVuIHZpYSAtLXRhYmxlLCBkb24ndCBi b3RoZXIgZmlsdGVyaW5nIGJ5IHJlbGF0aW9uIHR5cGUuCisJICogSW5zdGVhZCwgbGV0IHRoZSBz ZXJ2ZXIgZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiByZWxhdGlvbiBjYW4gYmUKKwkgKiBwcm9jZXNz ZWQgaW4gd2hpY2ggY2FzZSB0aGUgdXNlciB3aWxsIGtub3cgYWJvdXQgaXQuCisJICovCisJaWYg KChvYmpmaWx0ZXIgJiBPQkpGSUxURVJfVEFCTEUpID09IDApCisJeworCQkvKgorCQkgKiB2YWN1 dW1kYiBzaG91bGQgZ2VuZXJhbGx5IGZvbGxvdyB0aGUgYmVoYXZpb3Igb2YgdGhlIHVuZGVybHlp bmcKKwkJICogVkFDVVVNIGFuZCBBTkFMWVpFIGNvbW1hbmRzLiBJZiBhbmFseXplX29ubHkgaXMg dHJ1ZSwgcHJvY2VzcworCQkgKiByZWd1bGFyIHRhYmxlcywgbWF0ZXJpYWxpemVkIHZpZXdzLCBh bmQgcGFydGl0aW9uZWQgdGFibGVzLCBqdXN0CisJCSAqIGxpa2UgQU5BTFlaRSAod2l0aCBubyBz cGVjaWZpYyB0YXJnZXQgdGFibGVzKSBkb2VzLiBPdGhlcndpc2UsCisJCSAqIHByb2Nlc3Mgb25s eSByZWd1bGFyIHRhYmxlcyBhbmQgbWF0ZXJpYWxpemVkIHZpZXdzLCBzaW5jZSBWQUNVVU0KKwkJ ICogc2tpcHMgcGFydGl0aW9uZWQgdGFibGVzIHdoZW4gbm8gdGFyZ2V0IHRhYmxlcyBhcmUgc3Bl Y2lmaWVkLgorCQkgKi8KKwkJaWYgKHZhY29wdHMtPmFuYWx5emVfb25seSkKKwkJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAorCQkJCQkJCQkgIiBBTkQgYy5yZWxraW5kIE9Q RVJBVE9SKHBnX2NhdGFsb2cuPSkgQU5ZIChhcnJheVsiCisJCQkJCQkJCSBDcHBBc1N0cmluZzIo UkVMS0lORF9SRUxBVElPTikgIiwgIgorCQkJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTEtJTkRfTUFU VklFVykgIiwgIgorCQkJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpICJdKVxuIik7CisJCWVsc2UKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1 ZXJ5LAorCQkJCQkJCQkgIiBBTkQgYy5yZWxraW5kIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgQU5Z IChhcnJheVsiCisJCQkJCQkJCSBDcHBBc1N0cmluZzIoUkVMS0lORF9SRUxBVElPTikgIiwgIgor CQkJCQkJCQkgQ3BwQXNTdHJpbmcyKFJFTEtJTkRfTUFUVklFVykgIl0pXG4iKTsKKwl9CisKKwkv KgorCSAqIEZvciAtLW1pbi14aWQtYWdlIGFuZCAtLW1pbi1teGlkLWFnZSwgdGhlIGFnZSBvZiB0 aGUgcmVsYXRpb24gaXMgdGhlCisJICogZ3JlYXRlc3Qgb2YgdGhlIGFnZXMgb2YgdGhlIG1haW4g cmVsYXRpb24gYW5kIGl0cyBhc3NvY2lhdGVkIFRPQVNUCisJICogdGFibGUuICBUaGUgY29tbWFu ZHMgZ2VuZXJhdGVkIGJ5IHZhY3V1bWRiIHdpbGwgYWxzbyBwcm9jZXNzIHRoZSBUT0FTVAorCSAq IHRhYmxlIGZvciB0aGUgcmVsYXRpb24gaWYgbmVjZXNzYXJ5LCBzbyBpdCBkb2VzIG5vdCBuZWVk IHRvIGJlCisJICogY29uc2lkZXJlZCBzZXBhcmF0ZWx5LgorCSAqLworCWlmICh2YWNvcHRzLT5t aW5feGlkX2FnZSAhPSAwKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmNhdGFsb2dfcXVlcnks CisJCQkJCQkgICIgQU5EIEdSRUFURVNUKHBnX2NhdGFsb2cuYWdlKGMucmVsZnJvemVueGlkKSwi CisJCQkJCQkgICIgcGdfY2F0YWxvZy5hZ2UodC5yZWxmcm96ZW54aWQpKSAiCisJCQkJCQkgICIg T1BFUkFUT1IocGdfY2F0YWxvZy4+PSkgJyVkJzo6cGdfY2F0YWxvZy5pbnQ0XG4iCisJCQkJCQkg ICIgQU5EIGMucmVsZnJvemVueGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuIT0pIgorCQkJCQkJICAi ICcwJzo6cGdfY2F0YWxvZy54aWRcbiIsCisJCQkJCQkgIHZhY29wdHMtPm1pbl94aWRfYWdlKTsK Kwl9CisKKwlpZiAodmFjb3B0cy0+bWluX214aWRfYWdlICE9IDApCisJeworCQlhcHBlbmRQUUV4 cEJ1ZmZlcigmY2F0YWxvZ19xdWVyeSwKKwkJCQkJCSAgIiBBTkQgR1JFQVRFU1QocGdfY2F0YWxv Zy5teGlkX2FnZShjLnJlbG1pbm14aWQpLCIKKwkJCQkJCSAgIiBwZ19jYXRhbG9nLm14aWRfYWdl KHQucmVsbWlubXhpZCkpIE9QRVJBVE9SKHBnX2NhdGFsb2cuPj0pIgorCQkJCQkJICAiICclZCc6 OnBnX2NhdGFsb2cuaW50NFxuIgorCQkJCQkJICAiIEFORCBjLnJlbG1pbm14aWQgT1BFUkFUT1Io cGdfY2F0YWxvZy4hPSkiCisJCQkJCQkgICIgJzAnOjpwZ19jYXRhbG9nLnhpZFxuIiwKKwkJCQkJ CSAgdmFjb3B0cy0+bWluX214aWRfYWdlKTsKKwl9CisKKwlpZiAodmFjb3B0cy0+bWlzc2luZ19z dGF0c19vbmx5KQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNhdGFsb2dfcXVlcnksICIg QU5EIChcbiIpOworCisJCS8qIHJlZ3VsYXIgc3RhdHMgKi8KKwkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNhdGFsb2dfcXVlcnksCisJCQkJCQkJICIgRVhJU1RTIChTRUxFQ1QgTlVMTCBGUk9NIHBn X2NhdGFsb2cucGdfYXR0cmlidXRlIGFcbiIKKwkJCQkJCQkgIiBXSEVSRSBhLmF0dHJlbGlkIE9Q RVJBVE9SKHBnX2NhdGFsb2cuPSkgYy5vaWRcbiIKKwkJCQkJCQkgIiBBTkQgYS5hdHRudW0gT1BF UkFUT1IocGdfY2F0YWxvZy4+KSAwOjpwZ19jYXRhbG9nLmludDJcbiIKKwkJCQkJCQkgIiBBTkQg Tk9UIGEuYXR0aXNkcm9wcGVkXG4iCisJCQkJCQkJICIgQU5EIGEuYXR0c3RhdHRhcmdldCBJUyBE SVNUSU5DVCBGUk9NIDA6OnBnX2NhdGFsb2cuaW50MlxuIgorCQkJCQkJCSAiIEFORCBhLmF0dGdl bmVyYXRlZCBPUEVSQVRPUihwZ19jYXRhbG9nLjw+KSAiCisJCQkJCQkJIENwcEFzU3RyaW5nMihB VFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpICJcbiIKKwkJCQkJCQkgIiBBTkQgTk9UIEVYSVNU UyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRpc3RpYyBzXG4iCisJCQkJCQkJ ICIgV0hFUkUgcy5zdGFyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0cmVsaWRcbiIK KwkJCQkJCQkgIiBBTkQgcy5zdGFhdHRudW0gT1BFUkFUT1IocGdfY2F0YWxvZy49KSBhLmF0dG51 bVxuIgorCQkJCQkJCSAiIEFORCBzLnN0YWluaGVyaXQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBw LmluaGVyaXRlZCkpXG4iKTsKKworCQkvKiBleHRlbmRlZCBzdGF0cyAqLworCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwKKwkJCQkJCQkgIiBPUiBFWElTVFMgKFNFTEVDVCBO VUxMIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0aXN0aWNfZXh0IGVcbiIKKwkJCQkJCQkgIiBXSEVS RSBlLnN0eHJlbGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYy5vaWRcbiIKKwkJCQkJCQkgIiBB TkQgZS5zdHhzdGF0dGFyZ2V0IElTIERJU1RJTkNUIEZST00gMDo6cGdfY2F0YWxvZy5pbnQyXG4i CisJCQkJCQkJICIgQU5EIE5PVCBFWElTVFMgKFNFTEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5w Z19zdGF0aXN0aWNfZXh0X2RhdGEgZFxuIgorCQkJCQkJCSAiIFdIRVJFIGQuc3R4b2lkIE9QRVJB VE9SKHBnX2NhdGFsb2cuPSkgZS5vaWRcbiIKKwkJCQkJCQkgIiBBTkQgZC5zdHhkaW5oZXJpdCBP UEVSQVRPUihwZ19jYXRhbG9nLj0pIHAuaW5oZXJpdGVkKSlcbiIpOworCisJCS8qIGV4cHJlc3Np b24gaW5kZXhlcyAqLworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwKKwkJ CQkJCQkgIiBPUiBFWElTVFMgKFNFTEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1 dGUgYVxuIgorCQkJCQkJCSAiIEpPSU4gcGdfY2F0YWxvZy5wZ19pbmRleCBpIgorCQkJCQkJCSAi IE9OIGkuaW5kZXhyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0cmVsaWRcbiIKKwkJ CQkJCQkgIiBXSEVSRSBpLmluZHJlbGlkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYy5vaWRcbiIK KwkJCQkJCQkgIiBBTkQgaS5pbmRrZXlbYS5hdHRudW0gT1BFUkFUT1IocGdfY2F0YWxvZy4tKSAx OjpwZ19jYXRhbG9nLmludDJdIgorCQkJCQkJCSAiIE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgMDo6 cGdfY2F0YWxvZy5pbnQyXG4iCisJCQkJCQkJICIgQU5EIGEuYXR0bnVtIE9QRVJBVE9SKHBnX2Nh dGFsb2cuPikgMDo6cGdfY2F0YWxvZy5pbnQyXG4iCisJCQkJCQkJICIgQU5EIE5PVCBhLmF0dGlz ZHJvcHBlZFxuIgorCQkJCQkJCSAiIEFORCBhLmF0dHN0YXR0YXJnZXQgSVMgRElTVElOQ1QgRlJP TSAwOjpwZ19jYXRhbG9nLmludDJcbiIKKwkJCQkJCQkgIiBBTkQgTk9UIEVYSVNUUyAoU0VMRUNU IE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRpc3RpYyBzXG4iCisJCQkJCQkJICIgV0hFUkUg cy5zdGFyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0cmVsaWRcbiIKKwkJCQkJCQkg IiBBTkQgcy5zdGFhdHRudW0gT1BFUkFUT1IocGdfY2F0YWxvZy49KSBhLmF0dG51bVxuIgorCQkJ CQkJCSAiIEFORCBzLnN0YWluaGVyaXQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBwLmluaGVyaXRl ZCkpXG4iKTsKKworCQkvKiBpbmhlcml0YW5jZSBhbmQgcmVndWxhciBzdGF0cyAqLworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwKKwkJCQkJCQkgIiBPUiBFWElTVFMgKFNF TEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYVxuIgorCQkJCQkJCSAiIFdI RVJFIGEuYXR0cmVsaWQgT1BFUkFUT1IocGdfY2F0YWxvZy49KSBjLm9pZFxuIgorCQkJCQkJCSAi IEFORCBhLmF0dG51bSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDA6OnBnX2NhdGFsb2cuaW50Mlxu IgorCQkJCQkJCSAiIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWRcbiIKKwkJCQkJCQkgIiBBTkQgYS5h dHRzdGF0dGFyZ2V0IElTIERJU1RJTkNUIEZST00gMDo6cGdfY2F0YWxvZy5pbnQyXG4iCisJCQkJ CQkJICIgQU5EIGEuYXR0Z2VuZXJhdGVkIE9QRVJBVE9SKHBnX2NhdGFsb2cuPD4pICIKKwkJCQkJ CQkgQ3BwQXNTdHJpbmcyKEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkgIlxuIgorCQkJCQkJ CSAiIEFORCBjLnJlbGhhc3N1YmNsYXNzXG4iCisJCQkJCQkJICIgQU5EIE5PVCBwLmluaGVyaXRl ZFxuIgorCQkJCQkJCSAiIEFORCBFWElTVFMgKFNFTEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5w Z19pbmhlcml0cyBoXG4iCisJCQkJCQkJICIgV0hFUkUgaC5pbmhwYXJlbnQgT1BFUkFUT1IocGdf Y2F0YWxvZy49KSBjLm9pZClcbiIKKwkJCQkJCQkgIiBBTkQgTk9UIEVYSVNUUyAoU0VMRUNUIE5V TEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRpc3RpYyBzXG4iCisJCQkJCQkJICIgV0hFUkUgcy5z dGFyZWxpZCBPUEVSQVRPUihwZ19jYXRhbG9nLj0pIGEuYXR0cmVsaWRcbiIKKwkJCQkJCQkgIiBB TkQgcy5zdGFhdHRudW0gT1BFUkFUT1IocGdfY2F0YWxvZy49KSBhLmF0dG51bVxuIgorCQkJCQkJ CSAiIEFORCBzLnN0YWluaGVyaXQpKVxuIik7CisKKwkJLyogaW5oZXJpdGFuY2UgYW5kIGV4dGVu ZGVkIHN0YXRzICovCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LAorCQkJ CQkJCSAiIE9SIEVYSVNUUyAoU0VMRUNUIE5VTEwgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRpc3Rp Y19leHQgZVxuIgorCQkJCQkJCSAiIFdIRVJFIGUuc3R4cmVsaWQgT1BFUkFUT1IocGdfY2F0YWxv Zy49KSBjLm9pZFxuIgorCQkJCQkJCSAiIEFORCBlLnN0eHN0YXR0YXJnZXQgSVMgRElTVElOQ1Qg RlJPTSAwOjpwZ19jYXRhbG9nLmludDJcbiIKKwkJCQkJCQkgIiBBTkQgYy5yZWxoYXNzdWJjbGFz c1xuIgorCQkJCQkJCSAiIEFORCBOT1QgcC5pbmhlcml0ZWRcbiIKKwkJCQkJCQkgIiBBTkQgRVhJ U1RTIChTRUxFQ1QgTlVMTCBGUk9NIHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaFxuIgorCQkJCQkJ CSAiIFdIRVJFIGguaW5ocGFyZW50IE9QRVJBVE9SKHBnX2NhdGFsb2cuPSkgYy5vaWQpXG4iCisJ CQkJCQkJICIgQU5EIE5PVCBFWElTVFMgKFNFTEVDVCBOVUxMIEZST00gcGdfY2F0YWxvZy5wZ19z dGF0aXN0aWNfZXh0X2RhdGEgZFxuIgorCQkJCQkJCSAiIFdIRVJFIGQuc3R4b2lkIE9QRVJBVE9S KHBnX2NhdGFsb2cuPSkgZS5vaWRcbiIKKwkJCQkJCQkgIiBBTkQgZC5zdHhkaW5oZXJpdCkpXG4i KTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY2F0YWxvZ19xdWVyeSwgIiApXG4iKTsKKwl9 CisKKwkvKgorCSAqIEV4ZWN1dGUgdGhlIGNhdGFsb2cgcXVlcnkuICBXZSB1c2UgdGhlIGRlZmF1 bHQgc2VhcmNoX3BhdGggZm9yIHRoaXMKKwkgKiBxdWVyeSBmb3IgY29uc2lzdGVuY3kgd2l0aCB0 YWJsZSBsb29rdXBzIGRvbmUgZWxzZXdoZXJlIGJ5IHRoZSB1c2VyLgorCSAqLworCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZjYXRhbG9nX3F1ZXJ5LCAiIE9SREVSIEJZIGMucmVscGFnZXMgREVTQzsi KTsKKwlleGVjdXRlQ29tbWFuZChjb25uLCAiUkVTRVQgc2VhcmNoX3BhdGg7IiwgZWNobyk7CisJ cmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGNhdGFsb2dfcXVlcnkuZGF0YSwgZWNobyk7CisJdGVy bVBRRXhwQnVmZmVyKCZjYXRhbG9nX3F1ZXJ5KTsKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25u LCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCwgZWNobykpOworCisJLyoKKwkgKiBCdWls ZCBxdWFsaWZpZWQgaWRlbnRpZmllcnMgZm9yIGVhY2ggdGFibGUsIGluY2x1ZGluZyB0aGUgY29s dW1uIGxpc3QKKwkgKiBpZiBnaXZlbi4KKwkgKi8KKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQorCXsKKwkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgZm10UXVhbGlmaWVkSWRFbmMoUFFnZXR2YWx1ZShy ZXMsIGksIDEpLAorCQkJCQkJCQkJCQkgICBQUWdldHZhbHVlKHJlcywgaSwgMCksCisJCQkJCQkJ CQkJCSAgIFBRY2xpZW50RW5jb2RpbmcoY29ubikpKTsKKworCQlpZiAob2JqZWN0c19saXN0ZWQg JiYgIVBRZ2V0aXNudWxsKHJlcywgaSwgMikpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVm LCBQUWdldHZhbHVlKHJlcywgaSwgMikpOworCisJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQo Zm91bmRfb2JqcywgYnVmLmRhdGEpOworCQlyZXNldFBRRXhwQnVmZmVyKCZidWYpOworCX0KKwl0 ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CisJUFFjbGVhcihyZXMpOworCisJcmV0dXJuIGZvdW5kX29i anM7Cit9CisKKy8qCisgKiBWYWN1dW0vYW5hbHl6ZSBhbGwgY29ubmVjdGFibGUgZGF0YWJhc2Vz LgorICoKKyAqIEluIGFuYWx5emUtaW4tc3RhZ2VzIG1vZGUsIHdlIHByb2Nlc3MgYWxsIGRhdGFi YXNlcyBpbiBvbmUgc3RhZ2UgYmVmb3JlCisgKiBtb3Zpbmcgb24gdG8gdGhlIG5leHQgc3RhZ2Uu ICBUaGF0IGVuc3VyZSBtaW5pbWFsIHN0YXRzIGFyZSBhdmFpbGFibGUKKyAqIHF1aWNrbHkgZXZl cnl3aGVyZSBiZWZvcmUgZ2VuZXJhdGluZyBtb3JlIGRldGFpbGVkIG9uZXMuCisgKi8KK3ZvaWQK K3ZhY3V1bV9hbGxfZGF0YWJhc2VzKENvbm5QYXJhbXMgKmNwYXJhbXMsCisJCQkJCSB2YWN1dW1p bmdPcHRpb25zICp2YWNvcHRzLAorCQkJCQkgYm9vbCBhbmFseXplX2luX3N0YWdlcywKKwkJCQkJ IFNpbXBsZVN0cmluZ0xpc3QgKm9iamVjdHMsCisJCQkJCSBpbnQgY29uY3VycmVudENvbnMsCisJ CQkJCSBjb25zdCBjaGFyICpwcm9nbmFtZSwgYm9vbCBlY2hvLCBib29sIHF1aWV0KQoreworCVBH Y29ubgkgICAqY29ubjsKKwlQR3Jlc3VsdCAgICpyZXN1bHQ7CisJaW50CQkJc3RhZ2U7CisJaW50 CQkJaTsKKworCWNvbm4gPSBjb25uZWN0TWFpbnRlbmFuY2VEYXRhYmFzZShjcGFyYW1zLCBwcm9n bmFtZSwgZWNobyk7CisJcmVzdWx0ID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCisJCQkJCQkgICJTRUxF Q1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGFsbG93Y29ubiBBTkQgZGF0Y29u bmxpbWl0IDw+IC0yIE9SREVSIEJZIDE7IiwKKwkJCQkJCSAgZWNobyk7CisJUFFmaW5pc2goY29u bik7CisKKwlpZiAoYW5hbHl6ZV9pbl9zdGFnZXMpCisJeworCQlTaW1wbGVTdHJpbmdMaXN0ICoq Zm91bmRfb2JqcyA9IE5VTEw7CisKKwkJaWYgKHZhY29wdHMtPm1pc3Npbmdfc3RhdHNfb25seSkK KwkJCWZvdW5kX29ianMgPSBwYWxsb2MwKFBRbnR1cGxlcyhyZXN1bHQpICogc2l6ZW9mKFNpbXBs ZVN0cmluZ0xpc3QgKikpOworCisJCS8qCisJCSAqIFdoZW4gYW5hbHl6aW5nIGFsbCBkYXRhYmFz ZXMgaW4gc3RhZ2VzLCB3ZSBhbmFseXplIHRoZW0gYWxsIGluIHRoZQorCQkgKiBmYXN0ZXN0IHN0 YWdlIGZpcnN0LCBzbyB0aGF0IGluaXRpYWwgc3RhdGlzdGljcyBiZWNvbWUgYXZhaWxhYmxlCisJ CSAqIGZvciBhbGwgb2YgdGhlbSBhcyBzb29uIGFzIHBvc3NpYmxlLgorCQkgKgorCQkgKiBUaGlz IG1lYW5zIHdlIGVzdGFibGlzaCBzZXZlcmFsIHRpbWVzIGFzIG1hbnkgY29ubmVjdGlvbnMsIGJ1 dAorCQkgKiB0aGF0J3MgYSBzZWNvbmRhcnkgY29uc2lkZXJhdGlvbi4KKwkJICovCisJCWZvciAo c3RhZ2UgPSAwOyBzdGFnZSA8IEFOQUxZWkVfTlVNX1NUQUdFUzsgc3RhZ2UrKykKKwkJeworCQkJ Zm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXN1bHQpOyBpKyspCisJCQl7CisJCQkJY3BhcmFt cy0+b3ZlcnJpZGVfZGJuYW1lID0gUFFnZXR2YWx1ZShyZXN1bHQsIGksIDApOworCisJCQkJdmFj dXVtX29uZV9kYXRhYmFzZShjcGFyYW1zLCB2YWNvcHRzLAorCQkJCQkJCQkJc3RhZ2UsCisJCQkJ CQkJCQlvYmplY3RzLAorCQkJCQkJCQkJdmFjb3B0cy0+bWlzc2luZ19zdGF0c19vbmx5ID8gJmZv dW5kX29ianNbaV0gOiBOVUxMLAorCQkJCQkJCQkJY29uY3VycmVudENvbnMsCisJCQkJCQkJCQlw cm9nbmFtZSwgZWNobywgcXVpZXQpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzdWx0KTsgaSsrKQorCQl7CisJCQljcGFyYW1zLT5vdmVy cmlkZV9kYm5hbWUgPSBQUWdldHZhbHVlKHJlc3VsdCwgaSwgMCk7CisKKwkJCXZhY3V1bV9vbmVf ZGF0YWJhc2UoY3BhcmFtcywgdmFjb3B0cywKKwkJCQkJCQkJQU5BTFlaRV9OT19TVEFHRSwKKwkJ CQkJCQkJb2JqZWN0cywgTlVMTCwKKwkJCQkJCQkJY29uY3VycmVudENvbnMsCisJCQkJCQkJCXBy b2duYW1lLCBlY2hvLCBxdWlldCk7CisJCX0KKwl9CisKKwlQUWNsZWFyKHJlc3VsdCk7Cit9CisK Ky8qCisgKiBDb25zdHJ1Y3QgYSB2YWN1dW0vYW5hbHl6ZSBjb21tYW5kIHRvIHJ1biBiYXNlZCBv biB0aGUgZ2l2ZW4KKyAqIG9wdGlvbnMsIGluIHRoZSBnaXZlbiBzdHJpbmcgYnVmZmVyLCB3aGlj aCBtYXkgY29udGFpbiBwcmV2aW91cyBnYXJiYWdlLgorICoKKyAqIFRoZSB0YWJsZSBuYW1lIHVz ZWQgbXVzdCBiZSBhbHJlYWR5IHByb3Blcmx5IHF1b3RlZC4gIFRoZSBjb21tYW5kIGdlbmVyYXRl ZAorICogZGVwZW5kcyBvbiB0aGUgc2VydmVyIHZlcnNpb24gaW52b2x2ZWQgYW5kIGl0IGlzIHNl bWljb2xvbi10ZXJtaW5hdGVkLgorICovCit2b2lkCitwcmVwYXJlX3ZhY3V1bV9jb21tYW5kKFBR RXhwQnVmZmVyIHNxbCwgaW50IHNlcnZlclZlcnNpb24sCisJCQkJCSAgIHZhY3V1bWluZ09wdGlv bnMgKnZhY29wdHMsIGNvbnN0IGNoYXIgKnRhYmxlKQoreworCWNvbnN0IGNoYXIgKnBhcmVuID0g IiAoIjsKKwljb25zdCBjaGFyICpjb21tYSA9ICIsICI7CisJY29uc3QgY2hhciAqc2VwID0gcGFy ZW47CisKKwlyZXNldFBRRXhwQnVmZmVyKHNxbCk7CisKKwlpZiAodmFjb3B0cy0+YW5hbHl6ZV9v bmx5KQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3FsLCAiQU5BTFlaRSIpOworCisJCS8q IHBhcmVudGhlc2l6ZWQgZ3JhbW1hciBvZiBBTkFMWVpFIGlzIHN1cHBvcnRlZCBzaW5jZSB2MTEg Ki8KKwkJaWYgKHNlcnZlclZlcnNpb24gPj0gMTEwMDAwKQorCQl7CisJCQlpZiAodmFjb3B0cy0+ c2tpcF9sb2NrZWQpCisJCQl7CisJCQkJLyogU0tJUF9MT0NLRUQgaXMgc3VwcG9ydGVkIHNpbmNl IHYxMiAqLworCQkJCUFzc2VydChzZXJ2ZXJWZXJzaW9uID49IDEyMDAwMCk7CisJCQkJYXBwZW5k UFFFeHBCdWZmZXIoc3FsLCAiJXNTS0lQX0xPQ0tFRCIsIHNlcCk7CisJCQkJc2VwID0gY29tbWE7 CisJCQl9CisJCQlpZiAodmFjb3B0cy0+dmVyYm9zZSkKKwkJCXsKKwkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcihzcWwsICIlc1ZFUkJPU0UiLCBzZXApOworCQkJCXNlcCA9IGNvbW1hOworCQkJfQorCQkJ aWYgKHZhY29wdHMtPmJ1ZmZlcl91c2FnZV9saW1pdCkKKwkJCXsKKwkJCQlBc3NlcnQoc2VydmVy VmVyc2lvbiA+PSAxNjAwMDApOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzQlVGRkVS X1VTQUdFX0xJTUlUICclcyciLCBzZXAsCisJCQkJCQkJCSAgdmFjb3B0cy0+YnVmZmVyX3VzYWdl X2xpbWl0KTsKKwkJCQlzZXAgPSBjb21tYTsKKwkJCX0KKwkJCWlmIChzZXAgIT0gcGFyZW4pCisJ CQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHNxbCwgJyknKTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CWlmICh2YWNvcHRzLT52ZXJib3NlKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIiBW RVJCT1NFIik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoc3Fs LCAiVkFDVVVNIik7CisKKwkJLyogcGFyZW50aGVzaXplZCBncmFtbWFyIG9mIFZBQ1VVTSBpcyBz dXBwb3J0ZWQgc2luY2UgdjkuMCAqLworCQlpZiAoc2VydmVyVmVyc2lvbiA+PSA5MDAwMCkKKwkJ eworCQkJaWYgKHZhY29wdHMtPmRpc2FibGVfcGFnZV9za2lwcGluZykKKwkJCXsKKwkJCQkvKiBE SVNBQkxFX1BBR0VfU0tJUFBJTkcgaXMgc3VwcG9ydGVkIHNpbmNlIHY5LjYgKi8KKwkJCQlBc3Nl cnQoc2VydmVyVmVyc2lvbiA+PSA5MDYwMCk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAi JXNESVNBQkxFX1BBR0VfU0tJUFBJTkciLCBzZXApOworCQkJCXNlcCA9IGNvbW1hOworCQkJfQor CQkJaWYgKHZhY29wdHMtPm5vX2luZGV4X2NsZWFudXApCisJCQl7CisJCQkJLyogIklOREVYX0NM RUFOVVAgRkFMU0UiIGhhcyBiZWVuIHN1cHBvcnRlZCBzaW5jZSB2MTIgKi8KKwkJCQlBc3NlcnQo c2VydmVyVmVyc2lvbiA+PSAxMjAwMDApOworCQkJCUFzc2VydCghdmFjb3B0cy0+Zm9yY2VfaW5k ZXhfY2xlYW51cCk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNJTkRFWF9DTEVBTlVQ IEZBTFNFIiwgc2VwKTsKKwkJCQlzZXAgPSBjb21tYTsKKwkJCX0KKwkJCWlmICh2YWNvcHRzLT5m b3JjZV9pbmRleF9jbGVhbnVwKQorCQkJeworCQkJCS8qICJJTkRFWF9DTEVBTlVQIFRSVUUiIGhh cyBiZWVuIHN1cHBvcnRlZCBzaW5jZSB2MTIgKi8KKwkJCQlBc3NlcnQoc2VydmVyVmVyc2lvbiA+ PSAxMjAwMDApOworCQkJCUFzc2VydCghdmFjb3B0cy0+bm9faW5kZXhfY2xlYW51cCk7CisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNJTkRFWF9DTEVBTlVQIFRSVUUiLCBzZXApOworCQkJ CXNlcCA9IGNvbW1hOworCQkJfQorCQkJaWYgKCF2YWNvcHRzLT5kb190cnVuY2F0ZSkKKwkJCXsK KwkJCQkvKiBUUlVOQ0FURSBpcyBzdXBwb3J0ZWQgc2luY2UgdjEyICovCisJCQkJQXNzZXJ0KHNl cnZlclZlcnNpb24gPj0gMTIwMDAwKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc1RS VU5DQVRFIEZBTFNFIiwgc2VwKTsKKwkJCQlzZXAgPSBjb21tYTsKKwkJCX0KKwkJCWlmICghdmFj b3B0cy0+cHJvY2Vzc19tYWluKQorCQkJeworCQkJCS8qIFBST0NFU1NfTUFJTiBpcyBzdXBwb3J0 ZWQgc2luY2UgdjE2ICovCisJCQkJQXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gMTYwMDAwKTsKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc1BST0NFU1NfTUFJTiBGQUxTRSIsIHNlcCk7CisJ CQkJc2VwID0gY29tbWE7CisJCQl9CisJCQlpZiAoIXZhY29wdHMtPnByb2Nlc3NfdG9hc3QpCisJ CQl7CisJCQkJLyogUFJPQ0VTU19UT0FTVCBpcyBzdXBwb3J0ZWQgc2luY2UgdjE0ICovCisJCQkJ QXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gMTQwMDAwKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihz cWwsICIlc1BST0NFU1NfVE9BU1QgRkFMU0UiLCBzZXApOworCQkJCXNlcCA9IGNvbW1hOworCQkJ fQorCQkJaWYgKHZhY29wdHMtPnNraXBfZGF0YWJhc2Vfc3RhdHMpCisJCQl7CisJCQkJLyogU0tJ UF9EQVRBQkFTRV9TVEFUUyBpcyBzdXBwb3J0ZWQgc2luY2UgdjE2ICovCisJCQkJQXNzZXJ0KHNl cnZlclZlcnNpb24gPj0gMTYwMDAwKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc1NL SVBfREFUQUJBU0VfU1RBVFMiLCBzZXApOworCQkJCXNlcCA9IGNvbW1hOworCQkJfQorCQkJaWYg KHZhY29wdHMtPnNraXBfbG9ja2VkKQorCQkJeworCQkJCS8qIFNLSVBfTE9DS0VEIGlzIHN1cHBv cnRlZCBzaW5jZSB2MTIgKi8KKwkJCQlBc3NlcnQoc2VydmVyVmVyc2lvbiA+PSAxMjAwMDApOwor CQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzU0tJUF9MT0NLRUQiLCBzZXApOworCQkJCXNl cCA9IGNvbW1hOworCQkJfQorCQkJaWYgKHZhY29wdHMtPmZ1bGwpCisJCQl7CisJCQkJYXBwZW5k UFFFeHBCdWZmZXIoc3FsLCAiJXNGVUxMIiwgc2VwKTsKKwkJCQlzZXAgPSBjb21tYTsKKwkJCX0K KwkJCWlmICh2YWNvcHRzLT5mcmVlemUpCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3Fs LCAiJXNGUkVFWkUiLCBzZXApOworCQkJCXNlcCA9IGNvbW1hOworCQkJfQorCQkJaWYgKHZhY29w dHMtPnZlcmJvc2UpCisJCQl7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoc3FsLCAiJXNWRVJCT1NF Iiwgc2VwKTsKKwkJCQlzZXAgPSBjb21tYTsKKwkJCX0KKwkJCWlmICh2YWNvcHRzLT5hbmRfYW5h bHl6ZSkKKwkJCXsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihzcWwsICIlc0FOQUxZWkUiLCBzZXAp OworCQkJCXNlcCA9IGNvbW1hOworCQkJfQorCQkJaWYgKHZhY29wdHMtPnBhcmFsbGVsX3dvcmtl cnMgPj0gMCkKKwkJCXsKKwkJCQkvKiBQQVJBTExFTCBpcyBzdXBwb3J0ZWQgc2luY2UgdjEzICov CisJCQkJQXNzZXJ0KHNlcnZlclZlcnNpb24gPj0gMTMwMDAwKTsKKwkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcihzcWwsICIlc1BBUkFMTEVMICVkIiwgc2VwLAorCQkJCQkJCQkgIHZhY29wdHMtPnBhcmFs bGVsX3dvcmtlcnMpOworCQkJCXNlcCA9IGNvbW1hOworCQkJfQorCQkJaWYgKHZhY29wdHMtPmJ1 ZmZlcl91c2FnZV9saW1pdCkKKwkJCXsKKwkJCQlBc3NlcnQoc2VydmVyVmVyc2lvbiA+PSAxNjAw MDApOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKHNxbCwgIiVzQlVGRkVSX1VTQUdFX0xJTUlUICcl cyciLCBzZXAsCisJCQkJCQkJCSAgdmFjb3B0cy0+YnVmZmVyX3VzYWdlX2xpbWl0KTsKKwkJCQlz ZXAgPSBjb21tYTsKKwkJCX0KKwkJCWlmIChzZXAgIT0gcGFyZW4pCisJCQkJYXBwZW5kUFFFeHBC dWZmZXJDaGFyKHNxbCwgJyknKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICh2YWNvcHRzLT5m dWxsKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIiBGVUxMIik7CisJCQlpZiAodmFj b3B0cy0+ZnJlZXplKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwgIiBGUkVFWkUiKTsK KwkJCWlmICh2YWNvcHRzLT52ZXJib3NlKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHNxbCwg IiBWRVJCT1NFIik7CisJCQlpZiAodmFjb3B0cy0+YW5kX2FuYWx5emUpCisJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoc3FsLCAiIEFOQUxZWkUiKTsKKwkJfQorCX0KKworCWFwcGVuZFBRRXhwQnVm ZmVyKHNxbCwgIiAlczsiLCB0YWJsZSk7Cit9CisKKy8qCisgKiBTZW5kIGEgdmFjdXVtL2FuYWx5 emUgY29tbWFuZCB0byB0aGUgc2VydmVyLCByZXR1cm5pbmcgYWZ0ZXIgc2VuZGluZyB0aGUKKyAq IGNvbW1hbmQuCisgKgorICogQW55IGVycm9ycyBkdXJpbmcgY29tbWFuZCBleGVjdXRpb24gYXJl IHJlcG9ydGVkIHRvIHN0ZGVyci4KKyAqLwordm9pZAorcnVuX3ZhY3V1bV9jb21tYW5kKFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqc3FsLCBib29sIGVjaG8sCisJCQkJICAgY29uc3QgY2hhciAq dGFibGUpCit7CisJYm9vbAkJc3RhdHVzOworCisJaWYgKGVjaG8pCisJCXByaW50ZigiJXNcbiIs IHNxbCk7CisKKwlzdGF0dXMgPSBQUXNlbmRRdWVyeShjb25uLCBzcWwpID09IDE7CisKKwlpZiAo IXN0YXR1cykKKwl7CisJCWlmICh0YWJsZSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJ2YWN1dW1p bmcgb2YgdGFibGUgXCIlc1wiIGluIGRhdGFiYXNlIFwiJXNcIiBmYWlsZWQ6ICVzIiwKKwkJCQkJ CSB0YWJsZSwgUFFkYihjb25uKSwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQl9CisJCWVsc2UK KwkJeworCQkJcGdfbG9nX2Vycm9yKCJ2YWN1dW1pbmcgb2YgZGF0YWJhc2UgXCIlc1wiIGZhaWxl ZDogJXMiLAorCQkJCQkJIFBRZGIoY29ubiksIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFJldHVybnMgYSBuZXdseSBtYWxsb2MnZCB2ZXJzaW9uIG9mICdzcmMn IHdpdGggZXNjYXBlZCBzaW5nbGUgcXVvdGVzIGFuZAorICogYmFja3NsYXNoZXMuCisgKi8KK2No YXIgKgorZXNjYXBlX3F1b3Rlcyhjb25zdCBjaGFyICpzcmMpCit7CisJY2hhcgkgICAqcmVzdWx0 ID0gZXNjYXBlX3NpbmdsZV9xdW90ZXNfYXNjaWkoc3JjKTsKKworCWlmICghcmVzdWx0KQorCQlw Z19mYXRhbCgib3V0IG9mIG1lbW9yeSIpOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5nLmggYi9zcmMvYmluL3NjcmlwdHMvdmFjdXVtaW5n LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZjAwMDg0MGZhCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oCkBAIC0wLDAgKzEs OTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHZhY3V1bWluZy5oCisgKgkJQ29tbW9u IGRlY2xhcmF0aW9ucyBmb3IgdmFjdXVtaW5nLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCisgKgorICogc3JjL2Jpbi9zY3JpcHRzL3ZhY3V1bWluZy5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgVkFDVVVNSU5HX0gKKyNkZWZpbmUgVkFDVVVNSU5H X0gKKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImZlX3V0aWxzL2Nvbm5lY3RfdXRp bHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgorCisvKiBGb3IgYW5hbHl6 ZS1pbi1zdGFnZXMgbW9kZSAqLworI2RlZmluZSBBTkFMWVpFX05PX1NUQUdFCS0xCisjZGVmaW5l IEFOQUxZWkVfTlVNX1NUQUdFUwkzCisKKy8qIHZhY3V1bSBvcHRpb25zIGNvbnRyb2xsZWQgYnkg dXNlciBmbGFncyAqLwordHlwZWRlZiBzdHJ1Y3QgdmFjdXVtaW5nT3B0aW9ucworeworCWJvb2wJ CWFuYWx5emVfb25seTsKKwlib29sCQl2ZXJib3NlOworCWJvb2wJCWFuZF9hbmFseXplOworCWJv b2wJCWZ1bGw7CisJYm9vbAkJZnJlZXplOworCWJvb2wJCWRpc2FibGVfcGFnZV9za2lwcGluZzsK Kwlib29sCQlza2lwX2xvY2tlZDsKKwlpbnQJCQltaW5feGlkX2FnZTsKKwlpbnQJCQltaW5fbXhp ZF9hZ2U7CisJaW50CQkJcGFyYWxsZWxfd29ya2VyczsJLyogPj0gMCBpbmRpY2F0ZXMgdXNlciBz cGVjaWZpZWQgdGhlCisJCQkJCQkJCQkgKiBwYXJhbGxlbCBkZWdyZWUsIG90aGVyd2lzZSAtMSAq LworCWJvb2wJCW5vX2luZGV4X2NsZWFudXA7CisJYm9vbAkJZm9yY2VfaW5kZXhfY2xlYW51cDsK Kwlib29sCQlkb190cnVuY2F0ZTsKKwlib29sCQlwcm9jZXNzX21haW47CisJYm9vbAkJcHJvY2Vz c190b2FzdDsKKwlib29sCQlza2lwX2RhdGFiYXNlX3N0YXRzOworCWNoYXIJICAgKmJ1ZmZlcl91 c2FnZV9saW1pdDsKKwlib29sCQltaXNzaW5nX3N0YXRzX29ubHk7Cit9IHZhY3V1bWluZ09wdGlv bnM7CisKKy8qIG9iamVjdCBmaWx0ZXIgb3B0aW9ucyAqLwordHlwZWRlZiBlbnVtCit7CisJT0JK RklMVEVSX05PTkUgPSAwLAkJCS8qIG5vIGZpbHRlciB1c2VkICovCisJT0JKRklMVEVSX0FMTF9E QlMgPSAoMSA8PCAwKSwJLyogLWEgfCAtLWFsbCAqLworCU9CSkZJTFRFUl9EQVRBQkFTRSA9ICgx IDw8IDEpLAkvKiAtZCB8IC0tZGJuYW1lICovCisJT0JKRklMVEVSX1RBQkxFID0gKDEgPDwgMiks IC8qIC10IHwgLS10YWJsZSAqLworCU9CSkZJTFRFUl9TQ0hFTUEgPSAoMSA8PCAzKSwJLyogLW4g fCAtLXNjaGVtYSAqLworCU9CSkZJTFRFUl9TQ0hFTUFfRVhDTFVERSA9ICgxIDw8IDQpLAkvKiAt TiB8IC0tZXhjbHVkZS1zY2hlbWEgKi8KK30gVmFjT2JqRmlsdGVyOworCitleHRlcm4gVmFjT2Jq RmlsdGVyIG9iamZpbHRlcjsKKworZXh0ZXJuIHZvaWQgdmFjdXVtaW5nX21haW4oQ29ublBhcmFt cyAqY3BhcmFtcywgY29uc3QgY2hhciAqZGJuYW1lLAorCQkJCQkJICAgY29uc3QgY2hhciAqbWFp bnRlbmFuY2VfZGIsIHZhY3V1bWluZ09wdGlvbnMgKnZhY29wdHMsCisJCQkJCQkgICBTaW1wbGVT dHJpbmdMaXN0ICpvYmplY3RzLCBib29sIGFuYWx5emVfaW5fc3RhZ2VzLAorCQkJCQkJICAgaW50 IHRibF9jb3VudCwgaW50IGNvbmN1cnJlbnRDb25zLAorCQkJCQkJICAgY29uc3QgY2hhciAqcHJv Z25hbWUsIGJvb2wgZWNobywgYm9vbCBxdWlldCk7CisKK2V4dGVybiBTaW1wbGVTdHJpbmdMaXN0 ICpyZXRyaWV2ZV9vYmplY3RzKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQkgIHZhY3V1bWluZ09w dGlvbnMgKnZhY29wdHMsCisJCQkJCQkJCQkJICBTaW1wbGVTdHJpbmdMaXN0ICpvYmplY3RzLAor CQkJCQkJCQkJCSAgYm9vbCBlY2hvKTsKKworZXh0ZXJuIHZvaWQgdmFjdXVtX29uZV9kYXRhYmFz ZShDb25uUGFyYW1zICpjcGFyYW1zLAorCQkJCQkJCQl2YWN1dW1pbmdPcHRpb25zICp2YWNvcHRz LAorCQkJCQkJCQlpbnQgc3RhZ2UsCisJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgKm9iamVjdHMs CisJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgKipmb3VuZF9vYmpzLAorCQkJCQkJCQlpbnQgY29u Y3VycmVudENvbnMsCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByb2duYW1lLCBib29sIGVjaG8sIGJv b2wgcXVpZXQpOworCitleHRlcm4gdm9pZCB2YWN1dW1fYWxsX2RhdGFiYXNlcyhDb25uUGFyYW1z ICpjcGFyYW1zLAorCQkJCQkJCQkgdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywKKwkJCQkJCQkJ IGJvb2wgYW5hbHl6ZV9pbl9zdGFnZXMsCisJCQkJCQkJCSBTaW1wbGVTdHJpbmdMaXN0ICpvYmpl Y3RzLAorCQkJCQkJCQkgaW50IGNvbmN1cnJlbnRDb25zLAorCQkJCQkJCQkgY29uc3QgY2hhciAq cHJvZ25hbWUsIGJvb2wgZWNobywgYm9vbCBxdWlldCk7CisKK2V4dGVybiB2b2lkIHByZXBhcmVf dmFjdXVtX2NvbW1hbmQoUFFFeHBCdWZmZXIgc3FsLCBpbnQgc2VydmVyVmVyc2lvbiwKKwkJCQkJ CQkJICAgdmFjdXVtaW5nT3B0aW9ucyAqdmFjb3B0cywgY29uc3QgY2hhciAqdGFibGUpOworCitl eHRlcm4gdm9pZCBydW5fdmFjdXVtX2NvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpz cWwsIGJvb2wgZWNobywKKwkJCQkJCQkgICBjb25zdCBjaGFyICp0YWJsZSk7CisKK2V4dGVybiBj aGFyICplc2NhcGVfcXVvdGVzKGNvbnN0IGNoYXIgKnNyYyk7CisKKyNlbmRpZgkJCQkJCQkvKiBW QUNVVU1JTkdfSCAqLwotLSAKMi40My4wCgo= --000000000000d95176063dcf3119--