From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [RFC 2/6] rangeset_destroy() refactoring Date: Thu, 16 Feb 2017 14:29:02 +0000 Message-ID: References: <1487246610-8298-1-git-send-email-andrii.anisov@gmail.com> <1487246610-8298-3-git-send-email-andrii.anisov@gmail.com> <22ef829679f24604aa9d663de288c774@AMSPEX02CL03.citrite.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ceN3o-0006zS-68 for xen-devel@lists.xenproject.org; Thu, 16 Feb 2017 14:29:28 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: 'Andrii Anisov' Cc: Wei Liu , "sstabellini@kernel.org" , "andrii_anisov@epam.com" , Andrew Cooper , "Tim (Xen.org)" , George Dunlap , "jbeulich@suse.com" , Ian Jackson , "xen-devel@lists.xenproject.org" List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmRyaWkgQW5pc292IFttYWls dG86YW5kcmlpLmFuaXNvdkBnbWFpbC5jb21dDQo+IFNlbnQ6IDE2IEZlYnJ1YXJ5IDIwMTcgMTQ6 MjYNCj4gVG86IFBhdWwgRHVycmFudCA8UGF1bC5EdXJyYW50QGNpdHJpeC5jb20+DQo+IENjOiB4 ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IGFuZHJpaV9hbmlzb3ZAZXBhbS5jb207IEFu ZHJldw0KPiBDb29wZXIgPEFuZHJldy5Db29wZXIzQGNpdHJpeC5jb20+OyBHZW9yZ2UgRHVubGFw DQo+IDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+OyBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25A Y2l0cml4LmNvbT47DQo+IGpiZXVsaWNoQHN1c2UuY29tOyBrb25yYWQud2lsa0BvcmFjbGUuY29t OyBzc3RhYmVsbGluaUBrZXJuZWwub3JnOyBUaW0NCj4gKFhlbi5vcmcpIDx0aW1AeGVuLm9yZz47 IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUkZDIDIvNl0g cmFuZ2VzZXRfZGVzdHJveSgpIHJlZmFjdG9yaW5nDQo+IA0KPiBEZWFyIFBhdWwsDQo+IA0KPiA+ PiBJdCBpcyBzdGlsbCBsZWZ0IGEgcmFuZ2VzZXRzIGxpc3QgZnVuY3Rpb25hbGl0eTogcmFuZ2Vz ZXRfZGVzdHJveSgpDQo+ID4+IHdpbGwgcmVtb3ZlIGl0c2VsZiBmcm9tIGEgbGlzdC4gSWYgYSBz cGlubG9jayBpcyBwcm92aWRlZCBpdCB3aWxsIGJlDQo+ID4+IGhlbGQgZm9yIGxpc3QgZGVsZXRp b24gb3BlcmF0aW9uLiBUaGlzIHdvdWxkIGJlIHJlY29uc2lkZXJlZCBmdXJ0aGVyLg0KPiA+Pg0K PiA+DQo+ID4gTWF5YmUgdXNlIHRoZSBzYW1lIHNjaGVtZSBpbiBwYXRjaCAjMSB0aGVuIGFuZCBw YXNzIHRoZSBsb2NrLCBhcyB3ZWxsIGFzDQo+IHRoZSBsaXN0X2hlYWQsIGludG8gcmFuZ2VzZXRf bmV3KCkuDQo+IEluaXRpYWxpemVkIGxpc3QgaGVhZCBpbiBwYXRjaCMxIGlzIHByb3ZpZGVkIGJ5 IHJhbmdlc2V0IHRvIHVzZXIgaWYNCj4gdXNlciBuZWVkcyBpdCB0byBsaW5rIHRvIHNvbWUgbGlz dC4gU28gdXNlciBzaG91bGQgZG8gdGhlIGxvY2tpbmcgb24NCj4gdHJlZSBpbnNlcnQgaWYgaXQg bmVlZHMuIEhlcmUgcmFuZ2VzZXQgdXNlciBjYW4gbm90IGFjcXVpcmUgdGhlIHRyZWUNCj4gaGVh ZCBldmVuIGlmIGl0IGhhcyBhIHJhbmdlc2V0IGl0c2VsZiwgYmVjYXVzZSBgc3RydWN0IHJhbmdl c2V0YCBpcw0KPiBub3QgZXhwb3NlZCB2aWEgaGVhZGVyIGZpbGUuIFNvIHJhbmdlc2V0X2Rlc3Ry b3koKSBzaG91bGQgdGFrZSBjYXJlIG9mDQo+IHRyZWUgaGVhZCByZW1vdmUgYW5kIHNwaW5sb2Nr IGxvY2tpbmcgaWYgbmVlZGVkLg0KPiANCj4gSSBzdGlsbCBoYXZlIGNvbmNlcm5zIHdoeSByYW5n ZXNldCBsaXN0IGtlZXBpbmcgc2hvdWxkIGJlIGluc2lkZQ0KPiByYW5nZXNldCBpdHNlbGYuDQoN CldoYXQgdXNlIGFyZSByYW5nZXNldHMgaWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY29u dHJvbCB0aGUgbGlzdC90cmVlPyBIb3cgb24gZWFydGggd291bGQgeW91IGltcGxlbWVudCBhbiBh bGxvY2F0aW9uIGZ1bmN0aW9uIG90aGVyd2lzZT8NCg0KICBQYXVsDQoNCj4gDQo+IFNpbmNlcmVs eSwNCj4gQW5kcmlpIEFuaXNvdi4NCj4gDQo+IA0KPiAyMDE3LTAyLTE2IDE0OjI2IEdNVCswMjow MCBQYXVsIER1cnJhbnQgPFBhdWwuRHVycmFudEBjaXRyaXguY29tPjoNCj4gPj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogQW5kcmlpIEFuaXNvdiBbbWFpbHRvOmFuZHJp aS5hbmlzb3ZAZ21haWwuY29tXQ0KPiA+PiBTZW50OiAxNiBGZWJydWFyeSAyMDE3IDEyOjAzDQo+ ID4+IFRvOiB4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gQ2M6IGFuZHJpaV9h bmlzb3ZAZXBhbS5jb207IEFuZHJldyBDb29wZXINCj4gPj4gPEFuZHJldy5Db29wZXIzQGNpdHJp eC5jb20+OyBHZW9yZ2UgRHVubGFwDQo+ID4+IDxHZW9yZ2UuRHVubGFwQGNpdHJpeC5jb20+OyBJ YW4gSmFja3NvbiA8SWFuLkphY2tzb25AY2l0cml4LmNvbT47DQo+ID4+IGpiZXVsaWNoQHN1c2Uu Y29tOyBrb25yYWQud2lsa0BvcmFjbGUuY29tOyBQYXVsIER1cnJhbnQNCj4gPj4gPFBhdWwuRHVy cmFudEBjaXRyaXguY29tPjsgc3N0YWJlbGxpbmlAa2VybmVsLm9yZzsgVGltIChYZW4ub3JnKQ0K PiA+PiA8dGltQHhlbi5vcmc+OyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPg0KPiA+PiBT dWJqZWN0OiBbUkZDIDIvNl0gcmFuZ2VzZXRfZGVzdHJveSgpIHJlZmFjdG9yaW5nDQo+ID4+DQo+ ID4+IEZyb206IEFuZHJpaSBBbmlzb3YgPGFuZHJpaV9hbmlzb3ZAZXBhbS5jb20+DQo+ID4+DQo+ ID4+IHJhbmdlc2V0X2Rlc3Ryb3kgaXMgbWFkZSBkb21haW4gYWdub3N0aWMuIFRoZSBkb21haW4g c3BlY2lmaWMgY29kZQ0KPiA+PiBpcyBtb3ZlZCB0byBjb21tb24vZG9tYWluLmM6ZG9tYWluX3Jh bmdlc2V0X2Rlc3Ryb3koKS4NCj4gPj4NCj4gPj4gSXQgaXMgc3RpbGwgbGVmdCBhIHJhbmdlc2V0 cyBsaXN0IGZ1bmN0aW9uYWxpdHk6IHJhbmdlc2V0X2Rlc3Ryb3koKQ0KPiA+PiB3aWxsIHJlbW92 ZSBpdHNlbGYgZnJvbSBhIGxpc3QuIElmIGEgc3BpbmxvY2sgaXMgcHJvdmlkZWQgaXQgd2lsbCBi ZQ0KPiA+PiBoZWxkIGZvciBsaXN0IGRlbGV0aW9uIG9wZXJhdGlvbi4gVGhpcyB3b3VsZCBiZSBy ZWNvbnNpZGVyZWQgZnVydGhlci4NCj4gPj4NCj4gPg0KPiA+IE1heWJlIHVzZSB0aGUgc2FtZSBz Y2hlbWUgaW4gcGF0Y2ggIzEgdGhlbiBhbmQgcGFzcyB0aGUgbG9jaywgYXMgd2VsbCBhcw0KPiB0 aGUgbGlzdF9oZWFkLCBpbnRvIHJhbmdlc2V0X25ldygpLg0KPiA+DQo+ID4gICBQYXVsDQo+ID4N Cj4gPj4gU2lnbmVkLW9mZi1ieTogQW5kcmlpIEFuaXNvdiA8YW5kcmlpX2FuaXNvdkBlcGFtLmNv bT4NCj4gPj4gLS0tDQo+ID4+ICB4ZW4vYXJjaC94ODYvaHZtL2lvcmVxLmMgICB8ICAyICstDQo+ ID4+ICB4ZW4vYXJjaC94ODYvbW0vcDJtLmMgICAgICB8ICAyICstDQo+ID4+ICB4ZW4vY29tbW9u L2RvbWFpbi5jICAgICAgICB8ICA1ICsrKysrDQo+ID4+ICB4ZW4vY29tbW9uL3Jhbmdlc2V0LmMg ICAgICB8IDE1ICsrKysrKysrLS0tLS0tLQ0KPiA+PiAgeGVuL2luY2x1ZGUveGVuL2RvbWFpbi5o ICAgfCAgMyArKysNCj4gPj4gIHhlbi9pbmNsdWRlL3hlbi9yYW5nZXNldC5oIHwgIDkgKysrKysr LS0tDQo+ID4+ICA2IGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9u cygtKQ0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jIGIv eGVuL2FyY2gveDg2L2h2bS9pb3JlcS5jDQo+ID4+IGluZGV4IDZkZjE5MWQuLjZhZTU5MjEgMTAw NjQ0DQo+ID4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaW9yZXEuYw0KPiA+PiArKysgYi94ZW4v YXJjaC94ODYvaHZtL2lvcmVxLmMNCj4gPj4gQEAgLTQ5Niw3ICs0OTYsNyBAQCBzdGF0aWMgdm9p ZA0KPiBodm1faW9yZXFfc2VydmVyX2ZyZWVfcmFuZ2VzZXRzKHN0cnVjdA0KPiA+PiBodm1faW9y ZXFfc2VydmVyICpzLA0KPiA+PiAgICAgICAgICByZXR1cm47DQo+ID4+DQo+ID4+ICAgICAgZm9y ICggaSA9IDA7IGkgPCBOUl9JT19SQU5HRV9UWVBFUzsgaSsrICkNCj4gPj4gLSAgICAgICAgcmFu Z2VzZXRfZGVzdHJveShzLT5yYW5nZVtpXSk7DQo+ID4+ICsgICAgICAgIGRvbWFpbl9yYW5nZXNl dF9kZXN0cm95KHMtPnJhbmdlW2ldLCBzLT5kb21haW4pOw0KPiA+PiAgfQ0KPiA+Pg0KPiA+PiAg c3RhdGljIGludCBodm1faW9yZXFfc2VydmVyX2FsbG9jX3Jhbmdlc2V0cyhzdHJ1Y3QgaHZtX2lv cmVxX3NlcnZlcg0KPiAqcywNCj4gPj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9wMm0u YyBiL3hlbi9hcmNoL3g4Ni9tbS9wMm0uYw0KPiA+PiBpbmRleCA0NjMwMWFkLi5kMzljMDkzIDEw MDY0NA0KPiA+PiAtLS0gYS94ZW4vYXJjaC94ODYvbW0vcDJtLmMNCj4gPj4gKysrIGIveGVuL2Fy Y2gveDg2L21tL3AybS5jDQo+ID4+IEBAIC0xNDEsNyArMTQxLDcgQEAgc3RhdGljIHZvaWQgcDJt X3RlYXJkb3duX2hvc3RwMm0oc3RydWN0IGRvbWFpbg0KPiA+PiAqZCkNCj4gPj4NCj4gPj4gICAg ICBpZiAoIHAybSApDQo+ID4+ICAgICAgew0KPiA+PiAtICAgICAgICByYW5nZXNldF9kZXN0cm95 KHAybS0+bG9nZGlydHlfcmFuZ2VzKTsNCj4gPj4gKyAgICAgICAgZG9tYWluX3Jhbmdlc2V0X2Rl c3Ryb3kocDJtLT5sb2dkaXJ0eV9yYW5nZXMsIGQpOw0KPiA+PiAgICAgICAgICBwMm1fZnJlZV9v bmUocDJtKTsNCj4gPj4gICAgICAgICAgZC0+YXJjaC5wMm0gPSBOVUxMOw0KPiA+PiAgICAgIH0N Cj4gPj4gZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vZG9tYWluLmMgYi94ZW4vY29tbW9uL2RvbWFp bi5jDQo+ID4+IGluZGV4IDFiOWJjM2MuLmYwM2EwMzIgMTAwNjQ0DQo+ID4+IC0tLSBhL3hlbi9j b21tb24vZG9tYWluLmMNCj4gPj4gKysrIGIveGVuL2NvbW1vbi9kb21haW4uYw0KPiA+PiBAQCAt MTU1Myw2ICsxNTUzLDExIEBAIHN0cnVjdCByYW5nZXNldCAqZG9tYWluX3Jhbmdlc2V0X25ldyhz dHJ1Y3QNCj4gPj4gZG9tYWluICpkLCBjaGFyICpuYW1lLA0KPiA+PiAgICAgIHJldHVybiByOw0K PiA+PiAgfQ0KPiA+Pg0KPiA+PiArdm9pZCBkb21haW5fcmFuZ2VzZXRfZGVzdHJveShzdHJ1Y3Qg ZG9tYWluICpkLA0KPiA+PiArICAgIHN0cnVjdCByYW5nZXNldCAqcikNCj4gPj4gK3sNCj4gPj4g KyAgICByYW5nZXNldF9kZXN0cm95KHIsICZkLT5yYW5nZXNldHNfbG9jayk7DQo+ID4+ICt9DQo+ ID4+DQo+ID4+DQo+ID4+ICAvKg0KPiA+PiBkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9yYW5nZXNl dC5jIGIveGVuL2NvbW1vbi9yYW5nZXNldC5jDQo+ID4+IGluZGV4IDQ3OGQyMzIuLjExNzI5NTAg MTAwNjQ0DQo+ID4+IC0tLSBhL3hlbi9jb21tb24vcmFuZ2VzZXQuYw0KPiA+PiArKysgYi94ZW4v Y29tbW9uL3Jhbmdlc2V0LmMNCj4gPj4gQEAgLTM1NCwxOSArMzU0LDIwIEBAIHN0cnVjdCByYW5n ZXNldCAqcmFuZ2VzZXRfbmV3KGNoYXIgKm5hbWUsDQo+ID4+IHVuc2lnbmVkIGludCBmbGFncywN Cj4gPj4gIH0NCj4gPj4NCj4gPj4gIHZvaWQgcmFuZ2VzZXRfZGVzdHJveSgNCj4gPj4gLSAgICBz dHJ1Y3QgcmFuZ2VzZXQgKnIpDQo+ID4+ICsgICAgc3RydWN0IHJhbmdlc2V0ICpyLCBzcGlubG9j a190ICpsb2NrKQ0KPiA+PiAgew0KPiA+PiAgICAgIHN0cnVjdCByYW5nZSAqeDsNCj4gPj4NCj4g Pj4gICAgICBpZiAoIHIgPT0gTlVMTCApDQo+ID4+ICAgICAgICAgIHJldHVybjsNCj4gPj4NCj4g Pj4gLSAgICBpZiAoIHItPmRvbWFpbiAhPSBOVUxMICkNCj4gPj4gLSAgICB7DQo+ID4+IC0gICAg ICAgIHNwaW5fbG9jaygmci0+ZG9tYWluLT5yYW5nZXNldHNfbG9jayk7DQo+ID4+IC0gICAgICAg IGxpc3RfZGVsKCZyLT5yYW5nZXNldF9saXN0KTsNCj4gPj4gLSAgICAgICAgc3Bpbl91bmxvY2so JnItPmRvbWFpbi0+cmFuZ2VzZXRzX2xvY2spOw0KPiA+PiAtICAgIH0NCj4gPj4gKyAgICBpZiAo IGxvY2sgKQ0KPiA+PiArICAgICAgICBzcGluX2xvY2sobG9jayk7DQo+ID4+ICsNCj4gPj4gKyAg ICBsaXN0X2RlbCgmci0+cmFuZ2VzZXRfbGlzdCk7DQo+ID4+ICsNCj4gPj4gKyAgICBpZiAoIGxv Y2sgKQ0KPiA+PiArICAgICAgICBzcGluX3VubG9jayhsb2NrKTsNCj4gPj4NCj4gPj4gICAgICB3 aGlsZSAoICh4ID0gZmlyc3RfcmFuZ2UocikpICE9IE5VTEwgKQ0KPiA+PiAgICAgICAgICBkZXN0 cm95X3JhbmdlKHIsIHgpOw0KPiA+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL2RvbWFp bi5oIGIveGVuL2luY2x1ZGUveGVuL2RvbWFpbi5oDQo+ID4+IGluZGV4IGNkNjJlNmUuLjNkOWM2 NTIgMTAwNjQ0DQo+ID4+IC0tLSBhL3hlbi9pbmNsdWRlL3hlbi9kb21haW4uaA0KPiA+PiArKysg Yi94ZW4vaW5jbHVkZS94ZW4vZG9tYWluLmgNCj4gPj4gQEAgLTExMSw0ICsxMTEsNyBAQCB2b2lk IHZudW1hX2Rlc3Ryb3koc3RydWN0IHZudW1hX2luZm8gKnZudW1hKTsNCj4gPj4gIHN0cnVjdCBy YW5nZXNldCAqZG9tYWluX3Jhbmdlc2V0X25ldyhzdHJ1Y3QgZG9tYWluICpkLCBjaGFyICpuYW1l LA0KPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBmbGFncyk7DQo+ID4+DQo+ID4+ICt2b2lkIGRvbWFpbl9yYW5nZXNldF9kZXN0cm95KHN0cnVj dCBkb21haW4gKmQsDQo+ID4+ICsgICAgc3RydWN0IHJhbmdlc2V0ICpyKTsNCj4gPj4gKw0KPiA+ PiAgI2VuZGlmIC8qIF9fWEVOX0RPTUFJTl9IX18gKi8NCj4gPj4gZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL3hlbi9yYW5nZXNldC5oIGIveGVuL2luY2x1ZGUveGVuL3Jhbmdlc2V0LmgNCj4gPj4g aW5kZXggMzk1YmE2Mi4uZGVlZDU0ZCAxMDA2NDQNCj4gPj4gLS0tIGEveGVuL2luY2x1ZGUveGVu L3Jhbmdlc2V0LmgNCj4gPj4gKysrIGIveGVuL2luY2x1ZGUveGVuL3Jhbmdlc2V0LmgNCj4gPj4g QEAgLTE0LDYgKzE0LDcgQEANCj4gPj4NCj4gPj4gIHN0cnVjdCBkb21haW47DQo+ID4+ICBzdHJ1 Y3QgbGlzdF9oZWFkOw0KPiA+PiArc3RydWN0IHNwaW5sb2NrOw0KPiA+PiAgc3RydWN0IHJhbmdl c2V0Ow0KPiA+Pg0KPiA+PiAgLyoNCj4gPj4gQEAgLTM3LDExICszOCwxMyBAQCBzdHJ1Y3QgcmFu Z2VzZXQgKnJhbmdlc2V0X25ldyhjaGFyICpuYW1lLA0KPiA+PiB1bnNpZ25lZCBpbnQgZmxhZ3Ms DQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICoq aGVhZCk7DQo+ID4+DQo+ID4+ICAvKg0KPiA+PiAtICogRGVzdHJveSBhIHJhbmdlc2V0LiBJdCBp cyBpbnZhbGlkIHRvIHBlcmZvcm0gYW55IG9wZXJhdGlvbiBvbiBhIHJhbmdlc2V0DQo+IEByDQo+ ID4+ICsgKiBEZXN0cm95IGEgcmFuZ2VzZXQuIFJhbmdlc2V0IHdpbGwgdGFrZSBhbiBhY3Rpb24g dG8gcmVtb3ZlIGl0c2VsZiBmcm9tDQo+IGENCj4gPj4gKyAqIGxpc3QuIElmIGEgc3BpbmxvY2sg aXMgcHJvdmlkZWQgaXQgd2lsbCBiZSBoZWxkIGR1cmluZyBsaXN0IGRlbGV0aW9uDQo+ID4+ICsg KiBvcGVyYXRpb24uDQo+ID4+ICsgKiBJdCBpcyBpbnZhbGlkIHRvIHBlcmZvcm0gYW55IG9wZXJh dGlvbiBvbiBhIHJhbmdlc2V0IEByDQo+ID4+ICAgKiBhZnRlciBjYWxsaW5nIHJhbmdlc2V0X2Rl c3Ryb3kocikuDQo+ID4+ICAgKi8NCj4gPj4gLXZvaWQgcmFuZ2VzZXRfZGVzdHJveSgNCj4gPj4g LSAgICBzdHJ1Y3QgcmFuZ2VzZXQgKnIpOw0KPiA+PiArdm9pZCByYW5nZXNldF9kZXN0cm95KHN0 cnVjdCByYW5nZXNldCAqciwgc3RydWN0IHNwaW5sb2NrICpsb2NrKTsNCj4gPj4NCj4gPj4gIC8q DQo+ID4+ICAgKiBTZXQgYSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHJhbmdlcyB0aGF0IG1heSBl eGlzdCBpbiBzZXQgQHIuDQo+ID4+IC0tDQo+ID4+IDIuNy40DQo+ID4NCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=