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 1uYKJt-004cl6-By for pgsql-hackers@arkaria.postgresql.org; Sun, 06 Jul 2025 08:01:53 +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 1uYKIr-00CG5I-EQ for pgsql-hackers@arkaria.postgresql.org; Sun, 06 Jul 2025 08:00:50 +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 <3danissimo@gmail.com>) id 1uYKIq-00CG3j-UQ for pgsql-hackers@lists.postgresql.org; Sun, 06 Jul 2025 08:00:49 +0000 Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <3danissimo@gmail.com>) id 1uYKIo-0061eV-2B for pgsql-hackers@lists.postgresql.org; Sun, 06 Jul 2025 08:00:48 +0000 Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-7176c66e99cso7493477b3.3 for ; Sun, 06 Jul 2025 01:00:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751788845; x=1752393645; 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=WiX/2vVwSqYU8y8akZ1X0YQW5UQpWOibCdh+jdtwCjU=; b=FTA9ZiVkO3y2eQchSG5VixxVWhfLVjyylBjfnCiyLpML40HqcaIdzFK1KspvzYl5CE 89tIYOEnk2CJ5XOqh3HLigFnDz1uhJLGOMFNKQaigA4lktUAifI5WjO8XvxF1s+/KWgh yRN1nYRES56XTvpC+bL67xQHVo44GcGS97URSAMDFfJv+TOd79HkSrhezkPsIx0U7FKN 3iMUCEQWcn92tQzd2KtJyfqAz+7db7qqG7mCXDFdIt+tR+hnjNQ+f+x1mu9W75yAOL7m dEFWn13+wSQNfePUPuOfI93dTRDDaRSi2EOkABpbdb5jcacPKPGiii2h7H0jxe8JEAlL gvmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751788845; x=1752393645; 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=WiX/2vVwSqYU8y8akZ1X0YQW5UQpWOibCdh+jdtwCjU=; b=WQXeu9jTBXcdxDDNAaulokvCwNIkN2JK+je601OBAtqZY93KRUrJ3lFko97mx4lZu/ AJsWqhbJ95tPRXBAXzq/xFqK6luxwf6B77zy7RqFfHc8dXl0UGmVqDx3S99JHxTx8OXq nL9lGbqSYXxJrsyBkxRuhkewirS/krIOb6MmuO1RRTGOP46nRHQnCkoAeAJbB/jWA+YM pKTaCGx8PRx2leNAfO/r4MB6Jurqk26mYkEdmizj7gPo/luJUKDIj9A6+doZkpF6ygNp TZFDdxUPnmxNOeV8xAjNpGzBeMBZ6xoHCkheY0o66qQnXLqDjbMOPsrqzmaNLttOqFvK kl9g== X-Forwarded-Encrypted: i=1; AJvYcCVPzPNFEFU24Y+mlGq/Qamy17465zOspsotyXTKeIZsg/9IKqft1EMaYS1HoBf1lY1LJ0inZfw2mb9jC5pb@lists.postgresql.org X-Gm-Message-State: AOJu0YywgwHJrZKKwBBj0SlyYu99k8TihNpoFGI7sHEXPn294M39khKT ExkuJ7vm1m9iCxmjyIE1yLnDV2LkNPyevFqdBK3/w2U1hyjVwh5Q0HaBOwLzgbNR0UGdsZWvj1o yDQTNUjwZJ3rzpgZ0huD+YeiSzwnJslA= X-Gm-Gg: ASbGncukqfMgQoUXmFUGeD4Greum/VyhlJ572J5wu+KK1ja7/J10IDPH1WPc9vpXnHE JTM38+yFpgUZ+Ak9ngsG8tQzVXOmxFnT06+IpI0kmYoF8MrXNmcv80ukjPIltS58CSeg2LF7Ett S13mTZLotu9ZrmVNaoIO8/6OawYV+3BObpap14u1EgY4nE X-Google-Smtp-Source: AGHT+IEQ/XceNY4o2fWleQmNhYl52XYZP58vVdLFsaSMaN3v6+QcndbeuiFQVXkAon+0JRAtUksNMd9r6JgaE04mq28= X-Received: by 2002:a05:690c:7012:b0:714:268:a9f8 with SMTP id 00721157ae682-71668e22b3fmr111998037b3.27.1751788844880; Sun, 06 Jul 2025 01:00:44 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Daniil Davydov <3danissimo@gmail.com> Date: Sun, 6 Jul 2025 15:00:32 +0700 X-Gm-Features: Ac12FXzyZQ6n2pHMPJfxXj21nk3jZuxDelCrcoZ3fnTKds4j3KLByXqt-RO9-cQ Message-ID: Subject: Re: POC: Parallel processing of indexes in autovacuum To: Matheus Alcantara Cc: Masahiko Sawada , Sami Imseih , Maxim Orlov , Postgres hackers Content-Type: multipart/mixed; boundary="000000000000d26c1a06393e1f15" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d26c1a06393e1f15 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Jul 4, 2025 at 9:21=E2=80=AFPM Matheus Alcantara wrote: > > The "autovacuum_max_parallel_workers" declared on guc_tables.c mention > that is capped by "max_worker_process": > + { > + {"autovacuum_max_parallel_workers", PGC_SIGHUP, VACUUM_AU= TOVACUUM, > + gettext_noop("Maximum number of parallel autovacu= um workers, that can be taken from bgworkers pool."), > + gettext_noop("This parameter is capped by \"max_w= orker_processes\" (not by \"autovacuum_max_workers\"!)."), > + }, > + &autovacuum_max_parallel_workers, > + 0, 0, MAX_BACKENDS, > + check_autovacuum_max_parallel_workers, NULL, NULL > + }, > > IIUC the code, it cap by "max_worker_process", but Masahiko has mention > on [1] that it should be capped by max_parallel_workers. > Thanks for looking into it! To be honest, I don't think that this parameter should be explicitly capped at all. Other parallel operations (for example parallel index build or VACUUM PARALLEL) just request as many workers as they want without looking at 'max_parallel_workers'. And they will not complain, if not all requested workers were launched. Thus, even if 'autovacuum_max_parallel_workers' is higher than 'max_parallel_workers' the worst that can happen is that not all requested workers will be running (which is a common situation). Users can handle it by looking for logs like "planned vs. launched" and increasing 'max_parallel_workers' if needed. On the other hand, obviously it doesn't make sense to request more workers than 'max_worker_processes' (moreover, this parameter cannot be changed as easily as 'max_parallel_workers'). I will keep the 'max_worker_processes' limit, so autovacuum will not waste time initializing a parallel context if there is no chance that the request will succeed. But it's worth remembering that actually the 'autovacuum_max_parallel_workers' parameter will always be implicitly capped by 'max_parallel_workers'. What do you think about it? > But the postgresql.conf.sample say that it is limited by > max_parallel_workers: > +#autovacuum_max_parallel_workers =3D 0 # disabled by default and limit= ed by max_parallel_workers Good catch, I'll fix it. > --- > > We actually capping the autovacuum_max_parallel_workers by > max_worker_process-1, so we can't have 10 max_worker_process and 10 > autovacuum_max_parallel_workers. Is that correct? Yep. The explanation can be found just above in this letter. > --- > > Locking unnecessary the AutovacuumLock if none if the if's is true can > cause some performance issue here? I don't think that this would be a > serious problem because this code will only be called if the > configuration file is changed during the autovacuum execution right? But > I could be wrong, so just sharing my thoughts on this (still learning > about [auto]vacuum code). > > + > +/* > + * Make sure that number of available parallel workers corresponds to th= e > + * autovacuum_max_parallel_workers parameter (after it was changed). > + */ > +static void > +check_parallel_av_gucs(int prev_max_parallel_workers) > +{ > + LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE); > + > + if (AutoVacuumShmem->av_available_parallel_workers > > + autovacuum_max_parallel_workers) > + { > + Assert(prev_max_parallel_workers > autovacuum_max_paralle= l_workers); > + > This function may be called by a/v launcher when we already have some a/v workers running. A/v workers can change the AutoVacuumShmem->av_available_parallel_workers value, so I think we should acquire appropriate lock before reading it. > Typo on "exeed" > > + /* > + * Number of available workers must not exeed limit. > + * > + * Note, that if some parallel autovacuum workers are run= ning at this > + * moment, available workers number will not exeed limit = after releasing > + * them (see ParallelAutoVacuumReleaseWorkers). > + */ Oops. I'll fix it. > --- > > I'm not seeing an usage of this macro? > +/* > + * RelationGetParallelAutovacuumWorkers > + * Returns the relation's parallel_autovacuum_workers relopt= ion setting. > + * Note multiple eval of argument! > + */ > +#define RelationGetParallelAutovacuumWorkers(relation, defaultpw) \ > + ((relation)->rd_options ? \ > + ((StdRdOptions *) (relation)->rd_options)->autovacuum.parallel_a= utovacuum_workers : \ > + (defaultpw)) > + > Yes, this is the relic of a past implementation. I'll delete this macro. > > I've made some tests and I can confirm that is working correctly for > what I can see. I think that would be to start include the documentation > changes, what do you think? > It sounds tempting :) But perhaps first we should agree on the limitation of the 'autovacuum_max_parallel_workers' parameter. Please, see v6 patches : 1) Fixed typos in autovacuum.c and postgresql.conf.sample 2) Removed unused macro 'RelationGetParallelAutovacuumWorkers' -- Best regards, Daniil Davydov --000000000000d26c1a06393e1f15 Content-Type: text/x-patch; charset="US-ASCII"; name="v6-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Disposition: attachment; filename="v6-0001-Parallel-index-autovacuum-with-bgworkers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mcrdqi9j0 RnJvbSAyMGVmNmE2MGQ3ZWI0YmJmYTJkM2UzNmZmMzYzMDFhYmIyNmU0NjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU4OjQwICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NiAxLzJdIFBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0gd2l0aCBiZ3dvcmtlcnMKCi0tLQog c3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgICAgICAgIHwgIDEyICsrCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgICAgICAgICB8ICA5MyArKysrKysr Ky0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgICAgIHwgMTQ0 ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAg ICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaCAgICAgICAg ICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvdXRpbHMvZ3VjX2hvb2tzLmggICAgICAgICAgICAgICAg IHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMiArCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNDkgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlvbnMuYwppbmRleCA1MDc0N2MxNjM5 Ni4uZTM2ZDU5ZjYzMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVs b3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCkBA IC0yMjIsNiArMjIyLDE2IEBAIHN0YXRpYyByZWxvcHRfaW50IGludFJlbE9wdHNbXSA9CiAJCX0s CiAJCVNQR0lTVF9ERUZBVUxUX0ZJTExGQUNUT1IsIFNQR0lTVF9NSU5fRklMTEZBQ1RPUiwgMTAw CiAJfSwKKwl7CisJCXsKKwkJCSJwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMiLAorCQkJIk1h eGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyB0aGF0IGNhbiBiZSB0 YWtlbiBmcm9tIGJnd29ya2VycyBwb29sIGZvciBwcm9jZXNzaW5nIHRoaXMgdGFibGUuICIKKwkJ CSJJZiB2YWx1ZSBpcyAwIHRoZW4gcGFyYWxsZWwgZGVncmVlIHdpbGwgY29tcHV0ZWQgYmFzZWQg b24gbnVtYmVyIG9mIGluZGV4ZXMuIiwKKwkJCVJFTE9QVF9LSU5EX0hFQVAsCisJCQlTaGFyZVVw ZGF0ZUV4Y2x1c2l2ZUxvY2sKKwkJfSwKKwkJLTEsIC0xLCAxMDI0CisJfSwKIAl7CiAJCXsKIAkJ CSJhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQiLApAQCAtMTg3Miw2ICsxODgyLDggQEAgZGVm YXVsdF9yZWxvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9r aW5kIGtpbmQpCiAJCXsiZmlsbGZhY3RvciIsIFJFTE9QVF9UWVBFX0lOVCwgb2Zmc2V0b2YoU3Rk UmRPcHRpb25zLCBmaWxsZmFjdG9yKX0sCiAJCXsiYXV0b3ZhY3V1bV9lbmFibGVkIiwgUkVMT1BU X1RZUEVfQk9PTCwKIAkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNl dG9mKEF1dG9WYWNPcHRzLCBlbmFibGVkKX0sCisJCXsicGFyYWxsZWxfYXV0b3ZhY3V1bV93b3Jr ZXJzIiwgUkVMT1BUX1RZUEVfSU5ULAorCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIGF1dG92YWN1 dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIHBhcmFsbGVsX2F1dG92YWN1dW1fd29ya2Vycyl9 LAogCQl7ImF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCIsIFJFTE9QVF9UWVBFX0lOVCwKIAkJ b2Zmc2V0b2YoU3RkUmRPcHRpb25zLCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRz LCB2YWN1dW1fdGhyZXNob2xkKX0sCiAJCXsiYXV0b3ZhY3V1bV92YWN1dW1fbWF4X3RocmVzaG9s ZCIsIFJFTE9QVF9UWVBFX0lOVCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRl eCAwOTQxNjQ1MGFmOS4uYjg5YjE1NjM0NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3ZhY3V1bWxhenkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1s YXp5LmMKQEAgLTM0OTMsNiArMzQ5MywxMCBAQCBkZWFkX2l0ZW1zX2FsbG9jKExWUmVsU3RhdGUg KnZhY3JlbCwgaW50IG53b3JrZXJzKQogCQlhdXRvdmFjdXVtX3dvcmtfbWVtICE9IC0xID8KIAkJ YXV0b3ZhY3V1bV93b3JrX21lbSA6IG1haW50ZW5hbmNlX3dvcmtfbWVtOwogCisJaW50CQkJZWxl dmVsID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpIHx8CisJCXZhY3JlbC0+dmVyYm9zZSA/ CisJCUlORk8gOiBERUJVRzI7CisKIAkvKgogCSAqIEluaXRpYWxpemUgc3RhdGUgZm9yIGEgcGFy YWxsZWwgdmFjdXVtLiAgQXMgb2Ygbm93LCBvbmx5IG9uZSB3b3JrZXIgY2FuCiAJICogYmUgdXNl ZCBmb3IgYW4gaW5kZXgsIHNvIHdlIGludm9rZSBwYXJhbGxlbGlzbSBvbmx5IGlmIHRoZXJlIGFy ZSBhdApAQCAtMzUxOSw3ICszNTIzLDcgQEAgZGVhZF9pdGVtc19hbGxvYyhMVlJlbFN0YXRlICp2 YWNyZWwsIGludCBud29ya2VycykKIAkJCXZhY3JlbC0+cHZzID0gcGFyYWxsZWxfdmFjdXVtX2lu aXQodmFjcmVsLT5yZWwsIHZhY3JlbC0+aW5kcmVscywKIAkJCQkJCQkJCQkJICAgdmFjcmVsLT5u aW5kZXhlcywgbndvcmtlcnMsCiAJCQkJCQkJCQkJCSAgIHZhY193b3JrX21lbSwKLQkJCQkJCQkJ CQkJICAgdmFjcmVsLT52ZXJib3NlID8gSU5GTyA6IERFQlVHMiwKKwkJCQkJCQkJCQkJICAgZWxl dmVsLAogCQkJCQkJCQkJCQkgICB2YWNyZWwtPmJzdHJhdGVneSk7CiAKIAkJLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCmluZGV4IDBmZWVhMWQzMGVjLi5iZDMxNGQyMzI5OCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jCkBAIC0xLDE2ICsxLDE2IEBACiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiB2YWN1dW1wYXJhbGxlbC5jCi0gKgkgIFN1cHBvcnQg cm91dGluZXMgZm9yIHBhcmFsbGVsIHZhY3V1bSBleGVjdXRpb24uCisgKgkgIFN1cHBvcnQgcm91 dGluZXMgZm9yIHBhcmFsbGVsIFthdXRvXXZhY3V1bSBleGVjdXRpb24uCiAgKgogICogVGhpcyBm aWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRoYXQgYXJlIGludGVuZGVkIHRvIHN1cHBvcnQgc2V0dGlu ZyB1cCwgdXNpbmcsCiAgKiBhbmQgdGVhcmluZyBkb3duIGEgUGFyYWxsZWxWYWN1dW1TdGF0ZS4K ICAqCi0gKiBJbiBhIHBhcmFsbGVsIHZhY3V1bSwgd2UgcGVyZm9ybSBib3RoIGluZGV4IGJ1bGsg ZGVsZXRpb24gYW5kIGluZGV4IGNsZWFudXAKLSAqIHdpdGggcGFyYWxsZWwgd29ya2VyIHByb2Nl c3Nlcy4gIEluZGl2aWR1YWwgaW5kZXhlcyBhcmUgcHJvY2Vzc2VkIGJ5IG9uZQotICogdmFjdXVt IHByb2Nlc3MuICBQYXJhbGxlbFZhY3V1bVN0YXRlIGNvbnRhaW5zIHNoYXJlZCBpbmZvcm1hdGlv biBhcyB3ZWxsIGFzCi0gKiB0aGUgbWVtb3J5IHNwYWNlIGZvciBzdG9yaW5nIGRlYWQgaXRlbXMg YWxsb2NhdGVkIGluIHRoZSBEU0EgYXJlYS4gIFdlCi0gKiBsYXVuY2ggcGFyYWxsZWwgd29ya2Vy IHByb2Nlc3NlcyBhdCB0aGUgc3RhcnQgb2YgcGFyYWxsZWwgaW5kZXgKKyAqIEluIGEgcGFyYWxs ZWwgW2F1dG9ddmFjdXVtLCB3ZSBwZXJmb3JtIGJvdGggaW5kZXggYnVsayBkZWxldGlvbiBhbmQg aW5kZXgKKyAqIGNsZWFudXAgd2l0aCBwYXJhbGxlbCB3b3JrZXIgcHJvY2Vzc2VzLiAgSW5kaXZp ZHVhbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQgYnkKKyAqIG9uZSBbYXV0b112YWN1dW0gcHJvY2Vz cy4gIFBhcmFsbGVsVmFjdXVtU3RhdGUgY29udGFpbnMgc2hhcmVkIGluZm9ybWF0aW9uCisgKiBh cyB3ZWxsIGFzIHRoZSBtZW1vcnkgc3BhY2UgZm9yIHN0b3JpbmcgZGVhZCBpdGVtcyBhbGxvY2F0 ZWQgaW4gdGhlIERTQSBhcmVhLgorICogV2UgbGF1bmNoIHBhcmFsbGVsIHdvcmtlciBwcm9jZXNz ZXMgYXQgdGhlIHN0YXJ0IG9mIHBhcmFsbGVsIGluZGV4CiAgKiBidWxrLWRlbGV0aW9uIGFuZCBp bmRleCBjbGVhbnVwIGFuZCBvbmNlIGFsbCBpbmRleGVzIGFyZSBwcm9jZXNzZWQsIHRoZQogICog cGFyYWxsZWwgd29ya2VyIHByb2Nlc3NlcyBleGl0LiAgRWFjaCB0aW1lIHdlIHByb2Nlc3MgaW5k ZXhlcyBpbiBwYXJhbGxlbCwKICAqIHRoZSBwYXJhbGxlbCBjb250ZXh0IGlzIHJlLWluaXRpYWxp emVkIHNvIHRoYXQgdGhlIHNhbWUgRFNNIGNhbiBiZSB1c2VkIGZvcgpAQCAtMzQsNiArMzQsNyBA QAogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aHMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92 YWN1dW0uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInRjb3AvdGNv cHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKQEAgLTE1Nyw3ICsxNTgsOCBA QCB0eXBlZGVmIHN0cnVjdCBQVkluZFN0YXRzCiB9IFBWSW5kU3RhdHM7CiAKIC8qCi0gKiBTdHJ1 Y3QgZm9yIG1haW50YWluaW5nIGEgcGFyYWxsZWwgdmFjdXVtIHN0YXRlLiB0eXBlZGVmIGFwcGVh cnMgaW4gdmFjdXVtLmguCisgKiBTdHJ1Y3QgZm9yIG1haW50YWluaW5nIGEgcGFyYWxsZWwgW2F1 dG9ddmFjdXVtIHN0YXRlLiB0eXBlZGVmIGFwcGVhcnMgaW4KKyAqIHZhY3V1bS5oLgogICovCiBz dHJ1Y3QgUGFyYWxsZWxWYWN1dW1TdGF0ZQogewpAQCAtMzcxLDEwICszNzMsMTggQEAgcGFyYWxs ZWxfdmFjdXVtX2luaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRl eGVzLAogCXNoYXJlZC0+cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CiAJc2hhcmVkLT5l bGV2ZWwgPSBlbGV2ZWw7CiAJc2hhcmVkLT5xdWVyeWlkID0gcGdzdGF0X2dldF9teV9xdWVyeV9p ZCgpOwotCXNoYXJlZC0+bWFpbnRlbmFuY2Vfd29ya19tZW1fd29ya2VyID0KLQkJKG5pbmRleGVz X213bSA+IDApID8KLQkJbWFpbnRlbmFuY2Vfd29ya19tZW0gLyBNaW4ocGFyYWxsZWxfd29ya2Vy cywgbmluZGV4ZXNfbXdtKSA6Ci0JCW1haW50ZW5hbmNlX3dvcmtfbWVtOworCisJaWYgKEFtQXV0 b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkKKwkJc2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93 b3JrZXIgPQorCQkJKG5pbmRleGVzX213bSA+IDApID8KKwkJCWF1dG92YWN1dW1fd29ya19tZW0g LyBNaW4ocGFyYWxsZWxfd29ya2VycywgbmluZGV4ZXNfbXdtKSA6CisJCQlhdXRvdmFjdXVtX3dv cmtfbWVtOworCWVsc2UKKwkJc2hhcmVkLT5tYWludGVuYW5jZV93b3JrX21lbV93b3JrZXIgPQor CQkJKG5pbmRleGVzX213bSA+IDApID8KKwkJCW1haW50ZW5hbmNlX3dvcmtfbWVtIC8gTWluKHBh cmFsbGVsX3dvcmtlcnMsIG5pbmRleGVzX213bSkgOgorCQkJbWFpbnRlbmFuY2Vfd29ya19tZW07 CisKIAlzaGFyZWQtPmRlYWRfaXRlbXNfaW5mby5tYXhfYnl0ZXMgPSB2YWNfd29ya19tZW0gKiAo c2l6ZV90KSAxMDI0OwogCiAJLyogUHJlcGFyZSBEU0Egc3BhY2UgZm9yIGRlYWQgaXRlbXMgKi8K QEAgLTQzNSw2ICs0NDUsOCBAQCBwYXJhbGxlbF92YWN1dW1faW5pdChSZWxhdGlvbiByZWwsIFJl bGF0aW9uICppbmRyZWxzLCBpbnQgbmluZGV4ZXMsCiB2b2lkCiBwYXJhbGxlbF92YWN1dW1fZW5k KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICoqaXN0YXRz KQogeworCWludCBubGF1bmNoZWRfd29ya2VyczsKKwogCUFzc2VydCghSXNQYXJhbGxlbFdvcmtl cigpKTsKIAogCS8qIENvcHkgdGhlIHVwZGF0ZWQgc3RhdGlzdGljcyAqLwpAQCAtNDUzLDcgKzQ2 NSwxMyBAQCBwYXJhbGxlbF92YWN1dW1fZW5kKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgSW5k ZXhCdWxrRGVsZXRlUmVzdWx0ICoqaXN0YXRzKQogCiAJVGlkU3RvcmVEZXN0cm95KHB2cy0+ZGVh ZF9pdGVtcyk7CiAKKwlubGF1bmNoZWRfd29ya2VycyA9IHB2cy0+cGN4dC0+bndvcmtlcnNfbGF1 bmNoZWQ7IC8qIHJlbWVtYmVyIHRoaXMgdmFsdWUgKi8KIAlEZXN0cm95UGFyYWxsZWxDb250ZXh0 KHB2cy0+cGN4dCk7CisKKwkvKiBSZWxlYXNlIGFsbCBsYXVuY2hlZCAoaS5lLiByZXNlcnZlZCkg cGFyYWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLiAqLworCWlmIChBbUF1dG9WYWN1dW1Xb3JrZXJQ cm9jZXNzKCkpCisJCVBhcmFsbGVsQXV0b1ZhY3V1bVJlbGVhc2VXb3JrZXJzKG5sYXVuY2hlZF93 b3JrZXJzKTsKKwogCUV4aXRQYXJhbGxlbE1vZGUoKTsKIAogCXBmcmVlKHB2cy0+d2lsbF9wYXJh bGxlbF92YWN1dW0pOwpAQCAtNTQxLDcgKzU1OSw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9jbGVhbnVw X2FsbF9pbmRleGVzKFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgbG9uZyBudW1fdGFibGVfdHVw CiAgKgogICogbnJlcXVlc3RlZCBpcyB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIHdvcmtlcnMgdGhh dCB1c2VyIHJlcXVlc3RlZC4gIElmCiAgKiBucmVxdWVzdGVkIGlzIDAsIHdlIGNvbXB1dGUgdGhl IHBhcmFsbGVsIGRlZ3JlZSBiYXNlZCBvbiBuaW5kZXhlcywgdGhhdCBpcwotICogdGhlIG51bWJl ciBvZiBpbmRleGVzIHRoYXQgc3VwcG9ydCBwYXJhbGxlbCB2YWN1dW0uICBUaGlzIGZ1bmN0aW9u IGFsc28KKyAqIHRoZSBudW1iZXIgb2YgaW5kZXhlcyB0aGF0IHN1cHBvcnQgcGFyYWxsZWwgW2F1 dG9ddmFjdXVtLiAgVGhpcyBmdW5jdGlvbiBhbHNvCiAgKiBzZXRzIHdpbGxfcGFyYWxsZWxfdmFj dXVtIHRvIHJlbWVtYmVyIGluZGV4ZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBwYXJhbGxlbAogICog dmFjdXVtLgogICovCkBAIC01NTgsNyArNTc2LDkgQEAgcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVf d29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywgaW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwK IAkgKiBXZSBkb24ndCBhbGxvdyBwZXJmb3JtaW5nIHBhcmFsbGVsIG9wZXJhdGlvbiBpbiBzdGFu ZGFsb25lIGJhY2tlbmQgb3IKIAkgKiB3aGVuIHBhcmFsbGVsaXNtIGlzIGRpc2FibGVkLgogCSAq LwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIgfHwgbWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dv cmtlcnMgPT0gMCkKKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCShhdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzID09IDAgJiYgQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKSB8 fAorCQkobWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMgPT0gMCAmJiAhQW1BdXRvVmFj dXVtV29ya2VyUHJvY2VzcygpKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNTk3LDE1ICs2MTcs MTcgQEAgcGFyYWxsZWxfdmFjdXVtX2NvbXB1dGVfd29ya2VycyhSZWxhdGlvbiAqaW5kcmVscywg aW50IG5pbmRleGVzLCBpbnQgbnJlcXVlc3RlZCwKIAlwYXJhbGxlbF93b3JrZXJzID0gKG5yZXF1 ZXN0ZWQgPiAwKSA/CiAJCU1pbihucmVxdWVzdGVkLCBuaW5kZXhlc19wYXJhbGxlbCkgOiBuaW5k ZXhlc19wYXJhbGxlbDsKIAotCS8qIENhcCBieSBtYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29y a2VycyAqLwotCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywgbWF4X3Bh cmFsbGVsX21haW50ZW5hbmNlX3dvcmtlcnMpOworCS8qIENhcCBieSBHVUMgdmFyaWFibGUgKi8K KwlwYXJhbGxlbF93b3JrZXJzID0gQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpID8KKwkJTWlu KHBhcmFsbGVsX3dvcmtlcnMsIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMpIDoKKwkJ TWluKHBhcmFsbGVsX3dvcmtlcnMsIG1heF9wYXJhbGxlbF9tYWludGVuYW5jZV93b3JrZXJzKTsK IAogCXJldHVybiBwYXJhbGxlbF93b3JrZXJzOwogfQogCiAvKgogICogUGVyZm9ybSBpbmRleCB2 YWN1dW0gb3IgaW5kZXggY2xlYW51cCB3aXRoIHBhcmFsbGVsIHdvcmtlcnMuICBUaGlzIGZ1bmN0 aW9uCi0gKiBtdXN0IGJlIHVzZWQgYnkgdGhlIHBhcmFsbGVsIHZhY3V1bSBsZWFkZXIgcHJvY2Vz cy4KKyAqIG11c3QgYmUgdXNlZCBieSB0aGUgcGFyYWxsZWwgW2F1dG9ddmFjdXVtIGxlYWRlciBw cm9jZXNzLgogICovCiBzdGF0aWMgdm9pZAogcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2lu ZGV4ZXMoUGFyYWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW5zLApAQCAt NjY2LDEzICs2ODgsMjYgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3NfYWxsX2luZGV4ZXMoUGFy YWxsZWxWYWN1dW1TdGF0ZSAqcHZzLCBpbnQgbnVtX2luZGV4X3NjYW4KIAkvKiBSZXNldCB0aGUg cGFyYWxsZWwgaW5kZXggcHJvY2Vzc2luZyBhbmQgcHJvZ3Jlc3MgY291bnRlcnMgKi8KIAlwZ19h dG9taWNfd3JpdGVfdTMyKCYocHZzLT5zaGFyZWQtPmlkeCksIDApOwogCisJLyogQ2hlY2sgaG93 IG1hbnkgd29ya2VycyBjYW4gcHJvdmlkZSBhdXRvdmFjdXVtLiAqLworCWlmIChBbUF1dG9WYWN1 dW1Xb3JrZXJQcm9jZXNzKCkgJiYgbndvcmtlcnMgPiAwKQorCQlud29ya2VycyA9IFBhcmFsbGVs QXV0b1ZhY3V1bVJlc2VydmVXb3JrZXJzKG53b3JrZXJzKTsKKwogCS8qIFNldHVwIHRoZSBzaGFy ZWQgY29zdC1iYXNlZCB2YWN1dW0gZGVsYXkgYW5kIGxhdW5jaCB3b3JrZXJzICovCiAJaWYgKG53 b3JrZXJzID4gMCkKIAl7CiAJCS8qIFJlaW5pdGlhbGl6ZSBwYXJhbGxlbCBjb250ZXh0IHRvIHJl bGF1bmNoIHBhcmFsbGVsIHdvcmtlcnMgKi8KIAkJaWYgKG51bV9pbmRleF9zY2FucyA+IDApCisJ CXsKIAkJCVJlaW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHB2cy0+cGN4dCk7CiAKKwkJCS8qCisJCQkg KiBSZWxlYXNlIGFsbCBsYXVuY2hlZCAoaS5lLiByZXNlcnZlZCkgcGFyYWxsZWwgYXV0b3ZhY3V1 bQorCQkJICogd29ya2Vycy4KKwkJCSAqLworCQkJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nl c3MoKSkKKwkJCQlQYXJhbGxlbEF1dG9WYWN1dW1SZWxlYXNlV29ya2VycyhwdnMtPnBjeHQtPm53 b3JrZXJzX2xhdW5jaGVkKTsKKwkJfQorCiAJCS8qCiAJCSAqIFNldCB1cCBzaGFyZWQgY29zdCBi YWxhbmNlIGFuZCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB3b3JrZXJzIGZvcgogCQkgKiB2YWN1dW0g ZGVsYXkuICBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGxhdW5jaGluZyB3b3JrZXJzIGFzCkBA IC02OTAsNiArNzI1LDE2IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX2FsbF9pbmRleGVzKFBh cmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgaW50IG51bV9pbmRleF9zY2FuCiAKIAkJTGF1bmNoUGFy YWxsZWxXb3JrZXJzKHB2cy0+cGN4dCk7CiAKKwkJaWYgKEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nl c3MoKSAmJgorCQkJcHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hlZCA8IG53b3JrZXJzKQorCQl7 CisJCQkvKgorCQkJICogVGVsbCBhdXRvdmFjdXVtIHRoYXQgd2UgY291bGQgbm90IGxhdW5jaCBh bGwgdGhlIHByZXZpb3VzbHkKKwkJCSAqIHJlc2VydmVkIHdvcmtlcnMuCisJCQkgKi8KKwkJCVBh cmFsbGVsQXV0b1ZhY3V1bVJlbGVhc2VXb3JrZXJzKG53b3JrZXJzIC0gcHZzLT5wY3h0LT5ud29y a2Vyc19sYXVuY2hlZCk7CisJCX0KKwogCQlpZiAocHZzLT5wY3h0LT5ud29ya2Vyc19sYXVuY2hl ZCA+IDApCiAJCXsKIAkJCS8qCkBAIC03MDYsMTYgKzc1MSwxNiBAQCBwYXJhbGxlbF92YWN1dW1f cHJvY2Vzc19hbGxfaW5kZXhlcyhQYXJhbGxlbFZhY3V1bVN0YXRlICpwdnMsIGludCBudW1faW5k ZXhfc2NhbgogCiAJCWlmICh2YWN1dW0pCiAJCQllcmVwb3J0KHB2cy0+c2hhcmVkLT5lbGV2ZWws Ci0JCQkJCShlcnJtc2cobmdldHRleHQoImxhdW5jaGVkICVkIHBhcmFsbGVsIHZhY3V1bSB3b3Jr ZXIgZm9yIGluZGV4IHZhY3V1bWluZyAocGxhbm5lZDogJWQpIiwKLQkJCQkJCQkJCSAibGF1bmNo ZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgZm9yIGluZGV4IHZhY3V1bWluZyAocGxhbm5l ZDogJWQpIiwKKwkJCQkJKGVycm1zZyhuZ2V0dGV4dCgibGF1bmNoZWQgJWQgcGFyYWxsZWwgJXN2 YWN1dW0gd29ya2VyIGZvciBpbmRleCB2YWN1dW1pbmcgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCQkJ CQkgImxhdW5jaGVkICVkIHBhcmFsbGVsICVzdmFjdXVtIHdvcmtlcnMgZm9yIGluZGV4IHZhY3V1 bWluZyAocGxhbm5lZDogJWQpIiwKIAkJCQkJCQkJCSBwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5j aGVkKSwKLQkJCQkJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkLCBud29ya2VycykpKTsK KwkJCQkJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkLCBBbUF1dG9WYWN1dW1Xb3JrZXJQ cm9jZXNzKCkgPyAiYXV0byIgOiAiIiwgbndvcmtlcnMpKSk7CiAJCWVsc2UKIAkJCWVyZXBvcnQo cHZzLT5zaGFyZWQtPmVsZXZlbCwKLQkJCQkJKGVycm1zZyhuZ2V0dGV4dCgibGF1bmNoZWQgJWQg cGFyYWxsZWwgdmFjdXVtIHdvcmtlciBmb3IgaW5kZXggY2xlYW51cCAocGxhbm5lZDogJWQpIiwK LQkJCQkJCQkJCSAibGF1bmNoZWQgJWQgcGFyYWxsZWwgdmFjdXVtIHdvcmtlcnMgZm9yIGluZGV4 IGNsZWFudXAgKHBsYW5uZWQ6ICVkKSIsCisJCQkJCShlcnJtc2cobmdldHRleHQoImxhdW5jaGVk ICVkIHBhcmFsbGVsICVzdmFjdXVtIHdvcmtlciBmb3IgaW5kZXggY2xlYW51cCAocGxhbm5lZDog JWQpIiwKKwkJCQkJCQkJCSAibGF1bmNoZWQgJWQgcGFyYWxsZWwgJXN2YWN1dW0gd29ya2VycyBm b3IgaW5kZXggY2xlYW51cCAocGxhbm5lZDogJWQpIiwKIAkJCQkJCQkJCSBwdnMtPnBjeHQtPm53 b3JrZXJzX2xhdW5jaGVkKSwKLQkJCQkJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkLCBu d29ya2VycykpKTsKKwkJCQkJCQlwdnMtPnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkLCBBbUF1dG9W YWN1dW1Xb3JrZXJQcm9jZXNzKCkgPyAiYXV0byIgOiAiIiwgbndvcmtlcnMpKSk7CiAJfQogCiAJ LyogVmFjdXVtIHRoZSBpbmRleGVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieSBvbmx5IGxlYWRl ciBwcm9jZXNzICovCkBAIC05ODIsOCArMTAyNyw4IEBAIHBhcmFsbGVsX3ZhY3V1bV9pbmRleF9p c19wYXJhbGxlbF9zYWZlKFJlbGF0aW9uIGluZHJlbCwgaW50IG51bV9pbmRleF9zY2FucywKIC8q CiAgKiBQZXJmb3JtIHdvcmsgd2l0aGluIGEgbGF1bmNoZWQgcGFyYWxsZWwgcHJvY2Vzcy4KICAq Ci0gKiBTaW5jZSBwYXJhbGxlbCB2YWN1dW0gd29ya2VycyBwZXJmb3JtIG9ubHkgaW5kZXggdmFj dXVtIG9yIGluZGV4IGNsZWFudXAsCi0gKiB3ZSBkb24ndCBuZWVkIHRvIHJlcG9ydCBwcm9ncmVz cyBpbmZvcm1hdGlvbi4KKyAqIFNpbmNlIHBhcmFsbGVsIFthdXRvXXZhY3V1bSB3b3JrZXJzIHBl cmZvcm0gb25seSBpbmRleCB2YWN1dW0gb3IgaW5kZXgKKyAqIGNsZWFudXAsIHdlIGRvbid0IG5l ZWQgdG8gcmVwb3J0IHByb2dyZXNzIGluZm9ybWF0aW9uLgogICovCiB2b2lkCiBwYXJhbGxlbF92 YWN1dW1fbWFpbihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDQ1MWZiOTBhNjEwLi45ZThiMDBhZTBjYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAgLTI4NSw2ICsyODUsOCBAQCB0eXBlZGVmIHN0cnVj dCBBdXRvVmFjdXVtV29ya0l0ZW0KICAqIGF2X3dvcmtJdGVtcwkJd29yayBpdGVtIGFycmF5CiAg KiBhdl9ud29ya2Vyc0ZvckJhbGFuY2UgdGhlIG51bWJlciBvZiBhdXRvdmFjdXVtIHdvcmtlcnMg dG8gdXNlIHdoZW4KICAqIAkJCQkJY2FsY3VsYXRpbmcgdGhlIHBlciB3b3JrZXIgY29zdCBsaW1p dAorICogYXZfYXZhaWxhYmxlX3BhcmFsbGVsX3dvcmtlcnMgdGhlIG51bWJlciBvZiBhdmFpbGFi bGUgcGFyYWxsZWwgYXV0b3ZhY3V1bQorICogCQkJCQkJCQkgd29ya2VycwogICoKICAqIFRoaXMg c3RydWN0IGlzIHByb3RlY3RlZCBieSBBdXRvdmFjdXVtTG9jaywgZXhjZXB0IGZvciBhdl9zaWdu YWwgYW5kIHBhcnRzCiAgKiBvZiB0aGUgd29ya2VyIGxpc3QgKHNlZSBhYm92ZSkuCkBAIC0yOTks NiArMzAxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlXb3JrZXJJbmZvCWF2X3N0YXJ0aW5nV29ya2Vy OwogCUF1dG9WYWN1dW1Xb3JrSXRlbSBhdl93b3JrSXRlbXNbTlVNX1dPUktJVEVNU107CiAJcGdf YXRvbWljX3VpbnQzMiBhdl9ud29ya2Vyc0ZvckJhbGFuY2U7CisJdWludDMyIGF2X2F2YWlsYWJs ZV9wYXJhbGxlbF93b3JrZXJzOwogfSBBdXRvVmFjdXVtU2htZW1TdHJ1Y3Q7CiAKIHN0YXRpYyBB dXRvVmFjdXVtU2htZW1TdHJ1Y3QgKkF1dG9WYWN1dW1TaG1lbTsKQEAgLTM1NCw2ICszNTcsNyBA QCBzdGF0aWMgdm9pZCBhdXRvdmFjX3JlcG9ydF93b3JraXRlbShBdXRvVmFjdXVtV29ya0l0ZW0g KndvcmtpdGVtLAogc3RhdGljIHZvaWQgYXZsX3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJHUyk7 CiBzdGF0aWMgYm9vbCBhdl93b3JrZXJfYXZhaWxhYmxlKHZvaWQpOwogc3RhdGljIHZvaWQgY2hl Y2tfYXZfd29ya2VyX2d1Y3Modm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja19wYXJhbGxlbF9hdl9n dWNzKGludCBwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzKTsKIAogCiAKQEAgLTc1Myw3ICs3NTcs OSBAQCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJydXB0cyh2b2lkKQogCWlmIChDb25maWdS ZWxvYWRQZW5kaW5nKQogCXsKIAkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfd29ya2Vyc19wcmV2ID0g YXV0b3ZhY3V1bV9tYXhfd29ya2VyczsKKwkJaW50CQkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxf d29ya2Vyc19wcmV2OwogCisJCWF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnNfcHJldiA9 IGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAJCUNvbmZpZ1JlbG9hZFBlbmRpbmcg PSBmYWxzZTsKIAkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CiAKQEAgLTc2OSw2ICs3 NzUsMTQgQEAgUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCkKIAkJaWYgKGF1 dG92YWN1dW1fbWF4X3dvcmtlcnNfcHJldiAhPSBhdXRvdmFjdXVtX21heF93b3JrZXJzKQogCQkJ Y2hlY2tfYXZfd29ya2VyX2d1Y3MoKTsKIAorCQkvKgorCQkgKiBJZiBhdXRvdmFjdXVtX21heF9w YXJhbGxlbF93b3JrZXJzIGNoYW5nZWQsIHdlIG11c3QgdGFrZSBjYXJlIG9mCisJCSAqIHRoZSBj b3JyZWN0IHZhbHVlIG9mIGF2YWlsYWJsZSBwYXJhbGxlbCBhdXRvdmFjdXVtIHdvcmtlcnMgaW4g c2htZW0uCisJCSAqLworCQlpZiAoYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vyc19wcmV2 ICE9CisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQorCQkJY2hlY2tfcGFyYWxs ZWxfYXZfZ3VjcyhhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzX3ByZXYpOworCiAJCS8q IHJlYnVpbGQgdGhlIGxpc3QgaW4gY2FzZSB0aGUgbmFwdGltZSBjaGFuZ2VkICovCiAJCXJlYnVp bGRfZGF0YWJhc2VfbGlzdChJbnZhbGlkT2lkKTsKIAl9CkBAIC0yODQ3LDggKzI4NjEsMTIgQEAg dGFibGVfcmVjaGVja19hdXRvdmFjKE9pZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3RfbWFwLAog CQkgKi8KIAkJdGFiLT5hdF9wYXJhbXMuaW5kZXhfY2xlYW51cCA9IFZBQ09QVFZBTFVFX1VOU1BF Q0lGSUVEOwogCQl0YWItPmF0X3BhcmFtcy50cnVuY2F0ZSA9IFZBQ09QVFZBTFVFX1VOU1BFQ0lG SUVEOwotCQkvKiBBcyBvZiBub3csIHdlIGRvbid0IHN1cHBvcnQgcGFyYWxsZWwgdmFjdXVtIGZv ciBhdXRvdmFjdXVtICovCi0JCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0gLTE7CisKKwkJLyog RGVjaWRlIHdoZXRoZXIgd2UgbmVlZCB0byBwcm9jZXNzIGluZGV4ZXMgb2YgdGFibGUgaW4gcGFy YWxsZWwuICovCisJCXRhYi0+YXRfcGFyYW1zLm53b3JrZXJzID0gYXZvcHRzCisJCQk/IGF2b3B0 cy0+cGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJzCisJCQk6IC0xOworCiAJCXRhYi0+YXRfcGFy YW1zLmZyZWV6ZV9taW5fYWdlID0gZnJlZXplX21pbl9hZ2U7CiAJCXRhYi0+YXRfcGFyYW1zLmZy ZWV6ZV90YWJsZV9hZ2UgPSBmcmVlemVfdGFibGVfYWdlOwogCQl0YWItPmF0X3BhcmFtcy5tdWx0 aXhhY3RfZnJlZXplX21pbl9hZ2UgPSBtdWx0aXhhY3RfZnJlZXplX21pbl9hZ2U7CkBAIC0zMzI5 LDYgKzMzNDcsNzIgQEAgQXV0b1ZhY3V1bVJlcXVlc3RXb3JrKEF1dG9WYWN1dW1Xb3JrSXRlbVR5 cGUgdHlwZSwgT2lkIHJlbGF0aW9uSWQsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIElu IG9yZGVyIHRvIG1lZXQgdGhlICdtYXhfcGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJzJyBsaW1p dCwgbGVhZGVyIHdvcmtlcgorICogbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHJldHVybnMg dGhlIG51bWJlciBvZiBwYXJhbGxlbCB3b3JrZXJzIHRoYXQKKyAqIGFjdHVhbGx5IGNhbiBiZSBs YXVuY2hlZCBhbmQgcmVzZXJ2ZXMgKGlmIGFueSkgdGhlc2Ugd29ya2VycyBpbiBnbG9iYWwKKyAq IGF1dG92YWN1dW0gc3RhdGUuCisgKgorICogTk9URTogV2Ugd2lsbCB0cnkgdG8gcHJvdmlkZSBh cyBtYW55IHdvcmtlcnMgYXMgcmVxdWVzdGVkLCBldmVuIGlmIGNhbGxlcgorICogd2lsbCBvY2N1 cHkgYWxsIGF2YWlsYWJsZSB3b3JrZXJzLgorICovCitpbnQKK1BhcmFsbGVsQXV0b1ZhY3V1bVJl c2VydmVXb3JrZXJzKGludCBud29ya2VycykKK3sKKwlpbnQgY2FuX2xhdW5jaDsKKworCS8qIE9u bHkgbGVhZGVyIHdvcmtlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLworCUFzc2VydChBbUF1 dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYgIUlzUGFyYWxsZWxXb3JrZXIoKSk7CisKKwlMV0xv Y2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUpOworCWlmIChBdXRvVmFjdXVt U2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzIDwgbndvcmtlcnMpCisJeworCQkv KiBQcm92aWRlIGFzIG1hbnkgd29ya2VycyBhcyB3ZSBjYW4uICovCisJCWNhbl9sYXVuY2ggPSBB dXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzOworCQlBdXRvVmFj dXVtU2htZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzID0gMDsKKwl9CisJZWxzZQor CXsKKwkJLyogT0ssIHdlIGNhbiBwcm92aWRlIGFsbCByZXF1ZXN0ZWQgd29ya2Vycy4gKi8KKwkJ Y2FuX2xhdW5jaCA9IG53b3JrZXJzOworCQlBdXRvVmFjdXVtU2htZW0tPmF2X2F2YWlsYWJsZV9w YXJhbGxlbF93b3JrZXJzIC09IG53b3JrZXJzOworCX0KKwlMV0xvY2tSZWxlYXNlKEF1dG92YWN1 dW1Mb2NrKTsKKworCXJldHVybiBjYW5fbGF1bmNoOworfQorCisvKgorICogV2hlbiBwYXJhbGxl bCBhdXRvdmFjdXVtIHdvcmtlciBkaWUsIGxlYWRlciB3b3JrZXIgbXVzdCBjYWxsIHRoaXMgZnVu Y3Rpb24KKyAqIGluIG9yZGVyIHRvIHJlZnJlc2ggZ2xvYmFsIGF1dG92YWN1dW0gc3RhdGUuIFRo dXMsIG90aGVyIGxlYWRlcnMgd2lsbCBiZSBhYmxlCisgKiB0byB1c2UgdGhlc2Ugd29ya2Vycy4K KyAqCisgKiAnbndvcmtlcnMnIC0gaG93IG1hbnkgd29ya2VycyBjYWxsZXIgd2FudHMgdG8gcmVs ZWFzZS4KKyAqLwordm9pZAorUGFyYWxsZWxBdXRvVmFjdXVtUmVsZWFzZVdvcmtlcnMoaW50IG53 b3JrZXJzKQoreworCS8qIE9ubHkgbGVhZGVyIHdvcmtlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9u LiAqLworCUFzc2VydChBbUF1dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkgJiYgIUlzUGFyYWxsZWxX b3JrZXIoKSk7CisKKwlMV0xvY2tBY3F1aXJlKEF1dG92YWN1dW1Mb2NrLCBMV19FWENMVVNJVkUp OworCUF1dG9WYWN1dW1TaG1lbS0+YXZfYXZhaWxhYmxlX3BhcmFsbGVsX3dvcmtlcnMgKz0gbndv cmtlcnM7CisKKwkvKgorCSAqIElmIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgdmFy aWFibGUgd2FzIHJlZHVjZWQgZHVyaW5nIHBhcmFsbGVsCisJICogYXV0b3ZhY3V1bSBleGVjdXRp b24sIHdlIG11c3QgY2FwIGF2YWlsYWJsZSB3b3JrZXJzIG51bWJlciBieSBpdHMgbmV3CisJICog dmFsdWUuCisJICovCisJaWYgKEF1dG9WYWN1dW1TaG1lbS0+YXZfYXZhaWxhYmxlX3BhcmFsbGVs X3dvcmtlcnMgPgorCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzKQorCXsKKwkJQXV0 b1ZhY3V1bVNobWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxfd29ya2VycyA9CisJCQlhdXRvdmFj dXVtX21heF9wYXJhbGxlbF93b3JrZXJzOworCX0KKworCUxXTG9ja1JlbGVhc2UoQXV0b3ZhY3V1 bUxvY2spOworfQorCiAvKgogICogYXV0b3ZhY19pbml0CiAgKgkJVGhpcyBpcyBjYWxsZWQgYXQg cG9zdG1hc3RlciBpbml0aWFsaXphdGlvbi4KQEAgLTMzODksNiArMzQ3Myw4IEBAIEF1dG9WYWN1 dW1TaG1lbUluaXQodm9pZCkKIAkJQXNzZXJ0KCFmb3VuZCk7CiAKIAkJQXV0b1ZhY3V1bVNobWVt LT5hdl9sYXVuY2hlcnBpZCA9IDA7CisJCUF1dG9WYWN1dW1TaG1lbS0+YXZfYXZhaWxhYmxlX3Bh cmFsbGVsX3dvcmtlcnMgPQorCQkJYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VyczsKIAkJ ZGNsaXN0X2luaXQoJkF1dG9WYWN1dW1TaG1lbS0+YXZfZnJlZVdvcmtlcnMpOwogCQlkbGlzdF9p bml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X3J1bm5pbmdXb3JrZXJzKTsKIAkJQXV0b1ZhY3V1bVNo bWVtLT5hdl9zdGFydGluZ1dvcmtlciA9IE5VTEw7CkBAIC0zNDM5LDYgKzM1MjUsMTUgQEAgY2hl Y2tfYXV0b3ZhY3V1bV93b3JrX21lbShpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3Vy Y2Ugc291cmNlKQogCXJldHVybiB0cnVlOwogfQogCitib29sCitjaGVja19hdXRvdmFjdXVtX21h eF9wYXJhbGxlbF93b3JrZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsCisJCQkJCQkJCQkg IEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJaWYgKCpuZXd2YWwgPj0gbWF4X3dvcmtlcl9wcm9jZXNz ZXMpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIFJldHVybnMg d2hldGhlciB0aGVyZSBpcyBhIGZyZWUgYXV0b3ZhY3V1bSB3b3JrZXIgc2xvdCBhdmFpbGFibGUu CiAgKi8KQEAgLTM0NzAsMyArMzU2NSw0OCBAQCBjaGVja19hdl93b3JrZXJfZ3Vjcyh2b2lkKQog CQkJCSBlcnJkZXRhaWwoIlRoZSBzZXJ2ZXIgd2lsbCBvbmx5IHN0YXJ0IHVwIHRvIFwiYXV0b3Zh Y3V1bV93b3JrZXJfc2xvdHNcIiAoJWQpIGF1dG92YWN1dW0gd29ya2VycyBhdCBhIGdpdmVuIHRp bWUuIiwKIAkJCQkJCSAgIGF1dG92YWN1dW1fd29ya2VyX3Nsb3RzKSkpOwogfQorCisvKgorICog TWFrZSBzdXJlIHRoYXQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwYXJhbGxlbCB3b3JrZXJzIGNvcnJl c3BvbmRzIHRvIHRoZQorICogYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2VycyBwYXJhbWV0 ZXIgKGFmdGVyIGl0IHdhcyBjaGFuZ2VkKS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX3BhcmFs bGVsX2F2X2d1Y3MoaW50IHByZXZfbWF4X3BhcmFsbGVsX3dvcmtlcnMpCit7CisJTFdMb2NrQWNx dWlyZShBdXRvdmFjdXVtTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWlmIChBdXRvVmFjdXVtU2ht ZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzID4KKwkJYXV0b3ZhY3V1bV9tYXhfcGFy YWxsZWxfd29ya2VycykKKwl7CisJCUFzc2VydChwcmV2X21heF9wYXJhbGxlbF93b3JrZXJzID4g YXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vycyk7CisKKwkJLyoKKwkJICogTnVtYmVyIG9m IGF2YWlsYWJsZSB3b3JrZXJzIG11c3Qgbm90IGV4Y2VlZCBsaW1pdC4KKwkJICoKKwkJICogTm90 ZSwgdGhhdCBpZiBzb21lIHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2VycyBhcmUgcnVubmluZyBh dCB0aGlzCisJCSAqIG1vbWVudCwgYXZhaWxhYmxlIHdvcmtlcnMgbnVtYmVyIHdpbGwgbm90IGV4 Y2VlZCBsaW1pdCBhZnRlcgorCQkgKiByZWxlYXNpbmcgdGhlbSAoc2VlIFBhcmFsbGVsQXV0b1Zh Y3V1bVJlbGVhc2VXb3JrZXJzKS4KKwkJKi8KKwkJQXV0b1ZhY3V1bVNobWVtLT5hdl9hdmFpbGFi bGVfcGFyYWxsZWxfd29ya2VycyA9CisJCQlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJz OworCX0KKwllbHNlIGlmICgoQXV0b1ZhY3V1bVNobWVtLT5hdl9hdmFpbGFibGVfcGFyYWxsZWxf d29ya2VycyA8CisJCQkgIGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMpICYmCisJCQkg KGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPiBwcmV2X21heF9wYXJhbGxlbF93b3Jr ZXJzKSkKKwl7CisJCS8qCisJCSAqIElmIHVzZXIgd2FudHMgdG8gaW5jcmVhc2UgbnVtYmVyIG9m IHBhcmFsbGVsIGF1dG92YWN1dW0gd29ya2Vycywgd2UKKwkJICogbXVzdCBpbmNyZWFzZSBudW1i ZXIgb2YgYXZhaWxhYmxlIHdvcmtlcnMgaW4gc2htZW0uCisJCSAqLworCQlBdXRvVmFjdXVtU2ht ZW0tPmF2X2F2YWlsYWJsZV9wYXJhbGxlbF93b3JrZXJzICs9CisJCQkoYXV0b3ZhY3V1bV9tYXhf cGFyYWxsZWxfd29ya2VycyAtIHByZXZfbWF4X3BhcmFsbGVsX3dvcmtlcnMpOworCisJCS8qCisJ CSAqIE5vdGhpbmcgdG8gZG8gd2hlbiBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzIDwK KwkJICogcHJldl9tYXhfcGFyYWxsZWxfd29ya2Vycy4gQXZhaWxhYmxlIHdvcmtlcnMgbnVtYmVy IHdpbGwgYmUgY2FwcGVkCisJCSAqIGluc2lkZSBQYXJhbGxlbEF1dG9WYWN1dW1SZWxlYXNlV29y a2Vycy4KKwkJICovCisJfQorCisJTFdMb2NrUmVsZWFzZShBdXRvdmFjdXVtTG9jayk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQzMWNiNDVhMDU4Li45Nzc2NDQ5NzhjMSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE0Myw2ICsxNDMsNyBAQCBpbnQJCQlOQnVmZmVy cyA9IDE2Mzg0OwogaW50CQkJTWF4Q29ubmVjdGlvbnMgPSAxMDA7CiBpbnQJCQltYXhfd29ya2Vy X3Byb2Nlc3NlcyA9IDg7CiBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2VycyA9IDg7CitpbnQgICAg ICAgICBhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzID0gMDsKIGludAkJCU1heEJhY2tl bmRzID0gMDsKIAogLyogR1VDIHBhcmFtZXRlcnMgZm9yIHZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYwppbmRleCBmMDRiZmVkYjJmZC4uYmU3NjI2M2M0MzEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0zNjA0LDYgKzM2MDQsMTYgQEAgc3RydWN0IGNv bmZpZ19pbnQgQ29uZmlndXJlTmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAog CisJeworCQl7ImF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMiLCBQR0NfU0lHSFVQLCBW QUNVVU1fQVVUT1ZBQ1VVTSwKKwkJCWdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFy YWxsZWwgYXV0b3ZhY3V1bSB3b3JrZXJzLCB0aGF0IGNhbiBiZSB0YWtlbiBmcm9tIGJnd29ya2Vy cyBwb29sLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJUaGlzIHBhcmFtZXRlciBpcyBjYXBwZWQgYnkg XCJtYXhfd29ya2VyX3Byb2Nlc3Nlc1wiIChub3QgYnkgXCJhdXRvdmFjdXVtX21heF93b3JrZXJz XCIhKS4iKSwKKwkJfSwKKwkJJmF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMsCisJCTAs IDAsIE1BWF9CQUNLRU5EUywKKwkJY2hlY2tfYXV0b3ZhY3V1bV9tYXhfcGFyYWxsZWxfd29ya2Vy cywgTlVMTCwgTlVMTAorCX0sCisKIAl7CiAJCXsibWF4X3BhcmFsbGVsX21haW50ZW5hbmNlX3dv cmtlcnMiLCBQR0NfVVNFUlNFVCwgUkVTT1VSQ0VTX1dPUktFUl9QUk9DRVNTRVMsCiAJCQlnZXR0 ZXh0X25vb3AoIlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIHByb2Nlc3NlcyBw ZXIgbWFpbnRlbmFuY2Ugb3BlcmF0aW9uLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDM0MWY4OGFkYzg3Li4zZmJjYmY4ZWY0ZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNjgz LDYgKzY4Myw3IEBACiBhdXRvdmFjdXVtX3dvcmtlcl9zbG90cyA9IDE2CSMgYXV0b3ZhY3V1bSB3 b3JrZXIgc2xvdHMgdG8gYWxsb2NhdGUKIAkJCQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQp CiAjYXV0b3ZhY3V1bV9tYXhfd29ya2VycyA9IDMJCSMgbWF4IG51bWJlciBvZiBhdXRvdmFjdXVt IHN1YnByb2Nlc3NlcworI2F1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAwCSMgZGlz YWJsZWQgYnkgZGVmYXVsdCBhbmQgbGltaXRlZCBieSBtYXhfd29ya2VyX3Byb2Nlc3NlcwogI2F1 dG92YWN1dW1fbmFwdGltZSA9IDFtaW4JCSMgdGltZSBiZXR3ZWVuIGF1dG92YWN1dW0gcnVucwog I2F1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDUwCSMgbWluIG51bWJlciBvZiByb3cgdXBk YXRlcyBiZWZvcmUKIAkJCQkJIyB2YWN1dW0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMWJlZjk4NDcxYzMuLjg1OTI2 NDE1NjU3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaApAQCAtMTc3LDYgKzE3Nyw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgTWF4QmFja2VuZHM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IE1heENvbm5lY3Rpb25zOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfd29ya2VyX3Byb2Nlc3NlczsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50 IGF1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnM7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBp bnQgY29tbWl0X3RpbWVzdGFtcF9idWZmZXJzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtdWx0 aXhhY3RfbWVtYmVyX2J1ZmZlcnM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVy L2F1dG92YWN1dW0uaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCmluZGV4 IGU4MTM1ZjQxYTFjLi5iNTc2M2U2YWMzNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmgKQEAgLTY0LDYgKzY0LDEwIEBAIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIEF1dG9WYWNXb3Jr ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0CiBleHRlcm4gYm9v bCBBdXRvVmFjdXVtUmVxdWVzdFdvcmsoQXV0b1ZhY3V1bVdvcmtJdGVtVHlwZSB0eXBlLAogCQkJ CQkJCQkgIE9pZCByZWxhdGlvbklkLCBCbG9ja051bWJlciBibGtubyk7CiAKKy8qIHBhcmFsbGVs IGF1dG92YWN1dW0gc3R1ZmYgKi8KK2V4dGVybiBpbnQgUGFyYWxsZWxBdXRvVmFjdXVtUmVzZXJ2 ZVdvcmtlcnMoaW50IG53b3JrZXJzKTsKK2V4dGVybiB2b2lkIFBhcmFsbGVsQXV0b1ZhY3V1bVJl bGVhc2VXb3JrZXJzKGludCBud29ya2Vycyk7CisKIC8qIHNoYXJlZCBtZW1vcnkgc3R1ZmYgKi8K IGV4dGVybiBTaXplIEF1dG9WYWN1dW1TaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBBdXRv VmFjdXVtU2htZW1Jbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZ3Vj X2hvb2tzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ndWNfaG9va3MuaAppbmRleCA3OTlmYTdhY2U2 OC4uNWM2NmYzN2NkNTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Y19ob29rcy5oCkBAIC0zMSw2ICszMSw4IEBAIGV4 dGVybiB2b2lkIGFzc2lnbl9hcHBsaWNhdGlvbl9uYW1lKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9p ZCAqZXh0cmEpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNob3dfYXJjaGl2ZV9jb21tYW5kKHZvaWQp OwogZXh0ZXJuIGJvb2wgY2hlY2tfYXV0b3ZhY3V1bV93b3JrX21lbShpbnQgKm5ld3ZhbCwgdm9p ZCAqKmV4dHJhLAogCQkJCQkJCQkJICBHdWNTb3VyY2Ugc291cmNlKTsKK2V4dGVybiBib29sIGNo ZWNrX2F1dG92YWN1dW1fbWF4X3BhcmFsbGVsX3dvcmtlcnMoaW50ICpuZXd2YWwsIHZvaWQgKipl eHRyYSwKKwkJCQkJCQkJCQkJCSAgR3VjU291cmNlIHNvdXJjZSk7CiBleHRlcm4gYm9vbCBjaGVj a192YWN1dW1fYnVmZmVyX3VzYWdlX2xpbWl0KGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsCiAJ CQkJCQkJCQkJCUd1Y1NvdXJjZSBzb3VyY2UpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYmFja3RyYWNl X2Z1bmN0aW9ucyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGI1NTIz NTk5MTVmLi4yOWMzMmY3NTc4MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTMxMSw2ICszMTEsOCBAQCB0eXBlZGVm IHN0cnVjdCBGb3JlaWduS2V5Q2FjaGVJbmZvCiB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjT3B0cwog ewogCWJvb2wJCWVuYWJsZWQ7CisJaW50CQkJcGFyYWxsZWxfYXV0b3ZhY3V1bV93b3JrZXJzOyAv KiBtYXggbnVtYmVyIG9mIHBhcmFsbGVsCisJCQkJCQkJCQkJCQlhdXRvdmFjdXVtIHdvcmtlcnMg Ki8KIAlpbnQJCQl2YWN1dW1fdGhyZXNob2xkOwogCWludAkJCXZhY3V1bV9tYXhfdGhyZXNob2xk OwogCWludAkJCXZhY3V1bV9pbnNfdGhyZXNob2xkOwotLSAKMi40My4wCgo= --000000000000d26c1a06393e1f15 Content-Type: text/x-patch; charset="US-ASCII"; name="v6-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Disposition: attachment; filename="v6-0002-Sandbox-for-parallel-index-autovacuum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mcrdqia41 RnJvbSA2MTY0YzJjZDYzM2U5ZjNmOTU2ODJlMDJkODE5Yzg5MDUxOWVlZjdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5paWwgRGF2aWRvdiA8ZC5kYXZ5ZG92QHBvc3RncmVzcHJv LnJ1PgpEYXRlOiBGcmksIDE2IE1heSAyMDI1IDExOjU5OjAzICswNzAwClN1YmplY3Q6IFtQQVRD SCB2NiAyLzJdIFNhbmRib3ggZm9yIHBhcmFsbGVsIGluZGV4IGF1dG92YWN1dW0KCi0tLQogc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90 ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS8uZ2l0aWdub3JlICAgICAgICB8ICAgMSArCiBzcmMvdGVz dC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZpbGUgICAgICAgICAgfCAgMTQgKysKIHNyYy90ZXN0 L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZCAgICAgICB8ICAxMiArKwogLi4uL2F1dG92 YWN1dW0vdC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCAgICAgIHwgMTMxICsrKysrKysrKysrKysr KysrKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAx ICsKIDYgZmlsZXMgY2hhbmdlZCwgMTYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3BhcmFsbGVs LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21v ZHVsZXMvTWFrZWZpbGUKaW5kZXggYWExZDI3YmJlZDMuLmI3ZjNlMzQyZTgyIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUKQEAgLTUsNiArNSw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIFNVQkRJUlMgPSBcCisJCSAgYXV0b3Zh Y3V1bSBcCiAJCSAgYnJpbiBcCiAJCSAgY29tbWl0X3RzIFwKIAkJICBkZWxheV9leGVjdXRpb24g XApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtLy5naXRpZ25vcmUgYi9z cmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMGI1NDY0MWJjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvdG1wX2No ZWNrLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvYXV0b3ZhY3V1bS9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTBjMDBmZjM1 MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKQEAgLTAsMCArMSwxNCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL2F1dG92YWN1dW0vTWFrZWZp bGUKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hT KQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtCit0b3BfYnVpbGRk aXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2Vu ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9hdXRvdmFjdXVtL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVt L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOTFj MWExNGQyYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS9t ZXNvbi5idWlsZApAQCAtMCwwICsxLDEyIEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI1LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit0ZXN0cyArPSB7CisgICduYW1l JzogJ2F1dG92YWN1dW0nLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAg J2JkJzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMn OiBbCisgICAgICAndC8wMDFfYXV0b3ZhY19wYXJhbGxlbC5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvYXV0b3ZhY3V1bS90LzAwMV9hdXRvdmFjX3Bh cmFsbGVsLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAxX2F1dG92YWNfcGFy YWxsZWwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFlODkyZTVi NGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9hdXRvdmFjdXVtL3QvMDAx X2F1dG92YWNfcGFyYWxsZWwucGwKQEAgLTAsMCArMSwxMzEgQEAKK3VzZSB3YXJuaW5ncyBGQVRB TCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKK215ICRwc3FsX291dDsKKworbXkg JG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZS0+ aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3Zh Y3V1bSA9IG9mZgorCW1heF93YWxfc2l6ZSA9IDQwOTYKKwltYXhfd29ya2VyX3Byb2Nlc3NlcyA9 IDIwCisJbWF4X3BhcmFsbGVsX3dvcmtlcnMgPSAyMAorCW1heF9wYXJhbGxlbF9tYWludGVuYW5j ZV93b3JrZXJzID0gMjAKKwlhdXRvdmFjdXVtX21heF9wYXJhbGxlbF93b3JrZXJzID0gMTAKKwls b2dfbWluX21lc3NhZ2VzID0gaW5mbworfSk7Ciskbm9kZS0+c3RhcnQ7CisKK215ICRpbmRleGVz X251bSA9IDgwOworbXkgJGluaXRpYWxfcm93c19udW0gPSAxMDBfMDAwOworbXkgJHBhcmFsbGVs X2F1dG92YWN1dW1fd29ya2VycyA9IDU7CisKKyMgQ3JlYXRlIGJpZyB0YWJsZSBhbmQgY3JlYXRl IHNwZWNpZmllZCBudW1iZXIgb2YgYi10cmVlIGluZGV4ZXMgb24gaXQKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXF7CisJQ1JFQVRFIFRBQkxFIHRlc3RfYXV0b3ZhYyAoCisJCWlkIFNF UklBTCBQUklNQVJZIEtFWSwKKwkJY29sXzEgSU5URUdFUiwgIGNvbF8yIElOVEVHRVIsICBjb2xf MyBJTlRFR0VSLCAgY29sXzQgSU5URUdFUiwgIGNvbF81IElOVEVHRVIsCisJCWNvbF82IElOVEVH RVIsICBjb2xfNyBJTlRFR0VSLCAgY29sXzggSU5URUdFUiwgIGNvbF85IElOVEVHRVIsICBjb2xf MTAgSU5URUdFUiwKKwkJY29sXzExIElOVEVHRVIsIGNvbF8xMiBJTlRFR0VSLCBjb2xfMTMgSU5U RUdFUiwgY29sXzE0IElOVEVHRVIsIGNvbF8xNSBJTlRFR0VSLAorCQljb2xfMTYgSU5URUdFUiwg Y29sXzE3IElOVEVHRVIsIGNvbF8xOCBJTlRFR0VSLCBjb2xfMTkgSU5URUdFUiwgY29sXzIwIElO VEVHRVIsCisJCWNvbF8yMSBJTlRFR0VSLCBjb2xfMjIgSU5URUdFUiwgY29sXzIzIElOVEVHRVIs IGNvbF8yNCBJTlRFR0VSLCBjb2xfMjUgSU5URUdFUiwKKwkJY29sXzI2IElOVEVHRVIsIGNvbF8y NyBJTlRFR0VSLCBjb2xfMjggSU5URUdFUiwgY29sXzI5IElOVEVHRVIsIGNvbF8zMCBJTlRFR0VS LAorCQljb2xfMzEgSU5URUdFUiwgY29sXzMyIElOVEVHRVIsIGNvbF8zMyBJTlRFR0VSLCBjb2xf MzQgSU5URUdFUiwgY29sXzM1IElOVEVHRVIsCisJCWNvbF8zNiBJTlRFR0VSLCBjb2xfMzcgSU5U RUdFUiwgY29sXzM4IElOVEVHRVIsIGNvbF8zOSBJTlRFR0VSLCBjb2xfNDAgSU5URUdFUiwKKwkJ Y29sXzQxIElOVEVHRVIsIGNvbF80MiBJTlRFR0VSLCBjb2xfNDMgSU5URUdFUiwgY29sXzQ0IElO VEVHRVIsIGNvbF80NSBJTlRFR0VSLAorCQljb2xfNDYgSU5URUdFUiwgY29sXzQ3IElOVEVHRVIs IGNvbF80OCBJTlRFR0VSLCBjb2xfNDkgSU5URUdFUiwgY29sXzUwIElOVEVHRVIsCisJCWNvbF81 MSBJTlRFR0VSLCBjb2xfNTIgSU5URUdFUiwgY29sXzUzIElOVEVHRVIsIGNvbF81NCBJTlRFR0VS LCBjb2xfNTUgSU5URUdFUiwKKwkJY29sXzU2IElOVEVHRVIsIGNvbF81NyBJTlRFR0VSLCBjb2xf NTggSU5URUdFUiwgY29sXzU5IElOVEVHRVIsIGNvbF82MCBJTlRFR0VSLAorCQljb2xfNjEgSU5U RUdFUiwgY29sXzYyIElOVEVHRVIsIGNvbF82MyBJTlRFR0VSLCBjb2xfNjQgSU5URUdFUiwgY29s XzY1IElOVEVHRVIsCisJCWNvbF82NiBJTlRFR0VSLCBjb2xfNjcgSU5URUdFUiwgY29sXzY4IElO VEVHRVIsIGNvbF82OSBJTlRFR0VSLCBjb2xfNzAgSU5URUdFUiwKKwkJY29sXzcxIElOVEVHRVIs IGNvbF83MiBJTlRFR0VSLCBjb2xfNzMgSU5URUdFUiwgY29sXzc0IElOVEVHRVIsIGNvbF83NSBJ TlRFR0VSLAorCQljb2xfNzYgSU5URUdFUiwgY29sXzc3IElOVEVHRVIsIGNvbF83OCBJTlRFR0VS LCBjb2xfNzkgSU5URUdFUiwgY29sXzgwIElOVEVHRVIsCisJCWNvbF84MSBJTlRFR0VSLCBjb2xf ODIgSU5URUdFUiwgY29sXzgzIElOVEVHRVIsIGNvbF84NCBJTlRFR0VSLCBjb2xfODUgSU5URUdF UiwKKwkJY29sXzg2IElOVEVHRVIsIGNvbF84NyBJTlRFR0VSLCBjb2xfODggSU5URUdFUiwgY29s Xzg5IElOVEVHRVIsIGNvbF85MCBJTlRFR0VSLAorCQljb2xfOTEgSU5URUdFUiwgY29sXzkyIElO VEVHRVIsIGNvbF85MyBJTlRFR0VSLCBjb2xfOTQgSU5URUdFUiwgY29sXzk1IElOVEVHRVIsCisJ CWNvbF85NiBJTlRFR0VSLCBjb2xfOTcgSU5URUdFUiwgY29sXzk4IElOVEVHRVIsIGNvbF85OSBJ TlRFR0VSLCBjb2xfMTAwIElOVEVHRVIKKwkpIFdJVEggKHBhcmFsbGVsX2F1dG92YWN1dW1fd29y a2VycyA9ICRwYXJhbGxlbF9hdXRvdmFjdXVtX3dvcmtlcnMpOworCisJRE8gXCRcJAorCURFQ0xB UkUKKwkJaSBJTlRFR0VSOworCUJFR0lOCisJCUZPUiBpIElOIDEuLiRpbmRleGVzX251bSBMT09Q CisJCQlFWEVDVVRFIGZvcm1hdCgnQ1JFQVRFIElOREVYIGlkeF9jb2xfXCVzIE9OIHRlc3RfYXV0 b3ZhYyAoY29sX1wlcyk7JywgaSwgaSk7CisJCUVORCBMT09QOworCUVORCBcJFwkOworfSk7CisK KyRub2RlLT5wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2luZGV4 IGkKKwkgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluZHJlbGlkCisJICBXSEVSRSBj LnJlbG5hbWUgPSAndGVzdF9hdXRvdmFjJzsiLAorCXN0ZG91dCA9PiBcJHBzcWxfb3V0CispOwor aXMoJHBzcWxfb3V0LCAkaW5kZXhlc19udW0gKyAxLCAiQWxsIGluZGV4ZXMgY3JlYXRlZCBzdWNj ZXNzZnVsbHkiKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlETyBcJFwk CisJREVDTEFSRQorCSAgICBpIElOVEVHRVI7CisJQkVHSU4KKwkgICAgRk9SIGkgSU4gMS4uJGlu aXRpYWxfcm93c19udW0gTE9PUAorCSAgICAgICAgSU5TRVJUIElOVE8gdGVzdF9hdXRvdmFjICgK KwkgICAgICAgICAgICBjb2xfMSwgY29sXzIsIGNvbF8zLCBjb2xfNCwgY29sXzUsIGNvbF82LCBj b2xfNywgY29sXzgsIGNvbF85LCBjb2xfMTAsCisJICAgICAgICAgICAgY29sXzExLCBjb2xfMTIs IGNvbF8xMywgY29sXzE0LCBjb2xfMTUsIGNvbF8xNiwgY29sXzE3LCBjb2xfMTgsIGNvbF8xOSwg Y29sXzIwLAorCSAgICAgICAgICAgIGNvbF8yMSwgY29sXzIyLCBjb2xfMjMsIGNvbF8yNCwgY29s XzI1LCBjb2xfMjYsIGNvbF8yNywgY29sXzI4LCBjb2xfMjksIGNvbF8zMCwKKwkgICAgICAgICAg ICBjb2xfMzEsIGNvbF8zMiwgY29sXzMzLCBjb2xfMzQsIGNvbF8zNSwgY29sXzM2LCBjb2xfMzcs IGNvbF8zOCwgY29sXzM5LCBjb2xfNDAsCisJICAgICAgICAgICAgY29sXzQxLCBjb2xfNDIsIGNv bF80MywgY29sXzQ0LCBjb2xfNDUsIGNvbF80NiwgY29sXzQ3LCBjb2xfNDgsIGNvbF80OSwgY29s XzUwLAorCSAgICAgICAgICAgIGNvbF81MSwgY29sXzUyLCBjb2xfNTMsIGNvbF81NCwgY29sXzU1 LCBjb2xfNTYsIGNvbF81NywgY29sXzU4LCBjb2xfNTksIGNvbF82MCwKKwkgICAgICAgICAgICBj b2xfNjEsIGNvbF82MiwgY29sXzYzLCBjb2xfNjQsIGNvbF82NSwgY29sXzY2LCBjb2xfNjcsIGNv bF82OCwgY29sXzY5LCBjb2xfNzAsCisJICAgICAgICAgICAgY29sXzcxLCBjb2xfNzIsIGNvbF83 MywgY29sXzc0LCBjb2xfNzUsIGNvbF83NiwgY29sXzc3LCBjb2xfNzgsIGNvbF83OSwgY29sXzgw LAorCSAgICAgICAgICAgIGNvbF84MSwgY29sXzgyLCBjb2xfODMsIGNvbF84NCwgY29sXzg1LCBj b2xfODYsIGNvbF84NywgY29sXzg4LCBjb2xfODksIGNvbF85MCwKKwkgICAgICAgICAgICBjb2xf OTEsIGNvbF85MiwgY29sXzkzLCBjb2xfOTQsIGNvbF85NSwgY29sXzk2LCBjb2xfOTcsIGNvbF85 OCwgY29sXzk5LCBjb2xfMTAwCisJICAgICAgICApIFZBTFVFUyAoCisJICAgICAgICAgICAgaSwg aSArIDEsIGkgKyAyLCBpICsgMywgaSArIDQsIGkgKyA1LCBpICsgNiwgaSArIDcsIGkgKyA4LCBp ICsgOSwKKwkgICAgICAgICAgICBpICsgMTAsIGkgKyAxMSwgaSArIDEyLCBpICsgMTMsIGkgKyAx NCwgaSArIDE1LCBpICsgMTYsIGkgKyAxNywgaSArIDE4LCBpICsgMTksCisJICAgICAgICAgICAg aSArIDIwLCBpICsgMjEsIGkgKyAyMiwgaSArIDIzLCBpICsgMjQsIGkgKyAyNSwgaSArIDI2LCBp ICsgMjcsIGkgKyAyOCwgaSArIDI5LAorCSAgICAgICAgICAgIGkgKyAzMCwgaSArIDMxLCBpICsg MzIsIGkgKyAzMywgaSArIDM0LCBpICsgMzUsIGkgKyAzNiwgaSArIDM3LCBpICsgMzgsIGkgKyAz OSwKKwkgICAgICAgICAgICBpICsgNDAsIGkgKyA0MSwgaSArIDQyLCBpICsgNDMsIGkgKyA0NCwg aSArIDQ1LCBpICsgNDYsIGkgKyA0NywgaSArIDQ4LCBpICsgNDksCisJICAgICAgICAgICAgaSAr IDUwLCBpICsgNTEsIGkgKyA1MiwgaSArIDUzLCBpICsgNTQsIGkgKyA1NSwgaSArIDU2LCBpICsg NTcsIGkgKyA1OCwgaSArIDU5LAorCSAgICAgICAgICAgIGkgKyA2MCwgaSArIDYxLCBpICsgNjIs IGkgKyA2MywgaSArIDY0LCBpICsgNjUsIGkgKyA2NiwgaSArIDY3LCBpICsgNjgsIGkgKyA2OSwK KwkgICAgICAgICAgICBpICsgNzAsIGkgKyA3MSwgaSArIDcyLCBpICsgNzMsIGkgKyA3NCwgaSAr IDc1LCBpICsgNzYsIGkgKyA3NywgaSArIDc4LCBpICsgNzksCisJICAgICAgICAgICAgaSArIDgw LCBpICsgODEsIGkgKyA4MiwgaSArIDgzLCBpICsgODQsIGkgKyA4NSwgaSArIDg2LCBpICsgODcs IGkgKyA4OCwgaSArIDg5LAorCSAgICAgICAgICAgIGkgKyA5MCwgaSArIDkxLCBpICsgOTIsIGkg KyA5MywgaSArIDk0LCBpICsgOTUsIGkgKyA5NiwgaSArIDk3LCBpICsgOTgsIGkgKyA5OQorCSAg ICAgICAgKTsKKwkgICAgRU5EIExPT1A7CisJRU5EIFwkXCQ7Cit9KTsKKworJG5vZGUtPnBzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIENPVU5UKCopIEZST00gdGVzdF9hdXRvdmFjOyIsCisJc3Rk b3V0ID0+IFwkcHNxbF9vdXQKKyk7CitpcygkcHNxbF9vdXQsICRpbml0aWFsX3Jvd3NfbnVtLCAi QWxsIGRhdGEgaW5zZXJ0ZWQgaW50byB0YWJsZSBzdWNjZXNzZnVsbHkiKTsKKworJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcXsKKwlVUERBVEUgdGVzdF9hdXRvdmFjIFNFVCBjb2xfMSA9 IDAgV0hFUkUgKGNvbF8xICUgMykgPSAwOworCUFOQUxZWkUgdGVzdF9hdXRvdmFjOworfSk7CisK KyMgUmVkdWNlIGF1dG92YWN1dW1fd29ya19tZW0sIHNvIGxlYWRlciBwcm9jZXNzIHdpbGwgcGVy Zm9ybSBwYXJhbGxlbCBpbmRleGkKKyMgdmFjdXVtIHBoYXNlIHNldmVyYWwgdGltZXMKKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgcXF7CisJYXV0b3ZhY3V1bV9uYXB0aW1l ID0gJzFzJworCWF1dG92YWN1dW1fdmFjdXVtX3RocmVzaG9sZCA9IDEKKwlhdXRvdmFjdXVtX2Fu YWx5emVfdGhyZXNob2xkID0gMQorCWF1dG92YWN1dW1fdmFjdXVtX3NjYWxlX2ZhY3RvciA9IDAu MQorCWF1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3IgPSAwLjEKKwlhdXRvdmFjdXVtID0g b24KK30pOworCiskbm9kZS0+cmVzdGFydDsKKworIyBzbGVlcCgzNjAwKTsKKworb2soMSwgIlRo ZXJlIGFyZSBubyBzZWdmYXVsdHMiKTsKKworJG5vZGUtPnN0b3A7Citkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL21lc29uLmJ1aWxkCmluZGV4IDlkZTAwNTdiZDFkLi43ZjJhZDgxMGNhMCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL21l c29uLmJ1aWxkCkBAIC0xLDUgKzEsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAorc3ViZGlyKCdhdXRvdmFjdXVtJykK IHN1YmRpcignYnJpbicpCiBzdWJkaXIoJ2NvbW1pdF90cycpCiBzdWJkaXIoJ2RlbGF5X2V4ZWN1 dGlvbicpCi0tIAoyLjQzLjAKCg== --000000000000d26c1a06393e1f15--