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 1uaSUB-005WA5-U6 for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jul 2025 05:09:20 +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 1uaSU7-007yfj-WA for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jul 2025 05:09:16 +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 1uaSU7-007yfW-HO for pgsql-hackers@lists.postgresql.org; Sat, 12 Jul 2025 05:09:16 +0000 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uaSU5-0078x0-0O for pgsql-hackers@lists.postgresql.org; Sat, 12 Jul 2025 05:09:15 +0000 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2e8f76eaf1cso438839fac.2 for ; Fri, 11 Jul 2025 22:09:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752296951; x=1752901751; 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=vQhxTMBdBA5MjbzN1RzGDat+45zDgPdMMiDrROfzl0g=; b=J8oMIwZPITm/vZt+cV4rTb9EbvZpt4fePm9gXKlNOVG16qeL68F21hxoWGSoTKLFWT HfVEc+gBHpmG5TNnqyV+xWpGHDyoZSpUS8XrpqWc74e4pRAkuDAX69uXvVCB/8Zu8QyC Sy7VOG1oO+/ByeqUJz8qzXNLYhTJyWQO0z5VjEoXZujOuqS2Btyp8NWy9RxA54Ug73/H ftPBWksikm2ioTwyHG6a9NFKL5zY39pJhkrA0K6IqPIdJWq+pvVRZm5uDmz9War/lJZW iz0OR4xK9RSC38zybDnzDA4n9ENVwirtcwwym7dI8tza8FYCmi8ouCSFOkW6y1xpbSzt pUsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752296951; x=1752901751; 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=vQhxTMBdBA5MjbzN1RzGDat+45zDgPdMMiDrROfzl0g=; b=P1d/xMSb4Lei/uQK0Cux6R3z67K5WbqhZc0zWE5Zt3D7keB/5c/k6BBUqdyeq4cOF2 sT1d3RcXz3ZXkrmtQyKVTD7664kL9qjygaa63y7CQ8vQwWlxQ2JUlPTwcKMexpxxoMph H/JDybXpSXF4GMX3mMSMIzoLDR8Bl/i+EdRkOPfpPmFjfQYrI+wDUzsUmBehKEY8Csmu EkwnOGl8KL1om8puhQpPxrrejI9imG4RsHcMz8mC1Wt2cf2q8gcpXMFAHGGjpwdCSx0L Mil9LsHTd6UUzngb6yKODIWgP9UuLyrjB3Mton6zsy1xDH+tPmSDOBtl5X1H+e5GpMXS PrLA== X-Gm-Message-State: AOJu0YzTRW/Y+W29asEiv1mgjNNoehpeBGcnEcKWQ/v9CudvHUw/wpfD CcFtbcMFn6da8tMgzBklN1vyUtxQYntosaYh0yeD5tkmWeZ6plv2MDfoWZ+vlH8gK4ZOyj60Rym eUAWTVz3eGrAbRiLqn0vhbkUWY1jy9zk= X-Gm-Gg: ASbGncvIVTuoDHMy+H2O5L69vmGHK8kuE1f5hbNdCPUhd/qPozdBQKiMSCzAfFWbocf 5Q6U9Sra8T1c6VZJIM8JEe7sDxD2qXAfQ5mIb/nhoNkmOvia2Dc5a7AaIf+AM9E+zOWxkig1J20 pJU/5A8+qXg0NGlxqNdgKO3L3fmYnVd9iy165gIZyoGfRvhhrT91UUrnUv6YzYfLuGVdYKzc7fq Kx+j9jbrVVmLbqrEhu0skDM4uqLw7IBOeHeoGija84IrMOeL2Uo X-Google-Smtp-Source: AGHT+IEu7EPYM7uvD7heS3KUYspEpZtZEqA4yuHWGhQv1mSurtyAVDi6P5hwMwcbqLp8JngMohWaglqQtnBOmMzz11Q= X-Received: by 2002:a05:6871:c705:b0:2ea:fb60:7822 with SMTP id 586e51a60fabf-2ff265c9d7dmr1626129fac.2.1752296950779; Fri, 11 Jul 2025 22:09:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Thomas Munro Date: Sat, 12 Jul 2025 17:08:29 +1200 X-Gm-Features: Ac12FXyVFZFHmVR4ALJvzjvcoud26JuUozBz_0lSxHYq5tREDk5p36NYLVcQCZA Message-ID: Subject: Re: Automatically sizing the IO worker pool To: Dmitry Dolgov <9erthalion6@gmail.com> Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000004afb850639b46dc2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004afb850639b46dc2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, May 28, 2025 at 5:55=E2=80=AFAM Dmitry Dolgov <9erthalion6@gmail.co= m> wrote: > I probably had to start with a statement that I find the current approach= reasonable, and I'm only curious if there is more to get out of it. I have= n't benchmarked the patch yet (plan getting to it when I'll get back), and = can imagine practical considerations significantly impacting any potential = solution. Here's a rebase. --0000000000004afb850639b46dc2 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-aio-Try-repeatedly-to-give-batched-IOs-to-workers.patch" Content-Disposition: attachment; filename="v2-0001-aio-Try-repeatedly-to-give-batched-IOs-to-workers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mczs3oli0 RnJvbSBmYTdhYWMxYmM5YzBhNDdmYmRiZDk0NTk0MjRmMDhmYTYxYjcxY2UyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTEgQXByIDIwMjUgMjE6MTc6MjYgKzEyMDAKU3ViamVjdDogW1BBVENIIHYy IDEvMl0gYWlvOiBUcnkgcmVwZWF0ZWRseSB0byBnaXZlIGJhdGNoZWQgSU9zIHRvIHdvcmtlcnMu CgpQcmV2aW91c2x5LCB3aGVuIHRoZSBzdWJtaXNzaW9uIHF1ZXVlIHdhcyBmdWxsIHdlJ2QgcnVu IGFsbCByZW1haW5pbmcKSU9zIGluIGEgYmF0Y2hlZCBzdWJtaXNzb2luIHN5bmNocm9ub3VzbHku ICBBbmRyZXMgcmlnaHRseSBwb2ludGVkIG91dAp0aGF0IHdlIHNob3VsZCByZWFsbHkgdHJ5IGFn YWluIGJldHdlZW4gc3luY2hyb25vdXMgSU9zLCBzaW5jZSB0aGUKd29ya2VycyBtaWdodCBoYXZl IG1hZGUgcHJvZ3Jlc3MgaW4gZHJhaW5pbmcgdGhlIHF1ZXVlLgoKU3VnZ2VzdGVkLWJ5OiBBbmRy ZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vQ0ElMkJoVUtHJTJCbTR4VjBMTW9IMmMlM0RvUkFkRVh1Q25oJTJCdEdCVFdhN3VGZUZN R2dUTEF3JTJCUSU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX3dvcmtlci5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNo YW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4IGJmOGY3N2U2ZmY2Li45YTgyZDVmODQ3ZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYwpAQCAtMjgyLDEyICsyODIsMzYg QEAgcGdhaW9fd29ya2VyX3N1Ym1pdF9pbnRlcm5hbChpbnQgbnVtX3N0YWdlZF9pb3MsIFBnQWlv SGFuZGxlICoqc3RhZ2VkX2lvcykKIAkJU2V0TGF0Y2god2FrZXVwKTsKIAogCS8qIFJ1biB3aGF0 ZXZlciBpcyBsZWZ0IHN5bmNocm9ub3VzbHkuICovCi0JaWYgKG5zeW5jID4gMCkKKwlmb3IgKGlu dCBpID0gMDsgaSA8IG5zeW5jOyArK2kpCiAJewotCQlmb3IgKGludCBpID0gMDsgaSA8IG5zeW5j OyArK2kpCisJCXdha2V1cCA9IE5VTEw7CisKKwkJLyoKKwkJICogQmV0d2VlbiBzeW5jaHJvbm91 cyBJTyBvcGVyYXRpb25zLCB0cnkgYWdhaW4gdG8gZW5xdWV1ZSBhcyBtYW55IGFzCisJCSAqIHdl IGNhbi4KKwkJICovCisJCWlmIChpID4gMCkKIAkJewotCQkJcGdhaW9faW9fcGVyZm9ybV9zeW5j aHJvbm91c2x5KHN5bmNocm9ub3VzX2lvc1tpXSk7CisJCQl3YWtldXAgPSBOVUxMOworCisJCQlM V0xvY2tBY3F1aXJlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CisJCQl3aGlsZSAoaSA8IG5zeW5jICYmCisJCQkJICAgcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25f cXVldWVfaW5zZXJ0KHN5bmNocm9ub3VzX2lvc1tpXSkpCisJCQl7CisJCQkJaWYgKHdha2V1cCA9 PSBOVUxMICYmICh3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3NlX2lkbGUoKSkgPj0gMCkKKwkJ CQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5sYXRjaDsKKwkJ CQlpKys7CisJCQl9CisJCQlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxv Y2spOworCisJCQlpZiAod2FrZXVwKQorCQkJCVNldExhdGNoKHdha2V1cCk7CisKKwkJCWlmIChp ID09IG5zeW5jKQorCQkJCWJyZWFrOwogCQl9CisKKwkJcGdhaW9faW9fcGVyZm9ybV9zeW5jaHJv bm91c2x5KHN5bmNocm9ub3VzX2lvc1tpXSk7CiAJfQogfQogCi0tIAoyLjQ3LjIKCg== --0000000000004afb850639b46dc2 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0002-aio-Adjust-IO-worker-pool-size-automatically.patch" Content-Disposition: attachment; filename="v2-0002-aio-Adjust-IO-worker-pool-size-automatically.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mczs3sne1 RnJvbSBhMGE1ZmZmMWYxZDIxYzAwMmJmNjhkMzZkZTlhZmYyMWJkZjYxNzgzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjIgTWFyIDIwMjUgMDA6MzY6NDkgKzEzMDAKU3ViamVjdDogW1BBVENIIHYy IDIvMl0gYWlvOiBBZGp1c3QgSU8gd29ya2VyIHBvb2wgc2l6ZSBhdXRvbWF0aWNhbGx5LgoKUmVw bGFjZSB0aGUgc2ltcGxlIGlvX3dvcmtlcnMgc2V0dGluZyB3aXRoOgoKICBpb19taW5fd29ya2Vy cz0xCiAgaW9fbWF4X3dvcmtlcnM9OAogIGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ9NjBzCiAgaW9f d29ya2VyX2xhdW5jaF9pbnRlcnZhbD01MDBtcwoKVGhlIHBvb2wgaXMgYXV0b21hdGljYWxseSBz aXplZCB3aXRoaW4gdGhlIGNvbmZpZ3VyZWQgcmFuZ2UgYWNjb3JkaW5nCnRvIGRlbWFuZC4KCkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJCbTR4VjBMTW9IMmMlM0Rv UkFkRVh1Q25oJTJCdEdCVFdhN3VGZUZNR2dUTEF3JTJCUSU0MG1haWwuZ21haWwuY29tCi0tLQog ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDcwICsrLQog c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAgICAgICAgIHwgIDY0ICsrLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jICAgICAgIHwgNDQ1ICsrKysr KysrKysrKysrLS0tLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0ICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAg ICB8ICA0NiArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl IHwgICA1ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmggICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsIHwgIDE1 ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCA1MzUgaW5zZXJ0aW9ucygrKSwgMTIyIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAppbmRleCBjN2FjYzBmMTgyZi4uOTg1MzJlNTUwNDEgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAg LTI3ODcsMTYgKzI3ODcsNzYgQEAgaW5jbHVkZV9kaXIgJ2NvbmYuZCcKICAgICAgICA8L2xpc3Rp dGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAKLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1 Yy1pby13b3JrZXJzIiB4cmVmbGFiZWw9ImlvX3dvcmtlcnMiPgotICAgICAgIDx0ZXJtPjx2YXJu YW1lPmlvX3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1pby1taW4td29ya2VycyIgeHJlZmxhYmVsPSJpb19taW5fd29y a2VycyI+CisgICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWluX3dvcmtlcnM8L3Zhcm5hbWU+ICg8 dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAgICA8aW5kZXh0ZXJtPgotICAgICAgICA8cHJpbWFy eT48dmFybmFtZT5pb193b3JrZXJzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwv cHJpbWFyeT4KKyAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aW9fbWluX3dvcmtlcnM8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgogICAgICAgIDwvaW5kZXh0ZXJt PgogICAgICAgIDwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgotICAg ICAgICAgU2VsZWN0cyB0aGUgbnVtYmVyIG9mIEkvTyB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4g VGhlIGRlZmF1bHQgaXMKLSAgICAgICAgIDMuIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNl dCBpbiB0aGUKKyAgICAgICAgIFNldHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIEkvTyB3b3JrZXIg cHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgIDEuIFRoaXMgcGFyYW1l dGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3Fs LmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAgICAgICAg bGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE9ubHkgaGFz IGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8tbWV0aG9kIi8+IGlzIHNldCB0bwor ICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJhPgorICAg ICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1pby1tYXgtd29ya2VycyIgeHJlZmxhYmVsPSJpb19tYXhfd29ya2VycyI+Cisg ICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fbWF4X3dvcmtlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8 L3R5cGU+KQorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlv X21heF93b3JrZXJzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4K KyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIEkvTyB3 b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgICAgIDguIFRoaXMg cGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBpbiB0aGUKKyAgICAgICAgIDxmaWxlbmFtZT5wb3N0 Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAorICAg ICAgICAgbGluZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE9u bHkgaGFzIGFuIGVmZmVjdCBpZiA8eHJlZiBsaW5rZW5kPSJndWMtaW8tbWV0aG9kIi8+IGlzIHNl dCB0bworICAgICAgICAgPGxpdGVyYWw+d29ya2VyPC9saXRlcmFsPi4KKyAgICAgICAgPC9wYXJh PgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy1pby13b3JrZXItaWRsZS10aW1lb3V0IiB4cmVmbGFiZWw9ImlvX3dv cmtlcl9pZGxlX3RpbWVvdXQiPgorICAgICAgIDx0ZXJtPjx2YXJuYW1lPmlvX3dvcmtlcl9pZGxl X3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnQ8L3R5cGU+KQorICAgICAgIDxpbmRleHRlcm0+ CisgICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmlvX3dvcmtlcl9pZGxlX3RpbWVvdXQ8L3Zhcm5h bWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJt PgorICAgICAgIDwvdGVybT4KKyAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgU2V0cyB0aGUgdGltZSBhZnRlciB3aGljaCBpZGxlIEkvTyB3b3JrZXIgcHJvY2Vzc2Vz IHdpbGwgZXhpdCwgcmVkdWNpbmcgdGhlCisgICAgICAgICBtYXhpbXVtIHNpemUgb2YgdGhlIEkv TyB3b3JrZXIgcG9vbCB0b3dhcmRzIHRoZSBtaW5pbXVtLiAgVGhlIGRlZmF1bHQKKyAgICAgICAg IGlzIDEgbWludXRlLgorICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGlu IHRoZQorICAgICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUg b3Igb24gdGhlIHNlcnZlciBjb21tYW5kCisgICAgICAgICBsaW5lLgorICAgICAgICA8L3BhcmE+ CisgICAgICAgIDxwYXJhPgorICAgICAgICAgT25seSBoYXMgYW4gZWZmZWN0IGlmIDx4cmVmIGxp bmtlbmQ9Imd1Yy1pby1tZXRob2QiLz4gaXMgc2V0IHRvCisgICAgICAgICA8bGl0ZXJhbD53b3Jr ZXI8L2xpdGVyYWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWlvLXdvcmtlci1s YXVuY2gtaW50ZXJ2YWwiIHhyZWZsYWJlbD0iaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCI+Cisg ICAgICAgPHRlcm0+PHZhcm5hbWU+aW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbDwvdmFybmFtZT4g KDx0eXBlPmludDwvdHlwZT4pCisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+aW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbDwvdmFybmFtZT4gY29uZmlndXJhdGlv biBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJt PgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIHRoZSBt aW5pbXVtIHRpbWUgYmV0d2VlbiBsYXVuY2hpbmcgbmV3IEkvTyB3b3JrZXJzLiAgVGhpcyBjYW4g YmUgdXNlZCB0byBhdm9pZAorICAgICAgICAgc3VkZGVuIGJ1cnN0cyBvZiBuZXcgSS9PIHdvcmtl cnMuICBUaGUgZGVmYXVsdCBpcyAxMDBtcy4KKyAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBv bmx5IGJlIHNldCBpbiB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2Zp bGVuYW1lPiBmaWxlIG9yIG9uIHRoZSBzZXJ2ZXIgY29tbWFuZAogICAgICAgICAgbGluZS4KICAg ICAgICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBjY2E5Yjk0 NmU1My4uYTU0MzhmYTA3OWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00 MDgsNiArNDA4LDcgQEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9IE5VTEw7 CiAjZW5kaWYKIAogLyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLworc3RhdGlj IFRpbWVzdGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWwgPSAwOwogc3RhdGljIGlu dAlpb193b3JrZXJfY291bnQgPSAwOwogc3RhdGljIFBNQ2hpbGQgKmlvX3dvcmtlcl9jaGlsZHJl bltNQVhfSU9fV09SS0VSU107CiAKQEAgLTE1NjksNiArMTU3MCwxNSBAQCBEZXRlcm1pbmVTbGVl cFRpbWUodm9pZCkKIAlpZiAoU3RhcnRXb3JrZXJOZWVkZWQpCiAJCXJldHVybiAwOwogCisJLyog SWYgd2UgbmVlZCBhIG5ldyBJTyB3b3JrZXIsIGRlZmVyIHVudGlsIGxhdW5jaCBkZWxheSBleHBp cmVzLiAqLworCWlmIChwZ2Fpb193b3JrZXJfdGVzdF9uZXdfd29ya2VyX25lZWRlZCgpICYmCisJ CWlvX3dvcmtlcl9jb3VudCA8IGlvX21heF93b3JrZXJzKQorCXsKKwkJaWYgKGlvX3dvcmtlcl9s YXVuY2hfZGVsYXlfdW50aWwgPT0gMCkKKwkJCXJldHVybiAwOworCQluZXh0X3dha2V1cCA9IGlv X3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWw7CisJfQorCiAJaWYgKEhhdmVDcmFzaGVkV29ya2Vy KQogCXsKIAkJZGxpc3RfbXV0YWJsZV9pdGVyIGl0ZXI7CkBAIC0zNzUwLDYgKzM3NjAsMTUgQEAg cHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lkKQogCQlTdGFydFdvcmtlck5lZWRlZCA9IHRydWU7CiAJ fQogCisJLyogUHJvY2VzcyBJTyB3b3JrZXIgc3RhcnQgcmVxdWV0cy4gKi8KKwlpZiAoQ2hlY2tQ b3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9DSEFOR0UpKQorCXsKKwkJLyoKKwkJ ICogTm8gbG9jYWwgZmxhZywgYXMgdGhlIHN0YXRlIGlzIGV4cG9zZWQgdGhyb3VnaCBwZ2Fpb193 b3JrZXJfKigpCisJCSAqIGZ1bmN0aW9ucy4gIFRoaXMgc2lnbmFsIGlzIHJlY2VpdmVkIG9uIHBv dGVudGlhbGx5IGFjdGlvbmFibGUgbGV2ZWwKKwkJICogY2hhbmdlcywgc28gdGhhdCBtYXliZV9h ZGp1c3RfaW9fd29ya2VycygpIHdpbGwgcnVuLgorCQkgKi8KKwl9CiAJLyogUHJvY2VzcyBiYWNr Z3JvdW5kIHdvcmtlciBzdGF0ZSBjaGFuZ2VzLiAqLwogCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWdu YWwoUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdFKSkKIAl7CkBAIC00MzU1LDggKzQz NzQsOSBAQCBtYXliZV9yZWFwX2lvX3dvcmtlcihpbnQgcGlkKQogLyoKICAqIFN0YXJ0IG9yIHN0 b3AgSU8gd29ya2VycywgdG8gY2xvc2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgcnVu bmluZwogICogd29ya2VycyBhbmQgdGhlIG51bWJlciBvZiBjb25maWd1cmVkIHdvcmtlcnMuICBV c2VkIHRvIHJlc3BvbmQgdG8gY2hhbmdlIG9mCi0gKiB0aGUgaW9fd29ya2VycyBHVUMgKGJ5IGlu Y3JlYXNpbmcgYW5kIGRlY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3b3JrZXJzKSwgYXMKLSAqIHdl bGwgYXMgd29ya2VycyB0ZXJtaW5hdGluZyBpbiByZXNwb25zZSB0byBlcnJvcnMgKGJ5IHN0YXJ0 aW5nCisgKiB0aGUgaW9fe21pbixtYXh9X3dvcmtlcnMgR1VDcyAoYnkgaW5jcmVhc2luZyBhbmQg ZGVjcmVhc2luZyB0aGUgbnVtYmVyIG9mCisgKiB3b3JrZXJzKSBhbmQgcmVxdWVzdHMgdG8gc3Rh cnQgYSBuZXcgb25lIGR1ZSB0byBzdWJtaXNzaW9uIHF1ZXVlIGJhY2tsb2csCisgKiBhcyB3ZWxs IGFzIHdvcmtlcnMgdGVybWluYXRpbmcgaW4gcmVzcG9uc2UgdG8gZXJyb3JzIChieSBzdGFydGlu ZwogICogInJlcGxhY2VtZW50IiB3b3JrZXJzKS4KICAqLwogc3RhdGljIHZvaWQKQEAgLTQzODUs OCArNDQwNSwxNiBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lkKQogCiAJQXNzZXJ0KHBt U3RhdGUgPCBQTV9XQUlUX0lPX1dPUktFUlMpOwogCi0JLyogTm90IGVub3VnaCBydW5uaW5nPyAq LwotCXdoaWxlIChpb193b3JrZXJfY291bnQgPCBpb193b3JrZXJzKQorCS8qIENhbmNlbCB0aGUg bGF1bmNoIGRlbGF5IHdoZW4gaXQgZXhwaXJlcyB0byBtaW5pbWl6ZSBjbG9jayBhY2Nlc3MuICov CisJaWYgKGlvX3dvcmtlcl9sYXVuY2hfZGVsYXlfdW50aWwgIT0gMCAmJgorCQlpb193b3JrZXJf bGF1bmNoX2RlbGF5X3VudGlsIDw9IEdldEN1cnJlbnRUaW1lc3RhbXAoKSkKKwkJaW9fd29ya2Vy X2xhdW5jaF9kZWxheV91bnRpbCA9IDA7CisKKwkvKiBOb3QgZW5vdWdoIHdvcmtlcnMgcnVubmlu Zz8gKi8KKwl3aGlsZSAoaW9fd29ya2VyX2xhdW5jaF9kZWxheV91bnRpbCA9PSAwICYmCisJCSAg IGlvX3dvcmtlcl9jb3VudCA8IGlvX21heF93b3JrZXJzICYmCisJCSAgICgoaW9fd29ya2VyX2Nv dW50IDwgaW9fbWluX3dvcmtlcnMgfHwKKwkJCSBwZ2Fpb193b3JrZXJfY2xlYXJfbmV3X3dvcmtl cl9uZWVkZWQoKSkpKQogCXsKIAkJUE1DaGlsZCAgICAqY2hpbGQ7CiAJCWludAkJCWk7CkBAIC00 NDAwLDYgKzQ0MjgsMTYgQEAgbWF5YmVfYWRqdXN0X2lvX3dvcmtlcnModm9pZCkKIAkJaWYgKGkg PT0gTUFYX0lPX1dPUktFUlMpCiAJCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgYSBmcmVl IElPIHdvcmtlciBzbG90Iik7CiAKKwkJLyoKKwkJICogQXBwbHkgbGF1bmNoIGRlbGF5IGV2ZW4g Zm9yIGZhaWx1cmVzIHRvIGF2b2lkIHJldHJ5aW5nIHRvbyBmYXN0IG9uCisJCSAqIGZvcmsoKSBm YWlsdXJlLCBidXQgbm90IHdoaWxlIHdlJ3JlIHN0aWxsIGJ1aWxkaW5nIHRoZSBtaW5pbXVtIHBv b2wKKwkJICogc2l6ZS4KKwkJICovCisJCWlmIChpb193b3JrZXJfY291bnQgPj0gaW9fbWluX3dv cmtlcnMpCisJCQlpb193b3JrZXJfbGF1bmNoX2RlbGF5X3VudGlsID0KKwkJCQlUaW1lc3RhbXBU elBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQlpb193 b3JrZXJfbGF1bmNoX2ludGVydmFsKTsKKwogCQkvKiBUcnkgdG8gbGF1bmNoIG9uZS4gKi8KIAkJ Y2hpbGQgPSBTdGFydENoaWxkUHJvY2VzcyhCX0lPX1dPUktFUik7CiAJCWlmIChjaGlsZCAhPSBO VUxMKQpAQCAtNDQxMSwxOSArNDQ0OSwxMSBAQCBtYXliZV9hZGp1c3RfaW9fd29ya2Vycyh2b2lk KQogCQkJYnJlYWs7CQkJCS8qIHRyeSBhZ2FpbiBuZXh0IHRpbWUgKi8KIAl9CiAKLQkvKiBUb28g bWFueSBydW5uaW5nPyAqLwotCWlmIChpb193b3JrZXJfY291bnQgPiBpb193b3JrZXJzKQotCXsK LQkJLyogYXNrIHRoZSBJTyB3b3JrZXIgaW4gdGhlIGhpZ2hlc3Qgc2xvdCB0byBleGl0ICovCi0J CWZvciAoaW50IGkgPSBNQVhfSU9fV09SS0VSUyAtIDE7IGkgPj0gMDsgLS1pKQotCQl7Ci0JCQlp ZiAoaW9fd29ya2VyX2NoaWxkcmVuW2ldICE9IE5VTEwpCi0JCQl7Ci0JCQkJa2lsbChpb193b3Jr ZXJfY2hpbGRyZW5baV0tPnBpZCwgU0lHVVNSMik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9 CisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcnVubmluZyBiZWNhdXNlIGlvX21heF93 b3JrZXJzIGNoYW5nZWQsIHRoYXQgd2lsbAorCSAqIGJlIGhhbmRsZWQgYnkgdGhlIElPIHdvcmtl cnMgdGhlbXNlbHZlcyBzbyB0aGV5IGNhbiBzaHV0IGRvd24gaW4KKwkgKiBwcmVmZXJyZWQgb3Jk ZXIuCisJICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0 aG9kX3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmlu ZGV4IDlhODJkNWY4NDdkLi42ZDNmNTI4OWUxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF93b3JrZXIuYwpAQCAtMTEsOSArMTEsMTAgQEAKICAqIGluZnJhc3RydWN0dXJlIGZvciBy ZW9wZW5pbmcgdGhlIGZpbGUsIGFuZCBtdXN0IHByb2Nlc3NlZCBzeW5jaHJvbm91c2x5IGJ5CiAg KiB0aGUgY2xpZW50IGNvZGUgd2hlbiBzdWJtaXR0ZWQuCiAgKgotICogU28gdGhhdCB0aGUgc3Vi bWl0dGVyIGNhbiBtYWtlIGp1c3Qgb25lIHN5c3RlbSBjYWxsIHdoZW4gc3VibWl0dGluZyBhIGJh dGNoCi0gKiBvZiBJT3MsIHdha2V1cHMgImZhbiBvdXQiOyBlYWNoIHdva2VuIElPIHdvcmtlciBj YW4gd2FrZSB0d28gbW9yZS4gWFhYIFRoaXMKLSAqIGNvdWxkIGJlIGltcHJvdmVkIGJ5IHVzaW5n IGZ1dGV4ZXMgaW5zdGVhZCBvZiBsYXRjaGVzIHRvIHdha2UgTiB3YWl0ZXJzLgorICogV2hlbiBh IGJhdGNoIG9mIElPcyBpcyBzdWJtaXR0ZWQsIHRoZSBsb3dlc3QgbnVtYmVyZWQgaWRsZSB3b3Jr ZXIgaXMgd29rZW4KKyAqIHVwLiAgSWYgaXQgc2VlcyBtb3JlIHdvcmsgaW4gdGhlIHF1ZXVlIGl0 IHdha2VzIGEgcGVlciB0byBoZWxwLCBhbmQgc28gb24KKyAqIGluIGEgY2hhaW4uICBXaGVuIGEg YmFja2xvZyBpcyBkZXRlY3RlZCwgdGhlIHBvb2wgc2l6ZSBpcyBpbmNyZWFzZWQuICBXaGVuCisg KiB0aGUgaGlnaGVzdCBudW1iZXJlZCB3b3JrZXIgdGltZXMgb3V0IGFmdGVyIGEgcGVyaW9kIG9m IGluYWN0aXZpdHkuCiAgKgogICogVGhpcyBtZXRob2Qgb2YgQUlPIGlzIGF2YWlsYWJsZSBpbiBh bGwgYnVpbGRzIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kCiAgKiBpcyB0aGUgZGVmYXVs dC4KQEAgLTQwLDYgKzQxLDggQEAKICNpbmNsdWRlICJzdG9yYWdlL2lvX3dvcmtlci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNs dWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKQEAgLTQ3LDEwICs1MCw4IEBACiAjaW5jbHVk ZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgogCi0K LS8qIEhvdyBtYW55IHdvcmtlcnMgc2hvdWxkIGVhY2ggd29ya2VyIHdha2UgdXAgaWYgbmVlZGVk PyAqLwotI2RlZmluZSBJT19XT1JLRVJfV0FLRVVQX0ZBTk9VVCAyCi0KKy8qIFNhdHVyYXRpb24g Zm9yIHN0YXRzIGNvdW50ZXJzIHVzZWQgdG8gZXN0aW1hdGUgd2FrZXVwOndvcmsgcmF0aW8uICov CisjZGVmaW5lIFBHQUlPX1dPUktFUl9TVEFUU19NQVggNjQKIAogdHlwZWRlZiBzdHJ1Y3QgUGdB aW9Xb3JrZXJTdWJtaXNzaW9uUXVldWUKIHsKQEAgLTYzLDE3ICs2NCwyNSBAQCB0eXBlZGVmIHN0 cnVjdCBQZ0Fpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQogCiB0eXBlZGVmIHN0cnVjdCBQZ0Fpb1dv cmtlclNsb3QKIHsKLQlMYXRjaAkgICAqbGF0Y2g7Ci0JYm9vbAkJaW5fdXNlOworCVByb2NOdW1i ZXIJcHJvY19udW1iZXI7CiB9IFBnQWlvV29ya2VyU2xvdDsKIAogdHlwZWRlZiBzdHJ1Y3QgUGdB aW9Xb3JrZXJDb250cm9sCiB7CisJLyogU2VlbiBieSBwb3N0bWFzdGVyICovCisJdm9sYXRpbGUg Ym9vbCBuZXdfd29ya2VyX25lZWRlZDsKKworCS8qIFBvdGVjdGVkIGJ5IEFpb1dvcmtlclN1Ym1p c3Npb25RdWV1ZUxvY2suICovCiAJdWludDY0CQlpZGxlX3dvcmtlcl9tYXNrOworCisJLyogUHJv dGVjdGVkIGJ5IEFpb1dvcmtlckNvbnRyb2xMb2NrLiAqLworCXVpbnQ2NAkJd29ya2VyX3NldDsK KwlpbnQJCQlud29ya2VyczsKKworCS8qIFByb3RlY3RlZCBieSBBaW9Xb3JrZXJDb250cm9sTG9j ay4gKi8KIAlQZ0Fpb1dvcmtlclNsb3Qgd29ya2Vyc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwog fSBQZ0Fpb1dvcmtlckNvbnRyb2w7CiAKLQogc3RhdGljIHNpemVfdCBwZ2Fpb193b3JrZXJfc2ht ZW1fc2l6ZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wg Zmlyc3RfdGltZSk7CiAKQEAgLTkxLDExICsxMDAsMTQgQEAgY29uc3QgSW9NZXRob2RPcHMgcGdh aW9fd29ya2VyX29wcyA9IHsKIAogCiAvKiBHVUNzICovCi1pbnQJCQlpb193b3JrZXJzID0gMzsK K2ludAkJCWlvX21pbl93b3JrZXJzID0gMTsKK2ludAkJCWlvX21heF93b3JrZXJzID0gODsKK2lu dAkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgPSA2MDAwMDsKK2ludAkJCWlvX3dvcmtlcl9sYXVu Y2hfaW50ZXJ2YWwgPSA1MDA7CiAKIAogc3RhdGljIGludAlpb193b3JrZXJfcXVldWVfc2l6ZSA9 IDY0Owotc3RhdGljIGludAlNeUlvV29ya2VySWQ7CitzdGF0aWMgaW50CU15SW9Xb3JrZXJJZCA9 IC0xOwogc3RhdGljIFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICppb193b3JrZXJfc3VibWlz c2lvbl9xdWV1ZTsKIHN0YXRpYyBQZ0Fpb1dvcmtlckNvbnRyb2wgKmlvX3dvcmtlcl9jb250cm9s OwogCkBAIC0xNTIsMzcgKzE2NCwxNzIgQEAgcGdhaW9fd29ya2VyX3NobWVtX2luaXQoYm9vbCBm aXJzdF90aW1lKQogCQkJCQkJJmZvdW5kKTsKIAlpZiAoIWZvdW5kKQogCXsKKwkJaW9fd29ya2Vy X2NvbnRyb2wtPm5ld193b3JrZXJfbmVlZGVkID0gZmFsc2U7CisJCWlvX3dvcmtlcl9jb250cm9s LT53b3JrZXJfc2V0ID0gMDsKIAkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sg PSAwOwogCQlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJTOyArK2kpCi0JCXsKLQkJ CWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW2ldLmxhdGNoID0gTlVMTDsKLQkJCWlvX3dvcmtl cl9jb250cm9sLT53b3JrZXJzW2ldLmluX3VzZSA9IGZhbHNlOwotCQl9CisJCQlpb193b3JrZXJf Y29udHJvbC0+d29ya2Vyc1tpXS5wcm9jX251bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJ fQogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX2NvbnNpZGVyX25ld193b3JrZXIodWlu dDMyIHF1ZXVlX2RlcHRoKQoreworCS8qCisJICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzaXRlcyB0 aGF0IGRvbid0IGhvbGQgQWlvV29ya2VyQ29udHJvbExvY2ssIGJ1dCBpdAorCSAqIGNoYW5nZXMg aW5mcmVxdWVudGx5IGFuZCBhbiB1cCB0byBkYXRlIHZhbHVlIGlzIG5vdCByZXF1aXJlZCBmb3Ig dGhpcworCSAqIGhldXJpc3RpYyBwdXJwb3NlLgorCSAqLworCWlmICghaW9fd29ya2VyX2NvbnRy b2wtPm5ld193b3JrZXJfbmVlZGVkICYmCisJCXF1ZXVlX2RlcHRoID49IGlvX3dvcmtlcl9jb250 cm9sLT5ud29ya2VycykKKwl7CisJCWlvX3dvcmtlcl9jb250cm9sLT5uZXdfd29ya2VyX25lZWRl ZCA9IHRydWU7CisJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0lPX1dPUktFUl9DSEFO R0UpOworCX0KK30KKworLyoKKyAqIENhbGxlZCBieSBhIHdvcmtlciB3aGVuIHRoZSBxdWV1ZSBp cyBlbXB0eSwgdG8gdHJ5IHRvIHByZXZlbnQgYSBkZWxheWVkCisgKiByZWFjdGlvbiB0byBhIGJy aWVmIGJ1cnN0LiAgVGhpcyByYWNlcyBhZ2FpbnN0IHRoZSBwb3N0bWFzdGVyIGFjdGluZyBvbiB0 aGUKKyAqIG9sZCB2YWx1ZSBpZiBpdCB3YXMgcmVjZW50bHkgc2V0IHRvIHRydWUsIGJ1dCB0aGF0 J3MgT0ssIHRoZSBvcmRlcmluZyB3b3VsZAorICogYmUgaW5kZXRlcm1pbmF0ZSBhbnl3YXkgZXZl biBpZiB3ZSBjb3VsZCB1c2UgbG9ja3MgaW4gdGhlIHBvc3RtYXN0ZXIuCisgKi8KK3N0YXRpYyB2 b2lkCitwZ2Fpb193b3JrZXJfY2FuY2VsX25ld193b3JrZXIodm9pZCkKK3sKKwlpb193b3JrZXJf Y29udHJvbC0+bmV3X3dvcmtlcl9uZWVkZWQgPSBmYWxzZTsKK30KKworLyoKKyAqIENhbGxlZCBi eSB0aGUgcG9zdG1hc3RlciB0byBjaGVjayBpZiBhIG5ldyB3b3JrZXIgaXMgbmVlZGVkLgorICov Citib29sCitwZ2Fpb193b3JrZXJfdGVzdF9uZXdfd29ya2VyX25lZWRlZCh2b2lkKQoreworCXJl dHVybiBpb193b3JrZXJfY29udHJvbC0+bmV3X3dvcmtlcl9uZWVkZWQ7Cit9CisKKy8qCisgKiBD YWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgdG8gY2hlY2sgaWYgYSBuZXcgd29ya2VyIGlzIG5lZWRl ZCB3aGVuIGl0J3MgcmVhZHkKKyAqIHRvIGxhdW5jaCBvbmUsIGFuZCBjbGVhciB0aGUgZmxhZy4K KyAqLworYm9vbAorcGdhaW9fd29ya2VyX2NsZWFyX25ld193b3JrZXJfbmVlZGVkKHZvaWQpCit7 CisJYm9vbAkJcmVzdWx0OworCisJcmVzdWx0ID0gaW9fd29ya2VyX2NvbnRyb2wtPm5ld193b3Jr ZXJfbmVlZGVkOworCWlmIChyZXN1bHQpCisJCWlvX3dvcmtlcl9jb250cm9sLT5uZXdfd29ya2Vy X25lZWRlZCA9IGZhbHNlOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVpbnQ2NAor cGdhaW9fd29ya2VyX21hc2soaW50IHdvcmtlcikKK3sKKwlyZXR1cm4gVUlOVDY0X0MoMSkgPDwg d29ya2VyOworfQorCitzdGF0aWMgdm9pZAorcGdhaW9fd29ya2VyX2FkZCh1aW50NjQgKnNldCwg aW50IHdvcmtlcikKK3sKKwkqc2V0IHw9IHBnYWlvX3dvcmtlcl9tYXNrKHdvcmtlcik7Cit9CisK K3N0YXRpYyB2b2lkCitwZ2Fpb193b3JrZXJfcmVtb3ZlKHVpbnQ2NCAqc2V0LCBpbnQgd29ya2Vy KQoreworCSpzZXQgJj0gfnBnYWlvX3dvcmtlcl9tYXNrKHdvcmtlcik7Cit9CisKKyNpZmRlZiBV U0VfQVNTRVJUX0NIRUNLSU5HCitzdGF0aWMgYm9vbAorcGdhaW9fd29ya2VyX2luKHVpbnQ2NCBz ZXQsIGludCB3b3JrZXIpCit7CisJcmV0dXJuIChzZXQgJiBwZ2Fpb193b3JrZXJfbWFzayh3b3Jr ZXIpKSAhPSAwOworfQorI2VuZGlmCisKK3N0YXRpYyB1aW50NjQKK3BnYWlvX3dvcmtlcl9oaWdo ZXN0KHVpbnQ2NCBzZXQpCit7CisJcmV0dXJuIHBnX2xlZnRtb3N0X29uZV9wb3M2NChzZXQpOwor fQorCitzdGF0aWMgdWludDY0CitwZ2Fpb193b3JrZXJfbG93ZXN0KHVpbnQ2NCBzZXQpCit7CisJ cmV0dXJuIHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoc2V0KTsKK30KKworc3RhdGljIGludAorcGdh aW9fd29ya2VyX3BvcCh1aW50NjQgKnNldCkKK3sKKwlpbnQJCQl3b3JrZXI7CisKKwlBc3NlcnQo c2V0ICE9IDApOworCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9sb3dlc3QoKnNldCk7CisJcGdhaW9f d29ya2VyX3JlbW92ZShzZXQsIHdvcmtlcik7CisJcmV0dXJuIHdvcmtlcjsKK30KKwogc3RhdGlj IGludAogcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKHZvaWQpCiB7CisJdWludDY0CQlpZGxlX3dv cmtlcl9tYXNrOwogCWludAkJCXdvcmtlcjsKIAotCWlmIChpb193b3JrZXJfY29udHJvbC0+aWRs ZV93b3JrZXJfbWFzayA9PSAwKQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9kZShBaW9Xb3Jr ZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKworCS8qCisJICogV29ya2Vy cyBvbmx5IHdha2UgaGlnaGVyIG51bWJlcmVkIHdvcmtlcnMsIHRvIHRyeSB0byBlbmNvdXJhZ2Ug YW4KKwkgKiBvcmRlcmluZyBvZiB3YWtldXA6d29yayByYXRpb3MsIHJlZHVjaW5nIHNwdXJpb3Vz IHdha2V1cHMgaW4gbG93ZXIKKwkgKiBudW1iZXJlZCB3b3JrZXJzLgorCSAqLworCWlkbGVfd29y a2VyX21hc2sgPSBpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzazsKKwlpZiAoTXlJ b1dvcmtlcklkICE9IC0xKQorCQlpZGxlX3dvcmtlcl9tYXNrICY9IH4ocGdhaW9fd29ya2VyX21h c2soTXlJb1dvcmtlcklkKSAtIDEpOworCisJaWYgKGlkbGVfd29ya2VyX21hc2sgPT0gMCkKIAkJ cmV0dXJuIC0xOwogCiAJLyogRmluZCB0aGUgbG93ZXN0IGJpdCBwb3NpdGlvbiwgYW5kIGNsZWFy IGl0LiAqLwotCXdvcmtlciA9IHBnX3JpZ2h0bW9zdF9vbmVfcG9zNjQoaW9fd29ya2VyX2NvbnRy b2wtPmlkbGVfd29ya2VyX21hc2spOwotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9t YXNrICY9IH4oVUlOVDY0X0MoMSkgPDwgd29ya2VyKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRy b2wtPndvcmtlcnNbd29ya2VyXS5pbl91c2UpOworCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9sb3dl c3QoaWRsZV93b3JrZXJfbWFzayk7CisJcGdhaW9fd29ya2VyX3JlbW92ZSgmaW9fd29ya2VyX2Nv bnRyb2wtPmlkbGVfd29ya2VyX21hc2ssIHdvcmtlcik7CiAKIAlyZXR1cm4gd29ya2VyOwogfQog CisvKgorICogVHJ5IHRvIHdha2UgYSB3b3JrZXIgYnkgc2V0dGluZyBpdHMgbGF0Y2gsIHRvIHRl bGwgaXQgdGhlcmUgYXJlIElPcyB0bworICogcHJvY2VzcyBpbiB0aGUgc3VibWlzc2lvbiBxdWV1 ZS4KKyAqLworc3RhdGljIHZvaWQKK3BnYWlvX3dvcmtlcl93YWtlKGludCB3b3JrZXIpCit7CisJ UHJvY051bWJlcglwcm9jX251bWJlcjsKKworCS8qCisJICogSWYgdGhlIHNlbGVjdGVkIHdvcmtl ciBpcyBjb25jdXJyZW50bHkgZXhpdGluZywgdGhlbiBwZ2Fpb193b3JrZXJfZGllKCkKKwkgKiBo YWQgbm90IHlldCByZW1vdmVkIGl0IGFzIG9mIHdoZW4gd2Ugc2F3IGl0IGluIGlkbGVfd29ya2Vy X21hc2suIFRoYXQncworCSAqIE9LLCBiZWNhdXNlIGl0IHdpbGwgd2FrZSBhbGwgcmVtYWluaW5n IHdvcmtlcnMgdG8gY2xvc2Ugd2FrZXVwLXZzLWV4aXQKKwkgKiByYWNlczogKnNvbWVvbmUqIHdp bGwgc2VlIHRoZSBxdWV1ZWQgSU8uICBJZiB0aGVyZSBhcmUgbm8gd29ya2VycworCSAqIHJ1bm5p bmcsIHRoZSBwb3N0bWFzdGVyIHdpbGwgc3RhcnQgYSBuZXcgb25lLgorCSAqLworCXByb2NfbnVt YmVyID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbd29ya2VyXS5wcm9jX251bWJlcjsKKwlp ZiAocHJvY19udW1iZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJU2V0TGF0Y2goJkdldFBH UHJvY0J5TnVtYmVyKHByb2NfbnVtYmVyKS0+cHJvY0xhdGNoKTsKK30KKwogc3RhdGljIGJvb2wK IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2luc2VydChQZ0Fpb0hhbmRsZSAqaW9oKQog ewogCVBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlICpxdWV1ZTsKIAl1aW50MzIJCW5ld19oZWFk OwogCisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1 ZUxvY2ssIExXX0VYQ0xVU0lWRSkpOworCiAJcXVldWUgPSBpb193b3JrZXJfc3VibWlzc2lvbl9x dWV1ZTsKIAluZXdfaGVhZCA9IChxdWV1ZS0+aGVhZCArIDEpICYgKHF1ZXVlLT5zaXplIC0gMSk7 CiAJaWYgKG5ld19oZWFkID09IHF1ZXVlLT50YWlsKQpAQCAtMjA0LDYgKzM1MSw4IEBAIHBnYWlv X3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2NvbnN1bWUodm9pZCkKIAlQZ0Fpb1dvcmtlclN1Ym1p c3Npb25RdWV1ZSAqcXVldWU7CiAJdWludDMyCQlyZXN1bHQ7CiAKKwlBc3NlcnQoTFdMb2NrSGVs ZEJ5TWVJbk1vZGUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKSk7 CisKIAlxdWV1ZSA9IGlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlOwogCWlmIChxdWV1ZS0+dGFp bCA9PSBxdWV1ZS0+aGVhZCkKIAkJcmV0dXJuIFVJTlQzMl9NQVg7CQkvKiBlbXB0eSAqLwpAQCAt MjIwLDYgKzM2OSw4IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9uX3F1ZXVlX2RlcHRoKHZvaWQp CiAJdWludDMyCQloZWFkOwogCXVpbnQzMgkJdGFpbDsKIAorCUFzc2VydChMV0xvY2tIZWxkQnlN ZUluTW9kZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUpKTsKKwog CWhlYWQgPSBpb193b3JrZXJfc3VibWlzc2lvbl9xdWV1ZS0+aGVhZDsKIAl0YWlsID0gaW9fd29y a2VyX3N1Ym1pc3Npb25fcXVldWUtPnRhaWw7CiAKQEAgLTI0NCw5ICszOTUsOSBAQCBzdGF0aWMg dm9pZAogcGdhaW9fd29ya2VyX3N1Ym1pdF9pbnRlcm5hbChpbnQgbnVtX3N0YWdlZF9pb3MsIFBn QWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIHsKIAlQZ0Fpb0hhbmRsZSAqc3luY2hyb25vdXNfaW9z W1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKKwl1aW50MzIJCXF1ZXVlX2RlcHRoOworCWludAkJ CXdvcmtlciA9IC0xOwogCWludAkJCW5zeW5jID0gMDsKLQlMYXRjaAkgICAqd2FrZXVwID0gTlVM TDsKLQlpbnQJCQl3b3JrZXI7CiAKIAlBc3NlcnQobnVtX3N0YWdlZF9pb3MgPD0gUEdBSU9fU1VC TUlUX0JBVENIX1NJWkUpOwogCkBAIC0yNjEsNTEgKzQxMiw0OCBAQCBwZ2Fpb193b3JrZXJfc3Vi bWl0X2ludGVybmFsKGludCBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9z KQogCQkJICogd2UgY2FuIHRvIHdvcmtlcnMsIHRvIG1heGltaXplIGNvbmN1cnJlbmN5LgogCQkJ ICovCiAJCQlzeW5jaHJvbm91c19pb3NbbnN5bmMrK10gPSBzdGFnZWRfaW9zW2ldOwotCQkJY29u dGludWU7CiAJCX0KLQotCQlpZiAod2FrZXVwID09IE5VTEwpCisJCWVsc2UgaWYgKHdvcmtlciA9 PSAtMSkKIAkJewogCQkJLyogQ2hvb3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2Ug aGF2ZW4ndCBhbHJlYWR5LiAqLwogCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxl KCk7Ci0JCQlpZiAod29ya2VyID49IDApCi0JCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wt PndvcmtlcnNbd29ya2VyXS5sYXRjaDsKIAogCQkJcGdhaW9fZGVidWdfaW8oREVCVUc0LCBzdGFn ZWRfaW9zW2ldLAogCQkJCQkJICAgImNob29zaW5nIHdvcmtlciAlZCIsCiAJCQkJCQkgICB3b3Jr ZXIpOwogCQl9CiAJfQorCXF1ZXVlX2RlcHRoID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVl dWVfZGVwdGgoKTsKIAlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2sp OwogCi0JaWYgKHdha2V1cCkKLQkJU2V0TGF0Y2god2FrZXVwKTsKKwlpZiAod29ya2VyICE9IC0x KQorCQlwZ2Fpb193b3JrZXJfd2FrZSh3b3JrZXIpOworCWVsc2UKKwkJcGdhaW9fd29ya2VyX2Nv bnNpZGVyX25ld193b3JrZXIocXVldWVfZGVwdGgpOwogCiAJLyogUnVuIHdoYXRldmVyIGlzIGxl ZnQgc3luY2hyb25vdXNseS4gKi8KIAlmb3IgKGludCBpID0gMDsgaSA8IG5zeW5jOyArK2kpCiAJ ewotCQl3YWtldXAgPSBOVUxMOwotCiAJCS8qCiAJCSAqIEJldHdlZW4gc3luY2hyb25vdXMgSU8g b3BlcmF0aW9ucywgdHJ5IGFnYWluIHRvIGVucXVldWUgYXMgbWFueSBhcwogCQkgKiB3ZSBjYW4u CiAJCSAqLwogCQlpZiAoaSA+IDApCiAJCXsKLQkJCXdha2V1cCA9IE5VTEw7CisJCQl3b3JrZXIg PSAtMTsKIAogCQkJTFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBM V19FWENMVVNJVkUpOwogCQkJd2hpbGUgKGkgPCBuc3luYyAmJgogCQkJCSAgIHBnYWlvX3dvcmtl cl9zdWJtaXNzaW9uX3F1ZXVlX2luc2VydChzeW5jaHJvbm91c19pb3NbaV0pKQogCQkJewotCQkJ CWlmICh3YWtldXAgPT0gTlVMTCAmJiAod29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxl KCkpID49IDApCi0JCQkJCXdha2V1cCA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW3dvcmtl cl0ubGF0Y2g7CisJCQkJaWYgKHdvcmtlciA9PSAtMSkKKwkJCQkJd29ya2VyID0gcGdhaW9fd29y a2VyX2Nob29zZV9pZGxlKCk7CiAJCQkJaSsrOwogCQkJfQogCQkJTFdMb2NrUmVsZWFzZShBaW9X b3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKIAotCQkJaWYgKHdha2V1cCkKLQkJCQlTZXRMYXRj aCh3YWtldXApOworCQkJaWYgKHdvcmtlciAhPSAtMSkKKwkJCQlwZ2Fpb193b3JrZXJfd2FrZSh3 b3JrZXIpOwogCiAJCQlpZiAoaSA9PSBuc3luYykKIAkJCQlicmVhazsKQEAgLTMzNywxNCArNDg1 LDI3IEBAIHBnYWlvX3dvcmtlcl9zdWJtaXQodWludDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hh bmRsZSAqKnN0YWdlZF9pb3MpCiBzdGF0aWMgdm9pZAogcGdhaW9fd29ya2VyX2RpZShpbnQgY29k ZSwgRGF0dW0gYXJnKQogewotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVl TG9jaywgTFdfRVhDTFVTSVZFKTsKLQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNb TXlJb1dvcmtlcklkXS5pbl91c2UpOwotCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vy c1tNeUlvV29ya2VySWRdLmxhdGNoID09IE15TGF0Y2gpOworCXVpbnQ2NAkJbm90aWZ5X3NldDsK IAotCWlvX3dvcmtlcl9jb250cm9sLT5pZGxlX3dvcmtlcl9tYXNrICY9IH4oVUlOVDY0X0MoMSkg PDwgTXlJb1dvcmtlcklkKTsKLQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2Vy SWRdLmluX3VzZSA9IGZhbHNlOwotCWlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3Jr ZXJJZF0ubGF0Y2ggPSBOVUxMOworCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlwZ2Fpb193b3JrZXJfcmVtb3ZlKCZpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJfbWFzaywgTXlJb1dvcmtlcklkKTsKIAlMV0xvY2tSZWxlYXNl KEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOworCisJTFdMb2NrQWNxdWlyZShBaW9Xb3Jr ZXJDb250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wt PndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9PSBNeVByb2NOdW1iZXIpOworCWlv X3dvcmtlcl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0ucHJvY19udW1iZXIgPSBJTlZB TElEX1BST0NfTlVNQkVSOworCUFzc2VydChwZ2Fpb193b3JrZXJfaW4oaW9fd29ya2VyX2NvbnRy b2wtPndvcmtlcl9zZXQsIE15SW9Xb3JrZXJJZCkpOworCXBnYWlvX3dvcmtlcl9yZW1vdmUoJmlv X3dvcmtlcl9jb250cm9sLT53b3JrZXJfc2V0LCBNeUlvV29ya2VySWQpOworCW5vdGlmeV9zZXQg PSBpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldDsKKwlBc3NlcnQoaW9fd29ya2VyX2NvbnRy b2wtPm53b3JrZXJzID4gMCk7CisJaW9fd29ya2VyX2NvbnRyb2wtPm53b3JrZXJzLS07CisJQXNz ZXJ0KHBnX3BvcGNvdW50NjQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQpID09CisJCSAg IGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2Vycyk7CisJTFdMb2NrUmVsZWFzZShBaW9Xb3JrZXJD b250cm9sTG9jayk7CisKKwkvKiBOb3RpZnkgb3RoZXIgd29ya2VycyBvbiBwb29sIGNoYW5nZS4g Ki8KKwl3aGlsZSAobm90aWZ5X3NldCAhPSAwKQorCQlwZ2Fpb193b3JrZXJfd2FrZShwZ2Fpb193 b3JrZXJfcG9wKCZub3RpZnlfc2V0KSk7CiB9CiAKIC8qCkBAIC0zNTQsMzMgKzUxNSwzNyBAQCBw Z2Fpb193b3JrZXJfZGllKGludCBjb2RlLCBEYXR1bSBhcmcpCiBzdGF0aWMgdm9pZAogcGdhaW9f d29ya2VyX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JTXlJb1dvcmtlcklkID0gLTE7CisJdWludDY0CQl3 b3JrZXJfc2V0X2ludmVydGVkOworCXVpbnQ2NAkJb2xkX3dvcmtlcl9zZXQ7CiAKLQkvKgotCSAq IFhYWDogVGhpcyBjb3VsZCBkbyB3aXRoIG1vcmUgZmluZS1ncmFpbmVkIGxvY2tpbmcuIEJ1dCBp dCdzIGFsc28gbm90Ci0JICogdmVyeSBjb21tb24gZm9yIHRoZSBudW1iZXIgb2Ygd29ya2VycyB0 byBjaGFuZ2UgYXQgdGhlIG1vbWVudC4uLgotCSAqLwotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2Vy U3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlNeUlvV29ya2VySWQgPSAtMTsK IAotCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0lPX1dPUktFUlM7ICsraSkKKwlMV0xvY2tBY3F1 aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOworCXdvcmtlcl9zZXRfaW52 ZXJ0ZWQgPSB+aW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcl9zZXQ7CisJaWYgKHdvcmtlcl9zZXRf aW52ZXJ0ZWQgIT0gMCkKIAl7Ci0JCWlmICghaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0u aW5fdXNlKQotCQl7Ci0JCQlBc3NlcnQoaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbaV0ubGF0 Y2ggPT0gTlVMTCk7Ci0JCQlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0 cnVlOwotCQkJTXlJb1dvcmtlcklkID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCWVsc2UKLQkJCUFz c2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5sYXRjaCAhPSBOVUxMKTsKKwkJTXlJ b1dvcmtlcklkID0gcGdhaW9fd29ya2VyX2xvd2VzdCh3b3JrZXJfc2V0X2ludmVydGVkKTsKKwkJ aWYgKE15SW9Xb3JrZXJJZCA+PSBNQVhfSU9fV09SS0VSUykKKwkJCU15SW9Xb3JrZXJJZCA9IC0x OwogCX0KLQogCWlmIChNeUlvV29ya2VySWQgPT0gLTEpCiAJCWVsb2coRVJST1IsICJjb3VsZG4n dCBmaW5kIGEgZnJlZSB3b3JrZXIgc2xvdCIpOwogCi0JaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVf d29ya2VyX21hc2sgfD0gKFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7Ci0JaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5sYXRjaCA9IE15TGF0Y2g7Ci0JTFdMb2Nr UmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKKwlBc3NlcnQoaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jX251bWJlciA9PQorCQkgICBJTlZB TElEX1BST0NfTlVNQkVSKTsKKwlpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2Vy SWRdLnByb2NfbnVtYmVyID0gTXlQcm9jTnVtYmVyOworCisJb2xkX3dvcmtlcl9zZXQgPSBpb193 b3JrZXJfY29udHJvbC0+d29ya2VyX3NldDsKKwlBc3NlcnQoIXBnYWlvX3dvcmtlcl9pbihvbGRf d29ya2VyX3NldCwgTXlJb1dvcmtlcklkKSk7CisJcGdhaW9fd29ya2VyX2FkZCgmaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcl9zZXQsIE15SW9Xb3JrZXJJZCk7CisJaW9fd29ya2VyX2NvbnRyb2wt Pm53b3JrZXJzKys7CisJQXNzZXJ0KHBnX3BvcGNvdW50NjQoaW9fd29ya2VyX2NvbnRyb2wtPndv cmtlcl9zZXQpID09CisJCSAgIGlvX3dvcmtlcl9jb250cm9sLT5ud29ya2Vycyk7CisJTFdMb2Nr UmVsZWFzZShBaW9Xb3JrZXJDb250cm9sTG9jayk7CisKKwkvKiBOb3RpZnkgb3RoZXIgd29ya2Vy cyBvbiBwb29sIGNoYW5nZS4gKi8KKwl3aGlsZSAob2xkX3dvcmtlcl9zZXQgIT0gMCkKKwkJcGdh aW9fd29ya2VyX3dha2UocGdhaW9fd29ya2VyX3BvcCgmb2xkX3dvcmtlcl9zZXQpKTsKIAogCW9u X3NobWVtX2V4aXQocGdhaW9fd29ya2VyX2RpZSwgMCk7CiB9CkBAIC00MDYsMTQgKzU3MSw0NyBA QCBwZ2Fpb193b3JrZXJfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKQogCWVycmNvbnRleHQoIkkv TyB3b3JrZXIgZXhlY3V0aW5nIEkvTyBvbiBiZWhhbGYgb2YgcHJvY2VzcyAlZCIsIG93bmVyX3Bp ZCk7CiB9CiAKKy8qCisgKiBDaGVjayBpZiB0aGlzIGJhY2tlbmQgaXMgYWxsb3dlZCB0byB0aW1l IG91dCwgYW5kIHRodXMgc2hvdWxkIHVzZSBhCisgKiBub24taW5maW5pdGUgc2xlZXAgdGltZS4g IE9ubHkgdGhlIGhpZ2hlc3QtbnVtYmVyZWQgd29ya2VyIGlzIGFsbG93ZWQgdG8KKyAqIHRpbWUg b3V0LCBhbmQgb25seSBpZiB0aGUgcG9vbCBpcyBhYm92ZSBpb19taW5fd29ya2Vycy4gIFNlcmlh bGl6aW5nCisgKiB0aW1lb3V0cyBrZWVwcyBJRHMgaW4gYSByYW5nZSAwLi5OIHdpdGhvdXQgZ2Fw cywgYW5kIGF2b2lkcyB1bmRlcnNob290aW5nCisgKiBpb19taW5fd29ya2Vycy4KKyAqCisgKiBU aGUgcmVzdWx0IGlzIG9ubHkgaW5zdGFudGFuZW91c2x5IHRydWUgYW5kIG1heSBiZSB0ZW1wb3Jh cmlseSBpbmNvbnNpc3RlbnQKKyAqIGluIGRpZmZlcmVudCB3b3JrZXJzIGFyb3VuZCB0cmFuc2l0 aW9ucywgYnV0IGFsbCB3b3JrZXJzIGFyZSB3b2tlbiB1cCBvbgorICogcG9vbCBzaXplIG9yIEdV QyBjaGFuZ2VzIG1ha2luZyB0aGUgcmVzdWx0IGV2ZW50dWFsbHkgY29uc2lzdGVudC4KKyAqLwor c3RhdGljIGJvb2wKK3BnYWlvX3dvcmtlcl9jYW5fdGltZW91dCh2b2lkKQoreworCXVpbnQ2NAkJ d29ya2VyX3NldDsKKworCS8qIFNlcmlhbGl6ZSBhZ2FpbnN0IHBvb2wgc2l6ZWQgY2hhbmdlcy4g Ki8KKwlMV0xvY2tBY3F1aXJlKEFpb1dvcmtlckNvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCXdv cmtlcl9zZXQgPSBpb193b3JrZXJfY29udHJvbC0+d29ya2VyX3NldDsKKwlMV0xvY2tSZWxlYXNl KEFpb1dvcmtlckNvbnRyb2xMb2NrKTsKKworCWlmIChNeUlvV29ya2VySWQgIT0gcGdhaW9fd29y a2VyX2hpZ2hlc3Qod29ya2VyX3NldCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoTXlJb1dvcmtl cklkIDwgaW9fbWluX3dvcmtlcnMpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOwor fQorCiB2b2lkCiBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9idWY7CisJVGlt ZXN0YW1wVHogaWRsZV90aW1lb3V0X2FicyA9IDA7CisJaW50CQkJdGltZW91dF9ndWNfdXNlZCA9 IDA7CiAJUGdBaW9IYW5kbGUgKnZvbGF0aWxlIGVycm9yX2lvaCA9IE5VTEw7CiAJRXJyb3JDb250 ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2sgPSB7MH07CiAJdm9sYXRpbGUgaW50IGVycm9yX2Vycm5v ID0gMDsKIAljaGFyCQljbWRbMTI4XTsKKwlpbnQJCQlpb3MgPSAwOworCWludAkJCXdha2V1cHMg PSAwOwogCiAJTXlCYWNrZW5kVHlwZSA9IEJfSU9fV09SS0VSOwogCUF1eGlsaWFyeVByb2Nlc3NN YWluQ29tbW9uKCk7CkBAIC00ODIsMTAgKzY4MCw4IEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lk ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXdoaWxlICghU2h1dGRv d25SZXF1ZXN0UGVuZGluZykKIAl7CiAJCXVpbnQzMgkJaW9faW5kZXg7Ci0JCUxhdGNoCSAgICps YXRjaGVzW0lPX1dPUktFUl9XQUtFVVBfRkFOT1VUXTsKLQkJaW50CQkJbmxhdGNoZXMgPSAwOwot CQlpbnQJCQlud2FrZXVwcyA9IDA7Ci0JCWludAkJCXdvcmtlcjsKKwkJdWludDMyCQlxdWV1ZV9k ZXB0aDsKKwkJaW50CQkJd29ya2VyID0gLTE7CiAKIAkJLyoKIAkJICogVHJ5IHRvIGdldCBhIGpv YiB0byBkby4KQEAgLTQ5NCw0MCArNjkwLDQ4IEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkgKiB0byBlbnN1cmUgdGhh dCB3ZSBkb24ndCBzZWUgYW4gb3V0ZGF0ZWQgZGF0YSBpbiB0aGUgaGFuZGxlLgogCQkgKi8KIAkJ TFdMb2NrQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrLCBMV19FWENMVVNJVkUp OwotCQlpZiAoKGlvX2luZGV4ID0gcGdhaW9fd29ya2VyX3N1Ym1pc3Npb25fcXVldWVfY29uc3Vt ZSgpKSA9PSBVSU5UMzJfTUFYKQorCQlpb19pbmRleCA9IHBnYWlvX3dvcmtlcl9zdWJtaXNzaW9u X3F1ZXVlX2NvbnN1bWUoKTsKKwkJcXVldWVfZGVwdGggPSBwZ2Fpb193b3JrZXJfc3VibWlzc2lv bl9xdWV1ZV9kZXB0aCgpOworCQlpZiAoaW9faW5kZXggPT0gVUlOVDMyX01BWCkKIAkJewotCQkJ LyoKLQkJCSAqIE5vdGhpbmcgdG8gZG8uICBNYXJrIHNlbGYgaWRsZS4KLQkJCSAqCi0JCQkgKiBY WFg6IEludmVudCBzb21lIGtpbmQgb2YgYmFjayBwcmVzc3VyZSB0byByZWR1Y2UgdXNlbGVzcwot CQkJICogd2FrZXVwcz8KLQkJCSAqLwotCQkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2Vy X21hc2sgfD0gKFVJTlQ2NF9DKDEpIDw8IE15SW9Xb3JrZXJJZCk7CisJCQkvKiBOb3RoaW5nIHRv IGRvLiAgTWFyayBzZWxmIGlkbGUuICovCisJCQlwZ2Fpb193b3JrZXJfYWRkKCZpb193b3JrZXJf Y29udHJvbC0+aWRsZV93b3JrZXJfbWFzaywKKwkJCQkJCQkgTXlJb1dvcmtlcklkKTsKIAkJfQog CQllbHNlCiAJCXsKIAkJCS8qIEdvdCBvbmUuICBDbGVhciBpZGxlIGZsYWcuICovCi0JCQlpb193 b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJfbWFzayAmPSB+KFVJTlQ2NF9DKDEpIDw8IE15SW9X b3JrZXJJZCk7CisJCQlwZ2Fpb193b3JrZXJfcmVtb3ZlKCZpb193b3JrZXJfY29udHJvbC0+aWRs ZV93b3JrZXJfbWFzaywKKwkJCQkJCQkJTXlJb1dvcmtlcklkKTsKIAotCQkJLyogU2VlIGlmIHdl IGNhbiB3YWtlIHVwIHNvbWUgcGVlcnMuICovCi0JCQlud2FrZXVwcyA9IE1pbihwZ2Fpb193b3Jr ZXJfc3VibWlzc2lvbl9xdWV1ZV9kZXB0aCgpLAotCQkJCQkJICAgSU9fV09SS0VSX1dBS0VVUF9G QU5PVVQpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBud2FrZXVwczsgKytpKQotCQkJewotCQkJ CWlmICgod29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCkpIDwgMCkKLQkJCQkJYnJl YWs7Ci0JCQkJbGF0Y2hlc1tubGF0Y2hlcysrXSA9IGlvX3dvcmtlcl9jb250cm9sLT53b3JrZXJz W3dvcmtlcl0ubGF0Y2g7Ci0JCQl9CisJCQkvKgorCQkJICogU2VlIGlmIHdlIHNob3VsZCB3YWtl IHVwIGEgcGVlci4gIE9ubHkgZG8gdGhpcyBpZiB0aGlzIHdvcmtlcgorCQkJICogaXMgbm90IGV4 cGVyaWVuY2luZyBzcHVyaW91cyB3YWtldXBzIGl0c2VsZiwgdG8gZW5kIGEgY2hhaW4gb2YKKwkJ CSAqIHdhc3RlZCBzY2hlZHVsaW5nLgorCQkJICovCisJCQlpZiAocXVldWVfZGVwdGggPiAwICYm IHdha2V1cHMgPD0gaW9zKQorCQkJCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgp OwogCQl9CiAJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7CiAK LQkJZm9yIChpbnQgaSA9IDA7IGkgPCBubGF0Y2hlczsgKytpKQotCQkJU2V0TGF0Y2gobGF0Y2hl c1tpXSk7CisJCS8qIFByb3BhZ2F0ZSB3YWtldXBzLiAqLworCQlpZiAod29ya2VyICE9IC0xKQor CQkJcGdhaW9fd29ya2VyX3dha2Uod29ya2VyKTsKKwkJZWxzZSBpZiAod2FrZXVwcyA8PSBpb3Mp CisJCQlwZ2Fpb193b3JrZXJfY29uc2lkZXJfbmV3X3dvcmtlcihxdWV1ZV9kZXB0aCk7CiAKIAkJ aWYgKGlvX2luZGV4ICE9IFVJTlQzMl9NQVgpCiAJCXsKIAkJCVBnQWlvSGFuZGxlICppb2ggPSBO VUxMOwogCisJCQkvKiBDYW5jZWwgdGltZW91dCBhbmQgdXBkYXRlIHdha2V1cDp3b3JrIHJhdGlv LiAqLworCQkJaWRsZV90aW1lb3V0X2FicyA9IDA7CisJCQlpZiAoKytpb3MgPT0gUEdBSU9fV09S S0VSX1NUQVRTX01BWCkKKwkJCXsKKwkJCQlpb3MgLz0gMjsKKwkJCQl3YWtldXBzIC89IDI7CisJ CQl9CisKIAkJCWlvaCA9ICZwZ2Fpb19jdGwtPmlvX2hhbmRsZXNbaW9faW5kZXhdOwogCQkJZXJy b3JfaW9oID0gaW9oOwogCQkJZXJyY2FsbGJhY2suYXJnID0gaW9oOwpAQCAtNTkzLDggKzc5Nyw2 OSBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1 cF9kYXRhX2xlbikKIAkJfQogCQllbHNlCiAJCXsKLQkJCVdhaXRMYXRjaChNeUxhdGNoLCBXTF9M QVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAtMSwKLQkJCQkJICBXQUlUX0VWRU5UX0lP X1dPUktFUl9NQUlOKTsKKwkJCWludAkJCXRpbWVvdXRfbXM7CisKKwkJCS8qIENhbmNlbCBuZXcg d29ya2VyIGlmIHBlbmRpbmcuICovCisJCQlwZ2Fpb193b3JrZXJfY2FuY2VsX25ld193b3JrZXIo KTsKKworCQkJLyogQ29tcHV0ZSB0aGUgcmVtYWluaW5nIGFsbG93ZWQgaWRsZSB0aW1lLiAqLwor CQkJaWYgKGlvX3dvcmtlcl9pZGxlX3RpbWVvdXQgPT0gLTEpCisJCQl7CisJCQkJLyogTmV2ZXIg dGltZSBvdXQuICovCisJCQkJdGltZW91dF9tcyA9IC0xOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCVRpbWVzdGFtcFR6IG5vdyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCQkJCS8qIElm IHRoZSBHVUMgY2hhbmdlcywgcmVzZXQgdGltZXIuICovCisJCQkJaWYgKGlkbGVfdGltZW91dF9h YnMgIT0gMCAmJgorCQkJCQlpb193b3JrZXJfaWRsZV90aW1lb3V0ICE9IHRpbWVvdXRfZ3VjX3Vz ZWQpCisJCQkJCWlkbGVfdGltZW91dF9hYnMgPSAwOworCisJCQkJLyogT24gZmlyc3Qgc2xlZXAs IGNvbXB1dGUgYWJzb2x1dGUgdGltZW91dC4gKi8KKwkJCQlpZiAoaWRsZV90aW1lb3V0X2FicyA9 PSAwKQorCQkJCXsKKwkJCQkJaWRsZV90aW1lb3V0X2FicyA9CisJCQkJCQlUaW1lc3RhbXBUelBs dXNNaWxsaXNlY29uZHMobm93LAorCQkJCQkJCQkJCQkJCWlvX3dvcmtlcl9pZGxlX3RpbWVvdXQp OworCQkJCQl0aW1lb3V0X2d1Y191c2VkID0gaW9fd29ya2VyX2lkbGVfdGltZW91dDsKKwkJCQl9 CisKKwkJCQkvKgorCQkJCSAqIEFsbCB3b3JrZXJzIG1haW50YWluIHRoZSBhYnNvbHV0ZSB0aW1l b3V0IHZhbHVlLCBidXQgb25seQorCQkJCSAqIHRoZSBoaWdoZXN0IHdvcmtlciBjYW4gYWN0dWFs bHkgdGltZSBvdXQgYW5kIG9ubHkgaWYKKwkJCQkgKiBpb19taW5fd29ya2VycyBpcyBleGNlZWRl ZC4gIEFsbCBvdGhlcnMgd2FpdCBvbmx5IGZvcgorCQkJCSAqIGV4cGxpY2l0IHdha2V1cHMgY2F1 c2VkIGJ5IHF1ZXVlIGluc2VydGlvbiwgd2FrZXVwCisJCQkJICogcHJvcGFnYXRpb24sIGNoYW5n ZSBvZiBwb29sIHNpemUgKHBvc3NpYmx5IG1ha2luZyB0aGVtCisJCQkJICogaGlnaGVzdCksIG9y IEdVQyByZWxvYWQuCisJCQkJICovCisJCQkJaWYgKHBnYWlvX3dvcmtlcl9jYW5fdGltZW91dCgp KQorCQkJCQl0aW1lb3V0X21zID0KKwkJCQkJCVRpbWVzdGFtcERpZmZlcmVuY2VNaWxsaXNlY29u ZHMobm93LAorCQkJCQkJCQkJCQkJCQlpZGxlX3RpbWVvdXRfYWJzKTsKKwkJCQllbHNlCisJCQkJ CXRpbWVvdXRfbXMgPSAtMTsKKwkJCX0KKworCQkJaWYgKFdhaXRMYXRjaChNeUxhdGNoLCBXTF9M QVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwKKwkJCQkJCSAgdGlt ZW91dF9tcywKKwkJCQkJCSAgV0FJVF9FVkVOVF9JT19XT1JLRVJfTUFJTikgPT0gV0xfVElNRU9V VCkKKwkJCXsKKwkJCQkvKiBXTF9USU1FT1VUICovCisJCQkJaWYgKHBnYWlvX3dvcmtlcl9jYW5f dGltZW91dCgpKQorCQkJCQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49IGlkbGVfdGltZW91 dF9hYnMpCisJCQkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBXTF9MQVRD SF9TRVQgKi8KKwkJCQlpZiAoKyt3YWtldXBzID09IFBHQUlPX1dPUktFUl9TVEFUU19NQVgpCisJ CQkJeworCQkJCQlpb3MgLz0gMjsKKwkJCQkJd2FrZXVwcyAvPSAyOworCQkJCX0KKwkJCX0KIAkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CiAJCX0KIApAQCAtNjA0LDYgKzg2OSwxMCBAQCBJb1dvcmtl ck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK IAkJewogCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJvY2Vzc0NvbmZpZ0Zp bGUoUEdDX1NJR0hVUCk7CisKKwkJCS8qIElmIGlvX21heF93b3JrZXJzIGhhcyBiZWVuIGRlY3Jl YXNlZCwgZXhpdCBoaWdoZXN0IGZpcnN0LiAqLworCQkJaWYgKE15SW9Xb3JrZXJJZCA+PSBpb19t YXhfd29ya2VycykKKwkJCQlicmVhazsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91dGls cy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA0ZGE2ODMxMmI1Zi4uYzZjODEw N2ZlMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRf bmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFt ZXMudHh0CkBAIC0zNTIsNiArMzUyLDcgQEAgRFNNUmVnaXN0cnkJIldhaXRpbmcgdG8gcmVhZCBv ciB1cGRhdGUgdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSByZWdpc3RyeS4iCiBJbmplY3Rpb25Q b2ludAkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGlu amVjdGlvbiBwb2ludHMuIgogU2VyaWFsQ29udHJvbAkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0 ZSBzaGFyZWQgPGZpbGVuYW1lPnBnX3NlcmlhbDwvZmlsZW5hbWU+IHN0YXRlLiIKIEFpb1dvcmtl clN1Ym1pc3Npb25RdWV1ZQkiV2FpdGluZyB0byBhY2Nlc3MgQUlPIHdvcmtlciBzdWJtaXNzaW9u IHF1ZXVlLiIKK0Fpb1dvcmtlckNvbnRyb2wJIldhaXRpbmcgdG8gdXBkYXRlIEFJTyB3b3JrZXIg aW5mb3JtYXRpb24uIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5PVCBD SEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf dGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBkMTRi MTY3OGU3Zi4uZWNiMTZmYWNiNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC0zMzA2LDE0ICszMzA2LDUyIEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50 W10gPQogCX0sCiAKIAl7Ci0JCXsiaW9fd29ya2VycyIsCisJCXsiaW9fbWF4X3dvcmtlcnMiLAog CQkJUEdDX1NJR0hVUCwKIAkJCVJFU09VUkNFU19JTywKLQkJCWdldHRleHRfbm9vcCgiTnVtYmVy IG9mIElPIHdvcmtlciBwcm9jZXNzZXMsIGZvciBpb19tZXRob2Q9d29ya2VyLiIpLAorCQkJZ2V0 dGV4dF9ub29wKCJNYXhpbXVtIG51bWJlciBvZiBJTyB3b3JrZXIgcHJvY2Vzc2VzLCBmb3IgaW9f bWV0aG9kPXdvcmtlci4iKSwKIAkJCU5VTEwsCiAJCX0sCi0JCSZpb193b3JrZXJzLAotCQkzLCAx LCBNQVhfSU9fV09SS0VSUywKKwkJJmlvX21heF93b3JrZXJzLAorCQk4LCAxLCBNQVhfSU9fV09S S0VSUywKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsiaW9fbWluX3dvcmtlcnMi LAorCQkJUEdDX1NJR0hVUCwKKwkJCVJFU09VUkNFU19JTywKKwkJCWdldHRleHRfbm9vcCgiTWlu aW11bSBudW1iZXIgb2YgSU8gd29ya2VyIHByb2Nlc3NlcywgZm9yIGlvX21ldGhvZD13b3JrZXIu IiksCisJCQlOVUxMLAorCQl9LAorCQkmaW9fbWluX3dvcmtlcnMsCisJCTEsIDEsIE1BWF9JT19X T1JLRVJTLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJpb193b3JrZXJfaWRs ZV90aW1lb3V0IiwKKwkJCVBHQ19TSUdIVVAsCisJCQlSRVNPVVJDRVNfSU8sCisJCQlnZXR0ZXh0 X25vb3AoIk1heGltdW0gaWRsZSB0aW1lIGJlZm9yZSBJTyB3b3JrZXJzIGV4aXQsIGZvciBpb19t ZXRob2Q9d29ya2VyLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX01TCisJCX0sCisJCSZpb193 b3JrZXJfaWRsZV90aW1lb3V0LAorCQk2MCAqIDEwMDAsIC0xLCBJTlRfTUFYLAorCQlOVUxMLCBO VUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJpb193b3JrZXJfbGF1bmNoX2ludGVydmFsIiwKKwkJ CVBHQ19TSUdIVVAsCisJCQlSRVNPVVJDRVNfSU8sCisJCQlnZXR0ZXh0X25vb3AoIk1heGltdW0g aWRsZSB0aW1lIGJldHdlZW4gbGF1bmNoaW5nIElPIHdvcmtlcnMsIGZvciBpb19tZXRob2Q9d29y a2VyLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX01TCisJCX0sCisJCSZpb193b3JrZXJfbGF1 bmNoX2ludGVydmFsLAorCQk1MDAsIDAsIElOVF9NQVgsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9 LAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5k ZXggYTlkODI5MzQ3NGEuLjFkYTYzNDVhZDdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0yMTAsNyArMjEwLDEwIEBACiAJCQkJCSMgY2Fu IGV4ZWN1dGUgc2ltdWx0YW5lb3VzbHkKIAkJCQkJIyAtMSBzZXRzIGJhc2VkIG9uIHNoYXJlZF9i dWZmZXJzCiAJCQkJCSMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQotI2lvX3dvcmtlcnMgPSAz CQkJCSMgMS0zMjsKKyNpb19taW5fd29ya2VycyA9IDEJCQkjIDEtMzI7CisjaW9fbWF4X3dvcmtl cnMgPSA4CQkJIyAxLTMyOworI2lvX3dvcmtlcl9pZGxlX3RpbWVvdXQgPSA2MHMJCSMgbWluIDEw MG1zCisjaW9fd29ya2VyX2xhdW5jaF9pbnRlcnZhbCA9IDUwMG1zCSMgbWluIDBtcwogCiAjIC0g V29ya2VyIFByb2Nlc3NlcyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaW9f d29ya2VyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCmluZGV4IDdiZGU3ZTg5 YzhhLi5kZTljODAxMDllMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pb193b3Jr ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lvX3dvcmtlci5oCkBAIC0xNyw2ICsxNywx MyBAQAogCiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiAKLWV4dGVybiBQR0RMTElN UE9SVCBpbnQgaW9fd29ya2VyczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgaW9fbWluX3dvcmtl cnM7CitleHRlcm4gUEdETExJTVBPUlQgaW50IGlvX21heF93b3JrZXJzOworZXh0ZXJuIFBHRExM SU1QT1JUIGludCBpb193b3JrZXJfaWRsZV90aW1lb3V0OworZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBpb193b3JrZXJfbGF1bmNoX2ludGVydmFsOworCisvKiBJbnRlcmZhY2VzIHZpc2libGUgdG8g dGhlIHBvc3RtYXN0ZXIuICovCitleHRlcm4gYm9vbCBwZ2Fpb193b3JrZXJfdGVzdF9uZXdfd29y a2VyX25lZWRlZCh2b2lkKTsKK2V4dGVybiBib29sIHBnYWlvX3dvcmtlcl9jbGVhcl9uZXdfd29y a2VyX25lZWRlZCh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIElPX1dPUktFUl9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IGE5NjgxNzM4MTQ2Li5jMTgwMWQwODgzMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTg0LDMgKzg0LDQgQEAgUEdfTFdMT0NLKDUwLCBEU01S ZWdpc3RyeSkKIFBHX0xXTE9DSyg1MSwgSW5qZWN0aW9uUG9pbnQpCiBQR19MV0xPQ0soNTIsIFNl cmlhbENvbnRyb2wpCiBQR19MV0xPQ0soNTMsIEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSkKK1BH X0xXTE9DSyg1NCwgQWlvV29ya2VyQ29udHJvbCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcG1zaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAppbmRleCA0 MjhhYTNmZDY4YS4uMjg1OWE2MzYzNDkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cG1zaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAgLTM4LDYg KzM4LDcgQEAgdHlwZWRlZiBlbnVtCiAJUE1TSUdOQUxfUk9UQVRFX0xPR0ZJTEUsCS8qIHNlbmQg U0lHVVNSMSB0byBzeXNsb2dnZXIgdG8gcm90YXRlIGxvZ2ZpbGUgKi8KIAlQTVNJR05BTF9TVEFS VF9BVVRPVkFDX0xBVU5DSEVSLAkvKiBzdGFydCBhbiBhdXRvdmFjdXVtIGxhdW5jaGVyICovCiAJ UE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19XT1JLRVIsCS8qIHN0YXJ0IGFuIGF1dG92YWN1dW0gd29y a2VyICovCisJUE1TSUdOQUxfSU9fV09SS0VSX0NIQU5HRSwJLyogSU8gd29ya2VyIHBvb2wgY2hh bmdlICovCiAJUE1TSUdOQUxfQkFDS0dST1VORF9XT1JLRVJfQ0hBTkdFLAkvKiBiYWNrZ3JvdW5k IHdvcmtlciBzdGF0ZSBjaGFuZ2UgKi8KIAlQTVNJR05BTF9TVEFSVF9XQUxSRUNFSVZFUiwgLyog c3RhcnQgYSB3YWxyZWNlaXZlciAqLwogCVBNU0lHTkFMX0FEVkFOQ0VfU1RBVEVfTUFDSElORSwg LyogYWR2YW5jZSBwb3N0bWFzdGVyJ3Mgc3RhdGUgbWFjaGluZSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsIGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90LzAwMl9pb193b3JrZXJzLnBsCmluZGV4IGFmNWZhZTE1ZWE3Li5hMDI1 Mjg1Nzc5OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMl9pb193 b3JrZXJzLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDJfaW9fd29ya2Vy cy5wbApAQCAtMTQsNiArMTQsOSBAQCAkbm9kZS0+aW5pdCgpOwogJG5vZGUtPmFwcGVuZF9jb25m KAogCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxcSgKIGlvX21ldGhvZD13b3JrZXIKK2lvX3dvcmtlcl9p ZGxlX3RpbWVvdXQ9MG1zCitpb193b3JrZXJfbGF1bmNoX2ludGVydmFsPTBtcworaW9fbWF4X3dv cmtlcnM9MzIKICkpOwogCiAkbm9kZS0+c3RhcnQoKTsKQEAgLTMxLDcgKzM0LDcgQEAgc3ViIHRl c3RfbnVtYmVyX29mX2lvX3dvcmtlcnNfZHluYW1pYwogewogCW15ICRub2RlID0gc2hpZnQ7CiAK LQlteSAkcHJldl93b3JrZXJfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdT SE9XIGlvX3dvcmtlcnMnKTsKKwlteSAkcHJldl93b3JrZXJfY291bnQgPSAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyk7CiAKIAkjIFZlcmlmeSB0aGF0 IHdvcmtlciBjb3VudCBjYW4ndCBiZSBzZXQgdG8gMAogCWNoYW5nZV9udW1iZXJfb2ZfaW9fd29y a2Vycygkbm9kZSwgMCwgJHByZXZfd29ya2VyX2NvdW50LCAxKTsKQEAgLTYyLDIzICs2NSwyMyBA QCBzdWIgY2hhbmdlX251bWJlcl9vZl9pb193b3JrZXJzCiAJbXkgKCRyZXN1bHQsICRzdGRvdXQs ICRzdGRlcnIpOwogCiAJKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0KLQkgICRub2RlLT5w c3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTWVNURU0gU0VUIGlvX3dvcmtlcnMgPSAkd29ya2VyX2Nv dW50Iik7CisJICAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCAiQUxURVIgU1lTVEVNIFNFVCBpb19t aW5fd29ya2VycyA9ICR3b3JrZXJfY291bnQiKTsKIAkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdTRUxFQ1QgcGdfcmVsb2FkX2NvbmYoKScpOwogCiAJaWYgKCRleHBlY3RfZmFpbHVyZSkK IAl7CiAJCW9rKCAkc3RkZXJyID1+Ci0JCQkgIC8kd29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhl IHZhbGlkIHJhbmdlIGZvciBwYXJhbWV0ZXIgImlvX3dvcmtlcnMiLywKLQkJCSJ1cGRhdGluZyBu dW1iZXIgb2YgaW9fd29ya2VycyB0byAkd29ya2VyX2NvdW50IGZhaWxlZCwgYXMgZXhwZWN0ZWQi CisJCQkgIC8kd29ya2VyX2NvdW50IGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIGZvciBwYXJh bWV0ZXIgImlvX21pbl93b3JrZXJzIi8sCisJCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX21pbl93 b3JrZXJzIHRvICR3b3JrZXJfY291bnQgZmFpbGVkLCBhcyBleHBlY3RlZCIKIAkJKTsKIAogCQly ZXR1cm4gJHByZXZfd29ya2VyX2NvdW50OwogCX0KIAllbHNlCiAJewotCQlpcyggJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnU0hPVyBpb193b3JrZXJzJyksCisJCWlzKCAkbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdTSE9XIGlvX21pbl93b3JrZXJzJyksCiAJCQkkd29ya2VyX2Nv dW50LAotCQkJInVwZGF0aW5nIG51bWJlciBvZiBpb193b3JrZXJzIGZyb20gJHByZXZfd29ya2Vy X2NvdW50IHRvICR3b3JrZXJfY291bnQiCisJCQkidXBkYXRpbmcgbnVtYmVyIG9mIGlvX21pbl93 b3JrZXJzIGZyb20gJHByZXZfd29ya2VyX2NvdW50IHRvICR3b3JrZXJfY291bnQiCiAJCSk7CiAK IAkJY2hlY2tfaW9fd29ya2VyX2NvdW50KCRub2RlLCAkd29ya2VyX2NvdW50KTsKLS0gCjIuNDcu MgoK --0000000000004afb850639b46dc2--