From: <jue...@we...> - 2003-10-25 18:19:04
|
SGkgTWF0dGhldywgDQoNCkkgc3VnZ2VzdCB0byBhZGQgdGhlICJleHRlcm5hbC1yZWYiIHRhZyB0 byB0aGUgWFdvcmsgWE1MIGZpbGUgaXRzZWxmLCBqdXN0IGxpa2UgdGhlIGV4aXN0aW5nICJwYXJh bSIgdGFnLiBUaGlzIGlzIGJhc2ljYWxseSBhbiBpbnZlcnNpb24gb2YgdGhlIGN1cnJlbnQgWFdv cmsgY29tcG9uZW50IGFwcHJvYWNoIC0tICJwdWxsaW5nIiBpbiBuYW1lZCBjb21wb25lbnQgaW5z dGFuY2VzIGluc3RlYWQgb2YgInB1c2hpbmciIHRoZW0gdG8gdGhlIGFjdGlvbnMuDQoNCiAgPGFj dGlvbiBuYW1lPSJCYXIiIGNsYXNzPSJteXBhY2thZ2UuTXlBY3Rpb24iPiANCiAgICAgPHBhcmFt IG5hbWU9ImZvbyI+MTc8L3BhcmFtPiANCiAgICAgPGV4dGVybmFsLXJlZiBuYW1lPSJiYXIiPm15 RGF0YVNvdXJjZTwvZXh0ZXJuYWwtcmVmPiANCiAgPC9hY3Rpb24+IA0KDQpUaGUgTXlBY3Rpb24g Y2xhc3MgY291bGQgbG9vayBhcyBmb2xsb3dzLiBOb3RlIHRoYXQgdGhlcmUncyBubyBlbmFibGVy IGludGVyZmFjZSBpbnZvbHZlZDsgdGhlIGJlYW4gcHJvcGVydHkgYW5kIHRodXMgdGhlIHNldHRl ciBpcyBkZXRlcm1pbmVkIHZpYSBleHRlcm5hbC1yZWbCtHMgIm5hbWUiIGF0dHJpYnV0ZSwganVz dCBsaWtlIHdpdGggdGhlIHBhcmFtIHRhZy4NCg0KICBwdWJsaWMgY2xhc3MgTXlBY3Rpb24gaW1w bGVtZW50cyBBY3Rpb24geyANCiAgICBwcml2YXRlIERhdGFTb3VyY2UgZGF0YVNvdXJjZTsgDQog ICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZShEYXRhU291cmNlIGRhdGFTb3VyY2UpIHsgDQog ICAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlOyANCiAgICB9IA0KICAgIC4uLiANCiAg fSANCg0KQXMgdGhpcyBpbnZvbHZlcyBzdXBwb3J0IGluIHRoZSBYV29yayBYTUwgZmlsZSwgdGhl IFhXb3JrIGFjdGlvbiBwcm9jZXNzb3Igd2lsbCBuZWVkIHRvIGltcGxlbWVudCB0aGUgZXh0ZXJu YWwtcmVmIHJlc29sdXRpb24gaXRzZWxmIGluc3RlYWQgb2YgYW4gaW50ZXJjZXB0b3IgbGlrZSBD b21wb25lbnRJbnRlcmNlcHRvci4gSXQgY291bGQgZGVsZWdhdGUgdGhlIGFjdHVhbCByZXNvbHV0 aW9uIHRvIGFuIEV4dGVybmFsUmVmZXJlbmNlUmVzb2x2ZXIgc3RyYXRlZ3k6DQoNCiAgcHVibGlj IGludGVyZmFjZSBFeHRlcm5hbFJlZmVyZW5jZVJlc29sdmVyIHsgDQogICAgT2JqZWN0IHJlc29s dmVSZWZlcmVuY2UoU3RyaW5nIG5hbWUpOyANCiAgfSANCg0KSW4gY2FzZSBvZiBXZWJXb3JrMiBi ZWluZyB0aGUgWFdvcmsgZW52aXJvbm1lbnQsIFNlcnZsZXREaXNwYXRjaGVyIGNvdWxkIGRldGVy bWluZSB0aGUgRXh0ZXJuYWxSZWZlcmVuY2VSZXNvbHZlciBpbXBsZW1lbnRhdGlvbiBjbGFzcyBu YW1lIGZyb20gYSBzZXJ2bGV0IGluaXQtcGFyYW0uIFRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24g Zm9yIGEgd2ViIGVudmlyb25tZW50IHdvdWxkIHNpbXBseSByZXRyaWV2ZSB0aGUgcm9vdCB3ZWIg YXBwbGljYXRpb24gY29udGV4dCB2aWEgdGhlIFNlcnZsZXRDb250ZXh0IHRoZW4sIHBvc3NpYmx5 IHJlY2VpdmluZyB0aGUgbGF0dGVyIHZpYSBhIFNlcnZsZXRDb250ZXh0QXdhcmUgaW50ZXJmYWNl Lg0KDQogIHB1YmxpYyBjbGFzcyBTcHJpbmdTZXJ2bGV0Q29udGV4dFJlZmVyZW5jZVJlc29sdmVy IGltcGxlbWVudHMgRXh0ZXJuYWxSZWZlcmVuY2VSZXNvbHZlciwgU2VydmxldENvbnRleHRBd2Fy ZSB7IA0KICAgIHByaXZhdGUgdm9pZCBBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250 ZXh0OyANCiAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2bGV0Q29udGV4dChTZXJ2bGV0Q29udGV4dCBz ZXJ2bGV0Q29udGV4dCkgeyANCiAgICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gV2ViQXBw bGljYXRpb25Db250ZXh0VXRpbHMuZ2V0V2ViQXBwbGljYXRpb25Db250ZXh0KHNlcnZsZXRDb250 ZXh0KTsgDQogICAgfSANCiAgICBwdWJsaWMgT2JqZWN0IHJlc29sdmVSZWZlcmVuY2UoU3RyaW5n IG5hbWUpIHsgDQogICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQuZ2V0QmVhbihu YW1lKTsgDQogICAgfSANCiAgfSANCg0KVGhlIFNwcmluZyByb290IHdlYiBhcHBsaWNhdGlvbiBj b250ZXh0IHdvdWxkIGJlIGxvYWRlZCBvbiBzdGFydHVwIHZpYSBTcHJpbmcncyBDb250ZXh0TG9h ZGVyTGlzdGVuZXIsIGFzIHVzdWFsLiBTcHJpbmcvV2ViV29yazIgd2ViIGFwcHMgd291bGQgdGh1 cyBqdXN0IHVzZSBTcHJpbmcncyB0eXBpY2FsICJXRUItSU5GL2FwcGxpY2F0aW9uQ29udGV4dC54 bWwiIGZvciBkZWZpbmluZyBtaWRkbGUgdGllciByZXNvdXJjZXMgYW5kIGJ1c2luZXNzIG9iamVj dHMgcGx1cyBYV29yaydzICJ4d29yay54bWwiIGZvciBkZWZpbmluZyB1c2UtY2FzZS1kcml2ZW4g YWN0aW9ucy4gVGhlcmXCtHMgbm8gImNvbXBvbmVudHMueG1sIiBpbnZvbHZlZCwgZXhjZXB0IGlm IHRoZSB3ZWIgYXBwIHVzZXMgWFdvcmsncyBzY29wZWQgY29tcG9uZW50cyBtZWNoYW5pc20gdG9v LiBUaGF0IHdvdWxkIGtlZXAgY29uZmlndXJhdGlvbiBzaW1wbGUgYW5kIGNvbmNpc2UgZW5vdWdo IGZvciB0eXBpY2FsIG5lZWRzLg0KDQpUaGUgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgd2ls bCBhbHdheXMgYmUgYW4gYXBwbGljYXRpb24tbGV2ZWwgc2luZ2xldG9uLiBJbiBhIFdlYldvcmsy IGNvbWJvLCB0aGVyZSBhcmUgbm8gbmVzdGVkIGFwcGxpY2F0aW9uIGNvbnRleHRzIGZyb20gYSBT cHJpbmcgd2ViIE1WQyBEaXNwYXRjaGVyU2VydmxldCBpbnZvbHZlZCAtLSBXZWJXb3JrMiBzZXJ2 ZXMgYXMgd2ViIE1WQyBmcmFtZXdvcmsgdGhlbi4gTm90ZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNv bnRleHQgY2FuIGNyZWF0ZSBlaXRoZXIgc2luZ2xldG9uIGJlYW5zIG9yIG5ldyBpbnN0YW5jZXMg ZnJvbSBhIHByb3RvdHlwZSwgY29uZmlndXJhYmxlIHZpYSB0aGUgYmVhbiBkZWZpbml0aW9uLiBU aGUgZXh0ZXJuYWwgcmVmZXJlbmNlIG1lY2hhbmlzbSBhYm92ZSB3b3VsZCBub3QgbmVlZCB0byBi ZSBjb25jZXJuZWQgd2l0aCB0aGF0IGRpc3RpbmN0aW9uLCBpdCBjb3VsZCB0cmFuc3BhcmVudGx5 IHdvcmsgd2l0aCBib3RoIGtpbmRzOyBidXQgdHlwaWNhbCBtaWRkbGUgdGllciBvYmplY3RzIGFy ZSBhbG1vc3QgYWx3YXlzIHNpbmdsZXRvbnMgYW55d2F5Lg0KDQpBIG5vbi13ZWIgWFdvcmsgZGlz cGF0Y2hlciBjb3VsZCBiZSBjb25maWd1cmVkIHdpdGggYSBkaWZmZXJlbnQgU3ByaW5nIHJlc29s dmVyIGltcGxlbWVudGF0aW9uLCB1c2luZyBhIENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4 dCBpbnN0ZWFkIG9mIGEgcHJlbG9hZGVkIFhtbFdlYkFwcGxpY2F0aW9uQ29udGV4dC4gSXQgd291 bGQgbG9vayBmb3IgYW4gImFwcGxpY2F0aW9uQ29udGV4dC54bWwiIHJlc291cmNlIGluIHRoZSBy b290IG9mIHRoZSBjbGFzcyBwYXRoLg0KDQogIHB1YmxpYyBjbGFzcyBTcHJpbmdDbGFzc1BhdGhS ZWZlcmVuY2VSZXNvbHZlciBpbXBsZW1lbnRzIEV4dGVybmFsUmVmZXJlbmNlUmVzb2x2ZXIgeyAN CiAgICBwcml2YXRlIHZvaWQgQXBwbGljYXRpb25Db250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsg DQogICAgcHVibGljIFNwcmluZ0NsYXNzUGF0aFJlZmVyZW5jZVJlc29sdmVyKCkgeyANCiAgICAg IHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gbmV3IENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29u dGV4dCgiL2FwcGxpY2F0aW9uQ29udGV4dC54bWwiKTsgDQogICAgfSANCiAgICBwdWJsaWMgT2Jq ZWN0IHJlc29sdmVSZWZlcmVuY2UoU3RyaW5nIG5hbWUpIHsgDQogICAgICByZXR1cm4gdGhpcy5h cHBsaWNhdGlvbkNvbnRleHQuZ2V0QmVhbihuYW1lKTsgDQogICAgfSANCiAgfSANCg0KVGhlIHdo b2xlIGNvbmNlcHQgaXMgcHJldHR5IG9ydGhvZ29uYWwgdG8gWFdvcmsncyBleGlzdGluZyBzY29w ZWQgY29tcG9uZW50IGFwcHJvYWNoLiBGb3IgZXhhbXBsZSwgYSB3ZWJzaG9wIGNvdWxkIGxldmVy YWdlIGFuIFhXb3JrIGNvbXBvbmVudCBmb3IgYSBzZXNzaW9uLXNjb3BlZCBzaG9wcGluZyBjYXJ0 ICphbmQqIFNwcmluZy1tYW5hZ2VkIGJ1c2luZXNzIG9iamVjdHMgZm9yIGxvYWRpbmcgcHJvZHVj dCBpbmZvcm1hdGlvbiBhbmQgZm9yIHR1cm5pbmcgdGhhdCBzaG9wcGluZyBjYXJ0IGludG8gYSBw ZXJzaXN0ZW50IG9yZGVyLg0KDQpCVFcsIGFuIGFkLWhvYyBzb2x1dGlvbiBmb3IgYWNjZXNzaW5n IGEgU3ByaW5nIHJvb3Qgd2ViIGFwcGxpY2F0aW9uIGNvbnRleHQgZnJvbSBhIFdlYldvcmsgYWN0 aW9uIGNvdWxkIGJlIHRvIG1ha2UgdGhlIGFjdGlvbiBIdHRwU2VydmxldFJlcXVlc3RBd2FyZSBh bmQgZG8gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgbG9va3VwIG1hbnVhbGx5LiBUaGF0IHdvdWxk IHdvcmsgd2l0aG91dCBzcGVjaWFsIHN1cHBvcnQsIGV2ZW4gb24gV2ViV29yazEuDQoNCiAgLi4u IA0KICBTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dCA9IHJlcXVlc3QuZ2V0U2Vzc2lvbigp LmdldFNlcnZsZXRDb250ZXh0KCk7IA0KICBBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25D b250ZXh0ID0gV2ViQXBwbGljYXRpb25Db250ZXh0VXRpbHMuZ2V0V2ViQXBwbGljYXRpb25Db250 ZXh0KHNlcnZsZXRDb250ZXh0KTsgDQogIE15QnVzaW5lc3NPYmplY3QgYnVzaW5lc3NPYmplY3Qg PSAoTXlCdXNpbmVzc09iamVjdCkgYXBwbGljYXRpb25Db250ZXh0LmdldEJlYW4oIm15QnVzaW5l c3NPYmplY3QiKTsgDQogIC4uLiANCg0KT2YgY291cnNlLCBhbiBleHRlcm5hbCByZWZlcmVuY2Ug cmVzb2x2ZXIgc29sdXRpb24gd291bGQgYmUgd2F5IHByZWZlcmFibGUgYmVjYXVzZSBpdCBhbGxv d3MgdGhlIGFjdGlvbnMgdG8gcmVjZWl2ZSByZWZlcmVuY2VzIHRvIGJ1c2luZXNzIG9iamVjdHMg dmlhIHNpbXBsZSBiZWFuIHByb3BlcnR5IHNldHRlcnMgb2YgdGhlIGJ1c2luZXNzIG9iamVjdCB0 eXBlOyBubyBjdXN0b20gbG9va3VwIGNvZGUgYW5kIGVzcGVjaWFsbHkgbm8gd2ViIGRlcGVuZGVu Y2llcyBpbiB0aGUgYWN0aW9ucyBuZWNlc3NhcnkuDQoNCldoYXQgZG8geW91IHRoaW5rPyBEbyB5 b3Ugc2VlIGEgZGlmZmVyZW50IG9wdGlvbiBmb3IgaW50ZWdyYXRpb24/IEknbSBub3Qga2VlbiBv biBsZXR0aW5nIFNwcmluZyB0b3VjaCB0aGUgWFdvcmsgYWN0aW9uIGluc3RhbmNlcyBkaXJlY3Rs eTsgdGhhdCB3b3VsZCBpbnZvbHZlIGRvdWJsZSBkZWZpbml0aW9ucyBpbiBib3RoIHh3b3JrLnht bCBhbmQgYXBwbGljYXRpb25Db250ZXh0LnhtbC4gY29tcG9uZW50cy54bWwgaXNuJ3QgYSBnb29k IGludGVncmF0aW9uIHBvaW50IGVpdGhlciwgYXMgaXQgd291bGQgaW52b2x2ZSBkb3VibGUgZGVm aW5pdGlvbnMgdG9vLiBJIGJlbGlldmUgdGhhdCBteSBwcm9wb3NhbCBpcyBzdHJhaWdodGZvcndh cmQgYW5kIGludHVpdGl2ZSwgYXMgaXQgYXBwbGllcyBhIHNpbWlsYXIgbm90YXRpb24gZm9yIGJv dGggYWN0aW9uIHBhcmFtcyBhbmQgZXh0ZXJuYWwgcmVmZXJlbmNlcy4gT2YgY291cnNlLCBpdCBp bnRyb2R1Y2VzIGEgbmV3IGNvbmNlcHQgdG8geHdvcmsueG1sIC0tIGJ1dCBJIGJlbGlldmUgYSBw b3dlcmZ1bCBhbmQgZ2VuZXJpYyBvbmUuDQoNCkp1ZXJnZW4gDQoNCg0KLS0tLS1VcnNwcsO8bmds aWNoZSBOYWNocmljaHQtLS0tLSANClZvbjogTWF0dGhldyBFLiBQb3J0ZXIgW21haWx0bzptYXR0 aGV3QG1ldGlzc2lhbi5jb21dIA0KR2VzZW5kZXQ6IEZyIDI0LjEwLjIwMDMgMjI6MjMgDQpBbjog asO8cmdlbiBow7ZsbGVyIFt3ZXJrM0FUXSANCkNjOiANCkJldHJlZmY6IFJlOiBYV29yay9TcHJp bmcgaW50ZWdyYXRpb24gDQoNCg0KSsO8ZXJnZW46IA0KICAgSSBtYXkgc3RhcnQgd29ya2luZyBv biB0aGUgc3ByaW5nLXd3MiBpbnRlZ3JhdGlvbiB0aGlzIHdlZWtlbmQgaWYgSSANCmdldCBzb21l IHRpbWUuICBJIGhhdmUgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhpcyBwcm9wb3NhbCBhbmQgaG93 IHRoZSANCnN5c3RlbSB3aWxsIHdvcmsuICBQbGVhc2UgZm9yZ2l2ZSBtZSBpZiB0aGVzZSBxdWVz dGlvbnMgc2VlbSANCnJ1ZGltZW50YXJ5LCBhcyBJIGFtIHN0aWxsIGxlYXJuaW5nIFNwcmluZy4g DQogICBBcmUgeW91IHRhbGtpbmcgYWJvdXQgYWRkaW5nIHRoZSAiZXh0ZXJuYWwtcmVmIiB0YWcg dG8gDQpjb21wb25lbnRzLnhtbD8gIEluIHRoaXMgY2FzZSwgSSB3b3VsZCBhc3N1bWUgaXQgd291 bGQgcmVwbGFjZSB0aGUgMyANCnNjb3BlIGNvbmNlcHQgaW4gWFcgd2l0aCBTcHJpbmcncyBhcHBs aWNhdGlvbiBhbmQgV2ViLU1WQyBzY29wZS4gIE9yIGFtIA0KSSBqdXN0IHdyb25nPyAgSG93IHdv dWxkIEFjdGlvbnMgYmUgd2lyZWQgaW4/IA0KDQoNCkNoZWVycywgDQogICBtYXR0aGV3IA0KDQpP biBUaHVyc2RheSwgT2N0b2JlciA5LCAyMDAzLCBhdCAxMjoxNiBQTSwgasO8cmdlbiBow7ZsbGVy IFt3ZXJrM0FUXSANCndyb3RlOiANCg0KPiBNYXR0aGV3LCBNaWtlLCANCj4gDQo+IEhtbW0sIEkn bSBub3QgYWx3YXlzIHRvbyBrZWVuIGluIHRlcm1zIG9mIHBlcmNlcHRpb24uLi4gYW55d2F5OiBI aSANCj4gTWF0dGhldywgSSBkb24ndCB0aGluayBJIGNhbiB0byB0ZWxsIHlvdSBhbnl0aGluZyBh Ym91dCBDb25kdWN0b3IgdGhhdCANCj4geW91IHdvdWxkbid0IGFscmVhZHkga25vdyA7LSkgDQo+ IA0KPiBJbiB0ZXJtcyBvZiBlZmZvcnQsIEkgZXhwZWN0IG15IFhXb3JrIHByb3Bvc2FsIHRvIGJl IHByZXR0eSANCj4gc3RyYWlnaHRmb3J3YXJkIHRvIGltcGxlbWVudDogSXQncyBiYXNpY2FsbHkg anVzdCBhYm91dCBpbnRyb2R1Y2luZyANCj4gdGhlICJleHRlcm5hbC1yZWYiIHRhZyBhbmQgYW4g IkV4dGVybmFsUmVmZXJlbmNlUmVzb2x2ZXIiIGludGVyZmFjZSANCj4gdGhhdCB0aGUgdGFnIGRl bGVnYXRlcyB0by4gQSBTcHJpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBpbnRlcmZhY2UgDQo+ IHNob3VsZCBiZSBlYXN5IHRvIGRvIHRvbzogTG9hZCB0aGUgYXBwbGljYXRpb24gY29udGV4dCBp biBzb21lIGluaXQgDQo+IG1ldGhvZCwgYW5kIHJlc29sdmUgdGhlIHJlZmVyZW5jZXMgYXMgYmVh biBuYW1lcyBpbiB0aGUgY29udGV4dC4gDQo+IA0KPiBUaGUgb25seSBpc3N1ZSBpcyB3aGVyZSB0 byBsb2FkIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGZyb206IElmIHRoaXMgDQo+IHNob3VsZCBi ZSBwb3NzaWJsZSBmcm9tIHRoZSBXRUItSU5GIGRpcmVjdG9yeSwgd2Ugd291bGQgbmVlZCBhIA0K PiByZWZlcmVuY2UgdG8gdGhlIFNlcnZsZXRDb250ZXh0IGluIHRoZSBTcHJpbmdSZWZlcmVuY2VS ZXNvbHZlciANCj4gaW1wbGVtZW50YXRpb24uIEVsc2UsIHdlIGNvdWxkIHVzZSBDbGFzc1BhdGhY bWxBcHBsaWNhdGlvbkNvbnRleHQgdG8gDQo+IGxvYWQgdGhlIFhNTCBmaWxlIGZyb20gdGhlIGNs YXNzIHBhdGg6IFRoaXMgd291bGQgbm90IGludm9sdmUgYW55dGhpbmcgDQo+IHNwZWNpYWwgYXQg YWxsLiANCj4gDQo+IFNvIGluIGZhY3QsIHRoZSBpbnRlcmZhY2Ugd291bGQgbmVlZCBhbiBpbml0 IG1ldGhvZDogDQo+IA0KPiAgIHB1YmxpYyBpbnRlcmZhY2UgRXh0ZXJuYWxSZWZlcmVuY2VSZXNv bHZlciB7IA0KPiAgICAgdm9pZCBpbml0KCk7IA0KPiAgICAgT2JqZWN0IHJlc29sdmVSZWZlcmVu Y2UoU3RyaW5nIG5hbWUpOyANCj4gICB9IA0KPiANCj4gQSBTcHJpbmcgaW1wbGVtZW50YXRpb24g Y291bGQgbG9vayBhcyBmb2xsb3dzOiANCj4gDQo+ICAgcHVibGljIGNsYXNzIFNwcmluZ1JlZmVy ZW5jZVJlc29sdmVyIGltcGxlbWVudHMgDQo+IEV4dGVybmFsUmVmZXJlbmNlUmVzb2x2ZXIgeyAN Cj4gICAgIHByaXZhdGUgQXBwbGljYXRpb25Db250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsgDQo+ ICAgICBwdWJsaWMgdm9pZCBpbml0KCkgeyANCj4gICAgICAgYXBwbGljYXRpb25Db250ZXh0ID0g bmV3IA0KPiBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQoIi9zcHJpbmctY29udGV4dC54 bWwiKTsgDQo+ICAgICB9IA0KPiAgICAgcHVibGljIE9iamVjdCByZXNvbHZlUmVmZXJlbmNlKFN0 cmluZyBuYW1lKSB7IA0KPiAgICAgICByZXR1cm4gYXBwbGljYXRpb25Db250ZXh0LmdldEJlYW4o bmFtZSk7IA0KPiAgICAgfSANCj4gICB9IA0KPiANCj4gSXQgZG9lc24ndCBuZWVkIHRvIGJlIG1v cmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzLiBXZSB3b3VsZCBqdXN0IG5lZWQgDQo+IHRvIGludHJv ZHVjZSBzdWNoIGV4dGVybmFsIHJlZmVyZW5jZSBob29rcyBpbiBYV29yay4gSSBkbyBub3QgY29u c2lkZXIgDQo+IGFuICJleHRlcm5hbC1yZWYiIHRhZyBhcyBtdWNoIGV4dHJhIFhNTDsgYW5kIGl0 J3MgZWFzeSB0byBzcGVjaWZ5IA0KPiByZWZlcmVuY2VzIHRvIHNwZWNpZmljIGJlYW4gaW5zdGFu Y2VzIHdpdGggaXQuIFdoYXQgZG8geW91IHRoaW5rPyANCj4gDQo+IEp1ZXJnZW4gDQo+IA0KPiAN Cj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gDQo+IEZyb206IGrDvHJnZW4gaMO2bGxlciBb d2VyazNBVF0gDQo+IFNlbnQ6IFRodXJzZGF5LCBPY3RvYmVyIDA5LCAyMDAzIDY6MzMgUE0gDQo+ IFRvOiBNYXR0aGV3IEUuIFBvcnRlciANCj4gQ2M6IHNwcmluZ2ZyYW1ld29yay11c2VyQGxpc3Rz LnNvdXJjZWZvcmdlLm5ldDsgDQo+IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJAbGlzdHMuc291 cmNlZm9yZ2UubmV0IA0KPiBTdWJqZWN0OiBbU3ByaW5nZnJhbWV3b3JrLWRldmVsb3Blcl0gUkU6 IFtTcHJpbmdmcmFtZXdvcmstdXNlcl0gDQo+IEludHJvZHVjdGlvbiBhbmQgSGliZXJuYXRlLVNw cmluZyBxdWVyaWVzIA0KPiANCj4gDQo+IE5vdCB5ZXQuIE1heWJlIE1pa2UgY2FuIGNvbW1lbnQg b24gYSB0aW1lZnJhbWUsIGFsdGhvdWdoIEphc29uIG1pZ2h0IA0KPiBiZSB0aGUgb25lIHRoYXQg YWN0dWFsbHkgd29ya3Mgb24gaXQuIE5vdGUgdGhhdCB0aGlzIHBsYW4gaXMgbm90IGZpeGVkIA0K PiBhdCBhbGw7IGN1cnJlbnRseSwgWFdvcmsgaGFzIGl0cyBvd24gZW5hYmxlLWludGVyZmFjZS1j ZW50cmljIHNpbXBsZSANCj4gSW9DIHN1cHBvcnQuIEknbSBqdXN0ICJjb25zdWx0aW5nIiBvbiB0 aGlzIGlzc3VlOyBNaWtlLCBKYXNvbiwgYW5kIHRoZSANCj4gb3RoZXIgWFdvcmsgZ3V5cyB3aWxs IGhhdmUgdG8gZGVjaWRlIG9uIHdoYXQgdG8gYWRvcHQgaW4gdGhlIGVuZC4gDQo+IA0KPiBKdWVy Z2VuIA0KPiANCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tIA0KPiBGcm9tOiBNYXR0 aGV3IEUuIFBvcnRlciBbbWFpbHRvOm1hdHRoZXdAbWV0aXNzaWFuLmNvbV0gDQo+IFNlbnQ6IFRo dXJzZGF5LCBPY3RvYmVyIDA5LCAyMDAzIDY6MzEgUE0gDQo+IFRvOiBqw7xyZ2VuIGjDtmxsZXIg W3dlcmszQVRdIA0KPiBDYzogc3ByaW5nZnJhbWV3b3JrLXVzZXJAbGlzdHMuc291cmNlZm9yZ2Uu bmV0OyANCj4gc3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQg DQo+IFN1YmplY3Q6IFJlOiBbU3ByaW5nZnJhbWV3b3JrLXVzZXJdIEludHJvZHVjdGlvbiBhbmQg SGliZXJuYXRlLVNwcmluZyANCj4gcXVlcmllcyANCj4gDQo+IA0KPiBIYXMgYW55IHdvcmsgKGku ZS4gY29kZSkgYmVlbiBkb25lIG9uIHRoaXM/IA0KPiANCj4gDQo+IENoZWVycywgDQo+ICAgIG1h dHRoZXcgDQo+IA0KPiBPbiBUaHVyc2RheSwgT2N0b2JlciA5LCAyMDAzLCBhdCAxMToxNSBBTSwg asO8cmdlbiBow7ZsbGVyIFt3ZXJrM0FUXSANCj4gd3JvdGU6IA0KPiANCj4+IE1hdHRoZXcsIGV2 ZXJ5Ym9keSwgDQo+PiANCj4+IE15IFhXb3JrL1NwcmluZyBpbnRlZ3JhdGlvbiBwcm9wb3NhbCBp cyBubyBzZWNyZXQgLS0gaGVyZSBpdCBpcywgY3V0IA0KPj4gZnJvbSBhIHJlY2VudCBtYWlsIHRv IEphc29uIGFuZCBNaWtlLiBXZSd2ZSBiZWVuIGRpc2N1c3NpbmcgSW9DIA0KPj4gb3B0aW9ucyBm b3IgWFdvcmsvQ29uZHVjdG9yIGZvciBxdWl0ZSBhIHdoaWxlLCBtYWlubHkgaW4gdGVybXMgb2Yg DQo+PiBQaWNvQ29udGFpbmVyIHZzIFNwcmluZy4gDQo+PiANCj4+IDxxdW90ZT4gDQo+PiANCj4+ IEFzIGZhciBhcyBJIHNlZSwgdGhlIFhXb3JrIGNvbmZpZyBmaWxlIHN1cHBvcnRzIHNldHRpbmcg YmVhbiANCj4+IHByb3BlcnRpZXMgYXMgcGFyYW1ldGVycyBvbiBhY3Rpb25zIGxpa2UgdGhpczog DQo+PiANCj4+ICAgPGFjdGlvbiBuYW1lPSJCYXIiIGNsYXNzPSJjb20ub3BlbnN5bXBob255Lnh3 b3JrLlNpbXBsZUFjdGlvbiI+IA0KPj4gICAgIDxwYXJhbSBuYW1lPSJmb28iPjE3PC9wYXJhbT4g DQo+PiAgICAgPHBhcmFtIG5hbWU9ImJhciI+MjM8L3BhcmFtPiANCj4+ICAgPC9hY3Rpb24+IA0K Pj4gDQo+PiBUaGlzIGlzIG9idmlvdXNseSBwcmV0dHkgc2ltaWxhciB0byBhIFNwcmluZyBiZWFu IGRlZmluaXRpb24sIGp1c3QgDQo+PiBzcGVjaWZpYyBmb3IgYSBXZWJXb3JrIGFjdGlvbi4gQSBz aWduaWZpY2FudCBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIA0KPj4gU3ByaW5nIHByb3BlcnR5IHRh ZyBjYW4gdGFnIGVpdGhlciBhIHZhbHVlIHRhZyBvciBhIHJlZiB0YWcgd2l0aGluLCANCj4+IGku ZS4gZWl0aGVyIHNwZWNpZnkgYSBwYXJhbWV0ZXIgdmFsdWUgb3IgYcK0ZGVwZW5kZW5jeSBvbiBh bm90aGVyIGJlYW4uIA0KPj4gDQo+PiBDdXJyZW50bHksIEkgc2VlIHRoZSBlYXNpZXN0IHdheSBv ZiBhY2Nlc3NpbmcgYSBTcHJpbmcgY29udGV4dCBmcm9tIA0KPj4gWFdvcmsgdmlhIGEgdGFnIHRo YXQgcmVzb2x2ZXMgYW4gZXh0ZXJuYWwgY29tcG9uZW50IHJlZmVyZW5jZSwgYSBsYTogDQo+PiAN Cj4+ICAgPGFjdGlvbiBuYW1lPSJCYXIiIGNsYXNzPSJjb20ub3BlbnN5bXBob255Lnh3b3JrLlNp bXBsZUFjdGlvbiI+IA0KPj4gICAgIDxwYXJhbSBuYW1lPSJmb28iPjE3PC9wYXJhbT4gDQo+PiAg ICAgPGV4dGVybmFsLXJlZiBuYW1lPSJiYXIiPm15RGF0YVNvdXJjZTwvZXh0ZXJuYWwtcmVmPiAN Cj4+ICAgPC9hY3Rpb24+IA0KPj4gDQo+PiBYV29yayBjb3VsZCBmZXRjaCB0aGUgU3ByaW5nIGNv bnRleHQgdGhlbiwgbG9vayB1cCB0aGUgYmVhbiBuYW1lZCANCj4+ICJteURhdGFTb3VyY2UiLCBh bmQgc2V0IHRoZSByZWZlcmVuY2UgaW50byB0aGUgImJhciIgYmVhbiBwcm9wZXJ0eSBvZiANCj4+ IHRoZSAiQmFyIiBhY3Rpb24uIFRoaXMgd291bGQgYmUgaW50dWl0aXZlLCBhcyBpdCB3b3JrcyBh bmFsb2dvdXNseSB0byANCj4+IHNldHRpbmcgYSBwYXJhbWV0ZXIgdmFsdWUsIGFuZCBmbGV4aWJs ZSwgYXMgaXQgYWxsb3dzIHRvIHJlZmVyZW5jZSBhbnkgDQo+PiBzcGVjaWZpYyBpbnN0YW5jZS4g RWZmZWN0aXZlbHksIHlvdSB3b3VsZCBiZSBhY2Nlc3NpbmcgYmVhbnMgaW4gYSANCj4+IFNwcmlu ZyBtaWRkbGUgdGllciBjb250ZXh0IHJhdGhlciB0aGFuIGxldHRpbmcgU3ByaW5nIHRvdWNoIHlv dXIgDQo+PiBhY3Rpb24gaW5zdGFuY2VzIC0gYnV0IHRoYXQncyBub3QgYSBkaXNhZHZhbnRhZ2Us IHJhdGhlciBhIGNsZWFuIA0KPj4gc2VwYXJhdGlvbiBvZiByZXNwb25zaWJpbGl0aWVzLiANCj4+ IA0KPj4gT2YgY291cnNlLCB0aGUgU3ByaW5nIHN1cHBvcnQgZm9yIHN1Y2ggZXh0ZXJuYWwgcmVm ZXJlbmNlcyBjYW4gYmUgDQo+PiBwbHVnZ2FibGUgaW4gWFdvcmssIHBvdGVudGlhbGx5IHJlcGxh Y2luZyB0aGUgY3VycmVudCBDb21wb25lbnRNYW5hZ2VyIA0KPj4gbWVjaGFuaXNtIHdpdGggaXRz IGVuYWJsZXIgaW50ZXJmYWNlcy4gQW55IHN1Y2ggcmVzb2x2ZXIgZm9yIGV4dGVybmFsIA0KPj4g cmVmZXJlbmNlcyB3b3VsZCBzaW1wbHkgbmVlZCB0byByZXR1cm4gYW4gb2JqZWN0IGZvciB0aGUg Z2l2ZW4gDQo+PiBzeW1ib2xpYyBuYW1lLiBUaGUgaW50ZXJmYWNlIGNvdWxkIGxvb2sgbGlrZSB0 aGlzOiANCj4+IA0KPj4gICBwdWJsaWMgaW50ZXJmYWNlIEV4dGVybmFsUmVmZXJlbmNlUmVzb2x2 ZXIgeyANCj4+ICAgICBPYmplY3QgcmVzb2x2ZVJlZmVyZW5jZShTdHJpbmcgbmFtZSk7IA0KPj4g ICB9IA0KPj4gDQo+PiBBIFNwcmluZyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBncmFiIGEgcmVmZXJl bmNlIHRvIHRoZSBTcHJpbmcgDQo+PiBhcHBsaWNhdGlvbiBjb250ZXh0IGFuZCBjYWxsIGdldEJl YW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gVGhlIA0KPj4gYXBwbGljYXRpb24gY29udGV4dCBpdHNl bGYgY291bGQgZ2V0IGluaXRpYWxpemVkIG9uIFhXb3JrIHN0YXJ0dXAsIA0KPj4gaW5pdGlhbGl6 aW5nIGl0cyBzaW5nbGV0b25zIHVwZnJvbnQuIEkgY29uc2lkZXIgc3VjaCBhbiBYV29yay9TcHJp bmcgDQo+PiBpbnRlZ3JhdGlvbiBhcyBwcmV0dHkgc2ltcGxlIGJ1dCB2ZXJ5IHBvd2VyZnVsOiBu byBlbmFibGVyIGludGVyZmFjZXMsIA0KPj4ganVzdCBiZWFuIHByb3BlcnRpZXMgd2l0aCBjb21w b25lbnQgdHlwZXMsIGFuZCBhbiBleHRlcm5hbC1yZWYgdGFnIGluIA0KPj4gYWRkaXRpb24gdG8g dGhlIHBhcmFtIHRhZy4gDQo+PiANCj4+IDwvcXVvdGU+IA0KPj4gDQo+PiBKdWVyZ2VuIA0KPj4g DQo+PiANCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tIA0KPj4gRnJvbTogTWF0dGhldyBF LiBQb3J0ZXIgW21haWx0bzptYXR0aGV3QG1ldGlzc2lhbi5jb21dIA0KPj4gU2VudDogVGh1cnNk YXksIE9jdG9iZXIgMDksIDIwMDMgNDoxNiBQTSANCj4+IFRvOiBqw7xyZ2VuIGjDtmxsZXIgW3dl cmszQVRdIA0KPj4gU3ViamVjdDogUmU6IFtTcHJpbmdmcmFtZXdvcmstdXNlcl0gSW50cm9kdWN0 aW9uIGFuZCBIaWJlcm5hdGUtU3ByaW5nIA0KPj4gcXVlcmllcyANCj4+IA0KPj4gDQo+Pj4gDQo+ Pj4gVGhyb3dpbmcgaW4gU3ByaW5nIGFzIG1pZGRsZSB0aWVyIGdsdWUgaXMgYSBnb29kIGlkZWEs IG9mIGNvdXJzZSA6LSkgDQo+Pj4gSGF2ZSB5b3UgYWxyZWFkeSB0aG91Z2h0IGFib3V0IG15IHBy b3Bvc2FsIHJlZ2FyZGluZyBYV29yay9TcHJpbmcgDQo+Pj4gaW50ZWdyYXRpb24gZnJvbSBzb21l IGRheXMgYWdvPyBGaW5hbGx5LCB3ZSdyZSBvZiBjb3Vyc2Ugb3BlbiBmb3IgYW55IA0KPj4+IHN1 Z2dlc3Rpb25zIGFuZCBlbmhhbmNlbWVudCByZXF1ZXN0cyBvbiB0aGUgU3ByaW5nIHNpZGUgb2Yg dGhpbmdzISANCj4+PiANCj4+IA0KPj4gSSB0aGlzIHByb3Bvc2FsIGluIHRoZSBwdWJsaWMgc3Bh Y2UuICBJIHdvdWxkIGFsc28gbGlrZSB0byBzZWUgDQo+PiBYVy9XVzItU3ByaW5nIGludGVncmF0 aW9uIGluIHRoZSBuZWFyIHRlcm0gZnV0dXJlLiANCj4+IA0KPj4gDQo+PiBDaGVlcnMsIA0KPj4g ICAgbWF0dGhldyANCj4+IA0KPiANCj4gDQo+IA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KPiBUaGlzIFNGLm5ldCBlbWFpbCBpcyBz cG9uc29yZWQgYnk6IFNGLm5ldCBHaXZlYmFjayBQcm9ncmFtLiANCj4gU291cmNlRm9yZ2UubmV0 IGhvc3RzIG92ZXIgNzAsMDAwIE9wZW4gU291cmNlIFByb2plY3RzLiANCj4gU2VlIHRoZSBwZW9w bGUgd2hvIGhhdmUgSEVMUEVEIFVTIHByb3ZpZGUgYmV0dGVyIHNlcnZpY2VzOiANCj4gQ2xpY2sg aGVyZTogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zdXBwb3J0ZXJzLnBocCANCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gDQo+IFNwcmluZ2ZyYW1ld29y ay1kZXZlbG9wZXIgbWFpbGluZyBsaXN0IA0KPiBTcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyQGxp c3RzLnNvdXJjZWZvcmdlLm5ldCANCj4gaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlz dHMvbGlzdGluZm8vc3ByaW5nZnJhbWV3b3JrLWRldmVsb3BlciANCg0K |