MTk5OC0wNC0yOSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBpbnRsL2xvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6IFVzZSB1bnNpZ25lZCBjaGFyIGZvcgoJbG9jYWwgdmFyaWFibGVzLiAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSB0cC4KCSogaW50bC9sMTBuZmxpc3QuYyAoX25sX25vcm1hbGl6ZV9jb2Rlc2V0KTogVXNlIHVuc2lnbmVkIGNoYXIgKgoJZm9yIHR5cGUgb2YgY29kZXNldC4gIEZvciBsb29zaW5nIFNvbGFyaXMgc3lzdGVtcy4KCSogaW50bC9sb2FkaW5mby5oOiBBZGFwdCBwcm90b3R5cGUgb2YgX25sX25vcm1hbGl6ZV9jb2Rlc2V0LgoJKiBpbnRsL2JpbmR0ZXh0ZG9tLmMgKEJJTkRURVhURE9NQUlOKTogRG9uJ3QgZGVmaW5lIGxvY2FsIHZhcmlhYmxlCglsZW4gaWYgbm90IG5lZWRlZC4KCVBhdGNoZXMgYnkgSmltIE1leWVyaW5nLgoKMTk5OC0wNC0yOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBsb2FkbXNnY2F0LmMgKF9ubF9sb2FkX2RvbWFpbik6IERvbid0IGFzc2lnbiB0aGUgZWxlbWVudCB1c2VfbW1hcCBpZgoJbW1hcCBpcyBub3Qgc3VwcG9ydGVkLgoKCSogaGFzaC1zdHJpbmcuaDogRG9uJ3QgaW5jbHVkZSA8dmFsdWVzLmg+LgoKMTk5OC0wNC0yNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiB0ZXh0ZG9tYWluLmM6IFVzZSBzdHJkdXAgaXMgYXZhaWxhYmxlLgoKCSogbG9jYWxlYWxpYXMuYzogRGVmaW5lIEhBVkVfTUVNUENQWSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhpcwoJZnVuY3Rpb24uICBEZWZpbmUgYW5kIHVzZSBzZW1hcGFob3JlcyB0byBwcm90ZWN0IG1vZGZpY2F0aW9uIG9mCglnbG9iYWwgb2JqZWN0cyB3aGVuIGNvbXBpbGluZyBmb3IgZ2xpYmMuICBBZGQgY29kZSB0byBhbGxvdwoJZnJlZWluZyBhbGlhcyB0YWJsZS4KCgkqIGwxMG5mbGlzdC5jOiBEb24ndCBhc3N1bWUgc3RwY3B5IG5vdCBiZWluZyBhIG1hY3JvLgoKCSogZ2V0dGV4dFAuaDogRGVmaW5lIGludGVybmFsX2Z1bmN0aW9uIG1hY3JpIGlmIG5vdCBhbHJlYWR5IGRvbmUuCglVc2UgZ2xpYmMgYnl0ZS1zd2FwIG1hY3JvcyBpbnN0ZWFkIG9mIGRlZmluaW5nIFNXQVAgd2hlbiBjb21waWxlZAoJZm9yIGdsaWJjLgoJKHN0cnVjdCBsb2FkZWRfZG9tYWluKTogQWRkIGVsZW1lbnRzIHRvIGFsbG93IHVubG9hZGluZy4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgbGliaW50bC5oIGhlcmUuCgoJKiBiaW5kdGV4dGRvbWFpbi5jOiBDYXJyeSBvdmVyIGNoYW5nZXMgZnJvbSBnbGliYy4gIFVzZSBzdHJkdXAgaWYKCWF2YWlsYWJsZS4KCgkqIGRjZ2V0dGV4dC5jOiBEb24ndCBhc3N1bWUgc3RwY3B5IG5vdCBiZWluZyBhIG1hY3JvLiAgTWFyayBpbnRlcm5hbAoJZnVuY3Rpb25zLiAgQWRkIG1lbW9yeSBmcmVlaW5nIGNvZGUgZm9yIGdsaWJjLgoKCSogZGdldHRleHQuYzogVXBkYXRlIGNvcHlyaWdodC4KCgkqIGV4cGxvZGVuYW1lLmM6IEluY2x1ZGUgc3RkbGliLmggYW5kIHN0cmluZy5oIG9ubHkgaWYgdGhleSBleGlzdC4KCVVzZSBzdHJpbmdzLmggZXZlbnR1YWxseS4KCgkqIGZpbmRkb21haW4uYzogTWFyayBpbnRlcm5hbCBmdW5jdGlvbnMuICBVc2Ugc3RyZHVwIGlmIGF2YWlsYWJsZS4KCUFkZCBtZW1vcnkgZnJlZWluZyBjb2RlIGZvciBnbGliYy4KCjE5OTctMTAtMTAgMjA6MDAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbGliZ2V0dGV4dC5oOiBGaXggZHVtbXkgdGV4dGRvbWFpbiBhbmQgYmluZHRleHRkb21haW4gbWFjcm9zLgoJVGhleSBzaG91bGQgcmV0dXJuIHJlYXNvbmFibGUgdmFsdWVzLgoJUmVwb3J0ZWQgYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgoKMTk5Ny0wOS0xNiAwMzozMyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBsaWJnZXR0ZXh0Lmg6IERlZmluZSBQQVJBTVMgYWxzbyB0byBgYXJncycgaWYgX19jcGx1c3BsdXMgaXMgZGVmaW5lZC4KCSogaW50bGguaW5zdC5pbjogTGlrZXdpc2UuCglSZXBvcnRlZCBieSBKZWFuLU1hcmMgTGFzZ291dHRlcyA8SmVhbi1NYXJjLkxhc2dvdXR0ZXNAaW5yaWEuZnI+LgoKCSogbGliaW50bC5nbGliYzogVXBkYXRlIGZyb20gY3VycmVudCBnbGliYyB2ZXJzaW9uLgoKMTk5Ny0wOS0wNiAwMjoxMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBpbnRsaC5pbnN0LmluOiBSZWZvcm1hdCBjb3B5cmlnaHQuCgoxOTk3LTA4LTE5IDE1OjIyICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBSZW1vdmUgd3JvbmcgY29tbWVudC4KCjE5OTctMDgtMTYgMDA6MTMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGF0YSk6IERvbid0IGNoYW5nZSBkaXJlY3RvcnkgdG8gaW5zdGFsbC4KCjE5OTctMDgtMDEgMTQ6MzAgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogY2F0LWNvbXBhdC5jOiBGaXggY29weXJpZ2h0LgoKCSogbG9jYWxlYWxpYXMuYzogRG9uJ3QgZGVmaW5lIHN0cmNociB1bmxlc3MgIUhBVkVfU1RSQ0hSLgoKCSogbG9hZG1zZ2NhdC5jOiBVcGRhdGUgY29weXJpZ2h0LiAgRml4IHR5cG9zLgoKCSogbDEwbmZsaXN0LmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KCShfbmxfbWFrZV9sMTBuZmxpc3QpOiBIYW5kbGUgc3BvbnNvciBhbmQgcmV2aXNpb24gY29ycmVjdGx5LgoKCSogZ2V0dGV4dC5jOiBVcGRhdGUgY29weXJpZ2h0LgoJKiBnZXR0ZXh0Lmg6IExpa2V3aXNlLgoJKiBoYXNoLXN0cmluZy5oOiBMaWtld2lzZS4KCgkqIGZpbmRkb21haW4uYzogUmVtb2F2ZSBkZWFkIGNvZGUuICBEZWZpbmUgc3RyY2hyIG9ubHkgaWYKCSFIQVZFX1NUUkNIUi4KCgkqIGV4cGxvZGVuYW1lLmM6IEluY2x1ZGUgPHN5cy90eXBlcy5oPi4KCgkqIGV4cGxvZGVuYW1lLmM6IFJlZm9ybWF0IGNvcHlyaWdodCB0ZXh0LgoJKF9ubF9leHBsb2RlX25hbWUpOiBGaXggdHlwby4KCgkqIGRjZ2V0dGV4dC5jOiBEZWZpbmUgYW5kIHVzZSBfX3NldF9lcnJuby4KCShndWVzc19jYXRlZ29yeV92YWx1ZSk6IERvbid0IHVzZSBzZXRsb2NhbGUgaWYgSEFWRV9MQ19NRVNTQUdFUyBpcwoJbm90IGRlZmluZWQuCgoJKiBiaW5kdGV4dGRvbS5jOiBQcmV0dHkgcHJpbnRpbmcuCgoxOTk3LTA1LTAxIDAyOjI1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGRjZ2V0dGV4dC5jIChndWVzc19jYXRlZ29yeV92YWx1ZSk6IERvbid0IGRlcGVuZCBvbgoJSEFWRV9MQ19NRVNTQUdFUy4gIFdlIGRvbid0IG5lZWQgdGhlIG1hY3JvIGhlcmUuCglQYXRjaCBieSBCcnVubyBIYWlibGUgPGhhaWJsZUBpbG9nLmZyPi4KCgkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6IERvTid0IHJlZmVyIHRvIEhBVkVfU0VUTE9DQUxFX05VTEwKCW1hY3JvLiAgSW5zdGVhZCB1c2UgSEFWRV9MT0NBTEVfTlVMTCBhbmQgZGVmaW5lIGl0IHdoZW4gdXNpbmcKCWdsaWJjLCBhcyBpbiBkY2dldHRleHQuYy4KCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgoKCSogTWFrZWZpbGUuaW4gKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzCglQaW5hcmQuCgpNb24gTWFyIDEwIDA2OjUxOjE3IDE5OTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IEltcGxlbWVudCBoYW5kbGluZyBvZiBsaWJ0b29sLgoKCSogZ2V0dGV4dFAuaDogQ2hhbmdlIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlIG9mIGdlbmVyaWMgbG93bGV2ZWwKCWkxOG4gZmlsZSBoYW5kbGluZy4KCldlZCBEZWMgIDQgMjA6MjE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiB0ZXh0ZG9tYWluLmM6IFB1dCBwYXJlbnRoZXNlcyBhcm91bmQgYXJndW1lbnRzIG9mIG1lbWNweSBtYWNybwoJZGVmaW5pdGlvbi4KCSogbG9jYWxlYWxpYXMuYzogTGlrZXdpc2UuCgkqIGwxMG5mbGlzdC5jOiBMaWtld2lzZS4KCSogZmluZGRvbWFpbi5jOiBMaWtld2lzZS4KCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCglSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCgpNb24gTm92IDI1IDIyOjU3OjUxIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogdGV4dGRvbWFpbi5jOiBNb3ZlIGRlZmluaXRpb24gb2YgYG1lbWNweWAgbWFjcm8gdG8gcmlnaHQKCXBvc2l0aW9uLgoKRnJpIE5vdiAyMiAwNDowMTo1OCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGZpbmRkb21haW4uYyBbIUhBVkVfU1RSSU5HX0ggJiYgIV9MSUJDXTogRGVmaW5lIG1lbWNweSB1c2luZwogCWJjb3B5IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuICBSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCgkqIGJpbmR0ZXh0ZG9tLmM6IExpa2V3aXNlLgoJKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCgkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgoJKiB0ZXh0ZG9tYWluLmM6IExpa2V3aXNlLgoKVHVlIE9jdCAyOSAxMToxMDoyNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChsaWJkaXIpOiBDaGFuZ2UgdG8gdXNlIGV4ZWNfcHJlZml4IGluc3RlYWQgb2YKIAlwcmVmaXguICBSZXBvcnRlZCBieSBLbnV0LUjldmFyZEFrc25lcyA8ZXRva25hQGV0by5lcmljc3Nvbi5zZT4uCgpTYXQgQXVnIDMxIDAzOjA3OjA5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbDEwbmZsaXN0LmMgKF9ubF9ub3JtYWxpemVfY29kZXNldCk6IFdlIGNvbnZlcnQgdG8gbG93ZXIgY2FzZSwKCXNvIGRvbid0IHByZXBlbmQgdXBwZXJjYXNlIGBJU08nIGZvciBvbmx5IG51bWVyaWMgYXJnLgoKRnJpIEp1bCAxOSAwMDoxNTo0NiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGwxMG5mbGlzdC5jOiBNb3ZlIGluY2x1c2lvbiBvZiBhcmd6LmgsIGN0eXBlLmgsIHN0ZGxpYi5oIGFmdGVyCglkZWZpbml0aW9uIG9mIF9HTlVfU09VUkNFLiAgUGF0Y2ggYnkgUm9sYW5kIE1jR3JhdGguCgoJKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogRml4IGFub3RoZXIgYnVnIHdpdGggYGZvcicgbG9vcCBhbmQKCWVtcHR5IGFyZ3VtZW50cy4gIFBhdGNoIGJ5IEppbSBNZXllcmluZy4gIENvcnJlY3QgbmFtZSBvcwoJdW5pbnN0YWxsZWQgZmlsZXM6IG5vIGludGwtIHByZWZpeCBhbnltb3JlLgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtZGF0YSk6IEFnYWluIHdvcmsgYXJvdW5kIHNoZWxscyB3aGljaAoJY2Fubm90IGhhbmRsZSBtcHR5IGZvciBsaXN0LiAgUmVwb3J0ZWQgYnkgSmltIE1leWVyaW5nLgoKU2F0IEp1bCAxMyAxODoxMTozNSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BsaXQgZ29hbC4gIE5vdyBkZXBlbmQgb24gaW5zdGFsbC1leGVjCiAgICAgICAgYW5kIGluc3RhbGwtZGF0YS4KCShpbnN0YWxsLWV4ZWMsIGluc3RhbGwtZGF0YSk6IE5ldyBnb2Fscy4gIENyZWF0ZWQgZnJvbSBmb3JtZXIKCWluc3RhbGwgZ29hbC4KCVJlcG9ydGVkIGJ5IEthcmwgQmVycnkuCgpTYXQgSnVuIDIyIDA0OjU4OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE1LSU5TVEFMTERJUlMpOiBOZXcgdmFyaWFibGUuICBQYXRoIHRvCiAgICAgICAgbWtpbnN0YWxsZGlycyBzY3JpcHQuCgkoaW5zdGFsbCk6IHVzZSBNS0lOU1RBTExESVJTIHZhcmlhYmxlIG9yIGlmIHRoZSBzY3JpcHQgaXMgbm90IHByZXNlbnQKCXRyeSB0byBmaW5kIGl0IGluIHRoZSAkdG9wX3NjcmRpcikuCgpXZWQgSnVuIDE5IDAyOjU2OjU2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbDEwbmZsaXN0LmM6IExpbnV4IGxpYmMgKnBhcnRseSogaW5jbHVkZXMgdGhlIGFyZ3pfKiBmdW5jdGlvbnMuCglHcnIuICBXb3JrIGFyb3VuZCBieSByZW5hbWluZyB0aGUgc3RhdGljIHZlcnNpb24gYW5kIHVzZSBtYWNyb3MKCWZvciByZW5hbWluZy4KClR1ZSBKdW4gMTggMjA6MTE6MTcgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBwcmVzZW5jZSB0ZXN0IG1hY3JvcyBvZiBfX2FyZ3pfKiBmdW5jdGlvbnMuCgoJKiBsMTBuZmxpc3QuYzogSW5jbHVkZSA8YXJnei5oPiBiYXNlZCBvbiB0ZXN0IG9mIGl0IGluc3RlYWQgd2hlbgoJX19hcmd6XyogZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCglSZXBvcnRlZCBieSBBbmRyZWFzIFNjaHdhYi4KClRodSBKdW4gMTMgMTU6MTc6NDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBleHBsb2RlbmFtZS5jLCBsMTBuZmxpc3QuYzogRGVmaW5lIE5VTEwgZm9yIGR1bWIgc3lzdGVtcy4KClR1ZSBKdW4gMTEgMTc6MDU6MTMgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0LmggKGRjZ2V0dGV4dCk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZQoJcmVzdWx0IHRvIF9fcmVzdWx0IHRvIHByZXZlbnQgbmFtZSBjbGFzaC4KCgkqIGwxMG5mbGlzdC5jLCBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYzogRGVmaW5lIF9HTlVfU09VUkNFIHRvCiAgICAgICAgZ2V0IHByb3RvdHlwZSBmb3Igc3RwY3B5IGFuZCBzdHJjYXNlY21wLgoKCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oOiBNb3ZlIGRlY2xhcmF0aW9uIG9mCglgX25sX21zZ19jYXRfY250cicgb3V0c2lkZSBfX2V4dGVuc2lvbl9fIGJsb2NrIHRvIHByZXZlbnQgd2FybmluZwoJZnJvbSBnY2MncyAtV25lc3RlZC1leHRlcm4gb3B0aW9uLgoKRnJpIEp1biAgNyAwMTo1ODowMCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIGNvbW1lbnQuCgpUaHUgSnVuICA2IDE3OjI4OjE3IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBXb3JrIGFyb3VuZCBmb3IgYW5vdGhlciBCdWdsaXggc3R1cGlkaXR5LgoJQWx3YXlzIHVzZSBhbiBgZWxzZScgY2xvc2UgZm9yIGBpZidzLiAgUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgoKCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBDb3JyZWN0IHR5cG8gaW4gcGhvbnkgcnVsZS4KCVJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KClRodSBKdW4gIDYgMDE6NDk6NTIgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBkY2dldHRleHQuYyAocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcmlhYmxlIGFsbG9jYV9saXN0IHRvCglibG9ja19saXN0IGFzIHRoZSBtYWNybyBjYWxscyBhc3N1bWUuCglQYXRjaCBieSBFcmljIEJhY2t1cy4KCgkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBhbGxvY2EgYXMgbWFjcm8gdXNpbmcKICAgICAgICBtYWxsb2MuCgkocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcnJpYWJlIGFsbG9jYV9saXN0IHRvIGJsb2NrX2xpc3QgYXMgdGhlCgltYWNybyBjYWxscyBhc3N1bWUuCglQYXRjaCBieSBFcmljIEJhY2t1cy4KCgkqIGwxMG5mbGlzdC5jOiBDb3JyZWN0IGNvbmRpdGlvbmFsIGZvciA8YXJnei5oPiBpbmNsdXNpb24uCglSZXBvcnRlZCBieSBSb2xhbmQgTWNHcmF0aC4KCgkqIE1ha2VmaWxlLmluIChhbGwpOiBEZXBlbmQgb24gYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAsIG5vdAogICAgICAgIGFsbC1AVVNFX05MU0AuCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IGludGxoLmluc3QgY29tZXMgZnJvbSBsb2NhbCBkaXIsIG5vdAogICAgICAgICQoc3JjZGlyKS4KCgkqIE1ha2VmaWxlLmluIChpbnRsaC5pbnN0KTogU3BlY2lhbCBoYW5kbGluZyBvZiB0aGlzIGdvYWwuICBJZgoJdXNlZCBpbiBnZXR0ZXh0LCB0aGlzIGlzIHJlYWxseSBhIHJ1bCB0byBjb25zdHJ1Y3QgdGhpcyBmaWxlLiAgSWYKCXVzZWQgaW4gYW55IG90aGVyIHBhY2thZ2UgaXQgaXMgZGVmaW5lZCBhcyBhIC5QSE9OWSBydWxlIHdpdGgKCWVtcHR5IGJvZHkuCgoJKiBmaW5kZG9tYWluLmM6IEV4dHJhY3QgbG9jYWxlIGZpbGUgaW5mb3JtYXRpb24gaGFuZGxpbmcgaW50bwoJbDEwbmZpbGUuYy4gIFJlbmFtZSBsb2NhbCBzdHBjcHlfXyBmdW5jdGlvbiB0byBzdHBjcHkuCgoJKiBkY2dldHRleHQuYyAoc3RwY3B5KTogQWRkIGxvY2FsIGRlZmluaXRpb24uCgoJKiBsMTBuZmxpc3QuYzogU29sdmUgc29tZSBwb3J0YWJpbGl0eSBwcm9ibGVtcy4gIFBhdGNoZXMgcGFydGx5IGJ5CglUaG9tYXMgRXNrZW4uICBBZGQgbG9jYWwgZGVmaW5pdGlvbiBvZiBzdHBjcHkuCgpUdWUgSnVuICA0IDAyOjQ3OjQ5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogaW50bGguaW5zdC5pbjogRG9uJ3QgZGVwZW5kIGluY2x1ZGluZyA8bG9jYWxlLmg+IG9uCglIQVZFX0xPQ0FMRV9ILiAgSW5zdGVhZCBjb25maWd1cmUgbXVzdCByZXdyaXRlIHRoaXMgZmlpbGUKCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmUgcnVuLgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwpOiBsaWJpbnRsLmluc3QgaXMgbm93IGNhbGxlZCBpbnRsaC5pbnN0LgoJQWRkIHJ1bGVzIGZvciB1cGRhdGluZyBpbnRsaC5pbnN0IGZyb20gaW50bGguaW5zdC5pbi4KCgkqIGxpYmludGwuaW5zdDogUmVuYW1lZCB0byBpbnRsaC5pbnN0LmluLgoKCSogbG9jYWxlYWxpYXMuYywgZGNnZXR0ZXh0LmMgW19fR05VQ19fXTogRGVmaW5lIEhBVkVfQUxMT0NBIHRvIDEKICAgICAgICBiZWNhdXNlIGdjYyBoYXMgX19idWl0bGluX2FsbG9jYS4KCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgoKTW9uIEp1biAgMyAwMDozMjoxNiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsY2hlY2spOiBOZXcgZ29hbCB0byBmdWxmaWxsIG5lZWRzIG9mCiAgICAgICAgYXV0b21ha2UncyBkaXN0Y2hlY2suCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFJlb3JkZXIgY29tbWFuZHMgc28gdGhhdCBWRVJTSU9OIGlzCiAgICAgICAgZm91bmQuCgoJKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6IE5vdyB1c2Ugc3ViZGlyZWN0b3J5IGludGwvIGluCiAgICAgICAgQGRhdGFkaXJAL2dldHRleHQuCgkoQ09NU1JDUyk6IEFkZCBsMTBuZmlsZS5jLgoJKE9CSkVDVFMpOiBBZGQgbDEwbmZpbGUuby4KCShESVNURklMRVMpOiBSZW5hbWUgdG8gRElTVEZJTEUubm9ybWFsLiAgUmVtb3ZlICQoRElTVEZJTEVTLmNvbW1vbikuCgkoRElTVEZJTEUuZ2V0dGV4dCk6IFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgoJKGFsbC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCgkoaW5zdGFsbCk6IElmICQoUEFDS0FHRSkgPSBnZXR0ZXh0IGluc3RhbGwsIG90aGVyd29zZSBkbyBub3RoaW5nLiAgTm8KCXBhY2thZ2UgYnV0IGdldHRleHQgaXRzZWxmIHNob3VsZCBpbnN0YWxsIGxpYmludGwuaCArIGhlYWRlcnMuCgkoZGlzdCk6IEV4dGVuZCBnb2FsIHRvIHdvcmsgZm9yIGdldHRleHQsIHRvby4KCShkaXN0LWdldHRleHQpOiBSZW1vdmUgZ29hbC4KCgkqIGRjZ2V0dGV4dC5jIFshSEFWRV9BTExPQ0FdOiBEZWZpbmUgbWFjcm8gYWxsb2NhIGJ5IHVzaW5nIG1hbGxvYy4KClN1biBKdW4gIDIgMTc6MzM6MDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBsb2FkbXNnY2F0LmMgKF9ubF9sb2FkX2RvbWFpbik6IFBhcmFtZXRlciBpcyBub3cgY29tZXMgZnJvbQogICAgICAgIGZpbmRfbDEwbmZpbGUuCgpTYXQgSnVuICAxIDAyOjIzOjAzIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogbDEwbmZsaXN0LmMgKF9fYXJnel9uZXh0KTogQWRkIGRlZmluaXRpb24uCgoJKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcgYWxsb2NhCgljb2RlLiAgVXNlIG5ldyBsMTBuZmlsZSBoYW5kbGluZy4KCgkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nCiAgICAgICAgYWxsb2NhIGNvZGUuCgoJKiBsMTBuZmxpc3QuYzogSW5pdGlhbCByZXZpc2lvbi4KClR1ZSBBcHIgIDIgMTg6NTE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChhbGwtZ2V0dGV4dCk6IE5ldyBnb2FsLiAgU2FtZSBhcyBhbGwteWVzLgoKVGh1IE1hciAyOCAyMzowMToyMiAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5jZW50cmFsLmRlPgoKCSogTWFrZWZpbGUuaW4gKGdldHRleHRzcmNkaXIpOiBEZWZpbmUgdXNpbmcgQGRhdGFkaXJALgoKVHVlIE1hciAyNiAxMjozOToxNCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIDxjdHlwZS5oPi4gIFJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgoKU2F0IE1hciAyMyAwMjowMDozNSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOiBSZW5hbWUgdG8gc3RwY3B5X18gdG8gcHJldmVudCBjbGFzaGluZwogICAgICAgIHdpdGggZXh0ZXJuYWwgZGVjbGFyYXRpb24uCgpTYXQgTWFyICAyIDAwOjQ3OjA5IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBNYWtlZmlsZS5pbiAoYWxsLW5vKTogUmVuYW1lIGZyb20gYWxsX25vLgoKU2F0IEZlYiAxNyAwMDoyNTo1OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZ2V0dGV4dFAuaCBbbG9hZGVkX2RvbWFpbl06IEFycmF5IGBzdWNjZXNzb3InIG11c3Qgbm93IGNvbnRhaW4gdXAKICAgICAgICB0byA2MyBlbGVtZW50cyAoYmVjYXVzZSBvZiBjb2Rlc2V0IG5hbWUgbm9ybWFsaXphdGlvbikuCgoJKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBjb2Rlc2V0IG5hbWUgbm9ybWFsaXphdGlvbi4KClRodSBGZWIgMTUgMDQ6Mzk6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChhbGwpOiBEZWZpbmUgdG8gYGFsbC1AVVNFX05MU0AnLgoJKGFsbC15ZXMsIGFsbF9ubyk6IE5ldyBnb2Fscy4gIGBhbGwtbm8nIGlzIG5vb3AsIGBhbGwteWVzJwoJaXMgZm9ybWVyIGFsbC4KCk1vbiBKYW4gMTUgMjE6NDY6MDEgMTk5NiAgSG93YXJkIEdheWxlICA8aG93YXJkQGhhbC5jb20+CgoJKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKTogSW5jcmVtZW50IHN0cmluZyBwb2ludGVycyBpbiBsb29wCiAgICAgICAgb2Ygc3RyY2FzZWNtcCByZXBsYWNlbWVudC4KCkZyaSBEZWMgMjkgMjE6MTY6MzQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IFdobyBjb21tZW50ZWQgdGhpcyBnb2FsIG91dCA/IDotKQoKRnJpIERlYyAyOSAxNTowODoxNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFNhdmUgYGVycm5vJy4gIEZhaWxpbmcgc3lzdGVtIGNhbGxzCglzaG91bGQgbm90IGVmZmVjdCBpdCBiZWNhdXNlIGEgbWlzc2luZyBjYXRhbG9nIGlzIG5vIGVycm9yLgoJUmVwb3J0ZWQgYnkgSGFyYWxkIEs8bzo+bmlnIDxrb2VuaWdAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlPi4KClR1ZSBEZWMgMTkgMjI6MDk6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChNYWtlZmlsZSk6IEV4cGxpY2l0bHkgdXNlICQoU0hFTEwpIGZvciBydW5uaW5nCiAgICAgICAgc2hlbGwgc2NyaXB0cy4KCkZyaSBEZWMgMTUgMTc6MzQ6NTkgMTk5NSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBPbmx5IGluc3RhbGwgbGlicmFyeSBhbmQgaGVhZGVyIHdoZW4KCXdlIHVzZSB0aGUgb3duIGltcGxlbWVudGF0aW9uLiAgRG9uJ3QgZG8gaXQgd2hlbiB1c2luZyB0aGUKCXN5c3RlbSdzIGdldHRleHQgb3IgY2F0Z2V0cyBmdW5jdGlvbnMuCgoJKiBkY2dldHRleHQuYyAoZmluZF9tc2cpOiBNdXN0IG5vdCBzd2FwIGRvbWFpbi0+aGFzaF9zaXplIGhlcmUuCgpTYXQgRGVjICA5IDE2OjI0OjM3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBsb2NhbGVhbGlhcy5jLCBsaWJpbnRsLmluc3QsIGxpYmdldHRleHQuaCwgaGFzaC1zdHJpbmcuaCwKCWdldHRleHRQLmgsIGZpbmRkb21haW4uYywgZGNnZXR0ZXh0LmMsIGNhdC1jb21wYXQuYzoKCVVzZSBQQVJBTVMgaW5zdGVhZCBvZiBfX1AuICBTdWdnZXN0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCgpUdWUgRGVjICA1IDExOjM5OjE0IDE5OTUgIExhcnJ5IFNjaHdpbW1lciAgPHJvc2VidWRAY3ljbG9uZS5zdGFuZm9yZC5lZHU+CgoJKiBsaWJnZXR0ZXh0Lmg6IFVzZSBgI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKScgaW5zdGVhZCBvZiBgI2lmCgkhX0xJQklOVExfSCcgYmVjYXVzZSBTb2xhcmlzIGRlZmluZXMgX0xJQklOVExfSCBhcyBlbXB0eS4KCk1vbiBEZWMgIDQgMTU6NDI6MDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CglJbnN0YWxsIGxpYmludGwuaW5zdCBpbnN0ZWFkIG9mIGxpYmludGwuaC5pbnN0YWxsLgoKU2F0IERlYyAgMiAyMjo1MTozOCAxOTk1ICBNYXJjdXMgRGFuaWVscyAgPG1hcmN1c0BzeXNjLnBkeC5lZHU+CgoJKiBjYXQtY29tcGF0LmMgKHRleHRkb21haW4pOgoJUmV2ZXJzZSBvcmRlciBpbiB3aGljaCBmaWxlcyBhcmUgdHJpZWQgeW91IGxvYWQuICBGaXJzdAoJdHJ5IGxvY2FsIGZpbGUsIHdoZW4gdGhpcyBmYWlsZWQgYWJzb2x1dGUgcGF0aC4KCldlZCBOb3YgMjkgMDI6MDM6NTMgMTk5NSAgTmVsc29uIEguIEYuIEJlZWJlICA8YmVlYmVAbWF0aC51dGFoLmVkdT4KCgkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOiBBZGQgbWlzc2luZyB7IH0uCgpTdW4gTm92IDI2IDE4OjIxOjQxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBsaWJpbnRsLmluc3Q6IEFkZCBtaXNzaW5nIF9fUCBkZWZpbml0aW9uLiAgUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgoKCSogTWFrZWZpbGUuaW46CglBZGQgZHVtbXkgYGFsbCcgYW5kIGBkdmknIGdvYWxzLiAgUmVwb3J0ZWQgYnkgVG9tIFRyb21leS4KClNhdCBOb3YgMjUgMTY6MTI6MDEgMTk5NSAgRnJhbmMsb2lzIFBpbmFyZCAgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPgoKCSogaGFzaC1zdHJpbmcuaDogQ2FwaXRhbGl6ZSBhcmd1bWVudHMgb2YgbWFjcm9zLgoKU2F0IE5vdiAyNSAxMjowMTozNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IFByZXZlbnQgZmlsZXMgbmFtZXMgbG9uZ2VyIHRoYW4gMTMKCWNoYXJhY3RlcnMuICBsaWJpbnRsLmguZ2xpYmMtPmxpYmludGwuZ2xpYmMsCglsaWJpbnRsLmguaW5zdGFsbC0+bGliaW50bC5pbnN0LiAgUmVwb3J0ZWQgYnkgSm9zaHVhIFIuIFBvdWxzb24uCgpTYXQgTm92IDI1IDExOjMxOjEyIDE5OTUgIEVyaWMgQmFja3VzICA8ZXJpY2JAbHNpZC5ocC5jb20+CgoJKiBkY2dldHRleHQuYzogRml4IGJ1ZyBpbiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzLgoKU2F0IE5vdiAyNSAwMjozNToyNyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgoKCSogbGliZ2V0dGV4dC5oOiBTb2xhcmlzIGNjIGRvZXMgbm90IHVuZGVyc3RhbmQKCSAjaWYgIVNZTUJPTDEgJiYgIVNZTUJPTDIuICBTYWQJYnV0IHRydWUuCgpUaHUgTm92IDIzIDE2OjIyOjE0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CglGaXggZm9yIG1hY2hpbmUgd2l0aCA+MzIgYml0IGB1bnNpZ25lZCBsb25nJ3MuCgoJKiBkY2dldHRleHQuYyAoRENHRVRURVhUKToKCUZpeCBob3JyaWJsZSBidWcgaW4gbG9vcCBmb3IgYWx0ZXJuYXRpdmUgdHJhbnNsYXRpb24uCgpUaHUgTm92IDIzIDAxOjQ1OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBwbzJ0Ymwuc2VkLmluLCBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgoJU29tZSBmdXJ0aGVyIHNpbXBsaWZpY2F0aW9ucyBpbiBtZXNzYWdlIG51bWJlciBnZW5lcmF0aW9uLgoKTW9uIE5vdiAyMCAyMTowODo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbGliaW50bC5oLmdsaWJjOiBVc2UgX19jb25zdCBpbnN0ZWFkIG9mIGNvbnN0IGluIHByb3RvdHlwZXMuCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgoJSW5zdGFsbCBsaWJpbnRsLmguaW5zdGFsbCBpbnN0ZWFkIG9mIGxpYmludGwuaC4gIFRoaXMKCWlzIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IFBldGVyIE1pbGxlci4KCgkqIGxpYmludGwuaC5pbnN0YWxsLCBsaWJpbnRsLmguZ2xpYmM6IEluaXRpYWwgcmV2aXNpb24uCgoJKiBsb2NhbGVhbGlhcy5jIChfbmxfZXhwYW5kX2FsaWFzLCByZWFkX2FsaWFzX2ZpbGUpOgoJUHJvdGVjdCBwcm90b3R5cGVzIGluIHR5cGUgY2FzdHMgYnkgX19QLgoKVHVlIE5vdiAxNCAxNjo0Mzo1OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogaGFzaC1zdHJpbmcuaDogQ29ycmVjdCBwcm90b3R5cGUgZm9yIGhhc2hfc3RyaW5nLgoKU3VuIE5vdiAxMiAxMjo0MjozMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogaGFzaC1zdHJpbmcuaCAoaGFzaF9zdHJpbmcpOiBBZGQgcHJvdG90eXBlLgoKCSogZ2V0dGV4dFAuaDogRml4IGNvcHlyaWdodC4KCShTV0FQKTogQWRkIHByb3RvdHlwZS4KCldlZCBOb3YgIDggMjI6NTY6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6IEZvcmdvdCBzaXplb2YuCglBdm9pZCBjYWxsaW5nICpwcmludGYgZnVuY3Rpb24uICBUaGlzIGludHJvZHVjZXMgYSBiaWcgb3ZlcmhlYWQuCglQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KClR1ZSBOb3YgIDcgMTQ6MjE6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGZpbmRkb21haW4uYywgY2F0LWNvbXBhdC5jOiBXcm9uZyBpbmRlbnRhdGlvbiBpbiAjaWYgZm9yIHN0cGNweS4KCgkqIGZpbmRkb21haW4uYyAoc3RwY3B5KToKCURlZmluZSBzdWJzdGl0dXRpb24gZnVuY3Rpb24gbG9jYWwuICBUaGUgbWFjcm8gd2FzIHRvIGZsYWt5LgoKCSogY2F0LWNvbXBhdC5jOiBGaXggdHlwby4KCgkqIHhvcGVuLW1zZy5zZWQsIGxpbnV4LW1zZy5zZWQ6CglXaGlsZSBicmluZ2luZyBtZXNzYWdlIG51bWJlciB0byByaWdodCBwbGFjZSBvbmx5IGFjY2VwdCBkaWdpdHMuCgoJKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBOb3cgdGhhdCB0aGUgY291bnRlciBkb2VzIG5vdCBoYXZlCglsZWFkaW5nIDBzIHdlIGRvbid0IG5lZWQgdG8gcmVtb3ZlIHRoZW0uICBSZXBvcnRlZCBieSBNYXJjdXMKCURhbmllbHMuCgoJKiBNYWtlZmlsZS5pbiAoLi4vcG8vY2F0LWlkLXRibC5vKTogVXNlICQodG9wX3NyZGlyKSBpbgoJZGVwZW5kZW5jeS4gIFJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgoKCSogY2F0LWNvbXBhdC5jOiAoc3RwY3B5KSBbIV9MSUJDICYmICFIQVZFX1NUUENQWV06IERlZmluZSByZXBsYWNlbWVudC4KCUdlbmVyYWxseSBjbGVhbnVwIHVzaW5nICNpZiBpbnN0ZWFkIG9mICNpZm5kZWYuCgoJKiBNYWtlZmlsZS5pbjogQ29ycmVjdCB0eXBvcyBpbiBjb21tZW50LiAgQnkgRnJhbmMsb2lzIFBpbmFyZC4KCk1vbiBOb3YgIDYgMDA6Mjc6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IERvbid0IGluc3RhbGwgbGliaW50bC5oIGFuZCBsaWJpbnRsLmEKCWlmIHdlIHVzZSBhbiBhdmFpbGFibGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4KClN1biBOb3YgIDUgMjI6MDI6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGxpYmdldHRleHQuaDogRml4IHR5cG86IEhBVkVfQ0FUR0VUVFMgLT4gSEFWRV9DQVRHRVRTLiAgUmVwb3J0ZWQKCWJ5IEZyYW5jLG9pcyBQaW5hcmQuCgoJKiBsaWJnZXR0ZXh0Lmg6IFVzZSAjaWYgaW5zdGVhZCBvZiAjaWZkZWYvI2lmbmRlZi4KCgkqIGZpbmRkb21haW4uYzoKCUNvbW1lbnRzIGRlc2NyaWJpbmcgd2hhdCBoYXMgdG8gYmUgZG9uZSBzaG91bGQgc3RhcnQgd2l0aCBGSVhNRS4KClN1biBOb3YgIDUgMTk6Mzg6MDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBTcGxpdC4gIFVzZSBESVNURklMRVMgd2l0aCBub3JtYWwgbWVhbmluZy4KCURJU1RGSUxFUy5jb21tb24gbmFtZXMgdGhlIGZpbGVzIGNvbW1vbiB0byBib3RoIGRpc3QgZ29hbHMuCglESVNURklMRVMuZ2V0dGV4dCBhcmUgdGhlIGZpbGVzIG9ubHkgZGlzdHJpYnV0ZWQgaW4gR05VIGdldHRleHQuCgpTdW4gTm92ICA1IDE3OjMyOjU0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBkY2dldHRleHQuYyAoRENHRVRURVhUKTogQ29ycmVjdCBzZWFyY2hpbmcgaW4gZGVyaXZlZCBsb2NhbGVzLgoJVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIGEgY2hhbmdlIGluIF9ubF9maW5kX21zZyBzZXZlcmFsIHdlZWtzCglhZ28uICBJIHJlYWxseSBkb24ndCBrbm93IHRoaXMgaXMgc3RpbGwgbm90IGZpeGVkLgoKU3VuIE5vdiAgNSAxMjo0MzoxMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBUZXN0IGZvciBGSUxFTkFNRSA9PSBOVUxMLiAgVGhpcwoJbWlnaHQgbWFyayBhIHNwZWNpYWwgY29uZGl0aW9uLgoKCSogZmluZGRvbWFpbi5jIChtYWtlX2VudHJ5X3JlYyk6IERvbid0IG1ha2UgaWxsZWdhbCBlbnRyeSBhcyBkZWNpZGVkLgoKCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBTdXBwcmVzcyBlcnJvciBtZXNzYWdlIHdoZW4gbG4gZmFpbGVkLgoJR2V0IGZpbGVzIGZyb20gJChzcmNkaXIpIGV4cGxpY2l0bHkuCgoJKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBSZW5hbWUgdG8gZ2V0dGV4dF9ub29wLgoKRnJpIE5vdiAgMyAwNzozNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZmluZGRvbWFpbi5jIChtYWtlX2VudHJ5X3JlYyk6CglQcm90ZWN0IGFnYWluc3Qgd3JvbmcgbG9jYWxlIG5hbWVzIGJ5IHRlc3RpbmcgbWFzay4KCgkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IEFkZCBtYWNybyBkZWZpbml0aW9uLgoJQ2FwaXRhbGl6ZSBtYWNybyBhcmd1bWVudHMuCgpUaHUgTm92ICAyIDIzOjE1OjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CglUZXN0IGZvciBwb2ludGVyICE9IE5VTEwgYmVmb3JlIGFjY2Vzc2luZyB2YWx1ZS4KCVJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCgoJKiBnZXR0ZXh0LmMgKE5VTEwpOgoJRGVmaW5lIGFzICh2b2lkKikwIGluc3RhZCBvZiAwLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzIFBpbmFyZC4KCk1vbiBPY3QgMzAgMjE6Mjg6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIHBvMnRibC5zZWQuaW46IFNlcmlvdXMgdHlwbyBidWcgZml4ZWQgYnkgSmltIE1leWVyaW5nLgoKU2F0IE9jdCAyOCAyMzoyMDo0NyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbGliZ2V0dGV4dC5oOiBEaXNhYmxlIGRjZ2V0dGV4dCBvcHRpbWl6YXRpb24gZm9yIFNvbGFyaXMgMi4zLgoKCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6CglQZXRlciBNaWxsZXIgcmVwb3J0ZWQgdGhhdCB0b2xvd2VyIGluIHNvbWUgc3lzdGVtcyBpcwoJZXZlbiBkdW1iZXIgdGhhbiBJIHRob3VnaHQuICBQcm90ZWN0IGNhbGwgYnkgYGlzdXBwZXInLgoKRnJpIE9jdCAyNyAyMjoyMjo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW4gKGxpYmRpciwgaW5jbHVkZWRpcik6IE5ldyB2YXJpYWJsZXMuCgkoaW5zdGFsbC1zcmMpOiBJbnN0YWxsIGxpYmludGwuYSBhbmQgbGliaW50bC5oIGluIGNvcnJlY3QgZGlycy4KCkZyaSBPY3QgMjcgMjI6MDc6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogRml4IHR5cG86IGludHJsLmNvbXBhdC5jIC0+IGludGwtY29tcGF0LmMuCgoJKiBwbzJ0Ymwuc2VkLmluOiBQYXRjaCBmb3IgYnVnZ3kgU0VEcyBieSBDaHJpc3RpYW4gdm9uIFJvcXVlcy4KCgkqIGxvY2FsZWFsaWFzLmM6CglGaXggdHlwbyBhbmQgc3VwZXJmbG91cyB0ZXN0LiAgUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCgpGcmkgT2N0ICA2IDExOjUyOjA1IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CglDb3JyZWN0IHNvbWUgcmVtYWluZGVyIGZyb20gdGhlIHByZS1DRU4gc3ludGF4LiAgTm93Cgl3ZSBkb24ndCBoYXZlIGEgY29uc3RhbnQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgYW55bW9yZS4KCldlZCBTZXAgMjcgMjE6NDE6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBBZGQgbGliaW50bC5oLmdsaWJjLgoKCSogTWFrZWZpbGUuaW4gKGRpc3QtbGliYyk6IEFkZCBnb2FsIGZvciBwYWNraW5nIHNvdXJjZXMgZm9yIGdsaWJjLgoJKENPTVNSQ1MsIENPTUhEUlMpOiBTcGxpdHRlZCB0byBzZXBhcmF0ZSBzb3VyY2VzIHNoYXJlZCB3aXRoIGdsaWJjLgoKCSogbG9hZG1zZ2NhdC5jOiBGb3JnZXQgdG8gY29udGludWUgI2lmIGxpbmUuCgoJKiBsb2NhbGVhbGlhcy5jOgoJW19MSUJDXTogUmVuYW1lIHN0cmNhc2VjbXAgdG8gX19zdHJjYXNlY21wIHRvIGtlZXAgQU5TSSBDIG5hbWUKCXNwYWNlIGNsZWFuLgoKCSogZGNnZXR0ZXh0LmMsIGZpbmRkb21haW4uYzogQmV0dGVyIGNvbW1lbnQgdG8gbGFzdCBjaGFuZ2UuCgoJKiBsb2FkbXNnY2F0LmM6CglbX0xJQkNdOiBSZW5hbWUgZnN0YXQsIG9wZW4sIGNsb3NlLCByZWFkLCBtbWFwLCBhbmQgbXVubWFwIHRvCglfX2ZzdGF0LCBfX29wZW4sIF9fY2xvc2UsIF9fcmVhZCwgX19tbWFwLCBhbmQgX19tdW5tYXAgcmVzcAoJdG8ga2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KCgkqIGZpbmRkb21haW4uYzoKCVtfTElCQ106IFJlbmFtZSBzdHBjcHkgdG8gX19zdHBjcHkgdG8ga2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KCgkqIGRjZ2V0dGV4dC5jOgoJW19MSUJDXTogUmVuYW1lIGdldGNlZCBhbmQgc3RwY3B5IHRvIF9fZ2V0Y3dkIGFuZCBfX3N0cGNweSByZXNwIHRvCglrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgoKCSogbGliZ2V0dGV4dC5oOgoJSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgdGhvc2Ugb2xkIFN5c1Ygc3lzdGVtcyBvdXQgdGhlcmUuCglSZXBvcnRlZCBieSBGcmFuY2VzY28gUG90b3J0aWAuCgoJKiBsb2FkbXNnY2F0LmMgKHVzZV9tbWFwKTogRGVmaW5lIGlmIGNvbXBpbGVkIGZvciBnbGliYy4KCgkqIGJpbmR0ZXh0ZG9tLmM6IEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKCXVuY29uZGl0aW9uYWxseSBpZiBfTElCQyBpcyBkZWZpbmVkLgoKCSogZmluZGRvbWFpbi5jOiBGaXggMiB0aW1lcyBkZWZpZW5kIC0+IGRlZmluZWQuCgoJKiB0ZXh0ZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KCWNvbXBpbGluZyBmb3IgZ2xpYmMuICBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzCgl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KCgkqIGxvY2FsZWFsaWFzLmMsIGxvYWRtc2djYXQuYzogUHJlcGFyZSB0byBiZSBjb21waWxlZCBpbiBnbGliYy4KCgkqIGdldHRleHQuYzoKCUluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KCUdldCBOVUxMIGZyb20gc3RkZGVmLmggaWYgd2UgY29tcGlsZSBmb3IgZ2xpYmMuCgoJKiBmaW5kZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KCWNvbXBpbGluZyBmb3IgZ2xpYmMuICBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzCgl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KCgkqIGRjZ2V0dGV4dC5jOiBJbmNsdWRlIGFsbCB0aG9zZSBzdGFuZGFyZCBoZWFkZXJzIHVuY29uZGl0aW9uYWxseQoJaWYgX0xJQkMgaXMgZGVmaW5lZC4KCgkqIGRnZXR0ZXh0LmM6IElmIGNvbXBpbGVkIGluIGdsaWJjIGluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YKCWxpYmdldHRleHQuaC4KCShsb2NhbGUuaCk6IERvbid0IHJlbHkgb24gSEFWRV9MT0NBTEVfSCB3aGVuIGNvbXBpbGluZyBmb3IgZ2xpYmMuCgoJKiBkY2dldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgoJbGliZ2V0dGV4dC5oLgoJKGdldGN3ZCk6IERvbid0IHJlbHkgb24gSEFWRV9HRVRDV0Qgd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgoKCSogYmluZHRleHRkb20uYzoKCUlmIGNvbXBpbGVkIGluIGdsaWJjIGluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oLgoKTW9uIFNlcCAyNSAyMjoyMzowNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcyk6IERvbid0IGNhbGwgYnNlYXJjaCBpZiBOTUFQIDw9IDAuCglSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KCgkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgoJU3RyaW5nIHVzZWQgaW4gcHV0ZW52IG11c3Qgbm90IGJlIHJlY3ljbGVkLgoJUmVwb3J0ZWQgYnkgTWFyY3VzIERhbmllbHMuCgoJKiBsaWJnZXR0ZXh0LmggKF9fVVNFX0dOVV9HRVRURVhUKToKCUFkZGl0aW9uYWwgc3ltYm9sIHRvIHNpZ25hbCB0aGF0IHdlIHVzZSBHTlUgZ2V0dGV4dAoJbGlicmFyeS4KCgkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgoJRml4IGJ1ZyB3aXRoIHRoZSBzdHJhbmdlIHN0cGNweSByZXBsYWNlbWVudC4KCVJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KClNhdCBTZXAgMjMgMDg6MjM6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGNhdC1jb21wYXQuYzogSW5jbHVkZSA8c3RyaW5nLmg+IGZvciBzdHBjcHkgcHJvdG90eXBlLgoKCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKCVdoaWxlIGV4cGFuZCBzdHJkdXAgY29kZSB0ZW1wb3JhcnkgdmFyaWFibGUgYGNwJyBoaWRlZAoJaGlnaGVyIGxldmVsIHZhcmlhYmxlIHdpdGggc2FtZSBuYW1lLiAgUmVuYW1lIHRvIGB0cCcuCgoJKiB0ZXh0ZG9tYWluLmMgKHRleHRkb21haW4pOgoJQXZvaWQgd2FybmluZyBieSB1c2luZyB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gc3RyZHVwIGNvZGUuCgoJKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGFwcGxpY2F0aW9uJy4KClRodSBTZXAgMjEgMTU6NTE6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgoJVXNlIHN0cmNhc2VjbXAoKSBvbmx5IGlmIGF2YWlsYWJsZS4gIEVsc2UgdXNlCglpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZS4KCgkqIGludGwtY29tcGF0LmM6CglXcmFwcGVyIGZ1bmN0aW9ucyBub3cgY2FsbCAqX18gZnVuY3Rpb25zIGluc3RlYWQgb2YgX18qLgoKCSogbGliZ2V0dGV4dC5oOiBEZWNsYXJlIHByb3RvdHlwZXMgZm9yICpfXyBmdW5jdGlvbnMgaW5zdGVhZCBmb3IgX18qLgoKCSogY2F0LWNvbXBhdC5jLCBsb2FkbXNnY2F0LmM6CglEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKCXN0YW5kYWxvbmUuCgoJKiBiaW5kdGV4dGRvbS5jOgoJRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CglvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCglzdGFuZGFsb25lLgoJUmVuYW1lIHRvIGJpbmR0ZXh0ZG9tYWluX18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KCgkqIGRnZXR0ZXh0LmM6CglSZW5hbWUgZnVuY3Rpb24gdG8gZGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgoKCSogZ2V0dGV4dC5jOgoJRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CglvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCglzdGFuZGFsb25lLgoJRnVuY3Rpb25zIG5vdyBjYWxsZWQgZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCgoJKiBkY2dldHRleHQuYywgbG9jYWxlYWxpYXMuYywgdGV4dGRvbWFpbi5jLCBmaW5kZG9tYWluLmM6CglEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKCXN0YW5kYWxvbmUuCgpTdW4gU2VwIDE3IDIzOjE0OjQ5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBmaW5kZG9tYWluLmM6IENvcnJlY3Qgc29tZSBidWdzIGluIGhhbmRsaW5nIG9mIENFTiBzdGFuZGFyZAogCWxvY2FsZSBkZWZpbml0aW9ucy4KClRodSBTZXAgIDcgMDE6NDk6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IENFTiBzeW50YXguCgoJKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKTogRXh0ZW5kIG51bWJlciBvZiBzdWNjZXNzb3JzIHRvIDMxLgoKU2F0IEF1ZyAxOSAxOToyNToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW4gKGFsaWFzcGF0aCk6IFJlbW92ZSBwYXRoIHRvIFgxMSBsb2NhbGUgZGlyLgoKCSogTWFrZWZpbGUuaW46IE1ha2UgaW5zdGFsbC1zcmMgZGVwZW5kIG9uIGluc3RhbGwuICBUaGlzIGhlbHBzCiAJZ2V0dGV4dCB0byBpbnN0YWxsIHRoZSBzb3VyY2VzIGFuZCBvdGhlciBwYWNrYWdlcyBjYW4gdXNlIHRoZQogCWluc3RhbGwgZ29hbC4KClNhdCBBdWcgMTkgMTU6MTk6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluICh1bmluc3RhbGwpOiBSZW1vdmUgc3R1ZmYgaW5zdGFsbGVkIGJ5IGluc3RhbGwtc3JjLgoKVHVlIEF1ZyAxNSAxMzoxMzo1MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogVkVSU0lPTi5pbjogSW5pdGlhbCByZXZpc2lvbi4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgoJQWRkIFZFUlNJT04gZmlsZS4gIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZ2V0dGV4dCwgYnV0Cglmb3Igb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhpcyBsaWJyYXJ5LgoKVHVlIEF1ZyAxNSAwNjoxNjo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogZ2V0dGV4dFAuaCAoX25sX2ZpbmRfZG9tYWluKToKCU5ldyBwcm90b3R5cGUgYWZ0ZXIgY2hhbmdpbmcgc2VhcmNoIHN0cmF0ZWd5LgoKCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgoJV2Ugbm93IHRyeSBvbmx5IHRvIGZpbmQgYSBzcGVjaWZpZWQgY2F0YWxvZy4gIEZhbGwgYmFjayB0byBvdGhlcgoJY2F0YWxvZ3MgbGlzdGVkIGluIHRoZSBsb2NhbGUgbGlzdCBpcyBub3cgZG9uZSBpbiBfX2RjZ2V0dGV4dC4KCgkqIGRjZ2V0dGV4dC5jIChfX2RjZ2V0dGV4dCk6CglOb3cgd2UgcHJvdmlkZSBtZXNzYWdlIGZhbGwgYmFjayBldmVuIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuCglJLmUuIGlmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlIGluIG9uZSBsYW5ndWFnZSBhbGwgdGhlIG90aGVyCiAJaW4gdGhlIGxvY2FsZSBsaXN0IGEgdHJpZWQuICBGb3JtZXJseSBmYWxsIGJhY2sgd2FzIG9ubHkgcG9zc2libGUKIAl3aXRoaW4gb25lIGxhbmd1YWdlLiAgSW1wbGVtZW50ZWQgYnkgbW92aW5nIG9uZSBsb29wIGZyb20KIAlfbmxfZmluZF9kb21haW4gdG8gaGVyZS4KCk1vbiBBdWcgMTQgMjM6NDU6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKToKCURpcmVjdG9yeSB3aGVyZSBzb3VyY2Ugb2YgR05VIGdldHRleHQgbGlicmFyeSBhcmUgbWFkZQoJYXZhaWxhYmxlLgoJKElOU1RBTEwsIElOU1RBTExfREFUQSk6IFByb2dyYW1zIHVzZWQgZm9yIGluc3RhbGxpbmcgc291cmNlcy4KCShnZXR0ZXh0LXNyYyk6IE5ldy4gIFJ1bGUgdG8gaW5zdGFsbCBHTlUgZ2V0dGV4dCBzb3VyY2VzIGZvciB1c2UgaW4KCWdldHRleHRpemUgc2hlbGwgc2NyaXB0LgoKU3VuIEF1ZyAxMyAxNDo0MDo0OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOgoJVXNlIG1tYXAgZm9yIGxvYWRpbmcgb25seSB3aGVuIG11bm1hcCBmdW5jdGlvbiBpcwoJYWxzbyBhdmFpbGFibGUuCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERlcGVuZCBvbiBgYWxsJyBnb2FsLgoKV2VkIEF1ZyAgOSAxMTowNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKCURvIG5vdCBvdmVyd3JpdGUgJ1xuJyB3aGVuIHRlcm1pbmF0aW5nIGFsaWFzIHZhbHVlIHN0cmluZy4KCgkqIGxvY2FsZWFsaWFzLmMgKHJlYWRfYWxpYXNfZmlsZSk6CglIYW5kbGUgbG9uZyBsaW5lcy4gIElnbm9yZSB0aGUgcmVzdCBub3QgZml0dGluZyBpbgoJdGhlIGJ1ZmZlciBhZnRlciB0aGUgaW5pdGlhbCBgZmdldHMnIGNhbGwuCgpXZWQgQXVnICA5IDAwOjU0OjI5IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBnZXR0ZXh0UC5oIChfbmxfbG9hZF9kb21haW4pOgoJQWRkIHByb3RvdHlwZSwgcmVwbGFjaW5nIHByb3RvdHlwZSBmb3IgX25sX2xvYWRfbXNnX2NhdC4KCgkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKCVJlbW92ZSB1bm5lZWRlZCB2YXJpYWJsZSBmaWxlbmFtZSBhbmQgZmlsZW5hbWVfbGVuLgoJKGV4cGFuZF9hbGlhcyk6IFJlbW92ZSBwcm90b3R5cGUgYmVjYXVzZSBmdW5jdGlvbnMgZG9lcyBub3QKIAlleGlzdCBhbnltb3JlLgoKCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKCUNoYW5nZSB0eXBlIG9mIGZuYW1lX2xlbiBwYXJhbWV0ZXIgdG8gaW50LgoJKHhtYWxsb2MpOiBBZGQgcHJvdG90eXBlLgoKCSogbG9hZG1zZ2NhdC5jOiBCZXR0ZXIgcHJvdG90eXBlcyBmb3IgeG1hbGxvYy4KClR1ZSBBdWcgIDggMjI6MzA6MzkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKCUFsbG93IGFsaWFzIG5hbWUgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgZm91ciBjb21wb25lbnRzLgoKCSogTWFrZWZpbGUuaW4gKGFsaWFzcGF0aCk6IE5ldyB2YXJpYWJsZS4gIFNldCB0byBwcmVsaW1pbmFyeSB2YWx1ZS4KCShTT1VSQ0VTKTogQWRkIGxvY2FsZWFsaWFzLmMuCgkoT0JKRUNUUyk6IEFkZCBsb2NhbGVhbGlhcy5vLgoKCSogZ2V0dGV4dFAuaDogQWRkIHByb3RvdHlwZSBmb3IgX25sX2V4cGFuZF9hbGlhcy4KCgkqIGZpbmRkb21haW4uYzogQWxpYXNpbmcgaGFuZGxlZCBpbiBpbnRsL2xvY2FsZWFsaWFzLmMuCgoJKiBsb2NhbGVhbGlhcy5jOiBBbGlhc2luZyBmb3IgbG9jYWxlIG5hbWVzLgoKCSogYmluZHRleHRkb20uYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MgYW5kIHhzdHJkdXAuCgpNb24gQXVnICA3IDIzOjQ3OjQyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogZ2V0dGV4dC5wZXJsIGlzIG5vdyBmb3VuZCBpbiBtaXNjLy4KCgkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgoJQ29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gIGRpcm5hbWUgcGFyYW1ldGVyIHdhcyBub3QgdXNlZC4KCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgoKCSogZ2V0dGV4dFAuaCAobG9hZGVkX2RvbWFpbik6CglOZXcgZmllbGRzIGBzdWNjZXNzb3InIGFuZCBgZGVjaWRlZCcgZm9yIG9vLCBsYXp5CgltZXNzYWdlIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uLgoKCSogZGNnZXR0ZXh0LmM6CglBZG9wdCBmb3Igb28sIGxhenkgbWVzc2FnZSBoYW5kbGlpbmcuCiAgCU5vdyB3ZSBjYW4gaW5oZXJpdCB0cmFuc2xhdGlvbnMgZnJvbSBsZXNzIHNwZWNpZmljIGxvY2FsZXMuCgkoZmluZF9tc2cpOiBOZXcgZnVuY3Rpb24uCgoJKiBsb2FkbXNnY2F0LmMsIGZpbmRkb21haW4uYzoKCUNvbXBsZXRlIHJld3JpdGUuICBJbXBsZW1lbnQgb28sIGxhenkgbWVzc2FnZSBoYW5kbGluZyA6LSkuCiAgCVdlIG5vdyBoYXZlIGFuIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYExBTkdVQUdFJyB3aXRoCiAJYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBMQ19BTEwgZm9yIHRoZSBMQ19NRVNTQUdFIGxvY2FsZS4KICAJSGVyZSB3ZSBjYW4gc2V0IGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2Ygc3BlY2lmaWNhdGlvbnMgZWFjaAogCW9mIHRoZSBmb3JtIGBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXScuCgpTYXQgQXVnICA1IDA5OjU1OjQyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBmaW5kZG9tYWluLmMgKHVuaXN0ZC5oKToKCUluY2x1ZGUgdG8gZ2V0IF9QQ19QQVRIX01BWCBkZWZpbmVkIG9uIHN5c3RlbSBoYXZpbmcgaXQuCgpGcmkgQXVnICA0IDIyOjQyOjAwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IEluY2x1ZGUgcHJvdG90eXBlLgoKCSogTWFrZWZpbGUuaW4gKGRpc3QpOiBSZW1vdmUgYGNvcHlpbmcgaW5zdGVhZCcgbWVzc2FnZS4KCldlZCBBdWcgIDIgMTg6NTI6MDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChJRCwgVEFHUyk6IERvIG5vdCB1c2UgJF4uCgpUdWUgQXVnICAxIDIwOjA3OjExIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBNYWtlZmlsZS5pbiAoVEFHUywgSUQpOiBVc2UgJF4gYXMgY29tbWFuZCBhcmd1bWVudC4KCShUQUdTKTogR2l2ZSBldGFncyAtbyBvcHRpb24gdCB3cml0ZSB0byBjdXJyZW50IGRpcmVjdG9yeSwKIAlub3QgJChzcmNkaXIpLgoJKElEKTogVXNlICQoc3JjZGlyKSBpbnN0ZWFkIG9zICQodG9wX3NyY2Rpcikvc3JjLgoJKGRpc3RjbGVhbik6IFJlbW92ZSBJRC4KClN1biBKdWwgMzAgMTE6NTE6NDYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChnbnVsb2NhbGVkaXIpOgoJTmV3IHZhcmlhYmxlLCBhbHdheXMgdXNpbmcgc2hhcmUvIGZvciBkYXRhIGRpcmVjdG9yeS4KCShERUZTKTogQWRkIEdOVUxPQ0FMRURJUiwgdXNlZCBpbiBmaW5kZG9tYWluLmMuCgoJKiBmaW5kZG9tYWluLmMgKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOgoJU2V0IHRvIEdOVUxPQ0FMRURJUiwgYmVjYXVzZSBpdCBhbHdheXMgaGFzIHRvIHBvaW50Cgl0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOVSBnZXR0ZXh0IExpYnJhcnkgd3JpdGVzIGl0IHRvLgoKCSogaW50bC1jb21wYXQuYyAodGV4dGRvbWFpbiwgYmluZHRleHRkb21haW4pOgoJVW5kZWZpbmUgbWFjcm9zIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKU2F0IEp1bCAyMiAwMToxMDowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbGliZ2V0dGV4dC5oIChfTElCSU5UTF9IKToKCVByb3RlY3QgZGVmaW5pdGlvbiBpbiBjYXNlIHdoZXJlIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBhcwoJbGliZ2V0dGV4dC5oIG9uIFNvbGFyaXMgbWFjaGluZXMuICBBZGQgY29tbWVudCBhYm91dCB0aGlzLgoKV2VkIEp1bCAxOSAwMjozNjo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogaW50bC1jb21wYXQuYyAodGV4dGRvbWFpbik6IENvcnJlY3QgdHlwby4KCldlZCBKdWwgMTkgMDE6NTE6MzUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBGdW5jdGlvbiBub3cgY2FsbGVkIF9fZGNnZXR0ZXh0LgoKCSogZGdldHRleHQuYyAoZGdldHRleHQpOiBOb3cgY2FsbGVkIF9fZGdldHRleHQgYW5kIGNhbGxzCiAJX19kY2dldHRleHQuCgoJKiBnZXR0ZXh0LmMgKGdldHRleHQpOgoJRnVuY3Rpb24gbm93IGNhbGxlZCBfX2dldHRleHQgYW5kIGNhbGxzIF9fZGdldHRleHQuCgoJKiB0ZXh0ZG9tYWluLmMgKHRleHRkb21haW4pOiBGdW5jdGlvbiBub3cgY2FsbGVkIF9fdGV4dGRvbWFpbi4KCgkqIGJpbmR0ZXh0ZG9tLmMgKGJpbmR0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZAogCV9fYmluZHRleHRkb21haW4uCgoJKiBpbnRsLWNvbXBhdC5jOiBJbml0aWFsIHJldmlzaW9uLgoKCSogTWFrZWZpbGUuaW4gKFNPVVJDRVMpOiBBZGQgaW50bC1jb21wYXQuYy4KCShPQkpFQ1RTKTogV2UgYWx3YXlzIGNvbXBpbGUgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZnVuY3Rpb25zLgogIAlPQkpFQ1RTIGNvbnRhaW5zIGFsbCBvYmplY3RzIGJ1dCBjYXQtY29tcGF0Lm8sIC4uL3BvL2NhdC1pZi10YmwubywKIAlhbmQgaW50bC1jb21wYXQuby4KICAJKEdFVFRPQkpTKTogQ29udGFpbnMgbm93IG9ubHkgaW50bC1jb21wYXQuby4KCgkqIGxpYmdldHRleHQuaDoKCVJlLWluY2x1ZGUgcHJvdGVjdGlvbiBtYXRjaGVzIGR1YWxpc3RpYyBjaGFyYWN0ZXIgb2YgbGliZ2V0dGV4dC5oLgoJRm9yIGFsbCBmdW5jdGlvbnMgaW4gR05VIGdldHRleHQgbGlicmFyeSBkZWZpbmUgX18gY291bnRlciBwYXJ0LgoKCSogZmluZGRvbWFpbi5jIChzdHJjaHIpOiBEZWZpbmUgYXMgaW5kZXggaWYgbm90IGZvdW5kIGluIEMgbGlicmFyeS4KCShfbmxfZmluZF9kb21haW4pOiBGb3IgcmVsYXRpdmUgcGF0aHMgcGFzdGUgLyBpbiBiZXR3ZWVuLgoKVHVlIEp1bCAxOCAxNjozNzo0NSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogbG9hZG1zZ2NhdC5jLCBmaW5kZG9tYWluLmM6IEFkZCBpbmNsdXNpb24gb2Ygc3lzL3R5cGVzLmguCgoJKiB4b3Blbi1tc2cuc2VkOiBGaXggYnVnIHdpdGggYG1zZ3N0ciAiIicgbGluZXMuCglBIGxpdHRsZSBiaXQgYmV0dGVyIGNvbW1lbnRzLgoKVHVlIEp1bCAxOCAwMToxODoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW46Cglwby1tb2RlLmVsLCBtYWtlbGlua3MsIGNvbWJpbmUtc2ggYXJlIG5vdyBmb3VuZCBpbiAuLi9taXNjLgoKCSogcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoLCBlbGlzcC1jb21wOgoJTW92ZWQgdG8gLi4vbWlzYy8uCgoJKiBsaWJnZXR0ZXh0LmgsIGdldHRleHRQLmgsIGdldHRleHQuaDogVW5pZm9ybSB0ZXN0IGZvciBfX1NURENfXy4KClN1biBKdWwgMTYgMjI6MzM6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBOZXcgdmFyaWFibGVzLgoJKGluc3RhbGwtZGF0YSwgdW5pbnN0YWxsKTogSW5zdGFsbC91bmluc3RhbGwgLmVsYyBmaWxlLgoKCSogcG8tbW9kZS5lbCAoSW5zdGFsbGF0aW9uIGNvbW1lbnQpOgoJQWRkIC5wb3ggYXMgcG9zc2libGUgZXh0ZW5zaW9uIG9mIC5wbyBmaWxlcy4KClN1biBKdWwgMTYgMTM6MjM6MjcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIGVsaXNwLWNvbXA6IENvbXBsZXRlIG5ldyB2ZXJzaW9uIGJ5IEZyYW5jLG9pczogVGhpcyBkb2VzIG5vdAogCWZhaWwgd2hlbiBub3QgY29tcGlsaW5nIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgoKU3VuIEp1bCAxNiAwMDoxMjoxNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW4gKC4uL3BvL2NhdC1pZC10Ymwubyk6CglVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgZm9yIHJlY3Vyc2l2ZSBtYWtlLgoKCSogTWFrZWZpbGUuaW4gKC5lbC5lbGMpOiBVc2UgJChTSEVMTCkgaW5zdGVhZCBvZiAvYmluL3NoLgoJKGluc3RhbGwtZXhlYyk6IEFkZCBtaXNzaW5nIGR1bW15IGdvYWwuCgkoaW5zdGFsbC1kYXRhLCB1bmluc3RhbGwpOiBAIGluIG11bHRpLWxpbmUgc2hlbGwgY29tbWFuZCBhdAogCWJlZ2lubmluZywgbm90IGluIGZyb250IG9mIGVjaG8uICBSZXBvcnRlZCBieSBFcmljIEJhY2t1cy4KClNhdCBKdWwgMTUgMDA6MjE6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgoJUmVuYW1lIGxpYmdldHRleHQucGVybCB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzCglmaWxlIHN5c3RlbXMuCgoJKiBnZXR0ZXh0LnBlcmw6CiAJUmVuYW1lIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMgZmlsZSBzeXN0ZW1zLgoKVGh1IEp1bCAxMyAyMzoxNzoyMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogY2F0LWNvbXBhdC5jOiBJZiAhU1REQ19IRUFERVJTIHRyeSB0byBpbmNsdWRlIG1hbGxvYy5oLgoKVGh1IEp1bCAxMyAyMDo1NTowMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogcG8ydGJsLnNlZC5pbjogUHJldHR5IHByaW50aW5nLgoKCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKCUNvcnJlY3QgYnVncyB3aXRoIGhhbmRsaW5nIHN1YnN0aXR1dGUgZmxhZ3MgaW4gYnJhbmNoZXMuCgoJKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CglPbGQgSyZSIGNvbXBpbGVycyBkb24ndCB1bmRlciBzdGFuZCBgdW5zaWduZWQgY2hhcicuCgoJKiBnZXR0ZXh0LmggKG5sc191aW50MzIpOgoJU29tZSBvbGQgSyZSIGNvbXBpbGVycyAoZWcgSFApIGRvbid0IHVuZGVyc3RhbmQgYHVuc2lnbmVkIGludCcuCgoJKiBjYXQtY29tcGF0LmMgKG1zZ190b19jYXRfaWQpOiBEZS1BTlNJLWZ5IHByb3RvdHlwZXMuCgpUaHUgSnVsIDEzIDAxOjM0OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBNYWtlZmlsZS5pbiAoRUxDRklMRVMpOiBOZXcgdmFyaWFibGUuCgkoRElTVEZJTEVTKTogQWRkIGVsaXNwLWNvbXAuCglBZGQgaW1wbGljaXQgcnVsZSBmb3IgLmVsIC0+IC5lbGMgY29tcGlsYXRpb24uCgkoaW5zdGFsbC1kYXRhKTogaW5zdGFsbCAkRUxDRklMRVMKCShjbGVhbik6IHJlbmFtZWQgcG8tdG8tdGJsIGFuZCBwby10by1tc2cgdG8gcG8ydGJsIGFuZCBwbzJtc2cgcmVzcC4KCgkqIGVsaXNwLWNvbXA6IEluaXRpYWwgcmV2aXNpb24KCldlZCBKdWwgMTIgMTY6MTQ6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KCgkqIE1ha2VmaWxlLmluOgoJY2F0LWlkLXRibC5jIGlzIG5vdyBmb3VuZCBpbiBwby8uICBUaGlzIGVuYWJsZXMgdXMgdG8gdXNlIGFuIGlkZW50aWNhbAoJaW50bC8gZGlyZWN0b3J5IGluIGFsbCBwYWNrYWdlcy4KCgkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBoYXNoaW5nIGRvZXMgbm90IHdvcmsgZm9yIHRhYmxlIHNpemUgPD0gMi4KCgkqIHRleHRkb21haW4uYzogZml4IHR5cG8gKCNpZiBkZWYgLT4gI2lmIGRlZmluZWQpCgpUdWUgSnVsIDExIDE4OjQ0OjQzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiBNYWtlZmlsZS5pbiAoc3RhbXAtY2F0LWlkKTogdXNlIHRvcF9zcmNkaXIgdG8gYWRkcmVzcyBzb3VyY2UgZmlsZXMKCShESVNURklMRVMsZGlzdGNsZWFuKTogbW92ZSB0dXBkYXRlLnBlcmwgdG8gc3JjLwoKCSogcG8tdG8tdGJsLnNlZC5pbjoKCWFkZCBhZGRpdGlvbmFsIGp1bXAgdG8gY2xlYXIgY2hhbmdlIGZsYWcgdG8gcmVjb2duaXplIG11bHRpbGluZSBzdHJpbmdzCgpUdWUgSnVsIDExIDAxOjMyOjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiB0ZXh0ZG9tYWluLmM6IFByb3RlY3QgaW5jbHVzaW9uIG9mIHN0ZGxpYi5oIGFuZCBzdHJpbmcuaC4KCgkqIGxvYWRtc2djYXQuYzogUHJvdGVjdCBpbmNsdXNpb24gb2Ygc3RkbGliLmguCgoJKiBsaWJnZXR0ZXh0Lmg6IFByb3RlY3QgaW5jbHVzaW9uIG9mIGxvY2FsZS5oLgoJQWxsb3cgdXNlIGluIEMrKyBwcm9ncmFtcy4KCURlZmluZSBOVUxMIGlzIG5vdCBoYXBwZW5lZCBhbHJlYWR5LgoKCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6IHNoaXAgcG8tdG8tdGJsLnNlZC5pbiBpbnN0ZWFkIG9mCglwby10by10Ymwuc2VkLgoJKGRpc3RjbGVhbik6IHJlbW92ZSBwby10by10Ymwuc2VkIGFuZCB0dXBkYXRlLnBlcmwuCgoJKiB0dXBkYXRlLnBlcmwuaW46IFN1YnN0aXR1dGUgUGVybCBwYXRoIGV2ZW4gaW4gZXhlYyBsaW5lLgoJRG9uJ3QgaW5jbHVkZSBlbnRyaWVzIHdpdGhvdXQgdHJhbnNsYXRpb24gZnJvbSBvbGQgLnBvIGZpbGUuCgpUdWUgSnVsICA0IDAwOjQxOjUxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CgoJKiB0dXBkYXRlLnBlcmwuaW46IHVzZSAiVXBkYXRlZDogIiBpbiBtc2dpZCAiIi4KCgkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8gKExPQ0FMRElSIC0+IExPQ0FMRURJUikuCiAJRGVmaW5lIGdldGVudiBpZiAhX19TVERDX18uCgoJKiBiaW5kdGV4dGRvbS5jOiBQcm90ZWN0IHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdXNpb24uCiAJRGVmaW5lIGZyZWUgaWYgIV9fU1REQ19fLgoKCSogZmluZGRvbWFpbi5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCgoJKiBjYXQtY29tcGF0LmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgoKTW9uIEp1bCAgMyAyMzo1NjozMCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogTWFrZWZpbGUuaW46IFVzZSBMT0NBTEVESVIgaW5zdGVhZCBvZiBERUZfTVNHX0RPTV9ESVIuCglSZW1vdmUgdW5uZWVkZWQgJChzcmNkaXIpIGZyb20gTWFrZWZpbGUuaW4gZGVwZW5kZW5jeS4KCgkqIG1ha2VsaW5rczogQWRkIGNvcHlyaWdodCBhbmQgc2hvcnQgZGVzY3JpcHRpb24uCgoJKiBwby1tb2RlLmVsOiBMYXN0IHZlcnNpb24gZm9yIDAuNy4KCgkqIHR1cGRhdGUucGVybC5pbjogRml4IGRpZSBtZXNzYWdlLgoKCSogZGNnZXR0ZXh0LmM6IFByb3RlY3QgaW5jbHVkZSBvZiBzdHJpbmcuaC4KCgkqIGdldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0ZGxpYi5oIGFuZCBmdXJ0aGVyIHRyaWVzIHRvIGdldCBOVUxMLgoKCSogZmluZGRvbWFpbi5jOiBTb21lIGNvcnJlY3Rpb25zIGluIGluY2x1ZGVzLgoKCSogTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogUHJ1bmUgbGlzdCBjb3JyZWN0IHBhdGggdG8gTWFrZWZpbGUuaW4uCgoJKiBwby10by10Ymwuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KCgkqIGxpbnV4LW1zZy5zZWQsIHhvcGVuLW1zZy5zZWQ6IEFkb3B0IGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgoKU3VuIEp1bCAgMiAyMzo1NTowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogdHVwZGF0ZS5wZXJsLmluOiBDb21wbGV0ZSByZXdyaXRlIGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgoKU3VuIEp1bCAgMiAwMjowNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgoKCSogRmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZS4gIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgY29kZQoJbmVlZGVkIHRvIGludGVybmF0aW9uYWxpemUgb3duIHBhY2thZ2VzLiAgSXQgcHJvdmlkZXMgZnVuY3Rpb25zCgl3aGljaCBhbGxvdyB0byB1c2UgdGhlIFgvT3BlbiBjYXRnZXRzIGZ1bmN0aW9uIHdpdGggYW4gaW50ZXJmYWNlCglsaWtlIHRoZSBVbmlmb3J1bSBnZXR0ZXh0IGZ1bmN0aW9uLiAgRm9yIHN5c3RlbSB3aGljaCBkb2VzIG5vdAoJaGF2ZSBuZWl0aGVyIG9mIHRob3NlIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQuCg==