Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mL7VK-0003QQ-Cf for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Aug 2021 17:24:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mL7VJ-0007ax-Am for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Aug 2021 17:24:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mL7VI-0007ap-To for pgsql-hackers@lists.postgresql.org; Tue, 31 Aug 2021 17:24:57 +0000 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mL7VF-0003GR-HA for pgsql-hackers@postgresql.org; Tue, 31 Aug 2021 17:24:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1630430693; x=1661966693; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=SNo6JFTI1vWTfKwpouoi5Gs42Et0vOE0re6fjgFxKu0=; b=vpJAQn/ZY6e57oefN2abo5EByzb3eR6LpfL1WIYMX6RdUCr0LdN8hRbN E3f38uiyM+PgjljJb2O7nnBCTGmHeXsswCq3CEFbQ6B8ScDsYPkUP8l9m GglOfcFEHSFwRlZ+OLEBE84KBcPa6TAYLUAVGzqfkn0ls9nIJQjQ6J+48 Q=; X-Amazon-filename: v4-0001-wal-segment-pre-allocation.patch X-IronPort-AV: E=Sophos;i="5.84,366,1620691200"; d="scan'208,223";a="156411970" Subject: Re: Pre-allocating WAL files Thread-Topic: Pre-allocating WAL files Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-2c-87a10be6.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-9102.sea19.amazon.com with ESMTP; 31 Aug 2021 17:24:50 +0000 Received: from EX13MTAUWB001.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-2c-87a10be6.us-west-2.amazon.com (Postfix) with ESMTPS id 492C4A1A51; Tue, 31 Aug 2021 17:24:50 +0000 (UTC) Received: from EX13D03UWC003.ant.amazon.com (10.43.162.79) by EX13MTAUWB001.ant.amazon.com (10.43.161.249) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 31 Aug 2021 17:24:49 +0000 Received: from EX13D03UWC004.ant.amazon.com (10.43.162.49) by EX13D03UWC003.ant.amazon.com (10.43.162.79) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 31 Aug 2021 17:24:49 +0000 Received: from EX13D03UWC004.ant.amazon.com ([10.43.162.49]) by EX13D03UWC004.ant.amazon.com ([10.43.162.49]) with mapi id 15.00.1497.023; Tue, 31 Aug 2021 17:24:49 +0000 From: "Bossart, Nathan" To: vignesh C CC: Andres Freund , "pgsql-hackers@postgresql.org" Thread-Index: AQHXWav8+6ha4BKnPEG53jEY0XwfWasIN++AgCyQ/oCAWSiUAA== Date: Tue, 31 Aug 2021 17:24:49 +0000 Message-ID: <0AF7CB14-F9CD-43FD-81F2-03CDB22C5137@amazon.com> References: <20201225200953.jjkrytlrzojbndh5@alap3.anarazel.de> <265B06BA-7B16-4C1A-BE1A-1451D22A1F83@amazon.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.161.224] Content-Type: multipart/mixed; boundary="_002_0AF7CB14F9CD43FD81F203CDB22C5137amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_0AF7CB14F9CD43FD81F203CDB22C5137amazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 T24gOC82LzIxLCAxOjI3IFBNLCAiQm9zc2FydCwgTmF0aGFuIiA8Ym9zc2FydG5AYW1hem9uLmNv bT4gd3JvdGU6DQo+IEhlcmUncyBhIG5ld2VyIHJlYmFzZWQgdmVyc2lvbiBvZiB0aGUgcGF0Y2gu DQoNClJlYmFzaW5nIGFnYWluIHRvIGtlZXAgaHR0cDovL2NvbW1pdGZlc3QuY3B1dHViZS5vcmcv IGhhcHB5Lg0KDQpOYXRoYW4NCg0K --_002_0AF7CB14F9CD43FD81F203CDB22C5137amazoncom_ Content-Type: application/octet-stream; name="v4-0001-wal-segment-pre-allocation.patch" Content-Description: v4-0001-wal-segment-pre-allocation.patch Content-Disposition: attachment; filename="v4-0001-wal-segment-pre-allocation.patch"; size=44778; creation-date="Tue, 31 Aug 2021 17:24:49 GMT"; modification-date="Tue, 31 Aug 2021 17:24:49 GMT" Content-ID: <1DA6C5160D8BBE44A7ADE4B80330EADF@amazon.com> Content-Transfer-Encoding: base64 RnJvbSBlNjUwZDEzMDk4MDQ5OWJlODI5ZWRkNTA3Mjc1YTI1ZTdmOGZiZThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXRoYW4gQm9zc2FydCA8Ym9zc2FydG5AYW1hem9uLmNvbT4K RGF0ZTogVHVlLCAzMSBBdWcgMjAyMSAxNzowNzowNCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjQg MS8xXSB3YWwgc2VnbWVudCBwcmUtYWxsb2NhdGlvbgoKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwgICAgICAgICAgICAgICAgICAgICAgfCAgMjMgKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYyAgICAgICAgICAgICB8IDIyNiArKysrKysrKystLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgICAgICAgICAgIHwgIDQ1ICsrKysKIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5jICAgICAgICB8IDMxNSArKysrKysrKysrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jICAgICAg ICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvZmQuYyAgICAgICAgICAgICAg ICAgfCAxMTUgKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVz LnR4dCAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgICAgICAgICAgICAgICAg ICB8ICAxMiArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg fCAgIDEgKwogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMgICAgICAgICB8ICAx OSArLQogc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgIHwgICA0 ICstCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMgICAgICAgICAgICAgfCAgNDgg KysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgICAgICAgIHwgICA1 ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyAr CiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaCAgICAgICAgfCAgMjEgKysK IHNyYy9pbmNsdWRlL3N0b3JhZ2UvZmQuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBz cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgMTEgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICAgICAgICB8ICAgMyArLQogMjQg ZmlsZXMgY2hhbmdlZCwgNzY1IGluc2VydGlvbnMoKyksIDExMSBkZWxldGlvbnMoLSkKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5oCgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDJjMzFjMzVhNmIuLjkyNjgwYjczYTcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTMyMDMs NiArMzIwMywyOSBAQCBpbmNsdWRlX2RpciAnY29uZi5kJwogICAgICAgPC9saXN0aXRlbT4KICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXdhbC1hbGxv Y2F0b3ItbWF4LXNpemUiIHhyZWZsYWJlbD0id2FsX2FsbG9jYXRvcl9tYXhfc2l6ZSI+CisgICAg ICA8dGVybT48dmFybmFtZT53YWxfYWxsb2NhdG9yX21heF9zaXplPC92YXJuYW1lPiAoPHR5cGU+ aW50ZWdlcjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJu YW1lPndhbF9hbGxvY2F0b3JfbWF4X3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBX QUwgdG8gcHJlLWFsbG9jYXRlIGZvciB1c2Ugd2hlbiBhIG5ldyBXQUwgc2VnbWVudAorICAgICAg ICBtdXN0IGJlIGluaXRpYWxpemVkLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byBhIHNpemUg bGVzcyB0aGFuIHRoZSBXQUwKKyAgICAgICAgc2VnbWVudCBzaXplIGRpc2FibGVzIHRoaXMgYmVo YXZpb3IuICBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMgNjQgbWVnYWJ5dGVzCisgICAgICAgICg8bGl0 ZXJhbD42NE1CPC9saXRlcmFsPikuICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQgaW4g dGhlCisgICAgICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9y IG9uIHRoZSBzZXJ2ZXIgY29tbWFuZCBsaW5lLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxw YXJhPgorICAgICAgICBXQUwgcHJlLWFsbG9jYXRpb24gbWF5IGltcHJvdmUgcGVyZm9ybWFuY2Ug aW4gc2NlbmFyaW9zIHdoZXJlIG5ldyBXQUwKKyAgICAgICAgc2VnbWVudHMgbXVzdCBiZSBjcmVh dGVkIChlLmcuLCBkdXJpbmcgY2hlY2twb2ludHMgd2hlbiBXQUwgc2VnbWVudHMKKyAgICAgICAg Y2Fubm90IGJlIHJlY3ljbGVkKS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtd2FsLWJ1 ZmZlcnMiIHhyZWZsYWJlbD0id2FsX2J1ZmZlcnMiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+d2Fs X2J1ZmZlcnM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKICAgICAgIDxpbmRleHRl cm0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggMjQxNjVhYjAzZS4uOTQ3ZDI3NTgy ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1 ZGUgInBvcnQvcGdfaW92ZWMuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9zdGFydHVwLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWxf YWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9iYXNlYmFja3VwLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bC5oIgpAQCAtNzIzLDYgKzcyNCwxMyBAQCB0eXBlZGVmIHN0cnVjdCBYTG9nQ3RsRGF0YQogCSAq LwogCVhMb2dSZWNQdHIJbGFzdEZwd0Rpc2FibGVSZWNQdHI7CiAKKwkvKgorCSAqIG51bWJlciBv ZiBwcmUtYWxsb2NhdGVkIFdBTCBzZWdtZW50cyBpbiBwZ193YWwvcHJlYWxsb2NhdGVkX3NlZ21l bnRzCisJICoKKwkgKiBQcm90ZWN0ZWQgYnkgV0FMUHJlYWxsb2NhdGlvbkxvY2suCisJICovCisJ aW50IG51bV9wcmVhbGxvY19zZWdzOworCiAJc2xvY2tfdAkJaW5mb19sY2s7CQkvKiBsb2NrcyBz aGFyZWQgdmFyaWFibGVzIHNob3duIGFib3ZlICovCiAKIAkvKgpAQCAtMzMxMSwxMSArMzMxOSwx MCBAQCBzdGF0aWMgaW50CiBYTG9nRmlsZUluaXRJbnRlcm5hbChYTG9nU2VnTm8gbG9nc2Vnbm8s IGJvb2wgKmFkZGVkLCBjaGFyICpwYXRoKQogewogCWNoYXIJCXRtcHBhdGhbTUFYUEdQQVRIXTsK LQlQR0FsaWduZWRYTG9nQmxvY2sgemJ1ZmZlcjsKIAlYTG9nU2VnTm8JaW5zdGFsbGVkX3NlZ25v OwogCVhMb2dTZWdObwltYXhfc2Vnbm87CiAJaW50CQkJZmQ7Ci0JaW50CQkJc2F2ZV9lcnJubzsK Kwlib29sCQlmb3VuZCA9IGZhbHNlOwogCiAJWExvZ0ZpbGVQYXRoKHBhdGgsIFRoaXNUaW1lTGlu ZUlELCBsb2dzZWdubywgd2FsX3NlZ21lbnRfc2l6ZSk7CiAKQEAgLTMzMzUsMTE1ICszMzQyLDQ1 IEBAIFhMb2dGaWxlSW5pdEludGVybmFsKFhMb2dTZWdObyBsb2dzZWdubywgYm9vbCAqYWRkZWQs IGNoYXIgKnBhdGgpCiAJCXJldHVybiBmZDsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSBhbiBlbXB0 eSAoYWxsIHplcm9lcykgc2VnbWVudC4gIE5PVEU6IGl0IGlzIHBvc3NpYmxlIHRoYXQKLQkgKiBh bm90aGVyIHByb2Nlc3MgaXMgZG9pbmcgdGhlIHNhbWUgdGhpbmcuICBJZiBzbywgd2Ugd2lsbCBl bmQgdXAKLQkgKiBwcmUtY3JlYXRpbmcgYW4gZXh0cmEgbG9nIHNlZ21lbnQuICBUaGF0IHNlZW1z IE9LLCBhbmQgYmV0dGVyIHRoYW4KLQkgKiBob2xkaW5nIHRoZSBsb2NrIHRocm91Z2hvdXQgdGhp cyBsZW5ndGh5IHByb2Nlc3MuCisJICogVHJ5IHRvIHVzZSBhIHByZS1hbGxvY2F0ZWQgc2VnbWVu dCwgaWYgb25lIGV4aXN0cy4gIElmIG5vbmUgYXJlCisJICogYXZhaWxhYmxlLCB3ZSBmYWxsIGJh Y2sgdG8gY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBvbiBvdXIgb3duLgorCSAqCisJICogTm90ZSB0 aGF0IHdlIHN0aWxsIGxvb2sgZm9yIGEgcHJlLWFsbG9jYXRlZCBzZWdtZW50IGV2ZW4gaWYgdGhl IHByZS0KKwkgKiBhbGxvY2F0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQgdmlhIHRoZSBH VUNzLiAgVGhpcyBlbnN1cmVzIHRoYXQgYW55CisJICogcHJlLWFsbG9jYXRlZCBzZWdtZW50cyBs ZWZ0IG92ZXIgYWZ0ZXIgdHVybmluZyBvZmYgdGhlIHByZS1hbGxvY2F0aW9uCisJICogZnVuY3Rp b25hbGl0eSBhcmUgZXZlbnR1YWxseSB1c2VkIHVwLgogCSAqLwotCWVsb2coREVCVUcyLCAiY3Jl YXRpbmcgYW5kIGZpbGxpbmcgbmV3IFdBTCBmaWxlIik7Ci0KLQlzbnByaW50Zih0bXBwYXRoLCBN QVhQR1BBVEgsIFhMT0dESVIgIi94bG9ndGVtcC4lZCIsIChpbnQpIGdldHBpZCgpKTsKLQotCXVu bGluayh0bXBwYXRoKTsKLQotCS8qIGRvIG5vdCB1c2UgZ2V0X3N5bmNfYml0KCkgaGVyZSAtLS0g d2FudCB0byBmc3luYyBvbmx5IGF0IGVuZCBvZiBmaWxsICovCi0JZmQgPSBCYXNpY09wZW5GaWxl KHRtcHBhdGgsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBQR19CSU5BUlkpOwotCWlmIChm ZCA8IDApCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks Ci0JCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLCB0bXBwYXRo KSkpOwotCi0JbWVtc2V0KHpidWZmZXIuZGF0YSwgMCwgWExPR19CTENLU1opOwotCi0JcGdzdGF0 X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfV0FMX0lOSVRfV1JJVEUpOwotCXNhdmVfZXJy bm8gPSAwOwotCWlmICh3YWxfaW5pdF96ZXJvKQorCUxXTG9ja0FjcXVpcmUoV0FMUHJlYWxsb2Nh dGlvbkxvY2ssIExXX0VYQ0xVU0lWRSk7CisJaWYgKFhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdz ID4gMCkKIAl7Ci0JCXN0cnVjdCBpb3ZlYyBpb3ZbUEdfSU9WX01BWF07Ci0JCWludAkJCWJsb2Nr czsKLQotCQkvKgotCQkgKiBaZXJvLWZpbGwgdGhlIGZpbGUuICBXaXRoIHRoaXMgc2V0dGluZywg d2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkgdG8KLQkJICogZW5zdXJlIHRoYXQgYWxsIHRoZSBmaWxl IHNwYWNlIGhhcyByZWFsbHkgYmVlbiBhbGxvY2F0ZWQuICBPbgotCQkgKiBwbGF0Zm9ybXMgdGhh dCBhbGxvdyAiaG9sZXMiIGluIGZpbGVzLCBqdXN0IHNlZWtpbmcgdG8gdGhlIGVuZAotCQkgKiBk b2Vzbid0IGFsbG9jYXRlIGludGVybWVkaWF0ZSBzcGFjZS4gIFRoaXMgd2F5LCB3ZSBrbm93IHRo YXQgd2UKLQkJICogaGF2ZSBhbGwgdGhlIHNwYWNlIGFuZCAoYWZ0ZXIgdGhlIGZzeW5jIGJlbG93 KSB0aGF0IGFsbCB0aGUKLQkJICogaW5kaXJlY3QgYmxvY2tzIGFyZSBkb3duIG9uIGRpc2suICBU aGVyZWZvcmUsIGZkYXRhc3luYygyKSBvcgotCQkgKiBPX0RTWU5DIHdpbGwgYmUgc3VmZmljaWVu dCB0byBzeW5jIGZ1dHVyZSB3cml0ZXMgdG8gdGhlIGxvZyBmaWxlLgotCQkgKi8KLQotCQkvKiBQ cmVwYXJlIHRvIHdyaXRlIG91dCBhIGxvdCBvZiBjb3BpZXMgb2Ygb3VyIHplcm8gYnVmZmVyIGF0 IG9uY2UuICovCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Rob2YoaW92KTsgKytpKQotCQl7 Ci0JCQlpb3ZbaV0uaW92X2Jhc2UgPSB6YnVmZmVyLmRhdGE7Ci0JCQlpb3ZbaV0uaW92X2xlbiA9 IFhMT0dfQkxDS1NaOwotCQl9Ci0KLQkJLyogTG9vcCwgd3JpdGluZyBhcyBtYW55IGJsb2NrcyBh cyB3ZSBjYW4gZm9yIGVhY2ggc3lzdGVtIGNhbGwuICovCi0JCWJsb2NrcyA9IHdhbF9zZWdtZW50 X3NpemUgLyBYTE9HX0JMQ0tTWjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja3M7KQotCQl7 Ci0JCQlpbnQJCQlpb3ZjbnQgPSBNaW4oYmxvY2tzIC0gaSwgbGVuZ3Rob2YoaW92KSk7Ci0JCQlv ZmZfdAkJb2Zmc2V0ID0gaSAqIFhMT0dfQkxDS1NaOwotCi0JCQlpZiAocGdfcHdyaXRldl93aXRo X3JldHJ5KGZkLCBpb3YsIGlvdmNudCwgb2Zmc2V0KSA8IDApCi0JCQl7Ci0JCQkJc2F2ZV9lcnJu byA9IGVycm5vOwotCQkJCWJyZWFrOwotCQkJfQorCQllbG9nKERFQlVHMiwgInVzaW5nIHByZS1h bGxvY2F0ZWQgV0FMIGZpbGUiKTsKIAotCQkJaSArPSBpb3ZjbnQ7Ci0JCX0KKwkJZm91bmQgPSB0 cnVlOworCQlYTG9nQ3RsLT5udW1fcHJlYWxsb2Nfc2Vncy0tOworCQlzbnByaW50Zih0bXBwYXRo LCBNQVhQR1BBVEgsICIlcy9wcmVhbGxvY2F0ZWRfc2VnbWVudHMveGxvZ3RlbXAuJWQiLAorCQkJ CSBYTE9HRElSLCBYTG9nQ3RsLT5udW1fcHJlYWxsb2Nfc2Vncyk7CiAJfQotCWVsc2UKKworCWlm ICghZm91bmQpCiAJewogCQkvKgotCQkgKiBPdGhlcndpc2UsIHNlZWtpbmcgdG8gdGhlIGVuZCBh bmQgd3JpdGluZyBhIHNvbGl0YXJ5IGJ5dGUgaXMKLQkJICogZW5vdWdoLgorCQkgKiBXZSdyZSBu b3QgdXNpbmcgYSBwcmUtYWxsb2NhdGVkIHNlZ21lbnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBr ZWVwCisJCSAqIGhvbGRpbmcgdGhlIFdBTFByZWFsbG9jYXRpb25Mb2NrLgogCQkgKi8KLQkJZXJy bm8gPSAwOwotCQlpZiAocGdfcHdyaXRlKGZkLCB6YnVmZmVyLmRhdGEsIDEsIHdhbF9zZWdtZW50 X3NpemUgLSAxKSAhPSAxKQotCQl7Ci0JCQkvKiBpZiB3cml0ZSBkaWRuJ3Qgc2V0IGVycm5vLCBh c3N1bWUgbm8gZGlzayBzcGFjZSAqLwotCQkJc2F2ZV9lcnJubyA9IGVycm5vID8gZXJybm8gOiBF Tk9TUEM7Ci0JCX0KLQl9Ci0JcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOworCQlMV0xvY2tSZWxl YXNlKFdBTFByZWFsbG9jYXRpb25Mb2NrKTsKIAotCWlmIChzYXZlX2Vycm5vKQotCXsKIAkJLyoK LQkJICogSWYgd2UgZmFpbCB0byBtYWtlIHRoZSBmaWxlLCBkZWxldGUgaXQgdG8gcmVsZWFzZSBk aXNrIHNwYWNlCisJCSAqIEluaXRpYWxpemUgYW4gZW1wdHkgKGFsbCB6ZXJvZXMpIHNlZ21lbnQu ICBOT1RFOiBpdCBpcyBwb3NzaWJsZSB0aGF0CisJCSAqIGFub3RoZXIgcHJvY2VzcyBpcyBkb2lu ZyB0aGUgc2FtZSB0aGluZy4gIElmIHNvLCB3ZSB3aWxsIGVuZCB1cAorCQkgKiBwcmUtY3JlYXRp bmcgYW4gZXh0cmEgbG9nIHNlZ21lbnQuICBUaGF0IHNlZW1zIE9LLCBhbmQgYmV0dGVyIHRoYW4K KwkJICogaG9sZGluZyB0aGUgbG9jayB0aHJvdWdob3V0IHRoaXMgbGVuZ3RoeSBwcm9jZXNzLgog CQkgKi8KLQkJdW5saW5rKHRtcHBhdGgpOwotCi0JCWNsb3NlKGZkKTsKKwkJZWxvZyhERUJVRzIs ICJjcmVhdGluZyBhbmQgZmlsbGluZyBuZXcgV0FMIGZpbGUiKTsKIAotCQllcnJubyA9IHNhdmVf ZXJybm87Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgdG1w cGF0aCkpKTsKKwkJc25wcmludGYodG1wcGF0aCwgTUFYUEdQQVRILCBYTE9HRElSICIveGxvZ3Rl bXAuJWQiLCAoaW50KSBnZXRwaWQoKSk7CisJCUNyZWF0ZUVtcHR5V2FsU2VnbWVudCh0bXBwYXRo KTsKIAl9CiAKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9XQUxfSU5JVF9T WU5DKTsKLQlpZiAocGdfZnN5bmMoZmQpICE9IDApCi0JewotCQlpbnQJCQlzYXZlX2Vycm5vID0g ZXJybm87Ci0KLQkJY2xvc2UoZmQpOwotCQllcnJubyA9IHNhdmVfZXJybm87Ci0JCWVyZXBvcnQo RVJST1IsCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291 bGQgbm90IGZzeW5jIGZpbGUgXCIlc1wiOiAlbSIsIHRtcHBhdGgpKSk7Ci0JfQotCXBnc3RhdF9y ZXBvcnRfd2FpdF9lbmQoKTsKLQotCWlmIChjbG9zZShmZCkgIT0gMCkKLQkJZXJlcG9ydChFUlJP UiwKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBu b3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwgdG1wcGF0aCkpKTsKLQogCS8qCiAJICogTm93IG1v dmUgdGhlIHNlZ21lbnQgaW50byBwbGFjZSB3aXRoIGl0cyBmaW5hbCBuYW1lLiAgQ29wZSB3aXRo CiAJICogcG9zc2liaWxpdHkgdGhhdCBzb21lb25lIGVsc2UgaGFzIGNyZWF0ZWQgdGhlIGZpbGUg d2hpbGUgd2Ugd2VyZQpAQCAtMzQ2NCw3ICszNDAxLDcgQEAgWExvZ0ZpbGVJbml0SW50ZXJuYWwo WExvZ1NlZ05vIGxvZ3NlZ25vLCBib29sICphZGRlZCwgY2hhciAqcGF0aCkKIAlpZiAoSW5zdGFs bFhMb2dGaWxlU2VnbWVudCgmaW5zdGFsbGVkX3NlZ25vLCB0bXBwYXRoLCB0cnVlLCBtYXhfc2Vn bm8pKQogCXsKIAkJKmFkZGVkID0gdHJ1ZTsKLQkJZWxvZyhERUJVRzIsICJkb25lIGNyZWF0aW5n IGFuZCBmaWxsaW5nIG5ldyBXQUwgZmlsZSIpOworCQllbG9nKERFQlVHMiwgImRvbmUgaW5zdGFs bGluZyBuZXcgV0FMIGZpbGUiKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM0NzcsNiArMzQxNCwxOCBA QCBYTG9nRmlsZUluaXRJbnRlcm5hbChYTG9nU2VnTm8gbG9nc2Vnbm8sIGJvb2wgKmFkZGVkLCBj aGFyICpwYXRoKQogCQllbG9nKERFQlVHMiwgImFiYW5kb25lZCBuZXcgV0FMIGZpbGUiKTsKIAl9 CiAKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyBhIHByZS1hbGxvY2F0ZWQgc2VnbWVudCwgd2Un dmUgYmVlbiBob2xkaW5nIG9udG8gdGhlCisJICogV0FMUHJlYWxsb2NhdGlvbkxvY2sgYWxsIHRo aXMgdGltZSBzbyB0aGF0IHRoZSBXQUwgQWxsb2NhdG9yIHByb2Nlc3MKKwkgKiBjYW4ndCBvdmVy d3JpdGUgdGhlIGZpbGUgYmVmb3JlIHdlJ3ZlIGluc3RhbGxlZCBpdC4KKwkgKgorCSAqIFdoaWxl IHdlJ3JlIGF0IGl0LCBhbHNvIHRyeSB0byB3YWtlIHVwIHRoZSBXQUwgYWxsb2NhdG9yIGVhcmx5 IHNvIHRoYXQgaXQKKwkgKiBjYW4gZ2V0IGEganVtcCBzdGFydCBvbiBhbGxvY2F0aW5nIG5ldyBz ZWdtZW50cyBpZiBwb3NzaWJsZS4KKwkgKi8KKwlpZiAoZm91bmQpCisJCUxXTG9ja1JlbGVhc2Uo V0FMUHJlYWxsb2NhdGlvbkxvY2spOworCVJlcXVlc3RXYWxQcmVhbGxvY2F0aW9uKCk7CisKIAly ZXR1cm4gLTE7CiB9CiAKQEAgLTQzMzMsOCArNDI4Miw4IEBAIFJlbW92ZVhsb2dGaWxlKGNvbnN0 IGNoYXIgKnNlZ25hbWUsIFhMb2dTZWdObyByZWN5Y2xlU2VnTm8sCiB9CiAKIC8qCi0gKiBWZXJp Znkgd2hldGhlciBwZ193YWwgYW5kIHBnX3dhbC9hcmNoaXZlX3N0YXR1cyBleGlzdC4KLSAqIElm IHRoZSBsYXR0ZXIgZG9lcyBub3QgZXhpc3QsIHJlY3JlYXRlIGl0LgorICogVmVyaWZ5IHdoZXRo ZXIgcGdfd2FsLCBwZ193YWwvYXJjaGl2ZV9zdGF0dXMgYW5kIHBnX3dhbC9wcmVhbGxvY2F0ZWRf c2VnbWVudHMKKyAqIGV4aXN0LiAgSWYgZWl0aGVyIG9mIHRoZSBsYXR0ZXIgdHdvIGRvIG5vdCBl eGlzdCwgcmVjcmVhdGUgaXQuCiAgKgogICogSXQgaXMgbm90IHRoZSBnb2FsIG9mIHRoaXMgZnVu Y3Rpb24gdG8gdmVyaWZ5IHRoZSBjb250ZW50cyBvZiB0aGVzZQogICogZGlyZWN0b3JpZXMsIGJ1 dCB0byBoZWxwIGluIGNhc2VzIHdoZXJlIHNvbWVvbmUgaGFzIHBlcmZvcm1lZCBhIGNsdXN0ZXIK QEAgLTQzNzcsNiArNDMyNiwyNiBAQCBWYWxpZGF0ZVhMT0dEaXJlY3RvcnlTdHJ1Y3R1cmUodm9p ZCkKIAkJCQkJKGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBtaXNzaW5nIGRpcmVjdG9yeSBcIiVz XCI6ICVtIiwKIAkJCQkJCQlwYXRoKSkpOwogCX0KKworCS8qIENoZWNrIGZvciBwcmVhbGxvY2F0 ZWRfc2VnbWVudHMgKi8KKwlzbnByaW50ZihwYXRoLCBNQVhQR1BBVEgsIFhMT0dESVIgIi9wcmVh bGxvY2F0ZWRfc2VnbWVudHMiKTsKKwlpZiAoc3RhdChwYXRoLCAmc3RhdF9idWYpID09IDApCisJ eworCQkvKiBDaGVjayBmb3Igd2VpcmQgY2FzZXMgd2hlcmUgaXQgZXhpc3RzIGJ1dCBpc24ndCBh IGRpcmVjdG9yeSAqLworCQlpZiAoIVNfSVNESVIoc3RhdF9idWYuc3RfbW9kZSkpCisJCQllcmVw b3J0KEZBVEFMLAorCQkJCQkoZXJybXNnKCJyZXF1aXJlZCBXQUwgZGlyZWN0b3J5IFwiJXNcIiBk b2VzIG5vdCBleGlzdCIsCisJCQkJCQkJcGF0aCkpKTsKKwl9CisJZWxzZQorCXsKKwkJZXJlcG9y dChMT0csCisJCQkJKGVycm1zZygiY3JlYXRpbmcgbWlzc2luZyBXQUwgZGlyZWN0b3J5IFwiJXNc IiIsIHBhdGgpKSk7CisJCWlmIChNYWtlUEdEaXJlY3RvcnkocGF0aCkgPCAwKQorCQkJZXJlcG9y dChGQVRBTCwKKwkJCQkJKGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBtaXNzaW5nIGRpcmVjdG9y eSBcIiVzXCI6ICVtIiwKKwkJCQkJCQlwYXRoKSkpOworCX0KIH0KIAogLyoKQEAgLTU0MTcsNiAr NTM4Niw5IEBAIFhMT0dTaG1lbUluaXQodm9pZCkKIAlYTG9nQ3RsLT5lYXJsaWVzdFNlZ0JvdW5k YXJ5RW5kUHRyID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJWExvZ0N0bC0+bGF0ZXN0U2VnQm91bmRh cnkgPSBNYXhYTG9nU2VnTm87CiAJWExvZ0N0bC0+bGF0ZXN0U2VnQm91bmRhcnlFbmRQdHIgPSBJ bnZhbGlkWExvZ1JlY1B0cjsKKworCS8qIHByb3RlY3RlZCBieSBXQUxQcmVhbGxvY2F0aW9uTG9j ayAqLworCVhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzID0gMDsKIH0KIAogLyoKQEAgLTEzMTkx LDMgKzEzMTYzLDU1IEBAIFhMb2dSZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSh2b2lkKQogewogCWRv UmVxdWVzdFdhbFJlY2VpdmVyUmVwbHkgPSB0cnVlOwogfQorCitpbnQKK0dldE51bVByZWFsbG9j YXRlZFdhbFNlZ3Modm9pZCkKK3sKKwlpbnQgcmV0OworCisJTFdMb2NrQWNxdWlyZShXQUxQcmVh bGxvY2F0aW9uTG9jaywgTFdfU0hBUkVEKTsKKwlyZXQgPSBYTG9nQ3RsLT5udW1fcHJlYWxsb2Nf c2VnczsKKwlMV0xvY2tSZWxlYXNlKFdBTFByZWFsbG9jYXRpb25Mb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3ZvaWQKK1NldE51bVByZWFsbG9jYXRlZFdhbFNlZ3MoaW50IGkpCit7CisJTFdM b2NrQWNxdWlyZShXQUxQcmVhbGxvY2F0aW9uTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlYTG9nQ3Rs LT5udW1fcHJlYWxsb2Nfc2VncyA9IGk7CisJTFdMb2NrUmVsZWFzZShXQUxQcmVhbGxvY2F0aW9u TG9jayk7Cit9CisKKy8qCisgKiBJbnN0YWxsUHJlYWxsb2NhdGVkV2FsU2VnCisgKgorICogUmVu YW1lcyB0aGUgZmlsZSBhdCAicGF0aCIgdG8gdGhlIG5leHQgb3BlbiBwcmUtYWxsb2NhdGVkIHNl Z21lbnQgc2xvdCBhbmQKKyAqIGJ1bXBzIHVwIFhMb2dDdGwtPm51bV9wcmVhbGxvY19zZWdzLgor ICovCit2b2lkCitJbnN0YWxsUHJlYWxsb2NhdGVkV2FsU2VnKGNvbnN0IGNoYXIgKnBhdGgpCit7 CisJY2hhcgluZXdwYXRoW01BWFBHUEFUSF07CisKKwlMV0xvY2tBY3F1aXJlKFdBTFByZWFsbG9j YXRpb25Mb2NrLCBMV19FWENMVVNJVkUpOworCisJc25wcmludGYobmV3cGF0aCwgTUFYUEdQQVRI LCAiJXMvcHJlYWxsb2NhdGVkX3NlZ21lbnRzL3hsb2d0ZW1wLiVkIiwKKwkJCSBYTE9HRElSLCBY TG9nQ3RsLT5udW1fcHJlYWxsb2Nfc2Vncyk7CisJKHZvaWQpIGR1cmFibGVfcmVuYW1lKHBhdGgs IG5ld3BhdGgsIEVSUk9SKTsKKwlYTG9nQ3RsLT5udW1fcHJlYWxsb2Nfc2VncysrOworCisJTFdM b2NrUmVsZWFzZShXQUxQcmVhbGxvY2F0aW9uTG9jayk7Cit9CisKKy8qCisgKiBSZXF1ZXN0IHRo YXQgdGhlIFdBTCBhbGxvY2F0b3Igd2FrZSB1cCBlYXJseS4KKyAqLwordm9pZAorUmVxdWVzdFdh bFByZWFsbG9jYXRpb24odm9pZCkKK3sKKwlpZiAoUHJvY0dsb2JhbC0+d2FsQWxsb2NhdG9yTGF0 Y2ggJiYKKwkJV2FsUHJlYWxsb2NhdGlvbkVuYWJsZWQoKSkKKwkJU2V0TGF0Y2goUHJvY0dsb2Jh bC0+d2FsQWxsb2NhdG9yTGF0Y2gpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKaW5kZXggNzg3 YzZhMmMzYi4uZDY5YWRhMGM0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlCkBAIC0yNSw2ICsy NSw3IEBAIE9CSlMgPSBcCiAJcG9zdG1hc3Rlci5vIFwKIAlzdGFydHVwLm8gXAogCXN5c2xvZ2dl ci5vIFwKKwl3YWxfYWxsb2NhdG9yLm8gXAogCXdhbHdyaXRlci5vCiAKIGluY2x1ZGUgJCh0b3Bf c3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV4cHJvY2Vzcy5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNz LmMKaW5kZXggNzQ1MmY5MDhiMi4uODNmYmViYzRkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhw cm9jZXNzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nl c3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9zdGFydHVwLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC04MCw2ICs4MSw5 IEBAIEF1eGlsaWFyeVByb2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpCiAJCWNhc2UgV2Fs UmVjZWl2ZXJQcm9jZXNzOgogCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1JFQ0VJVkVSOwogCQkJ YnJlYWs7CisJCWNhc2UgV2FsQWxsb2NhdG9yUHJvY2VzczoKKwkJCU15QmFja2VuZFR5cGUgPSBC X1dBTF9BTExPQ0FUT1I7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJz b21ldGhpbmcgaGFzIGdvbmUgd3JvbmciKTsKIAkJCU15QmFja2VuZFR5cGUgPSBCX0lOVkFMSUQ7 CkBAIC0xNjIsNiArMTY2LDEwIEBAIEF1eGlsaWFyeVByb2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1 eHR5cGUpCiAJCQlXYWxSZWNlaXZlck1haW4oKTsKIAkJCXByb2NfZXhpdCgxKTsKIAorCQljYXNl IFdhbEFsbG9jYXRvclByb2Nlc3M6CisJCQlXYWxBbGxvY2F0b3JNYWluKCk7CisJCQlwcm9jX2V4 aXQoMSk7CisKIAkJZGVmYXVsdDoKIAkJCWVsb2coUEFOSUMsICJ1bnJlY29nbml6ZWQgcHJvY2Vz cyB0eXBlOiAlZCIsIChpbnQpIE15QXV4UHJvY1R5cGUpOwogCQkJcHJvY19leGl0KDEpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA5YzJjOTg2MTRhLi41ZWQ2NTYxYjY2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtMjUxLDYgKzI1MSw3IEBAIHN0YXRp YyBwaWRfdCBTdGFydHVwUElEID0gMCwKIAkJCUNoZWNrcG9pbnRlclBJRCA9IDAsCiAJCQlXYWxX cml0ZXJQSUQgPSAwLAogCQkJV2FsUmVjZWl2ZXJQSUQgPSAwLAorCQkJV2FsQWxsb2NhdG9yUElE ID0gMCwKIAkJCUF1dG9WYWNQSUQgPSAwLAogCQkJUGdBcmNoUElEID0gMCwKIAkJCVBnU3RhdFBJ RCA9IDAsCkBAIC01NTcsNiArNTU4LDcgQEAgc3RhdGljIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlS ZW1vdmUoQmFja2VuZCAqYm4pOwogI2RlZmluZSBTdGFydENoZWNrcG9pbnRlcigpCQlTdGFydENo aWxkUHJvY2VzcyhDaGVja3BvaW50ZXJQcm9jZXNzKQogI2RlZmluZSBTdGFydFdhbFdyaXRlcigp CQlTdGFydENoaWxkUHJvY2VzcyhXYWxXcml0ZXJQcm9jZXNzKQogI2RlZmluZSBTdGFydFdhbFJl Y2VpdmVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFdhbFJlY2VpdmVyUHJvY2VzcykKKyNkZWZpbmUg U3RhcnRXYWxBbGxvY2F0b3IoKQkJU3RhcnRDaGlsZFByb2Nlc3MoV2FsQWxsb2NhdG9yUHJvY2Vz cykKIAogLyogTWFjcm9zIHRvIGNoZWNrIGV4aXQgc3RhdHVzIG9mIGEgY2hpbGQgcHJvY2VzcyAq LwogI2RlZmluZSBFWElUX1NUQVRVU18wKHN0KSAgKChzdCkgPT0gMCkKQEAgLTE3OTQsNiArMTc5 NiwxMyBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCWlmIChXYWxXcml0ZXJQSUQgPT0gMCAmJiBwbVN0 YXRlID09IFBNX1JVTikKIAkJCVdhbFdyaXRlclBJRCA9IFN0YXJ0V2FsV3JpdGVyKCk7CiAKKwkJ LyoKKwkJICogSWYgd2UgaGF2ZSBsb3N0IHRoZSBXQUwgYWxsb2NhdG9yIHByb2Nlc3MsIHRyeSB0 byBzdGFydCBhIG5ldyBvbmUuCisJCSAqLworCQlpZiAoV2FsQWxsb2NhdG9yUElEID09IDAgJiYK KwkJCShwbVN0YXRlID09IFBNX1JVTiB8fCBwbVN0YXRlID09IFBNX0hPVF9TVEFOREJZKSkKKwkJ CVdhbEFsbG9jYXRvclBJRCA9IFN0YXJ0V2FsQWxsb2NhdG9yKCk7CisKIAkJLyoKIAkJICogSWYg d2UgaGF2ZSBsb3N0IHRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyLCB0cnkgdG8gc3RhcnQgYSBuZXcg b25lLiBXZQogCQkgKiBkb24ndCB3YW50IGF1dG92YWN1dW0gdG8gcnVuIGluIGJpbmFyeSB1cGdy YWRlIG1vZGUgYmVjYXVzZQpAQCAtMjcwOSw2ICsyNzE4LDggQEAgU0lHSFVQX2hhbmRsZXIoU0lH TkFMX0FSR1MpCiAJCQlzaWduYWxfY2hpbGQoV2FsV3JpdGVyUElELCBTSUdIVVApOwogCQlpZiAo V2FsUmVjZWl2ZXJQSUQgIT0gMCkKIAkJCXNpZ25hbF9jaGlsZChXYWxSZWNlaXZlclBJRCwgU0lH SFVQKTsKKwkJaWYgKFdhbEFsbG9jYXRvclBJRCAhPSAwKQorCQkJc2lnbmFsX2NoaWxkKFdhbEFs bG9jYXRvclBJRCwgU0lHSFVQKTsKIAkJaWYgKEF1dG9WYWNQSUQgIT0gMCkKIAkJCXNpZ25hbF9j aGlsZChBdXRvVmFjUElELCBTSUdIVVApOwogCQlpZiAoUGdBcmNoUElEICE9IDApCkBAIC0zMDM2 LDYgKzMwNDcsOCBAQCByZWFwZXIoU0lHTkFMX0FSR1MpCiAJCQkJQmdXcml0ZXJQSUQgPSBTdGFy dEJhY2tncm91bmRXcml0ZXIoKTsKIAkJCWlmIChXYWxXcml0ZXJQSUQgPT0gMCkKIAkJCQlXYWxX cml0ZXJQSUQgPSBTdGFydFdhbFdyaXRlcigpOworCQkJaWYgKFdhbEFsbG9jYXRvclBJRCA9PSAw KQorCQkJCVdhbEFsbG9jYXRvclBJRCA9IFN0YXJ0V2FsQWxsb2NhdG9yKCk7CiAKIAkJCS8qCiAJ CQkgKiBMaWtld2lzZSwgc3RhcnQgb3RoZXIgc3BlY2lhbCBjaGlsZHJlbiBhcyBuZWVkZWQuICBJ biBhIHJlc3RhcnQKQEAgLTMxNjMsNiArMzE3NiwyMCBAQCByZWFwZXIoU0lHTkFMX0FSR1MpCiAJ CQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIFdhcyBpdCB0aGUgV0FMIGFsbG9jYXRvcj8g IE5vcm1hbCBleGl0IGNhbiBiZSBpZ25vcmVkOyB3ZSdsbCBzdGFydCBhCisJCSAqIG5ldyBvbmUg YXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBwb3N0bWFzdGVyJ3MgbWFpbiBsb29wLCBpZgor CQkgKiBuZWNlc3NhcnkuICBBbnkgb3RoZXIgZXhpdCBjb25kaXRpb24gaXMgdHJlYXRlZCBhcyBh IGNyYXNoLgorCQkgKi8KKwkJaWYgKHBpZCA9PSBXYWxBbGxvY2F0b3JQSUQpCisJCXsKKwkJCVdh bEFsbG9jYXRvclBJRCA9IDA7CisJCQlpZiAoIUVYSVRfU1RBVFVTXzAoZXhpdHN0YXR1cykpCisJ CQkJSGFuZGxlQ2hpbGRDcmFzaChwaWQsIGV4aXRzdGF0dXMsCisJCQkJCQkJCSBfKCJXQUwgQWxs b2NhdG9yIHByb2Nlc3MiKSk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIFdhcyBp dCB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlcj8JTm9ybWFsIGV4aXQgY2FuIGJlIGlnbm9yZWQ7IHdl J2xsCiAJCSAqIHN0YXJ0IGEgbmV3IG9uZSBhdCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIHBv c3RtYXN0ZXIncyBtYWluCkBAIC0zNjMxLDYgKzM2NTgsMTggQEAgSGFuZGxlQ2hpbGRDcmFzaChp bnQgcGlkLCBpbnQgZXhpdHN0YXR1cywgY29uc3QgY2hhciAqcHJvY25hbWUpCiAJCXNpZ25hbF9j aGlsZChXYWxSZWNlaXZlclBJRCwgKFNlbmRTdG9wID8gU0lHU1RPUCA6IFNJR1FVSVQpKTsKIAl9 CiAKKwkvKiBUYWtlIGNhcmUgb2YgdGhlIFdBTCBhbGxvY2F0b3IgdG9vICovCisJaWYgKHBpZCA9 PSBXYWxBbGxvY2F0b3JQSUQpCisJCVdhbEFsbG9jYXRvclBJRCA9IDA7CisJZWxzZSBpZiAoV2Fs QWxsb2NhdG9yUElEICE9IDAgJiYgdGFrZV9hY3Rpb24pCisJeworCQllcmVwb3J0KERFQlVHMiwK KwkJCQkoZXJybXNnX2ludGVybmFsKCJzZW5kaW5nICVzIHRvIHByb2Nlc3MgJWQiLAorCQkJCQkJ CQkgKFNlbmRTdG9wID8gIlNJR1NUT1AiIDogIlNJR1FVSVQiKSwKKwkJCQkJCQkJIChpbnQpIFdh bEFsbG9jYXRvclBJRCkpKTsKKwkJc2lnbmFsX2NoaWxkKFdhbEFsbG9jYXRvclBJRCwgKFNlbmRT dG9wID8gU0lHU1RPUCA6IFNJR1FVSVQpKTsKKwl9CisKIAkvKiBUYWtlIGNhcmUgb2YgdGhlIGF1 dG92YWN1dW0gbGF1bmNoZXIgdG9vICovCiAJaWYgKHBpZCA9PSBBdXRvVmFjUElEKQogCQlBdXRv VmFjUElEID0gMDsKQEAgLTM4MTgsNiArMzg1Nyw4IEBAIFBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUo dm9pZCkKIAkJCXNpZ25hbF9jaGlsZChTdGFydHVwUElELCBTSUdURVJNKTsKIAkJaWYgKFdhbFJl Y2VpdmVyUElEICE9IDApCiAJCQlzaWduYWxfY2hpbGQoV2FsUmVjZWl2ZXJQSUQsIFNJR1RFUk0p OworCQlpZiAoV2FsQWxsb2NhdG9yUElEICE9IDApCisJCQlzaWduYWxfY2hpbGQoV2FsQWxsb2Nh dG9yUElELCBTSUdURVJNKTsKIAkJLyogY2hlY2twb2ludGVyLCBhcmNoaXZlciwgc3RhdHMsIGFu ZCBzeXNsb2dnZXIgbWF5IGNvbnRpbnVlIGZvciBub3cgKi8KIAogCQkvKiBOb3cgdHJhbnNpdGlv biB0byBQTV9XQUlUX0JBQ0tFTkRTIHN0YXRlIHRvIHdhaXQgZm9yIHRoZW0gdG8gZGllICovCkBA IC0zODQ4LDYgKzM4ODksNyBAQCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCQkoQ2hl Y2twb2ludGVyUElEID09IDAgfHwKIAkJCSAoIUZhdGFsRXJyb3IgJiYgU2h1dGRvd24gPCBJbW1l ZGlhdGVTaHV0ZG93bikpICYmCiAJCQlXYWxXcml0ZXJQSUQgPT0gMCAmJgorCQkJV2FsQWxsb2Nh dG9yUElEID09IDAgJiYKIAkJCUF1dG9WYWNQSUQgPT0gMCkKIAkJewogCQkJaWYgKFNodXRkb3du ID49IEltbWVkaWF0ZVNodXRkb3duIHx8IEZhdGFsRXJyb3IpCkBAIC0zOTQxLDYgKzM5ODMsNyBA QCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpCiAJCQlBc3NlcnQoQmdXcml0ZXJQSUQgPT0g MCk7CiAJCQlBc3NlcnQoQ2hlY2twb2ludGVyUElEID09IDApOwogCQkJQXNzZXJ0KFdhbFdyaXRl clBJRCA9PSAwKTsKKwkJCUFzc2VydChXYWxBbGxvY2F0b3JQSUQgPT0gMCk7CiAJCQlBc3NlcnQo QXV0b1ZhY1BJRCA9PSAwKTsKIAkJCS8qIHN5c2xvZ2dlciBpcyBub3QgY29uc2lkZXJlZCBoZXJl ICovCiAJCQlwbVN0YXRlID0gUE1fTk9fQ0hJTERSRU47CkBAIC00MTQ5LDYgKzQxOTIsOCBAQCBU ZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKQogCQlzaWduYWxfY2hpbGQoV2FsV3JpdGVyUElE LCBzaWduYWwpOwogCWlmIChXYWxSZWNlaXZlclBJRCAhPSAwKQogCQlzaWduYWxfY2hpbGQoV2Fs UmVjZWl2ZXJQSUQsIHNpZ25hbCk7CisJaWYgKFdhbEFsbG9jYXRvclBJRCAhPSAwKQorCQlzaWdu YWxfY2hpbGQoV2FsQWxsb2NhdG9yUElELCBzaWduYWwpOwogCWlmIChBdXRvVmFjUElEICE9IDAp CiAJCXNpZ25hbF9jaGlsZChBdXRvVmFjUElELCBzaWduYWwpOwogCWlmIChQZ0FyY2hQSUQgIT0g MCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMzhjZWJmNzk1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2FsX2FsbG9jYXRvci5jCkBAIC0wLDAgKzEsMzE1IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWxfYWxsb2NhdG9yLmMKKyAqCisgKiBUaGUgV0FMIGFs bG9jYXRvciBpcyBuZXcgYXMgb2YgUG9zdGdyZXMgMTUuICBJdCBhdHRlbXB0cyB0byBrZWVwIHJl Z3VsYXIKKyAqIGJhY2tlbmRzIGZyb20gaGF2aW5nIHRvIGFsbG9jYXRlIG5ldyBXQUwgc2VnbWVu dHMuICBFdmVuIHdoZW4KKyAqIHdhbF9yZWN5Y2xlIGlzIGVuYWJsZWQsIHByZS1hbGxvY2F0aW5n IFdBTCBzZWdtZW50cyBjYW4geWllbGQKKyAqIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJv dmVtZW50cyBpbiBjZXJ0YWluIHNjZW5hcmlvcy4gIE5vdGUgdGhhdAorICogcmVndWxhciBiYWNr ZW5kcyBhcmUgc3RpbGwgZW1wb3dlcmVkIHRvIGNyZWF0ZSBuZXcgV0FMIHNlZ21lbnRzIGlmIHRo ZQorICogV0FMIGFsbG9jYXRvciBmYWlscyB0byBnZW5lcmF0ZSBlbm91Z2ggbmV3IHNlZ21lbnRz LgorICoKKyAqIFRoZSBXQUwgYWxsb2NhdG9yIGlzIGNvbnRyb2xsZWQgYnkgb25lIHBhcmFtZXRl cjogd2FsX2FsbG9jYXRvcl9tYXhfc2l6ZS4KKyAqIHdhbF9hbGxvY2F0b3JfbWF4X3NpemUgc3Bl Y2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBXQUwgdG8gcHJlLQorICogYWxsb2NhdGUuICBJ ZiB0aGlzIHZhbHVlIGlzIG5vdCBkaXZpc2libGUgYnkgdGhlIFdBTCBzZWdtZW50IHNpemUsIGZl d2VyCisgKiBXQUwgc2VnbWVudHMgd2lsbCBiZSBwcmUtYWxsb2NhdGVkLgorICoKKyAqIFRoZSBX QUwgYWxsb2NhdG9yIGlzIHN0YXJ0ZWQgYnkgdGhlIHBvc3RtYXN0ZXIgYXMgc29vbiBhcyB0aGUg c3RhcnR1cAorICogc3VicHJvY2VzcyBmaW5pc2hlcywgb3IgYXMgc29vbiBhcyByZWNvdmVyeSBi ZWdpbnMgaWYgd2UgYXJlIGRvaW5nCisgKiBhcmNoaXZlIHJlY292ZXJ5LiAgSXQgcmVtYWlucyBh bGl2ZSB1bnRpbCB0aGUgcG9zdG1hc3RlciBjb21tYW5kcyBpdCB0bworICogdGVybWluYXRlLiAg Tm9ybWFsIHRlcm1pbmF0aW9uIGlzIGJ5IFNJR1RFUk0sIHdoaWNoIGluc3RydWN0cyB0aGUKKyAq IFdBTCBhbGxvY2F0b3IgdG8gZXhpdCgwKS4gIEVtZXJnZW5jeSB0ZXJtaW5hdGlvbiBpcyBieSBT SUdRVUlUOyBsaWtlIGFueQorICogYmFja2VuZCwgdGhlIFdBTCBhbGxvY2F0b3Igd2lsbCBzaW1w bHkgYWJvcnQgYW5kIGV4aXQgb24gU0lHUVVJVC4KKyAqCisgKiBJZiB0aGUgV0FMIGFsbG9jYXRv ciBleGl0cyB1bmV4cGVjdGVkbHksIHRoZSBwb3N0bWFzdGVyIHRyZWF0cyB0aGF0IHRoZQorICog c2FtZSBhcyBhIGJhY2tlbmQgY3Jhc2g6IHNoYXJlZCBtZW1vcnkgbWF5IGJlIGNvcnJ1cHRlZCwg c28gcmVtYWluaW5nCisgKiBiYWNrZW5kcyBzaG91bGQgYmUga2lsbGVkIGJ5IFNJR1FVSVQgYW5k IHRoZW4gYSByZWNvdmVyeSBjeWNsZSBzdGFydGVkLgorICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5 cmlnaHQgKGMpIDE5OTYtMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93 YWxfYWxsb2NhdG9yLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSAiYWNjZXNzL3hs b2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYnBx L3Bxc2lnbmFsLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9p bnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaCIKKyNpbmNs dWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3Zhcmlh YmxlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgi CisjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK KyNpbmNsdWRlICJzdG9yYWdlL3Byb2NzaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobWVt LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKworI2RlZmluZSBXQUxfQUxMT0NfVElNRU9VVF9T ICg2MCkKKworLyoKKyAqIEdVQyBwYXJhbWV0ZXJzCisgKi8KK2ludAkJCXdhbF9hbGxvY19tYXhf c2l6ZV9tYiA9IDY0OworCitzdGF0aWMgdm9pZCBEb1dhbFByZUFsbG9jYXRpb24odm9pZCk7Citz dGF0aWMgdm9pZCBTY2FuRm9yRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2b2lkKTsKKwor LyoKKyAqIE1haW4gZW50cnkgcG9pbnQgZm9yIFdBTCBhbGxvY2F0b3IgcHJvY2VzcworICoKKyAq IFRoaXMgaXMgaW52b2tlZCBmcm9tIEF1eGlsaWFyeVByb2Nlc3NNYWluLCB3aGljaCBoYXMgYWxy ZWFkeSBjcmVhdGVkIHRoZQorICogYmFzaWMgZXhlY3V0aW9uIGVudmlyb25tZW50LCBidXQgbm90 IGVuYWJsZWQgc2lnbmFscyB5ZXQuCisgKi8KK3ZvaWQKK1dhbEFsbG9jYXRvck1haW4odm9pZCkK K3sKKwlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9idWY7CisJTWVtb3J5Q29udGV4dCB3YWxfYWxs b2NfY29udGV4dDsKKworCS8qCisJICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxz IHRoYXQgbWlnaHQgYmUgc2VudCB0byB1cy4KKwkgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25h bEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisJ cHFzaWduYWwoU0lHVEVSTSwgU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7CisJLyog U0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxk ICovCisJcHFzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7CisJcHFzaWduYWwoU0lHUElQRSwgU0lH X0lHTik7CisJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwor CXBxc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOworCisJLyoKKwkgKiBSZXNldCBzb21lIHNpZ25h bHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1hc3RlciBidXQgbm90IGhlcmUKKwkgKi8KKwlw cXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKKworCS8qCisJICogQ3JlYXRlIGEgbWVtb3J5IGNv bnRleHQgdGhhdCB3ZSB3aWxsIGRvIGFsbCBvdXIgd29yayBpbi4gIFdlIGRvIHRoaXMgc28KKwkg KiB0aGF0IHdlIGNhbiByZXNldCB0aGUgY29udGV4dCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgYW5k IHRoZXJlYnkgYXZvaWQKKwkgKiBwb3NzaWJsZSBtZW1vcnkgbGVha3MuCisJICovCisJd2FsX2Fs bG9jX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkJICAiV0FMIEFsbG9jYXRvciIsCisJCQkJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHdhbF9hbGxvY19jb250ZXh0KTsKKwor CS8qCisJICogSWYgYW4gZXhjZXB0aW9uIGlzIGVuY291bnRlcmVkLCBwcm9jZXNzaW5nIHJlc3Vt ZXMgaGVyZS4KKwkgKgorCSAqIFlvdSBtaWdodCB3b25kZXIgd2h5IHRoaXMgaXNuJ3QgY29kZWQg YXMgYW4gaW5maW5pdGUgbG9vcCBhcm91bmQgYQorCSAqIFBHX1RSWSBjb25zdHJ1Y3QuICBUaGUg cmVhc29uIGlzIHRoYXQgdGhpcyBpcyB0aGUgYm90dG9tIG9mIHRoZQorCSAqIGV4Y2VwdGlvbiBz dGFjaywgYW5kIHNvIHdpdGggUEdfVFJZIHRoZXJlIHdvdWxkIGJlIG5vIGV4Y2VwdGlvbiBoYW5k bGVyCisJICogaW4gZm9yY2UgYXQgYWxsIGR1cmluZyB0aGUgQ0FUQ0ggcGFydC4gIEJ5IGxlYXZp bmcgdGhlIG91dGVybW9zdCBzZXRqbXAKKwkgKiBhbHdheXMgYWN0aXZlLCB3ZSBoYXZlIGF0IGxl YXN0IHNvbWUgY2hhbmNlIG9mIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvcgorCSAqIGR1cmluZyBl cnJvciByZWNvdmVyeS4gIChJZiB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIHRoZXJlYnks IGl0CisJICogd2lsbCBzb29uIGJlIHN0b3BwZWQgYnkgb3ZlcmZsb3cgb2YgZWxvZy5jJ3MgaW50 ZXJuYWwgc3RhdGUgc3RhY2suKQorCSAqCisJICogTm90ZSB0aGF0IHdlIHVzZSBzaWdzZXRqbXAo Li4uLCAxKSwgc28gdGhhdCB0aGUgcHJldmFpbGluZyBzaWduYWwgbWFzaworCSAqICh0byB3aXQs IEJsb2NrU2lnKSB3aWxsIGJlIHJlc3RvcmVkIHdoZW4gbG9uZ2ptcCdpbmcgdG8gaGVyZS4gIFRo dXMsCisJICogc2lnbmFscyBvdGhlciB0aGFuIFNJR1FVSVQgd2lsbCBiZSBibG9ja2VkIHVudGls IHdlIGNvbXBsZXRlIGVycm9yCisJICogcmVjb3ZlcnkuICBJdCBtaWdodCBzZWVtIHRoYXQgdGhp cyBwb2xpY3kgbWFrZXMgdGhlIEhPTERfSU5URVJSVVBUUygpCisJICogY2FsbCByZWR1bmRhbnQs IGJ1dCBpdCBpcyBub3Qgc2luY2UgSW50ZXJydXB0UGVuZGluZyBtaWdodCBiZSBzZXQKKwkgKiBh bHJlYWR5LgorCSAqLworCWlmIChzaWdzZXRqbXAobG9jYWxfc2lnam1wX2J1ZiwgMSkgIT0gMCkK Kwl7CisJCS8qIFNpbmNlIG5vdCB1c2luZyBQR19UUlksIG11c3QgcmVzZXQgZXJyb3Igc3RhY2sg YnkgaGFuZCAqLworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gTlVMTDsKKworCQkvKiBQcmV2ZW50 IGludGVycnVwdHMgd2hpbGUgY2xlYW5pbmcgdXAgKi8KKwkJSE9MRF9JTlRFUlJVUFRTKCk7CisK KwkJLyogUmVwb3J0IHRoZSBlcnJvciB0byB0aGUgc2VydmVyIGxvZyAqLworCQlFbWl0RXJyb3JS ZXBvcnQoKTsKKworCQkvKgorCQkgKiBUaGVzZSBvcGVyYXRpb25zIGFyZSByZWFsbHkganVzdCBh IG1pbmltYWwgc3Vic2V0IG9mCisJCSAqIEFib3J0VHJhbnNhY3Rpb24oKS4gIFdlIGRvbid0IGhh dmUgdmVyeSBtYW55IHJlc291cmNlcyB0byB3b3JyeQorCQkgKiBhYm91dC4KKwkJICovCisJCUxX TG9ja1JlbGVhc2VBbGwoKTsKKwkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQlw Z3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7CisJCUFib3J0QnVmZmVySU8oKTsKKwkJVW5sb2NrQnVm ZmVycygpOworCQlSZWxlYXNlQXV4UHJvY2Vzc1Jlc291cmNlcyhmYWxzZSk7CisJCUF0RU9YYWN0 X0J1ZmZlcnMoZmFsc2UpOworCQlBdEVPWGFjdF9TTWdyKCk7CisJCUF0RU9YYWN0X0ZpbGVzKGZh bHNlKTsKKwkJQXRFT1hhY3RfSGFzaFRhYmxlcyhmYWxzZSk7CisKKwkJLyoKKwkJICogTm93IHJl dHVybiB0byBub3JtYWwgdG9wLWxldmVsIGNvbnRleHQgYW5kIGNsZWFyIEVycm9yQ29udGV4dCBm b3IKKwkJICogbmV4dCB0aW1lLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHdhbF9h bGxvY19jb250ZXh0KTsKKwkJRmx1c2hFcnJvclN0YXRlKCk7CisKKwkJLyogRmx1c2ggYW55IGxl YWtlZCBkYXRhIGluIHRoZSB0b3AtbGV2ZWwgY29udGV4dCAqLworCQlNZW1vcnlDb250ZXh0UmVz ZXRBbmREZWxldGVDaGlsZHJlbih3YWxfYWxsb2NfY29udGV4dCk7CisKKwkJLyogTm93IHdlIGNh biBhbGxvdyBpbnRlcnJ1cHRzIGFnYWluICovCisJCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwkJ LyoKKwkJICogU2xlZXAgYXQgbGVhc3QgMSBzZWNvbmQgYWZ0ZXIgYW55IGVycm9yLiAgQSB3cml0 ZSBlcnJvciBpcyBsaWtlbHkKKwkJICogdG8gYmUgcmVwZWF0ZWQsIGFuZCB3ZSBkb24ndCB3YW50 IHRvIGJlIGZpbGxpbmcgdGhlIGVycm9yIGxvZ3MgYXMKKwkJICogZmFzdCBhcyB3ZSBjYW4uCisJ CSAqLworCQlwZ191c2xlZXAoMTAwMDAwMEwpOworCisJCS8qCisJCSAqIENsb3NlIGFsbCBvcGVu IGZpbGVzIGFmdGVyIGFueSBlcnJvci4gIFRoaXMgaXMgaGVscGZ1bCBvbiBXaW5kb3dzLAorCQkg KiB3aGVyZSBob2xkaW5nIGRlbGV0ZWQgZmlsZXMgb3BlbiBjYXVzZXMgdmFyaW91cyBzdHJhbmdl IGVycm9ycy4KKwkJICogSXQncyBub3QgY2xlYXIgd2UgbmVlZCBpdCBlbHNld2hlcmUsIGJ1dCBz aG91bGRuJ3QgaHVydC4KKwkJICovCisJCXNtZ3JjbG9zZWFsbCgpOworCisJCS8qIFJlcG9ydCB3 YWl0IGVuZCBoZXJlLCB3aGVuIHRoZXJlIGlzIG5vIGZ1cnRoZXIgcG9zc2liaWxpdHkgb2Ygd2Fp dCAqLworCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7CisJfQorCisJLyogV2UgY2FuIG5vdyBo YW5kbGUgZXJlcG9ydChFUlJPUikgKi8KKwlQR19leGNlcHRpb25fc3RhY2sgPSAmbG9jYWxfc2ln am1wX2J1ZjsKKworCS8qCisJICogVW5ibG9jayBzaWduYWxzICh0aGV5IHdlcmUgYmxvY2tlZCB3 aGVuIHRoZSBwb3N0bWFzdGVyIGZvcmtlZCB1cykKKwkgKi8KKwlQR19TRVRNQVNLKCZVbkJsb2Nr U2lnKTsKKworCS8qCisJICogQWR2ZXJ0aXNlIG91ciBsYXRjaCB0aGF0IGJhY2tlbmRzIGNhbiB1 c2UgdG8gd2FrZSB1cyB1cCB3aGlsZSB3ZSdyZQorCSAqIHNsZWVwaW5nLgorCSAqLworCVByb2NH bG9iYWwtPndhbEFsbG9jYXRvckxhdGNoID0gJk15UHJvYy0+cHJvY0xhdGNoOworCisJLyoKKwkg KiBCZWZvcmUgd2UgZ28gaW50byB0aGUgbWFpbiBsb29wLCBzY2FuIHRoZSBwcmUtYWxsb2NhdGVk IHNlZ21lbnRzCisJICogZGlyZWN0b3J5IGFuZCBsb29rIGZvciBhbnl0aGluZyB0aGF0IHdhcyBs ZWZ0IG92ZXIgZnJvbSB0aGUgbGFzdCB0aW1lLgorCSAqLworCVNjYW5Gb3JFeGlzdGluZ1ByZWFs bG9jYXRlZFNlZ21lbnRzKCk7CisKKwkvKgorCSAqIExvb3AgZm9yZXZlcgorCSAqLworCWZvciAo OzspCisJeworCQkvKiBDbGVhciBhbnkgYWxyZWFkeS1wZW5kaW5nIHdha2V1cHMgKi8KKwkJUmVz ZXRMYXRjaChNeUxhdGNoKTsKKworCQlIYW5kbGVNYWluTG9vcEludGVycnVwdHMoKTsKKworCQlE b1dhbFByZUFsbG9jYXRpb24oKTsKKworCQkvKiBYWFg6IFNlbmQgYWN0aXZpdHkgc3RhdGlzdGlj cyB0byB0aGUgc3RhdHMgY29sbGVjdG9yICovCisKKwkJLyogU2xlZXAgdW50aWwgd2UgYXJlIHNp Z25hbGVkIG9yIFdBTF9BTExPQ19USU1FT1VUX1MgaGFzIGVsYXBzZWQuICovCisJCSh2b2lkKSBX YWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSBXQUxfQUxMT0NfVElNRU9VVF9TICogMTAwMEwgLyog Y29udmVydCB0byBtcyAqLywKKwkJCQkJCSBXQUlUX0VWRU5UX1dBTF9BTExPQ0FUT1JfTUFJTik7 CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKK30KKworLyoKKyAqIERvV2FsUHJlQWxsb2NhdGlv bgorICoKKyAqIFRyaWVzIHRvIGFsbG9jYXRlIHVwIHRvIHdhbF9hbGxvY2F0b3JfbWF4X3NpemUg d29ydGggb2YgV0FMLgorICovCitzdGF0aWMgdm9pZAorRG9XYWxQcmVBbGxvY2F0aW9uKHZvaWQp Cit7CisJaW50CQltYXhfcHJlYWxsb2Nfc2VnczsKKworCW1heF9wcmVhbGxvY19zZWdzID0gd2Fs X2FsbG9jX21heF9zaXplX21iIC8gKHdhbF9zZWdtZW50X3NpemUgLyAoMTAyNCAqIDEwMjQpKTsK KworCXdoaWxlICghU2h1dGRvd25SZXF1ZXN0UGVuZGluZyAmJgorCQkgICBHZXROdW1QcmVhbGxv Y2F0ZWRXYWxTZWdzKCkgPCBtYXhfcHJlYWxsb2Nfc2VncykKKwl7CisJCWNoYXIgdG1wcGF0aFtN QVhQR1BBVEhdOworCisJCXNucHJpbnRmKHRtcHBhdGgsIE1BWFBHUEFUSCwgIiVzL3ByZWFsbG9j YXRlZF9zZWdtZW50cy94bG9ndGVtcCIsIFhMT0dESVIpOworCQlDcmVhdGVFbXB0eVdhbFNlZ21l bnQodG1wcGF0aCk7CisJCUluc3RhbGxQcmVhbGxvY2F0ZWRXYWxTZWcodG1wcGF0aCk7CisJCWVs b2coREVCVUcyLCAicHJlLWFsbG9jYXRlZCBXQUwgc2VnbWVudCIpOworCisJCWlmIChDb25maWdS ZWxvYWRQZW5kaW5nKQorCQl7CisJCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCQlQ cm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKworCQkJbWF4X3ByZWFsbG9jX3NlZ3MgPSB3 YWxfYWxsb2NfbWF4X3NpemVfbWIgLyAod2FsX3NlZ21lbnRfc2l6ZSAvICgxMDI0ICogMTAyNCkp OworCQl9CisJfQorfQorCisvKgorICogU2NhbkZvckV4aXN0aW5nUHJlYWxsb2NhdGVkU2VnbWVu dHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRocm91Z2ggcGdfd2FsL3ByZWFsbG9j YXRlZF9zZWdtZW50cyBmb3IgYW55IHNlZ21lbnRzCisgKiB0aGF0IHdlcmUgbGVmdCBvdmVyIGZy b20gYSBwcmV2aW91cyBXQUwgYWxsb2NhdG9yIHByb2Nlc3MgYW5kIHNldHMgdGhlCisgKiB0cmFj a2luZyB2YXJpYWJsZSBpbiBzaGFyZWQgbWVtb3J5IGFjY29yZGluZ2x5LgorICovCitzdGF0aWMg dm9pZAorU2NhbkZvckV4aXN0aW5nUHJlYWxsb2NhdGVkU2VnbWVudHModm9pZCkKK3sKKwlpbnQg aSA9IDA7CisKKwkvKgorCSAqIGZzeW5jIHRoZSBwcmVhbGxvY2F0ZWRfc2VnbWVudHMgZGlyZWN0 b3J5IGluIGNhc2UgYW55IHJlbmFtZXMgaGF2ZSB5ZXQgdG8KKwkgKiBiZSBmbHVzaGVkIHRvIGRp c2suICBUaGlzIGlzIHByb2JhYmx5IG5vdCByZWFsbHkgbmVjZXNzYXJ5LCBidXQgaXQgc2VlbXMK KwkgKiBuaWNlIHRvIGtub3cgdGhhdCBhbGwgdGhlIHNlZ21lbnRzIHdlIGZpbmQgYXJlIHJlYWxs eSB3aGVyZSB3ZSB0aGluayB0aGV5CisJICogYXJlLgorCSAqLworCWZzeW5jX2ZuYW1lX2V4dChY TE9HRElSICIvcHJlYWxsb2NhdGVkX3NlZ21lbnRzIiwgdHJ1ZSwgZmFsc2UsIEZBVEFMKTsKKwor CS8qCisJICogR2F0aGVyIGFsbCB0aGUgcHJlYWxsb2NhdGVkIHNlZ21lbnRzIHdlIGNhbiBmaW5k LgorCSAqLworCXdoaWxlICh0cnVlKQorCXsKKwkJRklMRSAqZmQ7CisJCWNoYXIgcGF0aFtNQVhQ R1BBVEhdOworCisJCXNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgIiVzL3ByZWFsbG9jYXRlZF9z ZWdtZW50cy94bG9ndGVtcC4lZCIsCisJCQkJIFhMT0dESVIsIGkpOworCisJCWZkID0gQWxsb2Nh dGVGaWxlKHBhdGgsICJyIik7CisJCWlmIChmZCAhPSBOVUxMKQorCQl7CisJCQlGcmVlRmlsZShm ZCk7CisJCQlpKys7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQor CQkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7CisJ CQlicmVhazsKKwkJfQorCX0KKworCVNldE51bVByZWFsbG9jYXRlZFdhbFNlZ3MoaSk7CisJZWxv ZyhERUJVRzIsICJmb3VuZCAlZCBwcmVhbGxvY2F0ZWQgc2VnbWVudHMgZHVyaW5nIHN0YXJ0dXAi LCBpKTsKK30KKworYm9vbAorV2FsUHJlYWxsb2NhdGlvbkVuYWJsZWQodm9pZCkKK3sKKwlyZXR1 cm4gd2FsX2FsbG9jX21heF9zaXplX21iID49IHdhbF9zZWdtZW50X3NpemUgLyAoMTAyNCAqIDEw MjQpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jCmluZGV4IGUwOTEwOGQwZWMu LmM5YTkxZGM5MzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNr dXAuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9iYXNlYmFja3VwLmMKQEAgLTEzOTks MTEgKzEzOTksMTMgQEAgc2VuZERpcihjb25zdCBjaGFyICpwYXRoLCBpbnQgYmFzZXBhdGhsZW4s IGJvb2wgc2l6ZW9ubHksIExpc3QgKnRhYmxlc3BhY2VzLAogCQkJc2l6ZSArPSBfdGFyV3JpdGVE aXIocGF0aGJ1ZiwgYmFzZXBhdGhsZW4sICZzdGF0YnVmLCBzaXplb25seSk7CiAKIAkJCS8qCi0J CQkgKiBBbHNvIHNlbmQgYXJjaGl2ZV9zdGF0dXMgZGlyZWN0b3J5IChieSBoYWNraXNobHkgcmV1 c2luZwotCQkJICogc3RhdGJ1ZiBmcm9tIGFib3ZlIC4uLikuCisJCQkgKiBBbHNvIHNlbmQgYXJj aGl2ZV9zdGF0dXMgYW5kIHByZWFsbG9jYXRlZF9zZWdtZW50cyAoYnkgaGFja2lzaGx5CisJCQkg KiByZXVzaW5nIHN0YXRidWYgZnJvbSBhYm92ZSAuLi4pLgogCQkJICovCiAJCQlzaXplICs9IF90 YXJXcml0ZUhlYWRlcigiLi9wZ193YWwvYXJjaGl2ZV9zdGF0dXMiLCBOVUxMLCAmc3RhdGJ1ZiwK IAkJCQkJCQkJCXNpemVvbmx5KTsKKwkJCXNpemUgKz0gX3RhcldyaXRlSGVhZGVyKCIuL3BnX3dh bC9wcmVhbGxvY2F0ZWRfc2VnbWVudHMiLCBOVUxMLAorCQkJCQkJCQkJJnN0YXRidWYsIHNpemVv bmx5KTsKIAogCQkJY29udGludWU7CQkJLyogZG9uJ3QgcmVjdXJzZSBpbnRvIHBnX3dhbCAqLwog CQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZpbGUvZmQuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvZmlsZS9mZC5jCmluZGV4IDQzM2UyODMyYTUuLjBlOGI2ZWFmMTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZmlsZS9mZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvZmlsZS9mZC5jCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSA8c3lzL2ZpbGUuaD4K ICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg PHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWZuZGVmIFdJTjMyCiAjaW5j bHVkZSA8c3lzL21tYW4uaD4KQEAgLTM4NjgsMyArMzg2OSwxMTcgQEAgcGdfcHdyaXRldl93aXRo X3JldHJ5KGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZjbnQsIG9mZl90 IG9mZnNldCkKIAogCXJldHVybiBzdW07CiB9CisKKy8qCisgKiBDcmVhdGVFbXB0eVdhbFNlZ21l bnQKKyAqCisgKiBDcmVhdGUgYSBuZXcgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgbmV3IFdB TCBzZWdtZW50LiAgVGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGluc3RhbGxpbmcg dGhlIG5ldyBmaWxlIGluIHBnX3dhbC4KKyAqLwordm9pZAorQ3JlYXRlRW1wdHlXYWxTZWdtZW50 KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJUEdBbGlnbmVkWExvZ0Jsb2NrIHpidWZmZXI7CisJaW50 CQkJZmQ7CisJaW50CQkJc2F2ZV9lcnJubzsKKworCXVubGluayhwYXRoKTsKKworCS8qIGRvIG5v dCB1c2UgZ2V0X3N5bmNfYml0KCkgaGVyZSAtLS0gd2FudCB0byBmc3luYyBvbmx5IGF0IGVuZCBv ZiBmaWxsICovCisJZmQgPSBCYXNpY09wZW5GaWxlKHBhdGgsIE9fUkRXUiB8IE9fQ1JFQVQgfCBP X0VYQ0wgfCBQR19CSU5BUlkpOworCWlmIChmZCA8IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0 ZSBmaWxlIFwiJXNcIjogJW0iLCBwYXRoKSkpOworCisJbWVtc2V0KHpidWZmZXIuZGF0YSwgMCwg WExPR19CTENLU1opOworCisJcGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfV0FM X0lOSVRfV1JJVEUpOworCXNhdmVfZXJybm8gPSAwOworCWlmICh3YWxfaW5pdF96ZXJvKQorCXsK KwkJc3RydWN0IGlvdmVjIGlvdltQR19JT1ZfTUFYXTsKKwkJaW50CQkJYmxvY2tzOworCisJCS8q CisJCSAqIFplcm8tZmlsbCB0aGUgZmlsZS4gIFdpdGggdGhpcyBzZXR0aW5nLCB3ZSBkbyB0aGlz IHRoZSBoYXJkIHdheSB0bworCQkgKiBlbnN1cmUgdGhhdCBhbGwgdGhlIGZpbGUgc3BhY2UgaGFz IHJlYWxseSBiZWVuIGFsbG9jYXRlZC4gIE9uCisJCSAqIHBsYXRmb3JtcyB0aGF0IGFsbG93ICJo b2xlcyIgaW4gZmlsZXMsIGp1c3Qgc2Vla2luZyB0byB0aGUgZW5kCisJCSAqIGRvZXNuJ3QgYWxs b2NhdGUgaW50ZXJtZWRpYXRlIHNwYWNlLiAgVGhpcyB3YXksIHdlIGtub3cgdGhhdCB3ZQorCQkg KiBoYXZlIGFsbCB0aGUgc3BhY2UgYW5kIChhZnRlciB0aGUgZnN5bmMgYmVsb3cpIHRoYXQgYWxs IHRoZQorCQkgKiBpbmRpcmVjdCBibG9ja3MgYXJlIGRvd24gb24gZGlzay4gIFRoZXJlZm9yZSwg ZmRhdGFzeW5jKDIpIG9yCisJCSAqIE9fRFNZTkMgd2lsbCBiZSBzdWZmaWNpZW50IHRvIHN5bmMg ZnV0dXJlIHdyaXRlcyB0byB0aGUgbG9nIGZpbGUuCisJCSAqLworCisJCS8qIFByZXBhcmUgdG8g d3JpdGUgb3V0IGEgbG90IG9mIGNvcGllcyBvZiBvdXIgemVybyBidWZmZXIgYXQgb25jZS4gKi8K KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhvZihpb3YpOyArK2kpCisJCXsKKwkJCWlvdltp XS5pb3ZfYmFzZSA9IHpidWZmZXIuZGF0YTsKKwkJCWlvdltpXS5pb3ZfbGVuID0gWExPR19CTENL U1o7CisJCX0KKworCQkvKiBMb29wLCB3cml0aW5nIGFzIG1hbnkgYmxvY2tzIGFzIHdlIGNhbiBm b3IgZWFjaCBzeXN0ZW0gY2FsbC4gKi8KKwkJYmxvY2tzID0gd2FsX3NlZ21lbnRfc2l6ZSAvIFhM T0dfQkxDS1NaOworCQlmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrczspCisJCXsKKwkJCWludAkJ CWlvdmNudCA9IE1pbihibG9ja3MgLSBpLCBsZW5ndGhvZihpb3YpKTsKKwkJCW9mZl90CQlvZmZz ZXQgPSBpICogWExPR19CTENLU1o7CisKKwkJCWlmIChwZ19wd3JpdGV2X3dpdGhfcmV0cnkoZmQs IGlvdiwgaW92Y250LCBvZmZzZXQpIDwgMCkKKwkJCXsKKwkJCQlzYXZlX2Vycm5vID0gZXJybm87 CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWkgKz0gaW92Y250OworCQl9CisJfQorCWVsc2UKKwl7 CisJCS8qCisJCSAqIE90aGVyd2lzZSwgc2Vla2luZyB0byB0aGUgZW5kIGFuZCB3cml0aW5nIGEg c29saXRhcnkgYnl0ZSBpcworCQkgKiBlbm91Z2guCisJCSAqLworCQllcnJubyA9IDA7CisJCWlm IChwZ19wd3JpdGUoZmQsIHpidWZmZXIuZGF0YSwgMSwgd2FsX3NlZ21lbnRfc2l6ZSAtIDEpICE9 IDEpCisJCXsKKwkJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBubyBkaXNr IHNwYWNlICovCisJCQlzYXZlX2Vycm5vID0gZXJybm8gPyBlcnJubyA6IEVOT1NQQzsKKwkJfQor CX0KKwlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7CisKKwlpZiAoc2F2ZV9lcnJubykKKwl7CisJ CS8qCisJCSAqIElmIHdlIGZhaWwgdG8gbWFrZSB0aGUgZmlsZSwgZGVsZXRlIGl0IHRvIHJlbGVh c2UgZGlzayBzcGFjZQorCQkgKi8KKwkJdW5saW5rKHBhdGgpOworCisJCWNsb3NlKGZkKTsKKwor CQllcnJubyA9IHNhdmVfZXJybm87CisKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBc IiVzXCI6ICVtIiwgcGF0aCkpKTsKKwl9CisKKwlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJ VF9FVkVOVF9XQUxfSU5JVF9TWU5DKTsKKwlpZiAocGdfZnN5bmMoZmQpICE9IDApCisJeworCQlp bnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisKKwkJY2xvc2UoZmQpOworCQllcnJubyA9IHNhdmVf ZXJybm87CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks CisJCQkJIGVycm1zZygiY291bGQgbm90IGZzeW5jIGZpbGUgXCIlc1wiOiAlbSIsIHBhdGgpKSk7 CisJfQorCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKKworCWlmIChjbG9zZShmZCkgIT0gMCkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkg ZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwgcGF0aCkpKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy50eHQgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CmluZGV4IDZjN2NmNmMyOTUuLjIx MmJkYThlN2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2tuYW1l cy50eHQKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dApAQCAt NTMsMyArNTMsNCBAQCBYYWN0VHJ1bmNhdGlvbkxvY2sJCQkJCTQ0CiAjIDQ1IHdhcyBYYWN0VHJ1 bmNhdGlvbkxvY2sgdW50aWwgcmVtb3ZhbCBvZiBCYWNrZW5kUmFuZG9tTG9jawogV3JhcExpbWl0 c1ZhY3V1bUxvY2sJCQkJNDYKIE5vdGlmeVF1ZXVlVGFpbExvY2sJCQkJCTQ3CitXQUxQcmVhbGxv Y2F0aW9uTG9jawkJCQk0OApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggYjdkOWRhMGFhOS4u NTc5MGQ1ODZlZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC0xODEsNiArMTgxLDcgQEAg SW5pdFByb2NHbG9iYWwodm9pZCkKIAlQcm9jR2xvYmFsLT5zdGFydHVwUHJvY1BpZCA9IDA7CiAJ UHJvY0dsb2JhbC0+c3RhcnR1cEJ1ZmZlclBpbldhaXRCdWZJZCA9IC0xOwogCVByb2NHbG9iYWwt PndhbHdyaXRlckxhdGNoID0gTlVMTDsKKwlQcm9jR2xvYmFsLT53YWxBbGxvY2F0b3JMYXRjaCA9 IE5VTEw7CiAJUHJvY0dsb2JhbC0+Y2hlY2twb2ludGVyTGF0Y2ggPSBOVUxMOwogCXBnX2F0b21p Y19pbml0X3UzMigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwgSU5WQUxJRF9QR1BS T0NOTyk7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5jbG9nR3JvdXBGaXJzdCwg SU5WQUxJRF9QR1BST0NOTyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMK aW5kZXggZWY3ZTZiZmI3Ny4uYTNjNDMyNGM5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnQuYwpAQCAtMjQ4LDYgKzI0OCw5IEBAIHBnc3RhdF9nZXRfd2FpdF9hY3Rpdml0 eShXYWl0RXZlbnRBY3Rpdml0eSB3KQogCQljYXNlIFdBSVRfRVZFTlRfV0FMX1dSSVRFUl9NQUlO OgogCQkJZXZlbnRfbmFtZSA9ICJXYWxXcml0ZXJNYWluIjsKIAkJCWJyZWFrOworCQljYXNlIFdB SVRfRVZFTlRfV0FMX0FMTE9DQVRPUl9NQUlOOgorCQkJZXZlbnRfbmFtZSA9ICJXYWxBbGxvY2F0 b3JNYWluIjsKKwkJCWJyZWFrOwogCQkJLyogbm8gZGVmYXVsdCBjYXNlLCBzbyB0aGF0IGNvbXBp bGVyIHdpbGwgd2FybiAqLwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9taXNjaW5pdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDg4 ODAxMzc0YjUuLjlmMTJlMThiNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv bWlzY2luaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTI4 NSw2ICsyODUsOSBAQCBHZXRCYWNrZW5kVHlwZURlc2MoQmFja2VuZFR5cGUgYmFja2VuZFR5cGUp CiAJCWNhc2UgQl9XQUxfV1JJVEVSOgogCQkJYmFja2VuZERlc2MgPSAid2Fsd3JpdGVyIjsKIAkJ CWJyZWFrOworCQljYXNlIEJfV0FMX0FMTE9DQVRPUjoKKwkJCWJhY2tlbmREZXNjID0gIndhbCBh bGxvY2F0b3IiOworCQkJYnJlYWs7CiAJCWNhc2UgQl9BUkNISVZFUjoKIAkJCWJhY2tlbmREZXNj ID0gImFyY2hpdmVyIjsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggNDY3YjBmZDZm ZS4uNjU2ZTI2ZmNkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5j bHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1h c3Rlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci93YWxfYWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCkBAIC0yODE2LDYgKzI4MTcsMTcgQEAgc3RhdGlj IHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQogCQlOVUxMLCBOVUxMLCBO VUxMCiAJfSwKIAorCXsKKwkJeyJ3YWxfYWxsb2NhdG9yX21heF9zaXplIiwgUEdDX1NJR0hVUCwg V0FMX1NFVFRJTkdTLAorCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBtYXhpbXVtIGFtb3VudCBv ZiBXQUwgdG8gcHJlLWFsbG9jYXRlLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19VTklUX01CCisJCX0s CisJCSZ3YWxfYWxsb2NfbWF4X3NpemVfbWIsCisJCTY0LCAwLCAxMDI0MDAsCisJCU5VTEwsIE5V TEwsIE5VTEwKKwl9LAorCiAJewogCQl7IndhbF9idWZmZXJzIiwgUEdDX1BPU1RNQVNURVIsIFdB TF9TRVRUSU5HUywKIAkJCWdldHRleHRfbm9vcCgiU2V0cyB0aGUgbnVtYmVyIG9mIGRpc2stcGFn ZSBidWZmZXJzIGluIHNoYXJlZCBtZW1vcnkgZm9yIFdBTC4iKSwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCAzZmU5YTUzY2IzLi5hNTE3ZGZl ZTZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5z YW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxl CkBAIC0yMjMsNiArMjIzLDcgQEAKIAkJCQkJIyBvZmYsIHBnbHosIGx6NCwgb3Igb24KICN3YWxf aW5pdF96ZXJvID0gb24JCQkjIHplcm8tZmlsbCBuZXcgV0FMIGZpbGVzCiAjd2FsX3JlY3ljbGUg PSBvbgkJCSMgcmVjeWNsZSBXQUwgZmlsZXMKKyN3YWxfYWxsb2NhdG9yX21heF9zaXplID0gNjRN QgkJIyBhbW91bnQgb2YgV0FMIHRvIHByZS1hbGxvY2F0ZQogI3dhbF9idWZmZXJzID0gLTEJCQkj IG1pbiAzMmtCLCAtMSBzZXRzIGJhc2VkIG9uIHNoYXJlZF9idWZmZXJzCiAJCQkJCSMgKGNoYW5n ZSByZXF1aXJlcyByZXN0YXJ0KQogI3dhbF93cml0ZXJfZGVsYXkgPSAyMDBtcwkJIyAxLTEwMDAw IG1pbGxpc2Vjb25kcwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgYi9zcmMv YmluL2luaXRkYi9pbml0ZGIuYwppbmRleCBhMTZhZDAyNmYzLi4yZTFjNGQxZTc5IDEwMDY0NAot LS0gYS9zcmMvYmluL2luaXRkYi9pbml0ZGIuYworKysgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIu YwpAQCAtMjA4LDYgKzIwOCw3IEBAIHN0YXRpYyBjaGFyICpleHRyYV9vcHRpb25zID0gIiI7CiBz dGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1tdID0gewogCSJnbG9iYWwiLAogCSJwZ193 YWwvYXJjaGl2ZV9zdGF0dXMiLAorCSJwZ193YWwvcHJlYWxsb2NhdGVkX3NlZ21lbnRzIiwKIAki cGdfY29tbWl0X3RzIiwKIAkicGdfZHluc2htZW0iLAogCSJwZ19ub3RpZnkiLApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYyBiL3NyYy9iaW4vcGdfYmFz ZWJhY2t1cC9wZ19iYXNlYmFja3VwLmMKaW5kZXggNzI5NmViOTdkMC4uMTc3OGM5YzkxYiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3BnX2Jhc2ViYWNrdXAuYworKysgYi9zcmMv YmluL3BnX2Jhc2ViYWNrdXAvcGdfYmFzZWJhY2t1cC5jCkBAIC02ODAsNiArNjgwLDIyIEBAIFN0 YXJ0TG9nU3RyZWFtZXIoY2hhciAqc3RhcnRwb3MsIHVpbnQzMiB0aW1lbGluZSwgY2hhciAqc3lz aWRlbnRpZmllcikKIAkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsIHN0YXR1c2Rpcik7CiAJCQlleGl0KDEpOwogCQl9CisKKwkJLyoKKwkJICog QWxzbyBjcmVhdGUgcGdfd2FsL3ByZWFsbG9jYXRlZF9zZWdtZW50cyBpZiBuZWNlc3NhcnkuCisJ CSAqLworCQlpZiAoUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pID49IDE1MDAwMCkKKwkJeworCQkJY2hh ciBwcmVhbGxvY19kaXJbTUFYUEdQQVRIXTsKKworCQkJc25wcmludGYocHJlYWxsb2NfZGlyLCBz aXplb2YocHJlYWxsb2NfZGlyKSwgIiVzL3BnX3dhbC9wcmVhbGxvY2F0ZWRfc2VnbWVudHMiLAor CQkJCQkgYmFzZWRpcik7CisJCQlpZiAocGdfbWtkaXJfcChwcmVhbGxvY19kaXIsIHBnX2Rpcl9j cmVhdGVfbW9kZSkgIT0gMCAmJiBlcnJubyAhPSBFRVhJU1QpCisJCQl7CisJCQkJcGdfbG9nX2Vy cm9yKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgcHJlYWxsb2NfZGly KTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CiAJfQogCiAJLyoKQEAgLTE2MTYsNyArMTYzMiw4 IEBAIFJlY2VpdmVUYXJBbmRVbnBhY2tDb3B5Q2h1bmsoc2l6ZV90IHIsIGNoYXIgKmNvcHlidWYs IHZvaWQgKmNhbGxiYWNrX2RhdGEpCiAJCQkJCSAqLwogCQkJCQlpZiAoISgocGdfc3RyX2VuZHN3 aXRoKHN0YXRlLT5maWxlbmFtZSwgIi9wZ193YWwiKSB8fAogCQkJCQkJICAgcGdfc3RyX2VuZHN3 aXRoKHN0YXRlLT5maWxlbmFtZSwgIi9wZ194bG9nIikgfHwKLQkJCQkJCSAgIHBnX3N0cl9lbmRz d2l0aChzdGF0ZS0+ZmlsZW5hbWUsICIvYXJjaGl2ZV9zdGF0dXMiKSkgJiYKKwkJCQkJCSAgIHBn X3N0cl9lbmRzd2l0aChzdGF0ZS0+ZmlsZW5hbWUsICIvYXJjaGl2ZV9zdGF0dXMiKSB8fAorCQkJ CQkJICAgcGdfc3RyX2VuZHN3aXRoKHN0YXRlLT5maWxlbmFtZSwgIi9wcmVhbGxvY2F0ZWRfc2Vn bWVudHMiKSkgJiYKIAkJCQkJCSAgZXJybm8gPT0gRUVYSVNUKSkKIAkJCQkJewogCQkJCQkJcGdf bG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsIGIvc3Jj L2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwKaW5kZXggYTJjYjJhNzY3 OS4uNDNlMWUzZTg5ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3Bn X2Jhc2ViYWNrdXAucGwKKysrIGIvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2Vi YWNrdXAucGwKQEAgLTEyMCwxMCArMTIwLDEwIEBAIFNLSVA6CiAJCSJjaGVjayBiYWNrdXAgZGly IHBlcm1pc3Npb25zIik7CiB9CiAKLSMgT25seSBhcmNoaXZlX3N0YXR1cyBkaXJlY3Rvcnkgc2hv dWxkIGJlIGNvcGllZCBpbiBwZ193YWwvLgorIyBPbmx5IGFyY2hpdmVfc3RhdHVzIGFuZCBwcmVh bGxvY2F0ZWRfc2VnbWVudHMgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGNvcGllZCBpbiBwZ193YWwv LgogaXNfZGVlcGx5KAogCVsgc29ydChzbHVycF9kaXIoIiR0ZW1wZGlyL2JhY2t1cC9wZ193YWwv IikpIF0sCi0JWyBzb3J0IHF3KC4gLi4gYXJjaGl2ZV9zdGF0dXMpIF0sCisJWyBzb3J0IHF3KC4g Li4gYXJjaGl2ZV9zdGF0dXMgcHJlYWxsb2NhdGVkX3NlZ21lbnRzKSBdLAogCSdubyBXQUwgZmls ZXMgY29waWVkJyk7CiAKICMgQ29udGVudHMgb2YgdGhlc2UgZGlyZWN0b3JpZXMgc2hvdWxkIG5v dCBiZSBjb3BpZWQuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2Fs LmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKaW5kZXggODRiNmY3MGFkNi4u MjM0YTg2Nzg5NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5j CisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwpAQCAtODUsNiArODUsNyBA QCBzdGF0aWMgdm9pZCBSZXdyaXRlQ29udHJvbEZpbGUodm9pZCk7CiBzdGF0aWMgdm9pZCBGaW5k RW5kT2ZYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgS2lsbEV4aXN0aW5nWExPRyh2b2lkKTsKIHN0 YXRpYyB2b2lkIEtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0dXModm9pZCk7CitzdGF0aWMgdm9pZCBL aWxsRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRl RW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7CiAKQEAgLTUzMCw2ICs1 MzEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJUmV3cml0ZUNvbnRyb2xGaWxl KCk7CiAJS2lsbEV4aXN0aW5nWExPRygpOwogCUtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0dXMoKTsK KwlLaWxsRXhpc3RpbmdQcmVhbGxvY2F0ZWRTZWdtZW50cygpOwogCVdyaXRlRW1wdHlYTE9HKCk7 CiAKIAlwcmludGYoXygiV3JpdGUtYWhlYWQgbG9nIHJlc2V0XG4iKSk7CkBAIC0xMDcwLDYgKzEw NzIsNTIgQEAgS2lsbEV4aXN0aW5nWExPRyh2b2lkKQogfQogCiAKKy8qCisgKiBSZW1vdmUgZXhp c3RpbmcgcHJlYWxsb2NhdGVkIHNlZ21lbnRzCisgKi8KK3N0YXRpYyB2b2lkCitLaWxsRXhpc3Rp bmdQcmVhbGxvY2F0ZWRTZWdtZW50cyh2b2lkKQoreworI2RlZmluZSBQUkVBTExPQ1NFR0RJUiBY TE9HRElSICIvcHJlYWxsb2NhdGVkX3NlZ21lbnRzIgorCisJRElSCQkgICAqeGxkaXI7CisJc3Ry dWN0IGRpcmVudCAqeGxkZTsKKwljaGFyCQlwYXRoW01BWFBHUEFUSCArIHNpemVvZihQUkVBTExP Q1NFR0RJUildOworCisJeGxkaXIgPSBvcGVuZGlyKFBSRUFMTE9DU0VHRElSKTsKKwlpZiAoeGxk aXIgPT0gTlVMTCkKKwl7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9wZW4gZGlyZWN0b3J5 IFwiJXNcIjogJW0iLCBQUkVBTExPQ1NFR0RJUik7CisJCWV4aXQoMSk7CisJfQorCisJd2hpbGUg KGVycm5vID0gMCwgKHhsZGUgPSByZWFkZGlyKHhsZGlyKSkgIT0gTlVMTCkKKwl7CisJCWlmIChz dHJuY21wKHhsZGUtPmRfbmFtZSwgInhsb2d0ZW1wIiwgc3RybGVuKCJ4bG9ndGVtcCIpKSA9PSAg MCkKKwkJeworCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBQUkVBTExP Q1NFR0RJUiwgeGxkZS0+ZF9uYW1lKTsKKwkJCWlmICh1bmxpbmsocGF0aCkgPCAwKQorCQkJewor CQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGRlbGV0ZSBmaWxlIFwiJXNcIjogJW0iLCBwYXRo KTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycm5vKQorCXsKKwkJcGdf bG9nX2Vycm9yKCJjb3VsZCBub3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIFBSRUFMTE9D U0VHRElSKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoY2xvc2VkaXIoeGxkaXIpKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBQUkVB TExPQ1NFR0RJUik7CisJCWV4aXQoMSk7CisJfQorfQorCisKIC8qCiAgKiBSZW1vdmUgZXhpc3Rp bmcgYXJjaGl2ZSBzdGF0dXMgZmlsZXMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggNmI2YWU4MWMyZC4u ZTIzY2RiNWQ2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC0zMjgsNiArMzI4LDExIEBAIGV4dGVybiB2b2lk IFhMb2dSZXF1ZXN0V2FsUmVjZWl2ZXJSZXBseSh2b2lkKTsKIGV4dGVybiB2b2lkIGFzc2lnbl9t YXhfd2FsX3NpemUoaW50IG5ld3ZhbCwgdm9pZCAqZXh0cmEpOwogZXh0ZXJuIHZvaWQgYXNzaWdu X2NoZWNrcG9pbnRfY29tcGxldGlvbl90YXJnZXQoZG91YmxlIG5ld3ZhbCwgdm9pZCAqZXh0cmEp OwogCitleHRlcm4gaW50IEdldE51bVByZWFsbG9jYXRlZFdhbFNlZ3Modm9pZCk7CitleHRlcm4g dm9pZCBJbnN0YWxsUHJlYWxsb2NhdGVkV2FsU2VnKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJu IHZvaWQgU2V0TnVtUHJlYWxsb2NhdGVkV2FsU2VncyhpbnQgaSk7CitleHRlcm4gdm9pZCBSZXF1 ZXN0V2FsUHJlYWxsb2NhdGlvbih2b2lkKTsKKwogLyoKICAqIFJvdXRpbmVzIHRvIHN0YXJ0LCBz dG9wLCBhbmQgZ2V0IHN0YXR1cyBvZiBhIGJhc2UgYmFja3VwLgogICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDJl MmU5YTM2NGEuLmUxMGQzN2JjMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0zMzMsNiArMzMzLDcgQEAgdHlwZWRl ZiBlbnVtIEJhY2tlbmRUeXBlCiAJQl9XQUxfUkVDRUlWRVIsCiAJQl9XQUxfU0VOREVSLAogCUJf V0FMX1dSSVRFUiwKKwlCX1dBTF9BTExPQ0FUT1IsCiAJQl9BUkNISVZFUiwKIAlCX1NUQVRTX0NP TExFQ1RPUiwKIAlCX0xPR0dFUiwKQEAgLTQzMyw2ICs0MzQsNyBAQCB0eXBlZGVmIGVudW0KIAlD aGVja3BvaW50ZXJQcm9jZXNzLAogCVdhbFdyaXRlclByb2Nlc3MsCiAJV2FsUmVjZWl2ZXJQcm9j ZXNzLAorCVdhbEFsbG9jYXRvclByb2Nlc3MsCiAKIAlOVU1fQVVYUFJPQ1RZUEVTCQkJLyogTXVz dCBiZSBsYXN0ISAqLwogfSBBdXhQcm9jVHlwZTsKQEAgLTQ0NSw2ICs0NDcsNyBAQCBleHRlcm4g QXV4UHJvY1R5cGUgTXlBdXhQcm9jVHlwZTsKICNkZWZpbmUgQW1DaGVja3BvaW50ZXJQcm9jZXNz KCkJCShNeUF1eFByb2NUeXBlID09IENoZWNrcG9pbnRlclByb2Nlc3MpCiAjZGVmaW5lIEFtV2Fs V3JpdGVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxXcml0ZXJQcm9jZXNzKQogI2Rl ZmluZSBBbVdhbFJlY2VpdmVyUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlwZSA9PSBXYWxSZWNlaXZl clByb2Nlc3MpCisjZGVmaW5lIEFtV2FsQWxsb2NhdG9yUHJvY2VzcygpCQkoTXlBdXhQcm9jVHlw ZSA9PSBXYWxBbGxvY2F0b3JQcm9jZXNzKQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmggYi9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5jN2UxMzkyMjZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci93YWxfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwyMSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogd2FsX2FsbG9jYXRvci5oCisgKgkgIEV4cG9ydHMgZnJvbSBwb3N0bWFz dGVyL3dhbF9hbGxvY2F0b3IuYy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5j bHVkZS9wb3N0bWFzdGVyL3dhbF9hbGxvY2F0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIF9XQUxfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX1dBTF9BTExPQ0FUT1JfSAor CisvKiBHVUMgb3B0aW9ucyAqLworZXh0ZXJuIGludCAgd2FsX2FsbG9jX21heF9zaXplX21iOwor CitleHRlcm4gdm9pZCBXYWxBbGxvY2F0b3JNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVy bigpOworZXh0ZXJuIGJvb2wgV2FsUHJlYWxsb2NhdGlvbkVuYWJsZWQodm9pZCk7CisKKyNlbmRp ZgkJCQkJCQkvKiBfV0FMX0FMTE9DQVRPUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2ZkLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2ZkLmgKaW5kZXggMzQ2MDJhZTAwNi4u YWJjZDc0YmQ1MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9mZC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvZmQuaApAQCAtMTkwLDYgKzE5MCw3IEBAIGV4dGVybiBpbnQJZHVy YWJsZV91bmxpbmsoY29uc3QgY2hhciAqZm5hbWUsIGludCBsb2dsZXZlbCk7CiBleHRlcm4gaW50 CWR1cmFibGVfcmVuYW1lX2V4Y2woY29uc3QgY2hhciAqb2xkZmlsZSwgY29uc3QgY2hhciAqbmV3 ZmlsZSwgaW50IGxvZ2xldmVsKTsKIGV4dGVybiB2b2lkIFN5bmNEYXRhRGlyZWN0b3J5KHZvaWQp OwogZXh0ZXJuIGludAlkYXRhX3N5bmNfZWxldmVsKGludCBlbGV2ZWwpOworZXh0ZXJuIHZvaWQg Q3JlYXRlRW1wdHlXYWxTZWdtZW50KGNvbnN0IGNoYXIgKnBhdGgpOwogCiAvKiBGaWxlbmFtZSBj b21wb25lbnRzICovCiAjZGVmaW5lIFBHX1RFTVBfRklMRVNfRElSICJwZ3NxbF90bXAiCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvYy5oCmluZGV4IGJlNjdkOGE4NjEuLjhkMGNhZTM3YjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0z NDgsNiArMzQ4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUFJPQ19IRFIKIAlwZ19hdG9taWNfdWludDMy IGNsb2dHcm91cEZpcnN0OwogCS8qIFdBTFdyaXRlciBwcm9jZXNzJ3MgbGF0Y2ggKi8KIAlMYXRj aAkgICAqd2Fsd3JpdGVyTGF0Y2g7CisJLyogV0FMIEFsbG9jYXRvciBwcm9jZXNzJ3MgbGF0Y2gg Ki8KKwlMYXRjaAkgICAqd2FsQWxsb2NhdG9yTGF0Y2g7CiAJLyogQ2hlY2twb2ludGVyIHByb2Nl c3MncyBsYXRjaCAqLwogCUxhdGNoCSAgICpjaGVja3BvaW50ZXJMYXRjaDsKIAkvKiBDdXJyZW50 IHNoYXJlZCBlc3RpbWF0ZSBvZiBhcHByb3ByaWF0ZSBzcGluc19wZXJfZGVsYXkgdmFsdWUgKi8K QEAgLTM3MCwxMSArMzcyLDEyIEBAIGV4dGVybiBQR1BST0MgKlByZXBhcmVkWGFjdFByb2NzOwog ICogV2Ugc2V0IGFzaWRlIHNvbWUgZXh0cmEgUEdQUk9DIHN0cnVjdHVyZXMgZm9yIGF1eGlsaWFy eSBwcm9jZXNzZXMsCiAgKiBpZSB0aGluZ3MgdGhhdCBhcmVuJ3QgZnVsbC1mbGVkZ2VkIGJhY2tl bmRzIGJ1dCBuZWVkIHNobWVtIGFjY2Vzcy4KICAqCi0gKiBCYWNrZ3JvdW5kIHdyaXRlciwgY2hl Y2twb2ludGVyLCBXQUwgd3JpdGVyIGFuZCBhcmNoaXZlciBydW4gZHVyaW5nIG5vcm1hbAotICog b3BlcmF0aW9uLiAgU3RhcnR1cCBwcm9jZXNzIGFuZCBXQUwgcmVjZWl2ZXIgYWxzbyBjb25zdW1l IDIgc2xvdHMsIGJ1dCBXQUwKLSAqIHdyaXRlciBpcyBsYXVuY2hlZCBvbmx5IGFmdGVyIHN0YXJ0 dXAgaGFzIGV4aXRlZCwgc28gd2Ugb25seSBuZWVkIDUgc2xvdHMuCisgKiBCYWNrZ3JvdW5kIHdy aXRlciwgY2hlY2twb2ludGVyLCBXQUwgd3JpdGVyLCBhcmNoaXZlciwgYW5kIFdBTCBhbGxvY2F0 b3IgcnVuCisgKiBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4gIFN0YXJ0dXAgcHJvY2VzcyBhbmQg V0FMIHJlY2VpdmVyIGFsc28gY29uc3VtZSAyCisgKiBzbG90cywgYnV0IFdBTCB3cml0ZXIgaXMg bGF1bmNoZWQgb25seSBhZnRlciBzdGFydHVwIGhhcyBleGl0ZWQsIHNvIHdlIG9ubHkKKyAqIG5l ZWQgNiBzbG90cy4KICAqLwotI2RlZmluZSBOVU1fQVVYSUxJQVJZX1BST0NTCQk1CisjZGVmaW5l IE5VTV9BVVhJTElBUllfUFJPQ1MJCTYKIAogLyogY29uZmlndXJhYmxlIG9wdGlvbnMgKi8KIGV4 dGVybiBQR0RMTElNUE9SVCBpbnQgRGVhZGxvY2tUaW1lb3V0OwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5o CmluZGV4IDYwMDc4MjdiNDQuLjE4YTA1ZjhkNTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL3dhaXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKQEAg LTQ3LDcgKzQ3LDggQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9TWVNMT0dHRVJfTUFJTiwK IAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOLAogCVdBSVRfRVZFTlRfV0FMX1NFTkRFUl9N QUlOLAotCVdBSVRfRVZFTlRfV0FMX1dSSVRFUl9NQUlOCisJV0FJVF9FVkVOVF9XQUxfV1JJVEVS X01BSU4sCisJV0FJVF9FVkVOVF9XQUxfQUxMT0NBVE9SX01BSU4KIH0gV2FpdEV2ZW50QWN0aXZp dHk7CiAKIC8qIC0tLS0tLS0tLS0KLS0gCjIuMTYuNgoK --_002_0AF7CB14F9CD43FD81F203CDB22C5137amazoncom_--