From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D72CC211D616C for ; Wed, 6 Mar 2019 23:15:31 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2019 23:15:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,451,1544515200"; d="scan'208,217";a="326208489" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga005.fm.intel.com with ESMTP; 06 Mar 2019 23:15:30 -0800 Received: from fmsmsx152.amr.corp.intel.com (10.18.125.5) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 6 Mar 2019 23:15:30 -0800 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by FMSMSX152.amr.corp.intel.com (10.18.125.5) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 6 Mar 2019 23:15:28 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.74]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.252]) with mapi id 14.03.0415.000; Thu, 7 Mar 2019 15:15:27 +0800 From: "Gao, Liming" To: "afish@apple.com" , "Yao, Jiewen" CC: "Kinney, Michael D" , edk2-devel-01 Thread-Topic: [edk2] [PATCH 3/3] MdePkg/BaseSynchronizationLib: Remove inline X86 assembly code Thread-Index: AQHU0vSE94gh21G/NUi0Z1yYhGmykqX9ACSAgACMrPD//5DuAIACKyZQ//+IAwCAAA4IgIAAPDAAgAAN1ACAAAOnAIAAChCAgACN4EA= Date: Thu, 7 Mar 2019 07:15:26 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FCFF0@SHSMSX104.ccr.corp.intel.com> References: <20190305014059.17988-1-shenglei.zhang@intel.com> <20190305014059.17988-4-shenglei.zhang@intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FBBC2@SHSMSX104.ccr.corp.intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E3FCC47@SHSMSX104.ccr.corp.intel.com> <47E8FE4A-4BDC-48A3-B7E6-02F1682C0990@apple.com> <74D8A39837DF1E4DA445A8C0B3885C503F556F4E@shsmsx102.ccr.corp.intel.com> <74D8A39837DF1E4DA445A8C0B3885C503F55722E@shsmsx102.ccr.corp.intel.com> <0F79F0FC-123A-4862-926D-DFE08CF5740F@apple.com> In-Reply-To: <0F79F0FC-123A-4862-926D-DFE08CF5740F@apple.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWI5NTM3OWQtMmRkZS00YjZhLWJiNTctNTE0NGJlODExYTJmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiMWVqeU9yK2xPUEtUTG1uZWpQWVhpXC96ZEpjZGVjcTJPY01qRUt1cGJJWmdUYzFQU1wvR2tmN1ZPY3hCRFY5QzhDIn0= dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [PATCH 3/3] MdePkg/BaseSynchronizationLib: Remove inline X86 assembly code X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Mar 2019 07:15:32 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB5b3VyIGNsYXJpZmljYXRpb24uIE5vdywgd2Ugd2lsbCBmb2N1cyBvbiBTZXRK dW1wL0xvbmdKdW1wKCkgZmlyc3QuDQoNClRoYW5rcw0KTGltaW5nDQpGcm9tOiBhZmlzaEBhcHBs ZS5jb20gW21haWx0bzphZmlzaEBhcHBsZS5jb21dDQpTZW50OiBXZWRuZXNkYXksIE1hcmNoIDYs IDIwMTkgMTA6NDUgUE0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQpD YzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgR2FvLCBM aW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc+DQpTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAzLzNdIE1kZVBrZy9CYXNl U3luY2hyb25pemF0aW9uTGliOiBSZW1vdmUgaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0K DQoNCk9uIE1hciA2LCAyMDE5LCBhdCAxMDowOSBQTSwgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9A aW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+IHdyb3RlOg0KDQpUaGFua3Mg QW5kcmV3Lg0KTm93IEkgMTAwJSBhZ3JlZSB3aXRoIHlvdSAtIEkgdGhpbmsgaXQgaXMgZmluZSB0 byByZXN0cmljdCBuZXcgQyBpbmxpbmUgYXNzZW1ibGVyLCBvciBhdCBsZWFzdCBoYXZlIGEgdmVy eSBoaWdoIGJhciB0byBhZGQgYW55dGhpbmcgbmV3LiBBbnkgbmV3IGlubGluZSBhc3NlbWJsZXIg KnNob3VsZCBhbHNvIGJlIHNpbXBsZSBhbmQganVzdCBiZSBhIGZ1bmN0aW9uIGFic3RyYWN0aW5n IGEgQ1BVIG9wLWNvZGUqIHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBDLiBUaGlzIGlzIGhvdyB3 ZSBwcmV2ZW50IHRoZSBtYWludGVuYW5jZSBpc3N1ZXMgeW91IGFyZSB3b3JyeWluZyBhYm91dC4N Cg0KQW5kIEkgYWxzbyBhZ3JlZSB3aXRoIHlvdXIgY2FzZS4NCg0KTGV04oCZcyBkaXNjdXNzIGFu b3RoZXIgY2FzZS4gQmVsb3cgMiBmdW5jdGlvbnMgU2V0SnVtcC9Mb25nSnVtcCBhcmUgdXBkYXRl ZCByZWNlbnRseSwgYnkgbWUgdW5mb3J0dW5hdGVseS4NCg0KSXQgaXMgdW5jbGVhciB0byBtZSB3 aGF0IGlzIHRoZSBzaXplIG9wdGltaXphdGlvbiB3ZSBjYW4gZ2V0IGJ5IGlubGluZSBTZXRKdW1w L0xvbmdKdW1wLg0KQnV0IG9idmlvdXNseSwgaXQgYnJpbmdzIHRoZSBtYWludGVuYW5jZSBpc3N1 ZSB0byBtZS4NCkFuZCBJIGRvbuKAmXQgYmVsaWV2ZSBpdCBtZWV0cyB0aGUgY3JpdGVyaWEgeW91 IG1lbnRpb25lZCBhYm92ZS4NCg0KDQpKaWV3ZW4sDQoNCkkgYWdyZWUgaXQgc2VlbXMgbGlrZSBn aXZlbiB0aGUgcnVsZXMgd2UgYWdyZWUgb24gdGhpcyBjb2RlIHNob3VsZCBiZSB3cml0dGVuIGlu IE5BU00uDQoNClRoYW5rcywNCg0KQW5kcmV3IEZpc2gNCg0KDQpfZGVjbHNwZWMgKG5ha2VkKQ0K UkVUVVJOU19UV0lDRQ0KVUlOVE4NCkVGSUFQSQ0KU2V0SnVtcCAoDQogIE9VVCAgICAgQkFTRV9M SUJSQVJZX0pVTVBfQlVGRkVSICAqSnVtcEJ1ZmZlcg0KICApDQp7DQogIF9hc20gew0KICAgIHB1 c2ggICAgW2VzcCArIDRdDQogICAgY2FsbCAgICBJbnRlcm5hbEFzc2VydEp1bXBCdWZmZXINCiAg ICBwb3AgICAgIGVjeA0KICAgIHBvcCAgICAgZWN4DQogICAgbW92ICAgICBlZHgsIFtlc3BdDQoN CiAgICB4b3IgICAgIGVheCwgZWF4DQogICAgbW92ICAgICBbZWR4ICsgMjRdLCBlYXggICAgICAg IDsgc2F2ZSAwIHRvIFNTUA0KDQogICAgbW92ICAgICBlYXgsIFtQY2RHZXQzMiAoUGNkQ29udHJv bEZsb3dFbmZvcmNlbWVudFByb3BlcnR5TWFzayldDQogICAgdGVzdCAgICBlYXgsIGVheA0KICAg IGp6ICAgICAgQ2V0RG9uZQ0KICAgIF9lbWl0ICAgICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHgy MA0KICAgIF9lbWl0ICAgICAgMHhFMCAgICAgICAgICAgICAgICA7IG1vdiAgICAgZWF4LCBjcjQN CiAgICBidCAgICAgIGVheCwgMjMgICAgICAgICAgICAgICAgOyBjaGVjayBpZiBDRVQgaXMgZW5h YmxlZA0KICAgIGpuYyAgICAgQ2V0RG9uZQ0KDQogICAgbW92ICAgICBlYXgsIDENCiAgICBfZW1p dCAgICAgIDB4RjMNCiAgICBfZW1pdCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAgIDB4QUUNCiAg ICBfZW1pdCAgICAgIDB4RTggICAgICAgICAgICAgICAgOyBJTkNTU1AgRUFYIHRvIHJlYWQgb3Jp Z2luYWwgU1NQDQogICAgX2VtaXQgICAgICAweEYzDQogICAgX2VtaXQgICAgICAweDBGDQogICAg X2VtaXQgICAgICAweDFFDQogICAgX2VtaXQgICAgICAweEM4ICAgICAgICAgICAgICAgIDsgUkVB RFNTUCBFQVgNCiAgICBtb3YgICAgIFtlZHggKyAweDI0XSwgZWF4ICAgICAgOyBzYXZlIFNTUA0K DQpDZXREb25lOg0KDQogICAgbW92ICAgICBbZWR4XSwgZWJ4DQogICAgbW92ICAgICBbZWR4ICsg NF0sIGVzaQ0KICAgIG1vdiAgICAgW2VkeCArIDhdLCBlZGkNCiAgICBtb3YgICAgIFtlZHggKyAx Ml0sIGVicA0KICAgIG1vdiAgICAgW2VkeCArIDE2XSwgZXNwDQogICAgbW92ICAgICBbZWR4ICsg MjBdLCBlY3gNCiAgICB4b3IgICAgIGVheCwgZWF4DQogICAgam1wICAgICBlY3gNCiAgfQ0KfQ0K DQpfX2RlY2xzcGVjIChuYWtlZCkNClZPSUQNCkVGSUFQSQ0KSW50ZXJuYWxMb25nSnVtcCAoDQog IElOICAgICAgQkFTRV9MSUJSQVJZX0pVTVBfQlVGRkVSICAqSnVtcEJ1ZmZlciwNCiAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQogICkNCnsNCiAgX2FzbSB7DQogICAg bW92ICAgICBlYXgsIFtQY2RHZXQzMiAoUGNkQ29udHJvbEZsb3dFbmZvcmNlbWVudFByb3BlcnR5 TWFzayldDQogICAgdGVzdCAgICBlYXgsIGVheA0KICAgIGp6ICAgICAgQ2V0RG9uZQ0KICAgIF9l bWl0ICAgICAgMHgwRg0KICAgIF9lbWl0ICAgICAgMHgyMA0KICAgIF9lbWl0ICAgICAgMHhFMCAg ICAgICAgICAgICAgICA7IG1vdiAgICAgZWF4LCBjcjQNCiAgICBidCAgICAgIGVheCwgMjMgICAg ICAgICAgICAgICAgOyBjaGVjayBpZiBDRVQgaXMgZW5hYmxlZA0KICAgIGpuYyAgICAgQ2V0RG9u ZQ0KDQogICAgbW92ICAgICBlZHgsIFtlc3AgKyA0XSAgICAgICAgIDsgZWR4ID0gSnVtcEJ1ZmZl cg0KICAgIG1vdiAgICAgZWR4LCBbZWR4ICsgMjRdICAgICAgICA7IGVkeCA9IHRhcmdldCBTU1AN CiAgICBfZW1pdCAgICAgIDB4RjMNCiAgICBfZW1pdCAgICAgIDB4MEYNCiAgICBfZW1pdCAgICAg IDB4MUUNCiAgICBfZW1pdCAgICAgIDB4QzggICAgICAgICAgICAgICAgOyBSRUFEU1NQIEVBWA0K ICAgIHN1YiAgICAgZWR4LCBlYXggICAgICAgICAgICAgICA7IGVkeCA9IGRlbHRhDQogICAgbW92 ICAgICBlYXgsIGVkeCAgICAgICAgICAgICAgIDsgZWF4ID0gZGVsdGENCg0KICAgIHNociAgICAg ZWF4LCAyICAgICAgICAgICAgICAgICA7IGVheCA9IGRlbHRhL3NpemVvZihVSU5UMzIpDQogICAg X2VtaXQgICAgICAweEYzDQogICAgX2VtaXQgICAgICAweDBGDQogICAgX2VtaXQgICAgICAweEFF DQogICAgX2VtaXQgICAgICAweEU4ICAgICAgICAgICAgICAgIDsgSU5DU1NQIEVBWA0KDQpDZXRE b25lOg0KDQogICAgcG9wICAgICBlYXggICAgICAgICAgICAgICAgICAgICAgICAgOyBza2lwIHJl dHVybiBhZGRyZXNzDQogICAgcG9wICAgICBlZHggICAgICAgICAgICAgICAgICAgICAgICAgOyBl ZHggPC0gSnVtcEJ1ZmZlcg0KICAgIHBvcCAgICAgZWF4ICAgICAgICAgICAgICAgICAgICAgICAg IDsgZWF4IDwtIFZhbHVlDQogICAgbW92ICAgICBlYngsIFtlZHhdDQogICAgbW92ICAgICBlc2ks IFtlZHggKyA0XQ0KICAgIG1vdiAgICAgZWRpLCBbZWR4ICsgOF0NCiAgICBtb3YgICAgIGVicCwg W2VkeCArIDEyXQ0KICAgIG1vdiAgICAgZXNwLCBbZWR4ICsgMTZdDQogICAgam1wICAgICBkd29y ZCBwdHIgW2VkeCArIDIwXQ0KICB9DQp9DQoNCg0KDQpGcm9tOiBhZmlzaEBhcHBsZS5jb208bWFp bHRvOmFmaXNoQGFwcGxlLmNvbT4gW21haWx0bzphZmlzaEBhcHBsZS5jb21dDQpTZW50OiBXZWRu ZXNkYXksIE1hcmNoIDYsIDIwMTkgOTo1NiBQTQ0KVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFv QGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+Pg0KQ2M6IEtpbm5leSwgTWlj aGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbT4+OyBlZGsyLWRldmVsLTAxIDxlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+Pg0KU3ViamVjdDogUmU6IFtlZGsy XSBbUEFUQ0ggMy8zXSBNZGVQa2cvQmFzZVN5bmNocm9uaXphdGlvbkxpYjogUmVtb3ZlIGlubGlu ZSBYODYgYXNzZW1ibHkgY29kZQ0KDQoNCg0KDQoNCk9uIE1hciA2LCAyMDE5LCBhdCA5OjA2IFBN LCBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50 ZWwuY29tPj4gd3JvdGU6DQoNCkhJIE1pa2UgYW5kIEFuZHJldw0KVGhlIHByb2JsZW0gaXMgbWFp bnRhaW5hYmlsaXR5Lg0KDQpJZiB3ZSBoYXZlIG11bHRpcGxlIGNvcHkgb2YgaW1wbGVtZW50YXRp b24sIGEgZGV2ZWxvcGVyIG5lZWQgdmVyaWZ5IG11bHRpcGxlIGNvcHkgb2YgaW1wbGVtZW50YXRp b24sIGlmIHdlIG1ha2UgdXBkYXRlLiBCZWZvcmUgdGhhdCwgYSBkZXZlbG9wZXIgaGFzIHRvIGJl IGF3YXJlIHRoYXQgdGhlcmUgaXMgbXVsdGlwbGUgY29weSBvZiBpbXBsZW1lbnRhdGlvbi4gLSBU aGF0IGluY3JlYXNlcyB0aGUgY29tcGxleGl0eS4NCg0KSWYgd2UgaGF2ZSBldmVyeXRoaW5nLCB0 aGVyZSBNQVkgYmUgNSBjb3B5IC0gQVNNLCBOQVNNLCBTLCBHQ0MgaW5saW5lLCBNUyBpbmxpbmUs IHRoZW9yZXRpY2FsbHkuDQpOb3csIHdlIHJlbW92ZSBBU00uIEl0IGlzIGdvb2QgZmlyc3Qgc3Rl cC4NCkJ1dCB3ZSBtYXkgc3RpbGwgaGF2ZSA0IGNvcGllcy4gSSBzdWdnZXN0IHdlIGNvbnNpZGVy IGRvIG1vcmUuDQoNCkppZXdlbiwNCg0KSSB0aGluayB5b3UgYXJlIHRyeWluZyBkbyB0aGUgcmln aHQgdGhpbmcsIGJ1dCBhcmUgb3B0aW1pemUgdGhlIHdyb25nIHRoaW5nLg0KDQpNb3N0IG9mIHRo ZSBHQ0MvQ2xhbmcgaW5saW5lIGFzc2VtYmxlciBjb2RlIGlzIGluIEdjY2lubGluZS5jIGFuZCBz aW5jZSB0aGF0IGNvZGUgaXMgbW9zdGx5IGp1c3QgYWJzdHJhY3RpbmcgYW4geDg2IGluc3RydWN0 aW9uIGFuZCB0aGUgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNpbXBsZSBhbmQgdGh1cyBpdCBpcyBOT1Qg Y29kZSB0aGF0IG5lZWRzIG9uZ29pbmcgbWFpbnRlbmFuY2UuDQoNCkxldHMgbG9vayBhdCB0aGUg aGlzdG9yeToNCmh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi9jb21taXRzL21hc3Rl ci9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1g2NC9HY2NJbmxpbmUuYw0KVGhlIGxhc3QgbG9naWMg Zml4IHdhcyBKdW4gMSwgMjAxMA0KDQpodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIv Y29tbWl0cy9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9JYTMyL0djY0lubGluZS5jDQpP ayBzbyBNaWtlIGhhZCB0byBtYWtlIGEgZml4IGluIHRoaXMgZmlsZSBpbiAyMDE1IHRvIG1ha2Ug c29tZXRoaW5nIG9wdGlvbmFsLCBkdWUgdG8gYW4gZW1iZWRkZWQgQ1BVIGRlZmVhdGluZyBhbiBp bnN0cnVjdGlvbi4gQnV0IHByaW9yIHRvIHRoYXQgaXQgd2FzIDIwMTAuDQoNClRoZSBzZXQgb2Yg dGhpbmdzIHRoYXQgYXJlIEMgaW5saW5lIGFzc2VtYmxlciB3ZSBoYXZlIHNob3VsZCBiZSBzdGF0 aWMgYW5kIG5vdCByZXF1aXJlIG11Y2ggbWFpbnRlbmFuY2UuIE1vcmUgY29tcGxleCBjb2RlIHNo b3VsZCBiZSB3cml0dGVuIGluIEMgYW5kIHVzZSB0aGUgQyBpbmxpbmUgYXNzZW1ibGVyIGZ1bmN0 aW9ucyB3ZSBhbHJlYWR5IGhhdmUuIElmIGFueSBtb3JlIGNvbXBsZXggYXNzZW1ibHkgY29kZSBp cyByZXF1aXJlZCB3ZSBzaG91bGQganVzdCB3cml0ZSBpdCBpbiBOQVNNLiBTbyBJIHRoaW5rIGl0 IGlzIGZpbmUgdG8gcmVzdHJpY3QgbmV3IEMgaW5saW5lIGFzc2VtYmxlciwgb3IgYXQgbGVhc3Qg aGF2ZSBhIHZlcnkgaGlnaCBiYXIgdG8gYWRkIGFueXRoaW5nIG5ldy4gQW55IG5ldyBpbmxpbmUg YXNzZW1ibGVyIHNob3VsZCBhbHNvIGJlIHNpbXBsZSBhbmQganVzdCBiZSBhIGZ1bmN0aW9uIGFi c3RyYWN0aW5nIGEgQ1BVIG9wLWNvZGUgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIEMuIFRoaXMg aXMgaG93IHdlIHByZXZlbnQgdGhlIG1haW50ZW5hbmNlIGlzc3VlcyB5b3UgYXJlIHdvcnJ5aW5n IGFib3V0Lg0KDQpJIGdhdmUgYW4gZXhhbXBsZSBpbiB0aGlzICBtYWlsIHRocmVhZCBvbiBob3cg YSBCcmVha3BvaW50IGdvZXMgZnJvbSBiZWluZyAxIGJ5dGUgdG8gMTEgYnl0ZXMgaWYgeW91IHJl bW92ZSB0aGUgQyBpbmxpbmUgYXNzZW1ibGVyLiBGb3IgY2xhbmcgd2l0aCBMVE8gZW5hYmxlZCBh IENwdUJyZWFrcG9pbnQgd2lsbCBhbHdheXMgZ2V0IGlubGluZWQgaW50byB0aGUgY2FsbGVycyBj b2RlIGFuZCBpdCB3aWxsIG9ubHkgdGFrZSB0aGUgb25lIGJ5dGUgZm9yIGludCAzIGluc3RydWN0 aW9uLiBJZiB0aGF0IGNvZGUgbW92ZXMgdG8gTkFTTSB0aGVuIGl0IGdldCByZXBsYWNlcyB3aXRo IGEgNSBieXRlIGNhbGwgaW5zdHJ1Y3Rpb24gYW5kIGFuIGFjdHVhbCBDIEFCSSBmdW5jdGlvbiBm b3IgdGhlIGJyZWFrcG9pbnQuDQoNClZPSUQNCkVGSUFQSQ0KQ3B1QnJlYWtwb2ludCAoDQogIFZP SUQNCiAgKQ0Kew0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImludCAkMyIpOw0KfQ0KDQoNCg0K VG9kYXkgd2l0aCBjbGFuZyBMVE8gdHVybmVkIG9uIGNhbGxpbmcgQ3B1QnJlYWtwb2ludCgpIGxv b2tzIGxpa2UgdGhpcyBmcm9tIHRoZSBjYWxsZXJzIHBvaW50IG9mIHZpZXcuDQoNCmEub3V0WzB4 MWZhNV0gPCs2PjogIGNjICAgICAgICAgICAgICBpbnQzDQoNCg0KDQpCdXQgaWYgd2UgbW92ZSB0 aGF0IHRvIE5BU006DQoNCg0KDQphLm91dFsweDFmYTZdIDwrNz46ICBlOCAwNyAwMCAwMCAwMCAg Y2FsbGwgIDB4MWZiMiAgICAgICAgICAgICAgICAgICAgOyBDcHVCcmVha3BvaW50DQoNCg0KDQpw bHVzOg0KYS5vdXRgQ3B1QnJlYWtwb2ludDoNCmEub3V0WzB4MWY5OV0gPCswPjogNTUgICAgIHB1 c2hsICAlZWJwDQphLm91dFsweDFmOWFdIDwrMT46IDg5IGU1ICBtb3ZsICAgJWVzcCwgJWVicA0K YS5vdXRbMHgxZjljXSA8KzM+OiBjYyAgICAgaW50Mw0KYS5vdXRbMHgxZjlkXSA8KzQ+OiA1ZCAg ICAgcG9wbCAgICVlYnANCmEub3V0WzB4MWY5ZV0gPCs1PjogYzMgICAgIHJldGwNCg0KDQoNCkZv ciBhbnkgY29tcGlsZXIgdGhhdCBlbWl0cyB0aGUgZnJhbWUgcG9pbnRlciBpZiB5b3UgbW92ZSB0 aGUgSU5UIDMgdG8gYXNzZW1ibHkgeW91IG5lZWQgdGhlIGZyYW1lIHBvaW50ZXIgb3IgdGhlIEV4 Y2VwdGlvbiBMaWIgaXMgbm90IGdvaW5nIHRvIGJlIGFibGUgdG8gcHJpbnQgb3V0IHRoZSBzdGFj ayBiYWNrdHJhY2Ugb2YgdGhlIGNvZGUgd2hlbiB5b3UgaGl0IGEgYnJlYWtwb2ludC4gU28gdGhp cyBpcyBob3cgSSBnZXQgdG8gMTEgdnMuIDEgYnl0ZXMuDQoNCg0KDQpUaGFua3MsDQoNCkFuZHJl dyBGaXNoDQoNClBTIGZvciBjbGFuZyBMVE8gdGhlIGNvbXBpbGVyIGNvbXBpbGVzIHRvIGJpdGNv ZGUgYW5kIHRoYXQgaXMgYW4gYWJzdHJhY3RlZCBhc3NlbWJseSBsYW5ndWFnZS4gQXQgbGluayB0 aW1lIGFsbCB0aGF0IGNvZGUgZ2V0cyBvcHRpbWl6ZWQgdG8gdG9nZXRoZXIgYW5kIHRoZW4gcGFz c2VkIHRocm91Z2ggdGhlIENQVSBzcGVjaWZpYyBjb2RlIGdlbi4gRm9yIEMgaW5saW5lIGFzc2Vt YmxlciB0aGUgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGVuZCB1cCBpbiB0aGUgYml0Y29kZSB3aXRo IGxvdHMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbnN0cmFpbnRzLiBUaGF0IGlzIHdoeSB0 aGVzZSBHY2NJbmxpbmUuYyBmdW5jdGlvbnMgYWxtb3N0IGFsd2F5cyBnZXQgaW5saW5lZCB3aXRo IGNsYW5nIGFuZCBMVE8uDQoNClRoZSBDcHVCcmVha3BvaW50KCkgZnVuY3Rpb24gbG9va3MgbGlr ZSB0aGlzIGluIGJpdGNvZGUsIGJ1dCB0aGUgZnVuY3Rpb24gY2FsbCBnZXRzIG9wdGltaXplZCBh d2F5IGJ5IExUTyBpbiB0aGUgY29kZSBnZW4uDQoNCjsgRnVuY3Rpb24gQXR0cnM6IG5vaW5saW5l IG5vdW53aW5kIG9wdG5vbmUgc3NwIHV3dGFibGUNCmRlZmluZSB2b2lkIEBDcHVCcmVha3BvaW50 KCkgIzAgew0KICBjYWxsIHZvaWQgYXNtIHNpZGVlZmZlY3QgImludCAkJDMiLCAifntkaXJmbGFn fSx+e2Zwc3J9LH57ZmxhZ3N9IigpICMyLCAhc3JjbG9jICEzDQogIHJldCB2b2lkDQp9DQoNCg0K DQpFdmVuIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBBc21SZWFkTXNyNjQoKSBjYW4gZ2V0 IGlubGluZWQsIGJ1dCBpdCBjb250YWlucyBhIGxvdCBtb3JlIGluZm8gYWJvdXQgdGhlIGNvbnN0 cmFpbnRzOg0KDQo7IEZ1bmN0aW9uIEF0dHJzOiBub2lubGluZSBub3Vud2luZCBvcHRub25lIHNz cCB1d3RhYmxlDQpkZWZpbmUgaTY0IEBBc21SZWFkTXNyNjQoaTMyKSAjMCB7DQogICUyID0gYWxs b2NhIGkzMiwgYWxpZ24gNA0KICAlMyA9IGFsbG9jYSBpNjQsIGFsaWduIDgNCiAgc3RvcmUgaTMy ICUwLCBpMzIqICUyLCBhbGlnbiA0DQogICU0ID0gbG9hZCBpMzIsIGkzMiogJTIsIGFsaWduIDQN CiAgJTUgPSBjYWxsIGk2NCBhc20gc2lkZWVmZmVjdCAicmRtc3IiLCAiPUEse2N4fSx+e2RpcmZs YWd9LH57ZnBzcn0sfntmbGFnc30iKGkzMiAlNCkgIzIsICFzcmNsb2MgITQNCiAgc3RvcmUgaTY0 ICU1LCBpNjQqICUzLCBhbGlnbiA4DQogICU2ID0gbG9hZCBpNjQsIGk2NCogJTMsIGFsaWduIDgN CiAgcmV0IGk2NCAlNg0KfQ0KDQoNCg0KVGhlIGFsbG9jYSwgc3RvcmUsIGxvYWQsIGV0YyBhcmUg dGhlIHNhbWUgYml0Y29kZSBpbnN0cnVjdGlvbnMgeW91IHdvdWxkIHNlZSB3aXRoIEMgY29kZS4N Cg0KDQoNCkEgcmVjZW50bHkgY2FzZSB0aGF0IFNldEp1bXAvTG9uZ0p1bXAsIEkgdXBkYXRlZCB0 aGUgTkFTTSBmaWxlIGZvciBib3RoIElBMzIgYW5kIFg2NC4NCg0KTGF0ZXIsIHRvIG15IHN1cnBy aXNlLCBvbmx5IFg2NCB2ZXJzaW9uIE5BU00gd29ya3MsIGFuZCBJQTMyIHZlcnNpb24gTkFTTSBk b2VzIG5vdCB3b3JrLg0KVGhlbiBJIG5vdGljZSB0aGF0IHRoZXJlIGlzIGEgZGlmZmVyZW50IGNv cHkgaWYgSUEzMiBKdW1wLmMgTVMgaW5saW5lIC0gSSBhbHNvIG5lZWQgdXBkYXRlLiBUaGF0IGlz IGZydXN0cmF0ZWQuDQoNCkkgdGhpbmsgdGhlcmUgc2hvdWxkIGJlIGEgYmFsYW5jZSBiZXR3ZWVu IG9wdGltaXphdGlvbiBhbmQgY29kZSByZWFkYWJpbGl0eS9tYWludGFpbmFiaWxpdHkuDQoNCkRv IHdlIGhhdmUgZGF0YSBvbiB3aGF0IHNpemUgYmVuZWZpdCB3ZSBjYW4gZ2V0IHdpdGggdGhlc2Ug aW5saW5lIGZ1bmN0aW9uLCBmcm9tIHdob2xlIGltYWdlIGxldmVsPw0KV2UgY2FuIGRvIGV2YWx1 YXRpb24gYXQgZnVuY3Rpb24gbGV2ZWwsIGNhc2UgYnkgY2FzZS4NCklmIHdlIHNlZSBhIGh1Z2Ug c2l6ZSBiZW5lZml0LCBJIGFncmVlIHRvIGtlZXAgdGhpcyBmdW5jdGlvbi4NCklmIHdlIHNlZSBu byBzaXplIGJlbmVmaXQsIEkgc3VnZ2VzdCB3ZSBkbyB0aGUgY2xlYW51cCBmb3IgdGhpcyBmdW5j dGlvbi4NCg0KDQpUaGFuayB5b3UNCllhbyBKaWV3ZW4NCg0KDQoNCg0KDQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtYm91bmNl c0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZg0KQW5kcmV3IEZpc2ggdmlhIGVkazItZGV2ZWwN ClNlbnQ6IFdlZG5lc2RheSwgTWFyY2ggNiwgMjAxOSA1OjMxIFBNDQpUbzogS2lubmV5LCBNaWNo YWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT4+DQpDYzogZWRrMi1kZXZlbC0wMSA8ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8 bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPj47IEdhbywgTGltaW5nDQo8bGltaW5nLmdh b0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj4NClN1YmplY3Q6IFJlOiBb ZWRrMl0gW1BBVENIIDMvM10gTWRlUGtnL0Jhc2VTeW5jaHJvbml6YXRpb25MaWI6IFJlbW92ZQ0K aW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0KDQoNCg0KT24gTWFyIDYsIDIwMTksIGF0IDQ6 NDEgUE0sIEtpbm5leSwgTWljaGFlbCBEDQo8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFp bHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4gd3JvdGU6DQoNCg0KDQpMaW1pbmcsDQoN ClRoYXQgZG9lcyBub3Qgd29yayBlaXRoZXIgYmVjYXVzZSBpbmxpbmUgYXNzZW1ibHkgdXNlcyBj b21waWxlciBzcGVjaWZpYw0Kc3ludGF4Lg0KDQoNCg0KUGxlYXNlIHVwZGF0ZSB3aXRoIHRoZSBz cGVjaWZpYyBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHlvdSB0aGluayB0aGUgaW5saW5lDQpzaG91 bGQgYmUgcmVtb3ZlZCB0byBpbXByb3ZlIG1haW50ZW5hbmNlIHdpdGggbm8gaW1wYWN0cyBpbiBz aXplL3BlcmYuDQoNCg0KDQoNCk1pa2UsDQoNCkl0IGlzIGVhc3kgdG8gZmluZCB0aGUgZ2NjL2Ns YW5nIGlubGluZSBhc3NlbWJsZXIsIGp1c3QgYGdpdCBncmVwICJfX2FzbV9fDQpfX3ZvbGF0aWxl X18iYA0KDQpUaGUgbWFpbiBmaWxlcyBhcmU6DQpodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3Jl L2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtnL0xpYnJhcnkvQmFzZUlvTGliDQpJbnRyaW5zaWMvSW9M aWJHY2MuYw0KaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL01k ZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvWA0KNjQvR2NjSW5saW5lLmMNCmh0dHBzOi8vZ2l0aHViLmNv bS90aWFub2NvcmUvZWRrMi9ibG9iL21hc3Rlci9NZGVQa2cvTGlicmFyeS9CYXNlTGliL0kNCmEz Mi9HY2NJbmxpbmUuYw0KaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFz dGVyL01kZVBrZy9MaWJyYXJ5L0Jhc2VTeW5jDQpocm9uaXphdGlvbkxpYi9JYTMyL0djY0lubGlu ZS5jDQpodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazIvYmxvYi9tYXN0ZXIvTWRlUGtn L0xpYnJhcnkvQmFzZVN5bmMNCmhyb25pemF0aW9uTGliL1g2NC9HY2NJbmxpbmUuYw0KDQpUaGlz IGlzIHJlYWxseSBqdXN0IGNvbXBpbGVyIG9wdGltaXplciBjb250cm9sLg0KTGlicmFyeS9CYXNl U3luY2hyb25pemF0aW9uTGliL1N5bmNocm9uaXphdGlvbkdjYy5jOjIxOiNkZWZpbmUNCl9SZWFk V3JpdGVCYXJyaWVyKCkgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiAibWVtb3J5 Iik7IH0gd2hpbGUoMCkNCg0KTG9va3MgbGlrZSB0aGlzIGlzIHdvcmtpbmcgYXJvdW5kIHRoZSBh bGlnbm1lbnQgQVNTRVJUIGluIEJhc2VJb0xpYkludHJpbnNpYy4NCk92bWZQa2cvUWVtdVZpZGVv RHhlL1VuYWxpZ25lZElvR2NjLmM6NDM6ICBfX2FzbV9fIF9fdm9sYXRpbGVfXw0KKCAib3V0bCAl MCwgJTEiIDogOiAiYSIgKFZhbHVlKSwgImQiICgoVUlOVDE2KVBvcnQpICk7DQpPdm1mUGtnL1Fl bXVWaWRlb0R4ZS9VbmFsaWduZWRJb0djYy5jOjY3OiAgX19hc21fXyBfX3ZvbGF0aWxlX18NCigg ImlubCAlMSwgJTAiIDogIj1hIiAoRGF0YSkgOiAiZCIgKChVSU5UMTYpUG9ydCkgKTsNCg0KSXQg c2VlbXMgbGlrZSB3ZSBoYXZlIGEgcmVhc29uYWJsZSBzZXQgYW5kIHNob3VsZCBub3QgdXNlIHRo ZSBpbmxpbmUNCmFzc2VtYmx5IGZvciBhbnkgbW9yZSBjb21wbGV4IGNvZGUuDQoNClRoYW5rcywN Cg0KQW5kcmV3IEZpc2gNCg0KDQoNClRoZSBpc3N1ZSB5b3UgcG9pbnRlZCB0byB3YXMgYXJvdW5k IFNldEp1bXAoKS9Mb25nSnVtcCgpLiAgQ2FuIHdlIGxpbWl0DQp0aGlzIEJaIHRvIG9ubHkgdGhv c2UgMiBmdW5jdGlvbnM/DQoNCg0KDQpNaWtlDQogIDw+DQpGcm9tOiBHYW8sIExpbWluZw0KU2Vu dDogV2VkbmVzZGF5LCBNYXJjaCA2LCAyMDE5IDQ6MjggUE0NClRvOiBhZmlzaEBhcHBsZS5jb208 bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4NCkNjOiBaaGFuZywgU2hlbmdsZWkgPHNoZW5nbGVpLnpo YW5nQGludGVsLmNvbTxtYWlsdG86c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPj47IGVkazItZGV2 ZWwtMDENCjxlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmc+PjsgS2lubmV5LCBNaWNoYWVsIEQNCjxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxt YWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KDQoNClN1YmplY3Q6IFJFOiBbZWRr Ml0gW1BBVENIIDMvM10gTWRlUGtnL0Jhc2VTeW5jaHJvbml6YXRpb25MaWI6IFJlbW92ZQ0KaW5s aW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0KDQpBbmRyZXc6DQogSSB3YW50IHRvIGtlZXAgb25s eSBvbmUgaW1wbGVtZW50YXRpb24uIElmIGlubGluZSBhc3NlbWJseSBjIHNvdXJjZSBpcw0KcHJl ZmVycmVkLCBJIHN1Z2dlc3QgdG8gcmVtb3ZlIGl0cyBuYXNtIGltcGxlbWVudGF0aW9uLg0KDQoN Cg0KVGhhbmtzDQpMaW1pbmcNCjw+RnJvbTogYWZpc2hAYXBwbGUuY29tPG1haWx0bzphZmlzaEBh cHBsZS5jb20+IDxtYWlsdG86YWZpc2hAYXBwbGUuY29tPg0KW21haWx0bzphZmlzaEBhcHBsZS5j b20gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PG1haWx0bzphZmlzaEBhcHBsZS5jb20lMjAlM2Nt YWlsdG86YWZpc2hAYXBwbGUuY29tJTNlPl0NCg0KDQpTZW50OiBUdWVzZGF5LCBNYXJjaCA1LCAy MDE5IDI6NDQgUE0NClRvOiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20gPG1haWx0 bzpsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20lMjAlM2Nt YWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+Pj4NCkNjOiBaaGFuZywgU2hlbmdsZWkgPHNoZW5n bGVpLnpoYW5nQGludGVsLmNvbTxtYWlsdG86c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPg0KPG1h aWx0bzpzaGVuZ2xlaS56aGFuZ0BpbnRlbC5jb20+PjsgZWRrMi1kZXZlbC0wMQ0KPGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnIDxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVk azItZGV2ZWxAbGlzdHMuMDEub3JnJTIwJTNjbWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3Jn Pj4+OyBLaW5uZXksDQpNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tDQo8bWFp bHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGlu dGVsLmNvbSUwYiUzY21haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+Pg0KDQoNClN1 YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIDMvM10gTWRlUGtnL0Jhc2VTeW5jaHJvbml6YXRpb25M aWI6IFJlbW92ZQ0KaW5saW5lIFg4NiBhc3NlbWJseSBjb2RlDQoNCg0KDQoNCg0KDQpPbiBNYXIg NSwgMjAxOSwgYXQgMTozMiBQTSwgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1h aWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4NCjxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+ PiB3cm90ZToNCg0KDQoNCkFuZHJldzoNCkJaIDExNjMgaXMgdG8gcmVtb3ZlIGlubGluZSBYODYg YXNzZW1ibHkgY29kZSBpbiBDIHNvdXJjZSBmaWxlLiBCdXQsIHRoaXMNCnBhdGNoIGlzIHdyb25n LiBJIGhhdmUgZ2F2ZSBteSBjb21tZW50cyB0byB1cGRhdGUgdGhpcyBwYXRjaC4NCg0KDQoNCg0K V2h5IGRvIHdlIHdhbnQgdG8gcmVtb3ZlIGlubGluZSBYODYgYXNzZW1ibHkuIEFzIEkgbWVudGlv bmVkIGl0IHdpbGwgbGVhZA0KdG8gbGFyZ2VyIGJpbmFyaWVzLCBzbG93ZXIgYmluYXJpZXMsIGFu ZCBsZXNzIG9wdGltaXplZCBjb2RlLg0KDQoNCg0KRm9yIGV4YW1wbGUgdGFrZSB0aGlzIHNpbXBs ZSBpbmxpbmUgYXNzZW1ibHkgZnVuY3Rpb246DQoNClZPSUQNCkVGSUFQSQ0KQ3B1QnJlYWtwb2lu dCAoDQogVk9JRA0KICkNCnsNCiBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImludCAkMyIpOw0KfQ0K DQoNClRvZGF5IHdpdGggY2xhbmcgTFRPIHR1cm5lZCBvbiBjYWxsaW5nIENwdUJyZWFrcG9pbnQo KSBsb29rcyBsaWtlIHRoaXMgZnJvbQ0KdGhlIGNhbGxlcnMgcG9pbnQgb2Ygdmlldy4NCg0KDQoN CmEub3V0WzB4MWZhNV0gPCs2PjogIGNjICAgICAgICAgICAgICBpbnQzDQoNCg0KQnV0IGlmIHdl IG1vdmUgdGhhdCB0byBOQVNNOg0KDQoNCmEub3V0WzB4MWZhNl0gPCs3PjogIGU4IDA3IDAwIDAw IDAwICBjYWxsbA0KMHgxZmIyICAgICAgICAgICAgICAgICAgICA7IENwdUJyZWFrcG9pbnQNCg0K DQoNCg0KcGx1czoNCmEub3V0YENwdUJyZWFrcG9pbnQ6DQphLm91dFsweDFmYjJdIDwrMD46IGNj ICAgICBpbnQzDQphLm91dFsweDFmYjNdIDwrMT46IGMzICAgICByZXRsDQoNCg0KQW5kIHRoZXJl IGlzIGFsc28gYW4gZXh0cmEgcHVzaCBhbmQgcG9wIG9uIHRoZSBzdGFjay4gVGhlIG90aGVyIGlz c3VlIGlzIHRoZQ0KY2FsbCB0byB0aGUgZnVuY3Rpb24gdGhhdCBpcyB1bmtub3duIHRvIHRoZSBj b21waWxlciB3aWxsIGFjdCBsaWtlIGENCl9SZWFkV3JpdGVCYXJyaWVyIChZaWtlcyBJIHNlZSBf UmVhZFdyaXRlQmFycmllciBpcyBkZXByZWNhdGVkIGluIFZDKysNCjIwMTcpLiBJcyB0aGUgZGVw cmVjaWF0aW9uIG9mIHNvbWUgb2YgdGhlc2UgaW50cmluc2ljcyBpbiBWQysrIGRyaXZpbmcgdGhl DQpyZW1vdmFsIG9mIGlubGluZSBhc3NlbWJseT8gRm9yIEdDQyBpbmxpbmUgYXNzZW1ibHkgd29y a3MgZ3JlYXQgZm9yIGxvY2FsDQpjb21waWxlLCBhbmQgZm9yIGNsYW5nIExUTyBpdCB3b3JrcyBp biBlbnRpcmUgcHJvZ3JhbSBvcHRpbWl6YXRpb24uDQoNCg0KDQpUaGUgTFRPIGJpdGNvZGUgaW5j bHVkZXMgaW5saW5lIGFzc2VtYmx5IGFuZCBjb25zdHJhaW50cyBzbyB0aGF0IHRoZQ0Kb3B0aW1p emVyIGtub3dzIHdoYXQgdG8gZG8gc28gaXQgY2FuIGdldCBvcHRpbWl6ZWQganVzdCBsaWtlIHRo ZSBhYnN0cmFjdA0KYml0Y29kZSBkdXJpbmcgdGhlIExpbmsgVGltZSBPcHRpbWl6YXRpb24uDQoN Cg0KDQpUaGlzIGlzIENwdUJyZWFrcG9pbnQoKToNCjsgRnVuY3Rpb24gQXR0cnM6IG5vaW5saW5l IG5vdW53aW5kIG9wdG5vbmUgc3NwIHV3dGFibGUNCmRlZmluZSB2b2lkIEBDcHVCcmVha3BvaW50 KCkgIzAgew0KIGNhbGwgdm9pZCBhc20gc2lkZWVmZmVjdCAiaW50ICQkMyIsICJ+e2RpcmZsYWd9 LH57ZnBzcn0sfntmbGFnc30iKCkNCiMyLCAhc3JjbG9jICEzDQoNCg0KIHJldCB2b2lkDQp9DQoN Cg0KVGhpcyBpcyBBc21SZWFkTXNyNjQoKToNCjsgRnVuY3Rpb24gQXR0cnM6IG5vaW5saW5lIG5v dW53aW5kIG9wdG5vbmUgc3NwIHV3dGFibGUNCmRlZmluZSBpNjQgQEFzbVJlYWRNc3I2NChpMzIp ICMwIHsNCiAlMiA9IGFsbG9jYSBpMzIsIGFsaWduIDQNCiAlMyA9IGFsbG9jYSBpNjQsIGFsaWdu IDgNCiBzdG9yZSBpMzIgJTAsIGkzMiogJTIsIGFsaWduIDQNCiAlNCA9IGxvYWQgaTMyLCBpMzIq ICUyLCBhbGlnbiA0DQogJTUgPSBjYWxsIGk2NCBhc20gc2lkZWVmZmVjdCAicmRtc3IiLA0KIj1B LHtjeH0sfntkaXJmbGFnfSx+e2Zwc3J9LH57ZmxhZ3N9IihpMzIgJTQpICMyLCAhc3JjbG9jICE0 DQoNCg0KIHN0b3JlIGk2NCAlNSwgaTY0KiAlMywgYWxpZ24gOA0KICU2ID0gbG9hZCBpNjQsIGk2 NCogJTMsIGFsaWduIDgNCiByZXQgaTY0ICU2DQp9DQoNCg0KDQpJIGFncmVlIGl0IG1ha2Ugc2Vu c2UgdG8gcmVtb3ZlIC5TIGFuZCAuYXNtIGZpbGVzIGFuZCBvbmx5IGhhdmUgLm5hc20gZmlsZXMu DQoNClRoYW5rcywNCg0KQW5kcmV3IEZpc2gNCg0KUFMgRm9yIHRoZSBYY29kZSBjbGFuZyBzaW5j ZSBpdCBlbWl0cyBmcmFtZSBwb2ludGVycyBieSBkZWZhdWx0IHdlIG5lZWQgdG8NCmFkZCB0aGUg ZXh0cmEgNCBieXRlcyB0byBzYXZlIHRoZSBhc3NlbWJseSBmdW5jdGlvbnMgc28gdGhlIHN0YWNr IGNhbiBnZXQNCnVud291bmQuDQoNCg0KDQphLm91dGBDcHVCcmVha3BvaW50Og0KYS5vdXRbMHgx Zjk5XSA8KzA+OiA1NSAgICAgcHVzaGwgICVlYnANCmEub3V0WzB4MWY5YV0gPCsxPjogODkgZTUg IG1vdmwgICAlZXNwLCAlZWJwDQphLm91dFsweDFmOWNdIDwrMz46IGNjICAgICBpbnQzDQphLm91 dFsweDFmOWRdIDwrND46IDVkICAgICBwb3BsICAgJWVicA0KYS5vdXRbMHgxZjllXSA8KzU+OiBj MyAgICAgcmV0bA0KDQoNClNvIGJyZWFrcG9pbnQgZ29lcyBmcm9tIDEgYnl0ZSB0byAxMSBieXRl cyBpZiB3ZSBnZXQgcmlkIG9mIHRoZSBpbnRyaW5zaWNzLg0KDQoNClRoZSBjaGFuZ2UgaXMgdG8g cmVkdWNlIHRoZSBkdXBsaWNhdGVkIGltcGxlbWVudGF0aW9uLiBJdCB3aWxsIGJlIGdvb2QNCm9u IHRoZSBjb2RlIG1haW50YWluLiBSZWNlbnRseSwgb25lIHBhdGNoIGhhcyB0byB1cGRhdGUgLmMg YW5kIC5uYXNtIGJvdGguDQpQbGVhc2Ugc2VlDQpodHRwczovL2xpc3RzLjAxLm9yZy9waXBlcm1h aWwvZWRrMi1kZXZlbC8yMDE5LUZlYnJ1YXJ5LzAzNzE2NS5odG1sDQo8aHR0cHM6Ly9saXN0cy4w MS5vcmcvcGlwZXJtYWlsL2VkazItZGV2ZWwvMjAxOS1GZWJydWFyeS8wMzcxNjUuaHRtbD4uDQpC ZXNpZGUgdGhpcyBjaGFuZ2UsIEkgcHJvcG9zZSB0byByZW1vdmUgYWxsIEdBUyBhc3NlbWJseSBj b2RlIGZvciBJQTMyIGFuZA0KWDY0IGFyY2guIEFmdGVyIHRob3NlIGNoYW5nZSwgdGhlIHBhdGNo IG93bmVyIHdpbGwgY29sbGVjdCB0aGUgaW1wYWN0IG9mIHRoZQ0KaW1hZ2Ugc2l6ZS4NCg0KDQoN ClRoYW5rcw0KTGltaW5nDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fDQplZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KZWRrMi1kZXZlbEBsaXN0cy4wMS5v cmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KaHR0cHM6Ly9saXN0cy4wMS5vcmcv bWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQoNCg==