JSBDb250cmlidXRpbmcgYSBOZXcgRmVhdHVyZSBvciBCdWcgRml4Clx2c3BhY2V7LTAuNWlufQoKe1xzY3JpcHRzaXplIExhc3QgbW9kaWZpZWQgQXByaWwgMjgsIDIwMTB9CgolXGJlZ2lue2xpc3R9eyRcYmlnY2lyYyR9e30KXGJlZ2lue2VudW1lcmF0ZX0KClxpdGVtIFJ1biBQaG90cmFuJ3MgYXV0b21hdGVkIHRlc3Qgc3VpdGUuICBBbGwgdGVzdHMgbXVzdCBwYXNzLgoKXGl0ZW0gSWYgeW91IGFyZSBjb250cmlidXRpbmcgYSByZWZhY3RvcmluZywgcHJvZ3JhbSBhbmFseXNpcywgb3Igc2ltaWxhcgogICAgICBjb21wbGV4IGZlYXR1cmUsIHBsZWFzZSBpbmNsdWRlIEpVbml0IHRlc3RzIGluIHlvdXIgY29udHJpYnV0aW9uLgogICAgICBUaGUgcGFyc2VyIGFuZCBBU1QgaW5ldml0YWJseSBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgdGhpcyBpcyBob3cgd2Ugd2lsbAogICAgICBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYSBjaGFuZ2UgaGFzIGJyb2tlbiB5b3VyIGNvbnRyaWJ1dGlvbi4KClxpdGVtIE1ha2Ugc3VyZSB5b3UgZGlkIG5vdCBjb3B5IGNvZGUgZnJvbSBhbnl3aGVyZSBleGNlcHQgUGhvdHJhbiBhbmQgQ0RULgogICAgICBJZiB5b3UgY29waWVkIGNvZGUgZnJvbSBib29rcywgbWFpbGluZyBsaXN0cywgV2ViIHNpdGVzLCBhbnkgb3RoZXIgb3BlbgogICAgICBzb3VyY2UgcHJvamVjdHMsIG90aGVyIHByb2plY3RzIGF0IHlvdXIgY29tcGFueSwgZXRjLiwgXHRleHRiZntzdG9wfQogICAgICBhbmQgYXNrIGZvciBmdXJ0aGVyIGluc3RydWN0aW9ucy4gIChJZiB5b3UgZG8gbm90IGtub3cgYSBQaG90cmFuCiAgICAgIGNvbW1pdHRlciBwZXJzb25hbGx5LCBhc2sgb24gdGhlIHB0cC1kZXYgbWFpbGluZyBsaXN0LikgIEl0IG1heQogICAgICBvciBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIGNvbnRyaWJ1dGUgeW91ciBjb2RlLgoKXGl0ZW0gRGV0ZXJtaW5lIHdobyBvd25zIHRoZSBjb3B5cmlnaHQgdG8geW91ciBjb2RlLiAgR2VuZXJhbGx5LAogICAgICBpZiB5b3UgYXJlIGFuIGVtcGxveWVlIGFuZCB5b3Ugd2VyZSBwYWlkIHRvIHdyaXRlIHRoZSBjb2RlLCBpdCBpcwogICAgICB0aGUgcHJvcGVydHkgb2YgeW91ciBlbXBsb3llci4gIElmIHlvdSBhcmUgYSBzdHVkZW50LCB0aGUgY29kZSBtYXkKICAgICAgYmUgeW91ciBwZXJzb25hbCBwcm9wZXJ0eSwgb3IgaXQgbWF5IGJlIHRoZSBwcm9wZXJ0eSBvZiB5b3VyCiAgICAgIHVuaXZlcnNpdHksIGRlcGVuZGluZyBvbiBzZXZlcmFsIGZhY3RvcnMuICBBbHdheXMgY2hlY2sgd2l0aCB5b3VyCiAgICAgIGVtcGxveWVyIG9yIHVuaXZlcnNpdHkgdG8gZGV0ZXJtaW5lIHdobyB0aGUgY29weXJpZ2h0IG93bmVyIGlzLgogICAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGF0IHRoZSBjb2RlIHdhcyB3cml0dGVuIGJ5IEpvaG4KICAgICAgRG9lIGFzIGFuIGVtcGxveWVlIG9mIHRoZSBYWVogQ29ycG9yYXRpb24uCgpcaXRlbSBZb3VyIGNvZGUgbXVzdCBiZSBjb250cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljCiAgICAgIExpY2Vuc2UgKEVQTCkuICBJZiB0aGUgY29weXJpZ2h0IGlzIG93bmVkIGJ5IHlvdXIgZW1wbG95ZXIgb3IKICAgICAgdW5pdmVyc2l0eSwgbWFrZSBzdXJlIHRoZXkgd2lsbCBwZXJtaXQgeW91IHRvIGNvbnRyaWJ1dGUgeW91ciBjb2RlCiAgICAgIHVuZGVyIHRoZSBFUEwuICAoVGhleSB3aWxsIHByb2JhYmx5IGJlIGFza2VkIGZvciB2ZXJpZmljYXRpb24gYnkKICAgICAgdGhlIEVjbGlwc2UgTGVnYWwgdGVhbS4pCgpcaXRlbSBFbnN1cmUgdGhhdCBcdGV4dGl0e2V2ZXJ5fSBKYXZhIGZpbGUgeW91IGNyZWF0ZWQgb3IgbW9kaWZpZWQgaGFzIGFuCmFjY3VyYXRlIGNvcHlyaWdodCBoZWFkZXIuCgogICAgXGJlZ2lue2l0ZW1pemV9CgogICAgXGl0ZW0gSWYgeW91IGNyZWF0ZWQgdGhlIGZpbGUgZnJvbSBzY3JhdGNoIChpLmUuLCBpdCBpcyBub3QgYSBtb2RpZmljYXRpb24KICAgICAgICAgIG9mIHNvbWVvbmUgZWxzZSdzIGNvZGUpLCB0aGUgY29weXJpZ2h0IGhlYWRlciBtdXN0IG5hbWUgdGhlIGNvcHlyaWdodAogICAgICAgICAgb3duZXIgYW5kIGxpc3QgdGhlbSBhcyB0aGUgaW5pdGlhbCBjb250cmlidXRvci4gIEZvciBleGFtcGxlOiBcXAogICAgICAgICAgCiAgICAgICAgICB7XHNjcmlwdHNpemUKICAgICAgICAgIFxiZWdpbnt2ZXJiYXRpbX0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDEwIFhZWiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAogKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKgogKiBDb250cmlidXRvcnM6CiAqICAgIEpvaG4gRG9lIChYWVogQ29ycG9yYXRpb24pIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAgICAgXGVuZHt2ZXJiYXRpbX0KICAgICAgICAgIH0KCiAgICBcaXRlbSBJZiB5b3UgbW9kaWZpZWQgYW4gZXhpc3RpbmcgZmlsZSBmcm9tIFBob3RyYW4gb3IgQ0RULCBpdCBtdXN0IHJldGFpbiB0aGUKICAgICAgICAgIFx0ZXh0aXR7b3JpZ2luYWx9IGNvcHlyaWdodCBub3RpY2UsIGJ1dCB5b3Ugc2hvdWxkIGFkZCB5b3Vyc2VsZiBhcyBhCiAgICAgICAgICBjb250cmlidXRvciBhdCB0aGUgYm90dG9tLiAgRm9yIGV4YW1wbGU6IFxcCiAgICAgICAgICAKICAgICAgICAgIHtcc2NyaXB0c2l6ZQogICAgICAgICAgXGJlZ2lue3ZlcmJhdGltfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgIEpvaG4gRG9lIChYWVogQ29ycG9yYXRpb24pIC0gUGhvdHJhbiBtb2RpZmljYXRpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAgICAgXGVuZHt2ZXJiYXRpbX0KICAgICAgICAgIH0KCiAgICBcZW5ke2l0ZW1pemV9CgpcaXRlbSBFdmVyeSBKYXZhIGNsYXNzIHNob3VsZCBoYXZlIGEgSmF2YURvYyBjb21tZW50IHdpdGggYSBicmllZiBkZXNjcmlwdGlvbgogICAgICBvZiB0aGUgY2xhc3MgYW5kIGFuIFx0ZXh0dHR7QGF1dGhvcn0gdGFnIHdpdGggeW91ciBmdWxsIG5hbWUuICBBZ2FpbiwKICAgICAgaWYgeW91IG1vZGlmaWVkIGFuIGV4aXN0aW5nIGNsYXNzLCBhZGQgYW4gXHRleHR0dHtAYXV0aG9yfSB0YWcgd2l0aCB5b3VyCiAgICAgIG5hbWUuICBGb3IgZXhhbXBsZToKICAgICAgCiAgICAgIHtcc2NyaXB0c2l6ZQogICAgICBcYmVnaW57dmVyYmF0aW19Ci8qKgogKiBSZWZhY3RvcmluZyB3aGljaCBjcmVhdGVzIGdldHRlciBhbmQgc2V0dGVyIHN1YnByb2dyYW1zIGZvciBhIG1vZHVsZSB2YXJpYWJsZSBhbmQgcmVwbGFjZXMKICogdmFyaWFibGUgYWNjZXNzZXMgd2l0aCBjYWxscyB0byB0aG9zZSBzdWJwcm9ncmFtcy4KICogPHA+CiAqIFRoaXMgcmVmYWN0b3JpbmcgYWNjZXB0cyBhIG1vZHVsZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgbWFrZXMgdGhhdCBkZWNsYXJhdGlvbiBQUklWQVRFLCBhZGRzCiAqIGdldHRlciBhbmQgc2V0dGVyIHByb2NlZHVyZXMgdG8gdGhlIG1vZHVsZSwgYW5kIHRoZW4gcmVwbGFjZXMgYWNjZXNzZXMgdG8gdGhlIHZhcmlhYmxlIG91dHNpZGUKICogdGhlIG1vZHVsZSB3aXRoIGNhbGxzIHRvIHRoZSBnZXR0ZXIgYW5kIHNldHRlciByb3V0aW5lcy4KICoKICogQGF1dGhvciBUaW0gWXV2YXNoZXYKICogQGF1dGhvciBKZWZmIE92ZXJiZXkKICovCnB1YmxpYyBjbGFzcyBFbmNhcHN1bGF0ZVZhcmlhYmxlUmVmYWN0b3JpbmcKeyAuLi4KICAgICAgXGVuZHt2ZXJiYXRpbX0KICAgICAgfQoKXGl0ZW0gQ3JlYXRlIGEgbmV3IGJ1ZyBpbiBCdWd6aWxsYSBvbiBvbmUgb2YgdGhlIGBgUGhvdHJhbicnIGNvbXBvbmVudHMuICBZb3UKY2FuIGRvIHRoaXMgYnkgY2xpY2tpbmcgdGhlIGBgUmVwb3J0IGEgQnVnJycgbGluayBvbiB0aGUgUGhvdHJhbiBob21lIHBhZ2UuCklmIHlvdXIgY29kZSBhZGRzIGEgbmV3IGZlYXR1cmUgKHJhdGhlciB0aGFuIGZpeGluZyBhIGJ1ZyksIHNldCB0aGUgc2V2ZXJpdHkKb2YgdGhlIGJ1ZyB0byBgYEVuaGFuY2VtZW50LicnCgpcaXRlbSBDcmVhdGUgYSBwYXRjaCB3aXRoIHRoZSBmaWxlcyB0aGF0IHlvdSBjaGFuZ2VkLiDKKEhpZ2hsaWdodCBhbGwgb2YKdGhlIHByb2plY3RzIHlvdSBjaGFuZ2VkIGluIHRoZSBQYWNrYWdlIEV4cGxvcmVyLCByaWdodC1jbGljaywgYW5kCmNob29zZSBUZWFtICQ+JCBDcmVhdGUgUGF0Y2guKSDKQXR0YWNoIHRoZSBwYXRjaCB0byB0aGUgYnVnIGluIEJ1Z3ppbGxhLgrKSWYgeW91IGhhdmUgYW55IGJpbmFyeSBmaWxlcyAoZS5nLiwgaW1hZ2VzKSwgRE8gTk9UIGluY2x1ZGUgdGhlbSBpbgp0aGUgcGF0Y2g7IGF0dGFjaCB0aGVtIHRvIEJ1Z3ppbGxhIHNlcGFyYXRlbHkuCgpcaXRlbSBBIFBob3RyYW4gY29tbWl0dGVyIHdpbGwgcmV2aWV3IHRoZSBjb2RlIGFuZCBtYXkgYXNrIHlvdSB0byBtYWtlIGNoYW5nZXMuCklmIHNvLCB5b3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBwYXRjaCwgYXR0YWNoIGl0IHRvIHRoZSBidWcsIGFuZCBtYXJrIHRoZQpvbGQgcGF0Y2ggYXMgYGBvYnNvbGV0ZS4nJwoKXGl0ZW0gV2hlbiB0aGUgY29kZSByZXZpZXcgc3VjY2VlZHMsIHRoZSBQaG90cmFuIGNvbW1pdHRlciB3aWxsIG1ha2UgdGhlIGZvbGxvd2luZwpjb21tZW50IG9uIHRoZSBidWc6IFxcClwgXFwKe1xmb290bm90ZXNpemVcaXRzaGFwZQpcYmVnaW57bWluaXBhZ2V9ezUuNWlufQpQbGVhc2UgY29uZmlybSB0aGF0ClxiZWdpbntlbnVtZXJhdGV9ClxpdGVtIHlvdSB3cm90ZSAxMDBcJSBvZiB0aGUgY29kZSB3aXRob3V0IGluY29ycG9yYXRpbmcgY29udGVudCBmcm9tIGVsc2V3aGVyZSBvciByZWx5aW5nIG9uIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2Ygb3RoZXJzLApcaXRlbSB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gY29udHJpYnV0ZSB0aGUgY29kZSB0byBFY2xpcHNlLCBhbmQKXGl0ZW0geW91IGhhdmUgaW5jbHVkZWQgdGhlIEVQTCBsaWNlbnNlIGhlYWRlciBpbiBhbGwgc291cmNlIGZpbGVzPwpcZW5ke2VudW1lcmF0ZX0KXGVuZHttaW5pcGFnZX0KfSBcXApcIFxcCllvdSBjYW4gcmVwbHkgd2l0aCBzb21ldGhpbmcgYXMgc2ltcGxlIGFzIHRoZSBmb2xsb3dpbmcuIFxcClwgXFwKe1xmb290bm90ZXNpemVcaXRzaGFwZQpcYmVnaW57bWluaXBhZ2V9ezUuNWlufQpJIGNvbmZpcm0gdGhhdApcYmVnaW57ZW51bWVyYXRlfQpcaXRlbSBJIHdyb3RlIDEwMFwlIG9mIHRoZSBjb2RlIHdpdGhvdXQgaW5jb3Jwb3JhdGluZyBjb250ZW50IGZyb20gZWxzZXdoZXJlIG9yIHJlbHlpbmcgb24gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBvdGhlcnMsClxpdGVtIEkgaGF2ZSB0aGUgcmlnaHQgdG8gY29udHJpYnV0ZSB0aGUgY29kZSB0byBFY2xpcHNlLCBhbmQKXGl0ZW0gSSBoYXZlIGluY2x1ZGVkIHRoZSBFUEwgbGljZW5zZSBoZWFkZXIgaW4gYWxsIHNvdXJjZSBmaWxlcy4KXGVuZHtlbnVtZXJhdGV9ClxlbmR7bWluaXBhZ2V9Cn0gXFwKXCBcXApIb3dldmVyLCBpZiB5b3UgXHRleHRpdHtkaWR9IGluY29ycG9yYXRlIGNvbnRlbnQgZnJvbSBlbHNld2hlcmUgLS0gZS5nLiwgaWYgeW91cgpjb250cmlidXRpb24gaXMgYmFzZWQgb24gY29kZSBmcm9tIENEVCBvciBlbHNld2hlcmUgLS0gRE8gTk9UIGNvcHktYW5kLXBhc3RlIHRoaXMKZGlyZWN0bHk7IGNoYW5nZSB0aGUgZmlyc3Qgc3RhdGVtZW50IHRvIG5vdGUgdGhpcyBleHBsaWNpdGx5LgoKXGl0ZW0gWW91ciBjb2RlIHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgKElQKSB0ZWFtIGF0IHRoZQpFY2xpcHNlIEZvdW5kYXRpb24gZm9yIGEgbGVnYWwgcmV2aWV3LiAgSWYgdGhlcmUgYXJlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMKYWJvdXQgdGhlIGNvZGUsIGEgbWVtYmVyIG9mIHRoZSBFY2xpcHNlIElQIHRlYW0gd2lsbCBjb250YWN0IHlvdS4KClxpdGVtIE9uY2UgaXQgcGFzc2VzIElQIHJldmlldywgdGhlIGNvbW1pdHRlciB3aWxsIGNvbW1pdCB5b3VyIGNvZGUgdG8gUGhvdHJhbidzIEdpdCByZXBvc2l0b3J5LgoKXGl0ZW0gVGhlIGNvbW1pdHRlciB3aWxsIGFkZCB5b3VyIG5hbWUgdG8gdGhlIGBgQ29udHJpYnV0b3JzJycgcGFnZSBvZiB0aGUgUGhvdHJhbiBXZWIgc2l0ZS4KClxlbmR7ZW51bWVyYXRlfQolXGVuZHtsaXN0fQoKXHZmaWxsCgp7XGZvb3Rub3Rlc2l6ZQpcdGV4dGl0e0VjbGlwc2UgRm91bmRhdGlvbiBSZWZlcmVuY2VzOn0KXFwKXGhyZWZ7aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRGV2ZWxvcG1lbnRcX1Jlc291cmNlc1wjRXZlcnlvbmU6XF9JUFxfQ2xlYW5saW5lc3N9CiAgICAge2h0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0RldmVsb3BtZW50XF9SZXNvdXJjZXNcI0V2ZXJ5b25lOlxfSVBcX0NsZWFubGluZXNzfQpcXApcaHJlZntodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9EZXZlbG9wbWVudFxfQ29udmVudGlvbnNcX2FuZFxfR3VpZGVsaW5lc30KICAgICB7aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRGV2ZWxvcG1lbnRcX0NvbnZlbnRpb25zXF9hbmRcX0d1aWRlbGluZXN9Cn0=