From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 9ED08D8042B for ; Fri, 10 Nov 2023 23:59:51 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=N7BuP/FonBESox49rx5KT1r7KkB5pa+h3yZf9LA7SCo=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1699660790; v=1; b=txXq73uK3/tS9+a25inoUivLTXwWByuOmxCfoUiPCJm3lxvo7gcLYbolHuPUdXuk7YtExgTC SHtKpkQYLPbPkaNKbfPdtxUrmL5wEcT3VZuxxV/hPrRTJvw+BwwgouUeDuWkmobWaeDLiFmXQnB iGxu0oc6HToPHwim43oecX7k= X-Received: by 127.0.0.2 with SMTP id pcekYY7687511xdFQng7umTm; Fri, 10 Nov 2023 15:59:50 -0800 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web10.42657.1699660789628558592 for ; Fri, 10 Nov 2023 15:59:49 -0800 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-mpDYPT0QPqG-FJJgI9C6TQ-1; Fri, 10 Nov 2023 18:59:45 -0500 X-MC-Unique: mpDYPT0QPqG-FJJgI9C6TQ-1 X-Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 91797867902; Fri, 10 Nov 2023 23:59:45 +0000 (UTC) X-Received: from lacos-laptop-9.usersys.redhat.com (unknown [10.39.192.173]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9EEDBC15881; Fri, 10 Nov 2023 23:59:44 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Gerd Hoffmann , Jiewen Yao Subject: [edk2-devel] [PATCH 34/37] OvmfPkg: remove 8259InterruptControllerDxe Date: Sat, 11 Nov 2023 00:58:17 +0100 Message-Id: <20231110235820.644381-35-lersek@redhat.com> In-Reply-To: <20231110235820.644381-1-lersek@redhat.com> References: <20231110235820.644381-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: tDzHYYNigwskERc7AIh6SCxox7686176AA= Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="US-ASCII"; x-default=true X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=txXq73uK; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=redhat.com (policy=none) ODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUgaXMgbm90IHVzZWQgYnkgYW55IHBsYXRmb3JtcyBh dCB0aGlzIHBvaW50LApyZW1vdmUgaXQuCgpUaGlzIHBhdGNoIHJlbW92ZXMgbWVudGlvbnMgb2Yg dGhlIGZvbGxvd2luZyBDU00gcmVzb3VyY2VzIGZyb20gdGhlIHNvdXJjZQpjb2RlOgoKLSBHVUlE cyAocHJvdG9jb2xzIG9yIG90aGVyd2lzZSk6CiAgLSBnRWZpTGVnYWN5ODI1OVByb3RvY29sR3Vp ZAoKLSBoZWFkZXJzOgogIC0gUHJvdG9jb2wvTGVnYWN5ODI1OS5oCgotIFBDRHM6CiAgLSBQY2Q4 MjU5TGVnYWN5TW9kZUVkZ2VMZXZlbAogIC0gUGNkODI1OUxlZ2FjeU1vZGVNYXNrCgp3aGljaCBl eHRlbmRzIHRoZSBsaXN0IG9mIHJlc291cmNlcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgdG86Cgot IEdVSURzIChwcm90b2NvbHMgb3Igb3RoZXJ3aXNlKToKICAtIGdFZmlMZWdhY3k4MjU5UHJvdG9j b2xHdWlkCgotIGhlYWRlcnM6CiAgLSBQcm90b2NvbC9MZWdhY3k4MjU5LmgKCi0gUENEczoKICAt IFBjZDgyNTlMZWdhY3lNb2RlRWRnZUxldmVsCiAgLSBQY2Q4MjU5TGVnYWN5TW9kZU1hc2sKCkNj OiBBcmQgQmllc2hldXZlbCA8YXJkYit0aWFub2NvcmVAa2VybmVsLm9yZz4KQ2M6IEdlcmQgSG9m Zm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgpDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRl bC5jb20+ClJlZjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9p ZD00NTg4ClNpZ25lZC1vZmYtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+Ci0t LQogT3ZtZlBrZy84MjU5SW50ZXJydXB0Q29udHJvbGxlckR4ZS9MZWdhY3k4MjU5LnVuaSAgICAg IHwgIDE2IC0KIE92bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvTGVnYWN5ODI1OUV4 dHJhLnVuaSB8ICAxNCAtCiBPdm1mUGtnLzgyNTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlLzgyNTku aW5mICAgICAgICAgICAgfCAgNDUgLS0KIE92bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xsZXJE eGUvODI1OS5oICAgICAgICAgICAgICB8IDIxOCAtLS0tLS0tCiBPdm1mUGtnLzgyNTlJbnRlcnJ1 cHRDb250cm9sbGVyRHhlLzgyNTkuYyAgICAgICAgICAgICAgfCA2MjIgLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgOTE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL092 bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvTGVnYWN5ODI1OS51bmkgYi9Pdm1mUGtn LzgyNTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlL0xlZ2FjeTgyNTkudW5pCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBkMDM1MjkyNDE5NTguLjAwMDAwMDAwMDAwMAotLS0gYS9Pdm1mUGtn LzgyNTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlL0xlZ2FjeTgyNTkudW5pCisrKyAvZGV2L251bGwK QEAgLTEsMTYgKzAsMCBAQAotLy8gLyoqIEBmaWxlDQotLy8gODI1OSBJbnRlcnJ1cHQgQ29udHJv bGxlciBkcml2ZXIgdGhhdCBwcm92aWRlcyBMZWdhY3kgODI1OSBwcm90b2NvbC4NCi0vLw0KLS8v IDgyNTkgSW50ZXJydXB0IENvbnRyb2xsZXIgZHJpdmVyIHRoYXQgcHJvdmlkZXMgTGVnYWN5IDgy NTkgcHJvdG9jb2wuDQotLy8NCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUgLSAyMDE4LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQotLy8NCi0vLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KLS8vDQotLy8gKiovDQotDQotDQot I3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAi ODI1OSBJbnRlcnJ1cHQgQ29udHJvbGxlciBkcml2ZXIgdGhhdCBwcm92aWRlcyBMZWdhY3kgODI1 OSBwcm90b2NvbCINCi0NCi0jc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICI4MjU5IEludGVycnVwdCBDb250cm9sbGVyIGRyaXZlciB0aGF0IHBy b3ZpZGVzIExlZ2FjeSA4MjU5IHByb3RvY29sLiINCi0NCmRpZmYgLS1naXQgYS9Pdm1mUGtnLzgy NTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlL0xlZ2FjeTgyNTlFeHRyYS51bmkgYi9Pdm1mUGtnLzgy NTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlL0xlZ2FjeTgyNTlFeHRyYS51bmkKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGVlNDNmNjkyM2M0NS4uMDAwMDAwMDAwMDAwCi0tLSBhL092bWZQ a2cvODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvTGVnYWN5ODI1OUV4dHJhLnVuaQorKysgL2Rl di9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8vIC8qKiBAZmlsZQ0KLS8vIExlZ2FjeTgyNTkgTG9j YWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCi0vLw0KLS8vIENvcHlyaWdodCAoYykgMjAxMyAt IDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCi0vLw0K LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQotLy8NCi0v LyAqKi8NCi0NCi0jc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQotI2xhbmd1YWdl IGVuLVVTDQotIkxlZ2FjeSA4MjU5IEludGVycnVwdCBDb250cm9sbGVyIERYRSBEcml2ZXIiDQot DQotDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy84MjU5SW50ZXJydXB0Q29udHJvbGxlckR4ZS84MjU5 LmluZiBiL092bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvODI1OS5pbmYKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMjBmZjI0OTBhNy4uMDAwMDAwMDAwMDAwCi0tLSBh L092bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvODI1OS5pbmYKKysrIC9kZXYvbnVs bApAQCAtMSw0NSArMCwwIEBACi0jIyBAZmlsZQ0KLSMgODI1OSBJbnRlcnJ1cHQgQ29udHJvbGxl ciBkcml2ZXIgdGhhdCBwcm92aWRlcyBMZWdhY3kgODI1OSBwcm90b2NvbC4NCi0jDQotIyBDb3B5 cmlnaHQgKGMpIDIwMDUgLSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KLSMNCi0jIw0KLQ0KLVtEZWZpbmVzXQ0KLSAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMHgwMDAxMDAwNQ0KLSAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gTGVn YWN5ODI1OQ0KLSAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAgICAgICAgID0gTGVnYWN5ODI1OS51 bmkNCi0gIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDI0NUNCNERBLThFMTUtNEEx Qi04N0UzLTk4NzhGRkEwNzUyMA0KLSAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0g RFhFX0RSSVZFUg0KLSAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQotICBF TlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBJbnN0YWxsODI1OQ0KLQ0KLVtTb3VyY2Vz XQ0KLSAgODI1OS5jDQotICA4MjU5LmgNCi0NCi1bUGFja2FnZXNdDQotICBNZGVQa2cvTWRlUGtn LmRlYw0KLSAgT3ZtZlBrZy9Pdm1mUGtnLmRlYw0KLQ0KLVtMaWJyYXJ5Q2xhc3Nlc10NCi0gIFVl ZmlCb290U2VydmljZXNUYWJsZUxpYg0KLSAgRGVidWdMaWINCi0gIFVlZmlEcml2ZXJFbnRyeVBv aW50DQotICBJb0xpYg0KLSAgUGNkTGliDQotDQotW1Byb3RvY29sc10NCi0gIGdFZmlMZWdhY3k4 MjU5UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KLSAgZ0VmaVBj aUlvUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUw0KLQ0KLVtQY2RdDQotICBnVWVmaU92bWZQa2dUb2tlblNwYWNlR3VpZC5QY2Q4MjU5TGVn YWN5TW9kZU1hc2sgICAgICAjIyBDT05TVU1FUw0KLSAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1 aWQuUGNkODI1OUxlZ2FjeU1vZGVFZGdlTGV2ZWwgIyMgQ09OU1VNRVMNCi0NCi1bRGVwZXhdDQot ICBUUlVFDQotDQotW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4iRXh0cmFGaWxlcyJdDQotICBM ZWdhY3k4MjU5RXh0cmEudW5pDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy84MjU5SW50ZXJydXB0Q29u dHJvbGxlckR4ZS84MjU5LmggYi9Pdm1mUGtnLzgyNTlJbnRlcnJ1cHRDb250cm9sbGVyRHhlLzgy NTkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY2NTUyY2E5MzNlLi4wMDAwMDAw MDAwMDAKLS0tIGEvT3ZtZlBrZy84MjU5SW50ZXJydXB0Q29udHJvbGxlckR4ZS84MjU5LmgKKysr IC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoqIEBmaWxlDQotICBEcml2ZXIgaW1wbGVt ZW50aW5nIHRoZSBUaWFubyBMZWdhY3kgODI1OSBQcm90b2NvbA0KLQ0KLUNvcHlyaWdodCAoYykg MjAwNSAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Ci1TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KLQ0KLSoqLw0K LQ0KLSNpZm5kZWYgXzgyNTlfSF9fDQotI2RlZmluZSBfODI1OV9IX18NCi0NCi0jaW5jbHVkZSA8 UHJvdG9jb2wvTGVnYWN5ODI1OS5oPg0KLSNpbmNsdWRlIDxQcm90b2NvbC9QY2lJby5oPg0KLQ0K LSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KLSNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQotI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCi0jaW5j bHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQotI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQot DQotI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvUGNpLmg+DQotDQotLy8gODI1OSBIYXJkd2Fy ZSBkZWZpbml0aW9ucw0KLQ0KLSNkZWZpbmUgTEVHQUNZX01PREVfQkFTRV9WRUNUT1JfTUFTVEVS ICAweDA4DQotI2RlZmluZSBMRUdBQ1lfTU9ERV9CQVNFX1ZFQ1RPUl9TTEFWRSAgIDB4NzANCi0N Ci0jZGVmaW5lIFBST1RFQ1RFRF9NT0RFX0JBU0VfVkVDVE9SX01BU1RFUiAgMHg2OA0KLSNkZWZp bmUgUFJPVEVDVEVEX01PREVfQkFTRV9WRUNUT1JfU0xBVkUgICAweDcwDQotDQotI2RlZmluZSBM RUdBQ1lfODI1OV9DT05UUk9MX1JFR0lTVEVSX01BU1RFUiAgICAgICAgICAgICAgIDB4MjANCi0j ZGVmaW5lIExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfTUFTVEVSICAgICAgICAgICAgICAgICAg MHgyMQ0KLSNkZWZpbmUgTEVHQUNZXzgyNTlfQ09OVFJPTF9SRUdJU1RFUl9TTEFWRSAgICAgICAg ICAgICAgICAweEEwDQotI2RlZmluZSBMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX1NMQVZFICAg ICAgICAgICAgICAgICAgIDB4QTENCi0jZGVmaW5lIExFR0FDWV84MjU5X0VER0VfTEVWRUxfVFJJ R0dFUkVEX1JFR0lTVEVSX01BU1RFUiAgMHg0RDANCi0jZGVmaW5lIExFR0FDWV84MjU5X0VER0Vf TEVWRUxfVFJJR0dFUkVEX1JFR0lTVEVSX1NMQVZFICAgMHg0RDENCi0NCi0jZGVmaW5lIExFR0FD WV84MjU5X0VPSSAgMHgyMA0KLQ0KLS8vIFByb3RvY29sIEZ1bmN0aW9uIFByb3RvdHlwZXMNCi0N Ci0vKioNCi0gIFNldHMgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIDgyNTkgbWFzdGVyIGFuZCBz bGF2ZSBQSUNzLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgSW5kaWNhdGVzIHRoZSBF RklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICBNYXN0ZXJC YXNlICBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgSVJRMC1JUlE3Lg0KLSAgQHBhcmFtW2luXSAgU2xh dmVCYXNlICAgSW50ZXJydXB0IHZlY3RvcnMgZm9yIElSUTgtSVJRMTUuDQotDQotICBAcmV0dmFs ICBFRklfU1VDQ0VTUyAgICAgICBUaGUgODI1OSBQSUMgd2FzIHByb2dyYW1tZWQgc3VjY2Vzc2Z1 bGx5Lg0KLSAgQHJldHZhbCAgRUZJX0RFVklDRV9FUlJPUiAgVGhlcmUgd2FzIGFuIGVycm9yIHdo aWxlIHdyaXRpbmcgdG8gdGhlIDgyNTkgUElDLg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1FRklB UEkNCi1JbnRlcnJ1cHQ4MjU5U2V0VmVjdG9yQmFzZSAoDQotICBJTiBFRklfTEVHQUNZXzgyNTlf UFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBNYXN0ZXJC YXNlLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBTbGF2ZUJhc2UNCi0gICk7DQot DQotLyoqDQotICBHZXRzIHRoZSBjdXJyZW50IDE2LWJpdCByZWFsIG1vZGUgYW5kIDMyLWJpdCBw cm90ZWN0ZWQtbW9kZSBJUlEgbWFza3MuDQotDQotICBAcGFyYW1baW5dICAgVGhpcyAgICAgICAg ICAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lfODI1OV9QUk9UT0NPTCBpbnN0YW5jZS4N Ci0gIEBwYXJhbVtvdXRdICBMZWdhY3lNYXNrICAgICAgICAgIDE2LWJpdCBtb2RlIGludGVycnVw dCBtYXNrIGZvciBJUlEwLUlSUTE1Lg0KLSAgQHBhcmFtW291dF0gIExlZ2FjeUVkZ2VMZXZlbCAg ICAgMTYtYml0IG1vZGUgZWRnZS9sZXZlbCBtYXNrIGZvciBJUlEtSVJRMTUuDQotICBAcGFyYW1b b3V0XSAgUHJvdGVjdGVkTWFzayAgICAgICAzMi1iaXQgbW9kZSBpbnRlcnJ1cHQgbWFzayBmb3Ig SVJRMC1JUlExNS4NCi0gIEBwYXJhbVtvdXRdICBQcm90ZWN0ZWRFZGdlTGV2ZWwgIDMyLWJpdCBt b2RlIGVkZ2UvbGV2ZWwgbWFzayBmb3IgSVJRMC1JUlExNS4NCi0NCi0gIEByZXR2YWwgIEVGSV9T VUNDRVNTICAgICAgIFRoZSA4MjU5IFBJQyB3YXMgcHJvZ3JhbW1lZCBzdWNjZXNzZnVsbHkuDQot ICBAcmV0dmFsICBFRklfREVWSUNFX0VSUk9SICBUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcmVh ZGluZyB0aGUgODI1OSBQSUMuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUludGVy cnVwdDgyNTlHZXRNYXNrICgNCi0gIElOICBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgICpUaGlz LA0KLSAgT1VUIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKkxlZ2FjeU1hc2sgIE9QVElPTkFM LA0KLSAgT1VUIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKkxlZ2FjeUVkZ2VMZXZlbCAgT1BU SU9OQUwsDQotICBPVVQgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqUHJvdGVjdGVkTWFzayAg T1BUSU9OQUwsDQotICBPVVQgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqUHJvdGVjdGVkRWRn ZUxldmVsIE9QVElPTkFMDQotICApOw0KLQ0KLS8qKg0KLSAgU2V0cyB0aGUgY3VycmVudCAxNi1i aXQgcmVhbCBtb2RlIGFuZCAzMi1iaXQgcHJvdGVjdGVkLW1vZGUgSVJRIG1hc2tzLg0KLQ0KLSAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lf ODI1OV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbVtpbl0gIExlZ2FjeU1hc2sgICAgICAg ICAgMTYtYml0IG1vZGUgaW50ZXJydXB0IG1hc2sgZm9yIElSUTAtSVJRMTUuDQotICBAcGFyYW1b aW5dICBMZWdhY3lFZGdlTGV2ZWwgICAgIDE2LWJpdCBtb2RlIGVkZ2UvbGV2ZWwgbWFzayBmb3Ig SVJRLUlSUTE1Lg0KLSAgQHBhcmFtW2luXSAgUHJvdGVjdGVkTWFzayAgICAgICAzMi1iaXQgbW9k ZSBpbnRlcnJ1cHQgbWFzayBmb3IgSVJRMC1JUlExNS4NCi0gIEBwYXJhbVtpbl0gIFByb3RlY3Rl ZEVkZ2VMZXZlbCAgMzItYml0IG1vZGUgZWRnZS9sZXZlbCBtYXNrIGZvciBJUlEwLUlSUTE1Lg0K LQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgVGhlIDgyNTkgUElDIHdhcyBwcm9ncmFt bWVkIHN1Y2Nlc3NmdWxseS4NCi0gIEByZXR2YWwgIEVGSV9ERVZJQ0VfRVJST1IgIFRoZXJlIHdh cyBhbiBlcnJvciB3aGlsZSB3cml0aW5nIHRoZSA4MjU5IFBJQy4NCi0NCi0qKi8NCi1FRklfU1RB VFVTDQotRUZJQVBJDQotSW50ZXJydXB0ODI1OVNldE1hc2sgKA0KLSAgSU4gRUZJX0xFR0FDWV84 MjU5X1BST1RPQ09MICAqVGhpcywNCi0gIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKkxl Z2FjeU1hc2sgIE9QVElPTkFMLA0KLSAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqTGVn YWN5RWRnZUxldmVsICBPUFRJT05BTCwNCi0gIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg KlByb3RlY3RlZE1hc2sgIE9QVElPTkFMLA0KLSAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAg ICAqUHJvdGVjdGVkRWRnZUxldmVsIE9QVElPTkFMDQotICApOw0KLQ0KLS8qKg0KLSAgU2V0cyB0 aGUgbW9kZSBvZiB0aGUgUElDcy4NCi0NCi0gIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgSW5kaWNh dGVzIHRoZSBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5d ICBNb2RlICAgICAgIDE2LWJpdCByZWFsIG9yIDMyLWJpdCBwcm90ZWN0ZWQgbW9kZS4NCi0gIEBw YXJhbVtpbl0gIE1hc2sgICAgICAgVGhlIHZhbHVlIHdpdGggd2hpY2ggdG8gc2V0IHRoZSBpbnRl cnJ1cHQgbWFzay4NCi0gIEBwYXJhbVtpbl0gIEVkZ2VMZXZlbCAgVGhlIHZhbHVlIHdpdGggd2hp Y2ggdG8gc2V0IHRoZSBlZGdlL2xldmVsIG1hc2suDQotDQotICBAcmV0dmFsICBFRklfU1VDQ0VT UyAgICAgICAgICAgIFRoZSBtb2RlIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KLSAgQHJldHZhbCAg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgbW9kZSB3YXMgbm90IHNldC4NCi0NCi0qKi8NCi1F RklfU1RBVFVTDQotRUZJQVBJDQotSW50ZXJydXB0ODI1OVNldE1vZGUgKA0KLSAgSU4gRUZJX0xF R0FDWV84MjU5X1BST1RPQ09MICAqVGhpcywNCi0gIElOIEVGSV84MjU5X01PREUgICAgICAgICAg ICAgTW9kZSwNCi0gIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKk1hc2sgIE9QVElPTkFM LA0KLSAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqRWRnZUxldmVsIE9QVElPTkFMDQot ICApOw0KLQ0KLS8qKg0KLSAgVHJhbnNsYXRlcyB0aGUgSVJRIGludG8gYSB2ZWN0b3IuDQotDQot ICBAcGFyYW1baW5dICAgVGhpcyAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lfODI1OV9QUk9U T0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbVtpbl0gICBJcnEgICAgIElSUTAtSVJRMTUuDQotICBA cGFyYW1bb3V0XSAgVmVjdG9yICBUaGUgdmVjdG9yIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIElS US4NCi0NCi0gIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFZlY3RvciB0aGF0 IG1hdGNoZXMgSXJxIHdhcyByZXR1cm5lZC4NCi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgSXJxIGlzIG5vdCB2YWxpZC4NCi0NCi0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQot SW50ZXJydXB0ODI1OUdldFZlY3RvciAoDQotICBJTiAgRUZJX0xFR0FDWV84MjU5X1BST1RPQ09M ICAqVGhpcywNCi0gIElOICBFRklfODI1OV9JUlEgICAgICAgICAgICAgIElycSwNCi0gIE9VVCBV SU5UOCAgICAgICAgICAgICAgICAgICAgICpWZWN0b3INCi0gICk7DQotDQotLyoqDQotICBFbmFi bGVzIHRoZSBzcGVjaWZpZWQgSVJRLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg IEluZGljYXRlcyB0aGUgRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MIGluc3RhbmNlLg0KLSAgQHBh cmFtW2luXSAgSXJxICAgICAgICAgICAgIElSUTAtSVJRMTUuDQotICBAcGFyYW1baW5dICBMZXZl bFRyaWdnZXJlZCAgMCA9IEVkZ2UgdHJpZ2dlcmVkOyAxID0gTGV2ZWwgdHJpZ2dlcmVkLg0KLQ0K LSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSXJxIHdhcyBlbmFibGVkIG9u IHRoZSA4MjU5IFBJQy4NCi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVGhlIEly cSBpcyBub3QgdmFsaWQuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUludGVycnVw dDgyNTlFbmFibGVJcnEgKA0KLSAgSU4gRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MICAqVGhpcywN Ci0gIElOIEVGSV84MjU5X0lSUSAgICAgICAgICAgICAgSXJxLA0KLSAgSU4gQk9PTEVBTiAgICAg ICAgICAgICAgICAgICBMZXZlbFRyaWdnZXJlZA0KLSAgKTsNCi0NCi0vKioNCi0gIERpc2FibGVz IHRoZSBzcGVjaWZpZWQgSVJRLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgSW5kaWNhdGVzIHRo ZSBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICBJcnEg ICBJUlEwLUlSUTE1Lg0KLQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg SXJxIHdhcyBkaXNhYmxlZCBvbiB0aGUgODI1OSBQSUMuDQotICBAcmV0dmFsICBFRklfSU5WQUxJ RF9QQVJBTUVURVIgIFRoZSBJcnEgaXMgbm90IHZhbGlkLg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMN Ci1FRklBUEkNCi1JbnRlcnJ1cHQ4MjU5RGlzYWJsZUlycSAoDQotICBJTiBFRklfTEVHQUNZXzgy NTlfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gRUZJXzgyNTlfSVJRICAgICAgICAgICAgICBJcnEN Ci0gICk7DQotDQotLyoqDQotICBSZWFkcyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8g Z2V0IHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIGNhcmQuDQot DQotICBAcGFyYW1baW5dICAgVGhpcyAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lfODI1 OV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbVtpbl0gICBQY2lIYW5kbGUgIFBDSSBmdW5j dGlvbiBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSB2ZWN0b3IuDQotICBAcGFyYW1bb3V0XSAgVmVj dG9yICAgICBJUlEgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGludGVycnVwdCBsaW5l Lg0KLQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgIFRoZSBpbnRlcnJ1cHQgbGluZSB2YWx1ZSB3 YXMgcmVhZCBzdWNjZXNzZnVsbHkuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUlu dGVycnVwdDgyNTlHZXRJbnRlcnJ1cHRMaW5lICgNCi0gIElOICBFRklfTEVHQUNZXzgyNTlfUFJP VE9DT0wgICpUaGlzLA0KLSAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgUGNpSGFuZGxl LA0KLSAgT1VUIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKlZlY3Rvcg0KLSAgKTsNCi0NCi0v KioNCi0gIElzc3VlcyB0aGUgRW5kIG9mIEludGVycnVwdCAoRU9JKSBjb21tYW5kcyB0byBQSUNz Lg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgSW5kaWNhdGVzIHRoZSBFRklfTEVHQUNZXzgyNTlf UFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICBJcnEgICBUaGUgaW50ZXJydXB0IGZv ciB3aGljaCB0byBpc3N1ZSB0aGUgRU9JIGNvbW1hbmQuDQotDQotICBAcmV0dmFsICBFRklfU1VD Q0VTUyAgICAgICAgICAgIFRoZSBFT0kgY29tbWFuZCB3YXMgaXNzdWVkLg0KLSAgQHJldHZhbCAg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgSXJxIGlzIG5vdCB2YWxpZC4NCi0NCi0qKi8NCi1F RklfU1RBVFVTDQotRUZJQVBJDQotSW50ZXJydXB0ODI1OUVuZE9mSW50ZXJydXB0ICgNCi0gIElO ICBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gIEVGSV84MjU5X0lSUSAg ICAgICAgICAgICAgSXJxDQotICApOw0KLQ0KLSNlbmRpZg0KZGlmZiAtLWdpdCBhL092bWZQa2cv ODI1OUludGVycnVwdENvbnRyb2xsZXJEeGUvODI1OS5jIGIvT3ZtZlBrZy84MjU5SW50ZXJydXB0 Q29udHJvbGxlckR4ZS84MjU5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMjNh YzJkOTZiMi4uMDAwMDAwMDAwMDAwCi0tLSBhL092bWZQa2cvODI1OUludGVycnVwdENvbnRyb2xs ZXJEeGUvODI1OS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIyICswLDAgQEAKLS8qKiBAZmlsZQ0K LSAgVGhpcyBjb250YWlucyB0aGUgaW5zdGFsbGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVy Lg0KLQ0KLUNvcHlyaWdodCAoYykgMjAwNSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCi1TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KLQ0KLSoqLw0KLQ0KLSNpbmNsdWRlICI4MjU5LmgiDQotDQotLy8NCi0vLyBH bG9iYWwgZm9yIHRoZSBMZWdhY3kgODI1OSBQcm90b2NvbCB0aGF0IGlzIHByb2R1Y2VkIGJ5IHRo aXMgZHJpdmVyDQotLy8NCi1FRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgIG1JbnRlcnJ1cHQ4MjU5 ID0gew0KLSAgSW50ZXJydXB0ODI1OVNldFZlY3RvckJhc2UsDQotICBJbnRlcnJ1cHQ4MjU5R2V0 TWFzaywNCi0gIEludGVycnVwdDgyNTlTZXRNYXNrLA0KLSAgSW50ZXJydXB0ODI1OVNldE1vZGUs DQotICBJbnRlcnJ1cHQ4MjU5R2V0VmVjdG9yLA0KLSAgSW50ZXJydXB0ODI1OUVuYWJsZUlycSwN Ci0gIEludGVycnVwdDgyNTlEaXNhYmxlSXJxLA0KLSAgSW50ZXJydXB0ODI1OUdldEludGVycnVw dExpbmUsDQotICBJbnRlcnJ1cHQ4MjU5RW5kT2ZJbnRlcnJ1cHQNCi19Ow0KLQ0KLS8vDQotLy8g R2xvYmFsIGZvciB0aGUgaGFuZGxlIHRoYXQgdGhlIExlZ2FjeSA4MjU5IFByb3RvY29sIGlzIGlu c3RhbGxlZA0KLS8vDQotRUZJX0hBTkRMRSAgbTgyNTlIYW5kbGUgPSBOVUxMOw0KLQ0KLVVJTlQ4 ICAgICAgICAgIG1NYXN0ZXJCYXNlICAgICAgICA9IDB4ZmY7DQotVUlOVDggICAgICAgICAgbVNs YXZlQmFzZSAgICAgICAgID0gMHhmZjsNCi1FRklfODI1OV9NT0RFICBtTW9kZSAgICAgICAgICAg ICAgPSBFZmk4MjU5UHJvdGVjdGVkTW9kZTsNCi1VSU5UMTYgICAgICAgICBtUHJvdGVjdGVkTW9k ZU1hc2sgPSAweGZmZmY7DQotVUlOVDE2ICAgICAgICAgbUxlZ2FjeU1vZGVNYXNrOw0KLVVJTlQx NiAgICAgICAgIG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVsID0gMHgwMDAwOw0KLVVJTlQxNiAgICAg ICAgIG1MZWdhY3lNb2RlRWRnZUxldmVsOw0KLQ0KLS8vDQotLy8gV29ya2VyIEZ1bmN0aW9ucw0K LS8vDQotDQotLyoqDQotICBXcml0ZSB0byBtYXNrIGFuZCBlZGdlL2xldmVsIHRyaWdnZXJlZCBy ZWdpc3RlcnMgb2YgbWFzdGVyIGFuZCBzbGF2ZSBQSUNzLg0KLQ0KLSAgQHBhcmFtW2luXSAgTWFz ayAgICAgICBsb3cgYnl0ZSBmb3IgbWFzdGVyIFBJQyBtYXNrIHJlZ2lzdGVyLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICBoaWdoIGJ5dGUgZm9yIHNsYXZlIFBJQyBtYXNrIHJlZ2lzdGVyLg0K LSAgQHBhcmFtW2luXSAgRWRnZUxldmVsICBsb3cgYnl0ZSBmb3IgbWFzdGVyIFBJQyBlZGdlL2xl dmVsIHRyaWdnZXJlZCByZWdpc3RlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCBi eXRlIGZvciBzbGF2ZSBQSUMgZWRnZS9sZXZlbCB0cmlnZ2VyZWQgcmVnaXN0ZXIuDQotDQotKiov DQotVk9JRA0KLUludGVycnVwdDgyNTlXcml0ZU1hc2sgKA0KLSAgSU4gVUlOVDE2ICBNYXNrLA0K LSAgSU4gVUlOVDE2ICBFZGdlTGV2ZWwNCi0gICkNCi17DQotICBJb1dyaXRlOCAoTEVHQUNZXzgy NTlfTUFTS19SRUdJU1RFUl9NQVNURVIsIChVSU5UOClNYXNrKTsNCi0gIElvV3JpdGU4IChMRUdB Q1lfODI1OV9NQVNLX1JFR0lTVEVSX1NMQVZFLCAoVUlOVDgpKE1hc2sgPj4gOCkpOw0KLSAgSW9X cml0ZTggKExFR0FDWV84MjU5X0VER0VfTEVWRUxfVFJJR0dFUkVEX1JFR0lTVEVSX01BU1RFUiwg KFVJTlQ4KUVkZ2VMZXZlbCk7DQotICBJb1dyaXRlOCAoTEVHQUNZXzgyNTlfRURHRV9MRVZFTF9U UklHR0VSRURfUkVHSVNURVJfU0xBVkUsIChVSU5UOCkoRWRnZUxldmVsID4+IDgpKTsNCi19DQot DQotLyoqDQotICBSZWFkIGZyb20gbWFzayBhbmQgZWRnZS9sZXZlbCB0cmlnZ2VyZWQgcmVnaXN0 ZXJzIG9mIG1hc3RlciBhbmQgc2xhdmUgUElDcy4NCi0NCi0gIEBwYXJhbVtvdXRdICBNYXNrICAg ICAgIGxvdyBieXRlIGZvciBtYXN0ZXIgUElDIG1hc2sgcmVnaXN0ZXIsDQotICAgICAgICAgICAg ICAgICAgICAgICAgICBoaWdoIGJ5dGUgZm9yIHNsYXZlIFBJQyBtYXNrIHJlZ2lzdGVyLg0KLSAg QHBhcmFtW291dF0gIEVkZ2VMZXZlbCAgbG93IGJ5dGUgZm9yIG1hc3RlciBQSUMgZWRnZS9sZXZl bCB0cmlnZ2VyZWQgcmVnaXN0ZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoIGJ5 dGUgZm9yIHNsYXZlIFBJQyBlZGdlL2xldmVsIHRyaWdnZXJlZCByZWdpc3Rlci4NCi0NCi0qKi8N Ci1WT0lEDQotSW50ZXJydXB0ODI1OVJlYWRNYXNrICgNCi0gIE9VVCBVSU5UMTYgICpNYXNrLA0K LSAgT1VUIFVJTlQxNiAgKkVkZ2VMZXZlbA0KLSAgKQ0KLXsNCi0gIFVJTlQxNiAgTWFzdGVyVmFs dWU7DQotICBVSU5UMTYgIFNsYXZlVmFsdWU7DQotDQotICBpZiAoTWFzayAhPSBOVUxMKSB7DQot ICAgIE1hc3RlclZhbHVlID0gSW9SZWFkOCAoTEVHQUNZXzgyNTlfTUFTS19SRUdJU1RFUl9NQVNU RVIpOw0KLSAgICBTbGF2ZVZhbHVlICA9IElvUmVhZDggKExFR0FDWV84MjU5X01BU0tfUkVHSVNU RVJfU0xBVkUpOw0KLQ0KLSAgICAqTWFzayA9IChVSU5UMTYpKE1hc3RlclZhbHVlIHwgKFNsYXZl VmFsdWUgPDwgOCkpOw0KLSAgfQ0KLQ0KLSAgaWYgKEVkZ2VMZXZlbCAhPSBOVUxMKSB7DQotICAg IE1hc3RlclZhbHVlID0gSW9SZWFkOCAoTEVHQUNZXzgyNTlfRURHRV9MRVZFTF9UUklHR0VSRURf UkVHSVNURVJfTUFTVEVSKTsNCi0gICAgU2xhdmVWYWx1ZSAgPSBJb1JlYWQ4IChMRUdBQ1lfODI1 OV9FREdFX0xFVkVMX1RSSUdHRVJFRF9SRUdJU1RFUl9TTEFWRSk7DQotDQotICAgICpFZGdlTGV2 ZWwgPSAoVUlOVDE2KShNYXN0ZXJWYWx1ZSB8IChTbGF2ZVZhbHVlIDw8IDgpKTsNCi0gIH0NCi19 DQotDQotLy8NCi0vLyBMZWdhY3kgODI1OSBQcm90b2NvbCBJbnRlcmZhY2UgRnVuY3Rpb25zDQot Ly8NCi0NCi0vKioNCi0gIFNldHMgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlIDgyNTkgbWFzdGVy IGFuZCBzbGF2ZSBQSUNzLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgSW5kaWNhdGVz IHRoZSBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICBN YXN0ZXJCYXNlICBJbnRlcnJ1cHQgdmVjdG9ycyBmb3IgSVJRMC1JUlE3Lg0KLSAgQHBhcmFtW2lu XSAgU2xhdmVCYXNlICAgSW50ZXJydXB0IHZlY3RvcnMgZm9yIElSUTgtSVJRMTUuDQotDQotICBA cmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICBUaGUgODI1OSBQSUMgd2FzIHByb2dyYW1tZWQgc3Vj Y2Vzc2Z1bGx5Lg0KLSAgQHJldHZhbCAgRUZJX0RFVklDRV9FUlJPUiAgVGhlcmUgd2FzIGFuIGVy cm9yIHdoaWxlIHdyaXRpbmcgdG8gdGhlIDgyNTkgUElDLg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMN Ci1FRklBUEkNCi1JbnRlcnJ1cHQ4MjU5U2V0VmVjdG9yQmFzZSAoDQotICBJTiBFRklfTEVHQUNZ XzgyNTlfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBN YXN0ZXJCYXNlLA0KLSAgSU4gVUlOVDggICAgICAgICAgICAgICAgICAgICBTbGF2ZUJhc2UNCi0g ICkNCi17DQotICBVSU5UOCAgICBNYXNrOw0KLSAgRUZJX1RQTCAgT3JpZ2luYWxUcGw7DQotDQot ICBPcmlnaW5hbFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9ISUdIX0xFVkVMKTsNCi0gIC8vDQot ICAvLyBTZXQgdmVjdG9yIGJhc2UgZm9yIHNsYXZlIFBJQw0KLSAgLy8NCi0gIGlmIChTbGF2ZUJh c2UgIT0gbVNsYXZlQmFzZSkgew0KLSAgICBtU2xhdmVCYXNlID0gU2xhdmVCYXNlOw0KLQ0KLSAg ICAvLw0KLSAgICAvLyBJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBpcyBuZWVkZWQgZm9yIHNldHRp bmcgdmVjdG9yIGJhc2UuDQotICAgIC8vDQotDQotICAgIC8vDQotICAgIC8vIFByZXNlcnZlIGlu dGVycnR1cCBtYXNrIHJlZ2lzdGVyIGJlZm9yZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQ0KLSAg ICAvLyBiZWNhdXNlIGl0IHdpbGwgYmUgY2xlYXJlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24NCi0g ICAgLy8NCi0gICAgTWFzayA9IElvUmVhZDggKExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfU0xB VkUpOw0KLQ0KLSAgICAvLw0KLSAgICAvLyBJQ1cxOiBjYXNjYWRlIG1vZGUsIElDVzQgd3JpdGUg cmVxdWlyZWQNCi0gICAgLy8NCi0gICAgSW9Xcml0ZTggKExFR0FDWV84MjU5X0NPTlRST0xfUkVH SVNURVJfU0xBVkUsIDB4MTEpOw0KLQ0KLSAgICAvLw0KLSAgICAvLyBJQ1cyOiBuZXcgdmVjdG9y IGJhc2UgKG11c3QgYmUgbXVsdGlwbGUgb2YgOCkNCi0gICAgLy8NCi0gICAgSW9Xcml0ZTggKExF R0FDWV84MjU5X01BU0tfUkVHSVNURVJfU0xBVkUsIG1TbGF2ZUJhc2UpOw0KLQ0KLSAgICAvLw0K LSAgICAvLyBJQ1czOiBzbGF2ZSBpbmRlbnRpZmljYXRpb24gY29kZSBtdXN0IGJlIDINCi0gICAg Ly8NCi0gICAgSW9Xcml0ZTggKExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfU0xBVkUsIDB4MDIp Ow0KLQ0KLSAgICAvLw0KLSAgICAvLyBJQ1c0OiBmdWxseSBuZXN0ZWQgbW9kZSwgbm9uLWJ1ZmZl cmVkIG1vZGUsIG5vcm1hbCBFT0ksIElBIHByb2Nlc3Nvcg0KLSAgICAvLw0KLSAgICBJb1dyaXRl OCAoTEVHQUNZXzgyNTlfTUFTS19SRUdJU1RFUl9TTEFWRSwgMHgwMSk7DQotDQotICAgIC8vDQot ICAgIC8vIFJlc3RvcmUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXINCi0gICAgLy8NCi0gICAgSW9X cml0ZTggKExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfU0xBVkUsIE1hc2spOw0KLSAgfQ0KLQ0K LSAgLy8NCi0gIC8vIFNldCB2ZWN0b3IgYmFzZSBmb3IgbWFzdGVyIFBJQw0KLSAgLy8NCi0gIGlm IChNYXN0ZXJCYXNlICE9IG1NYXN0ZXJCYXNlKSB7DQotICAgIG1NYXN0ZXJCYXNlID0gTWFzdGVy QmFzZTsNCi0NCi0gICAgLy8NCi0gICAgLy8gSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgbmVl ZGVkIGZvciBzZXR0aW5nIHZlY3RvciBiYXNlLg0KLSAgICAvLw0KLQ0KLSAgICAvLw0KLSAgICAv LyBQcmVzZXJ2ZSBpbnRlcnJ0dXAgbWFzayByZWdpc3RlciBiZWZvcmUgaW5pdGlhbGl6YXRpb24g c2VxdWVuY2UNCi0gICAgLy8gYmVjYXVzZSBpdCB3aWxsIGJlIGNsZWFyZWQgZHVyaW5nIGluaXRp YWxpemF0aW9uDQotICAgIC8vDQotICAgIE1hc2sgPSBJb1JlYWQ4IChMRUdBQ1lfODI1OV9NQVNL X1JFR0lTVEVSX01BU1RFUik7DQotDQotICAgIC8vDQotICAgIC8vIElDVzE6IGNhc2NhZGUgbW9k ZSwgSUNXNCB3cml0ZSByZXF1aXJlZA0KLSAgICAvLw0KLSAgICBJb1dyaXRlOCAoTEVHQUNZXzgy NTlfQ09OVFJPTF9SRUdJU1RFUl9NQVNURVIsIDB4MTEpOw0KLQ0KLSAgICAvLw0KLSAgICAvLyBJ Q1cyOiBuZXcgdmVjdG9yIGJhc2UgKG11c3QgYmUgbXVsdGlwbGUgb2YgOCkNCi0gICAgLy8NCi0g ICAgSW9Xcml0ZTggKExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfTUFTVEVSLCBtTWFzdGVyQmFz ZSk7DQotDQotICAgIC8vDQotICAgIC8vIElDVzM6IHNsYXZlIFBJQyBpcyBjYXNjYWRlZCBvbiBJ UlEyDQotICAgIC8vDQotICAgIElvV3JpdGU4IChMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX01B U1RFUiwgMHgwNCk7DQotDQotICAgIC8vDQotICAgIC8vIElDVzQ6IGZ1bGx5IG5lc3RlZCBtb2Rl LCBub24tYnVmZmVyZWQgbW9kZSwgbm9ybWFsIEVPSSwgSUEgcHJvY2Vzc29yDQotICAgIC8vDQot ICAgIElvV3JpdGU4IChMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX01BU1RFUiwgMHgwMSk7DQot DQotICAgIC8vDQotICAgIC8vIFJlc3RvcmUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXINCi0gICAg Ly8NCi0gICAgSW9Xcml0ZTggKExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfTUFTVEVSLCBNYXNr KTsNCi0gIH0NCi0NCi0gIElvV3JpdGU4IChMRUdBQ1lfODI1OV9DT05UUk9MX1JFR0lTVEVSX1NM QVZFLCBMRUdBQ1lfODI1OV9FT0kpOw0KLSAgSW9Xcml0ZTggKExFR0FDWV84MjU5X0NPTlRST0xf UkVHSVNURVJfTUFTVEVSLCBMRUdBQ1lfODI1OV9FT0kpOw0KLQ0KLSAgZ0JTLT5SZXN0b3JlVFBM IChPcmlnaW5hbFRwbCk7DQotDQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotfQ0KLQ0KLS8qKg0K LSAgR2V0cyB0aGUgY3VycmVudCAxNi1iaXQgcmVhbCBtb2RlIGFuZCAzMi1iaXQgcHJvdGVjdGVk LW1vZGUgSVJRIG1hc2tzLg0KLQ0KLSAgQHBhcmFtW2luXSAgIFRoaXMgICAgICAgICAgICAgICAg SW5kaWNhdGVzIHRoZSBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFy YW1bb3V0XSAgTGVnYWN5TWFzayAgICAgICAgICAxNi1iaXQgbW9kZSBpbnRlcnJ1cHQgbWFzayBm b3IgSVJRMC1JUlExNS4NCi0gIEBwYXJhbVtvdXRdICBMZWdhY3lFZGdlTGV2ZWwgICAgIDE2LWJp dCBtb2RlIGVkZ2UvbGV2ZWwgbWFzayBmb3IgSVJRLUlSUTE1Lg0KLSAgQHBhcmFtW291dF0gIFBy b3RlY3RlZE1hc2sgICAgICAgMzItYml0IG1vZGUgaW50ZXJydXB0IG1hc2sgZm9yIElSUTAtSVJR MTUuDQotICBAcGFyYW1bb3V0XSAgUHJvdGVjdGVkRWRnZUxldmVsICAzMi1iaXQgbW9kZSBlZGdl L2xldmVsIG1hc2sgZm9yIElSUTAtSVJRMTUuDQotDQotICBAcmV0dmFsICBFRklfU1VDQ0VTUyAg ICAgICBUaGUgODI1OSBQSUMgd2FzIHByb2dyYW1tZWQgc3VjY2Vzc2Z1bGx5Lg0KLSAgQHJldHZh bCAgRUZJX0RFVklDRV9FUlJPUiAgVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhl IDgyNTkgUElDLg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnRlcnJ1cHQ4MjU5 R2V0TWFzayAoDQotICBJTiAgRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MICAqVGhpcywNCi0gIE9V VCBVSU5UMTYgICAgICAgICAgICAgICAgICAgICpMZWdhY3lNYXNrICBPUFRJT05BTCwNCi0gIE9V VCBVSU5UMTYgICAgICAgICAgICAgICAgICAgICpMZWdhY3lFZGdlTGV2ZWwgIE9QVElPTkFMLA0K LSAgT1VUIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKlByb3RlY3RlZE1hc2sgIE9QVElPTkFM LA0KLSAgT1VUIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKlByb3RlY3RlZEVkZ2VMZXZlbCBP UFRJT05BTA0KLSAgKQ0KLXsNCi0gIGlmIChMZWdhY3lNYXNrICE9IE5VTEwpIHsNCi0gICAgKkxl Z2FjeU1hc2sgPSBtTGVnYWN5TW9kZU1hc2s7DQotICB9DQotDQotICBpZiAoTGVnYWN5RWRnZUxl dmVsICE9IE5VTEwpIHsNCi0gICAgKkxlZ2FjeUVkZ2VMZXZlbCA9IG1MZWdhY3lNb2RlRWRnZUxl dmVsOw0KLSAgfQ0KLQ0KLSAgaWYgKFByb3RlY3RlZE1hc2sgIT0gTlVMTCkgew0KLSAgICAqUHJv dGVjdGVkTWFzayA9IG1Qcm90ZWN0ZWRNb2RlTWFzazsNCi0gIH0NCi0NCi0gIGlmIChQcm90ZWN0 ZWRFZGdlTGV2ZWwgIT0gTlVMTCkgew0KLSAgICAqUHJvdGVjdGVkRWRnZUxldmVsID0gbVByb3Rl Y3RlZE1vZGVFZGdlTGV2ZWw7DQotICB9DQotDQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotfQ0K LQ0KLS8qKg0KLSAgU2V0cyB0aGUgY3VycmVudCAxNi1iaXQgcmVhbCBtb2RlIGFuZCAzMi1iaXQg cHJvdGVjdGVkLW1vZGUgSVJRIG1hc2tzLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lfODI1OV9QUk9UT0NPTCBpbnN0YW5jZS4N Ci0gIEBwYXJhbVtpbl0gIExlZ2FjeU1hc2sgICAgICAgICAgMTYtYml0IG1vZGUgaW50ZXJydXB0 IG1hc2sgZm9yIElSUTAtSVJRMTUuDQotICBAcGFyYW1baW5dICBMZWdhY3lFZGdlTGV2ZWwgICAg IDE2LWJpdCBtb2RlIGVkZ2UvbGV2ZWwgbWFzayBmb3IgSVJRLUlSUTE1Lg0KLSAgQHBhcmFtW2lu XSAgUHJvdGVjdGVkTWFzayAgICAgICAzMi1iaXQgbW9kZSBpbnRlcnJ1cHQgbWFzayBmb3IgSVJR MC1JUlExNS4NCi0gIEBwYXJhbVtpbl0gIFByb3RlY3RlZEVkZ2VMZXZlbCAgMzItYml0IG1vZGUg ZWRnZS9sZXZlbCBtYXNrIGZvciBJUlEwLUlSUTE1Lg0KLQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NF U1MgICAgICAgVGhlIDgyNTkgUElDIHdhcyBwcm9ncmFtbWVkIHN1Y2Nlc3NmdWxseS4NCi0gIEBy ZXR2YWwgIEVGSV9ERVZJQ0VfRVJST1IgIFRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSB3cml0aW5n IHRoZSA4MjU5IFBJQy4NCi0NCi0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQotSW50ZXJydXB0 ODI1OVNldE1hc2sgKA0KLSAgSU4gRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MICAqVGhpcywNCi0g IElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKkxlZ2FjeU1hc2sgIE9QVElPTkFMLA0KLSAg SU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqTGVnYWN5RWRnZUxldmVsICBPUFRJT05BTCwN Ci0gIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgKlByb3RlY3RlZE1hc2sgIE9QVElPTkFM LA0KLSAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAqUHJvdGVjdGVkRWRnZUxldmVsIE9Q VElPTkFMDQotICApDQotew0KLSAgaWYgKExlZ2FjeU1hc2sgIT0gTlVMTCkgew0KLSAgICBtTGVn YWN5TW9kZU1hc2sgPSAqTGVnYWN5TWFzazsNCi0gIH0NCi0NCi0gIGlmIChMZWdhY3lFZGdlTGV2 ZWwgIT0gTlVMTCkgew0KLSAgICBtTGVnYWN5TW9kZUVkZ2VMZXZlbCA9ICpMZWdhY3lFZGdlTGV2 ZWw7DQotICB9DQotDQotICBpZiAoUHJvdGVjdGVkTWFzayAhPSBOVUxMKSB7DQotICAgIG1Qcm90 ZWN0ZWRNb2RlTWFzayA9ICpQcm90ZWN0ZWRNYXNrOw0KLSAgfQ0KLQ0KLSAgaWYgKFByb3RlY3Rl ZEVkZ2VMZXZlbCAhPSBOVUxMKSB7DQotICAgIG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVsID0gKlBy b3RlY3RlZEVkZ2VMZXZlbDsNCi0gIH0NCi0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQot DQotLyoqDQotICBTZXRzIHRoZSBtb2RlIG9mIHRoZSBQSUNzLg0KLQ0KLSAgQHBhcmFtW2luXSAg VGhpcyAgICAgICBJbmRpY2F0ZXMgdGhlIEVGSV9MRUdBQ1lfODI1OV9QUk9UT0NPTCBpbnN0YW5j ZS4NCi0gIEBwYXJhbVtpbl0gIE1vZGUgICAgICAgMTYtYml0IHJlYWwgb3IgMzItYml0IHByb3Rl Y3RlZCBtb2RlLg0KLSAgQHBhcmFtW2luXSAgTWFzayAgICAgICBUaGUgdmFsdWUgd2l0aCB3aGlj aCB0byBzZXQgdGhlIGludGVycnVwdCBtYXNrLg0KLSAgQHBhcmFtW2luXSAgRWRnZUxldmVsICBU aGUgdmFsdWUgd2l0aCB3aGljaCB0byBzZXQgdGhlIGVkZ2UvbGV2ZWwgbWFzay4NCi0NCi0gIEBy ZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIG1vZGUgd2FzIHNldCBzdWNjZXNzZnVs bHkuDQotICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFRoZSBtb2RlIHdhcyBub3Qg c2V0Lg0KLQ0KLSoqLw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnRlcnJ1cHQ4MjU5U2V0TW9k ZSAoDQotICBJTiBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gRUZJXzgy NTlfTU9ERSAgICAgICAgICAgICBNb2RlLA0KLSAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAg ICAqTWFzayAgT1BUSU9OQUwsDQotICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICpFZGdl TGV2ZWwgT1BUSU9OQUwNCi0gICkNCi17DQotICBpZiAoTW9kZSA9PSBtTW9kZSkgew0KLSAgICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQotICB9DQotDQotICBpZiAoTW9kZSA9PSBFZmk4MjU5TGVnYWN5 TW9kZSkgew0KLSAgICAvLw0KLSAgICAvLyBJbiBFZmk4MjU5UHJvdGVjdGVkTW9kZSwgbWFzayBh bmQgZWRnZS9sZXZlbCB0cmlnZ2VyIHJlZ2lzdGVycyBzaG91bGQNCi0gICAgLy8gYmUgY2hhbmdl ZCB0aHJvdWdoIHRoaXMgcHJvdG9jb2wsIHNvIHdlIGNhbiB0cmFjayB0aGVtIGluIHRoZQ0KLSAg ICAvLyBjb3JyZXNwb25kaW5nIG1vZHVsZSB2YXJpYWJsZXMuDQotICAgIC8vDQotICAgIEludGVy cnVwdDgyNTlSZWFkTWFzayAoJm1Qcm90ZWN0ZWRNb2RlTWFzaywgJm1Qcm90ZWN0ZWRNb2RlRWRn ZUxldmVsKTsNCi0NCi0gICAgaWYgKE1hc2sgIT0gTlVMTCkgew0KLSAgICAgIC8vDQotICAgICAg Ly8gVXBkYXRlIHRoZSBNYXNrIGZvciB0aGUgbmV3IG1vZGUNCi0gICAgICAvLw0KLSAgICAgIG1M ZWdhY3lNb2RlTWFzayA9ICpNYXNrOw0KLSAgICB9DQotDQotICAgIGlmIChFZGdlTGV2ZWwgIT0g TlVMTCkgew0KLSAgICAgIC8vDQotICAgICAgLy8gVXBkYXRlIHRoZSBFZGdlL0xldmVsIHRyaWdn ZXJlZCBtYXNrIGZvciB0aGUgbmV3IG1vZGUNCi0gICAgICAvLw0KLSAgICAgIG1MZWdhY3lNb2Rl RWRnZUxldmVsID0gKkVkZ2VMZXZlbDsNCi0gICAgfQ0KLQ0KLSAgICBtTW9kZSA9IE1vZGU7DQot DQotICAgIC8vDQotICAgIC8vIFdyaXRlIG5ldyBsZWdhY3kgbW9kZSBtYXNrL3RyaWdnZXIgbGV2 ZWwNCi0gICAgLy8NCi0gICAgSW50ZXJydXB0ODI1OVdyaXRlTWFzayAobUxlZ2FjeU1vZGVNYXNr LCBtTGVnYWN5TW9kZUVkZ2VMZXZlbCk7DQotDQotICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCi0g IH0NCi0NCi0gIGlmIChNb2RlID09IEVmaTgyNTlQcm90ZWN0ZWRNb2RlKSB7DQotICAgIC8vDQot ICAgIC8vIFNhdmUgdGhlIGxlZ2FjeSBtb2RlIG1hc2svdHJpZ2dlciBsZXZlbA0KLSAgICAvLw0K LSAgICBJbnRlcnJ1cHQ4MjU5UmVhZE1hc2sgKCZtTGVnYWN5TW9kZU1hc2ssICZtTGVnYWN5TW9k ZUVkZ2VMZXZlbCk7DQotICAgIC8vDQotICAgIC8vIEFsd2F5cyBmb3JjZSBUaW1lciB0byBiZSBl bmFibGVkIGFmdGVyIHJldHVybiBmcm9tIDE2LWJpdCBjb2RlLg0KLSAgICAvLyBUaGlzIGFsd2F5 cyBpbnN1cmVzIHRoYXQgb24gbmV4dCBlbnRyeSwgdGltZXIgaXMgY291bnRpbmcuDQotICAgIC8v DQotICAgIG1MZWdhY3lNb2RlTWFzayAmPSAweEZGRkU7DQotDQotICAgIGlmIChNYXNrICE9IE5V TEwpIHsNCi0gICAgICAvLw0KLSAgICAgIC8vIFVwZGF0ZSB0aGUgTWFzayBmb3IgdGhlIG5ldyBt b2RlDQotICAgICAgLy8NCi0gICAgICBtUHJvdGVjdGVkTW9kZU1hc2sgPSAqTWFzazsNCi0gICAg fQ0KLQ0KLSAgICBpZiAoRWRnZUxldmVsICE9IE5VTEwpIHsNCi0gICAgICAvLw0KLSAgICAgIC8v IFVwZGF0ZSB0aGUgRWRnZS9MZXZlbCB0cmlnZ2VyZWQgbWFzayBmb3IgdGhlIG5ldyBtb2RlDQot ICAgICAgLy8NCi0gICAgICBtUHJvdGVjdGVkTW9kZUVkZ2VMZXZlbCA9ICpFZGdlTGV2ZWw7DQot ICAgIH0NCi0NCi0gICAgbU1vZGUgPSBNb2RlOw0KLQ0KLSAgICAvLw0KLSAgICAvLyBXcml0ZSBu ZXcgcHJvdGVjdGVkIG1vZGUgbWFzay90cmlnZ2VyIGxldmVsDQotICAgIC8vDQotICAgIEludGVy cnVwdDgyNTlXcml0ZU1hc2sgKG1Qcm90ZWN0ZWRNb2RlTWFzaywgbVByb3RlY3RlZE1vZGVFZGdl TGV2ZWwpOw0KLQ0KLSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotICB9DQotDQotICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KLX0NCi0NCi0vKioNCi0gIFRyYW5zbGF0ZXMgdGhlIElS USBpbnRvIGEgdmVjdG9yLg0KLQ0KLSAgQHBhcmFtW2luXSAgIFRoaXMgICAgSW5kaWNhdGVzIHRo ZSBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICAgSXJx ICAgICBJUlEwLUlSUTE1Lg0KLSAgQHBhcmFtW291dF0gIFZlY3RvciAgVGhlIHZlY3RvciB0aGF0 IGlzIGFzc2lnbmVkIHRvIHRoZSBJUlEuDQotDQotICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAg ICAgICAgIFRoZSBWZWN0b3IgdGhhdCBtYXRjaGVzIElycSB3YXMgcmV0dXJuZWQuDQotICBAcmV0 dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgIElycSBpcyBub3QgdmFsaWQuDQotDQotKiovDQot RUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUludGVycnVwdDgyNTlHZXRWZWN0b3IgKA0KLSAgSU4gIEVG SV9MRUdBQ1lfODI1OV9QUk9UT0NPTCAgKlRoaXMsDQotICBJTiAgRUZJXzgyNTlfSVJRICAgICAg ICAgICAgICBJcnEsDQotICBPVVQgVUlOVDggICAgICAgICAgICAgICAgICAgICAqVmVjdG9yDQot ICApDQotew0KLSAgaWYgKChVSU5UMzIpSXJxID4gRWZpODI1OUlycTE1KSB7DQotICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQotICB9DQotDQotICBpZiAoSXJxIDw9IEVmaTgyNTlJ cnE3KSB7DQotICAgICpWZWN0b3IgPSAoVUlOVDgpKG1NYXN0ZXJCYXNlICsgSXJxKTsNCi0gIH0g ZWxzZSB7DQotICAgICpWZWN0b3IgPSAoVUlOVDgpKG1TbGF2ZUJhc2UgKyAoSXJxIC0gRWZpODI1 OUlycTgpKTsNCi0gIH0NCi0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotLyoqDQot ICBFbmFibGVzIHRoZSBzcGVjaWZpZWQgSVJRLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgIEluZGljYXRlcyB0aGUgRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MIGluc3RhbmNlLg0K LSAgQHBhcmFtW2luXSAgSXJxICAgICAgICAgICAgIElSUTAtSVJRMTUuDQotICBAcGFyYW1baW5d ICBMZXZlbFRyaWdnZXJlZCAgMCA9IEVkZ2UgdHJpZ2dlcmVkOyAxID0gTGV2ZWwgdHJpZ2dlcmVk Lg0KLQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSXJxIHdhcyBlbmFi bGVkIG9uIHRoZSA4MjU5IFBJQy4NCi0gIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg VGhlIElycSBpcyBub3QgdmFsaWQuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUlu dGVycnVwdDgyNTlFbmFibGVJcnEgKA0KLSAgSU4gRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MICAq VGhpcywNCi0gIElOIEVGSV84MjU5X0lSUSAgICAgICAgICAgICAgSXJxLA0KLSAgSU4gQk9PTEVB TiAgICAgICAgICAgICAgICAgICBMZXZlbFRyaWdnZXJlZA0KLSAgKQ0KLXsNCi0gIGlmICgoVUlO VDMyKUlycSA+IEVmaTgyNTlJcnExNSkgew0KLSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KLSAgfQ0KLQ0KLSAgbVByb3RlY3RlZE1vZGVNYXNrID0gKFVJTlQxNikobVByb3RlY3Rl ZE1vZGVNYXNrICYgfigxIDw8IElycSkpOw0KLSAgaWYgKExldmVsVHJpZ2dlcmVkKSB7DQotICAg IG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVsID0gKFVJTlQxNikobVByb3RlY3RlZE1vZGVFZGdlTGV2 ZWwgfCAoMSA8PCBJcnEpKTsNCi0gIH0gZWxzZSB7DQotICAgIG1Qcm90ZWN0ZWRNb2RlRWRnZUxl dmVsID0gKFVJTlQxNikobVByb3RlY3RlZE1vZGVFZGdlTGV2ZWwgJiB+KDEgPDwgSXJxKSk7DQot ICB9DQotDQotICBJbnRlcnJ1cHQ4MjU5V3JpdGVNYXNrIChtUHJvdGVjdGVkTW9kZU1hc2ssIG1Q cm90ZWN0ZWRNb2RlRWRnZUxldmVsKTsNCi0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQot DQotLyoqDQotICBEaXNhYmxlcyB0aGUgc3BlY2lmaWVkIElSUS4NCi0NCi0gIEBwYXJhbVtpbl0g IFRoaXMgIEluZGljYXRlcyB0aGUgRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MIGluc3RhbmNlLg0K LSAgQHBhcmFtW2luXSAgSXJxICAgSVJRMC1JUlExNS4NCi0NCi0gIEByZXR2YWwgIEVGSV9TVUND RVNTICAgICAgICAgICAgVGhlIElycSB3YXMgZGlzYWJsZWQgb24gdGhlIDgyNTkgUElDLg0KLSAg QHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgSXJxIGlzIG5vdCB2YWxpZC4NCi0N Ci0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQotSW50ZXJydXB0ODI1OURpc2FibGVJcnEgKA0K LSAgSU4gRUZJX0xFR0FDWV84MjU5X1BST1RPQ09MICAqVGhpcywNCi0gIElOIEVGSV84MjU5X0lS USAgICAgICAgICAgICAgSXJxDQotICApDQotew0KLSAgaWYgKChVSU5UMzIpSXJxID4gRWZpODI1 OUlycTE1KSB7DQotICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQotICB9DQotDQot ICBtUHJvdGVjdGVkTW9kZU1hc2sgPSAoVUlOVDE2KShtUHJvdGVjdGVkTW9kZU1hc2sgfCAoMSA8 PCBJcnEpKTsNCi0NCi0gIG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVsID0gKFVJTlQxNikobVByb3Rl Y3RlZE1vZGVFZGdlTGV2ZWwgJiB+KDEgPDwgSXJxKSk7DQotDQotICBJbnRlcnJ1cHQ4MjU5V3Jp dGVNYXNrIChtUHJvdGVjdGVkTW9kZU1hc2ssIG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVsKTsNCi0N Ci0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotLyoqDQotICBSZWFkcyB0aGUgUENJIGNv bmZpZ3VyYXRpb24gc3BhY2UgdG8gZ2V0IHRoZSBpbnRlcnJ1cHQgbnVtYmVyIHRoYXQgaXMgYXNz aWduZWQgdG8gdGhlIGNhcmQuDQotDQotICBAcGFyYW1baW5dICAgVGhpcyAgICAgICBJbmRpY2F0 ZXMgdGhlIEVGSV9MRUdBQ1lfODI1OV9QUk9UT0NPTCBpbnN0YW5jZS4NCi0gIEBwYXJhbVtpbl0g ICBQY2lIYW5kbGUgIFBDSSBmdW5jdGlvbiBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSB2ZWN0b3Iu DQotICBAcGFyYW1bb3V0XSAgVmVjdG9yICAgICBJUlEgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMg dG8gdGhlIGludGVycnVwdCBsaW5lLg0KLQ0KLSAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgIFRoZSBp bnRlcnJ1cHQgbGluZSB2YWx1ZSB3YXMgcmVhZCBzdWNjZXNzZnVsbHkuDQotDQotKiovDQotRUZJ X1NUQVRVUw0KLUVGSUFQSQ0KLUludGVycnVwdDgyNTlHZXRJbnRlcnJ1cHRMaW5lICgNCi0gIElO ICBFRklfTEVHQUNZXzgyNTlfUFJPVE9DT0wgICpUaGlzLA0KLSAgSU4gIEVGSV9IQU5ETEUgICAg ICAgICAgICAgICAgUGNpSGFuZGxlLA0KLSAgT1VUIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg KlZlY3Rvcg0KLSAgKQ0KLXsNCi0gIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICpQY2lJbzsNCi0gIFVJ TlQ4ICAgICAgICAgICAgICAgIEludGVycnVwdExpbmU7DQotICBFRklfU1RBVFVTICAgICAgICAg ICBTdGF0dXM7DQotDQotICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCi0gICAgICAg ICAgICAgICAgICBQY2lIYW5kbGUsDQotICAgICAgICAgICAgICAgICAgJmdFZmlQY2lJb1Byb3Rv Y29sR3VpZCwNCi0gICAgICAgICAgICAgICAgICAoVk9JRCAqKikmUGNpSW8NCi0gICAgICAgICAg ICAgICAgICApOw0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KLSAgfQ0KLQ0KLSAgUGNpSW8tPlBjaS5SZWFkICgNCi0gICAg ICAgICAgICAgICBQY2lJbywNCi0gICAgICAgICAgICAgICBFZmlQY2lJb1dpZHRoVWludDgsDQot ICAgICAgICAgICAgICAgUENJX0lOVF9MSU5FX09GRlNFVCwNCi0gICAgICAgICAgICAgICAxLA0K LSAgICAgICAgICAgICAgICZJbnRlcnJ1cHRMaW5lDQotICAgICAgICAgICAgICAgKTsNCi0gIC8v DQotICAvLyBJbnRlcnJ1cHQgbGluZSBpcyBzYW1lIGxvY2F0aW9uIGZvciBzdGFuZGFyZCBQQ0kg Y2FyZHMsIHN0YW5kYXJkDQotICAvLyBicmlkZ2UgYW5kIENhcmRCdXMgYnJpZGdlLg0KLSAgLy8N Ci0gICpWZWN0b3IgPSBJbnRlcnJ1cHRMaW5lOw0KLQ0KLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K LX0NCi0NCi0vKioNCi0gIElzc3VlcyB0aGUgRW5kIG9mIEludGVycnVwdCAoRU9JKSBjb21tYW5k cyB0byBQSUNzLg0KLQ0KLSAgQHBhcmFtW2luXSAgVGhpcyAgSW5kaWNhdGVzIHRoZSBFRklfTEVH QUNZXzgyNTlfUFJPVE9DT0wgaW5zdGFuY2UuDQotICBAcGFyYW1baW5dICBJcnEgICBUaGUgaW50 ZXJydXB0IGZvciB3aGljaCB0byBpc3N1ZSB0aGUgRU9JIGNvbW1hbmQuDQotDQotICBAcmV0dmFs ICBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBFT0kgY29tbWFuZCB3YXMgaXNzdWVkLg0KLSAg QHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgSXJxIGlzIG5vdCB2YWxpZC4NCi0N Ci0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQotSW50ZXJydXB0ODI1OUVuZE9mSW50ZXJydXB0 ICgNCi0gIElOIEVGSV9MRUdBQ1lfODI1OV9QUk9UT0NPTCAgKlRoaXMsDQotICBJTiBFRklfODI1 OV9JUlEgICAgICAgICAgICAgIElycQ0KLSAgKQ0KLXsNCi0gIGlmICgoVUlOVDMyKUlycSA+IEVm aTgyNTlJcnExNSkgew0KLSAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KLSAgfQ0K LQ0KLSAgaWYgKElycSA+PSBFZmk4MjU5SXJxOCkgew0KLSAgICBJb1dyaXRlOCAoTEVHQUNZXzgy NTlfQ09OVFJPTF9SRUdJU1RFUl9TTEFWRSwgTEVHQUNZXzgyNTlfRU9JKTsNCi0gIH0NCi0NCi0g IElvV3JpdGU4IChMRUdBQ1lfODI1OV9DT05UUk9MX1JFR0lTVEVSX01BU1RFUiwgTEVHQUNZXzgy NTlfRU9JKTsNCi0NCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotLyoqDQotICBEcml2 ZXIgRW50cnkgcG9pbnQuDQotDQotICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgSW1hZ2VIYW5k bGUgb2YgdGhlIGxvYWRlZCBkcml2ZXIuDQotICBAcGFyYW1baW5dICBTeXN0ZW1UYWJsZSAgUG9p bnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCi0NCi0gIEByZXR2YWwgIEVGSV9TVUNDRVNT ICBPbmUgb3IgbW9yZSBvZiB0aGUgZHJpdmVycyByZXR1cm5lZCBhIHN1Y2Nlc3MgY29kZS4NCi0g IEByZXR2YWwgICFFRklfU1VDQ0VTUyAgRXJyb3IgaW5zdGFsbGluZyBMZWdhY3kgODI1OSBQcm90 b2NvbC4NCi0NCi0qKi8NCi1FRklfU1RBVFVTDQotRUZJQVBJDQotSW5zdGFsbDgyNTkgKA0KLSAg SU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQotICBJTiBFRklfU1lTVEVNX1RBQkxF ICAqU3lzdGVtVGFibGUNCi0gICkNCi17DQotICBFRklfU1RBVFVTICAgIFN0YXR1czsNCi0gIEVG SV84MjU5X0lSUSAgSXJxOw0KLQ0KLSAgLy8NCi0gIC8vIEluaXRpYWx6ZSBtYXNrIHZhbHVlcyBm cm9tIFBDRHMNCi0gIC8vDQotICBtTGVnYWN5TW9kZU1hc2sgICAgICA9IFBjZEdldDE2IChQY2Q4 MjU5TGVnYWN5TW9kZU1hc2spOw0KLSAgbUxlZ2FjeU1vZGVFZGdlTGV2ZWwgPSBQY2RHZXQxNiAo UGNkODI1OUxlZ2FjeU1vZGVFZGdlTGV2ZWwpOw0KLQ0KLSAgLy8NCi0gIC8vIENsZWFyIGFsbCBw ZW5kaW5nIGludGVycnVwdA0KLSAgLy8NCi0gIGZvciAoSXJxID0gRWZpODI1OUlycTA7IElycSA8 PSBFZmk4MjU5SXJxMTU7IElycSsrKSB7DQotICAgIEludGVycnVwdDgyNTlFbmRPZkludGVycnVw dCAoJm1JbnRlcnJ1cHQ4MjU5LCBJcnEpOw0KLSAgfQ0KLQ0KLSAgLy8NCi0gIC8vIFNldCB0aGUg ODI1OSBNYXN0ZXIgYmFzZSB0byAweDY4IGFuZCB0aGUgODI1OSBTbGF2ZSBiYXNlIHRvIDB4NzAN Ci0gIC8vDQotICBTdGF0dXMgPSBJbnRlcnJ1cHQ4MjU5U2V0VmVjdG9yQmFzZSAoJm1JbnRlcnJ1 cHQ4MjU5LCBQUk9URUNURURfTU9ERV9CQVNFX1ZFQ1RPUl9NQVNURVIsIFBST1RFQ1RFRF9NT0RF X0JBU0VfVkVDVE9SX1NMQVZFKTsNCi0NCi0gIC8vDQotICAvLyBTZXQgYWxsIDgyNTkgaW50ZXJy dXB0cyB0byBlZGdlIHRyaWdnZXJlZCBhbmQgZGlzYWJsZWQNCi0gIC8vDQotICBJbnRlcnJ1cHQ4 MjU5V3JpdGVNYXNrIChtUHJvdGVjdGVkTW9kZU1hc2ssIG1Qcm90ZWN0ZWRNb2RlRWRnZUxldmVs KTsNCi0NCi0gIC8vDQotICAvLyBJbnN0YWxsIDgyNTkgUHJvdG9jb2wgb250byBhIG5ldyBoYW5k bGUNCi0gIC8vDQotICBTdGF0dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQot ICAgICAgICAgICAgICAgICAgJm04MjU5SGFuZGxlLA0KLSAgICAgICAgICAgICAgICAgICZnRWZp TGVnYWN5ODI1OVByb3RvY29sR3VpZCwNCi0gICAgICAgICAgICAgICAgICBFRklfTkFUSVZFX0lO VEVSRkFDRSwNCi0gICAgICAgICAgICAgICAgICAmbUludGVycnVwdDgyNTkNCi0gICAgICAgICAg ICAgICAgICApOw0KLSAgcmV0dXJuIFN0YXR1czsNCi19DQoKDQoKLT0tPS09LT0tPS09LT0tPS09 LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0 aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExMTEwNSk6IGh0dHBzOi8vZWRrMi5ncm91 cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExMTEwNQpNdXRlIFRoaXMgVG9waWM6IGh0dHBzOi8vZ3Jv dXBzLmlvL210LzEwMjUxODY3Ni83Njg2MTc2Ckdyb3VwIE93bmVyOiBkZXZlbCtvd25lckBlZGsy Lmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL2xl YXZlLzEyMzY3MTExLzc2ODYxNzYvMTkxMzQ1NjIxMi94eXp6eSBbcmViZWNjYUBvcGVuZncuaW9d Ci09LT0tPS09LT0tPS09LT0tPS09LT0tCgoNCg==