From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.120]) by mx.groups.io with SMTP id smtpd.web11.1419.1579201649298982079 for ; Thu, 16 Jan 2020 11:07:29 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=GuO+/XCq; spf=pass (domain: redhat.com, ip: 205.139.110.120, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1579201648; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=crUu6qwfNjs6au1vRLzpkGmHCF6EAqxXcapeu9Zg4yk=; b=GuO+/XCqunPwMQtionv7ZuppJQIQmd439ipYRD0adap8aoxcrxbSjt9f3nGEpTMkC2QnKT QvAca4ObKQwcnu5+a4B44D0qnie+Ym2Qifjxi3rOC6NhLplJW9mbb2RvcWxmQ/yP7ZRLYE J7ySTbDhr1kxyNRTUrVMPeSzzArHtQk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-404-s1yaIvVeOn-vRNndUxckmg-1; Thu, 16 Jan 2020 14:07:25 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 98E8310054E3; Thu, 16 Jan 2020 19:07:23 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-120.ams2.redhat.com [10.36.116.120]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7720680890; Thu, 16 Jan 2020 19:07:22 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Chao Zhang , Jian J Wang , Jiewen Yao Subject: [PATCH 10/11] SecurityPkg/DxeImageVerificationHandler: fix imgexec info on memalloc fail Date: Thu, 16 Jan 2020 20:07:04 +0100 Message-Id: <20200116190705.18816-11-lersek@redhat.com> In-Reply-To: <20200116190705.18816-1-lersek@redhat.com> References: <20200116190705.18816-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-MC-Unique: s1yaIvVeOn-vRNndUxckmg-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: base64 SXQgbWFrZXMgbm8gc2Vuc2UgdG8gY2FsbCBBZGRJbWFnZUV4ZUluZm8oKSB3aXRoIChTaWduYXR1 cmUgPT0gTlVMTCkgYW5kCihTaWduYXR1cmVTaXplID4gMCkuIEFkZEltYWdlRXhlSW5mbygpIGRv ZXMgbm90IGNyYXNoIGluIHN1Y2ggYSBjYXNlIC0tIGl0CmF2b2lkcyB0aGUgQ29weU1lbSgpIGNh bGwgLS0sIGJ1dCBpdCBjcmVhdGVzIGFuIGludmFsaWQKRUZJX0lNQUdFX0VYRUNVVElPTl9JTkZP IHJlY29yZC4gTmFtZWx5LCB0aGUKIkVGSV9JTUFHRV9FWEVDVVRJT05fSU5GTy5JbmZvU2l6ZSIg ZmllbGQgaW5jbHVkZXMgIlNpZ25hdHVyZVNpemUiLCBidXQKdGhlIGFjdHVhbCBzaWduYXR1cmUg Ynl0ZXMgYXJlIG5vdCBmaWxsZWQgaW4uCgpEb2N1bWVudCBhbmQgQVNTRVJUKCkgdGhpcyBjb25k aXRpb24gaW4gQWRkSW1hZ2VFeGVJbmZvKCkuCgpJbiBEeGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRs ZXIoKSwgemVybyBvdXQgIlNpZ25hdHVyZUxpc3RTaXplIiBpZiB3ZSBzZXQKIlNpZ25hdHVyZUxp c3QiIHRvIE5VTEwgZHVlIHRvIEFsbG9jYXRlWmVyb1Bvb2woKSBmYWlsdXJlLgoKKEFub3RoZXIg YXBwcm9hY2ggY291bGQgYmUgdG8gYXZvaWQgY2FsbGluZyBBZGRJbWFnZUV4ZUluZm8oKSBjb21w bGV0ZWx5LAppbiBjYXNlIEFsbG9jYXRlWmVyb1Bvb2woKSBmYWlscy4gVW5mb3J0dW5hdGVseSwg dGhlIFVFRkkgdjIuOCBzcGVjIGRvZXMKbm90IHNlZW0gdG8gc3RhdGUgY2xlYXJseSB3aGV0aGVy IGEgc2lnbmF0dXJlIGlzIG1hbmRhdG9yeSBpbgpFRklfSU1BR0VfRVhFQ1VUSU9OX0lORk8sIGlm IHRoZSAiQWN0aW9uIiBmaWVsZCBpcwpFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZBSUxF RCBvciBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZPVU5ELgoKRm9yIG5vdywgdGhlIEVG SV9JTUFHRV9FWEVDVVRJT05fSU5GTyBhZGRpdGlvbiBsb2dpYyBpcyBub3QgY2hhbmdlZDsgd2UK b25seSBtYWtlIHN1cmUgdGhhdCB0aGUgcmVjb3JkIHdlIGFkZCBpcyBub3QgbWFsZm9ybWVkLikK CkNjOiBDaGFvIFpoYW5nIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPgpDYzogSmlhbiBKIFdhbmcg PGppYW4uai53YW5nQGludGVsLmNvbT4KQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwu Y29tPgpSZWY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9 MjEyOQpTaWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPgotLS0K IFNlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJp ZmljYXRpb25MaWIuYyB8IDQgKysrLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VW ZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYyBiL1NlY3VyaXR5UGtnL0xp YnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIuYwpp bmRleCBmNmFkNTkzMWJlMDcuLjUzZWYzNDBjMDhhZCAxMDA2NDQKLS0tIGEvU2VjdXJpdHlQa2cv TGlicmFyeS9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi9EeGVJbWFnZVZlcmlmaWNhdGlvbkxpYi5j CisrKyBiL1NlY3VyaXR5UGtnL0xpYnJhcnkvRHhlSW1hZ2VWZXJpZmljYXRpb25MaWIvRHhlSW1h Z2VWZXJpZmljYXRpb25MaWIuYwpAQCAtNjc4LDE1MSArNjc4LDE1MiBAQCBVSU5UTgogR2V0SW1h Z2VFeGVJbmZvVGFibGVTaXplICgNCiAgIEVGSV9JTUFHRV9FWEVDVVRJT05fSU5GT19UQUJMRSAg ICAgICAgKkltYWdlRXhlSW5mb1RhYmxlDQogICApDQogew0KICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCiAgIEVGSV9JTUFHRV9FWEVDVVRJT05fSU5GTyAgKkltYWdlRXhlSW5m b0l0ZW07DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFRvdGFsU2l6ZTsNCiANCiAgIGlm IChJbWFnZUV4ZUluZm9UYWJsZSA9PSBOVUxMKSB7DQogICAgIHJldHVybiAwOw0KICAgfQ0KIA0K ICAgSW1hZ2VFeGVJbmZvSXRlbSAgPSAoRUZJX0lNQUdFX0VYRUNVVElPTl9JTkZPICopICgoVUlO VDggKikgSW1hZ2VFeGVJbmZvVGFibGUgKyBzaXplb2YgKEVGSV9JTUFHRV9FWEVDVVRJT05fSU5G T19UQUJMRSkpOw0KICAgVG90YWxTaXplICAgICAgICAgPSBzaXplb2YgKEVGSV9JTUFHRV9FWEVD VVRJT05fSU5GT19UQUJMRSk7DQogICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJbWFnZUV4ZUlu Zm9UYWJsZS0+TnVtYmVyT2ZJbWFnZXM7IEluZGV4KyspIHsNCiAgICAgVG90YWxTaXplICs9IFJl YWRVbmFsaWduZWQzMiAoKFVJTlQzMiAqKSAmSW1hZ2VFeGVJbmZvSXRlbS0+SW5mb1NpemUpOw0K ICAgICBJbWFnZUV4ZUluZm9JdGVtID0gKEVGSV9JTUFHRV9FWEVDVVRJT05fSU5GTyAqKSAoKFVJ TlQ4ICopIEltYWdlRXhlSW5mb0l0ZW0gKyBSZWFkVW5hbGlnbmVkMzIgKChVSU5UMzIgKikgJklt YWdlRXhlSW5mb0l0ZW0tPkluZm9TaXplKSk7DQogICB9DQogDQogICByZXR1cm4gVG90YWxTaXpl Ow0KIH0NCiANCiAvKioNCiAgIENyZWF0ZSBhbiBJbWFnZSBFeGVjdXRpb24gSW5mb3JtYXRpb24g VGFibGUgZW50cnkgYW5kIGFkZCBpdCB0byBzeXN0ZW0gY29uZmlndXJhdGlvbiB0YWJsZS4NCiAN CiAgIEBwYXJhbVtpbl0gIEFjdGlvbiAgICAgICAgICBEZXNjcmliZXMgdGhlIGFjdGlvbiB0YWtl biBieSB0aGUgZmlybXdhcmUgcmVnYXJkaW5nIHRoaXMgaW1hZ2UuDQogICBAcGFyYW1baW5dICBO YW1lICAgICAgICAgICAgSW5wdXQgYSBudWxsLXRlcm1pbmF0ZWQsIHVzZXItZnJpZW5kbHkgbmFt ZS4NCiAgIEBwYXJhbVtpbl0gIERldmljZVBhdGggICAgICBJbnB1dCBkZXZpY2UgcGF0aCBwb2lu dGVyLg0KICAgQHBhcmFtW2luXSAgU2lnbmF0dXJlICAgICAgIElucHV0IHNpZ25hdHVyZSBpbmZv IGluIEVGSV9TSUdOQVRVUkVfTElTVCBkYXRhIHN0cnVjdHVyZS4NCi0gIEBwYXJhbVtpbl0gIFNp Z25hdHVyZVNpemUgICBTaXplIG9mIHNpZ25hdHVyZS4NCisgIEBwYXJhbVtpbl0gIFNpZ25hdHVy ZVNpemUgICBTaXplIG9mIHNpZ25hdHVyZS4gTXVzdCBiZSB6ZXJvIGlmIFNpZ25hdHVyZSBpcyBO VUxMLg0KIA0KICoqLw0KIFZPSUQNCiBBZGRJbWFnZUV4ZUluZm8gKA0KICAgSU4gICAgICAgRUZJ X0lNQUdFX0VYRUNVVElPTl9BQ1RJT04gICAgICAgQWN0aW9uLA0KICAgSU4gICAgICAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5hbWUgT1BUSU9OQUwsDQogICBJTiBDT05TVCBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAqRGV2aWNlUGF0aCwNCiAgIElOICAgICAg IEVGSV9TSUdOQVRVUkVfTElTVCAgICAgICAgICAgICAgICpTaWduYXR1cmUgT1BUSU9OQUwsDQog ICBJTiAgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmVTaXpl DQogICApDQogew0KICAgRUZJX0lNQUdFX0VYRUNVVElPTl9JTkZPX1RBQkxFICAqSW1hZ2VFeGVJ bmZvVGFibGU7DQogICBFRklfSU1BR0VfRVhFQ1VUSU9OX0lORk9fVEFCTEUgICpOZXdJbWFnZUV4 ZUluZm9UYWJsZTsNCiAgIEVGSV9JTUFHRV9FWEVDVVRJT05fSU5GTyAgICAgICAgKkltYWdlRXhl SW5mb0VudHJ5Ow0KICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUV4ZUlu Zm9UYWJsZVNpemU7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ld0ltYWdl RXhlSW5mb0VudHJ5U2l6ZTsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFt ZVN0cmluZ0xlbjsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlUGF0 aFNpemU7DQogICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICpOYW1lU3RyOw0KIA0K ICAgSW1hZ2VFeGVJbmZvVGFibGUgICAgID0gTlVMTDsNCiAgIE5ld0ltYWdlRXhlSW5mb1RhYmxl ICA9IE5VTEw7DQogICBJbWFnZUV4ZUluZm9FbnRyeSAgICAgPSBOVUxMOw0KICAgTmFtZVN0cmlu Z0xlbiAgICAgICAgID0gMDsNCiAgIE5hbWVTdHIgICAgICAgICAgICAgICA9IE5VTEw7DQogDQog ICBpZiAoRGV2aWNlUGF0aCA9PSBOVUxMKSB7DQogICAgIHJldHVybiA7DQogICB9DQogDQogICBp ZiAoTmFtZSAhPSBOVUxMKSB7DQogICAgIE5hbWVTdHJpbmdMZW4gPSBTdHJTaXplIChOYW1lKTsN CiAgIH0gZWxzZSB7DQogICAgIE5hbWVTdHJpbmdMZW4gPSBzaXplb2YgKENIQVIxNik7DQogICB9 DQogDQogICBFZmlHZXRTeXN0ZW1Db25maWd1cmF0aW9uVGFibGUgKCZnRWZpSW1hZ2VTZWN1cml0 eURhdGFiYXNlR3VpZCwgKFZPSUQgKiopICZJbWFnZUV4ZUluZm9UYWJsZSk7DQogICBpZiAoSW1h Z2VFeGVJbmZvVGFibGUgIT0gTlVMTCkgew0KICAgICAvLw0KICAgICAvLyBUaGUgdGFibGUgaGFz IGJlZW4gZm91bmQhDQogICAgIC8vIFdlIG11c3QgZW5sYXJnZSB0aGUgdGFibGUgdG8gYWNjb21t b2RhdGUgdGhlIG5ldyBleGUgaW5mbyBlbnRyeS4NCiAgICAgLy8NCiAgICAgSW1hZ2VFeGVJbmZv VGFibGVTaXplID0gR2V0SW1hZ2VFeGVJbmZvVGFibGVTaXplIChJbWFnZUV4ZUluZm9UYWJsZSk7 DQogICB9IGVsc2Ugew0KICAgICAvLw0KICAgICAvLyBOb3QgRm91bmQhDQogICAgIC8vIFdlIHNo b3VsZCBjcmVhdGUgYSBuZXcgdGFibGUgdG8gYXBwZW5kIHRvIHRoZSBjb25maWd1cmF0aW9uIHRh YmxlLg0KICAgICAvLw0KICAgICBJbWFnZUV4ZUluZm9UYWJsZVNpemUgPSBzaXplb2YgKEVGSV9J TUFHRV9FWEVDVVRJT05fSU5GT19UQUJMRSk7DQogICB9DQogDQogICBEZXZpY2VQYXRoU2l6ZSAg ICAgICAgICAgID0gR2V0RGV2aWNlUGF0aFNpemUgKERldmljZVBhdGgpOw0KIA0KICAgLy8NCiAg IC8vIFNpZ25hdHVyZSBzaXplIGNhbiBiZSBvZGQuIFBhZCBhZnRlciBzaWduYXR1cmUgdG8gZW5z dXJlIG5leHQgRVhFQ1VUSU9OX0lORk8gZW50cnkgYWxpZ24NCiAgIC8vDQorICBBU1NFUlQgKFNp Z25hdHVyZSAhPSBOVUxMIHx8IFNpZ25hdHVyZVNpemUgPT0gMCk7DQogICBOZXdJbWFnZUV4ZUlu Zm9FbnRyeVNpemUgPSBzaXplb2YgKEVGSV9JTUFHRV9FWEVDVVRJT05fSU5GTykgKyBOYW1lU3Ry aW5nTGVuICsgRGV2aWNlUGF0aFNpemUgKyBTaWduYXR1cmVTaXplOw0KIA0KICAgTmV3SW1hZ2VF eGVJbmZvVGFibGUgICAgICA9IChFRklfSU1BR0VfRVhFQ1VUSU9OX0lORk9fVEFCTEUgKikgQWxs b2NhdGVSdW50aW1lUG9vbCAoSW1hZ2VFeGVJbmZvVGFibGVTaXplICsgTmV3SW1hZ2VFeGVJbmZv RW50cnlTaXplKTsNCiAgIGlmIChOZXdJbWFnZUV4ZUluZm9UYWJsZSA9PSBOVUxMKSB7DQogICAg IHJldHVybiA7DQogICB9DQogDQogICBpZiAoSW1hZ2VFeGVJbmZvVGFibGUgIT0gTlVMTCkgew0K ICAgICBDb3B5TWVtIChOZXdJbWFnZUV4ZUluZm9UYWJsZSwgSW1hZ2VFeGVJbmZvVGFibGUsIElt YWdlRXhlSW5mb1RhYmxlU2l6ZSk7DQogICB9IGVsc2Ugew0KICAgICBOZXdJbWFnZUV4ZUluZm9U YWJsZS0+TnVtYmVyT2ZJbWFnZXMgPSAwOw0KICAgfQ0KICAgTmV3SW1hZ2VFeGVJbmZvVGFibGUt Pk51bWJlck9mSW1hZ2VzKys7DQogICBJbWFnZUV4ZUluZm9FbnRyeSA9IChFRklfSU1BR0VfRVhF Q1VUSU9OX0lORk8gKikgKChVSU5UOCAqKSBOZXdJbWFnZUV4ZUluZm9UYWJsZSArIEltYWdlRXhl SW5mb1RhYmxlU2l6ZSk7DQogICAvLw0KICAgLy8gVXBkYXRlIG5ldyBpdGVtJ3MgaW5mb3JtYXRp b24uDQogICAvLw0KICAgV3JpdGVVbmFsaWduZWQzMiAoKFVJTlQzMiAqKSBJbWFnZUV4ZUluZm9F bnRyeSwgQWN0aW9uKTsNCiAgIFdyaXRlVW5hbGlnbmVkMzIgKChVSU5UMzIgKikgKChVSU5UOCAq KSBJbWFnZUV4ZUluZm9FbnRyeSArIHNpemVvZiAoRUZJX0lNQUdFX0VYRUNVVElPTl9BQ1RJT04p KSwgKFVJTlQzMikgTmV3SW1hZ2VFeGVJbmZvRW50cnlTaXplKTsNCiANCiAgIE5hbWVTdHIgPSAo Q0hBUjE2ICopKEltYWdlRXhlSW5mb0VudHJ5ICsgMSk7DQogICBpZiAoTmFtZSAhPSBOVUxMKSB7 DQogICAgIENvcHlNZW0gKChVSU5UOCAqKSBOYW1lU3RyLCBOYW1lLCBOYW1lU3RyaW5nTGVuKTsN CiAgIH0gZWxzZSB7DQogICAgIFplcm9NZW0gKChVSU5UOCAqKSBOYW1lU3RyLCBzaXplb2YgKENI QVIxNikpOw0KICAgfQ0KIA0KICAgQ29weU1lbSAoDQogICAgIChVSU5UOCAqKSBOYW1lU3RyICsg TmFtZVN0cmluZ0xlbiwNCiAgICAgRGV2aWNlUGF0aCwNCiAgICAgRGV2aWNlUGF0aFNpemUNCiAg ICAgKTsNCiAgIGlmIChTaWduYXR1cmUgIT0gTlVMTCkgew0KICAgICBDb3B5TWVtICgNCiAgICAg ICAoVUlOVDggKikgTmFtZVN0ciArIE5hbWVTdHJpbmdMZW4gKyBEZXZpY2VQYXRoU2l6ZSwNCiAg ICAgICBTaWduYXR1cmUsDQogICAgICAgU2lnbmF0dXJlU2l6ZQ0KICAgICAgICk7DQogICB9DQog ICAvLw0KICAgLy8gVXBkYXRlL3JlcGxhY2UgdGhlIGltYWdlIGV4ZWN1dGlvbiB0YWJsZS4NCiAg IC8vDQogICBnQlMtPkluc3RhbGxDb25maWd1cmF0aW9uVGFibGUgKCZnRWZpSW1hZ2VTZWN1cml0 eURhdGFiYXNlR3VpZCwgKFZPSUQgKikgTmV3SW1hZ2VFeGVJbmZvVGFibGUpOw0KIA0KICAgLy8N CiAgIC8vIEZyZWUgT2xkIHRhYmxlIGRhdGEhDQogICAvLw0KICAgaWYgKEltYWdlRXhlSW5mb1Rh YmxlICE9IE5VTEwpIHsNCiAgICAgRnJlZVBvb2wgKEltYWdlRXhlSW5mb1RhYmxlKTsNCiAgIH0N CiB9DQogDQogLyoqDQogICBDaGVjayB3aGV0aGVyIHRoZSBoYXNoIG9mIGFuIGdpdmVuIFguNTA5 IGNlcnRpZmljYXRlIGlzIGluIGZvcmJpZGRlbiBkYXRhYmFzZSAoREJYKS4NCiANCiAgIEBwYXJh bVtpbl0gIENlcnRpZmljYXRlICAgICAgIFBvaW50ZXIgdG8gWC41MDkgQ2VydGlmaWNhdGUgdGhh dCBpcyBzZWFyY2hlZCBmb3IuDQogICBAcGFyYW1baW5dICBDZXJ0U2l6ZSAgICAgICAgICBTaXpl IG9mIFguNTA5IENlcnRpZmljYXRlLg0KICAgQHBhcmFtW2luXSAgU2lnbmF0dXJlTGlzdCAgICAg UG9pbnRlciB0byB0aGUgU2lnbmF0dXJlIExpc3QgaW4gZm9yYmlkZGVuIGRhdGFiYXNlLg0KICAg QHBhcmFtW2luXSAgU2lnbmF0dXJlTGlzdFNpemUgU2l6ZSBvZiBTaWduYXR1cmUgTGlzdC4NCiAg IEBwYXJhbVtvdXRdIFJldm9jYXRpb25UaW1lICAgIFJldHVybiB0aGUgdGltZSB0aGF0IHRoZSBj ZXJ0aWZpY2F0ZSB3YXMgcmV2b2tlZC4NCiANCiAgIEByZXR1cm4gVFJVRSAgIFRoZSBjZXJ0aWZp Y2F0ZSBoYXNoIGlzIGZvdW5kIGluIHRoZSBmb3JiaWRkZW4gZGF0YWJhc2UuDQogICBAcmV0dXJu IEZBTFNFICBUaGUgY2VydGlmaWNhdGUgaGFzaCBpcyBub3QgZm91bmQgaW4gdGhlIGZvcmJpZGRl biBkYXRhYmFzZS4NCiANCiAqKi8NCkBAIC0xNTU1LDM0MyArMTU1NiwzNDQgQEAgRUZJQVBJCiBE eGVJbWFnZVZlcmlmaWNhdGlvbkhhbmRsZXIgKA0KICAgSU4gIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uU3RhdHVzLA0KICAgSU4gIENPTlNUIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgICpGaWxlLA0KICAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpGaWxlQnVmZmVyLA0KICAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbGVTaXplLA0KICAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAg IEJvb3RQb2xpY3kNCiAgICkNCiB7DQogICBFRklfSU1BR0VfRE9TX0hFQURFUiAgICAgICAgICAg ICAgICAgKkRvc0hkcjsNCiAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ c1ZlcmlmaWVkOw0KICAgRUZJX1NJR05BVFVSRV9MSVNUICAgICAgICAgICAgICAgICAgICpTaWdu YXR1cmVMaXN0Ow0KICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25h dHVyZUxpc3RTaXplOw0KICAgRUZJX1NJR05BVFVSRV9EQVRBICAgICAgICAgICAgICAgICAgICpT aWduYXR1cmU7DQogICBFRklfSU1BR0VfRVhFQ1VUSU9OX0FDVElPTiAgICAgICAgICAgQWN0aW9u Ow0KICAgV0lOX0NFUlRJRklDQVRFICAgICAgICAgICAgICAgICAgICAgICpXaW5DZXJ0aWZpY2F0 ZTsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xpY3k7DQogICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlNlY3VyZUJvb3Q7DQogICBQRV9D T0ZGX0xPQURFUl9JTUFHRV9DT05URVhUICAgICAgICAgSW1hZ2VDb250ZXh0Ow0KICAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mUnZhQW5kU2l6ZXM7DQogICBX SU5fQ0VSVElGSUNBVEVfRUZJX1BLQ1MgICAgICAgICAgICAgKlBrY3NDZXJ0RGF0YTsNCiAgIFdJ Tl9DRVJUSUZJQ0FURV9VRUZJX0dVSUQgICAgICAgICAgICAqV2luQ2VydFVlZmlHdWlkOw0KICAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpBdXRoRGF0YTsNCiAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoRGF0YVNpemU7DQogICBFRklfSU1B R0VfREFUQV9ESVJFQ1RPUlkgICAgICAgICAgICAgKlNlY0RhdGFEaXI7DQogICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT2ZmU2V0Ow0KICAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpOYW1lU3RyOw0KICAgUkVUVVJOX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgICAgIFBlQ29mZlN0YXR1czsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICBIYXNoU3RhdHVzOw0KIA0KICAgU2lnbmF0dXJlTGlzdCAgICAgPSBOVUxMOw0K ICAgU2lnbmF0dXJlTGlzdFNpemUgPSAwOw0KICAgV2luQ2VydGlmaWNhdGUgICAgPSBOVUxMOw0K ICAgU2VjRGF0YURpciAgICAgICAgPSBOVUxMOw0KICAgUGtjc0NlcnREYXRhICAgICAgPSBOVUxM Ow0KICAgQWN0aW9uICAgICAgICAgICAgPSBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfVU5URVNU RUQ7DQogICBJc1ZlcmlmaWVkICAgICAgICA9IEZBTFNFOw0KIA0KIA0KICAgLy8NCiAgIC8vIENo ZWNrIHRoZSBpbWFnZSB0eXBlIGFuZCBnZXQgcG9saWN5IHNldHRpbmcuDQogICAvLw0KICAgc3dp dGNoIChHZXRJbWFnZVR5cGUgKEZpbGUpKSB7DQogDQogICBjYXNlIElNQUdFX0ZST01fRlY6DQog ICAgIFBvbGljeSA9IEFMV0FZU19FWEVDVVRFOw0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSU1B R0VfRlJPTV9PUFRJT05fUk9NOg0KICAgICBQb2xpY3kgPSBQY2RHZXQzMiAoUGNkT3B0aW9uUm9t SW1hZ2VWZXJpZmljYXRpb25Qb2xpY3kpOw0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSU1BR0Vf RlJPTV9SRU1PVkFCTEVfTUVESUE6DQogICAgIFBvbGljeSA9IFBjZEdldDMyIChQY2RSZW1vdmFi bGVNZWRpYUltYWdlVmVyaWZpY2F0aW9uUG9saWN5KTsNCiAgICAgYnJlYWs7DQogDQogICBjYXNl IElNQUdFX0ZST01fRklYRURfTUVESUE6DQogICAgIFBvbGljeSA9IFBjZEdldDMyIChQY2RGaXhl ZE1lZGlhSW1hZ2VWZXJpZmljYXRpb25Qb2xpY3kpOw0KICAgICBicmVhazsNCiANCiAgIGRlZmF1 bHQ6DQogICAgIFBvbGljeSA9IERFTllfRVhFQ1VURV9PTl9TRUNVUklUWV9WSU9MQVRJT047DQog ICAgIGJyZWFrOw0KICAgfQ0KICAgLy8NCiAgIC8vIElmIHBvbGljeSBpcyBhbHdheXMvbmV2ZXIg ZXhlY3V0ZSwgcmV0dXJuIGRpcmVjdGx5Lg0KICAgLy8NCiAgIGlmIChQb2xpY3kgPT0gQUxXQVlT X0VYRUNVVEUpIHsNCiAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgfQ0KICAgaWYgKFBvbGlj eSA9PSBORVZFUl9FWEVDVVRFKSB7DQogICAgIHJldHVybiBFRklfQUNDRVNTX0RFTklFRDsNCiAg IH0NCiANCiAgIC8vDQogICAvLyBUaGUgcG9saWN5IFFVRVJZX1VTRVJfT05fU0VDVVJJVFlfVklP TEFUSU9OIGFuZCBBTExPV19FWEVDVVRFX09OX1NFQ1VSSVRZX1ZJT0xBVElPTg0KICAgLy8gdmlv bGF0ZXMgdGhlIFVFRkkgc3BlYyBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4NCiAgIC8vDQogICBBU1NF UlQgKFBvbGljeSAhPSBRVUVSWV9VU0VSX09OX1NFQ1VSSVRZX1ZJT0xBVElPTiAmJiBQb2xpY3kg IT0gQUxMT1dfRVhFQ1VURV9PTl9TRUNVUklUWV9WSU9MQVRJT04pOw0KICAgaWYgKFBvbGljeSA9 PSBRVUVSWV9VU0VSX09OX1NFQ1VSSVRZX1ZJT0xBVElPTiB8fCBQb2xpY3kgPT0gQUxMT1dfRVhF Q1VURV9PTl9TRUNVUklUWV9WSU9MQVRJT04pIHsNCiAgICAgQ3B1RGVhZExvb3AgKCk7DQogICB9 DQogDQogICBHZXRFZmlHbG9iYWxWYXJpYWJsZTIgKEVGSV9TRUNVUkVfQk9PVF9NT0RFX05BTUUs IChWT0lEKiopJlNlY3VyZUJvb3QsIE5VTEwpOw0KICAgLy8NCiAgIC8vIFNraXAgdmVyaWZpY2F0 aW9uIGlmIFNlY3VyZUJvb3QgdmFyaWFibGUgZG9lc24ndCBleGlzdC4NCiAgIC8vDQogICBpZiAo U2VjdXJlQm9vdCA9PSBOVUxMKSB7DQogICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCiAgIH0NCiAN CiAgIC8vDQogICAvLyBTa2lwIHZlcmlmaWNhdGlvbiBpZiBTZWN1cmVCb290IGlzIGRpc2FibGVk IGJ1dCBub3QgQXVkaXRNb2RlDQogICAvLw0KICAgaWYgKCpTZWN1cmVCb290ID09IFNFQ1VSRV9C T09UX01PREVfRElTQUJMRSkgew0KICAgICBGcmVlUG9vbCAoU2VjdXJlQm9vdCk7DQogICAgIHJl dHVybiBFRklfU1VDQ0VTUzsNCiAgIH0NCiAgIEZyZWVQb29sIChTZWN1cmVCb290KTsNCiANCiAg IC8vDQogICAvLyBSZWFkIHRoZSBEb3MgaGVhZGVyLg0KICAgLy8NCiAgIGlmIChGaWxlQnVmZmVy ID09IE5VTEwpIHsNCiAgICAgcmV0dXJuIEVGSV9BQ0NFU1NfREVOSUVEOw0KICAgfQ0KIA0KICAg bUltYWdlQmFzZSAgPSAoVUlOVDggKikgRmlsZUJ1ZmZlcjsNCiAgIG1JbWFnZVNpemUgID0gRmls ZVNpemU7DQogDQogICBaZXJvTWVtICgmSW1hZ2VDb250ZXh0LCBzaXplb2YgKEltYWdlQ29udGV4 dCkpOw0KICAgSW1hZ2VDb250ZXh0LkhhbmRsZSAgICA9IChWT0lEICopIEZpbGVCdWZmZXI7DQog ICBJbWFnZUNvbnRleHQuSW1hZ2VSZWFkID0gKFBFX0NPRkZfTE9BREVSX1JFQURfRklMRSkgRHhl SW1hZ2VWZXJpZmljYXRpb25MaWJJbWFnZVJlYWQ7DQogDQogICAvLw0KICAgLy8gR2V0IGluZm9y bWF0aW9uIGFib3V0IHRoZSBpbWFnZSBiZWluZyBsb2FkZWQNCiAgIC8vDQogICBQZUNvZmZTdGF0 dXMgPSBQZUNvZmZMb2FkZXJHZXRJbWFnZUluZm8gKCZJbWFnZUNvbnRleHQpOw0KICAgaWYgKFJF VFVSTl9FUlJPUiAoUGVDb2ZmU3RhdHVzKSkgew0KICAgICAvLw0KICAgICAvLyBUaGUgaW5mb3Jt YXRpb24gY2FuJ3QgYmUgZ290IGZyb20gdGhlIGludmFsaWQgUGVJbWFnZQ0KICAgICAvLw0KICAg ICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjogUGVJbWFnZSBp bnZhbGlkLiBDYW5ub3QgcmV0cmlldmUgaW1hZ2UgaW5mb3JtYXRpb24uXG4iKSk7DQogICAgIGdv dG8gRmFpbGVkOw0KICAgfQ0KIA0KICAgRG9zSGRyID0gKEVGSV9JTUFHRV9ET1NfSEVBREVSICop IG1JbWFnZUJhc2U7DQogICBpZiAoRG9zSGRyLT5lX21hZ2ljID09IEVGSV9JTUFHRV9ET1NfU0lH TkFUVVJFKSB7DQogICAgIC8vDQogICAgIC8vIERPUyBpbWFnZSBoZWFkZXIgaXMgcHJlc2VudCwN CiAgICAgLy8gc28gcmVhZCB0aGUgUEUgaGVhZGVyIGFmdGVyIHRoZSBET1MgaW1hZ2UgaGVhZGVy Lg0KICAgICAvLw0KICAgICBtUGVDb2ZmSGVhZGVyT2Zmc2V0ID0gRG9zSGRyLT5lX2xmYW5ldzsN CiAgIH0gZWxzZSB7DQogICAgIG1QZUNvZmZIZWFkZXJPZmZzZXQgPSAwOw0KICAgfQ0KICAgLy8N CiAgIC8vIENoZWNrIFBFL0NPRkYgaW1hZ2UuDQogICAvLw0KICAgbU50SGVhZGVyLlBlMzIgPSAo RUZJX0lNQUdFX05UX0hFQURFUlMzMiAqKSAobUltYWdlQmFzZSArIG1QZUNvZmZIZWFkZXJPZmZz ZXQpOw0KICAgaWYgKG1OdEhlYWRlci5QZTMyLT5TaWduYXR1cmUgIT0gRUZJX0lNQUdFX05UX1NJ R05BVFVSRSkgew0KICAgICAvLw0KICAgICAvLyBJdCBpcyBub3QgYSB2YWxpZCBQZS9Db2ZmIGZp bGUuDQogICAgIC8vDQogICAgIERFQlVHICgoREVCVUdfSU5GTywgIkR4ZUltYWdlVmVyaWZpY2F0 aW9uTGliOiBOb3QgYSB2YWxpZCBQRS9DT0ZGIGltYWdlLlxuIikpOw0KICAgICBnb3RvIEZhaWxl ZDsNCiAgIH0NCiANCiAgIGlmIChtTnRIZWFkZXIuUGUzMi0+T3B0aW9uYWxIZWFkZXIuTWFnaWMg PT0gRUZJX0lNQUdFX05UX09QVElPTkFMX0hEUjMyX01BR0lDKSB7DQogICAgIC8vDQogICAgIC8v IFVzZSBQRTMyIG9mZnNldC4NCiAgICAgLy8NCiAgICAgTnVtYmVyT2ZSdmFBbmRTaXplcyA9IG1O dEhlYWRlci5QZTMyLT5PcHRpb25hbEhlYWRlci5OdW1iZXJPZlJ2YUFuZFNpemVzOw0KICAgICBp ZiAoTnVtYmVyT2ZSdmFBbmRTaXplcyA+IEVGSV9JTUFHRV9ESVJFQ1RPUllfRU5UUllfU0VDVVJJ VFkpIHsNCiAgICAgICBTZWNEYXRhRGlyID0gKEVGSV9JTUFHRV9EQVRBX0RJUkVDVE9SWSAqKSAm bU50SGVhZGVyLlBlMzItPk9wdGlvbmFsSGVhZGVyLkRhdGFEaXJlY3RvcnlbRUZJX0lNQUdFX0RJ UkVDVE9SWV9FTlRSWV9TRUNVUklUWV07DQogICAgIH0NCiAgIH0gZWxzZSB7DQogICAgIC8vDQog ICAgIC8vIFVzZSBQRTMyKyBvZmZzZXQuDQogICAgIC8vDQogICAgIE51bWJlck9mUnZhQW5kU2l6 ZXMgPSBtTnRIZWFkZXIuUGUzMlBsdXMtPk9wdGlvbmFsSGVhZGVyLk51bWJlck9mUnZhQW5kU2l6 ZXM7DQogICAgIGlmIChOdW1iZXJPZlJ2YUFuZFNpemVzID4gRUZJX0lNQUdFX0RJUkVDVE9SWV9F TlRSWV9TRUNVUklUWSkgew0KICAgICAgIFNlY0RhdGFEaXIgPSAoRUZJX0lNQUdFX0RBVEFfRElS RUNUT1JZICopICZtTnRIZWFkZXIuUGUzMlBsdXMtPk9wdGlvbmFsSGVhZGVyLkRhdGFEaXJlY3Rv cnlbRUZJX0lNQUdFX0RJUkVDVE9SWV9FTlRSWV9TRUNVUklUWV07DQogICAgIH0NCiAgIH0NCiAN CiAgIC8vDQogICAvLyBTdGFydCBJbWFnZSBWYWxpZGF0aW9uLg0KICAgLy8NCiAgIGlmIChTZWNE YXRhRGlyID09IE5VTEwgfHwgU2VjRGF0YURpci0+U2l6ZSA9PSAwKSB7DQogICAgIC8vDQogICAg IC8vIFRoaXMgaW1hZ2UgaXMgbm90IHNpZ25lZC4gVGhlIFNIQTI1NiBoYXNoIHZhbHVlIG9mIHRo ZSBpbWFnZSBtdXN0IG1hdGNoIGEgcmVjb3JkIGluIHRoZSBzZWN1cml0eSBkYXRhYmFzZSAiZGIi LA0KICAgICAvLyBhbmQgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgc2VjdXJpdHkgZGF0YSBiYXNl ICJkYngiLg0KICAgICAvLw0KICAgICBpZiAoIUhhc2hQZUltYWdlIChIQVNIQUxHX1NIQTI1Nikp IHsNCiAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjog RmFpbGVkIHRvIGhhc2ggdGhpcyBpbWFnZSB1c2luZyAlcy5cbiIsIG1IYXNoVHlwZVN0cikpOw0K ICAgICAgIGdvdG8gRmFpbGVkOw0KICAgICB9DQogDQogICAgIGlmIChJc1NpZ25hdHVyZUZvdW5k SW5EYXRhYmFzZSAoRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFMSwgbUltYWdlRGlnZXN0LCAm bUNlcnRUeXBlLCBtSW1hZ2VEaWdlc3RTaXplKSkgew0KICAgICAgIC8vDQogICAgICAgLy8gSW1h Z2UgSGFzaCBpcyBpbiBmb3JiaWRkZW4gZGF0YWJhc2UgKERCWCkuDQogICAgICAgLy8NCiAgICAg ICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFnZVZlcmlmaWNhdGlvbkxpYjogSW1hZ2UgaXMg bm90IHNpZ25lZCBhbmQgJXMgaGFzaCBvZiBpbWFnZSBpcyBmb3JiaWRkZW4gYnkgREJYLlxuIiwg bUhhc2hUeXBlU3RyKSk7DQogICAgICAgZ290byBGYWlsZWQ7DQogICAgIH0NCiANCiAgICAgaWYg KElzU2lnbmF0dXJlRm91bmRJbkRhdGFiYXNlIChFRklfSU1BR0VfU0VDVVJJVFlfREFUQUJBU0Us IG1JbWFnZURpZ2VzdCwgJm1DZXJ0VHlwZSwgbUltYWdlRGlnZXN0U2l6ZSkpIHsNCiAgICAgICAv Lw0KICAgICAgIC8vIEltYWdlIEhhc2ggaXMgaW4gYWxsb3dlZCBkYXRhYmFzZSAoREIpLg0KICAg ICAgIC8vDQogICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KICAgICB9DQogDQogICAgIC8vDQog ICAgIC8vIEltYWdlIEhhc2ggaXMgbm90IGZvdW5kIGluIGJvdGggZm9yYmlkZGVuIGFuZCBhbGxv d2VkIGRhdGFiYXNlLg0KICAgICAvLw0KICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEeGVJbWFn ZVZlcmlmaWNhdGlvbkxpYjogSW1hZ2UgaXMgbm90IHNpZ25lZCBhbmQgJXMgaGFzaCBvZiBpbWFn ZSBpcyBub3QgZm91bmQgaW4gREIvREJYLlxuIiwgbUhhc2hUeXBlU3RyKSk7DQogICAgIGdvdG8g RmFpbGVkOw0KICAgfQ0KIA0KICAgLy8NCiAgIC8vIFZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mIHRo ZSBpbWFnZSwgbXVsdGlwbGUgc2lnbmF0dXJlcyBhcmUgYWxsb3dlZCBhcyBwZXIgUEUvQ09GRiBT ZWN0aW9uIDQuNw0KICAgLy8gIkF0dHJpYnV0ZSBDZXJ0aWZpY2F0ZSBUYWJsZSIuDQogICAvLyBU aGUgZmlyc3QgY2VydGlmaWNhdGUgc3RhcnRzIGF0IG9mZnNldCAoU2VjRGF0YURpci0+VmlydHVh bEFkZHJlc3MpIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLg0KICAgLy8NCiAgIGZvciAoT2Zm U2V0ID0gU2VjRGF0YURpci0+VmlydHVhbEFkZHJlc3M7DQogICAgICAgIE9mZlNldCA8IChTZWNE YXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0RhdGFEaXItPlNpemUpOw0KICAgICAgICBPZmZT ZXQgKz0gKFdpbkNlcnRpZmljYXRlLT5kd0xlbmd0aCArIEFMSUdOX1NJWkUgKFdpbkNlcnRpZmlj YXRlLT5kd0xlbmd0aCkpKSB7DQogICAgIFdpbkNlcnRpZmljYXRlID0gKFdJTl9DRVJUSUZJQ0FU RSAqKSAobUltYWdlQmFzZSArIE9mZlNldCk7DQogICAgIGlmICgoU2VjRGF0YURpci0+VmlydHVh bEFkZHJlc3MgKyBTZWNEYXRhRGlyLT5TaXplIC0gT2ZmU2V0KSA8PSBzaXplb2YgKFdJTl9DRVJU SUZJQ0FURSkgfHwNCiAgICAgICAgIChTZWNEYXRhRGlyLT5WaXJ0dWFsQWRkcmVzcyArIFNlY0Rh dGFEaXItPlNpemUgLSBPZmZTZXQpIDwgV2luQ2VydGlmaWNhdGUtPmR3TGVuZ3RoKSB7DQogICAg ICAgYnJlYWs7DQogICAgIH0NCiANCiAgICAgLy8NCiAgICAgLy8gVmVyaWZ5IHRoZSBpbWFnZSdz IEF1dGhlbnRpY29kZSBzaWduYXR1cmUsIG9ubHkgREVSLWVuY29kZWQgUEtDUyM3IHNpZ25lZCBk YXRhIGlzIHN1cHBvcnRlZC4NCiAgICAgLy8NCiAgICAgaWYgKFdpbkNlcnRpZmljYXRlLT53Q2Vy dGlmaWNhdGVUeXBlID09IFdJTl9DRVJUX1RZUEVfUEtDU19TSUdORURfREFUQSkgew0KICAgICAg IC8vDQogICAgICAgLy8gVGhlIGNlcnRpZmljYXRlIGlzIGZvcm1hdHRlZCBhcyBXSU5fQ0VSVElG SUNBVEVfRUZJX1BLQ1Mgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZQ0KICAgICAgIC8vIEF1dGhl bnRpY29kZSBzcGVjaWZpY2F0aW9uLg0KICAgICAgIC8vDQogICAgICAgUGtjc0NlcnREYXRhID0g KFdJTl9DRVJUSUZJQ0FURV9FRklfUEtDUyAqKSBXaW5DZXJ0aWZpY2F0ZTsNCiAgICAgICBpZiAo UGtjc0NlcnREYXRhLT5IZHIuZHdMZW5ndGggPD0gc2l6ZW9mIChQa2NzQ2VydERhdGEtPkhkcikp IHsNCiAgICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgICBBdXRoRGF0YSAgID0gUGtjc0Nl cnREYXRhLT5DZXJ0RGF0YTsNCiAgICAgICBBdXRoRGF0YVNpemUgPSBQa2NzQ2VydERhdGEtPkhk ci5kd0xlbmd0aCAtIHNpemVvZihQa2NzQ2VydERhdGEtPkhkcik7DQogICAgIH0gZWxzZSBpZiAo V2luQ2VydGlmaWNhdGUtPndDZXJ0aWZpY2F0ZVR5cGUgPT0gV0lOX0NFUlRfVFlQRV9FRklfR1VJ RCkgew0KICAgICAgIC8vDQogICAgICAgLy8gVGhlIGNlcnRpZmljYXRlIGlzIGZvcm1hdHRlZCBh cyBXSU5fQ0VSVElGSUNBVEVfVUVGSV9HVUlEIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBVRUZJIFNw ZWMuDQogICAgICAgLy8NCiAgICAgICBXaW5DZXJ0VWVmaUd1aWQgPSAoV0lOX0NFUlRJRklDQVRF X1VFRklfR1VJRCAqKSBXaW5DZXJ0aWZpY2F0ZTsNCiAgICAgICBpZiAoV2luQ2VydFVlZmlHdWlk LT5IZHIuZHdMZW5ndGggPD0gT0ZGU0VUX09GKFdJTl9DRVJUSUZJQ0FURV9VRUZJX0dVSUQsIENl cnREYXRhKSkgew0KICAgICAgICAgYnJlYWs7DQogICAgICAgfQ0KICAgICAgIGlmICghQ29tcGFy ZUd1aWQgKCZXaW5DZXJ0VWVmaUd1aWQtPkNlcnRUeXBlLCAmZ0VmaUNlcnRQa2NzN0d1aWQpKSB7 DQogICAgICAgICBjb250aW51ZTsNCiAgICAgICB9DQogICAgICAgQXV0aERhdGEgPSBXaW5DZXJ0 VWVmaUd1aWQtPkNlcnREYXRhOw0KICAgICAgIEF1dGhEYXRhU2l6ZSA9IFdpbkNlcnRVZWZpR3Vp ZC0+SGRyLmR3TGVuZ3RoIC0gT0ZGU0VUX09GKFdJTl9DRVJUSUZJQ0FURV9VRUZJX0dVSUQsIENl cnREYXRhKTsNCiAgICAgfSBlbHNlIHsNCiAgICAgICBpZiAoV2luQ2VydGlmaWNhdGUtPmR3TGVu Z3RoIDwgc2l6ZW9mIChXSU5fQ0VSVElGSUNBVEUpKSB7DQogICAgICAgICBicmVhazsNCiAgICAg ICB9DQogICAgICAgY29udGludWU7DQogICAgIH0NCiANCiAgICAgSGFzaFN0YXR1cyA9IEhhc2hQ ZUltYWdlQnlUeXBlIChBdXRoRGF0YSwgQXV0aERhdGFTaXplKTsNCiAgICAgaWYgKEVGSV9FUlJP UiAoSGFzaFN0YXR1cykpIHsNCiAgICAgICBjb250aW51ZTsNCiAgICAgfQ0KIA0KICAgICAvLw0K ICAgICAvLyBDaGVjayB0aGUgZGlnaXRhbCBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcmV2b2tlZCBj ZXJ0aWZpY2F0ZSBpbiBmb3JiaWRkZW4gZGF0YWJhc2UgKGRieCkuDQogICAgIC8vDQogICAgIGlm IChJc0ZvcmJpZGRlbkJ5RGJ4IChBdXRoRGF0YSwgQXV0aERhdGFTaXplKSkgew0KICAgICAgIEFj dGlvbiA9IEVGSV9JTUFHRV9FWEVDVVRJT05fQVVUSF9TSUdfRkFJTEVEOw0KICAgICAgIElzVmVy aWZpZWQgPSBGQUxTRTsNCiAgICAgICBicmVhazsNCiAgICAgfQ0KIA0KICAgICAvLw0KICAgICAv LyBDaGVjayB0aGUgZGlnaXRhbCBzaWduYXR1cmUgYWdhaW5zdCB0aGUgdmFsaWQgY2VydGlmaWNh dGUgaW4gYWxsb3dlZCBkYXRhYmFzZSAoZGIpLg0KICAgICAvLw0KICAgICBpZiAoIUlzVmVyaWZp ZWQpIHsNCiAgICAgICBpZiAoSXNBbGxvd2VkQnlEYiAoQXV0aERhdGEsIEF1dGhEYXRhU2l6ZSkp IHsNCiAgICAgICAgIElzVmVyaWZpZWQgPSBUUlVFOw0KICAgICAgIH0NCiAgICAgfQ0KIA0KICAg ICAvLw0KICAgICAvLyBDaGVjayB0aGUgaW1hZ2UncyBoYXNoIHZhbHVlLg0KICAgICAvLw0KICAg ICBpZiAoSXNTaWduYXR1cmVGb3VuZEluRGF0YWJhc2UgKEVGSV9JTUFHRV9TRUNVUklUWV9EQVRB QkFTRTEsIG1JbWFnZURpZ2VzdCwgJm1DZXJ0VHlwZSwgbUltYWdlRGlnZXN0U2l6ZSkpIHsNCiAg ICAgICBBY3Rpb24gPSBFRklfSU1BR0VfRVhFQ1VUSU9OX0FVVEhfU0lHX0ZPVU5EOw0KICAgICAg IERFQlVHICgoREVCVUdfSU5GTywgIkR4ZUltYWdlVmVyaWZpY2F0aW9uTGliOiBJbWFnZSBpcyBz aWduZWQgYnV0ICVzIGhhc2ggb2YgaW1hZ2UgaXMgZm91bmQgaW4gREJYLlxuIiwgbUhhc2hUeXBl U3RyKSk7DQogICAgICAgSXNWZXJpZmllZCA9IEZBTFNFOw0KICAgICAgIGJyZWFrOw0KICAgICB9 DQogICAgIGlmICghSXNWZXJpZmllZCkgew0KICAgICAgIGlmIChJc1NpZ25hdHVyZUZvdW5kSW5E YXRhYmFzZSAoRUZJX0lNQUdFX1NFQ1VSSVRZX0RBVEFCQVNFLCBtSW1hZ2VEaWdlc3QsICZtQ2Vy dFR5cGUsIG1JbWFnZURpZ2VzdFNpemUpKSB7DQogICAgICAgICBJc1ZlcmlmaWVkID0gVFJVRTsN CiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRHhlSW1hZ2VW ZXJpZmljYXRpb25MaWI6IEltYWdlIGlzIHNpZ25lZCBidXQgc2lnbmF0dXJlIGlzIG5vdCBhbGxv d2VkIGJ5IERCIGFuZCAlcyBoYXNoIG9mIGltYWdlIGlzIG5vdCBmb3VuZCBpbiBEQi9EQlguXG4i LCBtSGFzaFR5cGVTdHIpKTsNCiAgICAgICB9DQogICAgIH0NCiAgIH0NCiANCiAgIGlmIChPZmZT ZXQgIT0gKFNlY0RhdGFEaXItPlZpcnR1YWxBZGRyZXNzICsgU2VjRGF0YURpci0+U2l6ZSkpIHsN CiAgICAgLy8NCiAgICAgLy8gVGhlIFNpemUgaW4gQ2VydGlmaWNhdGUgVGFibGUgb3IgdGhlIGF0 dHJpYnV0ZSBjZXJ0aWZpY2F0ZSB0YWJsZSBpcyBjb3JydXB0ZWQuDQogICAgIC8vDQogICAgIElz VmVyaWZpZWQgPSBGQUxTRTsNCiAgIH0NCiANCiAgIGlmIChJc1ZlcmlmaWVkKSB7DQogICAgIHJl dHVybiBFRklfU1VDQ0VTUzsNCiAgIH0NCiAgIGlmIChBY3Rpb24gPT0gRUZJX0lNQUdFX0VYRUNV VElPTl9BVVRIX1NJR19GQUlMRUQgfHwgQWN0aW9uID09IEVGSV9JTUFHRV9FWEVDVVRJT05fQVVU SF9TSUdfRk9VTkQpIHsNCiAgICAgLy8NCiAgICAgLy8gR2V0IGltYWdlIGhhc2ggdmFsdWUgYXMg c2lnbmF0dXJlIG9mIGV4ZWN1dGFibGUuDQogICAgIC8vDQogICAgIFNpZ25hdHVyZUxpc3RTaXpl ID0gc2l6ZW9mIChFRklfU0lHTkFUVVJFX0xJU1QpICsgc2l6ZW9mIChFRklfU0lHTkFUVVJFX0RB VEEpIC0gMSArIG1JbWFnZURpZ2VzdFNpemU7DQogICAgIFNpZ25hdHVyZUxpc3QgICAgID0gKEVG SV9TSUdOQVRVUkVfTElTVCAqKSBBbGxvY2F0ZVplcm9Qb29sIChTaWduYXR1cmVMaXN0U2l6ZSk7 DQogICAgIGlmIChTaWduYXR1cmVMaXN0ID09IE5VTEwpIHsNCisgICAgICBTaWduYXR1cmVMaXN0 U2l6ZSA9IDA7DQogICAgICAgZ290byBGYWlsZWQ7DQogICAgIH0NCiAgICAgU2lnbmF0dXJlTGlz dC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSAgPSAwOw0KICAgICBTaWduYXR1cmVMaXN0LT5TaWduYXR1 cmVMaXN0U2l6ZSAgICA9IChVSU5UMzIpIFNpZ25hdHVyZUxpc3RTaXplOw0KICAgICBTaWduYXR1 cmVMaXN0LT5TaWduYXR1cmVTaXplICAgICAgICA9IChVSU5UMzIpIChzaXplb2YgKEVGSV9TSUdO QVRVUkVfREFUQSkgLSAxICsgbUltYWdlRGlnZXN0U2l6ZSk7DQogICAgIENvcHlNZW0gKCZTaWdu YXR1cmVMaXN0LT5TaWduYXR1cmVUeXBlLCAmbUNlcnRUeXBlLCBzaXplb2YgKEVGSV9HVUlEKSk7 DQogICAgIFNpZ25hdHVyZSA9IChFRklfU0lHTkFUVVJFX0RBVEEgKikgKChVSU5UOCAqKSBTaWdu YXR1cmVMaXN0ICsgc2l6ZW9mIChFRklfU0lHTkFUVVJFX0xJU1QpKTsNCiAgICAgQ29weU1lbSAo U2lnbmF0dXJlLT5TaWduYXR1cmVEYXRhLCBtSW1hZ2VEaWdlc3QsIG1JbWFnZURpZ2VzdFNpemUp Ow0KICAgfQ0KIA0KIEZhaWxlZDoNCiAgIC8vDQogICAvLyBQb2xpY3kgZGVjaWRlcyB0byBkZWZl ciBvciByZWplY3QgdGhlIGltYWdlOyBhZGQgaXRzIGluZm9ybWF0aW9uIGluIGltYWdlIGV4ZWN1 dGFibGUgaW5mb3JtYXRpb24gdGFibGUuDQogICAvLw0KICAgTmFtZVN0ciA9IENvbnZlcnREZXZp Y2VQYXRoVG9UZXh0IChGaWxlLCBGQUxTRSwgVFJVRSk7DQogICBBZGRJbWFnZUV4ZUluZm8gKEFj dGlvbiwgTmFtZVN0ciwgRmlsZSwgU2lnbmF0dXJlTGlzdCwgU2lnbmF0dXJlTGlzdFNpemUpOw0K ICAgaWYgKE5hbWVTdHIgIT0gTlVMTCkgew0KICAgICBERUJVRygoRUZJX0RfSU5GTywgIlRoZSBp bWFnZSBkb2Vzbid0IHBhc3MgdmVyaWZpY2F0aW9uOiAlc1xuIiwgTmFtZVN0cikpOw0KICAgICBG cmVlUG9vbChOYW1lU3RyKTsNCiAgIH0NCiANCiAgIGlmIChTaWduYXR1cmVMaXN0ICE9IE5VTEwp IHsNCiAgICAgRnJlZVBvb2wgKFNpZ25hdHVyZUxpc3QpOw0KICAgfQ0KIA0KICAgcmV0dXJuIEVG SV9TRUNVUklUWV9WSU9MQVRJT047DQogfQ0KIA0KIC8qKg0KICAgT24gUmVhZHkgVG8gQm9vdCBT ZXJ2aWNlcyBFdmVudCBub3RpZmljYXRpb24gaGFuZGxlci4NCiANCiAgIEFkZCB0aGUgaW1hZ2Ug ZXhlY3V0aW9uIGluZm9ybWF0aW9uIHRhYmxlIGlmIGl0IGlzIG5vdCBpbiBzeXN0ZW0gY29uZmln dXJhdGlvbiB0YWJsZS4NCiANCiAgIEBwYXJhbVtpbl0gIEV2ZW50ICAgICBFdmVudCB3aG9zZSBu b3RpZmljYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZA0KICAgQHBhcmFtW2luXSAgQ29u dGV4dCAgIFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQNCiAN CiAqKi8NCi0tIAoyLjE5LjEuMy5nMzAyNDdhYTVkMjAxCgoK