MS4gSU5UUk9EVVpJT05FCgpXaW5lIMOoIHVuIHByb2dyYW1tYSBjaGUgcGVybWV0dGUgZGkgZXNlZ3VpcmUgcHJvZ3JhbW1pIHN2aWx1cHBhdGkgcGVyIE1pY3Jvc29mdApXaW5kb3dzIChjb21wcmVzaSBlc2VndWliaWxpIERPUywgV2luZG93cyAzLngsIFdpbjMyIGUgV2luNjQpIHN1IFVuaXguIMOIIGNvc3RpdHVpdG8KZGEgdW4gY2FyaWNhdG9yZSBkaSBwcm9ncmFtbWEgY2hlIGNhcmljYSBlZCBlc2VndWUgY29kaWNlIGJpbmFyaW8gTWljcm9zb2Z0CldpbmRvd3MsIGVkIHVuYSBsaWJyZXJpYSAoY2hpYW1hdGEgV2luZWxpYikgY2hlIGltcGxlbWVudGEgbGUgY2hpYW1hdGUgYWxsZSBBUEkKV2luZG93cyB1c2FuZG8gaWwgbG9ybyBlcXVpdmFsZW50ZSBVbml4IGUgWDExLiBMYSBsaWJyZXJpYSBwdcOyIGVzc2VyZSB1c2F0YQphbmNoZSBwZXIgcG9ydGFyZSBjb2RpY2UgV2luZG93cyBpbiBlc2VndWliaWxpIFVuaXggbmF0aXZpLgpXaW5lIMOoIHVuIGZyZWUgc29mdHdhcmUsIHJpbGFzY2lhdG8gc290dG8gR05VIExHUEw7IGxlZ2dpIGlsIGZpbGUgTElDRU5TRSBwZXIgaQpkZXR0YWdsaS4KCjIuIFFVSUNLIFNUQVJUCgpPZ25pIHZvbHRhIGNoZSBzaSBjb21waWxhIGRhbCBzb3JnZW50ZSwgw6ggcmFjY29tYW5kYWJpbGUgdXNhcmUgaWwgV2luZSBpbnN0YWxsZXIKcGVyIGNvbXBpbGFyZSBlIGluc3RhbGxhcmUgV2luZS4gRGFsbGEgZGlyZWN0b3J5IGRpIHByaW5jaXBhbGUgZGVsCnNvcmdlbnRlIFdpbmUsIGVzZWd1aToKCi4vdG9vbHMvd2luZWluc3RhbGwKCkVzZWd1aSBpIHByb2dyYW1taSBjb24gIndpbmUgW29wemlvbmldIHByb2dyYW1tYSIuIFBlciBhbHRyZSBpbmZvcm1hemlvbmkgZQpyaXNvbHV6aW9uZSBkaSBwcm9ibGVtaSwgbGVnZ2kgaWwgcmVzdG8gZGkgcXVlc3RvIGZpbGUsIGxhIHBhZ2luYSBtYW4gZGkgV2luZQplZCBpbiBtb2RvIHBhcnRpY29sYXJlIGxhIG5vdGV2b2xlIHF1YW50aXTgIGRpIGluZm9ybWF6aW9uaSBjaGUgcHVvaSB0cm92YXJlIGEKaHR0cDovL3d3dy53aW5laHEub3JnLgoKMy4gUkVRVUlTSVRJIE1JTklNSSBESSBTSVNURU1BCgpQZXIgY29tcGlsYXJlIGVkIGVzZWd1aXJlIFdpbmUsIGRldmkgYXZlcmUgdW5vIGRlaSBzZWd1ZW50aToKCiAgTGludXggdmVyc2lvbmUgMi4wLjM2IG8gc3VjY2Vzc2l2YQogIEZyZWVCU0QgNi4zIG8gc3VjY2Vzc2l2YQogIFNvbGFyaXMgeDg2IDkgbyBzdWNjZXNzaXZhCiAgTmV0QlNEIGF0dHVhbGUKICBNYWMgT1MgWCAxMC40IG8gc3VjY2Vzc2l2YQoKcG9pY2jDqCBXaW5lIHJpY2hpZWRlIGlsIHN1cHBvcnRvIHRocmVhZCBhbCBsaXZlbGxvIGRpIGtlcm5lbCBwZXIgZXNzZXJlIGVzZWd1aXRvLApzb2xvIGkgc2lzdGVtaSBvcGVyYXRpdmkgc29wcmEgbWVuemlvbmF0aSBzb25vIHN1cHBvcnRhdGkuCkFsdHJpIHNpc3RlbWkgb3BlcmF0aXZpIGNoZSBzdXBwb3J0YW5vIGkga2VybmVsIHRocmVhZHMgcG90cmFubm8gZXNzZXJlCnN1cHBvcnRhdGkgaW4gZnV0dXJvLgoKSW5mb3JtYXppb25pIExpbnV4OgogIE1lbnRyZSBMaW51eCAyLjIueCBkb3ZyZWJiZSBmdW56aW9uYXJlLCBMaW51eCAyLjAueCBwb3RyZWJiZSBmdW56aW9uYXJlCiAgKHZlcnNpb25pIHBpw7kgdmVjY2hpZSBkZWxsYSAyLjAueCBhdmV2YW5vIGNyYXNoIGNvbGxlZ2F0aSBhaSB0aHJlYWQpLCDDqAogIG1lZ2xpbyBhdmVyZSB1bmEgdmVyc2lvbmUgY29ycmVudGUgZGVsIEtlcm5lbCBjb21lIGxhIDIuNC54IG8gMi42LnguCgpJbmZvcm1hemlvbmkgRnJlZUJTRDoKICBJbiBnZW5lcmFsZSBXaW5lIG5vbiBmdW56aW9uZXLDoCBjb3JyZXR0YW1lbnRlIGNvbiB2ZXJzaW9uZSBwcmVjZWRlbnRpIGEgRnJlZUJTRAogIDYuMyBvIDcuMCwgZSBGcmVlQlNEIDYuMyBoYSBwYXRjaGVzIGFkZGl6aW9uYWxpIGRpc3BvbmliaWxpLiBMZWdnZXJlCiAgaHR0cDovL3dpa2kuZnJlZWJzZC5vcmcvV2luZSBwZXIgbWFnZ2lvcmkgaW5mb3JtYXppb25pLgoKSW5mb3JtYXppb25pIFNvbGFyaXM6CiAgQXZyYWkgbW9sdG8gcHJvYmFiaWxtZW50ZSBiaXNvZ25vIGRpIGNvbXBpbGFyZSBXaW5lIGNvbiBpIHRvb2wgR05VCiAgKGdjYywgZ2FzLCBldGMuKS4gQXR0ZW56aW9uZSA6IGluc3RhbGxhcmUgZ2FzICpub24qIGFzc2ljdXJhIGNoZQogIHNhcsOgIHVzYXRvIGRhIGdjYy4gUmljb21waWxhcmUgZ2NjIGRvcG8gbCdpbnN0YWxsYXppb25lIGRpIGdhcyBvCiAgaWwgc3ltbGluayBkaSBjYywgYXMgZSBsZCBwZXIgaSB0b29sIEdOVSDDqCBwcm9iYWJpbG1lbnRlIG5lY2Vzc2FyaW8uCgpJbmZvcm1hemlvbmkgTmV0QlNEOgogIEFzc2ljdXJhdGkgY2hlIGxlIG9wemlvbmkgVVNFUl9MRFQsIFNZU1ZTSE0sIFNZU1ZTRU0sIGUgU1lTVk1TRyBzaWFubyBhYmlsaXRhdGUgbmVsCiAgS2VybmVsLgoKSW5mb3JtYXppb25pIE1hYyBPUyBYOgogIEhhaSBiaXNvZ25vIGRpIFhjb2RlIDIuNCBvIHN1cGVyaW9yZSBwZXIgY29tcGlsYXJlIGNvcnJldHRhbWVudGUgc3UgeDg2LgoKRmlsZSBTeXN0ZW0gc3VwcG9ydGF0aToKICBXaW5lIGRvdnJlYmJlIGZ1bnppb25hcmUgc3VsbGEgbWFnZ2lvciBwYXJ0ZSBkaSBmaWxlIHN5c3RlbS4gUXVhbGNoZQogIHByb2JsZW1hIGRpIGNvbXBhdGliaWxpdMOgIMOoIHN0YXRvIHJpcG9ydGF0byB1c2FuZG8gZmlsZSBhY2NlZHV0aQogIGF0dHJhdmVyc28gU2FtYmEuIElub2x0cmUsIE5URlMgbm9uIGZvcm5pc2NlIHR1dHRlIGxlIGNhcmF0dGVyaXN0aWNoZQogIGRpIGZpbGUgc3lzdGVtIG5lY2Vzc2FyaWUgcGVyIGFsY3VuZSBhcHBsaWNhemlvbmkuIFVzYXJlIHVuIGZpbGUgc3lzdGVtCiAgbmF0aXZvIGRpIExpbnV4IGNvbWUgZXh0My80IMOoIHJhY2NvbW1hbmRhdG8uCgpSZXF1aXNpdGkgYmFzZToKICBEZXZlIGVzc2VyZSBpbnN0YWxsYXRvIGFuY2hlIGwnWDExIGRldmVsb3BtZW50IGluY2x1c2kgaSBmaWxlIChjaGlhbWF0bwogIHhsaWI2Zy1kZXYgaW4gRGViaWFuIGUgWGZyZWU4Ni1kZXZlbCBpbiBSZWRIYXQpLgoKICBPdnZpYW1lbnRlIGMnw6ggYmlzb2dubyBhbmNoZSBkaSAibWFrZSIgKHBvc3NpYmlsbWVudGUgR05VIG1ha2UpLgoKICDDiCBuZWNlc3NhcmlvIGFuY2hlIGZsZXgsIHZlcnNpb25lIDIuNS4zMyBvIHN1Y2Nlc3NpdmEgZSBiaXNvbi4KCkxpYnJlcmllIHBlciBzdXBwb3J0aSBvcHppb25hbGk6CiAgQ29uZmlndXJlIG1vc3RyZXLDoCBub3RpZmljaGUgcXVhbmRvIGxpYnJlcmllIG9wemlvbmFsaSBub24gc29ubyB0cm92YXRlCiAgc3VsIHR1byBzeXN0ZW0uIExlZ2dlcmUgaHR0cDovL3dpa2kud2luZWhxLm9yZy9SZWNvbW1lbmRlZF9QYWNrYWdlcyBwZXIKICBzdWdnZXJpbWVudGkgc3VpIHBhY2NoZXR0aSBjaGUgZG92cmVzdGkgaW5zdGFsbGFyZS4KCiAgU3UgcGlhdHRhZm9ybWUgYSA2NC1iaXQsIHNlIHN0YWkgY29tcGlsYW5kbyBXaW5lIGNvbWUgMzItYml0IChwcmVkZWZpbml0byksCiAgZGV2aSBpbnRhbGxhcmUgbGUgdmVyc2lvbmkgYSAzMi1iaXQgZGkgcXVlbGxlIGxpYnJlcmllOyBsZWdnZXJlCiAgaHR0cDovL3dpa2kud2luZWhxLm9yZy9XaW5lT242NGJpdCBwZXIgaSBkZXR0YWdsaS4gU2UgdnVvaSB1biB2ZXJvIFdpbmUgYQogIDY0LWJpdCAobyB1biBzZXR1cCBkaSBXaW5lIG1pc3RvIHRyYSAzMi1iaXQgZSA2NC1iaXQpLCBsZWdnZXJlCiAgaHR0cDovL3dpa2kud2luZWhxLm9yZy9XaW5lNjQgcGVyIGkgZGV0dGFnbGkuCgo0LiBDT01QSUxBWklPTkUKCk5lbCBjYXNvIGluIGN1aSBzaSBzY2VnbGllc3NlIGRpIG5vbiB1dGlsaXp6YXJlIFdpbmVpbnN0YWxsLCBlc2VndWkgaSBzZWd1ZW50aQpjb21hbmRpIHBlciBjb21waWxhcmUgV2luZToKCi4vY29uZmlndXJlCm1ha2UKClF1ZXN0byBjb21waWxlcsOgIGlsIHByb2dyYW1tYSAid2luZSIgZSBudW1lcm9zZSBsaWJyZXJpZSBlIGJpbmFyaSBkaSBzdXBwb3J0by4KSWwgcHJvZ3JhbW1hICJ3aW5lIiBjYXJpY2EgZWQgZXNlZ3VlIGdsaSBlc2VndWliaWxpIFdpbmRvd3MuCkxhIGxpYnJlcmlhICJsaWJ3aW5lIiAoIldpbmVsaWIiKSBwdcOyIGVzc2VyZSB1c2F0YSBwZXIgY29tcGlsYXJlIGUgbGlua2FyZSBpbApjb2RpY2Ugc29yZ2VudGUgV2luZG93cyBzb3R0byBVbml4LgoKUGVyIHZlZGVyZSBsZSBvcHppb25pIGRlbGxhIGNvbmZpZ3VyYXppb25lIGRlbGxhIGNvbXBpbGF6aW9uZSwgZXNlZ3VpCi4vY29uZmlndXJlIC1oZWxwLgoKNS4gU0VUVVAKClVuYSB2b2x0YSBjaGUgV2luZSDDqCBzdGF0byBjb21waWxhdG8gY29ycmV0dGFtZW50ZSwgcHVvaSBlc2VndWlyZQoibWFrZSBpbnN0YWxsIjsgcXVlc3RvIGluc3RhbGxlcsOgIGdsaSBlc2VndWliaWxpIHdpbmUsIGxhIHBhZ2luYSBtYW4gZGkgV2luZSwgZQpwb2NoaSBhbHRyaSBmaWxlIG5lY2Vzc2FyaS4KCk5vbiBkaW1lbnRpY2FydGkgZGkgZGlzaW5zdGFsbGFyZSBxdWFsc2lhc2kgcHJlY2VkZW50ZSBpbnN0YWxsYXppb25lIGRpIFdpbmUgaW4KY29uZmxpdHRvLiBQcm92YSBzaWEgImRwa2cgLXIgd2luZSIgbyAicnBtIC1lIHdpbmUiIG8gIm1ha2UgdW5pbnN0YWxsIiBwcmltYSBkaQppbnN0YWxsYXJlLgoKVW5hIHZvbHRhIGluc3RhbGxhdG8sIGVzZWd1aSBsbyBzdHJ1bWVudG8gZGkgY29uZmlndXJhemlvbmUgIndpbmVjZmciLiBDb250cm9sbGEKbCdhcmVhIFN1cHBvcnQgc3UgaHR0cDovL3d3dy53aW5laHEub3JnLyBwZXIgc3VnZ2VyaW1lbnRpIHN1bGxhIGNvbmZpZ3VyYXppb25lLgoKNi4gRVNFR1VJUkUgSSBQUk9HUkFNTUkKClF1YW5kbyBzaSBlc2VndWUgV2luZSwgc2kgcHXDsiBzcGVjaWZpY2FyZSBsJ2ludGVybyBwZXJjb3JzbyBkZWxsJ2VzZWd1aWJpbGUgbwpzb2xvIGlsIG5vbWUgZGVsIGZpbGUuCgpQZXIgZXNlbXBpbzogcGVyIGVzZWd1aXJlIEJsb2NjbyBOb3RlOgoKCXdpbmUgbm90ZXBhZCAgICAgICAgICAgICAgICAgICAgICAoVXRpbGl6emFuZG8gaWwgcGVyY29yc28gZGkgcmljZXJjYSBjb21lCgl3aW5lIG5vdGVwYWQuZXhlICAgICAgICAgIHNwZWNpZmljYXRvIG5lbCByZWdpc3RybyBwZXIgbG9jYWxpenphcmUgaWwgZmlsZSkKCgl3aW5lIGM6XFx3aW5kb3dzXFxub3RlcGFkLmV4ZSAgICAgICAgICAgICAgICAgKHV0aWxpenphbmRvIGxhIHNpbnRhc3NpIERPUykKCXdpbmUgfi8ud2luZS9kcml2ZV9jL3dpbmRvd3Mvbm90ZXBhZC5leGUgICAgICh1dGlsaXp6YW5kbyBsYSBzaW50YXNzaSBVbml4KQoJd2luZSBub3RlcGFkLmV4ZSByZWFkbWUudHh0ICAgICAgICAgKGNoaWFtYSBpbCBwcm9ncmFtbWEgY29uIGRlaSBwYXJhbWV0cmkpCgpXaW5lIG5vbiDDqCBhbmNvcmEgY29tcGxldG8sIHF1aW5kaSBhbGN1bmkgcHJvZ3JhbW1pIHBvdHJlYmJlcm8gYW5kYXJlIGluIGNyYXNoLgpTZSBjacOyIGFjY2FkZXNzZSwgYXZyYWkgdW4gbG9nIGRlbCBjcmFzaCBjaGUgZG92cmVzdGkgYWdnaXVuZ2VyZSBhbCB0dW8gcmFwcG9ydG8KcXVhbmRvIGFwcmkgdW4gYnVnLgoKNy4gUEVSIE9UVEVORVJFIFBJVScgSU5GT1JNQVpJT05JCgpXV1c6IAlVbiBncmFuIHF1YW50aXRhdGl2byBkaSBpbmZvcm1hemlvbmkgc3UgV2luZSDDqCBkaXNwb25pYmlsZSBkYSBXaW5lSFEgYQoJaHR0cDovL3d3dy53aW5laHEub3JnLzogdmFyaWUgZ3VpZGUgc3UgV2luZSwgZGF0YWJhc2UgZGVsbGUgYXBwbGljYXppb25pLAogICAgcmludHJhY2NpYW1lbnRvIGRpIGJ1Zy4gUXVlc3RvIMOoIHByb2JhYmlsbWVudGUgaWwgbWlnbGlvciBwdW50byBkaQoJcGFydGVuemEuCgpGQVE6IAlMZSBGQVEgZGkgV2luZSBzaSB0cm92YW5vIGFsbCdpbmRpcml6em8gaHR0cDovL3d3dy53aW5laHEub3JnL0ZBUQoKV2lraTogICBJbCBXaWtpIGRpIFdpbmUgc2kgdHJvdmEgYWxsJ2luZGlyaXp6byAgaHR0cDovL3dpa2kud2luZWhxLm9yZwoKTWFpbGluZyBsaXN0OgogICAgRXNpc3Rvbm8gZGl2ZXJzZSBtYWlsaW5nIGxpc3QgcGVyIGdsaSBzdmlsdXBwYXRvcmkgZGkgV2luZTsgdmlzaXRhCiAgICBodHRwOi8vd3d3LndpbmVocS5vcmcvZm9ydW1zIHBlciB1bHRlcmlvcmkgaW5mb3JtYXppb25pLgoKQnVnczoJIFNlZ25hbGEgaSBCdWcgc3UgV2luZSBCdWd6aWxsYSBhbGwnaW5kaXJpenpvIGh0dHA6Ly9idWdzLndpbmVocS5vcmcKCVBlciBmYXZvcmUsIGNlcmNhIG5lbCBkYXRhYmFzZSBkaSBCdWd6aWxsYSBwZXIgdmVyaWZpY2FyZSBjaGUgaWwgdHVvIHByb2JsZW1hCglub24gc2lhIGdpw6Agc3RhdG8gdHJvdmF0byBwcmltYSBkaSBwb3N0YXJlIHVuIHJhcHBvcnRvIHN1IHVuIGJ1Zy4KCklSQzoJIEFpdXRvIG9ubGluZSDDqCBkaXNwb25pYmlsZSBuZWwgY2FuYWxlICNXaW5lSFEgc3UgaXJjLmZyZWVub2RlLm5ldC4KCkdpdDogICAgTCdhbGJlcm8gYXR0dWFsZSBkaSBzdmlsdXBwbyBkaSAgV2luZSDDqCBkaXNwb25pYmlsZSBhdHRyYXZlcnNvIEdpdC4KICAgIFZlZGVyZSBodHRwOi8vd3d3LndpbmVocS5vcmcvZ2l0IHBlciBtYWdnaW9yaSBpbmZvcm1hemlvbmkuCgpTZSBhZ2dpdW5naSBxdWFsY29zYSwgbyBjb3JyZWdnaSB1biBidWcsIHBlciBmYXZvcmUgbWFuZGEgdW5hIHBhdGNoIChwcmVmZXJpYmlsbWVudGUKdXNhbmRvIGdpdC1mb3JtYXQtcGF0Y2gpIGFsbGEgbWFpbGluZyBsaXN0IHdpbmUtcGF0Y2hlc0B3aW5laHEub3JnIHBlcgpsJ2luY2x1c2lvbmUgbmVpIHByb3NzaW1pIHJpbGFzY2kuCgotLQpBbGV4YW5kcmUgSnVsbGlhcmQKanVsbGlhcmRAd2luZWhxLm9yZwoKdHJhZG90dG8gZGE6CkZyYW5jZXNjbyBEaSBQdW56aW8K