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.96) (envelope-from ) id 1w6Q1l-004HdJ-2z for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 09:32:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6Q1k-00DtT7-0F for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 09:32:20 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w6Q1j-00DtSx-1K for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2026 09:32:20 +0000 Received: from mail-dy1-x1334.google.com ([2607:f8b0:4864:20::1334]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6Q1f-00000001TKd-2Q8j for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2026 09:32:18 +0000 Received: by mail-dy1-x1334.google.com with SMTP id 5a478bee46e88-2c1756359c3so50074eec.1 for ; Sat, 28 Mar 2026 02:32:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774690335; cv=none; d=google.com; s=arc-20240605; b=idnkEPm2Thkc6A3C5BXv0uudkLQHY/y0iSwtVaG1Z/mSUItCdOQ0B5rt7BbKr3geDl a44agGssp1h0D949NnjuF2/e1JPKOXuIoT19jAAIiYanfuPcOcS6q5i38e79SM56RfIg i10vsA30MXPwYPeWro9Dy8Z7CaNfTlwhu5KJxsd233GZcn+Mr/5xEIUj1LbGaUW3a5AU DYiHBRSt/+3n0La3esF8AYKtKGq09HWAIVV+flbD/Ag+yvyDphySRlEMdaDMrM81ZCi5 6eZvHt7grH9KxfHxB1vPmh5TGIgw2SX8lHyvzLkHnSDWIlhiQV2xkHTRQ2EZRft/bPHh 0NPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=WqEfQQ15X1PA8lryBwBSb3gfoxuHZzOQbvthgPMvW3s=; fh=vUyP1UVtPtub3uyVJ3+QqiQaz3kuzwQGWAIAjEQbabE=; b=J4OuFzULpi30JTHjYR/xNlxY0ZVuuTAt3gKY44WHM1M2tuPOZ2tTXomF5t8WMkhc/1 IJOa/yqEpNCb2eGpGFTu/NMX3OxNw7/GH1RD0JveYPsC64UwtPErNVAcRKiBuB+PfehV dBDD/+HMLrtvZpgdA4jOgRmDKieCsvBrDWHbimSMBFUBmWoGXNp5MfqW559wVoQ3D3uq AHsyEu8YaZaEBwDZ8O8nhaj7GQEotntph3vYu6/yn2Tddf5FJlA0Koz/3IHHozCbbzTE XVM5So/uDX903/CjL99ZaL4C6/QTbgzQeFIahM2EdbM9WrB9NEaYSph7CdfG4JSJefCN qg1A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774690335; x=1775295135; 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=WqEfQQ15X1PA8lryBwBSb3gfoxuHZzOQbvthgPMvW3s=; b=llmew+99dol+5chkDBFK/IhoqVIC4rAWARoao3CequUxZO9aS/siZz6syKw2bIpWiP Y1wGbwaBIGkUzzGyJfeUNj1x+bulc5yzKNGqRgKmE6CCK5LtMxEy3GT6COmbDdVvewhn ISJr1wctdqxhY6EHuJV86xOCe5fqro8cKY2U8o5NzpezaP1vFyBqzOmwTPkwKBbeO2m8 OBkG8Tca6H1YxNf3PClEUpChe/caDUvlWYC18YY9YHU4Pvir2w5Xg4xsr59/QYU6mabH 5VuiS3KYxiJ0CPsdbNjtIWz3nLY8pdqy0jnuGU6kROWnjQVhBbZLyGd62Il4eK5B8Z6b kUQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774690335; x=1775295135; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=WqEfQQ15X1PA8lryBwBSb3gfoxuHZzOQbvthgPMvW3s=; b=YCqKLDZlfvU+ClqkFnpwaOfzlshnYPLkQLi3OiNyqTsWTBdoU5N/RphIRw8u1o6xk8 7SsOnHqkLPRTzJWAjiHhD1l3S1IxdGEtRCbHc+DUxmYzZWp8nKf+175Rjfmt3goGb2gt 9mfOlqXHQrfxAUDqp0us5DBetK7bcvZnHrWoZvTx3nFH4K6PrVJI8vvtwo1cBg/hDt2d I/APto0dhbzXfxEZIz868QErTxxiDH2HWTqiWouUVXtImojeU7kVOCJCnn7zea/DsWQE fMjT/p6UcASK4zyLwz3jrzuwZuqADdaOZxjk0C0utzFlR/sjkGYAnVRxSNx8g114mNdp wnDg== X-Gm-Message-State: AOJu0YxkarE9e3AJ2XxQZvwOMGxwg8FZbVxd7yD1vpN8EOONmsN4PDFY urssKdhDWew9eqc/pX3DAGnJdXKttCtkU447J90haKW+RxwMh4IAEma5qzbOHe84ffeL0YIMeQw xVM1nUYm96YSUEoYL5MKkquRb0rLw65o= X-Gm-Gg: ATEYQzxbvdnf861qA1yBAYewGp2Cnu/uvTAV5SupqPNDB4rWKkjRi9i6Pkr52VWoijp 7aVrWpSo5VXuQ7VMFHB2eLTTDz+FZdn1/CJiMBCp+XHdUsrSlvWhHeve8hWE6jAdwdJqpeWR6oF 8HvDixYKgCupVRe3wV2YZSEiu85cf0beh+NJL5AY64tXnYKSwXWlzMVaFeQ4cJDipPIhgOhrwx7 zHEWi1bSfbJQmzP3hd//vaPdr2rpEOGEm83kd9Q+MUes89CNEOftVD0E6zRmvAA2VAg5Xaa8rW1 rol1VgTvJkTGwwb7h2INIIFYN1Vnk5XA5+5NXsYvBzcO1DL4OlsIh/+J9QYzGUV+ X-Received: by 2002:a05:7300:3254:b0:2be:1946:858b with SMTP id 5a478bee46e88-2c185e6b478mr1299439eec.3.1774690334503; Sat, 28 Mar 2026 02:32:14 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Thomas Munro Date: Sat, 28 Mar 2026 22:31:36 +1300 X-Gm-Features: AQROBzAMGdyC8SyqkweXPGqN6YxEAQmYZJYZ692kbVkWDKoevpZehIJGEOrFSms Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fa1a66064e124aa6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fa1a66064e124aa6 Content-Type: text/plain; charset="UTF-8" Here is a rebase. I would like to push these shortly if there are no objections. I propose 8 as the default upper limit. --000000000000fa1a66064e124aa6 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-aio-Simplify-pgaio_worker_submit.patch" Content-Disposition: attachment; filename="v3-0001-aio-Simplify-pgaio_worker_submit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mna4ow7i0 RnJvbSBlYTY3ODA3ZjdiYTMyZjAyOTQzYTc4ZjJhMTVlMjA3NDhkZjRkZDE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMTggTWFyIDIwMjYgMTY6NTQ6MzQgKzEzMDAKU3ViamVjdDogW1BBVENIIHYz IDEvM10gYWlvOiBTaW1wbGlmeSBwZ2Fpb193b3JrZXJfc3VibWl0KCkuCgpSZW5hbWUgcGdhaW9f d29ya2VyX3N1Ym1pdF9pbnRlcm5hbCgpIHRvIHBnYWlvX3dvcmtlcl9zdWJtaXQoKS4gIFRoZQpl eHRyYSB3cmFwcGVyIGRpZG4ndCBzZXJ2ZSBhbnkgdXNlZnVsIHB1cnBvc2UuCi0tLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIHwgMjAgKysrKystLS0tLS0tLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwppbmRleCBlZmUzOGU5ZjExMy4uZTI0 MzU3YTdhMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3Jr ZXIuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKQEAgLTIz OSw4ICsyMzksOCBAQCBwZ2Fpb193b3JrZXJfbmVlZHNfc3luY2hyb25vdXNfZXhlY3V0aW9uKFBn QWlvSGFuZGxlICppb2gpCiAJCXx8ICFwZ2Fpb19pb19jYW5fcmVvcGVuKGlvaCk7CiB9CiAKLXN0 YXRpYyB2b2lkCi1wZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBudW1fc3RhZ2VkX2lv cywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQorc3RhdGljIGludAorcGdhaW9fd29ya2VyX3N1 Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIHsK IAlQZ0Fpb0hhbmRsZSAqKnN5bmNocm9ub3VzX2lvcyA9IE5VTEw7CiAJaW50CQkJbnN5bmMgPSAw OwpAQCAtMjQ5LDYgKzI0OSw5IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXRfaW50ZXJuYWwoaW50IG51 bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiAKIAlBc3NlcnQobnVtX3N0 YWdlZF9pb3MgPD0gUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwogCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBudW1fc3RhZ2VkX2lvczsgaSsrKQorCQlwZ2Fpb19pb19wcmVwYXJlX3N1Ym1pdChzdGFn ZWRfaW9zW2ldKTsKKwogCWlmIChMV0xvY2tDb25kaXRpb25hbEFjcXVpcmUoQWlvV29ya2VyU3Vi bWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKSkKIAl7CiAJCWZvciAoaW50IGkgPSAwOyBp IDwgbnVtX3N0YWdlZF9pb3M7ICsraSkKQEAgLTI5OSwxOSArMzAyLDYgQEAgcGdhaW9fd29ya2Vy X3N1Ym1pdF9pbnRlcm5hbChpbnQgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2Vk X2lvcykKIAkJCXBnYWlvX2lvX3BlcmZvcm1fc3luY2hyb25vdXNseShzeW5jaHJvbm91c19pb3Nb aV0pOwogCQl9CiAJfQotfQotCi1zdGF0aWMgaW50Ci1wZ2Fpb193b3JrZXJfc3VibWl0KHVpbnQx NiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQotewotCWZvciAoaW50 IGkgPSAwOyBpIDwgbnVtX3N0YWdlZF9pb3M7IGkrKykKLQl7Ci0JCVBnQWlvSGFuZGxlICppb2gg PSBzdGFnZWRfaW9zW2ldOwotCi0JCXBnYWlvX2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7Ci0JfQot Ci0JcGdhaW9fd29ya2VyX3N1Ym1pdF9pbnRlcm5hbChudW1fc3RhZ2VkX2lvcywgc3RhZ2VkX2lv cyk7CiAKIAlyZXR1cm4gbnVtX3N0YWdlZF9pb3M7CiB9Ci0tIAoyLjUzLjAKCg== --000000000000fa1a66064e124aa6 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0002-aio-Improve-I-O-worker-behavior-on-full-queue.patch" Content-Disposition: attachment; filename="v3-0002-aio-Improve-I-O-worker-behavior-on-full-queue.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mna4oyv71 RnJvbSAxYWQ0MWExZjA3MzQzZmQ2NzZlZTdiYjk3NDFkYmY1Mzk4ODlmNTBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTEgQXByIDIwMjUgMjE6MTc6MjYgKzEyMDAKU3ViamVjdDogW1BBVENIIHYz IDIvM10gYWlvOiBJbXByb3ZlIEkvTyB3b3JrZXIgYmVoYXZpb3Igb24gZnVsbCBxdWV1ZS4KClBy ZXZpb3VzbHksIHdoZW4gdGhlIHN1Ym1pc3Npb24gcXVldWUgd2FzIGZ1bGwgd2UnZCBydW4gYWxs IHJlbWFpbmluZwpJT3MgaW4gYSBiYXRjaCBzeW5jaHJvbm91c2x5LiAgTm93IHdlJ2xsIHRyeSBh Z2FpbiBiZXR3ZWVuIHN5bmNocm9ub3VzCm9wZXJhdGlvbnMsIGJlY2F1c2UgdGhlIEkvTyB3b3Jr ZXJzIG1pZ2h0IGhhdmUgZHJhaW5lZCBzb21lIG9mIHRoZQpxdWV1ZS4KClN1Z2dlc3RlZC1ieTog QW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBJTJCaFVLRyUyQm00eFYwTE1vSDJjJTNEb1JBZEVYdUNuaCUyQnRHQlRXYTd1 RmVGTUdnVExBdyUyQlElNDBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL21ldGhvZF93b3JrZXIuYyB8IDI0ICsrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxl IGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4IGUyNDM1N2E3YTBhLi5iMWIwYjY4NDhhMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwpAQCAtMjk1LDExICsyOTUs MjkgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFu ZGxlICoqc3RhZ2VkX2lvcykKIAkJU2V0TGF0Y2god2FrZXVwKTsKIAogCS8qIFJ1biB3aGF0ZXZl ciBpcyBsZWZ0IHN5bmNocm9ub3VzbHkuICovCi0JaWYgKG5zeW5jID4gMCkKKwl3aGlsZSAobnN5 bmMgPiAwKQogCXsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuc3luYzsgKytpKQorCQlwZ2Fpb19p b19wZXJmb3JtX3N5bmNocm9ub3VzbHkoKnN5bmNocm9ub3VzX2lvcysrKTsKKwkJbnN5bmMtLTsK KworCQkvKiBCZXR3ZWVuIHN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHRyeSB0byBlbnF1ZXVlIGFn YWluLiAqLworCQlpZiAobnN5bmMgPiAwKQogCQl7Ci0JCQlwZ2Fpb19pb19wZXJmb3JtX3N5bmNo cm9ub3VzbHkoc3luY2hyb25vdXNfaW9zW2ldKTsKKwkJCXdha2V1cCA9IE5VTEw7CisJCQlpZiAo TFdMb2NrQ29uZGl0aW9uYWxBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExX X0VYQ0xVU0lWRSkpCisJCQl7CisJCQkJd2hpbGUgKG5zeW5jID4gMCAmJgorCQkJCQkgICBwZ2Fp b193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9pbnNlcnQoKnN5bmNocm9ub3VzX2lvcykpCisJCQkJ eworCQkJCQlzeW5jaHJvbm91c19pb3MrKzsKKwkJCQkJbnN5bmMtLTsKKwkJCQkJaWYgKHdha2V1 cCA9PSBOVUxMICYmICh3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoKSkgPj0gMCkK KwkJCQkJCXdha2V1cCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7 CisJCQkJfQorCQkJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7 CisJCQl9CisJCQlpZiAod2FrZXVwKQorCQkJCVNldExhdGNoKHdha2V1cCk7CiAJCX0KIAl9CiAK LS0gCjIuNTMuMAoK --000000000000fa1a66064e124aa6 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0003-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v3-0003-aio-Adjust-I-O-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mna4p2b12 RnJvbSAwZTQ2MTlhNzI0M2M4NWEyZGI5NWE5OTNjYzQ5ZjZlNzBmZjIyNThhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHYz IDMvM10gYWlvOiBBZGp1c3QgSS9PIHdvcmtlciBwb29sIHNpemUgYXV0b21hdGljYWxseS4KClJl cGxhY2UgdGhlIHNpbXBsZSBpb193b3JrZXJzIHNldHRpbmcgd2l0aDoKCiAgaW9fbWluX3dvcmtl cnM9MQogIGlvX21heF93b3JrZXJzPTggKGNhbiBiZSB1cCB0byAzMikKICBpb193b3JrZXJfaWRs ZV90aW1lb3V0PTYwcwogIGlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw9MTAwbXMKClRoZSBwb29s IGlzIGF1dG9tYXRpY2FsbHkgc2l6ZWQgd2l0aGluIHRoZSBjb25maWd1cmVkIHJhbmdlIGFjY29y ZGluZyB0bwpyZWNlbnQgZGVtYW5kLgoKUmV2aWV3ZWQtYnk6IERtaXRyeSBEb2xnb3YgPDllcnRo YWxpb242QGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhV S0clMkJtNHhWMExNb0gyYyUzRG9SQWRFWHVDbmglMkJ0R0JUV2E3dUZlRk1HZ1RMQXclMkJRJTQw bWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgfCAgNjkgKystCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAg ICAgICAgICAgfCAgODcgKystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2Vy LmMgICAgICAgfCA1MTUgKysrKysrKysrKysrKystLS0tCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgIDM0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29y a2VyLmggICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAy X2lvX3dvcmtlcnMucGwgfCAgMTUgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgICB8ICAgMSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA2MDggaW5zZXJ0aW9ucygr KSwgMTMyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dt bCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAyMjlmNDEzNTNlYi4uNGM4YTEzM2Ji NGQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKQEAgLTI4NzAsMTYgKzI4NzAsNzUgQEAgaW5jbHVkZV9kaXIgJ2NvbmYu ZCcKICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX3dvcmtlcnMiPgot ICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1taW4td29ya2VycyIgeHJl ZmxhYmVsPSJpb19taW5fd29ya2VycyI+CisgICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWluX3dv cmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAgICA8aW5kZXh0ZXJt PgotICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5pb193b3JrZXJzPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9f bWluX3dvcmtlcnM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgog ICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAg ICAgICAgIDxwYXJhPgotICAgICAgICAgU2VsZWN0cyB0aGUgbnVtYmVyIG9mIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKLSAgICAgICAgIDMuIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gbnVt YmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAg ICAgIDEuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIDxm aWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIg Y29tbWFuZAorICAgICAgICAgbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4K KyAgICAgICAgIE9ubHkgaGFzIGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8tbWV0 aG9kIi8+IGlzIHNldCB0bworICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4K KyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1tYXgtd29ya2VycyIgeHJlZmxhYmVsPSJp b19tYXhfd29ya2VycyI+CisgICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zh cm5hbWU+ICg8dHlwZT5pbnQ8L3R5cGU+KQorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxw cmltYXJ5Pjx2YXJuYW1lPmlvX21heF93b3JrZXJzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+Cisg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1heGlt dW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMK KyAgICAgICAgIDguIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAg ICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBz ZXJ2ZXIgY29tbWFuZAorICAgICAgICAgbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIE9ubHkgaGFzIGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMt aW8tbWV0aG9kIi8+IGlzIHNldCB0bworICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFs Pi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3Rl bnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXItaWRsZS10aW1lb3V0 IiB4cmVmbGFiZWw9ImlvX3dvcmtlcl9pZGxlX3RpbWVvdXQiPgorICAgICAgIDx0ZXJtPjx2YXJu YW1lPmlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8L3R5cGU+KQor ICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlvX3dvcmtlcl9p ZGxlX3RpbWVvdXQ8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5Pgor ICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0aGUgdGltZSBhZnRlciB3aGljaCBpZGxlIEkv TyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgZXhpdCwgcmVkdWNpbmcgdGhlCisgICAgICAgICBzaXpl IG9mIHBvb2wgd2hlbiBkZW1hbmQgcmVkdWNlcy4gIFRoZSBkZWZhdWx0IGlzIDEgbWludXRlLiAg VGhpcworICAgICAgICAgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAg IDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2 ZXIgY29tbWFuZAorICAgICAgICAgbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFy YT4KKyAgICAgICAgIE9ubHkgaGFzIGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8t bWV0aG9kIi8+IGlzIHNldCB0bworICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4K KyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXItbGF1bmNoLWludGVydmFs IiB4cmVmbGFiZWw9ImlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwiPgorICAgICAgIDx0ZXJtPjx2 YXJuYW1lPmlvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8L3R5 cGU+KQorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlvX3dv cmtlcl9sYXVuY2hfaW50ZXJ2YWw8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9w cmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0aGUgbWluaW11bSB0aW1lIGJl dHdlZW4gbGF1bmNoaW5nIG5ldyBJL08gd29ya2Vycy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZv aWQKKyAgICAgICAgIGNyZWF0aW5nIHRvbyBtYW55IGZvciBhIHNob3J0IGxpdmVkIGJ1cnN0IG9m IGRlbWFuZC4gIFRoZSBkZWZhdWx0IGlzIDEwMG1zLgorICAgICAgICAgVGhpcyBwYXJhbWV0ZXIg Y2FuIG9ubHkgYmUgc2V0IGluIHRoZQogICAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29u ZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kCiAgICAgICAgICBsaW5l LgogICAgICAgICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDNm YWM0NmM0MDJiLi4yZmYyZTQzYzUwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMK QEAgLTQwOCw2ICs0MDgsOCBAQCBzdGF0aWMgRE5TU2VydmljZVJlZiBib25qb3VyX3NkcmVmID0g TlVMTDsKICNlbmRpZgogCiAvKiBTdGF0ZSBmb3IgSU8gd29ya2VyIG1hbmFnZW1lbnQuICovCitz dGF0aWMgVGltZXN0YW1wVHogaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWUgPSAwOworc3RhdGlj IFRpbWVzdGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfbGFzdF90aW1lID0gMDsKIHN0YXRpYyBpbnQJ aW9fd29ya2VyX2NvdW50ID0gMDsKIHN0YXRpYyBQTUNoaWxkICppb193b3JrZXJfY2hpbGRyZW5b TUFYX0lPX1dPUktFUlNdOwogCkBAIC0xNTUwLDEwICsxNTUyLDkgQEAgRGV0ZXJtaW5lU2xlZXBU aW1lKHZvaWQpCiAKIAkvKgogCSAqIE5vcm1hbCBjYXNlOiBlaXRoZXIgdGhlcmUgYXJlIG5vIGJh Y2tncm91bmQgd29ya2VycyBhdCBhbGwsIG9yIHdlJ3JlIGluCi0JICogYSBzaHV0ZG93biBzZXF1 ZW5jZSAoZHVyaW5nIHdoaWNoIHdlIGlnbm9yZSBiZ3dvcmtlcnMgYWx0b2dldGhlcikuCisJICog YSBzaHV0ZG93biBzZXF1ZW5jZS4KIAkgKi8KLQlpZiAoU2h1dGRvd24gPiBOb1NodXRkb3duIHx8 Ci0JCSghU3RhcnRXb3JrZXJOZWVkZWQgJiYgIUhhdmVDcmFzaGVkV29ya2VyKSkKKwlpZiAoU2h1 dGRvd24gPiBOb1NodXRkb3duKQogCXsKIAkJaWYgKEFib3J0U3RhcnRUaW1lICE9IDApCiAJCXsK QEAgLTE1NzMsMTMgKzE1NzQsMTYgQEAgRGV0ZXJtaW5lU2xlZXBUaW1lKHZvaWQpCiAKIAkJCXJl dHVybiBzZWNvbmRzICogMTAwMDsKIAkJfQotCQllbHNlCi0JCQlyZXR1cm4gNjAgKiAxMDAwOwog CX0KIAotCWlmIChTdGFydFdvcmtlck5lZWRlZCkKKwkvKiBIYW5kbGUgYmFja2dyb3VuZCB3b3Jr ZXJzLCB1bmxlc3Mgd2UncmUgc2h1dHRpbmcgZG93bi4gKi8KKwlpZiAoU3RhcnRXb3JrZXJOZWVk ZWQgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAkJcmV0dXJuIDA7CiAKKwkvKiBJZiB3ZSBu ZWVkIGEgbmV3IElPIHdvcmtlciwgZGVmZXIgdW50aWwgbGF1bmNoIGludGVydmFsIGV4cGlyZXMu ICovCisJaWYgKHBnYWlvX3dvcmtlcl90ZXN0X2dyb3coKSAmJiBpb193b3JrZXJfY291bnQgPCBp b19tYXhfd29ya2VycykKKwkJbmV4dF93YWtldXAgPSBpb193b3JrZXJfbGF1bmNoX25leHRfdGlt ZTsKKwogCWlmIChIYXZlQ3Jhc2hlZFdvcmtlcikKIAl7CiAJCWRsaXN0X211dGFibGVfaXRlciBp dGVyOwpAQCAtMzc3Niw2ICszNzgwLDE1IEBAIHByb2Nlc3NfcG1fcG1zaWduYWwodm9pZCkKIAkJ U3RhcnRXb3JrZXJOZWVkZWQgPSB0cnVlOwogCX0KIAorCS8qIFByb2Nlc3MgSU8gd29ya2VyIHN0 YXJ0IHJlcXVlc3RzLiAqLworCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfSU9f V09SS0VSX0dST1cpKQorCXsKKwkJLyoKKwkJICogTm8gbG9jYWwgZmxhZywgYXMgdGhlIHN0YXRl IGlzIGV4cG9zZWQgdGhyb3VnaCBwZ2Fpb193b3JrZXJfKigpCisJCSAqIGZ1bmN0aW9ucy4gIFRo aXMgc2lnbmFsIGlzIHJlY2VpdmVkIG9uIHBvdGVudGlhbGx5IGFjdGlvbmFibGUgbGV2ZWwKKwkJ ICogY2hhbmdlcywgc28gdGhhdCBtYXliZV9hZGp1c3RfaW9fd29ya2VycygpIHdpbGwgcnVuLgor CQkgKi8KKwl9CiAJLyogUHJvY2VzcyBiYWNrZ3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2VzLiAq LwogCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJf Q0hBTkdFKSkKIAl7CkBAIC00MzgwLDggKzQzOTMsOSBAQCBtYXliZV9yZWFwX2lvX3dvcmtlcihp bnQgcGlkKQogLyoKICAqIFN0YXJ0IG9yIHN0b3AgSU8gd29ya2VycywgdG8gY2xvc2UgdGhlIGdh cCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcnVubmluZwogICogd29ya2VycyBhbmQgdGhlIG51bWJl ciBvZiBjb25maWd1cmVkIHdvcmtlcnMuICBVc2VkIHRvIHJlc3BvbmQgdG8gY2hhbmdlIG9mCi0g KiB0aGUgaW9fd29ya2VycyBHVUMgKGJ5IGluY3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlIG51 bWJlciBvZiB3b3JrZXJzKSwgYXMKLSAqIHdlbGwgYXMgd29ya2VycyB0ZXJtaW5hdGluZyBpbiBy ZXNwb25zZSB0byBlcnJvcnMgKGJ5IHN0YXJ0aW5nCisgKiB0aGUgaW9fe21pbixtYXh9X3dvcmtl cnMgR1VDcyAoYnkgaW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZyB0aGUgbnVtYmVyIG9mCisgKiB3 b3JrZXJzKSBhbmQgcmVxdWVzdHMgdG8gc3RhcnQgYSBuZXcgb25lIGR1ZSB0byBzdWJtaXNzaW9u IHF1ZXVlIGJhY2tsb2csCisgKiBhcyB3ZWxsIGFzIHdvcmtlcnMgdGVybWluYXRpbmcgaW4gcmVz cG9uc2UgdG8gZXJyb3JzIChieSBzdGFydGluZwogICogInJlcGxhY2VtZW50IiB3b3JrZXJzKS4K ICAqLwogc3RhdGljIHZvaWQKQEAgLTQ0MTAsMTIgKzQ0MjQsNDcgQEAgbWF5YmVfYWRqdXN0X2lv X3dvcmtlcnModm9pZCkKIAogCUFzc2VydChwbVN0YXRlIDwgUE1fV0FJVF9JT19XT1JLRVJTKTsK IAotCS8qIE5vdCBlbm91Z2ggcnVubmluZz8gKi8KLQl3aGlsZSAoaW9fd29ya2VyX2NvdW50IDwg aW9fd29ya2VycykKKwkvKiBOb3QgZW5vdWdoIHdvcmtlcnMgcnVubmluZz8gKi8KKwl3aGlsZSAo aW9fd29ya2VyX2NvdW50IDwgaW9fbWF4X3dvcmtlcnMpCiAJewogCQlQTUNoaWxkICAgICpjaGls ZDsKIAkJaW50CQkJaTsKIAorCQkvKiBSZXNwZWN0IGxhdW5jaCBpbnRlcnZhbCBhZnRlciBtaW5p bXVtIHBvb2wgaXMgcmVhY2hlZC4gKi8KKwkJaWYgKGlvX3dvcmtlcl9jb3VudCA+PSBpb19taW5f d29ya2VycykKKwkJeworCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OworCisJCQkvKgorCQkJICogU3RpbGwgd2FpdGluZyBmb3IgbGF1bmNoIGludGVydmFsIHRvIGV4 cGlyZSwgb3Igbm8gbGF1bmNoCisJCQkgKiByZXF1ZXN0ZWQ/CisJCQkgKi8KKwkJCWlmIChub3cg PCBpb193b3JrZXJfbGF1bmNoX25leHRfdGltZSB8fAorCQkJCSFwZ2Fpb193b3JrZXJfdGVzdF9h bmRfY2xlYXJfZ3JvdygpKQorCQkJCWJyZWFrOworCisJCQkvKgorCQkJICogQ29tcHV0ZSBuZXh0 IGxhdW5jaCB0aW1lIHJlbGF0aXZlIHRvIHRoZSBleGlzdGluZyB2YWx1ZSwgc28KKwkJCSAqIHRo YXQgdGhlIHBvc3RtYXN0ZXIncyBvdGhlciBkdXRpZXMgYW5kIHRoZSBhZHZhbmNpbmcgY2xvY2sK KwkJCSAqIGRvbid0IHByb2R1Y2UgYW4gaW5hY2N1cmF0ZSBsYXVuY2ggaW50ZXJ2YWwuCisJCQkg Ki8KKwkJCWlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0KKwkJCQlUaW1lc3RhbXBUelBsdXNN aWxsaXNlY29uZHMoaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWUsCisJCQkJCQkJCQkJCWlvX3dv cmtlcl9sYXVuY2hfaW50ZXJ2YWwpOworCisJCQkvKgorCQkJICogSWYgdGhhdCdzIGFscmVhZHkg aW4gdGhlIHBhc3QsIHRoZSBpbnRlcnZhbCBpcyBlaXRoZXIKKwkJCSAqIGltcG9zc2libHkgc2hv cnQgb3Igd2UgcmVjZWl2ZWQgbm8gcmVxdWVzdHMgZm9yIG5ldyB3b3JrZXJzIGZvcgorCQkJICog YSBwZXJpb2QuICBDb21wdXRlIGEgbmV3IGZ1dHVyZSB0aW1lIHJlbGF0aXZlIHRvIHRoZSBsYXN0 CisJCQkgKiBhY3R1YWwgbGF1bmNoIHRpbWUgaW5zdGVhZCwgYW5kIHByb2NlZWQgdG8gbGF1bmNo IGEgd29ya2VyLgorCQkJICovCisJCQlpZiAoaW9fd29ya2VyX2xhdW5jaF9uZXh0X3RpbWUgPD0g bm93KQorCQkJCWlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0KKwkJCQkJVGltZXN0YW1wVHpQ bHVzTWlsbGlzZWNvbmRzKGlvX3dvcmtlcl9sYXVuY2hfbGFzdF90aW1lLAorCQkJCQkJCQkJCQkJ aW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCk7CisJCQlpb193b3JrZXJfbGF1bmNoX2xhc3RfdGlt ZSA9IG5vdzsKKwkJfQorCiAJCS8qIGZpbmQgdW51c2VkIGVudHJ5IGluIGlvX3dvcmtlcl9jaGls ZHJlbiBhcnJheSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKIAkJ ewpAQCAtNDQzNiwxOSArNDQ4NSwxMSBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQog CQkJYnJlYWs7CQkJCS8qIHRyeSBhZ2FpbiBuZXh0IHRpbWUgKi8KIAl9CiAKLQkvKiBUb28gbWFu eSBydW5uaW5nPyAqLwotCWlmIChpb193b3JrZXJfY291bnQgPiBpb193b3JrZXJzKQotCXsKLQkJ LyogYXNrIHRoZSBJTyB3b3JrZXIgaW4gdGhlIGhpZ2hlc3Qgc2xvdCB0byBleGl0ICovCi0JCWZv ciAoaW50IGkgPSBNQVhfSU9fV09SS0VSUyAtIDE7IGkgPj0gMDsgLS1pKQotCQl7Ci0JCQlpZiAo aW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5VTEwpCi0JCQl7Ci0JCQkJa2lsbChpb193b3JrZXJf Y2hpbGRyZW5baV0tPnBpZCwgU0lHVVNSMik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9CisJ LyoKKwkgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcnVubmluZyBiZWNhdXNlIGlvX21heF93b3Jr ZXJzIGNoYW5nZWQsIHRoYXQgd2lsbAorCSAqIGJlIGhhbmRsZWQgYnkgdGhlIElPIHdvcmtlcnMg dGhlbXNlbHZlcyBzbyB0aGV5IGNhbiBzaHV0IGRvd24gaW4KKwkgKiBwcmVmZXJyZWQgb3JkZXIu CisJICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9k X3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4 IGIxYjBiNjg0OGEwLi5lNGQzMzQ4ZTk4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vbWV0aG9kX3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhv ZF93b3JrZXIuYwpAQCAtMTEsOSArMTEsOCBAQAogICogaW5mcmFzdHJ1Y3R1cmUgZm9yIHJlb3Bl bmluZyB0aGUgZmlsZSwgYW5kIG11c3QgcHJvY2Vzc2VkIHN5bmNocm9ub3VzbHkgYnkKICAqIHRo ZSBjbGllbnQgY29kZSB3aGVuIHN1Ym1pdHRlZC4KICAqCi0gKiBTbyB0aGF0IHRoZSBzdWJtaXR0 ZXIgY2FuIG1ha2UganVzdCBvbmUgc3lzdGVtIGNhbGwgd2hlbiBzdWJtaXR0aW5nIGEgYmF0Y2gK LSAqIG9mIElPcywgd2FrZXVwcyAiZmFuIG91dCI7IGVhY2ggd29rZW4gSU8gd29ya2VyIGNhbiB3 YWtlIHR3byBtb3JlLiBYWFggVGhpcwotICogY291bGQgYmUgaW1wcm92ZWQgYnkgdXNpbmcgZnV0 ZXhlcyBpbnN0ZWFkIG9mIGxhdGNoZXMgdG8gd2FrZSBOIHdhaXRlcnMuCisgKiBUaGUgcG9vbCB0 cmllcyB0byBzdGFiaWxpemUgYXQgYSBzaXplIHRoYXQgY2FuIGhhbmRsZSByZWNlbnRseSBzZWVu CisgKiB2YXJpYXRpb24gaW4gZGVtYW5kLCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgbGltaXRzLgog ICoKICAqIFRoaXMgbWV0aG9kIG9mIEFJTyBpcyBhdmFpbGFibGUgaW4gYWxsIGJ1aWxkcyBvbiBh bGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZAogICogaXMgdGhlIGRlZmF1bHQuCkBAIC0yOSw2ICsy OCw4IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSA8bGltaXRzLmg+CisK ICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKQEAgLTQwLDYgKzQxLDggQEAKICNpbmNsdWRlICJz dG9yYWdlL2lvX3dvcmtlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sYXRjaC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUg InRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKQEAg LTQ3LDEwICs1MCwxMSBAQAogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUg InV0aWxzL3dhaXRfZXZlbnQuaCIKIAorLyogU2F0dXJhdGlvbiBmb3Igc3RhdHMgY291bnRlcnMg dXNlZCB0byBlc3RpbWF0ZSB3YWtldXA6d29yayByYXRpby4gKi8KKyNkZWZpbmUgUEdBSU9fV09S S0VSX1NUQVRTX01BWCA0CiAKLS8qIEhvdyBtYW55IHdvcmtlcnMgc2hvdWxkIGVhY2ggd29ya2Vy IHdha2UgdXAgaWYgbmVlZGVkPyAqLwotI2RlZmluZSBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCAy Ci0KKy8qIERlYnVnZ2luZyBvbmx5OiBzaG93IGFjdGl2aXR5IGFuZCBzdGF0aXN0aWNzIGluIHBz IGNvbW1hbmQgbGluZS4gKi8KKy8qICNkZWZpbmUgUEdBSU9fV09SS0VSX1NIT1dfUFNfSU5GTyAq LwogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQogewpAQCAtNjIs MTcgKzY2LDM3IEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCiAK IHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU2xvdAogewotCUxhdGNoCSAgICpsYXRjaDsKLQli b29sCQlpbl91c2U7CisJUHJvY051bWJlcglwcm9jX251bWJlcjsKIH0gUGdBaW9Xb3JrZXJTbG90 OwogCisvKgorICogU2V0cyBvZiB3b3JrZXIgSURzIGFyZSBoZWxkIGluIGEgc2ltcGxlIGJpdG1h cCwgYWNjZXNzZWQgdGhyb3VnaCBmdW5jdGlvbnMKKyAqIHRoYXQgcHJvdmlkZSBhIG1vcmUgcmVh ZGFibGUgYWJzdHJhY3Rpb24uICBJZiB3ZSB3YW50ZWQgdG8gc3VwcG9ydCBtb3JlCisgKiB3b3Jr ZXJzIHRoYW4gdGhhdCwgdGhlIGNvbnRlbnRpb24gb24gdGhlIHNpbmdsZSBxdWV1ZSB3b3VsZCBz dXJlbHkgZ2V0IHRvbworICogaGlnaCwgc28gd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtdWx0 aXBsZSBwb29scyBpbnN0ZWFkIG9mIHdpZGVuaW5nIHRoaXMuCisgKi8KK3R5cGVkZWYgdWludDY0 IFBnQWlvV29ya2VyU2V0OworCisjZGVmaW5lIFBHQUlPX1dPUktFUl9TRVRfQklUUyAoc2l6ZW9m KFBnQWlvV29ya2VyU2V0KSAqIENIQVJfQklUKQorCitzdGF0aWNfYXNzZXJ0KFBHQUlPX1dPUktF Ul9TRVRfQklUUyA+PSBNQVhfSU9fV09SS0VSUywgInRvbyBzbWFsbCIpOworCiB0eXBlZGVmIHN0 cnVjdCBQZ0Fpb1dvcmtlckNvbnRyb2wKIHsKLQl1aW50NjQJCWlkbGVfd29ya2VyX21hc2s7CisJ LyogU2VlbiBieSBwb3N0bWFzdGVyICovCisJdm9sYXRpbGUgYm9vbCBncm93OworCisJLyogUHJv dGVjdGVkIGJ5IEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2suICovCisJUGdBaW9Xb3JrZXJT ZXQgaWRsZV93b3JrZXJfc2V0OworCisJLyogUHJvdGVjdGVkIGJ5IEFpb1dvcmtlckNvbnRyb2xM b2NrLiAqLworCVBnQWlvV29ya2VyU2V0IHdvcmtlcl9zZXQ7CisJaW50CQkJbndvcmtlcnM7CisK KwkvKiBQcm90ZWN0ZWQgYnkgQWlvV29ya2VyQ29udHJvbExvY2suICovCiAJUGdBaW9Xb3JrZXJT bG90IHdvcmtlcnNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gUGdBaW9Xb3JrZXJDb250cm9s OwogCi0KIHN0YXRpYyBzaXplX3QgcGdhaW9fd29ya2VyX3NobWVtX3NpemUodm9pZCk7CiBzdGF0 aWMgdm9pZCBwZ2Fpb193b3JrZXJfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogCkBAIC05 MCwxNSArMTE0LDEwMyBAQCBjb25zdCBJb01ldGhvZE9wcyBwZ2Fpb193b3JrZXJfb3BzID0gewog CiAKIC8qIEdVQ3MgKi8KLWludAkJCWlvX3dvcmtlcnMgPSAzOworaW50CQkJaW9fbWluX3dvcmtl cnMgPSAxOworaW50CQkJaW9fbWF4X3dvcmtlcnMgPSA4OworaW50CQkJaW9fd29ya2VyX2lkbGVf dGltZW91dCA9IDYwMDAwOworaW50CQkJaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCA9IDEwMDsK IAogCiBzdGF0aWMgaW50CWlvX3dvcmtlcl9xdWV1ZV9zaXplID0gNjQ7Ci1zdGF0aWMgaW50CU15 SW9Xb3JrZXJJZDsKK3N0YXRpYyBpbnQJTXlJb1dvcmtlcklkID0gLTE7CiBzdGF0aWMgUGdBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWUgKmlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogc3RhdGlj IFBnQWlvV29ya2VyQ29udHJvbCAqaW9fd29ya2VyX2NvbnRyb2w7CiAKIAorc3RhdGljIHZvaWQK K3BnYWlvX3dvcmtlcl9zZXRfaW5pdGlhbGl6ZShQZ0Fpb1dvcmtlclNldCAqc2V0KQoreworCSpz ZXQgPSAwOworfQorCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2VyX3NldF9pc19lbXB0eShQZ0Fp b1dvcmtlclNldCAqc2V0KQoreworCXJldHVybiAqc2V0ID09IDA7Cit9CisKK3N0YXRpYyBQZ0Fp b1dvcmtlclNldAorcGdhaW9fd29ya2VyX3NldF9zaW5nbGV0b24oaW50IHdvcmtlcikKK3sKKwly ZXR1cm4gVUlOVDY0X0MoMSkgPDwgd29ya2VyOworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29y a2VyX3NldF9maWxsKFBnQWlvV29ya2VyU2V0ICpzZXQpCit7CisJKnNldCA9IFVJTlQ2NF9NQVgg Pj4gKFBHQUlPX1dPUktFUl9TRVRfQklUUyAtIE1BWF9JT19XT1JLRVJTKTsKK30KKworc3RhdGlj IHZvaWQKK3BnYWlvX3dvcmtlcl9zZXRfc3VidHJhY3QoUGdBaW9Xb3JrZXJTZXQgKnNldDEsIGNv bnN0IFBnQWlvV29ya2VyU2V0ICpzZXQyKQoreworCSpzZXQxICY9IH4qc2V0MjsKK30KKworc3Rh dGljIHZvaWQKK3BnYWlvX3dvcmtlcl9zZXRfaW5zZXJ0KFBnQWlvV29ya2VyU2V0ICpzZXQsIGlu dCB3b3JrZXIpCit7CisJKnNldCB8PSBwZ2Fpb193b3JrZXJfc2V0X3NpbmdsZXRvbih3b3JrZXIp OworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3NldF9yZW1vdmUoUGdBaW9Xb3JrZXJT ZXQgKnNldCwgaW50IHdvcmtlcikKK3sKKwkqc2V0ICY9IH5wZ2Fpb193b3JrZXJfc2V0X3Npbmds ZXRvbih3b3JrZXIpOworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX3NldF9yZW1vdmVf bGVzc190aGFuKFBnQWlvV29ya2VyU2V0ICpzZXQsIGludCB3b3JrZXIpCit7CisJKnNldCAmPSB+ KHBnYWlvX3dvcmtlcl9zZXRfc2luZ2xldG9uKHdvcmtlcikgLSAxKTsKK30KKworc3RhdGljIGlu dAorcGdhaW9fd29ya2VyX3NldF9nZXRfaGlnaGVzdChQZ0Fpb1dvcmtlclNldCAqc2V0KQorewor CUFzc2VydCghcGdhaW9fd29ya2VyX3NldF9pc19lbXB0eShzZXQpKTsKKwlyZXR1cm4gcGdfbGVm dG1vc3Rfb25lX3BvczY0KCpzZXQpOworfQorCitzdGF0aWMgaW50CitwZ2Fpb193b3JrZXJfc2V0 X2dldF9sb3dlc3QoUGdBaW9Xb3JrZXJTZXQgKnNldCkKK3sKKwlBc3NlcnQoIXBnYWlvX3dvcmtl cl9zZXRfaXNfZW1wdHkoc2V0KSk7CisJcmV0dXJuIHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoKnNl dCk7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcl9zZXRfcG9wX2xvd2VzdChQZ0Fpb1dv cmtlclNldCAqc2V0KQoreworCWludAkJCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9zZXRfZ2V0X2xv d2VzdChzZXQpOworCisJcGdhaW9fd29ya2VyX3NldF9yZW1vdmUoc2V0LCB3b3JrZXIpOworCXJl dHVybiB3b3JrZXI7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9v bAorcGdhaW9fd29ya2VyX3NldF9jb250YWlucyhQZ0Fpb1dvcmtlclNldCAqc2V0LCBpbnQgd29y a2VyKQoreworCXJldHVybiAoKnNldCAmIHBnYWlvX3dvcmtlcl9zZXRfc2luZ2xldG9uKHdvcmtl cikpICE9IDA7Cit9CisKK3N0YXRpYyBpbnQKK3BnYWlvX3dvcmtlcl9zZXRfY291bnQoUGdBaW9X b3JrZXJTZXQgKnNldCkKK3sKKwlyZXR1cm4gcGdfcG9wY291bnQ2NCgqc2V0KTsKK30KKyNlbmRp ZgorCiBzdGF0aWMgc2l6ZV90CiBwZ2Fpb193b3JrZXJfcXVldWVfc2htZW1fc2l6ZShpbnQgKnF1 ZXVlX3NpemUpCiB7CkBAIC0xNTEsMzcgKzI2MywxMTMgQEAgcGdhaW9fd29ya2VyX3NobWVtX2lu aXQoYm9vbCBmaXJzdF90aW1lKQogCQkJCQkJJmZvdW5kKTsKIAlpZiAoIWZvdW5kKQogCXsKLQkJ aW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgPSAwOworCQlpb193b3JrZXJfY29u dHJvbC0+Z3JvdyA9IGZhbHNlOworCQlwZ2Fpb193b3JrZXJfc2V0X2luaXRpYWxpemUoJmlvX3dv cmtlcl9jb250cm9sLT53b3JrZXJfc2V0KTsKKwkJcGdhaW9fd29ya2VyX3NldF9pbml0aWFsaXpl KCZpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfc2V0KTsKIAkJZm9yIChpbnQgaSA9IDA7 IGkgPCBNQVhfSU9fV09SS0VSUzsgKytpKQorCQkJaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNb aV0ucHJvY19udW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworCX0KK30KKworc3RhdGljIHZv aWQKK3BnYWlvX3dvcmtlcl9ncm93KGJvb2wgZ3JvdykKK3sKKwkvKgorCSAqIFRoaXMgaXMgY2Fs bGVkIGZyb20gc2l0ZXMgdGhhdCBkb24ndCBob2xkIEFpb1dvcmtlckNvbnRyb2xMb2NrLCBidXQK KwkgKiB0aGVzZSB2YWx1ZXMgY2hhbmdlIGluZnJlcXVlbnRseSBhbmQgYW4gdXAtdG8tZGF0ZSB2 YWx1ZSBpcyBub3QKKwkgKiByZXF1aXJlZCBmb3IgdGhpcyBoZXVyaXN0aWMgcHVycG9zZS4KKwkg Ki8KKwlpZiAoIWdyb3cpCisJeworCQkvKiBBdm9pZCBkaXJ0eWluZyBtZW1vcnkgaWYgbm90IGFs cmVhZHkgc2V0LiAqLworCQlpZiAoaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cpCisJCQlpb193b3Jr ZXJfY29udHJvbC0+Z3JvdyA9IGZhbHNlOworCX0KKwllbHNlCisJeworCQkvKiBEbyBub3RoaW5n IGlmIHJlcXVlc3QgYWxyZWFkeSBwZW5kaW5nLiAqLworCQlpZiAoIWlvX3dvcmtlcl9jb250cm9s LT5ncm93KQogCQl7Ci0JCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCA9IE5V TEw7Ci0JCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKKwkJ CWlvX3dvcmtlcl9jb250cm9sLT5ncm93ID0gdHJ1ZTsKKwkJCVNlbmRQb3N0bWFzdGVyU2lnbmFs KFBNU0lHTkFMX0lPX1dPUktFUl9HUk9XKTsKIAkJfQogCX0KIH0KIAorLyoKKyAqIENhbGxlZCBi eSB0aGUgcG9zdG1hc3RlciB0byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaXMgbmVlZGVkLgorICov Citib29sCitwZ2Fpb193b3JrZXJfdGVzdF9ncm93KHZvaWQpCit7CisJcmV0dXJuIGlvX3dvcmtl cl9jb250cm9sICYmIGlvX3dvcmtlcl9jb250cm9sLT5ncm93OworfQorCisvKgorICogQ2FsbGVk IGJ5IHRoZSBwb3N0bWFzdGVyIHRvIGNoZWNrIGlmIGEgbmV3IHdvcmtlciBpcyBuZWVkZWQgd2hl biBpdCdzIHJlYWR5CisgKiB0byBsYXVuY2ggb25lLCBhbmQgY2xlYXIgdGhlIGZsYWcuCisgKi8K K2Jvb2wKK3BnYWlvX3dvcmtlcl90ZXN0X2FuZF9jbGVhcl9ncm93KHZvaWQpCit7CisJYm9vbAkJ cmVzdWx0OworCisJcmVzdWx0ID0gaW9fd29ya2VyX2NvbnRyb2wtPmdyb3c7CisJaWYgKHJlc3Vs dCkKKwkJaW9fd29ya2VyX2NvbnRyb2wtPmdyb3cgPSBmYWxzZTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKIHN0YXRpYyBpbnQKLXBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSh2b2lkKQorcGdhaW9f d29ya2VyX2Nob29zZV9pZGxlKGludCBtaW5pbXVtX3dvcmtlcikKIHsKKwlQZ0Fpb1dvcmtlclNl dCB3b3JrZXJfc2V0OwogCWludAkJCXdvcmtlcjsKIAotCWlmIChpb193b3JrZXJfY29udHJvbC0+ aWRsZV93b3JrZXJfbWFzayA9PSAwKQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKworCXdvcmtlcl9zZXQg PSBpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfc2V0OworCXBnYWlvX3dvcmtlcl9zZXRf cmVtb3ZlX2xlc3NfdGhhbigmd29ya2VyX3NldCwgbWluaW11bV93b3JrZXIpOworCWlmIChwZ2Fp b193b3JrZXJfc2V0X2lzX2VtcHR5KCZ3b3JrZXJfc2V0KSkKIAkJcmV0dXJuIC0xOwogCi0JLyog RmluZCB0aGUgbG93ZXN0IGJpdCBwb3NpdGlvbiwgYW5kIGNsZWFyIGl0LiAqLwotCXdvcmtlciA9 IHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21h c2spOwotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrICY9IH4oVUlOVDY0X0Mo MSkgPDwgd29ya2VyKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2Vy XS5pbl91c2UpOworCS8qIEZpbmQgdGhlIGxvd2VzdCBudW1iZXJlZCBpZGxlIHdvcmtlciBhbmQg bWFyayBpdCBub3QgaWRsZS4gKi8KKwl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfc2V0X2dldF9sb3dl c3QoJndvcmtlcl9zZXQpOworCXBnYWlvX3dvcmtlcl9zZXRfcmVtb3ZlKCZpb193b3JrZXJfY29u dHJvbC0+aWRsZV93b3JrZXJfc2V0LCB3b3JrZXIpOwogCiAJcmV0dXJuIHdvcmtlcjsKIH0KIAor LyoKKyAqIFRyeSB0byB3YWtlIGEgd29ya2VyIGJ5IHNldHRpbmcgaXRzIGxhdGNoLCB0byB0ZWxs IGl0IHRoZXJlIGFyZSBJT3MgdG8KKyAqIHByb2Nlc3MgaW4gdGhlIHN1Ym1pc3Npb24gcXVldWUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfd2FrZShpbnQgd29ya2VyKQoreworCVBy b2NOdW1iZXIJcHJvY19udW1iZXI7CisKKwkvKgorCSAqIElmIHRoZSBzZWxlY3RlZCB3b3JrZXIg aXMgY29uY3VycmVudGx5IGV4aXRpbmcsIHRoZW4gcGdhaW9fd29ya2VyX2RpZSgpCisJICogaGFk IG5vdCB5ZXQgcmVtb3ZlZCBpdCBhcyBvZiB3aGVuIHdlIHNhdyBpdCBpbiBpZGxlX3dvcmtlcl9z ZXQuICBUaGF0J3MKKwkgKiBPSywgYmVjYXVzZSBpdCB3aWxsIHdha2UgYWxsIHJlbWFpbmluZyB3 b3JrZXJzIHRvIGNsb3NlIHdha2V1cC12cy1leGl0CisJICogcmFjZXM6ICpzb21lb25lKiB3aWxs IHNlZSB0aGUgcXVldWVkIElPLiAgSWYgdGhlcmUgYXJlIG5vIHdvcmtlcnMKKwkgKiBydW5uaW5n LCB0aGUgcG9zdG1hc3RlciB3aWxsIHN0YXJ0IGEgbmV3IG9uZS4KKwkgKi8KKwlwcm9jX251bWJl ciA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY19udW1iZXI7CisJaWYg KHByb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCisJCVNldExhdGNoKCZHZXRQR1By b2NCeU51bWJlcihwcm9jX251bWJlciktPnByb2NMYXRjaCk7Cit9CisKIHN0YXRpYyBib29sCiBw Z2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9pbnNlcnQoUGdBaW9IYW5kbGUgKmlvaCkKIHsK IAlQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSAqcXVldWU7CiAJdWludDMyCQluZXdfaGVhZDsK IAorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVM b2NrLCBMV19FWENMVVNJVkUpKTsKKwogCXF1ZXVlID0gaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVl dWU7CiAJbmV3X2hlYWQgPSAocXVldWUtPmhlYWQgKyAxKSAmIChxdWV1ZS0+c2l6ZSAtIDEpOwog CWlmIChuZXdfaGVhZCA9PSBxdWV1ZS0+dGFpbCkKQEAgLTIwMyw2ICszOTEsOCBAQCBwZ2Fpb193 b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9jb25zdW1lKHZvaWQpCiAJUGdBaW9Xb3JrZXJTdWJtaXNz aW9uUXVldWUgKnF1ZXVlOwogCWludAkJCXJlc3VsdDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlN ZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwog CXF1ZXVlID0gaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWU7CiAJaWYgKHF1ZXVlLT50YWlsID09 IHF1ZXVlLT5oZWFkKQogCQlyZXR1cm4gLTE7CQkJCS8qIGVtcHR5ICovCkBAIC0yMTksNiArNDA5 LDggQEAgcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfZGVwdGgodm9pZCkKIAl1aW50MzIJ CWhlYWQ7CiAJdWludDMyCQl0YWlsOwogCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFp b1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCiAJaGVhZCA9IGlv X3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlLT5oZWFkOwogCXRhaWwgPSBpb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZS0+dGFpbDsKIApAQCAtMjQ0LDggKzQzNiw3IEBAIHBnYWlvX3dvcmtlcl9zdWJt aXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiB7CiAJ UGdBaW9IYW5kbGUgKipzeW5jaHJvbm91c19pb3MgPSBOVUxMOwogCWludAkJCW5zeW5jID0gMDsK LQlMYXRjaAkgICAqd2FrZXVwID0gTlVMTDsKLQlpbnQJCQl3b3JrZXI7CisJaW50CQkJd29ya2Vy ID0gLTE7CiAKIAlBc3NlcnQobnVtX3N0YWdlZF9pb3MgPD0gUEdBSU9fU1VCTUlUX0JBVENIX1NJ WkUpOwogCkBAIC0yNjksMTggKzQ2MCwxMiBAQCBwZ2Fpb193b3JrZXJfc3VibWl0KHVpbnQxNiBu dW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCQkJYnJlYWs7CiAJ CQl9CisJCX0KIAotCQkJaWYgKHdha2V1cCA9PSBOVUxMKQotCQkJewotCQkJCS8qIENob29zZSBh biBpZGxlIHdvcmtlciB0byB3YWtlIHVwIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4gKi8KLQkJCQl3 b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoKTsKLQkJCQlpZiAod29ya2VyID49IDAp Ci0JCQkJCXdha2V1cCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7 Ci0KLQkJCQlwZ2Fpb19kZWJ1Z19pbyhERUJVRzQsIHN0YWdlZF9pb3NbaV0sCi0JCQkJCQkJICAg ImNob29zaW5nIHdvcmtlciAlZCIsCi0JCQkJCQkJICAgd29ya2VyKTsKLQkJCX0KKwkJaWYgKHdv cmtlciA9PSAtMSkKKwkJeworCQkJLyogQ2hvb3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAg aWYgd2UgaGF2ZW4ndCBhbHJlYWR5LiAqLworCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29z ZV9pZGxlKDApOwogCQl9CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVl TG9jayk7CiAJfQpAQCAtMjkxLDggKzQ3NiwxMiBAQCBwZ2Fpb193b3JrZXJfc3VibWl0KHVpbnQx NiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCQluc3luYyA9IG51 bV9zdGFnZWRfaW9zOwogCX0KIAotCWlmICh3YWtldXApCi0JCVNldExhdGNoKHdha2V1cCk7CisJ LyoKKwkgKiBJZiB3ZSBkaWRuJ3QgZmluZCBhIHdvcmtlciB0byB3YWtlIHVwLCB0aGUgZXhpc3Rp bmcgd29ya2VycyB3aWxsCisJICogZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBvb2wgaXMgdG9vIHNt YWxsLgorCSAqLworCWlmICh3b3JrZXIgIT0gLTEpCisJCXBnYWlvX3dvcmtlcl93YWtlKHdvcmtl cik7CiAKIAkvKiBSdW4gd2hhdGV2ZXIgaXMgbGVmdCBzeW5jaHJvbm91c2x5LiAqLwogCXdoaWxl IChuc3luYyA+IDApCkBAIC0zMDMsNyArNDkyLDcgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdCh1aW50 MTYgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAkJLyogQmV0d2Vl biBzeW5jaHJvbm91cyBvcGVyYXRpb25zLCB0cnkgdG8gZW5xdWV1ZSBhZ2Fpbi4gKi8KIAkJaWYg KG5zeW5jID4gMCkKIAkJewotCQkJd2FrZXVwID0gTlVMTDsKKwkJCXdvcmtlciA9IC0xOwogCQkJ aWYgKExXTG9ja0NvbmRpdGlvbmFsQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2Nr LCBMV19FWENMVVNJVkUpKQogCQkJewogCQkJCXdoaWxlIChuc3luYyA+IDAgJiYKQEAgLTMxMSwx MyArNTAwLDEzIEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQ Z0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiAJCQkJewogCQkJCQlzeW5jaHJvbm91c19pb3MrKzsK IAkJCQkJbnN5bmMtLTsKLQkJCQkJaWYgKHdha2V1cCA9PSBOVUxMICYmICh3b3JrZXIgPSBwZ2Fp b193b3JrZXJfY2hvb3NlX2lkbGUoKSkgPj0gMCkKLQkJCQkJCXdha2V1cCA9IGlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW3dvcmtlcl0ubGF0Y2g7CisJCQkJCWlmICh3b3JrZXIgPT0gLTEpCisJ CQkJCQl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoMCk7CiAJCQkJfQogCQkJCUxX TG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiAJCQl9Ci0JCQlpZiAo d2FrZXVwKQotCQkJCVNldExhdGNoKHdha2V1cCk7CisJCQlpZiAod29ya2VyICE9IC0xKQorCQkJ CXBnYWlvX3dvcmtlcl93YWtlKHdvcmtlcik7CiAJCX0KIAl9CiAKQEAgLTMzMSwxNCArNTIwLDI3 IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRs ZSAqKnN0YWdlZF9pb3MpCiBzdGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwg RGF0dW0gYXJnKQogewotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9j aywgTFdfRVhDTFVTSVZFKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJ b1dvcmtlcklkXS5pbl91c2UpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tN eUlvV29ya2VySWRdLmxhdGNoID09IE15TGF0Y2gpOworCVBnQWlvV29ya2VyU2V0IG5vdGlmeV9z ZXQ7CiAKLQlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayAmPSB+KFVJTlQ2NF9D KDEpIDw8IE15SW9Xb3JrZXJJZCk7Ci0JaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dv cmtlcklkXS5pbl91c2UgPSBmYWxzZTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlv V29ya2VySWRdLmxhdGNoID0gTlVMTDsKKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Np b25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJcGdhaW9fd29ya2VyX3NldF9yZW1vdmUoJmlv X3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9zZXQsIE15SW9Xb3JrZXJJZCk7CiAJTFdMb2Nr UmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKKworCUxXTG9ja0FjcXVpcmUo QWlvV29ya2VyQ29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7CisJQXNzZXJ0KGlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIgPT0gTXlQcm9jTnVtYmVy KTsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2NfbnVtYmVy ID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwlBc3NlcnQocGdhaW9fd29ya2VyX3NldF9jb250YWlu cygmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQsIE15SW9Xb3JrZXJJZCkpOworCXBnYWlv X3dvcmtlcl9zZXRfcmVtb3ZlKCZpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldCwgTXlJb1dv cmtlcklkKTsKKwlub3RpZnlfc2V0ID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQ7CisJ QXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2VycyA+IDApOworCWlvX3dvcmtlcl9jb250 cm9sLT5ud29ya2Vycy0tOworCUFzc2VydChwZ2Fpb193b3JrZXJfc2V0X2NvdW50KCZpb193b3Jr ZXJfY29udHJvbC0+d29ya2VyX3NldCkgPT0KKwkJICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3Jr ZXJzKTsKKwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCS8qIE5vdGlm eSBvdGhlciB3b3JrZXJzIG9uIHBvb2wgY2hhbmdlLiAqLworCXdoaWxlICghcGdhaW9fd29ya2Vy X3NldF9pc19lbXB0eSgmbm90aWZ5X3NldCkpCisJCXBnYWlvX3dvcmtlcl93YWtlKHBnYWlvX3dv cmtlcl9zZXRfcG9wX2xvd2VzdCgmbm90aWZ5X3NldCkpOwogfQogCiAvKgpAQCAtMzQ4LDMzICs1 NTAsMzQgQEAgcGdhaW9fd29ya2VyX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogc3RhdGljIHZv aWQKIHBnYWlvX3dvcmtlcl9yZWdpc3Rlcih2b2lkKQogeworCVBnQWlvV29ya2VyU2V0IGZyZWVf d29ya2VyX3NldDsKKwlQZ0Fpb1dvcmtlclNldCBvbGRfd29ya2VyX3NldDsKKwogCU15SW9Xb3Jr ZXJJZCA9IC0xOwogCi0JLyoKLQkgKiBYWFg6IFRoaXMgY291bGQgZG8gd2l0aCBtb3JlIGZpbmUt Z3JhaW5lZCBsb2NraW5nLiBCdXQgaXQncyBhbHNvIG5vdAotCSAqIHZlcnkgY29tbW9uIGZvciB0 aGUgbnVtYmVyIG9mIHdvcmtlcnMgdG8gY2hhbmdlIGF0IHRoZSBtb21lbnQuLi4KLQkgKi8KLQlM V0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJDb250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlw Z2Fpb193b3JrZXJfc2V0X2ZpbGwoJmZyZWVfd29ya2VyX3NldCk7CisJcGdhaW9fd29ya2VyX3Nl dF9zdWJ0cmFjdCgmZnJlZV93b3JrZXJfc2V0LCAmaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9z ZXQpOworCWlmICghcGdhaW9fd29ya2VyX3NldF9pc19lbXB0eSgmZnJlZV93b3JrZXJfc2V0KSkK KwkJTXlJb1dvcmtlcklkID0gcGdhaW9fd29ya2VyX3NldF9nZXRfbG93ZXN0KCZmcmVlX3dvcmtl cl9zZXQpOworCWlmIChNeUlvV29ya2VySWQgPT0gLTEpCisJCWVsb2coRVJST1IsICJjb3VsZG4n dCBmaW5kIGEgZnJlZSB3b3JrZXIgSUQiKTsKIAotCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lP X1dPUktFUlM7ICsraSkKLQl7Ci0JCWlmICghaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0u aW5fdXNlKQotCQl7Ci0JCQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0 Y2ggPT0gTlVMTCk7Ci0JCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0 cnVlOwotCQkJTXlJb1dvcmtlcklkID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UKLQkJCUFz c2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCAhPSBOVUxMKTsKLQl9CisJ QXNzZXJ0KGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1i ZXIgPT0KKwkJICAgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJaW9fd29ya2VyX2NvbnRyb2wtPndv cmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9IE15UHJvY051bWJlcjsKIAotCWlmIChN eUlvV29ya2VySWQgPT0gLTEpCi0JCWVsb2coRVJST1IsICJjb3VsZG4ndCBmaW5kIGEgZnJlZSB3 b3JrZXIgc2xvdCIpOworCW9sZF93b3JrZXJfc2V0ID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtl cl9zZXQ7CisJQXNzZXJ0KCFwZ2Fpb193b3JrZXJfc2V0X2NvbnRhaW5zKCZvbGRfd29ya2VyX3Nl dCwgTXlJb1dvcmtlcklkKSk7CisJcGdhaW9fd29ya2VyX3NldF9pbnNlcnQoJmlvX3dvcmtlcl9j b250cm9sLT53b3JrZXJfc2V0LCBNeUlvV29ya2VySWQpOworCWlvX3dvcmtlcl9jb250cm9sLT5u d29ya2VycysrOworCUFzc2VydChwZ2Fpb193b3JrZXJfc2V0X2NvdW50KCZpb193b3JrZXJfY29u dHJvbC0+d29ya2VyX3NldCkgPT0KKwkJICAgaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzKTsK KwlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKIAotCWlvX3dvcmtlcl9jb250 cm9sLT5pZGxlX3dvcmtlcl9tYXNrIHw9IChVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOwot CWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ubGF0Y2ggPSBNeUxhdGNo OwotCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CisJLyogTm90 aWZ5IG90aGVyIHdvcmtlcnMgb24gcG9vbCBjaGFuZ2UuICovCisJd2hpbGUgKCFwZ2Fpb193b3Jr ZXJfc2V0X2lzX2VtcHR5KCZvbGRfd29ya2VyX3NldCkpCisJCXBnYWlvX3dvcmtlcl93YWtlKHBn YWlvX3dvcmtlcl9zZXRfcG9wX2xvd2VzdCgmb2xkX3dvcmtlcl9zZXQpKTsKIAogCW9uX3NobWVt X2V4aXQocGdhaW9fd29ya2VyX2RpZSwgMCk7CiB9CkBAIC00MDAsMTQgKzYwMyw0NyBAQCBwZ2Fp b193b3JrZXJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCWVycmNvbnRleHQoIkkvTyB3b3Jr ZXIgZXhlY3V0aW5nIEkvTyBvbiBiZWhhbGYgb2YgcHJvY2VzcyAlZCIsIG93bmVyX3BpZCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGlzIGJhY2tlbmQgaXMgYWxsb3dlZCB0byB0aW1lIG91dCwg YW5kIHRodXMgc2hvdWxkIHVzZSBhCisgKiBub24taW5maW5pdGUgc2xlZXAgdGltZS4gIE9ubHkg dGhlIGhpZ2hlc3QtbnVtYmVyZWQgd29ya2VyIGlzIGFsbG93ZWQgdG8KKyAqIHRpbWUgb3V0LCBh bmQgb25seSBpZiB0aGUgcG9vbCBpcyBhYm92ZSBpb19taW5fd29ya2Vycy4gIFNlcmlhbGl6aW5n CisgKiB0aW1lb3V0cyBrZWVwcyBJRHMgaW4gYSByYW5nZSAwLi5OIHdpdGhvdXQgZ2FwcywgYW5k IGF2b2lkcyB1bmRlcnNob290aW5nCisgKiBpb19taW5fd29ya2Vycy4KKyAqCisgKiBUaGUgcmVz dWx0IGlzIG9ubHkgaW5zdGFudGFuZW91c2x5IHRydWUgYW5kIG1heSBiZSB0ZW1wb3JhcmlseSBp bmNvbnNpc3RlbnQKKyAqIGluIGRpZmZlcmVudCB3b3JrZXJzIGFyb3VuZCB0cmFuc2l0aW9ucywg YnV0IGFsbCB3b3JrZXJzIGFyZSB3b2tlbiB1cCBvbgorICogcG9vbCBzaXplIG9yIEdVQyBjaGFu Z2VzIG1ha2luZyB0aGUgcmVzdWx0IGV2ZW50dWFsbHkgY29uc2lzdGVudC4KKyAqLworc3RhdGlj IGJvb2wKK3BnYWlvX3dvcmtlcl9jYW5fdGltZW91dCh2b2lkKQoreworCVBnQWlvV29ya2VyU2V0 IHdvcmtlcl9zZXQ7CisKKwkvKiBTZXJpYWxpemUgYWdhaW5zdCBwb29sIHNpemUgY2hhbmdlcy4g Ki8KKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCXdv cmtlcl9zZXQgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldDsKKwlMV0xvY2tSZWxlYXNl KEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCWlmIChNeUlvV29ya2VySWQgIT0gcGdhaW9fd29y a2VyX3NldF9nZXRfaGlnaGVzdCgmd29ya2VyX3NldCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAo TXlJb1dvcmtlcklkIDwgaW9fbWluX3dvcmtlcnMpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCiB2b2lkCiBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9i dWY7CisJVGltZXN0YW1wVHogaWRsZV90aW1lb3V0X2FicyA9IDA7CisJaW50CQkJdGltZW91dF9n dWNfdXNlZCA9IDA7CiAJUGdBaW9IYW5kbGUgKnZvbGF0aWxlIGVycm9yX2lvaCA9IE5VTEw7CiAJ RXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2sgPSB7MH07CiAJdm9sYXRpbGUgaW50IGVy cm9yX2Vycm5vID0gMDsKIAljaGFyCQljbWRbMTI4XTsKKwlpbnQJCQlpb3MgPSAwOworCWludAkJ CXdha2V1cHMgPSAwOwogCiAJQXV4aWxpYXJ5UHJvY2Vzc01haW5Db21tb24oKTsKIApAQCAtNDc1 LDEwICs3MTEsOSBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXpl X3Qgc3RhcnR1cF9kYXRhX2xlbikKIAl3aGlsZSAoIVNodXRkb3duUmVxdWVzdFBlbmRpbmcpCiAJ ewogCQl1aW50MzIJCWlvX2luZGV4OwotCQlMYXRjaAkgICAqbGF0Y2hlc1tJT19XT1JLRVJfV0FL RVVQX0ZBTk9VVF07Ci0JCWludAkJCW5sYXRjaGVzID0gMDsKLQkJaW50CQkJbndha2V1cHMgPSAw OwotCQlpbnQJCQl3b3JrZXI7CisJCWludAkJCXdvcmtlciA9IC0xOworCQlpbnQJCQlxdWV1ZV9k ZXB0aCA9IDA7CisJCWJvb2wJCWdyb3cgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUcnkgdG8gZ2V0 IGEgam9iIHRvIGRvLgpAQCAtNDg5LDM4ICs3MjQsNTUgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZv aWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCUxXTG9ja0FjcXVp cmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJaWYgKChp b19pbmRleCA9IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2NvbnN1bWUoKSkgPT0gLTEp CiAJCXsKLQkJCS8qCi0JCQkgKiBOb3RoaW5nIHRvIGRvLiAgTWFyayBzZWxmIGlkbGUuCi0JCQkg KgotCQkJICogWFhYOiBJbnZlbnQgc29tZSBraW5kIG9mIGJhY2sgcHJlc3N1cmUgdG8gcmVkdWNl IHVzZWxlc3MKLQkJCSAqIHdha2V1cHM/Ci0JCQkgKi8KLQkJCWlvX3dvcmtlcl9jb250cm9sLT5p ZGxlX3dvcmtlcl9tYXNrIHw9IChVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOworCQkJLyog Tm90aGluZyB0byBkby4gIE1hcmsgc2VsZiBpZGxlLiAqLworCQkJcGdhaW9fd29ya2VyX3NldF9p bnNlcnQoJmlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9zZXQsCisJCQkJCQkJCQlNeUlv V29ya2VySWQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogR290IG9uZS4gIENsZWFyIGlkbGUg ZmxhZy4gKi8KLQkJCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrICY9IH4oVUlO VDY0X0MoMSkgPDwgTXlJb1dvcmtlcklkKTsKKwkJCXBnYWlvX3dvcmtlcl9zZXRfcmVtb3ZlKCZp b193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfc2V0LAorCQkJCQkJCQkJTXlJb1dvcmtlcklk KTsKIAotCQkJLyogU2VlIGlmIHdlIGNhbiB3YWtlIHVwIHNvbWUgcGVlcnMuICovCi0JCQlud2Fr ZXVwcyA9IE1pbihwZ2Fpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9kZXB0aCgpLAotCQkJCQkJ ICAgSU9fV09SS0VSX1dBS0VVUF9GQU5PVVQpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBud2Fr ZXVwczsgKytpKQorCQkJLyoKKwkJCSAqIFNlZSBpZiB3ZSBzaG91bGQgd2FrZSB1cCBhIGhpZ2hl ciBudW1iZXJlZCBwZWVyLiAgT25seSBkbyB0aGlzCisJCQkgKiBpZiB0aGlzIHdvcmtlciBpcyBp dHNlbGYgbm90IHJlY2VpdmluZyBzcHVyaW91cyB3YWtldXBzLiAgVGhpcworCQkJICogaGV1cmlz dGljIGRpc2NvdmVycyB0aGUgdXNlZnVsIHdha2V1cCBwcm9wYWdhdGlvbiBjaGFpbiBsZW5ndGgu CisJCQkgKi8KKwkJCWlmICh3YWtldXBzIDw9IGlvcykKIAkJCXsKLQkJCQlpZiAoKHdvcmtlciA9 IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpKSA8IDApCi0JCQkJCWJyZWFrOwotCQkJCWxhdGNo ZXNbbmxhdGNoZXMrK10gPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLmxhdGNo OworCQkJCXF1ZXVlX2RlcHRoID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfZGVwdGgo KTsKKwkJCQl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoTXlJb1dvcmtlcklkICsg MSk7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIHdlcmUgbm8gaWRsZSBoaWdoZXIgbnVtYmVy ZWQgcGVlcnMgYW5kIHRoZXJlIGFyZQorCQkJCSAqIG1vcmUgdGhhbiBlbm91Z2ggSU9zIHF1ZXVl ZCBmb3IgbWUgYW5kIGFsbCBsb3dlciBudW1iZXJlZAorCQkJCSAqIHBlZXJzLCB0aGVuIHRyeSB0 byBzdGFydCBhIG5ldyB3b3JrZXIuCisJCQkJICovCisJCQkJaWYgKHdvcmtlciA9PSAtMSAmJiBx dWV1ZV9kZXB0aCA+IE15SW9Xb3JrZXJJZCkKKwkJCQkJZ3JvdyA9IHRydWU7CiAJCQl9CiAJCX0K IAkJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKIAotCQlmb3Ig KGludCBpID0gMDsgaSA8IG5sYXRjaGVzOyArK2kpCi0JCQlTZXRMYXRjaChsYXRjaGVzW2ldKTsK KwkJLyogUHJvcGFnYXRlIHdha2V1cHMuICovCisJCWlmICh3b3JrZXIgIT0gLTEpCisJCQlwZ2Fp b193b3JrZXJfd2FrZSh3b3JrZXIpOworCQllbHNlIGlmIChncm93KQorCQkJcGdhaW9fd29ya2Vy X2dyb3codHJ1ZSk7CiAKIAkJaWYgKGlvX2luZGV4ICE9IC0xKQogCQl7CiAJCQlQZ0Fpb0hhbmRs ZSAqaW9oID0gTlVMTDsKIAorCQkJLyogQ2FuY2VsIHRpbWVvdXQgYW5kIHVwZGF0ZSB3YWtldXA6 d29yayByYXRpby4gKi8KKwkJCWlkbGVfdGltZW91dF9hYnMgPSAwOworCQkJaWYgKCsraW9zID09 IFBHQUlPX1dPUktFUl9TVEFUU19NQVgpCisJCQl7CisJCQkJaW9zIC89IDI7CisJCQkJd2FrZXVw cyAvPSAyOworCQkJfQorCiAJCQlpb2ggPSAmcGdhaW9fY3RsLT5pb19oYW5kbGVzW2lvX2luZGV4 XTsKIAkJCWVycm9yX2lvaCA9IGlvaDsKIAkJCWVycmNhbGxiYWNrLmFyZyA9IGlvaDsKQEAgLTU3 Myw2ICs4MjUsMTQgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQl9CiAjZW5kaWYKIAorI2lmZGVmIFBHQUlPX1dPUktF Ul9TSE9XX1BTX0lORk8KKwkJCXNwcmludGYoY21kLCAiJWQ6IFslc10gJXMiLAorCQkJCQlNeUlv V29ya2VySWQsCisJCQkJCXBnYWlvX2lvX2dldF9vcF9uYW1lKGlvaCksCisJCQkJCXBnYWlvX2lv X2dldF90YXJnZXRfZGVzY3JpcHRpb24oaW9oKSk7CisJCQlzZXRfcHNfZGlzcGxheShjbWQpOwor I2VuZGlmCisKIAkJCS8qCiAJCQkgKiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBldmVyIGZhaWwg d2l0aCBFUlJPUiBvciBGQVRBTCwgbm8gbmVlZAogCQkJICogdG8ga2VlcCBlcnJvcl9pb2ggc2V0 IHRvIHRoZSBJTy4KQEAgLTU4Niw4ICs4NDYsNzUgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZvaWQg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCX0KIAkJZWxzZQogCQl7 Ci0JCQlXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwgLTEsCi0JCQkJCSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTik7CisJCQlpbnQJCQl0aW1l b3V0X21zOworCisJCQkvKiBDYW5jZWwgbmV3IHdvcmtlciBpZiBwZW5kaW5nLiAqLworCQkJcGdh aW9fd29ya2VyX2dyb3coZmFsc2UpOworCisJCQkvKiBDb21wdXRlIHRoZSByZW1haW5pbmcgYWxs b3dlZCBpZGxlIHRpbWUuICovCisJCQlpZiAoaW9fd29ya2VyX2lkbGVfdGltZW91dCA9PSAtMSkK KwkJCXsKKwkJCQkvKiBOZXZlciB0aW1lIG91dC4gKi8KKwkJCQl0aW1lb3V0X21zID0gLTE7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJVGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOworCisJCQkJLyogSWYgdGhlIEdVQyBjaGFuZ2VzLCByZXNldCB0aW1lci4gKi8KKwkJ CQlpZiAoaWRsZV90aW1lb3V0X2FicyAhPSAwICYmCisJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVv dXQgIT0gdGltZW91dF9ndWNfdXNlZCkKKwkJCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisKKwkJ CQkvKiBPbiBmaXJzdCBzbGVlcCwgY29tcHV0ZSBhYnNvbHV0ZSB0aW1lb3V0LiAqLworCQkJCWlm IChpZGxlX3RpbWVvdXRfYWJzID09IDApCisJCQkJeworCQkJCQlpZGxlX3RpbWVvdXRfYWJzID0K KwkJCQkJCVRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhub3csCisJCQkJCQkJCQkJCQkJaW9f d29ya2VyX2lkbGVfdGltZW91dCk7CisJCQkJCXRpbWVvdXRfZ3VjX3VzZWQgPSBpb193b3JrZXJf aWRsZV90aW1lb3V0OworCQkJCX0KKworCQkJCS8qCisJCQkJICogQWxsIHdvcmtlcnMgbWFpbnRh aW4gdGhlIGFic29sdXRlIHRpbWVvdXQgdmFsdWUsIGJ1dCBvbmx5CisJCQkJICogdGhlIGhpZ2hl c3Qgd29ya2VyIGNhbiBhY3R1YWxseSB0aW1lIG91dCBhbmQgb25seSBpZgorCQkJCSAqIGlvX21p bl93b3JrZXJzIGlzIHNhdGlzZmllZC4gIEFsbCBvdGhlcnMgd2FpdCBvbmx5IGZvcgorCQkJCSAq IGV4cGxpY2l0IHdha2V1cHMgY2F1c2VkIGJ5IHF1ZXVlIGluc2VydGlvbiwgd2FrZXVwCisJCQkJ ICogcHJvcGFnYXRpb24sIGNoYW5nZSBvZiBwb29sIHNpemUgKHBvc3NpYmx5IHByb21vdGluZyBv bmUgdG8KKwkJCQkgKiBuZXcgaGlnaGVzdCkgb3IgR1VDIHJlbG9hZC4KKwkJCQkgKi8KKwkJCQlp ZiAocGdhaW9fd29ya2VyX2Nhbl90aW1lb3V0KCkpCisJCQkJCXRpbWVvdXRfbXMgPQorCQkJCQkJ VGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25kcyhub3csCisJCQkJCQkJCQkJCQkJCWlkbGVf dGltZW91dF9hYnMpOworCQkJCWVsc2UKKwkJCQkJdGltZW91dF9tcyA9IC0xOworCQkJfQorCisj aWZkZWYgUEdBSU9fV09SS0VSX1NIT1dfUFNfSU5GTworCQkJc3ByaW50ZihjbWQsICIlZDogaWRs ZSwgaW9zOndha2V1cHMgPSAlZDolZCIsCisJCQkJCU15SW9Xb3JrZXJJZCwgaW9zLCB3YWtldXBz KTsKKwkJCXNldF9wc19kaXNwbGF5KGNtZCk7CisjZW5kaWYKKworCQkJaWYgKFdhaXRMYXRjaChN eUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwK KwkJCQkJCSAgdGltZW91dF9tcywKKwkJCQkJCSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTikg PT0gV0xfVElNRU9VVCkKKwkJCXsKKwkJCQkvKiBXTF9USU1FT1VUICovCisJCQkJaWYgKHBnYWlv X3dvcmtlcl9jYW5fdGltZW91dCgpKQorCQkJCQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49 IGlkbGVfdGltZW91dF9hYnMpCisJCQkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJ CQkvKiBXTF9MQVRDSF9TRVQgKi8KKwkJCQlpZiAoKyt3YWtldXBzID09IFBHQUlPX1dPUktFUl9T VEFUU19NQVgpCisJCQkJeworCQkJCQlpb3MgLz0gMjsKKwkJCQkJd2FrZXVwcyAvPSAyOworCQkJ CX0KKwkJCX0KIAkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CiAJCX0KIApAQCAtNTk3LDYgKzkyNCwx MCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1 cF9kYXRhX2xlbikKIAkJewogCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJv Y2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlvX21heF93b3JrZXJzIGhh cyBiZWVuIGRlY3JlYXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15SW9Xb3Jr ZXJJZCA+PSBpb19tYXhfd29ya2VycykKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA2YmU4MGQy ZGFhZC4uNWI1OGY0NWUxOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjUsNiArMzY1LDcgQEAgU2VyaWFsQ29udHJvbAkiV2Fp dGluZyB0byByZWFkIG9yIHVwZGF0ZSBzaGFyZWQgPGZpbGVuYW1lPnBnX3NlcmlhbDwvZmlsZW5h bWU+IHMKIEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQkiV2FpdGluZyB0byBhY2Nlc3MgQUlPIHdv cmtlciBzdWJtaXNzaW9uIHF1ZXVlLiIKIFdhaXRMU04JIldhaXRpbmcgdG8gcmVhZCBvciB1cGRh dGUgc2hhcmVkIFdhaXQtZm9yLUxTTiBzdGF0ZS4iCiBMb2dpY2FsRGVjb2RpbmdDb250cm9sCSJX YWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIGxvZ2ljYWwgZGVjb2Rpbmcgc3RhdHVzIGluZm9ybWF0 aW9uLiIKK0Fpb1dvcmtlckNvbnRyb2wJIldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3b3JrZXIgaW5m b3JtYXRpb24uIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBDSEFO R0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApp bmRleCAwYTg2MjY5M2ZjZC4uOTMwMWY3ZjgwNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xMzgxLDYgKzEzODEsMTQgQEAKICAgY2hlY2tfaG9vayA9 PiAnY2hlY2tfaW9fbWF4X2NvbmN1cnJlbmN5JywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fbWF4X3dv cmtlcnMnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3JvdXAgPT4g J1JFU09VUkNFU19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01heGltdW0gbnVtYmVyIG9mIEkvTyB3 b3JrZXIgcHJvY2Vzc2VzLCBmb3IgaW9fbWV0aG9kPXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAn aW9fbWF4X3dvcmtlcnMnLAorICBib290X3ZhbCA9PiAnOCcsCisgIG1pbiA9PiAnMScsCisgIG1h eCA9PiAnTUFYX0lPX1dPUktFUlMnLAorfSwKKwogeyBuYW1lID0+ICdpb19tZXRob2QnLCB0eXBl ID0+ICdlbnVtJywgY29udGV4dCA9PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnUkVTT1VS Q0VTX0lPJywKICAgc2hvcnRfZGVzYyA9PiAnU2VsZWN0cyB0aGUgbWV0aG9kIGZvciBleGVjdXRp bmcgYXN5bmNocm9ub3VzIEkvTy4nLAogICB2YXJpYWJsZSA9PiAnaW9fbWV0aG9kJywKQEAgLTEz ODksMTQgKzEzOTcsMzIgQEAKICAgYXNzaWduX2hvb2sgPT4gJ2Fzc2lnbl9pb19tZXRob2QnLAog fSwKIAoteyBuYW1lID0+ICdpb193b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAn UEdDX1NJR0hVUCcsIGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAotICBzaG9ydF9kZXNjID0+ICdO dW1iZXIgb2YgSU8gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKLSAg dmFyaWFibGUgPT4gJ2lvX3dvcmtlcnMnLAotICBib290X3ZhbCA9PiAnMycsCit7IG5hbWUgPT4g J2lvX21pbl93b3JrZXJzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1NJR0hVUCcs IGdyb3VwID0+ICdSRVNPVVJDRVNfSU8nLAorICBzaG9ydF9kZXNjID0+ICdNaW5pbXVtIG51bWJl ciBvZiBJL08gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIuJywKKyAgdmFy aWFibGUgPT4gJ2lvX21pbl93b3JrZXJzJywKKyAgYm9vdF92YWwgPT4gJzEnLAogICBtaW4gPT4g JzEnLAogICBtYXggPT4gJ01BWF9JT19XT1JLRVJTJywKIH0sCiAKK3sgbmFtZSA9PiAnaW9fd29y a2VyX2lkbGVfdGltZW91dCcsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19TSUdIVVAn LCBncm91cCA9PiAnUkVTT1VSQ0VTX0lPJywKKyAgc2hvcnRfZGVzYyA9PiAnTWF4aW11bSB0aW1l IGJlZm9yZSBpZGxlIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRpbWUgb3V0LCBmb3IgaW9fbWV0aG9k PXdvcmtlci4nLAorICB2YXJpYWJsZSA9PiAnaW9fd29ya2VyX2lkbGVfdGltZW91dCcsCisgIGZs YWdzID0+ICdHVUNfVU5JVF9NUycsCisgIGJvb3RfdmFsID0+ICc2MDAwMCcsCisgIG1pbiA9PiAn MCcsCisgIG1heCA9PiAnSU5UX01BWCcsCit9LAorCit7IG5hbWUgPT4gJ2lvX3dvcmtlcl9sYXVu Y2hfaW50ZXJ2YWwnLCB0eXBlID0+ICdpbnQnLCBjb250ZXh0ID0+ICdQR0NfU0lHSFVQJywgZ3Jv dXAgPT4gJ1JFU09VUkNFU19JTycsCisgIHNob3J0X2Rlc2MgPT4gJ01pbmltdW0gdGltZSBiZWZv cmUgbGF1bmNoaW5nIGEgbmV3IEkvTyB3b3JrZXIgcHJvY2VzcywgZm9yIGlvX21ldGhvZD13b3Jr ZXIuJywKKyAgdmFyaWFibGUgPT4gJ2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWwnLAorICBmbGFn cyA9PiAnR1VDX1VOSVRfTVMnLAorICBib290X3ZhbCA9PiAnMTAwJywKKyAgbWluID0+ICcwJywK KyAgbWF4ID0+ICdJTlRfTUFYJywKK30sCisKICMgTm90IGZvciBnZW5lcmFsIHVzZSAtLS0gdXNl ZCBieSBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIGFuZCBTRVQKICMgUk9MRQogeyBuYW1lID0+ ICdpc19zdXBlcnVzZXInLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX0lOVEVSTkFM JywgZ3JvdXAgPT4gJ1VOR1JPVVBFRCcsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKaW5kZXggY2YxNTU5NzM4NWIuLjY0M2RkMjg2NmUwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yMTgsNyAr MjE4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW4g ZXhlY3V0ZSBzaW11bHRhbmVvdXNseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgLTEgc2V0cyBiYXNlZCBvbiBzaGFyZWRfYnVmZmVycwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI2lv X3dvcmtlcnMgPSAzICAgICAgICAgICAgICAgICAgICAgICAgICMgMS0zMjsKKworI2lvX21pbl93 b3JrZXJzID0gMSAgICAgICAgICAgICAgICAgICAgICMgMS0zMiAoY2hhbmdlIHJlcXVpcmVzIHBn X3JlbG9hZF9jb25mKCkpCisjaW9fbWF4X3dvcmtlcnMgPSA4ICAgICAgICAgICAgICAgICAgICAg IyAxLTMyCisjaW9fd29ya2VyX2lkbGVfdGltZW91dCA9IDYwcworI2lvX3dvcmtlcl9sYXVuY2hf aW50ZXJ2YWwgPSAxMDBtcwogCiAjIC0gV29ya2VyIFByb2Nlc3NlcyAtCiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvaW9fd29ya2VyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lv X3dvcmtlci5oCmluZGV4IGY3ZDU5OThhMTM4Li40MDU1OWZiMjQyOCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9pb193b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lv X3dvcmtlci5oCkBAIC0xNyw2ICsxNywxNCBAQAogCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBJ b1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRh X2xlbik7CiAKLWV4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fd29ya2VyczsKKy8qIFB1YmxpYyBH VUNzLiAqLworZXh0ZXJuIFBHRExMSU1QT1JUIGludCBpb19taW5fd29ya2VyczsKK2V4dGVybiBQ R0RMTElNUE9SVCBpbnQgaW9fbWF4X3dvcmtlcnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlv X3dvcmtlcl9pZGxlX3RpbWVvdXQ7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX3dvcmtlcl9s YXVuY2hfaW50ZXJ2YWw7CisKKy8qIEludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgcG9zdG1hc3Rl ci4gKi8KK2V4dGVybiBib29sIHBnYWlvX3dvcmtlcl90ZXN0X2dyb3codm9pZCk7CitleHRlcm4g Ym9vbCBwZ2Fpb193b3JrZXJfdGVzdF9hbmRfY2xlYXJfZ3Jvdyh2b2lkKTsKIAogI2VuZGlmCQkJ CQkJCS8qIElPX1dPUktFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3 bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDU5ZWUw OTc5NzdkLi5lMzlkNWE5NDdmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTg3LDYg Kzg3LDcgQEAgUEdfTFdMT0NLKDUyLCBTZXJpYWxDb250cm9sKQogUEdfTFdMT0NLKDUzLCBBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWUpCiBQR19MV0xPQ0soNTQsIFdhaXRMU04pCiBQR19MV0xPQ0so NTUsIExvZ2ljYWxEZWNvZGluZ0NvbnRyb2wpCitQR19MV0xPQ0soNTYsIEFpb1dvcmtlckNvbnRy b2wpCiAKIC8qCiAgKiBUaGVyZSBhbHNvIGV4aXN0IHNldmVyYWwgYnVpbHQtaW4gTFdMb2NrIHRy YW5jaGVzLiAgQXMgd2l0aCB0aGUgcHJlZGVmaW5lZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wbXNpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oCmluZGV4 IDIwNmZiNzhmOGE1Li4wMGUxYjQyNmQ2OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wbXNpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaApAQCAtMzgs NiArMzgsNyBAQCB0eXBlZGVmIGVudW0KIAlQTVNJR05BTF9ST1RBVEVfTE9HRklMRSwJLyogc2Vu ZCBTSUdVU1IxIHRvIHN5c2xvZ2dlciB0byByb3RhdGUgbG9nZmlsZSAqLwogCVBNU0lHTkFMX1NU QVJUX0FVVE9WQUNfTEFVTkNIRVIsCS8qIHN0YXJ0IGFuIGF1dG92YWN1dW0gbGF1bmNoZXIgKi8K IAlQTVNJR05BTF9TVEFSVF9BVVRPVkFDX1dPUktFUiwJLyogc3RhcnQgYW4gYXV0b3ZhY3V1bSB3 b3JrZXIgKi8KKwlQTVNJR05BTF9JT19XT1JLRVJfR1JPVywJLyogSS9PIHdvcmtlciBwb29sIHdh bnRzIHRvIGdyb3cgKi8KIAlQTVNJR05BTF9CQUNLR1JPVU5EX1dPUktFUl9DSEFOR0UsCS8qIGJh Y2tncm91bmQgd29ya2VyIHN0YXRlIGNoYW5nZSAqLwogCVBNU0lHTkFMX1NUQVJUX1dBTFJFQ0VJ VkVSLCAvKiBzdGFydCBhIHdhbHJlY2VpdmVyICovCiAJUE1TSUdOQUxfQURWQU5DRV9TVEFURV9N QUNISU5FLCAvKiBhZHZhbmNlIHBvc3RtYXN0ZXIncyBzdGF0ZSBtYWNoaW5lICovCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAyX2lvX3dvcmtlcnMucGwKaW5kZXggMzRiYzEzMmVh MDguLmI5Nzc1ODExZDRkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Qv MDAyX2lvX3dvcmtlcnMucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9p b193b3JrZXJzLnBsCkBAIC0xNCw2ICsxNCw5IEBAICRub2RlLT5pbml0KCk7CiAkbm9kZS0+YXBw ZW5kX2NvbmYoCiAJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAogaW9fbWV0aG9kPXdvcmtlcgoraW9f d29ya2VyX2lkbGVfdGltZW91dD0wbXMKK2lvX3dvcmtlcl9sYXVuY2hfaW50ZXJ2YWw9MG1zCitp b19tYXhfd29ya2Vycz0zMgogKSk7CiAKICRub2RlLT5zdGFydCgpOwpAQCAtMzEsNyArMzQsNyBA QCBzdWIgdGVzdF9udW1iZXJfb2ZfaW9fd29ya2Vyc19keW5hbWljCiB7CiAJbXkgJG5vZGUgPSBz aGlmdDsKIAotCW15ICRwcmV2X3dvcmtlcl9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ1NIT1cgaW9fd29ya2VycycpOworCW15ICRwcmV2X3dvcmtlcl9jb3VudCA9ICRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fbWluX3dvcmtlcnMnKTsKIAogCSMgVmVy aWZ5IHRoYXQgd29ya2VyIGNvdW50IGNhbid0IGJlIHNldCB0byAwCiAJY2hhbmdlX251bWJlcl9v Zl9pb193b3JrZXJzKCRub2RlLCAwLCAkcHJldl93b3JrZXJfY291bnQsIDEpOwpAQCAtNjIsMjQg KzY1LDI0IEBAIHN1YiBjaGFuZ2VfbnVtYmVyX29mX2lvX3dvcmtlcnMKIAlteSAoJHJlc3VsdCwg JHN0ZG91dCwgJHN0ZGVycik7CiAKIAkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPQotCSAg JG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFNZU1RFTSBTRVQgaW9fd29ya2VycyA9ICR3 b3JrZXJfY291bnQiKTsKKwkgICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTWVNURU0g U0VUIGlvX21pbl93b3JrZXJzID0gJHdvcmtlcl9jb3VudCIpOwogCSRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19yZWxvYWRfY29uZigpJyk7CiAKIAlpZiAoJGV4cGVjdF9m YWlsdXJlKQogCXsKIAkJbGlrZSgKIAkJCSRzdGRlcnIsCi0JCQlxci8kd29ya2VyX2NvdW50IGlz IG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIGZvciBwYXJhbWV0ZXIgImlvX3dvcmtlcnMiLywKLQkJ CSJ1cGRhdGluZyBudW1iZXIgb2YgaW9fd29ya2VycyB0byAkd29ya2VyX2NvdW50IGZhaWxlZCwg YXMgZXhwZWN0ZWQiCisJCQlxci8kd29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJh bmdlIGZvciBwYXJhbWV0ZXIgImlvX21pbl93b3JrZXJzIi8sCisJCQkidXBkYXRpbmcgaW9fbWlu X3dvcmtlcnMgdG8gJHdvcmtlcl9jb3VudCBmYWlsZWQsIGFzIGV4cGVjdGVkIgogCQkpOwogCiAJ CXJldHVybiAkcHJldl93b3JrZXJfY291bnQ7CiAJfQogCWVsc2UKIAl7Ci0JCWlzKCAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX3dvcmtlcnMnKSwKKwkJaXMoICRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fbWluX3dvcmtlcnMnKSwKIAkJCSR3b3JrZXJf Y291bnQsCi0JCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX3dvcmtlcnMgZnJvbSAkcHJldl93b3Jr ZXJfY291bnQgdG8gJHdvcmtlcl9jb3VudCIKKwkJCSJ1cGRhdGluZyBudW1iZXIgb2YgaW9fbWlu X3dvcmtlcnMgZnJvbSAkcHJldl93b3JrZXJfY291bnQgdG8gJHdvcmtlcl9jb3VudCIKIAkJKTsK IAogCQljaGVja19pb193b3JrZXJfY291bnQoJG5vZGUsICR3b3JrZXJfY291bnQpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCBlM2MxMDA3YWJkZi4uN2UzNDBhOWU3OTEgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMjUwLDYgKzIyNTAsNyBAQCBQZ0Fpb1VyaW5nQ2Fwcwog UGdBaW9VcmluZ0NvbnRleHQKIFBnQWlvV2FpdFJlZgogUGdBaW9Xb3JrZXJDb250cm9sCitQZ0Fp b1dvcmtlclNldAogUGdBaW9Xb3JrZXJTbG90CiBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQog UGdBcmNoRGF0YQotLSAKMi41My4wCgo= --000000000000fa1a66064e124aa6--