From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id F337A1BB4B for ; Thu, 21 Jun 2018 11:14:48 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Jun 2018 02:14:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,251,1526367600"; d="scan'208";a="68786895" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga002.jf.intel.com with ESMTP; 21 Jun 2018 02:14:44 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 21 Jun 2018 02:14:41 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.51]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.70]) with mapi id 14.03.0319.002; Thu, 21 Jun 2018 17:14:39 +0800 From: "Zhang, Qi Z" To: "Burakov, Anatoly" , "thomas@monjalon.net" CC: "Ananyev, Konstantin" , "dev@dpdk.org" , "Richardson, Bruce" , "Yigit, Ferruh" , "Shelton, Benjamin H" , "Vangati, Narender" Thread-Topic: [PATCH v2 04/22] ethdev: enable hotplug on multi-process Thread-Index: AQHUCQOyOkqmphDdn0yZkE9p+aGN5KRp3dsAgACPuBA= Date: Thu, 21 Jun 2018 09:14:39 +0000 Message-ID: <039ED4275CED7440929022BC67E706115323B2AD@SHSMSX103.ccr.corp.intel.com> References: <20180607123849.14439-1-qi.z.zhang@intel.com> <20180621020059.1198-1-qi.z.zhang@intel.com> <20180621020059.1198-5-qi.z.zhang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMjllMWViOTMtZmY2MC00ZjdiLTk2MmEtODFiNzNkZjZhZjYxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiQjVwVVhSOUpvbFBWaHFUUUYzcitRaTYzZUdxU254aVwvMHB1RVwvOHpnNDNheDhLN044WEM5YWttUkNwd1V1cDJPIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.200.100 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 04/22] ethdev: enable hotplug on multi-process X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jun 2018 09:14:49 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQnVyYWtvdiwgQW5hdG9s eQ0KPiBTZW50OiBUaHVyc2RheSwgSnVuZSAyMSwgMjAxOCA0OjM3IFBNDQo+IFRvOiBaaGFuZywg UWkgWiA8cWkuei56aGFuZ0BpbnRlbC5jb20+OyB0aG9tYXNAbW9uamFsb24ubmV0DQo+IENjOiBB bmFueWV2LCBLb25zdGFudGluIDxrb25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPjsgZGV2QGRw ZGsub3JnOw0KPiBSaWNoYXJkc29uLCBCcnVjZSA8YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+ OyBZaWdpdCwgRmVycnVoDQo+IDxmZXJydWgueWlnaXRAaW50ZWwuY29tPjsgU2hlbHRvbiwgQmVu amFtaW4gSA0KPiA8YmVuamFtaW4uaC5zaGVsdG9uQGludGVsLmNvbT47IFZhbmdhdGksIE5hcmVu ZGVyDQo+IDxuYXJlbmRlci52YW5nYXRpQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRD SCB2MiAwNC8yMl0gZXRoZGV2OiBlbmFibGUgaG90cGx1ZyBvbiBtdWx0aS1wcm9jZXNzDQo+IA0K PiBPbiAyMS1KdW4tMTggMzowMCBBTSwgUWkgWmhhbmcgd3JvdGU6DQo+ID4gV2UgYXJlIGdvaW5n IHRvIGludHJvZHVjZSB0aGUgc29sdXRpb24gdG8gaGFuZGxlIGRpZmZlcmVudCBob3RwbHVnDQo+ ID4gY2FzZXMgaW4gbXVsdGktcHJvY2VzcyBzaXR1YXRpb24sIGl0IGluY2x1ZGUgYmVsb3cgc2Nl bmFyaW86DQo+ID4NCj4gPiAxLiBBdHRhY2ggYSBzaGFyZSBkZXZpY2UgZnJvbSBwcmltYXJ5DQo+ ID4gMi4gRGV0YWNoIGEgc2hhcmUgZGV2aWNlIGZyb20gcHJpbWFyeQ0KPiA+IDMuIEF0dGFjaCBh IHNoYXJlIGRldmljZSBmcm9tIHNlY29uZGFyeSA0LiBEZXRhY2ggYSBzaGFyZSBkZXZpY2UgZnJv bQ0KPiA+IHNlY29uZGFyeSA1LiBBdHRhY2ggYSBwcml2YXRlIGRldmljZSBmcm9tIHNlY29uZGFy eSA2LiBEZXRhY2ggYQ0KPiA+IHByaXZhdGUgZGV2aWNlIGZyb20gc2Vjb25kYXJ5IDcuIERldGFj aCBhIHNoYXJlIGRldmljZSBmcm9tIHNlY29uZGFyeQ0KPiA+IHByaXZhdGVseSA4LiBBdHRhY2gg YSBzaGFyZSBkZXZpY2UgZnJvbSBzZWNvbmRhcnkgcHJpdmF0ZWx5DQo+ID4NCj4gPiBJbiBwcmlt YXJ5LXNlY29uZGFyeSBwcm9jZXNzIG1vZGVsLCB3ZSBhc3N1bWUgZGV2aWNlIGlzIHNoYXJlZCBi eSBkZWZhdWx0Lg0KPiA+IHRoYXQgbWVhbnMgYXR0YWNoIG9yIGRldGFjaCBhIGRldmljZSBvbiBh bnkgcHJvY2VzcyB3aWxsIGJyb2FkY2FzdCB0bw0KPiA+IGFsbCBvdGhlciBwcm9jZXNzZXMgdGhy b3VnaCBtcCBjaGFubmVsIHRoZW4gZGV2aWNlIGluZm9ybWF0aW9uIHdpbGwgYmUNCj4gPiBzeW5j aHJvbml6ZWQgb24gYWxsIHByb2Nlc3Nlcy4NCj4gPg0KPiA+IEFueSBmYWlsdXJlIGR1cmluZyBh dHRhY2hpbmcgcHJvY2VzcyB3aWxsIGNhdXNlIGluY29uc2lzdGVudCBzdGF0dXMNCj4gPiBiZXR3 ZWVuIHByb2Nlc3Nlcywgc28gcHJvcGVyIHJvbGxiYWNrIGFjdGlvbiBzaG91bGQgYmUgY29uc2lk ZXJlZC4NCj4gPiBBbHNvIGl0IGlzIG5vdCBzYWZlIHRvIGRldGFjaCBhIHNoYXJlIGRldmljZSB3 aGVuIG90aGVyIHByb2Nlc3Mgc3RpbGwNCj4gPiB1c2UgaXQsIHNvIGEgaGFuZHNoYWtlIG1lY2hh bmlzbSBpcyBpbnRyb2R1Y2VkLg0KPiA+DQo+ID4gVGhpcyBwYXRjaCBjb3ZlcnMgdGhlIGltcGxl bWVudGF0aW9uIG9mIGNhc2UgMSwyLDUsNiw3LDguDQo+ID4gQ2FzZSAzLDQgd2lsbCBiZSBpbXBs ZW1lbnRlZCBvbiBzZXBhcmF0ZSBwYXRjaCBhcyB3ZWxsIGFzIGhhbmRzaGFrZQ0KPiA+IG1lY2hh bmlzbS4NCj4gPg0KPiA+IFNjZW5hcmlvIGZvciBDYXNlIDEsIDI6DQo+ID4NCj4gPiBhdHRhY2gg ZGV2aWNlDQo+ID4gYSkgcHJpbWFyeSBhdHRhY2ggdGhlIG5ldyBkZXZpY2UgaWYgZmFpbGVkIGdv dG8gaCkuDQo+ID4gYikgcHJpbWFyeSBzZW5kIGF0dGFjaCBzeW5jIHJlcXVlc3QgdG8gYWxsIHNl Y29uZGFyeS4NCj4gPiBjKSBzZWNvbmRhcnkgcmVjZWl2ZSByZXF1ZXN0IGFuZCBhdHRhY2ggZGV2 aWNlIGFuZCBzZW5kIHJlcGx5Lg0KPiA+IGQpIHByaW1hcnkgY2hlY2sgdGhlIHJlcGx5IGlmIGFs bCBzdWNjZXNzIGdvIHRvIGkpLg0KPiA+IGUpIHByaW1hcnkgc2VuZCBhdHRhY2ggcm9sbGJhY2sg c3luYyByZXF1ZXN0IHRvIGFsbCBzZWNvbmRhcnkuDQo+ID4gZikgc2Vjb25kYXJ5IHJlY2VpdmUg dGhlIHJlcXVlc3QgYW5kIGRldGFjaCBkZXZpY2UgYW5kIHNlbmQgcmVwbHkuDQo+ID4gZykgcHJp bWFyeSByZWNlaXZlIHRoZSByZXBseSBhbmQgZGV0YWNoIGRldmljZSBhcyByb2xsYmFjayBhY3Rp b24uDQo+ID4gaCkgYXR0YWNoIGZhaWwNCj4gPiBpKSBhdHRhY2ggc3VjY2Vzcw0KPiA+DQo+ID4g ZGV0YWNoIGRldmljZQ0KPiA+IGEpIHByaW1hcnkgcGVyZm9ybSBwcmUtZGV0YWNoIGNoZWNrLCBp ZiBkZXZpY2UgaXMgbG9ja2VkLCBnb3RvIGkpLg0KPiA+IGIpIHByaW1hcnkgc2VuZCBwcmUtZGV0 YWNoIHN5bmMgcmVxdWVzdCB0byBhbGwgc2Vjb25kYXJ5Lg0KPiA+IGMpIHNlY29uZGFyeSBwZXJm b3JtIHByZS1kZXRhY2ggY2hlY2sgYW5kIHNlbmQgcmVwbHkuDQo+ID4gZCkgcHJpbWFyeSBjaGVj ayB0aGUgcmVwbHkgaWYgYW55IGZhaWwgZ290byBpKS4NCj4gPiBlKSBwcmltYXJ5IHNlbmQgZGV0 YWNoIHN5bmMgcmVxdWVzdCB0byBhbGwgc2Vjb25kYXJ5DQo+ID4gZikgc2Vjb25kYXJ5IGRldGFj aCB0aGUgZGV2aWNlIGFuZCBzZW5kIHJlcGx5IChhc3N1bWUgbm8gZmFpbCkNCj4gPiBnKSBwcmlt YXJ5IGRldGFjaCB0aGUgZGV2aWNlLg0KPiA+IGgpIGRldGFjaCBzdWNjZXNzDQo+ID4gaSkgZGV0 YWNoIGZhaWxlZA0KPiA+DQo+ID4gQ2FzZSA1LCA2Og0KPiA+IFNlY29uZGFyeSBwcm9jZXNzIGNh biBhdHRhY2ggcHJpdmF0ZSBkZXZpY2Ugd2hpY2ggb25seSB2aXNpYmxlIHRvDQo+ID4gaXRzZWxm LCBpbiB0aGlzIGNhc2Ugbm8gSVBDIGlzIGludm9sdmVkLCBwcmltYXJ5IHByb2Nlc3MgaXMgbm90 DQo+ID4gYWxsb3dlZCB0byBoYXZlIHByaXZhdGUgZGV2aWNlIHNvIGZhci4NCj4gPg0KPiA+IENh c2UgNywgODoNCj4gPiBTZWNvbmRhcnkgcHJvY2VzcyBjYW4gYWxzbyB0ZW1wb3JhbGx5IHRvIGRl dGFjaCBhIHNoYXJlIGRldmljZSAicHJpdmF0ZWx5Ig0KPiA+IHRoZW4gYXR0YWNoIGl0IGJhY2sg bGF0ZXIsIHRoaXMgYWN0aW9uIGFsc28gbm90IGltcGFjdCBvdGhlciBwcm9jZXNzZXMuDQo+ID4N Cj4gPiBBUElzIGNoYW5nZXM6DQo+ID4NCj4gPiBydGVfZXRoX2Rldl9hdHRhY2ggYW5kIHJ0ZV9l dGhfZGV2X2F0dGFjaCBhcmUgZXh0ZW5kZWQgdG8gc3VwcG9ydA0KPiA+IHNoYXJlIGRldmljZSBh dHRhY2gvZGV0YWNoIGluIHByaW1hcnktc2Vjb25kYXJ5IHByb2Nlc3MgbW9kZWwsIGl0IHdpbGwN Cj4gPiBiZSBjYWxsZWQgaW4gY2FzZSAxLDIsMyw0Lg0KPiA+DQo+ID4gTmV3IEFQSSBydGVfZXRo X2Rldl9hdHRhY2hfcHJpdmF0ZSBhbmQgcnRlX2V0aF9kZXZfZGV0YWNoX3ByaXZhdGUgYXJlDQo+ ID4gaW50cm9kdWNlZCB0byBjb3ZlciBjYXNlIDUsNiw3LDgsIHRoaXMgQVBJIGNhbiBvbmx5IGJl IGludm9rZWQgaW4NCj4gPiBzZWNvbmRhcnkgcHJvY2Vzcy4NCj4gPg0KPiA+IFNpZ25lZC1vZmYt Ynk6IFFpIFpoYW5nIDxxaS56LnpoYW5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gDQo+IDxzbmlw Pg0KPiANCj4gPiArCW1lbXNldCgmZGEsIDAsIHNpemVvZihkYSkpOw0KPiA+ICsNCj4gPiArCWlm IChydGVfZGV2YXJnc19wYXJzZSgmZGEsICIlcyIsIGRldmFyZ3MpKSB7DQo+ID4gKwkJZXRoZGV2 X2xvZyhFUlIsICJmYWlsZWQgdG8gcGFyc2UgZGV2YXJncyAlc1xuIiwgZGV2YXJncyk7DQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gcnRlX2VhbF9o b3RwbHVnX2FkZChkYS5idXMtPm5hbWUsIGRhLm5hbWUsICIiKTsNCj4gPiArCWlmIChyZXQpIHsN Cj4gPiArCQlldGhkZXZfbG9nKEVSUiwgImZhaWxlZCB0byBob3RwbHVnIGJ1czolcywgZGV2aWNl OiVzXG4iLA0KPiA+ICsJCQkgICBkYS5idXMtPm5hbWUsIGRhLm5hbWUpOw0KPiA+ICsJCWZyZWUo ZGEuYXJncyk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAo cnRlX2V0aF9kZXZpY2VzW3BvcnRfaWRdLnN0YXRlID09IFJURV9FVEhfREVWX1VOVVNFRCkgew0K PiA+ICsJCWV0aGRldl9sb2coRVJSLCAiZmFpbGVkIHRvIGF0dGFjaCB0byBwb3J0ICVkLCB0aGlz IGlzIGEgcG1kIGlzc3VlXG4iLA0KPiA+ICsJCQkgICBwb3J0X2lkKTsNCj4gPiArCQlyZXR1cm4g LUVOT0RFVjsNCj4gDQo+IF5eXiBMZWFraW5nIGRhLmFyZ3MgaGVyZT8NCj4gDQo+ID4gKwl9DQo+ ID4gKwlmcmVlKGRhLmFyZ3MpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgaGFuZGxlX3NlY29uZGFyeV9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBydGVfbXBf bXNnICptc2csDQo+ID4gK2NvbnN0IHZvaWQgKnBlZXIpIHsNCj4gPiArCVJURV9TRVRfVVNFRCht c2cpOw0KPiA+ICsJUlRFX1NFVF9VU0VEKHBlZXIpOw0KPiA+ICsJcmV0dXJuIC1FTk9UU1VQOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGhhbmRsZV9wcmltYXJ5X3Jlc3BvbnNlKGNv bnN0IHN0cnVjdCBydGVfbXBfbXNnICptc2csDQo+ID4gK2NvbnN0IHZvaWQgKnBlZXIpIHsNCj4g DQo+IDxzbmlwPg0KPiANCj4gPiArCXJldCA9IHJ0ZV9tcF9yZXF1ZXN0X3N5bmMoJm1wX3JlcSwg Jm1wX3JlcGx5LCAmdHMpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWV0aGRldl9sb2coRVJS LCAicnRlX21wX3JlcXVlc3Rfc3luYyBmYWlsZWRcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVxLT5yZXN1bHQgPSAwOw0KPiA+ICsJZm9yIChpID0gMDsg aSA8IG1wX3JlcGx5Lm5iX3JlY2VpdmVkOyBpKyspIHsNCj4gPiArCQlzdHJ1Y3QgZXRoX2Rldl9t cF9yZXEgKnJlc3AgPQ0KPiA+ICsJCQkoc3RydWN0IGV0aF9kZXZfbXBfcmVxICopbXBfcmVwbHku bXNnc1tpXS5wYXJhbTsNCj4gPiArCQlpZiAocmVzcC0+cmVzdWx0KSB7DQo+ID4gKwkJCXJlcS0+ cmVzdWx0ID0gcmVzcC0+cmVzdWx0Ow0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ID4gKwl9 DQo+IA0KPiBEbyB3ZSBjYXJlIGlmIG5iX3NlbnQgIT0gbmJfcmVjZWl2ZWQ/DQo+IA0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgcnRlX2V0aF9kZXZfbXBf aW5pdCh2b2lkKQ0KPiA+ICt7DQo+ID4gKw0KPiA+ICsJaWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBl KCkgPT0gUlRFX1BST0NfUFJJTUFSWSkgew0KPiA+ICsJCWlmIChydGVfbXBfYWN0aW9uX3JlZ2lz dGVyKEVUSF9ERVZfTVBfQUNUSU9OX1JFUVVFU1QsDQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gKy8q Kg0KPiA+ICsgKiB0aGlzIGlzIGEgc3luY2hyb25vdXMgd3JhcHBlciBmb3Igc2Vjb25kYXJ5IHBy b2Nlc3Mgc2VuZA0KPiA+ICsgKiByZXF1ZXN0IHRvIHByaW1hcnkgcHJvY2VzcywgdGhpcyBpcyBp bnZva2VkIHdoZW4gYW4gYXR0YWNoDQo+ID4gKyAqIG9yIGRldGFjaCByZXF1ZXN0IGlzc3VlZCBm cm9tIHByaW1hcnkuDQo+ID4gKyAqLw0KPiA+ICtpbnQgcnRlX2V0aF9kZXZfcmVxdWVzdF90b19w cmltYXJ5KHN0cnVjdCBldGhfZGV2X21wX3JlcSAqcmVxKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiB0aGlzIGlzIGEgc3luY2hyb25vdXMgd3JhcHBlciBmb3IgcHJpbWFyeSBwcm9jZXNzIHNl bmQNCj4gPiArICogcmVxdWVzdCB0byBzZWNvbmRhcnkgcHJvY2VzcywgdGhpcyBpcyBpbnZva2Vk IHdoZW4gYW4gYXR0YWNoDQo+ID4gKyAqIG9yIGRldGFjaCByZXF1ZXN0IGlzc3VlZCBmcm9tIHNl Y29uZGFyeSBwcm9jZXNzLg0KPiA+ICsgKi8NCj4gPiAraW50IHJ0ZV9ldGhfZGV2X3JlcXVlc3Rf dG9fc2Vjb25kYXJ5KHN0cnVjdCBldGhfZGV2X21wX3JlcSAqcmVxKTsNCj4gDQo+IE5pdHBpY2tp bmcsICBidXQgdGhlIHR3byBhYm92ZSBmdW5jdGlvbnMgYXJlbid0IHVzZWQgb3V0c2lkZSBldGhk ZXYgbGlicmFyeS4NCj4gWW91IGNhbiBwcm9iYWJseSBkcm9wIHRoZSBydGVfIHByZWZpeC4NCj4g DQo+ID4gKw0KPiA+ICsvKiBSZWdpc3RlciBtcCBjaGFubmVsIGNhbGxiYWNrIGZ1bmN0aW9ucyBv ZiBldGhkZXYgbGF5ZXIuKi8gaW50DQo+ID4gK3J0ZV9ldGhfZGV2X21wX2luaXQodm9pZCk7DQo+ IA0KPiBJIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgd2hhdCB5b3UncmUgZG9pbmcgaGVyZS4gKE9y IHJhdGhlciwgaSB1bmRlcnN0YW5kIHRoZQ0KPiBpbnRlbnRpb24sIGJ1dCBpIGRvbid0IHVuZGVy c3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIDopICkNCj4gDQo+IFRoaXMgZnVuY3Rpb24gaXMgbWVh bnQgdG8gYmUgY2FsbGVkIGZyb20gRUFMIGF0IHN0YXJ0dXAuIEZpcnN0IG9mIGFsbCwgd2h5IGlz IGl0DQo+IGRlY2xhcmVkIHR3aWNlIChvbmNlIGluIGVhbF9wcml2YXRlLCBvbmNlIGluIGV0aGRl dl9wcml2YXRlKT8NCg0KQWgsIEkgZm9yZ290IHRoaXMsIHRoaXMgaXMgc29tZXRoaW5nIGluIG1l c3MuDQoNCj4gDQo+IFNlY29uZCBvZiBhbGwsIGV0aGRldiBpcyBhIGxpYnJhcnksIGJ1dCB0aGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIEVBTC4gV2hpY2gNCj4gbWVhbnMgaXQgY2Fubm90IGJl IGluIGEgcHJpdmF0ZSBoZWFkZXIgKG5vciBzaG91bGQgaXQgYmUgZGVjbGFyZWQgaW4gRUFMKSwg YW5kDQo+IHlvdSBjYW5ub3QgZXZlbiBjYWxsIGl0IGZyb20gRUFMIGJlY2F1c2UgdGhhdCB3b3Vs ZCBpbnRyb2R1Y2UgYSBjaXJjdWxhcg0KPiBkZXBlbmRlbmN5IGJldHdlZW4gRUFMIGFuZCBldGhk ZXYuDQo+IA0KPiBTbywgdGhpcyBuZWVkcyB0byBiZSByZWRvbmUgdGhlIG90aGVyIHdheSBhcm91 bmQgLSBoYXZlIGV0aGRldiByZWdpc3RlciBpdHNlbGYNCj4gd2l0aCBFQUwsIGFuZCBnZXQgY2Fs bGVkIGF0IHNvbWUgcG9pbnQsIGluIGEgZ2VuZXJpYyB3YXkgKGUuZy4NCj4gc2VlIGhvdyBidXMg cHJvYmUgd29ya3MgZm9yIGV4YW1wbGUpLiBJIGRvbid0IGtub3cgd2hhdCB0aGlzIHdvdWxkIGxv b2sgbGlrZQ0KPiAtIG1heWJlIHNvbWUga2luZCBvZiBnZW5lcmljIG11bHRpcHJvY2VzcyBpbml0 Pw0KDQpZZXMsIHByb3Blcmx5IGxpa2UgdGhpcy4gSSB3aWxsIHJlLXdvcmsgaXQuDQoNClRoYW5r cw0KUWkNCg0KPiANCj4gLS0NCj4gVGhhbmtzLA0KPiBBbmF0b2x5DQo=