MjAwMC0wMy0yOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc4LjkyIHJlbGVhc2VkLgoKCSogYnVpbGQudGVtcGxhdGU6IFVwZGF0ZXMgZm9yIGdldHRleHQgc3VwcG9ydDsgc29tZSBidWdzIGZpeGVkLgoKMjAwMC0wMy0yNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBVcGRhdGVkIGZyb20gY29uZmlnIENWUyBhcmNoaXZlIGF0Cgk6cHNlcnZlcjphbm9uY3ZzQHN1YnZlcnNpb25zLmdudS5vcmc6L2hvbWUvY3ZzIGFzIG9mIHRvZGF5LgoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBDaGVjayBpZiBleHBhbmRpbmcgYSBzdGF0aWMgcGF0dGVybgoJcnVsZSdzIHByZXJlcXVpc2l0ZSBwYXR0ZXJuIGxlYXZlcyBhbiBlbXB0eSBzdHJpbmcgYXMgdGhlCglwcmVyZXF1aXNpdGUsIGFuZCBpc3N1ZSBhbiBlcnJvciBpZiBzby4gIEZpeGVzIFBSLzE2NzAuCgkocmVhZF9tYWtlZmlsZSk6IFN0b3JlIHRoZSBzdGFydGluZyBsaW5lbnVtYmVyIGZvciBhIHJ1bGUgaW4KCVRHVFNfU1RBUlRFRC4KCShyZWNvcmRfd2FpdGluZ19maWxlcyk6IFVzZSB0aGUgVEdUU19TVEFSVEVEIHZhbHVlIGZvciB0aGUgZmlsZQoJbG9jYXRpb24gcGFzc2VkIHRvIHJlY29yZF9maWxlKCkgaW5zdGVhZCBvZiB0aGUgY3VycmVudAoJbGluZW51bWJlciwgc28gZXJyb3IgbWVzc2FnZXMgbGlzdCB0aGUgbGluZSB3aGVyZSB0aGUgdGFyZ2V0IHdhcwoJZGVmaW5lZCBpbnN0ZWFkIG9mIHRoZSBsaW5lIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHJ1bGUgZGVmaW5pdGlvbi4KCgkqIHJlbWFrZS5jIChzdGFydF91cGRhdGluZywgZmluaXNoX3VwZGF0aW5nLCBpc191cGRhdGluZyk6IEZpeAoJUFIvMTY3MTsgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGluIGRvdWJsZS1jb2xvbiBydWxlcyBhcmUgbm90CglkaWFnbm9zZWQuICBUaGVzZSBtYWNyb3Mgc2V0IHRoZSB1cGRhdGluZyBmbGFnIGluIHRoZSByb290Cglkb3VibGUtY29sb24gZmlsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IG9uZSwgaWYgaXQncyBwYXJ0IG9mIGEKCWRvdWJsZS1jb2xvbiBsaXN0LiAgVGhpcyBzb2x1dGlvbiBwcm92aWRlZCBieSBUaW0gTWFnaWxsCgk8bWFnaWxsQGdhdGUubmV0PjsgSSBqdXN0IGNoYW5nZWQgdGhlIG1hY3JvIG5hbWVzIDopLgoJKHVwZGF0ZV9maWxlXzEpOiBDYWxsIHRoZW0uCgkoY2hlY2tfZGVwKTogQ2FsbCB0aGVtLgoKCVRoZSBjaGFuZ2UgdG8gbm90IGF1dG9tYXRpY2FsbHkgZXZhbHVhdGUgdGhlICQoY2FsbCAuLi4pCglmdW5jdGlvbidzIGFyZ3VtZW50cyBicmVha3MgcmVjdXJzaXZlIHVzZSBvZiBjYWxsLiAgQWx0aG91Z2ggdXNpbmcKCSQoaWYgLi4uKSBhbmQgJChmb3JlYWNoIC4uLikgaW4gJChjYWxsIC4uLikgbWFjcm9zIGlzIGltcG9ydGFudCwKCXRoZSBlcnJvciBjb25kaXRpb25zIGdlbmVyYXRlZCBhcmUgc2ltcGx5IHRvIG9ic2N1cmUgZm9yIG1lIHRvCglmZWVsIGNvbWZvcnRhYmxlIHdpdGguICBJZiBhIG1ldGhvZCBpcyBkZXZpc2VkIHRvIGdldCBib3RoCgl3b3JraW5nLCB3ZSdsbCByZXZpc2l0LiAgRm9yIG5vdywgcmVtb3ZlIHRoaXMgY2hhbmdlLgoKCSogZnVuY3Rpb24uYyAoZnVuY3Rpb25fdGFibGUpOiBUdXJuIG9uIHRoZSBleHBhbmQgYml0IGZvciBmdW5jX2NhbGwuCgkoZnVuY19jYWxsKTogRG9uJ3QgZXhwYW5kIGFyZ3VtZW50cyBmb3IgYnVpbHRpbiBmdW5jdGlvbnM7IHRoYXQKCXdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZS4KCjIwMDAtMDMtMjYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBOZXZlciByZW1vdmUgdGFyZ2V0cyBleHBsaWNpdGx5CglyZXF1ZXN0ZWQgb24gdGhlIGNvbW1hbmQtbGluZSBieSBjaGVja2luZyB0aGUgY21kX3RhcmdldCBmbGFnLgoJRml4ZWQgUFIvMTY2OS4KCjIwMDAtMDMtMjMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZmlsZWRlZi5oIChGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUpOiBVc2Ugc3RfbXRpbWUgaW5zdGVhZCBvZgoJc3RfbXRpbS50dl9zZWM7IHRoZSBsYXR0ZXIgZG9lc24ndCB3b3JrIG9uIFVuaXh3YXJlLgoKMjAwMC0wMy0xOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBJZiB3ZSdyZSB0cnlpbmcgdG8gY2hhbmdlIGEgZmlsZSBpbnRvCglpdHNlbGYsIGp1c3QgcmV0dXJuLiAgV2UgdXNlZCB0byBhc3NlcnQgdGhpcyB3YXNuJ3QgdHJ1ZSwgYnV0Cglzb21lb25lIGNhbWUgdXAgd2l0aCBhIHdlaXJkIGNhc2UgaW52b2x2aW5nIGFyY2hpdmVzLiAgQWZ0ZXIKCXBsYXlpbmcgd2l0aCBpdCBmb3IgYSB3aGlsZSBJIGRlY2lkZWQgaXQgd2FzIE9LIHRvIGlnbm9yZSBpdC4KCgkqIGRlZmF1bHQuYzogRGVmaW5lIENPRkxBR1MgdG8gZW1wdHkgdG8gYXZvaWQgc3B1cmlvdXMgd2FybmluZ3MuCgoJKiBmaWxlZGVmLmg6IENoYW5nZSAjaWYgU1RfTVRJTV9OU0VDIHRvICNpZmRlZjsgdGhpcyBpcyBhIG1hY3JvCgljb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBuc2VjIGZpZWxkLCBub3QgdHJ1ZS9mYWxzZS4KCSogbWFrZS5oOiBEaXR0by4KCVJlcG9ydGVkIGJ5IE1hcmNvIEZyYW56ZW4gPE1hcmNvLkZyYW56ZW5AVGh5cm9uLmNvbT4uCgoyMDAwLTAzLTA4ICBUaW0gTWFnaWxsICA8bWFnaWxsQGdhdGUubmV0PgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogUmV0dXJuIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgcHJ1bmVkCglmaWxlIHdoZW4gcHJ1bmluZywgbm90IGp1c3QgMC4gIEZpeGVzIFBSLzE2MzQuCgoyMDAwLTAyLTI0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IENsb3NlIGEgbWlub3IgcG90ZW50aWFsIHNlY3VyaXR5IGhvbGU7IGlmIHlvdSdyZQoJcmVhZGluZyBtYWtlZmlsZXMgZnJvbSBzdGRpbiAod2hvIGRvZXMgdGhhdD8pIHlvdSBjb3VsZCBydW4gaW50byBhCglyYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSB0ZW1wIGZpbGUgdXNpbmcgbWt0ZW1wKCkgb3IgdG1wbmFtKCkuICBBZGQKCWEgY2hlY2sgZm9yIG1rc3RlbXAoKSBhbmQgZmRvcGVuKCkuCgkqIG1haW4uYyAob3Blbl90bXBmaWxlKTogTmV3IGZ1bmN0aW9uIHRvIG9wZW4gYSB0ZW1wb3JhcnkgZmlsZS4KCUlmIHdlIGhhdmUgbWtzdGVtcCgpIChhbmQgZmRvcGVuKCkpLCB1c2UgdGhhdC4gIElmIG5vdCB1c2UKCW1rdGVtcCgpIG9yIHRtcG5hbSgpLiAgSWYgd2UgaGF2ZSBmZG9wZW4oKSwgdXNlIG9wZW4oKSB0byBvcGVuIHRoZQoJZmlsZSBPX0NSRUFUfE9fRVhDTC4gIElmIG5vdCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBmb3BlbigpIChpbnNlY3VyZSkuCgkobWFpbik6IENhbGwgaXQuCgkqIGpvYi5jIChjaGlsZF9leGVjdXRlX2pvYikgW1ZNU106IENhbGwgaXQuCgoJKiB2YXJpYWJsZS5jIChsb29rdXBfdmFyaWFibGUpOiBJZiB3ZSBmaW5kIGEgdmFyaWFibGUgd2hpY2ggaXMKCWJlaW5nIGV4cGFuZGVkLCB0aGVuIG5vdGUgaXQgYnV0IGtlZXAgbG9va2luZyB0aHJvdWdoIHRoZSByZXN0IG9mCgl0aGUgc2V0IGxpc3QgdG8gc2VlIGlmIHdlIGNhbiBmaW5kIG9uZSB0aGF0IGlzbid0LiAgSWYgd2UgZG8sCglyZXR1cm4gdGhhdC4gIElmIHdlIGRvbid0LCByZXR1cm4gdGhlIG9yaWdpbmFsLiAgRml4IGZvciBQUi8xNjEwLgoKCVdoaWxlIGltcGxlbWVudGluZyB0aGlzIEkgcmVhbGl6ZWQgdGhhdCBpdCBhbHNvIHNvbHZlcyBQUi8xMzgwIGluCglhIG11Y2ggbW9yZSBlbGVnYW50IHdheS4gIEkgZG9uJ3Qga25vdyB3aGF0IEkgd2FzIHNtb2tpbmcgYmVmb3JlLgoJU28sIHJlbW92ZSB0aGUgaGFja2FnZSBzdXJyb3VuZGluZyB0aGUgb3JpZ2luYWwgZml4IGZvciB0aGF0IChzZWUKCWJlbG93KS4gIENoYW5nZSB0aGlzIGZ1bmN0aW9uIGJhY2sgdG8gbG9va3VwX3ZhcmlhYmxlIGFuZCByZW1vdmUKCXRoZSBleHRyYSBzZXRsaXN0IGFyZ3VtZW50LgoJKiB2YXJpYWJsZS5oIChyZWN1cnNpdmVseV9leHBhbmRfc2V0bGlzdCk6IFJlbW92ZSB0aGUgbWFjcm8sCglyZW5hbWUgdGhlIHByb3RvdHlwZSwgYW5kIHJlbW92ZSB0aGUgZXh0cmEgc2V0bGlzdCBhcmd1bWVudC4KCShsb29rdXBfdmFyaWFibGUpOiBEaXR0by4KCSogZXhwYW5kLmMgKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IFJlbmFtZSBhbmQgcmVtb3ZlIHRoZSBleHRyYQoJc2V0bGlzdCBhcmd1bWVudC4KCShyZWZlcmVuY2VfdmFyaWFibGUpOiBVc2UgbG9va3VwX3ZhcmlhYmxlKCkgYWdhaW4uCgkoYWxsb2NhdGVkX3ZhcmlhYmxlX2FwcGVuZCk6IFJlbW92ZSB0aGUgZXh0cmEgc2V0bGlzdCBhcmd1bWVudC4KCjIwMDAtMDItMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFJFQURNRS50ZW1wbGF0ZTogQSBmZXcgdXBkYXRlcy4KCgkqIGkxOG4vZGUucG86IE5ldyB2ZXJzaW9uIGZyb20gdGhlIEdlcm1hbiB0cmFuc2xhdGlvbiB0ZWFtLgoKMjAwMC0wMi0wOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc4LjkxIHJlbGVhc2VkLgoKMjAwMC0wMi0wNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVzZXQgKnAyIHRvICc6Jywgbm90ICpjb2xvbnAuICBJZiBhbnkKCWZpbGVuYW1lcyBjb250YWluZWQgYmFja3NsYXNoZXMgdGhlIHJlc3VsdGluZyBvdXRwdXQgKHdpdGhvdXQKCWJhY2tzbGFzaGVzKSB3aWxsIGJlIHNob3J0ZXIsIHNvIHNldHRpbmcgKmNvbG9ucCBkb2Vzbid0IGNoYW5nZQoJdGhlIHJpZ2h0IGNoYXJhY3Rlci4gIEZpeCBmb3IgUFIvMTU4Ni4KCglGb3IgKz0gdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHdoaWNoCgl2YXJpYWJsZSBzZXQgd2UgZm91bmQgdGhlIHZhcmlhYmxlIGluLCBzbyB3ZSBjYW4gc3RhcnQgbG9va2luZwoJZnJvbSB0aGVyZSBpbiB0aGUgbmV4dCBpdGVyYXRpb24gKG90aGVyd2lzZSB3ZSBtaWdodCBzZWUgaXQgYWdhaW4KCWluIHJlY3Vyc2l2ZWx5X2V4cGFuZCBhbmQgZmFpbCEpLiAgVGhpcyBpcyB0dXJuaW5nIGludG8gYSBoYWNrOyBpZgoJaXQgZ2V0cyBhbnkgd29yc2Ugd2UnbGwgaGF2ZSB0byByZXRoaW5rIHRoaXMgZW50aXJlIGFsZ29yaXRobS4uLgoJaW1wbGVtZW50aW5nIGV4cGFuc2lvbiBvZiB0aGVzZSByZWZlcmVuY2VzIHNlcGFyYXRlbHkgZnJvbSB0aGUKCSJub3JtYWwiIGV4cGFuc2lvbiwgc2F5LCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBzYW1lIGNvZGVwYXRoLgoJQWN0dWFsbHksIGl0J3MgYWxyZWFkeSAid29yc2UgZW5vdWdoIiA6LS8uCglGaXggZm9yIFBSLzEzODAuCgoJKiB2YXJpYWJsZS5oIChyZWN1cnNpdmVseV9leHBhbmRfc2V0bGlzdCk6IFJlbmFtZQoJcmVjdXJzaXZlbHlfZXhwYW5kIHRvIGFkZCBhIHN0cnVjdCB2YXJpYWJsZV9zZXRfbGlzdCBhcmd1bWVudCwgYW5kCgltYWtlIGEgbWFjcm8gZm9yIHJlY3Vyc2l2ZWx5X2V4cGFuZC4KCShsb29rdXBfdmFyaWFibGVfc2V0bGlzdCk6IFJlbmFtZSBsb29rdXBfdmFyaWFibGUgdG8gYWRkIGEgc3RydWN0Cgl2YXJpYWJsZV9zZXRfbGlzdCBhcmd1bWVudCwgYW5kIG1ha2UgYSBtYWNybyBmb3IgbG9va3VwX3ZhcmlhYmxlLgoKCSogZXhwYW5kLmMgKHJlY3Vyc2l2ZWx5X2V4cGFuZF9zZXRsaXN0KTogVGFrZSBhbiBleHRyYSBzdHJ1Y3QKCXZhcmlhYmxlX3NldF9saXN0IGFyZ3VtZW50IGFuZCBwYXNzIGl0IHRvIGFsbG9jYXRlZF92YXJpYWJsZV9hcHBlbmQoKS4KCShyZWZlcmVuY2VfdmFyaWFibGUpOiBVc2UgbG9va3VwX3ZhcmlhYmxlX3NldGxpc3QoKSBhbmQgcGFzcyB0aGUKCXJldHVybmVkIHZhcmlhYmxlX3NldF9saXN0IHRvIHJlY3Vyc2l2ZWx5X2V4cGFuZF9zZXRsaXN0LgoJKGFsbG9jYXRlZF92YXJpYWJsZV9hcHBlbmQpOiBUYWtlIGFuIGV4dHJhIHNldGxpc3QgYXJndW1lbnQgYW5kCgl1c2UgdGhpcyBhcyB0aGUgc3RhcnRpbmcgcGxhY2Ugd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBhcHBlbmRlZAoJZXhwYW5zaW9uLiAgSWYgaXQncyBudWxsLCB1c2UgY3VycmVudF92YXJpYWJsZV9zZXRfbGlzdCBhcyBiZWZvcmUuCgoJKiB2YXJpYWJsZS5jIChsb29rdXBfdmFyaWFibGVfc2V0bGlzdCk6IElmIHRoZSBMSVNUUCBhcmd1bWVudCBpcwoJbm90IG5pbCwgc2V0IGl0IHRvIHRoZSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhcmlhYmxlIHdlIGZvdW5kLgoKMjAwMC0wMi0wNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGUpOiBXcml0ZSBvdXQgZmlsZW5hbWUvbGluZW51bWJlcgoJaW5mb3JtYXRpb24gZm9yIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlmIHByZXNlbnQuCgkoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IFN0b3JlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGlmIHByb3ZpZGVkLgoJKGRlZmluZV92YXJpYWJsZSwgZGVmaW5lX3ZhcmlhYmxlX2Zvcl9maWxlKTogUmVtb3ZlZC4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBkZWZpbmVfdmFyaWFibGVfbG9jKCkgdG8ga2VlcAoJdmFyaWFibGUgZGVmaW5pdGlvbiBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogS2VlcCB2YXJpYWJsZSBkZWZpbml0aW9uIGxvY2F0aW9uIGluZm8uCgkoZG9fZGVmaW5lKTogRGl0dG8uCgkocmVjb3JkX3RhcmdldF92YXIpOiBEaXR0by4KCSogdmFyaWFibGUuaCAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IE5ldyBmaWxlaW5mbyBhcmd1bWVudC4KCShkZWZpbmVfdmFyaWFibGUsIGRlZmluZV92YXJpYWJsZV9sb2MsIGRlZmluZV92YXJpYWJsZV9mb3JfZmlsZSk6CglEZWNsYXJlIG5ldyBtYWNyb3MuCgoJRml4IFBSLzE0MDc6CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogUmVuYW1lIHBhdHZhciB0byBwYXRfdmFyaWFibGVzIGFuZCBtYWtlCglpdCBqdXN0IGEgdmFyaWFibGVfc2V0X2xpc3Q7IHdlIG5lZWQgb3VyIG93biBjb3B5IG9mIHRoZSBwYXR0ZXJuCgl2YXJpYWJsZSdzIHZhcmlhYmxlIHNldCBsaXN0IGhlcmUgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIGdsb2JhbAoJb25lLgoJKiB2YXJpYWJsZS5jIChpbml0aWFsaXplX2ZpbGVfdmFyaWFibGVzKTogTW92ZSB0aGUgaW5zdGFudGlhdGlvbgoJb2YgdGhlIHBhdF92YXJpYWJsZXMgcG9pbnRlciBoZXJlLiAgT25seSBkbyB0aGUgc2VhcmNoIGFmdGVyIHdlJ3JlCglkb25lIHJlYWRpbmcgdGhlIG1ha2VmaWxlcyBzbyB3ZSBkb24ndCBzZWFyY2ggdG9vIGVhcmx5LiAgSWYKCXRoZXJlJ3MgYSBwYXRfdmFyaWFibGVzIHZhbHVlLCBzZXQgdXAgdGhlIHZhcmlhYmxlcyBuZXh0IHB0ci4KCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZSk6IFJlbW92ZSB0aGUgc2V0dXAgb2YgdGhlCglwYXRfdmFyaWFibGVzIGluZm87IGl0J3MgZG9uZSBlYXJsaWVyIG5vdyB0byBlbnN1cmUgdGhlIHBhcmVudCdzCglwYXR0ZXJuIHZhcmlhYmxlcyBhcmUgc2V0IHVwIGNvcnJlY3RseSBhcyB3ZWxsLgoKMjAwMC0wMi0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKHNoX2NoYXJzX2RvcykgW1dJTkRPV1MzMl06IEFkZCAiJiIgYXMgYSBzaGVsbAoJbWV0YWNoYXJhY3RlciBmb3IgdGhlIFczMiBET1Mgc2hlbGwuCglSZXBvcnRlZCBieSBXYXJyZW4gSm9uZXMgPHdqb25lc0B0Yy5mbHVrZS5jb20+LgoKMjAwMC0wMi0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUZpeGVzIGZvciB0aGUgT3BlblZNUyBwb3J0IGZyb20gSGFydG11dCBCZWNrZXIgPGJlY2tlckBydG8uZGVjLmNvbT4KCgkqIGNvbmZpZy5oLXZtcyBbVk1TXTogRGVmaW5lIExPQ0FMRURJUiB0byBzb21ldGhpbmc7IG5lZWRlZCBmb3IKCXRoZSBleHBhbnNpb24gb2YgYmluZHRleHRkb21haW4oKSBldmVuIHRob3VnaCBpdCdzIGEgbm8tb3AuCgkqIHZtc2Z1bmN0aW9ucy5jIChzdHJjbXBpKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIHN0cmNtcGkoKS4KCShyZWFkZGlyKTogVXNlIERCKCkgaW5zdGVhZCBvZiB0ZXN0aW5nIGRlYnVnX2ZsYWcuCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpIFtWTVNdOiBTZWFyY2ggInAiIG5vdCAibmFtZSIuCgkqIGpvYi5jIFtWTVNdOiBTd2l0Y2ggZnJvbSBkZWJ1Z19mbGFnIHRvIHRoZSBuZXcgREIgbWFjcm8uICBBZGQKCXNvbWUgaTE4biBfKCkgbWFjcm9zIChldmVuIHRob3VnaCBWTVMgZG9lc24ndCB5ZXQgc3VwcG9ydCBpdCkuCgoJKiBmdW5jdGlvbi5jIChwYXRzdWJzdF9leHBhbmQpOiBDaGFuZ2UgImxlbiIgdG8gbm90IGJlIHVuc2lnbmVkIHRvCglhdm9pZCB0eXBlIG1pc21hdGNoZXMuCgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIHNpZ25hbWVfaW5pdCgpIGlmIHdlJ3JlIGdvaW5nIHRvIGNhbGwgaXQuCgoyMDAwLTAxLTI5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBUcmFjayBjaGFuZ2VzIGluIE1ha2VmaWxlLmluCgkoaW5zdGFsbC1yZWN1cnNpdmUsIHVuaW5zdGFsbC1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgoJKERFU1RESVIpOiBEZWZpbmUuCgkoaW5zdGFsbC1iaW5QUk9HUkFNUywgdW5pbnN0YWxsLWJpblBST0dSQU1TKTogVXNlICQoREVTVERJUikuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19NU0RPU19fXTogRGVmaW5lIENYWCB0byBncHAuCgoyMDAwLTAxLTI3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBnZXR0ZXh0LmM6IFNvbWUgd2FybmluZyBjbGVhbnVwcywgYW5kIGEgZml4IGZvciBzeXN0ZW1zIHdoaWNoCglkb24ndCBkZWZpbmUgSEFWRV9BTExPQ0EgKHRoZSB3b3JrYXJvdW5kIGNvZGUgd2FzIGluY2x1ZGVkCgl0d2ljZSkuCgoyMDAwLTAxLTI2ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzguOTAgcmVsZWFzZWQuCgoyMDAwLTAxLTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJQ2hhbmdlIGdldHRleHQgc3VwcG9ydCB0byB1c2UgdGhlIHNpbXBsaWZpZWQgdmVyc2lvbiBpbiBsaWJpdCAwLjcuCgoJKiBnZXRvcHQuYywgbWFrZS5oOiBVc2UgZ2V0dGV4dC5oIGluc3RlYWQgb2YgbGliaW50bC5oLgoJKiBBQk9VVC1OTFMsIGdldHRleHQuaCwgZ2V0dGV4dC5jOiBOZXcgZmlsZXMgZnJvbSBsaWJpdCAwLjcuCglNb2RpZmllZCB0byByZW1vdmUgc29tZSBzdGF0aWMgZGVjbGFyYXRpb25zIHdoaWNoIGFyZW4ndCBkZWZpbmVkLgoJKiBhY2NvbmZpZy5oOiBVc2UgbmV3IGdldHRleHQgI2RlZmluZXMuCgkqIGFjaW5jbHVkZS5tNDogQWRkIGZwX1dJVEhfR0VUVEVYVDsgcmVtb3ZlIEFNX0dOVV9HRVRURVhULgoJKiBjb25maWd1cmUuaW46IENhbGwgZnBfV0lUSF9HRVRURVhUIGluc3RlYWQuCgkqIE1ha2VmaWxlLmFtOiBOZXcgZ2V0dGV4dCBzdHVmZi4gIEFsc28gZm9yY2UgaW5jbHVzaW9uIG9mIGdsb2IKCWZpbGVzIGZvciBzeXN0ZW1zIHdoaWNoIGhhdmUgTElCQyBnbG9iLgoKCSogaTE4bi9NYWtlZmlsZS5hbSwgaTE4bi8uY3ZzaWdub3JlOiBOZXcgZGlyIGZvciB0cmFuc2xhdGlvbiBmaWxlcy4KCSogaTE4bi9kZS5wbywgaTE4bi9lcy5wbywgaTE4bi9mci5wbywgaTE4bi9rby5wbywgaTE4bi9ubC5wbzoKCSogaTE4bi9wbC5wbywgaTE4bi9ydS5wbzogSW1wb3J0IHRyYW5zbGF0aW9ucyBhbHJlYWR5IGRvbmUgZm9yCgllYXJsaWVyIHZlcnNpb25zIG9mIEdOVSBtYWtlLiAgVGhhbmtzIGZvciB0aGF0IHdvcmshIQoKCSogcG8vTWFrZWZpbGUuaW4uaW4sIHBvL1BPVEZJTEVTLmluOiBSZW1vdmVkLgoKMjAwMC0wMS0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChkZWNvZGVfZGVidWdfZmxhZ3MpOiBJZiBkZWJ1Z19mbGFnIGlzIHNldCwgZW5hYmxlIGFsbAoJZGVidWdnaW5nIGxldmVscy4KCShkZWJ1Z19mbGFnKTogUmVzdXJyZWN0IHRoaXMgZmxhZyB2YXJpYWJsZS4KCShzd2l0Y2hlcyk6IE1ha2UgLWQgZ2l2ZSB0aGUgb2xkIGJlaGF2aW9yIG9mIHR1cm5pbmcgb24gYWxsCglkZWJ1Z2dpbmcuICBDaGFuZ2UgLS1kZWJ1ZyBhbG9uZSB0byBlbWl0IGJhc2ljIGRlYnVnZ2luZyBhbmQgdGFrZQoJb3B0aW9uYWwgYXJndW1lbnRzIHRvIGV4cGFuZCBkZWJ1Z2dpbmcuCgkqIE5FV1M6IERvY3VtZW50IHRoZSBuZXcgZGVidWdnaW5nIG9wdGlvbnMuCgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uLiAgVGhpcyB0cmllcyB0bwoJZml4IGEgcmVhbCBwcm9ibGVtLS1zZWUgdGhlIGRlc2NyaXB0aW9uIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZgoJdGhpcyBmdW5jdGlvbiBiZWxvdy4gIEhvd2V2ZXIsIHRoZSBjdXJlIGlzIHdvcnNlIHRoYW4gdGhlIGRpc2Vhc2UKCWFuZCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsuCgkocmVtYWtlX2ZpbGUpOiBQdXQgdGhlIGNvZGUgZnJvbSBub19ydWxlX2Vycm9yIGJhY2sgaGVyZS4KCSh1cGRhdGVfZmlsZV8xKTogUmVtb3ZlIGNhbGwgdG8gbm9fcnVsZV9lcnJvci4KCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBSZW1vdmUgbWZpbGVfc3RhdHVzIGZpZWxkLgoKMjAwMC0wMS0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCUludGVncmF0ZSBHTlUgZ2V0dGV4dCBzdXBwb3J0LgoKCSogY29uZmlndXJlLmluOiBBZGQgQU1fR05VX0dFVFRFWFQuCgkqIE1ha2VmaWxlLmFtOiBBZGQgb3B0aW9ucyBmb3Igc2V0dGluZyBMT0NBTEVESVIsIC1JaW50bCwgZXRjLgoJKiBhY2luY2x1ZGUubTQ6IEFkZCBnZXR0ZXh0IGF1dG9jb25mIG1hY3Jvcy4KCSogYWNjb25maWcuaDogQWRkIG5ldyBnZXR0ZXh0ICNkZWZpbmVzLgoJKiBtYWtlLmg6IEluY2x1ZGUgbGliaW50bC5oLiAgTWFrZSBzdXJlIF8oKSBhbmQgTl8oKSBtYWNyb3MgYXJlCglkZWNsYXJlZC4gIE1ha2UgZ2V0dGV4dCgpIGFuIGVtcHR5IG1hY3JvIGlzIE5MUyBpcyBkaXNhYmxlZC4KCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggc3dpdGNoZXNbXSk6IENhbid0IGluaXRpYWxpemUKCXN0YXRpYyBkYXRhIHdpdGggXygpIChnZXR0ZXh0IGNhbGxzKSwgc28gdXNlIE5fKCkgdGhlcmUgdGhlbiB1c2UKCWdldHRleHQoKSBkaXJlY3RseSB3aGVuIHByaW50aW5nIHRoZSBzdHJpbmdzLgoJKiByZW1ha2UuYyAobm9fcnVsZV9lcnJvcik6IFRoZSBzdHJpbmcgY29uc3RhbnRzIGNhbid0IGJlIHN0YXRpYwoJd2hlbiBpbml0aWFsaXppbmcgXygpIG1hY3Jvcy4KCSogZmlsZS5jIChwcmludF9maWxlKTogUmVmb3JtYXQgYSBmZXcgc3RyaW5ncyB0byB3b3JrIGJldHRlciBmb3IKCXRyYW5zbGF0aW9uLgoJKiBwby9QT1RGSUxFUy5pbiwgcG8vTWFrZWZpbGUuaW4uaW46IE5ldyBmaWxlcy4gIFRha2UKCU1ha2VmaWxlLmluLmluIGZyb20gdGhlIGxhdGVzdCBHTlUgdGFyIGRpc3RyaWJ1dGlvbiwgYXMgdGhhdAoJdmVyc2lvbiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgb25lIHRoYXQgY29tZXMgd2l0aCBnZXR0ZXh0LgoJKiBORVdTOiBNZW50aW9uIGkxOG4gYWJpbGl0eS4KCjIwMDAtMDEtMjEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglJbnN0YWxsZWQgcGF0Y2hlcyBmb3IgdGhlIFZNUyBwb3J0LgoJUGF0Y2hlcyBwcm92aWRlZCBieTogSGFydG11dCBCZWNrZXIgPEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20+CgoJKiByZWFkbWUudm1zLCBhcnNjYW4uYywgY29uZmlnLmgtdm1zLCBkZWZhdWx0LmMsIGRpci5jLCBmaWxlLmM6CgkqIGltcGxpY2l0LmMsIGpvYi5jLCBtYWtlLmgsIG1ha2VmaWxlLmNvbSwgbWFrZWZpbGUudm1zLCBydWxlLmM6CgkqIHZhcmlhYmxlLmMsIHZtc2Rpci5oLCB2bXNmdW5jdGlvbnMuYywgdm1zaWZ5LmMsIGdsb2IvZ2xvYi5jOgoJKiBnbG9iL2dsb2IuaDogSW5zdGFsbGVkIHBhdGNoZXMuICBTZWUgcmVhZG1lLnZtcyBmb3IgZGV0YWlscy4KCjIwMDAtMDEtMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CgoJKiBkaXIuYyAocmVhZF9kaXJzdHJlYW0pOiBJbml0aWFsaXplIGRfdHlwZSBpZiBpdCBleGlzdHMuCgoyMDAwLTAxLTExICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJUmVzb2x2ZSBQUi94eHh4OiBkb24ndCBhdXRvbWF0aWNhbGx5IGV2YWx1YXRlIHRoZSAkKGNhbGwgLi4uKQoJZnVuY3Rpb24ncyBhcmd1bWVudHMuICBXaGlsZSB3ZSdyZSBoZXJlLCBjbGVhbiB1cCBhcmd1bWVudCBwYXNzaW5nCglwcm90b2NvbCB0byBhbHdheXMgdXNlIHNpbXBsZSBudWwtdGVybWluYXRlZCBzdHJpbmdzLCBpbnN0ZWFkIG9mCglzb21ldGltZXMgdXNpbmcgb2Zmc2V0IHBvaW50ZXJzIHRvIG1hcmsgdGhlIGVuZCBvZiBhcmd1bWVudHMuCglUaGlzIGNoYW5nZSBhbHNvIGZpeGVzIFBSLzE1MTcuCglSZXBvcnRlZCBieSBEYW1pZW4gR0lCT1UgPGRhbWllbi5naWJvdUBzdC5jb20+LgoKCSogZnVuY3Rpb24uYyAoc3RydWN0IGZ1bmN0aW9uX3RhYmxlX2VudHJ5KTogUmVtb3ZlIHRoZSBuZWdhdGl2ZQoJcmVxdWlyZWRfYXJncyBoYWNrOyBwdXQgaW4gZXhwbGljaXQgbWluIGFuZCBtYXggIyBvZiBhcmd1bWVudHMuCgkoZnVuY3Rpb25fdGFibGUpOiBBZGQgaW4gdGhlIG1heCB2YWx1ZS4gIFR1cm4gb2ZmIHRoZSBleHBhbmQgYml0Cglmb3IgZnVuY19jYWxsLgoJKGV4cGFuZF9idWlsdGluX2Z1bmN0aW9uKTogVGVzdCBhZ2FpbnN0IG1pbmltdW1fYXJncyBpbnN0ZWFkIG9mCgl0aGUgb2Jzb2xldGUgcmVxdWlyZWRfYXJncy4KCShoYW5kbGVfZnVuY3Rpb24pOiBSZXdyaXRlIHRoaXMuICBXZSBkb24ndCB0cnkgdG8gYmUgZmFuY3kgYW5kCglwYXNzIG9uZSBzdHlsZSBvZiBhcmd1bWVudHMgdG8gZXhwYW5kZWQgZnVuY3Rpb25zIGFuZCBhbm90aGVyCglzdHlsZSB0byBub24tZXhwYW5kZWQgZnVuY3Rpb25zOiBwYXNzIHBvaW50ZXJzIHRvIG51bC10ZXJtaW5hdGVkCglzdHJpbmdzIHRvIGFsbCBmdW5jdGlvbnMuCgkoZnVuY19jYWxsKTogUmV3cml0ZSB0aGlzLiAgSWYgd2UgYXJlIGludm9raW5nIGEgYnVpbHRpbiBmdW5jdGlvbgoJYW5kIGl0J3Mgc3VwcG9zZWQgdG8gaGF2ZSBpdHMgYXJndW1lbnRzIGV4cGFuZGVkLCBkbyB0aGF0IChzaW5jZQoJaXQncyBub3QgZG9uZSBieSBoYW5kbGVfZnVuY3Rpb24gZm9yICQoY2FsbCAuLi4pIGFueW1vcmUpLiAgRm9yCglub24tYnVpbHRpbnMsIGp1c3QgYWRkIHRoZSB2YXJpYWJsZXMgYXMgYmVmb3JlIGJ1dCBtYXJrIHRoZW0gYXMKCXJlY3Vyc2l2ZSBzbyB0aGV5J2xsIGJlIGV4cGFuZGVkIGxhdGVyLCBhcyBuZWVkZWQuCgkoZnVuY19pZik6IEFsbCBhcmd1bWVudHMgYXJlIHZhbmlsbGEgbnVsLXRlcm1pbmF0ZWQgc3RyaW5nczoKCXJlbW92ZSB0cmlja2VyeSB3aXRoICJhcmd2WzFdLTEiLgoJKGZ1bmNfZm9yZWFjaCk6IERpdHRvLgoKCSogZXhwYW5kLmMgKGV4cGFuZF9hcmd1bWVudCk6IElmIHRoZSBzZWNvbmQgYXJnIGlzIE5VTEwsIGV4cGFuZAoJdGhlIGVudGlyZSBmaXJzdCBhcmd1bWVudC4KCgkqIGpvYi5jIChuZXdfam9iKTogWmVybyB0aGUgY2hpbGQgc3RydWN0LiAgVGhpcyBjaGFuZ2Ugd2FzIGp1c3QKCW1hZGUgdG8ga2VlcCBzb21lIGhlYXAgY2hlY2tpbmcgc29mdHdhcmUgaGFwcHksIG5vdCBiZWNhdXNlIHRoZXJlCgl3YXMgYW4gYWN0dWFsIGJ1ZyAodGhlIGltcG9ydGFudCBtZW1vcnkgd2FzIGJlaW5nIGNsZWFyZWQgcHJvcGVybHkpLgoKMTk5OS0xMi0xNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGUpOiBQcmludCB0aGUgdmFyaWFibGUgd2l0aCArPSBpZiB0aGUKCWFwcGVuZCBmbGFnIGlzIHNldC4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogUmVtb3ZlIHRoZSBleHRyYSBjaGVjayBvZiB0aGUKCWltcGxpY2l0IGZsYWcgYWRkZWQgb24gOC8yNC8xOTk4LiAgVGhpcyBjYXVzZXMgcHJvYmxlbXMgYW5kIHRoZQoJcmVhc29uIGZvciB0aGUgY2hhbmdlIHdhcyBiZXR0ZXIgcmVzb2x2ZWQgYnkgdGhlIGNoYW5nZSBtYWRlIHRvCgljaGVja19kZXBzKCkgb24gMTk5OC0wOC0yNi4gIFRoaXMgZml4ZXMgUFIvMTQyMy4KCjE5OTktMTItMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYik6IE9uIDY0IGJpdCBSZWxpYW50VU5JWCAoNS40NCBhbmQgYWJvdmUpCglpbiBMRlMgbW9kZSwgc3RhdCgpIGlzIGFjdHVhbGx5IGEgbWFjcm8gZm9yIHN0YXQ2NCgpLiAgQXNzaWdubWVudAoJZG9lc24ndCB3b3JrIGluIHRoYXQgY2FzZS4gIFNvLCBzdGF0IGlzIGEgbWFjcm8sIG1ha2UgYSBsb2NhbAoJd3JhcHBlciBmdW5jdGlvbiB0byBpbnZva2UgaXQuCgkobG9jYWxfc3RhdCk6IFdyYXBwZXIgZnVuY3Rpb24sIGlmIG5lZWRlZC4KCVJlcG9ydGVkIGJ5IEFuZHJlaiBCb3JzZW5rb3cgPEFuZHJlai5Cb3JzZW5rb3dAbW93LnNpZW1lbnMucnU+LgoKMTk5OS0xMi0wMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogTW92ZSB0aGUgY29uc2lkZXJlZCB0ZXN0IG91dHNpZGUgdGhlCglkb3VibGUtY29sb24gbG9vcCwgX2J1dF8gbWFrZSBzdXJlIHdlIHRlc3QgdGhlIGRvdWJsZV9jb2xvbiB0YXJnZXQKCW5vdCB0aGUgImN1cnJlbnQiIHRhcmdldC4gIElmIHdlIHN0b3AgZWFybHkgYmVjYXVzZSBvbmUKCWRvdWJsZS1jb2xvbiB0YXJnZXQgaXMgcnVubmluZywgbWFyayBhbGwgdGhlIHJlc3QgY29uc2lkZXJlZCBhbmQKCXRyeSB0byBzdGFydCB0aGVpciBwcmVyZXF1aXNpdGVzIChzbyB0aGV5J3JlIG1hcmtlZCBjb25zaWRlcmVkKS4KCUZpeCBmb3IgUFIvMTQ3NiBzdWdnZXN0ZWQgYnkgVGltIE1hZ2lsbCA8dGltLm1hZ2lsbEB0ZWxvcHMuZ3RlLmNvbT4uCgoxOTk5LTExLTIyICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHdpbmRvd3MzMl9vcGVucGlwZSwgZnVuY19zaGVsbCk6IENvcnJlY3QgV2luZG93czMyCglwcm9ibGVtIHdoZXJlICQoc2hlbGwgbm9zdWNoZmlsZSkgd291bGQgaW5jb3JyZWN0bHkgZXhpdCBtYWtlLiBUaGUKCWZpeCBpcyB0byBwcmludCB0aGUgZXJyb3IgYW5kIGxldCBtYWtlIGNvbnRpbnVlLgoJUmVwb3J0ZWQgYnkgRGF2aWQgTWFzdGVyc29uIDxEYXZpZC5NYXN0ZXJzb25Aa2xhLXRlbmNvci5jb20+LgoKCSogdzMyL3N1YnByb2MvbWlzYy5jIChhcnIyZW52YmxrKTogTWVtb3J5IGxlYWsgZml4LgoKMTk5OS0xMS0yMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCVJld29yayBHTlUgbWFrZSBkZWJ1Z2dpbmcgdG8gcHJvdmlkZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIG91dHB1dC4KCgkqIE5FV1M6IG1lbnRpb24gaXQuCgkqIGRlYnVnLmg6IE5ldyBmaWxlLiAgRGVmaW5lIHZhcmlvdXMgZGVidWdnaW5nIGxldmVscyBhbmQgbWFjcm9zLgoJKiBmdW5jdGlvbi5jLCBpbXBsaWNpdC5jLCBqb2IuYywgbWFpbi5jLCBtaXNjLmMsIHJlYWQuYywgcmVtYWtlLmMKCSogcmVtb3RlLWNzdG1zLmMsIHZtc2Z1bmN0aW9ucy5jOiBSZXBsYWNlIGFsbCBjb2RlIGRlcGVuZGluZyBvbgoJZGVidWdfZmxhZyB3aXRoIGludm9jYXRpb25zIG9mIGRlYnVnZ2luZyBtYWNyb3MuCgkqIG1ha2UuaDogUmVtb3ZlIGRlYnVnX2ZsYWcgYW5kIERFQlVHUFIsIGFkZCBkYl9sZXZlbC4KCjE5OTktMTEtMTggIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogYWNpbmNsdWRlLm00IChBQ19TWVNfTEFSR0VGSUxFX0ZMQUdTKTogV29yayBhcm91bmQgYSBwcm9ibGVtCgl3aXRoIHRoZSBRTlggNC4yNSBzaGVsbCwgd2hpY2ggZG9lc24ndCBwcm9wYWdhdGUgZXhpdCBzdGF0dXMgb2YKCWZhaWxlZCBjb21tYW5kcyBpbnNpZGUgc2hlbGwgYXNzaWdubWVudHMuCgoxOTk5LTExLTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmdW5jdGlvbi5jIChmdW5jX2lmKTogRmluZCB0aGUgZW5kIG9mIHRoZSBhcmcgbGlzdCBieSB0ZXN0aW5nCgl0aGUgbmV4dCBpdGVtIGZvciBOVUxMOyBhbnkgb3RoZXIgdGVzdCBpcyBub3QgY29ycmVjdC4KCVJlcG9ydGVkIGJ5IEdyYWhhbSBSZWVkIDxncmFoYW1yQGFsZ29yaXRobWljcy5jb20+IChQUi8xNDI5KS4KCglGaXggKz0gd2hlbiB1c2VkIGluIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIGNvbnRleHQuCgoJKiB2YXJpYWJsZS5oOiBOZXcgYml0ZmllbGQgQVBQRU5EIHNldCBpZiB3ZSBoYXZlIGEgKz0KCXRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZS4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQWRkIGFuIGFyZ3VtZW50IHRvIHNwZWNpZnkKCWlmIHdlJ3JlIHRyeWluZyBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZS4gIElmIHdlIGFyZSBhbmQgaXQncyBhbgoJYXBwZW5kIHN0eWxlLCBkb24ndCBhcHBlbmQgaXQsIHJlY29yZCBpdCBhcyBub3JtYWwgcmVjdXJzaXZlLCBidXQKCXNldCB0aGUgQVBQRU5EIGZsYWcgc28gaXQnbGwgYmUgZXhwYW5kZWQgbGF0ZXIuCgkqIG1haW4uYyAoaGFuZGxlX25vbl9zd2l0Y2hfYXJndW1lbnQpOiBVc2UgbmV3Cgl0cnlfdmFyaWFibGVfZGVmaW5pdGlvbigpIHNpZ25hdHVyZS4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLHJlY29yZF90YXJnZXRfdmFyKTogRGl0dG8uCgoJKiBleHBhbmQuYyAoYWxsb2NhdGVkX3ZhcmlhYmxlX2FwcGVuZCk6IE5ldyBmdW5jdGlvbjogbGlrZQoJYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCgpLCBidXQgd2UgZXhwYW5kIHRoZSBzYW1lIHZhcmlhYmxlIG5hbWUKCWluIHRoZSBjb250ZXh0IG9mIHRoZSBgYG5leHQnJyB2YXJpYWJsZSBzZXQsIHRoZW4gd2UgYXBwZW5kIHRoaXMKCWV4cGFuZGVkIHZhbHVlLgoJKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IEludm9rZSBpdCwgaWYgdGhlIEFQUEVORCBiaXQgaXMgc2V0LgoKMTk5OS0xMS0xMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBJZiB0aGUgLk5PVFBBUkFMTEVMIHRhcmdldCBpcyBkZWZpbmVkLCB0dXJuCglvZmYgcGFyYWxsZWwgYnVpbGRzIGZvciB0aGlzIG1ha2Ugb25seSAoc3RpbGwgYWxsb3cgc3VibWFrZXMgdG8gYmUKCXJ1biBpbiBwYXJhbGxlbCkuCgkqIG1haW4uYzogTmV3IHZhcmlhYmxlLCBgYG5vdF9wYXJhbGxlbCcnLgoJKiBtYWtlLmg6IEFkZCBhbiBleHRlcm4gZm9yIGl0LgoJKiBqb2IuYyAobmV3X2pvYik6IFRlc3QgTk9UX1BBUkFMTEVMIGFzIHdlbGwgYXMgSk9CX1NMT1RTLgoJKiBORVdTOiBBZGQgaW5mbyBvbiAuTk9UUEFSQUxMRUwuCgkqIG1ha2UudGV4aW5mbyAoU3BlY2lhbCBUYXJnZXRzKTogRG9jdW1lbnQgaXQuCgoJKiBjb25maWd1cmUuaW4gKEdMT0JESVIpOiBTZXQgdG8gImdsb2IiIGlmIHdlIG5lZWQgdG8gYnVpbGQgdGhlCglnbG9iIGxpYnJhcnkuCgkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogVXNlIHRoZSBHTE9CRElSIHZhcmlhYmxlIGluc3RlYWQgb2YKCSJnbG9iIiBzbyB3ZSBkb24ndCB0cnkgdG8gYnVpbGQgZ2xvYiBpZiB3ZSBkb24ndCBuZWVkIHRvIChpZiB3ZQoJaGF2ZSBHTElCQyBnbG9iKS4gIFJlcG9ydGVkIGJ5IExhcnMgSGVja2luZyA8bGhlY2tpbmdAbm1yYy51Y2MuaWU+LgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgcHV0ICIqKioiIGluIHRoZSBjbG9jayBza2V3IHdhcm5pbmcKCW1lc3NhZ2UuICBSZXBvcnRlZCBieSBrYXJsQGdudS5vcmcuCgoJKiBtYWtlLmg6IFJlbW92ZSB1bm5lZWRlZCBzaWduYWwgc2V0dXAuCgoJKiBzaWduYW1lLmM6IFJlbW92ZSBleHRyYW5lb3VzICNpbmNsdWRlczsgc29tZSB2ZXJzaW9ucyBvZiBVbHRyaXgKCWRvbid0IHByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zIGFuZCBpdCBjYXVzZXMgY29tcGlsZQoJZXJyb3JzLiAgUmVwb3J0ZWQgYnkgU2ltb24gQnVyZ2UgPHNpbW9uYkB0aGlzdGxlZG93bi5jb20uYXU+LgoKMTk5OS0xMC0xNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChxdW90ZV9mb3JfZW52KTogUmVuYW1lIGZyb20gcXVvdGVfYXNfd29yZCgpLgoKCSogbWFrZS5oLCAqLmM6IFByZWZlciBzdHJjaHIoKSBhbmQgc3RycmNocigpIGluIHRoZSBjb2RlCglyYXRoZXIgdGhhbiBpbmRleCgpIGFuZCByaW5kZXgoKS4gIERlZmluZSBzdHJjaHIvc3RycmNociBpbiB0ZXJtcwoJb2YgaW5kZXgvcmluZGV4IGlmIHRoZSBmb3JtZXIgYXJlbid0IHN1cHBvcnRlZC4KCgkqIGRlZmF1bHQuYyAoQ0hFQ0tPVVQsdik6IFJlcGxhY2UgdGhlIGZhbmN5LCBjb21wbGljYXRlZAoJcGF0c3Vic3QvZmlsdGVyIGV4cHJlc3Npb24gd2l0aCBhIHNpbXBsZSAkKGlmIC4uLikgZXhwcmVzc2lvbi4KCgkqIG1haW4uYyAocHJpbnRfdXNhZ2UpOiBBZGQgdGhlIGJ1ZyByZXBvcnRpbmcgbWFpbGluZyBhZGRyZXNzIHRvCgl0aGUgLS1oZWxwIG91dHB1dCwgYXMgcGVyIHRoZSBHTlUgY29kaW5nIHN0YW5kYXJkcy4KCVJlcG9ydGVkIGJ5IFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+LgoKCSogUkVBRE1FLmN1c3RvbXM6IEluc3RhbGxlZCBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIEN1c3RvbXMtaXplZAoJR05VIG1ha2UgYW5kIHNldHVpZCByb290LCBjb2xsZWN0ZWQgYnkgVGVkIFN0ZXJuIDxzdGVybkB0ZXJhLmNvbT4uCgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IFBSLzEzOTQ6IE1hcmsgdGhlIGVuZCBvZiB0aGUgbmV4dAoJdG9rZW4gaW4gdGhlIE1BS0VGSUxFUyB2YWx1ZSBzdHJpbmcgX2JlZm9yZV8gd2UgZHVwIGl0LgoKMTk5OS0xMC0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluIChtYWtlX2N2X3N5c19nbnVfZ2xvYik6IFdlIHVzZWQgdG8gYWRkIHRoZSAtSWdsb2IKCWZsYWcgdG8gQ1BQRkxBR1MsIGJ1dCB0aGF0IGxvc2VzIGlmIHRoZSB1c2VyIHNwZWNpZmllcyBoaXMgb3duCglDUFBGTEFHUzsgdGhpcyBvbmUgZ2V0cyBhZGRlZCBfYWZ0ZXJfIGhpcyBhbmQgaWYgaGUgaGFwcGVucyB0bwoJaGF2ZSBhbiBvbGQgb3IgYnJva2VuIGdsb2IuaC0tYm9vbS4gIEluc3RlYWQsIHB1dCBpdCBpbiBHTE9CSU5DCglhbmQgU1VCU1QgaXQuCgoJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGQgQEdMT0JJTkNAIHRvIHRoZSBJTkNMVURFUyBtYWNybzsKCXRoZXNlIHRoaW5ncyBnZXQgb24gdGhlIGNvbXBpbGUgbGluZSB3ZWxsIGJlZm9yZSB0aGUgdXNlcidzCglDUFBGTEFHUy4KCjE5OTktMTAtMTIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IElmIHdlIGdldCBoZXJlIGFuZCAtbiBpcyBzZXQsCglzZWUgaWYgYWxsIHRoZSBjb21tYW5kIGxpbmVzIGFyZSBtYXJrZWQgcmVjdXJzaXZlLiAgSWYgc28sIHRoZW4gd2UKCXJhbiBldmVyeSBjb21tYW5kIHRoZXJlIGlzLCBzbyBjaGVjayB0aGUgbXRpbWUgb24gdGhpcyBmaWxlIGp1c3QKCWxpa2Ugd2Ugd291bGQgbm9ybWFsbHkuICBJZiBub3QsIHdlIGFzc3VtZSB0aGUgY29tbWFuZCB3ZSBkaWRuJ3QKCXJ1biB3b3VsZCB1cGRhdGVzIHRoZSB0YXJnZXQgYW5kIHNldCBtdGltZSBvZiB0aGUgdGFyZ2V0IHRvICJ2ZXJ5IG5ldyIuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBVcGRhdGUgbGluZXNfZmxhZ3MgaW4gdGhlIGZpbGUncyBjbWRzCglzdHJ1Y3R1cmUgd2l0aCBhbnkgcGVyLWxpbmUgdG9rZW5zIHdlIGZvdW5kIChgQCcsIGAtJywgYCsnKS4KCjE5OTktMTAtMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKGluaXRpYWxpemVfZmlsZV92YXJpYWJsZXMpOiBBbHdheXMgcmVjdXJzZSB0bwoJaW5pdGlhbGl6ZSB0aGUgcGFyZW50J3MgZmlsZSB2YXJpYWJsZXM6IHRoZSBwYXJlbnQgbWlnaHQgbm90IGhhdmUKCWFueSBydWxlcyB0byBydW4gc28gaXQgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUKCXRoaXMtLXdlIG5lZWQgdGhpcyB0byBzZXQgdXAgdGhlIGNoYWluIHByb3Blcmx5IGZvcgoJdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlcy4KCjE5OTktMDktMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogbWFpbi5jIChxdW90ZV9hc193b3JkKTogQWx3YXlzIHF1b3RlIGZvciBkZWNvZGVfZW52X3N3aXRjaGVzCiAgICAgICAgaW5zdGVhZCBvZiBmb3IgdGhlIHNoZWxsLCBzbyB0aGF0IGFyZ3VtZW50cyB3aXRoIHN0cmFuZ2UKICAgICAgICBjaGFyYWN0ZXJzIGFyZSBhcmUgcGFzc2VkIHRvIHN1Ym1ha2VzIGNvcnJlY3RseS4gIFJlbW92ZQogICAgICAgIGRvdWJsZV9kb2xsYXJzIGFyZzsgd2UgYWx3YXlzIGRvdWJsZSBkb2xsYXJzIG5vdy4gIEFsbCBjYWxsZXJzCiAgICAgICAgY2hhbmdlZC4KICAgICAgICAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IERvbid0IHJ1biBvZmYgdGhlIGVuZCBvZiBhbiBlbnZpcm9ubWVudAogICAgICAgIHZhcmlhYmxlIHdob3NlIGNvbnRlbnRzIGVuZHMgaW4gYSB1bmVzY2FwZWQgYmFja3NsYXNoLgoKMTk5OS0wOS0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29tbWFuZHMuYywgZnVuY3Rpb24uYywgam9iLmMsIHJlYWQuYzogQ2FzdCBhcmd1bWVudHMgdG8KCWN0eXBlLmggZnVuY3Rpb25zL21hY3JvcyB0byBfdW5zaWduZWRfIGNoYXIgZm9yIHBvcnRhYmlsaXR5LgoKCSogcmVtYWtlLmMsIGZ1bmN0aW9uLmM6IENvbXBpbGVyIHdhcm5pbmcgZml4ZXM6IHRoZSBzZWNvbmQKCWFyZ3VtZW50IHRvIGZpbmRfbmV4dF90b2tlbigpIHNob3VsZCBiZSBhbiBfdW5zaWduZWRfIGludCouCglSZXBvcnRlZCBieSBIYW4tV2VuIE5pZW5odXlzIDxoYW53ZW5AY3MudXUubmw+LgoKMTk5OS0wOS0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc4LjEgcmVsZWFzZWQuCgoJKiBtYWtlLnRleGluZm86IFVwZGF0ZSB2ZXJzaW9uL2RhdGUgc3RhbXAuCgoJKiBtYWluLmMgKG1haW4pOiBBcmdoLiAgRm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgY2xvc2luZyBfYWxsXyB0aGUKCWpvYnNlcnZlciBwaXBlcyBiZWZvcmUgd2UgcmUtZXhlYydkIGR1ZSB0byBjaGFuZ2VkIG1ha2VmaWxlcy4KCVRoaXMgbWVhbnMgdGhhdCBhbnkgcmUtZXhlYyBnb3QgYSAiam9ic2VydmVyIHVuYXZhaWxhYmxlIiBlcnJvciA6LS8uCglJIGNhbid0IGJlbGlldmUgd2UgZGlkbid0IG5vdGljZSB0aGlzIGJlZm9yZS4KCjE5OTktMDktMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43OCByZWxlYXNlZC4KCgkqIG1haW4uYyAobWFpbik6IE9ubHkgZmFpbCBvbiBtdWx0aXBsZSAtLWpvYnNlcnZlci1mZHMgb3B0aW9ucyBpZgoJdGhleSBhcmVuJ3QgYWxsIHRoZSBzYW1lLiAgU29tZSBtYWtlZmlsZXMgdXNlIHRoaW5ncyBsaWtlCgkkKE1BS0UpICQoTUZMQUdTKSB3aGljaCB3aWxsIGNhdXNlIG11bHRpcGxlLCBpZGVudGljYWwgY29waWVzIG9mCgktLWpvYnNlcnZlci1mZHMgdG8gc2hvdyB1cC4KCjE5OTktMDktMTYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFplcm8gb3V0IEZMQUdTVFJJTkcgdG8gYXZvaWQKCXVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdoZW4gY2hlY2tpbmcgKnAgIT0gJy0nIGluIHRoZSBsb29wLgoKMTk5OS0wOS0xNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3Ljk3IHJlbGVhc2VkLgoKCSogY29uZmlndXJlLmluIChNQUtFX0hPU1QpOiBBQ19TVUJTVCB0aGlzIHNvIGl0IHdpbGwgZ28gaW50byB0aGUKCW1ha2VmaWxlLgoJKiBNYWtlZmlsZS5hbSAoY2hlY2stbG9jYWwpOiBQcmludCBhIHN1Y2Nlc3MgYmFubmVyIGlmIHRoZSBjaGVjawoJc3VjY2VlZHMuCgkoY2hlY2stcmVncmVzc2lvbik6IEEgYml0IG9mIGZpbmUtdHVuaW5nLgoKMTk5OS0wOS0xNSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIFJFQURNRS5ET1MudGVtcGxhdGU6IERvY3VtZW50IHJlcXVpcmVtZW50cyBmb3IgdGhlIHRlc3Qgc3VpdGUuCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZTogVXBkYXRlcyB0byBhbGxvdyB0aGUgdGVzdCBzdWl0ZSB0byBydW4KCWZyb20gIm1ha2UgY2hlY2siLgoKCSogbWFpbi5jIChtYWluKTogSGFuZGxlIGl0IGlmIGFyZ3ZbMF0gaXNuJ3QgYW4gYWJzb2x1dGUgcGF0aC4KCjE5OTktMDktMTMgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45NiByZWxlYXNlZC4KCgkqIE1ha2VmaWxlLmFtIChsb2FkYXZnKTogVXNlIENQUEZMQUdTLCBldGMuIHRvIG1ha2Ugc3VyZSB3ZSBnZXQKCWFsbCB0aGUgcmlnaHQgI2RlZmluZXMgdG8gY29tcGlsZS4KCShjaGVjay1yZWdyZXNzaW9uKTogTG9vayBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBpbiB0aGUgbWFrZQoJcGFja2FnZSBpdHNlbGYuICBJZiB3ZSdyZSBidWlsZGluZyByZW1vdGVseSwgdXNlIHN5bWxpbmtzIHRvIG1ha2UKCWEgbG9jYWwgY29weS4KCShkaXN0LWhvb2spOiBQdXQgdGhlIHRlc3Qgc3VpdGUgaW50byB0aGUgdGFyIGZpbGUuCgoJKiBjb25maWd1cmUuaW46IExvb2sgZm9yIHBlcmwgZm9yIHRoZSB0ZXN0IHN1aXRlLgoKMTk5OS0wOS0xMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgogICAgICAgICogYWNpbmNsdWRlLm00IChBQ19TWVNfTEFSR0VGSUxFX0ZMQUdTKTogSWYgb24gSFAtVVggMTAuMjAgb3IKICAgICAgICBsYXRlciwgYW5kIHVzaW5nIEdDQywgZGVmaW5lIF9fU1REQ19FWFRfXzsgdGhpcyB3b3JrcyBhcm91bmQgYQogICAgICAgIGJ1ZyBpbiBHQ0MgMi45NS4xLgoKMTk5OS0wOS0wOCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogVWdoLiAgR0xJQkMncyBjb25maWd1cmUgdHJpZXMgdG8gY2hlY2sKCW1ha2UgdmVyc2lvbiBzdHJpbmdzIGFuZCBpcyB0b28gYWdncmVzc2l2ZSB3aXRoIHRoZWlyIG1hdGNoaW5nCglleHByZXNzaW9ucy4gIEkndmUgc3RydWNrIGEgZGVhbCB3aXRoIHRoZW0gdG8gbGVhdmUgdGhlIHZlcnNpb24KCW91dHB1dCBhcy1pcyBmb3IgMy43OCwgYW5kIHRoZXknbGwgY2hhbmdlIHRoZWlyIGNvbmZpZ3VyZSBjaGVja3MKCXNvIHRoYXQgSSBjYW4gY2hhbmdlIHRoaXMgYmFjayBpbiB0aGUgZnV0dXJlLgoKMTk5OS0wOS0wNyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKSBbX19NU0RPU19fXTogQWRkICJlY2hvIgoJYW5kICJ1bnNldCIgdG8gdGhlIGxpc3Qgb2YgYnVpbHRpbiBzaGVsbCBjb21tYW5kcy4KCgkqIGNvbmZpZ2guRE9TLnRlbXBsYXRlIChNQUtFX0hPU1QpOiBEZWZpbmUgdG8gImkzODYtcGMtbXNkb3NkamdwcCIKCXdoaWNoIGlzIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgREpHUFAgaG9zdC4KCjE5OTktMDktMDUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45NSByZWxlYXNlZC4KCgkqIG1ha2UudGV4aW5mbyAoTWFrZSBFcnJvcnMpOiBEb2N1bWVudCBzb21lIG5ldyBqb2JzZXJ2ZXIgZXJyb3IKCW1lc3NhZ2VzLgoKMTk5OS0wOS0wNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIG1ha2UudGV4aW5mbyAoTWFrZSBFcnJvcnMpOiBEb2N1bWVudCB0aGUgaGludCBhYm91dCA4IHNwYWNlcwoJaW5zdGVhZCBvZiBhIFRBQi4KCShDYWxsIEZ1bmN0aW9uLCBRdWljayBSZWZlcmVuY2UpOiBVc2UgQGNvZGV7JCgxKX0sIG5vdCBAdmFyLgoKCSogbWFpbi5jIChtYWluKSBbX19NU0RPU19fXTogU2F5ICJvbiB0aGlzIHBsYXRmb3JtIiBpbnN0ZWFkIG9mICJvbgoJTVMtRE9TIiwgc2luY2UgdGhlIE1TRE9TIHZlcnNpb24gY291bGQgcnVuIG9uIFdpbmRvd3MuCgoxOTk5LTA5LTAzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBBbHdheXMgc2V0IG10aW1lX2JlZm9yZV91cGRhdGUKCWlmIGl0J3Mgbm90IGJlZW4gc2V0LCBub3QganVzdCBpZiB3ZSByYW4gc29tZSBydWxlcy4gIE90aGVyd2lzZSB3ZQoJbWF5IGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgYSB0YXJnZXQncyBwcmVyZXF1aXNpdGUgd2FzIHJlYnVpbHQgYnV0Cglub3QgY2hhbmdlZCwgc28gdGhpcyB0YXJnZXQncyBydWxlcyB3ZXJlbid0IHJ1biwgdGhlbgoJdXBkYXRlX2dvYWxfY2hhaW4oKSBzZWVzIG10aW1lX2JlZm9yZV91cGRhdGUgIT0gbGFzdF9tdGltZSBhbmQKCXRoaW5rcyB0aGF0IHRoZSB0b3AtbGV2ZWwgdGFyZ2V0IGNoYW5nZWQgd2hlbiBpdCByZWFsbHkgZGlkbid0LgoJVGhpcyBjYW4gY2F1c2UgYW4gaW5maW5pdGUgbG9vcCB3aGVuIHJlbWFraW5nIG1ha2VmaWxlcy4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IElmIHdlIGdldCBiYWNrIHRvIHRoZSB0b3AgYW5kIHdlIGRvbid0IGtub3cKCXdoYXQgdGhlIGdvYWwncyBsYXN0X210aW1lIHdhcywgZmluZCBpdCBub3cuICBXZSBuZWVkIHRvIGtub3cgc28KCXdlIGNhbiBjb21wYXJlIGl0IHRvIG10aW1lX2JlZm9yZV91cGRhdGUgbGF0ZXIgKHRoaXMgaXMgb25seQoJY3J1Y2lhbCB3aGVuIHJlbWFraW5nIG1ha2VmaWxlcy0tc2hvdWxkIHdlIG9ubHkgZG8gaXQgdGhlbj8pCgoxOTk5LTA5LTAyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiAib3ZlcnJpZGUiIGFwcGVhcnMgYXMgdGhlIGZpcnN0CglwcmVyZXF1aXNpdGUsIGxvb2sgZnVydGhlciB0byBlbnN1cmUgdGhpcyBpcyByZWFsbHkgYQoJdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIGRlZmluaXRpb24sIGFuZCBub3QganVzdCBzb21lCglwcmVyZXF1aXNpdGUgbmFtZWQgIm92ZXJyaWRlIi4KCjE5OTktMDktMDEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGZ1bmN0aW9uLmMgKElTX1BBVEhTRVApIFtXSU5ET1dTMzJdOiBBbGxvdyBiYWNrc2xhc2ggc2VwYXJhdG9ycwoJZm9yIFczMiBwbGF0Zm9ybXMuCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKSBbV0lORE9XUzMyXTogQWxsb3cgYmFja3NsYXNoIHNlcGFyYXRvcnMKCWZvciBXMzIgcGxhdGZvcm1zLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCkgW1dJTkRPV1MzMl06IEFsbG93IGJhY2tzbGFzaAoJc2VwYXJhdG9ycyBmb3IgVzMyIHBsYXRmb3Jtcy4KCgkqIGNvbmZpZ3VyZS5pbiAoTUFLRV9IT1NUKTogRGVmaW5lIGl0IHRvIGJlIHRoZSBjYW5vbmljYWwgYnVpbGQKCWhvc3QgaW5mbywgbm93IHRoYXQgd2UgbmVlZCBBQ19DQU5PTklDQUxfSE9TVCBhbnl3YXkgKGZvciBsYXJnZQoJZmlsZSBzdXBwb3J0KS4KCSogdmVyc2lvbi5jIChtYWtlX2hvc3QpOiBEZWZpbmUgYSB2YXJpYWJsZSB0byBNQUtFX0hPU1Qgc28gd2UncmUKCXN1cmUgdG8gZ2V0IGl0IGZyb20gdGhlIGxvY2FsIGNvbmZpZy5oLgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBVc2UgaXQgaW4gdGhlIHZlcnNpb24gaW5mb3JtYXRpb24uCgkqIGNvbmZpZy5hbWkudGVtcGxhdGU6IEFkZCBNQUtFX0hPU1QuCgkqIGNvbmZpZ2guZG9zLnRlbXBsYXRlOiBEaXR0by4KCSogY29uZmlnLmguVzMyLnRlbXBsYXRlOiBEaXR0by4KCSogY29uZmlnLmgtdm1zLnRlbXBsYXRlOiBEaXR0by4KCgkqIG1haW4uYyAobWFpbik6IENsb3NlIHRoZSBqb2JzZXJ2ZXIgZmlsZSBkZXNjcmlwdG9ycyBpZiB3ZSBuZWVkCgl0byByZS1leGVjIG91cnNlbHZlcy4KCUFsc28gcHJpbnQgbW9yZSByZWFzb25hYmxlIGVycm9yIGlmIHVzZXJzIGZvcmNlIC1qTiBmb3Igc3VibWFrZXMuCglUaGlzIG1heSBiZSBjb21tb24gZm9yIGEgd2hpbGUgdW50aWwgcGVvcGxlIHVzZSB0aGUgam9ic2VydmVyCglmZWF0dXJlLiAgSWYgaXQgaGFwcGVucywgd2UgaWdub3JlIHRoZSBleGlzdGluZyBqb2JzZXJ2ZXIgc3R1ZmYKCWFuZCB1c2Ugd2hhdGV2ZXIgdGhleSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBGaXhlZCBhIGxvbmctc3RhbmRpbmcgYnVnOiBpZiBhIGxvbmcgbmFtZQoJb25seSBvcHRpb24gY29tZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBzaW5nbGUgbGV0dGVyIG9wdGlvbiB3aXRoIG5vCglhcmd1bWVudCwgdGhlbiB0aGUgb3B0aW9uIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCBpbmNvcnJlY3RseS4gIEZvcgoJZXhhbXBsZSwgd2l0aCAtdyBhbmQgLS1qb2JzZXJ2ZXItZmRzIHlvdSBnZXQgIi13LWpvYnNlcnZlci1mZHMuLi4iCglpbnN0ZWFkIG9mICItdyAtLWpvYnNlcnZlci1mZHMuLi4iOyBhZGQgaW4gYW4gZXh0cmEgIiAtIi4KCgkqIG1ha2UudGV4aW5mbyAoUGhvbnkgVGFyZ2V0cyk6IEFkZCBhbm90aGVyIGV4YW1wbGUgb2YgdXNpbmcKCS5QSE9OWSB3aXRoIHN1YmRpcmVjdG9yaWVzL3JlY3Vyc2l2ZSBtYWtlLgoKMTk5OS0wOC0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogUkVBRE1FLlczMi50ZW1wbGF0ZTogUmVuYW1lZCBmcm9tIFJFQURNRS5XMzIgc28gaXQncwoJYXV0b2dlbmVyYXRlZCBkdXJpbmcgdGhlIGRpc3QuICBBIGZldyBtaW5vciBtb2RpZmljYXRpb25zLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Iga3N0YXRfb3BlbiBiZWZvcmUgQUNfRlVOQ19HRVRMT0FEQVZHCglzaW5jZSB0aGUgbGF0dGVyIG5lZWRzIHRvIGtub3cgd2hldGhlciB0aGUgZm9ybWVyIGV4aXN0cyB0byBnaXZlCglhbiBhY2N1cmF0ZSByZXN1bHQuCgoxOTk5LTA4LTI2ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIE5NYWtlZmlsZSBbV0lORE9XUzMyXTogTm93IG1vcmUgcm9idXN0LiBJZiB5b3UgY2hhbmdlIGEgZmlsZQoJdW5kZXIgdzMyL3N1YnByb2MsIHRoZSBtYWtlLmV4ZSB3aWxsIGJlIHJlbGlua2VkLiBBbHNvIGFkZGVkIHNvbWUKCXRlc3RzIHRvIG1ha2Ugc3VyZSBlcmFzZSBjb21tYW5kcyB3b24ndCBmYWlsIHdoZW4gZXhlY3V0ZWQgaW4gYQoJcHJpc3RpbmUgYnVpbGQgZW52aXJvbm1lbnQuCgoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jIFtXSU5ET1dTMzJdOiBBZGRlZCBzdXBwb3J0IGZvcgoJSEFWRV9DWUdXSU5fU0hFTEwuIElmIHlvdSBhcmUgdXNpbmcgdGhlIEN5Z3dpbiBCMjAuMSByZWxlYXNlLCBpdAoJaXMgbm93IHBvc3NpYmxlIHRvIGhhdmUgaGF2ZSBuYXRpdmUgc3VwcG9ydCBmb3IgdGhpcyBzaGVsbCB3aXRob3V0CgloYXZpbmcgdG8gcmVseSBvbiBrbHV0enkgQkFUQ0hfTU9ERV9PTkxZX1NIRUxMLgoKCSogY29uZmlnLmguVzMyIFtXSU5ET1dTMzJdOiBBZGRlZCBIQVZFX0NZR1dJTl9TSEVMTCBtYWNybyB3aGljaAoJdXNlcnMgY2FuIGRlZmluZSBpZiB0aGV5IHdhbnQgdG8gYnVpbGQgbWFrZSB0byB1c2UgdGhpcyBzaGVsbC4KCgkqIFJFQURNRS5XMzIgW1dJTkRPV1MzMl06IEFkZGVkIGluZm9ybWF0b24gYWJvdXQKCUhBVkVfQ1lHV0lOX1NIRUxMLiBDbGVhbmVkIHVwIHRleHQgYSBiaXQgdG8gbWFrZSBpdCBtb3JlIGN1cnJlbnQuCgoxOTk5LTA4LTI2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCglTdXBwb3J0IGxhcmdlIGZpbGVzIGluIEFJWCwgSFAtVVgsIGFuZCBJUklYLgoKCSogYWNpbmNsdWRlLm00IChBQ19MRlMpOiBSZW1vdmUuICBTdXBlcnNlZGVkIGJ5IEFDX1NZU19MQVJHRUZJTEUuCgkoQUNfU1lTX0xBUkdFRklMRV9GTEFHUywgQUNfU1lTX0xBUkdFRklMRV9TUEFDRV9BUFBFTkQsCglBQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFLCBBQ19TWVNfTEFSR0VGSUxFKTogTmV3IG1hY3Jvcy4KCShqbV9BQ19UWVBFX1VJTlRNQVhfVCk6IENoZWNrIGZvciBidXN0ZWQgY29tcGlsZXJzIHRoYXQgY2FuJ3QKCXNoaWZ0IG9yIGRpdmlkZSB1bnNpZ25lZCBsb25nIGxvbmcuCgkoQU1fUFJPR19DQ19TVERDKTogTmV3IG1hY3JvOyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kIG9mIGEgYnVnIGluCglhdXRvbWFrZSAxLjQuCgoJKiBjb25maWd1cmUuaW4gKEFDX0NBTk9OSUNBTF9IT1NUKTogQWRkOyByZXF1aXJlZCBieSBuZXcKCUFDX1NZU19MQVJHRUZJTEUuCgkoQUNfU1lTX0xBUkdFRklMRSk6IFJlbmFtZWQgZnJvbSBBQ19MRlMuCgkoQU1fUFJPR19DQ19TVERDKTogQWRkLgoKCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBOZXcgZmlsZXMsIG5lZWRlZCBmb3IgQUNfQ0FOT05JQ0FMX0hPU1QuCgoxOTk5LTA4LTI1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIG1ha2UuaCAoQ0hBUl9NQVgpOiBOZXcgbWFjcm8uCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogYyBpcyBub3cgaW50LAoJc28gdGhhdCBpdCBjYW4gc3RvcmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiBDSEFSX01BWC4KCShzd2l0Y2hlcyk6IFJlcGxhY2Ugc21hbGwgbnVtYmVycyBOIHdpdGggQ0hBUl9NQVgrTi0xLAoJdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVyIHNldHMuCgkoc2hvcnRfb3B0aW9uKTogTmV3IG1hY3JvLgoJKGluaXRfc3dpdGNoZXMsIHByaW50X3VzYWdlLCBkZWZpbmVfbWFrZWZsYWdzKTogVXNlIGl0IGluc3RlYWQgb2YKCWlzYWxudW0uCgoxOTk5LTA4LTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcuOTQgcmVsZWFzZWQuCgoJKiBtYWluLmMgKG1haW4pIFtfX01TRE9TX19dOiBJZiB0aGUgdXNlciB1c2VzIC1qLCB3YXJuIHRoYXQgaXQncwoJbm90IHN1cHBvcnRlZCBhbmQgcmVzZXQgaXQuCgoJKiBtYWtlLmggKElTRElHSVQpOiBPYnRhaW5lZCB0aGlzIGZyb20gdGhlIHRleHR1dGlscyBkaXN0cmlidXRpb24uCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogVXNlIGl0LgoJKiBmdW5jdGlvbi5jIChpc19udW1lcmljKTogVXNlIGl0LgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBTdG9yZSB0aGUgc3dpdGNoIGNoYXIgaW4gYW4KCXVuc2lnbmVkIGNoYXIgdG8gc2h1dCB1cCBHQ0MgYWJvdXQgdXNpbmcgaXQgd2l0aCBjdHlwZS5oIG1hY3Jvcy4KCUJlc2lkZXMsIGl0IF9pc18gYWx3YXlzIHVuc2lnbmVkLgoKMTk5OS0wOC0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvOiBDaGFuZ2UgImRlcGVuZGVuY3kiIHRvICJwcmVyZXF1aXNpdGUiIGFuZAoJImRlcGVuZGVuY2llcyIgdG8gInByZXJlcXVpc2l0ZXMiLiAgVmFyaW91cyBvdGhlciBjbGVhbnVwcyByZWxhdGVkCgl0byB0aGUgdGVybWlub2xvZ3kgY2hhbmdlLgoJKiBmaWxlLmM6IENoYW5nZSBkZWJ1Z2dpbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHRvIHVzZQoJInByZXJlcXVpc2l0ZSIgaW5zdGVhZCBvZiAiZGVwZW5kZW5jeSIuCgkqIGltcGxpY2l0LmM6IERpdHRvLgoJKiByZW1ha2UuYzogRGl0dG8uCgkqIE5FV1M6IERvY3VtZW50IGl0LgoKMTk5OS0wOC0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogTW92ZSB0aGUgY29uc2lkZXJlZCBjaGVjayBpbnRvIHRoZQoJZG91YmxlLWNvbG9uIHJ1bGUgbG9vcCwgc28gd2UgY29uc2lkZXIgZG91YmxlLWNvbG9uIHJ1bGVzCglpbmRpdmlkdWFsbHkgKG90aGVyd2lzZSBhZnRlciB0aGUgZmlyc3QgaXMgcHJ1bmVkLCB0aGUgcmVzdCB3b24ndAoJZ2V0IHJ1bikuCgoJKiBSRUFETUUudGVtcGxhdGU6IE1pbm9yIGNoYW5nZXMuCgoJUmVtb3ZlIHRoZSBkZWJ1Z2dpbmcgZmVhdHVyZXMgb2YgdGhlIGpvYnNlcnZlciwgc28gaXQgbm8gbG9uZ2VyCgl3cml0ZXMgZGlzdGluY3QgdG9rZW5zIHRvIHRoZSBwaXBlLiAgVGh1cywgd2UgZG9uJ3QgbmVlZCB0byBzdG9yZQoJdGhlIHRva2VuIHdlIGdldC4gIEEgc2lkZSBlZmZlY3Qgb2YgdGhpcyBpcyB0byByZW1vdmUgYSBwb3RlbnRpYWwKCSJ1bmF2YWlsYWJsZSB0b2tlbiIgc2l0dWF0aW9uOiBtYWtlLTEgaW52b2tlcyBtYWtlLTIgd2l0aCBpdHMKCXNwZWNpYWwgdG9rZW4gYW5kIG1ha2UtMyB3aXRoIGEgbm9ybWFsIHRva2VuOyBtYWtlLTIgY29tcGxldGVzLgoJTm93IHdlJ3JlIHdhaXRpbmcgZm9yIG1ha2UtMyBidXQgdXNpbmcgMiB0b2tlbnM7IG91ciBzcGVjaWFsIHRva2VuCglpcyBpZGxlLiAgSW4gdGhlIG5ldyB2ZXJzaW9uIHdlIGRvbid0IGhhdmUgc3BlY2lhbCB0b2tlbnMgcGVyIHNlLAoJd2UgbWVyZWx5IGRlY2lkZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBjaGlsZCBvciBub3QuICBJZiB3ZSBkb24ndCwKCXdlIGRvbid0IG5lZWQgYSB0b2tlbi4gIElmIHdlIGRvLCB3ZSBoYXZlIHRvIGdldCBvbmUgdG8gcnVuIHRoZQoJbmV4dCBjaGlsZC4gIFNpbWlsYXIgZm9yIHB1dHRpbmcgdG9rZW5zIGJhY2s6IGlmIHdlJ3JlIGNsZWFuaW5nIHVwCgl0aGUgbGFzdCBjaGlsZCwgd2UgZG9uJ3QgcHV0IGEgdG9rZW4gYmFjay4gIE90aGVyd2lzZSwgd2UgZG8uCgoJKiBtYWluLmM6IEFkZCBhIG5ldywgaW50ZXJuYWwgZmxhZyAtLWpvYnNlcnZlci1mZHMgaW5zdGVhZCBvZgoJb3ZlcmxvYWRpbmcgdGhlIG1lYW5pbmcgb2YgLWouICBSZW1vdmUgam9iX3Nsb3RzX3N0ciBhbmQgYWRkIHRoZQoJc3RyaW5nbGlzdCBqb2JzZXJ2ZXJfZmRzLgoJKHN0cnVjdCBjb21tYW5kX3N3aXRjaCk6IFdlIGRvbid0IG5lZWQgdGhlIGludF9zdHJpbmcgdHlwZS4KCShzd2l0Y2hlc1tdKTogQWRkIGEgbmV3IG9wdGlvbiBmb3IgLS1qb2JzZXJ2ZXItZmRzIGFuZCByZW1vdmUKCWNvbmRpdGlvbnMgYXJvdW5kIC1qLiAgTWFrZSB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBmb3JtZXIgMCBzbyBpdAoJZG9lc24ndCBwcmludCBkdXJpbmcgIm1ha2UgLS1oZWxwIi4KCShtYWluKTogUmV3b3JrIGpvYnNlcnZlciBwYXJzaW5nLiAgSWYgd2UgZ290IC0tam9ic2VydmVyLWZkcwoJbWFrZSBzdXJlIGl0J3MgdmFsaWQuICBXZSBvbmx5IGdldCBvbmUgYW5kIGpvYl9zbG90cyBtdXN0IGJlIDAuCglJZiB3ZSdyZSB0aGUgdG9wbGV2ZWwgbWFrZSAoLWpOIHdpdGhvdXQgLS1qb2JzZXJ2ZXItZmRzKSBjcmVhdGUKCXRoZSBwaXBlIGFuZCB3cml0ZSBnZW5lcmljIHRva2Vucy4KCUNyZWF0ZSB0aGUgc3RyaW5nbGlzdCBzdHJ1Y3QgZm9yIHRoZSBzdWJtYWtlcy4KCUNsZWFuIHVwIHRoZSBzdHJpbmdsaXN0IHdoZXJlIG5lY2Vzc2FyeS4KCShpbml0X3N3aXRjaGVzKTogUmVtb3ZlIGludF9zdHJpbmcgaGFuZGxpbmcuCgkocHJpbnRfdXNhZ2UpOiBEb24ndCBwcmludCBpbnRlcm5hbCBmbGFncyAoZGVzY3JpcHRpb24gcHRyIGlzIDApLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFJlbW92ZSBpbnRfc3RyaW5nIGhhbmRsaW5nLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBSZW1vdmUgaW50X3N0cmluZyBoYW5kbGluZy4KCgkqIGpvYi5jOiBSZW1vdmUgbXlfam9iX3Rva2VuIGZsYWcgYW5kIGFsbCByZWZlcmVuY2VzIHRvIHRoZQoJY2hpbGQtPmpvYl90b2tlbiBmaWVsZC4KCShmcmVlX2pvYl90b2tlbik6IFJlbW92ZSB0aGlzIGFuZCBtZXJnZSBpdCBpbnRvIGZyZWVfY2hpbGQoKS4KCShyZWFwX2NoaWxkcmVuKTogUmV3b3JrIHRoZSAicmVhcGVkIGEgY2hpbGQiIGxvZ2ljIHNsaWdodGx5LgoJRG9uJ3QgY2FsbCBkZWZ1bmN0IGZyZWVfam9iX3Rva2VuIGFueW1vcmUuICBBbHdheXMgY2FsbAoJZnJlZV9jaGlsZCwgZXZlbiBpZiB3ZSdyZSBkeWluZy4KCShmcmVlX2NoaWxkKTogSWYgd2UncmUgbm90IGZyZWVpbmcgdGhlIG9ubHkgY2hpbGQsIHB1dCBhIHRva2VuCgliYWNrIGluIHRoZSBwaXBlLiAgVGhlbiwgaWYgd2UncmUgZHlpbmcsIGRvbid0IGJvdGhlciB0byBmcmVlLgoJKG5ld19qb2IpOiBJZiB3ZSBhcmUgdXNpbmcgdGhlIGpvYnNlcnZlciwgbG9vcCBjaGVja2luZyB0byBzZWUgaWYKCWEpIHRoZXJlIGFyZSBubyBjaGlsZHJlbiBvciBiKSB3ZSBnZXQgYSB0b2tlbiBmcm9tIHRoZSBwaXBlLgoKCSogam9iLmggKHN0cnVjdCBjaGlsZCk6IFJlbW92ZSB0aGUgam9iX3Rva2VuIGZpZWxkLgoKMTk5OS0wOC0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBBbGxvY2F0ZSBmb3IgdmFyaWFibGUKCWV4cGFuc2lvbiBpbiBmX2FwcGVuZCB3aXRoIGEgc2ltcGxlIHZhcmlhYmxlOiBpZiB3ZSdyZSBsb29raW5nIGF0Cgl0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGVzIHdlIGRvbid0IHdhbnQgdG8gdHJhc2ggdGhlIGJ1ZmZlci4KCU5vdGljZWQgYnkgUmVpbmVyIEJlbmluZ2EgPFJlaW5lci5CZW5pbmdhQG1jaHAuc2llbWVucy5kZT4uCgoxOTk5LTA4LTE2ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogbWFpbi5jIChtYWluKSBbX19NU0RPU19fXTogTWlycm9yIGFueSBiYWNrc2xhc2hlcyBpbiBhcmd2WzBdLCB0bwoJYXZvaWQgcHJvYmxlbXMgaW4gc2hlbGwgY29tbWFuZHMgdGhhdCB1c2UgYmFja3NsYXNoZXMgYXMgZXNjYXBlCgljaGFyYWN0ZXJzLgoKMTk5OS0wOC0xNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3LjkzIHJlbGVhc2VkLgoKMTk5OS0wOC0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnCgoJKiBmdW5jdGlvbi5jIChmdW5jX2lmKTogTmV3IGZ1bmN0aW9uICQoaWYgLi4uKSBiYXNlZCBvbiB0aGUKCW9yaWdpbmFsIGJ5IEhhbi1XZW4gYnV0IHJld29ya2VkIHF1aXRlIGEgYml0LgoJKGZ1bmN0aW9uX3RhYmxlKTogQWRkIGl0LgoJKiBORVdTOiBJbnRyb2R1Y2UgaXQuCgkqIG1ha2UudGV4aW5mbyAoSWYgRnVuY3Rpb24pOiBEb2N1bWVudCBpdC4KCgkqIGpvYi5jIChmcmVlX2pvYl90b2tlbik6IENoZWNrIGZvciBFSU5UUiB3aGVuIHdyaXRpbmcgdG9rZW5zIHRvCgl0aGUgam9ic2VydmVyIHBpcGUuCgoxOTk5LTA4LTEyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJQW5vdGhlciBqb2JzZXJ2ZXIgYWxnb3JpdGhtIGNoYW5nZS4gIFdlIGNvbnZlbmllbnRseSBmb3Jnb3QgdGhhdAoJdGhlIGJsb2NraW5nIGJpdCBpcyBzaGFyZWQgYnkgYWxsIHVzZXJzIG9mIHRoZSBwaXBlLCBpdCdzIG5vdCBhCglwZXItcHJvY2VzcyBzZXR0aW5nLiAgU2luY2Ugd2UgaGF2ZSBtYW55IG1ha2UgcHJvY2Vzc2VzIGFsbAoJc2hhcmluZyB0aGUgcGlwZSB3ZSBjYW4ndCB1c2UgdGhlIGJsb2NraW5nIGJpdCBhcyBhIHNpZ25hbCBoYW5kbGVyCglmbGFnLiAgSW5zdGVhZCwgd2UnbGwgZHVwIHRoZSBwaXBlJ3MgcmVhZCBGRCBhbmQgaGF2ZSB0aGUgU0lHQ0hMRAoJaGFuZGxlciBjbG9zZSB0aGUgZHVwJ2QgRkQuICBUaGlzIHdpbGwgY2F1c2UgdGhlIHJlYWQoKSB0byBmYWlsCgl3aXRoIEVCQURGIHRoZSBuZXh0IHRpbWUgd2UgaW52b2tlIGl0LCBzbyB3ZSBrbm93IHdlIG5lZWQgdG8gcmVhcAoJY2hpbGRyZW4uICBXZSB0aGVuIHJlLWR1cCBhbmQgcmVhcC4KCgkqIG1haW4uYyAobWFpbik6IERlZmluZSB0aGUgam9iX3JmZCB2YXJpYWJsZSB0byBob2xkIHRoZSBkdXAnZCBGRC4KCUFjdHVhbGx5IGR1cCB0aGUgcmVhZCBzaWRlIG9mIHRoZSBwaXBlLiAgRG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlCglibG9ja2luZyBiaXQgb24gdGhlIGZpbGUgZGVzY3JpcHRvci4KCSogbWFrZS5oOiBEZWNsYXJlIHRoZSBqb2JfcmZkIHZhcmlhYmxlLgoJKiBqb2IuYyAoY2hpbGRfaGFuZGxlcik6IElmIHRoZSBkdXAnZCBqb2JzZXJ2ZXIgcGlwZSBpcyBvcGVuLAoJY2xvc2UgaXQgYW5kIGFzc2lnbiAtMSB0byBqb2JfcmZkIHRvIG5vdGlmeSB0aGUgbWFpbiBwcm9ncmFtIHRoYXQKCXdlIGdvdCBhIFNJR0NITEQuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBDbG9zZSB0aGUgZHVwJ2QgRkQgYmVmb3JlIGV4ZWMnaW5nIGNoaWxkcmVuLgoJU2luY2Ugd2Ugb3BlbiBhbmQgY2xvc2UgdGhpcyB0aGluZyBzbyBvZnRlbiBpdCBkb2Vzbid0IHNlZW0KCXdvcnRoIGl0IHRvIHVzZSB0aGUgY2xvc2Utb24tZXhlYyBiaXQuCgkobmV3X2pvYik6IFJlbW92ZSBjb2RlIGZvciB0ZXN0aW5nL3NldHRpbmcgdGhlIGJsb2NraW5nIGJpdC4KCUluc3RlYWQgb2YgRUFHQUlOLCB0ZXN0IGZvciBFQkFERi4gIElmIHRoZSBkdXAnZCBGRCBoYXMgYmVlbgoJY2xvc2VkLCByZS1kdXAgaXQgYmVmb3JlIHdlIHJlYXAgY2hpbGRyZW4uCgoJKiBmdW5jdGlvbi5jIChmdW5jX3NoZWxsKTogQmUgYSBsaXR0bGUgbW9yZSBhY2N1cmF0ZSBhYm91dCB0aGUKCWxlbmd0aCBvZiB0aGUgZXJyb3Igc3RyaW5nIHRvIGFsbG9jYXRlLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZSk6IElmIHRoZXJlJ3Mgbm8gZmlsZW5tIGluZm8KCShzYXksIGZyb20gYSBidWlsdGluIGNvbW1hbmQpIHRoZW4gcmVzZXQgcmVhZGluZ19maWxlIHRvIDAuCgoxOTk5LTA4LTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWludE1ha2VmaWxlOiBVc2UgZyBpbiBzZWQgKHMvLy9nKSB0byByZXBsYWNlID4xIHZhcmlhYmxlIHBlcgoJbGluZS4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZSBbX19NU0RPU19fXTogRml4IG1vc3RseWNsZWFuLWFtaW5mbyB0bwoJcmVtb3ZlIHRoZSByaWdodCBmaWxlcy4KCjE5OTktMDgtMDEgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBmdW5jdGlvbi5jIChtc2Rvc19vcGVucGlwZSkgW19fTVNET1NfX106ICpSZWFsbHkqIHJldHVybiBhIEZJTEUKCXB0ci4KCjE5OTktMDgtMDEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCglOZXcgam9ic2VydmVyIGFsZ29yaXRobSB0byBhdm9pZCBhIHBvc3NpYmxlIGhvbGUgd2hlcmUgd2UgY291bGQKCW1pc3MgU0lHQ0hMRHMgYW5kIGdldCBpbnRvIGEgZGVhZGxvY2suICBUaGUgb3JpZ2luYWwgYWxnb3JpdGhtIHdhcwoJc3VnZ2VzdGVkIGJ5IFJvbGFuZCBNY0dyYXRoIHdpdGggYSBuaWNlIHJlZmluZW1lbnQgYnkgUGF1bCBFZ2dlcnQuCglNYW55IHRoYW5rcyBhcyB3ZWxsIHRvIFRpbSBNYWdpbGwgYW5kIEhvd2FyZCBDaHUsIHdobyBhbHNvCglwcm92aWRlZCBtYW55IHZpYWJsZSBpZGVhcyBhbmQgY3JpdGlxdWVzLiAgV2UgYWxsIGhhZCBhIGZ1biB3ZWVrCglkcmVhbWluZyB1cCBpbnRlcmVzdGluZyB3YXlzIHRvIHVzZSBhbmQgYWJ1c2UgVU5JWCBzeXNjYWxscyA6KS4KCglQcmV2aW91c2x5IHdlIGNvdWxkIG1pc3MgYSBTSUdDSExEIGlmIGl0IGhhcHBlbmVkIGFmdGVyIHdlIHJlYXBlZAoJdGhlIGNoaWxkcmVuIGJ1dCBiZWZvcmUgd2UgcmUtZW50ZXJlZCB0aGUgYmxvY2tpbmcgcmVhZC4gIElmIHRoaXMKCWhhcHBlbmVkIHRvIGFsbCBtYWtlcyBhbmQvb3IgYWxsIGNoaWxkcmVuLCBtYWtlIHdvdWxkIG5ldmVyIHdha2UKCXVwLgoKCVdlIGF2b2lkIHRoaXMgYnkgaGF2aW5nIHRoZSBTSUdDSExEIGhhbmRsZXIgcmVzZXQgdGhlIGJsb2NraW5nIGJpdAoJb24gdGhlIGpvYnNlcnZlciBwaXBlIHJlYWQgRkQgKG5vcm1hbGx5IHJlYWQgZG9lcyBibG9jayBpbiB0aGlzCglhbGdvcml0aG0pLiAgTm93IGlmIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBiZXR3ZWVuIHRoZSB0aW1lIHdlIHJlYXAKCWFuZCB0aGUgdGltZSB3ZSByZWFkKCksIGFuZCB0aGVyZSBhcmUgbm8gdG9rZW5zIGF2YWlsYWJsZSwgdGhlCglyZWFkIHdpbGwgbWVyZWx5IHJldHVybiB3aXRoIEVBR0FJTiBpbnN0ZWFkIG9mIGJsb2NraW5nLgoKCSogbWFpbi5jIChtYWluKTogU2V0IHRoZSBibG9ja2luZyBiaXQgZXhwbGljaXRseSBoZXJlLgoJKiBqb2IuYyAoY2hpbGRfaGFuZGxlcik6IElmIHdlIGhhdmUgYSBqb2JzZXJ2ZXIgcGlwZSwgc2V0IHRoZQoJbm9uLWJsb2NraW5nIGJpdCBmb3IgaXQuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBNb3ZlIHRoZSB0b2tlbiBzdHVmZiBiYWNrIHRvIG5ld19qb2I7IGlmIHdlCglkbyBpdCBoZXJlIHRoZW4gd2UncmUgbm90IGNvbnRyb2xsaW5nIHRoZSBudW1iZXIgb2YgcmVtb3RlIGpvYnMKCXN0YXJ0ZWQhCgkobmV3X2pvYik6IE1vdmUgdGhlIGNoZWNrIGZvciBqb2Igc2xvdHMgdG8gX2FmdGVyXyB3ZSd2ZSBjcmVhdGVkIGEKCWNoaWxkIHN0cnVjdHVyZS4gIElmIHRoZSByZWFkIHJldHVybnMgd2l0aG91dCBnZXR0aW5nIGEgdG9rZW4sIHNldAoJdGhlIGJsb2NraW5nIGJpdCB0aGVuIHRyeSB0byByZWFwX2NoaWxkcmVuLgoKCSogbWFrZS5oIChFSU5UUl9TRVQpOiBEZWZpbmUgdG8gdGVzdCBlcnJubyBpZiBFSU5UUiBpcyBhdmFpbGFibGUsCglvciAwIG90aGVyd2lzZS4gIEp1c3Qgc29tZSBjb2RlIGNsZWFudXAuCgkqIGFyc2Nhbi5jIChhcl9tZW1iZXJfdG91Y2gpOiBVc2UgaXQuCgkqIGZ1bmN0aW9uLmMgKGZ1bmNfc2hlbGwpOiBVc2UgaXQuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogVXNlIGl0LgoJKiByZW1ha2UuYyAodG91Y2hfZmlsZSk6IFVzZSBpdC4KCjE5OTktMDctMjggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UuaDogRGVmaW5lIF8oKSBhbmQgTl8oKSBtYWNyb3MgYXMgcGFzc3Rocm91Z2ggdG8gaW5pdGlhdGUKCU5MUyBzdXBwb3J0LgoJKiA8YWxsPjogQWRkIF8oKS9OXygpIGFyb3VuZCB0cmFuc2xhdGFibGUgc3RyaW5ncy4KCjE5OTktMDctMjcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYzogTWFrZSBzdXJlIG1ha2UuaCBjb21lcyBiZWZvcmUgb3RoZXIgaGVhZGVycy4KCjE5OTktMDctMjYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoUXVpY2sgUmVmZXJlbmNlKTogVXBkYXRlIHdpdGggdGhlIG5ldyBmZWF0dXJlcy4KCjE5OTktMDctMjUgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiByZW1ha2UuYyBbX19NU0RPU19fXTogRG9uJ3QgaW5jbHVkZSB2YXJpYWJsZXMuaCwgaXQncyBhbHJlYWR5CglpbmNsdWRlZC4KCgkqIGZ1bmN0aW9uLmMgKG1zZG9zX29wZW5waXBlKSBbX19NU0RPU19fXTogUmV0dXJuIEZJTEUgcHRyLgoJKGZ1bmNfc2hlbGwpIFtfX01TRE9TX19dOiBGaXggdGhlIGFyZ3VtZW50IGxpc3QuCgoJKiBNYWtlZmlsZS5ET1MudGVtcGxhdGU6IFVwZGF0ZSBmcm9tIE1ha2VmaWxlLmluLgoKCSogUkVBRE1FLkRPUy50ZW1wbGF0ZTogQ29uZmlndXJlIGNvbW1hbmQgZml4ZWQuCgoJKiBjb25maWdoLmRvcy50ZW1wbGF0ZTogVXBkYXRlIHRvIHByb3ZpZGUgZGVmaW5pdGlvbnMgZm9yCgl1aW50bWF4X3QsIGZkX3NldF9zaXplX3QsIGFuZCBIQVZFX1NFTEVDVC4KCjE5OTktMDctMjQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ny45MSByZWxlYXNlZC4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlcyB0byB0aGUgYm9vc3RyYXBwaW5nIGNvZGU6IGlmIGJ1aWxkLnNoLmluCglkb2Vzbid0IGV4aXN0IGNvbmZpZ3VyZSBzcGl0cyBhbiBlcnJvciBhbmQgZ2VuZXJhdGVzIGFuIGVtcHR5CglidWlsZC5zaCBmaWxlIHdoaWNoIGNhdXNlcyBtYWtlIHRvIGJlIGNvbmZ1c2VkLgoJKiBtYWludE1ha2VmaWxlOiBEb24ndCBidWlsZCBSRUFETUUgZWFybHkuCgoxOTk5LTA3LTIzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAobXlfam9iX3Rva2VuKTogVGhpcyB2YXJpYWJsZSBjb250cm9scyB3aGV0aGVyIHdlJ3ZlCgloYW5kZWQgb3VyIHBlcnNvbmFsIHRva2VuIHRvIGEgc3VicHJvY2VzcyBvciBub3QuICBOb3RlIHdlIGNvdWxkCglwcm9iYWJseSBpbmZlciB0aGlzIGZyb20gdGhlIHZhbHVlIG9mIGpvYl9zbG90c191c2VkLCBidXQgaXQncwoJY2xlYXJlciB0byBqdXN0IGtlZXAgaXQgc2VwYXJhdGVseS4gIEpvYl9zbG90c191c2VkIGlzbid0IHJlYWxseQoJcmVsZXZhbnQgd2hlbiBydW5uaW5nIHRoZSBqb2Igc2VydmVyLgoJKGZyZWVfam9iX3Rva2VuKTogTmV3IGZ1bmN0aW9uOiBmcmVlIGEgam9iIHRva2VuLiAgSWYgd2UgZG9uJ3QKCWhhdmUgb25lLCBuby1vcC4gIElmIHdlIGhhdmUgdGhlIHBlcnNvbmFsIHRva2VuLCByZWNsYWltIGl0LiAgSWYKCXdlIGhhdmUgYW5vdGhlciB0b2tlbiwgd3JpdGUgaXQgYmFjayB0byB0aGUgcGlwZS4KCShyZWFwX2NoaWxkcmVuKTogQ2FsbCBmcmVlX2pvYl90b2tlbi4KCShmcmVlX2NoaWxkKTogQ2FsbCBmcmVlX2pvYl90b2tlbi4KCShzdGFydF9qb2JfY29tbWFuZCk6IFJlbW92ZSBkdXBsaWNhdGUgdGVzdCBmb3IgJysnIGluIHRoZSBjb21tYW5kLgoJSWYgd2UgZG9uJ3QgYXBwZWFyIHRvIGJlIHJ1bm5pbmcgYSByZWN1cnNpdmUgbWFrZSwgY2xvc2UgdGhlCglqb2JzZXJ2ZXIgZmlsZWRlc2NyaXB0b3JzLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogSWYgb3VyIHBlcnNvbmFsIHRva2VuIGlzIGF2YWlsYWJsZSwgdXNlIHRoYXQKCWluc3RlYWQgb2YgZ29pbmcgdG8gdGhlIHNlcnZlciBwaXBlLgoJKCopOiBBZGQgdGhlIHRva2VuIHZhbHVlIHRvIG1hbnkgZGVidWdnaW5nIHN0YXRlbWVudHMsIGFuZCBwcmludAoJdGhlIGNoaWxkIHRhcmdldCBuYW1lIGluIGFkZGl0aW9uIHRvIHRoZSBwdHIgaGV4IHZhbHVlLgoJQ2hhbmdlIHRoZSBkZWZhdWx0ICJubyB0b2tlbiIgdmFsdWUgZnJvbSAnXDAnIHRvICctJyBzbyBpdCBsb29rcwoJYmV0dGVyIGluIHRoZSBvdXRwdXQuCgoJKiBtYWluLmMgKG1haW4pOiBJbnN0YWxsIHRoZSBjaGlsZF9oYW5kbGVyIHdpdGggc2lnYWN0aW9uKCkKCWluc3RlYWQgb2Ygc2lnbmFsKCkgaWYgd2UgaGF2ZSBpdC4gIE9uIFN5c1Ygc3lzdGVtcywgc2lnbmFsKCkgdXNlcwoJU3lzViBzZW1hbnRpY3Mgd2hpY2ggYXJlIGEgcGFpbi4gIEJ1dCBzaWdhY3Rpb24oKSBhbHdheXMgZG9lcyB3aGF0Cgl3ZSB3YW50LgoJKG1haW4pOiBJZiB3ZSBnb3Qgam9iIHNlcnZlciBGRHMgZnJvbSB0aGUgZW52aXJvbm1lbnQsIHRlc3QgdGhlbQoJdG8gc2VlIGlmIHRoZXkncmUgb3Blbi4gIElmIG5vdCwgdGhlIHBhcmVudCBtYWtlIGNsb3NlZCB0aGVtCgliZWNhdXNlIGl0IGRpZG4ndCB0aGluayB3ZSB3ZXJlIGEgc3VibWFrZS4gIFByaW50IGEgd2FybmluZyBhbmQKCXN1Z2dlc3Rpb24gdG8gdXNlICIrIiBvbiB0aGUgc3VibWFrZSBpbnZvY2F0aW9uLCBhbmQgaGFyZC1zZXQgdG8KCS1qMSBmb3IgdGhpcyBpbnN0YW5jZSBvZiBtYWtlLgoJKG1haW4pOiBDaGFuZ2UgdGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIHNsb3RzIHRvIGJlIG1vcmUKCXJvYnVzdC4gIFByZXZpb3VzbHkgbWFrZSBjaGVja2VkIHRvIHNlZSBpZiBpdCB0aG91Z2h0IGEgc3VicHJvY2VzcwoJd2FzIGEgc3VibWFrZSBhbmQgaWYgc28sIGRpZG4ndCBnaXZlIGl0IGEgdG9rZW4uICBTaW5jZSBtYWtlJ3MKCWRvbid0IGNvbnN1bWUgdG9rZW5zIHdlIGNvdWxkIHNwYXduIG1hbnkgb2YgbWFrZXMgZmlnaHRpbmcgZm9yIGEKCXNtYWxsIG51bWJlciBvZiB0b2tlbnMuICBQbHVzIHRoaXMgaXMgdW5yZWxpYWJsZSBiZWNhdXNlIHN1Ym1ha2VzCgltaWdodCBub3QgYmUgcmVjb2duaXplZCBieSB0aGUgcGFyZW50IChzZWUgYWJvdmUpIHRoZW4gYWxsIHRoZQoJdG9rZW5zIGNvdWxkIGJlIHVzZWQgdXAgYnkgdW5yZWNvZ25pemVkIG1ha2VzLCBhbmQgbm8gb25lIGNvdWxkCglydW4uICBOb3cgZXZlcnkgbWFrZSBjb25zdW1lcyBhIHRva2VuIGZyb20gaXRzIHBhcmVudC4gIEhvd2V2ZXIsCgl0aGUgbWFrZSBjYW4gYWxzbyB1c2UgdGhpcyB0b2tlbiB0byBzcGF3biBhIGNoaWxkLiAgSWYgdGhlIG1ha2UKCXdhbnRzIG1vcmUgdGhhbiBvbmUsIGl0IGdvZXMgdG8gdGhlIGpvYnNlcnZlciBwaXBlLiAgVGh1cyB0aGVyZQoJd2lsbCBuZXZlciBiZSBtb3JlIHRoYW4gTiBtYWtlcyBydW5uaW5nIGZvciAtak4sIGFuZCBOKjIgcHJvY2Vzc2VzCgkoTiBtYWtlcyBhbmQgdGhlaXIgTiBjaGlsZHJlbikuICBFdmVyeSBtYWtlIGNhbiBhbHdheXMgcnVuIGF0CglsZWFzdCBvbmUgam9iLCBhbmQgd2UnbGwgbmV2ZXIgZGVhZGxvY2suICAoTm90ZSB0aGUgY2xvc2luZyBvZiB0aGUKCXBpcGUgZm9yIG5vbi1zdWJtYWtlcyBhbHNvIHNvbHZlcyB0aGlzLCBidXQgdGhpcyBpcyBzdGlsbCBhIGJldHRlcgoJYWxnb3JpdGhtLikgIFNvISAgT25seSBwdXQgTi0xIHRva2VucyBpbnRvIHRoZSBwaXBlLCBzaW5jZSB0aGUKCXRvcG1vc3QgbWFrZSBrZWVwcyBvbmUgZm9yIGl0c2VsZi4KCgkqIGNvbmZpZ3VyZS5pbjogRmluZCBzaWdhY3Rpb24uICBEaXNhYmxlIGpvYiBzZXJ2ZXIgc3VwcG9ydCB1bmxlc3MKCXRoZSBzeXN0ZW0gcHJvdmlkZXMgaXQsIGluIGFkZGl0aW9uIHRvIGVpdGhlciB3YWl0cGlkKCkgb3IKCXdhaXQzKCkuCgoxOTk5LTA3LTIyICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIGFyc2Nhbi5jIChhcl9tZW1iZXJfdG91Y2gpIFtXSU5ET1dTMzJdOiBUaGUgYXJfZGF0ZSBmaWVsZCBpcyBhCglzdHJpbmcgb24gV2luZG93cywgbm90IGEgdGltZXN0YW1wLgoKMTk5OS0wNy0yMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc3LjkwIHJlbGVhc2VkLgoKCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBSZXF1aXJlIGF1dG9tYWtlIDEuNC4KCgkqIGZ1bmN0aW9uLmM6IFJlYXJyYW5nZSBzbyB3ZSBkb24ndCBuZWVkIHRvIHByZWRlY2xhcmUgdGhlCglmdW5jdGlvbl90YWJsZSBhcnJheTsgSyZSIEMgY29tcGlsZXJzIGRvbid0IGxpa2UgdGhhdC4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19TRUxFQ1QpOiBPdWNoOyB0aGlzIHJlcXVpcmVzIGFuIEFOU0kgQwoJY29tcGlsZXIhICBDaGFuZ2UgdG8gd29yayB3aXRoIEsmUiBjb21waWxlcnMgYXMgd2VsbC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogUHV0IGJ1aWxkLnNoIGJhY2suICBJIGRvbid0IGtub3cgaG93IEkKCXRob3VnaHQgaXQgd291bGQgd29yayB0aGlzIHdheSA6LS8uICBXZSdsbCBoYXZlIHRvIHRoaW5rIG9mCglzb21ldGhpbmcgZWxzZS4KCSogTWFrZWZpbGUuYW06IFJlbW92ZSBydWxlIHRvIGNyZWF0ZSBidWlsZC5zaC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBSZWFycmFuZ2UgdGhlIGRlZmF1bHQgY29tbWFuZAoJbGluZXMgdG8gY29uZm9ybSB0byBQT1NJWCBydWxlcyAocHV0IHRoZSBmaWxlbmFtZSBhcmd1bWVudCAkPAoJX2FmdGVyXyB0aGUgT1VUUFVUX09QVElPTiwgbm90IGJlZm9yZSBpdCkuCgoJKiB2YXJpb3VzOiBDaGFuZ2VkICFzdHJuY21wKCkgY2FsbHMgdG8gc3RybmVxKCkgbWFjcm9zLgoKCSogbWlzYy5jIChzaW5kZXgpOiBNYWtlIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50LgoKCSogZGlyLmMgKGZpbGVfaW1wb3NzaWJsZSk6IENoYW5nZSBzYXZlc3RyaW5nKFgsc3RybGVuKFgpKSB0byB4c3RyZHVwKCkuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogRGl0dG8uCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBEaXR0by4KCShtYWluKTogRGl0dG8uCgkqIG1pc2MuYyAoY29weV9kZXBfY2hhaW4pOiBEaXR0by4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRGl0dG8uCgkocGFyc2VfZmlsZV9zZXEpOiBEaXR0by4KCSh0aWxkZV9leHBhbmQpOiBEaXR0by4KCShtdWx0aV9nbG9iKTogRGl0dG8uCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBEaXR0by4KCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IERpdHRvLgoJKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGl0dG8uCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogRGl0dG8uCgoJKiBtaXNjLmMgKHhyZWFsbG9jKTogU29tZSByZWFsbG9jcyBhcmUgbm9uLXN0YW5kYXJkOiB3b3JrIGFyb3VuZAoJdGhlbSBpbiB4cmVhbGxvYyBieSBjYWxsaW5nIG1hbGxvYyBpZiBQVFIgaXMgTlVMTC4KCSogbWFpbi5jIChtYWluKTogQ2FsbCB4cmVhbGxvYygpIGRpcmVjdGx5IGluc3RlYWQgb2YgdGVzdGluZyBmb3IKCU5VTEwuCgoJKiBmdW5jdGlvbi5jIChmdW5jX3NvcnQpOiBEb24ndCB0cnkgdG8gZnJlZSBOVUxMOyBzb21lIG9sZGVyLAoJbm9uLXN0YW5kYXJkIHZlcnNpb25zIG9mIGZyZWUoKSBkb24ndCBsaWtlIGl0LgoKCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1kbWFsbG9jKTogSW5zdGFsbCBzb21lIHN1cHBvcnQgZm9yIHVzaW5nCglkbWFsbG9jIChodHRwOi8vd3d3LmRtYWxsb2MuY29tLykgd2l0aCBtYWtlLiAgVXNlIC0tZW5hYmxlLWRtYWxsb2MKCXdpdGggY29uZmlndXJlIHRvIGVuYWJsZSBpdC4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmN0aW9uX3RhYmxlX2VudHJ5KTogV2hvb3BzISAgVGhlIGZ1bmN0aW9uLmMKCXJld3JpdGUgYnJlYWtzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFsbCB0ZXh0IHRvIGEgZnVuY3Rpb24gaXMKCWJyb2tlbiBpbnRvIGFyZ3VtZW50cywgYW5kIGV4dHJhcyBhcmUgaWdub3JlZC4gIFNvICQoc29ydCBhLGIsYykKCXJldHVybnMgImEiISAgRXRjLiAgT3VjaC4gIEZpeCBpdCBieSBtYWtpbmcgYSBwb3NpdGl2ZSB2YWx1ZSBpbgoJdGhlIFJFUVVJUkVEX0FSR1MgZmllbGQgbWVhbiBleGFjdGx5IHRoYXQgbWFueSBhcmd1bWVudHMgdG8gdGhlCglmdW5jdGlvbjsgYW55ICJleHRyYXMiIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGxhc3QgYXJndW1lbnQgYXMKCWJlZm9yZS4gIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgYXQgbGVhc3QgdGhhdCBtYW55LCBidXQgbWF5IGJlCgltb3JlOiBpbiB0aGlzIGNhc2UgYWxsIHRleHQgaXMgYnJva2VuIG9uIGNvbW1hcy4KCShoYW5kbGVfZnVuY3Rpb24pOiBTdG9wIHdoZW4gd2UndmUgc2VlbiBSRVFVSVJFRF9BUkdTIGFyZ3MsIGlmID4wLgoJKGV4cGFuZF9idWlsdGluX2Z1bmN0aW9uKTogQ29tcGFyZSBudW1iZXIgb2YgYXJncyB0byB0aGUgYWJzb2x1dGUKCXZhbHVlIG9mIFJFUVVJUkVEX0FSR1MuCgoxOTk5LTA3LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBFbnN1cmUgdGhhdCB0aGUgc3RhdGUgb2YgdGhlIHRhcmdldAoJaXMgY3NfcnVubmluZy4gIEl0IG1pZ2h0IG5vdCBiZSBpZiB3ZSBza2lwcGVkIGFsbCB0aGUgbGluZXMgZHVlIHRvCgktbiAoZm9yIGV4YW1wbGUpLgoKCSogY29tbWFuZHMuYyAoZXhlY3V0ZV9maWxlX2NvbW1hbmRzKTogSWYgd2UgZGlzY292ZXIgdGhhdCB0aGUKCWNvbW1hbmQgc2NyaXB0IGlzIGVtcHR5IGFuZCBzdWNjZWVkIGVhcmx5LCBzZXQgY3NfcnVubmluZyBzbyB0aGUKCW1vZHRpbWUgb2YgdGhlIHRhcmdldCBpcyBzdGlsbCByZWNoZWNrZWQuCgoJKiBydWxlLmMgKGZyZWVydWxlKTogRnJlZSB0aGUgZGVwZW5kZW5jeSBsaXN0IGZvciB0aGUgcnVsZS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogV2hlbiB0dXJuaW5nIGFuIGludGVybWVkaWF0ZSBmaWxlCglpbnRvIGEgcmVhbCB0YXJnZXQsIGtlZXAgdGhlIGFsc29fbWFrZSBsaXN0LgoJRnJlZSB0aGUgZGVwLT5uYW1lIGlmIHdlIGRpZG4ndCB1c2UgaXQgZHVyaW5nIGVudGVyX2ZpbGUoKS4KCjE5OTktMDctMTYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IGFsbG9jYXRlIHRoZSBjb21tYW5kcyBidWZmZXIgdW50aWwKCXdlJ3JlIHN1cmUgd2UgZm91bmQgYSBtYWtlZmlsZSBhbmQgd29uJ3QgcmV0dXJuIGVhcmx5IChtZW0gbGVhaykuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBCcm9rZW4gI2lmZGVmIHRlc3Q6IGxvb2sgZm9yIEZfU0VURkQsCglub3QgRkRfU0VURkQuICBDbG9zZS1vbi1leGVjIGlzbid0IGdldHRpbmcgc2V0IG9uIHRoZSBiYWRfc3RkaW4KCWZpbGUgZGVzY3JpcHRvciBhbmQgaXQncyBsZWFraW5nIDotLy4KCSogZ2V0bG9hZGF2Zy5jIChnZXRsb2FkYXZnKTogRGl0dG8uCgoxOTk5LTA3LTE1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGaXggc29tZSBwb3RlbnRpYWwgbWVtb3J5IHN0b21wcyBwYXJzaW5nCglgZGVmaW5lJyBkaXJlY3RpdmVzIHdoZXJlIG5vIHZhcmlhYmxlIG5hbWUgaXMgZ2l2ZW4uCgoJKiBmdW5jdGlvbi5jIChmdW5jX2NhbGwpOiBSZW5hbWUgZnJvbSBmdW5jX2FwcGx5LiAgVmFyaW91cyBjb2RlCgljbGVhbnVwIGFuZCB0aWdodGVuaW5nLgoJKGZ1bmN0aW9uX3RhYmxlKTogQWRkICJjYWxsIiBhcyBhIHZhbGlkIGJ1aWx0aW4gZnVuY3Rpb24uCgoJKiBtYWtlLnRleGluZm8gKENhbGwgRnVuY3Rpb24pOiBEb2N1bWVudCBpdC4KCgkqIE5FV1M6IEFubm91bmNlIGl0LgoKMTk5OS0wNy0wOSAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKSBbX19NU0RPU19fLCBXSU5ET1dTMzJdOgoJVHJlYXQgIm92ZXJyaWRlIFNIRUxMPSIgdGhlIHNhbWUgYXMganVzdCAiU0hFTEw9Ii4KCjE5OTktMDctMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IERvbid0IGdldCBhIHNlY29uZCBqb2IgdG9rZW4gaWYgd2UKCWFscmVhZHkgaGF2ZSBvbmU7IGlmIHdlJ3JlIHdhaXRpbmcgb24gdGhlIGxvYWQgdG8gZ28gZG93bgoJc3RhcnRfd2FpdGluZ19qb2IoKSBtaWdodCBnZXQgY2FsbGVkIHR3aWNlIG9uIHRoZSBzYW1lIGZpbGUuCgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogQWRkIG5ldyBmaWVsZCwgbXRpbWVfYmVmb3JlX3VwZGF0ZS4KCVdoZW4gbm90aWNlX2ZpbmlzaGVkX2ZpbGUgcnVucyBpdCBhc3NpZ25zIHRoZSBjYWNoZWQgbGFzdF9tdGltZSB0bwoJdGhpcyBmaWVsZC4KCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogTm90aWNlIHRoYXQgYSBmaWxlIHdhc24ndCB1cGRhdGVkCglieSBhc2tpbmcgaWYgaXQgY2hhbmdlZCAoZy0+Y2hhbmdlZCkgYW5kIGNvbXBhcmluZyB0aGUgY3VycmVudAoJY2FjaGVkIHRpbWUgKGxhc3RfbXRpbWUpIHdpdGggdGhlIHByZXZpb3VzIG9uZSwgc3RvcmVkIGluCgltdGltZV9iZWZvcmVfdXBkYXRlLiAgVGhlIHByZXZpb3VzIGNoZWNrICgiZGlkIGxhc3RfbXRpbWUgY2hhbmdlZAoJZHVyaW5nIHRoZSBydW4gb2YgdXBkYXRlX2ZpbGU/IikgZmFpbHMgZm9yIHBhcmFsbGVsIGJ1aWxkcyBiZWNhdXNlCglsYXN0X210aW1lIGlzIHNldCBkdXJpbmcgcmVhcF9jaGlsZHJlbiwgYmVmb3JlIHVwZGF0ZV9maWxlIGlzIHJ1bi4KCVRoaXMgY2F1c2VzIHVwZGF0ZV9nb2FsX2NoYWluIHRvIGFsd2F5cyByZXR1cm4gLTEgKG5vdGhpbmcKCXJlYnVpbHQpIHdoZW4gcnVubmluZyBwYXJhbGxlbCAoLWpOKS4gIFRoaXMgaXMgT0sgZHVyaW5nICJub3JtYWwiCglidWlsZHMgc2luY2Ugb3VyIGNhbGxlciAobWFpbikgdHJlYXRzIHRoZXNlIGNhc2VzIGlkZW50aWNhbGx5IGluCgl0aGF0IGNhc2UsIGJ1dCBpZiB3aGVuIHJlYnVpbGRpbmcgbWFrZWZpbGVzIHRoZSBkaWZmZXJlbmNlIGlzIHZlcnkKCWltcG9ydGFudCwgYXMgaXQgY29udHJvbHMgd2hldGhlciB3ZSByZS1leGVjIG9yIG5vdC4KCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBDb3B5IHRoZSBtdGltZV9iZWZvcmVfdXBkYXRlIGZpZWxkLgoJKHNuYXBfZGVwcyk6IEluaXRpYWxpemUgbXRpbWVfYmVmb3JlX3VwZGF0ZSB0byAtMS4KCSogbWFpbi5jIChtYWluKTogSW5pdGlhbGl6ZSBtdGltZV9iZWZvcmVfdXBkYXRlIG9uIG9sZCAoLW8pIGFuZAoJbmV3ICgtVykgZmlsZXMuCgoxOTk5LTA3LTA4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKHN3aXRjaGVzKTogRGVmaW5lIGEgbmV3IHN3aXRjaCAtUiAob3IKCS0tbm8tYnVpbHRpbi12YXJpYWJsZXMpLiAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGRlZmluaW5nIG9mIGFsbAoJdGhlIEdOVSBtYWtlIGJ1aWx0aW4gdmFyaWFibGVzLgoJKG1haW4pOiBJZiAtUiB3YXMgZ2l2ZW4sIGZvcmNlIC1yIGFzIHdlbGwuCgkqIGRlZmF1bHQuYyAoZGVmaW5lX2RlZmF1bHRfdmFyaWFibGVzKTogVGVzdCB0aGUgbmV3IGZsYWcuCgkqIG1ha2UuaDogRGVjbGFyZSBnbG9iYWwgZmxhZy4KCSogbWFrZS50ZXhpbmZvIChPcHRpb25zIFN1bW1hcnkpOiBEb2N1bWVudCB0aGUgbmV3IG9wdGlvbi4KCShJbXBsaWNpdCBWYXJpYWJsZXMpOiBEaXR0by4KCjE5OTktMDctMDYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoT3B0aW9ucyBTdW1tYXJ5KTogQ29ycmVjdCBleGFtcGxlcyBpbgoJLS1wcmludC1kYXRhLWJhc2Ugb3B0aW9uIHN1bW1hcnkgKHByb2JsZW0gcmVwb3J0ZWQgYnkgRGF2aWQgTW9yc2UKCTxtb3JzZUBuaWNoaW1lbi5jb20+KS4KCgkqIGFyc2Nhbi5jOiBBZGQgc3VwcG9ydCBmb3IgYXJjaGl2ZXMgaW4gV2luZG93cyAoVkMrKykuICBGcmFuawoJTGliYnJlY2h0IDxmcmFua2xAYWJ6eC5iZWxnaXVtLmhwLmNvbT4gcHJvdmlkZWQgaW5mbyBvbiBob3cgdG8gZG8KCXRoaXMuCgkqIE5NYWtlZmlsZS50ZW1wbGF0ZSAoQ0ZMQUdTX2FueSk6IFJlbW92ZSBOT19BUkNISVZFUyBmcm9tIHRoZQoJY29tcGlsZSBsaW5lLgoJKiBidWlsZF93MzIuYmF0OiBEaXR0by4KCgkqIHJlbWFrZS5jIChub19ydWxlX2Vycm9yKTogRml4IC1pbmNsdWRlL3NpbmNsdWRlIHNvIGl0IGRvZXNuJ3QKCWdpdmUgZXJyb3JzIGlmIHlvdSB0cnkgdG8gLWluY2x1ZGUgdGhlIHNhbWUgZmlsZSB0d2ljZS4KCSh1cGRhdGluZ19tYWtlZmlsZXMpOiBOZXcgdmFyaWFibGU6IHdlIG5lZWQgdG8ga25vdyB0aGlzIGluZm8gaW4KCW5vX3J1bGVfZXJyb3IoKSBzbyB3ZSBrbm93IHdoZXRoZXIgdG8gcHJpbnQgYW4gZXJyb3Igb3Igbm90LgoJKHVwZGF0ZV9maWxlXzEpOiBVbmNvbmRpdGlvbmFsbHkgY2FsbCBub19ydWxlX2Vycm9yKCksIGRvbid0IHRyeQoJdG8gcGxheSBnYW1lcyB3aXRoIHRoZSBkb250Y2FyZSBmbGFnLgoKMTk5OS0wNi0xNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChSZW1ha2luZyBNYWtlZmlsZXMpOiBBZGQgYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8KCXByZXZlbnQgaW1wbGljaXQgcnVsZSBzZWFyY2hlcyBmb3IgbWFrZWZpbGVzLgoKCSogbWFrZS4xOiBSZW1vdmUgc3RhdGVtZW50IHRoYXQgbWFrZSBjb250aW51ZXMgcHJvY2Vzc2luZyB3aGVuIC12CglpcyBnaXZlbi4KCjE5OTktMDYtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENhc3QgLTEgYXJndW1lbnRzIHRvCgl2YXJpYWJsZV9leHBhbmRfc3RyaW5nKCkgdG8gbG9uZy4gIEFsZXhhbmRyZSBTYXV2ZQoJPEFsZXhhbmRyZS5TQVVWRUBpZnAuZnI+IHJlcG9ydHMgdGhhdCB3aXRob3V0IGNhc3RzLCB0aGlzIGJyZWFrcwoJb24gYSBORUMgU1VQRVItVVggU1gtNCBzeXN0ZW0gKGFuZCBpdCdzIHdyb25nIHdpdGhvdXQgYSBjYXN0Cglhbnl3YXkpLiAgT2YgY291cnNlLCAoYSkgSSdkIHJlYWxseSBsb3ZlIHRvIHN0YXJ0IHVzaW5nIGZ1bmN0aW9uCglwcm90b3R5cGVzLCBhbmQgKGIpIHRoZXJlJ3MgYSB3aG9sZSBzbGV3IG9mIGlzc3VlcyByZWxhdGVkIHRvIGludAoJdnMuIGxvbmcgYW5kIHNpZ25lZCB2cy4gdW5zaWduZWQgaW4gdGhlIGxlbmd0aCBoYW5kbGluZyBvZgoJdmFyaWFibGUgYnVmZmVycywgZXRjLiAgR3Jvc3MuICBOZWVkcyBhIGNvbXBsZXRlIG11Y2tpbmctb3V0LgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogRGl0dG8uCgoJKiBhY2luY2x1ZGUubTQgKEFDX0ZVTkNfU0VMRUNUKTogU2xpZ2h0IGVuaGFuY2VtZW50IGZvciBBSVggMy4yIGJ5CglMYXJzIEhlY2tpbmcgPGxoZWNraW5nQG5tcmMudWNjLmllPi4KCgkqIHJlYWQuYyAoZ2V0X25leHRfbXdvcmQpOiBBbGxvdyBjb2xvbnMgdG8gYmUgZXNjYXBlZCBpbiB0YXJnZXQKCW5hbWVzOiBmaXggZm9yIHJlZ3Jlc3Npb24gZmFpbHVyZS4KCjE5OTktMDQtMjYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IFJlc2V0IHJlYWRfbWFrZWZpbGVzIHRvIGVtcHR5IGFmdGVyIHByb2Nlc3Npbmcgc28KCXdlIGdldCB0aGUgcmlnaHQgZXJyb3IgbWVzc2FnZS4KCjE5OTktMDQtMjUgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogVXBkYXRlcyB0byBAZGlyY2F0ZWdvcnkgYW5kIEBkaXJlbnRyeSBzdWdnZXN0ZWQgYnkKCUthcmwgQmVycnkgPGthcmxAY3MudW1iLmVkdT4uCgoxOTk5LTA0LTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogQ2FsbCB1bmJsb2NrX3NpZ3MgYmVmb3JlCgl0dXJuaW5nIG9mZiBkb3NfY29tbWFuZF9ydW5uaW5nLCBzbyBjaGlsZCdzIHNpZ25hbHMgcHJvZHVjZSB0aGUKCXJpZ2h0IGVmZmVjdC4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCkgW19fTVNET1NfX106IFVzZSBFWElUX0ZBSUxVUkUKCWluc3RlYWQgb2YgMS4KCjE5OTktMDQtMTggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBjb25maWdoLmRvcy50ZW1wbGF0ZTogVXBkYXRlIHRvIHJlY29nbml6ZSB0aGF0IHZlcnNpb24gMi4wMiBvZgoJREpHUFAgY29udGFpbnMgc3lzX3NpZ2xpc3Qgc3R1ZmYuCgoxOTk5LTA0LTE0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbnMvUmVjdXJzaW9uKTogRG9jdW1lbnQgdGhlIGpvYiBzZXJ2ZXIuCgkoUGFyYWxsZWwpOiBUd2Vha3MuCgoxOTk5LTA0LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJSW1wbGVtZW50IGEgbmV3ICJqb2Igc2VydmVyIiBmZWF0dXJlOyB0aGUgaW1wbGVtZW50YXRpb24gd2FzCglzdWdnZXN0ZWQgYnkgSG93YXJkIENodSA8aHljQGhpZ2hsYW5kc3VuLmNvbT4uCgoJKiBjb25maWd1cmUuaW4gKGpvYi1zZXJ2ZXIpOiBOZXcgZGlzYWJsZSBvcHRpb24gZm9yIGpvYiBzZXJ2ZXIKCXN1cHBvcnQtLWl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LiAgSWYgaXQgd29ya3Mgd2VsbCB0aGlzIHdpbGwgZ28KCWF3YXkuCgoJKiBORVdTOiBTdW1tYXJpemUgdGhlIG5ldyBmZWF0dXJlLgoKCSogYWNjb25maWcuaDogTmV3IGRlZmluaXRpb24gTUFLRV9KT0JTRVJWRVIgaWYgam9iIHNlcnZlciBzdXBwb3J0CglpcyBlbmFibGVkLgoJKiBjb25maWcuaC12bXMudGVtcGxhdGU6IFVuZGVmIE1BS0VfSk9CU0VSVkVSIGZvciB0aGlzIHBvcnQuCgkqIGNvbmZpZy5oLlczMi50ZW1wbGF0ZTogRGl0dG8uCgkqIGNvbmZpZy5hbWkudGVtcGxhdGU6IERpdHRvLgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBBZGQgYSBuZXcgdHlwZTogaW50X3N0cmluZy4KCShzd2l0Y2hlc1tdKSBVc2UgaW50X3N0cmluZyBmb3IgLWogaWYgTUFLRV9KT0JTRVJWRVIuCgkoaW5pdF9zd2l0Y2hlcyk6IEluaXRpYWxpemUgdGhlIG5ldyBpbnRfc3RyaW5nIHN3aXRjaCB0eXBlLgoJKHByaW50X3VzYWdlKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbSBkZWNvZGVfc3dpdGNoZXMoKS4KCShkZWNvZGVfc3dpdGNoZXMpOiBDYWxsIGl0LiAgRGVjb2RlIHRoZSBuZXcgaW50X3N0cmluZyBzd2l0Y2ggdHlwZS4KCShkZWZpbmVfbWFrZWZsYWdzKTogQWRkIG5ldyBpbnRfc3RyaW5nIHN3aXRjaCBkYXRhIHRvIE1BS0VGTEFHUy4KCShqb2JfZmRzW10pIEFycmF5IHRvIGNvbnRhaW4gdGhlIHBpcGUgZmlsZSBkZXNjcmlwdG9ycy4KCShtYWluKTogUGFyc2UgdGhlIGpvYl9zbG90c19zdHIgb3B0aW9uIHJlc3VsdHMuICBJZiBuZWNlc3NhcnksCgljcmVhdGUgdGhlIHBpcGUgYW5kIHNlZWQgaXQgd2l0aCB0b2tlbnMuICBTZXQgdGhlIG5vbi1ibG9ja2luZyBiaXQKCWZvciB0aGUgcmVhZCBmZC4gIEVuYWJsZSB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR0NITEQgZXZlbiBpZiB3ZQoJaGF2ZSBhIG5vbi1oYW5naW5nIHdhaXQ7IGl0J3MgbmVlZGVkIHRvIGludGVycnVwdCB0aGUgc2VsZWN0KCkgaW4KCWpvYi5jOnN0YXJ0X3dhaXRpbmdfam9iKCkuCgoJKiBtYWtlLmg6IERlY2xhcmUgam9iX2Zkc1tdLgoKCSogam9iLmggKHN0cnVjdCBjaGlsZCk6IEFkZCBqb2JfdG9rZW4gZmllbGQgdG8gc3RvcmUgdGhlIHRva2VuIGZvcgoJdGhpcyBqb2IgKGlmIGFueSkuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IFdoZW4gYSBjaGlsZCBpcyBmdWxseSByZWFwZWQsIHJlbGVhc2UgdGhlCgl0b2tlbiBiYWNrIGludG8gdGhlIHBpcGUuCgkoZnJlZV9jaGlsZCk6IElmIHRoZSBjaGlsZCB0byBiZSBmcmVlZCBzdGlsbCBoYXMgYSB0b2tlbiwgcHV0IGl0CgliYWNrLgoJKG5ld19qb2IpOiBJbml0aWFsaXplIHRoZSBqb2JfdG9rZW4gbWVtYmVyLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogRm9yIGxvY2FsIGpvYnMsIGlmIHdlJ3JlIHVzaW5nIHRoZSBwaXBlLCBnZXQKCWEgdG9rZW4gYmVmb3JlIHdlIGNoZWNrIHRoZSBsb2FkLCBldGMuICBXZSBkbyB0aGlzIGJ5IHBlcmZvcm1pbmcgYQoJbm9uLWJsb2NraW5nIHJlYWQgaW4gYSBsb29wLiAgSWYgdGhlIHJlYWQgZmFpbHMsIG5vIHRva2VuIGlzCglhdmFpbGFibGUuICBEbyBhIHNlbGVjdCBvbiB0aGUgZmQgdG8gd2FpdCBmb3IgYSB0b2tlbi4gIFdlIG5lZWQgdG8KCXJlLWVuYWJsZSB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yIFNJR0NITEQgZXZlbiBpZiB3ZSBoYXZlIGEKCW5vbi1oYW5naW5nIHdhaXRwaWQoKSBvciB3YWl0MygpLCBzbyB0aGF0IHRoZSBzaWduYWwgd2lsbAoJaW50ZXJydXB0IHRoZSBzZWxlY3QoKSBhbmQgd2UgY2FuIHdha2UgdXAgdG8gcmVhcCBjaGlsZHJlbi4KCShjaGlsZF9oYW5kbGVyKTogUmUtZW5hYmxlIHRoZSBzaWduYWwgaGFuZGxlci4gIFRoZSBjb3VudCBpcyBzdGlsbAoJa2VwdCBhbHRob3VnaCBpdCdzIG5vdCBuZWVkZWQgb3IgdXNlZCB1bmxlc3MgeW91IGRvbid0IGhhdmUKCXdhaXRwaWQoKSBvciB3YWl0MygpLgoKMTk5OS0wNC0xMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogUmVzZXQgdGhlIGNvbnNpZGVyZWQgYml0IG9uIGFsbCB0aGUgbWFrZWZpbGVzIGlmCglzb21ldGhpbmcgZmFpbGVkIHRvIHVwZGF0ZTsgd2UgbmVlZCB0byBleGFtaW5lIHRoZW0gYWdhaW4gaWYgdGhleQoJYXBwZWFyIGFzIG5vcm1hbCB0YXJnZXRzIGluIG9yZGVyIHRvIGdldCB0aGUgcHJvcGVyIGVycm9yIG1lc3NhZ2UuCgoxOTk5LTA0LTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgZnJvbSBUaW0gTWFnaWxsIDx0aW0ubWFnaWxsQHRlbG9wcy5ndGUuY29tPi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IElmIHlvdSBoYXZlIGxhcmdlIG51bWJlcnMgb2YKCWRlcGVuZGVuY2llcyBhbmQgeW91IHJ1biBpbiBwYXJhbGxlbCwgbWFrZSBjYW4gc3BlbmQgY29uc2lkZXJhYmxlCgl0aW1lIGVhY2ggcGFzcyB0aHJvdWdoIHRoZSBncmFwaCBsb29raW5nIGF0IGJyYW5jaGVzIGl0IGhhcwoJYWxyZWFkeSBzZWVuLiAgU2luY2Ugd2Ugb25seSByZWFwX2NoaWxkcmVuKCkgd2hlbiBzdGFydGluZyBhIHBhc3MsCglub3QgaW4gdGhlIG1pZGRsZSwgaWYgYSBicmFuY2ggaGFzIGJlZW4gc2VlbiBhbHJlYWR5IGluIHRoYXQgcGFzcwoJbm90aGluZyBpbnRlcmVzdGluZyBjYW4gaGFwcGVuIHVudGlsIHRoZSBuZXh0IHBhc3MuICBTbywgd2UgdG9nZ2xlCglhIGJpdCBzYXlpbmcgd2hldGhlciB3ZSd2ZSBzZWVuIHRoaXMgdGFyZ2V0IGluIHRoaXMgcGFzcyBvciBub3QuCgkodXBkYXRlX2dvYWxfY2hhaW4pOiBJbml0aWFsbHkgc2V0IHRoZSBnbG9iYWwgY29uc2lkZXJlZCB0b2dnbGUgdG8KCTEsIHNpbmNlIGFsbCB0YXJnZXRzIGluaXRpYWxpemUgdGhlaXIgYm9vbGVhbiB0byAwLiAgQXQgdGhlIGVuZCBvZgoJZWFjaCBwYXNzLCB0b2dnbGUgdGhlIGdsb2JhbCBjb25zaWRlcmVkIHZhcmlhYmxlLgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogUGVyLWZpbGUgY29uc2lkZXJlZCB0b2dnbGUgYml0LgoJKiBmaWxlLmM6IE5ldyBnbG9iYWwgdG9nZ2xlIHZhcmlhYmxlIGNvbnNpZGVyZWQuCgoxOTk5LTA0LTA1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBhcnNjYW4uYyAoYXJfc2Nhbik6IEFkZGVkIHN1cHBvcnQgZm9yIEFSRlpNQUcgKGNvbXByZXNzZWQKCWFyY2hpdmVzPykgZm9yIERpZ2l0YWwgVU5JWCBDKysuICBJbmZvcm1hdGlvbiBwcm92aWRlZCBieQoJUGF0cmljawlFLiBLcm9nZWwgPHBla3JvZ2VsQG10dS5lZHU+LgoJKGFyX21lbWJlcl90b3VjaCk6IERpdHRvLgoKMTk5OS0wNC0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBJZjogYSkgd2UgZm91bmQgYSBmaWxlIGFuZCBiKSB3ZSBkaWRuJ3QKCWNyZWF0ZSBpdCBhbmQgYykgaXQncyBub3QgbWFya2VkIGFzIGFuIGltcGxpY2l0IHRhcmdldCBhbmQgZCkgaXQKCWlzIG1hcmtlZCBhcyBhbiBpbnRlcm1lZGlhdGUgdGFyZ2V0LCB0aGVuIGl0IHdhcyBzbyBtYXJrZWQgZHVlIHRvCglhbiAuSU5URVJNRURJQVRFIHNwZWNpYWwgdGFyZ2V0LCBidXQgaXQgYWxyZWFkeSBleGlzdGVkIGluIHRoZQoJZGlyZWN0b3J5LiAgSW4gdGhpcyBjYXNlLCB1bnNldCB0aGUgaW50ZXJtZWRpYXRlIGZsYWcgc28gd2Ugd29uJ3QKCWRlbGV0ZSBpdCB3aGVuIG1ha2UgaXMgZG9uZS4gIEl0IGZlZWxzIGxpa2UgaXQgd291bGQgYmUgY2xlYW5lciB0bwoJcHV0IHRoaXMgY2hlY2sgaW4gdXBkYXRlX2ZpbGVfMSgpIGJ1dCBJIHdvcnJ5IGl0J2xsIGdldCBtaXNzZWQuLi4KCjE5OTktMDQtMDEgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVXNlIGJjb3B5KCkgdG8gY29weQoJb3ZlcmxhcHBpbmcgc3RyaW5ncywgcmF0aGVyIHRoYW4gc3RyY3B5KCkuICBJU08gQyBzYXlzIHRoZSBsYXR0ZXIKCWlzIHVuZGVmaW5lZC4gIEZvdW5kIHRoaXMgaW4gYSBidWcgcmVwb3J0IGZyb20gMTk5NiEgIE91Y2ghCgoxOTk5LTAzLTMxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRsaW5lKTogSWdub3JlIGNhcnJpYWdlIHJldHVybnMgYXQgdGhlIGVuZCBvZiB0aGUKCWxpbmUsIHRvIGFsbG93IFdpbmRvd3MteSBDUkxGIGxpbmUgdGVybWluYXRvcnMuCgoxOTk5LTAzLTMwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHB1dCBidWlsZC5zaCBoZXJlLCBzaW5jZSBidWlsZC5zaC5pbiBkb2Vzbid0CglleGlzdCBpbml0aWFsbHkuICBUaGlzIGNhdXNlIGF1dG9yZWNvbmYgYW5kIGF1dG9tYWtlIHRvIGZhaWwgd2hlbgoJcnVuIG9uIGEgY2xlYW4gQ1ZTIGNoZWNrb3V0LiAgSW5zdGVhZCwgd2UgY3JlYXRlIGJ1aWxkLnNoIGluIHRoZQoJTWFrZWZpbGUgKHNlZSBiZWxvdykuCgoJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIEJVSUxUX1NPVVJDRVM7IHRoaXMgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgoJUHV0IHRob3NlIGZpbGVzIGRpcmVjdGx5IGludG8gRVhUUkFfRElTVCBzbyB0aGV5J3JlIGRpc3RyaWJ1dGVkLgoJQ3JlYXRlIGEgbG9jYWwgYnVpbGQgcnVsZSB0byBjcmVhdGUgYnVpbGQuc2guCglDcmVhdGUgYSBsb2NhbCBtYWludGFpbmVyLWNsZWFuIHJ1bGUgdG8gZGVsZXRlIGFsbCB0aGUgZnVua3kKCW1haW50YWluZXJzIGZpbGVzLgoKCSogbWFpbnRNYWtlZmlsZTogTWFrZWZpbGUuaW4gZGVwZW5kcyBvbiBSRUFETUUsIHNpbmNlIGF1dG9tYWtlCglmYWlscyBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgQWxzbyBkb24ndCByZW1vdmUgZ2xvYi9NYWtlZmlsZS5pbgoJaGVyZSwgYXMgaXQgY2F1c2VzIHByb2JsZW1zLgoKMTk5OS0wMy0yNiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBTdWJzdGl0dXRlIEdMT0JMSUIgaWYgd2UgbmVlZCB0aGUgbGluayB0aGUKCWdsb2IvbGliZ2xvYi5hIGxpYnJhcnkuCgkqIE1ha2VmaWxlLmFtIChtYWtlX0xEQUREKTogVXNlIHRoZSBzdWJzdCB2YXJpYWJsZSBHTE9CTElCIHNvIHdlCglkb24ndCBsaW5rIHRoZSBsb2NhbCBsaWJnbG9iLmEgYXQgYWxsIGlmIHdlIGRvbid0IG5lZWQgaXQuCgkqIGJ1aWxkLnRlbXBsYXRlOiBEb24ndCBjb21waWxlIGdsb2IvKi5vIHVubGVzcyB3ZSB3YW50IGdsb2JsaWIuCgkqIG1haW50TWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogU3Vic3RpdHV0ZSB0aGUgZ2xvYi8qLm8gZmlsZXMKCXNlcGFyYXRlbHkuCgoxOTk5LTAzLTI1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm86IFZhcmlvdXMgdHlwb3MgYW5kIGFkZGl0aW9ucywgcG9pbnRlZCBvdXQgYnkgSmFtZXMKCUcuIFNhY2sgPGpzYWNrQGRvcm5mZWxkLmNvbT4uCgoxOTk5LTAzLTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLnRleGluZm8gKEZ1bmN0aW9ucyk6IEFkZCBhIG5ldyBzZWN0aW9uIGRvY3VtZW50aW5nIHRoZSBuZXcKCSQoZXJyb3IgLi4uKSBhbmQgJCh3YXJuaW5nIC4uLikgZnVuY3Rpb25zLiAgQWxzbyB1cGRhdGVkIGNvcHlyaWdodAoJZGF0ZXMuCgkqIE5FV1M6IFVwZGF0ZWQgZm9yIHRoZSBuZXcgZnVuY3Rpb25zLgoJKiBmdW5jdGlvbi5jIChmdW5jX2Vycm9yKTogSW1wbGVtZW50IHRoZSBuZXcgJChlcnJvciAuLi4pIGFuZAoJJCh3YXJuaW5nIC4uLikgZnVuY3Rpb25zLgoJKGZ1bmN0aW9uX3RhYmxlKTogSW5zZXJ0IG5ldyBmdW5jdGlvbnMgaW50byB0aGUgdGFibGUuCgkoZnVuY19maXJzdHdvcmQpOiBEb24ndCBjYWxsIGZpbmRfbmV4dF90b2tlbigpIHdpdGggYXJndlswXQoJaXRzZWxmLCBzaW5jZSB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBwb2ludGVyLgoJKiBmdW5jdGlvbi5jOiBDbGVhbnVwcyBhbmQgc2xpZ2h0IGNoYW5nZXMgdG8gdGhlIG5ldyBtZXRob2Qgb2YKCWNhbGxpbmcgZnVuY3Rpb25zLgoKMTk5OS0wMy0yMCAgSGFuLVdlbiBOaWVuaHV5cyAgPGhhbndlbkBjcy51dS5ubD4KCgkqIGZ1bmN0aW9uLmM6IFJld3JpdGUgdG8gdXNlIG9uZSBDIGZ1bmN0aW9uIHBlciBtYWtlIGZ1bmN0aW9uLAoJaW5zdGVhZCBvZiBhIGh1Z2Ugc3dpdGNoIHN0YXRlbWVudC4gIEFsc28gYWxsb3dzIHNvbWUgY2xlYW51cCBvZgoJbXVsdGktYXJjaGl0ZWN0dXJlIGlzc3VlcywgYW5kIGEgY2xlYW5lciBBUEkgd2hpY2ggbWFrZXMgdGhpbmdzCglsaWtlIGZ1bmNfYXBwbHkoKSBzaW1wbGUuCgoJKiBmdW5jdGlvbi5jIChmdW5jX2FwcGx5KTogSW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4gIEV4cGFuZCBlaXRoZXIKCWEgYnVpbHRpbiBmdW5jdGlvbiBvciBhIG1ha2UgdmFyaWFibGUgaW4gdGhlIGNvbnRleHQgb2Ygc29tZQoJYXJndW1lbnRzLCBwcm92aWRlZCBhcyAkMSwgJDIsIC4uLiAkTi4KCjE5OTktMDMtMTkgIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CjE5OTktMDMtMTkgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQGRldi50aXZvbGkuY29tPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCB0cmVhdCBfYWxsXwoJYmFja3NsYXNoZXMgYXMgZXNjYXBlcywgb25seSB0aG9zZSB3aGljaCByZWFsbHkgZXNjYXBlIGEgc3BlY2lhbAoJY2hhcmFjdGVyLiAgVGhpcyBhbGxvd3MgbW9zdCBub3JtYWwgIlwiIGRpcmVjdG9yeSBzZXBhcmF0b3JzIHRvIGJlCgl0cmVhdGVkIG5vcm1hbGx5LgoKMTk5OS0wMy0wNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgYSBzeXN0ZW0gc3RyZHVwKCkuCgkqIG1pc2MuYyAoeHN0cmR1cCk6IENyZWF0ZWQuICBTdWdnZXN0aW9uIGJ5IEhhbi1XZW4gTmllbmh1eXMKCTxoYW53ZW5AY3MudXUubmw+LgoJKiBtYWtlLmg6IFByb3RvdHlwZSB4c3RyZHVwKCkuCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFVzZSBpdC4KCSogbWFpbi5jIChtYWluKTogVXNlIGl0LgoJKGZpbmRfYW5kX3NldF9kZWZhdWx0X3NoZWxsKTogVXNlIGl0LgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFVzZSBpdC4KCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KTogVXNlIGl0LgoKCSogTWFrZWZpbGUuYW0sIGNvbmZpZ3VyZS5pbjogVXNlIEFDX1NVQlNUX0ZJTEUgdG8gaW5zZXJ0IHRoZQoJbWFpbnRNYWtlZmlsZSBpbnN0ZWFkIG9mICJpbmNsdWRlIiwgdG8gYXZvaWQgYXV0b21ha2UgMS40CglpbmNvbXBhdGliaWxpdHkuCgoxOTk5LTAzLTA0ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBhbWlnYS5jLCBhbWlnYS5oLCBhci5jLCBhcnNjYW4uYywgY29tbWFuZHMuYywgY29tbWFuZHMuaCwKCSogZGVmYXVsdC5jLCBkZXAuaCwgZGlyLmMsIGV4cGFuZC5jLCBmaWxlLmMsIGZpbGVkZWYuaCwgZnVuY3Rpb24uYywKCSogaW1wbGljaXQuYywgam9iLmMsIGpvYi5oLCBtYWluLmMsIG1ha2UuaCwgbWlzYy5jLCByZWFkLmMsIHJlbWFrZS5jCgkqIHJlbW90ZS1jc3Rtcy5jLCByZW1vdGUtc3R1Yi5jLCBydWxlLmgsIHZhcmlhYmxlLmMsIHZhcmlhYmxlLmgsCgkqIHZwYXRoLmMsIE1ha2VmaWxlLmFtaSwgTk1ha2VmaWxlLnRlbXBsYXRlLCBidWlsZC50ZW1wbGF0ZSwKCSogbWFrZWZpbGUudm1zOiBVcGRhdGVkIEZTRiBhZGRyZXNzIGluIHRoZSBjb3B5cmlnaHQgbm90aWNlLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBJZiB3ZSBzZWUgYSBjb25kaXRpb25hbAoJdmFyaWFibGUgYW5kIHdlIGRlY2lkZSB0byBzZXQgaXQsIHJlLXR5cGUgaXQgYXMgcmVjdXJzaXZlIHNvIGl0Cgl3aWxsIGJlIGV4cGFuZGVkIHByb3Blcmx5IGxhdGVyLgoKMTk5OS0wMi0yMiAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogTkVXUzogTWVudGlvbiBuZXcgLkxJQlBBVFRFUk5TIGZlYXR1cmUuCgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBEZXNjcmliZSB0aGUgdXNlIGFuZAoJcmFtaWZpY2F0aW9ucyBvZiB0aGUgbmV3IC5MSUJQQVRURVJOUyB2YXJpYWJsZS4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IEluc3RlYWQgb2Ygc2VhcmNoaW5nIG9ubHkgZm9yIHRoZQoJaGFyZGNvZGVkIGV4cGFuc2lvbiAibGliWC5hIiBmb3IgYSBsaWJyYXJ5IHJlZmVyZW5jZSAiLWxYIiwgd2UKCW9idGFpbiBhIGxpc3Qgb2YgcGF0dGVybnMgZnJvbSB0aGUgLkxJQlBBVFRFUk5TIHZhcmlhYmxlIGFuZAoJc2VhcmNoIHRob3NlIGluIG9yZGVyLgoKCSogZGVmYXVsdC5jOiBBZGRlZCBhIG5ldyBkZWZhdWx0IHZhcmlhYmxlIC5MSUJQQVRURVJOUy4gIFRoZQoJZGVmYXVsdCBmb3IgVU5JWCBpcyAibGliJS5zbyBsaWIlLmEiLiAgQW1pZ2EgYW5kIERPUyB2YWx1ZXMgYXJlCglhbHNvIHByb3ZpZGVkLgoKCSogcmVhZC5jOiBSZW1vdmUgYm9ndXMgSEFWRV9HTE9CX0ggcmVmZXJlbmNlczsgYWx3YXlzIGluY2x1ZGUKCXZhbmlsbGEgZ2xvYi5oLgoKMTk5OS0wMi0yMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogU2V0IHZhbHVlIHRvIDAgdG8gYXZvaWQgZnJlZWluZyBpdC4KCSogdmFyaWFibGUuYyAocG9wX3ZhcmlhYmxlX3Njb3BlKTogRnJlZSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLgoJKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogRm9yIHNpbXBsZSB2YXJpYWJsZXMsIHVzZQoJYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCgpIHRvIGF2b2lkIHN0b21waW5nIG9uIHRoZSB2YXJpYWJsZQoJYnVmZmVyIHdoZW4gd2Ugc3RpbGwgbmVlZCBpdCBmb3Igb3RoZXIgdGhpbmdzLgoKCSogYXJzY2FuLmM6IE1vZGlmaWVkIHRvIHN1cHBvcnQgQUlYIDQuMyBiaWcgYXJjaGl2ZXMuICBUaGUgY2hhbmdlcwoJYXJlIGJhc2VkIG9uIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IFBoaWwgQWRhbXMKCTxwYWRhbXNAYXVzdGluLmlibS5jb20+LgoKMTk5OS0wMi0xOSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluOiBDaGVjayB0byBzZWUgaWYgdGhlIEdOVSBnbG9iIGxpYnJhcnkgaXMgYWxyZWFkeQoJaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uICBJZiBzbywgX2Rvbid0XyBhZGQgLUkuL2dsb2IgdG8gdGhlCgljb21waWxlIGxpbmUuICBVc2luZyB0aGUgc3lzdGVtIGdsb2IgY29kZSB3aXRoIHRoZSBsb2NhbCBoZWFkZXJzCglpcyB2ZXJ5IGJhZCBtb2pvIQoJUmV3cml0ZSBTQ0NTIG1hY3JvcyB0byB1c2UgbW9yZSBhdXRvY29uZiBmYWNpbGl0aWVzLgoKCSogTWFrZWZpbGUuYW06IE1vdmUgLUlnbG9iIG91dCBvZiBJTkNMVURFUzsgaXQnbGwgZ2V0IGFkZGVkIHRvCglDUFBGTEFHUyBieSBjb25maWd1cmUgbm93LgoJQXV0b21ha2UgMS40IGludHJvZHVjZWQgaXRzIG93biAiaW5jbHVkZSIgZmVhdHVyZSB3aGljaCBjb25mbGljdHMKCXdpdGggdGhlIG1haW50TWFrZWZpbGUgc3R1ZmYuICBBIGhhY2sgdGhhdCBzZWVtcyB0byB3b3JrIGlzIGFkZCBhCglzcGFjZSBiZWZvcmUgdGhlIGluY2x1ZGUgOi0vLgoKCSogYnVpbGQudGVtcGxhdGU6IE1vdmUgLUlnbG9iIG91dCBvZiB0aGUgY29tcGlsZSBsaW5lOyBpdCdsbCBnZXQKCWFkZGVkIHRvIENQUEZMQUdTIGJ5IGNvbmZpZ3VyZSBub3cuCgoxOTk5LTAyLTE2ICBHbGVubiBELiBXb2xmICA8R2xlbm5fV29sZkBlbWFpbC5zcHMubW90LmNvbT4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbVk1TXTogSW5pdGlhbGl6ZWQgVk1TX21lbWJlcl9kYXRlIGJlZm9yZQoJY2FsbGluZyBsYnIkZ2V0X2luZGV4IHNpbmNlIGlmIHRoZSBhcmNoaXZlIGlzIGVtcHR5LAoJVk1TX2dldF9tZW1iZXJfaW5mbyB3b24ndCBnZXQgY2FsbGVkIGF0IGFsbCwgYW5kIGFueSBsZWZ0b3ZlciBkYXRlCgl3aWxsIGJlIHVzZWQuICBUaGlzIGJ1ZyBzaG93cyB1cCBpZiBhbnkgbWVtYmVyIG9mIGFueSBhcmNoaXZlIGlzCgltYWRlLCBmb2xsb3dlZCBieSBhIGRlcGVuZGVuY3kgY2hlY2sgb24gYSBkaWZmZXJlbnQsIGVtcHR5CglhcmNoaXZlLgoKMTk5OC0xMi0xMyAgTWFydGluIFppbnNlciAgPHppbnNlckBkZWN1cy5kZWN1cy5kZT4KCgkqIGNvbmZpZy5oLXZtcyBbVk1TXTogU2V0IF9QT1NJWF9DX1NPVVJDRS4gIFJlZGVmaW5lIHRoZSBnZXRvcHQKCWZ1bmN0aW9ucyBzbyB3ZSBkb24ndCB1c2UgdGhlIGJyb2tlbiBWTVMgdmVyc2lvbnMuCgkqIG1ha2VmaWxlLmNvbSBbVk1TXTogQWxsb3cgZGVidWdnaW5nLgoJKiBkaXIuYyAoZGlyX3NldHVwX2dsb2IpIFtWTVNdOiBEb24ndCBleHRlcm4gc3RhdCgpIG9uIFZNUy4KCjE5OTgtMTEtMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHNpZ25hbWUuYyAoaW5pdF9zaWcpOiBDaGVjayB0aGUgc2l6ZXMgb2Ygc2lnbmFscyBiZWluZyBzZXQgdXAgdG8KCWF2b2lkIGFycmF5IG92ZXJ3cml0ZXMgKGlmIHRoZSBzeXN0ZW0gaGVhZGVycyBoYXZlIHByb2JsZW1zKS4KCjE5OTgtMTEtMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogQ2xlYW4gdXAgc29tZSBpbmRlbnRhdGlvbi4KCjE5OTgtMTEtMDggIEhhbi1XZW4gTmllbmh1eXMgIDxoYW53ZW5AY3MudXUubmw+CgoJKiBydWxlLmMgKHByaW50X3J1bGVfZGF0YV9iYXNlKTogRml4IGFyZ3VtZW50cyB0byBmYXRhbCgpIGNhbGwuCgoxOTk4LTEwLTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJZiB0aGUgY29tbWFuZCBsaXN0IHJlc29sdmVzIHRvIG5vCgljaGFycyBhdCBhbGwgKGUuZy46ICJmb286OyQoZW1wdHkpIikgdGhlbiBjb21tYW5kX3B0ciBpcyBOVUxMOwoJcXVpdCBlYXJseS4KCjE5OTgtMTAtMTIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBJZ25vcmUgbnVtX3BhdHRlcm5fcnVsZXMgaWYgaXQgaXMKCXplcm8uCgoxOTk4LTEwLTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBbGxvdyBub24tZW1wdHkgbGluZXMgdG8gZXhwYW5kIHRvIHRoZQoJZW1wdHkgc3RyaW5nIGFmdGVyIHZhcmlhYmxlLCBldGMuLCBleHBhbnNpb24sIGFuZCBiZSBpZ25vcmVkLgoKMTk5OC0wOS0yMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBPbmx5IGFkZCBDT01NQU5ELkNPTQoJIkBlY2hvIG9mZiIgbGluZSBmb3Igbm9uLVVOSVh5IHNoZWxscy4KCjE5OTgtMDktMDkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IEFkZCBpbiBtaXNzaW5nIEhBVkVfTUtTX1NIRUxMIHRlc3RzLgoKMTk5OC0wOS0wNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgd2UgaGl0IHRoZSAibWlzc2luZyBzZXBhcmF0b3IiIGVycm9yLAoJY2hlY2sgZm9yIHRoZSBjb21tb24gY2FzZSBvZiA4IHNwYWNlcyBpbnN0ZWFkIG9mIGEgVEFCIGFuZCBnaXZlIGFuCglleHRyYSBjb21tZW50IHRvIGhlbHAgcGVvcGxlIG91dC4KCjE5OTgtMDgtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogY29uZmlndXJlLmluIChBQ19TVFJVQ1RfU1RfTVRJTV9OU0VDKToKCVJlbmFtZWQgZnJvbSBBQ19TVFJVQ1RfU1RfTVRJTS4KCgkqIGFjaW5jbHVkZS5tNCAoQUNfU1RSVUNUX1NUX01USU1fTlNFQyk6ICBMaWtld2lzZS4KCVBvcnQgdG8gVW5peFdhcmUgMi4xLjIgYW5kIHBlZGFudGljIFNvbGFyaXMgMi42LgoKCSogYWNjb25maWcuaCAoU1RfTVRJTV9OU0VDKToKCVJlbmFtZWQgZnJvbSBIQVZFX1NUX01USU0sIHdpdGggYSBuZXcgbWVhbmluZy4KCgkqIGZpbGVkZWYuaCAoRklMRV9USU1FU1RBTVBfRlJPTV9TX0FORF9OUyk6CglVc2UgbmV3IFNUX01USU1fTlNFQyBtYWNyby4KCjE5OTgtMDgtMjYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBGb3IgYW55IGludGVybWVkaWF0ZSBmaWxlLCBub3QganVzdAoJc2Vjb25kYXJ5IG9uZXMsIHRyeSBpbXBsaWNpdCBhbmQgZGVmYXVsdCBydWxlcyBpZiBubyBleHBsaWNpdAoJcnVsZXMgYXJlIGdpdmVuLiAgSSdtIG5vdCBzdXJlIHdoeSB0aGlzIHdhcyByZXN0cmljdGVkIHRvCglzZWNvbmRhcnkgcnVsZXMgaW4gdGhlIGZpcnN0IHBsYWNlLgoKMTk5OC0wOC0yNCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS50ZXhpbmZvIChTcGVjaWFsIFRhcmdldHMpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBmb3IKCS5JTlRFUk1FRElBVEU6IGlmIHVzZWQgd2l0aCBubyBkZXBlbmRlbmNpZXMsIHRoZW4gaXQgZG9lcyBub3RoaW5nOwoJb2xkIGRvY3Mgc2FpZCBpdCBtYXJrZWQgYWxsIHRhcmdldHMgYXMgaW50ZXJtZWRpYXRlLCB3aGljaCBpdAoJZGlkbid0Li4uIGFuZCB3aGljaCB3b3VsZCBiZSBzaWxseSA6KS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogSWYgd2UgZmluZCBhIGRlcGVuZGVuY3kgaW4gb3VyCglpbnRlcm5hbCB0YWJsZXMsIG1ha2Ugc3VyZSBpdCdzIG5vdCBtYXJrZWQgaW50ZXJtZWRpYXRlIGJlZm9yZQoJYWNjZXB0aW5nIGl0IGFzIGEgZm91bmRfZmlsZVtdLgoKMTk5OC0wOC0yMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogYXIuYyAoYXJfZ2xvYik6IFVzZSBleGlzdGluZyBhbHBoYV9jb21wYXJlKCkgd2l0aCBxc29ydC4KCShhcl9nbG9iX2FscGhhY29tcGFyZSk6IFJlbW92ZSBpdC4KCglNb2RpZnkgUGF1bCBFZ2dlcnQncyBwYXRjaCBzbyB3ZSBkb24ndCBhYmFuZG9uIG9sZGVyIHN5c3RlbXM6CgoJKiBjb25maWd1cmUuaW46IFdhcm4gdGhlIHVzZXIgaWYgbmVpdGhlciB3YWl0cGlkKCkgbm9yIHdhaXQzKCkgaXMKCWF2YWlsYWJsZS4KCgkqIGpvYi5jIChXQUlUX05PSEFORyk6IERvbid0IHN5bnRheCBlcnJvciBvbiBhbmNpZW50IGhvc3RzLgoJKGNoaWxkX2hhbmRsZXIsIGRlYWRfY2hpbGRyZW4pOiBEZWZpbmUgdGhlc2UgaWYgV0FJVF9OT0hBTkcgaXMgbm90CglhdmFpbGFibGUuCgkocmVhcF9jaGlsZHJlbik6IE9ubHkgdHJhY2sgdGhlIGRlYWRfY2hpbGRyZW4gY291bnQgaWYgbm8KCVdBSVRfTk9IQU5HLiAgT3RoZXJ3aXNlLCBpdCdzIGEgYm9vbGVhbi4KCgkqIG1haW4uYyAobWFpbik6IEFkZCBiYWNrIHNpZ25hbCBoYW5kbGVyIGlmIG5vIFdBSVRfTk9IQU5HIGlzCglhdmFpbGFibGU7IG9ubHkgdXNlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgaWYgaXQgaXMuCgoxOTk4LTA4LTIwICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCglJbnN0YWxsIGEgbW9yZSByb2J1c3Qgc2lnbmFsIGhhbmRsaW5nIG1lY2hhbmlzbSBmb3Igc3lzdGVtcyB3aGljaAoJc3VwcG9ydCBpdC4KCgkqIGpvYi5jIChXQUlUX05PSEFORyk6IERlZmluZSB0byBhIHN5bnRheCBlcnJvciBpZiBvdXIgaG9zdAoJaXMgdHJ1bHkgYW5jaWVudDsgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgoJKGNoaWxkX2hhbmRsZXIsIGRlYWRfY2hpbGRyZW4pOiBSZW1vdmUuCgkocmVhcF9jaGlsZHJlbik6IERvbid0IHRyeSB0byBrZWVwIHNlcGFyYXRlIHRyYWNrIG9mIGhvdyBtYW55CglkZWFkIGNoaWxkcmVuIHdlIGhhdmUsIGFzIHRoaXMgaXMgdG9vIGJ1Zy1wcm9uZS4KCUp1c3QgYXNrIHRoZSBPUyBpbnN0ZWFkLgoJKHZtc0hhbmRsZUNoaWxkVGVybSk6IEZpeCB0eXBvIGluIGVycm9yIG1lc3NhZ2U7IGRvbid0IG1lbnRpb24KCWNoaWxkX2hhbmRsZXIuCgoJKiBtYWluLmMgKG1haW4pOiBNYWtlIHN1cmUgd2UncmUgbm90IGlnbm9yaW5nIFNJR0NITEQvU0lHQ0xEOwoJZG8gdGhpcyBlYXJseSwgYmVmb3JlIHdlIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIHN1YnByb2Nlc3MuCglKdXN0IHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvcjsgZG9uJ3QgaGF2ZSBvdXIgb3duIGhhbmRsZXIuCgoxOTk4LTA4LTE4ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKSBbX19NU0RPU19fLCBXSU5ET1dTMzJdOiBBZGQgY29kZSB0bwoJcmVjb2duaXplIGxpYnJhcnkgYXJjaGl2ZSBtZW1iZXJzIHdoZW4gZGVhbGluZyB3aXRoIGRyaXZlIHNwZWMKCW1lc3MuICBEaXNjb3ZlcnkgYW5kIGluaXRpYWwgZml4IGJ5IEdlb3JnZSBSYWN6IDxncmFjekBtaW5jb20uY29tPi4KCjE5OTgtMDgtMTggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN0ZGxpYi5oIGV4cGxpY2l0bHkgKHNvbWUgaG9zdHMgaGF2ZSBpdAoJYnV0IGRvbid0IGhhdmUgU1REQ19IRUFERVJTKS4KCSogbWFrZS5oOiBVc2UgSEFWRV9TVERMSUJfSC4gIENsZWFuIHVwIHNvbWUgI2RlZmluZXMuCgkqIGNvbmZpZy5hbWk6IFJlLWNvbXB1dGUgYmFzZWQgb24gbmV3IGNvbmZpZy5oLmluIGNvbnRlbnRzLgoJKiBjb25maWcuaC12bXM6IERpdHRvLgoJKiBjb25maWcuaC5XMzI6IERpdHRvLgoJKiBjb25maWdoLmRvczogRGl0dG8uCgoJKiBkaXIuYyAoZmluZF9kaXJlY3RvcnkpIFtXSU5ET1dTMzJdOiBXaW5kb3dzIHN0YXQoKSBmYWlscyBpZgoJZGlyZWN0b3J5IG5hbWVzIGVuZCB3aXRoIGBcJyBzbyBzdHJpcCBpdC4KCjE5OTgtMDgtMTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogQWRkZWQgY29weXJpZ2h0IHllYXIgdG8gdGhlIHByaW50ZWQgY29weS4gIFJlbW92ZWQKCXRoZSBwcmljZSBmcm9tIHRoZSBtYW51YWwuICBDaGFuZ2UgdGhlIHRvcC1sZXZlbCByZWZlcmVuY2UgdG8KCXJ1bm5pbmcgbWFrZSB0byBiZSAiSW52b2tpbmcgbWFrZSIgaW5zdGVhZCBvZiAibWFrZSBJbnZvY2F0aW9uIiwKCXRvIGNvbXBseSB3aXRoIEdOVSBkb2Mgc3RhbmRhcmRzLgoKCSogbWFrZS5oIChfX2Zvcm1hdF9fLCBfX3ByaW50Zl9fKTogQWRkZWQgc3VwcG9ydCBmb3IgdGhlc2UgaW4KCV9fYXR0cmlidXRlX18gbWFjcm8uCgkobWVzc2FnZSwgZXJyb3IsIGZhdGFsKTogVXNlIC4uLiBwcm90b3R5cGUgZm9ybSB1bmRlciBfX1NURENfXy4KCUFkZCBfX2Zvcm1hdF9fIGF0dHJpYnV0ZXMgZm9yIHByaW50Zi1zdHlsZSBmdW5jdGlvbnMuCgoJKiBjb25maWd1cmUuaW4gKEFDX0ZVTkNfVlBSSU5URik6IENoZWNrIGZvciB2cHJpbnRmKCkvX2RvcHJudCgpLgoKCSogbWlzYy5jIChtZXNzYWdlLCBlcnJvciwgZmF0YWwpOiBBZGQgcHJlcHJvY2Vzc29yIHN0dWZmIHRvIGVuYWJsZQoJY3JlYXRpb24gb2YgdmFyaWFibGUtYXJndW1lbnQgZnVuY3Rpb25zIHdpdGggYXBwcm9wcmlhdGUKCXByb3RvdHlwZXMsIHRoYXQgd29ya3Mgd2l0aCBBTlNJLCBwcmUtQU5TSSwgdmFyYXJncy5oLCBzdGRhcmcuaCwKCXYqcHJpbnRmKCksIF9kb3BybnQoKSwgb3Igbm9uZSBvZiB0aGUgYWJvdmUuICBDdWxsZWQgZnJvbSBHTlUKCWZpbGV1dGlscyBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQuCgkobWFrZWZpbGVfZXJyb3IsIG1ha2VmaWxlX2Vycm9yKTogUmVtb3ZlZCAobWVyZ2VkIGludG8gZXJyb3IoKSBhbmQKCWZhdGFsKCksIHJlc3BlY3RpdmVseSkuCgkqIGFtaWdhLmM6IFVzZSB0aGVtLgoJKiBhci5jOiBVc2UgdGhlbS4KCSogYXJzY2FuLmM6IFVzZSB0aGVtLgoJKiBjb21tYW5kcy5jOiBVc2UgdGhlbS4KCSogZXhwYW5kLmM6IFVzZSB0aGVtLgoJKiBmaWxlLmM6IFVzZSB0aGVtLgoJKiBmdW5jdGlvbi5jOiBVc2UgdGhlbS4KCSogam9iLmM6IFVzZSB0aGVtLgoJKiBtYWluLmM6IFVzZSB0aGVtLgoJKiBtaXNjLmM6IFVzZSB0aGVtLgoJKiByZWFkLmM6IFVzZSB0aGVtLgoJKiByZW1ha2UuYzogVXNlIHRoZW0uCgkqIHJlbW90ZS1jc3Rtcy5jOiBVc2UgdGhlbS4KCSogcnVsZS5jOiBVc2UgdGhlbS4KCSogdmFyaWFibGUuYzogVXNlIHRoZW0uCgoJKiBtYWtlLmggKHN0cnVjdCBmbG9jKTogTmV3IHN0cnVjdHVyZSB0byBzdG9yZSBmaWxlIGxvY2F0aW9uCglpbmZvcm1hdGlvbi4KCSogY29tbWFuZHMuaCAoc3RydWN0IGNvbW1hbmRzKTogVXNlIGl0LgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBpdC4KCSogY29tbWFuZHMuYzogVXNlIGl0LgoJKiBkZWZhdWx0LmM6IFVzZSBpdC4KCSogZmlsZS5jOiBVc2UgaXQuCgkqIGZ1bmN0aW9uLmM6IFVzZSBpdC4KCSogbWlzYy5jOiBVc2UgaXQuCgkqIHJlYWQuYzogVXNlIGl0LgoJKiBydWxlLmM6IFVzZSBpdC4KCjE5OTgtMDgtMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZmlsZWRlZi5oIChGSUxFX1RJTUVTVEFNUF9QUklOVF9MRU5fQk9VTkQpOiBBZGQgMTAsIGZvciBuYW5vc2Vjb25kcy4KCjE5OTgtMDgtMTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZmlsZWRlZi5oIChGTE9PUl9MT0cyX1NFQ09ORFNfUEVSX1lFQVIpOiBOZXcgbWFjcm8uCgkoRklMRV9USU1FU1RBTVBfUFJJTlRfTEVOX0JPVU5EKTogVGlnaHRlbiBib3VuZCwgYW5kIHRyeSB0bwoJbWFrZSBpdCBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KCjE5OTgtMDgtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFdlJ3ZlIGFscmVhZHkgdW5xdW90ZWQgYW55IGNvbG9uIGNoYXJzCglieSB0aGUgdGltZSB3ZSdyZSBkb25lIHJlYWRpbmcgdGhlIHRhcmdldHMsIHNvIGFycmFuZ2UgZm9yCglwYXJzZV9maWxlX3NlcSgpIG9uIHRoZSB0YXJnZXQgbGlzdCB0byBub3QgZG8gc28gYWdhaW4uCgoxOTk4LTA4LTA1ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGdsb2IvY29uZmlndXJlLmluIGRhdGEuICBXZSdsbCBoYXZlIHRoZSBnbG9iCgljb2RlIGluY2x1ZGUgdGhlIHJlZ3VsYXIgbWFrZSBjb25maWcuaCwgcmF0aGVyIHRoYW4gY3JlYXRpbmcgaXRzCglvd24uCgoJKiBnZXRsb2FkYXZnLmMgKG1haW4pOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gaW50LgoKMTk5OC0wOC0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IElnbm9yZSB1bmtub3duIGNoaWxkcmVuLgoKMTk5OC0wNy0zMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5oLCBmaWxlZGVmLmgsIGRlcC5oLCBydWxlLmgsIGNvbW1hbmRzLmgsIHJlbWFrZS5jOgoJQWRkIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucy4gIFNvbWUgcHJvdG90eXBlcyBuZWVkZWQgdG8gYmUgbW92ZWQKCWluIG9yZGVyIHRvIGdldCAjaW5jbHVkZSBvcmRlciByZWFzb25hYmxlLgoKMTk5OC0wNy0zMCAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFrZS5oOiBBZGRlZCBNSU4vTUFYLgoJKiBmaWxlZGVmLmg6IFVzZSB0aGVtOyByZW1vdmUgRklMRV9USU1FU1RBTVBfTUlOLgoKMTk5OC0wNy0zMCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgogICAgICAgIEFkZCBzdXBwb3J0IGZvciBzdWItc2Vjb25kIHRpbWVzdGFtcCByZXNvbHV0aW9uIG9uIGhvc3RzIHRoYXQKICAgICAgICBzdXBwb3J0IGl0IChqdXN0IFNvbGFyaXMgMi42LCBzbyBmYXIpLgoKCSogYWNjb25maWcuaCAoSEFWRV9TVF9NVElNLCB1aW50bWF4X3QpOiBOZXcgdW5kZWZzLgoJKiBhY2luY2x1ZGUubTQgKGptX0FDX0hFQURFUl9JTlRUWVBFU19ILCBBQ19TVFJVQ1RfU1RfTVRJTSwKICAgICAgICBqbV9BQ19UWVBFX1VJTlRNQVhfVCk6IE5ldyBkZWZ1bnMuCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBDb252ZXJ0IGZpbGUgdGltZXN0YW1wIHRvCiAgICAgICAgc2Vjb25kcyBiZWZvcmUgY29tcGFyaW5nIHRvIGFyY2hpdmUgdGltZXN0YW1wLiAgRXh0cmFjdCBtb2QKICAgICAgICB0aW1lIGZyb20gc3RydWN0IHN0YXQgdXNpbmcgRklMRV9USU1FU1RBTVBfU1RBVF9NT0RUSU1FLgoJKiBjb25maWd1cmUuaW4gKENfU1RSVUNUX1NUX01USU0sIGptX0FDX1RZUEVfVUlOVE1BWF9UKTogQWRkLgogICAgICAgIChBQ19DSEVDS19MSUIsIEFDX0NIRUNLX0ZVTkNTKTogQWRkIGNsb2NrX2dldHRpbWUuCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogVXNlIEZJTEVfVElNRVNUQU1QLCBub3QgdGltZV90LgogICAgICAgIChmaWxlX3RpbWVzdGFtcF9ub3csIGZpbGVfdGltZXN0YW1wX3NwcmludGYpOiBOZXcgZnVuY3Rpb25zLgogICAgICAgIChwcmludF9maWxlKTogUHJpbnQgZmlsZSB0aW1lc3RhbXBzIGFzIEZJTEVfVElNRVNUQU1QLCBub3QKICAgICAgICB0aW1lX3QuCgkqIGZpbGVkZWYuaDogSW5jbHVkZSA8aW50dHlwZXMuaD4gaWYgYXZhaWxhYmxlIGFuZCBpZiBIQVZFX1NUX01USU0uCiAgICAgICAgKEZJTEVfVElNRVNUQU1QLCBGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUsIEZJTEVfVElNRVNUQU1QX01JTiwKICAgICAgICBGSUxFX1RJTUVTVEFNUFNfUEVSX1MsIEZJTEVfVElNRVNUQU1QX0ZST01fU19BTkRfTlMsCiAgICAgICAgRklMRV9USU1FU1RBTVBfRElWLCBGSUxFX1RJTUVTVEFNUF9NT0QsIEZJTEVfVElNRVNUQU1QX1MsCiAgICAgICAgRklMRV9USU1FU1RBTVBfTlMsIEZJTEVfVElNRVNUQU1QX1BSSU5UX0xFTl9CT1VORCk6IE5ldyBtYWNyb3MuCiAgICAgICAgKGZpbGVfdGltZXN0YW1wX25vdywgZmlsZV90aW1lc3RhbXBfc3ByaW50Zik6IE5ldyBkZWNscy4KICAgICAgICAoc3RydWN0IGZpbGUubGFzdF9tdGltZSwgZl9tdGltZSwgZmlsZV9tdGltZV8xLCBORVdfTVRJTUUpOgogICAgICAgIHRpbWVfdCAtPiBGSUxFX1RJTUVTVEFNUC4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBMaWtld2lzZS4KCSogdnBhdGguYyAodnBhdGhfc2VhcmNoLCBzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogTGlrZXdpc2UuCgkqIG1haW4uYyAobWFpbik6IExpa2V3aXNlLgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwLCBuYW1lX210aW1lLCBsaWJyYXJ5X3NlYXJjaCwgZl9tdGltZSk6IExpa2V3aXNlLgogICAgICAgIChmX210aW1lKTogVXNlIGZpbGVfdGltZXN0YW1wX25vdyBpbnN0ZWFkIG9mIGB0aW1lJy4KICAgICAgICBQcmludCBmaWxlIHRpbWVzdGFtcCB3aXRoIGZpbGVfdGltZXN0YW1wX3NwcmludGYuCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBFeHRyYWN0IGZpbGUgdGltZSBzdGFtcCBmcm9tCiAgICAgICAgc3RydWN0IHN0YXQgd2l0aCBGSUxFX1RJTUVTVEFNUF9TVEFUX01PRFRJTUUuCgoxOTk4LTA3LTI4ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBWZXJzaW9uIDMuNzcgcmVsZWFzZWQuCgoJKiBkb3NidWlsZC5iYXQ6IENoYW5nZSB0byBET1MgQ1JMRiBsaW5lIHRlcm1pbmF0b3JzLgoKCSogbWFrZS1zdGRzLnRleGk6IFVwZGF0ZSBmcm9tIGxhdGVzdCB2ZXJzaW9uLgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb25zIFN1bW1hcnkpOiBDbGFyaWZ5IHRoYXQgdGhlIC1yIG9wdGlvbgoJYWZmZWN0cyBvbmx5IHJ1bGVzLCBub3QgYnVpbHRpbiB2YXJpYWJsZXMuCgoxOTk4LTA3LTI3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWtlLmg6IE1ha2UgX19hdHRyaWJ1dGVfXyByZXNvbHZlIHRvIGVtcHR5IGZvciBub24tR0NDIF9hbmRfCglmb3IgR0NDIHByZS0yLjUueC4KCgkqIG1pc2MuYyAobG9nX2FjY2Vzcyk6IFByaW50IFVJRC9HSUQncyBhcyB1bnNpZ25lZCBsb25nIGludCBmb3IKCW1heGltdW0gcG9ydGFiaWxpdHkuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IFByaW50IFBJRHMgYXMgbG9uZyBpbnQgZm9yIG1heGltdW0KCXBvcnRhYmlsaXR5LgoKMTk5OC0wNy0yNCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIE1ha2VmaWxlLkRPUyAoKl9JTlNUQUxMLCAqX1VOSU5TVEFMTCk6IFJlcGxhY2UgYHRydWUnIHdpdGggYDonLgoKMTk5OC0wNy0yNSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogVmVyc2lvbiAzLjc2Ljk0IHJlbGVhc2VkLgoKMTk5OC0wNy0yMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlnLmguVzMyLnRlbXBsYXRlOiBNYWtlIHN1cmUgYWxsIHRoZSAjZGVmaW5lcyBvZiBtYWNyb3MgaGVyZQoJaGF2ZSBhIHZhbHVlIChlLmcuLCB1c2UgYGAjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMScnIGluc3RlYWQgb2YKCWp1c3QgYGAjZGVmaW5lIEhBVkVfU1RSSU5HX0gnJy4gIEtlZXBzIHRoZSBwcmVwcm9jZXNzb3IgaGFwcHkgaW4KCXNvbWUgY29udGV4dHMuCgoJKiBtYWtlLmg6IFJlbW92ZSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQuLi4pKSBzdHVmZjsgdXNpbmcgaXQgd2l0aAoJdW4tcHJvdG90eXBlZCBmdW5jdGlvbnMgY2F1c2VzIG9sZGVyIEdDQydzIHRvIGZhaWwuCgoJKiBWZXJzaW9uIDMuNzYuOTMgcmVsZWFzZWQuCgoxOTk4LTA3LTIyICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBmaWxlLmMgKHByaW50X2ZpbGVfZGF0YV9iYXNlKTogRml4IGF2ZXJhZ2UgY2FsY3VsYXRpb24uCgoxOTk4LTA3LTIwICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKGRpZSk6IFBvc3Rwb25lIHRoZSBjaGRpcigpIHVudGlsIGFmdGVyCglyZW1vdmVfaW50ZXJtZWRpYXRlcygpIHNvIHRoYXQgaW50ZXJtZWRpYXRlIHRhcmdldHMgd2l0aCByZWxhdGl2ZQoJcGF0aG5hbWVzIGFyZSByZW1vdmVkIHByb3Blcmx5LgoKMTk5OC0wNy0xNyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZmlsZWRlZi5oIChzdHJ1Y3QgZmlsZSk6IE5ldyBmbGFnOiBkaWQgd2UgcHJpbnQgYW4gZXJyb3Igb3Igbm90PwoKCSogcmVtYWtlLmMgKG5vX3J1bGVfZXJyb3IpOiBOZXcgZnVuY3Rpb24gdG8gcHJpbnQgZXJyb3IgbWVzc2FnZXMsCglleHRyYWNlZCBmcm9tIHJlbWFrZV9maWxlKCkuCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBJbnZva2UgdGhlIG5ldyBlcnJvciBwcmludCBmdW5jdGlvbi4KCSh1cGRhdGVfZmlsZV8xKTogSW52b2tlIHRoZSBlcnJvciBwcmludCBmdW5jdGlvbiBpZiB3ZSBzZWUgdGhhdCB3ZQoJYWxyZWFkeSB0cmllZCB0aGlzIHRhcmdldCBhbmQgaXQgZmFpbGVkLCBidXQgdGhhdCBhbiBlcnJvciB3YXNuJ3QKCXByaW50ZWQgZm9yIGl0LiAgVGhpcyBjYW4gaGFwcGVuIGlmIGEgZmlsZSBpcyBpbmNsdWRlZCB3aXRoCgktaW5jbHVkZSBvciBzaW5jbHVkZSBhbmQgY291bGRuJ3QgYmUgYnVpbHQsIHRoZW4gbGF0ZXIgaXMgYWxzbwoJdGhlIGRlcGVuZGVuY3kgb2YgYW5vdGhlciB0YXJnZXQuICBXaXRob3V0IHRoaXMgY2hhbmdlLCBtYWtlIGp1c3QKCXNpbGVudGx5IHN0b3BzIDotLy4KCjE5OTgtMDctMTYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbzogUmVtb3ZlZCAiYmV0YSIgdmVyc2lvbiBkZXNpZ25hdG9yLgoJVXBkYXRlZCBJU0JOIGZvciB0aGUgbmV4dCBwcmludGluZy4KCjE5OTgtMDctMTMgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogYWNpbmNsdWRlLm00OiBOZXcgQUNfTEZTIG1hY3JvIHRvIGRldGVybWluZSBpZiBzcGVjaWFsIGNvbXBpbGVyCglmbGFncyBhcmUgbmVlZGVkIHRvIGFsbG93IGFjY2VzcyB0byBsYXJnZSBmaWxlcyAoZS5nLiwgU29sYXJpcyAyLjYpLgoJKiBjb25maWd1cmUuaW46IEludm9rZSBpdC4KCjE5OTgtMDctMDggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBNYWtlZmlsZS5ET1M6IHRyYWNrIGNoYW5nZXMgaW4gTWFrZWZpbGUuaW4uCgoxOTk4LTA3LTA3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1vdGUtY3N0bXMuYyAoc3RhcnRfcmVtb3RlX2pvYik6IE1vdmUgZ2V0aG9zdGJ5YWRkcigpIHRvIHRoZQoJdG9wIHNvIGhvc3QgaXMgaW5pdGlhbGl6ZWQgZWFybHkgZW5vdWdoLgoKCSogYWNpbmNsdWRlLm00OiBOZXcgZmlsZS4gIE5lZWQgc29tZSBzcGVjaWFsIGF1dG9jb25mIG1hY3JvcyB0bwoJY2hlY2sgZm9yIG5ldHdvcmsgbGlicmFyaWVzICgtbHNvY2tldCwgLWxuc2wsIGV0Yy4pIHdoZW4KCWNvbmZpZ3VyaW5nIEN1c3RvbXMuCgoJKiBjb25maWd1cmUuaW4gKG1ha2VfdHJ5X2N1c3RvbXMpOiBJbnZva2UgbmV3IG5ldHdvcmsgbGlicyBtYWNyby4KCjE5OTgtMDctMDYgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ni45MiByZWxlYXNlZC4KCgkqIFJFQURNRS5jdXN0b21zOiBBZGRlZCB0byB0aGUgZGlzdHJpYnV0aW9uLgoKCSogY29uZmlndXJlLmluIChtYWtlX3RyeV9jdXN0b21zKTogUmV3cml0ZSB0byByZXF1aXJlIGFuIGluc3RhbGxlZAoJQ3VzdG9tcyBsaWJyYXJ5LCByYXRoZXIgdGhhbiBsb29raW5nIGF0IHRoZSBidWlsZCBkaXJlY3RvcnkuCgoJKiBNYWtlZmlsZS5hbSAobWFuX01BTlMpOiBJbnN0YWxsIG1ha2UuMS4KCSogbWFrZS4xOiBSZW5hbWVkIGZyb20gbWFrZS5tYW4uCgoJKiBtYWtlLnRleGluZm8gKEJ1Z3MpOiBOZXcgbWFpbGluZyBsaXN0IGFkZHJlc3MgZm9yIEdOVSBtYWtlIGJ1ZwoJcmVwb3J0cy4KCjE5OTgtMDctMDIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ni45MSByZWxlYXNlZC4KCgkqIGRlZmF1bHQuYzogQWRkZWQgZGVmYXVsdCBydWxlIGZvciBuZXctc3R5bGUgUkNTIG1hc3RlciBmaWxlCglzdG9yYWdlOyBgYCUgOjogUkNTLyUnJy4KCUFkZGVkIGRlZmF1bHQgcnVsZXMgZm9yIERPUy1zdHlsZSBDKysgZmlsZXMgd2l0aCBzdWZmaXggIi5jcHAiLgoJVGhleSB1c2UgdGhlIG5ldyBMSU5LLmNwcCBhbmQgQ09NUElMRS5jcHAgbWFjcm9zLCB3aGljaCBhcmUgc2V0IGJ5CglkZWZhdWx0IHRvIGJlIGVxdWFsIHRvIExJTksuY2MgYW5kIENPTVBJTEUuY2MuCgoxOTk4LTA2LTE5ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVzZXQgZXhlY3V0ZV9ieV9zaGVsbCBhZnRlciBhbiBlbXB0eQogICAgICAgIGNvbW1hbmQgd2FzIHNraXBwZWQuCgoxOTk4LTA2LTA5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtYWluLmMgKG1haW4pOiBLZWVwIHRyYWNrIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZW5hbWUgY3JlYXRlZCB3aGVuCglyZWFkaW5nIGEgbWFrZWZpbGUgZnJvbSBzdGRpbiAoLWYtKSBhbmQgYXR0ZW1wdCB0byByZW1vdmUgaXQKCWFzIHNvb24gYXMgd2Uga25vdyB3ZSdyZSBub3QgZ29pbmcgdG8gcmUtZXhlYy4gIElmIHdlIGFyZSwgYWRkIGl0Cgl0byB0aGUgZXhlYydkIG1ha2UncyBjbWQgbGluZSB3aXRoICItbyIgc28gdGhlIGV4ZWMnZCBtYWtlIGRvZXNuJ3QKCXRyeSB0byByZWJ1aWxkIGl0LiAgV2Ugc3RpbGwgaGF2ZSBhIGhvbGU6IGlmIG1ha2UgcmUtZXhlY3MgdGhlbgoJdGhlIHRlbXBvcmFyeSBmaWxlIHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZC4gIFRvIGZpeCB0aGlzIHdlJ2QgbmVlZAoJYSBicmFuZCBuZXcgb3B0aW9uIHRoYXQgbWVhbnQgInJlYWxseSBkZWxldGUgdGhpcyIuCgkqIEFVVEhPUlMsIGdldG9wdC5jLCBnZXRvcHQxLmMsIGdldG9wdC5oLCBtYWluLmMgKHByaW50X3ZlcnNpb24pOgoJVXBkYXRlZCBtYWlsaW5nIGFkZHJlc3Nlcy4KCjE5OTgtMDYtMDggIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IEFuZHJlYXMgTHVpayA8bHVpa0Bpc2EuZGU+IHBvaW50cyBvdXQgdGhhdCB0aGUKCWNoZWNrIGZvciBtYWtlZmlsZSA6OiBydWxlcyB3aXRoIGNvbW1hbmRzIGJ1dCBubyBkZXBlbmRlbmNpZXMKCWNhdXNpbmcgYSBsb29wIHRlcm1pbmF0ZXMgaW5jb3JyZWN0bHkuCgoJKiBtYWludE1ha2VmaWxlOiBNYWtlIGEgdGVtcGxhdGUgZm9yIFJFQURNRS5ET1MgdG8gdXBkYXRlIHZlcnNpb24KCW51bWJlcnMuCgoxOTk4LTA1LTMwICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogRG9uJ3QgZnJlZSB0aGUgbWVtb3J5IGZvciB0aGUKCWRlcGVuZGVuY3kgc3RydWN0dXJlIHdoZW4gZHJvcHBpbmcgYSBjaXJjdWxhciBkZXBlbmRlbmN5LgoKMTk5OC0wNS0zMCAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGRpci5jIChmaWxlX2V4aXN0c19wLCBmaWxlX2ltcG9zc2libGVfcCwgZmlsZV9pbXBvc3NpYmxlKQoJW19fTVNET1NfXywgV0lORE9XUzMyXTogUmV0YWluIHRyYWlsaW5nIHNsYXNoIGluICJkOi8iLCBhbmQgbWFrZQoJZGlybmFtZSBvZiAiZDpmb28iIGJlICJkOiIuCgoxOTk4LTA1LTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEF2b2lkIHJ1bm5pbmcgcGFzdCBFT1Mgd2hlbiBzY2FubmluZwoJZmlsZSBuYW1lIGFmdGVyIGBpbmNsdWRlJy4KCjE5OTgtMDUtMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogbWFrZS50ZXhpbmZvIChGbGF2b3JzKTogQ29ycmVjdCBkZXNjcmlwdGlvbiBvZiBjb25kaXRpb25hbAoJYXNzaWdubWVudCwgd2hpY2ggaXMgbm90IGVxdWl2YWxlbnQgdG8gaWZuZGVmLgoJKFNldHRpbmcpOiBMaWtld2lzZS4KCjE5OTgtMDUtMjQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKTogc3RybmNtcCgpIG1pZ2h0IGJlIGltcGxlbWVudGVkIGFzIGEKCW1hY3JvLCBzbyBkb24ndCBwdXQgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbnMgaW5zaWRlIHRoZSBhcmd1bWVudHMKCWxpc3QuCgoxOTk4LTA1LTIzICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKSBbX19NU0RPU19fLCBXSU5ET1dTMzJdOiBTa2lwIGNvbG9ucyBpbgoJZHJpdmUgc3BlY3Mgd2hlbiBwYXJzaW5nIHRhcmdldHMsIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZXMgYW5kCglzdGF0aWMgcGF0dGVybiBydWxlcy4gIEEgY29sb24gY2FuIG9ubHkgYmUgcGFydCBvZiBkcml2ZSBzcGVjIGlmCglpdCBpcyBhZnRlciB0aGUgZmlyc3QgbGV0dGVyIGluIGEgdG9rZW4uCgoxOTk4LTA1LTIyICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpIFtfX01TRE9TX19dOiBBbGxvdyB1cCB0byAzIHNlYyBvZiBza2V3IGJlZm9yZQoJeWVsbGluZyBibG9vZHkgbXVyZGVyLgoKCSogZG9zYnVpbGQuYmF0OiBVc2UgLURJTkNMVURFRElSPSBhbmQgLURMSUJESVI9IHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IENvbWJpbmUgdGhlIHNwZWNpYWwgZmlsZS1oYW5kbGluZyBjb2RlCglmb3IgV0lORE9XUzMyIGFuZCBfX01TRE9TX18gaW50byBhIHNpbmdsZSBzbmlwcGV0LgoJKGdldF9uZXh0X213b3JkKSBbX19NU0RPU19fLCBXSU5ET1dTMzJdOiBBbGxvdyBhIHdvcmQgdG8gaW5jbHVkZSBhCgljb2xvbiBhcyBwYXJ0IG9mIGEgZHJpdmUgc3BlYy4KCgkqIGpvYi5jIChiYXRjaF9tb2RlX3NoZWxsKSBbX19NU0RPU19fXTogRGVjbGFyZS4KCjE5OTgtMDUtMjAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIFZlcnNpb24gMy43Ni45MCByZWxlYXNlZC4KCjE5OTgtMDUtMTkgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoTWFrZSBFcnJvcnMpOiBBZGRlZCBhIG5ldyBhcHBlbmRpeCBkZXNjcmliaW5nCgljb21tb24gZXJyb3JzIG1ha2UgbWlnaHQgZ2VuZXJhdGUgYW5kIGhvdyB0byByZXNvbHZlIHRoZW0gKG9yIGF0CglsZWFzdCBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQgdGhleSBtZWFuKS4KCgkqIG1haW50TWFrZWZpbGUgKE5NQUtFRklMRVMpOiBVc2UgdGhlIG5ldyBhdXRvbWFrZSAxLjMgZmVhdHVyZQoJdG8gY3JlYXRlIGEgZGVwZW5kZW5jeSBmaWxlIHRvIGNvbnN0cnVjdCBNYWtlZmlsZS5ET1MsIFNNYWtlZmlsZSwKCWFuZCBOTWFrZWZpbGUuCgkoLmRlcF9zZWdtZW50KTogR2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZnJhZ21lbnQgZmlsZS4KCjE5OTgtMDUtMTQgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UubWFuOiBNaW5vciBjaGFuZ2VzLgoKMTk5OC0wNS0xMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogZnVuY3Rpb24uYyAocGF0dGVybl9tYXRjaGVzLGV4cGFuZF9mdW5jdGlvbik6IENoYW5nZSB2YXJpYWJsZXMKCWFuZCB0eXBlcyBuYW1lZCAid29yZCIgdG8gc29tZXRoaW5nIGVsc2UsIHRvIGF2b2lkIGNvbXBpbGF0aW9uCglwcm9ibGVtcyBvbiBDcmF5IEM5MCBVbmljb3MuCgkqIHZhcmlhYmxlLmg6IE1vZGlmeSB0aGUgZnVuY3Rpb24gcHJvdG90eXBlLgoKMTk5OC0wNS0xMSAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKSBbV0lORE9XUzMyXTogVHVybiBvZmYKCWVjaG8gd2hlbiB1c2luZyBhIGJhdGNoIGZpbGUsIGFuZCBtYWtlIHN1cmUgdGhlIGNvbW1hbmQgZW5kcyBpbiBhCgluZXdsaW5lLgoKMTk5OC0wNS0wMyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogY29uZmlndXJlLmluIChtYWtlX3RyeV9jdXN0b21zKTogQWRkIHNvbWUgY3VzdG9tcyBmbGFncyBpZiB0aGUKCXVzZXIgY29uZmlndXJlcyBjdXN0b20gc3VwcG9ydC4KCgkqIGpvYi5jLCByZW1vdGUtY3N0bXMuYzogTWVyZ2UgaW4gY2hhbmdlcyBmb3IgY3VzdG9tIGxpYnJhcnkuCgoJKiByZW1vdGUtc3R1Yi5jOiBBZGQgb3B0aW9uIHRvIHN0dWIgc3RhcnRfcmVtb3RlX2pvYl9wKCkuCgoxOTk4LTA1LTAxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IEluc3RhbGwgVlBBVEgrIGhhbmRsaW5nIGZvciBhcmNoaXZlczsgdXNlCgl0aGUgaG5hbWUgZmllbGQgaW5zdGVhZCBvZiB0aGUgbmFtZSBmaWVsZCwgYW5kIHJlaGFzaCB3aGVuCglhcHByb3ByaWF0ZS4KCjE5OTgtMDQtMzAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBQcmludCBvdXQgYW55IHBhdHRlcm4tc3BlY2lmaWMKCXZhcmlhYmxlIHZhbHVlcyBpbnRvIHRoZSBydWxlcyBkYXRhYmFzZS4KCgkqIHZhcmlhYmxlLmMgKHByaW50X3ZhcmlhYmxlX3NldCk6IE1ha2UgdGhpcyB2YXJpYWJsZSBleHRlcm4sIHRvCgliZSBjYWxsZWQgYnkgcHJpbnRfcnVsZV9kYXRhX2Jhc2UoKSBmb3IgcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZXMuCgoJKiBtYWtlLnRleGluZm8gKFBhdHRlcm4tc3BlY2lmaWMpOiBEb2N1bWVudCBwYXR0ZXJuLXNwZWNpZmljCgl2YXJpYWJsZXMuCgoxOTk4LTA0LTI5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlKTogTWFrZSBzdGF0aWM7IGl0cyBvbmx5CgljYWxsZWQgaW50ZXJuYWxseS4gIExvb2sgdXAgdGhpcyB0YXJnZXQgaW4gdGhlIGxpc3Qgb2YKCXBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGVzIGFuZCBpbnNlcnQgdGhlIHZhcmlhYmxlIHNldCBpbnRvIHRoZQoJcXVldWUgdG8gYmUgc2VhcmNoZWQuCgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogQWRkIGEgbmV3IGZpZWxkIHRvIGhvbGQgdGhlCglwcmV2aW91c2x5LWZvdW5kIHBhdHRlcm4tc3BlY2lmaWMgdmFyaWFibGUgcmVmZXJlbmNlLiAgQWRkIGEgbmV3CglmbGFnIHRvIHJlbWVtYmVyIHdoZXRoZXIgd2UgYWxyZWFkeSBzZWFyY2hlZCBmb3IgdGhpcyBmaWxlLgoKCSogcnVsZS5oIChzdHJ1Y3QgcGF0dGVybl92YXIpOiBOZXcgc3RydWN0dXJlIGZvciBzdG9yaW5nCglwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlcy4gIERlZmluZSBuZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCgkqIHJ1bGUuYzogTmV3IHZhcmlhYmxlcyBwYXR0ZXJuX3ZhcnMgYW5kIGxhc3RfcGF0dGVybl92YXIgZm9yCglzdG9yYWdlIGFuZCBoYW5kbGluZyBvZiBwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlcy4KCShjcmVhdGVfcGF0dGVybl92YXIpOiBDcmVhdGUgYSBuZXcgcGF0dGVybi1zcGVjaWZpYyB2YXJpYWJsZSB2YWx1ZQoJc3RydWN0dXJlLgoJKGxvb2t1cF9wYXR0ZXJuX3Zhcik6IFRyeSB0byBtYXRjaCBhIHRhcmdldCB0byBvbmUgb2YgdGhlCglwYXR0ZXJuLXNwZWNpZmljIHZhcmlhYmxlIHZhbHVlcy4KCjE5OTgtMDQtMjIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1ha2UudGV4aW5mbyAoVGFyZ2V0LXNwZWNpZmljKTogRG9jdW1lbnQgdGFyZ2V0LXNwZWNpZmljCgl2YXJpYWJsZXMuCgoxOTk4LTA0LTIxICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogTWFkZSBnbG9iYWxseSB2aXNpYmxlLgoJKGxvb2t1cF92YXJpYWJsZV9pbl9zZXQpOiBOZXcgZnVuY3Rpb246IGxpa2UgbG9va3VwX3ZhcmlhYmxlIGJ1dAoJbG9vayBvbmx5IGluIGEgc3BlY2lmaWMgdmFyaWFibGUgc2V0LgoJKHRhcmdldF9lbnZpcm9ubWVudCk6IFVzZSBsb29rdXBfdmFyaWFibGVfaW5fc2V0KCkgdG8gZ2V0IHRoZQoJY29ycmVjdCBleHBvcnQgcnVsZXMgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlLgoJKGNyZWF0ZV9uZXdfdmFyaWFibGVfc2V0KTogQ3JlYXRlIGEgbmV3IHZhcmlhYmxlIHNldCwgYW5kIGp1c3QKCXJldHVybiBpdCB3aXRob3V0IGluc3RhbGxpbmcgaXQgYW55d2hlcmUuCgkocHVzaF9uZXdfdmFyaWFibGVfc2NvcGUpOiBSZWltcGxlbWVudCBpbiB0ZXJtcyBvZgoJY3JlYXRlX25ld192YXJpYWJsZV9zZXQuCgoJKiByZWFkLmMgKHJlY29yZF90YXJnZXRfdmFyKTogTGlrZSByZWNvcmRfZmlsZXMsIGJ1dCBpbnN0ZWFkIG9mCglmaWxlcyBjcmVhdGUgYSB0YXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgdmFsdWUgZm9yIGVhY2ggb2YgdGhlCglsaXN0ZWQgdGFyZ2V0cy4gIEludm9rZWQgZnJvbSByZWFkX21ha2VmaWxlKCkgd2hlbiB0aGUgdGFyZ2V0IGxpbmUKCXR1cm5zIG91dCB0byBiZSBhIHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZSBhc3NpZ25tZW50LgoKMTk5OC0wNC0xOSAgUGF1bCBELiBTbWl0aCA8cHNtaXRoQGdudS5vcmc+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZXdyaXRlIHRoZSBlbnRpcmUgdGFyZ2V0IHBhcnNpbmcKCXNlY3Rpb24gdG8gaW1wbGVtZW50IHRhcmdldC1zcGVjaWZpYyB2YXJpYWJsZXMuICBJbiBwYXJ0aWN1bGFyLCB3ZQoJY2Fubm90IGV4cGFuZCB0aGUgZW50aXJlIGxpbmUgYXMgc29vbiBhcyBpdCdzIHJlYWQgaW4sIHNpbmNlIHdlCgltYXkgd2FudCB0byBldmFsdWF0ZSBwYXJ0cyBvZiBpdCB3aXRoIGRpZmZlcmVudCB2YXJpYWJsZSBjb250ZXh0cwoJYWN0aXZlLiAgSW5zdGVhZCwgc3RhcnQgZXhwYW5kaW5nIGZyb20gdGhlIGJlZ2lubmluZyB1bnRpbCB3ZSBmaW5kCgl0aGUgYDonIChvciBgOjonKSwgdGhlbiBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGxpbmUgdGhpcyBpcyBhbmQKCWNvbnRpbnVlIGFwcHJvcHJpYXRlbHkuCgoJKiByZWFkLmMgKGdldF9uZXh0X213b3JkKTogTmV3IGZ1bmN0aW9uIHRvIHBhcnNlIGEgbWFrZWZpbGUgbGluZQoJYnkgIndvcmRzIiwgY29uc2lkZXJpbmcgYW4gZW50aXJlIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGFzIG9uZQoJd29yZC4gIFJldHVybiB0aGUgdHlwZSByZWFkIGluLCBhbG9uZyB3aXRoIGl0cyBzdGFydGluZyBwb3NpdGlvbgoJYW5kIGxlbmd0aC4KCShlbnVtIG1ha2Vfd29yZF90eXBlKTogVGhlIHR5cGVzIG9mIHdvcmRzIHRoYXQgYXJlIHJlY29nbml6ZWQgYnkKCWdldF9uZXh0X213b3JkKCkuCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUpOiBBZGQgYSBmbGFnIHRvIHNwZWNpZnkgYSBwZXItdGFyZ2V0Cgl2YXJpYWJsZS4KCgkqIGV4cGFuZC5jOiBNYWtlIHZhcmlhYmxlX2J1ZmZlciBnbG9iYWwuICBXZSBuZWVkIHRoaXMgZHVyaW5nIHRoZQoJbmV3IHBhcnNpbmcgb2YgdGhlIG1ha2VmaWxlLgoJKHZhcmlhYmxlX2V4cGFuZF9zdHJpbmcpOiBOZXcgZnVuY3Rpb24uICBMaWtlIHZhcmlhYmxlX2V4cGFuZCgpLAoJYnV0IHN0YXJ0IGF0IGEgc3BlY2lmaWMgcG9pbnQgaW4gdGhlIGJ1ZmZlciwgbm90IHRoZSBiZWdpbm5pbmcuCgkodmFyaWFibGVfZXhwYW5kKTogUmV3cml0ZSB0byBzaW1wbHkgY2FsbCB2YXJpYWJsZV9leHBhbmRfc3RyaW5nKCkuCgoxOTk4LTA0LTEzICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBBbGxvdyB0aGUgcmVidWlsZGluZyBtYWtlZmlsZXMKCXN0ZXAgdG8gdXNlIHBhcmFsbGVsIGpvYnMuICBOb3Qgc3VyZSB3aHkgdGhpcyB3YXMgZGlzYWJsZWQ6Cglob3BlZnVsbHkgd2Ugd29uJ3QgZmluZCBvdXQgOi0vLgoKMTk5OC0wNC0xMSAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBnbnUub3JnPgoKCSogbWFpbi5jIChtYWluKTogU2V0IHRoZSBDVVJESVIgbWFrZWZpbGUgdmFyaWFibGUuCgkqIG1ha2UudGV4aW5mbyAoUmVjdXJzaW9uKTogRG9jdW1lbnQgaXQuCgoxOTk4LTAzLTE3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGdudS5vcmc+CgoJKiBtaXNjLmMgKG1ha2VmaWxlX2ZhdGFsKTogSWYgRklMRSBpcyBuaWwsIGludm9rZSBwbGFpbiBmYXRhbCgpLgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBuZXcgZmVhdHVyZS4KCjE5OTgtMDMtMTAgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IHBhc3MgaW5jbHVkZWQsIHJlYnVpbHQgbWFrZWZpbGVzIHRvCglyZS1leGVjJ2QgbWFrZXMgd2l0aCAtby4gIFJlb3BlbnMgYSBwb3NzaWJsZSBsb29wLCBidXQgaXQgY2F1c2VkCgl0b28gbWFueSBwcm9ibGVtcy4KCjE5OTgtMDMtMDIgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAZ251Lm9yZz4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogSW1wbGVtZW50ID89LgoJKiBtYWtlLnRleGluZm8gKFNldHRpbmcpOiBEb2N1bWVudCBpdC4KCjE5OTgtMDItMjggIEVsaSBaYXJldHNraWkgIDxlbGl6QGlzLmVsdGEuY28uaWw+CgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZXNldCBleGVjdXRlX2J5X3NoZWxsIGFmdGVyIGFuIGVtcHR5CiAgICAgICAgY29tbWFuZCwgbGlrZSAiOiIsIGhhcyBiZWVuIHNlZW4uCgpUdWUgT2N0IDA3IDE1OjAwOjAwIDE5OTcgIFBoaWwgQnJvb2tzIDxwaGlsbGlwX2Jyb29rc0BocC5jb20+CgoJKiBtYWtlLmggW1dJTkRPV1MzMl06IG1ha2UgY2FzZSBzZW5zaXRpdml0eSBjb25maWd1cmFibGUKCSogZGlyLmMgW1dJTkRPV1MzMl06IG1ha2UgY2FzZSBzZW5zaXRpdml0eSBjb25maWd1cmFibGUKCSogUkVBRE1FLlczMjogRG9jdW1lbnQgY2FzZSBzZW5zaXRpdml0eQoJKiBjb25maWcuYW1pOiBTaGFyZSBjYXNlIHdhcnBpbmcgY29kZSB3aXRoIFdpbmRvd3MKCk1vbiBPY3QgIDYgMTg6NDg6NDUgQ0RUIDE5OTcgUm9iIFR1bGxvaCA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IEFkZGVkIHN1cHBvcnQgZm9yIE1LUyB0b29sa2l0IHNoZWxsCgkodHVybiBvbiBIQVZFX01LU19TSEVMTCkuCgkqIHJlYWQuYyBbV0lORE9XUzMyXTogRml4ZWQgYSBwcm9ibGVtIHdpdGggbXVsdGlwbGUgdGFyZ2V0IHJ1bGVzCiAJcmVwb3J0ZWQgYnkgR2lsYmVydCBDYXRpcG9uIChnY2F0aXBvbkB0aWJjby5jb20pLiAgSWYgbXVsdGlwbGUKIAlwYXRoIHRva2VucyBpbiBhIHJ1bGUgZGlkIG5vdCBoYXZlIGRyaXZlIGxldHRlcnMsIG1ha2Ugd291bGQKIAlpbmNvcnJlY3RseSBjb25jYXRlbmF0ZSB0aGUgMiB0b2tlbnMgdG9nZXRoZXIuCgkqIG1haW4uYy92YXJpYWJsZS5jIFtXSU5ET1dTMzJdOiBjaGFuZ2VkIFNIRUxMIGRldGVjdGlvbiBjb2RlIHRvCiAJZm9sbG93IHdoYXQgTVNET1MgZGlkLiBJbiBhZGRpdGlvbiB0byB3YXRjaGluZyBmb3IgU0hFTEwgdmFyaWFibGUKIAl1cGRhdGVzLCBtYWtlJ3MgbWFpbiB3aWxsIGF0dGVtcHQgdG8gZGVmYXVsdCB0aGUgdmFsdWUgb2YgU0hFTEwKIAliZWZvcmUgYW5kIGFmdGVyIG1ha2VmaWxlcyBhcmUgcGFyc2VkLgoJKiBqb2IuYy9qb2IuaCBbV0lORE9XUzMyXTogVGhlIGxhdGVzdCBjaGFuZ2VzIG1hZGUgdG8gZW5hYmxlIHVzZQogCW9mIHRoZSBHTlVXSU4zMiBzaGVsbCBmcm9tIG1ha2UgY291bGQgY2F1c2UgbWFrZSB0byBmYWlsIGR1ZSB0byBhCiAJY29uY3VycmVuY3kgY29uZGl0aW9uIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZCBwcm9jZXNzZXMuICBNYWtlCiAJbm93IGNyZWF0ZXMgYSBiYXRjaCBmaWxlIHBlciBqb2IgaW5zdGVhZCBvZiB0cnlpbmcgdG8gcmV1c2UgdGhlCiAJc2FtZSBzaW5nbGV0b24gYmF0Y2ggZmlsZS4KCSogam9iLmMvam9iLmgvZnVuY3Rpb24uYy9jb25maWcuaC5XMzIgW1dJTkRPV1MzMl06IFJlbmFtZWQgbWFjcm8KIAlmcm9tIEhBVkVfQ1lHTlVTX0dOVVdJTjMyX1RPT0xTIHRvIEJBVENIX01PREVfT05MWV9TSEVMTC4gUmV3b3JrZWQKIAlsb2dpYyB0byByZWR1Y2UgY29tcGxleGl0eS4gV0lORE9XUzMyIG5vdyB1c2VzIHRoZSB1bml4eV9zaGVsbAogCXZhcmlhYmxlIHRvIGRldGVjdCBCb3VybmUtc2hlbGwgY29tcGF0aWJsZSBlbnZpcm9ubWVudHMuIFRoZXJlIGlzCiAJYWxzbyBhIGJhdGNoX21vZGVfc2hlbGwgdmFyaWFibGUgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgbm90CiAJY29tbWFuZCBsaW5lcyBzaG91bGQgYmUgZXhlY3V0ZWQgdmlhIHNjcmlwdCBmaWxlcy4gQSBXSU5ET1dTMzIKIAlzeXN0ZW0gd2l0aCBubyBzaC5leGUgaW5zdGFsbGVkIHdvdWxkIGhhdmUgdW5peHlfc2hlbGwgc2V0IHRvCiAJRkFMU0UgYW5kIGJhdGNoX21vZGVfc2hlbGwgc2V0IHRvIFRSVUUuIElmIHlvdSBoYXZlIGEgdW5peHkgc2hlbGwKIAl0aGF0IGRvZXMgbm90IGJlaGF2ZSB3ZWxsIHdoZW4gaW52b2tpbmcgdGhpbmdzIHZpYSAnc2ggLWMgeHh4JywKIAl5b3UgbWF5IHdhbnQgdG8gdHVybiBvbiBCQVRDSF9NT0RFX09OTFlfU0hFTEwgYW5kIHNlZSBpZiB0aGluZ3MKIAlpbXByb3ZlLgoJKiBOTWFrZWZpbGU6IEFkZGVkIC9EIERFQlVHIHRvIGRlYnVnIGJ1aWxkIGZsYWdzIHNvIHRoYXQgdW5oYW5kbGVkCiAJZXhjZXB0aW9ucyBjb3VsZCBiZSBkZWJ1Z2dlZC4KCk1vbiBPY3QgIDYgMDA6MDQ6MjUgMTk5NyAgUm9iIFR1bGxvaCA8cm9iX3R1bGxvaEBkZXYudGl2b2xpLmNvbT4KCgkqIG1haW4uYyBbV0lORE9XUzMyXTogVGhlIGZ1bmN0aW9uIGRlZmluZV92YXJpYWJsZSgpIGRvZXMgbm90CiAJaGFuZGxlIE5VTEwuIFRlc3QgYmVmb3JlIGNhbGxpbmcgaXQgdG8gc2V0IFBhdGguCgkqIG1haW4uYyBbV0lORE9XUzMyXTogU2VhcmNoIFBhdGggYWdhaW4gYWZ0ZXIgbWFrZWZpbGVzIGhhdmUgYmVlbgoJcGFyc2VkIHRvIGRldGVjdCBzaC5leGUuCgkqIGpvYi5jIFtXSU5ET1dTMzJdOiBBZGRlZCBzdXBwb3J0IGZvciBDeWdudXMgR05VIFdJTjMyIHRvb2xzLgoJVG8gdXNlLCB0dXJuIG9uIEhBVkVfQ1lHTlVTX0dOVVdJTjMyX1RPT0xTIGluIGNvbmZpZy5oLlczMi4KCSogY29uZmlnLmguVzMyOiBBZGRlZCBIQVZFX0NZR05VU19HTlVXSU4zMl9UT09MUyBtYWNyby4KClN1biBPY3QgIDUgMjI6NDM6NTkgMTk5NyAgSm9obiBXLiBFYXRvbiA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogZ2xvYi9nbG9iLmMgKGdsb2JfaW5fZGlyKSBbVk1TXTogR2xvYmJpbmcgc2hvdWxkbid0IGJlCgljYXNlLXNlbnNpdGl2ZS4KCSogam9iLmMgKGNoaWxkX2V4ZWN1dGVfam9iKSBbVk1TXTogVXNlIGEgVk1TIC5jb20gZmlsZSBpZiB0aGUKCWNvbW1hbmQgY29udGFpbnMgYSBuZXdsaW5lIChlLmcuIGZyb20gYSBkZWZpbmUvZW5kZGVmIGJsb2NrKS4KCSogdm1zaWZ5LmMgKHZtc2lmeSk6IFJldHVybiByZWxhdGl2ZSBwYXRobmFtZXMgd2hlcmV2ZXIgcG9zc2libGUuCgkqIHZtc2lmeS5jICh2bXNpZnkpOiBBbiBpbnB1dCBzdHJpbmcgbGlrZSAiLi4vLi4iIHJldHVybnMgIlstLV0iLgoKV2VkIE9jdCAgMSAxNTo0NTowOSAxOTk3ICBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBOTWFrZWZpbGU6IENoYW5nZWQgbm1ha2UgdG8gJChNQUtFKS4KCSogc3VicHJvYy5iYXQ6IFRha2UgdGhlIG1ha2UgY29tbWFuZCBuYW1lIGZyb20gdGhlIGNvbW1hbmQKCWxpbmUuIElmIG5vIGNvbW1hbmQgbmFtZSB3YXMgZ2l2ZW4sIGRlZmF1bHQgdG8gbm1ha2UuCgkqIGpvYi5jIFtNU0RPUywgV0lORE9XUzMyXTogRml4IG1lbW9yeSBzdG9tcDogdGVtcG9yYXJ5IGZpbGUgbmFtZXMKCWFyZSBub3cgYWx3YXlzIGNyZWF0ZWQgaW4gaGVhcCBtZW1vcnkuCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IE5ldyBpbXBsZW1lbnRhdGlvbiBvZiBtYWtlX2NvbW1hbmRfbGluZSgpCgl3aGljaCBpcyBtb3JlIGNvbXBhdGlibGUgd2l0aCBkaWZmZXJlbnQgQm91cm5lIHNoZWxsIGltcGxlbWVudGF0aW9ucy4KCURlbGV0ZWQgdGhlIG5vdyBvYnNvbGV0ZSBmaXhfY29tbWFuZF9saW5lKCkgZnVuY3Rpb24uCgkqIG1haW4uYyBbV0lORE9XUzMyXTogQW55IGFyYml0cmFyeSBzcGVsbGluZyBvZiBQYXRoIGNhbiBiZQoJZGV0ZWN0ZWQuIE1ha2Ugd2lsbCBlbnN1cmUgdGhhdCB0aGUgc3BlY2lhbCBzcGVsbGluZyBgUGF0aCcgaXMKCWluc2VydGVkIGludG8gdGhlIGVudmlyb25tZW50IHdoZW4gdGhlIHBhdGggdmFyaWFibGUgaXMgcHJvcGFnYXRlZAoJd2l0aGluIGl0c2VsZiBhbmQgdG8gbWFrZSdzIGNoaWxkcmVuLgoJKiBtYWluLmMgW1dJTkRPV1MzMl06IERldGVjdGlvbiBvZiBzaC5leGUgd2FzIG9jY3VycmluZyB0b28KCXNvb24uIFRoZSAybmQgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2Ygc2guZXhlIG11c3QgY29tZSBhZnRlcgoJdGhlIGNhbGwgdG8gcmVhZF9hbGxfbWFrZWZpbGVzKCkuCgpGcmkgU2VwIDI2IDAxOjE0OjE4IDE5OTcgIDx6aW5zZXJAYXhwNjAyLmdzaS5kZT4KCgkqIG1ha2VmaWxlLmNvbSBbVk1TXTogRml4ZWQgZGVmaW5pdGlvbiBvZiBzeXMuCgkqIHJlYWRtZS52bXM6IENvbW1lbnRzIG9uIHdoYXQncyBjaGFuZ2VkIGxhdGVseS4KCkZyaSBTZXAgMjYgMDE6MTQ6MTggMTk5NyAgSm9obiBXLiBFYXRvbiA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBBbGxvdyBtYWtlIHRvIGZpbmQgZmlsZXMgbmFtZWQKCSJNQUtFRklMRSIgd2l0aCBubyBleHRlbnNpb24gb24gVk1TLgoJKiBmaWxlLmMgKGxvb2t1cF9maWxlKTogTG93ZXJjYXNlIGZpbGVuYW1lcyBvbiBWTVMuCgoxOTk3LTA5LTI5ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJld29ya2VkIHRhcmdldCBkZXRlY3Rpb24gYWdhaW47IHRoZSBvbGQKCXZlcnNpb24gaGFkIGFuIG9ic2N1cmUgcXVpcmsuCgpGcmkgU2VwIDE5IDA5OjIwOjQ5IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc2LjEgcmVsZWFzZWQuCgoJKiBNYWtlZmlsZS5hbTogQWRkIGxvYWRhdmcgZmlsZXMgdG8gY2xlYW4gcnVsZXMuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFJlbW92ZSBzdGFtcC1jb25maWc7IG5vIGxvbmdlciBuZWVkZWQuCgkqIE1ha2VmaWxlLmFtaSAoZGlzdGNsZWFuKTogRGl0dG8uCgkqIFNNYWtlZmlsZSAoZGlzdGNsZWFuKTogRGl0dG8uCgoJKiBtYWluLmMgKG1haW4pOiBBcmcgY291bnQgc2hvdWxkIGJlIGludCwgbm90IGNoYXIhICBNYWpvciBicmFpbm8uCgpUdWUgU2VwIDE2IDEwOjE4OjIyIDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc2IHJlbGVhc2VkLgoKVHVlIFNlcCAgMiAxMDowNzozOSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IFdoZW4gcHJvY2Vzc2luZyAkKHNoZWxsLi4uKQogIAl0cmFuc2xhdGUgYSBDUkxGIChcclxuKSBzZXF1ZW5jZSBhcyB3ZWxsIGFzIGEgbmV3bGluZSAoXG4pIHRvIGEKIAlzcGFjZS4gIEFsc28gcmVtb3ZlIGFuIGVuZGluZyBcclxuIHNlcXVlbmNlLgoJKiBtYWtlLnRleGluZm8gKFNoZWxsIEZ1bmN0aW9uKTogRG9jdW1lbnQgaXQuCgpGcmkgQXVnIDI5IDEyOjU5OjA2IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiB3MzIvcGF0aHN0dWZmLmMgKGNvbnZlcnRfUGF0aF90b193aW5kb3dzMzIpOiBGaXggcHJvYmxlbSB3aGVyZQogCXBhdGhzIHdoaWNoIGNvbnRhaW4gc2luZ2xlIGNoYXJhY3RlciBlbnRyaWVzIGxpa2UgYC4nIGFyZSBub3QKIAloYW5kbGVkIGNvcnJlY3RseS4KCgkqIFJFQURNRS5XMzI6IERvY3VtZW50IHBhdGggaGFuZGxpbmcgaXNzdWVzIG9uIFdpbmRvd3Mgc3lzdGVtcy4KCkZyaSBBdWcgMjkgMDI6MDE6MjcgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzUuOTMuCgpUaHUgQXVnIDI4IDE5OjM5OjA2IDE5OTcgIFJvYiBUdWxsb2ggIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiBqb2IuYyAoZXhlY19jb21tYW5kKSBbV0lORE9XUzMyXTogSWYgZXhlY19jb21tYW5kKCkgaXMgaW52b2tlZAogCWZyb20gbWFpbigpIHRvIHJlLWV4ZWMgbWFrZSwgdGhlIGNhbGwgdG8gZXhlY3ZwKCkgd291bGQKIAlpbmNvcnJlY3RseSByZXR1cm4gY29udHJvbCB0byBwYXJlbnQgc2hlbGwgYmVmb3JlIHRoZSBleGVjJ2VkCiAJY29tbWFuZCBjb3VsZCBydW4gdG8gY29tcGxldGlvbi4gSSBiZWxpZXZlIHRoaXMgaXMgYSBmZWF0dXJlIG9mCiAJdGhlIHdheSB0aGF0IGV4ZWN2cCgpIGlzIGltcGxlbWVudGVkIG9uIHRvcCBvZiBXSU5ET1dTMzIgQVBJcy4gVG8KIAlhbGxldmlhdGUgdGhlIHByb2JsZW0sIHVzZSB0aGUgc3VwcGxpZWQgcHJvY2VzcyBsYXVuY2ggZnVuY3Rpb24gaW4KIAl0aGUgc3ViX3Byb2MgbGlicmFyeSBhbmQgc3VzcGVuZCB0aGUgcGFyZW50IHByb2Nlc3MgdW50aWwgdGhlCiAJY2hpbGQgcHJvY2VzcyBoYXMgcnVuLiAgV2hlbiB0aGUgY2hpbGQgZXhpdHMsIGV4aXQgdGhlIHBhcmVudCBtYWtlCiAJd2l0aCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjaGlsZCBtYWtlLgoKVGh1IEF1ZyAyOCAxNzowNDo0NyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZSAoZGlzdGRpcik6IEZpeCBhIGxpbmUgdGhhdCBnb3Qgd3JhcHBlZCBpbgoJZW1haWwuCgoJKiBNYWtlZmlsZS5hbSAobG9hZGF2Zyk6IEdpdmUgdGhlIG5lY2Vzc2FyeSBjbWRsaW5lIG9wdGlvbnMgd2hlbgoJbGlua2luZyBsb2FkYXZnLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgcHN0YXRfZ2V0ZHluYW1pYyBmb3IgZ2V0bG9hZHZnIG9uIEhQLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKSBbVk1TLCBfQU1JR0FdOiBEb24ndCBwZXJmb3JtIGVtcHR5Cgljb21tYW5kIG9wdGltaXphdGlvbiBvbiB0aGVzZSBzeXN0ZW1zOyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UuCgpXZWQgQXVnIDI3IDE3OjA5OjMyIDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjkyCgpUdWUgQXVnIDI2IDExOjU5OjE1IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogQWRkICc5NyB0byBjb3B5cmlnaHQgeWVhcnMuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENoZWNrIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IGJlZm9yZSBsb29raW5nCglhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0LgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBFeGFtaW5lIHRoZSBsYXN0IGJ5dGUKCW9mIHRoZSBwcmV2aW91cyBhcmcsIG5vdCB0aGUgYnl0ZSBhZnRlciB0aGF0LgoKU2F0IEF1ZyAyMyAxOTk3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBOZXcgZmlsZSAoY29udmVydGVkIHRvIE1ha2VmaWxlLkRPUyBpbgoJdGhlIGRpc3RyaWJ1dGlvbikuCgoJKiBjb25maWd1cmUuYmF0OiBSZXdyaXRlIHRvIHVzZSBNYWtlZmlsZS5ET1MgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgICAgTWFrZWZpbGUuaW4uICBBZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgZnJvbSBvdXRzaWRlIG9mIHRoZSBzb3VyY2UKICAgICAgICBkaXJlY3RvcnkuICBGYWlsIGlmIHRoZSBlbnZpcm9ubWVudCBibG9jayBpcyB0b28gc21hbGwuCgoJKiBjb25maWdoLmRvczogVXNlIDxzeXMvY29uZmlnLmg+LgoKCSogUkVBRE1FLkRPUzogVXBkYXRlIGluc3RydWN0aW9ucy4KCkZyaSBBdWcgMjIgMTk5NyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCkgW19fTVNET1NfX106IERvbid0IHRlc3QgZm9yICIvYmluL3NoIgogICAgICAgIGxpdGVyYWxseSwgdXNlIHZhbHVlIG9mIHVuaXh5X3NoZWxsIGluc3RlYWQuCgoJKiBmaWxlZGVmLmggKE5FV19NVElNRSk6IFVzZSAxIGxlc3MgdGhhbiBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIGlmCiAgICAgICAgdGltZV90IGlzIHVuc2lnbmVkLgoKU2F0IEF1ZyAxNiAwMDo1NjoxNSAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKCSogdm1zaWZ5LmMgKHZtc2lmeSwgY2FzZSAxMSk6IEFmdGVyIHRyYW5zbGF0aW5nIGAuLicgZWxlbWVudHMsIHNldAogICAgICAgIG5zdGF0ZSB0byBOX09QRU4gaWYgdGhlcmUgYXJlIHN0aWxsIG1vcmUgZWxlbWVudHMgdG8gcHJvY2Vzcy4KICAgICAgICAodm1zaWZ5LCBjYXNlIDIpOiBBZnRlciB0cmFuc2xhdGluZyBgZm9vL2JhcicgdXAgdG8gdGhlIHNsYXNoLAogICAgICAgIHNldCBuc3RhdGUgdG8gTl9PUEVOLCBub3QgTl9ET1QuCgpGcmkgQXVnICA4IDE1OjE4OjA5IDE5OTcgIEpvaG4gVy4gRWF0b24gIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBkaXIuYyAodm1zc3RhdF9kaXIpOiBMZWF2ZSBuYW1lIHVubW9kaWZpZWQgb24gZXhpdC4KCSogbWFrZS5oIChQQVRIX1NFUEFSQVRPUl9DSEFSKTogU2V0IHRvIGNvbW1hIGZvciBWTVMuCgkqIHZwYXRoLmM6IEZpeCBjb21tZW50cyB0byByZWZlciB0byBwYXRoIHNlcGFyYXRvciwgbm90IGNvbG9uLgogICAgICAgIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogQXZvaWQgVW5peHkgc2xhc2ggaGFuZGxpbmcgZm9yIFZNUy4KClRodSBBdWcgIDcgMjI6MjQ6MDMgMTk5NyAgSm9obiBXLiBFYXRvbiAgPGp3ZUBiZXZvLmNoZS53aXNjLmVkdT4KCgkqIGFyLmMgW1ZNU106IERvbid0IGRlY2xhcmUgYXJfbWVtYmVyX3RvdWNoLgoJRGVsZXRlIFZNUyB2ZXJzaW9uIG9mIGFyX21lbWJlcl9kYXRlLgoJRW5hYmxlIG5vbi1WTVMgdmVyc2lvbnMgb2YgYXJfbWVtYmVyX2RhdGUgYW5kIGFyX21lbWJlcl9kYXRlXzEgZm9yCglWTVMgdG9vLgoJKiBhcnNjYW4uYyAoVk1TX2dldF9tZW1iZXJfaW5mbyk6IE5ldyBmdW5jdGlvbi4KCShhcl9zY2FuKTogUHJvdmlkZSB2ZXJzaW9uIGZvciBWTVMgc3lzdGVtcy4KCShhcl9uYW1lX2VxdWFsKTogU2ltcGx5IGNvbXBhcmUgbmFtZSBhbmQgbWVtIG9uIFZNUyBzeXN0ZW1zLgoJRG9uJ3QgZGVmaW5lIGFyX21lbWJlcl9wb3Mgb3IgYXJfbWVtYmVyX3RvdWNoIG9uIFZNUyBzeXN0ZW1zLgoKCSogY29uZmlnLmgtdm1zIChwaWRfdCwgdWlkX3QpOiBEb24ndCBkZWZpbmUuCgoJKiByZW1ha2UuYzogRGVsZXRlIGRlY2xhcmF0aW9uIG9mIHZtc19zdGF0LgoJKG5hbWVfbXRpbWUpOiBEb24ndCBjYWxsIHZtc19zdGF0LgoJKGZfbXRpbWUpIFtWTVNdOiBGdW5reSB0aW1lIHZhbHVlIG1hbmlwdWxhdGlvbiBubyBsb25nZXIgbmVjZXNzYXJ5LgoKCSogZmlsZS5jIChwcmludF9maWxlKTogW1ZNU10gVXNlIGN0aW1lLCBub3QgY3Z0X3RpbWUuCgoJKiBtYWtlLmggW1ZNU106IERvbid0IGRlZmluZSBQT1NJWC4KCgkqIG1ha2VmaWxlLmNvbSAoZmlsZWxpc3QpOiBJbmNsdWRlIGFyIGFuZCBhcnNjYW4uCglBbHNvIGluY2x1ZGUgdGhlbSBpbiB0aGUgbGluayBjb21tYW5kcy4KCURvbid0IGRlZmluZSBOT19BUkNISVZFUyBpbiBjYyBjb21tYW5kLgoKCSogbWFrZWZpbGUudm1zIChBUkNISVZFUywgQVJDSElWRVNfU1JDKTogVW5jb21tZW50LgoJKGRlZmluZXMpOiBEZWxldGUgTk9fQVJDSElWRVMgZnJvbSBsaXN0LgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBPbmx5IGNoZWNrIHRvIHNlZSBpZiBpbnRlcm1lZGlhdGUgZmlsZSBpcwoJb3V0IG9mIGRhdGUgaWYgaXQgYWxzbyBleGlzdHMgKGkuZS4sIG10aW1lICE9ICh0aW1lX3QpIC0xKS4KCgkqIHZtc2Rpci5oICh1X2xvbmcsIHVfc2hvcnQpOiBTa2lwIHR5cGVkZWZzIGlmIHVzaW5nIERFQyBDLgoKRnJpIEp1biAyMCAyMzowMjowNyAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogR2V0IFczMiBzdWJfcHJvYyB0byBoYW5kbGUgc2hlYmFuZwoJKCMhL2Jpbi9zaCkgaW4gc2NyaXB0IGZpbGVzIGNvcnJlY3RseS4KCUZpeGVkIGEgY291cGxlIG9mIG1lbW9yeSBsZWFrcy4KCUZpeGVkIHNlYXJjaCBvcmRlciBpbiBmaW5kX2ZpbGUoKSAodzMyL3N1YnByb2Mvc3ViX3Byb2MuYykgc28gdGhhdAoJZmlsZXMgd2l0aCBleHRlbnNpb25zIGFyZSBwcmVmZXJyZWQgb3ZlciBmaWxlcyB3aXRob3V0IGV4dGVuc2lvbnMuCglBZGRlZCBzZWFyY2ggZm9yIGZpbGVzIHdpdGggLmNtZCBleHRlbnNpb24gdG9vLgoJKiB3MzIvc3VicHJvYy9taXNjLmMgKGFycjJlbnZibGspOiBGaXhlZCBtZW1vcnkgbGVhay4KCk1vbiBBdWcgMTggMDk6NDE6MDggMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzUuOTEKCkZyaSBBdWcgMTUgMTM6NTA6NTQgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IFJlbWVtYmVyIHRvIGNvdW50IHRoZSBuZXdsaW5lIGFmdGVyIHRoZSBlbmRlZi4KClRodSBBdWcgMTQgMjM6MTQ6MzcgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYW55OiBSZXdyb3RlIGJ1aWxkcyB0byB1c2UgQXV0b21ha2UgMS4yLgoKCSogQVVUSE9SUzogTmV3IGZpbGUuCgkqIG1haW50TWFrZWZpbGU6IENvbnRhaW5zIG1haW50YWluZXItb25seSBtYWtlIHNuaXBwZXRzLgoJKiBHTlVtYWtlZmlsZTogVGhpcyBub3cgb25seSBydW5zIHRoZSBpbml0aWFsIGF1dG8qIHRvb2xzLgoJKiBDT1BZSU5HLHRleGluZm8udGV4LG1raW5zdGFsbGRpcnMsaW5zdGFsbC1zaDogUmVtb3ZlZCAob2J0YWluZWQKCWF1dG9tYXRpY2FsbHkgYnkgYXV0b21ha2UpLgoJKiBjb21wYXRNYWtlZmlsZTogUmVtb3ZlZCAobm90IG5lZWRlZCBhbnltb3JlKS4KCSogUkVBRE1FLGJ1aWxkLnNoLmluOiBSZW1vdmVkIChidWlsdCBmcm9tIHRlbXBsYXRlcykuCgkqIGNvbmZpZy5oLmluLE1ha2VmaWxlLmluOiBSZW1vdmVkIChidWlsdCBieSB0b29scykuCgpXZWQgQXVnIDEzIDAyOjIyOjA4IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFrZS50ZXhpbmZvOiBVcGRhdGVzIGZvciBET1MvV2luZG93cyBpbmZvcm1hdGlvbiAoRWxpIFphcmV0c2tpaSkKCSogUkVBRE1FLFJFQURNRS5ET1M6IERpdHRvLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEsZl9tdGltZSk6IEZpeCBHUEFUSCBoYW5kbGluZy4KCSogdnBhdGguYyAoZ3BhdGhfc2VhcmNoKTogRGl0dG8uCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogTmV3IGZ1bmN0aW9uOiByZWhhc2gsIGJ1dCBhbHNvIHJlbmFtZSB0bwoJdGhlIGhhc2huYW1lLgoJKiBmaWxlZGVmLmg6IERlY2xhcmUgaXQuCgoJKiB2YXJpYWJsZS5jIChtZXJnZV92YXJpYWJsZV9zZXRfbGlzdHMpOiBSZW1vdmUgZnJlZSgpIG9mIHZhcmlhYmxlCglzZXQ7IHNpbmNlIHZhcmlvdXMgZmlsZXMgY2FuIHNoYXJlIHZhcmlhYmxlIHNldHMgd2UgZG9uJ3Qgd2FudCB0bwoJZnJlZSB0aGVtIGhlcmUuCgpUdWUgQXVnIDEyIDEwOjUxOjU0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogY29uZmlndXJlLmluOiBSZXF1aXJlIGF1dG9jb25mIDIuMTIKCgkqIG1ha2UudGV4aW5mbzogUmVwbGFjZSBhbGwgImNkIHN1YmRpcjsgJChNQUtFKSIgZXhhbXBsZXMgd2l0aCBhCgltb3JlIHN0eWxpc3RpY2FsbHkgY29ycmVjdCAiY2Qgc3ViZGlyICYmICQoTUFLRSkiLgoKCSogbWFpbi5jOiBHbG9iYWwgdmFyaWFibGUgYGNsb2NrX3NrZXdfZGV0ZWN0ZWQnIGRlZmluZWQuCgkobWFpbik6IFByaW50IGZpbmFsIHdhcm5pbmcgaWYgaXQncyBzZXQuCgkqIG1ha2UuaDogRGVjbGFyZSBpdC4KCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBUZXN0IGFuZCBzZXQgaXQuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBBZGQgc3BlY2lhbCBvcHRpbWl6YXRpb25zIGZvcgogCSJkby1ub3RoaW5nIiBydWxlcywgY29udGFpbmluZyBqdXN0IHRoZSBzaGVsbCBuby1vcCAiOiIuICBUaGlzIGlzCiAJdXNlZnVsIGZvciB0aW1lc3RhbXAgZmlsZXMgYW5kIGNhbiBtYWtlIGEgcmVhbCBkaWZmZXJlbmNlIGlmIHlvdQogCWhhdmUgYSBsb3Qgb2YgdGhlbSAocmVxdWVzdGVkIGJ5IEZlcmd1cyBIZW5kZXJzb24gPGZqaEBjcy5tdS5vei5hdT4pLgoKCSogY29uZmlndXJlLmluLE1ha2VmaWxlLmluOiBSZXdyb3RlIHRvIHVzZSB0aGUgbmV3IGF1dG9jb25mCglwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIG1hY3JvLgoKCSogZnVuY3Rpb24uYyAoZnVuY3Rpb25fc3RyaXApOiBTdHJpcCBuZXdsaW5lcyBhcyB3ZWxsIGFzIHNwYWNlcwoJYW5kIFRBQnMuCgpGcmkgSnVuICA2IDIzOjQxOjA0IDE5OTcgIFJvYiBUdWxsb2ggPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogRGF0ZXN0YW1wcyBvbiBGQVQtYmFzZWQgZmlsZXMgYXJlIHJvdW5kZWQgdG8KCWV2ZW4gc2Vjb25kcyB3aGVuIHN0b3JlZCwgc28gaWYgdGhlIGRhdGUgY2hlY2sgZmFpbHMgb24gV0lORE9XUzMyCgkgc3lzdGVtcywgc2VlIGlmIHRoaXMgIm9mZi1ieS1vbmUiIGVycm9yIGlzIHRoZSBwcm9ibGVtLgoKCSogR2VuZXJhbDogSWYgeW91ciBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGNvcnJlY3RseQoJdGhlbiBhbGwgeW91ciB0aW1lc3RhbXBzIHdpbGwgYmUgb2ZmIGJ5IGhvdXJzLiAgU28sIHNldCBpdCEKCk1vbiBBcHIgIDcgMDI6MDY6MjIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBWZXJzaW9uIDMuNzUuMQoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBEZWZpbmUgJiB1c2UgdGhlICQoR0xPQikgdmFyaWFibGUgc28KCXRoYXQgaXQncyByZW1vdmVkIGNvcnJlY3RseSBmcm9tIGJ1aWxkLnNoLmluIHdoZW4gaXQncyBidWlsdC4KCgkqIGNvbmZpZ3VyZS5pbjogT24gU29sYXJpcyB3ZSBjYW4gdXNlIHRoZSBrc3RhdF8qKCkgZnVuY3Rpb25zIHRvCglnZXQgbG9hZCBhdmVyYWdlcyB3aXRob3V0IG5lZWRpbmcgc3BlY2lhbCBwZXJtaXNzaW9ucy4gIEFkZCBhCgljaGVjayBmb3IgLWxrc3RhdCB0byBzZWUgaWYgd2UgaGF2ZSBpdC4KCgkqIGdldGxvYWRhdmcuYyAoZ2V0bG9hZGF2Zyk6IFVzZSBIQVZFX0xJQktTVEFUIGluc3RlYWQgb2YgU1VONSBhcwoJdGhlIHRlc3QgdG8gZW5hYmxlIGtzdGF0X29wZW4oKSwgZXRjLiBwcm9jZXNzaW5nLgoKRnJpIEFwciAgNCAyMDoyMToxOCAxOTk3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogPGxvdHM+OiBGaXhlcyB0byB3b3JrIGluIHRoZSBESkdQUCBET1MgZW52aXJvbm1lbnQuCgpNb24gTWFyIDMxIDAyOjQyOjUyIDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogQWRkZWQgbmV3IGZ1bmN0aW9uICQod29yZGxpc3QpLgoKCSogbWFrZS50ZXhpbmZvIChGaWxlbmFtZSBGdW5jdGlvbnMpOiBEb2N1bWVudCAkKHdvcmRsaXN0KSBmdW5jdGlvbi4KCgkqIHZwYXRoLmMgKGJ1aWxkX3ZwYXRoX2xpc3RzKTogQ29uc3RydWN0IHRoZSBHUEFUSCB2YXJpYWJsZQoJaW5mb3JtYXRpb24gaW4gdGhlIHNhbWUgbWFubmVyIHdlIHVzZWQgdG8gY29uc3RydWN0IFZQQVRILgoJKGdwYXRoX3NlYXJjaCk6IE5ldyBmdW5jdGlvbiB0byBzZWFyY2ggR1BBVEguCgoJKiBtYWtlLmg6IERlY2xhcmUgdGhlIG5ldyBmdW5jdGlvbi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogQ2FsbCBpdCwgYW5kIGtlZXAgVlBBVEggaWYgaXQncyBmb3VuZC4KCgkqIG1ha2UudGV4aW5mbyAoU2VhcmNoIEFsZ29yaXRobSk6IERvY3VtZW50IEdQQVRIIHZhcmlhYmxlLgoKU3VuIE1hciAzMCAyMDo1NzoxNiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1haW4uYyAoaGFuZGxlX25vbl9zd2l0Y2hfYXJndW1lbnQpOiBEZWZpbmVkIHRoZSBNQUtFQ01ER09BTFMKCXZhcmlhYmxlIHRvIGNvbnRhaW4gdGhlIHVzZXIgb3B0aW9ucyBwYXNzZWQgaW4gb24gdGhlIGNtZCBsaW5lLgoKCSogbWFrZS50ZXhpbmZvIChHb2Fscyk6IERvY3VtZW50IE1BS0VDTURHT0FMUyB2YXJpYWJsZS4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogUHJpbnQgYSB3YXJuaW5nIGlmIHdlIGRldGVjdCBhIGNsb2NrIHNrZXcKCWVycm9yLCByYXRoZXIgdGhhbiBmYWlsaW5nLgoKCSogbWFpbi5jIChtYWluKTogSWYgd2UgcmVidWlsZCBhbnkgbWFrZWZpbGVzIGFuZCBuZWVkIHRvIHJlLWV4ZWMsCglhZGQgIi1vPG1rZmlsZT4iIG9wdGlvbnMgZm9yIGVhY2ggbWFrZWZpbGUgcmVidWlsdCB0byBhdm9pZAoJaW5maW5pdGUgbG9vcGluZy4KCkZyaSBNYXIgMjggMTU6MjY6MDUgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFRyYWNrIHdoZXRoZXIgdGhlIGxhc3QKCWFyZyBpbiB0aGUgY21kIHN0cmluZyB3YXMgZW1wdHkgb3Igbm90IChSb2xhbmQpLgoJKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBJZiB0aGUgc2hlbGwgbGluZSBpcyBlbXB0eSwKCWRvbid0IGRvIGFueXRoaW5nIChSb2xhbmQpLgoKCSogZ2xvYi9nbG9iLmgsZ2xvYi9nbG9iLmMsZ2xvYi9mbm1hdGNoLmMsZ2xvYi9mbm1hdGNoLmg6IEluc3RhbGwKCXRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIHRoZSBHTElCQyB2ZXJzaW9uIG9mIGdsb2IgKFVscmljaCBEcmVwcGVyKS4KCgkqIGdldGxvYWRhdmcuYyxtYWtlLXN0ZHMudGV4aTogTmV3IHZlcnNpb24gKFJvbGFuZCkuCgoJKiAoQUxMKTogQ2hhbmdlZCBXSU4zMiB0byBXMzIgb3IgV0lORE9XUzMyIChSTVMpLgoKTW9uIE1hciAyNCAxNTozMzozNCAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogUkVBRE1FLlczMjogRGVzY3JpYmUgcHJlbGltaW5hcnkgRkFUIHN1cHBvcnQuCgoJKiBidWlsZF93MzIuYmF0OiBVc2UgYSB2YXJpYWJsZSBmb3IgdGhlIGZpbmFsIGV4ZSBuYW1lLgoKCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KTogVzMyOiBGaW5kIHRoZSBmaWxlc3lzdGVtIHR5cGUuCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBXMzI6IGZvciBGQVQgZmlsZXN5c3RlbXMsIGFsd2F5cwoJcmVoYXNoIHNpbmNlIEZBVCBkb2Vzbid0IGNoYW5nZSBkaXJlY3RvcnkgbXRpbWUgb24gY2hhbmdlLgoKCSogbWFpbi5jIChoYW5kbGVfcnVudGltZV9leGNlcHRpb25zKTogVzMyOiBBZGQgYW4KIAlVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIgc28gdGhhdCB3aGVuIG1ha2UgYm9tYnMgZHVlIHRvIF5DIG9yIGEKIAlidWcsIGl0IHdvbid0IGNhdXNlIGEgR1VJIHJlcXVlc3RvciB0byBwb3AgdXAgdW5sZXNzIGRlYnVnIGlzCiAJdHVybmVkIG9uLgoJKG1haW4pOiBDYWxsIGl0LgoKTW9uIE1hciAyNCAwMDo1NzozNCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnLmguaW4sIGNvbmZpZy5hbWksIGNvbmZpZy5oLXZtcywgY29uZmlnLmgudzMyOgogCUNoZWNrIGZvciBtZW1tb3ZlKCkgZnVuY3Rpb24uCgoJKiBtYWtlLmggKGJjb3B5KTogSWYgbWVtbW92ZSgpIGF2YWlsYWJsZSwgZGVmaW5lIGJjb3B5KCkgdG8gdXNlIGl0LgoJT3RoZXJ3aXNlIGp1c3QgdXNlIGJjb3B5KCkuICBEb24ndCB1c2UgbWVtY3B5KCk7IGl0J3Mgbm90IGd1YXJhbnRlZWQKCXRvIGhhbmRsZSBvdmVybGFwcGluZyBtb3Zlcy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZpeCBzb21lIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzCgkocmVwb3J0ZWQgYnkgUHVyaWZ5KS4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVXNlIGJjb3B5KCkgbm90CglzdHJjcHkoKTsgc3RyY3B5KCkgaXNuJ3QgZ3VhcmFudGVlZCB0byBoYW5kbGUgb3ZlcmxhcHBpbmcgbW92ZXMuCgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIGluc3RhbGwtaW5mbyBvcHRpb24gYGAtLWluZm9kaXInJyB0bwoJYGAtLWluZm8tZGlyJycgZm9yIHVzZSB3aXRoIG5ldyB0ZXhpbmZvLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogJChiYXNlbmFtZSkgYW5kICQoc3VmZml4KSBzaG91bGQKCW9ubHkgc2VhcmNoIGZvciBzdWZmaXhlcyBhcyBmYXIgYmFjayBhcyB0aGUgbGFzdCBkaXJlY3RvcnkgKGUuZy4sCglvbmx5IHRoZSBmaW5hbCBmaWxlbmFtZSBpbiB0aGUgcGF0aCkuCgpTdW4gTWFyIDIzIDAwOjEzOjA1IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFrZS50ZXhpbmZvOiBBZGQgQGRpcmNhdGVnb3J5L0BkaXJlbnRyeSBpbmZvcm1hdGlvbi4KCShUb3ApOiBSZW1vdmUgcHJldmlvdXMgcmVmZXJlbmNlIHRvIChkaXIpIChmcm9tIFJNUykuCgkoU3RhdGljIFVzYWdlKTogQWRkICJhbGw6IiBydWxlIHRvIGV4YW1wbGUuCgkoQXV0b21hdGljIERlcGVuZGVuY2llcyk6IGZpeCAuZCBmaWxlIGNyZWF0aW9uIGV4YW1wbGUuCgoJKiBJbnN0YWxsIFZQQVRIKyBwYXRjaDoKCgkqIGZpbGVkZWYuaCAoc3RydWN0IGZpbGUpOiBBZGQgaW4gaG5hbWUgZmllbGQgdG8gc3RvcmUgdGhlIGhhc2hlZAogICAgICAgIGZpbGVuYW1lLCBhbmQgYSBmbGFnIHRvIHJlbWVtYmVyIGlmIHdlJ3JlIHVzaW5nIHRoZSB2cGF0aCBmaWxlbmFtZQoJb3Igbm90LiAgUmVuYW1lZCBhIGZldyBmdW5jdGlvbnMgZm9yIG1vcmUgY2xhcml0eS4KCgkqIGZpbGUuYyAobG9va3VwX2ZpbGUsZW50ZXJfZmlsZSxmaWxlX2hhc2hfZW50ZXIpOiBTdG9yZSBmaWxlbmFtZXMKCWluIHRoZSBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZWlyICJoYXNoIG5hbWUiLiAgV2UgY2FuIGNoYW5nZSB0aGlzCgl3aGlsZSBrZWVwaW5nIHRoZSBvcmlnaW5hbCB0YXJnZXQgaW4gIm5hbWUiLgoJKHJlaGFzaF9maWxlKTogUmVuYW1lZCBmcm9tICJyZW5hbWVfZmlsZSIgdG8gYmUgbW9yZSBhY2N1cmF0ZS4KCUNoYW5nZXMgdGhlIGhhc2ggbmFtZSwgYnV0IG5vdCB0aGUgdGFyZ2V0IG5hbWUuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IE1vZGlmeSAtZCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlsZWQKIAlWUEFUSCBpbmZvLiAgSWYgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkLCB1c2UgdGhlIFZQQVRIIG5hbWUuCgkoZl9tdGltZSk6IERvbid0IHNlYXJjaCBmb3IgdnBhdGggaWYgd2UncmUgaWdub3JpbmcgaXQuICBDYWxsCiAJcmVuYW1lZCBmdW5jdGlvbiByZWhhc2hfZmlsZS4gIENhbGwgbmFtZV9tdGltZSBpbnN0ZWFkIG9mCiAJZmlsZV9tdGltZSwgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlIHRoZSBmaWxlIHdhc24ndAogCWFjdHVhbGx5IHJlbmFtZWQuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IGlmIHdlIGZpbmQgYW4gaW1wbGljaXQgZmlsZSBpbgoJVlBBVEgsIHNhdmUgdGhlIG9yaWdpbmFsIG5hbWUgbm90IHRoZSBWUEFUSCBuYW1lLgoKCSogbWFrZS50ZXhpbmZvIChEaXJlY3RvcnkgU2VhcmNoKTogQWRkIGEgc2VjdGlvbiBvbiB0aGUgbmV3IFZQQVRICglmdW5jdGlvbmFsaXR5LgoKU3VuIERlYyAgMSAxODozNjowNCAxOTk2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGRpci5jIChmaWxlX2V4aXN0c19wLCBmaWxlX2ltcG9zc2libGUsIGZpbGVfaW1wb3NzaWJsZV9wKTogSWYKCWRpcm5hbWUgaXMgZW1wdHkgcmVwbGFjZSBpdCBieSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkuCglOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHdvcmsgKHlldCkgZm9yIFczMiwgQW1pZ2EsIG9yIFZNUy4KClR1ZSBPY3QgMDggMTM6NTc6MDMgMTk5NiAgUm9iIFR1bGxvaCAgPHR1bGxvaEB0aXZvbGkuY29tPgoKCSogbWFpbi5jIChtYWluKTogVzMyIGJ1ZyBmaXggZm9yIFBBVEggdmFycy4KClR1ZSBTZXAgMTcgMTk5NiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBmaWxlZGVmLmggKE5FV19NVElNRSk6IERvbid0IGFzc3VtZSB0aGF0IHRpbWVfdCBpcyBhIHNpZ25lZAogCTMyLWJpdCBxdWFudGl0eS4KCgkqIG1ha2UuaDogKENIQVJfQklULCBJTlRFR0VSX1RZUEVfU0lHTkVELCBJTlRFR0VSX1RZUEVfTUFYSU1VTSwKIAlJTlRFR0VSX1RZUEVfTUlOSU1VTSk6IE5ldyBtYWNyb3MuCgpUdWUgQXVnIDI3IDAxOjA2OjM0IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGJhYWxwZXJhemltLmZyb2IuY29tPgoKCSogVmVyc2lvbiAzLjc1IHJlbGVhc2VkLgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogUHJpbnQgb3V0IGJ1Zy1yZXBvcnRpbmcgYWRkcmVzcy4KCk1vbiBBdWcgMjYgMTk6NTU6NDcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAYmFhbHBlcmF6aW0uZnJvYi5jb20+CgoJKiBtYWluLmMgKHByaW50X2RhdGFfYmFzZSk6IERvbid0IGRlY2xhcmUgY3RpbWU7IGhlYWRlcnMgZG8gaXQgZm9yIHVzCiAJYWxyZWFkeS4KClN1biBKdWwgMjggMTU6Mzc6MDkgMTk5NiAgUm9iIFR1bGxvaCAodHVsbG9oQHRpdm9saS5jb20pCgoJKiB3MzIvcGF0aHN0dWZmLmM6IFR1cm5lZCBjb252ZXJ0X3ZwYXRoX3RvX3czMigpIGludG8gYQoJcmVhbCBmdW5jdGlvbi4gVGhpcyB3YXMgZG9uZSBzbyB0aGF0IFZQQVRIIGNvdWxkIGNvbnRhaW4KCXdoaXRlIHNwYWNlIHNlcGFyYXRlZCBwYXRobmFtZXMuIFBsZWFzZSBub3RlIHRoYXQgZGlyZWN0b3J5CglwYXRocyAoaW4gVlBBVEgvdnBhdGggY29udGV4dCkgY29udGFpbmluZyB3aGl0ZSBzcGFjZSBhcmUgbm90CglzdXBwb3J0ZWQgKGp1c3QgYXMgdGhleSBhcmUgbm90IHVuZGVyIFVuaXgpLiBTZWUgUkVBRE1FLlczMgoJZm9yIHN1Z2dlc3Rpb25zLgoKCSogdzMyL2luY2x1ZGUvcGF0aHN0dWZmLmg6IEFkZGVkIHByb3RvdHlwZSBmb3IgdGhlIG5ldwoJZnVuY3Rpb24gY29udmVydF92cGF0aF90b193MzIuIERlbGV0ZWQgbWFjcm8gZm9yIHNhbWUuCgoJKiBSRUFETUUuVzMyOiBBZGRlZCBzb21lIG5vdGVzIGFib3V0IHdoeSBJIGNob3NlIG5vdCB0byB0cnkKCWFuZCBzdXBwb3J0IHBhdGhuYW1lcyB3aGljaCBjb250YWluIHdoaXRlIHNwYWNlIGFuZCBzb21lCgl3b3JrYXJvdW5kIHN1Z2dlc3Rpb25zLgoKVGh1IEp1bCAyNSAxOTo1MzozMSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogR05VbWFrZWZpbGUgKG1rZGVwLW5vbGliKTogVXNlIC1NTSBvcHRpb24gdW5jb25kaXRpb25hbGx5LgoKCSogVmVyc2lvbiAzLjc0LjcuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBCYWNrIHVwIFAgdG8gcG9pbnQgYXQgbnVsbCB0ZXJtaW5hdG9yCgl3aGVuIGtpbGxpbmcgZmluYWwgc3BhY2UgYW5kIGRhc2ggYmVmb3JlIHNldHRpbmcgTUZMQUdTLgoKCUZyb20gUm9iZXJ0IEhvZWhuZSA8cm9iZXJ0LmhvZWhuZUBNYXRoZW1hdGlrLlRVLUNoZW1uaXR6LkRFPjoKCSogZGlyLmMgW19fTVNET1NfXyAmJiBESkdQUCA+IDFdOiBJbmNsdWRlIDxsaWJjL2Rvc2lvLmg+IGFuZCBkZWZpbgoJYF9fb3BlbmRpcl9mbGFncycgaW5pdGlhbGl6ZWQgdG8gMC4KCShkb3NpZnkpIFtfX01TRE9TX18gJiYgREpHUFAgPiAxXTogUmV0dXJuIG5hbWUgdW5jaGFuZ2VkIGlmIF9VU0VfTEZOLgoJKGZpbmRfZGlyZWN0b3J5KSBbX19NU0RPU19fICYmIERKR1BQID4gMV06IElmIF9VU0VfTEdOLCBzZXQKCV9fb3BlbmRpcl9mbGFncyB0byBfX09QRU5ESVJfUFJFU0VSVkVfQ0FTRS4KCgkqIHZtc2Z1bmN0aW9ucy5jICh2bXNfc3RhdCk6IGBzeXMkZGFzc2duIChEZXZDaGFuKTsnIGFkZGVkIGJ5IGtrYWVtcGYuCgoJKiBHTlVtYWtlZmlsZSAodzMyZmlsZXMpOiBBZGQgTk1ha2VmaWxlLgoKCSogTk1ha2VmaWxlIChMREZMQUdTX2RlYnVnKTogVmFsdWUgZml4ZWQgYnkgdHVsbG9oLgoKU2F0IEp1bCAyMCAxMjozMjoxMCAxOTk2ICBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpCgoJKiByZW1ha2UuYyAoZl9tdGltZSkgW1ZNU106IEFkZCBtaXNzaW5nIGBpZicgY29uZGl0aW9uYWwgZm9yIGZ1dHVyZQoJbW9kdGltZSBjaGVjay4KCSogY29uZmlnLmgtdm1zLCBtYWtlZmlsZS52bXMsIHJlYWRtZS52bXMsIHZtc2lmeS5jOiBVcGRhdGUgYWRkcmVzcy4KClNhdCBKdWwgMjAgMDU6Mjk6NDMgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSBhdXRvY29uZiAyLjEwIG9yIGxhdGVyLgoKRnJpIEp1bCAxOSAxNjo1NzoyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjYuCgoJKiBHTlVtYWtlZmlsZSAodzMyZmlsZXMpOiBOZXcgdmFyaWFibGUuCgkoZGlzdGZpbGVzKTogQWRkIGl0LgoJKiB3MzI6IFVwZGF0ZWQgYnkgUm9iIFR1bGxvaC4KCgkqIG1ha2VmaWxlLnZtcyAoTE9BRExJQkVTKTogRml4IHR5cG8uCgpTdW4gSnVsIDE0IDEyOjU5OjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEZpeCB1cCAjZWxzZSwgI2VuZGlmcy4KCgkqIGNvbmZpZ2guZG9zOiBEZWZpbmUgSEFWRV9ESVJFTlRfSCBpbnN0ZWFkIG9mIERJUkVOVC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogRG9uJ3QgY29tcGFyZSBNVElNRSB0byBOT1cgaWYgTVRJTUUgPT0gLTEuCgoJKiBWZXJzaW9uIDMuNzQuNS4KCgkqIG1haW4uYyAobWFpbik6IEV4aXQgd2l0aCBzdGF0dXMgMiB3aGVuIHVwZGF0ZV9nb2FsX2NoYWluIHJldHVybnMgMi4KClNhdCBKdW4gMjIgMTQ6NTY6MDUgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIF9zeXNfc2lnbGlzdC4KCSogbWFrZS5oIFtIQVZFX19TWVNfU0lHTElTVF06IERvbid0IHRlc3QgdGhpczsganVzdCBwdW50IGlmIHRoZXJlIGlzCglubyBzdHJzaWduYWwgb3Igc3lzX3NpZ2xpc3QuCgoJKiByZWFkLmMgKGNvbmRpdGlvbmFsX2xpbmUpOiBTdHJpcCB3cyBpbiBgaWZlcSAoYSAsIGIpJyBzbyBpdCBpcyB0aGUKCXNhbWUgYXMgYGlmZXEgKGEsIGIpJy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgY2FsbCBkaWUgaWYgaGFuZGxpbmdfZmF0YWxfc2lnbmFsLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBBbGxvdyByZW5hbWluZyA6OiB0byA6IHdoZW4gbGF0dGVyIGlzCglub24tdGFyZ2V0LCBvciA6IHRvIDo6IHdoZW4gZm9ybWVyIGlzIG5vbi10YXJnZXQuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBDYWxsIGJsb2NrX3NpZ3MuCgkoYmxvY2tfc2lncyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBzdGFydF9qb2JfY29tbWFuZC4KCShyZWFwX2NoaWxkcmVuKTogQmxvY2sgZmF0YWwgc2lnbmFscyBhcm91bmQgcmVtb3ZpbmcgZGVhZCBjaGlsZCBmcm9tCgljaGFpbiBhbmQgYWRqdXN0aW5nIGpvYl9zbG90c191c2VkLgoJKiBqb2IuaDogRGVjbGFyZSBibG9ja19zaWdzLgoKCSogcmVtb3RlLXN0dWIuYyAocmVtb3RlX3NldHVwLCByZW1vdGVfY2xlYW51cCk6IE5ldyAoZW1wdHkpIGZ1bmN0aW9ucy4KCSogbWFpbi5jIChtYWluKTogQ2FsbCByZW1vdGVfc2V0dXAuCgkoZGllKTogQ2FsbCByZW1vdGVfY2xlYW51cC4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogUXVpZXNjZW50IHZhbHVlIG9mIHNoZWxsX2Z1bmN0aW9uX3BpZCBpcwoJemVybywgbm90IC0xLgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogQWRkIDk2IHRvIGNvcHlyaWdodCB5ZWFycy4KClNhdCBKdW4gMTUgMjA6MzA6MDEgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiByZWFkLmMgKGZpbmRfY2hhcl91bnF1b3RlKTogQXZvaWQgY2FsbGluZyBzdHJsZW4gb24gZXZlcnkgY2FsbAoJanVzdCB0byB0aHJvdyBhd2F5IHRoZSB2YWx1ZSBtb3N0IG9mIHRoZSB0aW1lLgoKU3VuIEp1biAgMiAxMjoyNDowMSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogUHJlcGVuZCAnLScgdG8gQVJHVlsxXSBpZiBpdCBjb250YWlucwoJbm8gJz0nLCByZWdhcmRsZXNzIG9mIEFSR0MuCgkoZGVmaW5lX21ha2VmbGFncyk6IEVsaWRlIGxlYWRpbmcgJy0nIGZyb20gTUFLRUZMQUdTIHZhbHVlIGlmIGZpcnN0Cgl3b3JkIGlzIHNob3J0IG9wdGlvbiwgcmVnYXJkbGVzcyBvZiBXT1JEUy4KCldlZCBNYXkgMjIgMTc6MjQ6NTEgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2VmaWxlLnZtczogU2V0IExPQURMSUJFUy4KCSogbWFrZWZpbGUuY29tIChsaW5rX3VzaW5nX2xpYnJhcnkpOiBGaXggdHlwby4KCldlZCBNYXkgMTUgMTc6Mzc6MjYgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChwcmludF9kaXJfZGF0YV9iYXNlKTogVXNlICVsZCBkZXYgYW5kIGlubyBhbmQgY2FzdCB0aGVtIHRvCglsb25nLgoKV2VkIE1heSAxNSAxMDoxNDoxNCBDRFQgMTk5NiAgUm9iIFR1bGxvaCAgPHR1bGxvaEB0aXZvbGkuY29tPgoKCSogZGlyLmM6IFczMiBkb2VzIG5vdCBzdXBwb3J0IGlub2RlLiBGb3Igbm93LCBmdWxseSBxdWFsaWZpZWQKCXBhdGhuYW1lIGFsb25nIHdpdGggc3RfbXRpbWUgd2lsbCBiZSBrZXlzIGZvciBmaWxlcy4KCUZpeGVkIHByb2JsZW0gd2hlcmUgdnBhdGggY2FuIGJlIGNvbmZ1c2VkIHdoZW4gZmlsZXMKCWFyZSBhZGRlZCB0byBhIGRpcmVjdG9yeSBhZnRlciB0aGUgZGlyZWN0b3J5IGhhcyBhbHJlYWR5IGJlZW4KCXJlYWQgaW4uIFRoZSBjb2RlIG5vdyBhdHRlbXB0cyB0byByZXJlYWQgdGhlIGRpcmVjdG9yeSBpZiBpdAoJZGlzY292ZXJzIHRoYXQgdGhlIGRhdGVzdGFtcCBvbiB0aGUgZGlyZWN0b3J5IGhhcyBjaGFuZ2VkIHNpbmNlCglpdCB3YXMgY2FjaGVkIGJ5IG1ha2UuIFRoaXMgcHJvYmxlbSBvbmx5IHNlZW1zIHRvIG9jY3VyIG9uIFczMgoJcmlnaHQgbm93IHNvIGl0IGlzIGx1bXBlZCB1bmRlciBwb3J0ICNpZmRlZiBXSU5ET1dTMzIuCgoJKiBmdW5jdGlvbi5jOiBXMzI6IGNhbGwgc3VicHJvYyBsaWJyYXJ5IChDcmVhdGVQcm9jZXNzKCkpIGluc3RlYWQgb2YKCWZvcmsvZXhlYy4KCgkqIGpvYi5jOiBXMzI6IEFkZGVkIHRoZSBjb2RlIHRvIGRvIGZvcmsvZXhlYy93YWl0cGlkIHN0eWxlIHByb2Nlc3NpbmcKCW9uIFczMiBzeXN0ZW1zIHZpYSBjYWxscyB0byBzdWJwcm9jIGxpYnJhcnkuCgoJKiBtYWluLmM6IFczMjogU2V2ZXJhbCB0aGluZ3MgYWRkZWQgaGVyZS4gRmlyc3QsIHRoZXJlIGlzIGNvZGUKCWZvciBkZWFsaW5nIHdpdGggUEFUSCBhbmQgU0hFTEwgZGVmYXVsdHMuIE1ha2UgdHJpZXMgdG8gZmlndXJlCglvdXQgaWYgdGhlIHVzZXIgaGFzICVQQVRIJSBzZXQgaW4gdGhlIGVudmlyb25tZW50IGFuZCBzZXRzIGl0IHRvCgklUGF0aCUgaWYgaXQgaXMgbm90IHNldCBhbHJlYWR5LiBNYWtlIGFsc28gbG9va3MgdG8gc2VlIGlmIHNoLmV4ZQoJaXMgYW55d2hlcmUgdG8gYmUgZm91bmQuIENvZGUgcGF0aCB0aHJvdWdoIGpvYi5jIHdpbGwgY2hhbmdlCgliYXNlZCBvbiBleGlzdGVuY2Ugb2YgYSB3b3JraW5nIEJvdXJuZSBzaGVsbC4gVGhlIGNoZWNraW5nIGZvcgoJZGVmYXVsdCBzaGVsbCBpcyBkb25lIHR3aWNlOiBvbmNlIGJlZm9yZSBtYWtlZmlsZXMgYXJlIHJlYWQgaW4KCWFuZCBhZ2FpbiBhZnRlci4gRmFsbCBiYWNrIHRvIE1TRE9TIHN0eWxlIGV4ZWN1dGlvbiBtb2RlIGlmIG5vIHNoLmV4ZQoJaXMgZm91bmQuIEFsc28gYWRkZWQgc29tZSBkZWJ1ZyBzdXBwb3J0IHRoYXQgYWxsb3dzIHVzZXIgdG8gcGF1c2UgbWFrZQoJd2l0aCAtRCBzd2l0Y2ggYW5kIGF0dGFjaCBhIGRlYnVnZ2VyLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvcgoJZGVidWdnaW5nIHJlY3Vyc2l2ZSBjYWxscyB0byBtYWtlIHdoZXJlIHByb2JsZW1zIGFwcGVhciBvbmx5IGluIHRoZQoJc3ViLW1ha2UuCgoJKiBtYWtlLmg6IFczMjogQSBmZXcgbWFjcm9zIGFuZCBoZWFkZXIgZmlsZXMgZm9yIFczMiBzdXBwb3J0LgoKCSogbWlzYy5jOiBXMzI6IEFkZGVkIGEgZnVuY3Rpb24gZW5kX29mX3Rva2VuX3czMigpIHRvIGFzc2lzdAoJaW4gcGFyc2luZyBjb2RlIGluIHJlYWQuYy4KCgkqIHJlYWQuYzogVzMyOiBGaXhlcyBzaW1pbGFyIHRvIE1TRE9TIHdoaWNoIGFsbG93IGNvbG9uIHRvCglhcHBlYXIgaW4gZmlsZW5hbWVzLiBVc2Ugb2YgY29sb24gaW4gZmlsZW5hbWVzIHdvdWxkIG90aGVyd2lzZQoJY29uZnVzZSBtYWtlLgoKCSogcmVtYWtlLmM6IFczMjogQWRkZWQgaW5jbHVkZSBvZiBpby5oIHRvIGVsaW1pbmF0ZSBjb21waWxlcgoJd2FybmluZ3MuIEFkZGVkIHNvbWUgY29kZSB0byBkZWZhdWx0IExJQkRJUiBpZiBpdCBpcyBub3Qgc2V0CglvbiBXMzIuCgoJKiB2YXJpYWJsZS5jOiBXMzI6IEFkZGVkIHN1cHBvcnQgZm9yIGRldGVjdGluZyBQYXRoL1BBVEgKCWFuZCBjb252ZXJ0aW5nIHRoZW0gdG8gc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0cyBmb3IgbWFrZSdzCglpbnRlcm5hbCB1c2UuIE5ldyBmdW5jdGlvbiBzeW5jX1BhdGhfZW52aXJvbm1lbnQoKQoJd2hpY2ggaXMgY2FsbGVkIGluIGpvYi5jIGFuZCBmdW5jdGlvbi5jIGJlZm9yZSBjcmVhdGluZyBhIG5ldwoJcHJvY2Vzcy4gQ2FsbGVyIG11c3Qgc2V0IFBhdGggaW4gZW52aXJvbm1lbnQgc2luY2Ugd2UgZG9uJ3QKCWhhdmUgZm9yaygpIHRvIGRvIHRoaXMgZm9yIHVzLgoKCSogdnBhdGguYzogVzMyOiBBZGRlZCBkZXRlY3Rpb24gZm9yIGZpbGVuYW1lcyBjb250YWluaW5nCglmb3J3YXJkIG9yIGJhY2t3YXJkIHNsYXNoZXMuCgoJKiBOTWFrZWZpbGU6IFczMjogVmlzdWFsIEMgY29tcGF0aWJsZSBtYWtlZmlsZSBmb3IgdXNlIHdpdGggbm1ha2UuCglVc2UgdGhpcyB0byBidWlsZCBHTlUgbWFrZSB0aGUgZmlyc3QgdGltZSBvbiBXaW5kb3dzIE5UIG9yIFdpbmRvd3MgOTUuCgoJKiBSRUFETUUuVzMyOiBXMzI6IENvbnRhaW5zIHNvbWUgaGVscGZ1bCBub3Rlcy4KCgkqIGJ1aWxkX3czMi5iYXQ6IFczMjogSWYgeW91IGRvbid0IGxpa2Ugbm1ha2UsIHVzZSB0aGlzIHRoZSBmaXJzdAoJdGltZSB5b3UgYnVpbGQgR05VIG1ha2Ugb24gV2luZG93cyBOVCBvciBXaW5kb3dzIDk1LgoKCSogY29uZmlnLmguVzMyOiBXMzIgdmVyc2lvbiBvZiBjb25maWcuaAoKCSogc3VicHJvYy5iYXQ6IFczMjogQSBiYXQgZmlsZSB1c2VkIHRvIGJ1aWxkIHRoZQoJc3VicHJvYyBsaWJyYXJ5IGZyb20gdGhlIHRvcC1sZXZlbCBOTWFrZWZpbGUuIE5lZWRlZCBiZWNhdXNlCglXSW5kb3dzIDk1IChubWFrZSkgZG9lc24ndCBhbGxvdyB5b3UgdG8gY2QgaW4gYSBtYWtlIHJ1bGUuCgoJKiB3MzIvaW5jbHVkZS9kaXJlbnQuaAoJKiB3MzIvY29tcGF0L2RpcmVudC5jOiBXMzI6IG9wZW5kaXIsIHJlYWRkaXIsIGNsb3NlZGlyLCBldGMuCgoJKiB3MzIvaW5jbHVkZS9wYXRoc3R1ZmYuaDogVzMyOiB1c2VkIGJ5IGZpbGVzIG5lZWRlZCBmdW5jdGlvbnMKCWRlZmluZWQgaW4gcGF0aHN0dWZmLmMgKHByb3RvdHlwZXMpLgoKCSogdzMyL2luY2x1ZGUvc3ViX3Byb2MuaDogVzMyOiBwcm90b3R5cGVzIGZvciBzdWJwcm9jLmxpYiBmdW5jdGlvbnMuCgoJKiB3MzIvaW5jbHVkZS93MzJlcnIuaDogVzMyOiBwcm90b3R5cGVzIGZvciB3MzJlcnIuYy4KCgkqIHczMi9wYXRoc3R1ZmYuYzogVzMyOiBGaWxlIGFuZCBQYXRoL1BhdGggY29udmVyc2lvbiBmdW5jdGlvbnMuCgoJKiB3MzIvc3VicHJvYy9idWlsZC5iYXQ6IFczMjogYnVpbGQgc2NyaXB0IGZvciBzdWJwcm9jIGxpYnJhcnkKCWlmIHlvdSBkb24ndCB3aXNoIHRvIHVzZSBubWFrZS4KCgkqIHczMi9zdWJwcm9jL05NYWtlZmlsZTogVzMyOiBWaXN1YWwgQyBjb21wYXRpYmxlIG1ha2VmaWxlIGZvciB1c2UKCXdpdGggbm1ha2UuIFVzZWQgdG8gYnVpbGQgc3VicHJvYyBsaWJyYXJ5LgoKCSogdzMyL3N1YnByb2MvbWlzYy5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzdXBwb3J0IGNvZGUKCSogdzMyL3N1YnByb2MvcHJvYy5oOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzdXBwb3J0IGNvZGUKCSogdzMyL3N1YnByb2Mvc3ViX3Byb2MuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc291cmNlIGNvZGUKCSogdzMyL3N1YnByb2MvdzMyZXJyLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoKTW9uIE1heSAxMyAxNDozNzo0MiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjQuCgoJKiBHTlVtYWtlZmlsZSAodm1zZmlsZXMpOiBGaXggdHlwby4KCgkqIEdOVW1ha2VmaWxlIChhbWlnYWZpbGVzKTogQWRkIGFtaWdhLmguCgpTdW4gTWF5IDEyIDE5OjE5OjQzIDE5OTYgIEFhcm9uIERpZ3VsbGEgICA8ZGlndWxsYUBmaC1rb25zdGFuei5kZT4KCgkqIGRpci5jOiBOZXcgZnVuY3Rpb246IGFtaWdhZnkoKSB0byBmb2xkIGZpbGVuYW1lcwoJQ2hhbmdlcyBIQVNIKCkgdG8gSEFTSEkoKSB0byBmb2xkIGZpbGVuYW1lcyBvbiBBbWlnYS4KCVN0cmluZ2NvbXBhcmVzIHVzZSBzdHJpZXEoKSBpbnN0ZWFkIG9mIHN0cmVxKCkKCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoJKiBmaWxlLmM6IExpa2V3aXNlLgoKCSogYW1pZ2EuYzogTmV3IGZ1bmN0aW9uIHdpbGRjYXJkX2V4cGFuc2lvbigpLiBBbGxvd3MgdG8gdXNlCglBbWlnYSB3aWxkY2FyZHMgd2l0aCAkKHdpbGRjYXJkICkKCgkqIGFtaWdhLmg6IE5ldyBmaWxlLiBQcm90b3R5cGVzIGZvciBhbWlnYS5jCgoJKiBmdW5jdGlvbi5jOiBVc2Ugc3BlY2lhbCBmdW5jdGlvbiB3aWxkY2FyZF9leHBhbnNpb24oKSBmb3IKCSQod2lsZGNhcmQgKSB0byBhbGxvdyBBbWlnYSB3aWxkY2FyZHMKCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoKCSogam9iLmM6IE5vIFBpcGVzIG9uIEFtaWdhLCB0b28KCShsb2FkX3Rvb19oaWdoKSBOZWl0aGVyIG9uIEFtaWdhCglFTlYgdmFyaWFibGUgb24gQW1pZ2EgYXJlIGluIGEgc3BlY2lhbCBkaXJlY3RvcnkgYW5kIGFyZSBub3QKCXBhc3NlZCBhcyB0aGlyZCBhcmd1bWVudCB0byBtYWluKCkuCgoJKiBqb2IuaDogTm8gZW52cCBvbiBBbWlnYQoKCSogbWFrZS5oOiBBZGRlZCBIQVNISSgpLiBUaGlzIGlzIHRoZSBzYW1lIGFzIEhBU0goKSBidXQgY29udmVydHMKCWl0J3Mgc2Vjb25kIHBhcmFtZXRlciB0byBsb3dlcmNhc2Ugb24gQW1pZ2EgdG8gZm9sZCBmaWxlbmFtZXMuCgoJKiBtYWluLmM6IChtYWluKSwgdmFyaWFibGUuYyBDaGFuZ2VkIGhhbmRsaW5nIG9mIEVOVi12YXJzLiBNYWtlCglzdG9yZXMgbm93IHRoZSBuYW1lcyBvZiB0aGUgdmFyaWFibGVzIG9ubHkgYW5kIHJlYWRzIHRoZWlyIGNvbnRlbnRzCgl3aGVuIHRoZXkgYXJlIGFjY2Vzc2VkIHRvIHJlZmxlY3QgdGhhdCB0aGVzZSB2YXJpYWJsZXMgYXJlIHJlYWxseQoJZ2xvYmFsIChpZS4gdGhleSBDQU4gY2hhbmdlIFdISUxFIG1ha2UgcnVucyAhKSBUaGlzIGhhbmRsaW5nIGlzCgltYWRlIGluIGxvb2t1cF92YXJpYWJsZSgpCgoJKiBNYWtlZmlsZS5hbWk6IHJlbmFtZWQgZmlsZS5oIHRvIGZpbGVkZXAuaAoJVXBkYXRlZCBkZXBlbmRlbmNpZXMKCgkqIHJlYWQuYzogImZpbmRfc2VtaWNvbG9uIiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYnV0IG5ldmVyIGRlZmluZWQuCglObyBkaWZmZXJlbmNlIGJldHdlZW4gTWFrZWZpbGUgYW5kIG1ha2VmaWxlIG9uIEFtaWdhOyBhZGRlZAoJU01ha2VmaWxlIHRvICpkZWZhdWx0X21ha2VmaWxlc1tdLgoJKHJlYWRfbWFrZWZpbGUpIFNBUy9DIHdhbnQncyB0d29fY29sb24gYW5kIHBhdHRlcm5fcGVyY2VudCBiZSBzZXQKCWJlZm9yZSB1c2UuCglUaGUgY3VycmVudCBkaXJlY3Rvcnkgb24gQW1pZ2EgaXMgIiIgaW5zdGVhZCBvZiAiLiIKCVN0cmFuZ2UgI2VuZGlmIG1vdmVkLgoKCSogUkVBRE1FLkFtaWdhOiB1cGRhdGVkIGZlYXR1cmUgbGlzdAoKCSogU01ha2VmaWxlOiBVcGRhdGVkIGRlcGVuZGVuY2llcwoKCSogdmFyaWFibGUuYzogSGFuZGxpbmcgb2YgRU5WIHZhcmlhYmxlIGhhcHBlbnMgaW5zaWRlIGxvb2t1cF92YXJpYWJsZSgpCgpTYXQgTWF5IDExIDE3OjU4OjMyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENvdW50IHBhcmVucyBpbiBsaHMgdmFyaWFibGUKCXJlZnMgdG8gYXZvaWQgc2VlaW5nID0vOj0vKz0gaW5zaWRlIGEgcmVmLgoKVGh1IE1heSAgOSAxMzo1NDo0OSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbU0lHUVVJVF06IE1ha2UgU0lHUVVJVCBjaGVjawoJY29uZGl0aW9uYWwuCgoJKiBtYWluLmMgKG1haW4pOiBVc2UgdW5zaWduZWQgZm9yIGZyZWFkIHJldHVybi4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBVc2UgYGludCcgZm9yIGNoYXIgYXJnIHRvIGF2b2lkIHdpZGVuaW5nCgljb25mbGljdCBpc3N1ZXMuCgkqIGRlcC5oOiBGaXggcHJvdG90eXBlLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKSBbX0FNSUdBXTogRml4IHNvbWUgdHlwb3MuCgkocGF0c3Vic3RfZXhwYW5kKTogTWFrZSBsZW4gdmFycyB1bnNpZ25lZC4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgQW1pZ2FET1Mgc3VwcG9ydCBmaWxlcy4KCShkaXN0ZmlsZXMpOiBBZGQgJChhbWlnYWZpbGVzKS4KCShhbWlnYWZpbGVzKTogTmV3IHZhcmlhYmxlLgoKVGh1IE5vdiAgNyAxMDoxODoxNiAxOTk1ICBBYXJvbiBEaWd1bGxhICAgPGRpZ3VsbGFAZmgta29uc3RhbnouZGU+CgoJKiBBZGRlZCBBbWlnYSBzdXBwb3J0IGluIGNvbW1hbmRzLmMsIGRpci5jLCBmdW5jdGlvbi5jLAoJam9iLmMsIG1haW4uYywgbWFrZS5oLCByZWFkLmMsIHJlbWFrZS5jCgkqIGNvbW1hbmRzLmM6IEFtaWdhIGhhcyBuZWl0aGVyIFNJR0hVUCBub3IgU0lHUVVJVAoJKiBkaXIuYzogQW1pZ2EgaGFzIGZpbGVuYW1lcyB3aXRoIFVwcGVyLSBhbmQgTG93ZXJjYXNlLAoJYnV0ICJGaWxlTmFtZSIgaXMgdGhlIHNhbWUgYXMgImZpbGVuYW1lIi4gQWRkZWQgc3RyaWVxKCkKCXdoaWNoIGlzIHVzZSB0byBjb21wYXJlIGZpbGVuYW1lcy4gVGhpcyBpcyBsaWtlIHN0cmVxKCkKCW9uIGFsbCBvdGhlciBzeXN0ZW1zLiBBbHNvIHRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMKCSIuIiB1bmRlciBBbWlnYURPUy4KCSogZnVuY3Rpb24uYzogT24gQW1pZ2EsIHRoZSBlbnZpcm9ubWVudCBpcyBub3QgcGFzc2VkIGFzIGVudnAsCgl0aGVyZSBhcmUgbm8gcGlwZXMgYW5kIEFtaWdhIGNhbid0IGZvcmsuIFVzZSBteSBvd24gZnVuY3Rpb24KCXRvIGNyZWF0ZSBhIG5ldyBjaGlsZC4KCSogam9iLmM6IGRlZmF1bHRfc2hlbGwgaXMgIiIgKFRoZSBzeXN0ZW0gYXV0b21hdGljYWxseSBjaG9vc2VzCglhIHNoZWxsIGZvciBtZSkuIEhhdmUgdG8gdXNlIHRoZSBzYW1lIHdvcmthcm91bmQgYXMgTVNET1MgZm9yCglydW5uaW5nIGJhdGNoIGNvbW1hbmRzLiBBZGRlZCBIQVZFX1NZU19QQVJBTV9ILiBOT0ZJTEUgaXNuJ3QKCWtub3duIG9uIEFtaWdhLiBDbG9uZWQgY29kZSB0byBydW4gY2hpbGRyZW4gZnJvbSBNU0RPUy4gT3duCgl2ZXJzaW9uIG9mIHNoX2NoYXJzW10gYW5kIHNoX2NtZHNbXS4gTm8gZHVwMigpIG9yIGR1cCgpIG9uIEFtaWdhLgoJKiBtYWluLmM6IEZvcmNlIHN0YWNrIHRvIDIwMDAwIGJ5dGVzLiBSZWFkIGVudmlyb25tZW50IGZyb20gRU5WOgoJZGV2aWNlLiBPbiBBbWlnYSwgZXhlY19jb21tYW5kKCkgZG9lcyByZXR1cm4sIHNvIEkgZXhpdCgpCglhZnRlcndhcmRzLgoJKiBtYWtlLmg6IEFkZGVkIHN0cmllcSgpIHRvIGNvbXBhcmUgZmlsZW5hbWVzLgoJKiByZWFkLmM6IEFtaWdhIG5lZWRzIHNwZWNpYWwgZXh0ZW5zaW9uIHRvIGhhdmUgcGFzc3dkLiBPbmx5CglvbmUgaW5jbHVkZS1kaXIuICJNYWtlZmlsZSIgYW5kICJtYWtlZmlsZSIgYXJlIHRoZSBzYW1lLgoJQWRkZWQgIlNNYWtlZmlsZSIuICBBZGRlZCBzcGVjaWFsIGNvZGUgdG8gaGFuZGxlIGRldmljZSBuYW1lcyAoeHh4OikKCWFuZCAiLi8iIGluIHJ1bGVzLgoJKiByZW1ha2UuYzogT25seSBvbmUgbGliLWRpci4gQW1pZ2EgbGluay1saWJzIGFyZSBuYW1lZCAiJXMubGliIgoJaW5zdGVhZCBvZiAibGliJXMuYSIuCgkqIG1haW4uYywgcnVsZS5jLCB2YXJpYWJsZS5jOiBBdm9pZCBmbG9hdHMgYXQgYWxsIGNvc3RzLgoJKiB2cGF0aC5jOiBHZXQgcmlkIG9mIGFzIG1hbnkgYWxsb2NhKClzIGFzIHBvc3NpYmxlLgoKVGh1IE1heSAgOSAxMzoyMDo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBgc2luY2x1ZGUnIGFzIGFsaWFzIGZvciBgLWluY2x1ZGUnLgoKV2VkIE1hciAyMCAwOTo1MjoyNyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogR05VbWFrZWZpbGUgKHZtc2ZpbGVzKTogTmV3IHZhcmlhYmxlLgoJKGRpc3RmaWxlcyk6IEluY2x1ZGUgJCh2bXNmaWxlcykuCgpUdWUgTWFyIDE5IDIwOjIxOjM0IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJTWVyZ2VkIFZNUyBwb3J0IGZyb20gS2xhdXMgS2FlbXBmIDxra2FlbXBmQGRpZHltdXMucm1pLmRlPi4KCSogbWFrZS5oIChQQVJBTVMpOiBOZXcgbWFjcm8uCgkqIGNvbmZpZy5oLXZtczogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLmNvbTogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLnZtczogTmV3IGZpbGUuCgkqIHJlYWRtZS52bXM6IE5ldyBmaWxlLgoJKiB2bXNkaXIuaDogTmV3IGZpbGUuCgkqIHZtc2Z1bmN0aW9ucy5jOiBOZXcgZmlsZS4KCSogdm1zaWZ5LmM6IE5ldyBmaWxlLgoJKiBmaWxlLmg6IFJlbmFtZWQgdG8gZmlsZWRlZi5oIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggVk1TIHN5c3RlbSBoZHIuCgkqIGFyLmM6IEFkZGVkIHByb3RvdHlwZXMgYW5kIGNoYW5nZXMgZm9yIFZNUy4KCSogY29tbWFuZHMuYzogTGlrZXdpc2UuCgkqIGNvbW1hbmRzLmg6IExpa2V3aXNlLgoJKiBkZWZhdWx0LmM6IExpa2V3aXNlLgoJKiBkZXAuaDogTGlrZXdpc2UuCgkqIGRpci5jOiBMaWtld2lzZS4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoJKiBmaWxlLmM6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYzogTGlrZXdpc2UuCgkqIGpvYi5jOiBMaWtld2lzZS4KCSogam9iLmg6IExpa2V3aXNlLgoJKiBtYWluLmM6IExpa2V3aXNlLgoJKiBtYWtlLmg6IExpa2V3aXNlLgoJKiBtaXNjLmM6IExpa2V3aXNlLgoJKiByZWFkLmM6IExpa2V3aXNlLgoJKiByZW1ha2UuYzogTGlrZXdpc2UuCgkqIHJlbW90ZS1zdHViLmM6IExpa2V3aXNlLgoJKiBydWxlLmM6IExpa2V3aXNlLgoJKiBydWxlLmg6IExpa2V3aXNlLgoJKiB2YXJpYWJsZS5jOiBMaWtld2lzZS4KCSogdmFyaWFibGUuaDogTGlrZXdpc2UuCgkqIHZwYXRoLmM6IExpa2V3aXNlLgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IFJlbmFtZSBmaWxlLmggdG8gZmlsZWRlZi5oLgoKU2F0IEF1ZyAxOSAyMzoxMTowMCAxOTk1ICBSaWNoYXJkIFN0YWxsbWFuICA8cm1zQG1vbGUuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogRm9yIGEgc2Vjb25kYXJ5IGZpbGUsIHRyeSBpbXBsaWNpdCBhbmQKCWRlZmF1bHQgcnVsZXMgaWYgYXBwcm9wcmlhdGUuCgpXZWQgQXVnICAyIDA0OjI5OjQyIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBJZiBhbiBpbnRlcm1lZGlhdGUgZmlsZSBleGlzdHMsCglkbyBjb25zaWRlciBpdHMgYWN0dWFsIGRhdGUuCgpTdW4gSnVsIDMwIDAwOjQ5OjUzIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBOZXcgZmllbGQgYHNlY29uZGFyeScuCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogQ2hlY2sgZm9yIC5JTlRFUk1FRElBVEUgYW5kIC5TRUNPTkRBUlkuCgkocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBEb24ndCBkZWxldGUgLlNFQ09OREFSWSBmaWxlcy4KClNhdCBNYXIgIDIgMTY6MjY6NTIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogQWRkIGdldG9wdC5oOyBwcmVwZW5kICQoc3JjZGlyKS8gdG8gZ2V0b3B0Ki4KCkZyaSBNYXIgIDEgMTI6MDQ6NDcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4zLgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBNb3ZlIGZ1dHVyZSBtb2R0aW1lIGNoZWNrIGJlZm9yZSBGSUxFIGlzCgljbG9iYmVyZWQgYnkgOjogbG9vcC4KCgkqIGRpci5jOiBVc2UgY2Fub25pY2FsIGNvZGUgZnJvbSBhdXRvY29uZiBtYW51YWwgZm9yIGRpcmVudCBpbmNsdWRlLgoJW19EX05BTUxFTl06IFJlZGVmaW5lIE5BTUxFTiB1c2luZyB0aGlzLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVXNlIE5BTUxFTiBtYWNyby4KCShyZWFkX2RpcnN0cmVhbSkgW19ESVJFTlRfSEFWRV9EX05BTUxFTl06IE9ubHkgc2V0IGRfbmFtbGVuICNpZiB0aGlzLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpXZWQgRmViIDI4IDAzOjU2OjIwIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBSZW1vdmUgKyBwcmVmaXggZnJvbSBSQ1MgY21kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IFB1dCArIHByZWZpeCBpbiAkKENIRUNLT1VULHYpIHZhbHVlIGluc3RlYWQuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IENoZWNrIGZvciBmdXR1cmUgdGltZXN0YW1wczsgZ2l2ZSBlcnJvciBhbmQgbWFyawoJZmlsZSBhcyAiZmFpbGVkIHRvIHVwZGF0ZSIuCgpGcmkgSmFuIDEyIDE4OjA5OjM2IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYzogRG9uJ3QgZGVjbGFyZSB1bmJsb2NrX3NpZ3M7IGpvYi5oIGFscmVhZHkgZG9lcy4KClNhdCBKYW4gIDYgMTY6MjQ6NDQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmggKEhBVkVfU1lTQ09ORl9PUEVOX01BWCk6ICN1bmRlZiByZW1vdmVkLgoKCSogam9iLmMgKE5HUk9VUFNfTUFYKTogRG9uJ3QgdHJ5IHRvIGRlZmluZSB0aGlzIG1hY3JvLgoKRnJpIERlYyAyMiAxODo0NDo0NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEdFVE9QVCwgR0VUT1BUX1NSQywgR0xPQik6IFZhcmlhYmxlcyByZW1vdmVkLgoJKG9ianMsIHNyY3MpOiBJbmNsdWRlIHRoZWlyIHZhbHVlcyBoZXJlIGluc3RlYWQgb2YgcmVmZXJlbmNlcy4KClRodSBEZWMgMTQgMDY6MjE6MjkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4yLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDYWxsIHVuYmxvY2tfc2lncyBhZnRlciBzdGFydF9qb2JfY29tbWFuZC4KClRodSBEZWMgMTQgMDc6MjI6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZHVhbGl0eS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChkaXJfc2V0dXBfZ2xvYik6IERvbid0IHVzZSBsc3RhdDsgZ2xvYiBuZXZlciBjYWxscyBpdCBhbnl3YXkuCglBdm9pZCAmIGJlZm9yZSBmdW5jdGlvbiBuYW1lcyB0byBzaWxlbmNlIGJvZ3VzIHN1bm9zNCBjb21waWxlci4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGNoZWNrIGZvciBgc3lzY29uZiAoX1NDX09QRU5fTUFYKScuCgpUdWUgRGVjIDEyIDAwOjQ4OjQyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuMS4KCgkqIGRpci5jIChyZWFkX2RpcnN0cmVhbSk6IEZpeCBicmFpbm86IGZpbGwgaW4gdGhlIGJ1ZmZlciB3aGVuIG5vdAoJcmVhbGxvY2F0aW5nIGl0IQoKTW9uIERlYyAxMSAyMjoyNjoxNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWlzYy5jIChjb2xsYXBzZV9jb250aW51YXRpb25zKTogRml4IHNraXBwaW5nIG9mIHRyYWlsaW5nIFxzIHNvCglpdCBjYW4gbmV2ZXIgZGVyZWZlcmVuY2UgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoKCSogcmVhZC5jIChmaW5kX3NlbWljb2xvbik6IEZ1bmN0aW9uIHJlbW92ZWQuCgkocmVhZF9tYWtlZmlsZSk6IERvbid0IHVzZSBmaW5kX3NlbWljb2xvbiBvciByZW1vdmVfY29tbWVudHMgZm9yCglydWxlIGxpbmVzLiAgVXNlIGZpbmRfY2hhcl91bnF1b3RlIGRpcmVjdGx5IGFuZCBoYW5kbGUgcXVvdGVkIGNvbW1lbnRzCglwcm9wZXJseS4KCgkqIGRlZmF1bHQuYzogUmVtb3ZlIGFsbCBbTV9YRU5JWF0gY29kZS4KCgkqIGRpci5jIFtIQVZFX0RfTkFNTEVOXTogRGVmaW5lIHRoaXMgZm9yIF9fR05VX0xJQlJBUllfXyA+IDEuCgkoRF9OQU1MRU4pOiBNYWNybyByZW1vdmVkLgoJKEZBS0VfRElSX0VOVFJZKTogTmV3IG1hY3JvLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVGVzdCBIQVZFX0RfTkFNTEVOIGluc3RlYWQgb2YgdXNpbmcKCURfTkFNTEVOLgoJKHJlYWRfZGlyc3RyZWFtKTogUmV0dXJuIGEgc3RydWN0IGRpcmVudCAqIGZvciBuZXcgZ2xvYiBpbnRlcmZhY2UuCgkoaW5pdF9kaXIpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGRpcl9zZXR1cF9nbG9iKTogTmV3IGZ1bmN0aW9uLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBjYWxsIGluaXRfZGlyLgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBDYWxsIGRpcl9zZXR1cF9nbG9iIG9uIG91ciBnbG9iX3QgYW5kIHVzZQoJR0xPQl9BTFRESVJGVU5DIGZsYWcuCgoJKiBtaXNjLmMgKHNhZmVfc3RhdCk6IEZ1bmN0aW9uIHJlbW92ZWQuCgkqIHJlYWQuYywgY29tbWFuZHMuYywgcmVtYWtlLmMsIHZwYXRoLmM6IFVzZSBwbGFpbiBzdGF0IGluc3RlYWQgb2YKCXNhZmVfc3RhdC4KClNhdCBOb3YgMjUgMjA6MzU6MTggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIFtIQVZFX1VOSU9OX1dBSVRdOiBJbmNsdWRlIHN5cy93YWl0LmguCgoJKiBtYWluLmMgKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IE1hZGUgZ2xvYmFsLgoJUHJpbnQgZW50ZXJpbmcgbXNnIG9ubHkgb25jZS4KCSogbWFrZS5oIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBEZWNsYXJlIGl0LgoJKiBtaXNjLmMgKG1lc3NhZ2UpOiBUYWtlIG5ldyBhcmcgUFJFRklYLiAgUHJpbnQgIm1ha2U6ICIgb25seSBpZgoJbm9uemVyby4gIENhbGwgbG9nX3dvcmtpbmdfZGlyZWN0b3J5LgoJKiByZW1ha2UuYzogUGFzcyBuZXcgYXJnIGluIGBtZXNzYWdlJyBjYWxscy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUGFzcyBuZXcgYXJnIHRvIGBtZXNzYWdlJzsgZml4CglpbnZlcnRlZCB0ZXN0IGluIHRoYXQgY2FsbC4KClR1ZSBOb3YgMjEgMTk6MDE6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFVzZSBgbWVzc2FnZScgdG8gcHJpbnQgdGhlIGNvbW1hbmQsCglhbmQgY2FsbCBpdCB3aXRoIG51bGwgaWYgdGhlIGNvbW1hbmQgaXMgc2lsZW50LgoJKiByZW1ha2UuYyAodG91Y2hfZmlsZSk6IFVzZSBtZXNzYWdlIGluc3RlYWQgb2YgcHJpbnRmLgoKVHVlIE9jdCAxMCAxNDo1OTozMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IEJhcmYgaWYgTkFNRSBpcyAiIi4KClNhdCBTZXAgIDkgMDY6MzM6MjAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAd2hpei1iYW5nLmdudS5haS5taXQuZWR1PgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IElnbm9yZSB1bmxpbmsgZmFpbHVyZSBpZiBpdCBpcyBFTk9FTlQuCgpUaHUgQXVnIDE3IDE1OjA4OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBnZXRkdGFibGVzaXplLgoJKiBqb2IuYyAoZ2V0ZHRhYmxlc2l6ZSk6IFJlbW92ZSBkZWNscyBhbmQgbWFjcm9zLgoKVGh1IEF1ZyAxMCAxOToxMDowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT21pdCBjb21tYW5kIGxpbmUgdmFyaWFibGUKIAlkZWZpbml0aW9ucyBmcm9tIE1GTEFHUyB2YWx1ZS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbQUlBTUFHXTogQ2hlY2sgZm9yIHplcm8gTUVNQkVSX09GRlNFVCwKIAlpbmRpY2F0aW5nIGEgdmFsaWQsIGJ1dCBlbXB0eSwgYXJjaGl2ZS4KCk1vbiBBdWcgIDcgMTU6NDA6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGVfcCk6IENvcnJlY3RseSByZXNldCBGSUxFTkFNRSB0byBuYW1lCiAJd2l0aGluIGRpcmVjdG9yeSBiZWZvcmUgaGFzaCBzZWFyY2guCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBEbyBub3RoaW5nIGlmIElHTk9SRUQgdW5kZXIgLXMuCgoJKiBqb2IuYyAoZXhlY19jb21tYW5kKTogQ29ycmVjdGx5IHVzZSBBUkdWWzBdIGZvciBzY3JpcHQgbmFtZSB3aGVuCiAJcnVubmluZyBzaGVsbCBkaXJlY3RseS4KClR1ZSBBdWcgIDEgMTQ6Mzk6MTQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjaGlsZF9leGVjdXRlX2pvYik6IENsb3NlIFNURElOX0ZEIGFuZCBTVERPVVRfRkQgYWZ0ZXIKIAlkdXAnaW5nIGZyb20gdGhlbS4gIERvbid0IHRyeSB0byBjbG9zZSBhbGwgZXhjZXNzIGRlc2NyaXB0b3JzOwogCWdldGR0YWJsZXNpemUgbWlnaHQgcmV0dXJuIGEgaHVnZSB2YWx1ZS4gIEFueSBvcGVuIGRlc2NyaXB0b3JzIGluCiAJdGhlIHBhcmVudCBzaG91bGQgaGF2ZSBGRF9DTE9FWEVDIHNldC4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCBGRF9DTE9FWEVDIGZsYWcgb24gQkFEX1NURElOIGRlc2NyaXB0b3IuCgpUdWUgSnVuIDIwIDAzOjQ3OjE1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfYWxsX21ha2VmaWxlcyk6IFByb3Blcmx5IGFwcGVuZCBkZWZhdWx0IG1ha2VmaWxlcwogCXRvIHRoZSBlbmQgb2YgdGhlIGByZWFkX21ha2VmaWxlcycgY2hhaW4uCgpGcmkgTWF5IDE5IDE2OjM2OjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQgcmVsZWFzZWQuCgpXZWQgTWF5IDEwIDE3OjQzOjM0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMuMy4KClR1ZSBNYXkgIDkgMTc6MTU6MjMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IE1ha2Ugc3VyZSAkJGRpciBpcyBzZXQgaW4KIAlpbnN0YWxsLWluZm8gY21kLgoKV2VkIE1heSAgMyAxNTo1NjowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChwcmludF9maWxlKTogR3JvayB1cGRhdGVfc3RhdHVzIG9mIDEgZm9yIC1xLgoKVGh1IEFwciAyNyAxMjozOTozNSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczLjIuCgpXZWQgQXByIDI2IDE3OjE1OjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRml4IGludmVydGVkIHRlc3QgdG8gYmFpbCB1bmRlcgogCS1uIGZvciBzaWduYWwgY2FzZS4gIEJhaWwgdW5kZXIgLXEgb3IgLXQuCglTa2lwIGZpbGVzIHdpdGggdXBkYXRlX3N0YXR1cz09LTEuCgoJKiBqb2IuYyAoam9iX25leHRfY29tbWFuZCk6IFNraXAgZW1wdHkgbGluZXMuCgkobmV3X2pvYik6IERvbid0IHRlc3QgdGhlIHJldHVybiBvZiBqb2JfbmV4dF9jb21tYW5kLgoJSnVzdCBsZXQgc3RhcnRfd2FpdGluZ19qb2IgaGFuZGxlIHRoZSBjYXNlIG9mIGVtcHR5IGNvbW1hbmRzLgoKV2VkIEFwciAxOSAwMzoyNTo1NCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZnVuY3Rpb24uYyBbX19NU0RPU19fXTogSW5jbHVkZSA8ZmNudGwuaD4uICBGcm9tIERKIERlbG9yaWUuCgoJKiBWZXJzaW9uIDMuNzMuMS4KClNhdCBBcHIgIDggMTQ6NTM6MjQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8KIAlpZiBpdCdzIC0xLgoKV2VkIEFwciAgNSAwMDoyMDoyNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjczIHJlbGVhc2VkLgoKVHVlIE1hciAyOCAxMzoyNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRml4ZWQgYnJhaW5vIGluIGFzc2VydC4KCgkqIFZlcnNpb24gMy43Mi4xMy4KCk1vbiBNYXIgMjcgMDU6Mjk6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYzogQXZvaWQgc3RyaW5nIGluIGFzc2VydCBleHByZXNzaW9uLiAgU29tZSBzeXN0ZW1zIGFyZSBicm9rZW4uCgpGcmkgTWFyIDI0IDAwOjMyOjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBIYW5kbGUgMSBhbmQgMiByZXR1cm5zIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4KIAltYWtlZmlsZSBydW4gcHJvcGVybHkuCgoJKiBWZXJzaW9uIDMuNzIuMTIuCgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCiAJZGVjb2RlX3N3aXRjaGVzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFNldCBvcHRpbmQgdG8gMCB0byByZWluaXRpYWxpemUgZ2V0b3B0LCBub3QgdG8gMS4KCVdoZW4gZ2V0b3B0X2xvbmcgcmV0dXJucyBFT0YsIGJyZWFrIHRoZSBsb29wIGFuZCBoYW5kbGUgcmVtYWluaW5nIGFyZ3MKIAl3aXRoIGEgc2ltcGxlIHNlY29uZCBsb29wLgoKCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMiBpbnN0ZWFkIG9mIDEgZm9yCiAJbm8gcnVsZSB0byBtYWtlLiAgTWVudGlvbiBwYXJlbnQgKGRlcGVuZGVudCkgaW4gZXJyb3IgbWVzc2FnZS4KCSh1cGRhdGVfZmlsZV8xKTogSGFuZGxlIEZJTEUtPnVwZGF0ZV9zdGF0dXMgPT0gMiBpbiAtZCBwcmludG91dC4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kLCByZWFwX2NoaWxkcmVuKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMgogCWluc3RlYWQgb2YgMSBmb3IgZmFpbGVkIGNvbW1hbmRzLgoKVHVlIE1hciAyMSAxNjoyMzozOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gcmVtb3ZlZCAod2FzIGFscmVhZHkgI2lmIDAnZCBvdXQpLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBBQ19UWVBFX0dFVEdST1VQUzsgbm90aGluZyBuZWVkcyBpdCBhbnkgbW9yZS4KCkZyaSBNYXIgMTcgMTU6NTc6NDAgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5iYXQ6IFdyaXRlIEBDUFBGTEFHU0AgdHJhbnNsYXRpb24uCgpNb24gTWFyIDEzIDAwOjQ1OjU5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogUmVhcnJhbmdlZCBgbChhIGIpJyAtPiBgbChhKSBsKGIpJyBsb29wCiAJdG8gbm90IHNraXAgdGhlIGVsdCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGwoLi4uJy4KCkZyaSBNYXIgMTAgMTM6NTY6NDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4xMS4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBNYWtlIHNlY29uZCBhcmcgYSBzdHJpbmcgb2Ygc3RvcAogCWNoYXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgc3RvcCBjaGFyLiAgU3RvcCB3aGVuIGFueSBjaGFyIGluIHRoZQogCXN0cmluZyBpcyBoaXQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGZpbmRfc2VtaWNvbG9uKTogUGFzcyBzdG9wIGNoYXJzICIjOyIgdG8gb25lIGZpbmRfY2hhcl91bnF1b3RlIGNhbGwsCglpbnN0ZWFkIG9mIHVzaW5nIHR3byBjYWxscy4gIElmIHRoZSBtYXRjaCBpcyBub3QgYSA7IGJ1dCBhICMsCiAJcmV0dXJuIHplcm8uCgkqIG1pc2MuYzogQ2hhbmdlZCBmaW5kX2NoYXJfdW5xdW90ZSBjYWxsZXJzIGhlcmUgdG9vLgoKCSogVmVyc2lvbiAzLjcyLjEwLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLCBwYXJzZV9maWxlX3NlcSk6IEZpeCB0eXBvIF9fTVNfRE9TX18gLT4KIAlfX01TRE9TX18uCgoJKiBHTlVtYWtlZmlsZSAoZ2xvYmZpbGVzKTogQWRkIGdsb2IvY29uZmlndXJlLmJhdC4KCShkaXN0ZmlsZXMpOiBBZGQgY29uZmlnaC5kb3MsIGNvbmZpZ3VyZS5iYXQuCgpXZWQgTWFyICA4IDEzOjEwOjU3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJRml4ZXMgZm9yIE1TLURPUyBmcm9tIERKIERlbG9yaWUuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSwgcGFyc2VfZmlsZV9zZXEpIFtfX01TX0RPU19fXTogRG9uJ3Qgc2VlIDoKIAlhcyBzZXBhcmF0b3IgaW4gIkM6XC4uLiIuCgkqIGNvbmZpZ2guZG9zIChTVERDX0hFQURFUlMpOiBEZWZpbmUgb25seSBpZiB1bmRlZmluZWQuCgkoSEFWRV9TWVNfUEFSQU1fSCk6IERvbid0IGRlZmluZSB0aGlzLgoJKEhBVkVfU1RSRVJST1IpOiBEZWZpbmUgdGhpcy4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBGaXggdHlwb3MuCgoJKiBWZXJzaW9uIDMuNzIuOS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogUmVzZXQgb3B0aW5kIHRvIDEgaW5zdGVhZCBvZiAwLgoKVHVlIE1hciAgNyAxNzozMTowNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSWYgbm9uLW9wdGlvbiBhcmcgaXMgIi0iLCBpZ25vcmUgaXQuCgpNb24gTWFyICA2IDIzOjU3OjM4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuOC4KCldlZCBGZWIgMjIgMjE6MjY6MzYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi43LgoKVHVlIEZlYiAyMSAyMjoxMDo0MyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogUGFzcyBtaXNzaW5nIGFyZyB0byB0bXBuYW0uCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdHJzaWduYWwuCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IFVzZSBzdHJzaWduYWwuCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgc2lnbmFtZV9pbml0ICNpZmRlZiBIQVZFX1NUUlNJR05BTC4KCgkqIG1pc2MuYyAoc3RyZXJyb3IpOiBGaXggc3dhcHBlZCBhcmdzIGluIHNwcmludGYuCgpNb24gRmViIDEzIDExOjUwOjA4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW4gKENGTEFHUywgTERGTEFHUyk6IERvbid0IHNldCB0aGVzZSB2YXJpYWJsZXMuCgpGcmkgRmViIDEwIDE4OjQ0OjEyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTUgdG8gY29weXJpZ2h0IHllYXJzLgoKCSogVmVyc2lvbiAzLjcyLjYuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW1lbWJlciB0byBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlCiAJdW5kZXIgLW4gd2hlbiBub3QgcmVjdXJzaW5nLiAgVG8gZG8gdGhpcywgY29uc29saWRhdGUgdGhhdCBjb2RlCiAJdW5kZXIgdGhlIGVtcHR5IGNvbW1hbmQgY2FzZSBhbmQgZ290byB0aGVyZSBmb3IgdGhlIC1uIGNhc2UuCgpUdWUgRmViICA3IDEzOjM2OjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlLmggWyEgU1REQ19IRUFERVJTXTogRG9uJ3QgZGVjbGFyZSBxc29ydC4gIFN1biBoZWFkZXJzCiAJZGVjbGFyZSBpdCBpbnQuCgpNb24gRmViICA2IDE3OjM3OjAxIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGb3IgYm9ndXMgbGluZSBzdGFydGluZyB3aXRoIHRhYiwgaWdub3JlCiAJaXQgaWYgYmxhbmsgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuCgoJKiBtYWluLmM6IENhc3QgcmVzdWx0cyBvZiBgYWxsb2NhJyB0byBgY2hhciAqJy4KCSogZXhwYW5kLmM6IExpa2V3aXNlLgoKU3VuIEZlYiAgNSAxODozNTo0NiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjUuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBta3RlbXAuCgkqIG1haW4uYyAobWFpbikgWyEgSEFWRV9NS1RFTVBdOiBVc2UgdG1wbmFtIGluc3RlYWQgb2YgbWt0ZW1wLgoKCSogY29uZmlndXJlLmluIChtYWtlX2N2X3N5c2NvbmZfb3Blbl9tYXgpOiBOZXcgY2hlY2sgZm9yIGBzeXNjb25mCiAJKF9TQ19PUEVOX01BWCknLgoJKiBhY2NvbmZpZy5oOiBBZGRlZCAjdW5kZWYgSEFWRV9TWVNDT05GX09QRU5fTUFYLgoJKiBqb2IuYyBbSEFWRV9TWVNDT05GX09QRU5fTUFYXSAoZ2V0ZHRhYmxlc2l6ZSk6IERlZmluZSBhcyBtYWNybwogCXVzaW5nIHN5c2NvbmYuCgpGcmkgSmFuIDI3IDA0OjQyOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IFdoZW4gIU1VU1RfTUFLRSwgZG9uJ3Qgc2V0CiAJRklMRS0+dXBkYXRlX3N0YXR1cyB0byB6ZXJvIGJlZm9yZSBjYWxsaW5nIG5vdGljZV9maW5pc2hlZF9maWxlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVG91Y2ggb25seSB3aGVuIEZJTEUtPnVwZGF0ZV9zdGF0dXMgaXMgemVyby4KCShyZW1ha2VfZmlsZSk6IFNldCBGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8gYWZ0ZXIgbm90IGNhbGxpbmcKCWV4ZWN1dGVfZmlsZV9jb21tYW5kIGFuZCBkZWNpZGluZyB0byB0b3VjaCBpbnN0ZWFkLgoKVGh1IEphbiAyNiAwMToyOTozMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWJ1Z19zaWduYWxfaGFuZGxlcik6IE5ldyBmdW5jdGlvbjsgdG9nZ2xlcyBkZWJ1Z19mbGFnLgoJKG1haW4pOiBIYW5kbGUgU0lHVVNSMSB3aXRoIHRoYXQuCgpNb24gSmFuIDE2IDE1OjQ2OjU2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogUmVtb3ZlIEluZm8gZmlsZXMuCgpTdW4gSmFuIDE1IDA4OjIzOjA5IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFNhdmUgYW5kIHJlc3RvcmUgZW52aXJvbiBhcm91bmQgdmZvcmsKICAgICAgICBjYWxsLgoJKHNlYXJjaF9wYXRoKTogRnVuY3Rpb24gI2lmIDAnZCBvdXQuCgkoZXhlY19jb21tYW5kKTogVXNlIGV4ZWN2cCBpbnN0ZWFkIG9mIHNlYXJjaF9wYXRoLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IFJld3JvdGUgY29tcHV0ZWQgdmFyaWFibGUgbmFtZSBhbmQKCXN1YnN0aXR1dGlvbiByZWZlcmVuY2UgaGFuZGxpbmcgdG8gYmUgc2ltcGxlci4gIEZpcnN0IGV4cGFuZCB0aGUKCWVudGlyZSB0ZXh0IGJldHdlZW4gdGhlIHBhcmVucyBpZiBpdCBjb250YWlucyBhbnkgJHMsIHRoZW4gZXhhbWluZQoJdGhlIHJlc3VsdCBvZiB0aGF0IGZvciBzdWJ0aXR1dGlvbiByZWZlcmVuY2VzIGFuZCBkbyBubyBmdXJ0aGVyCglleHBhbnNpb24gd2hpbGUgcGFyc2luZyB0aGVtLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBIYW5kbGUgIiBxdW90aW5nIHRvbywKCXdoZW4gbm8gYmFja3NsYXNoLCAkIG9yIGAgY2hhcmFjdGVycyBhcHBlYXIgaW5zaWRlIHRoZSBxdW90ZXMuCgoJKiBjb25maWd1cmUuaW4gKHVuaW9uIHdhaXQgY2hlY2spOiBJZiBXRVhJVFNUQVRVUyBhbmQgV1RFUk1TSUcgYXJlCiAgICAgICAgZGVmaW5lZCwganVzdCB1c2UgaW50LgoKVHVlIEphbiAxMCAwNjoyNzoyNyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19faHB1eF06IFJlbW92ZSBzcGVjaWFsCglkZWZpbml0aW9uIG9mIEFSRkxBR1MuICBFeGlzdGVuY2Ugb2YgdGhlIGBmJyBmbGFnIGlzIG5vdAoJY29uc2lzdGVudCBhY3Jvc3MgSFBVWCB2ZXJzaW9uczsgYW5kIG9uZSBtaWdodCBiZSB1c2luZyBHTlUgYXIKCWFueXdheS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERvbid0IHJlbW92ZSBJbmZvIGZpbGVzLgoKCSogY29tcGF0TWFrZWZpbGUgKGNoZWNrKTogUmVtb3ZlIGdyYXR1aXRvdXMgdGFyZ2V0IGRlY2xhcmF0aW9uLgoKU2F0IEphbiAgNyAxMTozODoyMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKEVUQUdTLCBDVEFHUyk6IERvbid0IHVzZSAtdC4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKSBbY3JheV06IFN1YnRyYWN0IDEgbGlrZSBbX19ocHV4XS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIC0taGVscCwgcHJpbnQgdXNhZ2UgdG8gc3Rkb3V0LgoKTW9uIERlYyAgNSAxMjo0MjoxOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjMuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvIHNldF9jb21tYW5kX3N0YXRlIChGSUxFLAoJY3Nfbm90X3N0YXJ0ZWQpIG9ubHkgaWYgb2xkIHN0YXRlIHdhcyBkZXBzX3J1bm5pbmcuCgpNb24gTm92IDI4IDE0OjI0OjAzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBVc2Ugc2V0X2NvbW1hbmRfc3RhdGUuCgoJKiBidWlsZC50ZW1wbGF0ZSAoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUuCgkocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCBmcm9tIEAuLi5ALgoJKGNvbXBpbGF0aW9uIGxvb3ApOiBQYXNzICRDUFBGTEFHUyB0byBjb21waWxlci4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IE1ha2UgaXQgZXhlY3V0YWJsZS4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgY29uZmlndXJlLmluLCBjb25maWd1cmUuCgoJKiBWZXJzaW9uIDMuNzIuMi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogRG9uJ3Qgd3JpdGUgZ2xvYi9NYWtlZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfU1lNQk9MKTogVXNlIEFDX0RFRklORV9VTlFVT1RFRC4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIHJhbmxpYi4KClR1ZSBOb3YgMjIgMjI6NDI6NDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IE9ubHkgbWFyayBhbHNvX21ha2UncyBhcwoJdXBkYXRlZCBpZiByZWFsbHkgcmFuIGNtZHMuCgpUdWUgTm92IDE1IDA2OjMyOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb25maWd1cmUuaW46IFB1dCBkbmxzIGJlZm9yZSByYW5kb20gd2hpdGVzcGFjZS4KClN1biBOb3YgMTMgMDU6MDI6MjUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZSwgc2V0IGZyb20gQENQUEZMQUdTQC4KCShSQU5MSUIpOiBWYXJpYWJsZSByZW1vdmVkLgoJKHByZWZpeCwgZXhlY19wcmVmaXgpOiBTZXQgdGhlc2UgZnJvbSBALi4uQC4KCSguYy5vKTogVXNlICQoQ1BQRkxBR1MpLgoJKGdsb2IvbGliZ2xvYi5hKTogRG9uJ3QgcGFzcyBkb3duIHZhcmlhYmxlcyB0byBzdWItbWFrZS4KCWdsb2IvTWFrZWZpbGUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgYnkgY29uZmlndXJlLgoJKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcubG9nIGFuZCBjb25maWcuY2FjaGUgKGF1dG9jb25mIHN0dWZmKS4KCk1vbiBOb3YgIDcgMTM6NTg6MDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGFjY29uZmlnLmg6IEFkZCAjdW5kZWYgSEFWRV9VTklPTl9XQUlULgoJKiBjb25maWd1cmUuaW46IENvbnZlcnRlZCB0byBBdXRvY29uZiB2Mi4KCSogZGlyLmM6IFRlc3QgSEFWRV9ESVJFTlRfSCwgSEFWRV9TWVNfRElSX0gsIEhBVkVfTkRJUl9IIGluc3RlYWQKCW9mIERJUkVOVCwgU1lTRElSLCBORElSLgoJKiBidWlsZC5zaC5pbiAocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCB0aGVzZSBmcm9tIEAuLi5ALgoJKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBAQ1BQRkxBR1NALgoJKGNvbXBpbGluZyBsb29wKTogUGFzcyAkQ1BQRkxBR1MgYmVmb3JlICRDRkxBR1MuCgkqIGluc3RhbGwuc2g6IEZpbGUgcmVuYW1lZCB0byBpbnN0YWxsLXNoLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogV2hlbiBubyBmbGFncywgc2V0IFdPUkRTIHRvIHplcm8uCgpTdW4gTm92ICA2IDE4OjM0OjAxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMS4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFRlcm1pbmF0ZSBwcm9wZXJseSB3aGVuIEZMQUdTVFJJTkcgaXMKICAgICAgICBlbXB0eS4KCkZyaSBOb3YgIDQgMTY6MDI6NTEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4KClR1ZSBOb3YgIDEgMDE6MTg6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS41LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiBBUkdWIGlzIG5pbCwgb25seSBzZXQKCXVwZGF0ZV9zdGF0ZSBhbmQgY2FsbCBub3RpY2VfZmluaXNoZWRfZmlsZSBpZiBqb2JfbmV4dF9jb21tYW5kCglyZXR1cm5zIHplcm8uCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBDYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGZvciBlbXB0eQogICAgICAgIGNvbW1hbmQgbGluZS4KClRodSBPY3QgMjcgMDI6MDI6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogU2V0IENPTU1BTkRTX1NJTEVOVCBmb3IgLlNJTEVOVCwgbm90CiAgICAgICAgQ09NTUFORFNfTk9FUlJPUi4KCldlZCBPY3QgMjYgMDI6MTQ6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS40LgoKVHVlIE9jdCAyNSAyMjo0OToyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBTZXQgY29tbWFuZF9mbGFncyBiaXRzIGluIGFsbCA6OiBlbnRyaWVzLgoKTW9uIE9jdCAyNCAxODo0Nzo1MCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFrZS5oIChwb3NpeF9wZWRhbnRpYyk6IERlY2xhcmUgaXQuCgkqIG1haW4uYyAobWFpbik6IE1vdmUgY2hlY2tzIC5JR05PUkUsIC5TSUxFTlQsIC5QT1NJWCB0bwogICAgICAgIHNuYXBfZGVwcy4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBDaGVjayAuSUdOT1JFLCAuU0lMRU5ULCAuUE9TSVggaGVyZSBpbnN0ZWFkCglvZiBpbiBtYWluLiAgSWYgLklHTk9SRSBoYXMgZGVwcywgT1IgQ09NTUFORFNfTk9FUlJPUiBpbnRvIHRoZWlyCgljb21tYW5kX2ZsYWdzIGFuZCBkb24ndCBzZXQgLWkuICBMaWtld2lzZSAuU0lMRU5ULgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJbiBGTEFHUyBpbml0aWFsaXphdGlvbiwgT1IgaW4KCUNISUxELT5maWxlLT5jb21tYW5kX2ZsYWdzLgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogTmV3IG1lbWJlciBgY29tbWFuZF9mbGFncycuCgpTdW4gT2N0IDE2IDAxOjAxOjUxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQnVtcCBmbGFnIHZhbHVlcyBmb3IgLS1uby1wcmludC1kaXJlY3RvcnkgYW5kCgktLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcywgc28gbmVpdGhlciBpcyAxICh3aGljaCBpbmRpY2F0ZXMgYQoJbm9ub3B0aW9uIGFyZ3VtZW50KS4KClNhdCBPY3QgMTUgMjM6Mzk6NDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEFkZCBtaXNzaW5nIGNvZGUgaW4gLklHTk9SRSB0ZXN0LgoKTW9uIE9jdCAxMCAwNDowOTowMyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgK0QgYW5kICtGLgoKU2F0IE9jdCAgMSAwNDowNzo0OCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIGhpZGRlbiBhdXRvbWF0aWMgdmFyaWFibGUgd2l0aCBjb21tYW5kCgl2YXJzLCBhbmQgTUFLRU9WRVJSSURFUyB0byBhIHJlZmVyZW5jZSB0byB0aGF0LgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBwb3NpeF9wZWRhbnRpYywgd3JpdGUgYSByZWZlcmVuY2UgdG8gdGhhdAoJaW5zdGVhZC4KClRodSBTZXAgMjkgMDA6MTQ6MjYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAocG9zaXhfcGVkYW50aWMpOiBOZXcgdmFyaWFibGUuCgkobWFpbik6IFNldCBwb3NpeF9wZWRhbnRpYyBpZiAuUE9TSVggaXMgYSB0YXJnZXQuCglGaXggLklHTk9SRSBhbmQgLlNJTEVOVCBjaGVja3MgdG8gcmVxdWlyZSBpc190YXJnZXQuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEZWZpbmUgbmV3IGF1dG9tYXRpYyB2YXJpYWJsZQoJJCssIGxpa2UgJF4gYnV0IGJlZm9yZSBjYWxsaW5nIHVuaXF1aXplX2RlcHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENhbGwgZGVsZXRlX2NoaWxkX3RhcmdldHMgZm9yIG5vbi1zaWduYWwKCWVycm9yIGlmIC5ERUxFVEVfT05fRVJST1IgaXMgYSB0YXJnZXQuCgpUdWUgU2VwIDI3IDAxOjU3OjE0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzEuMy4KCk1vbiBTZXAgMjYgMTg6MTY6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgY2hhbmdlIEMtPmZpbGUtPmNvbW1hbmRfc3RhdGUgd2hlbgoJZHlpbmcuICBUZXN0IGl0IG9ubHkgYWZ0ZXIgY2FsbGluZyBzdGFydF9qb2JfY29tbWFuZCBmb3IgYSBuZXcKCWNvbW1hbmQgbGluZS4gIFdoZW4gbm8gbW9yZSBjbWRzLCBqdXN0IHNldCBDLT5maWxlLT51cGRhdGVfc3RhdHVzLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogV2hlbiB0aGUgbGFzdCBsaW5lIGlzIGVtcHR5IG9yIHVuZGVyIC1uLCBzZXQKCUMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBHcm9rIGNzX25vdF9zdGFydGVkIGFmdGVyIHN0YXJ0X2pvYl9jb21tYW5kCglhcyBzdWNjZXNzLgoJKG5ld19qb2IpOiBTZXQgQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cyB3aGVuIHRoZXJlIGFyZSBubyBjbWRzLgoJKGpvYl9uZXh0X2NvbW1hbmQpOiBXaGVuIG91dCBvZiBsaW5lcywgZG9uJ3Qgc2V0CglDSElMRC0+ZmlsZS0+dXBkYXRlX3N0YXR1cyBvciBDSElMRC0+ZmlsZS0+Y29tbWFuZF9zdGF0ZS4KCgkqIG1haW4uYyAocXVvdGVfYXNfd29yZCk6IFJlbmFtZWQgZnJvbSBzaGVsbF9xdW90ZS4gIFRha2UgbmV3IGFyZzsKCWlmIG5vbnplcm8sIGFsc28gZG91YmxlICRzLgoJKG1haW4pOiBEZWZpbmUgTUFLRU9WRVJSSURFUyBmcm9tIGNvbW1hbmRfdmFyaWFibGVzIGhlcmUuCgkoZGVmaW5lX21ha2VmbGFncyk6IERvbid0IHVzZSBjb21tYW5kX3ZhcmlhYmxlcyBoZXJlOyBpbnN0ZWFkIHdyaXRlIGEKCXJlZmVyZW5jZSAkKE1BS0VPVkVSUklERVMpIGluIE1BS0VGTEFHUy4gIE1ha2UgdmFycyByZWN1cnNpdmUuCgoJKiBkaXIuYyBbX19NU0RPU19fXTogRml4ZWQgdHlwby4KCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBSZXNldCBFWElTVFMgd2hlbiBzdGF0IGZhaWxzLgoKU2F0IFNlcCAxMCAwMzowMTozNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmM6IEluY2x1ZGUgPGFzc2VydC5oPiBhbmQgdXNlIGFzc2VydCBpbnN0ZWFkIG9mIHByaW50ZnMKICAgICAgICBhbmQgYWJvcnQuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IExvb3AgdW50aWwgb3B0aW5kIGhpdHMgQVJHQywgbm90IGp1c3QKCXVudGlsIGdldG9wdF9sb25nIHJldHVybnMgRU9GLiAgSW5pdGlhbGl6ZSBDIHRvIHplcm8gYmVmb3JlIGxvb3A7CglpbiBsb29wIGlmIEMgaXMgRU9GLCBzZXQgb3B0YXJnIGZyb20gQVJHVltvcHRpbmQrK10sIGVsc2UgY2FsbAoJZ2V0b3B0X2xvbmcuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSB2YXJpYWJsZV9leHBhbmQgaW5zdGVhZCBvZgoJYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZC4gIEFsbG9jYXRlIGEgZnJlc2ggYnVmZmVyIHRvIGNvcHkgc3BsaXQKCXdvcmRzIGludG87IHNjYW4gY2hhcmFjdGVycyBieSBoYW5kIHRvIGJyZWFrIHdvcmRzIGFuZAoJZGViYWNrc2xhc2hpZnkuCgkoc2hlbGxfcXVvdGUpOiBOZXcgZnVuY3Rpb24uCgkoZGVmaW5lX21ha2VmbGFncyk6IEFsbG9jYXRlIGRvdWJsZWQgc3BhY2UgZm9yIHN3aXRjaCBhcmdzLCBhbmQgY29tbWFuZAoJdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlczsgdXNlIHNoZWxsX3F1b3RlIHRvIHF1b3RlIHRob3NlIHRoaW5ncy4KCkZyaSBTZXAgIDkgMDE6Mzc6NDcgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS4yLgoKCSogYWNjb25maWcuaDogQWRkIEhBVkVfU1lTX1NJR0xJU1QgYW5kIEhBVkVfX1NZU19TSUdMSVNULgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBUaGUgbm9uLW9wdGlvbiByZXR1cm4gZnJvbSBnZXRvcHQgaXMKCTEsIG5vdCAwLgoJKGNvbW1hbmRfdmFyaWFibGVzKTogTmV3IHR5cGUgYW5kIHZhcmlhYmxlLgoJKGRlY29kZV9zd2l0Y2hlcywgZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IEFmdGVyIG1ha2luZyBhIHZhcmlhYmxlCglkZWZpbml0aW9uLCByZWNvcmQgdGhlIHN0cnVjdCB2YXJpYWJsZSBwb2ludGVyIGluIHRoZQoJY29tbWFuZF92YXJpYWJsZXMgY2hhaW4uCgkoZGVmaW5lX21ha2VmbGFncyk6IElmIEFMTCwgd3JpdGUgdmFyaWFibGUgZGVmaW5pdGlvbnMgZm9yCgljb21tYW5kX3ZhcmlhYmxlcy4KCgkqIG1haW4uYyAob3RoZXJfYXJncyk6IFZhcmlhYmxlIHJlbW92ZWQuCgkoZ29hbHMsIGxhc3Rnb2FsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMgKG1vdmVkIGZyb20gYXV0byBpbiBtYWluKS4KCShtYWluKTogRG9uJ3QgcHJvY2VzcyBPVEhFUl9BUkdTIGF0IGFsbC4KCURvbid0IHNldCB2YXJpYWJsZSBNQUtFT1ZFUlJJREVTIGF0IGFsbDsgZGVmaW5lIE1BS0UgdG8ganVzdAogICAgICAgICQoTUFLRV9DT01NQU5EKS4KCShpbml0X3N3aXRjaGVzKTogUHJlcGVuZCBhIC0ge3JldHVybiBpbiBvcmRlcn0gaW5zdGVhZCBvZiBhICsKCXtyZXF1aXJlIG9yZGVyfS4KCShkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCBzZXQgT1RIRVJfQVJHUyBhdCBhbGwuCglHcm9rICdcMCcgcmV0dXJuIGZyb20gZ2V0b3B0X2xvbmcgYXMgbm9uLW9wdGlvbiBhcmd1bWVudDsgdHJ5Cgl2YXJpYWJsZSBkZWZpbml0aW9uIGFuZCAoaWYgIUVOVikgZW50ZXIgZ29hbCB0YXJnZXRzIGhlcmUuCgkoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSBhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kIHRvIHN0b3JlIHZhbHVlLgoJVXNlIGZpbmRfbmV4dF90b2tlbiB0byBzaW1wbGlmeSB3b3JkLXNwbGl0dGluZyBsb29wLiAgRG9uJ3QKCXByZXBlbmQgYSBkYXNoIHRvIHVuaW50ZXJwcmV0ZWQgdmFsdWUuICBJbnN0ZWFkLCBpZiBzcGxpdCBpbnRvCglvbmx5IG9uZSB3b3JkLCB0cnkgdmFyaWFibGUgZGVmaW5pdGlvbiBhbmQgZmFpbGluZyB0aGF0IHByZXBlbmQgYQoJZGFzaCB0byB0aGUgd29yZCBhbmQgcGFzcyBpdCB0byBkZWNvZGVfc3dpdGNoZXMgYXMgYSBzaW5nbGUgYXJnLgoKV2VkIFNlcCAgNyAwMzowMjo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogT25seSByZWNoZWNrIG1vZHRpbWVzIGlmCglGSUxFLT5jb21tYW5kX3N0YXRlIHdhcyBjc19ydW5uaW5nIG9uIGVudHJ5IChtZWFuaW5nIHRoZSBjb21tYW5kcwoJYWN0dWFsbHkganVzdCByYW4pLgoJKHVwZGF0ZV9maWxlXzEpOiBXaGVuZXZlciB3ZSBzZXQgRklMRS0+dXBkYXRlX3N0YXR1cywgY2FsbAoJbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaW5zdGVhZCBvZiBqdXN0IHNldF9jb21tYW5kX3N0YXRlLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuZXZlciB3ZSBzZXQKCUNISUxELT5maWxlLT51cGRhdGVfc3RhdHVzLCBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGluc3RlYWQgb2YKCWp1c3Qgc2V0X2NvbW1hbmRfc3RhdGUuCgpUdWUgU2VwICA2IDE5OjEzOjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1PgoKCSogZGVmYXVsdC5jOiBBZGQgbWlzc2luZyAiLgoKCSogam9iLmM6IENoYW5nZWQgYWxsIGFzc2lnbm1lbnRzIG9mIGNvbW1hbmRfc3RhdGUgbWVtYmVycyB0byBjYWxscwoJdG8gc2V0X2NvbW1hbmRfc3RhdGUuCgkqIHJlbWFrZS5jOiBMaWtld2lzZS4KCSogZmlsZS5jIChzZXRfY29tbWFuZF9zdGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogZmlsZS5oOiBEZWNsYXJlIHNldF9jb21tYW5kX3N0YXRlLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogUHV0IGEgKyBmaXJzdCBpbiBvcHRpb25zLgoKTW9uIEp1bCAyNSAxODowNzo0NiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCU1lcmdlIE1TRE9TL0dPMzIgcG9ydCBmcm9tIERKIERlbG9yaWUgPGRqQGN0cm9uLmNvbT4uCgkqIHZwYXRoLmM6IENoYW5nZWQgYWxsIHVzZXMgb2YgJzonIHRvIFBBVEhfU0VQQVJBVE9SX0NIQVIuCgkqIG1haW4uYyAoZGlyZWN0b3J5X2JlZm9yZV9jaGRpcik6IE5ldyB2YXJpYWJsZSwgbW92ZWQgb3V0IG9mIG1haW4KICAgICAgICAod2FzIGxvY2FsKS4KCShtYWluKSBbX19NU0RPU19fXTogTG9vayBmb3IgXCBvciA6IHRvIGRlbGltaXQgbGFzdCBjb21wb25lbnQgb2YKCVBST0dSQU0uICBEb24ndCBmcm9iIEFSR1ZbMF0gYmVmb3JlIHNldHRpbmcgTUFLRV9DT01NQU5EIHZhcmlhYmxlLgoJKGRpZSk6IENoYW5nZSBiYWNrIHRvIGBkaXJlY3RvcnlfYmVmb3JlX2NoZGlyJyBiZWZvcmUgZHlpbmcuCgkqIG1ha2UuaCAoUEFUSF9TRVBBUkFUT1JfQ0hBUik6IE5ldyBtYWNybzsgZGlmZmVyaW5nIGRlZm5zIGZvcgogICAgICAgIFtfX01TRE9TX19dIGFuZCBub3QuCgkqIGpvYi5jIFtfX01TRE9TX19dOiBJbmNsdWRlIDxwcm9jZXNzLmg+LgoJW19fTVNET1NfX10gKGRvc19waWQsIGRvc19zdGF0dXMsIGRvc19ibmFtZSwgZG9zX2JlbmFtZSwKCWRvc19iYXRjaF9maWxlKTogTmV3IHZhcmlhYmxlcy4KCShyZWFwX2NoaWxkcmVuKSBbX19NU0RPU19fXTogRG9uJ3QgY2FsbCB3YWl0OyBqdXN0IGV4YW1pbmUgdGhvc2UgdmFycy4KCSh1bmJsb2NrX3NpZ3MpIFtfX01TRE9TX19dOiBEbyBub3RoaW5nLgoJKHN0YXJ0X2pvYl9jb21tYW5kKSBbX19NU0RPU19fXTogVXNlIHNwYXdudnBlIGluc3RlYWQgb2YgdmZvcmsgJiBleGVjLgoJKGxvYWRfdG9vX2hpZ2gpIFtfX01TRE9TX19dOiBBbHdheXMgcmV0dXJuIHRydWUuCgkoc2VhcmNoX3BhdGgpIFtfX01TRE9TX19dOiBDaGVjayBmb3IgOiBvciAvIGluIEZJTEUgdG8gcHVudC4KCVVzZSBQQVRIX1NFUEFSQVRPUl9DSEFSIGluc3RlYWQgb2YgJzonLgoJKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpIFtfX01TRE9TX19dOiBXaG9sbHkgZGlmZmVyZW50Cgl2YWx1ZXMgZm9yIHNoX2NoYXJzIGFuZCBzaF9jbWRzLiAgV2hvbGx5IG5ldyBjb2RlIHRvIGhhbmRsZSBzaGVsbAoJc2NyaXB0cy4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKSBbX19NU0RPU19fXTogV2hvbGx5IG5ldwogICAgICAgIGltcGxlbWVudGF0aW9uLgoJKiBkaXIuYyBbX19NU0RPU19fXSAoZG9zaWZ5KTogTmV3IGZ1bmN0aW9uLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKSBbX19NU0RPU19fXTogQ2FsbCBpdCBvbiBGSUxFTkFNRSBhbmQKCXByb2Nlc3MgdGhlIHJlc3VsdCBpbnN0ZWFkIG9mIEZJTEVOQU1FIGl0c2VsZi4KCShmaWxlX2ltcG9zc2libGVfcCkgW19fTVNET1NfX106IExpa2V3aXNlLgoJKiBkZWZhdWx0LmMgW19fTVNET1NfX106IERlZmluZSBHQ0NfSVNfTkFUSVZFLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKSBbX19NU0RPU19fXTogVXNlIGB5X3RhYi5jJyBpbnN0ZWFkIG9mIGB5LnRhYi5jJy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW0dDQ19JU19OQVRJVkVdOiBTZXQgQ0MgYW5kIENYWCB0byBgZ2NjJywgWUFDQyB0bwoJYGJpc29uIC15JywgYW5kIExFWCB0byBgZmxleCcuCgkqIGNvbmZpZ3VyZS5iYXQsIGNvbmZpZ2guZG9zOiBOZXcgZmlsZXMuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCkgW19fTVNET1NfX106IEp1c3QgcmVtb3ZlCglpbnRlcm1lZGlhdGVzIGFuZCBleGl0LgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQWRkIHBhcmVucyBpbiBsZW5ndGgKCWNvbXB1dGF0aW9uIGluIC5TVUZGSVhFUyBkZXAgbG9vcCB0byBxdWlldCBjb21waWxlciB3YXJuaW5nLiAgRnJvbQoJSmltIE1leWVyaW5nLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRnJlZSBGSUxFTkFNRSBpZiB3ZSBhbGxvY2F0ZWQgaXQuICBGcm9tCiAgICAgICAgSmltIE1leWVyaW5nLgoKTW9uIEp1bCAgNCAxNzo0NzowOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzYWZlX3N0YXQpOiBOZXcgZnVuY3Rpb24sIEVJTlRSLXNhZmUgd3JhcHBlciBhcm91bmQgc3RhdC4KCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogcmVhZC5jIChjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogYXJzY2FuLmMgKGFyX21lbWJlcl90b3VjaCkgW0VJTlRSXTogRG8gRUlOVFIgbG9vcGluZyBhcm91bmQgZnN0YXQuCgkqIHJlbWFrZS5jIChuYW1lX210aW1lKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKHRvdWNoX2ZpbGUpIFtFSU5UUl06IERvIEVJTlRSIGxvb3BpbmcgYXJvdW5kIGZzdGF0LgoKRnJpIEp1biAyNCAwNTo0MDoyNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hlY2sgZm9yIGEgc2hlbGwgY29tbWFuZCBmaXJzdCwgYW5kCgl0aGVuIHN0cmlwIGxlYWRpbmcgdGFicyBiZWZvcmUgZnVydGhlciBjaGVja2luZyBpZiBpdCdzIG5vdCBhCglzaGVsbCBjb21tYW5kIGxpbmUuCgoJKiBtYWtlLmggW19fYXJtXTogVW5kZWZpbmUgUE9TSVguCglbIV9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVggJiYgIV9QT1NJWF9WRVJTSU9OXTogRG9uJ3QgZGVjbGFyZSBzeXN0ZW0KCWZ1bmN0aW9ucyB0aGF0IHJldHVybiBpbnQuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFmdGVyIHN3YWxsb3dpbmcgYQoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb24sIGlmIElOU1RSSU5HIGlzIHNldCBnb3RvIHN0cmluZ19jaGFyCgkobmV3IGxhYmVsKSBmb3Igbm9ybWFsIElOU1RSSU5HIGhhbmRsaW5nIGNvZGUuCgpTYXQgSnVuICA0IDAxOjExOjIwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3Igc3lzX3NpZ2xpc3QgYW5kIF9zeXNfc2lnbGlzdCB3aXRoCglBQ19IQVZFX0ZVTkNTLiAgSW5zdGVhZCB1c2UgdHdvIEFDX0NPTVBJTEVfQ0hFQ0tzLgoKTW9uIE1heSAyMyAxODoyMDozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxLjEgcmVsZWFzZWQuCgoJKiBtYWtlLmggWyFfX0dOVV9MSUJSQVJZX18gJiYgIVBPU0lYXTogQWxzbyB0ZXN0ICNpZm5kZWYKCV9QT1NJWF9WRVJTSU9OIGZvciB0aGVzZSBkZWNsYXJhdGlvbnMuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogUmVtb3ZlIGJvZ3VzICNpZm5kZWZzCglhcm91bmQgI3VuZGVmcyBvZiBIQVZFX1NFVFJFVUlEIGFuZCBIQVZFX1NFVFJFR0lELgoKU2F0IE1heSAyMSAxNjoyNjozOCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcxIHJlbGVhc2VkLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IERvbid0IHRlc3QgW0hBVkVfU0VUVUlEXQoJYW5kIFtIQVZFX1NFVEdJRF0uICBFdmVyeSBzeXN0ZW0gaGFzIHRob3NlLCBhbmQgY29uZmlndXJlIGRvZXNuJ3QKCWNoZWNrIGZvciB0aGVtLgoKCSogbWFrZS5oIFtfUE9TSVhfVkVSU0lPTl06IERvbid0ICNkZWZpbmUgUE9TSVggI2lmZGVmIHVsdHJpeC4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnKTogRGVwZW5kIG9uIGFuZCB1c2UgbG9hZGF2Zy5jIGluc3RlYWQgb2YKCWdldGxvYWRhdmcuYy4KCShsb2FkYXZnLmMpOiBMaW5rIG9yIGNvcHkgaXQgZnJvbSBnZXRsb2FkYXZnLmMuCgkoZGlzdGNsZWFuKTogUmVtb3ZlIGxvYWRhdmcuYy4KCk1vbiBNYXkgMTYgMjI6NTk6MDQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC40LgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFshIFBPU0lYXTogVW5kZWZpbmUgSEFWRV9TRVRFVUlECglhbmQgSEFWRV9TRVRFR0lELgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogSW4gU0NDUyBydWxlcywgcHV0CgkkKFNDQ1NfT1VUUFVUX09QVElPTikgYmVmb3JlICQ8LiAgT24gc29tZSBzeXN0ZW1zIC1HIGlzIGdyb2trZWQKCW9ubHkgYmVmb3JlIHRoZSBmaWxlIG5hbWUuCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCAtRyBmbGFnIGJlZm9yZSBmaWxlIG5hbWUuCgpUdWUgTWF5IDEwIDE2OjI3OjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFN3YWxsb3cKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9ucyBpbnNpZGUgJycgc3RyaW5ncyB0b28uCgpUaHUgTWF5ICA1IDA0OjE1OjEwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENhbGwgY29sbGFwc2VfY29udGludWF0aW9ucyBvbiBlYWNoIGxpbmUKCWJlZm9yZSBhbGwgZWxzZS4KCk1vbiBBcHIgMjUgMTk6MzI6MDIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTm90aWNlIG5ld2xpbmUgaW5zaWRlCgknJyBzdHJpbmcgd2hlbiBSRVNUUCBpcyBub24tbnVsbC4KCkZyaSBBcHIgMjIgMTc6MzM6MzAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMy4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFJlc2V0IEZJTEUgdG8gRy0+ZmlsZSBhZnRlciB0aGUKCWRvdWJsZS1jb2xvbiBsb29wIHNvIGl0IGlzIG5ldmVyIG51bGwgZm9yIGZvbGxvd2luZyBjb2RlLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRml4IGBvdmVycmlkZSBkZWZpbmUnIHBhcnNpbmcgdG8gc2tpcAoJd2hpdGVzcGFjZSBhZnRlciBgZGVmaW5lJyBwcm9wZXJseS4KCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNkaXIpOiBEZWZpbmUgYXMgQHNyY2RpckA7IGRvbid0IHJlZmVyZW5jZQoJJChWUEFUSCkuCgkoZ2xvYi9NYWtlZmlsZSk6IE5ldyB0YXJnZXQuCgpUaHUgQXByIDIxIDE2OjE2OjU1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjIuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IFVzZSBmaW5kX2NoYXJfdW5xdW90ZS4KCSogbWFrZS5oIChmaW5kX2NoYXJfdW5xdW90ZSk6IERlY2xhcmUgaXQuCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBOZXcgZnVuY3Rpb24sIGdlbmVyYWxpemVkIGZyb20KCWZpbmRfcGVyY2VudC4KCShmaW5kX3BlcmNlbnQsIGZpbmRfc2VtaWNvbG9uLCBwYXJzZV9maWxlX3NlcSk6IFVzZSB0aGF0LgoKV2VkIEFwciAyMCAxODo0MjozOSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBBbHdheXMgYWxsb2NhdGUgbmV3IHN0b3JhZ2UgZm9yCglGSUxFLT5zdGVtLiAgSXQgaXMgbm90IHNhZmUgdG8gc3RvcmUgU1RFTSdzIGFkZHJlc3MgYmVjYXVzZSBpdAoJbWlnaHQgYmUgYXV0byBzdG9yYWdlLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc2V0ZXVpZCBhbmQgc2V0ZWdpZC4KCSogbWlzYy5jIFtIQVZFX1NFVEVVSURdOiBEZWNsYXJlIHNldGV1aWQuCglbSEFWRV9TRVRFR0lEXTogRGVjbGFyZSBzZXRlZ2lkLgoJKG1ha2VfYWNjZXNzLCB1c2VyX2FjY2VzcykgW0hBVkVfU0VURVVJRF06IFVzZSBzZXRldWlkLgoJW0hBVkVfU0VURUdJRF06IFVzZSBzZXRlZ2lkLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogU2V0IFNUQVRVUyB0byBGSUxFLT51cGRhdGVfc3RhdHVzLAoJdG8gcHJlc2VydmUgd2hldGhlciBpdCdzIDIgZm9yIGVycm9yIG9yIDEgZm9yIC1xIHRyaWdnZXIuICBXaGVuCglTVEFUVVMgZ2V0cyBub256ZXJvIGFuZCAtcSBpcyBzZXQsIGFsd2F5cyBzdG9wIGltbWVkaWF0ZWx5LgoJKiBtYWluLmMgKG1haW4sIGRlY29kZV9zd2l0Y2hlcyk6IERpZSB3aXRoIDIgZm9yIGVycm9ycy4KCShtYWluKTogQWNjZXB0IDIgcmV0dXJuIGZyb20gdXBkYXRlX2dvYWxfY2hhaW4gYW5kIGRpZSB3aXRoIHRoYXQuCgkqIG1pc2MuYyAoZmF0YWwsIG1ha2VmaWxlX2ZhdGFsKTogRGllIHdpdGggMjsgMSBpcyByZXNlcnZlZCBmb3IgLXEKCWFuc3dlci4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEaWUgd2l0aCAyIGZvciBlcnJvci4KCShzdGFydF9qb2JfY29tbWFuZCk6IFNldCB1cGRhdGVfc3RhdHVzIHRvIDIgZm9yIGVycm9yLiAgU2V0IGl0IHRvCgkxIHdoZW4gd2Ugd291bGQgcnVuIGEgY29tbWFuZCBhbmQgcXVlc3Rpb25fZmxhZyBpcyBzZXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBtYXJrIG1ha2VmaWxlcyBhcyBwcmVjaW91cy4gIEp1c3QKCWxpa2Ugb3RoZXIgdGFyZ2V0cywgdGhleSBjYW4gYmUgbGVmdCBpbmNvbnNpc3RlbnQgYW5kIGluIG5lZWQgb2YKCXJlbWFraW5nIGJ5IGFib3J0ZWQgY29tbWFuZHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBXcml0ZSBubyBlcnJvciBtc2cgZm9yIC1pbmNsdWRlIGZpbGUuCgpUdWUgQXByICA1IDA1OjIyOjE5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBEb24ndCB1bmJsb2NrIHNpZ25hbHMuCgoJKiBmaWxlLmggKHN0cnVjdCBmaWxlKTogQ2hhbmdlIG1lbWJlciBgZG91YmxlX2NvbG9uJyBmcm9tIGZsYWcgdG8KCWBzdHJ1Y3QgZmlsZSAqJy4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBTZXQgZG91YmxlX2NvbG9uIHBvaW50ZXIgaW5zdGVhZCBvZiBmbGFnLgoJKiBtYWluLmMgKG1haW4pOiBXaGVuIGRpc3F1YWxpZnlpbmcgbWFrZWZpbGVzIGZvciB1cGRhdGluZywgdXNlCglkb3VibGVfY29sb24gcG9pbnRlciB0byBmaW5kIGFsbCBlbnRyaWVzIGZvciBhIGZpbGUuCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IElmIHRoZXJlIGlzIGFscmVhZHkgYSBkb3VibGUtY29sb24gZW50cnkKCWZvciB0aGUgZmlsZSwgc2V0IE5FVy0+ZG91YmxlX2NvbG9uIHRvIHRoYXQgcG9pbnRlci4KCShmaWxlX2hhc2hfZW50ZXIpOiBVc2UgRklMRS0+ZG91YmxlX2NvbG9uIHRvIGZpbmQgYWxsIGVudHJpZXMgdG8KCXNldCBuYW1lLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEbyBpbm5lciBsb29wIG9uIGRvdWJsZS1jb2xvbiBlbnRyaWVzLgoJKHVwZGF0ZV9maWxlKTogVXNlIEZJTEUtPmRvdWJsZV9jb2xvbiBwb2ludGVyIHRvIGZpbmQgYWxsIGVudHJpZXMuCgkoZl9tdGltZSk6IExpa2V3aXNlLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogUHJvcGFnYXRlIG10aW1lIGNoYW5nZSB0byBhbGwgZW50cmllcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmV0dXJuIGFmdGVyIGFib3J0LgoKRnJpIEFwciAgMSAxODo0NDoxNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShwYXJzZV9maWxlX3NlcSk6IFdoZW4gcmVtb3ZpbmcgYW4gZWx0IHRoYXQgaXMganVzdCBgKScsIHByb3Blcmx5CglmaXggdXAgdGhlIHByZXZpb3VzIGVsdCdzIG5leHQgcG9pbnRlci4KCk1vbiBNYXIgMjggMTg6MzE6NDkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAbW9sZS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG8gQUNfU0VUX01BS0UuCgkqIEdOVW1ha2VmaWxlIChNYWtlZmlsZS5pbik6IEVkaXQgTUFLRSBhc3NpZ25tZW50IGludG8gQFNFVF9NQUtFQC4KCkZyaSBNYXIgIDQgMDA6MDI6MzIgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKHN1YnN0X2V4cGFuZCk6IElmIEJZX1dPUkQgb3IgU1VGRklYX09OTFkgaXMgc2V0IGFuZAoJdGhlIHNlYXJjaCBzdHJpbmcgaXMgdGhlIGVtcHR5IHN0cmluZywgZmluZCBhIG1hdGNoIGF0IHRoZSBlbmQgb2YKCWVhY2ggd29yZCAodXNpbmcgZW5kX29mX3Rva2VuIGluIHBsYWNlIG9mIHNpbmRleCkuCgoJKiBtaXNjLmMgKGVuZF9vZl90b2tlbik6IERvbid0IHRyZWF0IGJhY2tzbGFzaGVzIHNwZWNpYWxseTsgeW91CgljYW4gbm8gbG9uZ2VyIGVzY2FwZSBibGFua3Mgd2l0aCBiYWNrc2xhc2hlcyBpbiBleHBvcnQsIHVuZXhwb3J0LAoJYW5kIHZwYXRoLiAgVGhpcyB3YXMgbmV2ZXIgZG9jdW1lbnRlZCBhbnl3YXkuCgpUaHUgTWFyICAzIDIzOjUzOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBWYXJpYWJsZSBuYW1lIGZvciBgZGVmaW5lJyBpcyBub3QganVzdAoJZmlyc3QgdG9rZW47IHVzZSB3aG9sZSByZXN0IG9mIGxpbmUgYW5kIHN0cmlwIHRyYWlsaW5nIGJsYW5rcy4KCldlZCBGZWIgMTYgMTY6MDM6NDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4xLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWRkIC1kIG1zZyBzdGF0aW5nIGFyZ3MuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBVc2UgaXNzcGFjZSB0byBza2lwIG92ZXIgbGVhZGluZwoJd2hpdGVzcGFjZSwgYW5kIGV4cGxpY2l0bHkgYXZvaWQgc2tpcHBpbmcgb3ZlciB0YWJzLiAgRG9uJ3Qgd2FudAoJdG8gc2tpcCBqdXN0IHNwYWNlcyB0aG91Z2g7IGZvcm1mZWVkcyBldCBhbCBzaG91bGQgYmUgc2tpcHBlZC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2hwdXhdOiBBZGQgZiBpbiBBUkZMQUdTLgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtfX2hwdXhdOiBTdWJ0cmFjdCAyIGluc3RlYWQgb2YgMSBmcm9tCglzaXplb2YgYXJfbmFtZSBmb3IgbWF4IGxlbmd0aCB0byBjb21wYXJlLgoKCSogbWlzYy5jIFtHRVRMT0FEQVZHX1BSSVZJTEVHRURdIFtQT1NJWF06IFVuZGVmaW5lIEhBVkVfU0VUUkVVSUQKCSNpZmRlZiBIQVZFX1NFVFVJRDsgbGlrZXdpc2UgSEFWRV9TRVRSRUdJRCBhbmQgSEFWRV9TRVRHSUQuCgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHVzZXJfYWNjZXNzIGFmdGVyIHNldHRpbmcgYHByb2dyYW0nLCBpbiBjYXNlCglpdCBuZWVkcyB0byB1c2UgaXQgaW4gYW4gZXJyb3IgbWVzc2FnZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElnbm9yZSBhbiBlbXB0eSBsaW5lIHN0YXJ0aW5nIHdpdGggYSB0YWIuCgpUaHUgRmViIDEwIDIxOjQ1OjMxIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKEFDX1NZU19TSUdMSVNUX0RFQ0xBUkVEKTogVXNlIHRoaXMgaW5zdGVhZCBvZgoJQUNfQ09NUElMRV9DSEVDSyB0aGF0IGlzIG5vdyBpdHMgY29udGVudHMuCgpGcmkgRmViICA0IDE2OjI4OjU0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmg6ICN1bmRlZiBzdHJlcnJvciBhZnRlciAjaW5jbHVkZSA8c3RyaW5nLmg+LgoJWyEgQU5TSV9TVFJJTkddOiBEZWNsYXJlIHN0cmVycm9yLgoKVGh1IEZlYiAgMyAwMjoyMToyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChzdHJlcnJvcik6ICN1bmRlZiBhbnkgbWFjcm8gYmVmb3JlIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpNb24gSmFuIDMxIDE5OjA3OjIzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENhbGN1bGF0ZSBCRUcgYmVmb3JlIGxvb3AKCXRvIHN0cmlwIGJsYW5rcyBieSBkZWNyZW1lbnRpbmcgRU5ELiAgRG9uJ3QgZGVjciBFTkQgdG8gYmVmb3JlIEJFRy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNraXAgb3ZlciBsZWFkaW5nIHNwYWNlIGNoYXJhY3RlcnMsIGJ1dAoJbm90IHRhYnMsIGFmdGVyIHJlbW92aW5nIGNvbnRpbnVhdGlvbnMgYW5kIGNvbW1lbnRzIChpdCB1c2VkIHRvCgl1c2UgaXNzcGFjZSkuCgpUdWUgSmFuIDI1IDE2OjQ1OjA1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEluICQoQEQpIGV0IGFsLCB1c2UKCXBhdHN1YnN0IHRvIHJlbW92ZSB0cmFpbGluZyBzbGFzaC4KCgkqIGNvbW1hbmRzLmMgKGRlbGV0ZV90YXJnZXQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCWRlbGV0ZV9jaGlsZF90YXJnZXRzLiAgQ2hlY2sgZm9yIGFyY2hpdmUgbWVtYmVycyBhbmQgZ2l2ZSBzcGVjaWFsIG1zZy4KCShkZWxldGVfY2hpbGRfdGFyZ2V0cyk6IFVzZSBkZWxldGVfdGFyZ2V0LgoKTW9uIEphbiAxNyAxNzowMzoyMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFVzZSAkKFRFWEkyRFZJX0ZMQUdTKSBpbgoJdGV4aTJkdmkgcnVsZXMuCVVzZSAkKE1BS0VJTkZPX0ZMQUdTKSBpbiBtYWtlaW5mbyBydWxlcy4KClR1ZSBKYW4gMTEgMTk6Mjk6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlICh0YXJmaWxlcyk6IE9taXQgbWFrZS1kb2MuCgkobWFrZS0kKHZlcnNpb24pLnRhcik6IEluY2x1ZGUgbWFrZS5pbmZvKi4KCkZyaSBKYW4gIDcgMTY6Mjc6MDAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWd1cmUsIGNvbmZpZy5oLmluKTogQ29tbWVudCBvdXQgcnVsZXMuCgpUaHUgSmFuICA2IDE4OjA4OjA4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoYmlucHJlZml4LCBtYW5wcmVmaXgpOiBOZXcgdmFyaWFibGVzLgoJKGluc3RuYW1lKTogVmFyaWFibGUgcmVtb3ZlZC4KCShpbnN0YWxsKTogVXNlICQoe2JpbixtYW59cHJlZml4KW1ha2UgaW4gcGxhY2Ugb2YgJChpbnN0bmFtZSkuCglGaWxlIHRhcmdldHMgbGlrZXdpc2VkIHJlbmFtZWQuCgpNb24gSmFuICAzIDE3OjUwOjI1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAgcmVsZWFzZWQuCgpUaHUgRGVjIDIzIDE0OjQ2OjU0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuMy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBJbnNpZGUgbXVsdGktd29yZCBhcmNoaXZlIHJlZgoJdHJhbnNsYXRpb24gbG9vcCwgY2hlY2sgTkVXMT09MCBhdCBlbmQgYW5kIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyKTogRGlzdHJpYnV0ZSBpbnN0YWxsLnNoLgoJKiBpbnN0YWxsLnNoOiBOZXcgZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCByZWRpcmVjdGlvbiBmb3IgYWRtaW4KCWNtZHMgb3V0c2lkZSBzdWJzaGVsbCBwYXJlbnMsIHRvIGF2b2lkICJjb21tYW5kIG5vdCBmb3VuZCIgbXNncwoJZnJvbSB0aGUgc2hlbGwuCgpXZWQgRGVjIDIyIDE3OjAwOjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNDQ1NfR0VUX01JTlVTX0cgY2hlY2spOiBQdXQgLUcgZmxhZyBsYXN0IGluIGdldCBjbWQuCglSZWRpcmVjdCBvdXRwdXQgJiBlcnJvciBmcm9tIGdldCB0byAvZGV2L251bGwuCglGaXggcmV2ZXJzZWQgc2Vuc2Ugb2YgdGVzdC4KCkZyaSBEZWMgMTcgMTU6MzE6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFVzZSBwYXJlbnMgaW5zdGVhZCBvZgoJYnJhY2VzIGluc2lkZSBpZiBjb25kaXRpb24gY29tbWFuZDsgc29tZSBzaGVsbHMgbG9zZS4KClRodSBEZWMgMTYgMTU6MTA6MjMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4yLgoKCSogYXJzY2FuLmMgW01fVU5JWF06IE1vdmUgI3VuZGVmIE1fWEVOSVggZm9yIFBPUlRBUiBzdHVmZi4KCShQT1JUQVIpIFtNX1hFTklYXTogRGVmaW5lIHRvIDAgaW5zdGVhZCBvZiAxLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogT25seSBleHBvcnQgTUFLRUZMQUdTIGlmICFBTEwuCgpXZWQgRGVjIDE1IDE3OjQ3OjQ4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBDYXN0IHJlc3VsdCBvZiBwb2ludGVyIGFyaXRoIHRvIHVuc2lnbmVkIGludAoJYmVmb3JlIHBhc3NpbmcgdG8gZGVmaW5lX3ZhcmlhYmxlIGZvciBlbnZhcnMuICBNYXR0ZXJzIHdoZW4KCXNpemVvZih1bnNpZ25lZCkhPXNpemVvZihwdHJkaWZmX3QpLgoKVHVlIERlYyAxNCAxNDoyMToxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBBZGQgbmV3IGNoZWNrIGZvciBTQ0NTX0dFVF9NSU5VU19HLgoJKiBjb25maWcuaC5pbjogQWRkICN1bmRlZiBTQ0NTX0dFVF9NSU5VU19HLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBVc2UgYCQoU0NDU19PVVRQVVRfT1BUSU9OKScgaW4KCXBsYWNlIG9mIGAtRyAkQCcgaW4gU0NDUyBjb21tYW5kcy4KCShkZWZhdWx0X3ZhcmlhYmxlcykgW1NDQ1NfR0VUX01JTlVTX0ddOiBEZWZpbmUgU0NDU19PVVRQVVRfT1BUSU9OCgl0byAiLUckQCIuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IFB1dCB0b3VjaCBzdGFtcC1jb25maWcgaW4gc2Vjb25kIGFyZwoJKHNvIGl0IGdvZXMgaW4gY29uZmlnLnN0YXR1cyksIHJhdGhlciB0aGFuIGFmdGVyd2FyZC4KCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlKTogRG9uJ3QgY2FsbCBlbnRlcl9maWxlIG9uIHRoZSBhcmNoaXZlIGZpbGUKCWlmIGl0IGRvZXNuJ3QgZXhpc3QgKGJ5IGZpbGVfZXhpc3RzX3ApLgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogUmVwbGFjZSBgJCRkL2Zvby5pbmZvJwoJd2l0aCBgJCRkaXIvbWFrZS5pbmZvJyBpbiBpbnN0YWxsLWluZm8gaW52b2NhdGlvbiAob29wcykuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IE9ubHkgc2V0IExBU1RQQVRIIHNldCBQQVRIIHdoZW4KCXdlIGRvIG5vdCB1bmxpbmsgYW5kIGZyZWUgUEFUSC4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZV9kYXRhX2Jhc2UpOiBGaXggaW52ZXJ0ZWQgY2FsY3VsYXRpb24gZm9yCglhdmVyYWdlIGZpbGVzIHBlciBoYXNoIGJ1Y2tldC4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBXaGVuIHdlIHNlZSBhIE5VTCwgZ2l2ZSBvbmx5IGEgd2FybmluZyBhbmQKCXN5bnRoZXNpemUgYSBuZXdsaW5lIHRvIHRlcm1pbmF0ZSB0aGUgYnVpbGRpbmcgbGluZSAodXNlZCB0bwoJZmF0YWwpLiAgTW92ZSBmZ2V0cyBjYWxsIGludG8gdGhlIGxvb3AgY29uZGl0aW9uLCBhbmQgYWZ0ZXIgdGhlCglsb29wIHRlc3QgZmVycm9yICh1c2VkIHRvIHRlc3QgIWZlb2YgaW4gdGhlIGxvb3ApLgoKRnJpIERlYyAgMyAxNjo0MDozMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3RyZXJyb3IgaW4gQUNfSEFWRV9GVU5DUy4KClRodSBEZWMgIDIgMTU6Mzc6NTAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCglEaWZmZXJlbnRpYXRlIGRpZmZlcmVudCBmbGF2b3JzIG9mIG1pc3NpbmcgbWFrZWZpbGUgZXJyb3IgbXNncywKCXJlbW92aW5nIGdyYXR1aXRvdXMgYGZvcGVuOiAnIGFuZCBnaXZpbmcgY2FsbGVyIGZvciBpbmNsdWRlZCBtYWtlZmlsZXMuCgkqIG1pc2MuYyBbISBIQVZFX1NUUkVSUk9SXTogRGVmaW5lIG91ciBvd24gc3RyZXJyb3IgaGVyZS4KCShwZXJyb3Jfd2l0aF9uYW1lLCBwZmF0YWxfd2l0aF9uYW1lKTogVXNlIHN0cmVycm9yIGluc3RlYWQgb2YKCXJlcGxpY2F0aW5nIGl0cyBmdW5jdGlvbmFsaXR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZXR1cm4gaW50IGluc3RlYWQgb2Ygdm9pZC4KCShyZWFkX2FsbF9tYWtlZmlsZXMsIHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycyB0byBub3RpY2UgemVybwoJcmV0dXJuIGFuZCBnaXZlIGVycm9yIG1zZy4KClRodSBOb3YgMTEgMTE6NDc6MzYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4xLgoKCSogZGVmYXVsdC5jOiBQdXQgYC1HICRAJyBiZWZvcmUgJDwgaW4gU0NDUyBjbWRzLgoKV2VkIE5vdiAxMCAwNjowNjoxNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWZ0ZXIgdHJ5aW5nIGEgdmFyaWFibGUgZGVmbiwgbm90aWNlIGlmCgl0aGUgbGluZSBiZWdpbnMgd2l0aCBhIHRhYiwgYW5kIGRpYWdub3NlIGFuIGVycm9yLgoKU3VuIE5vdiAgNyAwODowNzozNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LgoKV2VkIE5vdiAgMyAwNjo1NDozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjEwLgoKCSogaW1wbGljaXQuYyAodHJ5X2ltcGxpY2l0X3J1bGUpOiBMb29rIGZvciBhIG5vcm1hbCBydWxlIGJlZm9yZSBhbgoJYXJjaGl2ZSBydWxlLgoKRnJpIE9jdCAyOSAxNjo0NToyOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc29ydCcpOiBEb3VibGUgTldPUkRTIHdoZW4gaXQKCW92ZXJmbG93cywgaW5zdGVhZCBvZiBhZGRpbmcgZml2ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IFJlbW92ZSBsb2FkYXZnLgoKV2VkIE9jdCAyNyAxNzo1ODozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjkuCgoJKiBmaWxlLmggKE5FV19NVElNRSk6IERlZmluZSBuZXcgbWFjcm8uCgkqIG1haW4uYyAobWFpbik6IFNldCB0aW1lIG9mIE5FV19GSUxFUyB0byBORVdfTVRJTUUsIG5vdCB0bwoJY3VycmVudCB0aW1lIHJldHVybmVkIGZyb20gc3lzdGVtLiAgUmVtb3ZlZCB2YXJpYWJsZSBOT1cuCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFVzZSBORVdfTVRJTUUgaW4gcGxhY2Ugb2YKCWN1cnJlbnQgdGltZSBoZXJlIHRvby4KClR1ZSBPY3QgMjYgMTk6NDU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC44LgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBEb24ndCBjbGVhciBNVVNUX01BS0Ugd2hlbiBGSUxFIGhhcyBubwoJY21kcyBhbmQgIURFUFNfQ0hBTkdFRCB1bmxlc3MgYWxzbyAhTk9FWElTVC4KCk1vbiBPY3QgMjUgMTU6MjU6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIGNvbnZlcnRpbmcgbXVsdGktd29yZCBhcmNoaXZlCglyZWZzLCBpZ25vcmUgYSB3b3JkIGJlZ2lubmluZyB3aXRoIGEgJygnLgoKRnJpIE9jdCAyMiAwMjo1MzozOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3Igc3lzL3RpbWViLmguCgkqIG1ha2UuaCBbSEFWRV9TWVNfVElNRUJfSF06IFRlc3QgdGhpcyBiZWZvcmUgaW5jbHVkaW5nIGl0LgoKVGh1IE9jdCAyMSAxNjo0ODoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjcuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBOZXcgbG9jYWwgVEFSR1BFUkNFTlQuICBTZXQgaXQgdG8KCVRBUkdOQU1FKzEgZm9yICIoJS5vKSIsIHRvIFRBUkdOQU1FIGZvciAiJS4/Ii4gIFVzZSBpdCBpbiBwbGFjZSBvZgoJVEFSR05BTUUgdG8gaW5pdGlhbGl6ZSBQRVJDRU5UU1swXS4KCk1vbiBPY3QgMTggMDY6NDk6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogVXNlIEFDX0hBVkVfSEVBREVSUyh1bmlzdGQuaCkgaW5zdGVhZCBvZiBBQ19VTklTVERfSC4KCVJlbW92ZSBBQ19VU0c7IGl0IGlzIG5vIGxvbmdlciB1c2VkLgoKCSogZmlsZS5jIChwcmludF9maWxlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwcmludF9maWxlX2RhdGFfYmFzZS4KCShwcmludF9maWxlX2RhdGFfYmFzZSk6IENhbGwgaXQuCgkqIHJ1bGUuYyAocHJpbnRfcnVsZSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJcHJpbnRfcnVsZV9kYXRhX2Jhc2UuCgkocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBDYWxsIGl0LgoKVGh1IE9jdCAxNCAxNDo1NDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4KCW91dCBvZiBpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMuCgkoaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzKTogTW92ZSBzdWZmaXggcnVsZSBjb2RlIHRoZXJlLgoJKiBtYWtlLmg6IERlY2xhcmUgaW5zdGFsbF9kZWZhdWx0X3N1ZmZpeF9ydWxlcy4KCSogbWFpbi5jIChtYWluKTogQ2FsbCBpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzIGJlZm9yZSByZWFkaW5nCgltYWtlZmlsZXMuICBNb3ZlIGNvbnZlcnRfdG9fcGF0dGVybiBjYWxsIGJlZm9yZQoJaW5zdGFsbF9kZWZhdWx0X2ltcGxpY2l0X3J1bGVzLgoKCSogam9iLmggKHN0cnVjdCBjaGlsZCk6IE1ha2UgYHBpZCcgbWVtYmVyIHR5cGUgYHBpZF90JyBpbnN0ZWFkIG9mCglgaW50Jy4KCgkqIGNvbXBhdE1ha2VmaWxlIChSQU5MSUIpOiBOZXcgdmFyaWFibGUsIHNldCBieSBjb25maWd1cmUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIFJBTkxJQiB2YWx1ZSBkb3duIHRvIHN1Ym1ha2UuCgoJRml4ZXMgZm9yIFNDTyAzLjIgImRldnN5cyA0LjIiIGZyb20gcHNzQHRmbi5jb20gKFBldGVyIFNhbHZpdHRpKS4KCSogbWFrZS5oOiBJbmNsdWRlIDxzeXMvdGltZWIuaD4gYmVmb3JlIDx0aW1lLmg+IGZvciBTQ08gbG9zc2FnZS4KCSogam9iLmMgWyEgZ2V0ZHRhYmxlc2l6ZV0gWyEgSEFWRV9HRVREVEFCTEVTSVpFXTogSWYgTk9GSUxFIGlzIG5vdAoJZGVmaW5lZCBidXQgTk9GSUxFU19NQVggaXMsIGRlZmluZSBpdCB0byBiZSB0aGF0LgoKTW9uIE9jdCAxMSAxOTo0NzozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBEZXBlbmQgb24gYWNjb25maWcuaCwgc28gaXQKCWlzIGRpc3RyaWJ1dGVkLgoKU3VuIE9jdCAgMyAxNToxNTozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogQWRkIGAtRyAkQCcgdG8gU0NDUyBnZXQgY21kcy4KClR1ZSBTZXAgMjggMTQ6MTg6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWRkIF4gdG8gU0hfQ0hBUlM7IGl0CglpcyBhbm90aGVyIHN5bWJvbCBmb3IgfCBpbiBzb21lIHNoZWxscy4KCSogbWFpbi5jIChtYWluKTogQWRkIGl0IHRvIENNRF9ERUZTIHF1b3RpbmcgbGlzdCBhcyB3ZWxsLgoKTW9uIFNlcCAyMCAxODowNToyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgJz0nIGZyb20KCVNIX0NIQVJTLiAgT25seSBwdW50IG9uICc9JyBpZiBpdCBpcyB1bnF1b3RlZCBpbiBhIHdvcmQgYmVmb3JlIHRoZQoJZmlyc3Qgd29yZCB3aXRob3V0IGFuIHVucXVvdGVkICc9Jy4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFNldCB2X2V4cG9ydCBmb3IgTUFLRUZMQUdTLgoKRnJpIFNlcCAxNyAwMDozNzoxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBVc2UgLkRFRkFVTFQgY21kcyBmb3IgcGhvbnkgdGFyZ2V0cy4KCgkqIG1ha2UuaCBbX0FJWCAmJiBfUE9TSVhfU09VUkNFXTogRGVmaW5lIFBPU0lYLgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX2NoaWxkX3RhcmdldHMpOiBEb24ndCBkZWxldGUgcGhvbnkgZmlsZXMuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBTZXQgQ09NTUFORFNfUkVDVVJTRSBpbiBGTEFHUyBpZiB3ZQoJc2VlIGEgYCsnIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbW1hbmQgbGluZS4KClRodSBTZXAgIDkgMTc6NTc6MTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC42LgoKV2VkIFNlcCAgOCAyMDoxNDoyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRGVmaW5lIE1BS0VGTEFHUyB3aXRoIG9fZmlsZSwgbm90IG9fZW52LgoKTW9uIEF1ZyAzMCAxMjozMTo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEZhdGFsIG9uIGFuIHVudGVybWluYXRlZCByZWZlcmVuY2UuCgpUaHUgQXVnIDE5IDE2OjI3OjUzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRGVmaW5lIG5ldyBvX2RlZmF1bHQKCXZhcmlhYmxlIGBNQUtFX1ZFUlNJT04nIGZyb20gdmVyc2lvbl9zdHJpbmcgYW5kIHJlbW90ZV9kZXNjcmlwdGlvbi4KCgkqIG1ha2UuaCAodmVyc2lvbl9zdHJpbmcsIHJlbW90ZV9kZXNjcmlwdGlvbik6IERlY2xhcmUgdGhlc2UgaGVyZS4KCSogbWFpbi5jOiBEb24ndCBkZWNsYXJlIHZlcnNpb25fc3RyaW5nLgoJKHByaW50X3ZlcnNpb24pOiBEb24ndCBkZWNsYXJlIHJlbW90ZV9kZXNjcmlwdGlvbi4KCldlZCBBdWcgMTggMTU6MDE6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZyZWUgc3BhY2UgcG9pbnRlZCB0byBieSBDT05ESVRJT05BTFMKCWJlZm9yZSByZXN0b3JpbmcgdGhlIG9sZCBwb2ludGVyLgoKTW9uIEF1ZyAxNiAxNzozMzozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQob2JqcykpOiBEZXBlbmQgb24gY29uZmlnLmguCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBEZXBlbmQgb24gY29tcGF0TWFrZWZpbGUuCgoJKiBjb25maWd1cmUuaW46IFRvdWNoIHN0YW1wLWNvbmZpZyBhZnRlciBBQ19PVVRQVVQuCgpGcmkgQXVnIDEzIDE2OjA0OjIyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNC4KClRodSBBdWcgMTIgMTc6MTg6NTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaDogSW5jbHVkZSA8Y29uZmlnLmg+IGluc3RlYWQgb2YgImNvbmZpZy5oIi4KCldlZCBBdWcgMTEgMDI6MzU6MjUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IE1ha2UgYWxsIHZhcmlhYmxlcyBpbnRlcm5lZCBmcm9tIEVOVlAgYmUgdl9leHBvcnQuCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0CgljaGVjayBmb3IgYW4gb19maWxlIHZhcmlhYmxlIHRoYXQgYGdldGVudicgZmluZHMuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IE5ldyBsb2NhbCB2YXJpYWJsZSBBTllfTE9DQUw7IHNldCBpdAoJd2hpbGUgc2V0dGluZyBBTllfUkVNT1RFLiAgSWYgIUFOWV9MT0NBTCwgZG9uJ3Qgd2FpdCBmb3IgbG9jYWwga2lkcy4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgZGVjb2RlX2Vudl9zd2l0Y2hlcyBvbiBNRkxBR1MuICBET0MgVEhJUy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6ICNpZiAwIG91dCBmcmVlaW5nIG9mIEVOVlAgc2luY2UgaXQKCWlzIGVudmlyb24uCgpNb24gQXVnICA5IDE3OjM3OjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMy4KCgkqIHJlbW90ZS1zdHViLmMgKHJlbW90ZV9zdGF0dXMpOiBTZXQgZXJybm8gdG8gRUNISUxEIGJlZm9yZSByZXR1cm4uCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogU2NhbiB0aGUgY2hhaW4gZm9yIHJlbW90ZSBjaGlsZHJlbiBhbmQKCW5ldmVyIGNhbGwgcmVtb3RlX3N0YXR1cyBpZiB0aGVyZSBhcmUgbm9uZS4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6ICNpZiAwIG91dCBjYWxsaW5nCgl0YXJnZXRfZW52aXJvbm1lbnQ7IGp1c3Qgc2V0IEVOVlAgdG8gZW52aXJvbiBpbnN0ZWFkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBDaGVjayBmb3IgbmVnYXRpdmUgcmV0dXJuIGZyb20KCXJlbW90ZV9zdGF0dXMgYW5kIGZhdGFsIGZvciBpdC4KCVdoZW4gYmxvY2tpbmcgbG9jYWwgY2hpbGQgd2FpdCByZXR1cm5zIDAsIHRoZW4gdHJ5IGEgYmxvY2tpbmcgY2FsbAoJdG8gcmVtb3RlX3N0YXR1cy4KClR1ZSBBdWcgIDMgMDA6MTk6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjbGVhbik6IERlbGV0ZSBtYWtlLmluZm8qIGFuZCBtYWtlLmR2aSBoZXJlLgoJKGRpc3RjbGVhbik6IE5vdCBoZXJlLgoKCSogZGVwLmggKFJNXyopOiBVc2UgI2RlZmluZXMgaW5zdGVhZCBvZiBlbnVtIHRvIGF2b2lkIGxvc3NhZ2UgZnJvbQoJY29tcGlsZXJzIHRoYXQgZG9uJ3QgbGlrZSBlbnVtIHZhbHVlcyB1c2VkIGFzIGludHMuCgpNb24gQXVnICAyIDE2OjQ2OjM0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobG9hZGF2Zyk6IEFkZCAkKExPQURMSUJFUykuCgpTdW4gQXVnICAxIDE2OjAxOjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMi4KCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnLCBjaGVjay1sb2FkYXZnKTogTmV3IHRhcmdldHMuCgkoY2hlY2spOiBEZXBlbmQgb24gY2hlY2stbG9hZGF2Zy4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERlcGVuZCBvbiBjb25maWcuaC4KCgkqIG1pc2MuYyAobG9nX2FjY2Vzcyk6IFdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dC4KCkZyaSBKdWwgMzAgMDA6MDc6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4xLgoKVGh1IEp1bCAyOSAyMzoyNjo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTWVNfU0lHTElTVF9ERUNMQVJFRCk6IEluIHRlc3QgcHJvZ3JhbSBpbmNsdWRlCgk8dW5pc3RkLmg+ICNpZmRlZiBIQVZFX1VOSVNURF9ILgoKCSogY29tcGF0TWFrZWZpbGUgKC5QSE9OWSk6IFB1dCBhZnRlciBgYWxsJyBldCBhbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0lSSVhfU1VOLgoKV2VkIEp1bCAyOCAxNzo0MToxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LgoKTW9uIEp1bCAyNiAxNDozNjo0OSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjguCgpTdW4gSnVsIDI1IDIyOjA5OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNy4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpL21ha2UuaW5mbyk6IERvbid0IHVzZSAkKGluc3RuYW1lKS4KCVJ1biBpbnN0YWxsLWluZm8gc2NyaXB0IGlmIHByZXNlbnQuCgpGcmkgSnVsIDIzIDE2OjAzOjUwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW1NUQVRfTUFDUk9TX0JST0tFTl06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFt1dHNdLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfU1RBVF9NQUNST1NfQlJPS0VOLgoKV2VkIEp1bCAxNCAxODo0ODoxMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjYuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZWNvZ25pemUgZGlyZWN0aXZlIGAtaW5jbHVkZScsIGxpa2UKCWBpbmNsdWRlJyBidXQgc2V0cyBSTV9ET05UQ0FSRSBmbGFnLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSWYgRklMRSBpcyBuaWwsIHVzZQoJY3VycmVudF92YXJpYWJsZV9zZXRfbGlzdCBpbiBwbGFjZSBvZiBGSUxFLT52YXJpYWJsZXMuCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IEdldCBhbiBlbnZpcm9ubWVudCBmb3IKCXRoZSBjaGlsZCBmcm9tIHRhcmdldF9lbnZpcm9ubWVudCBpbnN0ZWFkIG9mIHVzaW5nIGVudmlyb24uCgoJKiBkZXAuaDogRGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShSTV8qKTogRGVmaW5lIG5ldyBlbnVtIGNvbnN0YW50cy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2Vjb25kIGFyZyBpcyBGTEFHUyBpbnN0ZWFkIG9mIFRZUEUuCglUcmVhdCBpdCBhcyBhIGJpdCBtYXNrIGNvbnRhaW5pbmcgUk1fKi4KCShyZWFkX2FsbF9tYWtlZmlsZXMpOiBGb3IgZGVmYXVsdCBtYWtlZmlsZXMsIHNldCBELT5jaGFuZ2VkIHRvCglSTV9ET05UQ0FSRSBpbnN0ZWFkIG9mIDEuCgkqIG1haW4uYzogRG9uJ3QgZGVjbGFyZSByZWFkX2FsbF9tYWtlZmlsZXMgaGVyZS4KCShtYWluKTogQ2hlY2sgYGNoYW5nZWQnIG1lbWJlciBvZiByZWFkX21ha2VmaWxlcyBlbHRzIGZvciBSTV8qCglmbGFncyBpbnN0ZWFkIG9mIHNwZWNpZmljIGludGVnZXIgdmFsdWVzLgoKTW9uIEp1bCAxMiAyMjo0MjoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtzZXF1ZW50ICYmIGkzODZdOiAjdW5kZWYgUE9TSVguICBGcm9tIHRyb3N0QGNzZS5vZ2kuZWR1LgoKVGh1IEp1bCAgOCAxOTo1MToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJZiBFTEVNIGlzIHplcm8gMCwgZnJlZSBQQVRURVJOCglhcyB3ZWxsIGFzIFZQQVRILgoJKGJ1aWxkX3ZwYXRoX2xpc3RzKTogRW1wdHkgYHZwYXRocycgYXJvdW5kIGNvbnN0cnVjdF92cGF0aF9saXN0CgljYWxsIGZvciAkKFZQQVRIKS4gIEV4cGFuZCAkKHN0cmlwICQoVlBBVEgpKSwgbm90IGp1c3QgJChWUEFUSCkuCgoJKiBydWxlLmMgKGNvbnZlcnRfc3VmZml4X3J1bGUpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2YgeG1hbGxvYyBmb3IKCVBFUkNFTlRTLCB3aG9zZSBzdG9yYWdlIGlzIG5vdCBjb25zdW1lZCBieSBjcmVhdGVfcGF0dGVybl9ydWxlLgoKCSogbWFrZS5oIFtfX21pcHMgJiYgX1NZU1RZUEVfU1ZSM106ICN1bmRlZiBQT1NJWC4KCldlZCBKdW4gMzAgMTg6MTE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny41LgoKCSogcnVsZS5jIChtYXhfcGF0dGVybl90YXJnZXRzKTogTmV3IHZhcmlhYmxlLgoJKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogQ29tcHV0ZSBpdHMgdmFsdWUuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBNYWtlIFRSWVJVTEVTIG1heF90YXJnZXRfcGF0dGVybnMKCXRpbWVzIGJpZ2dlci4gIE1vdmUgYWRkaW5nIG5ldyBUUllSVUxFUyBlbHQgaW5zaWRlIHRoZSBpbm5lcgoJdGFyZ2V0cyBsb29wLCBzbyBlYWNoIG1hdGNoaW5nIHRhcmdldCBnZXRzIGl0cyBvd24gZWx0IGluIE1BVENIRVMKCWFuZCBDSEVDS0VEX0xBU1RTTEFTSC4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBJZiBTSUchPTAgc2F5IGBpbnRlcm1lZGlhdGUgZmlsZScKCWluc3RlYWQgb2YganVzdCBgZmlsZScgaW4gZXJyb3IgbXNnLgoKRnJpIEp1biAyNSAxNDo1NToxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3YpOiBUdXJuIG9mZgoJLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMgYXJvdW5kIGV4cGFuc2lvbiBvZiBTSEVMTCBhbmQgSUZTLgoJKiByZWFkLmMgKHRpbGRlX2V4cGFuZCk6IExpa2V3aXNlIGZvciBIT01FLgoJKHJlYWRfYWxsX21ha2VmaWxlcyk6IExpa2V3aXNlIGZvciBNQUtFRklMRVMuCgkqIHZwYXRoLmMgKGJ1aWxkX3ZwYXRoX2xpc3RzKTogTGlrZXdpc2UgZm9yIFZQQVRILgoKCSogbWFpbi5jICh3YXJuX3VuZGVmaW5lZF92YXJpYWJsZXNfZmxhZyk6IE5ldyBmbGFnIHZhcmlhYmxlLgoJKHN3aXRjaGVzKTogQWRkIC0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzLgoJKiBtYWtlLmggKHdhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlc19mbGFnKTogRGVjbGFyZSBpdC4KCSogZXhwYW5kLmMgKHdhcm5fdW5kZWZpbmVkKTogTmV3IGZ1bmN0aW9uLgoJKHJlZmVyZW5jZV92YXJpYWJsZSk6IENhbGwgaXQgaWYgdGhlIHZhcmlhYmxlIGlzIHVuZGVmaW5lZC4KCSh2YXJpYWJsZV9leHBhbmQpOiBJbiBzdWJzdGl0dXRpb24gcmVmLCBjYWxsIHdhcm5fdW5kZWZpbmVkIGlmIHRoZQoJdmFyaWFibGUgaXMgdW5kZWZpbmVkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMpOiBBZGQgYCUuYzogJS53ICUuY2gnIGFuZAoJYCUudGV4OiAlLncgJS5jaCcgcnVsZXMuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXM6IC53LmMsIC53LnRleCk6IFBhc3MgdGhyZWUgYXJnczogJDwgLSAkQC4KCShkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAuY2gnLgoKTW9uIEp1biAyMSAxNzo1NTozOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogUmVwbGFjZSBgLmN3ZWInIHdpdGggYC53Jy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IFJlbmFtZSBgLmN3ZWIuYycgYW5kIGAuY3dlYi50ZXgnIHRvIGAudy5jJwoJYW5kIGAudy50ZXgnLgoKRnJpIEp1biAxMSAxNDo0MjowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KClRodSBKdW4gMTAgMTg6MTQ6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny40LgoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogRG9uJ3QgZnJlZSBPTEQgYW5kIE9MRC0+bmFtZSBpbiB0aGUKCUZPVU5EIT0wIGZvcmsuICBVc2UgbmV3IGJsb2NrLWxvY2FsIHZhcmlhYmxlIEYgaW5zdGVhZCBvZgoJY2xvYmJlcmluZyBPTEQuCgoJKiBhci5jIChnbG9iX3BhdHRlcm5fcCk6IE5ldyBmdW5jdGlvbiwgc25hcmZlZCBmcm9tIGdsb2IvZ2xvYi5jLgoJKGFyX2dsb2IpOiBDYWxsIGl0OyByZXR1cm4gbmlsIGltbWVkaWF0ZWx5IGlmIE1FTUJFUl9QQVRURVJOCgljb250YWlucyBubyBtZXRhY2hhcmFjdGVycy4KCldlZCBKdW4gIDkgMTY6MjU6MzUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyLmMgKGFyX2dsb2J7X21hdGNoLF9hbHBoYWNvbXBhcmV9KTogTmV3IGZ1bmN0aW9uLgoKCSogZGVwLmggWyEgTk9fQVJDSElWRVNdOiBEZWNsYXJlIGl0LgoJKiByZWFkLmMgKG11bHRpX2dsb2IpIFshIE5PX0FSQ0hJVkVTXTogVXNlIGl0IG9uIGFyY2hpdmUgbWVtYmVyIGVsdHMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBIZXJlIHRvby4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBEb24ndCBwYXNzIGdyYXR1aXRvdXMgYXJnIHRvIG11bHRpX2dsb2IuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKSBbISBOT19BUkNISVZFU106IEFkZCBwb3N0LXByb2Nlc3NpbmcKCWxvb3AgdG8gdHJhbnNsYXRlIGFyY2hpdmUgcmVmcyAibGliKGEgYikiIGludG8gImxpYihhKSBsaWIoYikiLgoKTW9uIEp1biAgNyAxOToyNjo1MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxkaXJzKTogQWN0dWFsbHkgcGFzcyBkaXJlY3RvcnkgbmFtZXMuCgkoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogVGVzdCBjaGdycCYmY2htb2QgZXhpdCBzdGF0dXMgd2l0aCBgaWYnOwoJaWYgaXQgZmFpbHMsIGVjaG8gYSB3YXJuaW5nIG1zZywgYnV0IGRvbid0IG1ha2UgdGhlIHJ1bGUgZmFpbC4KCgkqIHJlYWQuYyAodGlsZGVfZXhwYW5kKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHRpbGRlX2V4cGFuZC4KCShtdWx0aV9nbG9iKTogQ2FsbCBpdC4KCShjb25zdHJ1Y3RfaW5jbHVkZV9wYXRoKTogRXhwYW5kIH4gaW4gZGlyZWN0b3J5IG5hbWVzLgoJKiBkZXAuaDogRGVjbGFyZSB0aWxkZV9leHBhbmQuCgkqIG1haW4uYyAoZW50ZXJfY29tbWFuZF9saW5lX2ZpbGUpOiBFeHBhbmQgfiBhdCB0aGUgc3RhcnQgb2YgTkFNRS4KCShtYWluKTogRXhwYW5kIH4gaW4gLUMgYXJncy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRXhwYW5kIH4gaW4gRklMRU5BTUUgdW5sZXNzIFRZUEU9PTIuCgpGcmkgSnVuICA0IDEzOjM0OjQ3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBVc2UgeG1hbGxvYyBpbnN0ZWFkIG9mIGFsbG9jYSBmb3IgQVJHUy4KCgkqIG1haW4uYyAobWFpbik6IFB1dCByZXN1bHQgb2YgYWxsb2NhIGluIHRlbXBvcmFyeSB2YXJpYWJsZSB3aXRoCglzaW1wbGUgYXNzaWdubWVudCwgdG8gbWFrZSBTR0kgY29tcGlsZXIgaGFwcHkuCgpUaHUgSnVuICAzIDIwOjE1OjQ2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMy4KCgkqIG1haW4uYyAobWFpbik6IEJlZm9yZSByZS1leGVjaW5nLCByZW1vdmUgaW50ZXJtZWRpYXRlIGZpbGVzLCBhbmQKCXByaW50IHRoZSBkYXRhIGJhc2UgdW5kZXIgLXAuICBTZXhpZXIgZGVidWdnaW5nIG1lc3NhZ2UuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsbG9jYXRlIGFuIGV4dHJhIGNvcHkgb2YgdGhlIG5hbWUKCW9mIGEgd2lubmluZyBpbnRlcm1lZGlhdGUgZmlsZSB3aGVuIHB1dHRpbmcgaXQgaW4gRk9VTkRfRklMRVMuCgpXZWQgSnVuICAyIDE2OjM4OjA4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGZsYWcgKDEpIHRvIHBhcnNlX2ZpbGVfc2VxLCBub3QgdG8KCW11bHRpX2dsb2IgKHdoaWNoIGRvZXNuJ3QgdGFrZSBhIDNyZCBhcmcpLgoKCSogZGlyLmMgKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogV2hlbiByZWFkaW5nIGRpcmVudHMsIGlnbm9yZQoJY2hhcnMgd2l0aGluIERfTkFNTEVOIHRoYXQgYXJlIE5VTHMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHNhdmVzdHJpbmcgQVJHVlswXSB0byBwdXQgaXQKCWludG8gYG90aGVyX2FyZ3MnLgoJRm9yIHN0cmluZyBzd2l0Y2gsIGRvbid0IHNhdmVzdHJpbmcgYG9wdGFyZycuCgkobWFpbik6IERvbid0IGZyZWUgZWx0cyBvZiBtYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgIi0iLgoJVXNlIGFsbG9jYSdkIHJhdGhlciB0aGFuIHNhdmVzdHJpbmcnZCBzdG9yYWdlIGZvciBlbHRzIG9mCgltYWtlZmlsZXMtPmxpc3QgdGhhdCBhcmUgdGVtcG9yYXJ5IGZpbGUgbmFtZXMuCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogRG9uJ3QgZnJlZSAqTUFLRUZJTEVTLgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBEb24ndCBzdHJpcCBgLi8ncy4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGl0IGluIHBsYWNlIG9mIGVudGVyX2ZpbGUgZm9yIGNvbW1hbmQtbGluZSBnb2FscyBmcm9tCglvdGhlcl9maWxlcywgYW5kIGZvciBvbGRfZmlsZXMgYW5kIG5ld19maWxlcy4KCk1vbiBNYXkgMzEgMTg6NDE6NDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4yLgoKCSogY29tcGF0TWFrZWZpbGUgKC5TVUZGSVhFUyk6IEFkZCAuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBGaW5kIG1ha2UuaW5mbyogaW4gY3dkIGlmIHRoZXJlLAoJZWxzZSBpbiAkc3JjZGlyLiAgVXNlIGJhc2VuYW1lIHRvIHJlbW92ZSBkaXIgbmFtZSBmcm9tIGluc3RhbGxlZCBuYW1lLgoKVGh1IE1heSAyNyAxNzozNTowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBXaGVuIGludGVybmluZyBGT1VORF9GSUxFUywgdHJ5Cglsb29rdXBfZmlsZSBmaXJzdDsgaWYgZm91bmQsIGZyZWUgdGhlIHN0b3JhZ2UgZm9yIG91ciBjb3B5IG9mIHRoZSBuYW1lLgoKV2VkIE1heSAyNiAxNDozMToyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjEuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluIHVzYWdlIG1zZywgd3JpdGUgYC0tc3dpdGNoPUFSRycgb3IKCWAtLXN3aXRjaFs9T1BUQVJHXScgcmF0aGVyIHRoYW4gYC0tc3dpdGNoIEFSRycgb3IgYC0tc3dpdGNoIFtBUkddJy4KCk1vbiBNYXkgMjQgMTY6MTc6MzEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IE5ldyBmdW5jdGlvbi4KCShjb252ZXJ0X3RvX3BhdHRlcm4pOiBVc2UgaXQgaW5zdGVhZCBvZiBkb2luZyBhbGwgdGhlIHdvcmsgaGVyZQoJc2V2ZXJhbCB0aW1lcy4KCUZvciB0YXJnZXQgc3VmZml4IGAuYScsIGdlbmVyYXRlIGJvdGggdGhlIGFyY2hpdmUgbWFnaWMgcnVsZSBhbmQKCXRoZSBub3JtYWwgcnVsZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgc3RhbXAtY29uZmlnLgoKU2F0IE1heSAyMiAxNjoxNToxOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IERvbid0IHdyaXRlIGV4dHJhIHNwYWNlIGFmdGVyIGBybScuCgoJKiBtYWluLmMgKHN0cnVjdCBjb21tYW5kX3N3aXRjaC50eXBlKTogUmVtb3ZlIGB1c2FnZV9hbmRfZXhpdCcuCgkocHJpbnRfdXNhZ2VfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCShzd2l0Y2hlczogLS1oZWxwKTogTWFrZSB0eXBlIGBmbGFnJywgdG8gc2V0IHByaW50X3VzYWdlX2ZsYWcuCgkoaW5pdF9zd2l0Y2hlcyk6IFJlbW92ZSBgdXNhZ2VfYW5kX2V4aXQnIGNhc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogTGlrZXdpc2UuCgkoZGVjb2RlX3N3aXRjaGVzKTogUHJpbnQgdXNhZ2UgaWYgcHJpbnRfdXNhZ2VfZmxhZyBpcyBzZXQuCglXaGVuIHByaW50aW5nIHVzYWdlLCBkaWUgd2l0aCBzdGF0dXMgb2YgQkFELgoJKG1haW4pOiBEaWUgd2l0aCAwIGlmIHByaW50X3ZlcnNpb25fZmxhZy4KCkZyaSBNYXkgMjEgMTY6MDk6MjggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ni4KCldlZCBNYXkgMTkgMjE6MzA6NDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsZGlycyk6IE5ldyB0YXJnZXQuCgkoaW5zdGFsbCk6IERlcGVuZCBvbiBpdC4KClN1biBNYXkgMTYgMjA6MTU6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4yLgoKRnJpIE1heSAxNCAxNjo0MDowOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJbiByZW1vdmFsIGxvb3AgZm9yIERJUlBBVEg9PTAsCglzZXQgTEFTVFBBVEggdG8gUEFUSCwgbm90IE5FWFQuCgoJKiBkaXIuYyAocmVhZF9kaXJzdHJlYW0pOiBCcmVhayBvdXQgb2YgbG9vcCBhZnRlciBpbmNyZW1lbnRpbmcKCURTLT5idWNrZXRzIHN1Y2ggdGhhdCBpdCByZWFjaGVzIERJUkZJTEVfQlVDS0VUUzsgYXZvaWQgdHJ5aW5nIHRvCglkZXJlZmVyZW5jZSBEUy0+Y29udGVudHMtPmZpbGVzW0RJUkZJTEVfQlVDS0VUU10uCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDbGVhciBub190YXJnZXRzIGFmdGVyIHJlYWRpbmcgYQoJdGFyZ2V0ZnVsIHJ1bGUgbGluZS4KCgkqIG1haW4uYyAobWFpbik6IElmIHByaW50X3ZlcnNpb25fZmxhZyBpcyBzZXQsIGV4aXQgYWZ0ZXIgcHJpbnRpbmcKCXRoZSB2ZXJzaW9uLgoJKHN3aXRjaGVzKTogQ2hhbmdlIC0tdmVyc2lvbiBkb2NzdHJpbmcgdG8gc2F5IGl0IGV4aXRzLgoKCSogbWFrZS5oIFtidXR0ZXJmbHldOiAjdW5kZWYgUE9TSVguCgpXZWQgTWF5IDEyIDE1OjIwOjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LjEuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgWyEgQUlBTUFHXTogRG9uJ3QgZGVjbGFyZSBMT05HX05BTUUuCglbQUlBTUFHXTogUGFzcyBUUlVOQ0FURSBmbGFnIGFyZyB0byAoKkZVTkNUSU9OKSwgYWx3YXlzIHplcm8uCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBVc2UgZmF0YWwgaW5zdGVhZCBvZgoJbWFrZWZpbGVfZmF0YWwgd2hlbiByZWFkaW5nX2ZpbGVuYW1lIGlzIG5pbC4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIEFDX0dFVEdST1VQU19ULgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBVc2UgR0VUR1JPVVBTX1QgaW4gcGxhY2Ugb2YgZ2lkX3QuCgpTdW4gTWF5ICA5IDE1OjQxOjI1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuCgpGcmkgTWF5ICA3IDE4OjM0OjU2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChoYW5kbGVfZnVuY3Rpb24pOiBGYXRhbCBmb3IgdW5tYXRjaGVkIHBhcmVuLgoKVGh1IE1heSAgNiAxNjoxMzo0MSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjMuCgoJKiBjb21tYW5kcy5jIChoYW5kbGluZ19mYXRhbF9zaWduYWwpOiBOZXcgdmFyaWFibGUuCgkoZmF0YWxfZXJyb3Jfc2lnbmFsKTogU2V0IGl0LgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEF2b2lkIG5vbnJlZW50cmFudCBvcGVyYXRpb25zIGlmIHRoYXQgaXMgc2V0LgoJKiBtYWtlLmg6IERlY2xhcmUgaGFuZGxpbmdfZmF0YWxfc2lnbmFsLgoKCSogZXhwYW5kLmMgKHJlZmVyZW5jZV92YXJpYWJsZSk6IE5ldyBmdW5jdGlvbiwgc25pcHBldCBvZiBjb2RlCglicm9rZW4gb3V0IG9mIHNpbXBsZS1yZWZlcmVuY2UgY2FzZSBvZiB2YXJpYWJsZV9leHBhbmQuCgkodmFyaWFibGVfZXhwYW5kKTogVXNlIGl0IGZvciBzaW1wbGUgcmVmcy4KCSh2YXJpYWJsZV9leHBhbmQpOiBXaGVuIGNoZWNraW5nIGZvciBhIGNvbXB1dGVkIHZhcmlhYmxlIG5hbWUsCglub3RpY2UgYSBjb2xvbiB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgZmluYWwgQ0xPU0VQQVJFTi4gIEV4cGFuZAoJb25seSB1cCB0byB0aGUgY29sb24sIGFuZCB0aGVuIHJlcGxhY2UgdGhlIHBlbmRpbmcgdGV4dCB3aXRoIGEKCWNvcHkgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgbmFtZSBhbmQgZmFsbCB0aHJvdWdoIHRvIHN1YnN0IHJlZgoJaGFuZGxpbmcuCgkodmFyaWFibGVfZXhwYW5kKTogRG9uJ3QgYm90aGVyIGV4cGFuZGluZyB0aGUgbmFtZSBpZiBhIGNvbG9uCglhcHBlYXJzIGJlZm9yZSB0aGUgZmlyc3QgJC4KCShleHBhbmRfYXJndW1lbnQpOiBVc2UgYWxsb2NhIGluc3RlYWQgb2Ygc2F2ZXN0cmluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBGb3Igc3Vic3QgcmVmLCBleHBhbmQgYm90aCBzaWRlcyBvZiA9IGJlZm9yZQoJcGFzc2luZyB0byBbcGF0XXN1YnN0X2V4cGFuZC4gIFVzZSBmaW5kX3BlcmNlbnQgaW5zdGVhZCBvZiBsaW5kZXgKCXRvIGNoZWNrIHRoZSBsaHMgZm9yIGEgJS4KCldlZCBNYXkgIDUgMTQ6NDU6NTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4yLgoKTW9uIE1heSAgMyAxNzowMDozMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtBSUFNQUddOiBBYm9ydCBpZiBUUlVOQ0FURUQgaXMgbm9uemVyby4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZXh0cmEgYXJnIG9mIDEgdG8gcGFyc2VfZmlsZV9zZXEsCglub3QgdG8gbXVsdGlfZ2xvYi4KClRodSBBcHIgMjkgMTk6NDc6MzMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4xLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBOZXcgbG9jYWwgZmxhZyB2YXIgTE9OR19OQU1FLiAgU2V0IGl0IHdoZW4KCXdlIHJlYWQgdGhlIG1lbWJlciBuYW1lIGluIGFueSBvZiB0aGUgZmFzaGlvbnMgdGhhdCBhbGxvdyBpdCB0byBiZQoJYXJiaXRyYXJpbHkgbG9uZy4gIFBhc3MgaXRzIG5lZ2F0aW9uIHRvIEZVTkNUSU9OLgoJKGRlc2NyaWJlX21lbWJlcik6IFRha2UgVFJVTkNBVEVEIGZyb20gYXJfc2NhbiBhbmQgcHJpbnQgaXQuCgkoYXJfbmFtZV9lcXVhbCk6IFRha2UgbmV3IGFyZyBUUlVOQ0FURUQ7IGlmIG5vbnplcm8sIGNvbXBhcmUgb25seQoJdGhlIGZpcnN0IHNpemVvZiAoc3RydWN0IGFyX2hkci5hcl9uYW1lKSBjaGFycy4KCShhcl9tZW1iZXJfcG9zKTogVGFrZSBUUlVOQ0FURUQgZnJvbSBhcl9zY2FuLCBwYXNzIHRvIGFyX25hbWVfZXF1YWwuCgkqIGFyLmMgKGFyX21lbWJlcl9kYXRlXzEpOiBMaWtld2lzZS4KCldlZCBBcHIgMjggMjE6MTg6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQmVmb3JlIGNhbGxpbmcgc3RhcnRfam9iX2NvbW1hbmQgdG8gc3RhcnQKCXRoZSBuZXh0IGNvbW1hbmQgbGluZSwgcmVzZXQgQy0+cmVtb3RlIGJ5IGNhbGxpbmcgc3RhcnRfcmVtb3RlX2pvYl9wLgoKTW9uIEFwciAyNiAxNTo1NjoxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIChhcl9zY2FuKTogTmV3IGxvY2FsIHZhciBOQU1FTUFQLgoJSW4gbG9vcCwgcmVuYW1lIE5BTUUgdG8gTkFNRUJVRjsgbmV3IHZhciBOQU1FIGlzIGEgcG9pbnRlcjsgbmV3CglmbGFnIElTX05BTUVNQVAuICBXaGVuIGV4dHJhY3RpbmcgdGhlIG1lbWJlciBuYW1lLCBhbHdheXMgcHV0IGEKCW51bGwgYXQgaXRzIGVuZCBmaXJzdC4gIElmIHRoZSBuYW1lIGlzICIvLyIgb3IgIi9BUkZJTEVOQU1FUyIsIHNldAoJSVNfTkFNRU1BUC4gIElmIHdlIGhhdmUgYWxyZWFkeSByZWFkIGluIE5BTUVNQVAsIGFuZCBOQU1FIGxvb2tzCglsaWtlICIgL04iLCBnZXQgZnVsbCBuYW1lIGZyb20gTkFNRU1BUCtOLgoJRWxzZSBpZiBOQU1FIGxvb2tzIGxpa2UgIiMxL04iLCByZWFkIE4gY2hhcnMgZnJvbSB0aGUKCWVsdCBkYXRhIHRvIGJlIHRoZSBmdWxsIG5hbWUuICBBdCBlbmQgb2YgbG9vcCwgaWYgSVNfTkFNRU1BUCwgcmVhZAoJdGhlIGVsdCdzIGRhdGEgaW50byBhbGxvY2EnZCBOQU1FTUFQLgoJKGFyX25hbWVfZXF1YWwpOiAjaWYgMCB0cnVuY2F0aW5nIGNvZGUuCgoJKiBtYWtlLmg6IERvbid0IGRlY2xhcmUgdmZvcmsgYXQgYWxsLiAgSXQgcmV0dXJucyBpbnQgYW55d2F5LAoJdW5sZXNzIDx1bmlzdGQuaD4gZGVjbGFyZWQgaXQ7IGFuZCB3ZSBjb25mbGljdGVkIHdpdGggc29tZSBzeXN0ZW1zLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogSWYgRkxBR1NUUklOR1sxXSBpcyAnLScsIGRlZmluZQoJTUFLRUZMQUdTIHRvIGFsbCBvZiBGTEFHU1RSSU5HLCBub3QgJkZMQUdTVFJJTkdbMV0uICBEb24ndCB3YW50IHRvCglkZWZpbmUgaXQgdG8gc29tZXRoaW5nIGxpa2UgIi1uby1wcmludC1kaXJlY3RvcnkiLgoJVXNlICVnIGZvcm1hdCBpbnN0ZWFkIG9mICVmIGZvciBmbG9hdGluZy12YWx1ZWQgdGhpbmdzLgoKVGh1IEFwciAyMiAxODo0MDo1OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKE1ha2VmaWxlLmluKTogVXNlIGEgc3Vic3RpdHV0aW9uIHJlZiBvbiBub2xpYi1kZXBzCgl0byBjaGFuZ2UgcmVtb3RlLSUuZGVwIHRvIHJlbW90ZS1zdHViLmRlcC4KCldlZCBBcHIgMjEgMTU6MTc6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NC4KCkZyaSBBcHIgMTYgMTQ6MjI6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogUmVtb3ZlIC0gcHJlZml4IGZyb20gY2hncnArY2htb2QuCgoJKiBWZXJzaW9uIDMuNjMuOC4KClRodSBBcHIgMTUgMTg6MjQ6MDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFjY29uZmlnLmg6IE5ldyBmaWxlOyBjb250YWlucyAiI3VuZGVmIFNDQ1NfR0VUIiBmb3IgYXV0b2hlYWRlci4KCSogY29uZmlndXJlLmluOiBJZiAvdXNyL3NjY3MvZ2V0IGV4aXN0cywgZGVmaW5lIFNDQ1NfR0VUIHRvIHRoYXQsCgllbHNlIHRvICJnZXQiLgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKTogU2V0IEdFVCB0byBtYWNybyBTQ0NTX0dFVC4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBUYWtlIGV4dHJhIGFyZyBTVFJJUDsgc3RyaXAgYC4vJyBvbmx5CglpZiBub256ZXJvLiAgSSBob3BlIHRoaXMgaXMgdGhlIGxhc3QgdGltZSB0aGlzIGFyZ3VtZW50IGlzIGFkZGVkCglvciByZW1vdmVkLgoJKHJlYWRfbWFrZWZpbGUpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIGluY2x1ZGUgZmlsZSBuYW1lcy4KCVBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgdGFyZ2V0IGZpbGUgbmFtZXMuCglQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHN0YXRpYyBwYXR0ZXJuIHRhcmdldCBwYXR0ZXJuIG5hbWVzLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogUGFzcyBpdCAxIHdoZW4gcGFyc2luZyBydWxlIGRlcHMuCgkqIGRlZmF1bHQuYyAoc2V0X2RlZmF1bHRfc3VmZml4ZXMpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nCglkZWZhdWx0X3N1ZmZpeGVzLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IFBhc3MgaXQgMCBoZXJlLgoKV2VkIEFwciAxNCAxMTozMjowNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogTmV3IGZ1bmN0aW9uLgoJKHtpbml0LHVzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogQ2FsbCBpdC4KCShjaGlsZF9hY2Nlc3MpOiBBYm9ydCBpZiAhYWNjZXNzX2luaXRlZC4KCgkqIG1haW4uYyAoc3dpdGNoZXM6IC0tbm8tcHJpbnQtZGlyZWN0b3J5KTogVXNlIDEgaW5zdGVhZCBvZiAtMSBmb3IKCXNpbmdsZS1sZXR0ZXIgb3B0aW9uLgoJKGluaXRfc3dpdGNoZXMsIGRlY29kZV9zd2l0Y2hlcywgZGVmaW5lX21ha2VmbGFncyk6IEFuIG9wdGlvbiB3aXRoCglubyBzaW5nbGUtbGV0dGVyIHZlcnNpb24gaXMgbm8gbG9uZ2VyIGluZGljYXRlZCBieSBhIHZhbHVlIG9mIC0xOwoJaW5zdGVhZCBhIHZhbHVlIHRoYXQgaXMgIWlzYWxudW0uCgkoaW5pdF9zd2l0Y2hlcyk6IERvbid0IHB1dCBzdWNoIHN3aXRjaGVzIGludG8gdGhlIHN0cmluZywgb25seQoJaW50byB0aGUgbG9uZ19vcHRpb24gdGFibGUuCgoJKiBtYWtlLmggWyFOU0lHXSBbIV9OU0lHXTogI2RlZmluZSBOU0lHIDMyLgoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFJlbW92ZSAjdW5kZWYgSEFWRV9VTklPTl9XQUlULiAgQUlYJ3MKCWJzZGNjIGRlZmluZWQgV0lGKiB0byB1c2UgdW5pb24gd2FpdC4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQ2hhbmdlIG1lbWJlciBgYycgdG8gdHlwZSBpbnQuCgkoc3dpdGNoZXMpOiBNYWtlIGNvbnN0LgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBgY29uc3Qgc3RydWN0IGNvbW1hbmRfc3dpdGNoIConLgoJKGRlZmluZV9tYWtlZmxhZ3MpOiBMaWtld2lzZS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBBZGQgYC1vICRAJyB0byBtYWtlaW5mbyBydWxlcy4KCk1vbiBBcHIgMTIgMTI6MzA6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My43LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0hFQURFUlMpOiBDaGVjayBmb3Igc3RyaW5nLmggYW5kIG1lbW9yeS5oLgoJUmVtb3ZlZCBBQ19NRU1PUllfSC4KCSogbWFrZS5oIFtVU0csIE5lWFRdOiBEb24ndCB0ZXN0IHRoZXNlLgoJW0hBVkVfU1RSSU5HX0hdOiBUZXN0IHRoaXMgdG8gaW5jbHVkZSBzdHJpbmcuaCBhbmQgZGVmaW5lIEFOU0lfU1RSSU5HLgoJW0hBVkVfTUVNT1JZX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBORUVEX01FTU9SWV9ILgoJWyEgQU5TSV9TVFJJTkddOiBQdXQgZGVjbHMgb2YgYmNvcHkgZXQgYWwgaGVyZS4KCVtzcGFyY106IERvbid0IHRlc3QgdGhpcyBmb3IgYWxsb2NhLmg7IEhBVkVfQUxMT0NBX0ggaXMgc3VmZmljaWVudC4KCVtIQVZFX1NJR1NFVE1BU0tdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHLgoJW19fR05VX0xJQlJBUllfXyB8fCBQT1NJWF06IERvbid0ICNpbmNsdWRlIDx1bmlzdGQuaD4gYWdhaW4uCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSBTSUdDSExEIGlmIGRlZmluZWQsIGFuZCBTSUdDTEQgaWYgZGVmaW5lZC4KCUl0IGRvZXNuJ3QgaHVydCB0byBkbyBib3RoIGlmIHRoZXkgYXJlIGJvdGggZGVmaW5lZCwgYW5kIHRlc3RpbmcKCVVTRyBpcyB1c2VsZXNzLgoJKiBkaXIuYzogUmF0aW9uYWxpemUgZGlyZWN0b3J5IGhlYWRlciBjb25kaXRpb25hbHMuCgkqIGFyc2Nhbi5jIFtIQVZFX0ZDTlRMX0hdOiBUZXN0IHRoaXMgcmF0aGVyIHRoYW4gVVNHIHx8IFBPU0lYLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeGVzKTogQWRkIGAudHhpbmZvJy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IEFkZCBgLnR4aW5mby5pbmZvJyBhbmQgYC50eGluZm8uZHZpJyBydWxlcy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmVwbGFjZSBSRUNVUlNJVkUgZmxhZwoJd2l0aCBlbnVtIEZMQVZPUiwgd2hpY2ggY2FuIGJlIHNpbXBsZSwgcmVjdXJzaXZlLCBvciBhcHBlbmQuCglSZWNvZ25pemUgKz0gYXMgYXBwZW5kIGZsYXZvci4gIFNldCBuZXcgdmFyaWFibGUgVkFMVUUgaW4gYSBzd2l0Y2gKCW9uIEZMQVZPUi4gIEZvciBhcHBlbmQgZmxhdm9yLCBwcmVwZW5kIHRoZSB2YXJpYWJsZSdzIG9sZCB2YWx1ZS4KCUlmIHRoZSB2YXJpYWJsZSB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHJlY3Vyc2l2ZSwgc2V0IEZMQVZPUiB0bwoJcmVjdXJzaXZlOyBpZiBpdCB3YXMgZGVmaW5lZCBzaW1wbGUsIGV4cGFuZCB0aGUgbmV3IHZhbHVlIGJlZm9yZQoJYXBwZW5kaW5nIGl0IHRvIHRoZSBvbGQgdmFsdWUuICBQYXNzIFJFQ1VSU0lWRSBmbGFnIHRvCglkZWZpbmVfdmFyaWFibGUgaWZmIEZMQVZPUiA9PSByZWN1cnNpdmUuCgoJKiB2YXJpYWJsZS5jICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFVzZSBhbGxvY2EgYW5kIGJjb3B5IGZvcgoJTkFNRSwgaW5zdGVhZCBvZiBzYXZlc3RyaW5nLiAgTWlnaHQgYXMgd2VsbCB1c2Ugc3RhY2sgc3RvcmFnZQoJc2luY2Ugd2UgZnJlZSBpdCBpbW1lZGlhdGVseSBhbnl3YXkuCgpUaHUgQXByICA4IDE4OjA0OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2JzKTogTW92ZSBkZWNsIG9mIEpPQiBvdXRzaWRlIG9mIGxvb3AuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZW5hbWUgYHN0cnVjdCBmbGFnJyBtZW1iZXIgYHN3aXRjaCcKCXRvIGBjcycsIHdoaWNoIGlzIG5vdCBhIHJlc2VydmVkIHdvcmQuCgpXZWQgQXByICA3IDE1OjMwOjUxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobmV3X2pvYik6IENhbGwgc3RhcnRfd2FpdGluZ19qb2JzIGZpcnN0IHRoaW5nLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2hhbmdlZCByZXR1cm4gdHlwZSBmcm9tIHZvaWQgdG8gaW50LgoJUmV0dXJuIDAgd2hlbiBwdXR0aW5nIHRoZSBjaGlsZCBvbiB0aGUgd2FpdGluZ19qb2JzIGNoYWluLgoJKHN0YXJ0X3dhaXRpbmdfam9icyk6IERvbid0IGNoZWNrIGxvYWQgYW5kIGpvYl9zbG90cyBoZXJlLgoJQWx3YXlzIHRha2UgYSBqb2Igb2ZmIHRoZSBjaGFpbiBhbmQgY2FsbCBzdGFydF93YWl0aW5nX2pvYiBvbiBpdDsKCWdpdmUgdXAgYW5kIHJldHVybiB3aGVuIHN0YXJ0X3dhaXRpbmdfam9iIHJldHVybnMgemVyby4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFnczogc3RydWN0IGZsYWcpOiBDaGFuZ2UgbWVtYmVyIGBjaGFyIGMnIHRvCglgc3RydWN0IGNvbW1hbmRfc3dpdGNoICpzd2l0Y2gnLgoJKEFERF9GTEFHKTogU2V0IHRoYXQgdG8gQ1MgaW5zdGVhZCBvZiBDUy0+Yy4KCUlmIENTLT5jIGlzIC0xLCBpbmNyZW1lbnQgRkxBR1NMRU4gZm9yIHRoZSBsb25nIG5hbWUuCglXaGVuIHdyaXRpbmcgb3V0IEZMQUdTLCBoYW5kbGUgRkxBR1MtPnN3aXRjaC0+YyA9PSAtMSBhbmQgd3JpdGUKCXRoZSBsb25nIG5hbWUgaW5zdGVhZC4KCgkqIGNvbXBhdE1ha2VmaWxlIChzdGFtcC1jb25maWcpOiBOZXcgdGFyZ2V0IG9mIG9sZCBjb25maWcuaCBydWxlLgoJVG91Y2ggc3RhbXAtY29uZmlnIGFmdGVyIHJ1bm5pbmcgY29uZmlnLnN0YXR1cy4KCShjb25maWcuaCk6IEp1c3QgZGVwZW5kIG9uIHN0YW1wLWNvbmZpZywgYW5kIGhhdmUgZW1wdHkgY29tbWFuZHMuCgpNb24gQXByICA1IDIwOjE0OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogI3VuZGVmIEhBVkVfVU5JT05fV0FJVC4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfSEFWRV9GVU5DUyk6IENoZWNrIGZvciBwc2lnbmFsLgoKRnJpIEFwciAgMiAxNzoxNTo0NiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogUmVtb3ZlICJuZXciOyBpdCBpcyBhbHJlYWR5IGFuCgl1bmFtYmlndW91cyBwcmVmaXggb2YgIm5ldy1maWxlIi4KClN1biBNYXIgMjggMTY6NTc6MTcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNi4KCldlZCBNYXIgMjQgMTQ6MjY6MTkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBXaGVuIGFkZGluZyB0aGUKCW5hbWUtd2l0aGluLWRpcmVjdG9yeSBhdCB0aGUgZW5kIG9mIE5BTUUsIGFuZCB3ZSBkb24ndCBhZGQgYQoJc2xhc2gsIGRvbid0IGNvcHkgRklMRU5BTUUgaW4gb25lIGNoYXIgdG9vIGZhciBpbnRvIE5BTUUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEZpbmQgZGVmYXVsdF9zaGVsbCdzCglsZW5ndGggd2l0aCBzdHJsZW4sIG5vdCBudW1lcm9sb2d5LgoKV2VkIE1hciAxNyAyMDowMjoyNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWRkIHRoZSBlbHRzIG9mIGEgc3RyaW5nIG9wdGlvbiBpbgoJcmV2ZXJzZSBvcmRlciwgc28gdGhleSBjb21lIG91dCByaWdodCB3aGVuIHJldmVyc2VkIGFnYWluLgoKRnJpIE1hciAxMiAxNTozODo0NSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBVc2UgYC1vIG1ha2UuaW5mbycuCgpUaHUgTWFyIDExIDE0OjEzOjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKFJFTU9URSk6IFNldCB0byBAUkVNT1RFQDsgY2hhbmdlIGNvbW1lbnRzIHRvCglyZWZsZWN0IG5ldyB1c2UuCgkob2Jqcyk6IFJlcGxhY2UgcmVtb3RlLm8gd2l0aCByZW1vdGUtJChSRU1PVEUpLm8uCgkoc3Jjcyk6IFJlcGxhY2UgcmVtb3RlLmMgd2l0aCByZW1vdGUtJChSRU1PVEUpLmMuCgkocmVtb3RlLm8pOiBSdWxlIHJlbW92ZWQuCgoJKiBjb25maWd1cmUuaW4gKFJFTU9URSk6IFN1YnN0IHRoaXMgaW4gTWFrZWZpbGUgZXQgYWw7IGRlZmF1bHQgInN0dWIiLgoJVXNlIEFDX1dJVEggdG8gZ3JvayAtLXdpdGgtY3VzdG9tcyBhcmcgdG8gc2V0IFJFTU9URT1jc3Rtcy4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRmlsdGVyIG91dCByZW1vdGUtJSBmcm9tIG9ianMgbGlzdC4KCSogYnVpbGQudGVtcGxhdGUgKFJFTU9URSk6IE5ldyB2YXI7IHNldCB0byBAUkVNT1RFQC4KCShvYmpzKTogQWRkIHJlbW90ZS0ke1JFTU9URX0uby4KCldlZCBNYXIgMTAgMTU6MTI6MjQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogRml4ICJkZXBlbmRlbnQiLT4iZGVwZW5kZW5jeSIgaW4KCSJSZWplY3RpbmcgaW1wb3NzaWJsZSIgLWQgbXNnLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBOZXcgbG9jYWwgdmFycyB7T0xELE5FV31CVUNLRVQuICBTdG9yZQoJbW9kJ2QgdmFsdWVzIHRoZXJlOyBuZXZlciBtb2Qge09MRCxORVd9SEFTSC4KCk1vbiBNYXIgIDggMTM6MzI6NDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyBbZXRhMTBdOiBJbmNsdWRlIDxmY250bC5oPiBpbnN0ZWFkIG9mIDxzeXMvZmlsZS5oPi4KCgkqIGNvbXBhdE1ha2VmaWxlIChWUEFUSCk6IFNldCB0aGlzIHRvIEBzcmNkaXJALgoJKHNyY2Rpcik6IFNldCB0aGlzIHRvICQoVlBBVEgpLgoKCSogbWFpbi5jIChtYWluKTogTmV3IGxvY2FsIHZhciBESVJFQ1RPUllfQkVGT1JFX0NIRElSLiAgU2F2ZSBpbiBpdAoJYSBjb3B5IG9mIENVUlJFTlRfRElSRUNUT1JZIGFmdGVyIHRoZSBmaXJzdCBnZXRjd2QuICBVc2UgaXQKCWluc3RlYWQgb2YgQ1VSUkVOVF9ESVJFQ1RPUlkgd2hlbiBjaGRpcidpbmcgYmFjayBiZWZvcmUgcmUtZXhlY2luZy4KCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IFBhc3MgbWlzc2luZyBTRUFSQ0ggYXJnIHRvIGZfbXRpbWUuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZW1vdmUgZXh0cmFuZW91cyBhcmcgdG8gcGFyc2VfZmlsZV9zZXEuCgpNb24gRmViIDIyIDE0OjE5OjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogVXNlICwgaW5zdGVhZCBvZiAvCglhcyB0aGUgc2VkIGRlbGltaXRlciBjaGFyLgoKU3VuIEZlYiAyMSAxNDoxMTowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjQuCgoJKiBydWxlLmggKHN0cnVjdCBydWxlKTogUmVtb3ZlZCBgc3ViZGlyJyBtZW1iZXIuCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vIG5lZWQgdG8gY2xlYXIgaXQuCgkoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBTZXQgdGhlIGBjaGFuZ2VkJyBmbGFnIGluIGVhY2ggZGVwCgl0aGF0IHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4gIE5vIGxvbmdlciBzZXQgcnVsZS1nbG9iYWwKCWBzdWJkaXInIGZsYWcgd2l0aCB0aGF0IGluZm9ybWF0aW9uLgoJKHByaW50X3J1bGVfZGF0YV9iYXNlKTogRG9uJ3QgcmVjb3JkIGluZm8gb24gYHN1YmRpcicgZmxhZ3MuCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IENoZWNrIHRoZSBERVAtPmNoYW5nZWQgZmxhZyByYXRoZXIKCXRoYW4gdGhlIChub3cgZ29uZSkgUlVMRS0+c3ViZGlyIGZsYWcuICBBbHNvIHRlc3QgQ0hFQ0tfTEFTVFNMQVNIOwoJaWYgaXQgaXMgc2V0LCB0aGUgZmlsZSBtaWdodCBleGlzdCBldmVuIHRob3VnaCB0aGUgREVQLT5jaGFuZ2VkCglmbGFnIGlzIHNldC4KCgkqIHJ1bGUuYyAoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBQYXNzICIiLCBub3QgIi4iLCBhcyBmaWxlCgluYW1lIGFyZyB0byBkaXJfZmlsZV9leGlzdHNfcCB0byBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIGRpcmVjdG9yeS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogSW5zaWRlIGRlcC1maW5kaW5nIGxvb3AsIHNldAoJQ0hFQ0tfTEFTVFNMQVNIIGZyb20gdGhlIHZhbHVlIHJlY29yZGVkIGluIENIRUNLRURfTEFTVFNMQVNIW0ldLAoJcmF0aGVyIHRoYW4gY29tcHV0aW5nIGl0IGFuZXcuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBNdXN0IGFsbG9jYSBzcGFjZSBmb3IgUEVSQ0VOVAoJYW5kIGNvcHkgaXQsIHRvIGF2b2lkIGxlYXZpbmcgdGhlIHRyYWlsaW5nIGApJyBpbiB0aGUgdmFsdWUuCgoJKiBtaXNjLmMgKHJlbW92ZV9jb21tZW50cyk6IEZpeGVkIGJhY2tzbGFzaC1jaGVja2luZyBsb29wCgljb25kaXRpb24gdG8gYWxsb3cgaXQgdG8gbG9vayBhdCB0aGUgZmlyc3QgY2hhciBvbiB0aGUgbGluZS4KCVAyID49IExJTkUsIG5vdCBQMiA+IExJTkUuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogQmVmb3JlIG1vdmluZyAkQC5uZXcgdG8KCSRALCBybSAkQC5vbGQgYW5kIG12ICRAIHRvICRALm9sZC4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVGFrZSBuZXcgYXJncyBGSUxFTkFNRSBhbmQKCUxJTkVOTy4gIEZhdGFsIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGVtcHR5LgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGFuZ2UgY2FsbGVycy4KCSogbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ3JvdXApOiBEZWZpbmUgdG8gQEtNRU1fR1JPVVBALCBhdXRvY29uZiBtYWdpYwoJdGhhdCBjb25maWd1cmUgd2lsbCByZXBsYWNlIHdpdGggdGhlIGdyb3VwIG93bmluZyAvZGV2L2ttZW0uCgpNb24gRmViICA4IDE0OjI2OjQzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAodnBhdGhfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUiwgcGFzcyB0aHJ1IHRvCglzZWxlY3RpdmVfdnBhdGhfc2VhcmNoLgoJKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLgoJSWYgdGhlIGRpciBjYWNoZSB0aGlua3MgYSBmaWxlIGV4aXN0cywgc3RhdCBpdCB0byBtYWtlIHN1cmUsIGFuZAoJcHV0IHRoZSBtb2R0aW1lIGluICpNVElNRV9QVFIuCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIuCglXaGVuIHdlIGZpbmQgYSBtYXRjaCwgcmVjb3JkIGl0cyBtdGltZSB0aGVyZS4KCVBhc3MgTVRJTUVfUFRSIHRocm91Z2ggdG8gdnBhdGhfc2VhcmNoIHRvIGRvIHNhbWUuCgkoZl9tdGltZSk6IFBhc3MgJk1USU1FIGFzIG5ldyAybmQgYXJnIHRvIHt2cGF0aCxsaWJyYXJ5fV9zZWFyY2g7CglzdG9yZSBpdCBpbiBGSUxFLT5sYXN0X210aW1lIGlmIHNldCBub256ZXJvLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFBhc3MgbmlsIDJuZCBhcmcgdG8gdnBhdGhfc2VhcmNoLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogUHJlcGVuZCBgJChzcmNkaXIpLycgdG8gYHJlbW90ZS0qLmMnLAoJc28gZ2xvYmJpbmcgbG9va3Mgc29tZXdoZXJlIGl0IHdpbGwgZmluZCB0aGluZ3MuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvKTogSW5zdGFsbCBgbWFrZS5pbmZvKicKCW5vdCBgJChzcmNkaXIpL21ha2UuaW5mbyonOyBubyBuZWVkIHRvIHVzZSBiYXNlbmFtZS4KCkZyaSBGZWIgIDUgMTI6NTI6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuMy4KCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsKTogQWRkIG1pc3NpbmcgO1xzLgoKCU1ha2UgLSwgQCwgYW5kICsgcHJlZml4ZXMgb24gYSBwcmUtZXhwYW5kZWQgY29tbWFuZCBsaW5lIGFmZmVjdAoJYWxsIGxpbmVzIGluIHRoZSBleHBhbnNpb24sIG5vdCBqdXN0IHRoZSBmaXJzdC4KCSogY29tbWFuZHMuaCAoc3RydWN0IGNvbW1hbmRzKTogUmVwbGFjZSBgbGluZXNfcmVjdXJzZScgbWVtYmVyCgl3aXRoIGBsaW5lc19mbGFncycuCgkoQ09NTUFORFNfe1JFQ1VSU0UsU0lMRU5ULE5PRVJST1J9KTogTmV3IG1hY3JvcywgYml0cyB0byBzZXQgaW4KCXRoYXQgZmxhZyBieXRlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogU2V0IGBsaW5lc19mbGFncycgaW5zdGVhZCBvZgoJYGxpbmVzX3JlY3Vyc2UnLiAgUmVjb3JkIG5vdCBvbmx5ICsgYnV0IGFsc28gQCBhbmQgLSBwcmVmaXhlcy4KCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogQ2hlY2sgdGhlIENPTU1BTkRTX1JFQ1VSU0UgYml0CglpbiBGSUxFLT5jbWRzLT5saW5lc19mbGFncywgcmF0aGVyIHRoYW4gRklMRS0+Y21kcy0+bGluZXNfcmVjdXJzZS4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVwbGFjZWQgUkVDVVJTSVZFIGFuZCBOT1BSSU5UIGxvY2FsCgl2YXIgd2l0aCBGTEFHUzsgaW5pdGlhbGl6ZSBpdCB0byB0aGUgYXBwcm9wcmlhdGUgYGxpbmVzX2ZsYWdzJyBieXRlLgoJU2V0IENISUxELT5ub2Vycm9yIGlmIHRoZSBDT01NQU5EU19OT0VSUk9SIGJpdCBpcyBzZXQgaW4gRkxBR1MuCglTZXQgdGhlIENPTU1BTkRTX1NJTEVOVCBiaXQgaW4gRkxBR1MgZm9yIGEgQCBwcmVmaXguCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBTZXQgRy0+ZmlsZSB0byBpdHMgcHJldiBhZnRlcgoJY2hlY2tpbmcgZm9yIEcgYmVpbmcgZmluaXNoZWQsIHNpbmNlIHRoYXQgY2hlY2sgbmVlZHMgdG8gZXhhbWluZQoJRy0+ZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjaykgW0hBVkVfV0FJVFBJRF06IFRyeSB1c2luZwoJd2FpdHBpZCB3aXRoIGEgYHVuaW9uIHdhaXQnIFNUQVRVUyBhcmcuICBJZiB3YWl0cGlkIGFuZCB1bmlvbiB3YWl0Cglkb24ndCB3b3JrIHRvZ2V0aGVyLCB3ZSBzaG91bGQgbm90IHVzZSB1bmlvbiB3YWl0LgoKCSogVmVyc2lvbiAzLjYzLjIuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBXaGVuIEctPmZpbGUtPnVwZGF0ZWQsIG1vdmUKCUctPmZpbGUgdG8gaXRzIHByZXYuICBXZSBhcmVuJ3QgZmluaXNoZWQgdW50aWwgRy0+ZmlsZSBpcyBuaWwuCgpUaHUgRmViICA0IDEyOjUzOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKHN0YXJ0aW5nX2RpcmVjdG9yeSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkobWFpbik6IFNldCBpdCB0byBjd2QgYWZ0ZXIgZG9pbmcgLUNzLgoJKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gY29tcHV0aW5nIGVhY2ggdGltZS4KCSogbWFrZS5oOiBEZWNsYXJlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKFNIRUxMKTogRGVmaW5lIHRvIC9iaW4vc2ggZm9yIGxvc2luZyBVbml4IG1ha2VzLgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQWxsb2NhdGUgKDEgKyBMRU4gKyAxKSB3b3JkcyBmb3IKCUFSR1YsIHJhdGhlciB0aGFuIExFTiB3b3JkcyBwbHVzIG9uZSBieXRlLgoKV2VkIEZlYiAgMyAxODoxMzo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBQdXQgLSBiZWZvcmUKCWluc3RhbGxfc2V0Z2lkIGNvbW1hbmQgbGluZSwgc28gaXRzIGZhaWx1cmUgd29uJ3QgYmUgYW4gZXJyb3IuCgkoaW5mb2Rpcik6IE5ldyB2YXJpYWJsZS4KCShpbnN0YWxsKTogRGVwZW5kIG9uICQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mby4KCSgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBOZXcgdGFyZ2V0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgRklMRU5BTUVTIGlzIG5pbCB3aGVuIHdlIHNlZSBhIGxpbmUKCXN0YXJ0aW5nIHdpdGggYSB0YWIsIGRvbid0IHRyZWF0IGl0IGFzIGEgY29tbWFuZC4gIEp1c3QgZmFsbAoJdGhyb3VnaCwgcmF0aGVyIHRoYW4gZ2l2aW5nIGFuIGVycm9yLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgdGhlIE5PX1RBUkdFVFMgZmxhZyBpcyBzZXQgd2hlbiB3ZSBzZWUgYQoJY29tbWFuZCBsaW5lLCBkb24ndCBjbGVhciBpdCBiZWZvcmUgY29udGludWluZy4gIFdlIHdhbnQKCXN1YnNlcXVlbnQgY29tbWFuZCBsaW5lcyB0byBiZSBpZ25vcmVkIGFzIHdlbGwuCgoJKiBqb2IuYyAobmV3X2pvYik6IEJlZm9yZSBleHBhbmRpbmcgZWFjaCBjb21tYW5kIGxpbmUsIGNvbGxhcHNlCgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbnMgdGhhdCBhcmUgaW5zaWRlIHZhciBvciBmbiByZWZlcmVuY2VzLgoKTW9uIEZlYiAgMSAxNjowMDoxMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChleGVjX3ByZWZpeCk6IERlZmF1bHQgdG8gJChwcmVmaXgpLCBub3QgL3Vzci9sb2NhbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlLmluZm8pOiBQYXNzIC1JJChzcmNkaXIpIHRvIG1ha2VpbmZvLgoKCSogam9iLmMgW1BPU0lYXSAodW5ibG9ja19zaWdzKTogTWFkZSBnbG9iYWwuCglbIVBPU0lYXSAodW5ibG9ja19zaWdzKTogTW92ZSBkZWZucyB0byBqb2IuaC4KCSogam9iLmggW1BPU0lYXSAodW5ibG9ja19zaWdzKTogRGVjbGFyZS4KClN1biBKYW4gMzEgMTk6MTE6MDUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJbiB2cGF0aCBwYXJzaW5nLCBhZnRlciBmaW5kaW5nIHRoZQoJcGF0dGVybiB0b2tlbiwgdGFrZSBlbnRpcmUgcmVzdCBvZiBsaW5lIGFzIHRoZSBzZWFyY2ggcGF0aCwgbm90CglqdXN0IHRoZSBuZXh0IHRva2VuLgoKCSogY29tcGF0TWFrZWZpbGUgKHJlbW90ZS5vKTogRGVwZW5kIG9uIHJlbW90ZS0qLmMuCgpUaHUgSmFuIDI4IDE2OjQwOjI5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBEb24ndCBkZWZpbmUgYW55IEYgb3IgRCB2ZXJzaW9ucy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgdGhlbSBoZXJlIGFzCglyZWN1cnNpdmVseS1leHBhbmRlZCB2YXJpYWJsZXMgdGhhdCB1c2UgdGhlIGRpciBhbmQgbm90ZGlyIGZ1bmNzLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogSW4gdl9kZWZhdWx0IGNhc2UsIGRvbid0IGV4cG9ydAoJb19kZWZhdWx0IG9yIG9fYXV0b21hdGljIHZhcmlhYmxlcy4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjayk6IFJlbW92ZSBgIGFuZCAnIGluc2lkZSBDIGNvZGU7Cgl0aGV5IGNvbmZ1c2UgdGhlIHNoZWxsIHNjcmlwdC4KCk1vbiBKYW4gMjUgMTM6MTA6NDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My4xLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBXaGVuIHNraXBwaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZwoJb2YgYW4gZWx0IHRoYXQgaXMgIi4iLCBkb24ndCBhbHNvIHNraXAgdGhlIGNvZGUgdGhhdCBwdXNoZXMgUCBwYXN0Cgl0aGUgbmV4dCBzZXBhcmF0b3IuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGlzdGNsZWFuKTogRG9uJ3QgcmVtb3ZlIG1ha2UtKi4KCgkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9VTklPTl9XQUlUKTogVHJ5IHRvIHVzZSBXRVhJVFNUQVRVUyBpZiBpdCdzCglkZWZpbmVkLiAgSWYgb25lIGNhbm5vdCB1c2UgV0VYSVRTVEFUVVMgd2l0aCBhIGB1bmlvbiB3YWl0JwoJYXJndW1lbnQsIHdlIGRvbid0IHdhbnQgdG8gYmVsaWV2ZSB0aGUgc3lzdGVtIGhhcyBgdW5pb24gd2FpdCcgYXQgYWxsLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG8gbm90aGluZyB0byBwcmludCAidXAgdG8gZGF0ZSIgbXNncy4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IERvIGl0IGhlcmUgaW5zdGVhZC4KCVVzZSB0aGUgYGNoYW5nZWQnIGZsYWcgb2YgZWFjaCBnb2FsJ3MgYHN0cnVjdCBkZXAnIHRvIGtlZXAgdHJhY2sKCW9mIHdoZXRoZXIgZmlsZXNfcmVtYWRlIChub3cgY29tbWFuZHNfc3RhcnRlZCkgY2hhbmdlZCBhcm91bmQgYQoJY2FsbCB0byB1cGRhdGVfZmlsZSBmb3IgdGhhdCBnb2FsLgoJV2hlbiBhIGdvYWwgaXMgZmluaXNoZWQsIGFuZCBpdHMgZmlsZSdzIHVwZGF0ZV9zdGF0dXMgaXMgemVybyAoaS5lLiwKCXN1Y2Nlc3Mgb3Igbm90aGluZyBkb25lKSwgdGVzdCB0aGUgYGNoYW5nZWQnIGZsYWcgYW5kIGdpdmUgYW4gInVwCgl0byBkYXRlIiBtc2cgaWZmIGl0IGlzIGNsZWFyLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IFJlbmFtZWQgdG8gY29tbWFuZHNfc3RhcnRlZC4KCSogcmVtYWtlLmM6IENoYW5nZWQgZGVmbi4KCSh1cGRhdGVfZ29hbF9jaGFpbik6IENoYW5nZWQgdXNlcy4KCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSW5jcmVtZW50IGNvbW1hbmRzX3N0YXJ0ZWQgaGVyZS4KCShyZWFwX2NoaWxkcmVuKTogTm90IGhlcmUuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBEb24ndCBkbyBhbnl0aGluZyB3aXRoIGZpbGVzJwoJYHByZXYnIG1lbWJlcnMuICB1cGRhdGVfZmlsZSBub3cgY29tcGxldGVseSBoYW5kbGVzIHRoaXMuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBEb24ndCBleHBhbmQgcmVjdXJzaXZlCgl2YXJpYWJsZXMgaWYgdGhleSBjYW1lIGZyb20gdGhlIGVudmlyb25tZW50LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogRm9yIGZsYWdzIHdpdGggb21pdHRlZCBvcHRpb25hbCBhcmdzLAoJc3RvcmUgeyIiLCAwfSB3aXRoIEFERF9GTEFHLiAgV2hlbiBjb25zdHJ1Y3RpbmcgRkxBR1NUUklORywgYSBmbGFnCglzbyBzdG9yZWQgY2Fubm90IGhhdmUgbW9yZSBmbGFncyBhcHBlbmRlZCB0byB0aGUgc2FtZSB3b3JkLgoKRnJpIEphbiAyMiAxNDo0NjoxNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAocHJpbnRfdmFyaWFibGVfc2V0KTogSW4gdmFycy9idWNrZXQgY2FsY3VsYXRpb24sCglkb24ndCBzcHVyaW91c2x5IG11bHRpcGx5IGJ5IDEwMC4KCgkqIFZlcnNpb24gMy42My4KCgkqIGpvYi5jIFshSEFWRV9VTklPTl9XQUlUXSAoV1RFUk1TSUcsIFdDT1JFRFVNUCwgV0VYSVRTVEFUVVMpOgoJRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IGtlZXAgdHJhY2sgb2YgdGhlIGNvbW1hbmRfc3RhdGUgYmVmb3JlCgljYWxsaW5nIHVwZGF0ZV9maWxlXzEuICBSZW1vdmUgbG9jYWwgdmFyaWFibGUgQ09NTUFORFNfRklOSVNIRUQsCglhbmQgZG9uJ3QgdGVzdCBpdCB0byBkZWNpZGUgdG8gcHJpbnQgdGhlICJpcyB1cCB0byBkYXRlIiBtc2cuCglUZXN0aW5nIGZvciBmaWxlc19yZW1hZGUgaGF2aW5nIGNoYW5nZWQgc2hvdWxkIGFsd2F5cyBiZSBzdWZmaWNpZW50LgoJVGhlIG9sZCBtZXRob2QgbG9zdCB3aGVuIHdlIGFyZSBjYWxsZWQgaW4gdGhlIGdvYWwgY2hhaW4gcnVuIG9uIGEKCW1ha2VmaWxlLCBiZWNhdXNlIHRoZSBtYWtlZmlsZSdzIGNvbW1hbmRfc3RhdGUgaXMgYWxyZWFkeQoJYGNzX2ZpbmlzaGVkJyBmcm9tIHRoZSBtYWtlZmlsZSBjaGFpbiBydW4uCgoJKiBtaXNjLmMgW0hBVkVfU0VUUkVbR1VdSURdOiBUZXN0IHRoZXNlIHRvIGRlY2wgc2V0cmVbZ3VdaWQuCgoJKiBjb25maWd1cmUuaW46IFJld3JvdGUgd2FpdCBjaGVja2luZy4KCVVzZSBBQ19IQVZFX0hFQURFUlMgdG8gY2hlY2sgZm9yIDxzeXMvd2FpdC5oPi4KCVVzZSBBQ19IQVZFX0ZVTkNTIHRvIGNoZWNrIGZvciB3YWl0cGlkIGFuZCB3YWl0My4KCVVzZSBhIGNvbXBpbGUgY2hlY2sgdG8gdGVzdCBqdXN0IGZvciBgdW5pb24gd2FpdCcuCgkqIGpvYi5jOiBSZXdyb3RlIGNvbmRpdGlvbmFscyBhY2NvcmRpbmdseS4KCVtIQVZFX1dBSVRQSURdOiBUZXN0IHRoaXMgb25seSB0byBkZWZpbmUgV0FJVF9OT0hBTkcuCglbSEFWRV9XQUlUM106IExpa2V3aXNlLgoJW0hBVkVfVU5JT05fV0FJVF06IFRlc3QgdGhpcyB0byBkZWZpbmUgV0FJVF9UIGFuZCBXKi4KCgkqIGNvbmZpZ3VyZS5pbjogU2V0IENGTEFHUyBhbmQgTERGTEFHUyBiZWZvcmUgYWxsIGNoZWNrcy4KCgkqIGRpci5jOiBBZGQgc3RhdGljIGZvcndhcmQgZGVjbHMgb2Yge29wZW4scmVhZH1fZGlyc3RyZWFtLgoKVGh1IEphbiAyMSAxNzoxODowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMS4KCgkqIGpvYi5jIFtOR1JPVVBTX01BWCAmJiBOR1JPVVBTX01BWD09MF06ICN1bmRlZiBOR1JPVVBTX01BWC4KCgkqIGNvbXBhdE1ha2VmaWxlIChDRkxBR1MsIExERkxBR1MpOiBTZXQgdG8gQENGTEFHU0AvQExERkxBR1NALgoJKiBidWlsZC50ZW1wbGF0ZSAoQ0ZMQUdTLCBMREZMQUdTKTogU2FtZSBoZXJlLgoJKiBjb25maWd1cmUuaW46IEFDX1NVQlNUKENGTEFHUykgYW5kIExERkxBR1MuCglTZXQgdGhlbSB0byAtZyBpZiBub3QgZGVmaW5lZCBpbiB0aGUgZW52aXJvbm1lbnQuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBVc2UgTElCTkFNRSBjb25zaXN0ZW50bHksIHNldHRpbmcgaXQKCW9ubHkgb25jZSwgdG8gYmUgdGhlIHBhc3NlZCBuYW1lIHNhbnMgYC1sJy4KCVBhc3MgbmV3IHZhciBGSUxFIHRvIGJlIG1vZGlmaWVkIGJ5IHZwYXRoX3NlYXJjaC4KCk1vbiBKYW4gMTggMTQ6NTM6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4zMC4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYnMpOiBSZXR1cm4gd2hlbiBqb2Jfc2xvdHNfdXNlZCBpcyBlcXVhbCB0bwoJam9iX3Nsb3RzLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfQ09OU1QgZm9yIHRoZSBzYWtlIG9mIGdldG9wdC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENvbnRpbnVlIGFmdGVyIHBhcnNpbmcgYG92ZXJyaWRlJwoJZGlyZWN0aXZlLCByYXRoZXIgdGhhbiBmYWxsaW5nIHRocm91Z2ggdG8gbG9zc2FnZS4KCUNoZWNrIGZvciBFT0wgb3IgYmxhbmsgYWZ0ZXIgIm92ZXJyaWRlIGRlZmluZSIuCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubywgcmVtb3RlLm8pOiBQdXQgJChDRkxBR1MpIGFmdGVyIG90aGVyIHN3aXRjaGVzLgoKRnJpIEphbiAxNSAxMjo1Mjo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI5LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQWZ0ZXIgd3JpdGluZyBldmVyeXRoaW5nIGludG8KCUZMQUdTVFJJTkcsIG9ubHkgYmFjayB1cCB0d28gY2hhcnMgaWYgWy0xXSBpcyBhIGRhc2gsIG1lYW5pbmcgd2UKCWp1c3Qgd3JvdGUgIiAtIi4gIEFsd2F5cyB0ZXJtaW5hdGUgdGhlIHN0cmluZyBhdCAqUC4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFdoZW4gY29uc3RydWN0aW5nIG5hbWVzIGluIHN0ZCBkaXJzLAoJdXNlICYoKkxJQilbMl0gZm9yIHRoZSBzdGVtLCBub3QgTElCTkFNRSAod2hpY2ggcG9pbnRzIGF0IHRoZQoJYnVmZmVyIHdlIGFyZSB3cml0aW5nIGludG8hKS4KClRodSBKYW4gMTQgMTM6NTA6MDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNldCBJTl9JR05PUkVEX0RFRklORSBmb3IgIm92ZXJyaWRlCglkZWZpbmUiIHdoZW4gSUdOT1JJTkcgaXMgdHJ1ZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLnN0YXR1cyBhbmQgYnVpbGQuc2guCgpXZWQgSmFuIDEzIDE2OjAxOjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjguCgoJKiBtaXNjLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQ2FzdCByZXN1bHQgb2YgbWFsbG9jL3JlYWxsb2MgdG8KCShjaGFyICopLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtBSUFNQUddOiBDYXN0IHJlYWQgYXJnIHRvIChjaGFyICopLgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBPdmVycmlkZSBTSEVMTCB2YWx1ZSBmb3IKCW9yaWdpbiBvX2Vudl9vdmVycmlkZSBhcyB3ZWxsIGFzIG9fZW52LgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogRG9uJ3QgcmVwbGFjZSAlZ2xvYm9ianMlLiAgSW5zdGVhZCwKCWFkZCB0aGUgbmFtZXMgb2YgdGhlIGdsb2Igb2JqZWN0cyAody9zdWJkaXIpIHRvICVvYmpzJS4KCSogYnVpbGQudGVtcGxhdGUgKGdsb2JvYmpzKTogUmVtb3ZlZC4KCVRha2UgYmFzZW5hbWUgb2YgJG9ianMgYmVmb3JlIGxpbmtpbmcuCgpUdWUgSmFuIDEyIDEyOjMxOjA2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI3LgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBBbHNvIGVkaXQgYnVpbGQuc2guCgkqIGJ1aWxkLnRlbXBsYXRlOiBOZXcgZmlsZS4KCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogTmV3IHJ1bGUgdG8gY3JlYXRlIGl0IGZyb20gYnVpbGQudGVtcGxhdGUuCgkobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIGJ1aWxkLnNoLmluLgoKCSogbWFpbi5jIChkaWUpOiBDYWxsIHByaW50X2RhdGFfYmFzZSBpZiAtcC4KCShtYWluKTogRG9uJ3QgY2FsbCBpdCBoZXJlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBBZGQgQERFRlNALiAgY29uZmlndXJlIHNob3VsZCB0dXJuIHRoaXMKCWludG8gLURIQVZFX0NPTkZJR19ILgoKTW9uIEphbiAxMSAxNDozOToyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNi4KCgkqIG1pc2MuYyAoaW5pdF9hY2Nlc3MpOiBTdXJyb3VuZCB3aXRoICNpZmRlZiBHRVRMT0FEQVZHX1BSSVZJTEVHRUQuCgkoe21ha2UsdXNlcixjaGlsZH1fYWNjZXNzKSBbISBHRVRMT0FEQVZHX1BSSVZJTEVHRURdOiBNYWtlIG5vLW9wLgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbF9zZXRnaWQpOiBOZXcgdmFyLCBzZXQgYnkgY29uZmlndXJlLgoJKGluc3RhbGwpOiBJbnN0YWxsIHNldGdpZCAkKGdyb3VwKSBvbmx5IGlmICQoaW5zdGFsbF9zZXRnaWQpIGlzIHRydWUuCgpGcmkgSmFuICA4IDE1OjMxOjU1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IElmIGdldGxvYWRhdmcgZmFpbHMgd2l0aCBlcnJubz09MCwgZ2l2ZSBhCgltZXNzYWdlIHNheWluZyB0aGF0IGxvYWQgbGltaXRzIGFyZSBub3Qgc3VwcG9ydGVkLgoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBSZXdyb3RlIHBhdGggZGVsZXRpb24gY29kZSB0bwoJbm90IHRyeSB0byB1c2UgUEFUSCdzIG5leHQgbGluayBhZnRlciBmcmVlaW5nIFBBVEguCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBSZXdyaXR0ZW47IG5vdyBoYW5kbGVzIHN0cmluZy12YWx1ZWQKCW9wdGlvbiwgYW5kIGhhcyBubyBhcmJpdHJhcnkgbGltaXRzLgoJKHN3aXRjaGVzKTogU2V0IGB0b2VudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogbWFpbi5jIChkZWNvZGVfZW52X3N3aXRjaGVzKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIGNoYXIgKi4KCgkqIG1pc2MuYyAoY2hpbGRfYWNjZXNzKSBbSEFWRV9TRVRSRVVJRCwgSEFWRV9TRVRSRUdJRF06IFVzZQoJc2V0cmVbZ3VdaWQgaW4gcGxhY2Ugb2Ygc2V0W2d1XWlkLgoKV2VkIEphbiAgNiAxNTowNjoxMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIE1BS0VPVkVSUklERVMsIE1BS0UsIGFuZCBNQUtFX0NPTU1BTkQgd2l0aAoJb3JpZ2luIG9fZGVmYXVsdC4KCgkqIG1ha2UuaCBbUE9TSVhdOiBEb24ndCB0ZXN0IHRoaXMgdG8gdXNlIEFOU0lfU1RSSU5HLgoJVGVzdGluZyBTVERDX0hFQURFUlMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgoJKiBqb2IuaDogRGVjbGFyZSBzdGFydF93YWl0aW5nX2pvYnMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZGQgbWlzc2luZyBwYXJlbnMgaW4gaWYgc3RtdCB0aGF0IGZpbmQKCWNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMuCgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGluaXRfZGlyLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsd2F5cyB1c2UgdHdvICUgc3BlY3MgaW4gYQoJREVCVUdQMiwgYW5kIGFsd2F5cyBwYXNzIHR3byBub24tbmlsIGFyZ3MuCglDYXN0IGZpZWxkIHdpZHRoIGFyZ3MgdG8gaW50LgoJQWRkIG1pc3NpbmcgcGFyZW5zIGluICFSVUxFLT5zdWJkaXIgaWYgc3RtdC4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uLCBwYXRzdWJzdF9leHBhbmQpOiBBZGQgcGFyZW5zIGFyb3VuZAoJYXNzaWdubWVudHMgaW5zaWRlIGB3aGlsZScgc3RtdHMuCgkqIGNvbW1hbmRzLmMgKHByaW50X2NvbW1hbmRzKTogQ2FzdCBmaWVsZCB3aWR0aCBhcmdzIHRvIGludC4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2FzdCByZXR1cm4gdmFsdWUgb2YgYWxsb2NhIHRvIChjaGFyICopLgoKCSogbWFpbi5jIChpbml0X3N3aXRjaGVzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIGRlY29kZV9zd2l0Y2hlcy4KCShkZWNvZGVfc3dpdGNoZXMpOiBUYWtlIG5ldyBhcmcgRU5WLiAgSWYgc2V0LCBpZ25vcmUgbm9uLW9wdGlvbgoJYXJnczsgcHJpbnQgbm8gZXJyb3IgbXNnczsgaWdub3JlIG9wdGlvbnMgd2l0aCBjbGVhciBgZW52JyBmbGFncy4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogUmV3cml0dGVuIHRvIGNob3AgZW52YXIgdmFsdWUgaW50byB3b3JkcwoJYW5kIHBhc3MgdGhlbSB0byBkZWNvZGVfc3dpdGNoZXMuCgkoc3dpdGNoZXMpOiBTZXQgYGVudicgZmxhZyBmb3IgLUkgYW5kIC12LgoKCSogZGlyLmMgKGluaXRfZGlyKTogQ2FzdCBmcmVlIHRvIF9fZ2xvYl9jbG9zZWRpcl9ob29rJ3MgdHlwZS4KClR1ZSBKYW4gIDUgMTQ6NTI6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yNS4KCgkqIGpvYi5jIFtIQVZFX1NZU19XQUlUIHx8ICFVU0ddOiBEb24ndCAjaW5jbHVkZSA8c3lzL3RpbWUuaD4gYW5kCgk8c3lzL3Jlc291cmNlLmg+LiAgPHN5cy90aW1lLmg+IGludGVyYWN0cyBiYWRseSB3aXRoIDx0aW1lLmg+LCBhbmQKCXdlIGRvbid0IG5lZWQgdGhlc2UgYW55d2F5LgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0ZVTkNTKTogQ2hlY2sgZm9yIHNldHJlW2d1XWlkLgoJKiBtaXNjLmMgKHt1c2VyLG1ha2V9X2FjY2Vzcyk6IFRlc3QgI2lmbmRlZiBIQVZFX1NFVFJFW0dVXUlELCBub3QKCSNpZmRlZiBQT1NJWCB8fCBVU0cuICBTdW5PUyA0LjEgaXMgc3VwcG9zZWRseSBQT1NJWC4xIGNvbXBsaWFudCwKCWJ1dCBpdHMgc2V0W2d1XWlkIGZ1bmN0aW9ucyBhcmVuJ3Q7IGl0cyBzZXRyZVtndV1pZCBmdW5jdGlvbnMgd29yay4KCgkqIG1pc2MuYyAoe3VzZXIsbWFrZSxjaGlsZH1fYWNjZXNzKTogR2l2ZSBuYW1lIG9mIGNhbGxlciBpbiBlcnJvciBtc2dzLgoKCSogam9iLmMgKGxvYWRfdG9vX2hpZ2gpOiBTYXkgImNhbm5vdCBlbmZvcmNlIGxvYWQgbGltaXQiIGluIGVycm9yIG1zZy4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19QUk9HX0NDLgoJKiBjb21wYXRNYWtlZmlsZSAoQ0MpOiBEZWZpbmUgdG8gQENDQCAoYXV0b2NvbmYgbWFnaWMpLgoKCSogY29tcGF0TWFrZWZpbGU6IEFkZCAuTk9FWFBPUlQgbWFnaWMgdGFyZ2V0LgoKTW9uIEphbiAgNCAxNzowMDowMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFVwZGF0ZWQgY29weXJpZ2h0IHRvIGluY2x1ZGUgOTMuCgpUaHUgRGVjIDMxIDEyOjI2OjE1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtfQUlYXTogRG9uJ3QgZGVjbGFyZSBhbGxvY2EuCgpUdWUgRGVjIDI5IDEzOjQ1OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI0LgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBBZGQgc2lnbmFtZS5vLgoJKHNyY3MpOiBBZGQgc2lnbmFtZS5bY2hdLgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBBZGQgY29uZmlnLmguaW4uCgkocmVtb3RlLm8pOiBBZGQgLUkuIGJlZm9yZSAtSSQoc3JjZGlyKS4KCk1vbiBEZWMgMjggMTU6NTE6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMy4KCgkqIHJlYWQuYyAocmVhZGxpbmUpOiBGYXRhbCB3aGVuIExFTj09MCwgaW5kaWNhdGluZyBhIGxpbmUgc3RhcnRpbmcKCXdpdGggYSBOVUwuCgkocmVhZGxpbmUpOiBUYWtlIG5ldyBhcmcgTElORU5PLCBmb3IgdXNlIGluIGVycm9yIG1zZy4KCShyZWFkX21ha2VmaWxlLCBkb19kZWZpbmUpOiBQYXNzIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogUGFzcyAtREhBVkVfQ09ORklHX0ggaW4gQ1BQRkxBR1MuCgkoLmMubyk6IEFkZCAtSS4gYmVmb3JlIC1JJChzcmNkaXIpLgoKV2VkIERlYyAyMyAxMjoxMjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQWNjZXB0IGFuZCBpZ25vcmUgYSBydWxlIHdpdGggbm8gdGFyZ2V0cy4KCgkqIGNvbXBhdE1ha2VmaWxlIChBTExPQ0FfU1JDKTogTmV3IHZhcmlhYmxlLgoJKHNyY3MpOiBJbmNsdWRlIGl0cyB2YWx1ZS4KCgkqIHJlYWQuYyAoc3RydWN0IGNvbmRpdGlvbmFsKTogUmVuYW1lZCBtZW1iZXIgYG1heF9pZ25vcmluZycgdG8KCWBhbGxvY2F0ZWQnOyBhZGRlZCBuZXcgbWVtYmVyIGBzZWVuX2Vsc2UnLgoJKGNvbmRpdGlvbmFsX2xpbmUpOiBJbml0aWFsaXplIHNlZW5fZWxzZSBmbGFnIHdoZW4gc3RhcnRpbmcgYW4gYGlmLi4uJzsKCXNldCBpdCB3aGVuIHdlIHNlZSBhbiBgZWxzZSc7IGZhdGFsIGlmIHNldCB3aGVuIHdlIHNlZSBgZWxzZScuCgkocmVhZF9tYWtlZmlsZSk6IEZhdGFsICJtaXNzaW5nIGBlbmRpZiciIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZwoJY29uZGl0aW9uYWxzLCBub3QganVzdCBpZiB3ZSBhcmUgc3RpbGwgaWdub3JpbmcuCgpUdWUgRGVjIDIyIDE1OjM2OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFuZXh0KTogU2V0IHRvIDEsIG5vdCBsLgoJKCQobWFuZGlyKS8kKGluc3RuYW1lKS4kKG1hbmV4dCkpOiBVc2UgJChzcmNkaXIpIGZvciBtYWtlLm1hbiBpbiBjbWRzLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBEb24ndCBjYWxsIHVuaXF1aXplX2RlcHMgaGVyZS4KCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBMaWtld2lzZS4KCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBMaWtld2lzZS4KCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogQ2FsbCBpdCBvbmx5IGhlcmUuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19jb252ZXhfX106IEZDPWZjLgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwYW5kIHRoZSB2YWx1ZXMgb2YgcmVjdXJzaXZlbHkKCWV4cGFuZGVkIHZhcmlhYmxlcyB3aGVuIHB1dHRpbmcgdGhlbSBpbnRvIHRoZSBlbnZpcm9ubWVudC4KCSogZXhwYW5kLmMgKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IE1hZGUgZ2xvYmFsLgoJKiBtYWtlLmggKHJlY3Vyc2l2ZWx5X2V4cGFuZCk6IERlY2xhcmUgaXQuCgoJKiByZW1ha2UuYyAoY2hlY2tfZGVwKTogU2V0IEZJTEUtPmNvbW1hbmRfc3RhdGUgdG8gY3NfZGVwc19ydW5uaW5nCgl3aGVuIGEgZGVwJ3MgY29tbWFuZF9zdGF0ZSBpcyBjc19ydW5uaW5nIG9yIGNzX2RlcHNfcnVubmluZy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgZXJyb3IgbXNnIGZvciBzcHVyaW91cyBjbWRzIHRvCglub3Qgc2F5ICJmaXJzdCB0YXJnZXQiLgoKU3VuIERlYyAyMCAxNzo1NjowOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvIEFDX0NPTkZJR19IRUFERVIgcmlnaHQgYWZ0ZXIgQUNfSU5JVC4KCSogbWFrZS5oIChIQVZFX0NPTkZJR19IKTogI2luY2x1ZGUgImNvbmZpZy5oIiwgdGhlbiAjZGVmaW5lIHRoaXMuCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWcuaCwgY29uZmlndXJlLCBjb25maWcuaC5pbik6IE5ldyBydWxlcy4KCShkZWZpbmVzKTogUmVtb3ZlZCBAREVGU0AuCgpUaHUgRGVjIDE3IDE2OjExOjQwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogSnVzdCBkZXBlbmQgb24gZGlzdGNsZWFuOyBubyBjbWRzLgoJKGRpc3RjbGVhbik6IERvIHdoYXQgcmVhbGNsZWFuIGRpZCBiZWZvcmU7IGFsc28gcmVtb3ZlIE1ha2VmaWxlIGFuZAoJY29uZmlnLmg7IGRvbid0IHJlbW92ZSBjb25maWd1cmUuCgkoaW5mbywgZHZpKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBtYWtlLntpbmZvLGR2aX0uCgkoZG9jKTogUmVtb3ZlZCB0YXJnZXQuCgkoTUFLRUlORk8sIFRFWEkyRFZJKTogTmV3IHZhcnMuCgkobWFrZS5pbmZvLCBtYWtlLmR2aSk6IFVzZSB0aGVtIGluc3RlYWQgb2YgZXhwbGljaXQgY21kcy4KCldlZCBEZWMgMTYgMTY6MjU6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZmNudGwuaCB0byBBQ19IQVZFX0hFQURFUlMuICBnZXRsb2FkYXZnIGNhcmVzLgoKV2VkIERlYyAgOSAxNToyMTowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZCAtLW5ldy1maWxlIGFsaWFzIGZvciAtVy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpOiBDaGFuZ2UgYWxsIEMrKyB0byBDWFggYW5kIEMrK0ZMQUdTCgl0byBDWFhGTEFHUy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogRXhwYW5kIHRoZSB2YXJpYWJsZSBuYW1lIGJlZm9yZSB1c2luZyBpdC4KCgkqIG1haW4uYyAobWFpbik6IERlZmluZSB2YXJpYWJsZSAiTUFLRV9DT01NQU5EIiB0byBhcmd2WzBdOwoJZGVmaW5lICJNQUtFPSQoTUFLRV9DT01NQU5EKSAkKE1BS0VPVkVSUklERVMpIiBhbHdheXMuCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBTZWFyY2ggZm9yIGxpYk5BTUUuYSBpbiBjd2Q7IGxvb2sgaW4KCXZwYXRoIGJlZm9yZSBsb29raW5nIGluIHN0YW5kYXJkIGRpcnMsIG5vdCBhZnRlci4KCUNoYW5nZWQgb3JkZXIgb2Ygc3RkIGRpcnMgdG86IC9saWIsIC91c3IvbGliLCAke3ByZWZpeH0vbGliLgoKTW9uIE5vdiAyMyAxNDo1NzozNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3BhdHRlcm5fcnVsZXMsIGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBBZGRlZAoJYnJhY2tldHMgYXJvdW5kIGluaXRpYWxpemVycy4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogRG9uJ3QgY2hlY2sgZm9yIExJTkVbMF09PSdcdCcuCgkodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBFeHBhbmQgdGhlIG5hbWUgYmVmb3JlIGRlZmluaW5nIHRoZSB2YXIuCgoJKiBqb2IuYyAoaW5pdF9zaWdsaXN0KTogUmVtb3ZlZCBmdW5jdGlvbi4KCVJlbW92ZWQgZGVjbCBvZiBgc3lzX3NpZ2xpc3QnLgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVF06ICNpbmNsdWRlICJzaWduYW1lLmgiLgoJW0hBVkVfU1lTX1NJR0xJU1QgJiYgIVNZU19TSUdMSVNUX0RFQ0xBUkVEXTogRGVjbGFyZSBzeXNfc2lnbGlzdAoJb25seSB1bmRlciB0aGVzZSBjb25kaXRpb25zLgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkZWNsYXJlIGluaXRfc2lnbGlzdC4KCShtYWluKSBbISBIQVZFX1NZU19TSUdMSVNUXTogQ2FsbCBzaWduYW1lX2luaXQgaW5zdGVhZCBvZiBpbml0X3NpZ2xpc3QuCgpXZWQgTm92IDE4IDE0OjUyOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IERvbid0IHRyeSB0byBhcHBlbmQgdG8gRklSU1RERVBTIGlmIGl0J3MKCW5pbDsgaW5zdGVhZCBqdXN0IHNldCBpdCB0byBNT1JFREVQUy4KCk1vbiBOb3YgMTYgMTc6NDk6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogSW5pdGlhbGl6ZSBQIHRvIERJUlBBVEggYmVmb3JlCglsb29wIHRoYXQgc2V0cyBNQVhFTEVNLgoKRnJpIE5vdiAxMyAxODoyMzoxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIyLgoKVGh1IE5vdiAxMiAxNTo0NTozMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVW5kZXIgLW4sIGluY3JlbWVudCBmaWxlc19yZW1hZGUgYWZ0ZXIKCXByb2Nlc3NpbmcgKGkuZS4sIHByaW50aW5nKSBhbGwgY29tbWFuZCBsaW5lcy4KClR1ZSBOb3YgMTAgMTU6MzM6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEFwcGVuZCBuZXcgZGVwcyBpZiB0aGlzIHJ1bGUgaGFzIG5vCgljb21tYW5kczsgcHJlcGVuZCB0aGVtIHRvIGV4aXN0aW5nIGRlcHMgaWYgdGhpcyBydWxlIGhhcyBubyBjb21tYW5kcy4KCgkqIGRpci5jIChvcGVuX2RpcnN0cmVhbSk6IFJldHVybiBuaWwgaWYgRElSLT5jb250ZW50cy0+ZmlsZXMgaXMgbmlsLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFJlbW92ZWQgbGFzdCBhcmcgU1RSSVAuICBBbHdheXMgc3RyaXAgYC4vJ3MuCgkocmVhZF9tYWtlZmlsZSk6IENoYW5nZWQgY2FsbGVycy4KCSogZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpOiBMaWtld2lzZS4KCSogcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IExpa2V3aXNlLgoKTW9uIE5vdiAgOSAxNzo1MDoxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKGZpbGVzX3JlbWFkZSk6IE1hZGUgZ2xvYmFsLgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogRG9uJ3QgaW5jcmVtZW50IGZpbGVzX3JlbWFkZSBoZXJlOyB0aGlzCglmdW5jdGlvbiBnZXRzIGNhbGxlZCBpbiBtYW55IHNpdHVhdGlvbnMgd2hlcmUgbm8gcmVtYWtpbmcgd2FzIGluCglmYWN0IGRvbmUuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG8gaXQgaGVyZSBpbnN0ZWFkLCB3aGVuIHdlIGtub3cgdGhhdAoJYWN0dWFsIGNvbW1hbmRzIGhhdmUgYmVlbiBydW4gZm9yIHRoZSBmaWxlLgoJKiBtYWtlLmggKGZpbGVzX3JlbWFkZSk6IERlY2xhcmUgaXQuCgpUaHUgTm92ICA1IDE4OjI2OjEwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBBbGxvdyBibGFua3MgYXMgd2VsbCBhcyBjb2xvbnMgdG8KCXNlcGFyYXRlIGVsdHMgaW4gdGhlIHNlYXJjaCBwYXRoLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgZmF0YWwgb24gZXh0cmEgdG9rZW5zIGluIGB2cGF0aCcuCglUaGUgc2VhcmNoIHBhdGggY2FuIGNvbnRhaW4gc3BhY2VzIG5vdy4KClR1ZSBOb3YgIDMgMjA6NDQ6MzIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoY2hlY2spOiBOZXcgdGFyZ2V0OyBuby1vcC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGFmdGVyCgl0ZXN0aW5nIGZvciBPTERIQVNIPT0wIGJ1dCBiZWZvcmUgdXNpbmcgdGhlIHZhbHVlLgoJKHJlbmFtZV9maWxlKTogRG9uJ3QgbW9kIE9MREhBU0ggYnkgRklMRV9CVUNLRVRTIGJlZm9yZSBwYXNzaW5nIGl0Cgl0byBmaWxlX2hhc2hfZW50ZXIuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogTm90aWNlIHdoZW4gT0xERklMRS0+Y21kcyBjYW1lIGZyb20KCWRlZmF1bHQuYywgYW5kIGRvbid0IHRyeSB0byBwcmludCAtPmZpbGVuYW1lIGluIHRoYXQgY2FzZS4KClN1biBPY3QgMjUgMDE6NDg6MjMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IERvbid0IHByb2Nlc3MgRi0+YWxzb19tYWtlIGhlcmUuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBEb24ndCBwcm9jZXNzIEZJTEUtPmFsc29fbWFrZSBpZiBubyBhdHRlbXB0Cgl0byB1cGRhdGUgRklMRSB3YXMgYWN0dWFsbHkgbWFkZS4KCUZpeGVkIHRvIGNhbGwgZl9tdGltZSBkaXJlY3RseSB0byByZWZyZXNoIHRoZWlyIG1vZHRpbWVzLgoKU2F0IE9jdCAyNCAyMjowODo1OSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChmaW5kX3BlcmNlbnQpOiBEb24ndCBpbmNyZW1lbnQgUCBhZ2FpbiBhZnRlciBza2lwcGluZwoJYW4gZXNjYXBlZCAlLgoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2V4cGFuZCk6IEluIGNhbGwgdG8gcGF0c3Vic3RfZXhwYW5kLCBkb24ndAoJZmluZCBgJSdzIG91cnNlbHZlczsgbGV0IHRoYXQgZnVuY3Rpb24gZG8gaXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGU6IHJlY29yZF93YWl0aW5nX2ZpbGVzKTogRG9uJ3QgY2FsbAoJcmVjb3JkX2ZpbGVzIGlmIEZJTEVOQU1FUyBpcyBuaWwuCgkocmVhZF9tYWtlZmlsZSk6IEFsbCBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhcnNpbmcsIGV4Y2VwdCBmb3IgcnVsZQoJbGluZXMsIGZhbGwgdGhyb3VnaCB0byB0aGUgZW5kIG9mIHRoZSBsb29wLiAgQXQgdGhlIGVuZCBvZiB0aGUKCWxvb3AsIGRvIHJlY29yZF93YWl0aW5nX2ZpbGVzIHNvIHdlIG5vdGljZSBsYXRlciBzcHVyaW91cyBjbWRzLgoKRnJpIE9jdCAyMyAxNTo1NzozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBGcmVlIG9sZCB2YWx1ZSBvZiBTSEVMTAoJYmVmb3JlIHJlcGxhY2luZyBpdC4KClRodSBPY3QgMTUgMTg6NTc6NTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoLmMubyk6IEFkZCAtSSQoc3JjZGlyKS9nbG9iIHRvIGZsYWdzLgoKCSogZGlyLmMgKG9wZW5fZGlyc3RyZWFtKTogQ2FzdCByZXR1cm4gdmFsdWUgdG8gX19wdHJfdC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXM6ICJHRVQiKSBbX0lCTVIyXTogVXNlIFVTRyBkZWZuLgoKCSogbWFrZS5oIChNQVhQQVRITEVOKTogTW92ZWQgb3V0IG9mICNpZm5kZWYgUE9TSVguCgkoR0VUX1BBVEhfTUFYKTogTW92ZWQgZnJvbSAjaWZkZWYgUE9TSVggdG8gI2lmZGVmIFBBVEhfTUFYICNlbHNlLgoJRGVmaW5lIGFzIChnZXRfcGF0aF9tYXggKCkpLgoJWyEgUEFUSF9NQVhdIChORUVEX0dFVF9QQVRIX01BWCk6IERlZmluZS4KCVshIFBBVEhfTUFYXSAoZ2V0X3BhdGhfbWF4KTogRGVjbGFyZSBmbi4KCSogbWlzYy5jIFtORUVEX0dFVF9QQVRIX01BWF0gKGdldF9wYXRoX21heCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBPY3QgMTIgMTM6MzQ6NDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjEuCgoJKiBqb2IuYyAoc3lzX3NpZ2xpc3QpOiBPbmx5IGRlY2xhcmUgI2lmbmRlZiBTWVNfU0lHTElTVF9ERUNMQVJFRC4KCSogbWFrZS5oIFshIEhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglTWVNfU0lHTElTVF9ERUNMQVJFRC4KCgkqIGRpci5jIChmaWxlX2ltcG9zc2libGUpOiBXaGVuIGluaXRpYWxpemluZyBESVItPmNvbnRlbnRzLCBzZXQKCURJUi0+Y29udGVudHMtPmRpcnN0cmVhbSB0byBuaWwuCgoJKiBjb21wYXRNYWtlZmlsZSAoR0xPQik6IERlZmluZSBuZXcgdmFyaWFibGUuCgkob2Jqcyk6IFVzZSBpdCwgcmF0aGVyIHRoYW4gZ2xvYi9saWJnbG9iLmEgZXhwbGljaXRseS4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBXaGVuIHN0cmlwcGluZyAiLi8iLCBoYW5kbGUgY2FzZXMgbGlrZQoJIi4vLy9mb28iIGFuZCAiLi8vLy8vIi4KCSogZmlsZS5jIChsb29rdXBfZmlsZSwgZW50ZXJfZmlsZSk6IExpa2V3aXNlLgoKU3VuIE9jdCAxMSAxNzowMDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZGlyLmMgKHN0cnVjdCBkaXJzdHJlYW0sIHtvcGVuLHJlYWR9X2RpcnN0cmVhbSk6IE5ldwoJZGF0YSB0eXBlIGFuZCBmdW5jdGlvbnMgdG8gcmVhZCBhIGRpcmVjdG9yeSBzZXF1ZW50aWFsbHkuCgkoaW5pdF9kaXIpOiBOZXcgZnVuY3Rpb24gdG8gaG9vayBpdCBpbnRvIGdsb2IuCgkqIG1haW4uYyAobWFpbik6IENhbGwgaW5pdF9kaXIuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZGVkIGdsb2IvbGliZ2xvYi5hLgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSBjb2RlIHRvIHRlc3QgZm9yIGdsb2IuCgpGcmkgT2N0ICA5IDEyOjA4OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IEdlbmVyYWxpemVkIHRlc3QgZm9yIE5BTUUgcG9pbnRpbmcKCXNvbWV3aGVyZSBpbnRvIEYtPm5hbWUuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogRnJlZSBvbGQgdmFsdWUgd2hlbiByZXBsYWNpbmcuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IEZyZWUgdGhlIGxpbmVidWZmZXIgYmVmb3JlIHJldHVybmluZy4KCShyZWNvcmRfZmlsZXMpOiBXaGVuIGNsZWFyaW5nIC5TVUZGSVhFUyBkZXBzLCBmcmVlIHRoZWlyIGRhdGEuCgkobXVsdGlfZ2xvYik6IEZyZWUgT0xEIGFuZCBpdHMgZGF0YSB3aGVuIHJlcGxhY2luZyBpdCB3aXRoIHJlc3VsdHMKCW9mIGdsb2IgcnVuLgoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogVXNlIGFsbG9jYSBpbiBwbGFjZSBvZiB4bWFsbG9jCglmb3IgdGVtcCBzcGFjZSBmb3IgJF4sICQ/LCBldCBhbC4KCgkqIGRpci5jIChzdHJ1Y3QgZGlyZWN0b3J5KTogTmV3IG1lbWJlciBgY29udGVudHMnIHJlcGxhY2VzIGBmaWxlcycKCWFuZCBgZGlyc3RyZWFtJy4KCShzdHJ1Y3QgZGlyZWN0b3J5X2NvbnRlbnRzKTogTmV3IHR5cGUuCgkoZGlyZWN0b3JpZXNfY29udGVudHMpOiBOZXcgaGFzaCB0YWJsZS4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBUYWtlIGEgc3RydWN0IGRpcmVjdG9yeV9jb250ZW50cy4KCShkaXJfZmlsZV9leGlzdHNfcCk6IFBhc3MgaXQgdGhlIGBjb250ZW50cycgbWVtYmVyIG9mIHRoZSBkaXIgZm91bmQuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogUmVuYW1lZCB0byBkaXJfY29udGVudHNfZmlsZV9leGlzdHNfcDsKCW1hZGUgc3RhdGljLiAgUmV0dXJuIDAgaWYgRElSIGlzIG5pbCAobWVhbmluZyBpdCBjb3VsZG4ndCBiZSBzdGF0J2QpLgoJKGRpcl9maWxlX2V4aXN0c19wLCBmaW5kX2RpcmVjdG9yeSk6IENoYW5nZSBhbGwgY2FsbGVycy4KCShmaWxlX2ltcG9zc2libGUpOiBVc2UgRElSLT5jb250ZW50cywgaW5pdGlhbGl6aW5nIGl0IGlmIG5pbC4KCShwcmludF9kaXJfZGF0YV9iYXNlKTogVXNlIERJUi0+Y29udGVudHMsIGFuZCBwcmludCBvdXQgZGV2aWNlIGFuZAoJaW5vZGUgbnVtYmVycyB3aXRoIGVhY2ggZGlyZWN0b3J5LgoKCSogQ2hhbmdlcyBmb3IgcGVyZm9ybWFuY2Ugd2luIGZyb20gSm9obiBHaWxtb3JlIDxnbnVAY3lnbnVzLmNvbT46CgkqIGRpci5jIChESVJFQ1RPUllfQlVDS0VUUyk6IEluY3JlYXNlIHRvIDE5OS4KCShESVJGSUxFX0JVQ0tFVFMpOiBEZWNyZWFzZSB0byAxMDcuCgkoZmluZF9kaXJlY3RvcnkpOiBBbGxvY2F0ZSBhbmQgemVybyBhIG11bHRpcGxlIG9mCglzaXplb2YgKHN0cnVjdCBkaXJmaWxlICopLCBub3Qgb2Ygc2l6ZW9mIChzdHJ1Y3QgZGlyZmlsZSkuCgkoZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wKTogTmV3IGZ1bmN0aW9uLCBuZWFybHkgYWxsIGNvZGUgZnJvbQoJZGlyX2ZpbGVfZXhpc3RzX3AuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBKdXN0IGNhbGwgZmluZF9kaXJlY3RvcnkrZGlyX3N0cnVjdF9maWxlX2V4aXN0c19wLgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogUmVtb3ZlIHJlZHVuZGFudAoJZGlyX2ZpbGVfZXhpc3RzX3AgY2FsbC4KCgkqIGNvbmZpZ3VyZS5pbjogQ29tbWVudCBvdXQgZ2xvYiBjaGVjazsgYWx3YXlzIHVzZSBvdXIgY29kZS4KCkZyaSBPY3QgIDIgMTk6NDE6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCUhBVkVfU1lTX1NJR0xJU1Q7IGFmdGVyIGRvaW5nICNkZWZpbmUgc3lzX3NpZ2xpc3QgX3N5c19zaWdsaXN0LCB3ZQoJZG8gaGF2ZSBpdC4KCldlZCBTZXAgMzAgMTk6MjE6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBEb24ndCBkbyAtdyBhdXRvbWF0aWNhbGx5IGlmIC1zLgoKVHVlIFNlcCAyOSAyMTowNzo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAocHJpbnRlZF92ZXJzaW9uKTogTW92ZSB2YXJpYWJsZSBpbnNpZGUgcHJpbnRfdmVyc2lvbi4KCShwcmludF92ZXJzaW9uKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHByaW50ZWRfdmVyc2lvbiBpcyBzZXQuCgkoZGllKTogRG9uJ3QgdGVzdCBwcmludGVkX3ZlcnNpb24gaGVyZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBVbmRlciAtdiwgZG8gcHJpbnRfdmVyc2lvbiBiZWZvcmUgZ2l2aW5nIHVzYWdlLgoJKERFU0NSSVBUSU9OX0NPTFVNTik6IE5ldyBtYWNyby4KCShkZWNvZGVfc3dpdGNoZXMpOiBVc2UgaXQgd2hlbiBwcmludGluZyB0aGUgdXNhZ2UgbWVzc2FnZS4KCUxlYXZlIGF0IGxlYXN0IHR3byBzcGFjZXMgYmV0d2VlbiBvcHRpb25zIGFuZCB0aGVpciBkZXNjcmlwdGlvbnMuCgpGcmkgU2VwIDI1IDEzOjEyOjQyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIwLgoKV2VkIFNlcCAxNiAxNjoxNToyMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFNhdmUgZXJybm8gdmFsdWUgZnJvbSB0cnlpbmcgdG8gb3BlbgoJRklMRU5BTUUsIGFuZCByZXN0b3JlIGl0IGJlZm9yZSBlcnJpbmc7IG90aGVyd2lzZSB3ZSBnZXQgdGhlIGVycm5vCgl2YWx1ZSBmcm9tIHRoZSBsYXN0IGVsdCBvZiB0aGUgc2VhcmNoIHBhdGguCgpUdWUgU2VwIDE1IDE1OjEyOjQ3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGQgLS1zdG9wIGZvciAtUy4KCgkqIHJlYWQuYyAod29yZDFlcSk6IERvIHN0cm5jbXAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgc29tZXBsYWNlIHRoYXQKCW1heSBiZSBvdXQgaW4gc3BhY2UuCgpXZWQgU2VwICA5IDE1OjUwOjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBJZiBhbGwgdGhlIGNvbW1hbmQgbGluZXMgd2VyZQoJcmVjdXJzaXZlLCBkb24ndCBkbyB0aGUgdG91Y2hpbmcuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBEb24ndCBjaGVjayBmb3IgKyBoZXJlLgoJKiBjb21tYW5kcy5jIChjaG9wX2NvbW1hbmRzKTogRG8gaXQgaGVyZSBpbnN0ZWFkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3Rlcm1pbmFsX3J1bGVzKTogUHJlcGVuZCArIHRvIGNtZHMgZm9yIFJDUy4KCldlZCBTZXAgIDIgMTc6NTM6MDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEluY2x1ZGUgJChBTExPQ0EpLgoKCSogbWFrZS5oIFtDUkFZXTogTW92ZSAjZGVmaW5lIHNpZ25hbCBic2RzaWduYWwgdG8gYmVmb3JlICNpbmNsdWRlcy4KClRodSBBdWcgMjcgMTc6NDU6NDMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZGVmYXVsdF9pbmNsdWRlX2RpcmVjdG9yaWVzKTogQWRkIElOQ0xVREVESVIgZmlyc3QuCgkqIGNvbXBhdE1ha2VmaWxlIChpbmNsdWRlZGlyKTogRGVmaW5lLgoJKGRlZmluZXMpOiBBZGQgLUQgZm9yIElOQ0xVREVESVI9IiQoaW5jbHVkZWRpcikiLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogR3JvayBtdWx0aXBsZSBmaWxlcyBpbiBgaW5jbHVkZSc7CglnbG9iYmluZyB0b28uCgoJKiByZW1ha2UuYyAobGlicmFyeV9zZWFyY2gpOiBOZXcgZnVuY3Rpb24uCgkobGlicmFyeV9maWxlX210aW1lKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKGZfbXRpbWUpOiBVc2UgbGlicmFyeV9zZWFyY2ggaW5zdGVhZCBvZiBsaWJyYXJ5X2ZpbGVfbXRpbWUuCgkqIGNvbXBhdE1ha2VmaWxlIChsaWJkaXIpOiBEZWZpbmUuCgkoZGVmaW5lcyk6IEFkZCAtRCBmb3IgTElCRElSPSIkKGxpYmRpcikiLgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBEb2N1bWVudCBjaGFuZ2UuCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogRml4IGZpbGVfaGFzaF9lbnRlciBjYWxsIHdpdGggbWlzc2luZyBhcmcuCgpXZWQgQXVnIDI2IDE3OjEwOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE5LgoKCSogbWFpbi5jIChtYWluKTogU2V0IGNvbW1hbmRfc3RhdGUgdG8gY3NfZmluaXNoZWQgZm9yIHRlbXAgZmlsZXMKCW1hZGUgZm9yIHN0ZGluIG1ha2VmaWxlcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3QgdGVsbCBnZXRvcHQgdG8gcmV0dXJuIG5vbi1vcHRpb24KCWFyZ3MgaW4gb3JkZXIuCglJZ25vcmUgYW4gYXJndW1lbnQgb2YgYC0nLgoKVGh1IEF1ZyAyMCAxMzozNjowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IElmICh0b3VjaF9mbGFnICYmICFSRUNVUlNJVkUpLCBpZ25vcmUKCXRoZSBjb21tYW5kIGxpbmUgYW5kIGdvIHRvIHRoZSBuZXh0LgoJKG5vdGljZV9maW5pc2hlZF9maWxlKTogVW5kZXIgLXQsIHRvdWNoIEZJTEUuCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IERvbid0IHRvdWNoIGl0IGhlcmUuCgpXZWQgQXVnIDE5IDE2OjA2OjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChwYXR0ZXJuX21hdGNoZXMpOiBVc2UgdGVtcG9yYXJ5IGZvciBzdHJsZW4gKFdPUkQpCglpbnN0ZWFkIG9mIHR3byBmdW5jdGlvbiBjYWxscy4KCgkqIGNvbXBhdE1ha2VmaWxlIChMT0FEX0FWRyk6IFJlbW92ZSB2YXJpYWJsZSBhbmQgY29tbWVudHMuCgpUdWUgQXVnIDE4IDE0OjU4OjU4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChSdW5uaW5nKTogTm9kZSByZW5hbWVkIHRvIGBtYWtlIEludm9jYXRpb24nLgoKRnJpIEF1ZyAxNCAxMjoyNzoxMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBEb24ndCBjb21wYXJlIFtNQVgtMy4uTUFYXSBpZgoJTkFNRUxFTiAhPSBNRU1MRU4uCgpUaHUgQXVnIDEzIDE3OjUwOjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTguCgoJKiBtYWluLmM6IERvbid0ICNpbmNsdWRlIDx0aW1lLmg+OyBtYWtlLmggYWxyZWFkeSBkb2VzLgoKTW9uIEF1ZyAxMCAxNzowMzowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBGaXhlZCBjb3B5aW5nIG9mIHN1ZmZpeCB3aGVuIGJ1aWxkaW5nCglhbHNvX21ha2UgZWx0cy4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbjogYHNoZWxsJyk6IE1ha2Ugc3VyZSBCVUZGRVIgaXMKCW51bGwtdGVybWluYXRlZCBiZWZvcmUgcmVwbGFjaW5nIG5ld2xpbmVzLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbmRpcik6IFVzZSBtYW4kKG1hbmV4dCksIG5vdCBhbHdheXMgbWFubC4KClN1biBBdWcgIDIgMDE6NDI6NTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IE5vdCBzdGF0aWMuCgkqIHJ1bGUuaDogRGVjbGFyZSBpdC4KCgkqIGZpbGUuYyAoZmlsZV9oYXNoX2VudGVyKTogTmV3IGZ1bmN0aW9uLCBtb3N0IGNvZGUgZnJvbSByZW5hbWVfZmlsZS4KCShyZW5hbWVfZmlsZSk6IENhbGwgaXQuCgkqIGZpbGUuaCAoZmlsZV9oYXNoX2VudGVyKTogRGVjbGFyZSBpdC4KCgkqIGRlcC5oOiBEb2MgZml4LgoKVGh1IEp1bCAzMCAxNTo0MDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSGFuZGxlIHVzYWdlX2FuZF9leGl0IHdoZW4gYnVpbGRpbmcKCWxvbmcgb3B0aW9ucyB2ZWN0b3IuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBNYWtlIFJDUyBydWxlcyB1c2UgJChDSEVDS09VVCx2KS4KCShkZWZhdWx0X3ZhcmlhYmxlcyk6IERlZmluZSBDSEVDS09VVCx2IChoYWlyeSkuCgoJKiBtYWtlLmggWyFIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJc3lzX3NpZ2xpc3QgdG8gX3N5c19zaWdsaXN0LgoKU3VuIEp1bCAyNiAxNjo1NjozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogTkVXUzogQWRkIGhlYWRlciBhbmQgdGFpbCBjb3B5cmlnaHQgaW5mbyBsaWtlIEVtYWNzIE5FV1MuCgoJKiBtYWtlLmggW0FOU0lfU1RSSU5HXTogRG9uJ3QgI2RlZmluZSBpbmRleCwgcmluZGV4LCBiY21wLCBiemVybywKCWJjb3B5IGlmIGFscmVhZHkgI2RlZmluZSdkLgoJW1NURENfSEVBREVSU10gKHFzb3J0LCBhYm9ydCwgZXhpdCk6IERlY2xhcmUgaGVyZS4KCVshIF9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVhdOiBOb3QgaGVyZS4KCgkqIG1ha2UuaCBbX0FJWF06ICNwcmFnbWEgYWxsb2NhIGZpcnN0IHRoaW5nLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogU2V0IHRoZSBjb21tYW5kX3N0YXRlIHRvIGNzX3J1bm5pbmcKCXdoZW4gd2UgcXVldWUgYSBqb2Igb24gd2FpdGluZ19qb2JzLgoKRnJpIEp1bCAyNCAwMjoxNjoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBVc2UgIiIgaW5zdGVhZCBvZiBuaWwKCWZvciBlbXB0eSB2YWx1ZS4KClRodSBKdWwgMjMgMjI6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNy4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoLnR5cGUpOiBBZGQgYWx0ZXJuYXRpdmUgdXNhZ2VfYW5kX2V4aXQuCgkoY29tbWFuZF9zd2l0Y2hlcyk6IEFkZCAtaC8tLWhlbHAuCgpUaHUgSnVsIDE2IDE0OjI3OjUwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogSW5jbHVkZSBORVdTLCBub3QgQ0hBTkdFUy4KCSogUkVBRE1FLnRlbXBsYXRlOiBNZW50aW9uIE5FV1MuCgkqIENIQU5HRVM6IFJlbmFtZWQgdG8gTkVXUy4KCgkqIG1haW4uYyBbISBTVERDX0hFQURFUlNdIFtzdW5dOiBEb24ndCBkZWNsYXJlIGV4aXQuCgpUdWUgSnVsIDE0IDE4OjQ4OjQxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgLW8gZmlsZXMnIGNvbW1hbmRfc3RhdGVzIHRvIGNzX2ZpbmlzaGVkLgoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IERlY3JlbWVudCBudW1fcGF0dGVybl9ydWxlcwoJd2hlbiB0b3NzaW5nIGEgcnVsZS4KCgkqIG1haW4uYyAobWFpbik6IFVzZSBhbGxvY2Egb25seSBpbiBzaW1wbGUgbG9jYWwgdmFyIGFzc2lnbm1lbnQsCglmb3IgYnJhaW5kZWFkIFNHSSBjb21waWxlci4KCgkqIHJ1bGUuYyAocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBCYXJmIGlmIG51bV9wYXR0ZXJuX3J1bGVzIGlzCglpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbnVtYmVyIGNvbXB1dGVkIHdoZW4gbGlzdGluZyB0aGVtLgoKTW9uIEp1bCAxMyAxNzo1MTo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IEZvciAkPyBhbmQgJF4gZWx0cyB0aGF0IGFyZSBhcmNoaXZlCgltZW1iZXIgcmVmcywgdXNlIG1lbWJlciBuYW1lIG9ubHkuCgpGcmkgSnVsIDEwIDAwOjA1OjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUuZXhwb3J0KTogQWRkIG5ldyBhbHRlcm5hdGl2ZSB2X2lmc2V0LgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBDaGVjayBmb3IgaXQuCgkoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBTZXQgaXQgZm9yIE1BS0VGSUxFUy4KClRodSBKdWwgIDkgMjE6MjQ6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogUmVtb3ZlIGdldGxvYWRhdmcubzsgJChleHRyYXMpIGdldHMgaXQuCgkocmVtb3RlLm8pOiBVc2UgJChzcmNkaXIpL3JlbW90ZS5jLCBub3QgJHJlbW90ZS5jPC4KCShkaXN0Y2xlYW4sIG1vc3RseWNsZWFuKTogTmV3IHRhcmdldHMuCgpUdWUgSnVsICA3IDE5OjEyOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTYuCgoJKiBjb21wYXRNYWtlZmlsZSAoY29uZmlnLnN0YXR1cyk6IFJlbW92ZSBydWxlLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9iKTogRnJlZSBDIGFmdGVyIHVzaW5nIEMtPmZpbGUsIG5vdCBiZWZvcmUuCgpTYXQgSnVsICA0IDIwOjUxOjQ5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21tYW5kcy5jLCBqb2IuYywgbWFpbi5jLCBtYWtlLmgsIHJlbW90ZS1jc3Rtcy5jOiBVc2UgI2lmZGVmCglIQVZFXyogaW5zdGVhZCBvZiAjaWZuZGVmICpfTUlTU0lORy4KCSogY29uZmlndXJlLmluOiBVc2UgQUNfSEFWRV9GVU5DUyBpbnN0ZWFkIG9mIEFDX01JU1NJTkdfRlVOQ1MgKGdvbmUpLgoKVGh1IEp1bCAgMiAxODo0Nzo1MiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogbWFrZWxldmVsPjAgb3IgLUMgaW1wbGllcyAtdy4KClR1ZSBKdW4gMzAgMjA6NTA6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYywgam9iLmMsIGZ1bmN0aW9uLmM6IERvbid0ICNpbmNsdWRlIDxlcnJuby5oPi4KCW1ha2UuaDogRG8gaXQgaGVyZSBpbnN0ZWFkLgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKTogRG9uJ3QgZGVjbGFyZSBlcnJuby4KClRodSBKdW4gMjUgMTc6MDY6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhci5aKTogRGVwZW5kIG9uIElOU1RBTEwsIGNvbmZpZ3VyZS5pbi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSk6IElmIGNvbW1hbmRzIG9yIGRlcHMgYXJlIHJ1bm5pbmcgYWZ0ZXIKCXVwZGF0ZV9maWxlXzEgcmV0dXJucywgYnJlYWsgb3V0IG9mIHRoZSA6OiBydWxlICgtPnByZXYpIGxvb3AgYW5kCglqdXN0IHJldHVybi4KCgkqIGpvYi5jCShqb2JfbmV4dF9jb21tYW5kKTogTmV3IGZ1bmN0aW9uOyBjb2RlIGZyb20gc3RhcnRfam9iLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogUmVuYW1lZCBmcm9tIHN0YXJ0X2pvYi4gIENhbGwgam9iX25leHRfY29tbWFuZAoJYW5kIHJlY3Vyc2UgZm9yIGVtcHR5IGNvbW1hbmQgbGluZXMgYW5kIC1uLgoJKHN0YXJ0X3dhaXRpbmdfam9iKTogQ2FsbCBzdGFydF9qb2JfY29tbWFuZCwgbm90IHN0YXJ0X2pvYi4KCShuZXdfam9iKTogQ2FsbCBqb2JfbmV4dF9jb21tYW5kIHRvIHByaW1lIHRoZSBjaGlsZCBzdHJ1Y3R1cmUsIGFuZAoJdGhlbiBjYWxsIHN0YXJ0X3dhaXRpbmdfam9iLgoJKHJlYXBfY2hpbGRyZW4pOiBVc2Ugam9iX25leHRfY29tbWFuZCBhbmQgc3RhcnRfam9iX2NvbW1hbmQuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDYWxsIHN0YXJ0X3JlbW90ZV9qb2JfcCBoZXJlLCBhbmQgc3RvcmUgaXRzCglyZXN1bHQgaW4gQy0+cmVtb3RlLiAgSWYgemVybywgY2hlY2sgdGhlIGxvYWQgYXZlcmFnZSBhbmQKCW1heWJlIHB1dCBDIG9uIHdhaXRpbmdfam9icy4KCShzdGFydF9qb2JfY29tbWFuZCk6IFRlc3QgQ0hJTEQtPnJlbW90ZSByYXRoZXIgdGhhbiBjYWxsaW5nCglzdGFydF9yZW1vdGVfam9iX3AuICBEb24ndCBkbyBsb2FkIGF2ZyBjaGVja2luZyBhdCBhbGwgaGVyZS4KCgkqIG1haW4uYyAobWFpbik6IERvbid0IGhhbmRsZSBTSUdJTEwsIFNJR0lPVCwgU0lHRU1ULCBTSUdCVVMsCglTSUdTRUdWLCBTSUdGUEUgb3IgU0lHVFJBUC4KCgkqIGNvbXBhdE1ha2VmaWxlIChnbG9iL2xpYmdsb2IuYSk6IERvbid0IHBhc3Mgc3JjZGlyIHRvIHN1Yi1tYWtlLgoJY29uZmlndXJlIHdpbGwgc2V0IGl0IGluIGdsb2IvTWFrZWZpbGUuCgpXZWQgSnVuIDI0IDE5OjQwOjM0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkaXIuYyBbRElSRU5UXSAoZGlyZWN0KTogRG9uJ3QgZGVmaW5lIHRvIGRpcmVudC4KCVshIERJUkVOVF0gKGRpcmVjdCk6IERlZmluZSB0byBkaXJlbnQuCgkoZGlyX2ZpbGVfZXhpc3RzX3ApOiBVc2Ugc3RydWN0IGRpcmVudCBpbnN0ZWFkIG9mIHN0cnVjdCBkaXJlY3QuCgoJKiBtYWtlLmggKGdldGN3ZCk6IE5vIHNwYWNlIGJldHdlZW4gbWFjcm8gYW5kICggZm9yIGFyZ3MhCgoJKiBqb2IuYyAoc3RhcnRfam9iKTogRG9uJ3QgcHV0IHRoZSBqb2Igb24gd2FpdGluZ19qb2JzIGlmCglqb2Jfc2xvdHNfdXNlZD09MC4KCgkqIG1ha2UudGV4aW5mbyAoTWlzc2luZyk6IFNob3J0ZW5lZCB0aXRsZS4KClR1ZSBKdW4gMjMgMTg6NDI6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBQcmludCAicm0iIGNvbW1hbmRzIHVuZGVyIC1uLgoKTW9uIEp1biAyMiAxNjoyMDowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNS4KCkZyaSBKdW4gMTkgMTY6MjA6MjYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGFyc2Nhbi5jIFtNX1VOSVhdOiAjdW5kZWYgTV9YRU5JWC4KCldlZCBKdW4gMTcgMTc6NTk6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBQdXQgQCBwcmVmaXggb24gUkNTIGNtZHMuCgpUdWUgSnVuIDE2IDE5OjI0OjE3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2V0bG9hZGF2Zy5vKTogUmVtb3ZlZCBzcGVjaWFsIHJ1bGUuCgkoQ0ZMQUdTKTogRG9uJ3QgaW5jbHVkZSAkKGRlZmluZXMpLgoJKC5jLm8pOiBEZWZpbmUgc3VmZml4IHJ1bGUuCgkoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIENQUEZMQUdTPSQoZGVmaW5lcykgdG8gc3VibWFrZS4KCShHRVRPUFRfU1JDLCBzcmNzLCB0YWdzcmNzKTogUHJlZml4IGZpbGVzIHdpdGggJChzcmNkaXIpLy4KCgkqIGFyc2Nhbi5jIChhcl9uYW1lX2VxdWFsKTogTW92ZWQgbG9jYWwgdmFycyBpbnNpZGUgI2lmJ2QgYmxvY2suCgoJKiBtYWtlLmggKG1heCk6IFJlbW92ZWQuCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogRG9uJ3QgdXNlIGl0LgoKCSogY29tcGF0TWFrZWZpbGUgKElOU1RBTEwpOiBEZWZpbmUuCgkoTWFrZWZpbGUpOiBOZXcgcnVsZSB0byBtYWtlIGZyb20gTWFrZWZpbGUuaW4uCgkoc3JjZGlyKTogRGVmaW5lLgoJKFZQQVRIKTogRGVmaW5lLgoJKGdldGxvYWRhdmcubywgcmVtb3RlLm8pOiBVc2UgYXV0b2NvbmYgJGZvbzwgaGFjay4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IFJlbW92ZWQgcmV0dXJuLgoKTW9uIEp1biAxNSAxNzo0Mjo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE0LgoKCSogbWFrZS50ZXhpbmZvIChTdW1tYXJ5KTogTmV3IG5vZGUuCgkoU3BlY2lhbCBUYXJnZXRzKTogTWVudGlvbiAuRVhQT1JUX0FMTF9WQVJJQUJMRVMgaGVyZS4KCgkqIHZhcmlhYmxlLmMgKG1heCk6IE1vdmVkIHRvIG1ha2UuaC4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzLCBzcmNzKTogQWRkZWQgYXIgJiBhcnNjYW4uCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBOZXcgZnVuY3Rpb24sIDJuZCBoYWxmIG9mIG5ld19qb2IuCgkobmV3X2pvYik6IENhbGwgaXQuCgkoc3RhcnRfd2FpdGluZ19qb2JzKTogTmV3IGZ1bmN0aW9uLgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBDYWxsIHN0YXJ0X3dhaXRpbmdfam9icyBhdCB0aGUgdG9wCglvZiB0aGUgbWFpbiBsb29wLgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcywgc3Jjcyk6IFJlbW92ZWQgbG9hZCwgYWRkZWQgZ2V0bG9hZGF2Zy4KCkZyaSBKdW4gMTIgMTk6MzM6MTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IE5ldyBmdW5jdGlvbi4gIFVzZXMgZ2V0bG9hZGF2Zy4KCSh3YWl0aW5nX2pvYnMpOiBOZXcgdmFyaWFibGUuCgkoc3RhcnRfam9iKTogRG9uJ3QgY2FsbCB3YWl0X3RvX3N0YXJ0X2pvYi4gIEluc3RlYWQsIGlmCglsb2FkX3Rvb19oaWdoIHJldHVybnMgbm9uemVybywgYWRkIHRoZSBjaGlsZCB0byB0aGUKCWB3YWl0aW5nX2pvYnMnIGNoYWluIGFuZCByZXR1cm4gd2l0aG91dCBzdGFydGluZyB0aGUgam9iLgoKVGh1IEp1biAxMSAwMDowNToyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGV4cGFuZC5jICh2YXJpYWJsZV9idWZmZXJfb3V0cHV0KTogTWFkZSBnbG9iYWwgYWdhaW4uCgkqIHZhcmlhYmxlLmg6IEFuZCBkZWNsYXJlIGl0LgoKCSogYXJzY2FuLmMgKFBPUlRBUik6IERlZmluZSBmb3IgYWxsIHN5c3RlbXMgaWYgUE9SVDVBUiBpcyBub3QgZGVmaW5lZC4KCShBUl9OQU1FTEVOLCBBUl9UUkFJTElOR19TTEFTSCk6IFJlbW92ZWQuCgkoYXJfc2Nhbik6IERvbid0IHVzZSBpdC4gIERvbid0ICNpZmRlZiBBUl9UUkFJTElOR19TTEFTSDsganVzdCBsb29rCglmb3IgYSBzbGFzaCBpbiB0aGUgYXJjaGl2ZSBhdCBydW4gdGltZS4KCShhcl9uYW1lX2VxdWFsKTogUmV3cm90ZSAubyBoYWNraW5nIHRvIG5vdCB1c2UgQVJfTkFNRUxFTiwgYW5kIHRvCgljb3BlIHdpdGggdHJhaWxpbmctc2xhc2ggYW5kIG5vbi10cmFpbGluZy1zbGFzaCBhcmNoaXZlcy4KCgkqIG1haW4uYyAobWFpbikgWyEgU0VUVkJVRl9SRVZFUlNFRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTR3IzIGV0IGFsLgoJW1NFVFZCVUZfUkVWRVJTRURdOiBBbHdheXMgYWxsb2NhdGUgYSBidWZmZXIgb3Vyc2VsdmVzLgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBVc2Ugc3lzbXAgY2FsbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChJTlNUQUxMX0RBVEEsIElOU1RBTExfUFJPR1JBTSk6IERlZmluZS4KCSgkKGJpbmRpcikvJChpbnN0bmFtZSksICQobWFuZGlyKS9tYWtlLiQobWFuZXh0KSk6IFVzZSB0aGVtLgoKCSogbWFrZS5oIFtIQVZFX1ZGT1JLX0hdOiAjaW5jbHVkZSA8dmZvcmsuaD4uCgkodmZvcmssIFZGT1JLX05BTUUpOiBEb24ndCBkZWZpbmUuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBVc2UgInZmb3JrIiBpbiBwbGFjZSBvZiBWRk9SS19OQU1FLgoKCSogbWFrZS5oIFtIQVZFX0xJTUlUU19ILCBIQVZFX1NZU19QQVJBTV9IXTogSWYgI2RlZmluZSdkLCAjaW5jbHVkZQoJdGhlIGVhY2ggZmlsZS4gIFJlYXJyYW5nZWQgUEFUSF9NQVggaGFja2luZy4KCSogam9iLmM6IFJlYXJyYW5nZWQgTkdST1VQU19NQVggaGFja2luZy4KCgkqIHJlbWFrZS5jIChmc3RhdCwgdGltZSk6IERvbid0IGRlY2xhcmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IFZhbHVlIGlzIEBERUZTQC4KCShMT0FETElCRVMpOiBWYWx1ZSBpcyBATElCU0AuCgkoZXh0cmFzKTogVmFsdWUgaXMgQExJQk9CSlNALgoJKEFSQ0hJVkVTLCBBUkNISVZFU19TUkMsIEFMTE9DQVNSQyk6IFJlbW92ZWQuCgkqIGFyc2Nhbi5jLCBhci5jOiBTdXJyb3VuZCBib2R5IHdpdGggI2lmbmRlZiBOT19BUkNISVZFUy4KCgkqIG1pc2MuYyBbISBIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGdldCppZC4KCgkqIG1ha2UuaCBbR0VUQ1dEX01JU1NJTkddOiBUZXN0IGluc3RlYWQgb2YgIVVTRyAmJiAhUE9TSVggZXQgYWwuCgkoZ2V0Y3dkKTogSnVzdCBkZWNsYXJlIGlmIHByZXNlbnQuICBJZiBub3QsIGRlY2xhcmUgYXMgYSBtYWNybwoJdXNpbmcgZ2V0d2QsIGFuZCBkZWNsYXJlIGdldHdkLgoJW1BBVEhfTUFYXSAoR0VUX1BBVEhfTUFYKTogI2RlZmluZSB0byBQQVRIX01BWC4KCSogbWFpbi5jIChtYWluLAlsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBVc2UgZ2V0Y3dkIGluc3RlYWQgb2YgZ2V0d2QuCgoJKiBtYWluLmMgKG1haW4pIFtTRVRMSU5FQlVGX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgoJKiBtYWtlLmggKFNJR0hBTkRMRVIsIFNJR05BTCk6IFJlbW92ZWQuCgkoUkVUU0lHVFlQRSk6IERlZmluZSBpZiBub3QgI2RlZmluZSdkLgoJKiBtYWluLmMgKG1haW4pOiBVc2Ugc2lnbmFsIGluIHBsYWNlIG9mIFNJR05BTC4KCgkqIG1haW4uYyBbU1lTX1NJR0xJU1RfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpIFtHRVRHUk9VUFNfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiBVU0cuCglbSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiBQT1NJWCB0byBub3QgZGVjbCBnZXRncm91cHMuCgoJKiBtYWluLmMgWyEgSEFWRV9VTklTVERfSF06IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBjaGRpci4KCVshIFNURENfSEVBREVSU106IFRlc3QgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbCBleGl0ICYgYXRvZi4KCgkqIGpvYi5jIChjaGlsZF9oYW5kbGVyKSwgY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogUmV0dXJuCglSRVRTSUdUWVBFIGluc3RlYWQgb2YgaW50LgoJKiBtYWluLmMgKG1haW4pOiBEZWNsYXJlIGZhdGFsX2Vycm9yX3NpZ25hbCBhbmQgY2hpbGRfaGFuZGxlciBoZXJlCgl0byByZXR1cm4gUkVUU0lHVFlQRTsgcmVtb3ZlZCB0b3AtbGV2ZWwgZGVjbCBvZiBmb3JtZXIuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpLCBqb2IuYyAodW5ibG9ja19zaWdzLCBzdGFydF9qb2IpLAoJbWFpbi5jIFtTSUdTRVRNQVNLX01JU1NJTkddOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiBVU0cuCgpXZWQgSnVuIDEwIDIyOjA2OjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW0hBVkVfV0FJVFBJRF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCVshIEhBVkVfVU5JU1REX0hdOiBUZXN0IHRoaXMgaW5zdGVhZCBvZiAhUE9TSVggdG8gZGVjbGFyZSBtaXNjIGZucy4KCShHSURfVCk6IERvbid0ICNkZWZpbmUuCgkoc2VhcmNoX3BhdGgpOiBVc2UgZ2lkX3QgaW5zdGVhZCBvZiBHSURfVC4KCVtHRVREVEFCTEVTSVpFX01JU1NJTkcsIFNZU19TSUdMSVNUX01JU1NJTkcsIERVUDJfTUlTU0lOR106IFRlc3QKCXRoZXNlIGluZGl2aWR1YWxseSBpbnN0ZWFkIG9mIFVTRyBmb3IgYWxsLgoJKiBtYWtlLmggKGN0aW1lKTogRG9uJ3QgZGVjbGFyZS4gICNpbmNsdWRlIHRpbWUuaCBpbnN0ZWFkLgoJW0hBVkVfVU5JU1REX0hdOiAjaW5jbHVkZSA8dW5pc3RkLmg+IGFuZCAjZGVmaW5lIFBPU0lYICNpZmRlZgoJX1BPU0lYX1ZFUlNJT04uCgkqIGRpci5jIFtfX0dOVV9MSUJSQVJZX19dIChEX05BTUxFTik6IERlZmluZSB0byB1c2UgZF9uYW1sZW4gbWVtYmVyLgoJKiBtYWtlLmggW05FRURfTUVNT1JZX0hdOiBPbmx5IGluY2x1ZGUgbWVtb3J5LmggI2lmZGVmIHRoaXMuCgoJKiBhcnNjYW4uYzogUmVtb3ZlZCAjaWZkZWYgbWVzcyBhYm91dCBzdHJpbmcuaCBldCBhbC4KCUp1c3QgI2luY2x1ZGUgbWFrZS5oIGluc3RlYWQuCgkqIG1ha2UuaCAoZnN0YXQsIGF0b2wpOiBEZWNsYXJlLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogRG9uJ3QgdXNlIHNpZ21hc2sgdG8gY2hlY2sgZm9yCglwcm9wYWdhdGVkIHNpZ25hbHM7IHVzZSB8fHMgaW5zdGVhZC4KCShQUk9QQUdBVEVEX1NJR05BTF9NQVNLKTogUmVtb3ZlZC4KCShmYXRhbF9lcnJvcl9zaWduYWwpIFtQT1NJWF06IFVzZSBzaWdwcm9jbWFzayBpbiBwbGFjZSBvZiBzaWdzZXRtYXNrLgoKCSogdmFyaWFibGUuYyAodmFyaWFibGVfYnVmZmVyLCB2YXJpYWJsZV9idWZmZXJfbGVuZ3RoLAoJaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQsIHZhcmlhYmxlX291dHB1dCk6IE1vdmVkIHRvIGV4cGFuZC5jOwoJbWFkZSBhbGwgc3RhdGljLgoJKHN0cnVjdCBvdXRwdXRfc3RhdGUsIHNhdmVfdmFyaWFibGVfb3V0cHV0LAoJcmVzdG9yZV92YXJpYWJsZV9vdXRwdXQpOiBSZW1vdmVkLgoJKiBleHBhbmQuYyAoaW5pdGlhbGl6ZV92YXJpYWJsZV9vdXRwdXQpOiBQdXQgYSBOVUwgYXQgdGhlIGJlZ2lubmluZwoJb2YgdGhlIG5ldyBidWZmZXIgYWZ0ZXIgYWxsb2NhdGluZyBpdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kX2Zvcl9maWxlKTogRG9uJ3QgdXNlCgl7c2F2ZSxyZXN0b3JlfV92YXJpYWJsZV9vdXRwdXQuICBEbyBpdCBieSBoYW5kIGluc3RlYWQsIGtlZXBpbmcKCXN0YXRlIG9uIHRoZSBzdGFjayBpbnN0ZWFkIG9mIG1hbGxvYydpbmcgaXQuCgkoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCk6IFJlbW92ZWQuCgkqIHZhcmlhYmxlLmggKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQpOiBEZWZpbmUgaGVyZSBhcyBtYWNyby4KCSh2YXJpYWJsZV9idWZmZXJfb3V0cHV0LCBpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCwKCXNhdmVfdmFyaWFibGVfb3V0cHV0LCByZXN0b3JlX3ZhcmlhYmxlX291dHB1dCk6IFJlbW92ZWQgZGVjbHMuCgoJKiByZWFkLmMgKGNvbmRpdGlvbmFsX2xpbmUpOiBGb3IgYW4gaWYgY21kLCBpZiBhbnkgZWx0IG9mIHRoZQoJY29uZGl0aW9uYWxzIHN0YWNrIGlzIGlnbm9yaW5nLCBqdXN0IHB1c2ggYSBuZXcgbGV2ZWwgdGhhdCBpZ25vcmVzCglhbmQgcmV0dXJuIDE7IGRvbid0IGV2YWx1YXRlIHRoZSBjb25kaXRpb24uCgpUaHUgSnVuICA0IDIxOjAxOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogUHV0ICNpZmRlZidzIGFyb3VuZCBmcm9iYmluZyBTSUdTWVMgYW5kIFNJR0JVUy4KCgkqIGpvYi5jIChnZXRkdGFibGVzaXplKTogRG9uJ3QgZGVjbGFyZSBvciAjZGVmaW5lIGlmIGFscmVhZHkgI2RlZmluZSdkLgoKV2VkIEp1biAgMyAyMzo0MjozNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGZpbGUuYyAoc25hcF9kZXBzKTogSWYgYC5FWFBPUlRfQUxMX1ZBUklBQkxFUycgaXMgYSB0YXJnZXQsIHNldAoJZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIG1ha2UudGV4aW5mbyAoVmFyaWFibGVzL1JlY3Vyc2lvbik6IERvY3VtZW50IC5FWFBPUlRfQUxMX1ZBUklBQkxFUy4KClR1ZSBKdW4gIDIgMjE6MDg6MzUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTMuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBDYWxjdWxhdGUgbGVuZ3RoIGZvciBeRCBhbmQgP0QKCWluZGl2aWR1YWxseSwgbWFraW5nIHN1cmUgdG8gZ2l2ZSB0aGVtIGF0IGxlYXN0IGVub3VnaCBzcGFjZSBmb3IgIi4vIi4KCgkqIG1ha2UuaCBbQ1JBWV06ICNkZWZpbmUgc2lnbmFsIHRvIGJzZHNpZ25hbC4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtDUkFZXTogRGVmaW5lIFBDLCBTRUdMRFIsCglDRjc3UFBGTEFHUywgQ0Y3N1BQLCBDRlQsIENGLCBhbmQgRkMuCgoJKiBhcnNjYW4uYyAoQVJfSERSX1NJWkUpOiBEZWZpbmUgdG8gc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyKSwgaWYgaXQKCXdhc24ndCBkZWZpbmVkIGJ5IDxhci5oPi4KClRodSBNYXkgMjggMDA6NTY6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTIuCgpUdWUgTWF5IDI2IDAxOjI2OjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogSW5pdGlhbGl6ZSBMQVNUUlVMRSB0byBuaWwsIG5vdAoJcGF0dGVybl9ydWxlcy4KCk1vbiBNYXkgMjUgMTk6MDI6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEluaXRpYWxpemUgYWxsIHRoZSBsb25nX29wdGlvbiBlbHQgbWVtYmVycy4KClRodSBNYXkgMjEgMTY6MzQ6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoVGV4dCBGdW5jdGlvbnMpOiBDb3JyZWN0IGZpbHRlci1vdXQgZGVzY3JpcHRpb24uCgpUdWUgTWF5IDE5IDIwOjUwOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKHJlYWxjbGVhbik6IERvbid0IHJlbW92ZSBiYWNrdXAgZmlsZXMuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEFsbG9jYXRlIEFSR0MrMSBlbHRzIGluIGBvdGhlcl9hcmdzJy4KClN1biBNYXkgMTcgMTY6Mzg6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjExLgoKVGh1IE1heSAxNCAxNjo0MjozMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERvbid0IGRpZSBpZiB3YWl0IHJldHVybnMgRUlOVFIuCgpXZWQgTWF5IDEzIDE4OjI4OjI1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBBbHdheXMgcnVuIHRoZSBuZXh0IGNvbW1hbmQgZm9yIGEKCXN1Y2Nlc3NmdWwgdGFyZ2V0LiAgSWYgd2UgYXJlIGdvaW5nIHRvIGRpZSwgd2UgZG9uJ3Qgd2FudCB0byBsZWF2ZQoJdGhlIHRhcmdldCBwYXJ0aWFsbHkgbWFkZS4KClR1ZSBNYXkgMTIgMDA6Mzk6MTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZnRlciBsb29wLCBpZiB3ZSBvbmx5CgloYXZlIG9uZSB3b3JkLCBjaGVjayBpdCBmb3IgYmVpbmcgYSBzaGVsbCBjb21tYW5kLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBBbGxvY2F0ZSBBUkdDIHNsb3RzIGluIG90aGVyX2FyZ3MgdG8KCWJlZ2luIHdpdGgsIHNvIHdlIG5ldmVyIG5lZWQgdG8gd29ycnkgYWJvdXQgZ3Jvd2luZyBpdC4KCUlmIHdlIGdldCBhIG5vbi1vcHRpb24gYXJnIGFuZCBQT1NJWExZX0NPUlJFQ1QgaXMgaW4gdGhlCgllbnZpcm9ubWVudCwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLiAgQWZ0ZXIgdGhlIGxvb3AsIGFkZCBhbGwgcmVtYWluaW5nCglhcmdzIHRvIG90aGVyX2FyZ3MgbGlzdC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRm9yIHBvc2l0aXZlX2ludCBhbmQgZmxvYXRpbmcgc3dpdGNoZXMKCXdoZW4gb3B0YXJnIGlzIG5pbCwgdXNlIG5leHQgYXJnIGlmIGl0IGxvb2tzIHJpZ2h0IChzdGFydCB3aXRoIGEKCWRpZ2l0LCBvciBtYXliZSBkZWNpbWFsIHBvaW50IGZvciBmbG9hdGluZykuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEFsd2F5cyBzZXQgU0hFTEwgdG8KCWRlZmF1bHQgaWYgaXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBTZXQgaXRzIGV4cG9ydCBiaXQuCgkqIG1ha2UudGV4aW5mbyAoRW52aXJvbm1lbnQpOiBEb2N1bWVudCBjaGFuZ2UuCgpNb24gTWF5IDExIDAwOjMyOjQ2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMC4KCgkqIGNvbXBhdE1ha2VmaWxlICh0YWdzLCBUQUdTKTogVXNlIHZhcnMgZm9yIGNtZHMuCgkoRVRBR1MsIENUQUdTKTogRGVmaW5lLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJZiBhIHN3aXRjaGVzIGVsdCBoYXMgYSBuaWwgbG9uZ19uYW1lLAoJbWFrZSB0aGUgbG9uZyBvcHRpb24gbmFtZSBlbHQgYmUgIiIuCglGaXhlZCBsb29wIHRvIG5vdCBpZ25vcmUgYWxsIHRoZSBvcHRpb25zLgoKCSogbWFrZS50ZXhpbmZvIChPcHRpb24gU3VtbWFyeSk6IEFkZGVkIGxvbmcgb3B0aW9ucy4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBDaGFuZ2VkIC1tJ3MgZGVzY3JpcHRpb24gdG8gIi1iIi4KCShkZWNvZGVfc3dpdGNoZXMpOiBXaGVuIHByaW50aW5nIHRoZSB1c2FnZSBtZXNzYWdlLCBkb24ndCBwcmludAoJc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIHN0YXJ0IHdpdGggLS4KCVdoZW4gY29uc3RydWN0aW5nIHRoZSBsaXN0IG9mIG5hbWVzIGZvciBzd2l0Y2ggLUMsIHNlYXJjaCB0aGUKCXN3aXRjaGVzIHZlY3RvciBmb3Igc3dpdGNoZXMgd2hvc2UgZGVzY3JpcHRpb25zIGFyZSAiLUMiLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IENhbGwgLVMgLS1uby1rZWVwLWdvaW5nLCBub3QgLS1kb250LWtlZXAtZ29pbmcuCglDYWxsIC1JIC0taW5jbHVkZS1kaXIsIG5vdCAtLWluY2x1ZGUtcGF0aC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkZWQgLS1uZXcgPT0gLVcsIC0tYXNzdW1lLW5ldyA9PSAtVywKCS0tYXNzdW1lLW9sZCA9PSAtbywgLS1tYXgtbG9hZCA9PSAtbCwgLS1kcnktcnVuID09IC1uLCAtLXJlY29uID09IC1uLAoJLS1tYWtlZmlsZSA9PSAtZi4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBSZW1vdmVkIGJvZ3VzICJzaWxlbnQiIGVsdC4KCShsb25nX29wdGlvbl9hbGlhc2VzKTogRGVmaW5lIG5ldyB2YXIuCgkoZGVjb2RlX3N3aXRjaGVzKTogQWRkIGxvbmdfb3B0aW9uX2FsaWFzZXMgb250byB0aGUgZW5kIG9mIHRoZSBsb25nCglvcHRpb25zIHZlY3RvciBjcmVhdGVkIGZvciBnZXRvcHRfbG9uZy4KCUxvb2sgdGhyb3VnaCBsb25nX29wdGlvbl9hbGlhc2VzIGZvciBleHRyYSBuYW1lcyB0byBsaXN0CglpbiB1c2FnZSBtZXNzYWdlLgoKU2F0IE1heSAgOSAwMDoyMTowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogRml4ZWQgdG8gcHJvcGVybHkgbm90IHByaW50IHRoZQoJbGVhdmluZyBtZXNzYWdlIHdoZW4gd2UgaGF2ZW4ndCBwcmludGVkIHRoZSBlbnRlcmluZyBtZXNzYWdlLgoKRnJpIE1heSAgOCAyMTo1NTozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoKTogQWRkZWQgZWx0cyBgbG9uZ19uYW1lJywKCWBkZXNjcmlwdGlvbicsIGFuZCBgYXJnZGVzYycuCgkoc3dpdGNoZXMpOiBBZGRlZCBpbml0aWFsaXplcnMgZm9yIG5ldyBtZW1iZXJzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFJld3JpdHRlbiB0byB1c2UgZ2V0b3B0X2xvbmcuCgkqIGNvbXBhdE1ha2VmaWxlIChHRVRPUFQsIEdFVE9QVF9TUkMpOiBEZWZpbmUuCgkob2Jqcywgc3Jjcyk6IEluY2x1ZGUgdGhlbS4KCgkqIGpvYi5jIChjaGlsZF9kaWVkKTogUmVuYW1lZCB0byBkZWFkX2NoaWxkcmVuOyBtYWRlIHN0YXRpYy4KCShjaGlsZF9oYW5kbGVyKTogSW5jcmVtZW50IGRlYWRfY2hpbGRyZW4gaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkX2RpZWQuCgkocmVhcF9jaGlsZHJlbik6IERlY3JlbWVudCBkZWFkX2NoaWxkcmVuIGluc3RlYWQgb2YgY2xlYXJpbmcKCWNoaWxkX2RpZWQuICBUaGUgcG9pbnQgb2YgYWxsIHRoaXMgaXMgdG8gYXZvaWQgcHJpbnRpbmcgIndhaXRpbmcKCWZvciB1bmZpbmlzaGVkIGpvYnMiIHdoZW4gd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBibG9jay4KCVRoaXMgaGFwcGVuZWQgd2hlbiBtdWx0aXBsZSBTSUdDSExEcyBiZWZvcmUgcmVhcF9jaGlsZHJlbiB3YXMgY2FsbGVkLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBJZiBFUlIgaXMgc2V0LCBzbyB3ZSBkb24ndCBjYWxsIHN0YXJ0X2pvYgoJb24gdGhlIGNoaWxkIGJlaW5nIHJlYXBlZCwgaW5zdGVhZCBzZXQgaXRzIGNvbW1hbmRfc3RhdGUgdG8KCWNzX2ZpbmlzaGVkLgoJKHJlYXBfY2hpbGRyZW4sIGNoaWxkX2hhbmRsZXIsIG5ld19qb2IpOiBJIGFkZGVkIHNldmVyYWwKCWRlYnVnZ2luZyBwcmludGYncyB3aGlsZSBmaXhpbmcgdGhpcy4gIEkgbGVmdCB0aGVtIGluIGlmIChkZWJ1Z19mbGFnKQoJYmVjYXVzZSB0aGV5IG1heSBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGlzIHN0dWZmIGFnYWluLgoKV2VkIE1heSAgNiAyMjowMjozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiB2X2V4cG9ydCBpcyBub3QgMS4KCk1vbiBNYXkgIDQgMTc6Mjc6MzcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi45LgoKCSogdmFyaWFibGUuYyAoZXhwb3J0X2FsbF92YXJpYWJsZXMpOiBOZXcgdmFyaWFibGUuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogRXhwb3J0IHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JyBtZW1iZXIgaXMKCXZfZGVmYXVsdCBpZiBleHBvcnRfYWxsX3ZhcmlhYmxlcyBpcyBzZXQgYW5kIHRoZWlyIG5hbWVzIGFyZSBiZW5pZ24uCgkqIHZhcmlhYmxlLmg6IERlY2xhcmUgZXhwb3J0X2FsbF92YXJpYWJsZXMuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IElmIGV4cG9ydCBvciB1bmV4cG9ydCBpcyBnaXZlbiB3aXRoIG5vCglhcmdzLCBzZXQgb3IgY2xlYXIgZXhwb3J0X2FsbF92YXJpYWJsZXMsIHJlc3BlY3RpdmVseS4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IEV4Y2x1ZGUgTUFLRUxFVkVMIGluIHRoZSBsb29wLAoJc28gaXQgaXNuJ3QgZHVwbGljYXRlZCB3aGVuIHdlIGFkZCBpdCBhdCB0aGUgZW5kLgoKU3VuIE1heSAgMyAxNzo0NDo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi44LgoKCSogdmFyaWFibGUuaCAoc3RydWN0IHZhcmlhYmxlKTogQWRkZWQgbmV3IG1lbWJlciBgZXhwb3J0Jy4KCSogdmFyaWFibGUuYyAoZGVmaW5lX3ZhcmlhYmxlX2luX3NldCk6IEluaXRpYWxpemUgaXQgdG8gdl9kZWZhdWx0LgoJKHRhcmdldF9lbnZpcm9ubWVudCk6IERvbid0IGNoZWNrIGZvciAuTk9FWFBPUlQuCglFeHBvcnQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnIG1lbWJlciBpcyB2X2RlZmF1bHQgYW5kIHRoYXQgd291bGQKCWhhdmUgYmVlbiBleHBvcnRlZCB1bmRlciAuTk9FWFBPUlQsIGFuZCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcKCW1lbWJlciBpcyB2X2V4cG9ydC4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IFJldHVybiB0aGUgdmFyaWFibGUgZGVmaW5lZC4KCSogdmFyaWFibGUuaCAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBDaGFuZ2VkIGRlY2wuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlY29nbml6ZSBgZXhwb3J0JyBhbmQgYHVuZXhwb3J0JyBkaXJlY3RpdmVzLgoKRnJpIE1heSAgMSAxMTozOTozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFJldmVyc2VkIGFyZ3MgdG8gc2lnYWRkc2V0LgoKVGh1IEFwciAzMCAxNzozMzozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtQT1NJWCB8fCAhVVNHXSAodW5ibG9ja19zaWdzKTogTmV3IGZuLgoJKHN0YXJ0X2pvYik6IEJsb2NrIHNpZ25hbHMgYmVmb3JlIGZvcmtpbmcuCgkobmV3X2pvYik6IFVuYmxvY2sgc2lnbmFscyBhZnRlciBwdXR0aW5nIHRoZSBuZXcgY2hpbGQgb24gdGhlIGNoYWluLgoJKiBtYWluLmMgKG1haW4pIFtQT1NJWF06IFVzZSBzaWdzZXRfdCBmYXRhbF9zaWduYWxfc2V0IGluc3RlYWQgb2YKCWludCBmYXRhbF9zaWduYWxfbWFzay4KCgkqIGxvYWQuYyBbc2dpXSAoTERBVl9DVlQpOiBEZWZpbmUuCgpXZWQgQXByIDI5IDE3OjE1OjU5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi43LgoKCSogbG9hZC5jIChsb2FkX2F2ZXJhZ2UpIFtzZ2ldOiBDbGVhciB0aGUgaGlnaCBiaXQgb2YgdGhlIGFkZHJlc3MKCWZyb20gdGhlIHN5bWJvbCB0YWJsZSBiZWZvcmUgbG9va2luZyBpdCB1cCBpbiBrbWVtLgoKCSogbWlzYy5jIChmYXRhbCwgbWFrZWZpbGVfZmF0YWwpOiBQdXQgKioqIGluIGZhdGFsIGVycm9yIG1lc3NhZ2VzLgoJKHJlbWFrZV9maWxlKTogTm8gbG9uZ2VyIG5lZWRlZCBpbiBtZXNzYWdlIGhlcmUuCgoJKiBtYWluLmMgKGRpZSk6IENhbGwgcmVhcF9jaGlsZHJlbiB3aXRoIEJMT0NLPT0xLgoKVHVlIEFwciAyOCAyMDo0NDozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGZyZWVydWxlKTogRG9uJ3Qgc2V0IExBU1RSVUxFLT5uZXh0IGlmIExBU1RSVUxFIGlzIG5pbC4KClN1biBBcHIgMjYgMTU6MDk6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IEluaXRpYWxpemUgTEFTVFJVTEUgdG8gbmlsLAoJbm90IHRvIGhlYWQgb2YgY2hhaW4uICBFeHRyYWN0IG5leHQgcHRyIGJlZm9yZSB3ZSBtaWdodCBkbwoJZnJlZXJ1bGUsIGFuZCB1c2UgdGhhdCBmb3IgbmV4dCBpdGVyYXRpb24uCgkoZnJlZXJ1bGUpOiBTdGlsbCBkbyBuZXh0IHB0ciBmcm9iYmluZyBpZiBMQVNUUlVMRSBpcyBuaWwuCgpUdWUgQXByIDIxIDAzOjE2OjI5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogUmVtb3ZlZCBleHRyYSAlcyBmcm9tIGVycm9yIG1zZyBmb3JtYXQuCgoJKiBWZXJzaW9uIDMuNjIuNi4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3Qgc3RhcnQgbGF0ZXIgY29tbWFuZHMgaW4gYSBzZXF1ZW5jZQoJaWYgRVJSIGlzIG5vbnplcm8uCgoJKiBqb2IuYyAobmV3X2pvYik6IEFsd2F5cyBjYWxsIHJlYXBfY2hpbGRyZW4gd2l0aCBCTE9DSz09MCBmaXJzdCB0aGluZy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogTmV3IGZ1bmN0aW9uOyB3b3JrIHRoYXQgdXNlZCB0byBiZSBkb25lIGluCgljaGlsZF9oYW5kbGVyLgoJKGNoaWxkX2RpZWQpOiBOZXcgZ2xvYmFsIHZhci4KCShjaGlsZF9oYW5kbGVyKTogTm93IGp1c3Qgc2V0cyBjaGlsZF9kaWVkLgoJKHdhaXRfZm9yX2NoaWxkcmVuKTogUmVtb3ZlZC4KCSh1bmtub3duX2NoaWxkcmVuX3Bvc3NpYmxlLCBibG9ja19zaWduYWxzLCB1bmJsb2NrX3NpZ25hbHMsCglwdXNoX3NpZ25hbHNfYmxvY2tlZF9wLCBwb3Bfc2lnbmFsc19ibG9ja2VkX3ApOiBSZW1vdmVkLgoJKGNoaWxkX2V4ZWN1dGVfam9iKTogUmVtb3ZlZCBjYWxsIHRvIHVuYmxvY2tfc2lnbmFscy4KCShuZXdfam9iKTogUmVtb3ZlZCBjYWxscyB0byBwdXNoX3NpZ25hbHNfYmxvY2tlZF9wIGFuZAoJcG9wX3NpZ25hbHNfYmxvY2tlZF9wLgoJKiBqb2IuaDogRGVjbGFyZSByZWFwX2NoaWxkcmVuLCBub3Qgd2FpdF9mb3JfY2hpbGRyZW4uCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIGpvYi5jIChuZXdfam9iKSwKCWxvYWQuYyBbTERBVl9CQVNFRF0gKHdhaXRfdG9fc3RhcnRfam9iKSwgbWFpbi5jIChkaWUpLAoJcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKSwgZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKToKCUNoYW5nZWQgd2FpdF9mb3JfY2hpbGRyZW4gY2FsbHMgdG8gcmVhcF9jaGlsZHJlbi4KCVNvbWUgbmVlZGVkIHRvIGJlIGxvb3BzIHRvIHdhaXQgZm9yIGFsbCBjaGlsZHJlbiB0byBkaWUuCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIG1haW4uYyAobWFpbiwKCWxvZ193b3JraW5nX2RpcmVjdG9yeSksIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IFJlbW92ZWQgY2FsbHMKCXRvIHB1c2hfc2lnbmFsc19ibG9ja2VkX3AgYW5kIHBvcF9zaWduYWxzX2Jsb2NrZWRfcC4KCSogam9iLmg6IFJlbW92ZWQgZGVjbHMuCgoJKiBqb2IuaDogQWRkZWQgY29weXJpZ2h0IG5vdGljZS4KCldlZCBBcHIgMTUgMDI6MDI6NDAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IE5vICoqKiBmb3IgaWdub3JlZCBlcnJvci4KClR1ZSBBcHIgMTQgMTg6MzE6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGltcGxpY2l0LmMgKERFQlVHUDIpOiBVc2UgZG8gLi4uIHdoaWxlICgwKSBpbnN0ZWFkIG9mIGlmIC4uLiBlbHNlIHRvCglhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBEb24ndCByZW1vdmUgLi8gd2hlbiBpdCBpcyBmb2xsb3dlZCBieSBhCglibGFuay4KCk1vbiBBcHIgMTMgMjE6NTY6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCAoREVCVUdQUik6IFVzZSBkbyAuLi4gd2hpbGUgKDApIGluc3RlYWQgb2YgaWYgLi4uIGVsc2UgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogUnVuIGZpbGVfbXRpbWUgb24gdGhlIGFsc29fbWFrZQoJZmlsZXMsIHNvIHZwYXRoX3NlYXJjaCBjYW4gaGFwcGVuLgoKCSogR05VbWFrZWZpbGUgKHRlc3RzKTogVXNlIHBlcmwgdGVzdCBzdWl0ZSBmcm9tIGNzYUBzdy5zdHJhdHVzLmNvbS4KCShhbHBoYS1maWxlcyk6IEluY2x1ZGUgdGVzdCBzdWl0ZSB0YXIgZmlsZS4KCkZyaSBBcHIgIDMgMDA6NTA6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNS4KCldlZCBBcHIgIDEgMDU6MzE6MTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZSwgdXBkYXRlX2ZpbGVfMSk6IERvIGNoZWNrX3JlbmFtZWQgb24gZWx0cwoJb2YgZGVwIGNoYWlucyB3aGVuIHRyYXZlcnNpbmcgdGhlbS4gIFNvbWV0aGluZyB1bnJlbGF0ZWQgbWlnaHQgaGF2ZQoJcmVuYW1lZCBvbmUgb2YgdGhlIGZpbGVzIHRoZSBkZXAgY2hhaW4gcG9pbnRzIHRvLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IElmIEZJTEUgaGFzIGJlZW4gcmVuYW1lZCwgZm9sbG93IGl0cwoJYHJlbmFtZWQnIHB0ciwgc28gd2UgZ2V0IHRvIHRoZSBmaW5hbCByZWFsIEZJTEUuICBVc2luZyB0aGUgcmVuYW1lZAoJb25lcyBsb3NlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBpbiB0aGUgaGFzaCB0YWJsZSwgc28gdGhlIHJlbW92YWwKCWNvZGUgbG9vcHMgaW5maW5pdGVseS4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogQ2xvYmJlciBudWxsIHRlcm1pbmF0b3IgaW50bwoJTUFLRUZJTEVTIGV4cGFuc2lvbiwgc28gc3RyaW5nIHBhc3NlZCB0byByZWFkX21ha2VmaWxlIGlzIHByb3Blcmx5Cgl0ZXJtaW5hdGVkLgoKTW9uIE1hciAzMCAyMDoxODowMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6ICQqIGZvciBhcmNoaXZlIG1lbWJlciB3aXRoCglleHBsaWNpdCBjbWRzIGlzIHN0ZW0gb2YgbWVtYmVyLCBub3Qgb2Ygd2hvbGUgYGxpYihtZW1iZXIpJy4KClRodSBNYXIgMjYgMTU6MjQ6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjQuCgpUdWUgTWFyIDI0IDA1OjIwOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBSdWxlcyBhcmUgaWRlbnRpY2FsIG9ubHkgaWYgYWxsIHRoZWlyCgl0YXJnZXRzIG1hdGNoIChyZWdhcmRsZXNzIG9mIG9yZGVyKS4KCldlZCBNYXIgMTEgMTM6NDk6NTQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBDaGFuZ2VkIGVycm9yICJubyB3YXkgdG8gbWFrZSIgdG8gIm5vCglydWxlIHRvIG1ha2UiLiAgRmlhdCBIdWdoLgoKCSogbWFrZS50ZXhpbmZvIChMYXN0IFJlc29ydCk6IERlc2NyaWJlICU6OiBydWxlcyBhbmQgbmV3IC5ERUZBVUxUCgliZWhhdmlvci4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogT25seSB1c2UgLkRFRkFVTFQgY21kcyBpZiBGSUxFIGlzIG5vdCBhCgl0YXJnZXQuCgpUdWUgTWFyIDEwIDE4OjEzOjEzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZW1vdGUtc3R1Yi5jLCByZW1vdGUtY3N0bXMuYyAoc3RhcnRfcmVtb3RlX2pvYik6IFRha2UgbmV3IGFyZywKCWVudmlyb25tZW50IHRvIHBhc3MgdG8gY2hpbGQuCgkqIGpvYi5jIChzdGFydF9qb2IpOiBQYXNzIGl0LgoKTW9uIE1hciAgOSAxOTowMDoxMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogQWxzbyBzdHJpcCAuL3MgaGVyZSwgdG8gZ2V0IGNvbW1hbmQtbGluZQoJdGFyZ2V0IG5hbWVzLgoKCSogcmVtb3RlLWNzdG1zLmM6IEFkZCBjb21tZW50IHRlbGxpbmcgcGVvcGxlIHRvIGxlYXZlIG1lIGFsb25lLgoKCSogY29tcGF0TWFrZWZpbGUgKG1hbnBhZ2UgaW5zdGFsbCk6IFJlbW92ZSB0YXJnZXQgYmVmb3JlIGNvcHlpbmcuCgpUdWUgTWFyICAzIDE4OjQzOjIxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKE1pc3NpbmcpOiBSZW5hbWVkIHRvICJJbmNvbXBhdGliaWxpdGllcyBhbmQgLi4uIi4KCUFkZGVkIHBhcmFncmFwaCBkZXNjcmliaW5nICQ/IGluY29tcGF0aWJpbGl0eSB3aXRoIFVuaXggYW5kIFBPU0lYLjIuCgpTdW4gTWFyICAxIDE1OjUwOjU0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQG51dHJpbWF0LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogRG9uJ3QgZGVjbGFyZSBmb3JrIG9yIHBpcGUuCglVc2UgdmZvcmsgaW5zdGVhZCBvZiBmb3JrLgoKVHVlIEZlYiAyNSAyMjowNTozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChDaGFpbmVkIFJ1bGVzKTogQ2xhcmlmeSAuUFJFQ0lPVVMgdG8gc2F2ZQoJaW50ZXJtZWRpYXRlIGZpbGVzLgoKCSogbG9hZC5jIFtzdW5dIChMREFWX0NWVCk6IERlZmluZSB0byBkaXZpZGUgYnkgRlNDQUxFLgoKU3VuIEZlYiAxNiAwMjowNToxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMuCgpTYXQgRmViIDE1IDE3OjEyOjIwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAobWFrZWluZm8pOiBVc2UgZW1hY3MgYmF0Y2gtdGV4aW5mby1mb3JtYXQgZm4uCgpGcmkgRmViIDE0IDAwOjExOjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDb3JyZWN0bHkgaGFuZGxlIGRlZmluZSAmIGVuZGVmIGluIGlmZGVmcy4KCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogUGFzcyBhcmcgZm9yICVzIGluIGVycm9yIG1zZy4KCgkqIG1haW4uYyAobWFpbikgW19fSUJNUjIsIFBPU0lYXTogVXNlIGNvcnJlY3QgKGEgbGEgVVNHcjMpIHNldHZidWYKCWNhbGwuCgpXZWQgRmViIDEyIDEyOjA3OjM5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKExpYnJhcmllcy9TZWFyY2gpOiBTYXkgaXQgZG9lcyAvdXNyL2xvY2FsL2xpYiB0b28uCgpTdW4gRmViICA5IDIzOjA2OjI0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGVjayBmb3IgZXh0cmFuZW91cyBgZW5kZWYnIHdoZW4gaWdub3JpbmcuCgpUaHUgRmViICA2IDE2OjE1OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMi4KClR1ZSBGZWIgIDQgMjA6MDQ6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQ29ycmVjdGx5IGlnbm9yZQoJd2hpdGVzcGFjZSBhZnRlciBiYWNrc2xhc2gtTkwuCgpGcmkgSmFuIDMxIDE4OjMwOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZTogSWdub3JlIGVycm9ycyBmcm9tIGNoZ3JwIGFuZCBjaG1vZCB3aGVuIGluc3RhbGxpbmcuCgpXZWQgSmFuIDI5IDE4OjEzOjMwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFdoZW4gc2V0dGluZyBNQUtFTEVWRUwgaW4gdGhlIGVudiB0byByZS1leGVjLAoJYWxsb2NhdGUgc3BhY2Ugc28gYXMgbm90IHRvIGNsb2JiZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBvbGQgc3RyaW5nLgoKCSogbWFrZS5oIFtIQVZFX0FMTE9DQV9IXTogSW5jbHVkZSA8YWxsb2NhLmg+CgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogRG9jdW1lbnQgSEFWRV9BTExPQ0FfSC4KCk1vbiBKYW4gMjAgMTM6NDA6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtWRk9SS19NSVNTSU5HXTogVXNlIGZvcmsgaW5zdGVhZC4KCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBEb2N1bWVudCBzYW1lLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCBjcmVhdGUgYW4gZW1wdHkKCWFyZyBpZiBiYWNrc2xhc2gtTkwgaXMgYXQgYmVnaW5uaW5nIG9mIHdvcmQuCgpTdW4gSmFuIDE5IDE2OjI2OjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyBbREdVWF06IENhbGwgc2V0dmJ1ZiBhcyBmb3IgVVNHcjMuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE5vdGljZSBjb3JyZWN0bHkgdGhhdAoJYmFja3NsYXNoLU5MIGlzIHRoZSBlbmQgb2YgdGhlIGFyZyAoYmVjYXVzZSBpdCBpcyByZXBsYWNlZCB3aXRoIGEKCXNwYWNlKS4KClRodSBKYW4gMTYgMTg6NDI6MzggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBJZiBTSEVMTCBpcyBuaWwsIHNldCBpdAoJdG8gZGVmYXVsdF9zaGVsbCBiZWZvcmUgcHJvY2VlZGluZy4KCgkqIG1ha2UuaCBbc2dpXTogTm8gYWxsb2NhLmgsIGFmdGVyIGFsbC4KCldlZCBKYW4gMTUgMTI6MzA6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChtdWx0aV9nbG9iKTogQ29ucyB1cCB0aGUgY2hhaW4gb2YgdGhlIHJlc3VsdHMgb2YgZ2xvYgoJZnJvbSBiYWNrIHRvIGZyb250LCBzbyBpdCBjb21lcyBvdXQgaW4gZm9yd2FyZCBvcmRlci4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRG9uJ3QgZWF0IGNoYXIgZm9sbG93aW5nCgliYWNrc2xhc2gtTkwuCgpNb24gSmFuIDEzIDE5OjE2OjU2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW3VsdHJpeF06IEdFVD1nZXQsIGxpa2UgVVNHLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBSZW1vdmUgdGFicyBmb2xsb3dpbmcKCWJhY2tzbGFzaC1OTCBjb21ib3MgaW4gdGhlIGlucHV0IGxpbmUsIHNvIHRoZXkgZG9uJ3Qgc2hvdyB1cCB3aGVuCgl0aGF0IGxpbmUgaXMgcHJpbnRlZC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMgdGhlIGxpbmUgb24KCWlucHV0OyBkbyBpdCBvbiB0aGUgY29weSB3ZSBkbyByZW1vdmVfY29tbWVudHMgb24uCglGb3IgcnVsZSBsaW5lcywgY29sbGFwc2VfY29udGludWF0aW9ucyB0aGUgbGluZSBhZnRlciBjaG9wcGluZwoJIjtjbWRzIiBvZmYgdGhlIGVuZCwgc28gd2UgZG9uJ3QgZWF0IGNvbnRzIGluIHRoZSBjbWRzLgoJR2l2ZSBlcnJvciBmb3IgIjtjbWRzIiB3aXRoIG5vIHJ1bGUuCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRWF0IGJhY2tzbGFzaC1OTCBjb21ib3MKCXdoZW4gY29uc3RydWN0aW5nIHRoZSBsaW5lIHRvIHJlY3Vyc2Ugb24gZm9yIHNsb3csIHRvby4KClNhdCBKYW4gMTEgMDI6MjA6MjcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChlbnRlcl9maWxlKTogRG9uJ3Qgc3RyaXAgbGVhZGluZyBgLi8ncy4KCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFRha2UgbmV3IGFyZyBTVFJJUDsgaWYgbm9uemVybywgZG8gaXQgaGVyZS4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyksIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKSwKCXJlYWQuYyAocmVhZF9tYWtlZmlsZSksIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBDaGFuZ2UgY2FsbGVycy4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfSUJNUjJdOiBGQz14bGYKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogVHVybiBiYWNrc2xhc2gtTkwgYW5kCglmb2xsb3dpbmcgd2hpdGVzcGFjZSBpbnRvIGEgc2luZ2xlIHNwYWNlLCByYXRoZXIgdGhhbiBqdXN0IGVhdGluZwoJdGhlIGJhY2tzbGFzaC4KCgkqIG1ha2UudGV4aW5mbyAoQ29weWluZyk6IEBpbmNsdWRlIGdwbC50ZXhpbmZvLCByYXRoZXIgdGhhbgoJZHVwbGljYXRpbmcgaXRzIGNvbnRlbnRzLgoKRnJpIE5vdiAgOCAyMDowNjowMyAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBNYWtlIHN1cmUgbm90IHRvIGJvdGhlcgoJcHJvY2Vzc2luZyBhbiBlbXB0eSBsaW5lLgoKCSogVmVyc2lvbiAzLjYyLjAuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFsd2F5cyByZWN1cnNlIGZvciBzbG93OwoJc2ltcGxlIGNhc2UgZGlkbid0IGhhbmRsZSBmaW5kaW5nIG5ld2xpbmVzLgoKVHVlIE5vdiAgNSAxODo1MToxMCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBTZXQgUkVTVFAgcHJvcGVybHkgd2hlbgoJc2xvdzsgZG9uJ3QgXGlmeSBwYXN0IGEgbmV3bGluZS4KCkZyaSBOb3YgIDEgMTk6MzQ6MjggMTk5MSAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbc2dpXTogI2luY2x1ZGUgPGFsbG9jYS5oPi4KCgwKClNlZSBDaGFuZ2VMb2cuMSBmb3IgZWFybGllciBjaGFuZ2VzLgo=