dHJlZSA1ZTBhMzcyYjQyMTBmNWIxYTA2N2ExYTU4N2NjZjE4YmRjNjAzN2QzCnBhcmVudCAyYzg5N2Q5ZDFiZjI1YmVmMzZmNzE3ZWRjNmJiYzM4OTI2YWI4ZDkxCmF1dGhvciBXaWxseSBUYXJyZWF1IDx3QDF3dC5ldT4gMTYzMDM5MjY2MiArMDIwMApjb21taXR0ZXIgV2lsbHkgVGFycmVhdSA8d0Axd3QuZXU+IDE2MzExMDYzNzEgKzAyMDAKZW5jb2RpbmcgbGF0aW4xCgpNRURJVU06IHZhcnM6IHJlcGxhY2UgdGhlIGdsb2JhbCBuYW1lIGluZGV4IHdpdGggYSBoYXNoCgpUaGUgZ2xvYmFsIHRhYmxlIG9mIGtub3duIHZhcmlhYmxlcyBuYW1lcyBjYW4gb25seSBncm93IGFuZCB3YXMgZGVzaWduZWQKZm9yIHN0YXRpYyBuYW1lcyB0aGF0IGFyZSByZWdpc3RlcmVkIGF0IGJvb3QuIE5vd2FkYXlzIGl0J3MgcG9zc2libGUgdG8Kc2V0IGR5bmFtaWMgdmFyaWFibGUgbmFtZXMgZnJvbSBMdWEgb3IgZnJvbSB0aGUgQ0xJLCB3aGljaCBjYXVzZXMgYSByZWFsCnByb2JsZW0gdGhhdCB3YXMgcGFydGlhbGx5IGFkZHJlc3NlZCBpbiAyLjIgd2l0aCBjb21taXQgNGUxNzJjOTNmCigiTUVESVVNOiBsdWE6IEFkZCBgaWZleGlzdGAgcGFyYW1ldGVyIHRvIGBzZXRfdmFyYCIpLiBQbGVhc2Ugc2VlIGdpdGh1Ygppc3N1ZSAjNjI0IGZvciBtb3JlIGNvbnRleHQuCgpUaGlzIHBhdGNoIHNpbXBsaWZpZXMgYWxsIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIG5lZWQgZm9yIGEgY2VudHJhbApyZWdpc3RyeSBvZiBrbm93biBuYW1lcywgYW5kIHN0b3JpbmcgNjQtYml0IGhhc2hlcyBpbnN0ZWFkLiBUaGlzIGlzCmhpZ2hseSBzdWZmaWNpZW50IGdpdmVuIHRoZSBsb3cgbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBlYWNoIGNvbnRleHQuClRoZSBoYXNoIGlzIGNhbGN1bGF0ZWQgdXNpbmcgWFhINjQoKSB3aGljaCBpcyBiaWplY3RpdmUgb3ZlciB0aGUgNjQtYml0CnNwYWNlIHRodXMgaXMgZ3VhcmFudGVlZCBjb2xsaXNpb24tZnJlZSBmb3IgMS4uOCBjaGFycy4gQWJvdmUgdGhhdCB0aGUKcmlzayByZW1haW5zIGFyb3VuZCAxLzJeNjQgcGVyIGV4dHJhIDggY2hhcnMgc28gaW4gcHJhY3RpY2UgdGhpcyBpcwpoaWdobHkgc3VmZmljaWVudCBmb3Igb3VyIHVzYWdlLiBBIHJhbmRvbSBzZWVkIGlzIHVzZWQgYXQgYm9vdCB0byBzZWVkCnRoZSBoYXNoIHNvIHRoYXQgaXQncyBub3QgYXR0YWNrYWJsZSBmcm9tIEx1YSBmb3IgZXhhbXBsZS4KClRoZXJlJ3Mgb25lIHBhcnRpY3VsYXIgbml0IHRob3VnaC4gVGhlICJpZmV4aXN0IiBoYWNrIG1lbnRpb25lZCBhYm92ZQppcyBub3cgbGltaXRlZCB0byB2YXJpYWJsZXMgb2Ygc2NvcGUgInByb2MiIG9ubHksIGFuZCB3aWxsIG9ubHkgbWF0Y2gKdmFyaWFibGVzIHRoYXQgd2VyZSBhbHJlYWR5IGNyZWF0ZWQgb3IgZGVjbGFyZWQsIGJ1dCB3aWxsIG5vdyB2ZXJpZnkKdGhlIHNjb3BlIGFzIHdlbGwuIFRoaXMgbWF5IGFmZmVjdCBzb21lIGJvZ3VzIEx1YSBzY3JpcHRzIGFuZCBTUE9FCmFnZW50cyB3aGljaCB1c2VkIHRvIGFjY2lkZW50YWxseSB3b3JrIGJlY2F1c2UgYSBzaW1pbGFybHkgbmFtZWQKdmFyaWFibGUgdXNlZCB0byBleGlzdCBpbiBhIGRpZmZlcmVudCBzY29wZS4gVGhlc2Ugb25lcyBtYXkgbmVlZCB0byBiZQpmaXhlZCB0byBjb21wbHkgd2l0aCB0aGUgZG9jLgoKTm93IHdlIGNhbiBzdW0gdXAgdGhlIHNpdHVhdGlvbiBhcyB0aGlzIG9uZToKICAtIGVwaGVtZXJhbCB2YXJpYWJsZXMgKHNjb3BlcyBzZXNzLCB0eG4sIHJlcSwgcmVzKSB3aWxsIGFsd2F5cyBiZQogICAgdXNhYmxlLCByZWdhcmRsZXNzIG9mIGFueSBwcmlvciBkZWNsYXJhdGlvbi4gVGhpcyBlZmZlY3RpdmVseQogICAgYWRkcmVzc2VzIHRoZSBtb3N0IHByb2JsZW1hdGljIGNoYW5nZSBmcm9tIHRoZSBjb21taXQgYWJvdmUgdGhhdAogICAgaW4gb3JkZXIgdG8gd29yayB3ZWxsIGNvdWxkIGhhdmUgcmVxdWlyZWQgc29tZSBzY3JpcHQgYXVkaXRpbmcgOwoKICAtIHByb2Nlc3Mtd2lkZSB2YXJpYWJsZXMgKHNjb3BlIHByb2MpIHRoYXQgYXJlIG1lbnRpb25lZCBpbiB0aGUKICAgIGNvbmZpZ3VyYXRpb24sIHJlZmVyZW5jZWQgaW4gYSAicmVnaXN0ZXItdmFyLW5hbWVzIiBTUE9FIGRpcmVjdGl2ZSwKICAgIG9yIGNyZWF0ZWQgdmlhICJzZXQtdmFyIiBpbiB0aGUgZ2xvYmFsIHNlY3Rpb24gb3IgdGhlIENMSSwgYXJlCiAgICBwZXJtYW5lbnQgYW5kIHdpbGwgYWx3YXlzIGFjY2VwdCB0byBiZSBzZXQsIHdpdGggb3Igd2l0aG91dCB0aGUKICAgICJpZmV4aXN0IiByZXN0cmljdGlvbiAoU1BPRSB1c2VzIHRoaXMgaW50ZXJuYWxseSBhcyB3ZWxsKS4KCiAgLSBwcm9jZXNzLXdpZGUgdmFyaWFibGVzIChzY29wZSBwcm9jKSB0aGF0IGFyZSBvbmx5IGNyZWF0ZWQgdmlhIGEKICAgIHNldC12YXIoKSB0Y3AvaHR0cCBhY3Rpb24sIHZpYSBMdWEncyBzZXRfdmFyKCkgY2FsbHMsIG9yIHZpYSBhbgogICAgU1BPRSB3aXRoIHRoZSAiZm9yY2Utc2V0LXZhciIgZGlyZWN0aXZlKSwgd2lsbCBub3QgYmUgcGVybWFuZW50CiAgICBidXQgd2lsbCBhbHdheXMgYWNjZXB0IHRvIGJlIHJlcGxhY2VkIG9uY2UgdGhleSBhcmUgY3JlYXRlZCwgZXZlbgogICAgaWYgImlmZXhpc3QiIGlzIHByZXNlbnQKCiAgLSBwcm9jZXNzLXdpZGUgdmFyaWFibGVzIChzY29wZSBwcm9jKSB0aGF0IGRvIG5vdCBleGlzdCB3aWxsIG9ubHkKICAgIHN1cHBvcnQgYmVpbmcgY3JlYXRlZCB2aWEgdGhlIHNldC12YXIoKSB0Y3AvaHR0cCBhY3Rpb24sIEx1YSdzCiAgICBzZXRfdmFyKCkgY2FsbHMgd2l0aG91dCAiaWZleGlzdCIsIG9yIGFuIFNQT0UgZGVjbGFyZWQgd2l0aAogICAgImZvcmNlLXNldC12YXIiLgoKVGhpcyBtZWFucyB0aGF0IG5vbi1wcm9jIHZhcmlhYmxlcyBkbyBub3QgY2FyZSBhYm91dCAiaWZleGlzdCIgbm9yCnByaW9yIGRlY2xhcmF0aW9uLCBhbmQgdGhhdCB1c2luZyAiaWZleGlzdCIgc2hvdWxkIG1vc3Qgb2Z0ZW4gYmUKcmVsaWFibGUgaW4gTHVhIGFuZCB0aGF0IFNQT0Ugc2hvdWxkIG1vc3Qgb2Z0ZW4gd29yayB3aXRob3V0IGFueQpwcmlvciBkZWNsYXJhdGlvbi4gSXQgbWF5IGJlIGRvYWJsZSB0byB0dXJuICJpZmV4aXN0IiB0byAxIGJ5IGRlZmF1bHQKaW4gTHVhIHRvIGZ1cnRoZXIgZWFzZSB0aGUgdHJhbnNpdGlvbi4gTm90ZTogcmVndGVzdHMgd2VyZSBhZGp1c3RlZC4KCkNjOiBUaW0gRPxzdGVyaHVzIDx0aW1AYmFzdGVsc3R1LmJlPgo=