Q3VycmVudCBDb21waWxhdGlvbiBGdWxsLUZ1bmN0aW9uYWxpdHkgTGV2ZWw6IEVTU0wgMS4wMC0zLjAwLCBHTFNMIDEuMTAtMy4zMAoKS2V5OgogICsgbWVhbnMgc29tZXRoaW5nIGdvdCBjb21wbGV0ZWQKICAtIG1lYW5zIHNvbWV0aGluZyBoYXMgbm90IHlldCBiZWVuIGRvbmUKICBbTmFtZV0gbWVhbnMgTmFtZSBpcyB3b3JraW5nIG9uIGl0CgpTdW1tYXJ5IG9mIG1haW4gbWlzc2luZyBmZWF0dXJlczoKCkFFUAogKyBHTF9LSFJfYmxlbmRfZXF1YXRpb25fYWR2YW5jZWQKICsgR0xfT0VTX3NhbXBsZV92YXJpYWJsZXMKICsgR0xfT0VTX3NoYWRlcl9pbWFnZV9hdG9taWMKICsgR0xfT0VTX3NoYWRlcl9tdWx0aXNhbXBsZV9pbnRlcnBvbGF0aW9uCiArIEdMX09FU190ZXh0dXJlX3N0b3JhZ2VfbXVsdGlzYW1wbGVfMmRfYXJyYXkKICsgR0xfRVhUX2dlb21ldHJ5X3NoYWRlcgogKyBHTF9FWFRfZ2VvbWV0cnlfcG9pbnRfc2l6ZQogKyBHTF9FWFRfZ3B1X3NoYWRlcjUKICsgR0xfRVhUX3ByaW1pdGl2ZV9ib3VuZGluZ19ib3gKICsgR0xfRVhUX3NoYWRlcl9pb19ibG9ja3MKICsgR0xfRVhUX3Rlc3NlbGxhdGlvbl9zaGFkZXIKICsgR0xfRVhUX3Rlc3NlbGxhdGlvbl9wb2ludF9zaXplCiArIEdMX0VYVF90ZXh0dXJlX2J1ZmZlcgogKyBHTF9FWFRfdGV4dHVyZV9jdWJlX21hcF9hcnJheQoKTWlzc2luZyBmZWF0dXJlcyBpbiBFUyAzLjEKICsgQXJyYXlzIG9mIGFycmF5cwogKyAubGVuZ3RoKCkgb24gcnVuLXRpbWUgYXJyYXkKCk1pc3NpbmcgZGVza3RvcCBmZWF0dXJlcyB0aGF0IGFyZSBpbiBFQVAKICsgcGVyLXNhbXBsZSBzaGFkaW5nCiAtICJwcmVjaXNlIgogCk1pc3NpbmcgZGVza3RvcCBmZWF0dXJlcywgbm9uIEFFUAogLSBzdWJyb3V0aW5lcwogLSBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIHR5cGUgJ2RvdWJsZScKIC0gc2Vjb25kLWdlbmVyYXRpb24gZnVuY3Rpb24tb3ZlcmxvYWRpbmcgZGlzYW1iaWd1YXRpb24gYWxnb3JpdGhtICh2ZXJzaW9uIDQwMCkKIC0gUHJlcHJvY2Vzc29yIHRva2VuIHBhc3RpbmcgKCMjKSwgIyMgZG9lcyBtYWNybyBleHBhbnNpb24gYWZ0ZXIgcGFzdGluZyBub3QgYmVmb3JlCiArIHRleHR1cmVRdWVyeUxldmVscyBhbmQgdGV4dHVyZVF1ZXJ5TG9kCiAKQnVncwogLSBpbXBsaWNpdGx5LXNpemVkIGdsX0NsaXBEaXN0YW5jZVtdIChhdCBsZWFzdCBpbiB0ZXNzZWxsYXRpb24gc2hhZGVycykgd2l0aCBzaXplcyBncmVhdGVyIHRoYW4gb25lIGFyZSBub3QgZ2V0dGluZyBzaXplcyBncmVhdGVyIHRoYW4gb25lCgorIGNyZWF0ZSB2ZXJzaW9uIHN5c3RlbQoKTGluayBWYWxpZGF0aW9uCiAgICArIHByb3ZpZGUgaW5wdXQgY29uZmlnIGZpbGUgZm9yIHNldHRpbmcgbGltaXRzCiAgICAgIC0gYWxzbyBjb25zaWRlciBzcGl0dGluZyBvdXQgbWVhc3VyZXMgb2YgY29tcGxleGl0eQogICAgKyBlbnN1cmUgbm8gc3RhdGljIHJlZmVyZW5jZXMgdGhyb3duIGF3YXkKICAgIC0gZ2VuZXJhdGUgc3RhdGljIHVzZSBvZiBvYmplY3QgZXZlbiBpZiB0aGUgb25seSB1c2UgaXMgdG8gYWNjZXNzIHRoZSBsZW5ndGggb2YgaXRzIGFycmF5CiAgICBDcm9zcy1zdGFnZSBsaW5raW5nCiAgICAgIC0gdHlwZSBjb25zaXN0ZW5jeSBjaGVjayBvZiB1bmlmb3JtIGFuZCBpbnMgPC0+IG91dHMsIGJvdGggdmFyaWFibGVzIGFuZCBibG9ja3MsIHN0YWdlLXNwZWNpZmljIGFycmF5bmVzcyBtYXRjaGluZwogICAgICAtIGxvY2F0aW9uL2JpbmRpbmcvaW5kZXggY2hlY2sKICAgICAgLSBtaXhlZCBlcy9ub24tZXMgcHJvZmlsZXMKICAgICAgLSBzdGF0aWNhbGx5IGNvbnN1bWVkIGlucHV0IG5vdCBwcm9kdWNlZCBieSBwcmV2aW91cyBzdGFnZQogICAgICAtIGdpdmUgZXJyb3IgZm9yIHNoYXJpbmcgYSBwYWNrZWQgYmxvY2sKICAgICAgLSAxLjI6IG1hdGNoaW5nIGluaXRpYWxpemVycyBmb3IgdW5pZm9ybXMKICAgICAgLSAxLjM6IG9ubHkgc3RhdGljYWxseSB1c2VkIGJ1aWx0LWlucyBoYXZlIHRvIGJlIHJlZGVjbGFyZWQgYXMgZmxhdAogICAgICAtIDEuNTogbWF0Y2hpbmcgYmV0d2VlbiBnbF9QZXJWZXJ0ZXggYmxvY2tzIGFuZCBnbF9QZXJGcmFnbWVudCBibG9ja3MKICAgICAgLSAxLjM6IGRlcHJlY2F0ZWQgbWl4aW5nIGZpeGVkIHZlcnRleC9mcmFnbWVudCBzdGFnZSB3aXRoIHByb2dyYW1tYWJsZSBmcmFnbWVudC92ZXJ0ZXggc3RhZ2UuCiAgICAgICsgNC4wOiB0ZXNzZWxsYXRpb24gcHJpbWl0aXZlLCB2ZXJ0aWNlcywgc3BhY2luZywgb3JkZXIsIAogICAgICAtIDQuMzogY29tcHV0ZSBzaGFkZXIgbm90IGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHN0YWdlcwogICAgICAtIDQuMzogcmVtb3ZlIGNyb3NzLXZlcnNpb24gbGlua2luZyByZXN0cmljdGlvbnMuCiAgICAgIC0gNC4zOiBBbGxvdyBtaXNtYXRjaGVzIGluIGludGVycG9sYXRpb24gYW5kIGF1eGlsaWFyeSBxdWFsaWZpY2F0aW9uIGFjcm9zcyBzdGFnZXMuCiAgICAgIC0gNC40OiBBIHN0YWdlIGNvbnRhaW5zIHR3byBkaWZmZXJlbnQgYmxvY2tzLCBlYWNoIHdpdGggbm8gaW5zdGFuY2UgbmFtZSwgd2hlcmUgdGhlIGJsb2NrcyBjb250YWluIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICAgIEludHJhLXN0YWdlIGxpbmtpbmcsIHNpbmdsZSBzaGFkZXIKICAgICAgKyByZWN1cnNpb24gZm9yIGZ1bmN0aW9ucwogICAgICAtIGxpbWl0cyBjaGVja2luZzoKICAgICAgICAgICsgYmluZGluZ3MKICAgICAgICAgIC0gbnVtYmVyIG9mIGlucHV0L291dHB1dCBjb21wb25vbmVudHMKICAgICAgICAgICsgdGVzc2VsbGF0aW9uIGxpbWl0cwogICAgICAgICAgKyB0ZXNzZWxsYXRpb24gcHJpbWl0aXZlIGFycmF5IHNpemluZyBjb25zaXN0ZW5jeQogICAgICAgICAgKyBOb24gRVM6IGdsX1RleENvb3JkIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhUZXh0dXJlQ29vcmRzCiAgICAgICAgICArIE5vbiBFUzogZ2xfQ2xpcERpc3RhbmNlIC4uLgogICAgICAgICAgLSAuLi4KICAgICAgKyBleGFjdGx5IG9uZSBtYWluCiAgICAgICsgRVMgMy4wOiBmcmFnbWVudCBvdXRwdXRzIGFsbCBoYXZlIGxvY2F0aW9ucywgaWYgbW9yZSB0aGFuIG9uZQogICAgICArIGxvY2F0aW9uIGFsaWFzaW5nL292ZXJsYXAgKGV4Y2VwdCBkZXNrdG9wIHZlcnRleCBzaGFkZXIgaW5wdXRzKQogICAgICArIGJpbmRpbmcgb3ZlcmxhcCBmb3IgYXRvbWljIGNvdW50ZXJzCiAgICAgICsgTm9uIEVTOiBnZW9tZXRyeSBzaGFkZXIgaW5wdXQgYXJyYXkgc2l6ZXMgYW5kIGlucHV0IGxheW91dCBxdWFsaWZpZXIgZGVjbGFyYXRpb24KICAgICAgKyBOb24gRVM6IHJlYWQgb3Igd3JpdGUgdG8gYm90aCBnbF9DbGlwVmVydGV4IGFuZCBnbF9DbGlwRGlzdGFuY2UKICAgICAgKyBOb24gRVM6IHdyaXRlIHRvIG9ubHkgb25lIG9mIGdsX0ZyYWdDb2xvciwgZ2xfRnJhZ0RhdGEsIG9yIHVzZXItZGVjbGFyZWQKICAgICAgKyAxLjUwOiBtYXRjaCBiZXR3ZWVuIGFsbCBleHBsaWNpdCBpbnB1dCBhcnJheSBzaXplcyBhbmQgaW5wdXQgcHJpbWl0aXZlCiAgICAgICsgMS41MDogYXQgbGVhc3Qgb25lIGdlb21ldHJ5IHNoYWRlciBzYXlzIGlucHV0IHByaW1pdGl2ZSBhbmQgYXQgbGVhc3Qgb25lIHNheXMgb3V0cHV0IHByaW1pdGl2ZS4uLgogICAgICArIDEuNTA6IGF0IGxlYXN0IG9uZSBnZW9tZXRyeSBzaGFkZXIgc2F5cyBtYXhfdmVydGljZXMuLi4KICAgICAgKyAxLjUwOiBvcmlnaW5fdXBwZXJfbGVmdCBhbmQgcGl4ZWxfY2VudGVyX2ludGVnZXIgaGF2ZSB0byBtYXRjaAogICAgICAtIEV2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmVjdXJzaW9uIHRocm91Z2ggc3Vicm91dGluZSB1bmlmb3JtcyBpcyBhbiBlcnJvci4KICAgICAgLSA0LjQ6IEFuIGludGVyZmFjZSBjb250YWlucyB0d28gZGlmZmVyZW50IGJsb2NrcywgZWFjaCB3aXRoIG5vIGluc3RhbmNlIG5hbWUsIHdoZXJlIHRoZSBibG9ja3MgY29udGFpbiBhIG1lbWJlciB3aXRoIHRoZSBzYW1lIG5hbWUuCiAgICAgIC0gNC40OiBjb21wb25lbnQgYWxpYXNpbmcgKGV4Y2VwdCBkZXNrdG9wIHZlcnRleCBzaGFkZXIgaW5wdXRzKQogICAgICAtIDQuNDogb3ZlcmxhcHBpbmcgdHJhbnNmb3JtL2ZlZWRiYWNrIG9mZnNldHMsIG9mZnNldC9zdHJpZGUgb3ZlcmZsb3cgY2hlY2tzLCBhbmQgc3RyaWRlIG1hdGNoaW5nCiAgICBJbnRyYS1zdGFnZSBsaW5raW5nLCBtdWx0aXBsZSBzaGFkZXIgKE5vbi1FUykKICAgICAgKyB0eXBlIGNvbnNpc3RlbmN5IGNoZWNrIG9mIHVuaWZvcm1zLCBnbG9iYWxzLCBpbnMsIGFuZCBvdXRzCiAgICAgICsgdmFsdWUgY2hlY2tpbmcgb2YgZ2xvYmFsIGNvbnN0IGluaXRpYWxpemVycwogICAgICArIHZhbHVlIGNoZWNraW5nIG9mIHVuaWZvcm0gaW5pdGlhbGl6ZXJzCiAgICAgICsgbG9jYXRpb24gbWF0Y2gKICAgICAgLSBibG9jayBtYXRjaGluZwogICAgICArIGNvbXBvbmVudC9iaW5kaW5nL2luZGV4L29mZnNldCBtYXRjaCBjaGVjawogICAgICArIGNvbXB1dGUgc2hhZGVyIGxheW91dChsb2NhbF9zaXplXyopIG1hdGNoaW5nCiAgICAgICsgbWl4ZWQgZXMvbm9uLWVzIHByb2ZpbGVzIGFyZSBhbiBlcnJvcgogICAgICAtIGJpbmRpbmcgb3ZlcmxhcCBmb3IgYXRvbWljIGNvdW50ZXJzCiAgICAgIC0gbWF0Y2hpbmcgcmVkZWNsYXJhdGlvbnMgb2YgaW50ZXJmYWNlIGJsb2NrcwogICAgICAtIDQuMzogaW1wbGljaXQgYXJyYXkgc2l6aW5nIGlzIGNyb3NzIHNoYWRlciB3aXRoaW4gYSBzdGFnZQogICAgICAtIDQuNDogSWYgZ2xfRnJhZ0Nvb3JkIGlzIHJlZGVjbGFyZWQgaW4gYW55IGZyYWdtZW50IHNoYWRlciBpbiBhIHByb2dyYW0sIGl0IG11c3QgYmUgcmVkZWNsYXJlZCBpbiBhbGwgdGhlIGZyYWdtZW50IHNoYWRlcnMgaW4gdGhhdCBwcm9ncmFtIHRoYXQgaGF2ZSBhIHN0YXRpYyB1c2UgZ2xfRnJhZ0Nvb3JkCgpTaGFkZXIgRnVuY3Rpb25hbGl0eSB0byBJbXBsZW1lbnQvRmluaXNoCiAgICBFU1NMIDIuMCAoI3ZlcnNpb24gMTAwKQogICAgICArIGltcGxlbWVudCBub24taW5kdWN0aXZlIGxvb3AgbGltaXRhdGlvbiBkZXRlY3Rpb24KICAgICAgKyBpbXBsZW1lbnQgbm9uLWluZHVjdGl2ZSBhcnJheSBhY2Nlc3NlcyBsaW1pdGF0aW9uIGRldGVjdGlvbgogICAgRVNTTCAzLjAKICAgICAgLSAiY29uc3QiIGNvbXBpbGUtdGltZSBjb25zdGFudCBwcm9wYWdhdGlvbiBpbiB0aGUgZnJvbnQtZW5kIGhhcyB0byBiZSBjb21wbGV0ZSwgZm9yIGFsbCBidWlsdC1pbiBmdW5jdGlvbnMKICAgIEVTU0wgMy4xCiAgICAgICsgQ29tcHV0ZSBzaGFkZXJzCiAgICAgICsgU2hhZGVyIHN0b3JhZ2UgYnVmZmVyIG9iamVjdHMKICAgICAgLSBBcnJheXMgb2YgYXJyYXlzCiAgICAgICsgQXRvbWljIGNvdW50ZXJzCiAgICAgICsgSW1hZ2VzCiAgICAgICsgU2VwYXJhdGUgcHJvZ3JhbSBvYmplY3RzIChhbHNvIGtub3duIGFzIHNlcGFyYXRlIHNoYWRlciBvYmplY3RzKQogICAgICArIEV4cGxpY2l0IHVuaWZvcm0gbG9jYXRpb25zCiAgICAgICsgVGV4dHVyZSBnYXRoZXIKICAgICAgKyBCaXRmaWVsZCBvcGVyYXRpb25zCiAgICAgICsgSW50ZWdlciBtaXggZnVuY3Rpb24KICAgICAgKyBvdmVybGFwcGluZyBiaW5kaW5ncy9vZmZzZXRzIGFuZCBvZmZzZXQgcG9zdCBpbmNyZW1lbnQKICAgICAgKyBmcmV4cC9sZGV4cAogICAgICArIHBhY2tVbm9ybTR4OCgpLHBhY2tTbm9ybTR4OCgpLCB1bnBhY2tVbm9ybTR4OCgpLCB1bnBhY2tTbm9ybTR4OCgpCiAgICAgICsgMkRNUyBzYW1wbGVycyBhbmQgaW1hZ2VzCiAgICAgICsgaW5oZXJpdGFuY2Ugb2YgbWVtb3J5IHF1YWxpZmllcnMgaW4gYmxvY2sgbWVtYmVycwogICAgR0xTTCAxLjIKICAgICAgKyBIYW5kbGUgbXVsdGlwbGUgY29tcGlsYXRpb24gdW5pdHMgcGVyIHN0YWdlCiAgICAgICsgQWxsb3cgaW5pdGlhbGl6ZXJzIG9uIHVuaWZvcm0gZGVjbGFyYXRpb25zCiAgICAgICsgc2lnbmF0dXJlIG1hdGNoaW5nIHRha2VzIHR5cGUgY29udmVyc2lvbnMgaW50byBhY2NvdW50LCBhbWJpZ3VpdHkgaXMgYW4gZXJyb3IKICAgIEdMU0wgMS4zCiAgICAgICsgZmxhdCByZWRlY2xhcmF0aW9uIG9mIGJ1aWx0LWluIHZhcmlhYmxlcwogICAgICAtIFByZXByb2Nlc3NvciB0b2tlbiBwYXN0aW5nICgjIyksICMjIGRvZXMgbWFjcm8gZXhwYW5zaW9uIGFmdGVyIHBhc3Rpbmcgbm90IGJlZm9yZQogICAgICArIG5vbi1wZXJzcGVjdGl2ZSAobGluZWFyKSBpbnRlcnBvbGF0aW9uIChub3BlcnNwZWN0aXZlKQogICAgICArIGFkZCBnbF9DbGlwRGlzdGFuY2VbXSB0byBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycwogICAgICArIERlcHJlY2F0ZWQgZ2xfQ2xpcFZlcnRleAogICAgICArIGRlcHJlY2F0ZSBhbG1vc3QgYWxsIGJ1aWx0LWluIHN0YXRlCiAgICAgICsgZnRyYW5zZm9ybSgpIGlzIGRlcHJlY2F0ZWQKICAgICAgKyBEZXByZWNhdGVkIGJ1aWx0LWluIHZlcnRleCBpbnB1dHMgKGF0dHJpYnV0ZXMpIGFuZCBzb21lIG91dHB1dHMgKHZhcnlpbmdzKS4KICAgIEdMU0wgMS40IChOb24tRVMpCiAgICAgICsgcmVjdGFuZ3VsYXIgdGV4dHVyZXMKICAgICAgKyB0cmFjayBhcyByZW1vdmVkIGluIHRoaXMgcmVsZWFzZSwgYnV0IHByZXNlbnQgaW4gb3RoZXJzOgogICAgICAgICsgVXNlIG9mIGdsX0NsaXBWZXJ0ZXguICBVc2UgZ2xfQ2xpcERpc3RhbmNlIGluc3RlYWQuCiAgICAgICAgKyBCdWlsdC1pbiB2ZXJ0ZXggc2hhZGVyIGlucHV0cy4KICAgICAgICArIEJ1aWx0LWluIHVuaWZvcm1zIGV4Y2VwdCBmb3IgZGVwdGggcmFuZ2UgcGFyYW1ldGVycwogICAgICAgICsgQnVpbHQtaW4gaW50ZXJmYWNlIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudDogIGdsX1RleENvb3JkLCBnbF9Gb2dGcmFnQ29vcmQsIGFuZCBhbGwgdGhlIGNvbG9yIHZhbHVlcy4KICAgICAgICArIEJ1aWx0LWluIHR3by1zaWRlZCBjb2xvcmluZy4KICAgICAgICArIEZpeGVkIGZ1bmN0aW9uYWxpdHkgZm9yIGEgcHJvZ3JhbW1hYmxlIHN0YWdlLiAKICAgICAgICArIGZ0cmFuc2Zvcm0oKS4gIFVzZSBpbnZhcmlhbnQgb3V0cHV0cyBpbnN0ZWFkLgogICAgR0xTTCAxLjUgKE5vbi1FUykKICAgICAgKyBEZXByZWNhdGVkIGdsX01heFZhcnlpbmdDb21wb25lbnRzCiAgICAgICsgQWRkIG5ldyBtaW5pbXVtIG1heGltdW1zIGZvciBnbF9NYXhWZXJ0ZXhPdXRwdXRDb21wb25lbnRzLCBnbF9NYXhHZW9tZXRyeUlucHV0Q29tcG9uZW50cywgZ2xfTWF4R2VvbWV0cnlPdXRwdXRDb21wb25lbnRzLCBhbmQgZ2xfTWF4RnJhZ21lbnRJbnB1dENvbXBvbmVudHMsIAogICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cy4gIEFsc28sIGNvcnJlY3RlZCBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cyB0byBiZSA2MCBpbnN0ZWFkIG9mIDY0LgogICAgICArIEFkZGVkIGdsX1ByaW1pdGl2ZUlEIGFzIGFuIGlucHV0IHRvIGZyYWdtZW50IHNoYWRlcnMuCiAgICAgICsgQWRkZWQgZ2xfRnJhZ0Nvb3JkIHF1YWxpZmllcnMgb3JpZ2luX3VwcGVyX2xlZnQsIGFuZCBwaXhlbF9jZW50ZXJfaW50ZWdlciB0byBtb2RpZnkgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBnbF9GcmFnQ29vcmQgKGFuZCBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgb3RoZXIgYXNwZWN0IG9mIHRoZSBwaXBlbGluZSBvciBsYW5ndWFnZSkuCiAgICAgICAgKyBpbmNsdWRpbmcgcmVkZWNsYXJhdGlvbiBvZiBnbF9GcmFnQ29vcmQgdGhhdCBhZGRzIG5vdGhpbmcKICAgICAgKyBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aS1zYW1wbGUgdGV4dHVyZXMgdGhyb3VnaCBzYW1wbGVyMkRNUyBhbmQgc2FtcGxlcjJETVNBcnJheSBzdXBwb3J0IGluIHRleGVsRmV0Y2goKSBhbmQgdGV4dHVyZVNpemUoKS4KICAgICAgKyBCcm9hZGVuZWQgaW50ZXJmYWNlIGJsb2NrcyBmcm9tIGp1c3QgdW5pZm9ybXMgdG8gaW4gYW5kIG91dCBpbnRlcmZhY2VzIGFzIHdlbGwuCiAgICAgICsgQnJvYWRlbiBhcnJheSB1c2FnZSB0byBpbmNsdWRlIHZlcnRleCBzaGFkZXIgaW5wdXRzICh2ZXJ0ZXggaW4pLgogICAgICArIEFkZGVkIGdlb21ldHJ5IHNoYWRlcnMuICBUaGlzIGluY2x1ZGVzIHRhcmdldGluZyBsYXllcnMgaW4gRkJPIHJlbmRlcmluZy4KICAgICAgKyBnZW9tZXRyeSBzaGFkZXIgbGF5b3V0czogdGhleSBtdXN0IGJlIGRlY2xhcmVkLCB0ZWxsaW5nIHRoZSBzeXN0ZW0gdGhlIHByaW1pdGl2ZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzIGFuZCBtYXhpbXVtIG51bWJlciBvZiB2ZXJ0aWNlcy4KICAgICAgKyBBZGRlZCBnZW9tZXRyeSBzaGFkZXIgY29uc3RhbnRzLgogICAgICArIEJyb2FkZW4gc3RydWN0dXJlIHVzYWdlIHRvIGluY2x1ZGUgZ2VvbWV0cnkgaW5wdXRzIGFuZCBnZW9tZXRyeSBvdXRwdXRzLgogICAgICArIHRleGVsIG9mZnNldCBsaW1pdCBjaGVja2luZwogICAgICArIDEuNTA6IGdlb21ldHJ5IHNoYWRlcnM6IG1heF92ZXJ0aWNlcyBtdXN0IGJlIGNoZWNrZWQgYWdhaW5zdCBnbF9NYXhHZW9tZXRyeU91dHB1dFZlcnRpY2VzIChtYXliZSBhdCBjb21waWxlIHRpbWUpCiAgICBHTFNMIDMuMwogICAgICArIEFkZCBBUkJfZXhwbGljaXRfYXR0cmliX2xvY2F0aW9uIGV4dGVuc2lvbgogICAgICArIEFkZCBBUkJfc2hhZGVyX2JpdF9lbmNvZGluZyBleHRlbnNpb24KICAgIEdMU0wgNC4wCiAgICAgICsgdGVzc2VsbGF0aW9uIGNvbnRyb2wgc3RhZ2UgYW5kIHRlc3NlbGxhdGlvbiBldmFsdWF0aW9uIHN0YWdlLiBJbmNsdWRlcyBiYXJyaWVyKCkgYnVpbHQtaW4gZm9yIHN5bmNocm9uaXphdGlvbi4KICAgICAgICArIHBhdGNoIGluLCBwYXRjaCBvdXQKICAgICAgICArIGlucHV0L291dHB1dCBhcnJheXMKICAgICAgICAgICsgdW5zaXplZCBhcnJheSBzaXppbmcgdG8gZ2xfTWF4UGF0Y2hWZXJ0aWNlcywgaW5jbHVkaW5nIGdsX2luL2dsX291dAogICAgICAgICsgYnVpbHQtaW4gdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBjb25zdGFudHMgdmVyaWZpY2F0aW9uCiAgICAgICAgKyBsYXlvdXQgcXVhbGlmaWVycyBmb3IgcHJpbWl0aXZlIHR5cGVzCiAgICAgIC0gUG9seW1vcnBoaWMgZnVuY3Rpb25zOiBSdW4tdGltZSBzZWxlY3Rpb24gb2Ygd2hhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCwgdGhyb3VnaCB0aGUgbmV3IGtleXdvcmQgc3Vicm91dGluZS4KICAgICAgLSA2NGJpdCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHdpdGggdGhlIG5ldyB0eXBlIGtleXdvcmQgZG91YmxlLiAgQnVpbHQtaW4gZnVuY3Rpb25zIGV4dGVuZGVkIGZvciBkb3VibGVzLCBhbmQgbmV3IGZ1bmN0aW9uIG1hdGNoaW5nIHJ1bGVzIGFyZSBhZGRlZCB0byBib3RoIGFsbG93IGltcGxpY2l0IGNvbnZlcnNpb25zIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwcmVzZXJ2ZSBtb3N0IGV4aXN0aW5nIGZ1bmN0aW9uIG1hdGNoaW5nIG9uY2UgZG91YmxlcyBhcmUgaW5jbHVkZWQuIAogICAgICArIE1vcmUgaW1wbGljaXQgY29udmVyc2lvbnMgCiAgICAgICAgICsgZmxvYXQgdG8gZG91YmxlLCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgZmxvYXRpbmctcG9pbnQgdmVjdG9yIGFuZCBtYXRyaXggdHlwZXMKICAgICAgICAgKyBpbnQgdG8gdWludCwgYW5kIHNpbWlsYXJseSBmb3IgYWxsIGludGVnZXIgdmVjdG9yIHR5cGVzCiAgICAgICAgICsgaW50IHRvIGRvdWJsZSwgYW5kIHNpbWlsYXJseSBmb3IgYWxsIHZlY3RvcnMgb2YgaW50ZWdlcnMgYW5kIGRvdWJsZXMuCiAgICAgICAgICsgdWludCB0byBkb3VibGUsIGFuZCBzaW1pbGFybHkgZm9yIGFsbCB2ZWN0b3JzIG9mIGludGVnZXJzIGFuZCBkb3VibGVzLgogICAgICArIEN1YmUgbWFwIGFycmF5IHRleHR1cmVzIGFuZCB0ZXh0dXJlIGZ1bmN0aW9ucyB0ZXh0dXJlKCksIHRleHR1cmVTaXplKCksIHRleHR1cmVMb2QoKSwgYW5kIHRleHR1cmVHcmFkKCkuCiAgICAgICsgU2FtcGxlciBhcnJheXMgY2FuIHRha2UgYSB2YXJpYWJsZSBpbmRleCBub3csIGFzIGxvbmcgYXMgaXQncyB2YWx1ZSBpcyB1bmlmb3JtIGZvciBhbGwgdXNlcy4KICAgICAgLSBQZXItc2FtcGxlIHNoYWRpbmcuIEluY2x1ZGluZyBzYW1wbGUgaW5wdXQgbWFzayBnbF9TYW1wbGVNYXNrSW5bXSBhbmQgcGVyLXNhbXBsZSBpbnRlcnBvbGF0aW9uLCB3aXRoIGV4cGxpY2l0IGludGVycG9sYXRpb24gYnVpbHQtaW5zIGludGVycG9sYXRlQXRDZW50cm9pZCgpLCBpbnRlcnBvbGF0ZUF0U2FtcGxlKCksIGFuZCBpbnRlcnBvbGF0ZUF0T2Zmc2V0KCkuCiAgICAgIC0gTmV3IHByZWNpc2UgcXVhbGlmaWVyIHRvIGRpc2FsbG93IG9wdGltaXphdGlvbnMgdGhhdCByZS1vcmRlciBvcGVyYXRpb25zIG9yIHRyZWF0IGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgb3BlcmF0b3Igd2l0aCBkaWZmZXJlbnQgcHJlY2lzaW9uLgogICAgICArIEFkZCBhIGZ1c2VkIG11bHRpcGx5IGFuZCBhZGQgYnVpbHQtaW4sIGZtYSgpLCBpbiByZWxhdGlvbiB0byB0aGUgbmV3IHByZWNpc2UgcXVhbGlmaWVyLiAoQmVjYXVzZSCTYSAqIGIgKyBjlCB3aWxsIHJlcXVpcmUgdHdvIG9wZXJhdGlvbnMgdW5kZXIgbmV3IHJ1bGVzIGZvciBwcmVjaXNlLikKICAgICAgKyBBZGRlZCBuZXcgYnVpbHQtaW4gZmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zIAogICAgICAgICArIGZyZXhwKCkgYW5kIGxkZXhwKCkKICAgICAgICAgKyBwYWNrVW5vcm0yeDE2KCksIHVucGFja1Vub3JtMngxNigpLAogICAgICAgICArIHBhY2tVbm9ybTR4OCgpLCBwYWNrU25vcm00eDgoKSwgdW5wYWNrVW5vcm00eDgoKSwgdW5wYWNrU25vcm00eDgoKQogICAgICAgICArIHBhY2tEb3VibGUyeDMyKCkgYW5kIHVucGFja0RvdWJsZTJ4MzIoKQogICAgICArIEFkZCBuZXcgYnVpbHQtaW4gaW50ZWdlciBmdW5jdGlvbnMKICAgICAgICAgKyB1YWRkQ2FycnkoKSBhbmQgdXN1YkJvcnJvdygpCiAgICAgICAgICsgdW11bEV4dGVuZGVkKCkgYW5kIGltdWxFeHRlbmRlZCgpCiAgICAgICAgICsgYml0ZmllbGRFeHRyYWN0KCkgYW5kIGJpdGZpZWxkSW5zZXJ0KCkKICAgICAgICAgKyBiaXRmaWVsZFJldmVyc2UoKQogICAgICAgICArIGJpdENvdW50KCksIGZpbmRMU0IoKSwgYW5kZmluZE1TQigpCiAgICAgICsgTmV3IGJ1aWx0LWluIHRvIHF1ZXJ5IExPRCwgdGV4dHVyZVF1ZXJ5TG9kKCkuCiAgICAgIC0gTmV3IG92ZXJsb2FkZWQgZnVuY3Rpb24gbWF0Y2hpbmcgYWxnb3JpdGhtLCBoYW5kbGluZyBzZWxlY3Rpb24gZnJvbSBtYW55IHZhbGlkIG11bHRpcGxlIGNob2ljZXMuCiAgICAgICsgVGV4dHVyZSBnYXRoZXIgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGZvdXIgdGV4ZWxzIHdpdGggYSBzaW5nbGUgY2FsbC4KICAgICAgICAgKyB0ZXh0dXJlR2F0aGVyKCkKICAgICAgICAgKyB0ZXh0dXJlR2F0aGVyT2Zmc2V0KCkKICAgICAgICAgKyB0ZXh0dXJlR2F0aGVyT2Zmc2V0cygpCiAgICAgICsgQWRkIHN0cmVhbXMgb3V0IGZyb20gZ2VvbWV0cnkgc2hhZGVyLiBPdXRwdXQgY2FuIGJlIGRpcmVjdGVkIHRvIHN0cmVhbXMgdGhyb3VnaAogICAgICAgICArIEVtaXRTdHJlYW1WZXJ0ZXgoKSBhbmQgRW5kU3RyZWFtUHJpbWl0aXZlKCkuCiAgICBHTFNMIDQuMQogICAgICArIFN1cHBvcnQgZm9yIHBhcnRpdGlvbmluZyBzaGFkZXJzIGludG8gbXVsdGlwbGUgcHJvZ3JhbXMgdG8gcHJvdmlkZSBsaWdodC13ZWlnaHQgbWl4aW5nIG9mIGRpZmZlcmVudCBzaGFkZXIgc3RhZ2VzLgogICAgICAgICAgICAoR0xfQVJCX3NlcGFyYXRlX3NoYWRlcl9vYmplY3RzKQogICAgICAgICsgbGF5b3V0IHF1YWxpZmllcnMKICAgICAgICArIHJlZGVjbGFyYXRpb24gb2YgaW5wdXQvb3V0cHV0IGJsb2NrcwogICAgICAgICsgLi4uCiAgICAgIC0gQWRkIDY0LWJpdCBmbG9hdGluZy1wb2ludCBhdHRyaWJ1dGVzIGZvciB2ZXJ0ZXggc2hhZGVyIGlucHV0cy4KICAgICAgKyBTdXBwb3J0IHZpZXdwb3J0IGFycmF5cyBzbyB3aGVyZSB0aGUgZ2VvbWV0cnkgc2hhZGVyIHNlbGVjdHMgd2hpY2ggdmlld3BvcnQgYXJyYXkgd2lsbCB0cmFuc2Zvcm0gaXRzIG91dHB1dC4KICAgIEdMU0wgNC4yCiAgICAgICsgTW92ZSB0aGVzZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgZmVhdHVyZXMgdG8gYmUgb25seSBpbiB0aGUgY29tcGF0aWJpbGl0eSBwcm9maWxlOgogICAgICAgICsgVGhlIGtleXdvcmQgYXR0cmlidXRlIGZvciB2ZXJ0ZXggc2hhZGVyIGlucHV0cy4gKFVzZSBpbiBpbnN0ZWFkLikKICAgICAgICArIFRoZSBrZXl3b3JkIHZhcnlpbmcgZm9yIGlucHV0cyBhbmQgb3V0cHV0cy4gKFVzZSBpbiBhbmQgb3V0IGluc3RlYWQuKQogICAgICAgICsgVGhlIG9yaWdpbmFsIHRleHR1cmluZyBidWlsdC1pbiBmdW5jdGlvbnMuIChVc2UgdGhlIG5ldyBmb3JtcyBpbnN0ZWFkLikKICAgICAgICArIFRoZSBidWlsdC1pbiB2YXJpYWJsZXMgZ2xfRnJhZ0NvbG9yIGFuZCBnbF9GcmFnRGF0YS4gKFVzZSBvdXQgaW5zdGVhZC4pCiAgICAgICAgKyBCdWlsdC1pbiBjb25zdGFudHMgcmVsYXRlZCB0byB0aGVzZS4KICAgICAgKyBDaGFuZ2UgZnJvbSBBU0NJSSB0byBVVEYtOCBmb3IgdGhlIGxhbmd1YWdlIGNoYXJhY3RlciBzZXQgYW5kIGFsc28gYWxsb3cgYW55IGNoYXJhY3RlcnMgaW5zaWRlIGNvbW1lbnRzIChleGNlcHQgdGhlIGJ5dGUgdmFsdWUgMCksIAogICAgICAgIGluY2x1ZGluZyAnXCcuCiAgICAgICsgQWRkIGxpbmUtY29udGludWF0aW9uIHVzaW5nICdcJywgYXMgaW4gQysrLgogICAgICArIEVTIGNvbnZlcmdlbmNlCiAgICAgICAgKyBDbGFyaWZ5IHRoYXQgLnh5end4eS54eSBpcyBpbGxlZ2FsLCBhcyBpdCB0ZW1wb3JhcmlseSBtYWtlcyBhIJN2ZWM2lC4KICAgICAgICArIENsYXJpZnkgdGhhdCByZXR1cm4gc3RhdGVtZW50cyBvbmx5IGFjY2VwdCB2YWx1ZXMgKG5vIHJldHVybiBvZiBhIHZvaWQgZnVuY3Rpb24pLgogICAgICArIEFkZCBpbWFnZSB0eXBlcyAoR0xfQVJCX3NoYWRlcl9pbWFnZV9sb2FkX3N0b3JlKQogICAgICAgICsgMzMgbmV3IHR5cGVzLCBhbGwgd2l0aCCTaW1hZ2WUIGluIHRoZWlyIG5hbWUsIGNvcnJlc3BvbmQgdG8gdGhlIG5vbi1zaGFkb3cgdGV4dHVyZSB0eXBlcwogICAgICAgICsgYWRkaXRpb24gb2YgbWVtb3J5IHF1YWxpZmllcnM6IGNvaGVyZW50LCB2b2xhdGlsZSwgcmVzdHJpY3QsIHJlYWRvbmx5LCBhbmQgd3JpdGVvbmx5CiAgICAgICAgKyBjYW4gcmVhZC93cml0ZS9tb2RpZnkgaW1hZ2VzIGZyb20gYSBzaGFkZXIsIHRocm91Z2ggbmV3IGJ1aWx0LWluIGZ1bmN0aW9ucwogICAgICAgICsgcXVhbGlmaWVycyBjYW4gYWN0IGluZGVwZW5kZW50bHkgb24gdGhlIG9wYXF1ZSBzaGFkZXIgdmFyaWFibGUgYW5kIHRoZSBiYWNraW5nIGltYWdlLCBzbyBleHRyYSBxdWFsaWZpZXJzIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlbHkgcXVhbGlmeSB0aGVzZQogICAgICAgICsgZWFybHlfZnJhZ21lbnRfdGVzdHMKICAgICAgKyBWYXJpYWJsZXMgZGVjbGFyZWQgaW4gaWYgYW5kIGVsc2Ugc3RhdGVtZW50cyBhcmUgc2NvcGVkIG9ubHkgdG8gdGhlIGVuZCBvZiB0aG9zZSBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IGZvciBub24tY29tcG91bmQgc3RhdGVtZW50cwogICAgICAgIE5vdGUsIHRoaXMgaXMgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUsIGl0IG1heSBkZXBlbmQgb24gI3ZlcnNpb24uCiAgICAgICsgQWxsb3cgaW1wbGljaXQgY29udmVyc2lvbnMgb2YgcmV0dXJuIHZhbHVlcyB0byB0aGUgZGVjbGFyZWQgdHlwZSBvZiB0aGUgZnVuY3Rpb24uCiAgICAgICsgVGhlIGNvbnN0IGtleXdvcmQgY2FuIGJlIHVzZWQgdG8gZGVjbGFyZSB2YXJpYWJsZXMgd2l0aGluIGEgZnVuY3Rpb24gYm9keSB3aXRoIGluaXRpYWxpemVyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdCBjb25zdGFudCBleHByZXNzaW9ucy4KICAgICAgKyBRdWFsaWZpZXJzIG9uIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBubyBsb25nZXIgaGF2ZSB0byBmb2xsb3cgYSBzdHJpY3Qgb3JkZXIuIFRoZSBsYXlvdXQgcXVhbGlmaWVyIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbmQgbXVsdGlwbGUgcGFyYW1ldGVyIHF1YWxpZmllcnMgY2FuIGJlIHVzZWQuCiAgICAgICsgUGFyYW1ldGVyIHF1YWxpZmllcnMgY2FuIGluY2x1ZGUgcHJlY2lzaW9uIGFuZCBtZW1vcnkgcXVhbGlmaWVycy4KICAgICAgKyBBZGQgYSBuZXcgYXRvbWljX3VpbnQgdHlwZSB0byBzdXBwb3J0IGF0b21pYyBjb3VudGVycy4gQWxzbywgYWRkIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGF0b21pYyBjb3VudGVycy4KICAgICAgICArIGF0b21pY0NvdW50ZXJJbmNyZW1lbnQsIGF0b21pY0NvdW50ZXJEZWNyZW1lbnQsIGFuZCBhdG9taWNDb3VudGVyCiAgICAgICsgQWRkIGxheW91dCBxdWFsaWZpZXIgaWRlbnRpZmllcnMgYmluZGluZyBhbmQgb2Zmc2V0IHRvIGJpbmQgdW5pdHMgdG8gc2FtcGxlciBhbmQgaW1hZ2UgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhdG9taWMgY291bnRlcnMsIGFuZCB1bmlmb3JtIGJsb2Nrcy4KICAgICAgKyBBZGQgYnVpbHQtaW4gZnVuY3Rpb25zIHRvIHBhY2svdW5wYWNrIDE2IGJpdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIChBUkJfc2hhZGluZ19sYW5ndWFnZV9wYWNrMmYpLgogICAgICAgICsgcGFja0hhbGYyeDE2IGFuZCB1bnBhY2tIYWxmMngxNgogICAgICAgICsgcGFja1Nub3JtMngxNmFuZCB1bnBhY2tTbm9ybTJ4MTYKICAgICAgKyBBZGQgZ2xfRnJhZ0RlcHRoIGxheW91dCBxdWFsaWZpZXJzIHRvIGNvbW11bmljYXRlIHdoYXQga2luZCBvZiBjaGFuZ2VzIHdpbGwgYmUgbWFkZSB0byBnbF9GcmFnRGVwdGggKEdMX0FNRF9jb25zZXJ2YXRpdmUgZGVwdGgpLgogICAgICArIEFkZCBDLXN0eWxlIGN1cmx5IGJyYWNlIGluaXRpYWxpemVyIGxpc3RzIHN5bnRheCBmb3IgaW5pdGlhbGl6ZXJzLiBGdWxsIGluaXRpYWxpemF0aW9uIG9mIGFnZ3JlZ2F0ZXMgaXMgcmVxdWlyZWQgd2hlbiB0aGVzZSBhcmUgdXNlZC4KICAgICAgKyBBbGxvdyAubGVuZ3RoKCkgdG8gYmUgYXBwbGllZCB0byB2ZWN0b3JzIGFuZCBtYXRyaWNlcywgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvciBjb2x1bW5zLgogICAgICArIENsYXJpZnkgdGhhdCAubGVuZ3RoKCkgcmV0dXJucyBhbiBpbnQgdHlwZSBhbmQgY2FuIGJlIHVzZWQgYXMgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24uCiAgICAgICsgQWxsb3cgc3dpenpsZSBvcGVyYXRpb25zIG9uIHNjYWxhcnMuCiAgICAgICsgUG9zaXRpdmUgc2lnbmVkIGRlY2ltYWwgbGl0ZXJhbHMsIGFzIHdlbGwgYXMgb2N0YWwgYW5kIGhleGFkZWNpbWFsLCBjYW4gc2V0IGFsbCAzMiBiaXRzLiBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdGhlIHNpZ24gYml0IHRvIGNyZWF0ZSBhIG5lZ2F0aXZlIHZhbHVlLgogICAgICArIENsYXJpZmllZCB0aGF0IGEgY29tbWEgc2VxdWVuY2Utb3BlcmF0b3IgZXhwcmVzc2lvbiBjYW5ub3QgYmUgYSBjb25zdGFudCBleHByZXNzaW9uLiBFLmcuLCCTKDIsMymUIGlzIG5vdCBhbGxvd2VkLCBzZW1hbnRpY2FsbHksIAogICAgICAgICAgICBhcyBhIHZhbGlkIGNvbnN0YW50IGV4cHJlc3Npb24gMywgZXZlbiB0aG91Z2ggaXQgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IHdpbGwgZXZhbHVhdGUgdG8gMy4KICAgICAgKyBVc2UgdmVjMiBpbnN0ZWFkIG9mIHZlYzMgZm9yIGNvb3JkaW5hdGUgaW4gdGV4dHVyZUdhdGhlciooc2FtcGxlcjJEUmVjdCwuLi4pLgogICAgICArIENsYXJpZnkgdGhhdCB0ZXh0dXJlR2F0aGVyT2Zmc2V0KCkgY2FuIHRha2Ugbm9uLWNvbnN0YW50cyBmb3IgdGhlIG9mZnNldHMuCiAgICBHTFNMIDQuMwogICAgICArIEFkZCBzaGFkZXIgc3RvcmFnZSBidWZmZXIgb2JqZWN0cywgYXMgcGVyIHRoZSBBUkJfc2hhZGVyX3N0b3JhZ2VfYnVmZmVyX29iamVjdCBleHRlbnNpb24uIFRoaXMgaW5jbHVkZXMgCiAgICAgICAgICAgICsgYWxsb3dpbmcgdGhlIGxhc3QgbWVtYmVyIG9mIGEgc3RvcmFnZSBidWZmZXIgYmxvY2sgdG8gYmUgYW4gYXJyYXkgdGhhdCBkb2VzIG5vdCBrbm93IGl0cyBzaXplIHVudGlsIHJlbmRlciB0aW1lCiAgICAgICAgICAgICsgcmVhZC93cml0ZSBtZW1vcnkgc2hhcmVkIHdpdGggdGhlIGFwcGxpY2F0aW9uIGFuZCBvdGhlciBzaGFkZXIgaW52b2NhdGlvbnMKICAgICAgICAgICAgKyBhZGRpbmcgdGhlIHN0ZDQzMCBsYXlvdXQgcXVhbGlmaWVyIGZvciBzaGFkZXIgc3RvcmFnZSBibG9ja3MKICAgICAgICAgICAgKyBhZGQgYXRvbWljIGJ1aWx0LWlucwogICAgICAgICAgICArIGxheW91dChiaW5kaW5nPSkKICAgICAgLSBBbGxvdyAubGVuZ3RoKCkgb24gYWxsIGFycmF5czsgcmV0dXJuaW5nIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9yIG5vdCwgZGVwZW5kaW5nIG9uIGhvdyB0aGUgCiAgICAgICAgYXJyYXkgaXMgc2l6ZWQsIGFzIHBlciB0aGUgQVJCX3NoYWRlcl9zdG9yYWdlX2J1ZmZlcl9vYmplY3QgZXh0ZW5zaW9uLgogICAgICAtIEJlIGNsZWFyIHRoYXQgaW1wbGljaXQgYXJyYXkgc2l6aW5nIGlzIG9ubHkgd2l0aGluIGEgc3RhZ2UsIG5vdCBjcm9zcyBzdGFnZS4KICAgICAgLSBBcnJheSBjbGFyaWZpY2F0aW9uczogCiAgICAgICAgICAgIC0gQWxsIGFycmF5cyBhcmUgaW5oZXJlbnRseSBob21vZ2VuZW91cywgZXhjZXB0IGZvciBhcnJheXMgb2YgdGhlIG5ldyBzaGFkZXIgc3RvcmFnZSBidWZmZXIgb2JqZWN0cwogICAgICAgICAgICAtIEFycmF5cyBvZiBzaGFkZXIgc3RvcmFnZSBidWZmZXIgb2JqZWN0cyB3aWxsIGJlIGRlcmVmZXJlbmNlZCB3aGVuIHRoZSAubGVuZ3RoKCkgbWV0aG9kIGlzIHVzZWQgb24gYW4gdW5zaXplZCBhcnJheSAKICAgICAgICAgICAgICAgIG1lbWJlciwgc28gdGhhdCBtdXN0IGEgaGF2ZSB2YWxpZCBpbmRleC4gCiAgICAgICAgICAgIC0gQXJyYXlzIG9mIG90aGVyIG9iamVjdHMgKHVuaWZvcm0gYmxvY2tzKSBjb250YWluaW5nIGltcGxpY2l0bHkgc2l6ZWQgYXJyYXlzIHdpbGwgaGF2ZSB0aGUgc2FtZSBpbXBsaWNpdCBzaXplIGZvciBhbGwgCiAgICAgICAgICAgICAgICBlbGVtZW50cyBvZiB0aGUgYXJyYXkuCiAgICAgIC0gQXJyYXlzIG9mIGFycmF5cyBhcmUgbm93IHN1cHBvcnRlZCwgYXMgcGVyIHRoZSBHTF9BUkJfYXJyYXlzX29mX2FycmF5cyBleHRlbnNpb24uCiAgICAgICsgQ29tcHV0ZSBzaGFkZXJzIGFyZSBub3cgc3VwcG9ydGVkLCBhcyBwZXIgdGhlIEdMX0FSQl9jb21wdXRlX3NoYWRlciBleHRlbnNpb24uCiAgICAgICsgQWRkZWQgaW1hZ2VTaXplKCkgYnVpbHQtaW5zIHRvIHF1ZXJ5IHRoZSBkaW1lbnNpb25zIG9mIGFuIGltYWdlLgogICAgICAtIEFsbG93IGV4cGxpY2l0IGxvY2F0aW9ucy9pbmRleGVzIHRvIGJlIGFzc2lnbmVkIHRvIHN1YnJvdXRpbmVzLCBhcyBwZXIgdGhlIEdMX0FSQl9leHBsaWNpdF91bmlmb3JtX2xvY2F0aW9uIGV4dGVuc2lvbi4KICAgICAgKyBBY2NlcHQgRVMgR0xTTCBzaGFkZXIgI3ZlcnNpb24gc3RhdGVtZW50cywgd2hpY2ggd2lsbCByZXF1ZXN0IEVTIGZ1bmN0aW9uYWxpdHkgZm9yIEVTIEdMU0wgCiAgICAgICAgdmVyc2lvbnMgMTAwIGFuZCAzMDAsIGFzIHBlciB0aGUgR0xfQVJCX0VTM19jb21wYXRpYmlsaXR5IGV4dGVuc2lvbi4KICAgICAgKyBDbGFyaWZ5IGFuZCBjb3JyZWN0IHNjb3BpbmcgcnVsZXMgdG8gd2hhdCB3b3VsZCBub3JtYWxseSBiZSBleHBlY3RlZCBhbmQgd2hhdCB3YXMgaW50ZW5kZWQuIAogICAgICAgIChGdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBib2R5IG5lc3QgaW5zaWRlIGdsb2JhbCBzcGFjZS4gTG9vcCB2YXJpYWJsZXMgYW5kIGJvZHkgbmVzdCBpbnNpZGUgCiAgICAgICAgbG9vcCBzY29wZS4pCiAgICAgICsgVGhlcmUgYXJlIG5vIGRpZ3JhcGhzICh0cmlncmFwaHMgd2VyZSBhbHJlYWR5IGRpc2FsbG93ZWQpLgogICAgICArIFJlbW92ZSB0aGUgQ1BQIGRpZmZlcmVuY2UgdGhhdCBpdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciB0byB1c2UgI2lmIG9yICNlbGlmIG9uIGV4cHJlc3Npb25zIAogICAgICAgIGNvbnRhaW5pbmcgdW5kZWZpbmVkIG1hY3JvIG5hbWVzLiBUaGlzIHJldmVydHMgYmFjayB0byBmb2xsb3dpbmcgZXhwZWN0ZWQgQ1BQIGJlaGF2aW9yLgogICAgICArIFNldCBib3RoIGdsX01heEZyYWdtZW50SW1hZ2VVbmlmb3JtcyBhbmQgZ2xfTWF4Q29tYmluZWRJbWFnZVVuaWZvcm1zIHRvIDguCiAgICAgIC0gQ2xhcmlmeSB0ZXh0dXJlU2l6ZSgpIGZvciBjdWJlIG1hcCBhcnJheXMuCiAgICAgIC0gRm9yIGxheW91dCBxdWFsaWZpZXJzLAogICAgICAgICAgICArIG1ha2UgbmVnYXRpdmUgb3V0cHV0IGxvY2F0aW9ucyBhIGNvbXBpbGUtdGltZSBlcnJvciwgb25jZSBpbnRlZ2VyIGV4cHJlc3Npb25zIGFyZSBhbGxvd2VkIGluIGxheW91dHMKICAgICAgICAgICAgLSBtYWtlIGluZGV4ZXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsMV0gYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICsgQWRkIHRleHR1cmVRdWVyeUxldmVscygpIGJ1aWx0LWlucyB0byBxdWVyeSB0aGUgbnVtYmVyIG9mIG1pcG1hcCBsZXZlbHMsIGFzIHBlciB0aGUgCiAgICAgICAgR0xfQVJCX3RleHR1cmVfcXVlcnlfbGV2ZWxzIGV4dGVuc2lvbi4KICAgICAgKyBNYWtlIGdsX0xheWVyIGFuZCBnbF9WaWV3cG9ydEluZGV4IGFsc28gYmUgaW5wdXRzIHRvIHRoZSBmcmFnbWVudCBzaGFkZXIsIGFzIHBlciB0aGUgCiAgICAgICAgR0xfQVJCX2ZyYWdtZW50X2xheWVyX3ZpZXdwb3J0IGV4dGVuc2lvbi4KICAgICAgLSBDbGFyaWZ5IGZyYWdtZW50IG91dHB1dCB2YXJpYWJsZXMgY2Fubm90IGJlIGRvdWJsZSBwcmVjaXNpb24uCiAgICAgICsgQWxsb3cgdGhlIG5ldyBzaGFyZWQga2V5d29yZCB0byBiZSBpbiBsYXlvdXQtcXVhbGlmaWVyLWlkLCBhbGxvd2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IAogICAgICAgIHdpdGggdGhlIHNoYXJlZCBpZGVudGlmaWVyIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZC4KICAgICAgKyBBZGRlZCBvdmVybG9va2VkIHRleHR1cmUgZnVuY3Rpb24gZmxvYXQgdGV4dHVyZU9mZnNldCAoc2FtcGxlcjJEQXJyYXlTaGFkb3cgc2FtcGxlciwgdmVjNCBQLCB2ZWMyIG9mZnNldCBbLCBmbG9hdCBiaWFzXSApLgogICAgICArIEFkZCBtaXNzaW5nIHR5cGUgaW4gZ3JhbW1hciwgQVRPTUlDX1VJTlQsIGFuZCBtaXNzaW5nIHF1YWxpZmllcnMgQ09IRVJFTlQsIFZPTEFUSUxFLCBSRVNUUklDVCwgUkVBRE9OTFksIGFuZCBXUklURU9OTFkuCiAgICAgICsgQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIgbGlzdHMgdG8gZ3JhbW1hci4KICAgIEdMU0wgNC40CiAgICAgICsgSW5jb3Jwb3JhdGUgdGhlIEFSQl9lbmhhbmNlZF9sYXlvdXRzIGV4dGVuc2lvbiwgd2hpY2ggYWRkcwogICAgICAgICsgY29tcGlsZS10aW1lIGNvbnN0YW50IGV4cHJlc3Npb25zIGZvciBsYXlvdXQgcXVhbGlmaWVyIGludGVnZXJzCiAgICAgICAgKyBuZXcgb2Zmc2V0IGFuZCBhbGlnbiBsYXlvdXQgcXVhbGlmaWVycyBmb3IgY29udHJvbCBvdmVyIGJ1ZmZlciBibG9jayBsYXlvdXRzCiAgICAgICAgKyBhZGQgbG9jYXRpb24gbGF5b3V0IHF1YWxpZmllciBmb3IgaW5wdXQgYW5kIG91dHB1dCBibG9ja3MgYW5kIGJsb2NrIG1lbWJlcnMKICAgICAgICArIG5ldyBjb21wb25lbnQgbGF5b3V0IHF1YWxpZmllciBmb3IgZmluZXItZ3JhaW5lZCBsYXlvdXQgY29udHJvbCBvZiBpbnB1dCBhbmQgb3V0cHV0IHZhcmlhYmxlcyBhbmQgYmxvY2tzCiAgICAgICAgKyBuZXcgeGZiX2J1ZmZlciwgeGZiX3N0cmlkZSwgYW5kIHhmYl9vZmZzZXRsYXlvdXQgcXVhbGlmaWVycyB0byBhbGxvdyB0aGUgc2hhZGVyIHRvIGNvbnRyb2wgCiAgICAgICAgICB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVyaW5nLgogICAgICArIEJ1ZyAxMDUzMDogVG8gYmUgY29uc2lzdGVudCB3aXRoIEVTLCBpbmNsdWRlIHNhbXBsZSB0eXBlcyBhcyB2YWxpZCBpbiBhIHByZWNpc2lvbiBzdGF0ZW1lbnQuIAogICAgICAgIE5vdGUgdGhlIGRlZmF1bHRzIGFyZSBpcnJlbGV2YW50LCBhcyBwcmVjaXNpb24gcXVhbGlmaWVycyBhcmUgbm90IHJlcXVpcmVkIG9yIGhhdmUgYW55IG1lYW5pbmcuCiAgICBHTFNMIDQuNQogICAgICArIEluY29ycG9yYXRlIHRoZSBBUkJfRVMzXzFfY29tcGF0aWJpbGl0eSBleHRlbnNpb24KICAgICAgICArIFN1cHBvcnRzIE9wZW5HTCBFUyAzMTAgc2hhZGVycy4KICAgICAgICArIEFkZHMgaW1hZ2VBdG9taWNFeGNoYW5nZSgpIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBmbG9hdGluZy1wb2ludCBpbWFnZXMuCiAgICAgICAgKyBBZGRzIGNvaGVyZW50IHRvIGF0b21pYyBhbmQgaW1hZ2UtYXRvbWljIGJ1aWx0LWluIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCiAgICAgICAgKyBBZGRzIGdsX0hlbHBlckludm9jYXRpb24gYnVpbHQtaW4gdmFyaWFibGUgdG8gc2F5IHdoZXRoZXIgYSBmcmFnbWVudCBzaGFkZXIgaW52b2NhdGlvbiBpcyAKICAgICAgICAgICAgICBvbmx5IGFzIGEgaGVscGVyLCBzbyB0aGUgc2hhZGVyIGNhbiBza2lwIGNvZGUgbm90IG5lZWRlZCBvciBoYXJtZnVsIHdoZW4gaW4gYSBoZWxwZXIgaW52b2NhdGlvbi4KICAgICAgICArIEFkZHMgZ2xfTWF4U2FtcGxlc2J1aWx0LWluIGNvbnN0YW50LCBhbmQgc2V2ZXJhbCBvdGhlciBidWlsdC1pbiBjb25zdGFudHMuCiAgICAgICAgKyBBZGRzIG1peCgpIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3Igc2VsZWN0aW9uIG9mIGludCwgdWludCwgYW5kYm9vbCBjb21wb25lbnRzLgogICAgICArIEluY29ycG9yYXRlIHRoZSBHTF9BUkJfc2hhZGVyX3RleHR1cmVfaW1hZ2Vfc2FtcGxlcyBleHRlbnNpb24gdG8gcXVlcnkgaG93IG1hbnkgc2FtcGxlcyBhcmUgaW4gYSBtdWx0aS1zYW1wbGUgdGV4dHVyZSBvciBpbWFnZS4KICAgICAgKyBJbmNvcnBvcmF0ZSB0aGUgR0xfQVJCX2N1bGxfZGlzdGFuY2UgZXh0ZW5zaW9ucyB0byBhZGQgdGhlIGJ1aWx0LWluIHZhcmlhYmxlIGdsX0N1bGxEaXN0YW5jZVtdICwgd2hpY2ggd2lsbCBjdWxsIHdob2xlIHByaW1pdGl2ZXMuCiAgICAgICsgSW5jb3Jwb3JhdGUgdGhlIEdMX0FSQl9kZXJpdmF0aXZlX2NvbnRyb2wgZXh0ZW5zaW9uCg==