ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlbG9nCgoKRGFuaWVsICgxMCBPY3QgMjAwMikKLSBKZWZmIExhd3NvbiBmaXhlZCBhIGZldyBwcm9ibGVtcyB3aXRoIGNvbm5lY3Rpb24gcmUtdXNlIHRoYXQgcmVtYWluZWQgd2hlbgogIHlvdSBzZXQgQ1VSTE9QVF9QUk9YWSB0byAiIi4KCkRhbmllbCAoOSBPY3QgMjAwMikKLSBDcmFpZyBEYXZpc29uIGZvdW5kIGEgdGVycmlibGUgZmxhdyBhbmQgQ3JpcyBCYWlsaWZmIGhlbHBlZCBvdXQgaW4gdGhlCiAgc2VhcmNoLiBHZXR0aW5nIEhUVFAgZGF0YSBmcm9tIHNlcnZlcnMgd2hlbiB0aGUgaGVhZGVycyBhcmUgc3BsaXQgdXAgaW4KICBtdWx0aXBsZSByZWFkcywgY291bGQgY2F1c2UganVuayBkYXRhIHRvIGdldCBpbnNlcnRlZCBhbW9uZyB0aGUgc2F2ZWQKICBoZWFkZXJzLiBUaGlzIG9ubHkgY29uY2VybnMgSFRUUChTKSBoZWFkZXJzLgoKRGFuaWVsICg4IE9jdCAyMDAyKQotIFZpbmNlbnQgUGVucXVlcmMnaCBnYXZlIHVzIHRoZSBnb29kIHN1Z2dlc3Rpb24gdGhhdCB3aGVuIHRoZSBFUlJST1JCVUZGRVIKICBpcyBzZXQgaW50ZXJuYWxseSwgdGhlIGVycm9yIHRleHQgaXMgc2VudCB0byB0aGUgZGVidWcgZnVuY3Rpb24gYXMgd2VsbC4KCi0gSSBmaXhlZCB0aGUgdGVsbmV0IGNvZGUgdG8gdGltZW91dCBwcm9wZXJseSBhcyB0aGUgb3B0aW9uIHRlbGxzIGl0IHRvLiBPbgogIG5vbi13aW5kb3dzIHBsYXRmb3Jtcy4KCkRhbmllbCAoNyBPY3QgMjAwMikKLSBKb2huIENyb3cgcG9pbnRlZCBvdXQgdGhhdCBsaWJjdXJsLXRoZS1ndWlkZSB3YXNuJ3QgaW5jbHVkZWQgaW4gdGhlIHJlbGVhc2UKICB0YXJiYWxsIQoKLSBLZXZpbiBSb3RoIHBvaW50ZWQgb3V0IHRoYXQgbWFrZSBpbnN0YWxsIGRpZG4ndCBkbyByaWdodCBpZiBidWlsZCBvdXRzaWRlCiAgdGhlIHNvdXJjZSB0cmVlIChjYS1idW5kbGUgd2lzZSkuCgotIEZPTExPV19MT0NBVElPTiBidWdmaXggZm9yIHRoZSBtdWx0aSBpbnRlcmZhY2UKCkRhbmllbCAoNCBPY3QgMjAwMikKLSBLZXZpbiBSb3RoIGdvdCBwcm9ibGVtcyB3aXRoIGhpcyBjeWd3aW4gYnVpbGQgd2l0aCAtbm8tdW5kZWZpbmVkIHdhcyBub3QKICBwcmVzZW50IGluIGxpYi9NYWtlZmlsZS5hbSBzbyBJIHB1dCBpdCBiYWNrIGluIHRoZXJlIGFnYWluLiBUaGUgcG9vciBvbmUgd2hvCiAgbmVlZHMgdG8gcmVtb3ZlIGl0IGFnYWluIG11c3Qgd3JpdGUgYSBjb25maWd1cmUgc2NyaXB0IHRvIGRldGVjdCB0aGF0IG5lZWQuCgotIFJhbHBoIE1pdGNoZWxsIHBvaW50ZWQgb3V0IHRoYXQgY3VybCB3YXMgYSBiaXQgbmFpdmUgYW5kIGRpZG4ndCBkZWFsIHdpdGggLi8KICBvciAuLi8gc3R1ZmYgaW4gdGhlIHN0cmluZyBwYXNzZWQgYmFjayBpbiBhIExvY2F0aW9uOiBoZWFkZXIgd2hlbiBmb2xsb3dpbmcKICBsb2NhdGlvbnMuCgotIEFsYmVydCBDaGluIGhlbHBlZCBtZSB0byB3b3JrIG91dCBhIGJldHRlciBjb25maWd1cmUuaW4gY2hlY2sgZm9yIHpsaWIsIGFuZAogIGJvdGggLS13aXRob3V0LXpsaWIgYW5kIC13aXRoLXpsaWIgc2VlbSB0byB3b3JrIHJhdGhlciB3ZWxsIHJpZ2h0IG5vdy4KCi0gWnZpIEhhcidFbCBpbXByb3ZpZWQgdGhlIE9wZW5TU0wgRU5HSU5FIGNoZWNrIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvCiAgYmVjb21lIG1vcmUgYWNjdXJhdGUuCgpEYW5pZWwgKDEgT2N0IDIwMDIpCi0gRGV0bGVmIFNjaG1pZXIgcG9pbnRlZCBvdXQgdGhlIGxhY2sgb2YgYSAtLXdpdGhvdXQtbGlieiBvcHRpb24gdG8gY29uZmlndXJlLAogIHNvIEkgYWRkZWQgb25lLgoKVmVyc2lvbiA3LjEwICgxIE9jdCAyMDAyKQoKRGFuaWVsICgzMCBTZXAgMjAwMikKLSBNb2RpZmllZCB0aGUgY3VybF92ZXJzaW9uX2luZm8oKSBwcm90byBhbmQgcmV0dXJuZWQgc3RydWN0IG9uY2UgYWdhaW4sIGFuZAogIHVwZGF0ZWQgdGhlIG1hbiBwYWdlIGFjY29yZGluZ2x5LgoKLSBDcmlzIEJhaWxpZmYgZm91bmQgb3V0IHRoYXQgdGhlIHByZS1yZWxlYXNlcyBjcmFzaGVkIG9uIG5hbWUgbG9va3VwcyBvbgogIG5hbWVzIHN1Y2ggYXMgImE6IiBvciAiYmF6OiIgKG9uIExpbnV4IHZlcnNpb25zIG5vdCBiZWluZyBpcHY2LWVuYWJsZWQpIGR1ZQogIHRvIHNvbWUgd2VpcmQgcmV0dXJuIGNvZGVzIGZyb20gZ2V0aG9zdGJ5bmFtZV9yKCkuIEknbGwgYmxhbWUgdGhlIGNvbXBsZXRlCiAgbGFjayBvZiBkb2NzIGluIHRoYXQgZGVwYXJ0bWVudC4gQ3JpcyBwcm92aWRlZCBhIGZpeCwgd2hpY2ggSSBtb2RpZmllZCBvbmx5CiAgc2xpZ2h0bHkuCgpEYW5pZWwgKDI3IFNlcCAyMDAyKQotIEFmdGVyIGEgc3VnZ2VzdGlvbiBmcm9tIENocmlzdGlhbiBLdXJ6IHRvIERlYmlhbiBjdXJsIHBhY2thZ2UgbWFpbnRhaW5lcgogIERvbWVuaWNvIEFuZHJlb2xpLCBJIG1hZGUgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIHByb3h5IGVudmlyb25tZW50CiAgdmFyaWFibGVzIGJldHRlci4gTm93LCBieSBzZXR0aW5nIC14ICIiIHlvdSBjYW4gZXhwbGljaXRseSB0ZWxsIGxpYmN1cmwgdG8KICBub3QgdXNlIGEgcHJveHksIG5vIG1hdHRlciB3aGFuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2F5LgoKVmVyc2lvbiA3LjEwLXByZTQKCkRhbmllbCAoMjYgU2VwIDIwMDIpCi0gRXh0ZW5kZWQgY3VybF92ZXJzaW9uX2luZm8oKSBtb3JlIGFuZCB3cm90ZSBhIG1hbiBwYWdlIGZvciBpdC4KCkRhbmllbCAoMjUgU2VwIDIwMDIpCi0gbGliY3VybCBjb3VsZCBsZWFrIG1lbW9yeSB3aGVuIGRvd25sb2FkaW5nIG11bHRpcGxlIGZpbGVzIHVzaW5nIGh0dHAgcmFuZ2VzLAogIHJlcG9ydGVkIGFuZCBmaXhlZCBieSBKZWFuLUx1YyBHdWV2ZWwuCgotIFdhbHRlciBKLiBNYWNrIHByb3ZpZGVkIGNvZGUgYW5kIGRvY3MgZm9yIHRoZSBuZXcgY3VybF9mcmVlKCkgZnVuY3Rpb24gdGhhdAogIHNoYWxsIGJlIHVzZWQgdG8gZnJlZSBtZW1vcnkgdGhhdCBpcyBhbGxvY2F0ZWQgYnkgbGliY3VybCBhbmQgcmV0dXJuZWQgYmFjawogIHRvIHRoZSBhcHBsaWNhdGlvbiwgYXMgY3VybF9lc2NhcGUoKSBhbmQgY3VybF91bmVzY2FwZSgpIGRvLgoKLSBZYXJyYW0gU3VuaWwgcG9pbnRlZCBvdXQgYSBmbGF3IGluIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2hlcmUgYSBmYWlsZWQKICBjb25uZWN0aW9uIGRpZG4ndCBjbG9zZSBkb3duIHByb3Blcmx5IGFuZCB0aHVzIGEgc2Vjb25kIHRyYW5zZmVyIHVzaW5nIHRoZQogIHNhbWUgaGFuZGxlIGZhaWxlZC4KCi0gQW5kculzIEdhcmPtYSBmaXhlZCBhIGZsYXcgdGhhdCBtYWRlIChhbW9uZyBvdGhlciB0aGluZ3MpIGRpY3QtZmV0Y2hlcwogIHJldHVybiBhIHJhbmRvbSB2YWx1ZS4KCkRhbmllbCAoMjQgU2VwIDIwMDIpCi0gV2V6IEZ1cmxvbmcgYnJvdWdodCBoaXMgaW5pdGlhbCBwYXRjaCB0aGF0IGludHJvZHVjZWQgY3VybF92ZXJzaW9uX2luZm8oKS4KICBXZSBtaWdodCBuZWVkIHRvIHR3ZWFrIGl0IHNvbWV3aGF0IGJlZm9yZSByZWxlYXNlLgoKRGFuaWVsICgyMCBTZXAgMjAwMikKLSBDcmFpZyBNYXJrd2FyZHQgZml4ZWQgYW5vdGhlciBUcnU2NCBJUCByZXNvbHZlIHByb2JsZW0uCgpEYW5pZWwgKDE5IFNlcCAyMDAyKQotIERvbGJuZWZmIEEuViBhbmQgU3Bpcmlkb25vZmYgQS5WIG1hZGUgdGhlIGZpbGU6Ly8gY29kZSB3b3JrIHdpdGggcmVzdW1lcwogIGluIHRoZSBzYW1lIHN0eWxlIG90aGVyIGNvZGUgZG9lcy4KCi0gSWxndWl6IExhdHlwb3YgZml4ZWQgYSBmbGF3IGluIHRoZSBjbGllbnQgY29kZSB3aGVuIGZldGNoaW5nIG11bHRpcGxlIFVSTHMKICBhbmQgLUMgLSB3YXMgdXNlZC4gVGhlIGZpcnN0IGZpbGUncyByZXN1bWUgcG9zaXRpb24gd2FzIHRoZW4gYWNjaWRlbnRhbGx5CiAgcmV1c2VkIG9uIGFsbCB0aGUgb3RoZXIgZmlsZXMgdG9vLgoKRGFuaWVsICgxOCBTZXAgMjAwMikKLSBUaGUgY3VybF9lYXN5X3NldG9wdC4zIG1hbiBwYWdlIHdhcyBncmVhdGx5IG1vZGlmaWVkIGFuZCB0aGUgb3B0aW9ucyBoYXZlCiAgbm93IGJlZW4gZ3JvdXBlZCBpbiBsb2dpY2FsIGdyb3VwcyBzbyB0aGF0IGl0IHNob3VsZCBiZSBzb21ld2hhdCBlYXNpZXIgdG8KICByZWFkIGl0IGFuZCBmaW5kIHRoaW5ncyB5b3Ugc2VhcmNoIGZvci4KCkRhbmllbCAoMTMgU2VwIDIwMDIpCi0gS2V2aW4gUm90aCBwaW5wb2ludGVkIGEgc2NhcnkgZmxhdyBpbiBsaWJjdXJsLCB3aGVuIHRoZSBIVFRQIHNlcnZlciBkb2Vzbid0CiAgc2VuZCBhbnkgaGVhZGVycyBiYWNrLCBvbmx5IHJhdyBjb250ZW50LiBSaWdodCwgdGhhdCBpcyBhIHZpb2xhdGlvbiBvZiB0aGUKICBzdGFuZGFyZCBidXQgc3RpbGwgaGFwcGVucyBhdCB0aW1lcyBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggaXQuIFRlc3QgY2FzZQogIDMwNiB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoYXQgd2UgZG8gcmlnaHQgbm93LgoKVmVyc2lvbiA3LjEwLXByZTMKCkRhbmllbCAoMTEgU2VwIDIwMDIpCi0gTHVrYXN6IEN6ZWtpZXJkYSBmb3VuZCBvdXQgdGhhdCBjdXJsIGRpZG4ndCBzZW5kIGEgY29ycmVjdCBIVFRQIEhvc3Q6IGhlYWRlcgogIHdoZW4geW91IHNwZWNpZmllZCB0aGUgVVJMIHdpdGggYW4gSVB2NiBJUC1hZGRyZXNzLgoKRGFuaWVsICg0IFNlcCAyMDAyKQotIFN2ZW4gTmV1aGF1cyBtYWRlIC0tc2lsZW50IGJlaW5nIGFja25vd2xlZGdlZCBldmVuIHdoZW4gbXVsdGlwbGUgVVJMcwogIHdlcmUgdXNlZC4gSXQgdXNlZCB0byBvdXRwdXQgIlsxLzJdOiBodHRwOi8vaG9zdC9hLmh0bWwuZGUgLS0+IGEuaHRtbC5kIiBldGMKICBldmVuIHdoZW4gdG9sZCB0byBzaHV0IHVwLgoKRGFuaWVsICgzIFNlcCAyMDAyKQotIFVwZGF0ZWQgYWxsIHNvdXJjZSBjb2RlIGhlYWRlcnMgdG8gdXNlIE1JVC1saWNlbnNlIHJlZmVyZW5jZXMgb25seSwgYW5kCiAgcG9pbnQgdG8gdGhlIENPUFlJTkcgZmlsZSBhbmQgdGhlIGh0dHA6Ly9jdXJsLmhheHguc2UvZG9jcy9jb3B5cmlnaHQuaHRtbAogIFVSTC4gSSd2ZSBjdXQgb3V0IGFsbCByZWZlcmVuY2VzIHRvIE1QTCB0aGF0IEkgY291bGQgZmluZC4KCi0gQ29yZWN0ZWQgdGhlIG1ha2VmaWxlcyB0byBub3QgYWx3YXlzIHVzZSAtbHogd2hlbiBsaW5raW5nCgpWZXJzaW9uIDcuMTAtcHJlMgoKRGFuaWVsICgyIFNlcCAyMDAyKQotIEphbWVzIEdhbGxhZ2hlciBhZGRlZCBDb250ZW50LUVuY29kaW5nIHN1cHBvcnQgdG8gbGliY3VybCBzbyBub3cgY3VybCBhbmQKICBsaWJjdXJsLXVzaW5nIGFwcHMgY2FuIHJlcXVlc3QgY29tcHJlc3NlZCBjb250ZW50cyB1c2luZyB0aGUgJ2RlZmxhdGUnCiAgbWV0aG9kLiBTZWUgdGhlIHNwZWNpYWwgZmlsZSBsaWIvUkVBRE1FLmVuY29kaW5nIGZvciBkZXRhaWxzLgoKICBjdXJsIC0tY29tcHJlc3NlZCBpcyBub3cgdXNlZCB0byByZXF1ZXN0IGNvbXByZXNzZWQgY29udGVudHMuCgogIGN1cmwtY29uZmlnIC0tZmVhdHVyZSB3aWxsIGluY2x1ZGUgJ2xpYnonIGlmIHRoaXMgZmVhdHVyZSB3YXMgYXJvdW5kIHdoZW4KICB0aGUgbGlicmFyeSB3YXMgYnVpbHQuCgpEYW5pZWwgKDMwIEF1ZyAyMDAyKQotIEFwcGxpZWQgYW4gYW5vbnltb3VzIFNPQ0tTNS1wcm94eSBwYXRjaC4gTm90IHByb3Blcmx5IHdvcmtpbmcgaW4gYWxsCiAgc2l0dWF0aW9ucyB0aG91Z2gsIGFzIGFsbCBnZXRhZGRyaW5mbygpLXVzaW5nIGxpYmN1cmxzIHdpbGwgZmFpbCBvbiB0aGlzLgogIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgc29tZXdoYXQgbmFpdmUgd2F5IHRoZSBjdXJyZW50IGNvZGUgdHJpZXMgdG8gZXh0cmFjdAogIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBwcm94eS4KCi0gRml4ZWQgdXAgdGhlIFNTTCBjZXJ0IGZpeGVzIGZyb20gdGhlIG90aGVyIGRheSBldmVuIG1vcmUgYWZ0ZXIgbW9yZSBpbnB1dHMKICBmcm9tIENyaXMuIEFkZGVkIHRocmVlIG5ldyBTU0wgZXJyb3IgY29kZXMgdG8gbWFrZSB0aGUKICBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiBzbGlnaHRseSBsZXNzIG92ZXJsb2FkZWQuCgpEYW5pZWwgKDI3IEF1ZyAyMDAyKQotIEFmdGVyIGxvdHMgb2YgdGFsayB3aXRoIFRvbSBaZXJ1Y2hhLCBOaWNrIEdpbWJyb25lIGFuZCBDcmlzIEJhaWxpZmYgSQogIGRlY2lkZWQgdG8gdGFsayB0aGUgYm9sZCBwYXRoIGFuZCBJIG5vdyBtYWRlIGxpYmN1cmwgZG8gQ0EgY2VydGlmaWNhdGUKICB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdC4gVGh1cyBsaWJyYXJ5IHVzZXJzIG5lZWQgdG8gZXhwbGljaXRseSB0dXJuIHRoaXMgb2ZmCiAgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byBzaXRlcyB3aXRob3V0IHByb3BlciBjaGVja2luZy4gV2UgYWxzbyBpbnN0YWxsIGEKICBDQSBjZXJ0IGJ1bmRsZSBvbiAnbWFrZSBpbnN0YWxsJyBub3cuCgogIFRoZSBjdXJsIHRvb2wgbm93IHJlcXVpcmVzIHRoZSAtay8tLWluc2VjdXJlIG9wdGlvbiBpbiBvcmRlciB0byBhbGxvdwogIGNvbm5lY3Rpb25zIGFuZCBvcGVyYXRpb25zIG9uIFNTTCBzaXRlcyB0aGF0IGFyZW4ndCBwcm9wZXJseSB2ZXJpZmllZCB3aXRoCiAgLWNhZmlsZSBvciAtLWNhcGF0aC4KCiAgY3VybC1jb25maWcgLS1jYSBkaXNwbGF5cyB0aGUgYnVpbHQtaW4gcGF0aCB0byB0aGUgQ0EgY2VydCBidW5kbGUuCgpEYW5pZWwgKDI2IEF1ZyAyMDAyKQotIEFuZHJldyBGcmFuY2lzIGNsZWFuZWQgdXAgc29tZSBjb2RlIHRoYXQgbm93IGNvbXBpbGVzIGZpbmUgd2l0aG91dCB0aGUgbmVlZAogIGZvciB1Z2x5IE1TVkMgcHJhZ21hcy4KCi0gS2VpdGggTWFjRG9uYWxkIGZvdW5kIGEgbWlub3IgYnVnIGluIHNyYy9tYWluLmMgdGhhdCBtYWRlIGl0IGNsb3NlIHN0ZGluCiAgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgaGFuZGxlLiBJdCBzaG91bGRuJ3QgaGF2ZSByZXN1bHRlZCBpbiBtdWNoCiAgdHJvdWJsZSBhcyBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGNsb3NlIGFsbCBmaWxlIGhhbmRsZXMgb24gcHJvY2VzcyBleGl0CiAgYW55d2F5LgoKRGFuaWVsICgyMiBBdWcgMjAwMikKLSBNYXJrdXMgT2Jlcmh1bWVyIHByb3ZpZGVkIHNvbWUgZG9jdW1lbnRhdGlvbiBmb3IgaGlzIHByZXZpb3VzbHkgcHJvdmlkZWQKICBDVVJMT1BUX05PU0lHTkFMIGZpeC4KCi0gUGF0Y2hlZCB0aGUgbGliL01ha2VmaWxlLmFtIHRvIGhvcGVmdWxseSBubyBsb25nZXIgY29tcGxhaW4gb24gdW5kZWZpbmVkCiAgc3ltYm9scyB0aGF0IHNlZW1lZCB0byBvY2N1ciBvbiBidWlsZHMgd2l0aCBzaGFyZWQgT3BlblNTTCBsaWJyYXJpZXMgb24KICBTb2xhcmlzIGxhdGVseS4uLgoKRGFuaWVsICgyMCBBdWcgMjAwMikKLSBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBvbiBNU0NWKysgY29tcGlsZXMuIFdlJ3JlIGxvb2tpbmcgZm9yIGhlbHAgaGVyZToKICByZW1vdmUgdGhlIHByYWdtYXMgZnJvbSBsaWIvY29uZmlnLXdpbjMyLmggYW5kIGFkanVzdCB0aGUgc291cmNlcyB3aGVyZQogIHRoZSB3YXJuaW5ncyBvY2N1ci4gSGlkaW5nIHRoZW0gd2l0aCBwcmFnbWFzIGxpa2UgdGhpcyBpcyBub3QgdGhlIGNvcnJlY3QKICB3YXkgb2YgZGVhbGluZyB3aXRoIGNvbXBpbGVyIHdhcm5pbmdzLgoKRGFuaWVsICgxMyBBdWcgMjAwMikKLSBVbHJpY2ggWmFkb3cgbWFkZSB0aGUgZ2xvYmFsIGluY2x1ZGUgZmlsZXMgaW4gY3VybC8qIGluY2x1ZGUgdGhlbXNlbHZlcwogIHVzaW5nICJjdXJsLmgiIGluc3RlYWQgb2YgPGN1cmwvY3VybC5oPiB3aGljaCB0aHVzIGFsbG93cyBwZW9wbGUgdG8gbW9yZQogIGZyZWVseSBkZWNpZGUgaG93IHRvIGluY2x1ZGUgY3VybCBhbmQgaG93IHRvIHNldHVwIHRoZWlyIGluY2x1ZGUgcGF0aHMuCgotIFN0ZXJsaW5nIEh1Z2hlcyBhZGRlZCB0aGUgY3VybF9zaGFyZSogaW50ZXJmYWNlLCBzb21ld2hhdCBhcyBkaXNjdXNzZWQKICBwcmV2aW91c2x5LgoKLSBK9nJuIEhhcnRyb3RoIHBvaW50ZWQgb3V0IHRoYXQgcG9sbCgpIHdhcyB1c2VkIGluIHRoZSBwcmUxIHNvdXJjZSBjb2RlIGFuZAogIGl0IGlzbid0IHZlcnkgcG9ydGFibGUsIHNvIG5vdyBJIGNoZWNrIGZvciBpdCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKICB3b3JrIGFyb3VuZCBpdC4KClZlcnNpb24gNy45LjktcHJlMQoKRGFuaWVsICgxMiBBdWcgMjAwMikKLSBBcHBsaWVkIG15IGluaXRpYWwgdGFrZSBvbiBtYWtpbmcgdGhlIG11bHRpIHN0dWZmIG1vcmUgYXN5bmNocm9ub3VzLiBDb25uZWN0cwogIHNob3VsZCBub3cgcmV0dXJuIGJhY2sgd2l0aG91dCAiaGFuZ2luZyIgdW50aWwgaXQgaGFzIGNvbm5lY3RlZCBmb3IgcmVhbC4KICBUaGlzIHNob3VsZCBhbHNvIGJlIHRoZSBjYXNlIGZvciBGVFAtUEFTViBjb25uZWN0cy4KCkRhbmllbCAoOSBBdWcgMjAwMikKLSBBcHBsaWVkIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyJ3MgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIENVUkxPUFRfTk9TSUdOQUwsCiAgd2hpY2ggZWZmZWN0aXZlbHkgcHJldmVudHMgbGliY3VybCBmcm9tIGRvaW5nIGFueXRoaW5nIHRoYXQgbWF5IGNhdXNlCiAgc2lnbmFscyB0byBnZXQgc2VudC4gVGhpcyBpcyBiYXNpY2x5IGZvciBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMgdGhhdAogIG5vdyBjYW4gdXNlIHRpbWVvdXRzIHByb3Blcmx5LCB3aXRob3V0IHJpc2tpbmcgYW55IHNpZ25hbHMgdG8gYnVyc3QgaW4gYW5kCiAgcnVpbiB0aGUgcGFydHkuCiAgCkRhbmllbCAoNSBBdWcgMjAwMikKLSBMdWthc3ogQ3pla2llcmRhIHJlcG9ydGVkIHRoYXQgUkZDMjczMi1zdHlsZSBsaXRlcmFsIElQdjYgYWRkcmVzc2VzIGRpZG4ndAogIHdvcmsuIFdoZW4gZGlkIHRoYXQgY29kZSB2YW5pc2g/IEFueXdheSwgaXQncyBiYWNrIGFnYWluIG5vdyBhbmQgc2VlbXMgdG8KICB3b3JrIQoKLSBKb25hdGFuIExhbmRlciBmb3VuZCBvdXQgdGhhdCBQT1NUaW5nIGFuIGVtcHR5IHN0cmluZyBkaWRuJ3Qgd29yayB3aXRoIHRoZQogIGNvbW1hbmQgbGluZSB0b29sLgoKRGFuaWVsICgzIEF1ZyAyMDAyKQotIEr2cm4gSGFydHJvdGggZml4ZWQgdGhlIGxpYmN1cmwuZGVmIGZpbGUgdG8gYnVpbGQgdGhlIHdpbmRvd3MgRExMIHdpdGgKICB0aGUgbXVsdGkgaW50ZXJmYWNlIGVuYWJsZWQuCgpEYW5pZWwgKDEgQXVnIDIwMDIpCi0gVGhlIGZ0cCBQT1JUIGNvbW1hbmQgbm93IHVzZXMgYSBiZXR0ZXIgZGVmYXVsdCBJUCBhZGRyZXNzLCBhcyBpdCB3aWxsCiAgZXh0cmFjdCBhbmQgdXNlIHRoZSBsb2NhbCBJUCBhZGRyZXNzIHVzZWQgYnkgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4KCi0gTW9kaWZpZWQgdGhlICNpbmNsdWRlIGxpbmVzIGluIGN1cmwvbXVsdGkuaCB0byB3b3JrIGJldHRlciBvbiBtb3JlCiAgcGxhdGZvcm1zLgoKRGFuaWVsICgzMSBKdWwgMjAwMikKLSBBdHRlbXB0ZWQgYSBmaXggZm9yIFJheSBEZUdlbm5hcm8ncyByZXBvcnRlZCBIUC1VWCBob3N0IG5hbWUgcmVzb2x2ZQogIHByb2JsZW1zLgoKRGFuaWVsICgzMCBKdWwgMjAwMikKLSBQcml5YSBSYW1ha3Jpc2huYW4gYW5kIFJ5YW4gSm9uZXMgY29tcGlsZXMgY3VybC9jdXJsLmggd2l0aCBhIEMrKyBjb21waWxlcgogIGFuZCBkb24ndCBnZXQgX19TVERDX18gZGVmaW5lZCwgd2hpY2ggcmVxdWlyZWQgdXMgdG8gZXh0ZW5kIHRoZSBwcmVwcm9jZXNzb3IKICBjaGVjayBmb3IgdGhlICMjIG9wZXJhdG9yIHVzYWdlLgoKLSBDb3JyZWN0IHRoZSBkZXNjcmlwdGlvbiBmb3IgQ1VSTE9QVF9QQVNTV0RGVU5DVElPTiwgaWYgc2V0IHRvIE5VTEwgdGhlCiAgaW50ZXJuYWwgZGVmYXVsdCBmdW5jdGlvbiB3aWxsIGJlIHB1dCBiYWNrLgoKLSBkYW5mdXp6IGF0IG1pbGsuY29tIGZvdW5kIG91dCB0aGF0IGxpYmN1cmwgYmFkbHkgYXNzdW1lZCBhIHNwYWNlIGFmdGVyCiAgJ1NldC1Db29raWU6JyBzbyBpZiBpdCB3YXNuJ3QgcHJlc2VudCwgaXQgY2F1c2VkIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlCiAgY29va2llIG5hbWUgdG8gZmFsbCBvZmYhCgpEYW5pZWwgKDI5IEp1bCAyMDAyKQotIFRoZSBwYXNzd29yZCBwcm9tcHQgYXNraW5nIGZvciB1c2VyIHBhc3N3b3JkIHVzZWQgc3Rkb3V0IGFuZCBub3cgdXNlcwogIHN0ZGVyciBpbnN0ZWFkIHRvIGJldHRlciBhbGxvdyByZWRpcmVjdGluZy4gSXQgYWxzbyBsZWFrZWQgYSBmb3BlbigpIGZpbGUKICBoYW5kbGUgdGhhdCBpcyBub3cgZml4ZWQuCgpEYW5pZWwgKDI4IEp1bCAyMDAyKQotIEhBVkVfU0VUVkJVRiB3YXMgbGVmdCBvdXQgZnJvbSBzcmMvbWFpbi5jIHdoaWNoIG1hZGUgLU4gbm90IHdvcmsuIEZvdW5kIG91dAogIGJ5IE0gVC4KCkRhbmllbCAoMjYgSnVuIDIwMDIpCi0gR2xlbiBOYWthbXVyYSBzb2x2ZWQgYSBjcmFzaCBpbiB0aGUgbmFtZSByZXNvbHZpbmcgZnVuY3Rpb24gZm9yIElQLW9ubHkKICBhZGRyZXNzZXMgb24gQWxwaGEgTGludXggKGF0IGxlYXN0KS4KCi0gVC4gQmhhcmF0aCBjb3JyZWN0ZWQgdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBpbnRyb2R1Y2VkIGluIDcuOS44LgoKRGFuaWVsICgyMiBKdW4gMjAwMikKLSBBbmRy6XMgR2FyY+1hIHBvaW50ZWQgb3V0IG1hbiBwYWdlIGVycm9ycyBpbiBjdXJsX2Zvcm1hZGQuMy4gSSBmaXhlZC4KCkRhbmllbCAoMTkgSnVuIDIwMDIpCi0gQ2hyaXMgQ29tYmVzIHBvaW50ZWQgb3V0IGEgZmxhdyBpbiBjdXJsX2VzY2FwZSgpLiBJIGZpeGVkLiBXZSBubyBsb25nZXIKICB0cmllcyB0byBnZW5lcmF0ZSBub3IgcGFyc2UgJysnIGluIFVSTHMuIFNwYWNlcyBiZWNvbWUgJTIwLCBhbmQgb25seSAlLWNvZGVzCiAgYXJlIHRyYW5zbGF0ZWQgYnkgY3VybF91bmVzY2FwZSgpLgoKRGFuaWVsICgxNSBKdW4gMjAwMikKLSBBZGRlZCAtLWxpbWl0LXJhdGUgdG8gdGhlIGN1cmwgdG9vbC4gQWxsb3dzIHRoZSB1c2VyIHRvIHNldCBhIG1heG1pbXVtCiAgdXBwZXIgbGltaXQgdG8gaG93IG11Y2ggYmFuZHdpZHRoIHRvIHVzZSBmb3IgdHJhbnNmZXJzLgoKLSBDVVJMT1BUX0JVRkZFUlNJWkUgd2FzIGFkZGVkIHRvIGxpYmN1cmwuIFRoaXMgc2V0cyBhIHByZWZlcmVkIHNpemUgZm9yIHRoZQogIHJlY2VpdmUgYnVmZmVyIGluIGxpYmN1cmwuIFRoZSBtYWluIHBvaW50IG9mIHRoaXMgd291bGQgYmUgdGhhdCB0aGUgd3JpdGUKICBjYWxsYmFjayBnZXRzIGNhbGxlZCBtb3JlIG9mdGVuIGFuZCB3aXRoIHNtYWxsZXIgY2h1bmtzLgoKRGFuaWVsICgxNCBKdW4gMjAwMikKLSBZYXJyYW0gU3VuaWwgZm91bmQgb3V0IHRoYXQgdGhlIFNvY2tldElzRGVhZCgpIGZ1bmN0aW9uIHBlcmZvcm1lZCBhIGxvdAogIGZhc3RlciBvbiBXaW5kb3dzIHdoZW4gcmVtb3ZpbmcgdGhlIDEgbWljcm9zZWNvbmQgdGltZW91dC4KCi0gSGFubm8gTC4gS3Jhbnpob2ZmIGZpeGVkIHRoZSBWQysrIHByb2plY3QgZmlsZXMuCgotIFRvbSBNYXR0aXNvbiBmb3VuZCBvdXQgdGhhdCBmdHAgdHJhbnNmZXJzIGNsb3NlZCB0aGUgY29ubmVjdGlvbiBhIGxpdHRsZQogIHRvbyBvZnRlbi4KCi0gTWlrbG9zIE5lbWV0aCBwb3N0ZWQgYSBWQysrIG1ha2VmaWxlIGZpeCBhbmQgc29tZSBJTlNUQUxMIGNvbW1lbnRzIG9uIGhvdwogIHRvIGRpc2FibGUgc3BlY2lmaWMgcHJvdG9jb2xzIHdoZW4gYnVpbGRpbmcgZm9yIFdpbmRvd3MuCgpWZXJzaW9uIDcuOS44CgpEYW5pZWwgKDEzIEp1biAyMDAyKQotIFRpbWUgdG8gbGV0IHRoaXMgYmFieSBnby4KCkRhbmllbCAoMTIgSnVuIDIwMDIpCi0gQ2hyaXMgQ29tYmVzIGFkZGVkIHRocmVlIG5ldyBvcHRpb25zIGZvciBjdXJsX2Zvcm1hZGQoKTogQ1VSTEZPUk1fQlVGRkVSLAogIENVUkxGT1JNX0JVRkZFUlBUUiwgQ1VSTEZPUk1fQlVGRkVSTEVOR1RILiAgVGhleSBhcmUgdXNlZCB0byBjcmVhdGUgYQogIG11bHRpcGFydCB0aGF0IGFwcGVhcnMgYXMgYSByZWd1bGFyIGZpbGUgdXBsb2FkLCBidXQgdGhlIGRhdGEgaXMgcHJvdmlkZWQKICB3aXRoIGEgcG9pbnRlciBhbmQgbGVuZ3RoLgogIAotIE5pY28gQmFnZ3VzIG1hZGUgdGhlIFZNUyB2ZXJzaW9uIHVzZSBzaWdzZXRqbXAoKSB0b28uCgotIEr2cm4gSGFydHJvdGggZml4ZWQgdGhlIG1pbmd3MzIgYnVpbGQgdXNpbmcgdGhlIG1tIGxpYi4KCi0gQXBwbGllZCBwYXRjaGVzIGJ5IEtyaXMgS2VubmF3YXkgdGhhdCBjb3JyZWN0IGZvcm1hdCBzdHJpbmcgcHJvYmxlbXMgaW4KICBsaWIvZnRwLmMgYW5kIGxpYi9sZGFwLmMuCgpWZXJzaW9uIDcuOS44LXByZTMKCkRhbmllbCAoMTEgSnVuIDIwMDIpCi0gSmFtZXMgQ29uZSBicm91Z2h0IHRoZSBpZGVhIG9mIHVzaW5nIHNpZ3NldGptcCgpIGluIHRoZSBzaWduYWwgaGFuZGxlciB0bwogIG1ha2UgdGhlIHRpbWUtb3V0IG9mIG5hbWUgbG9va3VwcyB0byB3b3JrLCBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgbmFtZQogIHJlc29sdmVyIGxpYnJhcnkgdHJhcHMgRUlOVFIuIFRoZSB1c2Ugb2Ygc2lnc2V0am1wKCkgYW5kIHNpZ2xvbmdqbXAoKSBmb3IKICB0aGlzIG1heSBiZSBhIGJpdCBkcmFzdGljLCBhbmQgYWxzbyBub3QgbGlrZWx5IHRvIGV4aXN0IG9uIGFsbCBwbGF0Zm9ybXMuICBJCiAgYWRkZWQgY2FyZWZ1bCBjaGVja2luZyBmb3IgdGhpcyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgZXZlbiBjaGVja3MgZm9yIGl0CiAgYmVpbmcgYSBtYWNybyAod2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNhc2UgaW4gZm9yIGV4YW1wbGUgTGludXgpLgoKICBzaWdzZXRqbXAoKSBzZWVtcyB0byBiZSBtZW50aW9uZWQgaW4gdGhlIFNpbmdsZSBVbml4IHNwZWNpZmljYXRpb24uCgotIE1pa2xvcyBOZW1ldGggYnJvdWdodCBhIHBhdGNoIHRoYXQgYWxsb3dzIGxpYmN1cmwgdG8gZ2V0IGJ1aWx0IHdpdGggc3BlY2lmaWMKICBwcm90b2NvbHMgZGlzYWJsZWQuIFRoaXMgaXMgZG9uZSBieSBydW5uaW5nIC4vY29uZmlndXJlCiAgLS1kaXNhYmxlLVtwcm90b2NvbF0uCgotIEZUUCByYW5nZSBkb3dubG9hZHMgY291bGQgbWFrZSBDVVJMRV9GVFBfV1JJVEVfRVJST1IgZ2V0IHJldHVybmVkLiBXZSBub3cKICBtYWtlIHByZWNhdXRpb25zIHRvIG5vdCByZXR1cm4gdGhpcyBmb3IgcmFuZ2UgZG93bmxvYWRzLgoKICBBZGRlZCB0ZXN0IGNhc2UgMTM1IHRoYXQgbWFrZXMgYW4gZnRwIHJhbmdlIGRvd25sb2FkLiBIYWQgdG8gdHdlYWsgdGhlCiAgcnVudGVzdHMucGwgc2NyaXB0IGEgYml0IHRvby4KCi0gQnVnIHJlcG9ydCAjNTY2ODM1IGlkZW50aWZpZWQgYSBzdHJsZW4oKSBvbiBhIE5VTEwgcG9pbnRlci4gQWRkZWQgYWRkaXRpb25hbAogIGNoZWNrIHRvIHByZXZlbnQgdGhpcy4KCkRhbmllbCAoMTAgSnVuIDIwMDIpCi0gRm91bmQgYW5kIGNvcnJlY3RlZCBhIGNvbm5lY3QgZmFpbHVyZSBwcm9ibGVtIHRoYXQgZGlkbid0IGNyZWF0ZSBhIGh1bWFuCiAgZXJyb3IgdGV4dC4KCi0gQWRkZWQgY29kZSB0byBjb21waWxlIHdpdGggT3BlblNTTCAwLjkuNy4gQmFzZWQgb24gcGF0Y2ggZnJvbSBKYWNvYiBNZXVzZXIKICBhbmQgY29tbWVudHMgZnJvbSBH9nR6IEJhYmluLUViZWxsLgoKLSBHYXV0YW0gTWFuaSBmb3VuZCBhIHNvY2tldCBkZXNjcmlwdG9yIGxlYWsgdGhhdCBoYXBwZW5lZCB3aGVuIEZUUCB0cmFuc2ZlcnMKICBmYWlsZWQgYW5kIHlvdSByZWludm9rZWQgY3VybF9lYXN5X3BlcmZvcm0oKS4KCkRhbmllbCAoNSBKdW4gMjAwMikKLSBHdXN0YWYgSHVpIGNvcnJlY3RlZCBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSBzbyB0aGF0IGl0IHdvbid0IGNyYXNoIG5vCiAgbWF0dGVyIHdoZW4geW91IGRlY2lkZSB0byByZW1vdmUgdGhlIENVUkwgaGFuZGxlLgoKLSBIQVZFX1JBTkRfU1RBVFVTIHdhcyBhZGRlZCB0byBsaWIvY29uZmlnLXdpbjMyLmggYnkgQW5kcmVhcyBPbHNzb24sIGFzIGl0CiAgbWFrZXMgd2luZG93cyBidWlsZHMgc3RvcCBjb21wbGFpbmluZyBhYm91dCAid2VhayBzZWVkaW5nIiB3aGVuIGl0IGluIGZhY3QKICBpc24ndC4KCi0gQW5vdGhlciA2NGJpdCBhcmNoaXRlY3R1cmUgY3Jhc2ggdGhhdCB3YXMgaW50cm9kdWNlZCBpbiA3LjkuNyB3YXMgbm93CiAgcmVtb3ZlZCwgYXMgYnVnIHJlcG9ydCAjNTY0NTg1IGNsYXJpZmllZC4gVGhpcyBoYXBwZW5lZCBkdWUgdG8gb3VyIGF0dGVtcHRzCiAgdG8gb25seSBhbGxvY2F0ZSBvbmx5IGFzIG11Y2ggbWVtb3J5IGFzIGlzIGFjdHVhbGx5IG5lZWRlZCBmb3IgbmFtZQogIHJlc29sdmluZyAodXNpbmcgcmVhbGxvYykgd2hpY2ggY2FsbGVkIGZvciBhIGZ1bmN0aW9uIHRoYXQgY291bGQgJ21vdmUnIGEKICBob3N0ZW50IHN0cnVjdCBpbiBtZW1vcnkuCgpWZXJzaW9uIDcuOS44LXByZTIKCkRhbmllbCAoMyBKdW4gMjAwMikKLSBULiBCaGFyYXRoIGZpeGVkIHRoZSBDVVJMSU5GT19SRURJUkVDVF9USU1FIHRvIHJldHVybiBhIGNvcnJlY3QgdGltZSBhbmQKICBtYWRlIHRoZSBDVVJMSU5GT19SRVFVRVNUX1NJWkUgcmV0dXJuIHRoZSBjb3JyZWN0IHRvdGFsIHJlcXVlc3Qgc2l6ZS4gSGUKICBhbHNvIG1hZGUgdGhlIHdpbjMyIHRpbWVycyB1c2UgaGlnaGVyIHJlc29sdXRpb24gdGhhbiBiZWZvcmUuCgpEYW5pZWwgKDI5IE1heSAyMDAyKQotIFJlbmF1ZCBDaGFpbGxhdCBtYWRlIG1lIGF3YXJlIG9mIHRoZSBmYWN0IHRoYXQgbGliY3VybCByZXR1cm5lZCBhbiBlcnJvciBpZgogIHlvdSB0cmllZCB0byBnZXQgYW4gZW1wdHkgRlRQIGZpbGUuIFRoaXMgc2VlbWVkIGxpa2UgYSB3cm9uZyB0aGluZyB0byBkbywgc28KICBub3cgaXQgbm8gbG9uZ2VyIGRvZXMgdGhhdCEgSSBqdXN0IGhvcGUgdGhhdCBubyBvbmUgYnVpbHQgYW55dGhpbmcgZmFuY3kKICB1cG9uIHRoaXMgdW5leHBlY3RlZCBiZWhhdmlvci4uLgoKRGFuaWVsICgyOCBNYXkgMjAwMikKLSBDcmlzIEJhaWxpZmYgYnJvdWdodCBDVVJMT1BUX0NBUEFUSCB0aGF0IHdvcmtzIGxpa2UgQ1VSTE9QVF9DQUlORk8gYnV0CiAgc3BlY2lmaWVzIGEgcGF0aCB0byBhIGRpcmVjdG9yeSB3aXRoIGNlcnRpZmljYXRlcyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaWxlCiAgd2l0aCB0aGVtIGFsbCBjb25jYXRlbmF0ZWQuIC0tY2FwYXRoIHdhcyBhZGRlZCB0byB0aGUgY29tbWFuZCBsaW5lIHRvb2wKICBmb3IgdGhlIHNhbWUgZnVuY3Rpb24uCgogIFdpbmRvd3MgdXNlcnMgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRoYXQgdGhlIGRpcmVjdG9yeSBzaG91bGQgYmUgc2V0dXAgd2l0aAogIHRoZSBjX3JlaGFzaCB0b29sIG9mIHRoZSBPcGVuU1NMIHBhY2thZ2UsIGFuZCB0aGF0IGNyZWF0ZXMgc3ltbGlua3MgYnkKICBkZWZhdWx0IHRoYXQgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIGFjdHVhbCBjb3BpZXMgdG8gd29yayBvbiBXaW5kb3dzLgoKLSBHdXN0YWYgSHVpIHByb3ZpZGVkIG5ldyBjb2RlIHRoYXQgY2hhbmdlcyBob3cgY3VybF9tdWx0aV9pbmZvX3JlYWQoKQogIG1lc3NhZ2VzIGFyZSBzdG9yZWQsIHNvIHRoYXQgdGhleSBkb24ndCBoYXZlIHRvIGJlIGtlcHQgYXJvdW5kIGZvciB0aGUgbXVsdGkKICBoYW5kbGUncyBlbnRpcmUgbGlmZSB0aW1lLiBIZSBhbHNvIG1hZGUgaXQgcmV0dXJuIGZhaWx1cmUgY29kZXMgcHJvcGVybHkKICB3aGljaCBpdCBkaWRuJ3QgZG8gYmVmb3JlLgoKRGFuaWVsICgyNyBNYXkgMjAwMikKLSBHdXN0YWYgSHVpIHBvaW50ZWQgb3V0IHRoYXQgcnVubmluZyBjdXJsX211bHRpX3BlcmZvcm0oKSB3aXRob3V0IGRvaW5nCiAgY3VybF9tdWx0aV9mZHNldCgpIGZpcnN0IHdhcyBub3QgcmVhbGx5IGEgd29ya2luZyBjb21iby4gSSBhZGRlZCBhbiBpbnRlcm5hbAogIGNoZWNrIGZvciB0aGlzIGFuZCBoYXZlIHNvbWUgZXh0cmEgc2VsZWN0KCkgY29kZSB3aXRob3V0IHRpbWVvdXQgdG8gbWFrZSB0aGUKICBsaWJyYXJ5IGludGVybmFscyB3b3JrIGlkZW50aWNhbGx5IG5ldmVydGhlbGVzcy4gV2UgbWlnaHQgbmVlZCB0byBzb21laG93CiAgZWl0aGVyIGRvY3VtZW50IHRoYXQgb25jZSB5b3UndmUgdXNlZCB0aGUgKl9mZHNldCgpIHlvdSBzaG91bGQgcmVtYWluIHVzaW5nCiAgdGhlbSBpbiBzZWxlY3QoKSBvciB5b3Ugc2hvdWxkIGJsYW5rIHRoZW0gc29tZWhvdyBzbyB0aGF0IGxpYmN1cmwgd29uJ3QgZ28KICBjcmF6eS4KClZlcnNpb24gNy45LjgtcHJlMQoKRGFuaWVsICgyMiBNYXkgMjAwMikKLSBKYW1lcyBDb25lIGJyb3VnaHQgYW4gZXhjZWxsZW50IHBhdGNoLCBpbmNsdWRpbmcgc2V2ZXJhbCB0ZXN0cyBhbmQgZG9jcyEKICBDVVJMT1BUX05FVFJDIG5vdyB0YWtlcyBhbiBlbnVtIGFzIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGJvb2xlYW4uCiAgLS1uZXRyYy1vcHRpb25hbCB3YXMgaW50cm9kdWNlZCBhcyBhbiBhZGRpdGlvbiB0byAtLW5ldHJjIHRvIGFsbG93IHRoZQogIGNvbW1hbmQgbGluZSBjbGllbnQgdG8gdGFrZSB1c2Ugb2YgYWxsIHRoYXQgbmV3IG5ldHJjIHN0dWZmLgoKLSBCdWcgcmVwb3J0ICM1NTg4ODggc2hvd2VkIGEgY2FzZSB3aGVyZSBsaWJjdXJsIHJlLXVzZWQgdGhlIHByZXZpb3VzIGhvc3QKICBuYW1lIHdoZW4gYSBjb25uZWN0aW9uIG92ZXIgYSBwcm94eSB3YXMgcmUtdXNlZCBidXQgdG8gYSBkaWZmZXJlbnQgdGFyZ2V0CiAgaG9zdC4KCkRhbmllbCAoMjEgTWF5IDIwMDIpCi0gRWRpbiBLYWRyaWJhc2ljIGhlbHBlZCBtZSBzb3J0IG91dCBhIHByb2JsZW0gdG8gbWFkZSBsaWJjdXJsIGNyYXNoIHdoZW4KICB0cnlpbmcgdG8gSFRUUCBQT1NUIGFuIGVtcHR5IHN0cmluZy4KCi0gQ2xhcmlmaWVkIHRoYXQgSnVlcmdlbiBXaWxrZSBkb25hdGVkIHRoZSBvcmlnaW5hbCB0ZXN0cy9zZXJ2ZXIvc3dzLmMgY29kZS4KCi0gSmVhbi1QaGlsaXBwZSBCYXJyZXR0ZS1MYVBpZXJyZSBtYWRlIGN1cmxfZm9ybWFkZCgpIHJldHVybiBhIHR5cGVkZWYgbmFtZWQKICBDVVJMRk9STWNvZGUgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgJ2ludCcsIGFuZCB0aGUgdmFyaW91cyByZXR1cm4gY29kZXMgYXJlCiAgbm93IGdsb2JhbGx5IGV4cG9ydGVkLiBJdCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIGJldHRlciBmaWd1cmUgb3V0IHdoYXQgZ29lcwogIHdyb25nIHdoZW4gY3VybF9mb3JtYWRkKCkgcmV0dXJucyBlcnJvcnMuCgpEYW5pZWwgKDIwIE1heSAyMDAyKQotIFJvbGFuZCBaaW1tZXJtYW5uIHBvaW50ZWQgb3V0IHRoYXQgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZSgpCiAgaXMgcHJlZmVyZWQgdG8gU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZSgpLgoKRGFuaWVsICgxNyBNYXkgMjAwMikKLSBCdWcgcmVwb3J0ICM1NTY4NjkgcG9pbnRlZCBvdXQgdGhhdCBzcmMvd3JpdGVvdXQuYyBkaWRuJ3QgY29tcGlsZSBvbiBmcmVlYnNkCiAgYWZ0ZXIgbXkgQUlYIGZpeGVzIHRoZSBvdGhlciB3ZWVrLgoKLSBCdWcgcmVwb3J0ICM1NTY5MzAgcG9pbnRlZCBvdXQgYSBGcmVlQlNEIGNvcmUgZHVtcCBpbnRyb2R1Y2VkIGluIDcuOS43IGluCiAgdGhlIEROUyBzdHJ1Y3QgcmVhbGxvYyBzdHVmZi4gQWN0dWFsbHksIHRoaXMgY3Jhc2ggY291bGQgaGFwcGVuIG9uIGFsbAogIHN5c3RlbXMgdGhhdCBtYWRlIHRoZSBwYWNrX2hvc3RlbnQoKSBmdW5jdGlvbiBnZXQgaW52b2tlZC4KCi0gSSByZW1vdmVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gdGhlIHRlc3Qgc3VpdGUncyBIVFRQIHNlcnZlci4KClZlcnNpb24gNy45LjcKCkRhbmllbCAoMTAgTWF5IDIwMDIpCi0gS2V2aW4gUm90aCBhZGp1c3RlZCB0aGUgLS10cmFjZS1hc2NpaSBvdXRwdXQgc2xpZ2h0bHkuCgotIFBhdWwgSGFycmluZ3RvbiBmb3VuZCBvdXQgdGhhdCBzcmMvd3JpdGVvdXQuYyBuZWVkZWQgYW4gYWRkaXRpb25hbCBoZWFkZXIKICBmaWxlIGluY2x1ZGVkIGZvciBBSVggYnVpbGRzCgpWZXJzaW9uIDcuOS43LXByZTIKCkRhbmllbCAoNyBNYXkgMjAwMikKLSBVcGRhdGVkIHRoZSBtYW4gcGFnZSB3aXRoIC0tdHJhY2UtYXNjaWkgYW5kIC1qLy0tanVuay1zZXNzaW9uLWNvb2tpZXMuCgotIE1hZGUgLS10cmFjZS1hc2NpaSBkbyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyAtLXRyYWNlIGJ1dCB3aXRob3V0IHRoZSBoZXgKICBwYXJ0IGluIHRoZSBvdXRwdXQuCgotIEFkZGVkIENVUkxPUFRfQ09PS0lFU0VTU0lPTiB0aGF0IHdoZW4gZW5hYmxlZCBtYWtlcyBsaWJjdXJsIGlnbm9yZSBzZXNzaW9uCiAgY29va2llcyByZWFkIGZyb20gYSBmaWxlLiBUaGlzIG9wdGlvbiBpcyBlbmZvcmNlZCBieSB0aGUgY3VybCBjb21tYW5kIGxpbmUKICB0b29sIHVzaW5nIHRoZSBuZXcgLWovLS1qdW5rLXNlc3Npb24tY29va2llcyBvcHRpb24uIEFmdGVyIGRpc2N1c3Npb25zIHdpdGgKICBLZXZpbiBSb3RoLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UgY3VybCB0byBmdWxseSBlbXVsYXRlIGEgYnJvd3NlcidzCiAgYmVoYXZpb3IsIGV2ZW4gd2hlbiBpdCBjb21lcyB0byAic2Vzc2lvbiBjb29raWVzIi4gU2Vzc2lvbiBjb29raWVzIGFyZQogIGNvb2tpZXMgdGhhdCBhIG5vcm1hbCBicm93c2VyIGRpc2NhcmRzIHdoZW4gdGhlIGJyb3dzZXIgaXMgc2h1dAogIGRvd24uIFRoZXkncmUgaWRlbnRpZmllZCBieSBub3QgaGF2aW5nIGFueSBleHBpcmUgZGF0ZS90aW1lLgoKLSBXaGVuIENVUkxPUFRfREVCVUdEQVRBIHdhcyBzZXQsIGl0IHJ1aW5lZCB0aGUgQ1VSTE9QVF9TVERFUlIgc2V0dGluZyBhbmQKICB0aGlzIHdhcyBkaXNjb3ZlcmVkIHdoZW4gLS10cmFjZSB3YXMgbWFkZSB0byBjcmFzaC4KCi0gVXNpbmcgLXYgYW5kIC0tdHJhY2UgYXQgdGhlIHNhbWUgdGltZSBjb25mdXNlZCBtYXR0ZXJzLiAtdiBpcyBub3cgcHJldHR5CiAgbXVjaCBpZ25vcmVkIHdoZW4gLS10cmFjZSBvciAtLXRyYWNlLWFzY2lpIGlzIHVzZWQuCgotIE1hZGUgLS10cmFjZSAoYW5kIC0tdHJhY2UtYXNjaWkpIHN1cHBvcnQgLSBhcyBmaWxlIG5hbWUgdG8gcGFzcyBvdXRwdXQgdG8KICBzdGRvdXQgaW5zdGVhZC4gSXQgbWFrZXMgaXQgY29uc2lzdGVudCB3aXRoIGhvdyBvdGhlciBvcHRpb25zIHdvcmsuCgpWZXJzaW9uIDcuOS43LXByZTEKCkRhbmllbCAoNiBNYXkgMjAwMikKLSBBZGRlZCBtdWx0aS1wb3N0LmMgdG8gdGhlIGV4YW1wbGVzIGRpcmVjdG9yeS4gSSBnb3QgdGhlIGJhc2ljIHNvdXJjZSBmb3IKICB0aGlzIGZyb20gR3VzdGFmIEh1aS4KCkRhbmllbCAoMyBNYXkgMjAwMikKLSBDVVJMX01BWF9XUklURV9TSVpFIGlzIG5vdyBhbiBleHBvcnRlZCAjZGVmaW5lIGluIHRoZSBjdXJsL2N1cmwuaCBoZWFkZXIgYW5kCiAgY2FuIGJlIHVzZWQgdG8gZmlndXJlIG91dCB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSB5b3VyIHdyaXRlIGNhbGxiYWNrIGNhbgogIGdldC4KCi0gQ1VSTE9QVF9SRUFEREFUQSBpcyBub3cgYW4gYWxpYXMgZm9yIENVUkxPUFRfSU5GSUxFIGFuZCBDVVJMT1BUX1dSSVRFREFURSBpcwogIGFuIGFsaWFzIGZvciBDVVJMT1BUX0ZJTEUuIFRoZXNlIHR3byB3ZXJlIGFkZGVkIGZvciBjb25mb3JtaXR5LiBNb3N0IG90aGVyCiAgY2FsbGJhY2sgZnVuY3Rpb24ncyB1c2VyZGF0YSBhcmUgcHJvdmlkZWQgd2l0aCBvcHRpb25zIHVzaW5nIGEgc2ltaWxhciBuYW1lLQogIHNjaGVtZS4KCi0gQWRkZWQgIi0tdHJhY2UgW2ZpbGVdIiB0byB0aGUgY29tbWFuZCBsaW5lIHRvb2wuIEl0IG1ha2VzIGEgdmVyeSBkZXRhaWxlZAogIHRyYWNlIGR1bXAgZ2V0IHN0b3JlZCwgd2l0aCBhIGZ1bGwgcHJvdG9jb2wgZHVtcCB0aGF0IGluY2x1ZGVzIGFsbCByZWNlaXZlZAogIGFuZCB0cmFuc21pdHRlZCBkYXRhLiBUaGlzIGNvdWxkIGJlIGEgdmVyeSBlZmZlY3RpdmUgdG9vbCBmb3IgZGVidWdnaW5nIHdoYXQKICBnb2VzIHdyb25nLiBUaGlzIGR1bXAgaW5jbHVkZXMgZXZlcnkgYnl0ZSB0aGUgd2F5IGl0IGlzIHNlbnQgdG8vcmVjZWl2ZWQKICBmcm9tIHRoZSBzZXJ2ZXIuIFRoZSBkdW1wIGlzIHRoZSBwbGFpbi10ZXh0IHZlcnNpb24sIHNvIFNTTCB0cmFuc2ZlcnMgd2lsbAogIHN0aWxsIGJlIHJlYWRhYmxlLgoKLSBJIGZvdW5kIG91dCB0aGF0IHRoZSBERUJVR0ZVTkNUSU9OIHdhcyBub3QgY2FsbGVkIHByb3Blcmx5IGV2ZXJ5d2hlcmUgYXMgd2UKICB3YW50ZWQgaXQgdG8uIEkgZml4ZWQgaXQuCgotIC1EIG5vdyBzdG9yZXMgYWxsIGhlYWRlcnMgdG8gdGhlIHNhbWUgZmlsZSBpZiBtdWx0aXBsZSBVUkxzIGFyZSBnaXZlbiBvbiB0aGUKICBjb21tYW5kIGxpbmUhIEtldmluIFJvdGggbWFkZSBtZSBhd2FyZSBvZiB0aGF0IGl0IGRpZG4ndCBhbHJlYWR5IGRvIHRoaXMhCgotIEd1c3RhZiBIdWkgd3JvdGUgYW4gZXhjZWxsZW50IGZvcm1wb3N0IGV4YW1wbGUgdGhhdCB1c2VkIHRoZSBtdWx0aQogIGludGVyZmFjZS4gIFVuZm9ydHVuYXRlbHksIGl0IGRpZG4ndCB3b3JrIGR1ZSB0byBzZXZlcmFsIGJ1Z3MgaW4gaG93CiAgdHJhbnNmZXJzIHdlcmUgbWFkZSB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2FzIHVzZWQuCgpEYW5pZWwgKDIgTWF5IDIwMDIpCi0gSGFubm8gS3Jhbnpob2ZmIGZvdW5kIG91dCB0aGF0IHdoZW4gZG9pbmcgbXVsdGlwbGUgdHJhbnNmZXJzIG9uIHRoZSBzYW1lCiAgZWFzeSBoYW5kbGUsIHRoZSBwcm9ncmVzcyBtZXRlciB3b3VsZCBzaG93IGEgYmFkICJjdXJyZW50bHkgZG93bmxvYWRlZAogIHZhbHVlIiB3aGVuIHRoZSB0cmFuc2ZlciBzdGFydHMuCgpEYW5pZWwgKDEgTWF5IDIwMDIpCi0gQXBwbGllZCBhbm90aGVyIHBhdGNoIGJ5IEphY2t5IExhbSB0byBtYWtlIHRoZSBuYW1lIHJlc29sdmUgaW5mbyByZWFsbG9jKCkKICBzdHVmZiB3b3JrIHByb3Blcmx5LgoKRGFuaWVsICgyOCBBcHJpbCAyMDAyKQotIGN1cmxfbXVsdGlfaW5mb19yZWFkKCkgaXMgbm93IGltcGxlbWVudGVkIQoKRGFuaWVsICgyNyBBcHJpbCAyMDAyKQotIFVwZGF0ZWQgQlVHUywgVE9ETywgRkFRLCBJTlNUQUxMIGFuZCBhZGRlZCBCSU5ESU5HUy4KCi0gSSB0aGluayBJIGZpeGVkIHRoZSBETlMgY2FjaGUgcHJ1bmUgY3JhY2ggSmFja3kgTGFtIGZvdW5kIGFuZCByZXBvcnRlZC4KCi0gSSBjbGVhbmVkIHVwIHRoZSBuYW1lIHByZWZpeCBzdHVmZiBpbiB0aGUgaGFzaCBhbmQgbGxpc3QgbW9kdWxlcy4KCi0gRlRQIHJlc3BvbnNlcyBzaG91bGQgbm93IGJlIGJldHRlciBvbiB0aW1pbmcgb3V0IHByb3Blcmx5LiBUaGUgdGltZW91dCB2YWx1ZQogIGlzIG1heGltdW0gdGltZW91dCBmb3IgdGhlIGVudGlyZSByZXF1ZXN0IG9wZXJhdGlvbiwgYnV0IGJlZm9yZSB0aGlzLCB0aGUKICB0aW1lb3V0IHdhcyB1c2VkIGFzIGEgbWF4aW11bSBhbGxvd2VkIHRpbWUgYmV0d2VlbiB0d28gcmVhZHMuLi4KCkRhbmllbCAoMjYgQXByaWwgMjAwMikKLSBGaXhlZCB0aGUgdGVzdCBzdWl0ZSBodHRwIHNlcnZlciB0byBub3QgdXNlIHNucHJpbnRmKCkgYW55bW9yZSBkdWUgdG8gYmV0dGVyCiAgcG9ydGFiaWxpdHkuCgpEYW5pZWwgKDI1IEFwcmlsIDIwMDIpCi0gV2l0aCBTdGVybGluZyBIdWdoZXMnIG5ldyBETlMgcHJ1bmluZywgSmFja3kgTGFtIGFza2VkIGlmIHRoaXMgd291bGRuJ3QKICBjYXVzZSBwcm9ibGVtcyBzaW5jZSB0aGUgcHJ1bmluZyBpcyBvbmx5IGNoZWNraW5nIHRoZSBlbnRyeSB0aW1lLCBhbmQgaXQKICBzdXJlIGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGVyZWZvciwgSSd2ZSBub3cgYWRkZWQgYW5kIGNoYW5nZWQgY29kZSBzbyB0aGF0CiAgdGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4gTm93aGVyZSBpbiB0aGUgY29kZSB3aWxsIGJlIHN0b3JlIG5hbWUKICByZXNvbHZlZCBpbmZvcm1hdGlvbiBhcm91bmQgc28gdGhhdCBhIHN1bnNlcXVlbnQgRE5TIGNhY2hlIHBydW5lIHNob3VsZAogIGNhdXNlIGEgcHJvYmxlbS4gVGhpcyBvZiBjb3Vyc2UgY2FsbGVkIGZvciBzb21lIG1pbGQgaW50ZXJuYWwgY2hhbmdlcy4KCkRhbmllbCAoMjMgQXByaWwgMjAwMikKLSBJbXByb3ZlZCB0aGUgJ25vX3Byb3h5JyBjaGVjaywgYXMgdXNpbmcgcG9ydCBudW1iZXJzIGluIHRoZSBVUkwgY29uZnVzZWQgaXQKICBwcmV2aW91c2x5LiBSZXBvcnRlZCBieSBFcndhbiBMZWdyYW5kIGluIGJ1ZyByZXBvcnQgIzU0NzQ4NC4KCi0gVGhlIC0taW50ZXJmYWNlIG9wdGlvbiBub3cgd29ya3MgZXZlbiBvbiBJUHY2IGVuYWJsZWQgYnVpbGRzLiBSZXBvcnRlZCBieQogICd0aG9yJy4KCkRhbmllbCAoMjIgQXByaWwgMjAwMikKLSBUaGUgI2RlZmluZXMgbmFtZXMgc3RhcnRpbmcgd2l0aCBUSU1FQ09ORCBub3cgaGFzIENVUkxfIHByZWZpeGVzLiAoVGhlIG9sZAogIG5hbWVzIGFyZSBzdGlsbCAjZGVmaW5lZCB0b28uKSBQb2ludGVkIG91dCBieSBSb2JlcnQgT2xzb24uCgotIEphY2t5IExhbSBicm91Z2h0IGNvZGUgdGhhdCBsZXRzIHRoZSBuYW1lIHJlc29sdmUgZnVuY3Rpb24gb25seSB1c2UgYXMgbXVjaAogIG1lbW9yeSBhcyBpdCBhY3R1YWxseSBuZWVkcy4gVGhpcyBvbmx5IHdvcmtzIG9uIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMsCiAgYnV0IGlzIHRvdGFsbHkgdHJhbnNwYXJhbnQgdG8gYWxsIHVzZXJzLgoKRGFuaWVsICgxOSBBcHJpbCAyMDAyKQotIEJqb3JuIFJlZXNlIGZpeGVkIHBhY2tfaG9zdGVudCB0byB3b3JrIHByb3Blcmx5IHdpdGggNjQgYml0IHBvaW50ZXJzLgoKRGFuaWVsICgxOCBBcHJpbCAyMDAyKQotIFN0ZXJsaW5nIEh1Z2hlcyBhZGRlZCBjb2RlIHRvIHBydW5lIG9sZCBETlMgY2FjaGUgZW50cmllcywgc2luY2UgSmFja3kgTGFtCiAgZXhwZXJpZW5jZWQgdmVyeSBiaWcgY2FjaGVzLgoKRGFuaWVsICgxNyBBcHJpbCAyMDAyKQotIERpcmsgTWFuc2tlIHBhdGNoZWQgdGhlIDMwMSByZXNwb25zZSB0byB3b3JrIGFnYWluc3QgdGhlIFJGQyBidXQgbW9yZSBsaWtlCiAgY29tbW9uIGJyb3dzZXJzIGRvLiBJZiBhIFBPU1QgZ2V0IGEgMzAxIGJhY2ssIGl0J2xsIHN3aXRjaCB0byBHRVQgaW4gdGhlCiAgbmV4dCByZXF1ZXN0IChpZiBsb2NhdGlvbi1mb2xsb3dpbmcgaXMgZW5hYmxlZCkuCgpEYW5pZWwgKDE2IEFwcmlsIDIwMDIpCi0gRGlyayBNYW5za2UgcG9zdGVkIGEgcGF0Y2ggb3JpZ2luYWxseSB3cml0dGVuIGJ5IEluZ28gV2lsa2VuIHRoYXQgaW50cm9kdWNlZAogIHR3byBuZXcgQ1VSTElORk9fKiB2YWx1ZXM6IENVUkxJTkZPX1JFRElSRUNUX1RJTUUgYW5kCiAgQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQuCgpEYW5pZWwgKDE1IEFwcmlsIDIwMDIpCi0gSm9uYXRhbiBMYW5kZXIgcGF0Y2hlZCB0aGUgdmVyYm9zZSB0ZXh0ICdEaXNhYmxlcyBQT1NULCBnb2VzIHdpdGggR0VUJyB0bwogIHJlZmxlY3QgcmVhbGl0eSBiZXR0ZXIsIGxpa2Ugd2hlbiB0aGUgZmlyc3QgcmVxdWVzdCBpc24ndCBQT1NUIGFuZCB3aGVuCiAgdGhlIHNlY29uZCBpc24ndCBHRVQuLi4gOi0pCgotIENyYWlnIERhdmlzb24gcG9pbnRlZCBvdXQgdGhhdCB3aGVuIGN1cmxfZm9ybWFkZCgpaW5nIGEgZmlsZSB0aGF0IGRvZXNuJ3QKICBleGlzdCwgbGliY3VybCBkb2Vzbid0IHJldHVybiBlcnJvci4gTm93LCBjdXJsX2Vhc3lfcGVyZm9ybSgpIHdpbGwgcmV0dXJuCiAgQ1VSTEVfUkVBRF9FUlJPUiBpZiB0aGF0IGlzIHRoZSBjYXNlLiBUZXN0IDQxIHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcy4KClZlcnNpb24gNy45LjYKCkRhbmllbCAoMTQgQXByaWwgMjAwMikKLSBEaXJrIE1hbnNrZSBicm91Z2h0IGEgZml4IHRoYXQgbWFrZXMgbGliY3VybCBzdHJpcCBvZmYgd2hpdGUgc3BhY2VzIGZyb20gdGhlCiAgYmVnaW5uaW5nIG9mIGNvb2tpZSBjb250ZW50cy4KCi0gSGFkIHRvIHBhdGNoIGluY2x1ZGUvY3VybC9jdXJsLmggc2luY2UgTVNWQyBkb2Vzbid0IHNldCB0aGUgX19TVERDX18gZGVmaW5lLgogIE1vb25lc2FteSBwb2ludGVkIG91dCB0aGUgcHJvYmxlbSwgQmpvcm4gUmVlc2UgdGhlIHNvbHV0aW9uLgoKVmVyc2lvbiA3LjkuNi1wcmU1CgpEYW5pZWwgKDEyIEFwcmlsIDIwMDIpCi0gRml4ZWQgdGhlIFRJTUVSX0NPTk5FQ1QgdG8gYmUgbW9yZSBhY2N1cmF0ZSBmb3IgRlRQIHRyYW5zZmVycy4gUHJldmlvdXNseQogIEZUUCB0cmFuc2ZlcnMgZ290IHRoZSAiY29ubmVjdCBkb25lIiB0aW1lIHNldCBhZnRlciB0aGUgaW5pdGlhbCBGVFAgY29tbWFuZHMKICBhbmQgbm90IGRpcmVjdGx5IGFmdGVyIHRoZSBUQ1AvSVAgY29ubmVjdCBhcyBpdCBzaG91bGQuCgogIEkgYWxzbyBtYWRlIHRoZSB0aW1lIHN0YW1wIGdldCBzZXQgZXZlbiBpZiB0aGUgY29ubmVjdCBpdHNlbGYgZmFpbHMsIHdoaWNoCiAgaXQgZGlkbid0IGRvIHByZXZpb3VzbHkuCgotIEplYW4tUGhpbGlwcGUgQmFycmV0dGUtTGFQaWVycmUgcHJvdmlkZWQgaGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcwogIENVUkxPUFRfREVCVUdGVU5DVElPTiBhbmQgQ1VSTE9QVF9ERUJVR0RBVEEuIFRoZXkgYWxsb3cgYSBwcm9ncmFtIHRvIGEgc2V0IGEKICBjYWxsYmFjayB0byByZWNlaXZlIGRlYnVnL2luZm9ybWF0aW9uIGRhdGEuIFRoYXQgaW5jbHVkZXMgaGVhZGVycyBhbmQgZGF0YQogIHRoYXQgaXMgcmVjZWl2ZWQgYW5kIHNlbnQuIENVUkxPUFRfVkVSQk9TRSBzdGlsbCBjb250cm9scyBpdC4KCiAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgYW4gaW50ZXJuYWwgZGVidWdmdW5jdGlvbiB0aGF0IHdpbGwgbWFrZSB0aGluZ3MgbG9vawogIGFuZCB3b3JrIGFzIGJlZm9yZSBpZiBub3QgY2hhbmdlZC4KCkRhbmllbCAoMTAgQXByaWwgMjAwMikKLSBTZWJhc3RpZW4gV2lsbGVtaWpucyBmb3VuZCBvdXQgdGhhdCAteCBkaWRuJ3QgdXNlIHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyIGFzCiAgaXMgZG9jdW1lbnRlZC4gSXQgZG9lcyBub3cuCgotIGxpYmN1cmwtZXJyb3JzLjMgaXMgYSBuZXcgbWFuIHBhZ2UgYXR0ZW1wdGluZyB0byBkb2N1bWVudCBhbGwgbGliY3VybCBlcnJvcgogIGNvZGVzCgotIEFkZGVkIHR3byBuZXcgZXJyb3IgY29kZXMgYW5kIGNoYW5nZWQgdGhlIGJlaGF2aW91ciBvZiB0d28gb2xkIG9uZXMKICBzbGlnaHRseToKCiAgQ1VSTEVfV1JJVEVfRVJST1IKICAgVGhpcyBlcnJvciB3YXMgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgdGhhdCBvY2N1cmVkIHdoZW4gd3JpdGluZwogICByZWNlaXZlZCBkYXRhIHRvIGEgbG9jYWwgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIHdlIGdldCBwcm9ibGVtcyB3cml0aW5nIGRhdGEKICAgdG8gYSByZW1vdGUgc2VydmVyLiBDVVJMRV9TRU5EX0VSUk9SIGhhcyBub3cgYmVlbiBhZGRlZCBmb3IgdGhlIGxhdHRlcgogICBlcnJvci4KCiAgQ1VSTEVfUkVBRF9FUlJPUgogICBUaGlzIGVycm9yIHdhcyBzaW1pbGFybHkgcmV0dXJuZWQgKmJvdGgqIGZvciBlcnJvcnMgd2hlbiByZWFkaW5nIGEgbG9jYWwKICAgZmlsZSwgYXMgd2VsbCBhcyB3aGVuIGdldHRpbmcgcHJvYmxlbXMgd2hlbiByZWFkaW5nIG5ldHdvcmsgZGF0YS4KICAgQ1VSTEVfUkVDVl9FUlJPUiBoYXMgbm93IGJlZW4gYWRkZWQgZm9yIHRoZSBsYXR0ZXIgZXJyb3IuCgogKFR3byB0ZXN0IGNhc2VzIHdlcmUgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuKQoKRGFuaWVsICg5IEFwcmlsIDIwMDIpCi0gcnVudGVzdHMucGwgbm93IHNldHMgdGhlIEhPTUUgdmFyaWFibGUgYmVmb3JlIHJ1bm5pbmcgY3VybCwgdG8gcHJldmVudCBhbnkKICBhY3R1YWwgfi8uY3VybHJjIGZpbGUgdG8gZm9vbCB0aGUgdGVzdHMhCgpWZXJzaW9uIDcuOS42LXByZTQKCkRhbmllbCAoOCBBcHJpbCAyMDAyKQotIE1pY2hhZWwgQ3VydGlzIHByb3ZpZGVkIG5ldyBmdW5jdGlvbmFsaXR5IGZvciBjdXJsIG9uIHNvbWUgcGxhdGZvcm1zLiBVc2luZwogIHRoZSAtLWVudmlyb25tZW50IG9wdGlvbiwgY3VybCB3aWxsICpzZXQqIGEgYnVuY2ggb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgdG8gdmFsdWVzLiBUaGUgbmFtZXMgYXJlIHRoZSBzYW1lIG9uZXMgYXMgZm9yIHRoZSAtdy8tLXdyaXRlb3V0IG9wdGlvbi4KCiAgRm9yIG5vdywgdGhpcyBvbmx5IHdvcmtzIG9uIHRoZSBSSVNDIE9TIHZlcnNpb24sIGFzIHRoaXMgZmVhdHVyZSByZWxpZXMgb24KICBib3RoIE9TIHN1cHBvcnQgYW5kIHRoYXQgaXQgbWF0Y2hlcyBPUyBwYXJhZGlnbXMuCgotIEphY2t5IExhbSBwcm92aWRlZCBhIGZpeCBmb3IgZ2V0dGluZyBoZWFkZXJzLW9ubHkgd2hlbiB0aGUgcmVwbHkgaXMgSFRUUC8xLjAKICBhbmQgMzA0LCBJIGVkaXRlZCBpdCBzbGlnaHRseS4KCkRhbmllbCAoNSBBcHJpbCAyMDAyKQotIEFzIHJlcXVlc3RlZCBieSBKYXkgR3JhdmVzLCB0aGUgJy5jdXJscmMnIGZpbGUgKG9yIF9jdXJscmMgYXMgaXQgaXMgY2FsbGVkCiAgd2hlbiB1c2VkIGluIHdpbmRvd3MpLCBpcyBub3cgbG9hZGVkIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIHRoZSBIT01FCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXNuJ3Qgc2V0IChvciBpZiBpdCBpcyB0b28gbG9uZykuIEkgYWxzbyBlbmxhcmdlZCB0aGUKICBhcnJheSB1c2VkIHRvIHN0b3JlIHRoZSBmdWxsIGZpbGUgcGF0aCBpbiwgdG8gNTEyIGJ5dGVzLgoKLSBLZXZpbiBSb3RoIHBvaW50ZWQgb3V0IHRvIG1lIHdoeSB0aGUgIjE5IE1hcmNoIiBjaGFuZ2UgcmVnYXJkaW5nIC1HIGFuZCAtSQogIHdhcyBzdHVwaWQgYW5kIHRoZSBjaGFuZ2Ugd2FzIHJldmVydGVkLiBBZGRlZCB0ZXN0IGNhc2UgNDggdG8gdmVyaWZ5IHRoZQogIGZ1bmN0aW9uYWxpdHkuCgpWZXJzaW9uIDcuOS42LXByZTMKCkRhbmllbCAoNCBBcHJpbCAyMDAyKQotIEpvbmF0YW4gTGFuZGVyIGJyb3VnaHQgYSBwYXRjaCB0aGF0IG1ha2VzIGN1cmwvY3VybC5oIGNvbXBpbGUgbmljZWx5IG9uCiAgcHJlLUlTTyBjb21waWxlcnMsIGxpa2Ugd2hlbiB1c2luZyBnY2MgLXRyYWRpdGlvbmFsLgoKRGFuaWVsICgzIEFwcmlsIDIwMDIpCi0gSmFja3kgTGFtIGlkZW50aWZpZWQgYSBnbGl0Y2ggd2hlbiBnZXR0aW5nIGhlYWRlcnMtb25seSwgd2hlcmUgbGliY3VybCB3b3VsZAogICJoYW5nIiAxIHNlY29uZCBpbiB2YWluIGluIHRoZSBzZWxlY3QoKSBsb29wIGJlZm9yZSByZXR1cm5pbmcgYmFjay4KCi0gVG9yIEFybnRzZW4gYnJvdWdodCBhIHBhdGNoIGZvciBtdWx0aXBhcnQgZm9ybXBvc3RzLiBJdCB0dXJuZWQgb3V0IHRoYXQgdGhlCiAgIkNHSV9MaXRlIFBlcmwgcGFja2FnZSIgbWFrZXMgc29tZSBiYWQgYXNzdW1wdGlvbnMgb24gd2hhdCBsZXR0ZXJzIHRoYXQgbWF5CiAgYmUgdXNlZCBpbiBib3VuZGFyeSBzdHJpbmdzIGFuZCB0aHVzIGN1cmwgY291bGQgY29uZnVzZSBpdCBieSBpbmNsdWRpbmcgJysnCiAgYW5kICcvJy4gV2hpbGUgdGhpcyBpcyBzdGFuZGFyZHMtY29tcGxpYW50LCB3ZSBjaGFuZ2UgdGhlIGJlaGF2aW9yIHRvIHdvcmsKICBzbW9vdGhseSB3aXRoIGV4aXN0aW5nIHNvZnR3YXJlIGJhc2VkIG9uIHRoYXQgcGFja2FnZS4KCkRhbmllbCAoMiBBcHJpbCAyMDAyKQotIEdlcmhhcmQgSGVycmUgZmlsZWQgYnVnIHJlcG9ydCAjNTM2MjM4IHdoZXJlIGhlIHBvaW50ZWQgb3V0IGEgY3Jhc2ggaW4KICB2ZXJib3NlIEZUUCBwYXNzaXZlIHRyYW5zZmVycyBmb3IgQUlYLgoKLSBDbGFyZW5jZSBHYXJkbmVyIHBvaW50ZWQgb3V0IGEgbWlub3IgZmxhdyBpbiBob3cgbGliY3VybCBkaWRuJ3QgcHJvcGVybHkKICB0YWtlIGNhcmUgb2YgYWxsIGVycm9ycyB0aGF0IFNTTF9yZWFkKCkgY291bGQgcmV0dXJuLgoKLSBKYWNreSBMYW0gZml4ZWQgYSBNQUxMT0NERUJVRyBwcm9ibGVtIGluIGxpYi9nZXRpbmZvLmMKCkRhbmllbCAoMjcgTWFyY2ggMjAwMikKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IGEgZmxhdyBpbiB0aGUgY29ubmVjdGlvbiByZS11c2UgZnVuY3Rpb24gdGhhdCBkaWRuJ3QKICBjaGVjayBwcm94eSBjb25uZWN0aW9ucyBwcm9wZXJseSBmb3IgImRlYWRuZXNzIiBiZWZvcmUgdGhleSB3ZXJlIHJlLXVzZWQuCgotIFBlZHJvIE5ldmVzIGZvdW5kIG91dCB0aGF0IEhUVFAgUE9TVGluZyB3aXRoIC0tZGF0YS1iaW5hcnkgZGlkIG5vdCBwcm9wZXJseQogIHdvcmsgdW5kZXIgV2luZG93cyBhcyB0aGUgZmlsZSBzcGVjaWZpZWQgd2Fzbid0IHJlYWQgZnVsbHkgYmluYXJ5IQoKRGFuaWVsICgyNSBNYXJjaCAyMDAyKQotIEphY2t5IExhbSBicm91Z2h0IGEgZml4IHRoYXQgaW1wcm92ZXMgdHJlYXRtZW50IG9mIGNvb2tpZXMgdXNpbmcgaWRlbnRpY2FsCiAgZG9tYWlucyBidXQgd2l0aCBsZWFkaW5nIGRvdHMgcHJvcGVybHkuCgpEYW5pZWwgKDIyIE1hcmNoIDIwMDIpCi0gTWlrbG9zIE5lbWV0aCB1cGRhdGVkIHRoZSB3aW5kb3dzIHNlY3Rpb24gb2YgdGhlIGRvY3MvSU5TVEFMTCBmaWxlIGFuZCB0aGUKICB3aW5kb3dzIG1ha2VmaWxlcy4KCi0gSm9uIERpbGxvbiBwcm92aWRlZCB1cyB3aXRoIHNldmVyYWwgZ29vZC1sb29raW5nIGN1cmwgaW1hZ2VzIGZvcgogIHByb21vdGlvbi4gVmlldyB0aGVtIGhlcmUgaHR0cDovL2N1cmwuaGF4eC5zZS9pY29ucy5odG1sCgpEYW5pZWwgKDIwIE1hcmNoIDIwMDIpCi0gUGV0ZXIgVmVyaGFzIGZvdW5kIG91dCB0aGF0IENSTEYgcmVwbGFjZW1lbnQgaW4gdXBsb2FkcyB3YXMgbm90IHdvcmtpbmcuIEkKICBmaXhlZCBpdCwgYW5kIGFkZGVkIHRlc3QgY2FzZSAxMjggdGhhdCB2ZXJpZmllcyB0aGUgZnVuY3Rpb25hbGl0eS4KCi0gVGhlIGxpc3QgZm9ybWVybHkga25vd24gYXMgY3VybC1tYWluIGlzIG5vdyBuYW1lZCBjdXJsLXVzZXJzIGFuZCBpcyBob3N0ZWQKICBieSBzb3VyY2Vmb3JnZS4gU3VzYmNyaWJlIHRvIHRoZSBuZXcgbGlzdCwgZ2V0IG9mZiB0aGUgb2xkIG9uZS4KClZlcnNpb24gNy45LjYtcHJlMgoKRGFuaWVsICgxOSBNYXJjaCAyMDAyKQotIE1hZGUgLUcgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBjYXVzZSBhbiBlcnJvci4KCi0gTW92ZWQgdGhlIG11bHRpLmggZmlsZSB0byB0aGUgInB1YmxpYyIgaW5jbHVkZSBkaXJlY3RvcnkgYW5kIG1hZGUgaXQgZ2V0CiAgaW5jbHVkZWQgYnkgY3VybC5oIHNvIHRoYXQgbm8gZXh0cmEgaW5jbHVkZSBmaWxlcyB3aWxsIGJlIG5lY2Vzc2FyeSB0byB1c2UKICBpdC4KCiAgQWRkZWQgZG9jcyBhbmQgbWFuIHBhZ2VzIGZvciB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUuCiAgQWRkZWQgdGhlIHRocmVlIGV4YW1wbGUgc291cmNlIGNvZGVzIHRvby4KCiAgTmVjZXNzYXJ5IHN0ZXBzIGluIG15IGNhbXBhaWduIHRvIHNuZWFrIGluIHRoZSBtdWx0aSBpbnRlcmZhY2UuLi4gOy0pCgotIFVwZGF0ZWQgdGhlIHllYXIgaW4gYWxsIGNvcHlyaWdodCBub3RpY2VzIGluIGFsbCBDIGFuZCBIIGZpbGVzLgoKRGFuaWVsICgxOCBNYXJjaCAyMDAyKQotIFRvbWFzIFN6ZXBlIGZvdW5kIG91dCB0aGF0IC1kIGFuZCAtRyBkaWRuJ3QgbWl4IGFzIHRoZXkgc2hvdWxkLiBJIGJyb2tlIHRoaXMKICBpbiA3LjkuNS4uLiBBZGRlZCB0ZXN0IGNhc2UgMzIgZm9yIHRoaXMuCgpWZXJzaW9uIDcuOS42LXByZTEKCkRhbmllbCAoMTYgTWFyY2ggMjAwMikKLSBQZXRlciBWZXJoYXMgcG9pbnRlZCBvdXQgdGhhdCB0aGUgY3VybF9lc2NhcGUgYW5kIGN1cmxfdW5zY2FwZSBtYW4gcGFnZXMKICBjb250YWluZWQgZmFjdHVhbCBlcnJvcnMuCgotIEFsYmVydCBDaG95IGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBwcm9ibGVtIHdpdGggdGhlIHZlcmJvc2Ugb3V0cHV0IHdoZW4gZG9pbmcKICBQQVNWIGZ0cCB0cmFuc2ZlcnMuIEl0IGNvdWxkIG1ha2UgbGliY3VybCBjcmFzaC4KCiAgRGV0YWlscyBpbiBidWcgcmVwb3J0ICM1MzA1NjI6CiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTEwMDk3NiZhaWQ9NTMwNTYyJmdyb3VwX2lkPTk3NgoKRGFuaWVsICgxNSBNYXJjaCAyMDAyKQotIEp1bi1pY2hpcm8gaXRvanVuIEhhZ2lubyBmaWxlZCBidWcgcmVwb3J0ICM1MzAyMDQgdGhhdCBjbGVhcmx5IHBvaW50ZWQgb3V0CiAgdGhlIFBGX0lORVQgZml4IGZyb20gRmVicnVhcnkgMTkgYXMgYSBub3QtdmVyeS1nb29kIGZpeCBhcyBpdCBicm9rZSBJUHY2CiAgY2FwYWJpbGl0eSEgVGhhdCBwYXRjaCBpcyBub3cgcmV2ZXJ0ZWQuCgogIFRoZSBwcm9ibGVtIHdpdGggc2xvdyBuYW1lIGxvb2t1cHMgd2l0aCBnZXRhZGRyaW5mbygpIG9uIG5vbi1JUHY2IGVuYWJsZWQKICBob3N0cyBhcmUgaW5zdGVhZCBtYWRlIGJ5IGZpcnN0IGNoZWNraW5nIGlmIHRoZSBzdGFjayBpcyBJUHY2LWVuYWJsZWQgYW5kIGlmCiAgbm90LCB0aGUgUEZfSU5FVCBpcyB1c2VkIGFuZCBvdGhlcndpc2Ugd2UgZ28gd2l0aCB0aGUgZnVsbCBQRl9VTlNQRUMuCgotIFQuIEJoYXJhdGggcG9pbnRlZCBvdXQgdGhhdCB3aGVuIHdlIHJldHVybiBhbiAiZXJyb3IiIGZyb20gYSBXUklURUZVTkNUSU9OCiAgYXMgZGVzY3JpYmVkIGluIHRoZSBtYW4gcGFnZSwgbGliY3VybCBkaWQgbm90IHJldHVybiB0aGUgZG9jdW1lbnRlZCBlcnJvcgogIGNvZGUgKENVUkxFX1dSSVRFX0VSUk9SKSBidXQgd291bGQgaW5zdGVhZCByZXR1cm4gQ1VSTEVfUkVBRF9FUlJPUi4gVGhpcyBpcwogIG5vdyBjb3JyZWN0ZWQuCgpEYW5pZWwgKDE0IE1hcmNoIDIwMDIpCi0gU2V0dGluZyBDVVJMT1BUX1BPU1Qgd2l0aG91dCBzZXR0aW5nIENVUkxPUFRfUE9TVEZJRUxEUyBub3cgcmVhZCB0aGUgUE9TVC0KICBkYXRhIGZyb20gdGhlIGNhbGxiYWNrLgoKLSBUaGUgR09QSEVSIHN1cHBvcnQgc2VlbXMgdG8gYmUgYnJva2VuLiBJIGRvbid0IHRoaW5rIEknbGwgZXZlbiBzdGFydCBmaXhpbmcKICBpdCB1bnRpbCBzb21lb25lIGVsc2UgZmluZHMgb3V0Li4uIDotKQoKRGFuaWVsICgxMyBNYXJjaCAyMDAyKQotIFRyeWluZyAnY3VybCAtSSBmdHAuc3VuZXQuc2UnIG9yIHNpbWlsYXIgZGlkIGEgU0laRSBvbiBhIHNpbGx5ICIobmlsKSIKICBzdHJpbmcuIElmIHN1Y2ggYSBmaWxlIHdvdWxkIGJlIHByZXNlbnQsIGN1cmwgcmV0dXJuZWQgdGhlIHNpemUgb2YgaXQhIE5vdwogIHdlIHByZXZlbnQgdGhpcy4KCi0gQ3VybF9zZW5kZigpIHdhcyBmaXhlZCB0byBkZWFsIHdpdGggc2l0dWF0aW9uIHdoZXJlIEN1cmxfd3JpdGUoKSB3b3VsZCd2ZQogIGJsb2NrZWQgYW5kIHRodXMgcmV0dXJuIC0xLgoKLSBTZXR0aW5nIENVUkxPUFRfUFJPR1JFU1NGVU5DVElPTiB0byBOVUxMIG5vdyByZXN0b3JlcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24uCgotIEFsbCBDVVJMRk9STV8qIG9wdGlvbnMgY2FuIG5vdyBiZSB1c2VkIGluIGEgQ1VSTEZPUk1fQVJSQVkgZXhjZXB0IHRoZQogIENVUkxGT1JNX0FSUkFZIGl0c2VsZi4gVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIHdlIGNvdWxkbid0IGV4cGFuZCB0aGUKICBDVVJMRk9STV8qIGxpc3QgcHJvcHJlbHkgYW5kIHVucmVzdHJpY3RlZCB1bnRpbCB0aGlzIHdhcyB0aGUgY2FzZS4gSXQgd2FzCiAgYWxzbyBhIGJpdCBwZWN1bGlhciB0byB1c2VycyB3aHkgc29tZSBvcHRpb25zIGNvdWxkIGJlIHVzZWQgaW4gYW4gYXJyYXkKICB3aGlsZSBvdGhlcnMgY291bGRuJ3QuCgotIFJlbW92ZWQgc29tZSBzaWxseSBDUkxGIGxpbmVzIHRoYXQgaGFkIGFjY2lkZW50YWxseSBzbGlwcGVkIGludG8gc3JjL21haW4uYwogIE5pY28gQmFnZ3VzIHBvaW50ZWQgdGhlbSBvdXQgdG8gbWUuCgpEYW5pZWwgKDExIE1hcmNoIDIwMDIpCi0gQ1VSTEZPUk1fRklMRU5BTUUgd2FzIGFkZGVkLiBUaGlzIGNhbiBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIGZpbGUgdXBsb2FkCiAgcGFydCwgdG8gc2V0IHRoZSAnZmlsZW5hbWUnIGZpZWxkIHRvIGEgY3VzdG9tIHZhbHVlLiBJZiB0aGlzIGlzbid0IHVzZWQsCiAgdGhlIGFjdHVhbGx5IHVzZWQgZmlsZW5hbWUgd2lsbCBiZSBpbmNsdWRlZCBpbnN0ZWFkIChhcyBsaWJjdXJsIGFsd2F5cyBoYXMKICBkb25lKS4gY3VybCB3YXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHksIGFuZCBub3cgLUYgYWNjZXB0cyBhICdmaWxlbmFtZT0nIGZpZWxkCiAgdG9vLCBhbmQgYWxsb3dzIGNvbnN0cnVjdHMgc3VjaCBhczoKCiAgICAtRiAnbmFtZT1AZmlsZW5hbWU7ZmlsZW5hbWU9L2Rldi9udWxsJwoKICBhbmQgdGhpcyBjYW4gYmUgY29tYmluZWQgd2l0aCB0eXBlPSB0b28sIGluIGEgbWFubmVyIHNpbWlsYXIgdG86CgogICAtRiAiZmlsZT1AbG9nL3Rlc3QzOS50eHQ7ZmlsZW5hbWU9ZmFrZXJmaWxlO3R5cGU9bW9vL2Zvb2JhciIKCiAgVGVzdCBjYXNlIDM5IHdhcyBhZGRlZCB0byB2ZXJpZnkgdGhpcyBmdW5jdGlvbmFsaXR5LgoKLSBUaGUgc3RydWN0IGZvcm1lcmx5IGtub3duIGFzIEh0dHBQb3N0IGlzIG5vdyBuYW1lZCBjdXJsX2h0dHBwb3N0IHRvIHByb3Blcmx5CiAgdXNlIHRoZSBjdXJsIG5hbWUgc3BhY2UuIEkgYWRkZWQgYSAjZGVmaW5lIGZvciB0aGUgb2xkIG5hbWUgdG8gbWFrZSBleGlzdGluZwogIHByb2dyYW1zIGNvbXBpbGUgZXZlbiB3aGVuIHRoaXMgbmV3IGluY2x1ZGUgZmlsZSBpcyB1c2VkLgoKRGFuaWVsICg4IE1hcmNoIDIwMDIpCi0gQ2xpZmZvcmQgYWxzbyBkaXNjb3ZlcmVkIHRoYXQgaWYgdGhlIGNsaWVudCBjb2RlIGZhaWxlZCBlYXJseSwgYXMgd2hlbiBkb2luZwogICJjdXJsIC1PIiBvbmx5LCBpdCB3b3VsZCBkbyBmY2xvc2UoTlVMTCkgd2hpY2ggY2F1c2VkIGEgc2VnbWVudGF0aW9uIGZhdWx0CiAgb24gc29tZSBzeXN0ZW1zLgoKLSBDbGlmZm9yZCBXb2xmIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWRlIC0tcHJvZ3Jlc3MtYmFyIHdvcmsgYWdhaW4uCgotIEkgY2xvc2VkIGJ1ZyByZXBvcnQgIzUyNzAzMiBieSBtYWtpbmcgc3VyZSB0aGF0IHdlIGFkZCBhIG5ld2xpbmUgYWZ0ZXIgYQogIHRyYW5zZmVyIHdoZW4gLS1wcm9ncmVzcy1iYXIgaGFzIGJlZW4gdXNlZC4gQmVmb3JlLCB3aXRob3V0IHRoZSBuZXdsaW5lLCBpdAogIG1hZGUgdGhlIHN1YnNlcXVlbnQgdGV4dCBjb21lIG91dCB3cm9uZy4KClZlcnNpb24gNy45LjUKCkRhbmllbCAoNyBNYXJjaCAyMDAyKQotIEFkZGVkIGRvY3MvS05PV05fQlVHUyB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKRGFuaWVsICg2IE1hcmNoIDIwMDIpCi0gS2V2aW4gUm90aCBjb3JyZWN0ZWQgYSBmbGF3IGluIHRoZSBjdXJsIGNsaWVudCBnbG9iYmluZyBjb2RlIHRoYXQgbWFkZSBpdAogIG1lc3MgdXAgYmFja3NsYXNoZXMuIFRoaXMgd2FzIG1vc3Qgbm90YWJsZSBvbiB3aW5kb3dzIChjeWd3aW4pIG1hY2hpbmVzIHdoZW4KICB1c2luZyBmaWxlOi8vLgoKLSBCcmFkIHByb3ZpZGVkIGFub3RoZXIgZml4IGZvciBidWlsZGluZyBvdXRzaWRlIHRoZSBzb3VyY2UtdHJlZS4KCi0gUmFscGggTWl0Y2hlbGwgcGF0Y2hlZCBhd2F5IGEgZmV3IGNvbXBpbGVyIHdhcm5pbmdzIGluIHRlc3RzL3NlcnZlci9zd3MuYwoKRGFuaWVsICg1IE1hcmNoIDIwMDIpCi0gSSBub3RpY2VkIHRoYXQgdGhlIHR5cGVkZWYgaW4gY3VybC5oIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgcHJvdG90eXBlIHdhcwogIHdyb25nIGFuZCB0aHVzIGFwcGxpY2F0aW9ucyB0aGF0IHVzZWQgaXQgd291bGQgbm90IGdldCB0aGUgcHJvcGVyIGlucHV0CiAgZGF0YS4gSXQgdXNlZCBzaXplX3Qgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHVzZXMgZG91YmxlcyEKCiAgSSB3aXNoIEkgY291bGQgYmxhbWUgc29tZW9uZSBlbHNlLCBidXQgdGhpcyB3YXMgbXkgZmF1bHQuIEFnYWluLgoKVmVyc2lvbiA3LjkuNS1wcmU2CgpEYW5pZWwgKDQgTWFyY2ggMjAwMikKLSBDdXQgb2ZmIHRoZSBjaGFuZ2VzIGRvbmUgZHVyaW5nIDIwMDEgZnJvbSB0aGlzIGNoYW5nZWxvZyBmaWxlIGFuZCBwdXQgdGhlbQogIGluIGEgc2VwYXJhdGUgZmlsZSAoQ0hBTkdFUy4yMDAxKSwgYXZhaWxhYmxlIGZyb20gQ1ZTIG9mIGNvdXJzZS4KCi0gSSByZW1vdmVkIHRoZSBtdWx0aSBkaXJlY3RvcnkuIFRoZSBleGFtcGxlIHNvdXJjZXMgd2VyZSBtb3ZlZCB0byB0aGUKICBkb2NzL2V4YW1wbGVzIGRpcmVjdG9yeSB3aGVyZSB0aGV5IGJlbG9uZy4KCi0gV3JvdGUgNyBuZXcgbWFuIHBhZ2VzIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbnMgaW4gdGhlIG5ldyBtdWx0aSBpbnRlcmZhY2UuCiAgVGhleSdyZSBhbGwgc3RpbGwgcHJldHR5IGJhc2ljLCBidXQgd2UgY2FuIHVzZSB0aGVtIGFzIGEgc3RhcnQgYW5kIGFkZCBtb3JlCiAgY29udGVudHMgdG8gdGhlbSB3aGVuIHdlIGZpZ3VyZSBvdXQgd2hhdCB0byB3cml0ZS4gVGhlIGxhcmdlIGFtb3VudCBvZiBtYW4KICBwYWdlcyBmb3IgbGliY3VybCBub3cgcHJlc2VudCBtYWRlIG1lIGRlY2lkZSB0byBwdXQgdGhlbSBpbiBhIG5ldyBzZXBhcmF0ZQogIHN1YmRpcmVjdG9yeSBpbiB0aGUgZG9jcyBkaXJlY3RvcnkuIE5hbWVkIGxpYmN1cmwuCgotIEdpdXNlcHBlIENvcmJlbGxpIHByb3ZpZGVkIGEgdGVtcGxhdGUgZmlsZSBmb3IgdGhlIEVQTSBwYWNrYWdlIG1hbmFnZXIsIGl0CiAgZ2V0cyBnZW5lcmF0ZWQgbmljZWx5IGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0IG5vdy4KClZlcnNpb24gNy45LjUtcHJlNQoKRGFuaWVsICgxIE1hcmNoIDIwMDIpCi0gTW92ZWQgdGhlIG1lbWFuYWx5emUucGwgc2NyaXB0IGludG8gdGhlIHRlc3RzLyBkaXIgYW5kIGFkZGVkIGl0IHRvIHRoZQogIHJlbGVhc2UgYXJjaGl2ZXMuIEl0IHdhcyBwcmV2aW91c2x5IG9ubHkgcHJlc2VudCBpbiB0aGUgQ1ZTIHRyZWUuCgotIE1vZGlmaWVkIHRoZSBGZWJydWFyeSAxN3RoIEhvc3Q6IGZpeCwgYXMgYnVnIHJlcG9ydCAjNTIzNzE4IHBvaW50ZWQgb3V0IHRoYXQKICBpdCBjYXVzZWQgY3Jhc2hlcyEKCi0gTmljbyBCYWdndXMgYWRkZWQgbW9yZSBlcnJvciBjb2RlcyB0byB0aGUgVk1TIHN0dWZmLgoKLSBXZXNsZXkgTGF4dG9uIGJyb3VnaHQgdGhlIGNvZGUgdGhhdCBpbnRyb2R1Y2VkIHRoZSBuZXcgQ1VSTE9QVF9QUkVRVU9URQogIG9wdGlvbi4gSXQgaXMganVzdCBhbm90aGVyIEZUUCBxdW90ZSBvcHRpb24gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeQogIGEgbGlzdCBvZiBGVFAgY29tbWFuZHMgdG8gaXNzdWUgKmp1c3QgYmVmb3JlKiB0aGUgdHJhbnNmZXIgY29tbWFuZCAoUkVUUiBvcgogIFNUT1IgZXRjKS4gSXQgaGFzIHR1cm5lZCB1cCBhIGZldyBzeXN0ZW1zIHRoYXQgcmVhbGx5IG5lZWQgdGhpcy4KCiAgVGhlIGN1cmwgY29tbWFuZCBsaW5lIHRvb2wgY2FuIGFsc28gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBieSBwcmVmaXhpbmcgdGhlCiAgcXVvdGUgY29tbWFuZHMgd2l0aCBhIHBsdXMgKCspIGluIHNpbWlsYXIgc3R5bGUgdGhhdCBwb3N0IHRyYW5zZmVyIHF1b3RlCiAgY29tbWFuZHMgYXJlIHNwZWNpZmllZC4KCiAgVGhpcyBpcyBub3QgeWV0IGRvY3VtZW50ZWQuIFRoZXJlIGlzIG5vIHRlc3QgY2FzZSBmb3IgdGhpcyB5ZXQuCgpEYW5pZWwgKDI4IEZlYnJ1YXJ5IDIwMDIpCi0gUmFscGggTWl0Y2hlbGwgbWFkZSBzb21lIHNlcmlvdXMgZWZmb3J0cyBhbmQgcHV0IGEgbG90IG9mIHN3ZWF0IGluIHNldHRpbmcKICB1cCBzY3JpcHRzIGFuZCB0aGluZ3MgZm9yIG1lIHRvIGJlIGFibGUgdG8gcmVwZWF0IGhpcyBwcm9ibGVtcywgYW5kIEkKICBmaW5hbGx5IGNvdWxkLiAgSSBmb3VuZCBhIHByb2JsZW0gd2l0aCB0aGUgaGVhZGVyIGJ5dGUgY291bnRlciB0aGF0IHdhc24ndAogIGluY3JlYXNlZCBwcm9wZXJseSBhbmQgdGh1cyB3ZSBjb3VsZCByZXR1cm4gQ1VSTEVfR09UX05PVEhJTkcgd2hlbiB3ZSBpbgogIGZhY3QgaGFkIHJlY2VpdmVkIGRhdGEuCgpEYW5pZWwgKDI3IEZlYnJ1YXJ5IDIwMDIpCi0gSSBoYWQgdG8gcmV2ZXJ0IHRoZSBub24tc3BhY2UgcGFyc2luZyBjb29raWUgZml4IEkgcG9zdGVkIHRvIHRoZSBtYWlsaW5nCiAgbGlzdC4gRXhwaXJlIGRhdGVzIGRvIGhhdmUgc3BhY2VzIGFuZCBzdGlsbCBuZWVkIHRvIGdldCBwYXJzZWQgcHJvcGVybHkhCiAgSW5zdGVhZCB3ZSBqdXN0IGlnbm9yZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSBhbmQgaXQgc2VlbXMgdG8gd29yay4uLgoKRGFuaWVsICgyNiBGZWJydWFyeSAyMDAyKQotIE1hZGUgdGhlIGNvb2tpZSBwcm9wZXJ0eSAnTWF4LUFnZScgd29yaywganVzdCBzaW5jZSB3ZSBhbHJlYWR5IHRyaWVkIHRvCiAgc3VwcG9ydCBpdCwgaXQgaXMgYmV0dGVyIHRvIGRvIGl0IHJpZ2h0LiBObyBvbmUgdXNlcyB0aGlzIGFueXdheS4KCi0gVGhlIGNvb2tpZSBwYXJzZXIgY291bGQgY3Jhc2ggaWYgYSByZWFsbHkgd2VpcmQgKGlsbGVnYWwpIGNvb2tpZSBsaW5lIHdhcwogIHJlY2VpdmVkLiBJIGFsc28gbWFkZSBpdCBiZXR0ZXIgZGlzY2FyZCByZWFsbHkgb2RkbHkgZm9ybWF0dGVkIGxpbmVzIGJldHRlci4KCiAgTWFkZSB0aGUgY29va2llIGphciBzdG9yZSB0aGUgc2Vjb25kIGZpZWxkIGZyb20gdGhlIGxlZnQgdXNpbmcgdGhlIHN5bnRheAogIHRoYXQgTmV0c2NhcGUgYW5kIE1vemlsbGEgcHJvYmFibHkgbGlrZS4gQ3VybCBpdHNlbGYgaWdub3JlcyBpdC4KCiAgQWRkZWQgdGVzdCBjYXNlIDMxIGZvciB0aGVzZSBjYXNlcy4KCiAgQ2xheSBMb3ZlbGVzcycgZW1haWwgcmVnYXJkaW5nIHNvbWUgY29va2llIGlzc3VlcyBzdGFydGVkIG15IGNsZWFudXAuCgotIEtldmluIFJvdGggcG9pbnRlZCBvdXQgdGhhdCBteSBhdXRvbWFrZSBmaWRkbGVzIGJyb2tlIHRoZSBhYmlsaXR5IHRvIGJ1aWxkCiAgb3V0c2lkZSB0aGUgc291cmNlLXRyZWUgYW5kIEkgcG9zdGVkIGEgcGF0Y2ggdG8gdGhlIG1haWxpbmcgbGlzdCB0aGF0IGJyaW5ncwogIHRoaXMgYWJpbGl0eSBiYWNrLgoKVmVyc2lvbiA3LjkuNS1wcmU0CgpEYW5pZWwgKDI1IEZlYnJ1YXJ5IDIwMDIpCi0gRmlkZGxlZCB3aXRoIHRoZSBhdXRvbWFrZSBmaWxlcyB0byBtYWtlIGFsbCBzb3VyY2UgZmlsZXMgaW4gdGhlIGxpYgogIGRpcmVjdG9yeSBub3QgaGF2ZSAuLi9zcmMgaW4gdGhlIGluY2x1ZGUgcGF0aCwgYW5kIHRoZSBzcmMgc291cmNlcyBzaG91bGRuJ3QKICBoYXZlIC4uL2xpYiEKCi0gQWxsIDc5IHRlc3QgY2FzZXMgcmFuIE9LIHVuZGVyIExpbnV4IGFuZCBTb2xhcmlzIHVzaW5nIHRoZSBuZXcgSFRUUCBzZXJ2ZXIKICBpbiB0aGUgdGVzdCBzdWl0ZS4gVGhlIG5ldyBIVFRQIHNlcnZlciB3YXMgZmlyc3QgZG9uYXRlZCBieSBHZW9yZyBIb3JuIGFuZAogIHN1YnNlcXVlbnRseSBtb2RpZmllZCB0byB3b3JrIHdpdGggdGhlIHRlc3Qgc3VpdGUuIEl0IGlzIGN1cnJlbnRseSBzdGlsbCBub3QKICBwb3J0YWJsZSBlbm91Z2ggdG8gcnVuIG9uICJhbGwgb3ZlciIgYnV0IHRoaXMgaXMgYSBzdGFydCBhbmQgSSBjYW4gcnVuIGFsbAogIGN1cmwgdGVzdHMgb24gbXkgbWFjaGluZXMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHJlcXVpcmVtZW50IGZvciB0aGUgdXBjb21pbmcKICBwdWJsaWMgcmVsZWFzZS4KCi0gVXNpbmcgLWQgYW5kIC1JIG9uIHRoZSBzYW1lIGNvbW1hbmQgbGluZSBub3cgcmVwb3J0cyBhbiBlcnJvciwgYXMgaXQgaW1wbGllcwogIHR3byBkaWZmZXJlbnQgSFRUUCByZXF1ZXN0cyB0aGF0IGNhbid0IGJlIG1peGVkLgoKLSBKZWZmcmV5IFBvaGxtZXllciBwcm92aWRlZCBhIHBhdGNoIHRoYXQgbWFkZSB0aGUgLXcvLS13cml0ZS1vdXQgb3B0aW9uCiAgc3VwcG9ydCAle2NvbnRlbnRfdHlwZX0gdG8gZ2V0IHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHJlY2VudCBkb3dubG9hZC4KCi0gS2V2aW4gUm90aCByZXBvcnRlZCB0aGF0IHByZTIgYW5kIHByZTMgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkgb24gY3lnd2luLAogIGFuZCB0aGlzIHdhcyBiZWNhdXNlIEkgdXNlZCAjaWZkZWYgSEFWRV9XSU5TT0NLX0ggaW4gbGliL211bHRpLmggdG8gZmlndXJlCiAgb3V0IGlmIHdlIGNvdWxkIGluY2x1ZGUgd2luc29jay5oIHdoaWNoIHR1cm5zIG91dCBub3QgdG8gYmUgYSB3aXNlIGNob2ljZSB0bwogIGRvIG9uIGN5Z3dpbiBzaW5jZSBpdCBoYXMgdGhlIGZpbGUgYnV0IGNhbid0IGluY2x1ZGUgaXQhCgpEYW5pZWwgKDIyIEZlYnJ1YXJ5IDIwMDIpCi0gQWRkZWQgc3JjL2NvbmZpZy12bXMuaCB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgoKLSBGaXhlZCB0aGUgY29ubmVjdGlvbiB0aW1lb3V0IHZhbHVlIGFnYWluLCB0aGUgY2hhbmdlIGZyb20gRmVicnVhcnkgMTggd2Fzbid0CiAgY29tcGxldGUuCgpWZXJzaW9uIDcuOS41LXByZTMKCkRhbmllbCAoMjEgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGFuZCBBbmRy6XMgR2FyY+1hIGJvdGggZm91bmQgb3V0IHRoYXQgbGliL2NvbmZpZy5oLmluIHdhcyBtaXNzaW5nCiAgaW4gdGhlIHByZS1yZWxlYXNlIGFyY2hpdmUgYW5kIHRodXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmFpbGVkLgoKVmVyc2lvbiA3LjkuNS1wcmUyCgpEYW5pZWwgKDIwIEZlYnJ1YXJ5IDIwMDIpCi0gQW5kculzIEdhcmPtYSBwcm92aWRlZCBhIHNvbHV0aW9uIHRvIGJ1ZyByZXBvcnQgIzUxNTIyOC4gdGhlIHRvdGFsIHRpbWUKICBjb3VudGVyIHdhcyBub3Qgc2V0IGNvcnJlY3RseSB3aGVuIC1JIHdhcyB1c2VkIGR1cmluZyBzb21lIGNvbmRpdGlvbnMgKGFsbAogIGhlYWRlcnMgd2VyZSByZWFkIGluIG9uZSBzaW5nbGUgcmVhZCkuCgotIE5pY28gQmFnZ3VzIHByb3ZpZGVkIGEgaHVnZSBwYXRjaCB3aXRoIG1pbm9yIHR3ZWFrcyBhbGwgb3ZlciB0byBtYWtlIGN1cmwKICBjb21waWxlIG5pY2VseSBvbiBWTVMuCgpEYW5pZWwgKDE5IEZlYnJ1YXJ5IDIwMDIpCi0gUmljayBSaWNoYXJkc29uIGZvdW5kIG91dCB0aGF0IGJ5IHJlcGxhY2luZyBQRl9VTlNQRUMgd2l0aCBQRl9JTkVUIGluIHRoZQogIGdldGFkZHJpbmZvKCkgY2FsbHMsIGhlIGNvdWxkIHNwZWVkIHVwIHNvbWUgbmFtZSByZXNvbHZpbmcgY2FsbHMgd2l0aCBhbgogIG9yZGVyIG9mIG1hZ25pdHVkZXMgb24gaGlzIFJlZGhhdCBMaW51eCA3LjIuCgotIFBoaWxpcCBHbGFkc3RvbmUgZm91bmQgYSBzZWNvbmQgSU5BRERSX05PTkUgcHJvYmxlbSB3aGVyZSB3ZSB1c2VkIGxvbmcKICBpbnRlYWQgb2YgaW5fYWRkcl90IHdoaWNoIGNhdXNlZCA2NGJpdCBwcm9ibGVtb3MuIFdlIHJlYWxseSBzaG91bGRuJ3QgZGVmaW5lCiAgdGhhdCBvbiB0d28gZGlmZmVyZW50IHBsYWNlcy4KCkRhbmllbCAoMTggRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgcHJvYmxlbSBpbiBob3cgSFRUUCByZXF1ZXN0cyB3ZXJlIHNlbnQgaWYgdGhlCiAgcmVxdWVzdCBjb3VsZG4ndCBiZSBzZW50IGFsbCBhdCBvbmNlLgoKLSBFbWlsIGZvdW5kIGFuZCBjb3JyZWN0ZWQgYSBiYWQgY29ubmVjdGlvbiB0aW1lb3V0IGNvbXBhcmlzb24gdGhhdCBtYWRlIGN1cmwKICB1c2UgdGhlIGxvbmdlc3Qgb2YgY29ubmVjdC10aW1lb3V0IGFuZCB0aW1vdXQgYXMgYSB0aW1lb3V0IHZhbHVlLCBpbnN0ZWFkIG9mCiAgdGhlIHNob3J0ZXN0IGFzIGl0IHdhcyBzdXBwb3NlZCB0byEKCi0gQXJvbiBSb2JlcnRzIHByb3ZpZGVkIHVwZGF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgTERBUCBVUkwgc3ludGF4IHRvIGdvIGludG8KICB0aGUgbWFudWFsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvbGQgcmVmZXJlbmNlcy4KCkRhbmllbCAoMTcgRmVicnVhcnkgMjAwMikKLSBQaGlsaXAgR2xhZHN0b25lIHBvaW50ZWQgb3V0IHR3byBtaXNzaW5nIGluY2x1ZGUgZmlsZXMgdGhhdCBtYWRlIGN1cmwgY29yZQogIGR1bXAgb24gNjRiaXQgYXJjaGl0ZWN0dXJlcy4gV2UgbmVlZCB0byBwYXkgbW9yZSBhdHRlbnRpb24gb24gdGhlc2UgZGV0YWlscy4KICBJdCBpcyAqbGV0aGFsKiB0byBmb3IgZXhhbXBsZSBmb3JnZXQgdGhlIG1hbGxvYygpIHByb3RvdHlwZSwgYXMgJ2ludCcgaXMKICAzMmJpdCBhbmQgbWFsbG9jKCkgbXVzdCByZXR1cm4gYSA2NGJpdCBwb2ludGVyIG9uIHRoZXNlIHBsYXRmb3Jtcy4KCi0gR2lhc2xhcyBHZW9yZ2lvcyBmaXhlZCBhIHByb2JsZW0gd2l0aCBIb3N0OiBoZWFkZXJzIG9uIHJlcGVhdGVkIHJlcXVlc3RzIG9uCiAgdGhlIHNhbWUgaGFuZGxlIHVzaW5nIGEgcHJveHkuCgpEYW5pZWwgKDggRmVicnVhcnkgMjAwMikKLSBIYW5ubyBMLiBLcmFuemhvZmYgYWNjdXJhdGVseSBmb3VuZCBvdXQgdGhhdCBkaXNhYmxpbmcgdGhlIEV4cGVjdDogaGVhZGVyCiAgd2hlbiBkb2luZyBtdWx0aXBhcnQgZm9ybXBvc3RzIGRpZG4ndCB3b3JrIHZlcnkgd2VsbC4gSXQgZGlzYWJsZWQgb3RoZXIKICBwYXJ0cyBvZiB0aGUgcmVxdWVzdCBoZWFkZXIgdG9vLCByZXN1bHRpbmcgaW4gYSBicm9rZW4gaGVhZGVyLiBXaGVuIEkgZml4ZWQKICB0aGlzLCBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBDb250ZW50LVR5cGUgd2Fzbid0IHBvc3NpYmxlIHRvIGRpc2FibGUuIEl0IGlzCiAgbm93LCBldmVuIHRob3VnaCBpdCBwcm9iYWJseSBpcyByZWFsbHkgc3R1cGlkIHRvIHRyeSB0byBkbyB0aGlzIChiZWNhdXNlIG9mCiAgdGhlIGJvdW5kYXJ5IHN0cmluZyB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBoZWFkZXIsCiAgdXNlZCBhcyBmb3JtIHBhcnQgc2VwYXJhdG9yLikKCkRhbmllbCAoNyBGZWJydWFyeSAyMDAyKQotIEkgbW92ZWQgdGhlIGNvbmZpZyouaCBmaWxlcyBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB0byB0aGUgbGliLyBkaXJlY3RvcnkuCgotIEkndmUgYWRkZWQgdGhlIG5ldyB0ZXN0IHN1aXRlIEhUVFAgc2VydmVyIHRvIHRoZSBDVlMgcmVwb3NpdG9yeSwgSXQgc2VlbXMgdG8KICB3b3JrIHByZXR0eSBnb29kIG5vdywgYnV0IHdlIG11c3QgbWFrZSBpdCBnZXQgdXNlZCBieSB0aGUgdGVzdCBzY3JpcHRzCiAgcHJvcGVybHkgYW5kIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBjb21waWxlcywgYnVpbGRzIGFuZCBydW5zIG9uCiAgbW9zdCBvcGVyYXRpbmcgc3lzdGVtcy4KClZlcnNpb24gNy45LjUtcHJlMQoKRGFuaWVsICg2IEZlYnJ1YXJ5IDIwMDIpCi0gTWlrbG9zIE5lbWV0aCBwcm92aWRlZCB1cGRhdGVkIHdpbmRvd3MgbWFrZWZpbGVzIGFuZCBJTlNUQUxMIGRvY3MuCgotIE1yIExhcnJ5IEZhaG5vZSBmb3VuZCBhIHByb2JsZW0gd2l0aCBmb3JtcG9zdHMgYW5kIEkgbWFuYWdlZCB0byB0cmFjayBkb3duCiAgYW5kIHBhdGNoIHRoaXMgYnVnLiBUaGlzIHdhcyBhY3R1YWxseSB0d28gYnVncywgYXMgdGhlIHBvc3RlZCBzaXplIHdhcyBhbHNvCiAgc2FpZCB0byBiZSB0d28gYnl0ZXMgdG9vIGxhcmdlLgoKLSBCcmVudCBCZWFyZHNsZXkgZm91bmQgb3V0IGFuZCBicm91Z2h0IGEgY29ycmVjdGlvbiBmb3IgdGhlCiAgQ1VSTElORk9fQ09OVEVOVF9UWVBFIHBhcnNlciB0aGF0IHdhcyBvZmYgb25lIGJ5dGUuIFRoaXMgd2FzIG15IGZhdWx0LCBJCiAgYWNjaWRlbnRhbHkgYnJva2UgR2lhc2xhcyBHZW9yZ2lvcycgcGF0Y2guCgpEYW5pZWwgKDUgRmVicnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIGZvdW5kIHlldCBhbm90aGVyIFNTTCBkb3dubG9hZCBwcm9ibGVtLgoKVmVyc2lvbiA3LjkuNAoKLSBubyBjaGFuZ2VzIHNpbmNlIHByZS1yZWxlYXNlCgpWZXJzaW9uIDcuOS40LXByZTIKCkRhbmllbCAoMyBGZWJydWFyeSAyMDAyKQotIEVyaWMgTWVsdmlsbGUgcHJvdmlkZWQgYSBmZXcgc3BlbGxpbmcgY29ycmVjdGlvbnMgaW4gdGhlIGN1cmwgbWFuIHBhZ2UuCgpEYW5pZWwgKDEgRmVicnVhcnkgMjAwMikKLSBBbmRyZWFzIERhbW0gY29ycmVjdGVkIHRoZSB1bmNvbmRpdGlvbmFsIHVzZSBvZiBnbXRpbWUoKSBpbiBnZXRkYXRlLCBpdCBub3cKICB1c2VzIGdtdGltZV9yKCkgb24gYWxsIGhvc3RzIHRoYXQgaGF2ZSBpdC4KCkRhbmllbCAoMzEgSmFudWFyeSAyMDAyKQotIEFuIGFub255bW91cyBidWcgcmVwb3J0IGlkZW50aWZpZWQgYSBwcm9ibGVtIGluIHRoZSBETlMgY2FjaGluZyB3aGljaCBtYWRlIGl0CiAgc29tZXRpbWVzIGFsbG9jYXRlIG9uZSBieXRlIHRvbyBsaXR0bGUgdG8gc3RvcmUgdGhlIGNhY2hlIGVudHJ5IGluLiBUaGlzCiAgaGFwcGVuZWQgd2hlbiB0aGUgcG9ydCBudW1iZXIgc3RhcnRlZCB3aXRoIDEhCgotIEFsYmVydCBDaGluIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBpbXByb3ZlcyB0aGUgZ2V0aG9zdGJ5bmFtZV9yKCkgY29uZmlndXJlCiAgY2hlY2sgb24gSFAtVVggMTEuMDAuCgpWZXJzaW9uIDcuOS40LXByZTEKCkRhbmllbCAoMzAgSmFudWFyeSAyMDAyKQotIEdlb3JnIEhvcm4gZm91bmQgYW5vdGhlciB3YXkgdGhlIFNTTCByZWFkaW5nIGZhaWxlZCBkdWUgdG8gdGhlIG5vbi1ibG9ja2luZwogIHN0YXRlIG9mIHRoZSBzb2NrZXRzISBJIGZpeGVkLgoKRGFuaWVsICgyOSBKYW51YXJ5IDIwMDIpCi0gTXVsdGlwYXJ0IGZvcm1wb3N0cyBub3cgc2VuZCB0aGUgZnVsbCByZXF1ZXN0IHByb3Blcmx5LCBpbmNsdWRpbmcgdGhlIENSTEYuCiAgVGhleSB3ZXJlIHByZXZpb3VzbHkgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBwb3N0IGRhdGEuCgotIFRoZSB1cGxvYWQgYnl0ZSBjb3VudGVyIGJ1Z2dlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCB0aGF0IHdlIHNlZWQgU1NMIG9uIGV2ZXJ5IGNvbm5lY3QsIHdoaWNoIGlzIGEgdGltZS0KICBjb25zdW1pbmcgb3BlcmF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgbmVlZGVkIHRvIGRvIG9uY2UuIFdlIHBhdGNoZWQKICBsaWJjdXJsIHRvIG5vdyBvbmx5IHNlZWQgb24gdGhlIGZpcnN0IGNvbm5lY3Qgd2hlbiB1bnNlZWRlZC4gVGhlIHNlZWRlZAogIHN0YXR1cyBpcyBnbG9iYWwgc28gaXQnbGwgbm93IG9ubHkgaGFwcGVuIG9uY2UgZHVyaW5nIGEgcHJvZ3JhbSdzIGxpZmUgdGltZS4KCiAgSWYgdGhlIHJhbmRvbV9maWxlIG9yIGVnZHNvY2tldCBpcyBzZXQsIHRoZSBzZWVkIHdpbGwgYmUgcmUtbWFkZSB0aG91Z2guCgotIEdpYXNsYXMgR2Vvcmdpb3MgaW50cm9kdWNlZCBDVVJMSU5GT19DT05URU5UX1RZUEUgdGhhdCBsZXRzCiAgY3VybF9lYXN5X2dldGluZm8oKSByZWFkIHRoZSBjb250ZW50LXR5cGUgZnJvbSB0aGUgcHJldmlvdXMgcmVxdWVzdC4KCkRhbmllbCAoMjggSmFudWFyeSAyMDAyKQotIEtqZXRpbCBKYWNvYnNlbiBmb3VuZCBhIHdheSB0byBjcmFzaCBjdXJsIGFuZCBhZnRlciBtdWNoIGRlYnVnZ2luZywgaXQKICB0dXJuZWQgb3V0IGl0IHdhcyBhIElQdjQtbGludXggb25seSBwcm9ibGVtIGludHJvZHVjZWQgaW4gNy45LjMgcmVsYXRlZCB0bwogIG5hbWUgcmVzb2x2aW5nLgoKLSBBbmRyZWFzIERhbW0gcG9zdGVkIGEgaHVnZSBwYXRjaCB0aGF0IG1hZGUgdGhlIGN1cmxfZ2V0ZGF0ZSgpIGZ1bmN0aW9uIGZ1bGx5CiAgcmVlbnRyYW50IQoKLSBTdGV2ZSBNYXJ4IHBvaW50ZWQgb3V0IHRoYXQgeW91IGNvdWxkbid0IG1peCBDVVJMT1BUX0NVU1RPTVJFUVVFU1Qgd2l0aAogIENVUkxPUFRfUE9TVEZJRUxEUy4gWW91IGNhbiBub3chCgpEYW5pZWwgKDI1IEphbnVhcnkgMjAwMikKLSBLcmlzaG5lbmR1IE1hanVtZGFyIHBvaW50ZWQgb3V0IHRoYXQgdGhlIGhlYWRlciBsZW5ndGggY291bnRlciB3YXMgbm90IHJlc2V0CiAgYmV0d2VlbiBtdWx0aXBsZSByZXF1ZXN0cyBvbiB0aGUgc2FtZSBoYW5kbGUuCgotIFBlZHJvIE5ldmVzIHJpZ2h0ZnVsbHkgcXVlc3Rpb25lZCB3aHkgY3VybCBhbHdheXMgYXBwZW5kIFxyXG4gdG8gdGhlIGRhdGEKICB0aGF0IGlzIHNlbnQgaW4gSFRUUCBQT1NUIHJlcXVlc3RzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJyb2tlIHRoZSB0ZXN0IHN1aXRlCiAgYXMgdGhlIHRlc3QgSFRUUCBzZXJ2ZXIgaXMgbGFtZSBlbm91Z2ggbm90IHRvIGRlYWwgd2l0aCB0aGlzLi4uIDotTwoKLSBGb2xsb3dpbmcgTG9jYXRpb246IGhlYWRlcnMgd2hlbiB0aGUgY29ubmVjdGlvbiBkaWRuJ3QgY2xvc2UgZGlkbid0IHdvcmsgYXMKICBsaWJjdXJsIGRpZG4ndCBwcm9wZXJseSBzdG9wIHJlYWRpbmcuIFRoaXMgcHJvYmxlbSB3YXMgYWRkZWQgaW4gNy45LjMgZHVlIHRvCiAgdGhlIHJlc3RydWN0dXJlZCBpbnRlcm5hbHMuICdGcmFuaycgcG9zdGVkIGEgYnVnIHJlcG9ydCBhYm91dCB0aGlzLgoKRGFuaWVsICgyNCBKYW51YXJ5IDIwMDIpCi0gS2V2aW4gUm90aCB2ZXJ5IHF1aWNrbHkgc3BvdHRlZCB0aGF0IHdlIHdyb25nbHkgaW5zdGFsbGVkIHRoZSBleGFtcGxlCiAgcHJvZ3JhbXMgdGhhdCB3ZXJlIGJ1aWx0IGluIHRoZSBtdWx0aSBkaXJlY3RvcnksIHdoZW4gJ21ha2UgaW5zdGFsbCcgd2FzCiAgdXNlZC4gOi0vCgpWZXJzaW9uIDcuOS4zCgpEYW5pZWwgKDIzIEphbnVhcnkgMjAwMikKLSBBbmRy6XMgR2FyY+1hIGZvdW5kIGEgcGVyc2lzdGFuY3kgcHJvYmxlbSB3aGVuIGRvaW5nIEhUVFAgSEVBRCwgdGhhdCBtYWRlCiAgY3VybCAiaGFuZyIgdW50aWwgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSB0aGUgc2VydmVyLiBUaGlzIHByb2JsZW0gaGFzCiAgYmVlbiBpbnRyb2R1Y2VkIGluIDcuOS4zIGR1ZSB0byBpbnRlcm5hbCByZXdyaXRlcywgdGhpcyB3YXMgbm90IHByZXNlbnQgaW4KICA3LjkuMi4KClZlcnNpb24gNy45LjMtcHJlNAoKRGFuaWVsICgxOSBKYW51YXJ5IDIwMDIpCi0gQW50b25pbyBmaWxlZCBidWcgcmVwb3J0ICM1MDU1MTQgYW5kIHByb3ZpZGVkIGEgZml4ISBXaGVuIGRvaW5nIG11bHRpcGFydAogIGZvcm1wb3N0cywgbGliY3VybCB3b3VsZCBpbmNsdWRlIGFuIGVycm9yIHRleHQgaW4gdGhlIGFjdHVhbCBwb3N0IGlmIGEKICBzcGVjaWZpZWQgZmlsZSB3YXNuJ3QgZm91bmQuIFRoaXMgaXMgbm90IGxpYmN1cmwncyBqb2IuIEluc3RlYWQgd2UgYWRkIGFuCiAgZW1wdHkgcGFydC4KCkRhbmllbCAoMTggSmFudWFyeSAyMDAyKQotIFBsYXllZCBhcm91bmQgd2l0aCBzdHJpY3RlciBjb21waWxlciB3YXJuaW5ncyBmb3IgZ2NjICh3aGVuIC4vY29uZmlndXJlCiAgLS1lbmFibGUtZGVidWcgaXMgdXNlZCkgYW5kIGNoYW5nZWQgc29tZSBtaW5vciB0aGluZ3MgdG8gc3RvcCB0aGUgd2FybmluZ3MuCgotIENvbW1lbnRlZCBvdXQgdGhlICdsb25nIGxvbmcnIGFuZCAnbG9uZyBkb3VibGUnIGNoZWNrcyBpbiBjb25maWd1cmUuaW4sIGFzCiAgd2UgZG9uJ3QgY3VycmVudGx5IHVzZSB0aGVtIGFueXdheSBhbmQgdGhlIGNvZGUgaW4gbGliL21wcmludGYuYyB0aGF0IHVzZQogIHRoZW0gY2F1c2VzIHdhcm5pbmdzLgoKLSBTYXVsIEdvb2QgYW5kIGpvbmF0YW4gcG9pbnRlZCBvdXQgTWFjIE9TIFggYnVpbGQgcHJvYmxlbXMgd2l0aCBwcmUzIGFuZCBob3cKICB0byBjb3JyZWN0IHRoZW0uIFR3byBjb21waWxlciB3YXJuaW5ncyB3ZXJlIHJlbW92ZWQgYXMgd2VsbC4KCi0gQW5kculzIEdhcmPtYSBmaXhlZCB0d28gbWlub3IgbWluZ3czMiBidWlsZGluZyBwcm9ibGVtcy4KClZlcnNpb24gNy45LjMtcHJlMwoKRGFuaWVsICgxNyBKYW51YXJ5IDIwMDIpCi0gZG9jcy9saWJjdXJsLXRoZS1ndWlkZSBpcyBhIG5ldyB0dXRvcmlhbCBmb3Igb3VyIGxpYmN1cmwgcHJvZ3JhbW1pbmcKICBmcmllbmRzLgoKLSBSaWNoYXJkIEFyY2hlciBicm91Z2h0IGJhY2sgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgYnVpbGQgd2l0aCBPcGVuU1NMCiAgdmVyc2lvbnMgYmVmb3JlIDAuOS41LgogIFtodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTAwOTc2JmFpZD01MDQxNjMmZ3JvdXBfaWQ9OTc2XQoKLSBUaGUgRE5TIGNhY2hlIGNvZGUgZGlkbid0IHRha2UgdGhlIHBvcnQgbnVtYmVyIGludG8gYWNjb3VudCwgd2hpY2ggbWFkZSBpdAogIHdvcmsgcmF0aGVyIGJhZCBvbiBJUHY2LWVuYWJsZWQgaG9zdHMgKGVzcGVjaWFsbHkgd2hlbiBkb2luZyBwYXNzaXZlCiAgRlRQKS4gU3RlcmxpbmcgZml4ZWQgaXQuCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBHZW9yZyBIb3JuIGNvdWxkIG1ha2UgYSB0cmFuc2ZlciB0aW1lLW91dCB3aXRob3V0IGVycm9yIHRleHQuIEkgZm91bmQgaXQgYW5kCiAgY29ycmVjdGVkIGl0LgoKLSBTU0wgd3JpdGVzIGRpZG4ndCB3b3JrLCB0aGV5IHJldHVybiBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRoYXQgY2F1c2VkCiAgaGF2b2MgYWxsIG92ZXIuIEdlb3JnIEhvcm4gZXhwZXJpZW5jZWQgdGhpcy4KCi0gS2V2aW4gUm90aCBwYXRjaGVkIHRoZSBjdXJsX3ZlcnNpb24oKSBmdW5jdGlvbiB0byB1c2UgdGhlIHByb3BlciBPcGVuU1NMCiAgZnVuY3Rpb24gZm9yIHZlcnNpb24gaW5mb3JtYXRpb24uIFRoaXMgd2F5LCBjdXJsIHdpbGwgcmVwb3J0IHRoZSB2ZXJzaW9uIG9mCiAgdGhlIFNTTCBsaWJyYXJ5IGFjdHVhbGx5IHJ1bm5pbmcgcmlnaHQgbm93LCBub3QgdGhlIG9uZSB0aGF0IGhhZCBpdHMgaGVhZGVycwogIGluc3RhbGxlZCB3aGVuIGxpYmN1cmwgd2FzIGJ1aWx0LiBNYWlubHkgaW50ZXJzdGluZyB3aGVuIHJ1bm5pbmcgd2l0aCBzaGFyZWQKICBPcGVuU1NMIGxpYnJhcmllcy4gIAoKVmVyc2lvbiA3LjkuMy1wcmUyCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwMikKLSBNb2ZpZWQgdGhlIG1haW4gdHJhbnNmZXIgbG9vcCBhbmQgcmVsYXRlZCBzdHVmZiB0byBkZWFsIHdpdGggbm9uLWJsb2NraW5nCiAgc29ja2V0cyBpbiB0aGUgdXBsb2FkIHNlY3Rpb24uIFdoaWxlIGRvaW5nIHRoaXMsIEkndmUgbm93IHNlcGFyYXRlZCB0aGUKICBjb25uZWN0aW9uIG9yaWVudGVkIGJ1ZmZlcnMgdG8gaGF2ZSBvbmUgZm9yIGRvd25sb2FkcyBhbmQgb25lIGZvciB1cGxvYWRzCiAgKGFzIHR3byBjYW4gaGFwcGVuIHNpbXVsdGFuZW91c2x5KS4gSSBhbHNvIHNocnVuayB0aGUgYnVmZmVycyB0byAyMEsKICBlYWNoLiBBcyB3ZSBoYXZlIGEgc2NyYXRjaCBidWZmZXIgdHdpY2UgdGhlIHNpemUgb2YgdGhlIHVwbG9hZCBidWZmZXIsIHdlCiAgYXJyaXZlZCBhdCA4MEsgZm9yIGJ1ZmZlcnMgY29tcGFyZWQgd2l0aCB0aGUgcHJldmlvdXMgMTUwSy4KCi0gQWRkZWQgdGhlIC0tY2Mgb3B0aW9uIHRvIGN1cmwtY29uZmlnIGNvbW1hbmQgYXMgaXQgZW5hYmxlcyBzbyB2ZXJ5IGNvb2wKICBvbmUtbGluZXJzLiBIYXZlIGEgZ28gYSB0aGlzIG9uZSwgYnVpbGRpbmcgdGhlIHNpbXBsZS5jIGV4YW1wbGU6CgogICAgICAgICQgYGN1cmwtY29uZmlnIC0tY2MgLS1jZmxhZ3MgLS1saWJzYCAtbyBleGFtcGxlIHNpbXBsZS5jCgpEYW5pZWwgKDE0IEphbnVhcnkgMjAwMikKLSBJIG1hZGUgYWxsIHNvY2tldCByZWFkcyAocmVjdikgaGFuZGxlIEVXT1VMREJMT0NLLiBJIGhvcGUgbmljZWx5LiBOb3cgd2UKICBvbmx5IG5lZWQgdG8gYWRkcmVzcyBhbGwgd3JpdGVzIChzZW5kKSB0b28gYW5kIHRoZW4gSSdtIHJlYWR5IGZvciBhbm90aGVyCiAgcHJlLXJlbGVhc2UuLi4KCi0gU3RvbmVkIEVsaXBvdCBwYXRjaGVkIHRoZSBpbl9hZGRyX3QgY29uZmlndXJlIHRlc3QgdG8gbWFrZSBpdCB3b3JrIGJldHRlciBvbgogIG1vcmUgcGxhdGZvcm1zLgoKRGFuaWVsICg5IEphbnVhcnkgMjAwMikKLSBDcmlzIEJhaWxpZmYgZm91bmQgb3V0IHRoYXQgZmlsbGluZyB1cCBjdXJsJ3MgU1NMIHNlc3Npb24gY2FjaGUgY2F1c2VkIGEKICBjcmFzaCEKCi0gUG9zdGVkIHRoZSBjdXJsIHF1ZXN0aW9ubmFpcmUgb24gdGhlIHdlYiBzaXRlLiBJZiB5b3UgaGF2ZW4ndCBwb3N0ZWQgeW91cgogIG9waW5pb25zIHRoZXJlIHlldCwgZ28gdGhlcmUgYW5kIGRvIGl0IG5vdyB3aGlsZSBpdCBpcyBzdGlsbCB0aGVyZToKCiAgICAgICAgaHR0cDovL2N1cmwuaGF4eC5zZS9xLwoKLSBHZW9yZyBIb3JuIHF1aWNrbHkgZm91bmQgb3V0IHRoYXQgdGhlIFNTTCByZWFkaW5nIG5vIGxvbmdlciB3b3JrZWQgYXMKICBzdXBwb3NlZCBzaW5jZSB0aGUgc3dpdGNoIHRvIG5vbi1ibG9ja2luZyBzb2NrZXRzLiBJJ3ZlIG1hZGUgYSBxdWljayBwYXRjaAogIChmb3IgcmVhZGluZyBvbmx5KSBidXQgd2Ugc2hvdWxkIGltcHJvdmUgaXQgZXZlbiBmdXJ0aGVyLgoKVmVyc2lvbiA3LjkuMy1wcmUxCgpEYW5pZWwgKDcgSmFudWFyeSAyMDAyKQotIEkgbWFkZSB0aGUgJ2Jvb2wnIHR5cGVkZWYgdXNlIGFuICJ1bnNpZ25lZCBjaGFyIi4gSXQgbWFrZXMgaXQgdGhlIHNhbWUgb24KICBhbGwgcGxhdGZvcm1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgcGxhdGZvcm0gdGhpbmtzIHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IKICBjaGFyIGlzLiBUaGlzIHdhcyBub3RpY2VkIHNpbmNlIHdlIG1hZGUgYSBzaWxseSBjb21wYXJpc29uIGludm9sdmluZyBzdWNoIGEKICBib29sIHZhcmlhYmxlLCBhbmQgb25seSBvbmUgY29tcGlsZXIvcGxhdGZvcm0gY29tYmluYXRpb24gKG9uIERlYmlhbiBMaW51eCkKICBjb21wbGFpbmVkIGFib3V0IGl0ICh0aGF0IGhhcHBlbmVkIHRvIGhhdmUgaXRzIGNoYXIgdW5zaWduZWQgYnkgZGVmYXVsdCkuCgotIEJ1ZyByZXBvcnQgIzQ5NTI5MCBpZGVudGlmaWVkIGEgY29va2llIHBhcnNpbmcgcHJvYmxlbSB0aGF0IHdhcyBjb3JyZWN0ZWQuCiAgV2hlbiBhIFNldC1Db29raWU6IGxpbmUgaXMgcmVjZWl2ZWQgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbiwgbGliY3VybAogIGRpZG4ndCByZWFkIHRoZSBsYXN0ICJuYW1lPXZhbHVlIiBwYWlyIG9mIHRoZSBsaW5lLCBsZWFkaW5nIHRvIGNvbmZ1c2lvbnMuLi4KCi0gU3RlcmxpbmcgY29tbWl0dGVkIGhpcyB1cGRhdGVkIEROUyBjYWNoZSBjb2RlLgoKLSBJIHdvcmtlZCB3aXRoIEdlb3JnIEhvcm4gYW5kIGNvbW1lbnRzIGZyb20gR/Z0eiBCYWJpbi1FYmVsbCBhbmQgc3dpdGNoZWQKICBjdXJsJ3Mgc29ja2V0IG9wZXJhdGlvbnMgY29tcGxldGVseSBvdmVyIHRvIG5vbi1ibG9ja2luZyBmb3IgdGhlIGVudGlyZQogIG9wZXJhdGlvbiAocHJldmlvdXNseSB3ZSB1c2VkIG5vbi1ibG9ja2luZyBvbmx5IGZvciB0aGUgY29ubmVjdGlvbiBwaGFzZSkuCiAgV2UgaGFkIHRvIGRvIHRoaXMgdG8gbWFrZSB0aGUgU1NMIGNvbm5lY3Rpb24gcGhhc2UgdGltZW91dCBwcm9wZXJseSB3aXRob3V0CiAgdGhlIHVzZSBvZiBzaWduYWxzLiBBIGxpdHRsZSBleHRyYSBjb2RlIHRvIGRlYWwgd2l0aCB0aGlzIHdhcyBhZGRlZC4KCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCBhIHNsaWdodGx5IG9ic2N1cmUgY29va2llIGVuZ2luZSBmbGF3LgoKLSBQZXRlIFN1IHBvaW50ZWQgb3V0IHRoYXQgbGliY3VybCBkaWRuJ3QgdHJlYXQgSFRUUCBjb2RlIDIwNCBhcyBpdCBzaG91bGQuCiAgMjA0LXJlcGxpZXMgbmV2ZXIgcHJvdmlkZXMgYSByZXNwb25zZS1ib2R5LiBUaGlzIHJlc3VsdGVkIGluIGJhZCBwZXJzaXN0YW50CiAgYmVoYXZpb3Igd2hlbiAyMDQgd2FzIHJlY2VpdmVkLgoKRGFuaWVsICg1IEphbnVhcnkgMjAwMikKLSBTTSB1cGRhdGVkIHRoZSBWQysrIGxpYnJhcnkgTWFrZWZpbGVzIGZvciB0aGUgbmV3IHNvdXJjZSBmaWxlcy4KCkRhbmllbCAoNCBKYW51YXJ5IDIwMDIpCi0gSSBkaXNjb3ZlcmVkIHRoYXQgd2Ugd3JvbmdseSB1c2VkIGluZXRfbnRvYSgpIChpbnN0ZWFkIG9mIGluZXRfbnRvYV9yKCkgaW4KICB0d28gcGxhY2VzIGluIHRoZSBzb3VyY2UgY29kZSkuIE9uZSBoYXBwZW5lZCB3aXRoIFZFUkJPU0Ugc2V0IG9uIGNvbm5lY3RzLAogIGFuZCB0aGUgb3RoZXIgd2hlbiBWRVJCT1NFIHdhcyBvbiBhbmQga3JiNCBvdmVyIG5hdCB3YXMgdXNlZC4uLiBJIGhvbmVzdGx5CiAgZG9uJ3QgdGhpbmsgYW55b25lIGhhcyBzdWZmZXJlZCBmcm9tIHRoZXNlIG1pc3Rha2VzLgoKLSBJIHJlcGxhY2VkIGEgbG90IG9mIHNpbGx5IG9jY3VyYW5jZXMgb2YgcHJpbnRmKCkgdG8gaW5zdGVhZCB1c2UgdGhlIG1vcmUKICBhcHByb3ByaWF0ZSBDdXJsX2luZm9mKCkgb3IgQ3VybF9mYWlsZigpLiBUaGUga3JiNCBhbmQgdGVsbmV0IGNvZGUgd2VyZQogIGFmZmVjdGVkLgoKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgZmV3IG1vcmUgcHJvYmxlbXMgd2l0aCA2NC1iaXQgYXJjaHMgKHRoZSA2NC1iaXQKICBzcGFyYyBvbiBzb2xhcmlzIDgpLgoKLSBBZnRlciBkaXNjdXNzaW9ucyBvbiB0aGUgbGliY3VybCBsaXN0IHdpdGggUmFvdWwgQ3JpZGxpZywgSSBqdXN0IG1hZGUgRlRQCiAgcmVzcG9uc2UgbGluZXMgZ2V0IHBhc3NlZCB0byB0aGUgaGVhZGVyIGNhbGxiYWNrIGlmIHN1Y2ggYSBvbmUgaXMKICByZWdpc3RlcmVkLiBJdCdsbCBtYWtlIGl0IHBvc3NpYmxlIGZvciBhbnkgYXBwbGljYXRpb24gdG8gZ2V0IGFsbCB0aGUKICByZXNwb25zZXMgYW4gRlRQIHNlcnZlciBzZW5kcyB0byBsaWJjdXJsLgoKRGFuaWVsICgzIEphbnVhcnkgMjAwMikKLSBTdGVybGluZyBIdWdoZXMgYnJvdWdodCBhIGZldyBidWNrZXRzIG9mIGNvZGUuIE5vdywgbGliY3VybCB3aWxsCiAgYXV0b21hdGljYWxseSBjYWNoZSBETlMgbG9va3VwcyBhbmQgcmUtdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGZpcnN0IGlmIGFueQogIHN1Y2ggaXMgYXZhaWxhYmxlLiBJdCBncmVhdGx5IGltcHJvdmVzIHNwZWVkIHdoZW4gZG9pbmcgbWFueSByZXBlYXRlZAogIG9wZXJhdGlvbnMgdG8gdGhlIHNhbWUgaG9zdC4KCi0gQXMgdGhlIHRlc3QgY2FzZSB1c2VzIC0taW5jbHVkZSBhbmQgdGhlbiAtLWhlYWQsIEkgaGFkIHRvIG1vZGlmeSBzcmMvbWFpbi5jCiAgdG8gZGVhbCB3aXRoIHRoaXMgc2l0dWF0aW9uIHNsaWdodGx5IGJldHRlciB0aGFuIHByZXZpb3VzbHkuIFdoZW4gZG9uZSwgd2UKICBoYXZlIDEwMCUgZ29vZCB0ZXN0cyBhZ2FpbiBpbiB0aGUgbWFpbiBicmFuY2guCgpEYW5pZWwgKDIgSmFudWFyeSAyMDAyKQotIE1hZGUgdGVzdCBjYXNlIDI1IHJ1biBhZ2FpbiBpbiB0aGUgbXVsdGktZGV2IGJyYW5jaC4gQnV0IGl0IHNlZW1zIHRoYXQgdGhlCiAgY2hhbmdlcyBkb25lIG9uIGRlYy0yMCBtYWRlIHRlc3QgY2FzZSAxMDQgY2Vhc2UgdG8gd29yayAoaW4gYm90aCBicmFuY2hlcykuCgotIFBoaWxpcCBHbGFkc3RvbmUgcG9pbnRlZCBvdXQgYSBmZXcgcG9ydGFiaWxpdHkgcHJvYmxlbXMgaW4gdGhlIHNvdXJjZSBjb2RlCiAgdGhhdCBkaWRuJ3QgY29tcGlsZSBvbiA2NC1iaXQgc3BhcmNzIHVzaW5nIFN1bidzIG5hdGl2ZSA=