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 1u9Nve-001CV0-3M for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Apr 2025 12:49:46 +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 1u9Nud-000hfj-CP for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Apr 2025 12:48:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u9Nuc-000hfa-VW for pgsql-hackers@lists.postgresql.org; Mon, 28 Apr 2025 12:48:44 +0000 Received: from mail-yw1-x1132.google.com ([2607:f8b0:4864:20::1132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u9Nua-002XSE-10 for pgsql-hackers@lists.postgresql.org; Mon, 28 Apr 2025 12:48:43 +0000 Received: by mail-yw1-x1132.google.com with SMTP id 00721157ae682-703cd93820fso40256077b3.2 for ; Mon, 28 Apr 2025 05:48:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745844519; x=1746449319; 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=OfzyC8RI9HyQXQUzgFUV8bmcuJsF8ajY3ciIrx7Z9rQ=; b=ZSroQKnwteU0pAGG/oAMznxth5fkaYym/CZh2yRINRwJUbubiuc6MmTm5gXq9WQM8G qcU6ORNDBV/PxSvnt0KCTaVRXtDbqsUAKqaqbo+uDeOdtYdQEYmKwe87v/PGi4A8Vvp4 0cb0k4hK5Mw0RawaAKtThCWiKRANfrUxBEYxdbmGS2b2aN0qpoMF4UbMSIKA7Q+SrHny zz534lIgJpEV/AVZJfJn8QlYb1L/mywLj0osKhUgpTNED3jpu8q3TAddcWhbuuKcVM+P RIjq58j5C2HbYU0vFrQwPwG3sRzAuDK5H8ozWxvnF+/4r03W+IzeJBINGnz6atiKWG66 DAfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745844519; x=1746449319; 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=OfzyC8RI9HyQXQUzgFUV8bmcuJsF8ajY3ciIrx7Z9rQ=; b=AwJzWcTXcd7s3tTTCZ/bZj3YsYZEIsJC8JL7HevpaRB8UE4lrmX+Sv6J6TOxNn0w1Q 2Dt4+Il3kanGIuUpLYw7n/bR8c205tzfcyHIJH43xFq39jqdhE0av1OvsT2UQFaGRHFA JfokGftdQHyImazz2MsrvZOyOKK6O+lD+XWQGznC04lgnCF0onDwW4LsX+4xiof7LvY+ AV92usp8pQrjdIZuMuObfDjRXZ1ANS1jVuT5q2p0vzVTz9j7zRW7xSdhkKK9T7kEN4UU +tC6NnWJIRHsxebSVlGy9YIgM9HjYG+9AmCFydMl93/dO4bbstnzwP0opPMnJ3nwS00h JgPw== X-Forwarded-Encrypted: i=1; AJvYcCVsb527QVXq9munHrs4+j2fceAGFGYXbWsDNobEoBYkHrXWrbkc+BywK7JQ4zkg9EWSjmDhX4gS6m0H90/+@lists.postgresql.org X-Gm-Message-State: AOJu0Yz7lcqwpX9DlEGwhLsitmBTyBK990usunBA4k958x8KukvEa8QO 2WWu1RfpdjfmdbSei51/b/20mx5XEG+LJA5D13gY9+EKKD8jBLzYgZbC7SjQ9WuCkL+pZRLJ2uQ xu4RYlE6euK53AbIgHATN3zt30dc= X-Gm-Gg: ASbGncsUw2WCVVmTnBfnoFDjk3NJEajQyfynHvB2fyJBFGULfNtXHnAzWdQik8UW/Rb CELmnvlFGOnrIA3GiVtyLUvUAUevuVgvRQlGj9BMHhZEoCaJxgN/L89V0Hs12Shh9CoHnN65f/X 2O5kTOWXLim2aXZkGijdSsGm2g X-Google-Smtp-Source: AGHT+IEfiwYVb94Ih1A3I41UCpSR01fBiJ73/qPsmamMhqS8vsBfP6iCzKYvBL+Rgn6pCoz/I2lzp6A4XtS6AoWXAAM= X-Received: by 2002:a05:690c:74c6:b0:703:b278:db20 with SMTP id 00721157ae682-7085ed35dc9mr121345077b3.0.1745844519474; Mon, 28 Apr 2025 05:48:39 -0700 (PDT) MIME-Version: 1.0 References: <202504062027.tqmabk2h353o@alvherre.pgsql> <202504071239.kuj6m5a5wqxg@alvherre.pgsql> In-Reply-To: <202504071239.kuj6m5a5wqxg@alvherre.pgsql> From: Shlok Kyal Date: Mon, 28 Apr 2025 18:18:27 +0530 X-Gm-Features: ATxdqUGyNox3xA2pzYnLXOhiHD6M3fu8OYUGgFvM0qN8hO8CLg8WVFRt_jNzLfQ Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: vignesh C , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006ad5710633d61add" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006ad5710633d61add Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 7 Apr 2025 at 18:09, =C3=81lvaro Herrera = wrote: > > Here's the additional changes I made here before giving up on this. > I think it needs some additional rethinking, not going to happen for 18. > Hi Alvaro, Thanks for reviewing the patch. The changes shared by you in [1], look good to me and I have added it to the latest patch. I have also included the changes shared by you in [2]. I have also addressed the issue reported by Sergey in [3]. Additionally, I made some changes to the comments, commit message and documentation to reflect the changes in the function name and to reduce the usage of 'foreign partition' term. I saw some comments by you in the patches: 1. + /* + * Keep lock till end of transaction: must prevent this table from + * being attached a foreign table until we're done. XXX does this + * prevent addition of a partition in a partitioned child? + */ This is same as the issue reported by Sergey in [3]. I have addressed the issue in the latest patch. So, I have modified this comment. 2. + * We also take a ShareLock on pg_partitioned_table to restrict addition + * of new partitioned table which may contain a foreign partition while + * publication is being created. XXX this is quite weird actually. This change was added to resolve the concurrency issue shared by Vignesh in [4]. I tried with different locks and found that lock with severity >=3D ShareLock was needed to avoid the concurrency issue. Initially I added ShareLock to pg_class, but to reduce the scope I added it to pg_partitioned_table instead. I cannot think of an alternate approach. Do you have any suggestions for this? [1]: https://www.postgresql.org/message-id/202504062027.tqmabk2h353o%40alvh= erre.pgsql [2]: https://www.postgresql.org/message-id/202504071239.kuj6m5a5wqxg%40alvh= erre.pgsql [3]: https://www.postgresql.org/message-id/c64352fa-9a30-4e0a-853a-a6b5b6d0= 7f4e%40postgrespro.ru [4]: https://www.postgresql.org/message-id/CALDaNm2%2BeL22Sbvj74uS37xvt%3Dh= aQWcOwP15QnDuVeYsjHiffw%40mail.gmail.com Thanks and Regards, Shlok Kyal --0000000000006ad5710633d61add Content-Type: application/octet-stream; name="v13-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Disposition: attachment; filename="v13-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ma12ijf00 RnJvbSA1MzRlZWUwMjdiMDJlNWNkYTliNTAyZjlmNjI0YTVmYjQyNmQ3Zjg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjggTWFyIDIwMjUgMTE6MTU6MDkgKzA1MzAKU3ViamVjdDogW1BBVENIIHYx M10gUmVzdHJpY3QgcHVibGlzaGluZyBvZiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24K IHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24KCkxvZ2ljYWwgcmVwbGljYXRpb24gb2YgZm9yZWlnbiB0 YWJsZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3ZSB0aHJvdyBhbgplcnJvciBpbiB0aGlzIGNhc2Uu IEJ1dCB3aGVuIHdlIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG9uIGEgcGFydGl0aW9uZWQKdGFibGUg dGhhdCBoYXMgYSBmb3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5 bmMgb2YKc3VjaCB0YWJsZSBpcyBzdWNjZXNzZnVsIGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBj YXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyIGluIEhFQUQsIHdoZW4gcHVibGljYXRpb24gaXMgY3Jl YXRlZDoKMS4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKVGhlIHJvb3Qg dGFibGUgaXMgcHVibGlzaGVkLCBhbmQgaW5pdGlhbCBkYXRhIGZyb20gcGFydGl0aW9ucyB0aGF0 IGFyZQpmb3JlaWduIHRhYmxlcyBpcyByZXBsaWNhdGVkLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGZhbHNlIGFuZCBGT1IgQUxMIFRBQkxFUwpBbGwgbGVhZiB0YWJsZXMg ZXhjZXB0IHBhcnRpdGlvbnMgdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4K CjMuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxF LyBGT1IgVEFCTEVTIElOIFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZCwgaW5j bHVkaW5nIGluaXRpYWwgZGF0YSBmcm9tIHBhcnRpdGlvbnMKdGhhdCBhcmUgZm9yZWlnbiB0YWJs ZXMuCgpXaXRoIHRoaXMgcGF0Y2ggd2UgaGF2ZSBmb2xsb3dpbmcgYmVoYXZpb3VyOgoxLiB3aXRo IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQpXZSB0aHJvdyBhbiBlcnJvciB3aGVu IHdlIHRyeSB0byBwdWJsaXNoIGEgcGFydGl0aW9uIHRoYXQgaXMgYSBmb3JlaWduCnRhYmxlLiBF cnJvciBpcyB0aHJvd24gd2hlbiB3ZSB0cnkgdG8gY3JlYXRlIGEgcHVibGljYXRpb24gb24gKG9y IGFkZCB0bwpleGlzdGluZyBwdWJsaWNhdGlvbikgYSBwYXJ0aXRpb25lZCB0YWJsZSB0aGF0IGhh cyBmb3JlaWduIHRhYmxlcyBhcyBpdHMKcGFydGl0aW9ucywgd2hlbiB0cnkgdG8gY3JlYXRlIGEg cGFydGl0aW9uIHRoYXQgaXMgYSBmb3JlaWduIHRhYmxlIGFuZAp3aGVuIHdlIHRyeSB0byBhdHRh Y2ggZm9yZWlnbiB0YWJsZSAob3IgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoCmZvcmVpZ24gdGFi bGVzIGFzIHBhcnRpdGlvbnMpIHRvIGV4aXN0aW5nIHB1Ymxpc2hlZCB0YWJsZXMuCgoyLiB3aXRo IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKV2Ugc2tpcCBwdWJsaXNoaW5nIHBh cnRpdGlvbnMgdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMuIFRoaXMgaXMgZG9uZSBieQphdm9pZCBh ZGRpbmcgc3VjaCBwYXJ0aXRpb25zIGluIHBnX3N1YnNjcmlwdGlvbl9yZWwgY2F0YWxvZyB0YWJs ZS4KCldlIGhhdmUgaW50cm9kdWNlZCB0d28gZnVuY3Rpb25zICdSZWxhdGlvbkhhc0ZvcmVpZ25Q YXJ0aXRpb24nIGFuZAoncHVibGljYXRpb25fY2hlY2tfZm9yZWlnbl9wYXJ0cycuIEluICdSZWxh dGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24nIHdlIGdvCnRocm91Z2ggdGhlIGNoaWxkIG5vZGVzIG9m IGEgcGFydGl0aW9uIGFuZCBjaGVjayBpZiBpdCBoYXMgYSBmb3JlaWduCnRhYmxlLiBXaGlsZSBk b2luZyBzbywgd2UgdGFrZSBhbiBBY2Nlc3NTaGFyZUxvY2sgb24gZWFjaCBwYXJ0aXRpb24gdGFi bGUKdG8gcHJldmVudCBjb25jdXJyZW50IGNyZWF0aW9uIG9mIGEgZm9yZWlnbiB0YWJsZSBhcyBh IHBhcnRpdGlvbi4gSW4KJ3B1YmxpY2F0aW9uX2NoZWNrX2ZvcmVpZ25fcGFydHMnIGlmIHNjaGVt YSBpZCBpcyBwcm92aWRlZCB3ZSBjaGVjayBmb3IKZWFjaCBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0 aGF0IHNjaGVtYSBpZiBpdCBoYXMgYSBmb3JlaWduIHRhYmxlIGFzIGl0cwpwYXJ0aXRpb24sIG9y IGlmIHNjaGVtYSBpZCBpcyBub3QgcHJvdmlkZWQgd2UgY2hlY2sgZm9yIGVhY2gKcGFydGl0aW9u ZWQgdGFibGUgaW4gdGhlIGRhdGFiYXNlIGlmIGl0IGhhcyBhIHBhcnRpdGlvbiB0aGF0J3MgYSBm b3JlaWduCnRhYmxlLiBXaGlsZSBkb2luZyBzbyB3ZSB0YWtlIGEgU2hhcmVMb2NrIG9uIHBnX3Bh cnRpdGlvbmVkX3RhYmxlIHNvIG5vCnBhcnRpdGlvbiB0YWJsZSBpcyBjcmVhdGVkIGNvbmN1cnJl bnRseSBhZnRlciB0aGlzIGNoZWNrLgotLS0KIGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0 aW9uLnNnbWwgICAgIHwgIDEwICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlv bi5zZ21sICB8ICAxOCArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAg ICAgfCAyMjEgKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMgICAgfCAgNDcgKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jICAgICAgICAgIHwgMTEyICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydGRlc2MuYyAgICAgICB8ICAzMiArKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGRl c2MuaCAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dCB8ICA5OSArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5z cWwgICAgICB8ICA5MCArKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDYxMSBpbnNlcnRpb25z KCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1y ZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApp bmRleCBmMjg4YzA0OWE1Yy4uNTcyMzZhNDUyZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9s b2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGlj YXRpb24uc2dtbApAQCAtMjE1NCwxMCArMjE1NCwxOCBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyBy ZW1vdGUgZGF0YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNF UgogCiAgICA8bGlzdGl0ZW0+CiAgICAgPHBhcmE+Ci0gICAgIFJlcGxpY2F0aW9uIGlzIG9ubHkg c3VwcG9ydGVkIGJ5IHRhYmxlcywgaW5jbHVkaW5nIHBhcnRpdGlvbmVkIHRhYmxlcy4KKyAgICAg UmVwbGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRhYmxlcywgaW5jbHVkaW5nIHBhcnRp dGlvbmVkIHRhYmxlcy4KICAgICAgQXR0ZW1wdHMgdG8gcmVwbGljYXRlIG90aGVyIHR5cGVzIG9m IHJlbGF0aW9ucywgc3VjaCBhcyB2aWV3cywgbWF0ZXJpYWxpemVkCiAgICAgIHZpZXdzLCBvciBm b3JlaWduIHRhYmxlcywgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuCiAgICAgPC9wYXJhPgorICAg IDxwYXJhPgorICAgICBSZXBsaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBmb3JlaWduIHRh Ymxlcy4gIFdoZW4gdXNlZCBhcyBwYXJ0aXRpb25zCisgICAgIG9mIHBhcnRpdGlvbmVkIHRhYmxl cywgcHVibGlzaGluZyBvZiB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXMgb25seSBhbGxvd2VkCisg ICAgIGlmIHRoZSA8bGl0ZXJhbD5wdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDwvbGl0ZXJhbD4g aXMgc2V0IHRvCisgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gIEluIHRoaXMgbW9kZSwg Y2hhbmdlcyB0byBhIHBhcnRpdGlvbiB0aGF0IGlzIGEKKyAgICAgZm9yZWlnbiB0YWJsZSBhcmUg aWdub3JlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlcGxpY2F0aW9uLCBhbmQgZGF0YQorICAgICBj b250YWluZWQgaW4gdGhlbSBpcyBub3QgaW5jbHVkZWQgZHVyaW5nIGluaXRpYWwgc3luY2hyb25p emF0aW9uLgorICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAKICAgIDxsaXN0aXRlbT4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCmluZGV4IDczZjBjOGQ4OWZiLi5h ZDJjM2I2OWQ2YiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRp b24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBA IC0yNDksMTMgKzI0OSwyMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICAgICAgPC9wYXJhPgogCiAgICAg ICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIHBhcmFtZXRlciBhbHNvIGFmZmVjdHMgaG93IHJv dyBmaWx0ZXJzIGFuZCBjb2x1bW4gbGlzdHMgYXJlCi0gICAgICAgICAgY2hvc2VuIGZvciBwYXJ0 aXRpb25zOyBzZWUgYmVsb3cgZm9yIGRldGFpbHMuCisgICAgICAgICAgSWYgdGhpcyBwYXJhbWV0 ZXIgaXMgZW5hYmxlZCwgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+CisgICAgICAgICAgb3Bl cmF0aW9ucyBwZXJmb3JtZWQgZGlyZWN0bHkgb24gcGFydGl0aW9ucyBhcmUgbm90IHJlcGxpY2F0 ZWQuCiAgICAgICAgICA8L3BhcmE+CiAKICAgICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHRo aXMgaXMgZW5hYmxlZCwgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IG9wZXJhdGlvbnMgcGVy Zm9ybWVkCi0gICAgICAgICAgZGlyZWN0bHkgb24gcGFydGl0aW9ucyBhcmUgbm90IHJlcGxpY2F0 ZWQuCisgICAgICAgICAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgZW5hYmxlZCwgZm9yZWlnbiB0YWJs ZXMgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcworICAgICAgICAgIGNvbnRhaW5pbmcgcGFydGl0aW9u cyB0aGF0IGFyZSBmb3JlaWduIHRhYmxlcyBtYXkgbm90IGJlCisgICAgICAgICAgYWRkZWQgdG8g dGhlIHB1YmxpY2F0aW9uLiAgQ29udmVyc2VseSwgZm9yZWlnbiB0YWJsZXMgbWF5IG5vdCBiZQor ICAgICAgICAgIGF0dGFjaGVkIHRvIGEgcGFydGl0aW9uZWQgdGFibGUgdGhhdCBpcyBpbmNsdWRl ZCBpbiBhIHB1YmxpY2F0aW9uCisgICAgICAgICAgd2l0aCB0aGlzIHBhcmFtZXRlciBlbmFibGVk LiAgTGFzdGx5LCB0aGlzIHBhcmFtZXRlciBtYXkgbm90IGJlCisgICAgICAgICAgY2hhbmdlZCBv biBwdWJsaWNhdGlvbnMgdGhhdCBpbmNsdWRlIHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGZvcmVp Z24KKyAgICAgICAgICB0YWJsZXMgYXMgcGFydGl0aW9ucy4KKyAgICAgICAgIDwvcGFyYT4KKwor ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgYWxzbyBhZmZlY3RzIGhv dyByb3cgZmlsdGVycyBhbmQgY29sdW1uIGxpc3RzIGFyZQorICAgICAgICAgIGNob3NlbiBmb3Ig cGFydGl0aW9uczsgc2VlIGJlbG93IGZvciBkZXRhaWxzLgogICAgICAgICAgPC9wYXJhPgogICAg ICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCmluZGV4IGQ2Zjk0ZGI1ZDk5Li43M2E5YmYyMjQ3MCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMjYsMTIgKzI2LDE1IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Bh cnRpdGlvbmVkX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUu aCIKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRlICJmdW5j YXBpLmgiCisjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRkZXNjLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC01Myw3ICs1Niw3IEBA IHR5cGVkZWYgc3RydWN0CiAgKiBlcnJvciBpZiBub3QuCiAgKi8KIHN0YXRpYyB2b2lkCi1jaGVj a19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVsKQorY2hlY2tfcHVi bGljYXRpb25fYWRkX3JlbGF0aW9uKFB1YmxpY2F0aW9uICpwdWIsIFJlbGF0aW9uIHRhcmdldHJl bCkKIHsKIAkvKiBNdXN0IGJlIGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCWlm IChSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9O ICYmCkBAIC02NCw2ICs2NywyMSBAQCBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUmVs YXRpb24gdGFyZ2V0cmVsKQogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVs KSksCiAJCQkJIGVycmRldGFpbF9yZWxraW5kX25vdF9zdXBwb3J0ZWQoUmVsYXRpb25HZXRGb3Jt KHRhcmdldHJlbCktPnJlbGtpbmQpKSk7CiAKKwkvKgorCSAqIHB1Ymxpc2hfdmlhX3Jvb3RfcGFy dGl0aW9uIGNhbm5vdCBiZSB0cnVlIGlmIGl0IGlzIGEgcGFydGl0aW9uZWQgdGFibGUKKwkgKiBh bmQgaGFzIGFueSBwYXJ0aXRpb24gdGhhdCdzIGEgZm9yZWlnbiB0YWJsZS4gU2VlCisJICogcHVi bGljYXRpb25fY2hlY2tfZm9yZWlnbl9wYXJ0cyBmb3IgZGV0YWlscy4KKwkgKi8KKwlpZiAocHVi LT5wdWJ2aWFyb290ICYmCisJCXRhcmdldHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUgJiYKKwkJUmVsYXRpb25IYXNGb3JlaWduUGFydGl0aW9uKHRhcmdl dHJlbCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImNhbm5vdCBhZGQgcGFydGl0aW9uZWQgdGFibGUg XCIlc1wiIHRvIHB1YmxpY2F0aW9uIFwiJXNcIiwgd2hpY2ggaGFzIFwiJXNcIiBzZXQgdG8gXCIl c1wiIiwKKwkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSwgcHViLT5u YW1lLAorCQkJCQkgICAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCAidHJ1ZSIpLAorCQkJ CWVycmRldGFpbCgiVGhlIHRhYmxlIGNvbnRhaW5zIGEgcGFydGl0aW9uIHRoYXQncyBhIGZvcmVp Z24gdGFibGUuIikpOworCiAJLyogQ2FuJ3QgYmUgc3lzdGVtIHRhYmxlICovCiAJaWYgKElzQ2F0 YWxvZ1JlbGF0aW9uKHRhcmdldHJlbCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xMTEsNiArMTI5 LDE3MiBAQCBjaGVja19wdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBzY2hlbWFpZCkKIAkJCQkg ZXJyZGV0YWlsKCJUZW1wb3Jhcnkgc2NoZW1hcyBjYW5ub3QgYmUgcmVwbGljYXRlZC4iKSkpOwog fQogCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBhbmNlc3RvciBpcyBpbiB0aGUgbGlzdCBv ZiByZWxhdGlvbnMKKyAqIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGJv b2wKK2lzX2FuY2VzdG9yX21lbWJlcl9yZWxpZHMoT2lkIGFuY2VzdG9yLCBMaXN0ICpyZWxpZHMp Cit7CisJZm9yZWFjaF9vaWQocmVsaWQsIHJlbGlkcykKKwl7CisJCWlmIChyZWxpZCA9PSBhbmNl c3RvcikKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IEZpbHRlciBvdXQgdGhlIHBhcnRpdGlvbnMgd2hvc2UgcGFyZW50IHRhYmxlcyBhcmUgYWxzbyBw cmVzZW50IGluIHRoZSBsaXN0CisgKiBvZiByZWxhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitm aWx0ZXJfcGFydGl0aW9uX3JlbHMoTGlzdCAqcmVsaWRzKQoreworCWZvcmVhY2hfb2lkKHJlbGlk LCByZWxpZHMpCisJeworCQlib29sCQlza2lwID0gZmFsc2U7CisJCUxpc3QJICAgKmFuY2VzdG9y cyA9IE5JTDsKKwkJTGlzdENlbGwgICAqbGMyOworCisJCWlmIChnZXRfcmVsX3JlbGlzcGFydGl0 aW9uKHJlbGlkKSkKKwkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlk KTsKKworCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0b3JzKQorCQl7CisJCQlpZiAoaXNf YW5jZXN0b3JfbWVtYmVyX3JlbGlkcyhhbmNlc3RvciwgcmVsaWRzKSkKKwkJCXsKKwkJCQlza2lw ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChza2lwKQorCQkJcmVsaWRz ID0gbGlzdF9kZWxldGVfb2lkKHJlbGlkcywgcmVsaWQpOworCX0KK30KKworLyoKKyAqIHB1Ymxp Y2F0aW9uX2NoZWNrX2ZvcmVpZ25fcGFydHMKKyAqCQlIZWxwZXIgZnVuY3Rpb24gdG8gZW5zdXJl IHdlIGRvbid0IGluZGlyZWN0bHkgcHVibGlzaCBmb3JlaWduIHRhYmxlcworICoKKyAqIERNTCBk YXRhIGNoYW5nZXMgYXJlIG5vdCBwdWJsaXNoZWQgZm9yIGRhdGEgaW4gZm9yZWlnbiB0YWJsZXMs CisgKiBhbmQgeWV0IHRoZSB0YWJsZXN5bmMgd29ya2VyIGlzIG5vdCBzbWFydCBlbm91Z2ggdG8g b21pdCBkYXRhIGZyb20KKyAqIGZvcmVpZ24gdGFibGVzIHdoZW4gdGhleSBhcmUgcGFydGl0aW9u cyBvZiBwYXJ0aXRpb25lZCB0YWJsZXMuICBUbworICogYXZvaWQgdGhlIGluY29uc2lzdGVuY2ll cyB0aGF0IHdvdWxkIHJlc3VsdCwgd2UgZGlzYWxsb3cgZm9yZWlnbgorICogdGFibGVzIGZyb20g YmVpbmcgcHVibGlzaGVkIGdlbmVyYWxseS4gIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgZm9yCisg KiBwYXJ0aXRpb25lZCB0YWJsZXMgdG8gaGF2ZSBmb3JlaWduIHRhYmxlcyBhcyBwYXJ0aXRpb25z LCBhbmQgd2Ugd291bGQKKyAqIGxpa2UgdG8gYWxsb3cgcHVibGlzaGluZyB0aG9zZSBwYXJ0aXRp b25lZCB0YWJsZXMgc28gdGhhdCB0aGUgb3RoZXIKKyAqIHBhcnRpdGlvbnMgYXJlIHJlcGxpY2F0 ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbiBjaGFyZ2Ugb2YgZGV0ZWN0aW5nIGlmIGEg cGFydGl0aW9uZWQgdGFibGUgaGFzIGEKKyAqIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24g LS0gZWl0aGVyIGluIHRoZSB3aG9sZSBkYXRhYmFzZSAodXNlZnVsCisgKiBmb3IgRk9SIEFMTCBU QUJMRVMgcHVibGljYXRpb25zKSBvciBpbiBhIHBhcnRpY3VsYXIgc2NoZW1hICh1c2VmdWwKKyAq IGZvciBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJsaWNhdGlvbnMpLiAgVGhpcyBmdW5jdGlvbiBt dXN0IGJlIGNhbGxlZAorICogb25seSBmb3IgcHVibGljYXRpb25zIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3Q9dHJ1ZS4KKyAqCisgKiBXaGVuIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290IGlzIGZhbHNlLCBlYWNoIHBhcnRpdGlvbiBwdWJsaXNoZWQgZm9yCisgKiByZXBsaWNhdGlv biBpcyBsaXN0ZWQgaW5kaXZpZHVhbGx5IGluIHBnX3N1YnNjcmlwdGlvbl9yZWwsIGFuZCB3ZQor ICogZG9uJ3QgYWRkIHBhcnRpdGlvbnMgdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMsIHNvIHRoaXMg Y2hlY2sgaXMgbm90CisgKiBuZWVkZWQuCisgKgorICogSWYgYSB2YWxpZCBzY2hlbWFpZCBpcyBw cm92aWRlZCwgY2hlY2sgaWYgdGhhdCBzY2hlbWEgaGFzIGFueQorICogcGFydGl0aW9uZWQgdGFi bGUgd2l0aCBhIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uLgorICoKKyAqIElmIG5vIHZhbGlk IHNjaGVtYWlkIGlzIHByb3ZpZGVkLCBjaGVjayBhbGwgcGFydGl0aW9uZWQgdGFibGVzLgorICoK KyAqIFdlIHRha2UgYSBsb2NrIG9uIHBhcnRpdGlvbiB0YWJsZXMgc28gbm8gbmV3IGZvcmVpZ24g dGFibGUgYXJlIGFkZGVkCisgKiBjb25jdXJyZW50bHkgYXMgYSBwYXJ0aXRpb24uCisgKgorICog V2UgYWxzbyB0YWtlIGEgU2hhcmVMb2NrIG9uIHBnX3BhcnRpdGlvbmVkX3RhYmxlIHRvIHJlc3Ry aWN0IGFkZGl0aW9uCisgKiBvZiBuZXcgcGFydGl0aW9uZWQgdGFibGUgd2hpY2ggbWF5IGluY2x1 ZGUgYSBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbgorICogd2hpbGUgcHVibGljYXRpb24gaXMg YmVpbmcgY3JlYXRlZC4gICBYWFggdGhpcyBpcyBxdWl0ZSB3ZWlyZCBhY3R1YWxseS4KKyAqLwor dm9pZAorcHVibGljYXRpb25fY2hlY2tfZm9yZWlnbl9wYXJ0cyhPaWQgc2NoZW1haWQsIGNoYXIg KnB1Ym5hbWUpCit7CisJUmVsYXRpb24JY2xhc3NSZWw7CisJU2NhbktleURhdGEga2V5WzNdOwor CWludAkJCWtleWNvdW50ID0gMDsKKwlUYWJsZVNjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1 cGxlOworCUxpc3QJICAgKnJlbGlkcyA9IE5JTDsKKworCS8qCisJICogVGFrZSBsb2NrIG9uIHBn X3BhcnRpdGlvbmVkX3JlbC4gIFRoaXMgcHJldmVudHMgbmV3IHB1YmxpY2F0aW9ucyBmcm9tCisJ ICogYmVpbmcgY3JlYXRlZC4KKwkgKi8KKwlMb2NrUmVsYXRpb25PaWQoUGFydGl0aW9uZWRSZWxh dGlvbklkLCBTaGFyZUxvY2spOworCisJY2xhc3NSZWwgPSB0YWJsZV9vcGVuKFJlbGF0aW9uUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qIEdldCB0aGUgcm9vdCBub2RlcyBvZiBw YXJ0aXRpb25lZCB0YWJsZSAqLworCVNjYW5LZXlJbml0KCZrZXlba2V5Y291bnQrK10sCisJCQkJ QW51bV9wZ19jbGFzc19yZWxraW5kLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9DSEFS RVEsCisJCQkJQ2hhckdldERhdHVtKFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpKTsKKworCS8q IElmIHNjaGVtYSBpZCBpcyBwcm92aWRlZCBjaGVjayBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGF0 IHNjaGVtYSAqLworCWlmIChPaWRJc1ZhbGlkKHNjaGVtYWlkKSkKKwkJU2NhbktleUluaXQoJmtl eVtrZXljb3VudCsrXSwKKwkJCQkJQW51bV9wZ19jbGFzc19yZWxuYW1lc3BhY2UsCisJCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJc2NoZW1haWQpOworCisJLyoKKwkg KiBJZiBzY2hlbWEgaWQgaXMgbm90IHByb3ZpZGVkLCB0YWtlIHJlbGF0aW9ucyBmb3Igd2hpY2gg cmVsaXNwYXJ0aXRpb24KKwkgKiBpcyBmYWxzZS4gVGhpcyB3aWxsIGdpdmUgb25seSB0aGUgcm9v dCBwYXJ0aXRpb25lZCB0YWJsZXMuIFdlIGRvbm90CisJICogaW5jbHVkZSB0aGlzIGZvciB0aGUg Y2FzZSB3aGVuIHNjaGVtYSBpZCBpcyBzcGVjaWZpZWQgYmVjYXVzZSB0aGVyZSBjYW4KKwkgKiBi ZSBjYXNlcyB3aGVuIHJvb3QgcGFydGl0aW9uZWQgdGFibGVzIGFyZSBub3QgcGFydCBvZiBzY2hl bWEgYW5kIG9uZSBvZgorCSAqIHRoZSBjaGlsZCBwYXJ0aXRpb24gY2FuIHN0aWxsIGhhdmUgYSBm b3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24uCisJICovCisJZWxzZQorCQlTY2FuS2V5SW5p dCgma2V5W2tleWNvdW50KytdLAorCQkJCQlBbnVtX3BnX2NsYXNzX3JlbGlzcGFydGl0aW9uLAor CQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQk9PTEVRLAorCQkJCQlCb29sR2V0RGF0dW0o ZmFsc2UpKTsKKworCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fY2F0YWxvZyhjbGFzc1JlbCwga2V5 Y291bnQsIGtleSk7CisJd2hpbGUgKCh0dXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbikpICE9IE5VTEwpCisJeworCQlGb3JtX3BnX2NsYXNzIHJlbEZvcm0gPSAo Rm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlyZWxpZHMgPSBsYXBwZW5kX29p ZChyZWxpZHMsIHJlbEZvcm0tPm9pZCk7CisJfQorCisJLyoKKwkgKiBJZiBzY2hlbWEgaWQgaXMg cHJvdmlkZWQgZmlsdGVyIHBhcnRpdGlvbnMgbGlzdCB0byBoYXZlIG9ubHkgdG9wbW9zdAorCSAq IHBhcnRpdGlvbmVkIHRhYmxlcyBpbiB0aGF0IHNjaGVtYSwgdG8gYXZvaWQgcmVwZWF0ZWQgY2hl Y2suCisJICovCisJaWYgKE9pZElzVmFsaWQoc2NoZW1haWQpKQorCQlmaWx0ZXJfcGFydGl0aW9u X3JlbHMocmVsaWRzKTsKKworCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJeworCQlSZWxh dGlvbglwdWJyZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlm IChwdWJyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYm CisJCQlSZWxhdGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24ocHVicmVsKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkgZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRlciBcIiVzXCIgdG8gXCIlc1wiIGZvciBwdWJs aWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsICJ0 cnVlIiwgcHVibmFtZSksCisJCQkJCSBlcnJ0YWJsZShwdWJyZWwpLAorCQkJCQkgZXJyZGV0YWls KCJQdWJsaXNoZWQgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wiIGNvbnRhaW5zIGEgcGFydGl0aW9u IHRoYXQgaXMgYSBmb3JlaWduIHRhYmxlLiIsCisJCQkJCQkJICAgZ2V0X3JlbF9uYW1lKHJlbGlk KSkpKTsKKworCQkvKgorCQkgKiBLZWVwIGxvY2sgdGlsbCBlbmQgb2YgdHJhbnNhY3Rpb246IG11 c3QgcHJldmVudCB0aGlzIHRhYmxlIGZyb20KKwkJICogYmVpbmcgYXR0YWNoZWQgYSBmb3JlaWdu IHRhYmxlIHVudGlsIHdlJ3JlIGRvbmUuCisJCSAqLworCQl0YWJsZV9jbG9zZShwdWJyZWwsIE5v TG9jayk7CisJfQorCisJdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjbGFzc1Jl bCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKwogLyoKICAqIFJldHVybnMgaWYgcmVsYXRpb24gcmVw cmVzZW50ZWQgYnkgb2lkIGFuZCBGb3JtX3BnX2NsYXNzIGVudHJ5CiAgKiBpcyBwdWJsaXNoYWJs ZS4KQEAgLTMwNCw3ICs0ODgsNyBAQCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGlj YXRpb24gKnB1YiwgT2lkIHJlbGlkLCBNZW1vcnlDb250ZXh0IG1jeHQsCiAKIC8qCiAgKiBHZXRz IHRoZSByZWxhdGlvbnMgYmFzZWQgb24gdGhlIHB1YmxpY2F0aW9uIHBhcnRpdGlvbiBvcHRpb24g Zm9yIGEgc3BlY2lmaWVkCi0gKiByZWxhdGlvbi4KKyAqIHJlbGF0aW9uLiBGb3JlaWduIHRhYmxl cyBhcmUgbm90IGluY2x1ZGVkLgogICovCiBMaXN0ICoKIEdldFB1YlBhcnRpdGlvbk9wdGlvblJl bGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKQEAg LTMxMywyNSArNDk3LDIxIEBAIEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpy ZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKIAlpZiAoZ2V0X3JlbF9yZWxr aW5kKHJlbGlkKSA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYmCiAJCXB1Yl9wYXJ0b3B0 ICE9IFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCkKIAl7Ci0JCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZp bmRfYWxsX2luaGVyaXRvcnMocmVsaWQsIE5vTG9jaywKLQkJCQkJCQkJCQkJCQlOVUxMKTsKKwkJ TGlzdAkgICAqYWxsX3BhcnRzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLCBO VUxMKTsKIAotCQlpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9BTEwpCi0JCQly ZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQsIGFsbF9wYXJ0cyk7Ci0JCWVsc2UgaWYgKHB1Yl9w YXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRfTEVBRikKKwkJZm9yZWFjaF9vaWQocGFydE9pZCwg YWxsX3BhcnRzKQogCQl7Ci0JCQlMaXN0Q2VsbCAgICpsYzsKKwkJCWNoYXIJCXJlbGtpbmQgPSBn ZXRfcmVsX3JlbGtpbmQocGFydE9pZCk7CiAKLQkJCWZvcmVhY2gobGMsIGFsbF9wYXJ0cykKLQkJ CXsKLQkJCQlPaWQJCQlwYXJ0T2lkID0gbGZpcnN0X29pZChsYyk7CisJCQlpZiAocmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJY29udGludWU7CiAKLQkJCQlpZiAoZ2V0X3Jl bF9yZWxraW5kKHBhcnRPaWQpICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJCXJl c3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcGFydE9pZCk7Ci0JCQl9CisJCQlpZiAocHViX3Bh cnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9MRUFGICYmCisJCQkJcmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXN1bHQgPSBsYXBwZW5k X29pZChyZXN1bHQsIHBhcnRPaWQpOwogCQl9Ci0JCWVsc2UKLQkJCUFzc2VydChmYWxzZSk7CiAJ fQogCWVsc2UKIAkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CkBAIC00NjMs NyArNjQzLDcgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwp LCBwdWItPm5hbWUpKSk7CiAJfQogCi0JY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHRh cmdldHJlbCk7CisJY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHB1YiwgdGFyZ2V0cmVs KTsKIAogCS8qIFZhbGlkYXRlIGFuZCB0cmFuc2xhdGUgY29sdW1uIG5hbWVzIGludG8gYSBCaXRt YXBzZXQgb2YgYXR0bnVtcy4gKi8KIAlhdHRudW1zID0gcHViX2NvbGxpc3RfdmFsaWRhdGUocHJp LT5yZWxhdGlvbiwgcHJpLT5jb2x1bW5zKTsKQEAgLTcwMyw2ICs4ODMsMTMgQEAgcHVibGljYXRp b25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBzY2hlbWFpZCwgYm9vbCBpZl9ub3RfZXhpc3Rz KQogCiAJY2hlY2tfcHVibGljYXRpb25fYWRkX3NjaGVtYShzY2hlbWFpZCk7CiAKKwkvKgorCSAq IElmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIHRydWUsIGNoZWNrIGlmIHNjaGVtYSBo YXMgYW55IGZvcmVpZ24KKwkgKiBwYXJ0aXRpb24KKwkgKi8KKwlpZiAocHViLT5wdWJ2aWFyb290 KQorCQlwdWJsaWNhdGlvbl9jaGVja19mb3JlaWduX3BhcnRzKHNjaGVtYWlkLCBwdWItPm5hbWUp OworCiAJLyogRm9ybSBhIHR1cGxlICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVl cykpOwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAwYjIzZDk0YzM4ZS4uYTI0MTFmYmViZGEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNSw2ICszNSw3IEBACiAj aW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAicGFydGl0aW9uaW5n L3BhcnRkZXNjLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCkBAIC05MTUsNiArOTE2LDEyIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBz dGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCS8qIEFzc29jaWF0ZSBvYmplY3Rz IHdpdGggdGhlIHB1YmxpY2F0aW9uLiAqLwogCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKIAl7 CisJCS8qCisJCSAqIENoZWNrIGlmIGFueSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgYSBmb3JlaWdu IHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24KKwkJICovCisJCWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCkKKwkJCXB1YmxpY2F0aW9uX2NoZWNrX2ZvcmVpZ25fcGFydHMoSW52YWxpZE9pZCwg c3RtdC0+cHVibmFtZSk7CisKIAkJLyogSW52YWxpZGF0ZSByZWxjYWNoZSBzbyB0aGF0IHB1Ymxp Y2F0aW9uIGluZm8gaXMgcmVidWlsdC4gKi8KIAkJQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVBbGwo KTsKIAl9CkBAIC0xMDgwLDYgKzEwODcsNDYgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJfQogCX0KIAor CS8qCisJICogSWYgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgc2V0IHRvIHRydWUsIGNo ZWNrIGlmIHRoZSBwdWJsaWNhdGlvbgorCSAqIGhhcyBhbnkgcGFydGl0aW9uIHRoYXQncyBhIGZv cmVpZ24gdGFibGUuICBTZWUKKwkgKiBwdWJsaWNhdGlvbl9jaGVja19mb3JlaWduX3BhcnRzIGZv ciBkZXRhaWxzLgorCSAqLworCWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiAm JiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKKwl7CisJCWNoYXIJICAgKnB1Ym5hbWUgPSBz dG10LT5wdWJuYW1lOworCQlMaXN0CSAgICpzY2hlbWFvaWRzOworCQlMaXN0CSAgICpyZWxpZHM7 CisKKwkJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJCXB1YmxpY2F0aW9uX2NoZWNrX2Zv cmVpZ25fcGFydHMoSW52YWxpZE9pZCwgcHVibmFtZSk7CisKKwkJc2NoZW1hb2lkcyA9IEdldFB1 YmxpY2F0aW9uU2NoZW1hcyhwdWJmb3JtLT5vaWQpOworCQlmb3JlYWNoX29pZChzY2hlbWFvaWQs IHNjaGVtYW9pZHMpCisJCQlwdWJsaWNhdGlvbl9jaGVja19mb3JlaWduX3BhcnRzKHNjaGVtYW9p ZCwgcHVibmFtZSk7CisKKwkJcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9y bS0+b2lkLCBQVUJMSUNBVElPTl9QQVJUX1JPT1QpOworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVs aWRzKQorCQl7CisJCQlSZWxhdGlvbglwdWJyZWw7CisKKwkJCWlmIChnZXRfcmVsX3JlbGtpbmQo cmVsaWQpICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJY29udGludWU7CisKKwkJ CXB1YnJlbCA9IHRhYmxlX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChS ZWxhdGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24ocHVicmVsKSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCWVy cm1zZygiY2Fubm90IHNldCBwYXJhbWV0ZXIgXCIlc1wiIHRvIFwiJXNcIiBmb3IgcHVibGljYXRp b24gXCIlc1wiIiwKKwkJCQkJCQkgICAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCAidHJ1 ZSIsIHB1Ym5hbWUpLAorCQkJCQkJZXJyZGV0YWlsKCJQdWJsaXNoZWQgcGFydGl0aW9uZWQgdGFi bGUgXCIlc1wiIGNvbnRhaW5zIGEgcGFydGl0aW9uIHRoYXQgaXMgYSBmb3JlaWduIHRhYmxlLiIs CisJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocHVicmVsKSkpOworCisJCQl0YWJs ZV9jbG9zZShwdWJyZWwsIE5vTG9jayk7CisJCX0KKwl9CisKIAkvKiBFdmVyeXRoaW5nIG9rLCBm b3JtIGEgbmV3IHR1cGxlLiAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsK IAltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKaW5kZXggMjcwNWNmMTEzMzAuLjM1ODdlOTk2MGQ4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtMTEzMyw2ICsxMTMzLDUzIEBAIERlZmluZVJlbGF0aW9uKENyZWF0ZVN0bXQg KnN0bXQsIGNoYXIgcmVsa2luZCwgT2lkIG93bmVySWQsCiAJCQkJCSBlcnJtc2coIlwiJXNcIiBp cyBub3QgcGFydGl0aW9uZWQiLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVu dCkpKSk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgY3JlYXRpbmcgYSBwYXJ0aXRpb24gdGhhdCdz IGEgZm9yZWlnbiB0YWJsZSwgdmVyaWZ5IHRoYXQKKwkJICogdGhlIHBhcmVudCB0YWJsZSBpcyBu b3QgaW4gYSBwdWJsaWNhdGlvbiB3aXRoCisJCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGVuYWJsZWQuICBGb3IgZGV0YWlscywgc2VlCisJCSAqIHB1YmxpY2F0aW9uX2NoZWNrX2ZvcmVp Z25fcGFydHMuCisJCSAqLworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9G T1JFSUdOX1RBQkxFKQorCQl7CisJCQlPaWQJCQlzY2hlbWFpZDsKKwkJCUxpc3QJICAgKnB1Ym9p ZHM7CisJCQlMaXN0CSAgICphbmNlc3RvcnM7CisKKwkJCS8qIFN0YXJ0IHdpdGggcHVibGljYXRp b25zIG9mIGFsbCB0YWJsZXMgKi8KKwkJCXB1Ym9pZHMgPSBHZXRBbGxUYWJsZXNQdWJsaWNhdGlv bnMoKTsKKworCQkJLyogY2FwdHVyZSBhbGwgcHVibGljYXRpb25zIHRoYXQgaW5jbHVkZSB0aGlz IHJlbGF0aW9uIGRpcmVjdGx5ICovCisJCQlwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlv bnMocGFyZW50LT5yZF9pZCk7CisJCQlzY2hlbWFpZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHBh cmVudCk7CisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXQocHVib2lkcywgR2V0U2NoZW1hUHVibGlj YXRpb25zKHNjaGVtYWlkKSk7CisKKwkJCS8qIGFuZCBkbyB0aGUgc2FtZSBmb3IgaXRzIGFuY2Vz dG9ycywgaWYgYW55ICovCisJCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhw YXJlbnQtPnJkX2lkKTsKKwkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNlc3RvcnMpCisJCQl7 CisJCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0KHB1Ym9pZHMsIEdldFJlbGF0aW9uUHVibGljYXRp b25zKGFuY2VzdG9yKSk7CisJCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVzcGFjZShhbmNlc3Rv cik7CisJCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0KHB1Ym9pZHMsIEdldFNjaGVtYVB1YmxpY2F0 aW9ucyhzY2hlbWFpZCkpOworCQkJfQorCisJCQkvKiBDaGVjayB0aGUgcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgYml0IGZvciBlYWNoIG9mIHRob3NlICovCisJCQlsaXN0X3NvcnQocHVib2lk cywgbGlzdF9vaWRfY21wKTsKKwkJCWxpc3RfZGVkdXBsaWNhdGVfb2lkKHB1Ym9pZHMpOworCQkJ Zm9yZWFjaF9vaWQocHVib2lkLCBwdWJvaWRzKQorCQkJeworCQkJCVB1YmxpY2F0aW9uICpwdWIg PSBHZXRQdWJsaWNhdGlvbihwdWJvaWQpOworCisJCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKKwkJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQllcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZ UEUpLAorCQkJCQkJCWVycm1zZygiY2Fubm90IGNyZWF0ZSBmb3JlaWduIHRhYmxlIFwiJXNcIiBh cyBhIHBhcnRpdGlvbiBvZiBcIiVzXCIiLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwYXJlbnQpKSwKKwkJCQkJCQllcnJk ZXRhaWwoIlBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24g XCIlc1wiIGluIHB1YmxpY2F0aW9uIFwiJXNcIi4iLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShwYXJlbnQpLAorCQkJCQkJCQkJICAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QiLCBwdWItPm5hbWUpKTsKKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIFRoZSBwYXJ0aXRpb24g Y29uc3RyYWludCBvZiB0aGUgZGVmYXVsdCBwYXJ0aXRpb24gZGVwZW5kcyBvbiB0aGUKIAkJICog cGFydGl0aW9uIGJvdW5kcyBvZiBldmVyeSBvdGhlciBwYXJ0aXRpb24uIEl0IGlzIHBvc3NpYmxl IHRoYXQKQEAgLTIwMzA0LDYgKzIwMzUxLDcxIEBAIEFURXhlY0F0dGFjaFBhcnRpdGlvbihMaXN0 ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNtZCAqY21kLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJCSBlcnJtc2coImNhbm5vdCBhdHRhY2gg dGVtcG9yYXJ5IHJlbGF0aW9uIG9mIGFub3RoZXIgc2Vzc2lvbiBhcyBwYXJ0aXRpb24iKSkpOwog CisJLyoKKwkgKiBJZiB0aGUgcmVsYXRpb24gdG8gYXR0YWNoIGlzIGEgZm9yZWlnbiB0YWJsZSwg b3IgYSBwYXJ0aXRpb25lZCB0YWJsZQorCSAqIHRoYXQgY29udGFpbnMgYSBmb3JlaWduIHRhYmxl IGFzIHBhcnRpdGlvbiwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgcGFyZW50CisJICogdGFibGUgaXMg bm90IGluIGEgcHVibGljYXRpb24gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBlbmFi bGVkLgorCSAqIFNlZSBwdWJsaWNhdGlvbl9jaGVja19mb3JlaWduX3BhcnRzLgorCSAqLworCWlm IChhdHRhY2hyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUgfHwK KwkJKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUgJiYKKwkJIFJlbGF0aW9uSGFzRm9yZWlnblBhcnRpdGlvbihhdHRhY2hyZWwpKSkKKwl7CisJ CU9pZAkJCXNjaGVtYWlkOworCQlMaXN0CSAgICpwdWJvaWRzOworCQlMaXN0CSAgICphbmNlc3Rv cnM7CisKKwkJLyogU3RhcnQgd2l0aCBwdWJsaWNhdGlvbnMgb2YgYWxsIHRhYmxlcyAqLworCQlw dWJvaWRzID0gR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCk7CisKKwkJLyogY2FwdHVyZSBhbGwg cHVibGljYXRpb25zIHRoYXQgaW5jbHVkZSB0aGlzIHJlbGF0aW9uIGRpcmVjdGx5ICovCisJCXB1 Ym9pZHMgPSBsaXN0X2NvbmNhdChwdWJvaWRzLCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyZWwt PnJkX2lkKSk7CisJCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwkJcHVi b2lkcyA9IGxpc3RfY29uY2F0KHB1Ym9pZHMsIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFp ZCkpOworCisJCS8qIGFuZCBkbyB0aGUgc2FtZSBmb3IgaXRzIGFuY2VzdG9ycywgaWYgYW55ICov CisJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbC0+cmRfaWQpOworCQlm b3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0b3JzKQorCQl7CisJCQlwdWJvaWRzID0gbGlzdF9j b25jYXQocHVib2lkcywgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IpKTsKKwkJCXNj aGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoYW5jZXN0b3IpOworCQkJcHVib2lkcyA9IGxpc3Rf Y29uY2F0KHB1Ym9pZHMsIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQl9CisK KwkJLyogTm93IGNoZWNrIHRoZSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBiaXQgZm9yIGVh Y2ggb2YgdGhvc2UgKi8KKwkJbGlzdF9zb3J0KHB1Ym9pZHMsIGxpc3Rfb2lkX2NtcCk7CisJCWxp c3RfZGVkdXBsaWNhdGVfb2lkKHB1Ym9pZHMpOworCQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Ym9p ZHMpCisJCXsKKwkJCVB1YmxpY2F0aW9uICpwdWI7CisKKwkJCXB1YiA9IEdldFB1YmxpY2F0aW9u KHB1Ym9pZCk7CisJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJeworCQkJCWlmIChhdHRhY2hy ZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJ CQkJCQkJIGVycm1zZygiY2Fubm90IGF0dGFjaCBmb3JlaWduIHRhYmxlIFwiJXNcIiB0byBwYXJ0 aXRpb24gdGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGF0 dGFjaHJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkJ CQkgZXJyZGV0YWlsKCJQYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGgg b3B0aW9uIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBcIiVzXCIuIiwKKwkJCQkJCQkJCSAgIFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkgICAicHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAgcHViLT5uYW1lKSkpOworCQkJCWVsc2UKKwkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwK KwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgYXR0YWNoIHRhYmxlIFwiJXNcIiB3aXRoIGEgcGFydGl0 aW9uIHRoYXQncyBhIGZvcmVpZ24gdGFibGUgdG8gcGFydGl0aW9uIHRhYmxlIFwiJXNcIiIsCisJ CQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShhdHRhY2hyZWwpLAorCQkJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJCQkJIGVycmRldGFpbCgiUGFydGl0aW9u ZWQgdGFibGUgXCIlc1wiIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBcIiVzXCIgaW4gcHVibGlj YXRpb24gXCIlc1wiLiIsCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp LAorCQkJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJCQkJCQkJCSAg IHB1Yi0+bmFtZSkpKTsKKwkJCX0KKwkJfQorCX0KKwogCS8qCiAJICogQ2hlY2sgaWYgYXR0YWNo cmVsIGhhcyBhbnkgaWRlbnRpdHkgY29sdW1ucyBvciBhbnkgY29sdW1ucyB0aGF0IGFyZW4ndAog CSAqIGluIHRoZSBwYXJlbnQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcv cGFydGRlc2MuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCmluZGV4IDMy OGI0ZDQ1MGU0Li5iNTMxMzliYWZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMK QEAgLTUwNiwzICs1MDYsMzUgQEAgZ2V0X2RlZmF1bHRfb2lkX2Zyb21fcGFydGRlc2MoUGFydGl0 aW9uRGVzYyBwYXJ0ZGVzYykKIAogCXJldHVybiBJbnZhbGlkT2lkOwogfQorCisvKgorICogUmV0 dXJuIHRydWUgaWYgdGhlIGdpdmVuIHBhcnRpdGlvbmVkIHRhYmxlIHVsdGltYXRlbHkgY29udGFp bnMgYQorICogcGFydGl0aW9uIHRoYXQgaXMgYSBmb3JlaWduIHRhYmxlLCBmYWxzZSBvdGhlcndp c2UuCisgKi8KK2Jvb2wKK1JlbGF0aW9uSGFzRm9yZWlnblBhcnRpdGlvbihSZWxhdGlvbiByZWwp Cit7CisJUGFydGl0aW9uRGVzYyBwZCA9IFJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhyZWwsIHRy dWUpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBwZC0+bnBhcnRzOyBpKyspCisJeworCQlpZiAo cGQtPmlzX2xlYWZbaV0pCisJCXsKKwkJCWlmIChnZXRfcmVsX3JlbGtpbmQocGQtPm9pZHNbaV0p ID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNl CisJCXsKKwkJCVJlbGF0aW9uCXBhcnQ7CisJCQlib29sCQlyZXQ7CisKKwkJCXBhcnQgPSB0YWJs ZV9vcGVuKHBkLT5vaWRzW2ldLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJcmV0ID0gUmVsYXRpb25I YXNGb3JlaWduUGFydGl0aW9uKHBhcnQpOworCQkJdGFibGVfY2xvc2UocGFydCwgTm9Mb2NrKTsK KwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggNDhjN2QxYTg2MTUuLjcx YWQ1YTZmODQ2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC0xOSw2ICsx OSw3IEBACiAKICNpbmNsdWRlICJjYXRhbG9nL2dlbmJraS5oIgogI2luY2x1ZGUgImNhdGFsb2cv b2JqZWN0YWRkcmVzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX2QuaCIJLyogSVdZVSBwcmFnbWE6IGV4cG9ydCAqLwog CiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzgsNiArMTc5LDggQEAgZXh0ZXJuIE9pZAlHZXRU b3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKE9pZCBwdWJvaWQsIExpc3QgKmFuY2VzdG9ycywK IAogZXh0ZXJuIGJvb2wgaXNfcHVibGlzaGFibGVfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIGV4 dGVybiBib29sIGlzX3NjaGVtYV9wdWJsaWNhdGlvbihPaWQgcHViaWQpOworZXh0ZXJuIHZvaWQg cHVibGljYXRpb25fY2hlY2tfZm9yZWlnbl9wYXJ0cyhPaWQgc2NoZW1haWQsIGNoYXIgKnB1Ym5h bWUpOworCiBleHRlcm4gYm9vbCBjaGVja19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGljYXRp b24gKnB1YiwgT2lkIHJlbGlkLAogCQkJCQkJCQkJCU1lbW9yeUNvbnRleHQgbWN4dCwgQml0bWFw c2V0ICoqY29scyk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRp b24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5oIGIvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5n L3BhcnRkZXNjLmgKaW5kZXggMzQ1MzNmNzAwNGMuLjVmYmFmZGMwNmY5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydGRlc2MuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJ0 aXRpb25pbmcvcGFydGRlc2MuaApAQCAtNzEsNSArNzEsNiBAQCBleHRlcm4gUGFydGl0aW9uRGVz YyBQYXJ0aXRpb25EaXJlY3RvcnlMb29rdXAoUGFydGl0aW9uRGlyZWN0b3J5LCBSZWxhdGlvbik7 CiBleHRlcm4gdm9pZCBEZXN0cm95UGFydGl0aW9uRGlyZWN0b3J5KFBhcnRpdGlvbkRpcmVjdG9y eSBwZGlyKTsKIAogZXh0ZXJuIE9pZAlnZXRfZGVmYXVsdF9vaWRfZnJvbV9wYXJ0ZGVzYyhQYXJ0 aXRpb25EZXNjIHBhcnRkZXNjKTsKK2V4dGVybiBib29sIFJlbGF0aW9uSGFzRm9yZWlnblBhcnRp dGlvbihSZWxhdGlvbiByZWwpOwogCiAjZW5kaWYJCQkJCQkJLyogUEFSVERFU0NfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCA0ZGU5NmMwNGY5ZC4u ZjU3YWRkYWIyM2QgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGlj YXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CkBAIC0xOTI0LDYgKzE5MjQsMTA1IEBAIERST1AgUFVCTElDQVRJT04gcHViMTsKIERST1AgUFVC TElDQVRJT04gcHViMjsKIERST1AgVEFCTEUgZ2VuY29sczsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEg cGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JB UFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JB UFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTQ0hFTUEgc2NoMzsKK0NSRUFURSBUQUJMRSBzY2gzLnRt YWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKK0NSRUFURSBUQUJMRSBzY2gzLnBh cnQxIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOwor Q1JFQVRFIFRBQkxFIHNjaDMucGFydDIoaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOwor Q1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0Ml8xIFBBUlRJVElPTiBPRiBzY2gzLnBhcnQy IEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKSBTRVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRB QkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJP TSAoNSkgVE8gKDEwKTsKKy0tIENhbid0IGNyZWF0ZSBwdWJsaWNhdGlvbnMgd2l0aCBwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUsIGlmIHRhYmxlCistLSBoYXMgYSBwYXJ0aXRpb24g dGhhdCdzIGEgZm9yZWlnbiB0YWJsZQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxF IHNjaDMudG1haW4gV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6ICBj YW5ub3QgYWRkIHBhcnRpdGlvbmVkIHRhYmxlICJ0bWFpbiIgdG8gcHVibGljYXRpb24gInB1YjEi LCB3aGljaCBoYXMgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiBzZXQgdG8gInRydWUiCitE RVRBSUw6ICBUaGUgdGFibGUgY29udGFpbnMgYSBwYXJ0aXRpb24gdGhhdCdzIGEgZm9yZWlnbiB0 YWJsZS4KK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDMg V0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6ICBjYW5ub3Qgc2V0IHBh cmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvICJ0cnVlIiBmb3IgcHVibGlj YXRpb24gInB1YjEiCitERVRBSUw6ICBQdWJsaXNoZWQgcGFydGl0aW9uZWQgdGFibGUgInRtYWlu IiBjb250YWlucyBhIHBhcnRpdGlvbiB0aGF0IGlzIGEgZm9yZWlnbiB0YWJsZS4KK0NSRUFURSBQ VUJMSUNBVElPTiBwdWIxIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IiB0byAidHJ1ZSIgZm9yIHB1YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAgUHVi bGlzaGVkIHBhcnRpdGlvbmVkIHRhYmxlICJ0bWFpbiIgY29udGFpbnMgYSBwYXJ0aXRpb24gdGhh dCBpcyBhIGZvcmVpZ24gdGFibGUuCistLSBUZXN0IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3 aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRp dGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gz LnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZP UiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCB0YWJsZSAi cGFydDIiIHdpdGggYSBwYXJ0aXRpb24gdGhhdCdzIGEgZm9yZWlnbiB0YWJsZSB0byBwYXJ0aXRp b24gdGFibGUgInRtYWluIgorREVUQUlMOiAgUGFydGl0aW9uZWQgdGFibGUgInRtYWluIiBpcyBw dWJsaXNoZWQgd2l0aCBvcHRpb24gInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiBpbiBwdWJs aWNhdGlvbiAicHViMSIuCistLSBDYW4ndCBjcmVhdGUgYSBmb3JlaWduIHRhYmxlIHRoYXQgaXMg cGFydGl0aW9uIG9mIHRhYmxlIHB1Ymxpc2hlZCB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJ T04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdf c2VydmVyOworRVJST1I6ICBjYW5ub3QgY3JlYXRlIGZvcmVpZ24gdGFibGUgInBhcnQzXzEiIGFz IGEgcGFydGl0aW9uIG9mICJ0bWFpbiIKK0RFVEFJTDogIFBhcnRpdGlvbmVkIHRhYmxlICJ0bWFp biIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIg aW4gcHVibGljYXRpb24gInB1YjEiLgorLS0gQ2FuJ3QgYXR0YWNoIGEgZm9yZWlnbiB0YWJsZSBh cyBwYXJ0aXRpb24gdG8gdGFibGUgcHVibGlzaGVkIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGlu dCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJU SVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitFUlJPUjog IGNhbm5vdCBhdHRhY2ggZm9yZWlnbiB0YWJsZSAicGFydDNfMiIgdG8gcGFydGl0aW9uIHRhYmxl ICJ0bWFpbiIKK0RFVEFJTDogIFBhcnRpdGlvbmVkIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVk IHdpdGggb3B0aW9uICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgaW4gcHVibGljYXRpb24g InB1YjEiLgorQ1JFQVRFIFNDSEVNQSBzY2g0OworQ1JFQVRFIFRBQkxFIHNjaDQudG1haW4oaWQg aW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworLS0gcHVibGljYXRpb24gY3JlYXRlZCB3aXRo IEZPUiBUQUJMRVMgSU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVBVEUgUFVC TElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290KTsKKy0tIENhbid0IGNyZWF0ZSBhIGZvcmVpZ24gdGFibGUgdGhhdCBp cyBwYXJ0aXRpb24gb2YgdGFibGUgcHVibGlzaGVkIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJ VElPTiBPRiBzY2g0LnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZk d19zZXJ2ZXI7CitFUlJPUjogIGNhbm5vdCBjcmVhdGUgZm9yZWlnbiB0YWJsZSAicGFydDNfMSIg YXMgYSBwYXJ0aXRpb24gb2YgInRtYWluIgorREVUQUlMOiAgUGFydGl0aW9uZWQgdGFibGUgInRt YWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IiBpbiBwdWJsaWNhdGlvbiAicHViMSIuCistLSBDYW4ndCBhdHRhY2ggYSBmb3JlaWduIHRhYmxl IGFzIHBhcnRpdGlvbiB0byB0YWJsZSBwdWJsaXNoZWQgd2l0aAorLS0gcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSB0cnVlCitBTFRFUiBUQUJMRSBzY2g0LnRtYWluIEFUVEFDSCBQQVJUSVRJ T04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CitFUlJPUjogIGNh bm5vdCBhdHRhY2ggZm9yZWlnbiB0YWJsZSAicGFydDNfMiIgdG8gcGFydGl0aW9uIHRhYmxlICJ0 bWFpbiIKK0RFVEFJTDogIFBhcnRpdGlvbmVkIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdp dGggb3B0aW9uICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgaW4gcHVibGljYXRpb24gInB1 YjEiLgorRFJPUCBQVUJMSUNBVElPTiBwdWIxOworLS0gQ2FuJ3QgY3JlYXRlIHB1YmxpY2F0aW9u IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlIG9uCistLSBwYXJ0aXRpb25l ZCB0YWJsZSh3aGljaCBpcyBub3Qgcm9vdCkgd2l0aCBhIHBhcnRpdGlvbiB0aGF0J3MgYSBmb3Jl aWduIHRhYmxlCistLSBvbiBvdGhlciBzY2hlbWEKK0NSRUFURSBTQ0hFTUEgc2NoNTsKK0NSRUFU RSBUQUJMRSBzY2g1LnBhcnQxIFBBUlRJVElPTiBPRiBzY2g0LnRtYWluIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDEwKSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIEZPUkVJR04gVEFC TEUgc2NoNC5wYXJ0MV8xIFBBUlRJVElPTiBPRiBzY2g1LnBhcnQxIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDUpIFNFUlZFUiBmZHdfc2VydmVyOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9S IFRBQkxFUyBJTiBTQ0hFTUEgc2NoNSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7 CitFUlJPUjogIGNhbm5vdCBzZXQgcGFyYW1ldGVyICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCIgdG8gInRydWUiIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RFVEFJTDogIFB1Ymxpc2hlZCBw YXJ0aXRpb25lZCB0YWJsZSAicGFydDEiIGNvbnRhaW5zIGEgcGFydGl0aW9uIHRoYXQgaXMgYSBm b3JlaWduIHRhYmxlLgorLS0gVGVzdCB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g ZmFsc2UKKy0tIFBhcnRpdGlvbiB0aGF0IGFyZSBmb3JlaWduIHRhYmxlcyBhcmUgc2tpcHBlZCBi eSBkZWZhdWx0CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbjsK K0NSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDM7CitDUkVB VEUgUFVCTElDQVRJT04gcHViMyBGT1IgQUxMIFRBQkxFUzsKKy0tIENyZWF0ZSBhIHBhcnRpdGlv biB0aGF0J3MgYSBmb3JlaWduIHRhYmxlIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gz LnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKKy0tIEF0dGFjaCBwYXJ0aXRpb24gdGhhdCdzIGEgZm9y ZWlnbiB0YWJsZSB0byBwdWJsaXNoZWQgdGFibGUKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gZmFsc2UKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gz LnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKKy0tIENoZWNrIHRoZSBwdWJs aXNoZWQgdGFibGVzCitTRUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZST00gcGdfcHVibGljYXRp b25fdGFibGVzIFdIRVJFIHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBw dWJuYW1lLCB0YWJsZW5hbWU7CisgcHVibmFtZSB8IHRhYmxlbmFtZSAKKy0tLS0tLS0tLSstLS0t LS0tLS0tLQorIHB1YjEgICAgfCBwYXJ0MQorIHB1YjIgICAgfCBwYXJ0MQorIHB1YjMgICAgfCBw YXJ0MQorKDMgcm93cykKKworLS0gQ2FuJ3QgYWx0ZXIgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgdG8gdHJ1ZSwgaWYgcHVibGljYXRpb24gYWxyZWFkeSBoYXZlCistLSBhIHBhcnRpdGlvbiB0 aGF0J3MgYSBmb3JlaWduIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiBwdWIxIFNFVCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QpOworRVJST1I6ICBjYW5ub3Qgc2V0IHBhcmFtZXRlciAicHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiIHRvICJ0cnVlIiBmb3IgcHVibGljYXRpb24gInB1YjEi CitERVRBSUw6ICBQdWJsaXNoZWQgcGFydGl0aW9uZWQgdGFibGUgInRtYWluIiBjb250YWlucyBh IHBhcnRpdGlvbiB0aGF0IGlzIGEgZm9yZWlnbiB0YWJsZS4KK0RST1AgUFVCTElDQVRJT04gcHVi MTsKK0RST1AgUFVCTElDQVRJT04gcHViMjsKK0RST1AgUFVCTElDQVRJT04gcHViMzsKK0RST1Ag U0NIRU1BIHNjaDMgQ0FTQ0FERTsKK0RST1AgU0NIRU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0NI RU1BIHNjaDUgQ0FTQ0FERTsKK0RST1AgU0VSVkVSIGZkd19zZXJ2ZXI7CitEUk9QIEZPUkVJR04g REFUQSBXUkFQUEVSIHRlc3RfZmR3OwogUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJP UCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy MjsKIERST1AgUk9MRSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXJfZHVtbXk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggNjgwMDFkZTQwMDAuLjU1YzBkZmYzNjAxIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMjIzLDYgKzEyMjMsOTYgQEAgRFJP UCBQVUJMSUNBVElPTiBwdWIyOwogRFJPUCBUQUJMRSBnZW5jb2xzOwogCiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisKKy0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0 aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNy ZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdO IERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdO IERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKworQ1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRB QkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRB QkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2NoMy5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBS QU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9G IHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVy OworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9S IFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOworCistLSBDYW4ndCBjcmVhdGUgcHVibGljYXRpb25z IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLCBpZiB0YWJsZQorLS0gaGFz IGEgcGFydGl0aW9uIHRoYXQncyBhIGZvcmVpZ24gdGFibGUKK0NSRUFURSBQVUJMSUNBVElPTiBw dWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDMgV0lU SCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEg Rk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCistLSBU ZXN0IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0 aXRpb24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRpdGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVh ZHkgcHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2No My5wYXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4g QVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsK KworLS0gQ2FuJ3QgY3JlYXRlIGEgZm9yZWlnbiB0YWJsZSB0aGF0IGlzIHBhcnRpdGlvbiBvZiB0 YWJsZSBwdWJsaXNoZWQgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDMudG1h aW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKKworLS0g Q2FuJ3QgYXR0YWNoIGEgZm9yZWlnbiB0YWJsZSBhcyBwYXJ0aXRpb24gdG8gdGFibGUgcHVibGlz aGVkIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZP UkVJR04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGludCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRF UiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxV RVMgRlJPTSAoMTUpIFRPICgyMCk7CisKK0NSRUFURSBTQ0hFTUEgc2NoNDsKK0NSRUFURSBUQUJM RSBzY2g0LnRtYWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKworLS0gcHVibGlj YXRpb24gY3JlYXRlZCB3aXRoIEZPUiBUQUJMRVMgSU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9O IHB1YjE7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0 IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKworLS0gQ2FuJ3QgY3JlYXRlIGEg Zm9yZWlnbiB0YWJsZSB0aGF0IGlzIHBhcnRpdGlvbiBvZiB0YWJsZSBwdWJsaXNoZWQgd2l0aAor LS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJM RSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDQudG1haW4gRk9SIFZBTFVFUyBGUk9NICgx MCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKKworLS0gQ2FuJ3QgYXR0YWNoIGEgZm9yZWln biB0YWJsZSBhcyBwYXJ0aXRpb24gdG8gdGFibGUgcHVibGlzaGVkIHdpdGgKKy0tIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQUxURVIgVEFCTEUgc2NoNC50bWFpbiBBVFRBQ0gg UEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworRFJP UCBQVUJMSUNBVElPTiBwdWIxOworCistLSBDYW4ndCBjcmVhdGUgcHVibGljYXRpb24gd2l0aCBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUgb24KKy0tIHBhcnRpdGlvbmVkIHRhYmxl KHdoaWNoIGlzIG5vdCByb290KSB3aXRoIGEgcGFydGl0aW9uIHRoYXQncyBhIGZvcmVpZ24gdGFi bGUKKy0tIG9uIG90aGVyIHNjaGVtYQorQ1JFQVRFIFNDSEVNQSBzY2g1OworQ1JFQVRFIFRBQkxF IHNjaDUucGFydDEgUEFSVElUSU9OIE9GIHNjaDQudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBU TyAoMTApIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2g0 LnBhcnQxXzEgUEFSVElUSU9OIE9GIHNjaDUucGFydDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo NSkgU0VSVkVSIGZkd19zZXJ2ZXI7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVT IElOIFNDSEVNQSBzY2g1IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKworLS0g VGVzdCB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKKy0tIFBhcnRpdGlv biB0aGF0IGFyZSBmb3JlaWduIHRhYmxlcyBhcmUgc2tpcHBlZCBieSBkZWZhdWx0CitDUkVBVEUg UFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbjsKK0NSRUFURSBQVUJMSUNBVElP TiBwdWIyIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDM7CitDUkVBVEUgUFVCTElDQVRJT04gcHVi MyBGT1IgQUxMIFRBQkxFUzsKKworLS0gQ3JlYXRlIGEgcGFydGl0aW9uIHRoYXQncyBhIGZvcmVp Z24gdGFibGUgb2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290ID0gZmFsc2UKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJ T04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdf c2VydmVyOworCistLSBBdHRhY2ggcGFydGl0aW9uIHRoYXQncyBhIGZvcmVpZ24gdGFibGUgdG8g cHVibGlzaGVkIHRhYmxlCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitB TFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBW QUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CisKKy0tIENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVz CitTRUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZST00gcGdfcHVibGljYXRpb25fdGFibGVzIFdI RVJFIHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJs ZW5hbWU7CisKKy0tIENhbid0IGFsdGVyIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHRvIHRy dWUsIGlmIHB1YmxpY2F0aW9uIGFscmVhZHkgaGF2ZQorLS0gYSBwYXJ0aXRpb24gdGhhdCdzIGEg Zm9yZWlnbiB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gcHViMSBTRVQgKHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290KTsKKworRFJPUCBQVUJMSUNBVElPTiBwdWIxOworRFJPUCBQVUJMSUNBVElP TiBwdWIyOworRFJPUCBQVUJMSUNBVElPTiBwdWIzOworRFJPUCBTQ0hFTUEgc2NoMyBDQVNDQURF OworRFJPUCBTQ0hFTUEgc2NoNCBDQVNDQURFOworRFJPUCBTQ0hFTUEgc2NoNSBDQVNDQURFOwor RFJPUCBTRVJWRVIgZmR3X3NlcnZlcjsKK0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9m ZHc7CisKIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKIERST1AgUk9MRSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIsIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFJPTEUgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyX2R1bW15OwotLSAKMi4zNC4xCgo= --0000000000006ad5710633d61add--