XGlucHV0IHRleGluZm8gQGMgLSotIHRleGluZm8gLSotCkBjICUqKnN0YXJ0IG9mIGhlYWRlcgpAc2V0ZmlsZW5hbWUgcWVtdS1kb2MuaW5mbwpAc2V0dGl0bGUgUUVNVSBFbXVsYXRvciBVc2VyIERvY3VtZW50YXRpb24KQGV4YW1wbGVpbmRlbnQgMApAcGFyYWdyYXBoaW5kZW50IDAKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGlmdGV4CkB0aXRsZXBhZ2UKQHNwIDcKQGNlbnRlciBAdGl0bGVmb250e1FFTVUgRW11bGF0b3J9CkBzcCAxCkBjZW50ZXIgQHRpdGxlZm9udHtVc2VyIERvY3VtZW50YXRpb259CkBzcCAzCkBlbmQgdGl0bGVwYWdlCkBlbmQgaWZ0ZXgKCkBpZm5vdHRleApAbm9kZSBUb3AKQHRvcAoKQG1lbnUKKiBJbnRyb2R1Y3Rpb246OgoqIEluc3RhbGxhdGlvbjo6CiogUUVNVSBQQyBTeXN0ZW0gZW11bGF0b3I6OgoqIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0czo6CiogUUVNVSBVc2VyIHNwYWNlIGVtdWxhdG9yOjoKKiBjb21waWxhdGlvbjo6IENvbXBpbGF0aW9uIGZyb20gdGhlIHNvdXJjZXMKKiBJbmRleDo6CkBlbmQgbWVudQpAZW5kIGlmbm90dGV4CgpAY29udGVudHMKCkBub2RlIEludHJvZHVjdGlvbgpAY2hhcHRlciBJbnRyb2R1Y3Rpb24KCkBtZW51CiogaW50cm9fZmVhdHVyZXM6OiBGZWF0dXJlcwpAZW5kIG1lbnUKCkBub2RlIGludHJvX2ZlYXR1cmVzCkBzZWN0aW9uIEZlYXR1cmVzCgpRRU1VIGlzIGEgRkFTVCEgcHJvY2Vzc29yIGVtdWxhdG9yIHVzaW5nIGR5bmFtaWMgdHJhbnNsYXRpb24gdG8KYWNoaWV2ZSBnb29kIGVtdWxhdGlvbiBzcGVlZC4KClFFTVUgaGFzIHR3byBvcGVyYXRpbmcgbW9kZXM6CgpAaXRlbWl6ZSBAbWludXMKCkBpdGVtCkZ1bGwgc3lzdGVtIGVtdWxhdGlvbi4gSW4gdGhpcyBtb2RlLCBRRU1VIGVtdWxhdGVzIGEgZnVsbCBzeXN0ZW0gKGZvcgpleGFtcGxlIGEgUEMpLCBpbmNsdWRpbmcgb25lIG9yIHNldmVyYWwgcHJvY2Vzc29ycyBhbmQgdmFyaW91cwpwZXJpcGhlcmFscy4gSXQgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGRpZmZlcmVudCBPcGVyYXRpbmcgU3lzdGVtcwp3aXRob3V0IHJlYm9vdGluZyB0aGUgUEMgb3IgdG8gZGVidWcgc3lzdGVtIGNvZGUuCgpAaXRlbQpVc2VyIG1vZGUgZW11bGF0aW9uLiBJbiB0aGlzIG1vZGUsIFFFTVUgY2FuIGxhdW5jaApwcm9jZXNzZXMgY29tcGlsZWQgZm9yIG9uZSBDUFUgb24gYW5vdGhlciBDUFUuIEl0IGNhbiBiZSB1c2VkIHRvCmxhdW5jaCB0aGUgV2luZSBXaW5kb3dzIEFQSSBlbXVsYXRvciAoQHVybHtodHRwOi8vd3d3LndpbmVocS5vcmd9KSBvcgp0byBlYXNlIGNyb3NzLWNvbXBpbGF0aW9uIGFuZCBjcm9zcy1kZWJ1Z2dpbmcuCgpAZW5kIGl0ZW1pemUKClFFTVUgY2FuIHJ1biB3aXRob3V0IGFuIGhvc3Qga2VybmVsIGRyaXZlciBhbmQgeWV0IGdpdmVzIGFjY2VwdGFibGUKcGVyZm9ybWFuY2UuCgpGb3Igc3lzdGVtIGVtdWxhdGlvbiwgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSB0YXJnZXRzIGFyZSBzdXBwb3J0ZWQ6CkBpdGVtaXplCkBpdGVtIFBDICh4ODYgb3IgeDg2XzY0IHByb2Nlc3NvcikKQGl0ZW0gSVNBIFBDIChvbGQgc3R5bGUgUEMgd2l0aG91dCBQQ0kgYnVzKQpAaXRlbSBQUkVQIChQb3dlclBDIHByb2Nlc3NvcikKQGl0ZW0gRzMgQmVpZ2UgUG93ZXJNYWMgKFBvd2VyUEMgcHJvY2Vzc29yKQpAaXRlbSBNYWM5OSBQb3dlck1hYyAoUG93ZXJQQyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBTdW40bS9TdW40Yy9TdW40ZCAoMzItYml0IFNwYXJjIHByb2Nlc3NvcikKQGl0ZW0gU3VuNHUvU3VuNHYgKDY0LWJpdCBTcGFyYyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBNYWx0YSBib2FyZCAoMzItYml0IGFuZCA2NC1iaXQgTUlQUyBwcm9jZXNzb3JzKQpAaXRlbSBNSVBTIE1hZ251bSAoNjQtYml0IE1JUFMgcHJvY2Vzc29yKQpAaXRlbSBBUk0gSW50ZWdyYXRvci9DUCAoQVJNKQpAaXRlbSBBUk0gVmVyc2F0aWxlIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBBUk0gUmVhbFZpZXcgRW11bGF0aW9uL1BsYXRmb3JtIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBTcGl0eiwgQWtpdGEsIEJvcnpvaSwgVGVycmllciBhbmQgVG9zYSBQREFzIChQWEEyNzAgcHJvY2Vzc29yKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTODExRVZCIChBUk0gQ29ydGV4LU0zKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTNjk2NUVWQiAoQVJNIENvcnRleC1NMykKQGl0ZW0gRnJlZXNjYWxlIE1DRjUyMDhFVkIgKENvbGRGaXJlIFYyKS4KQGl0ZW0gQXJuZXdzaCBNQ0Y1MjA2IGV2YWx1YXRpb24gYm9hcmQgKENvbGRGaXJlIFYyKS4KQGl0ZW0gUGFsbSBUdW5nc3RlbnxFIFBEQSAoT01BUDMxMCBwcm9jZXNzb3IpCkBpdGVtIE44MDAgYW5kIE44MTAgdGFibGV0cyAoT01BUDI0MjAgcHJvY2Vzc29yKQpAaXRlbSBNdXNpY1BhbCAoTVY4OFc4NjE4IEFSTSBwcm9jZXNzb3IpCkBpdGVtIEd1bXN0aXggIkNvbm5leCIgYW5kICJWZXJkZXgiIG1vdGhlcmJvYXJkcyAoUFhBMjU1LzI3MCkuCkBpdGVtIFNpZW1lbnMgU1gxIHNtYXJ0cGhvbmUgKE9NQVAzMTAgcHJvY2Vzc29yKQpAaXRlbSBTeWJvcmcgU1ZQIGJhc2UgbW9kZWwgKEFSTSBDb3J0ZXgtQTgpLgpAaXRlbSBBWElTLURldmJvYXJkODggKENSSVN2MzIgRVRSQVgtRlMpLgpAaXRlbSBQZXRhbG9naXggU3BhcnRhbiAzYURTUDE4MDAgTU1VIHJlZiBkZXNpZ24gKE1pY3JvQmxhemUpLgpAZW5kIGl0ZW1pemUKCkZvciB1c2VyIGVtdWxhdGlvbiwgeDg2LCBQb3dlclBDLCBBUk0sIDMyLWJpdCBNSVBTLCBTcGFyYzMyLzY0LCBDb2xkRmlyZShtNjhrKSwgQ1JJU3YzMiBhbmQgTWljcm9CbGF6ZSBDUFVzIGFyZSBzdXBwb3J0ZWQuCgpAbm9kZSBJbnN0YWxsYXRpb24KQGNoYXB0ZXIgSW5zdGFsbGF0aW9uCgpJZiB5b3Ugd2FudCB0byBjb21waWxlIFFFTVUgeW91cnNlbGYsIHNlZSBAcmVme2NvbXBpbGF0aW9ufS4KCkBtZW51CiogaW5zdGFsbF9saW51eDo6ICAgTGludXgKKiBpbnN0YWxsX3dpbmRvd3M6OiBXaW5kb3dzCiogaW5zdGFsbF9tYWM6OiAgICAgTWFjaW50b3NoCkBlbmQgbWVudQoKQG5vZGUgaW5zdGFsbF9saW51eApAc2VjdGlvbiBMaW51eAoKSWYgYSBwcmVjb21waWxlZCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBmb3IgeW91ciBkaXN0cmlidXRpb24gLSB5b3UganVzdApoYXZlIHRvIGluc3RhbGwgaXQuIE90aGVyd2lzZSwgc2VlIEByZWZ7Y29tcGlsYXRpb259LgoKQG5vZGUgaW5zdGFsbF93aW5kb3dzCkBzZWN0aW9uIFdpbmRvd3MKCkRvd25sb2FkIHRoZSBleHBlcmltZW50YWwgYmluYXJ5IGluc3RhbGxlciBhdApAdXJse2h0dHA6Ly93d3cuZnJlZS5vc3pvby5vcmcvQC9kb3dubG9hZC5odG1sfS4KCkBub2RlIGluc3RhbGxfbWFjCkBzZWN0aW9uIE1hYyBPUyBYCgpEb3dubG9hZCB0aGUgZXhwZXJpbWVudGFsIGJpbmFyeSBpbnN0YWxsZXIgYXQKQHVybHtodHRwOi8vd3d3LmZyZWUub3N6b28ub3JnL0AvZG93bmxvYWQuaHRtbH0uCgpAbm9kZSBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgpAY2hhcHRlciBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgoKQG1lbnUKKiBwY3N5c19pbnRyb2R1Y3Rpb246OiBJbnRyb2R1Y3Rpb24KKiBwY3N5c19xdWlja3N0YXJ0OjogICBRdWljayBTdGFydAoqIHNlY19pbnZvY2F0aW9uOjogICAgIEludm9jYXRpb24KKiBwY3N5c19rZXlzOjogICAgICAgICBLZXlzCiogcGNzeXNfbW9uaXRvcjo6ICAgICAgUUVNVSBNb25pdG9yCiogZGlza19pbWFnZXM6OiAgICAgICAgRGlzayBJbWFnZXMKKiBwY3N5c19uZXR3b3JrOjogICAgICBOZXR3b3JrIGVtdWxhdGlvbgoqIGRpcmVjdF9saW51eF9ib290OjogIERpcmVjdCBMaW51eCBCb290CiogcGNzeXNfdXNiOjogICAgICAgICAgVVNCIGVtdWxhdGlvbgoqIHZuY19zZWN1cml0eTo6ICAgICAgIFZOQyBzZWN1cml0eQoqIGdkYl91c2FnZTo6ICAgICAgICAgIEdEQiB1c2FnZQoqIHBjc3lzX29zX3NwZWNpZmljOjogIFRhcmdldCBPUyBzcGVjaWZpYyBpbmZvcm1hdGlvbgpAZW5kIG1lbnUKCkBub2RlIHBjc3lzX2ludHJvZHVjdGlvbgpAc2VjdGlvbiBJbnRyb2R1Y3Rpb24KCkBjIG1hbiBiZWdpbiBERVNDUklQVElPTgoKVGhlIFFFTVUgUEMgU3lzdGVtIGVtdWxhdG9yIHNpbXVsYXRlcyB0aGUKZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCmk0NDBGWCBob3N0IFBDSSBicmlkZ2UgYW5kIFBJSVgzIFBDSSB0byBJU0EgYnJpZGdlCkBpdGVtCkNpcnJ1cyBDTEdEIDU0NDYgUENJIFZHQSBjYXJkIG9yIGR1bW15IFZHQSBjYXJkIHdpdGggQm9jaHMgVkVTQQpleHRlbnNpb25zIChoYXJkd2FyZSBsZXZlbCwgaW5jbHVkaW5nIGFsbCBub24gc3RhbmRhcmQgbW9kZXMpLgpAaXRlbQpQUy8yIG1vdXNlIGFuZCBrZXlib2FyZApAaXRlbQoyIFBDSSBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRpc2sKQGl0ZW0KUENJIGFuZCBJU0EgbmV0d29yayBhZGFwdGVycwpAaXRlbQpTZXJpYWwgcG9ydHMKQGl0ZW0KQ3JlYXRpdmUgU291bmRCbGFzdGVyIDE2IHNvdW5kIGNhcmQKQGl0ZW0KRU5TT05JUSBBdWRpb1BDSSBFUzEzNzAgc291bmQgY2FyZApAaXRlbQpJbnRlbCA4MjgwMUFBIEFDOTcgQXVkaW8gY29tcGF0aWJsZSBzb3VuZCBjYXJkCkBpdGVtCkFkbGliKE9QTDIpIC0gWWFtYWhhIFlNMzgxMiBjb21wYXRpYmxlIGNoaXAKQGl0ZW0KR3JhdmlzIFVsdHJhc291bmQgR0YxIHNvdW5kIGNhcmQKQGl0ZW0KQ1M0MjMxQSBjb21wYXRpYmxlIHNvdW5kIGNhcmQKQGl0ZW0KUENJIFVIQ0kgVVNCIGNvbnRyb2xsZXIgYW5kIGEgdmlydHVhbCBVU0IgaHViLgpAZW5kIGl0ZW1pemUKClNNUCBpcyBzdXBwb3J0ZWQgd2l0aCB1cCB0byAyNTUgQ1BVcy4KCk5vdGUgdGhhdCBhZGxpYiwgZ3VzIGFuZCBjczQyMzFhIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIFFFTVUgd2FzCmNvbmZpZ3VyZWQgd2l0aCAtLWF1ZGlvLWNhcmQtbGlzdCBvcHRpb24gY29udGFpbmluZyB0aGUgbmFtZShzKSBvZgpyZXF1aXJlZCBjYXJkKHMpLgoKUUVNVSB1c2VzIHRoZSBQQyBCSU9TIGZyb20gdGhlIEJvY2hzIHByb2plY3QgYW5kIHRoZSBQbGV4ODYvQm9jaHMgTEdQTApWR0EgQklPUy4KClFFTVUgdXNlcyBZTTM4MTIgZW11bGF0aW9uIGJ5IFRhdHN1eXVraSBTYXRvaC4KClFFTVUgdXNlcyBHVVMgZW11bGF0aW9uKEdVU0VNVTMyIEB1cmx7aHR0cDovL3d3dy5kZWlubWVpc3Rlci5kZS9ndXNlbXUvfSkKYnkgVGlib3IgIlRTIiBTY2jDvHR6LgoKTm90IHRoYXQsIGJ5IGRlZmF1bHQsIEdVUyBzaGFyZXMgSVJRKDcpIHdpdGggcGFyYWxsZWwgcG9ydHMgYW5kIHNvCnFlbXUgbXVzdCBiZSB0b2xkIHRvIG5vdCBoYXZlIHBhcmFsbGVsIHBvcnRzIHRvIGhhdmUgd29ya2luZyBHVVMKCkBleGFtcGxlCnFlbXUgZG9zLmltZyAtc291bmRodyBndXMgLXBhcmFsbGVsIG5vbmUKQGVuZCBleGFtcGxlCgpBbHRlcm5hdGl2ZWx5OgpAZXhhbXBsZQpxZW11IGRvcy5pbWcgLWRldmljZSBndXMsaXJxPTUKQGVuZCBleGFtcGxlCgpPciBzb21lIG90aGVyIHVuY2xhaW1lZCBJUlEuCgpDUzQyMzFBIGlzIHRoZSBjaGlwIHVzZWQgaW4gV2luZG93cyBTb3VuZCBTeXN0ZW0gYW5kIEdVU01BWCBwcm9kdWN0cwoKQGMgbWFuIGVuZAoKQG5vZGUgcGNzeXNfcXVpY2tzdGFydApAc2VjdGlvbiBRdWljayBTdGFydAoKRG93bmxvYWQgYW5kIHVuY29tcHJlc3MgdGhlIGxpbnV4IGltYWdlIChAZmlsZXtsaW51eC5pbWd9KSBhbmQgdHlwZToKCkBleGFtcGxlCnFlbXUgbGludXguaW1nCkBlbmQgZXhhbXBsZQoKTGludXggc2hvdWxkIGJvb3QgYW5kIGdpdmUgeW91IGEgcHJvbXB0LgoKQG5vZGUgc2VjX2ludm9jYXRpb24KQHNlY3Rpb24gSW52b2NhdGlvbgoKQGV4YW1wbGUKQGMgbWFuIGJlZ2luIFNZTk9QU0lTCnVzYWdlOiBxZW11IFtvcHRpb25zXSBbQHZhcntkaXNrX2ltYWdlfV0KQGMgbWFuIGVuZApAZW5kIGV4YW1wbGUKCkBjIG1hbiBiZWdpbiBPUFRJT05TCkB2YXJ7ZGlza19pbWFnZX0gaXMgYSByYXcgaGFyZCBkaXNrIGltYWdlIGZvciBJREUgaGFyZCBkaXNrIDAuIFNvbWUKdGFyZ2V0cyBkbyBub3QgbmVlZCBhIGRpc2sgaW1hZ2UuCgpAaW5jbHVkZSBxZW11LW9wdGlvbnMudGV4aQoKQGMgbWFuIGVuZAoKQG5vZGUgcGNzeXNfa2V5cwpAc2VjdGlvbiBLZXlzCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwoKRHVyaW5nIHRoZSBncmFwaGljYWwgZW11bGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGtleXM6CkB0YWJsZSBAa2V5CkBpdGVtIEN0cmwtQWx0LWYKVG9nZ2xlIGZ1bGwgc2NyZWVuCgpAaXRlbSBDdHJsLUFsdC11ClJlc3RvcmUgdGhlIHNjcmVlbidzIHVuLXNjYWxlZCBkaW1lbnNpb25zCgpAaXRlbSBDdHJsLUFsdC1uClN3aXRjaCB0byB2aXJ0dWFsIGNvbnNvbGUgJ24nLiBTdGFuZGFyZCBjb25zb2xlIG1hcHBpbmdzIGFyZToKQHRhYmxlIEBlbXBoCkBpdGVtIDEKVGFyZ2V0IHN5c3RlbSBkaXNwbGF5CkBpdGVtIDIKTW9uaXRvcgpAaXRlbSAzClNlcmlhbCBwb3J0CkBlbmQgdGFibGUKCkBpdGVtIEN0cmwtQWx0ClRvZ2dsZSBtb3VzZSBhbmQga2V5Ym9hcmQgZ3JhYi4KQGVuZCB0YWJsZQoKSW4gdGhlIHZpcnR1YWwgY29uc29sZXMsIHlvdSBjYW4gdXNlIEBrZXl7Q3RybC1VcH0sIEBrZXl7Q3RybC1Eb3dufSwKQGtleXtDdHJsLVBhZ2VVcH0gYW5kIEBrZXl7Q3RybC1QYWdlRG93bn0gdG8gbW92ZSBpbiB0aGUgYmFjayBsb2cuCgpEdXJpbmcgZW11bGF0aW9uLCBpZiB5b3UgYXJlIHVzaW5nIHRoZSBAb3B0aW9uey1ub2dyYXBoaWN9IG9wdGlvbiwgdXNlCkBrZXl7Q3RybC1hIGh9IHRvIGdldCB0ZXJtaW5hbCBjb21tYW5kczoKCkB0YWJsZSBAa2V5CkBpdGVtIEN0cmwtYSBoCkBpdGVtIEN0cmwtYSA/ClByaW50IHRoaXMgaGVscApAaXRlbSBDdHJsLWEgeApFeGl0IGVtdWxhdG9yCkBpdGVtIEN0cmwtYSBzClNhdmUgZGlzayBkYXRhIGJhY2sgdG8gZmlsZSAoaWYgLXNuYXBzaG90KQpAaXRlbSBDdHJsLWEgdApUb2dnbGUgY29uc29sZSB0aW1lc3RhbXBzCkBpdGVtIEN0cmwtYSBiClNlbmQgYnJlYWsgKG1hZ2ljIHN5c3JxIGluIExpbnV4KQpAaXRlbSBDdHJsLWEgYwpTd2l0Y2ggYmV0d2VlbiBjb25zb2xlIGFuZCBtb25pdG9yCkBpdGVtIEN0cmwtYSBDdHJsLWEKU2VuZCBDdHJsLWEKQGVuZCB0YWJsZQpAYyBtYW4gZW5kCgpAaWdub3JlCgpAYyBtYW4gYmVnaW4gU0VFQUxTTwpUaGUgSFRNTCBkb2N1bWVudGF0aW9uIG9mIFFFTVUgZm9yIG1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBhbmQgTGludXgKdXNlciBtb2RlIGVtdWxhdG9yIGludm9jYXRpb24uCkBjIG1hbiBlbmQKCkBjIG1hbiBiZWdpbiBBVVRIT1IKRmFicmljZSBCZWxsYXJkCkBjIG1hbiBlbmQKCkBlbmQgaWdub3JlCgpAbm9kZSBwY3N5c19tb25pdG9yCkBzZWN0aW9uIFFFTVUgTW9uaXRvcgoKVGhlIFFFTVUgbW9uaXRvciBpcyB1c2VkIHRvIGdpdmUgY29tcGxleCBjb21tYW5kcyB0byB0aGUgUUVNVQplbXVsYXRvci4gWW91IGNhbiB1c2UgaXQgdG86CgpAaXRlbWl6ZSBAbWludXMKCkBpdGVtClJlbW92ZSBvciBpbnNlcnQgcmVtb3ZhYmxlIG1lZGlhIGltYWdlcwooc3VjaCBhcyBDRC1ST00gb3IgZmxvcHBpZXMpLgoKQGl0ZW0KRnJlZXplL3VuZnJlZXplIHRoZSBWaXJ0dWFsIE1hY2hpbmUgKFZNKSBhbmQgc2F2ZSBvciByZXN0b3JlIGl0cyBzdGF0ZQpmcm9tIGEgZGlzayBmaWxlLgoKQGl0ZW0gSW5zcGVjdCB0aGUgVk0gc3RhdGUgd2l0aG91dCBhbiBleHRlcm5hbCBkZWJ1Z2dlci4KCkBlbmQgaXRlbWl6ZQoKQHN1YnNlY3Rpb24gQ29tbWFuZHMKClRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKCkBpbmNsdWRlIHFlbXUtbW9uaXRvci50ZXhpCgpAc3Vic2VjdGlvbiBJbnRlZ2VyIGV4cHJlc3Npb25zCgpUaGUgbW9uaXRvciB1bmRlcnN0YW5kcyBpbnRlZ2VycyBleHByZXNzaW9ucyBmb3IgZXZlcnkgaW50ZWdlcgphcmd1bWVudC4gWW91IGNhbiB1c2UgcmVnaXN0ZXIgbmFtZXMgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBzcGVjaWZpY3MKQ1BVIHJlZ2lzdGVycyBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIEBlbXBoeyR9LgoKQG5vZGUgZGlza19pbWFnZXMKQHNlY3Rpb24gRGlzayBJbWFnZXMKClNpbmNlIHZlcnNpb24gMC42LjEsIFFFTVUgc3VwcG9ydHMgbWFueSBkaXNrIGltYWdlIGZvcm1hdHMsIGluY2x1ZGluZwpncm93YWJsZSBkaXNrIGltYWdlcyAodGhlaXIgc2l6ZSBpbmNyZWFzZSBhcyBub24gZW1wdHkgc2VjdG9ycyBhcmUKd3JpdHRlbiksIGNvbXByZXNzZWQgYW5kIGVuY3J5cHRlZCBkaXNrIGltYWdlcy4gVmVyc2lvbiAwLjguMyBhZGRlZAp0aGUgbmV3IHFjb3cyIGRpc2sgaW1hZ2UgZm9ybWF0IHdoaWNoIGlzIGVzc2VudGlhbCB0byBzdXBwb3J0IFZNCnNuYXBzaG90cy4KCkBtZW51CiogZGlza19pbWFnZXNfcXVpY2tzdGFydDo6ICAgIFF1aWNrIHN0YXJ0IGZvciBkaXNrIGltYWdlIGNyZWF0aW9uCiogZGlza19pbWFnZXNfc25hcHNob3RfbW9kZTo6IFNuYXBzaG90IG1vZGUKKiB2bV9zbmFwc2hvdHM6OiAgICAgICAgICAgICAgVk0gc25hcHNob3RzCiogcWVtdV9pbWdfaW52b2NhdGlvbjo6ICAgICAgIHFlbXUtaW1nIEludm9jYXRpb24KKiBxZW11X25iZF9pbnZvY2F0aW9uOjogICAgICAgcWVtdS1uYmQgSW52b2NhdGlvbgoqIGhvc3RfZHJpdmVzOjogICAgICAgICAgICAgICBVc2luZyBob3N0IGRyaXZlcwoqIGRpc2tfaW1hZ2VzX2ZhdF9pbWFnZXM6OiAgICBWaXJ0dWFsIEZBVCBkaXNrIGltYWdlcwoqIGRpc2tfaW1hZ2VzX25iZDo6ICAgICAgICAgICBOQkQgYWNjZXNzCkBlbmQgbWVudQoKQG5vZGUgZGlza19pbWFnZXNfcXVpY2tzdGFydApAc3Vic2VjdGlvbiBRdWljayBzdGFydCBmb3IgZGlzayBpbWFnZSBjcmVhdGlvbgoKWW91IGNhbiBjcmVhdGUgYSBkaXNrIGltYWdlIHdpdGggdGhlIGNvbW1hbmQ6CkBleGFtcGxlCnFlbXUtaW1nIGNyZWF0ZSBteWltYWdlLmltZyBteXNpemUKQGVuZCBleGFtcGxlCndoZXJlIEB2YXJ7bXlpbWFnZS5pbWd9IGlzIHRoZSBkaXNrIGltYWdlIGZpbGVuYW1lIGFuZCBAdmFye215c2l6ZX0gaXMgaXRzCnNpemUgaW4ga2lsb2J5dGVzLiBZb3UgY2FuIGFkZCBhbiBAY29kZXtNfSBzdWZmaXggdG8gZ2l2ZSB0aGUgc2l6ZSBpbgptZWdhYnl0ZXMgYW5kIGEgQGNvZGV7R30gc3VmZml4IGZvciBnaWdhYnl0ZXMuCgpTZWUgQHJlZntxZW11X2ltZ19pbnZvY2F0aW9ufSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCkBub2RlIGRpc2tfaW1hZ2VzX3NuYXBzaG90X21vZGUKQHN1YnNlY3Rpb24gU25hcHNob3QgbW9kZQoKSWYgeW91IHVzZSB0aGUgb3B0aW9uIEBvcHRpb257LXNuYXBzaG90fSwgYWxsIGRpc2sgaW1hZ2VzIGFyZQpjb25zaWRlcmVkIGFzIHJlYWQgb25seS4gV2hlbiBzZWN0b3JzIGluIHdyaXR0ZW4sIHRoZXkgYXJlIHdyaXR0ZW4gaW4KYSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIGluIEBmaWxley90bXB9LiBZb3UgY2FuIGhvd2V2ZXIgZm9yY2UgdGhlCndyaXRlIGJhY2sgdG8gdGhlIHJhdyBkaXNrIGltYWdlcyBieSB1c2luZyB0aGUgQGNvZGV7Y29tbWl0fSBtb25pdG9yCmNvbW1hbmQgKG9yIEBrZXl7Qy1hIHN9IGluIHRoZSBzZXJpYWwgY29uc29sZSkuCgpAbm9kZSB2bV9zbmFwc2hvdHMKQHN1YnNlY3Rpb24gVk0gc25hcHNob3RzCgpWTSBzbmFwc2hvdHMgYXJlIHNuYXBzaG90cyBvZiB0aGUgY29tcGxldGUgdmlydHVhbCBtYWNoaW5lIGluY2x1ZGluZwpDUFUgc3RhdGUsIFJBTSwgZGV2aWNlIHN0YXRlIGFuZCB0aGUgY29udGVudCBvZiBhbGwgdGhlIHdyaXRhYmxlCmRpc2tzLiBJbiBvcmRlciB0byB1c2UgVk0gc25hcHNob3RzLCB5b3UgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBub24KcmVtb3ZhYmxlIGFuZCB3cml0YWJsZSBibG9jayBkZXZpY2UgdXNpbmcgdGhlIEBjb2Rle3Fjb3cyfSBkaXNrIGltYWdlCmZvcm1hdC4gTm9ybWFsbHkgdGhpcyBkZXZpY2UgaXMgdGhlIGZpcnN0IHZpcnR1YWwgaGFyZCBkcml2ZS4KClVzZSB0aGUgbW9uaXRvciBjb21tYW5kIEBjb2Rle3NhdmV2bX0gdG8gY3JlYXRlIGEgbmV3IFZNIHNuYXBzaG90IG9yCnJlcGxhY2UgYW4gZXhpc3Rpbmcgb25lLiBBIGh1bWFuIHJlYWRhYmxlIG5hbWUgY2FuIGJlIGFzc2lnbmVkIHRvIGVhY2gKc25hcHNob3QgaW4gYWRkaXRpb24gdG8gaXRzIG51bWVyaWNhbCBJRC4KClVzZSBAY29kZXtsb2Fkdm19IHRvIHJlc3RvcmUgYSBWTSBzbmFwc2hvdCBhbmQgQGNvZGV7ZGVsdm19IHRvIHJlbW92ZQphIFZNIHNuYXBzaG90LiBAY29kZXtpbmZvIHNuYXBzaG90c30gbGlzdHMgdGhlIGF2YWlsYWJsZSBzbmFwc2hvdHMKd2l0aCB0aGVpciBhc3NvY2lhdGVkIGluZm9ybWF0aW9uOgoKQGV4YW1wbGUKKHFlbXUpIGluZm8gc25hcHNob3RzClNuYXBzaG90IGRldmljZXM6IGhkYQpTbmFwc2hvdCBsaXN0IChmcm9tIGhkYSk6CklEICAgICAgICBUQUcgICAgICAgICAgICAgICAgIFZNIFNJWkUgICAgICAgICAgICAgICAgREFURSAgICAgICBWTSBDTE9DSwoxICAgICAgICAgc3RhcnQgICAgICAgICAgICAgICAgICAgNDFNIDIwMDYtMDgtMDYgMTI6Mzg6MDIgICAwMDowMDoxNC45NTQKMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwTSAyMDA2LTA4LTA2IDEyOjQzOjI5ICAgMDA6MDA6MTguNjMzCjMgICAgICAgICBtc3lzICAgICAgICAgICAgICAgICAgICA0ME0gMjAwNi0wOC0wNiAxMjo0NDowNCAgIDAwOjAwOjIzLjUxNApAZW5kIGV4YW1wbGUKCkEgVk0gc25hcHNob3QgaXMgbWFkZSBvZiBhIFZNIHN0YXRlIGluZm8gKGl0cyBzaXplIGlzIHNob3duIGluCkBjb2Rle2luZm8gc25hcHNob3RzfSkgYW5kIGEgc25hcHNob3Qgb2YgZXZlcnkgd3JpdGFibGUgZGlzayBpbWFnZS4KVGhlIFZNIHN0YXRlIGluZm8gaXMgc3RvcmVkIGluIHRoZSBmaXJzdCBAY29kZXtxY293Mn0gbm9uIHJlbW92YWJsZQphbmQgd3JpdGFibGUgYmxvY2sgZGV2aWNlLiBUaGUgZGlzayBpbWFnZSBzbmFwc2hvdHMgYXJlIHN0b3JlZCBpbgpldmVyeSBkaXNrIGltYWdlLiBUaGUgc2l6ZSBvZiBhIHNuYXBzaG90IGluIGEgZGlzayBpbWFnZSBpcyBkaWZmaWN1bHQKdG8gZXZhbHVhdGUgYW5kIGlzIG5vdCBzaG93biBieSBAY29kZXtpbmZvIHNuYXBzaG90c30gYmVjYXVzZSB0aGUKYXNzb2NpYXRlZCBkaXNrIHNlY3RvcnMgYXJlIHNoYXJlZCBhbW9uZyBhbGwgdGhlIHNuYXBzaG90cyB0byBzYXZlCmRpc2sgc3BhY2UgKG90aGVyd2lzZSBlYWNoIHNuYXBzaG90IHdvdWxkIG5lZWQgYSBmdWxsIGNvcHkgb2YgYWxsIHRoZQpkaXNrIGltYWdlcykuCgpXaGVuIHVzaW5nIHRoZSAodW5yZWxhdGVkKSBAY29kZXstc25hcHNob3R9IG9wdGlvbgooQHJlZntkaXNrX2ltYWdlc19zbmFwc2hvdF9tb2RlfSksIHlvdSBjYW4gYWx3YXlzIG1ha2UgVk0gc25hcHNob3RzLApidXQgdGhleSBhcmUgZGVsZXRlZCBhcyBzb29uIGFzIHlvdSBleGl0IFFFTVUuCgpWTSBzbmFwc2hvdHMgY3VycmVudGx5IGhhdmUgdGhlIGZvbGxvd2luZyBrbm93biBsaW1pdGF0aW9uczoKQGl0ZW1pemUKQGl0ZW0KVGhleSBjYW5ub3QgY29wZSB3aXRoIHJlbW92YWJsZSBkZXZpY2VzIGlmIHRoZXkgYXJlIHJlbW92ZWQgb3IKaW5zZXJ0ZWQgYWZ0ZXIgYSBzbmFwc2hvdCBpcyBkb25lLgpAaXRlbQpBIGZldyBkZXZpY2UgZHJpdmVycyBzdGlsbCBoYXZlIGluY29tcGxldGUgc25hcHNob3Qgc3VwcG9ydCBzbyB0aGVpcgpzdGF0ZSBpcyBub3Qgc2F2ZWQgb3IgcmVzdG9yZWQgcHJvcGVybHkgKGluIHBhcnRpY3VsYXIgVVNCKS4KQGVuZCBpdGVtaXplCgpAbm9kZSBxZW11X2ltZ19pbnZvY2F0aW9uCkBzdWJzZWN0aW9uIEBjb2Rle3FlbXUtaW1nfSBJbnZvY2F0aW9uCgpAaW5jbHVkZSBxZW11LWltZy50ZXhpCgpAbm9kZSBxZW11X25iZF9pbnZvY2F0aW9uCkBzdWJzZWN0aW9uIEBjb2Rle3FlbXUtbmJkfSBJbnZvY2F0aW9uCgpAaW5jbHVkZSBxZW11LW5iZC50ZXhpCgpAbm9kZSBob3N0X2RyaXZlcwpAc3Vic2VjdGlvbiBVc2luZyBob3N0IGRyaXZlcwoKSW4gYWRkaXRpb24gdG8gZGlzayBpbWFnZSBmaWxlcywgUUVNVSBjYW4gZGlyZWN0bHkgYWNjZXNzIGhvc3QKZGV2aWNlcy4gV2UgZGVzY3JpYmUgaGVyZSB0aGUgdXNhZ2UgZm9yIFFFTVUgdmVyc2lvbiA+PSAwLjguMy4KCkBzdWJzdWJzZWN0aW9uIExpbnV4CgpPbiBMaW51eCwgeW91IGNhbiBkaXJlY3RseSB1c2UgdGhlIGhvc3QgZGV2aWNlIGZpbGVuYW1lIGluc3RlYWQgb2YgYQpkaXNrIGltYWdlIGZpbGVuYW1lIHByb3ZpZGVkIHlvdSBoYXZlIGVub3VnaCBwcml2aWxlZ2VzIHRvIGFjY2VzcwppdC4gRm9yIGV4YW1wbGUsIHVzZSBAZmlsZXsvZGV2L2Nkcm9tfSB0byBhY2Nlc3MgdG8gdGhlIENEUk9NIG9yCkBmaWxley9kZXYvZmQwfSBmb3IgdGhlIGZsb3BweS4KCkB0YWJsZSBAY29kZQpAaXRlbSBDRApZb3UgY2FuIHNwZWNpZnkgYSBDRFJPTSBkZXZpY2UgZXZlbiBpZiBubyBDRFJPTSBpcyBsb2FkZWQuIFFFTVUgaGFzCnNwZWNpZmljIGNvZGUgdG8gZGV0ZWN0IENEUk9NIGluc2VydGlvbiBvciByZW1vdmFsLiBDRFJPTSBlamVjdGlvbiBieQp0aGUgZ3Vlc3QgT1MgaXMgc3VwcG9ydGVkLiBDdXJyZW50bHkgb25seSBkYXRhIENEcyBhcmUgc3VwcG9ydGVkLgpAaXRlbSBGbG9wcHkKWW91IGNhbiBzcGVjaWZ5IGEgZmxvcHB5IGRldmljZSBldmVuIGlmIG5vIGZsb3BweSBpcyBsb2FkZWQuIEZsb3BweQpyZW1vdmFsIGlzIGN1cnJlbnRseSBub3QgZGV0ZWN0ZWQgYWNjdXJhdGVseSAoaWYgeW91IGNoYW5nZSBmbG9wcHkKd2l0aG91dCBkb2luZyBmbG9wcHkgYWNjZXNzIHdoaWxlIHRoZSBmbG9wcHkgaXMgbm90IGxvYWRlZCwgdGhlIGd1ZXN0Ck9TIHdpbGwgdGhpbmsgdGhhdCB0aGUgc2FtZSBmbG9wcHkgaXMgbG9hZGVkKS4KQGl0ZW0gSGFyZCBkaXNrcwpIYXJkIGRpc2tzIGNhbiBiZSB1c2VkLiBOb3JtYWxseSB5b3UgbXVzdCBzcGVjaWZ5IHRoZSB3aG9sZSBkaXNrCihAZmlsZXsvZGV2L2hkYn0gaW5zdGVhZCBvZiBAZmlsZXsvZGV2L2hkYjF9KSBzbyB0aGF0IHRoZSBndWVzdCBPUyBjYW4Kc2VlIGl0IGFzIGEgcGFydGl0aW9uZWQgZGlzay4gV0FSTklORzogdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGRvLCBpdAppcyBiZXR0ZXIgdG8gb25seSBtYWtlIFJFQUQtT05MWSBhY2Nlc3NlcyB0byB0aGUgaGFyZCBkaXNrIG90aGVyd2lzZQp5b3UgbWF5IGNvcnJ1cHQgeW91ciBob3N0IGRhdGEgKHVzZSB0aGUgQG9wdGlvbnstc25hcHNob3R9IGNvbW1hbmQKbGluZSBvcHRpb24gb3IgbW9kaWZ5IHRoZSBkZXZpY2UgcGVybWlzc2lvbnMgYWNjb3JkaW5nbHkpLgpAZW5kIHRhYmxlCgpAc3Vic3Vic2VjdGlvbiBXaW5kb3dzCgpAdGFibGUgQGNvZGUKQGl0ZW0gQ0QKVGhlIHByZWZlcnJlZCBzeW50YXggaXMgdGhlIGRyaXZlIGxldHRlciAoZS5nLiBAZmlsZXtkOn0pLiBUaGUKYWx0ZXJuYXRlIHN5bnRheCBAZmlsZXtcXC5cZDp9IGlzIHN1cHBvcnRlZC4gQGZpbGV7L2Rldi9jZHJvbX0gaXMKc3VwcG9ydGVkIGFzIGFuIGFsaWFzIHRvIHRoZSBmaXJzdCBDRFJPTSBkcml2ZS4KCkN1cnJlbnRseSB0aGVyZSBpcyBubyBzcGVjaWZpYyBjb2RlIHRvIGhhbmRsZSByZW1vdmFibGUgbWVkaWEsIHNvIGl0CmlzIGJldHRlciB0byB1c2UgdGhlIEBjb2Rle2NoYW5nZX0gb3IgQGNvZGV7ZWplY3R9IG1vbml0b3IgY29tbWFuZHMgdG8KY2hhbmdlIG9yIGVqZWN0IG1lZGlhLgpAaXRlbSBIYXJkIGRpc2tzCkhhcmQgZGlza3MgY2FuIGJlIHVzZWQgd2l0aCB0aGUgc3ludGF4OiBAZmlsZXtcXC5cUGh5c2ljYWxEcml2ZUB2YXJ7Tn19CndoZXJlIEB2YXJ7Tn0gaXMgdGhlIGRyaXZlIG51bWJlciAoMCBpcyB0aGUgZmlyc3QgaGFyZCBkaXNrKS4KCldBUk5JTkc6IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBkbywgaXQgaXMgYmV0dGVyIHRvIG9ubHkgbWFrZQpSRUFELU9OTFkgYWNjZXNzZXMgdG8gdGhlIGhhcmQgZGlzayBvdGhlcndpc2UgeW91IG1heSBjb3JydXB0IHlvdXIKaG9zdCBkYXRhICh1c2UgdGhlIEBvcHRpb257LXNuYXBzaG90fSBjb21tYW5kIGxpbmUgc28gdGhhdCB0aGUKbW9kaWZpY2F0aW9ucyBhcmUgd3JpdHRlbiBpbiBhIHRlbXBvcmFyeSBmaWxlKS4KQGVuZCB0YWJsZQoKCkBzdWJzdWJzZWN0aW9uIE1hYyBPUyBYCgpAZmlsZXsvZGV2L2Nkcm9tfSBpcyBhbiBhbGlhcyB0byB0aGUgZmlyc3QgQ0RST00uCgpDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgcmVtb3ZhYmxlIG1lZGlhLCBzbyBpdAppcyBiZXR0ZXIgdG8gdXNlIHRoZSBAY29kZXtjaGFuZ2V9IG9yIEBjb2Rle2VqZWN0fSBtb25pdG9yIGNvbW1hbmRzIHRvCmNoYW5nZSBvciBlamVjdCBtZWRpYS4KCkBub2RlIGRpc2tfaW1hZ2VzX2ZhdF9pbWFnZXMKQHN1YnNlY3Rpb24gVmlydHVhbCBGQVQgZGlzayBpbWFnZXMKClFFTVUgY2FuIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdmlydHVhbCBGQVQgZGlzayBpbWFnZSBmcm9tIGEKZGlyZWN0b3J5IHRyZWUuIEluIG9yZGVyIHRvIHVzZSBpdCwganVzdCB0eXBlOgoKQGV4YW1wbGUKcWVtdSBsaW51eC5pbWcgLWhkYiBmYXQ6L215X2RpcmVjdG9yeQpAZW5kIGV4YW1wbGUKClRoZW4geW91IGFjY2VzcyBhY2Nlc3MgdG8gYWxsIHRoZSBmaWxlcyBpbiB0aGUgQGZpbGV7L215X2RpcmVjdG9yeX0KZGlyZWN0b3J5IHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgdGhlbSBpbiBhIGRpc2sgaW1hZ2Ugb3IgdG8gZXhwb3J0CnRoZW0gdmlhIFNBTUJBIG9yIE5GUy4gVGhlIGRlZmF1bHQgYWNjZXNzIGlzIEBlbXBoe3JlYWQtb25seX0uCgpGbG9wcGllcyBjYW4gYmUgZW11bGF0ZWQgd2l0aCB0aGUgQGNvZGV7OmZsb3BweTp9IG9wdGlvbjoKCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1mZGEgZmF0OmZsb3BweTovbXlfZGlyZWN0b3J5CkBlbmQgZXhhbXBsZQoKQSByZWFkL3dyaXRlIHN1cHBvcnQgaXMgYXZhaWxhYmxlIGZvciB0ZXN0aW5nIChiZXRhIHN0YWdlKSB3aXRoIHRoZQpAY29kZXs6cnc6fSBvcHRpb246CgpAZXhhbXBsZQpxZW11IGxpbnV4LmltZyAtZmRhIGZhdDpmbG9wcHk6cnc6L215X2RpcmVjdG9yeQpAZW5kIGV4YW1wbGUKCldoYXQgeW91IHNob3VsZCBAZW1waHtuZXZlcn0gZG86CkBpdGVtaXplCkBpdGVtIHVzZSBub24tQVNDSUkgZmlsZW5hbWVzIDsKQGl0ZW0gdXNlICItc25hcHNob3QiIHRvZ2V0aGVyIHdpdGggIjpydzoiIDsKQGl0ZW0gZXhwZWN0IGl0IHRvIHdvcmsgd2hlbiBsb2Fkdm0naW5nIDsKQGl0ZW0gd3JpdGUgdG8gdGhlIEZBVCBkaXJlY3Rvcnkgb24gdGhlIGhvc3Qgc3lzdGVtIHdoaWxlIGFjY2Vzc2luZyBpdCB3aXRoIHRoZSBndWVzdCBzeXN0ZW0uCkBlbmQgaXRlbWl6ZQoKQG5vZGUgZGlza19pbWFnZXNfbmJkCkBzdWJzZWN0aW9uIE5CRCBhY2Nlc3MKClFFTVUgY2FuIGFjY2VzcyBkaXJlY3RseSB0byBibG9jayBkZXZpY2UgZXhwb3J0ZWQgdXNpbmcgdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlCnByb3RvY29sLgoKQGV4YW1wbGUKcWVtdSBsaW51eC5pbWcgLWhkYiBuYmQ6bXlfbmJkX3NlcnZlci5teWRvbWFpbi5vcmc6MTAyNApAZW5kIGV4YW1wbGUKCklmIHRoZSBOQkQgc2VydmVyIGlzIGxvY2F0ZWQgb24gdGhlIHNhbWUgaG9zdCwgeW91IGNhbiB1c2UgYW4gdW5peCBzb2NrZXQgaW5zdGVhZApvZiBhbiBpbmV0IHNvY2tldDoKCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1oZGIgbmJkOnVuaXg6L3RtcC9teV9zb2NrZXQKQGVuZCBleGFtcGxlCgpJbiB0aGlzIGNhc2UsIHRoZSBibG9jayBkZXZpY2UgbXVzdCBiZSBleHBvcnRlZCB1c2luZyBxZW11LW5iZDoKCkBleGFtcGxlCnFlbXUtbmJkIC0tc29ja2V0PS90bXAvbXlfc29ja2V0IG15X2Rpc2sucWNvdzIKQGVuZCBleGFtcGxlCgpUaGUgdXNlIG9mIHFlbXUtbmJkIGFsbG93cyB0byBzaGFyZSBhIGRpc2sgYmV0d2VlbiBzZXZlcmFsIGd1ZXN0czoKQGV4YW1wbGUKcWVtdS1uYmQgLS1zb2NrZXQ9L3RtcC9teV9zb2NrZXQgLS1zaGFyZT0yIG15X2Rpc2sucWNvdzIKQGVuZCBleGFtcGxlCgphbmQgdGhlbiB5b3UgY2FuIHVzZSBpdCB3aXRoIHR3byBndWVzdHM6CkBleGFtcGxlCnFlbXUgbGludXgxLmltZyAtaGRiIG5iZDp1bml4Oi90bXAvbXlfc29ja2V0CnFlbXUgbGludXgyLmltZyAtaGRiIG5iZDp1bml4Oi90bXAvbXlfc29ja2V0CkBlbmQgZXhhbXBsZQoKQG5vZGUgcGNzeXNfbmV0d29yawpAc2VjdGlvbiBOZXR3b3JrIGVtdWxhdGlvbgoKUUVNVSBjYW4gc2ltdWxhdGUgc2V2ZXJhbCBuZXR3b3JrIGNhcmRzIChQQ0kgb3IgSVNBIGNhcmRzIG9uIHRoZSBQQwp0YXJnZXQpIGFuZCBjYW4gY29ubmVjdCB0aGVtIHRvIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgVmlydHVhbCBMb2NhbApBcmVhIE5ldHdvcmtzIChWTEFOcykuIEhvc3QgVEFQIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB0byBhbnkgUUVNVQpWTEFOLiBWTEFOIGNhbiBiZSBjb25uZWN0ZWQgYmV0d2VlbiBzZXBhcmF0ZSBpbnN0YW5jZXMgb2YgUUVNVSB0bwpzaW11bGF0ZSBsYXJnZSBuZXR3b3Jrcy4gRm9yIHNpbXBsZXIgdXNhZ2UsIGEgbm9uIHByaXZpbGVnZWQgdXNlciBtb2RlCm5ldHdvcmsgc3RhY2sgY2FuIHJlcGxhY2UgdGhlIFRBUCBkZXZpY2UgdG8gaGF2ZSBhIGJhc2ljIG5ldHdvcmsKY29ubmVjdGlvbi4KCkBzdWJzZWN0aW9uIFZMQU5zCgpRRU1VIHNpbXVsYXRlcyBzZXZlcmFsIFZMQU5zLiBBIFZMQU4gY2FuIGJlIHN5bWJvbGlzZWQgYXMgYSB2aXJ0dWFsCmNvbm5lY3Rpb24gYmV0d2VlbiBzZXZlcmFsIG5ldHdvcmsgZGV2aWNlcy4gVGhlc2UgZGV2aWNlcyBjYW4gYmUgZm9yCmV4YW1wbGUgUUVNVSB2aXJ0dWFsIEV0aGVybmV0IGNhcmRzIG9yIHZpcnR1YWwgSG9zdCBldGhlcm5ldCBkZXZpY2VzCihUQVAgZGV2aWNlcykuCgpAc3Vic2VjdGlvbiBVc2luZyBUQVAgbmV0d29yayBpbnRlcmZhY2VzCgpUaGlzIGlzIHRoZSBzdGFuZGFyZCB3YXkgdG8gY29ubmVjdCBRRU1VIHRvIGEgcmVhbCBuZXR3b3JrLiBRRU1VIGFkZHMKYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG9uIHlvdXIgaG9zdCAoY2FsbGVkIEBjb2Rle3RhcE59KSwgYW5kIHlvdQpjYW4gdGhlbiBjb25maWd1cmUgaXQgYXMgaWYgaXQgd2FzIGEgcmVhbCBldGhlcm5ldCBjYXJkLgoKQHN1YnN1YnNlY3Rpb24gTGludXggaG9zdAoKQXMgYW4gZXhhbXBsZSwgeW91IGNhbiBkb3dubG9hZCB0aGUgQGZpbGV7bGludXgtdGVzdC14eHgudGFyLmd6fQphcmNoaXZlIGFuZCBjb3B5IHRoZSBzY3JpcHQgQGZpbGV7cWVtdS1pZnVwfSBpbiBAZmlsZXsvZXRjfSBhbmQKY29uZmlndXJlIHByb3Blcmx5IEBjb2Rle3N1ZG99IHNvIHRoYXQgdGhlIGNvbW1hbmQgQGNvZGV7aWZjb25maWd9CmNvbnRhaW5lZCBpbiBAZmlsZXtxZW11LWlmdXB9IGNhbiBiZSBleGVjdXRlZCBhcyByb290LiBZb3UgbXVzdCB2ZXJpZnkKdGhhdCB5b3VyIGhvc3Qga2VybmVsIHN1cHBvcnRzIHRoZSBUQVAgbmV0d29yayBpbnRlcmZhY2VzOiB0aGUKZGV2aWNlIEBmaWxley9kZXYvbmV0L3R1bn0gbXVzdCBiZSBwcmVzZW50LgoKU2VlIEByZWZ7c2VjX2ludm9jYXRpb259IHRvIGhhdmUgZXhhbXBsZXMgb2YgY29tbWFuZCBsaW5lcyB1c2luZyB0aGUKVEFQIG5ldHdvcmsgaW50ZXJmYWNlcy4KCkBzdWJzdWJzZWN0aW9uIFdpbmRvd3MgaG9zdAoKVGhlcmUgaXMgYSB2aXJ0dWFsIGV0aGVybmV0IGRyaXZlciBmb3IgV2luZG93cyAyMDAwL1hQIHN5c3RlbXMsIGNhbGxlZApUQVAtV2luMzIuIEJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgV2luZG93cywKc28geW91IHdpbGwgbmVlZCB0byBnZXQgaXQgc2VwYXJhdGVseS4gSXQgaXMgcGFydCBvZiBPcGVuVlBOIHBhY2thZ2UsCnNvIGRvd25sb2FkIE9wZW5WUE4gZnJvbSA6IEB1cmx7aHR0cDovL29wZW52cG4ubmV0L30uCgpAc3Vic2VjdGlvbiBVc2luZyB0aGUgdXNlciBtb2RlIG5ldHdvcmsgc3RhY2sKCkJ5IHVzaW5nIHRoZSBvcHRpb24gQG9wdGlvbnstbmV0IHVzZXJ9IChkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgbm8KQG9wdGlvbnstbmV0fSBvcHRpb24gaXMgc3BlY2lmaWVkKSwgUUVNVSB1c2VzIGEgY29tcGxldGVseSB1c2VyIG1vZGUKbmV0d29yayBzdGFjayAoeW91IGRvbid0IG5lZWQgcm9vdCBwcml2aWxlZ2UgdG8gdXNlIHRoZSB2aXJ0dWFsCm5ldHdvcmspLiBUaGUgdmlydHVhbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGZvbGxvd2luZzoKCkBleGFtcGxlCgogICAgICAgICBRRU1VIFZMQU4gICAgICA8LS0tLS0tPiAgRmlyZXdhbGwvREhDUCBzZXJ2ZXIgPC0tLS0tPiBJbnRlcm5ldAogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICgxMC4wLjIuMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPiAgRE5TIHNlcnZlciAoMTAuMC4yLjMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT4gIFNNQiBzZXJ2ZXIgKDEwLjAuMi40KQpAZW5kIGV4YW1wbGUKClRoZSBRRU1VIFZNIGJlaGF2ZXMgYXMgaWYgaXQgd2FzIGJlaGluZCBhIGZpcmV3YWxsIHdoaWNoIGJsb2NrcyBhbGwKaW5jb21pbmcgY29ubmVjdGlvbnMuIFlvdSBjYW4gdXNlIGEgREhDUCBjbGllbnQgdG8gYXV0b21hdGljYWxseQpjb25maWd1cmUgdGhlIG5ldHdvcmsgaW4gdGhlIFFFTVUgVk0uIFRoZSBESENQIHNlcnZlciBhc3NpZ24gYWRkcmVzc2VzCnRvIHRoZSBob3N0cyBzdGFydGluZyBmcm9tIDEwLjAuMi4xNS4KCkluIG9yZGVyIHRvIGNoZWNrIHRoYXQgdGhlIHVzZXIgbW9kZSBuZXR3b3JrIGlzIHdvcmtpbmcsIHlvdSBjYW4gcGluZwp0aGUgYWRkcmVzcyAxMC4wLjIuMiBhbmQgdmVyaWZ5IHRoYXQgeW91IGdvdCBhbiBhZGRyZXNzIGluIHRoZSByYW5nZQoxMC4wLjIueCBmcm9tIHRoZSBRRU1VIHZpcnR1YWwgREhDUCBzZXJ2ZXIuCgpOb3RlIHRoYXQgQGNvZGV7cGluZ30gaXMgbm90IHN1cHBvcnRlZCByZWxpYWJseSB0byB0aGUgaW50ZXJuZXQgYXMgaXQKd291bGQgcmVxdWlyZSByb290IHByaXZpbGVnZXMuIEl0IG1lYW5zIHlvdSBjYW4gb25seSBwaW5nIHRoZSBsb2NhbApyb3V0ZXIgKDEwLjAuMi4yKS4KCldoZW4gdXNpbmcgdGhlIGJ1aWx0LWluIFRGVFAgc2VydmVyLCB0aGUgcm91dGVyIGlzIGFsc28gdGhlIFRGVFAKc2VydmVyLgoKV2hlbiB1c2luZyB0aGUgQG9wdGlvbnstcmVkaXJ9IG9wdGlvbiwgVENQIG9yIFVEUCBjb25uZWN0aW9ucyBjYW4gYmUKcmVkaXJlY3RlZCBmcm9tIHRoZSBob3N0IHRvIHRoZSBndWVzdC4gSXQgYWxsb3dzIGZvciBleGFtcGxlIHRvCnJlZGlyZWN0IFgxMSwgdGVsbmV0IG9yIFNTSCBjb25uZWN0aW9ucy4KCkBzdWJzZWN0aW9uIENvbm5lY3RpbmcgVkxBTnMgYmV0d2VlbiBRRU1VIGluc3RhbmNlcwoKVXNpbmcgdGhlIEBvcHRpb257LW5ldCBzb2NrZXR9IG9wdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBWTEFOcwp0aGF0IHNwYW4gc2V2ZXJhbCBRRU1VIGluc3RhbmNlcy4gU2VlIEByZWZ7c2VjX2ludm9jYXRpb259IHRvIGhhdmUgYQpiYXNpYyBleGFtcGxlLgoKQG5vZGUgZGlyZWN0X2xpbnV4X2Jvb3QKQHNlY3Rpb24gRGlyZWN0IExpbnV4IEJvb3QKClRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gbGF1bmNoIGEgTGludXgga2VybmVsIGluc2lkZSBRRU1VIHdpdGhvdXQKaGF2aW5nIHRvIG1ha2UgYSBmdWxsIGJvb3RhYmxlIGltYWdlLiBJdCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZmFzdCBMaW51eAprZXJuZWwgdGVzdGluZy4KClRoZSBzeW50YXggaXM6CkBleGFtcGxlCnFlbXUgLWtlcm5lbCBhcmNoL2kzODYvYm9vdC9iekltYWdlIC1oZGEgcm9vdC0yLjQuMjAuaW1nIC1hcHBlbmQgInJvb3Q9L2Rldi9oZGEiCkBlbmQgZXhhbXBsZQoKVXNlIEBvcHRpb257LWtlcm5lbH0gdG8gcHJvdmlkZSB0aGUgTGludXgga2VybmVsIGltYWdlIGFuZApAb3B0aW9uey1hcHBlbmR9IHRvIGdpdmUgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGUKQG9wdGlvbnstaW5pdHJkfSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhbiBJTklUUkQgaW1hZ2UuCgpXaGVuIHVzaW5nIHRoZSBkaXJlY3QgTGludXggYm9vdCwgYSBkaXNrIGltYWdlIGZvciB0aGUgZmlyc3QgaGFyZCBkaXNrCkBmaWxle2hkYX0gaXMgcmVxdWlyZWQgYmVjYXVzZSBpdHMgYm9vdCBzZWN0b3IgaXMgdXNlZCB0byBsYXVuY2ggdGhlCkxpbnV4IGtlcm5lbC4KCklmIHlvdSBkbyBub3QgbmVlZCBncmFwaGljYWwgb3V0cHV0LCB5b3UgY2FuIGRpc2FibGUgaXQgYW5kIHJlZGlyZWN0CnRoZSB2aXJ0dWFsIHNlcmlhbCBwb3J0IGFuZCB0aGUgUUVNVSBtb25pdG9yIHRvIHRoZSBjb25zb2xlIHdpdGggdGhlCkBvcHRpb257LW5vZ3JhcGhpY30gb3B0aW9uLiBUaGUgdHlwaWNhbCBjb21tYW5kIGxpbmUgaXM6CkBleGFtcGxlCnFlbXUgLWtlcm5lbCBhcmNoL2kzODYvYm9vdC9iekltYWdlIC1oZGEgcm9vdC0yLjQuMjAuaW1nIFwKICAgICAtYXBwZW5kICJyb290PS9kZXYvaGRhIGNvbnNvbGU9dHR5UzAiIC1ub2dyYXBoaWMKQGVuZCBleGFtcGxlCgpVc2UgQGtleXtDdHJsLWEgY30gdG8gc3dpdGNoIGJldHdlZW4gdGhlIHNlcmlhbCBjb25zb2xlIGFuZCB0aGUKbW9uaXRvciAoQHB4cmVme3Bjc3lzX2tleXN9KS4KCkBub2RlIHBjc3lzX3VzYgpAc2VjdGlvbiBVU0IgZW11bGF0aW9uCgpRRU1VIGVtdWxhdGVzIGEgUENJIFVIQ0kgVVNCIGNvbnRyb2xsZXIuIFlvdSBjYW4gdmlydHVhbGx5IHBsdWcKdmlydHVhbCBVU0IgZGV2aWNlcyBvciByZWFsIGhvc3QgVVNCIGRldmljZXMgKGV4cGVyaW1lbnRhbCwgd29ya3Mgb25seQpvbiBMaW51eCBob3N0cykuICBRZW11IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYW5kIGNvbm5lY3QgdmlydHVhbCBVU0IgaHVicwphcyBuZWNlc3NhcnkgdG8gY29ubmVjdCBtdWx0aXBsZSBVU0IgZGV2aWNlcy4KCkBtZW51CiogdXNiX2RldmljZXM6OgoqIGhvc3RfdXNiX2RldmljZXM6OgpAZW5kIG1lbnUKQG5vZGUgdXNiX2RldmljZXMKQHN1YnNlY3Rpb24gQ29ubmVjdGluZyBVU0IgZGV2aWNlcwoKVVNCIGRldmljZXMgY2FuIGJlIGNvbm5lY3RlZCB3aXRoIHRoZSBAb3B0aW9uey11c2JkZXZpY2V9IGNvbW1hbmRsaW5lIG9wdGlvbgpvciB0aGUgQGNvZGV7dXNiX2FkZH0gbW9uaXRvciBjb21tYW5kLiAgQXZhaWxhYmxlIGRldmljZXMgYXJlOgoKQHRhYmxlIEBjb2RlCkBpdGVtIG1vdXNlClZpcnR1YWwgTW91c2UuICBUaGlzIHdpbGwgb3ZlcnJpZGUgdGhlIFBTLzIgbW91c2UgZW11bGF0aW9uIHdoZW4gYWN0aXZhdGVkLgpAaXRlbSB0YWJsZXQKUG9pbnRlciBkZXZpY2UgdGhhdCB1c2VzIGFic29sdXRlIGNvb3JkaW5hdGVzIChsaWtlIGEgdG91Y2hzY3JlZW4pLgpUaGlzIG1lYW5zIHFlbXUgaXMgYWJsZSB0byByZXBvcnQgdGhlIG1vdXNlIHBvc2l0aW9uIHdpdGhvdXQgaGF2aW5nCnRvIGdyYWIgdGhlIG1vdXNlLiAgQWxzbyBvdmVycmlkZXMgdGhlIFBTLzIgbW91c2UgZW11bGF0aW9uIHdoZW4gYWN0aXZhdGVkLgpAaXRlbSBkaXNrOkB2YXJ7ZmlsZX0KTWFzcyBzdG9yYWdlIGRldmljZSBiYXNlZCBvbiBAdmFye2ZpbGV9IChAcHhyZWZ7ZGlza19pbWFnZXN9KQpAaXRlbSBob3N0OkB2YXJ7YnVzLmFkZHJ9ClBhc3MgdGhyb3VnaCB0aGUgaG9zdCBkZXZpY2UgaWRlbnRpZmllZCBieSBAdmFye2J1cy5hZGRyfQooTGludXggb25seSkKQGl0ZW0gaG9zdDpAdmFye3ZlbmRvcl9pZDpwcm9kdWN0X2lkfQpQYXNzIHRocm91Z2ggdGhlIGhvc3QgZGV2aWNlIGlkZW50aWZpZWQgYnkgQHZhcnt2ZW5kb3JfaWQ6cHJvZHVjdF9pZH0KKExpbnV4IG9ubHkpCkBpdGVtIHdhY29tLXRhYmxldApWaXJ0dWFsIFdhY29tIFBlblBhcnRuZXIgdGFibGV0LiAgVGhpcyBkZXZpY2UgaXMgc2ltaWxhciB0byB0aGUgQGNvZGV7dGFibGV0fQphYm92ZSBidXQgaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgdHNsaWIgbGlicmFyeSBiZWNhdXNlIGluIGFkZGl0aW9uIHRvIHRvdWNoCmNvb3JkaW5hdGVzIGl0IHJlcG9ydHMgdG91Y2ggcHJlc3N1cmUuCkBpdGVtIGtleWJvYXJkClN0YW5kYXJkIFVTQiBrZXlib2FyZC4gIFdpbGwgb3ZlcnJpZGUgdGhlIFBTLzIga2V5Ym9hcmQgKGlmIHByZXNlbnQpLgpAaXRlbSBzZXJpYWw6W3ZlbmRvcmlkPUB2YXJ7dmVuZG9yX2lkfV1bLHByb2R1Y3RfaWQ9QHZhcntwcm9kdWN0X2lkfV06QHZhcntkZXZ9ClNlcmlhbCBjb252ZXJ0ZXIuIFRoaXMgZW11bGF0ZXMgYW4gRlRESSBGVDIzMkJNIGNoaXAgY29ubmVjdGVkIHRvIGhvc3QgY2hhcmFjdGVyCmRldmljZSBAdmFye2Rldn0uIFRoZSBhdmFpbGFibGUgY2hhcmFjdGVyIGRldmljZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUKQGNvZGV7LXNlcmlhbH0gb3B0aW9uLiBUaGUgQGNvZGV7dmVuZG9yaWR9IGFuZCBAY29kZXtwcm9kdWN0aWR9IG9wdGlvbnMgY2FuIGJlCnVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgMDQwMzo2MDAxLiBGb3IgaW5zdGFuY2UsIApAZXhhbXBsZQp1c2JfYWRkIHNlcmlhbDpwcm9kdWN0aWQ9RkEwMDp0Y3A6MTkyLjE2OC4wLjI6NDQ0NApAZW5kIGV4YW1wbGUKd2lsbCBjb25uZWN0IHRvIHRjcCBwb3J0IDQ0NDQgb2YgaXAgMTkyLjE2OC4wLjIsIGFuZCBwbHVnIHRoYXQgdG8gdGhlIHZpcnR1YWwKc2VyaWFsIGNvbnZlcnRlciwgZmFraW5nIGEgTWF0cml4IE9yYml0YWwgTENEIERpc3BsYXkgKFVTQiBJRCAwNDAzOkZBMDApLgpAaXRlbSBicmFpbGxlCkJyYWlsbGUgZGV2aWNlLiAgVGhpcyB3aWxsIHVzZSBCcmxBUEkgdG8gZGlzcGxheSB0aGUgYnJhaWxsZSBvdXRwdXQgb24gYSByZWFsCm9yIGZha2UgZGV2aWNlLgpAaXRlbSBuZXQ6QHZhcntvcHRpb25zfQpOZXR3b3JrIGFkYXB0ZXIgdGhhdCBzdXBwb3J0cyBDREMgZXRoZXJuZXQgYW5kIFJORElTIHByb3RvY29scy4gIEB2YXJ7b3B0aW9uc30Kc3BlY2lmaWVzIE5JQyBvcHRpb25zIGFzIHdpdGggQGNvZGV7LW5ldCBuaWMsfUB2YXJ7b3B0aW9uc30gKHNlZSBkZXNjcmlwdGlvbikuCkZvciBpbnN0YW5jZSwgdXNlci1tb2RlIG5ldHdvcmtpbmcgY2FuIGJlIHVzZWQgd2l0aApAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtbmV0IHVzZXIsdmxhbj0wIC11c2JkZXZpY2UgbmV0OnZsYW49MApAZW5kIGV4YW1wbGUKQ3VycmVudGx5IHRoaXMgY2Fubm90IGJlIHVzZWQgaW4gbWFjaGluZXMgdGhhdCBzdXBwb3J0IFBDSSBOSUNzLgpAaXRlbSBidFs6QHZhcntoY2ktdHlwZX1dCkJsdWV0b290aCBkb25nbGUgd2hvc2UgdHlwZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHdpdGgKdGhlIEBvcHRpb257LWJ0IGhjaX0gb3B0aW9uLCBAcHhyZWZ7YnQtaGNpcywsYWxsb3dlZCBIQ0kgdHlwZXN9LiAgSWYKbm8gdHlwZSBpcyBnaXZlbiwgdGhlIEhDSSBsb2dpYyBjb3JyZXNwb25kcyB0byBAY29kZXstYnQgaGNpLHZsYW49MH0uClRoaXMgVVNCIGRldmljZSBpbXBsZW1lbnRzIHRoZSBVU0IgVHJhbnNwb3J0IExheWVyIG9mIEhDSS4gIEV4YW1wbGUKdXNhZ2U6CkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC11c2JkZXZpY2UgYnQ6aGNpLHZsYW49MyAtYnQgZGV2aWNlOmtleWJvYXJkLHZsYW49MwpAZW5kIGV4YW1wbGUKQGVuZCB0YWJsZQoKQG5vZGUgaG9zdF91c2JfZGV2aWNlcwpAc3Vic2VjdGlvbiBVc2luZyBob3N0IFVTQiBkZXZpY2VzIG9uIGEgTGludXggaG9zdAoKV0FSTklORzogdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gUUVNVSB3aWxsIHNsb3cgZG93biB3aGVuCnVzaW5nIGl0LiBVU0IgZGV2aWNlcyByZXF1aXJpbmcgcmVhbCB0aW1lIHN0cmVhbWluZyAoaS5lLiBVU0IgVmlkZW8KQ2FtZXJhcykgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgoKQGVudW1lcmF0ZQpAaXRlbSBJZiB5b3UgdXNlIGFuIGVhcmx5IExpbnV4IDIuNCBrZXJuZWwsIHZlcmlmeSB0aGF0IG5vIExpbnV4IGRyaXZlcgppcyBhY3R1YWxseSB1c2luZyB0aGUgVVNCIGRldmljZS4gQSBzaW1wbGUgd2F5IHRvIGRvIHRoYXQgaXMgc2ltcGx5IHRvCmRpc2FibGUgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIG1vZHVsZSBieSByZW5hbWluZyBpdCBmcm9tIEBmaWxle215ZHJpdmVyLm99CnRvIEBmaWxle215ZHJpdmVyLm8uZGlzYWJsZWR9LgoKQGl0ZW0gVmVyaWZ5IHRoYXQgQGZpbGV7L3Byb2MvYnVzL3VzYn0gaXMgd29ya2luZyAobW9zdCBMaW51eCBkaXN0cmlidXRpb25zIHNob3VsZCBlbmFibGUgaXQgYnkgZGVmYXVsdCkuIFlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoYXQ6CkBleGFtcGxlCmxzIC9wcm9jL2J1cy91c2IKMDAxICBkZXZpY2VzICBkcml2ZXJzCkBlbmQgZXhhbXBsZQoKQGl0ZW0gU2luY2Ugb25seSByb290IGNhbiBhY2Nlc3MgdG8gdGhlIFVTQiBkZXZpY2VzIGRpcmVjdGx5LCB5b3UgY2FuIGVpdGhlciBsYXVuY2ggUUVNVSBhcyByb290IG9yIGNoYW5nZSB0aGUgcGVybWlzc2lvbnMgb2YgdGhlIFVTQiBkZXZpY2VzIHlvdSB3YW50IHRvIHVzZS4gRm9yIHRlc3RpbmcsIHRoZSBmb2xsb3dpbmcgc3VmZmljZXM6CkBleGFtcGxlCmNob3duIC1SIG15dWlkIC9wcm9jL2J1cy91c2IKQGVuZCBleGFtcGxlCgpAaXRlbSBMYXVuY2ggUUVNVSBhbmQgZG8gaW4gdGhlIG1vbml0b3I6CkBleGFtcGxlCmluZm8gdXNiaG9zdAogIERldmljZSAxLjIsIHNwZWVkIDQ4MCBNYi9zCiAgICBDbGFzcyAwMDogVVNCIGRldmljZSAxMjM0OjU2NzgsIFVTQiBESVNLCkBlbmQgZXhhbXBsZQpZb3Ugc2hvdWxkIHNlZSB0aGUgbGlzdCBvZiB0aGUgZGV2aWNlcyB5b3UgY2FuIHVzZSAoTmV2ZXIgdHJ5IHRvIHVzZQpodWJzLCBpdCB3b24ndCB3b3JrKS4KCkBpdGVtIEFkZCB0aGUgZGV2aWNlIGluIFFFTVUgYnkgdXNpbmc6CkBleGFtcGxlCnVzYl9hZGQgaG9zdDoxMjM0OjU2NzgKQGVuZCBleGFtcGxlCgpOb3JtYWxseSB0aGUgZ3Vlc3QgT1Mgc2hvdWxkIHJlcG9ydCB0aGF0IGEgbmV3IFVTQiBkZXZpY2UgaXMKcGx1Z2dlZC4gWW91IGNhbiB1c2UgdGhlIG9wdGlvbiBAb3B0aW9uey11c2JkZXZpY2V9IHRvIGRvIHRoZSBzYW1lLgoKQGl0ZW0gTm93IHlvdSBjYW4gdHJ5IHRvIHVzZSB0aGUgaG9zdCBVU0IgZGV2aWNlIGluIFFFTVUuCgpAZW5kIGVudW1lcmF0ZQoKV2hlbiByZWxhdW5jaGluZyBRRU1VLCB5b3UgbWF5IGhhdmUgdG8gdW5wbHVnIGFuZCBwbHVnIGFnYWluIHRoZSBVU0IKZGV2aWNlIHRvIG1ha2UgaXQgd29yayBhZ2FpbiAodGhpcyBpcyBhIGJ1ZykuCgpAbm9kZSB2bmNfc2VjdXJpdHkKQHNlY3Rpb24gVk5DIHNlY3VyaXR5CgpUaGUgVk5DIHNlcnZlciBjYXBhYmlsaXR5IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZ3JhcGhpY2FsIGNvbnNvbGUKb2YgdGhlIGd1ZXN0IFZNIGFjcm9zcyB0aGUgbmV0d29yay4gVGhpcyBoYXMgYSBudW1iZXIgb2Ygc2VjdXJpdHkKY29uc2lkZXJhdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBkZXBsb3ltZW50IHNjZW5hcmlvcy4KCkBtZW51Ciogdm5jX3NlY19ub25lOjoKKiB2bmNfc2VjX3Bhc3N3b3JkOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlX3ZlcmlmeTo6Ciogdm5jX3NlY19jZXJ0aWZpY2F0ZV9wdzo6Ciogdm5jX3NlY19zYXNsOjoKKiB2bmNfc2VjX2NlcnRpZmljYXRlX3Nhc2w6OgoqIHZuY19nZW5lcmF0ZV9jZXJ0OjoKKiB2bmNfc2V0dXBfc2FzbDo6CkBlbmQgbWVudQpAbm9kZSB2bmNfc2VjX25vbmUKQHN1YnNlY3Rpb24gV2l0aG91dCBwYXNzd29yZHMKClRoZSBzaW1wbGVzdCBWTkMgc2VydmVyIHNldHVwIGRvZXMgbm90IGluY2x1ZGUgYW55IGZvcm0gb2YgYXV0aGVudGljYXRpb24uCkZvciB0aGlzIHNldHVwIGl0IGlzIHJlY29tbWVuZGVkIHRvIHJlc3RyaWN0IGl0IHRvIGxpc3RlbiBvbiBhIFVOSVggZG9tYWluCnNvY2tldCBvbmx5LiBGb3IgZXhhbXBsZQoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyB1bml4Oi9ob21lL2pvZWJsb2dncy8ucWVtdS1teXZtLXZuYwpAZW5kIGV4YW1wbGUKClRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgdXNlcnMgb24gbG9jYWwgYm94IHdpdGggcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhhdApwYXRoIGNhbiBhY2Nlc3MgdGhlIFZOQyBzZXJ2ZXIuIFRvIHNlY3VyZWx5IGFjY2VzcyB0aGUgVk5DIHNlcnZlciBmcm9tIGEKcmVtb3RlIG1hY2hpbmUsIGEgY29tYmluYXRpb24gb2YgbmV0Y2F0K3NzaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgc2VjdXJlCnR1bm5lbC4KCkBub2RlIHZuY19zZWNfcGFzc3dvcmQKQHN1YnNlY3Rpb24gV2l0aCBwYXNzd29yZHMKClRoZSBWTkMgcHJvdG9jb2wgaGFzIGxpbWl0ZWQgc3VwcG9ydCBmb3IgcGFzc3dvcmQgYmFzZWQgYXV0aGVudGljYXRpb24uIFNpbmNlCnRoZSBwcm90b2NvbCBsaW1pdHMgcGFzc3dvcmRzIHRvIDggY2hhcmFjdGVycyBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKdG8gcHJvdmlkZSBoaWdoIHNlY3VyaXR5LiBUaGUgcGFzc3dvcmQgY2FuIGJlIGZhaXJseSBlYXNpbHkgYnJ1dGUtZm9yY2VkIGJ5CmEgY2xpZW50IG1ha2luZyByZXBlYXQgY29ubmVjdGlvbnMuIEZvciB0aGlzIHJlYXNvbiwgYSBWTkMgc2VydmVyIHVzaW5nIHBhc3N3b3JkCmF1dGhlbnRpY2F0aW9uIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIG9ubHkgbGlzdGVuIG9uIHRoZSBsb29wYmFjayBpbnRlcmZhY2UKb3IgVU5JWCBkb21haW4gc29ja2V0cy4gUGFzc3dvcmQgYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkIHdpdGggdGhlIEBjb2Rle3Bhc3N3b3JkfQpvcHRpb24sIGFuZCB0aGVuIG9uY2UgUUVNVSBpcyBydW5uaW5nIHRoZSBwYXNzd29yZCBpcyBzZXQgd2l0aCB0aGUgbW9uaXRvci4gVW50aWwKdGhlIG1vbml0b3IgaXMgdXNlZCB0byBzZXQgdGhlIHBhc3N3b3JkIGFsbCBjbGllbnRzIHdpbGwgYmUgcmVqZWN0ZWQuCgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHBhc3N3b3JkIC1tb25pdG9yIHN0ZGlvCihxZW11KSBjaGFuZ2Ugdm5jIHBhc3N3b3JkClBhc3N3b3JkOiAqKioqKioqKgoocWVtdSkKQGVuZCBleGFtcGxlCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlCkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMKClRoZSBRRU1VIFZOQyBzZXJ2ZXIgYWxzbyBpbXBsZW1lbnRzIHRoZSBWZU5DcnlwdCBleHRlbnNpb24gYWxsb3dpbmcgdXNlIG9mClRMUyBmb3IgZW5jcnlwdGlvbiBvZiB0aGUgc2Vzc2lvbiwgYW5kIHg1MDkgY2VydGlmaWNhdGVzIGZvciBhdXRoZW50aWNhdGlvbi4KVGhlIHVzZSBvZiB4NTA5IGNlcnRpZmljYXRlcyBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCwgYmVjYXVzZSBUTFMgb24gaXRzCm93biBpcyBzdXNjZXB0aWJsZSB0byBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBCYXNpYyB4NTA5IGNlcnRpZmljYXRlCnN1cHBvcnQgcHJvdmlkZXMgYSBzZWN1cmUgc2Vzc2lvbiwgYnV0IG5vIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGFsbG93cyBhbnkKY2xpZW50IHRvIGNvbm5lY3QsIGFuZCBwcm92aWRlcyBhbiBlbmNyeXB0ZWQgc2Vzc2lvbi4KCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsdGxzLHg1MDk9L2V0Yy9wa2kvcWVtdSAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCkluIHRoZSBhYm92ZSBleGFtcGxlIEBjb2Rley9ldGMvcGtpL3FlbXV9IHNob3VsZCBjb250YWluIGF0IGxlYXN0IHRocmVlIGZpbGVzLApAY29kZXtjYS1jZXJ0LnBlbX0sIEBjb2Rle3NlcnZlci1jZXJ0LnBlbX0gYW5kIEBjb2Rle3NlcnZlci1rZXkucGVtfS4gVW5wcml2aWxlZ2VkCnVzZXJzIHdpbGwgd2FudCB0byB1c2UgYSBwcml2YXRlIGRpcmVjdG9yeSwgZm9yIGV4YW1wbGUgQGNvZGV7JEhPTUUvLnBraS9xZW11fS4KTkIgdGhlIEBjb2Rle3NlcnZlci1rZXkucGVtfSBmaWxlIHNob3VsZCBiZSBwcm90ZWN0ZWQgd2l0aCBmaWxlIG1vZGUgMDYwMCB0bwpvbmx5IGJlIHJlYWRhYmxlIGJ5IHRoZSB1c2VyIG93bmluZyBpdC4KCkBub2RlIHZuY19zZWNfY2VydGlmaWNhdGVfdmVyaWZ5CkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMgYW5kIGNsaWVudCB2ZXJpZmljYXRpb24KCkNlcnRpZmljYXRlcyBjYW4gYWxzbyBwcm92aWRlIGEgbWVhbnMgdG8gYXV0aGVudGljYXRlIHRoZSBjbGllbnQgY29ubmVjdGluZy4KVGhlIHNlcnZlciB3aWxsIHJlcXVlc3QgdGhhdCB0aGUgY2xpZW50IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSwgd2hpY2ggaXQgd2lsbAp0aGVuIHZhbGlkYXRlIGFnYWluc3QgdGhlIENBIGNlcnRpZmljYXRlLiBUaGlzIGlzIGEgZ29vZCBjaG9pY2UgaWYgZGVwbG95aW5nCmluIGFuIGVudmlyb25tZW50IHdpdGggYSBwcml2YXRlIGludGVybmFsIGNlcnRpZmljYXRlIGF1dGhvcml0eS4KCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsdGxzLHg1MDl2ZXJpZnk9L2V0Yy9wa2kvcWVtdSAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlX3B3CkBzdWJzZWN0aW9uIFdpdGggeDUwOSBjZXJ0aWZpY2F0ZXMsIGNsaWVudCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkcwoKRmluYWxseSwgdGhlIHByZXZpb3VzIG1ldGhvZCBjYW4gYmUgY29tYmluZWQgd2l0aCBWTkMgcGFzc3dvcmQgYXV0aGVudGljYXRpb24KdG8gcHJvdmlkZSB0d28gbGF5ZXJzIG9mIGF1dGhlbnRpY2F0aW9uIGZvciBjbGllbnRzLgoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyA6MSxwYXNzd29yZCx0bHMseDUwOXZlcmlmeT0vZXRjL3BraS9xZW11IC1tb25pdG9yIHN0ZGlvCihxZW11KSBjaGFuZ2Ugdm5jIHBhc3N3b3JkClBhc3N3b3JkOiAqKioqKioqKgoocWVtdSkKQGVuZCBleGFtcGxlCgoKQG5vZGUgdm5jX3NlY19zYXNsCkBzdWJzZWN0aW9uIFdpdGggU0FTTCBhdXRoZW50aWNhdGlvbgoKVGhlIFNBU0wgYXV0aGVudGljYXRpb24gbWV0aG9kIGlzIGEgVk5DIGV4dGVuc2lvbiwgdGhhdCBwcm92aWRlcyBhbgplYXNpbHkgZXh0ZW5kYWJsZSwgcGx1Z2dhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4gVGhpcyBhbGxvd3MgZm9yCmludGVncmF0aW9uIHdpdGggYSB3aWRlIHJhbmdlIG9mIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMsIHN1Y2ggYXMKUEFNLCBHU1NBUEkvS2VyYmVyb3MsIExEQVAsIFNRTCBkYXRhYmFzZXMsIG9uZS10aW1lIGtleXMgYW5kIG1vcmUuClRoZSBzdHJlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gZGVwZW5kcyBvbiB0aGUgZXhhY3QgbWVjaGFuaXNtCmNvbmZpZ3VyZWQuIElmIHRoZSBjaG9zZW4gbWVjaGFuaXNtIGFsc28gcHJvdmlkZXMgYSBTU0YgbGF5ZXIsIHRoZW4KaXQgd2lsbCBlbmNyeXB0IHRoZSBkYXRhc3RyZWFtIGFzIHdlbGwuCgpSZWZlciB0byB0aGUgbGF0ZXIgZG9jcyBvbiBob3cgdG8gY2hvb3NlIHRoZSBleGFjdCBTQVNMIG1lY2hhbmlzbQp1c2VkIGZvciBhdXRoZW50aWNhdGlvbiwgYnV0IGFzc3VtaW5nIHVzZSBvZiBvbmUgc3VwcG9ydGluZyBTU0YsCnRoZW4gUUVNVSBjYW4gYmUgbGF1bmNoZWQgd2l0aDoKCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEsc2FzbCAtbW9uaXRvciBzdGRpbwpAZW5kIGV4YW1wbGUKCkBub2RlIHZuY19zZWNfY2VydGlmaWNhdGVfc2FzbApAc3Vic2VjdGlvbiBXaXRoIHg1MDkgY2VydGlmaWNhdGVzIGFuZCBTQVNMIGF1dGhlbnRpY2F0aW9uCgpJZiB0aGUgZGVzaXJlZCBTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBkb2VzIG5vdCBzdXBwb3J0ZWQKU1NGIGxheWVycywgdGhlbiBpdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRvIHJ1biBpdCBpbiBjb21iaW5hdGlvbgp3aXRoIFRMUyBhbmQgeDUwOSBjZXJ0aWZpY2F0ZXMuIFRoaXMgcHJvdmlkZXMgc2VjdXJlbHkgZW5jcnlwdGVkCmRhdGEgc3RyZWFtLCBhdm9pZGluZyByaXNrIG9mIGNvbXByb21pc2luZyBvZiB0aGUgc2VjdXJpdHkKY3JlZGVudGlhbHMuIFRoaXMgY2FuIGJlIGVuYWJsZWQsIGJ5IGNvbWJpbmluZyB0aGUgJ3Nhc2wnIG9wdGlvbgp3aXRoIHRoZSBhZm9yZW1lbnRpb25lZCBUTFMgKyB4NTA5IG9wdGlvbnM6CgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHRscyx4NTA5LHNhc2wgLW1vbml0b3Igc3RkaW8KQGVuZCBleGFtcGxlCgoKQG5vZGUgdm5jX2dlbmVyYXRlX2NlcnQKQHN1YnNlY3Rpb24gR2VuZXJhdGluZyBjZXJ0aWZpY2F0ZXMgZm9yIFZOQwoKVGhlIEdOVSBUTFMgcGFja2FnZXMgcHJvdmlkZXMgYSBjb21tYW5kIGNhbGxlZCBAY29kZXtjZXJ0dG9vbH0gd2hpY2ggY2FuCmJlIHVzZWQgdG8gZ2VuZXJhdGUgY2VydGlmaWNhdGVzIGFuZCBrZXlzIGluIFBFTSBmb3JtYXQuIEF0IGEgbWluaW11bSBpdAppcyBuZWNjZXNzYXJ5IHRvIHNldHVwIGEgY2VydGlmaWNhdGUgYXV0aG9yaXR5LCBhbmQgaXNzdWUgY2VydGlmaWNhdGVzIHRvCmVhY2ggc2VydmVyLiBJZiB1c2luZyBjZXJ0aWZpY2F0ZXMgZm9yIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVhY2ggY2xpZW50CndpbGwgYWxzbyBuZWVkIHRvIGJlIGlzc3VlZCBhIGNlcnRpZmljYXRlLiBUaGUgcmVjb21tZW5kYXRpb24gaXMgZm9yIHRoZQpzZXJ2ZXIgdG8ga2VlcCBpdHMgY2VydGlmaWNhdGVzIGluIGVpdGhlciBAY29kZXsvZXRjL3BraS9xZW11fSBvciBmb3IKdW5wcml2aWxlZ2VkIHVzZXJzIGluIEBjb2RleyRIT01FLy5wa2kvcWVtdX0uCgpAbWVudQoqIHZuY19nZW5lcmF0ZV9jYTo6Ciogdm5jX2dlbmVyYXRlX3NlcnZlcjo6Ciogdm5jX2dlbmVyYXRlX2NsaWVudDo6CkBlbmQgbWVudQpAbm9kZSB2bmNfZ2VuZXJhdGVfY2EKQHN1YnN1YnNlY3Rpb24gU2V0dXAgdGhlIENlcnRpZmljYXRlIEF1dGhvcml0eQoKVGhpcyBzdGVwIG9ubHkgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uY2UgcGVyIG9yZ2FuaXphdGlvbiAvIG9yZ2FuaXphdGlvbmFsCnVuaXQuIEZpcnN0IHRoZSBDQSBuZWVkcyBhIHByaXZhdGUga2V5LiBUaGlzIGtleSBtdXN0IGJlIGtlcHQgVkVSWSBzZWNyZXQKYW5kIHNlY3VyZS4gSWYgdGhpcyBrZXkgaXMgY29tcHJvbWlzZWQgdGhlIGVudGlyZSB0cnVzdCBjaGFpbiBvZiB0aGUgY2VydGlmaWNhdGVzCmlzc3VlZCB3aXRoIGl0IGlzIGxvc3QuCgpAZXhhbXBsZQojIGNlcnR0b29sIC0tZ2VuZXJhdGUtcHJpdmtleSA+IGNhLWtleS5wZW0KQGVuZCBleGFtcGxlCgpBIENBIG5lZWRzIHRvIGhhdmUgYSBwdWJsaWMgY2VydGlmaWNhdGUuIEZvciBzaW1wbGljaXR5IGl0IGNhbiBiZSBhIHNlbGYtc2lnbmVkCmNlcnRpZmljYXRlLCBvciBvbmUgaXNzdWUgYnkgYSBjb21tZXJjaWFsIGNlcnRpZmljYXRlIGlzc3VpbmcgYXV0aG9yaXR5LiBUbwpnZW5lcmF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHJlcXVpcmVzIG9uZSBjb3JlIHBpZWNlIG9mIGluZm9ybWF0aW9uLCB0aGUKbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uLgoKQGV4YW1wbGUKIyBjYXQgPiBjYS5pbmZvIDw8RU9GCmNuID0gTmFtZSBvZiB5b3VyIG9yZ2FuaXphdGlvbgpjYQpjZXJ0X3NpZ25pbmdfa2V5CkVPRgojIGNlcnR0b29sIC0tZ2VuZXJhdGUtc2VsZi1zaWduZWQgXAogICAgICAgICAgIC0tbG9hZC1wcml2a2V5IGNhLWtleS5wZW0KICAgICAgICAgICAtLXRlbXBsYXRlIGNhLmluZm8gXAogICAgICAgICAgIC0tb3V0ZmlsZSBjYS1jZXJ0LnBlbQpAZW5kIGV4YW1wbGUKClRoZSBAY29kZXtjYS1jZXJ0LnBlbX0gZmlsZSBzaG91bGQgYmUgY29waWVkIHRvIGFsbCBzZXJ2ZXJzIGFuZCBjbGllbnRzIHdpc2hpbmcgdG8gdXRpbGl6ZQpUTFMgc3VwcG9ydCBpbiB0aGUgVk5DIHNlcnZlci4gVGhlIEBjb2Rle2NhLWtleS5wZW19IG11c3Qgbm90IGJlIGRpc2Nsb3NlZC9jb3BpZWQgYXQgYWxsLgoKQG5vZGUgdm5jX2dlbmVyYXRlX3NlcnZlcgpAc3Vic3Vic2VjdGlvbiBJc3N1aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZXMKCkVhY2ggc2VydmVyIChvciBob3N0KSBuZWVkcyB0byBiZSBpc3N1ZWQgd2l0aCBhIGtleSBhbmQgY2VydGlmaWNhdGUuIFdoZW4gY29ubmVjdGluZwp0aGUgY2VydGlmaWNhdGUgaXMgc2VudCB0byB0aGUgY2xpZW50IHdoaWNoIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBDQSBjZXJ0aWZpY2F0ZS4KVGhlIGNvcmUgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGEgc2VydmVyIGNlcnRpZmljYXRlIGlzIHRoZSBob3N0bmFtZS4gVGhpcyBzaG91bGQKYmUgdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSB0aGF0IHRoZSBjbGllbnQgd2lsbCBjb25uZWN0IHdpdGgsIHNpbmNlIHRoZSBjbGllbnQKd2lsbCB0eXBpY2FsbHkgYWxzbyB2ZXJpZnkgdGhlIGhvc3RuYW1lIGluIHRoZSBjZXJ0aWZpY2F0ZS4gT24gdGhlIGhvc3QgaG9sZGluZyB0aGUKc2VjdXJlIENBIHByaXZhdGUga2V5OgoKQGV4YW1wbGUKIyBjYXQgPiBzZXJ2ZXIuaW5mbyA8PEVPRgpvcmdhbml6YXRpb24gPSBOYW1lICBvZiB5b3VyIG9yZ2FuaXphdGlvbgpjbiA9IHNlcnZlci5mb28uZXhhbXBsZS5jb20KdGxzX3d3d19zZXJ2ZXIKZW5jcnlwdGlvbl9rZXkKc2lnbmluZ19rZXkKRU9GCiMgY2VydHRvb2wgLS1nZW5lcmF0ZS1wcml2a2V5ID4gc2VydmVyLWtleS5wZW0KIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLWNlcnRpZmljYXRlIFwKICAgICAgICAgICAtLWxvYWQtY2EtY2VydGlmaWNhdGUgY2EtY2VydC5wZW0gXAogICAgICAgICAgIC0tbG9hZC1jYS1wcml2a2V5IGNhLWtleS5wZW0gXAogICAgICAgICAgIC0tbG9hZC1wcml2a2V5IHNlcnZlciBzZXJ2ZXIta2V5LnBlbSBcCiAgICAgICAgICAgLS10ZW1wbGF0ZSBzZXJ2ZXIuaW5mbyBcCiAgICAgICAgICAgLS1vdXRmaWxlIHNlcnZlci1jZXJ0LnBlbQpAZW5kIGV4YW1wbGUKClRoZSBAY29kZXtzZXJ2ZXIta2V5LnBlbX0gYW5kIEBjb2Rle3NlcnZlci1jZXJ0LnBlbX0gZmlsZXMgc2hvdWxkIG5vdyBiZSBzZWN1cmVseSBjb3BpZWQKdG8gdGhlIHNlcnZlciBmb3Igd2hpY2ggdGhleSB3ZXJlIGdlbmVyYXRlZC4gVGhlIEBjb2Rle3NlcnZlci1rZXkucGVtfSBpcyBzZWN1cml0eQpzZW5zaXRpdmUgYW5kIHNob3VsZCBiZSBrZXB0IHByb3RlY3RlZCB3aXRoIGZpbGUgbW9kZSAwNjAwIHRvIHByZXZlbnQgZGlzY2xvc3VyZS4KCkBub2RlIHZuY19nZW5lcmF0ZV9jbGllbnQKQHN1YnN1YnNlY3Rpb24gSXNzdWluZyBjbGllbnQgY2VydGlmaWNhdGVzCgpJZiB0aGUgUUVNVSBWTkMgc2VydmVyIGlzIHRvIHVzZSB0aGUgQGNvZGV7eDUwOXZlcmlmeX0gb3B0aW9uIHRvIHZhbGlkYXRlIGNsaWVudApjZXJ0aWZpY2F0ZXMgYXMgaXRzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSwgZWFjaCBjbGllbnQgYWxzbyBuZWVkcyB0byBiZSBpc3N1ZWQKYSBjZXJ0aWZpY2F0ZS4gVGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb250YWlucyBlbm91Z2ggbWV0YWRhdGEgdG8gdW5pcXVlbHkgaWRlbnRpZnkKdGhlIGNsaWVudCwgdHlwaWNhbGx5IG9yZ2FuaXphdGlvbiwgc3RhdGUsIGNpdHksIGJ1aWxkaW5nLCBldGMuIE9uIHRoZSBob3N0IGhvbGRpbmcKdGhlIHNlY3VyZSBDQSBwcml2YXRlIGtleToKCkBleGFtcGxlCiMgY2F0ID4gY2xpZW50LmluZm8gPDxFT0YKY291bnRyeSA9IEdCCnN0YXRlID0gTG9uZG9uCmxvY2FsaXR5ID0gTG9uZG9uCm9yZ2FuaWF6YXRpb24gPSBOYW1lIG9mIHlvdXIgb3JnYW5pemF0aW9uCmNuID0gY2xpZW50LmZvby5leGFtcGxlLmNvbQp0bHNfd3d3X2NsaWVudAplbmNyeXB0aW9uX2tleQpzaWduaW5nX2tleQpFT0YKIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLXByaXZrZXkgPiBjbGllbnQta2V5LnBlbQojIGNlcnR0b29sIC0tZ2VuZXJhdGUtY2VydGlmaWNhdGUgXAogICAgICAgICAgIC0tbG9hZC1jYS1jZXJ0aWZpY2F0ZSBjYS1jZXJ0LnBlbSBcCiAgICAgICAgICAgLS1sb2FkLWNhLXByaXZrZXkgY2Eta2V5LnBlbSBcCiAgICAgICAgICAgLS1sb2FkLXByaXZrZXkgY2xpZW50LWtleS5wZW0gXAogICAgICAgICAgIC0tdGVtcGxhdGUgY2xpZW50LmluZm8gXAogICAgICAgICAgIC0tb3V0ZmlsZSBjbGllbnQtY2VydC5wZW0KQGVuZCBleGFtcGxlCgpUaGUgQGNvZGV7Y2xpZW50LWtleS5wZW19IGFuZCBAY29kZXtjbGllbnQtY2VydC5wZW19IGZpbGVzIHNob3VsZCBub3cgYmUgc2VjdXJlbHkKY29waWVkIHRvIHRoZSBjbGllbnQgZm9yIHdoaWNoIHRoZXkgd2VyZSBnZW5lcmF0ZWQuCgoKQG5vZGUgdm5jX3NldHVwX3Nhc2wKCkBzdWJzZWN0aW9uIENvbmZpZ3VyaW5nIFNBU0wgbWVjaGFuaXNtcwoKVGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFzc3VtZXMgdXNlIG9mIHRoZSBDeXJ1cyBTQVNMIGltcGxlbWVudGF0aW9uIG9uIGEKTGludXggaG9zdCwgYnV0IHRoZSBwcmluY2lwYWxzIHNob3VsZCBhcHBseSB0byBhbnkgb3RoZXIgU0FTTCBpbXBsLiBXaGVuIFNBU0wKaXMgZW5hYmxlZCwgdGhlIG1lY2hhbmlzbSBjb25maWd1cmF0aW9uIHdpbGwgYmUgbG9hZGVkIGZyb20gc3lzdGVtIGRlZmF1bHQKU0FTTCBzZXJ2aWNlIGNvbmZpZyAvZXRjL3Nhc2wyL3FlbXUuY29uZi4gSWYgcnVubmluZyBRRU1VIGFzIGFuCnVucHJpdmlsZWdlZCB1c2VyLCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTQVNMX0NPTkZfUEFUSCBjYW4gYmUgdXNlZAp0byBtYWtlIGl0IHNlYXJjaCBhbHRlcm5hdGUgbG9jYXRpb25zIGZvciB0aGUgc2VydmljZSBjb25maWcuCgpUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1pZ2h0IGNvbnRhaW4KCkBleGFtcGxlCm1lY2hfbGlzdDogZGlnZXN0LW1kNQpzYXNsZGJfcGF0aDogL2V0Yy9xZW11L3Bhc3N3ZC5kYgpAZW5kIGV4YW1wbGUKClRoaXMgc2F5cyB0byB1c2UgdGhlICdEaWdlc3QgTUQ1JyBtZWNoYW5pc20sIHdoaWNoIGlzIHNpbWlsYXIgdG8gdGhlIEhUVFAKRGlnZXN0LU1ENSBtZWNoYW5pc20uIFRoZSBsaXN0IG9mIHZhbGlkIHVzZXJuYW1lcyAmIHBhc3N3b3JkcyBpcyBtYWludGFpbmVkCmluIHRoZSAvZXRjL3FlbXUvcGFzc3dkLmRiIGZpbGUsIGFuZCBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgc2FzbHBhc3N3ZDIKY29tbWFuZC4gV2hpbGUgdGhpcyBtZWNoYW5pc20gaXMgZWFzeSB0byBjb25maWd1cmUgYW5kIHVzZSwgaXQgaXMgbm90CmNvbnNpZGVyZWQgc2VjdXJlIGJ5IG1vZGVybiBzdGFuZGFyZHMsIHNvIG9ubHkgc3VpdGFibGUgZm9yIGRldmVsb3BlcnMgLwphZC1ob2MgdGVzdGluZy4KCkEgbW9yZSBzZXJpb3VzIGRlcGxveW1lbnQgbWlnaHQgdXNlIEtlcmJlcm9zLCB3aGljaCBpcyBkb25lIHdpdGggdGhlICdnc3NhcGknCm1lY2hhbmlzbQoKQGV4YW1wbGUKbWVjaF9saXN0OiBnc3NhcGkKa2V5dGFiOiAvZXRjL3FlbXUva3JiNS50YWIKQGVuZCBleGFtcGxlCgpGb3IgdGhpcyB0byB3b3JrIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHlvdXIgS0RDIG11c3QgZ2VuZXJhdGUgYSBLZXJiZXJvcwpwcmluY2lwYWwgZm9yIHRoZSBzZXJ2ZXIsIHdpdGggYSBuYW1lIG9mICAncWVtdS9zb21laG9zdC5leGFtcGxlLmNvbUBARVhBTVBMRS5DT00nCnJlcGxhY2luZyAnc29tZWhvc3QuZXhhbXBsZS5jb20nIHdpdGggdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0IG5hbWUgb2YgdGhlCm1hY2hpbmUgcnVubmluZyBRRU1VLCBhbmQgJ0VYQU1QTEUuQ09NJyB3aXRoIHRoZSBLZWJlcm9zIFJlYWxtLgoKT3RoZXIgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLiBJdCBzaG91bGQKYmUgbm90ZWQgdGhhdCBvbmx5IERpZ2VzdC1NRDUgYW5kIEdTU0FQSSBwcm92aWRlcyBhIFNTRiBsYXllciBmb3IgZGF0YQplbmNyeXB0aW9uLiBGb3IgYWxsIG90aGVyIG1lY2hhbmlzbXMsIFZOQyBzaG91bGQgYWx3YXlzIGJlIGNvbmZpZ3VyZWQgdG8KdXNlIFRMUyBhbmQgeDUwOSBjZXJ0aWZpY2F0ZXMgdG8gcHJvdGVjdCBzZWN1cml0eSBjcmVkZW50aWFscyBmcm9tIHNub29waW5nLgoKQG5vZGUgZ2RiX3VzYWdlCkBzZWN0aW9uIEdEQiB1c2FnZQoKUUVNVSBoYXMgYSBwcmltaXRpdmUgc3VwcG9ydCB0byB3b3JrIHdpdGggZ2RiLCBzbyB0aGF0IHlvdSBjYW4gZG8KJ0N0cmwtQycgd2hpbGUgdGhlIHZpcnR1YWwgbWFjaGluZSBpcyBydW5uaW5nIGFuZCBpbnNwZWN0IGl0cyBzdGF0ZS4KCkluIG9yZGVyIHRvIHVzZSBnZGIsIGxhdW5jaCBxZW11IHdpdGggdGhlICctcycgb3B0aW9uLiBJdCB3aWxsIHdhaXQgZm9yIGEKZ2RiIGNvbm5lY3Rpb246CkBleGFtcGxlCj4gcWVtdSAtcyAta2VybmVsIGFyY2gvaTM4Ni9ib290L2J6SW1hZ2UgLWhkYSByb290LTIuNC4yMC5pbWcgXAogICAgICAgLWFwcGVuZCAicm9vdD0vZGV2L2hkYSIKQ29ubmVjdGVkIHRvIGhvc3QgbmV0d29yayBpbnRlcmZhY2U6IHR1bjAKV2FpdGluZyBnZGIgY29ubmVjdGlvbiBvbiBwb3J0IDEyMzQKQGVuZCBleGFtcGxlCgpUaGVuIGxhdW5jaCBnZGIgb24gdGhlICd2bWxpbnV4JyBleGVjdXRhYmxlOgpAZXhhbXBsZQo+IGdkYiB2bWxpbnV4CkBlbmQgZXhhbXBsZQoKSW4gZ2RiLCBjb25uZWN0IHRvIFFFTVU6CkBleGFtcGxlCihnZGIpIHRhcmdldCByZW1vdGUgbG9jYWxob3N0OjEyMzQKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBjYW4gdXNlIGdkYiBub3JtYWxseS4gRm9yIGV4YW1wbGUsIHR5cGUgJ2MnIHRvIGxhdW5jaCB0aGUga2VybmVsOgpAZXhhbXBsZQooZ2RiKSBjCkBlbmQgZXhhbXBsZQoKSGVyZSBhcmUgc29tZSB1c2VmdWwgdGlwcyBpbiBvcmRlciB0byB1c2UgZ2RiIG9uIHN5c3RlbSBjb2RlOgoKQGVudW1lcmF0ZQpAaXRlbQpVc2UgQGNvZGV7aW5mbyByZWd9IHRvIGRpc3BsYXkgYWxsIHRoZSBDUFUgcmVnaXN0ZXJzLgpAaXRlbQpVc2UgQGNvZGV7eC8xMGkgJGVpcH0gdG8gZGlzcGxheSB0aGUgY29kZSBhdCB0aGUgUEMgcG9zaXRpb24uCkBpdGVtClVzZSBAY29kZXtzZXQgYXJjaGl0ZWN0dXJlIGk4MDg2fSB0byBkdW1wIDE2IGJpdCBjb2RlLiBUaGVuIHVzZQpAY29kZXt4LzEwaSAkY3MqMTYrJGVpcH0gdG8gZHVtcCB0aGUgY29kZSBhdCB0aGUgUEMgcG9zaXRpb24uCkBlbmQgZW51bWVyYXRlCgpBZHZhbmNlZCBkZWJ1Z2dpbmcgb3B0aW9uczoKClRoZSBkZWZhdWx0IHNpbmdsZSBzdGVwcGluZyBiZWhhdmlvciBpcyBzdGVwIHdpdGggdGhlIElSUXMgYW5kIHRpbWVyIHNlcnZpY2Ugcm91dGluZXMgb2ZmLiAgSXQgaXMgc2V0IHRoaXMgd2F5IGJlY2F1c2Ugd2hlbiBnZGIgZXhlY3V0ZXMgYSBzaW5nbGUgc3RlcCBpdCBleHBlY3RzIHRvIGFkdmFuY2UgYmV5b25kIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLiAgV2l0aCB0aGUgSVJRcyBhbmQgYW5kIHRpbWVyIHNlcnZpY2Ugcm91dGluZXMgb24sIGEgc2luZ2xlIHN0ZXAgbWlnaHQganVtcCBpbnRvIHRoZSBvbmUgb2YgdGhlIGludGVycnVwdCBvciBleGNlcHRpb24gdmVjdG9ycyBpbnN0ZWFkIG9mIGV4ZWN1dGluZyB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4gVGhpcyBtZWFucyB5b3UgbWF5IGhpdCB0aGUgc2FtZSBicmVha3BvaW50IGEgbnVtYmVyIG9mIHRpbWVzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGluc3RydWN0aW9uIGdkYiB3YW50cyB0byBoYXZlIGV4ZWN1dGVkLiAgQmVjYXVzZSB0aGVyZSBhcmUgcmFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIHlvdSB3YW50IHRvIHNpbmdsZSBzdGVwIGludG8gYW4gaW50ZXJydXB0IHZlY3RvciB0aGUgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgZnJvbSBHREIuICBUaGVyZSBhcmUgdGhyZWUgY29tbWFuZHMgeW91IGNhbiBxdWVyeSBhbmQgc2V0IHRoZSBzaW5nbGUgc3RlcCBiZWhhdmlvcjoKQHRhYmxlIEBjb2RlCkBpdGVtIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcGJpdHMKClRoaXMgd2lsbCBkaXNwbGF5IHRoZSBNQVNLIGJpdHMgdXNlZCB0byBjb250cm9sIHRoZSBzaW5nbGUgc3RlcHBpbmcgSUU6CkBleGFtcGxlCihnZGIpIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcGJpdHMKc2VuZGluZzogInFxZW11LnNzdGVwYml0cyIKcmVjZWl2ZWQ6ICJFTkFCTEU9MSxOT0lSUT0yLE5PVElNRVI9NCIKQGVuZCBleGFtcGxlCkBpdGVtIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcAoKVGhpcyB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1hc2sgdXNlZCB3aGVuIHNpbmdsZSBzdGVwcGluZyBJRToKQGV4YW1wbGUKKGdkYikgbWFpbnRlbmFuY2UgcGFja2V0IHFxZW11LnNzdGVwCnNlbmRpbmc6ICJxcWVtdS5zc3RlcCIKcmVjZWl2ZWQ6ICIweDciCkBlbmQgZXhhbXBsZQpAaXRlbSBtYWludGVuYW5jZSBwYWNrZXQgUXFlbXUuc3N0ZXA9SEVYX1ZBTFVFCgpUaGlzIHdpbGwgY2hhbmdlIHRoZSBzaW5nbGUgc3RlcCBtYXNrLCBzbyBpZiB3YW50ZWQgdG8gZW5hYmxlIElSUXMgb24gdGhlIHNpbmdsZSBzdGVwLCBidXQgbm90IHRpbWVycywgeW91IHdvdWxkIHVzZToKQGV4YW1wbGUKKGdkYikgbWFpbnRlbmFuY2UgcGFja2V0IFFxZW11LnNzdGVwPTB4NQpzZW5kaW5nOiAicWVtdS5zc3RlcD0weDUiCnJlY2VpdmVkOiAiT0siCkBlbmQgZXhhbXBsZQpAZW5kIHRhYmxlCgpAbm9kZSBwY3N5c19vc19zcGVjaWZpYwpAc2VjdGlvbiBUYXJnZXQgT1Mgc3BlY2lmaWMgaW5mb3JtYXRpb24KCkBzdWJzZWN0aW9uIExpbnV4CgpUbyBoYXZlIGFjY2VzcyB0byBTVkdBIGdyYXBoaWMgbW9kZXMgdW5kZXIgWDExLCB1c2UgdGhlIEBjb2Rle3Zlc2F9IG9yCnRoZSBAY29kZXtjaXJydXN9IFgxMSBkcml2ZXIuIEZvciBvcHRpbWFsIHBlcmZvcm1hbmNlcywgdXNlIDE2IGJpdApjb2xvciBkZXB0aCBpbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IE9TLgoKV2hlbiB1c2luZyBhIDIuNiBndWVzdCBMaW51eCBrZXJuZWwsIHlvdSBzaG91bGQgYWRkIHRoZSBvcHRpb24KQGNvZGV7Y2xvY2s9cGl0fSBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSAyLjYgTGludXgKa2VybmVscyBtYWtlIHZlcnkgc3RyaWN0IHJlYWwgdGltZSBjbG9jayBjaGVja3MgYnkgZGVmYXVsdCB0aGF0IFFFTVUKY2Fubm90IHNpbXVsYXRlIGV4YWN0bHkuCgpXaGVuIHVzaW5nIGEgMi42IGd1ZXN0IExpbnV4IGtlcm5lbCwgdmVyaWZ5IHRoYXQgdGhlIDRHLzRHIHBhdGNoIGlzCm5vdCBhY3RpdmF0ZWQgYmVjYXVzZSBRRU1VIGlzIHNsb3dlciB3aXRoIHRoaXMgcGF0Y2guIFRoZSBRRU1VCkFjY2VsZXJhdG9yIE1vZHVsZSBpcyBhbHNvIG11Y2ggc2xvd2VyIGluIHRoaXMgY2FzZS4gRWFybGllciBGZWRvcmEKQ29yZSAzIExpbnV4IGtlcm5lbCAoPCAyLjYuOS0xLjcyNF9GQzMpIHdlcmUga25vd24gdG8gaW5jb3Jwb3JhdGUgdGhpcwpwYXRjaCBieSBkZWZhdWx0LiBOZXdlciBrZXJuZWxzIGRvbid0IGhhdmUgaXQuCgpAc3Vic2VjdGlvbiBXaW5kb3dzCgpJZiB5b3UgaGF2ZSBhIHNsb3cgaG9zdCwgdXNpbmcgV2luZG93cyA5NSBpcyBiZXR0ZXIgYXMgaXQgZ2l2ZXMgdGhlCmJlc3Qgc3BlZWQuIFdpbmRvd3MgMjAwMCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuCgpAc3Vic3Vic2VjdGlvbiBTVkdBIGdyYXBoaWMgbW9kZXMgc3VwcG9ydAoKUUVNVSBlbXVsYXRlcyBhIENpcnJ1cyBMb2dpYyBHRDU0NDYgVmlkZW8KY2FyZC4gQWxsIFdpbmRvd3MgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBXaW5kb3dzIDk1IHNob3VsZCByZWNvZ25pemUKYW5kIHVzZSB0aGlzIGdyYXBoaWMgY2FyZC4gRm9yIG9wdGltYWwgcGVyZm9ybWFuY2VzLCB1c2UgMTYgYml0IGNvbG9yCmRlcHRoIGluIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgT1MuCgpJZiB5b3UgYXJlIHVzaW5nIFdpbmRvd3MgWFAgYXMgZ3Vlc3QgT1MgYW5kIGlmIHlvdSB3YW50IHRvIHVzZSBoaWdoCnJlc29sdXRpb24gbW9kZXMgd2hpY2ggdGhlIENpcnJ1cyBMb2dpYyBCSU9TIGRvZXMgbm90IHN1cHBvcnQgKGkuZS4gPj0KMTI4MHgxMDI0eDE2KSwgdGhlbiB5b3Ugc2hvdWxkIHVzZSB0aGUgVkVTQSBWQkUgdmlydHVhbCBncmFwaGljIGNhcmQKKG9wdGlvbiBAb3B0aW9uey1zdGQtdmdhfSkuCgpAc3Vic3Vic2VjdGlvbiBDUFUgdXNhZ2UgcmVkdWN0aW9uCgpXaW5kb3dzIDl4IGRvZXMgbm90IGNvcnJlY3RseSB1c2UgdGhlIENQVSBITFQKaW5zdHJ1Y3Rpb24uIFRoZSByZXN1bHQgaXMgdGhhdCBpdCB0YWtlcyBob3N0IENQVSBjeWNsZXMgZXZlbiB3aGVuCmlkbGUuIFlvdSBjYW4gaW5zdGFsbCB0aGUgdXRpbGl0eSBmcm9tCkB1cmx7aHR0cDovL3d3dy51c2VyLmNpdHlsaW5lLnJ1L35tYXhhbW4vYW1uaGx0bS56aXB9IHRvIHNvbHZlIHRoaXMKcHJvYmxlbS4gTm90ZSB0aGF0IG5vIHN1Y2ggdG9vbCBpcyBuZWVkZWQgZm9yIE5ULCAyMDAwIG9yIFhQLgoKQHN1YnN1YnNlY3Rpb24gV2luZG93cyAyMDAwIGRpc2sgZnVsbCBwcm9ibGVtCgpXaW5kb3dzIDIwMDAgaGFzIGEgYnVnIHdoaWNoIGdpdmVzIGEgZGlzayBmdWxsIHByb2JsZW0gZHVyaW5nIGl0cwppbnN0YWxsYXRpb24uIFdoZW4gaW5zdGFsbGluZyBpdCwgdXNlIHRoZSBAb3B0aW9uey13aW4yay1oYWNrfSBRRU1VCm9wdGlvbiB0byBlbmFibGUgYSBzcGVjaWZpYyB3b3JrYXJvdW5kLiBBZnRlciBXaW5kb3dzIDIwMDAgaXMKaW5zdGFsbGVkLCB5b3Ugbm8gbG9uZ2VyIG5lZWQgdGhpcyBvcHRpb24gKHRoaXMgb3B0aW9uIHNsb3dzIGRvd24gdGhlCklERSB0cmFuc2ZlcnMpLgoKQHN1YnN1YnNlY3Rpb24gV2luZG93cyAyMDAwIHNodXRkb3duCgpXaW5kb3dzIDIwMDAgY2Fubm90IGF1dG9tYXRpY2FsbHkgc2h1dGRvd24gaW4gUUVNVSBhbHRob3VnaCBXaW5kb3dzIDk4CmNhbi4gSXQgY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IFdpbmRvd3MgMjAwMCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CnVzZSB0aGUgQVBNIGRyaXZlciBwcm92aWRlZCBieSB0aGUgQklPUy4KCkluIG9yZGVyIHRvIGNvcnJlY3QgdGhhdCwgZG8gdGhlIGZvbGxvd2luZyAodGhhbmtzIHRvIFN0cnVhbgpCYXJ0bGV0dCk6IGdvIHRvIHRoZSBDb250cm9sIFBhbmVsID0+IEFkZC9SZW1vdmUgSGFyZHdhcmUgJiBOZXh0ID0+CkFkZC9Ucm91Ymxlc2hvb3QgYSBkZXZpY2UgPT4gQWRkIGEgbmV3IGRldmljZSAmIE5leHQgPT4gTm8sIHNlbGVjdCB0aGUKaGFyZHdhcmUgZnJvbSBhIGxpc3QgJiBOZXh0ID0+IE5UIEFwbS9MZWdhY3kgU3VwcG9ydCAmIE5leHQgPT4gTmV4dAooYWdhaW4pIGEgZmV3IHRpbWVzLiBOb3cgdGhlIGRyaXZlciBpcyBpbnN0YWxsZWQgYW5kIFdpbmRvd3MgMjAwMCBub3cKY29ycmVjdGx5IGluc3RydWN0cyBRRU1VIHRvIHNodXRkb3duIGF0IHRoZSBhcHByb3ByaWF0ZSBtb21lbnQuCgpAc3Vic3Vic2VjdGlvbiBTaGFyZSBhIGRpcmVjdG9yeSBiZXR3ZWVuIFVuaXggYW5kIFdpbmRvd3MKClNlZSBAcmVme3NlY19pbnZvY2F0aW9ufSBhYm91dCB0aGUgaGVscCBvZiB0aGUgb3B0aW9uIEBvcHRpb257LXNtYn0uCgpAc3Vic3Vic2VjdGlvbiBXaW5kb3dzIFhQIHNlY3VyaXR5IHByb2JsZW0KClNvbWUgcmVsZWFzZXMgb2YgV2luZG93cyBYUCBpbnN0YWxsIGNvcnJlY3RseSBidXQgZ2l2ZSBhIHNlY3VyaXR5CmVycm9yIHdoZW4gYm9vdGluZzoKQGV4YW1wbGUKQSBwcm9ibGVtIGlzIHByZXZlbnRpbmcgV2luZG93cyBmcm9tIGFjY3VyYXRlbHkgY2hlY2tpbmcgdGhlCmxpY2Vuc2UgZm9yIHRoaXMgY29tcHV0ZXIuIEVycm9yIGNvZGU6IDB4ODAwNzAzZTYuCkBlbmQgZXhhbXBsZQoKVGhlIHdvcmthcm91bmQgaXMgdG8gaW5zdGFsbCBhIHNlcnZpY2UgcGFjayBmb3IgWFAgYWZ0ZXIgYSBib290IGluIHNhZmUKbW9kZS4gVGhlbiByZWJvb3QsIGFuZCB0aGUgcHJvYmxlbSBzaG91bGQgZ28gYXdheS4gU2luY2UgdGhlcmUgaXMgbm8KbmV0d29yayB3aGlsZSBpbiBzYWZlIG1vZGUsIGl0cyByZWNvbW1lbmRlZCB0byBkb3dubG9hZCB0aGUgZnVsbAppbnN0YWxsYXRpb24gb2YgU1AxIG9yIFNQMiBhbmQgdHJhbnNmZXIgdGhhdCB2aWEgYW4gSVNPIG9yIHVzaW5nIHRoZQp2dmZhdCBibG9jayBkZXZpY2UgKCItaGRiIGZhdDpkaXJlY3Rvcnlfd2hpY2hfaG9sZHNfdGhlX1NQIikuCgpAc3Vic2VjdGlvbiBNUy1ET1MgYW5kIEZyZWVET1MKCkBzdWJzdWJzZWN0aW9uIENQVSB1c2FnZSByZWR1Y3Rpb24KCkRPUyBkb2VzIG5vdCBjb3JyZWN0bHkgdXNlIHRoZSBDUFUgSExUIGluc3RydWN0aW9uLiBUaGUgcmVzdWx0IGlzIHRoYXQKaXQgdGFrZXMgaG9zdCBDUFUgY3ljbGVzIGV2ZW4gd2hlbiBpZGxlLiBZb3UgY2FuIGluc3RhbGwgdGhlIHV0aWxpdHkKZnJvbSBAdXJse2h0dHA6Ly93d3cudm13YXJlLmNvbS9zb2Z0d2FyZS9kb3NpZGxlMjEwLnppcH0gdG8gc29sdmUgdGhpcwpwcm9ibGVtLgoKQG5vZGUgUUVNVSBTeXN0ZW0gZW11bGF0b3IgZm9yIG5vbiBQQyB0YXJnZXRzCkBjaGFwdGVyIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0cwoKUUVNVSBpcyBhIGdlbmVyaWMgZW11bGF0b3IgYW5kIGl0IGVtdWxhdGVzIG1hbnkgbm9uIFBDCm1hY2hpbmVzLiBNb3N0IG9mIHRoZSBvcHRpb25zIGFyZSBzaW1pbGFyIHRvIHRoZSBQQyBlbXVsYXRvci4gVGhlCmRpZmZlcmVuY2VzIGFyZSBtZW50aW9uZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KCkBtZW51CiogUUVNVSBQb3dlclBDIFN5c3RlbSBlbXVsYXRvcjo6CiogU3BhcmMzMiBTeXN0ZW0gZW11bGF0b3I6OgoqIFNwYXJjNjQgU3lzdGVtIGVtdWxhdG9yOjoKKiBNSVBTIFN5c3RlbSBlbXVsYXRvcjo6CiogQVJNIFN5c3RlbSBlbXVsYXRvcjo6CiogQ29sZEZpcmUgU3lzdGVtIGVtdWxhdG9yOjoKQGVuZCBtZW51CgpAbm9kZSBRRU1VIFBvd2VyUEMgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIFFFTVUgUG93ZXJQQyBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1wcGN9IHRvIHNpbXVsYXRlIGEgY29tcGxldGUgUFJFUApvciBQb3dlck1hYyBQb3dlclBDIHN5c3RlbS4KClFFTVUgZW11bGF0ZXMgdGhlIGZvbGxvd2luZyBQb3dlck1hYyBwZXJpcGhlcmFsczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpVbmlOb3J0aCBvciBHcmFja2xlIFBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KMiBQTUFDIElERSBpbnRlcmZhY2VzIHdpdGggaGFyZCBkaXNrIGFuZCBDRC1ST00gc3VwcG9ydApAaXRlbQpORTIwMDAgUENJIGFkYXB0ZXJzCkBpdGVtCk5vbiBWb2xhdGlsZSBSQU0KQGl0ZW0KVklBLUNVREEgd2l0aCBBREIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAZW5kIGl0ZW1pemUKClFFTVUgZW11bGF0ZXMgdGhlIGZvbGxvd2luZyBQUkVQIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtClBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KMiBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRpc2sKQGl0ZW0KTkUyMDAwIG5ldHdvcmsgYWRhcHRlcnMKQGl0ZW0KU2VyaWFsIHBvcnQKQGl0ZW0KUFJFUCBOb24gVm9sYXRpbGUgUkFNCkBpdGVtClBDIGNvbXBhdGlibGUga2V5Ym9hcmQgYW5kIG1vdXNlLgpAZW5kIGl0ZW1pemUKClFFTVUgdXNlcyB0aGUgT3BlbiBIYWNrJ1dhcmUgT3BlbiBGaXJtd2FyZSBDb21wYXRpYmxlIEJJT1MgYXZhaWxhYmxlIGF0CkB1cmx7aHR0cDovL3BlcnNvLm1hZ2ljLmZyL2xfaW5kaWVuL09wZW5IYWNrV2FyZS9pbmRleC5odG19LgoKU2luY2UgdmVyc2lvbiAwLjkuMSwgUUVNVSB1c2VzIE9wZW5CSU9TIEB1cmx7aHR0cDovL3d3dy5vcGVuYmlvcy5vcmcvfQpmb3IgdGhlIGczYmVpZ2UgYW5kIG1hYzk5IFBvd2VyTWFjIG1hY2hpbmVzLiBPcGVuQklPUyBpcyBhIGZyZWUgKEdQTAp2MikgcG9ydGFibGUgZmlybXdhcmUgaW1wbGVtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIGltcGxlbWVudCBhIDEwMCUKSUVFRSAxMjc1LTE5OTQgKHJlZmVycmVkIHRvIGFzIE9wZW4gRmlybXdhcmUpIGNvbXBsaWFudCBmaXJtd2FyZS4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBQb3dlclBDIGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtZyBAdmFye1d9eEB2YXJ7SH1beEB2YXJ7REVQVEh9XQoKU2V0IHRoZSBpbml0aWFsIFZHQSBncmFwaGljIG1vZGUuIFRoZSBkZWZhdWx0IGlzIDgwMHg2MDB4MTUuCgpAaXRlbSAtcHJvbS1lbnYgQHZhcntzdHJpbmd9CgpTZXQgT3BlbkJJT1MgdmFyaWFibGVzIGluIE5WUkFNLCBmb3IgZXhhbXBsZToKCkBleGFtcGxlCnFlbXUtc3lzdGVtLXBwYyAtcHJvbS1lbnYgJ2F1dG8tYm9vdD89ZmFsc2UnIFwKIC1wcm9tLWVudiAnYm9vdC1kZXZpY2U9aGQ6MixceWFib290JyBcCiAtcHJvbS1lbnYgJ2Jvb3QtYXJncz1jb25mPWhkOjIsXHlhYm9vdC5jb25mJwpAZW5kIGV4YW1wbGUKClRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IHVzZWQgYnkgT3BlbiBIYWNrJ1dhcmUuCgpAZW5kIHRhYmxlCgpAYyBtYW4gZW5kCgoKTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKQHVybHtodHRwOi8vcGVyc28ubWFnaWMuZnIvbF9pbmRpZW4vcWVtdS1wcGMvfS4KCkBub2RlIFNwYXJjMzIgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIFNwYXJjMzIgU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tc3BhcmN9IHRvIHNpbXVsYXRlIHRoZSBmb2xsb3dpbmcKU3VuNG0gYXJjaGl0ZWN0dXJlIG1hY2hpbmVzOgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KU1BBUkNzdGF0aW9uIDQKQGl0ZW0KU1BBUkNzdGF0aW9uIDUKQGl0ZW0KU1BBUkNzdGF0aW9uIDEwCkBpdGVtClNQQVJDc3RhdGlvbiAyMApAaXRlbQpTUEFSQ3NlcnZlciA2MDBNUApAaXRlbQpTUEFSQ3N0YXRpb24gTFgKQGl0ZW0KU1BBUkNzdGF0aW9uIFZveWFnZXIKQGl0ZW0KU1BBUkNjbGFzc2ljCkBpdGVtClNQQVJDYm9vawpAZW5kIGl0ZW1pemUKClRoZSBlbXVsYXRpb24gaXMgc29tZXdoYXQgY29tcGxldGUuIFNNUCB1cCB0byAxNiBDUFVzIGlzIHN1cHBvcnRlZCwKYnV0IExpbnV4IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHVzYWJsZSBDUFVzIHRvIDQuCgpJdCdzIGFsc28gcG9zc2libGUgdG8gc2ltdWxhdGUgYSBTUEFSQ3N0YXRpb24gMiAoc3VuNGMgYXJjaGl0ZWN0dXJlKSwKU1BBUkNzZXJ2ZXIgMTAwMCwgb3IgU1BBUkNjZW50ZXIgMjAwMCAoc3VuNGQgYXJjaGl0ZWN0dXJlKSwgYnV0IHRoZXNlCmVtdWxhdG9ycyBhcmUgbm90IHVzYWJsZSB5ZXQuCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgc3VuNG0vc3VuNGMvc3VuNGQgcGVyaXBoZXJhbHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KSU9NTVUgb3IgSU8tVU5JVHMKQGl0ZW0KVENYIEZyYW1lIGJ1ZmZlcgpAaXRlbQpMYW5jZSAoQW03OTkwKSBFdGhlcm5ldApAaXRlbQpOb24gVm9sYXRpbGUgUkFNIE00OFQwMi9NNDhUMDgKQGl0ZW0KU2xhdmUgSS9POiB0aW1lcnMsIGludGVycnVwdCBjb250cm9sbGVycywgWmlsb2cgc2VyaWFsIHBvcnRzLCBrZXlib2FyZAphbmQgcG93ZXIvcmVzZXQgbG9naWMKQGl0ZW0KRVNQIFNDU0kgY29udHJvbGxlciB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRyaXZlIChub3Qgb24gU1MtNjAwTVApCkBpdGVtCkNTNDIzMSBzb3VuZCBkZXZpY2UgKG9ubHkgb24gU1MtNSwgbm90IHdvcmtpbmcgeWV0KQpAZW5kIGl0ZW1pemUKClRoZSBudW1iZXIgb2YgcGVyaXBoZXJhbHMgaXMgZml4ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZS4gIE1heGltdW0KbWVtb3J5IHNpemUgZGVwZW5kcyBvbiB0aGUgbWFjaGluZSB0eXBlLCBmb3IgU1MtNSBpdCBpcyAyNTZNQiBhbmQgZm9yCm90aGVycyAyMDQ3TUIuCgpTaW5jZSB2ZXJzaW9uIDAuOC4yLCBRRU1VIHVzZXMgT3BlbkJJT1MKQHVybHtodHRwOi8vd3d3Lm9wZW5iaW9zLm9yZy99LiBPcGVuQklPUyBpcyBhIGZyZWUgKEdQTCB2MikgcG9ydGFibGUKZmlybXdhcmUgaW1wbGVtZW50YXRpb24uIFRoZSBnb2FsIGlzIHRvIGltcGxlbWVudCBhIDEwMCUgSUVFRQoxMjc1LTE5OTQgKHJlZmVycmVkIHRvIGFzIE9wZW4gRmlybXdhcmUpIGNvbXBsaWFudCBmaXJtd2FyZS4KCkEgc2FtcGxlIExpbnV4IDIuNiBzZXJpZXMga2VybmVsIGFuZCByYW0gZGlzayBpbWFnZSBhcmUgYXZhaWxhYmxlIG9uCnRoZSBRRU1VIHdlYiBzaXRlLiBUaGVyZSBhcmUgc3RpbGwgaXNzdWVzIHdpdGggTmV0QlNEIGFuZCBPcGVuQlNELCBidXQKc29tZSBrZXJuZWwgdmVyc2lvbnMgd29yay4gUGxlYXNlIG5vdGUgdGhhdCBjdXJyZW50bHkgU29sYXJpcyBrZXJuZWxzCmRvbid0IHdvcmsgcHJvYmFibHkgZHVlIHRvIGludGVyZmFjZSBpc3N1ZXMgYmV0d2VlbiBPcGVuQklPUyBhbmQKU29sYXJpcy4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBTcGFyYzMyIGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtZyBAdmFye1d9eEB2YXJ7SH14W3hAdmFye0RFUFRIfV0KClNldCB0aGUgaW5pdGlhbCBUQ1ggZ3JhcGhpYyBtb2RlLiBUaGUgZGVmYXVsdCBpcyAxMDI0eDc2OHg4LCBjdXJyZW50bHkKdGhlIG9ubHkgb3RoZXIgcG9zc2libGUgbW9kZSBpcyAxMDI0eDc2OHgyNC4KCkBpdGVtIC1wcm9tLWVudiBAdmFye3N0cmluZ30KClNldCBPcGVuQklPUyB2YXJpYWJsZXMgaW4gTlZSQU0sIGZvciBleGFtcGxlOgoKQGV4YW1wbGUKcWVtdS1zeXN0ZW0tc3BhcmMgLXByb20tZW52ICdhdXRvLWJvb3Q/PWZhbHNlJyBcCiAtcHJvbS1lbnYgJ2Jvb3QtZGV2aWNlPXNkKDAsMiwwKTpkJyAtcHJvbS1lbnYgJ2Jvb3QtYXJncz1saW51eCBzaW5nbGUnCkBlbmQgZXhhbXBsZQoKQGl0ZW0gLU0gW1NTLTR8U1MtNXxTUy0xMHxTUy0yMHxTUy02MDBNUHxMWHxWb3lhZ2VyfFNQQVJDQ2xhc3NpY3xTUEFSQ2Jvb2t8U1MtMnxTUy0xMDAwfFNTLTIwMDBdCgpTZXQgdGhlIGVtdWxhdGVkIG1hY2hpbmUgdHlwZS4gRGVmYXVsdCBpcyBTUy01LgoKQGVuZCB0YWJsZQoKQGMgbWFuIGVuZAoKQG5vZGUgU3BhcmM2NCBTeXN0ZW0gZW11bGF0b3IKQHNlY3Rpb24gU3BhcmM2NCBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1zcGFyYzY0fSB0byBzaW11bGF0ZSBhIFN1bjR1CihVbHRyYVNQQVJDIFBDLWxpa2UgbWFjaGluZSksIFN1bjR2IChUMSBQQy1saWtlIG1hY2hpbmUpLCBvciBnZW5lcmljCk5pYWdhcmEgKFQxKSBtYWNoaW5lLiBUaGUgZW11bGF0b3IgaXMgbm90IHVzYWJsZSBmb3IgYW55dGhpbmcgeWV0LCBidXQKaXQgY2FuIGxhdW5jaCBzb21lIGtlcm5lbHMuCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgcGVyaXBoZXJhbHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVWx0cmFTcGFyYyBJSWkgQVBCIFBDSSBCcmlkZ2UKQGl0ZW0KUENJIFZHQSBjb21wYXRpYmxlIGNhcmQgd2l0aCBWRVNBIEJvY2hzIEV4dGVuc2lvbnMKQGl0ZW0KUFMvMiBtb3VzZSBhbmQga2V5Ym9hcmQKQGl0ZW0KTm9uIFZvbGF0aWxlIFJBTSBNNDhUNTkKQGl0ZW0KUEMtY29tcGF0aWJsZSBzZXJpYWwgcG9ydHMKQGl0ZW0KMiBQQ0kgSURFIGludGVyZmFjZXMgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBzdXBwb3J0CkBpdGVtCkZsb3BweSBkaXNrCkBlbmQgaXRlbWl6ZQoKQGMgbWFuIGJlZ2luIE9QVElPTlMKClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIFNwYXJjNjQgZW11bGF0aW9uOgoKQHRhYmxlIEBvcHRpb24KCkBpdGVtIC1wcm9tLWVudiBAdmFye3N0cmluZ30KClNldCBPcGVuQklPUyB2YXJpYWJsZXMgaW4gTlZSQU0sIGZvciBleGFtcGxlOgoKQGV4YW1wbGUKcWVtdS1zeXN0ZW0tc3BhcmM2NCAtcHJvbS1lbnYgJ2F1dG8tYm9vdD89ZmFsc2UnCkBlbmQgZXhhbXBsZQoKQGl0ZW0gLU0gW3N1bjR1fHN1bjR2fE5pYWdhcmFdCgpTZXQgdGhlIGVtdWxhdGVkIG1hY2hpbmUgdHlwZS4gVGhlIGRlZmF1bHQgaXMgc3VuNHUuCgpAZW5kIHRhYmxlCgpAYyBtYW4gZW5kCgpAbm9kZSBNSVBTIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBNSVBTIFN5c3RlbSBlbXVsYXRvcgoKRm91ciBleGVjdXRhYmxlcyBjb3ZlciBzaW11bGF0aW9uIG9mIDMyIGFuZCA2NC1iaXQgTUlQUyBzeXN0ZW1zIGluCmJvdGggZW5kaWFuIG9wdGlvbnMsIEBmaWxle3FlbXUtc3lzdGVtLW1pcHN9LCBAZmlsZXtxZW11LXN5c3RlbS1taXBzZWx9CkBmaWxle3FlbXUtc3lzdGVtLW1pcHM2NH0gYW5kIEBmaWxle3FlbXUtc3lzdGVtLW1pcHM2NGVsfS4KRml2ZSBkaWZmZXJlbnQgbWFjaGluZSB0eXBlcyBhcmUgZW11bGF0ZWQ6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQSBnZW5lcmljIElTQSBQQy1saWtlIG1hY2hpbmUgIm1pcHMiCkBpdGVtClRoZSBNSVBTIE1hbHRhIHByb3RvdHlwZSBib2FyZCAibWFsdGEiCkBpdGVtCkFuIEFDRVIgUGljYSAicGljYTYxIi4gVGhpcyBtYWNoaW5lIG5lZWRzIHRoZSA2NC1iaXQgZW11bGF0b3IuCkBpdGVtCk1JUFMgZW11bGF0b3IgcHNldWRvIGJvYXJkICJtaXBzc2ltIgpAaXRlbQpBIE1JUFMgTWFnbnVtIFI0MDAwIG1hY2hpbmUgIm1hZ251bSIuIFRoaXMgbWFjaGluZSBuZWVkcyB0aGUgNjQtYml0IGVtdWxhdG9yLgpAZW5kIGl0ZW1pemUKClRoZSBnZW5lcmljIGVtdWxhdGlvbiBpcyBzdXBwb3J0ZWQgYnkgRGViaWFuICdFdGNoJyBhbmQgaXMgYWJsZSB0bwppbnN0YWxsIERlYmlhbiBpbnRvIGEgdmlydHVhbCBkaXNrIGltYWdlLiBUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlCmVtdWxhdGVkOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkEgcmFuZ2Ugb2YgTUlQUyBDUFVzLCBkZWZhdWx0IGlzIHRoZSAyNEtmCkBpdGVtClBDIHN0eWxlIHNlcmlhbCBwb3J0CkBpdGVtClBDIHN0eWxlIElERSBkaXNrCkBpdGVtCk5FMjAwMCBuZXR3b3JrIGNhcmQKQGVuZCBpdGVtaXplCgpUaGUgTWFsdGEgZW11bGF0aW9uIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpDb3JlIGJvYXJkIHdpdGggTUlQUyAyNEtmIENQVSBhbmQgR2FsaWxlbyBzeXN0ZW0gY29udHJvbGxlcgpAaXRlbQpQSUlYNCBQQ0kvVVNCL1NNYnVzIGNvbnRyb2xsZXIKQGl0ZW0KVGhlIE11bHRpLUkvTyBjaGlwJ3Mgc2VyaWFsIGRldmljZQpAaXRlbQpQQ0kgbmV0d29yayBjYXJkcyAoUENuZXQzMiBhbmQgb3RoZXJzKQpAaXRlbQpNYWx0YSBGUEdBIHNlcmlhbCBkZXZpY2UKQGl0ZW0KQ2lycnVzIChkZWZhdWx0KSBvciBhbnkgb3RoZXIgUENJIFZHQSBncmFwaGljcyBjYXJkCkBlbmQgaXRlbWl6ZQoKVGhlIEFDRVIgUGljYSBlbXVsYXRpb24gc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUlQUyBSNDAwMCBDUFUKQGl0ZW0KUEMtc3R5bGUgSVJRIGFuZCBETUEgY29udHJvbGxlcnMKQGl0ZW0KUEMgS2V5Ym9hcmQKQGl0ZW0KSURFIGNvbnRyb2xsZXIKQGVuZCBpdGVtaXplCgpUaGUgbWlwc3NpbSBwc2V1ZG8gYm9hcmQgZW11bGF0aW9uIHByb3ZpZGVzIGFuIGVudmlyb25tZW50IHNpbWlsaWFyCnRvIHdoYXQgdGhlIHByb3ByaWV0YXJ5IE1JUFMgZW11bGF0b3IgdXNlcyBmb3IgcnVubmluZyBMaW51eC4KSXQgc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQSByYW5nZSBvZiBNSVBTIENQVXMsIGRlZmF1bHQgaXMgdGhlIDI0S2YKQGl0ZW0KUEMgc3R5bGUgc2VyaWFsIHBvcnQKQGl0ZW0KTUlQU25ldCBuZXR3b3JrIGVtdWxhdGlvbgpAZW5kIGl0ZW1pemUKClRoZSBNSVBTIE1hZ251bSBSNDAwMCBlbXVsYXRpb24gc3VwcG9ydHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUlQUyBSNDAwMCBDUFUKQGl0ZW0KUEMtc3R5bGUgSVJRIGNvbnRyb2xsZXIKQGl0ZW0KUEMgS2V5Ym9hcmQKQGl0ZW0KU0NTSSBjb250cm9sbGVyCkBpdGVtCkczNjQgZnJhbWVidWZmZXIKQGVuZCBpdGVtaXplCgoKQG5vZGUgQVJNIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBBUk0gU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tYXJtfSB0byBzaW11bGF0ZSBhIEFSTQptYWNoaW5lLiBUaGUgQVJNIEludGVncmF0b3IvQ1AgYm9hcmQgaXMgZW11bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nCmRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQVJNOTI2RSwgQVJNMTAyNkUsIEFSTTk0NkUsIEFSTTExMzYgb3IgQ29ydGV4LUE4IENQVQpAaXRlbQpUd28gUEwwMTEgVUFSVHMKQGl0ZW0KU01DIDkxYzExMSBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAaXRlbQpQTDE4MSBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIHdpdGggU0QgY2FyZC4KQGVuZCBpdGVtaXplCgpUaGUgQVJNIFZlcnNhdGlsZSBiYXNlYm9hcmQgaXMgZW11bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQVJNOTI2RSwgQVJNMTEzNiBvciBDb3J0ZXgtQTggQ1BVCkBpdGVtClBMMTkwIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyCkBpdGVtCkZvdXIgUEwwMTEgVUFSVHMKQGl0ZW0KU01DIDkxYzExMSBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlLgpAaXRlbQpQQ0kgaG9zdCBicmlkZ2UuICBOb3RlIHRoZSBlbXVsYXRlZCBQQ0kgYnJpZGdlIG9ubHkgcHJvdmlkZXMgYWNjZXNzIHRvClBDSSBtZW1vcnkgc3BhY2UuICBJdCBkb2VzIG5vdCBwcm92aWRlIGFjY2VzcyB0byBQQ0kgSU8gc3BhY2UuClRoaXMgbWVhbnMgc29tZSBkZXZpY2VzIChlZy4gbmUya19wY2kgTklDKSBhcmUgbm90IHVzYWJsZSwgYW5kIG90aGVycwooZWcuIHJ0bDgxMzkgTklDKSBhcmUgb25seSB1c2FibGUgd2hlbiB0aGUgZ3Vlc3QgZHJpdmVycyB1c2UgdGhlIG1lbW9yeQptYXBwZWQgY29udHJvbCByZWdpc3RlcnMuCkBpdGVtClBDSSBPSENJIFVTQiBjb250cm9sbGVyLgpAaXRlbQpMU0k1M0M4OTVBIFBDSSBTQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBkZXZpY2VzLgpAaXRlbQpQTDE4MSBNdWx0aU1lZGlhIENhcmQgSW50ZXJmYWNlIHdpdGggU0QgY2FyZC4KQGVuZCBpdGVtaXplCgpTZXZlcmFsIHZhcmlhbnRzIG9mIHRoZSBBUk0gUmVhbFZpZXcgYmFzZWJvYXJkIGFyZSBlbXVsYXRlZCwKaW5jbHVkaW5nIHRoZSBFQiwgUEItQTggYW5kIFBCWC1BOS4gIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCB0aGUKYm9vdGxvYWRlciwgb25seSBjZXJ0YWluIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9ucyB3b3JrIG91dApvZiB0aGUgYm94IG9uIHRoZXNlIGJvYXJkcy4KCktlcm5lbHMgZm9yIHRoZSBQQi1BOCBib2FyZCBzaG91bGQgaGF2ZSBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAplbmFibGVkIGluIHRoZSBrZXJuZWwsIGFuZCBleHBlY3QgNTEyTSBSQU0uICBLZXJuZWxzIGZvciBUaGUgUEJYLUE5IGJvYXJkCnNob3VsZCBoYXZlIENPTkZJR19TUEFSU0VNRU0gZW5hYmxlZCwgQ09ORklHX1JFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKZGlzYWJsZWQgYW5kIGV4cGVjdCAxMDI0TSBSQU0uCgpUaGUgZm9sbG93aW5nIGRldmljZXMgYXJlIGVtdWlsYXRlZDoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBUk05MjZFLCBBUk0xMTM2LCBBUk0xMU1QQ29yZSwgQ29ydGV4LUE4IG9yIENvcnRleC1BOSBNUENvcmUgQ1BVCkBpdGVtCkFSTSBBTUJBIEdlbmVyaWMvRGlzdHJpYnV0ZWQgSW50ZXJydXB0IENvbnRyb2xsZXIKQGl0ZW0KRm91ciBQTDAxMSBVQVJUcwpAaXRlbQpTTUMgOTFjMTExIG9yIFNNU0MgTEFOOTExOCBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlCkBpdGVtClBDSSBob3N0IGJyaWRnZQpAaXRlbQpQQ0kgT0hDSSBVU0IgY29udHJvbGxlcgpAaXRlbQpMU0k1M0M4OTVBIFBDSSBTQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBkZXZpY2VzCkBpdGVtClBMMTgxIE11bHRpTWVkaWEgQ2FyZCBJbnRlcmZhY2Ugd2l0aCBTRCBjYXJkLgpAZW5kIGl0ZW1pemUKClRoZSBYU2NhbGUtYmFzZWQgY2xhbXNoZWxsIFBEQSBtb2RlbHMgKCJTcGl0eiIsICJBa2l0YSIsICJCb3J6b2kiCmFuZCAiVGVycmllciIpIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkludGVsIFBYQTI3MCBTeXN0ZW0tb24tY2hpcCAoQVJNIFY1VEUgY29yZSkKQGl0ZW0KTkFORCBGbGFzaCBtZW1vcnkKQGl0ZW0KSUJNL0hpdGFjaGkgRFNDTSBtaWNyb2RyaXZlIGluIGEgUFhBIFBDTUNJQSBzbG90IC0gbm90IGluICJBa2l0YSIKQGl0ZW0KT24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyCkBpdGVtCk9uLWNoaXAgTENEIGNvbnRyb2xsZXIKQGl0ZW0KT24tY2hpcCBSZWFsIFRpbWUgQ2xvY2sKQGl0ZW0KVEkgQURTNzg0NiB0b3VjaHNjcmVlbiBjb250cm9sbGVyIG9uIFNTUCBidXMKQGl0ZW0KTWF4aW0gTUFYMTExMSBhbmFsb2ctZGlnaXRhbCBjb252ZXJ0ZXIgb24gSUBtYXRoe14yfUMgYnVzCkBpdGVtCkdQSU8tY29ubmVjdGVkIGtleWJvYXJkIGNvbnRyb2xsZXIgYW5kIExFRHMKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gUFhBIE1NQy9TRCBob3N0CkBpdGVtClRocmVlIG9uLWNoaXAgVUFSVHMKQGl0ZW0KV004NzUwIGF1ZGlvIENPREVDIG9uIElAbWF0aHteMn1DIGFuZCBJQG1hdGh7XjJ9UyBidXNzZXMKQGVuZCBpdGVtaXplCgpUaGUgUGFsbSBUdW5nc3RlbnxFIFBEQSAoY29kZW5hbWUgIkNoZWV0YWgiKSBlbXVsYXRpb24gaW5jbHVkZXMgdGhlCmZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMzEwIFN5c3RlbS1vbi1jaGlwIChBUk0gOTI1VCBjb3JlKQpAaXRlbQpST00gYW5kIFJBTSBtZW1vcmllcyAoUk9NIGZpcm13YXJlIGltYWdlIGNhbiBiZSBsb2FkZWQgd2l0aCAtb3B0aW9uLXJvbSkKQGl0ZW0KT24tY2hpcCBMQ0QgY29udHJvbGxlcgpAaXRlbQpPbi1jaGlwIFJlYWwgVGltZSBDbG9jawpAaXRlbQpUSSBUU0MyMTAyaSB0b3VjaHNjcmVlbiBjb250cm9sbGVyIC8gYW5hbG9nLWRpZ2l0YWwgY29udmVydGVyIC8gQXVkaW8KQ09ERUMsIGNvbm5lY3RlZCB0aHJvdWdoIE1pY3JvV2lyZSBhbmQgSUBtYXRoe14yfVMgYnVzc2VzCkBpdGVtCkdQSU8tY29ubmVjdGVkIG1hdHJpeCBrZXlwYWQKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gT01BUCBNTUMvU0QgaG9zdApAaXRlbQpUaHJlZSBvbi1jaGlwIFVBUlRzCkBlbmQgaXRlbWl6ZQoKTm9raWEgTjgwMCBhbmQgTjgxMCBpbnRlcm5ldCB0YWJsZXRzIChrbm93biBhbHNvIGFzIFJYLTM0IGFuZCBSWC00NCAvIDQ4KQplbXVsYXRpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMjQyMCBTeXN0ZW0tb24tY2hpcCAoQVJNIDExMzYgY29yZSkKQGl0ZW0KUkFNIGFuZCBub24tdm9sYXRpbGUgT25lTkFORCBGbGFzaCBtZW1vcmllcwpAaXRlbQpEaXNwbGF5IGNvbm5lY3RlZCB0byBFUFNPTiByZW1vdGUgZnJhbWVidWZmZXIgY2hpcCBhbmQgT01BUCBvbi1jaGlwCmRpc3BsYXkgY29udHJvbGxlciBhbmQgYSBMUzA0MXkzIE1JUEkgREJJLUMgY29udHJvbGxlcgpAaXRlbQpUSSBUU0MyMzAxIChpbiBOODAwKSBhbmQgVEkgVFNDMjAwNSAoaW4gTjgxMCkgdG91Y2hzY3JlZW4gY29udHJvbGxlcnMKZHJpdmVuIHRocm91Z2ggU1BJIGJ1cwpAaXRlbQpOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODMyMy1jb250cm9sbGVkIHF3ZXJ0eSBrZXlib2FyZCBkcml2ZW4KdGhyb3VnaCBJQG1hdGh7XjJ9QyBidXMKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gT01BUCBNTUMvU0QgaG9zdApAaXRlbQpUaHJlZSBPTUFQIG9uLWNoaXAgVUFSVHMgYW5kIG9uLWNoaXAgU1RJIGRlYnVnZ2luZyBjb25zb2xlCkBpdGVtCkEgQmx1ZXRvb3RoKFIpIHRyYW5zY2lldmVyIGFuZCBIQ0kgY29ubmVjdGVkIHRvIGFuIFVBUlQKQGl0ZW0KTWVudG9yIEdyYXBoaWNzICJJbnZlbnRyYSIgZHVhbC1yb2xlIFVTQiBjb250cm9sbGVyIGVtYmVkZGVkIGluIGEgVEkKVFVTQjYwMTAgY2hpcCAtIG9ubHkgVVNCIGhvc3QgbW9kZSBpcyBzdXBwb3J0ZWQKQGl0ZW0KVEkgVE1QMTA1IHRlbXBlcmF0dXJlIHNlbnNvciBkcml2ZW4gdGhyb3VnaCBJQG1hdGh7XjJ9QyBidXMKQGl0ZW0KVEkgVFdMOTIyMzBDIHBvd2VyIG1hbmFnZW1lbnQgY29tcGFuaW9uIHdpdGggYW4gUlRDIG9uIElAbWF0aHteMn1DIGJ1cwpAaXRlbQpOb2tpYSBSRVRVIGFuZCBUQUhWTyBtdWx0aS1wdXJwb3NlIGNoaXBzIHdpdGggYW4gUlRDLCBjb25uZWN0ZWQKdGhyb3VnaCBDQlVTCkBlbmQgaXRlbWl6ZQoKVGhlIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBMTTNTODExRVZCIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCmRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQ29ydGV4LU0zIENQVSBjb3JlLgpAaXRlbQo2NGsgRmxhc2ggYW5kIDhrIFNSQU0uCkBpdGVtClRpbWVycywgVUFSVHMsIEFEQyBhbmQgSUBtYXRoe14yfUMgaW50ZXJmYWNlLgpAaXRlbQpPU1JBTSBQaWN0aXZhIDk2eDE2IE9MRUQgd2l0aCBTU0QwMzAzIGNvbnRyb2xsZXIgb24gSUBtYXRoe14yfUMgYnVzLgpAZW5kIGl0ZW1pemUKClRoZSBMdW1pbmFyeSBNaWNybyBTdGVsbGFyaXMgTE0zUzY5NjVFVkIgZW11bGF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcKZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpDb3J0ZXgtTTMgQ1BVIGNvcmUuCkBpdGVtCjI1NmsgRmxhc2ggYW5kIDY0ayBTUkFNLgpAaXRlbQpUaW1lcnMsIFVBUlRzLCBBREMsIElAbWF0aHteMn1DIGFuZCBTU0kgaW50ZXJmYWNlcy4KQGl0ZW0KT1NSQU0gUGljdGl2YSAxMjh4NjQgT0xFRCB3aXRoIFNTRDAzMjMgY29udHJvbGxlciBjb25uZWN0ZWQgdmlhIFNTSS4KQGVuZCBpdGVtaXplCgpUaGUgRnJlZWNvbSBNdXNpY1BhbCBpbnRlcm5ldCByYWRpbyBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZwplbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpNYXJ2ZWxsIE1WODhXODYxOCBBUk0gY29yZS4KQGl0ZW0KMzIgTUIgUkFNLCAyNTYgS0IgU1JBTSwgOCBNQiBmbGFzaC4KQGl0ZW0KVXAgdG8gMiAxNjU1MCBVQVJUcwpAaXRlbQpNVjg4Vzh4eDggRXRoZXJuZXQgY29udHJvbGxlcgpAaXRlbQpNVjg4Vzg2MTggYXVkaW8gY29udHJvbGxlciwgV004NzUwIENPREVDIGFuZCBtaXhlcgpAaXRlbQoxMjjXNjQgZGlzcGxheSB3aXRoIGJyaWdodG5lc3MgY29udHJvbApAaXRlbQoyIGJ1dHRvbnMsIDIgbmF2aWdhdGlvbiB3aGVlbHMgd2l0aCBidXR0b24gZnVuY3Rpb24KQGVuZCBpdGVtaXplCgpUaGUgU2llbWVucyBTWDEgbW9kZWxzIHYxIGFuZCB2MiAoZGVmYXVsdCkgYmFzaWMgZW11bGF0aW9uLgpUaGUgZW11bGF0b24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMzEwIFN5c3RlbS1vbi1jaGlwIChBUk0gOTI1VCBjb3JlKQpAaXRlbQpST00gYW5kIFJBTSBtZW1vcmllcyAoUk9NIGZpcm13YXJlIGltYWdlIGNhbiBiZSBsb2FkZWQgd2l0aCAtcGZsYXNoKQpWMQoxIEZsYXNoIG9mIDE2TUIgYW5kIDEgRmxhc2ggb2YgOE1CClYyCjEgRmxhc2ggb2YgMzJNQgpAaXRlbQpPbi1jaGlwIExDRCBjb250cm9sbGVyCkBpdGVtCk9uLWNoaXAgUmVhbCBUaW1lIENsb2NrCkBpdGVtClNlY3VyZSBEaWdpdGFsIGNhcmQgY29ubmVjdGVkIHRvIE9NQVAgTU1DL1NEIGhvc3QKQGl0ZW0KVGhyZWUgb24tY2hpcCBVQVJUcwpAZW5kIGl0ZW1pemUKClRoZSAiU3lib3JnIiBTeW1iaWFuIFZpcnR1YWwgUGxhdGZvcm0gYmFzZSBtb2RlbCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCmVsZW1lbnRzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkFSTSBDb3J0ZXgtQTggQ1BVCkBpdGVtCkludGVycnVwdCBjb250cm9sbGVyCkBpdGVtClRpbWVyCkBpdGVtClJlYWwgVGltZSBDbG9jawpAaXRlbQpLZXlib2FyZApAaXRlbQpGcmFtZWJ1ZmZlcgpAaXRlbQpUb3VjaHNjcmVlbgpAaXRlbQpVQVJUcwpAZW5kIGl0ZW1pemUKCkEgTGludXggMi42IHRlc3QgaW1hZ2UgaXMgYXZhaWxhYmxlIG9uIHRoZSBRRU1VIHdlYiBzaXRlLiBNb3JlCmluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgUUVNVSBtYWlsaW5nLWxpc3QgYXJjaGl2ZS4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBBUk0gZW11bGF0aW9uOgoKQHRhYmxlIEBvcHRpb24KCkBpdGVtIC1zZW1paG9zdGluZwpFbmFibGUgc2VtaWhvc3Rpbmcgc3lzY2FsbCBlbXVsYXRpb24uCgpPbiBBUk0gdGhpcyBpbXBsZW1lbnRzIHRoZSAiQW5nZWwiIGludGVyZmFjZS4KCk5vdGUgdGhhdCB0aGlzIGFsbG93cyBndWVzdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0sCnNvIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0cnVzdGVkIGd1ZXN0IE9TLgoKQGVuZCB0YWJsZQoKQG5vZGUgQ29sZEZpcmUgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIENvbGRGaXJlIFN5c3RlbSBlbXVsYXRvcgoKVXNlIHRoZSBleGVjdXRhYmxlIEBmaWxle3FlbXUtc3lzdGVtLW02OGt9IHRvIHNpbXVsYXRlIGEgQ29sZEZpcmUgbWFjaGluZS4KVGhlIGVtdWxhdG9yIGlzIGFibGUgdG8gYm9vdCBhIHVDbGludXgga2VybmVsLgoKVGhlIE01MjA4RVZCIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUNGNTIwOCBDb2xkRmlyZSBWMiBNaWNyb3Byb2Nlc3NvciAoSVNBIEErIHdpdGggRU1BQykuCkBpdGVtClRocmVlIFR3byBvbi1jaGlwIFVBUlRzLgpAaXRlbQpGYXN0IEV0aGVybmV0IENvbnRyb2xsZXIgKEZFQykKQGVuZCBpdGVtaXplCgpUaGUgQU41MjA2IGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUNGNTIwNiBDb2xkRmlyZSBWMiBNaWNyb3Byb2Nlc3Nvci4KQGl0ZW0KVHdvIG9uLWNoaXAgVUFSVHMuCkBlbmQgaXRlbWl6ZQoKQGMgbWFuIGJlZ2luIE9QVElPTlMKClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIEFSTSBlbXVsYXRpb246CgpAdGFibGUgQG9wdGlvbgoKQGl0ZW0gLXNlbWlob3N0aW5nCkVuYWJsZSBzZW1paG9zdGluZyBzeXNjYWxsIGVtdWxhdGlvbi4KCk9uIE02OEsgdGhpcyBpbXBsZW1lbnRzIHRoZSAiQ29sZEZpcmUgR0RCIiBpbnRlcmZhY2UgdXNlZCBieSBsaWJnbG9zcy4KCk5vdGUgdGhhdCB0aGlzIGFsbG93cyBndWVzdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0sCnNvIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0cnVzdGVkIGd1ZXN0IE9TLgoKQGVuZCB0YWJsZQoKQG5vZGUgUUVNVSBVc2VyIHNwYWNlIGVtdWxhdG9yCkBjaGFwdGVyIFFFTVUgVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBTdXBwb3J0ZWQgT3BlcmF0aW5nIFN5c3RlbXMgOjoKKiBMaW51eCBVc2VyIHNwYWNlIGVtdWxhdG9yOjoKKiBNYWMgT1MgWC9EYXJ3aW4gVXNlciBzcGFjZSBlbXVsYXRvciA6OgoqIEJTRCBVc2VyIHNwYWNlIGVtdWxhdG9yIDo6CkBlbmQgbWVudQoKQG5vZGUgU3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zCkBzZWN0aW9uIFN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtcwoKVGhlIGZvbGxvd2luZyBPUyBhcmUgc3VwcG9ydGVkIGluIHVzZXIgc3BhY2UgZW11bGF0aW9uOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkxpbnV4IChyZWZlcnJlZCBhcyBxZW11LWxpbnV4LXVzZXIpCkBpdGVtCk1hYyBPUyBYL0RhcndpbiAocmVmZXJyZWQgYXMgcWVtdS1kYXJ3aW4tdXNlcikKQGl0ZW0KQlNEIChyZWZlcnJlZCBhcyBxZW11LWJzZC11c2VyKQpAZW5kIGl0ZW1pemUKCkBub2RlIExpbnV4IFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gTGludXggVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBRdWljayBTdGFydDo6CiogV2luZSBsYXVuY2g6OgoqIENvbW1hbmQgbGluZSBvcHRpb25zOjoKKiBPdGhlciBiaW5hcmllczo6CkBlbmQgbWVudQoKQG5vZGUgUXVpY2sgU3RhcnQKQHN1YnNlY3Rpb24gUXVpY2sgU3RhcnQKCkluIG9yZGVyIHRvIGxhdW5jaCBhIExpbnV4IHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0ICh4ODYpIGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24geDg2LCB5b3UgY2FuIGp1c3QgdHJ5IHRvIGxhdW5jaCBhbnkgcHJvY2VzcyBieSB1c2luZyB0aGUgbmF0aXZlCmxpYnJhcmllczoKCkBleGFtcGxlCnFlbXUtaTM4NiAtTCAvIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAY29kZXstTCAvfSB0ZWxscyB0aGF0IHRoZSB4ODYgZHluYW1pYyBsaW5rZXIgbXVzdCBiZSBzZWFyY2hlZCB3aXRoIGEKQGZpbGV7L30gcHJlZml4LgoKQGl0ZW0gU2luY2UgUUVNVSBpcyBhbHNvIGEgbGludXggcHJvY2VzcywgeW91IGNhbiBsYXVuY2ggcWVtdSB3aXRoCnFlbXUgKE5PVEU6IHlvdSBjYW4gb25seSBkbyB0aGF0IGlmIHlvdSBjb21waWxlZCBRRU1VIGZyb20gdGhlIHNvdXJjZXMpOgoKQGV4YW1wbGUKcWVtdS1pMzg2IC1MIC8gcWVtdS1pMzg2IC1MIC8gL2Jpbi9scwpAZW5kIGV4YW1wbGUKCkBpdGVtIE9uIG5vbiB4ODYgQ1BVcywgeW91IG5lZWQgZmlyc3QgdG8gZG93bmxvYWQgYXQgbGVhc3QgYW4geDg2IGdsaWJjCihAZmlsZXtxZW11LXJ1bnRpbWUtaTM4Ni1YWFgtLnRhci5nen0gb24gdGhlIFFFTVUgd2ViIHBhZ2UpLiBFbnN1cmUgdGhhdApAY29kZXtMRF9MSUJSQVJZX1BBVEh9IGlzIG5vdCBzZXQ6CgpAZXhhbXBsZQp1bnNldCBMRF9MSUJSQVJZX1BBVEgKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBjYW4gbGF1bmNoIHRoZSBwcmVjb21waWxlZCBAZmlsZXtsc30geDg2IGV4ZWN1dGFibGU6CgpAZXhhbXBsZQpxZW11LWkzODYgdGVzdHMvaTM4Ni9scwpAZW5kIGV4YW1wbGUKWW91IGNhbiBsb29rIGF0IEBmaWxle3FlbXUtYmluZm10LWNvbmYuc2h9IHNvIHRoYXQKUUVNVSBpcyBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgd2hlbiB5b3UgdHJ5IHRvCmxhdW5jaCB4ODYgZXhlY3V0YWJsZXMuIEl0IHJlcXVpcmVzIHRoZSBAY29kZXtiaW5mbXRfbWlzY30gbW9kdWxlIGluIHRoZQpMaW51eCBrZXJuZWwuCgpAaXRlbSBUaGUgeDg2IHZlcnNpb24gb2YgUUVNVSBpcyBhbHNvIGluY2x1ZGVkLiBZb3UgY2FuIHRyeSB3ZWlyZCB0aGluZ3Mgc3VjaCBhczoKQGV4YW1wbGUKcWVtdS1pMzg2IC91c3IvbG9jYWwvcWVtdS1pMzg2L2Jpbi9xZW11LWkzODYgXAogICAgICAgICAgL3Vzci9sb2NhbC9xZW11LWkzODYvYmluL2xzLWkzODYKQGVuZCBleGFtcGxlCgpAZW5kIGl0ZW1pemUKCkBub2RlIFdpbmUgbGF1bmNoCkBzdWJzZWN0aW9uIFdpbmUgbGF1bmNoCgpAaXRlbWl6ZQoKQGl0ZW0gRW5zdXJlIHRoYXQgeW91IGhhdmUgYSB3b3JraW5nIFFFTVUgd2l0aCB0aGUgeDg2IGdsaWJjCmRpc3RyaWJ1dGlvbiAoc2VlIHByZXZpb3VzIHNlY3Rpb24pLiBJbiBvcmRlciB0byB2ZXJpZnkgaXQsIHlvdSBtdXN0IGJlCmFibGUgdG8gZG86CgpAZXhhbXBsZQpxZW11LWkzODYgL3Vzci9sb2NhbC9xZW11LWkzODYvYmluL2xzLWkzODYKQGVuZCBleGFtcGxlCgpAaXRlbSBEb3dubG9hZCB0aGUgYmluYXJ5IHg4NiBXaW5lIGluc3RhbGwKKEBmaWxle3FlbXUtWFhYLWkzODYtd2luZS50YXIuZ3p9IG9uIHRoZSBRRU1VIHdlYiBwYWdlKS4KCkBpdGVtIENvbmZpZ3VyZSBXaW5lIG9uIHlvdXIgYWNjb3VudC4gTG9vayBhdCB0aGUgcHJvdmlkZWQgc2NyaXB0CkBmaWxley91c3IvbG9jYWwvcWVtdS1pMzg2L0AvYmluL3dpbmUtY29uZi5zaH0uIFlvdXIgcHJldmlvdXMKQGNvZGV7JEB7SE9NRUB9Ly53aW5lfSBkaXJlY3RvcnkgaXMgc2F2ZWQgdG8gQGNvZGV7JEB7SE9NRUB9Ly53aW5lLm9yZ30uCgpAaXRlbSBUaGVuIHlvdSBjYW4gdHJ5IHRoZSBleGFtcGxlIEBmaWxle3B1dHR5LmV4ZX06CgpAZXhhbXBsZQpxZW11LWkzODYgL3Vzci9sb2NhbC9xZW11LWkzODYvd2luZS9iaW4vd2luZSBcCiAgICAgICAgICAvdXNyL2xvY2FsL3FlbXUtaTM4Ni93aW5lL2MvUHJvZ3JhbVwgRmlsZXMvcHV0dHkuZXhlCkBlbmQgZXhhbXBsZQoKQGVuZCBpdGVtaXplCgpAbm9kZSBDb21tYW5kIGxpbmUgb3B0aW9ucwpAc3Vic2VjdGlvbiBDb21tYW5kIGxpbmUgb3B0aW9ucwoKQGV4YW1wbGUKdXNhZ2U6IHFlbXUtaTM4NiBbLWhdIFstZF0gWy1MIHBhdGhdIFstcyBzaXplXSBbLWNwdSBtb2RlbF0gWy1nIHBvcnRdIFstQiBvZmZzZXRdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgeDg2IGVsZiBpbnRlcnByZXRlciBwcmVmaXggKGRlZmF1bHQ9L3Vzci9sb2NhbC9xZW11LWkzODYpCkBpdGVtIC1zIHNpemUKU2V0IHRoZSB4ODYgc3RhY2sgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdD01MjQyODgpCkBpdGVtIC1jcHUgbW9kZWwKU2VsZWN0IENQVSBtb2RlbCAoLWNwdSA/IGZvciBsaXN0IGFuZCBhZGRpdGlvbmFsIGZlYXR1cmUgc2VsZWN0aW9uKQpAaXRlbSAtQiBvZmZzZXQKT2Zmc2V0IGd1ZXN0IGFkZHJlc3MgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCnRoZSBhZGRyZXNzIHJlZ2lvbiByZXd1aXJlZCBieSBndWVzdCBhcHBsaWNhdGlvbnMgaXMgcmVzZXJ2ZWQgb24gdGhlIGhvc3QuClRocyBvcHRpb24gaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uIHNvbWUgaG9zdHMuCkBlbmQgdGFibGUKCkRlYnVnIG9wdGlvbnM6CgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtZApBY3RpdmF0ZSBsb2cgKGxvZ2ZpbGU9L3RtcC9xZW11LmxvZykKQGl0ZW0gLXAgcGFnZXNpemUKQWN0IGFzIGlmIHRoZSBob3N0IHBhZ2Ugc2l6ZSB3YXMgJ3BhZ2VzaXplJyBieXRlcwpAaXRlbSAtZyBwb3J0CldhaXQgZ2RiIGNvbm5lY3Rpb24gdG8gcG9ydApAaXRlbSAtc2luZ2xlc3RlcApSdW4gdGhlIGVtdWxhdGlvbiBpbiBzaW5nbGUgc3RlcCBtb2RlLgpAZW5kIHRhYmxlCgpFbnZpcm9ubWVudCB2YXJpYWJsZXM6CgpAdGFibGUgQGVudgpAaXRlbSBRRU1VX1NUUkFDRQpQcmludCBzeXN0ZW0gY2FsbHMgYW5kIGFyZ3VtZW50cyBzaW1pbGFyIHRvIHRoZSAnc3RyYWNlJyBwcm9ncmFtCihOT1RFOiB0aGUgYWN0dWFsICdzdHJhY2UnIHByb2dyYW0gd2lsbCBub3Qgd29yayBiZWNhdXNlIHRoZSB1c2VyCnNwYWNlIGVtdWxhdG9yIGhhc24ndCBpbXBsZW1lbnRlZCBwdHJhY2UpLiAgQXQgdGhlIG1vbWVudCB0aGlzIGlzCmluY29tcGxldGUuICBBbGwgc3lzdGVtIGNhbGxzIHRoYXQgZG9uJ3QgaGF2ZSBhIHNwZWNpZmljIGFyZ3VtZW50CmZvcm1hdCBhcmUgcHJpbnRlZCB3aXRoIGluZm9ybWF0aW9uIGZvciBzaXggYXJndW1lbnRzLiAgTWFueQpmbGFnLXN0eWxlIGFyZ3VtZW50cyBkb24ndCBoYXZlIGRlY29kZXJzIGFuZCB3aWxsIHNob3cgdXAgYXMgbnVtYmVycy4KQGVuZCB0YWJsZQoKQG5vZGUgT3RoZXIgYmluYXJpZXMKQHN1YnNlY3Rpb24gT3RoZXIgYmluYXJpZXMKCkBjb21tYW5ke3FlbXUtYXJtfSBpcyBhbHNvIGNhcGFibGUgb2YgcnVubmluZyBBUk0gIkFuZ2VsIiBzZW1paG9zdGVkIEVMRgpiaW5hcmllcyAoYXMgaW1wbGVtZW50ZWQgYnkgdGhlIGFybS1lbGYgYW5kIGFybS1lYWJpIE5ld2xpYi9HREIKY29uZmlndXJhdGlvbnMpLCBhbmQgYXJtLXVjbGludXggYkZMVCBmb3JtYXQgYmluYXJpZXMuCgpAY29tbWFuZHtxZW11LW02OGt9IGlzIGNhcGFibGUgb2YgcnVubmluZyBzZW1paG9zdGVkIGJpbmFyaWVzIHVzaW5nIHRoZSBCRE0KKG01eHh4LXJhbS1ob3N0ZWQubGQpIG9yIG02OGstc2ltIChzaW0ubGQpIHN5c2NhbGwgaW50ZXJmYWNlcywgYW5kCmNvbGRmaXJlIHVDbGludXggYkZMVCBmb3JtYXQgYmluYXJpZXMuCgpUaGUgYmluYXJ5IGZvcm1hdCBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LgoKQGNvbW1hbmR7cWVtdS1zcGFyY30gY2FuIGV4ZWN1dGUgU3BhcmMzMiBiaW5hcmllcyAoU3BhcmMzMiBDUFUsIDMyIGJpdCBBQkkpLgoKQGNvbW1hbmR7cWVtdS1zcGFyYzMycGx1c30gY2FuIGV4ZWN1dGUgU3BhcmMzMiBhbmQgU1BBUkMzMlBMVVMgYmluYXJpZXMKKFNwYXJjNjQgQ1BVLCAzMiBiaXQgQUJJKS4KCkBjb21tYW5ke3FlbXUtc3BhcmM2NH0gY2FuIGV4ZWN1dGUgc29tZSBTcGFyYzY0IChTcGFyYzY0IENQVSwgNjQgYml0IEFCSSkgYW5kClNQQVJDMzJQTFVTIGJpbmFyaWVzIChTcGFyYzY0IENQVSwgMzIgYml0IEFCSSkuCgpAbm9kZSBNYWMgT1MgWC9EYXJ3aW4gVXNlciBzcGFjZSBlbXVsYXRvcgpAc2VjdGlvbiBNYWMgT1MgWC9EYXJ3aW4gVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBNYWMgT1MgWC9EYXJ3aW4gU3RhdHVzOjoKKiBNYWMgT1MgWC9EYXJ3aW4gUXVpY2sgU3RhcnQ6OgoqIE1hYyBPUyBYL0RhcndpbiBDb21tYW5kIGxpbmUgb3B0aW9uczo6CkBlbmQgbWVudQoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIFN0YXR1cwpAc3Vic2VjdGlvbiBNYWMgT1MgWC9EYXJ3aW4gU3RhdHVzCgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KdGFyZ2V0IHg4NiBvbiB4ODY6IE1vc3QgYXBwcyAoQ29jb2EgYW5kIENhcmJvbiB0b28pIHdvcmtzLiBbMV0KQGl0ZW0KdGFyZ2V0IFBvd2VyUEMgb24geDg2OiBOb3Qgd29ya2luZyBhcyB0aGUgcHBjIGNvbW1wYWdlIGNhbid0IGJlIG1hcHBlZCAoeWV0ISkKQGl0ZW0KdGFyZ2V0IFBvd2VyUEMgb24gUG93ZXJQQzogTW9zdCBhcHBzIChDb2NvYSBhbmQgQ2FyYm9uIHRvbykgd29ya3MuIFsxXQpAaXRlbQp0YXJnZXQgeDg2IG9uIFBvd2VyUEM6IG1vc3QgdXRpbGl0aWVzIHdvcmsuIENvY29hIGFuZCBDYXJib24gYXBwcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuCkBlbmQgaXRlbWl6ZQoKWzFdIElmIHlvdSdyZSBob3N0IGNvbW1wYWdlIGNhbiBiZSBleGVjdXRlZCBieSBxZW11LgoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIFF1aWNrIFN0YXJ0CkBzdWJzZWN0aW9uIFF1aWNrIFN0YXJ0CgpJbiBvcmRlciB0byBsYXVuY2ggYSBNYWMgT1MgWC9EYXJ3aW4gcHJvY2VzcywgUUVNVSBuZWVkcyB0aGUgcHJvY2VzcyBleGVjdXRhYmxlCml0c2VsZiBhbmQgYWxsIHRoZSB0YXJnZXQgZHluYW1pYyBsaWJyYXJpZXMgdXNlZCBieSBpdC4gSWYgeW91IGRvbid0IGhhdmUgdGhlIEZBVApsaWJyYXJpZXMgKHlvdSdyZSBydW5uaW5nIE1hYyBPUyBYL3BwYykgeW91J2xsIG5lZWQgdG8gb2J0YWluIGl0IGZyb20gYSBNYWMgT1MgWApDRCBvciBjb21waWxlIHRoZW0gYnkgaGFuZC4KCkBpdGVtaXplCgpAaXRlbSBPbiB4ODYsIHlvdSBjYW4ganVzdCB0cnkgdG8gbGF1bmNoIGFueSBwcm9jZXNzIGJ5IHVzaW5nIHRoZSBuYXRpdmUKbGlicmFyaWVzOgoKQGV4YW1wbGUKcWVtdS1pMzg2IC9iaW4vbHMKQGVuZCBleGFtcGxlCgpvciB0byBydW4gdGhlIHBwYyB2ZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlOgoKQGV4YW1wbGUKcWVtdS1wcGMgL2Jpbi9scwpAZW5kIGV4YW1wbGUKCkBpdGVtIE9uIHBwYywgeW91J2xsIGhhdmUgdG8gdGVsbCBxZW11IHdoZXJlIHlvdXIgeDg2IGxpYnJhcmllcyAoYW5kIGR5bmFtaWMgbGlua2VyKQphcmUgaW5zdGFsbGVkOgoKQGV4YW1wbGUKcWVtdS1pMzg2IC1MIC9vcHQveDg2X3Jvb3QvIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAY29kZXstTCAvb3B0L3g4Nl9yb290L30gdGVsbHMgdGhhdCB0aGUgZHluYW1pYyBsaW5rZXIgKGR5bGQpIHBhdGggaXMgaW4KQGZpbGV7L29wdC94ODZfcm9vdC91c3IvYmluL2R5bGR9LgoKQGVuZCBpdGVtaXplCgpAbm9kZSBNYWMgT1MgWC9EYXJ3aW4gQ29tbWFuZCBsaW5lIG9wdGlvbnMKQHN1YnNlY3Rpb24gQ29tbWFuZCBsaW5lIG9wdGlvbnMKCkBleGFtcGxlCnVzYWdlOiBxZW11LWkzODYgWy1oXSBbLWRdIFstTCBwYXRoXSBbLXMgc2l6ZV0gcHJvZ3JhbSBbYXJndW1lbnRzLi4uXQpAZW5kIGV4YW1wbGUKCkB0YWJsZSBAb3B0aW9uCkBpdGVtIC1oClByaW50IHRoZSBoZWxwCkBpdGVtIC1MIHBhdGgKU2V0IHRoZSBsaWJyYXJ5IHJvb3QgcGF0aCAoZGVmYXVsdD0vKQpAaXRlbSAtcyBzaXplClNldCB0aGUgc3RhY2sgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdD01MjQyODgpCkBlbmQgdGFibGUKCkRlYnVnIG9wdGlvbnM6CgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtZApBY3RpdmF0ZSBsb2cgKGxvZ2ZpbGU9L3RtcC9xZW11LmxvZykKQGl0ZW0gLXAgcGFnZXNpemUKQWN0IGFzIGlmIHRoZSBob3N0IHBhZ2Ugc2l6ZSB3YXMgJ3BhZ2VzaXplJyBieXRlcwpAaXRlbSAtc2luZ2xlc3RlcApSdW4gdGhlIGVtdWxhdGlvbiBpbiBzaW5nbGUgc3RlcCBtb2RlLgpAZW5kIHRhYmxlCgpAbm9kZSBCU0QgVXNlciBzcGFjZSBlbXVsYXRvcgpAc2VjdGlvbiBCU0QgVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBCU0QgU3RhdHVzOjoKKiBCU0QgUXVpY2sgU3RhcnQ6OgoqIEJTRCBDb21tYW5kIGxpbmUgb3B0aW9uczo6CkBlbmQgbWVudQoKQG5vZGUgQlNEIFN0YXR1cwpAc3Vic2VjdGlvbiBCU0QgU3RhdHVzCgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KdGFyZ2V0IFNwYXJjNjQgb24gU3BhcmM2NDogU29tZSB0cml2aWFsIHByb2dyYW1zIHdvcmsuCkBlbmQgaXRlbWl6ZQoKQG5vZGUgQlNEIFF1aWNrIFN0YXJ0CkBzdWJzZWN0aW9uIFF1aWNrIFN0YXJ0CgpJbiBvcmRlciB0byBsYXVuY2ggYSBCU0QgcHJvY2VzcywgUUVNVSBuZWVkcyB0aGUgcHJvY2VzcyBleGVjdXRhYmxlCml0c2VsZiBhbmQgYWxsIHRoZSB0YXJnZXQgZHluYW1pYyBsaWJyYXJpZXMgdXNlZCBieSBpdC4KCkBpdGVtaXplCgpAaXRlbSBPbiBTcGFyYzY0LCB5b3UgY2FuIGp1c3QgdHJ5IHRvIGxhdW5jaCBhbnkgcHJvY2VzcyBieSB1c2luZyB0aGUgbmF0aXZlCmxpYnJhcmllczoKCkBleGFtcGxlCnFlbXUtc3BhcmM2NCAvYmluL2xzCkBlbmQgZXhhbXBsZQoKQGVuZCBpdGVtaXplCgpAbm9kZSBCU0QgQ29tbWFuZCBsaW5lIG9wdGlvbnMKQHN1YnNlY3Rpb24gQ29tbWFuZCBsaW5lIG9wdGlvbnMKCkBleGFtcGxlCnVzYWdlOiBxZW11LXNwYXJjNjQgWy1oXSBbLWRdIFstTCBwYXRoXSBbLXMgc2l6ZV0gWy1ic2QgdHlwZV0gcHJvZ3JhbSBbYXJndW1lbnRzLi4uXQpAZW5kIGV4YW1wbGUKCkB0YWJsZSBAb3B0aW9uCkBpdGVtIC1oClByaW50IHRoZSBoZWxwCkBpdGVtIC1MIHBhdGgKU2V0IHRoZSBsaWJyYXJ5IHJvb3QgcGF0aCAoZGVmYXVsdD0vKQpAaXRlbSAtcyBzaXplClNldCB0aGUgc3RhY2sgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdD01MjQyODgpCkBpdGVtIC1ic2QgdHlwZQpTZXQgdGhlIHR5cGUgb2YgdGhlIGVtdWxhdGVkIEJTRCBPcGVyYXRpbmcgc3lzdGVtLiBWYWxpZCB2YWx1ZXMgYXJlCkZyZWVCU0QsIE5ldEJTRCBhbmQgT3BlbkJTRCAoZGVmYXVsdCkuCkBlbmQgdGFibGUKCkRlYnVnIG9wdGlvbnM6CgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtZApBY3RpdmF0ZSBsb2cgKGxvZ2ZpbGU9L3RtcC9xZW11LmxvZykKQGl0ZW0gLXAgcGFnZXNpemUKQWN0IGFzIGlmIHRoZSBob3N0IHBhZ2Ugc2l6ZSB3YXMgJ3BhZ2VzaXplJyBieXRlcwpAaXRlbSAtc2luZ2xlc3RlcApSdW4gdGhlIGVtdWxhdGlvbiBpbiBzaW5nbGUgc3RlcCBtb2RlLgpAZW5kIHRhYmxlCgpAbm9kZSBjb21waWxhdGlvbgpAY2hhcHRlciBDb21waWxhdGlvbiBmcm9tIHRoZSBzb3VyY2VzCgpAbWVudQoqIExpbnV4L1VuaXg6OgoqIFdpbmRvd3M6OgoqIENyb3NzIGNvbXBpbGF0aW9uIGZvciBXaW5kb3dzIHdpdGggTGludXg6OgoqIE1hYyBPUyBYOjoKQGVuZCBtZW51CgpAbm9kZSBMaW51eC9Vbml4CkBzZWN0aW9uIExpbnV4L1VuaXgKCkBzdWJzZWN0aW9uIENvbXBpbGF0aW9uCgpGaXJzdCB5b3UgbXVzdCBkZWNvbXByZXNzIHRoZSBzb3VyY2VzOgpAZXhhbXBsZQpjZCAvdG1wCnRhciB6eHZmIHFlbXUteC55LnoudGFyLmd6CmNkIHFlbXUteC55LnoKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBjb25maWd1cmUgUUVNVSBhbmQgYnVpbGQgaXQgKHVzdWFsbHkgbm8gb3B0aW9ucyBhcmUgbmVlZGVkKToKQGV4YW1wbGUKLi9jb25maWd1cmUKbWFrZQpAZW5kIGV4YW1wbGUKClRoZW4gdHlwZSBhcyByb290IHVzZXI6CkBleGFtcGxlCm1ha2UgaW5zdGFsbApAZW5kIGV4YW1wbGUKdG8gaW5zdGFsbCBRRU1VIGluIEBmaWxley91c3IvbG9jYWx9LgoKQG5vZGUgV2luZG93cwpAc2VjdGlvbiBXaW5kb3dzCgpAaXRlbWl6ZQpAaXRlbSBJbnN0YWxsIHRoZSBjdXJyZW50IHZlcnNpb25zIG9mIE1TWVMgYW5kIE1pbkdXIGZyb20KQHVybHtodHRwOi8vd3d3Lm1pbmd3Lm9yZy99LiBZb3UgY2FuIGZpbmQgZGV0YWlsZWQgaW5zdGFsbGF0aW9uCmluc3RydWN0aW9ucyBpbiB0aGUgZG93bmxvYWQgc2VjdGlvbiBhbmQgdGhlIEZBUS4KCkBpdGVtIERvd25sb2FkCnRoZSBNaW5HVyBkZXZlbG9wbWVudCBsaWJyYXJ5IG9mIFNETCAxLjIueAooQGZpbGV7U0RMLWRldmVsLTEuMi54LUAvbWluZ3czMi50YXIuZ3p9KSBmcm9tCkB1cmx7aHR0cDovL3d3dy5saWJzZGwub3JnfS4gVW5wYWNrIGl0IGluIGEgdGVtcG9yYXJ5IHBsYWNlLCBhbmQKdW5wYWNrIHRoZSBhcmNoaXZlIEBmaWxle2kzODYtbWluZ3czMm1zdmMudGFyLmd6fSBpbiB0aGUgTWluR1cgdG9vbApkaXJlY3RvcnkuIEVkaXQgdGhlIEBmaWxle3NkbC1jb25maWd9IHNjcmlwdCBzbyB0aGF0IGl0IGdpdmVzIHRoZQpjb3JyZWN0IFNETCBkaXJlY3Rvcnkgd2hlbiBpbnZva2VkLgoKQGl0ZW0gRXh0cmFjdCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFFFTVUuCgpAaXRlbSBTdGFydCB0aGUgTVNZUyBzaGVsbCAoZmlsZSBAZmlsZXttc3lzLmJhdH0pLgoKQGl0ZW0gQ2hhbmdlIHRvIHRoZSBRRU1VIGRpcmVjdG9yeS4gTGF1bmNoIEBmaWxley4vY29uZmlndXJlfSBhbmQKQGZpbGV7bWFrZX0uICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB1c2luZyBTREwsIHZlcmlmeSB0aGF0CkBmaWxle3NkbC1jb25maWd9IGNhbiBiZSBsYXVuY2hlZCBmcm9tIHRoZSBNU1lTIGNvbW1hbmQgbGluZS4KCkBpdGVtIFlvdSBjYW4gaW5zdGFsbCBRRU1VIGluIEBmaWxle1Byb2dyYW0gRmlsZXMvUWVtdX0gYnkgdHlwaW5nCkBmaWxle21ha2UgaW5zdGFsbH0uIERvbid0IGZvcmdldCB0byBjb3B5IEBmaWxle1NETC5kbGx9IGluCkBmaWxle1Byb2dyYW0gRmlsZXMvUWVtdX0uCgpAZW5kIGl0ZW1pemUKCkBub2RlIENyb3NzIGNvbXBpbGF0aW9uIGZvciBXaW5kb3dzIHdpdGggTGludXgKQHNlY3Rpb24gQ3Jvc3MgY29tcGlsYXRpb24gZm9yIFdpbmRvd3Mgd2l0aCBMaW51eAoKQGl0ZW1pemUKQGl0ZW0KSW5zdGFsbCB0aGUgTWluR1cgY3Jvc3MgY29tcGlsYXRpb24gdG9vbHMgYXZhaWxhYmxlIGF0CkB1cmx7aHR0cDovL3d3dy5taW5ndy5vcmcvfS4KCkBpdGVtCkluc3RhbGwgdGhlIFdpbjMyIHZlcnNpb24gb2YgU0RMIChAdXJse2h0dHA6Ly93d3cubGlic2RsLm9yZ30pIGJ5CnVucGFja2luZyBAZmlsZXtpMzg2LW1pbmd3MzJtc3ZjLnRhci5nen0uIFNldCB1cCB0aGUgUEFUSCBlbnZpcm9ubWVudAp2YXJpYWJsZSBzbyB0aGF0IEBmaWxle2kzODYtbWluZ3czMm1zdmMtc2RsLWNvbmZpZ30gY2FuIGJlIGxhdW5jaGVkIGJ5CnRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgoKQGl0ZW0KQ29uZmlndXJlIFFFTVUgZm9yIFdpbmRvd3MgY3Jvc3MgY29tcGlsYXRpb246CkBleGFtcGxlCi4vY29uZmlndXJlIC0tZW5hYmxlLW1pbmd3MzIKQGVuZCBleGFtcGxlCklmIG5lY2Vzc2FyeSwgeW91IGNhbiBjaGFuZ2UgdGhlIGNyb3NzLXByZWZpeCBhY2NvcmRpbmcgdG8gdGhlIHByZWZpeApjaG9zZW4gZm9yIHRoZSBNaW5HVyB0b29scyB3aXRoIC0tY3Jvc3MtcHJlZml4LiBZb3UgY2FuIGFsc28gdXNlCi0tcHJlZml4IHRvIHNldCB0aGUgV2luMzIgaW5zdGFsbCBwYXRoLgoKQGl0ZW0gWW91IGNhbiBpbnN0YWxsIFFFTVUgaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYnkgdHlwaW5nCkBmaWxle21ha2UgaW5zdGFsbH0uIERvbid0IGZvcmdldCB0byBjb3B5IEBmaWxle1NETC5kbGx9IGluIHRoZQppbnN0YWxsYXRpb24gZGlyZWN0b3J5LgoKQGVuZCBpdGVtaXplCgpOb3RlOiBDdXJyZW50bHksIFdpbmUgZG9lcyBub3Qgc2VlbSBhYmxlIHRvIGxhdW5jaApRRU1VIGZvciBXaW4zMi4KCkBub2RlIE1hYyBPUyBYCkBzZWN0aW9uIE1hYyBPUyBYCgpUaGUgTWFjIE9TIFggcGF0Y2hlcyBhcmUgbm90IGZ1bGx5IG1lcmdlZCBpbiBRRU1VLCBzbyB5b3Ugc2hvdWxkIGxvb2sKYXQgdGhlIFFFTVUgbWFpbGluZyBsaXN0IGFyY2hpdmUgdG8gaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeQppbmZvcm1hdGlvbi4KCkBub2RlIEluZGV4CkBjaGFwdGVyIEluZGV4CkBwcmludGluZGV4IGNwCgpAYnllCg==