From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: nathaniel.l.desimone@intel.com) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by groups.io with SMTP; Mon, 02 Sep 2019 21:07:00 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Sep 2019 21:06:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,461,1559545200"; d="scan'208";a="182008922" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by fmsmga008.fm.intel.com with ESMTP; 02 Sep 2019 21:06:58 -0700 Received: from orsmsx160.amr.corp.intel.com (10.22.226.43) by ORSMSX101.amr.corp.intel.com (10.22.225.128) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 2 Sep 2019 21:06:57 -0700 Received: from orsmsx114.amr.corp.intel.com ([169.254.8.225]) by ORSMSX160.amr.corp.intel.com ([169.254.13.75]) with mapi id 14.03.0439.000; Mon, 2 Sep 2019 21:06:57 -0700 From: "Nate DeSimone" To: "Wei, David Y" , "devel@edk2.groups.io" CC: "Wu, Hao A" , "Gao, Liming" , "Sinha, Ankit" , "Agyeman, Prince" , "Kubacki, Michael A" , "Kinney, Michael D" Subject: Re: [edk2-platforms PATCH v4 3/7] SimicsOpenBoardPkg: Add SimicsOpenBoardPkg and its modules Thread-Topic: [edk2-platforms PATCH v4 3/7] SimicsOpenBoardPkg: Add SimicsOpenBoardPkg and its modules Thread-Index: AQHVX3ifXnfEu6IcOEiA+Iyrd25PeKcZWvRg Date: Tue, 3 Sep 2019 04:06:56 +0000 Message-ID: <02A34F284D1DA44BB705E61F7180EF0AAEE88AC3@ORSMSX114.amr.corp.intel.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZTQwMjExODUtZjYwMC00NmI1LWFjZjgtMDg5YTgyZWFhNjhhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiZHBkRmY2ZGIyMDE5V1RjcE53R2xiY2d4c2dBYnZDODNxT29scDZoVFQ1elQ4T3ZEZ2Q2dXJmUlFjaTVoWmpcL3EifQ== x-ctpclassification: CTP_NT x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Return-Path: nathaniel.l.desimone@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IE5hdGUgRGVTaW1vbmUgPG5hdGhhbmllbC5sLmRlc2ltb25lQGludGVsLmNv bT4NCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IFdlaSwgRGF2aWQgWSANClNl bnQ6IEZyaWRheSwgQXVndXN0IDMwLCAyMDE5IDI6MTkgUE0NClRvOiBkZXZlbEBlZGsyLmdyb3Vw cy5pbw0KQ2M6IFd1LCBIYW8gQSA8aGFvLmEud3VAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxp bWluZy5nYW9AaW50ZWwuY29tPjsgU2luaGEsIEFua2l0IDxhbmtpdC5zaW5oYUBpbnRlbC5jb20+ OyBBZ3llbWFuLCBQcmluY2UgPHByaW5jZS5hZ3llbWFuQGludGVsLmNvbT47IEt1YmFja2ksIE1p Y2hhZWwgQSA8bWljaGFlbC5hLmt1YmFja2lAaW50ZWwuY29tPjsgRGVzaW1vbmUsIE5hdGhhbmll bCBMIDxuYXRoYW5pZWwubC5kZXNpbW9uZUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQpTdWJqZWN0OiBbZWRrMi1wbGF0Zm9ybXMgUEFU Q0ggdjQgMy83XSBTaW1pY3NPcGVuQm9hcmRQa2c6IEFkZCBTaW1pY3NPcGVuQm9hcmRQa2cgYW5k IGl0cyBtb2R1bGVzDQoNCkFkZCBtb2R1bGVzIEluY2x1ZGUsIExpYnJhcnksIFNpbWljc0R4ZSwg U2ltaWNzUGVpLCBQb2xpY3ksIFNtYmlvc1BsYXRmb3JtRHhlDQphbmQgU2VjQ29yZSBmb3IgU2lt aWNzIFFTUCBwbGF0Zm9ybSBzdXBwb3J0DQoNCkNjOiBIYW8gV3UgPGhhby5hLnd1QGludGVsLmNv bT4NCkNjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCkNjOiBBbmtpdCBTaW5o YSA8YW5raXQuc2luaGFAaW50ZWwuY29tPg0KQ2M6IEFneWVtYW4gUHJpbmNlIDxwcmluY2UuYWd5 ZW1hbkBpbnRlbC5jb20+DQpDYzogS3ViYWNraSBNaWNoYWVsIEEgPG1pY2hhZWwuYS5rdWJhY2tp QGludGVsLmNvbT4NCkNjOiBOYXRlIERlU2ltb25lIDxuYXRoYW5pZWwubC5kZXNpbW9uZUBpbnRl bC5jb20+DQpDYzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ DQoNClNpZ25lZC1vZmYtYnk6IERhdmlkIFdlaSA8ZGF2aWQueS53ZWlAaW50ZWwuY29tPg0KLS0t DQogLi4uL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0R4ZUxvZ29MaWIvTG9nby5jICAgfCAg NjQ3ICsrKysrKysrDQogLi4uL0xpYnJhcnkvTG9hZExpbnV4TGliL0xpbnV4LmMgICAgICAgICAg ICAgICAgICAgfCAgNjYyICsrKysrKysrKw0KIC4uLi9MaWJyYXJ5L0xvYWRMaW51eExpYi9MaW51 eEdkdC5jICAgICAgICAgICAgICAgIHwgIDE3NSArKysNCiAuLi4vTGlicmFyeS9OdlZhcnNGaWxl TGliL0ZzQWNjZXNzLmMgICAgICAgICAgICAgICB8ICA1MDcgKysrKysrKw0KIC4uLi9MaWJyYXJ5 L052VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5jICAgICAgICAgIHwgICA3NyArDQogLi4uL0xp YnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmMgICAgfCAgNDE5ICsrKysr Kw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9Gdi5jIHwg IDEwMCArKw0KIC4uLi9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL1BlaVJlcG9ydEZ2TGliLmMgICAg ICAgIHwgIDExOSArKw0KIC4uLi9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxh dGZvcm0uYyAgIHwgMTU1MyArKysrKysrKysrKysrKysrKysrKw0KIC4uLi9MaWJyYXJ5L1BsYXRm b3JtQm9vdE1hbmFnZXJMaWIvUGxhdGZvcm1EYXRhLmMgIHwgICAzNSArDQogLi4uL1NlcmlhbGl6 ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuYyAgfCAgODY5ICsrKysrKysrKysr DQogLi4uL1NpbGljb25Qb2xpY3lJbml0TGliL1NpbGljb25Qb2xpY3lJbml0TGliLmMgICAgfCAg MTA4ICsrDQogLi4uL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuYyAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDcwICsNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvU2VjTWFp bi5jICAgICB8ICA5NTYgKysrKysrKysrKysrDQogLi4uL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9TaW1pY3NEeGUvUGxhdGZvcm0uYyAgfCAgODY1ICsrKysrKysrKysrDQogLi4uL1NpbWljc09w ZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Db25maWcuYyAgfCAgMTI0ICsrDQogUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmMgfCAgIDU3ICsNCiAu Li4vU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9GZWF0dXJlQ29udHJvbC5jICB8ICAxMTUg KysNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9NZW1EZXRlY3QuYyB8 ICA1NjggKysrKysrKw0KIC4uLi9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1Bs YXRmb3JtLmMgIHwgIDYzMCArKysrKysrKw0KIC4uLi9TbWJpb3NQbGF0Zm9ybUR4ZS9TbWJpb3NQ bGF0Zm9ybUR4ZS5jICAgICAgICAgIHwgIDE0OCArKw0KIC4uLi9JbmNsdWRlL0d1aWQvU2ltaWNz Qm9hcmRDb25maWcuaCAgICAgICAgICAgICAgIHwgICAxOCArDQogLi4uL0luY2x1ZGUvSW5kdXN0 cnlTdGFuZGFyZC9JNDQwRnhQaWl4NC5oICAgICAgICAgfCAgIDUwICsNCiAuLi4vSW5jbHVkZS9J bmR1c3RyeVN0YW5kYXJkL0xpbnV4QnpJbWFnZS5oICAgICAgICB8ICAxNTkgKysNCiAuLi4vSW5j bHVkZS9MaWJyYXJ5L0xvYWRMaW51eExpYi5oICAgICAgICAgICAgICAgICB8ICAyMDUgKysrDQog Li4uL0luY2x1ZGUvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaCAgICAgICAgfCAgMjI0 ICsrKw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9TaW1pY3NQbGF0Zm9ybXMuaCAg IHwgICA1NSArDQogLi4uL0xpYnJhcnkvRHhlTG9nb0xpYi9EeGVMb2dvTGliLmluZiAgICAgICAg ICAgICAgfCAgIDU1ICsNCiAuLi4vTGlicmFyeS9EeGVMb2dvTGliL09lbUJhZGdpbmcuaCAgICAg ICAgICAgICAgICB8ICAgODMgKysNCiAuLi4vTGlicmFyeS9Mb2FkTGludXhMaWIvRHhlTG9hZExp bnV4TGliLmluZiAgICAgICB8ICAgNDIgKw0KIC4uLi9MaWJyYXJ5L0xvYWRMaW51eExpYi9JYTMy L0p1bXBUb0tlcm5lbC5uYXNtICAgIHwgICA0MSArDQogLi4uL0xpYnJhcnkvTG9hZExpbnV4TGli L0xvYWRMaW51eExpYi5oICAgICAgICAgICAgfCAgIDUyICsNCiAuLi4vTGlicmFyeS9Mb2FkTGlu dXhMaWIvWDY0L0p1bXBUb0tlcm5lbC5uYXNtICAgICB8ICAgODUgKysNCiAuLi4vTGlicmFyeS9O dlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaCAgICAgICAgICB8ICAgNTUgKw0KIC4uLi9MaWJy YXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5pbmYgICAgICAgIHwgICA1MyArDQogLi4u L0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlLmggICAgICAgfCAgIDY4ICsN CiAuLi4vTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuaW5mICB8ICAg NTEgKw0KIC4uLi9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL1BlaVJlcG9ydEZ2TGliLmluZiAgICAg IHwgICA1NiArDQogLi4uL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9y bS5oICAgfCAgMTcyICsrKw0KIC4uLi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZiAgICAgICAg ICAgICAgICAgICAgIHwgICA3MiArDQogLi4uL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxp emVWYXJpYWJsZXNMaWIuaCAgfCAgIDMzICsNCiAuLi4vU2VyaWFsaXplVmFyaWFibGVzTGliLmlu ZiAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYgKw0KIC4uLi9TaWxpY29uUG9saWN5SW5pdExp Yi9TaWxpY29uUG9saWN5SW5pdExpYi5pbmYgIHwgICAzOCArDQogLi4uL1NpbGljb25Qb2xpY3lV cGRhdGVMaWIuaW5mICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICsNCiAuLi4vU2ltaWNzT3Bl bkJvYXJkUGtnL1NlY0NvcmUvSWEzMi9TZWNFbnRyeS5uYXNtICB8ICAgNDUgKw0KIC4uLi9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9TZWNNYWluLmluZiAgIHwgICA3MyArDQogLi4u L1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1g2NC9TZWNFbnRyeS5uYXNtICAgfCAgIDQ1ICsN CiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS5oICB8ICAg MzggKw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtLnVuaSAgICAg IHwgICAzMSArDQogLi4uL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Db25m aWcuaCAgfCAgIDUyICsNCiAuLi4vU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9y bUZvcm1zLnZmciB8ICAgNjcgKw0KIC4uLi9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1Np bWljc0R4ZS5pbmYgICAgIHwgICA2NSArDQogUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL1NpbWljc1BlaS9DbW9zLmggfCAgIDUwICsNCiAuLi4vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL1NpbWljc1BlaS9QbGF0Zm9ybS5oICB8ICAgODggKysNCiAuLi4vU2ltaWNzT3BlbkJvYXJk UGtnL1NpbWljc1BlaS9TaW1pY3NQZWkuaW5mICAgICB8ICAxMDQgKysNCiAuLi4vU21iaW9zUGxh dGZvcm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaCAgICAgICAgICB8ICAgMzggKw0KIC4uLi9TbWJp b3NQbGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5pbmYgICAgICAgIHwgICA1MSArDQogNTcg ZmlsZXMgY2hhbmdlZCwgMTEyODkgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQ bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0xvZ28u Yw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9Mb2FkTGludXhMaWIvTGludXguYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTGludXhHZHQu Yw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9OdlZhcnNGaWxlTGliL0ZzQWNjZXNzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZh cnNGaWxlTGliLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmMNCiBj cmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJh cnkvUGVpUmVwb3J0RnZMaWIvRnYuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9QZWlSZXBvcnRGdkxp Yi5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxhdGZvcm0uYw0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0 Zm9ybUJvb3RNYW5hZ2VyTGliL1BsYXRmb3JtRGF0YS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxl c0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeUlu aXRMaWIvU2lsaWNvblBvbGljeUluaXRMaWIuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeVVw ZGF0ZUxpYi9TaWxpY29uUG9saWN5VXBkYXRlTGliLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NlY0NvcmUvU2VjTWFpbi5jDQogY3JlYXRl IG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUv UGxhdGZvcm0uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtQ29uZmlnLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQg UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmMNCiBjcmVh dGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1Bl aS9GZWF0dXJlQ29udHJvbC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvTWVtRGV0ZWN0LmMNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9QbGF0Zm9ybS5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9T bWJpb3NQbGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0d1aWQvU2ltaWNzQm9h cmRDb25maWcuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJkL0k0NDBGeFBpaXg0LmgNCiBjcmVhdGUg bW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvSW5k dXN0cnlTdGFuZGFyZC9MaW51eEJ6SW1hZ2UuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9MaWJyYXJ5L0xvYWRMaW51eExpYi5o DQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9J bmNsdWRlL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliLmgNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvU2ltaWNzUGxhdGZv cm1zLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL0xpYnJhcnkvRHhlTG9nb0xpYi9EeGVMb2dvTGliLmluZg0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL09l bUJhZGdpbmcuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvRHhlTG9hZExpbnV4TGliLmluZg0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9M b2FkTGludXhMaWIvSWEzMi9KdW1wVG9LZXJuZWwubmFzbQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQ bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTG9h ZExpbnV4TGliLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL1g2NC9KdW1wVG9LZXJuZWwubmFzbQ0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFy eS9OdlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9OdlZhcnNGaWxlTGliL052VmFy c0ZpbGVMaWIuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZS5oDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZM aWIvUGVpUmVwb3J0RnZMaWIuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVs L1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxh dGZvcm0uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliL1BsYXRmb3JtQm9vdE1hbmFnZXJM aWIuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIu aA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIvU2VyaWFsaXplVmFyaWFibGVzTGliLmluZg0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9s aWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeUluaXRMaWIvU2lsaWNvblBvbGljeUluaXRMaWIuaW5m DQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Q b2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBkYXRlTGliL1NpbGljb25Qb2xpY3lVcGRhdGVM aWIuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9TZWNDb3JlL0lhMzIvU2VjRW50cnkubmFzbQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9TZWNNYWluLmluZg0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9Y NjQvU2VjRW50cnkubmFzbQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQg UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS51bmkN CiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1Np bWljc0R4ZS9QbGF0Zm9ybUNvbmZpZy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Gb3Jtcy52ZnINCiBjcmVh dGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4 ZS9TaW1pY3NEeGUuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvQ21vcy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IFBsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvUGxhdGZvcm0uaA0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBQbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVp L1NpbWljc1BlaS5pbmYNCiBjcmVhdGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmgNCiBjcmVh dGUgbW9kZSAxMDA2NDQgUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NtYmlvc1Bs YXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmluZg0KDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0v SW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvRHhlTG9nb0xpYi9Mb2dvLmMgYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0xvZ28uYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjQ4YTcxOGE5MGQNCi0tLSAv ZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L0R4ZUxvZ29MaWIvTG9nby5jDQpAQCAtMCwwICsxLDY0NyBAQA0KKy8qKiBAZmlsZQ0KKyAgQkRT IExpYiBmdW5jdGlvbnMgd2hpY2ggY29udGFpbiBhbGwgdGhlIGNvZGUgdG8gY29ubmVjdCBjb25z b2xlIGRldmljZQ0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8UGlEeGUuaD4N CisjaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxlVGV4dE91dC5oPg0KKyNpbmNsdWRlIDxPZW1CYWRn aW5nLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0dyYXBoaWNzT3V0cHV0Lmg+DQorI2luY2x1ZGUg PFByb3RvY29sL1VnYURyYXcuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCisj aW5jbHVkZSA8TGlicmFyeS9EeGVTZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Bj ZExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJk L0JtcC5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9Cb290TG9nby5oPg0KKw0KKy8qKg0KKyAgQ29u dmVydCBhICouQk1QIGdyYXBoaWNzIGltYWdlIHRvIGEgR09QIGJsdCBidWZmZXIuIElmIGEgTlVM TCBCbHQgYnVmZmVyDQorICBpcyBwYXNzZWQgaW4gYSBHb3BCbHQgYnVmZmVyIHdpbGwgYmUgYWxs b2NhdGVkIGJ5IHRoaXMgcm91dGluZS4gSWYgYSBHb3BCbHQNCisgIGJ1ZmZlciBpcyBwYXNzZWQg aW4gaXQgd2lsbCBiZSB1c2VkIGlmIGl0IGlzIGJpZyBlbm91Z2guDQorDQorICBAcGFyYW0gIEJt cEltYWdlICAgICAgUG9pbnRlciB0byBCTVAgZmlsZQ0KKyAgQHBhcmFtICBCbXBJbWFnZVNpemUg IE51bWJlciBvZiBieXRlcyBpbiBCbXBJbWFnZQ0KKyAgQHBhcmFtICBHb3BCbHQgICAgICAgIEJ1 ZmZlciBjb250YWluaW5nIEdPUCB2ZXJzaW9uIG9mIEJtcEltYWdlLg0KKyAgQHBhcmFtICBHb3BC bHRTaXplICAgIFNpemUgb2YgR29wQmx0IGluIGJ5dGVzLg0KKyAgQHBhcmFtICBQaXhlbEhlaWdo dCAgIEhlaWdodCBvZiBHb3BCbHQvQm1wSW1hZ2UgaW4gcGl4ZWxzDQorICBAcGFyYW0gIFBpeGVs V2lkdGggICAgV2lkdGggb2YgR29wQmx0L0JtcEltYWdlIGluIHBpeGVscw0KKw0KKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgR29wQmx0IGFuZCBHb3BCbHRTaXplIGFyZSByZXR1cm5l ZC4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIEJtcEltYWdlIGlzIG5vdCBhIHZh bGlkICouQk1QIGltYWdlDQorICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgcGFz c2VkIGluIEdvcEJsdCBidWZmZXIgaXMgbm90IGJpZyBlbm91Z2guDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHb3BCbHRTaXplIHdpbGwgY29udGFpbiB0aGUgcmVxdWlyZWQgc2l6 ZS4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIE5vIGVub3VnaCBidWZmZXIgdG8g YWxsb2NhdGUuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0NvbnZlcnRCbXBUb0dvcEJsdCAoDQor ICBJTiAgICAgVk9JRCAgICAgICpCbXBJbWFnZSwNCisgIElOICAgICBVSU5UTiAgICAgQm1wSW1h Z2VTaXplLA0KKyAgSU4gT1VUIFZPSUQgICAgICAqKkdvcEJsdCwNCisgIElOIE9VVCBVSU5UTiAg ICAgKkdvcEJsdFNpemUsDQorICAgICBPVVQgVUlOVE4gICAgICpQaXhlbEhlaWdodCwNCisgICAg IE9VVCBVSU5UTiAgICAgKlBpeGVsV2lkdGgNCisgICkNCit7DQorICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgICAqSW1hZ2U7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAq SW1hZ2VIZWFkZXI7DQorICBCTVBfSU1BR0VfSEVBREVSICAgICAgICAgICAgICAqQm1wSGVhZGVy Ow0KKyAgQk1QX0NPTE9SX01BUCAgICAgICAgICAgICAgICAgKkJtcENvbG9yTWFwOw0KKyAgRUZJ X0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUwgKkJsdEJ1ZmZlcjsNCisgIEVGSV9HUkFQSElDU19P VVRQVVRfQkxUX1BJWEVMICpCbHQ7DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBC bHRCdWZmZXJTaXplOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQor ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBIZWlnaHQ7DQorICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICBXaWR0aDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IEltYWdlSW5kZXg7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6ZVBl ckxpbmU7DQorICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBJc0FsbG9jYXRlZDsNCisg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yTWFwTnVtOw0KKw0KKyAgaWYgKHNp emVvZiAoQk1QX0lNQUdFX0hFQURFUikgPiBCbXBJbWFnZVNpemUpIHsNCisgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIEJtcEhlYWRlciA9IChCTVBfSU1BR0Vf SEVBREVSICopIEJtcEltYWdlOw0KKw0KKyAgaWYgKEJtcEhlYWRlci0+Q2hhckIgIT0gJ0InIHx8 IEJtcEhlYWRlci0+Q2hhck0gIT0gJ00nKSB7DQorICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQorICB9DQorDQorICAvLw0KKyAgLy8gRG9lc24ndCBzdXBwb3J0IGNvbXByZXNzLg0KKyAgLy8N CisgIGlmIChCbXBIZWFkZXItPkNvbXByZXNzaW9uVHlwZSAhPSAwKSB7DQorICAgIHJldHVybiBF RklfVU5TVVBQT1JURUQ7DQorICB9DQorDQorICAvLw0KKyAgLy8gT25seSBzdXBwb3J0IEJJVE1B UElORk9IRUFERVIgZm9ybWF0Lg0KKyAgLy8gQklUTUFQRklMRUhFQURFUiArIEJJVE1BUElORk9I RUFERVIgPSBCTVBfSU1BR0VfSEVBREVSDQorICAvLw0KKyAgaWYgKEJtcEhlYWRlci0+SGVhZGVy U2l6ZSAhPSBzaXplb2YgKEJNUF9JTUFHRV9IRUFERVIpIC0gT0ZGU0VUX09GKEJNUF9JTUFHRV9I RUFERVIsIEhlYWRlclNpemUpKSB7DQorICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICB9 DQorDQorICAvLw0KKyAgLy8gVGhlIGRhdGEgc2l6ZSBpbiBlYWNoIGxpbmUgbXVzdCBiZSA0IGJ5 dGUgYWxpZ25tZW50Lg0KKyAgLy8NCisgIERhdGFTaXplUGVyTGluZSA9ICgoQm1wSGVhZGVyLT5Q aXhlbFdpZHRoICogQm1wSGVhZGVyLT5CaXRQZXJQaXhlbCArIDMxKSA+PiAzKSAmICh+MHgzKTsN CisgIEJsdEJ1ZmZlclNpemUgPSBNdWx0VTY0eDMyIChEYXRhU2l6ZVBlckxpbmUsIEJtcEhlYWRl ci0+UGl4ZWxIZWlnaHQpOw0KKyAgaWYgKEJsdEJ1ZmZlclNpemUgPiAoVUlOVDMyKSB+MCkgew0K KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgaWYgKChCbXBI ZWFkZXItPlNpemUgIT0gQm1wSW1hZ2VTaXplKSB8fA0KKyAgICAgIChCbXBIZWFkZXItPlNpemUg PCBCbXBIZWFkZXItPkltYWdlT2Zmc2V0KSB8fA0KKyAgICAgIChCbXBIZWFkZXItPlNpemUgLSBC bXBIZWFkZXItPkltYWdlT2Zmc2V0ICE9ICBCbXBIZWFkZXItPlBpeGVsSGVpZ2h0ICogRGF0YVNp emVQZXJMaW5lKSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0K Kw0KKyAgLy8NCisgIC8vIENhbGN1bGF0ZSBDb2xvciBNYXAgb2Zmc2V0IGluIHRoZSBpbWFnZS4N CisgIC8vDQorICBJbWFnZSAgICAgICA9IEJtcEltYWdlOw0KKyAgQm1wQ29sb3JNYXAgPSAoQk1Q X0NPTE9SX01BUCAqKSAoSW1hZ2UgKyBzaXplb2YgKEJNUF9JTUFHRV9IRUFERVIpKTsNCisgIGlm IChCbXBIZWFkZXItPkltYWdlT2Zmc2V0IDwgc2l6ZW9mIChCTVBfSU1BR0VfSEVBREVSKSkgew0K KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgaWYgKEJtcEhl YWRlci0+SW1hZ2VPZmZzZXQgPiBzaXplb2YgKEJNUF9JTUFHRV9IRUFERVIpKSB7DQorICAgIHN3 aXRjaCAoQm1wSGVhZGVyLT5CaXRQZXJQaXhlbCkgew0KKyAgICAgIGNhc2UgMToNCisgICAgICAg IENvbG9yTWFwTnVtID0gMjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgNDoNCisgICAg ICAgIENvbG9yTWFwTnVtID0gMTY7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIDg6DQor ICAgICAgICBDb2xvck1hcE51bSA9IDI1NjsNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGRlZmF1 bHQ6DQorICAgICAgICBDb2xvck1hcE51bSA9IDA7DQorICAgICAgICBicmVhazsNCisgICAgICB9 DQorICAgIC8vDQorICAgIC8vIEJNUCBmaWxlIG1heSBoYXMgcGFkZGluZyBkYXRhIGJldHdlZW4g dGhlIGJtcCBoZWFkZXIgc2VjdGlvbiBhbmQgdGhlIGJtcCBkYXRhIHNlY3Rpb24uDQorICAgIC8v DQorICAgIGlmIChCbXBIZWFkZXItPkltYWdlT2Zmc2V0IC0gc2l6ZW9mIChCTVBfSU1BR0VfSEVB REVSKSA8IHNpemVvZiAoQk1QX0NPTE9SX01BUCkgKiBDb2xvck1hcE51bSkgew0KKyAgICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgIH0NCisgIH0NCisNCisgIC8vDQorICAv LyBDYWxjdWxhdGUgZ3JhcGhpY3MgaW1hZ2UgZGF0YSBhZGRyZXNzIGluIHRoZSBpbWFnZQ0KKyAg Ly8NCisgIEltYWdlICAgICAgICAgPSAoKFVJTlQ4ICopIEJtcEltYWdlKSArIEJtcEhlYWRlci0+ SW1hZ2VPZmZzZXQ7DQorICBJbWFnZUhlYWRlciAgID0gSW1hZ2U7DQorDQorICAvLw0KKyAgLy8g Q2FsY3VsYXRlIHRoZSBCbHRCdWZmZXIgbmVlZGVkIHNpemUuDQorICAvLw0KKyAgQmx0QnVmZmVy U2l6ZSA9IE11bHRVNjR4MzIgKChVSU5UNjQpIEJtcEhlYWRlci0+UGl4ZWxXaWR0aCwgQm1wSGVh ZGVyLT5QaXhlbEhlaWdodCk7DQorICAvLw0KKyAgLy8gRW5zdXJlIHRoZSBCbHRCdWZmZXJTaXpl ICogc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkgZG9lc24ndCBvdmVyZmxv dw0KKyAgLy8NCisgIGlmIChCbHRCdWZmZXJTaXplID4gRGl2VTY0eDMyICgoVUlOVE4pIH4wLCBz aXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKSkpIHsNCisgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCisgIH0NCisgIEJsdEJ1ZmZlclNpemUgPSBNdWx0VTY0eDMyIChCbHRC dWZmZXJTaXplLCBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKSk7DQorDQor ICBJc0FsbG9jYXRlZCAgID0gRkFMU0U7DQorICBpZiAoKkdvcEJsdCA9PSBOVUxMKSB7DQorICAg IC8vDQorICAgIC8vIEdvcEJsdCBpcyBub3QgYWxsb2NhdGVkIGJ5IGNhbGxlci4NCisgICAgLy8N CisgICAgKkdvcEJsdFNpemUgPSAoVUlOVE4pIEJsdEJ1ZmZlclNpemU7DQorICAgICpHb3BCbHQg ICAgID0gQWxsb2NhdGVQb29sICgqR29wQmx0U2l6ZSk7DQorICAgIElzQWxsb2NhdGVkID0gVFJV RTsNCisgICAgaWYgKCpHb3BCbHQgPT0gTlVMTCkgew0KKyAgICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCisgICAgfQ0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gR29wQmx0 IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBjYWxsZXIuDQorICAgIC8vDQorICAgIGlmICgqR29wQmx0 U2l6ZSA8IChVSU5UTikgQmx0QnVmZmVyU2l6ZSkgew0KKyAgICAgICpHb3BCbHRTaXplID0gKFVJ TlROKSBCbHRCdWZmZXJTaXplOw0KKyAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsN CisgICAgfQ0KKyAgfQ0KKw0KKyAgKlBpeGVsV2lkdGggICA9IEJtcEhlYWRlci0+UGl4ZWxXaWR0 aDsNCisgICpQaXhlbEhlaWdodCAgPSBCbXBIZWFkZXItPlBpeGVsSGVpZ2h0Ow0KKw0KKyAgLy8N CisgIC8vIENvbnZlcnQgaW1hZ2UgZnJvbSBCTVAgdG8gQmx0IGJ1ZmZlciBmb3JtYXQNCisgIC8v DQorICBCbHRCdWZmZXIgPSAqR29wQmx0Ow0KKyAgZm9yIChIZWlnaHQgPSAwOyBIZWlnaHQgPCBC bXBIZWFkZXItPlBpeGVsSGVpZ2h0OyBIZWlnaHQrKykgew0KKyAgICBCbHQgPSAmQmx0QnVmZmVy WyhCbXBIZWFkZXItPlBpeGVsSGVpZ2h0IC0gSGVpZ2h0IC0gMSkgKiBCbXBIZWFkZXItPlBpeGVs V2lkdGhdOw0KKyAgICBmb3IgKFdpZHRoID0gMDsgV2lkdGggPCBCbXBIZWFkZXItPlBpeGVsV2lk dGg7IFdpZHRoKyssIEltYWdlKyssIEJsdCsrKSB7DQorICAgICAgc3dpdGNoIChCbXBIZWFkZXIt PkJpdFBlclBpeGVsKSB7DQorICAgICAgY2FzZSAxOg0KKyAgICAgICAgLy8NCisgICAgICAgIC8v IENvbnZlcnQgMS1iaXQgKDIgY29sb3JzKSBCTVAgdG8gMjQtYml0IGNvbG9yDQorICAgICAgICAv Lw0KKyAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgOCAmJiBXaWR0aCA8IEJtcEhlYWRl ci0+UGl4ZWxXaWR0aDsgSW5kZXgrKykgew0KKyAgICAgICAgICBCbHQtPlJlZCAgICA9IEJtcENv bG9yTWFwWygoKkltYWdlKSA+PiAoNyAtIEluZGV4KSkgJiAweDFdLlJlZDsNCisgICAgICAgICAg Qmx0LT5HcmVlbiAgPSBCbXBDb2xvck1hcFsoKCpJbWFnZSkgPj4gKDcgLSBJbmRleCkpICYgMHgx XS5HcmVlbjsNCisgICAgICAgICAgQmx0LT5CbHVlICAgPSBCbXBDb2xvck1hcFsoKCpJbWFnZSkg Pj4gKDcgLSBJbmRleCkpICYgMHgxXS5CbHVlOw0KKyAgICAgICAgICBCbHQrKzsNCisgICAgICAg ICAgV2lkdGgrKzsNCisgICAgICAgIH0NCisNCisgICAgICAgIEJsdC0tOw0KKyAgICAgICAgV2lk dGgtLTsNCisgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgIGNhc2UgNDoNCisgICAgICAgIC8vDQor ICAgICAgICAvLyBDb252ZXJ0IDQtYml0ICgxNiBjb2xvcnMpIEJNUCBQYWxldHRlIHRvIDI0LWJp dCBjb2xvcg0KKyAgICAgICAgLy8NCisgICAgICAgIEluZGV4ICAgICAgID0gKCpJbWFnZSkgPj4g NDsNCisgICAgICAgIEJsdC0+UmVkICAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLlJlZDsNCisgICAg ICAgIEJsdC0+R3JlZW4gID0gQm1wQ29sb3JNYXBbSW5kZXhdLkdyZWVuOw0KKyAgICAgICAgQmx0 LT5CbHVlICAgPSBCbXBDb2xvck1hcFtJbmRleF0uQmx1ZTsNCisgICAgICAgIGlmIChXaWR0aCA8 IChCbXBIZWFkZXItPlBpeGVsV2lkdGggLSAxKSkgew0KKyAgICAgICAgICBCbHQrKzsNCisgICAg ICAgICAgV2lkdGgrKzsNCisgICAgICAgICAgSW5kZXggICAgICAgPSAoKkltYWdlKSAmIDB4MGY7 DQorICAgICAgICAgIEJsdC0+UmVkICAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLlJlZDsNCisgICAg ICAgICAgQmx0LT5HcmVlbiAgPSBCbXBDb2xvck1hcFtJbmRleF0uR3JlZW47DQorICAgICAgICAg IEJsdC0+Qmx1ZSAgID0gQm1wQ29sb3JNYXBbSW5kZXhdLkJsdWU7DQorICAgICAgICB9DQorICAg ICAgICBicmVhazsNCisNCisgICAgICBjYXNlIDg6DQorICAgICAgICAvLw0KKyAgICAgICAgLy8g Q29udmVydCA4LWJpdCAoMjU2IGNvbG9ycykgQk1QIFBhbGV0dGUgdG8gMjQtYml0IGNvbG9yDQor ICAgICAgICAvLw0KKyAgICAgICAgQmx0LT5SZWQgICAgPSBCbXBDb2xvck1hcFsqSW1hZ2VdLlJl ZDsNCisgICAgICAgIEJsdC0+R3JlZW4gID0gQm1wQ29sb3JNYXBbKkltYWdlXS5HcmVlbjsNCisg ICAgICAgIEJsdC0+Qmx1ZSAgID0gQm1wQ29sb3JNYXBbKkltYWdlXS5CbHVlOw0KKyAgICAgICAg YnJlYWs7DQorDQorICAgICAgY2FzZSAyNDoNCisgICAgICAgIC8vDQorICAgICAgICAvLyBJdCBp cyAyNC1iaXQgQk1QLg0KKyAgICAgICAgLy8NCisgICAgICAgIEJsdC0+Qmx1ZSAgID0gKkltYWdl Kys7DQorICAgICAgICBCbHQtPkdyZWVuICA9ICpJbWFnZSsrOw0KKyAgICAgICAgQmx0LT5SZWQg ICAgPSAqSW1hZ2U7DQorICAgICAgICBicmVhazsNCisNCisgICAgICBkZWZhdWx0Og0KKyAgICAg ICAgLy8NCisgICAgICAgIC8vIE90aGVyIGJpdCBmb3JtYXQgQk1QIGlzIG5vdCBzdXBwb3J0ZWQu DQorICAgICAgICAvLw0KKyAgICAgICAgaWYgKElzQWxsb2NhdGVkKSB7DQorICAgICAgICAgIEZy ZWVQb29sICgqR29wQmx0KTsNCisgICAgICAgICAgKkdvcEJsdCA9IE5VTEw7DQorICAgICAgICB9 DQorICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICAgICAgYnJlYWs7DQorICAg ICAgfTsNCisNCisgICAgfQ0KKw0KKyAgICBJbWFnZUluZGV4ID0gKFVJTlROKSAoSW1hZ2UgLSBJ bWFnZUhlYWRlcik7DQorICAgIGlmICgoSW1hZ2VJbmRleCAlIDQpICE9IDApIHsNCisgICAgICAv Lw0KKyAgICAgIC8vIEJtcCBJbWFnZSBzdGFydHMgZWFjaCByb3cgb24gYSAzMi1iaXQgYm91bmRh cnkhDQorICAgICAgLy8NCisgICAgICBJbWFnZSA9IEltYWdlICsgKDQgLSAoSW1hZ2VJbmRleCAl IDQpKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisv KioNCisgIFVzZSBTeXN0ZW1UYWJsZSBDb25vdXQgdG8gc3RvcCB2aWRlbyBiYXNlZCBTaW1wbGUg VGV4dCBPdXQgY29uc29sZXMgZnJvbSBnb2luZw0KKyAgdG8gdGhlIHZpZGVvIGRldmljZS4gUHV0 IHVwIExvZ29GaWxlIG9uIGV2ZXJ5IHZpZGVvIGRldmljZSB0aGF0IGlzIGEgY29uc29sZS4NCisN CisgIEBwYXJhbVtpbl0gIExvZ29GaWxlICAgRmlsZSBuYW1lIG9mIGxvZ28gdG8gZGlzcGxheSBv biB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICBDb25zb2xlQ29udHJvbCBoYXMgYmVlbiBmbGlwcGVkIHRvIGdyYXBoaWNzIGFuZCBsb2dvIGRp c3BsYXllZC4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEIExvZ28gbm90IGZvdW5kDQorDQor KiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0VuYWJsZUJvb3RMb2dvICgNCisgIElOICBFRklf R1VJRCAgKkxvZ29GaWxlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgRUZJX09FTV9CQURHSU5HX1BST1RPQ09MICAgICAgKkJhZGdpbmc7DQor ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBTaXplT2ZYOw0KKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgU2l6ZU9mWTsNCisgIElOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgIERlc3RYOw0KKyAgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdFk7DQorICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2VEYXRhOw0KKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgQmx0U2l6ZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbmNl Ow0KKyAgRUZJX0JBREdJTkdfRk9STUFUICAgICAgICAgICAgRm9ybWF0Ow0KKyAgRUZJX0JBREdJ TkdfRElTUExBWV9BVFRSSUJVVEUgQXR0cmlidXRlOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgQ29vcmRpbmF0ZVg7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBD b29yZGluYXRlWTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodDsNCisg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoOw0KKyAgRUZJX0dSQVBISUNTX09V VFBVVF9CTFRfUElYRUwgKkJsdDsNCisgIEVGSV9VR0FfRFJBV19QUk9UT0NPTCAgICAgICAgICpV Z2FEcmF3Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JEZXB0aDsNCisg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hSYXRlOw0KKyAgRUZJX0dSQVBI SUNTX09VVFBVVF9QUk9UT0NPTCAgKkdyYXBoaWNzT3V0cHV0Ow0KKyAgRUZJX0JPT1RfTE9HT19Q Uk9UT0NPTCAgICAgICAgKkJvb3RMb2dvOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgTnVtYmVyT2ZMb2dvczsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMICpMb2dv Qmx0Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RYOw0KKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgTG9nb0Rlc3RZOw0KKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgTG9nb0hlaWdodDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgIExvZ29XaWR0aDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIE5ld0Rlc3RY Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgTmV3RGVzdFk7DQorICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICBOZXdIZWlnaHQ7DQorICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICBOZXdXaWR0aDsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlclNpemU7DQorDQorICBVZ2FEcmF3ID0gTlVMTDsNCisgIC8vDQorICAvLyBUcnkgdG8gb3Bl biBHT1AgZmlyc3QNCisgIC8vDQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChnU1Qt PkNvbnNvbGVPdXRIYW5kbGUsICZnRWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQsIChWT0lE ICoqKSAmR3JhcGhpY3NPdXRwdXQpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiBGZWF0 dXJlUGNkR2V0IChQY2RVZ2FDb25zdW1lU3VwcG9ydCkpIHsNCisgICAgR3JhcGhpY3NPdXRwdXQg PSBOVUxMOw0KKyAgICAvLw0KKyAgICAvLyBPcGVuIEdPUCBmYWlsZWQsIHRyeSB0byBvcGVuIFVH QQ0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChnU1QtPkNvbnNv bGVPdXRIYW5kbGUsICZnRWZpVWdhRHJhd1Byb3RvY29sR3VpZCwgKFZPSUQgKiopICZVZ2FEcmF3 KTsNCisgIH0NCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEVGSV9V TlNVUFBPUlRFRDsNCisgIH0NCisNCisgIC8vDQorICAvLyBUcnkgdG8gb3BlbiBCb290IExvZ28g UHJvdG9jb2wuDQorICAvLw0KKyAgQm9vdExvZ28gPSBOVUxMOw0KKyAgZ0JTLT5Mb2NhdGVQcm90 b2NvbCAoJmdFZmlCb290TG9nb1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopICZCb290TG9n byk7DQorDQorICAvLw0KKyAgLy8gRXJhc2UgQ3Vyc29yIGZyb20gc2NyZWVuDQorICAvLw0KKyAg Z1NULT5Db25PdXQtPkVuYWJsZUN1cnNvciAoZ1NULT5Db25PdXQsIEZBTFNFKTsNCisNCisgIEJh ZGdpbmcgPSBOVUxMOw0KKyAgU3RhdHVzICA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpT2Vt QmFkZ2luZ1Byb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopICZCYWRnaW5nKTsNCisNCisgIGlm IChHcmFwaGljc091dHB1dCAhPSBOVUxMKSB7DQorICAgIFNpemVPZlggPSBHcmFwaGljc091dHB1 dC0+TW9kZS0+SW5mby0+SG9yaXpvbnRhbFJlc29sdXRpb247DQorICAgIFNpemVPZlkgPSBHcmFw aGljc091dHB1dC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uOw0KKw0KKyAgfSBlbHNl IGlmIChVZ2FEcmF3ICE9IE5VTEwgJiYgRmVhdHVyZVBjZEdldCAoUGNkVWdhQ29uc3VtZVN1cHBv cnQpKSB7DQorICAgIFN0YXR1cyA9IFVnYURyYXctPkdldE1vZGUgKFVnYURyYXcsICZTaXplT2ZY LCAmU2l6ZU9mWSwgJkNvbG9yRGVwdGgsICZSZWZyZXNoUmF0ZSk7DQorICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICB9DQor ICB9IGVsc2Ugew0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0KKw0KKyAgQmx0 ID0gTlVMTDsNCisgIE51bWJlck9mTG9nb3MgPSAwOw0KKyAgTG9nb0Rlc3RYID0gMDsNCisgIExv Z29EZXN0WSA9IDA7DQorICBMb2dvSGVpZ2h0ID0gMDsNCisgIExvZ29XaWR0aCA9IDA7DQorICBO ZXdEZXN0WCA9IDA7DQorICBOZXdEZXN0WSA9IDA7DQorICBOZXdIZWlnaHQgPSAwOw0KKyAgTmV3 V2lkdGggPSAwOw0KKyAgSW5zdGFuY2UgPSAwOw0KKyAgd2hpbGUgKDEpIHsNCisgICAgSW1hZ2VE YXRhID0gTlVMTDsNCisgICAgSW1hZ2VTaXplID0gMDsNCisNCisgICAgaWYgKEJhZGdpbmcgIT0g TlVMTCkgew0KKyAgICAgIC8vDQorICAgICAgLy8gR2V0IGltYWdlIGZyb20gT0VNQmFkZ2luZyBw cm90b2NvbC4NCisgICAgICAvLw0KKyAgICAgIFN0YXR1cyA9IEJhZGdpbmctPkdldEltYWdlICgN CisgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZGdpbmcsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAmSW5zdGFuY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmRm9ybWF0LA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlRGF0YSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICZJbWFnZVNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmQXR0cmli dXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvb3JkaW5hdGVYLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgJkNvb3JkaW5hdGVZDQorICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgIGdvdG8gRG9u ZTsNCisgICAgICB9DQorDQorICAgIH0gZWxzZSB7DQorICAgICAgLy8NCisgICAgICAvLyBHZXQg dGhlIHNwZWNpZmllZCBpbWFnZSBmcm9tIEZWLg0KKyAgICAgIC8vDQorICAgICAgU3RhdHVzID0g R2V0U2VjdGlvbkZyb21BbnlGdiAoTG9nb0ZpbGUsIEVGSV9TRUNUSU9OX1JBVywgMCwgKFZPSUQg KiopICZJbWFnZURhdGEsICZJbWFnZVNpemUpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICAgICAgfQ0KKw0KKyAg ICAgIENvb3JkaW5hdGVYID0gMDsNCisgICAgICBDb29yZGluYXRlWSA9IDA7DQorICAgICAgQXR0 cmlidXRlICAgPSBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlcjsNCisgICAgfQ0KKw0K KyAgICBpZiAoQmx0ICE9IE5VTEwpIHsNCisgICAgICBGcmVlUG9vbCAoQmx0KTsNCisgICAgfQ0K Kw0KKyAgICAvLw0KKyAgICAvLyBUcnkgQk1QIGRlY29kZXINCisgICAgLy8NCisgICAgQmx0ID0g TlVMTDsNCisgICAgU3RhdHVzID0gQ29udmVydEJtcFRvR29wQmx0ICgNCisgICAgICAgICAgICAg IEltYWdlRGF0YSwNCisgICAgICAgICAgICAgIEltYWdlU2l6ZSwNCisgICAgICAgICAgICAgIChW T0lEICoqKSAmQmx0LA0KKyAgICAgICAgICAgICAgJkJsdFNpemUsDQorICAgICAgICAgICAgICAm SGVpZ2h0LA0KKyAgICAgICAgICAgICAgJldpZHRoDQorICAgICAgICAgICAgICApOw0KKw0KKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgRnJlZVBvb2wgKEltYWdlRGF0YSk7 DQorDQorICAgICAgaWYgKEJhZGdpbmcgPT0gTlVMTCkgew0KKyAgICAgICAgcmV0dXJuIFN0YXR1 czsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgY29udGludWU7DQorICAgICAgfQ0KKyAgICB9 DQorDQorICAgIC8vDQorICAgIC8vIENhbGN1bGF0ZSB0aGUgZGlzcGxheSBwb3NpdGlvbiBhY2Nv cmRpbmcgdG8gQXR0cmlidXRlLg0KKyAgICAvLw0KKyAgICBzd2l0Y2ggKEF0dHJpYnV0ZSkgew0K KyAgICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlTGVmdFRvcDoNCisgICAgICBEZXN0 WCA9IENvb3JkaW5hdGVYOw0KKyAgICAgIERlc3RZID0gQ29vcmRpbmF0ZVk7DQorICAgICAgYnJl YWs7DQorDQorICAgIGNhc2UgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJUb3A6DQor ICAgICAgRGVzdFggPSAoU2l6ZU9mWCAtIFdpZHRoKSAvIDI7DQorICAgICAgRGVzdFkgPSBDb29y ZGluYXRlWTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBFZmlCYWRnaW5nRGlzcGxheUF0 dHJpYnV0ZVJpZ2h0VG9wOg0KKyAgICAgIERlc3RYID0gKFNpemVPZlggLSBXaWR0aCAtIENvb3Jk aW5hdGVYKTsNCisgICAgICBEZXN0WSA9IENvb3JkaW5hdGVZOzsNCisgICAgICBicmVhazsNCisN CisgICAgY2FzZSBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlclJpZ2h0Og0KKyAgICAg IERlc3RYID0gKFNpemVPZlggLSBXaWR0aCAtIENvb3JkaW5hdGVYKTsNCisgICAgICBEZXN0WSA9 IChTaXplT2ZZIC0gSGVpZ2h0KSAvIDI7DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRWZp QmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVSaWdodEJvdHRvbToNCisgICAgICBEZXN0WCA9IChTaXpl T2ZYIC0gV2lkdGggLSBDb29yZGluYXRlWCk7DQorICAgICAgRGVzdFkgPSAoU2l6ZU9mWSAtIEhl aWdodCAtIENvb3JkaW5hdGVZKTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBFZmlCYWRn aW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlckJvdHRvbToNCisgICAgICBEZXN0WCA9IChTaXplT2ZY IC0gV2lkdGgpIC8gMjsNCisgICAgICBEZXN0WSA9IChTaXplT2ZZIC0gSGVpZ2h0IC0gQ29vcmRp bmF0ZVkpOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0 cmlidXRlTGVmdEJvdHRvbToNCisgICAgICBEZXN0WCA9IENvb3JkaW5hdGVYOw0KKyAgICAgIERl c3RZID0gKFNpemVPZlkgLSBIZWlnaHQgLSBDb29yZGluYXRlWSk7DQorICAgICAgYnJlYWs7DQor DQorICAgIGNhc2UgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJMZWZ0Og0KKyAgICAg IERlc3RYID0gQ29vcmRpbmF0ZVg7DQorICAgICAgRGVzdFkgPSAoU2l6ZU9mWSAtIEhlaWdodCkg LyAyOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmli dXRlQ2VudGVyOg0KKyAgICAgIERlc3RYID0gKFNpemVPZlggLSBXaWR0aCkgLyAyOw0KKyAgICAg IERlc3RZID0gKFNpemVPZlkgLSBIZWlnaHQpIC8gMjsNCisgICAgICBicmVhazsNCisNCisgICAg ZGVmYXVsdDoNCisgICAgICBEZXN0WCA9IENvb3JkaW5hdGVYOw0KKyAgICAgIERlc3RZID0gQ29v cmRpbmF0ZVk7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgaWYgKChEZXN0WCA+PSAw KSAmJiAoRGVzdFkgPj0gMCkpIHsNCisgICAgICBpZiAoR3JhcGhpY3NPdXRwdXQgIT0gTlVMTCkg ew0KKyAgICAgICAgU3RhdHVzID0gR3JhcGhpY3NPdXRwdXQtPkJsdCAoDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyYXBoaWNzT3V0cHV0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCbHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaUJsdEJ1ZmZlclRvVmlk ZW8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgRGVzdFgs DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgRGVzdFksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFdpZHRoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBI ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRoICogc2l6ZW9mIChFRklf R1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCisgICAgICB9IGVsc2UgaWYgKFVnYURyYXcgIT0gTlVMTCAmJiBGZWF0dXJlUGNkR2V0IChQ Y2RVZ2FDb25zdW1lU3VwcG9ydCkpIHsNCisgICAgICAgIFN0YXR1cyA9IFVnYURyYXctPkJsdCAo DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVnYURyYXcsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChFRklfVUdBX1BJWEVMICopIEJsdCwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRWZpVWdhQmx0QnVmZmVyVG9WaWRlbywNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFVJTlROKSBEZXN0WCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFVJTlROKSBEZXN0WSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGgsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlaWdodCwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgV2lkdGggKiBzaXplb2YgKEVGSV9VR0FfUElYRUwpDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIFN0YXR1cyA9IEVGSV9V TlNVUFBPUlRFRDsNCisgICAgICB9DQorDQorICAgICAgLy8NCisgICAgICAvLyBSZXBvcnQgZGlz cGxheWVkIExvZ28gaW5mb3JtYXRpb24uDQorICAgICAgLy8NCisgICAgICBpZiAoIUVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgICAgTnVtYmVyT2ZMb2dvcysrOw0KKw0KKyAgICAgICAgaWYg KExvZ29XaWR0aCA9PSAwKSB7DQorICAgICAgICAgIC8vDQorICAgICAgICAgIC8vIFRoZSBmaXJz dCBMb2dvLg0KKyAgICAgICAgICAvLw0KKyAgICAgICAgICBMb2dvRGVzdFggPSAoVUlOVE4pIERl c3RYOw0KKyAgICAgICAgICBMb2dvRGVzdFkgPSAoVUlOVE4pIERlc3RZOw0KKyAgICAgICAgICBM b2dvV2lkdGggPSBXaWR0aDsNCisgICAgICAgICAgTG9nb0hlaWdodCA9IEhlaWdodDsNCisgICAg ICAgIH0gZWxzZSB7DQorICAgICAgICAgIC8vDQorICAgICAgICAgIC8vIE1lcmdlIG5ldyBsb2dv IHdpdGggb2xkIG9uZS4NCisgICAgICAgICAgLy8NCisgICAgICAgICAgTmV3RGVzdFggPSBNSU4g KChVSU5UTikgRGVzdFgsIExvZ29EZXN0WCk7DQorICAgICAgICAgIE5ld0Rlc3RZID0gTUlOICgo VUlOVE4pIERlc3RZLCBMb2dvRGVzdFkpOw0KKyAgICAgICAgICBOZXdXaWR0aCA9IE1BWCAoKFVJ TlROKSBEZXN0WCArIFdpZHRoLCBMb2dvRGVzdFggKyBMb2dvV2lkdGgpIC0gTmV3RGVzdFg7DQor ICAgICAgICAgIE5ld0hlaWdodCA9IE1BWCAoKFVJTlROKSBEZXN0WSArIEhlaWdodCwgTG9nb0Rl c3RZICsgTG9nb0hlaWdodCkgLSBOZXdEZXN0WTsNCisNCisgICAgICAgICAgTG9nb0Rlc3RYID0g TmV3RGVzdFg7DQorICAgICAgICAgIExvZ29EZXN0WSA9IE5ld0Rlc3RZOw0KKyAgICAgICAgICBM b2dvV2lkdGggPSBOZXdXaWR0aDsNCisgICAgICAgICAgTG9nb0hlaWdodCA9IE5ld0hlaWdodDsN CisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0NCisNCisgICAgRnJlZVBvb2wgKEltYWdlRGF0 YSk7DQorDQorICAgIGlmIChCYWRnaW5nID09IE5VTEwpIHsNCisgICAgICBicmVhazsNCisgICAg fQ0KKyAgfQ0KKw0KK0RvbmU6DQorICBpZiAoQm9vdExvZ28gPT0gTlVMTCB8fCBOdW1iZXJPZkxv Z29zID09IDApIHsNCisgICAgLy8NCisgICAgLy8gTm8gbG9nbyBkaXNwbGF5ZWQuDQorICAgIC8v DQorICAgIGlmIChCbHQgIT0gTlVMTCkgew0KKyAgICAgIEZyZWVQb29sIChCbHQpOw0KKyAgICB9 DQorDQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gQWR2ZXJ0aXNl IGRpc3BsYXllZCBMb2dvIGluZm9ybWF0aW9uLg0KKyAgLy8NCisgIGlmIChOdW1iZXJPZkxvZ29z ID09IDEpIHsNCisgICAgLy8NCisgICAgLy8gT25seSBvbmUgbG9nbyBkaXNwbGF5ZWQsIHVzZSBp dHMgQmx0IGJ1ZmZlciBkaXJlY3RseSBmb3IgQm9vdExvZ28gcHJvdG9jb2wuDQorICAgIC8vDQor ICAgIExvZ29CbHQgPSBCbHQ7DQorICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKyAgfSBlbHNl IHsNCisgICAgLy8NCisgICAgLy8gTW9yZSB0aGFuIG9uZSBMb2dvIGRpc3BsYXllZCwgZ2V0IG1l cmdlZCBCbHRCdWZmZXIgdXNpbmcgVmlkZW9Ub0J1ZmZlciBvcGVyYXRpb24uDQorICAgIC8vDQor ICAgIGlmIChCbHQgIT0gTlVMTCkgew0KKyAgICAgIEZyZWVQb29sIChCbHQpOw0KKyAgICB9DQor DQorICAgIC8vDQorICAgIC8vIEVuc3VyZSB0aGUgTG9nb0hlaWdodCAqIExvZ29XaWR0aCBkb2Vz bid0IG92ZXJmbG93DQorICAgIC8vDQorICAgIGlmIChMb2dvSGVpZ2h0ID4gRGl2VTY0eDY0UmVt YWluZGVyICgoVUlOVE4pIH4wLCBMb2dvV2lkdGgsIE5VTEwpKSB7DQorICAgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCisgICAgfQ0KKyAgICBCdWZmZXJTaXplID0gTXVsdFU2NHg2NCAoTG9n b1dpZHRoLCBMb2dvSGVpZ2h0KTsNCisNCisgICAgLy8NCisgICAgLy8gRW5zdXJlIHRoZSBCdWZm ZXJTaXplICogc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkgZG9lc24ndCBv dmVyZmxvdw0KKyAgICAvLw0KKyAgICBpZiAoQnVmZmVyU2l6ZSA+IERpdlU2NHgzMiAoKFVJTlRO KSB+MCwgc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCkpKSB7DQorICAgICAg cmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisgICAgfQ0KKw0KKyAgICBMb2dvQmx0ID0gQWxsb2Nh dGVaZXJvUG9vbCAoKFVJTlROKUJ1ZmZlclNpemUgKiBzaXplb2YgKEVGSV9HUkFQSElDU19PVVRQ VVRfQkxUX1BJWEVMKSk7DQorICAgIGlmIChMb2dvQmx0ID09IE5VTEwpIHsNCisgICAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIH0NCisNCisgICAgaWYgKEdyYXBoaWNzT3V0 cHV0ICE9IE5VTEwpIHsNCisgICAgICBTdGF0dXMgPSBHcmFwaGljc091dHB1dC0+Qmx0ICgNCisg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzT3V0cHV0LA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgTG9nb0JsdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaUJsdFZp ZGVvVG9CbHRCdWZmZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvRGVzdFgsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvRGVzdFksDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgIExvZ29XaWR0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ29I ZWlnaHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBMb2dvV2lkdGggKiBzaXplb2YgKEVG SV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCisgICAgfSBlbHNlIGlmIChVZ2FEcmF3ICE9IE5VTEwgJiYgRmVhdHVyZVBjZEdldCAoUGNk VWdhQ29uc3VtZVN1cHBvcnQpKSB7DQorICAgICAgU3RhdHVzID0gVWdhRHJhdy0+Qmx0ICgNCisg ICAgICAgICAgICAgICAgICAgICAgICAgIFVnYURyYXcsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAoRUZJX1VHQV9QSVhFTCAqKSBMb2dvQmx0LA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgRWZpVWdhVmlkZW9Ub0JsdEJ1ZmZlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIExv Z29EZXN0WCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ29EZXN0WSwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgTG9nb1dpZHRoLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgTG9nb0hlaWdodCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ29XaWR0aCAq IHNpemVvZiAoRUZJX1VHQV9QSVhFTCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQor ICAgIH0gZWxzZSB7DQorICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICB9DQor ICB9DQorDQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBCb290TG9nby0+U2V0 Qm9vdExvZ28gKEJvb3RMb2dvLCBMb2dvQmx0LCBMb2dvRGVzdFgsIExvZ29EZXN0WSwgTG9nb1dp ZHRoLCBMb2dvSGVpZ2h0KTsNCisgIH0NCisgIEZyZWVQb29sIChMb2dvQmx0KTsNCisNCisgIHJl dHVybiBTdGF0dXM7DQorfQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9MaW51eC5jIGIvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0xpbnV4LmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi42MzFiYjdlZTY5DQotLS0gL2Rldi9udWxsDQor KysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhM aWIvTGludXguYw0KQEAgLTAsMCArMSw2NjIgQEANCisvKiogQGZpbGUNCisgIENvcHlyaWdodCAo YykgMjAxMSAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxC Uj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQor KiovDQorDQorI2luY2x1ZGUgIkxvYWRMaW51eExpYi5oIg0KKw0KKw0KKy8qKg0KKyAgQSBzaW1w bGUgY2hlY2sgb2YgdGhlIGtlcm5lbCBzZXR1cCBpbWFnZQ0KKw0KKyAgQW4gYXNzdW1wdGlvbiBp cyBtYWRlIHRoYXQgdGhlIHNpemUgb2YgdGhlIGRhdGEgaXMgYXQgbGVhc3QgdGhlDQorICBzaXpl IG9mIHN0cnVjdCBib290X3BhcmFtcy4NCisNCisgIEBwYXJhbVtpbl0gICAgS2VybmVsU2V0dXAg LSBUaGUga2VybmVsIHNldHVwIGltYWdlDQorDQorICBAcmV0dmFsICAgIEVGSV9TVUNDRVNTIC0g VGhlIGtlcm5lbCBzZXR1cCBsb29rcyB2YWxpZCBhbmQgc3VwcG9ydGVkDQorICBAcmV0dmFsICAg IEVGSV9JTlZBTElEX1BBUkFNRVRFUiAtIEtlcm5lbFNldHVwIHdhcyBOVUxMDQorICBAcmV0dmFs ICAgIEVGSV9VTlNVUFBPUlRFRCAtIFRoZSBrZXJuZWwgc2V0dXAgaXMgbm90IHZhbGlkIG9yIHN1 cHBvcnRlZA0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitCYXNpY0tl cm5lbFNldHVwQ2hlY2sgKA0KKyAgSU4gVk9JRCAgICAgICAgKktlcm5lbFNldHVwDQorICApDQor ew0KKyAgcmV0dXJuIExvYWRMaW51eENoZWNrS2VybmVsU2V0dXAoS2VybmVsU2V0dXAsIHNpemVv ZiAoc3RydWN0IGJvb3RfcGFyYW1zKSk7DQorfQ0KKw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkN CitMb2FkTGludXhDaGVja0tlcm5lbFNldHVwICgNCisgIElOIFZPSUQgICAgICAgICpLZXJuZWxT ZXR1cCwNCisgIElOIFVJTlROICAgICAgIEtlcm5lbFNldHVwU2l6ZQ0KKyAgKQ0KK3sNCisgIHN0 cnVjdCBib290X3BhcmFtcyAgICAgICAgKkJwOw0KKw0KKyAgaWYgKEtlcm5lbFNldHVwID09IE5V TEwpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIGlm IChLZXJuZWxTZXR1cFNpemUgPCBzaXplb2YgKCpCcCkpIHsNCisgICAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCisgIH0NCisNCisgIEJwID0gKHN0cnVjdCBib290X3BhcmFtcyopIEtlcm5lbFNl dHVwOw0KKw0KKyAgaWYgKChCcC0+aGRyLnNpZ25hdHVyZSAhPSAweEFBNTUpIHx8IC8vIENoZWNr IGJvb3Qgc2VjdG9yIHNpZ25hdHVyZQ0KKyAgICAgIChCcC0+aGRyLmhlYWRlciAhPSBTRVRVUF9I RFIpIHx8DQorICAgICAgKEJwLT5oZHIudmVyc2lvbiA8IDB4MjA1KSB8fCAvLyBXZSBvbmx5IHN1 cHBvcnQgcmVsb2NhdGFibGUga2VybmVscw0KKyAgICAgICghQnAtPmhkci5yZWxvY2F0YWJsZV9r ZXJuZWwpDQorICAgICApIHsNCisgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCisgIH0gZWxz ZSB7DQorICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgIH0NCit9DQorDQorDQorVUlOVE4NCitF RklBUEkNCitMb2FkTGludXhHZXRLZXJuZWxTaXplICgNCisgIElOIFZPSUQgICAgICAgICpLZXJu ZWxTZXR1cCwNCisgIElOIFVJTlROICAgICAgIEtlcm5lbFNpemUNCisgICkNCit7DQorICBzdHJ1 Y3QgYm9vdF9wYXJhbXMgICAgICAgICpCcDsNCisNCisgIGlmIChFRklfRVJST1IgKEJhc2ljS2Vy bmVsU2V0dXBDaGVjayAoS2VybmVsU2V0dXApKSkgew0KKyAgICByZXR1cm4gMDsNCisgIH0NCisN CisgIEJwID0gKHN0cnVjdCBib290X3BhcmFtcyopIEtlcm5lbFNldHVwOw0KKw0KKyAgaWYgKEJw LT5oZHIudmVyc2lvbiA+IDB4MjBhKSB7DQorICAgIHJldHVybiBCcC0+aGRyLmluaXRfc2l6ZTsN CisgIH0gZWxzZSB7DQorICAgIC8vDQorICAgIC8vIEFkZCBleHRyYSBzaXplIGZvciBrZXJuZWwg ZGVjb21wcmVzc2lvbg0KKyAgICAvLw0KKyAgICByZXR1cm4gMyAqIEtlcm5lbFNpemU7DQorICB9 DQorfQ0KKw0KKw0KK1ZPSUQqDQorRUZJQVBJDQorTG9hZExpbnV4QWxsb2NhdGVLZXJuZWxTZXR1 cFBhZ2VzICgNCisgIElOIFVJTlROICAgICAgICAgICAgICAgICAgUGFnZXMNCisgICkNCit7DQor ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgQWRkcmVzczsNCisNCisgIEFkZHJlc3MgPSBCQVNFXzFHQjsNCisgIFN0YXR1cyA9 IGdCUy0+QWxsb2NhdGVQYWdlcyAoDQorICAgICAgICAgICAgICAgICAgQWxsb2NhdGVNYXhBZGRy ZXNzLA0KKyAgICAgICAgICAgICAgICAgIEVmaUxvYWRlckRhdGEsDQorICAgICAgICAgICAgICAg ICAgUGFnZXMsDQorICAgICAgICAgICAgICAgICAgJkFkZHJlc3MNCisgICAgICAgICAgICAgICAg ICApOw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIChWT0lEKiko VUlOVE4pIEFkZHJlc3M7DQorICB9IGVsc2Ugew0KKyAgICByZXR1cm4gTlVMTDsNCisgIH0NCit9 DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0xvYWRMaW51eEluaXRpYWxpemVLZXJuZWxTZXR1 cCAoDQorICBJTiBWT0lEICAgICAgICAqS2VybmVsU2V0dXANCisgICkNCit7DQorICBFRklfU1RB VFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAg U2V0dXBFbmQ7DQorICBzdHJ1Y3QgYm9vdF9wYXJhbXMgICAgICAgICpCcDsNCisNCisgIFN0YXR1 cyA9IEJhc2ljS2VybmVsU2V0dXBDaGVjayAoS2VybmVsU2V0dXApOw0KKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgQnAgPSAoc3Ry dWN0IGJvb3RfcGFyYW1zKikgS2VybmVsU2V0dXA7DQorDQorICBTZXR1cEVuZCA9IDB4MjAyICsg KEJwLT5oZHIuanVtcCAmIDB4ZmYpOw0KKw0KKyAgLy8NCisgIC8vIENsZWFyIGFsbCBidXQgdGhl IHNldHVwX2hlYWRlcg0KKyAgLy8NCisgIFplcm9NZW0gKEtlcm5lbFNldHVwLCAweDFmMSk7DQor ICBaZXJvTWVtICgoKFVJTlQ4ICopS2VybmVsU2V0dXApICsgU2V0dXBFbmQsIDQwOTYgLSBTZXR1 cEVuZCk7DQorICBERUJVRyAoKEVGSV9EX0lORk8sICJDbGVhcmVkIGtlcm5lbCBzZXR1cCAwLTB4 MWYxLCAweCVMeC0weDEwMDBcbiIsDQorICAgIChVSU5UNjQpU2V0dXBFbmQpKTsNCisNCisgIHJl dHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorVk9JRCoNCitFRklBUEkNCitMb2FkTGludXhBbGxv Y2F0ZUtlcm5lbFBhZ2VzICgNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgKktlcm5lbFNl dHVwLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICBQYWdlcw0KKyAgKQ0KK3sNCisgIEVG SV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICBLZXJuZWxBZGRyZXNzOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBMb29wOw0K KyAgc3RydWN0IGJvb3RfcGFyYW1zICAgICAgICAqQnA7DQorDQorICBpZiAoRUZJX0VSUk9SIChC YXNpY0tlcm5lbFNldHVwQ2hlY2sgKEtlcm5lbFNldHVwKSkpIHsNCisgICAgcmV0dXJuIE5VTEw7 DQorICB9DQorDQorICBCcCA9IChzdHJ1Y3QgYm9vdF9wYXJhbXMqKSBLZXJuZWxTZXR1cDsNCisN CisgIGZvciAoTG9vcCA9IDE7IExvb3AgPCA1MTI7IExvb3ArKykgew0KKyAgICBLZXJuZWxBZGRy ZXNzID0gTXVsdFU2NHgzMiAoDQorICAgICAgICAgICAgICAgICAgICAgIDIgKiBCcC0+aGRyLmtl cm5lbF9hbGlnbm1lbnQsDQorICAgICAgICAgICAgICAgICAgICAgIExvb3ANCisgICAgICAgICAg ICAgICAgICAgICAgKTsNCisgICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBhZ2VzICgNCisgICAg ICAgICAgICAgICAgICAgIEFsbG9jYXRlQWRkcmVzcywNCisgICAgICAgICAgICAgICAgICAgIEVm aUxvYWRlckRhdGEsDQorICAgICAgICAgICAgICAgICAgICBQYWdlcywNCisgICAgICAgICAgICAg ICAgICAgICZLZXJuZWxBZGRyZXNzDQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBpZiAo IUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiAoVk9JRCopKFVJTlROKSBLZXJu ZWxBZGRyZXNzOw0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4gTlVMTDsNCit9DQorDQorDQor Vk9JRCoNCitFRklBUEkNCitMb2FkTGludXhBbGxvY2F0ZUNvbW1hbmRMaW5lUGFnZXMgKA0KKyAg SU4gVUlOVE4gICAgICAgICAgICAgICAgICBQYWdlcw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICBBZGRy ZXNzOw0KKw0KKyAgQWRkcmVzcyA9IDB4YTAwMDA7DQorICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRl UGFnZXMgKA0KKyAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCisgICAgICAg ICAgICAgICAgICBFZmlMb2FkZXJEYXRhLA0KKyAgICAgICAgICAgICAgICAgIFBhZ2VzLA0KKyAg ICAgICAgICAgICAgICAgICZBZGRyZXNzDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiAoVk9JRCopKFVJTlROKSBBZGRyZXNz Ow0KKyAgfSBlbHNlIHsNCisgICAgcmV0dXJuIE5VTEw7DQorICB9DQorfQ0KKw0KKw0KK1ZPSUQq DQorRUZJQVBJDQorTG9hZExpbnV4QWxsb2NhdGVJbml0cmRQYWdlcyAoDQorICBJTiBWT0lEICAg ICAgICAgICAgICAgICAgICpLZXJuZWxTZXR1cCwNCisgIElOIFVJTlROICAgICAgICAgICAgICAg ICAgUGFnZXMNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsN CisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgQWRkcmVzczsNCisNCisgIHN0cnVjdCBib290 X3BhcmFtcyAgICAgICAgKkJwOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoQmFzaWNLZXJuZWxTZXR1 cENoZWNrIChLZXJuZWxTZXR1cCkpKSB7DQorICAgIHJldHVybiBOVUxMOw0KKyAgfQ0KKw0KKyAg QnAgPSAoc3RydWN0IGJvb3RfcGFyYW1zKikgS2VybmVsU2V0dXA7DQorDQorICBBZGRyZXNzID0g KEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikgQnAtPmhkci5yYW1kaXNrX21heDsNCisgIFN0 YXR1cyA9IGdCUy0+QWxsb2NhdGVQYWdlcyAoDQorICAgICAgICAgICAgICAgICAgQWxsb2NhdGVN YXhBZGRyZXNzLA0KKyAgICAgICAgICAgICAgICAgIEVmaUxvYWRlckRhdGEsDQorICAgICAgICAg ICAgICAgICAgUGFnZXMsDQorICAgICAgICAgICAgICAgICAgJkFkZHJlc3MNCisgICAgICAgICAg ICAgICAgICApOw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIChW T0lEKikoVUlOVE4pIEFkZHJlc3M7DQorICB9IGVsc2Ugew0KKyAgICByZXR1cm4gTlVMTDsNCisg IH0NCit9DQorDQorDQorU1RBVElDDQorVk9JRA0KK1NldHVwTGludXhNZW1tYXAgKA0KKyAgSU4g T1VUIHN0cnVjdCBib290X3BhcmFtcyAgICAgICAgKkJwDQorICApDQorew0KKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUbXBNZW1vcnlNYXBbMV07DQorICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTWFwS2V5Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaXB0b3JWZXJzaW9uOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1lbW9yeU1hcFNpemU7DQorICBFRklfTUVNT1JZX0RFU0NSSVBUT1Ig ICAgICAgICAgICAgICAgKk1lbW9yeU1hcDsNCisgIEVGSV9NRU1PUllfREVTQ1JJUFRPUiAgICAg ICAgICAgICAgICAqTWVtb3J5TWFwUHRyOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KKyAgc3RydWN0IGVmaV9pbmZvICAgICAgICAgICAgICAgICAgICAg ICpFZmk7DQorICBzdHJ1Y3QgZTgyMF9lbnRyeSAgICAgICAgICAgICAgICAgICAgKkxhc3RFODIw Ow0KKyAgc3RydWN0IGU4MjBfZW50cnkgICAgICAgICAgICAgICAgICAgICpFODIwOw0KKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEU4MjBFbnRyeUNvdW50Ow0KKyAgRUZJ X1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICAgICAgIExhc3RFbmRBZGRyOw0KKw0KKyAgLy8N CisgIC8vIEdldCBTeXN0ZW0gTWVtb3J5TWFwU2l6ZQ0KKyAgLy8NCisgIE1lbW9yeU1hcFNpemUg PSBzaXplb2YgKFRtcE1lbW9yeU1hcCk7DQorICBTdGF0dXMgPSBnQlMtPkdldE1lbW9yeU1hcCAo DQorICAgICAgICAgICAgICAgICAgJk1lbW9yeU1hcFNpemUsDQorICAgICAgICAgICAgICAgICAg KEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKVRtcE1lbW9yeU1hcCwNCisgICAgICAgICAgICAgICAg ICAmTWFwS2V5LA0KKyAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6ZSwNCisgICAgICAg ICAgICAgICAgICAmRGVzY3JpcHRvclZlcnNpb24NCisgICAgICAgICAgICAgICAgICApOw0KKyAg QVNTRVJUIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpOw0KKyAgLy8NCisgIC8vIEVu bGFyZ2Ugc3BhY2UgaGVyZSwgYmVjYXVzZSB3ZSB3aWxsIGFsbG9jYXRlIHBvb2wgbm93Lg0KKyAg Ly8NCisgIE1lbW9yeU1hcFNpemUgKz0gRUZJX1BBR0VfU0laRTsNCisgIFN0YXR1cyA9IGdCUy0+ QWxsb2NhdGVQb29sICgNCisgICAgICAgICAgICAgICAgICBFZmlMb2FkZXJEYXRhLA0KKyAgICAg ICAgICAgICAgICAgIE1lbW9yeU1hcFNpemUsDQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiop ICZNZW1vcnlNYXANCisgICAgICAgICAgICAgICAgICApOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAo U3RhdHVzKTsNCisNCisgIC8vDQorICAvLyBHZXQgU3lzdGVtIE1lbW9yeU1hcA0KKyAgLy8NCisg IFN0YXR1cyA9IGdCUy0+R2V0TWVtb3J5TWFwICgNCisgICAgICAgICAgICAgICAgICAmTWVtb3J5 TWFwU2l6ZSwNCisgICAgICAgICAgICAgICAgICBNZW1vcnlNYXAsDQorICAgICAgICAgICAgICAg ICAgJk1hcEtleSwNCisgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQorICAgICAg ICAgICAgICAgICAgJkRlc2NyaXB0b3JWZXJzaW9uDQorICAgICAgICAgICAgICAgICAgKTsNCisg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICBMYXN0RTgyMCA9IE5VTEw7DQorICBF ODIwID0gJkJwLT5lODIwX21hcFswXTsNCisgIEU4MjBFbnRyeUNvdW50ID0gMDsNCisgIExhc3RF bmRBZGRyID0gMDsNCisgIE1lbW9yeU1hcFB0ciA9IE1lbW9yeU1hcDsNCisgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IChNZW1vcnlNYXBTaXplIC8gRGVzY3JpcHRvclNpemUpOyBJbmRleCsrKSB7 DQorICAgIFVJTlROIEU4MjBUeXBlID0gMDsNCisNCisgICAgaWYgKE1lbW9yeU1hcC0+TnVtYmVy T2ZQYWdlcyA9PSAwKSB7DQorICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgc3dpdGNo KE1lbW9yeU1hcC0+VHlwZSkgew0KKyAgICBjYXNlIEVmaVJlc2VydmVkTWVtb3J5VHlwZToNCisg ICAgY2FzZSBFZmlSdW50aW1lU2VydmljZXNDb2RlOg0KKyAgICBjYXNlIEVmaVJ1bnRpbWVTZXJ2 aWNlc0RhdGE6DQorICAgIGNhc2UgRWZpTWVtb3J5TWFwcGVkSU86DQorICAgIGNhc2UgRWZpTWVt b3J5TWFwcGVkSU9Qb3J0U3BhY2U6DQorICAgIGNhc2UgRWZpUGFsQ29kZToNCisgICAgICBFODIw VHlwZSA9IEU4MjBfUkVTRVJWRUQ7DQorICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgRWZpVW51 c2FibGVNZW1vcnk6DQorICAgICAgRTgyMFR5cGUgPSBFODIwX1VOVVNBQkxFOw0KKyAgICAgIGJy ZWFrOw0KKw0KKyAgICBjYXNlIEVmaUFDUElSZWNsYWltTWVtb3J5Og0KKyAgICAgIEU4MjBUeXBl ID0gRTgyMF9BQ1BJOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEVmaUxvYWRlckNvZGU6 DQorICAgIGNhc2UgRWZpTG9hZGVyRGF0YToNCisgICAgY2FzZSBFZmlCb290U2VydmljZXNDb2Rl Og0KKyAgICBjYXNlIEVmaUJvb3RTZXJ2aWNlc0RhdGE6DQorICAgIGNhc2UgRWZpQ29udmVudGlv bmFsTWVtb3J5Og0KKyAgICAgIEU4MjBUeXBlID0gRTgyMF9SQU07DQorICAgICAgYnJlYWs7DQor DQorICAgIGNhc2UgRWZpQUNQSU1lbW9yeU5WUzoNCisgICAgICBFODIwVHlwZSA9IEU4MjBfTlZT Ow0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBkZWZhdWx0Og0KKyAgICAgIERFQlVHICgoDQorICAg ICAgICBFRklfRF9FUlJPUiwNCisgICAgICAgICJJbnZhbGlkIEVGSSBtZW1vcnkgZGVzY3JpcHRv ciB0eXBlICgweCV4KSFcbiIsDQorICAgICAgICBNZW1vcnlNYXAtPlR5cGUNCisgICAgICAgICkp Ow0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIGlmICgoTGFzdEU4MjAgIT0gTlVM TCkgJiYNCisgICAgICAgIChMYXN0RTgyMC0+dHlwZSA9PSAoVUlOVDMyKSBFODIwVHlwZSkgJiYN CisgICAgICAgIChNZW1vcnlNYXAtPlBoeXNpY2FsU3RhcnQgPT0gTGFzdEVuZEFkZHIpKSB7DQor ICAgICAgTGFzdEU4MjAtPnNpemUgKz0gRUZJX1BBR0VTX1RPX1NJWkUgKChVSU5UTikgTWVtb3J5 TWFwLT5OdW1iZXJPZlBhZ2VzKTsNCisgICAgICBMYXN0RW5kQWRkciArPSBFRklfUEFHRVNfVE9f U0laRSAoKFVJTlROKSBNZW1vcnlNYXAtPk51bWJlck9mUGFnZXMpOw0KKyAgICB9IGVsc2Ugew0K KyAgICAgIGlmIChFODIwRW50cnlDb3VudCA+PSAoc2l6ZW9mIChCcC0+ZTgyMF9tYXApIC8gc2l6 ZW9mIChCcC0+ZTgyMF9tYXBbMF0pKSkgew0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKyAg ICAgIEU4MjAtPnR5cGUgPSAoVUlOVDMyKSBFODIwVHlwZTsNCisgICAgICBFODIwLT5hZGRyID0g TWVtb3J5TWFwLT5QaHlzaWNhbFN0YXJ0Ow0KKyAgICAgIEU4MjAtPnNpemUgPSBFRklfUEFHRVNf VE9fU0laRSAoKFVJTlROKSBNZW1vcnlNYXAtPk51bWJlck9mUGFnZXMpOw0KKyAgICAgIExhc3RF ODIwID0gRTgyMDsNCisgICAgICBMYXN0RW5kQWRkciA9IEU4MjAtPmFkZHIgKyBFODIwLT5zaXpl Ow0KKyAgICAgIEU4MjArKzsNCisgICAgICBFODIwRW50cnlDb3VudCsrOw0KKyAgICB9DQorDQor ICAgIC8vDQorICAgIC8vIEdldCBuZXh0IGl0ZW0NCisgICAgLy8NCisgICAgTWVtb3J5TWFwID0g KEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKSgoVUlOVE4pTWVtb3J5TWFwICsgRGVzY3JpcHRvclNp emUpOw0KKyAgfQ0KKyAgQnAtPmU4MjBfZW50cmllcyA9IChVSU5UOCkgRTgyMEVudHJ5Q291bnQ7 DQorDQorICBFZmkgPSAmQnAtPmVmaV9pbmZvOw0KKyAgRWZpLT5lZmlfc3lzdGFiID0gKFVJTlQz MikoVUlOVE4pIGdTVDsNCisgIEVmaS0+ZWZpX21lbWRlc2Nfc2l6ZSA9IChVSU5UMzIpIERlc2Ny aXB0b3JTaXplOw0KKyAgRWZpLT5lZmlfbWVtZGVzY192ZXJzaW9uID0gRGVzY3JpcHRvclZlcnNp b247DQorICBFZmktPmVmaV9tZW1tYXAgPSAoVUlOVDMyKShVSU5UTikgTWVtb3J5TWFwUHRyOw0K KyAgRWZpLT5lZmlfbWVtbWFwX3NpemUgPSAoVUlOVDMyKSBNZW1vcnlNYXBTaXplOw0KKyNpZmRl ZiBNREVfQ1BVX0lBMzINCisgIEVmaS0+ZWZpX2xvYWRlcl9zaWduYXR1cmUgPSBTSUdOQVRVUkVf MzIgKCdFJywgJ0wnLCAnMycsICcyJyk7DQorI2Vsc2UNCisgIEVmaS0+ZWZpX3N5c3RhYl9oaSA9 IChVSU5UMzIpICgoKFVJTlQ2NCkoVUlOVE4pIGdTVCkgPj4gMzIpOw0KKyAgRWZpLT5lZmlfbWVt bWFwX2hpID0gKFVJTlQzMikgKCgoVUlOVDY0KShVSU5UTikgTWVtb3J5TWFwUHRyKSA+PiAzMik7 DQorICBFZmktPmVmaV9sb2FkZXJfc2lnbmF0dXJlID0gU0lHTkFUVVJFXzMyICgnRScsICdMJywg JzYnLCAnNCcpOw0KKyNlbmRpZg0KKw0KKyAgZ0JTLT5FeGl0Qm9vdFNlcnZpY2VzIChnSW1hZ2VI YW5kbGUsIE1hcEtleSk7DQorfQ0KKw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitMb2FkTGlu dXhTZXRDb21tYW5kTGluZSAoDQorICBJTiBPVVQgVk9JRCAgICAqS2VybmVsU2V0dXAsDQorICBJ TiBDSEFSOCAgICAgICAqQ29tbWFuZExpbmUNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAg ICAgICAgIFN0YXR1czsNCisgIHN0cnVjdCBib290X3BhcmFtcyAgICAgKkJwOw0KKw0KKyAgU3Rh dHVzID0gQmFzaWNLZXJuZWxTZXR1cENoZWNrIChLZXJuZWxTZXR1cCk7DQorICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBCcCA9IChz dHJ1Y3QgYm9vdF9wYXJhbXMqKSBLZXJuZWxTZXR1cDsNCisNCisgIEJwLT5oZHIuY21kX2xpbmVf cHRyID0gKFVJTlQzMikoVUlOVE4pIENvbW1hbmRMaW5lOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KK30NCisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorTG9hZExpbnV4U2V0SW5pdHJk ICgNCisgIElOIE9VVCBWT0lEICAgICpLZXJuZWxTZXR1cCwNCisgIElOIFZPSUQgICAgICAgICpJ bml0cmQsDQorICBJTiBVSU5UTiAgICAgICBJbml0cmRTaXplDQorICApDQorew0KKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICBTdGF0dXM7DQorICBzdHJ1Y3QgYm9vdF9wYXJhbXMgICAgICpCcDsN CisNCisgIFN0YXR1cyA9IEJhc2ljS2VybmVsU2V0dXBDaGVjayAoS2VybmVsU2V0dXApOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0K KyAgQnAgPSAoc3RydWN0IGJvb3RfcGFyYW1zKikgS2VybmVsU2V0dXA7DQorDQorICBCcC0+aGRy LnJhbWRpc2tfc3RhcnQgPSAoVUlOVDMyKShVSU5UTikgSW5pdHJkOw0KKyAgQnAtPmhkci5yYW1k aXNrX2xlbiA9IChVSU5UMzIpIEluaXRyZFNpemU7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQorfQ0KKw0KKw0KK1NUQVRJQyBWT0lEDQorRmluZEJpdHMgKA0KKyAgdW5zaWduZWQgbG9uZyBN YXNrLA0KKyAgVUlOVDggKlBvcywNCisgIFVJTlQ4ICpTaXplDQorICApDQorew0KKyAgVUlOVDgg Rmlyc3QsIExlbjsNCisNCisgIEZpcnN0ID0gMDsNCisgIExlbiA9IDA7DQorDQorICBpZiAoTWFz aykgew0KKyAgICB3aGlsZSAoIShNYXNrICYgMHgxKSkgew0KKyAgICAgIE1hc2sgPSBNYXNrID4+ IDE7DQorICAgICAgRmlyc3QrKzsNCisgICAgfQ0KKw0KKyAgICB3aGlsZSAoTWFzayAmIDB4MSkg ew0KKyAgICAgIE1hc2sgPSBNYXNrID4+IDE7DQorICAgICAgTGVuKys7DQorICAgIH0NCisgIH0N CisgICpQb3MgPSBGaXJzdDsNCisgICpTaXplID0gTGVuOw0KK30NCisNCisNCitTVEFUSUMNCitF RklfU1RBVFVTDQorU2V0dXBHcmFwaGljc0Zyb21Hb3AgKA0KKyAgc3RydWN0IHNjcmVlbl9pbmZv ICAgICAgICAgICAqU2ksDQorICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RPQ09MICpHb3ANCisg ICkNCit7DQorICBFRklfR1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JNQVRJT04gKkluZm87DQor ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQorDQorICBTdGF0dXMgPSBHb3At PlF1ZXJ5TW9kZShHb3AsIEdvcC0+TW9kZS0+TW9kZSwgJlNpemUsICZJbmZvKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIC8q IFdlIGZvdW5kIGEgR09QICovDQorDQorICAvKiBFRkkgZnJhbWVidWZmZXIgKi8NCisgIFNpLT5v cmlnX3ZpZGVvX2lzVkdBID0gMHg3MDsNCisNCisgIFNpLT5vcmlnX3ggPSAwOw0KKyAgU2ktPm9y aWdfeSA9IDA7DQorICBTaS0+b3JpZ192aWRlb19wYWdlID0gMDsNCisgIFNpLT5vcmlnX3ZpZGVv X21vZGUgPSAwOw0KKyAgU2ktPm9yaWdfdmlkZW9fY29scyA9IDA7DQorICBTaS0+b3JpZ192aWRl b19saW5lcyA9IDA7DQorICBTaS0+b3JpZ192aWRlb19lZ2FfYnggPSAwOw0KKyAgU2ktPm9yaWdf dmlkZW9fcG9pbnRzID0gMDsNCisNCisgIFNpLT5sZmJfYmFzZSA9IChVSU5UMzIpIEdvcC0+TW9k ZS0+RnJhbWVCdWZmZXJCYXNlOw0KKyAgU2ktPmxmYl9zaXplID0gKFVJTlQzMikgR29wLT5Nb2Rl LT5GcmFtZUJ1ZmZlclNpemU7DQorICBTaS0+bGZiX3dpZHRoID0gKFVJTlQxNikgSW5mby0+SG9y aXpvbnRhbFJlc29sdXRpb247DQorICBTaS0+bGZiX2hlaWdodCA9IChVSU5UMTYpIEluZm8tPlZl cnRpY2FsUmVzb2x1dGlvbjsNCisgIFNpLT5wYWdlcyA9IDE7DQorICBTaS0+dmVzYXBtX3NlZyA9 IDA7DQorICBTaS0+dmVzYXBtX29mZiA9IDA7DQorDQorICBpZiAoSW5mby0+UGl4ZWxGb3JtYXQg PT0gUGl4ZWxSZWRHcmVlbkJsdWVSZXNlcnZlZDhCaXRQZXJDb2xvcikgew0KKyAgICBTaS0+bGZi X2RlcHRoID0gMzI7DQorICAgIFNpLT5yZWRfc2l6ZSA9IDg7DQorICAgIFNpLT5yZWRfcG9zID0g MDsNCisgICAgU2ktPmdyZWVuX3NpemUgPSA4Ow0KKyAgICBTaS0+Z3JlZW5fcG9zID0gODsNCisg ICAgU2ktPmJsdWVfc2l6ZSA9IDg7DQorICAgIFNpLT5ibHVlX3BvcyA9IDE2Ow0KKyAgICBTaS0+ cnN2ZF9zaXplID0gODsNCisgICAgU2ktPnJzdmRfcG9zID0gMjQ7DQorICAgIFNpLT5sZmJfbGlu ZWxlbmd0aCA9IChVSU5UMTYpIChJbmZvLT5QaXhlbHNQZXJTY2FuTGluZSAqIDQpOw0KKw0KKyAg fSBlbHNlIGlmIChJbmZvLT5QaXhlbEZvcm1hdCA9PSBQaXhlbEJsdWVHcmVlblJlZFJlc2VydmVk OEJpdFBlckNvbG9yKSB7DQorICAgIFNpLT5sZmJfZGVwdGggPSAzMjsNCisgICAgU2ktPnJlZF9z aXplID0gODsNCisgICAgU2ktPnJlZF9wb3MgPSAxNjsNCisgICAgU2ktPmdyZWVuX3NpemUgPSA4 Ow0KKyAgICBTaS0+Z3JlZW5fcG9zID0gODsNCisgICAgU2ktPmJsdWVfc2l6ZSA9IDg7DQorICAg IFNpLT5ibHVlX3BvcyA9IDA7DQorICAgIFNpLT5yc3ZkX3NpemUgPSA4Ow0KKyAgICBTaS0+cnN2 ZF9wb3MgPSAyNDsNCisgICAgU2ktPmxmYl9saW5lbGVuZ3RoID0gKFVJTlQxNikgKEluZm8tPlBp eGVsc1BlclNjYW5MaW5lICogNCk7DQorICB9IGVsc2UgaWYgKEluZm8tPlBpeGVsRm9ybWF0ID09 IFBpeGVsQml0TWFzaykgew0KKyAgICBGaW5kQml0cyhJbmZvLT5QaXhlbEluZm9ybWF0aW9uLlJl ZE1hc2ssDQorICAgICAgICAmU2ktPnJlZF9wb3MsICZTaS0+cmVkX3NpemUpOw0KKyAgICBGaW5k Qml0cyhJbmZvLT5QaXhlbEluZm9ybWF0aW9uLkdyZWVuTWFzaywNCisgICAgICAgICZTaS0+Z3Jl ZW5fcG9zLCAmU2ktPmdyZWVuX3NpemUpOw0KKyAgICBGaW5kQml0cyhJbmZvLT5QaXhlbEluZm9y bWF0aW9uLkJsdWVNYXNrLA0KKyAgICAgICAgJlNpLT5ibHVlX3BvcywgJlNpLT5ibHVlX3NpemUp Ow0KKyAgICBGaW5kQml0cyhJbmZvLT5QaXhlbEluZm9ybWF0aW9uLlJlc2VydmVkTWFzaywNCisg ICAgICAgICZTaS0+cnN2ZF9wb3MsICZTaS0+cnN2ZF9zaXplKTsNCisgICAgU2ktPmxmYl9kZXB0 aCA9IFNpLT5yZWRfc2l6ZSArIFNpLT5ncmVlbl9zaXplICsNCisgICAgICBTaS0+Ymx1ZV9zaXpl ICsgU2ktPnJzdmRfc2l6ZTsNCisgICAgU2ktPmxmYl9saW5lbGVuZ3RoID0gKFVJTlQxNikgKChJ bmZvLT5QaXhlbHNQZXJTY2FuTGluZSAqIFNpLT5sZmJfZGVwdGgpIC8gOCk7DQorICB9IGVsc2Ug ew0KKyAgICBTaS0+bGZiX2RlcHRoID0gNDsNCisgICAgU2ktPnJlZF9zaXplID0gMDsNCisgICAg U2ktPnJlZF9wb3MgPSAwOw0KKyAgICBTaS0+Z3JlZW5fc2l6ZSA9IDA7DQorICAgIFNpLT5ncmVl bl9wb3MgPSAwOw0KKyAgICBTaS0+Ymx1ZV9zaXplID0gMDsNCisgICAgU2ktPmJsdWVfcG9zID0g MDsNCisgICAgU2ktPnJzdmRfc2l6ZSA9IDA7DQorICAgIFNpLT5yc3ZkX3BvcyA9IDA7DQorICAg IFNpLT5sZmJfbGluZWxlbmd0aCA9IFNpLT5sZmJfd2lkdGggLyAyOw0KKyAgfQ0KKw0KKyAgcmV0 dXJuIFN0YXR1czsNCit9DQorDQorDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK1NldHVwR3JhcGhp Y3MgKA0KKyAgSU4gT1VUIHN0cnVjdCBib290X3BhcmFtcyAqQnANCisgICkNCit7DQorICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCisgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlQ291bnQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9QUk9UT0NPTCAgICAqR29wOw0KKw0KKyAg WmVyb01lbSAoKFZPSUQqKSZCcC0+c2NyZWVuX2luZm8sIHNpemVvZihCcC0+c2NyZWVuX2luZm8p KTsNCisNCisgIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyICgNCisgICAgICAgICAg ICAgICAgICBCeVByb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpR3JhcGhpY3NPdXRw dXRQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAg ICAgICAmSGFuZGxlQ291bnQsDQorICAgICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KKyAg ICAgICAgICAgICAgICAgICk7DQorICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KKyAgICAgIFN0 YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgICAgICBIYW5k bGVCdWZmZXJbSW5kZXhdLA0KKyAgICAgICAgICAgICAgICAgICAgICAmZ0VmaUdyYXBoaWNzT3V0 cHV0UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgICAoVk9JRCopICZHb3ANCisg ICAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgICAgICBjb250aW51ZTsNCisgICAgICB9DQorDQorICAgICAgU3RhdHVzID0gU2V0dXBH cmFwaGljc0Zyb21Hb3AgKCZCcC0+c2NyZWVuX2luZm8sIEdvcCk7DQorICAgICAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KKyAg ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBGcmVl UG9vbCAoSGFuZGxlQnVmZmVyKTsNCisgIH0NCisNCisgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0K K30NCisNCisNCitTVEFUSUMNCitFRklfU1RBVFVTDQorU2V0dXBMaW51eEJvb3RQYXJhbXMgKA0K KyAgSU4gT1VUIHN0cnVjdCBib290X3BhcmFtcyAqQnANCisgICkNCit7DQorICBTZXR1cEdyYXBo aWNzIChCcCk7DQorDQorICBTZXR1cExpbnV4TWVtbWFwIChCcCk7DQorDQorICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorfQ0KKw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitMb2FkTGludXggKA0K KyAgSU4gVk9JRCAgICAgICpLZXJuZWwsDQorICBJTiBPVVQgVk9JRCAgKktlcm5lbFNldHVwDQor ICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQorICBzdHJ1Y3QgYm9v dF9wYXJhbXMgICpCcDsNCisNCisgIFN0YXR1cyA9IEJhc2ljS2VybmVsU2V0dXBDaGVjayAoS2Vy bmVsU2V0dXApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3Rh dHVzOw0KKyAgfQ0KKw0KKyAgQnAgPSAoc3RydWN0IGJvb3RfcGFyYW1zICopIEtlcm5lbFNldHVw Ow0KKw0KKyAgaWYgKEJwLT5oZHIudmVyc2lvbiA8IDB4MjA1IHx8ICFCcC0+aGRyLnJlbG9jYXRh YmxlX2tlcm5lbCkgew0KKyAgICAvLw0KKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgcmVsb2NhdGFi bGUga2VybmVscw0KKyAgICAvLw0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0K Kw0KKyAgSW5pdExpbnV4RGVzY3JpcHRvclRhYmxlcyAoKTsNCisNCisgIEJwLT5oZHIuY29kZTMy X3N0YXJ0ID0gKFVJTlQzMikoVUlOVE4pIEtlcm5lbDsNCisgIGlmIChCcC0+aGRyLnZlcnNpb24g Pj0gMHgyMGMgJiYgQnAtPmhkci5oYW5kb3Zlcl9vZmZzZXQgJiYNCisgICAgICAoQnAtPmhkci54 bG9hZGZsYWdzICYgKHNpemVvZiAoVUlOVE4pID09IDQgPyBCSVQyIDogQklUMykpKSB7DQorICAg IERFQlVHICgoRUZJX0RfSU5GTywgIkp1bXBpbmcgdG8ga2VybmVsIEVGSSBoYW5kb3ZlciBwb2lu dCBhdCBvZnMgJXhcbiIsIEJwLT5oZHIuaGFuZG92ZXJfb2Zmc2V0KSk7DQorDQorICAgIERpc2Fi bGVJbnRlcnJ1cHRzICgpOw0KKyAgICBKdW1wVG9VZWZpS2VybmVsICgoVk9JRCopIGdJbWFnZUhh bmRsZSwgKFZPSUQqKSBnU1QsIEtlcm5lbFNldHVwLCBLZXJuZWwpOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIE9sZCBrZXJuZWxzIHdpdGhvdXQgRUZJIGhhbmRvdmVyIHByb3RvY29sDQorICAvLw0K KyAgU2V0dXBMaW51eEJvb3RQYXJhbXMgKEtlcm5lbFNldHVwKTsNCisNCisgIERFQlVHICgoRUZJ X0RfSU5GTywgIkp1bXBpbmcgdG8ga2VybmVsXG4iKSk7DQorICBEaXNhYmxlSW50ZXJydXB0cyAo KTsNCisgIFNldExpbnV4RGVzY3JpcHRvclRhYmxlcyAoKTsNCisgIEp1bXBUb0tlcm5lbCAoS2Vy bmVsLCAoVk9JRCopIEtlcm5lbFNldHVwKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9 DQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJh cnkvTG9hZExpbnV4TGliL0xpbnV4R2R0LmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTGludXhHZHQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLmZkYTE4NWUzZDcNCi0tLSAvZGV2L251bGwNCisrKyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9MaW51 eEdkdC5jDQpAQCAtMCwwICsxLDE3NSBAQA0KKy8qKiBAZmlsZQ0KKyAgSW5pdGlhbGl6ZSBHRFQg Zm9yIExpbnV4Lg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSAiTG9hZExpbnV4 TGliLmgiDQorDQorDQorLy8NCisvLyBMb2NhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMNCisvLw0K Kw0KKyNwcmFnbWEgcGFjayAoMSkNCisNCisvLw0KKy8vIEdsb2JhbCBEZXNjcmlwdG9yIEVudHJ5 IHN0cnVjdHVyZXMNCisvLw0KKw0KK3R5cGVkZWYgc3RydWN0IF9HRFRfRU5UUlkgew0KKyAgVUlO VDE2IExpbWl0MTVfMDsNCisgIFVJTlQxNiBCYXNlMTVfMDsNCisgIFVJTlQ4ICBCYXNlMjNfMTY7 DQorICBVSU5UOCAgVHlwZTsNCisgIFVJTlQ4ICBMaW1pdDE5XzE2X2FuZF9mbGFnczsNCisgIFVJ TlQ4ICBCYXNlMzFfMjQ7DQorfSBHRFRfRU5UUlk7DQorDQordHlwZWRlZg0KK3N0cnVjdCBfR0RU X0VOVFJJRVMgew0KKyAgR0RUX0VOVFJZIE51bGw7DQorICBHRFRfRU5UUlkgTnVsbDI7DQorICBH RFRfRU5UUlkgTGluZWFyOw0KKyAgR0RUX0VOVFJZIExpbmVhckNvZGU7DQorICBHRFRfRU5UUlkg VGFza1NlZ21lbnQ7DQorICBHRFRfRU5UUlkgU3BhcmU0Ow0KKyAgR0RUX0VOVFJZIFNwYXJlNTsN Cit9IEdEVF9FTlRSSUVTOw0KKw0KKyNwcmFnbWEgcGFjayAoKQ0KKw0KK1NUQVRJQyBHRFRfRU5U UklFUyAqbUdkdCA9IE5VTEw7DQorDQorLy8NCisvLyBHbG9iYWwgZGVzY3JpcHRvciB0YWJsZSAo R0RUKSBUZW1wbGF0ZQ0KKy8vDQorU1RBVElDIEdEVF9FTlRSSUVTIEdkdFRlbXBsYXRlID0gew0K KyAgLy8NCisgIC8vIE51bGwNCisgIC8vDQorICB7DQorICAgIDB4MCwgICAgICAgICAgICAvLyBs aW1pdCAxNTowDQorICAgIDB4MCwgICAgICAgICAgICAvLyBiYXNlIDE1OjANCisgICAgMHgwLCAg ICAgICAgICAgIC8vIGJhc2UgMjM6MTYNCisgICAgMHgwLCAgICAgICAgICAgIC8vIHR5cGUNCisg ICAgMHgwLCAgICAgICAgICAgIC8vIGxpbWl0IDE5OjE2LCBmbGFncw0KKyAgICAweDAsICAgICAg ICAgICAgLy8gYmFzZSAzMToyNA0KKyAgfSwNCisgIC8vDQorICAvLyBOdWxsMg0KKyAgLy8NCisg IHsNCisgICAgMHgwLCAgICAgICAgICAgIC8vIGxpbWl0IDE1OjANCisgICAgMHgwLCAgICAgICAg ICAgIC8vIGJhc2UgMTU6MA0KKyAgICAweDAsICAgICAgICAgICAgLy8gYmFzZSAyMzoxNg0KKyAg ICAweDAsICAgICAgICAgICAgLy8gdHlwZQ0KKyAgICAweDAsICAgICAgICAgICAgLy8gbGltaXQg MTk6MTYsIGZsYWdzDQorICAgIDB4MCwgICAgICAgICAgICAvLyBiYXNlIDMxOjI0DQorICB9LA0K KyAgLy8NCisgIC8vIExpbmVhcg0KKyAgLy8NCisgIHsNCisgICAgMHgwRkZGRiwgICAgICAgIC8v IGxpbWl0IDB4RkZGRkYNCisgICAgMHgwLCAgICAgICAgICAgIC8vIGJhc2UgMA0KKyAgICAweDAs DQorICAgIDB4MDlBLCAgICAgICAgICAvLyBwcmVzZW50LCByaW5nIDAsIGRhdGEsIGV4cGFuZC11 cCwgd3JpdGFibGUNCisgICAgMHgwQ0YsICAgICAgICAgIC8vIHBhZ2UtZ3JhbnVsYXIsIDMyLWJp dA0KKyAgICAweDAsDQorICB9LA0KKyAgLy8NCisgIC8vIExpbmVhckNvZGUNCisgIC8vDQorICB7 DQorICAgIDB4MEZGRkYsICAgICAgICAvLyBsaW1pdCAweEZGRkZGDQorICAgIDB4MCwgICAgICAg ICAgICAvLyBiYXNlIDANCisgICAgMHgwLA0KKyAgICAweDA5MiwgICAgICAgICAgLy8gcHJlc2Vu dCwgcmluZyAwLCBkYXRhLCBleHBhbmQtdXAsIHdyaXRhYmxlDQorICAgIDB4MENGLCAgICAgICAg ICAvLyBwYWdlLWdyYW51bGFyLCAzMi1iaXQNCisgICAgMHgwLA0KKyAgfSwNCisgIC8vDQorICAv LyBUYXNrU2VnbWVudA0KKyAgLy8NCisgIHsNCisgICAgMHgwLCAgICAgICAgICAgIC8vIGxpbWl0 IDANCisgICAgMHgwLCAgICAgICAgICAgIC8vIGJhc2UgMA0KKyAgICAweDAsDQorICAgIDB4MDg5 LCAgICAgICAgICAvLyA/DQorICAgIDB4MDgwLCAgICAgICAgICAvLyA/DQorICAgIDB4MCwNCisg IH0sDQorICAvLw0KKyAgLy8gU3BhcmU0DQorICAvLw0KKyAgew0KKyAgICAweDAsICAgICAgICAg ICAgLy8gbGltaXQgMA0KKyAgICAweDAsICAgICAgICAgICAgLy8gYmFzZSAwDQorICAgIDB4MCwN CisgICAgMHgwLCAgICAgICAgICAgIC8vIHByZXNlbnQsIHJpbmcgMCwgZGF0YSwgZXhwYW5kLXVw LCB3cml0YWJsZQ0KKyAgICAweDAsICAgICAgICAgICAgLy8gcGFnZS1ncmFudWxhciwgMzItYml0 DQorICAgIDB4MCwNCisgIH0sDQorICAvLw0KKyAgLy8gU3BhcmU1DQorICAvLw0KKyAgew0KKyAg ICAweDAsICAgICAgICAgICAgLy8gbGltaXQgMA0KKyAgICAweDAsICAgICAgICAgICAgLy8gYmFz ZSAwDQorICAgIDB4MCwNCisgICAgMHgwLCAgICAgICAgICAgIC8vIHByZXNlbnQsIHJpbmcgMCwg ZGF0YSwgZXhwYW5kLXVwLCB3cml0YWJsZQ0KKyAgICAweDAsICAgICAgICAgICAgLy8gcGFnZS1n cmFudWxhciwgMzItYml0DQorICAgIDB4MCwNCisgIH0sDQorfTsNCisNCisvKioNCisgIEluaXRp YWxpemUgR2xvYmFsIERlc2NyaXB0b3IgVGFibGUuDQorDQorKiovDQorVk9JRA0KK0luaXRMaW51 eERlc2NyaXB0b3JUYWJsZXMgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIC8vDQorICAvLyBBbGxv Y2F0ZSBSdW50aW1lIERhdGEgZm9yIHRoZSBHRFQNCisgIC8vDQorICBtR2R0ID0gQWxsb2NhdGVS dW50aW1lUG9vbCAoc2l6ZW9mIChHZHRUZW1wbGF0ZSkgKyA4KTsNCisgIEFTU0VSVCAobUdkdCAh PSBOVUxMKTsNCisgIG1HZHQgPSBBTElHTl9QT0lOVEVSIChtR2R0LCA4KTsNCisNCisgIC8vDQor ICAvLyBJbml0aWFsaXplIGFsbCBHRFQgZW50cmllcw0KKyAgLy8NCisgIENvcHlNZW0gKG1HZHQs ICZHZHRUZW1wbGF0ZSwgc2l6ZW9mIChHZHRUZW1wbGF0ZSkpOw0KKw0KK30NCisNCisvKioNCisg IEluaXRpYWxpemUgR2xvYmFsIERlc2NyaXB0b3IgVGFibGUuDQorDQorKiovDQorVk9JRA0KK1Nl dExpbnV4RGVzY3JpcHRvclRhYmxlcyAoDQorICBWT0lEDQorICApDQorew0KKyAgSUEzMl9ERVND UklQVE9SIEdkdFB0cjsNCisgIElBMzJfREVTQ1JJUFRPUiBJZHRQdHI7DQorDQorICAvLw0KKyAg Ly8gV3JpdGUgR0RUIHJlZ2lzdGVyDQorICAvLw0KKyAgR2R0UHRyLkJhc2UgPSAoVUlOVDMyKShV SU5UTikoVk9JRCopIG1HZHQ7DQorICBHZHRQdHIuTGltaXQgPSAoVUlOVDE2KSAoc2l6ZW9mIChH ZHRUZW1wbGF0ZSkgLSAxKTsNCisgIEFzbVdyaXRlR2R0ciAoJkdkdFB0cik7DQorDQorICBJZHRQ dHIuQmFzZSA9IChVSU5UMzIpIDA7DQorICBJZHRQdHIuTGltaXQgPSAoVUlOVDE2KSAwOw0KKyAg QXNtV3JpdGVJZHRyICgmSWR0UHRyKTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9Gc0FjY2Vzcy5jIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9G c0FjY2Vzcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uM2Q5ODI5 MTQxMA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9Gc0FjY2Vzcy5jDQpAQCAtMCwwICsxLDUwNyBAQA0K Ky8qKiBAZmlsZQ0KKyAgRmlsZSBTeXN0ZW0gQWNjZXNzIGZvciBOdlZhcnNGaWxlTGliDQorDQor ICBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlICJOdlZhcnNGaWxlTGliLmgiDQorDQorI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVn TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKw0KKw0K Ky8qKg0KKyAgT3BlbiB0aGUgTnZWYXJzIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZw0KKw0K KyAgQHBhcmFtW2luXSAgRnNIYW5kbGUgLSBIYW5kbGUgZm9yIGEgZ0VmaVNpbXBsZUZpbGVTeXN0 ZW1Qcm90b2NvbEd1aWQgaW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gIFJlYWRpbmdGaWxlIC0gVFJV RTogb3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZy4gIEZBTFNFOiB3cml0aW5nDQorICBAcGFyYW1b b3V0XSBOdlZhcnNGaWxlIC0gSWYgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQsIHRoZW4gdGhpcyBp cyB1cGRhdGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgb3BlbmVkIE52 VmFycyBmaWxlLg0KKw0KKyAgQHJldHVybiAgICAgRUZJX1NVQ0NFU1MgaWYgdGhlIGZpbGUgd2Fz IG9wZW5lZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitHZXROdlZhcnNGaWxlICgNCisgIElOICBF RklfSEFORExFICAgICAgICAgICAgRnNIYW5kbGUsDQorICBJTiAgQk9PTEVBTiAgICAgICAgICAg ICAgIFJlYWRpbmdGaWxlLA0KKyAgT1VUIEVGSV9GSUxFX0hBTkRMRSAgICAgICAqTnZWYXJzRmls ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAgICAgICAqRnM7DQorICBF RklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIFJvb3Q7DQorDQorICAvLw0KKyAg Ly8gR2V0IHRoZSBGaWxlU3lzdGVtIHByb3RvY29sIG9uIHRoYXQgaGFuZGxlDQorICAvLw0KKyAg U3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgRnNIYW5k bGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlk LA0KKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZGcw0KKyAgICAgICAgICAgICAgICAgICk7 DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9 DQorDQorICAvLw0KKyAgLy8gR2V0IHRoZSB2b2x1bWUgKHRoZSByb290IGRpcmVjdG9yeSkNCisg IC8vDQorICBTdGF0dXMgPSBGcy0+T3BlblZvbHVtZSAoRnMsICZSb290KTsNCisgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIC8vDQor ICAvLyBBdHRlbXB0IHRvIG9wZW4gdGhlIE52VmFycyBmaWxlIGluIHRoZSByb290IGRpcmVjdG9y eQ0KKyAgLy8NCisgIFN0YXR1cyA9IFJvb3QtPk9wZW4gKA0KKyAgICAgICAgICAgICAgICAgICBS b290LA0KKyAgICAgICAgICAgICAgICAgICBOdlZhcnNGaWxlLA0KKyAgICAgICAgICAgICAgICAg ICBMIk52VmFycyIsDQorICAgICAgICAgICAgICAgICAgIFJlYWRpbmdGaWxlID8NCisgICAgICAg ICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgOg0KKyAgICAgICAgICAgICAgICAgICAg ICgNCisgICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfQ1JFQVRFIHwNCisgICAg ICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8DQorICAgICAgICAgICAgICAg ICAgICAgICBFRklfRklMRV9NT0RFX1dSSVRFDQorICAgICAgICAgICAgICAgICAgICAgKSwNCisg ICAgICAgICAgICAgICAgICAgMA0KKyAgICAgICAgICAgICAgICAgICApOw0KKw0KKyAgcmV0dXJu IFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBPcGVuIHRoZSBOdlZhcnMgZmlsZSBmb3IgcmVh ZGluZyBvciB3cml0aW5nDQorDQorICBAcGFyYW1baW5dICBGaWxlIC0gVGhlIGZpbGUgdG8gaW5z cGVjdA0KKyAgQHBhcmFtW291dF0gRXhpc3RzIC0gUmV0dXJucyB3aGV0aGVyIHRoZSBmaWxlIGV4 aXN0cw0KKyAgQHBhcmFtW291dF0gU2l6ZSAtIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbGUN CisgICAgICAgICAgICAgICAgICAgICAoMCBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCkNCisN CisqKi8NCitWT0lEDQorTnZWYXJzRmlsZVJlYWRDaGVja3VwICgNCisgIElOICBFRklfRklMRV9I QU5ETEUgICAgICAgIEZpbGUsDQorICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgICAqRXhpc3Rz LA0KKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgKlNpemUNCisgICkNCit7DQorICBFRklf RklMRV9JTkZPICAgICAgICAgICAgICAgKkZpbGVJbmZvOw0KKw0KKyAgKkV4aXN0cyA9IEZBTFNF Ow0KKyAgKlNpemUgPSAwOw0KKw0KKyAgRmlsZUluZm8gPSBGaWxlSGFuZGxlR2V0SW5mbyAoRmls ZSk7DQorICBpZiAoRmlsZUluZm8gPT0gTlVMTCkgew0KKyAgICByZXR1cm47DQorICB9DQorDQor ICBpZiAoKEZpbGVJbmZvLT5BdHRyaWJ1dGUgJiBFRklfRklMRV9ESVJFQ1RPUlkpICE9IDApIHsN CisgICAgRnJlZVBvb2wgKEZpbGVJbmZvKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgKkV4 aXN0cyA9IFRSVUU7DQorICAqU2l6ZSA9IChVSU5UTikgRmlsZUluZm8tPkZpbGVTaXplOw0KKw0K KyAgRnJlZVBvb2wgKEZpbGVJbmZvKTsNCit9DQorDQorDQorLyoqDQorICBPcGVuIHRoZSBOdlZh cnMgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nDQorDQorICBAcGFyYW1baW5dICBGaWxlIC0g VGhlIGZpbGUgdG8gaW5zcGVjdA0KKyAgQHBhcmFtW291dF0gRXhpc3RzIC0gUmV0dXJucyB3aGV0 aGVyIHRoZSBmaWxlIGV4aXN0cw0KKyAgQHBhcmFtW291dF0gU2l6ZSAtIFJldHVybnMgdGhlIHNp emUgb2YgdGhlIGZpbGUNCisgICAgICAgICAgICAgICAgICAgICAoMCBpZiB0aGUgZmlsZSBkb2Vz IG5vdCBleGlzdCkNCisNCisqKi8NCitFRklfU1RBVFVTDQorRmlsZUhhbmRsZUVtcHR5ICgNCisg IElOICBFRklfRklMRV9IQU5ETEUgICAgICAgIEZpbGUNCisgICkNCit7DQorICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX0ZJTEVfSU5GTyAgICAgICAgICAgICAg ICpGaWxlSW5mbzsNCisNCisgIC8vDQorICAvLyBSZXRyaWV2ZSB0aGUgRmlsZUluZm8gc3RydWN0 dXJlDQorICAvLw0KKyAgRmlsZUluZm8gPSBGaWxlSGFuZGxlR2V0SW5mbyAoRmlsZSk7DQorICBp ZiAoRmlsZUluZm8gPT0gTlVMTCkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIElmIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5LCB0aGVu IHJldHVybiBhbiBlcnJvcg0KKyAgLy8NCisgIGlmICgoRmlsZUluZm8tPkF0dHJpYnV0ZSAmIEVG SV9GSUxFX0RJUkVDVE9SWSkgIT0gMCkgew0KKyAgICBGcmVlUG9vbCAoRmlsZUluZm8pOw0KKyAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIElm IHRoZSBmaWxlIHNpemUgaXMgYWxyZWFkeSAwLCB0aGVuIGl0IGlzIGVtcHR5LCBzbw0KKyAgLy8g d2UgY2FuIHJldHVybiBzdWNjZXNzLg0KKyAgLy8NCisgIGlmIChGaWxlSW5mby0+RmlsZVNpemUg PT0gMCkgew0KKyAgICBGcmVlUG9vbCAoRmlsZUluZm8pOw0KKyAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQorICB9DQorDQorICAvLw0KKyAgLy8gU2V0IHRoZSBmaWxlIHNpemUgdG8gMC4NCisgIC8v DQorICBGaWxlSW5mby0+RmlsZVNpemUgPSAwOw0KKyAgU3RhdHVzID0gRmlsZUhhbmRsZVNldElu Zm8gKEZpbGUsIEZpbGVJbmZvKTsNCisNCisgIEZyZWVQb29sIChGaWxlSW5mbyk7DQorDQorICBy ZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIFJlYWRzIGEgZmlsZSB0byBhIG5ld2x5 IGFsbG9jYXRlZCBidWZmZXINCisNCisgIEBwYXJhbVtpbl0gIEZpbGUgLSBUaGUgZmlsZSB0byBy ZWFkDQorICBAcGFyYW1baW5dICBSZWFkU2l6ZSAtIFRoZSBzaXplIG9mIGRhdGEgdG8gcmVhZCBm cm9tIHRoZSBmaWxlDQorDQorICBAcmV0dXJuICAgICBQb2ludGVyIHRvIGJ1ZmZlciBhbGxvY2F0 ZWQgdG8gaG9sZCB0aGUgZmlsZQ0KKyAgICAgICAgICAgICAgY29udGVudHMuICBOVUxMIGlmIGFu IGVycm9yIG9jY3VycmVkLg0KKw0KKyoqLw0KK1ZPSUQqDQorRmlsZUhhbmRsZVJlYWRUb05ld0J1 ZmZlciAoDQorICBJTiBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICBGaWxlSGFuZGxlLA0KKyAg SU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgUmVhZFNpemUNCisgICkNCit7DQorICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgIEFjdHVhbFJlYWRTaXplOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpG aWxlQ29udGVudHM7DQorDQorICBBY3R1YWxSZWFkU2l6ZSA9IFJlYWRTaXplOw0KKyAgRmlsZUNv bnRlbnRzID0gQWxsb2NhdGVQb29sIChSZWFkU2l6ZSk7DQorICBpZiAoRmlsZUNvbnRlbnRzICE9 IE5VTEwpIHsNCisgICAgU3RhdHVzID0gRmlsZUhhbmRsZVJlYWQgKA0KKyAgICAgICAgICAgICAg IEZpbGVIYW5kbGUsDQorICAgICAgICAgICAgICAgJlJlYWRTaXplLA0KKyAgICAgICAgICAgICAg IEZpbGVDb250ZW50cw0KKyAgICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykgfHwgKEFjdHVhbFJlYWRTaXplICE9IFJlYWRTaXplKSkgew0KKyAgICAgIEZyZWVQb29s IChGaWxlQ29udGVudHMpOw0KKyAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorICB9DQorDQor ICByZXR1cm4gRmlsZUNvbnRlbnRzOw0KK30NCisNCisNCisvKioNCisgIFJlYWRzIHRoZSBjb250 ZW50cyBvZiB0aGUgTnZWYXJzIGZpbGUgb24gdGhlIGZpbGUgc3lzdGVtDQorDQorICBAcGFyYW1b aW5dICBGc0hhbmRsZSAtIEhhbmRsZSBmb3IgYSBnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29s R3VpZCBpbnN0YW5jZQ0KKw0KKyAgQHJldHVybiAgICAgRUZJX1NUQVRVUyBiYXNlZCBvbiB0aGUg c3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBmaWxlIHJlYWQNCisNCisqKi8NCitFRklfU1RBVFVT DQorUmVhZE52VmFyc0ZpbGUgKA0KKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICBGc0hhbmRs ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBF RklfRklMRV9IQU5ETEUgICAgICAgICAgICAgRmlsZTsNCisgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICBGaWxlU2l6ZTsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICBGaWxlRXhp c3RzOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlQ29udGVudHM7DQorICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgU2VyaWFsaXplZFZhcmlhYmxlczsNCisNCisgIFN0 YXR1cyA9IEdldE52VmFyc0ZpbGUgKEZzSGFuZGxlLCBUUlVFLCAmRmlsZSk7DQorICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoRUZJX0RfSU5GTywgIkZzQWNjZXNzLmM6 IENvdWxkIG5vdCBvcGVuIE5WIFZhcmlhYmxlcyBmaWxlIG9uIHRoaXMgZmlsZSBzeXN0ZW1cbiIp KTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIE52VmFyc0ZpbGVSZWFkQ2hlY2t1 cCAoRmlsZSwgJkZpbGVFeGlzdHMsICZGaWxlU2l6ZSk7DQorICBpZiAoRmlsZVNpemUgPT0gMCkg ew0KKyAgICBGaWxlSGFuZGxlQ2xvc2UgKEZpbGUpOw0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9S VEVEOw0KKyAgfQ0KKw0KKyAgRmlsZUNvbnRlbnRzID0gRmlsZUhhbmRsZVJlYWRUb05ld0J1ZmZl ciAoRmlsZSwgRmlsZVNpemUpOw0KKyAgaWYgKEZpbGVDb250ZW50cyA9PSBOVUxMKSB7DQorICAg IEZpbGVIYW5kbGVDbG9zZSAoRmlsZSk7DQorICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQor ICB9DQorDQorICBERUJVRyAoKA0KKyAgICBFRklfRF9JTkZPLA0KKyAgICAiRnNBY2Nlc3MuYzog UmVhZCAlTHUgYnl0ZXMgZnJvbSBOViBWYXJpYWJsZXMgZmlsZVxuIiwNCisgICAgKFVJTlQ2NClG aWxlU2l6ZQ0KKyAgICApKTsNCisNCisgIFN0YXR1cyA9IFNlcmlhbGl6ZVZhcmlhYmxlc05ld0lu c3RhbmNlRnJvbUJ1ZmZlciAoDQorICAgICAgICAgICAgICZTZXJpYWxpemVkVmFyaWFibGVzLA0K KyAgICAgICAgICAgICBGaWxlQ29udGVudHMsDQorICAgICAgICAgICAgIEZpbGVTaXplDQorICAg ICAgICAgICAgICk7DQorICBpZiAoIVJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBTdGF0 dXMgPSBTZXJpYWxpemVWYXJpYWJsZXNTZXRTZXJpYWxpemVkVmFyaWFibGVzIChTZXJpYWxpemVk VmFyaWFibGVzKTsNCisgIH0NCisNCisgIEZyZWVQb29sIChGaWxlQ29udGVudHMpOw0KKyAgRmls ZUhhbmRsZUNsb3NlIChGaWxlKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKw0KKy8q Kg0KKyAgV3JpdGVzIGEgdmFyaWFibGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgTlYgdmFyaWFibGVz DQorICBoYXZlIGJlZW4gbG9hZGVkIGZyb20gdGhlIGZpbGUgc3lzdGVtLg0KKw0KKyoqLw0KK1NU QVRJQw0KK1ZPSUQNCitTZXROdlZhcnNWYXJpYWJsZSAoDQorICBWT0lEDQorICApDQorew0KKyAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIFZhckRhdGE7DQorICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgU2l6ZTsNCisNCisgIC8vDQorICAvLyBXcml0ZSBhIHZhcmlhYmxl IHRvIGluZGljYXRlIHdlJ3ZlIGFscmVhZHkgbG9hZGVkIHRoZQ0KKyAgLy8gdmFyaWFibGUgZGF0 YS4gIElmIGl0IGlzIGZvdW5kLCB3ZSBza2lwIHRoZSBsb2FkaW5nIG9uDQorICAvLyBzdWJzZXF1 ZW50IGF0dGVtcHRzLg0KKyAgLy8NCisgIFNpemUgPSBzaXplb2YgKFZhckRhdGEpOw0KKyAgVmFy RGF0YSA9IFRSVUU7DQorICBnUlQtPlNldFZhcmlhYmxlICgNCisgICAgICAgICBMIk52VmFycyIs DQorICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KKyAgICAgICAg IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfA0KKyAgICAgICAgICAgRUZJX1ZBUklBQkxFX0JP T1RTRVJWSUNFX0FDQ0VTUyB8DQorICAgICAgICAgICBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NF U1MsDQorICAgICAgICAgU2l6ZSwNCisgICAgICAgICAoVk9JRCopICZWYXJEYXRhDQorICAgICAg ICAgKTsNCit9DQorDQorDQorLyoqDQorICBMb2FkcyB0aGUgbm9uLXZvbGF0aWxlIHZhcmlhYmxl cyBmcm9tIHRoZSBOdlZhcnMgZmlsZSBvbiB0aGUNCisgIGdpdmVuIGZpbGUgc3lzdGVtLg0KKw0K KyAgQHBhcmFtW2luXSAgRnNIYW5kbGUgLSBIYW5kbGUgZm9yIGEgZ0VmaVNpbXBsZUZpbGVTeXN0 ZW1Qcm90b2NvbEd1aWQgaW5zdGFuY2UNCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFz ZWQgb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBsb2FkIG9wZXJhdGlvbg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitMb2FkTnZWYXJzRnJvbUZzICgNCisgIEVGSV9IQU5ETEUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRnNIYW5kbGUNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAg IFZhckRhdGE7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCisNCisg IERFQlVHICgoRUZJX0RfSU5GTywgIkZzQWNjZXNzLmM6IExvYWROdlZhcnNGcm9tRnNcbiIpKTsN CisNCisgIC8vDQorICAvLyBXZSB3cml0ZSBhIHZhcmlhYmxlIHRvIGluZGljYXRlIHdlJ3ZlIGFs cmVhZHkgbG9hZGVkIHRoZQ0KKyAgLy8gdmFyaWFibGUgZGF0YS4gIElmIGl0IGlzIGZvdW5kLCB3 ZSBza2lwIHRoZSBsb2FkaW5nLg0KKyAgLy8NCisgIC8vIFRoaXMgaXMgcmVsZXZhbnQgaWYgdGhl IG5vbi12b2xhdGlsZSB2YXJpYWJsZSBoYXZlIGJlZW4NCisgIC8vIGFibGUgdG8gc3Vydml2ZSBh IHJlYm9vdCBvcGVyYXRpb24uICBJbiB0aGF0IGNhc2UsIHdlIGRvbid0DQorICAvLyB3YW50IHRv IHJlLWxvYWQgdGhlIGZpbGUgYXMgaXQgd291bGQgb3ZlcndyaXRlIG5ld2VyIGNoYW5nZXMNCisg IC8vIG1hZGUgdG8gdGhlIHZhcmlhYmxlcy4NCisgIC8vDQorICBTaXplID0gc2l6ZW9mIChWYXJE YXRhKTsNCisgIFZhckRhdGEgPSBUUlVFOw0KKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAo DQorICAgICAgICAgICAgICAgICAgTCJOdlZhcnMiLA0KKyAgICAgICAgICAgICAgICAgICZnRWZp U2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICBOVUxMLA0K KyAgICAgICAgICAgICAgICAgICZTaXplLA0KKyAgICAgICAgICAgICAgICAgIChWT0lEKikgJlZh ckRhdGENCisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKFN0YXR1cyA9PSBFRklfU1VDQ0VT Uykgew0KKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICJOViBWYXJpYWJsZXMgd2VyZSBhbHJlYWR5 IGxvYWRlZFxuIikpOw0KKyAgICByZXR1cm4gRUZJX0FMUkVBRFlfU1RBUlRFRDsNCisgIH0NCisN CisgIC8vDQorICAvLyBBdHRlbXB0IHRvIHJlc3RvcmUgdGhlIHZhcmlhYmxlcyBmcm9tIHRoZSBO dlZhcnMgZmlsZS4NCisgIC8vDQorICBTdGF0dXMgPSBSZWFkTnZWYXJzRmlsZSAoRnNIYW5kbGUp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKEVGSV9EX0lORk8s ICJFcnJvciB3aGlsZSByZXN0b3JpbmcgTlYgdmFyaWFibGUgZGF0YVxuIikpOw0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFdyaXRlIGEgdmFyaWFibGUgdG8gaW5k aWNhdGUgd2UndmUgYWxyZWFkeSBsb2FkZWQgdGhlDQorICAvLyB2YXJpYWJsZSBkYXRhLiAgSWYg aXQgaXMgZm91bmQsIHdlIHNraXAgdGhlIGxvYWRpbmcgb24NCisgIC8vIHN1YnNlcXVlbnQgYXR0 ZW1wdHMuDQorICAvLw0KKyAgU2V0TnZWYXJzVmFyaWFibGUoKTsNCisNCisgIERFQlVHICgoDQor ICAgIEVGSV9EX0lORk8sDQorICAgICJGc0FjY2Vzcy5jOiBSZWFkIE5WIFZhcmlhYmxlcyBmaWxl IChzaXplPSVMdSlcbiIsDQorICAgIChVSU5UNjQpU2l6ZQ0KKyAgICApKTsNCisNCisgIHJldHVy biBTdGF0dXM7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitJ dGVyYXRlVmFyaWFibGVzQ2FsbGJhY2tBZGRBbGxOdlZhcmlhYmxlcyAoDQorICBJTiAgVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dCwNCisgIElOICBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQorICBJTiAgRUZJX0dVSUQgICAgICAgICAgICAg ICAgICAgICAqVmVuZG9yR3VpZCwNCisgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZXMsDQorICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBEYXRhU2l6 ZSwNCisgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhDQorICApDQorew0K KyAgRUZJX0hBTkRMRSAgSW5zdGFuY2U7DQorDQorICBJbnN0YW5jZSA9IChFRklfSEFORExFKSBD b250ZXh0Ow0KKw0KKyAgLy8NCisgIC8vIE9ubHkgc2F2ZSBub24tdm9sYXRpbGUgdmFyaWFibGVz DQorICAvLw0KKyAgaWYgKChBdHRyaWJ1dGVzICYgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSkg PT0gMCkgew0KKyAgICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorICB9DQorDQorICByZXR1cm4g U2VyaWFsaXplVmFyaWFibGVzQWRkVmFyaWFibGUgKA0KKyAgICAgICAgICAgSW5zdGFuY2UsDQor ICAgICAgICAgICBWYXJpYWJsZU5hbWUsDQorICAgICAgICAgICBWZW5kb3JHdWlkLA0KKyAgICAg ICAgICAgQXR0cmlidXRlcywNCisgICAgICAgICAgIERhdGFTaXplLA0KKyAgICAgICAgICAgRGF0 YQ0KKyAgICAgICAgICAgKTsNCit9DQorDQorDQorLyoqDQorICBTYXZlcyB0aGUgbm9uLXZvbGF0 aWxlIHZhcmlhYmxlcyBpbnRvIHRoZSBOdlZhcnMgZmlsZSBvbiB0aGUNCisgIGdpdmVuIGZpbGUg c3lzdGVtLg0KKw0KKyAgQHBhcmFtW2luXSAgRnNIYW5kbGUgLSBIYW5kbGUgZm9yIGEgZ0VmaVNp bXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQgaW5zdGFuY2UNCisNCisgIEByZXR1cm4gICAgIEVG SV9TVEFUVVMgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBsb2FkIG9wZXJhdGlv bg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitTYXZlTnZWYXJzVG9GcyAoDQorICBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZzSGFuZGxlDQorICApDQorew0KKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9GSUxFX0hBTkRMRSAgICAgICAg ICAgICBGaWxlOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFdyaXRlU2l6ZTsNCisg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZURhdGFTaXplOw0KKyAgVk9JRCAg ICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZURhdGE7DQorICBFRklfSEFORExFICAgICAg ICAgICAgICAgICAgU2VyaWFsaXplZFZhcmlhYmxlczsNCisNCisgIFNlcmlhbGl6ZWRWYXJpYWJs ZXMgPSBOVUxMOw0KKw0KKyAgU3RhdHVzID0gU2VyaWFsaXplVmFyaWFibGVzTmV3SW5zdGFuY2Ug KCZTZXJpYWxpemVkVmFyaWFibGVzKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9IFNlcmlhbGl6ZVZhcmlhYmxl c0l0ZXJhdGVTeXN0ZW1WYXJpYWJsZXMgKA0KKyAgICAgICAgICAgICBJdGVyYXRlVmFyaWFibGVz Q2FsbGJhY2tBZGRBbGxOdlZhcmlhYmxlcywNCisgICAgICAgICAgICAgKFZPSUQqKSBTZXJpYWxp emVkVmFyaWFibGVzDQorICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBWYXJpYWJsZURhdGEgPSBOVUxM Ow0KKyAgVmFyaWFibGVEYXRhU2l6ZSA9IDA7DQorICBTdGF0dXMgPSBTZXJpYWxpemVWYXJpYWJs ZXNUb0J1ZmZlciAoDQorICAgICAgICAgICAgIFNlcmlhbGl6ZWRWYXJpYWJsZXMsDQorICAgICAg ICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICZWYXJpYWJsZURhdGFTaXplDQorICAgICAgICAg ICAgICk7DQorICBpZiAoU3RhdHVzID09IFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMKSB7DQorICAg IFZhcmlhYmxlRGF0YSA9IEFsbG9jYXRlUG9vbCAoVmFyaWFibGVEYXRhU2l6ZSk7DQorICAgIGlm IChWYXJpYWJsZURhdGEgPT0gTlVMTCkgew0KKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVT T1VSQ0VTOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIFN0YXR1cyA9IFNlcmlhbGl6ZVZhcmlhYmxl c1RvQnVmZmVyICgNCisgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZWRWYXJpYWJsZXMsDQorICAg ICAgICAgICAgICAgICBWYXJpYWJsZURhdGEsDQorICAgICAgICAgICAgICAgICAmVmFyaWFibGVE YXRhU2l6ZQ0KKyAgICAgICAgICAgICAgICAgKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgU2VyaWFs aXplVmFyaWFibGVzRnJlZUluc3RhbmNlIChTZXJpYWxpemVkVmFyaWFibGVzKTsNCisNCisgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisg IC8vDQorICAvLyBPcGVuIHRoZSBOdlZhcnMgZmlsZSBmb3Igd3JpdGluZy4NCisgIC8vDQorICBT dGF0dXMgPSBHZXROdlZhcnNGaWxlIChGc0hhbmRsZSwgRkFMU0UsICZGaWxlKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9JTkZPLCAiRnNBY2Nlc3Mu YzogVW5hYmxlIHRvIG9wZW4gZmlsZSB0byBzYXZlZCBOViBWYXJpYWJsZXNcbiIpKTsNCisgICAg cmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIC8vDQorICAvLyBFbXB0eSB0aGUgc3RhcnRpbmcg ZmlsZSBjb250ZW50cy4NCisgIC8vDQorICBTdGF0dXMgPSBGaWxlSGFuZGxlRW1wdHkgKEZpbGUp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBGaWxlSGFuZGxlQ2xvc2UgKEZp bGUpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgV3JpdGVTaXplID0gVmFyaWFi bGVEYXRhU2l6ZTsNCisgIFN0YXR1cyA9IEZpbGVIYW5kbGVXcml0ZSAoRmlsZSwgJldyaXRlU2l6 ZSwgVmFyaWFibGVEYXRhKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0 dXJuIFN0YXR1czsNCisgIH0NCisNCisgIEZpbGVIYW5kbGVDbG9zZSAoRmlsZSk7DQorDQorICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAvLw0KKyAgICAvLyBXcml0ZSBhIHZhcmlh YmxlIHRvIGluZGljYXRlIHdlJ3ZlIGFscmVhZHkgbG9hZGVkIHRoZQ0KKyAgICAvLyB2YXJpYWJs ZSBkYXRhLiAgSWYgaXQgaXMgZm91bmQsIHdlIHNraXAgdGhlIGxvYWRpbmcgb24NCisgICAgLy8g c3Vic2VxdWVudCBhdHRlbXB0cy4NCisgICAgLy8NCisgICAgU2V0TnZWYXJzVmFyaWFibGUoKTsN CisNCisJREVCVUcgKChFRklfRF9JTkZPLCAiU2F2ZWQgTlYgVmFyaWFibGVzIHRvIE52VmFycyBm aWxlXG4iKSk7DQorICB9DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCmRpZmYgLS1n aXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9OdlZhcnNGaWxl TGliL052VmFyc0ZpbGVMaWIuYyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9M aWJyYXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMC4uMmU5NjE4NDU1ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxh dGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZh cnNGaWxlTGliLmMNCkBAIC0wLDAgKzEsNzcgQEANCisvKiogQGZpbGUNCisgIFNhdmUgTm9uLVZv bGF0aWxlIFZhcmlhYmxlcyB0byBhIGZpbGUgc3lzdGVtLg0KKw0KKyAgQ29weXJpZ2h0IChjKSAy MDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNp bmNsdWRlICJOdlZhcnNGaWxlTGliLmgiDQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N CisjaW5jbHVkZSA8TGlicmFyeS9OdlZhcnNGaWxlTGliLmg+DQorDQorRUZJX0hBTkRMRSAgICBt TnZWYXJzRmlsZUxpYkZzSGFuZGxlID0gTlVMTDsNCisNCisNCisvKioNCisgIEF0dGVtcHRzIHRv IGNvbm5lY3QgdGhlIE52VmFyc0ZpbGVMaWIgdG8gdGhlIHNwZWNpZmllZCBmaWxlIHN5c3RlbS4N CisNCisgIEBwYXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBhIGdFZmlTaW1wbGVGaWxl U3lzdGVtUHJvdG9jb2xHdWlkIGluc3RhbmNlDQorDQorICBAcmV0dXJuICAgICBUaGUgRUZJX1NU QVRVUyB3aGlsZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdGhlIE52VmFyc0ZpbGVMaWINCisgICAg ICAgICAgICAgIHRvIHRoZSBmaWxlIHN5c3RlbSBpbnN0YW5jZS4NCisgIEByZXR2YWwgICAgIEVG SV9TVUNDRVNTIC0gVGhlIGdpdmVuIGZpbGUgc3lzdGVtIHdhcyBjb25uZWN0ZWQgc3VjY2Vzc2Z1 bGx5DQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0Nvbm5lY3ROdlZhcnNUb0ZpbGVT eXN0ZW0gKA0KKyAgSU4gRUZJX0hBTkRMRSAgICBGc0hhbmRsZQ0KKyAgKQ0KK3sNCisgIEVGSV9T VEFUVVMgU3RhdHVzOw0KKw0KKyAgLy8NCisgIC8vIFdlIG1pZ2h0IGZhaWwgdG8gbG9hZCB0aGUg dmFyaWFibGUsIHNpbmNlIHRoZSBmaWxlIHN5c3RlbSBpbml0aWFsbHkNCisgIC8vIHdpbGwgbm90 IGhhdmUgdGhlIE52VmFycyBmaWxlLg0KKyAgLy8NCisgIExvYWROdlZhcnNGcm9tRnMgKEZzSGFu ZGxlKTsNCisNCisgIC8vDQorICAvLyBXZSBtdXN0IGJlIGFibGUgdG8gc2F2ZSB0aGUgdmFyaWFi bGVzIHN1Y2Nlc3NmdWxseSB0byB0aGUgZmlsZSBzeXN0ZW0NCisgIC8vIHRvIGhhdmUgY29ubmVj dGVkIHN1Y2Nlc3NmdWxseS4NCisgIC8vDQorICBTdGF0dXMgPSBTYXZlTnZWYXJzVG9GcyAoRnNI YW5kbGUpOw0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgbU52VmFyc0ZpbGVM aWJGc0hhbmRsZSA9IEZzSGFuZGxlOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQor DQorDQorLyoqDQorICBVcGRhdGUgbm9uLXZvbGF0aWxlIHZhcmlhYmxlcyBzdG9yZWQgb24gdGhl IGZpbGUgc3lzdGVtLg0KKw0KKyAgQHJldHVybiAgICAgVGhlIEVGSV9TVEFUVVMgd2hpbGUgYXR0 ZW1wdGluZyB0byB1cGRhdGUgdGhlIHZhcmlhYmxlIG9uDQorICAgICAgICAgICAgICB0aGUgY29u bmVjdGVkIGZpbGUgc3lzdGVtLg0KKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgLSBUaGUgbm9u LXZvbGF0aWxlIHZhcmlhYmxlcyB3ZXJlIHNhdmVkIHRvIHRoZSBkaXNrDQorICBAcmV0dmFsICAg ICBFRklfTk9UX1NUQVJURUQgLSBBIGZpbGUgc3lzdGVtIGhhcyBub3QgYmVlbiBjb25uZWN0ZWQN CisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVXBkYXRlTnZWYXJzT25GaWxlU3lzdGVt ICgNCisgICkNCit7DQorICBpZiAobU52VmFyc0ZpbGVMaWJGc0hhbmRsZSA9PSBOVUxMKSB7DQor ICAgIC8vDQorICAgIC8vIEEgZmlsZSBzeXN0ZW0gaGFkIG5vdCBiZWVuIGNvbm5lY3RlZCB0byB0 aGUgbGlicmFyeS4NCisgICAgLy8NCisgICAgcmV0dXJuIEVGSV9OT1RfU1RBUlRFRDsNCisgIH0g ZWxzZSB7DQorICAgIHJldHVybiBTYXZlTnZWYXJzVG9GcyAobU52VmFyc0ZpbGVMaWJGc0hhbmRs ZSk7DQorICB9DQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5jIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxp Yi9QY2lIb3N0QnJpZGdlTGliLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi4zYjcxYzhhZTk3DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIu Yw0KQEAgLTAsMCArMSw0MTkgQEANCisvKiogQGZpbGUNCisgIFNJTUlDUyBRU1AncyBpbnN0YW5j ZSBvZiB0aGUgUENJIEhvc3QgQnJpZGdlIExpYnJhcnkuDQorDQorICBDb3B5cmlnaHQgKEMpIDIw MTYsIFJlZCBIYXQsIEluYy4NCisgIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8UGlEeGUuaD4NCisN CisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9QY2kuaD4NCisjaW5jbHVkZSA8UmVnaXN0ZXIv WDU4SWNoMTAuaD4NCisNCisjaW5jbHVkZSA8UHJvdG9jb2wvUGNpSG9zdEJyaWRnZVJlc291cmNl QWxsb2NhdGlvbi5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9QY2lSb290QnJpZGdlSW8uaD4NCisN CisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv RGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQorI2luY2x1 ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Bj aUhvc3RCcmlkZ2VMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisjaW5jbHVk ZSAiUGNpSG9zdEJyaWRnZS5oIg0KKw0KKw0KKyNwcmFnbWEgcGFjaygxKQ0KK3R5cGVkZWYgc3Ry dWN0IHsNCisgIEFDUElfSElEX0RFVklDRV9QQVRIICAgICBBY3BpRGV2aWNlUGF0aDsNCisgIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBFbmREZXZpY2VQYXRoOw0KK30gT1ZNRl9QQ0lfUk9PVF9C UklER0VfREVWSUNFX1BBVEg7DQorI3ByYWdtYSBwYWNrICgpDQorDQorDQorR0xPQkFMX1JFTU9W RV9JRl9VTlJFRkVSRU5DRUQNCitDSEFSMTYgKm1QY2lIb3N0QnJpZGdlTGliQWNwaUFkZHJlc3NT cGFjZVR5cGVTdHJbXSA9IHsNCisgIEwiTWVtIiwgTCJJL08iLCBMIkJ1cyINCit9Ow0KKw0KKw0K K1NUQVRJQw0KK0NPTlNUDQorT1ZNRl9QQ0lfUk9PVF9CUklER0VfREVWSUNFX1BBVEggbVJvb3RC cmlkZ2VEZXZpY2VQYXRoVGVtcGxhdGUgPSB7DQorICB7DQorICAgIHsNCisgICAgICBBQ1BJX0RF VklDRV9QQVRILA0KKyAgICAgIEFDUElfRFAsDQorICAgICAgew0KKyAgICAgICAgKFVJTlQ4KSAo c2l6ZW9mKEFDUElfSElEX0RFVklDRV9QQVRIKSksDQorICAgICAgICAoVUlOVDgpICgoc2l6ZW9m KEFDUElfSElEX0RFVklDRV9QQVRIKSkgPj4gOCkNCisgICAgICB9DQorICAgIH0sDQorICAgIEVJ U0FfUE5QX0lEKDB4MEEwMyksIC8vIEhJRA0KKyAgICAwICAgICAgICAgICAgICAgICAgICAvLyBV SUQNCisgIH0sDQorDQorICB7DQorICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KKyAgICBFTkRf RU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQorICAgIHsNCisgICAgICBFTkRfREVWSUNFX1BB VEhfTEVOR1RILA0KKyAgICAgIDANCisgICAgfQ0KKyAgfQ0KK307DQorDQorU1RBVElDIFBDSV9S T09UX0JSSURHRV9BUEVSVFVSRSBtTm9uRXhpc3RBcGVydHVyZSA9IHsgTUFYX1VJTlQ2NCwgMCB9 Ow0KKw0KKy8qKg0KKyAgSW5pdGlhbGl6ZSBhIFBDSV9ST09UX0JSSURHRSBzdHJ1Y3R1cmUuDQor DQorICBAcGFyYW1baW5dICBTdXBwb3J0cyAgICAgICAgIFN1cHBvcnRlZCBhdHRyaWJ1dGVzLg0K Kw0KKyAgQHBhcmFtW2luXSAgQXR0cmlidXRlcyAgICAgICBJbml0aWFsIGF0dHJpYnV0ZXMuDQor DQorICBAcGFyYW1baW5dICBBbGxvY0F0dHJpYnV0ZXMgIEFsbG9jYXRpb24gYXR0cmlidXRlcy4N CisNCisgIEBwYXJhbVtpbl0gIFJvb3RCdXNOdW1iZXIgICAgVGhlIGJ1cyBudW1iZXIgdG8gc3Rv cmUgaW4gUm9vdEJ1cy4NCisNCisgIEBwYXJhbVtpbl0gIE1heFN1YkJ1c051bWJlciAgVGhlIGlu Y2x1c2l2ZSBtYXhpbXVtIGJ1cyBudW1iZXIgdGhhdCBjYW4gYmUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXNzaWduZWQgdG8gYW55IHN1Ym9yZGluYXRlIGJ1cyBmb3VuZCBiZWhp bmQgYW55DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSSBicmlkZ2UgaGFuZ2lu ZyBvZmYgdGhpcyByb290IGJ1cy4NCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGhlIGNhbGxlciBpcyByZXBzb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSb290QnVzTnVtYmVyIDw9IE1heFN1YkJ1c051bWJlci4gSWYN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vdEJ1c051bWJlciBlcXVhbHMgTWF4 U3ViQnVzTnVtYmVyLCB0aGVuIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy b290IGJ1cyBoYXMgbm8gcm9vbSBmb3Igc3Vib3JkaW5hdGUgYnVzZXMuDQorDQorICBAcGFyYW1b aW5dICBJbyAgICAgICAgICAgICAgIElPIGFwZXJ0dXJlLg0KKw0KKyAgQHBhcmFtW2luXSAgTWVt ICAgICAgICAgICAgICBNTUlPIGFwZXJ0dXJlLg0KKw0KKyAgQHBhcmFtW2luXSAgTWVtQWJvdmU0 RyAgICAgICBNTUlPIGFwZXJ0dXJlIGFib3ZlIDRHLg0KKw0KKyAgQHBhcmFtW2luXSAgUE1lbSAg ICAgICAgICAgICBQcmVmZXRjaGFibGUgTU1JTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0g IFBNZW1BYm92ZTRHICAgICAgUHJlZmV0Y2hhYmxlIE1NSU8gYXBlcnR1cmUgYWJvdmUgNEcuDQor DQorICBAcGFyYW1bb3V0XSBSb290QnVzICAgICAgICAgIFRoZSBQQ0lfUk9PVF9CUklER0Ugc3Ry dWN0dXJlIChhbGxvY2F0ZWQgYnkgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhbGxlcikgdGhhdCBzaG91bGQgYmUgZmlsbGVkIGluIGJ5IHRoaXMNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBJbml0aWFsaXphdGlvbiBzdWNjZXNzZnVsLiBBIGRldmljZSBwYXRoDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zaXN0aW5nIG9mIGFuIEFDUEkgZGV2aWNlIHBh dGggbm9kZSwgd2l0aA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEID0gUm9v dEJ1c051bWJlciwgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlua2VkIGludG8gUm9vdEJ1cy4NCisNCisgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4NCisqKi8NCitFRklfU1RBVFVT DQorSW5pdFJvb3RCcmlkZ2UgKA0KKyAgSU4gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICBTdXBw b3J0cywNCisgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCisgIElO ICBVSU5UNjQgICAgICAgICAgICAgICAgICAgQWxsb2NBdHRyaWJ1dGVzLA0KKyAgSU4gIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICBSb290QnVzTnVtYmVyLA0KKyAgSU4gIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICBNYXhTdWJCdXNOdW1iZXIsDQorICBJTiAgUENJX1JPT1RfQlJJREdFX0FQRVJU VVJFICpJbywNCisgIElOICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgKk1lbSwNCisgIElOICBQ Q0lfUk9PVF9CUklER0VfQVBFUlRVUkUgKk1lbUFib3ZlNEcsDQorICBJTiAgUENJX1JPT1RfQlJJ REdFX0FQRVJUVVJFICpQTWVtLA0KKyAgSU4gIFBDSV9ST09UX0JSSURHRV9BUEVSVFVSRSAqUE1l bUFib3ZlNEcsDQorICBPVVQgUENJX1JPT1RfQlJJREdFICAgICAgICAgICpSb290QnVzDQorICAp DQorew0KKyAgT1ZNRl9QQ0lfUk9PVF9CUklER0VfREVWSUNFX1BBVEggKkRldmljZVBhdGg7DQor DQorICAvLw0KKyAgLy8gQmUgc2FmZSBpZiBvdGhlciBmaWVsZHMgYXJlIGFkZGVkIHRvIFBDSV9S T09UX0JSSURHRSBsYXRlci4NCisgIC8vDQorICBaZXJvTWVtIChSb290QnVzLCBzaXplb2YgKlJv b3RCdXMpOw0KKw0KKyAgUm9vdEJ1cy0+U2VnbWVudCA9IDA7DQorDQorICBSb290QnVzLT5TdXBw b3J0cyAgID0gU3VwcG9ydHM7DQorICBSb290QnVzLT5BdHRyaWJ1dGVzID0gQXR0cmlidXRlczsN CisNCisgIFJvb3RCdXMtPkRtYUFib3ZlNEcgPSBGQUxTRTsNCisNCisgIFJvb3RCdXMtPkFsbG9j YXRpb25BdHRyaWJ1dGVzID0gQWxsb2NBdHRyaWJ1dGVzOw0KKyAgUm9vdEJ1cy0+QnVzLkJhc2Ug ID0gUm9vdEJ1c051bWJlcjsNCisgIFJvb3RCdXMtPkJ1cy5MaW1pdCA9IE1heFN1YkJ1c051bWJl cjsNCisgIENvcHlNZW0gKCZSb290QnVzLT5JbywgSW8sIHNpemVvZiAoKklvKSk7DQorICBDb3B5 TWVtICgmUm9vdEJ1cy0+TWVtLCBNZW0sIHNpemVvZiAoKk1lbSkpOw0KKyAgQ29weU1lbSAoJlJv b3RCdXMtPk1lbUFib3ZlNEcsIE1lbUFib3ZlNEcsIHNpemVvZiAoKk1lbUFib3ZlNEcpKTsNCisg IENvcHlNZW0gKCZSb290QnVzLT5QTWVtLCBQTWVtLCBzaXplb2YgKCpQTWVtKSk7DQorICBDb3B5 TWVtICgmUm9vdEJ1cy0+UE1lbUFib3ZlNEcsIFBNZW1BYm92ZTRHLCBzaXplb2YgKCpQTWVtQWJv dmU0RykpOw0KKw0KKyAgUm9vdEJ1cy0+Tm9FeHRlbmRlZENvbmZpZ1NwYWNlID0gKFBjZEdldDE2 IChQY2RTaW1pY3NYNThIb3N0QnJpZGdlUGNpRGV2SWQpICE9DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSU5URUxfSUNIMTBfREVWSUNFX0lEKTsNCisNCisgIERldmljZVBh dGggPSBBbGxvY2F0ZUNvcHlQb29sIChzaXplb2YgbVJvb3RCcmlkZ2VEZXZpY2VQYXRoVGVtcGxh dGUsDQorICAgICAgICAgICAgICAgICAmbVJvb3RCcmlkZ2VEZXZpY2VQYXRoVGVtcGxhdGUpOw0K KyAgaWYgKERldmljZVBhdGggPT0gTlVMTCkgew0KKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAi JWE6ICVyXG4iLCBfX0ZVTkNUSU9OX18sIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSk7DQorICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisgIERldmljZVBhdGgtPkFjcGlEZXZp Y2VQYXRoLlVJRCA9IFJvb3RCdXNOdW1iZXI7DQorICBSb290QnVzLT5EZXZpY2VQYXRoID0gKEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKURldmljZVBhdGg7DQorDQorICBERUJVRyAoKEVGSV9E X0lORk8sDQorICAgICIlYTogcG9wdWxhdGVkIHJvb3QgYnVzICVkLCB3aXRoIHJvb20gZm9yICVk IHN1Ym9yZGluYXRlIGJ1cyhlcylcbiIsDQorICAgIF9fRlVOQ1RJT05fXywgUm9vdEJ1c051bWJl ciwgTWF4U3ViQnVzTnVtYmVyIC0gUm9vdEJ1c051bWJlcikpOw0KKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KK30NCisNCisNCisvKioNCisgIFVuaW5pdGlhbGl6ZSBhIFBDSV9ST09UX0JSSURHRSBz dHJ1Y3R1cmUgc2V0IHVwIHdpdGggSW5pdFJvb3RCcmlkZ2UoKS4NCisNCisgIHBhcmFtW2luXSBS b290QnVzICBUaGUgUENJX1JPT1RfQlJJREdFIHN0cnVjdHVyZSwgYWxsb2NhdGVkIGJ5IHRoZSBj YWxsZXIgYW5kDQorICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgd2l0aCBJbml0Um9v dEJyaWRnZSgpLCB0aGF0IHNob3VsZCBiZQ0KKyAgICAgICAgICAgICAgICAgICAgIHVuaW5pdGlh bGl6ZWQuIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBmcmVlIFJvb3RCdXMuDQorKiovDQorU1RBVElD DQorVk9JRA0KK1VuaW5pdFJvb3RCcmlkZ2UgKA0KKyAgSU4gUENJX1JPT1RfQlJJREdFICpSb290 QnVzDQorICApDQorew0KKyAgRnJlZVBvb2wgKFJvb3RCdXMtPkRldmljZVBhdGgpOw0KK30NCisN CisNCisvKioNCisgIFJldHVybiBhbGwgdGhlIHJvb3QgYnJpZGdlIGluc3RhbmNlcyBpbiBhbiBh cnJheS4NCisNCisgIEBwYXJhbSBDb3VudCAgUmV0dXJuIHRoZSBjb3VudCBvZiByb290IGJyaWRn ZSBpbnN0YW5jZXMuDQorDQorICBAcmV0dXJuIEFsbCB0aGUgcm9vdCBicmlkZ2UgaW5zdGFuY2Vz IGluIGFuIGFycmF5Lg0KKyAgICAgICAgICBUaGUgYXJyYXkgc2hvdWxkIGJlIHBhc3NlZCBpbnRv IFBjaUhvc3RCcmlkZ2VGcmVlUm9vdEJyaWRnZXMoKQ0KKyAgICAgICAgICB3aGVuIGl0J3Mgbm90 IHVzZWQuDQorKiovDQorUENJX1JPT1RfQlJJREdFICoNCitFRklBUEkNCitQY2lIb3N0QnJpZGdl R2V0Um9vdEJyaWRnZXMgKA0KKyAgVUlOVE4gKkNvdW50DQorICApDQorew0KKyAgRUZJX1NUQVRV UyAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgRXh0cmFSb290QnJp ZGdlczsNCisgIFBDSV9ST09UX0JSSURHRSAgICAgICpCcmlkZ2VzOw0KKyAgVUlOVE4gICAgICAg ICAgICAgICAgSW5pdGlhbGl6ZWQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICBMYXN0Um9vdEJy aWRnZU51bWJlcjsNCisgIFVJTlROICAgICAgICAgICAgICAgIFJvb3RCcmlkZ2VOdW1iZXI7DQor ICBVSU5UNjQgICAgICAgICAgICAgICBBdHRyaWJ1dGVzOw0KKyAgVUlOVDY0ICAgICAgICAgICAg ICAgQWxsb2NhdGlvbkF0dHJpYnV0ZXM7DQorICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgSW87 DQorICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgTWVtOw0KKyAgUENJX1JPT1RfQlJJREdFX0FQ RVJUVVJFIE1lbUFib3ZlNEc7DQorDQorICBaZXJvTWVtICgmSW8sIHNpemVvZiAoSW8pKTsNCisg IFplcm9NZW0gKCZNZW0sIHNpemVvZiAoTWVtKSk7DQorICBaZXJvTWVtICgmTWVtQWJvdmU0Rywg c2l6ZW9mIChNZW1BYm92ZTRHKSk7DQorDQorICBBdHRyaWJ1dGVzID0gRUZJX1BDSV9BVFRSSUJV VEVfSURFX1BSSU1BUllfSU8gfA0KKyAgICBFRklfUENJX0FUVFJJQlVURV9JREVfU0VDT05EQVJZ X0lPIHwNCisgICAgRUZJX1BDSV9BVFRSSUJVVEVfSVNBX0lPXzE2IHwNCisgICAgRUZJX1BDSV9B VFRSSUJVVEVfSVNBX01PVEhFUkJPQVJEX0lPIHwNCisgICAgRUZJX1BDSV9BVFRSSUJVVEVfVkdB X01FTU9SWSB8DQorICAgIEVGSV9QQ0lfQVRUUklCVVRFX1ZHQV9JT18xNiB8DQorICAgIEVGSV9Q Q0lfQVRUUklCVVRFX1ZHQV9QQUxFVFRFX0lPXzE2Ow0KKw0KKyAgQWxsb2NhdGlvbkF0dHJpYnV0 ZXMgPSBFRklfUENJX0hPU1RfQlJJREdFX0NPTUJJTkVfTUVNX1BNRU07DQorICBpZiAoUGNkR2V0 NjQgKFBjZFBjaU1taW82NFNpemUpID4gMCkgew0KKyAgICBBbGxvY2F0aW9uQXR0cmlidXRlcyB8 PSBFRklfUENJX0hPU1RfQlJJREdFX01FTTY0X0RFQ09ERTsNCisgICAgTWVtQWJvdmU0Ry5CYXNl ID0gUGNkR2V0NjQgKFBjZFBjaU1taW82NEJhc2UpOw0KKyAgICBNZW1BYm92ZTRHLkxpbWl0ID0g UGNkR2V0NjQgKFBjZFBjaU1taW82NEJhc2UpICsNCisgICAgICAgICAgICAgICAgICAgICAgIFBj ZEdldDY0IChQY2RQY2lNbWlvNjRTaXplKSAtIDE7DQorICB9IGVsc2Ugew0KKyAgICBDb3B5TWVt ICgmTWVtQWJvdmU0RywgJm1Ob25FeGlzdEFwZXJ0dXJlLCBzaXplb2YgKG1Ob25FeGlzdEFwZXJ0 dXJlKSk7DQorICB9DQorDQorICBJby5CYXNlID0gUGNkR2V0NjQgKFBjZFBjaUlvQmFzZSk7DQor ICBJby5MaW1pdCA9IFBjZEdldDY0IChQY2RQY2lJb0Jhc2UpICsgKFBjZEdldDY0IChQY2RQY2lJ b1NpemUpIC0gMSk7DQorICBNZW0uQmFzZSA9IFBjZEdldDY0IChQY2RQY2lNbWlvMzJCYXNlKTsN CisgIE1lbS5MaW1pdCA9IFBjZEdldDY0IChQY2RQY2lNbWlvMzJCYXNlKSArIChQY2RHZXQ2NCAo UGNkUGNpTW1pbzMyU2l6ZSkgLSAxKTsNCisNCisgICpDb3VudCA9IDA7DQorICBFeHRyYVJvb3RC cmlkZ2VzID0gMDsNCisNCisgIC8vDQorICAvLyBBbGxvY2F0ZSB0aGUgIm1haW4iIHJvb3QgYnJp ZGdlLCBhbmQgYW55IGV4dHJhIHJvb3QgYnJpZGdlcy4NCisgIC8vDQorICBCcmlkZ2VzID0gQWxs b2NhdGVQb29sICgoMSArIChVSU5UTilFeHRyYVJvb3RCcmlkZ2VzKSAqIHNpemVvZiAqQnJpZGdl cyk7DQorICBpZiAoQnJpZGdlcyA9PSBOVUxMKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1Is ICIlYTogJXJcbiIsIF9fRlVOQ1RJT05fXywgRUZJX09VVF9PRl9SRVNPVVJDRVMpKTsNCisgICAg cmV0dXJuIE5VTEw7DQorICB9DQorICBJbml0aWFsaXplZCA9IDA7DQorDQorICAvLw0KKyAgLy8g VGhlICJtYWluIiByb290IGJ1cyBpcyBhbHdheXMgdGhlcmUuDQorICAvLw0KKyAgTGFzdFJvb3RC cmlkZ2VOdW1iZXIgPSAwOw0KKw0KKyAgLy8NCisgIC8vIFNjYW4gYWxsIG90aGVyIHJvb3QgYnVz ZXMuIElmIGZ1bmN0aW9uIDAgb2YgYW55IGRldmljZSBvbiBhIGJ1cyByZXR1cm5zIGENCisgIC8v IFZlbmRvcklkIHJlZ2lzdGVyIHZhbHVlIGRpZmZlcmVudCBmcm9tIGFsbC1iaXRzLW9uZSwgdGhl biB0aGF0IGJ1cyBpcw0KKyAgLy8gYWxpdmUuDQorICAvLw0KKyAgZm9yIChSb290QnJpZGdlTnVt YmVyID0gMTsNCisgICAgICAgUm9vdEJyaWRnZU51bWJlciA8PSBQQ0lfTUFYX0JVUyAmJiBJbml0 aWFsaXplZCA8IEV4dHJhUm9vdEJyaWRnZXM7DQorICAgICAgICsrUm9vdEJyaWRnZU51bWJlcikg ew0KKyAgICBVSU5UTiBEZXZpY2U7DQorDQorICAgIGZvciAoRGV2aWNlID0gMDsgRGV2aWNlIDw9 IFBDSV9NQVhfREVWSUNFOyArK0RldmljZSkgew0KKyAgICAgIGlmIChQY2lSZWFkMTYgKFBDSV9M SUJfQUREUkVTUyAoUm9vdEJyaWRnZU51bWJlciwgRGV2aWNlLCAwLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgUENJX1ZFTkRPUl9JRF9PRkZTRVQpKSAhPSBNQVhfVUlOVDE2KSB7DQorICAgICAg ICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisgICAgaWYgKERldmljZSA8PSBQQ0lfTUFYX0RF VklDRSkgew0KKyAgICAgIC8vDQorICAgICAgLy8gRm91bmQgdGhlIG5leHQgcm9vdCBidXMuIFdl IGNhbiBub3cgaW5zdGFsbCB0aGUgKnByZXZpb3VzKiBvbmUsDQorICAgICAgLy8gYmVjYXVzZSBu b3cgd2Uga25vdyBob3cgYmlnIGEgYnVzIG51bWJlciByYW5nZSAqdGhhdCogb25lIGhhcywgZm9y IGFueQ0KKyAgICAgIC8vIHN1Ym9yZGluYXRlIGJ1c2VzIHRoYXQgbWlnaHQgZXhpc3QgYmVoaW5k IFBDSSBicmlkZ2VzIGhhbmdpbmcgb2ZmIGl0Lg0KKyAgICAgIC8vDQorICAgICAgU3RhdHVzID0g SW5pdFJvb3RCcmlkZ2UgKA0KKyAgICAgICAgQXR0cmlidXRlcywNCisgICAgICAgIEF0dHJpYnV0 ZXMsDQorICAgICAgICBBbGxvY2F0aW9uQXR0cmlidXRlcywNCisgICAgICAgIChVSU5UOCkgTGFz dFJvb3RCcmlkZ2VOdW1iZXIsDQorICAgICAgICAoVUlOVDgpIChSb290QnJpZGdlTnVtYmVyIC0g MSksDQorICAgICAgICAmSW8sDQorICAgICAgICAmTWVtLA0KKyAgICAgICAgJk1lbUFib3ZlNEcs DQorICAgICAgICAmbU5vbkV4aXN0QXBlcnR1cmUsDQorICAgICAgICAmbU5vbkV4aXN0QXBlcnR1 cmUsDQorICAgICAgICAmQnJpZGdlc1tJbml0aWFsaXplZF0NCisgICAgICAgICk7DQorICAgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICAgZ290byBGcmVlQnJpZGdlczsNCisg ICAgICB9DQorICAgICAgKytJbml0aWFsaXplZDsNCisgICAgICBMYXN0Um9vdEJyaWRnZU51bWJl ciA9IFJvb3RCcmlkZ2VOdW1iZXI7DQorICAgIH0NCisgIH0NCisNCisgIC8vDQorICAvLyBJbnN0 YWxsIHRoZSBsYXN0IHJvb3QgYnVzICh3aGljaCBtaWdodCBiZSB0aGUgb25seSwgaWUuIG1haW4s IHJvb3QgYnVzLCBpZg0KKyAgLy8gd2UndmUgZm91bmQgbm8gZXh0cmEgcm9vdCBidXNlcykuDQor ICAvLw0KKyAgU3RhdHVzID0gSW5pdFJvb3RCcmlkZ2UgKA0KKyAgICBBdHRyaWJ1dGVzLA0KKyAg ICBBdHRyaWJ1dGVzLA0KKyAgICBBbGxvY2F0aW9uQXR0cmlidXRlcywNCisgICAgKFVJTlQ4KSBM YXN0Um9vdEJyaWRnZU51bWJlciwNCisgICAgUENJX01BWF9CVVMsDQorICAgICZJbywNCisgICAg Jk1lbSwNCisgICAgJk1lbUFib3ZlNEcsDQorICAgICZtTm9uRXhpc3RBcGVydHVyZSwNCisgICAg Jm1Ob25FeGlzdEFwZXJ0dXJlLA0KKyAgICAmQnJpZGdlc1tJbml0aWFsaXplZF0NCisgICAgKTsN CisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgZ290byBGcmVlQnJpZGdlczsNCisg IH0NCisgICsrSW5pdGlhbGl6ZWQ7DQorDQorICAqQ291bnQgPSBJbml0aWFsaXplZDsNCisgIHJl dHVybiBCcmlkZ2VzOw0KKw0KK0ZyZWVCcmlkZ2VzOg0KKyAgd2hpbGUgKEluaXRpYWxpemVkID4g MCkgew0KKyAgICAtLUluaXRpYWxpemVkOw0KKyAgICBVbmluaXRSb290QnJpZGdlICgmQnJpZGdl c1tJbml0aWFsaXplZF0pOw0KKyAgfQ0KKw0KKyAgRnJlZVBvb2wgKEJyaWRnZXMpOw0KKyAgcmV0 dXJuIE5VTEw7DQorfQ0KKw0KKw0KKy8qKg0KKyAgRnJlZSB0aGUgcm9vdCBicmlkZ2UgaW5zdGFu Y2VzIGFycmF5IHJldHVybmVkIGZyb20NCisgIFBjaUhvc3RCcmlkZ2VHZXRSb290QnJpZGdlcygp Lg0KKw0KKyAgQHBhcmFtICBUaGUgcm9vdCBicmlkZ2UgaW5zdGFuY2VzIGFycmF5Lg0KKyAgQHBh cmFtICBUaGUgY291bnQgb2YgdGhlIGFycmF5Lg0KKyoqLw0KK1ZPSUQNCitFRklBUEkNCitQY2lI b3N0QnJpZGdlRnJlZVJvb3RCcmlkZ2VzICgNCisgIFBDSV9ST09UX0JSSURHRSAqQnJpZGdlcywN CisgIFVJTlROICAgICAgICAgICBDb3VudA0KKyAgKQ0KK3sNCisgIGlmIChCcmlkZ2VzID09IE5V TEwgJiYgQ291bnQgPT0gMCkgew0KKyAgICByZXR1cm47DQorICB9DQorICBBU1NFUlQgKEJyaWRn ZXMgIT0gTlVMTCAmJiBDb3VudCA+IDApOw0KKw0KKyAgZG8gew0KKyAgICAtLUNvdW50Ow0KKyAg ICBVbmluaXRSb290QnJpZGdlICgmQnJpZGdlc1tDb3VudF0pOw0KKyAgfSB3aGlsZSAoQ291bnQg PiAwKTsNCisNCisgIEZyZWVQb29sIChCcmlkZ2VzKTsNCit9DQorDQorDQorLyoqDQorICBJbmZv cm0gdGhlIHBsYXRmb3JtIHRoYXQgdGhlIHJlc291cmNlIGNvbmZsaWN0IGhhcHBlbnMuDQorDQor ICBAcGFyYW0gSG9zdEJyaWRnZUhhbmRsZSBIYW5kbGUgb2YgdGhlIEhvc3QgQnJpZGdlLg0KKyAg QHBhcmFtIENvbmZpZ3VyYXRpb24gICAgUG9pbnRlciB0byBQQ0kgSS9PIGFuZCBQQ0kgbWVtb3J5 IHJlc291cmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy4gVGhlIENv bmZpZ3VyYXRpb24gY29udGFpbnMgdGhlIHJlc291cmNlcw0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIGFsbCB0aGUgcm9vdCBicmlkZ2VzLiBUaGUgcmVzb3VyY2UgZm9yIGVhY2ggcm9v dA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlIGlzIHRlcm1pbmF0ZWQgd2l0aCBF TkQgZGVzY3JpcHRvciBhbmQgYW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9u YWwgRU5EIGlzIGFwcGVuZGVkIGluZGljYXRpbmcgdGhlIGVuZCBvZiB0aGUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudGlyZSByZXNvdXJjZXMuIFRoZSByZXNvdXJjZSBkZXNjcmlwdG9y IGZpZWxkDQorICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgZm9sbG93IHRoZSBkZXNj cmlwdGlvbiBpbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1BDSV9IT1NUX0JSSURH RV9SRVNPVVJDRV9BTExPQ0FUSU9OX1BST1RPQ09MDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAuU3VibWl0UmVzb3VyY2VzKCkuDQorKiovDQorVk9JRA0KK0VGSUFQSQ0KK1BjaUhvc3RCcmlk Z2VSZXNvdXJjZUNvbmZsaWN0ICgNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAg ICBIb3N0QnJpZGdlSGFuZGxlLA0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpDb25maWd1cmF0aW9uDQorICApDQorew0KKyAgRUZJX0FDUElfQUREUkVTU19TUEFDRV9ERVND UklQVE9SICpEZXNjcmlwdG9yOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJvb3RCcmlkZ2VJbmRleDsNCisgIERFQlVHICgoRUZJX0RfRVJST1IsICJQY2lIb3N0QnJpZGdl OiBSZXNvdXJjZSBjb25mbGljdCBoYXBwZW5zIVxuIikpOw0KKw0KKyAgUm9vdEJyaWRnZUluZGV4 ID0gMDsNCisgIERlc2NyaXB0b3IgPSAoRUZJX0FDUElfQUREUkVTU19TUEFDRV9ERVNDUklQVE9S ICopIENvbmZpZ3VyYXRpb247DQorICB3aGlsZSAoRGVzY3JpcHRvci0+RGVzYyA9PSBBQ1BJX0FE RFJFU1NfU1BBQ0VfREVTQ1JJUFRPUikgew0KKyAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiUm9v dEJyaWRnZVslZF06XG4iLCBSb290QnJpZGdlSW5kZXgrKykpOw0KKyAgICBmb3IgKDsgRGVzY3Jp cHRvci0+RGVzYyA9PSBBQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJUFRPUjsgRGVzY3JpcHRvcisr KSB7DQorICAgICAgQVNTRVJUIChEZXNjcmlwdG9yLT5SZXNUeXBlIDwNCisgICAgICAgICAgICAg IChzaXplb2YgKG1QY2lIb3N0QnJpZGdlTGliQWNwaUFkZHJlc3NTcGFjZVR5cGVTdHIpIC8NCisg ICAgICAgICAgICAgICBzaXplb2YgKG1QY2lIb3N0QnJpZGdlTGliQWNwaUFkZHJlc3NTcGFjZVR5 cGVTdHJbMF0pDQorICAgICAgICAgICAgICAgKQ0KKyAgICAgICAgICAgICAgKTsNCisgICAgICBE RUJVRyAoKEVGSV9EX0VSUk9SLCAiICVzOiBMZW5ndGgvQWxpZ25tZW50ID0gMHglbHggLyAweCVs eFxuIiwNCisgICAgICAgICAgICAgIG1QY2lIb3N0QnJpZGdlTGliQWNwaUFkZHJlc3NTcGFjZVR5 cGVTdHJbRGVzY3JpcHRvci0+UmVzVHlwZV0sDQorICAgICAgICAgICAgICBEZXNjcmlwdG9yLT5B ZGRyTGVuLCBEZXNjcmlwdG9yLT5BZGRyUmFuZ2VNYXgNCisgICAgICAgICAgICAgICkpOw0KKyAg ICAgIGlmIChEZXNjcmlwdG9yLT5SZXNUeXBlID09IEFDUElfQUREUkVTU19TUEFDRV9UWVBFX01F TSkgew0KKyAgICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiAgICAgR3JhbnVsYXJpdHkvU3Bl Y2lmaWNGbGFnID0gJWxkIC8gJTAyeCVzXG4iLA0KKyAgICAgICAgICAgICAgICBEZXNjcmlwdG9y LT5BZGRyU3BhY2VHcmFudWxhcml0eSwgRGVzY3JpcHRvci0+U3BlY2lmaWNGbGFnLA0KKyAgICAg ICAgICAgICAgICAoKERlc2NyaXB0b3ItPlNwZWNpZmljRmxhZyAmDQorICAgICAgICAgICAgICAg ICAgRUZJX0FDUElfTUVNT1JZX1JFU09VUkNFX1NQRUNJRklDX0ZMQUdfQ0FDSEVBQkxFX1BSRUZF VENIQUJMRQ0KKyAgICAgICAgICAgICAgICAgICkgIT0gMCkgPyBMIiAoUHJlZmV0Y2hhYmxlKSIg OiBMIiINCisgICAgICAgICAgICAgICAgKSk7DQorICAgICAgfQ0KKyAgICB9DQorICAgIC8vDQor ICAgIC8vIFNraXAgdGhlIEVORCBkZXNjcmlwdG9yIGZvciByb290IGJyaWRnZQ0KKyAgICAvLw0K KyAgICBBU1NFUlQgKERlc2NyaXB0b3ItPkRlc2MgPT0gQUNQSV9FTkRfVEFHX0RFU0NSSVBUT1Ip Ow0KKyAgICBEZXNjcmlwdG9yID0gKEVGSV9BQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJUFRPUiAq KSgNCisgICAgICAgICAgICAgICAgICAgKEVGSV9BQ1BJX0VORF9UQUdfREVTQ1JJUFRPUiAqKURl c2NyaXB0b3IgKyAxDQorICAgICAgICAgICAgICAgICAgICk7DQorICB9DQorfQ0KZGlmZiAtLWdp dCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BlaVJlcG9ydEZ2 TGliL0Z2LmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlS ZXBvcnRGdkxpYi9Gdi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4u NGUzNzYyNDY1YQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIvRnYuYw0KQEAgLTAsMCArMSwxMDAgQEAN CisvKiogQGZpbGUNCisgIEJ1aWxkIEZWIHJlbGF0ZWQgaG9icyBmb3IgcGxhdGZvcm0uDQorDQor ICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlICJQaVBlaS5oIg0KKyNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQorI2luY2x1ZGUg PExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4N CisNCitCT09MRUFOIG1TM1N1cHBvcnRlZCA9IFRSVUU7DQorDQorLyoqDQorICBQdWJsaXNoIFBF SSAmIERYRSAoRGVjb21wcmVzc2VkKSBNZW1vcnkgYmFzZWQgRlZzIHRvIGxldCBQRUkNCisgIGFu ZCBEWEUga25vdyBhYm91dCB0aGVtLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIFBsYXRm b3JtIFBFSSBGVnMgd2VyZSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuDQorDQorKiovDQorRUZJ X1NUQVRVUw0KK1BlaUZ2SW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIEJP T0xFQU4gU2VjdXJlUzNOZWVkZWQ7DQorDQorICBERUJVRyAoKEVGSV9EX0lORk8sICJQbGF0Zm9y bSBQRUkgRmlybXdhcmUgVm9sdW1lIEluaXRpYWxpemF0aW9uXG4iKSk7DQorDQorICBERUJVRyAo DQorICAgIChFRklfRF9FUlJPUiwgIkZpcm13YXJlIFZvbHVtZSBIT0I6IDB4JXggMHgleFxuIiwN CisgICAgICBQY2RHZXQzMiAoUGNkU2ltaWNzUGVpTWVtRnZCYXNlKSwNCisgICAgICBQY2RHZXQz MiAoUGNkU2ltaWNzUGVpTWVtRnZTaXplKQ0KKyAgICAgICkNCisgICAgKTsNCisgIC8vDQorICAv LyBDcmVhdGUgYSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IgZm9yIHRoZSBQRUkgRlYuDQorICAvLw0K KyAgLy8gQWxsb2NhdGUgYXMgQUNQSSBOVlMgaXMgUzMgaXMgc3VwcG9ydGVkDQorICAvLw0KKyAg QnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgUGNkR2V0MzIgKFBjZFNpbWljc1BlaU1l bUZ2QmFzZSksDQorICAgIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1GdlNpemUpLA0KKyAgICBt UzNTdXBwb3J0ZWQgPyBFZmlBQ1BJTWVtb3J5TlZTIDogRWZpQm9vdFNlcnZpY2VzRGF0YQ0KKyAg ICApOw0KKw0KKyAgLy8NCisgIC8vIExldCBEWEUga25vdyBhYm91dCB0aGUgRFhFIEZWDQorICAv Lw0KKyAgQnVpbGRGdkhvYiAoUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSksIFBjZEdl dDMyIChQY2RTaW1pY3NEeGVNZW1GdlNpemUpKTsNCisNCisgIFNlY3VyZVMzTmVlZGVkID0gbVMz U3VwcG9ydGVkICYmIEZlYXR1cmVQY2RHZXQgKFBjZFNtbVNtcmFtUmVxdWlyZSk7DQorDQorICAv Lw0KKyAgLy8gQ3JlYXRlIGEgbWVtb3J5IGFsbG9jYXRpb24gSE9CIGZvciB0aGUgRFhFIEZWLg0K KyAgLy8NCisgIC8vIElmICJzZWN1cmUiIFMzIGlzIG5lZWRlZCwgdGhlbiBTRUMgd2lsbCBkZWNv bXByZXNzIGJvdGggUEVJIGFuZCBEWEUNCisgIC8vIGZpcm13YXJlIHZvbHVtZXMgYXQgUzMgcmVz dW1lIHRvbywgaGVuY2Ugd2UgbmVlZCB0byBrZWVwIGF3YXkgdGhlIE9TIGZyb20NCisgIC8vIERY RUZWIGFzIHdlbGwuIE90aGVyd2lzZSB3ZSBvbmx5IG5lZWQgdG8ga2VlcCBhd2F5IERYRSBpdHNl bGYgZnJvbSB0aGUNCisgIC8vIERYRUZWIGFyZWEuDQorICAvLw0KKyAgQnVpbGRNZW1vcnlBbGxv Y2F0aW9uSG9iICgNCisgICAgUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSksDQorICAg IFBjZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdlNpemUpLA0KKyAgICBTZWN1cmVTM05lZWRlZCA/ IEVmaUFDUElNZW1vcnlOVlMgOiBFZmlCb290U2VydmljZXNEYXRhDQorICAgICk7DQorDQorICAv Lw0KKyAgLy8gQWRkaXRpb25hbGx5LCBzYWlkIGRlY29tcHJlc3Npb24gd2lsbCB1c2UgdGVtcG9y YXJ5IG1lbW9yeSBhYm92ZSB0aGUgZW5kDQorICAvLyBvZiBEWEVGViwgc28gbGV0J3Mga2VlcCBh d2F5IHRoZSBPUyBmcm9tIHRoZXJlIHRvby4NCisgIC8vDQorICBpZiAoU2VjdXJlUzNOZWVkZWQp IHsNCisgICAgVUlOVDMyIER4ZU1lbUZ2RW5kOw0KKw0KKyAgICBEeGVNZW1GdkVuZCA9IFBjZEdl dDMyIChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpICsNCisgICAgICAgICAgICAgICAgICBQY2RHZXQz MiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKTsNCisgICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9i ICgNCisgICAgICBEeGVNZW1GdkVuZCwNCisgICAgICBQY2RHZXQzMiAoUGNkU2ltaWNzRGVjb21w cmVzc2lvblNjcmF0Y2hFbmQpIC0gRHhlTWVtRnZFbmQsDQorICAgICAgRWZpQUNQSU1lbW9yeU5W Uw0KKyAgICAgICk7DQorICB9DQorDQorICAvLw0KKyAgLy8gTGV0IFBFSSBrbm93IGFib3V0IHRo ZSBEWEUgRlYgc28gaXQgY2FuIGZpbmQgdGhlIERYRSBDb3JlDQorICAvLw0KKyAgUGVpU2Vydmlj ZXNJbnN0YWxsRnZJbmZvUHBpICgNCisgICAgTlVMTCwNCisgICAgKFZPSUQgKikoVUlOVE4pIFBj ZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpLA0KKyAgICBQY2RHZXQzMiAoUGNkU2ltaWNz RHhlTWVtRnZTaXplKSwNCisgICAgTlVMTCwNCisgICAgTlVMTA0KKyAgICApOw0KKw0KKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxpYi9QZWlSZXBvcnRGdkxpYi5jIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGVpUmVwb3J0RnZMaWIv UGVpUmVwb3J0RnZMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAu LmJiNWEwNjBiOGUNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09w ZW5Cb2FyZFBrZy9MaWJyYXJ5L1BlaVJlcG9ydEZ2TGliL1BlaVJlcG9ydEZ2TGliLmMNCkBAIC0w LDAgKzEsMTE5IEBADQorLyoqIEBmaWxlDQorICBTb3VyY2UgY29kZSBmaWxlIGZvciBSZXBvcnQg RmlybXdhcmUgVm9sdW1lIChGVikgbGlicmFyeQ0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorDQorICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpbmNs dWRlIDxCYXNlLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9S ZXBvcnRGdkxpYi5oPg0KKyNpbmNsdWRlIDxHdWlkL0Zpcm13YXJlRmlsZVN5c3RlbTIuaD4NCisj aW5jbHVkZSA8UHBpL0Zpcm13YXJlVm9sdW1lSW5mby5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lv TGliLmg+DQorI2luY2x1ZGUgPFJlZ2lzdGVyL1g1OEljaDEwLmg+DQorDQorRUZJX1NUQVRVUw0K K1BlaUZ2SW5pdGlhbGl6YXRpb24oDQorICBWT0lEDQorKTsNCisNCitWT0lEDQorUmVwb3J0UHJl TWVtRnYgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIGlmIChJb0JpdEZpZWxkUmVhZDE2KElDSDEw X1BNQkFTRV9JTyArIDQsIDEwLCAxMikgIT0gMHg1KSB7IC8vIG5vdCBTMyByZXN1bWUNCisgICAg UGVpRnZJbml0aWFsaXphdGlvbigpOw0KKyAgfQ0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAi SW5zdGFsbCBGbGFzaEZ2U2VjdXJpdHkgLSAweCV4LCAweCV4XG4iLCBQY2RHZXQzMiAoUGNkRmxh c2hGdlNlY3VyaXR5QmFzZSksIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlTaXplKSkpOw0K KyAgUGVpU2VydmljZXNJbnN0YWxsRnZJbmZvMlBwaSAoDQorICAgICYoKChFRklfRklSTVdBUkVf Vk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlCYXNl KSktPkZpbGVTeXN0ZW1HdWlkKSwNCisgICAgKFZPSUQgKikgKFVJTlROKSBQY2RHZXQzMiAoUGNk Rmxhc2hGdlNlY3VyaXR5QmFzZSksDQorICAgIFBjZEdldDMyIChQY2RGbGFzaEZ2U2VjdXJpdHlT aXplKSwNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCisgICAgMA0KKyAgICApOw0KKyAgREVCVUcg KChERUJVR19JTkZPLCAiSW5zdGFsbCBGbGFzaEZ2QWR2YW5jZWQgLSAweCV4LCAweCV4XG4iLCBQ Y2RHZXQzMiAoUGNkRmxhc2hGdkFkdmFuY2VkQmFzZSksIFBjZEdldDMyIChQY2RGbGFzaEZ2QWR2 YW5jZWRTaXplKSkpOw0KKyAgUGVpU2VydmljZXNJbnN0YWxsRnZJbmZvMlBwaSAoDQorICAgICYo KChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFz aEZ2QWR2YW5jZWRCYXNlKSktPkZpbGVTeXN0ZW1HdWlkKSwNCisgICAgKFZPSUQgKikgKFVJTlRO KSBQY2RHZXQzMiAoUGNkRmxhc2hGdkFkdmFuY2VkQmFzZSksDQorICAgIFBjZEdldDMyIChQY2RG bGFzaEZ2QWR2YW5jZWRTaXplKSwNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCisgICAgMA0KKyAg ICApOw0KK30NCisNCitWT0lEDQorUmVwb3J0UG9zdE1lbUZ2ICgNCisgIFZPSUQNCisgICkNCit7 DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfQk9PVF9N T0RFICAgICAgICAgICAgICAgICBCb290TW9kZTsNCisNCisgIFN0YXR1cyA9IFBlaVNlcnZpY2Vz R2V0Qm9vdE1vZGUgKCZCb290TW9kZSk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K Kw0KKyAgLy8vDQorICAvLy8gQnVpbGQgSE9CIGZvciBEWEUNCisgIC8vLw0KKyAgaWYgKEJvb3RN b2RlID09IEJPT1RfSU5fUkVDT1ZFUllfTU9ERSkgew0KKyAgICAvLy8NCisgICAgLy8vIFByZXBh cmUgdGhlIHJlY292ZXJ5IHNlcnZpY2UNCisgICAgLy8vDQorICB9IGVsc2Ugew0KKyAgICBERUJV RyAoKERFQlVHX0lORk8sICJJbnN0YWxsIEZsYXNoRnZQb3N0TWVtb3J5IC0gMHgleCwgMHgleFxu IiwgUGNkR2V0MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5QmFzZSksIFBjZEdldDMyIChQY2RGbGFz aEZ2UG9zdE1lbW9yeVNpemUpKSk7DQorICAgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5mbzJQcGkg KA0KKyAgICAgICYoKChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdl dDMyIChQY2RGbGFzaEZ2UG9zdE1lbW9yeUJhc2UpKS0+RmlsZVN5c3RlbUd1aWQpLA0KKyAgICAg IChWT0lEICopIChVSU5UTikgUGNkR2V0MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5QmFzZSksDQor ICAgICAgUGNkR2V0MzIgKFBjZEZsYXNoRnZQb3N0TWVtb3J5U2l6ZSksDQorICAgICAgTlVMTCwN CisgICAgICBOVUxMLA0KKyAgICAgIDANCisgICAgICApOw0KKyAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJJbnN0YWxsIEZsYXNoRnZVZWZpQm9vdCAtIDB4JXgsIDB4JXhcbiIsIFBjZEdldDMyIChQ Y2RGbGFzaEZ2VWVmaUJvb3RCYXNlKSwgUGNkR2V0MzIgKFBjZEZsYXNoRnZVZWZpQm9vdFNpemUp KSk7DQorICAgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2SW5mbzJQcGkgKA0KKyAgICAgICYoKChFRklf RklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2VWVm aUJvb3RCYXNlKSktPkZpbGVTeXN0ZW1HdWlkKSwNCisgICAgICAoVk9JRCAqKSAoVUlOVE4pIFBj ZEdldDMyIChQY2RGbGFzaEZ2VWVmaUJvb3RCYXNlKSwNCisgICAgICBQY2RHZXQzMiAoUGNkRmxh c2hGdlVlZmlCb290U2l6ZSksDQorICAgICAgTlVMTCwNCisgICAgICBOVUxMLA0KKyAgICAgIDAN CisgICAgICApOw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJJbnN0YWxsIEZsYXNoRnZPc0Jv b3QgLSAweCV4LCAweCV4XG4iLCBQY2RHZXQzMiAoUGNkRmxhc2hGdk9zQm9vdEJhc2UpLCBQY2RH ZXQzMiAoUGNkRmxhc2hGdk9zQm9vdFNpemUpKSk7DQorICAgIFBlaVNlcnZpY2VzSW5zdGFsbEZ2 SW5mbzJQcGkgKA0KKyAgICAgICYoKChFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAqKSAoVUlO VE4pIFBjZEdldDMyIChQY2RGbGFzaEZ2T3NCb290QmFzZSkpLT5GaWxlU3lzdGVtR3VpZCksDQor ICAgICAgKFZPSUQgKikgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hGdk9zQm9vdEJhc2UpLA0K KyAgICAgIFBjZEdldDMyIChQY2RGbGFzaEZ2T3NCb290U2l6ZSksDQorICAgICAgTlVMTCwNCisg ICAgICBOVUxMLA0KKyAgICAgIDANCisgICAgICApOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFJl cG9ydCByZXNvdXJjZSBIT0IgZm9yIGZsYXNoIEZWDQorICAvLw0KKyAgQnVpbGRSZXNvdXJjZURl c2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfTUVNT1JZX01BUFBFRF9JTywNCisgICAg KEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAgICB8DQorICAgIEVGSV9SRVNPVVJDRV9B VFRSSUJVVEVfSU5JVElBTElaRUQgfA0KKyAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FD SEVBQkxFKSwNCisgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxhc2hBcmVhQmFzZUFkZHJlc3Mp LA0KKyAgICAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEFyZWFTaXplKQ0KKyAgICApOw0KKyAg QnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkRmxh c2hBcmVhQmFzZUFkZHJlc3MpLA0KKyAgICAoVUlOVE4pIFBjZEdldDMyIChQY2RGbGFzaEFyZWFT aXplKSwNCisgICAgRWZpTWVtb3J5TWFwcGVkSU8NCisgICAgKTsNCit9DQpkaWZmIC0tZ2l0IGEv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFu YWdlckxpYi9CZHNQbGF0Zm9ybS5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9CZHNQbGF0Zm9ybS5jDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMTE3YzcyYjM1Zg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1C b290TWFuYWdlckxpYi9CZHNQbGF0Zm9ybS5jDQpAQCAtMCwwICsxLDE1NTMgQEANCisvKiogQGZp bGUNCisgIFBsYXRmb3JtIEJEUyBjdXN0b21pemF0aW9ucy4NCisNCisgIENvcHlyaWdodCAoYykg MjAwNCAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4N CisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiov DQorDQorI2luY2x1ZGUgIkJkc1BsYXRmb3JtLmgiDQorI2luY2x1ZGUgPEd1aWQvUm9vdEJyaWRn ZXNDb25uZWN0ZWRFdmVudEdyb3VwLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0Zpcm13YXJlVm9s dW1lMi5oPg0KKw0KKyNkZWZpbmUgTEVHQUNZXzgyNTlfTUFTS19SRUdJU1RFUl9NQVNURVIgICAg ICAgICAgICAgICAgICAweDIxDQorI2RlZmluZSBMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVSX1NM QVZFICAgICAgICAgICAgICAgICAgIDB4QTENCisjZGVmaW5lIExFR0FDWV84MjU5X0VER0VfTEVW RUxfVFJJR0dFUkVEX1JFR0lTVEVSX01BU1RFUiAgMHg0RDANCisjZGVmaW5lIExFR0FDWV84MjU5 X0VER0VfTEVWRUxfVFJJR0dFUkVEX1JFR0lTVEVSX1NMQVZFICAgMHg0RDENCisNCisvLw0KKy8v IEdsb2JhbCBkYXRhDQorLy8NCisNCitWT0lEICAgICAgICAgICptRWZpRGV2UGF0aE5vdGlmeVJl ZzsNCitFRklfRVZFTlQgICAgIG1FZmlEZXZQYXRoRXZlbnQ7DQorVk9JRCAgICAgICAgICAqbUVt dVZhcmlhYmxlRXZlbnRSZWc7DQorRUZJX0VWRU5UICAgICBtRW11VmFyaWFibGVFdmVudDsNCitC T09MRUFOICAgICAgIG1EZXRlY3RWZ2FPbmx5Ow0KK1VJTlQxNiAgICAgICAgbUhvc3RCcmlkZ2VE ZXZJZDsNCisNCisvLw0KKy8vIFRhYmxlIG9mIGhvc3QgSVJRcyBtYXRjaGluZyBQQ0kgSVJRcyBB LUQNCisvLyAoZm9yIGNvbmZpZ3VyaW5nIFBDSSBJbnRlcnJ1cHQgTGluZSByZWdpc3RlcikNCisv Lw0KK0NPTlNUIFVJTlQ4IFBjaUhvc3RJcnFzW10gPSB7DQorICAweDBhLCAweDBhLCAweDBiLCAw eDBiDQorfTsNCisNCisvLw0KKy8vIFR5cGUgZGVmaW5pdGlvbnMNCisvLw0KKw0KK3R5cGVkZWYN CitFRklfU1RBVFVTDQorKEVGSUFQSSAqUFJPVE9DT0xfSU5TVEFOQ0VfQ0FMTEJBQ0spKA0KKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgSGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAg ICAgKkluc3RhbmNlLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgKkNvbnRleHQNCisgICk7 DQorDQorLyoqDQorICBAcGFyYW1baW5dICBIYW5kbGUgLSBIYW5kbGUgb2YgUENJIGRldmljZSBp bnN0YW5jZQ0KKyAgQHBhcmFtW2luXSAgUGNpSW8gLSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UN CisgIEBwYXJhbVtpbl0gIFBjaSAtIFBDSSBIZWFkZXIgcmVnaXN0ZXIgYmxvY2sNCisqKi8NCit0 eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKlZJU0lUX1BDSV9JTlNUQU5DRV9DQUxMQkFD SykoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICBIYW5kbGUsDQorICBJTiBFRklfUENJX0lP X1BST1RPQ09MICAqUGNpSW8sDQorICBJTiBQQ0lfVFlQRTAwICAgICAgICAgICAqUGNpDQorICAp Ow0KKw0KKw0KKy8vDQorLy8gRnVuY3Rpb24gcHJvdG90eXBlcw0KKy8vDQorDQorRUZJX1NUQVRV Uw0KK1Zpc2l0QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICBJTiBFRklfR1VJRCAgICAgICAg ICAgICAgICAgICAgKklkLA0KKyAgSU4gUFJPVE9DT0xfSU5TVEFOQ0VfQ0FMTEJBQ0sgIENhbGxC YWNrRnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQN CisgICk7DQorDQorRUZJX1NUQVRVUw0KK1Zpc2l0QWxsUGNpSW5zdGFuY2VzT2ZQcm90b2NvbCAo DQorICBJTiBWSVNJVF9QQ0lfSU5TVEFOQ0VfQ0FMTEJBQ0sgQ2FsbEJhY2tGdW5jdGlvbg0KKyAg KTsNCisNCitWT0lEDQorSW5zdGFsbERldmljZVBhdGhDYWxsYmFjayAoDQorICBWT0lEDQorICAp Ow0KKw0KK1ZPSUQNCitQbGF0Zm9ybVJlZ2lzdGVyRnZCb290T3B0aW9uICgNCisgIEVGSV9HVUlE ICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlR3VpZCwNCisgIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICpEZXNjcmlwdGlvbiwNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICAgIEF0dHJpYnV0ZXMNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICAgICAgU3RhdHVzOw0KKyAgSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9wdGlvbkluZGV4Ow0KKyAgRUZJX0JPT1RfTUFOQUdFUl9MT0FEX09QVElPTiAgICAgIE5ld09w dGlvbjsNCisgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gICAgICAqQm9vdE9wdGlvbnM7 DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vdE9wdGlvbkNvdW50Ow0K KyAgTUVESUFfRldfVk9MX0ZJTEVQQVRIX0RFVklDRV9QQVRIIEZpbGVOb2RlOw0KKyAgRUZJX0xP QURFRF9JTUFHRV9QUk9UT0NPTCAgICAgICAgICpMb2FkZWRJbWFnZTsNCisgIEVGSV9ERVZJQ0Vf UEFUSF9QUk9UT0NPTCAgICAgICAgICAqRGV2aWNlUGF0aDsNCisNCisgIFN0YXR1cyA9IGdCUy0+ SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCisgICAg ICAgICAgICAgICAgICAmZ0VmaUxvYWRlZEltYWdlUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmTG9hZGVkSW1hZ2UNCisgICAgICAgICAgICAgICAgICApOw0KKyAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgIEVmaUluaXRpYWxpemVGd1ZvbERldmlj ZXBhdGhOb2RlICgmRmlsZU5vZGUsIEZpbGVHdWlkKTsNCisgIERldmljZVBhdGggPSBEZXZpY2VQ YXRoRnJvbUhhbmRsZSAoTG9hZGVkSW1hZ2UtPkRldmljZUhhbmRsZSk7DQorICBBU1NFUlQgKERl dmljZVBhdGggIT0gTlVMTCk7DQorICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUg KA0KKyAgICAgICAgICAgICAgICAgRGV2aWNlUGF0aCwNCisgICAgICAgICAgICAgICAgIChFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgKikgJkZpbGVOb2RlDQorICAgICAgICAgICAgICAgICApOw0K KyAgQVNTRVJUIChEZXZpY2VQYXRoICE9IE5VTEwpOw0KKw0KKyAgU3RhdHVzID0gRWZpQm9vdE1h bmFnZXJJbml0aWFsaXplTG9hZE9wdGlvbiAoDQorICAgICAgICAgICAgICZOZXdPcHRpb24sDQor ICAgICAgICAgICAgIExvYWRPcHRpb25OdW1iZXJVbmFzc2lnbmVkLA0KKyAgICAgICAgICAgICBM b2FkT3B0aW9uVHlwZUJvb3QsDQorICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICAgICAgICAg ICAgIERlc2NyaXB0aW9uLA0KKyAgICAgICAgICAgICBEZXZpY2VQYXRoLA0KKyAgICAgICAgICAg ICBOVUxMLA0KKyAgICAgICAgICAgICAwDQorICAgICAgICAgICAgICk7DQorICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KKyAgRnJlZVBvb2wgKERldmljZVBhdGgpOw0KKw0KKyAgQm9vdE9w dGlvbnMgPSBFZmlCb290TWFuYWdlckdldExvYWRPcHRpb25zICgNCisgICAgICAgICAgICAgICAg ICAmQm9vdE9wdGlvbkNvdW50LCBMb2FkT3B0aW9uVHlwZUJvb3QNCisgICAgICAgICAgICAgICAg ICApOw0KKw0KKyAgT3B0aW9uSW5kZXggPSBFZmlCb290TWFuYWdlckZpbmRMb2FkT3B0aW9uICgN CisgICAgICAgICAgICAgICAgICAmTmV3T3B0aW9uLCBCb290T3B0aW9ucywgQm9vdE9wdGlvbkNv dW50DQorICAgICAgICAgICAgICAgICAgKTsNCisNCisgIGlmIChPcHRpb25JbmRleCA9PSAtMSkg ew0KKyAgICBTdGF0dXMgPSBFZmlCb290TWFuYWdlckFkZExvYWRPcHRpb25WYXJpYWJsZSAoJk5l d09wdGlvbiwgTUFYX1VJTlROKTsNCisgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisg IH0NCisgIEVmaUJvb3RNYW5hZ2VyRnJlZUxvYWRPcHRpb24gKCZOZXdPcHRpb24pOw0KKyAgRWZp Qm9vdE1hbmFnZXJGcmVlTG9hZE9wdGlvbnMgKEJvb3RPcHRpb25zLCBCb290T3B0aW9uQ291bnQp Ow0KK30NCisNCisvKioNCisgIFJlbW92ZSBhbGwgTWVtb3J5TWFwcGVkKC4uLikvRnZGaWxlKC4u LikgYW5kIEZ2KC4uLikvRnZGaWxlKC4uLikgYm9vdCBvcHRpb25zDQorICB3aG9zZSBkZXZpY2Ug cGF0aHMgZG8gbm90IHJlc29sdmUgZXhhY3RseSB0byBhbiBGdkZpbGUgaW4gdGhlIHN5c3RlbS4N CisNCisgIFRoaXMgcmVtb3ZlcyBhbnkgYm9vdCBvcHRpb25zIHRoYXQgcG9pbnQgdG8gYmluYXJp ZXMgYnVpbHQgaW50byB0aGUgZmlybXdhcmUNCisgIGFuZCBoYXZlIGJlY29tZSBzdGFsZSBkdWUg dG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6DQorICAtIERYRUZWJ3MgYmFzZSBhZGRyZXNzIG9yIHNp emUgY2hhbmdlZCAoaGlzdG9yaWNhbCksDQorICAtIERYRUZWJ3MgRnZOYW1lR3VpZCBjaGFuZ2Vk LA0KKyAgLSB0aGUgRklMRV9HVUlEIG9mIHRoZSBwb2ludGVkLXRvIGJpbmFyeSBjaGFuZ2VkLA0K KyAgLSB0aGUgcmVmZXJlbmNlZCBiaW5hcnkgaXMgbm8gbG9uZ2VyIGJ1aWx0IGludG8gdGhlIGZp cm13YXJlLg0KKw0KKyAgRWZpQm9vdE1hbmFnZXJGaW5kTG9hZE9wdGlvbigpIHVzZWQgaW4gUGxh dGZvcm1SZWdpc3RlckZ2Qm9vdE9wdGlvbigpIG9ubHkNCisgIGF2b2lkcyBleGFjdCBkdXBsaWNh dGVzLg0KKyoqLw0KK1ZPSUQNCitSZW1vdmVTdGFsZUZ2RmlsZU9wdGlvbnMgKA0KKyAgVk9JRA0K KyAgKQ0KK3sNCisgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gKkJvb3RPcHRpb25zOw0K KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBCb290T3B0aW9uQ291bnQ7DQorICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKw0KKyAgQm9vdE9wdGlvbnMgPSBFZmlC b290TWFuYWdlckdldExvYWRPcHRpb25zICgmQm9vdE9wdGlvbkNvdW50LA0KKyAgICAgICAgICAg ICAgICAgIExvYWRPcHRpb25UeXBlQm9vdCk7DQorDQorICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBCb290T3B0aW9uQ291bnQ7ICsrSW5kZXgpIHsNCisgICAgRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MICpOb2RlMSwgKk5vZGUyLCAqU2VhcmNoTm9kZTsNCisgICAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgIFN0YXR1czsNCisgICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgIEZ2SGFuZGxlOw0K Kw0KKyAgICAvLw0KKyAgICAvLyBJZiB0aGUgZGV2aWNlIHBhdGggc3RhcnRzIHdpdGggbmVpdGhl ciBNZW1vcnlNYXBwZWQoLi4uKSBub3IgRnYoLi4uKSwNCisgICAgLy8gdGhlbiBrZWVwIHRoZSBi b290IG9wdGlvbi4NCisgICAgLy8NCisgICAgTm9kZTEgPSBCb290T3B0aW9uc1tJbmRleF0uRmls ZVBhdGg7DQorICAgIGlmICghKERldmljZVBhdGhUeXBlIChOb2RlMSkgPT0gSEFSRFdBUkVfREVW SUNFX1BBVEggJiYNCisgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUgKE5vZGUxKSA9PSBIV19N RU1NQVBfRFApICYmDQorICAgICAgICAhKERldmljZVBhdGhUeXBlIChOb2RlMSkgPT0gTUVESUFf REVWSUNFX1BBVEggJiYNCisgICAgICAgICAgRGV2aWNlUGF0aFN1YlR5cGUgKE5vZGUxKSA9PSBN RURJQV9QSVdHX0ZXX1ZPTF9EUCkpIHsNCisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAg ICAvLw0KKyAgICAvLyBJZiB0aGUgc2Vjb25kIGRldmljZSBwYXRoIG5vZGUgaXMgbm90IEZ2Rmls ZSguLi4pLCB0aGVuIGtlZXAgdGhlIGJvb3QNCisgICAgLy8gb3B0aW9uLg0KKyAgICAvLw0KKyAg ICBOb2RlMiA9IE5leHREZXZpY2VQYXRoTm9kZSAoTm9kZTEpOw0KKyAgICBpZiAoRGV2aWNlUGF0 aFR5cGUgKE5vZGUyKSAhPSBNRURJQV9ERVZJQ0VfUEFUSCB8fA0KKyAgICAgICAgRGV2aWNlUGF0 aFN1YlR5cGUgKE5vZGUyKSAhPSBNRURJQV9QSVdHX0ZXX0ZJTEVfRFApIHsNCisgICAgICBjb250 aW51ZTsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBMb2NhdGUgdGhlIEZpcm13YXJlIFZv bHVtZTIgcHJvdG9jb2wgaW5zdGFuY2UgdGhhdCBpcyBkZW5vdGVkIGJ5IHRoZQ0KKyAgICAvLyBi b290IG9wdGlvbi4gSWYgdGhpcyBsb29rdXAgZmFpbHMgKGkuZS4sIHRoZSBib290IG9wdGlvbiBy ZWZlcmVuY2VzIGENCisgICAgLy8gZmlybXdhcmUgdm9sdW1lIHRoYXQgZG9lc24ndCBleGlzdCks IHRoZW4gd2UnbGwgcHJvY2VlZCB0byBkZWxldGUgdGhlDQorICAgIC8vIGJvb3Qgb3B0aW9uLg0K KyAgICAvLw0KKyAgICBTZWFyY2hOb2RlID0gTm9kZTE7DQorICAgIFN0YXR1cyA9IGdCUy0+TG9j YXRlRGV2aWNlUGF0aCAoJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQsDQorICAgICAg ICAgICAgICAgICAgICAmU2VhcmNoTm9kZSwgJkZ2SGFuZGxlKTsNCisNCisgICAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgICAvLw0KKyAgICAgIC8vIFRoZSBmaXJtd2FyZSB2b2x1 bWUgd2FzIGZvdW5kOyBub3cgbGV0J3Mgc2VlIGlmIGl0IGNvbnRhaW5zIHRoZSBGdkZpbGUNCisg ICAgICAvLyBpZGVudGlmaWVkIGJ5IEdVSUQuDQorICAgICAgLy8NCisgICAgICBFRklfRklSTVdB UkVfVk9MVU1FMl9QUk9UT0NPTCAgICAgKkZ2UHJvdG9jb2w7DQorICAgICAgTUVESUFfRldfVk9M X0ZJTEVQQVRIX0RFVklDRV9QQVRIICpGdkZpbGVOb2RlOw0KKyAgICAgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KKyAgICAgIEVGSV9GVl9GSUxFVFlQRSAg ICAgICAgICAgICAgICAgICBGb3VuZFR5cGU7DQorICAgICAgRUZJX0ZWX0ZJTEVfQVRUUklCVVRF UyAgICAgICAgICAgIEZpbGVBdHRyaWJ1dGVzOw0KKyAgICAgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvblN0YXR1czsNCisNCisgICAgICBTdGF0dXMgPSBn QlMtPkhhbmRsZVByb3RvY29sIChGdkhhbmRsZSwgJmdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2Nv bEd1aWQsDQorICAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZGdlByb3RvY29sKTsNCisg ICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgICAgIEZ2RmlsZU5vZGUgPSAo TUVESUFfRldfVk9MX0ZJTEVQQVRIX0RFVklDRV9QQVRIICopTm9kZTI7DQorICAgICAgLy8NCisg ICAgICAvLyBCdWZmZXI9PU5VTEwgbWVhbnMgd2UgcmVxdWVzdCBtZXRhZGF0YSBvbmx5OiBCdWZm ZXJTaXplLCBGb3VuZFR5cGUsDQorICAgICAgLy8gRmlsZUF0dHJpYnV0ZXMuDQorICAgICAgLy8N CisgICAgICBTdGF0dXMgPSBGdlByb3RvY29sLT5SZWFkRmlsZSAoDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGdlByb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkZ2RmlsZU5vZGUtPkZ2RmlsZU5hbWUsIC8vIE5hbWVHdWlkDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLy8gQnVmZmVyDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmQnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZGb3VuZFR5cGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUF0 dHJpYnV0ZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXV0aGVudGljYXRpb25T dGF0dXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgICAgIC8vDQorICAgICAgICAvLyBUaGUgRnZGaWxlIHdh cyBmb3VuZC4gS2VlcCB0aGUgYm9vdCBvcHRpb24uDQorICAgICAgICAvLw0KKyAgICAgICAgY29u dGludWU7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIERlbGV0ZSB0aGUg Ym9vdCBvcHRpb24uDQorICAgIC8vDQorICAgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyRGVsZXRl TG9hZE9wdGlvblZhcmlhYmxlICgNCisgICAgICAgICAgICAgICBCb290T3B0aW9uc1tJbmRleF0u T3B0aW9uTnVtYmVyLCBMb2FkT3B0aW9uVHlwZUJvb3QpOw0KKyAgICBERUJVR19DT0RFICgNCisg ICAgICBDSEFSMTYgKkRldmljZVBhdGhTdHJpbmc7DQorDQorICAgICAgRGV2aWNlUGF0aFN0cmlu ZyA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0KEJvb3RPcHRpb25zW0luZGV4XS5GaWxlUGF0aCwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UpOw0KKyAgICAgIERFQlVH ICgoDQorICAgICAgICBFRklfRVJST1IgKFN0YXR1cykgPyBFRklfRF9XQVJOIDogRUZJX0RfVkVS Qk9TRSwNCisgICAgICAgICIlYTogcmVtb3Zpbmcgc3RhbGUgQm9vdCMlMDR4ICVzOiAlclxuIiwN CisgICAgICAgIF9fRlVOQ1RJT05fXywNCisgICAgICAgIChVSU5UMzIpQm9vdE9wdGlvbnNbSW5k ZXhdLk9wdGlvbk51bWJlciwNCisgICAgICAgIERldmljZVBhdGhTdHJpbmcgPT0gTlVMTCA/IEwi PHVuYXZhaWxhYmxlPiIgOiBEZXZpY2VQYXRoU3RyaW5nLA0KKyAgICAgICAgU3RhdHVzDQorICAg ICAgICApKTsNCisgICAgICBpZiAoRGV2aWNlUGF0aFN0cmluZyAhPSBOVUxMKSB7DQorICAgICAg ICBGcmVlUG9vbCAoRGV2aWNlUGF0aFN0cmluZyk7DQorICAgICAgfQ0KKyAgICAgICk7DQorICB9 DQorDQorICBFZmlCb290TWFuYWdlckZyZWVMb2FkT3B0aW9ucyAoQm9vdE9wdGlvbnMsIEJvb3RP cHRpb25Db3VudCk7DQorfQ0KKw0KK1ZPSUQNCitQbGF0Zm9ybVJlZ2lzdGVyT3B0aW9uc0FuZEtl eXMgKA0KKyAgVk9JRA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KKyAgRUZJX0lOUFVUX0tFWSAgICAgICAgICAgICAgICBFbnRlcjsNCisgIEVGSV9J TlBVVF9LRVkgICAgICAgICAgICAgICAgRjI7DQorICBFRklfSU5QVVRfS0VZICAgICAgICAgICAg ICAgIEVzYzsNCisgIEVGSV9CT09UX01BTkFHRVJfTE9BRF9PUFRJT04gQm9vdE9wdGlvbjsNCisN CisgIC8vDQorICAvLyBSZWdpc3RlciBFTlRFUiBhcyBDT05USU5VRSBrZXkNCisgIC8vDQorICBF bnRlci5TY2FuQ29kZSAgICA9IFNDQU5fTlVMTDsNCisgIEVudGVyLlVuaWNvZGVDaGFyID0gQ0hB Ul9DQVJSSUFHRV9SRVRVUk47DQorICBTdGF0dXMgPSBFZmlCb290TWFuYWdlclJlZ2lzdGVyQ29u dGludWVLZXlPcHRpb24gKDAsICZFbnRlciwgTlVMTCk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KKw0KKyAgLy8NCisgIC8vIE1hcCBGMiB0byBCb290IE1hbmFnZXIgTWVudQ0KKyAg Ly8NCisgIEYyLlNjYW5Db2RlICAgICA9IFNDQU5fRjI7DQorICBGMi5Vbmljb2RlQ2hhciAgPSBD SEFSX05VTEw7DQorICBFc2MuU2NhbkNvZGUgICAgPSBTQ0FOX0VTQzsNCisgIEVzYy5Vbmljb2Rl Q2hhciA9IENIQVJfTlVMTDsNCisgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2VyR2V0Qm9vdE1hbmFn ZXJNZW51ICgmQm9vdE9wdGlvbik7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKyAg U3RhdHVzID0gRWZpQm9vdE1hbmFnZXJBZGRLZXlPcHRpb25WYXJpYWJsZSAoDQorICAgICAgICAg ICAgIE5VTEwsIChVSU5UMTYpIEJvb3RPcHRpb24uT3B0aW9uTnVtYmVyLCAwLCAmRjIsIE5VTEwN CisgICAgICAgICAgICAgKTsNCisgIEFTU0VSVCAoU3RhdHVzID09IEVGSV9TVUNDRVNTIHx8IFN0 YXR1cyA9PSBFRklfQUxSRUFEWV9TVEFSVEVEKTsNCisgIFN0YXR1cyA9IEVmaUJvb3RNYW5hZ2Vy QWRkS2V5T3B0aW9uVmFyaWFibGUgKA0KKyAgICAgICAgICAgICBOVUxMLCAoVUlOVDE2KSBCb290 T3B0aW9uLk9wdGlvbk51bWJlciwgMCwgJkVzYywgTlVMTA0KKyAgICAgICAgICAgICApOw0KKyAg QVNTRVJUIChTdGF0dXMgPT0gRUZJX1NVQ0NFU1MgfHwgU3RhdHVzID09IEVGSV9BTFJFQURZX1NU QVJURUQpOw0KK30NCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQ29ubmVjdFJvb3RCcmlkZ2Ug KA0KKyAgSU4gRUZJX0hBTkRMRSAgUm9vdEJyaWRnZUhhbmRsZSwNCisgIElOIFZPSUQgICAgICAg ICpJbnN0YW5jZSwNCisgIElOIFZPSUQgICAgICAgICpDb250ZXh0DQorICApOw0KKw0KK1NUQVRJ Qw0KK1ZPSUQNCitTYXZlUzNCb290U2NyaXB0ICgNCisgIFZPSUQNCisgICk7DQorDQorLy8NCisv LyBCRFMgUGxhdGZvcm0gRnVuY3Rpb25zDQorLy8NCisvKioNCisgIERvIHRoZSBwbGF0Zm9ybSBp bml0LCBjYW4gYmUgY3VzdG9taXplZCBieSBPRU0vSUJWDQorDQorICBQb3NzaWJsZSB0aGluZ3Mg dGhhdCBjYW4gYmUgZG9uZSBpbiBQbGF0Zm9ybUJvb3RNYW5hZ2VyQmVmb3JlQ29uc29sZToNCisN CisgID4gVXBkYXRlIGNvbnNvbGUgdmFyaWFibGU6IDEuIGluY2x1ZGUgaG90LXBsdWcgZGV2aWNl czsNCisgID4gICAgICAgICAgICAgICAgICAgICAgICAgIDIuIENsZWFyIENvbkluIGFuZCBhZGQg U09MIGZvciBBTVQNCisgID4gUmVnaXN0ZXIgbmV3IERyaXZlciMjIyMgb3IgQm9vdCMjIyMNCisg ID4gUmVnaXN0ZXIgbmV3IEtleSMjIyM6IGUuZy46IEYxMg0KKyAgPiBTaWduYWwgUmVhZHlUb0xv Y2sgZXZlbnQNCisgID4gQXV0aGVudGljYXRpb24gYWN0aW9uOiAxLiBjb25uZWN0IEF1dGggZGV2 aWNlczsNCisgID4gICAgICAgICAgICAgICAgICAgICAgICAyLiBJZGVudGlmeSBhdXRvIGxvZ29u IHVzZXIuDQorKiovDQorVk9JRA0KK0VGSUFQSQ0KK1BsYXRmb3JtQm9vdE1hbmFnZXJCZWZvcmVD b25zb2xlICgNCisgIFZPSUQNCisgICkNCit7DQorLy8gIEVGSV9IQU5ETEUgICAgSGFuZGxlOw0K Ky8vICBFRklfU1RBVFVTICAgIFN0YXR1czsNCisNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIlBs YXRmb3JtQm9vdE1hbmFnZXJCZWZvcmVDb25zb2xlXG4iKSk7DQorICBJbnN0YWxsRGV2aWNlUGF0 aENhbGxiYWNrICgpOw0KKw0KKyAgVmlzaXRBbGxJbnN0YW5jZXNPZlByb3RvY29sICgmZ0VmaVBj aVJvb3RCcmlkZ2VJb1Byb3RvY29sR3VpZCwNCisgICAgQ29ubmVjdFJvb3RCcmlkZ2UsIE5VTEwp Ow0KKyAgLy8NCisgIC8vIEVuYWJsZSBMUEMNCisgIC8vDQorICBQY2lPcjE2KFBPV0VSX01HTVRf UkVHSVNURVJfSUNIMTAoMHgwNCksDQorICAgICAgICAgICBCSVQwIHwgQklUMSB8IEJJVDIpOw0K KyAgLy8NCisgIC8vIFdlIGNhbid0IHNpZ25hbCBFbmQtb2YtRHhlIGVhcmxpZXIgdGhhbiB0aGlz LiBOYW1lbHksIEVuZC1vZi1EeGUgdHJpZ2dlcnMNCisgIC8vIHRoZSBwcmVwYXJhdGlvbiBvZiBT MyBzeXN0ZW0gaW5mb3JtYXRpb24uIFRoYXQgbG9naWMgaGFzIGEgaGFyZCBkZXBlbmRlbmN5DQor ICAvLyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIEZBQ1MgQUNQSSB0YWJsZS4gU2luY2Ugb3VyIEFD UEkgdGFibGVzIGFyZSBvbmx5DQorICAvLyBpbnN0YWxsZWQgYWZ0ZXIgUENJIGVudW1lcmF0aW9u IGNvbXBsZXRlcywgd2UgbXVzdCBub3QgdHJpZ2dlciB0aGUgUzMgc2F2ZQ0KKyAgLy8gZWFybGll ciwgaGVuY2Ugd2UgY2FuJ3Qgc2lnbmFsIEVuZC1vZi1EeGUgZWFybGllci4NCisgIC8vDQorICBF ZmlFdmVudEdyb3VwU2lnbmFsICgmZ0VmaUVuZE9mRHhlRXZlbnRHcm91cEd1aWQpOw0KKw0KKyAg UGxhdGZvcm1Jbml0aWFsaXplQ29uc29sZSAoZ1BsYXRmb3JtQ29uc29sZSk7DQorDQorICBQbGF0 Zm9ybVJlZ2lzdGVyT3B0aW9uc0FuZEtleXMgKCk7DQorfQ0KKw0KKw0KK0VGSV9TVEFUVVMNCitF RklBUEkNCitDb25uZWN0Um9vdEJyaWRnZSAoDQorICBJTiBFRklfSEFORExFICBSb290QnJpZGdl SGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgKkluc3RhbmNlLA0KKyAgSU4gVk9JRCAgICAgICAg KkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTIFN0YXR1czsNCisNCisgIC8vDQorICAv LyBNYWtlIHRoZSBQQ0kgYnVzIGRyaXZlciBjb25uZWN0IHRoZSByb290IGJyaWRnZSwgbm9uLXJl Y3Vyc2l2ZWx5LiBUaGlzDQorICAvLyB3aWxsIHByb2R1Y2UgYSBudW1iZXIgb2YgY2hpbGQgaGFu ZGxlcyB3aXRoIFBjaUlvIG9uIHRoZW0uDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5Db25uZWN0 Q29udHJvbGxlciAoDQorICAgICAgICAgICAgICAgICAgUm9vdEJyaWRnZUhhbmRsZSwgLy8gQ29u dHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgIC8vIERy aXZlckltYWdlSGFuZGxlDQorICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgLy8g UmVtYWluaW5nRGV2aWNlUGF0aCAtLSBwcm9kdWNlIGFsbA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vICAgY2hpbGRyZW4NCisgICAgICAgICAgICAgICAgICBGQUxTRSAg ICAgICAgICAgICAvLyBSZWN1cnNpdmUNCisgICAgICAgICAgICAgICAgICApOw0KKyAgcmV0dXJu IFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBBZGQgSXNhS2V5Ym9hcmQgdG8gQ29uSW47IGFk ZCBJc2FTZXJpYWwgdG8gQ29uT3V0LCBDb25JbiwgRXJyT3V0Lg0KKw0KKyAgQHBhcmFtW2luXSBE ZXZpY2VIYW5kbGUgIEhhbmRsZSBvZiB0aGUgTFBDIEJyaWRnZSBkZXZpY2UuDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICBDb25zb2xlIGRldmljZXMgb24gdGhlIExQQyBicmlkZ2UgaGF2ZSBi ZWVuIGFkZGVkIHRvDQorICAgICAgICAgICAgICAgICAgICAgICBDb25PdXQsIENvbkluLCBhbmQg RXJyT3V0Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMsIGR1ZSB0byBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSBEZXZpY2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVMcGNCcmlkZ2VE ZXZpY2VQYXRoICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxl DQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZpY2VQYXRoOw0KKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqVGVtcERldmljZVBhdGg7DQorICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpE ZXZQYXRoU3RyOw0KKw0KKyAgRGV2aWNlUGF0aCA9IE5VTEw7DQorICBTdGF0dXMgPSBnQlMtPkhh bmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBEZXZpY2VIYW5kbGUsDQorICAgICAg ICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAg ICAgIChWT0lEKikmRGV2aWNlUGF0aA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorICBUZW1wRGV2 aWNlUGF0aCA9IERldmljZVBhdGg7DQorDQorICAvLw0KKyAgLy8gUmVnaXN0ZXIgS2V5Ym9hcmQN CisgIC8vDQorICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUgKERldmljZVBhdGgs IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKikmZ1BucFBzMktleWJvYXJkRGV2aWNlTm9kZSk7 DQorDQorICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uSW4sIERldmlj ZVBhdGgsIE5VTEwpOw0KKw0KKyAgLy8NCisgIC8vIFJlZ2lzdGVyIENPTTENCisgIC8vDQorICBE ZXZpY2VQYXRoID0gVGVtcERldmljZVBhdGg7DQorICBnUG5wMTY1NTBDb21Qb3J0RGV2aWNlTm9k ZS5VSUQgPSAwOw0KKw0KKyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZp Y2VQYXRoLCAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJmdQbnAxNjU1MENvbVBvcnREZXZp Y2VOb2RlKTsNCisgIERldmljZVBhdGggPSBBcHBlbmREZXZpY2VQYXRoTm9kZSAoRGV2aWNlUGF0 aCwgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSZnVWFydERldmljZU5vZGUpOw0KKyAgRGV2 aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZpY2VQYXRoLCAoRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICopJmdUZXJtaW5hbFR5cGVEZXZpY2VOb2RlKTsNCisNCisgIC8vDQorICAv LyBQcmludCBEZXZpY2UgUGF0aA0KKyAgLy8NCisgIERldlBhdGhTdHIgPSBDb252ZXJ0RGV2aWNl UGF0aFRvVGV4dCAoRGV2aWNlUGF0aCwgRkFMU0UsIEZBTFNFKTsNCisgIGlmIChEZXZQYXRoU3Ry ICE9IE5VTEwpIHsNCisgICAgREVCVUcoKA0KKyAgICAgIEVGSV9EX0lORk8sDQorICAgICAgIkJk c1BsYXRmb3JtLmMrJWQ6IENPTSVkIERldlBhdGg6ICVzXG4iLA0KKyAgICAgIF9fTElORV9fLA0K KyAgICAgIGdQbnAxNjU1MENvbVBvcnREZXZpY2VOb2RlLlVJRCArIDEsDQorICAgICAgRGV2UGF0 aFN0cg0KKyAgICAgICkpOw0KKyAgICBGcmVlUG9vbChEZXZQYXRoU3RyKTsNCisgIH0NCisNCisg IEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25PdXQsIERldmljZVBhdGgs IE5VTEwpOw0KKyAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFyaWFibGUgKENvbkluLCBE ZXZpY2VQYXRoLCBOVUxMKTsNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxl IChFcnJPdXQsIERldmljZVBhdGgsIE5VTEwpOw0KKw0KKyAgLy8NCisgIC8vIFJlZ2lzdGVyIENP TTINCisgIC8vDQorICBEZXZpY2VQYXRoID0gVGVtcERldmljZVBhdGg7DQorICBnUG5wMTY1NTBD b21Qb3J0RGV2aWNlTm9kZS5VSUQgPSAxOw0KKw0KKyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmlj ZVBhdGhOb2RlIChEZXZpY2VQYXRoLCAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJmdQbnAx NjU1MENvbVBvcnREZXZpY2VOb2RlKTsNCisgIERldmljZVBhdGggPSBBcHBlbmREZXZpY2VQYXRo Tm9kZSAoRGV2aWNlUGF0aCwgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSZnVWFydERldmlj ZU5vZGUpOw0KKyAgRGV2aWNlUGF0aCA9IEFwcGVuZERldmljZVBhdGhOb2RlIChEZXZpY2VQYXRo LCAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICopJmdUZXJtaW5hbFR5cGVEZXZpY2VOb2RlKTsN CisNCisgIC8vDQorICAvLyBQcmludCBEZXZpY2UgUGF0aA0KKyAgLy8NCisgIERldlBhdGhTdHIg PSBDb252ZXJ0RGV2aWNlUGF0aFRvVGV4dCAoRGV2aWNlUGF0aCwgRkFMU0UsIEZBTFNFKTsNCisg IGlmIChEZXZQYXRoU3RyICE9IE5VTEwpIHsNCisgICAgREVCVUcoKA0KKyAgICAgIEVGSV9EX0lO Rk8sDQorICAgICAgIkJkc1BsYXRmb3JtLmMrJWQ6IENPTSVkIERldlBhdGg6ICVzXG4iLA0KKyAg ICAgIF9fTElORV9fLA0KKyAgICAgIGdQbnAxNjU1MENvbVBvcnREZXZpY2VOb2RlLlVJRCArIDEs DQorICAgICAgRGV2UGF0aFN0cg0KKyAgICAgICkpOw0KKyAgICBGcmVlUG9vbChEZXZQYXRoU3Ry KTsNCisgIH0NCisNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25P dXQsIERldmljZVBhdGgsIE5VTEwpOw0KKyAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFy aWFibGUgKENvbkluLCBEZXZpY2VQYXRoLCBOVUxMKTsNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRl Q29uc29sZVZhcmlhYmxlIChFcnJPdXQsIERldmljZVBhdGgsIE5VTEwpOw0KKw0KKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KK30NCisNCitFRklfU1RBVFVTDQorR2V0R29wRGV2aWNlUGF0aCAoDQor ICAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAqUGNpRGV2aWNlUGF0aCwNCisgICBPVVQg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICoqR29wRGV2aWNlUGF0aA0KKyAgICkNCit7DQorICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICAg ICAgIFBjaURldmljZUhhbmRsZTsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAg KlRlbXBEZXZpY2VQYXRoOw0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgICAqVGVt cFBjaURldmljZVBhdGg7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdvcEhh bmRsZUNvdW50Ow0KKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqR29wSGFuZGxl QnVmZmVyOw0KKw0KKyAgaWYgKFBjaURldmljZVBhdGggPT0gTlVMTCB8fCBHb3BEZXZpY2VQYXRo ID09IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisN CisgIC8vDQorICAvLyBJbml0aWFsaXplIHRoZSBHb3BEZXZpY2VQYXRoIHRvIGJlIFBjaURldmlj ZVBhdGgNCisgIC8vDQorICAqR29wRGV2aWNlUGF0aCAgICA9IFBjaURldmljZVBhdGg7DQorICBU ZW1wUGNpRGV2aWNlUGF0aCA9IFBjaURldmljZVBhdGg7DQorDQorICBTdGF0dXMgPSBnQlMtPkxv Y2F0ZURldmljZVBhdGggKA0KKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3Rv Y29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAmVGVtcFBjaURldmljZVBhdGgsDQorICAgICAg ICAgICAgICAgICAgJlBjaURldmljZUhhbmRsZQ0KKyAgICAgICAgICAgICAgICAgICk7DQorICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQor ICAvLw0KKyAgLy8gVHJ5IHRvIGNvbm5lY3QgdGhpcyBoYW5kbGUsIHNvIHRoYXQgR09QIGRyaXZl ciBjb3VsZCBzdGFydCBvbiB0aGlzDQorICAvLyBkZXZpY2UgYW5kIGNyZWF0ZSBjaGlsZCBoYW5k bGVzIHdpdGggR3JhcGhpY3NPdXRwdXQgUHJvdG9jb2wgaW5zdGFsbGVkDQorICAvLyBvbiB0aGVt LCB0aGVuIHdlIGdldCBkZXZpY2UgcGF0aHMgb2YgdGhlc2UgY2hpbGQgaGFuZGxlcyBhbmQgc2Vs ZWN0DQorICAvLyB0aGVtIGFzIHBvc3NpYmxlIGNvbnNvbGUgZGV2aWNlLg0KKyAgLy8NCisgIGdC Uy0+Q29ubmVjdENvbnRyb2xsZXIgKFBjaURldmljZUhhbmRsZSwgTlVMTCwgTlVMTCwgRkFMU0Up Ow0KKw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgJmdFZmlHcmFwaGljc091dHB1 dFByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAg ICAgICZHb3BIYW5kbGVDb3VudCwNCisgICAgICAgICAgICAgICAgICAmR29wSGFuZGxlQnVmZmVy DQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQor ICAgIC8vDQorICAgIC8vIEFkZCBhbGwgdGhlIGNoaWxkIGhhbmRsZXMgYXMgcG9zc2libGUgQ29u c29sZSBEZXZpY2UNCisgICAgLy8NCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgR29wSGFu ZGxlQ291bnQ7IEluZGV4KyspIHsNCisgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29s IChHb3BIYW5kbGVCdWZmZXJbSW5kZXhdLCAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsIChW T0lEKikmVGVtcERldmljZVBhdGgpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIH0NCisgICAgICBpZiAoQ29tcGFyZU1lbSAoDQor ICAgICAgICAgICAgUGNpRGV2aWNlUGF0aCwNCisgICAgICAgICAgICBUZW1wRGV2aWNlUGF0aCwN CisgICAgICAgICAgICBHZXREZXZpY2VQYXRoU2l6ZSAoUGNpRGV2aWNlUGF0aCkgLSBFTkRfREVW SUNFX1BBVEhfTEVOR1RIDQorICAgICAgICAgICAgKSA9PSAwKSB7DQorICAgICAgICAvLw0KKyAg ICAgICAgLy8gSW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2Ugb25seSBlbmFibGUgb25lIG9m IHRoZSBjaGlsZCBoYW5kbGVzDQorICAgICAgICAvLyBhcyBjb25zb2xlIGRldmljZSwgaS5lLiBz b3RyZSBvbmUgb2YgdGhlIGNoaWxkIGhhbmRsZSdzIGRldmljZQ0KKyAgICAgICAgLy8gcGF0aCB0 byB2YXJpYWJsZSAiQ29uT3V0Ig0KKyAgICAgICAgLy8gSW4gZnV0dXJlLCB3ZSBjb3VsZCBzZWxl Y3QgYWxsIGNoaWxkIGhhbmRsZXMgdG8gYmUgY29uc29sZSBkZXZpY2UNCisgICAgICAgIC8vDQor DQorICAgICAgICAqR29wRGV2aWNlUGF0aCA9IFRlbXBEZXZpY2VQYXRoOw0KKw0KKyAgICAgICAg Ly8NCisgICAgICAgIC8vIERlbGV0ZSB0aGUgUENJIGRldmljZSdzIHBhdGggdGhhdCBhZGRlZCBi eQ0KKyAgICAgICAgLy8gR2V0UGx1Z0luUGNpVmdhRGV2aWNlUGF0aCgpLiBBZGQgdGhlIGludGVn cml0eSBHT1AgZGV2aWNlIHBhdGguDQorICAgICAgICAvLw0KKyAgICAgICAgRWZpQm9vdE1hbmFn ZXJVcGRhdGVDb25zb2xlVmFyaWFibGUgKENvbk91dERldiwgTlVMTCwgUGNpRGV2aWNlUGF0aCk7 DQorICAgICAgICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uT3V0RGV2 LCBUZW1wRGV2aWNlUGF0aCwgTlVMTCk7DQorICAgICAgfQ0KKyAgICB9DQorICAgIGdCUy0+RnJl ZVBvb2wgKEdvcEhhbmRsZUJ1ZmZlcik7DQorICB9DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQorfQ0KKw0KKy8qKg0KKyAgQWRkIFBDSSBkaXNwbGF5IHRvIENvbk91dC4NCisNCisgIEBwYXJh bVtpbl0gRGV2aWNlSGFuZGxlICBIYW5kbGUgb2YgdGhlIFBDSSBkaXNwbGF5IGRldmljZS4NCisN CisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFRoZSBQQ0kgZGlzcGxheSBkZXZpY2UgaGFzIGJlZW4g YWRkZWQgdG8gQ29uT3V0Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMs IGR1ZSB0byBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAg ICAgICAgICAgZnJvbSBEZXZpY2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVQ Y2lEaXNwbGF5RGV2aWNlUGF0aCAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgIERl dmljZUhhbmRsZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRGV2aWNlUGF0aDsNCisgIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgKkdvcERldmljZVBhdGg7DQorDQorICBEZXZpY2VQYXRoICAgID0g TlVMTDsNCisgIEdvcERldmljZVBhdGggPSBOVUxMOw0KKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQ cm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlLA0KKyAgICAgICAgICAg ICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAo Vk9JRCopJkRldmljZVBhdGgNCisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgR2V0R29wRGV2 aWNlUGF0aCAoRGV2aWNlUGF0aCwgJkdvcERldmljZVBhdGgpOw0KKyAgRGV2aWNlUGF0aCA9IEdv cERldmljZVBhdGg7DQorDQorICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAo Q29uT3V0LCBEZXZpY2VQYXRoLCBOVUxMKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9 DQorDQorLyoqDQorICBBZGQgUENJIFNlcmlhbCB0byBDb25PdXQsIENvbkluLCBFcnJPdXQuDQor DQorICBAcGFyYW1baW5dIERldmljZUhhbmRsZSAgSGFuZGxlIG9mIHRoZSBQQ0kgc2VyaWFsIGRl dmljZS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIFRoZSBQQ0kgc2VyaWFsIGRldmljZSBo YXMgYmVlbiBhZGRlZCB0byBDb25PdXQsIENvbkluLA0KKyAgICAgICAgICAgICAgICAgICAgICAg RXJyT3V0Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMsIGR1ZSB0byBF RklfREVWSUNFX1BBVEhfUFJPVE9DT0wgbWlzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSBEZXZpY2VIYW5kbGUuDQorKiovDQorRUZJX1NUQVRVUw0KK1ByZXBhcmVQY2lTZXJpYWxE ZXZpY2VQYXRoICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxl DQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZpY2VQYXRoOw0KKw0KKyAgRGV2aWNlUGF0aCA9IE5V TEw7DQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAgICAg ICBEZXZpY2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9j b2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIChWT0lEKikmRGV2aWNlUGF0aA0KKyAgICAgICAg ICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBT dGF0dXM7DQorICB9DQorDQorICBEZXZpY2VQYXRoID0gQXBwZW5kRGV2aWNlUGF0aE5vZGUgKERl dmljZVBhdGgsIChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKikmZ1VhcnREZXZpY2VOb2RlKTsN CisgIERldmljZVBhdGggPSBBcHBlbmREZXZpY2VQYXRoTm9kZSAoRGV2aWNlUGF0aCwgKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAqKSZnVGVybWluYWxUeXBlRGV2aWNlTm9kZSk7DQorDQorICBF ZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uT3V0LCBEZXZpY2VQYXRoLCBO VUxMKTsNCisgIEVmaUJvb3RNYW5hZ2VyVXBkYXRlQ29uc29sZVZhcmlhYmxlIChDb25JbiwgRGV2 aWNlUGF0aCwgTlVMTCk7DQorICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAo RXJyT3V0LCBEZXZpY2VQYXRoLCBOVUxMKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9 DQorDQorRUZJX1NUQVRVUw0KK1Zpc2l0QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICBJTiBF RklfR1VJRCAgICAgICAgICAgICAgICAgICAgKklkLA0KKyAgSU4gUFJPVE9DT0xfSU5TVEFOQ0Vf Q0FMTEJBQ0sgIENhbGxCYWNrRnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgKkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0 YXR1czsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQorICBFRklf SEFORExFICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQorICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAqSW5zdGFuY2U7 DQorDQorICAvLw0KKyAgLy8gU3RhcnQgdG8gY2hlY2sgYWxsIHRoZSBQY2lJbyB0byBmaW5kIGFs bCBwb3NzaWJsZSBkZXZpY2UNCisgIC8vDQorICBIYW5kbGVDb3VudCA9IDA7DQorICBIYW5kbGVC dWZmZXIgPSBOVUxMOw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAg ICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgSWQsDQorICAg ICAgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQor ICAgICAgICAgICAgICAgICAgJkhhbmRsZUJ1ZmZlcg0KKyAgICAgICAgICAgICAgICAgICk7DQor ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQor DQorICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KKyAg ICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sIChIYW5kbGVCdWZmZXJbSW5kZXhdLCBJZCwg Jkluc3RhbmNlKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRp bnVlOw0KKyAgICB9DQorDQorICAgIFN0YXR1cyA9ICgqQ2FsbEJhY2tGdW5jdGlvbikgKA0KKyAg ICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgSW5zdGFu Y2UsDQorICAgICAgICAgICAgICAgQ29udGV4dA0KKyAgICAgICAgICAgICAgICk7DQorICB9DQor DQorICBnQlMtPkZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KK30NCisNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorVmlzaXRpbmdBUGNpSW5zdGFu Y2UgKA0KKyAgSU4gRUZJX0hBTkRMRSAgSGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgKkluc3Rh bmNlLA0KKyAgSU4gVk9JRCAgICAgICAgKkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9QQ0lfSU9fUFJPVE9DT0wgICAgICAgKlBj aUlvOw0KKyAgUENJX1RZUEUwMCAgICAgICAgICAgICAgICBQY2k7DQorDQorICBQY2lJbyA9IChF RklfUENJX0lPX1BST1RPQ09MKikgSW5zdGFuY2U7DQorDQorICAvLw0KKyAgLy8gQ2hlY2sgZm9y IGFsbCBQQ0kgZGV2aWNlDQorICAvLw0KKyAgU3RhdHVzID0gUGNpSW8tPlBjaS5SZWFkICgNCisg ICAgICAgICAgICAgICAgICAgIFBjaUlvLA0KKyAgICAgICAgICAgICAgICAgICAgRWZpUGNpSW9X aWR0aFVpbnQzMiwNCisgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAg ICBzaXplb2YgKFBjaSkgLyBzaXplb2YgKFVJTlQzMiksDQorICAgICAgICAgICAgICAgICAgICAm UGNpDQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgcmV0dXJuICgqKFZJU0lUX1BDSV9J TlNUQU5DRV9DQUxMQkFDSykoVUlOVE4pIENvbnRleHQpICgNCisgICAgICAgICAgIEhhbmRsZSwN CisgICAgICAgICAgIFBjaUlvLA0KKyAgICAgICAgICAgJlBjaQ0KKyAgICAgICAgICAgKTsNCisN Cit9DQorDQorDQorDQorRUZJX1NUQVRVUw0KK1Zpc2l0QWxsUGNpSW5zdGFuY2VzICgNCisgIElO IFZJU0lUX1BDSV9JTlNUQU5DRV9DQUxMQkFDSyBDYWxsQmFja0Z1bmN0aW9uDQorICApDQorew0K KyAgcmV0dXJuIFZpc2l0QWxsSW5zdGFuY2VzT2ZQcm90b2NvbCAoDQorICAgICAgICAgICAmZ0Vm aVBjaUlvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVmlzaXRpbmdBUGNpSW5zdGFuY2UsDQor ICAgICAgICAgICAoVk9JRCopKFVJTlROKSBDYWxsQmFja0Z1bmN0aW9uDQorICAgICAgICAgICAp Ow0KK30NCisNCisNCisvKioNCisgIERvIHBsYXRmb3JtIHNwZWNpZmljIFBDSSBEZXZpY2UgY2hl Y2sgYW5kIGFkZCB0aGVtIHRvDQorICBDb25PdXQsIENvbkluLCBFcnJPdXQuDQorDQorICBAcGFy YW1baW5dICBIYW5kbGUgLSBIYW5kbGUgb2YgUENJIGRldmljZSBpbnN0YW5jZQ0KKyAgQHBhcmFt W2luXSAgUGNpSW8gLSBQQ0kgSU8gcHJvdG9jb2wgaW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gIFBj aSAtIFBDSSBIZWFkZXIgcmVnaXN0ZXIgYmxvY2sNCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg LSBQQ0kgRGV2aWNlIGNoZWNrIGFuZCBDb25zb2xlIHZhcmlhYmxlIHVwZGF0ZQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1NUQVRVUyAtIFBD SSBEZXZpY2UgY2hlY2sgb3IgQ29uc29sZSB2YXJpYWJsZSB1cGRhdGUgZmFpbC4NCisNCisqKi8N CitFRklfU1RBVFVTDQorRUZJQVBJDQorRGV0ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNl UGF0aCAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICBIYW5kbGUsDQorICBJTiBFRklfUENJ X0lPX1BST1RPQ09MICAqUGNpSW8sDQorICBJTiBQQ0lfVFlQRTAwICAgICAgICAgICAqUGNpDQor ICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorDQorICBTdGF0 dXMgPSBQY2lJby0+QXR0cmlidXRlcyAoDQorICAgIFBjaUlvLA0KKyAgICBFZmlQY2lJb0F0dHJp YnV0ZU9wZXJhdGlvbkVuYWJsZSwNCisgICAgRUZJX1BDSV9ERVZJQ0VfRU5BQkxFLA0KKyAgICBO VUxMDQorICAgICk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgaWYgKCFt RGV0ZWN0VmdhT25seSkgew0KKyAgICAvLw0KKyAgICAvLyBIZXJlIHdlIGRlY2lkZSB3aGV0aGVy IGl0IGlzIExQQyBCcmlkZ2UNCisgICAgLy8NCisgICAgaWYgKChJU19QQ0lfTFBDIChQY2kpKSB8 fA0KKyAgICAgICAgKChJU19QQ0lfSVNBX1BERUNPREUgKFBjaSkpICYmDQorICAgICAgICAgKFBj aS0+SGRyLlZlbmRvcklkID09IDB4ODA4NikgJiYNCisgICAgICAgICAoUGNpLT5IZHIuRGV2aWNl SWQgPT0gMHg3MDAwKQ0KKyAgICAgICAgKQ0KKyAgICAgICApIHsNCisgICAgICAvLw0KKyAgICAg IC8vIEFkZCBJc2FLZXlib2FyZCB0byBDb25JbiwNCisgICAgICAvLyBhZGQgSXNhU2VyaWFsIHRv IENvbk91dCwgQ29uSW4sIEVyck91dA0KKyAgICAgIC8vDQorICAgICAgREVCVUcgKChFRklfRF9J TkZPLCAiRm91bmQgTFBDIEJyaWRnZSBkZXZpY2VcbiIpKTsNCisgICAgICBQcmVwYXJlTHBjQnJp ZGdlRGV2aWNlUGF0aCAoSGFuZGxlKTsNCisgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorICAg IH0NCisgICAgLy8NCisgICAgLy8gSGVyZSB3ZSBkZWNpZGUgd2hpY2ggU2VyaWFsIGRldmljZSB0 byBlbmFibGUgaW4gUENJIGJ1cw0KKyAgICAvLw0KKyAgICBpZiAoSVNfUENJXzE2NTUwU0VSSUFM IChQY2kpKSB7DQorICAgICAgLy8NCisgICAgICAvLyBBZGQgdGhlbSB0byBDb25PdXQsIENvbklu LCBFcnJPdXQuDQorICAgICAgLy8NCisgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICJGb3VuZCBQ Q0kgMTY1NTAgU0VSSUFMIGRldmljZVxuIikpOw0KKyAgICAgIFByZXBhcmVQY2lTZXJpYWxEZXZp Y2VQYXRoIChIYW5kbGUpOw0KKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAgfQ0KKyAg fQ0KKw0KKyAgLy8NCisgIC8vIEhlcmUgd2UgZGVjaWRlIHdoaWNoIGRpc3BsYXkgZGV2aWNlIHRv IGVuYWJsZSBpbiBQQ0kgYnVzDQorICAvLw0KKyAgaWYgKElTX1BDSV9ESVNQTEFZIChQY2kpKSB7 DQorICAgIC8vDQorICAgIC8vIEFkZCB0aGVtIHRvIENvbk91dC4NCisgICAgLy8NCisgICAgREVC VUcgKChFRklfRF9JTkZPLCAiRm91bmQgUENJIGRpc3BsYXkgZGV2aWNlXG4iKSk7DQorICAgIFBy ZXBhcmVQY2lEaXNwbGF5RGV2aWNlUGF0aCAoSGFuZGxlKTsNCisgICAgcmV0dXJuIEVGSV9TVUND RVNTOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBEbyBw bGF0Zm9ybSBzcGVjaWZpYyBQQ0kgRGV2aWNlIGNoZWNrIGFuZCBhZGQgdGhlbSB0byBDb25PdXQs IENvbkluLCBFcnJPdXQNCisNCisgIEBwYXJhbVtpbl0gIERldGVjdFZnYU9ubHkgLSBPbmx5IGRl dGVjdCBWR0EgZGV2aWNlIGlmIGl0J3MgVFJVRS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg LSBQQ0kgRGV2aWNlIGNoZWNrIGFuZCBDb25zb2xlIHZhcmlhYmxlIHVwZGF0ZSBzdWNjZXNzZnVs bHkuDQorICBAcmV0dmFsIEVGSV9TVEFUVVMgLSBQQ0kgRGV2aWNlIGNoZWNrIG9yIENvbnNvbGUg dmFyaWFibGUgdXBkYXRlIGZhaWwuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0RldGVjdEFuZFBy ZXBhcmVQbGF0Zm9ybVBjaURldmljZVBhdGhzICgNCisgIEJPT0xFQU4gRGV0ZWN0VmdhT25seQ0K KyAgKQ0KK3sNCisgIG1EZXRlY3RWZ2FPbmx5ID0gRGV0ZWN0VmdhT25seTsNCisgIHJldHVybiBW aXNpdEFsbFBjaUluc3RhbmNlcyAoRGV0ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNlUGF0 aCk7DQorfQ0KKw0KKy8qKg0KKyAgQ29ubmVjdCB0aGUgcHJlZGVmaW5lZCBwbGF0Zm9ybSBkZWZh dWx0IGNvbnNvbGUgZGV2aWNlLg0KKw0KKyAgQWx3YXlzIHRyeSB0byBmaW5kIGFuZCBlbmFibGUg UENJIGRpc3BsYXkgZGV2aWNlcy4NCisNCisgIEBwYXJhbVtpbl0gUGxhdGZvcm1Db25zb2xlICBQ cmVkZWZpbmVkIHBsYXRmb3JtIGRlZmF1bHQgY29uc29sZSBkZXZpY2UgYXJyYXkuDQorKiovDQor Vk9JRA0KK1BsYXRmb3JtSW5pdGlhbGl6ZUNvbnNvbGUgKA0KKyAgSU4gUExBVEZPUk1fQ09OU09M RV9DT05ORUNUX0VOVFJZICAgKlBsYXRmb3JtQ29uc29sZQ0KKyAgKQ0KK3sNCisgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBFRklfREVWSUNFX1BBVEhfUFJP VE9DT0wgICAgICAgICAgICpWYXJDb25vdXQ7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICAgICAgICAgICpWYXJDb25pbjsNCisNCisgIC8vDQorICAvLyBDb25uZWN0IFJvb3RCcmlkZ2UN CisgIC8vDQorICBHZXRFZmlHbG9iYWxWYXJpYWJsZTIgKEVGSV9DT05fT1VUX1ZBUklBQkxFX05B TUUsIChWT0lEICoqKSAmVmFyQ29ub3V0LCBOVUxMKTsNCisgIEdldEVmaUdsb2JhbFZhcmlhYmxl MiAoRUZJX0NPTl9JTl9WQVJJQUJMRV9OQU1FLCAoVk9JRCAqKikgJlZhckNvbmluLCBOVUxMKTsN CisNCisgIGlmIChWYXJDb25vdXQgPT0gTlVMTCB8fCBWYXJDb25pbiA9PSBOVUxMKSB7DQorICAg IC8vDQorICAgIC8vIERvIHBsYXRmb3JtIHNwZWNpZmljIFBDSSBEZXZpY2UgY2hlY2sgYW5kIGFk ZCB0aGVtIHRvIENvbk91dCwgQ29uSW4sIEVyck91dA0KKyAgICAvLw0KKyAgICBEZXRlY3RBbmRQ cmVwYXJlUGxhdGZvcm1QY2lEZXZpY2VQYXRocyAoRkFMU0UpOw0KKyAgICBEZXRlY3RBbmRQcmVw YXJlUGxhdGZvcm1QY2lEZXZpY2VQYXRocyhUUlVFKTsNCisgICAgLy8NCisgICAgLy8gSGF2ZSBj aGFuY2UgdG8gY29ubmVjdCB0aGUgcGxhdGZvcm0gZGVmYXVsdCBjb25zb2xlLA0KKyAgICAvLyB0 aGUgcGxhdGZvcm0gZGVmYXVsdCBjb25zb2xlIGlzIHRoZSBtaW5pbXVlIGRldmljZSBncm91cA0K KyAgICAvLyB0aGUgcGxhdGZvcm0gc2hvdWxkIHN1cHBvcnQNCisgICAgLy8NCisgICAgZm9yIChJ bmRleCA9IDA7IFBsYXRmb3JtQ29uc29sZVtJbmRleF0uRGV2aWNlUGF0aCAhPSBOVUxMOyArK0lu ZGV4KSB7DQorICAgICAgLy8NCisgICAgICAvLyBVcGRhdGUgdGhlIGNvbnNvbGUgdmFyaWFibGUg d2l0aCB0aGUgY29ubmVjdCB0eXBlDQorICAgICAgLy8NCisgICAgICBpZiAoKFBsYXRmb3JtQ29u c29sZVtJbmRleF0uQ29ubmVjdFR5cGUgJiBDT05TT0xFX0lOKSA9PSBDT05TT0xFX0lOKSB7DQor ICAgICAgICBFZmlCb290TWFuYWdlclVwZGF0ZUNvbnNvbGVWYXJpYWJsZSAoQ29uSW4sIFBsYXRm b3JtQ29uc29sZVtJbmRleF0uRGV2aWNlUGF0aCwgTlVMTCk7DQorICAgICAgfQ0KKyAgICAgIGlm ICgoUGxhdGZvcm1Db25zb2xlW0luZGV4XS5Db25uZWN0VHlwZSAmIENPTlNPTEVfT1VUKSA9PSBD T05TT0xFX09VVCkgew0KKyAgICAgICAgRWZpQm9vdE1hbmFnZXJVcGRhdGVDb25zb2xlVmFyaWFi bGUgKENvbk91dCwgUGxhdGZvcm1Db25zb2xlW0luZGV4XS5EZXZpY2VQYXRoLCBOVUxMKTsNCisg ICAgICB9DQorICAgICAgaWYgKChQbGF0Zm9ybUNvbnNvbGVbSW5kZXhdLkNvbm5lY3RUeXBlICYg U1REX0VSUk9SKSA9PSBTVERfRVJST1IpIHsNCisgICAgICAgIEVmaUJvb3RNYW5hZ2VyVXBkYXRl Q29uc29sZVZhcmlhYmxlIChFcnJPdXQsIFBsYXRmb3JtQ29uc29sZVtJbmRleF0uRGV2aWNlUGF0 aCwgTlVMTCk7DQorICAgICAgfQ0KKyAgICB9DQorICB9IGVsc2Ugew0KKyAgICAvLw0KKyAgICAv LyBPbmx5IGRldGVjdCBWR0EgZGV2aWNlIGFuZCBhZGQgdGhlbSB0byBDb25PdXQNCisgICAgLy8N CisgICAgRGV0ZWN0QW5kUHJlcGFyZVBsYXRmb3JtUGNpRGV2aWNlUGF0aHMgKFRSVUUpOw0KKyAg fQ0KK30NCisNCisNCisvKioNCisgIENvbmZpZ3VyZSBQQ0kgSW50ZXJydXB0IExpbmUgcmVnaXN0 ZXIgZm9yIGFwcGxpY2FibGUgZGV2aWNlcw0KKyAgUG9ydGVkIGZyb20gU2VhQklPUywgc3JjL2Z3 L3BjaWluaXQuYywgKl9wY2lfc2xvdF9nZXRfaXJxKCkNCisNCisgIEBwYXJhbVtpbl0gIEhhbmRs ZSAtIEhhbmRsZSBvZiBQQ0kgZGV2aWNlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICBQY2lJbyAt IFBDSSBJTyBwcm90b2NvbCBpbnN0YW5jZQ0KKyAgQHBhcmFtW2luXSAgUGNpSGRyIC0gUENJIEhl YWRlciByZWdpc3RlciBibG9jaw0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAtIFBDSSBJbnRl cnJ1cHQgTGluZSByZWdpc3RlciBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitF RklfU1RBVFVTDQorRUZJQVBJDQorU2V0UGNpSW50TGluZSAoDQorICBJTiBFRklfSEFORExFICAg ICAgICAgICBIYW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAqUGNpSW8sDQorICBJ TiBQQ0lfVFlQRTAwICAgICAgICAgICAqUGNpSGRyDQorICApDQorew0KKyAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAqRGV2UGF0aE5vZGU7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICpEZXZQYXRoOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBSb290U2xvdDsNCisgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgSWR4Ow0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAg ICBJcnFMaW5lOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBVSU5U MzIgICAgICAgICAgICAgICAgICAgIFJvb3RCdXNOdW1iZXI7DQorDQorICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCisNCisgIGlmIChQY2lIZHItPkRldmljZS5JbnRlcnJ1cHRQaW4gIT0gMCkgew0K Kw0KKyAgICBEZXZQYXRoTm9kZSA9IERldmljZVBhdGhGcm9tSGFuZGxlIChIYW5kbGUpOw0KKyAg ICBBU1NFUlQgKERldlBhdGhOb2RlICE9IE5VTEwpOw0KKyAgICBEZXZQYXRoID0gRGV2UGF0aE5v ZGU7DQorDQorICAgIFJvb3RCdXNOdW1iZXIgPSAwOw0KKyAgICBpZiAoRGV2aWNlUGF0aFR5cGUg KERldlBhdGhOb2RlKSA9PSBBQ1BJX0RFVklDRV9QQVRIICYmDQorICAgICAgICBEZXZpY2VQYXRo U3ViVHlwZSAoRGV2UGF0aE5vZGUpID09IEFDUElfRFAgJiYNCisgICAgICAgICgoQUNQSV9ISURf REVWSUNFX1BBVEggKilEZXZQYXRoTm9kZSktPkhJRCA9PSBFSVNBX1BOUF9JRCgweDBBMDMpKSB7 DQorICAgICAgUm9vdEJ1c051bWJlciA9ICgoQUNQSV9ISURfREVWSUNFX1BBVEggKilEZXZQYXRo Tm9kZSktPlVJRDsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBDb21wdXRlIGluZGV4IGlu dG8gUGNpSG9zdElycXNbXSB0YWJsZSBieSB3YWxraW5nDQorICAgIC8vIHRoZSBkZXZpY2UgcGF0 aCBhbmQgYWRkaW5nIHVwIGFsbCBkZXZpY2UgbnVtYmVycw0KKyAgICAvLw0KKyAgICBTdGF0dXMg PSBFRklfTk9UX0ZPVU5EOw0KKyAgICBSb290U2xvdCA9IDA7DQorICAgIElkeCA9IFBjaUhkci0+ RGV2aWNlLkludGVycnVwdFBpbiAtIDE7DQorICAgIHdoaWxlICghSXNEZXZpY2VQYXRoRW5kIChE ZXZQYXRoTm9kZSkpIHsNCisgICAgICBpZiAoRGV2aWNlUGF0aFR5cGUgKERldlBhdGhOb2RlKSA9 PSBIQVJEV0FSRV9ERVZJQ0VfUEFUSCAmJg0KKyAgICAgICAgICBEZXZpY2VQYXRoU3ViVHlwZSAo RGV2UGF0aE5vZGUpID09IEhXX1BDSV9EUCkgew0KKw0KKyAgICAgICAgSWR4ICs9ICgoUENJX0RF VklDRV9QQVRIICopRGV2UGF0aE5vZGUpLT5EZXZpY2U7DQorDQorICAgICAgICAvLw0KKyAgICAg ICAgLy8gVW5saWtlIFNlYUJJT1MsIHdoaWNoIHN0YXJ0cyBjbGltYmluZyBmcm9tIHRoZSBsZWFm IGRldmljZQ0KKyAgICAgICAgLy8gdXAgdG93YXJkIHRoZSByb290LCB3ZSB0cmF2ZXJzZSB0aGUg ZGV2aWNlIHBhdGggc3RhcnRpbmcgYXQNCisgICAgICAgIC8vIHRoZSByb290IG1vdmluZyB0b3dh cmQgdGhlIGxlYWYgbm9kZS4NCisgICAgICAgIC8vIFRoZSBzbG90IG51bWJlciBvZiB0aGUgdG9w LWxldmVsIHBhcmVudCBicmlkZ2UgaXMgbmVlZGVkDQorICAgICAgICAvLyB3aXRoIG1vcmUgdGhh biAyNCBzbG90cyBvbiB0aGUgcm9vdCBidXMuDQorICAgICAgICAvLw0KKyAgICAgICAgaWYgKFN0 YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KKyAgICAgICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN CisgICAgICAgICAgUm9vdFNsb3QgPSAoKFBDSV9ERVZJQ0VfUEFUSCAqKURldlBhdGhOb2RlKS0+ RGV2aWNlOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBEZXZQYXRoTm9kZSA9IE5l eHREZXZpY2VQYXRoTm9kZSAoRGV2UGF0aE5vZGUpOw0KKyAgICB9DQorICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICAgIGlmIChS b290QnVzTnVtYmVyID09IDAgJiYgUm9vdFNsb3QgPT0gMCkgew0KKyAgICAgIHJldHVybiBTdGF0 dXM7IC8vYnVnYnVnOiB3b3JrYXJvdW5kOyBuZWVkIFNJTUlDUyBjaGFuZ2UgQjAvRDAvRjAgUENJ X0ludFBpbiByZWcoMHgzRCkgPSAwWDANCisvLyAgICAgIERFQlVHKCgNCisvLyAgICAgICAgRUZJ X0RfRVJST1IsDQorLy8gICAgICAgIiVhOiBQQ0kgaG9zdCBicmlkZ2UgKDAwOjAwLjApIHNob3Vs ZCBoYXZlIG5vIGludGVycnVwdHMhXG4iLA0KKy8vICAgICAgICBfX0ZVTkNUSU9OX18NCisvLyAg ICAgICAgKSk7DQorLy8gICAgICBBU1NFUlQgKEZBTFNFKTsNCisgICAgfQ0KKw0KKyAgICAvLw0K KyAgICAvLyBGaW5hbCBQY2lIb3N0SXJxc1tdIGluZGV4IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24g dGhlIHBsYXRmb3JtDQorICAgIC8vIGFuZCBzaG91bGQgbWF0Y2ggU2VhQklPUyBzcmMvZncvcGNp aW5pdC5jICpfcGNpX3Nsb3RfZ2V0X2lycSgpDQorICAgIC8vDQorICAgIHN3aXRjaCAobUhvc3RC cmlkZ2VEZXZJZCkgew0KKyAgICAgIGNhc2UgSU5URUxfODI0NDFfREVWSUNFX0lEOg0KKyAgICAg ICAgSWR4IC09IDE7DQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIElOVEVMX0lDSDEwX0RF VklDRV9JRDoNCisgICAgICAgIC8vDQorICAgICAgICAvLyBTZWFCSU9TIGNvbnRhaW5zIHRoZSBm b2xsb3dpbmcgY29tbWVudDoNCisgICAgICAgIC8vICJTbG90cyAwLTI0IHJvdGF0ZSBzbG90OnBp biBtYXBwaW5nIHNpbWlsYXIgdG8gcGlpeCBhYm92ZSwgYnV0DQorICAgICAgICAvLyAgd2l0aCBh IGRpZmZlcmVudCBzdGFydGluZyBpbmRleC4NCisgICAgICAgIC8vDQorICAgICAgICAvLyAgU2xv dHMgMjUtMzEgYWxsIHVzZSBMTktBIG1hcHBpbmcgKG9yIExOS0UsIGJ1dCBBOkQgPSBFOkgpIg0K KyAgICAgICAgLy8NCisgICAgICAgIGlmIChSb290U2xvdCA+IDI0KSB7DQorICAgICAgICAgIC8v DQorICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSwgc3VidHJhY3QgYmFjayBvdXQgUm9vdFNsb3Qg ZnJvbSBJZHgNCisgICAgICAgICAgLy8gKFNlYUJJT1MgbmV2ZXIgYWRkcyBpdCB0byBiZWdpbiB3 aXRoLCBidXQgdGhhdCB3b3VsZCBtYWtlIG91cg0KKyAgICAgICAgICAvLyAgZGV2aWNlIHBhdGgg dHJhdmVyc2FsIGxvb3AgYWJvdmUgdG9vIGF3a3dhcmQpDQorICAgICAgICAgIC8vDQorICAgICAg ICAgIElkeCAtPSBSb290U2xvdDsNCisgICAgICAgIH0NCisgICAgICAgIGJyZWFrOw0KKyAgICAg IGRlZmF1bHQ6DQorICAgICAgICBBU1NFUlQgKEZBTFNFKTsgLy8gc2hvdWxkIG5ldmVyIGdldCBo ZXJlDQorICAgIH0NCisgICAgSWR4ICU9IEFSUkFZX1NJWkUgKFBjaUhvc3RJcnFzKTsNCisgICAg SXJxTGluZSA9IFBjaUhvc3RJcnFzW0lkeF07DQorDQorICAgIERFQlVHX0NPREVfQkVHSU4gKCk7 DQorICAgIHsNCisgICAgICBDSEFSMTYgICAgICAgICpEZXZQYXRoU3RyaW5nOw0KKyAgICAgIFNU QVRJQyBDSEFSMTYgRmFsbGJhY2tbXSA9IEwiPGZhaWxlZCB0byBjb252ZXJ0PiI7DQorICAgICAg VUlOVE4gICAgICAgICBTZWdtZW50LCBCdXMsIERldmljZSwgRnVuY3Rpb247DQorDQorICAgICAg RGV2UGF0aFN0cmluZyA9IENvbnZlcnREZXZpY2VQYXRoVG9UZXh0IChEZXZQYXRoLCBGQUxTRSwg RkFMU0UpOw0KKyAgICAgIGlmIChEZXZQYXRoU3RyaW5nID09IE5VTEwpIHsNCisgICAgICAgIERl dlBhdGhTdHJpbmcgPSBGYWxsYmFjazsNCisgICAgICB9DQorICAgICAgU3RhdHVzID0gUGNpSW8t PkdldExvY2F0aW9uIChQY2lJbywgJlNlZ21lbnQsICZCdXMsICZEZXZpY2UsICZGdW5jdGlvbik7 DQorICAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgICAgICBERUJVRyAoKEVG SV9EX1ZFUkJPU0UsICIlYTogWyUwMng6JTAyeC4leF0gJXMgLT4gMHglMDJ4XG4iLCBfX0ZVTkNU SU9OX18sDQorICAgICAgICAoVUlOVDMyKUJ1cywgKFVJTlQzMilEZXZpY2UsIChVSU5UMzIpRnVu Y3Rpb24sIERldlBhdGhTdHJpbmcsDQorICAgICAgICBJcnFMaW5lKSk7DQorDQorICAgICAgaWYg KERldlBhdGhTdHJpbmcgIT0gRmFsbGJhY2spIHsNCisgICAgICAgIEZyZWVQb29sIChEZXZQYXRo U3RyaW5nKTsNCisgICAgICB9DQorICAgIH0NCisgICAgREVCVUdfQ09ERV9FTkQgKCk7DQorDQor ICAgIC8vDQorICAgIC8vIFNldCBQQ0kgSW50ZXJydXB0IExpbmUgcmVnaXN0ZXIgZm9yIHRoaXMg ZGV2aWNlIHRvIFBjaUhvc3RJcnFzW0lkeF0NCisgICAgLy8NCisgICAgU3RhdHVzID0gUGNpSW8t PlBjaS5Xcml0ZSAoDQorICAgICAgICAgICAgICAgUGNpSW8sDQorICAgICAgICAgICAgICAgRWZp UGNpSW9XaWR0aFVpbnQ4LA0KKyAgICAgICAgICAgICAgIFBDSV9JTlRfTElORV9PRkZTRVQsDQor ICAgICAgICAgICAgICAgMSwNCisgICAgICAgICAgICAgICAmSXJxTGluZQ0KKyAgICAgICAgICAg ICAgICk7DQorICB9DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCitXcml0ZSB0 byBtYXNrIGFuZCBlZGdlL2xldmVsIHRyaWdnZXJlZCByZWdpc3RlcnMgb2YgbWFzdGVyIGFuZCBz bGF2ZSA4MjU5IFBJQ3MuDQorDQorQHBhcmFtW2luXSAgTWFzayAgICAgICBsb3cgYnl0ZSBmb3Ig bWFzdGVyIFBJQyBtYXNrIHJlZ2lzdGVyLA0KK2hpZ2ggYnl0ZSBmb3Igc2xhdmUgUElDIG1hc2sg cmVnaXN0ZXIuDQorQHBhcmFtW2luXSAgRWRnZUxldmVsICBsb3cgYnl0ZSBmb3IgbWFzdGVyIFBJ QyBlZGdlL2xldmVsIHRyaWdnZXJlZCByZWdpc3RlciwNCitoaWdoIGJ5dGUgZm9yIHNsYXZlIFBJ QyBlZGdlL2xldmVsIHRyaWdnZXJlZCByZWdpc3Rlci4NCisNCisqKi8NCitWT0lEDQorSW50ZXJy dXB0ODI1OVdyaXRlTWFzaygNCisgIElOIFVJTlQxNiAgTWFzaywNCisgIElOIFVJTlQxNiAgRWRn ZUxldmVsDQorKQ0KK3sNCisgIElvV3JpdGU4KExFR0FDWV84MjU5X01BU0tfUkVHSVNURVJfTUFT VEVSLCAoVUlOVDgpTWFzayk7DQorICBJb1dyaXRlOChMRUdBQ1lfODI1OV9NQVNLX1JFR0lTVEVS X1NMQVZFLCAoVUlOVDgpKE1hc2sgPj4gOCkpOw0KKyAgSW9Xcml0ZTgoTEVHQUNZXzgyNTlfRURH RV9MRVZFTF9UUklHR0VSRURfUkVHSVNURVJfTUFTVEVSLCAoVUlOVDgpRWRnZUxldmVsKTsNCisg IElvV3JpdGU4KExFR0FDWV84MjU5X0VER0VfTEVWRUxfVFJJR0dFUkVEX1JFR0lTVEVSX1NMQVZF LCAoVUlOVDgpKEVkZ2VMZXZlbCA+PiA4KSk7DQorfQ0KKw0KK1ZPSUQNCitQY2lBY3BpSW5pdGlh bGl6YXRpb24gKA0KKyAgKQ0KK3sNCisgIFVJTlROICBQbWJhOw0KKw0KKyAgLy8NCisgIC8vIFF1 ZXJ5IEhvc3QgQnJpZGdlIERJRCB0byBkZXRlcm1pbmUgcGxhdGZvcm0gdHlwZQ0KKyAgLy8NCisg IG1Ib3N0QnJpZGdlRGV2SWQgPSBQY2RHZXQxNiAoUGNkU2ltaWNzWDU4SG9zdEJyaWRnZVBjaURl dklkKTsNCisgIHN3aXRjaCAobUhvc3RCcmlkZ2VEZXZJZCkgew0KKyAgICBjYXNlIElOVEVMXzgy NDQxX0RFVklDRV9JRDoNCisgICAgICBQbWJhID0gUE9XRVJfTUdNVF9SRUdJU1RFUl9QSUlYNCAo UElJWDRfUE1CQSk7DQorICAgICAgLy8NCisgICAgICAvLyAwMDowMS4wIElTQSBCcmlkZ2UgKFBJ SVg0KSBMTksgcm91dGluZyB0YXJnZXRzDQorICAgICAgLy8NCisgICAgICBQY2lXcml0ZTggKFBD SV9MSUJfQUREUkVTUyAoMCwgMSwgMCwgMHg2MCksIDB4MGIpOyAvLyBBDQorICAgICAgUGNpV3Jp dGU4IChQQ0lfTElCX0FERFJFU1MgKDAsIDEsIDAsIDB4NjEpLCAweDBiKTsgLy8gQg0KKyAgICAg IFBjaVdyaXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAxLCAwLCAweDYyKSwgMHgwYSk7IC8vIEMN CisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwgMSwgMCwgMHg2MyksIDB4MGEp OyAvLyBEDQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgSU5URUxfSUNIMTBfREVWSUNFX0lEOg0K KyAgICAgIFBtYmEgPSBQT1dFUl9NR01UX1JFR0lTVEVSX0lDSDEwIChJQ0gxMF9QTUJBU0UpOw0K KyAgICAgIC8vDQorICAgICAgLy8gMDA6MWYuMCBMUEMgQnJpZGdlIExOSyByb3V0aW5nIHRhcmdl dHMNCisgICAgICAvLw0KKyAgICAgIFBjaVdyaXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAweDFm LCAwLCAweDYwKSwgMHgwYSk7IC8vIEENCisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQUREUkVT UyAoMCwgMHgxZiwgMCwgMHg2MSksIDB4MGEpOyAvLyBCDQorICAgICAgUGNpV3JpdGU4IChQQ0lf TElCX0FERFJFU1MgKDAsIDB4MWYsIDAsIDB4NjIpLCAweDBiKTsgLy8gQw0KKyAgICAgIFBjaVdy aXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAweDFmLCAwLCAweDYzKSwgMHgwYik7IC8vIEQNCisg ICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQUREUkVTUyAoMCwgMHgxZiwgMCwgMHg2OCksIDB4MGEp OyAvLyBFDQorICAgICAgUGNpV3JpdGU4IChQQ0lfTElCX0FERFJFU1MgKDAsIDB4MWYsIDAsIDB4 NjkpLCAweDBhKTsgLy8gRg0KKyAgICAgIFBjaVdyaXRlOCAoUENJX0xJQl9BRERSRVNTICgwLCAw eDFmLCAwLCAweDZhKSwgMHgwYik7IC8vIEcNCisgICAgICBQY2lXcml0ZTggKFBDSV9MSUJfQURE UkVTUyAoMCwgMHgxZiwgMCwgMHg2YiksIDB4MGIpOyAvLyBIDQorICAgICAgYnJlYWs7DQorICAg IGRlZmF1bHQ6DQorICAgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiVhOiBVbmtub3duIEhvc3Qg QnJpZGdlIERldmljZSBJRDogMHglMDR4XG4iLA0KKyAgICAgICAgX19GVU5DVElPTl9fLCBtSG9z dEJyaWRnZURldklkKSk7DQorICAgICAgQVNTRVJUIChGQUxTRSk7DQorICAgICAgcmV0dXJuOw0K KyAgfQ0KKw0KKyAgLy8NCisgIC8vIEluaXRpYWxpemUgUENJX0lOVEVSUlVQVF9MSU5FIGZvciBh cHBsaWNhYmxlIHByZXNlbnQgUENJIGRldmljZXMNCisgIC8vDQorICBWaXNpdEFsbFBjaUluc3Rh bmNlcyAoU2V0UGNpSW50TGluZSk7DQorDQorICAvLw0KKyAgLy8gU2V0IEFDUEkgU0NJX0VOIGJp dCBpbiBQTUNOVFJMDQorICAvLw0KKyAgSW9PcjE2ICgoUGNpUmVhZDMyIChQbWJhKSAmIH5CSVQw KSArIDQsIEJJVDApOw0KKyAgLy8NCisgIC8vIFNldCBhbGwgODI1OSBpbnRlcnJ1cHRzIHRvIGVk Z2UgdHJpZ2dlcmVkIGFuZCBkaXNhYmxlZA0KKyAgLy8NCisgIEludGVycnVwdDgyNTlXcml0ZU1h c2soMHhGRkZGLCAweDAwMDApOw0KK30NCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorQ29ubmVj dFJlY3Vyc2l2ZWx5SWZQY2lNYXNzU3RvcmFnZSAoDQorICBJTiBFRklfSEFORExFICAgICAgICAg ICBIYW5kbGUsDQorICBJTiBFRklfUENJX0lPX1BST1RPQ09MICAqSW5zdGFuY2UsDQorICBJTiBQ Q0lfVFlQRTAwICAgICAgICAgICAqUGNpSGVhZGVyDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpEZXZp Y2VQYXRoOw0KKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAqRGV2UGF0aFN0cjsNCisNCisg IC8vDQorICAvLyBSZWNvZ25pemUgUENJIE1hc3MgU3RvcmFnZQ0KKyAgLy8NCisgIGlmIChJU19D TEFTUzEgKFBjaUhlYWRlciwgUENJX0NMQVNTX01BU1NfU1RPUkFHRSkpIHsNCisgICAgRGV2aWNl UGF0aCA9IE5VTEw7DQorICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAg ICAgICAgICAgICAgICAgSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQ YXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgKFZPSUQqKSZEZXZpY2VQYXRo DQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBQcmlu dCBEZXZpY2UgUGF0aA0KKyAgICAvLw0KKyAgICBEZXZQYXRoU3RyID0gQ29udmVydERldmljZVBh dGhUb1RleHQgKERldmljZVBhdGgsIEZBTFNFLCBGQUxTRSk7DQorICAgIGlmIChEZXZQYXRoU3Ry ICE9IE5VTEwpIHsNCisgICAgICBERUJVRygoDQorICAgICAgICBFRklfRF9JTkZPLA0KKyAgICAg ICAgIkZvdW5kIE1hc3MgU3RvcmFnZSBkZXZpY2U6ICVzXG4iLA0KKyAgICAgICAgRGV2UGF0aFN0 cg0KKyAgICAgICAgKSk7DQorICAgICAgRnJlZVBvb2woRGV2UGF0aFN0cik7DQorICAgIH0NCisN CisgICAgU3RhdHVzID0gZ0JTLT5Db25uZWN0Q29udHJvbGxlciAoSGFuZGxlLCBOVUxMLCBOVUxM LCBUUlVFKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBT dGF0dXM7DQorICAgIH0NCisNCisgIH0NCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQor DQorDQorLyoqDQorICBUaGlzIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4g dGhlDQorICBFTVUgVmFyaWFibGUgRlZCIGhhcyBiZWVuIGNoYW5nZWQuDQorDQorICBAcGFyYW0g IEV2ZW50ICAgICAgICAgICAgICAgICBUaGUgZXZlbnQgdGhhdCBvY2N1cnJlZA0KKyAgQHBhcmFt ICBDb250ZXh0ICAgICAgICAgICAgICAgRm9yIEVGSSBjb21wYXRpYmlsaXR5LiAgTm90IHVzZWQu DQorDQorKiovDQorVk9JRA0KK0VGSUFQSQ0KK0VtdVZhcmlhYmxlc1VwZGF0ZWRDYWxsYmFjayAo DQorICBJTiAgRUZJX0VWRU5UIEV2ZW50LA0KKyAgSU4gIFZPSUQgICAgICAqQ29udGV4dA0KKyAg KQ0KK3sNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIkVtdVZhcmlhYmxlc1VwZGF0ZWRDYWxsYmFj a1xuIikpOw0KKyAgVXBkYXRlTnZWYXJzT25GaWxlU3lzdGVtICgpOw0KK30NCisNCisNCitFRklf U1RBVFVTDQorRUZJQVBJDQorVmlzaXRpbmdGaWxlU3lzdGVtSW5zdGFuY2UgKA0KKyAgSU4gRUZJ X0hBTkRMRSAgSGFuZGxlLA0KKyAgSU4gVk9JRCAgICAgICAgKkluc3RhbmNlLA0KKyAgSU4gVk9J RCAgICAgICAgKkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgU3RhdHVzOw0K KyAgU1RBVElDIEJPT0xFQU4gIENvbm5lY3RlZFRvRmlsZVN5c3RlbSA9IEZBTFNFOw0KKw0KKyAg aWYgKENvbm5lY3RlZFRvRmlsZVN5c3RlbSkgew0KKyAgICByZXR1cm4gRUZJX0FMUkVBRFlfU1RB UlRFRDsNCisgIH0NCisNCisgIFN0YXR1cyA9IENvbm5lY3ROdlZhcnNUb0ZpbGVTeXN0ZW0gKEhh bmRsZSk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7 DQorICB9DQorDQorICBDb25uZWN0ZWRUb0ZpbGVTeXN0ZW0gPSBUUlVFOw0KKyAgbUVtdVZhcmlh YmxlRXZlbnQgPQ0KKyAgICBFZmlDcmVhdGVQcm90b2NvbE5vdGlmeUV2ZW50ICgNCisgICAgICAm Z0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgVFBMX0NBTExCQUNLLA0KKyAgICAg IEVtdVZhcmlhYmxlc1VwZGF0ZWRDYWxsYmFjaywNCisgICAgICBOVUxMLA0KKyAgICAgICZtRW11 VmFyaWFibGVFdmVudFJlZw0KKyAgICAgICk7DQorICBQY2RTZXQ2NCAoUGNkRW11VmFyaWFibGVF dmVudCwgKFVJTlQ2NCkoVUlOVE4pIG1FbXVWYXJpYWJsZUV2ZW50KTsNCisNCisgIHJldHVybiBF RklfU1VDQ0VTUzsNCit9DQorDQorDQorVk9JRA0KK1BsYXRmb3JtQmRzUmVzdG9yZU52VmFyc0Zy b21IYXJkRGlzayAoDQorICApDQorew0KKyAgVmlzaXRBbGxQY2lJbnN0YW5jZXMgKENvbm5lY3RS ZWN1cnNpdmVseUlmUGNpTWFzc1N0b3JhZ2UpOw0KKyAgVmlzaXRBbGxJbnN0YW5jZXNPZlByb3Rv Y29sICgNCisgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KKyAgICBWaXNp dGluZ0ZpbGVTeXN0ZW1JbnN0YW5jZSwNCisgICAgTlVMTA0KKyAgICApOw0KKw0KK30NCisNCisv KioNCisgIENvbm5lY3Qgd2l0aCBwcmVkZWZpbmVkIHBsYXRmb3JtIGNvbm5lY3Qgc2VxdWVuY2Uu DQorDQorICBUaGUgT0VNL0lCViBjYW4gY3VzdG9taXplIHdpdGggdGhlaXIgb3duIGNvbm5lY3Qg c2VxdWVuY2UuDQorKiovDQorVk9JRA0KK1BsYXRmb3JtQmRzQ29ubmVjdFNlcXVlbmNlICgNCisg IFZPSUQNCisgICkNCit7DQorICBVSU5UTiBJbmRleDsNCisNCisgIERFQlVHICgoRUZJX0RfSU5G TywgIlBsYXRmb3JtQmRzQ29ubmVjdFNlcXVlbmNlXG4iKSk7DQorDQorICBJbmRleCA9IDA7DQor DQorICAvLw0KKyAgLy8gSGVyZSB3ZSBjYW4gZ2V0IHRoZSBjdXN0b21pemVkIHBsYXRmb3JtIGNv bm5lY3Qgc2VxdWVuY2UNCisgIC8vIE5vdGVzOiB3ZSBjYW4gY29ubmVjdCB3aXRoIG5ldyB2YXJp YWJsZSB3aGljaCByZWNvcmQgdGhlDQorICAvLyBsYXN0IHRpbWUgYm9vdHMgY29ubmVjdCBkZXZp Y2UgcGF0aCBzZXF1ZW5jZQ0KKyAgLy8NCisgIHdoaWxlIChnUGxhdGZvcm1Db25uZWN0U2VxdWVu Y2VbSW5kZXhdICE9IE5VTEwpIHsNCisgICAgLy8NCisgICAgLy8gQnVpbGQgdGhlIHBsYXRmb3Jt IGJvb3Qgb3B0aW9uDQorICAgIC8vDQorICAgIEVmaUJvb3RNYW5hZ2VyQ29ubmVjdERldmljZVBh dGggKGdQbGF0Zm9ybUNvbm5lY3RTZXF1ZW5jZVtJbmRleF0sIE5VTEwpOw0KKyAgICBJbmRleCsr Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEp1c3QgdXNlIHRoZSBzaW1wbGUgcG9saWN5IHRvIGNv bm5lY3QgYWxsIGRldmljZXMNCisgIC8vDQorICBERUJVRyAoKEVGSV9EX0lORk8sICJFZmlCb290 TWFuYWdlckNvbm5lY3RBbGxcbiIpKTsNCisgIEVmaUJvb3RNYW5hZ2VyQ29ubmVjdEFsbCAoKTsN CisNCisgIFBjaUFjcGlJbml0aWFsaXphdGlvbiAoKTsNCit9DQorDQorLyoqDQorICBTYXZlIHRo ZSBTMyBib290IHNjcmlwdC4NCisNCisgIE5vdGUgdGhhdCBEeGVTbW1SZWFkeVRvTG9jayBtdXN0 IGJlIHNpZ25hbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJuczsNCisgIG90aGVyd2lzZSB0 aGUgc2NyaXB0IHdvdWxkbid0IGJlIHNhdmVkIGFjdHVhbGx5Lg0KKyoqLw0KK1NUQVRJQw0KK1ZP SUQNCitTYXZlUzNCb290U2NyaXB0ICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUzNfU0FWRV9TVEFURV9QUk9UT0NPTCAq Qm9vdFNjcmlwdDsNCisgIFNUQVRJQyBDT05TVCBVSU5UOCAgICAgICAgIEluZm9bXSA9IHsgMHhE RSwgMHhBRCwgMHhCRSwgMHhFRiB9Ow0KKw0KKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2Nv bCAoJmdFZmlTM1NhdmVTdGF0ZVByb3RvY29sR3VpZCwgTlVMTCwNCisgICAgICAgICAgICAgICAg ICAoVk9JRCAqKikgJkJvb3RTY3JpcHQpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN CisNCisgIC8vDQorICAvLyBEZXNwaXRlIHRoZSBvcGNvZGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUg UEkgc3BlYywgdGhlIHByb3RvY29sDQorICAvLyBpbXBsZW1lbnRhdGlvbiBlbWJlZHMgYSBkZWVw IGNvcHkgb2YgdGhlIGluZm8gaW4gdGhlIGJvb3Qgc2NyaXB0LCByYXRoZXINCisgIC8vIHRoYW4g c3RvcmluZyBqdXN0IGEgcG9pbnRlciB0byBydW50aW1lIG9yIE5WUyBzdG9yYWdlLg0KKyAgLy8N CisgIFN0YXR1cyA9IEJvb3RTY3JpcHQtPldyaXRlKEJvb3RTY3JpcHQsIEVGSV9CT09UX1NDUklQ VF9JTkZPUk1BVElPTl9PUENPREUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UMzIp IHNpemVvZiBJbmZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoRUZJX1BIWVNJQ0FMX0FE RFJFU1MpKFVJTlROKSAmSW5mbyk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KK30N CisNCisNCisvKioNCisgIERvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBhY3Rpb24gYWZ0ZXIgdGhl IGNvbnNvbGUgaXMgcmVhZHkNCisNCisgIFBvc3NpYmxlIHRoaW5ncyB0aGF0IGNhbiBiZSBkb25l IGluIFBsYXRmb3JtQm9vdE1hbmFnZXJBZnRlckNvbnNvbGU6DQorDQorICA+IENvbnNvbGUgcG9z dCBhY3Rpb246DQorICAgID4gRHluYW1pY2FsbHkgc3dpdGNoIG91dHB1dCBtb2RlIGZyb20gMTAw eDMxIHRvIDgweDI1IGZvciBjZXJ0YWluIHNlbmFyaW5vDQorICAgID4gU2lnbmFsIGNvbnNvbGUg cmVhZHkgcGxhdGZvcm0gY3VzdG9taXplZCBldmVudA0KKyAgPiBSdW4gZGlhZ25vc3RpY3MgbGlr ZSBtZW1vcnkgdGVzdGluZw0KKyAgPiBDb25uZWN0IGNlcnRhaW4gZGV2aWNlcw0KKyAgPiBEaXNw YXRjaCBhZGl0aW9uYWwgb3B0aW9uIHJvbXMNCisgID4gU3BlY2lhbCBib290OiBlLmcuOiBVU0Ig Ym9vdCwgZW50ZXIgVUkNCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZvcm1Cb290TWFuYWdl ckFmdGVyQ29uc29sZSAoDQorICBWT0lEDQorICApDQorew0KKyAgRUZJX0JPT1RfTU9ERSAgICAg ICAgICAgICAgICAgICAgICBCb290TW9kZTsNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQorDQorICBERUJVRyAoKEVGSV9EX0lORk8sICJQbGF0Zm9ybUJvb3RNYW5hZ2VyQWZ0 ZXJDb25zb2xlXG4iKSk7DQorDQorICAvLw0KKyAgLy8gUHJldmVudCBmdXJ0aGVyIGNoYW5nZXMg dG8gTG9ja0JveGVzIG9yIFNNUkFNLg0KKyAgLy8NCisgIEhhbmRsZSA9IE5VTEw7DQorICBTdGF0 dXMgPSBnQlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSgmSGFuZGxlLA0KKyAgICAmZ0VmaUR4 ZVNtbVJlYWR5VG9Mb2NrUHJvdG9jb2xHdWlkLCBFRklfTkFUSVZFX0lOVEVSRkFDRSwNCisgICAg ICBOVUxMKTsNCisgIEFTU0VSVF9FRklfRVJST1IoU3RhdHVzKTsNCisNCisgIGlmIChQY2RHZXRC b29sIChQY2RPdm1mRmxhc2hWYXJpYWJsZXNFbmFibGUpKSB7DQorICAgIERFQlVHICgoRUZJX0Rf SU5GTywgIlBsYXRmb3JtQmRzUG9saWN5QmVoYXZpb3I6IG5vdCByZXN0b3JpbmcgTnZWYXJzICIN CisgICAgICAiZnJvbSBkaXNrIHNpbmNlIGZsYXNoIHZhcmlhYmxlcyBhcHBlYXIgdG8gYmUgc3Vw cG9ydGVkLlxuIikpOw0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gVHJ5IHRvIHJlc3Rv cmUgdmFyaWFibGVzIGZyb20gdGhlIGhhcmQgZGlzayBlYXJseSBzbw0KKyAgICAvLyB0aGV5IGNh biBiZSB1c2VkIGZvciB0aGUgb3RoZXIgQkRTIGNvbm5lY3Qgb3BlcmF0aW9ucy4NCisgICAgLy8N CisgICAgUGxhdGZvcm1CZHNSZXN0b3JlTnZWYXJzRnJvbUhhcmREaXNrICgpOw0KKyAgfQ0KKw0K KyAgLy8NCisgIC8vIEdldCBjdXJyZW50IEJvb3QgTW9kZQ0KKyAgLy8NCisgIEJvb3RNb2RlID0g R2V0Qm9vdE1vZGVIb2IgKCk7DQorICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiQm9vdCBNb2RlOiV4 XG4iLCBCb290TW9kZSkpOw0KKw0KKyAgLy8NCisgIC8vIEdvIHRoZSBkaWZmZXJlbnQgcGxhdGZv cm0gcG9saWN5IHdpdGggZGlmZmVyZW50IGJvb3QgbW9kZQ0KKyAgLy8gTm90ZXM6IHRoaXMgcGFy dCBjb2RlIGNhbiBiZSBjaGFuZ2Ugd2l0aCB0aGUgdGFibGUgcG9saWN5DQorICAvLw0KKyAgQVNT RVJUIChCb290TW9kZSA9PSBCT09UX1dJVEhfRlVMTF9DT05GSUdVUkFUSU9OKTsNCisNCisgIC8v IFBlcmZvcm0gc29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb25uZWN0IHNlcXVlbmNlDQorICAvLw0K KyAgUGxhdGZvcm1CZHNDb25uZWN0U2VxdWVuY2UgKCk7DQorICAvLw0KKyAgLy8gTG9nbyBzaG93 DQorICAvLw0KKyAgRW5hYmxlQm9vdExvZ28oUGNkR2V0UHRyKFBjZExvZ29GaWxlKSk7DQorDQor ICBFZmlCb290TWFuYWdlclJlZnJlc2hBbGxCb290T3B0aW9uICgpOw0KKw0KKyAgLy8NCisgIC8v IFJlZ2lzdGVyIFVFRkkgU2hlbGwNCisgIC8vDQorICBQbGF0Zm9ybVJlZ2lzdGVyRnZCb290T3B0 aW9uICgNCisgICAgUGNkR2V0UHRyIChQY2RTaGVsbEZpbGUpLCBMIkVGSSBJbnRlcm5hbCBTaGVs bCIsIExPQURfT1BUSU9OX0FDVElWRQ0KKyAgICApOw0KKw0KKyAgUmVtb3ZlU3RhbGVGdkZpbGVP cHRpb25zICgpOw0KK30NCisNCisvKioNCisgIFRoaXMgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlz IGludm9rZWQgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCBpcyBwcm9kdWNlZC4NCisNCisgIEBwYXJhbSAgRXZlbnQgICAgICAgICAgICAgICAgIFRo ZSBldmVudCB0aGF0IG9jY3VycmVkDQorICBAcGFyYW0gIENvbnRleHQgICAgICAgICAgICAgICBG b3IgRUZJIGNvbXBhdGliaWxpdHkuICBOb3QgdXNlZC4NCisNCisqKi8NCitWT0lEDQorRUZJQVBJ DQorTm90aWZ5RGV2UGF0aCAoDQorICBJTiAgRUZJX0VWRU5UIEV2ZW50LA0KKyAgSU4gIFZPSUQg ICAgICAqQ29udGV4dA0KKyAgKQ0KK3sNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl clNpemU7DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgKkRldlBhdGhO b2RlOw0KKyAgQVRBUElfREVWSUNFX1BBVEggICAgICAgICAgICAgICAgICAgICpBdGFwaTsNCisN CisgIC8vDQorICAvLyBFeGFtaW5lIGFsbCBuZXcgaGFuZGxlcw0KKyAgLy8NCisgIGZvciAoOzsp IHsNCisgICAgLy8NCisgICAgLy8gR2V0IHRoZSBuZXh0IGhhbmRsZQ0KKyAgICAvLw0KKyAgICBC dWZmZXJTaXplID0gc2l6ZW9mIChIYW5kbGUpOw0KKyAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhh bmRsZSAoDQorICAgICAgICAgICAgICBCeVJlZ2lzdGVyTm90aWZ5LA0KKyAgICAgICAgICAgICAg TlVMTCwNCisgICAgICAgICAgICAgIG1FZmlEZXZQYXRoTm90aWZ5UmVnLA0KKyAgICAgICAgICAg ICAgJkJ1ZmZlclNpemUsDQorICAgICAgICAgICAgICAmSGFuZGxlDQorICAgICAgICAgICAgICAp Ow0KKw0KKyAgICAvLw0KKyAgICAvLyBJZiBub3QgZm91bmQsIHdlJ3JlIGRvbmUNCisgICAgLy8N CisgICAgaWYgKEVGSV9OT1RfRk9VTkQgPT0gU3RhdHVzKSB7DQorICAgICAgYnJlYWs7DQorICAg IH0NCisNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRpbnVlOw0K KyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIEdldCB0aGUgRGV2aWNlUGF0aCBwcm90b2NvbCBv biB0aGF0IGhhbmRsZQ0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29s IChIYW5kbGUsICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgKFZPSUQgKiopJkRldlBhdGhO b2RlKTsNCisgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgICAgd2hpbGUgKCFJ c0RldmljZVBhdGhFbmQgKERldlBhdGhOb2RlKSkgew0KKyAgICAgIC8vDQorICAgICAgLy8gRmlu ZCB0aGUgaGFuZGxlciB0byBkdW1wIHRoaXMgZGV2aWNlIHBhdGggbm9kZQ0KKyAgICAgIC8vDQor ICAgICAgaWYgKA0KKyAgICAgICAgICAgKERldmljZVBhdGhUeXBlKERldlBhdGhOb2RlKSA9PSBN RVNTQUdJTkdfREVWSUNFX1BBVEgpICYmDQorICAgICAgICAgICAoRGV2aWNlUGF0aFN1YlR5cGUo RGV2UGF0aE5vZGUpID09IE1TR19BVEFQSV9EUCkNCisgICAgICAgICApIHsNCisgICAgICAgIEF0 YXBpID0gKEFUQVBJX0RFVklDRV9QQVRIKikgRGV2UGF0aE5vZGU7DQorICAgICAgICBQY2lPcjE2 ICgNCisgICAgICAgICAgUENJX0xJQl9BRERSRVNTICgNCisgICAgICAgICAgICAwLA0KKyAgICAg ICAgICAgIDEsDQorICAgICAgICAgICAgMSwNCisgICAgICAgICAgICAoQXRhcGktPlByaW1hcnlT ZWNvbmRhcnkgPT0gMSkgPyAweDQyOiAweDQwDQorICAgICAgICAgICAgKSwNCisgICAgICAgICAg QklUMTUNCisgICAgICAgICAgKTsNCisgICAgICB9DQorDQorICAgICAgLy8NCisgICAgICAvLyBO ZXh0IGRldmljZSBwYXRoIG5vZGUNCisgICAgICAvLw0KKyAgICAgIERldlBhdGhOb2RlID0gTmV4 dERldmljZVBhdGhOb2RlIChEZXZQYXRoTm9kZSk7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVy bjsNCit9DQorDQorDQorVk9JRA0KK0luc3RhbGxEZXZpY2VQYXRoQ2FsbGJhY2sgKA0KKyAgVk9J RA0KKyAgKQ0KK3sNCisgIERFQlVHICgoRUZJX0RfSU5GTywgIlJlZ2lzdGVyZWQgTm90aWZ5RGV2 UGF0aCBFdmVudFxuIikpOw0KKyAgbUVmaURldlBhdGhFdmVudCA9IEVmaUNyZWF0ZVByb3RvY29s Tm90aWZ5RXZlbnQgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRo UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZ5RGV2UGF0aCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAmbUVmaURldlBh dGhOb3RpZnlSZWcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorfQ0KKw0KKy8qKg0K KyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWFjaCBzZWNvbmQgZHVyaW5nIHRoZSBib290IG1h bmFnZXIgd2FpdHMgdGhlDQorICB0aW1lb3V0Lg0KKw0KKyAgQHBhcmFtIFRpbWVvdXRSZW1haW4g IFRoZSByZW1haW5pbmcgdGltZW91dC4NCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZvcm1C b290TWFuYWdlcldhaXRDYWxsYmFjayAoDQorICBVSU5UMTYgICAgICAgICAgVGltZW91dFJlbWFp bg0KKyAgKQ0KK3sNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfQkxUX1BJWEVMX1VOSU9OIEJsYWNr Ow0KKyAgRUZJX0dSQVBISUNTX09VVFBVVF9CTFRfUElYRUxfVU5JT04gV2hpdGU7DQorICBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0Ow0KKw0KKyAgVGltZW91dCA9 IFBjZEdldDE2IChQY2RQbGF0Zm9ybUJvb3RUaW1lT3V0KTsNCisNCisgIEJsYWNrLlJhdyA9IDB4 MDAwMDAwMDA7DQorICBXaGl0ZS5SYXcgPSAweDAwRkZGRkZGOw0KKw0KKyAgQm9vdExvZ29VcGRh dGVQcm9ncmVzcyAoDQorICAgIFdoaXRlLlBpeGVsLA0KKyAgICBCbGFjay5QaXhlbCwNCisgICAg TCJTdGFydCBib290IG9wdGlvbiIsDQorICAgIFdoaXRlLlBpeGVsLA0KKyAgICAoVGltZW91dCAt IFRpbWVvdXRSZW1haW4pICogMTAwIC8gVGltZW91dCwNCisgICAgMA0KKyAgICApOw0KK30NCisN CisvKioNCisgIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBubyBib290IG9wdGlvbiBjb3Vs ZCBiZSBsYXVuY2hlZCwNCisgIGluY2x1ZGluZyBwbGF0Zm9ybSByZWNvdmVyeSBvcHRpb25zIGFu ZCBvcHRpb25zIHBvaW50aW5nIHRvIGFwcGxpY2F0aW9ucw0KKyAgYnVpbHQgaW50byBmaXJtd2Fy ZSB2b2x1bWVzLg0KKw0KKyAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBCRFMgYXR0ZW1wdHMg dG8gZW50ZXIgYW4gaW5maW5pdGUgbG9vcC4NCisqKi8NCitWT0lEDQorRUZJQVBJDQorUGxhdGZv cm1Cb290TWFuYWdlclVuYWJsZVRvQm9vdCAoDQorICBWT0lEDQorICApDQorew0KKyAgLy8gQlVH QlVHLSB3aWxsIGRvIGl0IGlmIG5lZWQNCit9DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZvcm1Cb290TWFuYWdlckxpYi9QbGF0Zm9y bURhdGEuYyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRm b3JtQm9vdE1hbmFnZXJMaWIvUGxhdGZvcm1EYXRhLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwMDAwLi43Njg4NDNhOGJmDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGli L1BsYXRmb3JtRGF0YS5jDQpAQCAtMCwwICsxLDM1IEBADQorLyoqIEBmaWxlDQorICBEZWZpbmVk IHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgcGF0aCB3aGljaCB3aWxsIGJlIHVzZWQgYnkN CisgIHBsYXRmb3JtIEJiZCB0byBwZXJmb3JtIHRoZSBwbGF0Zm9ybSBwb2xpY3kgY29ubmVjdC4N CisNCisgIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt Mi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgIkJkc1BsYXRmb3JtLmgiDQorDQor QUNQSV9ISURfREVWSUNFX1BBVEggICAgICAgZ1BucFBzMktleWJvYXJkRGV2aWNlTm9kZSAgPSBn UG5wUHMyS2V5Ym9hcmQ7DQorQUNQSV9ISURfREVWSUNFX1BBVEggICAgICAgZ1BucDE2NTUwQ29t UG9ydERldmljZU5vZGUgPSBnUG5wMTY1NTBDb21Qb3J0Ow0KK1VBUlRfREVWSUNFX1BBVEggICAg ICAgICAgIGdVYXJ0RGV2aWNlTm9kZSAgICAgICAgICAgID0gZ1VhcnQ7DQorVkVORE9SX0RFVklD RV9QQVRIICAgICAgICAgZ1Rlcm1pbmFsVHlwZURldmljZU5vZGUgICAgPSBnUGNBbnNpVGVybWlu YWw7DQorDQorLy8NCisvLyBQbGF0Zm9ybSBzcGVjaWZpYyBrZXlib2FyZCBkZXZpY2UgcGF0aA0K Ky8vDQorDQorLy8NCisvLyBQcmVkZWZpbmVkIHBsYXRmb3JtIGRlZmF1bHQgY29uc29sZSBkZXZp Y2UgcGF0aA0KKy8vDQorUExBVEZPUk1fQ09OU09MRV9DT05ORUNUX0VOVFJZICAgZ1BsYXRmb3Jt Q29uc29sZVtdID0gew0KKyAgew0KKyAgICBOVUxMLA0KKyAgICAwDQorICB9DQorfTsNCisNCisv Lw0KKy8vIFByZWRlZmluZWQgcGxhdGZvcm0gY29ubmVjdCBzZXF1ZW5jZQ0KKy8vDQorRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICpnUGxhdGZvcm1Db25uZWN0U2VxdWVuY2VbXSA9IHsgTlVM TCB9Ow0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9M aWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuYyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxl c0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAuLmJlNjE5YzgzOGENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJp YWxpemVWYXJpYWJsZXNMaWIuYw0KQEAgLTAsMCArMSw4NjkgQEANCisvKiogQGZpbGUNCisgIFNl cmlhbGl6ZSBWYXJpYWJsZXMgTGlicmFyeSBpbXBsZW1lbnRhdGlvbg0KKw0KKyAgQ29weXJpZ2h0 IChjKSAyMDA0IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g PEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN CisqKi8NCisNCisjaW5jbHVkZSAiU2VyaWFsaXplVmFyaWFibGVzTGliLmgiDQorDQorLyoqDQor ICBTZXJpYWxpemF0aW9uIGZvcm1hdDoNCisNCisgIFRoZSBTZXJpYWxpemVWYXJpYWJsZXNMaWIg aW50ZXJmYWNlIGRvZXMgbm90IHNwZWNpZnkgYSBmb3JtYXQNCisgIGZvciB0aGUgc2VyaWFsaXph dGlvbiBvZiB0aGUgdmFyaWFibGUgZGF0YS4gIFRoaXMgbGlicmFyeSB1c2VzDQorICBhIHBhY2tl ZCBhcnJheSBvZiBhIG5vbi11bmlmb3JtbHkgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmUgZWxlbWVudHMu DQorDQorICBFYWNoIHZhcmlhYmxlIGlzIHN0b3JlZCAocGFja2VkKSBhczoNCisgICAgVUlOVDMy ICAgVmVuZG9yTmFtZVNpemU7ICAvLyBOYW1lIHNpemUgaW4gYnl0ZXMNCisgICAgQ0hBUjE2ICAg VmVuZG9yTmFtZVs/XTsgICAvLyBUaGUgdmFyaWFibGUgdW5pY29kZSBuYW1lIGluY2x1ZGluZyB0 aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsIHRlcm1pbmF0aW5nIGNo YXJhY3Rlci4NCisgICAgRUZJX0dVSUQgVmVuZG9yR3VpZDsgICAgICAvLyBUaGUgdmFyaWFibGUg R1VJRA0KKyAgICBVSU5UMzIgICBEYXRhU2l6ZTsgICAgICAgIC8vIFRoZSBzaXplIG9mIHZhcmlh YmxlIGRhdGEgaW4gYnl0ZXMNCisgICAgVUlOVDggICAgRGF0YVs/XTsgICAgICAgICAvLyBUaGUg dmFyaWFibGUgZGF0YQ0KKw0KKyoqLw0KKw0KKw0KKy8qKg0KKyAgVW5wYWNrcyB0aGUgbmV4dCB2 YXJpYWJsZSBmcm9tIHRoZSBidWZmZXINCisNCisgIEBwYXJhbVtpbl0gIEJ1ZmZlciAtIEJ1ZmZl ciBwb2ludGluZyB0byB0aGUgbmV4dCB2YXJpYWJsZSBpbnN0YW5jZQ0KKyAgICAgICAgICAgICAg ICBPbiBzdWJzZXF1ZW50IGNhbGxzLCB0aGUgcG9pbnRlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQN CisgICAgICAgICAgICAgICAgYnkgdGhlIHJldHVybmVkIFNpemVVc2VkIHZhbHVlLg0KKyAgQHBh cmFtW2luXSAgTWF4U2l6ZSAtIE1heCBhbGxvd2FibGUgc2l6ZSBmb3IgdGhlIHZhcmlhYmxlIGRh dGENCisgICAgICAgICAgICAgICAgT24gc3Vic2VxdWVudCBjYWxscywgdGhpcyBzaG91bGQgYmUg ZGVjcmVtZW50ZWQNCisgICAgICAgICAgICAgICAgYnkgdGhlIHJldHVybmVkIFNpemVVc2VkIHZh bHVlLg0KKyAgQHBhcmFtW291dF0gTmFtZSAtIFZhcmlhYmxlIG5hbWUgc3RyaW5nIChhZGRyZXNz IGluIEJ1ZmZlcikNCisgIEBwYXJhbVtvdXRdIE5hbWVTaXplIC0gU2l6ZSBvZiBOYW1lIGluIGJ5 dGVzDQorICBAcGFyYW1bb3V0XSBHdWlkIC0gR1VJRCBvZiB2YXJpYWJsZSAoYWRkcmVzcyBpbiBC dWZmZXIpDQorICBAcGFyYW1bb3V0XSBBdHRyaWJ1dGVzIC0gQXR0cmlidXRlcyBvZiB2YXJpYWJs ZQ0KKyAgQHBhcmFtW291dF0gRGF0YSAtIEJ1ZmZlciBjb250YWluaW5nIERhdGEgZm9yIHZhcmlh YmxlIChhZGRyZXNzIGluIEJ1ZmZlcikNCisgIEBwYXJhbVtvdXRdIERhdGFTaXplIC0gU2l6ZSBv ZiBEYXRhIGluIGJ5dGVzDQorICBAcGFyYW1bb3V0XSBTaXplVXNlZCAtIFRvdGFsIHNpemUgdXNl ZCBmb3IgdGhpcyB2YXJpYWJsZSBpbnN0YW5jZSBpbiBCdWZmZXINCisNCisgIEByZXR1cm4gICAg IEVGSV9TVEFUVVMgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0 aW9uDQorDQorKiovDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK1VucGFja1ZhcmlhYmxlRnJvbUJ1 ZmZlciAoDQorICBJTiAgVk9JRCAgICAgKkJ1ZmZlciwNCisgIElOICBVSU5UTiAgICBNYXhTaXpl LA0KKyAgT1VUIENIQVIxNiAgICoqTmFtZSwNCisgIE9VVCBVSU5UMzIgICAqTmFtZVNpemUsDQor ICBPVVQgRUZJX0dVSUQgKipHdWlkLA0KKyAgT1VUIFVJTlQzMiAgICpBdHRyaWJ1dGVzLA0KKyAg T1VUIFVJTlQzMiAgICpEYXRhU2l6ZSwNCisgIE9VVCBWT0lEICAgICAqKkRhdGEsDQorICBPVVQg VUlOVE4gICAgKlNpemVVc2VkDQorICApDQorew0KKyAgVUlOVDggICpCeXRlUHRyOw0KKyAgVUlO VE4gIE9mZnNldDsNCisNCisgIEJ5dGVQdHIgPSAoVUlOVDgqKUJ1ZmZlcjsNCisgIE9mZnNldCA9 IDA7DQorDQorICAqTmFtZVNpemUgPSAqKFVJTlQzMiopIChCeXRlUHRyICsgT2Zmc2V0KTsNCisg IE9mZnNldCA9IE9mZnNldCArIHNpemVvZiAoVUlOVDMyKTsNCisNCisgIGlmIChPZmZzZXQgPiBN YXhTaXplKSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQor ICAqTmFtZSA9IChDSEFSMTYqKSAoQnl0ZVB0ciArIE9mZnNldCk7DQorICBPZmZzZXQgPSBPZmZz ZXQgKyAqKFVJTlQzMiopQnl0ZVB0cjsNCisgIGlmIChPZmZzZXQgPiBNYXhTaXplKSB7DQorICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAqR3VpZCA9IChFRklf R1VJRCopIChCeXRlUHRyICsgT2Zmc2V0KTsNCisgIE9mZnNldCA9IE9mZnNldCArIHNpemVvZiAo RUZJX0dVSUQpOw0KKyAgaWYgKE9mZnNldCA+IE1heFNpemUpIHsNCisgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgICpBdHRyaWJ1dGVzID0gKihVSU5UMzIqKSAo Qnl0ZVB0ciArIE9mZnNldCk7DQorICBPZmZzZXQgPSBPZmZzZXQgKyBzaXplb2YgKFVJTlQzMik7 DQorICBpZiAoT2Zmc2V0ID4gTWF4U2l6ZSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KKyAgfQ0KKw0KKyAgKkRhdGFTaXplID0gKihVSU5UMzIqKSAoQnl0ZVB0ciArIE9m ZnNldCk7DQorICBPZmZzZXQgPSBPZmZzZXQgKyBzaXplb2YgKFVJTlQzMik7DQorICBpZiAoT2Zm c2V0ID4gTWF4U2l6ZSkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAg fQ0KKw0KKyAgKkRhdGEgPSAoVk9JRCopIChCeXRlUHRyICsgT2Zmc2V0KTsNCisgIE9mZnNldCA9 IE9mZnNldCArICpEYXRhU2l6ZTsNCisgIGlmIChPZmZzZXQgPiBNYXhTaXplKSB7DQorICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICAqU2l6ZVVzZWQgPSBPZmZz ZXQ7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgSXRlcmF0 ZXMgdGhyb3VnaCB0aGUgdmFyaWFibGVzIGluIHRoZSBidWZmZXIsIGFuZCBjYWxscyBhIGNhbGxi YWNrDQorICBmdW5jdGlvbiBmb3IgZWFjaCB2YXJpYWJsZSBmb3VuZC4NCisNCisgIEBwYXJhbVtp bl0gIENhbGxiYWNrRnVuY3Rpb24gLSBGdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggdmFyaWFibGUg aW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gIENvbnRleHQgLSBQYXNzZWQgdG8gZWFjaCBjYWxsIG9m IENhbGxiYWNrRnVuY3Rpb24NCisgIEBwYXJhbVtpbl0gIEJ1ZmZlciAtIEJ1ZmZlciBjb250YWlu aW5nIHNlcmlhbGl6ZWQgdmFyaWFibGVzDQorICBAcGFyYW1baW5dICBNYXhTaXplIC0gU2l6ZSBv ZiBCdWZmZXIgaW4gYnl0ZXMNCisNCisgIEByZXR1cm4gICAgIEVGSV9TVEFUVVMgYmFzZWQgb24g dGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uDQorDQorKiovDQorU1RBVElD DQorRUZJX1NUQVRVUw0KK0l0ZXJhdGVWYXJpYWJsZXNJbkJ1ZmZlciAoDQorICBJTiBWQVJJQUJM RV9TRVJJQUxJWkFUSU9OX0lURVJBVElPTl9DQUxMQkFDSyAgQ2FsbGJhY2tGdW5jdGlvbiwNCisg IElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2FsbGJhY2tD b250ZXh0LA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpCdWZmZXIsDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWF4U2l6ZQ0KKyAgKQ0KK3sNCisgIFJFVFVSTl9TVEFUVVMgU3RhdHVzOw0KKyAgVUlOVE4g ICAgICAgICBUb3RhbFNpemVVc2VkOw0KKyAgVUlOVE4gICAgICAgICBTaXplVXNlZDsNCisNCisg IENIQVIxNiAgICAgICAgKk5hbWU7DQorICBVSU5UMzIgICAgICAgIE5hbWVTaXplOw0KKyAgQ0hB UjE2ICAgICAgICAqQWxpZ25lZE5hbWU7DQorICBVSU5UMzIgICAgICAgIEFsaWduZWROYW1lTWF4 U2l6ZTsNCisgIEVGSV9HVUlEICAgICAgKkd1aWQ7DQorICBVSU5UMzIgICAgICAgIEF0dHJpYnV0 ZXM7DQorICBVSU5UMzIgICAgICAgIERhdGFTaXplOw0KKyAgVk9JRCAgICAgICAgICAqRGF0YTsN CisNCisgIFNpemVVc2VkID0gMDsNCisgIEFsaWduZWROYW1lID0gTlVMTDsNCisgIEFsaWduZWRO YW1lTWF4U2l6ZSA9IDA7DQorICBOYW1lID0gTlVMTDsNCisgIEd1aWQgPSBOVUxMOw0KKyAgQXR0 cmlidXRlcyA9IDA7DQorICBEYXRhU2l6ZSA9IDA7DQorICBEYXRhID0gTlVMTDsNCisNCisgIGZv ciAoDQorICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTLCBUb3RhbFNpemVVc2VkID0gMDsNCisgICAg IUVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoVG90YWxTaXplVXNlZCA8IE1heFNpemUpOw0KKyAgICAp IHsNCisgICAgU3RhdHVzID0gVW5wYWNrVmFyaWFibGVGcm9tQnVmZmVyICgNCisgICAgICAgICAg ICAgICAoVk9JRCopICgoVUlOVDgqKSBCdWZmZXIgKyBUb3RhbFNpemVVc2VkKSwNCisgICAgICAg ICAgICAgICAoTWF4U2l6ZSAtIFRvdGFsU2l6ZVVzZWQpLA0KKyAgICAgICAgICAgICAgICZOYW1l LA0KKyAgICAgICAgICAgICAgICZOYW1lU2l6ZSwNCisgICAgICAgICAgICAgICAmR3VpZCwNCisg ICAgICAgICAgICAgICAmQXR0cmlidXRlcywNCisgICAgICAgICAgICAgICAmRGF0YVNpemUsDQor ICAgICAgICAgICAgICAgJkRhdGEsDQorICAgICAgICAgICAgICAgJlNpemVVc2VkDQorICAgICAg ICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVy biBTdGF0dXM7DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gV2UgY29weSB0aGUgbmFtZSB0 byBhIHNlcGFyYXRlbHkgYWxsb2NhdGVkIGJ1ZmZlciwNCisgICAgLy8gdG8gYmUgc3VyZSBpdCBp cyAxNi1iaXQgYWxpZ25lZC4NCisgICAgLy8NCisgICAgaWYgKE5hbWVTaXplID4gQWxpZ25lZE5h bWVNYXhTaXplKSB7DQorICAgICAgaWYgKEFsaWduZWROYW1lICE9IE5VTEwpIHsNCisgICAgICAg IEZyZWVQb29sIChBbGlnbmVkTmFtZSk7DQorICAgICAgfQ0KKyAgICAgIEFsaWduZWROYW1lID0g QWxsb2NhdGVQb29sIChOYW1lU2l6ZSk7DQorICAgIH0NCisgICAgaWYgKEFsaWduZWROYW1lID09 IE5VTEwpIHsNCisgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgIH0NCisg ICAgQ29weU1lbSAoQWxpZ25lZE5hbWUsIE5hbWUsIE5hbWVTaXplKTsNCisNCisgICAgVG90YWxT aXplVXNlZCA9IFRvdGFsU2l6ZVVzZWQgKyBTaXplVXNlZDsNCisNCisgICAgLy8NCisgICAgLy8g UnVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbg0KKyAgICAvLw0KKyAgICBTdGF0dXMgPSAoKkNhbGxi YWNrRnVuY3Rpb24pICgNCisgICAgICAgICAgICAgICBDYWxsYmFja0NvbnRleHQsDQorICAgICAg ICAgICAgICAgQWxpZ25lZE5hbWUsDQorICAgICAgICAgICAgICAgR3VpZCwNCisgICAgICAgICAg ICAgICBBdHRyaWJ1dGVzLA0KKyAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgICAgICAgICAg ICAgIERhdGENCisgICAgICAgICAgICAgICApOw0KKw0KKyAgfQ0KKw0KKyAgaWYgKEFsaWduZWRO YW1lICE9IE5VTEwpIHsNCisgICAgRnJlZVBvb2wgKEFsaWduZWROYW1lKTsNCisgIH0NCisNCisg IC8vDQorICAvLyBNYWtlIHN1cmUgdGhlIGVudGlyZSBidWZmZXIgd2FzIHVzZWQsIG9yIGVsc2Ug cmV0dXJuIGFuIGVycm9yDQorICAvLw0KKyAgaWYgKFRvdGFsU2l6ZVVzZWQgIT0gTWF4U2l6ZSkg ew0KKyAgICBERUJVRyAoKA0KKyAgICAgIEVGSV9EX0VSUk9SLA0KKyAgICAgICJEZXNlcmlhbGl6 ZSB2YXJpYWJsZXMgZXJyb3I6IFRvdGFsU2l6ZVVzZWQoJUx1KSAhPSBNYXhTaXplKCVMdSlcbiIs DQorICAgICAgKFVJTlQ2NClUb3RhbFNpemVVc2VkLA0KKyAgICAgIChVSU5UNjQpTWF4U2l6ZQ0K KyAgICAgICkpOw0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKw0K KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCitTVEFUSUMNCitSRVRVUk5fU1RBVFVT DQorRUZJQVBJDQorSXRlcmF0ZVZhcmlhYmxlc0NhbGxiYWNrTm9wICgNCisgIElOICBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICpDb250ZXh0LA0KKyAgSU4gIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCisgIElOICBFRklfR1VJRCAgICAgICAgICAgICAg ICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg QXR0cmlidXRlcywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXpl LA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7DQor ICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK1JFVFVSTl9TVEFU VVMNCitFRklBUEkNCitJdGVyYXRlVmFyaWFibGVzQ2FsbGJhY2tTZXRJbkluc3RhbmNlICgNCisg IElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpDb250ZXh0LA0KKyAgSU4gIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgKlZhcmlhYmxlTmFtZSwNCisgIElOICBFRklfR1VJRCAg ICAgICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgQXR0cmlidXRlcywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgIERhdGFTaXplLA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGEN CisgICkNCit7DQorICBFRklfSEFORExFICBJbnN0YW5jZTsNCisNCisgIEluc3RhbmNlID0gKEVG SV9IQU5ETEUpIENvbnRleHQ7DQorDQorICByZXR1cm4gU2VyaWFsaXplVmFyaWFibGVzQWRkVmFy aWFibGUgKA0KKyAgICAgICAgICAgSW5zdGFuY2UsDQorICAgICAgICAgICBWYXJpYWJsZU5hbWUs DQorICAgICAgICAgICBWZW5kb3JHdWlkLA0KKyAgICAgICAgICAgQXR0cmlidXRlcywNCisgICAg ICAgICAgIERhdGFTaXplLA0KKyAgICAgICAgICAgRGF0YQ0KKyAgICAgICAgICAgKTsNCit9DQor DQorDQorU1RBVElDDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK0l0ZXJhdGVWYXJpYWJsZXND YWxsYmFja1NldFN5c3RlbVZhcmlhYmxlICgNCisgIElOICBWT0lEICAgICAgICAgICAgICAgICAg ICAgICAgICpDb250ZXh0LA0KKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKlZh cmlhYmxlTmFtZSwNCisgIElOICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICpWZW5kb3JH dWlkLA0KKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlcywNCisg IElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERhdGFTaXplLA0KKyAgSU4gIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkNCit7DQorICBFRklfU1RBVFVTICAg ICAgICAgIFN0YXR1czsNCisgIFNUQVRJQyBDT05TVCBVSU5UMzIgQXV0aE1hc2sgPQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9BVVRIRU5USUNBVEVEX1dSSVRFX0FDQ0VT UyB8DQorICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX1RJTUVfQkFTRURfQVVU SEVOVElDQVRFRF9XUklURV9BQ0NFU1M7DQorDQorICBTdGF0dXMgPSBnUlQtPlNldFZhcmlhYmxl ICgNCisgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAgICBWZW5kb3JHdWlk LA0KKyAgICAgICAgICAgICBBdHRyaWJ1dGVzLA0KKyAgICAgICAgICAgICBEYXRhU2l6ZSwNCisg ICAgICAgICAgICAgRGF0YQ0KKyAgICAgICAgICAgICApOw0KKw0KKyAgaWYgKFN0YXR1cyA9PSBF RklfU0VDVVJJVFlfVklPTEFUSU9OICYmIChBdHRyaWJ1dGVzICYgQXV0aE1hc2spICE9IDApIHsN CisgICAgREVCVUcgKChERUJVR19XQVJOLCAiJWE6IHNldHRpbmcgYXV0aGVudGljYXRlZCB2YXJp YWJsZSBcIiVzXCIgIg0KKyAgICAgICAgICAgICJmYWlsZWQgd2l0aCBFRklfU0VDVVJJVFlfVklP TEFUSU9OLCBpZ25vcmluZ1xuIiwgX19GVU5DVElPTl9fLA0KKyAgICAgICAgICAgIFZhcmlhYmxl TmFtZSkpOw0KKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgIH0gZWxzZSBpZiAoU3RhdHVz ID09IEVGSV9XUklURV9QUk9URUNURUQpIHsNCisgICAgREVCVUcgKChERUJVR19XQVJOLCAiJWE6 IHNldHRpbmcgUmVhZE9ubHkgdmFyaWFibGUgXCIlc1wiICINCisgICAgICAgICAgICAiZmFpbGVk IHdpdGggRUZJX1dSSVRFX1BST1RFQ1RFRCwgaWdub3JpbmdcbiIsIF9fRlVOQ1RJT05fXywNCisg ICAgICAgICAgICBWYXJpYWJsZU5hbWUpKTsNCisgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQor ICB9DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCitTVEFUSUMNCitSRVRVUk5fU1RBVFVT DQorRW5zdXJlRXh0cmFCdWZmZXJTcGFjZSAoDQorICBJTiAgU1ZfSU5TVEFOQ0UgICpJbnN0YW5j ZSwNCisgIElOICBVSU5UTiAgICAgICAgU2l6ZQ0KKyAgKQ0KK3sNCisgIFZPSUQgKk5ld0J1ZmZl cjsNCisgIFVJTlROIE5ld1NpemU7DQorDQorICBOZXdTaXplID0gSW5zdGFuY2UtPkRhdGFTaXpl ICsgU2l6ZTsNCisgIGlmIChOZXdTaXplIDw9IEluc3RhbmNlLT5CdWZmZXJTaXplKSB7DQorICAg IHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCisgIH0NCisNCisgIC8vDQorICAvLyBEb3VibGUgdGhl IHJlcXVpcmVkIHNpemUgdG8gbGVzc2VuIHRoZSBuZWVkIHRvIHJlLWFsbG9jYXRlIGluIHRoZSBm dXR1cmUNCisgIC8vDQorICBOZXdTaXplID0gMiAqIE5ld1NpemU7DQorDQorICBOZXdCdWZmZXIg PSBBbGxvY2F0ZVBvb2wgKE5ld1NpemUpOw0KKyAgaWYgKE5ld0J1ZmZlciA9PSBOVUxMKSB7DQor ICAgIHJldHVybiBSRVRVUk5fT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGlmIChJbnN0 YW5jZS0+QnVmZmVyUHRyICE9IE5VTEwpIHsNCisgICAgQ29weU1lbSAoTmV3QnVmZmVyLCBJbnN0 YW5jZS0+QnVmZmVyUHRyLCBJbnN0YW5jZS0+RGF0YVNpemUpOw0KKyAgICBGcmVlUG9vbCAoSW5z dGFuY2UtPkJ1ZmZlclB0cik7DQorICB9DQorDQorICBJbnN0YW5jZS0+QnVmZmVyUHRyID0gTmV3 QnVmZmVyOw0KKyAgSW5zdGFuY2UtPkJ1ZmZlclNpemUgPSBOZXdTaXplOw0KKw0KKyAgcmV0dXJu IFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCisNCitTVEFUSUMNCitWT0lEDQorQXBwZW5kVG9CdWZm ZXIgKA0KKyAgSU4gIFNWX0lOU1RBTkNFICAqSW5zdGFuY2UsDQorICBJTiAgVk9JRCAgICAgICAg ICpEYXRhLA0KKyAgSU4gIFVJTlROICAgICAgICBTaXplDQorICApDQorew0KKyAgVUlOVE4gTmV3 U2l6ZTsNCisNCisgIEFTU0VSVCAoSW5zdGFuY2UgIT0gTlVMTCk7DQorICBBU1NFUlQgKERhdGEg IT0gTlVMTCk7DQorDQorICBOZXdTaXplID0gSW5zdGFuY2UtPkRhdGFTaXplICsgU2l6ZTsNCisg IEFTU0VSVCAoKEluc3RhbmNlLT5EYXRhU2l6ZSArIFNpemUpIDw9IEluc3RhbmNlLT5CdWZmZXJT aXplKTsNCisNCisgIENvcHlNZW0gKA0KKyAgICAoVk9JRCopICgoKFVJTlQ4KikgKEluc3RhbmNl LT5CdWZmZXJQdHIpKSArIEluc3RhbmNlLT5EYXRhU2l6ZSksDQorICAgIERhdGEsDQorICAgIFNp emUNCisgICAgKTsNCisNCisgIEluc3RhbmNlLT5EYXRhU2l6ZSA9IE5ld1NpemU7DQorfQ0KKw0K Kw0KKy8qKg0KKyAgQ3JlYXRlcyBhIG5ldyB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNl DQorDQorICBAcGFyYW1bb3V0XSAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlh bGl6YXRpb24gaW5zdGFuY2UNCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRo ZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlIHdhcw0KKyAgICAgICAgICAgICAgICAg c3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNP VVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAg ICAgY3JlYXRlIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlLg0KKw0KKyoqLw0K K1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZSAo DQorICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlDQorICApDQor ew0KKyAgU1ZfSU5TVEFOQ0UgICpOZXc7DQorDQorICBOZXcgPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKCpOZXcpKTsNCisgIGlmIChOZXcgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gUkVUVVJO X09VVF9PRl9SRVNPVVJDRVM7DQorICB9DQorDQorICBOZXctPlNpZ25hdHVyZSA9IFNWX1NJR05B VFVSRTsNCisNCisgICpIYW5kbGUgPSAoRUZJX0hBTkRMRSkgTmV3Ow0KKyAgcmV0dXJuIFJFVFVS Tl9TVUNDRVNTOw0KK30NCisNCisNCisvKioNCisgIEZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0 aCBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisNCisgIEBwYXJhbVtpbl0gIEhh bmRsZSAtIEhhbmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQor ICBAcmV0dmFsICAgICAgUkVUVVJOX1NVQ0NFU1MgLSBUaGUgdmFyaWFibGUgc2VyaWFsaXphdGlv biBpbnN0YW5jZSB3YXMNCisgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBmcmVlZC4NCisg IEByZXR2YWwgICAgICBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVIgLSBIYW5kbGUgd2FzIG5vdCBh IHZhbGlkDQorICAgICAgICAgICAgICAgICB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNl Lg0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNG cmVlSW5zdGFuY2UgKA0KKyAgSU4gRUZJX0hBTkRMRSBIYW5kbGUNCisgICkNCit7DQorICBTVl9J TlNUQU5DRSAgICAqSW5zdGFuY2U7DQorDQorICBJbnN0YW5jZSA9IFNWX0ZST01fSEFORExFIChI YW5kbGUpOw0KKw0KKyAgaWYgKEluc3RhbmNlLT5TaWduYXR1cmUgIT0gU1ZfU0lHTkFUVVJFKSB7 DQorICAgIHJldHVybiBSRVRVUk5fSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBJbnN0 YW5jZS0+U2lnbmF0dXJlID0gMDsNCisNCisgIGlmIChJbnN0YW5jZS0+QnVmZmVyUHRyICE9IE5V TEwpIHsNCisgICAgRnJlZVBvb2wgKEluc3RhbmNlLT5CdWZmZXJQdHIpOw0KKyAgfQ0KKw0KKyAg RnJlZVBvb2wgKEluc3RhbmNlKTsNCisNCisgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCit9DQor DQorDQorLyoqDQorICBDcmVhdGVzIGEgbmV3IHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFu Y2UgdXNpbmcgdGhlIGdpdmVuDQorICBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlh YmxlcyB0byBmaWxsIHRoZSBuZXcgaW5zdGFuY2UNCisNCisgIEBwYXJhbVtvdXRdIEhhbmRsZSAt IEhhbmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1b aW5dICBCdWZmZXIgLSBBIGJ1ZmZlciB3aXRoIHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9u DQorICAgICAgICAgICAgICAgIG9mIHRoZSB2YXJpYWJsZXMuICBNdXN0IGJlIHRoZSBzYW1lIGZv cm1hdCBhcyBwcm9kdWNlZA0KKyAgICAgICAgICAgICAgICBieSBTZXJpYWxpemVWYXJpYWJsZXNU b0J1ZmZlci4NCisgIEBwYXJhbVtpbl0gIFNpemUgLSBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBi aW5hcnkgcmVwcmVzZW50YXRpb24NCisgICAgICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcy4N CisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSBiaW5hcnkgcmVwcmVzZW50 YXRpb24gd2FzIHN1Y2Nlc3NmdWxseQ0KKyAgICAgICAgICAgICAgICAgaW1wb3J0ZWQgaW50byBh IG5ldyB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcmV0dmFsICAgICAgUkVU VVJOX09VVF9PRl9SRVNPVVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0K KyAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSBuZXcgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBp bnN0YW5jZQ0KKw0KKyoqLw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJp YWJsZXNOZXdJbnN0YW5jZUZyb21CdWZmZXIgKA0KKyAgT1VUIEVGSV9IQU5ETEUgICAgICAgICAg ICAgICAgICAgICAgICAgICpIYW5kbGUsDQorICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlciwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTaXplDQorICApDQorew0KKyAgUkVUVVJOX1NUQVRVUyBTdGF0dXM7DQorDQorICBT dGF0dXMgPSBTZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZSAoSGFuZGxlKTsNCisgIGlmIChS RVRVUk5fRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisg IFN0YXR1cyA9IEl0ZXJhdGVWYXJpYWJsZXNJbkJ1ZmZlciAoDQorICAgICAgICAgICAgIEl0ZXJh dGVWYXJpYWJsZXNDYWxsYmFja05vcCwNCisgICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAg ICAgQnVmZmVyLA0KKyAgICAgICAgICAgICBTaXplDQorICAgICAgICAgICAgICk7DQorICBpZiAo UkVUVVJOX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIFNlcmlhbGl6ZVZhcmlhYmxlc0ZyZWVJbnN0 YW5jZSAoKkhhbmRsZSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMg PSBJdGVyYXRlVmFyaWFibGVzSW5CdWZmZXIgKA0KKyAgICAgICAgICAgICBJdGVyYXRlVmFyaWFi bGVzQ2FsbGJhY2tTZXRJbkluc3RhbmNlLA0KKyAgICAgICAgICAgICAoVk9JRCopICpIYW5kbGUs DQorICAgICAgICAgICAgIEJ1ZmZlciwNCisgICAgICAgICAgICAgU2l6ZQ0KKyAgICAgICAgICAg ICApOw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBTZXJpYWxpemVWYXJp YWJsZXNGcmVlSW5zdGFuY2UgKCpIYW5kbGUpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0K Kw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJdGVyYXRlcyBhbGwgdmFy aWFibGVzIGZvdW5kIHdpdGggUnVudGltZVNlcnZpY2VzIEdldE5leHRWYXJpYWJsZU5hbWUNCisN CisgIEBwYXJhbVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0gRnVuY3Rpb24gY2FsbGVkIGZvciBl YWNoIHZhcmlhYmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ29udGV4dCAtIFBhc3NlZCB0 byBlYWNoIGNhbGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVS Tl9TVUNDRVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJhdGVkIHdpdGhvdXQgdGhlDQorICAg ICAgICAgICAgICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVybmluZyBhbiBlcnJvcg0KKyAgQHJl dHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCBy ZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFyaWFi bGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9FUlJPUiBpbmRpY2F0ZXMgYW4gZXJy b3IgcmVhZGluZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAgICAgICAgIG9yIGFuIGVycm9yIHdh cyByZXR1cm5lZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisNCisqKi8NCitSRVRVUk5fU1RBVFVT DQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0ZVN5c3RlbVZhcmlhYmxlcyAoDQor ICBJTiBWQVJJQUJMRV9TRVJJQUxJWkFUSU9OX0lURVJBVElPTl9DQUxMQkFDSyBDYWxsYmFja0Z1 bmN0aW9uLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkNvbnRleHQNCisgICkNCit7DQorICBSRVRVUk5fU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZUJ1ZmZlclNpemU7 DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lU2l6ZTsNCisgIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAqVmFyaWFibGVOYW1lOw0KKyAgRUZJX0dVSUQgICAg ICAgICAgICAgICAgICAgIFZlbmRvckd1aWQ7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgVmFyaWFibGVEYXRhQnVmZmVyU2l6ZTsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICBWYXJpYWJsZURhdGFTaXplOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpWYXJp YWJsZURhdGE7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBdHRyaWJ1 dGVzOw0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICpOZXdCdWZmZXI7DQorDQorICAv Lw0KKyAgLy8gSW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgbmFtZSBhbmQgZGF0YSBidWZmZXIgdmFy aWFibGVzLg0KKyAgLy8NCisgIFZhcmlhYmxlTmFtZUJ1ZmZlclNpemUgPSBzaXplb2YgKENIQVIx Nik7DQorICBWYXJpYWJsZU5hbWUgPSBBbGxvY2F0ZVplcm9Qb29sIChWYXJpYWJsZU5hbWVCdWZm ZXJTaXplKTsNCisNCisgIFZhcmlhYmxlRGF0YUJ1ZmZlclNpemUgPSAwOw0KKyAgVmFyaWFibGVE YXRhID0gTlVMTDsNCisNCisgIGZvciAoOzspIHsNCisgICAgLy8NCisgICAgLy8gR2V0IHRoZSBu ZXh0IHZhcmlhYmxlIG5hbWUgYW5kIGd1aWQNCisgICAgLy8NCisgICAgVmFyaWFibGVOYW1lU2l6 ZSA9IFZhcmlhYmxlTmFtZUJ1ZmZlclNpemU7DQorICAgIFN0YXR1cyA9IGdSVC0+R2V0TmV4dFZh cmlhYmxlTmFtZSAoDQorICAgICAgICAgICAgICAgICAgICAmVmFyaWFibGVOYW1lU2l6ZSwNCisg ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlTmFtZSwNCisgICAgICAgICAgICAgICAgICAgICZW ZW5kb3JHdWlkDQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoU3RhdHVzID09IEVG SV9CVUZGRVJfVE9PX1NNQUxMKSB7DQorICAgICAgLy8NCisgICAgICAvLyBUaGUgY3VycmVudGx5 IGFsbG9jYXRlZCBWYXJpYWJsZU5hbWUgYnVmZmVyIGlzIHRvbyBzbWFsbCwNCisgICAgICAvLyBz byB3ZSBhbGxvY2F0ZSBhIGxhcmdlciBidWZmZXIsIGFuZCBjb3B5IHRoZSBvbGQgYnVmZmVyDQor ICAgICAgLy8gdG8gaXQuDQorICAgICAgLy8NCisgICAgICBOZXdCdWZmZXIgPSBBbGxvY2F0ZVBv b2wgKFZhcmlhYmxlTmFtZVNpemUpOw0KKyAgICAgIGlmIChOZXdCdWZmZXIgPT0gTlVMTCkgew0K KyAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgICAgICBicmVhazsN CisgICAgICB9DQorICAgICAgQ29weU1lbSAoTmV3QnVmZmVyLCBWYXJpYWJsZU5hbWUsIFZhcmlh YmxlTmFtZUJ1ZmZlclNpemUpOw0KKyAgICAgIGlmIChWYXJpYWJsZU5hbWUgIT0gTlVMTCkgew0K KyAgICAgICAgRnJlZVBvb2wgKFZhcmlhYmxlTmFtZSk7DQorICAgICAgfQ0KKyAgICAgIFZhcmlh YmxlTmFtZSA9IE5ld0J1ZmZlcjsNCisgICAgICBWYXJpYWJsZU5hbWVCdWZmZXJTaXplID0gVmFy aWFibGVOYW1lU2l6ZTsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFRyeSB0byBnZXQgdGhlIG5l eHQgdmFyaWFibGUgbmFtZSBhZ2FpbiB3aXRoIHRoZSBsYXJnZXIgYnVmZmVyLg0KKyAgICAgIC8v DQorICAgICAgU3RhdHVzID0gZ1JULT5HZXROZXh0VmFyaWFibGVOYW1lICgNCisgICAgICAgICAg ICAgICAgICAgICAgJlZhcmlhYmxlTmFtZVNpemUsDQorICAgICAgICAgICAgICAgICAgICAgIFZh cmlhYmxlTmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgJlZlbmRvckd1aWQNCisgICAgICAg ICAgICAgICAgICAgICAgKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQorICAgICAgICBTdGF0 dXMgPSBFRklfU1VDQ0VTUzsNCisgICAgICB9DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisg ICAgLy8NCisgICAgLy8gR2V0IHRoZSB2YXJpYWJsZSBkYXRhIGFuZCBhdHRyaWJ1dGVzDQorICAg IC8vDQorICAgIFZhcmlhYmxlRGF0YVNpemUgPSBWYXJpYWJsZURhdGFCdWZmZXJTaXplOw0KKyAg ICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCisgICAgICAgICAgICAgICAgICAgIFZhcmlh YmxlTmFtZSwNCisgICAgICAgICAgICAgICAgICAgICZWZW5kb3JHdWlkLA0KKyAgICAgICAgICAg ICAgICAgICAgJlZhcmlhYmxlQXR0cmlidXRlcywNCisgICAgICAgICAgICAgICAgICAgICZWYXJp YWJsZURhdGFTaXplLA0KKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVEYXRhDQorICAgICAg ICAgICAgICAgICAgICApOw0KKyAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxM KSB7DQorICAgICAgLy8NCisgICAgICAvLyBUaGUgY3VycmVudGx5IGFsbG9jYXRlZCBWYXJpYWJs ZURhdGEgYnVmZmVyIGlzIHRvbyBzbWFsbCwNCisgICAgICAvLyBzbyB3ZSBhbGxvY2F0ZSBhIGxh cmdlciBidWZmZXIuDQorICAgICAgLy8NCisgICAgICBpZiAoVmFyaWFibGVEYXRhQnVmZmVyU2l6 ZSAhPSAwKSB7DQorICAgICAgICBGcmVlUG9vbCAoVmFyaWFibGVEYXRhKTsNCisgICAgICAgIFZh cmlhYmxlRGF0YSA9IE5VTEw7DQorICAgICAgICBWYXJpYWJsZURhdGFCdWZmZXJTaXplID0gMDsN CisgICAgICB9DQorICAgICAgVmFyaWFibGVEYXRhID0gQWxsb2NhdGVQb29sIChWYXJpYWJsZURh dGFTaXplKTsNCisgICAgICBpZiAoVmFyaWFibGVEYXRhID09IE5VTEwpIHsNCisgICAgICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0K KyAgICAgIFZhcmlhYmxlRGF0YUJ1ZmZlclNpemUgPSBWYXJpYWJsZURhdGFTaXplOw0KKw0KKyAg ICAgIC8vDQorICAgICAgLy8gVHJ5IHRvIHJlYWQgdGhlIHZhcmlhYmxlIGFnYWluIHdpdGggdGhl IGxhcmdlciBidWZmZXIuDQorICAgICAgLy8NCisgICAgICBTdGF0dXMgPSBnUlQtPkdldFZhcmlh YmxlICgNCisgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAgICAg ICAgICAgICAgICAmVmVuZG9yR3VpZCwNCisgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxl QXR0cmlidXRlcywNCisgICAgICAgICAgICAgICAgICAgICAgJlZhcmlhYmxlRGF0YVNpemUsDQor ICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlRGF0YQ0KKyAgICAgICAgICAgICAgICAgICAg ICApOw0KKyAgICB9DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBicmVh azsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9u DQorICAgIC8vDQorICAgIFN0YXR1cyA9ICgqQ2FsbGJhY2tGdW5jdGlvbikgKA0KKyAgICAgICAg ICAgICAgIENvbnRleHQsDQorICAgICAgICAgICAgICAgVmFyaWFibGVOYW1lLA0KKyAgICAgICAg ICAgICAgICZWZW5kb3JHdWlkLA0KKyAgICAgICAgICAgICAgIFZhcmlhYmxlQXR0cmlidXRlcywN CisgICAgICAgICAgICAgICBWYXJpYWJsZURhdGFTaXplLA0KKyAgICAgICAgICAgICAgIFZhcmlh YmxlRGF0YQ0KKyAgICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgfQ0KKw0KKyAgaWYgKFZhcmlhYmxlTmFt ZSAhPSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChWYXJpYWJsZU5hbWUpOw0KKyAgfQ0KKw0KKyAg aWYgKFZhcmlhYmxlRGF0YSAhPSBOVUxMKSB7DQorICAgIEZyZWVQb29sIChWYXJpYWJsZURhdGEp Ow0KKyAgfQ0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJdGVyYXRl cyBhbGwgdmFyaWFibGVzIGZvdW5kIGluIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3Rh bmNlDQorDQorICBAcGFyYW1baW5dICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNl cmlhbGl6YXRpb24gaW5zdGFuY2UNCisgIEBwYXJhbVtpbl0gICBDYWxsYmFja0Z1bmN0aW9uIC0g RnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHZhcmlhYmxlIGluc3RhbmNlDQorICBAcGFyYW1baW5d ICAgQ29udGV4dCAtIFBhc3NlZCB0byBlYWNoIGNhbGwgb2YgQ2FsbGJhY2tGdW5jdGlvbg0KKw0K KyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIGl0ZXJh dGVkIHdpdGhvdXQgdGhlDQorICAgICAgICAgICAgICAgICBDYWxsYmFja0Z1bmN0aW9uIHJldHVy bmluZyBhbiBlcnJvcg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0g VGhlcmUgd2Ugbm90IGVub3VnaCByZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGl0ZXJh dGUgdGhyb3VnaCB0aGUgdmFyaWFibGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVSTl9F UlJPUiBpbmRpY2F0ZXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgdmFyaWFibGUNCisgICAgICAgICAg ICAgICAgIG9yIGFuIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIENhbGxiYWNrRnVuY3Rpb24NCisN CisqKi8NCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzSXRlcmF0 ZUluc3RhbmNlVmFyaWFibGVzICgNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhbmRsZSwNCisgIElOIFZBUklBQkxFX1NFUklBTElaQVRJT05fSVRFUkFU SU9OX0NBTExCQUNLIENhbGxiYWNrRnVuY3Rpb24sDQorICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KKyAgKQ0KK3sNCisgIFNWX0lOU1RBTkNF ICAgICpJbnN0YW5jZTsNCisNCisgIEluc3RhbmNlID0gU1ZfRlJPTV9IQU5ETEUgKEhhbmRsZSk7 DQorDQorICBpZiAoKEluc3RhbmNlLT5CdWZmZXJQdHIgIT0gTlVMTCkgJiYgKEluc3RhbmNlLT5E YXRhU2l6ZSAhPSAwKSkgew0KKyAgICByZXR1cm4gSXRlcmF0ZVZhcmlhYmxlc0luQnVmZmVyICgN CisgICAgICAgICAgICAgQ2FsbGJhY2tGdW5jdGlvbiwNCisgICAgICAgICAgICAgQ29udGV4dCwN CisgICAgICAgICAgICAgSW5zdGFuY2UtPkJ1ZmZlclB0ciwNCisgICAgICAgICAgICAgSW5zdGFu Y2UtPkRhdGFTaXplDQorICAgICAgICAgICAgICk7DQorICB9IGVsc2Ugew0KKyAgICByZXR1cm4g UkVUVVJOX1NVQ0NFU1M7DQorICB9DQorfQ0KKw0KKw0KKy8qKg0KKyAgU2V0cyBhbGwgdmFyaWFi bGVzIGZvdW5kIGluIHRoZSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBA cGFyYW1baW5dICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24g aW5zdGFuY2UNCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIEFsbCB2YXJpYWJs ZXMgd2VyZSBzZXQgc3VjY2Vzc2Z1bGx5DQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9S RVNPVVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAg ICAgICAgc2V0IGFsbCB0aGUgdmFyaWFibGVzDQorICBAcmV0dXJuICAgICAgQW55IG9mIFJFVFVS Tl9FUlJPUiBpbmRpY2F0ZXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgdmFyaWFibGVzDQorICAgICAg ICAgICAgICAgICBvciBpbiBhdHRlbXB0aW5nIHRvIHNldCBhIHZhcmlhYmxlDQorDQorKiovDQor UkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6ZVZhcmlhYmxlc1NldFNlcmlhbGl6ZWRW YXJpYWJsZXMgKA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxl DQorICApDQorew0KKyAgcmV0dXJuIFNlcmlhbGl6ZVZhcmlhYmxlc0l0ZXJhdGVJbnN0YW5jZVZh cmlhYmxlcyAoDQorICAgICAgICAgICBIYW5kbGUsDQorICAgICAgICAgICBJdGVyYXRlVmFyaWFi bGVzQ2FsbGJhY2tTZXRTeXN0ZW1WYXJpYWJsZSwNCisgICAgICAgICAgIE5VTEwNCisgICAgICAg ICAgICk7DQorfQ0KKw0KKw0KKy8qKg0KKyAgQWRkcyBhIHZhcmlhYmxlIHRvIHRoZSB2YXJpYWJs ZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcGFyYW1baW5dIEhhbmRsZSAtIEhhbmRs ZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1baW5dIFZh cmlhYmxlTmFtZSAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBh cmFtW2luXSBWZW5kb3JHdWlkIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxl DQorICBAcGFyYW1baW5dIEF0dHJpYnV0ZXMgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0 VmFyaWFibGUNCisgIEBwYXJhbVtpbl0gRGF0YVNpemUgLSBSZWZlciB0byBSdW50aW1lU2Vydmlj ZXMgR2V0VmFyaWFibGUNCisgIEBwYXJhbVtpbl0gRGF0YSAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2 aWNlcyBHZXRWYXJpYWJsZQ0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gQWxs IHZhcmlhYmxlcyB3ZXJlIHNldCBzdWNjZXNzZnVsbHkNCisgIEByZXR2YWwgICAgICBSRVRVUk5f T1VUX09GX1JFU09VUkNFUyAtIFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvDQorICAg ICAgICAgICAgICAgICBhZGQgdGhlIHZhcmlhYmxlDQorICBAcmV0dmFsICAgICAgUkVUVVJOX0lO VkFMSURfUEFSQU1FVEVSIC0gSGFuZGxlIHdhcyBub3QgYSB2YWxpZA0KKyAgICAgICAgICAgICAg ICAgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSBvcg0KKyAgICAgICAgICAgICAgICAg VmFyaWFibGVOYW1lLCBWYXJpYWJsZUd1aWQgb3IgRGF0YSBhcmUgTlVMTC4NCisNCisqKi8NCitS RVRVUk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzQWRkVmFyaWFibGUgKA0K KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBIYW5kbGUsDQorICBJTiBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQorICBJTiBFRklfR1VJRCAgICAg ICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICBBdHRyaWJ1dGVzLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBE YXRhU2l6ZSwNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICkN Cit7DQorICBSRVRVUk5fU1RBVFVTICBTdGF0dXM7DQorICBTVl9JTlNUQU5DRSAgICAqSW5zdGFu Y2U7DQorICBVSU5UMzIgICAgICAgICBTZXJpYWxpemVkTmFtZVNpemU7DQorICBVSU5UMzIgICAg ICAgICBTZXJpYWxpemVkRGF0YVNpemU7DQorICBVSU5UTiAgICAgICAgICBTZXJpYWxpemVkU2l6 ZTsNCisNCisgIEluc3RhbmNlID0gU1ZfRlJPTV9IQU5ETEUgKEhhbmRsZSk7DQorDQorICBpZiAo KEluc3RhbmNlLT5TaWduYXR1cmUgIT0gU1ZfU0lHTkFUVVJFKSB8fA0KKyAgICAgIChWYXJpYWJs ZU5hbWUgPT0gTlVMTCkgfHwgKFZlbmRvckd1aWQgPT0gTlVMTCkgfHwgKERhdGEgPT0gTlVMTCkp IHsNCisgIH0NCisNCisgIFNlcmlhbGl6ZWROYW1lU2l6ZSA9IChVSU5UMzIpIFN0clNpemUgKFZh cmlhYmxlTmFtZSk7DQorDQorICBTZXJpYWxpemVkU2l6ZSA9DQorICAgIHNpemVvZiAoU2VyaWFs aXplZE5hbWVTaXplKSArDQorICAgIFNlcmlhbGl6ZWROYW1lU2l6ZSArDQorICAgIHNpemVvZiAo KlZlbmRvckd1aWQpICsNCisgICAgc2l6ZW9mIChBdHRyaWJ1dGVzKSArDQorICAgIHNpemVvZiAo U2VyaWFsaXplZERhdGFTaXplKSArDQorICAgIERhdGFTaXplOw0KKw0KKyAgU3RhdHVzID0gRW5z dXJlRXh0cmFCdWZmZXJTcGFjZSAoDQorICAgICAgICAgICAgIEluc3RhbmNlLA0KKyAgICAgICAg ICAgICBTZXJpYWxpemVkU2l6ZQ0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKFJFVFVSTl9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8v IEFkZCBuYW1lIHNpemUgKFVJTlQzMikNCisgIC8vDQorICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFu Y2UsIChWT0lEKikgJlNlcmlhbGl6ZWROYW1lU2l6ZSwgc2l6ZW9mIChTZXJpYWxpemVkTmFtZVNp emUpKTsNCisNCisgIC8vDQorICAvLyBBZGQgdmFyaWFibGUgdW5pY29kZSBuYW1lIHN0cmluZw0K KyAgLy8NCisgIEFwcGVuZFRvQnVmZmVyIChJbnN0YW5jZSwgKFZPSUQqKSBWYXJpYWJsZU5hbWUs IFNlcmlhbGl6ZWROYW1lU2l6ZSk7DQorDQorICAvLw0KKyAgLy8gQWRkIHZhcmlhYmxlIEdVSUQN CisgIC8vDQorICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFuY2UsIChWT0lEKikgVmVuZG9yR3VpZCwg c2l6ZW9mICgqVmVuZG9yR3VpZCkpOw0KKw0KKyAgLy8NCisgIC8vIEFkZCB2YXJpYWJsZSBhdHRy aWJ1dGVzDQorICAvLw0KKyAgQXBwZW5kVG9CdWZmZXIgKEluc3RhbmNlLCAoVk9JRCopICZBdHRy aWJ1dGVzLCBzaXplb2YgKEF0dHJpYnV0ZXMpKTsNCisNCisgIC8vDQorICAvLyBBZGQgdmFyaWFi bGUgZGF0YSBzaXplIChVSU5UMzIpDQorICAvLw0KKyAgU2VyaWFsaXplZERhdGFTaXplID0gKFVJ TlQzMikgRGF0YVNpemU7DQorICBBcHBlbmRUb0J1ZmZlciAoSW5zdGFuY2UsIChWT0lEKikgJlNl cmlhbGl6ZWREYXRhU2l6ZSwgc2l6ZW9mIChTZXJpYWxpemVkRGF0YVNpemUpKTsNCisNCisgIC8v DQorICAvLyBBZGQgdmFyaWFibGUgZGF0YQ0KKyAgLy8NCisgIEFwcGVuZFRvQnVmZmVyIChJbnN0 YW5jZSwgRGF0YSwgRGF0YVNpemUpOw0KKw0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30N CisNCisNCisvKioNCisgIFNlcmlhbGl6ZXMgdGhlIHZhcmlhYmxlcyBrbm93biB0byB0aGlzIGlu c3RhbmNlIGludG8gdGhlDQorICBwcm92aWRlZCBidWZmZXIuDQorDQorICBAcGFyYW1baW5dICAg ICBIYW5kbGUgLSBIYW5kbGUgZm9yIGEgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0K KyAgQHBhcmFtW291dF0gICAgQnVmZmVyIC0gQSBidWZmZXIgdG8gc3RvcmUgdGhlIGJpbmFyeSBy ZXByZXNlbnRhdGlvbg0KKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmFyaWFibGVzLg0KKyAg QHBhcmFtW2luLG91dF0gU2l6ZSAtIE9uIGlucHV0IHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGJ1 ZmZlci4NCisgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0IHRoaXMgaXMgdGhlIHNpemUgb2Yg dGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbg0KKyAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmFy aWFibGVzLg0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUNDRVNTIC0gVGhlIGJpbmFyeSBy ZXByZXNlbnRhdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5DQorICAgICAgICAgICAgICAgICBjb21wbGV0 ZWQgYW5kIHJldHVybmVkIGluIHRoZSBidWZmZXIuDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09V VF9PRl9SRVNPVVJDRVMgLSBUaGVyZSB3ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAg ICAgICAgICAgICAgc2F2ZSB0aGUgdmFyaWFibGVzIHRvIHRoZSBidWZmZXIuDQorICBAcmV0dmFs ICAgICAgUkVUVVJOX0lOVkFMSURfUEFSQU1FVEVSIC0gSGFuZGxlIHdhcyBub3QgYSB2YWxpZA0K KyAgICAgICAgICAgICAgICAgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSBvcg0KKyAg ICAgICAgICAgICAgICAgU2l6ZSBvciBCdWZmZXIgd2VyZSBOVUxMLg0KKyAgQHJldHZhbCAgICAg IFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMIC0gVGhlIEJ1ZmZlciBzaXplIGFzIGluZGljYXRlZCBi eQ0KKyAgICAgICAgICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIHdhcyB0b28gc21hbGwgZm9y IHRoZSBzZXJpYWxpemVkDQorICAgICAgICAgICAgICAgICB2YXJpYWJsZSBkYXRhLiAgU2l6ZSBp cyByZXR1cm5lZCB3aXRoIHRoZSByZXF1aXJlZCBzaXplLg0KKw0KKyoqLw0KK1JFVFVSTl9TVEFU VVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNUb0J1ZmZlciAoDQorICBJTiAgICAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KKyAgT1VUICAgIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXIsDQorICBJTiBPVVQgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgKlNpemUNCisgICkNCit7DQorICBTVl9JTlNUQU5DRSAgICAq SW5zdGFuY2U7DQorDQorICBJbnN0YW5jZSA9IFNWX0ZST01fSEFORExFIChIYW5kbGUpOw0KKw0K KyAgaWYgKFNpemUgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gUkVUVVJOX0lOVkFMSURfUEFSQU1F VEVSOw0KKyAgfQ0KKw0KKyAgaWYgKCpTaXplIDwgSW5zdGFuY2UtPkRhdGFTaXplKSB7DQorICAg ICpTaXplID0gSW5zdGFuY2UtPkRhdGFTaXplOw0KKyAgICByZXR1cm4gUkVUVVJOX0JVRkZFUl9U T09fU01BTEw7DQorICB9DQorDQorICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCisgICAgcmV0dXJu IFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgICpTaXplID0gSW5zdGFuY2Ut PkRhdGFTaXplOw0KKyAgQ29weU1lbSAoQnVmZmVyLCBJbnN0YW5jZS0+QnVmZmVyUHRyLCBJbnN0 YW5jZS0+RGF0YVNpemUpOw0KKw0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCmRp ZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJh cnkvU2lsaWNvblBvbGljeUluaXRMaWIvU2lsaWNvblBvbGljeUluaXRMaWIuYyBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5SW5p dExpYi9TaWxpY29uUG9saWN5SW5pdExpYi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMC4uMzgzNTAxODk4ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGljeS9MaWJyYXJ5L1NpbGljb25Qb2xpY3lJbml0TGli L1NpbGljb25Qb2xpY3lJbml0TGliLmMNCkBAIC0wLDAgKzEsMTA4IEBADQorLyoqIEBmaWxlDQor ICBDb3B5cmlnaHQgKGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQorKiovDQorDQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8 TGlicmFyeS9Jb0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKw0KKy8qKg0KKyAgUGVy Zm9ybXMgc2lsaWNvbiBwcmUtbWVtIHBvbGljeSBpbml0aWFsaXphdGlvbi4NCisNCisgIFRoZSBt ZWFuaW5nIG9mIFBvbGljeSBpcyBkZWZpbmVkIGJ5IHNpbGljb24gY29kZS4NCisgIEl0IGNvdWxk IGJlIHRoZSByYXcgZGF0YSwgYSBoYW5kbGUsIGEgUFBJLCBldGMuDQorDQorICBUaGUgcmV0dXJu ZWQgZGF0YSBtdXN0IGJlIHVzZWQgYXMgaW5wdXQgZGF0YSBmb3IgU2lsaWNvblBvbGljeURvbmVQ cmVNZW0oKSwNCisgIGFuZCBTaWxpY29uUG9saWN5VXBkYXRlTGliLlNpbGljb25Qb2xpY3lVcGRh dGVQcmVNZW0oKS4NCisNCisgIDEpIEluIEZTUCBwYXRoLCB0aGUgaW5wdXQgUG9saWN5IHNob3Vs ZCBiZSBGc3BtVXBkLg0KKyAgVmFsdWUgb2YgRnNwbVVwZCBoYXMgYmVlbiBpbml0aWFsaXplZCBi eSBGU1AgYmluYXJ5IGRlZmF1bHQgdmFsdWUuDQorICBPbmx5IGEgc3Vic2V0IG9mIEZzcG1VcGQg bmVlZHMgdG8gYmUgdXBkYXRlZCBmb3IgZGlmZmVyZW50IHNpbGljb24gc2t1Lg0KKyAgVGhlIHJl dHVybiBkYXRhIGlzIHNhbWUgRnNwbVVwZC4NCisNCisgIDIpIEluIG5vbi1GU1AgcGF0aCwgdGhl IGlucHV0IHBvbGljeSBjb3VsZCBiZSBOVUxMLg0KKyAgVGhlIHJldHVybiBkYXRhIGlzIHRoZSBp bml0aWFsaXplZCBwb2xpY3kuDQorDQorICBAcGFyYW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBv aW50ZXIgdG8gcG9saWN5Lg0KKw0KKyAgQHJldHVybiB0aGUgaW5pdGlhbGl6ZWQgcG9saWN5Lg0K KyoqLw0KK1ZPSUQgKg0KK0VGSUFQSQ0KK1NpbGljb25Qb2xpY3lJbml0UHJlTWVtICgNCisgIElO IE9VVCBWT0lEICpQb2xpY3kgT1BUSU9OQUwNCisgICkNCit7DQorICByZXR1cm4gUG9saWN5Ow0K K30NCisNCisvKg0KKyAgVGhlIHNpbGljb24gcHJlLW1lbSBwb2xpY3kgaXMgZmluYWxpemVkLg0K KyAgU2lsaWNvbiBjb2RlIGNhbiBkbyBpbml0aWFsaXphdGlvbiBiYXNlZCB1cG9uIHRoZSBwb2xp Y3kgZGF0YS4NCisNCisgIFRoZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBieSBTaWxp Y29uUG9saWN5SW5pdFByZU1lbSgpLg0KKw0KKyAgQHBhcmFtW2luXSBQb2xpY3kgICAgICAgUG9p bnRlciB0byBwb2xpY3kuDQorDQorICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTIFRoZSBwb2xpY3kg aXMgaGFuZGxlZCBjb25zdW1lZCBieSBzaWxpY29uIGNvZGUuDQorKi8NCitSRVRVUk5fU1RBVFVT DQorRUZJQVBJDQorU2lsaWNvblBvbGljeURvbmVQcmVNZW0gKA0KKyAgSU4gVk9JRCAqUG9saWN5 DQorICApDQorew0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIFBl cmZvcm1zIHNpbGljb24gcG9zdC1tZW0gcG9saWN5IGluaXRpYWxpemF0aW9uLg0KKw0KKyAgVGhl IG1lYW5pbmcgb2YgUG9saWN5IGlzIGRlZmluZWQgYnkgc2lsaWNvbiBjb2RlLg0KKyAgSXQgY291 bGQgYmUgdGhlIHJhdyBkYXRhLCBhIGhhbmRsZSwgYSBQUEksIGV0Yy4NCisNCisgIFRoZSByZXR1 cm5lZCBkYXRhIG11c3QgYmUgdXNlZCBhcyBpbnB1dCBkYXRhIGZvciBTaWxpY29uUG9saWN5RG9u ZVBvc3RNZW0oKSwNCisgIGFuZCBTaWxpY29uUG9saWN5VXBkYXRlTGliLlNpbGljb25Qb2xpY3lV cGRhdGVQb3N0TWVtKCkuDQorDQorICAxKSBJbiBGU1AgcGF0aCwgdGhlIGlucHV0IFBvbGljeSBz aG91bGQgYmUgRnNwc1VwZC4NCisgIFZhbHVlIG9mIEZzcHNVcGQgaGFzIGJlZW4gaW5pdGlhbGl6 ZWQgYnkgRlNQIGJpbmFyeSBkZWZhdWx0IHZhbHVlLg0KKyAgT25seSBhIHN1YnNldCBvZiBGc3Bz VXBkIG5lZWRzIHRvIGJlIHVwZGF0ZWQgZm9yIGRpZmZlcmVudCBzaWxpY29uIHNrdS4NCisgIFRo ZSByZXR1cm4gZGF0YSBpcyBzYW1lIEZzcHNVcGQuDQorDQorICAyKSBJbiBub24tRlNQIHBhdGgs IHRoZSBpbnB1dCBwb2xpY3kgY291bGQgYmUgTlVMTC4NCisgIFRoZSByZXR1cm4gZGF0YSBpcyB0 aGUgaW5pdGlhbGl6ZWQgcG9saWN5Lg0KKw0KKyAgQHBhcmFtW2luLCBvdXRdIFBvbGljeSAgICAg ICBQb2ludGVyIHRvIHBvbGljeS4NCisNCisgIEByZXR1cm4gdGhlIGluaXRpYWxpemVkIHBvbGlj eS4NCisqKi8NCitWT0lEICoNCitFRklBUEkNCitTaWxpY29uUG9saWN5SW5pdFBvc3RNZW0gKA0K KyAgSU4gT1VUIFZPSUQgKlBvbGljeSBPUFRJT05BTA0KKyAgKQ0KK3sNCisgIHJldHVybiBQb2xp Y3k7DQorfQ0KKw0KKy8qDQorICBUaGUgc2lsaWNvbiBwb3N0LW1lbSBwb2xpY3kgaXMgZmluYWxp emVkLg0KKyAgU2lsaWNvbiBjb2RlIGNhbiBkbyBpbml0aWFsaXphdGlvbiBiYXNlZCB1cG9uIHRo ZSBwb2xpY3kgZGF0YS4NCisNCisgIFRoZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBi eSBTaWxpY29uUG9saWN5SW5pdFBvc3RNZW0oKS4NCisNCisgIEBwYXJhbVtpbl0gUG9saWN5ICAg ICAgIFBvaW50ZXIgdG8gcG9saWN5Lg0KKw0KKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VTUyBUaGUg cG9saWN5IGlzIGhhbmRsZWQgY29uc3VtZWQgYnkgc2lsaWNvbiBjb2RlLg0KKyovDQorUkVUVVJO X1NUQVRVUw0KK0VGSUFQSQ0KK1NpbGljb25Qb2xpY3lEb25lUG9zdE1lbSAoDQorICBJTiBWT0lE ICpQb2xpY3kNCisgICkNCit7DQorICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KZGlmZiAt LWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9T aWxpY29uUG9saWN5VXBkYXRlTGliL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuYyBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBk YXRlTGliL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAuLjNiMjA3YTRlNzgNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBk YXRlTGliL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuYw0KQEAgLTAsMCArMSw3MCBAQA0KKy8qKiBA ZmlsZQ0KKyAgQ29weXJpZ2h0IChjKSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKyNpbmNsdWRlIDxM aWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVk ZSA8UHBpL1JlYWRPbmx5VmFyaWFibGUyLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpU2Vydmlj ZXNMaWIuaD4NCisNCisvKioNCisgIFBlcmZvcm1zIHNpbGljb24gcHJlLW1lbSBwb2xpY3kgdXBk YXRlLg0KKw0KKyAgVGhlIG1lYW5pbmcgb2YgUG9saWN5IGlzIGRlZmluZWQgYnkgc2lsaWNvbiBj b2RlLg0KKyAgSXQgY291bGQgYmUgdGhlIHJhdyBkYXRhLCBhIGhhbmRsZSwgYSBQUEksIGV0Yy4N CisNCisgIFRoZSBpbnB1dCBQb2xpY3kgbXVzdCBiZSByZXR1cm5lZCBieSBTaWxpY29uUG9saWN5 RG9uZVByZU1lbSgpLg0KKw0KKyAgMSkgSW4gRlNQIHBhdGgsIHRoZSBpbnB1dCBQb2xpY3kgc2hv dWxkIGJlIEZzcG1VcGQuDQorICBBIHBsYXRmb3JtIG1heSB1c2UgdGhpcyBBUEkgdG8gdXBkYXRl IHRoZSBGU1BNIFVQRCBwb2xpY3kgaW5pdGlhbGl6ZWQNCisgIGJ5IHRoZSBzaWxpY29uIG1vZHVs ZSBvciB0aGUgZGVmYXVsdCBVUEQgZGF0YS4NCisgIFRoZSBvdXRwdXQgb2YgRlNQTSBVUEQgZGF0 YSBmcm9tIHRoaXMgQVBJIGlzIHRoZSBmaW5hbCBVUEQgZGF0YS4NCisNCisgIDIpIEluIG5vbi1G U1AgcGF0aCwgdGhlIGJvYXJkIG1heSB1c2UgYWRkaXRpb25hbCB3YXkgdG8gZ2V0DQorICB0aGUg c2lsaWNvbiBwb2xpY3kgZGF0YSBmaWVsZCBiYXNlZCB1cG9uIHRoZSBpbnB1dCBQb2xpY3kuDQor DQorICBAcGFyYW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBvaW50ZXIgdG8gcG9saWN5Lg0KKw0K KyAgQHJldHVybiB0aGUgdXBkYXRlZCBwb2xpY3kuDQorKiovDQorVk9JRCAqDQorRUZJQVBJDQor U2lsaWNvblBvbGljeVVwZGF0ZVByZU1lbSAoDQorICBJTiBPVVQgVk9JRCAqUG9saWN5DQorICAp DQorew0KKyAgcmV0dXJuIFBvbGljeTsNCit9DQorDQorLyoqDQorICBQZXJmb3JtcyBzaWxpY29u IHBvc3QtbWVtIHBvbGljeSB1cGRhdGUuDQorDQorICBUaGUgbWVhbmluZyBvZiBQb2xpY3kgaXMg ZGVmaW5lZCBieSBzaWxpY29uIGNvZGUuDQorICBJdCBjb3VsZCBiZSB0aGUgcmF3IGRhdGEsIGEg aGFuZGxlLCBhIFBQSSwgZXRjLg0KKw0KKyAgVGhlIGlucHV0IFBvbGljeSBtdXN0IGJlIHJldHVy bmVkIGJ5IFNpbGljb25Qb2xpY3lEb25lUG9zdE1lbSgpLg0KKw0KKyAgMSkgSW4gRlNQIHBhdGgs IHRoZSBpbnB1dCBQb2xpY3kgc2hvdWxkIGJlIEZzcHNVcGQuDQorICBBIHBsYXRmb3JtIG1heSB1 c2UgdGhpcyBBUEkgdG8gdXBkYXRlIHRoZSBGU1BTIFVQRCBwb2xpY3kgaW5pdGlhbGl6ZWQNCisg IGJ5IHRoZSBzaWxpY29uIG1vZHVsZSBvciB0aGUgZGVmYXVsdCBVUEQgZGF0YS4NCisgIFRoZSBv dXRwdXQgb2YgRlNQUyBVUEQgZGF0YSBmcm9tIHRoaXMgQVBJIGlzIHRoZSBmaW5hbCBVUEQgZGF0 YS4NCisNCisgIDIpIEluIG5vbi1GU1AgcGF0aCwgdGhlIGJvYXJkIG1heSB1c2UgYWRkaXRpb25h bCB3YXkgdG8gZ2V0DQorICB0aGUgc2lsaWNvbiBwb2xpY3kgZGF0YSBmaWVsZCBiYXNlZCB1cG9u IHRoZSBpbnB1dCBQb2xpY3kuDQorDQorICBAcGFyYW1baW4sIG91dF0gUG9saWN5ICAgICAgIFBv aW50ZXIgdG8gcG9saWN5Lg0KKw0KKyAgQHJldHVybiB0aGUgdXBkYXRlZCBwb2xpY3kuDQorKiov DQorVk9JRCAqDQorRUZJQVBJDQorU2lsaWNvblBvbGljeVVwZGF0ZVBvc3RNZW0gKA0KKyAgSU4g T1VUIFZPSUQgKlBvbGljeQ0KKyAgKQ0KK3sNCisgIHJldHVybiBQb2xpY3k7DQorfQ0KZGlmZiAt LWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4u YyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3JlL1NlY01haW4uYw0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjVjYmI0NzY4N2INCi0tLSAv ZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWNDb3Jl L1NlY01haW4uYw0KQEAgLTAsMCArMSw5NTYgQEANCisvKiogQGZpbGUNCisgIE1haW4gU0VDIHBo YXNlIGNvZGUuICBUcmFuc2l0aW9ucyB0byBQRUkuDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDgg LSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICAo QykgQ29weXJpZ2h0IDIwMTYgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQg TFA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KKyoqLw0KKw0KKyNpbmNsdWRlIDxQaVBlaS5oPg0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Bl aW1FbnRyeVBvaW50Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPExpYnJh cnkvUGNkTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUNwdUxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnQWdlbnRMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Jb0xpYi5oPg0K KyNpbmNsdWRlIDxMaWJyYXJ5L1BlQ29mZkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlQ29m ZkdldEVudHJ5UG9pbnRMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QZUNvZmZFeHRyYUFjdGlv bkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0V4dHJhY3RHdWlkZWRTZWN0aW9uTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvTG9jYWxBcGljTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNp Q2Y4TGliLmg+DQorDQorI2luY2x1ZGUgPFBwaS9UZW1wb3JhcnlSYW1TdXBwb3J0Lmg+DQorI2lu Y2x1ZGUgPFJlZ2lzdGVyL1g1OEljaDEwLmg+DQorDQorI2RlZmluZSBTRUNfSURUX0VOVFJZX0NP VU5UICAzNA0KKw0KK3R5cGVkZWYgc3RydWN0IF9TRUNfSURUX1RBQkxFIHsNCisgIEVGSV9QRUlf U0VSVklDRVMgICAgICAgICAgKlBlaVNlcnZpY2U7DQorICBJQTMyX0lEVF9HQVRFX0RFU0NSSVBU T1IgIElkdFRhYmxlW1NFQ19JRFRfRU5UUllfQ09VTlRdOw0KK30gU0VDX0lEVF9UQUJMRTsNCisN CitWT0lEDQorRUZJQVBJDQorU2VjU3RhcnR1cFBoYXNlMiAoDQorICBJTiBWT0lEICAgICAgICAg ICAgICAgICAgICAgKkNvbnRleHQNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Rl bXBvcmFyeVJhbU1pZ3JhdGlvbiAoDQorICBJTiBDT05TVCBFRklfUEVJX1NFUlZJQ0VTICAgKipQ ZWlTZXJ2aWNlcywNCisgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICBUZW1wb3JhcnlNZW1v cnlCYXNlLA0KKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgIFBlcm1hbmVudE1lbW9yeUJh c2UsDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgQ29weVNpemUNCisgICk7DQorDQor RUZJX1BFSV9URU1QT1JBUllfUkFNX1NVUFBPUlRfUFBJIG1UZW1wb3JhcnlSYW1TdXBwb3J0UHBp ID0gew0KKyAgVGVtcG9yYXJ5UmFtTWlncmF0aW9uDQorfTsNCisNCitFRklfUEVJX1BQSV9ERVND UklQVE9SIG1Qcml2YXRlRGlzcGF0Y2hUYWJsZVtdID0gew0KKyAgew0KKyAgICAoRUZJX1BFSV9Q UElfREVTQ1JJUFRPUl9QUEkgfCBFRklfUEVJX1BQSV9ERVNDUklQVE9SX1RFUk1JTkFURV9MSVNU KSwNCisgICAgJmdFZmlUZW1wb3JhcnlSYW1TdXBwb3J0UHBpR3VpZCwNCisgICAgJm1UZW1wb3Jh cnlSYW1TdXBwb3J0UHBpDQorICB9LA0KK307DQorDQorLy8NCisvLyBUZW1wbGF0ZSBvZiBhbiBJ RFQgZW50cnkgcG9pbnRpbmcgdG8gMTA6RkZGRkZGRTRoLg0KKy8vDQorSUEzMl9JRFRfR0FURV9E RVNDUklQVE9SICBtSWR0RW50cnlUZW1wbGF0ZSA9IHsNCisgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIEJpdHMNCisgICAgMHhmZmU0LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vIE9mZnNldExvdw0KKyAgICAweDEwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gU2VsZWN0b3INCisgICAgMHgwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIFJlc2VydmVkXzANCisgICAgSUEzMl9JRFRfR0FURV9UWVBFX0lOVEVSUlVQ VF8zMiwgICAgIC8vIEdhdGVUeXBlDQorICAgIDB4ZmZmZiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBPZmZzZXRIaWdoDQorICB9DQorfTsNCisNCisvKioNCisgIExvY2F0ZXMgdGhl IG1haW4gYm9vdCBmaXJtd2FyZSB2b2x1bWUuDQorDQorICBAcGFyYW1baW4sb3V0XSAgQm9vdEZ2 ICBPbiBpbnB1dCwgdGhlIGJhc2Ugb2YgdGhlIEJvb3RGdg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gb3V0cHV0LCB0aGUgZGVjb21wcmVzc2VkIG1haW4gZmlybXdhcmUgdm9sdW1lDQor DQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFRoZSBtYWluIGZpcm13YXJlIHZvbHVtZSB3YXMg bG9jYXRlZCBhbmQgZGVjb21wcmVzc2VkDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIFRoZSBt YWluIGZpcm13YXJlIHZvbHVtZSB3YXMgbm90IGZvdW5kDQorDQorKiovDQorRUZJX1NUQVRVUw0K K0ZpbmRNYWluRnYgKA0KKyAgSU4gT1VUICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICoq Qm9vdEZ2DQorICApDQorew0KKyAgRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIgICpGdjsNCisg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZTsNCisNCisgIEFTU0VSVCAoKChV SU5UTikgKkJvb3RGdiAmIEVGSV9QQUdFX01BU0spID09IDApOw0KKw0KKyAgRnYgPSAqQm9vdEZ2 Ow0KKyAgRGlzdGFuY2UgPSAoVUlOVE4pICgqQm9vdEZ2KS0+RnZMZW5ndGg7DQorICBkbyB7DQor ICAgIEZ2ID0gKEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSKikgKChVSU5UOCopIEZ2IC0gRUZJ X1BBR0VfU0laRSk7DQorICAgIERpc3RhbmNlICs9IEVGSV9QQUdFX1NJWkU7DQorICAgIGlmIChE aXN0YW5jZSA+IFNJWkVfMzJNQikgew0KKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAg ICB9DQorDQorICAgIGlmIChGdi0+U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQor ICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgaWYgKChVSU5UTikgRnYtPkZ2TGVuZ3Ro ID4gRGlzdGFuY2UpIHsNCisgICAgICBjb250aW51ZTsNCisgICAgfQ0KKw0KKyAgICAqQm9vdEZ2 ID0gRnY7DQorICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisNCisgIH0gd2hpbGUgKFRSVUUpOw0K K30NCisNCisvKioNCisgIExvY2F0ZXMgYSBzZWN0aW9uIHdpdGhpbiBhIHNlcmllcyBvZiBzZWN0 aW9ucw0KKyAgd2l0aCB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gdHlwZS4NCisNCisgIFRoZSBJbnN0 YW5jZSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoaWNoIGluc3RhbmNlIG9mIHRoZSBzZWN0aW9uDQor ICB0eXBlIHRvIHJldHVybi4gKDAgaXMgZmlyc3QgaW5zdGFuY2UsIDEgaXMgc2Vjb25kLi4uKQ0K Kw0KKyAgQHBhcmFtW2luXSAgIFNlY3Rpb25zICAgICAgICBUaGUgc2VjdGlvbnMgdG8gc2VhcmNo DQorICBAcGFyYW1baW5dICAgU2l6ZU9mU2VjdGlvbnMgIFRvdGFsIHNpemUgb2YgYWxsIHNlY3Rp b25zDQorICBAcGFyYW1baW5dICAgU2VjdGlvblR5cGUgICAgIFRoZSBzZWN0aW9uIHR5cGUgdG8g bG9jYXRlDQorICBAcGFyYW1baW5dICAgSW5zdGFuY2UgICAgICAgIFRoZSBzZWN0aW9uIGluc3Rh bmNlIG51bWJlcg0KKyAgQHBhcmFtW291dF0gIEZvdW5kU2VjdGlvbiAgICBUaGUgRkZTIHNlY3Rp b24gaWYgZm91bmQNCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmaWxl IGFuZCBzZWN0aW9uIHdhcyBmb3VuZA0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAg VGhlIGZpbGUgYW5kIHNlY3Rpb24gd2FzIG5vdCBmb3VuZA0KKyAgQHJldHZhbCBFRklfVk9MVU1F X0NPUlJVUFRFRCAgVGhlIGZpcm13YXJlIHZvbHVtZSB3YXMgY29ycnVwdGVkDQorDQorKiovDQor RUZJX1NUQVRVUw0KK0ZpbmRGZnNTZWN0aW9uSW5zdGFuY2UgKA0KKyAgSU4gIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpTZWN0aW9ucywNCisgIElOICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTaXplT2ZTZWN0aW9ucywNCisgIElOICBFRklfU0VDVElPTl9UWVBF ICAgICAgICAgICAgICAgICBTZWN0aW9uVHlwZSwNCisgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbnN0YW5jZSwNCisgIE9VVCBFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVS ICAgICAgICAqKkZvdW5kU2VjdGlvbg0KKyAgKQ0KK3sNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgICBDdXJyZW50QWRkcmVzczsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBT aXplOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIEVuZE9mU2VjdGlvbnM7DQorICBF RklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAgKlNlY3Rpb247DQorICBFRklfUEhZU0lDQUxfQURE UkVTUyAgICAgICAgRW5kT2ZTZWN0aW9uOw0KKw0KKyAgLy8NCisgIC8vIExvb3AgdGhyb3VnaCB0 aGUgRkZTIGZpbGUgc2VjdGlvbnMgd2l0aGluIHRoZSBQRUkgQ29yZSBGRlMgZmlsZQ0KKyAgLy8N CisgIEVuZE9mU2VjdGlvbiA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pIFNlY3Rpb25z Ow0KKyAgRW5kT2ZTZWN0aW9ucyA9IEVuZE9mU2VjdGlvbiArIFNpemVPZlNlY3Rpb25zOw0KKyAg Zm9yICg7Oykgew0KKyAgICBpZiAoRW5kT2ZTZWN0aW9uID09IEVuZE9mU2VjdGlvbnMpIHsNCisg ICAgICBicmVhazsNCisgICAgfQ0KKyAgICBDdXJyZW50QWRkcmVzcyA9IChFbmRPZlNlY3Rpb24g KyAzKSAmIH4oM1VMTCk7DQorICAgIGlmIChDdXJyZW50QWRkcmVzcyA+PSBFbmRPZlNlY3Rpb25z KSB7DQorICAgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgICB9DQorDQorICAg IFNlY3Rpb24gPSAoRUZJX0NPTU1PTl9TRUNUSU9OX0hFQURFUiopKFVJTlROKSBDdXJyZW50QWRk cmVzczsNCisgICAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiU2VjdGlvbi0+VHlwZTogMHgleFxu IiwgU2VjdGlvbi0+VHlwZSkpOw0KKw0KKyAgICBTaXplID0gU0VDVElPTl9TSVpFIChTZWN0aW9u KTsNCisgICAgaWYgKFNpemUgPCBzaXplb2YgKCpTZWN0aW9uKSkgew0KKyAgICAgIHJldHVybiBF RklfVk9MVU1FX0NPUlJVUFRFRDsNCisgICAgfQ0KKw0KKyAgICBFbmRPZlNlY3Rpb24gPSBDdXJy ZW50QWRkcmVzcyArIFNpemU7DQorICAgIGlmIChFbmRPZlNlY3Rpb24gPiBFbmRPZlNlY3Rpb25z KSB7DQorICAgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgICB9DQorDQorICAg IC8vDQorICAgIC8vIExvb2sgZm9yIHRoZSByZXF1ZXN0ZWQgc2VjdGlvbiB0eXBlDQorICAgIC8v DQorICAgIGlmIChTZWN0aW9uLT5UeXBlID09IFNlY3Rpb25UeXBlKSB7DQorICAgICAgaWYgKElu c3RhbmNlID09IDApIHsNCisgICAgICAgICpGb3VuZFNlY3Rpb24gPSBTZWN0aW9uOw0KKyAgICAg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBJbnN0YW5j ZS0tOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJTZWN0 aW9uLT5UeXBlICgweCV4KSAhPSBTZWN0aW9uVHlwZSAoMHgleClcbiIsIFNlY3Rpb24tPlR5cGUs IFNlY3Rpb25UeXBlKSk7DQorICB9DQorDQorICByZXR1cm4gRUZJX05PVF9GT1VORDsNCit9DQor DQorLyoqDQorICBMb2NhdGVzIGEgc2VjdGlvbiB3aXRoaW4gYSBzZXJpZXMgb2Ygc2VjdGlvbnMN CisgIHdpdGggdGhlIHNwZWNpZmllZCBzZWN0aW9uIHR5cGUuDQorDQorICBAcGFyYW1baW5dICAg U2VjdGlvbnMgICAgICAgIFRoZSBzZWN0aW9ucyB0byBzZWFyY2gNCisgIEBwYXJhbVtpbl0gICBT aXplT2ZTZWN0aW9ucyAgVG90YWwgc2l6ZSBvZiBhbGwgc2VjdGlvbnMNCisgIEBwYXJhbVtpbl0g ICBTZWN0aW9uVHlwZSAgICAgVGhlIHNlY3Rpb24gdHlwZSB0byBsb2NhdGUNCisgIEBwYXJhbVtv dXRdICBGb3VuZFNlY3Rpb24gICAgVGhlIEZGUyBzZWN0aW9uIGlmIGZvdW5kDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQN CisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdh cyBub3QgZm91bmQNCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2Fy ZSB2b2x1bWUgd2FzIGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitGaW5kRmZzU2Vj dGlvbkluU2VjdGlvbnMgKA0KKyAgSU4gIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpTZWN0aW9ucywNCisgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXpl T2ZTZWN0aW9ucywNCisgIElOICBFRklfU0VDVElPTl9UWVBFICAgICAgICAgICAgICAgICBTZWN0 aW9uVHlwZSwNCisgIE9VVCBFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAgICAgICAqKkZvdW5k U2VjdGlvbg0KKyAgKQ0KK3sNCisgIHJldHVybiBGaW5kRmZzU2VjdGlvbkluc3RhbmNlICgNCisg ICAgICAgICAgIFNlY3Rpb25zLA0KKyAgICAgICAgICAgU2l6ZU9mU2VjdGlvbnMsDQorICAgICAg ICAgICBTZWN0aW9uVHlwZSwNCisgICAgICAgICAgIDAsDQorICAgICAgICAgICBGb3VuZFNlY3Rp b24NCisgICAgICAgICAgICk7DQorfQ0KKw0KKy8qKg0KKyAgTG9jYXRlcyBhIEZGUyBmaWxlIHdp dGggdGhlIHNwZWNpZmllZCBmaWxlIHR5cGUgYW5kIGEgc2VjdGlvbg0KKyAgd2l0aGluIHRoYXQg ZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiB0eXBlLg0KKw0KKyAgQHBhcmFtW2luXSAg IEZ2ICAgICAgICAgICAgVGhlIGZpcm13YXJlIHZvbHVtZSB0byBzZWFyY2gNCisgIEBwYXJhbVtp bl0gICBGaWxlVHlwZSAgICAgIFRoZSBmaWxlIHR5cGUgdG8gbG9jYXRlDQorICBAcGFyYW1baW5d ICAgU2VjdGlvblR5cGUgICBUaGUgc2VjdGlvbiB0eXBlIHRvIGxvY2F0ZQ0KKyAgQHBhcmFtW291 dF0gIEZvdW5kU2VjdGlvbiAgVGhlIEZGUyBzZWN0aW9uIGlmIGZvdW5kDQorDQorICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQNCisg IEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdhcyBu b3QgZm91bmQNCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2FyZSB2 b2x1bWUgd2FzIGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitGaW5kRmZzRmlsZUFu ZFNlY3Rpb24gKA0KKyAgSU4gIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICAgICAgICpGdiwN CisgIElOICBFRklfRlZfRklMRVRZUEUgICAgICAgICAgICAgICAgICBGaWxlVHlwZSwNCisgIElO ICBFRklfU0VDVElPTl9UWVBFICAgICAgICAgICAgICAgICBTZWN0aW9uVHlwZSwNCisgIE9VVCBF RklfQ09NTU9OX1NFQ1RJT05fSEVBREVSICAgICAgICAqKkZvdW5kU2VjdGlvbg0KKyAgKQ0KK3sN CisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUEhZU0lDQUxf QUREUkVTUyAgICAgICAgQ3VycmVudEFkZHJlc3M7DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAg ICAgICAgRW5kT2ZGaXJtd2FyZVZvbHVtZTsNCisgIEVGSV9GRlNfRklMRV9IRUFERVIgICAgICAg ICAqRmlsZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBTaXplOw0KKyAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgICAgIEVuZE9mRmlsZTsNCisNCisgIGlmIChGdi0+U2lnbmF0dXJl ICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJGViBh dCAlcCBkb2VzIG5vdCBoYXZlIEZWIGhlYWRlciBzaWduYXR1cmVcbiIsIEZ2KSk7DQorICAgIHJl dHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCisgIH0NCisNCisgIEN1cnJlbnRBZGRyZXNzID0g KEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikgRnY7DQorICBFbmRPZkZpcm13YXJlVm9sdW1l ID0gQ3VycmVudEFkZHJlc3MgKyBGdi0+RnZMZW5ndGg7DQorDQorICAvLw0KKyAgLy8gTG9vcCB0 aHJvdWdoIHRoZSBGRlMgZmlsZXMgaW4gdGhlIEJvb3QgRmlybXdhcmUgVm9sdW1lDQorICAvLw0K KyAgZm9yIChFbmRPZkZpbGUgPSBDdXJyZW50QWRkcmVzcyArIEZ2LT5IZWFkZXJMZW5ndGg7IDsg KSB7DQorDQorICAgIEN1cnJlbnRBZGRyZXNzID0gKEVuZE9mRmlsZSArIDcpICYgfig3VUxMKTsN CisgICAgaWYgKEN1cnJlbnRBZGRyZXNzID4gRW5kT2ZGaXJtd2FyZVZvbHVtZSkgew0KKyAgICAg IHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCisgICAgfQ0KKw0KKyAgICBGaWxlID0gKEVG SV9GRlNfRklMRV9IRUFERVIqKShVSU5UTikgQ3VycmVudEFkZHJlc3M7DQorICAgIFNpemUgPSAq KFVJTlQzMiopIEZpbGUtPlNpemUgJiAweGZmZmZmZjsNCisgICAgaWYgKFNpemUgPCAoc2l6ZW9m ICgqRmlsZSkgKyBzaXplb2YgKEVGSV9DT01NT05fU0VDVElPTl9IRUFERVIpKSkgew0KKyAgICAg IHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCisgICAgfQ0KKyAgICBERUJVRyAoKEVGSV9E X1ZFUkJPU0UsICJGaWxlLT5UeXBlOiAweCV4XG4iLCBGaWxlLT5UeXBlKSk7DQorDQorICAgIEVu ZE9mRmlsZSA9IEN1cnJlbnRBZGRyZXNzICsgU2l6ZTsNCisgICAgaWYgKEVuZE9mRmlsZSA+IEVu ZE9mRmlybXdhcmVWb2x1bWUpIHsNCisgICAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7 DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gTG9vayBmb3IgdGhlIHJlcXVlc3QgZmlsZSB0 eXBlDQorICAgIC8vDQorICAgIGlmIChGaWxlLT5UeXBlICE9IEZpbGVUeXBlKSB7DQorICAgICAg REVCVUcgKChFRklfRF9WRVJCT1NFLCAiRmlsZS0+VHlwZSAoMHgleCkgIT0gRmlsZVR5cGUgKDB4 JXgpXG4iLCBGaWxlLT5UeXBlLCBGaWxlVHlwZSkpOw0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9 DQorDQorICAgIFN0YXR1cyA9IEZpbmRGZnNTZWN0aW9uSW5TZWN0aW9ucyAoDQorICAgICAgICAg ICAgICAgKFZPSUQqKSAoRmlsZSArIDEpLA0KKyAgICAgICAgICAgICAgIChVSU5UTikgRW5kT2ZG aWxlIC0gKFVJTlROKSAoRmlsZSArIDEpLA0KKyAgICAgICAgICAgICAgIFNlY3Rpb25UeXBlLA0K KyAgICAgICAgICAgICAgIEZvdW5kU2VjdGlvbg0KKyAgICAgICAgICAgICAgICk7DQorICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpIHx8IChTdGF0dXMgPT0gRUZJX1ZPTFVNRV9DT1JSVVBURUQp KSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisg IExvY2F0ZXMgdGhlIGNvbXByZXNzZWQgbWFpbiBmaXJtd2FyZSB2b2x1bWUgYW5kIGRlY29tcHJl c3NlcyBpdC4NCisNCisgIEBwYXJhbVtpbixvdXRdICBGdiAgICAgICAgICAgIE9uIGlucHV0LCB0 aGUgZmlybXdhcmUgdm9sdW1lIHRvIHNlYXJjaA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gb3V0cHV0LCB0aGUgZGVjb21wcmVzc2VkIEJPT1QvUEVJIEZWDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgZm91bmQN CisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBmaWxlIGFuZCBzZWN0aW9uIHdh cyBub3QgZm91bmQNCisgIEByZXR2YWwgRUZJX1ZPTFVNRV9DT1JSVVBURUQgIFRoZSBmaXJtd2Fy ZSB2b2x1bWUgd2FzIGNvcnJ1cHRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitEZWNvbXByZXNz TWVtRnZzICgNCisgIElOIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqKkZ2 DQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN CisgIEVGSV9HVUlEX0RFRklORURfU0VDVElPTiAgICAgICAgICAqU2VjdGlvbjsNCisgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRCdWZmZXJTaXplOw0KKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hCdWZmZXJTaXplOw0KKyAgVUlOVDE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3Rpb25BdHRyaWJ1dGU7DQorICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25TdGF0dXM7DQorICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk91dHB1dEJ1ZmZlcjsNCisgIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqU2NyYXRjaEJ1ZmZlcjsNCisgIEVGSV9DT01NT05f U0VDVElPTl9IRUFERVIgICAgICAgICAqRnZTZWN0aW9uOw0KKyAgRUZJX0ZJUk1XQVJFX1ZPTFVN RV9IRUFERVIgICAgICAgICpQZWlNZW1GdjsNCisgIEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVS ICAgICAgICAqRHhlTWVtRnY7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg RnZIZWFkZXJTaXplOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ2U2Vj dGlvblNpemU7DQorDQorICBGdlNlY3Rpb24gPSAoRUZJX0NPTU1PTl9TRUNUSU9OX0hFQURFUiop IE5VTEw7DQorDQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJGaW5kIGFuZCBkZWNvbXByZXNz IEZWIGltYWdlLlxuIikpOw0KKyAgU3RhdHVzID0gRmluZEZmc0ZpbGVBbmRTZWN0aW9uICgNCisg ICAgICAgICAgICAgKkZ2LA0KKyAgICAgICAgICAgICBFRklfRlZfRklMRVRZUEVfRklSTVdBUkVf Vk9MVU1FX0lNQUdFLA0KKyAgICAgICAgICAgICBFRklfU0VDVElPTl9HVUlEX0RFRklORUQsDQor ICAgICAgICAgICAgIChFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSKiopICZTZWN0aW9uDQorICAg ICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgo RUZJX0RfRVJST1IsICJVbmFibGUgdG8gZmluZCBHVUlEIGRlZmluZWQgc2VjdGlvblxuIikpOw0K KyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gRXh0cmFjdEd1aWRlZFNl Y3Rpb25HZXRJbmZvICgNCisgICAgICAgICAgICAgU2VjdGlvbiwNCisgICAgICAgICAgICAgJk91 dHB1dEJ1ZmZlclNpemUsDQorICAgICAgICAgICAgICZTY3JhdGNoQnVmZmVyU2l6ZSwNCisgICAg ICAgICAgICAgJlNlY3Rpb25BdHRyaWJ1dGUNCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlVuYWJsZSB0byBH ZXRJbmZvIGZvciBHVUlEZWQgc2VjdGlvblxuIikpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAg fQ0KKw0KKyAgT3V0cHV0QnVmZmVyID0gKFZPSUQqKSAoKFVJTlQ4KikoVUlOVE4pIFBjZEdldDMy IChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpICsgU0laRV8xTUIpOw0KKyAgU2NyYXRjaEJ1ZmZlciA9 IEFMSUdOX1BPSU5URVIgKChVSU5UOCopIE91dHB1dEJ1ZmZlciArIE91dHB1dEJ1ZmZlclNpemUs IFNJWkVfMU1CKTsNCisNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIlBjZFNpbWljc0R4ZU1l bUZ2QmFzZTogMHgleFxuIiwgUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSkpKTsNCisg IERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIk91dHB1dEJ1ZmZlcjogMHgleFxuIiwgT3V0cHV0QnVm ZmVyKSk7DQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJPdXRwdXRCdWZmZXJTaXplOiAweCV4 XG4iLCBPdXRwdXRCdWZmZXJTaXplKSk7DQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICJTY3Jh dGNoQnVmZmVyOiAweCV4XG4iLCBTY3JhdGNoQnVmZmVyKSk7DQorICBERUJVRyAoKEVGSV9EX1ZF UkJPU0UsICJTY3JhdGNoQnVmZmVyU2l6ZTogMHgleFxuIiwgU2NyYXRjaEJ1ZmZlclNpemUpKTsN CisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIlBjZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNo RW5kOiAweCV4XG4iLCBQY2RHZXQzMiAoUGNkU2ltaWNzRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQp KSk7DQorDQorICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIlYTogT3V0cHV0QnVmZmVyQCVwKzB4 JXggU2NyYXRjaEJ1ZmZlckAlcCsweCV4ICINCisgICAgIlBjZFNpbWljc0RlY29tcHJlc3Npb25T Y3JhdGNoRW5kPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywgT3V0cHV0QnVmZmVyLA0KKyAgICBPdXRw dXRCdWZmZXJTaXplLCBTY3JhdGNoQnVmZmVyLCBTY3JhdGNoQnVmZmVyU2l6ZSwNCisgICAgUGNk R2V0MzIgKFBjZFNpbWljc0RlY29tcHJlc3Npb25TY3JhdGNoRW5kKSkpOw0KKyAgQVNTRVJUICgo VUlOVE4pU2NyYXRjaEJ1ZmZlciArIFNjcmF0Y2hCdWZmZXJTaXplID09DQorICAgIFBjZEdldDMy IChQY2RTaW1pY3NEZWNvbXByZXNzaW9uU2NyYXRjaEVuZCkpOw0KKw0KKyAgU3RhdHVzID0gRXh0 cmFjdEd1aWRlZFNlY3Rpb25EZWNvZGUgKA0KKyAgICAgICAgICAgICBTZWN0aW9uLA0KKyAgICAg ICAgICAgICAmT3V0cHV0QnVmZmVyLA0KKyAgICAgICAgICAgICBTY3JhdGNoQnVmZmVyLA0KKyAg ICAgICAgICAgICAmQXV0aGVudGljYXRpb25TdGF0dXMNCisgICAgICAgICAgICAgKTsNCisgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkVycm9y IGR1cmluZyBHVUlEIHNlY3Rpb24gZGVjb2RlXG4iKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQor ICB9DQorDQorICBTdGF0dXMgPSBGaW5kRmZzU2VjdGlvbkluc3RhbmNlICgNCisgICAgICAgICAg ICAgT3V0cHV0QnVmZmVyLA0KKyAgICAgICAgICAgICBPdXRwdXRCdWZmZXJTaXplLA0KKyAgICAg ICAgICAgICBFRklfU0VDVElPTl9GSVJNV0FSRV9WT0xVTUVfSU1BR0UsDQorICAgICAgICAgICAg IDAsDQorICAgICAgICAgICAgICZGdlNlY3Rpb24NCisgICAgICAgICAgICAgKTsNCisgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlVuYWJsZSB0 byBmaW5kIFBFSSBGViBzZWN0aW9uXG4iKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQor DQorICBBU1NFUlQgKFNFQ1RJT05fU0laRSAoRnZTZWN0aW9uKSA9PQ0KKyAgICAgICAgICAoUGNk R2V0MzIgKFBjZFNpbWljc1BlaU1lbUZ2U2l6ZSkgKyBzaXplb2YgKCpGdlNlY3Rpb24pKSk7DQor ICBBU1NFUlQgKEZ2U2VjdGlvbi0+VHlwZSA9PSBFRklfU0VDVElPTl9GSVJNV0FSRV9WT0xVTUVf SU1BR0UpOw0KKw0KKyAgUGVpTWVtRnYgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFERVIqKShV SU5UTikgUGNkR2V0MzIgKFBjZFNpbWljc1BlaU1lbUZ2QmFzZSk7DQorICBDb3B5TWVtIChQZWlN ZW1GdiwgKFZPSUQqKSAoRnZTZWN0aW9uICsgMSksIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1G dlNpemUpKTsNCisNCisgIGlmIChQZWlNZW1Gdi0+U2lnbmF0dXJlICE9IEVGSV9GVkhfU0lHTkFU VVJFKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJFeHRyYWN0ZWQgRlYgYXQgJXAgZG9l cyBub3QgaGF2ZSBGViBoZWFkZXIgc2lnbmF0dXJlXG4iLCBQZWlNZW1GdikpOw0KKyAgICBDcHVE ZWFkTG9vcCAoKTsNCisgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0KKyAgfQ0KKw0K KyAgU3RhdHVzID0gRmluZEZmc1NlY3Rpb25JbnN0YW5jZSAoDQorICAgICAgICAgICAgIE91dHB1 dEJ1ZmZlciwNCisgICAgICAgICAgICAgT3V0cHV0QnVmZmVyU2l6ZSwNCisgICAgICAgICAgICAg RUZJX1NFQ1RJT05fRklSTVdBUkVfVk9MVU1FX0lNQUdFLA0KKyAgICAgICAgICAgICAxLA0KKyAg ICAgICAgICAgICAmRnZTZWN0aW9uDQorICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJVbmFibGUgdG8gZmluZCBE WEUgRlYgc2VjdGlvblxuIikpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgQVNT RVJUIChGdlNlY3Rpb24tPlR5cGUgPT0gRUZJX1NFQ1RJT05fRklSTVdBUkVfVk9MVU1FX0lNQUdF KTsNCisNCisgIGlmIChJU19TRUNUSU9OMiAoRnZTZWN0aW9uKSkgew0KKyAgICBGdlNlY3Rpb25T aXplID0gU0VDVElPTjJfU0laRSAoRnZTZWN0aW9uKTsNCisgICAgRnZIZWFkZXJTaXplID0gc2l6 ZW9mIChFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSMik7DQorICB9IGVsc2Ugew0KKyAgICBGdlNl Y3Rpb25TaXplID0gU0VDVElPTl9TSVpFIChGdlNlY3Rpb24pOw0KKyAgICBGdkhlYWRlclNpemUg PSBzaXplb2YgKEVGSV9DT01NT05fU0VDVElPTl9IRUFERVIpOw0KKyAgfQ0KKw0KKyAgQVNTRVJU IChGdlNlY3Rpb25TaXplID09IChQY2RHZXQzMiAoUGNkU2ltaWNzRHhlTWVtRnZTaXplKSArIEZ2 SGVhZGVyU2l6ZSkpOw0KKw0KKyAgRHhlTWVtRnYgPSAoRUZJX0ZJUk1XQVJFX1ZPTFVNRV9IRUFE RVIqKShVSU5UTikgUGNkR2V0MzIgKFBjZFNpbWljc0R4ZU1lbUZ2QmFzZSk7DQorICBDb3B5TWVt IChEeGVNZW1GdiwgKFZPSUQqKSAoKFVJTlROKUZ2U2VjdGlvbiArIEZ2SGVhZGVyU2l6ZSksIFBj ZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdlNpemUpKTsNCisNCisgIGlmIChEeGVNZW1Gdi0+U2ln bmF0dXJlICE9IEVGSV9GVkhfU0lHTkFUVVJFKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1Is ICJFeHRyYWN0ZWQgRlYgYXQgJXAgZG9lcyBub3QgaGF2ZSBGViBoZWFkZXIgc2lnbmF0dXJlXG4i LCBEeGVNZW1GdikpOw0KKyAgICBDcHVEZWFkTG9vcCAoKTsNCisgICAgcmV0dXJuIEVGSV9WT0xV TUVfQ09SUlVQVEVEOw0KKyAgfQ0KKw0KKyAgKkZ2ID0gUGVpTWVtRnY7DQorICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyAgTG9jYXRlcyB0aGUgUEVJIENvcmUgZW50cnkgcG9p bnQgYWRkcmVzcw0KKw0KKyAgQHBhcmFtW2luXSAgRnYgICAgICAgICAgICAgICAgIFRoZSBmaXJt d2FyZSB2b2x1bWUgdG8gc2VhcmNoDQorICBAcGFyYW1bb3V0XSBQZWlDb3JlRW50cnlQb2ludCAg VGhlIGVudHJ5IHBvaW50IG9mIHRoZSBQRUkgQ29yZSBpbWFnZQ0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIGZpbGUgYW5kIHNlY3Rpb24gd2FzIGZvdW5kDQorICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgZmlsZSBhbmQgc2VjdGlvbiB3YXMgbm90IGZv dW5kDQorICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVEICBUaGUgZmlybXdhcmUgdm9sdW1l IHdhcyBjb3JydXB0ZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQorRmluZFBlaUNvcmVJbWFnZUJh c2VJbkZ2ICgNCisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqRnYsDQor ICBPVVQgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgICAgICpQZWlDb3JlSW1hZ2VCYXNl DQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVG SV9DT01NT05fU0VDVElPTl9IRUFERVIgICAqU2VjdGlvbjsNCisNCisgIERFQlVHICgoRUZJX0Rf VkVSQk9TRSwgIkZpbmQgUEVJIENvcmUgaW1hZ2UuXG4iKSk7DQorICBTdGF0dXMgPSBGaW5kRmZz RmlsZUFuZFNlY3Rpb24gKA0KKyAgICAgICAgICAgICBGdiwNCisgICAgICAgICAgICAgRUZJX0ZW X0ZJTEVUWVBFX1BFSV9DT1JFLA0KKyAgICAgICAgICAgICBFRklfU0VDVElPTl9QRTMyLA0KKyAg ICAgICAgICAgICAmU2VjdGlvbg0KKyAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICBTdGF0dXMgPSBGaW5kRmZzRmlsZUFuZFNlY3Rpb24gKA0KKyAgICAg ICAgICAgICAgIEZ2LA0KKyAgICAgICAgICAgICAgIEVGSV9GVl9GSUxFVFlQRV9QRUlfQ09SRSwN CisgICAgICAgICAgICAgICBFRklfU0VDVElPTl9URSwNCisgICAgICAgICAgICAgICAmU2VjdGlv bg0KKyAgICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgUEVJIENvcmUgaW1hZ2Vc biIpKTsNCisgICAgICByZXR1cm4gU3RhdHVzOw0KKyAgICB9DQorICB9DQorDQorICAqUGVpQ29y ZUltYWdlQmFzZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pKFNlY3Rpb24gKyAxKTsN CisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIlBFSSBjb3JlIGltYWdlIGJhc2UgMHglMDE2TFgu XG4iLCAqUGVpQ29yZUltYWdlQmFzZSkpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisN CisNCisvKioNCisgIFJlYWRzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBSZWFkcyB0aGUg OC1iaXRzIG9mIENNT1MgZGF0YSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4Lg0K KyAgVGhlIDgtYml0IHJlYWQgdmFsdWUgaXMgcmV0dXJuZWQuDQorDQorICBAcGFyYW0gIEluZGV4 ICBUaGUgQ01PUyBsb2NhdGlvbiB0byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgcmVh ZC4NCisNCisqKi8NCitTVEFUSUMNCitVSU5UOA0KK0Ntb3NSZWFkOCAoDQorICBJTiBVSU5UTiAg ICAgICAgSW5kZXgNCisgICkNCit7DQorICBJb1dyaXRlOCAoMHg3MCwgKFVJTlQ4KSBJbmRleCk7 DQorICByZXR1cm4gSW9SZWFkOCAoMHg3MSk7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK0JPT0xFQU4N CitJc1MzUmVzdW1lICgNCisgIFZPSUQNCisgICkNCit7DQorICBERUJVRygoRUZJX0RfVkVSQk9T RSwgIm1vZGVWYWx1ZSA9ICV4XG4iLCBJb0JpdEZpZWxkUmVhZDE2KElDSDEwX1BNQkFTRV9JTyAr IDQsIDEwLCAxMikpKTsNCisgIHJldHVybiAoSW9CaXRGaWVsZFJlYWQxNihJQ0gxMF9QTUJBU0Vf SU8gKyA0LCAxMCwgMTIpID09IDB4NSk7DQorfQ0KKw0KKw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMN CitHZXRTM1Jlc3VtZVBlaUZ2ICgNCisgIElOIE9VVCBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURF UiAgICAgICAqKlBlaUZ2DQorICApDQorew0KKyAgKlBlaUZ2ID0gKEVGSV9GSVJNV0FSRV9WT0xV TUVfSEVBREVSKikoVUlOVE4pIFBjZEdldDMyIChQY2RTaW1pY3NQZWlNZW1GdkJhc2UpOw0KKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioNCisgIExvY2F0ZXMgdGhlIFBFSSBD b3JlIGVudHJ5IHBvaW50IGFkZHJlc3MNCisNCisgIEBwYXJhbVtpbixvdXRdICBGdiAgICAgICAg ICAgICAgICAgVGhlIGZpcm13YXJlIHZvbHVtZSB0byBzZWFyY2gNCisgIEBwYXJhbVtvdXRdICAg ICBQZWlDb3JlRW50cnlQb2ludCAgVGhlIGVudHJ5IHBvaW50IG9mIHRoZSBQRUkgQ29yZSBpbWFn ZQ0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZpbGUgYW5kIHNlY3Rp b24gd2FzIGZvdW5kDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgZmlsZSBh bmQgc2VjdGlvbiB3YXMgbm90IGZvdW5kDQorICBAcmV0dmFsIEVGSV9WT0xVTUVfQ09SUlVQVEVE ICBUaGUgZmlybXdhcmUgdm9sdW1lIHdhcyBjb3JydXB0ZWQNCisNCisqKi8NCitWT0lEDQorRmlu ZFBlaUNvcmVJbWFnZUJhc2UgKA0KKyAgSU4gT1VUICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURF UiAgICAgICAqKkJvb3RGdiwNCisgICAgIE9VVCAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAg ICAgICAgKlBlaUNvcmVJbWFnZUJhc2UNCisgICkNCit7DQorICBCT09MRUFOIFMzUmVzdW1lOw0K Kw0KKyAgKlBlaUNvcmVJbWFnZUJhc2UgPSAwOw0KKw0KKyAgUzNSZXN1bWUgPSBJc1MzUmVzdW1l ICgpOw0KKyAgaWYgKFMzUmVzdW1lICYmICFGZWF0dXJlUGNkR2V0IChQY2RTbW1TbXJhbVJlcXVp cmUpKSB7DQorICAgIC8vDQorICAgIC8vIEEgbWFsaWNpb3VzIHJ1bnRpbWUgT1MgbWF5IGhhdmUg aW5qZWN0ZWQgc29tZXRoaW5nIGludG8gb3VyIHByZXZpb3VzbHkNCisgICAgLy8gZGVjb2RlZCBQ RUkgRlYsIGJ1dCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoYXQgdW5sZXNzIFNNTS9TTVJBTSBpcyBy ZXF1aXJlZC4NCisgICAgLy8NCisgICAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiU0VDOiBTMyBy ZXN1bWVcbiIpKTsNCisgICAgR2V0UzNSZXN1bWVQZWlGdiAoQm9vdEZ2KTsNCisgIH0gZWxzZSB7 DQorICAgIC8vDQorICAgIC8vIFdlJ3JlIGVpdGhlciBub3QgcmVzdW1pbmcsIG9yIHJlc3VtaW5n ICJzZWN1cmVseSIgLS0gd2UnbGwgZGVjb21wcmVzcw0KKyAgICAvLyBib3RoIFBFSSBGViBhbmQg RFhFIEZWIGZyb20gcHJpc3RpbmUgZmxhc2guDQorICAgIC8vDQorICAgIERFQlVHICgoRUZJX0Rf VkVSQk9TRSwgIlNFQzogJWFcbiIsDQorICAgICAgUzNSZXN1bWUgPyAiUzMgcmVzdW1lICh3aXRo IFBFSSBkZWNvbXByZXNzaW9uKSIgOiAiTm9ybWFsIGJvb3QiKSk7DQorICAgIEZpbmRNYWluRnYg KEJvb3RGdik7DQorDQorICAgIERlY29tcHJlc3NNZW1GdnMgKEJvb3RGdik7DQorICB9DQorDQor ICBGaW5kUGVpQ29yZUltYWdlQmFzZUluRnYgKCpCb290RnYsIFBlaUNvcmVJbWFnZUJhc2UpOw0K K30NCisNCisvKioNCisgIEZpbmQgY29yZSBpbWFnZSBiYXNlLg0KKw0KKyoqLw0KK0VGSV9TVEFU VVMNCitGaW5kSW1hZ2VCYXNlICgNCisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAg ICAgICAqQm9vdEZpcm13YXJlVm9sdW1lUHRyLA0KKyAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNT ICAgICAgICAgICAgICpTZWNDb3JlSW1hZ2VCYXNlDQorICApDQorew0KKyAgRUZJX1BIWVNJQ0FM X0FERFJFU1MgICAgICAgIEN1cnJlbnRBZGRyZXNzOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgIEVuZE9mRmlybXdhcmVWb2x1bWU7DQorICBFRklfRkZTX0ZJTEVfSEVBREVSICAgICAg ICAgKkZpbGU7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCisgIEVGSV9Q SFlTSUNBTF9BRERSRVNTICAgICAgICBFbmRPZkZpbGU7DQorICBFRklfQ09NTU9OX1NFQ1RJT05f SEVBREVSICAgKlNlY3Rpb247DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgRW5kT2ZT ZWN0aW9uOw0KKw0KKyAgKlNlY0NvcmVJbWFnZUJhc2UgPSAwOw0KKw0KKyAgQ3VycmVudEFkZHJl c3MgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKSBCb290RmlybXdhcmVWb2x1bWVQdHI7 DQorICBFbmRPZkZpcm13YXJlVm9sdW1lID0gQ3VycmVudEFkZHJlc3MgKyBCb290RmlybXdhcmVW b2x1bWVQdHItPkZ2TGVuZ3RoOw0KKw0KKyAgLy8NCisgIC8vIExvb3AgdGhyb3VnaCB0aGUgRkZT IGZpbGVzIGluIHRoZSBCb290IEZpcm13YXJlIFZvbHVtZQ0KKyAgLy8NCisgIGZvciAoRW5kT2ZG aWxlID0gQ3VycmVudEFkZHJlc3MgKyBCb290RmlybXdhcmVWb2x1bWVQdHItPkhlYWRlckxlbmd0 aDsgOyApIHsNCisNCisgICAgQ3VycmVudEFkZHJlc3MgPSAoRW5kT2ZGaWxlICsgNykgJiAweGZm ZmZmZmZmZmZmZmZmZjhVTEw7DQorICAgIGlmIChDdXJyZW50QWRkcmVzcyA+IEVuZE9mRmlybXdh cmVWb2x1bWUpIHsNCisgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCisgICAgfQ0KKw0KKyAg ICBGaWxlID0gKEVGSV9GRlNfRklMRV9IRUFERVIqKShVSU5UTikgQ3VycmVudEFkZHJlc3M7DQor ICAgIFNpemUgPSAqKFVJTlQzMiopIEZpbGUtPlNpemUgJiAweGZmZmZmZjsNCisgICAgaWYgKFNp emUgPCBzaXplb2YgKCpGaWxlKSkgew0KKyAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAg ICB9DQorDQorICAgIEVuZE9mRmlsZSA9IEN1cnJlbnRBZGRyZXNzICsgU2l6ZTsNCisgICAgaWYg KEVuZE9mRmlsZSA+IEVuZE9mRmlybXdhcmVWb2x1bWUpIHsNCisgICAgICByZXR1cm4gRUZJX05P VF9GT1VORDsNCisgICAgfQ0KKw0KKyAgICAvLw0KKyAgICAvLyBMb29rIGZvciBTRUMgQ29yZQ0K KyAgICAvLw0KKyAgICBpZiAoRmlsZS0+VHlwZSAhPSBFRklfRlZfRklMRVRZUEVfU0VDVVJJVFlf Q09SRSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIExv b3AgdGhyb3VnaCB0aGUgRkZTIGZpbGUgc2VjdGlvbnMgd2l0aGluIHRoZSBGRlMgZmlsZQ0KKyAg ICAvLw0KKyAgICBFbmRPZlNlY3Rpb24gPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpKFVJTlROKSAo RmlsZSArIDEpOw0KKyAgICBmb3IgKDs7KSB7DQorICAgICAgQ3VycmVudEFkZHJlc3MgPSAoRW5k T2ZTZWN0aW9uICsgMykgJiAweGZmZmZmZmZmZmZmZmZmZmNVTEw7DQorICAgICAgU2VjdGlvbiA9 IChFRklfQ09NTU9OX1NFQ1RJT05fSEVBREVSKikoVUlOVE4pIEN1cnJlbnRBZGRyZXNzOw0KKw0K KyAgICAgIFNpemUgPSAqKFVJTlQzMiopIFNlY3Rpb24tPlNpemUgJiAweGZmZmZmZjsNCisgICAg ICBpZiAoU2l6ZSA8IHNpemVvZiAoKlNlY3Rpb24pKSB7DQorICAgICAgICByZXR1cm4gRUZJX05P VF9GT1VORDsNCisgICAgICB9DQorDQorICAgICAgRW5kT2ZTZWN0aW9uID0gQ3VycmVudEFkZHJl c3MgKyBTaXplOw0KKyAgICAgIGlmIChFbmRPZlNlY3Rpb24gPiBFbmRPZkZpbGUpIHsNCisgICAg ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KKyAgICAgIH0NCisNCisgICAgICAvLw0KKyAgICAg IC8vIExvb2sgZm9yIGV4ZWN1dGFibGUgc2VjdGlvbnMNCisgICAgICAvLw0KKyAgICAgIGlmIChT ZWN0aW9uLT5UeXBlID09IEVGSV9TRUNUSU9OX1BFMzIgfHwgU2VjdGlvbi0+VHlwZSA9PSBFRklf U0VDVElPTl9URSkgew0KKyAgICAgICAgaWYgKEZpbGUtPlR5cGUgPT0gRUZJX0ZWX0ZJTEVUWVBF X1NFQ1VSSVRZX0NPUkUpIHsNCisgICAgICAgICAgKlNlY0NvcmVJbWFnZUJhc2UgPSAoUEhZU0lD QUxfQUREUkVTUykgKFVJTlROKSAoU2VjdGlvbiArIDEpOw0KKyAgICAgICAgfQ0KKyAgICAgICAg YnJlYWs7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8vDQorICAgIC8vIFNFQyBDb3JlIGlt YWdlIGZvdW5kDQorICAgIC8vDQorICAgIGlmICgqU2VjQ29yZUltYWdlQmFzZSAhPSAwKSB7DQor ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qDQorICBG aW5kIGFuZCByZXR1cm4gUGVpIENvcmUgZW50cnkgcG9pbnQuDQorDQorICBJdCBhbHNvIGZpbmQg U0VDIGFuZCBQRUkgQ29yZSBmaWxlIGRlYnVnIGluZm9ybWF0aW9uLiBJdCB3aWxsIHJlcG9ydCB0 aGVtIGlmDQorICByZW1vdGUgZGVidWcgaXMgZW5hYmxlZC4NCisNCisqKi8NCitWT0lEDQorRmlu ZEFuZFJlcG9ydEVudHJ5UG9pbnRzICgNCisgIElOICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURF UiAgICAgICAqKkJvb3RGaXJtd2FyZVZvbHVtZVB0ciwNCisgIE9VVCBFRklfUEVJX0NPUkVfRU5U UllfUE9JTlQgICAgICAgICAqUGVpQ29yZUVudHJ5UG9pbnQNCisgICkNCit7DQorICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgICAgICAgICBTZWNDb3JlSW1hZ2VCYXNlOw0KKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgICAgICAgUGVpQ29yZUltYWdlQmFzZTsNCisgIFBFX0NPRkZfTE9BREVSX0lNQUdFX0NP TlRFWFQgICAgIEltYWdlQ29udGV4dDsNCisNCisgIC8vDQorICAvLyBGaW5kIFNFQyBDb3JlIGFu ZCBQRUkgQ29yZSBpbWFnZSBiYXNlDQorICAgLy8NCisgIFN0YXR1cyA9IEZpbmRJbWFnZUJhc2Ug KCpCb290RmlybXdhcmVWb2x1bWVQdHIsICZTZWNDb3JlSW1hZ2VCYXNlKTsNCisgIEFTU0VSVF9F RklfRVJST1IgKFN0YXR1cyk7DQorDQorICBGaW5kUGVpQ29yZUltYWdlQmFzZSAoQm9vdEZpcm13 YXJlVm9sdW1lUHRyLCAmUGVpQ29yZUltYWdlQmFzZSk7DQorDQorICBaZXJvTWVtICgoVk9JRCAq KSAmSW1hZ2VDb250ZXh0LCBzaXplb2YgKFBFX0NPRkZfTE9BREVSX0lNQUdFX0NPTlRFWFQpKTsN CisgIC8vDQorICAvLyBSZXBvcnQgU0VDIENvcmUgZGVidWcgaW5mb3JtYXRpb24gd2hlbiByZW1v dGUgZGVidWcgaXMgZW5hYmxlZA0KKyAgLy8NCisgIEltYWdlQ29udGV4dC5JbWFnZUFkZHJlc3Mg PSBTZWNDb3JlSW1hZ2VCYXNlOw0KKyAgSW1hZ2VDb250ZXh0LlBkYlBvaW50ZXIgPSBQZUNvZmZM b2FkZXJHZXRQZGJQb2ludGVyICgoVk9JRCopIChVSU5UTikgSW1hZ2VDb250ZXh0LkltYWdlQWRk cmVzcyk7DQorICBQZUNvZmZMb2FkZXJSZWxvY2F0ZUltYWdlRXh0cmFBY3Rpb24gKCZJbWFnZUNv bnRleHQpOw0KKw0KKyAgLy8NCisgIC8vIFJlcG9ydCBQRUkgQ29yZSBkZWJ1ZyBpbmZvcm1hdGlv biB3aGVuIHJlbW90ZSBkZWJ1ZyBpcyBlbmFibGVkDQorICAvLw0KKyAgSW1hZ2VDb250ZXh0Lklt YWdlQWRkcmVzcyA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pUGVpQ29yZUltYWdlQmFz ZTsNCisgIEltYWdlQ29udGV4dC5QZGJQb2ludGVyID0gUGVDb2ZmTG9hZGVyR2V0UGRiUG9pbnRl ciAoKFZPSUQqKSAoVUlOVE4pIEltYWdlQ29udGV4dC5JbWFnZUFkZHJlc3MpOw0KKyAgUGVDb2Zm TG9hZGVyUmVsb2NhdGVJbWFnZUV4dHJhQWN0aW9uICgmSW1hZ2VDb250ZXh0KTsNCisNCisgIC8v DQorICAvLyBGaW5kIFBFSSBDb3JlIGVudHJ5IHBvaW50DQorICAvLw0KKyAgU3RhdHVzID0gUGVD b2ZmTG9hZGVyR2V0RW50cnlQb2ludCAoKFZPSUQgKikgKFVJTlROKSBQZWlDb3JlSW1hZ2VCYXNl LCAoVk9JRCoqKSBQZWlDb3JlRW50cnlQb2ludCk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICpQZWlDb3JlRW50cnlQb2ludCA9IDA7DQorICB9DQorDQorICByZXR1cm47DQor fQ0KKw0KK1ZPSUQNCitFRklBUEkNCitTZWNDb3JlU3RhcnR1cFdpdGhTdGFjayAoDQorICBJTiBF RklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgICAgICAqQm9vdEZ2LA0KKyAgSU4gVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKlRvcE9mQ3VycmVudFN0YWNrDQorICApDQorew0KKyAg RUZJX1NFQ19QRUlfSEFORF9PRkYgICAgICAgIFNlY0NvcmVEYXRhOw0KKyAgU0VDX0lEVF9UQUJM RSAgICAgICAgICAgICAgIElkdFRhYmxlSW5TdGFjazsNCisgIElBMzJfREVTQ1JJUFRPUiAgICAg ICAgICAgICBJZHREZXNjcmlwdG9yOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgIElu ZGV4Ow0KKyAgdm9sYXRpbGUgVUlOVDggICAgICAgICAgICAgICpUYWJsZTsNCisNCisgIC8vDQor ICAvLyBJbml0aWFsaXplIGZsb2F0aW5nIHBvaW50IG9wZXJhdGluZyBlbnZpcm9ubWVudA0KKyAg Ly8gdG8gYmUgY29tcGxpYW50IHdpdGggVUVGSSBzcGVjLg0KKyAgLy8NCisgIEluaXRpYWxpemVG bG9hdGluZ1BvaW50VW5pdHMgKCk7DQorDQorICAvLw0KKyAgLy8gSW5pdGlhbGl6ZSB0aGUgUENJ ZSBDb25maWd1cmF0aW9uIGJhc2UgcmVnaXN0ZXIuDQorICAvLw0KKyAgUGNpQ2Y4V3JpdGUzMiAo UENJX0NGOF9MSUJfQUREUkVTUyAoMHhGRiwgMCwgMSwgMHg1MCksIDB4RTAwMDAwMDEpOw0KKw0K KyAgLy8NCisgIC8vIFRvIGVuc3VyZSBTTU0gY2FuJ3QgYmUgY29tcHJvbWlzZWQgb24gUzMgcmVz dW1lLCB3ZSBtdXN0IGZvcmNlIHJlLWluaXQgb2YNCisgIC8vIHRoZSBCYXNlRXh0cmFjdEd1aWRl ZFNlY3Rpb25MaWIuIFNpbmNlIHRoaXMgaXMgYmVmb3JlIGxpYnJhcnkgY29udHJ1Y3RvcnMNCisg IC8vIGFyZSBjYWxsZWQsIHdlIG11c3QgdXNlIGEgbG9vcCByYXRoZXIgdGhhbiBTZXRNZW0uDQor ICAvLw0KKyAgVGFibGUgPSAoVUlOVDgqKShVSU5UTilGaXhlZFBjZEdldDY0IChQY2RHdWlkZWRF eHRyYWN0SGFuZGxlclRhYmxlQWRkcmVzcyk7DQorICBmb3IgKEluZGV4ID0gMDsNCisgICAgICAg SW5kZXggPCBGaXhlZFBjZEdldDMyIChQY2RHdWlkZWRFeHRyYWN0SGFuZGxlclRhYmxlU2l6ZSk7 DQorICAgICAgICsrSW5kZXgpIHsNCisgICAgVGFibGVbSW5kZXhdID0gMDsNCisgIH0NCisNCisg IFByb2Nlc3NMaWJyYXJ5Q29uc3RydWN0b3JMaXN0IChOVUxMLCBOVUxMKTsNCisNCisgIERFQlVH ICgoRUZJX0RfSU5GTywNCisgICAgIlNlY0NvcmVTdGFydHVwV2l0aFN0YWNrKDB4JXgsIDB4JXgp XG4iLA0KKyAgICAoVUlOVDMyKShVSU5UTilCb290RnYsDQorICAgIChVSU5UMzIpKFVJTlROKVRv cE9mQ3VycmVudFN0YWNrDQorICAgICkpOw0KKw0KKyAgLy8NCisgIC8vIEluaXRpYWxpemUgSURU DQorICAvLw0KKyAgSWR0VGFibGVJblN0YWNrLlBlaVNlcnZpY2UgPSBOVUxMOw0KKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgU0VDX0lEVF9FTlRSWV9DT1VOVDsgSW5kZXggKyspIHsNCisgICAg Q29weU1lbSAoJklkdFRhYmxlSW5TdGFjay5JZHRUYWJsZVtJbmRleF0sICZtSWR0RW50cnlUZW1w bGF0ZSwgc2l6ZW9mIChtSWR0RW50cnlUZW1wbGF0ZSkpOw0KKyAgfQ0KKw0KKyAgSWR0RGVzY3Jp cHRvci5CYXNlICA9IChVSU5UTikmSWR0VGFibGVJblN0YWNrLklkdFRhYmxlOw0KKyAgSWR0RGVz Y3JpcHRvci5MaW1pdCA9IChVSU5UMTYpKHNpemVvZiAoSWR0VGFibGVJblN0YWNrLklkdFRhYmxl KSAtIDEpOw0KKw0KKyAgQXNtV3JpdGVJZHRyICgmSWR0RGVzY3JpcHRvcik7DQorDQorI2lmIGRl ZmluZWQgKE1ERV9DUFVfWDY0KQ0KKyAgLy8NCisgIC8vIEFTU0VSVCB0aGF0IHRoZSBQYWdlIFRh YmxlcyB3ZXJlIHNldCBieSB0aGUgcmVzZXQgdmVjdG9yIGNvZGUgdG8NCisgIC8vIHRoZSBhZGRy ZXNzIHdlIGV4cGVjdC4NCisgIC8vDQorICBBU1NFUlQgKEFzbVJlYWRDcjMgKCkgPT0gKFVJTlRO KSBQY2RHZXQzMiAoUGNkU2ltaWNzU2VjUGFnZVRhYmxlc0Jhc2UpKTsNCisjZW5kaWYNCisNCisg IC8vDQorICAvLyB8LS0tLS0tLS0tLS0tLXwgICAgICAgPC0tIFRvcE9mQ3VycmVudFN0YWNrDQor ICAvLyB8ICAgU3RhY2sgICAgIHwgMzJrDQorICAvLyB8LS0tLS0tLS0tLS0tLXwNCisgIC8vIHwg ICAgSGVhcCAgICAgfCAzMmsNCisgIC8vIHwtLS0tLS0tLS0tLS0tfCAgICAgICA8LS0gU2VjQ29y ZURhdGEuVGVtcG9yYXJ5UmFtQmFzZQ0KKyAgLy8NCisNCisgIEFTU0VSVCAoKFVJTlROKSAoUGNk R2V0MzIgKFBjZFNpbWljc1NlY1BlaVRlbXBSYW1CYXNlKSArDQorICAgICAgICAgICAgICAgICAg IFBjZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtU2l6ZSkpID09DQorICAgICAgICAgIChV SU5UTikgVG9wT2ZDdXJyZW50U3RhY2spOw0KKw0KKyAgLy8NCisgIC8vIEluaXRpYWxpemUgU0VD IGhhbmQtb2ZmIHN0YXRlDQorICAvLw0KKyAgU2VjQ29yZURhdGEuRGF0YVNpemUgPSBzaXplb2Yo RUZJX1NFQ19QRUlfSEFORF9PRkYpOw0KKw0KKyAgU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6 ZSAgICAgICA9IChVSU5UTikgUGNkR2V0MzIgKFBjZFNpbWljc1NlY1BlaVRlbXBSYW1TaXplKTsN CisgIFNlY0NvcmVEYXRhLlRlbXBvcmFyeVJhbUJhc2UgICAgICAgPSAoVk9JRCopKChVSU5UOCAq KVRvcE9mQ3VycmVudFN0YWNrIC0gU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6ZSk7DQorDQor ICBTZWNDb3JlRGF0YS5QZWlUZW1wb3JhcnlSYW1CYXNlICAgID0gU2VjQ29yZURhdGEuVGVtcG9y YXJ5UmFtQmFzZTsNCisgIFNlY0NvcmVEYXRhLlBlaVRlbXBvcmFyeVJhbVNpemUgICAgPSBTZWND b3JlRGF0YS5UZW1wb3JhcnlSYW1TaXplID4+IDE7DQorDQorICBTZWNDb3JlRGF0YS5TdGFja0Jh c2UgICAgICAgICAgICAgID0gKFVJTlQ4ICopU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtQmFzZSAr IFNlY0NvcmVEYXRhLlBlaVRlbXBvcmFyeVJhbVNpemU7DQorICBTZWNDb3JlRGF0YS5TdGFja1Np emUgICAgICAgICAgICAgID0gU2VjQ29yZURhdGEuVGVtcG9yYXJ5UmFtU2l6ZSA+PiAxOw0KKw0K KyAgU2VjQ29yZURhdGEuQm9vdEZpcm13YXJlVm9sdW1lQmFzZSA9IEJvb3RGdjsNCisgIFNlY0Nv cmVEYXRhLkJvb3RGaXJtd2FyZVZvbHVtZVNpemUgPSAoVUlOVE4pIEJvb3RGdi0+RnZMZW5ndGg7 DQorDQorICAvLw0KKyAgLy8gTWFrZSBzdXJlIHRoZSA4MjU5IGlzIG1hc2tlZCBiZWZvcmUgaW5p dGlhbGl6aW5nIHRoZSBEZWJ1ZyBBZ2VudCBhbmQgdGhlIGRlYnVnIHRpbWVyIGlzIGVuYWJsZWQN CisgIC8vDQorICBJb1dyaXRlOCAoMHgyMSwgMHhmZik7DQorICBJb1dyaXRlOCAoMHhBMSwgMHhm Zik7DQorDQorICAvLw0KKyAgLy8gSW5pdGlhbGl6ZSBMb2NhbCBBUElDIFRpbWVyIGhhcmR3YXJl IGFuZCBkaXNhYmxlIExvY2FsIEFQSUMgVGltZXINCisgIC8vIGludGVycnVwdHMgYmVmb3JlIGlu aXRpYWxpemluZyB0aGUgRGVidWcgQWdlbnQgYW5kIHRoZSBkZWJ1ZyB0aW1lciBpcw0KKyAgLy8g ZW5hYmxlZC4NCisgIC8vDQorICBJbml0aWFsaXplQXBpY1RpbWVyICgwLCBNQVhfVUlOVDMyLCBU UlVFLCA1KTsNCisgIERpc2FibGVBcGljVGltZXJJbnRlcnJ1cHQgKCk7DQorDQorICAvLw0KKyAg Ly8gSW5pdGlhbGl6ZSBEZWJ1ZyBBZ2VudCB0byBzdXBwb3J0IHNvdXJjZSBsZXZlbCBkZWJ1ZyBp biBTRUMvUEVJIHBoYXNlcyBiZWZvcmUgbWVtb3J5IHJlYWR5Lg0KKyAgLy8NCisgIEluaXRpYWxp emVEZWJ1Z0FnZW50IChERUJVR19BR0VOVF9JTklUX1BSRU1FTV9TRUMsICZTZWNDb3JlRGF0YSwg U2VjU3RhcnR1cFBoYXNlMik7DQorfQ0KKw0KKy8qKg0KKyAgQ2FsbGVyIHByb3ZpZGVkIGZ1bmN0 aW9uIHRvIGJlIGludm9rZWQgYXQgdGhlIGVuZCBvZiBJbml0aWFsaXplRGVidWdBZ2VudCgpLg0K Kw0KKyAgRW50cnkgcG9pbnQgdG8gdGhlIEMgbGFuZ3VhZ2UgcGhhc2Ugb2YgU0VDLiBBZnRlciB0 aGUgU0VDIGFzc2VtYmx5DQorICBjb2RlIGhhcyBpbml0aWFsaXplZCBzb21lIHRlbXBvcmFyeSBt ZW1vcnkgYW5kIHNldCB1cCB0aGUgc3RhY2ssDQorICB0aGUgY29udHJvbCBpcyB0cmFuc2ZlcnJl ZCB0byB0aGlzIGZ1bmN0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSBDb250ZXh0ICAgIFRoZSBmaXJz dCBpbnB1dCBwYXJhbWV0ZXIgb2YgSW5pdGlhbGl6ZURlYnVnQWdlbnQoKS4NCisNCisqKi8NCitW T0lEDQorRUZJQVBJDQorU2VjU3RhcnR1cFBoYXNlMigNCisgIElOIFZPSUQgICAgICAgICAgICAg ICAgICAgICAqQ29udGV4dA0KKyAgKQ0KK3sNCisgIEVGSV9TRUNfUEVJX0hBTkRfT0ZGICAgICAg ICAqU2VjQ29yZURhdGE7DQorICBFRklfRklSTVdBUkVfVk9MVU1FX0hFQURFUiAgKkJvb3RGdjsN CisgIEVGSV9QRUlfQ09SRV9FTlRSWV9QT0lOVCAgICBQZWlDb3JlRW50cnlQb2ludDsNCisNCisg IFNlY0NvcmVEYXRhID0gKEVGSV9TRUNfUEVJX0hBTkRfT0ZGICopIENvbnRleHQ7DQorDQorICAv Lw0KKyAgLy8gRmluZCBQRUkgQ29yZSBlbnRyeSBwb2ludC4gSXQgd2lsbCByZXBvcnQgU0VDIGFu ZCBQZWkgQ29yZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpZiByZW1vdGUgZGVidWcNCisgIC8vIGlzIGVu YWJsZWQuDQorICAvLw0KKyAgQm9vdEZ2ID0gKEVGSV9GSVJNV0FSRV9WT0xVTUVfSEVBREVSICop U2VjQ29yZURhdGEtPkJvb3RGaXJtd2FyZVZvbHVtZUJhc2U7DQorICBGaW5kQW5kUmVwb3J0RW50 cnlQb2ludHMgKCZCb290RnYsICZQZWlDb3JlRW50cnlQb2ludCk7DQorICBTZWNDb3JlRGF0YS0+ Qm9vdEZpcm13YXJlVm9sdW1lQmFzZSA9IEJvb3RGdjsNCisgIFNlY0NvcmVEYXRhLT5Cb290Rmly bXdhcmVWb2x1bWVTaXplID0gKFVJTlROKSBCb290RnYtPkZ2TGVuZ3RoOw0KKw0KKyAgLy8NCisg IC8vIFRyYW5zZmVyIHRoZSBjb250cm9sIHRvIHRoZSBQRUkgY29yZQ0KKyAgLy8NCisgICgqUGVp Q29yZUVudHJ5UG9pbnQpIChTZWNDb3JlRGF0YSwgKEVGSV9QRUlfUFBJX0RFU0NSSVBUT1IgKikm bVByaXZhdGVEaXNwYXRjaFRhYmxlKTsNCisNCisgIC8vDQorICAvLyBJZiB3ZSBnZXQgaGVyZSB0 aGVuIHRoZSBQRUkgQ29yZSByZXR1cm5lZCwgd2hpY2ggaXMgbm90IHJlY292ZXJhYmxlLg0KKyAg Ly8NCisgIEFTU0VSVCAoRkFMU0UpOw0KKyAgQ3B1RGVhZExvb3AgKCk7DQorfQ0KKw0KK0VGSV9T VEFUVVMNCitFRklBUEkNCitUZW1wb3JhcnlSYW1NaWdyYXRpb24gKA0KKyAgSU4gQ09OU1QgRUZJ X1BFSV9TRVJWSUNFUyAgICoqUGVpU2VydmljZXMsDQorICBJTiBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgVGVtcG9yYXJ5TWVtb3J5QmFzZSwNCisgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTICAg ICBQZXJtYW5lbnRNZW1vcnlCYXNlLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgIENv cHlTaXplDQorICApDQorew0KKyAgSUEzMl9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgSWR0 RGVzY3JpcHRvcjsNCisgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpPbGRIZWFw Ow0KKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5ld0hlYXA7DQorICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqT2xkU3RhY2s7DQorICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqTmV3U3RhY2s7DQorICBERUJVR19BR0VOVF9DT05URVhUX1BP U1RNRU1fU0VDICBEZWJ1Z0FnZW50Q29udGV4dDsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgIE9sZFN0YXR1czsNCisgIEJBU0VfTElCUkFSWV9KVU1QX0JVRkZFUiAgICAgICAg IEp1bXBCdWZmZXI7DQorDQorICBERUJVRyAoKEVGSV9EX0lORk8sDQorICAgICJUZW1wb3JhcnlS YW1NaWdyYXRpb24oMHglTHgsIDB4JUx4LCAweCVMeClcbiIsDQorICAgIFRlbXBvcmFyeU1lbW9y eUJhc2UsDQorICAgIFBlcm1hbmVudE1lbW9yeUJhc2UsDQorICAgIChVSU5UNjQpQ29weVNpemUN CisgICAgKSk7DQorDQorICBPbGRIZWFwID0gKFZPSUQqKShVSU5UTilUZW1wb3JhcnlNZW1vcnlC YXNlOw0KKyAgTmV3SGVhcCA9IChWT0lEKikoKFVJTlROKVBlcm1hbmVudE1lbW9yeUJhc2UgKyAo Q29weVNpemUgPj4gMSkpOw0KKw0KKyAgT2xkU3RhY2sgPSAoVk9JRCopKChVSU5UTilUZW1wb3Jh cnlNZW1vcnlCYXNlICsgKENvcHlTaXplID4+IDEpKTsNCisgIE5ld1N0YWNrID0gKFZPSUQqKShV SU5UTilQZXJtYW5lbnRNZW1vcnlCYXNlOw0KKw0KKyAgRGVidWdBZ2VudENvbnRleHQuSGVhcE1p Z3JhdGVPZmZzZXQgPSAoVUlOVE4pTmV3SGVhcCAtIChVSU5UTilPbGRIZWFwOw0KKyAgRGVidWdB Z2VudENvbnRleHQuU3RhY2tNaWdyYXRlT2Zmc2V0ID0gKFVJTlROKU5ld1N0YWNrIC0gKFVJTlRO KU9sZFN0YWNrOw0KKw0KKyAgT2xkU3RhdHVzID0gU2F2ZUFuZFNldERlYnVnVGltZXJJbnRlcnJ1 cHQgKEZBTFNFKTsNCisgIEluaXRpYWxpemVEZWJ1Z0FnZW50IChERUJVR19BR0VOVF9JTklUX1BP U1RNRU1fU0VDLCAoVk9JRCAqKSAmRGVidWdBZ2VudENvbnRleHQsIE5VTEwpOw0KKw0KKyAgLy8N CisgIC8vIE1pZ3JhdGUgSGVhcA0KKyAgLy8NCisgIENvcHlNZW0gKE5ld0hlYXAsIE9sZEhlYXAs IENvcHlTaXplID4+IDEpOw0KKw0KKyAgLy8NCisgIC8vIE1pZ3JhdGUgU3RhY2sNCisgIC8vDQor ICBDb3B5TWVtIChOZXdTdGFjaywgT2xkU3RhY2ssIENvcHlTaXplID4+IDEpOw0KKw0KKyAgLy8N CisgIC8vIFJlYmFzZSBJRFQgdGFibGUgaW4gcGVybWFuZW50IG1lbW9yeQ0KKyAgLy8NCisgIEFz bVJlYWRJZHRyICgmSWR0RGVzY3JpcHRvcik7DQorICBJZHREZXNjcmlwdG9yLkJhc2UgPSBJZHRE ZXNjcmlwdG9yLkJhc2UgLSAoVUlOVE4pT2xkU3RhY2sgKyAoVUlOVE4pTmV3U3RhY2s7DQorDQor ICBBc21Xcml0ZUlkdHIgKCZJZHREZXNjcmlwdG9yKTsNCisNCisgIC8vDQorICAvLyBVc2UgU2V0 SnVtcCgpL0xvbmdKdW1wKCkgdG8gc3dpdGNoIHRvIGEgbmV3IHN0YWNrLg0KKyAgLy8NCisgIGlm IChTZXRKdW1wICgmSnVtcEJ1ZmZlcikgPT0gMCkgew0KKyNpZiBkZWZpbmVkIChNREVfQ1BVX0lB MzIpDQorICAgIEp1bXBCdWZmZXIuRXNwID0gSnVtcEJ1ZmZlci5Fc3AgKyBEZWJ1Z0FnZW50Q29u dGV4dC5TdGFja01pZ3JhdGVPZmZzZXQ7DQorI2VuZGlmDQorI2lmIGRlZmluZWQgKE1ERV9DUFVf WDY0KQ0KKyAgICBKdW1wQnVmZmVyLlJzcCA9IEp1bXBCdWZmZXIuUnNwICsgRGVidWdBZ2VudENv bnRleHQuU3RhY2tNaWdyYXRlT2Zmc2V0Ow0KKyNlbmRpZg0KKyAgICBMb25nSnVtcCAoJkp1bXBC dWZmZXIsIChVSU5UTiktMSk7DQorICB9DQorDQorICBTYXZlQW5kU2V0RGVidWdUaW1lckludGVy cnVwdCAoT2xkU3RhdHVzKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQpkaWZmIC0t Z2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9y bS5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9y bS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uYjdmZDRkMWY2ZA0K LS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1Np bWljc0R4ZS9QbGF0Zm9ybS5jDQpAQCAtMCwwICsxLDg2NSBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhp cyBkcml2ZXIgZWZmZWN0dWF0ZXMgUVNQIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mg YW5kIGV4cG9zZXMNCisgIHRoZW0gdmlhIEhJSS4NCisNCisgIENvcHlyaWdodCAoQykgMjAxNCwg UmVkIEhhdCwgSW5jLg0KKyAgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOSwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9C YXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hpaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9y eUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L1VlZmlIaWlTZXJ2aWNlc0xpYi5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9EZXZpY2VQYXRo Lmg+DQorI2luY2x1ZGUgPFByb3RvY29sL0dyYXBoaWNzT3V0cHV0Lmg+DQorI2luY2x1ZGUgPFBy b3RvY29sL0hpaUNvbmZpZ0FjY2Vzcy5oPg0KKyNpbmNsdWRlIDxHdWlkL01kZU1vZHVsZUhpaS5o Pg0KKyNpbmNsdWRlIDxHdWlkL1NpbWljc0JvYXJkQ29uZmlnLmg+DQorDQorI2luY2x1ZGUgIlBs YXRmb3JtLmgiDQorI2luY2x1ZGUgIlBsYXRmb3JtQ29uZmlnLmgiDQorI2luY2x1ZGUgPExpYnJh cnkvRHhlU2VydmljZXNUYWJsZUxpYi5oPg0KKy8vDQorLy8gVGhlIEhpaUFkZFBhY2thZ2VzKCkg bGlicmFyeSBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IGFueSBjb250cm9sbGVyIChvcg0KKy8vIGlt YWdlKSBoYW5kbGUsIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgSElJIHBhY2thZ2VzIHVuZGVy IGluc3RhbGxhdGlvbiwgYmUNCisvLyAiZGVjb3JhdGVkIiB3aXRoIGEgZGV2aWNlIHBhdGguIFRo ZSB0cmFkaXRpb24gc2VlbXMgdG8gYmUgYSB2ZW5kb3IgZGV2aWNlDQorLy8gcGF0aC4NCisvLw0K Ky8vIFdlJ2QgbGlrZSB0byBhc3NvY2lhdGUgb3VyIEhJSSBwYWNrYWdlcyB3aXRoIHRoZSBkcml2 ZXIncyBpbWFnZSBoYW5kbGUuIFRoZQ0KKy8vIGZpcnN0IGlkZWEgaXMgdG8gdXNlIHRoZSBkcml2 ZXIgaW1hZ2UncyBkZXZpY2UgcGF0aC4gVW5mb3J0dW5hdGVseSwgbG9hZGVkDQorLy8gaW1hZ2Vz IG9ubHkgY29tZSB3aXRoIGFuIEVGSV9MT0FERURfSU1BR0VfREVWSUNFX1BBVEhfUFJPVE9DT0wg KG5vdCB0aGUNCisvLyB1c3VhbCBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpLCBpZS4gYSBkaWZm ZXJlbnQgR1VJRC4gSW4gYWRkaXRpb24sIGV2ZW4gdGhlDQorLy8gRUZJX0xPQURFRF9JTUFHRV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnRlcmZhY2UgbWF5IGJlIE5VTEwsIGlmIHRoZSBpbWFnZQ0K Ky8vIGhhcyBiZWVuIGxvYWRlZCBmcm9tIGFuICJ1bm5hbWVkIiBtZW1vcnkgc291cmNlIGJ1ZmZl ci4NCisvLw0KKy8vIEhlbmNlIGxldCdzIGp1c3Qgc3RpY2sgd2l0aCB0aGUgdHJhZGl0aW9uIC0t IHVzZSBhIGRlZGljYXRlZCB2ZW5kb3IgZGV2aWNlDQorLy8gcGF0aCwgd2l0aCB0aGUgZHJpdmVy J3MgRklMRV9HVUlELg0KKy8vDQorI3ByYWdtYSBwYWNrKDEpDQordHlwZWRlZiBzdHJ1Y3Qgew0K KyAgVkVORE9SX0RFVklDRV9QQVRIICAgICAgIFZlbmRvckRldmljZVBhdGg7DQorICBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgRW5kOw0KK30gUEtHX0RFVklDRV9QQVRIOw0KKyNwcmFnbWEgcGFj aygpDQorDQorU1RBVElDIFBLR19ERVZJQ0VfUEFUSCBtUGtnRGV2aWNlUGF0aCA9IHsNCisgIHsN CisgICAgew0KKyAgICAgIEhBUkRXQVJFX0RFVklDRV9QQVRILA0KKyAgICAgIEhXX1ZFTkRPUl9E UCwNCisgICAgICB7DQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFU SCkgICAgICksDQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKFZFTkRPUl9ERVZJQ0VfUEFUSCkg Pj4gOCkNCisgICAgICB9DQorICAgIH0sDQorICAgIEVGSV9DQUxMRVJfSURfR1VJRA0KKyAgfSwN CisgIHsNCisgICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQorICAgIEVORF9FTlRJUkVfREVWSUNF X1BBVEhfU1VCVFlQRSwNCisgICAgew0KKyAgICAgIChVSU5UOCkgKEVORF9ERVZJQ0VfUEFUSF9M RU5HVEggICAgICksDQorICAgICAgKFVJTlQ4KSAoRU5EX0RFVklDRV9QQVRIX0xFTkdUSCA+PiA4 KQ0KKyAgICB9DQorICB9DQorfTsNCisNCisvLw0KKy8vIFRoZSBjb25maWd1cmF0aW9uIGludGVy ZmFjZSBiZXR3ZWVuIHRoZSBISUkgZW5naW5lIChmb3JtIGRpc3BsYXkgZXRjKSBhbmQNCisvLyB0 aGlzIGRyaXZlci4NCisvLw0KK1NUQVRJQyBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wg bUNvbmZpZ0FjY2VzczsNCisNCisvLw0KKy8vIFRoZSBoYW5kbGUgcmVwcmVzZW50aW5nIG91ciBs aXN0IG9mIHBhY2thZ2VzIGFmdGVyIGluc3RhbGxhdGlvbi4NCisvLw0KK1NUQVRJQyBFRklfSElJ X0hBTkRMRSBtSW5zdGFsbGVkUGFja2FnZXM7DQorDQorLy8NCisvLyBUaGUgYXJyYXlzIGJlbG93 IGNvbnN0aXR1dGUgb3VyIEhJSSBwYWNrYWdlIGxpc3QuIFRoZXkgYXJlIGF1dG8tZ2VuZXJhdGVk IGJ5DQorLy8gdGhlIFZGUiBjb21waWxlciBhbmQgbGlua2VkIGludG8gdGhlIGRyaXZlciBpbWFn ZSBkdXJpbmcgdGhlIGJ1aWxkLg0KKy8vDQorLy8gLSBUaGUgc3RyaW5ncyBwYWNrYWdlIHJlY2Vp dmVzIGl0cyBDIGlkZW50aWZpZXIgZnJvbSB0aGUgZHJpdmVyJ3MgQkFTRV9OQU1FLA0KKy8vICAg cGx1cyAiU3RyaW5ncyIuDQorLy8NCisvLyAtIFRoZSBmb3JtcyBwYWNrYWdlIHJlY2VpdmVzIGl0 cyBDIGlkZW50aWZpZXIgZnJvbSB0aGUgVkZSIGZpbGUncyBiYXNlbmFtZSwNCisvLyAgIHBsdXMg IkJpbiIuDQorLy8NCisvLw0KK2V4dGVybiBVSU5UOCBTaW1pY3NEeGVTdHJpbmdzW107DQorZXh0 ZXJuIFVJTlQ4IFBsYXRmb3JtRm9ybXNCaW5bXTsNCisNCisvLw0KKy8vIFdlIHdhbnQgdG8gYmUg bm90aWZpZWQgYWJvdXQgR09QIGluc3RhbGxhdGlvbnMgdW50aWwgd2UgZmluZCBvbmUgR09QDQor Ly8gaW50ZXJmYWNlIHRoYXQgbGV0cyB1cyBwb3B1bGF0ZSB0aGUgZm9ybS4NCisvLw0KK1NUQVRJ QyBFRklfRVZFTlQgbUdvcEV2ZW50Ow0KKw0KKy8vDQorLy8gVGhlIHJlZ2lzdHJhdGlvbiByZWNv cmQgdW5kZXJuZWF0aCB0aGlzIHBvaW50ZXIgYWxsb3dzIHVzIHRvIGl0ZXJhdGUgdGhyb3VnaA0K Ky8vIHRoZSBHT1AgaW5zdGFuY2VzIG9uZSBieSBvbmUuDQorLy8NCitTVEFUSUMgVk9JRCAqbUdv cFRyYWNrZXI7DQorDQorLy8NCisvLyBDYWNoZSB0aGUgcmVzb2x1dGlvbnMgd2UgZ2V0IGZyb20g dGhlIEdPUC4NCisvLw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQzMiBYOw0KKyAgVUlOVDMy IFk7DQorfSBHT1BfTU9ERTsNCisNCitTVEFUSUMgVUlOVE4gICAgbU51bUdvcE1vZGVzOw0KK1NU QVRJQyBHT1BfTU9ERSAqbUdvcE1vZGVzOw0KKw0KKw0KKy8qKg0KKyAgTG9hZCB0aGUgcGVyc2lz dGVudCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGFuZCB0cmFuc2xhdGUgaXQgdG8gYmluYXJ5IGZv cm0NCisgIHN0YXRlLg0KKw0KKyAgSWYgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gaXMgbWlz c2luZywgdGhlbiB0aGUgZnVuY3Rpb24gZmlsbHMgaW4gYQ0KKyAgZGVmYXVsdCBzdGF0ZS4NCisN CisgIEBwYXJhbVtvdXRdIE1haW5Gb3JtU3RhdGUgIEJpbmFyeSBmb3JtL3dpZGdldCBzdGF0ZSBh ZnRlciB0cmFuc2xhdGlvbi4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgIEZvcm0vd2lkZ2V0 IHN0YXRlIHJlYWR5Lg0KKyAgQHJldHVybiAgICAgICAgICAgICAgRXJyb3IgY29kZXMgZnJvbSB1 bmRlcmx5aW5nIGZ1bmN0aW9ucy4NCisqKi8NCitTVEFUSUMNCitFRklfU1RBVFVTDQorRUZJQVBJ DQorUGxhdGZvcm1Db25maWdUb0Zvcm1TdGF0ZSAoDQorICBPVVQgTUFJTl9GT1JNX1NUQVRFICpN YWluRm9ybVN0YXRlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCisgIFBM QVRGT1JNX0NPTkZJRyBQbGF0Zm9ybUNvbmZpZzsNCisgIFVJTlQ2NCAgICAgICAgICBPcHRpb25h bEVsZW1lbnRzOw0KKyAgVUlOVE4gICAgICAgICAgIE1vZGVOdW1iZXI7DQorDQorICBaZXJvTWVt IChNYWluRm9ybVN0YXRlLCBzaXplb2YgKk1haW5Gb3JtU3RhdGUpOw0KKw0KKyAgU3RhdHVzID0g UGxhdGZvcm1Db25maWdMb2FkICgmUGxhdGZvcm1Db25maWcsICZPcHRpb25hbEVsZW1lbnRzKTsN CisgIHN3aXRjaCAoU3RhdHVzKSB7DQorICBjYXNlIEVGSV9TVUNDRVNTOg0KKyAgICBpZiAoT3B0 aW9uYWxFbGVtZW50cyAmIFBMQVRGT1JNX0NPTkZJR19GX0dSQVBISUNTX1JFU09MVVRJT04pIHsN CisgICAgICAvLw0KKyAgICAgIC8vIEZvcm1hdCB0aGUgcHJlZmVycmVkIHJlc29sdXRpb24gYXMg dGV4dC4NCisgICAgICAvLw0KKyAgICAgIFVuaWNvZGVTUHJpbnRBc2NpaUZvcm1hdCAoDQorICAg ICAgICAoQ0hBUjE2ICopIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9u LA0KKyAgICAgICAgc2l6ZW9mIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0 aW9uLA0KKyAgICAgICAgIiVMZHglTGQiLA0KKyAgICAgICAgKElOVDY0KSBQbGF0Zm9ybUNvbmZp Zy5Ib3Jpem9udGFsUmVzb2x1dGlvbiwNCisgICAgICAgIChJTlQ2NCkgUGxhdGZvcm1Db25maWcu VmVydGljYWxSZXNvbHV0aW9uKTsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIFRyeSB0byBsb2Nh dGUgaXQgaW4gdGhlIGRyb3AtZG93biBsaXN0IHRvby4gVGhpcyBtYXkgbm90IHN1Y2NlZWQsIGJ1 dA0KKyAgICAgIC8vIHRoYXQncyBmaW5lLg0KKyAgICAgIC8vDQorICAgICAgZm9yIChNb2RlTnVt YmVyID0gMDsgTW9kZU51bWJlciA8IG1OdW1Hb3BNb2RlczsgKytNb2RlTnVtYmVyKSB7DQorICAg ICAgICBpZiAobUdvcE1vZGVzW01vZGVOdW1iZXJdLlggPT0gUGxhdGZvcm1Db25maWcuSG9yaXpv bnRhbFJlc29sdXRpb24gJiYNCisgICAgICAgICAgICBtR29wTW9kZXNbTW9kZU51bWJlcl0uWSA9 PSBQbGF0Zm9ybUNvbmZpZy5WZXJ0aWNhbFJlc29sdXRpb24pIHsNCisgICAgICAgICAgTWFpbkZv cm1TdGF0ZS0+TmV4dFByZWZlcnJlZFJlc29sdXRpb24gPSAoVUlOVDMyKSBNb2RlTnVtYmVyOw0K KyAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgYnJlYWs7 DQorICAgIH0NCisgICAgLy8NCisgICAgLy8gZmFsbCB0aHJvdWdoIG90aGVyd2lzZQ0KKyAgICAv Lw0KKw0KKyAgY2FzZSBFRklfTk9UX0ZPVU5EOg0KKyAgICBVbmljb2RlU1ByaW50QXNjaWlGb3Jt YXQgKA0KKyAgICAgIChDSEFSMTYgKikgTWFpbkZvcm1TdGF0ZS0+Q3VycmVudFByZWZlcnJlZFJl c29sdXRpb24sDQorICAgICAgc2l6ZW9mIE1haW5Gb3JtU3RhdGUtPkN1cnJlbnRQcmVmZXJyZWRS ZXNvbHV0aW9uLA0KKyAgICAgICJVbnNldCIpOw0KKyAgICBicmVhazsNCisNCisgIGRlZmF1bHQ6 DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQor fQ0KKw0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIEhJSSBtYWNo aW5lcnkgd2hlbiBpdCBmZXRjaGVzIHRoZSBmb3JtIHN0YXRlLg0KKw0KKyAgU2VlIHRoZSBwcmVj aXNlIGRvY3VtZW50YXRpb24gaW4gdGhlIFVFRkkgc3BlYy4NCisNCisgIEBwYXJhbVtpbl0gIFRo aXMgICAgICBUaGUgQ29uZmlnIEFjY2VzcyBQcm90b2NvbCBpbnN0YW5jZS4NCisNCisgIEBwYXJh bVtpbl0gIFJlcXVlc3QgICBBIDxDb25maWdSZXF1ZXN0PiBmb3JtYXQgVUNTLTIgc3RyaW5nIGRl c2NyaWJpbmcgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuDQorDQorICBAcGFy YW1bb3V0XSBQcm9ncmVzcyAgQSBwb2ludGVyIGludG8gUmVxdWVzdCBvbiBvdXRwdXQsIGlkZW50 aWZ5aW5nIHRoZSBxdWVyeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgd2hlcmUg cHJvY2Vzc2luZyBmYWlsZWQuDQorDQorICBAcGFyYW1bb3V0XSBSZXN1bHRzICAgQSA8TXVsdGlD b25maWdBbHRSZXNwPiBmb3JtYXQgVUNTLTIgc3RyaW5nIHRoYXQgaGFzDQorICAgICAgICAgICAg ICAgICAgICAgICAgYWxsIHZhbHVlcyBmaWxsZWQgaW4gZm9yIHRoZSBuYW1lcyBpbiB0aGUgUmVx dWVzdA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy4NCisNCisgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgIEV4dHJhY3Rpb24gb2YgZm9ybSBzdGF0ZSBpbiA8TXVsdGlDb25maWdBbHRSZXNw Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmcgc3VjY2Vzc2Z1bC4NCisgIEByZXR1 cm4gICAgICAgICAgICAgIFN0YXR1cyBjb2RlcyBmcm9tIHVuZGVybHlpbmcgZnVuY3Rpb25zLg0K Kw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitFeHRyYWN0Q29uZmlnICgN CisgIElOIENPTlNUICBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICpUaGlzLA0KKyAg SU4gQ09OU1QgIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCwNCisgIE9V VCAgICAgICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcywNCisgIE9V VCAgICAgICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRzDQorKQ0KK3sN CisgIE1BSU5fRk9STV9TVEFURSBNYWluRm9ybVN0YXRlOw0KKyAgRUZJX1NUQVRVUyAgICAgIFN0 YXR1czsNCisNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiVhOiBSZXF1ZXN0PVwiJXNcIlxu IiwgX19GVU5DVElPTl9fLCBSZXF1ZXN0KSk7DQorDQorICBTdGF0dXMgPSBQbGF0Zm9ybUNvbmZp Z1RvRm9ybVN0YXRlICgmTWFpbkZvcm1TdGF0ZSk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICpQcm9ncmVzcyA9IFJlcXVlc3Q7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9 DQorDQorICAvLw0KKyAgLy8gQW5zd2VyIHRoZSB0ZXh0dWFsIHJlcXVlc3Qga2V5aW5nIG9mZiB0 aGUgYmluYXJ5IGZvcm0gc3RhdGUuDQorICAvLw0KKyAgU3RhdHVzID0gZ0hpaUNvbmZpZ1JvdXRp bmctPkJsb2NrVG9Db25maWcgKGdIaWlDb25maWdSb3V0aW5nLCBSZXF1ZXN0LA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKikgJk1haW5Gb3JtU3RhdGUsIHNpemVvZiBN YWluRm9ybVN0YXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0cywg UHJvZ3Jlc3MpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKEVG SV9EX0VSUk9SLCAiJWE6IEJsb2NrVG9Db25maWcoKTogJXIsIFByb2dyZXNzPVwiJXNcIlxuIiwN CisgICAgICBfX0ZVTkNUSU9OX18sIFN0YXR1cywgKFN0YXR1cyA9PSBFRklfREVWSUNFX0VSUk9S KSA/IE5VTEwgOiAqUHJvZ3Jlc3MpKTsNCisgIH0gZWxzZSB7DQorICAgIERFQlVHICgoRUZJX0Rf VkVSQk9TRSwgIiVhOiBSZXN1bHRzPVwiJXNcIlxuIiwgX19GVU5DVElPTl9fLCAqUmVzdWx0cykp Ow0KKyAgfQ0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoqDQorICBJbnRlcnByZXQg dGhlIGJpbmFyeSBmb3JtIHN0YXRlIGFuZCBzYXZlIGl0IGFzIHBlcnNpc3RlbnQgcGxhdGZvcm0N CisgIGNvbmZpZ3VyYXRpb24uDQorDQorICBAcGFyYW1baW5dIE1haW5Gb3JtU3RhdGUgIEJpbmFy eSBmb3JtL3dpZGdldCBzdGF0ZSB0byB2ZXJpZnkgYW5kIHNhdmUuDQorDQorICBAcmV0dmFsIEVG SV9TVUNDRVNTICBQbGF0Zm9ybSBjb25maWd1cmF0aW9uIHNhdmVkLg0KKyAgQHJldHVybiAgICAg ICAgICAgICAgRXJyb3IgY29kZXMgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4NCisqKi8NCitT VEFUSUMNCitFRklfU1RBVFVTDQorRUZJQVBJDQorRm9ybVN0YXRlVG9QbGF0Zm9ybUNvbmZpZyAo DQorICBJTiBDT05TVCBNQUlOX0ZPUk1fU1RBVEUgKk1haW5Gb3JtU3RhdGUNCisgICkNCit7DQor ICBFRklfU1RBVFVTICAgICAgU3RhdHVzOw0KKyAgUExBVEZPUk1fQ09ORklHIFBsYXRmb3JtQ29u ZmlnOw0KKyAgQ09OU1QgR09QX01PREUgICpHb3BNb2RlOw0KKw0KKyAgLy8NCisgIC8vIFRoZXJl J3Mgbm90aGluZyB0byBkbyB3aXRoIHRoZSB0ZXh0dWFsIEN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0 aW9uIGZpZWxkLg0KKyAgLy8gV2UgdmVyaWZ5IGFuZCB0cmFuc2xhdGUgdGhlIHNlbGVjdGlvbiBp biB0aGUgZHJvcC1kb3duIGxpc3QuDQorICAvLw0KKyAgaWYgKE1haW5Gb3JtU3RhdGUtPk5leHRQ cmVmZXJyZWRSZXNvbHV0aW9uID49IG1OdW1Hb3BNb2Rlcykgew0KKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KKyAgfQ0KKyAgR29wTW9kZSA9IG1Hb3BNb2RlcyArIE1haW5Gb3Jt U3RhdGUtPk5leHRQcmVmZXJyZWRSZXNvbHV0aW9uOw0KKw0KKyAgWmVyb01lbSAoJlBsYXRmb3Jt Q29uZmlnLCBzaXplb2YgUGxhdGZvcm1Db25maWcpOw0KKyAgUGxhdGZvcm1Db25maWcuSG9yaXpv bnRhbFJlc29sdXRpb24gPSBHb3BNb2RlLT5YOw0KKyAgUGxhdGZvcm1Db25maWcuVmVydGljYWxS ZXNvbHV0aW9uICAgPSBHb3BNb2RlLT5ZOw0KKw0KKyAgU3RhdHVzID0gUGxhdGZvcm1Db25maWdT YXZlICgmUGxhdGZvcm1Db25maWcpOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorDQorLyoq DQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgSElJIG1hY2hpbmVyeSB3aGVuIGl0 IHdhbnRzIHRoZSBkcml2ZXIgdG8NCisgIGludGVycHJldCBhbmQgcGVyc2lzdCB0aGUgZm9ybSBz dGF0ZS4NCisNCisgIFNlZSB0aGUgcHJlY2lzZSBkb2N1bWVudGF0aW9uIGluIHRoZSBVRUZJIHNw ZWMuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICBUaGUgQ29uZmlnIEFjY2VzcyBQ cm90b2NvbCBpbnN0YW5jZS4NCisNCisgIEBwYXJhbVtpbl0gIENvbmZpZ3VyYXRpb24gIEEgPENv bmZpZ1Jlc3A+IGZvcm1hdCBVQ1MtMiBzdHJpbmcgZGVzY3JpYmluZyB0aGUNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcm0gc3RhdGUuDQorDQorICBAcGFyYW1bb3V0XSBQcm9ncmVz cyAgICAgICBBIHBvaW50ZXIgaW50byBDb25maWd1cmF0aW9uIG9uIG91dHB1dCwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSBlbGVtZW50IHdoZXJlIHByb2Nl c3NpbmcgZmFpbGVkLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgQ29uZmlndXJhdGlvbiB2 ZXJpZmllZCwgc3RhdGUgcGVybWFuZW50Lg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgU3Rh dHVzIGNvZGVzIGZyb20gdW5kZXJseWluZyBmdW5jdGlvbnMuDQorKiovDQorU1RBVElDDQorRUZJ X1NUQVRVUw0KK0VGSUFQSQ0KK1JvdXRlQ29uZmlnICgNCisgIElOIENPTlNUICBFRklfSElJX0NP TkZJR19BQ0NFU1NfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gQ09OU1QgIEVGSV9TVFJJTkcgICAg ICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiwNCisgIE9VVCAgICAgICBFRklfU1RSSU5H ICAgICAgICAgICAgICAgICAgICAgICpQcm9ncmVzcw0KKykNCit7DQorICBNQUlOX0ZPUk1fU1RB VEUgTWFpbkZvcm1TdGF0ZTsNCisgIFVJTlROICAgICAgICAgICBCbG9ja1NpemU7DQorICBFRklf U1RBVFVTICAgICAgU3RhdHVzOw0KKw0KKyAgREVCVUcgKChFRklfRF9WRVJCT1NFLCAiJWE6IENv bmZpZ3VyYXRpb249XCIlc1wiXG4iLCBfX0ZVTkNUSU9OX18sDQorICAgIENvbmZpZ3VyYXRpb24p KTsNCisNCisgIC8vDQorICAvLyB0aGUgInJlYWQiIHN0ZXAgaW4gUk1XDQorICAvLw0KKyAgU3Rh dHVzID0gUGxhdGZvcm1Db25maWdUb0Zvcm1TdGF0ZSAoJk1haW5Gb3JtU3RhdGUpOw0KKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAqUHJvZ3Jlc3MgPSBDb25maWd1cmF0aW9uOw0K KyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIHRoZSAibW9kaWZ5IiBz dGVwIGluIFJNVw0KKyAgLy8NCisgIC8vIChVcGRhdGUgdGhlIGJpbmFyeSBmb3JtIHN0YXRlLiBU aGlzIHVwZGF0ZSBtYXkgYmUgcGFydGlhbCwgd2hpY2ggaXMgd2h5IGluDQorICAvLyBnZW5lcmFs IHdlIG11c3QgcHJlLWxvYWQgdGhlIGZvcm0gc3RhdGUgZnJvbSB0aGUgcGxhdGZvcm0gY29uZmln LikNCisgIC8vDQorICBCbG9ja1NpemUgPSBzaXplb2YgTWFpbkZvcm1TdGF0ZTsNCisgIFN0YXR1 cyA9IGdIaWlDb25maWdSb3V0aW5nLT5Db25maWdUb0Jsb2NrIChnSGlpQ29uZmlnUm91dGluZywg Q29uZmlndXJhdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWT0lEICop ICZNYWluRm9ybVN0YXRlLCAmQmxvY2tTaXplLCBQcm9ncmVzcyk7DQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIlYTogQ29uZmlnVG9CbG9j aygpOiAlciwgUHJvZ3Jlc3M9XCIlc1wiXG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVz LA0KKyAgICAgIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpID8gTlVMTCA6ICpQcm9n cmVzcykpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIHRoZSAi d3JpdGUiIHN0ZXAgaW4gUk1XDQorICAvLw0KKyAgU3RhdHVzID0gRm9ybVN0YXRlVG9QbGF0Zm9y bUNvbmZpZyAoJk1haW5Gb3JtU3RhdGUpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAqUHJvZ3Jlc3MgPSBDb25maWd1cmF0aW9uOw0KKyAgfQ0KKyAgcmV0dXJuIFN0YXR1czsN Cit9DQorDQorDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0NhbGxiYWNrICgNCisg IElOICAgICBDT05TVCBFRklfSElJX0NPTkZJR19BQ0NFU1NfUFJPVE9DT0wgICAqVGhpcywNCisg IElOICAgICBFRklfQlJPV1NFUl9BQ1RJT04gICAgICAgICAgICAgICAgICAgICBBY3Rpb24sDQor ICBJTiAgICAgRUZJX1FVRVNUSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25J ZCwNCisgIElOICAgICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBl LA0KKyAgSU4gT1VUIEVGSV9JRlJfVFlQRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICpWYWx1 ZSwNCisgIE9VVCAgICBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVTVCAgICAgICAgICAgICAqQWN0 aW9uUmVxdWVzdA0KKyAgKQ0KK3sNCisgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiVhOiBBY3Rp b249MHglTHggUXVlc3Rpb25JZD0lZCBUeXBlPSVkXG4iLA0KKyAgICBfX0ZVTkNUSU9OX18sIChV SU5UNjQpIEFjdGlvbiwgUXVlc3Rpb25JZCwgVHlwZSkpOw0KKw0KKyAgaWYgKEFjdGlvbiAhPSBF RklfQlJPV1NFUl9BQ1RJT05fQ0hBTkdFRCkgew0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KKyAgfQ0KKw0KKyAgc3dpdGNoIChRdWVzdGlvbklkKSB7DQorICBjYXNlIFFVRVNUSU9OX1NB VkVfRVhJVDoNCisgICAgKkFjdGlvblJlcXVlc3QgPSBFRklfQlJPV1NFUl9BQ1RJT05fUkVRVUVT VF9GT1JNX1NVQk1JVF9FWElUOw0KKyAgICBicmVhazsNCisNCisgIGNhc2UgUVVFU1RJT05fRElT Q0FSRF9FWElUOg0KKyAgICAqQWN0aW9uUmVxdWVzdCA9IEVGSV9CUk9XU0VSX0FDVElPTl9SRVFV RVNUX0ZPUk1fRElTQ0FSRF9FWElUOw0KKyAgICBicmVhazsNCisNCisgIGRlZmF1bHQ6DQorICAg IGJyZWFrOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisNCisvKioN CisgIFF1ZXJ5IGFuZCBzYXZlIGFsbCByZXNvbHV0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIEdPUC4N CisNCisgIEBwYXJhbVtpbl0gIEdvcCAgICAgICAgICBUaGUgR3JhcGhpY3MgT3V0cHV0IFByb3Rv Y29sIGluc3RhbmNlIHRvIHF1ZXJ5Lg0KKw0KKyAgQHBhcmFtW291dF0gTnVtR29wTW9kZXMgIFRo ZSBudW1iZXIgb2YgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBHT1AuIE9uIG91dHB1dCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHBvc2l0aXZlLg0K Kw0KKyAgQHBhcmFtW291dF0gR29wTW9kZXMgICAgIE9uIG91dHB1dCwgYSBkeW5hbWljYWxseSBh bGxvY2F0ZWQgYXJyYXkgY29udGFpbmluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZSByZXNvbHV0aW9ucyByZXR1cm5lZCBieSB0aGUgR09QLiBUaGUgY2FsbGVyIGlzDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFycmF5IGFm dGVyIHVzZS4NCisNCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vIG1vZGVzIGZv dW5kLg0KKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbGVkIHRvIGFsbG9jYXRl IEdvcE1vZGVzLg0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMg ZnJvbSBHb3AtPlF1ZXJ5TW9kZSgpLg0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitF RklBUEkNCitRdWVyeUdvcE1vZGVzICgNCisgIElOICBFRklfR1JBUEhJQ1NfT1VUUFVUX1BST1RP Q09MICpHb3AsDQorICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqTnVtR29wTW9k ZXMsDQorICBPVVQgR09QX01PREUgICAgICAgICAgICAgICAgICAgICAqKkdvcE1vZGVzDQorICAp DQorew0KKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQorICBVSU5UMzIgICAgIE1vZGVOdW1iZXI7DQor DQorICBpZiAoR29wLT5Nb2RlLT5NYXhNb2RlID09IDApIHsNCisgICAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCisgIH0NCisgICpOdW1Hb3BNb2RlcyA9IEdvcC0+TW9kZS0+TWF4TW9kZTsNCisN CisgICpHb3BNb2RlcyA9IEFsbG9jYXRlUG9vbCAoR29wLT5Nb2RlLT5NYXhNb2RlICogc2l6ZW9m ICoqR29wTW9kZXMpOw0KKyAgaWYgKCpHb3BNb2RlcyA9PSBOVUxMKSB7DQorICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoTW9kZU51bWJlciA9IDA7IE1v ZGVOdW1iZXIgPCBHb3AtPk1vZGUtPk1heE1vZGU7ICsrTW9kZU51bWJlcikgew0KKyAgICBFRklf R1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JNQVRJT04gKkluZm87DQorICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplT2ZJbmZvOw0KKw0KKyAgICBTdGF0dXMgPSBH b3AtPlF1ZXJ5TW9kZSAoR29wLCBNb2RlTnVtYmVyLCAmU2l6ZU9mSW5mbywgJkluZm8pOw0KKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgZ290byBGcmVlR29wTW9kZXM7DQor ICAgIH0NCisNCisgICAgKCpHb3BNb2RlcylbTW9kZU51bWJlcl0uWCA9IEluZm8tPkhvcml6b250 YWxSZXNvbHV0aW9uOw0KKyAgICAoKkdvcE1vZGVzKVtNb2RlTnVtYmVyXS5ZID0gSW5mby0+VmVy dGljYWxSZXNvbHV0aW9uOw0KKyAgICBGcmVlUG9vbCAoSW5mbyk7DQorICB9DQorDQorICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQorDQorRnJlZUdvcE1vZGVzOg0KKyAgRnJlZVBvb2wgKCpHb3BNb2Rl cyk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisNCisvKioNCisgIENyZWF0ZSBhIHNl dCBvZiAib25lLW9mLW1hbnkiIChpZS4gImRyb3AgZG93biBsaXN0Iikgb3B0aW9uIElGUiBvcGNv ZGVzLA0KKyAgYmFzZWQgb24gYXZhaWxhYmxlIEdPUCByZXNvbHV0aW9ucywgdG8gYmUgcGxhY2Vk IHVuZGVyIGEgIm9uZS1vZi1tYW55IiAoaWUuDQorICAiZHJvcCBkb3duIGxpc3QiKSBvcGNvZGUu DQorDQorICBAcGFyYW1baW5dICBQYWNrYWdlTGlzdCAgIFRoZSBwYWNrYWdlIGxpc3Qgd2l0aCB0 aGUgZm9ybXNldCBhbmQgZm9ybSBmb3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp Y2ggdGhlIGRyb3AgZG93biBvcHRpb25zIGFyZSBwcm9kdWNlZC4gT3B0aW9uDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5hbWVzIGFyZSBhZGRlZCBhcyBuZXcgc3RyaW5ncyB0byBQYWNr YWdlTGlzdC4NCisNCisgIEBwYXJhbVtvdXRdIE9wQ29kZUJ1ZmZlciAgT24gb3V0cHV0LCBhIGR5 bmFtaWNhbGx5IGFsbG9jYXRlZCBvcGNvZGUgYnVmZmVyDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdpdGggZHJvcCBkb3duIGxpc3Qgb3B0aW9ucyBjb3JyZXNwb25kaW5nIHRvIEdPUA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucy4gVGhlIGNhbGxlciBpcyBy ZXNwb25zaWJsZSBmb3IgZnJlZWluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcENv ZGVCdWZmZXIgd2l0aCBIaWlGcmVlT3BDb2RlSGFuZGxlKCkgYWZ0ZXIgdXNlLg0KKw0KKyAgQHBh cmFtW2luXSAgTnVtR29wTW9kZXMgICBOdW1iZXIgb2YgZW50cmllcyBpbiBHb3BNb2Rlcy4NCisN CisgIEBwYXJhbVtpbl0gIEdvcE1vZGVzICAgICAgQXJyYXkgb2YgcmVzb2x1dGlvbnMgcmV0cmll dmVkIGZyb20gdGhlIEdPUC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0VTUyAgT3Bjb2RlcyBoYXZl IGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2R1Y2VkLg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICBT dGF0dXMgY29kZXMgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucy4gUGFja2FnZUxpc3QgbWF5DQor ICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBleHRlbmRlZCB3aXRoIG5ldyBzdHJpbmdz LiBPcENvZGVCdWZmZXIgaXMNCisgICAgICAgICAgICAgICAgICAgICAgdW5jaGFuZ2VkLg0KKyoq Lw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitDcmVhdGVSZXNvbHV0aW9uT3B0aW9u cyAoDQorICBJTiAgRUZJX0hJSV9IQU5ETEUgICpQYWNrYWdlTGlzdCwNCisgIE9VVCBWT0lEICAg ICAgICAgICAgKipPcENvZGVCdWZmZXIsDQorICBJTiAgVUlOVE4gICAgICAgICAgIE51bUdvcE1v ZGVzLA0KKyAgSU4gIEdPUF9NT0RFICAgICAgICAqR29wTW9kZXMNCisgICkNCit7DQorICBFRklf U1RBVFVTIFN0YXR1czsNCisgIFZPSUQgICAgICAgKk91dHB1dEJ1ZmZlcjsNCisgIFVJTlROICAg ICAgTW9kZU51bWJlcjsNCisNCisgIE91dHB1dEJ1ZmZlciA9IEhpaUFsbG9jYXRlT3BDb2RlSGFu ZGxlICgpOw0KKyAgaWYgKE91dHB1dEJ1ZmZlciA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklf T1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIGZvciAoTW9kZU51bWJlciA9IDA7IE1vZGVO dW1iZXIgPCBOdW1Hb3BNb2RlczsgKytNb2RlTnVtYmVyKSB7DQorICAgIENIQVIxNiAgICAgICAg RGVzY1tNQVhTSVpFX1JFU19DVVJdOw0KKyAgICBFRklfU1RSSU5HX0lEIE5ld1N0cmluZzsNCisg ICAgVk9JRCAgICAgICAgICAqT3BDb2RlOw0KKw0KKyAgICBVbmljb2RlU1ByaW50QXNjaWlGb3Jt YXQgKERlc2MsIHNpemVvZiBEZXNjLCAiJUxkeCVMZCIsDQorICAgICAgKElOVDY0KSBHb3BNb2Rl c1tNb2RlTnVtYmVyXS5YLCAoSU5UNjQpIEdvcE1vZGVzW01vZGVOdW1iZXJdLlkpOw0KKyAgICBO ZXdTdHJpbmcgPSBIaWlTZXRTdHJpbmcgKFBhY2thZ2VMaXN0LCAwIC8qIG5ldyBzdHJpbmcgKi8s IERlc2MsDQorICAgICAgICAgICAgICAgICAgTlVMTCAvKiBmb3IgYWxsIGxhbmd1YWdlcyAqLyk7 DQorICAgIGlmIChOZXdTdHJpbmcgPT0gMCkgew0KKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KKyAgICAgIGdvdG8gRnJlZU91dHB1dEJ1ZmZlcjsNCisgICAgfQ0KKyAgICBP cENvZGUgPSBIaWlDcmVhdGVPbmVPZk9wdGlvbk9wQ29kZSAoT3V0cHV0QnVmZmVyLCBOZXdTdHJp bmcsDQorICAgICAgICAgICAgICAgMCAvKiBGbGFncyAqLywgRUZJX0lGUl9OVU1FUklDX1NJWkVf NCwgTW9kZU51bWJlcik7DQorICAgIGlmIChPcENvZGUgPT0gTlVMTCkgew0KKyAgICAgIFN0YXR1 cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICAgIGdvdG8gRnJlZU91dHB1dEJ1ZmZlcjsN CisgICAgfQ0KKyAgfQ0KKw0KKyAgKk9wQ29kZUJ1ZmZlciA9IE91dHB1dEJ1ZmZlcjsNCisgIHJl dHVybiBFRklfU1VDQ0VTUzsNCisNCitGcmVlT3V0cHV0QnVmZmVyOg0KKyAgSGlpRnJlZU9wQ29k ZUhhbmRsZSAoT3V0cHV0QnVmZmVyKTsNCisNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKw0K Ky8qKg0KKyAgUG9wdWxhdGUgdGhlIGZvcm0gaWRlbnRpZmllZCBieSB0aGUgKFBhY2thZ2VMaXN0 LCBGb3JtU2V0R3VpZCwgRm9ybUlkKQ0KKyAgdHJpcGxldC4NCisNCisgIFRoZSBkcm9wIGRvd24g bGlzdCBvZiB2aWRlbyByZXNvbHV0aW9ucyBpcyBnZW5lcmF0ZWQgZnJvbSAoTnVtR29wTW9kZXMs DQorICBHb3BNb2RlcykuDQorDQorICBAcmV0dmFsIEVGSV9TVUNFU1MgIEZvcm0gc3VjY2Vzc2Z1 bGx5IHVwZGF0ZWQuDQorICBAcmV0dXJuICAgICAgICAgICAgIFN0YXR1cyBjb2RlcyBmcm9tIHVu ZGVybHlpbmcgZnVuY3Rpb25zLg0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitFRklB UEkNCitQb3B1bGF0ZUZvcm0gKA0KKyAgSU4gIEVGSV9ISUlfSEFORExFICAqUGFja2FnZUxpc3Qs DQorICBJTiAgRUZJX0dVSUQgICAgICAgICpGb3JtU2V0R3VpZCwNCisgIElOICBFRklfRk9STV9J RCAgICAgRm9ybUlkLA0KKyAgSU4gIFVJTlROICAgICAgICAgICBOdW1Hb3BNb2RlcywNCisgIElO ICBHT1BfTU9ERSAgICAgICAgKkdvcE1vZGVzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAg ICAgIFN0YXR1czsNCisgIFZPSUQgICAgICAgICAgICAgICAqT3BDb2RlQnVmZmVyOw0KKyAgVk9J RCAgICAgICAgICAgICAgICpPcENvZGU7DQorICBFRklfSUZSX0dVSURfTEFCRUwgKkFuY2hvcjsN CisgIFZPSUQgICAgICAgICAgICAgICAqT3BDb2RlQnVmZmVyMjsNCisNCisgIE9wQ29kZUJ1ZmZl cjIgPSBOVUxMOw0KKw0KKyAgLy8NCisgIC8vIDEuIEFsbG9jYXRlIGFuIGVtcHR5IG9wY29kZSBi dWZmZXIuDQorICAvLw0KKyAgT3BDb2RlQnVmZmVyID0gSGlpQWxsb2NhdGVPcENvZGVIYW5kbGUg KCk7DQorICBpZiAoT3BDb2RlQnVmZmVyID09IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIDIuIENyZWF0ZSBhIGxhYmVsIG9w Y29kZSAod2hpY2ggaXMgYSBUaWFubyBleHRlbnNpb24pIGluc2lkZSB0aGUgYnVmZmVyLg0KKyAg Ly8gVGhlIGxhYmVsJ3MgbnVtYmVyIG11c3QgbWF0Y2ggdGhlICJhbmNob3IiIGxhYmVsIGluIHRo ZSBmb3JtLg0KKyAgLy8NCisgIE9wQ29kZSA9IEhpaUNyZWF0ZUd1aWRPcENvZGUgKE9wQ29kZUJ1 ZmZlciwgJmdFZmlJZnJUaWFub0d1aWQsDQorICAgICAgICAgICAgIE5VTEwgLyogb3B0aW9uYWwg Y29weSBvcmlnaW4gKi8sIHNpemVvZiAqQW5jaG9yKTsNCisgIGlmIChPcENvZGUgPT0gTlVMTCkg ew0KKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBGcmVlT3BD b2RlQnVmZmVyOw0KKyAgfQ0KKyAgQW5jaG9yICAgICAgICAgICAgICAgPSBPcENvZGU7DQorICBB bmNob3ItPkV4dGVuZE9wQ29kZSA9IEVGSV9JRlJfRVhURU5EX09QX0xBQkVMOw0KKyAgQW5jaG9y LT5OdW1iZXIgICAgICAgPSBMQUJFTF9SRVNfTkVYVDsNCisNCisgIC8vDQorICAvLyAzLiBDcmVh dGUgdGhlIG9wY29kZXMgaW5zaWRlIHRoZSBidWZmZXIgdGhhdCBhcmUgdG8gYmUgaW5zZXJ0ZWQg aW50byB0aGUNCisgIC8vIGZvcm0uDQorICAvLw0KKyAgLy8gMy4xLiBHZXQgYSBsaXN0IG9mIHJl c29sdXRpb25zLg0KKyAgLy8NCisgIFN0YXR1cyA9IENyZWF0ZVJlc29sdXRpb25PcHRpb25zIChQ YWNrYWdlTGlzdCwgJk9wQ29kZUJ1ZmZlcjIsDQorICAgICAgICAgICAgIE51bUdvcE1vZGVzLCBH b3BNb2Rlcyk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdvdG8gRnJlZU9w Q29kZUJ1ZmZlcjsNCisgIH0NCisNCisgIC8vDQorICAvLyAzLjIuIENyZWF0ZSBhIG9uZS1vZi1t YW55IHF1ZXN0aW9uIHdpdGggdGhlIGFib3ZlIG9wdGlvbnMuDQorICAvLw0KKyAgT3BDb2RlID0g SGlpQ3JlYXRlT25lT2ZPcENvZGUgKA0KKyAgICAgICAgICAgICBPcENvZGVCdWZmZXIsICAgICAg ICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIG9wY29kZSBpbnNpZGUgdGhpcw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBvcGNvZGUgYnVm ZmVyLA0KKyAgICAgICAgICAgICBRVUVTVElPTl9SRVNfTkVYVCwgICAgICAgICAgICAgICAgICAg Ly8gSUQgb2YgcXVlc3Rpb24sDQorICAgICAgICAgICAgIEZPUk1TVEFURUlEX01BSU5fRk9STSwg ICAgICAgICAgICAgICAvLyBpZGVudGlmaWVzIGZvcm0gc3RhdGUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3RvcmFnZSwNCisgICAgICAg ICAgICAgKFVJTlQxNikgT0ZGU0VUX09GIChNQUlOX0ZPUk1fU1RBVEUsIC8vIHZhbHVlIG9mIHF1 ZXN0aW9uIHN0b3JlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE5leHRQcmVmZXJyZWRSZXNv bHV0aW9uKSwgLy8gICBhdCB0aGlzIG9mZnNldCwNCisgICAgICAgICAgICAgU1RSSU5HX1RPS0VO IChTVFJfUkVTX05FWFQpLCAgICAgICAgIC8vIFByb21wdCwNCisgICAgICAgICAgICAgU1RSSU5H X1RPS0VOIChTVFJfUkVTX05FWFRfSEVMUCksICAgIC8vIEhlbHAsDQorICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWVzdGlvbkZsYWdzLA0KKyAg ICAgICAgICAgICBFRklfSUZSX05VTUVSSUNfU0laRV80LCAgICAgICAgICAgICAgLy8gc2VlIHNp emVvZg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly8gICBOZXh0UHJlZmVycmVkUmVzb2x1dGlvbiwNCisgICAgICAgICAgICAgT3BDb2RlQnVmZmVy MiwgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciB3aXRoIHBvc3NpYmxlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNob2ljZXMs DQorICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE RUZBVUxUIG9wY29kZXMNCisgICAgICAgICAgICAgKTsNCisgIGlmIChPcENvZGUgPT0gTlVMTCkg ew0KKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgZ290byBGcmVlT3BD b2RlQnVmZmVyMjsNCisgIH0NCisNCisgIC8vDQorICAvLyA0LiBVcGRhdGUgdGhlIGZvcm0gd2l0 aCB0aGUgb3Bjb2RlIGJ1ZmZlci4NCisgIC8vDQorICBTdGF0dXMgPSBIaWlVcGRhdGVGb3JtIChQ YWNrYWdlTGlzdCwgRm9ybVNldEd1aWQsIEZvcm1JZCwNCisgICAgICAgICAgICAgT3BDb2RlQnVm ZmVyLCAvLyBidWZmZXIgd2l0aCBoZWFkIGFuY2hvciwgYW5kIG5ldyBjb250ZW50cyB0byBiZQ0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydGVkIGF0IGl0DQorICAgICAgICAg ICAgIE5VTEwgICAgICAgICAgLy8gYnVmZmVyIHdpdGggdGFpbCBhbmNob3IsIGZvciBkZWxldGlu ZyBvbGQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cyB1cCB0byBpdA0K KyAgICAgICAgICAgICApOw0KKw0KK0ZyZWVPcENvZGVCdWZmZXIyOg0KKyAgSGlpRnJlZU9wQ29k ZUhhbmRsZSAoT3BDb2RlQnVmZmVyMik7DQorDQorRnJlZU9wQ29kZUJ1ZmZlcjoNCisgIEhpaUZy ZWVPcENvZGVIYW5kbGUgKE9wQ29kZUJ1ZmZlcik7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30N CisNCisNCisvKioNCisgIExvYWQgYW5kIGV4ZWN1dGUgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRp b24uDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBs b2FkZWQgYW5kIGV4ZWN1dGVkLg0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1cyBjb2RlcyBmcm9tIFBsYXRmb3JtQ29uZmlnTG9hZCgpLg0KKyoqLw0KK1NUQVRJQw0KK0VG SV9TVEFUVVMNCitFRklBUEkNCitFeGVjdXRlUGxhdGZvcm1Db25maWcgKA0KKyAgVk9JRA0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQorICBQTEFURk9STV9DT05GSUcgUGxh dGZvcm1Db25maWc7DQorICBVSU5UNjQgICAgICAgICAgT3B0aW9uYWxFbGVtZW50czsNCisNCisg IFN0YXR1cyA9IFBsYXRmb3JtQ29uZmlnTG9hZCAoJlBsYXRmb3JtQ29uZmlnLCAmT3B0aW9uYWxF bGVtZW50cyk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoKFN0 YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSA/IEVGSV9EX1ZFUkJPU0UgOiBFRklfRF9FUlJPUiwNCisg ICAgICAiJWE6IGZhaWxlZCB0byBsb2FkIHBsYXRmb3JtIGNvbmZpZzogJXJcbiIsIF9fRlVOQ1RJ T05fXywgU3RhdHVzKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBpZiAoT3B0 aW9uYWxFbGVtZW50cyAmIFBMQVRGT1JNX0NPTkZJR19GX0dSQVBISUNTX1JFU09MVVRJT04pIHsN CisgICAgLy8NCisgICAgLy8gUGFzcyB0aGUgcHJlZmVycmVkIHJlc29sdXRpb24gdG8gR3JhcGhp Y3NDb25zb2xlRHhlIHZpYSBkeW5hbWljIFBDRHMuDQorICAgIC8vDQorICAgIFBjZFNldDMyIChQ Y2RWaWRlb0hvcml6b250YWxSZXNvbHV0aW9uLA0KKyAgICAgIFBsYXRmb3JtQ29uZmlnLkhvcml6 b250YWxSZXNvbHV0aW9uKTsNCisgICAgUGNkU2V0MzIgKFBjZFZpZGVvVmVydGljYWxSZXNvbHV0 aW9uLA0KKyAgICAgIFBsYXRmb3JtQ29uZmlnLlZlcnRpY2FsUmVzb2x1dGlvbik7DQorICB9DQor DQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgTm90aWZpY2F0aW9u IGNhbGxiYWNrIGZvciBHT1AgaW50ZXJmYWNlIGluc3RhbGxhdGlvbi4NCisNCisgIEBwYXJhbVtp bl0gRXZlbnQgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGlu dm9rZWQuDQorDQorICBAcGFyYW1baW5dIENvbnRleHQgIFRoZSBwb2ludGVyIHRvIHRoZSBub3Rp ZmljYXRpb24gZnVuY3Rpb24ncyBjb250ZXh0LCB3aGljaA0KKyAgICAgICAgICAgICAgICAgICAg ICBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuDQorKiovDQorU1RBVElDDQorVk9JRA0KK0VG SUFQSQ0KK0dvcEluc3RhbGxlZCAoDQorICBJTiBFRklfRVZFTlQgRXZlbnQsDQorICBJTiBWT0lE ICAgICAgKkNvbnRleHQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg IFN0YXR1czsNCisgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgKkdvcDsNCisNCisgIEFT U0VSVCAoRXZlbnQgPT0gbUdvcEV2ZW50KTsNCisNCisgIC8vDQorICAvLyBDaGVjayBmdXJ0aGVy IEdPUHMuDQorICAvLw0KKyAgZm9yICg7Oykgew0KKyAgICBtTnVtR29wTW9kZXMgPSAwOw0KKyAg ICBtR29wTW9kZXMgPSBOVUxMOw0KKw0KKyAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29s ICgmZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLCBtR29wVHJhY2tlciwNCisgICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSAmR29wKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTdGF0dXMgPSBRdWVyeUdvcE1v ZGVzIChHb3AsICZtTnVtR29wTW9kZXMsICZtR29wTW9kZXMpOw0KKyAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgU3RhdHVzID0g UG9wdWxhdGVGb3JtIChtSW5zdGFsbGVkUGFja2FnZXMsICZnU2ltaWNzQm9hcmRDb25maWdHdWlk LA0KKyAgICAgICAgICAgICAgIEZPUk1JRF9NQUlOX0ZPUk0sIG1OdW1Hb3BNb2RlcywgbUdvcE1v ZGVzKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIEZyZWVQb29sICht R29wTW9kZXMpOw0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIGJyZWFrOw0KKyAg fQ0KKw0KKyAgLy8NCisgIC8vIFN1Y2Nlc3MgLS0gc28gdW5pbnN0YWxsIHRoaXMgY2FsbGJhY2su IENsb3NpbmcgdGhlIGV2ZW50IHJlbW92ZXMgYWxsDQorICAvLyBwZW5kaW5nIG5vdGlmaWNhdGlv bnMgYW5kIGFsbCBwcm90b2NvbCByZWdpc3RyYXRpb25zLg0KKyAgLy8NCisgIFN0YXR1cyA9IGdC Uy0+Q2xvc2VFdmVudCAobUdvcEV2ZW50KTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQorICBtR29wRXZlbnQgPSBOVUxMOw0KKyAgbUdvcFRyYWNrZXIgPSBOVUxMOw0KK30NCisNCisN CisvKioNCisgIEVudHJ5IHBvaW50IGZvciB0aGlzIGRyaXZlci4NCisNCisgIEBwYXJhbVtpbl0g SW1hZ2VIYW5kbGUgIEltYWdlIGhhbmRsZSBvZiB0aGlzIGRyaXZlci4NCisgIEBwYXJhbVtpbl0g U3lzdGVtVGFibGUgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQorDQorICBAcmV0dmFsIEVGSV9T VUNFU1MgICAgICAgICAgICBEcml2ZXIgaGFzIGxvYWRlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsZWQgdG8gaW5zdGFsbCBISUkgcGFja2FnZXMu DQorICBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyBmcm9tIGxvd2Vy IGxldmVsIGZ1bmN0aW9ucy4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxhdGZv cm1Jbml0ICgNCisgIElOICBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCisgIElOICBF RklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCisgICkNCit7DQorICBFRklfU1RBVFVTIFN0 YXR1czsNCisNCisgIEV4ZWN1dGVQbGF0Zm9ybUNvbmZpZyAoKTsNCisNCisgIG1Db25maWdBY2Nl c3MuRXh0cmFjdENvbmZpZyA9ICZFeHRyYWN0Q29uZmlnOw0KKyAgbUNvbmZpZ0FjY2Vzcy5Sb3V0 ZUNvbmZpZyAgID0gJlJvdXRlQ29uZmlnOw0KKyAgbUNvbmZpZ0FjY2Vzcy5DYWxsYmFjayAgICAg ID0gJkNhbGxiYWNrOw0KKw0KKyAgLy8NCisgIC8vIERlY2xhcmUgb3Vyc2VsdmVzIHN1aXRhYmxl IGZvciBISUkgY29tbXVuaWNhdGlvbi4NCisgIC8vDQorICBTdGF0dXMgPSBnQlMtPkluc3RhbGxN dWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoJkltYWdlSGFuZGxlLA0KKyAgICAgICAgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBhdGgsDQor ICAgICAgICAgICAgICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29u ZmlnQWNjZXNzLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwpOw0KKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIFB1 Ymxpc2ggdGhlIEhJSSBwYWNrYWdlIGxpc3QgdG8gSElJIERhdGFiYXNlLg0KKyAgLy8NCisgIG1J bnN0YWxsZWRQYWNrYWdlcyA9IEhpaUFkZFBhY2thZ2VzICgNCisgICAgICAgICAgICAgICAgICAg ICAgICAgJmdFZmlDYWxsZXJJZEd1aWQsICAvLyBQYWNrYWdlTGlzdEd1aWQNCisgICAgICAgICAg ICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUsICAgICAgICAvLyBhc3NvY2lhdGVkIERldmljZUhh bmRsZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBTaW1pY3NEeGVTdHJpbmdzLCAgIC8vIDFz dCBwYWNrYWdlDQorICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtRm9ybXNCaW4sICAg Ly8gMm5kIHBhY2thZ2UNCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAg ICAgICAvLyB0ZXJtaW5hdG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAo bUluc3RhbGxlZFBhY2thZ2VzID09IE5VTEwpIHsNCisgICAgU3RhdHVzID0gRUZJX09VVF9PRl9S RVNPVVJDRVM7DQorICAgIGdvdG8gVW5pbnN0YWxsUHJvdG9jb2xzOw0KKyAgfQ0KKw0KKyAgU3Rh dHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoRVZUX05PVElGWV9TSUdOQUwsIFRQTF9DQUxMQkFDSywg JkdvcEluc3RhbGxlZCwNCisgICAgICAgICAgICAgICAgICBOVUxMIC8qIENvbnRleHQgKi8sICZt R29wRXZlbnQpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBnb3RvIFJlbW92 ZVBhY2thZ2VzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5SZWdpc3RlclByb3RvY29sTm90 aWZ5ICgmZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAg IG1Hb3BFdmVudCwgJm1Hb3BUcmFja2VyKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgZ290byBDbG9zZUdvcEV2ZW50Ow0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIENoZWNrIGFs cmVhZHkgaW5zdGFsbGVkIEdPUHMuDQorICAvLw0KKyAgU3RhdHVzID0gZ0JTLT5TaWduYWxFdmVu dCAobUdvcEV2ZW50KTsNCisgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQorDQorICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQorDQorQ2xvc2VHb3BFdmVudDoNCisgIGdCUy0+Q2xvc2VFdmVudCAo bUdvcEV2ZW50KTsNCisNCitSZW1vdmVQYWNrYWdlczoNCisgIEhpaVJlbW92ZVBhY2thZ2VzICht SW5zdGFsbGVkUGFja2FnZXMpOw0KKw0KK1VuaW5zdGFsbFByb3RvY29sczoNCisgIGdCUy0+VW5p bnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKEltYWdlSGFuZGxlLA0KKyAgICAgICAg ICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBhdGgsDQorICAg ICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29uZmlnQWNjZXNzLA0K KyAgICAgICAgIE5VTEwpOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICBVbmxv YWQgdGhlIGRyaXZlci4NCisNCisgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICBIYW5kbGUgdGhh dCBpZGVudGlmaWVzIHRoZSBpbWFnZSB0byBldmljdC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NF U1MgIFRoZSBpbWFnZSBoYXMgYmVlbiB1bmxvYWRlZC4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJ QVBJDQorUGxhdGZvcm1VbmxvYWQgKA0KKyAgSU4gIEVGSV9IQU5ETEUgIEltYWdlSGFuZGxlDQor ICApDQorew0KKyAgaWYgKG1Hb3BFdmVudCA9PSBOVUxMKSB7DQorICAgIC8vDQorICAgIC8vIFRo ZSBHT1AgY2FsbGJhY2sgcmFuIHN1Y2Nlc3NmdWxseSBhbmQgdW5yZWdpc3RlcmVkIGl0c2VsZi4g UmVsZWFzZSB0aGUNCisgICAgLy8gcmVzb3VyY2VzIGFsbG9jYXRlZCB0aGVyZS4NCisgICAgLy8N CisgICAgQVNTRVJUIChtR29wTW9kZXMgIT0gTlVMTCk7DQorICAgIEZyZWVQb29sIChtR29wTW9k ZXMpOw0KKyAgfSBlbHNlIHsNCisgICAgLy8NCisgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8g dW5yZWdpc3RlciB0aGUgY2FsbGJhY2suDQorICAgIC8vDQorICAgIEFTU0VSVCAobUdvcE1vZGVz ID09IE5VTEwpOw0KKyAgICBnQlMtPkNsb3NlRXZlbnQgKG1Hb3BFdmVudCk7DQorICB9DQorDQor ICAvLw0KKyAgLy8gUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSBlbnRyeSBwb2lu dC4NCisgIC8vDQorICBIaWlSZW1vdmVQYWNrYWdlcyAobUluc3RhbGxlZFBhY2thZ2VzKTsNCisg IGdCUy0+VW5pbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKEltYWdlSGFuZGxlLA0K KyAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwgICAgICAmbVBrZ0RldmljZVBh dGgsDQorICAgICAgICAgJmdFZmlIaWlDb25maWdBY2Nlc3NQcm90b2NvbEd1aWQsICZtQ29uZmln QWNjZXNzLA0KKyAgICAgICAgIE5VTEwpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCmRp ZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1Bs YXRmb3JtQ29uZmlnLmMgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNz RHhlL1BsYXRmb3JtQ29uZmlnLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi4wOTkyOWU4MzBhDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1p Y3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtQ29uZmlnLmMNCkBAIC0wLDAgKzEsMTI0 IEBADQorLyoqIEBmaWxlDQorICBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igc2VyaWFsaXppbmcgKHBl cnNpc3RlbnRseSBzdG9yaW5nKSBhbmQgZGVzZXJpYWxpemluZw0KKyAgU0lNSUNTIFFTUCdzIHBs YXRmb3JtIGNvbmZpZ3VyYXRpb24uDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQs IEluYy4NCisgIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+ DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxH dWlkL1NpbWljc0JvYXJkQ29uZmlnLmg+DQorDQorI2luY2x1ZGUgIlBsYXRmb3JtQ29uZmlnLmgi DQorDQorLy8NCisvLyBOYW1lIG9mIHRoZSBVRUZJIHZhcmlhYmxlIHRoYXQgd2UgdXNlIGZvciBw ZXJzaXN0ZW50IHN0b3JhZ2UuDQorLy8NCitTVEFUSUMgQ0hBUjE2IG1WYXJpYWJsZU5hbWVbXSA9 IEwiUGxhdGZvcm1Db25maWciOw0KKw0KKw0KKy8qKg0KKyAgU2VyaWFsaXplIGFuZCBwZXJzaXN0 ZW50bHkgc2F2ZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLg0KKw0KKyAgQHBhcmFtW2luXSBQbGF0 Zm9ybUNvbmZpZyAgVGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gdG8gc2VyaWFsaXplIGFuZCBz YXZlLg0KKw0KKyAgQHJldHVybiAgU3RhdHVzIGNvZGVzIHJldHVybmVkIGJ5IGdSVC0+U2V0VmFy aWFibGUoKS4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxhdGZvcm1Db25maWdTYXZl ICgNCisgIElOIFBMQVRGT1JNX0NPTkZJRyAqUGxhdGZvcm1Db25maWcNCisgICkNCit7DQorICBF RklfU1RBVFVTIFN0YXR1czsNCisNCisgIC8vDQorICAvLyBXZSBjb3VsZCBpbXBsZW1lbnQgYW55 IGtpbmQgb2YgdHJhbnNsYXRpb24gaGVyZSwgYXMgcGFydCBvZiBzZXJpYWxpemF0aW9uLg0KKyAg Ly8gRm9yIGV4YW1wbGUsIHdlIGNvdWxkIGV4cG9zZSB0aGUgcGxhdGZvcm0gY29uZmlndXJhdGlv biBpbiBzZXBhcmF0ZQ0KKyAgLy8gdmFyaWFibGVzIHdpdGggaHVtYW4tcmVhZGFibGUgY29udGVu dHMsIGFsbG93aW5nIG90aGVyIHRvb2xzIHRvIGFjY2Vzcw0KKyAgLy8gdGhlbSBtb3JlIGVhc2ls eS4gRm9yIG5vdywganVzdCBzYXZlIGEgYmluYXJ5IGR1bXAuDQorICAvLw0KKyAgU3RhdHVzID0g Z1JULT5TZXRWYXJpYWJsZSAobVZhcmlhYmxlTmFtZSwgJmdTaW1pY3NCb2FyZENvbmZpZ0d1aWQs DQorICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX05PTl9WT0xBVElMRSB8IEVGSV9WQVJJ QUJMRV9CT09UU0VSVklDRV9BQ0NFU1MgfA0KKyAgICAgICAgICAgICAgICAgICAgRUZJX1ZBUklB QkxFX1JVTlRJTUVfQUNDRVNTLA0KKyAgICAgICAgICAgICAgICAgIHNpemVvZiAqUGxhdGZvcm1D b25maWcsIFBsYXRmb3JtQ29uZmlnKTsNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKw0KKy8q Kg0KKyAgTG9hZCBhbmQgZGVzZXJpYWxpemUgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4NCisNCisg IFdoZW4gdGhlIGZ1bmN0aW9uIGZhaWxzLCBvdXRwdXQgcGFyYW1ldGVycyBhcmUgaW5kZXRlcm1p bmF0ZS4NCisNCisgIEBwYXJhbVtvdXRdIFBsYXRmb3JtQ29uZmlnICAgIFRoZSBwbGF0Zm9ybSBj b25maWd1cmF0aW9uIHRvIHJlY2VpdmUgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsb2FkZWQgZGF0YS4NCisNCisgIEBwYXJhbVtvdXRdIE9wdGlvbmFsRWxlbWVudHMgIFRo aXMgYml0bWFwIGRlc2NyaWJlcyB0aGUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMgdGhhdCBoYXZlIGJl ZW4gbG9hZGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExBVEZPUk1fQ09O RklHX0ZfRE9XTkdSQURFIG1lYW5zIHRoYXQgc29tZQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5rbm93biBlbGVtZW50cywgcHJlc2VudCBpbiB0aGUgd2lyZSBmb3JtYXQsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gaWdub3JlZC4NCisNCisg IEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgTG9hZGluZyAmIGRlc2VyaWFsaXphdGlvbiBz dWNjZXNzZnVsLg0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyBy ZXR1cm5lZCBieSBHZXRWYXJpYWJsZTIoKS4NCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQor UGxhdGZvcm1Db25maWdMb2FkICgNCisgIE9VVCBQTEFURk9STV9DT05GSUcgKlBsYXRmb3JtQ29u ZmlnLA0KKyAgT1VUIFVJTlQ2NCAgICAgICAgICAqT3B0aW9uYWxFbGVtZW50cw0KKyAgKQ0KK3sN CisgIFZPSUQgICAgICAgKkRhdGE7DQorICBVSU5UTiAgICAgIERhdGFTaXplOw0KKyAgRUZJX1NU QVRVUyBTdGF0dXM7DQorDQorICAvLw0KKyAgLy8gQW55IHRyYW5zbGF0aW9uIGRvbmUgaW4gUGxh dGZvcm1Db25maWdTYXZlKCkgd291bGQgaGF2ZSB0byBiZSBtaXJyb3JlZA0KKyAgLy8gaGVyZS4g Rm9yIG5vdywganVzdCBsb2FkIHRoZSBiaW5hcnkgZHVtcC4NCisgIC8vDQorICAvLyBWZXJzaW9u aW5nIG9mIHRoZSBiaW5hcnkgd2lyZSBmb3JtYXQgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gc2l6 ZQ0KKyAgLy8gKG9ubHkgaW5jcmVtZW50YWwgY2hhbmdlcywgaWUuIG5ldyBmaWVsZHMpLCBhbmQg b24gR1VJRC4NCisgIC8vIChJbmNvbXBhdGlibGUgY2hhbmdlcyByZXF1aXJlIGEgR1VJRCBjaGFu Z2UuKQ0KKyAgLy8NCisgIFN0YXR1cyA9IEdldFZhcmlhYmxlMiAobVZhcmlhYmxlTmFtZSwgJmdT aW1pY3NCb2FyZENvbmZpZ0d1aWQsICZEYXRhLA0KKyAgICAgICAgICAgICAmRGF0YVNpemUpOw0K KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0K Kw0KKyAgKk9wdGlvbmFsRWxlbWVudHMgPSAwOw0KKyAgaWYgKERhdGFTaXplID4gc2l6ZW9mICpQ bGF0Zm9ybUNvbmZpZykgew0KKyAgICAvLw0KKyAgICAvLyBIYW5kbGUgZmlybXdhcmUgZG93bmdy YWRlIC0tIGtlZXAgb25seSBsZWFkaW5nIHBhcnQuDQorICAgIC8vDQorICAgIENvcHlNZW0gKFBs YXRmb3JtQ29uZmlnLCBEYXRhLCBzaXplb2YgKlBsYXRmb3JtQ29uZmlnKTsNCisgICAgKk9wdGlv bmFsRWxlbWVudHMgfD0gUExBVEZPUk1fQ09ORklHX0ZfRE9XTkdSQURFOw0KKyAgfSBlbHNlIHsN CisgICAgQ29weU1lbSAoUGxhdGZvcm1Db25maWcsIERhdGEsIERhdGFTaXplKTsNCisNCisgICAg Ly8NCisgICAgLy8gSGFuZGxlIGZpcm13YXJlIHVwZ3JhZGUgLS0gemVybyBvdXQgbWlzc2luZyBm aWVsZHMuDQorICAgIC8vDQorICAgIFplcm9NZW0gKChVSU5UOCAqKVBsYXRmb3JtQ29uZmlnICsg RGF0YVNpemUsDQorICAgICAgc2l6ZW9mICpQbGF0Zm9ybUNvbmZpZyAtIERhdGFTaXplKTsNCisg IH0NCisNCisgIC8vDQorICAvLyBCYXNlZCBvbiBEYXRhU2l6ZSwgcmVwb3J0IHRoZSBvcHRpb25h bCBmZWF0dXJlcyB0aGF0IHdlIHJlY29nbml6ZS4NCisgIC8vDQorICBpZiAoRGF0YVNpemUgPj0g KE9GRlNFVF9PRiAoUExBVEZPUk1fQ09ORklHLCBWZXJ0aWNhbFJlc29sdXRpb24pICsNCisgICAg ICAgICAgICAgICAgICAgc2l6ZW9mIFBsYXRmb3JtQ29uZmlnLT5WZXJ0aWNhbFJlc29sdXRpb24p KSB7DQorICAgICpPcHRpb25hbEVsZW1lbnRzIHw9IFBMQVRGT1JNX0NPTkZJR19GX0dSQVBISUNT X1JFU09MVVRJT047DQorICB9DQorDQorICBGcmVlUG9vbCAoRGF0YSk7DQorICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorfQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9TaW1pY3NQZWkvQ21vcy5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L1NpbWljc1BlaS9DbW9zLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw Li5iMzRiYTkyODNiDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Ntb3MuYw0KQEAgLTAsMCArMSw1NyBAQA0KKy8qKiBAZmls ZQ0KKyAgUEMvQVQgQ01PUyBhY2Nlc3Mgcm91dGluZXMNCisNCisgIENvcHlyaWdodCAoYykgMjAw NiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisN CisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQor DQorI2luY2x1ZGUgIkNtb3MuaCINCisjaW5jbHVkZSAiTGlicmFyeS9Jb0xpYi5oIg0KKw0KKy8q Kg0KKyAgUmVhZHMgOC1iaXRzIG9mIENNT1MgZGF0YS4NCisNCisgIFJlYWRzIHRoZSA4LWJpdHMg b2YgQ01PUyBkYXRhIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgSW5kZXguDQorICBUaGUg OC1iaXQgcmVhZCB2YWx1ZSBpcyByZXR1cm5lZC4NCisNCisgIEBwYXJhbSAgSW5kZXggIFRoZSBD TU9TIGxvY2F0aW9uIHRvIHJlYWQuDQorDQorICBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KKw0K KyoqLw0KK1VJTlQ4DQorRUZJQVBJDQorQ21vc1JlYWQ4ICgNCisgIElOICAgICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBJbmRleA0KKyAgKQ0KK3sNCisgIElvV3JpdGU4ICgweDcwLCAoVUlO VDgpIEluZGV4KTsNCisgIHJldHVybiBJb1JlYWQ4ICgweDcxKTsNCit9DQorDQorDQorLyoqDQor ICBXcml0ZXMgOC1iaXRzIG9mIENNT1MgZGF0YS4NCisNCisgIFdyaXRlcyA4LWJpdHMgb2YgQ01P UyBkYXRhIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgSW5kZXgNCisgIHdpdGggdGhlIHZh bHVlIHNwZWNpZmllZCBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4NCisNCisgIEBwYXJhbSAg SW5kZXggIFRoZSBDTU9TIGxvY2F0aW9uIHRvIHdyaXRlLg0KKyAgQHBhcmFtICBWYWx1ZSAgVGhl IHZhbHVlIHRvIHdyaXRlIHRvIENNT1MuDQorDQorICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVu IHRvIENNT1MuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitDbW9zV3JpdGU4ICgNCisgIElO ICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleCwNCisgIElOICAgICAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKQ0KK3sNCisgIElvV3JpdGU4ICgweDcwLCAo VUlOVDgpIEluZGV4KTsNCisgIElvV3JpdGU4ICgweDcxLCBWYWx1ZSk7DQorICByZXR1cm4gVmFs dWU7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9TaW1pY3NQZWkvRmVhdHVyZUNvbnRyb2wuYyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9TaW1pY3NQZWkvRmVhdHVyZUNvbnRyb2wuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAuLjlkMmZjNjVhMTQNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvRmVhdHVyZUNvbnRyb2wuYw0K QEAgLTAsMCArMSwxMTUgQEANCisvKiogQGZpbGUNCisgIEluc3RhbGwgYSBjYWxsYmFjayB3aGVu IG5lY2Vzc2FyeSBmb3Igc2V0dGluZyB0aGUgRmVhdHVyZSBDb250cm9sIE1TUiBvbiBhbGwNCisg IHByb2Nlc3NvcnMuDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTYsIFJlZCBIYXQsIEluYy4NCisg IENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCisqKi8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxM aWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+DQorI2luY2x1ZGUgPFBwaS9NcFNlcnZpY2VzLmg+DQor I2luY2x1ZGUgPFJlZ2lzdGVyL0ludGVsL01zci9Db3JlMk1zci5oPg0KKw0KKyNpbmNsdWRlICJQ bGF0Zm9ybS5oIg0KKw0KKy8vDQorLy8gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEZl YXR1cmUgQ29udHJvbCBNU1IsIHJldHJpZXZlZCBmcm9tIGZ3X2NmZy4NCisvLw0KK1NUQVRJQyBV SU5UNjQgbUZlYXR1cmVDb250cm9sVmFsdWUgPSAweDAwMDAwMDA1Ow0KKw0KKy8qKg0KKyAgV3Jp dGUgdGhlIEZlYXR1cmUgQ29udHJvbCBNU1Igb24gYW4gQXBwbGljYXRpb24gUHJvY2Vzc29yIG9y IHRoZSBCb290DQorICBQcm9jZXNzb3IuDQorDQorICBBbGwgQVBzIGV4ZWN1dGUgdGhpcyBmdW5j dGlvbiBpbiBwYXJhbGxlbC4gVGhlIEJTUCBleGVjdXRlcyB0aGUgZnVuY3Rpb24NCisgIHNlcGFy YXRlbHkuDQorDQorICBAcGFyYW1baW4sb3V0XSBXb3JrU3BhY2UgIFBvaW50ZXIgdG8gdGhlIGlu cHV0L291dHB1dCBhcmd1bWVudCB3b3Jrc3BhY2UNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2hhcmVkIGJ5IGFsbCBwcm9jZXNzb3JzLg0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitFRklB UEkNCitXcml0ZUZlYXR1cmVDb250cm9sICgNCisgIElOIE9VVCBWT0lEICpXb3JrU3BhY2UNCisg ICkNCit7DQorICBBc21Xcml0ZU1zcjY0IChNU1JfQ09SRTJfRkVBVFVSRV9DT05UUk9MLCBtRmVh dHVyZUNvbnRyb2xWYWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAgTm90aWZpY2F0aW9uIGZ1bmN0aW9u IGNhbGxlZCB3aGVuIEVGSV9QRUlfTVBfU0VSVklDRVNfUFBJIGJlY29tZXMgYXZhaWxhYmxlLg0K Kw0KKyAgQHBhcmFtW2luXSBQZWlTZXJ2aWNlcyAgICAgIEluZGlyZWN0IHJlZmVyZW5jZSB0byB0 aGUgUEVJIFNlcnZpY2VzIFRhYmxlLg0KKyAgQHBhcmFtW2luXSBOb3RpZnlEZXNjcmlwdG9yIEFk ZHJlc3Mgb2YgdGhlIG5vdGlmaWNhdGlvbiBkZXNjcmlwdG9yIGRhdGENCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuDQorICBAcGFyYW1baW5dIFBwaSAgICAgICAgICAg ICAgQWRkcmVzcyBvZiB0aGUgUFBJIHRoYXQgd2FzIGluc3RhbGxlZC4NCisNCisgIEByZXR1cm4g IFN0YXR1cyBvZiB0aGUgbm90aWZpY2F0aW9uLiBUaGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJv bSB0aGlzDQorICAgICAgICAgICBmdW5jdGlvbiBpcyBpZ25vcmVkLg0KKyoqLw0KK1NUQVRJQw0K K0VGSV9TVEFUVVMNCitFRklBUEkNCitPbk1wU2VydmljZXNBdmFpbGFibGUgKA0KKyAgSU4gRUZJ X1BFSV9TRVJWSUNFUyAgICAgICAgICAgKipQZWlTZXJ2aWNlcywNCisgIElOIEVGSV9QRUlfTk9U SUZZX0RFU0NSSVBUT1IgICpOb3RpZnlEZXNjcmlwdG9yLA0KKyAgSU4gVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgKlBwaQ0KKyAgKQ0KK3sNCisgIEVGSV9QRUlfTVBfU0VSVklDRVNfUFBJICpN cFNlcnZpY2VzOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KKw0KKyAgREVC VUcgKChFRklfRF9WRVJCT1NFLCAiJWE6ICVhXG4iLCBnRWZpQ2FsbGVyQmFzZU5hbWUsIF9fRlVO Q1RJT05fXykpOw0KKyAgLy8NCisgIC8vIFdyaXRlIHRoZSBNU1Igb24gYWxsIHRoZSBBUHMgaW4g cGFyYWxsZWwuDQorICAvLw0KKyAgTXBTZXJ2aWNlcyA9IFBwaTsNCisgIFN0YXR1cyA9IE1wU2Vy dmljZXMtPlN0YXJ0dXBBbGxBUHMgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoQ09OU1Qg RUZJX1BFSV9TRVJWSUNFUyAqKilQZWlTZXJ2aWNlcywNCisgICAgICAgICAgICAgICAgICAgICAg ICAgTXBTZXJ2aWNlcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVGZWF0dXJlQ29u dHJvbCwgLy8gUHJvY2VkdXJlDQorICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCAgICAg ICAgICAgICAgIC8vIFNpbmdsZVRocmVhZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0SW5NaWNyb1NlY29uZHM6IGluZi4NCisgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgLy8gUHJvY2VkdXJlQXJndW1l bnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1 cykgJiYgU3RhdHVzICE9IEVGSV9OT1RfU1RBUlRFRCkgew0KKyAgICBERUJVRyAoKEVGSV9EX0VS Uk9SLCAiJWE6IFN0YXJ0dXBBbGxBcHMoKTogJXJcbiIsIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7 DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLw0KKyAgLy8gTm93IHdyaXRlIHRo ZSBNU1Igb24gdGhlIEJTUCB0b28uDQorICAvLw0KKyAgV3JpdGVGZWF0dXJlQ29udHJvbCAoTlVM TCk7DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8vDQorLy8gTm90aWZpY2F0 aW9uIG9iamVjdCBmb3IgcmVnaXN0ZXJpbmcgdGhlIGNhbGxiYWNrLCBmb3Igd2hlbg0KKy8vIEVG SV9QRUlfTVBfU0VSVklDRVNfUFBJIGJlY29tZXMgYXZhaWxhYmxlLg0KKy8vDQorU1RBVElDIENP TlNUIEVGSV9QRUlfTk9USUZZX0RFU0NSSVBUT1IgbU1wU2VydmljZXNOb3RpZnkgPSB7DQorICBF RklfUEVJX1BQSV9ERVNDUklQVE9SX05PVElGWV9DQUxMQkFDSyB8IC8vIEZsYWdzDQorICBFRklf UEVJX1BQSV9ERVNDUklQVE9SX1RFUk1JTkFURV9MSVNULA0KKyAgJmdFZmlQZWlNcFNlcnZpY2Vz UHBpR3VpZCwgICAgICAgICAgICAgICAvLyBHdWlkDQorICBPbk1wU2VydmljZXNBdmFpbGFibGUg ICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeQ0KK307DQorDQorVk9JRA0KK0luc3RhbGxGZWF0 dXJlQ29udHJvbENhbGxiYWNrICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAg ICAgICAgICBTdGF0dXM7DQorDQorICBTdGF0dXMgPSBQZWlTZXJ2aWNlc05vdGlmeVBwaSAoJm1N cFNlcnZpY2VzTm90aWZ5KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVC VUcgKChFRklfRF9FUlJPUiwgIiVhOiBmYWlsZWQgdG8gc2V0IHVwIE1QIFNlcnZpY2VzIGNhbGxi YWNrOiAlclxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOw0KKyAgfQ0KK30NCmRp ZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL01l bURldGVjdC5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9N ZW1EZXRlY3QuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjkwZTZk MWQzY2YNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9TaW1pY3NQZWkvTWVtRGV0ZWN0LmMNCkBAIC0wLDAgKzEsNTY4IEBADQorLyoqIEBmaWxl DQorICBNZW1vcnkgRGV0ZWN0aW9uIGZvciBWaXJ0dWFsIE1hY2hpbmVzLg0KKw0KKyAgQ29weXJp Z2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCisqKi8NCisNCisvLw0KKy8vIFRoZSBwYWNrYWdlIGxldmVsIGhlYWRlciBmaWxlcyB0aGlz IG1vZHVsZSB1c2VzDQorLy8NCisjaW5jbHVkZSA8UGlQZWkuaD4NCisNCisvLw0KKy8vIFRoZSBM aWJyYXJ5IGNsYXNzZXMgdGhpcyBtb2R1bGUgY29uc3VtZXMNCisvLw0KKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNp bmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpbUVudHJ5 UG9pbnQuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9SZXNvdXJjZVB1YmxpY2F0aW9uTGliLmg+DQor I2luY2x1ZGUgPExpYnJhcnkvTXRyckxpYi5oPg0KKyNpbmNsdWRlIDxTaW1pY3NQbGF0Zm9ybXMu aD4NCisjaW5jbHVkZSA8R3VpZC9TbXJhbU1lbW9yeVJlc2VydmUuaD4NCisNCisjaW5jbHVkZSAi UGxhdGZvcm0uaCINCisjaW5jbHVkZSAiQ21vcy5oIg0KKw0KK1VJTlQ4IG1QaHlzTWVtQWRkcmVz c1dpZHRoOw0KKw0KK1NUQVRJQyBVSU5UMzIgbVMzQWNwaVJlc2VydmVkTWVtb3J5QmFzZTsNCitT VEFUSUMgVUlOVDMyIG1TM0FjcGlSZXNlcnZlZE1lbW9yeVNpemU7DQorDQorU1RBVElDIFVJTlQx NiBtWDU4VHNlZ01ieXRlczsNCisNCitWT0lEDQorWDU4VHNlZ01ieXRlc0luaXRpYWxpemF0aW9u KA0KKyAgVk9JRA0KKykNCit7DQorDQorICBpZiAobUhvc3RCcmlkZ2VEZXZJZCAhPSBJTlRFTF9J Q0gxMF9ERVZJQ0VfSUQpIHsNCisgICAgREVCVUcgKCgNCisgICAgICBERUJVR19FUlJPUiwNCisg ICAgICAiJWE6IG5vIFRTRUcgKFNNUkFNKSBvbiBob3N0IGJyaWRnZSBESUQ9MHglMDR4OyAiDQor ICAgICAgIm9ubHkgRElEPTB4JTA0eCAoWDU4KSBpcyBzdXBwb3J0ZWRcbiIsDQorICAgICAgX19G VU5DVElPTl9fLA0KKyAgICAgIG1Ib3N0QnJpZGdlRGV2SWQsDQorICAgICAgSU5URUxfSUNIMTBf REVWSUNFX0lEDQorICAgICAgKSk7DQorICAgIEFTU0VSVCAoRkFMU0UpOw0KKyAgICBDcHVEZWFk TG9vcCAoKTsNCisgIH0NCisNCisgIC8vDQorICAvLyBDaGVjayBpZiBRRU1VIG9mZmVycyBhbiBl eHRlbmRlZCBUU0VHLg0KKyAgLy8NCisgIC8vIFRoaXMgY2FuIGJlIHNlZW4gZnJvbSB3cml0aW5n IE1DSF9FWFRfVFNFR19NQl9RVUVSWSB0byB0aGUgTUNIX0VYVF9UU0VHX01CDQorICAvLyByZWdp c3RlciwgYW5kIHJlYWRpbmcgYmFjayB0aGUgcmVnaXN0ZXIuDQorICAvLw0KKyAgLy8gT24gYSBR RU1VIG1hY2hpbmUgdHlwZSB0aGF0IGRvZXMgbm90IG9mZmVyIGFuIGV4dGVuZGVkIFRTRUcsIHRo ZSBpbml0aWFsDQorICAvLyB3cml0ZSBvdmVyd3JpdGVzIHdoYXRldmVyIHZhbHVlIGEgbWFsaWNp b3VzIGd1ZXN0IE9TIG1heSBoYXZlIHBsYWNlZCBpbg0KKyAgLy8gdGhlICh1bmltcGxlbWVudGVk KSByZWdpc3RlciwgYmVmb3JlIGVudGVyaW5nIFMzIG9yIHJlYm9vdGluZy4NCisgIC8vIFN1YnNl cXVlbnRseSwgdGhlIHJlYWQgcmV0dXJucyBNQ0hfRVhUX1RTRUdfTUJfUVVFUlkgdW5jaGFuZ2Vk Lg0KKyAgLy8NCisgIC8vIE9uIGEgUUVNVSBtYWNoaW5lIHR5cGUgdGhhdCBvZmZlcnMgYW4gZXh0 ZW5kZWQgVFNFRywgdGhlIGluaXRpYWwgd3JpdGUNCisgIC8vIHRyaWdnZXJzIGFuIHVwZGF0ZSB0 byB0aGUgcmVnaXN0ZXIuIFN1YnNlcXVlbnRseSwgdGhlIHZhbHVlIHJlYWQgYmFjaw0KKyAgLy8g KHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gZGlmZmVyIGZyb20gTUNIX0VYVF9UU0VHX01CX1FVRVJZ KSB0ZWxscyB1cyB0aGUNCisgIC8vIG51bWJlciBvZiBtZWdhYnl0ZXMuDQorICAvLw0KKyAgbVg1 OFRzZWdNYnl0ZXMgPSBGaXhlZFBjZEdldDgoUGNkWDU4VHNlZ01ieXRlcyk7DQorICByZXR1cm47 DQorfQ0KKw0KKw0KK1VJTlQzMg0KK0dldFN5c3RlbU1lbW9yeVNpemVCZWxvdzRnYiAoDQorICBW T0lEDQorICApDQorew0KKyAgVUlOVDggQ21vczB4MzQ7DQorICBVSU5UOCBDbW9zMHgzNTsNCisN CisgIC8vDQorICAvLyBDTU9TIDB4MzQvMHgzNSBzcGVjaWZpZXMgdGhlIHN5c3RlbSBtZW1vcnkg YWJvdmUgMTYgTUIuDQorICAvLyAqIENNT1MoMHgzNSkgaXMgdGhlIGhpZ2ggYnl0ZQ0KKyAgLy8g KiBDTU9TKDB4MzQpIGlzIHRoZSBsb3cgYnl0ZQ0KKyAgLy8gKiBUaGUgc2l6ZSBpcyBzcGVjaWZp ZWQgaW4gNjRrYiBjaHVua3MNCisgIC8vICogU2luY2UgdGhpcyBpcyBtZW1vcnkgYWJvdmUgMTZN QiwgdGhlIDE2TUIgbXVzdCBiZSBhZGRlZA0KKyAgLy8gICBpbnRvIHRoZSBjYWxjdWxhdGlvbiB0 byBnZXQgdGhlIHRvdGFsIG1lbW9yeSBzaXplLg0KKyAgLy8NCisNCisgIENtb3MweDM0ID0gKFVJ TlQ4KSBDbW9zUmVhZDggKDB4MzQpOw0KKyAgQ21vczB4MzUgPSAoVUlOVDgpIENtb3NSZWFkOCAo MHgzNSk7DQorDQorICByZXR1cm4gKFVJTlQzMikgKCgoVUlOVE4pKChDbW9zMHgzNSA8PCA4KSAr IENtb3MweDM0KSA8PCAxNikgKyBTSVpFXzE2TUIpOw0KK30NCisNCisNCitTVEFUSUMNCitVSU5U NjQNCitHZXRTeXN0ZW1NZW1vcnlTaXplQWJvdmU0Z2IgKA0KKyAgKQ0KK3sNCisgIFVJTlQzMiBT aXplOw0KKyAgVUlOVE4gIENtb3NJbmRleDsNCisNCisgIC8vDQorICAvLyBDTU9TIDB4NWItMHg1 ZCBzcGVjaWZpZXMgdGhlIHN5c3RlbSBtZW1vcnkgYWJvdmUgNEdCIE1CLg0KKyAgLy8gKiBDTU9T KDB4NWQpIGlzIHRoZSBtb3N0IHNpZ25pZmljYW50IHNpemUgYnl0ZQ0KKyAgLy8gKiBDTU9TKDB4 NWMpIGlzIHRoZSBtaWRkbGUgc2l6ZSBieXRlDQorICAvLyAqIENNT1MoMHg1YikgaXMgdGhlIGxl YXN0IHNpZ25pZmljYW50IHNpemUgYnl0ZQ0KKyAgLy8gKiBUaGUgc2l6ZSBpcyBzcGVjaWZpZWQg aW4gNjRrYiBjaHVua3MNCisgIC8vDQorDQorICBTaXplID0gMDsNCisgIGZvciAoQ21vc0luZGV4 ID0gMHg1ZDsgQ21vc0luZGV4ID49IDB4NWI7IENtb3NJbmRleC0tKSB7DQorICAgIFNpemUgPSAo VUlOVDMyKSAoU2l6ZSA8PCA4KSArIChVSU5UMzIpIENtb3NSZWFkOCAoQ21vc0luZGV4KTsNCisg IH0NCisNCisgIHJldHVybiBMU2hpZnRVNjQgKFNpemUsIDE2KTsNCit9DQorDQorDQorLyoqDQor ICBSZXR1cm4gdGhlIGhpZ2hlc3QgYWRkcmVzcyB0aGF0IERYRSBjb3VsZCBwb3NzaWJseSB1c2Us IHBsdXMgb25lLg0KKyoqLw0KK1NUQVRJQw0KK1VJTlQ2NA0KK0dldEZpcnN0Tm9uQWRkcmVzcyAo DQorICBWT0lEDQorICApDQorew0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgRmlyc3ROb25BZGRy ZXNzOw0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgUGNpNjRCYXNlLCBQY2k2NFNpemU7DQorDQor ICBGaXJzdE5vbkFkZHJlc3MgPSBCQVNFXzRHQiArIEdldFN5c3RlbU1lbW9yeVNpemVBYm92ZTRn YiAoKTsNCisNCisgIC8vDQorICAvLyBJZiBEWEUgaXMgMzItYml0LCB0aGVuIHdlJ3JlIGRvbmU7 IFBjaUJ1c0R4ZSB3aWxsIGRlZ3JhZGUgNjQtYml0IE1NSU8NCisgIC8vIHJlc291cmNlcyB0byAz Mi1iaXQgYW55d2F5LiBTZWUgRGVncmFkZVJlc291cmNlKCkgaW4NCisgIC8vICJQY2lSZXNvdXJj ZVN1cHBvcnQuYyIuDQorICAvLw0KKyNpZmRlZiBNREVfQ1BVX0lBMzINCisgIGlmICghRmVhdHVy ZVBjZEdldCAoUGNkRHhlSXBsU3dpdGNoVG9Mb25nTW9kZSkpIHsNCisgICAgcmV0dXJuIEZpcnN0 Tm9uQWRkcmVzczsNCisgIH0NCisjZW5kaWYNCisNCisgIC8vDQorICAvLyBPdGhlcndpc2UsIGlu IG9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgaGlnaGVzdCBhZGRyZXNzIHBsdXMgb25lLCB3ZSBtdXN0 DQorICAvLyBjb25zaWRlciB0aGUgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlIHRvby4gRmV0Y2gg dGhlIGRlZmF1bHQgc2l6ZS4NCisgIC8vDQorICBQY2k2NFNpemUgPSBQY2RHZXQ2NCAoUGNkUGNp TW1pbzY0U2l6ZSk7DQorDQorICBpZiAoUGNpNjRTaXplID09IDApIHsNCisgICAgaWYgKG1Cb290 TW9kZSAhPSBCT09UX09OX1MzX1JFU1VNRSkgew0KKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywg IiVhOiBkaXNhYmxpbmcgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlXG4iLA0KKyAgICAgICAgX19G VU5DVElPTl9fKSk7DQorICAgICAgUGNkU2V0NjQgKFBjZFBjaU1taW82NFNpemUsIDApOw0KKyAg ICB9DQorDQorICAgIC8vDQorICAgIC8vIFRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvOyB0aGUg YW1vdW50IG9mIG1lbW9yeSBhYm92ZSA0R0IgZnVsbHkNCisgICAgLy8gZGV0ZXJtaW5lcyB0aGUg aGlnaGVzdCBhZGRyZXNzIHBsdXMgb25lLiBUaGUgbWVtb3J5IGhvdHBsdWcgYXJlYSAoc2VlDQor ICAgIC8vIGJlbG93KSBwbGF5cyBubyByb2xlIGZvciB0aGUgZmlybXdhcmUgaW4gdGhpcyBjYXNl Lg0KKyAgICAvLw0KKyAgICByZXR1cm4gRmlyc3ROb25BZGRyZXNzOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIFNlYUJJT1MgYWxpZ25zIGJvdGggYm91bmRhcmllcyBvZiB0aGUgNjQtYml0IFBDSSBo b3N0IGFwZXJ0dXJlIHRvIDFHQiwgc28NCisgIC8vIHRoYXQgdGhlIGhvc3QgY2FuIG1hcCBpdCB3 aXRoIDFHQiBodWdlcGFnZXMuIEZvbGxvdyBzdWl0Lg0KKyAgLy8NCisgIFBjaTY0QmFzZSA9IEFM SUdOX1ZBTFVFIChGaXJzdE5vbkFkZHJlc3MsIChVSU5UNjQpU0laRV8xR0IpOw0KKyAgUGNpNjRT aXplID0gQUxJR05fVkFMVUUgKFBjaTY0U2l6ZSwgKFVJTlQ2NClTSVpFXzFHQik7DQorDQorICAv Lw0KKyAgLy8gVGhlIDY0LWJpdCBQQ0kgaG9zdCBhcGVydHVyZSBzaG91bGQgYWxzbyBiZSAibmF0 dXJhbGx5IiBhbGlnbmVkLiBUaGUNCisgIC8vIGFsaWdubWVudCBpcyBkZXRlcm1pbmVkIGJ5IHJv dW5kaW5nIHRoZSBzaXplIG9mIHRoZSBhcGVydHVyZSBkb3duIHRvIHRoZQ0KKyAgLy8gbmV4dCBz bWFsbGVyIG9yIGVxdWFsIHBvd2VyIG9mIHR3by4gVGhhdCBpcywgYWxpZ24gdGhlIGFwZXJ0dXJl IGJ5IHRoZQ0KKyAgLy8gbGFyZ2VzdCBCQVIgc2l6ZSB0aGF0IGNhbiBmaXQgaW50byBpdC4NCisg IC8vDQorICBQY2k2NEJhc2UgPSBBTElHTl9WQUxVRSAoUGNpNjRCYXNlLCBHZXRQb3dlck9mVHdv NjQgKFBjaTY0U2l6ZSkpOw0KKw0KKyAgaWYgKG1Cb290TW9kZSAhPSBCT09UX09OX1MzX1JFU1VN RSkgew0KKyAgICAvLw0KKyAgICAvLyBUaGUgY29yZSBQY2lIb3N0QnJpZGdlRHhlIGRyaXZlciB3 aWxsIGF1dG9tYXRpY2FsbHkgYWRkIHRoaXMgcmFuZ2UgdG8NCisgICAgLy8gdGhlIEdDRCBtZW1v cnkgc3BhY2UgbWFwIHRocm91Z2ggb3VyIFBjaUhvc3RCcmlkZ2VMaWIgaW5zdGFuY2U7IGhlcmUg d2UNCisgICAgLy8gb25seSBuZWVkIHRvIHNldCB0aGUgUENEcy4NCisgICAgLy8NCisgICAgUGNk U2V0NjQgKFBjZFBjaU1taW82NEJhc2UsIFBjaTY0QmFzZSk7DQorICAgIFBjZFNldDY0IChQY2RQ Y2lNbWlvNjRTaXplLCBQY2k2NFNpemUpOw0KKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIlYTog UGNpNjRCYXNlPTB4JUx4IFBjaTY0U2l6ZT0weCVMeFxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18s IFBjaTY0QmFzZSwgUGNpNjRTaXplKSk7DQorICB9DQorDQorICAvLw0KKyAgLy8gVGhlIHVzZWZ1 bCBhZGRyZXNzIHNwYWNlIGVuZHMgd2l0aCB0aGUgNjQtYml0IFBDSSBob3N0IGFwZXJ0dXJlLg0K KyAgLy8NCisgIEZpcnN0Tm9uQWRkcmVzcyA9IFBjaTY0QmFzZSArIFBjaTY0U2l6ZTsNCisgIHJl dHVybiBGaXJzdE5vbkFkZHJlc3M7DQorfQ0KKw0KKw0KKy8qKg0KKyAgSW5pdGlhbGl6ZSB0aGUg bVBoeXNNZW1BZGRyZXNzV2lkdGggdmFyaWFibGUsIGJhc2VkIG9uIGd1ZXN0IFJBTSBzaXplLg0K KyoqLw0KK1ZPSUQNCitBZGRyZXNzV2lkdGhJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQorICAp DQorew0KKyAgVUlOVDY0IEZpcnN0Tm9uQWRkcmVzczsNCisNCisgIC8vDQorICAvLyBBcyBndWVz dC1waHlzaWNhbCBtZW1vcnkgc2l6ZSBncm93cywgdGhlIHBlcm1hbmVudCBQRUkgUkFNIHJlcXVp cmVtZW50cw0KKyAgLy8gYXJlIGRvbWluYXRlZCBieSB0aGUgaWRlbnRpdHktbWFwcGluZyBwYWdl IHRhYmxlcyBidWlsdCBieSB0aGUgRFhFIElQTC4NCisgIC8vIFRoZSBEWEwgSVBMIGtleXMgb2Zm IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMgYWR2ZXJ0aXplZCBpbiB0aGUgQ1BVDQorICAv LyBIT0IuIFRvIGNvbnNlcnZlIG1lbW9yeSwgd2UgY2FsY3VsYXRlIHRoZSBtaW5pbXVtIGFkZHJl c3Mgd2lkdGggaGVyZS4NCisgIC8vDQorICBGaXJzdE5vbkFkZHJlc3MgICAgICA9IEdldEZpcnN0 Tm9uQWRkcmVzcyAoKTsNCisgIG1QaHlzTWVtQWRkcmVzc1dpZHRoID0gKFVJTlQ4KUhpZ2hCaXRT ZXQ2NCAoRmlyc3ROb25BZGRyZXNzKTsNCisNCisgIC8vDQorICAvLyBJZiBGaXJzdE5vbkFkZHJl c3MgaXMgbm90IGFuIGludGVncmFsIHBvd2VyIG9mIHR3bywgdGhlbiB3ZSBuZWVkIGFuDQorICAv LyBhZGRpdGlvbmFsIGJpdC4NCisgIC8vDQorICBpZiAoKEZpcnN0Tm9uQWRkcmVzcyAmIChGaXJz dE5vbkFkZHJlc3MgLSAxKSkgIT0gMCkgew0KKyAgICArK21QaHlzTWVtQWRkcmVzc1dpZHRoOw0K KyAgfQ0KKw0KKyAgLy8NCisgIC8vIFRoZSBtaW5pbXVtIGFkZHJlc3Mgd2lkdGggaXMgMzYgKGNv dmVycyB1cCB0byBhbmQgZXhjbHVkaW5nIDY0IEdCLCB3aGljaA0KKyAgLy8gaXMgdGhlIG1heGlt dW0gZm9yIElhMzIgKyBQQUUpLiBUaGUgdGhlb3JldGljYWwgYXJjaGl0ZWN0dXJlIG1heGltdW0g Zm9yDQorICAvLyBYNjQgbG9uZyBtb2RlIGlzIDUyIGJpdHMsIGJ1dCB0aGUgRFhFIElQTCBjbGFt cHMgdGhhdCBkb3duIHRvIDQ4IGJpdHMuIFdlDQorICAvLyBjYW4gc2ltcGx5IGFzc2VydCB0aGF0 IGhlcmUsIHNpbmNlIDQ4IGJpdHMgYXJlIGdvb2QgZW5vdWdoIGZvciAyNTYgVEIuDQorICAvLw0K KyAgaWYgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIDw9IDM2KSB7DQorICAgIG1QaHlzTWVtQWRkcmVz c1dpZHRoID0gMzY7DQorICB9DQorICBBU1NFUlQgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIDw9IDQ4 KTsNCit9DQorDQorDQorLyoqDQorICBDYWxjdWxhdGUgdGhlIGNhcCBmb3IgdGhlIHBlcm1hbmVu dCBQRUkgbWVtb3J5Lg0KKyoqLw0KK1NUQVRJQw0KK1VJTlQzMg0KK0dldFBlaU1lbW9yeUNhcCAo DQorICBWT0lEDQorICApDQorew0KKyAgQk9PTEVBTiBQYWdlMUdTdXBwb3J0Ow0KKyAgVUlOVDMy ICBSZWdFYXg7DQorICBVSU5UMzIgIFJlZ0VkeDsNCisgIFVJTlQzMiAgUG1sNEVudHJpZXM7DQor ICBVSU5UMzIgIFBkcEVudHJpZXM7DQorICBVSU5UTiAgIFRvdGFsUGFnZXM7DQorDQorICAvLw0K KyAgLy8gSWYgRFhFIGlzIDMyLWJpdCwgdGhlbiBqdXN0IHJldHVybiB0aGUgdHJhZGl0aW9uYWwg NjQgTUIgY2FwLg0KKyAgLy8NCisjaWZkZWYgTURFX0NQVV9JQTMyDQorICBpZiAoIUZlYXR1cmVQ Y2RHZXQgKFBjZER4ZUlwbFN3aXRjaFRvTG9uZ01vZGUpKSB7DQorICAgIHJldHVybiBTSVpFXzY0 TUI7DQorICB9DQorI2VuZGlmDQorDQorICAvLw0KKyAgLy8gRGVwZW5kZW50IG9uIHBoeXNpY2Fs IGFkZHJlc3Mgd2lkdGgsIFBFSSBtZW1vcnkgYWxsb2NhdGlvbnMgY2FuIGJlDQorICAvLyBkb21p bmF0ZWQgYnkgdGhlIHBhZ2UgdGFibGVzIGJ1aWx0IGZvciA2NC1iaXQgRFhFLiBTbyB3ZSBrZXkg dGhlIGNhcCBvZmYNCisgIC8vIG9mIHRob3NlLiBUaGUgY29kZSBiZWxvdyBpcyBiYXNlZCBvbiBD cmVhdGVJZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzKCkgaW4NCisgIC8vICJNZGVNb2R1bGVQa2cv Q29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMiLg0KKyAgLy8NCisgIFBhZ2UxR1N1 cHBvcnQgPSBGQUxTRTsNCisgIGlmIChQY2RHZXRCb29sIChQY2RVc2UxR1BhZ2VUYWJsZSkpIHsN CisgICAgQXNtQ3B1aWQgKDB4ODAwMDAwMDAsICZSZWdFYXgsIE5VTEwsIE5VTEwsIE5VTEwpOw0K KyAgICBpZiAoUmVnRWF4ID49IDB4ODAwMDAwMDEpIHsNCisgICAgICBBc21DcHVpZCAoMHg4MDAw MDAwMSwgTlVMTCwgTlVMTCwgTlVMTCwgJlJlZ0VkeCk7DQorICAgICAgaWYgKChSZWdFZHggJiBC SVQyNikgIT0gMCkgew0KKyAgICAgICAgUGFnZTFHU3VwcG9ydCA9IFRSVUU7DQorICAgICAgfQ0K KyAgICB9DQorICB9DQorDQorICBpZiAobVBoeXNNZW1BZGRyZXNzV2lkdGggPD0gMzkpIHsNCisg ICAgUG1sNEVudHJpZXMgPSAxOw0KKyAgICBQZHBFbnRyaWVzID0gMSA8PCAobVBoeXNNZW1BZGRy ZXNzV2lkdGggLSAzMCk7DQorICAgIEFTU0VSVCAoUGRwRW50cmllcyA8PSAweDIwMCk7DQorICB9 IGVsc2Ugew0KKyAgICBQbWw0RW50cmllcyA9IDEgPDwgKG1QaHlzTWVtQWRkcmVzc1dpZHRoIC0g MzkpOw0KKyAgICBBU1NFUlQgKFBtbDRFbnRyaWVzIDw9IDB4MjAwKTsNCisgICAgUGRwRW50cmll cyA9IDUxMjsNCisgIH0NCisNCisgIFRvdGFsUGFnZXMgPSBQYWdlMUdTdXBwb3J0ID8gUG1sNEVu dHJpZXMgKyAxIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBkcEVudHJpZXMg KyAxKSAqIFBtbDRFbnRyaWVzICsgMTsNCisgIEFTU0VSVCAoVG90YWxQYWdlcyA8PSAweDQwMjAx KTsNCisNCisgIC8vDQorICAvLyBBZGQgNjQgTUIgZm9yIG1pc2NlbGxhbmVvdXMgYWxsb2NhdGlv bnMuIE5vdGUgdGhhdCBmb3INCisgIC8vIG1QaHlzTWVtQWRkcmVzc1dpZHRoIHZhbHVlcyBjbG9z ZSB0byAzNiwgdGhlIGNhcCB3aWxsIGFjdHVhbGx5IGJlDQorICAvLyBkb21pbmF0ZWQgYnkgdGhp cyBpbmNyZW1lbnQuDQorICAvLw0KKyAgcmV0dXJuIChVSU5UMzIpKEVGSV9QQUdFU19UT19TSVpF IChUb3RhbFBhZ2VzKSArIFNJWkVfNjRNQik7DQorfQ0KKw0KKw0KKy8qKg0KKyAgUHVibGlzaCBQ RUkgY29yZSBtZW1vcnkNCisNCisgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgIFRoZSBQRUlNIGlu aXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorUHVibGlzaFBl aU1lbW9yeSAoDQorICBWT0lEDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlOw0K KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemU7DQorICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgTG93ZXJNZW1vcnlTaXplOw0KKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgIFBlaU1lbW9yeUNhcDsNCisNCisgIExvd2VyTWVtb3J5U2l6ZSA9IEdldFN5c3Rl bU1lbW9yeVNpemVCZWxvdzRnYiAoKTsNCisgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RTbW1TbXJh bVJlcXVpcmUpKSB7DQorICAgIC8vDQorICAgIC8vIFRTRUcgaXMgY2hpcHBlZCBmcm9tIHRoZSBl bmQgb2YgbG93IFJBTQ0KKyAgICAvLw0KKyAgICBMb3dlck1lbW9yeVNpemUgLT0gbVg1OFRzZWdN Ynl0ZXMgKiBTSVpFXzFNQjsNCisgIH0NCisNCisgIC8vDQorICAvLyBJZiBTMyBpcyBzdXBwb3J0 ZWQsIHRoZW4gdGhlIFMzIHBlcm1hbmVudCBQRUkgbWVtb3J5IGlzIHBsYWNlZCBuZXh0LA0KKyAg Ly8gZG93bndhcmRzLiBJdHMgc2l6ZSBpcyBwcmltYXJpbHkgZGljdGF0ZWQgYnkgQ3B1TXBQZWku IFRoZSBmb3JtdWxhIGJlbG93DQorICAvLyBpcyBhbiBhcHByb3hpbWF0aW9uLg0KKyAgLy8NCisg IGlmIChtUzNTdXBwb3J0ZWQpIHsNCisgICAgbVMzQWNwaVJlc2VydmVkTWVtb3J5U2l6ZSA9IFNJ WkVfNTEyS0IgKw0KKyAgICAgIG1NYXhDcHVDb3VudCAqDQorICAgICAgUGNkR2V0MzIgKFBjZENw dUFwU3RhY2tTaXplKTsNCisgICAgbVMzQWNwaVJlc2VydmVkTWVtb3J5QmFzZSA9IExvd2VyTWVt b3J5U2l6ZSAtIG1TM0FjcGlSZXNlcnZlZE1lbW9yeVNpemU7DQorICAgIExvd2VyTWVtb3J5U2l6 ZSA9IG1TM0FjcGlSZXNlcnZlZE1lbW9yeUJhc2U7DQorICB9DQorDQorICBpZiAobUJvb3RNb2Rl ID09IEJPT1RfT05fUzNfUkVTVU1FKSB7DQorICAgIE1lbW9yeUJhc2UgPSBtUzNBY3BpUmVzZXJ2 ZWRNZW1vcnlCYXNlOw0KKyAgICBNZW1vcnlTaXplID0gbVMzQWNwaVJlc2VydmVkTWVtb3J5U2l6 ZTsNCisgIH0gZWxzZSB7DQorICAgIFBlaU1lbW9yeUNhcCA9IEdldFBlaU1lbW9yeUNhcCAoKTsN CisgICAgREVCVUcgKChFRklfRF9JTkZPLCAiJWE6IG1QaHlzTWVtQWRkcmVzc1dpZHRoPSVkIFBl aU1lbW9yeUNhcD0ldSBLQlxuIiwNCisgICAgICBfX0ZVTkNUSU9OX18sIG1QaHlzTWVtQWRkcmVz c1dpZHRoLCBQZWlNZW1vcnlDYXAgPj4gMTApKTsNCisNCisgICAgLy8NCisgICAgLy8gRGV0ZXJt aW5lIHRoZSByYW5nZSBvZiBtZW1vcnkgdG8gdXNlIGR1cmluZyBQRUkNCisgICAgLy8NCisgICAg Ly8gVGVjaG5pY2FsbHkgd2UgY291bGQgbGF5IHRoZSBwZXJtYW5lbnQgUEVJIFJBTSBvdmVyIFNF QydzIHRlbXBvcmFyeQ0KKyAgICAvLyBkZWNvbXByZXNzaW9uIGFuZCBzY3JhdGNoIGJ1ZmZlciBl dmVuIGlmICJzZWN1cmUgUzMiIGlzIG5lZWRlZCwgc2luY2UNCisgICAgLy8gdGhlaXIgbGlmZXRp bWVzIGRvbid0IG92ZXJsYXAuIEhvd2V2ZXIsIFBlaUZ2SW5pdGlhbGl6YXRpb24oKSB3aWxsIGNv dmVyDQorICAgIC8vIFJBTSB1cCB0byBQY2RPdm1mRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQgd2l0 aCBhbiBFZmlBQ1BJTWVtb3J5TlZTIG1lbW9yeQ0KKyAgICAvLyBhbGxvY2F0aW9uIEhPQiwgYW5k IG90aGVyIGFsbG9jYXRpb25zIHNlcnZlZCBmcm9tIHRoZSBwZXJtYW5lbnQgUEVJIFJBTQ0KKyAg ICAvLyBzaG91bGRuJ3Qgb3ZlcmxhcCB3aXRoIHRoYXQgSE9CLg0KKyAgICAvLw0KKyAgICBNZW1v cnlCYXNlID0gbVMzU3VwcG9ydGVkICYmIEZlYXR1cmVQY2RHZXQgKFBjZFNtbVNtcmFtUmVxdWly ZSkgPw0KKyAgICAgIFBjZEdldDMyIChQY2RTaW1pY3NEZWNvbXByZXNzaW9uU2NyYXRjaEVuZCkg Og0KKyAgICAgIFBjZEdldDMyIChQY2RTaW1pY3NEeGVNZW1GdkJhc2UpICsgUGNkR2V0MzIgKFBj ZFNpbWljc0R4ZU1lbUZ2U2l6ZSk7DQorICAgIE1lbW9yeVNpemUgPSBMb3dlck1lbW9yeVNpemUg LSBNZW1vcnlCYXNlOw0KKyAgfQ0KKyAgREVCVUcoKEVGSV9EX0lORk8sICJNZW1vcnlCYXNlPTB4 JWx4IE1lbW9yeVNpemU9MHglbHhcbiIsIE1lbW9yeUJhc2UsIE1lbW9yeVNpemUpKTsNCisgIC8v DQorICAvLyBQdWJsaXNoIHRoaXMgbWVtb3J5IHRvIHRoZSBQRUkgQ29yZQ0KKyAgLy8NCisgIFN0 YXR1cyA9IFB1Ymxpc2hTeXN0ZW1NZW1vcnkoTWVtb3J5QmFzZSwgTWVtb3J5U2l6ZSk7DQorICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQor DQorLyoqDQorICBQZWZvcm0gTWVtb3J5IERldGVjdGlvbiBmb3IgUUVNVSAvIEtWTQ0KKw0KKyoq Lw0KK1NUQVRJQw0KK1ZPSUQNCitRZW11SW5pdGlhbGl6ZVJhbSAoDQorICBWT0lEDQorICApDQor ew0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyTWVtb3J5U2l6 ZTsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcHBlck1lbW9yeVNp emU7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7 DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtcmFtSW5kZXg7DQor ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtcmFtUmFuZ2VzOw0KKyAg RUZJX1BFSV9IT0JfUE9JTlRFUlMgICAgICAgICAgICAgICAgICBIb2I7DQorICBFRklfU01SQU1f SE9CX0RFU0NSSVBUT1JfQkxPQ0sgICAgICAgICpTbXJhbUhvYkRlc2NyaXB0b3JCbG9jazsNCisg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQorDQorICBERUJV RyAoKEVGSV9EX0lORk8sICIlYSBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXykpOw0KKw0KKyAgLy8N CisgIC8vIERldGVybWluZSB0b3RhbCBtZW1vcnkgc2l6ZSBhdmFpbGFibGUNCisgIC8vDQorICBM b3dlck1lbW9yeVNpemUgPSBHZXRTeXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IgKCk7DQorICBVcHBl ck1lbW9yeVNpemUgPSBHZXRTeXN0ZW1NZW1vcnlTaXplQWJvdmU0Z2IgKCk7DQorDQorICBpZiAo bUJvb3RNb2RlID09IEJPT1RfT05fUzNfUkVTVU1FKSB7DQorICAgIC8vDQorICAgIC8vIENyZWF0 ZSB0aGUgZm9sbG93aW5nIG1lbW9yeSBIT0IgYXMgYW4gZXhjZXB0aW9uIG9uIHRoZSBTMyBib290 IHBhdGguDQorICAgIC8vDQorICAgIC8vIE5vcm1hbGx5IHdlJ2QgY3JlYXRlIG1lbW9yeSBIT0Jz IG9ubHkgb24gdGhlIG5vcm1hbCBib290IHBhdGguIEhvd2V2ZXIsDQorICAgIC8vIENwdU1wUGVp IHNwZWNpZmljYWxseSBuZWVkcyBzdWNoIGEgbG93LW1lbW9yeSBIT0Igb24gdGhlIFMzIHBhdGgg YXMNCisgICAgLy8gd2VsbCwgZm9yICJib3Jyb3dpbmciIGEgc3Vic2V0IG9mIGl0IHRlbXBvcmFy aWx5LCBmb3IgdGhlIEFQIHN0YXJ0dXANCisgICAgLy8gdmVjdG9yLg0KKyAgICAvLw0KKyAgICAv LyBDcHVNcFBlaSBzYXZlcyB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgdGhlIGJvcnJvd2VkIGFy ZWEgaW4gcGVybWFuZW50DQorICAgIC8vIFBFSSBSQU0sIGluIGEgYmFja3VwIGJ1ZmZlciBhbGxv Y2F0ZWQgd2l0aCB0aGUgbm9ybWFsIFBFSSBzZXJ2aWNlcy4NCisgICAgLy8gQ3B1TXBQZWkgcmVz dG9yZXMgdGhlIG9yaWdpbmFsIGNvbnRlbnRzICgicmV0dXJucyIgdGhlIGJvcnJvd2VkIGFyZWEp IGF0DQorICAgIC8vIEVuZC1vZi1QRUkuIEVuZC1vZi1QRUkgaW4gdHVybiBpcyBlbWl0dGVkIGJ5 IFMzUmVzdW1lMlBlaSBiZWZvcmUNCisgICAgLy8gdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gdGhl IE9TJ3Mgd2FrZXVwIHZlY3RvciBpbiB0aGUgRkFDUy4NCisgICAgLy8NCisgICAgLy8gV2UgZXhw ZWN0IGFueSBvdGhlciBQRUlNcyB0aGF0ICJib3Jyb3ciIG1lbW9yeSBzaW1pbGFybHkgdG8gQ3B1 TXBQZWkgdG8NCisgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgY29udGVudHMuIEZ1cnRoZXJt b3JlLCB3ZSBleHBlY3QgYWxsIHN1Y2ggUEVJTXMNCisgICAgLy8gKENwdU1wUGVpIGluY2x1ZGVk KSB0byBjbGFpbSB0aGUgYm9ycm93ZWQgYXJlYXMgYnkgcHJvZHVjaW5nIG1lbW9yeQ0KKyAgICAv LyBhbGxvY2F0aW9uIEhPQnMsIGFuZCB0byBob25vciBwcmVleGlzdGVudCBtZW1vcnkgYWxsb2Nh dGlvbiBIT0JzIHdoZW4NCisgICAgLy8gbG9va2luZyBmb3IgYW4gYXJlYSB0byBib3Jyb3cuDQor ICAgIC8vDQorICAgIEFkZE1lbW9yeVJhbmdlSG9iICgwLCBCQVNFXzUxMktCICsgQkFTRV8xMjhL Qik7DQorICB9IGVsc2Ugew0KKyAgICAvLw0KKyAgICAvLyBDcmVhdGUgbWVtb3J5IEhPQnMNCisg ICAgLy8NCisgICAgQWRkTWVtb3J5UmFuZ2VIb2IgKDAsIEJBU0VfNTEyS0IgKyBCQVNFXzEyOEtC KTsNCisNCisgICAgaWYgKEZlYXR1cmVQY2RHZXQgKFBjZFNtbVNtcmFtUmVxdWlyZSkpIHsNCisg ICAgICBVSU5UMzIgVHNlZ1NpemU7DQorDQorICAgICAgVHNlZ1NpemUgPSBtWDU4VHNlZ01ieXRl cyAqIFNJWkVfMU1COw0KKyAgICAgIEFkZE1lbW9yeVJhbmdlSG9iIChCQVNFXzFNQiwgTG93ZXJN ZW1vcnlTaXplIC0gVHNlZ1NpemUpOw0KKyAgICAgIEFkZFJlc2VydmVkTWVtb3J5QmFzZVNpemVI b2IgKExvd2VyTWVtb3J5U2l6ZSAtIFRzZWdTaXplLCBUc2VnU2l6ZSwNCisgICAgICAgIFRSVUUp Ow0KKw0KKwkgIEJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX1NNUkFNX0hPQl9ERVNDUklQVE9SX0JM T0NLKTsNCisJICBTbXJhbVJhbmdlcyA9IDE7DQorDQorICAgICAgSG9iLlJhdyA9IEJ1aWxkR3Vp ZEhvYigNCisgICAgICAgICAgJmdFZmlTbW1QZWlTbXJhbU1lbW9yeVJlc2VydmVHdWlkLA0KKyAg ICAgICAgICBCdWZmZXJTaXplDQorICAgICAgKTsNCisgICAgICBBU1NFUlQoSG9iLlJhdyk7DQor DQorICAgICAgU21yYW1Ib2JEZXNjcmlwdG9yQmxvY2sgPSAoRUZJX1NNUkFNX0hPQl9ERVNDUklQ VE9SX0JMT0NLICopKEhvYi5SYXcpOw0KKyAgICAgIFNtcmFtSG9iRGVzY3JpcHRvckJsb2NrLT5O dW1iZXJPZlNtbVJlc2VydmVkUmVnaW9ucyA9IFNtcmFtUmFuZ2VzOw0KKw0KKyAgICAgIFNtcmFt SW5kZXggPSAwOw0KKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFNtcmFtUmFuZ2VzOyBJ bmRleCsrKSB7DQorICAgICAgICAvLw0KKyAgICAgICAgLy8gVGhpcyBpcyBhbiBTTVJBTSByYW5n ZSwgY3JlYXRlIGFuIFNNUkFNIGRlc2NyaXB0b3INCisgICAgICAgIC8vDQorICAgICAgICBTbXJh bUhvYkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcltTbXJhbUluZGV4XS5QaHlzaWNhbFN0YXJ0 ID0gTG93ZXJNZW1vcnlTaXplIC0gVHNlZ1NpemU7DQorICAgICAgICBTbXJhbUhvYkRlc2NyaXB0 b3JCbG9jay0+RGVzY3JpcHRvcltTbXJhbUluZGV4XS5DcHVTdGFydCA9IExvd2VyTWVtb3J5U2l6 ZSAtIFRzZWdTaXplOw0KKyAgICAgICAgU21yYW1Ib2JEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0 b3JbU21yYW1JbmRleF0uUGh5c2ljYWxTaXplID0gVHNlZ1NpemU7DQorICAgICAgICBTbXJhbUhv YkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcltTbXJhbUluZGV4XS5SZWdpb25TdGF0ZSA9IEVG SV9TTVJBTV9DTE9TRUQgfCBFRklfQ0FDSEVBQkxFOw0KKyAgICAgICAgU21yYW1JbmRleCsrOw0K KyAgICAgIH0NCisNCisgICAgfSBlbHNlIHsNCisgICAgICBBZGRNZW1vcnlSYW5nZUhvYiAoQkFT RV8xTUIsIExvd2VyTWVtb3J5U2l6ZSk7DQorICAgIH0NCisNCisgICAgLy8NCisgICAgLy8gSWYg UUVNVSBwcmVzZW50cyBhbiBFODIwIG1hcCwgdGhlbiBjcmVhdGUgbWVtb3J5IEhPQnMgZm9yIHRo ZSA+PTRHQiBSQU0NCisgICAgLy8gZW50cmllcy4gT3RoZXJ3aXNlLCBjcmVhdGUgYSBzaW5nbGUg bWVtb3J5IEhPQiB3aXRoIHRoZSBmbGF0ID49NEdCDQorICAgIC8vIG1lbW9yeSBzaXplIHJlYWQg ZnJvbSB0aGUgQ01PUy4NCisgICAgLy8NCisgICAgaWYgKFVwcGVyTWVtb3J5U2l6ZSAhPSAwKSB7 DQorICAgICAgQWRkTWVtb3J5QmFzZVNpemVIb2IgKEJBU0VfNEdCLCBVcHBlck1lbW9yeVNpemUp Ow0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgUHVibGlzaCBzeXN0ZW0gUkFNIGFuZCBy ZXNlcnZlIG1lbW9yeSByZWdpb25zDQorDQorKiovDQorVk9JRA0KK0luaXRpYWxpemVSYW1SZWdp b25zICgNCisgIFZPSUQNCisgICkNCit7DQorICBRZW11SW5pdGlhbGl6ZVJhbSAoKTsNCisNCisg IGlmIChtUzNTdXBwb3J0ZWQgJiYgbUJvb3RNb2RlICE9IEJPT1RfT05fUzNfUkVTVU1FKSB7DQor ICAgIC8vDQorICAgIC8vIFRoaXMgaXMgdGhlIG1lbW9yeSByYW5nZSB0aGF0IHdpbGwgYmUgdXNl ZCBmb3IgUEVJIG9uIFMzIHJlc3VtZQ0KKyAgICAvLw0KKyAgICBCdWlsZE1lbW9yeUFsbG9jYXRp b25Ib2IgKA0KKyAgICAgIG1TM0FjcGlSZXNlcnZlZE1lbW9yeUJhc2UsDQorICAgICAgbVMzQWNw aVJlc2VydmVkTWVtb3J5U2l6ZSwNCisgICAgICBFZmlBQ1BJTWVtb3J5TlZTDQorICAgICAgKTsN CisNCisgICAgLy8NCisgICAgLy8gQ292ZXIgdGhlIGluaXRpYWwgUkFNIGFyZWEgdXNlZCBhcyBz dGFjayBhbmQgdGVtcG9yYXJ5IFBFSSBoZWFwLg0KKyAgICAvLw0KKyAgICAvLyBUaGlzIGlzIHJl c2VydmVkIGFzIEFDUEkgTlZTIHNvIGl0IGNhbiBiZSB1c2VkIG9uIFMzIHJlc3VtZS4NCisgICAg Ly8NCisgICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgICBQY2RHZXQzMiAoUGNk U2ltaWNzU2VjUGVpVGVtcFJhbUJhc2UpLA0KKyAgICAgIFBjZEdldDMyIChQY2RTaW1pY3NTZWNQ ZWlUZW1wUmFtU2l6ZSksDQorICAgICAgRWZpQUNQSU1lbW9yeU5WUw0KKyAgICAgICk7DQorDQor ICAgIC8vDQorICAgIC8vIFNFQyBzdG9yZXMgaXRzIHRhYmxlIG9mIEdVSURlZCBzZWN0aW9uIGhh bmRsZXJzIGhlcmUuDQorICAgIC8vDQorICAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAoDQor ICAgICAgUGNkR2V0NjQgKFBjZEd1aWRlZEV4dHJhY3RIYW5kbGVyVGFibGVBZGRyZXNzKSwNCisg ICAgICBQY2RHZXQzMiAoUGNkR3VpZGVkRXh0cmFjdEhhbmRsZXJUYWJsZVNpemUpLA0KKyAgICAg IEVmaUFDUElNZW1vcnlOVlMNCisgICAgICApOw0KKw0KKyAgfQ0KKw0KKyAgaWYgKG1Cb290TW9k ZSAhPSBCT09UX09OX1MzX1JFU1VNRSkgew0KKyAgICBpZiAoIUZlYXR1cmVQY2RHZXQgKFBjZFNt bVNtcmFtUmVxdWlyZSkpIHsNCisgICAgICAvLw0KKyAgICAgIC8vIFJlc2VydmUgdGhlIGxvY2sg Ym94IHN0b3JhZ2UgYXJlYQ0KKyAgICAgIC8vDQorICAgICAgLy8gU2luY2UgdGhpcyBtZW1vcnkg cmFuZ2Ugd2lsbCBiZSB1c2VkIG9uIFMzIHJlc3VtZSwgaXQgbXVzdCBiZQ0KKyAgICAgIC8vIHJl c2VydmVkIGFzIEFDUEkgTlZTLg0KKyAgICAgIC8vDQorICAgICAgLy8gSWYgUzMgaXMgdW5zdXBw b3J0ZWQsIHRoZW4gdmFyaW91cyBkcml2ZXJzIG1pZ2h0IHN0aWxsIHdyaXRlIHRvIHRoZQ0KKyAg ICAgIC8vIExvY2tCb3ggYXJlYS4gV2Ugb3VnaHQgdG8gcHJldmVudCBEWEUgZnJvbSBzZXJ2aW5n IGFsbG9jYXRpb24gcmVxdWVzdHMNCisgICAgICAvLyBzdWNoIHRoYXQgdGhleSB3b3VsZCBvdmVy bGFwIHRoZSBMb2NrQm94IHN0b3JhZ2UuDQorICAgICAgLy8NCisgICAgICBaZXJvTWVtICgNCisg ICAgICAgIChWT0lEKikoVUlOVE4pIFBjZEdldDMyIChQY2RTaW1pY3NMb2NrQm94U3RvcmFnZUJh c2UpLA0KKyAgICAgICAgKFVJTlROKSBQY2RHZXQzMiAoUGNkU2ltaWNzTG9ja0JveFN0b3JhZ2VT aXplKQ0KKyAgICAgICAgKTsNCisgICAgICBCdWlsZE1lbW9yeUFsbG9jYXRpb25Ib2IgKA0KKyAg ICAgICAgKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTikgUGNkR2V0MzIgKFBjZFNpbWljc0xv Y2tCb3hTdG9yYWdlQmFzZSksDQorICAgICAgICAoVUlOVDY0KShVSU5UTikgUGNkR2V0MzIgKFBj ZFNpbWljc0xvY2tCb3hTdG9yYWdlU2l6ZSksDQorICAgICAgICBtUzNTdXBwb3J0ZWQgPyBFZmlB Q1BJTWVtb3J5TlZTIDogRWZpQm9vdFNlcnZpY2VzRGF0YQ0KKyAgICAgICAgKTsNCisgICAgfQ0K Kw0KKyAgICBpZiAoRmVhdHVyZVBjZEdldCAoUGNkU21tU21yYW1SZXF1aXJlKSkgew0KKyAgICAg IFVJTlQzMiBUc2VnU2l6ZTsNCisNCisgICAgICAvLw0KKyAgICAgIC8vIE1ha2Ugc3VyZSB0aGUg VFNFRyBhcmVhIHRoYXQgd2UgcmVwb3J0ZWQgYXMgYSByZXNlcnZlZCBtZW1vcnkgcmVzb3VyY2UN CisgICAgICAvLyBjYW5ub3QgYmUgdXNlZCBmb3IgcmVzZXJ2ZWQgbWVtb3J5IGFsbG9jYXRpb25z Lg0KKyAgICAgIC8vDQorICAgICAgVHNlZ1NpemUgPSBtWDU4VHNlZ01ieXRlcyAqIFNJWkVfMU1C Ow0KKyAgICAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAoDQorICAgICAgICBHZXRTeXN0ZW1N ZW1vcnlTaXplQmVsb3c0Z2IoKSAtIFRzZWdTaXplLA0KKyAgICAgICAgVHNlZ1NpemUsDQorICAg ICAgICBFZmlSZXNlcnZlZE1lbW9yeVR5cGUNCisgICAgICAgICk7DQorICAgIH0NCisgIH0NCit9 DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1Bl aS9QbGF0Zm9ybS5jIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1Bl aS9QbGF0Zm9ybS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMmZl MzRiMDJjNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJv YXJkUGtnL1NpbWljc1BlaS9QbGF0Zm9ybS5jDQpAQCAtMCwwICsxLDYzMCBAQA0KKy8qKiBAZmls ZQ0KKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAgQ29weXJpZ2h0IChjKSAyMDExLCBBbmRyZWkgV2Fya2Vu dGluIDxhbmRyZWl3QG1vdG9yb2xhLmNvbT4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorLy8NCisvLyBUaGUgcGFja2FnZSBsZXZl bCBoZWFkZXIgZmlsZXMgdGhpcyBtb2R1bGUgdXNlcw0KKy8vDQorI2luY2x1ZGUgPFBpUGVpLmg+ DQorDQorLy8NCisvLyBUaGUgTGlicmFyeSBjbGFzc2VzIHRoaXMgbW9kdWxlIGNvbnN1bWVzDQor Ly8NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hv YkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv TWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KKyNp bmNsdWRlIDxMaWJyYXJ5L1BjaUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaW1FbnRyeVBv aW50Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCisjaW5jbHVkZSA8 TGlicmFyeS9SZXNvdXJjZVB1YmxpY2F0aW9uTGliLmg+DQorI2luY2x1ZGUgPEd1aWQvTWVtb3J5 VHlwZUluZm9ybWF0aW9uLmg+DQorI2luY2x1ZGUgPFBwaS9NYXN0ZXJCb290TW9kZS5oPg0KKyNp bmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1BjaTIyLmg+DQorI2luY2x1ZGUgPFNpbWljc1BsYXRm b3Jtcy5oPg0KKw0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKyNpbmNsdWRlICJDbW9zLmgiDQor DQorRUZJX01FTU9SWV9UWVBFX0lORk9STUFUSU9OIG1EZWZhdWx0TWVtb3J5VHlwZUluZm9ybWF0 aW9uW10gPSB7DQorICB7IEVmaUFDUElNZW1vcnlOVlMsICAgICAgIDB4MDA0IH0sDQorICB7IEVm aUFDUElSZWNsYWltTWVtb3J5LCAgIDB4MDA4IH0sDQorICB7IEVmaVJlc2VydmVkTWVtb3J5VHlw ZSwgIDB4MDA0IH0sDQorICB7IEVmaVJ1bnRpbWVTZXJ2aWNlc0RhdGEsIDB4MDI0IH0sDQorICB7 IEVmaVJ1bnRpbWVTZXJ2aWNlc0NvZGUsIDB4MDMwIH0sDQorICB7IEVmaUJvb3RTZXJ2aWNlc0Nv ZGUsICAgIDB4MTgwIH0sDQorICB7IEVmaUJvb3RTZXJ2aWNlc0RhdGEsICAgIDB4RjAwIH0sDQor ICB7IEVmaU1heE1lbW9yeVR5cGUsICAgICAgIDB4MDAwIH0NCit9Ow0KKw0KKw0KK0VGSV9QRUlf UFBJX0RFU0NSSVBUT1IgICBtUHBpQm9vdE1vZGVbXSA9IHsNCisgIHsNCisgICAgRUZJX1BFSV9Q UElfREVTQ1JJUFRPUl9QUEkgfCBFRklfUEVJX1BQSV9ERVNDUklQVE9SX1RFUk1JTkFURV9MSVNU LA0KKyAgICAmZ0VmaVBlaU1hc3RlckJvb3RNb2RlUHBpR3VpZCwNCisgICAgTlVMTA0KKyAgfQ0K K307DQorDQorDQorVUlOVDE2IG1Ib3N0QnJpZGdlRGV2SWQ7DQorDQorRUZJX0JPT1RfTU9ERSBt Qm9vdE1vZGUgPSBCT09UX1dJVEhfRlVMTF9DT05GSUdVUkFUSU9OOw0KKw0KK0JPT0xFQU4gbVMz U3VwcG9ydGVkID0gRkFMU0U7DQorDQorVUlOVDMyIG1NYXhDcHVDb3VudDsNCisNCitWT0lEDQor QWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAg TWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQor ICApDQorew0KKyAgQnVpbGRSZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VS Q0VfTUVNT1JZX01BUFBFRF9JTywNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1BSRVNF TlQgICAgIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJQUxJWkVEIHwNCisg ICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FDSEVBQkxFIHwNCisgICAgICBFRklfUkVT T1VSQ0VfQVRUUklCVVRFX1RFU1RFRCwNCisgICAgTWVtb3J5QmFzZSwNCisgICAgTWVtb3J5U2l6 ZQ0KKyAgICApOw0KK30NCisNCitWT0lEDQorQWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAo DQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplLA0KKyAgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgIENhY2hlYWJsZQ0KKyAgKQ0KK3sNCisgIEJ1aWxkUmVzb3VyY2VEZXNjcmlwdG9ySG9i ICgNCisgICAgRUZJX1JFU09VUkNFX01FTU9SWV9SRVNFUlZFRCwNCisgICAgICBFRklfUkVTT1VS Q0VfQVRUUklCVVRFX1BSRVNFTlQgICAgIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRF X0lOSVRJQUxJWkVEIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FDSEVBQkxF IHwNCisgICAgICAoQ2FjaGVhYmxlID8NCisgICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9X UklURV9DT01CSU5FQUJMRSB8DQorICAgICAgIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVf VEhST1VHSF9DQUNIRUFCTEUgfA0KKyAgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRF X0JBQ0tfQ0FDSEVBQkxFIDoNCisgICAgICAgMA0KKyAgICAgICApIHwNCisgICAgICBFRklfUkVT T1VSQ0VfQVRUUklCVVRFX1RFU1RFRCwNCisgICAgTWVtb3J5QmFzZSwNCisgICAgTWVtb3J5U2l6 ZQ0KKyAgICApOw0KK30NCisNCitWT0lEDQorQWRkSW9NZW1vcnlSYW5nZUhvYiAoDQorICBFRklf UEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIEVGSV9QSFlTSUNBTF9BRERS RVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKQ0KK3sNCisgIEFkZElvTWVtb3J5QmFzZVNpemVI b2IgKE1lbW9yeUJhc2UsIChVSU5UNjQpKE1lbW9yeUxpbWl0IC0gTWVtb3J5QmFzZSkpOw0KK30N CisNCisNCitWT0lEDQorQWRkTWVtb3J5QmFzZVNpemVIb2IgKA0KKyAgRUZJX1BIWVNJQ0FMX0FE RFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg TWVtb3J5U2l6ZQ0KKyAgKQ0KK3sNCisgIEJ1aWxkUmVzb3VyY2VEZXNjcmlwdG9ySG9iICgNCisg ICAgRUZJX1JFU09VUkNFX1NZU1RFTV9NRU1PUlksDQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJ QlVURV9QUkVTRU5UIHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJQUxJWkVE IHwNCisgICAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FDSEVBQkxFIHwNCisgICAgICBF RklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX0NPTUJJTkVBQkxFIHwNCisgICAgICBFRklfUkVT T1VSQ0VfQVRUUklCVVRFX1dSSVRFX1RIUk9VR0hfQ0FDSEVBQkxFIHwNCisgICAgICBFRklfUkVT T1VSQ0VfQVRUUklCVVRFX1dSSVRFX0JBQ0tfQ0FDSEVBQkxFIHwNCisgICAgICBFRklfUkVTT1VS Q0VfQVRUUklCVVRFX1RFU1RFRCwNCisgICAgTWVtb3J5QmFzZSwNCisgICAgTWVtb3J5U2l6ZQ0K KyAgICApOw0KK30NCisNCisNCitWT0lEDQorQWRkTWVtb3J5UmFuZ2VIb2IgKA0KKyAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUJhc2UsDQorICBFRklfUEhZU0lDQUxfQUREUkVT UyAgICAgICAgTWVtb3J5TGltaXQNCisgICkNCit7DQorICBBZGRNZW1vcnlCYXNlU2l6ZUhvYiAo TWVtb3J5QmFzZSwgKFVJTlQ2NCkoTWVtb3J5TGltaXQgLSBNZW1vcnlCYXNlKSk7DQorfQ0KKw0K Kw0KK1ZPSUQNCitBZGRVbnRlc3RlZE1lbW9yeUJhc2VTaXplSG9iICgNCisgIEVGSV9QSFlTSUNB TF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAg ICAgIE1lbW9yeVNpemUNCisgICkNCit7DQorICBCdWlsZFJlc291cmNlRGVzY3JpcHRvckhvYiAo DQorICAgIEVGSV9SRVNPVVJDRV9TWVNURU1fTUVNT1JZLA0KKyAgICAgIEVGSV9SRVNPVVJDRV9B VFRSSUJVVEVfUFJFU0VOVCB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9JTklUSUFM SVpFRCB8DQorICAgICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9VTkNBQ0hFQUJMRSB8DQorICAg ICAgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9DT01CSU5FQUJMRSB8DQorICAgICAgRUZJ X1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9USFJPVUdIX0NBQ0hFQUJMRSB8DQorICAgICAgRUZJ X1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9CQUNLX0NBQ0hFQUJMRSwNCisgICAgTWVtb3J5QmFz ZSwNCisgICAgTWVtb3J5U2l6ZQ0KKyAgICApOw0KK30NCisNCisNCitWT0lEDQorQWRkVW50ZXN0 ZWRNZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5 QmFzZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlMaW1pdA0KKyAgKQ0K K3sNCisgIEFkZFVudGVzdGVkTWVtb3J5QmFzZVNpemVIb2IgKE1lbW9yeUJhc2UsIChVSU5UNjQp KE1lbW9yeUxpbWl0IC0gTWVtb3J5QmFzZSkpOw0KK30NCisNCitWT0lEDQorQWRkRmxhc2hEZXZp Y2VSYW5nZSAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQorICApDQorew0KKyAgQnVp bGRSZXNvdXJjZURlc2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfRklSTVdBUkVfREVW SUNFLA0KKyAgICAoRUZJX1JFU09VUkNFX0FUVFJJQlVURV9QUkVTRU5UICAgIHwNCisgICAgICBF RklfUkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJQUxJWkVEIHwNCisgICAgICBFRklfUkVTT1VSQ0Vf QVRUUklCVVRFX1VOQ0FDSEVBQkxFKSwNCisgICAgTWVtb3J5QmFzZSwNCisgICAgTWVtb3J5U2l6 ZQ0KKyAgICApOw0KKw0KKyAgQnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iICgNCisgICAgTWVtb3J5 QmFzZSwNCisgICAgTWVtb3J5U2l6ZSwNCisgICAgRWZpTWVtb3J5TWFwcGVkSU8NCisgICAgKTsN Cit9DQorDQorVk9JRA0KK01lbU1hcEluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7 DQorICBVSU5UNjQgUGNpSW9CYXNlOw0KKyAgVUlOVDY0IFBjaUlvU2l6ZTsNCisNCisgIFVJTlQz MiAgVG9wT2ZMb3dSYW07DQorICBVSU5UNjQgIFBjaUV4QmFyQmFzZTsNCisgIFVJTlQzMiAgUGNp QmFzZTsNCisgIFVJTlQzMiAgUGNpU2l6ZTsNCisNCisgIFBjaUlvQmFzZSA9IDB4QzAwMDsNCisg IFBjaUlvU2l6ZSA9IDB4NDAwMDsNCisNCisgIC8vDQorICAvLyBDcmVhdGUgTWVtb3J5IFR5cGUg SW5mb3JtYXRpb24gSE9CDQorICAvLw0KKyAgQnVpbGRHdWlkRGF0YUhvYiAoDQorICAgICZnRWZp TWVtb3J5VHlwZUluZm9ybWF0aW9uR3VpZCwNCisgICAgbURlZmF1bHRNZW1vcnlUeXBlSW5mb3Jt YXRpb24sDQorICAgIHNpemVvZihtRGVmYXVsdE1lbW9yeVR5cGVJbmZvcm1hdGlvbikNCisgICAg KTsNCisNCisgIC8vDQorICAvLyBWaWRlbyBtZW1vcnkgKyBMZWdhY3kgQklPUyByZWdpb24NCisg IC8vDQorICBBZGRJb01lbW9yeVJhbmdlSG9iICgweDBBMDAwMCwgQkFTRV8xTUIpOw0KKw0KKyAg VG9wT2ZMb3dSYW0gPSBHZXRTeXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IgKCk7DQorICBQY2lFeEJh ckJhc2UgPSAwOw0KKyAgaWYgKG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfSUNIMTBfREVWSUNF X0lEKSB7DQorICAgIC8vDQorICAgIC8vIFRoZSBNTUNPTkZJRyBhcmVhIGlzIGV4cGVjdGVkIHRv IGZhbGwgYmV0d2VlbiB0aGUgdG9wIG9mIGxvdyBSQU0gYW5kDQorICAgIC8vIHRoZSBiYXNlIG9m IHRoZSAzMi1iaXQgUENJIGhvc3QgYXBlcnR1cmUuDQorICAgIC8vDQorICAgIFBjaUV4QmFyQmFz ZSA9IEZpeGVkUGNkR2V0NjQgKFBjZFBjaUV4cHJlc3NCYXNlQWRkcmVzcyk7DQorICAgIEFTU0VS VCAoVG9wT2ZMb3dSYW0gPD0gUGNpRXhCYXJCYXNlKTsNCisgICAgQVNTRVJUIChQY2lFeEJhckJh c2UgPD0gTUFYX1VJTlQzMiAtIFNJWkVfMjU2TUIpOw0KKyAgICBQY2lCYXNlID0gKFVJTlQzMiko UGNpRXhCYXJCYXNlICsgU0laRV8yNTZNQik7DQorICB9IGVsc2Ugew0KKyAgICBQY2lCYXNlID0g KFRvcE9mTG93UmFtIDwgQkFTRV8yR0IpID8gQkFTRV8yR0IgOiBUb3BPZkxvd1JhbTsNCisgIH0N CisNCisgIC8vDQorICAvLyBhZGRyZXNzICAgICAgIHB1cnBvc2UgICBzaXplDQorICAvLyAtLS0t LS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAvLyAweDAw MDAwMDAwICAgIFRvcE9mTG93UmFtICAgMHhERjAwMDAwMA0KKyAgLy8gMHhERjAwMDAwMCAgICBU c2VnK1VNQSAgICAgIDB4MDEwMDAwMDANCisgIC8vIDB4RTAwMDAwMDAgICAgUGNpRXhCYXJCYXNl ICAweDEwMDAwMDAwDQorICAvLyAweEYwMDAwMDAwICAgIFBjaUJhc2UgICAgICAgMHgwQzAwMDAw MA0KKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAgLy8gbWF4KHRvcCwgMmcpICBQQ0kgTU1JTyAgMHhGQzAwMDAwMCAtIG1heCh0b3AsIDJn KQ0KKyAgLy8gMHhGQzAwMDAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCBN Qg0KKyAgLy8gMHhGRUMwMDAwMCAgICBJTy1BUElDICAgICAgICAgICAgICAgICAgICAgICAgNCBL Qg0KKyAgLy8gMHhGRUMwMTAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyMCBL Qg0KKyAgLy8gMHhGRUQwMDAwMCAgICBIUEVUICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBL Qg0KKyAgLy8gMHhGRUQwMDQwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMSBL Qg0KKyAgLy8gMHhGRUQxQzAwMCAgICBnYXAgKFBJSVg0KSAvIFJDUkIgKElDSDkpICAgICAxNiBL Qg0KKyAgLy8gMHhGRUQyMDAwMCAgICBnYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5NiBL Qg0KKyAgLy8gMHhGRUUwMDAwMCAgICBMQVBJQyAgICAgICAgICAgICAgICAgICAgICAgICAgMSBN Qg0KKyAgLy8NCisgIFBjaVNpemUgPSAweEZDMDAwMDAwIC0gUGNpQmFzZTsNCisgIEFkZElvTWVt b3J5QmFzZVNpemVIb2IgKFBjaUJhc2UsIFBjaVNpemUpOw0KKyAgUGNkU2V0NjQgKFBjZFBjaU1t aW8zMkJhc2UsIFBjaUJhc2UpOw0KKyAgUGNkU2V0NjQgKFBjZFBjaU1taW8zMlNpemUsIFBjaVNp emUpOw0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoMHhGRUMwMDAwMCwgU0laRV80S0IpOw0K KyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoMHhGRUQwMDAwMCwgU0laRV8xS0IpOw0KKyAgaWYg KG1Ib3N0QnJpZGdlRGV2SWQgPT0gSU5URUxfSUNIMTBfREVWSUNFX0lEKSB7DQorICAgIEFkZElv TWVtb3J5QmFzZVNpemVIb2IgKElDSDEwX1JPT1RfQ09NUExFWF9CQVNFLCBTSVpFXzE2S0IpOw0K KyAgICAvLw0KKyAgICAvLyBOb3RlOiB0aGVyZSBzaG91bGQgYmUgYW4NCisgICAgLy8NCisgICAg Ly8gICBBZGRJb01lbW9yeUJhc2VTaXplSG9iIChQY2lFeEJhckJhc2UsIFNJWkVfMjU2TUIpOw0K KyAgICAvLyAgIEJ1aWxkTWVtb3J5QWxsb2NhdGlvbkhvYiAoUGNpRXhCYXJCYXNlLCBTSVpFXzI1 Nk1CLCBFZmlNZW1vcnlNYXBwZWRJTyk7DQorICAgIC8vDQorICAgIC8vIGNhbGwgYmVsb3csIGp1 c3QgbGlrZSB0aGUgb25lIGFib3ZlIGZvciBSQ0JBLiBIb3dldmVyLCBMaW51eCBpbnNpc3RzDQor ICAgIC8vIHRoYXQgdGhlIE1NQ09ORklHIGFyZWEgYmUgbWFya2VkIGluIHRoZSBFODIwIG9yIFVF RkkgbWVtb3J5IG1hcCBhcw0KKyAgICAvLyAicmVzZXJ2ZWQgbWVtb3J5IiAtLSBMaW51eCBkb2Vz IG5vdCBjb250ZW50IGl0c2VsZiB3aXRoIGEgc2ltcGxlIGdhcA0KKyAgICAvLyBpbiB0aGUgbWVt b3J5IG1hcCB3aGVyZXZlciB0aGUgTUNGRyBBQ1BJIHRhYmxlIHBvaW50cyB0by4NCisgICAgLy8N CisgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIGEgc2FmZXR5IG1lYXN1cmUuIFRoZSBQQ0kgRmly bXdhcmUgU3BlY2lmaWNhdGlvbg0KKyAgICAvLyAocmV2IDMuMSkgc2F5cyBpbiA0LjEuMi4gIk1D RkcgVGFibGUgRGVzY3JpcHRpb24iOiAiVGhlIHJlc291cmNlcyBjYW4NCisgICAgLy8gKm9wdGlv bmFsbHkqIGJlIHJldHVybmVkIGluIFsuLi5dIEVGSUdldE1lbW9yeU1hcCBhcyByZXNlcnZlZCBt ZW1vcnkNCisgICAgLy8gWy4uLl0iLiAoRW1waGFzaXMgYWRkZWQgaGVyZS4pDQorICAgIC8vDQor ICAgIC8vIE5vcm1hbGx5IHdlIGFkZCBtZW1vcnkgcmVzb3VyY2UgZGVzY3JpcHRvciBIT0JzIGlu DQorICAgIC8vIFFlbXVJbml0aWFsaXplUmFtKCksIGFuZCBwcmUtYWxsb2NhdGUgZnJvbSB0aG9z ZSB3aXRoIG1lbW9yeQ0KKyAgICAvLyBhbGxvY2F0aW9uIEhPQnMgaW4gSW5pdGlhbGl6ZVJhbVJl Z2lvbnMoKS4gSG93ZXZlciwgdGhlIE1NQ09ORklHIGFyZWENCisgICAgLy8gaXMgbW9zdCBkZWZp bml0ZWx5IG5vdCBSQU07IHNvLCBhcyBhbiBleGNlcHRpb24sIGNvdmVyIGl0IHdpdGgNCisgICAg Ly8gdW5jYWNoZWFibGUgcmVzZXJ2ZWQgbWVtb3J5IHJpZ2h0IGhlcmUuDQorICAgIC8vDQorICAg ICAgQWRkUmVzZXJ2ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoUGNpRXhCYXJCYXNlLCBTSVpFXzI1Nk1C LCBGQUxTRSk7DQorICAgICAgQnVpbGRNZW1vcnlBbGxvY2F0aW9uSG9iIChQY2lFeEJhckJhc2Us IFNJWkVfMjU2TUIsDQorICAgICAgICBFZmlSZXNlcnZlZE1lbW9yeVR5cGUpOw0KKyAgfQ0KKyAg QWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoUGNkR2V0MzIoUGNkQ3B1TG9jYWxBcGljQmFzZUFkZHJl c3MpLCBTSVpFXzFNQik7DQorDQorICAvLyBBZGQgUENJIElPIFBvcnQgc3BhY2UgYXZhaWxhYmxl IGZvciBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbnMuDQorICAvLw0KKyAgQnVpbGRSZXNvdXJjZURl c2NyaXB0b3JIb2IgKA0KKyAgICBFRklfUkVTT1VSQ0VfSU8sDQorICAgIEVGSV9SRVNPVVJDRV9B VFRSSUJVVEVfUFJFU0VOVCAgICAgfA0KKyAgICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0lOSVRJ QUxJWkVELA0KKyAgICBQY2lJb0Jhc2UsDQorICAgIFBjaUlvU2l6ZQ0KKyAgICApOw0KKyAgUGNk U2V0NjQgKFBjZFBjaUlvQmFzZSwgUGNpSW9CYXNlKTsNCisgIFBjZFNldDY0IChQY2RQY2lJb1Np emUsIFBjaUlvU2l6ZSk7DQorDQorICAvLw0KKyAgLy8gQWRkIGZsYXNoIHJhbmdlLg0KKyAgLy8N CisgIEFkZEZsYXNoRGV2aWNlUmFuZ2UgKFBjZEdldDMyKFBjZEZsYXNoQXJlYUJhc2VBZGRyZXNz KSwgUGNkR2V0MzIoUGNkRmxhc2hBcmVhU2l6ZSkpOw0KKyAgLy8NCisgIC8vIFZpZGVvIG1lbW9y eSAvIEFCU0VHDQorICAvLw0KKyAgQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoMHgwQTAwMDAsIDB4 MjAwMDApOw0KKyAgLy8NCisgIC8vIExlZ2FjeSBCSU9TIHJlZ2lvbi4NCisgIC8vDQorICBBZGRS ZXNlcnZlZE1lbW9yeUJhc2VTaXplSG9iICgweEMwMDAwLCAweDQwMDAwLCBUUlVFKTsNCit9DQor DQorVk9JRA0KK01pc2NJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQorICApDQorew0KKyAgVUlO VE4gICAgICAgICBQbUNtZDsNCisgIFVJTlROICAgICAgICAgUG1iYTsNCisgIFVJTlQzMiAgICAg ICAgUG1iYUFuZFZhbDsNCisgIFVJTlQzMiAgICAgICAgUG1iYU9yVmFsOw0KKyAgVUlOVE4gICAg ICAgICBBY3BpQ3RsUmVnOw0KKyAgVUlOVDggICAgICAgICBBY3BpRW5CaXQ7DQorDQorICAvLw0K KyAgLy8gRGlzYWJsZSBBMjAgTWFzaw0KKyAgLy8NCisgIElvT3I4ICgweDkyLCBCSVQxKTsNCisN CisgIC8vDQorICAvLyBCdWlsZCB0aGUgQ1BVIEhPQiB3aXRoIGd1ZXN0IFJBTSBzaXplIGRlcGVu ZGVudCBhZGRyZXNzIHdpZHRoIGFuZCAxNi1iaXRzDQorICAvLyBvZiBJTyBzcGFjZS4gKFNpZGUg bm90ZTogdW5saWtlIG90aGVyIEhPQnMsIHRoZSBDUFUgSE9CIGlzIG5lZWRlZCBkdXJpbmcNCisg IC8vIFMzIHJlc3VtZSBhcyB3ZWxsLCBzbyB3ZSBidWlsZCBpdCB1bmNvbmRpdGlvbmFsbHkuKQ0K KyAgLy8NCisgIEJ1aWxkQ3B1SG9iIChtUGh5c01lbUFkZHJlc3NXaWR0aCwgMTYpOw0KKw0KKyAg Ly8NCisgIC8vIERldGVybWluZSBwbGF0Zm9ybSB0eXBlIGFuZCBzYXZlIEhvc3QgQnJpZGdlIERJ RCB0byBQQ0QNCisgIC8vDQorICBzd2l0Y2ggKG1Ib3N0QnJpZGdlRGV2SWQpIHsNCisgICAgY2Fz ZSBJTlRFTF84MjQ0MV9ERVZJQ0VfSUQ6DQorICAgICAgUG1DbWQgICAgICA9IFBPV0VSX01HTVRf UkVHSVNURVJfUElJWDQgKFBDSV9DT01NQU5EX09GRlNFVCk7DQorICAgICAgUG1iYSAgICAgICA9 IFBPV0VSX01HTVRfUkVHSVNURVJfUElJWDQgKFBJSVg0X1BNQkEpOw0KKyAgICAgIFBtYmFBbmRW YWwgPSB+KFVJTlQzMilQSUlYNF9QTUJBX01BU0s7DQorICAgICAgUG1iYU9yVmFsICA9IFBJSVg0 X1BNQkFfVkFMVUU7DQorICAgICAgQWNwaUN0bFJlZyA9IFBPV0VSX01HTVRfUkVHSVNURVJfUElJ WDQgKFBJSVg0X1BNUkVHTUlTQyk7DQorICAgICAgQWNwaUVuQml0ICA9IFBJSVg0X1BNUkVHTUlT Q19QTUlPU0U7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgSU5URUxfSUNIMTBfREVWSUNFX0lE Og0KKyAgICAgIFBtQ21kICAgICAgPSBQT1dFUl9NR01UX1JFR0lTVEVSX0lDSDEwIChQQ0lfQ09N TUFORF9PRkZTRVQpOw0KKyAgICAgIFBtYmEgICAgICAgPSBQT1dFUl9NR01UX1JFR0lTVEVSX0lD SDEwIChJQ0gxMF9QTUJBU0UpOw0KKyAgICAgIFBtYmFBbmRWYWwgPSB+KFVJTlQzMilJQ0gxMF9Q TUJBU0VfTUFTSzsNCisgICAgICBQbWJhT3JWYWwgID0gSUNIMTBfUE1CQVNFX1ZBTFVFOw0KKyAg ICAgIEFjcGlDdGxSZWcgPSBQT1dFUl9NR01UX1JFR0lTVEVSX0lDSDEwIChJQ0gxMF9BQ1BJX0NO VEwpOw0KKyAgICAgIEFjcGlFbkJpdCAgPSBJQ0gxMF9BQ1BJX0NOVExfQUNQSV9FTjsNCisgICAg ICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiJWE6 IFVua25vd24gSG9zdCBCcmlkZ2UgRGV2aWNlIElEOiAweCUwNHhcbiIsDQorICAgICAgICBfX0ZV TkNUSU9OX18sIG1Ib3N0QnJpZGdlRGV2SWQpKTsNCisgICAgICBBU1NFUlQgKEZBTFNFKTsNCisg ICAgICByZXR1cm47DQorICB9DQorICBQY2RTZXQxNiAoUGNkU2ltaWNzWDU4SG9zdEJyaWRnZVBj aURldklkLCBtSG9zdEJyaWRnZURldklkKTsNCisNCisgIC8vDQorICAvLyBJZiB0aGUgYXBwcm9w cmlhdGUgSU9zcGFjZSBlbmFibGUgYml0IGlzIHNldCwgYXNzdW1lIHRoZSBBQ1BJIFBNQkENCisg IC8vIGhhcyBiZWVuIGNvbmZpZ3VyZWQgYW5kIHNraXAgdGhlIHNldHVwIGhlcmUuDQorICAvLyBU aGlzIG1hdGNoZXMgdGhlIGxvZ2ljIGluIEFjcGlUaW1lckxpYkNvbnN0cnVjdG9yICgpLg0KKyAg Ly8NCisgIGlmICgoUGNpUmVhZDggKEFjcGlDdGxSZWcpICYgQWNwaUVuQml0KSA9PSAwKSB7DQor ICAgIC8vDQorICAgIC8vIFRoZSBQRUkgcGhhc2Ugc2hvdWxkIGJlIGV4aXRlZCB3aXRoIGZ1bGx5 IGFjY2Vzc2liZSBBQ1BJIFBNIElPIHNwYWNlOg0KKyAgICAvLyAxLiBzZXQgUE1CQQ0KKyAgICAv Lw0KKyAgICBQY2lBbmRUaGVuT3IzMiAoUG1iYSwgUG1iYUFuZFZhbCwgUG1iYU9yVmFsKTsNCisN CisgICAgLy8NCisgICAgLy8gMi4gc2V0IFBDSUNNRC9JT1NFDQorICAgIC8vDQorICAgIFBjaU9y OCAoUG1DbWQsIEVGSV9QQ0lfQ09NTUFORF9JT19TUEFDRSk7DQorDQorICAgIC8vDQorICAgIC8v IDMuIHNldCBBQ1BJIFBNIElPIGVuYWJsZSBiaXQgKFBNUkVHTUlTQzpQTUlPU0Ugb3IgQUNQSV9D TlRMOkFDUElfRU4pDQorICAgIC8vDQorICAgIFBjaU9yOCAoQWNwaUN0bFJlZywgQWNwaUVuQml0 KTsNCisgIH0NCisNCisgIGlmIChtSG9zdEJyaWRnZURldklkID09IElOVEVMX0lDSDEwX0RFVklD RV9JRCkgew0KKyAgICAvLw0KKyAgICAvLyBTZXQgUm9vdCBDb21wbGV4IFJlZ2lzdGVyIEJsb2Nr IEJBUg0KKyAgICAvLw0KKyAgICBQY2lXcml0ZTMyICgNCisgICAgICBQT1dFUl9NR01UX1JFR0lT VEVSX0lDSDEwIChJQ0gxMF9SQ0JBKSwNCisgICAgICBJQ0gxMF9ST09UX0NPTVBMRVhfQkFTRSB8 IElDSDEwX1JDQkFfRU4NCisgICAgICApOw0KKw0KKyAgfQ0KKyAgLy8NCisgIC8vIFNldCB0aGUg UE0gSS9PIGJhc2UgYWRkcmVzcyB0byAweDQwMA0KKyAgLy8NCisgIFBjaUFuZFRoZW5PcjMyICgN CisgICAgUENJX0xJQl9BRERSRVNTICgNCisgICAgICAwLA0KKyAgICAgIDMxLA0KKyAgICAgIDAs DQorICAgICAgMHg0MA0KKyAgICAgICksDQorICAgIChVSU5UMzIpIH4weGZjMCwgSUNIMTBfUE1C QVNFX1ZBTFVFDQorICAgICk7DQorICAvLw0KKyAgLy8gRW5hYmxlIEFIQ0kgYW5kIGFsbCBwb3J0 cyBvbiB0aGUgU0FUQSBjb250cm9sbGVyLg0KKyAgLy8NCisgIC8vIEFkZHJlc3MgTUFQIFJlZywg c2V0dGluZyBBSENJIG1vZGUNCisgIC8vDQorICBQY2lPcjE2IChQQ0lfTElCX0FERFJFU1MgKDAs IDMxLCAyLCAweDkwKSwgMHgwMDYwKTsNCisgIC8vDQorICAvL0VuYWJsaW5nIFBvcnRzIDAtNQ0K KyAgLy8NCisgIFBjaU9yMTYgKFBDSV9MSUJfQUREUkVTUyAoMCwgMzEsIDIsIDB4OTIpLCAweDAw M0YpOw0KKyAgLy8NCisgIC8vRGlzYWJsaW5nIFNhdGEgQ29udHJvbGxlciAyLCBiaXQgMjUgPSAx LCBiaXQgMCA9IDENCisgIC8vDQorICBNbWlvV3JpdGUzMigweEZFRDFGNDE4LCAweDAyMDAwMDAx KTsNCisgIC8vDQorICAvL0VuYWJsZSBIUEVUIGF0IEZFRDBfMDAwMGgg4oCTIEZFRDBfMDNGRmgN CisgIC8vDQorICBNbWlvV3JpdGU4KElDSDEwX1JPT1RfQ09NUExFWF9CQVNFICsgMHgzNDA0LCAw eDgwKTsNCisgIC8vDQorICAvL0NvbmZpZyBhbmQgZW5hYmxlIEFQSUMNCisgIC8vDQorICBNbWlv V3JpdGUzMigweEZFQzAwMDAwICsgMFgwLCAwKTsNCisgIE1taW9Xcml0ZTMyKDB4RkVDMDAwMDAg KyAwWDEwLCBQY2RHZXQ4KFBjZElvQXBpY0lkKTw8MjQpOw0KKyAgTW1pb1dyaXRlOChJQ0gxMF9S T09UX0NPTVBMRVhfQkFTRSArIDB4MzFGRiwgMHgwMSk7DQorfQ0KKw0KKw0KK1ZPSUQNCitCb290 TW9kZUluaXRpYWxpemF0aW9uICgNCisgIFZPSUQNCisgICkNCit7DQorICBFRklfU1RBVFVTICAg IFN0YXR1czsNCisNCisgREVCVUcoKEVGSV9EX0lORk8sICJtb2RlVmFsdWUgPSAleFxuIiwgSW9C aXRGaWVsZFJlYWQxNihJQ0gxMF9QTUJBU0VfSU8gKyA0LCAxMCwgMTIpKSk7DQorICBpZiAoSW9C aXRGaWVsZFJlYWQxNihJQ0gxMF9QTUJBU0VfSU8gKyA0LCAxMCwgMTIpID09IDB4NSkgew0KKyAg ICBtQm9vdE1vZGUgPSBCT09UX09OX1MzX1JFU1VNRTsNCisgIH0NCisNCisgIFN0YXR1cyA9IFBl aVNlcnZpY2VzU2V0Qm9vdE1vZGUgKG1Cb290TW9kZSk7DQorICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KKw0KKyAgU3RhdHVzID0gUGVpU2VydmljZXNJbnN0YWxsUHBpIChtUHBpQm9vdE1v ZGUpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCit9DQorDQorDQorVk9JRA0KK1Jl c2VydmVFbXVWYXJpYWJsZU52U3RvcmUgKA0KKyAgKQ0KK3sNCisgIEVGSV9QSFlTSUNBTF9BRERS RVNTIFZhcmlhYmxlU3RvcmU7DQorDQorICAvLw0KKyAgLy8gQWxsb2NhdGUgc3RvcmFnZSBmb3Ig TlYgdmFyaWFibGVzIGVhcmx5IG9uIHNvIGl0IHdpbGwgYmUNCisgIC8vIGF0IGEgY29uc2lzdGVu dCBhZGRyZXNzLiAgU2luY2UgVk0gbWVtb3J5IGlzIHByZXNlcnZlZA0KKyAgLy8gYWNyb3NzIHJl Ym9vdHMsIHRoaXMgYWxsb3dzIHRoZSBOViB2YXJpYWJsZSBzdG9yYWdlIHRvIHN1cnZpdmUNCisg IC8vIGEgVk0gcmVib290Lg0KKyAgLy8NCisgIFZhcmlhYmxlU3RvcmUgPQ0KKyAgICAoRUZJX1BI WVNJQ0FMX0FERFJFU1MpKFVJTlROKQ0KKyAgICAgIEFsbG9jYXRlUnVudGltZVBhZ2VzICgNCisg ICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTICgyICogUGNkR2V0MzIgKFBjZEZsYXNoTnZTdG9yYWdl RnR3U3BhcmVTaXplKSkNCisgICAgICAgICk7DQorICBERUJVRyAoKEVGSV9EX0lORk8sDQorICAg ICAgICAgICJSZXNlcnZlZCB2YXJpYWJsZSBzdG9yZSBtZW1vcnk6IDB4JWxYOyBzaXplOiAlZGti XG4iLA0KKyAgICAgICAgICBWYXJpYWJsZVN0b3JlLA0KKyAgICAgICAgICAoMiAqIFBjZEdldDMy IChQY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZSkpIC8gMTAyNA0KKyAgICAgICAgKSk7DQor ICBQY2RTZXQ2NCAoUGNkRW11VmFyaWFibGVOdlN0b3JlUmVzZXJ2ZWQsIFZhcmlhYmxlU3RvcmUp Ow0KK30NCisNCisNCitWT0lEDQorU2ltaWNzVmVyc2lvbkNoZWNrKA0KKyAgVk9JRA0KKyAgKQ0K K3sNCisNCisgIFVJTlROICAgICAgICAgICBQY2lBZGRyUHRyOw0KKyAgVUlOVDggICAgICAgICAg IENhcE9mZnNldDsNCisgIFNUQVRJQyBDSEFSOCAgICBTaW1pY3NTdHJbMHgxMDBdOw0KKyAgVUlO VE4gICAgICAgICAgIGk7DQorICBVSU5UMzIgICAgICAgICAgTWFqb3JWZXJzaW9uOw0KKyAgVUlO VDMyICAgICAgICAgIE1pbm9yVmVyc2lvbjsNCisgIFVJTlQzMiAgICAgICAgICBNb2RlbE51bWJl cjsNCisNCisgIFBjaUFkZHJQdHIgPSBQQ0lfTElCX0FERFJFU1MoMCwgU0lNSUNTX1NJREVCQU5E UENJX0RFViwgU0lNSUNTX1NJREVCQU5EUENJX0ZVTkMsIDApOw0KKyAgQ2FwT2Zmc2V0ID0gUGNp UmVhZDgoUGNpQWRkclB0ciArIFBDSV9DQVBCSUxJVFlfUE9JTlRFUl9PRkZTRVQpOw0KKyAgaWYg KENhcE9mZnNldCAhPSAweEZGKSB7DQorICAgIE1vZGVsTnVtYmVyID0gUGNpUmVhZDMyKFBjaUFk ZHJQdHIgKyBDYXBPZmZzZXQgKyA0KTsNCisgICAgTWFqb3JWZXJzaW9uID0gUGNpUmVhZDMyKFBj aUFkZHJQdHIgKyBDYXBPZmZzZXQgKyA4KTsNCisgICAgTWlub3JWZXJzaW9uID0gUGNpUmVhZDMy KFBjaUFkZHJQdHIgKyBDYXBPZmZzZXQgKyAweGMpOw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgMHg4 MDsgaSsrKSB7DQorICAgICAgU2ltaWNzU3RyW2ldID0gUGNpUmVhZDgoUGNpQWRkclB0ciArIENh cE9mZnNldCArIDB4MTAgKyBpKTsNCisgICAgfQ0KKyAgICBERUJVRygoRUZJX0RfSU5GTywgIj09 PT09PT09PT09PT1TSU1JQ1MgVmVyc2lvbiBpbmZvPT09PT09PT09PT09PVxuIikpOw0KKyAgICBE RUJVRygoRUZJX0RfSU5GTywgIk1vZGVsIG51bWJlciA9ICVkXG4iLCBNb2RlbE51bWJlcikpOw0K KyAgICBERUJVRygoRUZJX0RfSU5GTywgIk1ham9yIHZlcnNpb24gPSAlZFxuIiwgTWFqb3JWZXJz aW9uKSk7DQorICAgIERFQlVHKChFRklfRF9JTkZPLCAiTWlub3IgdmVyc2lvbiA9ICVkXG4iLCBN aW5vclZlcnNpb24pKTsNCisgICAgREVCVUcoKEVGSV9EX0lORk8sICIlYVxuIiwgU2ltaWNzU3Ry KSk7DQorICAgIERFQlVHKChFRklfRF9JTkZPLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09XG4iKSk7DQorICB9DQorfQ0KKw0KK1ZPSUQNCitEZWJ1Z0R1bXBD bW9zICgNCisgIFZPSUQNCisgICkNCit7DQorICBVSU5UMzIgTG9vcDsNCisNCisgIERFQlVHICgo RUZJX0RfSU5GTywgIkNNT1M6XG4iKSk7DQorDQorICBmb3IgKExvb3AgPSAwOyBMb29wIDwgMHg4 MDsgTG9vcCsrKSB7DQorICAgIGlmICgoTG9vcCAlIDB4MTApID09IDApIHsNCisgICAgICBERUJV RyAoKEVGSV9EX0lORk8sICIlMDJ4OiIsIExvb3ApKTsNCisgICAgfQ0KKyAgICBERUJVRyAoKEVG SV9EX0lORk8sICIgJTAyeCIsIENtb3NSZWFkOCAoTG9vcCkpKTsNCisgICAgaWYgKChMb29wICUg MHgxMCkgPT0gMHhmKSB7DQorICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiXG4iKSk7DQorICAg IH0NCisgIH0NCit9DQorDQorDQorLyoqDQorICBGZXRjaCB0aGUgbnVtYmVyIG9mIGJvb3QgQ1BV cyBmcm9tIFFFTVUgYW5kIGV4cG9zZSBpdCB0byBVZWZpQ3B1UGtnIG1vZHVsZXMuDQorICBTZXQg dGhlIG1NYXhDcHVDb3VudCB2YXJpYWJsZS4NCisqKi8NCitWT0lEDQorTWF4Q3B1Q291bnRJbml0 aWFsaXphdGlvbiAoDQorICBWT0lEDQorICApDQorew0KKyAgbU1heENwdUNvdW50ID0gUGNkR2V0 MzIgKFBjZENwdU1heExvZ2ljYWxQcm9jZXNzb3JOdW1iZXIpOw0KKyAgcmV0dXJuOw0KK30NCisN CisvKioNCisgIERldGVybWluZSBpZiBTMyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgZW5hYmxlZC4N CisNCisgIEByZXR2YWwgIFRSVUUgICBJZiBTMyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgZW5hYmxl ZC4gT3RoZXIgZnVuY3Rpb25zIGluIHRoaXMNCisgIGxpYnJhcnkgbWF5IGJlIGNhbGxlZCAoc3Vi amVjdCB0byB0aGVpciBpbmRpdmlkdWFsDQorICByZXN0cmljdGlvbnMpLg0KKw0KKyAgRkFMU0Ug IE90aGVyd2lzZS4gVGhpcyBpbmNsdWRlcyB1bmF2YWlsYWJpbGl0eSBvZiB0aGUgZmlybXdhcmUN CisgIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLiBObyBvdGhlciBmdW5jdGlvbiBpbiB0aGlzIGxp YnJhcnkNCisgIG11c3QgYmUgY2FsbGVkLg0KKyoqLw0KK0JPT0xFQU4NCitFRklBUEkNCitRZW11 RndDZmdTM0VuYWJsZWQoDQorICBWT0lEDQorKQ0KK3sNCisgIC8vVE8gRE8gSUYgTkVFREVEDQor ICByZXR1cm4gVFJVRTsNCit9DQorDQorLyoqDQorICBQZXJmb3JtIFBsYXRmb3JtIFBFSSBpbml0 aWFsaXphdGlvbi4NCisNCisgIEBwYXJhbSAgRmlsZUhhbmRsZSAgICAgIEhhbmRsZSBvZiB0aGUg ZmlsZSBiZWluZyBpbnZva2VkLg0KKyAgQHBhcmFtICBQZWlTZXJ2aWNlcyAgICAgRGVzY3JpYmVz IHRoZSBsaXN0IG9mIHBvc3NpYmxlIFBFSSBTZXJ2aWNlcy4NCisNCisgIEByZXR1cm4gRUZJX1NV Q0NFU1MgICAgIFRoZSBQRUlNIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitF RklfU1RBVFVTDQorRUZJQVBJDQorSW5pdGlhbGl6ZVBsYXRmb3JtICgNCisgIElOICAgICAgIEVG SV9QRUlfRklMRV9IQU5ETEUgIEZpbGVIYW5kbGUsDQorICBJTiBDT05TVCBFRklfUEVJX1NFUlZJ Q0VTICAgICAqKlBlaVNlcnZpY2VzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7 DQorDQorICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiUGxhdGZvcm0gUEVJTSBMb2FkZWRcbiIpKTsN CisNCisgIFNpbWljc1ZlcnNpb25DaGVjayAoKTsNCisgIERlYnVnRHVtcENtb3MgKCk7DQorDQor ICBpZiAoUWVtdUZ3Q2ZnUzNFbmFibGVkICgpKSB7DQorICAgIERFQlVHICgoRUZJX0RfSU5GTywg IlMzIHN1cHBvcnQgd2FzIGRldGVjdGVkIG9uIFNJTUlDU1xuIikpOw0KKyAgICBtUzNTdXBwb3J0 ZWQgPSBUUlVFOw0KKyAgICBTdGF0dXMgPSBQY2RTZXRCb29sUyAoUGNkQWNwaVMzRW5hYmxlLCBU UlVFKTsNCisgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisgIH0NCisgIEFkZHJlc3NX aWR0aEluaXRpYWxpemF0aW9uICgpOw0KKyAgTWF4Q3B1Q291bnRJbml0aWFsaXphdGlvbiAoKTsN CisNCisgIG1Ib3N0QnJpZGdlRGV2SWQgPSBQY2lSZWFkMTYoU0lNSUNTX0hPU1RCUklER0VfRElE KTsNCisNCisgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RTbW1TbXJhbVJlcXVpcmUpKSB7DQorICAg IFg1OFRzZWdNYnl0ZXNJbml0aWFsaXphdGlvbiAoKTsNCisgIH0NCisNCisgIFB1Ymxpc2hQZWlN ZW1vcnkgKCk7DQorDQorICBJbml0aWFsaXplUmFtUmVnaW9ucyAoKTsNCisNCisgIGlmIChtQm9v dE1vZGUgIT0gQk9PVF9PTl9TM19SRVNVTUUpIHsNCisgICAgaWYgKCFGZWF0dXJlUGNkR2V0IChQ Y2RTbW1TbXJhbVJlcXVpcmUpKSB7DQorICAgICAgUmVzZXJ2ZUVtdVZhcmlhYmxlTnZTdG9yZSAo KTsNCisgICAgfQ0KKyAgICBNZW1NYXBJbml0aWFsaXphdGlvbiAoKTsNCisgIH0NCisNCisgIE1p c2NJbml0aWFsaXphdGlvbiAoKTsNCisgIEluc3RhbGxGZWF0dXJlQ29udHJvbENhbGxiYWNrICgp Ow0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9J bnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZvcm1E eGUuYyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TbWJpb3NQbGF0Zm9ybUR4 ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMC4uNzE2NWMwYTBjMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmMNCkBA IC0wLDAgKzEsMTQ4IEBADQorLyoqIEBmaWxlDQorICBUaGlzIGRyaXZlciBpbnN0YWxscyBTTUJJ T1MgaW5mb3JtYXRpb24gZm9yIFFTUA0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDExLCBCZWkgR3Vh biA8Z2J0anU4NUBnbWFpbC5jb20+DQorICBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDE5LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorDQorICBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlICJT bWJpb3NQbGF0Zm9ybUR4ZS5oIg0KKw0KKw0KKy8qKg0KK1JlYWRzIDgtYml0cyBvZiBDTU9TIGRh dGEuDQorDQorUmVhZHMgdGhlIDgtYml0cyBvZiBDTU9TIGRhdGEgYXQgdGhlIGxvY2F0aW9uIHNw ZWNpZmllZCBieSBJbmRleC4NCitUaGUgOC1iaXQgcmVhZCB2YWx1ZSBpcyByZXR1cm5lZC4NCisN CitAcGFyYW0gIEluZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byByZWFkLg0KKw0KK0ByZXR1cm4g VGhlIHZhbHVlIHJlYWQuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitDbW9zUmVhZDgoDQor ICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXgNCisgICkNCit7DQorICBJ b1dyaXRlOCgweDcwLCAoVUlOVDgpSW5kZXgpOw0KKyAgcmV0dXJuIElvUmVhZDgoMHg3MSk7DQor fQ0KKw0KK1VJTlQzMg0KK0dldFN5c3RlbU1lbW9yeVNpemVCZWxvdzRnYigNCisgIFZPSUQNCisg ICkNCit7DQorICBVSU5UOCBDbW9zMHgzNDsNCisgIFVJTlQ4IENtb3MweDM1Ow0KKw0KKyAgLy8N CisgIC8vIENNT1MgMHgzNC8weDM1IHNwZWNpZmllcyB0aGUgc3lzdGVtIG1lbW9yeSBhYm92ZSAx NiBNQi4NCisgIC8vICogQ01PUygweDM1KSBpcyB0aGUgaGlnaCBieXRlDQorICAvLyAqIENNT1Mo MHgzNCkgaXMgdGhlIGxvdyBieXRlDQorICAvLyAqIFRoZSBzaXplIGlzIHNwZWNpZmllZCBpbiA2 NGtiIGNodW5rcw0KKyAgLy8gKiBTaW5jZSB0aGlzIGlzIG1lbW9yeSBhYm92ZSAxNk1CLCB0aGUg MTZNQiBtdXN0IGJlIGFkZGVkDQorICAvLyAgIGludG8gdGhlIGNhbGN1bGF0aW9uIHRvIGdldCB0 aGUgdG90YWwgbWVtb3J5IHNpemUuDQorICAvLw0KKw0KKyAgQ21vczB4MzQgPSAoVUlOVDgpQ21v c1JlYWQ4KDB4MzQpOw0KKyAgQ21vczB4MzUgPSAoVUlOVDgpQ21vc1JlYWQ4KDB4MzUpOw0KKw0K KyAgcmV0dXJuIChVSU5UMzIpKCgoVUlOVE4pKChDbW9zMHgzNSA8PCA4KSArIENtb3MweDM0KSA8 PCAxNikgKyBTSVpFXzE2TUIpOw0KK30NCisNCitTVEFUSUMNCitVSU5UNjQNCitHZXRTeXN0ZW1N ZW1vcnlTaXplQWJvdmU0Z2IoDQorICBWT0lEDQorKQ0KK3sNCisgIFVJTlQzMiBTaXplOw0KKyAg VUlOVE4gIENtb3NJbmRleDsNCisNCisgIC8vDQorICAvLyBDTU9TIDB4NWItMHg1ZCBzcGVjaWZp ZXMgdGhlIHN5c3RlbSBtZW1vcnkgYWJvdmUgNEdCIE1CLg0KKyAgLy8gKiBDTU9TKDB4NWQpIGlz IHRoZSBtb3N0IHNpZ25pZmljYW50IHNpemUgYnl0ZQ0KKyAgLy8gKiBDTU9TKDB4NWMpIGlzIHRo ZSBtaWRkbGUgc2l6ZSBieXRlDQorICAvLyAqIENNT1MoMHg1YikgaXMgdGhlIGxlYXN0IHNpZ25p ZmljYW50IHNpemUgYnl0ZQ0KKyAgLy8gKiBUaGUgc2l6ZSBpcyBzcGVjaWZpZWQgaW4gNjRrYiBj aHVua3MNCisgIC8vDQorDQorICBTaXplID0gMDsNCisgIGZvciAoQ21vc0luZGV4ID0gMHg1ZDsg Q21vc0luZGV4ID49IDB4NWI7IENtb3NJbmRleC0tKSB7DQorICAgIFNpemUgPSAoVUlOVDMyKShT aXplIDw8IDgpICsgKFVJTlQzMilDbW9zUmVhZDgoQ21vc0luZGV4KTsNCisgIH0NCisNCisgIHJl dHVybiBMU2hpZnRVNjQoU2l6ZSwgMTYpOw0KK30NCisNCisvKioNCisgIEluc3RhbGxzIFNNQklP UyBpbmZvcm1hdGlvbiBmb3IgU0lNSUNTIFFTUA0KKw0KKyAgQHBhcmFtIEltYWdlSGFuZGxlICAg ICBNb2R1bGUncyBpbWFnZSBoYW5kbGUNCisgIEBwYXJhbSBTeXN0ZW1UYWJsZSAgICAgUG9pbnRl ciBvZiBFRklfU1lTVEVNX1RBQkxFDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFNtYmlv cyBkYXRhIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQNCisgIEByZXR2YWwgT3RoZXIgICAgICAgICAg U21iaW9zIGRhdGEgd2FzIG5vdCBpbnN0YWxsZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJ QVBJDQorU21iaW9zVGFibGVQdWJsaXNoRW50cnkgKA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg ICAgSW1hZ2VIYW5kbGUsDQorICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAqU3lzdGVtVGFibGUN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9T TUJJT1NfUFJPVE9DT0wgICAgICAgKlNtYmlvczsNCisgIFNNQklPU19UQUJMRV9UWVBFMTkgICAg ICAgKlR5cGUxOVJlY29yZDsNCisgIEVGSV9TTUJJT1NfSEFORExFICAgICAgICAgTWVtQXJyYXlN YXBwZWRBZGRyU21iaW9zSGFuZGxlOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBOdW1T bG90czsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgVG90YWxNZW1vcnlTaXplOw0KKw0K KyAgLy8NCisgIC8vIEZpbmQgdGhlIFNNQklPUyBwcm90b2NvbA0KKyAgLy8NCisgIFN0YXR1cyA9 IGdCUy0+TG9jYXRlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgICZnRWZpU21iaW9zUHJv dG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAgICAgICAgICAg KFZPSUQqKikmU21iaW9zDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisgIC8vDQorICAvLyBHZW5l cmF0ZSBNZW1vcnkgQXJyYXkgTWFwcGVkIEFkZHJlc3MgaW5mbw0KKyAgLy8NCisgIE51bVNsb3Rz ID0gMjsNCisgIFRvdGFsTWVtb3J5U2l6ZSA9IDA7DQorICBUb3RhbE1lbW9yeVNpemUgPSBHZXRT eXN0ZW1NZW1vcnlTaXplQmVsb3c0Z2IoKTsNCisgIFR5cGUxOVJlY29yZCA9IEFsbG9jYXRlUG9v bChzaXplb2YoU01CSU9TX1RBQkxFX1RZUEUxOSkpOw0KKyAgWmVyb01lbShUeXBlMTlSZWNvcmQs IHNpemVvZihTTUJJT1NfVEFCTEVfVFlQRTE5KSk7DQorICBUeXBlMTlSZWNvcmQtPkhkci5UeXBl ID0gRUZJX1NNQklPU19UWVBFX01FTU9SWV9BUlJBWV9NQVBQRURfQUREUkVTUzsNCisgIFR5cGUx OVJlY29yZC0+SGRyLkxlbmd0aCA9IHNpemVvZihTTUJJT1NfVEFCTEVfVFlQRTE5KTsNCisgIFR5 cGUxOVJlY29yZC0+SGRyLkhhbmRsZSA9IDA7DQorICBUeXBlMTlSZWNvcmQtPlN0YXJ0aW5nQWRk cmVzcyA9IDA7DQorICBUeXBlMTlSZWNvcmQtPkVuZGluZ0FkZHJlc3MgPSAoVUlOVDMyKVJTaGlm dFU2NChUb3RhbE1lbW9yeVNpemUsIDEwKSAtIDE7DQorICBUeXBlMTlSZWNvcmQtPk1lbW9yeUFy cmF5SGFuZGxlID0gU01CSU9TX0hBTkRMRV9QSV9SRVNFUlZFRDsNCisgIFR5cGUxOVJlY29yZC0+ UGFydGl0aW9uV2lkdGggPSAoVUlOVDgpKE51bVNsb3RzKTsNCisNCisgIE1lbUFycmF5TWFwcGVk QWRkclNtYmlvc0hhbmRsZSA9IFNNQklPU19IQU5ETEVfUElfUkVTRVJWRUQ7DQorICBTdGF0dXMg PSBTbWJpb3MtPkFkZChTbWJpb3MsIE5VTEwsICZNZW1BcnJheU1hcHBlZEFkZHJTbWJpb3NIYW5k bGUsIChFRklfU01CSU9TX1RBQkxFX0hFQURFUiopVHlwZTE5UmVjb3JkKTsNCisgIEFTU0VSVF9F RklfRVJST1IoU3RhdHVzKTsNCisNCisgIFRvdGFsTWVtb3J5U2l6ZSA9IEdldFN5c3RlbU1lbW9y eVNpemVBYm92ZTRnYigpOw0KKyAgVHlwZTE5UmVjb3JkLT5TdGFydGluZ0FkZHJlc3MgPSAweEZG RkZGRkZGOw0KKyAgVHlwZTE5UmVjb3JkLT5FeHRlbmRlZFN0YXJ0aW5nQWRkcmVzcyA9IDB4RkZG RkZGRkY7DQorICBUeXBlMTlSZWNvcmQtPkV4dGVuZGVkRW5kaW5nQWRkcmVzcyA9IFRvdGFsTWVt b3J5U2l6ZSArIDB4RkZGRkZGRkYgLSAxOw0KKw0KKyAgTWVtQXJyYXlNYXBwZWRBZGRyU21iaW9z SGFuZGxlID0gU01CSU9TX0hBTkRMRV9QSV9SRVNFUlZFRDsNCisgIFN0YXR1cyA9IFNtYmlvcy0+ QWRkKFNtYmlvcywgTlVMTCwgJk1lbUFycmF5TWFwcGVkQWRkclNtYmlvc0hhbmRsZSwgKEVGSV9T TUJJT1NfVEFCTEVfSEVBREVSKilUeXBlMTlSZWNvcmQpOw0KKyAgRnJlZVBvb2woVHlwZTE5UmVj b3JkKTsNCisgIEFTU0VSVF9FRklfRVJST1IoU3RhdHVzKTsNCisNCisgIHJldHVybiBTdGF0dXM7 DQorfQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNs dWRlL0d1aWQvU2ltaWNzQm9hcmRDb25maWcuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9JbmNsdWRlL0d1aWQvU2ltaWNzQm9hcmRDb25maWcuaA0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmFjYjJjNGVlZTQNCi0tLSAvZGV2L251bGwNCisrKyBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0d1aWQvU2ltaWNzQm9h cmRDb25maWcuaA0KQEAgLTAsMCArMSwxOCBAQA0KKy8qKiBAZmlsZQ0KKyAgR1VJRCBmb3IgVUVG SSB2YXJpYWJsZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gU2ltaWNzIEJvYXJkIGNvbmZpZ3VyYXRp b24uDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJlZCBIYXQsIEluYy4NCisgIENvcHlyaWdo dCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0K Kw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8N CisNCisjaWZuZGVmIF9fU0lNSUNTX0JPQVJEX0NPTkZJR19IX18NCisjZGVmaW5lIF9fU0lNSUNT X0JPQVJEX0NPTkZJR19IX18NCisNCisjZGVmaW5lIFNJTUlDU19CT0FSRF9DT05GSUdfR1VJRCBc DQorezB4OGEzMThlMDAsIDB4ZmFmNSwgMHg0OTlmLCB7IDB4OTEsMHg3NSwgMHhjZSwgMHg0ZCwg MHg4ZCwgMHhhNiwgMHg3MCwgMHhhZX19DQorDQorZXh0ZXJuIEVGSV9HVUlEIGdTaW1pY3NCb2Fy ZENvbmZpZ0d1aWQ7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9JNDQwRnhQaWl4NC5oIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFy ZC9JNDQwRnhQaWl4NC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4u YTIyMjU0OTNmNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9JNDQwRnhQaWl4NC5oDQpAQCAtMCww ICsxLDUwIEBADQorLyoqIEBmaWxlDQorICBWYXJpb3VzIHJlZ2lzdGVyIG51bWJlcnMgYW5kIHZh bHVlIGJpdHMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbnM6DQorICAtIEludGVs KFIpIGRhdGFzaGVldCAyOTA1NDktMDAxDQorICAtIEludGVsKFIpIGRhdGFzaGVldCAyOTA1NjIt MDAxDQorICAtIEludGVsKFIpIGRhdGFzaGVldCAyOTc2NTQtMDA2DQorICAtIEludGVsKFIpIGRh dGFzaGVldCAyOTc3MzgtMDE3DQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTUsIFJlZCBIYXQsIElu Yy4NCisgIENvcHlyaWdodCAoYykgMjAxNCwgR2FicmllbCBMLiBTb21sbyA8c29tbG9AY211LmVk dT4NCisgIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIF9fSTQ0MEZYX1BJSVg0X0hfXw0KKyNkZWZpbmUg X19JNDQwRlhfUElJWDRfSF9fDQorDQorI2luY2x1ZGUgPExpYnJhcnkvUGNpTGliLmg+DQorDQor Ly8NCisvLyBIb3N0IEJyaWRnZSBEZXZpY2UgSUQgKERJRCkgdmFsdWUgZm9yIEk0NDBGWA0KKy8v DQorI2RlZmluZSBJTlRFTF84MjQ0MV9ERVZJQ0VfSUQgMHgxMjM3DQorDQorLy8NCisvLyBCL0Qv Ri9UeXBlOiAwLzAvMC9QQ0kNCisvLw0KKyNkZWZpbmUgUE1DX1JFR0lTVEVSX1BJSVg0KE9mZnNl dCkgUENJX0xJQl9BRERSRVNTICgwLCAwLCAwLCAoT2Zmc2V0KSkNCisNCisjZGVmaW5lIFBJSVg0 X1BBTTAgICAgICAgICAgICAgIDB4NTkNCisjZGVmaW5lIFBJSVg0X1BBTTEgICAgICAgICAgICAg IDB4NUENCisjZGVmaW5lIFBJSVg0X1BBTTIgICAgICAgICAgICAgIDB4NUINCisjZGVmaW5lIFBJ SVg0X1BBTTMgICAgICAgICAgICAgIDB4NUMNCisjZGVmaW5lIFBJSVg0X1BBTTQgICAgICAgICAg ICAgIDB4NUQNCisjZGVmaW5lIFBJSVg0X1BBTTUgICAgICAgICAgICAgIDB4NUUNCisjZGVmaW5l IFBJSVg0X1BBTTYgICAgICAgICAgICAgIDB4NUYNCisNCisvLw0KKy8vIEIvRC9GL1R5cGU6IDAv MS8zL1BDSQ0KKy8vDQorI2RlZmluZSBQT1dFUl9NR01UX1JFR0lTVEVSX1BJSVg0KE9mZnNldCkg UENJX0xJQl9BRERSRVNTICgwLCAxLCAzLCAoT2Zmc2V0KSkNCisNCisjZGVmaW5lIFBJSVg0X1BN QkEgICAgICAgICAgICAgMHg0MA0KKyNkZWZpbmUgUElJWDRfUE1CQV9NQVNLICAgICAgICAgIChC SVQxNSB8IEJJVDE0IHwgQklUMTMgfCBCSVQxMiB8IEJJVDExIHwgXA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCSVQxMCB8IEJJVDkgIHwgQklUOCAgfCBCSVQ3ICB8IEJJVDYp DQorDQorI2RlZmluZSBQSUlYNF9QTVJFR01JU0MgICAgICAgIDB4ODANCisjZGVmaW5lIFBJSVg0 X1BNUkVHTUlTQ19QTUlPU0UgICBCSVQwDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0luY2x1ZGUvSW5kdXN0cnlTdGFuZGFyZC9MaW51 eEJ6SW1hZ2UuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0lu ZHVzdHJ5U3RhbmRhcmQvTGludXhCekltYWdlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwLi4yNzA4YjE4OTFkDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9J bnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJkL0xpbnV4QnpJ bWFnZS5oDQpAQCAtMCwwICsxLDE1OSBAQA0KKy8qKiBAZmlsZQ0KKw0KKyAgQ29weXJpZ2h0IChj KSAyMDExIC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisN CisqKi8NCisNCisjaWZuZGVmIF9fTElOVVhfQlpJTUFHRV9IX18NCisjZGVmaW5lIF9fTElOVVhf QlpJTUFHRV9IX18NCisNCisjZGVmaW5lIEJPT1RTSUcgICAgICAgICAweDFGRQ0KKyNkZWZpbmUg U0VUVVBfSERSICAgICAgIDB4NTM3MjY0NDggIC8qIDB4NTM3MjY0NDggPT0gIkhkclMiICovDQor DQorI2RlZmluZSBFODIwX1JBTSAgICAgICAgMQ0KKyNkZWZpbmUgRTgyMF9SRVNFUlZFRCAgIDIN CisjZGVmaW5lIEU4MjBfQUNQSSAgICAgICAzDQorI2RlZmluZSBFODIwX05WUyAgICAgICAgNA0K KyNkZWZpbmUgRTgyMF9VTlVTQUJMRSAgIDUNCisNCisjcHJhZ21hIHBhY2soMSkNCisNCitzdHJ1 Y3Qgc2V0dXBfaGVhZGVyIHsNCisgIFVJTlQ4IHNldHVwX3NlY3M7ICAvKiBTZWN0b3JzIGZvciBz ZXR1cCBjb2RlICovDQorICBVSU5UMTYgcm9vdF9mbGFnczsNCisgIFVJTlQzMiBzeXNfc2l6ZTsN CisgIFVJTlQxNiByYW1fc2l6ZTsNCisgIFVJTlQxNiB2aWRlb19tb2RlOw0KKyAgVUlOVDE2IHJv b3RfZGV2Ow0KKyAgVUlOVDE2IHNpZ25hdHVyZTsgIC8qIEJvb3Qgc2lnbmF0dXJlICovDQorICBV SU5UMTYganVtcDsNCisgIFVJTlQzMiBoZWFkZXI7DQorICBVSU5UMTYgdmVyc2lvbjsNCisgIFVJ TlQxNiBzdV9zd2l0Y2g7DQorICBVSU5UMTYgc2V0dXBfc2VnOw0KKyAgVUlOVDE2IHN0YXJ0X3N5 czsNCisgIFVJTlQxNiBrZXJuZWxfdmVyOw0KKyAgVUlOVDggbG9hZGVyX2lkOw0KKyAgVUlOVDgg bG9hZF9mbGFnczsNCisgIFVJTlQxNiBtb3Zlc2l6ZTsNCisgIFVJTlQzMiBjb2RlMzJfc3RhcnQ7 ICAvKiBTdGFydCBvZiBjb2RlIGxvYWRlZCBoaWdoICovDQorICBVSU5UMzIgcmFtZGlza19zdGFy dDsgIC8qIFN0YXJ0IG9mIGluaXRpYWwgcmFtZGlzayAqLw0KKyAgVUlOVDMyIHJhbWRpc2tfbGVu OyAgLyogTGVuZ3RoIG9mIGluaXRpYWwgcmFtZGlzayAqLw0KKyAgVUlOVDMyIGJvb3RzZWN0X2ts dWRnZTsNCisgIFVJTlQxNiBoZWFwX2VuZDsNCisgIFVJTlQ4IGV4dF9sb2FkZXJfdmVyOyAgLyog RXh0ZW5kZWQgYm9vdCBsb2FkZXIgdmVyc2lvbiAqLw0KKyAgVUlOVDggZXh0X2xvYWRlcl90eXBl OyAvKiBFeHRlbmRlZCBib290IGxvYWRlciBJRCAqLw0KKyAgVUlOVDMyIGNtZF9saW5lX3B0cjsg ICAvKiAzMi1iaXQgcG9pbnRlciB0byB0aGUga2VybmVsIGNvbW1hbmQgbGluZSAqLw0KKyAgVUlO VDMyIHJhbWRpc2tfbWF4OyAgICAvKiBIaWdoZXN0IGxlZ2FsIGluaXRyZCBhZGRyZXNzICovDQor ICBVSU5UMzIga2VybmVsX2FsaWdubWVudDsgIC8qIFBoeXNpY2FsIGFkZHIgYWxpZ25tZW50IHJl cXVpcmVkIGZvciBrZXJuZWwgKi8NCisgIFVJTlQ4IHJlbG9jYXRhYmxlX2tlcm5lbDsgIC8qIFdo ZXRoZXIga2VybmVsIGlzIHJlbG9jYXRhYmxlIG9yIG5vdCAqLw0KKyAgVUlOVDggbWluX2FsaWdu bWVudDsNCisgIFVJTlQxNiB4bG9hZGZsYWdzOw0KKyAgVUlOVDMyIGNtZGxpbmVfc2l6ZTsNCisg IFVJTlQzMiBoYXJkd2FyZV9zdWJhcmNoOw0KKyAgVUlOVDY0IGhhcmR3YXJlX3N1YmFyY2hfZGF0 YTsNCisgIFVJTlQzMiBwYXlsb2FkX29mZnNldDsNCisgIFVJTlQzMiBwYXlsb2FkX2xlbmd0aDsN CisgIFVJTlQ2NCBzZXR1cF9kYXRhOw0KKyAgVUlOVDY0IHByZWZfYWRkcmVzczsNCisgIFVJTlQz MiBpbml0X3NpemU7DQorICBVSU5UMzIgaGFuZG92ZXJfb2Zmc2V0Ow0KK307DQorDQorc3RydWN0 IGVmaV9pbmZvIHsNCisgIFVJTlQzMiBlZmlfbG9hZGVyX3NpZ25hdHVyZTsNCisgIFVJTlQzMiBl Zmlfc3lzdGFiOw0KKyAgVUlOVDMyIGVmaV9tZW1kZXNjX3NpemU7DQorICBVSU5UMzIgZWZpX21l bWRlc2NfdmVyc2lvbjsNCisgIFVJTlQzMiBlZmlfbWVtbWFwOw0KKyAgVUlOVDMyIGVmaV9tZW1t YXBfc2l6ZTsNCisgIFVJTlQzMiBlZmlfc3lzdGFiX2hpOw0KKyAgVUlOVDMyIGVmaV9tZW1tYXBf aGk7DQorfTsNCisNCitzdHJ1Y3QgZTgyMF9lbnRyeSB7DQorICBVSU5UNjQgYWRkcjsgIC8qIHN0 YXJ0IG9mIG1lbW9yeSBzZWdtZW50ICovDQorICBVSU5UNjQgc2l6ZTsgIC8qIHNpemUgb2YgbWVt b3J5IHNlZ21lbnQgKi8NCisgIFVJTlQzMiB0eXBlOyAgLyogdHlwZSBvZiBtZW1vcnkgc2VnbWVu dCAqLw0KK307DQorDQorc3RydWN0IHNjcmVlbl9pbmZvIHsNCisgICAgICAgIFVJTlQ4ICBvcmln X3g7ICAgICAgICAgICAvKiAweDAwICovDQorICAgICAgICBVSU5UOCAgb3JpZ195OyAgICAgICAg ICAgLyogMHgwMSAqLw0KKyAgICAgICAgVUlOVDE2IGV4dF9tZW1fazsgICAgICAgIC8qIDB4MDIg Ki8NCisgICAgICAgIFVJTlQxNiBvcmlnX3ZpZGVvX3BhZ2U7ICAvKiAweDA0ICovDQorICAgICAg ICBVSU5UOCAgb3JpZ192aWRlb19tb2RlOyAgLyogMHgwNiAqLw0KKyAgICAgICAgVUlOVDggIG9y aWdfdmlkZW9fY29sczsgIC8qIDB4MDcgKi8NCisgICAgICAgIFVJTlQ4ICBmbGFnczsgICAgICAg ICAgICAvKiAweDA4ICovDQorICAgICAgICBVSU5UOCAgdW51c2VkMjsgICAgICAgICAgLyogMHgw OSAqLw0KKyAgICAgICAgVUlOVDE2IG9yaWdfdmlkZW9fZWdhX2J4Oy8qIDB4MGEgKi8NCisgICAg ICAgIFVJTlQxNiB1bnVzZWQzOyAgICAgICAgICAvKiAweDBjICovDQorICAgICAgICBVSU5UOCAg b3JpZ192aWRlb19saW5lczsgLyogMHgwZSAqLw0KKyAgICAgICAgVUlOVDggIG9yaWdfdmlkZW9f aXNWR0E7IC8qIDB4MGYgKi8NCisgICAgICAgIFVJTlQxNiBvcmlnX3ZpZGVvX3BvaW50czsvKiAw eDEwICovDQorDQorICAvKiBWRVNBIGdyYXBoaWMgbW9kZSAtLSBsaW5lYXIgZnJhbWUgYnVmZmVy ICovDQorICAgICAgICBVSU5UMTYgbGZiX3dpZHRoOyAgICAgICAgLyogMHgxMiAqLw0KKyAgICAg ICAgVUlOVDE2IGxmYl9oZWlnaHQ7ICAgICAgIC8qIDB4MTQgKi8NCisgICAgICAgIFVJTlQxNiBs ZmJfZGVwdGg7ICAgICAgICAvKiAweDE2ICovDQorICAgICAgICBVSU5UMzIgbGZiX2Jhc2U7ICAg ICAgICAgLyogMHgxOCAqLw0KKyAgICAgICAgVUlOVDMyIGxmYl9zaXplOyAgICAgICAgIC8qIDB4 MWMgKi8NCisgICAgICAgIFVJTlQxNiBjbF9tYWdpYywgY2xfb2Zmc2V0OyAvKiAweDIwICovDQor ICAgICAgICBVSU5UMTYgbGZiX2xpbmVsZW5ndGg7ICAgLyogMHgyNCAqLw0KKyAgICAgICAgVUlO VDggIHJlZF9zaXplOyAgICAgICAgIC8qIDB4MjYgKi8NCisgICAgICAgIFVJTlQ4ICByZWRfcG9z OyAgICAgICAgICAvKiAweDI3ICovDQorICAgICAgICBVSU5UOCAgZ3JlZW5fc2l6ZTsgICAgICAg LyogMHgyOCAqLw0KKyAgICAgICAgVUlOVDggIGdyZWVuX3BvczsgICAgICAgIC8qIDB4MjkgKi8N CisgICAgICAgIFVJTlQ4ICBibHVlX3NpemU7ICAgICAgICAvKiAweDJhICovDQorICAgICAgICBV SU5UOCAgYmx1ZV9wb3M7ICAgICAgICAgLyogMHgyYiAqLw0KKyAgICAgICAgVUlOVDggIHJzdmRf c2l6ZTsgICAgICAgIC8qIDB4MmMgKi8NCisgICAgICAgIFVJTlQ4ICByc3ZkX3BvczsgICAgICAg ICAvKiAweDJkICovDQorICAgICAgICBVSU5UMTYgdmVzYXBtX3NlZzsgICAgICAgLyogMHgyZSAq Lw0KKyAgICAgICAgVUlOVDE2IHZlc2FwbV9vZmY7ICAgICAgIC8qIDB4MzAgKi8NCisgICAgICAg IFVJTlQxNiBwYWdlczsgICAgICAgICAgICAvKiAweDMyICovDQorICAgICAgICBVSU5UMTYgdmVz YV9hdHRyaWJ1dGVzOyAgLyogMHgzNCAqLw0KKyAgICAgICAgVUlOVDMyIGNhcGFiaWxpdGllczsg ICAgIC8qIDB4MzYgKi8NCisgICAgICAgIFVJTlQ4ICBfcmVzZXJ2ZWRbNl07ICAgICAvKiAweDNh ICovDQorfTsNCisNCitzdHJ1Y3QgYm9vdF9wYXJhbXMgew0KK3N0cnVjdCBzY3JlZW5faW5mbyBz Y3JlZW5faW5mbzsNCisgIFVJTlQ4IGFwbV9iaW9zX2luZm9bMHgxNF07DQorICBVSU5UOCBfcGFk Mls0XTsNCisgIFVJTlQ2NCB0Ym9vdF9hZGRyOw0KKyAgVUlOVDggaXN0X2luZm9bMHgxMF07DQor ICBVSU5UOCBfcGFkM1sxNl07DQorICBVSU5UOCBoZDBfaW5mb1sxNl07DQorICBVSU5UOCBoZDFf aW5mb1sxNl07DQorICBVSU5UOCBzeXNfZGVzY190YWJsZVsweDEwXTsNCisgIFVJTlQ4IG9scGNf b2Z3X2hlYWRlclsweDEwXTsNCisgIFVJTlQ4IF9wYWQ0WzEyOF07DQorICBVSU5UOCBlZGlkX2lu Zm9bMHg4MF07DQorICBzdHJ1Y3QgZWZpX2luZm8gZWZpX2luZm87DQorICBVSU5UMzIgYWx0X21l bV9rOw0KKyAgVUlOVDMyIHNjcmF0Y2g7DQorICBVSU5UOCBlODIwX2VudHJpZXM7DQorICBVSU5U OCBlZGRidWZfZW50cmllczsNCisgIFVJTlQ4IGVkZF9tYnJfc2lnX2J1Zl9lbnRyaWVzOw0KKyAg VUlOVDggX3BhZDZbNl07DQorICBzdHJ1Y3Qgc2V0dXBfaGVhZGVyIGhkcjsNCisgIFVJTlQ4IF9w YWQ3WzB4MjkwLTB4MWYxLXNpemVvZihzdHJ1Y3Qgc2V0dXBfaGVhZGVyKV07DQorICBVSU5UMzIg ZWRkX21icl9zaWdfYnVmZmVyWzE2XTsNCisgIHN0cnVjdCBlODIwX2VudHJ5IGU4MjBfbWFwWzEy OF07DQorICBVSU5UOCBfcGFkOFs0OF07DQorICBVSU5UOCBlZGRidWZbMHgxZWNdOw0KKyAgVUlO VDggX3BhZDlbMjc2XTsNCit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQxNiBsaW1p dDsNCisgIFVJTlQ2NCAqYmFzZTsNCit9IGR0X2FkZHJfdDsNCisNCisjcHJhZ21hIHBhY2soKQ0K Kw0KK2V4dGVybiBFRklfU1RBVFVTIHNldHVwX2dyYXBoaWNzKHN0cnVjdCBib290X3BhcmFtcyAq YnVmKTsNCisNCisjZW5kaWYgLyogX19MSU5VWF9CWklNQUdFX0hfXyAqLw0KZGlmZiAtLWdpdCBh L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0xpYnJhcnkvTG9hZExp bnV4TGliLmggYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9MaWJy YXJ5L0xvYWRMaW51eExpYi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MC4uNDgzZjhkNGI5Yw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL0luY2x1ZGUvTGlicmFyeS9Mb2FkTGludXhMaWIuaA0KQEAgLTAsMCArMSwy MDUgQEANCisvKiogQGZpbGUNCisgIExvYWQvYm9vdCBVRUZJIExpbnV4Lg0KKw0KKyAgQ29weXJp Z2h0IChjKSAyMDExIC0gMjAxMywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN CisNCisqKi8NCisNCisjaWZuZGVmIF9fTE9BRF9MSU5VWF9MSUJfXw0KKyNkZWZpbmUgX19MT0FE X0xJTlVYX0xJQl9fDQorDQorDQorLyoqDQorICBWZXJpZmllcyB0aGF0IHRoZSBrZXJuZWwgc2V0 dXAgaW1hZ2UgaXMgdmFsaWQgYW5kIHN1cHBvcnRlZC4NCisgIFRoZSBrZXJuZWwgc2V0dXAgaW1h Z2Ugc2hvdWxkIGJlIGNoZWNrZWQgYmVmb3JlIHVzaW5nIG90aGVyIGxpYnJhcnkNCisgIHJvdXRp bmVzIHdoaWNoIHRha2UgdGhlIGtlcm5lbCBzZXR1cCBhcyBhbiBpbnB1dC4NCisNCisgIEBwYXJh bVtpbl0gICAgIEtlcm5lbFNldHVwIC0gVGhlIGtlcm5lbCBzZXR1cCBpbWFnZQ0KKyAgQHBhcmFt W2luXSAgICAgS2VybmVsU2V0dXBTaXplIC0gVGhlIGtlcm5lbCBzZXR1cCBzaXplDQorDQorICBA cmV0dmFsICAgIEVGSV9TVUNDRVNTIC0gVGhlIExpbnV4IGtlcm5lbCBzZXR1cCBpcyB2YWxpZCBh bmQgc3VwcG9ydGVkDQorICBAcmV0dmFsICAgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAtIEtlcm5l bFNldHVwIHdhcyBOVUxMDQorICBAcmV0dmFsICAgIEVGSV9VTlNVUFBPUlRFRCAtIFRoZSBMaW51 eCBrZXJuZWwgaXMgbm90IHN1cHBvcnRlZA0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkN CitMb2FkTGludXhDaGVja0tlcm5lbFNldHVwICgNCisgIElOIFZPSUQgICAgICAgICpLZXJuZWxT ZXR1cCwNCisgIElOIFVJTlROICAgICAgIEtlcm5lbFNldHVwU2l6ZQ0KKyAgKTsNCisNCisNCisv KioNCisgIEdldHMgdGhlIGluaXRpYWwgcnVudGltZSBzaXplIG9mIHRoZSBMaW51eCBrZXJuZWwg aW1hZ2UgYnkgZXhhbWluaW5nDQorICB0aGUga2VybmVsIHNldHVwIGltYWdlLg0KKw0KKyAgQHBh cmFtW2luXSAgICAgS2VybmVsU2V0dXAgLSBUaGUga2VybmVsIHNldHVwIGltYWdlDQorICBAcGFy YW1baW5dICAgICBLZXJuZWxTaXplIC0gVGhlIGtlcm5lbCBzaXplIG9uIGRpc2suDQorDQorICBA cmV0dmFsICAgIDAgICAgICAgICAgICAgICAgQW4gZXJyb3Igb2NjdXJyZWQNCisgIEByZXR2YWwg ICAgITAgICAgICAgICAgICAgICBUaGUgaW5pdGlhbCBzaXplIHJlcXVpcmVkIGJ5IHRoZSBrZXJu ZWwgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiBleGVjdXRpb24uDQor DQorKiovDQorVUlOVE4NCitFRklBUEkNCitMb2FkTGludXhHZXRLZXJuZWxTaXplICgNCisgIElO IFZPSUQgICAgICAgICpLZXJuZWxTZXR1cCwNCisgIElOIFVJTlROICAgICAgIEtlcm5lbFNpemUN CisgICk7DQorDQorDQorLyoqDQorICBMb2FkcyBhbmQgYm9vdHMgVUVGSSBMaW51eC4NCisNCisg IE5vdGU6IElmIHN1Y2Nlc3NmdWwsIHRoZW4gdGhpcyByb3V0aW5lIHdpbGwgbm90IHJldHVybg0K Kw0KKyAgQHBhcmFtW2luXSAgICAgS2VybmVsIC0gVGhlIG1haW4ga2VybmVsIGltYWdlDQorICBA cGFyYW1baW4sb3V0XSBLZXJuZWxTZXR1cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisNCisg IEByZXR2YWwgICAgRUZJX05PVF9GT1VORCAtIFRoZSBMaW51eCBrZXJuZWwgd2FzIG5vdCBmb3Vu ZA0KKyAgQHJldHZhbCAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgLSBLZXJuZWwgb3IgS2VybmVs U2V0dXAgd2FzIE5VTEwNCisgIEByZXR2YWwgICAgRUZJX1VOU1VQUE9SVEVEIC0gVGhlIExpbnV4 IGtlcm5lbCB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQNCisNCisqKi8NCitFRklfU1RBVFVTDQor RUZJQVBJDQorTG9hZExpbnV4ICgNCisgIElOIFZPSUQgICAgICAqS2VybmVsLA0KKyAgSU4gT1VU IFZPSUQgICpLZXJuZWxTZXR1cA0KKyAgKTsNCisNCisNCisvKioNCisgIEFsbG9jYXRlcyBwYWdl cyBmb3IgdGhlIGtlcm5lbCBzZXR1cCBpbWFnZS4NCisNCisgIEBwYXJhbVtpbl0gICAgIFBhZ2Vz IC0gVGhlIG51bWJlciBvZiBwYWdlcw0KKw0KKyAgQHJldHZhbCAgICBOVUxMIC0gVW5hYmxlIHRv IGFsbG9jYXRlIHBhZ2VzDQorICBAcmV0dmFsICAgICFOVUxMIC0gVGhlIGFkZHJlc3Mgb2YgdGhl IHBhZ2VzIGFsbG9jYXRlZA0KKw0KKyoqLw0KK1ZPSUQqDQorRUZJQVBJDQorTG9hZExpbnV4QWxs b2NhdGVLZXJuZWxTZXR1cFBhZ2VzICgNCisgIElOIFVJTlROICAgICAgICAgICAgICAgICAgUGFn ZXMNCisgICk7DQorDQorDQorLyoqDQorICBDbGVhcnMgdGhlIHVuaW5pdGlhbGlzZWQgc3BhY2Ug YmVmb3JlIGFuZCBhZnRlciB0aGUgc3RydWN0IHNldHVwX2hlYWRlcg0KKyAgaW4gdGhlIGtlcm5l bCBzZXR1cCBpbWFnZS4gVGhlIGtlcm5lbCByZXF1aXJlcyB0aGF0IHRoZXNlIGJlIHplcm9lZA0K KyAgdW5sZXNzIGV4cGxpY2l0bHkgaW5pdGlhbGlzZWQsIHNvIHRoaXMgZnVuY3Rpb24gc2hvdWxk IGJlIGNhbGxlZCBhZnRlcg0KKyAgdGhlIHNldHVwX2hlYWRlciBoYXMgYmVlbiBjb3BpZWQgaW4g ZnJvbSBhIGJ6SW1hZ2UsIGJlZm9yZSBzZXR0aW5nIHVwDQorICBhbnl0aGluZyBlbHNlLg0KKw0K KyAgQHBhcmFtW2luXSAgICAgS2VybmVsU2V0dXAgLSBUaGUga2VybmVsIHNldHVwIGltYWdlDQor DQorICBAcmV0dmFsICAgIEVGSV9TVUNDRVNTIC0gVGhlIExpbnV4IGtlcm5lbCBzZXR1cCB3YXMg c3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkDQorICBAcmV0dmFsICAgIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAtIEtlcm5lbFNldHVwIHdhcyBOVUxMDQorICBAcmV0dmFsICAgIEVGSV9VTlNVUFBPUlRF RCAtIFRoZSBMaW51eCBrZXJuZWwgaXMgbm90IHN1cHBvcnRlZA0KKw0KKyoqLw0KK0VGSV9TVEFU VVMNCitFRklBUEkNCitMb2FkTGludXhJbml0aWFsaXplS2VybmVsU2V0dXAgKA0KKyAgSU4gVk9J RCAgICAgICAgKktlcm5lbFNldHVwDQorICApOw0KKw0KKy8qKg0KKyAgQWxsb2NhdGVzIHBhZ2Vz IGZvciB0aGUga2VybmVsLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgS2VybmVsU2V0dXAgLSBUaGUg a2VybmVsIHNldHVwIGltYWdlDQorICBAcGFyYW1baW5dICAgICBQYWdlcyAtIFRoZSBudW1iZXIg b2YgcGFnZXMuIChJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlDQorICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemUgcmV0dXJuZWQgZnJvbSBMb2FkTGludXhHZXRLZXJuZWxTaXplLikNCisN CisgIEByZXR2YWwgICAgTlVMTCAtIFVuYWJsZSB0byBhbGxvY2F0ZSBwYWdlcw0KKyAgQHJldHZh bCAgICAhTlVMTCAtIFRoZSBhZGRyZXNzIG9mIHRoZSBwYWdlcyBhbGxvY2F0ZWQNCisNCisqKi8N CitWT0lEKg0KK0VGSUFQSQ0KK0xvYWRMaW51eEFsbG9jYXRlS2VybmVsUGFnZXMgKA0KKyAgSU4g Vk9JRCAgICAgICAgICAgICAgICAgICAqS2VybmVsU2V0dXAsDQorICBJTiBVSU5UTiAgICAgICAg ICAgICAgICAgIFBhZ2VzDQorICApOw0KKw0KKw0KKy8qKg0KKyAgQWxsb2NhdGVzIHBhZ2VzIGZv ciB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4NCisNCisgIEBwYXJhbVtpbl0gICAgIFBhZ2VzIC0g VGhlIG51bWJlciBvZiBwYWdlcy4NCisNCisgIEByZXR2YWwgICAgTlVMTCAtIFVuYWJsZSB0byBh bGxvY2F0ZSBwYWdlcw0KKyAgQHJldHZhbCAgICAhTlVMTCAtIFRoZSBhZGRyZXNzIG9mIHRoZSBw YWdlcyBhbGxvY2F0ZWQNCisNCisqKi8NCitWT0lEKg0KK0VGSUFQSQ0KK0xvYWRMaW51eEFsbG9j YXRlQ29tbWFuZExpbmVQYWdlcyAoDQorICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIFBhZ2Vz DQorICApOw0KKw0KKw0KKy8qKg0KKyAgQWxsb2NhdGVzIHBhZ2VzIGZvciB0aGUgaW5pdHJkIGlt YWdlLg0KKw0KKyAgQHBhcmFtW2luLG91dF0gS2VybmVsU2V0dXAgLSBUaGUga2VybmVsIHNldHVw IGltYWdlDQorICBAcGFyYW1baW5dICAgICBQYWdlcyAtIFRoZSBudW1iZXIgb2YgcGFnZXMuDQor DQorICBAcmV0dmFsICAgIE5VTEwgLSBVbmFibGUgdG8gYWxsb2NhdGUgcGFnZXMNCisgIEByZXR2 YWwgICAgIU5VTEwgLSBUaGUgYWRkcmVzcyBvZiB0aGUgcGFnZXMgYWxsb2NhdGVkDQorDQorKiov DQorVk9JRCoNCitFRklBUEkNCitMb2FkTGludXhBbGxvY2F0ZUluaXRyZFBhZ2VzICgNCisgIElO IFZPSUQgICAgICAgICAgICAgICAgICAgKktlcm5lbFNldHVwLA0KKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgICBQYWdlcw0KKyAgKTsNCisNCisNCisvKioNCisgIFNldHMgdGhlIGtlcm5lbCBj b21tYW5kIGxpbmUgcGFyYW1ldGVyIHdpdGhpbiB0aGUgc2V0dXAgaW1hZ2UuDQorDQorICBAcGFy YW1baW4sb3V0XSBLZXJuZWxTZXR1cCAtIFRoZSBrZXJuZWwgc2V0dXAgaW1hZ2UNCisgIEBwYXJh bVtpbl0gICAgIENvbW1hbmRMaW5lIC0gVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUNCisNCisgIEBy ZXR2YWwgICAgRUZJX1NVQ0NFU1MgLSBUaGUgTGludXgga2VybmVsIHNldHVwIGlzIHZhbGlkIGFu ZCBzdXBwb3J0ZWQNCisgIEByZXR2YWwgICAgRUZJX0lOVkFMSURfUEFSQU1FVEVSIC0gS2VybmVs U2V0dXAgd2FzIE5VTEwNCisgIEByZXR2YWwgICAgRUZJX1VOU1VQUE9SVEVEIC0gVGhlIExpbnV4 IGtlcm5lbCBpcyBub3Qgc3VwcG9ydGVkDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0K K0xvYWRMaW51eFNldENvbW1hbmRMaW5lICgNCisgIElOIE9VVCBWT0lEICAgICpLZXJuZWxTZXR1 cCwNCisgIElOIENIQVI4ICAgICAgICpDb21tYW5kTGluZQ0KKyAgKTsNCisNCisNCisvKioNCisg IFNldHMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbSBkaXNrIHBvaW50ZXIgd2l0aGluIHRoZSBzZXR1 cCBpbWFnZS4NCisNCisgIEBwYXJhbVtpbixvdXRdIEtlcm5lbFNldHVwIC0gVGhlIGtlcm5lbCBz ZXR1cCBpbWFnZQ0KKyAgQHBhcmFtW2luXSAgICAgSW5pdHJkIC0gUG9pbnRlciB0byB0aGUgaW5p dGlhbCByYW0gZGlzaw0KKyAgQHBhcmFtW2luXSAgICAgSW5pdHJkU2l6ZSAtIFRoZSBpbml0aWFs IHJhbSBkaXNrIGltYWdlIHNpemUNCisNCisgIEByZXR2YWwgICAgRUZJX1NVQ0NFU1MgLSBUaGUg TGludXgga2VybmVsIHNldHVwIGlzIHZhbGlkIGFuZCBzdXBwb3J0ZWQNCisgIEByZXR2YWwgICAg RUZJX0lOVkFMSURfUEFSQU1FVEVSIC0gS2VybmVsU2V0dXAgd2FzIE5VTEwNCisgIEByZXR2YWwg ICAgRUZJX1VOU1VQUE9SVEVEIC0gVGhlIExpbnV4IGtlcm5lbCBpcyBub3Qgc3VwcG9ydGVkDQor DQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0xvYWRMaW51eFNldEluaXRyZCAoDQorICBJ TiBPVVQgVk9JRCAgICAqS2VybmVsU2V0dXAsDQorICBJTiBWT0lEICAgICAgICAqSW5pdHJkLA0K KyAgSU4gVUlOVE4gICAgICAgSW5pdHJkU2l6ZQ0KKyAgKTsNCisNCisNCisjZW5kaWYNCisNCmRp ZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9MaWJy YXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJv YXJkUGtnL0luY2x1ZGUvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaA0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmMzMmY5N2Q3ODcNCi0tLSAvZGV2L251bGwN CisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRlL0xpYnJhcnkv U2VyaWFsaXplVmFyaWFibGVzTGliLmgNCkBAIC0wLDAgKzEsMjI0IEBADQorLyoqIEBmaWxlDQor ICBTZXJpYWxpemUgJiBEZXNlcmlhbGl6ZSBVRUZJIFZhcmlhYmxlcw0KKw0KKyAgQ29weXJpZ2h0 IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQor DQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoq Lw0KKw0KKyNpZm5kZWYgX19TRVJJQUxJWkVfVkFSSUFCTEVTX0xJQl9fDQorI2RlZmluZSBfX1NF UklBTElaRV9WQVJJQUJMRVNfTElCX18NCisNCisNCisvKioNCisgIENhbGxiYWNrIGZ1bmN0aW9u IGZvciBlYWNoIHZhcmlhYmxlDQorDQorICBAcGFyYW1baW5dIENvbnRleHQgLSBDb250ZXh0IGFz IHNlbnQgdG8gdGhlIGl0ZXJhdGlvbiBmdW5jdGlvbg0KKyAgQHBhcmFtW2luXSBWYXJpYWJsZU5h bWUgLSBSZWZlciB0byBSdW50aW1lU2VydmljZXMgR2V0TmV4dFZhcmlhYmxlTmFtZQ0KKyAgQHBh cmFtW2luXSBWZW5kb3JHdWlkIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldE5leHRWYXJp YWJsZU5hbWUNCisgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAtIFJlZmVyIHRvIFJ1bnRpbWVTZXJ2 aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFtW2luXSBEYXRhU2l6ZSAtIFJlZmVyIHRvIFJ1bnRp bWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFtW2luXSBEYXRhIC0gUmVmZXIgdG8gUnVu dGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQorDQorICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAg ICAgICAgQ29udGludWUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHZhcmlhYmxlcw0KKyAgQHJldHVy biBBbnkgUkVUVVJOX0VSUk9SICAgICAgIFN0b3AgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHZhcmlh Ymxlcw0KKw0KKyoqLw0KK3R5cGVkZWYNCitSRVRVUk5fU1RBVFVTDQorKEVGSUFQSSAqVkFSSUFC TEVfU0VSSUFMSVpBVElPTl9JVEVSQVRJT05fQ0FMTEJBQ0spKA0KKyAgSU4gIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgKkNvbnRleHQsDQorICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAqVmFyaWFibGVOYW1lLA0KKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAg ICAgKlZlbmRvckd1aWQsDQorICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBBdHRy aWJ1dGVzLA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemUsDQor ICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YQ0KKyAgKTsNCisNCisNCisv KioNCisgIENyZWF0ZXMgYSBuZXcgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKw0K KyAgQHBhcmFtW291dF0gIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxpemF0 aW9uIGluc3RhbmNlDQorDQorICBAcmV0dmFsICAgICAgUkVUVVJOX1NVQ0NFU1MgLSBUaGUgdmFy aWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSB3YXMNCisgICAgICAgICAgICAgICAgIHN1Y2Nl c3NmdWxseSBjcmVhdGVkLg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VT IC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNvdXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGNy ZWF0ZSB0aGUgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZS4NCisNCisqKi8NCitSRVRV Uk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzTmV3SW5zdGFuY2UgKA0KKyAg T1VUIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgKkhhbmRsZQ0KKyAgKTsNCisNCisN CisvKioNCisgIEZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHZhcmlhYmxlIHNlcmlhbGl6 YXRpb24gaW5zdGFuY2UNCisNCisgIEBwYXJhbVtpbl0gIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2 YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorDQorICBAcmV0dmFsICAgICAgUkVUVVJO X1NVQ0NFU1MgLSBUaGUgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZSB3YXMNCisgICAg ICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSBmcmVlZC4NCisgIEByZXR2YWwgICAgICBSRVRVUk5f SU5WQUxJRF9QQVJBTUVURVIgLSBIYW5kbGUgd2FzIG5vdCBhIHZhbGlkDQorICAgICAgICAgICAg ICAgICB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlLg0KKw0KKyoqLw0KK1JFVFVSTl9T VEFUVVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNGcmVlSW5zdGFuY2UgKA0KKyAgSU4g RUZJX0hBTkRMRSBIYW5kbGUNCisgICk7DQorDQorDQorLyoqDQorICBDcmVhdGVzIGEgbmV3IHZh cmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UgdXNpbmcgdGhlIGdpdmVuDQorICBiaW5hcnkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlcyB0byBmaWxsIHRoZSBuZXcgaW5zdGFuY2UN CisNCisgIEBwYXJhbVtvdXRdIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2YXJpYWJsZSBzZXJpYWxp emF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1baW5dICBCdWZmZXIgLSBBIGJ1ZmZlciB3aXRoIHRo ZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uDQorICAgICAgICAgICAgICAgIG9mIHRoZSB2YXJp YWJsZXMuICBNdXN0IGJlIHRoZSBzYW1lIGZvcm1hdCBhcyBwcm9kdWNlZA0KKyAgICAgICAgICAg ICAgICBieSBTZXJpYWxpemVWYXJpYWJsZXNUb0J1ZmZlci4NCisgIEBwYXJhbVtpbl0gIFNpemUg LSBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24NCisgICAgICAg ICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcy4NCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VD Q0VTUyAtIFRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gd2FzIHN1Y2Nlc3NmdWxseQ0KKyAgICAg ICAgICAgICAgICAgaW1wb3J0ZWQgaW50byBhIG5ldyB2YXJpYWJsZSBzZXJpYWxpemF0aW9uIGlu c3RhbmNlDQorICBAcmV0dmFsICAgICAgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgLSBUaGVyZSB3 ZSBub3QgZW5vdWdoIHJlc291cmNlcyB0bw0KKyAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSBu ZXcgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKw0KKyoqLw0KK1JFVFVSTl9TVEFU VVMNCitFRklBUEkNCitTZXJpYWxpemVWYXJpYWJsZXNOZXdJbnN0YW5jZUZyb21CdWZmZXIgKA0K KyAgT1VUIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGUsDQorICBJ TiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlciwNCisgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplDQorICApOw0KKw0KKw0KKy8q Kg0KKyAgSXRlcmF0ZXMgYWxsIHZhcmlhYmxlcyBmb3VuZCB3aXRoIFJ1bnRpbWVTZXJ2aWNlcyBH ZXROZXh0VmFyaWFibGVOYW1lDQorDQorICBAcGFyYW1baW5dICAgQ2FsbGJhY2tGdW5jdGlvbiAt IEZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB2YXJpYWJsZSBpbnN0YW5jZQ0KKyAgQHBhcmFtW2lu XSAgIENvbnRleHQgLSBQYXNzZWQgdG8gZWFjaCBjYWxsIG9mIENhbGxiYWNrRnVuY3Rpb24NCisN CisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIEFsbCB2YXJpYWJsZXMgd2VyZSBpdGVy YXRlZCB3aXRob3V0IHRoZQ0KKyAgICAgICAgICAgICAgICAgQ2FsbGJhY2tGdW5jdGlvbiByZXR1 cm5pbmcgYW4gZXJyb3INCisgIEByZXR2YWwgICAgICBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyAt IFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvDQorICAgICAgICAgICAgICAgICBpdGVy YXRlIHRocm91Z2ggdGhlIHZhcmlhYmxlcw0KKyAgQHJldHVybiAgICAgIEFueSBvZiBSRVRVUk5f RVJST1IgaW5kaWNhdGVzIGFuIGVycm9yIHJlYWRpbmcgdGhlIHZhcmlhYmxlDQorICAgICAgICAg ICAgICAgICBvciBhbiBlcnJvciB3YXMgcmV0dXJuZWQgZnJvbSBDYWxsYmFja0Z1bmN0aW9uDQor DQorKiovDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6ZVZhcmlhYmxlc0l0ZXJh dGVTeXN0ZW1WYXJpYWJsZXMgKA0KKyAgSU4gVkFSSUFCTEVfU0VSSUFMSVpBVElPTl9JVEVSQVRJ T05fQ0FMTEJBQ0sgQ2FsbGJhY2tGdW5jdGlvbiwNCisgIElOIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQorICApOw0KKw0KKw0KKy8qKg0KKyAgSXRl cmF0ZXMgYWxsIHZhcmlhYmxlcyBmb3VuZCBpbiB0aGUgdmFyaWFibGUgc2VyaWFsaXphdGlvbiBp bnN0YW5jZQ0KKw0KKyAgQHBhcmFtW2luXSAgIEhhbmRsZSAtIEhhbmRsZSBmb3IgYSB2YXJpYWJs ZSBzZXJpYWxpemF0aW9uIGluc3RhbmNlDQorICBAcGFyYW1baW5dICAgQ2FsbGJhY2tGdW5jdGlv biAtIEZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB2YXJpYWJsZSBpbnN0YW5jZQ0KKyAgQHBhcmFt W2luXSAgIENvbnRleHQgLSBQYXNzZWQgdG8gZWFjaCBjYWxsIG9mIENhbGxiYWNrRnVuY3Rpb24N CisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIEFsbCB2YXJpYWJsZXMgd2VyZSBp dGVyYXRlZCB3aXRob3V0IHRoZQ0KKyAgICAgICAgICAgICAgICAgQ2FsbGJhY2tGdW5jdGlvbiBy ZXR1cm5pbmcgYW4gZXJyb3INCisgIEByZXR2YWwgICAgICBSRVRVUk5fT1VUX09GX1JFU09VUkNF UyAtIFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvDQorICAgICAgICAgICAgICAgICBp dGVyYXRlIHRocm91Z2ggdGhlIHZhcmlhYmxlcw0KKyAgQHJldHVybiAgICAgIEFueSBvZiBSRVRV Uk5fRVJST1IgaW5kaWNhdGVzIGFuIGVycm9yIHJlYWRpbmcgdGhlIHZhcmlhYmxlDQorICAgICAg ICAgICAgICAgICBvciBhbiBlcnJvciB3YXMgcmV0dXJuZWQgZnJvbSBDYWxsYmFja0Z1bmN0aW9u DQorDQorKiovDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1NlcmlhbGl6ZVZhcmlhYmxlc0l0 ZXJhdGVJbnN0YW5jZVZhcmlhYmxlcyAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIYW5kbGUsDQorICBJTiBWQVJJQUJMRV9TRVJJQUxJWkFUSU9OX0lU RVJBVElPTl9DQUxMQkFDSyBDYWxsYmFja0Z1bmN0aW9uLA0KKyAgSU4gVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRleHQNCisgICk7DQorDQorDQorLyoqDQor ICBTZXRzIGFsbCB2YXJpYWJsZXMgZm91bmQgaW4gdGhlIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24g aW5zdGFuY2UNCisNCisgIEBwYXJhbVtpbl0gICBIYW5kbGUgLSBIYW5kbGUgZm9yIGEgdmFyaWFi bGUgc2VyaWFsaXphdGlvbiBpbnN0YW5jZQ0KKw0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9TVUND RVNTIC0gQWxsIHZhcmlhYmxlcyB3ZXJlIHNldCBzdWNjZXNzZnVsbHkNCisgIEByZXR2YWwgICAg ICBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyAtIFRoZXJlIHdlIG5vdCBlbm91Z2ggcmVzb3VyY2Vz IHRvDQorICAgICAgICAgICAgICAgICBzZXQgYWxsIHRoZSB2YXJpYWJsZXMNCisgIEByZXR1cm4g ICAgICBBbnkgb2YgUkVUVVJOX0VSUk9SIGluZGljYXRlcyBhbiBlcnJvciByZWFkaW5nIHRoZSB2 YXJpYWJsZXMNCisgICAgICAgICAgICAgICAgIG9yIGluIGF0dGVtcHRpbmcgdG8gc2V0IGEgdmFy aWFibGUNCisNCisqKi8NCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFi bGVzU2V0U2VyaWFsaXplZFZhcmlhYmxlcyAoDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICAgICBIYW5kbGUNCisgICk7DQorDQorDQorLyoqDQorICBBZGRzIGEgdmFyaWFibGUg dG8gdGhlIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisNCisgIEBwYXJhbVtpbl0g SGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UNCisg IEBwYXJhbVtpbl0gVmFyaWFibGVOYW1lIC0gUmVmZXIgdG8gUnVudGltZVNlcnZpY2VzIEdldFZh cmlhYmxlDQorICBAcGFyYW1baW5dIFZlbmRvckd1aWQgLSBSZWZlciB0byBSdW50aW1lU2Vydmlj ZXMgR2V0VmFyaWFibGUNCisgIEBwYXJhbVtpbl0gQXR0cmlidXRlcyAtIFJlZmVyIHRvIFJ1bnRp bWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFtW2luXSBEYXRhU2l6ZSAtIFJlZmVyIHRv IFJ1bnRpbWVTZXJ2aWNlcyBHZXRWYXJpYWJsZQ0KKyAgQHBhcmFtW2luXSBEYXRhIC0gUmVmZXIg dG8gUnVudGltZVNlcnZpY2VzIEdldFZhcmlhYmxlDQorDQorICBAcmV0dmFsICAgICAgUkVUVVJO X1NVQ0NFU1MgLSBBbGwgdmFyaWFibGVzIHdlcmUgc2V0IHN1Y2Nlc3NmdWxseQ0KKyAgQHJldHZh bCAgICAgIFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNv dXJjZXMgdG8NCisgICAgICAgICAgICAgICAgIGFkZCB0aGUgdmFyaWFibGUNCisNCisqKi8NCitS RVRVUk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzQWRkVmFyaWFibGUgKA0K KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBIYW5kbGUsDQorICBJTiBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICpWYXJpYWJsZU5hbWUsDQorICBJTiBFRklfR1VJRCAgICAg ICAgICAgICAgICAgICAgICpWZW5kb3JHdWlkLA0KKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICBBdHRyaWJ1dGVzLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBE YXRhU2l6ZSwNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGENCisgICk7 DQorDQorDQorLyoqDQorICBTZXJpYWxpemVzIHRoZSB2YXJpYWJsZXMga25vd24gdG8gdGhpcyBp bnN0YW5jZSBpbnRvIHRoZQ0KKyAgcHJvdmlkZWQgYnVmZmVyLg0KKw0KKyAgQHBhcmFtW2luXSAg ICAgSGFuZGxlIC0gSGFuZGxlIGZvciBhIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2UN CisgIEBwYXJhbVtvdXRdICAgIEJ1ZmZlciAtIEEgYnVmZmVyIHRvIHN0b3JlIHRoZSBiaW5hcnkg cmVwcmVzZW50YXRpb24NCisgICAgICAgICAgICAgICAgICAgb2YgdGhlIHZhcmlhYmxlcy4NCisg IEBwYXJhbVtpbixvdXRdIFNpemUgLSBPbiBpbnB1dCB0aGlzIGlzIHRoZSBzaXplIG9mIHRoZSBi dWZmZXIuDQorICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCB0aGlzIGlzIHRoZSBzaXplIG9m IHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24NCisgICAgICAgICAgICAgICAgICAgb2YgdGhlIHZh cmlhYmxlcy4NCisNCisgIEByZXR2YWwgICAgICBSRVRVUk5fU1VDQ0VTUyAtIFRoZSBiaW5hcnkg cmVwcmVzZW50YXRpb24gd2FzIHN1Y2Nlc3NmdWxseQ0KKyAgICAgICAgICAgICAgICAgY29tcGxl dGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgYnVmZmVyLg0KKyAgQHJldHZhbCAgICAgIFJFVFVSTl9P VVRfT0ZfUkVTT1VSQ0VTIC0gVGhlcmUgd2Ugbm90IGVub3VnaCByZXNvdXJjZXMgdG8NCisgICAg ICAgICAgICAgICAgIHNhdmUgdGhlIHZhcmlhYmxlcyB0byB0aGUgYnVmZmVyLg0KKyAgQHJldHZh bCAgICAgIFJFVFVSTl9JTlZBTElEX1BBUkFNRVRFUiAtIEhhbmRsZSB3YXMgbm90IGEgdmFsaWQN CisgICAgICAgICAgICAgICAgIHZhcmlhYmxlIHNlcmlhbGl6YXRpb24gaW5zdGFuY2Ugb3INCisg ICAgICAgICAgICAgICAgIFNpemUgb3IgQnVmZmVyIHdlcmUgTlVMTC4NCisNCisqKi8NCitSRVRV Uk5fU1RBVFVTDQorRUZJQVBJDQorU2VyaWFsaXplVmFyaWFibGVzVG9CdWZmZXIgKA0KKyAgSU4g ICAgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCisgIE9VVCAgICBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyLA0KKyAgSU4gT1VUIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpTaXplDQorICApOw0KKw0KKw0KKyNlbmRpZg0K Kw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9JbmNsdWRl L1NpbWljc1BsYXRmb3Jtcy5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0lu Y2x1ZGUvU2ltaWNzUGxhdGZvcm1zLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwLi42N2JiM2FmNTg0DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvSW5jbHVkZS9TaW1pY3NQbGF0Zm9ybXMuaA0KQEAgLTAsMCArMSw1 NSBAQA0KKy8qKiBAZmlsZQ0KKyAgU2ltaWNzIFBsYXRmb3JtIGRlZmluaXRpb25zDQorDQorICBD b3B5cmlnaHQgKEMpIDIwMTUsIFJlZCBIYXQsIEluYy4NCisgIENvcHlyaWdodCAoYykgMjAxNCwg R2FicmllbCBMLiBTb21sbyA8c29tbG9AY211LmVkdT4NCisgIENvcHlyaWdodCAoYykgMjAxOSwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVm IF9fU0lNSUNTX1BMQVRGT1JNU19IX18NCisjZGVmaW5lIF9fU0lNSUNTX1BMQVRGT1JNU19IX18N CisNCisjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFu ZGFyZC9QY2kyMi5oPg0KKyNpbmNsdWRlIDxSZWdpc3Rlci9YNThJY2gxMC5oPg0KKyNpbmNsdWRl IDxJbmR1c3RyeVN0YW5kYXJkL0k0NDBGeFBpaXg0Lmg+DQorDQorLy8NCisvLyBTaW1pY3MgSG9z dCBCcmlkZ2UgRElEIEFkZHJlc3MNCisvLw0KKyNkZWZpbmUgU0lNSUNTX0hPU1RCUklER0VfRElE IFwNCisgIFBDSV9MSUJfQUREUkVTUyAoMCwgMCwgMCwgUENJX0RFVklDRV9JRF9PRkZTRVQpDQor DQorLy8NCisvLyBTaW1pY3MgU2lkZUJhbmQgUENJIGRldmljZSByZWdpc3RlcnMNCisvLw0KKyNk ZWZpbmUgU0lNSUNTX1NJREVCQU5EUENJX0RFViAgMA0KKyNkZWZpbmUgU0lNSUNTX1NJREVCQU5E UENJX0ZVTkMgNw0KKyNkZWZpbmUgU0lNSUNTX1NJREVCQU5EUENJX1NWSUQgXA0KKyAgUENJX0xJ Ql9BRERSRVNTICgwLCAwLCA3LCBQQ0lfU1ZJRF9PRkZTRVQpDQorI2RlZmluZSBTSU1JQ1NfU0lE RUJBTkRQQ0lfU0RJRCBcDQorICBQQ0lfTElCX0FERFJFU1MgKDAsIDAsIDcsIFBDSV9TSURfT0ZG U0VUKQ0KKyNkZWZpbmUgU0lNSUNTX1NJREVCQU5EUENJX0NBUCBcDQorICBQQ0lfTElCX0FERFJF U1MgKDAsIDAsIDcsIFBDSV9DQVBCSUxJVFlfUE9JTlRFUl9PRkZTRVQpDQorI2RlZmluZSBTSU1J Q1NfU0lERUJBTkRQQ0lfQ0FQX09mZnNldCAweDQwDQorI2RlZmluZSBTSU1JQ1NfU0lERUJBTkRQ Q0lfQ0FQX0lEICAgICAweEZGDQorDQorLy8NCisvLyBWYWx1ZXMgd2UgcHJvZ3JhbSBpbnRvIHRo ZSBQTSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzDQorLy8NCisjZGVmaW5lIFBJSVg0X1BNQkFfVkFM VUUgIDB4QjAwMA0KKyNkZWZpbmUgSUNIMTBfUE1CQVNFX1ZBTFVFIDB4MDQwMA0KKw0KKy8vDQor Ly8gQ29tbW9uIGJpdHMgaW4gc2FtZS1wdXJwb3NlIHJlZ2lzdGVycw0KKy8vDQorI2RlZmluZSBQ TUJBX1JURSBCSVQwDQorDQorLy8NCisvLyBDb21tb24gSU8gcG9ydHMgcmVsYXRpdmUgdG8gdGhl IFBvd2VyIE1hbmFnZW1lbnQgQmFzZSBBZGRyZXNzDQorLy8NCisjZGVmaW5lIEFDUElfVElNRVJf T0ZGU0VUIDB4OA0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0R4ZUxvZ29MaWIvRHhlTG9nb0xpYi5pbmYgYi9QbGF0Zm9y bS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL0R4ZUxvZ29MaWIu aW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uZmYwOGMzODViMw0K LS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xp YnJhcnkvRHhlTG9nb0xpYi9EeGVMb2dvTGliLmluZg0KQEAgLTAsMCArMSw1NSBAQA0KKyMjIyBA ZmlsZQ0KKyMgTW9kdWxlIHRoYXQgc2hvdyBwcm9ncmVzcyBiYXIgYW5kIHRpdGxlIGFib3ZlIGl0 Lg0KKyMNCisjIEdlbmVyYWwgQkRTIGRlZmluZXMgYW5kIHByb2R1Y2UgZ2VuZXJhbCBpbnRlcmZh Y2VzIGZvciBwbGF0Zm9ybSBCRFMgZHJpdmVyIGluY2x1ZGluZzoNCisjIDEpIEJEUyBib290IHBv bGljeSBpbnRlcmZhY2U7DQorIyAyKSBCRFMgYm9vdCBkZXZpY2UgY29ubmVjdCBpbnRlcmZhY2U7 DQorIyAzKSBCRFMgTWlzYyBpbnRlcmZhY2VzIGZvciBtYWludGluZyBib290IHZhcmlhYmxlLCBv dXB1dCBzdHJpbmcsIGV0Yy4NCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDcgLSAyMDE5IEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMjDQorDQorW0RlZmlu ZXNdDQorICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDE3DQorICBC QVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBEeGVMb2dvTGliDQorICBGSUxFX0dVSUQg ICAgICAgICAgICAgICAgICAgICAgPSBGNUFFNUI1Qy00MkU4LTRBOUItODI5RC01QjYzMUNENTM2 N0ENCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKyAgTU9EVUxFX1RZ UEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KKyAgTElCUkFSWV9DTEFTUyAgICAg ICAgICAgICAgICAgID0gTG9nb0xpYnxEWEVfRFJJVkVSIFVFRklfQVBQTElDQVRJT04NCisjDQor IyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90 IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQorIyBWQUxJRF9BUkNISVRFQ1RVUkVT ID0gSUEzMiBYNjQgSVBGIEVCQw0KKyMNCisNCitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTGli DQorICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCisgIE1lbW9yeUFsbG9jYXRpb25MaWINCisg IFVlZmlMaWINCisgIEJhc2VNZW1vcnlMaWINCisgIERlYnVnTGliDQorICBQcmludExpYg0KKyAg UGNkTGliDQorICBEeGVTZXJ2aWNlc0xpYg0KKw0KK1tQYWNrYWdlc10NCisgIE1kZVBrZy9NZGVQ a2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAgU2ltaWNzT3BlbkJv YXJkUGtnL09wZW5Cb2FyZFBrZy5kZWMNCisNCitbRmVhdHVyZVBjZF0NCisgIGdFZmlNZGVQa2dU b2tlblNwYWNlR3VpZC5QY2RVZ2FDb25zdW1lU3VwcG9ydA0KKw0KK1tTb3VyY2VzXQ0KKyAgTG9n by5jDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlHcmFwaGljc091dHB1dFByb3RvY29sR3VpZCAg ICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCisgIGdFZmlVZ2FEcmF3UHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCisgIGdF ZmlCb290TG9nb1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAjIyBTT01FVElNRVNf Q09OU1VNRVMNCisgIGdFZmlVc2VyTWFuYWdlclByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAg ICAjIyBDT05TVU1FUw0KKyAgZ0VmaU9lbUJhZGdpbmdQcm90b2NvbEd1aWQgICAgICAgICAgICAg ICAgICAgICMjIENPTlNVTUVTDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvRHhlTG9nb0xpYi9PZW1CYWRnaW5nLmggYi9QbGF0Zm9ybS9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9EeGVMb2dvTGliL09lbUJhZGdpbmcuaA0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmQyYzM5YzNkZmMNCi0tLSAvZGV2 L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0R4 ZUxvZ29MaWIvT2VtQmFkZ2luZy5oDQpAQCAtMCwwICsxLDgzIEBADQorLyoqIEBmaWxlDQorICBU aGUgT0VNIEJhZGdpbmcgUHJvdG9jb2wgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIHRvIGdldCB0aGUg T0VNIGJhZGdpbmcNCisgIGltYWdlIHdpdGggdGhlIGRpc3BsYXkgYXR0cmlidXRlLiBUaGlzIHBy b3RvY29sIGNhbiBiZSBwcm9kdWNlZCBiYXNlZCBvbiBPRU0gYmFkZ2luZyBpbWFnZXMuDQorDQor ICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpZm5kZWYgX19FRklfT0VNX0JBREdJTkdfSF9fDQor I2RlZmluZSBfX0VGSV9PRU1fQkFER0lOR19IX18NCisNCisvLw0KKy8vIEdVSUQgZm9yIEVGSSBP RU0gQmFkZ2luZyBQcm90b2NvbA0KKy8vDQorI2RlZmluZSBFRklfT0VNX0JBREdJTkdfUFJPVE9D T0xfR1VJRCBcDQorICB7IDB4MTcwZTEzYzAsIDB4YmYxYiwgMHg0MjE4LCB7MHg4NywgMHgxZCwg MHgyYSwgMHhiZCwgMHhjNiwgMHhmOCwgMHg4NywgMHhiYyB9IH0NCisNCisNCit0eXBlZGVmIHN0 cnVjdCBfRUZJX09FTV9CQURHSU5HX1BST1RPQ09MIEVGSV9PRU1fQkFER0lOR19QUk9UT0NPTDsN CisNCit0eXBlZGVmIGVudW0gew0KKyAgRWZpQmFkZ2luZ0Zvcm1hdEJNUCwNCisgIEVmaUJhZGdp bmdGb3JtYXRKUEVHLA0KKyAgRWZpQmFkZ2luZ0Zvcm1hdFRJRkYsDQorICBFZmlCYWRnaW5nRm9y bWF0R0lGLA0KKyAgRWZpQmFkZ2luZ0Zvcm1hdFVua25vd24NCit9IEVGSV9CQURHSU5HX0ZPUk1B VDsNCisNCit0eXBlZGVmIGVudW0gew0KKyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVMZWZ0 VG9wLA0KKyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDZW50ZXJUb3AsDQorICBFZmlCYWRn aW5nRGlzcGxheUF0dHJpYnV0ZVJpZ2h0VG9wLA0KKyAgRWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1 dGVDZW50ZXJSaWdodCwNCisgIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlUmlnaHRCb3R0b20s DQorICBFZmlCYWRnaW5nRGlzcGxheUF0dHJpYnV0ZUNlbnRlckJvdHRvbSwNCisgIEVmaUJhZGdp bmdEaXNwbGF5QXR0cmlidXRlTGVmdEJvdHRvbSwNCisgIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmli dXRlQ2VudGVyTGVmdCwNCisgIEVmaUJhZGdpbmdEaXNwbGF5QXR0cmlidXRlQ2VudGVyLA0KKyAg RWZpQmFkZ2luZ0Rpc3BsYXlBdHRyaWJ1dGVDdXN0b21pemVkDQorfSBFRklfQkFER0lOR19ESVNQ TEFZX0FUVFJJQlVURTsNCisNCisvKioNCisNCisgIExvYWQgYW4gT0VNIGJhZGdlIGltYWdlIGFu ZCByZXR1cm4gaXRzIGRhdGEgYW5kIGF0dHJpYnV0ZXMuDQorDQorICBAcGFyYW0gVGhpcyAgICAg ICAgICAgICAgVGhlIHBvaW50ZXIgdG8gdGhpcyBwcm90b2NvbCBpbnN0YW5jZS4NCisgIEBwYXJh bSBJbnN0YW5jZSAgICAgICAgICBUaGUgdmlzaWJsZSBpbWFnZSBpbnN0YW5jZSBpcyBmb3VuZC4N CisgIEBwYXJhbSBGb3JtYXQgICAgICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBpbWFnZS4gRXhh bXBsZXM6IEJNUCwgSlBFRy4NCisgIEBwYXJhbSBJbWFnZURhdGEgICAgICAgICBUaGUgaW1hZ2Ug ZGF0YSBmb3IgdGhlIGJhZGdlIGZpbGUuIEN1cnJlbnRseSBvbmx5DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3VwcG9ydHMgdGhlIC5ibXAgZmlsZSBmb3JtYXQuDQorICBAcGFyYW0gSW1h Z2VTaXplICAgICAgICAgVGhlIHNpemUgb2YgdGhlIGltYWdlIHJldHVybmVkLg0KKyAgQHBhcmFt IEF0dHJpYnV0ZSAgICAgICAgIFRoZSBkaXNwbGF5IGF0dHJpYnV0ZXMgb2YgdGhlIGltYWdlIHJl dHVybmVkLg0KKyAgQHBhcmFtIENvb3JkaW5hdGVYICAgICAgIFRoZSBYIGNvb3JkaW5hdGUgb2Yg dGhlIGltYWdlLg0KKyAgQHBhcmFtIENvb3JkaW5hdGVZICAgICAgIFRoZSBZIGNvb3JkaW5hdGUg b2YgdGhlIGltYWdlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFRoZSBpbWFnZSB3 YXMgZmV0Y2hlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgVGhl IHNwZWNpZmllZCBpbWFnZSBjb3VsZCBub3QgYmUgZm91bmQuDQorDQorKiovDQordHlwZWRlZg0K K0VGSV9TVEFUVVMNCisoRUZJQVBJICpFRklfQkFER0lOR19HRVRfSU1BR0UpKA0KKyAgSU4gICAg IEVGSV9PRU1fQkFER0lOR19QUk9UT0NPTCAgICAgICAgICAqVGhpcywNCisgIElOIE9VVCBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlLA0KKyAgICAgT1VUIEVGSV9C QURHSU5HX0ZPUk1BVCAgICAgICAgICAgICAgICAqRm9ybWF0LA0KKyAgICAgT1VUIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKkltYWdlRGF0YSwNCisgICAgIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlU2l6ZSwNCisgICAgIE9VVCBFRklfQkFE R0lOR19ESVNQTEFZX0FUVFJJQlVURSAgICAgKkF0dHJpYnV0ZSwNCisgICAgIE9VVCBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvb3JkaW5hdGVYLA0KKyAgICAgT1VUIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ29vcmRpbmF0ZVkNCispOw0KKw0KKw0KK3N0 cnVjdCBfRUZJX09FTV9CQURHSU5HX1BST1RPQ09MIHsNCisgIEVGSV9CQURHSU5HX0dFVF9JTUFH RSAgICAgICBHZXRJbWFnZTsNCit9Ow0KKw0KKw0KK2V4dGVybiBFRklfR1VJRCBnRWZpT2VtQmFk Z2luZ1Byb3RvY29sR3VpZDsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvRHhlTG9hZExpbnV4TGli LmluZiBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51 eExpYi9EeGVMb2FkTGludXhMaWIuaW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMC4uY2RlZmVlYmJkZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0R4ZUxvYWRMaW51eExpYi5p bmYNCkBAIC0wLDAgKzEsNDIgQEANCisjIyBAZmlsZQ0KKyMNCisjIENvcHlyaWdodCAoYykgMjAw OCAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisj DQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisj Iw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgw MDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gRHhlTG9hZExpbnV4 TGliDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA2M0NDODQ5Ny1DOUQwLTQ2 QTgtQUMwOC00OURGOTJBMkZGNjINCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9 IEJBU0UNCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKyAgTElCUkFS WV9DTEFTUyAgICAgICAgICAgICAgICAgID0gRHhlTG9hZExpbnV4TGlifERYRV9EUklWRVINCisN CisjDQorIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBh bmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQorIyAgVkFMSURfQVJDSElU RUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NA0KKyMNCisNCitbU291cmNlcy5jb21tb25dDQor ICBMaW51eC5jDQorICBMaW51eEdkdC5jDQorDQorW1NvdXJjZXMuSUEzMl0NCisgIElhMzIvSnVt cFRvS2VybmVsLm5hc20NCisNCitbU291cmNlcy5YNjRdDQorICBYNjQvSnVtcFRvS2VybmVsLm5h c20NCisNCitbUGFja2FnZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgU2ltaWNzT3BlbkJv YXJkUGtnL09wZW5Cb2FyZFBrZy5kZWMNCisNCitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTGli DQorICBEZWJ1Z0xpYg0KKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KKyAgQmFzZU1lbW9yeUxpYg0K Kw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5 L0xvYWRMaW51eExpYi9JYTMyL0p1bXBUb0tlcm5lbC5uYXNtIGIvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0lhMzIvSnVtcFRvS2VybmVsLm5h c20NCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5jNmYxYzMxYTU5DQot LS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGli cmFyeS9Mb2FkTGludXhMaWIvSWEzMi9KdW1wVG9LZXJuZWwubmFzbQ0KQEAgLTAsMCArMSw0MSBA QA0KKzsgQGZpbGUNCis7IENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCis7DQorOyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKzsNCisNCisgIFNFQ1RJT04gLnRleHQNCisNCis7 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorOyBWT0lEDQorOyBFRklBUEkNCis7IEp1bXBUb0tlcm5l bCAoDQorOyAgIFZPSUQgKktlcm5lbFN0YXJ0LA0KKzsgICBWT0lEICpLZXJuZWxCb290UGFyYW1z DQorOyAgICk7DQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK2dsb2JhbCBBU01fUEZYKEp1bXBU b0tlcm5lbCkNCitBU01fUEZYKEp1bXBUb0tlcm5lbCk6DQorDQorICAgIG1vdiAgICAgZXNpLCBb ZXNwICsgOF0NCisgICAgY2FsbCAgICBEV09SRCBbZXNwICsgNF0NCisgICAgcmV0DQorDQorOy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgVk9JRA0KKzsgRUZJQVBJDQorOyBKdW1wVG9VZWZpS2Vy bmVsICgNCis7ICAgRUZJX0hBTkRMRSBJbWFnZUhhbmRsZSwNCis7ICAgRUZJX1NZU1RFTV9UQUJM RSAqU3lzdGVtVGFibGUsDQorOyAgIFZPSUQgKktlcm5lbEJvb3RQYXJhbXMsDQorOyAgIFZPSUQg Kktlcm5lbFN0YXJ0DQorOyAgICk7DQorOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK2dsb2JhbCBB U01fUEZYKEp1bXBUb1VlZmlLZXJuZWwpDQorQVNNX1BGWChKdW1wVG9VZWZpS2VybmVsKToNCisN CisgICAgbW92ICAgICBlYXgsIFtlc3AgKyAxMl0NCisgICAgbW92ICAgICBlYXgsIFtlYXggKyAw eDI2NF0NCisgICAgYWRkICAgICBlYXgsIFtlc3AgKyAxNl0NCisgICAgam1wICAgICBlYXgNCisN CmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9M b2FkTGludXhMaWIvTG9hZExpbnV4TGliLmggYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvTG9hZExpbnV4TGliLmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi45YzBhYjgwOTA0DQotLS0gL2Rldi9udWxsDQorKysg Yi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIv TG9hZExpbnV4TGliLmgNCkBAIC0wLDAgKzEsNTIgQEANCisvKiogQGZpbGUNCisgIEJvb3QgVUVG SSBMaW51eC4NCisNCisgIENvcHlyaWdodCAoYykgMjAwOCAtIDIwMTkgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfTE9BRF9MSU5VWF9M SUJfSU5DTFVERURfDQorI2RlZmluZSBfTE9BRF9MSU5VWF9MSUJfSU5DTFVERURfDQorDQorI2lu Y2x1ZGUgPFVlZmkuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Mb2FkTGludXhMaWIuaD4NCisjaW5j bHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv TWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2Vydmlj ZXNUYWJsZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNUYWJs ZUxpYi5oPg0KKw0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0xpbnV4QnpJbWFnZS5oPg0K Kw0KKyNpbmNsdWRlIDxQcm90b2NvbC9HcmFwaGljc091dHB1dC5oPg0KKw0KK1ZPSUQNCitFRklB UEkNCitKdW1wVG9LZXJuZWwgKA0KKyAgVk9JRCAqS2VybmVsU3RhcnQsDQorICBWT0lEICpLZXJu ZWxCb290UGFyYW1zDQorICApOw0KKw0KK1ZPSUQNCitFRklBUEkNCitKdW1wVG9VZWZpS2VybmVs ICgNCisgIEVGSV9IQU5ETEUgSW1hZ2VIYW5kbGUsDQorICBFRklfU1lTVEVNX1RBQkxFICpTeXN0 ZW1UYWJsZSwNCisgIFZPSUQgKktlcm5lbEJvb3RQYXJhbXMsDQorICBWT0lEICpLZXJuZWxTdGFy dA0KKyAgKTsNCisNCitWT0lEDQorSW5pdExpbnV4RGVzY3JpcHRvclRhYmxlcyAoDQorICBWT0lE DQorICApOw0KKw0KK1ZPSUQNCitTZXRMaW51eERlc2NyaXB0b3JUYWJsZXMgKA0KKyAgVk9JRA0K KyAgKTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvTGlicmFyeS9Mb2FkTGludXhMaWIvWDY0L0p1bXBUb0tlcm5lbC5uYXNtIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL1g2 NC9KdW1wVG9LZXJuZWwubmFzbQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw MDAuLjJiNTM5NWY2ZjgNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWlj c09wZW5Cb2FyZFBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9YNjQvSnVtcFRvS2VybmVsLm5hc20N CkBAIC0wLDAgKzEsODUgQEANCis7IEBmaWxlDQorOyBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5 IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorOw0KKzsgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCis7DQorDQorICBERUZB VUxUIFJFTA0KKyAgU0VDVElPTiAudGV4dA0KKw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7 IFZPSUQNCis7IEVGSUFQSQ0KKzsgSnVtcFRvS2VybmVsICgNCis7ICAgVk9JRCAqS2VybmVsU3Rh cnQsICAgICAgICAgLy8gcmN4DQorOyAgIFZPSUQgKktlcm5lbEJvb3RQYXJhbXMgICAgIC8vIHJk eA0KKzsgICApOw0KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitnbG9iYWwgQVNNX1BGWChKdW1w VG9LZXJuZWwpDQorQVNNX1BGWChKdW1wVG9LZXJuZWwpOg0KKw0KKyAgICA7IFNldCB1cCBmb3Ig ZXhlY3V0aW5nIGtlcm5lbC4gQlAgaW4gJWVzaSwgZW50cnkgcG9pbnQgb24gdGhlIHN0YWNrDQor ICAgIDsgKDY0LWJpdCB3aGVuIHRoZSAncmV0JyB3aWxsIHVzZSBpdCBhcyAzMi1iaXQsIGJ1dCB3 ZSdyZSBsaXR0bGUtZW5kaWFuKQ0KKyAgICBtb3YgICAgcnNpLCByZHgNCisgICAgcHVzaCAgIHJj eA0KKw0KKyAgICA7IEp1bXAgaW50byB0aGUgY29tcGF0aWJpbGl0eSBtb2RlIENTDQorICAgIHB1 c2ggICAgMHgxMA0KKyAgICBsZWEgICAgIHJheCwgWy4wXQ0KKyAgICBwdXNoICAgIHJheA0KKyAg ICBEQiAweDQ4LCAweGNiICAgICAgICAgICAgICAgICAgICAgIDsgcmV0ZnENCisNCisuMDoNCisg ICAgOyBOb3cgaW4gY29tcGF0aWJpbGl0eSBtb2RlLg0KKw0KKyAgICBEQiAweGI4LCAweDE4LCAw eDAsIDB4MCwgMHgwICAgIDsgbW92bCAgICAkMHgxOCwgJWVheA0KKyAgICBEQiAweDhlLCAweGQ4 ICAgICAgICAgICAgICAgICAgICAgIDsgbW92bCAgICAlZWF4LCAlZHMNCisgICAgREIgMHg4ZSwg MHhjMCAgICAgICAgICAgICAgICAgICAgICA7IG1vdmwgICAgJWVheCwgJWVzDQorICAgIERCIDB4 OGUsIDB4ZTAgICAgICAgICAgICAgICAgICAgICAgOyBtb3ZsICAgICVlYXgsICVmcw0KKyAgICBE QiAweDhlLCAweGU4ICAgICAgICAgICAgICAgICAgICAgIDsgbW92bCAgICAlZWF4LCAlZ3MNCisg ICAgREIgMHg4ZSwgMHhkMCAgICAgICAgICAgICAgICAgICAgICA7IG1vdmwgICAgJWVheCwgJXNz DQorDQorICAgIDsgRGlzYWJsZSBwYWdpbmcNCisgICAgREIgMHhmLCAweDIwLCAweGMwICAgICAg ICAgICAgICAgIDsgbW92bCAgICAlY3IwLCAlZWF4DQorICAgIERCIDB4ZiwgMHhiYSwgMHhmOCwg MHgxZiAgICAgICAgICA7IGJ0Y2wgICAgJDMxLCAlZWF4DQorICAgIERCIDB4ZiwgMHgyMiwgMHhj MCAgICAgICAgICAgICAgICA7IG1vdmwgICAgJWVheCwgJWNyMA0KKw0KKyAgICA7IERpc2FibGUg bG9uZyBtb2RlIGluIEVGRVINCisgICAgREIgMHhiOSwgMHg4MCwgMHgwLCAweDAsIDB4YzAgICAg OyBtb3ZsICAgICQweDBjMDAwMDA4MCwgJWVjeA0KKyAgICBEQiAweGYsIDB4MzIgICAgICAgICAg ICAgICAgICAgICAgOyByZG1zcg0KKyAgICBEQiAweGYsIDB4YmEsIDB4ZjgsIDB4OCAgICAgICAg ICA7IGJ0Y2wgICAgJDgsICVlYXgNCisgICAgREIgMHhmLCAweDMwICAgICAgICAgICAgICAgICAg ICAgIDsgd3Jtc3INCisNCisgICAgOyBEaXNhYmxlIFBBRQ0KKyAgICBEQiAweGYsIDB4MjAsIDB4 ZTAgICAgICAgICAgICAgICAgOyBtb3ZsICAgICVjcjQsICVlYXgNCisgICAgREIgMHhmLCAweGJh LCAweGY4LCAweDUgICAgICAgICAgOyBidGNsICAgICQ1LCAlZWF4DQorICAgIERCIDB4ZiwgMHgy MiwgMHhlMCAgICAgICAgICAgICAgICA7IG1vdmwgICAgJWVheCwgJWNyNA0KKw0KKyAgICBEQiAw eDMxLCAweGVkICAgICAgICAgICAgICAgICAgICAgIDsgeG9yICAgICAlZWJwLCAlZWJwDQorICAg IERCIDB4MzEsIDB4ZmYgICAgICAgICAgICAgICAgICAgICAgOyB4b3IgICAgICVlZGksICVlZGkN CisgICAgREIgMHgzMSwgMHhkYiAgICAgICAgICAgICAgICAgICAgICA7IHhvciAgICAgJWVieCwg JWVieA0KKyAgICBEQiAweGMzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgcmV0DQorDQor Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKzsgVk9JRA0KKzsgRUZJQVBJDQorOyBKdW1wVG9VZWZp S2VybmVsICgNCis7ICAgRUZJX0hBTkRMRSBJbWFnZUhhbmRsZSwgICAgICAgIC8vIHJjeA0KKzsg ICBFRklfU1lTVEVNX1RBQkxFICpTeXN0ZW1UYWJsZSwgLy8gcmR4DQorOyAgIFZPSUQgKktlcm5l bEJvb3RQYXJhbXMgICAgICAgICAvLyByOA0KKzsgICBWT0lEICpLZXJuZWxTdGFydCwgICAgICAg ICAgICAgLy8gcjkNCis7ICAgKTsNCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorZ2xvYmFsIEFT TV9QRlgoSnVtcFRvVWVmaUtlcm5lbCkNCitBU01fUEZYKEp1bXBUb1VlZmlLZXJuZWwpOg0KKw0K KyAgICBtb3YgICAgIHJkaSwgcmN4DQorICAgIG1vdiAgICAgcnNpLCByZHgNCisgICAgbW92ICAg ICByZHgsIHI4DQorICAgIHhvciAgICAgcmF4LCByYXgNCisgICAgbW92ICAgICBlYXgsIFtyOCAr IDB4MjY0XQ0KKyAgICBhZGQgICAgIHI5LCByYXgNCisgICAgYWRkICAgICByOSwgMHgyMDANCisg ICAgY2FsbCAgICByOQ0KKyAgICByZXQNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9OdlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaCBi L1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L052VmFyc0ZpbGVMaWIv TnZWYXJzRmlsZUxpYi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4u ODA3NzZmZDAwMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGliLmgNCkBAIC0wLDAg KzEsNTUgQEANCisvKiogQGZpbGUNCisgIFNhdmUgTm9uLVZvbGF0aWxlIFZhcmlhYmxlcyB0byBh IGZpbGUgc3lzdGVtLg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxOSBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIF9fTlZfVkFS U19GSUxFX0xJQl9JTlNUQU5DRV9fDQorI2RlZmluZSBfX05WX1ZBUlNfRklMRV9MSUJfSU5TVEFO Q0VfXw0KKw0KKyNpbmNsdWRlIDxVZWZpLmg+DQorDQorI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8u aD4NCisNCisjaW5jbHVkZSA8UHJvdG9jb2wvU2ltcGxlRmlsZVN5c3RlbS5oPg0KKw0KKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9GaWxlSGFuZGxlTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliLmg+DQorI2luY2x1 ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJh cnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVm aUxpYi5oPg0KKw0KKy8qKg0KKyAgTG9hZHMgdGhlIG5vbi12b2xhdGlsZSB2YXJpYWJsZXMgZnJv bSB0aGUgTnZWYXJzIGZpbGUgb24gdGhlDQorICBnaXZlbiBmaWxlIHN5c3RlbS4NCisNCisgIEBw YXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBhIGdFZmlTaW1wbGVGaWxlU3lzdGVtUHJv dG9jb2xHdWlkIGluc3RhbmNlDQorDQorICBAcmV0dXJuICAgICBFRklfU1RBVFVTIGJhc2VkIG9u IHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgbG9hZCBvcGVyYXRpb24NCisNCisqKi8NCitFRklf U1RBVFVTDQorTG9hZE52VmFyc0Zyb21GcyAoDQorICBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZzSGFuZGxlDQorICApOw0KKw0KKw0KKy8qKg0KKyAgU2F2ZXMgdGhlIG5v bi12b2xhdGlsZSB2YXJpYWJsZXMgaW50byB0aGUgTnZWYXJzIGZpbGUgb24gdGhlDQorICBnaXZl biBmaWxlIHN5c3RlbS4NCisNCisgIEBwYXJhbVtpbl0gIEZzSGFuZGxlIC0gSGFuZGxlIGZvciBh IGdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkIGluc3RhbmNlDQorDQorICBAcmV0dXJu ICAgICBFRklfU1RBVFVTIGJhc2VkIG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgbG9hZCBv cGVyYXRpb24NCisNCisqKi8NCitFRklfU1RBVFVTDQorU2F2ZU52VmFyc1RvRnMgKA0KKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGc0hhbmRsZQ0KKyAgKTsNCisNCisj ZW5kaWYNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9OdlZhcnNGaWxlTGliL052VmFyc0ZpbGVMaWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwv U2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvTnZWYXJzRmlsZUxpYi9OdlZhcnNGaWxlTGliLmlu Zg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjQ3MzFlNzc4NjUNCi0t LSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJy YXJ5L052VmFyc0ZpbGVMaWIvTnZWYXJzRmlsZUxpYi5pbmYNCkBAIC0wLDAgKzEsNTMgQEANCisj IyBAZmlsZQ0KKyMgIE52VmFyc0ZpbGVMaWINCisjDQorIyAgVGhpcyBsaWJyYXJ5IHNhdmVzIGFu ZCByZXN0b3JlcyBub24tdm9sYXRpbGUgdmFyaWFibGVzIGluIGENCisjICBmaWxlIHdpdGhpbiBh IGZpbGUgc3lzdGVtLg0KKyMNCisjIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0K KyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9O QU1FICAgICAgICAgICAgICAgICAgICAgID0gTnZWYXJzRmlsZUxpYg0KKyAgRklMRV9HVUlEICAg ICAgICAgICAgICAgICAgICAgID0gOEVDRDRDQzAtMTc3Mi00NTgzLThBNzQtODM2MzNBMTVGQUEw DQorICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBVRUZJX0RSSVZFUg0KKyAgVkVS U0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQorICBMSUJSQVJZX0NMQVNTICAgICAg ICAgICAgICAgICAgPSBOdlZhcnNGaWxlTGlifERYRV9EUklWRVIgRFhFX1JVTlRJTUVfRFJJVkVS IFVFRklfRFJJVkVSDQorDQorIw0KKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3Ig cmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0aGUgYnVpbGQgdG9vbHMuDQorIw0K KyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDDQorIw0KKw0K K1tTb3VyY2VzXQ0KKyAgRnNBY2Nlc3MuYw0KKyAgTnZWYXJzRmlsZUxpYi5jDQorDQorW1BhY2th Z2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cu ZGVjDQorICBTaGVsbFBrZy9TaGVsbFBrZy5kZWMNCisgIE92bWZQa2cvT3ZtZlBrZy5kZWMNCisN CitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTGliDQorICBCYXNlTWVtb3J5TGliDQorICBEZWJ1 Z0xpYg0KKyAgRmlsZUhhbmRsZUxpYg0KKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KKyAgU2VyaWFs aXplVmFyaWFibGVzTGliDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlTaW1wbGVGaWxlU3lzdGVt UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KKw0KK1tHdWlkc10NCisgIGdF ZmlGaWxlSW5mb0d1aWQNCisNCitbRGVwZXhdDQorICBnRWZpVmFyaWFibGVXcml0ZUFyY2hQcm90 b2NvbEd1aWQNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQ a2cvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2UuaCBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJy aWRnZS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMGM3NTQzMDI2 MA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlLmgNCkBAIC0wLDAgKzEsNjgg QEANCisvKiogQGZpbGUNCisgIEhlYWRlciBmaWxlIG9mIE9WTUYgaW5zdGFuY2Ugb2YgUGNpSG9z dEJyaWRnZUxpYi4NCisNCisgIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCitQQ0lfUk9PVF9CUklER0UgKg0KK1NjYW5G b3JSb290QnJpZGdlcyAoDQorICBVSU5UTiAgICAgICpOdW1iZXJPZlJvb3RCcmlkZ2VzDQorKTsN CisNCisvKioNCisgIEluaXRpYWxpemUgYSBQQ0lfUk9PVF9CUklER0Ugc3RydWN0dXJlLg0KKw0K KyAgQHBhcmFtW2luXSAgU3VwcG9ydHMgICAgICAgICBTdXBwb3J0ZWQgYXR0cmlidXRlcy4NCisN CisgIEBwYXJhbVtpbl0gIEF0dHJpYnV0ZXMgICAgICAgSW5pdGlhbCBhdHRyaWJ1dGVzLg0KKw0K KyAgQHBhcmFtW2luXSAgQWxsb2NBdHRyaWJ1dGVzICBBbGxvY2F0aW9uIGF0dHJpYnV0ZXMuDQor DQorICBAcGFyYW1baW5dICBSb290QnVzTnVtYmVyICAgIFRoZSBidXMgbnVtYmVyIHRvIHN0b3Jl IGluIFJvb3RCdXMuDQorDQorICBAcGFyYW1baW5dICBNYXhTdWJCdXNOdW1iZXIgIFRoZSBpbmNs dXNpdmUgbWF4aW11bSBidXMgbnVtYmVyIHRoYXQgY2FuIGJlDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFzc2lnbmVkIHRvIGFueSBzdWJvcmRpbmF0ZSBidXMgZm91bmQgYmVoaW5k IGFueQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0kgYnJpZGdlIGhhbmdpbmcg b2ZmIHRoaXMgcm9vdCBidXMuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo ZSBjYWxsZXIgaXMgcmVwc29uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUm9vdEJ1c051bWJlciA8PSBNYXhTdWJCdXNOdW1iZXIuIElmDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RCdXNOdW1iZXIgZXF1YWxzIE1heFN1 YkJ1c051bWJlciwgdGhlbiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9v dCBidXMgaGFzIG5vIHJvb20gZm9yIHN1Ym9yZGluYXRlIGJ1c2VzLg0KKw0KKyAgQHBhcmFtW2lu XSAgSW8gICAgICAgICAgICAgICBJTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0gIE1lbSAg ICAgICAgICAgICAgTU1JTyBhcGVydHVyZS4NCisNCisgIEBwYXJhbVtpbl0gIE1lbUFib3ZlNEcg ICAgICAgTU1JTyBhcGVydHVyZSBhYm92ZSA0Ry4NCisNCisgIEBwYXJhbVtpbl0gIFBNZW0gICAg ICAgICAgICAgUHJlZmV0Y2hhYmxlIE1NSU8gYXBlcnR1cmUuDQorDQorICBAcGFyYW1baW5dICBQ TWVtQWJvdmU0RyAgICAgIFByZWZldGNoYWJsZSBNTUlPIGFwZXJ0dXJlIGFib3ZlIDRHLg0KKw0K KyAgQHBhcmFtW291dF0gUm9vdEJ1cyAgICAgICAgICBUaGUgUENJX1JPT1RfQlJJREdFIHN0cnVj dHVyZSAoYWxsb2NhdGVkIGJ5IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YWxsZXIpIHRoYXQgc2hvdWxkIGJlIGZpbGxlZCBpbiBieSB0aGlzDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgSW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4gQSBkZXZpY2UgcGF0aA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc2lzdGluZyBvZiBhbiBBQ1BJIGRldmljZSBwYXRo IG5vZGUsIHdpdGgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJRCA9IFJvb3RC dXNOdW1iZXIsIGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpbmtlZCBpbnRvIFJvb3RCdXMuDQorDQorICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuDQorKiovDQorRUZJX1NUQVRVUw0K K0luaXRSb290QnJpZGdlICgNCisgIElOICBVSU5UNjQgICAgICAgICAgICAgICAgICAgU3VwcG9y dHMsDQorICBJTiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMsDQorICBJTiAg VUlOVDY0ICAgICAgICAgICAgICAgICAgIEFsbG9jQXR0cmlidXRlcywNCisgIElOICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgUm9vdEJ1c051bWJlciwNCisgIElOICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgTWF4U3ViQnVzTnVtYmVyLA0KKyAgSU4gIFBDSV9ST09UX0JSSURHRV9BUEVSVFVS RSAqSW8sDQorICBJTiAgUENJX1JPT1RfQlJJREdFX0FQRVJUVVJFICpNZW0sDQorICBJTiAgUENJ X1JPT1RfQlJJREdFX0FQRVJUVVJFICpNZW1BYm92ZTRHLA0KKyAgSU4gIFBDSV9ST09UX0JSSURH RV9BUEVSVFVSRSAqUE1lbSwNCisgIElOICBQQ0lfUk9PVF9CUklER0VfQVBFUlRVUkUgKlBNZW1B Ym92ZTRHLA0KKyAgT1VUIFBDSV9ST09UX0JSSURHRSAgICAgICAgICAqUm9vdEJ1cw0KKyAgKTsN CmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9Q Y2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGli LmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmUxOTIwYmQyZmYN Ci0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9M aWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5pbmYNCkBAIC0wLDAgKzEs NTEgQEANCisjIyBAZmlsZQ0KKyMgIFNpbWljcydzIGluc3RhbmNlIG9mIHRoZSBQQ0kgSG9zdCBC cmlkZ2UgTGlicmFyeS4NCisjDQorIyAgQ29weXJpZ2h0IChDKSAyMDE2LCBSZWQgSGF0LCBJbmMu DQorIyAgQ29weXJpZ2h0IChjKSAyMDE2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4gPEJSPg0KKyMNCisjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAg ICAgICAgICAgID0gUGNpSG9zdEJyaWRnZUxpYg0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAg ICAgICAgID0gMkYwNEVDNDEtQzNBMC00M0VCLUFDNkEtNDA5Rjk3M0Y0NDM5DQorICBNT0RVTEVf VFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQorICBWRVJTSU9OX1NUUklORyAg ICAgICAgICAgICAgICAgPSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9 IFBjaUhvc3RCcmlkZ2VMaWINCisNCisjDQorIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlz IGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZA0KKyMgdG9v bHMuDQorIw0KKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJD DQorIw0KKw0KK1tTb3VyY2VzXQ0KKyAgUGNpSG9zdEJyaWRnZUxpYi5jDQorICBQY2lIb3N0QnJp ZGdlLmgNCisNCitbUGFja2FnZXNdDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0K KyAgTWRlUGtnL01kZVBrZy5kZWMNCisgIFNpbWljc09wZW5Cb2FyZFBrZy9PcGVuQm9hcmRQa2cu ZGVjDQorICBTaW1pY3NJY2gxMFBrZy9JY2gxMFBrZy5kZWMNCisNCitbTGlicmFyeUNsYXNzZXNd DQorICBCYXNlTWVtb3J5TGliDQorICBEZWJ1Z0xpYg0KKyAgRGV2aWNlUGF0aExpYg0KKyAgTWVt b3J5QWxsb2NhdGlvbkxpYg0KKyAgUGNpTGliDQorDQorW1BjZF0NCisgIGdCb2FyZE1vZHVsZVRv a2VuU3BhY2VHdWlkLlBjZFBjaUlvQmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQu UGNkUGNpSW9TaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvMzJC YXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvMzJTaXplDQorICBn Qm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRCYXNlDQorICBnQm9hcmRNb2R1 bGVUb2tlblNwYWNlR3VpZC5QY2RQY2lNbWlvNjRTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNw YWNlR3VpZC5QY2RTaW1pY3NYNThIb3N0QnJpZGdlUGNpRGV2SWQNCisgIGdFZmlNZGVNb2R1bGVQ a2dUb2tlblNwYWNlR3VpZC5QY2RQY2lEaXNhYmxlQnVzRW51bWVyYXRpb24NCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxp Yi9QZWlSZXBvcnRGdkxpYi5pbmYgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cv TGlicmFyeS9QZWlSZXBvcnRGdkxpYi9QZWlSZXBvcnRGdkxpYi5pbmYNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi5iYzg1NDIwZjk3DQotLS0gL2Rldi9udWxsDQorKysg Yi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9QZWlSZXBvcnRGdkxp Yi9QZWlSZXBvcnRGdkxpYi5pbmYNCkBAIC0wLDAgKzEsNTYgQEANCisjIyMgQGZpbGUNCisjIENv bXBvbmVudCBpbmZvcm1hdGlvbiBmaWxlIGZvciB0aGUgUmVwb3J0IEZpcm13YXJlIFZvbHVtZSAo RlYpIGxpYnJhcnkuDQorIw0KKyMgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMjDQorDQorW0RlZmluZXNdDQorICBJTkZf VkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDE3DQorICBCQVNFX05BTUUgICAg ICAgICAgICAgICAgICAgICAgPSBQZWlSZXBvcnRGdkxpYg0KKyAgRklMRV9HVUlEICAgICAgICAg ICAgICAgICAgICAgID0gNDQzMjhGQTUtRTRERC00QTE1LUFCREYtQzY1ODRBQzM2M0Q5DQorICBW RVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCisgIE1PRFVMRV9UWVBFICAgICAg ICAgICAgICAgICAgICA9IFBFSU0NCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9 IFJlcG9ydEZ2TGliDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFzZU1lbW9yeUxpYg0KKyAg RGVidWdMaWINCisgIEhvYkxpYg0KKyAgUGVpU2VydmljZXNMaWINCisgIFBjZExpYg0KKyAgSW9M aWINCisNCitbUGFja2FnZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCisgIE1pblBsYXRmb3JtUGtnL01pblBsYXRmb3JtUGtnLmRlYw0K KyAgU2ltaWNzT3BlbkJvYXJkUGtnL09wZW5Cb2FyZFBrZy5kZWMNCisgIFNpbWljc1g1OFNrdFBr Zy9Ta3RQa2cuZGVjDQorICBTaW1pY3NJY2gxMFBrZy9JY2gxMFBrZy5kZWMNCisNCitbU291cmNl c10NCisgIFBlaVJlcG9ydEZ2TGliLmMNCisgIEZ2LmMNCisNCitbUGNkXQ0KKyAgZ01pblBsYXRm b3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hBcmVhQmFzZUFkZHJlc3MgICAgICMjIENPTlNV TUVTDQorICBnTWluUGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEFyZWFTaXplICAg ICAgICAgICAgIyMgQ09OU1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBj ZEZsYXNoRnZQb3N0TWVtb3J5QmFzZSAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtn VG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hGdlBvc3RNZW1vcnlTaXplICAgICMjIENPTlNVTUVTDQor ICBnTWluUGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2VWVmaUJvb3RCYXNlICAg ICAgIyMgQ09OU1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNo RnZVZWZpQm9vdFNpemUgICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5T cGFjZUd1aWQuUGNkRmxhc2hGdk9zQm9vdEJhc2UgICAgICAgICMjIENPTlNVTUVTDQorICBnTWlu UGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2T3NCb290U2l6ZSAgICAgICAgIyMg Q09OU1VNRVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoRnZTZWN1 cml0eUJhc2UgICAgICAjIyBDT05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1 aWQuUGNkRmxhc2hGdlNlY3VyaXR5U2l6ZSAgICAgICMjIENPTlNVTUVTDQorICBnTWluUGxhdGZv cm1Qa2dUb2tlblNwYWNlR3VpZC5QY2RGbGFzaEZ2QWR2YW5jZWRCYXNlICAgICAgIyMgQ09OU1VN RVMNCisgIGdNaW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoRnZBZHZhbmNlZFNp emUgICAgICAjIyBDT05TVU1FUw0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2lt aWNzUGVpTWVtRnZCYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NQ ZWlNZW1GdlNpemUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc0R4ZU1l bUZ2QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzRHhlTWVtRnZT aXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NEZWNvbXByZXNzaW9u U2NyYXRjaEVuZA0KKyAgZ1NpbWljc1g1OFBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNtbVNtcmFtUmVx dWlyZQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJy YXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxhdGZvcm0uaCBiL1BsYXRmb3JtL0ludGVs L1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxh dGZvcm0uaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjAxYmEyMGQy ZGENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBr Zy9MaWJyYXJ5L1BsYXRmb3JtQm9vdE1hbmFnZXJMaWIvQmRzUGxhdGZvcm0uaA0KQEAgLTAsMCAr MSwxNzIgQEANCisvKiogQGZpbGUNCisgIFBsYXRmb3JtIEJEUyBjdXN0b21pemF0aW9ucyBpbmNs dWRlIGZpbGUuDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5IEludGVsIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpZm5kZWYgX1BMQVRGT1JNX1NQ RUNJRklDX0JEU19QTEFURk9STV9IXw0KKyNkZWZpbmUgX1BMQVRGT1JNX1NQRUNJRklDX0JEU19Q TEFURk9STV9IXw0KKw0KKw0KKyNpbmNsdWRlIDxQaUR4ZS5oPg0KKw0KKyNpbmNsdWRlIDxJbmR1 c3RyeVN0YW5kYXJkL1BjaS5oPg0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0FjcGkuaD4N CisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9TbUJpb3MuaD4NCisjaW5jbHVkZSA8SW5kdXN0 cnlTdGFuZGFyZC9QZUltYWdlLmg+DQorDQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N CisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkv VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRp bWVTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlv bkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFy eS9QY2RMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4NCisjaW5jbHVkZSA8TGli cmFyeS9VZWZpQm9vdE1hbmFnZXJMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9Cb290TG9nb0xp Yi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EeGVTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTnZWYXJzRmlsZUxpYi5oPg0KKw0KKyNpbmNsdWRlIDxQ cm90b2NvbC9EZWNvbXByZXNzLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL1BjaUlvLmg+DQorI2lu Y2x1ZGUgPFByb3RvY29sL0Zpcm13YXJlVm9sdW1lMi5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9T aW1wbGVGaWxlU3lzdGVtLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL1BjaVJvb3RCcmlkZ2VJby5o Pg0KKyNpbmNsdWRlIDxQcm90b2NvbC9TM1NhdmVTdGF0ZS5oPg0KKyNpbmNsdWRlIDxQcm90b2Nv bC9EeGVTbW1SZWFkeVRvTG9jay5oPg0KKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5o Pg0KKw0KKyNpbmNsdWRlIDxHdWlkL0FjcGkuaD4NCisjaW5jbHVkZSA8R3VpZC9TbUJpb3MuaD4N CisjaW5jbHVkZSA8R3VpZC9NcHMuaD4NCisjaW5jbHVkZSA8R3VpZC9Ib2JMaXN0Lmg+DQorI2lu Y2x1ZGUgPEd1aWQvR2xvYmFsVmFyaWFibGUuaD4NCisjaW5jbHVkZSA8R3VpZC9FdmVudEdyb3Vw Lmg+DQorDQorI2luY2x1ZGUgPFNpbWljc1BsYXRmb3Jtcy5oPg0KKw0KK2V4dGVybiBFRklfREVW SUNFX1BBVEhfUFJPVE9DT0wgICAqZ1BsYXRmb3JtQ29ubmVjdFNlcXVlbmNlW107DQorZXh0ZXJu IEFDUElfSElEX0RFVklDRV9QQVRIICAgICAgIGdQbnBQczJLZXlib2FyZERldmljZU5vZGU7DQor ZXh0ZXJuIEFDUElfSElEX0RFVklDRV9QQVRIICAgICAgIGdQbnAxNjU1MENvbVBvcnREZXZpY2VO b2RlOw0KK2V4dGVybiBVQVJUX0RFVklDRV9QQVRIICAgICAgICAgICBnVWFydERldmljZU5vZGU7 DQorZXh0ZXJuIFZFTkRPUl9ERVZJQ0VfUEFUSCAgICAgICAgIGdUZXJtaW5hbFR5cGVEZXZpY2VO b2RlOw0KKw0KKyNkZWZpbmUgUENJX0RFVklDRV9QQVRIX05PREUoRnVuYywgRGV2KSBcDQorICB7 IFwNCisgICAgeyBcDQorICAgICAgSEFSRFdBUkVfREVWSUNFX1BBVEgsIFwNCisgICAgICBIV19Q Q0lfRFAsIFwNCisgICAgICB7IFwNCisgICAgICAgIChVSU5UOCkgKHNpemVvZiAoUENJX0RFVklD RV9QQVRIKSksIFwNCisgICAgICAgIChVSU5UOCkgKChzaXplb2YgKFBDSV9ERVZJQ0VfUEFUSCkp ID4+IDgpIFwNCisgICAgICB9IFwNCisgICAgfSwgXA0KKyAgICAoRnVuYyksIFwNCisgICAgKERl dikgXA0KKyAgfQ0KKw0KKyNkZWZpbmUgUE5QSURfREVWSUNFX1BBVEhfTk9ERShQbnBJZCkgXA0K KyAgeyBcDQorICAgIHsgXA0KKyAgICAgIEFDUElfREVWSUNFX1BBVEgsIFwNCisgICAgICBBQ1BJ X0RQLCBcDQorICAgICAgeyBcDQorICAgICAgICAoVUlOVDgpIChzaXplb2YgKEFDUElfSElEX0RF VklDRV9QQVRIKSksIFwNCisgICAgICAgIChVSU5UOCkgKChzaXplb2YgKEFDUElfSElEX0RFVklD RV9QQVRIKSkgPj4gOCkgXA0KKyAgICAgIH0sIFwNCisgICAgfSwgXA0KKyAgICBFSVNBX1BOUF9J RCgoUG5wSWQpKSwgXA0KKyAgICAwIFwNCisgIH0NCisNCisjZGVmaW5lIGdQY2lJc2FCcmlkZ2Ug XA0KKyAgUENJX0RFVklDRV9QQVRIX05PREUoMCwgMHgxZikNCisNCisjZGVmaW5lIGdQMlBCcmlk Z2UgXA0KKyAgUENJX0RFVklDRV9QQVRIX05PREUoMCwgMHgxZSkNCisNCisjZGVmaW5lIGdQbnBQ czJLZXlib2FyZCBcDQorICBQTlBJRF9ERVZJQ0VfUEFUSF9OT0RFKDB4MDMwMykNCisNCisjZGVm aW5lIGdQbnAxNjU1MENvbVBvcnQgXA0KKyAgUE5QSURfREVWSUNFX1BBVEhfTk9ERSgweDA1MDEp DQorDQorI2RlZmluZSBnVWFydCBcDQorICB7IFwNCisgICAgeyBcDQorICAgICAgTUVTU0FHSU5H X0RFVklDRV9QQVRILCBcDQorICAgICAgTVNHX1VBUlRfRFAsIFwNCisgICAgICB7IFwNCisgICAg ICAgIChVSU5UOCkgKHNpemVvZiAoVUFSVF9ERVZJQ0VfUEFUSCkpLCBcDQorICAgICAgICAoVUlO VDgpICgoc2l6ZW9mIChVQVJUX0RFVklDRV9QQVRIKSkgPj4gOCkgXA0KKyAgICAgIH0gXA0KKyAg ICB9LCBcDQorICAgIDAsIFwNCisgICAgMTE1MjAwLCBcDQorICAgIDgsIFwNCisgICAgMSwgXA0K KyAgICAxIFwNCisgIH0NCisNCisjZGVmaW5lIGdQY0Fuc2lUZXJtaW5hbCBcDQorICB7IFwNCisg ICAgeyBcDQorICAgICAgTUVTU0FHSU5HX0RFVklDRV9QQVRILCBcDQorICAgICAgTVNHX1ZFTkRP Ul9EUCwgXA0KKyAgICAgIHsgXA0KKyAgICAgICAgKFVJTlQ4KSAoc2l6ZW9mIChWRU5ET1JfREVW SUNFX1BBVEgpKSwgXA0KKyAgICAgICAgKFVJTlQ4KSAoKHNpemVvZiAoVkVORE9SX0RFVklDRV9Q QVRIKSkgPj4gOCkgXA0KKyAgICAgIH0gXA0KKyAgICB9LCBcDQorICAgIERFVklDRV9QQVRIX01F U1NBR0lOR19QQ19BTlNJIFwNCisgIH0NCisNCisjZGVmaW5lIFBDSV9DTEFTU19TQ0MgICAgICAg ICAgMHgwNw0KKyNkZWZpbmUgUENJX1NVQkNMQVNTX1NFUklBTCAgICAweDAwDQorI2RlZmluZSBQ Q0lfSUZfMTY1NTAgICAgICAgICAgIDB4MDINCisjZGVmaW5lIElTX1BDSV8xNjU1MFNFUklBTChf cCkgICAgICAgICAgIElTX0NMQVNTMyAoX3AsIFBDSV9DTEFTU19TQ0MsIFBDSV9TVUJDTEFTU19T RVJJQUwsIFBDSV9JRl8xNjU1MCkNCisjZGVmaW5lIElTX1BDSV9JU0FfUERFQ09ERShfcCkgICAg ICAgIElTX0NMQVNTMyAoX3AsIFBDSV9DTEFTU19CUklER0UsIFBDSV9DTEFTU19CUklER0VfSVNB X1BERUNPREUsIDApDQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MICAqRGV2aWNlUGF0aDsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQ29ubmVj dFR5cGU7DQorfSBQTEFURk9STV9DT05TT0xFX0NPTk5FQ1RfRU5UUlk7DQorDQorI2RlZmluZSBD T05TT0xFX09VVCBCSVQwDQorI2RlZmluZSBDT05TT0xFX0lOICBCSVQxDQorI2RlZmluZSBTVERf RVJST1IgICBCSVQyDQorZXh0ZXJuIFBMQVRGT1JNX0NPTlNPTEVfQ09OTkVDVF9FTlRSWSAgZ1Bs YXRmb3JtQ29uc29sZVtdOw0KKw0KKy8vDQorLy8gUGxhdGZvcm0gQkRTIEZ1bmN0aW9ucw0KKy8v DQorDQorVk9JRA0KK1BsYXRmb3JtSW5pdGlhbGl6ZUNvbnNvbGUgKA0KKyAgSU4gUExBVEZPUk1f Q09OU09MRV9DT05ORUNUX0VOVFJZICAgKlBsYXRmb3JtQ29uc29sZQ0KKyAgKTsNCisNCisvKioN CisgIFVzZSBTeXN0ZW1UYWJsZSBDb25PdXQgdG8gc3RvcCB2aWRlbyBiYXNlZCBTaW1wbGUgVGV4 dCBPdXQgY29uc29sZXMgZnJvbSBnb2luZw0KKyAgdG8gdGhlIHZpZGVvIGRldmljZS4gUHV0IHVw IExvZ29GaWxlIG9uIGV2ZXJ5IHZpZGVvIGRldmljZSB0aGF0IGlzIGEgY29uc29sZS4NCisNCisg IEBwYXJhbVtpbl0gIExvZ29GaWxlICAgVGhlIGZpbGUgbmFtZSBvZiBsb2dvIHRvIGRpc3BsYXkg b24gdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgQ29uc29sZUNvbnRyb2wgaGFzIGJlZW4gZmxpcHBlZCB0byBncmFwaGljcyBhbmQgbG9nbyBk aXNwbGF5ZWQuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCBMb2dvIG5vdCBmb3VuZC4NCisN CisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorRW5hYmxlQm9vdExvZ28oDQorICBJTiAgRUZJ X0dVSUQgICpMb2dvRmlsZQ0KKyk7DQorDQorI2VuZGlmIC8vIF9QTEFURk9STV9TUEVDSUZJQ19C RFNfUExBVEZPUk1fSF8NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvTGlicmFyeS9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliL1BsYXRmb3JtQm9vdE1hbmFnZXJM aWIuaW5mIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvUGxhdGZv cm1Cb290TWFuYWdlckxpYi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZg0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmNkYjZlMjQyZTgNCi0tLSAvZGV2L251bGwNCisr KyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1BsYXRmb3JtQm9v dE1hbmFnZXJMaWIvUGxhdGZvcm1Cb290TWFuYWdlckxpYi5pbmYNCkBAIC0wLDAgKzEsNzIgQEAN CisjIyBAZmlsZQ0KKyMgIFBsYXRmb3JtIEJEUyBjdXN0b21pemF0aW9ucyBsaWJyYXJ5Lg0KKyMN CisjIENvcHlyaWdodCAoYykgMjAwNyAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAg ICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAg ICAgICAgID0gUGxhdGZvcm1Cb290TWFuYWdlckxpYg0KKyAgRklMRV9HVUlEICAgICAgICAgICAg ICAgICAgICAgID0gOEFFNDc1NkYtMEM3MS00QzA2LTg0RDQtNEM3MUYyMDRENTE0DQorICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQorICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAg ICA9IFBsYXRmb3JtQm9vdE1hbmFnZXJMaWJ8RFhFX0RSSVZFUg0KKw0KKyMNCisjIFRoZSBmb2xs b3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWlyZWQg YnkgdGhlIGJ1aWxkIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAgICAg ICA9IElBMzIgWDY0IEVCQw0KKyMNCisNCitbU291cmNlc10NCisgIEJkc1BsYXRmb3JtLmMNCisg IFBsYXRmb3JtRGF0YS5jDQorICBCZHNQbGF0Zm9ybS5oDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRl UGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorICBTaW1p Y3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRlYw0KKyAgT3ZtZlBrZy9Pdm1mUGtnLmRlYw0K KyAgU2ltaWNzSWNoMTBQa2cvSWNoMTBQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAg QmFzZUxpYg0KKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliDQorICBCYXNlTWVtb3J5TGliDQorICBEZWJ1Z0xpYg0KKyAgUGNkTGliDQorICBVZWZpQm9v dE1hbmFnZXJMaWINCisgIEJvb3RMb2dvTGliDQorICBEZXZpY2VQYXRoTGliDQorICBQY2lMaWIN CisgIE52VmFyc0ZpbGVMaWINCisgIER4ZUxvYWRMaW51eExpYg0KKyAgVWVmaUxpYg0KKyAgTG9n b0xpYg0KKw0KK1tQY2RdDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RFbXVWYXJp YWJsZUV2ZW50DQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RPdm1mRmxhc2hWYXJp YWJsZXNFbmFibGUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc1g1OEhv c3RCcmlkZ2VQY2lEZXZJZA0KKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBsYXRmb3Jt Qm9vdFRpbWVPdXQNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNoZWxsRmlsZQ0K KyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkTG9nb0ZpbGUNCisNCitbUGNkLklBMzIs IFBjZC5YNjRdDQorICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRlNCQ2xvY2sNCisNCitb UHJvdG9jb2xzXQ0KKyAgZ0VmaURlY29tcHJlc3NQcm90b2NvbEd1aWQNCisgIGdFZmlQY2lSb290 QnJpZGdlSW9Qcm90b2NvbEd1aWQNCisgIGdFZmlTM1NhdmVTdGF0ZVByb3RvY29sR3VpZCAgICAg ICAgICAgICAgICAgICAjIFBST1RPQ09MIFNPTUVUSU1FU19DT05TVU1FRA0KKyAgZ0VmaUR4ZVNt bVJlYWR5VG9Mb2NrUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMgUFJPVE9DT0wgU09NRVRJTUVT X1BST0RVQ0VEDQorICBnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg ICAgIyBQUk9UT0NPTCBTT01FVElNRVNfUFJPRFVDRUQNCisgIGdFZmlGaXJtd2FyZVZvbHVtZTJQ cm90b2NvbEd1aWQgICAgICAgICAgICAgICAjIFBST1RPQ09MIFNPTUVUSU1FU19DT05TVU1FRA0K Kw0KK1tHdWlkc10NCisgIGdFZmlFbmRPZkR4ZUV2ZW50R3JvdXBHdWlkDQpkaWZmIC0tZ2l0IGEv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFi bGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxl c0xpYi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uOWI0YzJhNjI5 YQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5oDQpA QCAtMCwwICsxLDMzIEBADQorLyoqIEBmaWxlDQorICBTZXJpYWxpemUgVmFyaWFibGVzIExpYnJh cnkgaW1wbGVtZW50YXRpb24NCisNCisgIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTkgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisNCisgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBfX1NF UklBTElaRV9WQVJJQUJMRVNfTElCX0lOU1RBTkNFX18NCisjZGVmaW5lIF9fU0VSSUFMSVpFX1ZB UklBQkxFU19MSUJfSU5TVEFOQ0VfXw0KKw0KKyNpbmNsdWRlIDxVZWZpLmg+DQorDQorI2luY2x1 ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIu aD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L01l bW9yeUFsbG9jYXRpb25MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9TZXJpYWxpemVWYXJpYWJs ZXNMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4N CisjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCisNCisj ZGVmaW5lIFNWX0ZST01fSEFORExFKGEpICAgICAgIENSIChhLCBTVl9JTlNUQU5DRSwgU2lnbmF0 dXJlLCBTVl9TSUdOQVRVUkUpDQorI2RlZmluZSBTVl9TSUdOQVRVUkUgICAgICAgICAgICBTSUdO QVRVUkVfMzIgKCdTJywgJ1YnLCAnQScsICdSJykNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQorICBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyUHRyOw0KKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZTsNCisgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERhdGFTaXplOw0KK30gU1ZfSU5TVEFOQ0U7DQorDQorI2VuZGlm DQorDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL0xpYnJh cnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi5pbmYgYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvTGlicmFyeS9TZXJpYWxpemVWYXJpYWJsZXNM aWIvU2VyaWFsaXplVmFyaWFibGVzTGliLmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAuLjA4YzU2MWY1ODYNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJp YWxpemVWYXJpYWJsZXNMaWIuaW5mDQpAQCAtMCwwICsxLDM2IEBADQorIyMgQGZpbGUNCisjICBT ZXJpYWxpemUgVmFyaWFibGVzIExpYnJhcnkgaW1wbGVtZW50YXRpb24NCisjDQorIyAgVGhpcyBs aWJyYXJ5IHNlcmlhbGl6ZXMgYW5kIGRlc2VyaWFsaXplcyBVRUZJIHZhcmlhYmxlcw0KKyMNCisj IENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAg ICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gRHhlU2VyaWFsaXplVmFyaWFibGVzTGliDQorICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSAyNjZBMTQzNC02QjIyLTQ0MUYtQThEMi1ENTRBQThGREY5NUMNCisgIE1PRFVM RV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFVFRklfRFJJVkVSDQorICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAg ICA9IFNlcmlhbGl6ZVZhcmlhYmxlc0xpYnxEWEVfRFJJVkVSIERYRV9SVU5USU1FX0RSSVZFUiBV RUZJX0RSSVZFUg0KKw0KK1tTb3VyY2VzXQ0KKyAgU2VyaWFsaXplVmFyaWFibGVzTGliLmMNCisN CitbUGFja2FnZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1v ZHVsZVBrZy5kZWMNCisgIFNoZWxsUGtnL1NoZWxsUGtnLmRlYw0KKyAgU2ltaWNzT3BlbkJvYXJk UGtnL09wZW5Cb2FyZFBrZy5kZWMNCisNCitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTGliDQor ICBCYXNlTWVtb3J5TGliDQorICBEZWJ1Z0xpYg0KKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KKyAg VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQorICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWIN CisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5 L0xpYnJhcnkvU2lsaWNvblBvbGljeUluaXRMaWIvU2lsaWNvblBvbGljeUluaXRMaWIuaW5mIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGljeS9MaWJyYXJ5L1NpbGljb25Q b2xpY3lJbml0TGliL1NpbGljb25Qb2xpY3lJbml0TGliLmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLjZiZTNiMzAxYWQNCi0tLSAvZGV2L251bGwNCisrKyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9s aWN5SW5pdExpYi9TaWxpY29uUG9saWN5SW5pdExpYi5pbmYNCkBAIC0wLDAgKzEsMzggQEANCisj IyBAZmlsZQ0KKyMNCisjIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKyMNCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQorIw0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lP TiAgICAgICAgICA9IDB4MDAwMTAwMDUNCisgIEJBU0VfTkFNRSAgICAgICAgICAgID0gU2lsaWNv blBvbGljeUluaXRMaWINCisgIEZJTEVfR1VJRCAgICAgICAgICAgID0gQjQ5NERGMzktQTVGOC00 OEExLUIyRDAtRUY1MjNBRDkxQzU1DQorICBNT0RVTEVfVFlQRSAgICAgICAgICA9IFBFSU0NCisg IFZFUlNJT05fU1RSSU5HICAgICAgID0gMS4wDQorICBMSUJSQVJZX0NMQVNTICAgICAgICA9IFNp bGljb25Qb2xpY3lJbml0TGliDQorDQorW1NvdXJjZXNdDQorICBTaWxpY29uUG9saWN5SW5pdExp Yi5jDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjDQorIyBQYWNrYWdlIERlcGVuZGVu Y3kgU2VjdGlvbiAtIGxpc3Qgb2YgUGFja2FnZSBmaWxlcyB0aGF0IGFyZSByZXF1aXJlZCBmb3IN CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBtb2R1bGUuDQorIw0KKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5kZWMNCisN CitbTGlicmFyeUNsYXNzZXNdDQorICBCYXNlTWVtb3J5TGliDQorICBCYXNlTGliDQorICBEZWJ1 Z0xpYg0KKyAgRGVidWdQcmludEVycm9yTGV2ZWxMaWINCisgIEhvYkxpYg0KKyAgSW9MaWINCisg IE1lbW9yeUFsbG9jYXRpb25MaWINCisgIFBlaVNlcnZpY2VzTGliDQorDQpkaWZmIC0tZ2l0IGEv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1BvbGljeS9MaWJyYXJ5L1NpbGljb25Q b2xpY3lVcGRhdGVMaWIvU2lsaWNvblBvbGljeVVwZGF0ZUxpYi5pbmYgYi9QbGF0Zm9ybS9JbnRl bC9TaW1pY3NPcGVuQm9hcmRQa2cvUG9saWN5L0xpYnJhcnkvU2lsaWNvblBvbGljeVVwZGF0ZUxp Yi9TaWxpY29uUG9saWN5VXBkYXRlTGliLmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAuLjRmZGUzYzc1YTYNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9Qb2xpY3kvTGlicmFyeS9TaWxpY29uUG9saWN5VXBkYXRl TGliL1NpbGljb25Qb2xpY3lVcGRhdGVMaWIuaW5mDQpAQCAtMCwwICsxLDM1IEBADQorIyMgQGZp bGUNCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAg ICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAg ICAgICAgID0gU2lsaWNvblBvbGljeVVwZGF0ZUxpYg0KKyAgRklMRV9HVUlEICAgICAgICAgICAg ICAgICAgICAgID0gNkVBOTU4NUMtM0MxNS00N2RhLTlGRkMtMjVFOUU0RUE0RDBDDQorICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBQRUlNDQorICBWRVJTSU9OX1NUUklORyAgICAg ICAgICAgICAgICAgPSAxLjANCisgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IFNp bGljb25Qb2xpY3lVcGRhdGVMaWINCisNCitbU291cmNlc10NCisgIFNpbGljb25Qb2xpY3lVcGRh dGVMaWIuYw0KKw0KK1tQYWNrYWdlc10NCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorICBNZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEhvYkxpYg0K KyAgSW9MaWINCisgIFBjZExpYg0KKw0KK1tQY2RdDQorDQorW0ZpeGVkUGNkXQ0KKw0KK1tQcGlz XQ0KKw0KK1tHdWlkc10NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9h cmRQa2cvU2VjQ29yZS9JYTMyL1NlY0VudHJ5Lm5hc20gYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NP cGVuQm9hcmRQa2cvU2VjQ29yZS9JYTMyL1NlY0VudHJ5Lm5hc20NCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwLi5hZGI4N2RlOTQzDQotLS0gL2Rldi9udWxsDQorKysgYi9Q bGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9JYTMyL1NlY0VudHJ5Lm5h c20NCkBAIC0wLDAgKzEsNDUgQEANCis7IEBmaWxlDQorOyBDb3B5cmlnaHQgKGMpIDIwMDYgLSAy MDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorOw0KKzsg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCis7DQorDQorI2lu Y2x1ZGUgPEJhc2UuaD4NCisNCisgICAgU0VDVElPTiAudGV4dA0KKw0KK2V4dGVybiBBU01fUEZY KFNlY0NvcmVTdGFydHVwV2l0aFN0YWNrKQ0KKw0KKzsNCis7IFNlY0NvcmUgRW50cnkgUG9pbnQN Cis7DQorOyBQcm9jZXNzb3IgaXMgaW4gZmxhdCBwcm90ZWN0ZWQgbW9kZQ0KKzsNCis7IEBwYXJh bVtpbl0gIEVBWCAgIEluaXRpYWwgdmFsdWUgb2YgdGhlIEVBWCByZWdpc3RlciAoQklTVDogQnVp bHQtaW4gU2VsZiBUZXN0KQ0KKzsgQHBhcmFtW2luXSAgREkgICAgJ0JQJzogYm9vdC1zdHJhcCBw cm9jZXNzb3IsIG9yICdBUCc6IGFwcGxpY2F0aW9uIHByb2Nlc3Nvcg0KKzsgQHBhcmFtW2luXSAg RUJQICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIEJvb3QgRmlybXdhcmUgVm9sdW1lDQor Ow0KKzsgQHJldHVybiAgICAgTm9uZSAgVGhpcyByb3V0aW5lIGRvZXMgbm90IHJldHVybg0KKzsN CitnbG9iYWwgQVNNX1BGWChfTW9kdWxlRW50cnlQb2ludCkNCitBU01fUEZYKF9Nb2R1bGVFbnRy eVBvaW50KToNCisNCisgICAgOw0KKyAgICA7IExvYWQgdGVtcG9yYXJ5IFJBTSBzdGFjayBiYXNl ZCBvbiBQQ0RzDQorICAgIDsNCisgICAgJWRlZmluZSBTRUNfVE9QX09GX1NUQUNLIChGaXhlZFBj ZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtQmFzZSkgKyBcDQorICAgICAgICAgICAgICAg ICAgICAgICAgICBGaXhlZFBjZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtU2l6ZSkpDQor ICAgIG1vdiAgICAgZWF4LCBTRUNfVE9QX09GX1NUQUNLDQorICAgIG1vdiAgICAgZXNwLCBlYXgN CisgICAgbm9wDQorDQorICAgIDsNCisgICAgOyBTZXR1cCBwYXJhbWV0ZXJzIGFuZCBjYWxsIFNl Y0NvcmVTdGFydHVwV2l0aFN0YWNrDQorICAgIDsgICBbZXNwXSAgIHJldHVybiBhZGRyZXNzIGZv ciBjYWxsDQorICAgIDsgICBbZXNwKzRdIEJvb3RGaXJtd2FyZVZvbHVtZVB0cg0KKyAgICA7ICAg W2VzcCs4XSBUb3BPZkN1cnJlbnRTdGFjaw0KKyAgICA7DQorICAgIHB1c2ggICAgZWF4DQorICAg IHB1c2ggICAgZWJwDQorICAgIGNhbGwgICAgQVNNX1BGWChTZWNDb3JlU3RhcnR1cFdpdGhTdGFj aykNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2Vj Q29yZS9TZWNNYWluLmluZiBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TZWND b3JlL1NlY01haW4uaW5mDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4u YjFkMzE5YzVlYQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3Bl bkJvYXJkUGtnL1NlY0NvcmUvU2VjTWFpbi5pbmYNCkBAIC0wLDAgKzEsNzMgQEANCisjIyBAZmls ZQ0KKyMgIFNFQyBEcml2ZXINCisjDQorIyBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDE5IEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+DQorIw0KKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyMNCisNCitbRGVmaW5l c10NCisgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCisgIEJB U0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFNlY01haW4NCisgIEZJTEVfR1VJRCAgICAg ICAgICAgICAgICAgICAgICA9IGU2N2YxNTZmLTU0YzUtNDdmMy1hMzVkLTA3YzA0NTg4MWUxNA0K KyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gU0VDDQorICBWRVJTSU9OX1NUUklO RyAgICAgICAgICAgICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAg ICA9IFNlY01haW4NCisNCisjDQorIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciBy ZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCisjDQor IyAgVkFMSURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMNCisjDQorDQor W1NvdXJjZXNdDQorICBTZWNNYWluLmMNCisNCitbU291cmNlcy5JQTMyXQ0KKyAgSWEzMi9TZWNF bnRyeS5uYXNtDQorDQorW1NvdXJjZXMuWDY0XQ0KKyAgWDY0L1NlY0VudHJ5Lm5hc20NCisNCitb UGFja2FnZXNdDQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVs ZVBrZy5kZWMNCisgIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCisgIFNpbWljc1g1OFNrdFBr Zy9Ta3RQa2cuZGVjDQorICBTaW1pY3NPcGVuQm9hcmRQa2cvT3BlbkJvYXJkUGtnLmRlYw0KKyAg U2ltaWNzSWNoMTBQa2cvSWNoMTBQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgQmFz ZUxpYg0KKyAgRGVidWdMaWINCisgIEJhc2VNZW1vcnlMaWINCisgIFBlaVNlcnZpY2VzTGliDQor ICBQY2RMaWINCisgIFVlZmlDcHVMaWINCisgIERlYnVnQWdlbnRMaWINCisgIElvTGliDQorICBQ ZUNvZmZMaWINCisgIFBlQ29mZkdldEVudHJ5UG9pbnRMaWINCisgIFBlQ29mZkV4dHJhQWN0aW9u TGliDQorICBFeHRyYWN0R3VpZGVkU2VjdGlvbkxpYg0KKyAgTG9jYWxBcGljTGliDQorICBQY2lD ZjhMaWINCisNCitbUHBpc10NCisgIGdFZmlUZW1wb3JhcnlSYW1TdXBwb3J0UHBpR3VpZCAgICAg ICAgICAgICAgICAjIFBQSSBBTFdBWVNfUFJPRFVDRUQNCisNCitbUGNkXQ0KKyAgZ0JvYXJkTW9k dWxlVG9rZW5TcGFjZUd1aWQuUGNkU2ltaWNzUGVpTWVtRnZCYXNlDQorICBnQm9hcmRNb2R1bGVU b2tlblNwYWNlR3VpZC5QY2RTaW1pY3NQZWlNZW1GdlNpemUNCisgIGdCb2FyZE1vZHVsZVRva2Vu U3BhY2VHdWlkLlBjZFNpbWljc0R4ZU1lbUZ2QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFj ZUd1aWQuUGNkU2ltaWNzRHhlTWVtRnZTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3Vp ZC5QY2RTaW1pY3NTZWNQYWdlVGFibGVzQmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1 aWQuUGNkU2ltaWNzU2VjUGVpVGVtcFJhbUJhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VH dWlkLlBjZFNpbWljc1NlY1BlaVRlbXBSYW1TaXplDQorICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1 aWQuUGNkR3VpZGVkRXh0cmFjdEhhbmRsZXJUYWJsZUFkZHJlc3MNCisgIGdCb2FyZE1vZHVsZVRv a2VuU3BhY2VHdWlkLlBjZEd1aWRlZEV4dHJhY3RIYW5kbGVyVGFibGVTaXplDQorICBnQm9hcmRN b2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NEZWNvbXByZXNzaW9uU2NyYXRjaEVuZA0KKw0K K1tGZWF0dXJlUGNkXQ0KKyAgZ1NpbWljc1g1OFBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNtbVNtcmFt UmVxdWlyZQ0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9T ZWNDb3JlL1g2NC9TZWNFbnRyeS5uYXNtIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJk UGtnL1NlY0NvcmUvWDY0L1NlY0VudHJ5Lm5hc20NCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwLi4yZTZkOGY2MThjDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9J bnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2VjQ29yZS9YNjQvU2VjRW50cnkubmFzbQ0KQEAgLTAs MCArMSw0NSBAQA0KKzsgQGZpbGUNCis7IENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTkgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCis7DQorOyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKzsNCisNCisjaW5jbHVkZSA8QmFz ZS5oPg0KKw0KK0RFRkFVTFQgUkVMDQorU0VDVElPTiAudGV4dA0KKw0KK2V4dGVybiBBU01fUEZY KFNlY0NvcmVTdGFydHVwV2l0aFN0YWNrKQ0KKw0KKzsNCis7IFNlY0NvcmUgRW50cnkgUG9pbnQN Cis7DQorOyBQcm9jZXNzb3IgaXMgaW4gZmxhdCBwcm90ZWN0ZWQgbW9kZQ0KKzsNCis7IEBwYXJh bVtpbl0gIFJBWCAgIEluaXRpYWwgdmFsdWUgb2YgdGhlIEVBWCByZWdpc3RlciAoQklTVDogQnVp bHQtaW4gU2VsZiBUZXN0KQ0KKzsgQHBhcmFtW2luXSAgREkgICAgJ0JQJzogYm9vdC1zdHJhcCBw cm9jZXNzb3IsIG9yICdBUCc6IGFwcGxpY2F0aW9uIHByb2Nlc3Nvcg0KKzsgQHBhcmFtW2luXSAg UkJQICAgUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIEJvb3QgRmlybXdhcmUgVm9sdW1lDQor Ow0KKzsgQHJldHVybiAgICAgTm9uZSAgVGhpcyByb3V0aW5lIGRvZXMgbm90IHJldHVybg0KKzsN CitnbG9iYWwgQVNNX1BGWChfTW9kdWxlRW50cnlQb2ludCkNCitBU01fUEZYKF9Nb2R1bGVFbnRy eVBvaW50KToNCisNCisgICAgOw0KKyAgICA7IExvYWQgdGVtcG9yYXJ5IFJBTSBzdGFjayBiYXNl ZCBvbiBQQ0RzDQorICAgIDsNCisgICAgJWRlZmluZSBTRUNfVE9QX09GX1NUQUNLIChGaXhlZFBj ZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtQmFzZSkgKyBcDQorICAgICAgICAgICAgICAg ICAgICAgICAgICBGaXhlZFBjZEdldDMyIChQY2RTaW1pY3NTZWNQZWlUZW1wUmFtU2l6ZSkpDQor ICAgIG1vdiAgICAgcnNwLCBTRUNfVE9QX09GX1NUQUNLDQorICAgIG5vcA0KKw0KKyAgICA7DQor ICAgIDsgU2V0dXAgcGFyYW1ldGVycyBhbmQgY2FsbCBTZWNDb3JlU3RhcnR1cFdpdGhTdGFjaw0K KyAgICA7ICAgcmN4OiBCb290RmlybXdhcmVWb2x1bWVQdHINCisgICAgOyAgIHJkeDogVG9wT2ZD dXJyZW50U3RhY2sNCisgICAgOw0KKyAgICBtb3YgICAgIHJjeCwgcmJwDQorICAgIG1vdiAgICAg cmR4LCByc3ANCisgICAgc3ViICAgICByc3AsIDB4MjANCisgICAgY2FsbCAgICBBU01fUEZYKFNl Y0NvcmVTdGFydHVwV2l0aFN0YWNrKQ0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0uaCBiL1BsYXRmb3JtL0ludGVsL1Np bWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0uaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAuLjYyM2Q4YWQyYTkNCi0tLSAvZGV2L251bGwNCisrKyBiL1Bs YXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0uaA0KQEAg LTAsMCArMSwzOCBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBkcml2ZXIgZWZmZWN0dWF0ZXMgUVNQ IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGV4cG9zZXMNCisgIHRoZW0gdmlh IEhJSS4NCisNCisgIENvcHlyaWdodCAoQykgMjAxNCwgUmVkIEhhdCwgSW5jLg0KKyAgQ29weXJp Z2h0IChjKSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiA8QlI+ DQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoq Lw0KKw0KKyNpZm5kZWYgX1BMQVRGT1JNX0hfDQorI2RlZmluZSBfUExBVEZPUk1fSF8NCisNCisv Lw0KKy8vIE1hY3JvIGFuZCB0eXBlIGRlZmluaXRpb25zIHRoYXQgY29ubmVjdCB0aGUgZm9ybSB3 aXRoIHRoZSBISUkgZHJpdmVyIGNvZGUuDQorLy8NCisjZGVmaW5lIEZPUk1TVEFURUlEX01BSU5f Rk9STSAgMQ0KKyNkZWZpbmUgRk9STUlEX01BSU5fRk9STSAgICAgICAxDQorDQorI2RlZmluZSBR VUVTVElPTl9SRVNfQ1VSICAgICAgIDENCisjZGVmaW5lIE1BWFNJWkVfUkVTX0NVUiAgICAgICAx Ng0KKw0KKyNkZWZpbmUgTEFCRUxfUkVTX05FWFQgICAgICAgICAxDQorI2RlZmluZSBRVUVTVElP Tl9SRVNfTkVYVCAgICAgIDINCisNCisjZGVmaW5lIFFVRVNUSU9OX1NBVkVfRVhJVCAgICAgMw0K KyNkZWZpbmUgUVVFU1RJT05fRElTQ0FSRF9FWElUICA0DQorDQorLy8NCisvLyBUaGlzIHN0cnVj dHVyZSBkZXNjcmliZXMgdGhlIGZvcm0gc3RhdGUuIEl0cyBmaWVsZHMgcmVsYXRlIHN0cmljdGx5 IHRvIHRoZQ0KKy8vIHZpc3VhbCB3aWRnZXRzIG9uIHRoZSBmb3JtLg0KKy8vDQordHlwZWRlZiBz dHJ1Y3Qgew0KKyAgVUlOVDE2IEN1cnJlbnRQcmVmZXJyZWRSZXNvbHV0aW9uW01BWFNJWkVfUkVT X0NVUl07DQorICBVSU5UMzIgTmV4dFByZWZlcnJlZFJlc29sdXRpb247DQorfSBNQUlOX0ZPUk1f U1RBVEU7DQorDQorI2VuZGlmIC8vIF9QTEFURk9STV9IXw0KZGlmZiAtLWdpdCBhL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm0udW5pIGIvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9QbGF0Zm9ybS51bmkNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4zZDlhZjE0OGVjDQotLS0gL2Rldi9u dWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1Bs YXRmb3JtLnVuaQ0KQEAgLTAsMCArMSwzMSBAQA0KKy8vICorKw0KKy8vDQorLy8gQ29weXJpZ2h0 IChDKSAyMDE0LCBSZWQgSGF0LCBJbmMuDQorLy8gQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorLy8NCisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKy8vDQorLy8gTW9kdWxlIE5hbWU6 DQorLy8NCisvLyAgIFBsYXRmb3JtLnVuaQ0KKy8vDQorLy8gQWJzdHJhY3Q6DQorLy8NCisvLyAg IFN0cmluZyBkZWZpbml0aW9ucyBmb3IgUGxhdGZvcm1Gb3Jtcy52ZnINCisvLw0KKy8vIC0tKi8N CisNCisvPSMNCisNCisjbGFuZ2RlZiBlbi1VUyAiRW5nbGlzaCINCisNCisjc3RyaW5nIFNUUl9G T1JNU0VUX1RJVExFICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlFTUCBQbGF0Zm9ybSBDb25maWd1 cmF0aW9uIg0KKyNzdHJpbmcgU1RSX0ZPUk1TRVRfSEVMUCAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiQ2hhbmdlIHZhcmlvdXMgUVNQIHBsYXRmb3JtIHNldHRpbmdzLiINCisjc3RyaW5nIFNUUl9N QUlOX0ZPUk1fVElUTEUgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlFTUCBTZXR0aW5ncyINCisjc3Ry aW5nIFNUUl9SRVNfQ1VSICAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlByZWZlcnJlZCBS ZXNvbHV0aW9uIGF0IE5leHQgQm9vdCINCisjc3RyaW5nIFNUUl9SRVNfQ1VSX0hFTFAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIlRoZSBwcmVmZXJyZWQgcmVzb2x1dGlvbiBvZiB0aGUgR3JhcGhp Y3MgQ29uc29sZSBhdCBuZXh0IGJvb3QuIEl0IG1pZ2h0IGJlIHVuc2V0LCBvciBldmVuIGludmFs aWQgKGhlbmNlIGlnbm9yZWQpIHdydC4gdGhlIHZpZGVvIFJBTSBzaXplLiINCisjc3RyaW5nIFNU Ul9SRVNfTkVYVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkNoYW5nZSBQcmVmZXJyZWQg UmVzb2x1dGlvbiBmb3IgTmV4dCBCb290Ig0KKyNzdHJpbmcgU1RSX1JFU19ORVhUX0hFTFAgICAg ICAgICNsYW5ndWFnZSBlbi1VUyAiWW91IGNhbiBzcGVjaWZ5IGEgbmV3IHByZWZlcmVuY2UgZm9y IHRoZSBHcmFwaGljcyBDb25zb2xlIGhlcmUuIFRoZSBsaXN0IGlzIGZpbHRlcmVkIGFnYWluc3Qg dGhlIHZpZGVvIFJBTSBzaXplLiINCisjc3RyaW5nIFNUUl9TQVZFX0VYSVQgICAgICAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgIkNvbW1pdCBDaGFuZ2VzIGFuZCBFeGl0Ig0KKyNzdHJpbmcgU1RSX0RJ U0NBUkRfRVhJVCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiRGlzY2FyZCBDaGFuZ2VzIGFuZCBF eGl0Ig0KKw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9T aW1pY3NEeGUvUGxhdGZvcm1Db25maWcuaCBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Db25maWcuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAuLmMyMDYzYzQyN2INCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Db25maWcuaA0KQEAg LTAsMCArMSw1MiBAQA0KKy8qKiBAZmlsZQ0KKyAgVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHNlcmlh bGl6aW5nIChwZXJzaXN0ZW50bHkgc3RvcmluZykgYW5kIGRlc2VyaWFsaXppbmcNCisgIFNpbWlj cydzIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uDQorDQorICBDb3B5cmlnaHQgKEMpIDIwMTQsIFJl ZCBIYXQsIEluYy4NCisgIENvcHlyaWdodCAoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIF9QTEFURk9STV9DT05GSUdfSF8N CisjZGVmaW5lIF9QTEFURk9STV9DT05GSUdfSF8NCisNCisjaW5jbHVkZSA8QmFzZS5oPg0KKw0K Ky8vDQorLy8gVGhpcyBzdHJ1Y3R1cmUgcGFydGljaXBhdGVzIGluIGRyaXZlciBjb25maWd1cmF0 aW9uLiBJdCBkb2VzIG5vdA0KKy8vIChuZWNlc3NhcmlseSkgcmVmbGVjdCB0aGUgd2lyZSBmb3Jt YXQgaW4gdGhlIHBlcnNpc3RlbnQgc3RvcmUuDQorLy8NCisjcHJhZ21hIHBhY2soMSkNCit0eXBl ZGVmIHN0cnVjdCB7DQorICAvLw0KKyAgLy8gcHJlZmVycmVkIGdyYXBoaWNzIGNvbnNvbGUgcmVz b2x1dGlvbiB3aGVuIGJvb3RpbmcNCisgIC8vDQorICBVSU5UMzIgSG9yaXpvbnRhbFJlc29sdXRp b247DQorICBVSU5UMzIgVmVydGljYWxSZXNvbHV0aW9uOw0KK30gUExBVEZPUk1fQ09ORklHOw0K KyNwcmFnbWEgcGFjaygpDQorDQorLy8NCisvLyBQbGVhc2Ugc2VlIHRoZSBBUEkgZG9jdW1lbnRh dGlvbiBuZWFyIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4NCisvLw0KK0VGSV9TVEFUVVMNCitF RklBUEkNCitQbGF0Zm9ybUNvbmZpZ1NhdmUgKA0KKyAgSU4gUExBVEZPUk1fQ09ORklHICpQbGF0 Zm9ybUNvbmZpZw0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorUGxhdGZvcm1Db25m aWdMb2FkICgNCisgIE9VVCBQTEFURk9STV9DT05GSUcgKlBsYXRmb3JtQ29uZmlnLA0KKyAgT1VU IFVJTlQ2NCAgICAgICAgICAqT3B0aW9uYWxFbGVtZW50cw0KKyAgKTsNCisNCisvLw0KKy8vIEZl YXR1cmUgZmxhZ3MgZm9yIE9wdGlvbmFsRWxlbWVudHMuDQorLy8NCisjZGVmaW5lIFBMQVRGT1JN X0NPTkZJR19GX0dSQVBISUNTX1JFU09MVVRJT04gQklUMA0KKyNkZWZpbmUgUExBVEZPUk1fQ09O RklHX0ZfRE9XTkdSQURFICAgICAgICAgICBCSVQ2Mw0KKw0KKyNlbmRpZiAvLyBfUExBVEZPUk1f Q09ORklHX0hfDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtn L1NpbWljc0R4ZS9QbGF0Zm9ybUZvcm1zLnZmciBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5C b2FyZFBrZy9TaW1pY3NEeGUvUGxhdGZvcm1Gb3Jtcy52ZnINCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwLi5hMzg1MjFlOGQzDQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0 Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzRHhlL1BsYXRmb3JtRm9ybXMudmZy DQpAQCAtMCwwICsxLDY3IEBADQorLy8gKisrDQorLy8NCisvLyBDb3B5cmlnaHQgKEMpIDIwMTQs IFJlZCBIYXQsIEluYy4NCisvLyBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE5LCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorLy8NCisvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKy8vDQorLy8gTW9kdWxlIE5hbWU6DQor Ly8NCisvLyAgIFBsYXRmb3JtRm9ybXMudmZyDQorLy8NCisvLyBBYnN0cmFjdDoNCisvLw0KKy8v ICAgRm9ybSBkZWZpbml0aW9ucyBmb3IgZXhwb3Npbmcgc29tZSBvZiBPVk1GJ3MgcGxhdGZvcm0g a25vYnMgdmlhIEhJSS4NCisvLw0KKy8vIC0tKi8NCisNCisjaW5jbHVkZSA8R3VpZC9TaW1pY3NC b2FyZENvbmZpZy5oPg0KKyNpbmNsdWRlICJQbGF0Zm9ybS5oIg0KKw0KK2Zvcm1zZXQNCisgIGd1 aWQgID0gU0lNSUNTX0JPQVJEX0NPTkZJR19HVUlELA0KKyAgdGl0bGUgPSBTVFJJTkdfVE9LRU4o U1RSX0ZPUk1TRVRfVElUTEUpLA0KKyAgaGVscCAgPSBTVFJJTkdfVE9LRU4oU1RSX0ZPUk1TRVRf SEVMUCksDQorDQorICB2YXJzdG9yZSBNQUlOX0ZPUk1fU1RBVEUsDQorICAgIHZhcmlkID0gRk9S TVNUQVRFSURfTUFJTl9GT1JNLA0KKyAgICBuYW1lICA9IE1haW5Gb3JtU3RhdGUsDQorICAgIGd1 aWQgID0gU0lNSUNTX0JPQVJEX0NPTkZJR19HVUlEOw0KKw0KKyAgZm9ybQ0KKyAgICBmb3JtaWQg PSBGT1JNSURfTUFJTl9GT1JNLA0KKyAgICB0aXRsZSAgPSBTVFJJTkdfVE9LRU4oU1RSX01BSU5f Rk9STV9USVRMRSk7DQorDQorICAgIC8vDQorICAgIC8vIERpc3BsYXkgdGhlIGN1cnJlbnQgcHJl ZmVyZW5jZSBpbiBhIHJlYWQtb25seSBzdHJpbmcgZmllbGQuDQorICAgIC8vDQorICAgIHN0cmlu Zw0KKyAgICAgIHZhcmlkICAgICAgPSBNYWluRm9ybVN0YXRlLkN1cnJlbnRQcmVmZXJyZWRSZXNv bHV0aW9uLA0KKyAgICAgIHF1ZXN0aW9uaWQgPSBRVUVTVElPTl9SRVNfQ1VSLA0KKyAgICAgIHBy b21wdCAgICAgPSBTVFJJTkdfVE9LRU4oU1RSX1JFU19DVVIpLA0KKyAgICAgIGhlbHAgICAgICAg PSBTVFJJTkdfVE9LRU4oU1RSX1JFU19DVVJfSEVMUCksDQorICAgICAgZmxhZ3MgICAgICA9IFJF QURfT05MWSwNCisgICAgICBtaW5zaXplICAgID0gMCwNCisgICAgICBtYXhzaXplICAgID0gTUFY U0laRV9SRVNfQ1VSLA0KKyAgICBlbmRzdHJpbmc7DQorDQorICAgIC8vDQorICAgIC8vIFdlJ2xs IGR5bmFtaWNhbGx5IGdlbmVyYXRlIGEgb25lLW9mLW1hbnkgc2VsZWN0aW9uIGF0IHRoaXMgbGFi ZWwuDQorICAgIC8vDQorICAgIGxhYmVsIExBQkVMX1JFU19ORVhUOw0KKw0KKyAgICB0ZXh0DQor ICAgICAgaGVscCAgPSBTVFJJTkdfVE9LRU4oU1RSX1NBVkVfRVhJVCksDQorICAgICAgdGV4dCAg PSBTVFJJTkdfVE9LRU4oU1RSX1NBVkVfRVhJVCksDQorICAgICAgZmxhZ3MgPSBJTlRFUkFDVElW RSwNCisgICAgICBrZXkgICA9IFFVRVNUSU9OX1NBVkVfRVhJVDsNCisNCisgICAgdGV4dA0KKyAg ICAgIGhlbHAgID0gU1RSSU5HX1RPS0VOKFNUUl9ESVNDQVJEX0VYSVQpLA0KKyAgICAgIHRleHQg ID0gU1RSSU5HX1RPS0VOKFNUUl9ESVNDQVJEX0VYSVQpLA0KKyAgICAgIGZsYWdzID0gSU5URVJB Q1RJVkUsDQorICAgICAga2V5ICAgPSBRVUVTVElPTl9ESVNDQVJEX0VYSVQ7DQorDQorICBlbmRm b3JtOw0KKw0KK2VuZGZvcm1zZXQ7DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50ZWwvU2ltaWNz T3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9TaW1pY3NEeGUuaW5mIGIvUGxhdGZvcm0vSW50ZWwvU2lt aWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9TaW1pY3NEeGUuaW5mDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uZWVmMTg3ZDJhNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIv UGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc0R4ZS9TaW1pY3NEeGUuaW5m DQpAQCAtMCwwICsxLDY1IEBADQorIyMgQGZpbGUNCisjICBUaGlzIGRyaXZlciBlZmZlY3R1YXRl cyBTaW1pY3MgWDU4IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIGV4cG9zZXMN CisjICB0aGVtIHZpYSBISUkuDQorIw0KKyMgIENvcHlyaWdodCAoQykgMjAxNCwgUmVkIEhhdCwg SW5jLg0KKyMgIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJ T04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1FICAgICAgICAg ICAgICAgICAgICAgID0gU2ltaWNzRHhlDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAg ICAgPSA3NEI2NERDMS1CMEI2LTQ4NTMtQTZCRC1DNjQyNjA1OUFCMUUNCisgIE1PRFVMRV9UWVBF ICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklWRVINCisgIFZFUlNJT05fU1RSSU5HICAgICAg ICAgICAgICAgICA9IDEuMA0KKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gUGxh dGZvcm1Jbml0DQorICBVTkxPQURfSU1BR0UgICAgICAgICAgICAgICAgICAgPSBQbGF0Zm9ybVVu bG9hZA0KKw0KK1tTb3VyY2VzXQ0KKyAgUGxhdGZvcm0uYw0KKyAgUGxhdGZvcm0udW5pDQorICBQ bGF0Zm9ybUNvbmZpZy5jDQorICBQbGF0Zm9ybUZvcm1zLnZmcg0KKw0KK1tQYWNrYWdlc10NCisg IE1kZVBrZy9NZGVQa2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAg U2ltaWNzT3BlbkJvYXJkUGtnL09wZW5Cb2FyZFBrZy5kZWMNCisgIE1pblBsYXRmb3JtUGtnL01p blBsYXRmb3JtUGtnLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIEJhc2VMaWINCisgIEJh c2VNZW1vcnlMaWINCisgIERlYnVnTGliDQorICBEZXZpY2VQYXRoTGliDQorICBIaWlMaWINCisg IE1lbW9yeUFsbG9jYXRpb25MaWINCisgIFByaW50TGliDQorICBVZWZpQm9vdFNlcnZpY2VzVGFi bGVMaWINCisgIFVlZmlIaWlTZXJ2aWNlc0xpYg0KKyAgVWVmaUxpYg0KKyAgVWVmaVJ1bnRpbWVT ZXJ2aWNlc1RhYmxlTGliDQorICBVZWZpRHJpdmVyRW50cnlQb2ludA0KKyAgRHhlU2VydmljZXNU YWJsZUxpYg0KKw0KK1tQY2RdDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNk VmlkZW9Ib3Jpem9udGFsUmVzb2x1dGlvbg0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VH dWlkLlBjZFZpZGVvVmVydGljYWxSZXNvbHV0aW9uDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlE ZXZpY2VQYXRoUHJvdG9jb2xHdWlkICAgICAgIyMgUFJPRFVDRVMNCisgIGdFZmlHcmFwaGljc091 dHB1dFByb3RvY29sR3VpZCAgIyMgQ09OU1VNRVMNCisgIGdFZmlIaWlDb25maWdBY2Nlc3NQcm90 b2NvbEd1aWQgIyMgUFJPRFVDRVMNCisNCitbR3VpZHNdDQorICBnRWZpSWZyVGlhbm9HdWlkDQor ICBnU2ltaWNzQm9hcmRDb25maWdHdWlkDQorDQorW0RlcGV4XQ0KKyAgZ0VmaUhpaUNvbmZpZ1Jv dXRpbmdQcm90b2NvbEd1aWQgIEFORA0KKyAgZ0VmaUhpaURhdGFiYXNlUHJvdG9jb2xHdWlkICAg ICAgIEFORA0KKyAgZ0VmaVZhcmlhYmxlQXJjaFByb3RvY29sR3VpZCAgICAgIEFORA0KKyAgZ0Vm aVZhcmlhYmxlV3JpdGVBcmNoUHJvdG9jb2xHdWlkDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vSW50 ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NpbWljc1BlaS9DbW9zLmggYi9QbGF0Zm9ybS9JbnRlbC9T aW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL0Ntb3MuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAuLjA3ZmEyZTJkMTENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRm b3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvQ21vcy5oDQpAQCAtMCwwICsx LDUwIEBADQorLyoqIEBmaWxlDQorICBQQy9BVCBDTU9TIGFjY2VzcyByb3V0aW5lcw0KKw0KKyAg Q29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIF9fQ01PU19IX18NCisjZGVmaW5lIF9fQ01PU19I X18NCisNCisvKioNCisgIFJlYWRzIDgtYml0cyBvZiBDTU9TIGRhdGEuDQorDQorICBSZWFkcyB0 aGUgOC1iaXRzIG9mIENNT1MgZGF0YSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IEluZGV4 Lg0KKyAgVGhlIDgtYml0IHJlYWQgdmFsdWUgaXMgcmV0dXJuZWQuDQorDQorICBAcGFyYW0gIElu ZGV4ICBUaGUgQ01PUyBsb2NhdGlvbiB0byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUg cmVhZC4NCisNCisqKi8NCitVSU5UOA0KK0VGSUFQSQ0KK0Ntb3NSZWFkOCAoDQorICBJTiAgICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXgNCisgICk7DQorDQorLyoqDQorICBXcml0 ZXMgOC1iaXRzIG9mIENNT1MgZGF0YS4NCisNCisgIFdyaXRlcyA4LWJpdHMgb2YgQ01PUyBkYXRh IHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgSW5kZXgNCisgIHdpdGggdGhlIHZhbHVlIHNw ZWNpZmllZCBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4NCisNCisgIEBwYXJhbSAgSW5kZXgg IFRoZSBDTU9TIGxvY2F0aW9uIHRvIHdyaXRlLg0KKyAgQHBhcmFtICBWYWx1ZSAgVGhlIHZhbHVl IHRvIHdyaXRlIHRvIENNT1MuDQorDQorICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIENN T1MuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitDbW9zV3JpdGU4ICgNCisgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleCwNCisgIElOICAgICAgVUlOVDggICAgICAg ICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKTsNCisNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQg YS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1BsYXRmb3JtLmgg Yi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNzUGVpL1BsYXRmb3JtLmgN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4xMDJkMjFjZDY0DQotLS0g L2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQa2cvU2ltaWNz UGVpL1BsYXRmb3JtLmgNCkBAIC0wLDAgKzEsODggQEANCisvKiogQGZpbGUNCisgIFBsYXRmb3Jt IFBFSSBtb2R1bGUgaW5jbHVkZSBmaWxlLg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gPEJSPg0KKw0KKyAgU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZu ZGVmIF9QTEFURk9STV9QRUlfSF9JTkNMVURFRF8NCisjZGVmaW5lIF9QTEFURk9STV9QRUlfSF9J TkNMVURFRF8NCisNCitWT0lEDQorQWRkSW9NZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZ U0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICBNZW1vcnlTaXplDQorICApOw0KKw0KK1ZPSUQNCitBZGRJb01lbW9yeVJhbmdlSG9i ICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlCYXNlLA0KKyAgRUZJX1BI WVNJQ0FMX0FERFJFU1MgICAgICAgIE1lbW9yeUxpbWl0DQorICApOw0KKw0KK1ZPSUQNCitBZGRN ZW1vcnlCYXNlU2l6ZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5 QmFzZSwNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQorICApOw0K Kw0KK1ZPSUQNCitBZGRNZW1vcnlSYW5nZUhvYiAoDQorICBFRklfUEhZU0lDQUxfQUREUkVTUyAg ICAgICAgTWVtb3J5QmFzZSwNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1vcnlM aW1pdA0KKyAgKTsNCisNCitWT0lEDQorQWRkVW50ZXN0ZWRNZW1vcnlCYXNlU2l6ZUhvYiAoDQor ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgTWVtb3J5QmFzZSwNCisgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICBNZW1vcnlTaXplDQorICApOw0KKw0KK1ZPSUQNCitBZGRSZXNlcnZl ZE1lbW9yeUJhc2VTaXplSG9iICgNCisgIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgICBNZW1v cnlCYXNlLA0KKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNpemUsDQorICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgQ2FjaGVhYmxlDQorICApOw0KKw0KK1ZPSUQNCitB ZGRyZXNzV2lkdGhJbml0aWFsaXphdGlvbiAoDQorICBWT0lEDQorICApOw0KKw0KK1ZPSUQNCitY NThUc2VnTWJ5dGVzSW5pdGlhbGl6YXRpb24gKA0KKyAgVk9JRA0KKyAgKTsNCisNCitFRklfU1RB VFVTDQorUHVibGlzaFBlaU1lbW9yeSAoDQorICBWT0lEDQorICApOw0KKw0KK1VJTlQzMg0KK0dl dFN5c3RlbU1lbW9yeVNpemVCZWxvdzRnYiAoDQorICBWT0lEDQorICApOw0KKw0KK1ZPSUQNCitJ bml0aWFsaXplUmFtUmVnaW9ucyAoDQorICBWT0lEDQorICApOw0KKw0KK1ZPSUQNCitJbnN0YWxs RmVhdHVyZUNvbnRyb2xDYWxsYmFjayAoDQorICBWT0lEDQorICApOw0KKw0KK2V4dGVybiBFRklf Qk9PVF9NT0RFIG1Cb290TW9kZTsNCisNCitleHRlcm4gQk9PTEVBTiBtUzNTdXBwb3J0ZWQ7DQor DQorZXh0ZXJuIFVJTlQ4IG1QaHlzTWVtQWRkcmVzc1dpZHRoOw0KKw0KK2V4dGVybiBVSU5UMzIg bU1heENwdUNvdW50Ow0KKw0KK2V4dGVybiBVSU5UMTYgbUhvc3RCcmlkZ2VEZXZJZDsNCisjZW5k aWYgLy8gX1BMQVRGT1JNX1BFSV9IX0lOQ0xVREVEXw0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0lu dGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvU2ltaWNzUGVpLmluZiBiL1BsYXRmb3Jt L0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvU2ltaWNzUGVpLmluZg0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmNjYzcwMzdkNzUNCi0tLSAvZGV2L251 bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2FyZFBrZy9TaW1pY3NQZWkvU2lt aWNzUGVpLmluZg0KQEAgLTAsMCArMSwxMDQgQEANCisjIyBAZmlsZQ0KKyMgIFBsYXRmb3JtIFBF SSBkcml2ZXINCisjDQorIyAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgcGxhdGZvcm0gc3BlY2lmaWMg ZnVuY3Rpb24gdG8gZGV0ZWN0IGJvb3QgbW9kZS4NCisjIENvcHlyaWdodCAoYykgMjAwNiAtIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIDxCUj4NCisjDQorIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0K K1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAw NQ0KKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gU2ltaWNzUGVpDQorICBGSUxF X0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAwNTExNjIxOC1mOWYxLTQxZjgtOGQxNy1jMjIw NzAwNmZmZmYNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IFBFSU0NCisgIFZF UlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKyAgRU5UUllfUE9JTlQgICAgICAg ICAgICAgICAgICAgID0gSW5pdGlhbGl6ZVBsYXRmb3JtDQorDQorIw0KKyMgVGhlIGZvbGxvd2lu ZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZCBieSB0 aGUgYnVpbGQgdG9vbHMuDQorIw0KKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0g SUEzMiBYNjQgRUJDDQorIw0KKw0KK1tTb3VyY2VzXQ0KKyAgQ21vcy5jDQorICBGZWF0dXJlQ29u dHJvbC5jDQorICBNZW1EZXRlY3QuYw0KKyAgUGxhdGZvcm0uYw0KKw0KK1tQYWNrYWdlc10NCisg IE1kZVBrZy9NZGVQa2cuZGVjDQorICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KKyAg VWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRlYw0KKyAgU2ltaWNzT3BlbkJvYXJkUGtnL09wZW5Cb2Fy ZFBrZy5kZWMNCisgIE1pblBsYXRmb3JtUGtnL01pblBsYXRmb3JtUGtnLmRlYw0KKyAgU2ltaWNz WDU4U2t0UGtnL1NrdFBrZy5kZWMNCisgIFNpbWljc0ljaDEwUGtnL0ljaDEwUGtnLmRlYw0KKw0K K1tHdWlkc10NCisgIGdFZmlNZW1vcnlUeXBlSW5mb3JtYXRpb25HdWlkDQorICBnRWZpU21tUGVp U21yYW1NZW1vcnlSZXNlcnZlR3VpZCAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCisNCitbTGli cmFyeUNsYXNzZXNdDQorICBCYXNlTGliDQorICBEZWJ1Z0xpYg0KKyAgSG9iTGliDQorICBJb0xp Yg0KKyAgUGNpTGliDQorICBQZWlSZXNvdXJjZVB1YmxpY2F0aW9uTGliDQorICBQZWlTZXJ2aWNl c0xpYg0KKyAgUGVpU2VydmljZXNUYWJsZVBvaW50ZXJMaWINCisgIFBlaW1FbnRyeVBvaW50DQor ICBNdHJyTGliDQorICBQY2RMaWINCisNCitbUGNkXQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFj ZUd1aWQuUGNkU2ltaWNzUGVpTWVtRnZCYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3Vp ZC5QY2RTaW1pY3NQZWlNZW1GdlNpemUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBj ZFNpbWljc0R4ZU1lbUZ2QmFzZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2lt aWNzRHhlTWVtRnZTaXplDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RTaW1pY3NM b2NrQm94U3RvcmFnZUJhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWlj c0xvY2tCb3hTdG9yYWdlU2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkU2lt aWNzU2VjUGFnZVRhYmxlc0Jhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNp bWljc1NlY1BlaVRlbXBSYW1CYXNlDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNlR3VpZC5QY2RT aW1pY3NTZWNQZWlUZW1wUmFtU2l6ZQ0KKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEd1 aWRlZEV4dHJhY3RIYW5kbGVyVGFibGVBZGRyZXNzDQorICBnQm9hcmRNb2R1bGVUb2tlblNwYWNl R3VpZC5QY2RHdWlkZWRFeHRyYWN0SGFuZGxlclRhYmxlU2l6ZQ0KKyAgZ0JvYXJkTW9kdWxlVG9r ZW5TcGFjZUd1aWQuUGNkU2ltaWNzRGVjb21wcmVzc2lvblNjcmF0Y2hFbmQNCisgIGdCb2FyZE1v ZHVsZVRva2VuU3BhY2VHdWlkLlBjZFNpbWljc1g1OEhvc3RCcmlkZ2VQY2lEZXZJZA0KKyAgZ0Jv YXJkTW9kdWxlVG9rZW5TcGFjZUd1aWQuUGNkUGNpSW9CYXNlDQorICBnQm9hcmRNb2R1bGVUb2tl blNwYWNlR3VpZC5QY2RQY2lJb1NpemUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBj ZFBjaU1taW8zMkJhc2UNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFBjaU1taW8z MlNpemUNCisgIGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NEJhc2UNCisg IGdCb2FyZE1vZHVsZVRva2VuU3BhY2VHdWlkLlBjZFBjaU1taW82NFNpemUNCisgIGdTaW1pY3NY NThQa2dUb2tlblNwYWNlR3VpZC5QY2RYNThUc2VnTWJ5dGVzDQorICBnU2ltaWNzWDU4UGtnVG9r ZW5TcGFjZUd1aWQuUGNkU21tU21yYW1SZXF1aXJlDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkVmFyaWFibGVTdG9yZVNpemUNCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RGbGFzaE52U3RvcmFnZUZ0d1NwYXJlU2l6ZQ0KKyAgZ0VmaU1kZU1vZHVsZVBr Z1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoTnZTdG9yYWdlVmFyaWFibGVTaXplDQorICBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkRW11VmFyaWFibGVOdlN0b3JlUmVzZXJ2ZWQNCisg IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2REeGVJcGxTd2l0Y2hUb0xvbmdNb2Rl DQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNlMUdQYWdlVGFibGUNCisg IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RBY3BpUzNFbmFibGUNCisgIGdVZWZp Q3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TG9jYWxBcGljQmFzZUFkZHJlc3MNCisgIGdVZWZp Q3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TWF4TG9naWNhbFByb2Nlc3Nvck51bWJlcg0KKyAg Z1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5QY2RDcHVBcEluaXRUaW1lT3V0SW5NaWNyb1NlY29u ZHMNCisgIGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1QXBTdGFja1NpemUNCisgIGdN aW5QbGF0Zm9ybVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEZsYXNoQXJlYUJhc2VBZGRyZXNzICAjIyBD T05TVU1FUw0KKyAgZ01pblBsYXRmb3JtUGtnVG9rZW5TcGFjZUd1aWQuUGNkRmxhc2hBcmVhU2l6 ZSAgICAgICAgICMjIENPTlNVTUVTDQorICBnTWluUGxhdGZvcm1Qa2dUb2tlblNwYWNlR3VpZC5Q Y2RJb0FwaWNJZA0KKw0KK1tGaXhlZFBjZF0NCisgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RQY2lFeHByZXNzQmFzZUFkZHJlc3MNCisNCisNCitbUHBpc10NCisgIGdFZmlQZWlNYXN0ZXJC b290TW9kZVBwaUd1aWQNCisgIGdFZmlQZWlNcFNlcnZpY2VzUHBpR3VpZA0KKw0KK1tEZXBleF0N CisgIFRSVUUNCisNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVuQm9hcmRQ a2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaCBiL1BsYXRmb3JtL0ludGVs L1NpbWljc09wZW5Cb2FyZFBrZy9TbWJpb3NQbGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5o DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uZjljNjQxODQ1Yw0KLS0t IC9kZXYvbnVsbA0KKysrIGIvUGxhdGZvcm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NtYmlv c1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRmb3JtRHhlLmgNCkBAIC0wLDAgKzEsMzggQEANCisvKiog QGZpbGUNCisgIFRoaXMgZHJpdmVyIGluc3RhbGxzIFNNQklPUyBpbmZvcm1hdGlvbiBmb3IgUVNQ DQorDQorICBDb3B5cmlnaHQgKGMpIDIwMTEsIEJlaSBHdWFuIDxnYnRqdTg1QGdtYWlsLmNvbT4N CisgIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KKw0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCisqKi8NCisNCisjaWZuZGVmIF9TTUJJT1NfUExBVEZPUk1fRFhFX0hfDQorI2RlZmlu ZSBfU01CSU9TX1BMQVRGT1JNX0RYRV9IXw0KKw0KKyNpbmNsdWRlIDxQaUR4ZS5oPg0KKw0KKyNp bmNsdWRlIDxQcm90b2NvbC9TbWJpb3MuaD4NCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9T bUJpb3MuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJy YXJ5L0Jhc2VMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQorI2luY2x1ZGUgPExp YnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGliLmg+ DQorDQorLyoqDQorICBWYWxpZGF0ZXMgdGhlIFNNQklPUyBlbnRyeSBwb2ludCBzdHJ1Y3R1cmUN CisNCisgIEBwYXJhbSAgRW50cnlQb2ludFN0cnVjdHVyZSAgU01CSU9TIGVudHJ5IHBvaW50IHN0 cnVjdHVyZQ0KKw0KKyAgQHJldHZhbCBUUlVFICAgVGhlIGVudHJ5IHBvaW50IHN0cnVjdHVyZSBp cyB2YWxpZA0KKyAgQHJldHZhbCBGQUxTRSAgVGhlIGVudHJ5IHBvaW50IHN0cnVjdHVyZSBpcyBu b3QgdmFsaWQNCisNCisqKi8NCitCT09MRUFODQorSXNFbnRyeVBvaW50U3RydWN0dXJlVmFsaWQg KA0KKyAgSU4gU01CSU9TX1RBQkxFX0VOVFJZX1BPSU5UICAqRW50cnlQb2ludFN0cnVjdHVyZQ0K KyAgKTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9JbnRlbC9TaW1pY3NPcGVu Qm9hcmRQa2cvU21iaW9zUGxhdGZvcm1EeGUvU21iaW9zUGxhdGZvcm1EeGUuaW5mIGIvUGxhdGZv cm0vSW50ZWwvU2ltaWNzT3BlbkJvYXJkUGtnL1NtYmlvc1BsYXRmb3JtRHhlL1NtYmlvc1BsYXRm b3JtRHhlLmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjE0MjBh MzE1Y2YNCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0ludGVsL1NpbWljc09wZW5Cb2Fy ZFBrZy9TbWJpb3NQbGF0Zm9ybUR4ZS9TbWJpb3NQbGF0Zm9ybUR4ZS5pbmYNCkBAIC0wLDAgKzEs NTEgQEANCisjIyBAZmlsZQ0KKyMgIFRoaXMgZHJpdmVyIGluc3RhbGxzIFNNQklPUyBpbmZvcm1h dGlvbiBmb3IgUVNQDQorIw0KKyMgIENvcHlyaWdodCAoYykgMjAxMSwgQmVpIEd1YW4gPGdidGp1 ODVAZ21haWwuY29tPg0KKyMgIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjDQorIyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisjIw0KKw0KK1tEZWZpbmVzXQ0KKyAg SU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KKyAgQkFTRV9OQU1F ICAgICAgICAgICAgICAgICAgICAgID0gU21iaW9zUGxhdGZvcm1EeGUNCisgIEZJTEVfR1VJRCAg ICAgICAgICAgICAgICAgICAgICA9IDRiMTgzMjNkLTJkNDItNGFmYS1iOWU1LTkxNTE2YTZmZTUw NQ0KKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KKyAgVkVS U0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQorDQorICBFTlRSWV9QT0lOVCAgICAg ICAgICAgICAgICAgICAgPSBTbWJpb3NUYWJsZVB1Ymxpc2hFbnRyeQ0KKw0KKyMNCisjIFRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWly ZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KKyMNCisjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAg ICAgICA9IElBMzIgWDY0IEVCQyBBUk0gQUFSQ0g2NA0KKyMNCisNCitbU291cmNlc10NCisgIFNt Ymlvc1BsYXRmb3JtRHhlLmgNCisgIFNtYmlvc1BsYXRmb3JtRHhlLmMNCisNCitbUGFja2FnZXNd DQorICBNZGVQa2cvTWRlUGtnLmRlYw0KKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMN CisgIFNpbWljc09wZW5Cb2FyZFBrZy9PcGVuQm9hcmRQa2cuZGVjDQorICBBZHZhbmNlZEZlYXR1 cmVQa2cvQWR2YW5jZWRGZWF0dXJlUGtnLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgIFVl ZmlCb290U2VydmljZXNUYWJsZUxpYg0KKyAgQmFzZU1lbW9yeUxpYg0KKyAgQmFzZUxpYg0KKyAg VWVmaURyaXZlckVudHJ5UG9pbnQNCisgIERlYnVnTGliDQorICBIb2JMaWINCisgIE1lbW9yeUFs bG9jYXRpb25MaWINCisgIElvTGliDQorDQorW1Byb3RvY29sc10NCisgIGdFZmlTbWJpb3NQcm90 b2NvbEd1aWQgICAgICAgICAgICAgICAgICAgICAgIyBQUk9UT0NPTCBBTFdBWVNfQ09OU1VNRUQN CisNCitbRGVwZXhdDQorICBnRWZpU21iaW9zUHJvdG9jb2xHdWlkDQorDQotLSANCjIuMTYuMi53 aW5kb3dzLjENCg0K