ICA8Y2hhcHRlciBpZD0iY29uZmlnLXdpbmUtbWFpbiI+CiAgICA8dGl0bGU+Q29uZmlndXJpbmcgV2luZTwvdGl0bGU+CiAgICA8cGFyYT4KICAgICAgTm93IHRoYXQgeW91IGhvcGVmdWxseSBtYW5hZ2VkIHRvIHN1Y2Nlc3NmdWxseSBpbnN0YWxsCiAgICAgIHRoZSBXaW5lIHByb2dyYW0gZmlsZXMsCiAgICAgIHRoaXMgY2hhcHRlciB3aWxsIHRlbGwgeW91IGhvdyB0byBjb25maWd1cmUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgcHJvcGVybHkgdG8gcnVuIHlvdXIgV2luZG93cyBwcm9ncmFtcy4KICAgIDwvcGFyYT4KICAgIDxwYXJhPgogICAgICBGaXJzdCwgd2UnbGwgZ2l2ZSB5b3UgYW4gb3ZlcnZpZXcgYWJvdXQgd2hpY2gga2luZHMgb2YKICAgICAgY29uZmlndXJhdGlvbiBhbmQgcHJvZ3JhbSBleGVjdXRpb24gYXNwZWN0cyBhIGZ1bGx5IGNvbmZpZ3VyZWQKICAgICAgV2luZG93cyBlbnZpcm9ubWVudCBoYXMgdG8gZnVsZmlsbCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBtYW55CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgcnVuIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGVuY291bnRlcmluZyBhbnkKICAgICAgbWlzY29uZmlndXJlZCBvciBtaXNzaW5nIGl0ZW1zLgogICAgICBOZXh0LCB3ZSdsbCBzaG93IHlvdSB3aGljaCBlYXN5IGhlbHBlciBwcm9ncmFtcyBleGlzdAogICAgICB0byBlbmFibGUgZXZlbiBub3ZpY2UgdXNlcnMgdG8gY29tcGxldGUgdGhlIFdpbmUgZW52aXJvbm1lbnQKICAgICAgY29uZmlndXJhdGlvbiBpbiBhIGZhc3QgYW5kIGVhc3kgd2F5LgogICAgICBUaGUgbmV4dCBzZWN0aW9uIHdpbGwgZXhwbGFpbiB0aGUgcHVycG9zZSBvZiB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUsCiAgICAgIGFuZCB3ZSdsbCBsaXN0IGFsbCBvZiBpdHMgc2V0dGluZ3MuCiAgICAgIEFmdGVyIHRoYXQsIHRoZSBuZXh0IHNlY3Rpb24gd2lsbCBkZXRhaWwgdGhlIG1vc3QgaW1wb3J0YW50IGFuZAogICAgICB1bmZvcnR1bmF0ZWx5IG1vc3QgZGlmZmljdWx0IGNvbmZpZ3VyYXRpb24gcGFydDoKICAgICAgaG93IHRvIGNvbmZpZ3VyZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIERPUyBkcml2ZSBlbnZpcm9ubWVudCB0aGF0CiAgICAgIFdpbmRvd3MgcHJvZ3JhbXMgbmVlZC4KICAgICAgSW4gdGhlIGxhc3Qgc3RlcCB3ZSdsbCB0ZWxsIHlvdSBob3cgdG8gZXN0YWJsaXNoIGEgd29ya2luZyBXaW5kb3dzCiAgICAgIHJlZ2lzdHJ5IGJhc2UuCiAgICAgIEZpbmFsbHksIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhpcyBjaGFwdGVyIGNvbnRhaW4gZGVzY3JpcHRpb25zCiAgICAgIG9mIHNwZWNpZmljIFdpbmUgY29uZmlndXJhdGlvbiBpdGVtcyB0aGF0IG1pZ2h0IGFsc28gYmUKICAgICAgb2YgaW50ZXJlc3QgdG8geW91LgogICAgPC9wYXJhPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXJlcXVpcmVtZW50cy13aW5kb3dzIiB4cmVmbGFiZWw9Ii0tSW5zdGFsbGluZyBTZWN0aW9uLS0iPgogICAgICA8dGl0bGU+V2hhdCBhcmUgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGZ1bGx5IHdvcmtpbmcgV2luZG93cyBlbnZpcm9ubWVudD88L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIEEgV2luZG93cyBpbnN0YWxsYXRpb24gaXMgYSB2ZXJ5IGNvbXBsZXggc3RydWN0dXJlLiBJdCBjb25zaXN0cyBvZgoJICBtYW55IGRpZmZlcmVudCBwYXJ0cyB3aXRoIHZlcnkgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkuCgkgIFdlJ2xsIHRyeSB0byBvdXRsaW5lIHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3RzIG9mIGl0LgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUmVnaXN0cnkuIE1hbnkga2V5cyBhcmUgc3VwcG9zZWQgdG8gZXhpc3QgYW5kIGNvbnRhaW4KICAgICAgICAgICAgICBtZWFuaW5nZnVsIGRhdGEsIGV2ZW4gaW4gYSBuZXdseS1pbnN0YWxsZWQgV2luZG93cy4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgRGlyZWN0b3J5IHN0cnVjdHVyZS4gQXBwbGljYXRpb25zIGV4cGVjdCB0byBmaW5kIGFuZC9vcgogICAgICAgICAgICAgIGluc3RhbGwgdGhpbmdzIGluIHNwZWNpZmljIHByZWRldGVybWluZWQgbG9jYXRpb25zLiBNb3N0CiAgICAgICAgICAgICAgb2YgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIGV4cGVjdGVkIHRvIGV4aXN0LiBCdXQgdW5saWtlCiAgICAgICAgICAgICAgVW5peCBkaXJlY3Rvcnkgc3RydWN0dXJlcywgbW9zdCBvZiB0aGVzZSBsb2NhdGlvbnMgYXJlCiAgICAgICAgICAgICAgbm90IGhhcmRjb2RlZCwgYW5kIGNhbiBiZSBxdWVyaWVkIHZpYSB0aGUgV2luZG93cyBBUEkKICAgICAgICAgICAgICBhbmQgdGhlIHJlZ2lzdHJ5LiBUaGlzIHBsYWNlcyBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBvbgogICAgICAgICAgICAgIGEgV2luZSBpbnN0YWxsYXRpb24uCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFN5c3RlbSBETExzLiBJbiBXaW5kb3dzLCB0aGVzZSB1c3VhbGx5IHJlc2lkZSBpbiB0aGUKICAgICAgICAgICAgICA8ZmlsZW5hbWU+c3lzdGVtPC9maWxlbmFtZT4gKG9yCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnN5c3RlbTMyPC9maWxlbmFtZT4pIGRpcmVjdG9yeS4gU29tZSBXaW5kb3dzCiAgICAgICAgICAgICAgcHJvZ3JhbXMgY2hlY2sgZm9yIHRoZWlyIGV4aXN0ZW5jZSBpbiB0aGVzZQogICAgICAgICAgICAgIGRpcmVjdG9yaWVzIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGxvYWQgdGhlbS4gV2hpbGUgV2luZQogICAgICAgICAgICAgIGlzIGFibGUgdG8gbG9hZCBpdHMgb3duIGludGVybmFsIERMTHMKICAgICAgICAgICAgICAoPGZpbGVuYW1lPi5zbzwvZmlsZW5hbWU+IGZpbGVzKSB3aGVuIHRoZSBwcm9ncmFtCiAgICAgICAgICAgICAgYXNrcyBmb3IgYSBETEwsIFdpbmUgZG9lcyBub3Qgc2ltdWxhdGUgdGhlIHByZXNlbmNlIG9mCiAgICAgICAgICAgICAgbm9uLWV4aXN0ZW50IGZpbGVzLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdoaWxlIHRoZSB1c2VycyBhcmUgb2YgY291cnNlIGZyZWUgdG8gc2V0IHVwIGV2ZXJ5dGhpbmcKICAgICAgICAgIHRoZW1zZWx2ZXMsIHRoZSBXaW5lIHRlYW0gd2lsbCBtYWtlIHRoZSBhdXRvbWF0ZWQgV2luZSBzb3VyY2UKICAgICAgICAgIGluc3RhbGxhdGlvbiBzY3JpcHQsIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+LAogICAgICAgICAgZG8gZXZlcnl0aGluZyB3ZSBmaW5kIG5lY2Vzc2FyeSB0byBkbzsgcnVubmluZyB0aGUKICAgICAgICAgIGNvbnZlbnRpb25hbCA8dXNlcmlucHV0PmNvbmZpZ3VyZSAmJiBtYWtlIGRlcGVuZCAmJiBtYWtlICYmIG1ha2UKICAgICAgICAgICAgaW5zdGFsbDwvdXNlcmlucHV0PiBjeWNsZSBpcyB0aHVzIG5vdCByZWNvbW1lbmRlZCwgdW5sZXNzCiAgICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gQXQgdGhlIG1vbWVudCwKICAgICAgICAgIDxmaWxlbmFtZT50b29scy93aW5laW5zdGFsbDwvZmlsZW5hbWU+IGlzIGFibGUgdG8gY3JlYXRlIGEKICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSwgaW5zdGFsbCB0aGUgcmVnaXN0cnksIGFuZCBjcmVhdGUgdGhlCiAgICAgICAgICBkaXJlY3Rvcnkgc3RydWN0dXJlIGl0c2VsZi4KICAgICAgICA8L3BhcmE+CgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1oZWxwZXItcHJvZ3JhbXMiPgogICAgICA8dGl0bGU+RWFzeSBjb25maWd1cmF0aW9uIGhlbHBlciBwcm9ncmFtczwvdGl0bGU+CgogICAgICA8cGFyYT4KICAgICAgICBNYW5hZ2luZyB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgc2V0dGluZ3MgY2FuIGJlIGEKCWRpZmZpY3VsdCB0YXNrLCBzb21ldGltZXMgdG9vIGRpZmZpY3VsdCBmb3Igc29tZSBwZW9wbGUuCglUaGF0J3Mgd2h5IHRoZXJlIGFyZSBzb21lIGhlbHBlciBhcHBsaWNhdGlvbnMgZm9yIGVhc2lseSBzZXR0aW5nIHVwIGFuCglpbml0aWFsIHdpbmUgY29uZmlndXJhdGlvbiBmaWxlIHdpdGggdXNlZnVsIGRlZmF1bHQgc2V0dGluZ3MuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWhlbHBlci13aW5lc2V0dXB0ayI+CiAgICAgICAgPHRpdGxlPldpbmVTZXR1cFRrPC90aXRsZT4KCTxwYXJhPgoJICBXaW5lU2V0dXBUayBpcyBhIGdyYXBoaWNhbCBXaW5lIGNvbmZpZ3VyYXRpb24gdG9vbCB3aXRoCgkgIGluY3JlZGlibHkgZWFzeSBoYW5kbGluZyBvZiBXaW5lIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCB0byBiZQoJICB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgV2luZSBlbnZpcm9ubWVudCBhZnRlciBoYXZpbmcKCSAgaW5zdGFsbGVkIHRoZSBXaW5lIGZpbGVzLgoJICBJdCBoYXMgYmVlbiB3cml0dGVuIGJ5IENvZGVXZWF2ZXJzIGluIDIwMDAgYXMgcGFydCBvZiBhIGhvc3QKCSAgb2Ygb3RoZXIgZWZmb3J0cyB0byBtYWtlIFdpbmUgbW9yZSBkZXNrdG9wIG9yaWVudGVkLCBhbmQgdXBkYXRlZAoJICBpbiAyMDAzIGJ5IFZpbmNlbnQgQulyb24sIEFsZXggUGFzYWR5biBhbmQgSXZhbiBMZW8gTXVycmF5LVNtaXRoLgoJPC9wYXJhPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBEZWJpYW4sIHNpbXBseSBpbnN0YWxsIHRoZSBXaW5lU2V0dXBUawoJICBwYWNrYWdlIChhcyByb290KToKCTwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+IyA8L3Byb21wdD48dXNlcmlucHV0PmFwdC1nZXQgaW5zdGFsbCB3aW5lc2V0dXB0azwvdXNlcmlucHV0PgogIDwvc2NyZWVuPgoJPHBhcmE+CgkgIElmIHlvdSdyZSB1c2luZyBhbm90aGVyIGRpc3RyaWJ1dGlvbiwgeW91IGNhbiBnZXQgV2luZVNldHVwVGsgZnJvbSB0aGUKCSAgPHVsaW5rIHVybD0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjI0MSI+CiAgICAgICAgICBzb3VyY2Vmb3JnZS5uZXQgV2luZSBkb3dubG9hZCBwYWdlPC91bGluaz4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KICAgICAgCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWhlbHBlci13aW5laW5zdGFsbCI+CiAgICAgICAgPHRpdGxlPndpbmVpbnN0YWxsPC90aXRsZT4KCTxwYXJhPgoJICA8Y29tbWFuZD53aW5laW5zdGFsbDwvY29tbWFuZD4gaXMgYSBzbWFsbCBjb25maWd1cmF0aW9uIHRvb2wKCSAgcmVzaWRpbmcgYXMgPGZpbGVuYW1lPnRvb2xzL3dpbmVpbnN0YWxsPC9maWxlbmFtZT4gaW4gYSBXaW5lCgkgIHNvdXJjZSBjb2RlIHRyZWUuICBJdCBoYXMgYmVlbiB3cml0dGVuIHRvIGFsbG93IGZvciBhbiBlYXN5CgkgIGFuZCBjb21wbGV0ZSBjb21waWxhdGlvbi9pbnN0YWxsYXRpb24gb2YgV2luZSBzb3VyY2UgY29kZSBmb3IKCSAgcGVvcGxlIHdobyBkb24ndCBib3RoZXIgd2l0aCByZWFkaW5nIGhlYXBzIG9mIHZlcnkgdmFsdWFibGUKCSAgYW5kIGluZm9ybWF0aXZlIGRvY3VtZW50YXRpb24gOy0pCgk8L3BhcmE+Cgk8cGFyYT4KCSAgT25jZSB5b3UgaGF2ZSBzdWNjZXNzZnVsbHkgZXh0cmFjdGVkIHRoZSBXaW5lIHNvdXJjZSBjb2RlCgkgIHRyZWUsIGNoYW5nZSB0byB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgaXQgYW5kIHRoZW4gcnVuIChhcwoJICB1c2VyKToKCTwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+JCA8L3Byb21wdD48dXNlcmlucHV0Pi4vdG9vbHMvd2luZWluc3RhbGw8L3VzZXJpbnB1dD4KICA8L3NjcmVlbj4KCTxwYXJhPgoJICBEb2luZyBzbyB3aWxsIGNvbXBpbGUgV2luZSwgaW5zdGFsbCBXaW5lIGFuZCBjb25maWd1cmUgdGhlCgkgIFdpbmUgZW52aXJvbm1lbnQgKGVpdGhlciBieSBwcm92aWRpbmcgYWNjZXNzIHRvIGEgV2luZG93cwoJICBwYXJ0aXRpb24gb3IgYnkgY3JlYXRpbmcgYSBwcm9wZXJseSBjb25maWd1cmVkIG5vLXdpbmRvd3MKCSAgZGlyZWN0b3J5IGVudmlyb25tZW50KS4KCTwvcGFyYT4KCiAgICAgIDwvc2VjdDI+CjwhLS0KICAgICAgQ29tbWVudGluZyBvdXQgdW50aWwgd2luZWNmZyBkb2Vzbid0IGFjdHVhbGx5IGRvIHNvbWV0aGluZy4KICAgICAgPHNlY3QyIGlkPSJjb25maWctaGVscGVyLXdpbmVjZmciPgogICAgICAgIDx0aXRsZT53aW5lY2ZnPC90aXRsZT4KCTxwYXJhPgoJICA8Y29tbWFuZD53aW5lY2ZnPC9jb21tYW5kPiBpcyBhIHNtYWxsIGdyYXBoaWNhbCBjb25maWd1cmF0aW9uIHRvb2wKCSAgcmVzaWRpbmcgYXMgPGZpbGVuYW1lPnByb2dyYW1zL3dpbmVjZmc8L2ZpbGVuYW1lPiBpbiBhIFdpbmUKCSAgc291cmNlIGNvZGUgdHJlZS4gSXQgaXMgYSBXaW5lbGliIGFwcCBtYWtpbmcgdXNlIG9mIHN0YW5kYXJkCgkgIFdpbjMyIEdVSSBjb250cm9scyB0byBlYXNpbHkgY3VzdG9taXplIGVudHJpZXMgaW4gYSBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gZmlsZS4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KLS0+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXZlcmlmeSI+CiAgICAgIDx0aXRsZT5WZXJpZmljYXRpb24gb2YgY29ycmVjdCBjb25maWd1cmF0aW9uPC90aXRsZT4KCiAgICAgIDxwYXJhPgoJQWZ0ZXIgeW91IGZpbmlzaGVkIGNvbmZpZ3VyaW5nIFdpbmUsIHlvdSBtYXkgcnVuIGEgUGVybAoJc2NyaXB0IGNhbGxlZCA8Y29tbWFuZD53aW5lY2hlY2s8L2NvbW1hbmQ+LCB0byBiZSBmb3VuZAoJaW4gV2luZSdzIHRvb2xzLyBkaXJlY3RvcnkuIEl0IHRyaWVzIHRvIGNoZWNrIHlvdXIKCWNvbmZpZ3VyYXRpb24ncyBjb3JyZWN0bmVzcyBieSBjaGVja2luZyBmb3Igc29tZSBwb3B1bGFyCglwcm9ibGVtcy4gIFRvIHJ1biBpdCwgcnVuIGluIGEgPGdsb3NzdGVybT50ZXJtaW5hbDwvZ2xvc3N0ZXJtPiAKCWluIHRoZSBXaW5lIHNvdXJjZSB0cmVlIGRpcmVjdG9yeToKICAgICAgPC9wYXJhPgogIDxzY3JlZW4+CiAgPHByb21wdD4kIDwvPjx1c2VyaW5wdXQ+Y2QgdG9vbHM8Lz4KICA8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5wZXJsIC4vd2luZWNoZWNrPC8+CiAgPC9zY3JlZW4+CiAgICAgIDxwYXJhPgoJVGhlIHdpbmVjaGVjayBvdXRwdXQgd2lsbCBiZSBhIHBlcmNlbnRhZ2Ugc2NvcmUgaW5kaWNhdGluZyBXaW5lCgljb25maWd1cmF0aW9uIGNvcnJlY3RuZXNzLiAgUGxlYXNlIG5vdGUgdGhhdCB3aW5lY2hlY2sgaXMgbm90IAogICAgICAgIDEwMCUgYWNjdXJhdGUuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxwYXJhPgogICAgICAgIElmIHRoaXMgeWllbGRzIGEgImdvb2QiIHBlcmNlbnRhZ2Ugc2NvcmUsIHRoZW4geW91IGNhbiBjb25zaWRlcgoJeW91ciBXaW5lIGluc3RhbGxhdGlvbiB0byBiZSBmaW5pc2hlZCBzdWNjZXNzZnVsbHk6CglDb25ncmF0dWxhdGlvbnMhCglPdGhlcndpc2UgKG9yIGlmIHRoZXJlIGFyZSBzdGlsbCBzb21lIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMKCXRoYXQgPGNvbW1hbmQ+d2luZWNoZWNrPC9jb21tYW5kPiBkb2Vzbid0IGNhdGNoIHByb3Blcmx5KSwgcGxlYXNlIGNoZWNrIG91dCB0aGUKCWNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiBiZWxvdyB0byBmaW5kIG91dCBtb3JlIGFib3V0IHNvbWUKCXBhcnRzLCBvciBwcm9jZWVkIHRvIHRoZSA8bGluayBsaW5rZW5kPSJidWdzIj5Ucm91Ymxlc2hvb3RpbmcKCWNoYXB0ZXI8L2xpbms+LgogICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLWZpbGUiPgogICAgICA8dGl0bGU+VGhlIFdpbmUgQ29uZmlndXJhdGlvbiBGaWxlPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgVGhpcyBzZWN0aW9uIGlzIG1lYW50IHRvIGNvbnRhaW4gYm90aCBhbiBlYXN5IHN0ZXAtYnktc3RlcCBpbnRyb2R1Y3Rpb24KCXRvIHRoZSBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSAoZm9yIG5ldyBXaW5lIHVzZXJzKQoJYW5kIGEgY29tcGxldGUgcmVmZXJlbmNlIHRvIGFsbCBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5ncyAoZm9yCglhZHZhbmNlZCB1c2VycykuCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+Q29uZmlndXJhdGlvbiBGaWxlIEludHJvZHVjdGlvbjwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIGNlbnRyYWwgZmlsZSB0byBzdG9yZQoJICBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBXaW5lLgoJICBUaGlzIGZpbGUgKHdoaWNoIGlzIGNhbGxlZCA8ZmlsZW5hbWU+Y29uZmlnPC9maWxlbmFtZT4pCgkgIGNhbiBiZSBmb3VuZCBpbiB0aGUgc3ViIGRpcmVjdG9yeSA8ZmlsZW5hbWU+LndpbmUvPC9maWxlbmFtZT4KCSAgb2YgeW91ciB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkKCSAgKGRpcmVjdG9yeSA8ZmlsZW5hbWU+L2hvbWUvdXNlci88L2ZpbGVuYW1lPikuIEluIG90aGVyIHdvcmRzLCB0aGUgV2luZQoJICBjb25maWd1cmF0aW9uIGZpbGUgaXMgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4uCgkgIE5vdGUgdGhhdCBzaW5jZSB0aGUgV2luZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgYSBwYXJ0IG9mIHRoZQoJICBXaW5lIHJlZ2lzdHJ5IGZpbGUgc3lzdGVtLCB0aGlzIGZpbGUgYWxzbwoJICA8ZW1waGFzaXM+cmVxdWlyZXM8L2VtcGhhc2lzPiBhIGNvcnJlY3QgIldJTkUgUkVHSVNUUlkKCSAgVmVyc2lvbiAyIiBoZWFkZXIgbGluZSB0byBiZSByZWNvZ25pemVkIHByb3Blcmx5LCBqdXN0IGxpa2UKCSAgYWxsIG90aGVyIFdpbmUgcmVnaXN0cnkgdGV4dCBmaWxlcyAoanVzdCBpbiBjYXNlIHlvdSBkZWNpZGVkCgkgIHRvIHdyaXRlIHlvdXIgb3duIHJlZ2lzdHJ5IGZpbGUgZnJvbSBzY3JhdGNoIGFuZCB3b25kZXIgd2h5CgkgIFdpbmUga2VlcHMgcmVqZWN0aW5nIGl0KS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGUgc2V0dGluZ3MgYXZhaWxhYmxlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW5jbHVkZToKICAgICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIERyaXZlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlbQogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgRGlyZWN0b3J5IHNldHRpbmdzCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBQb3J0IHNldHRpbmdzCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBUaGUgV2luZSBsb29rIGFuZCBmZWVsCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBXaW5lJ3MgRExMIHVzYWdlCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICBXaW5lJ3MgbXVsdGltZWRpYSBkcml2ZXJzIGFuZCBETEwgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+Q3JlYXRpbmcgT3IgTW9kaWZ5aW5nIFRoZSBDb25maWd1cmF0aW9uIEZpbGU8L3RpdGxlPgogICAgICAgIDxwYXJhPgoJICBJZiB5b3UganVzdCBpbnN0YWxsZWQgV2luZSBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIHdhbnQgdG8KCSAgZmluaXNoIFdpbmUgaW5zdGFsbGF0aW9uIGJ5IGNvbmZpZ3VyaW5nIGl0IG5vdywgdGhlbiB5b3UgY291bGQKCSAgdXNlIG91ciBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIDxmaWxlbmFtZT5jb25maWc8L2ZpbGVuYW1lPgoJICAod2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBkaXJlY3RvcnkKCSAgPGZpbGVuYW1lPmRvY3VtZW50YXRpb24vc2FtcGxlcy88L2ZpbGVuYW1lPiBvZiB0aGUgV2luZSBzb3VyY2UKCSAgY29kZSBkaXJlY3RvcnkpIGFzIGEgYmFzZSBmb3IgYWRhcHRpbmcgdGhlIFdpbmUgY29uZmlndXJhdGlvbgoJICBmaWxlIHRvIHRoZSBzZXR0aW5ncyB5b3Ugd2FudC4KCSAgRmlyc3QsIEkgc2hvdWxkIG1lbnRpb24gdGhhdCB5b3Ugc2hvdWxkIG5vdCBmb3JnZXQgdG8gbWFrZQoJICBzdXJlIHRoYXQgYW55IHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZSBhdAoJICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBoYXMgYmVlbiBzYWZlbHkgbW92ZWQgb3V0CgkgIG9mIHRoZSB3YXkgaW5zdGVhZCBvZiBzaW1wbHkgb3ZlcndyaXRpbmcgaXQgd2hlbiB5b3Ugd2lsbCBub3cKCSAgY29weSBvdmVyIHRoZSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlLgogICAgICAgIDwvcGFyYT4KCTxwYXJhPgoJICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIHByZS1leGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHRodXMKCSAgbmVlZCB0byBjb3B5IG92ZXIgb3VyIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgdG8gdGhlCgkgIHN0YW5kYXJkIFdpbmUgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9uLCBkbyBpbiBhCgkgIDxnbG9zc3Rlcm0+dGVybWluYWw8L2dsb3NzdGVybT46CiAgPHNjcmVlbj4KICA8cHJvbXB0PiQgPC8+PHVzZXJpbnB1dD5ta2RpciB+Ly53aW5lLzwvPgogIDxwcm9tcHQ+JCA8Lz48dXNlcmlucHV0PmNwIDxyZXBsYWNlYWJsZT5kaXJfdG9fd2luZV9zb3VyY2VfY29kZTwvcmVwbGFjZWFibGU+L2RvY3VtZW50YXRpb24vc2FtcGxlcy9jb25maWcgfi8ud2luZS9jb25maWc8Lz4KICA8L3NjcmVlbj4KCSAgT3RoZXJ3aXNlLCBzaW1wbHkgdXNlIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZQoJICBhdCA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KCTwvcGFyYT4KCTxwYXJhPgoJICBOb3cgeW91IGNhbiBzdGFydCBhZGFwdGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlJ3Mgc2V0dGluZ3Mgd2l0aCBhbgoJICA8Z2xvc3N0ZXJtPmVkaXRvcjwvZ2xvc3N0ZXJtPiBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24KCSAgYmVsb3cuCgkgIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5vbmx5PC9lbXBoYXNpcz4gY2hhbmdlCgkgIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXR0aW5ncyBpZiB3aW5lc2VydmVyIGlzIG5vdCBydW5uaW5nIChpbgoJICBvdGhlciB3b3JkczogaWYgeW91ciB1c2VyIGRvZXNuJ3QgaGF2ZSBhIFdpbmUgc2Vzc2lvbiBydW5uaW5nKSwKCSAgb3RoZXJ3aXNlIFdpbmUgd29uJ3QgdXNlIHRoZW0gLSBhbmQgZXZlbiB3b3JzZSwgd2luZXNlcnZlciB3aWxsCgkgIG92ZXJ3cml0ZSB0aGVtIHdpdGggdGhlIG9sZCBzZXR0aW5ncyBvbmNlIHdpbmVzZXJ2ZXIgcXVpdHMhIQoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZmlsZS1ob3ciPgogICAgICAgIDx0aXRsZT5XaGF0IERvZXMgSXQgQ29udGFpbj88L3RpdGxlPgoKICAgICAgICA8cGFyYT4KCSAgTGV0J3Mgc3RhcnQgYnkgZ2l2aW5nIGFuIG92ZXJ2aWV3IG9mIHdoaWNoIHNlY3Rpb25zIGEKCSAgY29uZmlndXJhdGlvbiBmaWxlIG1heSBjb250YWluLCBhbmQgd2hldGhlciB0aGUgaW5jbHVzaW9uIG9mCgkgIHRoZSByZXNwZWN0aXZlIHNlY3Rpb24gaXMgPGVtcGhhc2lzPm5lZWRlZDwvZW1waGFzaXM+IG9yIG9ubHkgPGVtcGhhc2lzPnJlY29tbWVuZGVkPC9lbXBoYXNpcz4gKCJyZWNtZCIpLgoJPC9wYXJhPgoKICAgICAgICA8aW5mb3JtYWx0YWJsZSBmcmFtZT0iYWxsIj4KICAgICAgICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlNlY3Rpb24gTmFtZTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TmVlZGVkPzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCBpdCBEb2VzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0RyaXZlIHhdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT55ZXM8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNldHMgdXAgZHJpdmUgbWFwcGluZ3MgdG8gYmUgdXNlZCBieSBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5Plt3aW5lXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5HZW5lcmFsIHNldHRpbmdzIGZvciBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltEbGxEZWZhdWx0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5EZWZhdWx0cyBmb3IgbG9hZGluZyBETEwnczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsUGFpcnNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5yZWNtZDwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+U2FuaXR5IGNoZWNrZXJzIGZvciBETEwnczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGxsT3ZlcnJpZGVzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pk92ZXJyaWRlcyBkZWZhdWx0cyBmb3IgRExMIGxvYWRpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3gxMWRydl08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnJlY21kPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5HcmFwaGljcyBkcml2ZXIgc2V0dGluZ3M8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W2ZvbnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+eWVzPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5Gb250IGFwcGVhcmFuY2UgYW5kIHJlY29nbml0aW9uPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltzZXJpYWxwb3J0c108L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5Pm5vPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5DT00gcG9ydHMgc2VlbiBieSBXaW5lPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltwYXJhbGxlbHBvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkxQVCBwb3J0cyBzZWVuIGJ5IFdpbmU8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BwZGV2XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBhcmFsbGVscG9ydCBlbXVsYXRpb248L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3Nwb29sZXJdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJpbnQgc3Bvb2xpbmc8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W3BvcnRzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkRpcmVjdCBwb3J0IGFjY2VzczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bRGVidWddPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+V2hhdCB0byBkbyB3aXRoIGNlcnRhaW4gZGVidWcgbWVzc2FnZXM8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W1JlZ2lzdHJ5XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlNwZWNpZmllcyBsb2NhdGlvbnMgb2Ygd2luZG93cyByZWdpc3RyeSBmaWxlczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bdHdlYWsubGF5b3V0XTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+cmVjbWQ8L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkFwcGVhcmFuY2Ugb2YgV2luZTwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bcHJvZ3JhbXNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+UHJvZ3JhbXMgdG8gYmUgcnVuIGF1dG9tYXRpY2FsbHk8L2VudHJ5PgogICAgICAgICAgICAgIDwvcm93PgogICAgICAgICAgICAgIDxyb3c+CiAgICAgICAgICAgICAgICA8ZW50cnk+W0NvbnNvbGVdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+Q29uc29sZSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQ2xpcGJvYXJkXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PkludGVyYWN0aW9uIGZvciBXaW5lIGFuZCBYMTEgY2xpcGJvYXJkPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PlthZm1kaXJzXTwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+bm88L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PlBvc3RzY3JpcHQgZHJpdmVyIHNldHRpbmdzPC9lbnRyeT4KICAgICAgICAgICAgICA8L3Jvdz4KICAgICAgICAgICAgICA8cm93PgogICAgICAgICAgICAgICAgPGVudHJ5PltXaW5NTV08L2VudHJ5PgogICAgICAgICAgICAgICAgPGVudHJ5PnllczwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+TXVsdGltZWRpYSBzZXR0aW5nczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgICAgPHJvdz4KICAgICAgICAgICAgICAgIDxlbnRyeT5bQXBwRGVmYXVsdHNdPC9lbnRyeT4KICAgICAgICAgICAgICAgIDxlbnRyeT5ubzwvZW50cnk+CiAgICAgICAgICAgICAgICA8ZW50cnk+T3ZlcndyaXRlIHRoZSBzZXR0aW5ncyBvZiBwcmV2aW91cyBzZWN0aW9ucyBmb3Igc3BlY2lhbCBwcm9ncmFtczwvZW50cnk+CiAgICAgICAgICAgICAgPC9yb3c+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICA8L3Rncm91cD4KICAgICAgICA8L2luZm9ybWFsdGFibGU+CgogICAgICAgIDxwYXJhPgoJICBOb3cgbGV0J3MgZXhwbGFpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zIGluIGEKCSAgZGV0YWlsZWQgd2F5LgoJPC9wYXJhPgoJCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPlRoZSBbRHJpdmUgeF0gU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CgkgICAgRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlc2UgY29uZmlndXJhdGlvbiBmaWxlCgkgICAgc2VjdGlvbnMgd2hpY2ggYXJlIHVzZWQgdG8gc2V0IHVwIERPUyBkcml2ZSBtYXBwaW5ncyB0byBVbml4CgkgICAgZGlyZWN0b3J5IHNwYWNlLCBwbGVhc2UgbG9vayBhdCB0aGUgPGxpbmsKCSAgICBsaW5rZW5kPSJjb25maWctZHJpdmUtc2VjdGlvbnMiPldpbmUgZmlsZSBzeXN0ZW0gbGF5ZXIKCSAgICBjb25maWd1cmF0aW9uIHNlY3Rpb248L2xpbms+LgoJICA8L3BhcmE+Cgk8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy13aW5lIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW3dpbmVdIFNlY3Rpb24gPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3dpbmVdIHNlY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucyBhbGwga2luZHMKICAgICAgICAgICAgb2YgZ2VuZXJhbCBzZXR0aW5ncyBmb3IgV2luZS4KICAJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgoiV2luZG93cyIgPSAiYzpcXHdpbmRvd3MiCiJTeXN0ZW0iID0gImM6XFx3aW5kb3dzXFxzeXN0ZW0iCiJUZW1wIiA9ICJjOlxcdGVtcCIKIlBhdGgiID0gImM6XFx3aW5kb3dzO2M6XFx3aW5kb3dzXFxzeXN0ZW07YzpcXGJsYW5jbyIKIlNob3dEaXJTeW1saW5rcyIgPSAiMSIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KCSAgICBGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBkcml2ZSBsYXllciBjb25maWd1cmF0aW9uIGFuZAoJICAgIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMsIHBsZWFzZSBsb29rIGF0IHRoZSA8bGluawoJICAgIGxpbmtlbmQ9ImNvbmZpZy1kcml2ZS1tYWluIj5XaW5lIGZpbGUgc3lzdGVtIGxheWVyCgkgICAgY29uZmlndXJhdGlvbiBzZWN0aW9uPC9saW5rPi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkdyYXBoaWNzRHJpdmVyIiA9ICJ4MTFkcnZ8dHR5ZHJ2IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgCSAgICBTZXRzIHRoZSBncmFwaGljcyBkcml2ZXIgdG8gdXNlIGZvciBXaW5lIG91dHB1dC4KICAJICAgIHgxMWRydiBpcyBmb3IgWDExIG91dHB1dCwgdHR5ZHJ2IGlzIGZvciB0ZXh0IGNvbnNvbGUgb3V0cHV0LgogIAkgICAgV0FSTklORzogaWYgeW91IHVzZSB0dHlkcnYgaGVyZSwgdGhlbiB5b3Ugd29uJ3QgYmUgYWJsZSB0byBydW4KICAJICAgIGEgbG90IG9mIFdpbmRvd3MgR1VJIHByb2dyYW1zICh0dHlkcnYgaXMgc3RpbGwgcHJldHR5ICJicm9rZW4iCiAgCSAgICBhdCBydW5uaW5nIGdyYXBoaWNhbCBhcHBzKS4gVGh1cyB0aGlzIG9wdGlvbiBpcyBtYWlubHkgaW50ZXJlc3RpbmcKICAJICAgIGZvciBlLmcuIGVtYmVkZGVkIHVzZSBvZiBXaW5lIGluIHdlYiBzZXJ2ZXIgc2NyaXB0cy4KICAJICAgIE5vdGUgdGhhdCB0dHlkcnYgaXMgc3RpbGwgdmVyeSBsYWNraW5nLCBzbyBpZiBpdCBkb2Vzbid0IHdvcmssCiAgCSAgICByZXNvcnQgdG8gdXNpbmcgInh2ZmIiLCBhIHZpcnR1YWwgWDExIHNlcnZlci4KICAJICAgIEFub3RoZXIgd2F5IHRvIHJ1biBXaW5lIHdpdGhvdXQgZGlzcGxheSB3b3VsZCBiZSB0byBydW4gWDExCiAgCSAgICB2aWEgWHZuYywgdGhlbiBjb25uZWN0IHRvIHRoYXQgVk5DIGRpc3BsYXkgdXNpbmcgeHZuY3ZpZXdlcgogIAkgICAgKHRoYXQgd2F5IHlvdSdyZSBzdGlsbCBhYmxlIHRvIGNvbm5lY3QgdG8geW91ciBhcHAgYW5kCiAgCSAgICBjb25maWd1cmUgaXQgaWYgbmVlZCBiZSkuCiAgCSAgPC9wYXJhPgogIAkgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlByaW50ZXIiID0gIm9mZnxvbiI8L3Byb2dyYW1saXN0aW5nPiBUZWxscyB3aW5lCiAgICAgICAgICAgIHdoZXRoZXIgdG8gYWxsb3cgcHJpbnRpbmcgdmlhIHByaW50ZXIgZHJpdmVycyB0byB3b3JrLgogIAkgICAgVGhpcyBvcHRpb24gaXNuJ3QgbmVlZGVkIGZvciBvdXIgYnVpbHQtaW4gcHNkcnYgcHJpbnRlciBkcml2ZXIKICAJICAgIGF0IGFsbC4KICAgICAgICAgICAgVXNpbmcgdGhlc2UgdGhpbmdzIGFyZSBwcmV0dHkgYWxwaGEsIHNvIHlvdSBtaWdodCB3YW50IHRvCiAgICAgICAgICAgIHdhdGNoIG91dC4gU29tZSBwZW9wbGUgbWlnaHQgZmluZCBpdCB1c2VmdWwsIGhvd2V2ZXIuIElmCiAgICAgICAgICAgIHlvdSdyZSBub3QgcGxhbm5pbmcgdG8gd29yayBvbiBwcmludGluZyB2aWEgd2luZG93cyBwcmludGVyCiAgCSAgICBkcml2ZXJzLCBkb24ndCBldmVuIGFkZCB0aGlzIHRvIHlvdXIgd2luZSBjb25maWd1cmF0aW9uIGZpbGUKICAJICAgIChJdCBwcm9iYWJseSBpc24ndCBhbHJlYWR5IGluIGl0KS4KICAJICAgIENoZWNrIG91dCB0aGUgW3Nwb29sZXJdIGFuZCBbcGFyYWxsZWxwb3J0c10gc2VjdGlvbnMgdG9vLgogICAgICAgICAgPC9wYXJhPgogIAkgIDxwYXJhPgogIAkgICAgPHByb2dyYW1saXN0aW5nPiJTaGVsbExpbmtlciIgPSAid2luZXNoZWxsbGluayI8L3Byb2dyYW1saXN0aW5nPgogIAkgICAgVGhpcyBzZXR0aW5nIHNwZWNpZmllcyB0aGUgc2hlbGwgbGlua2VyIHNjcmlwdCB0byB1c2UgZm9yIHNldHRpbmcKICAJICAgIHVwIFdpbmRvd3MgaWNvbnMgaW4gZS5nLiBLREUgb3IgR25vbWUgdGhhdCBhcmUgZ2l2ZW4gYnkgcHJvZ3JhbXMKICAJICAgIG1ha2luZyB1c2Ugb2YgYXBwcm9wcmlhdGUgc2hlbGwzMi5kbGwgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUKICAJICAgIGljb25zIG9uIHRoZSBkZXNrdG9wL3N0YXJ0IG1lbnUgZHVyaW5nIGluc3RhbGxhdGlvbi4KICAJICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTeW1ib2xUYWJsZUZpbGUiID0gIndpbmUuc3ltIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdXAgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIGZvciB0aGUgd2luZSBkZWJ1Z2dlci4gWW91CiAgICAgICAgICAgIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gZmlkZGxlIHdpdGggdGhpcy4gTWF5IGJlIHVzZWZ1bCBpZgogICAgICAgICAgICB5b3VyIHdpbmUgaXMgc3RyaXBwZWQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZGxsZGVmYXVsdHMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXNlIHNldHRpbmdzIHByb3ZpZGUgd2luZSdzIGRlZmF1bHQgaGFuZGxpbmcgb2YgRExMIGxvYWRpbmcuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0TG9hZE9yZGVyIiA9IiBuYXRpdmUsIGJ1aWx0aW4iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgdGhlIG9yZGVyIGluCiAgICAgICAgICAgIHdoaWNoIHRvIGF0dGVtcHQgbG9hZGluZyBETExzLiBJZiB0aGUgZmlyc3Qgb3B0aW9uIGZhaWxzLAogICAgICAgICAgICBpdCB3aWxsIHRyeSB0aGUgc2Vjb25kLCBhbmQgc28gb24uIFRoZSBvcmRlciBzcGVjaWZpZWQKICAgICAgICAgICAgYWJvdmUgaXMgcHJvYmFibHkgdGhlIGJlc3QgaW4gbW9zdCBjb25kaXRpb25zLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5UaGUgW0RsbFBhaXJzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlCiAgICAgICAgICBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoaXMgaGFzIGJlZW4gb2Jzb2xldGVkCiAgICAgICAgICBiZWNhdXNlIHRoZSBwYWlyaW5nIGluZm9ybWF0aW9uIGhhcyBub3cgYmVlbiBlbWJlZGRlZCBpbnRvCiAgICAgICAgICBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlCiAgICAgICAgICBhYmxlIHRvIGlzc3VlIHdhcm5pbmdzIGlmIHRoZSB1c2VyIGF0dGVtcHRlZCB0byBwYWlyCiAgICAgICAgICBjb2RlcGVuZGVudCAxNi1iaXQvMzItYml0IERMTHMgb2YgZGlmZmVyZW50IHR5cGVzLikgSWYgeW91CiAgICAgICAgICBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS8uY29uZmlnPC9maWxlbmFtZT4gb3IKICAgICAgICAgIDxmaWxlbmFtZT53aW5lLmNvbmY8L2ZpbGVuYW1lPiwgeW91IG1heSBzYWZlbHkgZGVsZXRlIGl0LgogICAgICAgICAgPC9wYXJhPgogIAk8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1kbGxvdmVycmlkZXMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGxsT3ZlcnJpZGVzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgZm9ybWF0IGZvciB0aGlzIHNlY3Rpb24gaXMgdGhlIHNhbWUgZm9yIGVhY2ggbGluZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiZsdDtETEw+eywmbHQ7RExMPiwmbHQ7RExMPi4uLn0gPSAmbHQ7Rk9STT57LCZsdDtGT1JNPiwmbHQ7Rk9STT4uLi59PC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGxvYWQgYnVpbHQtaW4gS0VSTkVMIHBhaXIgKGNhc2UgZG9lc24ndAogICAgICAgICAgICBtYXR0ZXIgaGVyZSk6CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4ia2VybmVsLGtlcm5lbDMyIiA9ICJidWlsdGluIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRvIGxvYWQgdGhlIG5hdGl2ZSBDT01NRExHIHBhaXIsIGJ1dCBpZiB0aGF0IGRvZXNuJ3Qgd29yawogICAgICAgICAgICB0cnkgYnVpbHQtaW46CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iY29tbWRsZyxjb21kbGczMiIgPSAibmF0aXZlLCBidWlsdGluIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRvIGxvYWQgdGhlIG5hdGl2ZSBDT01DVEwzMjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJjb21jdGwzMiIgPSAibmF0aXZlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEhlcmUgaXMgYSBnb29kIGdlbmVyaWMgc2V0dXAgKEFzIGl0IGlzIGRlZmluZWQgaW4gY29uZmlnCiAgICAgICAgICAgIHRoYXQgd2FzIGluY2x1ZGVkIHdpdGggeW91ciB3aW5lIHBhY2thZ2UpOgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEbGxPdmVycmlkZXNdCiJycGNydDQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm9sZWF1dDMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoib2xlMzIiICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21tZGxnIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImNvbWRsZzMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoidmVyIiAgICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJ2ZXJzaW9uIiAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNoZWxsIiAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hlbGwzMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJzaGZvbGRlciIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKInNobHdhcGkiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoic2hkb2N2dyIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJsemV4cGFuZCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImx6MzIiICAgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY29tY3RsMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJjb21tY3RybCIgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImFkdmFwaTMyIiAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoiY3J0ZGxsIiAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtcHIiICAgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIndpbnNwb29sLmRydiIgPSAiYnVpbHRpbiwgbmF0aXZlIgoiZGRyYXciICAgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJkaW5wdXQiICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKImRzb3VuZCIgICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoib3BlbmdsMzIiICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc3ZjcnQiICAgICAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1zdmlkZW8iICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibXN2ZnczMiIgICAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2ljZGEuZHJ2IiAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1jaXNlcS5kcnYiICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWNpd2F2ZS5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCiJtY2lhdmkuZHJ2IiAgID0gIm5hdGl2ZSwgYnVpbHRpbiIKIm1jaWFuaW0uZHJ2IiAgPSAibmF0aXZlLCBidWlsdGluIgoibXNhY20uZHJ2IiAgICA9ICJidWlsdGluLCBuYXRpdmUiCiJtc2FjbSIgICAgICAgID0gImJ1aWx0aW4sIG5hdGl2ZSIKIm1zYWNtMzIiICAgICAgPSAiYnVpbHRpbiwgbmF0aXZlIgoibWlkaW1hcC5kcnYiICA9ICJidWlsdGluLCBuYXRpdmUiCjsgeW91IGNhbiBzcGVjaWZ5IHByb2dyYW1zIHRvbwoibm90ZXBhZC5leGUiICA9ICJuYXRpdmUsIGJ1aWx0aW4iCjsgZGVmYXVsdCBmb3IgYWxsIG90aGVyIERMTHMKIioiID0gIm5hdGl2ZSwgYnVpbHRpbiIKICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxub3RlPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJZiBsb2FkaW5nIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIGZpcnN0IGZhaWxzLAogICAgICAgICAgICAgIHdpbmUgd2lsbCBqdXN0IGdvIG9uIGJ5IHVzaW5nIHRoZSBzZWNvbmQgb3IgdGhpcmQgb3B0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L25vdGU+CiAgICAgICAgPC9zZWN0Mz4KCiAgICAgICAgPHNlY3QzIGlkPSJjb25maWctZm9udHMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbZm9udHNdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBzZXRzIHVwIHdpbmUncyBmb250IGhhbmRsaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVzb2x1dGlvbiIgPSAiOTYiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU2luY2UgdGhlIHdheSBYIGhhbmRsZXMgZm9udHMgaXMgZGlmZmVyZW50IGZyb20gdGhlIHdheQogICAgICAgICAgICBXaW5kb3dzIGRvZXMsIHdpbmUgdXNlcyBhIHNwZWNpYWwgbWVjaGFuaXNtIHRvIGRlYWwgd2l0aAogICAgICAgICAgICB0aGVtLiBJdCBtdXN0IHNjYWxlIHRoZW0gdXNpbmcgdGhlIG51bWJlciBkZWZpbmVkIGluIHRoZQogICAgICAgICAgICAiUmVzb2x1dGlvbiIgc2V0dGluZy4gNjAtMTIwIGFyZSByZWFzb25hYmxlIHZhbHVlcywgOTYgaXMKICAgICAgICAgICAgYSBuaWNlIGluIHRoZSBtaWRkbGUgb25lLiBJZiB5b3UgaGF2ZSB0aGUgcmVhbCB3aW5kb3dzCiAgICAgICAgICAgIGZvbnRzIGF2YWlsYWJsZSAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGFzCiAgICAgICAgICAgIGltcG9ydGFudC4gT2YgY291cnNlLCBpdCdzIGFsd2F5cyBnb29kIHRvIGdldCB5b3VyIFggZm9udHMKICAgICAgICAgICAgd29ya2luZyBhY2NlcHRhYmx5IGluIHdpbmUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICItYWRvYmUtdGltZXMtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvbnQgd2luZSB1c2VzLiBGb29sIGFyb3VuZCB3aXRoIGl0IGlmIHlvdSdkIGxpa2UuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICBPUFRJT05BTDoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgPGxpdGVyYWw+QWxpYXM8L2xpdGVyYWw+IHNldHRpbmcgYWxsb3dzIHlvdSB0byBtYXAgYW4gWCBmb250IHRvIGEgZm9udAogICAgICAgICAgICB1c2VkIGluIHdpbmUuIFRoaXMgaXMgZ29vZCBmb3IgYXBwcyB0aGF0IG5lZWQgYSBzcGVjaWFsIGZvbnQgeW91IGRvbid0IGhhdmUsCiAgICAgICAgICAgIGJ1dCBhIGdvb2QgcmVwbGFjZW1lbnQgZXhpc3RzLiBUaGUgc3ludGF4IGlzIGxpa2Ugc286CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQWxpYXNYIiA9ICJbRmFrZSB3aW5kb3dzIG5hbWVdLFtSZWFsIFggbmFtZV0iJmx0OyxvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbj48L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBSZXBsYWNlICJBbGlhc1giIHdpdGggIkFsaWFzMCIsCiAgICAgICAgICAgIHRoZW4gIkFsaWFzMSIgYW5kIHNvIG9uLiBUaGUgZmFrZSB3aW5kb3dzIG5hbWUgaXMgdGhlIG5hbWUKICAgICAgICAgICAgdGhhdCB0aGUgZm9udCB3aWxsIGJlIHVuZGVyIGEgd2luZG93cyBhcHAgaW4gd2luZS4gVGhlCiAgICAgICAgICAgIHJlYWwgWCBuYW1lIGlzIHRoZSBmb250IG5hbWUgYXMgc2VlbiBieSBYIChSdW4KICAgICAgICAgICAgInhmb250c2VsIikuIFRoZSBvcHRpb25hbCAibWFza2luZyIgc2VjdGlvbiBhbGxvd3MgeW91IHRvCiAgICAgICAgICAgIHV0aWxpemUgdGhlIGZha2Ugd2luZG93cyBuYW1lIHlvdSBkZWZpbmUuIElmIGl0IGlzIG5vdAogICAgICAgICAgICB1c2VkLCB0aGVuIHdpbmUgd2lsbCBqdXN0IHRyeSB0byBleHRyYWN0IHRoZSBmYWtlIHdpbmRvd3MKICAgICAgICAgICAgbmFtZSBpdHNlbGYgYW5kIG5vdCB1c2UgdGhlIHZhbHVlIHlvdSBlbnRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gYWxpYXMgd2l0aG91dCBtYXNraW5nLiBUaGUgZm9udCB3aWxsIHNob3cgdXAgaW4gd2luZG93cwogICAgICAgICAgICBhcHBzIGFzICJHb29nbGUiLgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkFsaWFzMCIgPSAiRm9vLC0tZ29vZ2xlLSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBIZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBtYXNraW5nIGVuYWJsZWQuIFRoZSBmb250IHdpbGwgc2hvdyB1cCBhcyAiRm9vIiBpbgogICAgICAgICAgICB3aW5kb3dzIGFwcHMuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQWxpYXMxIiA9ICJGb28sLS1nb29nbGUtLHN1YnN0IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGNoZWNrIG91dCB0aGUgPGxpbmsgbGlua2VuZD0iY29uZmlnLWZvbnRzLW1haW4iPkZvbnRzPC9saW5rPgogIAkgICAgY2hhcHRlci4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1pbyI+CiAgICAgICAgICA8dGl0bGU+VGhlIFtzZXJpYWxwb3J0c10sIFtwYXJhbGxlbHBvcnRzXSwgW3Nwb29sZXJdLCBhbmQgW3BvcnRzXSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgRXZlbiB0aG91Z2ggaXQgc291bmRzIGxpa2UgYSBsb3Qgb2Ygc2VjdGlvbnMsIHRoZXNlIGFyZQogICAgICAgICAgICBhbGwgY2xvc2VseSByZWxhdGVkLiBUaGV5IGFyZSBhbGwgZm9yIGNvbW11bmljYXRpb25zIGFuZAogICAgICAgICAgICBwYXJhbGxlbCBwb3J0cy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3NlcmlhbHBvcnRzXSBzZWN0aW9uIHRlbGxzIHdpbmUgd2hhdCBzZXJpYWwgcG9ydHMgaXQKICAgICAgICAgICAgaXMgYWxsb3dlZCB0byB1c2UuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iQ29tWCIgPSAiL2Rldi90dHlTWSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggdGhlIG51bWJlciBvZiB0aGUgQ09NCiAgICAgICAgICAgIHBvcnQgaW4gV2luZG93cyAoMS04KSBhbmQgPGxpdGVyYWw+WTwvbGl0ZXJhbD4gd2l0aCB0aGUKICAgICAgICAgICAgbnVtYmVyIG9mIGl0IGluIDxsaXRlcmFsPlg8L2xpdGVyYWw+IChVc3VhbGx5IHRoZSBudW1iZXIKICAgICAgICAgICAgb2YgdGhlIHBvcnQgaW4gV2luZG93cyBtaW51cyAxKS4gPGxpdGVyYWw+Q29tWDwvbGl0ZXJhbD4KICAgICAgICAgICAgY2FuIGFjdHVhbGx5IGVxdWFsIGFueSBkZXZpY2UKICAgICAgICAgICAgKDxtZWRpYWxhYmVsPi9kZXYvbW9kZW08L21lZGlhbGFiZWw+IGlzIGFjY2VwdGFibGUpLiBJdCBpcwogICAgICAgICAgICBub3QgYWx3YXlzIG5lY2Vzc2FyeSB0byBkZWZpbmUgYW55IENPTSBwb3J0cyAoQW4gb3B0aW9uYWwKICAgICAgICAgICAgc2V0dGluZykuIEhlcmUgaXMgYW4gZXhhbXBsZToKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJDb20xIiA9ICIvZGV2L3R0eVMwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFVzZSBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIGluIHRoZSBzZWN0aW9uIHRvIGRlZmluZQogICAgICAgICAgICBhbGwgb2YgdGhlIENPTSBwb3J0cyB5b3UgbmVlZC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgW3BhcmFsbGVscG9ydHNdIHNlY3Rpb24gc2V0cyB1cCBhbnkgcGFyYWxsZWwgcG9ydHMKICAgICAgICAgICAgdGhhdCB3aWxsIGJlIGFsbG93ZWQgYWNjZXNzIHVuZGVyIHdpbmUuCiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTHB0WCIgPSAiL2Rldi9scFkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgU291bmRzIGZhbWlsaWFyPyBTeW50YXggaXMganVzdCBsaWtlIHRoZSBDT00gcG9ydCBzZXR0aW5nLgogICAgICAgICAgICBSZXBsYWNlIDxsaXRlcmFsPlg8L2xpdGVyYWw+IHdpdGggYSB2YWx1ZSBmcm9tIDEtNCBhcyBpdAogICAgICAgICAgICBpcyBpbiBXaW5kb3dzIGFuZCA8bGl0ZXJhbD5ZPC9saXRlcmFsPiB3aXRoIGEgdmFsdWUgZnJvbQogICAgICAgICAgICAwLTMgKDxsaXRlcmFsPlk8L2xpdGVyYWw+IGlzIHVzdWFsbHkgdGhlIHZhbHVlIGluIHdpbmRvd3MKICAgICAgICAgICAgbWludXMgMSwganVzdCBsaWtlIGZvciBDT00gcG9ydHMpLiBZb3UgZG9uJ3QgYWx3YXlzIG5lZWQKICAgICAgICAgICAgdG8gZGVmaW5lIGEgcGFyYWxsZWwgcG9ydCAoQUtBLCBpdCdzIG9wdGlvbmFsKS4gQXMgd2l0aAogICAgICAgICAgICB0aGUgb3RoZXIgc2VjdGlvbiwgTHB0WCBjYW4gZXF1YWwgYW55IGRldmljZSAoTWF5YmUKICAgICAgICAgICAgPG1lZGlhbGFiZWw+L2Rldi9wcmludGVyPC9tZWRpYWxhYmVsPikuIEhlcmUgaXMgYW4KICAgICAgICAgICAgZXhhbXBsZTogIDxwcm9ncmFtbGlzdGluZz4iTHB0MSIgPSAiL2Rldi9scDAiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIFtzcG9vbGVyXSBzZWN0aW9uIHdpbGwgaW5mb3JtIHdpbmUgd2hlcmUgdG8gc3Bvb2wKICAgICAgICAgICAgcHJpbnQgam9icy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdHJ5IHByaW50aW5nLiBXaW5lCiAgICAgICAgICAgIGRvY3MgY2xhaW0gdGhhdCBzcG9vbGluZyBpcyAicmF0aGVyIHByaW1pdGl2ZSIgYXQgdGhpcwogICAgICAgICAgICB0aW1lLCBzbyBpdCB3b24ndCB3b3JrIHBlcmZlY3RseS4gPGVtcGhhc2lzPkl0IGlzIG9wdGlvbmFsLjwvZW1waGFzaXM+IFRoZSBvbmx5CiAgICAgICAgICAgIHNldHRpbmcgeW91IHVzZSBpbiB0aGlzIHNlY3Rpb24gd29ya3MgdG8gbWFwIGEgcG9ydCAoTFBUMSwKICAgICAgICAgICAgZm9yIGV4YW1wbGUpIHRvIGEgZmlsZSBvciBhIGNvbW1hbmQuIEhlcmUgaXMgYW4gZXhhbXBsZSwKICAgICAgICAgICAgbWFwcGluZyBMUFQxIHRvIHRoZSBmaWxlIDxmaWxlbmFtZT5vdXQucHM8L2ZpbGVuYW1lPjoKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJMUFQxOiIgPSAib3V0LnBzIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBtYXBzIHByaW50aW5nIGpvYnMgdG8gTFBUMSB0byB0aGUKICAgICAgICAgICAgY29tbWFuZCA8Y29tbWFuZD5scHI8L2NvbW1hbmQ+LiBOb3RpY2UgIHRoZSB8OgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkxQVDE6IiA9ICJ8bHByIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFRoZSBbcG9ydHNdIHNlY3Rpb24gaXMgdXN1YWxseSB1c2VmdWwgb25seSBmb3IgcGVvcGxlIHdobwogICAgICAgICAgICBuZWVkIGRpcmVjdCBwb3J0IGFjY2VzcyBmb3IgcHJvZ3JhbXMgcmVxdWlyaW5nIGRvbmdsZXMgb3IKICAgICAgICAgICAgc2Nhbm5lcnMuIDxlbXBoYXNpcz5JZiB5b3UgZG9uJ3QgbmVlZCBpdCwgZG9uJ3QgdXNlCgkgICAgaXQhPC9lbXBoYXNpcz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+InJlYWQiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCByZWFkIGFjY2VzcyB0byB0aG9zZSBJTydzLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4id3JpdGUiID0gIjB4Nzc5LDB4Mzc5LDB4MjgwLTB4MmEwIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEdpdmVzIGRpcmVjdCB3cml0ZSBhY2Nlc3MgdG8gdGhvc2UgSU8ncy4gSXQncyBwcm9iYWJseSBhCiAgICAgICAgICAgIGdvb2QgaWRlYSB0byBrZWVwIHRoZSB2YWx1ZXMgb2YgdGhlCiAgICAgICAgICAgIDxsaXRlcmFsPnJlYWQ8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD53cml0ZTwvbGl0ZXJhbD4KICAgICAgICAgICAgc2V0dGluZ3MgdGhlIHNhbWUuIFRoaXMgc3R1ZmYgd2lsbCBvbmx5IHdvcmsgd2hlbiB5b3UncmUKICAgICAgICAgICAgcm9vdC4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1kZWJ1Zy1ldGMiPgogICAgICAgICAgPHRpdGxlPlRoZSBbRGVidWddLCBbUmVnaXN0cnldLCBbdHdlYWsubGF5b3V0XSwgYW5kIFtwcm9ncmFtc10gU2VjdGlvbnM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtEZWJ1Z10gaXMgdXNlZCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgZGVidWcgbWVzc2FnZXMsIGFuZCB0bwogICAgICAgICAgICBvdXRwdXQgdGhlbSB0byBhIGZpbGUuIFRoZSBsYXR0ZXIgaXMgcmFyZWx5IHVzZWQuIDxlbXBoYXNpcz5UaGVzZQogICAgICAgICAgICBhcmUgYWxsIG9wdGlvbmFsIGFuZCB5b3UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBhZGQgb3IKICAgICAgICAgICAgcmVtb3ZlIGFueXRoaW5nIGluIHRoaXMgc2VjdGlvbiB0byB5b3VyIGNvbmZpZy48L2VtcGhhc2lzPiAoSW4gZXh0cmVtZQogICAgICAgICAgICBjYXNlcyB5b3UgbWF5IHdhbnQgdG8gdXNlIHRoZXNlIG9wdGlvbnMgdG8gbWFuYWdlIHRoZSBhbW91bnQKICAgICAgICAgICAgb2YgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSA8cGFyYW1ldGVyPi0tZGVidWdtc2cgK3JlbGF5CiAgICAgICAgICAgIDwvcGFyYW1ldGVyPiBvcHRpb24uKQogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iRmlsZSIgPSAiL2JsYW5jbyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBsb2dmaWxlIGZvciB3aW5lLiBTZXQgdG8gQ09OIHRvIGxvZyB0byBzdGFuZGFyZCBvdXQuCiAgICAgICAgICAgIDxlbXBoYXNpcz5UaGlzIGlzIHJhcmVseSB1c2VkLjwvZW1waGFzaXM+CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTcHlFeGNsdWRlIiA9ICJXTV9TSVpFO1dNX1RJTUVSOyI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBFeGNsdWRlcyBkZWJ1ZyBtZXNzYWdlcyBhYm91dCA8Y29uc3RhbnQ+V01fU0laRTwvY29uc3RhbnQ+CiAgICAgICAgICAgIGFuZCA8Y29uc3RhbnQ+V01fVElNRVI8L2NvbnN0YW50PiBpbiB0aGUgbG9nZmlsZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNweUluY2x1ZGUiID0gIldNX1NJWkU7V01fVElNRVI7IjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEluY2x1ZGVzIGRlYnVnIG1lc3NhZ2VzIGFib3V0IDxjb25zdGFudD5XTV9TSVpFPC9jb25zdGFudD4KICAgICAgICAgICAgYW5kIDxjb25zdGFudD5XTV9USU1FUjwvY29uc3RhbnQ+IGluIHRoZSBsb2dmaWxlLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iUmVsYXlJbmNsdWRlIiA9ICJ1c2VyMzIuQ3JlYXRlV2luZG93QTtjb21jdGwzMi4qIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIEluY2x1ZGUgb25seSB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBpbiBhCiAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZyArcmVsYXk8L3BhcmFtZXRlcj4gdHJhY2UuICBUaGlzIGVudHJ5IGlzCiAgICAgICAgICAgIGlnbm9yZWQgaWYgdGhlcmUgaXMgYSA8cGFyYW1ldGVyPlJlbGF5RXhjbHVkZTwvcGFyYW1ldGVyPiBlbnRyeS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlJlbGF5RXhjbHVkZSIgPSAiUnRsRW50ZXJDcml0aWNhbFNlY3Rpb247UnRsTGVhdmVDcml0aWNhbFNlY3Rpb24iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRXhjbHVkZSB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBpbiBhCiAgICAgICAgICAgIDxwYXJhbWV0ZXI+LS1kZWJ1Z21zZyArcmVsYXk8L3BhcmFtZXRlcj4gdHJhY2UuICBUaGlzIGVudHJ5CiAgICAgICAgICAgIG92ZXJyaWRlcyBhbnkgc2V0dGluZ3MgaW4gYSA8cGFyYW1ldGVyPlJlbGF5SW5jbHVkZTwvcGFyYW1ldGVyPgogICAgICAgICAgICBlbnRyeS4gIElmIG5laXRoZXIgZW50cnkgaXMgcHJlc2VudCB0aGVuIHRoZSB0cmFjZSBpbmNsdWRlcwogICAgICAgICAgICBldmVyeXRoaW5nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEluIGJvdGggZW50cmllcyB0aGUgZnVuY3Rpb25zIG1heSBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEKICAgICAgICAgICAgZnVuY3Rpb24gbmFtZSBvciBhcyBhIG1vZHVsZSBhbmQgZnVuY3Rpb24uICBJbiB0aGlzIGxhdHRlcgogICAgICAgICAgICBjYXNlIHNwZWNpZnkgYW4gYXN0ZXJpc2sgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGluY2x1ZGUvZXhjbHVkZQogICAgICAgICAgICBhbGwgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW1JlZ2lzdHJ5XSBjYW4gYmUgdXNlZCB0byB0ZWxsIHdpbmUgd2hlcmUgeW91ciBvbGQgd2luZG93cwogICAgICAgICAgICByZWdpc3RyeSBmaWxlcyBleGlzdC4gVGhpcyBzZWN0aW9uIGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwKICAgICAgICAgICAgYW5kIHVzZWxlc3MgdG8gcGVvcGxlIHVzaW5nIHdpbmUgd2l0aG91dCBhbiBleGlzdGluZwogICAgICAgICAgICB3aW5kb3dzIGluc3RhbGxhdGlvbi4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlVzZXJGaWxlTmFtZSIgPSAiL2RpcnMvdG8vdXNlci5yZWciPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgVGhlIGxvY2F0aW9uIG9mIHlvdXIgb2xkIDxmaWxlbmFtZT51c2VyLnJlZzwvZmlsZW5hbWU+IGZpbGUuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgW3R3ZWFrLmxheW91dF0gaXMgZGV2b3RlZCB0byB3aW5lJ3MgbG9vay4gVGhlcmUgaXMgb25seQogICAgICAgICAgICBvbmUgc2V0dGluZyBmb3IgaXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJXaW5lTG9vayIgPSAid2luMzF8d2luOTV8d2luOTgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgV2lsbCBjaGFuZ2UgdGhlIGxvb2sgb2Ygd2luZSBmcm9tIFdpbmRvd3MgMy4xIHRvIFdpbmRvd3MgOTUuCiAgICAgICAgICAgIFRoZSA8bGl0ZXJhbD53aW45ODwvbGl0ZXJhbD4gc2V0dGluZyBiZWhhdmVzCiAgICAgICAgICAgIGp1c3QgbGlrZSA8bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD4gbW9zdCBvZiB0aGUgdGltZS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbcHJvZ3JhbXNdIGNhbiBiZSB1c2VkIHRvIHNheSB3aGF0IHByb2dyYW1zIHJ1biB1bmRlcgogICAgICAgICAgICBzcGVjaWFsIGNvbmRpdGlvbnMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJEZWZhdWx0IiA9ICIvcHJvZ3JhbS90by9leGVjdXRlLmV4ZSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBTZXRzIHRoZSBwcm9ncmFtIHRvIGJlIHJ1biBpZiB3aW5lIGlzIHN0YXJ0ZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcHJvZ3JhbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlN0YXJ0dXAiID0gIi9wcm9ncmFtL3RvL2V4ZWN1dGUuZXhlIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgIFNldHMgdGhlIHByb2dyYW0gdG8gYXV0b21hdGljYWxseSBiZSBydW4gYXQgc3RhcnR1cCBldmVyeSB0aW1lLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLXdpbm1tIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW1dpbk1NXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBbV2luTU1dIGlzIHVzZWQgdG8gZGVmaW5lIHdoaWNoIG11bHRpbWVkaWEgZHJpdmVycyBoYXZlIHRvIGJlIGxvYWRlZC4gU2luY2UKICAJICAgIHRob3NlIGRyaXZlcnMgbWF5IGRlcGVuZCBvbiB0aGUgbXVsdGltZWRpYSBpbnRlcmZhY2VzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbQogIAkgICAgKE9TUywgQUxTQS4uLiB0byBuYW1lIGEgZmV3KSwgaXQncyBuZWVkZWQgdG8gYmUgYWJsZSB0byBjb25maWd1cmUgd2hpY2ggZHJpdmVyCiAgCSAgICBoYXMgdG8gYmUgbG9hZGVkLgogICAgICAgICAgPC9wYXJhPgoKICAgICAgICAgIDxwYXJhPgogIAkgICAgVGhlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24gbG9va3MgbGlrZToKICAJICAgIDxwcm9ncmFtbGlzdGluZz4KW1dpbk1NXQoiRHJpdmVycyIgPSAid2luZW9zcy5kcnYiCiJXYXZlTWFwcGVyIiA9ICJtc2FjbS5kcnYiCiJNaWRpTWFwcGVyIiA9ICJtaWRpbWFwLmRydiIKICAJICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgCSAgICBBbGwgdGhlIGtleXMgbXVzdCBiZSBkZWZpbmVkOgogIAkgICAgPGl0ZW1pemVkbGlzdD4KICAJICAgICAgPGxpc3RpdGVtPgogIAkgICAgICAgIDxwYXJhPgogIAkJICBUaGUgIkRyaXZlcnMiIGtleSBpcyBhICc7JyBzZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGVzIG5hbWUsIGVhY2ggb2YKICAJCSAgdGhlbSBjb250YWluaW5nIGEgbG93IGxldmVsIGRyaXZlci4gQWxsIHRob3NlIGRyaXZlcnMgd2lsbCBiZSBsb2FkZWQKICAJCSAgd2hlbiBNTVNZU1RFTS9XSU5NTSBpcyBzdGFydGVkIGFuZCB3aWxsIHByb3ZpZGUgdGhlaXIgaW5uZXIgZmVhdHVyZXMuCiAgCSAgICAgICAgPC9wYXJhPgogIAkgICAgICA8L2xpc3RpdGVtPgogIAkgICAgICA8bGlzdGl0ZW0+CiAgCSAgICAgICAgPHBhcmE+CiAgCQkgIFRoZSAiV2F2ZU1hcHBlciIgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIFdhdmUKICAJCSAgTWFwcGVyIGRyaXZlci4gT25seSBvbmUgd2F2ZSBtYXBwZXIgY2FuIGJlIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KICAJICAgICAgICA8L3BhcmE+CiAgCSAgICAgIDwvbGlzdGl0ZW0+CiAgCSAgICAgIDxsaXN0aXRlbT4KICAJICAgICAgICA8cGFyYT4KICAJCSAgVGhlICJNaWRpTWFwcGVyIiByZXByZXNlbnRzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgTUlESQogIAkJICBNYXBwZXIgZHJpdmVyLiBPbmx5IG9uZSBNSURJIG1hcHBlciBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgc3lzdGVtLgogIAkgICAgICAgIDwvcGFyYT4KICAJICAgICAgPC9saXN0aXRlbT4KICAJICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgICAgPC9wYXJhPgogIAk8L3NlY3QzPgoKICAgICAgICA8c2VjdDMgaWQ9ImNvbmZpZy1uZXR3b3JrIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW05ldHdvcmtdIFNlY3Rpb248L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFtOZXR3b3JrXSBjb250YWlucyBzZXR0aW5ncyByZWxhdGVkIHRvCiAgICAgICAgICAgIG5ldHdvcmtpbmcuIEN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSB0aGF0IGNhbiBiZSBzZXQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8dmFyaWFibGVsaXN0PgogICAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICAgIDx0ZXJtPlVzZURuc0NvbXB1dGVyTmFtZTwvdGVybT4KICAgICAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgICAgQSBib29sZWFuIHNldHRpbmcgKGRlZmF1bHQ6IDxsaXRlcmFsPlk8L2xpdGVyYWw+KQogICAgICAgICAgICAgICAgICB0aGF0IGFmZmVjdHMgdGhlIHdheSBXaW5lIHNldHMgdGhlIGNvbXB1dGVyIG5hbWUuIFRoZSBjb21wdXRlcgogICAgICAgICAgICAgICAgICBuYW1lIGluIHRoZSBXaW5kb3dzIHdvcmxkIGlzIHRoZSBzby1jYWxsZWQgPGVtcGhhc2lzPk5ldEJJT1MgbmFtZTwvZW1waGFzaXM+LgogICAgICAgICAgICAgICAgICBJdCBpcyBjb250YWluZWQgaW4gdGhlIDx2YXJuYW1lPkNvbXB1dGVyTmFtZTwvdmFybmFtZT4gaW4gdGhlIHJlZ2lzdHJ5IGVudHJ5CiAgICAgICAgICAgICAgICAgIDx2YXJuYW1lPkhLRVlfTE9DQUxfTUFDSElORVxTeXN0ZW1cQ3VycmVudENvbnRyb2xTZXRcQ29udHJvbFxDb21wdXRlck5hbWVcQ29tcHV0ZXJOYW1lPC92YXJuYW1lPi4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gIlkiIG9yIG1pc3NpbmcsIFdpbmUgd2lsbCBzZXQgdGhlCiAgICAgICAgICAgICAgICAgIE5ldEJJT1MgbmFtZSB0byB0aGUgVW5peCBob3N0IG5hbWUgb2YgeW91ciBjb21wdXRlciwgaWYKICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IHRydW5jYXRlZCB0byAzMSBjaGFyYWN0ZXJzLiBUaGUgVW5peCBob3N0bmFtZSBpcyB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAgIG9mIHRoZSBzaGVsbCBjb21tYW5kIDxjb21tYW5kPmhvc3RuYW1lPC9jb21tYW5kPiwgdXAgdG8gYnV0IG5vdAogICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGZpcnN0IGRvdCAoJy4nKS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIG1lYW5zIHRoYXQKICAgICAgICAgICAgICAgICAgV2luZG93cyBwcm9ncmFtcyBydW5uaW5nIHVuZGVyIFdpbmUgY2Fubm90IGNoYW5nZSB0aGUgTmV0QklPUyBjb21wdXRlciBuYW1lLgogICAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiTiIsIFdpbmUgd2lsbCB1c2UgdGhlIHJlZ2lzdHJ5IHZhbHVlIGFib3ZlCiAgICAgICAgICAgICAgICAgIHRvIHNldCB0aGUgTmV0QklPUyBuYW1lLiBPbmx5IGlmIHRoZSByZWdpc3RyeSBlbnRyeSBkb2Vzbid0IGV4aXN0ICh1c3VhbGx5CiAgICAgICAgICAgICAgICAgIG9ubHkgZHVyaW5nIHRoZSBmaXJzdCB3aW5lIHN0YXJ0dXApIGl0IHdpbGwgdXNlIHRoZSBVbml4IGhvc3RuYW1lIGFzCiAgICAgICAgICAgICAgICAgIHVzdWFsLiBXaW5kb3dzIHByb2dyYW1zIGNhbiBjaGFuZ2UgdGhlIE5ldEJJT1MgbmFtZS4gVGhlIGNoYW5nZQogICAgICAgICAgICAgICAgICB3aWxsIGJlIGVmZmVjdGl2ZSBhZnRlciBhICJyZWJvb3QiLCBpLmUuIGFmdGVyIHJlc3RhcnRpbmcgV2luZS4KICAgICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgICAgIDwvdmFyaWFibGVsaXN0PgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0MyBpZD0iY29uZmlnLWFwcGRlZmF1bHRzIj4KICAgICAgICAgIDx0aXRsZT5UaGUgW0FwcERlZmF1bHRzXSBTZWN0aW9uPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGUgc2VjdGlvbiBpcyB1c2VkIHRvIG92ZXJ3cml0ZSBjZXJ0YWluIHNldHRpbmdzIG9mIHRoaXMgZmlsZSBmb3IgYQogICAgICAgICAgICBzcGVjaWFsIHByb2dyYW0gd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3MuCiAgICAgICAgICAgIFtBcHBEZWZhdWx0c10gaXMgbm90IHRoZSByZWFsIG5hbWUgb2YgdGhlIHNlY3Rpb24uIFRoZSByZWFsIG5hbWUKICAgICAgICAgICAgY29uc2lzdHMgb2YgdGhlIGxlYWRpbmcgd29yZCBBcHBEZWZhdWx0cyBmb2xsb3dlZCBieSB0aGUgbmFtZQogICAgICAgICAgICBvZiB0aGUgZXhlY3V0YWJsZSB0aGUgc2VjdGlvbiBpcyB2YWxpZCBmb3IuCiAgCSAgICBUaGUgZW5kIG9mIHRoZSBzZWN0aW9uIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlCiAgCSAgICBjb3JyZXNwb25kaW5nICJzdGFuZGFyZCIgc2VjdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCiAgCSAgICB0aGF0IHNob3VsZCBoYXZlIHNvbWUgb2YgaXRzIHNldHRpbmdzIG92ZXJ3cml0dGVuIHdpdGggdGhlCiAgCSAgICBwcm9ncmFtIHNwZWNpZmljIHNldHRpbmdzIHlvdSBkZWZpbmUuCiAgCSAgICBUaGUgdGhyZWUgcGFydHMgb2YgdGhlIHNlY3Rpb24gbmFtZSBhcmUgc2VwYXJhdGVkIGJ5IHR3byBiYWNrc2xhc2hlcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBDdXJyZW50bHkgd2luZSBzdXBwb3J0cyBvdmVycmlkaW5nIHNlbGVjdGVkIHNldHRpbmdzIHdpdGhpbgogIAkgICAgdGhlIHNlY3Rpb25zIFtEbGxPdmVycmlkZXNdLCBbeDExZHJ2XSwgW3ZlcnNpb25dIGFuZCBbZHNvdW5kXSBvbmx5LgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IG92ZXJyaWRlcyB0aGUgbm9ybWFsIHNldHRpbmdzIGZvciBhCiAgICAgICAgICAgIHByb2dyYW06CiAgCSAgICA8cHJvZ3JhbWxpc3Rpbmc+Cjs7IGRlZmF1bHQgc2V0dGluZ3MKW3gxMWRydl0KIk1hbmFnZWQiID0gIlkiCiJEZXNrdG9wIiA9ICJOIgoKOzsgcnVuIGluc3RhbGwgaW4gZGVza3RvcCBtb2RlCltBcHBEZWZhdWx0c1xcaW5zdGFsbC5leGVcXHgxMWRydl0KIk1hbmFnZWQiID0gIk4iCiJEZXNrdG9wIiA9ICI4MDB4NjAwIgogIAkgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctdHJvdWJsZSI+CiAgICAgICAgPHRpdGxlPldoYXQgSWYgSXQgRG9lc24ndCBXb3JrPzwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBUaGVyZSBpcyBhbHdheXMgYSBjaGFuY2UgdGhhdCB0aGluZ3Mgd2lsbCBnbyB3cm9uZy4gSWYgdGhlCiAgICAgICAgICB1bnRoaW5rYWJsZSBoYXBwZW5zLCByZXBvcnQgdGhlIHByb2JsZW0gdG8KICAJICA8dWxpbmsgdXJsPSJodHRwOi8vYnVncy53aW5laHEub3JnLyI+V2luZSBCdWd6aWxsYTwvdWxpbms+LAogIAkgIHRyeSB0aGUgbmV3c2dyb3VwCiAgICAgICAgICA8c3lzdGVtaXRlbT5jb21wLmVtdWxhdG9ycy5tcy13aW5kb3dzLndpbmU8L3N5c3RlbWl0ZW0+LAogIAkgIG9yIHRoZSBJUkMgY2hhbm5lbCA8c3lzdGVtaXRlbT4jV2luZUhRPC9zeXN0ZW1pdGVtPiBmb3VuZCBvbgogICAgICAgICAgaXJjLmZyZWVub2RlLm5ldCwgb3IgY29ubmVjdGVkIHNlcnZlcnMuCiAgCSAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgbG9va2VkIG92ZXIgdGhpcyBkb2N1bWVudCB0aG9yb3VnaGx5LAogIAkgIGFuZCBoYXZlIGFsc28gcmVhZDoKICAgICAgICA8L3BhcmE+CiAgICAgICAgPGl0ZW1pemVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgPGZpbGVuYW1lPlJFQURNRTwvZmlsZW5hbWU+CiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIDxmaWxlbmFtZT5odHRwOi8vd3d3LndpbmVocS5vcmcvdHJvdWJsZS88L2ZpbGVuYW1lPgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgaW5kZWVkIGl0IGxvb2tzIGxpa2UgeW91J3ZlIGRvbmUgeW91ciByZXNlYXJjaCwgYmUKICAgICAgICAgIHByZXBhcmVkIGZvciBoZWxwZnVsIHN1Z2dlc3Rpb25zLiBJZiB5b3UgaGF2ZW4ndCwgYnJhY2UKICAgICAgICAgIHlvdXJzZWxmIGZvciBoZWF2aW5nIGZsYW1pbmcuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1kcml2ZS1tYWluIj4KICAgICAgPHRpdGxlPlRoZSBXaW5lIEZpbGUgU3lzdGVtIEFuZCBEcml2ZSBMYXllcjwvdGl0bGU+CiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+RXh0cmVtZWx5IEltcG9ydGFudCBQcmVyZXF1aXNpdGVzPC90aXRsZT4KCTxwYXJhPgoJICBJZiB5b3UncmUgcGxhbm5pbmcgdG8gaW5jbHVkZSBhY2Nlc3MgdG8gYSBDRC1ST00gZHJpdmUgaW4geW91ciBXaW5lCgkgIGNvbmZpZ3VyYXRpb24gb24gTGludXgsIHRoZW4gPGVtcGhhc2lzPm1ha2Ugc3VyZTwvZW1waGFzaXM+IHRvIGFkZAoJICB0aGUgPHF1b3RlPnVuaGlkZTwvcXVvdGU+IG1vdW50IG9wdGlvbiB0byB0aGUgQ0QtUk9NIGZpbGUgc3lzdGVtCgkgIGVudHJ5IGluIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4sIGUuZy46CgkgIDxwcm9ncmFtbGlzdGluZz4vZGV2L2Nkcm9tIC9jZHJvbSAgaXNvOTY2MCBybyxub2F1dG8sdXNlcnMsdW5oaWRlIDAgMDwvcHJvZ3JhbWxpc3Rpbmc+CgkgIFNldmVyYWwgV2luZG93cyBwcm9ncmFtIHNldHVwIENELVJPTXMgb3Igb3RoZXIgQ0QtUk9NcyBjaG9zZQoJICB0byBkbyBzdWNoIGJyYWluZGFtYWdlZCB0aGluZ3MgYXMgbWFya2luZyB2ZXJ5IGltcG9ydGFudCBzZXR1cAoJICBoZWxwZXIgZmlsZXMgb24gdGhlIENELVJPTSBhcyA8cXVvdGU+aGlkZGVuPC9xdW90ZT4uCgkgIFRoYXQncyBubyBwcm9ibGVtIG9uIFdpbmRvd3MsIHNpbmNlIHRoZSBXaW5kb3dzIENELVJPTSBkcml2ZXIgYnkKCSAgZGVmYXVsdCBkaXNwbGF5cyBldmVuIGZpbGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlCgkgIDxxdW90ZT5oaWRkZW48L3F1b3RlPi4gQnV0IG9uIExpbnV4LCB3aGljaCBjaG9zZSB0bwoJICA8ZW1waGFzaXM+aGlkZTwvZW1waGFzaXM+IDxxdW90ZT5oaWRkZW48L3F1b3RlPiBmaWxlcyBvbiBDRCBieQoJICBkZWZhdWx0LCB0aGlzIGlzIDxlbXBoYXNpcz5GQVRBTDwvZW1waGFzaXM+IQoJICAodGhlIHByb2dyYW1zIHdpbGwgc2ltcGx5IGFib3J0IHdpdGggYW4gPHF1b3RlPmluc3RhbGxhdGlvbiBmaWxlIG5vdCBmb3VuZDwvcXVvdGU+IG9yIHNpbWlsYXIgZXJyb3IpCgkgIFRodXMgeW91IHNob3VsZCBuZXZlciBmb3JnZXQgdG8gYWRkIHRoaXMgc2V0dGluZy4KCTwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+U2hvcnQgSW50cm9kdWN0aW9uPC90aXRsZT4KICAgICAgICA8cGFyYT4KCSAgV2luZSBlbXVsYXRlcyBkcml2ZXMgYnkgcGxhY2luZyB0aGVpciB2aXJ0dWFsIGRyaXZlIHJvb3RzIHRvCgkgIHVzZXItY29uZmlndXJhYmxlIHBvaW50cyBpbiB0aGUgVW5peCBmaWxlc3lzdGVtLCBzbyBpdCdzIHlvdXIKCSAgY2hvaWNlIHdoZXJlIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPidzIHJvb3Qgc2hvdWxkIGJlCgkgICg8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiB3aWxsIGV2ZW4gYXNrIHlvdSkuIElmCgkgIHlvdSBjaG9vc2UsIHNheSwgPGZpbGVuYW1lPn4vd2luZTwvZmlsZW5hbWU+IChvciwgaW4gb3RoZXIKCSAgd29yZHMsIDxmaWxlbmFtZT4vaG9tZS91c2VyL3dpbmU8L2ZpbGVuYW1lPiwgc2luY2UgIn4iCgkgIGluZGljYXRlcyB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgYSB1c2VyKSwgYXMgdGhlIHJvb3Qgb2YgeW91cgoJICB2aXJ0dWFsIGRyaXZlIDxtZWRpYWxhYmVsPkM6PC9tZWRpYWxhYmVsPiwgdGhlbiB5b3UnZCBwdXQgdGhpcwoJICBpbnRvIHlvdXIgV2luZSBjb25maWd1cmF0aW9uIGZpbGU6CiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBDXQoiUGF0aCIgPSAiJUhPTUUlL3dpbmUiCiJUeXBlIiA9ICJoZCIKIkxhYmVsIiA9ICJNUy1ET1MiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIFdpdGggdGhpcyBjb25maWd1cmF0aW9uLCB3aGF0IHdpbmRvd3MgYXBwcyB0aGluayBvZiBhcwogICAgICAgICAgImM6XHdpbmRvd3Ncc3lzdGVtIiB3b3VsZCBtYXAgdG8KICAgICAgICAgIDxmaWxlbmFtZT4vaG9tZS91c2VyL3dpbmUvd2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPiBpbiB0aGUgVU5JWAogICAgICAgICAgZmlsZXN5c3RlbS4gTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNwZWNpZnkKICAgICAgICAgIDxsaXRlcmFsPiJGaWxlc3lzdGVtIiA9ICJ3aW45NSI8L2xpdGVyYWw+LAoJICA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KICAgICAgICAgIDxsaXRlcmFsPiJGaWxlc3lzdGVtIiA9ICJ1bml4IjwvbGl0ZXJhbD4sIHRvIG1ha2UgV2luZSBzaW11bGF0ZSBhCiAgICAgICAgICBXaW5kb3dzIGNvbXBhdGlibGUgKGNhc2UgaW5zZW5zaXRpdmUpIGZpbGVzeXN0ZW0sIG90aGVyd2lzZQogICAgICAgICAgbW9zdCBhcHBzIHdvbid0IHdvcmsuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtZGlyIj4KICAgICAgICA8dGl0bGU+V2luZG93cyBEaXJlY3RvcnkgU3RydWN0dXJlPC90aXRsZT4KICAgICAgICA8cGFyYT4KCSAgSGVyZSdzIHRoZSBmdW5kYW1lbnRhbCBsYXlvdXQgdGhhdCBXaW5kb3dzIHByb2dyYW1zIGFuZAoJICBpbnN0YWxsZXJzIGV4cGVjdCBhbmQgdGhhdCB3ZSB0aHVzIG5lZWQgdG8gY29uZmlndXJlIHByb3Blcmx5CgkgIGluIFdpbmUuIFdpdGhvdXQgaXQsIHRoZXkgc2VsZG9tbHkgb3BlcmF0ZSBjb3JyZWN0bHkuICBJZiB5b3UKCSAgaW50ZW5kIHRvIHVzZSBhIG5vLXdpbmRvd3MgZW52aXJvbm1lbnQgKG5vdCB1c2luZyBhbiBleGlzdGluZwoJICBXaW5kb3dzIHBhcnRpdGlvbiksIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGVpdGhlcgoJICA8Y29tbWFuZD5XaW5lU2V0dXBUazwvY29tbWFuZD4ncyBvcgoJICA8Y29tbWFuZD53aW5laW5zdGFsbDwvY29tbWFuZD4ncyBjYXBhYmlsaXRpZXMgdG8gY3JlYXRlIGFuCgkgIGluaXRpYWwgd2luZG93cyBkaXJlY3RvcnkgdHJlZSwgc2luY2UgY3JlYXRpbmcgYSBkaXJlY3RvcnkKCSAgc3RydWN0dXJlIG1hbnVhbGx5IGlzIHRpcmVzb21lIGFuZCBlcnJvci1wcm9uZS4KICAgICAgICA8L3BhcmE+Cgo8cHJvZ3JhbWxpc3Rpbmc+CkM6XCAgICAgICAgICAgICAgICBSb290IGRpcmVjdG9yeSBvZiBwcmltYXJ5IGRpc2sgZHJpdmUKICBXaW5kb3dzXCAgICAgICAgIFdpbmRvd3MgZGlyZWN0b3J5LCBjb250YWluaW5nIC5JTkkgZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yaWVzLCBldGMuCiAgICBTeXN0ZW1cICAgICAgICBXaW4zLngvOTUvOTgvTUUgZGlyZWN0b3J5IGZvciBjb21tb24gRExMcwogICAgICAgICAgICAgICAgICAgICBXaW5OVC8yMDAwIGRpcmVjdG9yeSBmb3IgY29tbW9uIDE2LWJpdCBETExzCiAgICBTeXN0ZW0zMlwgICAgICBXaW5OVC8yMDAwIGRpcmVjdG9yeSBmb3IgY29tbW9uIDMyLWJpdCBETExzCiAgICBTdGFydCBNZW51XCAgICBQcm9ncmFtIGxhdW5jaGVyIGRpcmVjdG9yeSBzdHJ1Y3R1cmUKICAgICAgUHJvZ3JhbXNcICAgIFByb2dyYW0gbGF1bmNoZXIgbGlua3MgKC5MTksgZmlsZXMpIHRvIHByb2dyYW1zCiAgUHJvZ3JhbSBGaWxlc1wgICBBcHBsaWNhdGlvbiBiaW5hcmllcyAoLkVYRSBhbmQgLkRMTCBmaWxlcykKPC9wcm9ncmFtbGlzdGluZz4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0MiBpZD0iY29uZmlnLWRyaXZlLXNlY3Rpb25zIj4KICAgICAgICA8dGl0bGU+VGhlIFtEcml2ZSB4XSBTZWN0aW9uczwvdGl0bGU+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZXNlIHNlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBtYWtlIGNlcnRhaW4gVW5peAogICAgICAgICAgICBkaXJlY3RvcnkgbG9jYXRpb25zIGFjY2Vzc2libGUgdG8gV2luZSBhcyBhIERPUy9XaW5kb3dzIGRyaXZlCiAgICAgICAgICAgIChkcml2ZSAneDonKSBhbmQgdGh1cyBhY2Nlc3NpYmxlIHRvIFdpbmRvd3MgcHJvZ3JhbXMKICAgICAgICAgICAgdW5kZXIgdGhlIGRyaXZlIG5hbWUgeW91IHNwZWNpZmllZC4KCSAgICBFdmVyeSBET1MvV2luZG93cyBwcm9ncmFtIHNvcnQgb2YgZXhwZWN0cyBhdCBsZWFzdCBhIEM6CgkgICAgZHJpdmUgKGFuZCBzb21ldGltZXMgYWxzbyBhbiBBOiBmbG9wcHkgZHJpdmUpLCBzbyB5b3VyCgkgICAgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBhdCBsZWFzdCBjb250YWluIHRoZSBjb3JyZXNwb25kaW5nCgkgICAgc2VjdGlvbnMsIFtEcml2ZSBDXSBhbmQgW0RyaXZlIEFdLgogICAgICAgICAgICBZb3UgbmVlZCB0byBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgYW4gZXhpc3RpbmcgV2luZG93cwogICAgICAgICAgICBwYXJ0aXRpb24gYXMgdGhlIEMgZHJpdmUgb3Igd2hldGhlciB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24KICAgICAgICAgICAgV2luZSBkcml2ZSBDIGRpcmVjdG9yeSB0cmVlIHNvbWV3aGVyZSAodGFrZSBjYXJlIGFib3V0CiAgICAgICAgICAgIHBlcm1pc3Npb25zISkuCiAgICAgICAgICAgIEVhY2ggZHJpdmUgc2VjdGlvbiBtYXkgc3BlY2lmeSB1cCB0byA2IGRpZmZlcmVudCBzZXR0aW5ncwogICAgICAgICAgICBhcyBleHBsYWluZWQgYmVsb3cuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPltEcml2ZSB4XTwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUaGUgYWJvdmUgbGluZSBiZWdpbnMgdGhlIHNlY3Rpb24gZm9yIGEgZHJpdmUgd2hvc2UgbGV0dGVyIGlzIHgKICAgICAgICAgICAgKERPUyBub3RhdGlvbjogZHJpdmUgJ3g6JykuCiAgICAgICAgICAgIFlvdSBjb3VsZCBlLmcuIGNyZWF0ZSBhbiBlcXVpdmFsZW50IHRvIGEgZHJpdmUgJ0M6JwogICAgICAgICAgICB1bmRlciBET1MvV2luZG93cyBieSB1c2luZyBhIFtEcml2ZSBDXSBzZWN0aW9uIG5hbWUuCgkgICAgTm90ZSB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlBhdGgiID0gIi9kaXIvdG8vcGF0aCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkcml2ZSB3aWxsIGJlZ2luLgogICAgICAgICAgICBXaGVuIFdpbmUgaXMgYnJvd3NpbmcgaW4gZHJpdmUgeCwgaXQgd2lsbCBiZSBhYmxlCiAgICAgICAgICAgIHRvIHNlZSB0aGUgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIGRpcmVjdG9yeQogICAgICAgICAgICA8ZmlsZW5hbWU+L2Rpci90by9wYXRoPC9maWxlbmFtZT4gYW5kIGJlbG93LgogICAgICAgICAgICAobm90ZSB0aGF0IHN5bWxpbmtzIHRvIGRpcmVjdG9yaWVzIHdvbid0IGdldCBpbmNsdWRlZCEKICAgICAgICAgICAgc2VlICI8bGluayBsaW5rZW5kPSJkaXJzeW1saW5rcyI+U2hvd0RpclN5bWxpbmtzPC9saW5rPiIKICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nKQogICAgICAgICAgICBZb3UgY2FuIGFsc28gbWFrZSB1c2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgJEhPTUUgaGVyZSwKCSAgICBhbiBleGFtcGxlIGZvciB1c2luZyBhIDxmaWxlbmFtZT5teXdpbmVkcml2ZTwvZmlsZW5hbWU+CgkgICAgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXIgd291bGQgYmUKICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQYXRoIiA9ICIlSE9NRSUvbXl3aW5lZHJpdmUiPC9wcm9ncmFtbGlzdGluZz4sCgkgICAgYnV0IGRvbid0IGZvcmdldCB0byBwdXQgaXQgYXMgYSBET1MgZW52aXJvbm1lbnQgdmFyaWFibGUsCgkgICAgaWUgc3Vycm91bmRlZCBieSAnJScgc2lnbnMgcmF0aGVyIHRoYW4gcHJlY2VkZWQgYnkgYSAnJCcuCiAgICAgICAgICAgIERvbid0IGZvcmdldCB0byBsZWF2ZSBvZmYgdGhlIHRyYWlsaW5nIHNsYXNoIQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVHlwZSIgPSAiaGR8Y2Ryb218bmV0d29ya3xmbG9wcHkiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIFNldHMgdXAgdGhlIHR5cGUgb2YgZHJpdmUgV2luZSB3aWxsIHNlZSBpdCBhcy4gVHlwZSBtdXN0CiAgICAgICAgICBlcXVhbCBvbmUgb2YgdGhlIGZvdXIgPGxpdGVyYWw+ZmxvcHB5PC9saXRlcmFsPiwKICAgICAgICAgIDxsaXRlcmFsPmhkPC9saXRlcmFsPiwgPGxpdGVyYWw+Y2Ryb208L2xpdGVyYWw+LCBvcgogICAgICAgICAgPGxpdGVyYWw+bmV0d29yazwvbGl0ZXJhbD4uIFRoZXkgYXJlIHNlbGYtZXhwbGFuYXRvcnkuCiAgICAgICAgICAoVGhlIHwncyBtZWFuICJUeXBlID0gJyZsdDtvbmUgb2YgdGhlIG9wdGlvbnMmZ3Q7JyIuKQogICAgICAgICAgVXN1YWxseSwgeW91IGNob29zZSAiaGQiIGZvciBhIGRyaXZlICgiaGQiIGlzIGRlZmF1bHQgYW55d2F5KS4KCSAgRm9yIGEgaG9tZSBkaXJlY3RvcnkgZW50cnksIGl0IG1ha2VzIHNlbnNlIHRvIGNob29zZQoJICAibmV0d29yayIgc29tZXRpbWVzLCBzaW5jZSBzb21lIGhvbWUgZGlyZWN0b3JpZXMgYXJlIGJlaW5nCgkgIGV4cG9ydGVkIG92ZXIgdGhlIG5ldHdvcmsgdmlhIE5GUyBhbmQgdGh1cyBjYW4gaGF2ZSBzbG93IHJlc3BvbnNlCgkgIHRpbWVzLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iTGFiZWwiID0gImJsYWgiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgICAgRGVmaW5lcyB0aGUgZHJpdmUgbGFiZWwuIEdlbmVyYWxseSBvbmx5IG5lZWRlZAogICAgICAgICAgICBmb3IgcHJvZ3JhbXMgdGhhdCBsb29rIGZvciBhIHNwZWNpYWwgQ0QtUk9NLgogICAgICAgICAgVGhlIGxhYmVsIG1heSBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzLgogICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHByZWZlcnJlZCB3YXkgb2YgbWFuYWdpbmcgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycwogICAgICAgICAgICBvZiBDRC1ST01zIGFuZCBmbG9wcGllcyBpcyB0byBnaXZlIFdpbmUgcmF3IGRldmljZSBhY2Nlc3MgZm9yCiAgICAgICAgICAgIHJlYWRpbmcgdGhlc2Ugb24gYSBwZXItQ0QgY2FzZSAoc2VlICJEZXZpY2UiIGJlbG93KSBpbnN0ZWFkIG9mCiAgICAgICAgICAgIGhhcmRjb2Rpbmcgb25lIHNwZWNpZmljICJMYWJlbCIuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJTZXJpYWwiID0gImRlYWRiZWVmIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUZWxscyBXaW5lIHRoZSBzZXJpYWwgbnVtYmVyIG9mIHRoZSBkcml2ZS4gQSBmZXcgcHJvZ3JhbXMgd2l0aAogICAgICAgICAgaW50ZW5zZSBwcm90ZWN0aW9uIGZvciBwaXJhdGluZyBtaWdodCBuZWVkIHRoaXMsIGJ1dCBvdGhlcndpc2UKICAgICAgICAgIGl0J3Mgbm90IG5lZWRlZC4gVXAgdG8gOCBjaGFyYWN0ZXJzIGFuZCBoZXhhZGVjaW1hbC4KICAgICAgICAgICAgVXNpbmcgYSAiRGV2aWNlIiBlbnRyeSBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlICJTZXJpYWwiIHByb2JhYmx5CiAgICAgICAgICAgIGlzIGEgc21hcnRlciBjaG9pY2UuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJGaWxlc3lzdGVtIiA9ICJ3aW45NXx1bml4fG1zZG9zIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBTZXRzIHVwIHRoZSB3YXkgV2luZSBsb29rcyBhdCBmaWxlcyBvbiB0aGUgZHJpdmUuCiAgICAgICAgICBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGZpbGUgbmFtZSBsb29rdXAgYW5kIG1hcHBpbmcgb2YKICAgICAgICAgIFdpbmUgdG8gZXhpc3RpbmcgZmlsZSBzeXN0ZW1zIG9uIHlvdXIgUEMsIGl0IGRvZXMKICAgICAgICAgIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiB0ZWxsIGFueXRoaW5nIGFib3V0IHRoZSBmaWxlc3lzdGVtCiAgICAgICAgICB1c2VkIGl0c2VsZi4KICAgICAgICA8L3BhcmE+CgogICAgICAgIDx2YXJpYWJsZWxpc3Q+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT48bGl0ZXJhbD53aW45NTwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUuIEFsaWtlIHRvIFdpbmRvd3MgOXgvTlQgNC4gVGhpcyBpcwogICAgICAgICAgICAgICAgdGhlIGxvbmcgZmlsZW5hbWUgZmlsZXN5c3RlbSB5b3UgYXJlIHByb2JhYmx5IHVzZWQKICAgICAgICAgICAgICAgIHRvIHdvcmtpbmcgd2l0aC4gVGhlIGZpbGVzeXN0ZW0gYmVoYXZpb3Igb2YgY2hvaWNlIGZvciBtb3N0CiAgICAgICAgICAgICAgICBwcm9ncmFtcyB0byBiZSBydW4gdW5kZXIgd2luZS4gIDxlbXBoYXNpcz5Qcm9iYWJseSB0aGUgb25lCiAgICAgICAgICAgICAgICB5b3Ugd2FudCE8L2VtcGhhc2lzPgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dW5peDwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIENhc2Ugc2Vuc2l0aXZlLiBUaGlzIGZpbGVzeXN0ZW0gaGFzIGFsbW9zdCBubyB1c2UKICAgICAgICAgICAgICAgIChXaW5kb3dzIGFwcHMgZXhwZWN0IGNhc2UgaW5zZW5zaXRpdmUgZmlsZW5hbWVzKSwKICAgICAgICAJICBleGNlcHQgbWF5YmUgZm9yIFdpbmVsaWIgYXBwbGljYXRpb25zLgogICAgICAgICAgICAgICAgVHJ5IGl0IGlmIHlvdSBkYXJlLCBidXQgd2luOTUgaXMgYSBtdWNoIGJldHRlcgogICAgICAgICAgICAgICAgYW5kIGFsd2F5cyByZWNvbW1lbmRlZCBjaG9pY2UuCiAgICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgICAgICA8dGVybT48bGl0ZXJhbD5tc2RvczwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4gQWxpa2UgdG8gRE9TIGFuZAogICAgICAgICAgICAgICAgV2luZG93cyAzLnguIDxsaXRlcmFsPjguMzwvbGl0ZXJhbD4gaXMgdGhlIG1heGltdW0KICAgICAgICAgICAgICAgIGxlbmd0aCBvZiBmaWxlcyAoZWlnaHRkb3QuMTIzKSAtIGxvbmdlciBvbmVzIHdpbGwgYmUKICAgICAgICAgICAgICAgIHRydW5jYXRlZC4KICAgICAgICAJICA8bm90ZT4KICAgICAgICAJICA8cGFyYT4KICAgICAgICAJICAgIFRoaXMgaXMgYSA8ZW1waGFzaXM+dmVyeSBiYWQgY2hvaWNlPC9lbXBoYXNpcz4gaWYKICAgICAgICAJICAgIHlvdSBwbGFuIG9uIHJ1bm5pbmcgYXBwcyB0aGF0IHVzZSBsb25nIGZpbGVuYW1lcy4KICAgICAgICAJICAgIHdpbjk1IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBhcHBzIHRoYXQgd2VyZSBkZXNpZ25lZAogICAgICAgIAkgICAgdG8gcnVuIHVuZGVyIHRoZSBtc2RvcyBzeXN0ZW0uICBJbiBvdGhlciB3b3JkcywgeW91CiAgICAgICAgCSAgICBtaWdodCBub3Qgd2FudCB0byB1c2UgdGhpcy4KICAgICAgICAJICA8L3BhcmE+CiAgICAgICAgCSAgPC9ub3RlPgogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgIDwvdmFyaWFibGVsaXN0PgoKICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IkRldmljZSIgPSAiL2Rldi94eCI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgIDxwYXJhPgogICAgICAgICAgTmVlZGVkIGZvciByYXcgZGV2aWNlIGFjY2VzcyBhbmQgPGxpbmsgbGlua2VuZD0iY29uZmlnLWRyaXZlLWNkcm9tLWxhYmVscyI+bGFiZWwgYW5kIHNlcmlhbCBudW1iZXIgcmVhZGluZzwvbGluaz4uCiAgICAgICAgICBVc2UgdGhpcyA8ZW1waGFzaXM+b25seTwvZW1waGFzaXM+IGZvciBmbG9wcHkgYW5kIGNkcm9tIGRldmljZXMuIFVzaW5nIGl0IG9uCiAgICAgICAgICBFeHRlbmRlZDIgb3Igb3RoZXIgVW5peCBmaWxlIHN5c3RlbXMgY2FuIGhhdmUgZGlyZSByZXN1bHRzCiAgICAgICAgICAod2hlbiBhIHdpbmRvd3MgYXBwIHRyaWVzIHRvIGRvIGEgbG93bGV2ZWwgd3JpdGUsCiAgICAgICAgICB0aGV5IGRvIGl0IGluIGEgRkFUIHdheSAtLSBGQVQgZm9ybWF0IGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20KICAgICAgICAgIGFueSBVbml4IGZpbGUgc3lzdGVtKS4KICAgICAgICAgIEFsc28sIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHByb3BlciBwZXJtaXNzaW9ucyB0byB0aGlzIGRldmljZQogICAgICAgICAgZmlsZS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPG5vdGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIG5vdCByZWFsbHkgaW1wb3J0YW50OyBhbG1vc3QgYWxsIGFwcHMKICAgICAgICAgICAgd2lsbCBoYXZlIG5vIHByb2JsZW0gaWYgaXQgcmVtYWlucyB1bnNwZWNpZmllZC4gRm9yCiAgICAgICAgICAgIENELVJPTXMgaXQncyBxdWl0ZSB1c2VmdWwgaW4gb3JkZXIgdG8gZ2V0IGF1dG9tYXRpYyBsYWJlbAogICAgICAgICAgICBkZXRlY3Rpb24sIHRob3VnaC4gSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgc3BlY2lmeWluZwogICAgICAgICAgICBkZXZpY2UgbmFtZXMsIGp1c3QgbGVhdmUgb3V0IHRoaXMgc2V0dGluZyBmb3IgeW91cgogICAgICAgICAgICBkcml2ZXMuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9ub3RlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgICBIZXJlIGFyZSBhIGZldyBzYW1wbGUgZW50cmllczoKICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KSGVyZSBpcyBhIHNldHVwIGZvciBEcml2ZSBDLCBhIGdlbmVyaWMgaGFyZCBkcml2ZToKW0RyaXZlIENdCiJQYXRoIiA9ICIvZG9zYyIKIlR5cGUiID0gImhkIgoiTGFiZWwiID0gIkhhcmQgRHJpdmUiCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKVGhpcyBpcyBhIHNldHVwIGZvciBEcml2ZSBFLCBhIGdlbmVyaWMgQ0QtUk9NIGRyaXZlOgpbRHJpdmUgRV0KIlBhdGgiID0gIi9tbnQvY2Ryb20iCiJUeXBlIiA9ICJjZHJvbSIKIkxhYmVsIiA9ICJUb3RhbCBBbm5paGlsYXRpb24iCiJGaWxlc3lzdGVtIiA9ICJ3aW45NSIKIkRldmljZSIgPSAiL2Rldi9jZHJvbSIKQW5kIGhlcmUgaXMgYSBzZXR1cCBmb3IgRHJpdmUgQSwgYSBnZW5lcmljIGZsb3BweSBkcml2ZToKW0RyaXZlIEFdCiJUeXBlIiA9ICJmbG9wcHkiCiJQYXRoIiA9ICIvbW50L2Zsb3BweSIKIkxhYmVsIiA9ICJGbG9wcHkgRHJpdmUiCiJTZXJpYWwiID0gIjg3NjU0MzIxIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiCiJEZXZpY2UiID0gIi9kZXYvZmQwIgogICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CgogICAgICA8c2VjdDI+CiAgICAgICAgICA8dGl0bGU+RmlsZSBzeXN0ZW0gc2V0dGluZ3MgaW4gdGhlIFt3aW5lXSBzZWN0aW9uPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iV2luZG93cyIgPSAiYzpcXHdpbmRvd3MiPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIFRoaXMgdGVsbHMgV2luZSBhbmQgV2luZG93cyBwcm9ncmFtcyB3aGVyZSB0aGUKICAgICAgICAgIDxmaWxlbmFtZT5XaW5kb3dzPC9maWxlbmFtZT4gZGlyZWN0b3J5IGlzLiAgSXQgaXMKICAgICAgICAgIHJlY29tbWVuZGVkIHRvIGhhdmUgdGhpcyBkaXJlY3Rvcnkgc29tZXdoZXJlIG9uIHlvdXIKICAgICAgICAgIGNvbmZpZ3VyZWQgPG1lZGlhbGFiZWw+QzwvbWVkaWFsYWJlbD4gZHJpdmUsIGFuZCBpdCdzIGFsc28KICAgICAgICAgIHJlY29tbWVuZGVkIHRvIGp1c3QgY2FsbCB0aGUgZGlyZWN0b3J5ICJ3aW5kb3dzIiAodGhpcyBpcwogICAgICAgICAgdGhlIGRlZmF1bHQgc2V0dXAgb24gV2luZG93cywgYW5kIHNvbWUgc3R1cGlkIHByb2dyYW1zCiAgICAgICAgICBtaWdodCByZWx5IG9uIHRoaXMpLiAgU28gaW4gY2FzZSB5b3UgY2hvc2UgYSAiV2luZG93cyIKICAgICAgICAgIHNldHRpbmcgb2YgImM6XFx3aW5kb3dzIiBhbmQgeW91IGNob3NlIHRvIHNldCB1cCBhIGRyaXZlIEMKICAgICAgICAgIGUuZy4gYXQgPGZpbGVuYW1lPi91c3IvbG9jYWwvd2luZV9jPC9maWxlbmFtZT4sIHRoZQogICAgICAgICAgY29ycmVzcG9uZGluZyBkaXJlY3Rvcnkgd291bGQgYmUKICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYy93aW5kb3dzPC9maWxlbmFtZT4uICBNYWtlIG9uZQogICAgICAgICAgaWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuIDxlbXBoYXNpcz5ObyB0cmFpbGluZyBzbGFzaDwvZW1waGFzaXM+ICg8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4KICAgICAgICAgIDxmaWxlbmFtZT5DOlxcd2luZG93c1w8L2ZpbGVuYW1lPikhIFdyaXRlIGFjY2VzcyBzdHJvbmdseQogICAgICAgICAgcmVjb21tZW5kZWQsIGFzIFdpbmRvd3MgcHJvZ3JhbXMgYWx3YXlzIGFzc3VtZSB3cml0ZSBhY2Nlc3MKICAgICAgICAgICAgdG8gdGhlIFdpbmRvd3MgZGlyZWN0b3J5IQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iU3lzdGVtIiA9ICJjOlxcd2luZG93c1xcc3lzdGVtIjwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICBUaGlzIHNldHMgdXAgd2hlcmUgdGhlIHdpbmRvd3Mgc3lzdGVtIGZpbGVzIGFyZS4gVGhlIFdpbmRvd3MKICAgICAgICAgICAgc3lzdGVtIGRpcmVjdG9yeSBzaG91bGQgcmVzaWRlIGJlbG93IHRoZSBkaXJlY3RvcnkgdXNlZCBmb3IgdGhlCiAgICAgICAgICA8bGl0ZXJhbD5XaW5kb3dzPC9saXRlcmFsPiBzZXR0aW5nLgogICAgICAgICAgICBUaHVzIHdoZW4gdXNpbmcgdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBzeXN0ZW0gZGlyZWN0b3J5IHdvdWxkIGJlCiAgICAgICAgICAgIDxmaWxlbmFtZT4vdXNyL2xvY2FsL3dpbmVfYy93aW5kb3dzL3N5c3RlbTwvZmlsZW5hbWU+LgogICAgICAgICAgQWdhaW4sIG5vIHRyYWlsaW5nIHNsYXNoLCBhbmQgd3JpdGUgYWNjZXNzIQogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4iVGVtcCIgPSAiYzpcXHRlbXAiPC9wcm9ncmFtbGlzdGluZz4gVGhpcyBzaG91bGQKICAgICAgICAgIGJlIHRoZSBkaXJlY3RvcnkgeW91IHdhbnQgeW91ciB0ZW1wIGZpbGVzIHN0b3JlZCBpbiwKICAgICAgICAgICAgL3Vzci9sb2NhbC93aW5lX2MvdGVtcCBpbiBvdXIgZXhhbXBsZS4KICAgICAgICAgIEFnYWluLCBubyB0cmFpbGluZyBzbGFzaCwgYW5kIDxlbXBoYXNpcz53cml0ZQogICAgICAgICAgICBhY2Nlc3M8L2VtcGhhc2lzPiEhCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgPHByb2dyYW1saXN0aW5nPiJQYXRoIiA9ICJjOlxcd2luZG93cztjOlxcd2luZG93c1xcc3lzdGVtO2M6XFxibGFuY28iPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICAgIEJlaGF2ZXMgbGlrZSB0aGUgPGVudmFyPlBBVEg8L2VudmFyPiBzZXR0aW5nIG9uIFVOSVgKICAgICAgICAgIGJveGVzLiBXaGVuIHdpbmUgaXMgcnVuIGxpa2UgPHVzZXJpbnB1dD53aW5lCiAgICAgICAgICAgIHNvbC5leGU8L3VzZXJpbnB1dD4sIGlmIDxmaWxlbmFtZT5zb2wuZXhlPC9maWxlbmFtZT4KICAgICAgICAgIHJlc2lkZXMgaW4gYSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGluIHRoZQogICAgICAgICAgPGxpdGVyYWw+UGF0aDwvbGl0ZXJhbD4gc2V0dGluZywgd2luZSB3aWxsIHJ1biBpdCAoT2YKICAgICAgICAgIGNvdXJzZSwgaWYgPGZpbGVuYW1lPnNvbC5leGU8L2ZpbGVuYW1lPiByZXNpZGVzIGluIHRoZQogICAgICAgICAgY3VycmVudCBkaXJlY3RvcnksIHdpbmUgd2lsbCBydW4gdGhhdCBvbmUpLiBNYWtlIHN1cmUgaXQKICAgICAgICAgIGFsd2F5cyBoYXMgeW91ciA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGRpcmVjdG9yeSBhbmQKICAgICAgICAgIHN5c3RlbSBkaXJlY3RvcnkgKEZvciB0aGlzIHNldHVwLCBpdCBtdXN0IGhhdmUKICAgICAgICAgIDxmaWxlbmFtZT4iYzpcXHdpbmRvd3M7YzpcXHdpbmRvd3NcXHN5c3RlbSI8L2ZpbGVuYW1lPikuCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhIGlkPSJkaXJzeW1saW5rcyI+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+IlNob3dEaXJTeW1saW5rcyIgPSAiMSI8L3Byb2dyYW1saXN0aW5nPgogICAgICAgICAgV2luZSBkb2Vzbid0IHBhc3MgZGlyZWN0b3J5IHN5bWxpbmtzIHRvIFdpbmRvd3MgcHJvZ3JhbXMgYnkKICAgICAgICAgIGRlZmF1bHQsIGFzIGRvaW5nIHNvIG1heSBjcmFzaCBzb21lIHByb2dyYW1zIHRoYXQgZG8KICAgICAgICAgIHJlY3Vyc2l2ZSBsb29rdXBzIG9mIHdob2xlIHN1YmRpcmVjdG9yeSB0cmVlcwogICAgICAgICAgd2hlbmV2ZXIgYSBkaXJlY3Rvcnkgc3ltbGluayBwb2ludHMgYmFjayB0byBpdHNlbGYgb3Igb25lIG9mIGl0cwogICAgICAgICAgcGFyZW50IGRpcmVjdG9yaWVzLgogICAgICAgICAgVGhhdCdzIHdoeSB3ZSBkaXNhbGxvd2VkIHRoZSB1c2Ugb2YgZGlyZWN0b3J5IHN5bWxpbmtzCiAgICAgICAgICBhbmQgYWRkZWQgdGhpcyBzZXR0aW5nIHRvIHJlZW5hYmxlICgiMSIpIHRoaXMgZnVuY3Rpb25hbGl0eS4KCSAgSWYgeW91IDxlbXBoYXNpcz5yZWFsbHk8L2VtcGhhc2lzPiBuZWVkIFdpbmUgdG8gdGFrZSBpbnRvCgkgIGFjY291bnQgc3ltbGlua2VkIGRpcmVjdG9yaWVzLCB0aGVuIHJlZW5hYmxlIGl0LCBidXQKCSAgPGVtcGhhc2lzPmJlIHByZXBhcmVkIGZvciBjcmFzaGVzPC9lbXBoYXNpcz4gaW4gY2VydGFpbgoJICBXaW5kb3dzIHByb2dyYW1zIHdoZW4gdXNpbmcgdGhlIGFib3ZlIG1ldGhvZCEgKGluIG90aGVyIHdvcmRzOgoJICBlbmFibGluZyBpdCBpcyBjZXJ0YWlubHkgbm90IHJlY29tbWVuZGVkKQogICAgICAgIDwvcGFyYT4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+TW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBhYm91dCBmaWxlIHN5c3RlbSBkaWZmZXJlbmNlczwvdGl0bGU+CiAgICAgICAgPHBhcmE+CgkgIFdpbmRvd3MgdXNlcyBhIGRpZmZlcmVudCAoYW5kIGluZmVyaW9yKSB3YXkgdGhhbiBVbml4IHRvIGRlc2NyaWJlIHRoZQoJICBsb2NhdGlvbiBvZiBmaWxlcyBpbiBhIGNvbXB1dGVyLiBUaHVzIFdpbmRvd3MgcHJvZ3JhbXMgYWxzbyBleHBlY3QKCSAgdG8gZmluZCB0aGlzIGRpZmZlcmVudCB3YXkgc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCgkgIFNpbmNlIHdlIGludGVuZCB0byBydW4gV2luZG93cyBwcm9ncmFtcyBvbgoJICBhIFVuaXggc3lzdGVtLCB3ZSdyZSBpbiB0cm91YmxlLCBhcyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZQoJICBiZXR3ZWVuIHRoZXNlIGRpZmZlcmVudCBmaWxlIGFjY2VzcyB0ZWNobmlxdWVzLgoJPC9wYXJhPgoJPHBhcmE+CiAgICAgICAgICBXaW5kb3dzIHVzZXMgZHJpdmUgbGV0dGVycyB0byBkZXNjcmliZSBkcml2ZXMgb3IKICAgICAgICAgIGFueSBvdGhlciBmb3JtIG9mIHN0b3JhZ2UgbWVkaWEgYW5kIHRvIGFjY2VzcyBmaWxlcyBvbiB0aGVtLgoJICBGb3IgZXhhbXBsZSwgY29tbW9uIGRyaXZlIG5hbWVzIGFyZQoJICA8ZmlsZW5hbWU+Qzo8L2ZpbGVuYW1lPiBmb3IgdGhlIG1haW4gV2luZG93cyBzeXN0ZW0gcGFydGl0aW9uCgkgIG9uIHRoZSBmaXJzdCBoYXJkZGlzayBhbmQgPGZpbGVuYW1lPkE6PC9maWxlbmFtZT4gZm9yIHRoZQoJICBmaXJzdCBmbG9wcHkgZHJpdmUuCgkgIEFsc28sIFdpbmRvd3MgdXNlcyA8ZmlsZW5hbWU+XDwvZmlsZW5hbWU+IChiYWNrc2xhc2gpIGFzIHRoZQoJICBkaXJlY3Rvcnkgc2VwYXJhdG9yIHNpZ24sIHdoZXJlYXMgVW5peCB1c2VzCgkgIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4gKHNsYXNoKS4KCSAgVGh1cywgYW4gZXhhbXBsZSBkb2N1bWVudCBvbiB0aGUgZmlyc3QgZGF0YSBwYXJ0aXRpb24gaW4KCSAgV2luZG93cyBtaWdodCBiZSBhY2Nlc3NlZCBieSB0aGUgbmFtZSBvZgoJICA8ZmlsZW5hbWU+RDpcbXl3b3JrXG15ZG9jdW1lbnQudHh0PC9maWxlbmFtZT4uCgk8L3BhcmE+Cgk8cGFyYT4KCSAgU28gbXVjaCBmb3IgdGhlIFdpbmRvd3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KCTwvcGFyYT4KCTxwYXJhPgoJICBXZWxsLCB0aGUgcHJvYmxlbSBpcywgaW4gVW5peCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzCgkgIDxxdW90ZT5kcml2ZSBsZXR0ZXJzPC9xdW90ZT4uIEluc3RlYWQsIFVuaXggY2hvc2UgdG8gZ28gdGhlCgkgIG11Y2ggYmV0dGVyIHdheSBvZiBoYXZpbmcgb25lIHNpbmdsZSB1bmlmb3JtIGRpcmVjdG9yeSB0cmVlCgkgIChzdGFydGluZyB3aXRoIHRoZSByb290IGRpcmVjdG9yeQoJICA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+KSwgd2hpY2ggaGFzIHZhcmlvdXMgc3RvcmFnZSBkZXZpY2VzCgkgIHN1Y2ggYXMgZS5nLiBoYXJkZGlzayBwYXJ0aXRpb25zIGFwcGVuZGVkIGF0IHZhcmlvdXMgZGlyZWN0b3J5CgkgIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHRyZWUgKGFuIGV4YW1wbGUgd291bGQgYmUKCSAgPGZpbGVuYW1lPi9kYXRhMS9teXdvcms8L2ZpbGVuYW1lPiwgd2hpY2ggaXMgdGhlIGZpcnN0IGRhdGEKCSAgcGFydGl0aW9uIG1vdW50ZWQvYXR0YWNoZWQgdG8gYSBkaXJlY3RvcnkgY2FsbGVkIGRhdGExIGluIHRoZQoJICByb290IGRpcmVjdG9yeSA8ZmlsZW5hbWU+LzwvZmlsZW5hbWU+OyBteXdvcmsgaXMgYSBzdWIKCSAgZGlyZWN0b3J5IG9mIHRoZSBkYXRhIHBhcnRpdGlvbiBmaWxlIHN5c3RlbSB0aGF0J3MgbW91bnRlZAoJICB1bmRlciA8ZmlsZW5hbWU+L2RhdGExPC9maWxlbmFtZT4pLgoJICBJbiBVbml4LCB0aGUgV2luZG93cyBleGFtcGxlIGRvY3VtZW50IG1lbnRpb25lZCBhYm92ZSBjb3VsZCBlLmcuCgkgIGJlIGFjY2Vzc2VkIGJ5IHRoZSBuYW1lIG9mCgkgIDxmaWxlbmFtZT4vZGF0YTEvbXl3b3JrL215ZG9jdW1lbnQudHh0PC9maWxlbmFtZT4sCgkgIHByb3ZpZGVkIHRoYXQgdGhlIGFkbWluaXN0cmF0b3IgZGVjaWRlZCB0byBtb3VudCAoYXR0YWNoKSB0aGUgZmlyc3QKCSAgZGF0YSBwYXJ0aXRpb24gYXQgdGhlIGRpcmVjdG9yeSAvZGF0YTEgaW5zaWRlIHRoZSBVbml4CgkgIGRpcmVjdG9yeSB0cmVlLiBOb3RlIHRoYXQgaW4gVW5peCwgdGhlIGFkbWluaXN0cmF0b3IgY2FuCgkgIDxlbXBoYXNpcz5jaG9vc2U8L2VtcGhhc2lzPiBhbnkgY3VzdG9tIHBhcnRpdGlvbiBsb2NhdGlvbiBoZQoJICB3YW50cyAoaGVyZSwgPGZpbGVuYW1lPi9kYXRhMTwvZmlsZW5hbWU+KSwgd2hlcmVhcyBpbiBXaW5kb3dzIHRoZSBzeXN0ZW0KCSAgPGVtcGhhc2lzPnNlbGVjdHM8L2VtcGhhc2lzPiBhbnkgZHJpdmUgbGV0dGVyIGl0IGRlZW1zCgkgIHN1aXRhYmxlIGZvciB0aGUgZmlyc3QgZGF0YSBwYXJ0aXRpb24gKGhlcmUsCgkgIDxmaWxlbmFtZT5EOjwvZmlsZW5hbWU+KSwgYW5kLCBldmVuIHdvcnNlLCBpZiB0aGVyZSBpcyBzb21lCgkgIGNoYW5nZSBpbiBwYXJ0aXRpb24gb3JkZXIsIFdpbmRvd3MgYXV0b21hdGljYWxseQoJICA8ZW1waGFzaXM+Y2hhbmdlczwvZW1waGFzaXM+IHRoZSBkcml2ZSBsZXR0ZXIsIGFuZCB5b3UgbWlnaHQKCSAgc3VkZGVubHkgZmluZCB5b3Vyc2VsZiB3aXRoIGEgZmlyc3QgZGF0YSBwYXJ0aXRpb24gYXQgZHJpdmUKCSAgbGV0dGVyIDxmaWxlbmFtZT5FOjwvZmlsZW5hbWU+LCB3aXRoIGFsbCB0aGUgZmlsZSBuYW1pbmcgYW5kCgkgIHJlZmVyZW5jaW5nIGNvbmZ1c2lvbiB0aGF0IGVudGFpbHMuIFRodXMsIHRoZSBXaW5kb3dzIHdheSBvZgoJICB1c2luZyBldmVyLWNoYW5naW5nIGRyaXZlIGxldHRlcnMgaXMgPGVtcGhhc2lzPmNsZWFybHkKCSAgaW5mZXJpb3I8L2VtcGhhc2lzPiB0byB0aGUgVW5peCB3YXkgb2YgYXNzaWduaW5nCgkgIDxlbXBoYXNpcz5maXhlZDwvZW1waGFzaXM+IGRpcmVjdG9yeSB0cmVlIGxvY2F0aW9ucyBmb3IgZXZlcnkKCSAgZGF0YSBzdG9yYWdlIG1lZGl1bS4KCSAgQXMgd2UnbGwgc2VlIHNvb24sIGZvcnR1bmF0ZWx5IHRoaXMgV2luZG93cyBsaW1pdGF0aW9uIG9mCgkgIGNoYW5naW5nIGRyaXZlIGxldHRlcnMgZG9lc24ndCBhZmZlY3QgdXMgaW4gV2luZSBhdCBhbGwsIHNpbmNlCgkgIHdlIGNhbiBwcm9wZXJseSBtYXAgPGVtcGhhc2lzPm5ldmVyLWNoYW5naW5nPC9lbXBoYXNpcz4gZHJpdmUgbGV0dGVycyB0byA8ZW1waGFzaXM+Zml4ZWQ8L2VtcGhhc2lzPiBsb2NhdGlvbnMgaW5zaWRlIHRoZSBVbml4IGRpcmVjdG9yeSB0cmVlIChhbmQgZXZlbiBpZiB0aGUgbG9jYXRpb24gb2YgdGhlIHJlc3BlY3RpdmUgVW5peCBkaXJlY3RvcnkgY2hhbmdlcywgd2UgY2FuIHN0aWxsIHNpbXBseSB1cGRhdGUgdGhlIFdpbmUgZHJpdmUgbWFwcGluZyB0byByZWZsZWN0IHRoZSB1cGRhdGVkIGxvY2F0aW9uIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGtlZXAgdGhlIG9yaWdpbmFsIGRyaXZlIGxldHRlcikuCgk8L3BhcmE+Cgk8cGFyYT4KCSAgT0ssIG5vdyB0aGF0IHdlIGtub3cgc29tZSB0aGVvcnkgYWJvdXQgV2luZG93cyBhbmQgVW5peCBkcml2ZQoJICBhbmQgZmlsZW5hbWUgbWFwcGluZywgaXQncyBwcm9iYWJseSB0aW1lIHRvIGFzayBob3cgV2luZQoJICBhY2hpZXZlcyB0aGUgbWFnaWMgb2YgbWFwcGluZyBhIFVuaXggZGlyZWN0b3J5IGxvY2F0aW9uIHRvIGEKCSAgV2luZG93cyBkcml2ZS4uLgoJPC9wYXJhPgoJPHBhcmE+CiAgICAgICAgICBXaW5lIGNob3NlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CgkgIEluIFdpbmUsIHlvdSBkb24ndCBhc3NpZ24gc29tZSByZWFsIHBoeXNpY2FsIHN0b3JhZ2UgbWVkaXVtCgkgIChzdWNoIGFzIGEgaGFyZGRpc2sgcGFydGl0aW9uIG9yIHNpbWlsYXIpIHRvIGVhY2ggZHJpdmUgbGV0dGVyCgkgIG1hcHBpbmcgZW50cnkuCiAgICAgICAgICBJbnN0ZWFkLCB5b3UgY2hvb3NlIGNlcnRhaW4gc3ViIGRpcmVjdG9yeSB0cmVlcyBpbnNpZGUgdGhlIFVuaXgKICAgICAgICAgIGRpcmVjdG9yeSB0cmVlICh0aGF0IHN0YXJ0cyB3aXRoIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4pIHRoYXQKICAgICAgICAgIHlvdSB3b3VsZCBsaWtlIHRvIGFzc2lnbiBhIGRyaXZlIGxldHRlciB0by4KCTwvcGFyYT4KCTxwYXJhPgoJICBOb3RlIHRoYXQgZm9yIGV2ZXJ5IFVuaXggc3ViIGRpcmVjdG9yeSB0cmVlIHRoYXQgeW91IGludGVuZCB0bwoJICBzdGFydCBXaW5kb3dzIHByb2dyYW1zIGluLCBpdCBpcyA8ZW1waGFzaXM+YWJzb2x1dGVseQoJICByZXF1aXJlZDwvZW1waGFzaXM+IHRvIGhhdmUgYSBXaW5lIGRyaXZlIG1hcHBpbmcgZW50cnk6Cgk8L3BhcmE+Cgk8cGFyYT4KCSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSBwdWJsaWNseSB3cml0YWJsZSA8cXVvdGU+V2luZG93cwoJICBkaXJlY3Rvcnkgc3BhY2U8L3F1b3RlPiB1bmRlciA8ZmlsZW5hbWU+L3Vzci9teXdpbmU8L2ZpbGVuYW1lPiwgdGhlbiBpbiBvcmRlciB0byBiZQoJICBhYmxlIHRvIGFjY2VzcyB0aGlzIHN1YiBkaXJlY3RvcnkgdHJlZSBmcm9tIFdpbmUsIHlvdSBzaG91bGQKCSAgaGF2ZSBhIGRyaXZlIG1hcHBpbmcgZW50cnkgdGhhdCBtYXBzIGEgY2VydGFpbiBkcml2ZSBsZXR0ZXIKCSAgKGZvciBleGFtcGxlLCBsZXQncyB0YWtlIGRyaXZlIGxldHRlciA8ZmlsZW5hbWU+UDo8L2ZpbGVuYW1lPikKCSAgZWl0aGVyIHRvIDxmaWxlbmFtZT4vdXNyL215d2luZTwvZmlsZW5hbWU+IG9yIDxmaWxlbmFtZT4vdXNyPC9maWxlbmFtZT4gKHRvIGFsc28gYWNjZXNzIGFueSBkaXJlY3RvcmllcyBiZWxvbmdpbmcgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnkpIG9yIDxmaWxlbmFtZT4vPC9maWxlbmFtZT4gKHRvIGFsc28gYWNjZXNzIGFueSBkaXJlY3Rvcnkgd2hhdHNvZXZlciBvbiB0aGlzIHN5c3RlbSBieSB0aGlzIGRyaXZlIGxldHRlciBtYXBwaW5nKS4gVGhlIERPUyBkcml2ZS9kaXJlY3RvcnkgbG9jYXRpb24gdG8gYWNjZXNzIGZpbGVzIGluIDxmaWxlbmFtZT4vdXNyL215d2luZTwvZmlsZW5hbWU+IDxlbXBoYXNpcz5pbiBXaW5lPC9lbXBoYXNpcz4gaW4gdGhlc2UgY29uZmlndXJhdGlvbiBjYXNlcyB3b3VsZCB0aGVuIGJlIDxmaWxlbmFtZT5QOlw8L2ZpbGVuYW1lPiBvciA8ZmlsZW5hbWU+UDpcbXl3aW5lPC9maWxlbmFtZT4gb3IgPGZpbGVuYW1lPlA6XHVzclxteXdpbmU8L2ZpbGVuYW1lPiwgcmVzcGVjdGl2ZWx5LgoJPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctbm8td2luZG93cyI+CiAgICAgICAgPHRpdGxlPkluc3RhbGxpbmcgV2luZSBXaXRob3V0IFdpbmRvd3M8L3RpdGxlPgoKICAgICAgICA8cGFyYT4KICAgICAgICAgIEEgbWFqb3IgZ29hbCBvZiBXaW5lIGlzIHRvIGFsbG93IHVzZXJzIHRvIHJ1biBXaW5kb3dzIHByb2dyYW1zCiAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIFdpbmRvd3Mgb24gdGhlaXIgbWFjaGluZS4gV2luZQogICAgICAgICAgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbWFpbiBETExzIHVzdWFsbHkKICAgICAgICAgIHByb3ZpZGVkIHdpdGggV2luZG93cy4gVGhlcmVmb3JlLCBvbmNlIFdpbmUgaXMgZmluaXNoZWQsIHlvdQogICAgICAgICAgd2lsbCBub3QgbmVlZCB0byBoYXZlIFdpbmRvd3MgaW5zdGFsbGVkIHRvIHVzZSBXaW5lLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFdpbmUgaGFzIGFscmVhZHkgbWFkZSBlbm91Z2ggcHJvZ3Jlc3MgdGhhdCBpdCBtYXkgYmUgcG9zc2libGUKICAgICAgICAgIHRvIHJ1biB5b3VyIHRhcmdldCBwcm9ncmFtcyB3aXRob3V0IFdpbmRvd3MgaW5zdGFsbGVkLiBJZgogICAgICAgICAgeW91IHdhbnQgdG8gdHJ5IGl0LCBmb2xsb3cgdGhlc2Ugc3RlcHM6CiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFBvaW50IDxtZWRpYWxhYmVsPltEcml2ZSBDXTwvbWVkaWFsYWJlbD4gaW4KICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50CiAgICAgICAgICAgICAgPGZpbGVuYW1lPkM6PC9maWxlbmFtZT4gdG8gYmUuIFJlZmVyIHRvIHRoZSB3aW5lLmNvbmYgbWFuIHBhZ2UKICAgICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAJICAgIFRoZSBkaXJlY3RvcnkgdG8gYmUgdXNlZCBmb3IgZW11bGF0aW5nIGEgQzogZHJpdmUgd2lsbCBiZQogIAkgICAgdGhlIGJhc2UgZGlyZWN0b3J5IGZvciBzb21lIFdpbmRvd3Mgc3BlY2lmaWMgZGlyZWN0b3JpZXMKICAJICAgIGNyZWF0ZWQgYmVsb3cuCiAgCSAgICBSZW1lbWJlciB0byB1c2UKICAgICAgICAgICAgICA8dXNlcmlucHV0PiJGaWxlc3lzdGVtIiA9ICJ3aW45NSI8L3VzZXJpbnB1dD4hCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogIAkgICAgV2l0aGluIHRoZSBkaXJlY3RvcnkgdG8gYmUgdXNlZCBmb3IgQzosIGNyZWF0ZSBlbXB0eQogIAkgICAgPGZpbGVuYW1lPndpbmRvd3M8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy9zeXN0ZW08L2ZpbGVuYW1lPiwKICAgICAgICAgICAgICA8ZmlsZW5hbWU+d2luZG93cy9TdGFydCBNZW51PC9maWxlbmFtZT4sIGFuZAogICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5kb3dzL1N0YXJ0IE1lbnUvUHJvZ3JhbXM8L2ZpbGVuYW1lPgogICAgICAgICAgICAgIGRpcmVjdG9yaWVzLiBEbyBub3QgcG9pbnQgV2luZSB0byBhCiAgICAgICAgICAgICAgPGZpbGVuYW1lPldpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgZnVsbCBvZiBvbGQKICAgICAgICAgICAgICBpbnN0YWxsYXRpb25zIGFuZCBhIG1lc3N5IHJlZ2lzdHJ5LiAoV2luZSBjcmVhdGVzIGEKICAgICAgICAgICAgICBzcGVjaWFsIHJlZ2lzdHJ5IGluIHlvdXIgPGZpbGVuYW1lID5ob21lPC9maWxlbmFtZT4KICAgICAgICAgICAgICBkaXJlY3RvcnksIGluIDxmaWxlbmFtZT4kSE9NRS8ud2luZS8qLnJlZzwvZmlsZW5hbWU+LgogICAgICAgICAgICAgIFBlcmhhcHMgeW91IGhhdmUgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzKS4KICAJICAgIEluIG9uZSBsaW5lOgogIAkgICAgbWtkaXIgLXAgd2luZG93cyB3aW5kb3dzL3N5c3RlbSB3aW5kb3dzL1N0YXJ0XCBNZW51IHdpbmRvd3MvU3RhcnRcIE1lbnUvUHJvZ3JhbXMKICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgUnVuIGFuZC9vciBpbnN0YWxsIHlvdXIgcHJvZ3JhbXMuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9vcmRlcmVkbGlzdD4KCiAgICAgICAgPHBhcmE+CiAgICAgICAgICBCZWNhdXNlIFdpbmUgaXMgbm90IHlldCBjb21wbGV0ZSwgc29tZSBwcm9ncmFtcyB3aWxsIHdvcmsKICAgICAgICAgIGJldHRlciB3aXRoIG5hdGl2ZSBXaW5kb3dzIERMTHMgdGhhbiB3aXRoIFdpbmUncwogICAgICAgICAgcmVwbGFjZW1lbnRzLiBXaW5lIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG1ha2UgdGhpcyBwb3NzaWJsZS4KICAgICAgICAgIEhlcmUgYXJlIHNvbWUgdGlwcyBieSBKdWVyZ2VuIFNjaG1pZWQgKGFuZCBvdGhlcnMpIG9uIGhvdyB0bwogICAgICAgICAgcHJvY2VlZC4gVGhpcyBhc3N1bWVzIHRoYXQgeW91cgogICAgICAgICAgPGZpbGVuYW1lPkM6XHdpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4gdGhlIGNvbmZpZ3VyYXRpb24KICAgICAgICAgIGZpbGUgZG9lcyBub3QgcG9pbnQgdG8gYSBuYXRpdmUgV2luZG93cyBpbnN0YWxsYXRpb24gYnV0IGlzIGluCiAgICAgICAgICBhIHNlcGFyYXRlIFVuaXggZmlsZSBzeXN0ZW0uIChGb3IgaW5zdGFuY2UsIDxxdW90ZT5DOlx3aW5kb3dzPC9xdW90ZT4gaXMKICAgICAgICAgIHJlYWxseSBzdWJkaXJlY3RvcnkgPHF1b3RlPndpbmRvd3M8L3F1b3RlPiBsb2NhdGVkIGluCiAgICAgICAgICA8cXVvdGU+L2hvbWUvZWdvL3dpbmUvZHJpdmVzL2M8L3F1b3RlPikuCiAgICAgICAgPC9wYXJhPgoKICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBSdW4gdGhlIHByb2dyYW0gd2l0aCA8cGFyYW1ldGVyPi0tZGVidWdtc2cKICAgICAgICAgICAgICAgICtsb2FkZGxsPC9wYXJhbWV0ZXI+IHRvIGZpbmQgb3V0IHdoaWNoIGZpbGVzIGFyZQogICAgICAgICAgICAgIG5lZWRlZC4gQ29weSB0aGUgcmVxdWlyZWQgRExMcyBvbmUgYnkgb25lIHRvIHRoZQogICAgICAgICAgICAgIDxmaWxlbmFtZT5DOlx3aW5kb3dzXHN5c3RlbTwvZmlsZW5hbWU+IGRpcmVjdG9yeS4gRG8gbm90CiAgICAgICAgICAgICAgY29weSBLRVJORUwvS0VSTkVMMzIsIEdESS9HREkzMiwgVVNFUi9VU0VSMzIgb3IgTlRETEwuIFRoZXNlCiAgICAgICAgICAgICAgaW1wbGVtZW50IHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFdpbmRvd3MgQVBJLCBhbmQKICAgICAgICAgICAgICB0aGUgV2luZSBpbnRlcm5hbCB2ZXJzaW9ucyBtdXN0IGJlIHVzZWQuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIEVkaXQgdGhlIDxxdW90ZT5bRGxsT3ZlcnJpZGVzXTwvcXVvdGU+IHNlY3Rpb24gb2YKICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiB0byBzcGVjaWZ5CiAgICAgICAgICAgICAgPHF1b3RlPm5hdGl2ZTwvcXVvdGU+IGJlZm9yZSA8cXVvdGU+YnVpbHRpbjwvcXVvdGU+IGZvcgogICAgICAgICAgICAgIHRoZSBXaW5kb3dzIERMTHMgeW91IHdhbnQgdG8gdXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgICAgICAgIGFib3V0IHRoaXMsIHNlZSB0aGUgV2luZSBtYW5wYWdlLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBOb3RlIHRoYXQgc29tZSBuZXR3b3JrIERMTHMgYXJlIG5vdCBuZWVkZWQgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICBXaW5lIGlzIGxvb2tpbmcgZm9yIHRoZW0uIFRoZSBXaW5kb3dzCiAgICAgICAgICAgICAgPGZpbGVuYW1lPk1QUi5ETEw8L2ZpbGVuYW1lPiBjdXJyZW50bHkgZG9lcyBub3Qgd29yazsgeW91CiAgICAgICAgICAgICAgbXVzdCB1c2UgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb3B5IFNIRUxMLkRMTC9TSEVMTDMyLkRMTCwgQ09NTURMRy5ETEwvQ09NRExHMzIuRExMCgkgICAgICBhbmQgQ09NTUNUUkwuRExML0NPTUNUTDMyLkRMTAogICAgICAgICAgICAgIG9ubHkgYXMgcGFpcnMgdG8geW91ciBXaW5lIGRpcmVjdG9yeSAodGhlc2UgRExMcyBhcmUKICAgICAgICAgICAgICA8cXVvdGU+Y2xlYW48L3F1b3RlPiB0byB1c2UpLiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZXNlCiAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSA8cXVvdGU+W0RsbFBhaXJzXTwvcXVvdGU+IHNlY3Rpb24gb2YKICAgICAgICAgICAgICA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgQmUgY29uc2lzdGVudDogVXNlIG9ubHkgRExMcyBmcm9tIHRoZSBzYW1lIFdpbmRvd3MgdmVyc2lvbgogICAgICAgICAgICAgIHRvZ2V0aGVyLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBQdXQgPGZpbGVuYW1lPnJlZ2VkaXQuZXhlPC9maWxlbmFtZT4gaW4gdGhlCiAgICAgICAgICAgICAgPGZpbGVuYW1lPkM6XHdpbmRvd3M8L2ZpbGVuYW1lPiBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgKDxhcHBsaWNhdGlvbj5PZmZpY2UgOTU8L2FwcGxpY2F0aW9uPiBpbXBvcnRzIGEKICAgICAgICAgICAgICA8ZmlsZW5hbWU+Ki5yZWc8L2ZpbGVuYW1lPiBmaWxlIHdoZW4gaXQgcnVucyB3aXRoIGFuIGVtcHR5CiAgICAgICAgICAgICAgcmVnaXN0cnksIGRvbid0IGtub3cgYWJvdXQKICAgICAgICAgICAgICA8YXBwbGljYXRpb24+T2ZmaWNlIDk3PC9hcHBsaWNhdGlvbj4pLgoJICAgICAgQXMgb2Ygbm93LCBpdCBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IGFueSBtb3JlIHRvIHVzZQoJICAgICAgcmVnZWRpdC5leGUsIHNpbmNlIFdpbmUgaGFzIGl0cyBvd24gcmVnZWRpdCBXaW5lbGliCgkgICAgICBhcHBsaWNhdGlvbiBub3cuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIEFsc28gYWRkIDxmaWxlbmFtZT53aW5oZWxwLmV4ZTwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgICAgIDxmaWxlbmFtZT53aW5obHAzMi5leGU8L2ZpbGVuYW1lPiBpZiB5b3Ugd2FudCB0byBiZSBhYmxlCiAgICAgICAgICAgICAgdG8gYnJvd3NlIHRocm91Z2ggeW91ciBwcm9ncmFtcycgaGVscCBmdW5jdGlvbgogIAkgICAgKG9yIGluIGNhc2UgV2luZSdzIHdpbmhlbHAgaW1wbGVtZW50YXRpb24gaW4gcHJvZ3JhbXMvd2luaGVscC8KICAJICAgIGlzIG5vdCBnb29kIGVub3VnaCwgZm9yIGV4YW1wbGUpLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctd2l0aC13aW5kb3dzIj4KICAgICAgICA8dGl0bGU+SW5zdGFsbGluZyBXaW5lIFVzaW5nIEFuIEV4aXN0aW5nIFdpbmRvd3MgUGFydGl0aW9uIEFzIEJhc2U8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgU29tZSBwZW9wbGUgaW50ZW5kIHRvIHVzZSB0aGUgZGF0YSBvZiBhbiBleGlzdGluZyBXaW5kb3dzIHBhcnRpdGlvbgogIAl3aXRoIFdpbmUgaW4gb3JkZXIgdG8gZ2FpbiBzb21lIGJldHRlciBjb21wYXRpYmlsaXR5IG9yIHRvIHJ1biBhbHJlYWR5CiAgCWluc3RhbGxlZCBwcm9ncmFtcyBpbiBhIHNldHVwIGFzIG9yaWdpbmFsIGFzIHBvc3NpYmxlLgogIAlOb3RlIHRoYXQgbWFueSBXaW5kb3dzIHByb2dyYW1zIGFzc3VtZSB0aGF0IHRoZXkgaGF2ZSBmdWxsIHdyaXRlCiAgCWFjY2VzcyB0byBhbGwgd2luZG93cyBkaXJlY3Rvcmllcy4KCiAgCVRoaXMgbWVhbnMgdGhhdCB5b3UgZWl0aGVyIGhhdmUgdG8gY29uZmlndXJlIHRoZSBXaW5kb3dzCiAgCXBhcnRpdGlvbiBtb3VudCBwb2ludCBmb3Igd3JpdGUgcGVybWlzc2lvbiBieSB5b3VyIFdpbmUgdXNlcgogIAkoc2VlIDxsaW5rIGxpbmtlbmQ9ImNvbmZpZy1kcml2ZS12ZmF0Ij5EZWFsaW5nIHdpdGggRkFUL1ZGQVQgcGFydGl0aW9uczwvbGluaz4KICAJb24gaG93IHRvIGRvIHRoYXQpLCBvciB5b3UnbGwgaGF2ZSB0byBjb3B5IG92ZXIgKHNvbWUgcGFydHMgb2YpIHRoZSBXaW5kb3dzCiAgCXBhcnRpdGlvbiBjb250ZW50IHRvIGEgZGlyZWN0b3J5IG9mIGEgVW5peCBwYXJ0aXRpb24gYW5kIG1ha2UKICAJc3VyZSB0aGlzIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaXMgd3JpdGFibGUgYnkgeW91ciB1c2VyLgogIAlXZSA8ZW1waGFzaXM+SElHSExZIERJU0NPVVJBR0U8L2VtcGhhc2lzPiBwZW9wbGUgZnJvbSBkaXJlY3RseSB1c2luZyBhIFdpbmRvd3MgcGFydGl0aW9uIHdpdGgKICAJd3JpdGUgYWNjZXNzIGFzIGEgYmFzZSBmb3IgV2luZSEhIChzb21lIHByb2dyYW1zLCBub3RhYmx5CiAgCUV4cGxvcmVyLCBjb3JydXB0IGxhcmdlIHBhcnRzIG9mIHRoZSBXaW5kb3dzIHBhcnRpdGlvbiBpbiBjYXNlCiAgCW9mIGFuIGluY29ycmVjdCBzZXR1cDsgeW91J3ZlIGJlZW4gd2FybmVkKS4KICAJTm90IHRvIG1lbnRpb24gdGhhdCBOVEZTIHdyaXRlIHN1cHBvcnQgaW4gTGludXggaXMgc3RpbGwgdmVyeQogIAlleHBlcmltZW50YWwgYW5kIDxlbXBoYXNpcz5kYW5nZXJvdXM8L2VtcGhhc2lzPiAoaW4gY2FzZSB5b3UncmUgdXNpbmcgYW4gTlQtYmFzZWQKICAJV2luZG93cyB2ZXJzaW9uIHVzaW5nIHRoZSBOVEZTIGZpbGUgc3lzdGVtKS4KICAJVGh1cyB3ZSBhZHZpc2UgeW91IHRvIGdvIHRoZSBVbml4IGRpcmVjdG9yeSB3YXkuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtdmZhdCI+CiAgICAgICAgPHRpdGxlPkRlYWxpbmcgV2l0aCBGQVQvVkZBVCBQYXJ0aXRpb25zPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyBGQVQgYW5kCiAgICAgICAgICBWRkFUIGZpbGUgc3lzdGVtIHBlcm1pc3Npb25zIHdvcmsgaW4gTGludXgKICAgICAgICAgIHdpdGggYSBmb2N1cyBvbiBjb25maWd1cmluZyB0aGVtIGZvciBXaW5lLgogICAgICAgIDwvcGFyYT4KCiAgICAgICAgPHNlY3QzPgogICAgICAgICAgPHRpdGxlPkludHJvZHVjdGlvbjwvdGl0bGU+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgTGludXggaXMgYWJsZSB0byBhY2Nlc3MgRE9TIGFuZCBXaW5kb3dzIGZpbGUgc3lzdGVtcyB1c2luZwogICAgICAgICAgICBlaXRoZXIgdGhlIEZBVCAob2xkZXIgOC4zIERPUyBmaWxlc3lzdGVtcykgb3IgVkZBVCAobmV3ZXIKICAgICAgICAgICAgV2luZG93cyA5NSBvciBsYXRlciBsb25nIGZpbGVuYW1lIGZpbGVzeXN0ZW1zKSBtb2R1bGVzLgogICAgICAgICAgICBNb3VudGVkIEZBVCBvciBWRkFUIGZpbGVzeXN0ZW1zIHByb3ZpZGUgdGhlIHByaW1hcnkgbWVhbnMKICAgICAgICAgICAgZm9yIHdoaWNoIGV4aXN0aW5nIHByb2dyYW1zIGFuZCB0aGVpciBkYXRhIGFyZSBhY2Nlc3NlZAogICAgICAgICAgICB0aHJvdWdoIFdpbmUgZm9yIGR1YWwgYm9vdCAoTGludXggKyBXaW5kb3dzKSBzeXN0ZW1zLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFdpbmUgbWFwcyBtb3VudGVkIEZBVCBmaWxlc3lzdGVtcywgc3VjaCBhcwogICAgICAgICAgICA8ZmlsZW5hbWU+L2M8L2ZpbGVuYW1lPiwgdG8gZHJpdmVyIGxldHRlcnMsIHN1Y2ggYXMKICAgICAgICAgICAgPHF1b3RlPmM6PC9xdW90ZT4sIGFzIGluZGljYXRlZCBieSB0aGUKICAgICAgICAgICAgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZmlsZS4gIFRoZSBmb2xsb3dpbmcgZXhjZXJwdAogICAgICAgICAgICBmcm9tIGEgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4gZmlsZSBkb2VzIHRoaXM6CiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBDXQoiUGF0aCIgPSAiL2MiCiJUeXBlIiA9ICJoZCIKICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgQWx0aG91Z2ggVkZBVCBmaWxlc3lzdGVtcyBhcmUgcHJlZmVyYWJsZSB0byBGQVQgZmlsZXN5c3RlbXMKICAgICAgICAgICAgZm9yIHRoZWlyIGxvbmcgZmlsZW5hbWUgc3VwcG9ydCwgdGhlIHRlcm0gPHF1b3RlPkZBVDwvcXVvdGU+CiAgICAgICAgICAgIHdpbGwgYmUgdXNlZCB0aHJvdWdob3V0IHRoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCB0bwogICAgICAgICAgICByZWZlciB0byBGQVQgZmlsZXN5c3RlbXMgYW5kIHRoZWlyIGRlcml2YXRpdmVzLiBBbHNvLAogICAgICAgICAgICA8cXVvdGU+L2M8L3F1b3RlPiB3aWxsIGJlIHVzZWQgYXMgdGhlIEZBVCBtb3VudCBwb2ludCBpbgogICAgICAgICAgICBleGFtcGxlcyB0aHJvdWdob3V0IHRoaXMgZG9jdW1lbnQuCiAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgTW9zdCBtb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucyBlaXRoZXIgZGV0ZWN0IG9yIGFsbG93CiAgICAgICAgICAgIGV4aXN0aW5nIEZBVCBmaWxlIHN5c3RlbXMgdG8gYmUgY29uZmlndXJlZCBzbyB0aGF0IHRoZXkgY2FuIGJlCiAgICAgICAgICAgIG1vdW50ZWQsIGluIGEgbG9jYXRpb24gc3VjaCBhcyA8ZmlsZW5hbWU+L2M8L2ZpbGVuYW1lPiwKICAgICAgICAgICAgZWl0aGVyIHBlcnNpc3RlbnRseSAob24gYm9vdHVwKSBvciBvbiBhbiBhcyBuZWVkZWQgYmFzaXMuIEluCiAgICAgICAgICAgIGVpdGhlciBjYXNlLCBieSBkZWZhdWx0LCB0aGUgcGVybWlzc2lvbnMgd2lsbCBwcm9iYWJseSBiZQogICAgICAgICAgICBjb25maWd1cmVkIHNvIHRoYXQgdGhleSBsb29rIGxpa2U6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2M+PC9wcm9tcHQ+PHVzZXJpbnB1dD5scyAtbDwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD4tcnd4ci14ci14ICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0CiAgLXJ3eHIteHIteCAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAyNDUgT2N0IDEwIDE3OjU4IGNvbmZpZy5zeXMKICBkcnd4ci14ci14ICA0MSByb290ICAgICByb290ICAgICAgICAxNjM4NCBEZWMgMzAgIDE5OTggd2luZG93czwvY29tcHV0ZXJvdXRwdXQ+CiAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgd2hlcmUgYWxsIHRoZSBmaWxlcyBhcmUgb3duZWQgYnkgInJvb3QiLCBhcmUgaW4gdGhlICJyb290IgogICAgICAgICAgICBncm91cCBhbmQgYXJlIG9ubHkgd3JpdGFibGUgYnkgInJvb3QiCiAgICAgICAgICAgICg8bGl0ZXJhbD43NTU8L2xpdGVyYWw+IHBlcm1pc3Npb25zKS4gVGhpcyBpcyByZXN0cmljdGl2ZSBpbgogICAgICAgICAgICB0aGF0IGl0IHJlcXVpcmVzIHRoYXQgV2luZSBiZSBydW4gYXMgcm9vdCBpbiBvcmRlciBmb3IKICAgICAgICAgICAgcHJvZ3JhbXMgdG8gYmUgYWJsZSB0byB3cml0ZSB0byBhbnkgcGFydCBvZiB0aGUKICAgICAgICAgICAgZmlsZXN5c3RlbS4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBUaGVyZSBhcmUgdGhyZWUgbWFqb3IgYXBwcm9hY2hlcyB0byBvdmVyY29taW5nIHRoZSByZXN0cmljdGl2ZQogICAgICAgICAgICBwZXJtaXNzaW9ucyBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHBhcmFncmFwaDoKICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgUnVuIDxhcHBsaWNhdGlvbj5XaW5lPC9hcHBsaWNhdGlvbj4gYXMgcm9vdAogICAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgICAgTW91bnQgdGhlIEZBVCBmaWxlc3lzdGVtIHdpdGggbGVzcyByZXN0cmljdGl2ZQogICAgICAgICAgICAgICAgcGVybWlzc2lvbnMKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICAgIFNoYWRvdyB0aGUgRkFUIGZpbGVzeXN0ZW0gYnkgY29tcGxldGVseSBvciBwYXJ0aWFsbHkKICAgICAgICAgICAgICAgIGNvcHlpbmcgaXQKICAgICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8L29yZGVyZWRsaXN0PgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIEVhY2ggYXBwcm9hY2ggd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgoKICAgICAgICA8c2VjdDM+CiAgICAgICAgICA8dGl0bGU+UnVubmluZyBXaW5lIGFzIHJvb3Q8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFJ1bm5pbmcgV2luZSBhcyByb290IGlzIHRoZSBlYXNpZXN0IGFuZCBtb3N0IHRob3JvdWdoIHdheSBvZiBnaXZpbmcKICAgICAgICAgICAgcHJvZ3JhbXMgdGhhdCBXaW5lIHJ1bnMgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBGQVQgZmlsZXMgc3lzdGVtcy4KICAgICAgICAgICAgUnVubmluZyB3aW5lIGFzIHJvb3QgYWxzbyBhbGxvd3MgcHJvZ3JhbXMgdG8gZG8gdGhpbmdzIHVucmVsYXRlZAogICAgICAgICAgICB0byBGQVQgZmlsZXN5c3RlbXMsIHN1Y2ggYXMgbGlzdGVuaW5nIHRvIHBvcnRzIHRoYXQgYXJlIGxlc3MgdGhhbgogICAgICAgICAgICAxMDI0LiAgUnVubmluZyBXaW5lIGFzIHJvb3QgaXMgZGFuZ2Vyb3VzIHNpbmNlIHRoZXJlIGlzIG5vIGxpbWl0IHRvCiAgICAgICAgICAgIHdoYXQgdGhlIHByb2dyYW0gY2FuIGRvIHRvIHRoZSBzeXN0ZW0sIHNvIGl0J3MgPGVtcGhhc2lzPkhJR0hMWSBESVNDT1VSQUdFRDwvZW1waGFzaXM+LgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5Nb3VudGluZyBGQVQgZmlsZXN5c3RlbXM8L3RpdGxlPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIFRoZSBGQVQgZmlsZXN5c3RlbSBjYW4gYmUgbW91bnRlZCB3aXRoIHBlcm1pc3Npb25zIGxlc3MgcmVzdHJpY3RpdmUKICAgICAgICAgICAgdGhhbiB0aGUgZGVmYXVsdC4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgZWl0aGVyIGNoYW5naW5nIHRoZSB1c2VyIHRoYXQKICAgICAgICAgICAgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbSBvciBieSBleHBsaWNpdGx5IGNoYW5naW5nIHRoZSBwZXJtaXNzaW9ucwogICAgICAgICAgICB0aGF0IHRoZSBGQVQgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGguICBUaGUgcGVybWlzc2lvbnMgYXJlCiAgICAgICAgICAgIGluaGVyaXRlZCBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbS4gIFNpbmNlIHRoZQogICAgICAgICAgICBwcm9jZXNzIHRoYXQgbW91bnRzIHRoZSBGQVQgZmlsZXN5c3RlbSBpcyB1c3VhbGx5IGEgc3RhcnR1cCBzY3JpcHQKICAgICAgICAgICAgcnVubmluZyBhcyByb290IHRoZSBGQVQgZmlsZXN5c3RlbSBpbmhlcml0cyByb290J3MgcGVybWlzc2lvbnMuICBUaGlzCiAgICAgICAgICAgIHJlc3VsdHMgaW4gdGhlIGZpbGVzIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBoYXZpbmcgcGVybWlzc2lvbnMgc2ltaWxhcgogICAgICAgICAgICB0byBmaWxlcyBjcmVhdGVkIGJ5IHJvb3QuICBGb3IgZXhhbXBsZToKICAgICAgICAgIDwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0Pndob2FtaTwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD5yb290PC9jb21wdXRlcm91dHB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD50b3VjaCByb290X2ZpbGU8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5scyAtbCByb290X2ZpbGU8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+PC9jb21wdXRlcm91dHB1dD4tcnctci0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBEZWMgMTAgMDA6MjAgcm9vdF9maWxlCiAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgd2hpY2ggbWF0Y2hlcyB0aGUgb3duZXIsIGdyb3VwIGFuZCBwZXJtaXNzaW9ucyBvZiBmaWxlcyBzZWVuCiAgICAgICAgICAgIG9uIHRoZSBGQVQgZmlsZXN5c3RlbSBleGNlcHQgZm9yIHRoZSBtaXNzaW5nICd4J3MuICBUaGUKICAgICAgICAgICAgcGVybWlzc2lvbnMgb24gdGhlIEZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjaGFuZ2VkIGJ5IGNoYW5naW5nCiAgICAgICAgICAgIHJvb3QncyB1bWFzayAodW5zZXQgcGVybWlzc2lvbnMgYml0cykuICBGb3IgZXhhbXBsZToKICAgICAgICAgIDwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtb3VudCAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PnVtYXNrPC91c2VyaW5wdXQ+CiAgPGNvbXB1dGVyb3V0cHV0PjAyMjwvY29tcHV0ZXJvdXRwdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+dW1hc2sgMDczPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bW91bnQgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvYzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2M+PC9wcm9tcHQ+PHVzZXJpbnB1dD5scyAtbDwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD4tcnd4LS0tci0tICAgMSByb290ICAgICByb290ICAgICAgICAgICA5MSBPY3QgMTAgMTc6NTggYXV0b2V4ZWMuYmF0CiAgLXJ3eC0tLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAyNDUgT2N0IDEwIDE3OjU4IGNvbmZpZy5zeXMKICBkcnd4LS0tci0tICA0MSByb290ICAgICByb290ICAgICAgICAxNjM4NCBEZWMgMzAgIDE5OTggd2luZG93czwvY29tcHV0ZXJvdXRwdXQ+CiAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgTW91bnRpbmcgdGhlIEZBVCBmaWxlc3lzdGVtIHdpdGggYSB1bWFzayBvZgogICAgICAgICAgICA8bGl0ZXJhbD4wMDA8L2xpdGVyYWw+IGdpdmVzIGFsbCB1c2VycyBjb21wbGV0ZSBjb250cm9sIG92ZXIKICAgICAgICAgICAgaXQuIEV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIEZBVAogICAgICAgICAgICBmaWxlc3lzdGVtIHdoZW4gaXQgaXMgbW91bnRlZCBwcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRyb2wuCiAgICAgICAgICAgIFRoZXJlIGFyZSB0aHJlZSBtb3VudCBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIEZBVAogICAgICAgICAgICBwZXJtaXNzaW9uczogPGxpdGVyYWw+dWlkPC9saXRlcmFsPiwgPGxpdGVyYWw+Z2lkPC9saXRlcmFsPgogICAgICAgICAgICBhbmQgPGxpdGVyYWw+dW1hc2s8L2xpdGVyYWw+LiAgVGhleSBjYW4gZWFjaCBiZSBzcGVjaWZpZWQKICAgICAgICAgICAgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtYW51YWxseSBtb3VudGVkLiAgRm9yIGV4YW1wbGU6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD51bW91bnQgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5tb3VudCAtbyB1aWQ9NTAwIC1vIGdpZD01MDAgLW8gdW1hc2s9MDAyIC9jPC91c2VyaW5wdXQ+CiAgPHByb21wdD5+PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y2QgL2M8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi9jPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bHMgLWw8L3VzZXJpbnB1dD4KICA8Y29tcHV0ZXJvdXRwdXQ+LXJ3eHJ3eHIteCAgIDEgc2xlICAgICAgc2xlICAgICAgICAgICAgOTEgT2N0IDEwIDE3OjU4IGF1dG9leGVjLmJhdAogIC1yd3hyd3hyLXggICAxIHNsZSAgICAgIHNsZSAgICAgICAgICAgMjQ1IE9jdCAxMCAxNzo1OCBjb25maWcuc3lzCiAgZHJ3eHJ3eHIteCAgNDEgc2xlICAgICAgc2xlICAgICAgICAgMTYzODQgRGVjIDMwICAxOTk4IHdpbmRvd3M8L2NvbXB1dGVyb3V0cHV0PgogIDwvc2NyZWVuPgogICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgIHdoaWNoIGdpdmVzICJzbGUiIGNvbXBsZXRlIGNvbnRyb2wgb3ZlcgogICAgICAgICAgICA8ZmlsZW5hbWU+L2M8L2ZpbGVuYW1lPi4gIFRoZSBvcHRpb25zIGxpc3RlZCBhYm92ZSBjYW4gYmUKICAgICAgICAgICAgbWFkZSBwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZW0gdG8gdGhlCiAgICAgICAgICAgIDxmaWxlbmFtZT4vZXRjL2ZzdGFiPC9maWxlbmFtZT4gZmlsZToKICAgICAgICAgIDwvcGFyYT4KICA8c2NyZWVuPgogIDxwcm9tcHQ+fj48L3Byb21wdD48dXNlcmlucHV0PmdyZXAgL2MgL2V0Yy9mc3RhYjwvdXNlcmlucHV0PgogIDxjb21wdXRlcm91dHB1dD4vZGV2L2hkYTEgIC9jICB2ZmF0ICB1aWQ9NTAwLGdpZD01MDAsdW1hc2s9MDAyLGV4ZWMsZGV2LHN1aWQscncgMSAxPC9jb21wdXRlcm91dHB1dD4KICA8L3NjcmVlbj4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBOb3RlIHRoYXQgdGhlIHVtYXNrIG9mIDxsaXRlcmFsPjAwMjwvbGl0ZXJhbD4gaXMgY29tbW9uIGluCiAgICAgICAgICAgIHRoZSB1c2VyIHByaXZhdGUgZ3JvdXAgZmlsZSBwZXJtaXNzaW9uIHNjaGVtZS4gIE9uIEZBVCBmaWxlCiAgICAgICAgICAgIHN5c3RlbXMgdGhpcyB1bWFzayBhc3N1cmVzIHRoYXQgYWxsIGZpbGVzIGFyZSBmdWxseQogICAgICAgICAgICBhY2Nlc3NpYmxlIGJ5IGFsbCB1c2VycyBpbiB0aGUgc3BlY2lmaWVkIHVzZXIgZ3JvdXAKICAgICAgICAgICAgKDxsaXRlcmFsPmdpZDwvbGl0ZXJhbD4pLgogICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvc2VjdDM+CgogICAgICAgIDxzZWN0Mz4KICAgICAgICAgIDx0aXRsZT5TaGFkb3dpbmcgRkFUIGZpbGVzeXN0ZW1zPC90aXRsZT4KICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICBTaGFkb3dpbmcgcHJvdmlkZXMgYSBmaW5lciBncmFudWxhcml0eSBvZiBjb250cm9sLiAgUGFydHMgb2YKICAgICAgICAgICAgdGhlIG9yaWdpbmFsIEZBVCBmaWxlc3lzdGVtIGNhbiBiZSBjb3BpZWQgc28gdGhhdCB0aGUKICAgICAgICAgICAgcHJvZ3JhbSBjYW4gc2FmZWx5IHdvcmsgd2l0aCB0aG9zZSBjb3BpZWQgcGFydHMgd2hpbGUKICAgICAgICAgICAgdGhlIHByb2dyYW0gY29udGludWVzIHRvIGRpcmVjdGx5IHJlYWQgdGhlIHJlbWFpbmluZwogICAgICAgICAgICBwYXJ0cy4gIFRoaXMgaXMgZG9uZSB3aXRoIHN5bWJvbGljIGxpbmtzLiBGb3IgZXhhbXBsZSwKICAgICAgICAgICAgY29uc2lkZXIgYSBzeXN0ZW0gd2hlcmUgYSBwcm9ncmFtIG5hbWVkCiAgICAgICAgICAgIDxhcHBsaWNhdGlvbj5BbkFwcDwvYXBwbGljYXRpb24+IG11c3QgYmUgYWJsZSB0byByZWFkIGFuZAogICAgICAgICAgICB3cml0ZSB0byB0aGUgPGZpbGVuYW1lPmM6XHdpbmRvd3M8L2ZpbGVuYW1lPiBhbmQKICAgICAgICAgICAgPGZpbGVuYW1lPmM6XEFuQXBwPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgYXMgd2VsbCBhcyBoYXZlCiAgICAgICAgICAgIHJlYWQgYWNjZXNzIHRvIHRoZSBlbnRpcmUgRkFUIGZpbGVzeXN0ZW0uICBPbiB0aGlzIHN5c3RlbQogICAgICAgICAgICB0aGUgRkFUIGZpbGVzeXN0ZW0gaGFzIGRlZmF1bHQgcGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIG5vdAogICAgICAgICAgICBiZSBjaGFuZ2VkIGZvciBzZWN1cml0eSByZWFzb25zIG9yIGNhbiBub3QgYmUgY2hhbmdlZCBkdWUgdG8KICAgICAgICAgICAgbGFjayBvZiByb290IGFjY2Vzcy4gIE9uIHRoaXMgc3lzdGVtIGEgc2hhZG93IGRpcmVjdG9yeQogICAgICAgICAgICBtaWdodCBiZSBzZXQgdXAgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CiAgICAgICAgICA8L3BhcmE+CiAgPHNjcmVlbj4KICA8cHJvbXB0Pn4+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCAvPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vPjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bWtkaXIgY19zaGFkb3c8L3VzZXJpbnB1dD4KICA8cHJvbXB0Pi8+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jZCBjX3NoYWRvdzwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+bG4gLXMgL2NfLyogLjwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+cm0gd2luZG93cyBBbkFwcDwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+Y3AgLVIgL2NfL3t3aW5kb3dzLEFuQXBwfSAuPC91c2VyaW5wdXQ+CiAgPHByb21wdD4vY19zaGFkb3c+PC9wcm9tcHQ+PHVzZXJpbnB1dD5jaG1vZCAtUiA3Nzcgd2luZG93cyBBbkFwcDwvdXNlcmlucHV0PgogIDxwcm9tcHQ+L2Nfc2hhZG93PjwvcHJvbXB0Pjx1c2VyaW5wdXQ+cGVybCAtcCAtaSAtZSAnc3wvYyR8L2Nfc2hhZG93fGcnIH4vLndpbmUvY29uZmlnPC91c2VyaW5wdXQ+CiAgPC9zY3JlZW4+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBhYm92ZSBnaXZlcyBldmVyeW9uZSBjb21wbGV0ZSByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8KICAgICAgICAgIHRoZSA8ZmlsZW5hbWU+d2luZG93czwvZmlsZW5hbWU+IGFuZAogICAgICAgICAgPGZpbGVuYW1lPkFuQXBwPC9maWxlbmFtZT4gZGlyZWN0b3JpZXMgd2hpbGUgb25seSByb290IGhhcwogICAgICAgICAgd3JpdGUgYWNjZXNzIHRvIGFsbCBvdGhlciBkaXJlY3Rvcmllcy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L3NlY3QzPgogICAgICA8L3NlY3QyPgoKICAgICAgPHNlY3QyIGlkPSJjb25maWctZHJpdmUtY2Ryb20tbGFiZWxzIj4KCiAgICAgIDx0aXRsZT5Ecml2ZSBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzPC90aXRsZT4KICAgICAgPHBhcmE+CiAgICAgICAgVW50aWwgbm93LCB5b3VyIG9ubHkgcG9zc2liaWxpdHkgb2Ygc3BlY2lmeWluZyBkcml2ZSB2b2x1bWUKICAgICAgICBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIHdhcyB0byBzZXQgdGhlbSBtYW51YWxseSBpbiB0aGUgd2luZQogICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4gQnkgbm93LCB3aW5lIGNhbiByZWFkIHRoZW0gZGlyZWN0bHkgZnJvbSB0aGUKICAgICAgICBkZXZpY2UgYXMgd2VsbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBtYW55IFdpbiA5eCBnYW1lcyBvcgogICAgICAgIGZvciBzZXR1cCBwcm9ncmFtcyBkaXN0cmlidXRlZCBvbiBDRC1ST01zIHRoYXQgY2hlY2sgZm9yCiAgICAgICAgdm9sdW1lIGxhYmVsLgogICAgICA8L3BhcmE+CgogICAgICA8c2VjdDM+CiAgICAgICAgPHRpdGxlPldoYXQncyBTdXBwb3J0ZWQ/PC90aXRsZT4KCiAgICAgICAgPGluZm9ybWFsdGFibGUgZnJhbWU9ImFsbCI+CiAgICAgICAgICA8dGdyb3VwIGNvbHM9IjMiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgIAk8cm93PgogICAgICAJICA8ZW50cnk+RmlsZSBTeXN0ZW08L2VudHJ5PgogICAgICAJICA8ZW50cnk+VHlwZXM8L2VudHJ5PgogICAgICAJICA8ZW50cnk+Q29tbWVudDwvZW50cnk+CiAgICAgIAk8L3Jvdz4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAJPHJvdz4KICAgICAgCSAgPGVudHJ5PkZBVCBzeXN0ZW1zPC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PmhkLCBmbG9wcHk8L2VudHJ5PgogICAgICAJICA8ZW50cnk+cmVhZHMgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVyczwvZW50cnk+CiAgICAgIAk8L3Jvdz4KICAgICAgCTxyb3c+CiAgICAgIAkgIDxlbnRyeT5JU085NjYwPC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PmNkcm9tPC9lbnRyeT4KICAgICAgCSAgPGVudHJ5PnJlYWRzIGxhYmVscyBhbmQgc2VyaWFsIG51bWJlcnMgKG5vdCBtaXhlZC1tb2RlIENEcyB5ZXQhKTwvZW50cnk+CiAgICAgIAk8L3Jvdz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGdyb3VwPgogICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KCiAgICAgIDwvc2VjdDM+CgogICAgICA8c2VjdDM+CiAgICAgICAgPHRpdGxlPkhvdyBUbyBTZXQgVXA/PC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFJlYWRpbmcgbGFiZWxzIGFuZCBzZXJpYWwgbnVtYmVycyBqdXN0IHdvcmtzIGF1dG9tYXRpY2FsbHkKICAgICAgICAgIGlmIHlvdSBzcGVjaWZ5IGEgPGxpdGVyYWw+IkRldmljZSIgPTwvbGl0ZXJhbD4gbGluZSBpbiB0aGUKICAgICAgICAgIFtEcml2ZSB4XSBzZWN0aW9uIGluIHlvdXIgPGZpbGVuYW1lPn4vLndpbmUvY29uZmlnPC9maWxlbmFtZT4uCiAgICAgICAgICBOb3RlIHRoYXQgdGhlIGRldmljZSBoYXMgdG8gZXhpc3QgYW5kIG11c3QgYmUgYWNjZXNzaWJsZSBieSB0aGUgdXNlcgogICAgICAgICAgcnVubmluZyBXaW5lIGlmIHlvdSBkbyB0aGlzLCB0aG91Z2guCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgeW91IGRvbid0IHdhbnQgdG8gcmVhZCBsYWJlbHMgYW5kIHNlcmlhbCBudW1iZXJzIGRpcmVjdGx5IGZyb20KICAgICAgICAgIHRoZSBkZXZpY2UsIHRoZW4geW91IHNob3VsZCBnaXZlIGZpeGVkCiAgICAgICAgICA8bGl0ZXJhbD4iTGFiZWwiID08L2xpdGVyYWw+IG9yIDxsaXRlcmFsPiJTZXJpYWwiID08L2xpdGVyYWw+CiAgICAgICAgICBlbnRyaWVzIGluIDxmaWxlbmFtZT5+Ly53aW5lL2NvbmZpZzwvZmlsZW5hbWU+LCBhcyBXaW5lIHJldHVybnMKICAgICAgICAgIHRoZXNlIGVudHJpZXMgaW5zdGVhZCBpZiBubyBkZXZpY2UgaXMgZ2l2ZW4uIElmIHRoZXkgZG9uJ3QKICAgICAgICAgIGV4aXN0LCB0aGVuIFdpbmUgd2lsbCByZXR1cm4gZGVmYXVsdCB2YWx1ZXMgKGxhYmVsCiAgICAgICAgICA8bGl0ZXJhbD5Ecml2ZSBYPC9saXRlcmFsPiBhbmQgc2VyaWFsCiAgICAgICAgICA8bGl0ZXJhbD4xMjM0NTY3ODwvbGl0ZXJhbD4pLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIElmIHlvdSB3YW50IHRvIGdpdmUgYSA8bGl0ZXJhbD4iRGV2aWNlIiA9PC9saXRlcmFsPiBlbnRyeQogICAgICAgICAgPGVtcGhhc2lzPm9ubHk8L2VtcGhhc2lzPiBmb3IgZHJpdmUgcmF3IHNlY3RvciBhY2Nlc3NlcywKICAgICAgICBidXQgbm90IGZvciByZWFkaW5nIHRoZSB2b2x1bWUgaW5mbyBmcm9tIHRoZSBkZXZpY2UgKGkuZS4geW91IHdhbnQKICAgICAgICBhIDxlbXBoYXNpcz5maXhlZDwvZW1waGFzaXM+LCBwcmVjb25maWd1cmVkIGxhYmVsKSwgeW91IG5lZWQKICAgICAgICAgIHRvIHNwZWNpZnkgPGxpdGVyYWw+IlJlYWRWb2xJbmZvIiA9ICIwIjwvbGl0ZXJhbD4gdG8gdGVsbCBXaW5lCiAgICAgICAgICB0byBza2lwIHRoZSB2b2x1bWUgcmVhZGluZy4KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDM+CgogICAgICA8c2VjdDM+CiAgICAgICAgPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIENELVJPTSBhbmQgZmxvcHB5OyBsYWJlbHMgd2lsbCBiZQogICAgICAgICAgcmVhZCBmcm9tIHRoZSBkZXZpY2Ugb24gYm90aCBDRC1ST00gYW5kIGZsb3BweTsgc2VyaWFsCiAgICAgICAgICBudW1iZXJzIG9uIGZsb3BweSBvbmx5OgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+CltEcml2ZSBBXQoiUGF0aCIgPSAiL21udC9mbG9wcHkiCiJUeXBlIiA9ICJmbG9wcHkiCiJEZXZpY2UiID0gIi9kZXYvZmQwIgoiRmlsZXN5c3RlbSIgPSAibXNkb3MiCgpbRHJpdmUgUl0KIlBhdGgiID0gIi9tbnQvY2Ryb20iCiJUeXBlIiA9ICJjZHJvbSIKIkRldmljZSIgPSAiL2Rldi9oZGExIgoiRmlsZXN5c3RlbSIgPSAid2luOTUiCiAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgICA8cGFyYT4KICAgICAgICAgIEhlcmUncyBhbiBleGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIENELVJPTSBsYWJlbDoKICAgICAgICA8L3BhcmE+CiAgICAgICAgPHByb2dyYW1saXN0aW5nPgpbRHJpdmUgSl0KIlBhdGgiID0gIi9tbnQvY2Ryb20iCiJUeXBlIiA9ICJjZHJvbSIKIkxhYmVsIiA9ICJYMjM0R0NEU0UiCjsgbm90ZSB0aGF0IHRoZSBkZXZpY2UgaXNuJ3QgcmVhbGx5IG5lZWRlZCBoZXJlIGFzIHdlIGhhdmUgYSBmaXhlZCBsYWJlbAoiRGV2aWNlIiA9ICIvZGV2L2Nkcm9tIgoiRmlsZXN5c3RlbSIgPSAibXNkb3MiCiAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KICAgICAgPC9zZWN0Mz4KCiAgICAgIDxzZWN0Mz4KICAgICAgICA8dGl0bGU+VG9kbyAvIE9wZW4gSXNzdWVzPC90aXRsZT4KICAgICAgICA8aXRlbWl6ZWRsaXN0PgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCVRoZSBDRC1ST00gbGFiZWwgY2FuIGJlIHJlYWQgb25seSBpZiB0aGUgZGF0YSB0cmFjayBvZgogICAgICAJdGhlIGRpc2sgcmVzaWRlcyBpbiB0aGUgZmlyc3QgdHJhY2sgYW5kIHRoZSBjZHJvbSBpcwogICAgICAJaXNvOTY2MC4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCUJldHRlciBjaGVja2luZyBmb3IgRkFUIHN1cGVyYmxvY2sgKGl0IG5vdyBjaGVja3Mgb25seQogICAgICAJb25lIGJ5dGUpLiA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KICAgICAgCVN1cHBvcnQgZm9yIGxhYmVscy9zZXJpYWwgbnVtcyBXUklUSU5HLgogICAgICAgICAgICA8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+IDxwYXJhPgogICAgICAJQ2FuIHRoZSBsYWJlbCBiZSBsb25nZXIgdGhhbiAxMSBjaGFycz8gKGlzbzk2NjAgaGFzIDMyCiAgICAgIAljaGFycykuCiAgICAgICAgICAgIDwvcGFyYT4gPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CiAgICAgIAlXaGF0IGFib3V0IHJlYWRpbmcgZXh0MiB2b2x1bWUgbGFiZWw/IC4uLi4KICAgICAgICAgICAgPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QzPgogICAgPC9zZWN0Mj4KICA8L3NlY3QxPgoKICAmcmVnaXN0cnk7Cgo8c2VjdDEgaWQ9ImNvbmZpZy1kbGwiPgo8dGl0bGU+RExMIGNvbmZpZ3VyYXRpb248L3RpdGxlPgoKPHNlY3QyPgo8dGl0bGU+SW50cm9kdWN0aW9uPC90aXRsZT4KPHBhcmE+CiAgSWYgeW91ciBwcm9ncmFtcyBkb24ndCB3b3JrIGFzIGV4cGVjdGVkLCB0aGVuIGl0J3Mgb2Z0ZW4gYmVjYXVzZSBvbmUKICBETEwgb3IgYW5vdGhlciBpcyBmYWlsaW5nLiBUaGlzIGNhbiBvZnRlbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZwogIGNlcnRhaW4gRExMcyBmcm9tIFdpbmUgYnVpbHQtaW4gdG8gbmF0aXZlIFdpbmRvd3MgRExMIGZpbGUgYW5kIHZpY2UKICB2ZXJzYS4KPC9wYXJhPgo8cGFyYT4KICBBIHZlcnkgdXNlZnVsIGhlbHAgdG8gZmluZCBvdXQgd2hpY2ggRExMcyBhcmUgbG9hZGVkIGFzIGJ1aWx0LWluIGFuZAogIHdoaWNoIGFyZSBsb2FkZWQgYXMgbmF0aXZlIFdpbmRvd3MgZmlsZSBjYW4gYmUgdGhlIGRlYnVnIGNoYW5uZWwKICBsb2FkZGxsLCBhY3RpdmF0ZWQgdmlhIHRoZSBXaW5lIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKICA8Y29tbWFuZD4tLWRlYnVnbXNnICtsb2FkZGxsPC9jb21tYW5kPi4KPC9wYXJhPgo8L3NlY3QyPgoKPHNlY3QyPgo8IS0tIEZJWE1FIGludHJvISEhIC0tPgo8dGl0bGU+SW50cm9kdWN0aW9uIFRvIERMTCBTZWN0aW9uczwvdGl0bGU+CjxwYXJhPgogIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byBrbm93IGJlZm9yZQogIGNvbmZpZ3VyaW5nIHRoZSBETEwgc2VjdGlvbnMgaW4geW91ciB3aW5lIGNvbmZpZ3VyYXRpb24KICBmaWxlLgo8L3BhcmE+CjxzZWN0Mz4KICA8dGl0bGU+V2luZG93cyBETEwgUGFpcnM8L3RpdGxlPgogIDxwYXJhPgogICAgTW9zdCB3aW5kb3dzIERMTCdzIGhhdmUgYSB3aW4xNiAoV2luZG93cyAzLngpIGFuZCB3aW4zMgogICAgKFdpbmRvd3MgOXgvTlQpIGZvcm0uICBUaGUgY29tYmluYXRpb24gb2YgdGhlIHdpbjE2IGFuZAogICAgd2luMzIgRExMIHZlcnNpb25zIGFyZSBjYWxsZWQgdGhlICJETEwgcGFpciIuIFRoaXMgaXMgYQogICAgbGlzdCBvZiB0aGUgbW9zdCBjb21tb24gcGFpcnM6CiAgPC9wYXJhPgoKICA8aW5mb3JtYWx0YWJsZT4KICAgIDx0Z3JvdXAgY29scz0iMyI+CiAgICAgIDx0aGVhZD4KCTxyb3c+CgkgIDxlbnRyeT5XaW4xNjwvZW50cnk+CgkgIDxlbnRyeT5XaW4zMjwvZW50cnk+CgkgIDxlbnRyeT4KCSAgICBOYXRpdmUKCSAgICA8Zm9vdG5vdGU+CgkgICAgICA8cGFyYT4KCQlJcyBpdCBwb3NzaWJsZSB0byB1c2UgbmF0aXZlIERMTCB3aXRoIHdpbmU/CgkJKFNlZSBuZXh0IHNlY3Rpb24pCgkgICAgICA8L3BhcmE+CgkgICAgPC9mb290bm90ZT4KCSAgPC9lbnRyeT4KCTwvcm93PgogICAgICA8L3RoZWFkPgogICAgICA8dGJvZHk+Cgk8cm93PgoJICA8ZW50cnk+S0VSTkVMPC9lbnRyeT4KCSAgPGVudHJ5PktFUk5FTDMyPC9lbnRyeT4KCSAgPGVudHJ5Pk5vITwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5VU0VSPC9lbnRyeT4KCSAgPGVudHJ5PlVTRVIzMjwvZW50cnk+CgkgIDxlbnRyeT5ObyE8L2VudHJ5PgoJPC9yb3c+Cgk8cm93PgoJICA8ZW50cnk+U0hFTEw8L2VudHJ5PgoJICA8ZW50cnk+U0hFTEwzMjwvZW50cnk+CgkgIDxlbnRyeT5ZZXM8L2VudHJ5PgoJPC9yb3c+Cgk8cm93PgoJICA8ZW50cnk+R0RJPC9lbnRyeT4KCSAgPGVudHJ5PkdESTMyPC9lbnRyeT4KCSAgPGVudHJ5Pk5vITwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5DT01NRExHPC9lbnRyeT4KCSAgPGVudHJ5PkNPTURMRzMyPC9lbnRyeT4KCSAgPGVudHJ5PlllczwvZW50cnk+Cgk8L3Jvdz4KCTxyb3c+CgkgIDxlbnRyeT5WRVI8L2VudHJ5PgoJICA8ZW50cnk+VkVSU0lPTjwvZW50cnk+CgkgIDxlbnRyeT5ZZXM8L2VudHJ5PgoJPC9yb3c+CiAgICAgIDwvdGJvZHk+CiAgICA8L3Rncm91cD4KICA8L2luZm9ybWFsdGFibGU+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPkRpZmZlcmVudCBGb3JtcyBPZiBETEwnczwvdGl0bGU+CiAgPHBhcmE+CiAgICBUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IGZvcm1zIG9mIERMTCdzIHdpbmUgY2FuIGxvYWQ6CiAgICA8dmFyaWFibGVsaXN0PgogICAgICA8dmFybGlzdGVudHJ5PgoJPHRlcm0+bmF0aXZlPC90ZXJtPgoJPGxpc3RpdGVtPjxwYXJhPgoJICAgIFRoZSBETEwncyB0aGF0IGFyZSBpbmNsdWRlZCB3aXRoIHdpbmRvd3MuIE1hbnkKCSAgICB3aW5kb3dzIERMTCdzIGNhbiBiZSBsb2FkZWQgaW4gdGhlaXIgbmF0aXZlCgkgICAgZm9ybS4gTWFueSB0aW1lcyB0aGVzZSBuYXRpdmUgdmVyc2lvbnMgd29yawoJICAgIGJldHRlciB0aGFuIHRoZWlyIG5vbi1NaWNyb3NvZnQgZXF1aXZhbGVudCAtLQoJICAgIG90aGVyIHRpbWVzIHRoZXkgZG9uJ3QuCgkgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPHZhcmxpc3RlbnRyeT4KCTx0ZXJtPmJ1aWx0aW48L3Rlcm0+Cgk8bGlzdGl0ZW0+PHBhcmE+CgkgICAgVGhlIG1vc3QgY29tbW9uIGZvcm0gb2YgRExMIGxvYWRpbmcuIFRoaXMgaXMKCSAgICB3aGF0IHlvdSB3aWxsIHVzZSBpZiB0aGUgRExMIGlzIHRvbyBzeXN0ZW0tc3BlY2lmaWMKCSAgICAgIG9yIGVycm9yLXByb25lIGluIG5hdGl2ZSBmb3JtIChLRVJORUwgZm9yIGV4YW1wbGUpLAoJICAgICAgeW91IGRvbid0IGhhdmUgdGhlIG5hdGl2ZSBETEwsIG9yIHlvdSBqdXN0IHdhbnQgdG8gYmUKCSAgICBNaWNyb3NvZnQtZnJlZS4KCSAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8dmFybGlzdGVudHJ5PgoJPHRlcm0+c288L3Rlcm0+Cgk8bGlzdGl0ZW0+PHBhcmE+CgkgICAgTmF0aXZlIEVMRiBsaWJyYXJpZXMuIEhhcyBiZWVuIGRlcHJlY2F0ZWQsIGlnbm9yZWQuCgkgIDwvcGFyYT48L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPHZhcmxpc3RlbnRyeT4KCTx0ZXJtPmVsZmRsbDwvdGVybT4KCTxsaXN0aXRlbT48cGFyYT4KCSAgICBFTEYgZW5jYXBzdWxhdGVkIHdpbmRvd3MgRExMJ3MuCgkgICAgICBObyBsb25nZXIgdXNlZCwgaWdub3JlZC4KCSAgPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9wYXJhPgo8L3NlY3QzPgo8L3NlY3QyPgoKPHNlY3QyIGlkPSJjb25maWctZGxsLW92ZXJyaWRlcyI+Cjx0aXRsZT5ETEwgT3ZlcnJpZGVzPC90aXRsZT4KCjxwYXJhPgogIFRoZSB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBkaXJlY3RpdmVzIFtEbGxEZWZhdWx0c10KICBhbmQgW0RsbE92ZXJyaWRlc10gYXJlIHRoZSBzdWJqZWN0IG9mIHNvbWUgY29uZnVzaW9uLiBUaGUKICBvdmVyYWxsIHB1cnBvc2Ugb2YgbW9zdCBvZiB0aGVzZSBkaXJlY3RpdmVzIGFyZSBjbGVhciBlbm91Z2gsCiAgdGhvdWdoIC0gZ2l2ZW4gYSBjaG9pY2UsIHNob3VsZCBXaW5lIHVzZSBpdHMgb3duIGJ1aWx0LWluCiAgRExMcywgb3Igc2hvdWxkIGl0IHVzZSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGVzIGZvdW5kCiAgaW4gYW4gZXhpc3RpbmcgV2luZG93cyBpbnN0YWxsYXRpb24/IFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMKICBob3cgdGhpcyBmZWF0dXJlIHdvcmtzLgo8L3BhcmE+Cgo8c2VjdDM+CiAgPHRpdGxlPkRMTCB0eXBlczwvdGl0bGU+CiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm5hdGl2ZTwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQSAibmF0aXZlIiBETEwgaXMgYSA8ZmlsZW5hbWU+LkRMTDwvZmlsZW5hbWU+IGZpbGUKCSAgd3JpdHRlbiBmb3IgdGhlIHJlYWwgTWljcm9zb2Z0IFdpbmRvd3MuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmJ1aWx0aW48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEEgImJ1aWx0LWluIiBETEwgaXMgYSBXaW5lIERMTC4gVGhlc2UgY2FuIGVpdGhlciBiZSBhCgkgIHBhcnQgb2YgPGZpbGVuYW1lPmxpYndpbmUuc288L2ZpbGVuYW1lPiwgb3IgbW9yZQoJICByZWNlbnRseSwgaW4gYSBzcGVjaWFsIDxmaWxlbmFtZT4uc288L2ZpbGVuYW1lPiBmaWxlCgkgIHRoYXQgV2luZSBpcyBhYmxlIHRvIGxvYWQgb24gZGVtYW5kLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPlRoZSBbRGxsRGVmYXVsdHNdIHNlY3Rpb248L3RpdGxlPgogIDx2YXJpYWJsZWxpc3Q+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EZWZhdWx0TG9hZE9yZGVyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBUaGlzIHNwZWNpZmllcyBpbiB3aGF0IG9yZGVyIFdpbmUgc2hvdWxkIHNlYXJjaCBmb3IKCSAgYXZhaWxhYmxlIERMTCB0eXBlcywgaWYgdGhlIERMTCBpbiBxdWVzdGlvbiB3YXMgbm90CgkgIGZvdW5kIGluIHRoZSBbRGxsT3ZlcnJpZGVzXSBzZWN0aW9uLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cgo8c2VjdDM+CiAgPHRpdGxlPlRoZSBbRGxsUGFpcnNdIHNlY3Rpb248L3RpdGxlPgogIDxwYXJhPgogICAgQXQgb25lIHRpbWUsIHRoZXJlIHdhcyBhIHNlY3Rpb24gY2FsbGVkIFtEbGxQYWlyc10gaW4gdGhlCiAgICBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZSwgYnV0IHRoaXMgaGFzIGJlZW4gb2Jzb2xldGVkCiAgICBiZWNhdXNlIHRoZSBwYWlyaW5nIGluZm9ybWF0aW9uIGhhcyBub3cgYmVlbiBlbWJlZGRlZCBpbnRvCiAgICBXaW5lIGl0c2VsZi4gKFRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB3YXMgbWVyZWx5IHRvIGJlCiAgICBhYmxlIHRvIGlzc3VlIHdhcm5pbmdzIGlmIHRoZSB1c2VyIGF0dGVtcHRlZCB0byBwYWlyCiAgICBjb2RlcGVuZGVudCAxNi1iaXQvMzItYml0IERMTHMgb2YgZGlmZmVyZW50IHR5cGVzLikgSWYgeW91CiAgICBzdGlsbCBoYXZlIHRoaXMgaW4geW91ciA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBvcgogICAgPGZpbGVuYW1lPndpbmUuY29uZjwvZmlsZW5hbWU+LCB5b3UgbWF5IHNhZmVseSBkZWxldGUgaXQuCiAgPC9wYXJhPgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW0RsbE92ZXJyaWRlc10gc2VjdGlvbjwvdGl0bGU+CiAgPHBhcmE+CiAgICBUaGlzIHNlY3Rpb24gc3BlY2lmaWVzIGhvdyB5b3Ugd2FudCBzcGVjaWZpYyBETExzIHRvIGJlCiAgICBoYW5kbGVkLCBpbiBwYXJ0aWN1bGFyIHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlICJuYXRpdmUiIERMTHMKICAgIG9yIG5vdCwgaWYgeW91IGhhdmUgc29tZSBmcm9tIGEgcmVhbCBXaW5kb3dzIGNvbmZpZ3VyYXRpb24uCiAgICBCZWNhdXNlIGJ1aWx0LWlucyBkbyBub3QgbWl4IHNlYW1sZXNzbHkgd2l0aCBuYXRpdmUgRExMcyB5ZXQsCiAgICBjZXJ0YWluIERMTCBkZXBlbmRlbmNpZXMgbWF5IGJlIHByb2JsZW1hdGljLCBidXQgd29ya2Fyb3VuZHMKICAgIGV4aXN0IGluIFdpbmUgZm9yIG1hbnkgcG9wdWxhciBETEwgY29uZmlndXJhdGlvbnMuIEFsc28gc2VlCiAgICBXV04ncyBbMTZdU3RhdHVzIFBhZ2UgdG8gZmlndXJlIG91dCBob3cgd2VsbCB5b3VyIGZhdm9yaXRlCiAgICBETEwgaXMgaW1wbGVtZW50ZWQgaW4gV2luZS4KICA8L3BhcmE+CiAgPHBhcmE+CiAgICBJdCBpcyBvZiBjb3Vyc2UgYWxzbyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyBieQogICAgZXhwbGljaXRseSB1c2luZyBXaW5lJ3MgPHBhcmFtZXRlcj4tLWRsbDwvcGFyYW1ldGVyPgogICAgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscykuICBTb21lCiAgICBoaW50cyBmb3IgY2hvb3NpbmcgeW91ciBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gKGxpc3RlZCBieQogICAgMTYvMzItYml0IERMTCBwYWlyKToKICA8L3BhcmE+CiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmtybmwzODYsIGtlcm5lbDMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBOYXRpdmUgdmVyc2lvbnMgb2YgdGhlc2Ugd2lsbCBuZXZlciB3b3JrLCBzbyBkb24ndCB0cnkuIExlYXZlCgkgIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5nZGksIGdkaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBHcmFwaGljcyBEZXZpY2UgSW50ZXJmYWNlLiBObyBlZmZvcnQgaGFzIGJlZW4gbWFkZSBhdCB0cnlpbmcgdG8KCSAgcnVuIG5hdGl2ZSBHREkuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT51c2VyLCB1c2VyMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbmRvdyBtYW5hZ2VtZW50IGFuZCBzdGFuZGFyZCBjb250cm9scy4gSXQgd2FzCgkgIHBvc3NpYmxlIHRvIHVzZSBXaW45NSdzIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbnMgYXQgc29tZSBwb2ludCAoaWYgYWxsIG90aGVyIERMTHMgdGhhdCBkZXBlbmQKCSAgb24gaXQsIHN1Y2ggYXMgY29tY3RsMzIgYW5kIGNvbWRsZzMyLCB3ZXJlIGFsc28gcnVuCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4pLiBIb3dldmVyLCB0aGlzIGlzIG5vIGxvbmdlcgoJICBwb3NzaWJsZSBhZnRlciB0aGUgQWRkcmVzcyBTcGFjZSBTZXBhcmF0aW9uLCBzbyBsZWF2ZQoJICBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bnRkbGw8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIE5UIGtlcm5lbCBBUEkuIEFsdGhvdWdoIGJhZGx5IGRvY3VtZW50ZWQsIHRoZQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gb2YgdGhpcyB3aWxsIG5ldmVyCgkgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT53MzJza3JubDwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgV2luMzJzIChmb3IgV2luMy54KS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyIHdvcmsuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT53b3czMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgV2luMTYgc3VwcG9ydCBsaWJyYXJ5IGZvciBOVC4gVGhlCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiB3aWxsIHByb2JhYmx5IG5ldmVyCgkgIHdvcmsuIExlYXZlIGF0IDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5zeXN0ZW08L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbjE2IGtlcm5lbCBzdHVmZi4gV2lsbCBuZXZlciB3b3JrCgkgIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4uIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kaXNwbGF5PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBEaXNwbGF5IGRyaXZlci4gRGVmaW5pdGVseSBsZWF2ZSBhdCA8bGl0ZXJhbD5idWlsdGluPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+dG9vbGhlbHA8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFRvb2wgaGVscGVyIHJvdXRpbmVzLiBUaGlzIGlzIHJhcmVseSBhIHNvdXJjZSBvZiBwcm9ibGVtcy4KCSAgTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPnZlciwgdmVyc2lvbjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgVmVyc2lvbmluZy4gU2VsZG9tIHVzZWZ1bCB0byBtZXNzIHdpdGguCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmFkdmFwaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBSZWdpc3RyeSBhbmQgc2VjdXJpdHkgZmVhdHVyZXMuIFRyeWluZyB0aGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIG9mIHRoaXMgbWF5IG9yIG1heQoJICBub3Qgd29yay4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+Y29tbWRsZywgY29tZGxnMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIENvbW1vbiBEaWFsb2dzLCBzdWNoIGFzIGNvbG9yIHBpY2tlciwgZm9udCBkaWFsb2csCgkgIHByaW50IGRpYWxvZywgb3Blbi9zYXZlIGRpYWxvZywgZXRjLiBJdCBpcyBzYWZlIHRvIHRyeQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5jb21tY3RybCwgY29tY3RsMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIENvbW1vbiBDb250cm9scy4gVGhpcyBpcyB0b29sYmFycywgc3RhdHVzIGJhcnMsIGxpc3QgY29udHJvbHMsCgkgIHRoZSB3b3Jrcy4gSXQgaXMgc2FmZSB0byB0cnkgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+c2hlbGwsIHNoZWxsMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFNoZWxsIGludGVyZmFjZSAoZGVza3RvcCwgZmlsZXN5c3RlbSwgZXRjKS4gQmVpbmcgb25lIG9mIHRoZQoJICBtb3N0IHVuZG9jdW1lbnRlZCBwaWVjZXMgb2YgV2luZG93cywgeW91IG1heSBoYXZlIGx1Y2sgd2l0aCB0aGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uLCBzaG91bGQgeW91IG5lZWQgaXQuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbnNvY2ssIHdzb2NrMzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdpbmRvd3MgU29ja2V0cy4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbgoJICB3aWxsIG5vdCB3b3JrIHVuZGVyIFdpbmUsIHNvIGxlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5pY21wPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBJQ01QIHJvdXRpbmVzIGZvciB3c29jazMyLiBBcyB3aXRoIHdzb2NrMzIsIGxlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tcHI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24gbWF5IG5vdCB3b3JrIGR1ZQoJICB0byB0aHVua2luZyBpc3N1ZXMuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5semV4cGFuZCwgbHozMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgTGVtcGVsLVppdiBkZWNvbXByZXNzaW9uLiBXaW5lJ3MKCSAgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4gdmVyc2lvbiBvdWdodCB0byB3b3JrIGZpbmUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbmFzcGksIHduYXNwaTMyPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBBZHZhbmNlZCBTQ1NJIFBlcmlwaGVyYWwgSW50ZXJmYWNlLiBUaGUKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uIHdpbGwgcHJvYmFibHkgbmV2ZXIKCSAgd29yay4gTGVhdmUgYXQgPGxpdGVyYWw+YnVpbHRpbjwvbGl0ZXJhbD4uCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPmNydGRsbDwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQyBSdW50aW1lIGxpYnJhcnkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+CgkgIHZlcnNpb24gd2lsbCBlYXNpbHkgd29yayBiZXR0ZXIgdGhhbiBXaW5lJ3Mgb24gdGhpcwoJICBvbmUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPndpbnNwb29sLmRydjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgUHJpbnRlciBzcG9vbGVyLiBZb3UgYXJlIG5vdCBsaWtlbHkgdG8gaGF2ZSBtb3JlIGx1Y2sKCSAgd2l0aCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kZHJhdzwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgRGlyZWN0RHJhdy9EaXJlY3QzRC4gU2luY2UgV2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlCgkgIERpcmVjdFggSEFMLCB0aGUgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiB2ZXJzaW9uCgkgIHdpbGwgbm90IHdvcmsgYXQgdGhpcyB0aW1lLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kaW5wdXQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdElucHV0LiBSdW5uaW5nIHRoaXMgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPgoJICBtYXkgb3IgbWF5IG5vdCB3b3JrLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kc291bmQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdFNvdW5kLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gcnVuIHRoaXMKCSAgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPiwgYnV0IGRvbid0IGNvdW50IG9uIGl0LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5kcGxheS9kcGxheXg8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIERpcmVjdFBsYXkuIFRoZSA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+IHZlcnNpb24KCSAgb3VnaHQgdG8gd29yayBiZXN0IG9uIHRoaXMsIGlmIGF0IGFsbC4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bW1zeXN0ZW0sIHdpbm1tPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNdWx0aW1lZGlhIHN5c3RlbS4gVGhlIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4KCSAgdmVyc2lvbiBpcyBub3QgbGlrZWx5IHRvIHdvcmsuIExlYXZlIGF0CgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tc2FjbSwgbXNhY20zMjwvdGVybT4KICAgICAgPGxpc3RpdGVtPiA8cGFyYT4KCSAgQXVkaW8gQ29tcHJlc3Npb24gTWFuYWdlci4gVGhlCgkgIDxsaXRlcmFsPmJ1aWx0aW48L2xpdGVyYWw+IHZlcnNpb24gd29ya3MgYmVzdCwgaWYgeW91CgkgIHNldCBtc2FjbS5kcnYgdG8gdGhlIHNhbWUuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1zdmlkZW8sIG1zdmZ3MzI8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFZpZGVvIGZvciBXaW5kb3dzLiBJdCBpcyBzYWZlIChhbmQgcmVjb21tZW5kZWQpIHRvIHRyeQoJICA8bGl0ZXJhbD5uYXRpdmU8L2xpdGVyYWw+LgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tY2ljZGEuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBDRCBBdWRpbyBNQ0kgZHJpdmVyLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tY2lzZXEuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNSURJIFNlcXVlbmNlciBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+Lk1JRDwvZmlsZW5hbWU+CgkgIHBsYXliYWNrKS4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bWNpd2F2ZS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIFdhdmUgYXVkaW8gTUNJIGRyaXZlciAoPGZpbGVuYW1lPi5XQVY8L2ZpbGVuYW1lPiBwbGF5YmFjaykuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1jaWF2aS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEFWSSBNQ0kgZHJpdmVyICg8ZmlsZW5hbWU+LkFWSTwvZmlsZW5hbWU+IHZpZGVvCgkgIHBsYXliYWNrKS4gQmVzdCB0byB1c2UgPGxpdGVyYWw+bmF0aXZlPC9saXRlcmFsPi4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+bWNpYW5pbS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEFuaW1hdGlvbiBNQ0kgZHJpdmVyLgoJPC9wYXJhPiA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5tc2FjbS5kcnY8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4gPHBhcmE+CgkgIEF1ZGlvIENvbXByZXNzaW9uIE1hbmFnZXIuIFNldCB0byBzYW1lIGFzIG1zYWNtMzIuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPm1pZGltYXAuZHJ2PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBNSURJIE1hcHBlci4KCTwvcGFyYT4gPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+d3Byb2NzPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+IDxwYXJhPgoJICBUaGlzIGlzIGEgcHNldWRvLURMTCB1c2VkIGJ5IFdpbmUgZm9yIHRodW5raW5nCgkgIHB1cnBvc2VzLiBBIDxsaXRlcmFsPm5hdGl2ZTwvbGl0ZXJhbD4gdmVyc2lvbiBvZiB0aGlzCgkgIGRvZXNuJ3QgZXhpc3QuCgk8L3BhcmE+IDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICA8L3ZhcmlhYmxlbGlzdD4KPC9zZWN0Mz4KPC9zZWN0Mj4KCjxzZWN0MiBpZD0iY29uZmlnLXN5c3RlbS1kbGxzIj4KPHRpdGxlPlN5c3RlbSBETExzPC90aXRsZT4KPHBhcmE+CiAgVGhlIFdpbmUgdGVhbSBoYXMgZGV0ZXJtaW5lZCB0aGF0IGl0IGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUKICBmYWtlIERMTCBmaWxlcyB0byB0cmljayBtYW55IHByb2dyYW1zIHRoYXQgY2hlY2sgZm9yCiAgZmlsZSBleGlzdGVuY2UgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGZlYXR1cmUKICAoc3VjaCBhcyBXaW5zb2NrIGFuZCBpdHMgVENQL0lQIG5ldHdvcmtpbmcpIGlzIGF2YWlsYWJsZS4gSWYKICB0aGlzIGlzIGEgcHJvYmxlbSBmb3IgeW91LCB5b3UgY2FuIGNyZWF0ZSBlbXB0eSBmaWxlcyBpbiB0aGUKICBjb25maWd1cmVkIDxmaWxlbmFtZT5jOlx3aW5kb3dzXHN5c3RlbTwvZmlsZW5hbWU+IGRpcmVjdG9yeQogIHRvIG1ha2UgdGhlIHByb2dyYW0gdGhpbmsgaXQncyB0aGVyZSwgYW5kIFdpbmUncyBidWlsdC1pbiBETEwKICB3aWxsIGJlIGxvYWRlZCB3aGVuIHRoZSBwcm9ncmFtIGFjdHVhbGx5IGFza3MgZm9yIGl0LgogIChVbmZvcnR1bmF0ZWx5LCA8ZmlsZW5hbWU+dG9vbHMvd2luZWluc3RhbGw8L2ZpbGVuYW1lPiBkb2VzCiAgbm90IGNyZWF0ZSBzdWNoIGVtcHR5IGZpbGVzIGl0c2VsZi4pCjwvcGFyYT4KPHBhcmE+CiAgQXBwbGljYXRpb25zIHNvbWV0aW1lcyBhbHNvIHRyeSB0byBpbnNwZWN0IHRoZSB2ZXJzaW9uCiAgcmVzb3VyY2VzIGZyb20gdGhlIHBoeXNpY2FsIGZpbGVzIChmb3IgZXhhbXBsZSwgdG8gZGV0ZXJtaW5lCiAgdGhlIERpcmVjdFggdmVyc2lvbikuIEVtcHR5IGZpbGVzIHdpbGwgbm90IGRvIGluIHRoaXMgY2FzZSwKICBpdCBpcyByYXRoZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgZmlsZXMgd2l0aCBjb21wbGV0ZQogIHZlcnNpb24gcmVzb3VyY2VzLiBUaGlzIHByb2JsZW0gaXMgY3VycmVudGx5IGJlaW5nIHdvcmtlZAogIG9uLiBJbiB0aGUgbWVhbnRpbWUsIHlvdSBtYXkgc3RpbGwgbmVlZCB0byBncmFiIHNvbWUgcmVhbAogIERMTCBmaWxlcyB0byBmb29sIHRoZXNlIGFwcHMgd2l0aC4KPC9wYXJhPgo8cGFyYT4KICBBbmQgdGhlcmUgYXJlIG9mIGNvdXJzZSBETExzIHRoYXQgd2luZSBkb2VzIG5vdCBjdXJyZW50bHkKICBpbXBsZW1lbnQgdmVyeSB3ZWxsIChvciBhdCBhbGwpLiBJZiB5b3UgZG8gbm90IGhhdmUgYSByZWFsCiAgV2luZG93cyB5b3UgY2FuIHN0ZWFsIG5lY2Vzc2FyeSBETExzIGZyb20sIHlvdSBjYW4gYWx3YXlzCiAgZ2V0IHNvbWUgZnJvbSBvbmUgb2YgdGhlIFdpbmRvd3MgRExMIGFyY2hpdmUgc2l0ZXMKICB0aGF0IGNhbiBiZSBmb3VuZCB2aWEgaW50ZXJuZXQgc2VhcmNoIGVuZ2luZS4KICBQbGVhc2UgbWFrZSBzdXJlIHRvIG9iZXkgYW55IGxpY2Vuc2VzIG9uIHRoZSBETExzIHlvdSBmZXRjaC4uLgogIChzb21lIGFyZSByZWRpc3RyaWJ1dGFibGUsIHNvbWUgYXJlbid0KS4KPC9wYXJhPgo8L3NlY3QyPgoKPHNlY3QyIGlkPSJjb25maWctZGxsLW1pc3NpbmciPgo8dGl0bGU+TWlzc2luZyBETExzPC90aXRsZT4KCjxwYXJhPgogIEluIGNhc2UgV2luZSBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nIERMTCwgeW91IHNob3VsZCBjaGVjayB3aGV0aGVyCiAgdGhpcyBmaWxlIGlzIGEgcHVibGljbHkgYXZhaWxhYmxlIERMTCBvciBhIGN1c3RvbSBETEwgYmVsb25naW5nCiAgdG8geW91ciBwcm9ncmFtIChieSBzZWFyY2hpbmcgZm9yIGl0cyBuYW1lIG9uIHRoZSBpbnRlcm5ldCkuCiAgSWYgeW91IG1hbmFnZWQgdG8gZ2V0IGhvbGQgb2YgdGhlIERMTCwgdGhlbiB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQogIHRoYXQgV2luZSBpcyBhYmxlIHRvIGZpbmQgYW5kIGxvYWQgaXQuCiAgRExMcyB1c3VhbGx5IGdldCBsb2FkZWQgYWNjb3JkaW5nIHRvIHRoZSBtZWNoYW5pc20gb2YgdGhlCiAgU2VhcmNoUGF0aCgpIGZ1bmN0aW9uLgogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZGlyZWN0b3JpZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKCiAgPG9yZGVyZWRsaXN0PgogICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KCVRoZSBkaXJlY3RvcnkgdGhlIHByb2dyYW0gd2FzIHN0YXJ0ZWQgZnJvbS4KICAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CglUaGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIFdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeS4KICAgICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CglUaGUgV2luZG93cyBkaXJlY3RvcnkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVGhlIFBBVEggdmFyaWFibGUgZGlyZWN0b3JpZXMuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgPC9vcmRlcmVkbGlzdD4KCiAgSW4gc2hvcnQ6IGVpdGhlciBwdXQgdGhlIHJlcXVpcmVkIERMTCBpbnRvIHlvdXIgcHJvZ3JhbQogIGRpcmVjdG9yeSAobWlnaHQgYmUgdWdseSksIG9yIHVzdWFsbHkgcHV0IGl0IGludG8gdGhlIFdpbmRvd3Mgc3lzdGVtCiAgZGlyZWN0b3J5LiBKdXN0IGZpbmQgb3V0IGl0cyBkaXJlY3RvcnkgYnkgaGF2aW5nIGEgbG9vayBhdCB0aGUgV2luZQogIGNvbmZpZ3VyYXRpb24gZmlsZSB2YXJpYWJsZSAiU3lzdGVtIiAod2hpY2ggaW5kaWNhdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUKICBXaW5kb3dzIHN5c3RlbSBkaXJlY3RvcnkpIGFuZCB0aGUgYXNzb2NpYXRlZCBkcml2ZSBlbnRyeS4KICBOb3RlIHRoYXQgeW91IHByb2JhYmx5IHNob3VsZG4ndCB1c2UgTlQtYmFzZWQgbmF0aXZlIERMTHMsCiAgc2luY2UgV2luZSdzIE5UIEFQSSBzdXBwb3J0IGlzIHNvbWV3aGF0IHdlYWtlciB0aGFuIGl0cyBXaW45eAogIEFQSSBzdXBwb3J0ICh0aHVzIGxlYWRpbmcgdG8gZXZlbiB3b3JzZSBjb21wYXRpYmlsaXR5IHdpdGggTlQgRExMcwogIHRoYW4gd2l0aCBhIG5vLXdpbmRvd3Mgc2V0dXAhKSwgc28gYmV0dGVyIHVzZSBXaW45eCBuYXRpdmUgRExMcwogIGluc3RlYWQgb3Igbm8gbmF0aXZlIERMTHMgYXQgYWxsLgo8L3BhcmE+Cjwvc2VjdDI+Cgo8c2VjdDIgaWQ9ImNvbmZpZy1kbGwtd2luZG93cyI+Cjx0aXRsZT5GZXRjaGluZyBuYXRpdmUgRExMcyBmcm9tIGEgV2luZG93cyBDRDwvdGl0bGU+Cgo8cGFyYT4KVGhlIExpbnV4IDxjb21tYW5kPmNhYmV4dHJhY3Q8L2NvbW1hbmQ+IHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KZXh0cmFjdCBuYXRpdmUgV2luZG93cyAuZGxsIGZpbGVzIGZyb20gLmNhYiBmaWxlcyB0aGF0IGFyZSB0byBiZQpmb3VuZCBvbiBtYW55IFdpbmRvd3MgaW5zdGFsbGF0aW9uIENEcy4KPC9wYXJhPgo8L3NlY3QyPgo8L3NlY3QxPgoKPHNlY3QxIGlkPSJjb25maWctZ3JhcGhpY3MtZHJpdmVyIj4KPHRpdGxlPkNvbmZpZ3VyaW5nIHRoZSBncmFwaGljcyBkcml2ZXIgKHgxMWRydiwgdHR5ZHJ2IGV0Yy4pPC90aXRsZT4KCjxwYXJhPgpXaW5lIGN1cnJlbnRseSBzdXBwb3J0cyBzZXZlcmFsIGRpZmZlcmVudCBkaXNwbGF5IHN1YnN5c3RlbXMKKGdyYXBoaWNzIC8gdGV4dCkgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHZhcmlvdXMgb3BlcmF0aW5nCnN5c3RlbXMgdG9kYXkuCkZvciBlYWNoIG9mIHRoZXNlLCBXaW5lIGltcGxlbWVudHMgaXRzIG93biBpbnRlcmZhY2luZyBkcml2ZXIuClRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gc2VsZWN0IG9uZSBvZiB0aGVzZSBkcml2ZXJzCmFuZCBob3cgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHJlc3BlY3RpdmUgZHJpdmVyLgpPbmNlIHlvdSdyZSBmaW5pc2hlZCB3aXRoIHRoYXQsIHlvdSBjYW4gY29uc2lkZXIgeW91ciBXaW5lIGluc3RhbGxhdGlvbgp0byBiZSBmaW5pc2hlZC4KPC9wYXJhPgoKPHBhcmE+ClRoZSBkaXNwbGF5IGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudGVkIGluIFdpbmUgYXJlOgp4MTFkcnYsIHdoaWNoIGlzIHVzZWQgZm9yIGludGVyZmFjaW5nIHRvIFgxMSBncmFwaGljcwoodGhlIG9uZSB5b3UnbGwgbW9zdCBsaWtlbHkgd2FudCB0byB1c2UpIGFuZCB0dHlkcnYKKHVzZWQgZm9yIHRleHQgbW9kZSBjb25zb2xlIGFwcHMgbWFpbmx5IHRoYXQgZG9uJ3QgcmVhbGx5IG5lZWQKYW55IGdyYXBoaWNzIG91dHB1dCkuCk9uY2UgeW91IGhhdmUgZGVjaWRlZCB3aGljaCBkaXNwbGF5IGRyaXZlciB0byB1c2UsIGl0IGlzIGNob3Nlbgp3aXRoIHRoZSA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uIGluIHRoZQpbd2luZV0gc2VjdGlvbiBvZiA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPi4KPC9wYXJhPgoKPHNlY3QyPgo8dGl0bGU+Q29uZmlndXJpbmcgdGhlIHgxMWRydiBncmFwaGljcyBkcml2ZXI8L3RpdGxlPgoKPHNlY3QzPgogIDx0aXRsZT54MTFkcnYgbW9kZXMgb2Ygb3BlcmF0aW9uPC90aXRsZT4KCiAgPHBhcmE+CiAgICBUaGUgeDExZHJ2IGRyaXZlciBjb25zaXN0cyBvZiB0d28gY29uY2VwdHVhbGx5IGRpc3RpbmN0CiAgICBwaWVjZXMsIHRoZSBncmFwaGljcyBkcml2ZXIgKEdESSBwYXJ0KSwgYW5kIHRoZSB3aW5kb3dpbmcKICAgIGRyaXZlciAoVVNFUiBwYXJ0KS4gQm90aCBvZiB0aGVzZSBhcmUgbGlua2VkIGludG8gdGhlCiAgICA8ZmlsZW5hbWU+bGlieDExZHJ2LnNvPC9maWxlbmFtZT4gbW9kdWxlLCB0aG91Z2ggKHdoaWNoIHlvdQogICAgbG9hZCB3aXRoIHRoZSA8bGl0ZXJhbD5HcmFwaGljc0RyaXZlcjwvbGl0ZXJhbD4gb3B0aW9uKS4gSW4KICAgIFdpbmUsIHJ1bm5pbmcgb24gWDExLCB0aGUgZ3JhcGhpY3MgZHJpdmVyIG11c3QgZHJhdyBvbgogICAgZHJhd2FibGVzICh3aW5kb3cgaW50ZXJpb3JzKSBwcm92aWRlZCBieSB0aGUgd2luZG93aW5nCiAgICBkcml2ZXIuIFRoaXMgZGlmZmVycyBhIGJpdCBmcm9tIHRoZSBXaW5kb3dzIG1vZGVsLCB3aGVyZSB0aGUKICAgIHdpbmRvd2luZyBzeXN0ZW0gY3JlYXRlcyBhbmQgY29uZmlndXJlcyBkZXZpY2UgY29udGV4dHMKICAgIGNvbnRyb2xsZWQgYnkgdGhlIGdyYXBoaWNzIGRyaXZlciwgYW5kIHByb2dyYW1zIGFyZQogICAgYWxsb3dlZCB0byBob29rIGludG8gdGhpcyByZWxhdGlvbnNoaXAgYW55d2hlcmUgdGhleSBsaWtlLgogICAgVGh1cywgdG8gcHJvdmlkZSBhbnkgcmVhc29uYWJsZSB0cmFkZW9mZiBiZXR3ZWVuCiAgICBjb21wYXRpYmlsaXR5IGFuZCB1c2FiaWxpdHksIHRoZSB4MTFkcnYgaGFzIHRocmVlIGRpZmZlcmVudAogICAgbW9kZXMgb2Ygb3BlcmF0aW9uLgogIDwvcGFyYT4KCiAgPHZhcmlhYmxlbGlzdD4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPk1hbmFnZWQ8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUaGUgZGVmYXVsdC4gU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSA8bGl0ZXJhbD5NYW5hZ2VkPC9saXRlcmFsPgoJICB3aW5lIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb24gKHNlZSBiZWxvdykuCgkgIE9yZGluYXJ5IHRvcC1sZXZlbCBmcmFtZSB3aW5kb3dzIHdpdGggdGhpY2sgYm9yZGVycywKCSAgdGl0bGUgYmFycywgYW5kIHN5c3RlbSBtZW51cyB3aWxsIGJlIG1hbmFnZWQgYnkgeW91cgoJICB3aW5kb3cgbWFuYWdlci4gVGhpcyBsZXRzIHRoZXNlIHByb2dyYW1zIGludGVncmF0ZQoJICBiZXR0ZXIgd2l0aCB0aGUgcmVzdCBvZiB5b3VyIGRlc2t0b3AsIGJ1dCBtYXkgbm90CgkgIGFsd2F5cyB3b3JrIHBlcmZlY3RseSAoYSByZXdyaXRlIG9mIHRoaXMgbW9kZSBvZgoJICBvcGVyYXRpb24sIHRvIG1ha2UgaXQgbW9yZSByb2J1c3QgYW5kIGxlc3MgcGF0Y2h5LCBpcwoJICBjdXJyZW50bHkgYmVpbmcgZG9uZSwgdGhvdWdoLCBhbmQgaXQncyBwbGFubmVkIHRvIGJlCgkgIGZpbmlzaGVkIGJlZm9yZSB0aGUgV2luZSAxLjAgcmVsZWFzZSkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlVubWFuYWdlZCAvIE5vcm1hbDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFdpbmRvdyBtYW5hZ2VyIGluZGVwZW5kZW50IChhbnkgcnVubmluZwoJICB3aW5kb3cgbWFuYWdlciBpcyBpZ25vcmVkIGNvbXBsZXRlbHkpLiBXaW5kb3cKCSAgZGVjb3JhdGlvbnMgKHRpdGxlIGJhcnMsIGJvcmRlcnMsIGV0YykgYXJlIGRyYXduIGJ5CgkgIFdpbmUgdG8gbG9vayBhbmQgZmVlbCBsaWtlIHRoZSByZWFsIFdpbmRvd3MuIFRoaXMgaXMKCSAgY29tcGF0aWJsZSB3aXRoIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUKCSAgdG8gY29tcHV0ZSB0aGUgZXhhY3Qgc2l6ZXMgb2YgYW55IHN1Y2ggZGVjb3JhdGlvbnMsIG9yCgkgIHRoYXQgd2FudCB0byBkcmF3IHRoZWlyIG93bi4KCSAgVW5tYW5hZ2VkIG1vZGUgaXMgb25seSB1c2VkIGlmIGJvdGggTWFuYWdlZCBhbmQgRGVza3RvcAoJICBhcmUgc2V0IHRvIGRpc2FibGVkLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5EZXNrdG9wLWluLWEtQm94PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgU3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSA8bGl0ZXJhbD5EZXNrdG9wPC9saXRlcmFsPgoJd2luZSBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uIChzZWUgYmVsb3cpLgoJICAoYWRkaW5nIGEgZ2VvbWV0cnksIGUuZy4gPGxpdGVyYWw+ODAweDYwMDwvbGl0ZXJhbD4KCWZvciBhIHN1Y2gtc2l6ZWQgZGVza3RvcCwgb3IKCSAgZXZlbiA8bGl0ZXJhbD44MDB4NjAwKzArMDwvbGl0ZXJhbD4gdG8KCSAgYXV0b21hdGljYWxseSBwb3NpdGlvbiB0aGUgZGVza3RvcCBhdCB0aGUgdXBwZXItbGVmdAoJICBjb3JuZXIgb2YgdGhlIGRpc3BsYXkpLiBUaGlzIGlzIHRoZSBtb2RlIG1vc3QKCSAgY29tcGF0aWJsZSB3aXRoIHRoZSBXaW5kb3dzIG1vZGVsLiBBbGwgcHJvZ3JhbQoJICB3aW5kb3dzIHdpbGwganVzdCBiZSBXaW5lLWRyYXduIHdpbmRvd3MgaW5zaWRlIHRoZQoJICBXaW5lLXByb3ZpZGVkIGRlc2t0b3Agd2luZG93ICh3aGljaCB3aWxsIGl0c2VsZiBiZQoJICBtYW5hZ2VkIGJ5IHlvdXIgd2luZG93IG1hbmFnZXIpLCBhbmQgV2luZG93cwoJICBwcm9ncmFtcyBjYW4gcm9hbSBmcmVlbHkgd2l0aGluIHRoaXMgdmlydHVhbAoJICB3b3Jrc3BhY2UgYW5kIHRoaW5rIHRoZXkgb3duIGl0IGFsbCwgd2l0aG91dAoJICBkaXN0dXJiaW5nIHlvdXIgb3RoZXIgWCBhcHBzLgoJTm90ZTogY3VycmVudGx5IHRoZXJlJ3Mgb25lIGRlc2t0b3Agd2luZG93IGZvciBldmVyeQoJcHJvZ3JhbTsgdGhpcyB3aWxsIGJlIGZpeGVkIGF0IHNvbWUgdGltZS4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogIDwvdmFyaWFibGVsaXN0Pgo8L3NlY3QzPgoKPHNlY3QzPgogIDx0aXRsZT5UaGUgW3gxMWRydl0gc2VjdGlvbjwvdGl0bGU+CgogIDx2YXJpYWJsZWxpc3Q+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5NYW5hZ2VkPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgV2luZSBjYW4gbGV0IGZyYW1lIHdpbmRvd3MgYmUgbWFuYWdlZCBieSB5b3VyIHdpbmRvdwoJICBtYW5hZ2VyLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0aGF0CgkgIGJ5IGRlZmF1bHQuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRlc2t0b3A8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBDcmVhdGVzIGEgbWFpbiBkZXNrdG9wIHdpbmRvdyBvZiBhIHNwZWNpZmllZCBzaXplCgl0byBkaXNwbGF5IGFsbCBXaW5kb3dzIHByb2dyYW1zIGluLgoJVGhlIHNpemUgYXJndW1lbnQgY291bGQgZS5nLiBiZSAiODAweDYwMCIuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRYR3JhYjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIElmIHlvdSBkb24ndCB1c2UgREdBLCB5b3UgbWF5IHdhbnQgYW4gYWx0ZXJuYXRpdmUKCSAgbWVhbnMgdG8gY29udmluY2UgdGhlIG1vdXNlIGN1cnNvciB0byBzdGF5IHdpdGhpbiB0aGUKCSAgZ2FtZSB3aW5kb3cuIFRoaXMgb3B0aW9uIGRvZXMgdGhhdC4gT2YgY291cnNlLCBhcyB3aXRoCgkgIERHQSwgaWYgV2luZSBjcmFzaGVzLCB5b3UncmUgaW4gdHJvdWJsZSAoYWx0aG91Z2ggbm90CgkgIGFzIGJhZGx5IGFzIGluIHRoZSBER0EgY2FzZSwgc2luY2UgeW91IGNhbiBzdGlsbCB1c2UKCSAgdGhlIGtleWJvYXJkIHRvIGdldCBvdXQgb2YgWCkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlVzZURHQTwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgRGlyZWN0RHJhdyB0byB1c2UKCSAgWEZyZWU4NidzIDxmaXJzdHRlcm0+RGlyZWN0IEdyYXBoaWNzCgkgICAgQXJjaGl0ZWN0dXJlPC9maXJzdHRlcm0+IChER0EpLCB3aGljaCBpcyBhYmxlIHRvCgkgIHRha2Ugb3ZlciB0aGUgZW50aXJlIGRpc3BsYXkgYW5kIHJ1biB0aGUgZ2FtZQoJICBmdWxsLXNjcmVlbiBhdCBtYXhpbXVtIHNwZWVkLiAoV2l0aCBER0ExIChYRnJlZTg2CgkgIDMueCksIHlvdSBzdGlsbCBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgWCBzZXJ2ZXIgdG8gdGhlCgkgIGdhbWUncyByZXF1ZXN0ZWQgYnBwIGZpcnN0LCBidXQgd2l0aCBER0EyIChYRnJlZTg2CgkgIDQueCksIHJ1bnRpbWUgZGVwdGgtc3dpdGNoaW5nIG1heSBiZSBwb3NzaWJsZSwKCSAgZGVwZW5kaW5nIG9uIHlvdXIgZHJpdmVyJ3MgY2FwYWJpbGl0aWVzLikgQnV0IGJlIGF3YXJlCgkgIHRoYXQgaWYgV2luZSBjcmFzaGVzIHdoaWxlIGluIERHQSBtb2RlLCBpdCBtYXkgbm90IGJlCgkgIHBvc3NpYmxlIHRvIHJlZ2FpbiBjb250cm9sIG92ZXIgeW91ciBjb21wdXRlciB3aXRob3V0CgkgIHJlYm9vdGluZy4gREdBIG5vcm1hbGx5IHJlcXVpcmVzIGVpdGhlciByb290CgkgIHByaXZpbGVnZXMgb3IgcmVhZC93cml0ZSBhY2Nlc3MgdG8KCSAgPGZpbGVuYW1lPi9kZXYvbWVtPC9maWxlbmFtZT4uCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRlc2t0b3BEb3VibGVCdWZmZXJlZDwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIEFwcGxpZXMgb25seSBpZiB5b3UgdXNlIHRoZQoJICA8cGFyYW1ldGVyPi0tZGVza3RvcDwvcGFyYW1ldGVyPiBjb21tYW5kLWxpbmUgb3B0aW9uCgkgIHRvIHJ1biBpbiBhIGRlc2t0b3Agd2luZG93LiBTcGVjaWZpZXMgd2hldGhlciB0bwoJICBjcmVhdGUgdGhlIGRlc2t0b3Agd2luZG93IHdpdGggYSBkb3VibGUtYnVmZmVyZWQKCSAgdmlzdWFsLCBzb21ldGhpbmcgbW9zdCBPcGVuR0wgZ2FtZXMgbmVlZCB0byBydW4KCSAgY29ycmVjdGx5LgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT5BbGxvY1N5c3RlbUNvbG9yczwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIEFwcGxpZXMgb25seSBpZiB5b3UgaGF2ZSBhIHBhbGV0dGUtYmFzZWQgZGlzcGxheSwgaS5lLgoJICBpZiB5b3VyIFggc2VydmVyIGlzIHNldCB0byBhIGRlcHRoIG9mIDhicHAsIGFuZCBpZiB5b3UKCSAgaGF2ZW4ndCByZXF1ZXN0ZWQgYSBwcml2YXRlIGNvbG9yIG1hcC4gSXQgc3BlY2lmaWVzCgkgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaGFyZWQgY29sb3JtYXAgY2VsbHMgKHBhbGV0dGUKCSAgZW50cmllcykgV2luZSBzaG91bGQgb2NjdXB5LiBUaGUgaGlnaGVyIHRoaXMgdmFsdWUsCgkgIHRoZSBsZXNzIGNvbG9ycyB3aWxsIGJlIGF2YWlsYWJsZSB0byBvdGhlcgoJICBwcm9ncmFtcy4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+UHJpdmF0ZUNvbG9yTWFwPC90ZXJtPgogICAgICA8bGlzdGl0ZW0+Cgk8cGFyYT4KCSAgQXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGEgcGFsZXR0ZS1iYXNlZCBkaXNwbGF5LCBpLmUuCgkgIGlmIHlvdXIgWCBzZXJ2ZXIgaXMgc2V0IHRvIGEgZGVwdGggb2YgOGJwcC4gSXQKCSAgc3BlY2lmaWVzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzaGFyZWQgY29sb3IKCSAgbWFwLCBidXQgYSBwcml2YXRlIGNvbG9yIG1hcCwgd2hlcmUgYWxsIDI1NiBjb2xvcnMgYXJlCgkgIGF2YWlsYWJsZS4gVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IFdpbmUncyBwcml2YXRlCgkgIGNvbG9yIG1hcCBpcyBvbmx5IHNlZW4gd2hpbGUgdGhlIG1vdXNlIHBvaW50ZXIgaXMKCSAgaW5zaWRlIGEgV2luZSB3aW5kb3csIHNvIHBzeWNoZWRlbGljIGZsYXNoaW5nIGFuZAoJICBmdW5reSBjb2xvcnMgd2lsbCBiZWNvbWUgcm91dGluZSBpZiB5b3UgdXNlIHRoZSBtb3VzZQoJICBhIGxvdC4KCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+U3luY2hyb25vdXM8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUbyBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgWDExIG9wZXJhdGlvbnMuCglJZiBXaW5lIGNyYXNoZXMgd2l0aCBhbiBYMTEgZXJyb3IsIHRoZW4geW91IHNob3VsZCBlbmFibGUKCVN5bmNocm9ub3VzIG1vZGUgdG8gZGlzYWJsZSBYMTEgcmVxdWVzdCBjYWNoaW5nIGluIG9yZGVyCgl0byBtYWtlIHN1cmUgdGhhdCB0aGUgWDExIGVycm9yIGhhcHBlbnMgZGlyZWN0bHkgYWZ0ZXIKCXRoZSBjb3JyZXNwb25kaW5nIFgxMSBjYWxsIGluIHRoZSBsb2cgZmlsZSBhcHBlYXJzLgoJV2lsbCBzbG93IGRvd24gWDExIG91dHB1dCEKCTwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+U2NyZWVuRGVwdGg8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBBcHBsaWVzIG9ubHkgdG8gbXVsdGktZGVwdGggZGlzcGxheXMuIEl0IHNwZWNpZmllcwoJICB3aGljaCBvZiB0aGUgYXZhaWxhYmxlIGRlcHRocyBXaW5lIHNob3VsZCB1c2UgKGFuZAoJICB0ZWxsIFdpbmRvd3MgYXBwcyBhYm91dCkuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPkRpc3BsYXk8L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KCTxwYXJhPgoJICBUaGlzIHNwZWNpZmllcyB3aGljaCBYMTEgZGlzcGxheSB0byB1c2UsIGFuZCBpZgoJICBzcGVjaWZpZWQsIHdpbGwgb3ZlcnJpZGUgdGhlCgkgIDxlbnZhcj5ESVNQTEFZPC9lbnZhcj4gZW52aXJvbm1lbnQgdmFyaWFibGUuCgk8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPlBlcmZlY3RHcmFwaGljczwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoJPHBhcmE+CgkgIFRoaXMgb3B0aW9uIG9ubHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGZhc3QgWDExIHJvdXRpbmVzCgkgIG9yIGV4YWN0IFdpbmUgcm91dGluZXMgd2lsbCBiZSB1c2VkIGZvciBjZXJ0YWluIFJPUAoJICBjb2RlcyBpbiBibGl0IG9wZXJhdGlvbnMuIE1vc3QgdXNlcnMgd29uJ3Qgbm90aWNlIGFueQoJICBkaWZmZXJlbmNlLgoJPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAgPC92YXJpYWJsZWxpc3Q+Cjwvc2VjdDM+Cjwvc2VjdDI+Cgo8c2VjdDI+Cjx0aXRsZT5Db25maWd1cmluZyB0aGUgdHR5ZHJ2IGdyYXBoaWNzIGRyaXZlcjwvdGl0bGU+CjxwYXJhPgogIEN1cnJlbnRseSwgdGhlIHR0eWRydiBkb2Vzbid0IGhhdmUgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbgogIG9wdGlvbnMgdG8gc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCjwvcGFyYT4KPC9zZWN0Mj4KCjwvc2VjdDE+Cgo8c2VjdDEgaWQ9ImNvbmZpZy13aW5kb3dzLXZlcnNpb25zIj4KCjx0aXRsZT5TZXR0aW5nIHRoZSBXaW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZTwvdGl0bGU+Cgo8cGFyYT4KVGhlIHdpbmRvd3MgYW5kIERPUyB2ZXJzaW9uIHZhbHVlIGEgcHJvZ3JhbSBnZXRzIGUuZy4gYnkgY2FsbGluZyB0aGUKV2luZG93cyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgcGxheXMgYSB2ZXJ5IGltcG9ydGFudCByb2xlOgpJZiB5b3VyIFdpbmUgaW5zdGFsbGF0aW9uIGZvciB3aGF0ZXZlciByZWFzb24gZmFpbHMgdG8gcHJvdmlkZQp0byB5b3VyIHByb2dyYW0gdGhlIGNvcnJlY3QgdmVyc2lvbiB2YWx1ZSB0aGF0IGl0IGV4cGVjdHMsCnRoZW4gdGhlIHByb2dyYW0gbWlnaHQgYXNzdW1lIHNvbWUgdmVyeSBiYWQgdGhpbmdzIGFuZCBmYWlsIChpbgp0aGUgd29yc3QgY2FzZSBldmVuIHNpbGVudGx5ISkuCgpGb3J0dW5hdGVseSBXaW5lIGNvbnRhaW5zIHNvbWUgbW9yZSBvciBsZXNzIGludGVsbGlnZW50IFdpbmRvd3MKdmVyc2lvbiBndWVzc2luZyBhbGdvcml0aG0gdGhhdCB3aWxsIHRyeSB0byBndWVzcyB0aGUgV2luZG93cwp2ZXJzaW9uIGEgcHJvZ3JhbSBtaWdodCBleHBlY3QgYW5kIHBhc3MgdGhhdCBvbmUgb24gdG8gdGhlCnByb2dyYW0uCgpUaHVzIHlvdSBzaG91bGQgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGxpZ2h0bHkgY29uZmlndXJlIGEgdmVyc2lvbiB2YWx1ZSwgYXMgdGhpcyB3aWxsIGJlIGEgImZvcmNlZCIgdmFsdWUgYW5kIHRodXMgdHVybiBvdXQgdG8gYmUgcmF0aGVyIGhhcm1mdWwgdG8gcHJvcGVyIG9wZXJhdGlvbi4gSW4gb3RoZXIgd29yZHM6IG9ubHkgZXhwbGljaXRseSBzZXQgYSBXaW5kb3dzIHZlcnNpb24gdmFsdWUgaW4gY2FzZSBXaW5lJ3Mgb3duIHZlcnNpb24gZGV0ZWN0aW9uIHdhcyB1bmFibGUgdG8gcHJvdmlkZSB0aGUgY29ycmVjdCBXaW5kb3dzIHZlcnNpb24gYW5kIHRoZSBwcm9ncmFtIGZhaWxzLgo8L3BhcmE+Cgo8c2VjdDI+Cjx0aXRsZT5Ib3cgdG8gY29uZmlndXJlIHRoZSBXaW5kb3dzIGFuZCBET1MgdmVyc2lvbiB2YWx1ZSBXaW5lCnNob3VsZCByZXR1cm48L3RpdGxlPgoKPHBhcmE+ClRoZSB2ZXJzaW9uIHZhbHVlcyBjYW4gYmUgY29uZmlndXJlZCBpbiB0aGUgd2luZSBjb25maWd1cmF0aW9uIGZpbGUgaW4KdGhlIFtWZXJzaW9uXSBzZWN0aW9uLgo8L3BhcmE+Cgo8dmFyaWFibGVsaXN0PgogIDx2YXJsaXN0ZW50cnk+CiAgICA8dGVybT4iV2luZG93cyIgPSAiJmx0O3ZlcnNpb24gc3RyaW5nJmd0OyI8L3Rlcm0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJZGVmYXVsdDogbm9uZTsgY2hvc2VuIGJ5IHNlbWktaW50ZWxsaWdlbnQgZGV0ZWN0aW9uCgltZWNoYW5pc20gYmFzZWQgb24gRExMIGVudmlyb25tZW50LgoJVXNlZCB0byBzcGVjaWZ5IHdoaWNoIFdpbmRvd3MgdmVyc2lvbiB0byByZXR1cm4gdG8KCXByb2dyYW1zICAoZm9yY2VkICB2YWx1ZSwgb3ZlcnJpZGVzIHN0YW5kYXJkIGRldGVjdGlvbgoJbWVjaGFuaXNtISkuIFZhbGlkICBzZXR0aW5ncyBhcmUgZS5nLiAid2luMzEiLCAid2luOTUiLAoJIndpbjk4IiwgICJ3aW4yayIsICAid2lueHAiLgoJQWxzbyB2YWxpZCBhcyBhbgoJPGxpbmsgbGlua2VuZD0iY29uZmlnLWFwcGRlZmF1bHRzIj5BcHBEZWZhdWx0czwvbGluaz4KCXNldHRpbmcgKHJlY29tbWVuZGVkL3ByZWZlcnJlZCB1c2UpLgogICAgICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogIDwvdmFybGlzdGVudHJ5PgogIDx2YXJsaXN0ZW50cnk+CiAgICA8dGVybT4iRE9TIj0iJmx0O3ZlcnNpb24gc3RyaW5nJmd0OyI8L3Rlcm0+CiAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgoJVXNlZCB0byBzcGVjaWZ5IHRoZSBET1MgdmVyc2lvbiB0aGF0IHNob3VsZCBiZSByZXR1cm5lZAoJdG8gcHJvZ3JhbXMuIE9ubHkgdGFrZXMgZWZmZWN0IGluIGNhc2UgV2luZSBhY3RzIGFzCgkid2luMzEiIFdpbmRvd3MgdmVyc2lvbiEgQ29tbW9uIERPUyB2ZXJzaW9uIHNldHRpbmdzCglpbmNsdWRlIDYuMjIsIDYuMjAsIDYuMDAsIDUuMDAsIDQuMDAsIDMuMzAsIDMuMTAuCglBbHNvIHZhbGlkIGFzIGFuCgk8bGluayBsaW5rZW5kPSJjb25maWctYXBwZGVmYXVsdHMiPkFwcERlZmF1bHRzPC9saW5rPgoJc2V0dGluZyAocmVjb21tZW5kZWQvcHJlZmVycmVkIHVzZSkuCiAgICAgIDwvcGFyYT4KICAgIDwvbGlzdGl0ZW0+CiAgPC92YXJsaXN0ZW50cnk+CjwvdmFyaWFibGVsaXN0Pgo8L3NlY3QyPgo8L3NlY3QxPgoKJmZvbnRzOwomcHJpbnRpbmc7Cgo8c2VjdDEgaWQ9ImNvbmZpZy13aW45NWxvb2siPgo8dGl0bGU+V2luOTUvOTggTG9vayBBbmQgRmVlbDwvdGl0bGU+CjxwYXJhPgpJbnN0ZWFkIG9mIGNvbXBpbGluZyBXaW5lIGZvciBXaW4zLjEgdnMuIFdpbjk1IHVzaW5nCjxjb25zdGFudD4jZGVmaW5lPC9jb25zdGFudD4gc3dpdGNoZXMsIHRoZSBjb2RlIG5vdyBsb29rcyBpbiBhCnNwZWNpYWwgW1R3ZWFrLkxheW91dF0gc2VjdGlvbiBvZgo8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmb3IgYQo8bGl0ZXJhbD4iV2luZUxvb2siID0gIldpbjk1IjwvbGl0ZXJhbD4gb3IKPGxpdGVyYWw+IldpbmVMb29rIiA9ICJXaW45OCI8L2xpdGVyYWw+IGVudHJ5Lgo8L3BhcmE+CjxwYXJhPgpBIGZldyBuZXcgc2VjdGlvbnMgYW5kIGEgbnVtYmVyIG9mIGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHRvCnRoZSA8ZmlsZW5hbWU+fi8ud2luZS9jb25maWc8L2ZpbGVuYW1lPiBmaWxlIC0tIHRoZXNlIGFyZSBmb3IKZGVidWdnaW5nIHRoZSBXaW45NSB0d2Vha3Mgb25seSBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKcmVsZWFzZSEgIFRoZXNlIGVudHJpZXMvc2VjdGlvbnMgYXJlOgo8L3BhcmE+Cjxwcm9ncmFtbGlzdGluZz4KW1R3ZWFrLkZvbnRzXQoiU3lzdGVtLkhlaWdodCIgPSAiJmx0O3BvaW50IHNpemU+IiAgICAjIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgc3lzdGVtIHR5cGVmYWNlCiJTeXN0ZW0uQm9sZCIgPSAiW3RydWV8ZmFsc2VdIiAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAoiU3lzdGVtLkl0YWxpYyIgPSAiW3RydWV8ZmFsc2VdIiAgICAjIFdoZXRoZXIgdGhlIHN5c3RlbSBmb250IHNob3VsZCBiZSBpdGFsaWNpemVkCiJTeXN0ZW0uVW5kZXJsaW5lIiA9ICJbdHJ1ZXxmYWxzZV0iICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIHVuZGVybGluZWQKIlN5c3RlbS5TdHJpa2VPdXQiID0gIlt0cnVlfGZhbHNlXSIgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAoiT0VNRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgT0VNIGZpeGVkIHR5cGVmYWNlCiJBbnNpRml4ZWQueHh4IiAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIGZpeGVkIHR5cGVmYWNlCiJBbnNpVmFyLnh4eCIgICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCiJTeXN0ZW1GaXhlZC54eHgiICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBTeXN0ZW0gZml4ZWQgdHlwZWZhY2UKCltUd2Vhay5MYXlvdXRdCiJXaW5lTG9vayIgPSAiW1dpbjMxfFdpbjk1fFdpbjk4XSIgICMgQ2hhbmdlcyBXaW5lJ3MgbG9vayBhbmQgZmVlbAo8L3Byb2dyYW1saXN0aW5nPgo8L3NlY3QxPgoKICAgIDxzZWN0MSBpZD0iY29uZmlnLXNjc2ktc3VwcG9ydCI+CiAgICAgIDx0aXRsZT5TQ1NJIFN1cHBvcnQ8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBUaGlzIGZpbGUgZGVzY3JpYmVzIHNldHRpbmcgdXAgdGhlIFdpbmRvd3MgQVNQSSBpbnRlcmZhY2UuCiAgICAgICAgQVNQSSBpcyBhIGRpcmVjdCBsaW5rIHRvIFNDU0kgZGV2aWNlcyBmcm9tIHdpbmRvd3MgcHJvZ3JhbXMuIAoJQVNQSSBqdXN0IGZvcndhcmRzIHRoZSBTQ1NJIGNvbW1hbmRzIHRoYXQgcHJvZ3JhbXMgc2VuZAogICAgICAgIHRvIGl0IHRvIHRoZSBTQ1NJIGJ1cy4KICAgICAgPC9wYXJhPgogICAgICA8cGFyYT4KICAgICAgICBJZiB5b3UgdXNlIHRoZSB3cm9uZyBTQ1NJIGRldmljZSBpbiB5b3VyIHNldHVwIGZpbGUsIHlvdSBjYW4gc2VuZAogICAgICAgIGNvbXBsZXRlbHkgYm9ndXMgY29tbWFuZHMgdG8gdGhlIHdyb25nIGRldmljZSAtIEFuIGV4YW1wbGUgd291bGQgYmUKICAgICAgICBmb3JtYXR0aW5nIHlvdXIgaGFyZCBkcml2ZXMgKGFzc3VtaW5nIHRoZSBkZXZpY2UgZ2F2ZSB5b3UgcGVybWlzc2lvbiAtCiAgICAgICAgaWYgeW91J3JlIHJ1bm5pbmcgYXMgcm9vdCwgYWxsIGJldHMgYXJlIG9mZikuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAgICAgICAgU28gcGxlYXNlIG1ha2Ugc3VyZSB0aGF0IDxlbXBoYXNpcz5hbGw8L2VtcGhhc2lzPiBTQ1NJIGRldmljZXMgbm90IG5lZWRlZCBieSB0aGUgcHJvZ3JhbQogICAgICAgIGhhdmUgdGhlaXIgcGVybWlzc2lvbnMgc2V0IGFzIHJlc3RyaWN0ZWQgYXMgcG9zc2libGUhCiAgICAgIDwvcGFyYT4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+V2luZG93cyByZXF1aXJlbWVudHM8L3RpdGxlPgogICAgICAgIDxvcmRlcmVkbGlzdD4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgVGhlIHNvZnR3YXJlIG5lZWRzIHRvIHVzZSB0aGUgIkFkYXB0ZWMiCiAgICAgICAgICAgICAgY29tcGF0aWJsZSBkcml2ZXJzIChBU1BJKS4gQXQgbGVhc3Qgd2l0aCBNdXN0ZWssIHRoZXkKICAgICAgICAgICAgICBhbGxvdyB5b3UgdGhlIGNob2ljZSBvZiB1c2luZyB0aGUgYnVpbHQtaW4gY2FyZCBvciB0aGUKICAgICAgICAgICAgICAiQWRhcHRlYyAoQUhBKSIgY29tcGF0aWJsZSBkcml2ZXJzLiBUaGlzIHdpbGwgbm90IHdvcmsKICAgICAgICAgICAgICBhbnkgb3RoZXIgd2F5LiBTb2Z0d2FyZSB0aGF0IGFjY2Vzc2VzIHRoZSBzY2FubmVyIHZpYSBhCiAgICAgICAgICAgICAgRE9TIEFTUEkgZHJpdmVyIChlLmcuIEFTUEkyRE9TKSBpcyBzdXBwb3J0ZWQsIHRvby4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgWW91IHByb2JhYmx5IG5lZWQgYSByZWFsIHdpbmRvd3MgaW5zdGFsbCBvZiB0aGUgc29mdHdhcmUKICAgICAgICAgICAgICB0byBzZXQgdGhlIExVTidzL1NDU0kgaWQncyB1cCBjb3JyZWN0bHkuIEknbSBub3QgZXhhY3RseQogICAgICAgICAgICAgIHN1cmUuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+TGludXggcmVxdWlyZW1lbnRzPC90aXRsZT4KICAgICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIFlvdXIgU0NTSSBjYXJkIG11c3QgYmUgc3VwcG9ydGVkIHVuZGVyIExpbnV4LiBUaGlzIHdpbGwKICAgICAgICAgICAgICBub3Qgd29yayB3aXRoIGFuIHVua25vd24gU0NTSSBjYXJkLiBFdmVuIGZvciBjaGVhcCduCiAgICAgICAgICAgICAgY3JhcHB5ICJzY2FubmVyIG9ubHkiIGNvbnRyb2xsZXJzIHNvbWUgc3BlY2lhbCBMaW51eAogICAgICAgICAgICAgIGRyaXZlcnMgZXhpc3Qgb24gdGhlIG5ldC4KCSAgICAgIElmIHlvdSBpbnRlbmQgdG8gdXNlIHlvdXIgSURFIGRldmljZSwgeW91IG5lZWQgdG8gdXNlIHRoZQoJICAgICAgaWRlLXNjc2kgZW11bGF0aW9uLgoJICAgICAgUmVhZAoJICAgICAgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vQ0QtV3JpdGluZy1IT1dUTy5odG1sIj4KCSAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubGludXhkb2Mub3JnL0hPV1RPL0NELVdyaXRpbmctSE9XVE8uaHRtbDwvdWxpbms+CgkgICAgICBmb3IgaWRlLXNjc2kgc2V0dXAgaW5zdHJ1Y3Rpb25zLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBDb21waWxlIGdlbmVyaWMgU0NTSSBkcml2ZXJzIGludG8geW91ciBrZXJuZWwuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgoJICAgICAgVGhpcyBzZWVtcyB0byBiZSBub3QgcmVxdWlyZWQgYW55IG1vcmUgZm9yIG5ld2VyICgyLjIueCkga2VybmVsczoKICAgICAgICAgICAgICBMaW51eCBieSBkZWZhdWx0IHVzZXMgc21hbGxlciBTQ1NJIGJ1ZmZlcnMgdGhhbiBXaW5kb3dzLgogICAgICAgICAgICAgIFRoZXJlIGlzIGEga2VybmVsIGJ1aWxkIGRlZmluZSA8bGl0ZXJhbD5TR19CSUdfQlVGRjwvbGl0ZXJhbD4gKGluCiAgICAgICAgICAgICAgPGZpbGVuYW1lPnNnLmg8L2ZpbGVuYW1lPikgdGhhdCBpcyBieSBkZWZhdWx0IHNldCB0b28KICAgICAgICAgICAgICBsb3cuIFRoZSBTQU5FIHByb2plY3QgcmVjb21tZW5kcwogICAgICAgICAgICAgIDxsaXRlcmFsPjEzMDU2MDwvbGl0ZXJhbD4gYW5kIHRoaXMgc2VlbXMgdG8gd29yayBqdXN0CiAgICAgICAgICAgICAgZmluZS4gVGhpcyBkb2VzIHJlcXVpcmUgYSBrZXJuZWwgcmVidWlsZC4KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgTWFrZSB0aGUgZGV2aWNlcyBmb3IgdGhlIHNjYW5uZXIgKGdlbmVyaWMgU0NTSSBkZXZpY2VzKQogICAgICAgICAgICAgIC0gbG9vayBhdCB0aGUgU0NTSSBwcm9ncmFtbWluZyBIT1dUTyBhdAogICAgICAgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cubGludXhkb2Mub3JnL0hPV1RPL1NDU0ktUHJvZ3JhbW1pbmctSE9XVE8uaHRtbCI+CgkJCSAgaHR0cDovL3d3dy5saW51eGRvYy5vcmcvSE9XVE8vU0NTSS1Qcm9ncmFtbWluZy1IT1dUTy5odG1sPC91bGluaz4KCSAgICAgIGZvciBkZXZpY2UgbnVtYmVyaW5nLgogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBJIHdvdWxkIHJlY29tbWVuZCBtYWtpbmcgdGhlIHNjYW5uZXIgZGV2aWNlIHdyaXRhYmxlIGJ5CiAgICAgICAgICAgICAgYSBncm91cC4gSSBtYWRlIGEgZ3JvdXAgY2FsbGVkCiAgICAgICAgICAgICAgPGxpdGVyYWw+c2Nhbm5lcjwvbGl0ZXJhbD4gYW5kIGFkZGVkIG15c2VsZiB0byBpdC4KICAgICAgICAgICAgICBSdW5uaW5nIGFzIHJvb3QgaW5jcmVhc2VzIHlvdXIgcmlzayBvZiBzZW5kaW5nIGJhZCBTQ1NJCiAgICAgICAgICAgICAgY29tbWFuZHMgdG8gdGhlIHdyb25nIGRldmljZS4gV2l0aCBhIHJlZ3VsYXIgdXNlciwgeW91CiAgICAgICAgICAgICAgYXJlIGJldHRlciBwcm90ZWN0ZWQuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgoJICAgICAgRm9yIFdpbjMyIHNvZnR3YXJlIChXTkFTUEkzMiksIFdpbmUgaGFzIGF1dG8tZGV0ZWN0aW9uIGluIHBsYWNlLgoJICAgICAgRm9yIFdpbjE2IHNvZnR3YXJlIChXSU5BU1BJKSwgeW91IG5lZWQgdG8gYWRkIGEgU0NTSSBkZXZpY2UgZW50cnkKCSAgICAgIGZvciB5b3VyIHBhcnRpY3VsYXIgc2Nhbm5lciB0byB+Ly53aW5lL2NvbmZpZy4gVGhlIGZvcm1hdCBpcwoJICAgICAgPGxpdGVyYWw+W3Njc2kgY0N0VGREXTwvbGl0ZXJhbD4gd2hlcmUKICAgICAgICAgICAgICA8bGl0ZXJhbD4iQyIgPSAiY29udHJvbGxlciI8L2xpdGVyYWw+LAogICAgICAgICAgICAgIDxsaXRlcmFsPiJUIiA9ICJ0YXJnZXQiPC9saXRlcmFsPiwgPGxpdGVyYWw+RD1MVU48L2xpdGVyYWw+CiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIEkgc2V0IG1pbmUgdXAgYXMgIGNvbnRyb2xsZXIgPGxpdGVyYWw+MDwvbGl0ZXJhbD4sCiAgICAgICAgICAgICAgVGFyZ2V0IDxsaXRlcmFsPjY8L2xpdGVyYWw+LCBMVU4gPGxpdGVyYWw+MDwvbGl0ZXJhbD4uCiAgICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgpbc2NzaSBjMHQ2ZDBdCiJEZXZpY2UiID0gIi9kZXYvc2dpIgogICAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgICAgICAgICAgICAgWW91cnMgd2lsbCB2YXJ5IHdpdGggeW91ciBwYXJ0aWN1bGFyIFNDU0kgc2V0dXAuCiAgICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICAgPC9vcmRlcmVkbGlzdD4KICAgICAgPC9zZWN0Mj4KCiAgICAgIDxzZWN0Mj4KICAgICAgICA8dGl0bGU+Tm90ZXM8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgVGhlIGJpZ2dlc3QgZHJhd2JhY2sgaXMgdGhhdCBpdCBvbmx5IHdvcmtzIHVuZGVyIExpbnV4IGF0IHRoZSBtb21lbnQuCiAgICAgICAgICBUaGUgQVNQSSBjb2RlIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGg6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgICAgIDxwYXJhPgogICAgICAgICAgICAgIGEgTXVzdGVrIDgwMFNQIHdpdGggYSBCdXNsb2dpYyBjb250cm9sbGVyIHVuZGVyIExpbnV4IFtCTV0KICAgICAgICAgICAgPC9wYXJhPgogICAgICAgICAgPC9saXN0aXRlbT4KICAgICAgICAgIDxsaXN0aXRlbT4KICAgICAgICAgICAgPHBhcmE+CiAgICAgICAgICAgICAgYSBTaWVtZW5zIE5peGRvcmYgOTAzNiB3aXRoIEFkYXB0ZWMgQVZBLTE1MDUgdW5kZXIgTGludXgKICAgICAgICAgICAgICBhY2Nlc3NlZCB2aWEgRE9TQVNQSS4gTm90ZSB0aGF0IEkgaGFkIGNvbG9yIHByb2JsZW1zLAogICAgICAgICAgICAgIHRob3VnaCAoYmFyZWx5IHJlYWRhYmxlIHJlc3VsdCkgW0FNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgICAgPGxpc3RpdGVtPgogICAgICAgICAgICA8cGFyYT4KICAgICAgICAgICAgICBhIEZ1aml0c3UgTTI1MTNBIE1PIGRyaXZlICg2NDBNQikgdXNpbmcgZ2VuZXJpYyBTQ1NJCiAgICAgICAgICAgICAgZHJpdmVycy4gRm9ybWF0dGluZyBhbmQgZWplY3Rpbmcgd29ya2VkIHBlcmZlY3RseS4KICAgICAgICAgICAgICBUaGFua3MgdG8gVXdlIEJvbm5lcyBmb3IgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSEgW0FNXQogICAgICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICA8L3NlY3QyPgogICAgPC9zZWN0MT4KCiAgICA8c2VjdDEgaWQ9ImNvbmZpZy1vZGJjIj4KICAgICAgPHRpdGxlPlVzaW5nIE9EQkM8L3RpdGxlPgogICAgICA8cGFyYT4KICAgICAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGhvdyBPREJDIHdvcmtzIHdpdGhpbiBXaW5lIGFuZCBob3cgdG8gY29uZmlndXJlIGl0LgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogICAgICAgIFRoZSBPREJDIHN5c3RlbSB3aXRoaW4gV2luZSwgYXMgd2l0aCB0aGUgcHJpbnRpbmcgc3lzdGVtLCBpcyBkZXNpZ25lZAogICAgICAgIHRvIGhvb2sgYWNyb3NzIHRvIHRoZSBVbml4IHN5c3RlbSBhdCBhIGhpZ2ggbGV2ZWwuICBSYXRoZXIgdGhhbgogICAgICAgIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSB3aW5kb3dzIGNvZGUgd29ya3MgdW5kZXIgd2luZSBpdCB1c2VzIGEgc3VpdGFibGUKICAgICAgICBVbml4IE9EQkMgcHJvdmlkZXIsIHN1Y2ggYXMgVW5peE9EQkMuICBUaHVzIGlmIHlvdSBjb25maWd1cmUgV2luZSB0bwogICAgICAgIHVzZSB0aGUgYnVpbHQtaW4gb2RiYzMyLmRsbCwgdGhhdCBXaW5lIERMTCB3aWxsIGludGVyZmFjZSB0byB5b3VyCiAgICAgICAgVW5peCBPREJDIHBhY2thZ2UgYW5kIGxldCB0aGF0IGRvIHRoZSB3b3JrLCB3aGVyZWFzIGlmIHlvdSBjb25maWd1cmUKICAgICAgICBXaW5lIHRvIHVzZSB0aGUgbmF0aXZlIG9kYmMzMi5kbGwgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBuYXRpdmUKICAgICAgICBPREJDMzIgZHJpdmVycyBldGMuCiAgICAgIDwvcGFyYT4KICAgICAgPHNlY3QyPgogICAgICAgIDx0aXRsZT5Vc2luZyBhIFVuaXggT0RCQyBzeXN0ZW0gd2l0aCBXaW5lPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBmaXJzdCBzdGVwIGluIHVzaW5nIGEgVW5peCBPREJDIHN5c3RlbSB3aXRoIFdpbmUgaXMsIG9mIGNvdXJzZSwKICAgICAgICAgIHRvIGdldCB0aGUgVW5peCBPREJDIHN5c3RlbSB3b3JraW5nIGl0c2VsZi4gIFRoaXMgbWF5IGludm9sdmUKICAgICAgICAgIGRvd25sb2FkaW5nIGNvZGUgb3IgUlBNcyBldGMuICBUaGVyZSBhcmUgc2V2ZXJhbCBVbml4IE9EQkMgc3lzdGVtcwogICAgICAgICAgYXZhaWxhYmxlOyB0aGUgb25lIHRoZSBhdXRob3IgaXMgdXNlZCB0byBpcyB1bml4T0RCQyAod2l0aCB0aGUKICAgICAgICAgIElCTSBEQjIgZHJpdmVyKS4gVHlwaWNhbGx5IHN1Y2ggc3lzdGVtcyB3aWxsIGluY2x1ZGUgYSB0b29sLCBzdWNoCiAgICAgICAgICBhcyA8Y29tbWFuZD5pc3FsPC9jb21tYW5kPiwgd2hpY2ggd2lsbCBhbGxvdyB5b3UgdG8gYWNjZXNzIHRoZSBkYXRhIGZyb20gdGhlIGNvbW1hbmQKICAgICAgICAgIGxpbmUgc28gdGhhdCB5b3UgY2FuIGNoZWNrIHRoYXQgdGhlIHN5c3RlbSBpcyB3b3JraW5nLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaG9vayB0aGUgVW5peCBPREJDIGxpYnJhcnkgdG8gdGhlIHdpbmUgYnVpbHQtaW4KICAgICAgICAgIG9kYmMzMiBETEwuICBUaGUgYnVpbHQtaW4gb2RiYzMyIChjdXJyZW50bHkpIGxvb2tzIHRvIHRoZQogICAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgPGVtcGhhc2lzPkxJQl9PREJDX0RSSVZFUl9NQU5BR0VSPC9lbXBoYXNpcz4KICAgICAgICAgIGZvciB0aGUgbmFtZSBvZiB0aGUgT0RCQyBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUgaW4gdGhlIGF1dGhvcidzCiAgICAgICAgICAuYmFzaHJjIGZpbGUgaXMgdGhlIGxpbmU6CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwcm9ncmFtbGlzdGluZz4KZXhwb3J0IExJQl9PREJDX0RSSVZFUl9NQU5BR0VSPS91c3IvbGliL2xpYm9kYmMuc28uMS4wLjAKICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgogICAgICAgIDxwYXJhPgogICAgICAgICAgSWYgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IHRoZW4gaXQgbG9va3MgZm9yIGEKICAgICAgICAgIGxpYnJhcnkgY2FsbGVkIGxpYm9kYmMuc28gYW5kIHNvIHlvdSBjYW4gYWRkIGEgc3ltYm9saWMgbGluayB0bwogICAgICAgICAgZXF1YXRlIHRoYXQgdG8geW91ciBvd24gbGlicmFyeS4gIEZvciBleGFtcGxlIGFzIHJvb3QgeW91IGNvdWxkCiAgICAgICAgICBydW4gdGhlIGNvbW1hbmRzOgogICAgICAgIDwvcGFyYT4KICAgICAgICA8c2NyZWVuPgo8cHJvbXB0PiMgPC9wcm9tcHQ+PHVzZXJpbnB1dD5sbiAtcyBsaWJvZGJjLnNvLjEuMC4wIC91c3IvbGliL2xpYm9kYmMuc288L3VzZXJpbnB1dD4KPHByb21wdD4jIDwvcHJvbXB0Pjx1c2VyaW5wdXQ+L3NiaW4vbGRjb25maWc8L3VzZXJpbnB1dD4KICAgICAgICA8L3NjcmVlbj4KICAgICAgICA8cGFyYT4KICAgICAgICAgIFRoZSBsYXN0IHN0ZXAgaW4gY29uZmlndXJpbmcgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBXaW5lIGlzIHNldCB1cAogICAgICAgICAgdG8gcnVuIHRoZSBidWlsdC1pbiB2ZXJzaW9uIG9mIG9kYmMzMi5kbGwsIGJ5IG1vZGlmeWluZyB0aGUgRExMCiAgICAgICAgICBjb25maWd1cmF0aW9uLiAgVGhpcyBidWlsdC1pbiBETEwgbWVyZWx5IGFjdHMgYXMgYSBzdHViIGJldHdlZW4gdGhlCiAgICAgICAgICBjYWxsaW5nIGNvZGUgYW5kIHRoZSBVbml4IE9EQkMgbGlicmFyeS4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgICBJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgdGhlbiB5b3UgY2FuIHVzZSB0aGUgZGVidWdtc2cgY2hhbm5lbAogICAgICAgICAgb2RiYzMyIHRvIHRyYWNlIHdoYXQgaXMgaGFwcGVuaW5nLiAgT25lIHdvcmQgb2Ygd2FybmluZy4gIFNvbWUKICAgICAgICAgIHByb2dyYW1zIGFjdHVhbGx5IGNoZWF0IGEgbGl0dGxlIGFuZCBieXBhc3MgdGhlIE9EQkMgbGlicmFyeS4gIEZvcgogICAgICAgICAgZXhhbXBsZSB0aGUgQ3J5c3RhbCBSZXBvcnRzIGVuZ2luZSBnb2VzIHRvIHRoZSByZWdpc3RyeSB0byBjaGVjayBvbgogICAgICAgICAgdGhlIERTTi4gIFRoZSBmaXggZm9yIHRoaXMgaXMgZG9jdW1lbnRlZCBhdCB1bml4T0RCQydzIHNpdGUgd2hlcmUKICAgICAgICAgIHRoZXJlIGlzIGEgc2VjdGlvbiBvbiB1c2luZyB1bml4T0RCQyB3aXRoIFdpbmUuCiAgICAgICAgPC9wYXJhPgogICAgICA8L3NlY3QyPgogICAgICA8c2VjdDI+CiAgICAgICAgPHRpdGxlPlVzaW5nIFdpbmRvd3MgT0RCQyBkcml2ZXJzPC90aXRsZT4KICAgICAgICA8cGFyYT4KICAgICAgICAgIERvZXMgYW55b25lIGFjdHVhbGx5IGhhdmUgYW55IGV4cGVyaWVuY2Ugb2YgdGhpcyBhbmQgYW55dGhpbmcgdG8KICAgICAgICAgIGFkZD8KICAgICAgICA8L3BhcmE+CiAgICAgIDwvc2VjdDI+CiAgICA8L3NlY3QxPgoKICA8L2NoYXB0ZXI+Cgo8IS0tIEtlZXAgdGhpcyBjb21tZW50IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKTG9jYWwgdmFyaWFibGVzOgptb2RlOiBzZ21sCnNnbWwtcGFyZW50LWRvY3VtZW50Oigid2luZS11c2VyLnNnbWwiICJzZXQiICJib29rIiAiY2hhcHRlciIgIiIpCkVuZDoKLS0+Cg==