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 1tUn5E-002ldt-Ar for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jan 2025 13:23: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 1tUn5D-008ocU-KJ for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Jan 2025 13:23:51 +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 1tUn5D-008ocM-6y for pgsql-hackers@lists.postgresql.org; Mon, 06 Jan 2025 13:23:50 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tUn59-000ATu-0L for pgsql-hackers@lists.postgresql.org; Mon, 06 Jan 2025 13:23:50 +0000 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-2f4409fc8fdso17664446a91.1 for ; Mon, 06 Jan 2025 05:23:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1736169825; x=1736774625; 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=NbW2J3c0s+CKuxFzc5IZ7u9xirGr5mPUF8Ba9dK/uyE=; b=TqEbjWCdMpj5RgyLdRy5JNYM1TmlaRG/0j/CUvzhmzNxKUaOjoFwa4VN9WZ01A4tmA LsVKCtQcxOa+qAPLu0e65zq0UEnMdxm8nNUoJ1BwD69gpfEWnzEoxMr7DLirEesQi3aa 4ROx5vGRhqkSZNwPF6RDSUgq3dfT5Wr1bCC0QcOmaZgkyozFnFBAciNASAHJZWKmnPLa atS98C8qeSavO5W+fd3B8ioLj39wolwU1ofNTiaAmGxsUUxdXCJlbOUHQWOp0cY3AYdO MVf35lRZX/ceQiYjR6nMNznDEChz6lBwj+z4CQKEShQX5+asN3alxWLTgNVvUQucxjwr xIdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736169825; x=1736774625; 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=NbW2J3c0s+CKuxFzc5IZ7u9xirGr5mPUF8Ba9dK/uyE=; b=OQS5ugTzvWORKnik+XutV7ajHH2J9Hq21s9LDVma7ZguEE/baXjMbs1Vki++2F3H0F JmAX2t876RXUdH6RM9K+VTUlwaXvSfIBHLY8wjKKvON7Uc49TPxKB3qeweqt2ArJV+Sw M8DoYaRb/842Bfx1etYFcQjWrvtIf2zR91bBninZzLA8s+i/lkMi5TI2xb7UQe/+LfA0 RNc+KuYGLBLEqfPsLVQTr4fDtSFc/LgEa8TIm2VQUycEzRRgPwC70b0mIyRjNWo4sqSJ cxAP3bPO5jJJkXpGrFf1k2Dc7O0QvfaJTVX/3yOcw4rirbz2h1rKJiXtYzctBORayvHz r/LQ== X-Gm-Message-State: AOJu0YwFV7GDvl+d6JXwflYaIfXxNO/zeDUOeh5HqE4lbNGWkdBjy6sg 86LVpyB+Do1mOBi5xBmpxBUJDFMCUsF9I+RgBcte1xrUTVk3kBlQL/ANOq+EgBxXCTZlDZopNW0 TbY81jRVrmZbTPy91C666i8KfBIPYuKBwduvbBncmc6E9C70d8H+RsLzn X-Gm-Gg: ASbGncviGowR0gmNcFmVgCb4AkMVOmU5I5R9E+MuyIkoLB0gdPcqvR3HApJmbdZ3Fpc BjfYKFHrwTq5lCGUZn4u6yIMSMQT/SJ2EFtBQ X-Google-Smtp-Source: AGHT+IEZqHj0pXkxZIXHH4f4CPE7Pfaiu9akRVOgJBsl9TVwtzsQbvFS9/tfsnwArrOoj8rD8vgGz6Tpuls+bWwj1gA= X-Received: by 2002:a17:90a:d64f:b0:2ee:9661:eafb with SMTP id 98e67ed59e1d1-2f4536d18a7mr85133468a91.12.1736169825218; Mon, 06 Jan 2025 05:23:45 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Aleksander Alekseev Date: Mon, 6 Jan 2025 16:23:33 +0300 Message-ID: Subject: Re: [PATCH] Refactor SLRU to always use long file names To: PostgreSQL Hackers Cc: Michael Paquier Content-Type: multipart/mixed; boundary="000000000000b3e11a062b0989d8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b3e11a062b0989d8 Content-Type: text/plain; charset="UTF-8" Hi, > For the record, Michael and I had a brief discussion about this > offlist and decided to abandon the idea of adding TAP tests, relying > only on buildfarm. Also I will check if we have a clear error message > in case when a user forgot to run pg_upgrade and running new slru.c > with old filenames. If the user doesn't get such an error message I > will see if it's possible to add it somewhere in slru.c without > introducing much performance overhead. > > Also I'm going to submit precise steps to test this migration manually > for the reviewers convenience. Here is an updated patch. The steps to test it manually are as follows. Compile and install PostgreSQL from the REL_17_STABLE branch: ``` git checkout REL_17_STABLE git fetch origin git rebase -i origin/REL_17_STABLE git clean -dfx meson setup --buildtype debug -Dcassert=true -Dtap_tests=enabled -Dprefix=/home/eax/pginstall-17 build ninja -C build meson install -C build ~/pginstall-17/bin/initdb --data-checksums -D ~/pginstall-17/data ~/pginstall-17/bin/pg_ctl -D ~/pginstall-17/data -l ~/pginstall-17/data/logfile start ~/pginstall-17/bin/createdb $(whoami) # fill DB (or even better - use a copy of an existing one), e.g: ~/pginstall-17/bin/pgbench -i -s 100 ~/pginstall-17/bin/pgbench -j 16 -c 16 -T 10 -P 5 # should see 4-digit SLRU segment filenames, more files is better ls -la ~/pginstall-17/data/pg_xact/ \ ~/pginstall-17/data/pg_commit_ts/ \ ~/pginstall-17/data/pg_multixact/members/ \ ~/pginstall-17/data/pg_multixact/offsets/ \ ~/pginstall-17/data/pg_subtrans/ \ ~/pginstall-17/data/pg_serial/ ~/pginstall-17/bin/pg_ctl -D ~/pginstall-17/data stop ``` Apply the patch to the `master` branch, recompile PostgreSQL, install to the different location: ``` git checkout slru_pg_upgrade_v2 git clean -dfx meson setup --buildtype debug -Dcassert=true -Dtap_tests=enabled -Dprefix=/home/eax/pginstall-18 build ninja -C build meson install -C build ``` Try to start PostgreSQL without running pg_upgrade: ``` cp -r ~/pginstall-17/data ~/pginstall-18/data ~/pginstall-18/bin/pg_ctl -D ~/pginstall-18/data -l ~/pginstall-18/data/logfile start ``` You should get: ``` waiting for server to start.... stopped waiting pg_ctl: could not start server Examine the log output. $ tail ~/pginstall-18/data/logfile FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 17, which is not compatible with this version 18devel ``` Run pg_upgrade: ``` rm -r ~/pginstall-18/data ~/pginstall-18/bin/initdb --data-checksums -D ~/pginstall-18/data ~/pginstall-18/bin/pg_upgrade --old-datadir=/home/eax/pginstall-17/data --new-datadir=/home/eax/pginstall-18/data --old-bindir=/home/eax/pginstall-17/bin --new-bindir=/home/eax/pginstall-18/bin ``` Make sure the output contains: ``` Renaming SLRU segments in pg_xact ok Renaming SLRU segments in pg_commit_ts ok Renaming SLRU segments in pg_multixact/offsets ok Renaming SLRU segments in pg_multixact/members ok Renaming SLRU segments in pg_subtrans ok Renaming SLRU segments in pg_serial ok ``` Make sure PostgreSQL starts after the upgrade: ``` ~/pginstall-18/bin/pg_ctl -D ~/pginstall-18/data -l ~/pginstall-18/data/logfile start ~/pginstall-18/bin/psql -c 'select count(*) from pgbench_accounts' ~/pginstall-18/bin/pg_ctl -D ~/pginstall-18/data stop # should see 15-digit SLRU segment filenames ls -la ~/pginstall-18/data/pg_xact/ \ ~/pginstall-18/data/pg_commit_ts/ \ ~/pginstall-18/data/pg_multixact/members/ \ ~/pginstall-18/data/pg_multixact/offsets/ \ ~/pginstall-18/data/pg_subtrans/ \ ~/pginstall-18/data/pg_serial/ ``` Make sure that the second run of pg_upgrade doesn't produce "Renaming SLRU segments" messages: ``` mv ~/pginstall-18/data ~/pginstall-18/data.bak ~/pginstall-18/bin/initdb --data-checksums -D ~/pginstall-18/data ~/pginstall-18/bin/pg_upgrade --old-datadir=/home/eax/pginstall-18/data.bak --new-datadir=/home/eax/pginstall-18/data --old-bindir=/home/eax/pginstall-18/bin --new-bindir=/home/eax/pginstall-18/bin ``` As always, your feedback and suggestions are most welcomed. -- Best regards, Aleksander Alekseev --000000000000b3e11a062b0989d8 Content-Type: application/octet-stream; name="v2-0001-Always-use-long-SLRU-segment-file-names.patch" Content-Disposition: attachment; filename="v2-0001-Always-use-long-SLRU-segment-file-names.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5l2m58t0 RnJvbSA3YWU2MWZiYjJmYjMxMGZhZmM1MzYwMjIyZTI4Yzg4MTUyNGJhODNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVrc2FuZGVyIEFsZWtzZWV2IDxhbGVrc2FuZGVyQHRpbWVz Y2FsZS5jb20+CkRhdGU6IFdlZCwgMTEgU2VwIDIwMjQgMTM6MTc6MzMgKzAzMDAKU3ViamVjdDog W1BBVENIIHYyXSBBbHdheXMgdXNlIGxvbmcgU0xSVSBzZWdtZW50IGZpbGUgbmFtZXMKClBHMTcg aW50cm9kdWNlZCBsb25nIFNMUlUgc2VnbWVudCBmaWxlIG5hbWVzIChjb21taXQgNGVkOGYwOTEz YmZkKS4gV2UgdXNlZApzaG9ydCBvciBsb25nIGZpbGUgbmFtZXMgZGVwZW5kaW5nIG9uIFNscnVD dGwtPmxvbmdfc2VnbWVudF9uYW1lcy4gVGhpcyBjb21taXQKcmVmYWN0b3JzIFNMUlUgdG8gYWx3 YXlzIHVzZSBsb25nIGZpbGUgbmFtZXMgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvZGUuCgpB bGVrc2FuZGVyIEFsZWtzZWV2LCByZXZpZXdlZCBieSBNaWNoYWVsIFBhcXVpZXIKRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUo3YzZUT3k3ZlVXOU11TmVPV29yM2NTRm5RZzl0Z3o9 bWpYSERiOTRHT1J0TV9FeWdAbWFpbC5nbWFpbC5jb20KCighISEpIGJ1bXAgY2F0dmVyc2lvbiBh bmQgY2hhbmdlIHRoZSBjb3JyZXNwb25kaW5nIFRPRE8gRklYTUUgbGluZSBpbiBwZ191cGdyYWRl LmgKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMgICAgICAgICAgIHwgIDIg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jICAgICAgfCAgMyArLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgICAgICB8ICA2ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgICAgICAgICAgIHwgNzMgKysrKy0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgICAgICAgfCAg MiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICB8ICAyICst CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgIDIgKy0KIHNy Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgICAgICAgICAgICAgfCA3NCArKysrKysrKysr KysrKysrKysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmggICAgICAgICAgICAg fCAgNiArKwogc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDNfY29ycnVwdGlvbi5wbCB8ICAy ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oICAgICAgICAgICAgICAgICAgIHwgMTAgKy0t CiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYyAgICAgIHwgIDggKy0tCiAx MiBmaWxlcyBjaGFuZ2VkLCAxMDQgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDBkNTU2YzAwYjhjLi43YTIzOGVmYzIyNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtODEwLDcgKzgxMCw3IEBAIENMT0dTaG1lbUlu aXQodm9pZCkKIAlYYWN0Q3RsLT5QYWdlUHJlY2VkZXMgPSBDTE9HUGFnZVByZWNlZGVzOwogCVNp bXBsZUxydUluaXQoWGFjdEN0bCwgInRyYW5zYWN0aW9uIiwgQ0xPR1NobWVtQnVmZmVycygpLCBD TE9HX0xTTlNfUEVSX1BBR0UsCiAJCQkJICAicGdfeGFjdCIsIExXVFJBTkNIRV9YQUNUX0JVRkZF UiwKLQkJCQkgIExXVFJBTkNIRV9YQUNUX1NMUlUsIFNZTkNfSEFORExFUl9DTE9HLCBmYWxzZSk7 CisJCQkJICBMV1RSQU5DSEVfWEFDVF9TTFJVLCBTWU5DX0hBTkRMRVJfQ0xPRyk7CiAJU2xydVBh Z2VQcmVjZWRlc1VuaXRUZXN0cyhYYWN0Q3RsLCBDTE9HX1hBQ1RTX1BFUl9QQUdFKTsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwppbmRleCA5NTA0OWFjZDBiNS4uOTky NTJjZDliODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90 cy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC01NTYs OCArNTU2LDcgQEAgQ29tbWl0VHNTaG1lbUluaXQodm9pZCkKIAlTaW1wbGVMcnVJbml0KENvbW1p dFRzQ3RsLCAiY29tbWl0X3RpbWVzdGFtcCIsIENvbW1pdFRzU2htZW1CdWZmZXJzKCksIDAsCiAJ CQkJICAicGdfY29tbWl0X3RzIiwgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKIAkJCQkgIExX VFJBTkNIRV9DT01NSVRUU19TTFJVLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NPTU1JVF9UUywKLQkJ CQkgIGZhbHNlKTsKKwkJCQkgIFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwogCVNscnVQYWdlUHJl Y2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CiAK IAljb21taXRUc1NoYXJlZCA9IFNobWVtSW5pdFN0cnVjdCgiQ29tbWl0VHMgc2hhcmVkIiwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggMjdjY2RmOTUwMGYuLjJjYzY0 Mjg5MDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMTk3NCwx NSArMTk3NCwxMyBAQCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKIAkJCQkgICJtdWx0aXhhY3Rf b2Zmc2V0IiwgbXVsdGl4YWN0X29mZnNldF9idWZmZXJzLCAwLAogCQkJCSAgInBnX211bHRpeGFj dC9vZmZzZXRzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCiAJCQkJICBMV1RS QU5DSEVfTVVMVElYQUNUT0ZGU0VUX1NMUlUsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNU X09GRlNFVCwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfT0ZG U0VUKTsKIAlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwgTVVM VElYQUNUX09GRlNFVFNfUEVSX1BBR0UpOwogCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0TWVtYmVy Q3RsLAogCQkJCSAgIm11bHRpeGFjdF9tZW1iZXIiLCBtdWx0aXhhY3RfbWVtYmVyX2J1ZmZlcnMs IDAsCiAJCQkJICAicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBMV1RSQU5DSEVfTVVMVElYQUNUTUVN QkVSX0JVRkZFUiwKIAkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfU0xSVSwKLQkJCQkg IFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVNQkVSLAotCQkJCSAgZmFsc2UpOworCQkJCSAgU1lO Q19IQU5ETEVSX01VTFRJWEFDVF9NRU1CRVIpOwogCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVMcnVU cnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KIAogCS8qIEluaXRp YWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUu YwppbmRleCA3ZWVhYWZlMmNiMy4uN2UyYTEyZDZhMGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3NscnUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9z bHJ1LmMKQEAgLTc3LDQyICs3NywyMiBAQAogICoKICAqICJwYXRoIiBzaG91bGQgcG9pbnQgdG8g YSBidWZmZXIgYXQgbGVhc3QgTUFYUEdQQVRIIGNoYXJhY3RlcnMgbG9uZy4KICAqCi0gKiBJZiBj dGwtPmxvbmdfc2VnbWVudF9uYW1lcyBpcyB0cnVlLCBzZWdubyBjYW4gYmUgaW4gdGhlIHJhbmdl IFswLCAyXjYwLTFdLgotICogVGhlIHJlc3VsdGluZyBmaWxlIG5hbWUgaXMgbWFkZSBvZiAxNSBj aGFyYWN0ZXJzLCBlLmcuIGRpci8xMjM0NTY3ODlBQkNERUYuCi0gKgotICogSWYgY3RsLT5sb25n X3NlZ21lbnRfbmFtZXMgaXMgZmFsc2UsIHNlZ25vIGNhbiBiZSBpbiB0aGUgcmFuZ2UgWzAsIDJe MjQtMV0uCi0gKiBUaGUgcmVzdWx0aW5nIGZpbGUgbmFtZSBpcyBtYWRlIG9mIDQgdG8gNiBjaGFy YWN0ZXJzLCBhcyBvZjoKLSAqCi0gKiAgZGlyLzEyMzQgICBmb3IgWzAsIDJeMTYtMV0KLSAqICBk aXIvMTIzNDUgIGZvciBbMl4xNiwgMl4yMC0xXQotICogIGRpci8xMjM0NTYgZm9yIFsyXjIwLCAy XjI0LTFdCisgKiBzZWdubyBjYW4gYmUgaW4gdGhlIHJhbmdlIFswLCAyXjYwLTFdLiBUaGUgcmVz dWx0aW5nIGZpbGUgbmFtZSBpcyBtYWRlCisgKiBvZiAxNSBjaGFyYWN0ZXJzLCBlLmcuIGRpci8x MjM0NTY3ODlBQkNERUYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBTbHJ1RmlsZU5hbWUoU2xy dUN0bCBjdGwsIGNoYXIgKnBhdGgsIGludDY0IHNlZ25vKQogewotCWlmIChjdGwtPmxvbmdfc2Vn bWVudF9uYW1lcykKLQl7Ci0JCS8qCi0JCSAqIFdlIGNvdWxkIHVzZSAxNiBjaGFyYWN0ZXJzIGhl cmUgYnV0IHRoZSBkaXNhZHZhbnRhZ2Ugd291bGQgYmUgdGhhdAotCQkgKiB0aGUgU0xSVSBzZWdt ZW50cyB3aWxsIGJlIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBXQUwgc2VnbWVudHMuCi0JCSAq Ci0JCSAqIEZvciB0aGlzIHJlYXNvbiB3ZSB1c2UgMTUgY2hhcmFjdGVycy4gSXQgaXMgZW5vdWdo IGJ1dCBhbHNvIG1lYW5zCi0JCSAqIHRoYXQgaW4gdGhlIGZ1dHVyZSB3ZSBjYW4ndCBkZWNyZWFz ZSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIGVhc2lseS4KLQkJICovCi0JCUFzc2VydChzZWdubyA+ PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkZGRkYpKTsKLQkJcmV0dXJu IHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzLyUwMTVsbFgiLCBjdGwtPkRpciwKLQkJCQkJ CShsb25nIGxvbmcpIHNlZ25vKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogRGVzcGl0ZSB0 aGUgZmFjdCB0aGF0ICUwNFggZm9ybWF0IHN0cmluZyBpcyB1c2VkIHVwIHRvIDI0IGJpdAotCQkg KiBpbnRlZ2VycyBhcmUgYWxsb3dlZC4gU2VlIFNscnVDb3JyZWN0U2VnbWVudEZpbGVuYW1lTGVu Z3RoKCkKLQkJICovCi0JCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1Qo MHhGRkZGRkYpKTsKLQkJcmV0dXJuIHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzLyUwNFgi LCAoY3RsKS0+RGlyLAotCQkJCQkJKHVuc2lnbmVkIGludCkgc2Vnbm8pOwotCX0KKwkvKgorCSAq IFdlIGNvdWxkIHVzZSAxNiBjaGFyYWN0ZXJzIGhlcmUgYnV0IHRoZSBkaXNhZHZhbnRhZ2Ugd291 bGQgYmUgdGhhdAorCSAqIHRoZSBTTFJVIHNlZ21lbnRzIHdpbGwgYmUgaGFyZCB0byBkaXN0aW5n dWlzaCBmcm9tIFdBTCBzZWdtZW50cy4KKwkgKgorCSAqIEZvciB0aGlzIHJlYXNvbiB3ZSB1c2Ug MTUgY2hhcmFjdGVycy4gSXQgaXMgZW5vdWdoIGJ1dCBhbHNvIG1lYW5zCisJICogdGhhdCBpbiB0 aGUgZnV0dXJlIHdlIGNhbid0IGRlY3JlYXNlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgZWFzaWx5 LgorCSAqLworCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1QoMHhGRkZG RkZGRkZGRkZGRkYpKTsKKwlyZXR1cm4gc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTAx NWxsWCIsIGN0bC0+RGlyLAorCQkJCQkobG9uZyBsb25nKSBzZWdubyk7CiB9CiAKIC8qCkBAIC0y NTEsNyArMjMxLDcgQEAgU2ltcGxlTHJ1QXV0b3R1bmVCdWZmZXJzKGludCBkaXZpc29yLCBpbnQg bWF4KQogdm9pZAogU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwg aW50IG5zbG90cywgaW50IG5sc25zLAogCQkJICBjb25zdCBjaGFyICpzdWJkaXIsIGludCBidWZm ZXJfdHJhbmNoZV9pZCwgaW50IGJhbmtfdHJhbmNoZV9pZCwKLQkJCSAgU3luY1JlcXVlc3RIYW5k bGVyIHN5bmNfaGFuZGxlciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpCisJCQkgIFN5bmNSZXF1 ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIpCiB7CiAJU2xydVNoYXJlZAlzaGFyZWQ7CiAJYm9vbAkJ Zm91bmQ7CkBAIC0zNDIsNyArMzIyLDYgQEAgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29u c3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAogCSAqLwogCWN0bC0+c2hhcmVk ID0gc2hhcmVkOwogCWN0bC0+c3luY19oYW5kbGVyID0gc3luY19oYW5kbGVyOwotCWN0bC0+bG9u Z19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdtZW50X25hbWVzOwogCWN0bC0+YmFua19tYXNrID0g KG5zbG90cyAvIFNMUlVfQkFOS19TSVpFKSAtIDE7CiAJc3RybGNweShjdGwtPkRpciwgc3ViZGly LCBzaXplb2YoY3RsLT5EaXIpKTsKIH0KQEAgLTE3NDgsMzAgKzE3MjcsNiBAQCBTbHJ1U2NhbkRp ckNiRGVsZXRlQWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50NjQgc2VncGFnZSwg dm9pZCAqZGF0YSkKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KIH0KIAotLyoK LSAqIEFuIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgU2xydVNjYW5EaXJlY3RvcnkoKS4KLSAq Ci0gKiBSZXR1cm5zIHRydWUgaWYgYSBmaWxlIHdpdGggYSBuYW1lIG9mIGEgZ2l2ZW4gbGVuZ3Ro IG1heSBiZSBhIGNvcnJlY3QKLSAqIFNMUlUgc2VnbWVudC4KLSAqLwotc3RhdGljIGlubGluZSBi b29sCi1TbHJ1Q29ycmVjdFNlZ21lbnRGaWxlbmFtZUxlbmd0aChTbHJ1Q3RsIGN0bCwgc2l6ZV90 IGxlbikKLXsKLQlpZiAoY3RsLT5sb25nX3NlZ21lbnRfbmFtZXMpCi0JCXJldHVybiAobGVuID09 IDE1KTsJCS8qIHNlZSBTbHJ1RmlsZU5hbWUoKSAqLwotCWVsc2UKLQotCQkvKgotCQkgKiBDb21t aXQgNjM4Y2YwOWU3NmQgYWxsb3dlZCA1LWNoYXJhY3RlciBsZW5ndGhzLiBMYXRlciBjb21taXQK LQkJICogNzNjOTg2YWRkZTUgYWxsb3dlZCA2LWNoYXJhY3RlciBsZW5ndGguCi0JCSAqCi0JCSAq IE5vdGU6IFRoZXJlIGlzIGFuIG9uZ29pbmcgcGxhbiB0byBtaWdyYXRlIGFsbCBTTFJVcyB0byA2 NC1iaXQgcGFnZQotCQkgKiBudW1iZXJzLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgMTUtY2hhcmFj dGVyIGZpbGUgbmFtZXMsIHdoaWNoIG1heQotCQkgKiBldmVudHVhbGx5IGRlcHJlY2F0ZSB0aGUg c3VwcG9ydCBmb3IgNCwgNSwgYW5kIDYtY2hhcmFjdGVyIG5hbWVzLgotCQkgKi8KLQkJcmV0dXJu IChsZW4gPT0gNCB8fCBsZW4gPT0gNSB8fCBsZW4gPT0gNik7Ci19Ci0KIC8qCiAgKiBTY2FuIHRo ZSBTaW1wbGVMcnUgZGlyZWN0b3J5IGFuZCBhcHBseSBhIGNhbGxiYWNrIHRvIGVhY2ggZmlsZSBm b3VuZCBpbiBpdC4KICAqCkBAIC0xODAzLDcgKzE3NTgsNyBAQCBTbHJ1U2NhbkRpcmVjdG9yeShT bHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAogCQls ZW4gPSBzdHJsZW4oY2xkZS0+ZF9uYW1lKTsKIAotCQlpZiAoU2xydUNvcnJlY3RTZWdtZW50Rmls ZW5hbWVMZW5ndGgoY3RsLCBsZW4pICYmCisJCWlmICgobGVuID09IDE1KSAmJgogCQkJc3Ryc3Bu KGNsZGUtPmRfbmFtZSwgIjAxMjM0NTY3ODlBQkNERUYiKSA9PSBsZW4pCiAJCXsKIAkJCXNlZ25v ID0gc3RydG9pNjQoY2xkZS0+ZF9uYW1lLCBOVUxMLCAxNik7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vc3VidHJhbnMuYwppbmRleCAxNTE1MzYxOGZhZC4uNThhNWVmNjU3ZWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwpAQCAtMjQzLDcgKzI0Myw3IEBAIFNVQlRSQU5TU2ht ZW1Jbml0KHZvaWQpCiAJU3ViVHJhbnNDdGwtPlBhZ2VQcmVjZWRlcyA9IFN1YlRyYW5zUGFnZVBy ZWNlZGVzOwogCVNpbXBsZUxydUluaXQoU3ViVHJhbnNDdGwsICJzdWJ0cmFuc2FjdGlvbiIsIFNV QlRSQU5TU2htZW1CdWZmZXJzKCksIDAsCiAJCQkJICAicGdfc3VidHJhbnMiLCBMV1RSQU5DSEVf U1VCVFJBTlNfQlVGRkVSLAotCQkJCSAgTFdUUkFOQ0hFX1NVQlRSQU5TX1NMUlUsIFNZTkNfSEFO RExFUl9OT05FLCBmYWxzZSk7CisJCQkJICBMV1RSQU5DSEVfU1VCVFJBTlNfU0xSVSwgU1lOQ19I QU5ETEVSX05PTkUpOwogCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU3ViVHJhbnNDdGwsIFNV QlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggNGJkMzdk NWJlYjUuLjM3M2IwMzU3ZmFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3lu Yy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTUzNyw3ICs1MzcsNyBA QCBBc3luY1NobWVtSW5pdCh2b2lkKQogCU5vdGlmeUN0bC0+UGFnZVByZWNlZGVzID0gYXN5bmNR dWV1ZVBhZ2VQcmVjZWRlczsKIAlTaW1wbGVMcnVJbml0KE5vdGlmeUN0bCwgIm5vdGlmeSIsIG5v dGlmeV9idWZmZXJzLCAwLAogCQkJCSAgInBnX25vdGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVG RkVSLCBMV1RSQU5DSEVfTk9USUZZX1NMUlUsCi0JCQkJICBTWU5DX0hBTkRMRVJfTk9ORSwgdHJ1 ZSk7CisJCQkJICBTWU5DX0hBTkRMRVJfTk9ORSk7CiAKIAlpZiAoIWZvdW5kKQogCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCA1YjIxYTA1Mzk4MS4uYmM4M2U4ZTg1OWQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTgxNCw3ICs4MTQsNyBAQCBT ZXJpYWxJbml0KHZvaWQpCiAJU2ltcGxlTHJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAic2VyaWFsaXph YmxlIiwKIAkJCQkgIHNlcmlhbGl6YWJsZV9idWZmZXJzLCAwLCAicGdfc2VyaWFsIiwKIAkJCQkg IExXVFJBTkNIRV9TRVJJQUxfQlVGRkVSLCBMV1RSQU5DSEVfU0VSSUFMX1NMUlUsCi0JCQkJICBT WU5DX0hBTkRMRVJfTk9ORSwgZmFsc2UpOworCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUpOwogI2lm ZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIAlTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0 VGVzdHMoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKaW5kZXggMzZjN2YzODc5ZDUu LjZkM2RjYzYzZDJiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5j CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKQEAgLTM4LDYgKzM4LDcgQEAK IAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNs dWRlIDx0aW1lLmg+CiAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzX2QuaCIKQEAgLTU5LDYg KzYwLDggQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9uZXdfY2x1c3Rlcih2b2lkKTsKIHN0YXRpYyB2 b2lkIHByZXBhcmVfbmV3X2dsb2JhbHModm9pZCk7CiBzdGF0aWMgdm9pZCBjcmVhdGVfbmV3X29i amVjdHModm9pZCk7CiBzdGF0aWMgdm9pZCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCk7CitzdGF0 aWMgdm9pZCBjaGVja19zbHJ1X3NlZ21lbnRfZmlsZW5hbWVzKHZvaWQpOworc3RhdGljIHZvaWQg cmVuYW1lX3NscnVfc2VnbWVudHMoY29uc3QgY2hhciAqZGlybmFtZSk7CiBzdGF0aWMgdm9pZCBz ZXRfZnJvemVueGlkcyhib29sIG1pbm14aWRfb25seSk7CiBzdGF0aWMgdm9pZCBtYWtlX291dHB1 dGRpcnMoY2hhciAqcGdkYXRhKTsKIHN0YXRpYyB2b2lkIHNldHVwKGNoYXIgKmFyZ3YwKTsKQEAg LTE1NCw2ICsxNTcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKi8KIAogCWNv cHlfeGFjdF94bG9nX3hpZCgpOworCWNoZWNrX3NscnVfc2VnbWVudF9maWxlbmFtZXMoKTsKIAog CS8qIE5ldyBub3cgdXNpbmcgeGlkcyBvZiB0aGUgb2xkIHN5c3RlbSAqLwogCkBAIC04MDYsNiAr ODEwLDc2IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCWNoZWNrX29rKCk7CiB9CiAKK3N0 YXRpYyB2b2lkCityZW5hbWVfc2xydV9zZWdtZW50cyhjb25zdCBjaGFyKiBkaXJuYW1lKQorewor CURJUgkJICAgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlpbnQgCQlsZW47CisJaW50NjQg CQlzZWdubzsKKwljaGFyCQlkaXJfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJCW9sZF9wYXRoW01B WFBHUEFUSF07CisJY2hhcgkJbmV3X3BhdGhbTUFYUEdQQVRIXTsKKworCXByZXBfc3RhdHVzKCJS ZW5hbWluZyBTTFJVIHNlZ21lbnRzIGluICVzIiwgZGlybmFtZSk7CisJc25wcmludGYoZGlyX3Bh dGgsIHNpemVvZihkaXJfcGF0aCksICIlcy8lcyIsIG5ld19jbHVzdGVyLnBnZGF0YSwgZGlybmFt ZSk7CisKKwlkaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwlpZiAoZGlyID09IE5VTEwpCisJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRpcl9wYXRoKTsK KworCXdoaWxlIChlcnJubyA9IDAsIChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwl7CisJ CS8qCisJCSAqIGlnbm9yZSAnLicsICcuLicgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGRvZXNu J3QgbG9vaworCQkgKiBsaWtlIGFuIFNMUlUgc2VnbWVudCB3aXRoIGEgc2hvcnQgZmlsZSBuYW1l CisJCSAqLworCisJCWxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKwkJaWYobGVuICE9IDQgJiYg bGVuICE9IDUgJiYgbGVuICE9IDYpCisJCQljb250aW51ZTsKKworCQlpZihzdHJzcG4oZGUtPmRf bmFtZSwgIjAxMjM0NTY3ODlBQkNERUYiKSAhPSBsZW4pCisJCQljb250aW51ZTsKKworCQlzZWdu byA9IHN0cnRvaTY0KGRlLT5kX25hbWUsIE5VTEwsIDE2KTsKKwkJc25wcmludGYobmV3X3BhdGgs IE1BWFBHUEFUSCwgIiVzLyUwMTVsbFgiLCBkaXJfcGF0aCwKKwkJCQkJKGxvbmcgbG9uZykgc2Vn bm8pOworCQlzbnByaW50ZihvbGRfcGF0aCwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXJfcGF0aCwg ZGUtPmRfbmFtZSk7CisKKwkJaWYgKHBnX212X2ZpbGUob2xkX3BhdGgsIG5ld19wYXRoKSAhPSAw KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZW5hbWUgZmlsZSBcIiVzXCIgdG8gXCIlc1wiOiAl bSIsCisJCQkJCSBvbGRfcGF0aCwgbmV3X3BhdGgpOworCX0KKworCWlmIChlcnJubykKKwkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZWFkIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGlyX3BhdGgpOwor CisJaWYgKGNsb3NlZGlyKGRpcikpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0 b3J5IFwiJXNcIjogJW0iLCBkaXJfcGF0aCk7CisKKwljaGVja19vaygpOworfQorCitzdGF0aWMg dm9pZAorY2hlY2tfc2xydV9zZWdtZW50X2ZpbGVuYW1lcyh2b2lkKQoreworCWludCBpOworCXN0 YXRpYyBjb25zdCBjaGFyKiBkaXJzW10gPSB7CisJCSJwZ194YWN0IiwKKwkJInBnX2NvbW1pdF90 cyIsCisJCSJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsCisJCSJwZ19tdWx0aXhhY3QvbWVtYmVycyIs CisJCSJwZ19zdWJ0cmFucyIsCisJCSJwZ19zZXJpYWwiLAorCX07CisKKwlpZihvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jYXRfdmVyID49IFNMUlVfU0VHX0ZJTEVOQU1FU19DSEFOR0VfQ0FUX1ZF UikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkaXJzKS9zaXplb2YoZGly c1swXSk7IGkrKykKKwkJcmVuYW1lX3NscnVfc2VnbWVudHMoZGlyc1tpXSk7Cit9CiAKIC8qCiAg KglzZXRfZnJvemVueGlkcygpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCAwY2RkNjc1ZTRm MS4uYTgzOWYxOWUzMTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRl LmgKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAtMTI1LDYgKzEyNSwx MiBAQCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAgKi8KICNkZWZpbmUgSlNPTkJfRk9S TUFUX0NIQU5HRV9DQVRfVkVSIDIwMTQwOTI5MQogCisvKgorICogY2hhbmdlIG9mIFNMUlUgc2Vn bWVudCBmaWxlbmFtZXMgbGVuZ3RoIGluIDE4LjAKKyAqIFRPRE8gRklYTUUgQ0hBTkdFIFRPIFRI RSBBQ1RVQUwgVkFMVUUgQkVGT1JFIENPTU1JVFRJTkcKKyAqLworI2RlZmluZSBTTFJVX1NFR19G SUxFTkFNRVNfQ0hBTkdFX0NBVF9WRVIgMjAyNDEyMjAxCisKIAogLyoKICAqIEVhY2ggcmVsYXRp b24gaXMgcmVwcmVzZW50ZWQgYnkgYSByZWxpbmZvIHN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDAzX2NvcnJ1cHRpb24ucGwgYi9zcmMvYmluL3BnX3Zl cmlmeWJhY2t1cC90LzAwM19jb3JydXB0aW9uLnBsCmluZGV4IDExMTFiMDk2MzdkLi45ZDFkYmI5 M2Q3MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNrdXAvdC8wMDNfY29ycnVwdGlv bi5wbAorKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC90LzAwM19jb3JydXB0aW9uLnBsCkBA IC0yMzcsNyArMjM3LDcgQEAgc3ViIG11dGlsYXRlX2V4dHJhX3RhYmxlc3BhY2VfZmlsZQogc3Vi IG11dGlsYXRlX21pc3NpbmdfZmlsZQogewogCW15ICgkYmFja3VwX3BhdGgpID0gQF87Ci0JbXkg JHBhdGhuYW1lID0gIiRiYWNrdXBfcGF0aC9wZ194YWN0LzAwMDAiOworCW15ICRwYXRobmFtZSA9 ICIkYmFja3VwX3BhdGgvcGdfeGFjdC8wMDAwMDAwMDAwMDAwMDAiOwogCXVubGluaygkcGF0aG5h bWUpIHx8IGRpZSAiJHBhdGhuYW1lOiAkISI7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3NscnUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKaW5kZXgg YWU4NzFiNjQwZjguLjQ5MGVhODVjNWUzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv c2xydS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKQEAgLTEzMywxMyArMTMzLDYg QEAgdHlwZWRlZiBzdHJ1Y3QgU2xydUN0bERhdGEKIAkgKi8KIAliaXRzMTYJCWJhbmtfbWFzazsK IAotCS8qCi0JICogSWYgdHJ1ZSwgdXNlIGxvbmcgc2VnbWVudCBmaWxlIG5hbWVzLiAgT3RoZXJ3 aXNlLCB1c2Ugc2hvcnQgZmlsZSBuYW1lcy4KLQkgKgotCSAqIEZvciBkZXRhaWxzIGFib3V0IHRo ZSBmaWxlIG5hbWUgZm9ybWF0LCBzZWUgU2xydUZpbGVOYW1lKCkuCi0JICovCi0JYm9vbAkJbG9u Z19zZWdtZW50X25hbWVzOwotCiAJLyoKIAkgKiBXaGljaCBzeW5jIGhhbmRsZXIgZnVuY3Rpb24g dG8gdXNlIHdoZW4gaGFuZGluZyBzeW5jIHJlcXVlc3RzIG92ZXIgdG8KIAkgKiB0aGUgY2hlY2tw b2ludGVyLiAgU1lOQ19IQU5ETEVSX05PTkUgdG8gZGlzYWJsZSBmc3luYyAoZWcgcGdfbm90aWZ5 KS4KQEAgLTE4Nyw4ICsxODAsNyBAQCBleHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50 IG5zbG90cywgaW50IG5sc25zKTsKIGV4dGVybiBpbnQJU2ltcGxlTHJ1QXV0b3R1bmVCdWZmZXJz KGludCBkaXZpc29yLCBpbnQgbWF4KTsKIGV4dGVybiB2b2lkIFNpbXBsZUxydUluaXQoU2xydUN0 bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKIAkJCQkJCSAg Y29uc3QgY2hhciAqc3ViZGlyLCBpbnQgYnVmZmVyX3RyYW5jaGVfaWQsCi0JCQkJCQkgIGludCBi YW5rX3RyYW5jaGVfaWQsIFN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIsCi0JCQkJCQkg IGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKTsKKwkJCQkJCSAgaW50IGJhbmtfdHJhbmNoZV9pZCwg U3luY1JlcXVlc3RIYW5kbGVyIHN5bmNfaGFuZGxlcik7CiBleHRlcm4gaW50CVNpbXBsZUxydVpl cm9QYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8pOwogZXh0ZXJuIGludAlTaW1wbGVMcnVS ZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAogCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCB4aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NscnUvdGVzdF9zbHJ1LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUu YwppbmRleCAzZWE1Y2ViODU1Mi4uY2JkNTE3MzAxNWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9z bHJ1L3Rlc3Rfc2xydS5jCkBAIC0yMTMsMTEgKzIxMyw2IEBAIHRlc3Rfc2xydV9wYWdlX3ByZWNl ZGVzX2xvZ2ljYWxseShpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiBzdGF0aWMgdm9pZAogdGVz dF9zbHJ1X3NobWVtX3N0YXJ0dXAodm9pZCkKIHsKLQkvKgotCSAqIFNob3J0IHNlZ21lbnRzIG5h bWVzIGFyZSB3ZWxsIHRlc3RlZCBlbHNld2hlcmUgc28gaW4gdGhpcyB0ZXN0IHdlIGFyZQotCSAq IGZvY3VzaW5nIG9uIGxvbmcgbmFtZXMuCi0JICovCi0JY29uc3QgYm9vbAlsb25nX3NlZ21lbnRf bmFtZXMgPSB0cnVlOwogCWNvbnN0IGNoYXIJc2xydV9kaXJfbmFtZVtdID0gInBnX3Rlc3Rfc2xy dSI7CiAJaW50CQkJdGVzdF90cmFuY2hlX2lkOwogCWludAkJCXRlc3RfYnVmZmVyX3RyYW5jaGVf aWQ7CkBAIC0yNDEsOCArMjM2LDcgQEAgdGVzdF9zbHJ1X3NobWVtX3N0YXJ0dXAodm9pZCkKIAlU ZXN0U2xydUN0bC0+UGFnZVByZWNlZGVzID0gdGVzdF9zbHJ1X3BhZ2VfcHJlY2VkZXNfbG9naWNh bGx5OwogCVNpbXBsZUxydUluaXQoVGVzdFNscnVDdGwsICJUZXN0U0xSVSIsCiAJCQkJICBOVU1f VEVTVF9CVUZGRVJTLCAwLCBzbHJ1X2Rpcl9uYW1lLAotCQkJCSAgdGVzdF9idWZmZXJfdHJhbmNo ZV9pZCwgdGVzdF90cmFuY2hlX2lkLCBTWU5DX0hBTkRMRVJfTk9ORSwKLQkJCQkgIGxvbmdfc2Vn bWVudF9uYW1lcyk7CisJCQkJICB0ZXN0X2J1ZmZlcl90cmFuY2hlX2lkLCB0ZXN0X3RyYW5jaGVf aWQsIFNZTkNfSEFORExFUl9OT05FKTsKIH0KIAogdm9pZAotLSAKMi40Ny4xCgo= --000000000000b3e11a062b0989d8--